public void Create(DebitNoteItem DebitNoteItem)
 {
     _DebitNoteItemRepository.Add(DebitNoteItem);
     _UnitOfWork.Commit();
 }
        public ActionResult PurchaseReturn(MainApplication model, FormCollection frmcol)
        {
            string shopcode = Session["LOGINSHOPGODOWNCODE"].ToString();
            string shopname = Session["SHOPGODOWNNAME"].ToString();

            string year = FinancialYear;

            string[] yr    = year.Split(' ', '-');
            string   FinYr = "/" + yr[2].Substring(2) + "-" + yr[6].Substring(2);
            var      LastPurchaseReturn   = _PurchaseReturnService.GetLastPurchaseByFinYr(FinYr, shopcode);
            string   PurchaseReturnCode   = string.Empty;
            int      PurchaseReturnLength = 0;
            int      PurchaseReturnNo     = 0;

            if (LastPurchaseReturn == null)
            {
                PurchaseReturnLength = 1;
                PurchaseReturnNo     = 1;
            }
            else
            {
                int PurchaseReturnIndex = LastPurchaseReturn.PurchaseReturnNo.LastIndexOf('P');
                PurchaseReturnCode   = LastPurchaseReturn.PurchaseReturnNo.Substring(PurchaseReturnIndex + 2, 6);
                PurchaseReturnLength = (Convert.ToInt32(PurchaseReturnCode) + 1).ToString().Length;
                PurchaseReturnNo     = Convert.ToInt32(PurchaseReturnCode) + 1;
            }

            string ShortCode = string.Empty;

            if (shopcode.Contains("SH"))
            {
                var detail = _ShopService.GetShopDetailsByName(shopname);
                ShortCode = detail.ShortCode;
            }
            else
            {
                var detail = _GodownService.GetGodownDetailsByName(shopname);
                ShortCode = detail.ShortCode;
            }
            PurchaseReturnCode = _UtilityService.getName(ShortCode + "/PR", PurchaseReturnLength, PurchaseReturnNo);
            PurchaseReturnCode = PurchaseReturnCode + FinYr;
            string DebitNoteNo = _UtilityService.getName(ShortCode + "/DBN", PurchaseReturnLength, PurchaseReturnNo);

            DebitNoteNo = DebitNoteNo + FinYr;
            model.PurchaseReturnDetails.Code               = Session["LOGINSHOPGODOWNCODE"].ToString();
            model.PurchaseReturnDetails.PurchaseReturnNo   = PurchaseReturnCode;
            model.PurchaseReturnDetails.PurchaseReturnDate = DateTime.Now;
            model.PurchaseReturnDetails.DebitNoteNo        = DebitNoteNo;
            model.PurchaseReturnDetails.DebitNoteDate      = DateTime.Now;
            if (model.PurchaseReturnDetails.PackAndForwd == null)
            {
                model.PurchaseReturnDetails.PackAndForwd = 0;
            }
            model.PurchaseReturnDetails.DebitNoteAmount = Convert.ToDouble(frmcol["SupplierAmount"]);
            model.PurchaseReturnDetails.TotalAmount     = Convert.ToDouble(frmcol["TotalAmountValue"]);
            model.PurchaseReturnDetails.TotalTaxAmount  = Convert.ToDouble(frmcol["TotalTaxAmountValue"]);
            model.PurchaseReturnDetails.GrandTotal      = Convert.ToDouble(frmcol["GrandTotalValue"]);
            model.PurchaseReturnDetails.Status          = "Active";
            model.PurchaseReturnDetails.ModifiedOn      = DateTime.Now;
            _PurchaseReturnService.Create(model.PurchaseReturnDetails);

            DebitNote DebitNote = new DebitNote();

            DebitNote.DebitNoteNo      = DebitNoteNo;
            DebitNote.DebitNoteDate    = DateTime.Now;
            DebitNote.SupplierName     = model.PurchaseReturnDetails.SupplierName;
            DebitNote.BillNo           = model.PurchaseReturnDetails.SupplierBillNo;
            DebitNote.ChallanNo        = model.PurchaseReturnDetails.SupplierChallanNo;
            DebitNote.InwardNo         = model.PurchaseReturnDetails.InwardNo;
            DebitNote.PurchaseReturnNo = PurchaseReturnCode;
            DebitNote.Amount           = Convert.ToDouble(frmcol["SupplierAmount"]);
            DebitNote.Status           = "Active";
            DebitNote.ModifiedOn       = DateTime.Now;
            _DebitNoteService.Create(DebitNote);

            var Inwardreturnlist = TempData["InwardItemList"] as IEnumerable <InwardItemsFromSupplier>;
            int count            = 1;

            foreach (var item in Inwardreturnlist)
            {
                string checkbox = "CheckBox" + count;
                string quantity = "quantity" + count;
                string amount   = "amountvalue" + count;
                string prevqty  = "prevquantityvalue" + count;
                if (frmcol[checkbox] == "Yes")
                {
                    PurchaseReturnItem PurchaseReturnItem = new PurchaseReturnItem();
                    PurchaseReturnItem.PurchaseReturnNo = PurchaseReturnCode;
                    PurchaseReturnItem.Barcode          = item.Barcode;
                    PurchaseReturnItem.ItemCode         = item.itemCode;
                    PurchaseReturnItem.ItemName         = item.Item;
                    PurchaseReturnItem.ItemType         = item.ItemType;
                    PurchaseReturnItem.Description      = item.Description;
                    PurchaseReturnItem.DesignCode       = item.Design;
                    PurchaseReturnItem.DesignName       = item.DesignName;
                    PurchaseReturnItem.Color            = item.Color;
                    PurchaseReturnItem.Material         = item.Material;
                    PurchaseReturnItem.Brand            = item.Brand;
                    PurchaseReturnItem.Size             = item.Size;
                    PurchaseReturnItem.Unit             = item.Unit;
                    PurchaseReturnItem.NumberType       = item.NumberType;
                    PurchaseReturnItem.Quantity         = Convert.ToDouble(frmcol[quantity]);
                    PurchaseReturnItem.Balance          = Convert.ToDouble(frmcol[prevqty]) - Convert.ToDouble(frmcol[quantity]);
                    PurchaseReturnItem.CostPrice        = item.CostPrice;
                    PurchaseReturnItem.DisPer           = item.Discount.ToString();
                    PurchaseReturnItem.SellingPrice     = item.SellingPrice;
                    PurchaseReturnItem.MRP        = item.MRP;
                    PurchaseReturnItem.ItemTax    = item.ItemTax;
                    PurchaseReturnItem.Amount     = Convert.ToDouble(frmcol[amount]);
                    PurchaseReturnItem.Status     = "Active";
                    PurchaseReturnItem.ModifiedOn = DateTime.Now;
                    _PurchaseReturnItemService.Create(PurchaseReturnItem);

                    var inwarditem = _InwardItemFromSupplierService.GetItemByInwardNoAndItemCode(model.PurchaseReturnDetails.InwardNo, PurchaseReturnItem.ItemCode);
                    inwarditem.PurchaseReturn = "Yes";
                    _InwardItemFromSupplierService.Update(inwarditem);

                    DebitNoteItem DebitNoteItem = new DebitNoteItem();
                    DebitNoteItem.DebitNoteNo  = DebitNoteNo;
                    DebitNoteItem.ItemCode     = item.itemCode;
                    DebitNoteItem.ItemName     = item.Item;
                    DebitNoteItem.Description  = item.Description;
                    DebitNoteItem.ItemType     = item.ItemType;
                    DebitNoteItem.Color        = item.Color;
                    DebitNoteItem.Material     = item.Material;
                    DebitNoteItem.DesignName   = item.DesignName;
                    DebitNoteItem.Brand        = item.Brand;
                    DebitNoteItem.Size         = item.Size;
                    DebitNoteItem.Quantity     = Convert.ToDouble(frmcol[quantity]);
                    DebitNoteItem.Unit         = item.Unit;
                    DebitNoteItem.CostPrice    = item.CostPrice;
                    DebitNoteItem.NumberType   = item.NumberType;
                    DebitNoteItem.SellingPrice = item.SellingPrice;
                    DebitNoteItem.MRP          = item.MRP;
                    DebitNoteItem.ItemTax      = item.ItemTax;
                    DebitNoteItem.Amount       = Convert.ToDouble(frmcol[amount]);
                    DebitNoteItem.Status       = "Active";
                    DebitNoteItem.ModifiedOn   = DateTime.Now;
                    _DebitNoteItemService.Create(DebitNoteItem);

                    var iteminward = _InwardItemFromSupplierService.GetItemByInwardNoAndItemCode(model.PurchaseReturnDetails.InwardNo, item.itemCode);
                    iteminward.PurchaseReturn = "Yes";
                    _InwardItemFromSupplierService.Update(iteminward);

                    string code = Session["LOGINSHOPGODOWNCODE"].ToString();
                    if (item.ItemType == "Inventory")
                    {
                        if (code.Contains("SH"))
                        {
                            var shopdetails = _ShopStockService.GetDetailsByItemCodeAndShopCode(item.itemCode, code);
                            shopdetails.Quantity = shopdetails.Quantity - PurchaseReturnItem.Quantity;
                            _ShopStockService.Update(shopdetails);

                            var stockitemdetails = _StockItemDistributionService.GetDetailsByItemCodeAndShopCode(item.itemCode, code);
                            stockitemdetails.ItemQuantity = stockitemdetails.ItemQuantity - PurchaseReturnItem.Quantity;
                            _StockItemDistributionService.Update(stockitemdetails);
                        }
                        else
                        {
                            var godowndetails = _GodownStockService.GetDetailsByItemCodeAndGodownCode(item.itemCode, code);
                            godowndetails.Quantity = godowndetails.Quantity - PurchaseReturnItem.Quantity;
                            _GodownStockService.Update(godowndetails);

                            var stockitemdetails = _StockItemDistributionService.GetDetailsByItemCodeAndGodownCode(item.itemCode, code);
                            stockitemdetails.ItemQuantity = stockitemdetails.ItemQuantity - PurchaseReturnItem.Quantity;
                            _StockItemDistributionService.Update(stockitemdetails);
                        }

                        var entrystockitems = _EntryStockItemService.getDetailsByItemCode(item.itemCode);
                        if (entrystockitems != null)
                        {
                            entrystockitems.TotalQuantity = entrystockitems.TotalQuantity - PurchaseReturnItem.Quantity;
                            _EntryStockItemService.Update(entrystockitems);
                        }
                        else
                        {
                            var openingstockitems = _OpeningStockService.GetDetailsByItemCode(item.itemCode);
                            openingstockitems.TotalQuantity = openingstockitems.TotalQuantity - PurchaseReturnItem.Quantity;
                            _OpeningStockService.UpdateStock(openingstockitems);
                        }
                    }
                }
                count++;
            }
            count = Inwardreturnlist.Count() + 1;
            var purchasereturnlist = TempData["PurchaseReturnList"] as IEnumerable <PurchaseReturnItem>;

            foreach (var item in purchasereturnlist)
            {
                string checkbox = "CheckBox" + count;
                string quantity = "quantity" + count;
                string amount   = "amountvalue" + count;
                string prevqty  = "prevquantityvalue" + count;
                if (frmcol[checkbox] == "Yes")
                {
                    item.PurchaseReturnNo = PurchaseReturnCode;
                    item.Quantity         = Convert.ToDouble(frmcol[quantity]);
                    item.Balance          = Convert.ToDouble(frmcol[prevqty]) - Convert.ToDouble(frmcol[quantity]);
                    item.Amount           = Convert.ToDouble(frmcol[amount]);
                    item.Status           = "Active";
                    item.ModifiedOn       = DateTime.Now;
                    _PurchaseReturnItemService.Create(item);

                    DebitNoteItem DebitNoteItem = new DebitNoteItem();
                    DebitNoteItem.DebitNoteNo  = DebitNoteNo;
                    DebitNoteItem.ItemCode     = item.ItemCode;
                    DebitNoteItem.ItemName     = item.ItemName;
                    DebitNoteItem.Description  = item.Description;
                    DebitNoteItem.ItemType     = item.ItemType;
                    DebitNoteItem.Color        = item.Color;
                    DebitNoteItem.Material     = item.Material;
                    DebitNoteItem.DesignName   = item.DesignName;
                    DebitNoteItem.Brand        = item.Brand;
                    DebitNoteItem.Size         = item.Size;
                    DebitNoteItem.Quantity     = Convert.ToDouble(frmcol[quantity]);
                    DebitNoteItem.Unit         = item.Unit;
                    DebitNoteItem.NumberType   = item.NumberType;
                    DebitNoteItem.CostPrice    = item.CostPrice;
                    DebitNoteItem.SellingPrice = item.SellingPrice;
                    DebitNoteItem.MRP          = item.MRP;
                    DebitNoteItem.ItemTax      = item.ItemTax;
                    DebitNoteItem.Amount       = Convert.ToDouble(frmcol[amount]);
                    DebitNoteItem.Status       = "Active";
                    DebitNoteItem.ModifiedOn   = DateTime.Now;
                    _DebitNoteItemService.Create(DebitNoteItem);

                    string code = Session["LOGINSHOPGODOWNCODE"].ToString();
                    if (item.ItemType == "Inventory")
                    {
                        if (code.Contains("SH"))
                        {
                            var shopdetails = _ShopStockService.GetDetailsByItemCodeAndShopCode(item.ItemCode, code);
                            shopdetails.Quantity = shopdetails.Quantity - item.Quantity;
                            _ShopStockService.Update(shopdetails);

                            var stockitemdetails = _StockItemDistributionService.GetDetailsByItemCodeAndShopCode(item.ItemCode, code);
                            stockitemdetails.ItemQuantity = stockitemdetails.ItemQuantity - item.Quantity;
                            _StockItemDistributionService.Update(stockitemdetails);
                        }
                        else
                        {
                            var godowndetails = _GodownStockService.GetDetailsByItemCodeAndGodownCode(item.ItemCode, code);
                            godowndetails.Quantity = godowndetails.Quantity - item.Quantity;
                            _GodownStockService.Update(godowndetails);

                            var stockitemdetails = _StockItemDistributionService.GetDetailsByItemCodeAndGodownCode(item.ItemCode, code);
                            stockitemdetails.ItemQuantity = stockitemdetails.ItemQuantity - item.Quantity;
                            _StockItemDistributionService.Update(stockitemdetails);
                        }

                        var entrystockitems = _EntryStockItemService.getDetailsByItemCode(item.ItemCode);
                        if (entrystockitems != null)
                        {
                            entrystockitems.TotalQuantity = entrystockitems.TotalQuantity - item.Quantity;
                            _EntryStockItemService.Update(entrystockitems);
                        }
                        else
                        {
                            var openingstockitems = _OpeningStockService.GetDetailsByItemCode(item.ItemCode);
                            openingstockitems.TotalQuantity = openingstockitems.TotalQuantity - item.Quantity;
                            _OpeningStockService.UpdateStock(openingstockitems);
                        }
                    }
                }
                else
                {
                    item.PurchaseReturnNo = PurchaseReturnCode;
                    item.Quantity         = 0;
                    _PurchaseReturnItemService.Create(item);
                }
                count++;
            }
            var data = _InwardFromSupplierService.GetInwardByInwardNo(model.PurchaseReturnDetails.InwardNo);

            data.PurchaseReturn = "Yes";
            if (data.PurchaseReturnNo == null)
            {
                data.PurchaseReturnNo = PurchaseReturnCode;
            }
            else
            {
                data.PurchaseReturnNo = data.PurchaseReturnNo + "," + PurchaseReturnCode;
            }
            _InwardFromSupplierService.UpdateInward(data);

            //Store total tax and total amount of tax of PO
            int itemtaxcount = Convert.ToInt32(frmcol["ReturnItemTaxCount"]);

            model.PurchaseInventoryTaxDetails = new PurchaseInventoryTax();
            for (int i = 1; i <= itemtaxcount; i++)
            {
                string taxnumber   = "ReturnItemTaxNumber" + i;
                string taxamount   = "ReturnAddedTaxAmounthdn" + i;
                string amountontax = "ReturnAddedAmounthdn" + i;
                if (Convert.ToDouble(frmcol[taxamount]) != 0)
                {
                    model.PurchaseInventoryTaxDetails.Code      = PurchaseReturnCode;
                    model.PurchaseInventoryTaxDetails.Amount    = frmcol[amountontax];
                    model.PurchaseInventoryTaxDetails.Tax       = frmcol[taxnumber];
                    model.PurchaseInventoryTaxDetails.TaxAmount = frmcol[taxamount];
                    _PurchaseInventoryTaxService.Create(model.PurchaseInventoryTaxDetails);
                }
            }

            var    details = _PurchaseReturnService.GetPurchaseByReturnNo(PurchaseReturnCode);
            string PRId    = Encode(details.Id.ToString());

            return(RedirectToAction("PurchaseReturnDetails/" + PRId));
        }