Exemple #1
0
        /// <summary>
        /// 注意:此方法是服务自动调用,WEB页面请用Declare
        /// </summary>
        public void AutoDeclare(DateTime endTime, ref StringBuilder failMessage)
        {
            var canUseWarehouses = WMSSao.GetAllCanUseWarehouseDics();

            foreach (var warehouseInfo in canUseWarehouses)
            {
                Guid warehouseId = warehouseInfo.Key;
                if (warehouseId != Guid.Empty)
                {
                    //获取该仓库下的全部进货申报数据
                    var data = WMSSao.GetStockDeclareDtos(warehouseId, new List <Guid>());
                    if (data == null || data.Count == 0)
                    {
                        failMessage.AppendLine(warehouseInfo.Value + "没有可生成的数据!");
                        continue;
                    }
                    var purchasingSets      = _purchaseSet.GetPurchaseSetListByWarehouseId(warehouseId);
                    var realGoodsInfos      = _goodsCenterSao.GetStockDeclareGridList(data.Keys.ToList()).ToDictionary(k => k.RealGoodsId, v => v);
                    var purchasingGoodsDics = _purchasingDetailManager.GetStockDeclarePursingGoodsDicsWithFiliale(warehouseId, new List <Guid>(),
                                                                                                                  new[] { PurchasingState.NoSubmit, PurchasingState.Purchasing, PurchasingState.PartComplete, PurchasingState.StockIn, PurchasingState.WaitingAudit, PurchasingState.Refusing }, data.Keys.ToList());
                    var details = GetDataList(warehouseId, data, purchasingGoodsDics, realGoodsInfos, purchasingSets);
                    if (details.Count == 0)
                    {
                        failMessage.AppendLine(warehouseInfo.Value + "没有可生成的数据!");
                        continue;
                    }
                    failMessage.AppendLine(warehouseInfo.Value + "开始生成采购单!");
                    BuilderPurchasing(details, purchasingSets, warehouseId, null, "进货申报服务", ref failMessage);
                    failMessage.AppendLine(warehouseInfo.Value + "结束生成采购单!");
                }
            }
        }
 protected void Page_Load(object sender, EventArgs e)
 {
     if (!IsPostBack)
     {
         RDP_StartTime.SelectedDate = Convert.ToDateTime(DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd 00:00:00.000"));
         RDP_EndTime.SelectedDate   = DateTime.Now;
         var personinfo = CurrentSession.Personnel.Get();
         var items      = _purchaseSet.GetPersonList();
         foreach (var item in items)
         {
             item.PersonResponsibleName = _personnelSao.GetName(item.PersonResponsible);
         }
         RCB_Pm.DataSource     = items;
         RCB_Pm.DataTextField  = "PersonResponsibleName";
         RCB_Pm.DataValueField = "PersonResponsible";
         RCB_Pm.DataBind();
         if (items.FirstOrDefault(ent => ent.PersonResponsible == personinfo.PersonnelId) != null)
         {
             RCB_Pm.SelectedValue = personinfo.PersonnelId.ToString();
         }
         RCB_Pm.Items.Insert(0, new RadComboBoxItem("负责人列表", Guid.Empty.ToString()));
         var wList = WMSSao.GetWarehouseAuthDics(personinfo.PersonnelId);
         RCB_Warehouse.Items.Insert(0, new RadComboBoxItem("授权仓库列表", Guid.Empty.ToString()));
         RCB_Warehouse.DataSource = wList;
         RCB_Warehouse.DataBind();
         if (wList.Count == 1)
         {
             RCB_Warehouse.SelectedValue = wList.First().Key.ToString();
         }
     }
 }
        /// <summary>
        /// 入库仓Changed事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void DDLWaerhouse_OnSelectedIndexChanged(object sender, EventArgs e)
        {
            Guid warehouseId = string.IsNullOrEmpty(RCB_Warehouse.SelectedValue)
               ? Guid.Empty
               : new Guid(RCB_Warehouse.SelectedValue);

            //获得入库储
            var personinfo    = CurrentSession.Personnel.Get();
            var warehouseAuth = WMSSao.GetSingleWarehouseAndFilialeAuth(personinfo.PersonnelId, warehouseId);
            //获得物流配送公司
            var hlist        = new List <HostingFilialeAuth>();
            var saleFiliales = new List <HostingFilialeAuth>();

            if (warehouseAuth != null)
            {
                foreach (var filialeAuth in warehouseAuth.FilialeAuths)
                {
                    hlist.Add(filialeAuth);
                    foreach (var filiale in filialeAuth.ProxyFiliales)
                    {
                        if (hlist.All(p => p.HostingFilialeId != filiale.ProxyFilialeId) && saleFiliales.All(ent => ent.HostingFilialeId != filiale.ProxyFilialeId))
                        {
                            saleFiliales.Add(new HostingFilialeAuth {
                                HostingFilialeId = filiale.ProxyFilialeId, HostingFilialeName = filiale.ProxyFilialeName
                            });
                        }
                    }
                }
            }
            RCB_Filile.DataSource     = hlist.Union(saleFiliales);
            RCB_Filile.DataTextField  = "HostingFilialeName";
            RCB_Filile.DataValueField = "HostingFilialeId";
            RCB_Filile.DataBind();
            RCB_Filile.Items.Insert(0, new RadComboBoxItem("全部", Guid.Empty.ToString()));
        }
Exemple #4
0
        /// <summary>加载公司,仓库,采购人
        /// </summary>
        private void LoadData()
        {
            //仓库列表
            var warehouseDics = WMSSao.GetWarehouseAuth(CurrentSession.Personnel.Get().PersonnelId);

            if (warehouseDics != null)
            {
                WarehouseAuths = warehouseDics;
                foreach (var warehouseDic in warehouseDics)
                {
                    RCB_Warehouse.Items.Add(new RadComboBoxItem(warehouseDic.WarehouseName, warehouseDic.WarehouseId.ToString()));
                }
                RCB_Warehouse.Items.Insert(0, new RadComboBoxItem("--请选择仓库--", Guid.Empty.ToString()));
            }
            RCB_Warehouse.SelectedIndex = 0;
            //WarehouseId = GlobalConfig.MainWarehouseID;

            RCB_Personnel.DataTextField  = "RealName";
            RCB_Personnel.DataValueField = "PersonnelId";
            RCB_Personnel.DataSource     = PersonnelList;
            RCB_Personnel.DataBind();
            RCB_Personnel.Items.Insert(0, new RadComboBoxItem("全部采购人", Guid.Empty.ToString()));
            RCB_Personnel.SelectedIndex = 0;
            PersonnelId = Guid.Empty;

            var list = _companyCussent.GetCompanyCussentList(CompanyType.Suppliers, Enum.State.Enable).ToList();

            RCB_Company.DataSource     = list;
            RCB_Company.DataTextField  = "CompanyName";
            RCB_Company.DataValueField = "CompanyId";
            RCB_Company.DataBind();
            RCB_Company.Items.Insert(0, new RadComboBoxItem("全部供应商", Guid.Empty.ToString()));
            RCB_Company.SelectedIndex = 0;
            CompanyId = Guid.Empty;
        }
        /// <summary>
        /// 统计需调拨订单
        /// </summary>
        /// <param name="pmId"></param>
        /// <param name="starttime"></param>
        /// <param name="endtime"></param>
        /// <param name="warehouseId"></param>
        /// <returns></returns>
        public IList <GoodsOrderInfo> GetAllocationOrdersList(Guid pmId, DateTime starttime, DateTime endtime, Guid warehouseId)
        {
            IList <GoodsOrderInfo> goodsOrderInfos = new List <GoodsOrderInfo>();
            var orderNeedeGoods = _goodsOrderDetail.GetNeedPurchasingGoodses(warehouseId, pmId, starttime, endtime, new List <int> {
                (int)Enum.OrderState.RequirePurchase
            });

            if (orderNeedeGoods.Count > 0)
            {
                var orderBaseList = _goodsOrderDetail.GetGoodsQuantityDics(warehouseId, starttime, endtime, pmId);
                // 获取商品的可用库存
                Dictionary <Guid, int>     stockQuantitys = WMSSao.GetLackQuantity(warehouseId, orderNeedeGoods.Select(ent => ent.RealGoodsId).Distinct());
                List <NeedPurchasingGoods> details        = GetList(orderNeedeGoods, stockQuantitys);
                var orderNos    = details.Select(ent => ent.OrderNo).Distinct();
                var filialeDics = MISService.GetAllFiliales().ToDictionary(k => k.ID, v => v.Name);
                foreach (var order in orderBaseList.Where(ent => orderNos.Contains(ent.OrderNo)))
                {
                    if (goodsOrderInfos.Any(ent => ent.OrderNo == order.OrderNo))
                    {
                        continue;
                    }
                    goodsOrderInfos.Add(new GoodsOrderInfo
                    {
                        OrderNo       = order.OrderNo,
                        Consignee     = order.Consignee,
                        EffectiveTime = order.EffectiveTime,
                        Memo          = filialeDics.ContainsKey(order.SaleFilialeId) ? filialeDics[order.SaleFilialeId] : "",
                        SaleFilialeId = order.SaleFilialeId
                    });
                }
            }
            return(goodsOrderInfos);
        }
Exemple #6
0
        protected void RGGoodsOrder_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
        {
            var pageIndex  = RGGoodsOrder.CurrentPageIndex + 1;
            var pageSize   = RGGoodsOrder.PageSize;
            int totalCount = 0;
            IList <GoodsOrderInfo> goodsOrderList = new List <GoodsOrderInfo>();
            var authWarehouseList = WMSSao.GetWarehouseAuthDic(CurrentSession.Personnel.Get().PersonnelId);

            if (authWarehouseList != null && authWarehouseList.WarehouseDics != null && authWarehouseList.WarehouseDics.Count > 0)
            {
                var authWarehouseIds = authWarehouseList.WarehouseDics.Select(act => act.Key).ToList();
                goodsOrderList = _goodsOrder.GetOrderList(authWarehouseIds, StartTime, EndTime, SearchGoods, SearchKey, new List <OrderState> {
                    OrderState.RequirePurchase
                }, pageIndex, pageSize, out totalCount);
            }
            else
            {
                RAM.Alert("当前登录人没有授权仓库!");
            }
            TextBoxDate.Text = CountRepeat(goodsOrderList);
            var expression = new GridSortExpression {
                FieldName = "OrderTime", SortOrder = GridSortOrder.Ascending
            };

            RGGoodsOrder.MasterTableView.SortExpressions.AddSortExpression(expression);
            RGGoodsOrder.DataSource       = goodsOrderList;
            RGGoodsOrder.VirtualItemCount = totalCount;
            if (goodsOrderList.Count > 0)
            {
                DicOrderClew = _operationLogManager.GetOperationLogList(goodsOrderList.Select(act => act.OrderId).ToList());
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                AllSourceList             = CacheCollection.Filiale.GetList().ToDictionary(ent => ent.ID, ent => ent.Name);
                RCB_OrderState.DataSource = GetOrderStateList().OrderBy(w => w.Key).ToList();
                RCB_OrderState.DataBind();

                var personinfo = CurrentSession.Personnel.Get();
                var wList      = WMSSao.GetWarehouseAuthDics(personinfo.PersonnelId);
                RCB_Warehouse.DataSource = wList;
                RCB_Warehouse.DataBind();


                var yearlist = new List <int>();
                for (var i = 2007; i <= (DateTime.Now.Year - GlobalConfig.KeepYear); i++)
                {
                    yearlist.Add(i);
                }
                DDL_Years.DataSource = yearlist.OrderByDescending(y => y);
                DDL_Years.DataBind();
                DDL_Years.Items.Add(new ListItem(GlobalConfig.KeepYear + "年内数据", "0"));
                DDL_Years.SelectedValue = "0";

                YearsSelectedIndex();
                BindWebSiteInfo();
            }
        }
Exemple #8
0
        /// <summary>加载赠品商品
        /// </summary>
        private void LoadGiftGoods()
        {
            var goodsGiftList = _goodsCenterSao.GetAllGiftList();
            var result        = WMSSao.BindGift(goodsGiftList.Select(ent => ent.Key));

            foreach (var item in goodsGiftList)
            {
                var goodsStock = result.ContainsKey(item.Key) ? result[item.Key] : 0;
                GoodsGiftList.Items.Add(new RadListBoxItem(item.Value + "  [" + goodsStock + "]", item.Key.ToString()));
            }
        }
Exemple #9
0
        /// <summary>
        /// 加载仓库
        /// </summary>
        private void BindStock()
        {
            var personinfo = CurrentSession.Personnel.Get();
            var result     = WMSSao.GetWarehouseAuthDic(personinfo.PersonnelId);

            WarehouseDic             = result != null && result.WarehouseDics != null ? result.WarehouseDics : new Dictionary <Guid, string>();
            RCB_Stock.DataSource     = WarehouseDic;
            RCB_Stock.DataTextField  = "Value";
            RCB_Stock.DataValueField = "Key";
            RCB_Stock.DataBind();
        }
Exemple #10
0
 protected void Page_Load(object sender, EventArgs e)
 {
     if (!IsPostBack)
     {
         var personnelInfo = CurrentSession.Personnel.Get();
         //获取授权仓库列表
         AuthWarehouses             = WMSSao.GetWarehouseAuthDics(personnelInfo.PersonnelId);
         RDP_StartTime.SelectedDate = DateTime.Now.AddMonths(-1);
         RDP_EndTime.SelectedDate   = DateTime.Now;
     }
 }
        /// <summary>
        /// 根据入库红冲生成的新入库单,创建待处理队列数据
        /// </summary>
        /// <param name="newInDocumentRedId"></param>
        /// <param name="occurTime"></param>
        /// <returns></returns>
        public IEnumerable <RealTimeGrossSettlementProcessQueueInfo> CreateByNewInDocumentAtRed(Guid newInDocumentRedId, DateTime occurTime)
        {
            List <RealTimeGrossSettlementProcessQueueInfo> result = new List <RealTimeGrossSettlementProcessQueueInfo>();

            try
            {
                var newInDocument        = _redDao.GetDocumentRed(newInDocumentRedId);                  // 入库红冲单,对应的新入库单
                var newInDocumentDetails = _redDao.GetDocumentRedDetailListByRedId(newInDocumentRedId); // 入库红冲单,对应的新入库单明细
                if (newInDocument == null || newInDocument.DocumentType != (int)DocumentType.NewInDocument || newInDocument.RedType != (int)RedType.ModifyPriceInRed || newInDocument.State != (int)DocumentRedState.Finished ||
                    newInDocumentDetails == null || newInDocumentDetails.Count == 0)
                {
                    return(result);
                }
                var purchaseStockInRecord  = _storageDao.GetStorageRecord(newInDocument.LinkTradeId);                    // 入库红冲单,对应的原始入库单
                var purchaseStockInDetails = _storageDao.GetStorageRecordDetailListByStockId(newInDocument.LinkTradeId); // 入库红冲单,对应的原始入库单明细
                if (purchaseStockInRecord == null || purchaseStockInRecord.StockType != (int)StorageRecordType.BuyStockIn || purchaseStockInRecord.StockState != (int)StorageRecordState.Finished ||
                    purchaseStockInDetails == null || purchaseStockInDetails.Count == 0)
                {
                    return(result);
                }
                var goodsStockQuantityDict = WMSSao.GetGoodsStockQuantiyByFilialeIdGoodsIds(newInDocument.FilialeId, newInDocumentDetails.Select(m => m.GoodsId).Distinct());
                var lastGoodsUnitPriceDict = GetLatestListByMultiGoods(newInDocument.FilialeId, newInDocumentDetails.Select(m => m.GoodsId).Distinct());
                foreach (var groupByGoodsId in newInDocumentDetails.GroupBy(g => g.GoodsId))
                {
                    var purchaseStockInDetailsByGoodsId = purchaseStockInDetails.Where(m => m.GoodsId == groupByGoodsId.Key);
                    var item = new RealTimeGrossSettlementProcessQueueInfo
                    {
                        QueueId             = Guid.NewGuid(),
                        FilialeId           = newInDocument.FilialeId,
                        GoodsId             = groupByGoodsId.Key,
                        StockQuantity       = goodsStockQuantityDict.ContainsKey(groupByGoodsId.Key) ? goodsStockQuantityDict[groupByGoodsId.Key] : 0,
                        LastGrossSettlement = lastGoodsUnitPriceDict.ContainsKey(groupByGoodsId.Key) ? lastGoodsUnitPriceDict[groupByGoodsId.Key] : null,
                        RelatedTradeType    = (int)RealTimeGrossSettlementRelatedTradeType.StockInFormDashAtRed,
                        RelatedTradeNo      = newInDocument.TradeCode,
                        GoodsQuantityInBill = groupByGoodsId.Sum(m => Math.Abs(m.Quantity)),
                        GoodsAmountInBill   = groupByGoodsId.Sum(m => Math.Abs(m.UnitPrice * m.Quantity)),                  // 红冲单金额
                        ExtField_1          = purchaseStockInDetailsByGoodsId.Sum(m => Math.Abs(m.UnitPrice * m.Quantity)), // 原采购入库单金额
                        OccurTime           = occurTime == DateTime.MinValue ? (newInDocument.AuditTime.HasValue ? newInDocument.AuditTime.Value : newInDocument.DateCreated) : occurTime,
                        CreateTime          = DateTime.Now
                    };
                    result.Add(item);
                }
            }
            catch (Exception ex)
            {
                ERP.SAL.LogCenter.LogService.LogError(string.Format("创建基于入库红冲生成的新入库单 {0} 的即时结算价失败!", newInDocumentRedId), LOG_TAG, ex);
            }
            return(result);
        }
        /// <summary>
        ///  获取仓库信息
        /// </summary>
        /// <param name="eval"></param>
        /// <param name="isOut"></param>
        /// <returns></returns>
        private void GetWarehouseList()
        {
            var result = WMSSao.GetWarehouseAuthDic(Personnel.PersonnelId);

            var warehouseList = new Dictionary <Guid, string> {
                { Guid.Empty, "请选择仓库" }
            };

            RCB_Warehouse.Text = String.Empty;
            RCB_Warehouse.Items.Clear();
            RCB_Warehouse.DataSource = result != null?warehouseList.Union(result.WarehouseDics) : warehouseList;

            RCB_Warehouse.DataBind();
            RCB_Warehouse.SelectedIndex = 0;
        }
Exemple #13
0
        private void BindInStock()
        {
            var personnel = CurrentSession.Personnel.Get();
            var result    = WMSSao.GetWarehouseAuthDic(personnel.PersonnelId);

            WarehouseAuth                = result;
            RCB_Warehouse.DataSource     = result != null && result.WarehouseDics != null ? result.WarehouseDics : new Dictionary <Guid, string>();
            RCB_Warehouse.DataTextField  = "Value";
            RCB_Warehouse.DataValueField = "Key";
            RCB_Warehouse.DataBind();
            if (result != null && result.WarehouseDics != null && result.WarehouseDics.Count > 0)
            {
                RCB_Warehouse.SelectedValue = result.WarehouseDics.First().Key.ToString();
            }
        }
Exemple #14
0
        /// <summary> ADD:2013.7.27 阮剑锋
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static string GetName(Guid id)
        {
            var dic = WMSSao.GetAllCanUseWarehouseDics();

            if (dic == null)
            {
                return(string.Empty);
            }

            if (dic.ContainsKey(id))
            {
                return(dic[id]);
            }
            return(string.Empty);
        }
Exemple #15
0
        /// <summary>添加日销售量
        /// </summary>
        /// <param name="orderInfo"></param>
        /// <param name="detailList"></param>
        /// <param name="dicAvgSettlePrice"></param>
        public void SaveGoodsDaySalesStatistics(GoodsOrderInfo orderInfo, IList <GoodsOrderDetailInfo> detailList, IDictionary <Guid, decimal> dicAvgSettlePrice)
        {
            if (orderInfo.HostingFilialeId == Guid.Empty)
            {
                orderInfo.HostingFilialeId = WMSSao.GetHostingFilialeIdByWarehouseIdGoodsTypes(orderInfo.DeliverWarehouseId, orderInfo.SaleFilialeId, detailList.Select(ent => ent.GoodsType).Distinct());
            }
            var goodsSeriesList = _goodsCenterSao.GetGoodsSeriesList(orderInfo.SaleFilialeId, detailList.Select(w => w.GoodsID).Distinct().ToList());
            //根据订单Id获取实际商品价格(参加促销活动的商品要抵扣相应的促销价,从而得到新的实际商品价格)
            Dictionary <Guid, decimal> dicGoodsPriceDict = _promotionSao.GetGoodsPriceDict(orderInfo.OrderId);

            var list = new List <GoodsDaySalesStatisticsInfo>();

            foreach (var goodsOrderDetailInfo in detailList)
            {
                var gdsinfo = new GoodsDaySalesStatisticsInfo
                {
                    DeliverWarehouseId = orderInfo.DeliverWarehouseId,
                    SaleFilialeId      = orderInfo.SaleFilialeId,
                    SalePlatformId     = orderInfo.SalePlatformId,
                    GoodsId            = goodsOrderDetailInfo.GoodsID,
                    RealGoodsId        = goodsOrderDetailInfo.RealGoodsID,
                    GoodsSales         = goodsOrderDetailInfo.Quantity,
                    DayTime            = orderInfo.OrderTime,
                    Specification      = goodsOrderDetailInfo.PurchaseSpecification,
                    SellPrice          = ((dicGoodsPriceDict != null && dicGoodsPriceDict.ContainsKey(goodsOrderDetailInfo.GoodsID)) ? dicGoodsPriceDict[goodsOrderDetailInfo.GoodsID] : goodsOrderDetailInfo.SellPrice) * (decimal)goodsOrderDetailInfo.Quantity,
                    GoodsName          = goodsOrderDetailInfo.GoodsName,
                    GoodsCode          = goodsOrderDetailInfo.GoodsCode,
                    ClassId            = Guid.Empty,
                    AvgSettlePrice     = ((dicAvgSettlePrice != null && dicAvgSettlePrice.Any() && dicAvgSettlePrice.ContainsKey(goodsOrderDetailInfo.GoodsID)) ? dicAvgSettlePrice[goodsOrderDetailInfo.GoodsID] : 0) * (decimal)goodsOrderDetailInfo.Quantity,
                    HostingFilialeId   = orderInfo.HostingFilialeId
                };
                if (goodsSeriesList != null && goodsSeriesList.Count > 0)
                {
                    var result = goodsSeriesList.FirstOrDefault(p => p.GoodsID.Equals(goodsOrderDetailInfo.GoodsID));
                    if (result != null)
                    {
                        gdsinfo.GoodsName = result.GoodsName;
                        gdsinfo.GoodsCode = result.GoodsCode;
                        gdsinfo.ClassId   = result.ClassID;
                        gdsinfo.BrandId   = result.BrandId;
                        gdsinfo.SeriesId  = result.SeriesId;
                    }
                }
                list.Add(gdsinfo);
            }
            _goodsOrderDetail.SaveGoodsSales(list);
        }
Exemple #16
0
        public static void RunTask()
        {
            var pg                      = DataAccessor.GetPurchasingGoodsList(TaskType.All);
            var goodsIdList             = pg.Select(w => w.GoodsId).Distinct().ToList();
            IList <GoodsInfo> goodsList = _goodsCenterSao.GetGoodsListByGoodsIds(goodsIdList).ToList();
            var warehouses              = WMSSao.GetAllCanUseWarehouseDics();

            foreach (var p in pg)
            {
                bool     isRun;
                TaskType taskType;
                bool     hasSaveLastPurchasingDate;
                int      avgStockDays;
                DateTime nextStockDate;
                DateTime nextPurchasingDate;
                int      step;

                GoodsInfo goodsInfo = goodsList.FirstOrDefault(w => w.GoodsId == p.GoodsId);
                if (goodsInfo == null)
                {
                    continue;
                }

                p.GoodsName = goodsInfo.GoodsName;
                p.GoodsCode = goodsInfo.GoodsCode;
                p.Units     = goodsInfo.Units;
                if (goodsInfo.ExpandInfo != null)
                {
                    p.PackQuantity = goodsInfo.ExpandInfo.PackCount;
                }

                //计算报备日期是否匹配
                CalculateStockDay(p, p.LastPurchasingDate, p.FilingDay, p.StockingDays, out isRun, out taskType, out avgStockDays, out nextStockDate, out step, out hasSaveLastPurchasingDate, out nextPurchasingDate);

                if (isRun)
                {
                    Routine.DoPurchasing(p, goodsInfo, avgStockDays, nextStockDate, taskType, step, nextPurchasingDate, warehouses);
                }

                if (hasSaveLastPurchasingDate)
                {
                    //记录最后的采购运行时间
                    DataAccessor.UpdateLastPurchasingDate(p.WarehouseId, p.HostingFilialeId, p.GoodsId, DateTime.Now);
                }
            }
        }
Exemple #17
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                AllCompanyList              = _companyCussent.GetCompanyCussentList();
                AllCompanyBalanceList       = _companyCussent.GetCompanyBalanceList();
                AllCompanyClassList         = _companyClass.GetCompanyClassList();
                AllCompanyBalanceDetailList = _companyCussent.GetCompanyBalanceDetailList();

                Dictionary <Guid, string> dataSource = new Dictionary <Guid, string> {
                    { Guid.Empty, "--所有--" }
                };
                RCB_Warehouse.DataSource = dataSource.Union(WMSSao.GetAllCanUseWarehouseDics());

                var filialeList = FilialeList.Where(f => f.FilialeTypes.Contains((int)FilialeType.SaleCompany) || f.FilialeTypes.Contains((int)FilialeType.LogisticsCompany) && !f.FilialeTypes.Contains((int)FilialeType.EntityShop));

                RCB_FilialeList.DataSource = filialeList;
                var personnelInfo = CurrentSession.Personnel.Get();
                if (personnelInfo.CurrentFilialeId == Guid.Empty)
                {
                    personnelInfo.CurrentFilialeId = filialeList.First().ID;
                    CurrentSession.Personnel.Set(personnelInfo);
                }
                SelectFilialeId = personnelInfo.CurrentFilialeId;
                GetCompanyCussent();

                RCB_Warehouse.DataBind();
                RCB_FilialeList.DataTextField  = "Name";
                RCB_FilialeList.DataValueField = "ID";
                RCB_FilialeList.DataBind();
                RCB_FilialeList.SelectedValue = string.Format("{0}", personnelInfo.CurrentFilialeId);


                RDP_StartDate.SelectedDate = DateTime.Now.AddDays(-30);
                RDP_EndDate.SelectedDate   = DateTime.Now;
            }

            if (GetPowerOperationPoint("CBIsOut") && !string.IsNullOrWhiteSpace(RCB_FilialeList.SelectedValue) && new Guid(RCB_FilialeList.SelectedValue) != Guid.Empty)
            {
                CB_IsOut.Visible = true;
            }
            else
            {
                CB_IsOut.Visible = false;
            }
        }
