/// 
///LOGIC 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 DeiNiu.wms.Data.Model;
using System.Data;
using System.Transactions;
using DeiNiu.Utils;
using System.Threading;
namespace DeiNiu.wms.Logical
{
    [Serializable]
    public class lWmsOutPickRequest : lbase
    {
        WmsOutPickRequest _obj;
        WmsOutDesk _desk;
        WmsOutPickRequest outRequest
        {
            get
            {
                if (_outRequest == null)
                {
                    _outRequest = new WmsOutPickRequest();
                }
                return _outRequest;
            }
        }
        WmsStockRecord stkRecord
        {
            get
            {
                if(_stkRecord == null){
                    _stkRecord = new WmsStockRecord();
                } 
                return _stkRecord;
            }
           
        }
        WmsOutPickLable pickLabelDetail {
            get
            {
                if (_pickLabelDetail == null)
                {
                    _pickLabelDetail = new WmsOutPickLable();
                }
                return _pickLabelDetail;
            }
        
        }
        WmsOutPickPort outPickPort
        {
            get
            {
                if (_outPickPort == null)
                {
                    _outPickPort = new WmsOutPickPort(); ;
                }
                return _outPickPort;
            }
        }
        WmsOutPickPort _outPickPort;
        WmsOutPickRequest _outRequest ;
        WmsStockRecord _stkRecord  ;
        WmsOutPickLable _pickLabelDetail  ;
        WmsOutDesk desk {
            get
            {
                if (_desk == null)
                {
                    _desk = new WmsOutDesk();
                }
                return _desk;
            }
        }
        public lWmsOutPickRequest()
        {
            initialize();
        }
        public lWmsOutPickRequest(int p) :base(p)
        {
            initialize();
        }
        public WmsOutPickRequest getWmsOutPickRequest
        {
            get
            {
                if (_obj == null)
                {
                    _obj = new WmsOutPickRequest();
                }
                return _obj;
            }
        }
        /// 
        /// get all data
        /// 
        public DataSet getAllData()
        {
            return _obj.Query();
        }
        /// 
        ///get pick details
        ///if no pick data,return order details
        /// 
        public DataSet getPickDetails(string orderNo,enumOutOrderType orderType)
        {
            return _obj.getPickDetailByOrder(orderNo,orderType);
        }
        /// 
        /// get all data
        /// 
        public DataSet getAllActiveData()
        {
            return _obj.QueryActived();
        }
        /// 
        /// get a record by id
        /// 
        public void initialize(int id)
        {
            _obj = id != 0 ? new WmsOutPickRequest(id) : new WmsOutPickRequest();
        }
        /// 
        /// get a record by id 0
        /// 
        public void initialize()
        {
            initialize(0);
        }
        /// 
        /// get a record by id
        /// 
        public void initialize(DataRow dr)
        {
            _obj = new WmsOutPickRequest(dr);
        }
        protected override DeiNiu.Data.BaseObject.BaseModel getModel()
        {
            return _obj;
        }
 
        //begin cust db operation, query, excute sql etc.
          
        public DataSet getPickRequest4BulkValidate(object desk)
        {
            DataSet ds = outRequest.getPickRequest4BulkVailidate(desk); 
            DataTable tmp = ds.Tables[0];
            //test for barcode 
            #if DEBUG
                Int64 i =6900000000000;
                foreach (DataRow dr in tmp.Rows)
                {
                    i++;
                    if(string.IsNullOrEmpty(dr["barCode"].ToString())){
                        dr["barCode"] = i;
                    }
                }
             #endif
             
            DataView dv = ds.Tables[0].DefaultView;
            dv.Sort = "waveOrder ASC"; //fifo
            DataTable dt = dv.ToTable(true, "pickOrderNo","orderState","customerName"); // distinct pickOrderNo
            dt.TableName = "tablePickOrderList";
            ds.Tables.Add(dt);
             
            //DataView dv2 = outRequest.getValidationExceptionSolutions(desk).Tables[0].DefaultView;
            //dv2.RowFilter = "state =" + (int)enumOutStockDetailStatus.validatedExceptionSulution ;
            //DataTable dtExceptionSolution = dv.ToTable(); 
            //dtExceptionSolution.TableName = "exsolutions";
            //ds.Tables.Add(dtExceptionSolution);
            //DataTable dtExceptionSolution = outRequest.getValidationExceptionSolutions(desk).Tables[0].Clone(); 
            //dtExceptionSolution.TableName = "exsolutions";
            //ds.Tables.Add(dtExceptionSolution);
             return ds;  
        }
 
