public ActionResult DeleteConfirmed2(int id)
        {
            lineaFactura lineaFactura = db.lineaFactura.Find(id);

            db.lineaFactura.Remove(lineaFactura);
            db.SaveChanges();
            return(RedirectToAction("Index", "facturas", ""));
        }
 public ActionResult Edit([Bind(Include = "facturaID,lineaPedidoID,cantidadFacturada,descripcion,subtotal,totalDescuento,totalImpuesto,totalPagar")] lineaFactura lineaFactura)
 {
     if (ModelState.IsValid)
     {
         db.Entry(lineaFactura).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.facturaID     = new SelectList(db.factura, "facturaID", "facturaID", lineaFactura.facturaID);
     ViewBag.lineaPedidoID = new SelectList(db.lineaPedido, "lineaPedidoID", "lineaPedidoID", lineaFactura.lineaPedidoID);
     return(View(lineaFactura));
 }
        // GET: lineaFacturas/Details/5
        public ActionResult Details2(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            lineaFactura lineaFactura = db.lineaFactura.Find(id);

            if (lineaFactura == null)
            {
                return(HttpNotFound());
            }
            return(View(lineaFactura));
        }
        // GET: lineaFacturas/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            lineaFactura lineaFactura = db.lineaFactura.Find(id);

            if (lineaFactura == null)
            {
                return(HttpNotFound());
            }
            ViewBag.facturaID     = new SelectList(db.factura, "facturaID", "facturaID", lineaFactura.facturaID);
            ViewBag.lineaPedidoID = new SelectList(db.lineaPedido, "lineaPedidoID", "lineaPedidoID", lineaFactura.lineaPedidoID);
            return(View(lineaFactura));
        }
        public ActionResult Create([Bind(Include = "facturaID,lineaPedidoID,cantidadFacturada,descripcion,subtotal,totalDescuento,totalImpuesto,totalPagar")] lineaFactura lineaFactura)
        {
            if (lineaFactura.lineaPedidoID == 0)
            {
                ModelState.AddModelError("lineaPedidoID", "No productos confirmados para facturar");
            }

            try
            {
                int cantidadFacturada  = (int)db.lineaFactura.Where(a => a.lineaPedidoID == lineaFactura.lineaPedidoID).Sum(a => a.cantidadFacturada);
                int cantidadPedido     = (int)db.lineaPedido.Where(a => a.lineaPedidoID == lineaFactura.lineaPedidoID).Select(a => a.cantidad).First();
                int cantidadResultante = cantidadPedido - cantidadFacturada;

                if (lineaFactura.cantidadFacturada == 0 || lineaFactura.cantidadFacturada > cantidadResultante)
                {
                    ModelState.AddModelError("cantidadFacturada", "Cantidad a facturar supera la cantidad restante por facturar de la linea pedido");
                }
            }
            catch (Exception e) { }

            if (ModelState.IsValid)
            {
                double preciov = 0, sub = 0, totald = 0, totali = 0, totalp = 0;
                int    cantidad = (int)lineaFactura.cantidadFacturada;
                try
                {
                    var lp2 = db.lineaPedido.Where(a => a.lineaPedidoID == lineaFactura.lineaPedidoID).FirstOrDefault();
                    preciov = (double)lp2.precioVenta;
                    sub     = preciov * cantidad;
                    totald  = cantidad * (((double)lp2.descuento) * preciov / 100);
                    totali  = cantidad * (((double)lp2.impuesto) * preciov / 100);
                    totalp  = sub + totali - totald;
                }
                catch (Exception e) { }

                lineaFactura.subtotal       = sub;
                lineaFactura.totalDescuento = totald;
                lineaFactura.totalImpuesto  = totali;
                lineaFactura.totalPagar     = totalp;

                db.lineaFactura.Add(lineaFactura);
                db.SaveChanges();

                //Se actualiza una cuenta por cobrar
                try
                {
                    double totalapagar = 0, totalimpuestos = 0, totalpagado = 0;
                    var    cuenta  = db.cuentaPorCobrar.Where(x => x.facturaID == lineaFactura.facturaID).First();
                    var    totalfa = db.lineaFactura.Where(l => l.facturaID == lineaFactura.facturaID).Sum(l => l.totalPagar);

                    var lpedidos  = db.lineaFactura.Where(l => l.facturaID == lineaFactura.facturaID).Select(l => l.lineaPedidoID).ToArray();
                    var pedidosID = db.lineaPedido.Where(s => lpedidos.Contains(s.lineaPedidoID)).Select(s => s.pedidoID).ToArray();
                    var pedidos   = db.lineaPedido.Where(s => pedidosID.Contains(s.pedidoID)).Sum(s => s.precioTotal);

                    var totalim = db.lineaPedido.Where(s => pedidosID.Contains(s.pedidoID));
                    if (totalim != null)
                    {
                        foreach (lineaPedido linea in totalim)
                        {
                            totalimpuestos += ((double)linea.impuesto * (double)linea.precioTotal / 100);
                        }
                    }
                    totalpagado = (double)totalfa;
                    if (pedidos != null)
                    {
                        totalapagar = (double)pedidos;
                    }
                    cuenta.totalPagado   = totalpagado;
                    cuenta.totalImpuesto = totalimpuestos;
                    cuenta.totalAPagar   = totalapagar;

                    db.Entry(cuenta).State = EntityState.Modified;
                    db.SaveChanges();
                }
                catch (Exception e) { }

                return(RedirectToAction("Index", "facturas", ""));
            }

            ViewBag.facturaID     = new SelectList(db.factura, "facturaID", "facturaID", lineaFactura.facturaID);
            ViewBag.lineaPedidoID = new SelectList(db.lineaPedido, "lineaPedidoID", "lineaPedidoID", lineaFactura.lineaPedidoID);
            return(View(lineaFactura));
        }