Exemple #18
0
        public int AddNewApplyStock(ApplyStockInfo applyStockInfo, IList <ApplyStockDetailInfo> applyStockDetailInfoList, IDictionary <Guid, decimal> settledics, out string errorMsg)
        {
            var isalliance = FilialeManager.IsAllianceShopFiliale(applyStockInfo.FilialeId, out errorMsg);

            if (isalliance)//联盟店
            {
                if (applyStockInfo.CompanyWarehouseId == Guid.Empty)
                {
                    applyStockInfo.PurchaseType = (int)PurchaseType.FromPurchase;
                }

                var filialeInfo = FilialeManager.Get(applyStockInfo.CompanyId);
                applyStockInfo.CompanyName = filialeInfo != null && filialeInfo.ID != Guid.Empty ? filialeInfo.Name : "-";

                //新增加盟店采购申请添加时待确认
                if (applyStockInfo.StockState >= (int)ApplyStockState.Delivering)
                {
                    var goodsIds   = applyStockDetailInfoList.Select(ent => ent.CompGoodsID).Distinct().ToList();
                    var goodsInfos = _goodsInfoSao.GetGoodsListByGoodsIds(goodsIds);
                    if (goodsInfos == null || goodsInfos.Count != goodsIds.Count)
                    {
                        errorMsg = "GMS商品信息获取失败";
                        return(-1);
                    }
                    var hostingFilialeId = WMSSao.GetHostingFilialeIdByWarehouseIdGoodsTypes(applyStockInfo.CompanyWarehouseId, applyStockInfo.CompanyId, goodsInfos.Select(ent => ent.GoodsType).Distinct());
                    if (hostingFilialeId == Guid.Empty)
                    {
                        errorMsg = "获取仓库对应的物流公司失败";
                        return(-1);
                    }
                    var flag = IsMatchSendCondition(applyStockInfo, applyStockDetailInfoList, hostingFilialeId, goodsInfos.ToDictionary(k => k.GoodsId, v => v), settledics, out errorMsg);
                    //确认不通过修改采购申请状态为等待确认
                    if (!flag)
                    {
                        applyStockInfo.StockState = (int)ApplyStockState.Confirming;
                    }
                }
            }
            if (_applyStockDao.Insert(applyStockInfo) && _applyStockDao.InsertDetail(applyStockDetailInfoList) > 0)
            {
                errorMsg = "";
                return(applyStockInfo.StockState);
            }
            errorMsg = "添加申请明细时失败";
            return(-1);
        }
        /// <summary>
        /// 根据采购退货出库单,创建待处理队列数据
        /// </summary>
        /// <param name="purchaseReturnStockOutId"></param>
        /// <param name="occurTime"></param>
        /// <returns></returns>
        public IEnumerable <RealTimeGrossSettlementProcessQueueInfo> CreateByPurchaseReturnStockOut(Guid purchaseReturnStockOutId, DateTime occurTime)
        {
            List <RealTimeGrossSettlementProcessQueueInfo> result = new List <RealTimeGrossSettlementProcessQueueInfo>();

            try
            {
                var purchaseReturnStockOutRecord  = _storageDao.GetStorageRecord(purchaseReturnStockOutId);
                var purchaseReturnStockOutDetails = _storageDao.GetStorageRecordDetailListByStockId(purchaseReturnStockOutId);
                if (purchaseReturnStockOutRecord == null || purchaseReturnStockOutRecord.StockType != (int)StorageRecordType.BuyStockOut || purchaseReturnStockOutRecord.StockState != (int)StorageRecordState.Finished ||
                    purchaseReturnStockOutDetails == null || purchaseReturnStockOutDetails.Count == 0)
                {
                    return(result);
                }
                Dictionary <Guid, int> goodsStockQuantityDict = new Dictionary <Guid, int>();
                // 销售公司向物流配送公司采购退货时,销售公司的库存为0
                if (purchaseReturnStockOutRecord.TradeBothPartiesType != (int)TradeBothPartiesType.HostingToSale)
                {
                    goodsStockQuantityDict = WMSSao.GetGoodsStockQuantiyByFilialeIdGoodsIds(purchaseReturnStockOutRecord.FilialeId, purchaseReturnStockOutDetails.Select(m => m.GoodsId).Distinct());
                }
                var lastGoodsUnitPriceDict = GetLatestListByMultiGoods(purchaseReturnStockOutRecord.FilialeId, purchaseReturnStockOutDetails.Select(m => m.GoodsId).Distinct());
                foreach (var groupByGoodsId in purchaseReturnStockOutDetails.GroupBy(g => g.GoodsId))
                {
                    var item = new RealTimeGrossSettlementProcessQueueInfo
                    {
                        QueueId             = Guid.NewGuid(),
                        FilialeId           = purchaseReturnStockOutRecord.FilialeId,
                        GoodsId             = groupByGoodsId.Key,
                        StockQuantity       = goodsStockQuantityDict.ContainsKey(groupByGoodsId.Key) ? goodsStockQuantityDict[groupByGoodsId.Key] : 0,
                        LastGrossSettlement = lastGoodsUnitPriceDict.ContainsKey(groupByGoodsId.Key) ? lastGoodsUnitPriceDict[groupByGoodsId.Key] : null,
                        RelatedTradeType    = (int)RealTimeGrossSettlementRelatedTradeType.PurchaseReturnStockOut,
                        RelatedTradeNo      = purchaseReturnStockOutRecord.TradeCode,
                        GoodsQuantityInBill = groupByGoodsId.Sum(m => Math.Abs(m.Quantity)),
                        GoodsAmountInBill   = -groupByGoodsId.Sum(m => Math.Abs(m.UnitPrice * m.Quantity)),// 采购退货,金额为负数
                        OccurTime           = occurTime == DateTime.MinValue ? purchaseReturnStockOutRecord.DateCreated : occurTime,
                        CreateTime          = DateTime.Now
                    };
                    result.Add(item);
                }
            }
            catch (Exception ex)
            {
                ERP.SAL.LogCenter.LogService.LogError(string.Format("创建基于采购退货出库单 {0} 的即时结算价失败!", purchaseReturnStockOutId), LOG_TAG, ex);
            }
            return(result);
        }
