public ActionResult Edit(long?id) { bool detalle = false; if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } orden_pago_cab orden_pago_cab = db.orden_pago_cab.Find(id); orden_pago_det orden_pago_det = db.orden_pago_det.Where(x => x.orden_pago_cab_id == id).FirstOrDefault(); if (orden_pago_det != null) { detalle = true; } OrdenPagoCabVM opVm = new OrdenPagoCabVM { id = orden_pago_cab.id, Fecha = orden_pago_cab.fecha, Profesional_Id = orden_pago_cab.profesional_id, Importe = orden_pago_cab.importe_total, create_user_id = orden_pago_cab.create_user_id, detalle = detalle }; GetProfesionales(); return(View(opVm)); }
public ActionResult DeleteDetalle(OrdenesPagoDetailsDetalle opvm) { try { if (ModelState.IsValid) { //cacebera orden_pago_cab orden_pago_cab = db.orden_pago_cab.Find(opvm.idCab); //factura factura_proveedores fp = db.factura_proveedores.Find(opvm.FacturaProveedorId); //detalle orden_pago_det orden_pago_det = db.orden_pago_det.Find(opvm.idDet); //actualizacion del importe en la cabecera orden_pago_cab.importe_total = orden_pago_cab.importe_total - orden_pago_det.importe; db.Entry(orden_pago_cab).State = EntityState.Modified; db.SaveChanges(); //actualizo estado de la factura if (fp.estado == 0) //pagado { if (fp.importe_total == orden_pago_det.importe) { fp.estado = 2; } else if (fp.importe_total > orden_pago_det.importe) { fp.estado = 1; } } else if (fp.estado == 1) //pago parcial. { //tengo que buscar si existe la factura en algun detalle que no sea el actual para diferenciar si queda pago parcial o no. int cont = db.orden_pago_det.Where(x => x.factura_proveedores_id == opvm.FacturaProveedorId && x.id != opvm.idDet).Count(); if (cont == 0) { fp.estado = 2; } } db.Entry(fp).State = EntityState.Modified; db.SaveChanges(); //eliminacion fisica del detalle db.orden_pago_det.Remove(orden_pago_det); db.SaveChanges(); return(RedirectToAction("Details", new { id = opvm.idCab, page = 1 })); } } catch { ModelState.AddModelError("", "Se produjo un error, en caso de persistir, ponerse en contacto con el Administrador."); } 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)); }