/**
* @ngdoc directives
* @name editPlanejamentoTarefa
* @module s4c.directives.PlanejamentoTarefa.editPlanejamentoTarefa
*
* @description
* `PlanejamentoTarefa` Controller das tarefas do módulo de planejamento
*
*
*/
(function () {
'use strict';
function s4cEditPlanejamentoTarefa() {
return {
restrict: 'EA',
templateUrl: 'app/directives/planejamento-tarefa/edit-planejamento-tarefa.html',
controller: editPlanejamentoTarefaCtrl,
link: function ($scope, $elem, $attrs) {
$scope.res = $scope.$root.res;
$scope.timeStep = 30;
$scope.startDatetimepicker = $elem.find('#startDatetimepicker');
var language;
if ($scope.res("COMUM_LOCALE") == "pt-BR") {
language = 'pt-BR';
} else {
language = 'en';
}
$scope.startDatetimepicker.datetimepicker({
theme: 'dark',
format: 'd/m/Y H:i',
lang: language,
step: $scope.timeStep,
onChangeDateTime: function (dp, input) {
this.setOptions({
maxTime: $scope.pTarefaModel.dataFim ? (input.val().split(' ')[0] == $scope.pTarefaModel.dataFim.split(' ')[0] ? $scope.pTarefaModel.dataFim.split(' ')[1] : false) : false
});
},
onShow: function () {
this.setOptions({
maxDate: $scope.pTarefaModel.dataFim ? $scope.pTarefaModel.dataFim.split(' ')[0] : false,
formatDate: 'd.m.Y',
});
}
});
$scope.endDatetimepicker = $elem.find('#endDatetimepicker');
$scope.endDatetimepicker.datetimepicker({
theme: 'dark',
format: 'd/m/Y H:i',
lang: language,
step: $scope.timeStep,
onChangeDateTime: function (dp, input) {
this.setOptions({
minTime: $scope.pTarefaModel.dataInicio ? (input.val().split(' ')[0] == $scope.pTarefaModel.dataInicio.split(' ')[0] ? $scope.pTarefaModel.dataInicio.split(' ')[1] : false) : false
});
},
onShow: function () {
this.setOptions({
minDate: $scope.pTarefaModel.dataInicio ? $scope.pTarefaModel.dataInicio.split(' ')[0] : false,
formatDate: 'd.m.Y'
});
}
});
$scope.$parent.$directives = $scope.$parent.$directives || {};
if ($scope.$parent.$directives['pTarefa']) {
throw 'Directive name already in use!';
}
$scope.$parent.$directives['pTarefa'] = $scope.$api;
$scope.$on('$destroy', function () {
$scope.$parent.$directives['pTarefa'] = undefined;
});
}
};
}
function editPlanejamentoTarefaCtrl($rootScope,
$scope,
$q,
PlanejamentoService,
FileUploader,
API_ENDPOINT,
$mdDialog,
PlanejamentoDesenhoService,
ngTableParams,
AuthService,
CommService,
TipoEvento,
toasty,
CamadasService,
MainState,
PlanejamentoManager,
EditPTarefaManager,
$http,
$filter,
MapaService) {
CommService.on('tarefa:update', function (data) {
var tarefaCopy = angular.copy(data);
//Update planejamento popup
var planejamento = MainState.getDirective('planejamento');
planejamento.updateTarefa(tarefaCopy);
//Update terminal popup
var terminal = MainState.getDirective('terminal');
terminal.updateTarefa(tarefaCopy);
// Update tarefa popup
if (editing
&& $scope.pTarefaModel.id == data.id) {
if (data.dataInicio)
data.dataInicio = $filter('timestamp2datetime')(data.dataInicio);
if (data.dataFim)
data.dataFim = $filter('timestamp2datetime')(data.dataFim);
abrirTarefa(data, $scope.viewMode);
}
});
var desenhando = false;
var viewFileOnMap = false;
var editing = false;
/**
* @method abrirTarefa
* @param {*} tarefa
* @param {*} viewMode
*/
function abrirTarefa(tarefa, viewMode) {
editing = true;
desenhando = false;
$scope.readonly = false;
$scope.viewMode = viewMode ? true : false;
$scope.dirty = false;
perguntaOnEdition = null;
$scope.editingPergunta = false;
if (tarefa === undefined)
$scope.pTarefaModel = {};
else {
$scope.pTarefaModel = tarefa;
if (tarefa.estado != 'PENDENTE' || viewMode)
$scope.readonly = true;
popularDesenho();
}
viewFileOnMap = false;
}
/**
* @method fecharTarefa
*/
function fecharTarefa() {
editing = false;
removerDesenhoAtivo();
$scope.pTarefaModel = {};
if (viewFileOnMap) {
MapaService.removerPoiClicado();
}
return desenhando;
}
/**
* @method changeColor
* @param {*} pTarefaModel
*/
function changeColor(pTarefaModel) {
function toUpperCase(val) {
if (val)
return val.toUpperCase();
else
return "";
}
var estadosFechada = ["FECHADA", "ENTREGUE", "EXECUTADA", "CONCLUIDA"];
var estadosAberta = ["PENDENTE"];
var estadosCancelada = ["CANCELADA"];
if (estadosFechada.indexOf(toUpperCase(pTarefaModel.estado)) >= 0) {
return { 'background-color': '#8AC249' };
} else if (estadosAberta.indexOf(toUpperCase(pTarefaModel.estado)) >= 0) {
return { 'background-color': '#F34235' };
} else if (estadosCancelada.indexOf(toUpperCase(pTarefaModel.estado)) >= 0) {
return { 'background-color': '#862490' };
}
}
/**
* @method salvarTarefa
*/
function salvarTarefa() {
$scope.dirty = true;
if (!$scope.formTarefa.$valid) {
return;
}
if (!$scope.pTarefaModel.Usuario) {
return;
}
if (!$scope.pTarefaModel.Camada) {
return;
}
var planejamento = MainState.getDirective('planejamento');
planejamento.adicionarTarefa($scope.pTarefaModel);
EditPTarefaManager.fechar();
}
/**
* @method getUsuarioMatches
* @param {*} query
*/
function getUsuarioMatches(query) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'usuarios/find/' + query)
.then(function (res) {
if (_.isEmpty(res.data)) {
deferred.resolve([]);
} else {
deferred.resolve($filter('filter')(res.data, { 'imei': '' }));
}
});
return deferred.promise;
};
/**
* @method selecionarUsuario
* @param {*} usuario
*/
function selecionarUsuario(usuario) {
$scope.pTarefaModel.Usuario = usuario;
$scope.searchText = '';
}
/**
* @method removerUsuario
*/
function removerUsuario() {
$scope.pTarefaModel.Usuario = null;
}
/**
* @method editarDesenho
*/
function editarDesenho() {
EditPTarefaManager.iniciarEditorDesenho();
desenhando = true;
}
/* Salvar Camada */
/**
* @method salvarDesenho
* @param {*} cb
*/
function salvarDesenho(cb) {
var camada = {
nome: 'Desenho'
};
camada.geoJSON = PlanejamentoManager.pegarGeometrias();
//camada.pontosDaRota = PlanejamentoManager.pegarPontosDaRota();
camada.tipo = 'DESENHO';
camada.DepartamentoId = AuthService.user.info.DepartamentoId;
$scope.pTarefaModel.Camada = camada;
popularDesenho();
desenhando = false;
cb();
}
/**
* @method popularDesenho
*/
function popularDesenho() {
var resultado = {};
removerDesenhoAtivo();
var camada = $scope.pTarefaModel.Camada;
if (camada != undefined && camada.tipo === 'DESENHO') {
camada.ativo = true;
ativarDesenho(camada);
resultado['novo'] = resultado['novo'] || {
id: null,
nome: 'Novo desenho',
data: []
}
resultado['novo'].data.push(camada);
}
$scope.desenhos = resultado;
}
/**
* @method removerDesenhoAtivo
*/
function removerDesenhoAtivo() {
_.each(Object.keys($scope.desenhos), function (key) {
var desenho = $scope.desenhos[key];
var camadas = desenho.data;
_.each(camadas, function (camada) {
if (camada.objmapa) {
camada.objmapa.clearLayers();
}
if (camada.pontosDaRota) {
camada.pontosDaRota.router.setWaypoints([]);
}
});
});
$scope.desenhos = {};
}
/**
* @method ativarDesenho
* @param {*} camada
*/
function ativarDesenho(camada) {
if (typeof camada.geoJSON === 'string') {
camada.geoJSON = JSON.parse(camada.geoJSON);
}
EditPTarefaManager.ativarDesenho(camada, function (obj) {
camada.objmapa = obj;
});
}
var perguntaOnEdition = null;
/**
* @method newPergunta
*/
function newPergunta() {
$scope.pergunta = {};
perguntaOnEdition = null;
$scope.editingPergunta = true;
}
/**
* @method adicionarPergunta
*/
function adicionarPergunta() {
if (!$scope.formPergunta.$valid) {
return;
}
if ($scope.pergunta.tipo == 'TIPO_ENUM'
&& !$scope.pergunta.opcoes) {
return;
}
if (!$scope.pTarefaModel.Questoes)
$scope.pTarefaModel.Questoes = [];
if (perguntaOnEdition != null)
removerPergunta(perguntaOnEdition);
$scope.pTarefaModel.Questoes.push(angular.copy($scope.pergunta));
$scope.editingPergunta = false;
}
/**
* @method editarPergunta
* @param {*} pergunta
*/
function editarPergunta(pergunta) {
$scope.tipoLabel = obtenerTipo(pergunta.tipo);
$scope.pergunta = angular.copy(pergunta);
perguntaOnEdition = pergunta;
$scope.editingPergunta = true;
}
/**
* @method removerPergunta
* @param {*} pergunta
*/
function removerPergunta(pergunta) {
var index = $scope.pTarefaModel.Questoes.indexOf(pergunta);
if (index < 0) {
return;
}
$scope.pTarefaModel.Questoes.splice(index, 1);
}
/**
* @method voarParaLocalizacao
* @param {*} geojson
*/
function voarParaLocalizacao(geojson) {
MapaService.piscarAzul({
lat: geojson.geometry.coordinates[1],
lng: geojson.geometry.coordinates[0],
});
MapaService.flyTo(geojson);
viewFileOnMap = true;
}
/**
* @method abrirImagem
* @param {*} url
*/
function abrirImagem(url) {
$mdDialog.show({
template:
'<md-dialog aria-label="Detalhes imagem" style="max-with: 500px; max-height: 870px; overflow: scroll;">' +
'<md-dialog-content>' +
'<img src="' + url + '" style="height:750px;" /> ' +
'</md-dialog-content>' +
'<div class="md-actions">' +
'<md-button ng-click="closeDialog()" class="md-primary">Fechar</md-button>' +
'</div>' +
'</md-dialog>',
locals: {
items: $scope.items
},
controller: function ($scope, $mdDialog) {
$scope.closeDialog = function () {
$mdDialog.hide();
};
}
});
};
/**
* @method abrirVideo
* @param {*} url
*/
function abrirVideo(url) {
$mdDialog.show({
template:
'<md-dialog aria-label="Detalhes video" style="max-with: 660px; max-height: 600px; overflow: scroll;">' +
'<md-dialog-content>' +
'<video width="640" height="480" controls autoplay style="margin:10px;">' +
'<source src="' + url + '" type="video/mp4">' +
'<source src="' + url + '" type="video/ogg">' +
'<source src="' + url + '" type="video/webm">' +
'Your browser does not support the video tag.' +
'</video>' +
'</md-dialog-content>' +
'<div class="md-actions">' +
'<md-button ng-click="closeDialog()" class="md-primary">Fechar</md-button>' +
'</div>' +
'</md-dialog>',
locals: {
items: $scope.items
},
controller: function ($scope, $mdDialog) {
$scope.closeDialog = function () {
$mdDialog.hide();
};
}
});
};
/**
* @method obtenerTipo
* @param {*} id
*/
function obtenerTipo(id) {
var label = "";
$scope.tiposPergunta.forEach(function (tipo) {
if (tipo.id == id)
label = tipo.label;
});
return label;
}
angular.extend($scope, {
pTarefaModel: {},
pergunta: {},
salvarTarefa: salvarTarefa,
getUsuarioMatches: getUsuarioMatches,
selecionarUsuario: selecionarUsuario,
removerUsuario: removerUsuario,
desenhos: [],
editarDesenho: editarDesenho,
newPergunta: newPergunta,
adicionarPergunta: adicionarPergunta,
removerPergunta: removerPergunta,
editarPergunta: editarPergunta,
voarParaLocalizacao: voarParaLocalizacao,
abrirImagem: abrirImagem,
abrirVideo: abrirVideo,
changeColor: changeColor,
$api: {
abrirTarefa: abrirTarefa,
fecharTarefa: fecharTarefa,
salvarDesenho: salvarDesenho
},
editingPergunta: false,
tiposPergunta: [
{ id: 'TIPO_TEXTO', label: 'Texto' },
{ id: 'TIPO_ENUM', label: 'Opções' },
{ id: 'TIPO_BOOLEANO', label: 'Booleano' },
{ id: 'TIPO_NUMERO', label: 'Numero' },
{ id: 'TIPO_TEXTO_LONGO', label: 'Texto longo' }
]
});
MainState.registerDirective('pTarefa', $scope.$api);
$scope.$on('$destroy', function () {
MainState.unregisterDirective('pTarefa');
});
}
editPlanejamentoTarefaCtrl.$inject = [
'$rootScope',
'$scope',
'$q',
'PlanejamentoService',
'FileUploader',
'API_ENDPOINT',
'$mdDialog',
'PlanejamentoDesenhoService',
'ngTableParams',
'AuthService',
'CommService',
'TipoEvento',
'toasty',
'CamadasService',
'MainState',
'PlanejamentoManager',
'EditPTarefaManager',
'$http',
'$filter',
'MapaService'
];
s4cEditPlanejamentoTarefa.$inject = [];
angular.module('s4c.components.planejamento', ['angular-toasty'])
.directive('s4cEditPlanejamentoTarefa', s4cEditPlanejamentoTarefa);
function toUpperCase(val) {
if (val)
return val.toUpperCase();
else
return "";
}
var estadosFechada = ["FECHADA", "ENTREGUE", "EXECUTADA", "CONCLUIDA"];
angular.module('s4c.components.planejamento')
.filter('tarefaFechada', function () {
return function (estado) {
if (estadosFechada.indexOf(toUpperCase(estado)) >= 0)
return true;
else return false;
};
});
angular.module('s4c.components.planejamento')
.filter('tarefasFechadas', function () {
return function (tarefas) {
var filtered = [];
angular.forEach(tarefas, function (tarefa) {
if (estadosFechada.indexOf(toUpperCase(tarefa.estado)) >= 0) {
filtered.push(tarefa);
}
});
return filtered;
};
});
angular.module('s4c.components.planejamento')
.filter('tarefasAbiertas', function () {
return function (tarefas) {
var filtered = [];
angular.forEach(tarefas, function (tarefa) {
if (estadosFechada.indexOf(toUpperCase(tarefa.estado)) < 0) {
filtered.push(tarefa);
}
});
return filtered;
};
});
}());