예제 #1
0
 public ActionResult Index(SolicitacaoDeFaturamentoModel model)
 {
     try
     {
         var faturamento = new FaturamentoDeContratos();
         faturamento.SolicitarFaturamento(model.Ano, model.Mes);
         return(RedirectToAction("FaturamentoSolicitado"));
     }
     catch (Exception ex)
     {
         ModelState.AddModelError("", ex.Message);
         return(View());
     }
 }
예제 #2
0
        public void Processar(dynamic mensagem)
        {
            int ano = mensagem.Ano;

            if (ano < 2012 || ano > 2999)
            {
                throw new ArgumentException("O ano está fora da faixa suportada.", "mensagem");
            }

            int mes = mensagem.Mes;

            if (mes < 1 || mes > 12)
            {
                throw new ArgumentException("O mês está fora da faixa suportada.", "mensagem");
            }

            int primeiro = mensagem.Primeiro;

            if (primeiro < 1)
            {
                throw new ArgumentException("O número do primeiro contrato deve ser no mínimo 1.", "mensagem");
            }

            int ultimo = mensagem.Ultimo;

            if (ultimo < primeiro)
            {
                throw new ArgumentException("O número do último contrato deve ser maior ou igual ao primeiro.",
                                            "mensagem");
            }
            if (ultimo > Contrato.NumeroMaximoDeContrato)
            {
                throw new ArgumentException(
                          String.Format("O número do último contrato deve ser menor do que {0}.",
                                        Contrato.NumeroMaximoDeContrato),
                          "mensagem");
            }

            Guid processamentoId = mensagem.ProcessamentoId;

            if (processamentoId == Guid.Empty)
            {
                throw new ArgumentException("O identificador do processamento não foi encontrado.", "mensagem");
            }

            int quantidade = ultimo - primeiro + 1;

            if (quantidade > _quantidadeMaximaPorLote)
            {
                Trace.WriteLine(
                    String.Format("Subdividindo solicitação de faturamento para {0}/{1} dos contratos {2} a {3}.", mes, ano, primeiro, ultimo));
                int meio    = (ultimo - primeiro) / 2 + primeiro;
                var gerador = new FaturamentoDeContratos();
                gerador.SolicitarFaturamento(processamentoId, ano, mes, primeiro, meio);
                gerador.SolicitarFaturamento(processamentoId, ano, mes, meio + 1, ultimo);
            }
            else
            {
                Faturar(processamentoId, ano, mes, primeiro, ultimo);
            }
        }