public async Task <IActionResult> Handle(CadastrarPlanoTrabalhoObjetoCommand request, CancellationToken cancellationToken)
        {
            request.Assuntos = request.Assuntos != null ? request.Assuntos : new List <PlanoTrabalhoObjetoAssuntoViewModel>();
            request.Custos   = request.Custos != null ? request.Custos : new List <PlanoTrabalhoCustoViewModel>();
            request.Reunioes = request.Reunioes != null ? request.Reunioes : new List <PlanoTrabalhoReuniaoViewModel>();

            ApplicationResult <bool> result = new ApplicationResult <bool>(request);

            //Monta o objeto com os dados do catalogo
            var item = await PlanoTrabalhoRepository.ObterAsync(request.PlanoTrabalhoId);

            var custos   = request.Custos.Select(c => PlanoTrabalhoCusto.Criar(c.PlanoTrabalhoId, c.Valor, c.Descricao)).ToList();
            var reunioes = request.Reunioes.Select(r => PlanoTrabalhoReuniao.Criar(r.PlanoTrabalhoId, r.Data, r.Titulo, r.Descricao)).ToList();
            var assuntos = request.Assuntos.Select(a => PlanoTrabalhoObjetoAssunto.Criar(a.PlanoTrabalhoObjetoId, a.AssuntoId)).ToList();

            //Adiciona o objeto
            item.AdicionarObjeto(request.ObjetoId, reunioes, custos, assuntos);

            //Altera o item de catalogo no banco de dados
            PlanoTrabalhoRepository.Atualizar(item);
            UnitOfWork.Commit(false);

            result.Result = true;
            result.SetHttpStatusToOk("Plano de trabalho alterado com sucesso.");
            return(result);
        }
        public async Task <IActionResult> Handle(AlterarAssuntoCommand request, CancellationToken cancellationToken)
        {
            ApplicationResult <Guid> result = new ApplicationResult <Guid>(request);

            //Recupera o objeto assunto
            var assunto = await AssuntoRepository.ObterAsync(request.AssuntoId);

            var alterouPai = assunto.AssuntoPaiId != request.AssuntoPaiId;

            //Monta o objeto com os dados do assunto
            assunto.Alterar(request.Valor, request.AssuntoPaiId, request.Ativo);

            try
            {
                await validarAssunto(assunto, alterouPai);
            }
            catch (SISRHDomainException e)
            {
                result.SetHttpStatusToBadRequest(e.Message);
                return(result);
            }

            //Altera o assunto no banco de dados
            AssuntoRepository.Atualizar(assunto);
            UnitOfWork.Commit(false);

            result.Result = assunto.AssuntoId;
            result.SetHttpStatusToOk("Assunto alterado com sucesso.");
            return(result);
        }
        public async Task <IActionResult> Handle(AlterarItemCatalogoCommand request, CancellationToken cancellationToken)
        {
            ApplicationResult <bool> result = new ApplicationResult <bool>(request);

            request.Assuntos = request.Assuntos != null ? request.Assuntos : new List <AssuntoEdicaoViewModel>();

            //Monta o objeto com os dados do catalogo
            var item = await ItemCatalogoRepository.ObterAsync(request.ItemCatalogoId);

            //Altera os dados
            item.Alterar(request.Titulo,
                         request.Descricao,
                         request.FormaCalculoTempoItemCatalogoId,
                         request.PermiteTrabalhoRemoto,
                         request.TempoExecucaoPresencial,
                         request.TempoExecucaoRemoto,
                         request.Complexidade,
                         request.DefinicaoComplexidade,
                         request.EntregasEsperadas);

            //Atualiza a lista de assuntos
            atualizarListaAssuntos(item, request.Assuntos);

            //Altera o item de catalogo no banco de dados
            ItemCatalogoRepository.Atualizar(item);
            UnitOfWork.Commit(false);

            result.Result = true;
            result.SetHttpStatusToOk("ItemCatalogo alterado com sucesso.");
            return(result);
        }
        public async Task <IActionResult> Handle(CadastrarAssuntoCommand request, CancellationToken cancellationToken)
        {
            ApplicationResult <Guid> result = new ApplicationResult <Guid>(request);

            //Monta o objeto com os dados do assunto
            var assunto = Domain.AggregatesModel.AssuntoAggregate.Assunto.Criar(
                request.Valor,
                request.AssuntoPaiId,
                true);

            try
            {
                await validarAssunto(assunto);
            } catch (SISRHDomainException e)
            {
                result.SetHttpStatusToBadRequest(e.Message);
                return(result);
            }

            //Adiciona o assunto no banco de dados
            await AssuntoRepository.AdicionarAsync(assunto);

            UnitOfWork.Commit(false);

            result.Result = assunto.AssuntoId;
            result.SetHttpStatusToOk("Assunto cadastrado com sucesso.");
            return(result);
        }
        public async Task <IActionResult> Handle(AlterarSituacaoPactoTrabalhoCommand request, CancellationToken cancellationToken)
        {
            ApplicationResult <bool> result = new ApplicationResult <bool>(request);

            //Monta o objeto com os dados do catalogo
            var item = await PactoTrabalhoRepository.ObterAsync(request.PactoTrabalhoId);

            //Obtém os dias não úteis da pessoa
            var diasNaoUteis = await PessoaQuery.ObterDiasNaoUteisAsync(item.PessoaId, item.DataInicio, item.DataFim);

            item.DiasNaoUteis = diasNaoUteis.Result.ToList();

            //Alterar a situação da atividade
            item.AlterarSituacao(request.SituacaoId, request.UsuarioLogadoId.ToString(), request.Observacoes);

            //Altera o item de catalogo no banco de dados
            PactoTrabalhoRepository.Atualizar(item);
            UnitOfWork.Commit(false);

            //Envia os emails aos envolvidos
            await EnviarEmail(item.PessoaId, item.UnidadeId);

            result.Result = true;
            result.SetHttpStatusToOk("Pacto de trabalho alterado com sucesso.");
            return(result);
        }
        public async Task <IActionResult> Handle(CadastrarPlanoTrabalhoCommand request, CancellationToken cancellationToken)
        {
            ApplicationResult <Guid> result = new ApplicationResult <Guid>(request);

            var unidade = await UnidadeQuery.ObterPorChaveAsync(request.UnidadeId);

            //Monta o objeto com os dados do item de catalogo
            Domain.AggregatesModel.PlanoTrabalhoAggregate.PlanoTrabalho item =
                Domain.AggregatesModel.PlanoTrabalhoAggregate.PlanoTrabalho.Criar(
                    request.UnidadeId,
                    request.DataInicio,
                    request.DataFim,
                    request.TempoComparecimento,
                    request.TempoFaseHabilitacao,
                    unidade.Result.QuantidadeServidores,
                    request.UsuarioLogadoId.ToString(),
                    request.TermoAceite);

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

            UnitOfWork.Commit(false);

            result.Result = item.PlanoTrabalhoId;
            result.SetHttpStatusToOk("Plano de trabalho cadastrado com sucesso.");
            return(result);
        }
