Refactor unit pricing logic in feeds.cjs to enhance compliance with German regulations. Updated the helper function to return structured unit pricing data, including both unit and base measures, and adjusted XML generation accordingly.
This commit is contained in:
@@ -11,20 +11,29 @@ Crawl-delay: 0
|
|||||||
return robotsTxt;
|
return robotsTxt;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Helper function to determine unit pricing measure based on product data
|
// Helper function to determine unit pricing data based on product data
|
||||||
const determineUnitPricingMeasure = (product) => {
|
const determineUnitPricingData = (product) => {
|
||||||
// Use the actual unit data from the product structure
|
const result = {
|
||||||
|
unit_pricing_measure: null,
|
||||||
|
unit_pricing_base_measure: null
|
||||||
|
};
|
||||||
|
|
||||||
|
// unit_pricing_measure: The quantity unit of the product as it's sold
|
||||||
if (product.fEinheitMenge && product.cEinheit) {
|
if (product.fEinheitMenge && product.cEinheit) {
|
||||||
const amount = parseFloat(product.fEinheitMenge);
|
const amount = parseFloat(product.fEinheitMenge);
|
||||||
const unit = product.cEinheit.trim();
|
const unit = product.cEinheit.trim();
|
||||||
|
|
||||||
if (amount > 0 && unit) {
|
if (amount > 0 && unit) {
|
||||||
return `${amount} ${unit}`;
|
result.unit_pricing_measure = `${amount}${unit}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return null if no unit data available - don't corrupt data with fallbacks
|
// unit_pricing_base_measure: The base quantity unit for unit pricing
|
||||||
return null;
|
if (product.cGrundEinheit && product.cGrundEinheit.trim()) {
|
||||||
|
result.unit_pricing_base_measure = product.cGrundEinheit.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
const generateProductsXml = (allProductsData = [], baseUrl, config) => {
|
const generateProductsXml = (allProductsData = [], baseUrl, config) => {
|
||||||
@@ -341,11 +350,15 @@ const generateProductsXml = (allProductsData = [], baseUrl, config) => {
|
|||||||
<g:shipping_weight>${parseFloat(product.weight).toFixed(2)} g</g:shipping_weight>`;
|
<g:shipping_weight>${parseFloat(product.weight).toFixed(2)} g</g:shipping_weight>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add unit pricing measure (required by German law for many products)
|
// Add unit pricing data (required by German law for many products)
|
||||||
const unitPricingMeasure = determineUnitPricingMeasure(product);
|
const unitPricingData = determineUnitPricingData(product);
|
||||||
if (unitPricingMeasure) {
|
if (unitPricingData.unit_pricing_measure) {
|
||||||
productsXml += `
|
productsXml += `
|
||||||
<g:unit_pricing_measure>${unitPricingMeasure}</g:unit_pricing_measure>`;
|
<g:unit_pricing_measure>${unitPricingData.unit_pricing_measure}</g:unit_pricing_measure>`;
|
||||||
|
}
|
||||||
|
if (unitPricingData.unit_pricing_base_measure) {
|
||||||
|
productsXml += `
|
||||||
|
<g:unit_pricing_base_measure>${unitPricingData.unit_pricing_base_measure}</g:unit_pricing_base_measure>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
productsXml += `
|
productsXml += `
|
||||||
|
|||||||
Reference in New Issue
Block a user