/// 
///WCF service
///FOR TABLE t_erp_purch
///By wm  
///on 05/10/2023
/// 
  
using System.Collections.Generic;
using System.Data;
using DeiNiu.wms.Data.Model.Wcf ;
using DeiNiu.wms.Data.Model;
using System.Transactions;
using DeiNiu.Utils;
using System;
using DeiNiu.Wcf.erp.wcfData;
namespace DeiNiu.Wcf
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名 。
    public class T_ERP_PURCH :baseSvc, IErp_purch ,IOrder
    {
        #region options
      /*: basicService, 
        private static  lErp_purch  _lErp_purch ;
         lErp_purch  lErp_purchObj
        {
            get
            {
                if ( _lErp_purch  == null ||   _lErp_purch.operId != getOperId())
                {
                     _lErp_purch= new  lErp_purch(getOperId());
                }
                return  _lErp_purch;
            }
        }
       */
       #endregion 
        public Result add(ErpPurch obj)
        {
            log.Debug("新增销售单 --->" + obj.pur_order);
            using (TransactionScope scope = new TransactionScope())
            {
                try
                {
                    if (obj == null || obj.ErpPurchDetails == null)
                    {
                        throw new ArgumentNullException("非法的参数格式;订单明细不能为空");
                    }
                    foreach (WcfErp_purch_d d in obj.ErpPurchDetails)
                    {
                        d.getDbObject().Add();
                    }
                    obj.wms_state = 0;
                   int id= obj.getDbObject().Add();
                    scope.Complete();
                    return new Result(id,enumDbResult.成功);
                }
                catch (ConstraintException ex)
                {
                    log.Error(ex);
                    return new Result( enumDbResult.记录已存在,ex.Message);
                }
                catch (Exception er)
                {
                    log.Error(er);
                    return new Result(enumDbResult.失败, er.Message);  
                }
            }
             
            
        }
        public enumDbResult update(WcfErp_purch obj)
        {
            Erp_purch purchObj = obj.getDbObject();
            if (purchObj.ID <= 0) return enumDbResult.失败;
            Erp_purch tmp = new Erp_purch(purchObj.ID);
            if (!tmp.pur_order.Equals(purchObj.pur_order))
            {
                return enumDbResult.失败;
            }
            if (tmp.wms_state > (int)enumInStockOrderStatus.待收货)
            {
                return enumDbResult.数据状态不允许此操作;
            }
            if (purchObj.Update() == 1)
            {
                return enumDbResult.成功;
            }
            return enumDbResult.成功;
        }
        public enumDbResult delete(WcfErp_purch obj)
        {
            Erp_purch purchObj = obj.getDbObject();
            if (purchObj.ID <= 0) return enumDbResult.失败;
            Erp_purch tmp = new Erp_purch(purchObj.ID);
         
            if (tmp.wms_state > (int)enumInStockOrderStatus.待收货)
            {
                return enumDbResult.数据状态不允许此操作;
            }
            return obj.getDbObject().Delete()>0? enumDbResult.成功: enumDbResult.失败;
        }
         #region options
       /*
        public List updateList(List objs)
        {
             
            List results = new List();
           // using (TransactionScope scope = new TransactionScope())
            {
                foreach (WcfErp_purch obj in objs)
                {
                    Result rs = new Result(obj.id, obj.getDbObject().Update());
                    results.Add(rs);
                }
              //  scope.Complete();
            }
            return results;
        }
        public List addList(List objs)
        {
            List results = new List();
           // using (TransactionScope scope = new TransactionScope())
            {
                foreach (WcfErp_purch obj in objs)
                {
                    Result rs = new Result( obj.getDbObject().Add(),1);
                    results.Add(rs);
                }
              //  scope.Complete();
            }
            return results;
        }
        public List deleteList(List objs)
        {
            List results = new List();
           // using (TransactionScope scope = new TransactionScope())
            {
                foreach (WcfErp_purch obj in objs)
                {
                    Result rs = new Result(obj.id, obj.getDbObject().Delete());
                    results.Add(rs);
                }
              //  scope.Complete();
            }
            return results;
        }*/
  #endregion 
       public ErpPurch getObj(int Id)
        {
            log.Debug("读取采购入库单 by ID --->" + Id);
            Erp_purch dbObj = new Erp_purch(Id);
            ErpPurch obj = new ErpPurch(dbObj);
            obj.ErpPurchDetails = getLst(obj.pur_order);
            return obj;
        }
        public ErpPurch getOrder(string orderNo)
        {
            log.Debug("读取采购入库单 by orderNo --->" + orderNo);
            Erp_purch dbObj = new Erp_purch(orderNo);
            ErpPurch obj = new ErpPurch(dbObj);
            obj.ErpPurchDetails = getLst(obj.pur_order);
            return obj;
        }
        List getLst(string orderNo)
        {
            List lstwcf = new List();
            List< Erp_purch_d> lst = new  Erp_purch_d().getList(orderNo);
            foreach ( Erp_purch_d d in lst)
            {
                lstwcf.Add(new WcfErp_purch_d().getWcfObject(d));
            }
            return lstwcf;
        }
        public WcfErp_purchList query(string condition, int pageno)
        {
            log.Debug("读取采购入库单 by condition --->" + condition + ",pageNo " + pageno);
            condition = filterRisk(condition);
            WcfErp_purchList objLst = new WcfErp_purchList();
            List lst = new List();
              Erp_purch dbObj = new   Erp_purch();
            dbObj.rownumStart =(Convert.ToInt16(  pageno)-1)*  WmsConstants.PAGER_SIZE;
            dbObj.rownumEnd = dbObj.rownumStart + DeiNiu.Utils.WmsConstants.PAGER_SIZE;
            try
            {
                DataSet ds = dbObj.Query(condition);
                if (ds.Tables.Count > 1)
                {
                    DataTable dt = ds.Tables[0];
                    foreach (DataRow dr in dt.Rows)
                    {
                        lst.Add(new WcfErp_purch(dr));
                    }
                    objLst.rows = Convert.ToInt32(ds.Tables[1].Rows[0][0].ToString());
                }
                objLst.list = lst;
                objLst.page = Convert.ToInt16(pageno);
                objLst.pageSize = WmsConstants.PAGER_SIZE;
                objLst.pageCnt = objLst.rows / WmsConstants.PAGER_SIZE;
            }
            catch (Exception er)
            {
                objLst.error = er.Message;
            } 
            
            return objLst;
        }
        /*
        public enumDbResult delete(string orderNo)
        {
         
            Erp_purch tmp = new Erp_purch(orderNo);
            if (tmp.wms_state > (int)enumInStockOrderStatus.待收货)
            {
                return enumDbResult.数据状态不允许此操作;
            } 
            if (tmp.deleteOrder(orderNo))
            {
                return enumDbResult.成功;
            }
            return enumDbResult.失败; 
        }
        */
        public List getInStockDetail(string preInOrder)
        {
            List lst = new List();
            Erp_receiveValidDetail dbObj = new Erp_receiveValidDetail();
            DataTable dt = dbObj.getDetailByOrder(preInOrder);
            foreach (DataRow dr in dt.Rows)
            {
                lst.Add(new WcfErp_receiveValidDetail(dr));
            }
            return lst;
        }
        public Result complete(string orderNo)
        {
            Erp_purch tmp = new Erp_purch(orderNo);
            if(tmp.ID == 0)
            {
                return new Result( " 不存在订单 " +orderNo );
            }
            if (tmp.wms_state < (int)enumInStockOrderStatus.已入库)
            {
                return new Result(enumDbResult.数据状态不允许此操作);
            }
            tmp.updateStockStatus(orderNo, enumInStockOrderStatus.完结回传ERP, enumReceiveStockDetailStatus.完结回传ERP,LoginInfo.UserId);
            if (tmp.deleteOrder(orderNo))
            {
                return new Result(enumDbResult.成功);
            }
            return new Result(enumDbResult.失败);
        }
        public Result cancel(string orderNo)
        {
            Erp_purch tmp = new Erp_purch(orderNo);
            if (tmp.wms_state > (int)enumInStockOrderStatus.已入库)
            {
                return new Result(enumDbResult.数据状态不允许此操作);
            }
 
            if (tmp.deleteOrder(orderNo))
            {
                return new Result(enumDbResult.成功);
            }
            return new Result(enumDbResult.失败);
        }
 
    }
 }