/**
* @ngdoc directives
* @name sala-briefing
* @module s4c.directives.briefing.salaBriefing.sala-briefing
*
* @description `SalaBriefingCtrl` Controller da funcão de Sala de Briefing
*
*
*/
(function () {
'use strict';
angular.module('s4c.components.sala-briefing', ['angular-momentjs'])
.directive('salaBriefing', SalaBriefing);
SalaBriefingCtrl.$inject = [
'$scope',
'Briefing',
'$mdDialog',
'Departamento',
'localize'
];
function SalaBriefing() {
return {
restrict: 'E',
templateUrl: 'app/directives/briefing/sala-briefing/sala-briefing.html',
replace: true,
scope: {},
controller: SalaBriefingCtrl
}
}
function SalaBriefingCtrl($scope, Briefing, $mdDialog, Departamento, localize) {
$scope.res = $scope.$root.res;
angular.extend($scope, {
imagem: '',
briefingConsolidado: null,
isLoading: true,
fecharBriefingQuestion: fecharBriefingQuestion,
showQuestion: false,
fecharBriefing: fecharBriefing,
selecionarBriefing: selecionarBriefing,
fechandoBriefing: false,
fecharDialog: fecharDialog,
fechamentoOk: false,
fechamentoError: false,
removerImagem: removerImagem
});
/**
* Fecha a pergunta do Briefing
*
* @method fecharBriefingQuestion
*
*
*/
function fecharBriefingQuestion() {
$scope.showQuestion = !$scope.showQuestion;
$scope.fechandoBriefing = false;
$scope.fechamentoError = false;
}
/**
* Fecha o briefing
*
* @method fecharBriefing
*
*
*/
function fecharBriefing() {
$scope.fechandoBriefing = true;
var fechamento = {
comentarios: []
};
fechamento.conclusao = $scope.briefingConsolidado.conclusao;
fechamento.texto = $scope.briefingConsolidado.texto;
_.each($scope.briefingConsolidado.respostasAgencias, function (resposta) {
_.each(resposta.respostas, function (resposta_) {
var text = '{}';
var comentario_ = JSON.parse(text);
comentario_.DepartamentoId = resposta.agencia.id;
comentario_.text = resposta_.comentario;
comentario_.usuarioId = resposta_.UsuarioId;
fechamento.comentarios.push(comentario_);
});
});
if ($scope.briefingConsolidado.imagem) {
fechamento.imagem = $scope.briefingConsolidado.imagem.data;
}
Briefing.postBriefing($scope.briefingConsolidado.id, fechamento)
.then(function () {
$scope.fechandoBriefing = false;
$scope.fechamentoOk = true;
}, function (err) {
$scope.fechandoBriefing = false;
$scope.fechamentoError = true;
});
}
$scope.dia;
$scope.hora;
$scope.briefingConsolidado;
/**
* Seleciona o briefing
*
* @method selecionarBriefing
*
* @param id {Integer} id
*
*/
function selecionarBriefing(id) {
angular.forEach($scope.briefings, function (briefing) {
if (id == briefing.id) {
$scope.briefingConsolidado = briefing;
$scope.dia = briefing.periodicidade.dia ? briefing.periodicidade.dia : formattedDate(briefing);
$scope.hora = briefing.periodicidade.hora;
return;
}
})
}
/**
* Fecha o dialogo
*
* @method fecharDialog
*
*
*/
function fecharDialog() {
$mdDialog.hide();
}
/**
* Remove as imagens anexadas no briefing
*
* @method removerImagem
*
*
*/
function removerImagem() {
$scope.briefingConsolidado.imagem = {};
}
/**
* Obtem o briefing
*
* @method getBriefingConsolidado
*
*
*/
var getBriefingConsolidado = function () {
$scope.isLoading = true;
Briefing.getBriefingsByFiltro({
where: {
status: 'EM_REVISAO'
},
include: [{
model: 'RespostaBriefing',
'as': 'Respostas',
include: [{
model: 'Usuario',
include: [{
model: 'Departamento'
}, {
model: 'Perfil',
include: [{
model: 'PermissaoAcesso'
}]
}]
}]
}, 'BriefingConsolidadoComentario']
}).then(function (briefings) {
$scope.briefings = briefings;
if (briefings.length == 0) {
$scope.briefingConsolidado = null;
$scope.isLoading = false;
Briefing.getBriefings({
where: {
status: 'EM_ANDAMENTO'
}
})
.then(function (briefingsConsolidados) {
$scope.briefings = briefingsConsolidados;
$scope.proximoBriefing = briefingsConsolidados[0];
$scope.proximoBriefing.horario = moment(briefingsConsolidados[0].data).format("HH:mm");
});
return;
}
angular.forEach($scope.briefings, function (briefing) {
var briefingModel = {};
briefingModel = briefing;
briefingModel.respostas = [];
if (briefing.Respostas && briefing.Respostas.length > 0) {
var respostasAgencias = [];
briefingModel.respostas = _.chain(briefing.Respostas)
.map(function (resposta) {
return {
id: resposta.Usuario.Departamento.id,
nome: resposta.Usuario.Departamento.nome
};
})
.uniqBy('id')
.reduce(function (respostas, dept) {
var usuarios = _.chain(briefing.Respostas)
.filter(function (resposta) {
return resposta.Usuario.Departamento.id === dept.id;
})
.map(function (resposta) {
return {
id: resposta.Usuario.id,
nome: resposta.Usuario.nome,
horario: resposta.updatedAt,
perfil: _.max(resposta.Usuario.Perfils, 'PermissaoAcessos.length')
}
})
.uniqBy('id')
.value();
var respostaAgencia = {
agencia: dept,
respostas: _.chain(briefing.Respostas)
.filter(
function (resposta) {
return resposta.Usuario.Departamento.id === dept.id;
}
)
.map(
function (resposta) {
if (typeof resposta.texto === 'string') {
resposta.texto = resposta.texto.replace(/(?:\r\n|\r|\n)/g, '<br />');
}
return resposta;
}
)
.value()
};
respostasAgencias.push(respostaAgencia);
var respostaLast = _.chain(briefing.Respostas)
.filter(function (resposta) {
return resposta.Usuario.Departamento.id === dept.id;
})
.max(function (resposta) {
return resposta.id;
})
.value();
respostas.push({
corporacao: dept,
id: respostaLast.id,
ultimaResposta: respostaLast.texto,
operadores: usuarios,
comentario: ''
});
return respostas;
}, [])
.value();
briefingModel.respostasAgencias = _.map(respostasAgencias, function (resposta) {
var respostasUsuarios = _.chain(resposta.respostas)
.map('Usuario')
.uniqBy('id')
.value();
var ultimasRespostasUsuarios = [];
_.each(respostasUsuarios, function (usuario) {
console.log('Usuario => ', usuario);
var respostasDoUsuario = _.filter(resposta.respostas, { 'UsuarioId': usuario.id });
ultimasRespostasUsuarios.push(_.max(respostasDoUsuario, 'id'));
});
return {
agencia: resposta.agencia,
respostas: _.flatten(ultimasRespostasUsuarios)
};
});
$scope.isLoading = false;
}
});
})
};
getBriefingConsolidado();
}
}());