/// 
///LOGIC CLASS FOR TABLE t_tmsStock
///By wm with codesmith. 
///on 07/27/2017
/// 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DeiNiu.wms.Data.Model;
using System.Data;
using System.Transactions;
namespace DeiNiu.wms.Logical
{
    [Serializable]
    public class lTmsStock   :lbase
    {
        TmsStock _obj;
        public lTmsStock()
        {
             initialize();
        }
 
        public  TmsStock getTmsStock
        {
            get
            {
                return _obj;
            }
        }
        
       public lTmsStock(int operId)
            : base(operId)
        {
            initialize();
        }
        
  
		/// 
		/// get all data
		/// 
        public DataSet getAllData()
        {
           return _obj.Query();
        }
        /// 
        /// get all data
        /// 
        public DataSet getAllActiveData()
        {
            return _obj.QueryActived();
        }
		/// 
		/// get a record by id
		/// 
        public void initialize(int id)
		{
            _obj = id != 0 ? new TmsStock(id) : new TmsStock();
		}
        /// 
		/// get a record by id 0
		/// 
        public void initialize()
        {
            initialize(0);
        }
         /// 
        /// get a record by id
        /// 
        public void initialize(DataRow dr)
        {
            _obj =   new TmsStock(dr);
        }
        
        protected override DeiNiu.Data.BaseObject.BaseModel getModel()
        {
            return _obj;
        }
 
        //begin cust db operation, query, excute sql etc.
        
     
        /// 
        /// update in a transaction scrop
        /// 
        public void update()
        {
            if (valid())
            {
                using (TransactionScope scope = new TransactionScope())
                {
                    //Node tmp = new Node();
                    //tmp.parentid = 1;
                    //tmp.name = "test trans" + DateTime.Now;
                    //tmp.description = "this is for transTest";
                    //tmp.Add();
                    _obj.Update();
                    scope.Complete();
                }
            }
        }
        
         private bool valid()
        {
            return true;
        }
        /// 
        /// 拼箱拼袋入待装车集货库
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
         public bool newBulkTransStore(string pickOrderNo, string custId,
             int boxCnt, int bagCnt)
         {
             TmsLineDetail tld = new TmsLineDetail().getLineDetailByCustId(custId);
             if (boxCnt + bagCnt == 0) //播种复核台前置打印,数量为一个包装
             {
                 bagCnt = 1;
             }
             using (TransactionScope scope = new TransactionScope())
             {
                 if (bagCnt > 0)
                 {
                     List locBags = _obj.getFreeLocation(tld.lineId, Utils.enumWhLocVol.散货拼袋, Utils.enumWhType.集货库, bagCnt);
                     if (locBags.Count == 0)
                     {
                         for (int i = 0; i < bagCnt; i++)
                         {
                             WmsLocation loc = new WmsLocation();
                             loc.locationId = "JL.BAG.0.1"+i;
                             locBags.Add(loc);
                         }
                     }
                     foreach (WmsLocation loc in locBags)
                     {
                         _obj.count = 1;
                         _obj.pickOrderNo = pickOrderNo;
                         _obj.locationId = loc.locationId;
                         _obj.operater = operId;
                         _obj.Add();
                     }
                 }
                
                 if (boxCnt > 0)
                 {
                     List locBoxs = _obj.getFreeLocation(tld.lineId, Utils.enumWhLocVol.散货拼箱, Utils.enumWhType.集货库, boxCnt);
                     if (locBoxs.Count == 0)
                     {
                         for (int i = 0; i < boxCnt; i++)
                         {
                             WmsLocation loc = new WmsLocation();
                             loc.locationId = "JL.BOX.0.1"+i;
                             locBoxs.Add(loc);
                         }
                         
                     }
                     
                     foreach (WmsLocation loc in locBoxs)
                     {
                         _obj.count = 1;
                         _obj.pickOrderNo = pickOrderNo;
                         _obj.locationId = loc.locationId;
                         _obj.operater = operId;
                         _obj.Add();
                     }
                 }
                  scope.Complete();
             }
              
             return true;
         }
        /// 
        /// get tms stock bulk detail
        /// 
        /// 
        /// 
         public DataTable getTmsStockBulkDetail(string pickOrderNo)
         { 
             return _obj.getTmsStockBulkDetail(pickOrderNo);
         }
         public int deleteRec(string pickOrderNo)
         {
             return _obj.deleteRec(pickOrderNo);
         }
    }
    
    
}