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);
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> Handle(AlterarPlanoTrabalhoObjetoCommand 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);

            var assuntosId = request.Assuntos.Select(a => a.AssuntoId);

            var custosParaAdicionar = request.Custos
                                      .Where(c => c.PlanoTrabalhoCustoId == null)
                                      .Select(c => PlanoTrabalhoCusto.Criar(c.PlanoTrabalhoId, c.Valor, c.Descricao, request.PlanoTrabalhoObjetoId));
            var idsCustos = request.Custos
                            .Where(c => c.PlanoTrabalhoCustoId != null)
                            .Select(c => c.PlanoTrabalhoCustoId.Value);

            var reunioesParaAdicionar = request.Reunioes
                                        .Where(c => c.PlanoTrabalhoReuniaoId == null)
                                        .Select(c => PlanoTrabalhoReuniao.Criar(c.PlanoTrabalhoId, c.Data, c.Titulo, c.Descricao, request.PlanoTrabalhoObjetoId));
            var idsReunioes = request.Reunioes
                              .Where(c => c.PlanoTrabalhoReuniaoId != null)
                              .Select(c => c.PlanoTrabalhoReuniaoId.Value);

            //Recupera o PlanoTrabalho do banco
            var item = await PlanoTrabalhoRepository.ObterAsync(request.PlanoTrabalhoId);

            //Altera o objeto
            item.AlterarObjeto(request.PlanoTrabalhoObjetoId, assuntosId, custosParaAdicionar, idsCustos, reunioesParaAdicionar, idsReunioes);

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

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