/// 
///INTERFACE CLASS FOR TABLE t_wmsOutRequest
///By wm with codesmith. 
///on 05/18/2017
/// 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using DeiNiu.Utils;
using System.Transactions;
namespace DeiNiu.wms.Data.Model
{
    [Serializable]
    public class WmsOutRequest : WmsOutRequest_base
    {
        public WmsOutRequest()
        {
        }
        public WmsOutRequest(int id): base(id)
        {
        }
         public WmsOutRequest(DataRow dr): base(dr)
        {
        }
         public WmsOutRequest(String orderNo) 
         {
             cmdParameters[0] = orderNo;
             getModel(100);
         }
         protected override void getImp()
         {
             model_imp = new WmsOutRequest_Imp();
         }
         //begin cust db operation, query, excute sql etc.
         public DataTable QueryByStateForPick( enumOutStockRequestStatus state )
         {
             cmdParameters[0] = (int)state;
             cmdParameters[1] = new WaveRule().getCurrentActiveRule(enumWaveRuleType.普通波次);
           //  cmdParameters[1] = (int)startOn;
             return CustQuery(201).Tables[0];
         }
        public DataTable getByCustForPick(enumOutStockRequestStatus state,string custId)
        {
            cmdParameters[0] = (int)state;
            cmdParameters[1] = custId;
            //  cmdParameters[1] = (int)startOn;
            return CustQuery(2011).Tables[0];
        }
        //begin cust db operation, query, excute sql etc.
        public DataSet QueryByState(DeiNiu.Utils.enumOutStockRequestStatus state)
        {
            cmdParameters[0] = (int)state;
            return  CustQuery(200);
        }
         /// 
         /// 同步新销售订单前
         /// 记录临时数据
         /// 并删除临时数据
         /// 
         /// 
         public int prepareSaleInTmpData()
         {
             return CustOper(202);
         }
        /// 
        /// 出库请求原始单详情
        /// 
        /// 
        public DataSet getRequestDetail()
        {
            cmdParameters[0] = this.orderNo;
            return CustQuery(300);
        }
        /// 
        /// 出库单详情(根据货物id,批号合并原始单明细)
        /// 
        /// 
        public DataSet getOutDetail()
        {
            cmdParameters[0] = this.orderNo;
            return CustQuery(400);
        }
        /// 
        /// 取订单详细,直接转换为拣货单明细
        /// 
        /// 
        public DataTable getOutDetailForPick()
        {
            cmdParameters[0] = this.orderNo;
            return CustQuery(1400).Tables[0];
        }
        /// 
        /// 待出库新订单
        /// 
        /// 
        public DataTable getNewOrders()
        { 
            return CustQuery(600).Tables[0];
        }
        /// 
        /// 拉取erp订单
        /// 
        /// 
        public int syncOutRequest()
        {
           return  CustOper(500); 
        }
        /// 
        /// 
        /// 
        /// 
        public DataTable getLastSyncOrders()
        {
          return CustQuery(504).Tables[0]; 
        }
        /// 
        /// 自动审核立即分拣类型的出库单,即刻进入订单合并分拣环节
        /// 分店客户需集单出库的情况不适用,按订单约定日期出库的需要手动核准
        /// 
        /// 
        /// 
        public int autoApproveOutRequest(enumOutStockRequestStatus status )
        {
            cmdParameters[0] = (int)status;
            cmdParameters[1] = this.operater;
            int r = CustOper(501);
            return r;
        }
        public DataTable getLastSynOrders()
        {
            return CustQuery(503).Tables[0];
        }
        /// 
        /// 根据客户拣货策略信息,分流待分拣新订单到不同拣货方式
        /// 
        public int autoPickPrepare()
        {
            return CustOper(502);
        }
        private List _outDetails;
        /// 
        /// 查询订单出库详情
        /// 
        public List outDetails
        {
            get {
                if (_outDetails == null && !string.IsNullOrEmpty( _orderNo))
                {
                  //  DeiNiu.Utils.LogHelper.WriteLog(this.GetType(), "start to get outDetails");
                    _outDetails = new List();
                    DataTable dt = getOutDetail().Tables[0];
                    foreach (DataRow dr in dt.Rows)
                    { 
                        _outDetails.Add( new WmsOutDetail(dr)); 
                    }
                  //  DeiNiu.Utils.LogHelper.WriteLog(this.GetType(), "end get outDetails");
                }
                
                return _outDetails;
            } 
        }
      
