public ActionResult CreateDetalle(long idCab) { OrdenesPagoDetVM opvm = _repo.GetOrdenPagoCabDet(idCab); GetFacturas(opvm.ProfesionalId); GetFormasPago(); return(View(opvm)); }
public ActionResult CreateDetalle(OrdenesPagoDetVM OPvm, string submit) { try { if (ModelState.IsValid) { factura_proveedores fp = db.factura_proveedores.Where(x => x.id == OPvm.FacturaProveedorId).First(); double importeDetalle = 0; if (OPvm.PagaTotal == false) //ingresa los valores a mano, por eso controlo. { if (OPvm.Importe == null || OPvm.Importe == 0) { GetFacturas(OPvm.ProfesionalId); GetFormasPago(); ModelState.AddModelError("", "Debe ingresar un importe mayor a 0!"); return(View(OPvm)); } //Controlo que el importe a pagar sea menor al ingresado. if (OPvm.Importe > fp.importe_total) { GetFacturas(OPvm.ProfesionalId); GetFormasPago(); ModelState.AddModelError("", "El importe ingresado en la Orden de Pago, no puede ser mayor al saldo por pagar de la Factura que es de: " + fp.importe_total); return(View(OPvm)); } else if (fp.estado == 1) //tiene pago parcial. O sea, le queda algo por saldar pero no es todo el importe de la factura { //Ver en que detalle de orden de pago está para sacar el importe y hacer la diferencia. double importeCargado = db.orden_pago_det.Where(x => x.factura_proveedores_id == OPvm.FacturaProveedorId).Select(x => x.importe).FirstOrDefault(); double diferencia = fp.importe_total - importeCargado; if (OPvm.Importe > diferencia) { GetFacturas(OPvm.ProfesionalId); GetFormasPago(); ModelState.AddModelError("", "El importe ingresado en la Orden de Pago, no puede ser mayor al saldo por pagar de la Factura que es de: " + diferencia); return(View(OPvm)); } } importeDetalle = (double)OPvm.Importe; } else { //tengo que controlar si ya hay algo pago de esa factura if (fp.estado == 1) //pago parcial { double importesSum = 0; List <double> importesCargados = db.orden_pago_det.Where(x => x.factura_proveedores_id == OPvm.FacturaProveedorId).Select(x => x.importe).ToList(); foreach (var l in importesCargados) { importesSum = importesSum + l; } double diferencia = fp.importe_total - importesSum; importeDetalle = diferencia; } else //es 2, significa que no tiene nada pago { importeDetalle = fp.importe_total; } } //Guardo el detalle orden_pago_det opdet = new orden_pago_det { orden_pago_cab_id = OPvm.idCab, factura_proveedores_id = (long)OPvm.FacturaProveedorId, paga_total = OPvm.PagaTotal, importe = importeDetalle, forma_pago = OPvm.FormaPago, nro_cheque = OPvm.NroCheque, nro_cuenta_corriente = OPvm.NroCtaCte, banco = OPvm.Banco, observaciones = OPvm.Observaciones }; db.orden_pago_det.Add(opdet); db.SaveChanges(); //Actualizo el importe en la cabecera orden_pago_cab orden_pago_cab = db.orden_pago_cab.Find(OPvm.idCab); orden_pago_cab.importe_total = orden_pago_cab.importe_total + importeDetalle; db.Entry(orden_pago_cab).State = EntityState.Modified; db.SaveChanges(); //actualizo el estado de la factur fp.estado = OPvm.PagaTotal == true ? 0 : 1; db.Entry(fp).State = EntityState.Modified; db.SaveChanges(); //segun el boton veo adonde lo llevo. if (submit == "Guardar y Volver") { return(RedirectToAction("Details", new { id = OPvm.idCab, page = 1 })); } else { return(RedirectToAction("CreateDetalle", new { idCab = OPvm.idCab })); } } } catch { ModelState.AddModelError("", "Se produjo un error, en caso de persistir, ponerse en contacto con el Administrador."); } GetFacturas(OPvm.ProfesionalId); GetFormasPago(); return(View(OPvm)); }