Compare commits

...

11 Commits

Author SHA1 Message Date
Ahmed Bouhuolia
7f746b96c8 chore: remove /data directory from git ignored dirs 2023-08-29 03:05:19 +02:00
Ahmed Bouhuolia
ed2bca6b74 chore: dump CHANGELOG for 0.9.12 2023-08-29 02:54:03 +02:00
Ahmed Bouhuolia
f9d5a3c69a Merge pull request #231 from bigcapitalhq/fix-filter-transactions-date-format
fix(server): date format of filtering transactions by date range
2023-08-29 02:42:35 +02:00
Ahmed Bouhuolia
84445d4bac fix(server): date format of filtering transactions by date range 2023-08-29 02:41:40 +02:00
Ahmed Bouhuolia
75d8864aae Merge remote-tracking branch 'refs/remotes/origin/develop' into develop 2023-08-28 21:03:23 +02:00
Ahmed Bouhuolia
cb6dab08d8 chore: remove un-used methods 2023-08-28 21:01:34 +02:00
Ahmed Bouhuolia
5112ef9b64 Merge pull request #230 from bigcapitalhq/abouhuolia/big-60-fromto-date-is-not-showing-up-on-inventory-items-details
fix: change the default from/date date value of reports
2023-08-28 20:59:02 +02:00
Ahmed Bouhuolia
a630e8a612 fix: change the default from/to dates of customers/vendors transactions 2023-08-28 20:53:52 +02:00
Ahmed Bouhuolia
4df63561cf fix(webapp): change the default from/to date values of reports 2023-08-27 16:00:54 +02:00
Ahmed Bouhuolia
c7a3bac44c fix(server): change the default from/date date value of reports 2023-08-27 15:50:52 +02:00
Ahmed Bouhuolia
251c54be60 Merge pull request #229 from bigcapitalhq/abouhuolia/big-45-receivablepayable-again-report-issue
fix AP/AR aging summary issue
2023-08-27 00:58:17 +02:00
47 changed files with 189 additions and 128 deletions

7
.gitignore vendored
View File

@@ -1,4 +1,9 @@
node_modules/ node_modules/
data
# Docker volumes data directory
/data
# Production env file
.env .env
test-results/ test-results/

View File

@@ -2,6 +2,20 @@
All notable changes to Bigcapital server-side will be in this file. All notable changes to Bigcapital server-side will be in this file.
# [0.9.12] - 29-08-2023
* Refactor: split the services to multiple service classes. (by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/202)
* Fix: create quick customer/vendor by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/206
* Fix: typo in bill success message without bill number by @KalliopiPliogka in https://github.com/bigcapitalhq/bigcapital/pull/219
* Fix: AP/AR aging summary issue by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/229
* Fix: shouldn't write GL entries when save transaction as draft. by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/221
* Fix: Transaction type of credit note and vendor credit are not defined on account transactions by @abouolia in
* Fix: date format of filtering transactions by date range by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/231
* Fix: change the default from/date date value of reports by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/230
* Fix: typos in words start with `A` letter by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/227
* Fix: filter by customers, vendors and items in reports do not work by @abouolia in https://github.com/bigcapitalhq/bigcapital/pull/224
https://github.com/bigcapitalhq/bigcapital/pull/225
# [0.9.11] - 23-07-2023 # [0.9.11] - 23-07-2023
* added: Restart policy to docker compose files. by @suhaibaffan in https://github.com/bigcapitalhq/bigcapital/pull/198 * added: Restart policy to docker compose files. by @suhaibaffan in https://github.com/bigcapitalhq/bigcapital/pull/198

View File

@@ -0,0 +1,28 @@
export const TransactionTypes = {
SaleInvoice: 'Sale invoice',
SaleReceipt: 'Sale receipt',
PaymentReceive: 'Payment receive',
Bill: 'Bill',
BillPayment: 'Payment made',
VendorOpeningBalance: 'Vendor opening balance',
CustomerOpeningBalance: 'Customer opening balance',
InventoryAdjustment: 'Inventory adjustment',
ManualJournal: 'Manual journal',
Journal: 'Manual journal',
Expense: 'Expense',
OwnerContribution: 'Owner contribution',
TransferToAccount: 'Transfer to account',
TransferFromAccount: 'Transfer from account',
OtherIncome: 'Other income',
OtherExpense: 'Other expense',
OwnerDrawing: 'Owner drawing',
InvoiceWriteOff: 'Invoice write-off',
CreditNote: 'transaction_type.credit_note',
VendorCredit: 'transaction_type.vendor_credit',
RefundCreditNote: 'transaction_type.refund_credit_note',
RefundVendorCredit: 'transaction_type.refund_vendor_credit',
LandedCost: 'transaction_type.landed_cost',
};

