Fix/supp ag fb (#1023)
* fix: prevent credit notes from entering payment flow * fix: persist and display customer personal numbers * feat: configure automatic invoice reminder days * fix: issue credit notes through send flow * chore: add repository agent guidance * feat(mcp): route tools across user companies * fix(articles): delete unused register entries * feat(invoices): improve issued invoice actions * feat(supplier-invoices): retain uploaded source documents * docs: record implementation decisions * feat: enhance customer personal number handling and validation - Updated CustomerForm to allow personal numbers in the format of "********-1234" for individual customers. - Added validation to ensure personal numbers are only accepted for individual customers in CreateCustomerSchema. - Implemented masking and encryption for personal numbers to enhance data protection. - Introduced new utility functions for masking and encrypting personal numbers. - Added database migration to enforce unique constraints on credit note relationships and prevent duplicate entries. - Enhanced error handling and logging for credit note issuance and invoice processing. - Updated tests to cover new credit note creation guards and personal number handling. * test: enhance list companies test with supabase query mocks
This commit is contained in:
@@ -355,10 +355,34 @@ export function generateReminderEmailSubject(data: ReminderEmailData): string {
|
||||
/**
|
||||
* Get the number of days after due date for each reminder level
|
||||
*/
|
||||
export function getReminderDaysConfig(): Record<1 | 2 | 3, number> {
|
||||
return {
|
||||
export type ReminderDaysConfig = Record<1 | 2 | 3, number>
|
||||
|
||||
type ReminderDaysSettings = Partial<
|
||||
Pick<
|
||||
CompanySettings,
|
||||
'reminder_days_level_1' | 'reminder_days_level_2' | 'reminder_days_level_3'
|
||||
>
|
||||
>
|
||||
|
||||
export function getReminderDaysConfig(
|
||||
settings?: ReminderDaysSettings | null,
|
||||
): ReminderDaysConfig {
|
||||
const defaults: ReminderDaysConfig = {
|
||||
1: REMINDER_CONFIG[1].daysAfterDue,
|
||||
2: REMINDER_CONFIG[2].daysAfterDue,
|
||||
3: REMINDER_CONFIG[3].daysAfterDue
|
||||
3: REMINDER_CONFIG[3].daysAfterDue,
|
||||
}
|
||||
|
||||
const configured: ReminderDaysConfig = {
|
||||
1: settings?.reminder_days_level_1 ?? defaults[1],
|
||||
2: settings?.reminder_days_level_2 ?? defaults[2],
|
||||
3: settings?.reminder_days_level_3 ?? defaults[3],
|
||||
}
|
||||
|
||||
const valid =
|
||||
Object.values(configured).every((days) => Number.isInteger(days) && days >= 1 && days <= 365)
|
||||
&& configured[1] < configured[2]
|
||||
&& configured[2] < configured[3]
|
||||
|
||||
return valid ? configured : defaults
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user