Skip to content
This repository has been archived by the owner on Mar 6, 2023. It is now read-only.

Commit

Permalink
feat(enquete): import individuel excel parsing #1801
Browse files Browse the repository at this point in the history
  • Loading branch information
Toub committed May 20, 2020
1 parent 9b27d29 commit 97151c2
Show file tree
Hide file tree
Showing 6 changed files with 165 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ async function importEnqueteFile({
const start = Date.now();
logger.info(`[IMPORT ENQUETE] START ${enqueteId}`);

const enqueteToImport = enqueteExcelParser.parse({
const enqueteToImport = await enqueteExcelParser.parse({
base64str
});

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
const ENQ_REP_INFO_MANDATAIRE = {
ANCIENNETE: buildMaps({
"0-2": "Moins de 2 ans",
"2-5": "2 ans à moins de 5 ans",
"5-10": "5 ans à moins de 10 ans",
"10-20": "10 ans à moins de 20 ans",
"20-30": "20 ans à moins de 30 ans",
"30+": "30 ans et plus"
}),
FORME_JURIDIQUE: buildMaps({
EI: "Entreprise individuelle",
EURL: "EURL",
SARL: "SARL",
SCOP: "SCOP",
SA: "SA",
SAS: "SAS",
SNC: "SNC",
SEL: "SEL",
SCP: "SCP"
}),
ESTIMATION_ETP: buildMaps({
"0-30": "jusqu'à 30% d'un ETP",
"30-50": "supérieure à 30% jusqu'à 50%",
"50-70": "supérieure à 50% jusqu'à 70%",
"70-90": "supérieure à 70% jusqu'à 90%",
"90-100": "A temps plein"
}),
TRANCHE_AGE: buildMaps({
"0-25": "Inférieur à 25 ans",
"25-35": "25 ans à moins de 35 ans",
"35-50": "35 ans à moins de 50 ans",
"50-65": "50 ans à moins de 65 ans",
"65+": "Plus de 65 ans"
}),
SEXE: buildMaps({
H: "Homme",
F: "Femme"
})
};

module.exports = {
ENQ_REP_INFO_MANDATAIRE
};

function buildMaps(byKey) {
return {
byKey,
byValue: revertMapKeysValues(byKey)
};
}

function revertMapKeysValues(mapByKey) {
return Object.keys(mapByKey).reduce((map, key) => {
const value = mapByKey[key];
map[value] = key;
return map;
}, {});
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const { ENQ_REP_INFO_MANDATAIRE } = require("./ENQ_REP_INFO_MANDATAIRE.const");

module.exports = {
ENQ_REP_INFO_MANDATAIRE
};
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
var XLSX = require("xlsx");
var { enqueteExcelSchemas } = require("./enqueteExcelSchemas");

const parse = ({ base64str }) => {
const parse = async ({ base64str }) => {
const workbook = XLSX.read(base64str, {
cellDates: true,
dateNF: "dd/mm/yyyy",
Expand All @@ -9,15 +10,52 @@ const parse = ({ base64str }) => {
raw: false
});

const worksheet = workbook.Sheets["info mandataire-exerc. activité"];
if (!workbook.Sheets["info mandataire-exerc. activité"]) {
// TODO valider que tous les onglets existent
}
const worksheet = workbook.Sheets["Données à exporter"];
if (worksheet) {
console.log("test");
console.log("test:", worksheet["A2"]);
console.log("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
console.log("B11:", worksheet["B11"]);

// Département Région Nom bénévole forme juridique sexe

const rawData = {
departement: rawValue(worksheet["A4"]), // Département (déjà en bdd)
region: rawValue(worksheet["B4"]), // Région (déjà en bdd)
nom: rawValue(worksheet["C4"]), // Nom (déjà en bdd)
benevole: rawValue(worksheet["D4"]),
forme_juridique: rawValue(worksheet["E4"]),
sexe: rawValue(worksheet["F4"]), // Nom (déjà en bdd)
anciennete: rawValue(worksheet["H4"]),
tranche_age: rawValue(worksheet["J4"]),
exerce_seul_activite: rawValue(worksheet["L4"]),
estimation_etp: rawValue(worksheet["M4"]),
exerce_secretaires_specialises: rawValue(worksheet["N4"]),
secretaire_specialise_etp: rawValue(worksheet["N4"]),
local_professionnel: rawValue(worksheet["O4"])
};

try {
const parsedData = enqueteExcelSchemas.informationsGeneralesMandataireSchema.validateSync(
rawData
);
console.log("xxx parsedData:", JSON.stringify(parsedData));
} catch (err) {
console.log(err);
}
}

return [];
};

function rawValue(cell) {
if (cell) {
return cell.v;
}
return undefined;
}

const enqueteExcelParser = {
parse
};
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
const yup = require("yup");
const { ENQ_REP_INFO_MANDATAIRE } = require("./constants");

const informationsGeneralesMandataireSchema = yup.object().shape({
departement: yup.string(),
region: yup.string(),
nom: yup.string(),
benevole: excelBoolean(),
forme_juridique: excelSelect(ENQ_REP_INFO_MANDATAIRE.FORME_JURIDIQUE.byValue),
sexe: excelSelect(ENQ_REP_INFO_MANDATAIRE.SEXE.byValue),
anciennete: excelSelect(ENQ_REP_INFO_MANDATAIRE.ANCIENNETE.byValue),
tranche_age: excelSelect(ENQ_REP_INFO_MANDATAIRE.TRANCHE_AGE.byValue),
exerce_seul_activite: excelBoolean(),
estimation_etp: excelSelect(ENQ_REP_INFO_MANDATAIRE.ESTIMATION_ETP.byValue),
exerce_secretaires_specialises: excelBoolean(),
secretaire_specialise_etp: excelInteger(),
local_professionnel: excelBoolean()
});

const enqueteExcelSchemas = {
informationsGeneralesMandataireSchema
};

module.exports = {
enqueteExcelSchemas
};

function excelSelect(map) {
return yup.mixed().transform(x => map[x]);
}

function excelBoolean() {
return yup.boolean().transform(x => !!(x & (x === "Oui")));
}

function excelInteger() {
return yup
.number()
.transform(x => (x && !isNaN(parseInt(x)) ? parseInt(x) : undefined));
}
19 changes: 19 additions & 0 deletions packages/knex/migrations_v2/20200520123009_upd_info_mandataires.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
exports.up = function(knex) {
return knex.schema.alterTable(
"enquete_reponses_informations_mandataire",
function(table) {
table.enu("tranche_age", ["0-25", "25-35", "35-50", "50-65", "65+"]);
table.boolean("exerce_seul_activite");
table.boolean("exerce_secretaires_specialises");
}
);
};

exports.down = function(knex) {
return knex.schema.alterTable(
"enquete_reponses_informations_mandataire",
function(table) {
table.dropColumn("tranche_age");
}
);
};

0 comments on commit 97151c2

Please sign in to comment.