/**
* @ngdoc managers
* @name RotasManager
* @module s4c.managers.RotasManager
*
* @description
* `RotasManager` Componente para comunicação entre uma página html qualquer e o controller da diretiva
*
*
*/
(function () {
'use strict';
function RotasManager(MainState, RotasService, $mdDialog, localize, MapaService) {
var service = {
'ativo': false,
'zindex': 30,
'rotaAtiva': {},
'desenhoAtivo': {},
/**
* @method desenharPoligono
* @param {*} data
*/
'desenharPoligono': function (data) {
MapaService.desenharPoligono(data);
},
/**
* @method voarParaObjeto
* @param {*} obj
*/
'voarParaObjeto': function (obj) {
var coords = JSON.parse(obj.geojson);
MapaService.flyTo(coords);
},
/**
* @method deletar
*/
'deletar': function () {
if (this.rotaAtiva.id) {
var rotaId = this.rotaAtiva.id;
var confirm = $mdDialog.confirm()
.title(localize.res('ROTA_DESEJA_EXCLUIR'))
.content(localize.res('PRESET_CONFIRMAR_SALVAR_MENSAGEM'))
.ariaLabel(localize.res('ROTA_EXCLUIR'))
.ok(localize.res('COMUM_OK'))
.cancel(localize.res('COMUM_CANCELAR'));
$mdDialog.show(confirm).then(function () {
RotasService
.deletarRota(rotaId)
.then(function () {
$mdDialog
.show($mdDialog.alert()
.title(localize.res('COMUM_SUCESSO'))
.content(localize.res('ROTA_DELETADA_SUCESSO'))
.ok(localize.res('COMUM_OK')));
var rotas = MainState.getDirective('rotas');
MapaService.removerRotasDesenhadas();
if (rotas) {
rotas.atualizarRotas();
}
service.fechar();
},
function (err) {
if (err.status = 403) {
$mdDialog.show(
$mdDialog.alert()
.title(localize.res('COMUM_ERRO'))
.content(localize.res('SOMENTE_AUTOR_DELETAR'))
.ariaLabel('')
.ok(localize.res('COMUM_OK'))
);
} else {
$mdDialog.show(
$mdDialog.alert()
.title(localize.res('COMUM_ERRO'))
.content(localize.res('ROTA_NAO_ENCONTRADA'))
.ariaLabel('')
.ok(localize.res('COMUM_OK'))
);
}
});
});
}
},
/**
* @method editar
* @param {*} rota
*/
'editar': function (rota) {
this.ativo = true;
this.rotaAtiva = {
'criador': rota.criador.nome,
'nome': rota.nome,
'descricao': rota.descricao,
'origem': rota.origem,
'destino': rota.destino,
'id': rota.id,
'tempo_regular': rota.RotaLeituras[0].regularTime,
'tempo_atual': rota.RotaLeituras[0].currentTime,
'cor': RotasService.pegarCor(rota),
DepartamentoId: rota.DepartamentoId
};
this.rotaAtiva.modo = 'edicao';
this.rotaAtiva.loading = true;
this.rotaAtiva.pontos = converteRotaTrechos(rota.RotaTrechos);
RotasService.pegarDetalhamento(rota.id)
.then(function (detalhamentoData) {
this.rotaAtiva.areasAtuacaoPorLabel = detalhamentoData.areasAtuacaoPorLabel;
this.rotaAtiva.incidentes = detalhamentoData.incidentes;
this.rotaAtiva.bases = detalhamentoData.bases;
this.rotaAtiva.cameras = detalhamentoData.cameras;
this.rotaAtiva.loading = false;
}.bind(this), function () {
this.rotaAtiva.loading = false;
}.bind(this));
RotasService.getAlarmesRota(rota.id)
.then(function (response) {
this.rotaAtiva.alarmes = response.data;
}.bind(this));
MainState.detalhamentosAtivos.rotas = this;
RotasService.atualizarPontos(this.rotaAtiva.pontos);
function converteRotaTrechos(trechos) {
var pontos = [];
angular.forEach(trechos, function (trecho) {
var ponto1 = {
latLng: {
lat: trecho.de.coordinates[0],
lng: trecho.de.coordinates[1]
}
};
var ponto2 = {
latLng: {
lat: trecho.para.coordinates[0],
lng: trecho.para.coordinates[1]
}
}
pontos.push(ponto1);
pontos.push(ponto2);
});
return pontos;
}
},
/**
* @method abrir
*/
'abrir': function () {
this.ativo = true;
this.rotaAtiva = {
modo: 'criacao'
};
MapaService.desenharRota();
MainState.detalhamentosAtivos.rotas = this;
},
/**
* @method fechar
*/
'fechar': function () {
this.ativo = false;
MapaService.removerRouter();
delete MainState.detalhamentosAtivos.rotas;
},
/**
* @method reloadAlarmes
*/
'reloadAlarmes': function () {
RotasService.getAlarmesRota(this.rotaAtiva.id)
.then(function (response) {
this.rotaAtiva.alarmes = response.data;
}.bind(this));
},
/**
* @method removerPonto
* @param {*} index
*/
'removerPonto': function (index) {
MapaService.removerPonto(index);
},
/**
* @method addAlarmeRange
* @param {*} rota
* @param {*} alarme
*/
'addAlarmeRange': function (rota, alarme) {
$mdDialog.show({
templateUrl: 'app/directives/adicionar-rotas/dialog-alarme-range.html',
locals: {
rota: rota,
alarme: alarme
},
controller: ['$scope', '$mdDialog', addAlarmeRangeCtrl.bind(this)]
});
function addAlarmeRangeCtrl($scope, $mdDialog) {
$scope.res = $scope.$root.res;
$scope.saving = false;
if (!alarme.detalhes) {
alarme.detalhes = {};
}
var ranges = alarme.detalhes.ranges || [];
var range = {};
$scope.closeDialog = function () {
this.openAlarmeDialog(rota, alarme);
}.bind(this);
$scope.addRange = function () {
$scope.saving = true;
range.start = ($scope.range.start) ? moment($scope.range.start, 'DD/MM/YYYY HH:mm').format() : '';
range.end = ($scope.range.end) ? moment($scope.range.end, 'DD/MM/YYYY HH:mm').format() : '';
ranges.push(range);
alarme.detalhes.ranges = ranges;
this.openAlarmeDialog(rota, alarme);
}.bind(this);
}
},
/**
* @method openAlarmeDialog
* @param {*} rota
* @param {*} alarme
*/
'openAlarmeDialog': function (rota, alarme) {
$mdDialog.show({
templateUrl: 'app/directives/adicionar-rotas/dialog-alarme.html',
locals: {
alarme: alarme
},
controller: ['$scope', '$mdDialog', addAlarmeCtrl.bind(this)]
});
function addAlarmeCtrl($scope, $mdDialog) {
$scope.res = $scope.$root.res;
$scope.sending = false;
$scope.alarme = alarme || {};
$scope.rota = rota || {};
$scope.addAlarmeRange = this.addAlarmeRange.bind(this);
$scope.removeRange = function (index) {
$scope.alarme.detalhes.ranges.splice(index, 1);
};
$scope.closeDialog = function () {
$mdDialog.hide();
};
$scope.saveAlarme = function (alarme) {
$scope.sending = true;
$scope.formAddAlarmeRota.nome.$touched = true;
if ($scope.formAddAlarmeRota.$valid) {
alarme.tipo = 'IncidenteRota';
if (!alarme.id) {
RotasService.addAlarmeRota(rota.id, alarme)
.then(function (response) {
$scope.sending = false;
this.reloadAlarmes();
$scope.closeDialog();
}.bind(this));
} else {
RotasService.updateAlarmeRota(alarme)
.then(function (response) {
$scope.sending = false;
this.reloadAlarmes();
$scope.closeDialog();
}.bind(this));
}
}
}.bind(this);
}
},
/**
* @method deleteAlarme
* @param {*} alarme
*/
'deleteAlarme': function (alarme) {
RotasService.deleteAlarmeRota(alarme.id)
.then(function (response) {
this.reloadAlarmes();
}.bind(this));
}
};
return service;
}
RotasManager.$inject = ['MainState', 'RotasService', '$mdDialog', 'localize', 'MapaService'];
angular.module('s4c.managers')
.service('RotasManager', RotasManager);
})();