public void RegistrarPagamento(DateTime data, IEnumerable <ICompromissoPagamento> compromissosPagamento) { Pagamento pagamento = new Pagamento { DataPagamento = data, ValorTotal = compromissosPagamento.Sum(comp => comp.ValorPago) }; foreach (var compromisso in compromissosPagamento) { if (compromisso is Mensalidade) { MensalidadeService.QuitarMensalidade((Mensalidade)compromisso, data); } else if (compromisso is Emprestimo) { var emprestimo = (Emprestimo)compromisso; if (emprestimo.ValorPago < emprestimo.ValorDevido) { EmprestimoService.RealizarPagamentoParcial(emprestimo, data); } else { EmprestimoService.QuitarEmprestimo(emprestimo, data); } } pagamento.ItensPagamento.Add(new ItemPagamento { Id = compromisso.Id, Tipo = compromisso is Mensalidade ? Enumerados.ItemPagamentoEnum.Mensalidade : Enumerados.ItemPagamentoEnum.Emprestimo }); } repositorio.Incluir(pagamento); repositorio.Commit(); }