|
|
|
|
@ -42,6 +42,12 @@
|
|
|
|
|
${ew.getCustomSqlSegment}
|
|
|
|
|
</select>
|
|
|
|
|
|
|
|
|
|
<!--
|
|
|
|
|
projectId 与前端台账 getContractOrderPurchaseMaterialList(bizProjectId) 一致:实施项目 project_id。
|
|
|
|
|
合同物料范围:erp_project_contracts 或 erp_project_info 上挂的本项目合同。
|
|
|
|
|
已采数量 = 备件类(relation_details_id=合同物料ID,与项目采购编辑页 selectContractMaterialsByProjectId 一致,按合同ID 关联)
|
|
|
|
|
+ 非备件预算类(relation_details_id=预算材料费ID,pp.relation_id=bmc.budget_id,预算行与本项目、采购头 project_id 均为传入 projectId,再按合同行 material_id / relation_material_id 与预算行对齐)。
|
|
|
|
|
-->
|
|
|
|
|
<select id="selectPurchaseMatchListByProjectId" resultMap="ErpContractOrderPurchaseMaterialResult">
|
|
|
|
|
select cm.contract_material_id,
|
|
|
|
|
cm.contract_id,
|
|
|
|
|
@ -51,18 +57,17 @@
|
|
|
|
|
cm.specification_description,
|
|
|
|
|
u.unit_name,
|
|
|
|
|
cm.amount as contract_amount,
|
|
|
|
|
pm.purchased_amount as purchased_amount,
|
|
|
|
|
(coalesce(pm_spare.purchased_amount, 0) + coalesce(pm_budget.purchased_amount, 0)) as purchased_amount,
|
|
|
|
|
case
|
|
|
|
|
when coalesce(pm.purchased_amount, 0) >= cm.amount then 0
|
|
|
|
|
else cm.amount - coalesce(pm.purchased_amount, 0)
|
|
|
|
|
when (coalesce(pm_spare.purchased_amount, 0) + coalesce(pm_budget.purchased_amount, 0)) >= cm.amount then 0
|
|
|
|
|
else cm.amount - (coalesce(pm_spare.purchased_amount, 0) + coalesce(pm_budget.purchased_amount, 0))
|
|
|
|
|
end as unpurchased_amount
|
|
|
|
|
from erp_contract_material cm
|
|
|
|
|
inner join erp_project_info pi on pi.project_id = #{projectId}
|
|
|
|
|
and pi.del_flag = '0'
|
|
|
|
|
left join base_material_info m on m.material_id = cm.material_id
|
|
|
|
|
left join base_relation_material r on r.relation_material_id = cm.relation_material_id
|
|
|
|
|
left join base_unit_info u on u.unit_id = cm.unit_id
|
|
|
|
|
left join (select ppm.relation_details_id,
|
|
|
|
|
pp.relation_id,
|
|
|
|
|
sum(coalesce(ppm.purchase_amount, 0)) as purchased_amount
|
|
|
|
|
from erp_project_purchase_material ppm
|
|
|
|
|
inner join erp_project_purchase pp on pp.project_purchase_id = ppm.project_purchase_id
|
|
|
|
|
@ -70,13 +75,53 @@
|
|
|
|
|
and pp.spare_flag = '1'
|
|
|
|
|
where ppm.del_flag = '0'
|
|
|
|
|
and ppm.spare_flag = '1'
|
|
|
|
|
and pp.relation_id = (select contract_id
|
|
|
|
|
from erp_project_info
|
|
|
|
|
where project_id = #{projectId}
|
|
|
|
|
and del_flag = '0')
|
|
|
|
|
group by ppm.relation_details_id) pm on pm.relation_details_id = cm.contract_material_id
|
|
|
|
|
group by ppm.relation_details_id, pp.relation_id) pm_spare
|
|
|
|
|
on pm_spare.relation_details_id = cm.contract_material_id
|
|
|
|
|
and pm_spare.relation_id = cm.contract_id
|
|
|
|
|
left join (select cm_line.contract_material_id,
|
|
|
|
|
sum(coalesce(ppm.purchase_amount, 0)) as purchased_amount
|
|
|
|
|
from erp_contract_material cm_line
|
|
|
|
|
inner join erp_budget_material_cost bmc on bmc.project_id = #{projectId}
|
|
|
|
|
and bmc.del_flag = '0'
|
|
|
|
|
and (
|
|
|
|
|
(cm_line.material_id is not null and bmc.material_id = cm_line.material_id)
|
|
|
|
|
or (cm_line.material_id is null and cm_line.relation_material_id is not null
|
|
|
|
|
and bmc.relation_material_id = cm_line.relation_material_id)
|
|
|
|
|
)
|
|
|
|
|
inner join erp_project_purchase_material ppm on ppm.relation_details_id = bmc.material_cost_id
|
|
|
|
|
and ppm.del_flag = '0'
|
|
|
|
|
and ppm.spare_flag = '0'
|
|
|
|
|
inner join erp_project_purchase pp on pp.project_purchase_id = ppm.project_purchase_id
|
|
|
|
|
and pp.del_flag = '0'
|
|
|
|
|
and pp.spare_flag = '0'
|
|
|
|
|
and pp.project_id = #{projectId}
|
|
|
|
|
and pp.relation_id = bmc.budget_id
|
|
|
|
|
where cm_line.del_flag = '0'
|
|
|
|
|
and (
|
|
|
|
|
exists (select 1 from erp_project_contracts pc2
|
|
|
|
|
where pc2.project_id = #{projectId}
|
|
|
|
|
and pc2.contract_id = cm_line.contract_id
|
|
|
|
|
and pc2.del_flag = '0')
|
|
|
|
|
or exists (select 1 from erp_project_info pi2
|
|
|
|
|
where pi2.project_id = #{projectId}
|
|
|
|
|
and pi2.del_flag = '0'
|
|
|
|
|
and pi2.contract_id is not null
|
|
|
|
|
and pi2.contract_id = cm_line.contract_id)
|
|
|
|
|
)
|
|
|
|
|
group by cm_line.contract_material_id) pm_budget
|
|
|
|
|
on pm_budget.contract_material_id = cm.contract_material_id
|
|
|
|
|
where cm.del_flag = '0'
|
|
|
|
|
and cm.contract_id = pi.contract_id
|
|
|
|
|
and (
|
|
|
|
|
exists (select 1 from erp_project_contracts pc
|
|
|
|
|
where pc.project_id = #{projectId}
|
|
|
|
|
and pc.contract_id = cm.contract_id
|
|
|
|
|
and pc.del_flag = '0')
|
|
|
|
|
or exists (select 1 from erp_project_info pi
|
|
|
|
|
where pi.project_id = #{projectId}
|
|
|
|
|
and pi.del_flag = '0'
|
|
|
|
|
and pi.contract_id is not null
|
|
|
|
|
and pi.contract_id = cm.contract_id)
|
|
|
|
|
)
|
|
|
|
|
order by cm.contract_material_id asc
|
|
|
|
|
</select>
|
|
|
|
|
|
|
|
|
|
|