|
|
@@ -6693,6 +6693,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.OrderBy(p => p.arrivaldate).ToList();
|
|
|
+ //var demandplans = _icdemandschedule.GetListAsync(p => p.factory_id.ToString() == domain && p.status.ToUpper() == "P" && p.itemnum == "94000266" && 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();
|
|
|
List<ic_demandschedule> newPlans = new List<ic_demandschedule>();
|
|
|
@@ -6730,9 +6731,18 @@ namespace Business.Replenishment
|
|
|
}
|
|
|
demandplans = newPlans;
|
|
|
}
|
|
|
+ //根据交货计划物料编码,获取物料属性为采购件的物料主数据
|
|
|
+ List<ItemMaster> itemMasters = _itemMaster.Select(p => demandplans.Select(m => m.itemnum).Contains(p.ItemNum) && p.Domain == domain && (p.PurMfg == "P" || p.PurMfg == "p")).ToList();
|
|
|
+ if (!itemMasters.Any())
|
|
|
+ {
|
|
|
+ Msg = "OK|物料需求计划中没有采购件,不需要生成交货单";
|
|
|
+ return Msg;
|
|
|
+ }
|
|
|
+ //过滤掉物料属性不为采购件的交货计划
|
|
|
+ demandplans = demandplans.Where(p => itemMasters.Select(m => m.ItemNum).Contains(p.itemnum)).ToList();
|
|
|
if (!demandplans.Any())
|
|
|
{
|
|
|
- Msg = "OK|没有需要生成的交货单";
|
|
|
+ Msg = "OK|物料需求计划中没有采购件,不需要生成交货单";
|
|
|
return Msg;
|
|
|
}
|
|
|
//获取货源清单数据
|
|
|
@@ -6790,7 +6800,7 @@ namespace Business.Replenishment
|
|
|
info.Icdsid = demandplans[i].Id;
|
|
|
info.ItemNum = demandplans[i].itemnum;
|
|
|
info.CreateTime = DateTime.Now;
|
|
|
- info.Remark = "交货计划[" + demandplans[i].itemnum + ":" + demandplans[i].requestdate.ToString("yyyy-MM-dd") + "]没有维护货源清单,无法转交货单";
|
|
|
+ info.Remark = "物料需求计划[" + demandplans[i].itemnum + ":" + demandplans[i].requestdate.ToString("yyyy-MM-dd") + "]没有维护货源清单,无法转交货单";
|
|
|
info.OptTime = optime;
|
|
|
exceptions.Add(info);
|
|
|
continue;
|
|
|
@@ -6803,7 +6813,7 @@ namespace Business.Replenishment
|
|
|
info.Icdsid = demandplans[i].Id;
|
|
|
info.ItemNum = demandplans[i].itemnum;
|
|
|
info.CreateTime = DateTime.Now;
|
|
|
- info.Remark = "交货计划[" + demandplans[i].itemnum + ":" + demandplans[i].requestdate.ToString("yyyy-MM-dd") + "]的货源清单供应商配额之和不为100%,无法转交货单";
|
|
|
+ info.Remark = "物料需求计划[" + demandplans[i].itemnum + ":" + demandplans[i].requestdate.ToString("yyyy-MM-dd") + "]的货源清单供应商配额之和不为100%,无法转交货单";
|
|
|
info.OptTime = optime;
|
|
|
exceptions.Add(info);
|
|
|
continue;
|
|
|
@@ -6818,7 +6828,7 @@ namespace Business.Replenishment
|
|
|
info.Icdsid = demandplans[i].Id;
|
|
|
info.ItemNum = demandplans[i].itemnum;
|
|
|
info.CreateTime = DateTime.Now;
|
|
|
- info.Remark = "交货计划[" + demandplans[i].itemnum + ":" + demandplans[i].requestdate.ToString("yyyy-MM-dd") + "]没有可占用的采购明细,无法转交货单";
|
|
|
+ info.Remark = "物料需求计划[" + demandplans[i].itemnum + ":" + demandplans[i].requestdate.ToString("yyyy-MM-dd") + "]没有可占用的采购明细,无法转交货单";
|
|
|
info.OptTime = optime;
|
|
|
exceptions.Add(info);
|
|
|
continue;
|
|
|
@@ -6847,7 +6857,7 @@ namespace Business.Replenishment
|
|
|
info.Icdsid = demandplans[i].Id;
|
|
|
info.ItemNum = demandplans[i].itemnum;
|
|
|
info.CreateTime = DateTime.Now;
|
|
|
- info.Remark = "交货计划[" + demandplans[i].itemnum + ":" + demandplans[i].requestdate.ToString("yyyy-MM-dd") + "]的采购明细可用数量不足,无法转交货单";
|
|
|
+ info.Remark = "物料需求计划[" + demandplans[i].itemnum + ":" + demandplans[i].requestdate.ToString("yyyy-MM-dd") + "]的采购明细可用数量不足,无法转交货单";
|
|
|
info.OptTime = optime;
|
|
|
exceptions.Add(info);
|
|
|
continue;
|
|
|
@@ -6895,7 +6905,7 @@ namespace Business.Replenishment
|
|
|
info.Icdsid = demandplans[i].Id;
|
|
|
info.ItemNum = demandplans[i].itemnum;
|
|
|
info.CreateTime = DateTime.Now;
|
|
|
- info.Remark = "交货计划[" + demandplans[i].itemnum + ":" + demandplans[i].requestdate.ToString("yyyy-MM-dd") + "]对应供应商[" + curChaes[j].supplier_name + "]没有可用采购明细,无法转交货单";
|
|
|
+ info.Remark = "物料需求计划[" + demandplans[i].itemnum + ":" + demandplans[i].requestdate.ToString("yyyy-MM-dd") + "]对应供应商[" + curChaes[j].supplier_name + "]没有可用采购明细,无法转交货单";
|
|
|
info.OptTime = optime;
|
|
|
exceptions.Add(info);
|
|
|
|
|
|
@@ -6938,7 +6948,7 @@ namespace Business.Replenishment
|
|
|
info.Icdsid = demandplans[i].Id;
|
|
|
info.ItemNum = demandplans[i].itemnum;
|
|
|
info.CreateTime = DateTime.Now;
|
|
|
- info.Remark = "交货计划[" + demandplans[i].itemnum + ":" + demandplans[i].requestdate.ToString("yyyy-MM-dd") + "]对应供应商[" + curChaes[j].supplier_name + "]采购明细可用数量不足,无法转交货单";
|
|
|
+ info.Remark = "物料需求计划[" + demandplans[i].itemnum + ":" + demandplans[i].requestdate.ToString("yyyy-MM-dd") + "]对应供应商[" + curChaes[j].supplier_name + "]采购明细可用数量不足,无法转交货单";
|
|
|
info.OptTime = optime;
|
|
|
exceptions.Add(info);
|
|
|
|
|
|
@@ -6946,8 +6956,9 @@ namespace Business.Replenishment
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- //采购单按照需求日期从小到大排
|
|
|
- pchPurDtls = pchPurDtls.OrderBy(p => p.DueDate).ToList();
|
|
|
+ //采购单明细优先级:先PO,按照交货日期从早到晚占用;再DO,按照交货日期从早到晚占用
|
|
|
+ //pchPurDtls = pchPurDtls.OrderBy(p => p.DueDate).ToList();
|
|
|
+ pchPurDtls = CalcPurDetailPriority(pchPurDtls);
|
|
|
for (int k = 0; k < pchPurDtls.Count; k++)
|
|
|
{
|
|
|
if (sumNeedQty >= needQty)
|
|
|
@@ -6956,7 +6967,7 @@ namespace Business.Replenishment
|
|
|
break;
|
|
|
}
|
|
|
//当前采购明细剩余数量=订单数量-送货单数量(不是由交货单转的送货单)
|
|
|
- decimal syQty = pchPurDtls[k].QtyOrded - pchShds.Where(p => p.po_billline == pchPurDtls[k].Line.ToString()).Sum(p=>p.sh_delivery_quantity);
|
|
|
+ decimal syQty = pchPurDtls[k].QtyOrded - pchShds.Where(p => p.po_bill == pchPurDtls[k].PurOrd && p.po_billline == pchPurDtls[k].Line.ToString()).Sum(p=>p.sh_delivery_quantity);
|
|
|
//当前采购明细被占用数量(已占用数量)
|
|
|
var occupy = pchDbOccupys.Where(p => p.ponumber == pchPurDtls[k].PurOrd && p.itemnum == pchPurDtls[k].ItemNum && p.poline == pchPurDtls[k].Line).ToList();
|
|
|
decimal yzyQty = occupy.Where(p=>p.status.ToUpper() == "C").Sum(p => p.sentqty) + occupy.Where(p=>p.status.ToUpper() != "C").Sum(p=>p.schedqty);
|
|
|
@@ -7078,5 +7089,29 @@ namespace Business.Replenishment
|
|
|
}
|
|
|
return Msg;
|
|
|
}
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 计算采购单明细的占用优先级
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="details"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public List<PurOrdDetail> CalcPurDetailPriority(List<PurOrdDetail> details)
|
|
|
+ {
|
|
|
+ List<PurOrdDetail> newDetails = new List<PurOrdDetail>();
|
|
|
+ //获取DO
|
|
|
+ var doLists = details.Where(p => p.PurOrd.StartsWith("DO")).OrderBy(p=>p.DueDate).ToList();
|
|
|
+ //获取PO
|
|
|
+ var poLists = details.Where(p => !doLists.Select(m => m.PurOrd).Contains(p.PurOrd)).OrderBy(p => p.DueDate).ToList();
|
|
|
+ foreach (var item in poLists)
|
|
|
+ {
|
|
|
+ newDetails.Add(item);
|
|
|
+ }
|
|
|
+ foreach (var item in doLists)
|
|
|
+ {
|
|
|
+ newDetails.Add(item);
|
|
|
+ }
|
|
|
+ return newDetails;
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|