/// 
///INTERFACE CLASS FOR TABLE t_wmsStock
///By wm with codesmith. 
///on 05/14/2017
/// 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using DeiNiu.Utils;
namespace DeiNiu.wms.Data.Model
{
    [Serializable]
    public class WmsStock : WmsStock_base
    {
        public WmsStock()
        {
        }
        public WmsStock(int id): base(id)
        {
        }
         public WmsStock(DataRow dr): base(dr)
        {
          
        }
         public WmsStock(string goodsId, string batch, string locationId) 
         {
             cmdParameters[0] = goodsId;
             cmdParameters[1] = batch;
             cmdParameters[2] = locationId;
             this._goodsId = goodsId;
             this._batch = batch;
             this._locationId = locationId;
             getModel(100);
         }
         public WmsStock( string locationId)
         {
             cmdParameters[0] = locationId;
             getModel(110);
         }
         protected override void getImp()
         {
             model_imp = new WmsStock_Imp();
         }
       
        //begin cust db operation, query, excute sql etc.
        public DataSet queryByGoodsId(string goodsId,string batch)
        {
            cmdParameters[0] = goodsId;
            cmdParameters[1] = batch;
            return  CustQuery(200);
        }
        /// 
        /// 根据商品编号和货位容量类别查询
        /// 
        /// 
        /// 
        public DataSet queryByGoodsIdVolType(string goodsId, string batch, enumWhLocVol locVolType, enumWhType whType)
        {
            cmdParameters[0] = goodsId;
            cmdParameters[1] = (int)locVolType;
            cmdParameters[2] = batch;
            cmdParameters[3] = (int)whType;
            return CustQuery(500);
        }
        public DataSet QueryByName(string namelike,enumWhType whType)
        {
            cmdParameters[0] = namelike;
            cmdParameters[1] = (int)whType;
           
            return CustQuery(300);
        }
        public DataTable getStockRecord(string orderNo)
        {
            cmdParameters[0] = orderNo;
            return CustQuery(400).Tables[0];
        }
        private Wmslocation _location;
        public Wmslocation location
        {
            get {
                if (_location == null || _location.locationId != _locationId)
                {
                    _location = new Wmslocation(locationId);
                }
                return _location;
            
            }
             
        }
        /// 
        /// // 更新库存出库信息,库存扣完,则删除记录
        /// 
        /// 
        public int updateCountOut()
        {
            if ( countIn <= 0 &&  count -  countOut <= 0 &&  countOuting <= 0)
            {
               
                LogHelper.debug(typeof(WmsStock),
                    string.Format("{0} 库存扣完删除库存记录,countIn: {1} ,count: {2},countOut: {3} ,countIn: {4}",
                    goodsId,  countIn,  count, countOut, countIn)
                    );
                return Delete(); // 库存扣完,删除记录
            }
            else
            {
                return base.Update();
            }
        }
        /// 
        /// get location data by locid
        /// for wince
        /// 
        /// 
        /// 
        public DataTable getStockLocation(string locId)
        {
            cmdParameters[0] = locId;
            return CustQuery(600).Tables[0];
        }
        
        public DataSet queryByGoodsBarcode(string barcode)
        {
            cmdParameters[0] = barcode;           
            return CustQuery(605);
        }
        /// 
        /// get locations by goodsid
        /// for wince with ch title
        /// 
        /// 
        /// 
        public DataTable getGoodsStockLocations(string barcode)
        {
            cmdParameters[0] = barcode;
            return CustQuery(610).Tables[0];
        }
        /// 
        /// 根据商品比较wms和erp库存
        /// 
        /// 
        /// 
        public DataTable getStockLocationCompareErp(string goodsId,string barcode)
        {
            cmdParameters[0] = goodsId;
            cmdParameters[1] = barcode;
            return CustQuery(700).Tables[0];
        }
        /// 
        /// 已下架商品待上架商品列表
        /// 
        /// 
        /// 
        public DataTable getLocationDownList4Up(int operId)
        {
            cmdParameters[0] = operId;
            return CustQuery(800).Tables[0];
        }
        public DataTable getGoodsERPStoreByBarcode(string barcode)
        {
            cmdParameters[0] = barcode;
            return CustQuery(900).Tables[0];
        }
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public int maintainIssue(string goodsId, string batch ,enumStockLocationState state, int operId)
        {
            cmdParameters[0] = goodsId;
            cmdParameters[1] = batch;
            cmdParameters[2] = (int)state;  
            cmdParameters[3] = operId;
          return  CustOper(1000) ;
        }
        public void recordMaintain(string locId, int operId)
        {
            cmdParameters[0] = locId;
            cmdParameters[1] = operId;        
            CustOper(1100);
        }
        /// 
        /// 比较wms erp库存
        /// 
        /// 
        /// 
        /// 
        /// 
        public DataSet getStockDiff(string querystr, int rownumStart, int rownumEnd)
        {             
            if (rownumEnd > rownumStart && rownumStart > 0)
            {
                this.rownumStart = rownumStart;
               this.rownumEnd = rownumEnd;
            }
            //  DataSet ds = string.IsNullOrEmpty(querystr) ? _obj.Query() : _obj.Query(querystr);
       
            if (string.IsNullOrEmpty(querystr))
            {
                cmdParameters[0] = querystr;
                return CustQuery(199) ;
            }
             
            cmdParameters[0] = getCondition(querystr); 
            return CustQuery(199) ;
           
        }
      
        public DataTable getWmsStockDetails(string goodsId, string batch,string extrQuery)
        {
            cmdParameters[0] = goodsId;
            cmdParameters[1] = batch;
            cmdParameters[2] = getCondition(extrQuery); 
            return CustQuery(1200).Tables[0];
        }
         
        public DataTable getFreeStockLocations(string goodsId, int count)
        {
            cmdParameters[0] = goodsId;
            cmdParameters[1] = count;
         
            return CustQuery(1300).Tables[0];
        }
         
        /// 
        /// 库存汇总 
        /// sum by goodsId, batch
        /// 
        /// 
        /// 
        public DataSet QuerySum(string querystr, int rownumStart, int rownumEnd)
        { 
            cmdParameters[0] = getCondition(querystr, rownumStart, rownumEnd); 
            return CustQuery(101) ;
        }
        /// 
        /// 库存汇总 
        /// sum by goodsId 
        /// 
        /// 
        /// 
        public DataSet QuerySumNoBatch(string querystr, int rownumStart, int rownumEnd)
        {
            cmdParameters[0] = getCondition(querystr, rownumStart, rownumEnd);
            return CustQuery(98);
        }
        /// 
        /// 零库查询,补货参考
        /// 
        /// 
        /// 
        public DataSet QueryBulkRep(string querystr, int rownumStart, int rownumEnd)
        {
            cmdParameters[0] = getCondition(querystr, rownumStart, rownumEnd); 
            return CustQuery(102);
        }
      /// 
      /// 查询库存变动记录
      /// 
      /// 
      /// 
      /// 
      /// 
        public DataSet queryStockRecords(string querystr, int rownumStart, int rownumEnd)
        {
            cmdParameters[0] = getCondition(querystr, rownumStart, rownumEnd);
            return CustQuery(1400);
        }
    }
}