Created
November 19, 2021 09:36
-
-
Save StephaneBunel/12c6890a3b9a429f512e38140ecc9def to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const csvFieldMapper = { | |
"ART_CODE": [mapID, 0], // item.id (ref) | |
"ART_CBAR": [mapProperty, 6], // 6 (ean1) | |
"ART_P_VTE": [mapValue, 0], | |
"ART_P_VTEB": [mapValue, 0], | |
"ART_MSUPPTPF1": [mapValue, 0], | |
"XXX_MARQUE": [mapProperty, 14], // 14 (fournisseur) | |
"ART_P_ACH": [mapProperty, 12], // 12 (prix_vente) | |
"ART_P_ACHUB": [mapProperty, 12], // 12 (prix_vente) | |
"ART_P_PRV": [mapProperty, 12], // 12 (prix_vente) | |
"_LAST_UPDATE": [mapUpdatedAt, ""], // item.updatedAt | |
"_LAST_SEEN": [mapProperty, 21], // 21 (seen_at) | |
"_STOCK": [mapStock, 13], // 13 (ltrim(dispo,'>')) | |
"_WEIGHT": [mapValue, 0], | |
"ART_PFOURN": [mapValue, 2], | |
"ART_NII": [mapProperty, 19], // 19 code_douane | |
"PCF_CODE": [mapValue, "DIFOX00001"], | |
"ART_MEMO": [mapProperty, 16], // 15 liste_accessoires | |
"ART_LIB": [mapLib, ""], // 5 + " " + 3 (sous_famille + " " + designation) | |
"FAR_CODE": [mapSousFamille, 5], // 5 | |
"XXX_PCAT": [mapFamille, 4], // 4 | |
}; | |
const ln = "\n"; | |
const comma = ";"; | |
const header = Object.keys(csvFieldMapper); | |
// main is the entry point | |
function main(jsonItems) { | |
var Items = JSON.parse(jsonItems); | |
var csv = header.join(comma) + ln; | |
for (const item of Items) { | |
var fields = []; | |
for (const title of header) { | |
var fn = csvFieldMapper[title][0]; | |
var arg = csvFieldMapper[title][1]; | |
var v = fn(item, arg); | |
if ((typeof v === "string") && (v.search(/("|;|\n)/g) >= 0)) { | |
v = v.replace(/"/g, '""'); | |
v = '"' + v + '"'; | |
} | |
fields.push(v); | |
} | |
csv += fields.join(comma) + ln; | |
} | |
return csv; | |
} | |
// helper functions | |
function mapID(item, pid) { | |
return item.id | |
} | |
function mapValue(item, value) { | |
return value; | |
} | |
function mapProperty(item, pid) { | |
return (pid in item.values && !("deleteAt" in item.values[pid].status)) ? item.values[pid].value : ""; | |
} | |
function mapUpdatedAt(item, dummy) { | |
return item.createdAt; | |
} | |
function mapStock(item, pid) { | |
var v = mapProperty(item, pid) | |
if (v == "") { return 0; } | |
if (typeof v === "string") { | |
v = v.replace(/\D+/g, ""); | |
} | |
return v; | |
} | |
function mapLib(item) { | |
return mapProperty(item, 5) + " " + mapProperty(item, 3); | |
} | |
function mapFamille(item, pid) { | |
const retMap = { | |
"BRUN": ["electronique grand public", "sport & loisir", "univers jeux video", "energie", "jeux & jouets", "groupeprincipal", "photo", "fins de série %", "outillage & jardinage"], | |
"BLANC": ["cuisine", "soin du corps & santé", "equipement ménager"], | |
"GRIS": ["ordinateur & office", "support de stockage"], | |
} | |
var catchMe = mapProperty(item, pid).toLowerCase(); | |
for (const [ret, arr] of Object.entries(retMap)) { | |
if (arr.some(elem => elem == catchMe)) { | |
return ret; | |
} | |
} | |
return ""; | |
} | |
function mapSousFamille(item, pid) { | |
const retMap = { | |
"TV01": [ | |
"pocket tv", "lcd"], | |
"VIDEOPR15": [ | |
"projection", "écran de projection"], | |
"ANTENNE11": [ | |
"récepteur - satellite", "récepteur - tnt", "antenne tv & satellite"], | |
"HIFI02": [ | |
"amplificateur", "système de musique sans fil", "tourne-disque", "chaîne stéréo - midi/mini/micro", | |
"soundbar & soundboard", "home cinéma", "enceinte - étagère", "subwoofer", "enceintes encastrables", | |
"accessoires - haut-parleur", "haut-parleur smart/multiroom", "mélangeur dj", "ecouteurs dj", | |
"moniteur & haut-parleur", "système tout en 1"], | |
"LAVAGE16": [ | |
"lave-vaisselle pose libre", "lave-vaisselle encastrable", "lave-vaisselle encastrable avec", | |
"lave-vaisselle avec panneau déco", "accessoires - lavage, séchage &"], | |
"CUISSON18": [ | |
"hottes aspirantes", "nettoyage & soin"], | |
"FROID17": [ | |
"réfrigérateur", "combiné réfrigérateur-congélateu", "congélateur", "congélateur armoire", | |
"réfrigérateur américain", "réfrigérateur encastrable"], | |
"ASPIRAT20": [ | |
"aspirateur", "sachets - aspirateur", "accessoires - aspirateur", "aspirateur robot", | |
"aspirateur à main", "aspirateur - injecteur"], | |
"TELEPHO09": [ | |
"téléphonie filaire", "téléphonie sans fil", "accessoires - téléphonie", "fax", "accessoires - fax", | |
"talkie walkie", "talkie-walkie - enfant", "cellulaire", "smartphone", "autres produits électroniques -", | |
"film de protection smartphone"], | |
"VIDEO03": [ | |
"caméscope", "caméras 360°", "caméra embarquée", "caméscope professionel", "lecteur - dvd", | |
"lecteur - blu-ray", "baladeur dvd portable", "lecteur multimedia & récepteur n", "système video", | |
"système de navigation", "outdoor", "navigation routière", "autres accessoires", "système de fixation", | |
"consoles", "accessoires - jeux vidéo", "boîtier"], | |
"JOUET": [ | |
"kits de circuit voiture", "voitures pour circuit", "accessoires pour circuit", "lego", "schleich", | |
"jeux de construction", "véhicules télécommandés", "bateaux télécommandés", "hélicoptères & quadrocoptères té", | |
"jeux de société", "puzzles", "etabli & outils", "ménager, jardin & mini-cuisine", "jeu d'imitation - commerçant", | |
"autres kits", "monde du film", "véhicules & accessoires", "jouet aquatique"], | |
"AUDIO05": [ | |
"radio", "radio-cd-cassette", "radio internet", "radio-réveil", "baladeur cd", "mediaplayer", | |
"dictaphone numérique & accessoir", "microphone", "accessoires - microphone", "autres accessoires - audio", | |
"autoradio", "accessoires - hifi automobile", "amplificateur - voiture", "haut-parleur", "casque à arceau", | |
"ecouteur sans fil", "kit oreillette", "electronique grand public & offi", "écouteur - intra-auriculaire", | |
"casques gaming", "haut-parleur portable"], | |
"OUTILLAGE": [ | |
"marteau perforateur", "perceuse", "meuleuse d'angle", "visseuse", "outillage & jardinage", "scie", | |
"ponceuse", "autres outils", "outillage pneumatique", "outil multifonction", "fraiseuses", "rabot électrique", | |
"radio de chantier", "accessoires - perceuse -", "accessoires - visseuse -", "accessoires - ponceuse -", | |
"accessoires - scie -", "taille-haies", "cisaille & sculpte haies", "tondeuse manuelle & robotisée", | |
"scarificateur & aérateur de pelo", "débroussailleuse & faux", "broyeur", "tronçonneuse", | |
"accessoires - machines de jardin", "nettoyeur à vapeur", "nettoyeur haute-pression", "aspirateur sec/humide", | |
"aspirateur & souffleur de feuill", "balai, pelle & balayeuse", "autres articles - nettoyage", "nettoyage des vitres", | |
"accessoires - nettoyage", "sécateur", "hache & elagueur", "epandeur & rouleaux", "outillage manuel de jardin", | |
"culture du sol", "bêche, fourche & pelle", "système combiné", "autres accessoires - jardin", "pompe", | |
"système d'irrigation", "tuyaux d'arrosage & chariot dévi", "pommes & lances d'arrosage", "connecteur & embrayage", | |
"equipement laser", "appareil de mesure", "multimètre & détecteur de tensio", "appareil de détection & détectio", | |
"autres appareils de mesure / con", "tournevis", "kit d'outils", "clé à molette", "pinces, ciseaux, couteaux", | |
"autre outil manuel", "marteau", "système de rangement d'outils", "rabot, ciseau à bois & raclage", "protection auditive", | |
"lunettes de protection", "casque & masque de protection", "vêtement de travail", "compresseurs", | |
"accessoires - entraînement indoo", "accessoires outillage pneumatiqu"], | |
"PHOTO24": [ | |
"appareil photo - instantané", "cadre photo numérique", "appareil photo - analogique", "appareil photo - compact numériq", | |
"appareil photo - réflex", "appareil photo - hybride", "appareil photo - spécial", "objectifs - réflex", | |
"objectifs - hybride", "posemètre & accessoires", "jumelle", "reprographie & accessoires", | |
"table de prise de vue", "microscope", "télescope", "vision nocturne", | |
"télémètre", "longue-vue", "accessoires d''origine", "photo", | |
"poignée d''alimentation", "accessoires pour laboratoire", "autres accessoires - photo", "balance des blancs / charte gris", | |
"visionneuse & panneau lumineux", "encadrement & accessoires", "cadre photo", "passe-partout & leporello", | |
"papier photo - feuilles", "consommable - borne photo", "films s8", "consommable - périphérique", | |
"accessoires - système de kiosque", "adaptateur de filtre", "microphone directionnel & access", "autres accessoires - studio", | |
"hardware - photo d´identité", "caisson étanche", "accessoires - caméra embarquée", "télécommande & déclencheur à ret", | |
"déclencheur de flash / câble fla", "caisson étanche - caméscope", "protection imperméable", "boîtier outdoor & étanche", | |
"filtres", "convertisseur", "autres accessoires - objectif", "fixation & trépied - caméra emba", | |
"accessoires photo", "film de protection photo", "pare-soleil", "bouchons d''objectif", | |
"adaptateur - objectif", "trépied sans tête", "trépied avec tête", "tête de trépied", | |
"trépied & accessoires", "flash", "flash de studio", "eclairage continu", | |
"système de kiosque", "lampes - projection", "lampe - vidéo", "éclairage, flash, parapluie", | |
"réflecteur", "éclairage studio", "système de fond", "pied d''éclairage", | |
"tente à lumière", "diffuseur de lumière", "flash & accessoires", "films noir & blanc", | |
"négatifs couleur", "table lumineuse", "négatifs couleur pro", "diapositives", | |
"instantanés", "jetables"], | |
"PETITME19": [ | |
"santé & sport connectés", "montre connectée", "montres sport", "accessoires - objet connecté", | |
"bouilloire", "trancheuse", "balance de ménage", "bol mixeur", | |
"mixeur", "oeufrier", "machine à café/à thé à filtre", "machine expresso à levier", | |
"machines à expresso", "toaster", "presse-fruit", "presse-citron", | |
"machine à pain", "moulin à café", "machine à capsules et dosettes", "grains de café", | |
"dosettes & capsules de café", "friteuse", "four à micro-ondes", "barbecue", | |
"raclette", "robot multifonction", "mixeur & batteur", "ouvre-boîte", | |
"gaufrier", "emulsionneur électronique de lai", "hachoir à viande", "soin dentaire", | |
"soin du corps & santé", "rasoir électrique homme", "rasoir pour dame", "epilateur à lumière pulsée", | |
"epilateur", "tondeuse à barbe/cheveux", "soin - cheveux", "sèche-cheveux", | |
"autres - santé", "montre & réveil", "station météorologique", "filtre à eau & accessoire", | |
"thermomètre", "machine de mise sous vide & acce", "autres - sport & fitness -", "beauté & bien-être", | |
"autres - électroménager", "plaque électrique", "sorbetière & pic à glace", "de 0 à 6 mois", | |
"sacs isothermes & glacières", "cuiseur à vapeur", "machine à coudre", "montres d''enfants", | |
"fer à repasser", "centrale vapeur", "humidificateur & déshumidificate", "ventilation", | |
"climatiseur", "radiateur", "accessoires - robot ménager", "accessoires - station météo", | |
"accessoires - soin dentaire", "accessoires - rasoir homme", "autres accessoires - hygiène", "barbecue à gaz", | |
"accessoires - barbecue", "ustensiles de cuisine", "couteaux de cuisine", "ciseaux", | |
"planches à découper", "râpe & eminceur", "plat de cuisson", "presser & ecraser", | |
"machine à nouilles", "moule à gâteau & plaque de cuiss", "ustensiles pour pâtisserie", "rouleau à pâtisserie", | |
"verre gradué", "verres & carafes", "couvert", "accessoires pour bar & vin", | |
"moulin à condiments", "boîte repas", "bac à aliment", "gourde", | |
"tasse & bouteille isotherme", "préparation thé & café", "pichet & vaisselle", "bouteille thermo", | |
"accessoires intérieurs", "boîte à couvercle", "grossesse & allaitement", "erotisme", | |
"babyphone", "babycare", "lampes infrarouge", "couverture & coussin chauffant", | |
"massage", "tensiomètre", "montre cardio", "thermomètre médical", | |
"pèse-personne", "casserole & poêles"], | |
"MICROIN25": [ | |
"liseuse & accessoires", "tablettes", "système de fixation - tablette", "film de protection ordinateur /", | |
"autres accessoires - tablette", "alimentation pc", "onduleur", "écran tft", | |
"scanneur à plat - sans adaptateu", "scanneur à plat - avec adaptateu", "scanneur dia/film", "accessoires - scanneur", | |
"scanneur de documents", "scanneur de cartes de visite", "scanner portable", "imprimante - jet d´encre", | |
"imprimante - laser", "imprimante multifonction - encre", "imprimante multifonction - laser", "imprimante compacte - photo", | |
"accessoires - imprimante", "imprimante d''étiquettes", "imprimante matricielle - à impac", "claviers", | |
"souris avec fil", "souris", "tablette graphique", "webcam", | |
"souris sans fil", "accessoires simulation karting", "accessoires simulation de vol", "volant", | |
"clavier / manette", "jeux", "autres accessoires - pc", "logiciel - graphique & traitemen", | |
"carte graphique", "carte d''interface vidéo", "lecteur de cartes", "processeur", | |
"tapis de souris", "calibrage", "ventilateur", "carte réseau", | |
"hub / switch", "routeur sans fil / point d''accès", "réseau sans fil - pci", "réseau sans fil - usb", | |
"réseau sans fil - bluetooth", "powerline", "autres accessoires - réseau", "répéteur & amplificateur wifi", | |
"graveur dvd - externe", "boîtier - externe", "autres - fourniture de bureau", "etiqueteuse", | |
"accessoires - etiqueteuse", "sélecteur de donnée", "commutateur & splitter - vidéo", "disque dur externe", | |
"disque dur ssd - interne", "disque dur ssd - externe", "disque dur ssd/pci", "mémoire vive (ram) - ordinateur", | |
"clés usb", "energie & support de stockage", "clés otg", "sd / sdhc / sdxc", | |
"compact flash", "memory stick", "microsd", "cartes mémoire", "xqd", "cfast", "cd-r", "cd-rw", | |
"dvd-r", "dvd-rw", "dvd+r", "dvd+rw", "blu-ray", "vhs", "système raid", "papier jet d''encre - feuille", | |
"papier jet d''encre - rouleau", "papier jet d''encre & laser", "consommable - sublimation thermi", "consommable zink", | |
"feuilles", "etiquettes", "cartouche - imprimante", "encre", "ruban encreur", "imprimante 3d", "ergonomie", "mobilier"], | |
"DIVERSA13": [ | |
"piles", "batteries universelles", "batteries spéciales", "chargeur universel", | |
"chargeur spécial", "adaptateur d''origine", "adaptateur universel", "testeur de batterie", | |
"power bank", "batteries - audio", "batterie - téléphone portable", "générateur", | |
"autres accessoires - vidéographi", "batteries", "batterie - caméra embarquée", "chargeur - caméra embarquée", | |
"chargeur à induction", "chargeur", "sacoche d''origine", "accessoires - projection numériq", | |
"sacs & coffrets - ordinateur", "sac & coffret - universel", "sac et coffret - objectif", "bandoulière & dragonne", | |
"sacoches", "sacoche & coffret - trépied", "housses de protection", "sacoches & etuis - tablette", | |
"sac & coffret - vidéo", "sacoche & sac à dos - loisir", "coffres - loisir", "valises - photo & vidéo", | |
"sacs et coffrets", "accessoires - sacoche & coffre", "archivage - photo", "archivage - diapositive", | |
"archivage cd / dvd / blu-ray", "album photo", "archivage - carte mémoire", "chemise photo d´identité & portr", | |
"boîte à photos", "câble & adaptateur - photo", "câbles & adaptateurs - tv/vidéo", "câbles & adaptateurs - audio/hif", | |
"câbles & adaptateurs - auto & na", "câbles & adaptateurs - smartphon", "câbles & adaptateurs - ordinateu", "câble, adaptateur & accessoires", | |
"câbles & adaptateurs - réseau", "câbles & adaptateurs - caméra em", "autres - câbles & adaptateurs", "bonnette", | |
"tube-allonge", "autres accessoires - vidéo", "autres accessoires - sat", "télécommande", | |
"pointeur laser", "lunettes 3d", "visualiseur", "système de fixation - vidéograph", | |
"moniteur - vidéographie", "dispositif de découpe", "fixation - smartphone", "fixation & support - ecran", | |
"boîtier - caméra embarquée", "lunettes vr", "accessoires - drone", "support mural & support plafond", | |
"destructeur de documents", "appareil à laminer", "calculatrice", "fourniture de bureau", | |
"balance pour courrier", "corbeille à papier & poubelle", "sonnettes", "support décoratif - photo", | |
"style de vie", "plateau & etagère", "aide visuelle", "accessoires - extérieur", | |
"vestimentaire", "luminaire", "eclairage intérieur", "lampes déco", | |
"lampes à lumière du jour", "eclairage extérieur", "eclairage", "lampe frontale", | |
"lampe de poche", "lanterne", "ampoules", "coffret d''introduction/complet", | |
"eclairage - domotique", "dispositif d''ombrage", "thermostat & accessoires", "système d''alarme", | |
"détecteur de danger", "accessoires - domotique", "protection antivol", "technique de chargement", | |
"accessoires technique de chargem", "scooter électrique", "couteau de poche", "cyclisme indoor", | |
"sécurité", "porte-boisson", "support de réparation", "pièces de rechange pour vélos", | |
"pupitre du chef d''orchestre", "musique - accessoires", "affichage dynamique", "autre décoration", "câble chargeur"] | |
} | |
var catchMe = mapProperty(item, pid).toLowerCase(); | |
for (const [ret, arr] of Object.entries(retMap)) { | |
if (arr.some(elem => elem == catchMe)) { | |
return ret; | |
} | |
} | |
return ""; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment