/// 
///INTERFACE CLASS FOR TABLE t_wmsOutPickRequest
///By wm with codesmith. 
///on 05/22/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 WmsOutPickRequest : WmsOutPickRequest_base
    {
        public WmsOutPickRequest()
        {
        }
        public WmsOutPickRequest(int id): base(id)
        {
        }
        public WmsOutPickRequest(DataRow dr): base(dr)
        {
        }
        public WmsOutPickRequest(string orderNo)
        { 
            cmdParameters[0] = orderNo;
            getModel(100);
        }
        protected override void getImp()
        {
            model_imp = new WmsOutPickRequest_Imp();
        }
       
        //begin cust db operation, query, excute sql etc.
        public DataSet QueryByName(string name)
        {
            cmdParameters[0] = name;
            return  CustQuery(100);
        }
        /// 
        /// 出库单详情(根据customer合并订单明细)  
        /// 
        /// 
        public DataSet getOutDetail()
        {
            cmdParameters[0] = this._pickOrderNo;
            return CustQuery(200);
        }
        /// 
        /// 出库单详情(根据货物id,批号合并原始单明细)
        /// 
        /// 
        public DataSet getOutDetailMerged()
        {
            cmdParameters[0] = this._pickOrderNo;
            return CustQuery(210);
        }
        private List _outDetails;
        private string orderNo;
        /// 
        /// 查询订单出库详情
        /// 
        public List outDetails
        {
            get
            {
                if (_outDetails == null && !string.IsNullOrEmpty(_pickOrderNo))
                {
                    _outDetails = new List();
                    DataTable dt = getOutDetail().Tables[0];
                    foreach (DataRow dr in dt.Rows)
                    {
                        _outDetails.Add(new WmsOutPickDetail(dr));
                    }
                }
                return _outDetails;
            }
        }
        /// 
        /// 查询订单出库详情
        /// 
        public List outDetailsMergedByOrderNo
        {
            get
            {
                if (_outDetails == null && !string.IsNullOrEmpty(_pickOrderNo))
                {
                    _outDetails = new List();
                    DataTable dt = getOutDetail().Tables[0];
                    foreach (DataRow dr in dt.Rows)
                    {
                        _outDetails.Add(new WmsOutPickDetail(dr));
                    }
                }
                return _outDetails;
            }
        }
        /// 
        /// 获取出库订单
        /// 
        /// 订单类型
        /// 订单状态
        /// 
        public DataSet getRequests(DeiNiu.Utils.enumOutOrderType orderType, DeiNiu.Utils.enumOutStockRequestStatus orderStatus)
        {
            cmdParameters[0] = (int)orderType;
            cmdParameters[1] = (int)orderStatus;
            return CustQuery(300);
        }
      /// 
        /// 获取波次出库单
      /// 
      /// 
      /// 
      /// 
        public List getRequests4Wave(  )
        {
            if (WmsConstants.WAVE_LINE == -1 && string.IsNullOrEmpty(WmsConstants.WAVE_SALE))
            {
                return getRequestObjects(enumOutOrderType.拣货单, enumOutStockRequestStatus.等待波次);
            }
            List lst = new List();
            cmdParameters[0] = (int)enumOutOrderType.拣货单;
            cmdParameters[1] = (int)enumOutStockRequestStatus.等待波次;
            cmdParameters[2] = WmsConstants.WAVE_LINE;
            cmdParameters[3] = WmsConstants.WAVE_SALE;
            DataTable dt = CustQuery(301).Tables[0];
            foreach (DataRow dr in dt.Rows)
            {
                lst.Add(new WmsOutPickRequest(dr));
            }
            return lst;
        }
        ///        
        /// 获取出库订单
        /// 
        /// 订单类型
        /// 订单状态
        /// 
        public List getRequestObjects(DeiNiu.Utils.enumOutOrderType orderType, DeiNiu.Utils.enumOutStockRequestStatus orderStatus) 
          // , int lines=-1,string sales="")
        {
            List lst = new List();
            DataTable dt = getRequests(orderType,orderStatus).Tables[0];
            foreach (DataRow dr in dt.Rows)
            {
                lst.Add(new WmsOutPickRequest(dr));
            }
            return lst;
        }
        /// 
        /// 进入波次,更新零货捡货状态
        /// 
        /// 
        /// 
        public void updateBulkPickStatus(string pickOrderNo,enumOutStockPickStatus state,int operater)
        {
            cmdParameters[0] = pickOrderNo;
            cmdParameters[1] = (int)state;
            cmdParameters[2] = operater;
            CustOper(410);
        }
        /// 
        /// 更新整货捡货状态
        /// 需要事物
        /// 
        /// 
        /// 
        public int updateBatchPickStatus(string pickOrderNo, enumOutStockPickStatus state,int operater)
        {
            cmdParameters[0] = pickOrderNo;
            cmdParameters[1] = (int)state;
            cmdParameters[2] = operater;
          return  CustOper(420);
        }
        /// 
        /// 更新整货捡货、复核状态
        /// 完成订单明细的全部拣货、复核动作时执行此方法
        /// 需要事物
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public int updateBatchOrderStatus(string pickOrderNo, enumOutStockRequestStatus orderState, enumOutStockDetailStatus detailState, int operater)
        { 
            cmdParameters[0] = pickOrderNo;
            cmdParameters[1] = (int)orderState;
            cmdParameters[2] = (int)detailState; 
            cmdParameters[3] = operater;
            return CustOper(430);
        }
        /// 
        /// 波次完成,更新bulkPickState
        /// 全是零货的订单状态 state一并更新
        /// 有整货的,待整货完成分拣后再更新
        /// 
        /// 
        /// 
        public bool completeWaveBulkPickStatus(string waveNo, int operater)
        {
            cmdParameters[0] = waveNo;
            cmdParameters[1] = operater;
            CustOper(400);
            return true;
        }
        /// 
        /// 单个订单零货分拣完成
        /// 
        /// 
        /// 
        /// 
        public bool completeBulkPickStatus(string pickRequestNo, int operater)
        {
            cmdParameters[0] = pickRequestNo;
            cmdParameters[1] = operater;
            CustOper(400);
            return true;
        }
        public bool canNewWave() {
            //int cnt1 = CustQuery(500).Tables[0].Rows.Count; //判断是否有正在拣选数据
            //int cnt2 = CustQuery(550).Tables[0].Rows.Count;//判断是否有待拣选数据
            return CustQuery(500).Tables[0].Rows.Count == 0 && CustQuery(550).Tables[0].Rows.Count > 0; 
        }
        public DataSet getPickDetailByOrder(string orderNo, DeiNiu.Utils.enumOutOrderType orderType)
        {
            cmdParameters[0] = (int)orderType;
            cmdParameters[1] = orderNo;
            return CustQuery(600);
        }
        /// 
        /// pick details by wave order
        /// including batch and bulk
        /// 
        /// 
        /// 
        public DataSet getPickDetailByWaveOrder(string waveOrder)
        {
            cmdParameters[0] = waveOrder;  
            return CustQuery(700);
        }
        /// 
        /// current bulk details
        /// 
        /// 
        public DataSet getBulkDetailInCurrentWave()
        {
         
            return CustQuery(710);
        }
        /// 
        ///  pick details by wave order
        ///  including bulk details in current wave 
        /// 
        /// 
        /// 2 tables, first for  pick details , second for current bulk detail 
        public DataSet getPickDetailByWaveOrderWithCurrentBulks(string waveOrder)
        {
            DataSet ds = getPickDetailByWaveOrder(waveOrder);
            ds.Tables.Add(getBulkDetailInCurrentWave().Tables[0]);
            return ds;
        }
        /// 
        /// 取待审核、播种订单列表
        /// 
        /// 
        /// 
        public DataSet getPickRequest4BulkVailidate(object desk)
        {
            cmdParameters[0] = desk;  
            return CustQuery(800);
        }
  
        public DataSet getOutRequestDetail(string pickOrderNo)
        {
            cmdParameters[0] = pickOrderNo;
            return CustQuery(810);
        }
        /// 
        /// 生成波次后,保存相关出库单的明细到临时表 for 复核
        /// 
        /// 
        /// 
        /// 
        public int saveTempData4Validation(string waveNo)
        {
            cmdParameters[0] = waveNo;  
            return CustOper(900);
        }
        /// 
        /// 取复核明细
        /// 
        /// 
        /// 
        //public int getValidationDetail(string pickOrder)
        //{
        //    cmdParameters[0] = pickOrder;
        //    return CustOper(1000);
        //}
        /// 
        /// pick details by pickOrderNo
        /// including batch and bulk
        /// 
        /// 
        /// 
        public DataSet getPickDetailByPickOrderNo(string pickOrderNo)
        {
            cmdParameters[0] = pickOrderNo;
            return CustQuery(1100);
        }
     /// 
        /// to light labels for pick orders by seedPickNo ,goodsId, batch 
     /// 
     /// 
     /// 
     /// 
     /// 
        public DataSet getSeedsLightData(string seedsPickNo,string goodsId,string batch)
        {
            cmdParameters[0] = seedsPickNo;
            cmdParameters[1] = goodsId;
            cmdParameters[2] = batch;
            return CustQuery(1101);
        }
 
        public int getUnSeedsCnt(string seedsPickNo, string goodsId, string batch)
        {
            cmdParameters[0] = seedsPickNo;
            cmdParameters[1] = goodsId;
            cmdParameters[2] = batch;
            string tmp = CustQuery(1102).Tables[0].Rows[0][0].ToString();
            return tmp != string.Empty
                       ? Convert.ToInt32(tmp)
                       : 0;
            
        }
        public int getUnSeedsCnt(string seedsPickNo)
        {
            cmdParameters[0] = seedsPickNo;
         
            string tmp = CustQuery(1103).Tables[0].Rows[0][0].ToString();
            return tmp != string.Empty
                       ? Convert.ToInt32(tmp)
                       : 0;
        }
        public DataTable getSeedsData(string seedsPickNo)
        {
            cmdParameters[0] = seedsPickNo; 
            return CustQuery(1104).Tables[0] ;
           
        }
        /// 
        /// delete the tmp data by pickOrderNo
        /// 
        /// 
        public void deleteTempValidationData(string pickOrderNo)
        {
            cmdParameters[0] = pickOrderNo;
            CustOper(1200); 
        }
        /// 
        /// 待处理零货复核异常
        /// 
        /// 
        /// 
        public DataSet getBulkValidationException(enumOutStockPickStatus status)
        {
            cmdParameters[0] = (int)status;
            return CustQuery(1300);
        }
        /// 
        ///已处理收货异常
        /// 
        /// 
        /// 
        public DataSet getBulkValidationExceptionSolutions(object desk =null)
        {
            cmdParameters[0] = desk;
            return CustQuery(1400);
        }
        /// 
        /// get batch pickorders
        /// 
        /// 
        /// 
        /// 
        public DataSet getBatchOutPickOrders(enumOutStockRequestStatus status,enumOutStockPickStatus batchPickStatus1 ,enumOutStockPickStatus batchPickStatus2)
        {
            cmdParameters[0] = (int)status;
            cmdParameters[1] = (int)batchPickStatus1;
            cmdParameters[2] = (int)batchPickStatus2;
            return CustQuery(1500);
        }
        /// 
        /// 查当日(未完成补货的)补库单
        /// 补货还未入零库(enumOutStockPickStatus.复核完成)
        /// 
        /// 
        /// 
        /// 
        public DataTable getRepRequestDetailsLessThan(enumOutStockPickStatus pickStatus = enumOutStockPickStatus.复核完成)
        {
            List requests = new List();
            cmdParameters[0] = (int)pickStatus;
            DataTable dt = CustQuery(1510).Tables[0];
            return dt;
            //foreach (DataRow dr in dt.Rows)
            //{
            //    requests.Add(new WmsOutPickDetail(dr));
            //}
            //return requests;
        }
        /// 
        /// get batch pickorder details
        /// 
        /// 
        /// 
        /// 
        /// 
        public DataSet getBatchOutPickOrderDetails(string pickOrderNo, enumOutStockDetailStatus status, enumOutStockPickStatus batchPickStatus)
        {
            cmdParameters[0] = (int)status;
            cmdParameters[1] = (int)batchPickStatus;
            cmdParameters[2] =  pickOrderNo;
            return CustQuery(1700);
        }
        /// 
        /// pick details for batch pick order
        /// 
        /// 
        /// 
        /// 
        /// 
        public DataSet getBatchOutPickOrderPickDetails(string pickOrderNo, enumOutStockRequestStatus status, enumOutStockPickStatus batchPickStatus)
        {
            cmdParameters[0] = (int)status;
            cmdParameters[1] = (int)batchPickStatus;
            cmdParameters[2] = pickOrderNo;
            return CustQuery(1600);
        }
        /// 
        /// pick details for batch pick order by pickorderNo
        /// 
        /// 
        /// 
        public DataSet getBatchOutPickOrderPickDetails(string pickOrderNo)
        { 
            cmdParameters[0] = pickOrderNo;
            return CustQuery(1610);
        }
        public DataTable getPickOrderTmsInfo(string pickOrderNo)
        {
            cmdParameters[0] = pickOrderNo; 
            return CustQuery(1620).Tables[0];
        }
        /// 
        /// 取出库货位、数量详细
        /// 
        /// 
        /// 
        public DataTable getPickDetail (int stockRecordId)
        {
            cmdParameters[0] = stockRecordId; 
            return CustQuery(1900).Tables[0];
        }
       /// 
       /// 根据捡货状态取捡货明细
       /// 
       /// 
       /// 
        public DataTable getBatchPickDetails(enumPickState state)
        {
            cmdParameters[0] = (int)state;
            return CustQuery(2000).Tables[0];
        }
        /// 
        /// pickorders that ready for validation 
        /// for wince Only
        /// 
        /// 
        /// 
        public DataTable getBatchPickOrders4Validation()
        {      
            return CustQuery(2100).Tables[0];
        }
        /// 
        /// batch pickorder detail 
        /// for wince Only
        /// 
        /// 
        /// 
        public DataTable getBatchPickOrderDetail4Wince(string pickOrderNo)
        {
            cmdParameters[0] = pickOrderNo;
            return CustQuery(2200).Tables[0];
        }
        /// 
        /// 取整货出库分拣明细
        /// 
        /// 
        /// 
        /// 默认当天和昨天两天的
        /// 
        public DataTable getBatchPickOrderDetail(enumOutOrderType orderType, enumPickState pickState,string orderDate = "")
        {
            cmdParameters[0] = (int)orderType;
            cmdParameters[1] = (int)pickState;
            cmdParameters[2] = orderDate;
            return CustQuery(2300).Tables[0];
        }
        public bool updatePriority(string orders, int priority,int operId)
        {
            cmdParameters[0] = orders;
            cmdParameters[1] = priority;
            cmdParameters[2] = operId;
            return CustOper(2400) > 0;
        }
    }
}