View File

@@ -59,15 +59,9 @@ export default class AccountTransaction extends TenantModel {
} }
}, },
filterDateRange(query, startDate, endDate, type = 'day') { filterDateRange(query, startDate, endDate, type = 'day') {
const dateFormat = 'YYYY-MM-DD HH:mm:ss'; const dateFormat = 'YYYY-MM-DD';
const fromDate = moment(startDate) const fromDate = moment(startDate).startOf(type).format(dateFormat);
.utcOffset(0) const toDate = moment(endDate).endOf(type).format(dateFormat);
.startOf(type)
.format(dateFormat);
const toDate = moment(endDate)
.utcOffset(0)
.endOf(type)
.format(dateFormat);
if (startDate) { if (startDate) {
query.where('date', '>=', fromDate); query.where('date', '>=', fromDate);
@@ -111,7 +105,6 @@ export default class AccountTransaction extends TenantModel {
query.modify('filterDateRange', null, toDate); query.modify('filterDateRange', null, toDate);
query.modify('sumationCreditDebit'); query.modify('sumationCreditDebit');
}, },
contactsOpeningBalance( contactsOpeningBalance(
query, query,
openingDate, openingDate,

View File

@@ -33,7 +33,7 @@ export default class InventoryCostLotTracker extends TenantModel {
query.groupBy('item_id'); query.groupBy('item_id');
}, },
filterDateRange(query, startDate, endDate, type = 'day') { filterDateRange(query, startDate, endDate, type = 'day') {
const dateFormat = 'YYYY-MM-DD HH:mm:ss'; const dateFormat = 'YYYY-MM-DD';
const fromDate = moment(startDate).startOf(type).format(dateFormat); const fromDate = moment(startDate).startOf(type).format(dateFormat);
const toDate = moment(endDate).endOf(type).format(dateFormat); const toDate = moment(endDate).endOf(type).format(dateFormat);

View File

@@ -36,7 +36,7 @@ export default class InventoryTransaction extends TenantModel {
static get modifiers() { static get modifiers() {
return { return {
filterDateRange(query, startDate, endDate, type = 'day') { filterDateRange(query, startDate, endDate, type = 'day') {
const dateFormat = 'YYYY-MM-DD HH:mm:ss'; const dateFormat = 'YYYY-MM-DD';
const fromDate = moment(startDate).startOf(type).format(dateFormat); const fromDate = moment(startDate).startOf(type).format(dateFormat);
const toDate = moment(endDate).endOf(type).format(dateFormat); const toDate = moment(endDate).endOf(type).format(dateFormat);

View File

@@ -176,7 +176,7 @@ export default class SaleInvoice extends mixin(TenantModel, [
* Filters the invoices between the given date range. * Filters the invoices between the given date range.
*/ */
filterDateRange(query, startDate, endDate, type = 'day') { filterDateRange(query, startDate, endDate, type = 'day') {
const dateFormat = 'YYYY-MM-DD HH:mm:ss'; const dateFormat = 'YYYY-MM-DD';
const fromDate = moment(startDate).startOf(type).format(dateFormat); const fromDate = moment(startDate).startOf(type).format(dateFormat);
const toDate = moment(endDate).endOf(type).format(dateFormat); const toDate = moment(endDate).endOf(type).format(dateFormat);

View File

@@ -1,17 +1,12 @@
import { Service, Inject } from 'typedi'; import { Service } from 'typedi';
import { includes, difference, camelCase, upperFirst } from 'lodash'; import { includes, camelCase, upperFirst } from 'lodash';
import { ACCOUNT_TYPE } from '@/data/AccountTypes'; import { IAccount } from '@/interfaces';
import { IAccount, ICashflowTransactionLine } from '@/interfaces';
import { getCashflowTransactionType } from './utils'; import { getCashflowTransactionType } from './utils';
import { ServiceError } from '@/exceptions'; import { ServiceError } from '@/exceptions';
import { CASHFLOW_TRANSACTION_TYPE, ERRORS } from './constants'; import { CASHFLOW_TRANSACTION_TYPE, ERRORS } from './constants';
import HasTenancyService from '@/services/Tenancy/TenancyService';
@Service() @Service()
export class CommandCashflowValidator { export class CommandCashflowValidator {
@Inject()
private tenancy: HasTenancyService;
/** /**
* Validates the lines accounts type should be cash or bank account. * Validates the lines accounts type should be cash or bank account.
* @param {IAccount} accounts - * @param {IAccount} accounts -

View File

@@ -1,14 +0,0 @@
import { difference, includes } from 'lodash';
import { ICashflowTransactionLine } from '@/interfaces';
import { ServiceError } from '@/exceptions';
import { Inject, Service } from 'typedi';
import { CASHFLOW_TRANSACTION_TYPE, ERRORS } from './constants';
import { IAccount } from '@/interfaces';
import HasTenancyService from '@/services/Tenancy/TenancyService';
@Service()
export default class CommandCashflowTransaction {
@Inject()
private tenancy: HasTenancyService;
}

View File

@@ -37,7 +37,7 @@ export default class BalanceSheetStatementService
displayColumnsBy: 'month', displayColumnsBy: 'month',
fromDate: moment().startOf('year').format('YYYY-MM-DD'), fromDate: moment().startOf('year').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'),
numberFormat: { numberFormat: {
precision: 2, precision: 2,

View File

@@ -40,7 +40,7 @@ export default class CashFlowStatementService
displayColumnsType: 'total', displayColumnsType: 'total',
displayColumnsBy: 'day', displayColumnsBy: 'day',
fromDate: moment().startOf('year').format('YYYY-MM-DD'), fromDate: moment().startOf('year').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'),
numberFormat: { numberFormat: {
precision: 2, precision: 2,
divideOn1000: false, divideOn1000: false,

View File

@@ -31,8 +31,8 @@ export default class GeneralLedgerService {
*/ */
get defaultQuery() { get defaultQuery() {
return { return {
fromDate: moment().startOf('year').format('YYYY-MM-DD'), fromDate: moment().startOf('month').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'),
basis: 'cash', basis: 'cash',
numberFormat: { numberFormat: {
noCents: false, noCents: false,

View File

@@ -16,13 +16,13 @@ import { Tenant } from '@/system/models';
@Service() @Service()
export default class InventoryDetailsService extends FinancialSheet { export default class InventoryDetailsService extends FinancialSheet {
@Inject() @Inject()
tenancy: TenancyService; private tenancy: TenancyService;
@Inject() @Inject()
reportRepo: InventoryDetailsRepository; private reportRepo: InventoryDetailsRepository;
@Inject() @Inject()
inventoryService: InventoryService; private inventoryService: InventoryService;
/** /**
* Defaults balance sheet filter query. * Defaults balance sheet filter query.
@@ -30,8 +30,8 @@ export default class InventoryDetailsService extends FinancialSheet {
*/ */
private get defaultQuery(): IInventoryDetailsQuery { private get defaultQuery(): IInventoryDetailsQuery {
return { return {
fromDate: moment().startOf('year').format('YYYY-MM-DD'), fromDate: moment().startOf('month').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'),
itemsIds: [], itemsIds: [],
numberFormat: { numberFormat: {
precision: 2, precision: 2,

View File

@@ -27,7 +27,7 @@ export default class InventoryValuationSheetService {
*/ */
get defaultQuery(): IInventoryValuationReportQuery { get defaultQuery(): IInventoryValuationReportQuery {
return { return {
asDate: moment().endOf('year').format('YYYY-MM-DD'), asDate: moment().format('YYYY-MM-DD'),
itemsIds: [], itemsIds: [],
numberFormat: { numberFormat: {
precision: 2, precision: 2,

View File

@@ -25,8 +25,8 @@ export default class JournalSheetService {
*/ */
get defaultQuery() { get defaultQuery() {
return { return {
fromDate: moment().startOf('year').format('YYYY-MM-DD'), fromDate: moment().startOf('month').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'),
fromRange: null, fromRange: null,
toRange: null, toRange: null,
accountsIds: [], accountsIds: [],

View File

@@ -8,7 +8,7 @@ import { IProfitLossSheetQuery } from '@/interfaces';
*/ */
export const getDefaultPLQuery = (): IProfitLossSheetQuery => ({ export const getDefaultPLQuery = (): IProfitLossSheetQuery => ({
fromDate: moment().startOf('year').format('YYYY-MM-DD'), fromDate: moment().startOf('year').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'),
numberFormat: { numberFormat: {
divideOn1000: false, divideOn1000: false,

View File

@@ -12,10 +12,7 @@ import { Tenant } from '@/system/models';
@Service() @Service()
export default class InventoryValuationReportService { export default class InventoryValuationReportService {
@Inject() @Inject()
tenancy: TenancyService; private tenancy: TenancyService;
@Inject('logger')
logger: any;
/** /**
* Defaults balance sheet filter query. * Defaults balance sheet filter query.
@@ -23,8 +20,8 @@ export default class InventoryValuationReportService {
*/ */
get defaultQuery(): IInventoryValuationReportQuery { get defaultQuery(): IInventoryValuationReportQuery {
return { return {
fromDate: moment().startOf('year').format('YYYY-MM-DD'), fromDate: moment().startOf('month').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'),
itemsIds: [], itemsIds: [],
numberFormat: { numberFormat: {
precision: 2, precision: 2,
@@ -73,9 +70,9 @@ export default class InventoryValuationReportService {
tenantId: number, tenantId: number,
query: IInventoryValuationReportQuery query: IInventoryValuationReportQuery
): Promise<{ ): Promise<{
data: IInventoryValuationStatement, data: IInventoryValuationStatement;
query: IInventoryValuationReportQuery, query: IInventoryValuationReportQuery;
meta: IInventoryValuationSheetMeta, meta: IInventoryValuationSheetMeta;
}> { }> {
const { Item, InventoryTransaction } = this.tenancy.models(tenantId); const { Item, InventoryTransaction } = this.tenancy.models(tenantId);
@@ -87,7 +84,7 @@ export default class InventoryValuationReportService {
...this.defaultQuery, ...this.defaultQuery,
...query, ...query,
}; };
const inventoryItems = await Item.query().onBuild(q => { const inventoryItems = await Item.query().onBuild((q) => {
q.where('type', 'inventory'); q.where('type', 'inventory');
if (filter.itemsIds.length > 0) { if (filter.itemsIds.length > 0) {
@@ -106,7 +103,7 @@ export default class InventoryValuationReportService {
builder.whereIn('itemId', inventoryItemsIds); builder.whereIn('itemId', inventoryItemsIds);
// Filter the date range of the sheet. // Filter the date range of the sheet.
builder.modify('filterDateRange', filter.fromDate, filter.toDate) builder.modify('filterDateRange', filter.fromDate, filter.toDate);
} }
); );

View File

@@ -23,8 +23,8 @@ export default class SalesByItemsReportService {
*/ */
get defaultQuery(): ISalesByItemsReportQuery { get defaultQuery(): ISalesByItemsReportQuery {
return { return {
fromDate: moment().startOf('year').format('YYYY-MM-DD'), fromDate: moment().startOf('month').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'),
itemsIds: [], itemsIds: [],
numberFormat: { numberFormat: {
precision: 2, precision: 2,

View File

@@ -31,8 +31,8 @@ export default class TransactionsByCustomersService
*/ */
get defaultQuery(): ITransactionsByCustomersFilter { get defaultQuery(): ITransactionsByCustomersFilter {
return { return {
fromDate: moment().startOf('year').format('YYYY-MM-DD'), fromDate: moment().startOf('month').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'),
numberFormat: { numberFormat: {
precision: 2, precision: 2,
divideOn1000: false, divideOn1000: false,

View File

@@ -32,7 +32,7 @@ export default class TransactionsByVendorsService
*/ */
get defaultQuery(): ITransactionsByVendorsFilter { get defaultQuery(): ITransactionsByVendorsFilter {
return { return {
fromDate: moment().format('YYYY-MM-DD'), fromDate: moment().startOf('month').format('YYYY-MM-DD'),
toDate: moment().format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'),
numberFormat: { numberFormat: {
precision: 2, precision: 2,

View File

@@ -27,7 +27,7 @@ export default class TrialBalanceSheetService extends FinancialSheet {
get defaultQuery(): ITrialBalanceSheetQuery { get defaultQuery(): ITrialBalanceSheetQuery {
return { return {
fromDate: moment().startOf('year').format('YYYY-MM-DD'), fromDate: moment().startOf('year').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'),
numberFormat: { numberFormat: {
divideOn1000: false, divideOn1000: false,
negativeFormat: 'mines', negativeFormat: 'mines',

View File

@@ -9,13 +9,9 @@ import HasTenancyService from '@/services/Tenancy/TenancyService';
import UnitOfWork from '@/services/UnitOfWork'; import UnitOfWork from '@/services/UnitOfWork';
import events from '@/subscribers/events'; import events from '@/subscribers/events';
import { ERRORS } from './constants'; import { ERRORS } from './constants';
import { ItemsValidators } from './ItemValidators';
@Service() @Service()
export class DeleteItem { export class DeleteItem {
@Inject()
private validators: ItemsValidators;
@Inject() @Inject()
private tenancy: HasTenancyService; private tenancy: HasTenancyService;

View File

@@ -1,5 +0,0 @@
export default class ItemsCostService {
}

View File

@@ -20,7 +20,7 @@ export default function APAgingSummaryTable({
}) { }) {
// AP aging summary report content. // AP aging summary report content.
const { const {
APAgingSummary: { table }, APAgingSummary: { table, query },
isAPAgingLoading, isAPAgingLoading,
} = useAPAgingSummaryContext(); } = useAPAgingSummaryContext();
@@ -31,7 +31,7 @@ export default function APAgingSummaryTable({
<FinancialSheet <FinancialSheet
companyName={organizationName} companyName={organizationName}
sheetType={intl.get('payable_aging_summary')} sheetType={intl.get('payable_aging_summary')}
asDate={new Date()} asDate={query.as_date}
loading={isAPAgingLoading} loading={isAPAgingLoading}
> >
<APAgingSummaryDataTable <APAgingSummaryDataTable

View File

@@ -11,7 +11,10 @@ const ARAgingSummaryContext = createContext();
*/ */
function ARAgingSummaryProvider({ filter, ...props }) { function ARAgingSummaryProvider({ filter, ...props }) {
// Transformes the filter from to the url query. // Transformes the filter from to the url query.
const query = useMemo(() => transformFilterFormToQuery(filter), [filter]); const requestQuery = useMemo(
() => transformFilterFormToQuery(filter),
[filter],
);
// A/R aging summary sheet context. // A/R aging summary sheet context.
const { const {
@@ -19,11 +22,10 @@ function ARAgingSummaryProvider({ filter, ...props }) {
isLoading: isARAgingLoading, isLoading: isARAgingLoading,
isFetching: isARAgingFetching, isFetching: isARAgingFetching,
refetch, refetch,
} = useARAgingSummaryReport(query, { keepPreviousData: true }); } = useARAgingSummaryReport(requestQuery, { keepPreviousData: true });
const provider = { const provider = {
ARAgingSummary, ARAgingSummary,
isARAgingLoading, isARAgingLoading,
isARAgingFetching, isARAgingFetching,
refetch, refetch,

View File

@@ -20,7 +20,7 @@ export default function ReceivableAgingSummaryTable({
}) { }) {
// AR aging summary report context. // AR aging summary report context.
const { const {
ARAgingSummary: { table }, ARAgingSummary: { table, query },
isARAgingLoading, isARAgingLoading,
} = useARAgingSummaryContext(); } = useARAgingSummaryContext();
@@ -31,7 +31,7 @@ export default function ReceivableAgingSummaryTable({
<FinancialSheet <FinancialSheet
companyName={organizationName} companyName={organizationName}
sheetType={intl.get('receivable_aging_summary')} sheetType={intl.get('receivable_aging_summary')}
asDate={new Date()} asDate={query.as_date}
loading={isARAgingLoading} loading={isARAgingLoading}
> >
<ARAgingSummaryDataTable <ARAgingSummaryDataTable

View File

@@ -15,7 +15,7 @@ import { useAppQueryString } from '@/hooks';
*/ */
export const getDefaultBalanceSheetQuery = () => ({ export const getDefaultBalanceSheetQuery = () => ({
fromDate: moment().startOf('year').format('YYYY-MM-DD'), fromDate: moment().startOf('year').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'),
basis: 'cash', basis: 'cash',
displayColumnsType: 'total', displayColumnsType: 'total',
filterByOption: 'without-zero-balance', filterByOption: 'without-zero-balance',

View File

@@ -12,7 +12,7 @@ import { useAppQueryString } from '@/hooks';
export const getDefaultCashFlowSheetQuery = () => { export const getDefaultCashFlowSheetQuery = () => {
return { return {
fromDate: moment().startOf('year').format('YYYY-MM-DD'), fromDate: moment().startOf('year').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'),
basis: 'cash', basis: 'cash',
displayColumnsType: 'total', displayColumnsType: 'total',
filterByOption: 'with-transactions', filterByOption: 'with-transactions',

View File

@@ -18,7 +18,7 @@ export default function CustomersBalanceSummaryTable({
companyName, companyName,
}) { }) {
const { const {
CustomerBalanceSummary: { table }, CustomerBalanceSummary: { table, query },
} = useCustomersBalanceSummaryContext(); } = useCustomersBalanceSummaryContext();
// Retrieves the customers summary columns. // Retrieves the customers summary columns.
@@ -28,7 +28,7 @@ export default function CustomersBalanceSummaryTable({
<FinancialSheet <FinancialSheet
companyName={companyName} companyName={companyName}
sheetType={intl.get('customers_balance_summary')} sheetType={intl.get('customers_balance_summary')}
asDate={new Date()} asDate={query.as_date}
> >
<CustomerBalanceDataTable <CustomerBalanceDataTable
columns={columns} columns={columns}

View File

@@ -13,6 +13,7 @@ import { CustomersTransactionsBody } from './CustomersTransactionsBody';
import { CustomersTransactionsProvider } from './CustomersTransactionsProvider'; import { CustomersTransactionsProvider } from './CustomersTransactionsProvider';
import { compose } from '@/utils'; import { compose } from '@/utils';
import { useCustomersTransactionsQuery } from './_utils';
/** /**
* Customers transactions. * Customers transactions.
@@ -22,11 +23,7 @@ function CustomersTransactions({
toggleCustomersTransactionsFilterDrawer, toggleCustomersTransactionsFilterDrawer,
}) { }) {
// filter // filter
const [filter, setFilter] = useState({ const [filter, setFilter] = useCustomersTransactionsQuery();
fromDate: moment().startOf('year').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'),
filterByOption: 'with-transactions',
});
const handleFilterSubmit = (filter) => { const handleFilterSubmit = (filter) => {
const _filter = { const _filter = {

View File

@@ -14,7 +14,7 @@ function CustomersTransactionsProvider({ filter, ...props }) {
filter, filter,
]); ]);
// fetches the customers transactions. // Fetches the customers transactions.
const { const {
data: customersTransactions, data: customersTransactions,
isFetching: isCustomersTransactionsFetching, isFetching: isCustomersTransactionsFetching,

View File

@@ -1,6 +1,11 @@
// @ts-nocheck
import * as Yup from 'yup'; import * as Yup from 'yup';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import moment from 'moment'; import moment from 'moment';
import { transformToForm } from '@/utils';
import { castArray } from 'lodash';
import { useMemo } from 'react';
import { useAppQueryString } from '@/hooks';
export const getCustomersTransactionsQuerySchema = () => { export const getCustomersTransactionsQuerySchema = () => {
return Yup.object().shape({ return Yup.object().shape({
@@ -13,7 +18,31 @@ export const getCustomersTransactionsQuerySchema = () => {
}; };
export const getCustomersTransactionsDefaultQuery = () => ({ export const getCustomersTransactionsDefaultQuery = () => ({
fromDate: moment().toDate(), fromDate: moment().startOf('month').format('YYYY-MM-DD'),
toDate: moment().toDate(), toDate: moment().format('YYYY-MM-DD'),
customersIds: [], customersIds: [],
filterByOption: 'with-transactions',
}); });
const parseCustomersTransactionsQuery = (query) => {
const defaultQuery = getCustomersTransactionsDefaultQuery();
const transformedQuery = {
...defaultQuery,
...transformToForm(query, defaultQuery),
};
return {
...transformedQuery,
customersIds: castArray(transformedQuery.customersIds),
};
};
export const useCustomersTransactionsQuery = () => {
const [locationQuery, setLocationQuery] = useAppQueryString();
const query = useMemo(
() => parseCustomersTransactionsQuery(locationQuery),
[locationQuery],
);
return [query, setLocationQuery];
};

View File

@@ -28,8 +28,8 @@ export const filterAccountsOptions = [
* Retrieves the default general ledger query. * Retrieves the default general ledger query.
*/ */
export const getDefaultGeneralLedgerQuery = () => ({ export const getDefaultGeneralLedgerQuery = () => ({
fromDate: moment().startOf('year').format('YYYY-MM-DD'), fromDate: moment().startOf('month').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'),
basis: 'accrual', basis: 'accrual',
filterByOption: 'with-transactions', filterByOption: 'with-transactions',
branchesIds: [], branchesIds: [],

View File

@@ -35,8 +35,8 @@ export function InventoryItemDetailsTable({
companyName={companyName} companyName={companyName}
sheetType={intl.get('inventory_item_details')} sheetType={intl.get('inventory_item_details')}
loading={isInventoryItemDetailsLoading} loading={isInventoryItemDetailsLoading}
fromDate={query.from_date} fromDate={query.fromDate}
toDate={query.to_date} toDate={query.toDate}
fullWidth={true} fullWidth={true}
> >
<InventoryItemDetailsDataTable <InventoryItemDetailsDataTable

View File

@@ -31,9 +31,6 @@ const numericColumn = R.curry((data, index, column) => ({
align: Align.Right, align: Align.Right,
})); }));
/**
* columns mapper.
*/
const columnsMapper = R.curry((data, index, column) => ({ const columnsMapper = R.curry((data, index, column) => ({
id: column.key, id: column.key,
key: column.key, key: column.key,

View File

@@ -12,8 +12,8 @@ import { transformToForm } from '@/utils';
* Retrieves inventory item details default query. * Retrieves inventory item details default query.
*/ */
export const getInventoryItemDetailsDefaultQuery = () => ({ export const getInventoryItemDetailsDefaultQuery = () => ({
fromDate: moment().startOf('year').format('YYYY-MM-DD'), fromDate: moment().startOf('month').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'),
itemsIds: [], itemsIds: [],
warehousesIds: [], warehousesIds: [],
branchesIds: [], branchesIds: [],

View File

@@ -19,7 +19,7 @@ export default function InventoryValuationTable({
}) { }) {
// inventory valuation context. // inventory valuation context.
const { const {
inventoryValuation: { tableRows }, inventoryValuation: { tableRows, query },
isLoading, isLoading,
} = useInventoryValuationContext(); } = useInventoryValuationContext();
@@ -30,7 +30,7 @@ export default function InventoryValuationTable({
<InventoryValuationSheet <InventoryValuationSheet
companyName={companyName} companyName={companyName}
sheetType={intl.get('inventory_valuation')} sheetType={intl.get('inventory_valuation')}
asDate={new Date()} asDate={query.as_date}
loading={isLoading} loading={isLoading}
> >
<InventoryValuationDataTable <InventoryValuationDataTable

View File

@@ -20,7 +20,7 @@ export const getInventoryValuationQuerySchema = () => {
* Retrieves the inventory valuation sheet default query. * Retrieves the inventory valuation sheet default query.
*/ */
export const getInventoryValuationQuery = () => ({ export const getInventoryValuationQuery = () => ({
asDate: moment().endOf('day').format('YYYY-MM-DD'), asDate: moment().format('YYYY-MM-DD'),
filterByOption: 'with-transactions', filterByOption: 'with-transactions',
itemsIds: [], itemsIds: [],
branchesIds: [], branchesIds: [],

View File

@@ -11,17 +11,16 @@ import { transformToForm } from '@/utils';
*/ */
export const getDefaultJournalQuery = () => { export const getDefaultJournalQuery = () => {
return { return {
fromDate: moment().startOf('year').format('YYYY-MM-DD'), fromDate: moment().startOf('month').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'),
basis: 'accrual', basis: 'accrual',
}; };
}; };
/** /**
* Parses balance sheet query. * Parses balance sheet query.
*/ */
const parseJournalQuery = (locationQuery) => { const parseJournalQuery = (locationQuery) => {
const defaultQuery = getDefaultJournalQuery(); const defaultQuery = getDefaultJournalQuery();
return { return {

View File

@@ -23,7 +23,7 @@ export default function ProfitLossSheetTable({
} = useProfitLossSheetContext(); } = useProfitLossSheetContext();
// Retrieves the profit/loss table columns. // Retrieves the profit/loss table columns.
const tableColumns = useProfitLossSheetColumns(); const columns = useProfitLossSheetColumns();
// Retrieve default expanded rows of balance sheet. // Retrieve default expanded rows of balance sheet.
const expandedRows = React.useMemo( const expandedRows = React.useMemo(
@@ -40,7 +40,7 @@ export default function ProfitLossSheetTable({
basis={query.basis} basis={query.basis}
> >
<ProfitLossDataTable <ProfitLossDataTable
columns={tableColumns} columns={columns}
data={table.rows} data={table.rows}
noInitialFetch={true} noInitialFetch={true}
expanded={expandedRows} expanded={expandedRows}

View File

@@ -16,7 +16,7 @@ import { castArray } from 'lodash';
export const getDefaultProfitLossQuery = () => ({ export const getDefaultProfitLossQuery = () => ({
basis: 'cash', basis: 'cash',
fromDate: moment().startOf('year').format('YYYY-MM-DD'), fromDate: moment().startOf('year').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'),
displayColumnsType: 'total', displayColumnsType: 'total',
filterByOption: 'with-transactions', filterByOption: 'with-transactions',

View File

@@ -11,8 +11,8 @@ import { castArray } from 'lodash';
* Retrieves the purchases by items query. * Retrieves the purchases by items query.
*/ */
export const getDefaultPurchasesByItemsQuery = () => ({ export const getDefaultPurchasesByItemsQuery = () => ({
fromDate: moment().startOf('year').format('YYYY-MM-DD'), fromDate: moment().startOf('month').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'),
filterByOption: 'with-transactions', filterByOption: 'with-transactions',
itemsIds: [], itemsIds: [],
}); });

View File

@@ -25,8 +25,8 @@ export const getSalesByItemsQueryShema = () => {
* Retrieves the default query. * Retrieves the default query.
*/ */
export const getDefaultSalesByItemsQuery = () => ({ export const getDefaultSalesByItemsQuery = () => ({
fromDate: moment().startOf('year').format('YYYY-MM-DD'), fromDate: moment().startOf('month').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'),
filterByOption: 'with-transactions', filterByOption: 'with-transactions',
itemsIds: [], itemsIds: [],
}); });

View File

@@ -12,7 +12,7 @@ import { transformToForm } from '@/utils';
export function getDefaultTrialBalanceQuery() { export function getDefaultTrialBalanceQuery() {
return { return {
fromDate: moment().startOf('year').format('YYYY-MM-DD'), fromDate: moment().startOf('year').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'),
basis: 'accrual', basis: 'accrual',
filterByOption: 'with-transactions', filterByOption: 'with-transactions',
branchesIds: [], branchesIds: [],

View File

@@ -9,7 +9,6 @@ import { tableRowTypesToClassnames } from '@/utils';
import { useVendorsBalanceColumns } from './components'; import { useVendorsBalanceColumns } from './components';
import { useVendorsBalanceSummaryContext } from './VendorsBalanceSummaryProvider'; import { useVendorsBalanceSummaryContext } from './VendorsBalanceSummaryProvider';
/** /**
* Vendors balance summary table. * Vendors balance summary table.
*/ */
@@ -18,7 +17,7 @@ export default function VendorsBalanceSummaryTable({
organizationName, organizationName,
}) { }) {
const { const {
VendorBalanceSummary: { table }, VendorBalanceSummary: { table, query },
} = useVendorsBalanceSummaryContext(); } = useVendorsBalanceSummaryContext();
// vendors balance summary columns. // vendors balance summary columns.
@@ -28,7 +27,7 @@ export default function VendorsBalanceSummaryTable({
<VendorBalanceFinancialSheet <VendorBalanceFinancialSheet
companyName={organizationName} companyName={organizationName}
sheetType={intl.get('vendors_balance_summary')} sheetType={intl.get('vendors_balance_summary')}
asDate={new Date()} asDate={query.as_date}
> >
<VendorBalanceDataTable <VendorBalanceDataTable
columns={columns} columns={columns}

View File

@@ -13,6 +13,7 @@ import VendorsTransactionsActionsBar from './VendorsTransactionsActionsBar';
import withVendorsTransactionsActions from './withVendorsTransactionsActions'; import withVendorsTransactionsActions from './withVendorsTransactionsActions';
import { compose } from '@/utils'; import { compose } from '@/utils';
import { useVendorsTransactionsQuery } from './_utils';
/** /**
* Vendors transactions. * Vendors transactions.
@@ -22,11 +23,7 @@ function VendorsTransactions({
toggleVendorsTransactionsFilterDrawer, toggleVendorsTransactionsFilterDrawer,
}) { }) {
// filter // filter
const [filter, setFilter] = useState({ const [filter, setFilter] = useVendorsTransactionsQuery();
fromDate: moment().startOf('year').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'),
filterByOption: 'with-transactions',
});
const handleFilterSubmit = (filter) => { const handleFilterSubmit = (filter) => {
const _filter = { const _filter = {

View File

@@ -1,6 +1,10 @@
// @ts-nocheck
import * as Yup from 'yup'; import * as Yup from 'yup';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import moment from 'moment'; import moment from 'moment';
import { useMemo } from 'react';
import { transformToForm } from '@/utils';
import { useAppQueryString } from '@/hooks';
/** /**
* The validation schema of vendors transactions. * The validation schema of vendors transactions.
@@ -19,7 +23,35 @@ export const getVendorTransactionsQuerySchema = () => {
* Retrieves the default query of vendors transactions. * Retrieves the default query of vendors transactions.
*/ */
export const getVendorsTransactionsDefaultQuery = () => ({ export const getVendorsTransactionsDefaultQuery = () => ({
fromDate: moment().toDate(), fromDate: moment().startOf('month').format('YYYY-MM-DD'),
toDate: moment().toDate(), toDate: moment().format('YYYY-MM-DD'),
vendorsIds: [], vendorsIds: [],
}); });
/**
* Parses the query of vendors transactions.
*/
const parseVendorsTransactionsQuery = (query) => {
const defaultQuery = getVendorsTransactionsDefaultQuery();
const transformed = {
...defaultQuery,
...transformToForm(query, defaultQuery),
};
return {
...transformed,
vendorsIds: transformed.vendorsIds ? transformed.vendorsIds : [],
};
};
/**
* Retrieves the query of vendors transactions.
*/
export const useVendorsTransactionsQuery = () => {
const [locationQuery, setLocationQuery] = useAppQueryString();
const query = useMemo(
() => parseVendorsTransactionsQuery(locationQuery),
[locationQuery],
);
return [query, setLocationQuery];
};