/// 
///INTERFACE CLASS FOR TABLE t_wmsOutSeeds
///By wm  
///on 08/27/2018
/// 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using DeiNiu.wms.win;
using System.Transactions;
using DeiNiu.Utils;
namespace DeiNiu.wms.Data.Model
{
    [Serializable]
    public class WmsOutSeeds : WmsOutSeeds_base
    {
        public WmsOutSeeds()
        {
        }
        public WmsOutSeeds(int id): base(id)
        {
        }
        public WmsOutSeeds(DataRow dr): base(dr)
        {
        }
      protected override void getImp()
        {
            model_imp = new WmsOutSeeds_Imp();  
        }
        //begin cust db operation, query, excute sql etc.
        public DataSet QueryByName(string name)
        {
            cmdParameters[0] = name;
            return  CustQuery(100);
        }
        public DataTable getSeedItemsDt(int deskId, string seedsNo, string barcode)
        {
            cmdParameters[0] = deskId;
            cmdParameters[1] = seedsNo;
            cmdParameters[2] = barcode;
            return CustQuery(200).Tables[0];
           
        }
        public bool startSeeds( int deskId,string seedsNo)
        {
             try
                 { 
                     using (TransactionScope scope = new TransactionScope())
                     { 
                          cmdParameters[0] = deskId;
                          cmdParameters[1] = seedsNo;
                          CustOper(300);  
                          scope.Complete();
                         return true;
                     }
                    
                 }
                 catch (Exception er)
                 {
                     LogHelper.WriteLog(typeof(WmsOutSeeds), er); 
                  
                      throw er;
                 }
             }
          
        public List getSeedItems(int deskId, string seedsNo, string barcode)
        { 
            DataTable dt = getSeedItemsDt( deskId,   seedsNo,   barcode);
            List r = new List();
            foreach (DataRow dr in dt.Rows)
            { 
                WmsOutSeeds ws = new WmsOutSeeds(dr);
                r.Add(getSeedItemsWcfObject(ws));  
            }
            return r;
        }
        public List getSeedLabels(int deskId, string seedsNo, string barcode)
        {
            DataTable dt = getSeedItemsDt(deskId, seedsNo, barcode);
            List r = new List();
            foreach (DataRow dr in dt.Rows)
            {
                WmsOutSeeds ws = new WmsOutSeeds(dr); 
                r.Add(getElabel(ws));
            }
            return r;
        }
        ELabel getElabel(WmsOutSeeds dbObj)
        {
            ELabel el = new ELabel();
            el.count = Convert.ToInt16(dbObj.count);
            el.address = dbObj.elabAddress;
            el.port = dbObj.port;
            el.color = dbObj.color;
            el.labelId = dbObj.elabId;
            el.color = el.color > 0 ? el.color : 1;
            el.seedsId = dbObj.ID;
            return el;
        }
        SeedsItem getSeedItemsWcfObject(WmsOutSeeds dbObj)
        {
            SeedsItem wcfObj = new SeedsItem();
            wcfObj.deskId = dbObj.deskId;
            wcfObj.seedsNo = dbObj.seedsNo;
            wcfObj.custOrder = dbObj.custOrder;
            wcfObj.barcode = dbObj.barcode;
            wcfObj.elabId = dbObj.elabId;
            wcfObj.port = dbObj.port;
            
            wcfObj.itemName = dbObj.itemName;
            wcfObj.count = Convert.ToInt16(dbObj.count);
            wcfObj.unit = dbObj.unit;
            return wcfObj;
        }
 
      
        /// 
        /// 按灭播种墙的灯
        /// 
        /// [t_wmsOutSeeds_tmp].id
        /// 
        /// 
        internal int pickSeedItem(int seedsId, enumSeedsState status)
        {
            cmdParameters[0] = seedsId;
            cmdParameters[1] = (int)status;
            return CustOper(400);
        }
        /// 
        /// 点亮灯后,更新状态
        /// 
        /// 
        /// 
        /// 
        internal int lightSeeds(string seedsNo, enumSeedsState status)
        {
            cmdParameters[0] = seedsNo;
            cmdParameters[1] = (int)status;
            return CustOper(401);
        }
        internal DataTable getValidSeed(int deskId, string seedsNo, string barcode)
        {
            cmdParameters[0] = deskId;
            cmdParameters[1] = seedsNo;
            cmdParameters[2] = barcode;
            return CustQuery(201).Tables[0];
        }
    }
}