예제 #1
0
        public void Solicitar(SolicitacaoDeManutencaoDto dto)
        {
            var subsidiaria = _subsidiariaRepositorio.ObterPorId(dto.SubsidiariaId);

            var contratoDto = _buscadorDeContrato.Buscar(dto.NumeroDoContrato).Result;

            ExcecaoDeDominio.LancarQuando(contratoDto == null, "Contrato não encontrado no ERP");

            var tipoDeSolicitacaoDeManutencao =
                Enum.Parse <TipoDeSolicitacaoDeManutencao>(dto.TipoDeSolicitacaoDeManutencao.ToString());
            var solicitacaoDeManutencao =
                new SolicitacaoDeManutencao(
                    subsidiaria,
                    dto.SolicitanteId,
                    dto.NomeDoSolicitante,
                    tipoDeSolicitacaoDeManutencao,
                    dto.Justificativa,
                    contratoDto.Numero,
                    contratoDto.NomeDaTerceirizada,
                    contratoDto.CnpjDaTerceirizada,
                    contratoDto.GestorDoContrato,
                    contratoDto.DataFinalDaVigencia,
                    dto.InicioDesejadoParaManutencao);

            var solicitacoesDeManutencaoPendentes =
                _solicitacaoDeManutencaoRepositorio
                .ObterPendentesDoTipo(tipoDeSolicitacaoDeManutencao, subsidiaria);

            _canceladorDeSolicitacoesDeManutencaoPendentes.Cancelar(solicitacoesDeManutencaoPendentes);

            _solicitacaoDeManutencaoRepositorio.Adicionar(solicitacaoDeManutencao);
        }
        public void Deve_validar_solicitacao_de_manutencao_quando_ja_aprovada()
        {
            const string mensagemEsperada = "Solicitação já analisada e está aprovada";

            _solicitacaoDeManutencao = FluentBuilder <SolicitacaoDeManutencao> .New().With(solicitacao => solicitacao.StatusDaSolicitacao, StatusDaSolicitacao.Aprovada).Build();

            _solicitacaoDeManutencaoRepositorio.ObterPorId(_dto.IdDaSolicitacao).Returns(_solicitacaoDeManutencao);

            AssertExtensions.ThrowsWithMessageAsync(() => _analiseDeAprovacaoDaSolicitacao.Analisar(_dto), mensagemEsperada);
        }
        public AnaliseDeAprovacaoDaSolicitacaoDeManutencaoTeste()
        {
            _dto = new AnaliseDeAprovacaoDto {
                IdDaSolicitacao = "XPTO", AprovadorId = 1, NomeDoAprovador = "Mario"
            };
            _solicitacaoDeManutencao = FluentBuilder <SolicitacaoDeManutencao> .New().Build();

            _solicitacaoDeManutencaoRepositorio = Substitute.For <ISolicitacaoDeManutencaoRepositorio>();
            _notificaReprovacaoParaSolicitante  = Substitute.For <INotificaReprovacaoParaSolicitante>();
            _notificaContextoDeServico          = Substitute.For <INotificaContextoDeServico>();
            _solicitacaoDeManutencaoRepositorio.ObterPorId(_dto.IdDaSolicitacao).Returns(_solicitacaoDeManutencao);
            _analiseDeAprovacaoDaSolicitacao =
                new AnaliseDeAprovacaoDaSolicitacaoDeManutencao(
                    _solicitacaoDeManutencaoRepositorio, _notificaReprovacaoParaSolicitante, _notificaContextoDeServico);
        }
예제 #4
0
        public async Task Notificar(SolicitacaoDeManutencao solicitacaoDeManutencao)
        {
            using (var cliente = new HttpClient())
            {
                var conteudoDoJson = JsonConvert.SerializeObject(new
                {
                    solicitacaoDeManutencao.Id,
                    solicitacaoDeManutencao.Justificativa,
                    solicitacaoDeManutencao.DataDaSolicitacao,
                    solicitacaoDeManutencao.IdentificadorDaSubsidiaria,
                    NumeroDoContrato = solicitacaoDeManutencao.Contrato.Numero
                });
                var conteudo           = new StringContent(conteudoDoJson, Encoding.UTF8, "application/json");
                var respostaDoServidor = await cliente.PostAsync($"{_endereco}/servico", conteudo);

                if (!respostaDoServidor.IsSuccessStatusCode)
                {
                    throw new Exception("Comunicação com contexto de serviço não disponível");
                }
            }
        }
예제 #5
0
        public SolicitadorDeManutencaoTeste()
        {
            _dto = new SolicitacaoDeManutencaoDto
            {
                SubsidiariaId                 = "XPTO-ABC",
                SolicitanteId                 = 1,
                NomeDoSolicitante             = "Ricardo José",
                TipoDeSolicitacaoDeManutencao = TipoDeSolicitacaoDeManutencao.Jardinagem.GetHashCode(),
                Justificativa                 = "Grama Alta",
                NumeroDoContrato              = "2135",
                InicioDesejadoParaManutencao  = DateTime.Now.AddMonths(2)
            };

            _solicitacaoDeManutencaoRepositorio            = Substitute.For <ISolicitacaoDeManutencaoRepositorio>();
            _canceladorDeSolicitacoesDeManutencaoPendentes = Substitute.For <ICanceladorDeSolicitacoesDeManutencaoPendentes>();
            _solicitacaoDeManutencao = FluentBuilder <SolicitacaoDeManutencao> .New().With(s => s.IdentificadorDaSubsidiaria, _dto.SubsidiariaId).Build();

            var fabricaDeSolicitacaoDeManutencao = Substitute.For <FabricaDeSolicitacaoDeManutencao>();

            fabricaDeSolicitacaoDeManutencao.Fabricar(_dto).Returns(_solicitacaoDeManutencao);
            _solicitador = new SolicitadorDeManutencao(
                _solicitacaoDeManutencaoRepositorio, fabricaDeSolicitacaoDeManutencao, _canceladorDeSolicitacoesDeManutencaoPendentes);
        }
예제 #6
0
 private void Reprovar(SolicitacaoDeManutencao solicitacaoDeManutencao, Autor aprovador)
 {
     solicitacaoDeManutencao.Reprovar(aprovador);
     _notificaReprovacaoParaSolicitante.Notificar(solicitacaoDeManutencao);
 }
예제 #7
0
 private void Aprovar(SolicitacaoDeManutencao solicitacaoDeManutencao, Autor aprovador)
 {
     solicitacaoDeManutencao.Aprovar(aprovador);
     _notificaContextoDeServico.Notificar(solicitacaoDeManutencao);
 }
 public void Notificar(SolicitacaoDeManutencao solicitacaoDeManutencao)
 {
 }
 private async Task Aprovar(SolicitacaoDeManutencao solicitacaoDeManutencao, Autor aprovador)
 {
     solicitacaoDeManutencao.Aprovar(aprovador);
     await _notificaContextoDeServico.Notificar(solicitacaoDeManutencao);
 }
 public void Notificar(SolicitacaoDeManutencao solicitacaoDeManutencao)
 {
     //TODO: Implementar envio de e-mail. Como este código tem fins educativo não será implementado
 }