public SaleDispatchLineViewModel GetSaleDispatchLineForEdit(int id)
 {
     return((from p in db.SaleDispatchLine
             join t2 in db.PackingLine on p.PackingLineId equals t2.PackingLineId into table2
             from Pl in table2.DefaultIfEmpty()
             join t3 in db.ViewSaleOrderBalance on Pl.SaleOrderLineId equals t3.SaleOrderLineId into table3
             from tab3 in table3.DefaultIfEmpty()
             join Si in db.Stock on p.StockInId equals Si.StockId into StockInTable
             from StockInTab in StockInTable.DefaultIfEmpty()
             join Sih in db.StockHeader on StockInTab.StockHeaderId equals Sih.StockHeaderId into StockHeaderTable
             from StockHeaderTab in StockHeaderTable.DefaultIfEmpty()
             where p.SaleDispatchLineId == id
             select new SaleDispatchLineViewModel
     {
         ProductUidId = Pl.ProductUidId,
         ProductUidName = Pl.ProductUid.ProductUidName,
         ProductCode = Pl.Product.ProductCode,
         ProductId = Pl.ProductId,
         ProductName = Pl.Product.ProductName,
         SaleOrderHeaderDocNo = Pl.SaleOrderLine.SaleOrderHeader.DocNo,
         LossQty = Pl.LossQty,
         FreeQty = Pl.FreeQty,
         PassQty = Pl.PassQty,
         Qty = Pl.Qty,
         BalanceQty = (tab3 == null ? (decimal)Pl.PassQty : tab3.BalanceQty + (decimal)Pl.PassQty),
         BaleNo = Pl.BaleNo,
         UnitId = Pl.Product.UnitId,
         UnitName = Pl.Product.Unit.UnitName,
         DealUnitId = Pl.DealUnitId,
         DealUnitName = Pl.DealUnit.UnitName,
         DealQty = Pl.DealQty,
         Remark = Pl.Remark,
         Specification = Pl.Specification,
         Dimension1Id = Pl.Dimension1Id,
         Dimension2Id = Pl.Dimension2Id,
         LotNo = Pl.LotNo,
         GodownId = p.GodownId,
         UnitConversionMultiplier = Pl.UnitConversionMultiplier,
         SaleDispatchHeaderId = p.SaleDispatchHeaderId,
         SaleDispatchLineId = p.SaleDispatchLineId,
         PackingLineId = Pl.PackingLineId,
         SaleOrderLineId = Pl.SaleOrderLineId,
         Weight = Pl.NetWeight,
         StockInId = p.StockInId,
         StockInNo = StockHeaderTab.DocNo
     }
             ).FirstOrDefault());
 }
        public void DeleteStockProcessForDocHeader(int DocHeaderId, int DocTypeId, int SiteId, int DivisionId)
        {
            IEnumerable <StockProcess> StockProcessList = (from L in _StockProcessRepository.Instance
                                                           join H in _unitOfWork.Repository <StockHeader>().Instance on L.StockHeaderId equals H.StockHeaderId into StockHeaderTable
                                                           from StockHeaderTab in StockHeaderTable.DefaultIfEmpty()
                                                           where StockHeaderTab.DocHeaderId == DocHeaderId && StockHeaderTab.DocTypeId == DocTypeId && StockHeaderTab.SiteId == SiteId && StockHeaderTab.DivisionId == DivisionId
                                                           select L).ToList();

            if (StockProcessList != null && StockProcessList.Count() > 0)
            {
                int i = 0;
                foreach (StockProcess item in StockProcessList)
                {
                    try
                    {
                        StockProcessBalance StockProcessbalance = (from L in _unitOfWork.Repository <StockProcessBalance>().Instance
                                                                   where L.ProductId == item.ProductId && L.Dimension1Id == item.Dimension1Id && L.Dimension2Id == item.Dimension2Id && L.ProcessId == item.ProcessId &&
                                                                   L.LotNo == item.LotNo && L.GodownId == item.GodownId && L.CostCenterId == item.CostCenterId
                                                                   select L).FirstOrDefault();

                        if (StockProcessbalance != null)
                        {
                            StockProcessbalance.Qty = StockProcessbalance.Qty - item.Qty_Rec;
                            StockProcessbalance.Qty = StockProcessbalance.Qty + item.Qty_Iss;

                            if (StockProcessbalance.Qty == 0)
                            {
                                item.ObjectState = Model.ObjectState.Deleted;
                                _unitOfWork.Repository <StockProcessBalance>().Delete(StockProcessbalance);
                            }
                            else
                            {
                                i = i + 1;
                                StockProcessbalance.ObjectState = Model.ObjectState.Modified;
                                _unitOfWork.Repository <StockProcessBalance>().Add(StockProcessbalance);
                            }
                        }

                        Delete(item);
                    }
                    catch (Exception e)
                    {
                        string str = e.Message;
                    }
                }
                _stockHeaderService.Delete(StockProcessList.FirstOrDefault().StockHeaderId);
            }
        }
        public IEnumerable <SaleDispatchLineViewModel> GetSaleDispatchLineListForIndex(int SaleDispatchHeaderId)
        {
            IEnumerable <SaleDispatchLineViewModel> SaleDispatchLineViewModel = (from l in db.SaleDispatchLine
                                                                                 join Pl in db.PackingLine on l.PackingLineId equals Pl.PackingLineId into PackingLineTable
                                                                                 from PackingLineTab in PackingLineTable.DefaultIfEmpty()
                                                                                 join t in db.Product on PackingLineTab.ProductId equals t.ProductId into table
                                                                                 from tab in table.DefaultIfEmpty()
                                                                                 join t1 in db.SaleOrderLine on PackingLineTab.SaleOrderLineId equals t1.SaleOrderLineId into table1
                                                                                 from tab1 in table1.DefaultIfEmpty()
                                                                                 join t2 in db.SaleOrderHeader on tab1.SaleOrderHeaderId equals t2.SaleOrderHeaderId into table2
                                                                                 from tab2 in table2.DefaultIfEmpty()
                                                                                 join t3 in db.ProductUid on PackingLineTab.ProductUidId equals t3.ProductUIDId into table3
                                                                                 from tab3 in table3.DefaultIfEmpty()
                                                                                 join u in db.Units on PackingLineTab.DealUnitId equals u.UnitId into DealUnitTable
                                                                                 from DealUnitTab in DealUnitTable.DefaultIfEmpty()
                                                                                 join Si in db.Stock on l.StockId equals Si.StockId into StockInTable
                                                                                 from StockInTab in StockInTable.DefaultIfEmpty()
                                                                                 join Sih in db.StockHeader on StockInTab.StockHeaderId equals Sih.StockHeaderId into StockHeaderTable
                                                                                 from StockHeaderTab in StockHeaderTable.DefaultIfEmpty()
                                                                                 where l.SaleDispatchHeaderId == SaleDispatchHeaderId
                                                                                 orderby l.SaleDispatchLineId
                                                                                 select new SaleDispatchLineViewModel
            {
                SaleDispatchLineId = l.SaleDispatchLineId,
                ProductName = tab.ProductName,
                Dimension1Name = PackingLineTab.Dimension1.Dimension1Name,
                Dimension2Name = PackingLineTab.Dimension2.Dimension2Name,
                Specification = PackingLineTab.Specification,
                SaleOrderHeaderDocNo = tab2.DocNo,
                ProductUidName = tab3.ProductUidName,
                BaleNo = PackingLineTab.BaleNo,
                Qty = PackingLineTab.Qty,
                UnitId = tab.UnitId,
                DealQty = PackingLineTab.DealQty,
                DealUnitId = DealUnitTab.UnitName,
                DealUnitDecimalPlaces = DealUnitTab.DecimalPlaces,
                unitDecimalPlaces = PackingLineTab.Product.Unit.DecimalPlaces,
                StockInId = StockInTab.StockId,
                StockInNo = StockHeaderTab.DocNo,
                Remark = l.Remark,
                LossQty = PackingLineTab.LossQty,
                SaleDispatchHeaderId = l.SaleDispatchHeaderId
            }).Take(2000).ToList();

            return(SaleDispatchLineViewModel);
        }