feat: setting up the date format in the whole system dates

This commit is contained in:
Ahmed Bouhuolia
2024-06-12 19:43:42 +02:00
parent 265ea9ca48
commit 3a0a0db8a7
24 changed files with 62 additions and 52 deletions

View File

@@ -5,7 +5,7 @@ import DashboardService from '@/services/Dashboard/DashboardService';
@Service() @Service()
export default class DashboardMetaController { export default class DashboardMetaController {
@Inject() @Inject()
dashboardService: DashboardService; private dashboardService: DashboardService;
/** /**
* Constructor router. * Constructor router.

View File

@@ -149,13 +149,19 @@ export class Transformer {
return this.excludeAttributes().length > 0; return this.excludeAttributes().length > 0;
}; };
private dateFormat = 'YYYY MMM DD';
setDateFormat(format: string) {
this.dateFormat = format;
}
/** /**
* *
* @param date * @param date
* @returns * @returns
*/ */
protected formatDate(date) { protected formatDate(date) {
return date ? moment(date).format('YYYY/MM/DD') : ''; return date ? moment(date).format(this.dateFormat) : '';
} }
/** /**
@@ -193,6 +199,7 @@ export class Transformer {
) { ) {
transformer.setOptions(options); transformer.setOptions(options);
transformer.setContext(this.context); transformer.setContext(this.context);
transformer.setDateFormat(this.dateFormat);
return transformer.work(obj); return transformer.work(obj);
} }

View File

@@ -24,6 +24,17 @@ export class TransformerInjectable {
}; };
} }
/**
* Retrieves the given tenatn date format.
* @param {number} tenantId
* @returns {string}
*/
async getTenantDateFormat(tenantId: number) {
const metadata = await TenantMetadata.query().findOne('tenantId', tenantId);
return metadata.dateFormat;
}
/** /**
* Transformes the given transformer after inject the tenant context. * Transformes the given transformer after inject the tenant context.
* @param {number} tenantId * @param {number} tenantId
@@ -41,7 +52,11 @@ export class TransformerInjectable {
if (!isNull(tenantId)) { if (!isNull(tenantId)) {
const context = await this.getApplicationContext(tenantId); const context = await this.getApplicationContext(tenantId);
transformer.setContext(context); transformer.setContext(context);
const dateFormat = await this.getTenantDateFormat(tenantId);
transformer.setDateFormat(dateFormat);
} }
transformer.setOptions(options); transformer.setOptions(options);
return transformer.work(object); return transformer.work(object);

View File

@@ -1,5 +1,6 @@
import { Transformer } from '@/lib/Transformer/Transformer'; import { Transformer } from '@/lib/Transformer/Transformer';
import { formatNumber } from '@/utils'; import { formatNumber } from '@/utils';
import { PurchaseInvoiceTransformer } from '../Bills/PurchaseInvoiceTransformer';
export class BillPaymentEntryTransformer extends Transformer { export class BillPaymentEntryTransformer extends Transformer {
/** /**
@@ -7,7 +8,14 @@ export class BillPaymentEntryTransformer extends Transformer {
* @returns {Array} * @returns {Array}
*/ */
public includeAttributes = (): string[] => { public includeAttributes = (): string[] => {
return ['paymentAmountFormatted']; return ['paymentAmountFormatted', 'bill'];
};
/**
* Retreives the
*/
protected bill = (entry) => {
return this.item(entry.bill, new PurchaseInvoiceTransformer());
}; };
/** /**

View File

@@ -16,8 +16,7 @@ export const useManualJournalsColumns = () => {
{ {
id: 'date', id: 'date',
Header: intl.get('date'), Header: intl.get('date'),
accessor: 'date', accessor: 'formatted_date',
Cell: FormatDateCell,
width: 115, width: 115,
className: 'date', className: 'date',
clickable: true, clickable: true,

View File

@@ -41,19 +41,23 @@ export default function BillDetailHeader() {
<Col xs={6}> <Col xs={6}>
<DetailsMenu direction={'horizantal'} minLabelSize={'180px'}> <DetailsMenu direction={'horizantal'} minLabelSize={'180px'}>
<DetailItem label={intl.get('bill_date')}> <DetailItem label={intl.get('bill_date')}>
<FormatDate value={bill.bill_date} /> {bill.formatted_bill_date}
</DetailItem> </DetailItem>
<DetailItem label={intl.get('due_date')}> <DetailItem label={intl.get('due_date')}>
<FormatDate value={bill.due_date} /> {bill.formatted_due_date}
</DetailItem> </DetailItem>
<DetailItem label={intl.get('vendor_name')}> <DetailItem label={intl.get('vendor_name')}>
<VendorDrawerLink vendorId={bill.vendor_id}> <VendorDrawerLink vendorId={bill.vendor_id}>
{bill.vendor?.display_name} {bill.vendor?.display_name}
</VendorDrawerLink> </VendorDrawerLink>
</DetailItem> </DetailItem>
<DetailItem label={intl.get('bill.details.bill_number')}> <DetailItem label={intl.get('bill.details.bill_number')}>
{defaultTo(bill.bill_number, '-')} {defaultTo(bill.bill_number, '-')}
</DetailItem> </DetailItem>
<ExchangeRateDetailItem <ExchangeRateDetailItem
exchangeRate={bill?.exchange_rate} exchangeRate={bill?.exchange_rate}
toCurrency={bill?.currency_code} toCurrency={bill?.currency_code}

View File

@@ -47,7 +47,7 @@ export default function CreditNoteDetailHeader() {
<DetailItem <DetailItem
label={intl.get('credit_note.drawer.label_credit_note_date')} label={intl.get('credit_note.drawer.label_credit_note_date')}
> >
<FormatDate value={creditNote.formatted_credit_note_date} /> {creditNote.formatted_credit_note_date}
</DetailItem> </DetailItem>
<DetailItem <DetailItem

View File

@@ -1,6 +1,5 @@
// @ts-nocheck // @ts-nocheck
import React from 'react'; import React from 'react';
import moment from 'moment';
import styled from 'styled-components'; import styled from 'styled-components';
import { defaultTo } from 'lodash'; import { defaultTo } from 'lodash';
@@ -42,7 +41,7 @@ export default function ExpenseDrawerHeader() {
<Col xs={6}> <Col xs={6}>
<DetailsMenu direction={'horizantal'} minLabelSize={'180px'}> <DetailsMenu direction={'horizantal'} minLabelSize={'180px'}>
<DetailItem name={'date'} label={<T id={'date'} />}> <DetailItem name={'date'} label={<T id={'date'} />}>
{moment(expense.payment_date).format('YYYY MMM DD')} {expense.formatted_payment_date}
</DetailItem> </DetailItem>
<DetailItem name={'reference'} label={<T id={'reference_no'} />}> <DetailItem name={'reference'} label={<T id={'reference_no'} />}>

View File

@@ -43,11 +43,11 @@ export default function InvoiceDetailHeader() {
<Col xs={6}> <Col xs={6}>
<DetailsMenu direction={'horizantal'} minLabelSize={'180px'}> <DetailsMenu direction={'horizantal'} minLabelSize={'180px'}>
<DetailItem label={intl.get('invoice_date')}> <DetailItem label={intl.get('invoice_date')}>
<FormatDate value={invoice.invoice_date} /> {invoice.invoice_date_formatted}
</DetailItem> </DetailItem>
<DetailItem label={intl.get('due_date')}> <DetailItem label={intl.get('due_date')}>
<FormatDate value={invoice.due_date} /> {invoice.due_date_formatted}
</DetailItem> </DetailItem>
<DetailItem label={intl.get('customer_name')}> <DetailItem label={intl.get('customer_name')}>

View File

@@ -37,7 +37,7 @@ export default function PaymentMadeDetailHeader() {
<DetailsMenu direction={'horizantal'} minLabelSize={'180px'}> <DetailsMenu direction={'horizantal'} minLabelSize={'180px'}>
<DetailItem <DetailItem
label={intl.get('payment_date')} label={intl.get('payment_date')}
children={<FormatDate value={paymentMade.payment_date} />} children={paymentMade.formatted_payment_date}
/> />
<DetailItem <DetailItem
label={intl.get('payment_made.details.payment_number')} label={intl.get('payment_made.details.payment_number')}

View File

@@ -1,8 +1,6 @@
// @ts-nocheck // @ts-nocheck
import React from 'react'; import React from 'react';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import moment from 'moment';
import { getColumnWidth } from '@/utils'; import { getColumnWidth } from '@/utils';
import { FormatNumberCell } from '@/components'; import { FormatNumberCell } from '@/components';
import { usePaymentMadeDetailContext } from './PaymentMadeDetailProvider'; import { usePaymentMadeDetailContext } from './PaymentMadeDetailProvider';
@@ -17,7 +15,7 @@ export const usePaymentMadeEntriesColumns = () => {
() => [ () => [
{ {
Header: intl.get('date'), Header: intl.get('date'),
accessor: (row) => moment(row.date).format('YYYY MMM DD'), accessor: 'bill.formatted_bill_date',
width: 100, width: 100,
disableSortBy: true, disableSortBy: true,
className: 'date', className: 'date',

View File

@@ -36,7 +36,7 @@ export default function PaymentReceiveDetailHeader() {
<DetailsMenu direction={'horizantal'} minLabelSize={'180px'}> <DetailsMenu direction={'horizantal'} minLabelSize={'180px'}>
<DetailItem <DetailItem
label={intl.get('payment_date')} label={intl.get('payment_date')}
children={<FormatDate value={paymentReceive.payment_date} />} children={paymentReceive.formatted_payment_date}
/> />
<DetailItem <DetailItem
label={intl.get('payment_receive.details.payment_number')} label={intl.get('payment_receive.details.payment_number')}

View File

@@ -1,7 +1,6 @@
// @ts-nocheck // @ts-nocheck
import React from 'react'; import React from 'react';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import moment from 'moment';
import { import {
Button, Button,
Popover, Popover,
@@ -26,7 +25,7 @@ export const usePaymentReceiveEntriesColumns = () => {
() => [ () => [
{ {
Header: intl.get('date'), Header: intl.get('date'),
accessor: (row) => moment(row.payment_date).format('YYYY MMM DD'), accessor: 'invoice.invoice_date_formatted',
width: 100, width: 100,
className: 'date', className: 'date',
disableSortBy: true, disableSortBy: true,

View File

@@ -54,11 +54,11 @@ export default function ReceiptDetailHeader() {
</DetailItem> </DetailItem>
<DetailItem <DetailItem
label={intl.get('receipt_date')} label={intl.get('receipt_date')}
children={<FormatDate value={receipt.receipt_date} />} children={receipt.formatted_receipt_date}
/> />
<DetailItem <DetailItem
label={intl.get('closed_date')} label={intl.get('closed_date')}
children={<FormatDate value={receipt.closed_at_date} />} children={receipt.formatted_closed_at_date}
/> />
<ExchangeRateDetailItem <ExchangeRateDetailItem
exchangeRate={receipt?.exchange_rate} exchangeRate={receipt?.exchange_rate}

View File

@@ -42,7 +42,7 @@ export default function VendorCreditDetailHeader() {
<DetailItem <DetailItem
label={intl.get('vendor_credit.drawer.label_vendor_credit_date')} label={intl.get('vendor_credit.drawer.label_vendor_credit_date')}
> >
<FormatDate value={vendorCredit.formatted_vendor_credit_date} /> {vendorCredit.formatted_vendor_credit_date}
</DetailItem> </DetailItem>
<DetailItem <DetailItem
label={intl.get('vendor_credit.drawer.label_vendor_credit_no')} label={intl.get('vendor_credit.drawer.label_vendor_credit_no')}

View File

@@ -1,16 +1,13 @@
// @ts-nocheck // @ts-nocheck
import React from 'react'; import React from 'react';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import moment from 'moment';
export const useGLEntriesTableColumns = () => { export const useGLEntriesTableColumns = () => {
return React.useMemo( return React.useMemo(
() => [ () => [
{ {
Header: intl.get('date'), Header: intl.get('date'),
accessor: ({ formatted_date }) => accessor: 'date.formatted_date',
moment(formatted_date).format('YYYY MMM DD'),
width: 140, width: 140,
className: 'date', className: 'date',
textOverview: true, textOverview: true,

View File

@@ -161,8 +161,7 @@ export function useBillsTableColumns() {
{ {
id: 'bill_date', id: 'bill_date',
Header: intl.get('bill_date'), Header: intl.get('bill_date'),
accessor: 'bill_date', accessor: 'formatted_bill_date',
Cell: FormatDateCell,
width: 110, width: 110,
className: 'bill_date', className: 'bill_date',
clickable: true, clickable: true,

View File

@@ -5,14 +5,7 @@ import clsx from 'classnames';
import { Intent, Tag, Menu, MenuItem, MenuDivider } from '@blueprintjs/core'; import { Intent, Tag, Menu, MenuItem, MenuDivider } from '@blueprintjs/core';
import { CLASSES } from '@/constants/classes'; import { CLASSES } from '@/constants/classes';
import { import { FormattedMessage as T, Choose, If, Icon, Can } from '@/components';
FormatDateCell,
FormattedMessage as T,
Choose,
If,
Icon,
Can,
} from '@/components';
import { safeCallback } from '@/utils'; import { safeCallback } from '@/utils';
import { VendorCreditAction, AbilitySubject } from '@/constants/abilityOption'; import { VendorCreditAction, AbilitySubject } from '@/constants/abilityOption';
@@ -119,7 +112,6 @@ export function useVendorsCreditNoteTableColumns() {
id: 'credit_date', id: 'credit_date',
Header: intl.get('date'), Header: intl.get('date'),
accessor: 'formatted_vendor_credit_date', accessor: 'formatted_vendor_credit_date',
Cell: FormatDateCell,
width: 110, width: 110,
className: 'credit_date', className: 'credit_date',
clickable: true, clickable: true,

View File

@@ -11,7 +11,7 @@ import {
Position, Position,
} from '@blueprintjs/core'; } from '@blueprintjs/core';
import { Icon, Money, FormatDateCell, Can } from '@/components'; import { Icon, Money, Can } from '@/components';
import { PaymentMadeAction, AbilitySubject } from '@/constants/abilityOption'; import { PaymentMadeAction, AbilitySubject } from '@/constants/abilityOption';
import { safeCallback } from '@/utils'; import { safeCallback } from '@/utils';
@@ -29,7 +29,7 @@ export function ActionsMenu({
}) { }) {
return ( return (
<Menu> <Menu>
<MenuItem <MenuItem
icon={<Icon icon="reader-18" />} icon={<Icon icon="reader-18" />}
text={intl.get('view_details')} text={intl.get('view_details')}
onClick={safeCallback(onViewDetails, original)} onClick={safeCallback(onViewDetails, original)}
@@ -79,8 +79,7 @@ export function usePaymentMadesTableColumns() {
{ {
id: 'payment_date', id: 'payment_date',
Header: intl.get('payment_date'), Header: intl.get('payment_date'),
Cell: FormatDateCell, accessor: 'formatted_payment_date',
accessor: 'payment_date',
width: 140, width: 140,
className: 'payment_date', className: 'payment_date',
clickable: true, clickable: true,

View File

@@ -5,7 +5,6 @@ import clsx from 'classnames';
import { Intent, Tag, Menu, MenuItem, MenuDivider } from '@blueprintjs/core'; import { Intent, Tag, Menu, MenuItem, MenuDivider } from '@blueprintjs/core';
import { CLASSES } from '@/constants/classes'; import { CLASSES } from '@/constants/classes';
import { import {
FormatDateCell,
FormattedMessage as T, FormattedMessage as T,
Choose, Choose,
If, If,
@@ -112,7 +111,6 @@ export function useCreditNoteTableColumns() {
id: 'credit_date', id: 'credit_date',
Header: intl.get('credit_note.column.credit_date'), Header: intl.get('credit_note.column.credit_date'),
accessor: 'formatted_credit_note_date', accessor: 'formatted_credit_note_date',
Cell: FormatDateCell,
width: 110, width: 110,
className: 'credit_date', className: 'credit_date',
clickable: true, clickable: true,

View File

@@ -164,8 +164,7 @@ export function useEstiamtesTableColumns() {
{ {
id: 'estimate_date', id: 'estimate_date',
Header: intl.get('estimate_date'), Header: intl.get('estimate_date'),
accessor: 'estimate_date', accessor: 'formatted_estimate_date',
Cell: FormatDateCell,
width: 140, width: 140,
className: 'estimate_date', className: 'estimate_date',
clickable: true, clickable: true,

View File

@@ -128,7 +128,7 @@ export function ActionsMenu({
onQuick, onQuick,
onViewDetails, onViewDetails,
onPrint, onPrint,
onSendMail onSendMail,
}, },
row: { original }, row: { original },
}) { }) {
@@ -202,8 +202,7 @@ export function useInvoicesTableColumns() {
{ {
id: 'invoice_date', id: 'invoice_date',
Header: intl.get('invoice_date'), Header: intl.get('invoice_date'),
accessor: 'invoice_date', accessor: 'invoice_date_formatted',
Cell: FormatDateCell,
width: 110, width: 110,
className: 'invoice_date', className: 'invoice_date',
clickable: true, clickable: true,

View File

@@ -90,8 +90,7 @@ export function usePaymentReceivesColumns() {
{ {
id: 'payment_date', id: 'payment_date',
Header: intl.get('payment_date'), Header: intl.get('payment_date'),
accessor: 'payment_date', accessor: 'formatted_payment_date',
Cell: FormatDateCell,
width: 140, width: 140,
className: 'payment_date', className: 'payment_date',
clickable: true, clickable: true,

View File

@@ -119,8 +119,7 @@ export function useReceiptsTableColumns() {
{ {
id: 'receipt_date', id: 'receipt_date',
Header: intl.get('receipt_date'), Header: intl.get('receipt_date'),
accessor: 'receipt_date', accessor: 'formatted_receipt_date',
Cell: FormatDateCell,
width: 140, width: 140,
className: 'receipt_date', className: 'receipt_date',
clickable: true, clickable: true,