/// 
///INTERFACE CLASS FOR TABLE t_erp_sale
///By wm  
///on 06/22/2018
/// 
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 Erp_sale : Erp_sale_base
    {
        public Erp_sale()
        {
        }
        public Erp_sale(int id): base(id)
        {
        }
        public Erp_sale(DataRow dr): base(dr)
        {
        }
        public Erp_sale(String orderNo) 
         {
             cmdParameters[0] = orderNo;
             getModel(100);
         }
      protected override void getImp()
        {
            model_imp = new Erp_sale_Imp();  
        }
      public void getByPickOrder(string pickOrderNo)
      {
          cmdParameters[0] = pickOrderNo;
          getModel(150);
      }
        //begin cust db operation, query, excute sql etc.
        public DataSet QueryByName(string name)
        {
            cmdParameters[0] = name;
            return  CustQuery(100);
        }
        public DataTable getDetailByPickOrder(string pickOrderNo)
        {
            cmdParameters[0] = pickOrderNo;
          return CustQuery(600).Tables[0];
        }
        public DataTable getSaleOrdersByPickOrder(string pickOrderNo)
        {
            cmdParameters[0] = pickOrderNo;
            return CustQuery(150).Tables[0];
        }
        public List getObjs(DataTable dt)
        {
            List lst = new List();
            foreach(DataRow dr in dt.Rows)
            {
                lst.Add(new Erp_sale(dr));
            }
            return lst;
        }
        /// 
        /// 同步新销售订单前
        /// 记录临时数据
        /// 同步后更新erp_sale 表,并删除临时数据
        /// 
        /// 
        public int prepareSaleInTmpData()
         { 
             return CustOper(200); 
         }
   
        public bool deleteSales(string orderNo)
        {
            cmdParameters[0] = orderNo;
            return CustOper(101) > 0;
        }
        
        /// 
        /// 同步新销售订单前
        /// 记录临时数据
        /// 同步后更新erp_sale 表,并删除临时数据
        /// 
        /// 
       /* public int syncSaleOrdersBefore(enumOutStockRequestStatus wmsStatus)
        {
            cmdParameters[0] = operater;
            cmdParameters[1] = (int)wmsStatus;
            return CustOper(201); 
        }
         */
        public int syncSaleOrdersAfter(enumOutStockRequestStatus wmsStatus)
        {
            cmdParameters[0] = operater;
            cmdParameters[1] = (int)wmsStatus;
            return CustOper(202);
        }
        public int updatePickStatus(string pickOrderNo, Utils.enumOutStockRequestStatus rstateNew)//, Utils.enumOutStockRequestStatus rstateOld)
        {
            //find sale orders
            WmsOutRequest wor = new WmsOutRequest();
            DataTable dt =  wor.getRequestByPickOrder(pickOrderNo);
            LogHelper.debug(typeof(Erp_sale), " try updatePickStatus , sales order cnt " + dt.Rows.Count);
            if (dt.Rows.Count == 0)
            {
                return 0;
            }
            string saleOrders = "";
            foreach (DataRow dr in dt.Rows)
            {
                wor = new WmsOutRequest(dr);
                
             
                saleOrders +="'"+ wor.orderNo + "',";
            }
            LogHelper.debug(typeof(Erp_sale), " try updatePickStatus , saleOrders: " + saleOrders);
            saleOrders = saleOrders.Substring(0, saleOrders.Length - 1);
            if (dt.Rows.Count > 1)
            { 
                saleOrders = " where sale_order in (" + saleOrders + ")";
            }
            else
            {
                saleOrders = " where sale_order = " + saleOrders ;
            }
            cmdParameters[0] = operater; 
            cmdParameters[1] = saleOrders;
            cmdParameters[2] =(int) rstateNew;
           cmdParameters[3] = pickOrderNo;
            return CustOper(300); 
        }
        public DataSet getPickOutDetailSum(string queryStr, int rowStart, int rowEnd)
        {
            if (rowEnd > rowStart && rowStart > 0)
            {
                this.rownumStart = rowStart;
                this.rownumEnd = rowEnd;
            }
            cmdParameters[0] = getCondition(queryStr);
            return CustQuery(900);
        }
        public DataSet getPickOutDetail(string queryStr, int rowStart, int rowEnd)
        {
            if (rowEnd > rowStart && rowStart > 0)
            {
                this.rownumStart = rowStart;
                this.rownumEnd = rowEnd;
            }
            cmdParameters[0] = getCondition(queryStr);
            return CustQuery(800);
        }
        public int updateWhType(string orderNo, int whType,enumOutStockRequestStatus status)
        {
            cmdParameters[0] = orderNo;
            cmdParameters[1] = whType;
            cmdParameters[2] = (int)status;
            return CustOper(400);
        }
        public void updateCreatetime()
        {
            cmdParameters[0] = _sale_order;
            CustOper(500);
        }
        public DataTable getByErpState()
        {
            cmdParameters[0] =(int)enumErpOrderStatus.通知失败;
            cmdParameters[1] = (int)enumOutStockRequestStatus.已装车;
            return CustQuery(700).Tables[0];
        }
        /// 
        /// 出入库状态看板数据
        /// 
        /// 
        public DataSet getKanBanOrdersByState()
        {
            return CustQuery(1000);
        }
    }
}