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); } }
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(); } }