public ActionResult GerarContratos(GeracaoDeContratosModel model)
 {
     try
     {
         var gerador = new GeradorDeContratos();
         gerador.SolicitarGeracao(model.QuantidadeContratos);
         return(RedirectToAction("GeracaoSolicitada"));
     }
     catch (Exception ex)
     {
         ModelState.AddModelError("", ex.Message);
         return(View());
     }
 }
Ejemplo n.º 2
0
        public void Processar(dynamic 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 geração dos contratos {0} a {1}.", primeiro, ultimo));
                int meio    = (ultimo - primeiro) / 2 + primeiro;
                var gerador = new GeradorDeContratos();
                gerador.SolicitarGeracao(processamentoId, primeiro, meio);
                gerador.SolicitarGeracao(processamentoId, meio + 1, ultimo);
            }
            else
            {
                SolicitarGeracaoDeLote(processamentoId, primeiro, ultimo);
            }
        }