Merge branch 'main' of git.targo.ca:Targo/targo_backend

This commit is contained in:
Nicolas Drolet 2025-10-09 15:17:06 -04:00
commit 0a2369d5a5
4 changed files with 43 additions and 24 deletions

View File

@ -0,0 +1,12 @@
/*
Warnings:
- You are about to alter the column `mileage` on the `expenses` table. The data in that column could be lost. The data in that column will be cast from `Decimal(65,30)` to `Decimal(12,2)`.
- You are about to alter the column `mileage` on the `expenses_archive` table. The data in that column could be lost. The data in that column will be cast from `Decimal(65,30)` to `Decimal(12,2)`.
*/
-- AlterTable
ALTER TABLE "expenses" ALTER COLUMN "mileage" SET DATA TYPE DECIMAL(12,2);
-- AlterTable
ALTER TABLE "expenses_archive" ALTER COLUMN "mileage" SET DATA TYPE DECIMAL(12,2);

View File

@ -10,13 +10,13 @@ async function main() {
['EMERGENCY' ,'SHIFT' , 2 , 'G48' ], ['EMERGENCY' ,'SHIFT' , 2 , 'G48' ],
['EVENING' ,'SHIFT' , 1.25 , 'G56' ], ['EVENING' ,'SHIFT' , 1.25 , 'G56' ],
['SICK' ,'SHIFT' , 1.0 , 'G105'], ['SICK' ,'SHIFT' , 1.0 , 'G105'],
['PRIME_DISPO','EXPENSE', 1.0 , 'G202'], ['HOLIDAY' ,'SHIFT' , 1.0 , 'G104'],
['COMMISSION' ,'EXPENSE', 1.0 , 'G234'],
['VACATION' ,'SHIFT' , 1.0 , 'G305'], ['VACATION' ,'SHIFT' , 1.0 , 'G305'],
['ON_CALL' ,'EXPENSE' , 1.0 , 'G202'],
['COMMISSION' ,'EXPENSE' , 1.0 , 'G234'],
['PER_DIEM' ,'EXPENSE' , 1.0 , 'G502'], ['PER_DIEM' ,'EXPENSE' , 1.0 , 'G502'],
['MILEAGE' ,'EXPENSE' , 0.72 , 'G503'], ['MILEAGE' ,'EXPENSE' , 0.72 , 'G503'],
['EXPENSES' ,'EXPENSE' , 1.0 , 'G517'], ['EXPENSES' ,'EXPENSE' , 1.0 , 'G517'],
['HOLIDAY' ,'SHIFT' , 2.0 , 'G700'],
]; ];
await prisma.bankCodes.createMany({ await prisma.bankCodes.createMany({

View File

@ -43,6 +43,11 @@ function centsToAmountString(cents: number): string {
return `${sign}${dollars}.${c.toString().padStart(2, '0')}`; return `${sign}${dollars}.${c.toString().padStart(2, '0')}`;
} }
function to2(value: string): string {
// normalise au cas où (sécurité)
return (Math.round(parseFloat(value) * 100) / 100).toFixed(2);
}
// Tire un multiple de STEP_CENTS entre minCents et maxCents (inclus) // Tire un multiple de STEP_CENTS entre minCents et maxCents (inclus)
function rndQuantizedCents(minCents: number, maxCents: number, step = STEP_CENTS): number { function rndQuantizedCents(minCents: number, maxCents: number, step = STEP_CENTS): number {
const qmin = Math.ceil(minCents / step); const qmin = Math.ceil(minCents / step);
@ -118,20 +123,21 @@ async function main() {
const bank_code_id = bcMap.get(code)!; const bank_code_id = bcMap.get(code)!;
// Montants (cents) quantisés à 25¢ => aucun flottant binaire plus tard // Montants (cents) quantisés à 25¢ => aucun flottant binaire plus tard
let amount: string; let amount: string = '0.00';
let mileage: string = '0.00';
switch (code) { switch (code) {
case 'G503': // kilométrage case 'G503': // kilométrage
amount = rndAmount(1000, 7500); // 10.00 à 75.00 mileage = to2(rndAmount(1000, 7500)); // 10.00 à 75.00
break; break;
case 'G502': // per_diem case 'G502': // per_diem
amount = rndAmount(1500, 3000); // 15.00 à 30.00 amount = to2(rndAmount(1500, 3000)); // 15.00 à 30.00
break; break;
case 'G202': // allowance /prime de garde case 'G202': // on_call /prime de garde
amount = rndAmount(2000, 15000); // 20.00 à 150.00 amount = to2(rndAmount(2000, 15000)); // 20.00 à 150.00
break; break;
case 'G517': // expenses case 'G517': // expenses
default: default:
amount = rndAmount(500, 5000); // 5.00 à 50.00 amount = to2(rndAmount(500, 5000)); // 5.00 à 50.00
break; break;
} }
@ -140,9 +146,10 @@ async function main() {
timesheet_id: ts.id, timesheet_id: ts.id,
bank_code_id, bank_code_id,
date, date,
amount, // string "xx.yy" (2 décimales exactes) amount,
mileage,
attachment: null, attachment: null,
comment: `Expense ${code} ${amount}$ (emp ${e.id})`, comment: `Expense ${code} (emp ${e.id})`,
is_approved: Math.random() < 0.65, is_approved: Math.random() < 0.65,
supervisor_comment: Math.random() < 0.25 ? 'OK' : null, supervisor_comment: Math.random() < 0.25 ? 'OK' : null,
}, },

View File

@ -289,7 +289,7 @@ model Expenses {
date DateTime @db.Date date DateTime @db.Date
amount Decimal @db.Money amount Decimal @db.Money
mileage Decimal? mileage Decimal? @db.Decimal(12,2)
comment String comment String
supervisor_comment String? supervisor_comment String?
is_approved Boolean @default(false) is_approved Boolean @default(false)
@ -311,7 +311,7 @@ model ExpensesArchive {
bank_code_id Int bank_code_id Int
date DateTime @db.Date date DateTime @db.Date
amount Decimal? @db.Money amount Decimal? @db.Money
mileage Decimal? mileage Decimal? @db.Decimal(12,2)
comment String? comment String?
is_approved Boolean is_approved Boolean
supervisor_comment String? supervisor_comment String?
@ -380,7 +380,7 @@ model Preferences {
dark_mode Boolean @default(false) dark_mode Boolean @default(false)
lang_switch Boolean @default(false) lang_switch Boolean @default(false)
lefty_mode Boolean @default(false) lefty_mode Boolean @default(false)
// TODO: change BOOLEAN to use 0 or 1 in case there is more than 2 options for each preferences
@@map("preferences") @@map("preferences")
} }