diff --git a/ui/src/pages/ProductionProductCostingHasCostDetail.vue b/ui/src/pages/ProductionProductCostingHasCostDetail.vue index 207a3d1..d32db54 100644 --- a/ui/src/pages/ProductionProductCostingHasCostDetail.vue +++ b/ui/src/pages/ProductionProductCostingHasCostDetail.vue @@ -3936,12 +3936,24 @@ async function fetchRequiredParcaMappings () { const data = await fetchMappings(ilk) const mappings = Array.isArray(data) ? data : [] - if (mappings.length > 0 || !isMalzemesizFasonProduct()) return mappings + if (!isMalzemesizFasonProduct()) return mappings - // MALZEMESIZ FASON uses the same required-part definition as its - // MALZEMELI FASON counterpart for the same product main/sub group. - const fallback = await fetchMappings('MALZEMELI FASON') - return Array.isArray(fallback) ? fallback : [] + // MALZEMESIZ FASON inherits required parts from MALZEMELI FASON at + // Urun Ana Grubu level. Do not require an exact alt-group match: the + // business rule is defined by the main group, and a partial MALZEMESIZ + // mapping must not prevent the inherited missing parts from appearing. + const inheritedData = await get('/pricing/production-product-costing/maliyet-parca-eslestirme', { + trace_id: traceId.value, + only_active: 1, + urun_ilk_grubu: 'MALZEMELI FASON', + urun_ana_grubu: ana, + urun_alt_grubu: '' + }) + const inheritedMappings = Array.isArray(inheritedData) ? inheritedData : [] + + // Keep both sources. ensureNoCostRequiredRowsFromMappings de-duplicates + // required rows by MT section + raw-material type. + return [...mappings, ...inheritedMappings] } async function resolveHammaddeMetaForRequired (hNo) {