Exemple #20
0
        /// <summary>RCB_GoodsGift下拉选择事件
        /// </summary>
        protected void RCB_GoodsGiftOnSelectedIndexChanged(object o, RadComboBoxSelectedIndexChangedEventArgs e)
        {
            var rlbGoodsGift = new RadListBoxItem(e.Text, e.Value);

            if (!string.IsNullOrEmpty(e.Value) && RCB_GoodsGift.FindItemByValue(e.Value) == null)
            {
                var item = GoodsGiftList.Items.FirstOrDefault(ent => ent.Value == rlbGoodsGift.Value);
                if (item == null)
                {
                    var goodsId = new List <Guid> {
                        new Guid(e.Value)
                    };
                    var result   = WMSSao.BindGift(goodsId);
                    var quantity = result.ContainsKey(new Guid(rlbGoodsGift.Value)) ? result[new Guid(rlbGoodsGift.Value)] : 0;
                    GoodsGiftList.Items.Add(new RadListBoxItem(rlbGoodsGift.Text + "  [" + quantity + "]", rlbGoodsGift.Value));
                }
                RCB_GoodsGift.Text = string.Empty;
            }
        }
        /// <summary>
        /// 按时间取出缺货商品数和缺货订单数
        /// </summary>
        /// <param name="warehouseName"></param>
        /// <param name="personResponsible"></param>
        /// <param name="starttime"></param>
        /// <param name="endtime"></param>
        /// <param name="warehouseId"></param>
        /// <returns></returns>
        public IList <GoodsAllocateStatistic> GetNeedeGoodsOrderList(Guid warehouseId, string warehouseName, Guid personResponsible, DateTime starttime, DateTime endtime)
        {
            var result          = new List <GoodsAllocateStatistic>();
            var orderNeedeGoods = _goodsOrderDetail.GetNeedPurchasingGoodses(warehouseId, personResponsible, starttime, endtime, new List <int> {
                (int)Enum.OrderState.RequirePurchase
            });

            if (orderNeedeGoods.Count > 0)
            {
                // 缺货数
                Dictionary <Guid, int> stockQuantitys = WMSSao.GetLackQuantity(warehouseId, orderNeedeGoods.Select(ent => ent.RealGoodsId).Distinct());
                foreach (var personResponsibleGroup in orderNeedeGoods.GroupBy(ent => ent.PersonResponsible))
                {
                    var allocateStatistic = new GoodsAllocateStatistic
                    {
                        PersonResponsible = personResponsible,
                        PersonnelName     = _personnelSao.GetName(personResponsibleGroup.Key),
                        WarehouseId       = warehouseId,
                        WarehouseName     = warehouseName
                    };

                    List <NeedPurchasingGoods> details = new List <NeedPurchasingGoods>();
                    foreach (var needPurchasingGoodses in personResponsibleGroup.Where(ent => stockQuantitys.ContainsKey(ent.RealGoodsId)))
                    {
                        if (stockQuantitys[needPurchasingGoodses.RealGoodsId] < 0)
                        {
                            int quantity = needPurchasingGoodses.Quantity;
                            if (quantity > Math.Abs(stockQuantitys[needPurchasingGoodses.RealGoodsId]))
                            {
                                needPurchasingGoodses.Quantity = quantity + stockQuantitys[needPurchasingGoodses.RealGoodsId];
                            }
                            stockQuantitys[needPurchasingGoodses.RealGoodsId] = stockQuantitys[needPurchasingGoodses.RealGoodsId] + quantity;
                            details.Add(needPurchasingGoodses);
                        }
                    }
                    allocateStatistic.OrderCount      = details.Select(ent => ent.OrderNo).Distinct().Count();
                    allocateStatistic.GoodsQuantities = details.Sum(ent => ent.Quantity);
                    result.Add(allocateStatistic);
                }
            }
            return(result);
        }
