예제 #1
0
        private Decimal?diasAumentoPrazo(Domain.AggregatesModel.PactoTrabalhoAggregate.PactoTrabalho pacto, Guid pactoTrabalhoSolicitacaoId)
        {
            var solicitacao = pacto.Solicitacoes.Where(s => s.PactoTrabalhoSolicitacaoId == pactoTrabalhoSolicitacaoId).FirstOrDefault();

            dynamic dadosSolicitacao = JsonConvert.DeserializeObject(solicitacao.DadosSolicitacao);

            if (solicitacao != null)
            {
                switch (solicitacao.TipoSolicitacaoId)
                {
                case ((int)TipoSolicitacaoPactoTrabalhoEnum.JustificarEstouroPrazo):
                    Guid?pactoTrabalhoAtividadeId = dadosSolicitacao.pactoTrabalhoAtividadeId;
                    if (pactoTrabalhoAtividadeId != null)
                    {
                        var atividade = pacto.Atividades.Where(a => a.PactoTrabalhoAtividadeId == pactoTrabalhoAtividadeId).FirstOrDefault();
                        if (atividade != null)
                        {
                            return(atividade.diferencaPrevistoParaRealizadoEmDias);
                        }
                    }
                    break;

                case ((int)TipoSolicitacaoPactoTrabalhoEnum.NovaAtividade):
                    decimal tempoPrevistoPorItem = dadosSolicitacao.tempoPrevistoPorItem;
                    return(Decimal.Divide(tempoPrevistoPorItem, pacto.Pessoa.CargaHoraria));
                }
            }

            return(null);
        }
예제 #2
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);
        }