/// 
///INTERFACE CLASS FOR TABLE t_wmsOutPickLable
///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 WmsOutPickLable : WmsOutPickLable_base
    {
        public WmsOutPickLable()
        {
        }
        public WmsOutPickLable(int id): base(id)
        {
        }
        public WmsOutPickLable(DataRow dr): base(dr)
        {
        }
        protected override void getImp()
        {
            model_imp = new WmsOutPickLable_Imp();
        }
       
        //begin cust db operation, query, excute sql etc.
        public DataSet QueryByName(string name)
        {
            cmdParameters[0] = name;
            return  CustQuery(100);
        }
        /// 
        /// lookfor from history pick info
        /// 
        /// 
        /// 
        /// 
        /// 
        public DataSet getPickListByOrder(string pickOrder, bool isShowAll = true, enumPickState state = enumPickState.未拣)
        {
            cmdParameters[0] = pickOrder;
            cmdParameters[1] = isShowAll;
            cmdParameters[2] = (int) state;
            return CustQuery(200);
        }
        /// 
        /// lookfor from history pick info
        /// 
        /// 
        /// 
        /// 
        /// 
        public DataSet getPickListByWave(string waveOrder, bool isShowAll = true, enumPickState state = enumPickState.未拣)
        {
            cmdParameters[0] = waveOrder;
            cmdParameters[1] = isShowAll;
            cmdParameters[2] = (int)state;
            return CustQuery(300);
        }
        public DataSet getPickList(enumPickState state = enumPickState.未拣) { 
            cmdParameters[0] = (int)state;
            return CustQuery(400);
        }
        /// 
        /// 第三方亮灯数据
        /// 
        /// 
        public DataSet getNewPickList()
        { 
            return CustQuery(401);
        }
        /// 
        /// 第三方数据 需维护货位和标签对应关系的数据
        /// 
        /// 
        public DataTable getUnMaintainLocations()
        {
            return CustQuery(402).Tables[0];
        }
        /// 
        /// current pick details 
        /// from tmp table
        /// 
        /// 
        /// 
        public DataSet getCurrentPickList(enumPickState state = enumPickState.未拣)
        {
            cmdParameters[0] = (int)state;
            return CustQuery(500);
        }
        /// 
        /// 分区拣选明细
        /// 
        /// 
        /// 
        /// 
        public DataSet getPartPickList(int part,enumPickState state  )
        {
            cmdParameters[0] = part;
            cmdParameters[1] = (int)state;
            return CustQuery(501);
        }
        public DataTable getDpsPickList(string dpsOrder, enumPickState state)
        {
            cmdParameters[0] = dpsOrder;
            cmdParameters[1] = (int)state;
            return CustQuery(503).Tables[0];
        }
        /// 分区拣选明细
        /// 
        /// 
        /// 
        /// 
        public DataSet getPartPickList(int part )
        {
            cmdParameters[0] = part; 
            return CustQuery(502);
        }
        /// 
        /// 分区现有订单中未完成分拣的明细(订单明细可能在其他区或未开始拣选)
        /// 
        /// 
        /// 
        public DataTable getPartUnPickList(int part)
        {
            cmdParameters[0] = part; 
            return CustQuery(712).Tables[0];
        }
        /// 
        /// update the picking data 
        /// send back by ele label
        /// 
        /// 
        /// 
        /// 
        /// 
        public int updatePickingStatus(int color,int eleId,int elabAddress,decimal pickCount,bool isProcessStock =false)
        {
            cmdParameters[0] = color;
            cmdParameters[1] = eleId;
            cmdParameters[2] = pickCount;
            cmdParameters[3] = elabAddress;
            cmdParameters[4] = isProcessStock;
            return CustOper(600);
             
        }
        /// 
        /// 
        /// 一个pickorderdetail 对象可能对应多个 WmsOutPickLable ,所以该方法不适用除强制分拣完成之外的地方了
        /// 
        /// 更新复核数据的捡货状态
        /// 在更新临时捡货状态后调用
        /// 
        /// 
        /// 
        /// 
        /// 
        public int updateValidPickingStatus(int color, int eleId, int elabAddress )
        {
            cmdParameters[0] = color;
            cmdParameters[1] = eleId; 
            cmdParameters[2] = elabAddress;
         
            return CustOper(610);
        }
        /// 
        /// 仅适用除强制分拣完成,复核数据状态更新 
        /// 
        /// 
        /// 
        public int updateValidPickingStatus(string dpsOrder)
        {
            cmdParameters[0] = dpsOrder;
       
            return CustOper(611);
        }
        /// 
        /// move the current picking data to picking [t_wmsOutPickLable]
        /// delete the picking finished data 
        /// need transaction
        /// 
        /// 
        /// 
        public void finishCurrentPickingData(bool isForce)
        {
          //  string waveOrder = "";
         //   DataTable dt = getCurrentPickList(enumLabelPickState.picked).Tables[0];
          //foreach (DataRow dr in dt.Rows)
          //{
          //    waveOrder = dr["waveOrder"].ToString();  //取完成拣选的waveOrder
          //    break;
          //}
          
            if (isForce)
            {
                if (WmsConstants.OUT_STOCK_DEDUCT) //处理库存
                {
                    DataTable dt = getCurrentPickList().Tables[0];
                    WmsOutPickLable wp;
                    int i=0;
                    foreach (DataRow dr in dt.Rows)
                    {
                        i++;
                        wp = new WmsOutPickLable(dr);
                        WmsStockRecord wr = new WmsStockRecord(wp.recordId);
                        wr.count = wr.countOuting;
                        wr.countOuting = 0;
                        wr.description = "强制波次完成";
                        wr.operater = this.operater;
                        if(wr.ID>0 && !string.IsNullOrEmpty(wr.orderNo)){
                            wr.Add();
                        }
                        WmsPlate box = new WmsPlate(wp.plate);
                        box.setFree();
                       updatePickingStatus(wp.color, wp.elabId, wp.elabAddress, wp.count, true);
                      // updateValidPickingStatus(wp.color, wp.elabId, wp.elabAddress);
                        
                        if (i == 1)
                        {
                            updateValidPickingStatus(wp.dpsOrder);
                        }
                    }
                    i++;
                }
                cmdParameters[0] = (int)DeiNiu.Utils.enumPickState.已拣;
                CustOper(710);
                return;
            }
            cmdParameters[0] = (int)DeiNiu.Utils.enumPickState.已拣;
            CustOper(700);
           //   return waveOrder;
        }
        public void finishPartPickingData(int part,bool isForce)
        {
             
            cmdParameters[0] = (int)DeiNiu.Utils.enumPickState.已拣;
            cmdParameters[1] = part;
            if (isForce)
            {
                if (WmsConstants.OUT_STOCK_DEDUCT) //处理库存
                {
                    DataTable dt = getPartPickList(part).Tables[0];
                    WmsOutPickLable wp;
                    int i = 0;
                    foreach (DataRow dr in dt.Rows)
                    {
                        i++;
                        wp = new WmsOutPickLable(dr);
                        WmsStockRecord wr = new WmsStockRecord(wp.recordId);
                        wr.count = wr.countOuting;
                        wr.countOuting = 0;
                        wr.description = "强制波次完成";
                        wr.operater = this.operater;
                        wr.Add();
                        updatePickingStatus(wp.color, wp.elabId, wp.elabAddress, wp.count, true);
                        //  updateValidPickingStatus(wp.color, wp.elabId, wp.elabAddress);
                        if (i == 1)
                        {
                            updateValidPickingStatus(wp.dpsOrder);
                        }
                    } 
                 
                    i++;
                }
                CustOper(711);
                return;
            }
            CustOper(701);
              
        }
        public void finishCurrentPickingData(string waveOrder,bool isForce)
        { 
            cmdParameters[0] = waveOrder;
            cmdParameters[1] = "";
            if (isForce)
            {
                cmdParameters[1] = "强制结束";
            }
           
            CustOper(720);
             
        }
        public DataSet getData4Pick(string waveOrder)
        {
            cmdParameters[0] = waveOrder;
            return CustQuery(800);
        }
       
        /// 
        /// 取未拣选完毕的数据
        /// 
        /// 
        public DataSet getPickedData(enumPickState state)
        {
            cmdParameters[0] =(int) state;
            return CustQuery(900);
        }
        /// 
        /// 取分区亮灯数据
        /// 
        /// 
        public DataSet getPartPickedData(enumPickState state)
        {
            cmdParameters[0] = (int)state;
            return CustQuery(901);
        }
        /// 
        /// 第三方当前波次数据
        /// 
        /// 
        public DataSet getCurrentWavePick()
        {
            
            return CustQuery(403);
        }
        public DataTable getPartsPickList(int[] parts, enumPickState enumPickState)
        {
            string p = "";
           
            if (parts.Length > 0)
            {
                p = "(";
                foreach (int s in parts)
                {
                    p += s + ",";
                }
                p = p.Substring(0, p.Length - 1);
                p += ")";
            }
            cmdParameters[0] = (int)state;
            cmdParameters[1] = p;
            return CustQuery(902).Tables[0];
        }
        public DataTable getPartionRequests(int partion)
        {
            cmdParameters[0] = partion;
            return CustQuery(1000).Tables[0];
        }
        public DataTable getPlateTaskPickList(string plateId, int partion)
        {
            cmdParameters[0] = plateId;
            cmdParameters[1] = partion;
            return CustQuery(1100).Tables[0];  
        }
        public DataTable getPlatePickTaskList4wince(string plateId, int partion)
        {
            cmdParameters[0] = plateId;
            cmdParameters[1] = partion;
            return CustQuery(1200).Tables[0];
        }
        /// 
        /// 返回某区的 top 数量的复核台对应的拣货任务
        /// 
        /// 
        /// 
        /// 
        public DataTable getSeedDesksPickList(int part, enumPickState status)
        {
           
            cmdParameters[0] = part;
            cmdParameters[1] = (int)status;
            cmdParameters[2] = WmsConstants.SEEDS_PART_LIGHT_DESK_CNT; ;
            return CustQuery(905).Tables[0];
        }
    }
}