Exemple #22
0
        protected void GridRGGoodsDemand_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
        {
            var datasource = new List <StockDeclareDTO>();

            if (Page.IsPostBack)
            {
                if (!e.IsFromDetailTable)
                {
                    var purchasingSets = CompanyId != Guid.Empty
                        ? _purchaseSet.GetPurchaseSetListByWarehouseIdAndCompanyId(WarehouseId, CompanyId) :
                                         _purchaseSet.GetPurchaseSetListByWarehouseId(WarehouseId);
                    if (purchasingSets == null || purchasingSets.Count == 0)
                    {
                        RAM.Alert("该仓库未找到对应的采购设置商品!");
                        RGGoodsDemand.DataSource = new List <StockDeclareDTO>();
                        return;
                    }

                    var dics = WMSSao.GetStockDeclareDtos(WarehouseId, new List <Guid>());
                    if (!string.IsNullOrWhiteSpace(TextBoxKeys.Text))
                    {
                        var realGoodsIds = _goodsCenterSao.GetRealGoodsIdListByGoodsNameOrCode(TextBoxKeys.Text);
                        if (realGoodsIds.Count > 0)
                        {
                            dics = dics.Where(act => realGoodsIds.Contains(act.Key)).ToDictionary(k => k.Key, v => v.Value);
                        }
                    }
                    var realGoodsInfos      = _goodsCenterSao.GetStockDeclareGridList(dics.Keys.ToList()).ToDictionary(k => k.RealGoodsId, v => v);
                    var purchasingGoodsDics = _purchasingDetail.GetStockDeclarePursingGoodsDicsWithFiliale(WarehouseId, dics.Values.SelectMany(ent => ent).Select(ent => ent.FilialeId),
                                                                                                           new[] { PurchasingState.NoSubmit, PurchasingState.Purchasing, PurchasingState.PartComplete, PurchasingState.StockIn, PurchasingState.WaitingAudit, PurchasingState.Refusing },
                                                                                                           dics.Keys.ToList());
                    List <StockDeclareDTO> data;
                    StockDeclareDtos = GetDataList(dics, purchasingGoodsDics, realGoodsInfos, purchasingSets, out data);
                    datasource.AddRange(data);
                }
                else //加载对应物流公司申报数
                {
                    datasource = GetDataList(StockDeclareDtos);
                }
            }
            RGGoodsDemand.DataSource = datasource.OrderBy(w => w.GoodsName).ThenBy(w => w.Sku).ToList();
        }