        /// 
        /// 获取订单,并按客户排序
        /// 
        /// 订单类型
        /// 订单状态
        /// 
        public DataSet getRequests(DeiNiu.Utils.enumOrderType orderType,DeiNiu.Utils.enumOutStockRequestStatus orderStatus)
        { 
             cmdParameters[0] =(int)orderType;
             cmdParameters[1] = (int)orderStatus;
            return CustQuery(800);
        }
        /// 
        /// get new request for merged pre to pick request
        /// 
        /// 
        public DataSet getNewRequests()
        {  
            return QueryByState(Utils.enumOutStockRequestStatus.待出库);
        }
        /// 
        /// get merged view of new requests 
        /// 
        /// 
        public DataSet getNewRequestPickDetails()
        {
         //   cmdParameters[0] = (int)Utils.enumOutStockRequestStatus.待处理;
            return CustQuery(900);
        }
        /// 
        /// get error pick details
        /// 
        /// 
        public DataSet getErroredPickDetails()
        {
            return CustQuery(1000);
        }
        /// 
        /// get sales man list
        /// 
        /// 
        public DataTable getSalesMen()
        {
            return CustQuery(1100).Tables[0];
        }
        /// 
        /// 合并销售订单或取消合并
        /// 
        /// 
        /// 
        /// 
        /// 
        public void updatePickState(string custID, string custName, string custAddress, string pickOrderNo
           , Utils.enumOutStockRequestStatus stateNew,Utils.enumOutStockRequestStatus stateOld
            )
        {
            cmdParameters[0] = custID;
            cmdParameters[1] = custName;
            cmdParameters[2] = custAddress;
            cmdParameters[3] = pickOrderNo;
            cmdParameters[4] = (int)stateNew;
            cmdParameters[5] = (int)stateOld;
            cmdParameters[6] = operater; 
            CustOper(1200);
        }
     
