/// 
///LOGIC CLASS FOR TABLE t_wmsGoods
///By wm with codesmith. 
///on 05/04/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.Data.BaseObject;
namespace DeiNiu.wms.Logical
{
    [Serializable]
    public class lWmsGoods  :lbase
    {
        WmsGoods _obj;
        public lWmsGoods()
        {
             initialize();
        }
        public lWmsGoods(int operId):base(operId)
        {
            initialize();
        }
        public  WmsGoods getWmsGoods
        {
            get
            {
                if(_obj == null)
                {
                    _obj = new WmsGoods();
                }
                return _obj;
            }
        }
  
		/// 
		/// get all data
		/// 
        public DataSet getAllData()
        {
           return _obj.Query();
        }
        /// 
        /// get all data
        /// 
        public DataSet getAllActiveData()
        {
            return _obj.QueryActived();
        }
		/// 
		/// get a record by id
		/// 
        public void initialize(int id)
		{
            _obj = id != 0 ? new WmsGoods(id) : new WmsGoods();
		}
        /// 
		/// get a record by id 0
		/// 
        public void initialize()
        { 
            initialize(0);
        }
         ///  
        /// get a record by id
        /// 
        public void initialize(DataRow dr)
        {
            _obj =   new WmsGoods(dr);
        }
 
        //begin cust db operation, query, excute sql etc.
        
     
        /*
         /// 
        ///  query with like, return talbe and record cnt.
        /// 
        public DataSet Query(string querystr, int rownumStart, int rownumEnd)
        {
            if (rownumEnd > rownumStart && rownumStart > 0)
            {
                _obj.rownumStart = rownumStart;
                _obj.rownumEnd = rownumEnd;
            }
            
           
            //if (string.IsNullOrEmpty(querystr))
            //{
            //    return _obj.Query();
            //}
            string condition = "";
            string[] parameters = querystr.Split(";".ToCharArray());
            foreach (string value in parameters)
            {
                if (string.IsNullOrEmpty(value))
                {
                    continue;
                }
                string[] par = value.Split("#".ToCharArray());
                condition += par.Length == 0 ? "" : " and ";
                foreach (string p in par)
                {
                    condition += p;
                }
            }
            return _obj.Query(condition);
        }  */
        /// 
        /// update in a transaction scrop
        /// 
        public void update(List goods)
        {
            if (valid())
            { 
                using (TransactionScope scope = new TransactionScope())
                {
                    foreach (WmsGoods good in goods)
                    {
                        good.Update();
                       
                    }
                    _obj = goods[goods.Count - 1];
                    scope.Complete();
                }
            }
        }
        private bool valid()
        {
            return true;
        }
        protected override BaseModel getModel()
        {
            return _obj;
        }
        internal DataTable QueryPacking(string goodsId)
        {
            return _obj.queryPacking(goodsId);
        }
        public void updatePackInfo(int id, string goodsId, string barcode, int packingQty, string manufacturer2, string spec, decimal chang, decimal kuan, decimal gao, decimal weight, int statckLayers, int stackLayNums, bool isDelete)
        {
            Erp_packing packing = new Erp_packing(id);
            if (isDelete)
            {
                packing.Delete();
                return;
            }
            DataTable dt = getWmsGoods.getGoodsDetailBybarcode(barcode);
            if (dt.Rows.Count > 0)
            {
                string gdid=  dt.Rows[0]["goodsId"].ToString().Trim();
                if(!goodsId.Trim().ToUpper().Equals(gdid.Trim().ToUpper()))
                  throw new Exception("条码 " + barcode + " 已关联商品 " + dt.Rows[0]["goodsId"].ToString());
            }
            packing.barcode = barcode.Replace("\r\n", "").Replace("\n", "");
            packing.goodsId = goodsId;
            packing.weight = weight;
            packing.chang = chang;
            packing.kuan = kuan;
            packing.gao = gao;
            packing.weight = weight;
            packing.spec = spec;
            packing.manufacturer2 = manufacturer2;
            packing.stackLayers = statckLayers;
            packing.stackLayNums = stackLayNums;
            packing.packingQty = packingQty;
            ErpGoods eg = new ErpGoods(goodsId);
            eg.bigCount = packingQty;
            packing.packingUnit = eg.unit;
            WmsGoods wg = new WmsGoods(goodsId);
            wg.bigCount = packingQty;
            log.Debug("update goods big count to " + packingQty);
            using (TransactionScope scope = new TransactionScope())
            {
                if (id > 0)
                {
                    packing.Update();
                }
                else
                {
                    packing.Add();
                }
                eg.Update();
                wg.Update();
                scope.Complete();
            }
        }
        internal void goodsMaintain(string goodsId,decimal fullMax, decimal bulkMax, decimal batch1Max, decimal batch2Max, decimal batch3Max, int ABC, int storeType, string barcode, int expiredDays, bool canSeedOut)
        {
            barcode= barcode.Replace("\r\n", "").Replace("\n", "");
            WmsGoods goods = new WmsGoods(goodsId);
            if (bulkMax > 0)
                goods.bulkMax = bulkMax;
            if (batch1Max > 0)
                goods.batchMax1 = batch1Max;
            if (batch2Max > 0)
                goods.batchMax2 = batch2Max;
            if (batch3Max > 0)
                goods.batchMax3 = batch3Max;
            if (fullMax > 0)
                goods.full_max = fullMax;
            if (ABC > 0)
                goods.ABC = ABC;
            if (storeType > 0)
                goods.part = storeType;
          //  if (bigCount > 0)
            //    goods.bigCount = bigCount;
            ErpGoods erpgd = new ErpGoods(goodsId);
            using (TransactionScope scope = new TransactionScope())
            {
                if (erpgd.expiryDays != expiredDays)
                {
                    erpgd.barCode = barcode;
                    erpgd.expiryDays = expiredDays;
                    erpgd.Update();
                }
                if (erpgd.barCode != barcode)
                {
                    if (!string.IsNullOrEmpty(barcode))
                    {
                        DataTable dt = getWmsGoods.getGoodsDetailBybarcode(barcode);
                        if (dt.Rows.Count > 0)
                        {
                            string gdid = dt.Rows[0]["goodsId"].ToString().Trim();
                            if (!goodsId.Trim().ToUpper().Equals(gdid.Trim().ToUpper()))
                                throw new Exception("条码 " + barcode + " 已关联商品 " + dt.Rows[0]["goodsId"].ToString());
                        }
                        Erp_packing packing = new Erp_packing(barcode);
                        if (packing.ID == 0)
                        {
                            packing.barcode = barcode;
                            packing.goodsId = goodsId;
                            packing.packingQty = goods.bigCount; 
                            packing.Add();
                        }
                       
                    }
                }
                goods.canSeedOut = canSeedOut;
                goods.barcode = barcode;
                goods.expiryDays = expiredDays;
                goods.Update();
                scope.Complete();
            }
         
        }
        internal DataTable queryByKeyWords(string keywords)
        {
           return getWmsGoods.queryByKeyWords(keywords);
        }
    }
    
    
}