Exemple #23
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="applyId"></param>
        /// <returns></returns>
        public IList <ApplyStockDetailInfo> FindDetailList(Guid applyId)
        {
            var infoList    = _applyStockDao.FindDetailList(applyId);
            var applyInfo   = _applyStockDao.FindById(applyId);
            var quantityDic = new Dictionary <Guid, int>();

            if (applyInfo != null)
            {
                quantityDic = WMSSao.GoodsEffitiveStockBySaleFilialeId(applyInfo.CompanyWarehouseId, null,
                                                                       infoList.GroupBy(ent => new { ent.GoodsId, ent.CompGoodsID }).ToDictionary(k => k.Key.GoodsId, v => v.Key.CompGoodsID), applyInfo.CompanyId);
                if (quantityDic == null)
                {
                    throw new ApplicationException("库存中心异常FindDetailList");
                }
            }
            foreach (var info in infoList)
            {
                info.GoodsStock = quantityDic.ContainsKey(info.GoodsId) ? quantityDic[info.GoodsId] : 0;
            }
            return(infoList);
        }
Exemple #24
0
        /// <summary>
        /// 原始查询  查询30天
        /// </summary>
        /// <param name="warehouseId"></param>
        /// <param name="hostingFilialeId"></param>
        /// <param name="days"> </param>
        /// <param name="goodsInfo"> </param>
        /// <param name="childGoods"></param>
        /// <returns></returns>
        public IList <StockWarningInfo> GetStockWarningList(Guid warehouseId, Guid hostingFilialeId, int days, GoodsInfo goodsInfo, Dictionary <Guid, ChildGoodsInfo> childGoods)
        {
            IList <StockWarningInfo> stockWarningList = new List <StockWarningInfo>();

            if (goodsInfo != null && goodsInfo.GoodsId != Guid.Empty)
            {
                var realgoodsIds = childGoods.Count > 0 ? childGoods.Keys.ToList() : new List <Guid> {
                    goodsInfo.GoodsId
                };
                stockWarningList = _stockWarningDao.GetStockWarningList(warehouseId, hostingFilialeId, realgoodsIds, days);
                if (stockWarningList.Count > 0)
                {
                    var quantityList = WMSSao.GetStockStatisticsDtos(realgoodsIds.ToDictionary(k => k, v => goodsInfo.GoodsType), warehouseId, hostingFilialeId);

                    foreach (var info in stockWarningList)
                    {
                        info.GoodsName = goodsInfo.GoodsName;
                        info.GoodsCode = goodsInfo.GoodsCode;
                        info.IsOnShelf = goodsInfo.IsOnShelf;
                        if (childGoods.ContainsKey(info.GoodsId))
                        {
                            var childGoodsInfo = childGoods[info.GoodsId] ?? new ChildGoodsInfo();
                            info.Specification = childGoodsInfo.Specification;
                            info.IsScarcity    = childGoodsInfo.IsScarcity;
                        }
                        var statisInfo = !quantityList.ContainsKey(hostingFilialeId) ? null : quantityList[hostingFilialeId].FirstOrDefault(act => act.RealGoodsId == info.GoodsId);
                        if (statisInfo != null)
                        {
                            info.NonceWarehouseGoodsStock = statisInfo.CurrentStock;
                            info.UppingQuantity           = statisInfo.UppingQuantity;
                            info.RequireQuantity          = statisInfo.RequireQuantity;
                            info.SubtotalQuantity         = statisInfo.SubtotalQuantity;
                            info.NonceRequest             = statisInfo.RequireQuantity;
                        }
                    }
                }
            }
            return(stockWarningList.OrderBy(ent => ent.Specification).ToList());
        }