示例#7
0
        public async Task <IActionResult> Handle(AvaliarAtividadePactoTrabalhoCommand request, CancellationToken cancellationToken)
        {
            ApplicationResult <bool> result = new ApplicationResult <bool>(request);

            try
            {
                //Monta os dados do pacto de trabalho
                var pacto = await PactoTrabalhoRepository.ObterAsync(request.PactoTrabalhoId);

                //Altera a atividade
                pacto.AvaliarAtividade(request.PactoTrabalhoAtividadeId, request.Nota, request.Justificativa);

                //Altera o pacto de trabalho no banco de dados
                PactoTrabalhoRepository.Atualizar(pacto);
                UnitOfWork.Commit(false);

                //Envia os emails aos envolvidos
                await EnviarEmail(request.PactoTrabalhoId, pacto.PessoaId, pacto.UnidadeId);

                result.Result = true;
                result.SetHttpStatusToOk("Atividade avaliada com sucesso.");
            }
            catch (SISRH.Domain.Exceptions.SISRHDomainException ex)
            {
                result.Validations = new List <string>()
                {
                    ex.Message
                };
                result.Result = false;
                result.SetHttpStatusToBadRequest();
            }
            return(result);
        }
        public async Task <IActionResult> Handle(CadastrarPlanoTrabalhoCommand request, CancellationToken cancellationToken)
        {
            ApplicationResult <Guid> result = new ApplicationResult <Guid>(request);

            try
            {
                var unidade = await UnidadeQuery.ObterQuantidadeServidoresPorChaveAsync(request.UnidadeId);

                var tempoComparecimento = request.TempoComparecimento;
                var termosAceite        = request.TermoAceite;

                if (Configuration.Value.TempoComparecimento > 0)
                {
                    tempoComparecimento = Configuration.Value.TempoComparecimento;
                }

                if (!String.IsNullOrEmpty(Configuration.Value.TermoAceite))
                {
                    termosAceite = Configuration.Value.TermoAceite;
                }

                //Monta o objeto com os dados do item de catalogo
                Domain.AggregatesModel.PlanoTrabalhoAggregate.PlanoTrabalho item =
                    Domain.AggregatesModel.PlanoTrabalhoAggregate.PlanoTrabalho.Criar(
                        request.UnidadeId,
                        request.DataInicio,
                        request.DataFim,
                        tempoComparecimento,
                        request.TempoFaseHabilitacao,
                        unidade.Result.QuantidadeServidores,
                        request.UsuarioLogadoId.ToString(),
                        termosAceite);

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

                UnitOfWork.Commit(false);

                result.Result = item.PlanoTrabalhoId;
                result.SetHttpStatusToOk("Plano de trabalho cadastrado com sucesso.");
            }
            catch (SISRHDomainException ex)
            {
                result.Validations = new List <string>()
                {
                    ex.Message
                };
                result.SetHttpStatusToBadRequest(ex.Message);
            }

            return(result);
        }
