/// 
///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 DataSet QueryByState(DeiNiu.Utils.enumOutStockRequestStatus state)
        {
            cmdParameters[0] = (int)state;
            return  CustQuery(200);
        }
        /// 
        /// 出库请求原始单详情
        /// 
        /// 
        public DataSet getRequestDetail()
        {
            cmdParameters[0] = this.orderNo;
            return CustQuery(300);
        }
        /// 
        /// 出库单详情(根据货物id,批号合并原始单明细)
        /// 
        /// 
        public DataSet getOutDetail()
        {
            cmdParameters[0] = this.orderNo;
            return CustQuery(400);
        }
        /// 
        /// 待出库新订单
        /// 
        /// 
        public DataSet getNewOrders()
        { 
            return CustQuery(600);
        }
        /// 
        /// 拉取erp订单
        /// 
        /// 
        public int syncOutRequest()
        {
            return CustOper(500);
        }
        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.enumOutOrderType 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)
        {
            cmdParameters[0] = custID;
            cmdParameters[1] = custName;
            cmdParameters[2] = custAddress;
            cmdParameters[3] = pickOrderNo;
            cmdParameters[4] =  string.IsNullOrEmpty(pickOrderNo) ? (int)Utils.enumOutStockRequestStatus.准备合并 //new state
                               : (int)Utils.enumOutStockRequestStatus.等待分拣; 
            cmdParameters[5] = string.IsNullOrEmpty(pickOrderNo) ? (int)enumOutStockRequestStatus.等待分拣  //old state
                                : (int)enumOutStockRequestStatus.准备合并; ;
            cmdParameters[6] = operater; 
            CustOper(1200);
        }
        /// 
        /// 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)
            {
                throw er;
            }
        }
    }
}