Skip to content

Instantly share code, notes, and snippets.

@hnestmann
Created June 13, 2022 06:05
Show Gist options
  • Save hnestmann/e049139124a0d6af0722cabc863e745f to your computer and use it in GitHub Desktop.
Save hnestmann/e049139124a0d6af0722cabc863e745f to your computer and use it in GitHub Desktop.
/**
* Input: Line separated SKUs (e.g grepped from catalog export), inventory export
* Output: inventory import of all 0 item items
*
* Original use case: customer shows Back-in-Stock only if item has zero item inventory, however production cleaned 0 to null removing bis
*/
const fs = require('fs');
var readlines = require('n-readlines')
var myArgs = process.argv.slice(2);
var argsObject = {};
myArgs.forEach((element) => {
if (element.startsWith('--')) {
argsObject[element.substring(2)] = '';
argsObject.lastKey = element.substring(2);
} else {
argsObject[argsObject.lastKey] += element;
}
})
main(argsObject)
function main(parameters) {
console.info("Start Reading");
var liner = new readlines(parameters.source);
console.info("Finished Reading");
fs.writeFileSync('target/customers.xml',
'<customers xmlns="http://www.demandware.com/xml/impex/customer/2006-10-31">', (err) => { console.error(err); });
var currentCustomerNo = null;
var currentCustomerXML = '';
var currentAddressID = '';
var addressCandidate = '';
var traceMap = false;
var persistAddress = false;
var brokenCustomer = 0;
var brokenCustomer2 = 0;
var customer = 0;
var houseNoRegex = /<custom-attribute attribute-id="houseNumber">(.*)<\/custom-attribute>/
var multiLineAddressesRegrexp = /(.*[\s\S]*?)(<addresses.*[\s\S]*?<\/addresses>)/g;
var multiLineAddressRegrexp = /.*<address.*[\s\S]*?<\/address>/g;
var addressLine1Regexp = /<address1>(.*)<\/address1>/;
i = 0;
while (next = liner.next()) {
var line = next.toString('utf8');
if (line.includes('<customer customer-no="')) {
if (currentCustomerXML) {
var addresses = currentCustomerXML.split('<address address-id');
var newAddresses = []
addresses = addresses.map(address => {
if (address.match(houseNoRegex)) {
address = address.replace(' ' + address.match(houseNoRegex)[1] + '</address1>', '</address1>')
}
return address;
});
if (currentCustomerXML.match(multiLineAddressesRegrexp)) {
currentCustomerXML = currentCustomerXML.match(multiLineAddressesRegrexp)[1] + addresses.join('<address address-id')
}
if (currentCustomerXML) {
fs.appendFileSync('target/customers.xml', currentCustomerXML + '\n');
}
}
currentCustomerXML = '';
currentCustomerNo = line.match(/<customer customer-no="(.*)"/)[1]
customer++;
}
if (currentCustomerNo) {
currentCustomerXML += line + '\n';
}
i++;
if (i > 20000) {
// break
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment