/// 
///INTERFACE CLASS FOR TABLE t_wmsOutPickPort
///By wm  
///on 06/15/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 WmsOutPickPort : WmsOutPickPort_base
    {
        public WmsOutPickPort()
        {
        }
        public WmsOutPickPort(int id): base(id)
        {
        }
        public WmsOutPickPort(DataRow dr): base(dr)
        {
        }
        public new int Add()
        {
            base.Add();
            this.id128 = Util.getCode128(ID + "");
            Update();
            return ID;
        }
      protected override void getImp()
        {
            model_imp = new WmsOutPickPort_Imp();  
        }
        //begin cust db operation, query, excute sql etc.
        public DataSet QueryByName(string name)
        {
            cmdParameters[0] = name;
            return  CustQuery(100);
        }
        /// 
        /// get pick detail by pickorderNo
        /// 
        /// 
        /// 
        public DataTable getPickDetails(string pickOrderNo, int state = -1)
        {
            cmdParameters[0] = pickOrderNo;
            cmdParameters[1] = state;
            return CustQuery(200).Tables[0];
        }
        public int closePickPorts(string pickOrderNo)
        {
            cmdParameters[0] = pickOrderNo;
             
            return CustOper(201) ;
        }
        public List getObjs(DataTable dt)
        {
            List lst = new List();
            foreach(DataRow dr in dt.Rows)
            {
                lst.Add(new WmsOutPickPort(dr));
            }
            return lst;
        }
        /// 
        /// get pick detail by ID
        /// 
        /// 
        /// 
        public DataTable getPickDetail(int Id)
        {
            cmdParameters[0] = Id;
            return CustQuery(300).Tables[0];
        }
        /// 
        /// update pick status
        /// 
        /// 
        /// 
        public int updatePickState(int Id, Utils.enumPickState pickSate,int operId)
        {
            cmdParameters[0] = Id;
            cmdParameters[1] = (int)pickSate;
            cmdParameters[2] = operId;
            return CustOper(400) ;
        }
        public int getPickDetailsCnt(string pickOrderNo, enumPickState pickState,bool batch =true, string waveOrder =null)
        {
            cmdParameters[0] = pickOrderNo;
            cmdParameters[1] = (int)pickState;
            cmdParameters[2] = batch;
            cmdParameters[3] = waveOrder;
            //return CustQuery(500).Tables[0];
            DataTable dt = CustQuery(500).Tables[0];
            if (dt.Rows.Count > 0)
            {
                return Convert.ToInt32(dt.Rows[0][0].ToString());
            }
            return 0;
              
        }
        public int updatePickStateByOrderDetailId(int detailId, Utils.enumPickState pickSate, int operId,int checkedBy1)
        {
            cmdParameters[0] = detailId;
            cmdParameters[1] = (int)pickSate;
            cmdParameters[2] = operId;
            cmdParameters[3] = checkedBy1;
            return CustOper(401);
        }
        /// 
        /// 更新捡货状态 
        /// 电子标签拣选时更新PDA数据
        /// 
        /// 
        /// 
        /// 
        public bool updatePickDetailByStkrecId(int stkRecId,enumPickState pickState,int operId)
        {
             
            cmdParameters[0] = stkRecId;
            cmdParameters[1] = (int)pickState;
            cmdParameters[2] = operId;
            return CustOper(410) >0;
        }
        public bool isDoneByFlow(string flowNum)
        {
            cmdParameters[0] = flowNum;
            return queryCount(600) == 0;
        }
        public DataTable getNewPickTasks(WaveRule wr)
        {
            cmdParameters[0] = wr;
            if (wr.type == (int)enumWaveRuleType.普通波次)
            {
                return CustQuery(700).Tables[0];
            }
           // if (wr.type == (int)enumWaveRuleType.普通波次)
            {
                return CustQuery(701).Tables[0];
            }
                
        }
        /// 
        ///  根据waveNo 取wave detail 分页数据
        /// 
        /// 
        /// 
        /// 
        /// 
        public DataSet getWaveDetails(string waveNo,int rowStart,int rowEnd)
        {
            this.rownumStart = rowStart;
            this.rownumEnd = rowEnd;
            cmdParameters[0] = waveNo;
            return CustQuery(800) ;
        }
        /// 
        /// 根据waveNo 取wave detail 不分页
        /// 
        /// 
        /// 
        public DataTable getWaveDetails(string waveNo)
        {
            cmdParameters[0] = waveNo;
            return CustQuery(801).Tables[0];
        }
        public DataTable getPickInfo(string waveNo)
        {
            cmdParameters[0] = waveNo;
            return CustQuery(900).Tables[0];
        }
        public DataTable getPickInfo(string waveNo,int volType)
        {
            cmdParameters[0] = waveNo;
            cmdParameters[1] = volType;
            return CustQuery(910).Tables[0];
        }
        public DataTable getPickSummary(string waveNo, int volType)
        {
            cmdParameters[0] = waveNo;
            cmdParameters[1] = volType;
            return CustQuery(920).Tables[0];
        }
        public DataTable getPickTaskDetails(string taskNo)
        {
            cmdParameters[0] = taskNo; 
            return CustQuery(1000).Tables[0];
        }
        public DataTable getFlowNoDetails(string flowNo, string goodsId,string batch)
        {
            cmdParameters[0] = flowNo;
            cmdParameters[1] = goodsId;
            cmdParameters[2] = batch;
            return CustQuery(1001).Tables[0];
        }
        public DataTable getFlowNoDetails(string seedsNo,string flowNo, string goodsId, string batch)
        {
            cmdParameters[0] = flowNo;
            cmdParameters[1] = goodsId;
            cmdParameters[2] = batch;
            cmdParameters[3] = seedsNo;
            return CustQuery(1002).Tables[0];
        }
        public DataTable getFreeTasks(int partion, int lineId, bool batchOnly,enumOrderType orderType,int empId=0)
        { 
            cmdParameters[0] = partion;
            cmdParameters[1] = lineId;
            cmdParameters[2] = batchOnly;
            cmdParameters[4] = (int)orderType;
            cmdParameters[5] = empId;
            return CustQuery(1100).Tables[0];
        }
        public DataTable getFreeTasksByPickOrder(string pickOrderNo)
        {
            cmdParameters[0] = pickOrderNo;
         
            return CustQuery(1120).Tables[0];
        }
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 称重类,在货位分货,按商品排序 
        /// 
        public DataTable getFreeTasksByJob(int partion, int lineId, bool batchOnly, enumOrderType orderType, int assignedEmpId = 0,int wareHouse=0,string orderNo ="",string jobNo="",bool isOrderByGoods=false)
        {
            cmdParameters[0] = partion;
            cmdParameters[1] = lineId;
            cmdParameters[2] = batchOnly;  
            cmdParameters[3] = wareHouse;
            cmdParameters[4] = (int)orderType;
            cmdParameters[5] = assignedEmpId;         
            cmdParameters[6] = jobNo;
            cmdParameters[7] = orderNo;
            cmdParameters[8] = isOrderByGoods;
           // cmdParameters[9] = isSeedsTaskOnly;
            return CustQuery(1110).Tables[0];
        }
        public DataTable getAssignedTasks(int taskBy, int partion, int lineId, bool batchOnly,
            enumOrderType orderType ,int state=0)
        {   
            LogHelper.debug(GetType(), String.Format(" to get getAssignedTasks ,takeBy {0}, partion {1}, lineId {2}, batchOnly {3}, orderType {4}, state{5}",
                taskBy,   partion,   lineId,   batchOnly, orderType.ToString(),   state ));
            cmdParameters[5] = taskBy;
            cmdParameters[6] = partion;
            cmdParameters[7] = lineId;
            cmdParameters[8] = batchOnly;
            cmdParameters[9] = (int)orderType;
            cmdParameters[10] = state;
            return CustQuery(1200).Tables[0];
        }
        public DataTable getAssignedTasks4Wince(int taskBy, int partion, int lineId , bool batchOnly
            , enumOrderType orderType)
        {
            cmdParameters[0] = taskBy;
            cmdParameters[1] = partion;
            cmdParameters[2] = lineId;
            cmdParameters[3] = batchOnly;
            cmdParameters[4] = (int)orderType;
            return CustQuery(1300).Tables[0];
        }
        public DataTable getPartions(int userID)
        {
            cmdParameters[0] = userID;
            return CustQuery(1400).Tables[0];
        }
        public void getPickPortByRecordId(int recId)
        {
            cmdParameters[0] = recId;
            getModel(1500); 
        }
        public int updateBulkPickStateByPickOrder(string pickOrder,int checkBy,int checkBy2)
        {
            cmdParameters[0] = pickOrder;
            cmdParameters[1] = checkBy;
            cmdParameters[2] = checkBy2;
            cmdParameters[3] = (int)enumPickState.复核完成;
            return  CustOper (1600) ;
        }
        public DataTable getRepTasks(int takeBy, int taskPartion )
        {
            cmdParameters[0] = takeBy;
            cmdParameters[1] = taskPartion;
            cmdParameters[2] = (int)enumPickState.未拣; 
            return CustQuery(1700).Tables[0];
        }
        /// 
        /// by wmsoutdetail, 按原始订单明细取播种信息
        /// 
        /// 
        /// 
        /// 
        public DataTable getSeedsOutDetail(string flowNo, bool isOrderByCust)
        {
            cmdParameters[0] = flowNo;
            if (isOrderByCust) { 
                return CustQuery(1810).Tables[0];
            }else
                return CustQuery(1800).Tables[0];
        }
        /// 
        /// by wmsOutPickDetail , 按拣货单明细取播种信息
        /// 
        /// 
        /// 
        /// 
        public DataTable getSeedsOutPickDetail(string flowNo, bool isOrderByCust)
        {
            cmdParameters[0] = flowNo;
            if (isOrderByCust)
            {
                return CustQuery(1811).Tables[0];
            }
            else
                return CustQuery(1801).Tables[0];
        }
        public DataTable getFlows4SeedsOut()
        {
            return CustQuery(1900).Tables[0];
        }
        public DataTable getByDetailId(int pickDetailId,enumPickState state=enumPickState.未拣)
        {
            cmdParameters[0] = pickDetailId;
            cmdParameters[1] = (int)state;
            return CustQuery(2000).Tables[0];
        }
        public int getCntByDetailId(int pickDetailId, enumPickState state = enumPickState.未拣)
        {
            cmdParameters[0] = pickDetailId;
            cmdParameters[1] = (int)state;
            return queryCount(2100);
        }
        public void fromStockRecord(WmsStockRecord wsr)
        {
            recordId = wsr.ID;  
            pickOrderNo = wsr.orderNo; 
            recType = wsr.rectype; 
            pickDetailId = wsr.orderDetailId;
          
        }
        public DataTable getPickLightTasks(int takeBy, int partion, int orderType)
        {
            cmdParameters[0] = takeBy;
            cmdParameters[1] = partion;
            cmdParameters[2] = orderType;
            return CustQuery(2200).Tables[0];
        }
        public DataTable geTasksByJobNo(string jobNo)
        {
            cmdParameters[0] = jobNo;  
            return CustQuery(2300).Tables[0];
        }
        public DataTable geTasksByPickNo(string pickNo)
        {
            cmdParameters[0] = pickNo;
            return CustQuery(2400).Tables[0];
        }
        public DataTable getLightTasks(string query, int wareHouse, int partion, int lineId, int state, string date, bool isLight)
        {
            cmdParameters[0] = state;
            cmdParameters[1] = partion;
            cmdParameters[2] = lineId;
            cmdParameters[3] = date;
            cmdParameters[4] = wareHouse;
            cmdParameters[5] = query;
            if (isLight)
            {
                return CustQuery(2210).Tables[0];
            }
            return CustQuery(2220).Tables[0];
        }
        public DataTable getLightSeeds(int deskId, string flowno, string barcode)
        {
            cmdParameters[0] = deskId;
            cmdParameters[1] = flowno;
            cmdParameters[2] = barcode;
            return CustQuery(2500).Tables[0];
        }
    }
}