/**
* @ngdoc directives
* @name Rotas
* @module s4c.directives.rotas.Rotas
*
* @description
* `Rotas` Controller da funcionalidade de Rotas
*
* @example <s4c-rotas></s4c-rotas>
*
*/
(function () {
'use strict';
rotasCtrl.$inject = [
'$scope',
'RotasService',
'PermissoesService',
'MainState',
'RotasManager',
'CommService',
'RotasFilter',
'localize',
'$interval'
];
function rotasCtrl($scope, RotasService, PermissoesService, MainState, RotasManager, CommService, RotasFilter, localize, $interval) {
var instance = RotasFilter.getInstance('rotas-filter');
PermissoesService.getPermissoes().then(function (perms) {
$scope.permissoesVisualizacao = perms.permissoesVisualizacao;
$scope.permissoesCriacao = perms.permissoesCriacao;
$scope.permissoesEdicao = perms.permissoesEdicao;
$scope.permissoesRemocao = perms.permissoesRemocao;
});
$scope.filterAgencias = [];
/**
* @method rotasFilter
*/
$scope.rotasFilter = function (rota) {
// Filter not set at this point.
if ($scope.filterAgencias.length === 0) return true;
if (!instance) return true;
if (!instance.agencias) return true;
return $scope.filterAgencias.indexOf(rota.DepartamentoId) > -1;
};
instance.on('filterChanged', function () {
var agencias = _.chain(instance.agencias)
.filter(function (agencia) {
return agencia.ativo;
})
.map('id')
.value();
$scope.filterAgencias = agencias;
});
/**
* @method marcarRota
* @param {*} rota
*/
function marcarRota(rota) {
RotasManager.desenharPoligono(rota);
RotasManager.editar(rota);
}
/**
* @method atualizarRotas
*/
function atualizarRotas() {
RotasService.pegarRotas()
.then(function (rotas) {
$scope.rotas = _.chain(rotas.data)
.map(function (rota) {
definirAtraso(rota);
rota.cor = $scope.pegarCor(rota);
return rota;
})
.sortBy('atraso')
.value();
});
}
/**
* @method definirAtraso
* @param {*} rota
*/
function definirAtraso(rota) {
if (rota.RotaLeituras &&
rota.RotaLeituras[0] &&
rota.RotaLeituras[0].currentTime) {
rota.atraso = ((100 * (rota.RotaLeituras[0].currentTime / rota.RotaLeituras[0].regularTime)) - 100);
}
return rota;
}
/**
* @method pegarCor
* @param {*} rota
*/
function pegarCor(rota) {
if (rota.atraso) {
if (rota.atraso <= 10) {
return '#8AC249';
} else if (rota.atraso >= 10 && rota.atraso <= 50) {
return '#FFFF00';
} else {
return '#F34235';
}
} else {
return '#DDD';
}
}
CommService.on('rotas', function (data) {
atualizarRotas();
});
angular.extend($scope, {
$apiRotas: {
atualizarRotas: atualizarRotas
},
pegarCor: pegarCor,
marcarRota: marcarRota,
res: $scope.$root.res
});
MainState.registerDirective('rotas', $scope.$apiRotas);
$scope.$on('$destroy', function () {
MainState.unregisterDirective('rotas');
});
atualizarRotas();
}
function s4cRotas() {
return {
restrict: 'E',
templateUrl: 'app/directives/rotas/rotas.html',
controller: rotasCtrl
};
}
function SalvarRotaCtrl($scope, $mdDialog, MapaService, MainState, RotasManager, waypoints, toasty, Departamento, localize, res) {
$scope.res = res;
var user = MainState.getManager('UserInfo');
$scope.agencias = [];
Departamento.getAgencias()
.then(function (agencias) {
$scope.agencias = agencias;
});
$scope.formRota = {};
$scope.rota = {
DepartamentoId: user.Departamento.id
};
$scope.$watch('rota.nome', function (newVal, oldVal) {
if (newVal && newVal.length > 0) {
if ($scope.formRota.nome) {
$scope.formRota.nome.error.required = false;
$scope.formRota.nome.touch = false;
}
}
});
/**
* @method saveRota
*/
$scope.saveRota = function (rotaOpts) {
if (!rotaOpts.hasOwnProperty('nome') || rotaOpts.nome.length === 0) {
$scope.formRota = {
nome: {
touched: true,
error: {
required: true
}
}
};
return false;
}
RotaService.salvarRota({
nome: rotaOpts.nome,
descricao: rotaOpts.descricao,
origem: rotaOpts.origem,
destino: rotaOpts.destino,
publico: rotaOpts.publico,
trechos: waypoints,
DepartamentoId: rotaOpts.DepartamentoId || user.Departamento.id
}).then(function (obj) {
RotasManager.fechar();
$mdDialog
.show($mdDialog.alert()
.title('Sucesso.')
.content('Rota criada com sucesso.')
.ok('OK'));
var rotas = MainState.getDirective('rotas');
if (rotas) {
rotas.atualizarRotas();
console.log(rotaOpts.DepartamentoId);
}
}, function (err) {
toasty({
msg: 'Ocorreu um erro ao salvar a rota'
});
});
};
$scope.closeRota = function () {
$mdDialog.hide();
};
}
angular.module('s4c.components.rotas')
.directive('s4cRotas', s4cRotas)
.controller('SalvarRotaCtrl', ['$scope', '$mdDialog', 'MapaService', 'MainState', 'RotasManager', 'waypoints', 'toasty', 'Departamento', 'localize', 'res', SalvarRotaCtrl]);
}());