public Task <int> Handle(RegisterNewSituacaoProcedimentoCommand request, CancellationToken cancellationToken)
        {
            if (!request.IsValid())
            {
                NotifyValidationErrors(request);
                return(Task.FromResult(0));
            }

            var procedimento = _procedimentoRepository.GetById(request.ProcedimentoId);

            if (procedimento == null)
            {
                Bus.RaiseEvent(new DomainNotification(request.MessageType, "O Procedimento não foi encontrado."));
                return(Task.FromResult(0));
            }

            var situacao = _situacaoRepository.GetById(request.SituacaoId);

            if (situacao == null)
            {
                Bus.RaiseEvent(new DomainNotification(request.MessageType, "A Situação não foi encontrada."));
                return(Task.FromResult(0));
            }

            SituacaoTipo tipoSituacao = null;

            if (request.SituacaoTipoId.HasValue)
            {
                tipoSituacao = _situacaoTipoRepository.GetById(request.SituacaoTipoId.Value);

                if (request.SituacaoTipoId.Value > 0 && tipoSituacao == null)
                {
                    Bus.RaiseEvent(new DomainNotification(request.MessageType, "O motivo não foi encontrado."));
                    return(Task.FromResult(0));
                }
            }

            //if (_situacaoProcedimentoRepository.Exists(request.ProcedimentoId, request.SituacaoId, request.SituacaoTipoId))
            //{
            //    Bus.RaiseEvent(new DomainNotification(request.MessageType, "O procedimento encontra-se na situação atual. Nada pra atualizar."));
            //    return Task.FromResult(0);
            //}

            var situacaoProcedimento = new SituacaoProcedimento(procedimento, situacao, tipoSituacao, request.DataRelatorio, request.Observacao);

            _situacaoProcedimentoRepository.Add(situacaoProcedimento);

            procedimento.SituacaoAtual = situacao;

            _procedimentoRepository.Update(procedimento);

            if (Commit())
            {
                //TO DO
            }

            return(Task.FromResult(situacaoProcedimento.Id));
        }
Ejemplo n.º 2
0
        public Task <int> Handle(UpdateProcedimentoCommand request, CancellationToken cancellationToken)
        {
            if (!request.IsValid())
            {
                NotifyValidationErrors(request);
                return(Task.FromResult(0));
            }

            var tipoProcedimento = _procedimentoTipoRepository.GetById(request.TipoProcedimentoId);

            if (tipoProcedimento == null)
            {
                Bus.RaiseEvent(new DomainNotification(request.MessageType, "O Tipo de Procedimento não foi encontrado."));
                return(Task.FromResult(0));
            }

            var artigo = _artigoRepository.GetById(request.ArtigoId);

            if (artigo == null)
            {
                Bus.RaiseEvent(new DomainNotification(request.MessageType, "O Artigo não foi encontrado."));
                return(Task.FromResult(0));
            }

            var assunto = _assuntoRepository.GetById(request.AssuntoId);

            if (assunto == null)
            {
                Bus.RaiseEvent(new DomainNotification(request.MessageType, "O Assunto não foi encontrado."));
                return(Task.FromResult(0));
            }

            var municipio = _municipioRepository.GetById(request.ComarcaId);

            if (municipio == null)
            {
                Bus.RaiseEvent(new DomainNotification(request.MessageType, "A Comarca não foi encontrada."));
                return(Task.FromResult(0));
            }

            var varaCriminal = _varaCriminalRepository.GetById(request.VaraCriminalId);

            if (varaCriminal == null)
            {
                Bus.RaiseEvent(new DomainNotification(request.MessageType, "A Vara Criminal não foi encontrada."));
                return(Task.FromResult(0));
            }

            var unidadePolicial = _unidadePolicialRepository.GetById(request.DelegaciaOrigemId);

            if (unidadePolicial == null)
            {
                Bus.RaiseEvent(new DomainNotification(request.MessageType, "A Delegacia de Origem não foi encontrada."));
                return(Task.FromResult(0));
            }

            var existringProcedimento = _procedimentoRepository.GetAsNoTracking(x => x.BoletimUnificado.Contains(request.BoletimUnificado) &&
                                                                                x.NumeroProcessual.Contains(request.NumeroProcessual) &&
                                                                                x.Id == request.Id);

            var situacaoAtual = _situacaoRepository.GetById(existringProcedimento.SituacaoAtualId);

            var procedimento = new Procedimento(request.Id, request.BoletimUnificado, request.BoletimOcorrencia, request.NumeroProcessual, request.Gampes,
                                                request.Anexos, request.LocalFato, request.DataFato, request.DataInstauracao, request.TipoCriminal,
                                                request.AndamentoProcessual, tipoProcedimento, varaCriminal, municipio, assunto, artigo, unidadePolicial, situacaoAtual);

            if (!procedimento.Equals(existringProcedimento))
            {
                Bus.RaiseEvent(new DomainNotification(request.MessageType, "O Boletim Unificado já está sendo usado."));
                return(Task.FromResult(0));
            }

            _procedimentoRepository.Update(procedimento);

            if (Commit())
            {
                // TO DO: Raise Event
            }

            return(Task.FromResult(procedimento.Id));
        }