Exemple #25
0
 protected void ShowGoodsGiftList(Guid goodsId)
 {
     try
     {
         if (goodsId != Guid.Empty)
         {
             var result = _goodsCenterSao.GetGoodsGiftList(goodsId);
             GoodsGiftList.Items.Clear();
             if (result != null && result.Count > 0)
             {
                 var goodsStockDic = WMSSao.BindGift(result.Select(ent => ent.Key));
                 foreach (var item in result)
                 {
                     var quantity = goodsStockDic.ContainsKey(item.Key) ? goodsStockDic[item.Key] : 0;
                     GoodsGiftList.Items.Add(new RadListBoxItem(item.Value + "  [" + quantity + "]", item.Key.ToString()));
                 }
             }
         }
     }
     catch (Exception)
     {
         RAM.Alert("温馨提示:操作失败!");
     }
 }
        /// <summary>
        /// 统计需调拨商品
        /// </summary>
        /// <param name="pmId"></param>
        /// <param name="starttime"></param>
        /// <param name="endtime"></param>
        /// <param name="warehouseId"></param>
        /// <returns></returns>
        public IList <StorageRecordDetailInfo> GetAllocationGoodsList(Guid pmId, DateTime starttime, DateTime endtime, Guid warehouseId)
        {
            IList <StorageRecordDetailInfo> datasource = new List <StorageRecordDetailInfo>();

            var orderNeedeGoods = _goodsOrderDetail.GetNeedPurchasingGoodses(warehouseId, pmId, starttime, endtime, new List <int> {
                (int)Enum.OrderState.RequirePurchase
            });

            if (orderNeedeGoods.Count > 0)
            {
                // 获取商品的可用库存
                Dictionary <Guid, int>     stockQuantitys = WMSSao.GetLackQuantity(warehouseId, orderNeedeGoods.Select(ent => ent.RealGoodsId).Distinct());
                List <NeedPurchasingGoods> details        = GetList(orderNeedeGoods, stockQuantitys);
                if (details.Any())
                {
                    var goodsDics = _goodsCenterSao.GetDictRealGoodsUnitModel(details.Select(ent => ent.RealGoodsId).Distinct().ToList());
                    foreach (var dic in details.GroupBy(ent => ent.RealGoodsId))
                    {
                        var goods = goodsDics != null && goodsDics.ContainsKey(dic.Key) ? goodsDics[dic.Key] : null;
                        if (goods == null)
                        {
                            continue;
                        }
                        datasource.Add(new StorageRecordDetailInfo
                        {
                            GoodsCode     = goods.GoodsCode,
                            GoodsName     = goods.PurchaseName,
                            Specification = goods.Specification,
                            Quantity      = dic.Sum(ent => ent.Quantity)
                        });
                    }
                }
            }

            return(datasource);
        }
