Compare commits
3 Commits
features/p
...
d82ae9f313
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d82ae9f313 | ||
|
|
27de44d895 | ||
|
|
3f42d80768 |
21
package-lock.json
generated
21
package-lock.json
generated
@@ -10,8 +10,7 @@
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"dotenv": "^17.4.2",
|
||||
"express": "^5.2.1",
|
||||
"pdf-parse-fork": "^1.2.0"
|
||||
"express": "^5.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/express": "^5.0.6",
|
||||
@@ -148,6 +147,7 @@
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.3.tgz",
|
||||
"integrity": "sha512-603BddQMv3pUcr4U2dhujk83N2tTDVr/34wII2B6bJy6g+8WD6yUb11jszNs0gdi4PesVWl7ABt8nYMVpnLUcg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"undici-types": ">=7.24.0 <7.24.7"
|
||||
}
|
||||
@@ -970,11 +970,6 @@
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/node-ensure": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "https://registry.npmjs.org/node-ensure/-/node-ensure-0.0.0.tgz",
|
||||
"integrity": "sha512-DRI60hzo2oKN1ma0ckc6nQWlHU69RH6xN0sjQTjMpChPfTYvKZdcQFfdYK2RWbJcKyUizSIy/l8OTGxMAM1QDw=="
|
||||
},
|
||||
"node_modules/nodemon": {
|
||||
"version": "3.1.14",
|
||||
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.14.tgz",
|
||||
@@ -1066,18 +1061,6 @@
|
||||
"url": "https://opencollective.com/express"
|
||||
}
|
||||
},
|
||||
"node_modules/pdf-parse-fork": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/pdf-parse-fork/-/pdf-parse-fork-1.2.0.tgz",
|
||||
"integrity": "sha512-ovXkJaTtw8PfLNhBThKHKsZlT6WrCkVKY/QgsDK5GiD/tuL2qzezSlHpEgqHCnq3r/0GOq3NZ+won78KL/dAjQ==",
|
||||
"dependencies": {
|
||||
"debug": "^4.3.4",
|
||||
"node-ensure": "^0.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.8.1"
|
||||
}
|
||||
},
|
||||
"node_modules/picomatch": {
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
|
||||
|
||||
@@ -16,8 +16,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"dotenv": "^17.4.2",
|
||||
"express": "^5.2.1",
|
||||
"pdf-parse-fork": "^1.2.0"
|
||||
"express": "^5.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/express": "^5.0.6",
|
||||
|
||||
@@ -1,102 +0,0 @@
|
||||
const fs = require('fs');
|
||||
const pdfParse = require('pdf-parse-fork');
|
||||
|
||||
function pdf_parse(travel: string){
|
||||
interface PdfData {
|
||||
text: string;
|
||||
}
|
||||
|
||||
let fournisseur = '';
|
||||
let date = '';
|
||||
|
||||
interface DetailProduit {
|
||||
quantité: number;
|
||||
prixHT: number;
|
||||
TVA: string;
|
||||
}
|
||||
|
||||
const productsList: { [key: string]: DetailProduit } = {};
|
||||
|
||||
interface tab_res {
|
||||
marque: string;
|
||||
date_achats: string;
|
||||
products: {
|
||||
[nomProduit: string]: DetailProduit;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
const dataBuffer = fs.readFileSync(travel);
|
||||
|
||||
pdfParse(dataBuffer)
|
||||
.then((data: PdfData) => {
|
||||
// on regarde si c'est auchan ou metro
|
||||
const regexAuchan = /auchan/i;
|
||||
if (regexAuchan.test(data.text)) {
|
||||
fournisseur = "Auchan"
|
||||
|
||||
// on regarde la date d'achat avec une expression reguliere pour auchan
|
||||
const regexDate = /(\d{2})\/(\d{2})\/(\d{4})/;
|
||||
const correspondance = data.text.match(regexDate);
|
||||
if (correspondance) {
|
||||
date = correspondance[0]
|
||||
} else {
|
||||
date = "non trouvé"
|
||||
}
|
||||
|
||||
// on prend la liste des produits et leurs detail pour auchan
|
||||
const lignes = data.text.split('\n');
|
||||
|
||||
// Expressions régulières pour détecter les lignes de produits Auchan
|
||||
const regexLigneProduit = /^(\d{13})(?!\d)(.+?)(\d+,\d+)\s+(\d+)\s+(\d+,\d+)\s+(\d+,\d+)\s+(\d+,\d+)$/;
|
||||
|
||||
lignes.forEach((ligne: string) => {
|
||||
const match = ligne.trim().match(regexLigneProduit);
|
||||
|
||||
if (match) {
|
||||
const nomProduit = match[1].trim();
|
||||
const quantite = parseInt(match[4], 10);
|
||||
const prixHT = parseFloat(match[2].replace(',', '.'));
|
||||
const tva = match[6].replace(',', '.') + "%";
|
||||
|
||||
productsList[nomProduit] = {
|
||||
quantité: quantite,
|
||||
prixHT: prixHT,
|
||||
TVA: tva
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
} else {
|
||||
fournisseur = "Metro"
|
||||
|
||||
// on regarde la date d'achat avec une expression reguliere pour metro
|
||||
const regexDate = /(\d{2})-(\d{2})-(\d{4})/;
|
||||
const correspondance = data.text.match(regexDate);
|
||||
if (correspondance) {
|
||||
date = correspondance[0]
|
||||
} else {
|
||||
date = "non trouvé"
|
||||
}
|
||||
}
|
||||
|
||||
// on renvoie les valeur avec un seul objet
|
||||
|
||||
const res : tab_res = {
|
||||
marque: fournisseur,
|
||||
date_achats: date,
|
||||
products: productsList
|
||||
}
|
||||
|
||||
console.log(res);
|
||||
|
||||
})
|
||||
|
||||
|
||||
.catch((error: unknown) => {
|
||||
console.error("Erreur :", error);
|
||||
});
|
||||
}
|
||||
|
||||
export default pdf_parse;
|
||||
24
src/routes/liste_routes.txt
Normal file
24
src/routes/liste_routes.txt
Normal file
@@ -0,0 +1,24 @@
|
||||
/ : accueil pour le public avec la visualisation des produits dans le stock et la date prévisionelle des prochaines courses
|
||||
|
||||
/login : page de connexion
|
||||
|
||||
/create-account : page pour que l'admin crée des comptes renseignant son niveau d'accès
|
||||
post /create-account : ajouter les informations de compte dans la DB
|
||||
|
||||
/dashboard : page recensant les indicateur clé des ventes pour les vendeur / bureaux
|
||||
|
||||
/new-purchase : page d'import de facture ou pour la sasie manulle des achats
|
||||
post /new-purchase/file : extraire les données d'une facture et la mettre dans la DB
|
||||
post /new-purchase/new : mettre les produits saisie manullemment dans la DB
|
||||
|
||||
/product-report : page de déclaration de casse/perte
|
||||
/product-report/new : page pour déclarer la casse/perte d'un produit
|
||||
post /product-report/new : modifier les informations du stock dans la DB
|
||||
|
||||
/stock : page de visualisation du stock virtuel
|
||||
|
||||
/shopping-list : gestion des listes de course (création, dupplication, suppression)
|
||||
/shopping-list/${list_id} : page de gestion d'une liste de course
|
||||
|
||||
|
||||
/webhooks/sumup : Lorsque un client à payé modifie les informations du stock dans la DB
|
||||
@@ -16,6 +16,7 @@ app.use(express.urlencoded( {extended: false }));
|
||||
// Routes import
|
||||
// ----------------------------------------
|
||||
app.use("/status", require("./routes/status.routes"));
|
||||
app.use("/new-purchase", require("./routes/purchase.routes"));
|
||||
|
||||
// ----------------------------------------
|
||||
// Starting Server
|
||||
|
||||
Reference in New Issue
Block a user