//
        // GET: /Sales/
        public ActionResult Sales()
        {
            saleViewModel svm = new saleViewModel();

            svm.sales = new Sale();
            var MaxId = db.Sales.ToList().OrderByDescending(r => r.saleId).FirstOrDefault();

            svm.sales.saleId   = MaxId == null ? 1 : (MaxId.saleId) + 1;
            svm.sales.saleDate = DateTime.Now.Date;
            ViewBag.customers  = db.Customers.ToList();
            ViewBag.products   = db.Products.ToList();
            ViewBag.sales      = db.Sales.ToList();
            ViewBag.accounts   = db.ExpenseAccounts.Where(r => (r.isGroup == false) && (r.isActive == true) && (r.accountType == "Assets") && (r.name == "Cash")).ToList();
            return(View(svm));
        }
        public ActionResult Edit(int?id)
        {
            ViewBag.customers = db.Customers.ToList();
            ViewBag.products  = db.Products.ToList();
            ViewBag.sales     = db.Sales.ToList();
            saleViewModel sa = new saleViewModel();

            sa.sales = new Sale();
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            sa.sales = db.Sales.Find(id);
            if (sa == null)
            {
                return(HttpNotFound());
            }
            return(View("Sales", sa));
        }
        public ActionResult voucher(saleViewModel svm)
        {
            Voucher vo  = new Voucher();
            var     max = db.Vouchers.ToList().OrderByDescending(r => r.voucherNo).FirstOrDefault();

            vo.voucherNo   = max == null ? 1 : (max.voucherNo) + 1;
            vo.voucherDate = svm.saleDate;
            vo.voucherType = 11; //Sale Voucher
            db.Vouchers.Add(vo);
            db.SaveChanges();
            Sale sale = new Sale();

            sale.saleId        = svm.saleId;
            sale.saleDate      = svm.saleDate;
            sale.customerCode  = svm.customerCode;
            sale.customerName  = svm.customerName;
            sale.saleVoucherNo = vo.voucherNo;
            db.Sales.Add(sale);
            db.SaveChanges();
            decimal dr = 0;

            foreach (var item in svm.saleDetails)
            {
                SaleDetail sd = new SaleDetail();
                sd.serialNo = db.Sales.Select(r => r.saleId).Sum().ToString();
                Product uom = db.Products.Single(r => r.productCode == item.productCode);
                if (uom != null)
                {
                    if (uom.currentQuantity > 0)
                    {
                        uom.currentQuantity -= item.quantity;
                    }
                    uom.price = item.salePrice;
                }
                sd.saleDetailsId = svm.saleId;
                sd.productCode   = item.productCode;
                sd.productName   = item.productName;
                sd.unitOfMeasure = item.unitOfMeasure;
                sd.quantity      = item.quantity;
                sd.salePrice     = item.salePrice;
                sd.amount        = item.amount;
                db.SaleDetails.Add(sd);
                db.SaveChanges();
                VoucherBody    vbcp = new VoucherBody();
                ExpenseAccount ea   = db.ExpenseAccounts.Single(r => r.code == uom.chartOfAccCode + 1);
                vbcp.accountNo   = ea.code;
                vbcp.accountName = ea.name;
                vbcp.credit      = item.amount;
                vbcp.debit       = 0;
                vbcp.description = "Item Sold";
                vbcp.voucherNo   = vo.voucherNo;
                dr += item.amount;
            }
            VoucherBody vbdp = new VoucherBody();
            var         cus  = db.Customers.SingleOrDefault(r => r.customerCode == svm.customerCode);
            var         ex   = db.ExpenseAccounts.Single(r => r.code == cus.chartOfAccCode);

            vbdp.accountNo   = ex.code;
            vbdp.accountName = ex.name;
            vbdp.credit      = 0;
            vbdp.debit       = dr;
            vbdp.description = "Item Sold";
            vbdp.voucherNo   = vo.voucherNo;
            db.VoucherBodies.Add(vbdp);
            db.SaveChanges();
            if (svm.transactionType == 1)
            {
                Voucher v       = new Voucher();
                var     maximum = db.Vouchers.ToList().OrderByDescending(r => r.voucherNo).FirstOrDefault();
                v.voucherNo   = maximum == null ? 1 : (maximum.voucherNo) + 1;
                v.voucherDate = svm.saleDate;
                v.voucherType = 2; //Cash Reciept
                db.Vouchers.Add(v);
                db.SaveChanges();
                VoucherBody vbd = new VoucherBody();
                var         exp = db.ExpenseAccounts.Single(r => r.code == svm.accountno);
                vbd.accountNo   = exp.code;
                vbd.accountName = exp.name;
                vbd.debit       = svm.netPayment;
                vbd.credit      = 0;
                vbd.description = "Cash Received";
                vbd.voucherNo   = v.voucherNo;
                db.VoucherBodies.Add(vbd);
                db.SaveChanges();
                VoucherBody vbc      = new VoucherBody();
                var         customer = db.Customers.SingleOrDefault(r => r.customerCode == svm.customerCode);
                var         exc      = db.ExpenseAccounts.Single(r => r.code == customer.chartOfAccCode);
                vbc.accountNo   = exc.code;
                vbc.accountName = exc.name;
                vbc.credit      = svm.netPayment;
                vbc.debit       = 0;
                vbc.description = "net Payment";
                vbc.voucherNo   = v.voucherNo;
                db.VoucherBodies.Add(vbc);
                db.SaveChanges();
            }
            return(Json(""));
        }