/**
* @ngdoc controllers
* @name Briefing
* @module s4c.components.admin.controllers.Briefing
*
* @description
* `AdminBriefingCtrl` Controller da tela de Briefing do módulo de administração
*
*
*/
(function () {
'use strict';
function AdminBriefingCtrl($scope, Briefing, $mdDialog, $filter) {
$scope.res = $scope.$root.res;
$scope.isBriefing = true;
angular.extend($scope, {
salvarBriefing: salvarBriefing,
adicionarHora: adicionarHora,
editBriefing: editBriefing,
removerBriefing: removerBriefing,
getPeriodicidade: getPeriodicidade,
selecionarBriefing: selecionarBriefing,
setClass: setClass,
getSumario: getSumario,
executeSearch: executeSearch,
selecionarRecursivo: selecionarRecursivo,
adicionarLembreteAlarme: adicionarLembreteAlarme,
removerLembreteAlarme: removerLembreteAlarme,
novoBriefing: novoBriefing,
cancelar: cancelar,
lembretesAlarme: [{
label: '1 ',
valor: 1,
unidade: 'minutes'
}, {
label: '2 ',
valor: 2,
unidade: 'minutes'
}, {
label: '5 ',
valor: 5,
unidade: 'minutes'
}, {
label: '15 ',
valor: 15,
unidade: 'minutes'
}, {
label: '30 ',
valor: 30,
unidade: 'minutes'
}, {
label: '45 ',
valor: 45,
unidade: 'minutes'
}, {
label: '1 ',
valor: 1,
unidade: 'hours'
}, {
label: '2 ',
valor: 2,
unidade: 'hours'
}, {
label: '3 ',
valor: 3,
unidade: 'hours'
}, {
label: '4 ',
valor: 4,
unidade: 'hours'
}],
scheduler: {
dias: [0, 1, 2, 3, 4, 5, 6],
horarios: [],
lembretes: []
}
});
$scope.$watch('scheduler.horarios', function (value) {
angular.forEach($scope.scheduler.horarios, function (horario, key) {
var hExp = horario.display.split(":");
horario.hora = hExp[0];
horario.minuto = hExp[1];
});
}, true);
/**
* @method adicionarHora
*/
function adicionarHora() {
var h = moment().format('HH');
var m = moment().format('mm');
$scope.scheduler.horarios.push({
hora: h,
minuto: m,
display: h + ":" + m
});
}
$scope.detalhesBriefing = false;
$scope.isEdition = false;
$scope.isAdding = false;
$scope.cancelado = true;
$scope.recursivoSelecionado;
$scope.recursivos = [$scope.res('NUNCA'), $scope.res('DIARIO'), $scope.res('SEMANAL'), $scope.res('MENSAL')];
$scope.dias = [];
$scope.dias['SEGUNDA'] = false;
$scope.dias['TERCA'] = false;
$scope.dias['QUARTA'] = false;
$scope.dias['QUINTA'] = false;
$scope.dias['SEXTA'] = false;
$scope.dias['SABADO'] = false;
$scope.dias['DOMINGO'] = false;
Briefing.getBriefings().then(function (briefings) {
$scope.briefings = briefings;
$scope.briefingsSelecionados = briefings;
});
/**
* @method removerBriefing
* @param {*} briefing
*/
function removerBriefing(briefing) {
if (briefing.respostas) {
var confirm = $mdDialog.confirm()
.title($scope.res('REMOVER_BRIEFING'))
.content($scope.res('TEM_CERTEZA_REMOVER_BRIEFING'))
.ok($scope.res('COMUM_SIM'))
.cancel($scope.res('COMUM_CANCELAR'));
$mdDialog.show(confirm).then(function () {
Briefing.removeBriefing(briefing.id).then(function (result) {
var index = $scope.briefings.indexOf(briefing);
$scope.briefings.splice(index, 1);
});
}, function (err) {
});
} else {
Briefing.removeBriefing(briefing.id).then(function (result) {
var index = $scope.briefings.indexOf(briefing);
$scope.briefings.splice(index, 1);
});
}
if ($scope.briefingSelecionado && briefing.id == $scope.briefingSelecionado.id) {
$scope.detalhesBriefing = false;
cancelar();
$scope.briefingSelecionado = undefined;
}
}
/**
* @method getPeriodicidade
* @param {*} briefing
*/
function getPeriodicidade(briefing) {
if (briefing.periodicidade.repeticao == 'NUNCA') {
return $scope.res('APENAS_EM') + ' ' + briefing.periodicidade.dia;
}
if (briefing.periodicidade.repeticao == 'DIARIO') {
return $scope.res('DIARIO');
}
if (briefing.periodicidade.repeticao == 'SEMANAL') {
return $scope.res('SEMANAL');
}
if (briefing.periodicidade.repeticao == 'MENSAL') {
return $scope.res('MENSAL') + ', ' + $scope.res('TODO_DIA') + ' ' + briefing.periodicidade.dia.substring(0, 2) + ' ' + $scope.res('DO_MES');
}
}
$scope.sumario = '';
/**
* @method getSumario
*/
function getSumario() {
if ($scope.recursivoSelecionado == $scope.recursivos[0]) {
$scope.sumario = $scope.res('APENAS_EM') + ' '
+ ($scope.briefingSelecionado.dataConsolidacao ? $scope.briefingSelecionado.dataConsolidacao :
$scope.briefingSelecionado.periodicidade.dia + ' ' + $scope.res('COMUM_AS') + ' ' + $scope.briefingSelecionado.periodicidade.hora);
}
if ($scope.recursivoSelecionado == $scope.recursivos[1]) {
$scope.sumario = $scope.res('DIARIO') + ', ' + $scope.res('SEMPRE_AS') + ' '
+ ($scope.briefingSelecionado.dataConsolidacao ? $scope.briefingSelecionado.dataConsolidacao : $scope.briefingSelecionado.periodicidade.hora);
}
if ($scope.recursivoSelecionado == $scope.recursivos[2]) {
$scope.sumario = $scope.res('SEMANAL') + ', ' + getDayNames() + ' ' + $scope.res('COMUM_AS') + ' '
+ ($scope.briefingSelecionado.dataConsolidacao ? $scope.briefingSelecionado.dataConsolidacao : $scope.briefingSelecionado.periodicidade.hora);
}
if ($scope.recursivoSelecionado == $scope.recursivos[3]) {
$scope.sumario = $scope.res('MENSAL') + ', ' + $scope.res('TODO_DIA') + ' ' + getDay() + ' ' + $scope.res('DO_MES');
}
return $scope.sumario;
}
/**
* @method getDayNames
*/
function getDayNames() {
if (($scope.dias['SEGUNDA'] == true &&
$scope.dias['TERCA'] == true &&
$scope.dias['QUARTA'] == true &&
$scope.dias['QUINTA'] == true &&
$scope.dias['SEXTA'] == true &&
$scope.dias['SABADO'] == true &&
$scope.dias['DOMINGO'] == true) ||
($scope.dias['SEGUNDA'] == false &&
$scope.dias['TERCA'] == false &&
$scope.dias['QUARTA'] == false &&
$scope.dias['QUINTA'] == false &&
$scope.dias['SEXTA'] == false &&
$scope.dias['SABADO'] == false &&
$scope.dias['DOMINGO'] == false)) {
return $scope.res('TODOS_DIAS');
}
if ($scope.dias['SEGUNDA'] == true &&
$scope.dias['TERCA'] == true &&
$scope.dias['QUARTA'] == true &&
$scope.dias['QUINTA'] == true &&
$scope.dias['SEXTA'] == true &&
$scope.dias['SABADO'] == false &&
$scope.dias['DOMINGO'] == false) {
return $scope.res('DIAS_UTEIS');
}
if ($scope.dias['SEGUNDA'] == false &&
$scope.dias['TERCA'] == false &&
$scope.dias['QUARTA'] == false &&
$scope.dias['QUINTA'] == false &&
$scope.dias['SEXTA'] == false &&
$scope.dias['SABADO'] == true &&
$scope.dias['DOMINGO'] == true) {
return $scope.res('FIM_DE_SEMANA');
}
var names = '';
var diaNome;
for (diaNome in $scope.dias) {
if (diaNome != 'DOM') {
if ($scope.dias[diaNome]) {
names += $scope.res(diaNome) + ', ';
}
} else {
if ($scope.dias[diaNome]) {
names += $scope.res(diaNome);
} else {
names = names.substring(0, names.lenght - 3);
}
}
}
return names.replace(/,([^,]*)$/, ' ');
}
/**
* @method getDay
*/
function getDay() {
return $scope.briefingSelecionado.dataConsolidacao ? $scope.briefingSelecionado.dataConsolidacao.substring(0, 2) :
$scope.briefingSelecionado.periodicidade.dia.substring(0, 2);
}
$scope.briefing;
/**
* @method editBriefing
* @param {*} briefing
*/
function editBriefing(briefing) {
$scope.isAdding = false;
$scope.cancelado = false;
$scope.isEdition = true;
$scope.briefing = briefing;
angular.forEach($scope.briefingsSelecionados, function (b) {
b.val = false;
});
briefing.val = true;
$scope.briefingSelecionado = angular.copy(briefing);
if (briefing.periodicidade.repeticao == 'DIARIO' || briefing.periodicidade.repeticao == 'SEMANAL') {
$scope.briefingSelecionado.dataConsolidacao = $scope.briefingSelecionado.periodicidade.hora;
} else {
$scope.briefingSelecionado.dataConsolidacao = ($scope.briefingSelecionado.periodicidade.dia ? $scope.briefingSelecionado.periodicidade.dia : '')
+ ' ' + $scope.briefingSelecionado.periodicidade.hora;
}
$scope.recursivoSelecionado = $scope.res($scope.briefingSelecionado.periodicidade.repeticao);
$scope.dias['SEGUNDA'] = $scope.briefingSelecionado.periodicidade.dias_semana.indexOf('SEGUNDA') != -1 ? true : false;
$scope.dias['TERCA'] = $scope.briefingSelecionado.periodicidade.dias_semana.indexOf('TERCA') != -1 ? true : false;
$scope.dias['QUARTA'] = $scope.briefingSelecionado.periodicidade.dias_semana.indexOf('QUARTA') != -1 ? true : false;
$scope.dias['QUINTA'] = $scope.briefingSelecionado.periodicidade.dias_semana.indexOf('QUINTA') != -1 ? true : false;
$scope.dias['SEXTA'] = $scope.briefingSelecionado.periodicidade.dias_semana.indexOf('SEXTA') != -1 ? true : false;
$scope.dias['SABADO'] = $scope.briefingSelecionado.periodicidade.dias_semana.indexOf('SABADO') != -1 ? true : false;
$scope.dias['DOMINGO'] = $scope.briefingSelecionado.periodicidade.dias_semana.indexOf('DOMINGO') != -1 ? true : false;
}
function setClass() {
$("#participantesDiv").attr("class", "participantes-briefing");
}
$scope.briefingSelecionado;
/**
* @method selecionarBriefing
* @param {*} briefing
*/
function selecionarBriefing(briefing) {
if ($scope.isEdition || $scope.isAdding) {
return;
}
angular.forEach($scope.briefingsSelecionados, function (b) {
b.val = false;
});
briefing.val = true;
$scope.briefingSelecionado = briefing;
$scope.recursivoSelecionado = $scope.res($scope.briefingSelecionado.periodicidade.repeticao);
$scope.detalhesBriefing = true;
$scope.dias['SEGUNDA'] = $scope.briefingSelecionado.periodicidade.dias_semana.indexOf('SEGUNDA') != -1 ? true : false;
$scope.dias['TERCA'] = $scope.briefingSelecionado.periodicidade.dias_semana.indexOf('TERCA') != -1 ? true : false;
$scope.dias['QUARTA'] = $scope.briefingSelecionado.periodicidade.dias_semana.indexOf('QUARTA') != -1 ? true : false;
$scope.dias['QUINTA'] = $scope.briefingSelecionado.periodicidade.dias_semana.indexOf('QUINTA') != -1 ? true : false;
$scope.dias['SEXTA'] = $scope.briefingSelecionado.periodicidade.dias_semana.indexOf('SEXTA') != -1 ? true : false;
$scope.dias['SABADO'] = $scope.briefingSelecionado.periodicidade.dias_semana.indexOf('SABADO') != -1 ? true : false;
$scope.dias['DOMINGO'] = $scope.briefingSelecionado.periodicidade.dias_semana.indexOf('DOMINGO') != -1 ? true : false;
}
/**
* @method novoBriefing
*/
function novoBriefing() {
$scope.isAdding = true;
$scope.cancelado = false;
$scope.isEdition = false;
$scope.briefingSelecionado = {};
$scope.briefingSelecionado.alarmes = [];
$scope.briefingSelecionado.gruposUsuariosParticipantes = [];
$scope.briefingSelecionado.usuariosParticipantes = [];
$scope.briefingSelecionado.agenciasParticipantes = [];
$scope.recursivoSelecionado = undefined;
$scope.dias['SEGUNDA'] = false;
$scope.dias['TERCA'] = false;
$scope.dias['QUARTA'] = false;
$scope.dias['QUINTA'] = false;
$scope.dias['SEXTA'] = false;
$scope.dias['SABADO'] = false;
$scope.dias['DOMINGO'] = false;
}
/**
* @method cancelar
*/
function cancelar() {
if ($scope.isAdding) {
$scope.detalhesBriefing = false;
}
$scope.isAdding = false;
$scope.isEdition = false;
$scope.cancelado = true;
}
/**
* @method adicionarLembreteAlarme
*/
function adicionarLembreteAlarme() {
$scope.briefingSelecionado.alarmes.push(angular.copy($scope.lembretesAlarme[0]));
}
/**
* @method removerLembreteAlarme
* @param {*} lembreteAlarme
*/
function removerLembreteAlarme(lembreteAlarme) {
var index = $scope.briefingSelecionado.alarmes.indexOf(lembreteAlarme);
$scope.briefingSelecionado.alarmes.splice(index, 1);
}
function selecionarRecursivo(recursivoSelecionado) {
$scope.recursivoSelecionado = recursivoSelecionado;
if (!$scope.briefingSelecionado.dataConsolidacao) {
return;
}
if ($scope.recursivoSelecionado == $scope.res('MENSAL') || $scope.recursivoSelecionado == $scope.res('NUNCA')) {
if ($scope.briefingSelecionado.dataConsolidacao.length < 8) {
$scope.briefingSelecionado.dataConsolidacao = undefined;
}
}
if ($scope.recursivoSelecionado == $scope.res('SEMANAL') || $scope.recursivoSelecionado == $scope.res('DIARIO')) {
if ($scope.briefingSelecionado.dataConsolidacao.length > 6) {
$scope.briefingSelecionado.dataConsolidacao = undefined;
}
}
}
function ordenaAlertas() {
$scope.briefingSelecionado.alarmes = $scope.briefingSelecionado.alarmes.sort(function (a, b) {
var aValue = getValueInMinutes(a);
var bValue = getValueInMinutes(b);
return aValue < bValue ? 1 : aValue > bValue ? -1 : 0
});
}
/**
* @method getValueInMinutes
* @param {*} alarme
*/
function getValueInMinutes(alarme) {
var unidade = alarme.unidade;
if (unidade == 'hours') {
return alarme.valor * 60;
}
return alarme.valor;
}
/**
* @method temAlertasRepetidos
*/
function temAlertasRepetidos() {
var temRepetidos = false;
var label;
angular.forEach($scope.briefingSelecionado.alarmes, function (alarme) {
var newLabel = getValueInMinutes(alarme);
if (newLabel == label) {
temRepetidos = true;
return;
}
label = newLabel;
});
return temRepetidos;
}
$scope.textoBusca;
/**
* @method executeSearch
*/
function executeSearch() {
$scope.briefingsSelecionados = [];
if (!$scope.textoBusca || $scope.textoBusca.length == 0) {
$scope.briefingsSelecionados = angular.copy($scope.briefings);
return;
}
var texto = $filter('latinize')($scope.textoBusca.toLowerCase());
angular.forEach($scope.briefings, function (briefing) {
var nome = $filter('latinize')(briefing.nome.toLowerCase());
var descricao = $filter('latinize')(briefing.descricao.toLowerCase());
if (nome.indexOf(texto) !== -1 || descricao.indexOf(texto) !== -1) {
$scope.briefingsSelecionados.push(briefing);
}
});
}
/**
* @method salvarBriefing
* @param {*} evt
*/
function salvarBriefing(evt) {
//Verificar se existem alertas com tempos repetidos
if (temAlertasRepetidos()) {
$mdDialog.show({
targetEvent: evt,
scope: $scope.$new(),
template: '<md-dialog><md-content>' + $scope.res('BRIEFING_ALERT_REPETIDO') + '</md-content></md-dialog>'
});
return;
}
if (!$scope.briefingSelecionado.nome) {
$mdDialog.show({
targetEvent: evt,
scope: $scope.$new(),
template: '<md-dialog><md-content>' + $scope.res('BRIEFING_NOME_FALTANTE') + '</md-content></md-dialog>'
});
return;
}
if (!$scope.briefingSelecionado.descricao) {
$mdDialog.show({
targetEvent: evt,
scope: $scope.$new(),
template: '<md-dialog><md-content>' + $scope.res('BRIEFING_DESCRICAO_FALTANTE') + '</md-content></md-dialog>'
});
return;
}
if (!$scope.recursivoSelecionado) {
$mdDialog.show({
targetEvent: evt,
scope: $scope.$new(),
template: '<md-dialog><md-content>' + $scope.res('BRIEFING_RECURSIVO_FALTANTE') + '</md-content></md-dialog>'
});
return;
}
if (!$scope.briefingSelecionado.dataConsolidacao) {
$mdDialog.show({
targetEvent: evt,
scope: $scope.$new(),
template: '<md-dialog><md-content>' + $scope.res('BRIEFING_TEMPO_FALTANTE') + '</md-content></md-dialog>'
});
return;
}
carregarBriefing();
//Ordenar alertas em ordem decrescente
ordenaAlertas();
$scope.briefingSelecionado.data = undefined;
if ($scope.isAdding) {
Briefing.newBriefing($scope.briefingSelecionado)
.then(function (result) {
$mdDialog.show({
targetEvent: evt,
scope: $scope.$new(),
template: '<md-dialog><md-content>' + $scope.res('BRIEFING_TITULO') + ' ' + $scope.res('COMUM_MENSAGEM_SALVOCOMSUCESSO') + '</md-content></md-dialog>'
});
$scope.briefingSelecionado.id = result.id;
$scope.briefings.push($scope.briefingSelecionado);
$scope.isAdding = false;
$scope.cancelado = true;
});
} else {
Briefing.updateBriefing($scope.briefingSelecionado)
.then(function (result) {
$mdDialog.show({
targetEvent: evt,
scope: $scope.$new(),
template: '<md-dialog><md-content>' + $scope.res('BRIEFING_TITULO') + ' ' + $scope.res('COMUM_MENSAGEM_SALVOCOMSUCESSO') + '</md-content></md-dialog>'
});
$scope.briefings.splice($scope.briefings.indexOf($scope.briefing), 1);
$scope.briefings.push($scope.briefingSelecionado);
$scope.isEdition = false;
$scope.cancelado = true;
});
}
$scope.detalhesBriefing = true;
}
/**
* @method carregarBriefing
*/
function carregarBriefing() {
var rep;
if ($scope.recursivoSelecionado == $scope.recursivos[0]) {
rep = 'NUNCA';
}
if ($scope.recursivoSelecionado == $scope.recursivos[1]) {
rep = 'DIARIO';
}
if ($scope.recursivoSelecionado == $scope.recursivos[2]) {
rep = 'SEMANAL';
}
if ($scope.recursivoSelecionado == $scope.recursivos[3]) {
rep = 'MENSAL';
}
var valores = [];
var diaNome;
for (diaNome in $scope.dias) {
if ($scope.dias[diaNome]) {
valores.push(diaNome);
}
}
var diaSelecionado;
var horaSelecionada;
if ($scope.recursivoSelecionado == $scope.recursivos[0] || $scope.recursivoSelecionado == $scope.recursivos[3]) {
diaSelecionado = $scope.briefingSelecionado.dataConsolidacao.substring(0, 10);
horaSelecionada = $scope.briefingSelecionado.dataConsolidacao.substring(10, 17);
} else {
horaSelecionada = $scope.briefingSelecionado.dataConsolidacao;
}
$scope.briefingSelecionado.periodicidade = {
repeticao: rep,
dias_semana: valores,
dia: diaSelecionado,
hora: horaSelecionada
}
delete $scope.briefingSelecionado.dataRevisao;
delete $scope.briefingSelecionado.createdAt;
delete $scope.briefingSelecionado.updatedAt;
}
}
AdminBriefingCtrl.$inject = [
'$scope',
'Briefing',
'$mdDialog',
'$filter'
];
angular.module('s4c.controllers.AdminBriefingCtrl', ['s4c.filters', 'ui.utils.masks'])
.controller('AdminBriefingCtrl', AdminBriefingCtrl);
}());