public PurchaseList AddItem(PurchaseList temppo, string a, int b)
        {
            AuthContext   db       = new AuthContext();
            List <TempPO> listtemp = new List <TempPO>();

            if (temppo != null)
            {
                var purId = 0;
                PurchaseOrderMaster pom = db.DPurchaseOrderMaster.Where(c => c.PurchaseOrderId == temppo.PurchaseOrderId).SingleOrDefault();
                if (pom == null)
                {
                    PurchaseOrderMaster pm = new PurchaseOrderMaster();
                    pm.SupplierId    = temppo.SupplierId.GetValueOrDefault();
                    pm.SupplierName  = temppo.Supplier;
                    pm.Warehouseid   = temppo.WareHouseId;
                    pm.WarehouseName = temppo.WareHouseName;
                    pm.Status        = "pending";
                    pm.Acitve        = true;
                    pm.CreationDate  = indianTime;
                    db.DPurchaseOrderMaster.Add(pm);
                    int id = db.SaveChanges();

                    purId = pm.PurchaseOrderId;
                }
                else
                {
                    purId = pom.PurchaseOrderId;
                }
                var item = db.itemMasters.Where(z => z.PurchaseSku == temppo.PurchaseSku).FirstOrDefault();
                PurchaseOrderDetail pd = new PurchaseOrderDetail();
                pd.PurchaseOrderId = purId;
                pd.ItemId          = item.ItemId;
                pd.ItemName        = item.itemname;
                pd.TotalQuantity   = int.Parse(temppo.qty.ToString());
                pd.CreationDate    = indianTime;
                pd.Status          = "ordered";
                pd.MOQ             = item.PurchaseMinOrderQty;
                pd.Price           = Convert.ToDouble(item.PurchasePrice);
                pd.Warehouseid     = temppo.WareHouseId;
                pd.WarehouseName   = temppo.WareHouseName;
                pd.SupplierId      = temppo.SupplierId.GetValueOrDefault();
                pd.SupplierName    = temppo.Supplier;
                //pd.TotalQuantity = Convert.ToInt16(temppo.qty);
                pd.PurchaseName     = temppo.name;
                pd.PurchaseSku      = temppo.PurchaseSku;
                pd.ConversionFactor = Convert.ToInt16(temppo.conversionfactor);
                pd.PurchaseQty      = temppo.finalqty;


                db.DPurchaseOrderDeatil.Add(pd);
                int idd = db.SaveChanges();
            }
            else
            {
                return(null);
            }
            return(temppo);
        }
        public IList <PurchaseList> Get(int wid)
        {
            try//|| a.Status == "Process"
            {
                var poList = (from a in db.DbOrderDetails
                              where (a.Status == "Pending" || a.Status == "Process") && a.Deleted == false
                              join i in db.itemMasters on a.ItemId equals i.ItemId
                              select new PurchaseOrderList
                {
                    OrderDetailsId = a.OrderDetailsId,
                    Warehouseid = a.Warehouseid,
                    WarehouseName = a.WarehouseName,
                    OrderDate = a.OrderDate,
                    SupplierId = i.SupplierId,
                    PurchaseSku = i.PurchaseSku,
                    SupplierName = i.SupplierName,
                    OrderId = a.OrderId,
                    ItemId = a.ItemId,
                    SKUCode = i.Number,
                    ItemName = i.itemname,
                    PurchaseUnitName = i.PurchaseUnitName,
                    Unit = i.SellingUnitName,
                    Conversionfactor = i.PurchaseMinOrderQty,
                    Discription = "",
                    qty = a.qty,
                    //CurrentInventory = c == null ? 0 : c.CurrentInventory,
                    StoringItemName = i.StoringItemName,
                    Price = i.PurchasePrice,
                    NetAmmount = a.NetAmmount,
                    TaxPercentage = a.TaxPercentage,
                    TaxAmount = a.TaxAmmount,
                    TotalAmountIncTax = a.TotalAmt,
                    PurchaseMinOrderQty = i.PurchaseMinOrderQty,
                    Status = a.Status,
                    CreationDate = a.CreatedDate,
                    Deleted = a.Deleted
                }).ToList();

                List <PurchaseList> uniquelist = new List <PurchaseList>();

                foreach (PurchaseOrderList item in poList)
                {
                    int          count = 0; //01AE101110
                    PurchaseList l     = uniquelist.Where(x => x.PurchaseSku == item.PurchaseSku).SingleOrDefault();
                    if (l == null)
                    {
                        count             += 1;
                        l                  = new PurchaseList();
                        l.name             = item.PurchaseUnitName;
                        l.conversionfactor = item.Conversionfactor;
                        l.Supplier         = item.SupplierName;
                        l.SupplierId       = item.SupplierId;
                        l.WareHouseId      = item.Warehouseid;
                        l.WareHouseName    = item.WarehouseName;
                        l.OrderDetailsId   = item.OrderDetailsId;
                        l.itemNumber       = item.SKUCode;
                        l.PurchaseSku      = item.PurchaseSku;
                        l.orderIDs         = item.OrderDetailsId + "," + l.orderIDs;
                        l.ItemId           = item.ItemId;
                        l.ItemName         = item.ItemName;
                        l.qty              = l.qty + item.qty;
                        l.currentinventory = item.CurrentInventory;
                        l.Price            = item.Price;
                        uniquelist.Add(l);
                    }
                    else
                    {
                        l.orderIDs = item.OrderDetailsId + "," + l.orderIDs;
                        l.qty      = l.qty + item.qty;
                        uniquelist.First(d => d.PurchaseSku == item.PurchaseSku).qty      = l.qty;
                        uniquelist.First(d => d.PurchaseSku == item.PurchaseSku).orderIDs = l.orderIDs;
                    }
                }
                List <PurchaseList> cc = new List <PurchaseList>();
                foreach (PurchaseList l in uniquelist)
                {
                    CurrentStock cs = db.DbCurrentStock.Where(k => k.ItemNumber == l.itemNumber && k.Deleted == false && k.Warehouseid == l.WareHouseId).SingleOrDefault();
                    if (cs != null)
                    {
                        l.currentinventory = cs.CurrentInventory;
                        if (l.qty > cs.CurrentInventory)
                        {
                            l.qty = l.qty - cs.CurrentInventory;
                            List <PurchaseOrderDetailRecived> po  = db.PurchaseOrderRecivedDetails.Where(x => x.ItemId == l.ItemId && x.Status != "Received").ToList();
                            List <PurchaseOrderDetail>        po1 = db.DPurchaseOrderDeatil.Where(x => x.ItemId == l.ItemId && x.Status == "ordered").ToList();
                            if (po.Count != 0 && po1.Count != 0)
                            {
                                foreach (var p in po)
                                {
                                    l.qty = l.qty - Convert.ToInt32((p.PurchaseQty - p.QtyRecived) * p.MOQ);
                                }
                                foreach (var p1 in po1)
                                {
                                    l.qty = l.qty - Convert.ToInt32(p1.PurchaseQty * p1.MOQ);
                                }
                                if (l.qty > 0)
                                {
                                    cc.Add(l);
                                }
                            }
                            else if (po.Count != 0 && po1.Count == 0)
                            {
                                foreach (var p in po)
                                {
                                    l.qty = l.qty - Convert.ToInt32((p.PurchaseQty - p.QtyRecived) * p.MOQ);
                                }
                                if (l.qty > 0)
                                {
                                    cc.Add(l);
                                }
                            }
                            else if (po.Count == 0 && po1.Count != 0)
                            {
                                foreach (var p in po1)
                                {
                                    l.qty = l.qty - Convert.ToInt32(p.PurchaseQty * p.MOQ);
                                }
                                if (l.qty > 0)
                                {
                                    cc.Add(l);
                                }
                            }
                            else
                            {
                                cc.Add(l);
                            }
                        }
                    }
                }
                return(cc);
            }
            catch (Exception ex)
            {
                logger.Error("Error in getting Company " + ex.Message);
                return(null);
            }
        }