Beispiel #1
0
        public async Task <IActionResult> Handle(CadastrarPactoTrabalhoCommand request, CancellationToken cancellationToken)
        {
            ApplicationResult <Guid> result = new ApplicationResult <Guid>(request);

            var dadosPessoa = await PessoaRepository.ObterAsync(request.PessoaId);

            if (dadosPessoa.PactosTrabalho.Any(p => p.DataFim >= request.DataInicio && p.DataInicio <= request.DataFim))
            {
                result.Validations = new List <string> {
                    "A pessoa já tem um plano de trabalho cadastrado para o período"
                };
                return(result);
            }

            //Obtém os dias que não são úteis (feriados, férias, etc)
            var diasNaoUteis = await PessoaQuery.ObterDiasNaoUteisAsync(dadosPessoa.PessoaId, request.DataInicio, request.DataFim);

            //Monta o objeto com os dados do item de catalogo
            Domain.AggregatesModel.PactoTrabalhoAggregate.PactoTrabalho item =
                Domain.AggregatesModel.PactoTrabalhoAggregate.PactoTrabalho.Criar(
                    request.PlanoTrabalhoId,
                    request.UnidadeId,
                    request.PessoaId,
                    dadosPessoa.CargaHoraria,
                    request.FormaExecucaoId,
                    request.DataInicio,
                    request.DataFim,
                    request.UsuarioLogadoId.ToString(),
                    diasNaoUteis.Result.ToList(),
                    request.TermoAceite);

            //Verifica se está criando ou copiando um pacto de trabalho
            if (request.PactoTrabalhoId.HasValue)
            {
                //Obtém os dados do pacto que está copiando
                var pactoCopiar = await PactoTrabalhoRepository.ObterAsync(request.PactoTrabalhoId.Value);

                //Adiciona ao pacto novo as atividades do que está sendo copiado
                foreach (var atividade in pactoCopiar.Atividades)
                {
                    var assuntosId = atividade.Assuntos.Select(a => a.AssuntoId);
                    var objetosId  = atividade.Objetos.Select(o => o.PlanoTrabalhoObjetoId);
                    item.AdicionarAtividade(atividade.ItemCatalogo, atividade.Quantidade, atividade.TempoPrevistoPorItem, atividade.Descricao, assuntosId, objetosId);
                }
            }

            //Adiciona o catalogo no banco de dados
            await PactoTrabalhoRepository.AdicionarAsync(item);

            UnitOfWork.Commit(false);

            result.Result = item.PactoTrabalhoId;
            result.SetHttpStatusToOk("Plano de trabalho cadastrado com sucesso.");
            return(result);
        }