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); }
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); }