public void TempSave(IList saveStockViewList)
 {
     foreach (DepartmentStockView view in saveStockViewList)
     {
         foreach (DepartmentStock stock in view.DepartmentStocks)
         {
             DepartmentStockTemp temp = new DepartmentStockTempMapper().Convert(stock);
             ObjectCriteria crit = new ObjectCriteria();
             crit.AddEqCriteria("TempSave", 1);
             crit.AddEqCriteria("Fixed", 0);
             crit.AddEqCriteria("DelFlg", 0);
             crit.AddEqCriteria("DepartmentStockTempPK.DepartmentId",temp.DepartmentStockTempPK.DepartmentId);
             crit.AddEqCriteria("DepartmentStockTempPK.ProductId", temp.DepartmentStockTempPK.ProductId);
             IList list =DepartmentStockTempDAO.FindAll(crit);
             if(list == null || list.Count == 0)
             {
                 temp.TempSave = 1;
                 DepartmentStockTempDAO.Add(temp);
             }
             else
             {
                 DepartmentStockTemp tempSave = (DepartmentStockTemp) list[0];
                 tempSave.Quantity = temp.Quantity;
                 tempSave.GoodQuantity = temp.GoodQuantity;
                 tempSave.ErrorQuantity = temp.ErrorQuantity;
                 tempSave.LostQuantity = temp.LostQuantity;
                 tempSave.UnconfirmQuantity = temp.UnconfirmQuantity;
                 tempSave.DamageQuantity = temp.DamageQuantity;
                 tempSave.TempSave = 1;
                 DepartmentStockTempDAO.Update(tempSave);
             }
         }
     }
 }
        void departmentStockCheckingView_SaveInventoryCheckingEvent(object sender, AppFrame.Presenter.GoodsIO.DepartmentGoodsIO.DepartmentStockCheckingEventArgs e)
        {
            foreach (DepartmentStockView stockView in e.SaveStockViewList)
            {
                long checkedGoodQty = stockView.GoodQuantity;
                long checkedErrorQty = stockView.ErrorQuantity;
                long checkedLostQty = stockView.LostQuantity;
                long checkedDamageQty = stockView.DamageQuantity;
                long checkedUnconfirmQty = stockView.UnconfirmQuantity;
                long goodQuantity, errorQuantity, lostQuantity, damageQuantity, unconfirmQuantity;
                GetCheckingQuantities(stockView.DepartmentStocks, out goodQuantity, out errorQuantity, out lostQuantity, out damageQuantity, out unconfirmQuantity);
                bool NeedFixing = false;
                if (checkedGoodQty != goodQuantity
                       || checkedErrorQty != errorQuantity
                       || checkedLostQty != lostQuantity
                       || checkedDamageQty != damageQuantity
                       || checkedUnconfirmQty != unconfirmQuantity)
                {
                    NeedFixing = true;
                }

                // if after checking quantity is equal with checked values
                if(stockView.Quantity ==
                    (stockView.GoodQuantity+stockView.ErrorQuantity+
                     stockView.DamageQuantity+stockView.LostQuantity+stockView.UnconfirmQuantity))
                {

                    foreach (DepartmentStock stock in stockView.DepartmentStocks)
                    {
                        if(NeedFixing)
                        {
                            stock.GoodQuantity = stock.Quantity;
                            AutoFixing(stock, ref checkedErrorQty, ref checkedDamageQty, ref checkedLostQty, ref checkedUnconfirmQty);
                        }
                        stock.UpdateDate = DateTime.Now;
                        stock.UpdateId = ClientInfo.getInstance().LoggedUser.Name;
                        DepartmentStockLogic.Update(stock);
                    }

                }
                else // in case quantity does not equal checked values.
                {
                    // we do auto fixing

                    IList departmentStocks = stockView.DepartmentStocks;
                    SortListByQuantity(departmentStocks);
                    for( int i =0;i < departmentStocks.Count;i++)
                    {
                        DepartmentStock stock = (DepartmentStock) departmentStocks[i];
                        // if not last item
                        if (i < departmentStocks.Count - 1)
                        {
                            if (checkedGoodQty >= stock.Quantity)
                            {
                                stock.GoodQuantity = stock.Quantity;
                                checkedGoodQty -= stock.Quantity;
                            }
                            else
                            {
                                stock.GoodQuantity = checkedGoodQty;
                                checkedGoodQty = 0;
                            }
                        }
                        else
                        {
                            stock.GoodQuantity = checkedGoodQty;
                            checkedGoodQty = 0;
                        }
                    }
                    // do auto fixing here
                    for( int i =departmentStocks.Count -1;i >= 0;i--)
                    {
                        DepartmentStock stock = (DepartmentStock)departmentStocks[i];
                        if(NeedFixing)
                        {
                            // if not last item
                            if( i > 0)
                            {
                                // fixing
                                AutoFixing(stock, ref checkedErrorQty, ref checkedDamageQty, ref checkedLostQty, ref checkedUnconfirmQty);
                            }
                            else // last fixing
                            {
                                // don't need to fix, just map the remain quantities to stock
                                stock.ErrorQuantity = checkedErrorQty;
                                stock.DamageQuantity = checkedDamageQty;
                                stock.LostQuantity = checkedLostQty;
                                stock.UnconfirmQuantity = checkedUnconfirmQty;
                            }
                        }
                        DepartmentStockTempMapper mapper = new DepartmentStockTempMapper();
                        DepartmentStockTempLogic.Add(mapper.Convert(stock));
                    }
                }
            }
        }