Exemple #27
0
 public IList <CityDTO> ToList()
 {
     return(CacheHelper.Get(Key, () => WMSSao.GetAddressLibrary().Cities));
 }
Exemple #28
0
        /// <summary>
        /// 新增门店采购单
        /// </summary>
        /// <param name="applyStockInfo"></param>
        /// <param name="applyStockDetailInfoList"></param>
        /// <param name="errorMsg"> </param>
        /// <returns>采购申请状态</returns>
        public int Add(ApplyStockInfo applyStockInfo, IList <ApplyStockDetailInfo> applyStockDetailInfoList, out string errorMsg)
        {
            int state = -1;

            try
            {
                var isalliance = FilialeManager.IsAllianceShopFiliale(applyStockInfo.FilialeId, out errorMsg);
                if (isalliance)//联盟店
                {
                    if (applyStockInfo.CompanyWarehouseId == Guid.Empty)
                    {
                        applyStockInfo.PurchaseType = (int)PurchaseType.FromPurchase;
                    }

                    var filialeInfo = FilialeManager.Get(applyStockInfo.CompanyId);
                    applyStockInfo.CompanyName = filialeInfo != null && filialeInfo.ID != Guid.Empty ? filialeInfo.Name : "-";

                    //新增加盟店采购申请添加时待确认
                    if (applyStockInfo.StockState >= (int)ApplyStockState.Delivering)
                    {
                        var goodsIds   = applyStockDetailInfoList.Select(ent => ent.CompGoodsID).Distinct().ToList();
                        var goodsInfos = _goodsInfoSao.GetGoodsListByGoodsIds(goodsIds);
                        if (goodsInfos == null || goodsInfos.Count != goodsIds.Count)
                        {
                            errorMsg = "GMS商品信息获取失败";
                            return(state);
                        }
                        var hostingFilialeId = WMSSao.GetHostingFilialeIdByWarehouseIdGoodsTypes(applyStockInfo.CompanyWarehouseId, applyStockInfo.CompanyId, goodsInfos.Select(ent => ent.GoodsType).Distinct());
                        if (hostingFilialeId == Guid.Empty)
                        {
                            errorMsg = "获取仓库对应的物流公司失败";
                            return(state);
                        }
                        var settleDics = _grossSettlementDal.GetLatestUnitPriceListByMultiGoods(hostingFilialeId, goodsIds);
                        var flag       = IsMatchSendCondition(applyStockInfo, applyStockDetailInfoList, hostingFilialeId, goodsInfos.ToDictionary(k => k.GoodsId, v => v), settleDics, out errorMsg);
                        //确认不通过修改采购申请状态为等待确认
                        if (!flag)
                        {
                            applyStockInfo.StockState = (int)ApplyStockState.Confirming;
                        }
                    }
                }
                using (var ts = new TransactionScope(TransactionScopeOption.Required))
                {
                    bool isSuccess = _applyStockDao.Insert(applyStockInfo);
                    if (isSuccess)
                    {
                        if (_applyStockDao.InsertDetail(applyStockDetailInfoList) > 0)
                        {
                            state = applyStockInfo.StockState;
                        }
                        else
                        {
                            isSuccess = false;
                            errorMsg  = "添加申请明细时失败";
                        }
                    }
                    else
                    {
                        errorMsg = "添加申请记录失败";
                    }
                    if (isSuccess)
                    {
                        ts.Complete();
                    }
                }
                return(state);
            }
            catch (Exception exp)
            {
                SAL.LogCenter.LogService.LogError(string.Format("新增采购申请报错: applyStockInfo={0}, applyStockDetailInfoList={1}", new Framework.Core.Serialize.JsonSerializer().Serialize(applyStockInfo), new Framework.Core.Serialize.JsonSerializer().Serialize(applyStockDetailInfoList)), "采购管理", exp);
                errorMsg = exp.Message;
                return(-1);
            }
        }
