Skip to content

Commit

Permalink
Added new strategy to models.ts
Browse files Browse the repository at this point in the history
Added translations for new strategy
Added new case for new strategy and reverted old logic in invoice-date-strategy.ts

fixed tests to use new strategy
  • Loading branch information
JochemVH1 committed Jul 3, 2024
1 parent e908279 commit c41302a
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 7 deletions.
21 changes: 16 additions & 5 deletions frontend/src/components/invoice/models/invoice-date-strategy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,24 @@ import moment from 'moment';
import {ClientModel} from '../../client/models/ClientModels';
import {ConfigModel} from '../../config/models/ConfigModel';

export const invoiceDateStrategies = ['prev-month-last-day', 'today'];
export const invoiceDateStrategies = ['new-month-from-22th', 'prev-month-last-day', 'today'];


export const today = (): moment.Moment => moment().startOf('day');


const endOfMonth = (date?: moment.Moment): moment.Moment => {
const endOfMonth = (): moment.Moment => {
if (moment().date() > 28) {
return today();
}

// ATTN: The following returns something like: "Thu Apr 30 2020 23:59:59 GMT+0200"
// (which should probably be cleaned up at some point)
const lastDayPrevMonth = moment().subtract(1, 'months').endOf('month');
return lastDayPrevMonth;
};

const newMonthFromThe22th = (date?: moment.Moment): moment.Moment => {
const dateToCheck:moment.Moment = date || moment();
const endOfMonthStartDay:number = 1;
const endOfMonthEndDay:number = 21;
Expand All @@ -24,14 +35,14 @@ const endOfMonth = (date?: moment.Moment): moment.Moment => {
}
};



export const getInvoiceDate = (client?: ClientModel, config?: ConfigModel, date?: moment.Moment): moment.Moment => {
const strategy = (client && client.defaultInvoiceDateStrategy) || (config && config.defaultInvoiceDateStrategy);

switch (strategy) {
case 'prev-month-last-day':
return endOfMonth(date);
return endOfMonth();
case 'new-month-from-22th':
return newMonthFromThe22th(date)
case 'today':
default:
return today();
Expand Down
9 changes: 8 additions & 1 deletion frontend/src/components/invoice/spec/InvoiceModel.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -209,10 +209,11 @@ describe('Switch between days and hours', () => {
});
});

describe('Invoice date for last of month config', () => {
describe('Invoice date new month from the 22th', () => {
it('Should be 31 may when date is 10 june', () => {
const vm = createViewModel();
vm.date = moment('2024-06-10');
vm.config.defaultInvoiceDateStrategy = 'new-month-from-22th';
vm.setClient(undefined);

expect(vm.date.format('YYYY-MM-DD')).toBe('2024-05-31')
Expand All @@ -221,6 +222,7 @@ describe('Invoice date for last of month config', () => {
it('Should be 31 december when date is 10 januari', () => {
const vm = createViewModel();
vm.date = moment('2024-01-10');
vm.config.defaultInvoiceDateStrategy = 'new-month-from-22th';
vm.setClient(undefined);

expect(vm.date.format('YYYY-MM-DD')).toBe('2023-12-31')
Expand All @@ -229,6 +231,7 @@ describe('Invoice date for last of month config', () => {
it('Should be 30 june month when date is 30 june', () => {
const vm = createViewModel();
vm.date = moment('2024-06-30');
vm.config.defaultInvoiceDateStrategy = 'new-month-from-22th';
vm.setClient(undefined);

expect(vm.date.format('YYYY-MM-DD')).toBe('2024-06-30')
Expand All @@ -237,6 +240,7 @@ describe('Invoice date for last of month config', () => {
it('Should be 29 februari month when date is 29 februari', () => {
const vm = createViewModel();
vm.date = moment('2024-02-29');
vm.config.defaultInvoiceDateStrategy = 'new-month-from-22th';
vm.setClient(undefined);

expect(vm.date.format('YYYY-MM-DD')).toBe('2024-02-29')
Expand All @@ -245,6 +249,7 @@ describe('Invoice date for last of month config', () => {
it('Should be 31 januari month when date is 31 januari', () => {
const vm = createViewModel();
vm.date = moment('2024-01-31');
vm.config.defaultInvoiceDateStrategy = 'new-month-from-22th';
vm.setClient(undefined);

expect(vm.date.format('YYYY-MM-DD')).toBe('2024-01-31')
Expand All @@ -253,6 +258,7 @@ describe('Invoice date for last of month config', () => {
it('Should be 1 june month when date is 22 june', () => {
const vm = createViewModel();
vm.date = moment('2024-06-22');
vm.config.defaultInvoiceDateStrategy = 'new-month-from-22th';
vm.setClient(undefined);

expect(vm.date.format('YYYY-MM-DD')).toBe('2024-06-01')
Expand All @@ -261,6 +267,7 @@ describe('Invoice date for last of month config', () => {
it('Should be 1 januari month when date is 22 januari', () => {
const vm = createViewModel();
vm.date = moment('2024-01-22');
vm.config.defaultInvoiceDateStrategy = 'new-month-from-22th';
vm.setClient(undefined);

expect(vm.date.format('YYYY-MM-DD')).toBe('2024-01-01')
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {StandardComponents} from './components/controls/form-controls/lib/Compon
import {ConsultantListFilters, ClientListFilters, InvoiceListFilters,
ProjectListFilters, ProjectMonthListFilters, UsersListFilters, RolesListFilters} from './components/controls/table/table-models';

export type InvoiceDateStrategy = 'prev-month-last-day' | 'today';
export type InvoiceDateStrategy = 'new-month-from-22th' | 'prev-month-last-day' | 'today';

export type ChildrenType = React.ReactNode | JSX.Element[];

Expand Down
1 change: 1 addition & 0 deletions frontend/src/trans.en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,7 @@ export const trans = {
dateStrategies: {
'prev-month-last-day': 'Last day last month',
today: 'Today',
'new-month-from-22th': 'New month from the 22th'
},
hours: 'Total hours',
days: 'Days',
Expand Down
1 change: 1 addition & 0 deletions frontend/src/trans.nl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,7 @@ export const trans = {
dateStrategies: {
'prev-month-last-day': 'Laatste dag vorige maand',
today: 'Vandaag',
'new-month-from-22th': 'Nieuwe maand vanaf de 22ste'
},
hours: 'Totaal uren',
days: 'Dagen',
Expand Down

0 comments on commit c41302a

Please sign in to comment.