public int facturar(List <Estadia> estadias, List <ConsumibleParaMostrar> consumiblesXEstadia, String tipoPago, String nombreTarjeta, decimal nroTarjeta, int codSegTarjeta, int vencTarjeta) { int idFactura = 0; int resultado = 0; int numeroFactura = 0; RepositorioEstadia repoEstadia = new RepositorioEstadia(); RepositorioReserva repoReserva = new RepositorioReserva(); RepositorioItemFactura repoItemFactura = new RepositorioItemFactura(); Estadia estadia = null; Reserva reserva = null; //suponemos que hay solo 1 estadia por estrategia enunciado, pero lo dejo aca como para hacer mas si necesito. estadia = estadias.First(); //traigo la reserva y comparo los dias que sean los mismos los de la reserva que los que tuve efectivamente la estadia reserva = repoReserva.getIdByIdEstadia(estadia.getIdEstadia()); List <ItemFactura> itemsFactura = new List <ItemFactura>(); float total = 0; int puntos = 0; //float cant = 1;//pongo cant siempre en 1 ya que no marco mas que 1 solo consumible y lo mismo con la habitacion float monto = 0;//va a ser siempre el precio del cons ya que no marco mas que 1 solo consumible DateTime fecha = Utils.getSystemDatetimeNow(); int idItemFactura = 0; //int idConsumible = 0; //traigo el numero de factura asi le sumo 1 que sera el nuevo. numeroFactura = getLastNumeroFactura() + 1; //traigo regimen para sumarlo o ver si es all inclusive RepositorioRegimen repoRegimen = new RepositorioRegimen(); Regimen regimen = reserva.getRegimen(); Boolean allInclusive = false; if (regimen.getCodigoRegimen().Equals("RGAI")) { allInclusive = true; } //traigo el total //hago for each de los consumibles y sumo total y puntos ItemFactura itemFactura = null; float montoTotal = 0; foreach (ConsumibleParaMostrar cm in consumiblesXEstadia) { int cantidad = cm.getCantidad(); //SI ES ALL INCLUSIVE NO SUMAN PARA EL TOTAL DE LA FACTURA if (!allInclusive) { monto = cm.getConsumible().getPrecio(); } else { monto = 0; } itemFactura = new ItemFactura(idItemFactura, cm.getConsumible().getIdConsumible(), cm.getCantidad(), monto, fecha, idFactura); itemsFactura.Add(itemFactura); montoTotal = monto * cm.getCantidad() + montoTotal; } if (allInclusive) { //es all inclusive, hago un solo itemFactura all inclusive y no se cobra nada int idConsumible = 6;//poner el idConsumible del all inclusive monto = 0; //necesito un nuevo campo que sea descripcion por regimen de estadia itemFactura = new ItemFactura(idItemFactura, idConsumible, 1, monto, fecha, idFactura); itemsFactura.Add(itemFactura); } //sumo la habitacion x los dias alojados float montoHabitacion = 0; float totalHabitacion = 0; //conseguir el montoHabitacion de la reserva montoHabitacion = (float)repoReserva.getMonto(reserva); if (reserva.getDiasAlojados() == estadia.getCantidadNoches()) { float diasAlojados = (float)reserva.getDiasAlojados(); //se quedo toda la estadia hago solo un item factura con los dias x el monto totalHabitacion = montoHabitacion * diasAlojados; int idConsumible = 5; //con 5 marco que es la habitacion itemFactura = new ItemFactura(idItemFactura, idConsumible, diasAlojados, montoHabitacion, fecha, idFactura); itemsFactura.Add(itemFactura); } else { //no se quedo toda la estadia hago un item factura con los diasAlojados x el monto y aparte un item por cada dia que quedo. float diasAlojados = (float)estadia.getCantidadNoches(); float diasAlojadosTotal = (float)reserva.getDiasAlojados(); totalHabitacion = montoHabitacion * diasAlojadosTotal; int idConsumible = 5; //con 5 marco que es la habitacion itemFactura = new ItemFactura(idItemFactura, idConsumible, diasAlojados, montoHabitacion, fecha, idFactura); itemsFactura.Add(itemFactura); float gap = (float)(reserva.getDiasAlojados() - estadia.getCantidadNoches()); itemFactura = new ItemFactura(idItemFactura, idConsumible, gap, montoHabitacion, fecha, idFactura); itemsFactura.Add(itemFactura); } //sumo los puntos float dias = (float)reserva.getDiasAlojados(); puntos = (int)(montoHabitacion * dias) / 20; //puntos de habitacion puntos = puntos + (int)(montoTotal / 10); //puntos de consumibles total = totalHabitacion + montoTotal; Factura factura = new Factura(idFactura, estadia, reserva, numeroFactura, fecha, total, puntos, tipoPago, itemsFactura, nombreTarjeta, nroTarjeta, codSegTarjeta, vencTarjeta); idFactura = this.create(factura); if (idFactura != 0) { foreach (ItemFactura item in itemsFactura) { //hago el set de idFactura para el create item.setIdFactura(idFactura); } repoItemFactura.createTodos(itemsFactura); //hacer update de la estadia avisando que ya facture repoEstadia.facturado(estadia.getIdEstadia()); repoEstadia.updateEstadoFacturado(reserva.getIdReserva()); resultado = 1; } else { resultado = 2; //falla creando factura } return(resultado); }