Exemple #29
0
        /// <summary>
        /// 判断是否满足发货条件
        /// </summary>
        /// <param name="applyStockInfo"></param>
        /// <param name="applyStockDetailInfoList"></param>
        /// <param name="hostingFilialeId"></param>
        /// <param name="goodsDics"></param>
        /// <param name="dicAvgSettlePrice"></param>
        /// <param name="errorMsg"></param>
        /// <returns></returns>
        public bool IsMatchSendCondition(ApplyStockInfo applyStockInfo, IList <ApplyStockDetailInfo> applyStockDetailInfoList,
                                         Guid hostingFilialeId, Dictionary <Guid, Model.Goods.GoodsInfo> goodsDics, IDictionary <Guid, decimal> dicAvgSettlePrice, out string errorMsg)
        {
            errorMsg = string.Empty;

            //获取子商品列表(for获取商品库存和销量)
            var realGoodsIds = applyStockDetailInfoList.Select(act => act.GoodsId).Distinct().ToList();
            var flag         = false;

            //2、发货量限制在可得15天外库存,如果采购数大于该库存手动确认
            //当前库存-获取最近15天每日销量
            var start        = DateTime.Now.AddDays(-15);
            var end          = DateTime.Now.AddDays(-1);
            var stockCurrent = WMSSao.GoodsEffitiveStock(applyStockInfo.CompanyWarehouseId, null, realGoodsIds, hostingFilialeId);
            var saleGoodsIds = _daySalesStatistics.GetRealGoodsDaySales(applyStockInfo.CompanyWarehouseId, applyStockInfo.CompanyId, new DateTime(start.Year, start.Month, start.Day),
                                                                        new DateTime(end.Year, end.Month, end.Day), realGoodsIds);

            if (stockCurrent != null && stockCurrent.Count > 0)
            {
                bool isNeedeConfirm = false;
                foreach (var realGoodsId in realGoodsIds)
                {
                    var dataList = applyStockDetailInfoList.Where(act => act.GoodsId == realGoodsId).ToList();
                    var stock    = stockCurrent.Count > 0 && stockCurrent.ContainsKey(realGoodsId)
                        ? stockCurrent[realGoodsId]
                        : 0;
                    var sale     = saleGoodsIds.FirstOrDefault(act => act.Key == realGoodsId);
                    var tempFlag = stock - (sale != null ? sale.Value : 0) > dataList.Sum(act => act.Quantity);
                    if (!isNeedeConfirm || flag)
                    {
                        flag = tempFlag;
                    }
                    isNeedeConfirm = true;
                    if (!tempFlag)
                    {
                        foreach (var applyStockDetailInfo in dataList)
                        {
                            applyStockDetailInfo.IsComfirmed = true;
                            applyStockDetailInfo.ComfirmTips = "当前库存<可得15天外销量";
                        }
                    }
                }
            }

            if (flag)
            {
                //获取商品采购设置列表
                var purchaseSetList = _purchaseSet.GetPurchaseSetInfoList(goodsDics.Keys, applyStockInfo.CompanyWarehouseId, hostingFilialeId);
                if (purchaseSetList == null || purchaseSetList.Count == 0)
                {
                    errorMsg = "采购商品全部未绑定商品采购设置!";
                    return(false);
                }
                foreach (var goodsInfo in goodsDics.Values)
                {
                    var    dataList = applyStockDetailInfoList.Where(act => act.CompGoodsID == goodsInfo.GoodsId && !act.IsComfirmed).ToList();
                    string content  = string.Empty;
                    //1、判断是否存在护理液等特殊商品
                    if (goodsInfo.GoodsType == (int)GoodsType.LensSolution ||
                        goodsInfo.GoodsType == (int)GoodsType.CareProducts ||
                        goodsInfo.GoodsType == (int)GoodsType.NoSet)
                    {
                        flag    = false;
                        content = "护理液/用品或未设置等特殊商品";
                    }
                    if (flag)
                    {
                        var setInfo = purchaseSetList.FirstOrDefault(act => act.GoodsId == goodsInfo.GoodsId);
                        if (goodsInfo.ExpandInfo != null && setInfo != null)
                        {
                            //3、加盟价<=成本价*5% && 加盟价<=采购价/年返点 需手动确认,采购状态为待确认
                            if (goodsInfo.ExpandInfo.JoinPrice > (dicAvgSettlePrice.ContainsKey(goodsInfo.GoodsId) ? dicAvgSettlePrice[goodsInfo.GoodsId] : 0) * decimal.Parse("0.05"))
                            {
                                if (goodsInfo.ExpandInfo.YearDiscount == 0)
                                {
                                    continue;
                                }
                                if (goodsInfo.ExpandInfo.JoinPrice > (setInfo.PurchasePrice / goodsInfo.ExpandInfo.YearDiscount))
                                {
                                    continue;
                                }
                                content = "加盟价<=采购价/年返点";
                            }
                            else
                            {
                                content = "加盟价<=成本价*5%";
                            }
                        }
                        flag = false;
                    }
                    if (content.Length > 0)
                    {
                        foreach (var applyStockDetailInfo in dataList)
                        {
                            applyStockDetailInfo.IsComfirmed = true;
                            applyStockDetailInfo.ComfirmTips = content;
                        }
                    }
                }
            }
            return(flag);
        }
Exemple #30
0
        public bool UpdateApplyStockState(ApplyStockInfo applyInfo, int state, bool alliance, out IDictionary <Guid, decimal> settleDics, out string msg)
        {
            msg = string.Empty;
            var dics = new Dictionary <Guid, string>();

            settleDics = new Dictionary <Guid, decimal>();
            if (state == (int)ApplyStockState.Delivering && !alliance)
            {
                var detailList = FindDetailList(applyInfo.ApplyId);
                var goodsIds   = detailList.Select(ent => ent.CompGoodsID).Distinct().ToList();
                var goodsInfos = _goodsInfoSao.GetGoodsListByGoodsIds(goodsIds);
                if (goodsInfos == null || goodsInfos.Count != goodsIds.Count)
                {
                    msg = "GMS商品信息获取失败";
                    return(false);
                }
                var hostingFilialeId = WMSSao.GetHostingFilialeIdByWarehouseIdGoodsTypes(applyInfo.CompanyWarehouseId, applyInfo.CompanyId, goodsInfos.Select(ent => ent.GoodsType).Distinct());
                if (hostingFilialeId == Guid.Empty)
                {
                    msg = "获取仓库对应的物流公司失败";
                    return(false);
                }
                settleDics = _grossSettlementDal.GetLatestUnitPriceListByMultiGoods(hostingFilialeId, goodsIds);
                var result = IsMatchSendCondition(applyInfo, detailList, hostingFilialeId, goodsInfos.ToDictionary(k => k.GoodsId, v => v), settleDics, out msg);
                if (!result)
                {
                    //更新采购申请信息
                    state = (int)ApplyStockState.Confirming;
                    dics  = detailList.Where(act => act.IsComfirmed).ToDictionary(k => k.GoodsId, v => v.ComfirmTips);
                }
            }
            bool flag = _applyStockDao.UpdateApplyStockState(applyInfo.ApplyId, state);

            //修改明细中商品需确认标识
            if (flag && dics.Count > 0)
            {
                if (dics.Select(dic => _applyStockDao.UpdateDetailTips(applyInfo.ApplyId, dic.Key, dic.Value, true)).Any(result => !result))
                {
                    flag = false;
                }
            }
            if (!flag)
            {
                msg = "修改对应门店采购申请状态失败!";
            }
            else
            {
                if (alliance)
                {
                    string message;
                    var    parenId = FilialeManager.GetShopHeadFilialeId(applyInfo.FilialeId);
                    //联盟店备注格式:[XX]
                    var result = ShopSao.UpdatePurchaseState(parenId, applyInfo.ApplyId, state, string.Empty, out message);
                    if (!result)
                    {
                        msg  = message;
                        flag = false;
                    }
                }
            }
            return(flag);
        }