示例#9
0
        public async Task <IActionResult> Handle(ExcluirItemCatalogoCommand request, CancellationToken cancellationToken)
        {
            ApplicationResult <bool> result = new ApplicationResult <bool>(request);

            //Adiciona o catalogo no banco de dados
            await ItemCatalogoRepository.ExcluirAsync(request.ItemCatalogoId);

            UnitOfWork.Commit(false);

            result.Result = true;
            result.SetHttpStatusToOk("Item de catálogo excluído com sucesso.");
            return(result);
        }
        public async Task <IActionResult> Handle(AlterarPeriodoPactoTrabalhoCommand request, CancellationToken cancellationToken)
        {
            ApplicationResult <bool> result = new ApplicationResult <bool>(request);

            try
            {
                //Monta o objeto com os dados do catalogo
                var item = await PactoTrabalhoRepository.ObterAsync(request.PactoTrabalhoId);

                //Obtém os dias não úteis da pessoa
                var diasNaoUteis = await PessoaQuery.ObterDiasNaoUteisAsync(item.PessoaId, item.DataInicio, item.DataFim);

                item.DiasNaoUteis = diasNaoUteis.Result.ToList();

                //Verifica se a pessoa tem outros pactos cadastrados para o período
                var dadosPessoa = await PessoaRepository.ObterAsync(item.PessoaId);

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

                //Altera a situação
                item.AlterarPeriodo(request.DataInicio.Date, request.DataFim.Date);

                //Altera o item de catalogo no banco de dados
                PactoTrabalhoRepository.Atualizar(item);
                UnitOfWork.Commit(false);

                result.Result = true;
                result.SetHttpStatusToOk("Plano de trabalho alterado com sucesso.");
            }
            catch (SISRH.Domain.Exceptions.SISRHDomainException ex)
            {
                result.Validations = new List <string>()
                {
                    ex.Message
                };
                result.Result = false;
                result.SetHttpStatusToBadRequest();
            }
            return(result);
        }
