Просмотр исходного кода

交货单生成添加要货令场景

heteng 2 лет назад
Родитель
Сommit
5753d7d981

+ 64 - 2
MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

@@ -6315,7 +6315,7 @@ namespace Business.Replenishment
         {
             string Msg = "OK|交货单生成成功";
             //获取已发布且净需求数量大于0的交货计划数据
-            var demandplans = _icdemandschedule.GetListAsync(p=>p.factory_id.ToString() == domain && p.status.ToUpper() == "P" && p.tosechedqty > 0 && !p.IsDeleted).Result;
+            var demandplans = _icdemandschedule.GetListAsync(p => p.factory_id.ToString() == domain && p.status.ToUpper() == "P" && p.tosechedqty > 0 && !p.IsDeleted).Result.OrderBy(p => p.arrivaldate).ToList();
             //获取已以生成交货单的交货计划
             var alreadys = _srmpolistds.Select(p => p.domain == domain && demandplans.Select(m => m.Id).Contains(p.icdsid) && p.isactive == 1).ToList();
             if (alreadys.Any())
@@ -6470,12 +6470,13 @@ namespace Business.Replenishment
                     //供应商占用数量置0
                     sumNeedQty = 0m;
                     //计算当前供应商分配数量
-                    needQty = item.tosechedqty * pch.quota_rate.GetValueOrDefault() / 100.00m;
+                    needQty = Math.Ceiling(item.tosechedqty * pch.quota_rate.GetValueOrDefault() / 100.00m);
                     //如果交货计划剩余数量小于按照供应商配额计算的数量,则当前供应商需分配数量为交货计划剩余数量
                     if (item.tosechedqty - allQty < needQty)
                     {
                         needQty = item.tosechedqty - allQty;
                     }
+                    //以下为供应商是采购申请场景
                     //获取当前供应商对应的采购单明细数据,按照交货日期从小到大开始占用
                     var pchPurMsts = curPurMsts.Where(p => p.Supp == pch.supplier_number).ToList();
                     if (!pchPurMsts.Any())
@@ -6534,6 +6535,67 @@ namespace Business.Replenishment
                         break;
                     }
 
+                    //如果当前供应商为要货令,则查找对应的要货令,直接转成交货单
+                    if (pch.IsRequireGoods == 1)
+                    {
+                        DateTime startDay = item.requestdate.AddDays(-10);
+                        DateTime endDay = item.requestdate.AddDays(-4);
+                        //获取对应要货令数据
+                        var yhlDtls = pchPurDtls.Where(p=> p.PurOrd.StartsWith("DO") && (p.QtyOrded - p.RctQty) == needQty && p.DueDate >= startDay && p.DueDate <= endDay).ToList();
+                        if (yhlDtls.Any())
+                        {
+                            foreach (var yhl in yhlDtls)
+                            {
+                                //生成实体
+                                entity = new srm_polist_ds();
+                                entity.Id = help.NextId();
+                                entity.domain = domain;
+                                entity.icdsid = item.Id;
+                                //交货单号最后一次性生成
+                                entity.dsnum = "";
+                                entity.status = "N";
+                                entity.itemnum = item.itemnum;
+                                entity.um = "";
+                                entity.purgroup = "";
+                                entity.suppliercode = pch.supplier_number;
+                                entity.supplier = pch.supplier_name;
+                                entity.requestdate = item.arrivaldate;
+                                entity.needdate = item.requestdate;
+                                entity.ponumber = yhl.PurOrd;
+                                entity.poline = yhl.Line;
+                                entity.schedqty = needQty;
+                                entity.lastsentqty = 0m;
+                                entity.sentqty = 0m;
+                                entity.restqty = needQty;
+                                entity.createtime = DateTime.Now;
+                                entity.createuser = user;
+                                entity.remarks = "";
+                                entity.isactive = 1;
+                                curInserts.Add(entity);
+                            }
+                            
+                            //当前交货计划已分配数量累加
+                            allQty += needQty;
+                            //当前供应商已分配数量累加
+                            sumNeedQty += needQty;
+                            continue;
+                        }
+                        else {
+                            //当前供应商可用采购单明细不足,则当前交货计划无法转交货单
+                            info = new DeliveryExceptionMaster();
+                            info.Domain = domain;
+                            info.Icdsid = item.Id;
+                            info.ItemNum = item.itemnum;
+                            info.CreateTime = DateTime.Now;
+                            info.Remark = "物料[" + item.itemnum + "]对应供应商[" + pch.supplier_name + "]要货令明细可用数量不足,无法转交货单";
+                            info.OptTime = optime;
+                            exceptions.Add(info);
+
+                            flag = true;
+                            break;
+                        }
+                    }
+
                     foreach (var pud in pchPurDtls)
                     {
                         if (sumNeedQty >= needQty)