        /// 
        /// batch pick orders waiting for out
        /// 
        /// 
        public DataSet getBatchOutPickOrders4Pick()
        {
            DataSet ds = outRequest.getBatchOutPickOrders(enumOutStockRequestStatus.正在分拣, enumOutStockPickStatus.待处理, enumOutStockPickStatus.正在分拣);  
            //DataTable dt = outRequest.getRepRequestDetailsLessThan(enumOutStockPickStatus.复核完成);
          //  DataTable repTable = outRequest.getRequests(enumOutOrderType.repOrderOut, enumOutStockRequestStatus.等待分拣).Tables[0];
            DataView dv = ds.Tables[0].DefaultView;
            dv.RowFilter = "orderType =" + (int) enumOutOrderType.补货单;
            DataTable dt = dv.ToTable();
            dt.TableName = "repOrder";
            ds.Tables.Add(dt); 
            return ds;
        }
        /// 
        /// pick order detail
        /// 
        /// 
        /// 
        public DataSet getBatchOutPickOrderDetails(string pickOrderNo)
        {
            return outRequest.getBatchOutPickOrderDetails(pickOrderNo, enumOutStockDetailStatus.等待分拣, enumOutStockPickStatus.待处理);
        }
        /// 
        /// get batch pick detail by id
        /// 
        /// 
        /// 
        public DataTable getBatchOutPickOrderDetail(int id)
        {
            return outPickPort.getPickDetail(id);
        }
        /// 
        /// batch pick order pick detail
        /// 
        /// 
        /// 
        public DataSet getBatchOutPickOrderPickDetails(string pickOrderNo)
        {
           // return outRequest.getBatchOutPickOrderPickDetails(pickOrderNo,enumOutStockRequestStatus.正在分拣, enumOutStockPickStatus.待处理);
            return outRequest.getBatchOutPickOrderPickDetails(pickOrderNo);
        }
        
        public DataTable getBatchPickOrders4Validate()
        {
            DataTable dt = getWmsOutPickRequest.getBatchPickOrders4Validation();
 
            return dt;
          
        }
        public int getPickCount4valid(string pickOrderNo)
        {
            return outPickPort.getPickDetailsCnt(pickOrderNo, enumPickState.已拣);
        }
        public DataTable repTodayDetails4Pick()
        {
           DataTable dt = getWmsOutPickRequest.getBatchPickOrderDetail(enumOutOrderType.补货单, enumPickState.未拣);
       
           dt.Columns.Remove("状态");
           //dt.Columns.Remove("pickOrderNo");
           dt.Columns.Remove("state");
           dt.Columns.Remove("orderType");
           dt.Columns.Remove("orderDate");
           dt.Columns.Remove("pickCount");
           dt.Columns.Remove("goodsid");
           return dt;
        }
        public DataTable repTodayDetails4In()
        {
            DataTable dt = getWmsOutPickRequest.getBatchPickOrderDetail(enumOutOrderType.补货单, enumPickState.已拣);
            dt.Columns.Remove("货位");
            dt.Columns.Remove("状态"); 
            dt.Columns.Remove("state");
            dt.Columns.Remove("orderType");
            dt.Columns.Remove("orderDate");
            dt.Columns.Remove("pickCount");
            return dt;
     
        }
        //-------------------------out logs----------------------begin---
       private WmsOutLog _outLog;
       WmsOutLog outLog
       {
           get
           {
               if (_outLog == null)
               {
                   _outLog = new WmsOutLog();
               }
               return _outLog;
           }
       }
        public DataTable getOrderLogs(string orderNo, string pickOrderNo)
        {  
            return outLog.getOrderLogs(orderNo,pickOrderNo);
        }
         
        public DataTable getOrderLogs(string orderNo, enumOutOrderType orderType)
        {
            if (orderType == enumOutOrderType.销售订单)
            {
                return outLog.getOrderLogs(orderNo, "");
            }
            else
            {
                return outLog.getOrderLogs("",orderNo);
            }
        }
    }
    
}