/**
* @ngdoc directives
* @name Planejamento
* @module s4c.directives.planejamento.Planejamento
*
* @description
* `Planejamento` Controller do módulo de Planejamento
*
*
*/
(function () {
'use strict';
function s4cPlanejamento() {
return {
restrict: 'EA',
templateUrl: 'app/directives/planejamento/planejamento.html',
replace: true,
scope: {},
controller: planejamentoCtrl,
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.planejamentoModel.fim ? (input.val().split(' ')[0] == $scope.planejamentoModel.fim.split(' ')[0] ? $scope.planejamentoModel.fim.split(' ')[1] : false) : false
});
},
onShow: function () {
this.setOptions({
maxDate: $scope.planejamentoModel.fim ? $scope.planejamentoModel.fim.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.planejamentoModel.inicio ? (input.val().split(' ')[0] == $scope.planejamentoModel.inicio.split(' ')[0] ? $scope.planejamentoModel.inicio.split(' ')[1] : false) : false
});
},
onShow: function () {
this.setOptions({
minDate: $scope.planejamentoModel.inicio ? $scope.planejamentoModel.inicio.split(' ')[0] : false,
formatDate: 'd.m.Y'
});
}
});
$scope.input = $elem.find('.uploadArquivoDois');
$scope.inputKml = $elem.find('.uploadArquivoKml');
$scope.inputExcel = $elem.find('#excelFile');
}
};
}
planejamentoCtrl.$inject = [
'$scope',
'$q',
'PlanejamentoService',
'FileUploader',
'API_ENDPOINT',
'$mdDialog',
'ngTableParams',
'AuthService',
'CommService',
'TipoEvento',
'toasty',
'CamadasService',
'$http',
'MainState',
'PlanejamentoManager',
'BotoesManager',
'MapaManager',
'EditPTarefaManager',
'MapaService',
'BaseConhecimentoManager',
'IncidenteEnterManager',
'localize',
'PermissoesService'
];
function planejamentoCtrl($scope,
$q,
PlanejamentoService,
FileUploader,
API_ENDPOINT,
$mdDialog,
ngTableParams,
AuthService,
CommService,
TipoEvento,
toasty,
CamadasService,
$http,
MainState,
PlanejamentoManager,
BotoesManager,
MapaManager,
EditPTarefaManager,
MapaService,
BaseConhecimentoManager,
IncidenteEnterManager,
localize,
PermissoesService) {
PermissoesService.getPermissoes().then(function (perms) {
$scope.permissoesVisualizacao = perms.permissoesVisualizacao;
$scope.permissoesCriacao = perms.permissoesCriacao;
$scope.permissoesEdicao = perms.permissoesEdicao;
$scope.permissoesRemocao = perms.permissoesRemocao;
});
CommService.on('planejamentoNewDesenho', function (data) {
$scope.planejamentoModel.Camadas.push(data);
popularDesenhos();
});
$scope.terminoLTinicio = false;
$scope.res = $scope.$root.res;
var desenhando = false,
usuario = {},
novo = false,
salvo = false,
desenhos = {},
kmls = {},
editandoAtualmente = null;
$scope.$botoes = BotoesManager;
$scope.botoesItems = [{
title: 'Twitter',
icon: '/assets/images/Incidentes/ic_social_twitter_color_24px.svg',
action: function () {
$scope.planejamentoModel.tipoObjeto = 'planejamento';
var geojson = JSON.parse($scope.planejamentoModel.geojson);
var lat = geojson.coordinates[1];
var long = geojson.coordinates[0];
var info = { latitude: lat, longitude: long };
$scope.$botoes.abrirTwitter(info);
}
}, {
title: $scope.res('MAIN_MENU_MENSAGERIA'),
icon: '/assets/images/Incidentes/ic_social_telegram_color_24px.svg',
action: function () {
$scope.planejamentoModel.tipoObjeto = 'planejamento';
$scope.$botoes.abrirMensageria(true, $scope.planejamentoModel);
}
}];
$scope.openShare = false;
$scope.openOptionShare = function () {
$scope.openShare = !$scope.openShare;
};
$scope.$watch('lineColor', function (value) {
MapaManager.definirCorDaLinha(value);
});
var uploader = $scope.uploader = new FileUploader(),
listaEquals = [];
var uploaderKml = $scope.uploaderKml = new FileUploader();
$scope.uploaderKml.filters.push({
'name': 'checkIsFileKML',
'fn': function (item, evt) {
var extn = item.name.split(".").pop();
if (extn !== 'kml' && extn !== 'kmz') {
$mdDialog
.show($mdDialog.alert()
.title(localize.res('ARQUIVO_FORMATONAOPERMITIDO'))
.content(localize.res('ARQUIVO_KMLKMZINVALIDO'))
.ok(localize.res('COMUM_OK')));
return false;
} else {
return true;
}
}
});
$scope.uploader.filters.push({
'name': 'enforceMaxFileSize',
'fn': function (item, evt) {
var megaByte = parseInt(item.size / 1000000) + "MB";
if (item.size <= 26214400) {
return item.size <= 26214400
} else {
$mdDialog
.show($mdDialog.alert()
.title(localize.res('ARQUIVO_TAMANHOULTRAPASSADO'))
.content(localize.res('ARQUIVO_TAMANHOMAXIMOUPLOAD'))
.ok(localize.res('COMUM_OK')))
return item.size <= 26214400
}
}
});
$scope.tableParams = new ngTableParams({ // Parameters
page: 1,
count: 100,
sorting: {
date: 'asc'
}
}, {
counts: [],
total: 1,
});
/**
* @method deletePlanejamentoQuestion
*/
$scope.deletePlanejamentoQuestion = function (evt) {
var msgRemover = localize.getLocalizedString('COMUM_REMOVER') + ' ' + localize.getLocalizedString('PLANEJAMENTO_TITULO') + '?';
$mdDialog.show({
targetEvent: evt,
scope: $scope.$new(),
template: '<md-dialog>' +
' <md-content>' + msgRemover + '</md-content>' +
' <div class="md-actions">' +
' <md-button ng-click="deletePlanejamento()">' + localize.res('COMUM_SIM') + '</md-button>' +
' <md-button ng-click="deleteCancel()">' + localize.res('COMUM_NAO') + '</md-button>' +
' </div>' +
'</md-dialog>'
});
};
/**
* @method deleteCancel
*/
$scope.deleteCancel = function () {
$mdDialog.hide();
};
/**
* @method deletePlanejamento
*/
$scope.deletePlanejamento = function () {
$mdDialog.hide();
var geojson = JSON.parse($scope.planejamentoModel.geojson);
PlanejamentoService.findAndDelete($scope.planejamentoModel.id)
.then(function (data) {
PlanejamentoManager.fechar();
//fecharPlanejamento();
var mensagem = '';
var titulo;
if (data.message == 'PERMISSAO_EXCLUIR_PLANEJAMENTO') {
mensagem = localize.getLocalizedString(data.message);
titulo = localize.getLocalizedString('COMUM_AVISO');
}
else {
mensagem = localize.getLocalizedString('PLANEJAMENTO_TITULO') + ' ' + localize.getLocalizedString('COMUM_MENSAGEMEXCLUIDOCOMSUCESSO');
titulo = localize.getLocalizedString('COMUM_SUCESSO');
MapaManager.setView([geojson.coordinates[1], geojson.coordinates[0]], 16);
CamadasService.reloadPlanejamentos();
}
$mdDialog
.show($mdDialog.alert()
.title(titulo)
.content(mensagem)
.ok(localize.getLocalizedString('COMUM_OK')));
}, function (err) {
toasty({
msg: err.data.message
});
});
};
/**
* @method obterTiposEvento
*/
(function obterTiposEvento() {
TipoEvento
.obterTiposEvento()
.then(function (tiposEvento) {
tiposEvento = _.filter(tiposEvento, function (evento) {
return evento.status == 1;
});
$scope.tiposEvento = _.uniq(tiposEvento, 'id');
});
}());
/**
* @method date2timestamp
* @param {*} dateString
*/
function date2timestamp(dateString) {
if (!dateString) {
return;
}
var dateParts = dateString.split(' ');
var timeParts = dateParts[1].split(':');
var date;
dateParts = dateParts[0].split('/');
date = new Date(dateParts[2], parseInt(dateParts[1], 10) - 1, dateParts[0], timeParts[0], timeParts[1]);
return date.getTime();
}
/**
* @method timestamp2date
* @param {*} timestamp
*/
function timestamp2date(timestamp) {
if (!timestamp) {
return null;
}
var date = moment(parseInt(timestamp, 10)).format('DD/MM/YYYY HH:mm');
return date;
}
/**
* @method _removerDesenhosAtivos
*/
function _removerDesenhosAtivos() {
var promises = [];
_.chain(desenhos)
.keys()
.each(function (key) {
promises.push(MapaService.removerCamada(desenhos[key]));
})
.value();
desenhos = {};
promises.push(MapaService.removerControleDesenho());
return $q.all(promises);
}
/**
* @method popularDesenhos
*/
function popularDesenhos() {
_removerDesenhosAtivos().then(function () {
if ($scope.planejamentoModel.ContextoOperacional.Camada) {
var camada = $scope.planejamentoModel.ContextoOperacional.Camada;
camada.ativo = false;
toggleCamadaPlanejamento(camada);
}
var resultado = {};
_.each($scope.planejamentoModel.Camadas, function (camada) {
if (camada.tipo === 'DESENHO') {
camada.ativo = false;
toggleCamadaPlanejamento(camada);
if (camada.id) {
var _d = camada.Departamento;
resultado[_d.id] = resultado[_d.id] || {
id: _d.id,
nome: _d.nome,
data: []
};
resultado[camada.Departamento.id].data.push(camada);
} else {
resultado['novo'] = resultado['novo'] || {
id: null,
data: []
}
resultado['novo'].data.push(camada);
}
}
});
$scope.desenhos = resultado;
});
}
/**
* @method popularKmls
*/
function popularKmls() {
$scope.kmls = [];
var resultado = {};
_.each($scope.planejamentoModel.Camadas, function (camada) {
if (camada.tipo === 'KML') {
if (camada.id) {
var _d = camada.Departamento;
resultado[_d.id] = {
id: _d.id,
nome: _d.nome,
data: []
};
} else {
resultado.novo = {
id: null,
nome: localize.getLocalizedString('COMUM_NOVOARQUIVO'),
data: []
};
}
}
});
_.each($scope.planejamentoModel.Camadas, function (camada) {
if (camada.tipo === 'KML') {
if (camada.id) {
resultado[camada.Departamento.id].data.push(camada);
} else {
resultado.novo.data.push(camada);
}
}
});
$scope.kmls = resultado;
}
/* Adicionar Camada */
/**
* @method adicionarCamada
* @param {*} camada
*/
function adicionarCamada(camada) {
var geojson = MapaService.pegarGeometrias();
$mdDialog.show({
templateUrl: 'app/directives/planejamento/dialog-camada.html',
controller: function ($scope) {
$scope.res = $scope.$root.res;
$scope.camada = {
nome: camada ? camada.nome : null
};
$scope.tipo = 'Desenho';
$scope.rename = function () {
$mdDialog.hide($scope.camada.nome);
};
$scope.res = $scope.$root.res;
},
locals: {}
}).then(function (nome) {
if (camada) {
var camadaPlanejamento = _.find($scope.planejamentoModel.Camadas, {
geoJSON: camada.geoJSON
});
camadaPlanejamento.geoJSON = geojson;
camadaPlanejamento.nome = nome
} else {
$scope.planejamentoModel.Camadas.push({
nome: nome,
geoJSON: MapaService.pegarGeometrias(),
tipo: 'DESENHO',
DepartamentoId: AuthService.user.info.DepartamentoId
});
}
popularDesenhos();
desenhando = false;
editandoAtualmente = null;
MapaService.removerControleDesenho();
MapaService.removerPontosPlanejamento();
});
}
/**
* @method adicionarTarefa
* @param {*} tarefa
*/
function adicionarTarefa(tarefa) {
if (tarefa.Camada != undefined && tarefa.Camada != null) {
var camada = _.cloneDeep(tarefa.Camada);
camada.geoJSON = JSON.stringify(camada.geoJSON);
camada.departamentoId = AuthService.user.info.Departamento.id;
delete camada.objmapa;
tarefa.Camada = camada;
}
if (tarefa.dataInicio)
tarefa.dataInicio = $scope.date2timestamp(tarefa.dataInicio);
if (tarefa.dataFim)
tarefa.dataFim = $scope.date2timestamp(tarefa.dataFim);
if ($scope.planejamentoModel.Tarefas === undefined)
$scope.planejamentoModel.Tarefas = [];
// pop previus if exists:
var findBy = {
'id': tarefa.id
};
if (tarefa.id === undefined || tarefa.id == null)
findBy = {
'tempId': tarefa.tempId
};
var tarefaIndex = _.findIndex($scope.planejamentoModel.Tarefas, findBy);
if (tarefaIndex >= 0) {
$scope.planejamentoModel.Tarefas.splice(tarefaIndex, 1);
}
$scope.planejamentoModel.Tarefas.push(tarefa);
}
/**
* @method updateTarefa
* @param {*} tarefa
*/
function updateTarefa(tarefa) {
if ($scope.planejamentoModel.Tarefas === undefined)
return;
// pop previus if exists:
var findBy = {
'id': tarefa.id
};
var tarefaIndex = _.findIndex($scope.planejamentoModel.Tarefas, findBy);
if (tarefaIndex >= 0) {
$scope.planejamentoModel.Tarefas.splice(tarefaIndex, 1);
$scope.planejamentoModel.Tarefas.push(tarefa);
}
}
/**
* @method toggleKmlPlanejamento
* @param {*} camada
*/
function toggleKmlPlanejamento(camada) {
if (camada.ativo) {
PlanejamentoManager.ativarKml(API_ENDPOINT + 'camadas/' + camada.id + '/kml',
function (layer) {
kmls[camada.id] = layer;
});
} else {
MapaService.removerCamada(kmls[camada.id]);
}
}
/**
* @method toggleCamadaPlanejamento
* @param {*} camada
*/
function toggleCamadaPlanejamento(camada) {
if (typeof camada.geoJSON == 'string') {
camada.geoJSON = JSON.parse(camada.geoJSON);
}
if (camada.ativo) {
MapaService.ativarCamadaPlanejamento(camada.geoJSON).then(function (desenho) {
desenhos[JSON.stringify(desenho.feature)] = desenho.layer;
});
} else {
MapaService.removerCamada(desenhos[JSON.stringify(camada.geoJSON)]);
}
}
/**
* @method uploadArquivos
* @param {*} _planejamento
*/
function uploadArquivos(_planejamento) {
// upload de arquivos comum
if (uploader.queue.length > 0) {
uploader.url = API_ENDPOINT + 'planejamento/arq/' + _planejamento.id;
_.each(uploader.queue, function (file) {
file.formData = [{
nome: file.novonome
}]
});
uploader.uploadAll();
}
// upload de arquivos kml
if (uploaderKml.queue.length > 0) {
uploaderKml.url = API_ENDPOINT + 'planejamento/' + _planejamento.id + '/kml';
_.each(uploaderKml.queue, function (file) {
file.formData = [{
nome: file.novonome,
tipo: 'KML',
DepartamentoId: AuthService.user.info.Departamento.id
}];
});
uploaderKml.uploadAll();
}
}
$scope.tentouEnviar = false;
/**
* @method salvarPlanejamento
*/
function salvarPlanejamento() {
$scope.tentouEnviar = true;
$("#button_salvar_planejamento").prop("disabled", true);
_.find(listaEquals, function (arq) {
removerArquivo(arq);
});
var cbOk = function (_planejamento) {
salvo = true;
_removerDesenhosAtivos();
uploadArquivos(_planejamento);
//removerArquivo(listaEquals.id);
$mdDialog.show(
$mdDialog.alert()
.title(localize.getLocalizedString('COMUM_SUCESSO'))
.content(localize.getLocalizedString('PLANEJAMENTO_TITULO') + ' ' + localize.getLocalizedString('COMUM_MENSAGEM_SALVOCOMSUCESSO'))
.ariaLabel('')
.ok(localize.getLocalizedString('COMUM_OK'))
).then(function () {
CamadasService.reloadPlanejamentos();
//CamadasService.exibirPlanejamentos();
});
$scope.tentouEnviar = false;
$("#button_salvar_planejamento").prop("disabled", false);
PlanejamentoManager.fechar();
};
var cbError = function (err) {
$("#button_salvar_planejamento").prop("disabled", false);
$scope.tentouEnviar = false; //VERIFICAR SE VAI DAR ERRO;
if (err.status = 403) {
toasty({
msg: err.data.message
});
} else {
$("#button_salvar_planejamento").prop("disabled", false);
$mdDialog.show(
$mdDialog.alert()
.title(localize.getLocalizedString('COMUM_ERRO'))
.content(localize.getLocalizedString('PLANEJAMENTO_ERROAOSALVAR'))
.ariaLabel('')
.ok(localize.getLocalizedString('COMUM_OK'))
);
}
};
_salvarPlanejamento(cbOk, cbError);
}
/* Enviar Planejamento */
/**
* @method enviarPlanejamento
*/
function enviarPlanejamento() {
var cbOk = function (_planejamento) {
CamadasService.reloadPlanejamentos();
salvo = true;
_removerDesenhosAtivos();
uploadArquivos(_planejamento);
PlanejamentoService.enviarPlanejamento({
id: _planejamento.id
}).then(function (_planejamento) {
$("#button_salvar_planejamento").prop("disabled", false);
$mdDialog.show(
$mdDialog.alert()
.title(localize.getLocalizedString('COMUM_SUCESSO'))
.content(localize.getLocalizedString('PLANEJAMENTO_MENSAGEMENVIADO'))
.ariaLabel('')
.ok(localize.getLocalizedString('COMUM_OK'))
).then(function () {
PlanejamentoManager.fechar();
});
}, function (err) {
$("#button_salvar_planejamento").prop("disabled", false);
if (err.status = 403) {
toasty({
msg: err.data.message
});
PlanejamentoManager.fechar();
} else {
$mdDialog.show(
$mdDialog.alert()
.title(localize.getLocalizedString('COMUM_ERRO'))
.content(localize.getLocalizedString('PLANEJAMENTO_MENSAGEMERROAOENVIAR'))
.ariaLabel('')
.ok(localize.getLocalizedString('COMUM_OK'))
).then(function () {
PlanejamentoManager.fechar();
});
}
});
};
var cbError = function (err) {
if (err.status = 403) {
toasty({
msg: err.data.message
});
} else {
$mdDialog.show(
$mdDialog.alert()
.title(localize.getLocalizedString('COMUM_ERRO'))
.content(localize.getLocalizedString('PLANEJAMENTO_ERROAOSALVAR'))
.ariaLabel('')
.ok(localize.getLocalizedString('COMUM_OK'))
);
}
};
_salvarPlanejamento(cbOk, cbError);
}
/**
* @method _salvarPlanejamento
* @param {*} cbOk
* @param {*} cbError
*/
function _salvarPlanejamento(cbOk, cbError) {
if (!$scope.formPlanejamento.$valid) {
$("#button_salvar_planejamento").prop("disabled", false);
return;
}
var filtroPermissao = {};
filtroPermissao.objeto = "CRIAR_PLANEJAMENTO";
filtroPermissao.latitude = $scope.planejamentoModel.ponto.marker.getLatLng().lat;
filtroPermissao.longitude = $scope.planejamentoModel.ponto.marker.getLatLng().lng;
PermissoesService.verificarPermissaoAreaAtuacao(filtroPermissao)
.then(function (result) {
if (result) {
var filtros = [];
_.each($scope.planejamentoModel.Camadas, function (camada) {
if (camada.geoJSON != null && camada.geoJSON.features) {
_.each(camada.geoJSON.features, function (feature) {
filtroPermissao = {};
filtroPermissao.nome = camada.nome;
filtroPermissao.objeto = "CRIAR_PLANEJAMENTO";
filtroPermissao.geoJson = JSON.stringify(feature.geometry);
filtros.push(filtroPermissao);
});
}
});
//Verifica permissão para cada desenho feito
PermissoesService.verificarPermissaoAreaAtuacaoLista(filtros)
.then(function (listPermissoes) {
for (var i = 0; i < listPermissoes.length; i++) {
var permissao = listPermissoes[i];
if (!permissao.temPermissao) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_AVISO'))
.content(permissao.nome + ' - ' + $scope.res('PERMISSAO_AREAATUACAO_VERIFICACAO'))
.ok($scope.res('COMUM_OK')));
$("#button_salvar_planejamento").prop("disabled", false);
return;
}
}
confirmarSalvarPlanejamento(cbOk, cbError);
});
}
else {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_AVISO'))
.content($scope.res('PERMISSAO_AREAATUACAO_VERIFICACAO'))
.ok($scope.res('COMUM_OK')));
$("#button_salvar_planejamento").prop("disabled", false);
return;
}
});
}
/**
* @method confirmarSalvarPlanejamento
* @param {*} cbOk
* @param {*} cbError
*/
function confirmarSalvarPlanejamento(cbOk, cbError) {
var inicio, fim;
if ($scope.planejamentoModel.inicio) {
$scope.date2timestamp($scope.planejamentoModel.inicio);
inicio = $scope.date2timestamp($scope.planejamentoModel.inicio);
} else {
inicio = null;
}
if ($scope.planejamentoModel.fim) {
fim = $scope.date2timestamp($scope.planejamentoModel.fim);
} else {
fim = null;
}
if (fim <= inicio) {
$scope.terminoLTinicio = true;
$("#button_salvar_planejamento").prop("disabled", false);
return;
}
$scope.dateOptions = {
changeYear: true,
changeMonth: true,
yearRange: '1900:-0'
};
if ($scope.planejamentoModel.ponto) {
$scope.planejamentoModel.latitude = $scope.planejamentoModel.ponto.marker.getLatLng().lat;
$scope.planejamentoModel.longitude = $scope.planejamentoModel.ponto.marker.getLatLng().lng;
}
var camadas = _.map($scope.planejamentoModel.Camadas, function (camada) {
var _camada = _.cloneDeep(camada);
_camada.geoJSON = JSON.stringify(_camada.geoJSON);
_camada.departamentoId = AuthService.user.info.Departamento.id
delete _camada.objmapa;
return _camada;
})
_.each($scope.planejamentoModel.Camadas, function (camada) {
camada.geoJSON = JSON.stringify(camada.geoJSON);
camada.departamentoId = AuthService.user.info.Departamento.id
});
var ContextoOperacional = _.cloneDeep($scope.planejamentoModel.ContextoOperacional);
if ($scope.planejamentoModel.ContextoOperacional.Camada) {
var camada = ContextoOperacional.Camada;
camada.geoJSON = JSON.stringify(camada.geoJSON);
camada.departamentoId = AuthService.user.info.Departamento.id;
delete camada.objmapa;
ContextoOperacional.Camada = camada;
}
$scope.onTimeSet = function (newDate, oldDate) { };
_.each($scope.planejamentoModel.Tarefas, function (tarefa) {
tarefa.createdAt = null;
tarefa.updatedAt = null;
if (tarefa.Camada != null && tarefa.Camada.Departamento != null) {
tarefa.Camada.Departamento.createdAt = null;
tarefa.Camada.Departamento.updatedAt = null;
}
});
_.each(camadas, function (camada) {
if (camada.Departamento != null) {
camada.Departamento.createdAt = null;
camada.Departamento.updatedAt = null;
}
});
_.each($scope.planejamentoModel.Camadas, function (camada) {
if (camada.Departamento != null) {
camada.Departamento.createdAt = null;
camada.Departamento.updatedAt = null;
}
});
PlanejamentoService.salvarPlanejamento({
id: $scope.planejamentoModel.id,
nome: $scope.planejamentoModel.nome,
inicio: inicio,
fim: fim,
tipoEvento: $scope.planejamentoModel.tipoEvento,
camadas: camadas,
usuariosParticipantes: $scope.usuariosParticipantes,
departamentosParticipantes: $scope.departamentosParticipantes,
descricao: $scope.planejamentoModel.descricao,
latitude: $scope.planejamentoModel.latitude,
longitude: $scope.planejamentoModel.longitude,
Tarefas: $scope.planejamentoModel.Tarefas,
UsuariosParticipantes: $scope.UsuariosParticipantes,
GruposUsuariosParticipantes: $scope.GruposUsuariosParticipantes,
ContextoOperacional: ContextoOperacional
}).then(cbOk, cbError);
}
/* Abrir Planejamento */
/**
* @method abrirPlanejamento
* @param {*} obj
* @param {*} planejamento
* @param {*} _usuario
* @param {*} evt
*/
function abrirPlanejamento(obj, planejamento, _usuario, evt) {
if (BaseConhecimentoManager.ativo || IncidenteEnterManager.ativo) {
var msgModuloAberto = localize.getLocalizedString('COMUM_MENSAGEMMODULOATIVO');
var sim = localize.getLocalizedString('COMUM_SIM');
var nao = localize.getLocalizedString('COMUM_NAO');
$mdDialog.show({
targetEvent: evt,
scope: $scope.$new(),
template: '<md-dialog>' +
' <md-content>' + msgModuloAberto + '</md-content>' +
' <div class="md-actions">' +
' <md-button ng-click="$api.OpenAndClose(obj);closeModal();">' + sim + '</md-button>' +
' <md-button ng-click="closeModal()">' + nao + '</md-button>' +
' </div>' +
'</md-dialog>'
});
PlanejamentoManager.fechar();
//BaseConhecimentoManager.removeMarker();
}
desenhando = false;
usuario = _usuario;
$scope.ativo = true;
$scope.planejamentoModel = {};
$scope.planejamentoModel.Camadas = [];
$scope.planejamentoModel.Tarefas = [];
$scope.planejamentoModel.ContextoOperacional = {
Categorias: [],
Acervos: []
}
$scope.planejamentoModel.ponto = obj;
//$scope.planos = planejamento.PlanoDeAcaos;
//$scope.uploader.clearQueue();
//$scope.uploaderKml.clearQueue();
novo = true;
salvo = false;
if (planejamento) {
novo = false;
$scope.usuariosParticipantes = _.map(planejamento.participantes, function (usuario) {
usuario.usuario = true;
return usuario;
});
$scope.departamentosParticipantes = _.map(planejamento.Departamentos, function (departamento) {
departamento.departamento = true;
return departamento;
})
$scope.planejamentoModel = planejamento;
$scope.planejamentoModel.autor = $scope.planejamentoModel.criador.nome + ' - ' +
$scope.planejamentoModel.criador.Departamento.nome;
$scope.planejamentoModel.dataHoraCriacao =
moment($scope.planejamentoModel.dataHoraCriacao).format('DD/MM/YYYY - HH:mm');
$scope.planejamentoModel = planejamento;
$scope.planejamentoModel.ponto = obj;
$scope.planejamentoModel.tipoEvento = planejamento.TipoEvento.id;
$scope.planejamentoModel.inicio = timestamp2date($scope.planejamentoModel.inicio);
$scope.planejamentoModel.fim = timestamp2date($scope.planejamentoModel.fim);
if (!$scope.planejamentoModel.ContextoOperacional)
$scope.planejamentoModel.ContextoOperacional = {
Categorias: [],
Acervos: []
}
$scope.UsuariosParticipantes = planejamento.UsuariosParticipantes;
$scope.GruposUsuariosParticipantes = planejamento.GruposUsuariosParticipantes;
popularDesenhos();
popularKmls();
identifyCategorias();
} else {
popularDesenhos();
popularKmls();
}
}
/**
* @method OpenAndClose
* @param {*} obj
*/
function OpenAndClose(obj) {
if (BaseConhecimentoManager.ativo || IncidenteEnterManager.ativo) {
BaseConhecimentoManager.fechar();
IncidenteEnterManager.fechar();
}
PlanejamentoManager.abrir();
}
/**
* @method removerArquivo
* @param {*} arquivo
*/
function removerArquivo(arquivo) {
$http.delete(API_ENDPOINT + 'filemanager/' + arquivo.id)
.then(function (res) {
var index = $scope.planejamentoModel.Arquivos.indexOf(arquivo);
$scope.planejamentoModel.Arquivos.splice(index, 1);
});
}
/**
* @method identifyCategorias
*/
function identifyCategorias() {
_.each($scope.planejamentoModel.ContextoOperacional.Categorias, function (cat) {
cat.tipo = 'c';
});
_.each($scope.planejamentoModel.ContextoOperacional.Acervos, function (ace) {
ace.tipo = 'a';
});
}
/* Fechar Planejamento */
/**
* @method fecharPlanejamento
*/
function fecharPlanejamento() {
$scope.openShare = false;
_removerCamadasAtivas();
_removerDesenhosAtivos();
if (!novo) {
if ($scope.planejamentoModel.ponto) {
$scope.planejamentoModel.ponto.undraggable();
if (!salvo) {
$scope.planejamentoModel.ponto.marker.setLatLng(new L.LatLng($scope.planejamentoModel.ponto.oldLat, $scope.planejamentoModel.ponto.oldLng));
}
}
}
$scope.ativo = false;
$scope.planejamentoModel = {};
$scope.planejamentoModel.ContextoOperacional = {
Categorias: [],
Acervos: []
}
$scope.formPlanejamento.$setPristine();
$scope.formPlanejamento.$setUntouched();
$scope.UsuariosParticipantes = [];
$scope.GruposUsuariosParticipantes = [];
return desenhando;
}
/* Abrir Upload */
/**
* @method abrirUpload
*/
function abrirUpload() {
$scope.input.click();
}
/**
* @method abrirUploadKml
*/
function abrirUploadKml() {
$scope.inputKml.click();
}
/**
* @method abrirUploadExcel
*/
function abrirUploadExcel() {
$scope.inputExcel.click();
}
/**
* @method adicionarDesenho
*/
function adicionarDesenho() {
MapaService.planejar();
desenhando = true;
}
/**
* @method criarTarefa
*/
function criarTarefa() {
var tarefa = {
estado: "PENDENTE",
tempId: Date.now()
}
EditPTarefaManager.abrirTarefa(tarefa);
}
/**
* @method editarTarefa
* @param {*} tarefa
*/
function editarTarefa(tarefa) {
var tarefaCopy = angular.copy(tarefa);
if (tarefaCopy.dataInicio)
tarefaCopy.dataInicio = $scope.timestamp2date(tarefaCopy.dataInicio);
if (tarefaCopy.dataFim)
tarefaCopy.dataFim = $scope.timestamp2date(tarefaCopy.dataFim);
EditPTarefaManager.abrirTarefa(tarefaCopy);
}
/**
* @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 selecionar
* @param {*} item
*/
function selecionar(item) {
if (!item) {
return;
}
if (item.departamento) {
if (_.find($scope.departamentosParticipantes, {
'id': item.id
})) {
return;
}
$scope.departamentosParticipantes.push(item);
} else {
if (_.find($scope.usuariosParticipantes, {
'id': item.id
})) {
return;
}
$scope.usuariosParticipantes.push(item);
}
}
/**
* @method removerItemCompartilhamento
* @param {*} item
*/
function removerItemCompartilhamento(item) {
if (item.departamento) {
var agenciaIndex = _.findIndex($scope.departamentosParticipantes, {
'id': item.id
})
if (agenciaIndex < 0) {
return;
}
$scope.departamentosParticipantes.splice(agenciaIndex, 1);
} else {
var participanteIndex = _.findIndex($scope.usuariosParticipantes, {
'id': item.id
});
if (participanteIndex < 0) {
return;
}
$scope.usuariosParticipantes.splice(participanteIndex, 1);
}
}
/**
* @method suggest
* @param {*} searchTerm
*/
function suggest(searchTerm) {
var deferred = $q.defer();
/* Roda as duas promises em paralelo e chama o callback */
async.parallel([
function (callback) {
PlanejamentoService.searchDepartamentoByName(searchTerm)
.then(function (departamentos) {
var results = departamentos || [];
callback(null, _.map(results, function (departamento) {
departamento.departamento = true;
return departamento;
}));
}, function (err) {
callback(err);
});
},
function (callback) {
PlanejamentoService.searchUsuarioByName(searchTerm)
.then(function (usuarios) {
var results = usuarios || [];
callback(null, _.map(results, function (usuario) {
usuario.usuario = true;
return usuario;
}));
}, function (err) {
callback(err);
});
}
], function (err, results) {
/*
* Results[0] é o resultado da primeira promise
* Results[1] é o resultado da segunda promise
* independente de qual terminou primeiro (é asíncrono)
*/
if (err) {
// Cuidar do erro..
deferred.reject(results);
return;
}
/* Transforma results em um array
* de um só nível: */
results = _.flatten(results);
deferred.resolve(results);
});
return deferred.promise;
}
/**
* @method suggestCategorias
* @param {*} searchTerm
*/
function suggestCategorias(searchTerm) {
var deferred = $q.defer();
async.parallel([
function (callback) {
PlanejamentoService.searchCategoriaByName(searchTerm)
.then(function (departamentos) {
var results = departamentos || [];
callback(null, _.map(results, function (categoria) {
categoria.tipo = 'c';
return categoria;
}));
}, function (err) {
callback(err);
});
},
function (callback) {
PlanejamentoService.searchAcervoByName(searchTerm)
.then(function (usuarios) {
var results = usuarios || [];
callback(null, _.map(results, function (acervo) {
acervo.tipo = 'a';
return acervo;
}));
}, function (err) {
callback(err);
});
}
], function (err, results) {
/*
* Results[0] é o resultado da primeira promise
* Results[1] é o resultado da segunda promise
* independente de qual terminou primeiro (é asíncrono)
*/
if (err) {
// Cuidar do erro..
deferred.reject(results);
return;
}
/* Transforma results em um array
* de um só nível: */
results = _.flatten(results);
deferred.resolve(results);
});
return deferred.promise;
}
/**
* @method seleccionarCategoria
* @param {*} categoria
*/
function seleccionarCategoria(categoria) {
if (categoria === undefined)
return;
$scope.selectedItem = null;
$scope.searchTerm = '';
if (categoria.tipo == 'c') {
var index = _.findIndex($scope.planejamentoModel.ContextoOperacional.Categorias, {
'id': categoria.id
});
if (index >= 0) {
return;
}
$scope.planejamentoModel.ContextoOperacional.Categorias.push(categoria);
} else {
var index = _.findIndex($scope.planejamentoModel.ContextoOperacional.Acervos, {
'id': categoria.id
});
if (index >= 0) {
return;
}
$scope.planejamentoModel.ContextoOperacional.Acervos.push(categoria);
}
}
/**
* @method removerCategoria
* @param {*} categoria
*/
function removerCategoria(categoria) {
if (categoria.tipo == 'c') {
var index = _.findIndex($scope.planejamentoModel.ContextoOperacional.Categorias, {
'id': categoria.id
})
if (index < 0) {
return;
}
$scope.planejamentoModel.ContextoOperacional.Categorias.splice(index, 1);
} else {
var index = _.findIndex($scope.planejamentoModel.ContextoOperacional.Acervos, {
'id': categoria.id
})
if (index < 0) {
return;
}
$scope.planejamentoModel.ContextoOperacional.Acervos.splice(index, 1);
}
}
/**
* @method removerTarefa
* @param {*} tarefaIndex
*/
function removerTarefa(tarefaIndex) {
/*
var tarefaIndex = _.findIndex($scope.planejamentoModel.Tarefas, {
'nome': tarefa.nome
});
*/
if (tarefaIndex < 0) {
return;
}
$scope.planejamentoModel.Tarefas.splice(tarefaIndex, 1);
}
$scope.uploader.onCompleteItem = function (item, response) {
$scope.planejamentoModel = response;
};
$scope.uploader.onBeforeUploadItem = function (item) {
item.url = uploader.url;
var token = window.sessionStorage.getItem('s4cToken');
var tokenObj = JSON.parse(token);
item.headers = {
'Authorization': 'Bearer ' + tokenObj.access_token
};
item.file.name = item.novoNome + ext(item.file.name);
};
$scope.uploaderKml.onBeforeUploadItem = function (item) {
item.url = uploaderKml.url;
};
$scope.uploaderKml.onAfterAddingFile = function (item) {
$mdDialog.show({
templateUrl: 'app/directives/planejamento/dialog-camada.html',
controller: function ($scope) {
$scope.res = $scope.$root.res;
$scope.camada = {};
$scope.tipo = 'Arquivo';
$scope.rename = function () {
item.novonome = $scope.camada.nome;
$mdDialog.hide();
}
},
locals: {}
}).then(function () { }, function () {
uploaderKml.removeFromQueue(item);
});
};
$scope.closeModal = function () {
$mdDialog.hide();
}
$scope.uploader.onAfterAddingFile = function (item, evt, arquivo) {
$scope.isUploading = true;
item.novoNome = item.file.name;
console.log(listaEquals);
var hasFile = _.find($scope.planejamentoModel.Arquivos, function (arq) {
if (arq.nome === item.novoNome) {
listaEquals.push(arq);
}
return arq.nome === item.novoNome;
});
var msgArqExiste = localize.getLocalizedString('PLANEJAMENTO_MENSAGEMARQUIVOJAEXISTE');
var sim = localize.getLocalizedString('COMUM_SIM');
var nao = localize.getLocalizedString('COMUM_NAO');
if (hasFile) {
$mdDialog.show({
targetEvent: evt,
scope: $scope.$new(),
template: '<md-dialog>' +
' <md-content>' + msgArqExiste + '</md-content>' +
' <div class="md-actions">' +
' <md-button ng-click="salvarPlanejamento()">' + sim + '</md-button>' +
' <md-button ng-click="$api.fecharPlanejamento()">' + nao + '</md-button>' +
' </div>' +
'</md-dialog>'
});
}
}
$scope.uploader.onCompleteAll = function () {
$scope.isUploading = false;
};
$scope.uploader.alias = 'arquivo';
$scope.uploader.removeAfterUpload = true;
$scope.uploaderKml.alias = 'arquivo';
$scope.uploaderKml.removeAfterUpload = true;
/**
* @method ext
* @param {*} filename
*/
function ext(filename) {
var index = _.lastIndexOf(filename, '.');
return filename.substring(index, filename.length);
}
/**
* @method salvarCODesenho
*/
function salvarCODesenho() {
var camada = {
nome: 'Desenho'
};
camada.geoJSON = MapaService.pegarGeometrias();
camada.tipo = 'DESENHO';
camada.DepartamentoId = AuthService.user.info.DepartamentoId;
$scope.planejamentoModel.ContextoOperacional.Camada = camada;
popularDesenhos();
desenhando = false;
MapaService.removerControleDesenho();
MapaService.removerPontosPlanejamento();
}
/**
* @method removerCODesenho
*/
function removerCODesenho() {
_removerDesenhosAtivos();
$scope.planejamentoModel.ContextoOperacional.Camada = null;
popularDesenhos();
}
/**
* @method _removerCamadasAtivas
*/
function _removerCamadasAtivas() {
_.each($scope.planejamentoModel.Camadas, function (camada) {
camada.ativo = false;
toggleKmlPlanejamento(camada);
})
}
/**
* @method _removerCamadaFrontend
* @param {*} camada
*/
function _removerCamadaFrontend(camada) {
camada.ativo = false;
toggleCamadaPlanejamento(camada);
_.remove($scope.planejamentoModel.Camadas, {
geoJSON: camada.geoJSON
});
_.chain($scope.desenhos)
.keys()
.each(function (key) {
_.remove($scope.desenhos[key].data, {
geoJSON: camada.geoJSON
})
})
.value();
}
/**
* @method removerCamada
* @param {*} camada
* @param {*} ev
*/
function removerCamada(camada, ev) {
var confirm = $mdDialog.confirm()
.title($scope.res('COMUM_CONFIRMACAO'))
.content(localize.getLocalizedString('PLANEJAMENTO_MENSAGEMREMOVERCAMADA'))
.ariaLabel(localize.getLocalizedString('PLANEJAMENTO_MENSAGEMREMOVERCAMADA'))
.targetEvent(ev)
.ok(localize.getLocalizedString('COMUM_SIM'))
.cancel(localize.getLocalizedString('COMUM_NAO'));
$mdDialog.show(confirm)
.then(function () {
if (camada.id) {
PlanejamentoService.removerCamada(camada.id).then(function () {
_removerCamadaFrontend(camada);
});
} else {
_removerCamadaFrontend(camada);
}
if (camada == editandoAtualmente) {
MapaService.removerControleDesenho();
MapaService.removerPontosPlanejamento();
}
});
}
/**
* @method editarCamada
* @param {*} camada
*/
function editarCamada(camada) {
editandoAtualmente = camada;
camada.disabled = true;
MapaService.planejar(null, {
camadaPlanejamento: camada,
layer: desenhos[JSON.stringify(camada.geoJSON)]
});
};
/**
* @method download
* @param {*} id
* @param {*} fileName
*/
function download(id, fileName) {
$http.get('/filemanager/checkexistence/' + id)
.then(function (response) {
if (response.data) {
PlanejamentoService.getAttachedFile(id)
.then(function (data) {
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
var file = new Blob([data], { type: 'application/octet-stream' });
var fileURL = URL.createObjectURL(file);
a.href = fileURL;
a.download = fileName;
a.click();
});
}
else {
$mdDialog
.show($mdDialog.alert()
.title(localize.getLocalizedString('COMUM_ERRO'))
.content(response.data.message)
.ok(localize.getLocalizedString('COMUM_OK')));
}
}, function (err) {
$mdDialog
.show($mdDialog.alert()
.title(localize.getLocalizedString('COMUM_ERRO'))
.content(err.data.message)
.ok(localize.getLocalizedString('COMUM_OK')));
});
}
angular.extend($scope, {
ativo: false,
isUploading: false,
planejamentoModel: {
Camadas: [],
Tarefas: [],
ContextoOperacional: {
Categorias: [],
Acervos: []
}
},
GruposUsuariosParticipantes: [],
UsuariosParticipantes: [],
selecionar: selecionar,
planejamentoArray: [],
suggest: suggest,
salvarPlanejamento: salvarPlanejamento,
enviarPlanejamento: enviarPlanejamento,
abrirUpload: abrirUpload,
abrirUploadKml: abrirUploadKml,
abrirUploadExcel: abrirUploadExcel,
date2timestamp: date2timestamp,
download: download,
timestamp2date: timestamp2date,
toggleCamadaPlanejamento: toggleCamadaPlanejamento,
toggleKmlPlanejamento: toggleKmlPlanejamento,
adicionarDesenho: adicionarDesenho,
criarTarefa: criarTarefa,
editarTarefa: editarTarefa,
removerItemCompartilhamento: removerItemCompartilhamento,
desenhos: [],
kmls: [],
me: AuthService.user.info,
suggestCategorias: suggestCategorias,
seleccionarCategoria: seleccionarCategoria,
removerCategoria: removerCategoria,
removerCODesenho: removerCODesenho,
editarCamada: editarCamada,
removerCamada: removerCamada,
removerArquivo: removerArquivo,
changeColor: changeColor,
$api: {
abrirPlanejamento: abrirPlanejamento,
fecharPlanejamento: fecharPlanejamento,
OpenAndClose: OpenAndClose,
adicionarCamada: adicionarCamada,
adicionarTarefa: adicionarTarefa,
removerTarefa: removerTarefa,
updateTarefa: updateTarefa,
salvarCODesenho: salvarCODesenho
},
res: $scope.$root.res
});
MainState.registerDirective('planejamento', $scope.$api);
$scope.$on('$destroy', function () {
MainState.unregisterDirective('planejamento');
});
}
s4cPlanejamento.$inject = [];
angular.module('s4c.components.planejamento')
.directive('s4cPlanejamento', s4cPlanejamento);
}());