public async Task <Unit> Handle(UpdateMovimentacaoPrevistaCommand request, CancellationToken cancellationToken)
        {
            MovimentacaoPrevista movimentacaoPrevista = mapper.Map <MovimentacaoPrevista>(request);

            var validate = new MovimentacaoPrevistaValidation().Validate(movimentacaoPrevista);

            if (!validate.IsValid)
            {
                throw new ValidationException(validate.Errors);
            }

            Movimentacao movimentacao = movimentacaoDomainService.GetByKey(movimentacaoPrevista.IdItemMovimentacao,
                                                                           movimentacaoPrevista.DataReferencia);

            if (movimentacao.MovimentacoesRealizadas.Count == 0 && movimentacaoPrevista.Status.Equals(StatusMovimentacaoPrevista.Q) ||
                movimentacao.MovimentacoesRealizadas.Count > 0 && !movimentacaoPrevista.Status.Equals(StatusMovimentacaoPrevista.Q))
            {
                throw new StatusMovimentacaoInvalidoException(movimentacao.ItemMovimentacao.Descricao,
                                                              movimentacao.DataReferencia,
                                                              StatusMovimentacaoPrevista.Q);
            }

            movimentacaoPrevistaDomainService.Update(movimentacaoPrevista);
            await mediator.Publish(new MovimentacaoPrevistaNotification
            {
                MovimentacaoPrevista = movimentacaoPrevista,
                Action = ActionNotification.Atualizar
            });

            return(Unit.Value);
        }
        public async Task <Unit> Handle(CreateMovimentacaoPrevistaCommand request, CancellationToken cancellationToken)
        {
            if (request.QtdeParcelas <= 0)
            {
                throw new TotalParcelasMovimentacaoInvalidoException(0);
            }

            if (request.TipoRecorrencia != TipoRecorrenciaMovimentacaoPrevista.M.ToString() &&
                request.TipoRecorrencia != TipoRecorrenciaMovimentacaoPrevista.N.ToString() &&
                request.TipoRecorrencia != TipoRecorrenciaMovimentacaoPrevista.P.ToString())
            {
                throw new TipoRecorrenciaMovimentacaoInvalidoException();
            }

            MovimentacaoPrevista movimentacaoPrevista = mapper.Map <MovimentacaoPrevista>(request);

            var validate = new MovimentacaoPrevistaValidation().Validate(movimentacaoPrevista);

            if (!validate.IsValid)
            {
                throw new ValidationException(validate.Errors);
            }
            List <MovimentacaoPrevista> movimentacoesPrevistas = ConvertList(movimentacaoPrevista, request.TipoRecorrencia, request.QtdeParcelas);

            movimentacaoPrevistaDomainService.Add(movimentacoesPrevistas);

            await mediator.Publish(new MovimentacaoPrevistaNotification
            {
                MovimentacoesPrevistas = movimentacoesPrevistas,
                Action = ActionNotification.Criar
            });

            return(Unit.Value);
        }