using System.Data;
using DeiNiu.Utils;
using DeiNiu.wms.Data.Model;
using DeiNiu.wms.Logical;
namespace DeiNiu.Wcf
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“LocationService”。
    public class StockLocationService : basicService, IStockLocationService
    {
        private static lWmslocation _loc;
        private static lWmsStock _stock;
        private static lWmsStockPandian _pandian;
        lWmsStockPandian pandian
        {
            get
            {
                if (_pandian == null || _pandian.operId != getOperId())
                {
                    _pandian = new lWmsStockPandian(getOperId());
                }
                return _pandian;
            }
        }
        lWmsStock stock
        {
            get
            {
                if (_stock == null || _stock.operId != getOperId())
                {
                    _stock = new lWmsStock(getOperId());
                }
                return _stock;
            }
        }
        lWmslocation loc
        {
            get
            {
                if (_loc == null || _loc.operId != getOperId())
                {
                    _loc = new lWmslocation(getOperId());
                }
                return _loc;
            }
        }
        public void addLocations(Structs locs)
        {
            loc.addLocations(locs);
        }
        public bool updateWhLocations(int[] ids, Structs locs)
        {
           return loc.updateWhLocations(ids, locs);
        }
        public bool updateSizeLocations(int[] ids, Structs locs)
        {
           return loc.updateSizeLocations(ids, locs);
        }
        public bool updateLocationTranLines(int[] ids, Structs locs)
        {
            return loc.updateLocationTranLines(ids, locs);
        }
        public bool updateLocationABC(int[] ids, Structs locs)
        {
            return loc.updateLocationABC(ids, locs);
        }
        public bool updateLocationStoreType(int[] ids, Structs locs)
        {
            return loc.updateLocationStoreType(ids, locs);
        }
        
        public bool updateLocationLabelId(int[] ids, Structs locs)
        {
            return loc.updateLocationLabelId(ids, locs);
        }
        public bool updateLocationStatus(int[] ids, int status)
        {
            return loc.updateLocationStatus(ids, status);
        }
        public bool updateLocationOwner(int[] ids, Structs locs)
        {
            return loc.updateLocationOwner(ids, locs);
        }
        public DataSet Query(string querystr, int rownumStart, int rownumEnd)
        {
            return loc.Query(querystr, rownumStart, rownumEnd);
        }
        public DataSet QueryNodes(DataTable dic, string query, int rownumStart, int rownumEnd)
        {
            return loc.Query(dic, query, rownumStart, rownumEnd);
        }
        public DataTable getStockRecord(string orderNo)
        {
            return stock.wmsStock.getStockRecord(orderNo);
        }
        public DataSet getStockDiff(string querystr, int rownumStart, int rownumEnd)
        {
            return stock.wmsStock.getStockDiff(querystr, rownumStart, rownumEnd);
        }
        public DataTable getWmsStockDetails(string goodsId,int skuId,string extrQuery)
        {
            return stock.wmsStock.getWmsStockDetails(goodsId,skuId, extrQuery);
        }
        public DataTable getStockFreeLocations(string goodsId, int count)
        {
            return stock.wmsStock.getFreeStockLocations(goodsId, count);
        }
        public int upDownStockLocation(string locId, string goodsId, int skuId, string batch, string reason, decimal count, int type)
        {
            return (int)stock.upDownGoodsCountWithLocation(locId, goodsId, skuId, batch, count, reason, (enumStockRecordType)type, -1);
        }
        public DataSet getDataWaiting4Maintain(string query,int start,int end)
        {
            return new WmsStockMaintain().getDataWaiting4Maintain(query,  start,  end);
        }
        /// 
        /// 养护记录
        /// 
        /// 
        /// 
        public DataSet getDataMaintainRecords(string query,int start,int end) 
        {
            return new WmsStockMaintain().getDataMaintainRecords(query,  start,  end);
        }
        /// 
        /// 临近有效期列表
        /// 
        /// 
        /// 
        public DataSet getDataNearValid(int days, int start, int end)
        {
            return new WmsStockMaintain().getDataNearValid(days,  start,  end);
        }
        /// 
        /// 失效药品
        /// 
        /// 
        /// 
        public DataSet getDataInvaild( int start,int end)
        {
            return new WmsStockMaintain().getDataInvaild(  start, end);
        }
        public int updateJobCross(int[] ids, bool isCross)
        {
          return  loc.updateLocJobCross(ids, isCross);
        }
        public DataSet queryStockGoods(string queryStr, int start, int end)
        {
            return stock.Query(queryStr, start, end);
        }
        public DataSet querySumStockGoods(string queryStr, int start, int end)
        {
            return stock.wmsStock.QuerySum(queryStr, start, end);
        }
        public DataSet querySumStockGoodsNoBatch(string querystr, int rownumStart, int rownumEnd)
        {
            return stock.wmsStock.QuerySumNoBatch(querystr, rownumStart, rownumEnd);
        }
        public DataSet queryBulkRep(string queryStr, int start, int end)
        {
            return stock.wmsStock.QueryBulkRep(queryStr, start, end);
        }
        public bool createGoodsRepOrder(string[] goodsRep)
        {
            return new lWmsOutRequest(getOperId()).createGoodsRepOrder(goodsRep);
        }
        public DataTable getLocationsUsedPercent()
        {
            return loc.getLocationsUsedPercent();
        }
        public DataSet queryStockRecords(string querystr, int rownumStart, int rownumEnd)
        {
            return stock.wmsStock.queryStockRecords(querystr, rownumStart, rownumEnd);
        }
        public void initalSkus(bool isDownOnly,int start)
        {
            stock.initialSkus(  isDownOnly,start);
        }
        //-----------------------盘点-------------------------------------------------------
        public bool createPandianOrder(int panType, bool noticeErp, int createBy, string inputValues, string stockCondition)
        {
              pandian.createPanOrder(panType, noticeErp, createBy, inputValues, stockCondition);
              return true;
        }
        public bool startPandianOrder(string orderNo)
        {
            return pandian.startPandian(orderNo);
        }
        public bool canStartNewPandian()
        {
            return pandian.canStartNewPandian();
        }
        public DataSet queryPandianOrders(string queryStr, int start, int end)
        {
            return pandian.Query(queryStr, start, end);
        }
        public bool delPandianOrder(string orderNo)
        {
            return pandian.delPandian(orderNo);
        }
        public DataSet queryPandianBanlanceDetail(string orderNo, string goodsId, int start, int end)
        {
            return pandian.getWmsStockPandian.getPandianBanlanceDetail(orderNo,start,end,goodsId);
        }
        public DataSet queryPandianResult(string orderNo, string goodsId, int start, int end)
        {
            return pandian.getWmsStockPandian.queryPandianResult(orderNo, start, end, goodsId);
        }
        public DataSet queryPandianResultSum(string orderNo, string goodsId, int start, int end)
        {
            return pandian.getWmsStockPandian.queryPandianResultSum(orderNo, start, end, goodsId);
        }
        public DataSet getPandianBanlance(string orderNo, int start, int end)
        {
            return pandian.getWmsStockPandian.getPandianBanlance(orderNo ,start, end);
        }
        public DataTable getPandianOrder(string orderNo)
        {
            return pandian.getWmsStockPandian.getPandianOrder(orderNo);
        }
        public DataTable getPandianTargetItem(string orderNo,string locationId)
        {
            return pandian.getWmsStockPandian.getPandianTargetItem(orderNo, locationId);
        }
        public DataTable getPandianTargetItems(string orderNo )
        {
            return pandian.getWmsStockPandian.getPandianTargetItems(orderNo );
        }
        public bool adjustPandianStock(string orderNo,bool isRollBack )
        {
            return pandian.adjustPandianStock(orderNo, isRollBack);
        }
        public bool finishPandian(string orderNo)
        {
            return pandian.finishPandian(orderNo)  ;
        }
        /// 
        /// 采集完成
        /// 
        /// 
        /// 
        public bool stopPandianPick(string orderNo)
        {
            return pandian.stopPandianPick(orderNo);
        }
        //test only
        public void initalErpSaleSku()
        {
            stock.initialErpSaledSku();
        }
         public void formatLocName()
        { 
             new WmsLocation().formatLocName();
        }
        public bool updateLocScale(int[] ids, Structs locs)
        {
            return loc.updateLocScale(ids, locs);
        }
        public DataSet queryPlateStock(string querystr, int rownumStart, int rownumEnd)
        {
            return stock.wmsStock.queryPlateStock(querystr, rownumStart, rownumEnd);
        }
        public DataTable queryPerformanceKPI(string querystr,bool isSum)
        {
            return stock.wmsStock.queryPerformanceKPI(querystr,isSum);
        }
        public DataTable getElbPartStks(string locationId)
        {
             
            return stock.wmsStock.getElbPartStks(new WmsLocation(locationId).part);
        }
    }
}