-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcategorizeFile.js
39 lines (34 loc) · 1.3 KB
/
categorizeFile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// categorizeFile.js
// The categorizeFile function now also takes expenses as arguments
function categorizeFile(fileName, expenses) {
// Détermine le type de dépense basé sur le préfixe du nom de fichier
const expenseType = fileName[0];
const regex =
expenseType === "G"
? /^G\s(\d{1,2})\.(\d{1,2})(?:\.(\d{2,4}))?\s([\d.]+)\s(\d+)/
: /\s(\d{1,2})\.(\d{1,2})(?:\.(\d{2,4}))?\s([\d.]+)/;
const match = fileName.match(regex);
if (match) {
const day = match[1];
const month = match[2];
const year = match[3] ?? "25";
const amount = parseFloat(match[4]);
const date = `${day.padStart(2, "0")}/${month.padStart(2, "0")}/${year.padStart(4, "20")}`;
const nbPersons = expenseType === "G" ? parseInt(match[5], 10) : null;
let expense = expenses.find(
(e) => e.date === date && e.type === expenseType
);
if (!expense) {
expense = { date, files: [], amount, type: expenseType };
if (nbPersons) expense.nbPersons = nbPersons;
expenses.push(expense);
} else if (expenseType !== 'M') {
expense.amount += amount;
expense.amount = parseFloat(expense.amount.toFixed(2));
}
expense.files.push(fileName);
} else {
console.warn(`File name does not match expected format: ${fileName}`);
}
}
module.exports = categorizeFile;