        public int updateTmpPickState( string pickOrderNo  , Utils.enumOutStockRequestStatus state )
        {
          
            cmdParameters[0] = pickOrderNo;
            cmdParameters[1] = (int)state; 
            cmdParameters[2] = operater;
          return  CustOper(1210);
        }
        public DataTable getTemp()
        {
            return CustQuery(3000).Tables[0];
        }
        public void updatePickState(string pickOrderNo, Utils.enumOutStockRequestStatus stateNew,
         Utils.enumOutStockRequestStatus stateOld)
        {
            cmdParameters[0] = pickOrderNo;
            cmdParameters[1] = (int)stateNew;
            cmdParameters[2] = (int)stateOld;
            cmdParameters[3] = operater;
            CustOper(1211);
        }
        public void updatePickState(string pickOrderNo, Utils.enumOutStockRequestStatus stateNew)
        {
            cmdParameters[0] = pickOrderNo;
            cmdParameters[1] = (int)stateNew;
            cmdParameters[2] = operater;
            CustOper(1212);
        }
        /// 
        /// prepare the out request orders for pick
        /// 
      /*  public void preparePick()
        {
            cmdParameters[0] = (int)enumOutStockDetailStatus.库存不足;
            cmdParameters[1] = "库存不足";
            cmdParameters[2] =  (int)enumOutStockDetailStatus.待处理; 
            cmdParameters[3] = (int)enumOutStockRequestStatus.准备分拣;
            cmdParameters[4] = operater;
            try
            {
                using (TransactionScope scope1 = new TransactionScope())
                {
                    CustOper(1300);
                    scope1.Complete();
                }
            }
            catch (Exception er)
            {
                LogHelper.WriteLog(typeof(WmsOutRequest), er);
             
               // throw er;
            }
              
        }
      */
        /// 
        /// 入库单自动核准,每次抓100个订单的情况下,出现部分待核准订单切明细为空的订单
        /// 每次抓500个的情况下没发现此状况
        /// 
        public void deleteBadData()
        {
            CustOper(1500);
        }
        public DataTable getRequest4pick(int cnt, enumOutStockRequestStatus status)
        {
            cmdParameters[0] = cnt;
            cmdParameters[1] = (int)status;
            return CustQuery(1600).Tables[0]; 
        }
        public void insertTmp(string orderNo)
        {
            cmdParameters[0] = orderNo;
            CustOper(1610);
        }
        public void deleteTmp(string orderNo)
        {
            LogHelper.debug(typeof(WmsOutRequest), " delete from temp......, orderNo is  " + orderNo);
            cmdParameters[0] = orderNo;
            CustOper(1620);
        }
        public DataTable getOverStock()
        {
            //with skuId in sales detail
            DataTable dt = CustQuery(1640).Tables[0];
           
            if (dt.Rows.Count > 0)
            {
                return dt;
            }
            //with batch in sales detail
            dt = CustQuery(1670).Tables[0];
            if (dt.Rows.Count > 0)
            {
                return dt;
            }
            //only goodsId in sales detail
            dt = CustQuery(1680).Tables[0];
            return dt;
        }
        public DataTable getStockLack4Out()
        {
            return CustQuery(1640).Tables[0] ;
        }
        public DataTable getSeedsSumDetail(int pickGroup, int pickStartOn, string dueDate, enumOutStockRequestStatus enOs, 
            enumOutStockDetailStatus enOd)
        {
            cmdParameters[0] = pickGroup;
            cmdParameters[1] = pickStartOn;
            cmdParameters[2] = dueDate;
            cmdParameters[3] = (int)enOs;
            cmdParameters[4] = (int)enOd;
       
            return CustQuery(1700).Tables[0];
        }
        public DataSet getSeedsSumDetail(string queryStr, int rownumStart, int rownumEnd)
        {
            if (rownumEnd > rownumStart && rownumStart > 0)
            {
                 this.rownumStart = rownumStart;
                 this.rownumEnd = rownumEnd;
            }
            cmdParameters[0] = queryStr;
            return CustQuery(1701) ;
        }
        public DataTable getSeedsDetail(int skuId)
        {
            cmdParameters[0] = skuId;
            return CustQuery(1702).Tables[0];
        }
        public DataTable getSeedsDetailByGoods(string goodsId)
        {
            cmdParameters[0] = goodsId;
            return CustQuery(1703).Tables[0];
        }
        /// 
        /// 分店客户生成取总分拣单明细,更新原订单状态
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public int groupPickStart(int pickGroup, int pickStartOn, string dueDate, string pickOrder,int operater)
        {
            cmdParameters[0] = pickGroup;
            cmdParameters[1] = pickStartOn;
            cmdParameters[2] = dueDate;
            cmdParameters[3] = enumOutStockRequestStatus.待审核;
            cmdParameters[4] = enumOutStockDetailStatus.待处理;
            cmdParameters[5] = pickOrder;
            cmdParameters[6] = operater;
            return CustOper(1800)  ;
        }
        public DataTable getAvErpDetailNoSkuId()
        {
            return CustQuery(1900).Tables[0];
        }
        public DataTable getRequestByPickOrder(string pickOrderNo)
        {
            cmdParameters[0] = pickOrderNo;
            return CustQuery(2000).Tables[0];
        }
        public int updateDetailStockShortage(string orderno,int skuId, decimal lackCount)
        {
            cmdParameters[0] = orderno;
            cmdParameters[1] = skuId;
            cmdParameters[2] = "库存不足,缺货 " +lackCount;
            return  CustOper(2100);
        }
    }
}