示例#11
0
        public async Task <IActionResult> Handle(ProporExcluirAtividadeCommand request, CancellationToken cancellationToken)
        {
            ApplicationResult <bool> result = new ApplicationResult <bool>(request);

            try
            {
                //Monta os dados do pacto de trabalho
                var pacto = await PactoTrabalhoRepository.ObterAsync(request.PactoTrabalhoId);

                if (pacto.ExisteSolicitacaoPendenteExclusaoMesmaAtividade(request.PactoTrabalhoAtividadeId))
                {
                    throw new SISRH.Domain.Exceptions.SISRHDomainException(@"
                        Já existe solicitação ainda não analisada de exclusão da mesma atividade. 
                        Aguarde até que a solicitação anterior tenha sido analisada para que possa fazer nova solicitação de exclusão da mesma atividade.
                    ");
                }

                //Armazena o id do item de catálogo para poder mostrar na tela caso ele seja excluído
                var atividade = pacto.Atividades.FirstOrDefault(p => p.PactoTrabalhoAtividadeId == request.PactoTrabalhoAtividadeId);
                request.ItemCatalogo = atividade.ItemCatalogo.TituloCompletoComTempos;

                //Serializa a requisição
                var dados = JsonConvert.SerializeObject(request);

                //Cria a solicitação
                pacto.AdicionarSolicitacao(TipoSolicitacaoPactoTrabalhoEnum.ExcluirAtividade, request.UsuarioLogadoId.ToString(), dados, request.Justificativa);

                //Altera o pacto de trabalho no banco de dados
                PactoTrabalhoRepository.Atualizar(pacto);
                UnitOfWork.Commit(false);

                //Envia os emails aos envolvidos
                await EnviarEmail(request.PactoTrabalhoId, pacto.PessoaId, pacto.UnidadeId);

                result.Result = true;
                result.SetHttpStatusToOk("Pacto de trabalho alterado com sucesso.");
            }
            catch (SISRH.Domain.Exceptions.SISRHDomainException ex)
            {
                result.Validations = new List <string>()
                {
                    ex.Message
                };
                result.Result = false;
                result.SetHttpStatusToBadRequest();
            }
            return(result);
        }
示例#12
0
        public async Task <IActionResult> Handle(ExcluirCatalogoItemCatalogoCommand request, CancellationToken cancellationToken)
        {
            ApplicationResult <bool> result = new ApplicationResult <bool>(request);

            var catalogo = await CatalogoRepository.ObterAsync(request.CatalogoId);

            catalogo.RemoverItem(request.ItemCatalogoId);

            //Adiciona o catalogo no banco de dados
            CatalogoRepository.Atualizar(catalogo);
            UnitOfWork.Commit(false);

            result.Result = true;
            result.SetHttpStatusToOk("Item excluído com sucesso.");
            return(result);
        }
        public async Task <IActionResult> Handle(CadastrarCatalogoCommand request, CancellationToken cancellationToken)
        {
            ApplicationResult <Guid> result = new ApplicationResult <Guid>(request);

            //Monta o objeto com os dados do catalogo
            var catalogo = Domain.AggregatesModel.CatalogoAggregate.Catalogo.Criar(request.UnidadeId);

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

            UnitOfWork.Commit(false);

            result.Result = catalogo.CatalogoId;
            result.SetHttpStatusToOk("Catálogo cadastrado com sucesso.");
            return(result);
        }
示例#14
0
        public async Task <IActionResult> Handle(ExcluirPactoTrabalhoAtividadeCommand request, CancellationToken cancellationToken)
        {
            ApplicationResult <bool> result = new ApplicationResult <bool>(request);

            //Monta o objeto com os dados do catalogo
            var pacto = await PactoTrabalhoRepository.ObterAsync(request.PactoTrabalhoId);

            //Remove a atividade
            pacto.RemoverAtividade(request.PactoTrabalhoAtividadeId);

            //Altera o pacto de trabalho no banco de dados
            PactoTrabalhoRepository.Atualizar(pacto);
            UnitOfWork.Commit(false);

            result.Result = true;
            result.SetHttpStatusToOk("Pacto de trabalho alterado com sucesso.");
            return(result);
        }
示例#15
0
        public async Task <IActionResult> Handle(AlterarPactoTrabalhoCommand request, CancellationToken cancellationToken)
        {
            ApplicationResult <bool> result = new ApplicationResult <bool>(request);

            //Monta o objeto com os dados do catalogo
            var item = await PactoTrabalhoRepository.ObterAsync(request.PactoTrabalhoId);

            //Altera a situação
            //item.AlterarSituacao(request.SituacaoId, request.UsuarioLogado, request.Observacoes);

            //Altera o item de catalogo no banco de dados
            PactoTrabalhoRepository.Atualizar(item);
            UnitOfWork.Commit(false);

            result.Result = true;
            result.SetHttpStatusToOk("Plano de trabalho alterado com sucesso.");
            return(result);
        }
        public async Task <IActionResult> Handle(AlterarPlanoTrabalhoMetaCommand request, CancellationToken cancellationToken)
        {
            ApplicationResult <bool> result = new ApplicationResult <bool>(request);

            //Monta o objeto com os dados do catalogo
            var item = await PlanoTrabalhoRepository.ObterAsync(request.PlanoTrabalhoId);

            //Remove a atividade
            item.AlterarMeta(request.PlanoTrabalhoMetaId, request.Meta, request.Indicador, request.Descricao);

            //Altera o item de catalogo no banco de dados
            PlanoTrabalhoRepository.Atualizar(item);
            UnitOfWork.Commit(false);

            result.Result = true;
            result.SetHttpStatusToOk("Plano de trabalho alterado com sucesso.");
            return(result);
        }
        public async Task <IActionResult> Handle(AlterarSituacaoPlanoTrabalhoCommand request, CancellationToken cancellationToken)
        {
            ApplicationResult <bool> result = new ApplicationResult <bool>(request);

            //Monta o objeto com os dados do catalogo
            var item = await PlanoTrabalhoRepository.ObterAsync(request.PlanoTrabalhoId);

            try
            {
                //Altera a situação do plano
                if (request.Deserto)
                {
                    item.AlterarSituacao((int)SituacaoPlanoTrabalhoEnum.Concluido, request.UsuarioLogadoId.ToString(), request.Observacoes, true);
                }
                else if (request.SituacaoId == (int)SituacaoPlanoTrabalhoEnum.EmExecucao)
                {
                    item.ConcluirHabilitacao(request.UsuarioLogadoId.ToString(), request.Observacoes, request.Aprovados);
                }
                else
                {
                    item.AlterarSituacao(request.SituacaoId, request.UsuarioLogadoId.ToString(), request.Observacoes);
                }

                //Altera o item de catalogo no banco de dados
                PlanoTrabalhoRepository.Atualizar(item);
                UnitOfWork.Commit(false);

                //Notifica os envolvidos
                await EnviarEmails(item);

                result.Result = true;
                result.SetHttpStatusToOk("Plano de trabalho alterado com sucesso.");
            }
            catch (SISRH.Domain.Exceptions.SISRHDomainException ex)
            {
                result.Validations = new List <string>()
                {
                    ex.Message
                };
                result.Result = false;
                result.SetHttpStatusToBadRequest();
            }
            return(result);
        }
示例#18
0
        public async Task <IActionResult> Handle(ResponderSolitacaoPactoTrabalhoAtividadeCommand request, CancellationToken cancellationToken)
        {
            ApplicationResult <bool> result = new ApplicationResult <bool>(request);

            if (!await validarPermissoes(request))
            {
                result.SetHttpStatusToForbidden("O usuário logado não possui permissão suficientes para executar a ação.");
                return(result);
            }

            //Monta os dados do pacto de trabalho
            var pacto = await PactoTrabalhoRepository.ObterAsync(request.PactoTrabalhoId);

            if (request.AjustarPrazo)
            {
                //Obtém os dias não úteis da pessoa
                var dias = diasAumentoPrazo(pacto, request.PactoTrabalhoSolicitacaoId);

                if (dias == null)
                {
                    result.SetHttpStatusToBadRequest("Não foi possível recuperar os dias de aumento de prazo.");
                    return(result);
                }

                var diasNaoUteis = await PessoaQuery.ObterDiasNaoUteisAsync(pacto.PessoaId, pacto.DataInicio, pacto.DataFim.AddDays(Convert.ToDouble(Decimal.Round(dias.Value))));

                pacto.DiasNaoUteis = diasNaoUteis.Result.ToList();
            }

            //Responde a solicitação
            pacto.ResponderSolicitacao(request.PactoTrabalhoSolicitacaoId, request.UsuarioLogadoId.ToString(), request.Aprovado, request.AjustarPrazo, request.Descricao);

            //Altera o pacto de trabalho no banco de dados
            PactoTrabalhoRepository.Atualizar(pacto);
            UnitOfWork.Commit(false);

            //Envia os emails aos envolvidos
            await EnviarEmail(pacto.PessoaId, pacto.UnidadeId);

            result.Result = true;
            result.SetHttpStatusToOk("Pacto de trabalho alterado com sucesso.");
            return(result);
        }