|
|
@@ -6975,162 +6975,6 @@ namespace Business.Replenishment
|
|
|
sumNeedQty += xqQty;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- foreach (var pch in curChaes)
|
|
|
- {
|
|
|
- if (pch.quota_rate.GetValueOrDefault() == 0)
|
|
|
- {
|
|
|
- continue;
|
|
|
- }
|
|
|
- //如果交货计划已分配数量>=交货计划净需求数量,则终止
|
|
|
- if (allQty >= demandplans[i].tosechedqty)
|
|
|
- {
|
|
|
- break;
|
|
|
- }
|
|
|
- //供应商占用数量置0
|
|
|
- sumNeedQty = 0m;
|
|
|
- //计算当前供应商分配数量
|
|
|
- needQty = Math.Ceiling(demandplans[i].tosechedqty * pch.quota_rate.GetValueOrDefault() / 100.00m);
|
|
|
- //如果交货计划剩余数量小于按照供应商配额计算的数量,则当前供应商需分配数量为交货计划剩余数量
|
|
|
- if (demandplans[i].tosechedqty - allQty < needQty)
|
|
|
- {
|
|
|
- needQty = demandplans[i].tosechedqty - allQty;
|
|
|
- }
|
|
|
- //以下为供应商是采购申请场景
|
|
|
- //获取当前供应商对应的采购单明细数据,按照交货日期从小到大开始占用
|
|
|
- var pchPurMsts = curPurMsts.Where(p => p.Supp == pch.supplier_number).ToList();
|
|
|
- if (!pchPurMsts.Any())
|
|
|
- {
|
|
|
- //当前供应商没有可用采购单,则当前交货计划无法转交货单
|
|
|
- info = new DeliveryExceptionMaster();
|
|
|
- info.Domain = domain;
|
|
|
- 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") + "]对应供应商[" + pch.supplier_name + "]没有可用采购明细,无法转交货单";
|
|
|
- info.OptTime = optime;
|
|
|
- exceptions.Add(info);
|
|
|
-
|
|
|
- flag = true;
|
|
|
- break;
|
|
|
- }
|
|
|
- var pchPurDtls = curPurDtls.Where(p => pchPurMsts.Select(m => m.PurOrd).Contains(p.PurOrd)).ToList();
|
|
|
- if (!pchPurDtls.Any())
|
|
|
- {
|
|
|
- //当前供应商没有可用采购单明细,则当前交货计划无法转交货单
|
|
|
- info = new DeliveryExceptionMaster();
|
|
|
- info.Domain = domain;
|
|
|
- info.Icdsid = demandplans[i].Id;
|
|
|
- info.ItemNum = demandplans[i].itemnum;
|
|
|
- info.CreateTime = DateTime.Now;
|
|
|
- info.Remark = "物料[" + demandplans[i].itemnum + "]对应供应商[" + pch.supplier_name + "]没有可用采购明细,无法转交货单";
|
|
|
- info.OptTime = optime;
|
|
|
- exceptions.Add(info);
|
|
|
-
|
|
|
- flag = true;
|
|
|
- break;
|
|
|
- }
|
|
|
- //校验当前供应商的采购明细剩余可用数量是否满足供应商的配额
|
|
|
- //采购单明细剩余可用数量
|
|
|
- sumRestQty = pchPurDtls.Sum(p => p.QtyOrded - p.RctQty);
|
|
|
- //交货单占用数量:交货单的剩余需要采购数量
|
|
|
- sumDbOccupy = curDbOccupys.Where(p => pchPurDtls.Select(m => m.PurOrd).Contains(p.ponumber)).Sum(p => p.restqty);
|
|
|
- //本次计算交货单占用数量:本次计算交货单的需求数量
|
|
|
- sumCurOccupy = curCalcOccupys.Where(p => pchPurDtls.Select(m => m.PurOrd).Contains(p.ponumber)).Sum(p => p.schedqty);
|
|
|
- //剩余可用数量
|
|
|
- restQty = sumRestQty - sumDbOccupy - sumCurOccupy;
|
|
|
- if (restQty < needQty)
|
|
|
- {
|
|
|
- //当前供应商可用采购单明细不足,则当前交货计划无法转交货单
|
|
|
- info = new DeliveryExceptionMaster();
|
|
|
- info.Domain = domain;
|
|
|
- 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") + "]对应供应商[" + pch.supplier_name + "]采购明细可用数量不足,无法转交货单";
|
|
|
- info.OptTime = optime;
|
|
|
- exceptions.Add(info);
|
|
|
-
|
|
|
- flag = true;
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- foreach (var pud in pchPurDtls)
|
|
|
- {
|
|
|
- if (sumNeedQty >= needQty)
|
|
|
- {
|
|
|
- //当前供应商配额以满足,循环下一个供应商
|
|
|
- break;
|
|
|
- }
|
|
|
- //当前采购明细剩余数量=订单数量-已收数量
|
|
|
- decimal syQty = pud.QtyOrded - pud.RctQty;
|
|
|
- //当前采购明细被占用数量(已占用数量)
|
|
|
- var occupy = curDbOccupys.Where(p => p.ponumber == pud.PurOrd && p.itemnum == pud.ItemNum && p.poline == pud.Line).ToList();
|
|
|
- decimal yzyQty = occupy.Sum(p => p.restqty);
|
|
|
- //当前计算中采购明细被占用数量(本次计算占用数量)
|
|
|
- var calcs = inserts.Where(p => p.ponumber == pud.PurOrd && p.itemnum == pud.ItemNum && p.poline == pud.Line).ToList();
|
|
|
- decimal bzyQty = calcs.Sum(p => p.schedqty);
|
|
|
-
|
|
|
- //当前采购明细可用数量
|
|
|
- decimal kyQty = syQty - yzyQty - bzyQty;
|
|
|
- //剩余需要分配数量
|
|
|
- remainQty = needQty - sumNeedQty;
|
|
|
- //当前采购明细已被全部占用,循环下一条采购明细
|
|
|
- if (kyQty == 0)
|
|
|
- {
|
|
|
- continue;
|
|
|
- }
|
|
|
- decimal xqQty = 0m;
|
|
|
- //当前采购明细的可用数量不满足交货单剩余需要分配数量
|
|
|
- if (kyQty < remainQty)
|
|
|
- {
|
|
|
- //占用当前采购明细剩余可用数量
|
|
|
- xqQty = kyQty;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- xqQty = remainQty;
|
|
|
- //按照最小包装量圆整:最小包装量为0,则不需要圆整
|
|
|
- decimal yzQty = pch.packaging_qty.GetValueOrDefault() == 0 ? remainQty : Math.Ceiling(remainQty / pch.packaging_qty.GetValueOrDefault()) * pch.packaging_qty.GetValueOrDefault();
|
|
|
- //如果可用数量大于圆整数量
|
|
|
- if (kyQty >= yzQty)
|
|
|
- {
|
|
|
- xqQty = yzQty;
|
|
|
- }
|
|
|
- }
|
|
|
- //生成实体
|
|
|
- entity = new srm_polist_ds();
|
|
|
- entity.Id = help.NextId();
|
|
|
- entity.domain = domain;
|
|
|
- entity.icdsid = demandplans[i].Id;
|
|
|
- //交货单号最后一次性生成
|
|
|
- entity.dsnum = "";
|
|
|
- entity.status = "N";
|
|
|
- entity.itemnum = demandplans[i].itemnum;
|
|
|
- entity.um = "";
|
|
|
- entity.purgroup = "";
|
|
|
- entity.suppliercode = pch.supplier_number;
|
|
|
- entity.supplier = string.IsNullOrEmpty(pch.supplier_name) ? "" : pch.supplier_name;
|
|
|
- entity.requestdate = demandplans[i].arrivaldate;
|
|
|
- entity.needdate = demandplans[i].requestdate;
|
|
|
- entity.ponumber = pud.PurOrd;
|
|
|
- entity.poline = pud.Line;
|
|
|
- entity.schedqty = xqQty;
|
|
|
- entity.lastsentqty = 0m;
|
|
|
- entity.sentqty = 0m;
|
|
|
- entity.restqty = xqQty;
|
|
|
- entity.createtime = DateTime.Now;
|
|
|
- entity.createuser = user;
|
|
|
- entity.remarks = "";
|
|
|
- entity.isactive = 1;
|
|
|
- curInserts.Add(entity);
|
|
|
-
|
|
|
- //当前交货计划已分配数量累加
|
|
|
- allQty += xqQty;
|
|
|
- //当前供应商已分配数量累加
|
|
|
- sumNeedQty += xqQty;
|
|
|
- }
|
|
|
- }
|
|
|
//标志位为true,则当前交货计划无法转交货单
|
|
|
if (flag)
|
|
|
{
|
|
|
@@ -7138,8 +6982,6 @@ namespace Business.Replenishment
|
|
|
}
|
|
|
inserts.AddRange(curInserts);
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
if (inserts.Any())
|
|
|
{
|
|
|
//获取交货单号
|