/**
* @ngdoc directives
* @name adicionar-rotas
* @module s4c.directive.adicionar-rotas
*
* @description `adicionarRotasCtrl` mostra as informações de uma Rota
* existente no sistema ou informações de uma Rota sendo
* desenhada no momento.
*
*@example <s4c-adicionar-rotas> </s4c-adicionar-rotas>
*/
(function () {
'use strict';
adicionarRotasCtrl.$inject = ['$scope',
'$state',
'RotasService',
'MapaManager',
'CamadasService',
'IncidentesManager',
'$mdDialog',
'Base',
'$q',
'MainState',
'RotasManager',
'CommService',
'RotasFilter',
'PermissoesService',
'toasty',
'Departamento',
'MapaService'];
function adicionarRotasCtrl($scope,
$state,
RotasService,
MapaManager,
CamadasService,
IncidentesManager,
$mdDialog,
Base,
$q,
MainState,
RotasManager,
CommService,
RotasFilter,
PermissoesService,
toasty,
Departamento,
MapaService) {
/**
* Obtem a lista de Permissões
*
* @method getPermissoes
*
*
*/
PermissoesService.getPermissoes().then(function (perms) {
$scope.permissoesVisualizacao = perms.permissoesVisualizacao;
$scope.permissoesCriacao = perms.permissoesCriacao;
$scope.permissoesEdicao = perms.permissoesEdicao;
$scope.permissoesRemocao = perms.permissoesRemocao;
$scope.permissoesExtras = perms.permissoesExtras;
});
$scope.res = $scope.$root.res;
//Apenas para criação de rotas.
/**
* Verifica se há novos pontos na rota
*
* @method watch
* @param newVal {String} novo valor
* @param oldVal {String} valor antigo
*
*/
$scope.$watch('RotasManager.rotaAtiva.pontos', function (newArray, oldArray) {
angular.forEach(newArray, function (ponto) {
if (ponto.endereco && ponto.endereco.geometry) {
ponto.latLng.lat = ponto.endereco.geometry.location.lat();
ponto.latLng.lng = ponto.endereco.geometry.location.lng();
ponto.endereco = ponto.endereco.formatted_address;
atualizarMapa();
return;
}
});
}, true);
/**
* Formulário com as informações da rota
*
* @property formRota
* @type Object
*/
$scope.formRota = {};
/**
* Verifica se o nome da rota foi alterado
*
* @method watch
* @param newVal {String} novo valor
* @param oldVal {String} valor antigo
*
*/
$scope.$watch('RotasManager.rotaAtiva.nome', function (newVal, oldVal) {
if (newVal && newVal.length > 0) {
if ($scope.formRota.nome) {
$scope.formRota.nome.error.required = false;
$scope.formRota.nome.touch = false;
}
}
});
/**
* Lista de agências
*
* @property agencias
* @type Array
*/
$scope.agencias = [];
/**
* Obtem a lista de agências
*
* @method getAgencias
*
*/
Departamento.getAgencias()
.then(function (agencias) {
$scope.agencias = agencias;
});
$scope.ponto;
/**
* Atualiza o mapa
*
* @method atualizarMapa
*
*/
function atualizarMapa() {
var rotaAtiva = MapaService.obterRotaAtiva();
rotaAtiva.setWaypoints(RotasManager.rotaAtiva.pontos);
}
/**
* Abre o mosaico de câmeras
*
* @method abrirCamerasMosaico
* @param cameras {String} Json com as informações das cameras que serão exibidas
*
*/
function abrirCamerasMosaico(cameras) {
cameras = cameras.filter(function (camera) {
return camera.numero > 0;
});
if (cameras.length <= 0) {
return;
}
var url = $state.href('mosaico', {
cameras: JSON.stringify(cameras)
}, {
absolute: true
});
window.open(url, 'Mosaico', 'menubar=no,location=no,resizable=no,scrollbars=no,status=yes,width=1024,height=600');
}
/**
* Voa para o incidente
*
* @method voarParaIncidente
* @param incidente {String} Identificação do Incidente
*
*/
$scope.voarParaIncidente = function (incidente) {
CamadasService.reloadIncidentes(true);
MapaManager.voarParaObjeto(incidente);
//MapaManager.naoPiscar();
}
/**
* Voa para a camera
*
* @method voarParaCamera
* @param camera {String} Identificação da camera
*
*/
$scope.voarParaCamera = function (camera) {
CamadasService.ativarMenuDaCamera(camera);
MapaManager.voarParaObjeto(camera);
//MapaManager.naoPiscar();
}
$scope.abrirCamerasMosaico = abrirCamerasMosaico;
/**
* Salva a rota
*
* @method salvarRota
*
*
*/
$scope.salvarRota = function () {
if (!RotasManager.rotaAtiva.hasOwnProperty('nome') || RotasManager.rotaAtiva.nome.length === 0) {
$scope.formRota = {
nome: {
touched: true,
error: {
required: true
}
}
};
return false;
}
var waypoints = [];
_.reduce(RotasManager.rotaAtiva.pontos, function (a, sum) {
waypoints.push({
de: a.latLng,
para: sum.latLng
});
return sum;
});
if (!RotasManager.rotaAtiva.id) {
MapaService
.salvarRota(
{
nome: RotasManager.rotaAtiva.nome,
descricao: RotasManager.rotaAtiva.descricao,
publico: true,
trechos: waypoints,
DepartamentoId: RotasManager.rotaAtiva.DepartamentoId
|| user.Departamento.id
})
.then(
function (obj) {
if (mapa) {
MapaService.removerRotasUnificadasDoMapa();
}
RotasManager.rotaAtiva = undefined;
RotasManager.fechar();
$mdDialog.show($mdDialog.alert().title(
$scope.res('COMUM_SUCESSO')).content(
$scope.res('MSG_ROTA_CRIADA_SUCESSO'))
.ok($scope.res('COMUM_OK')));
var rotas = MainState.getDirective('rotas');
if (rotas) {
rotas.atualizarRotas();
}
},
function (err) {
toasty({
msg: $scope.res('MSG_ERRO_ROTA_SALVAR')
});
});
} else {
MapaService
.updateRota(
{
id: RotasManager.rotaAtiva.id,
nome: RotasManager.rotaAtiva.nome,
descricao: RotasManager.rotaAtiva.descricao,
publico: true,
DepartamentoId: RotasManager.rotaAtiva.DepartamentoId
|| user.Departamento.id
}).then(
function (obj) {
RotasManager.fechar();
$mdDialog.show($mdDialog.alert().title(
$scope.res('COMUM_SUCESSO')).content(
$scope.res('MSG_ROTA_ATUALIZADA'))
.ok($scope.res('COMUM_OK')));
var rotas = MainState.getDirective('rotas');
if (rotas) {
rotas.atualizarRotas();
}
},
function (err) {
toasty({
msg: $scope.res('MSG_ERRO_ROTA_ATUALIZACAO')
});
});
}
};
/**
* Fecha a rota
*
* @method closeRota
*
*
*/
$scope.closeRota = function () {
$mdDialog.hide();
};
}
function s4cAdicionarRotas() {
return {
restrict: 'E',
templateUrl: 'app/directives/adicionar-rotas/adicionar-rotas.html',
replace: true,
controller: adicionarRotasCtrl,
link: function ($scope) {
$scope.res = $scope.$root.res;
function converte(index) {
return ' ' + String.fromCharCode(65 + index);
}
angular.extend($scope, {
converte: converte
});
}
};
}
/**
* @ngdoc overview
* @name s4c.components.rotas
*/
angular.module('s4c.components.rotas', [
's4c.filters.clockTime'
])
.directive('s4cAdicionarRotas', s4cAdicionarRotas);
}());