public List <DataHeaderPlanning> GetDataHeaderPlanningBMH(string dept, DateTime from, DateTime to, out Dictionary <string, List <dataContent> > ListPlanShipments)
        {
            List <DataHeaderPlanning> headerPlanningA01s = new List <DataHeaderPlanning>();

            try
            {
                LoadDataPlanning loadData = new LoadDataPlanning();
                var orderVariables        = loadData.LoadOrderInformationbyDatebyDept(from, to, dept);
                var ListPlanning          = loadData.GetPlanningReportbyDept(dept, orderVariables);
                var listplanShipment      = new Dictionary <string, List <dataContent> >();

                foreach (var item in ListPlanning)
                {
                    var datacontents        = new List <dataContent>();
                    DataHeaderPlanning data = new DataHeaderPlanning();
                    data.product         = item.Value.KeyProduct;
                    data.Unit            = item.Value.Unit;
                    data.Amount_Of_Order = item.Value.shipmentPlans.Count();
                    data.Total_Order_Qty = item.Value.TotalQty;
                    data.client          = item.Value.Client;
                    GetStockinINVMC getStockFinishedGoods = new GetStockinINVMC();
                    var             ListFinishedGoodsWH   = getStockFinishedGoods.GetItemsInINVMCs(dept, data.product);
                    data.StockInWarehouse = ListFinishedGoodsWH.Select(d => d.Quantity).Sum().ToString("N0");
                    for (int i = 0; i < item.Value.SemiFinishedGoods.Count; i++)
                    {
                        // data.SemiFinishedGoods += item.Value.SemiFinishedGoods[i].Item + Environment.NewLine;
                        // data.StockSemiFinished += item.Value.SemiFinishedGoods[i].QtyWarehouse.ToString("N0") + Environment.NewLine;
                        data.MQCStock         += item.Value.SemiFinishedGoods[i].QTyAtMQC.ToString("N0") + Environment.NewLine;
                        data.PQCStock         += item.Value.SemiFinishedGoods[i].QTyAtPQC.ToString("N0") + Environment.NewLine;
                        data.PendingWarehouse += item.Value.SemiFinishedGoods[i].QtyPendingWarehouse.ToString("N0") + Environment.NewLine;
                        if (item.Value.SemiFinishedGoods[i].accessories != null)
                        {
                            //  var ItemGroup = item.Value.SemiFinishedGoods[i].accessories.GroupBy(d => d.Item).ToList();
                            var ItemGroupItem = item.Value.SemiFinishedGoods[i].accessories.GroupBy(u => u.Item)
                                                .Select(grp => grp.ToList())
                                                .ToList();
                            for (int j = 0; j < ItemGroupItem.Count; j++)
                            {
                                data.Accessories += ItemGroupItem[j][0].Item + Environment.NewLine;

                                data.StockAccessory += ItemGroupItem[j].Sum(d => d.QtyInWarehouse).ToString("N0") + Environment.NewLine;
                            }
                        }
                    }
                    double ShipmentQtySum = 0;
                    foreach (var shipment in item.Value.shipmentPlans)
                    {
                        var dataContent        = new dataContent();
                        DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo;
                        Calendar           cal = dfi.Calendar;
                        int WeekNo             = cal.GetWeekOfYear(shipment.ClientRequestDate, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
                        dataContent.WeekRequestDate = "Week: " + WeekNo.ToString();
                        dataContent.MonthRequest    = shipment.ClientRequestDate.ToString("MMM");
                        dataContent.ClientOrderDate = shipment.ClientRequestDate;

                        dataContent.OrderQty    = shipment.DeliveryPlanQty;
                        ShipmentQtySum         += dataContent.OrderQty;
                        dataContent.ShortageQty = ShipmentQtySum;
                        dataContent.RemainDay   = shipment.RemainDay;
                        if (dataContent.RemainDay == 0)
                        {
                            dataContent.TargetQtyDay = (dataContent.ShortageQty < 0) ? 0 : (dataContent.OrderQty);
                        }
                        else
                        {
                            dataContent.TargetQtyDay = (dataContent.ShortageQty < 0) ? 0 : Math.Ceiling((dataContent.OrderQty / dataContent.RemainDay));
                        }

                        dataContent.OrderCode   = shipment.OrderCode;
                        dataContent.ClientOrder = shipment.ClientCode;
                        datacontents.Add(dataContent);
                    }
                    for (int k = 0; k < datacontents.Count; k++)
                    {
                        for (int l = k + 1; l < datacontents.Count; l++)
                        {
                            datacontents[k].TargetQtyDay += datacontents[l].TargetQtyDay;
                        }
                    }
                    if (listplanShipment.ContainsKey(data.product) == false)
                    {
                        listplanShipment.Add(data.product, datacontents);
                    }

                    headerPlanningA01s.Add(data);
                }
                ListPlanShipments = listplanShipment;
            }
            catch (Exception ex)
            {
                ListPlanShipments = null;
                SystemLog.Output(SystemLog.MSG_TYPE.Err, "GetDataHeaderPlanningA01", ex.Message);
            }
            return(headerPlanningA01s);
        }
        public SemiFinishedGoods GetStockGoodsONSFT(string dept, string product)
        {
            SemiFinishedGoods semiFinished = new SemiFinishedGoods();

            try
            {
                GetStockinINVMC getStockinINVMC  = new GetStockinINVMC();
                var             StockInWarehouse = getStockinINVMC.GetItemsInINVMCs(dept, product);
                if (StockInWarehouse != null)
                {
                    semiFinished.QtyInWarehouse = StockInWarehouse.Select(d => d.Quantity).Sum();
                    semiFinished.QtyWarehouse   = StockInWarehouse.Select(d => d.Quantity).Sum();
                }
                semiFinished.Item = product;
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.Append(@"select  isnull(sum(LOTSIZE),'0')  from LOT a 
left join MODETAIL b on CMOID = ID
where  ERP_OPSEQ = '0010' and a.STATUS = '0' and b.STATUS !='99' and b.STATUS !='100' 
 ");
                stringBuilder.Append(" and a.ITEMID =  '" + product + "'");
                sqlSFT sqlERPCON = new sqlSFT();
                var    Temp      = sqlERPCON.sqlExecuteScalarString(stringBuilder.ToString());
                if (Temp != null && Temp != "")
                {
                    semiFinished.QtyInMQC = double.Parse(Temp);
                }
                stringBuilder = new StringBuilder();
                stringBuilder.Append(@"select  isnull(sum(LOTSIZE),'0')  from LOT a 
left join MODETAIL b on CMOID = ID
where  ERP_OPSEQ = '0010' and a.STATUS = '50' and b.STATUS !='99' and b.STATUS !='100' 
 ");
                stringBuilder.Append(" and a.ITEMID =  '" + product + "'");
                //  sqlERPCON sqlERPCON = new sqlERPCON();
                Temp = sqlERPCON.sqlExecuteScalarString(stringBuilder.ToString());
                if (Temp != null && Temp != "")
                {
                    semiFinished.QtyOutMQC = double.Parse(Temp.ToString());
                }

                stringBuilder = new StringBuilder();
                stringBuilder.Append(@"select  isnull(sum(LOTSIZE),'0')  from LOT a 
left join MODETAIL b on CMOID = ID
where  ERP_OPSEQ = '0020' and a.STATUS = '0' and b.STATUS !='99' and b.STATUS !='100' 
 ");
                stringBuilder.Append(" and a.ITEMID =  '" + product + "'");
                //  sqlERPCON sqlERPCON = new sqlERPCON();
                Temp = sqlERPCON.sqlExecuteScalarString(stringBuilder.ToString());
                if (Temp != null && Temp != "")
                {
                    semiFinished.QtyInPQC = double.Parse(Temp.ToString());
                }

                stringBuilder = new StringBuilder();
                stringBuilder.Append(@"select  isnull(sum(LOTSIZE),'0')  from LOT a 
left join MODETAIL b on CMOID = ID
where  ERP_OPSEQ = '0020' and a.STATUS = '50' and b.STATUS !='99' and b.STATUS !='100' 
 ");
                stringBuilder.Append(" and a.ITEMID =  '" + product + "'");
                //  sqlERPCON sqlERPCON = new sqlERPCON();
                Temp = sqlERPCON.sqlExecuteScalarString(stringBuilder.ToString());
                if (Temp != null && Temp != "")
                {
                    semiFinished.QtyOutPQC = double.Parse(Temp.ToString());
                }

                stringBuilder = new StringBuilder();
                stringBuilder.Append(@"select  isnull(sum(LOTSIZE),'0')  from LOT a 
left join MODETAIL b on CMOID = ID
where  ERP_OPSEQ = '0020' and a.STATUS = '130' and b.STATUS !='99' and b.STATUS !='100' 
 ");
                stringBuilder.Append(" and a.ITEMID =  '" + product + "'");
                //  sqlERPCON sqlERPCON = new sqlERPCON();
                Temp = sqlERPCON.sqlExecuteScalarString(stringBuilder.ToString());
                if (Temp != null && Temp != "")
                {
                    semiFinished.QtyPendingWarehouse = double.Parse(Temp.ToString());
                }
                semiFinished.QTyAtMQC = semiFinished.QtyOutMQC;
                semiFinished.QTyAtPQC = semiFinished.QtyInPQC + semiFinished.QtyOutPQC;
                semiFinished.QtyWip   = semiFinished.QTyAtMQC + semiFinished.QTyAtPQC + semiFinished.QtyPendingWarehouse;
                GetAccessory getAccessory = new GetAccessory();
                semiFinished.accessories = getAccessory.GetAccessories(dept, product);
            }
            catch (Exception ex)
            {
                SystemLog.Output(SystemLog.MSG_TYPE.Err, "GetStockGoodsONSFT(string product) : " + product, ex.Message);
            }
            return(semiFinished);
        }