private void dgInventory_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            UpperComponentWHInventoryViewModel upperComponentWHInventoryView = (UpperComponentWHInventoryViewModel)dgInventory.CurrentItem;

            if (upperComponentWHInventoryView != null)
            {
                List <String> productNoList                  = upperComponentWHInventoryView.ProductNoList;
                List <Int32>  upperComponentIDList           = upperComponentMaterialList.Where(o => productNoList.Contains(o.ProductNo)).Select(o => o.UpperComponentID).Distinct().ToList();
                UpperComponentWHInventoryDetailWindow window = new UpperComponentWHInventoryDetailWindow(
                    productNoList,
                    orderList.Where(o => productNoList.Contains(o.ProductNo)).ToList(),
                    upperComponentMaterialList.Where(o => productNoList.Contains(o.ProductNo)).ToList(),
                    //outsoleReleaseMaterialList.Where(o => productNoList.Contains(o.ProductNo)).ToList(),
                    upperComponentList.Where(o => upperComponentIDList.Contains(o.UpperComponentID) == true).ToList()
                    );
                window.Title = String.Format("{0} for {1}", window.Title, upperComponentWHInventoryView.OutsoleCode);
                window.Show();
            }
        }
        private void bwLoadData_DoWork(object sender, DoWorkEventArgs e)
        {
            upperComponentList         = UpperComponentController.Select();
            upperComponentMaterialList = UpperComponentMaterialController.Select();

            // lay ra nhung order da co uppercomponentrawmaterial
            orderList = OrdersController.SelectByUpperComponentRawMaterial();

            var           upperComponentInventoryViewList = new List <UpperComponentWHInventoryViewModel>();
            List <String> outsoleCodeList = orderList.Select(o => o.OutsoleCode).Distinct().ToList();

            foreach (string outsoleCode in outsoleCodeList)
            {
                List <String> productNoList = orderList.Where(o => o.OutsoleCode == outsoleCode).Select(o => o.ProductNo).Distinct().ToList();
                List <UpperComponentMaterialModel> upperComponentMaterialList_D1 = upperComponentMaterialList.Where(o => productNoList.Contains(o.ProductNo)).ToList();
                List <Int32> upperComponentIDList = upperComponentMaterialList_D1.Select(o => o.UpperComponentID).Distinct().ToList();
                List <Int32> qtyTotalList         = new List <Int32>();

                foreach (var upperComponentID in upperComponentIDList)
                {
                    List <UpperComponentMaterialModel> upperComponentMaterialList_D2 = upperComponentMaterialList_D1.Where(w => w.UpperComponentID == upperComponentID).ToList();
                    int qtyTotal = 0;
                    foreach (var productNo in productNoList)
                    {
                        List <UpperComponentMaterialModel> upperComponentMaterialList_D3 = upperComponentMaterialList_D2.Where(w => w.ProductNo == productNo).ToList();
                        List <String> sizeNoList = upperComponentMaterialList.Where(o => o.ProductNo == productNo).Select(o => o.SizeNo).Distinct().ToList();
                        foreach (var sizeNo in sizeNoList)
                        {
                            int qty = upperComponentMaterialList_D3.Where(w => w.SizeNo == sizeNo).Sum(s => s.Quantity - s.QuantityReject);
                            if (qty < 0)
                            {
                                qty = 0;
                            }
                            qtyTotal += qty;
                        }
                    }
                    qtyTotalList.Add(qtyTotal);
                }

                int qtyMatchTotal = 0;
                foreach (var productNo in productNoList)
                {
                    List <UpperComponentMaterialModel> upperComponentMaterialList_D2 = upperComponentMaterialList_D1.Where(w => w.ProductNo == productNo).ToList();
                    List <String> sizeNoList = upperComponentMaterialList.Where(o => o.ProductNo == productNo).Select(o => o.SizeNo).Distinct().ToList();
                    foreach (string sizeNo in sizeNoList)
                    {
                        int qtyMatch = upperComponentMaterialList_D2.Where(w => w.SizeNo == sizeNo).Select(s => s.Quantity - s.QuantityReject).Min();
                        if (qtyMatch < 0)
                        {
                            qtyMatch = 0;
                        }
                        qtyMatchTotal += qtyMatch;
                    }
                }
                UpperComponentWHInventoryViewModel upperComponentWHInventoryView = new UpperComponentWHInventoryViewModel()
                {
                    OutsoleCode          = outsoleCode,
                    ProductNoList        = productNoList,
                    UpperComponentIDList = upperComponentIDList,
                    Quantity             = qtyTotalList.Max(),
                    Matching             = qtyMatchTotal,
                };
                if (upperComponentWHInventoryView.Quantity != 0)
                {
                    upperComponentWHInventoryViewList.Add(upperComponentWHInventoryView);
                }
            }
            e.Result = upperComponentWHInventoryViewList;
        }