refactor(nestjs): list resources

This commit is contained in:
Ahmed Bouhuolia
2025-05-04 11:19:34 +02:00
parent 4f6ad2b293
commit c9d752d102
36 changed files with 180 additions and 63 deletions

View File

@@ -143,7 +143,7 @@ export class AccountsController {
status: 200, status: 200,
description: 'The accounts have been successfully retrieved.', description: 'The accounts have been successfully retrieved.',
}) })
async getAccounts(@Query() filter: IAccountsFilter) { async getAccounts(@Query() filter: Partial<IAccountsFilter>) {
return this.accountsApplication.getAccounts(filter); return this.accountsApplication.getAccounts(filter);
} }
} }

View File

@@ -115,7 +115,7 @@ export class AccountsApplication {
* @returns {Promise<{ accounts: IAccountResponse[]; filterMeta: IFilterMeta }>} * @returns {Promise<{ accounts: IAccountResponse[]; filterMeta: IFilterMeta }>}
*/ */
public getAccounts = ( public getAccounts = (
filterDTO: IAccountsFilter, filterDTO: Partial<IAccountsFilter>,
): Promise<{ accounts: Account[]; filterMeta: IFilterMeta }> => { ): Promise<{ accounts: Account[]; filterMeta: IFilterMeta }> => {
return this.getAccountsService.getAccountsList(filterDTO); return this.getAccountsService.getAccountsList(filterDTO);
}; };

View File

@@ -1,6 +1,6 @@
import { Inject, Injectable } from '@nestjs/common'; import { Inject, Injectable } from '@nestjs/common';
import * as R from 'ramda'; import * as R from 'ramda';
import { IAccountsFilter } from './Accounts.types'; import { IAccountsFilter, IAccountsStructureType } from './Accounts.types';
import { DynamicListService } from '../DynamicListing/DynamicList.service'; import { DynamicListService } from '../DynamicListing/DynamicList.service';
import { AccountTransformer } from './Account.transformer'; import { AccountTransformer } from './Account.transformer';
import { TransformerInjectable } from '../Transformer/TransformerInjectable.service'; import { TransformerInjectable } from '../Transformer/TransformerInjectable.service';
@@ -26,10 +26,17 @@ export class GetAccountsService {
* @returns {Promise<{ accounts: IAccountResponse[]; filterMeta: IFilterMeta }>} * @returns {Promise<{ accounts: IAccountResponse[]; filterMeta: IFilterMeta }>}
*/ */
public async getAccountsList( public async getAccountsList(
filterDTO: IAccountsFilter, filterDto: Partial<IAccountsFilter>,
): Promise<{ accounts: Account[]; filterMeta: IFilterMeta }> { ): Promise<{ accounts: Account[]; filterMeta: IFilterMeta }> {
const parsedFilterDto = {
sortOrder: 'desc',
columnSortBy: 'created_at',
inactiveMode: false,
structure: IAccountsStructureType.Tree,
...filterDto,
};
// Parses the stringified filter roles. // Parses the stringified filter roles.
const filter = this.parseListFilterDTO(filterDTO); const filter = this.parseListFilterDTO(parsedFilterDto);
// Dynamic list service. // Dynamic list service.
const dynamicList = await this.dynamicListService.dynamicList( const dynamicList = await this.dynamicListService.dynamicList(
@@ -49,7 +56,7 @@ export class GetAccountsService {
const transformedAccounts = await this.transformerService.transform( const transformedAccounts = await this.transformerService.transform(
accounts, accounts,
new AccountTransformer(), new AccountTransformer(),
{ accountsGraph, structure: filterDTO.structure }, { accountsGraph, structure: parsedFilterDto.structure },
); );
return { return {

View File

@@ -56,7 +56,7 @@ export class BillsApplication {
* Retrieve bills data table list. * Retrieve bills data table list.
* @param {IBillsFilter} billsFilter - * @param {IBillsFilter} billsFilter -
*/ */
public getBills(filterDTO: IBillsFilter) { public getBills(filterDTO: Partial<IBillsFilter>) {
return this.getBillsService.getBills(filterDTO); return this.getBillsService.getBills(filterDTO);
} }

View File

@@ -56,7 +56,7 @@ export class BillsController {
type: Number, type: Number,
description: 'The bill id', description: 'The bill id',
}) })
getBills(@Query() filterDTO: IBillsFilter) { getBills(@Query() filterDTO: Partial<IBillsFilter>) {
return this.billsApplication.getBills(filterDTO); return this.billsApplication.getBills(filterDTO);
} }

View File

@@ -21,13 +21,20 @@ export class GetBillsService {
* Retrieve bills data table list. * Retrieve bills data table list.
* @param {IBillsFilter} billsFilter - * @param {IBillsFilter} billsFilter -
*/ */
public async getBills(filterDTO: IBillsFilter): Promise<{ public async getBills(filterDTO: Partial<IBillsFilter>): Promise<{
bills: Bill; bills: Bill;
pagination: IPaginationMeta; pagination: IPaginationMeta;
filterMeta: IFilterMeta; filterMeta: IFilterMeta;
}> { }> {
const _filterDto = {
page: 1,
pageSize: 12,
sortOrder: 'desc',
columnSortBy: 'created_at',
...filterDTO,
};
// Parses bills list filter DTO. // Parses bills list filter DTO.
const filter = this.parseListFilterDTO(filterDTO); const filter = this.parseListFilterDTO(_filterDto);
// Dynamic list service. // Dynamic list service.
const dynamicFilter = await this.dynamicListService.dynamicList( const dynamicFilter = await this.dynamicListService.dynamicList(
@@ -42,7 +49,7 @@ export class GetBillsService {
dynamicFilter.buildQuery()(builder); dynamicFilter.buildQuery()(builder);
// Filter query. // Filter query.
filterDTO?.filterQuery && filterDTO?.filterQuery(builder); _filterDto?.filterQuery && _filterDto?.filterQuery(builder);
}) })
.pagination(filter.page - 1, filter.pageSize); .pagination(filter.page - 1, filter.pageSize);

View File

@@ -6,9 +6,13 @@ import {
Param, Param,
Post, Post,
Put, Put,
Query,
} from '@nestjs/common'; } from '@nestjs/common';
import { CustomersApplication } from './CustomersApplication.service'; import { CustomersApplication } from './CustomersApplication.service';
import { ICustomerOpeningBalanceEditDTO } from './types/Customers.types'; import {
ICustomerOpeningBalanceEditDTO,
ICustomersFilter,
} from './types/Customers.types';
import { ApiOperation, ApiTags } from '@nestjs/swagger'; import { ApiOperation, ApiTags } from '@nestjs/swagger';
import { CreateCustomerDto } from './dtos/CreateCustomer.dto'; import { CreateCustomerDto } from './dtos/CreateCustomer.dto';
import { EditCustomerDto } from './dtos/EditCustomer.dto'; import { EditCustomerDto } from './dtos/EditCustomer.dto';
@@ -24,6 +28,12 @@ export class CustomersController {
return this.customersApplication.getCustomer(customerId); return this.customersApplication.getCustomer(customerId);
} }
@Get()
@ApiOperation({ summary: 'Retrieves the customers paginated list.' })
getCustomers(@Query() filterDTO: Partial<ICustomersFilter>) {
return this.customersApplication.getCustomers(filterDTO);
}
@Post() @Post()
@ApiOperation({ summary: 'Create a new customer.' }) @ApiOperation({ summary: 'Create a new customer.' })
createCustomer(@Body() customerDTO: CreateCustomerDto) { createCustomer(@Body() customerDTO: CreateCustomerDto) {

View File

@@ -76,7 +76,7 @@ export class CustomersApplication {
* Retrieve customers paginated list. * Retrieve customers paginated list.
* @param {ICustomersFilter} filter - Cusotmers filter. * @param {ICustomersFilter} filter - Cusotmers filter.
*/ */
public getCustomers = (filterDTO: ICustomersFilter) => { public getCustomers = (filterDTO: Partial<ICustomersFilter>) => {
return this.getCustomersService.getCustomersList(filterDTO); return this.getCustomersService.getCustomersList(filterDTO);
}; };
} }

View File

@@ -34,10 +34,18 @@ export class GetCustomers {
* @returns {Promise<GetCustomersResponse>} * @returns {Promise<GetCustomersResponse>}
*/ */
public async getCustomersList( public async getCustomersList(
filterDTO: ICustomersFilter, filterDto: Partial<ICustomersFilter>,
): Promise<GetCustomersResponse> { ): Promise<GetCustomersResponse> {
const _filterDto = {
inactiveMode: false,
sortOrder: 'desc',
columnSortBy: 'created_at',
page: 1,
pageSize: 12,
...filterDto,
};
// Parses customers list filter DTO. // Parses customers list filter DTO.
const filter = this.parseCustomersListFilterDTO(filterDTO); const filter = this.parseCustomersListFilterDTO(_filterDto);
const dynamicList = await this.dynamicListService.dynamicList( const dynamicList = await this.dynamicListService.dynamicList(
this.customerModel(), this.customerModel(),

View File

@@ -1,6 +1,9 @@
import { BaseModel } from '@/models/Model'; import { BaseModel } from '@/models/Model';
export type ISortOrder = 'DESC' | 'ASC'; export enum ISortOrder {
DESC = 'DESC',
ASC = 'ASC'
}
export interface IDynamicFilter { export interface IDynamicFilter {
setModel(model: typeof BaseModel): void; setModel(model: typeof BaseModel): void;
@@ -18,7 +21,7 @@ export interface IFilterRole {
export interface IDynamicListFilter { export interface IDynamicListFilter {
customViewId?: number; customViewId?: number;
filterRoles?: IFilterRole[]; filterRoles?: IFilterRole[];
columnSortBy: ISortOrder; columnSortBy: string;
sortOrder: ISortOrder; sortOrder: ISortOrder;
stringifiedFilterRoles?: string; stringifiedFilterRoles?: string;
searchKeyword?: string; searchKeyword?: string;

View File

@@ -1,9 +1,9 @@
import { castArray, isEmpty } from 'lodash'; import { castArray, isEmpty } from 'lodash';
import { Injectable } from '@nestjs/common';
import { IDynamicListFilter } from './DynamicFilter/DynamicFilter.types'; import { IDynamicListFilter } from './DynamicFilter/DynamicFilter.types';
import { DynamicListSortBy } from './DynamicListSortBy.service'; import { DynamicListSortBy } from './DynamicListSortBy.service';
import { DynamicListSearch } from './DynamicListSearch.service'; import { DynamicListSearch } from './DynamicListSearch.service';
import { DynamicListCustomView } from './DynamicListCustomView.service'; import { DynamicListCustomView } from './DynamicListCustomView.service';
import { Injectable } from '@nestjs/common';
import { DynamicListFilterRoles } from './DynamicListFilterRoles.service'; import { DynamicListFilterRoles } from './DynamicListFilterRoles.service';
import { DynamicFilter } from './DynamicFilter'; import { DynamicFilter } from './DynamicFilter';
import { MetableModel } from './types/DynamicList.types'; import { MetableModel } from './types/DynamicList.types';

View File

@@ -3,7 +3,6 @@ import { ISortOrder } from './DynamicFilter/DynamicFilter.types';
import { ERRORS } from './constants'; import { ERRORS } from './constants';
import { DynamicFilterSortBy } from './DynamicFilter'; import { DynamicFilterSortBy } from './DynamicFilter';
import { ServiceError } from '../Items/ServiceError'; import { ServiceError } from '../Items/ServiceError';
import { BaseModel } from '@/models/Model';
import { DynamicFilterAbstractor } from './DynamicFilter/DynamicFilterAbstractor'; import { DynamicFilterAbstractor } from './DynamicFilter/DynamicFilterAbstractor';
import { MetableModel } from './types/DynamicList.types'; import { MetableModel } from './types/DynamicList.types';

View File

@@ -8,8 +8,8 @@ import {
import { OnEvent } from '@nestjs/event-emitter'; import { OnEvent } from '@nestjs/event-emitter';
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { EventTrackerService } from '../EventTracker.service'; import { EventTrackerService } from '../EventTracker.service';
import { events } from '@/common/events/events'; import { events } from '@/common/events/events';
@Injectable() @Injectable()
export class TransactionsLockingEventsTracker { export class TransactionsLockingEventsTracker {
constructor(public readonly posthog: EventTrackerService) {} constructor(public readonly posthog: EventTrackerService) {}

View File

@@ -69,7 +69,7 @@ export class ExpensesApplication {
* Retrieve expenses paginated list. * Retrieve expenses paginated list.
* @param {IExpensesFilter} expensesFilter * @param {IExpensesFilter} expensesFilter
*/ */
public getExpenses(filterDTO: IExpensesFilter) { public getExpenses(filterDTO: Partial<IExpensesFilter>) {
return this.getExpensesService.getExpensesList(filterDTO); return this.getExpensesService.getExpensesList(filterDTO);
} }
} }

View File

@@ -23,13 +23,20 @@ export class GetExpensesService {
* @param {IExpensesFilter} expensesFilter * @param {IExpensesFilter} expensesFilter
* @return {IExpense[]} * @return {IExpense[]}
*/ */
public async getExpensesList(filterDTO: IExpensesFilter): Promise<{ public async getExpensesList(filterDto: Partial<IExpensesFilter>): Promise<{
expenses: Expense[]; expenses: Expense[];
pagination: IPaginationMeta; pagination: IPaginationMeta;
filterMeta: IFilterMeta; filterMeta: IFilterMeta;
}> { }> {
const _filterDto = {
sortOrder: 'desc',
columnSortBy: 'created_at',
page: 1,
pageSize: 12,
...filterDto,
};
// Parses list filter DTO. // Parses list filter DTO.
const filter = this.parseListFilterDTO(filterDTO); const filter = this.parseListFilterDTO(_filterDto);
// Dynamic list service. // Dynamic list service.
const dynamicList = await this.dynamicListService.dynamicList( const dynamicList = await this.dynamicListService.dynamicList(
@@ -44,7 +51,7 @@ export class GetExpensesService {
builder.withGraphFetched('categories.expenseAccount'); builder.withGraphFetched('categories.expenseAccount');
dynamicList.buildQuery()(builder); dynamicList.buildQuery()(builder);
filterDTO?.filterQuery && filterDTO?.filterQuery(builder); _filterDto?.filterQuery && _filterDto?.filterQuery(builder);
}) })
.pagination(filter.page - 1, filter.pageSize); .pagination(filter.page - 1, filter.pageSize);

View File

@@ -78,7 +78,7 @@ export class ItemCategoryApplication {
* @param {IItemCategoriesFilter} filterDTO - The item categories filter DTO. * @param {IItemCategoriesFilter} filterDTO - The item categories filter DTO.
* @returns {Promise<GetItemCategoriesResponse>} * @returns {Promise<GetItemCategoriesResponse>}
*/ */
public getItemCategories(filterDTO: IItemCategoriesFilter) { public getItemCategories(filterDTO: Partial<IItemCategoriesFilter>) {
return this.getItemCategoriesService.getItemCategories(filterDTO); return this.getItemCategoriesService.getItemCategories(filterDTO);
} }
} }

View File

@@ -35,7 +35,7 @@ export class ItemCategoryController {
@Get() @Get()
@ApiOperation({ summary: 'Retrieves the item categories.' }) @ApiOperation({ summary: 'Retrieves the item categories.' })
async getItemCategories( async getItemCategories(
@Query() filterDTO: IItemCategoriesFilter, @Query() filterDTO: Partial<IItemCategoriesFilter>,
): Promise<GetItemCategoriesResponse> { ): Promise<GetItemCategoriesResponse> {
return this.itemCategoryApplication.getItemCategories(filterDTO); return this.itemCategoryApplication.getItemCategories(filterDTO);
} }

View File

@@ -7,6 +7,7 @@ import {
IItemCategoriesFilter, IItemCategoriesFilter,
} from '../ItemCategory.interfaces'; } from '../ItemCategory.interfaces';
import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel'; import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel';
import { ISortOrder } from '@/modules/DynamicListing/DynamicFilter/DynamicFilter.types';
export class GetItemCategoriesService { export class GetItemCategoriesService {
constructor( constructor(
@@ -34,16 +35,21 @@ export class GetItemCategoriesService {
* @returns {Promise<GetItemCategoriesResponse>} * @returns {Promise<GetItemCategoriesResponse>}
*/ */
public async getItemCategories( public async getItemCategories(
filterDTO: IItemCategoriesFilter, filterDto: Partial<IItemCategoriesFilter>,
): Promise<GetItemCategoriesResponse> { ): Promise<GetItemCategoriesResponse> {
const _filterDto = {
sortOrder: ISortOrder.ASC,
columnSortBy: 'created_at',
...filterDto,
};
// Parses list filter DTO. // Parses list filter DTO.
const filter = this.parsesListFilterDTO(filterDTO); const filter = this.parsesListFilterDTO(_filterDto);
// Dynamic list service. // Dynamic list service.
// const dynamicList = await this.dynamicListService.dynamicList( const dynamicList = await this.dynamicListService.dynamicList(
// this.itemCategoryModel(), this.itemCategoryModel(),
// filter, filter,
// ); );
// Items categories. // Items categories.
const itemCategories = await this.itemCategoryModel() const itemCategories = await this.itemCategoryModel()
.query() .query()
@@ -53,8 +59,7 @@ export class GetItemCategoriesService {
'*', '*',
this.itemCategoryModel().relatedQuery('items').count().as('count'), this.itemCategoryModel().relatedQuery('items').count().as('count'),
); );
dynamicList.buildQuery()(query);
// dynamicList.buildQuery()(query);
}); });
return { itemCategories }; return { itemCategories };

View File

@@ -6,12 +6,14 @@ import { Item } from './models/Item';
import { IItemsFilter } from './types/Items.types'; import { IItemsFilter } from './types/Items.types';
import { ItemTransformer } from './Item.transformer'; import { ItemTransformer } from './Item.transformer';
import { TenantModelProxy } from '../System/models/TenantBaseModel'; import { TenantModelProxy } from '../System/models/TenantBaseModel';
import { ISortOrder } from '../DynamicListing/DynamicFilter/DynamicFilter.types';
@Injectable() @Injectable()
export class GetItemsService { export class GetItemsService {
constructor( constructor(
private readonly dynamicListService: DynamicListService, private readonly dynamicListService: DynamicListService,
private readonly transformer: TransformerInjectable, private readonly transformer: TransformerInjectable,
@Inject(Item.name) @Inject(Item.name)
private readonly itemModel: TenantModelProxy<typeof Item>, private readonly itemModel: TenantModelProxy<typeof Item>,
) {} ) {}
@@ -30,9 +32,17 @@ export class GetItemsService {
* Retrieves items datatable list. * Retrieves items datatable list.
* @param {IItemsFilter} itemsFilter - Items filter. * @param {IItemsFilter} itemsFilter - Items filter.
*/ */
public async getItems(filterDTO: IItemsFilter) { public async getItems(filterDto: Partial<IItemsFilter>) {
const _filterDto = {
sortOrder: ISortOrder.DESC,
columnSortBy: 'created_at',
page: 1,
pageSize: 12,
inactiveMode: false,
...filterDto,
};
// Parses items list filter DTO. // Parses items list filter DTO.
const filter = this.parseItemsListFilterDTO(filterDTO); const filter = this.parseItemsListFilterDTO(_filterDto);
// Dynamic list service. // Dynamic list service.
const dynamicFilter = await this.dynamicListService.dynamicList( const dynamicFilter = await this.dynamicListService.dynamicList(

View File

@@ -92,10 +92,10 @@ export class ItemsApplicationService {
/** /**
* Retrieves the paginated filterable items list. * Retrieves the paginated filterable items list.
* @param {IItemsFilter} filterDTO * @param {Partial<IItemsFilter>} filterDTO
*/ */
async getItems(filterDTO: IItemsFilter) { async getItems(filterDTO: Partial<IItemsFilter>) {
return this.getItemsService.getItems(filterDTO) return this.getItemsService.getItems(filterDTO);
} }
/** /**

View File

@@ -1,3 +1,4 @@
export const ItemMeta = { export const ItemMeta = {
importable: true, importable: true,
exportable: true, exportable: true,

View File

@@ -6,6 +6,7 @@ import {
Param, Param,
Post, Post,
Put, Put,
Query,
} from '@nestjs/common'; } from '@nestjs/common';
import { ManualJournalsApplication } from './ManualJournalsApplication.service'; import { ManualJournalsApplication } from './ManualJournalsApplication.service';
import { ApiOperation, ApiParam, ApiResponse, ApiTags } from '@nestjs/swagger'; import { ApiOperation, ApiParam, ApiResponse, ApiTags } from '@nestjs/swagger';
@@ -13,6 +14,7 @@ import {
CreateManualJournalDto, CreateManualJournalDto,
EditManualJournalDto, EditManualJournalDto,
} from './dtos/ManualJournal.dto'; } from './dtos/ManualJournal.dto';
import { IManualJournalsFilter } from './types/ManualJournals.types';
@Controller('manual-journals') @Controller('manual-journals')
@ApiTags('manual-journals') @ApiTags('manual-journals')
@@ -98,4 +100,19 @@ export class ManualJournalsController {
public getManualJournal(@Param('id') manualJournalId: number) { public getManualJournal(@Param('id') manualJournalId: number) {
return this.manualJournalsApplication.getManualJournal(manualJournalId); return this.manualJournalsApplication.getManualJournal(manualJournalId);
} }
@Get()
@ApiOperation({ summary: 'Retrieves the manual journals paginated list.' })
@ApiResponse({
status: 200,
description: 'The manual journal details have been successfully retrieved.',
})
@ApiResponse({ status: 404, description: 'The manual journal not found.' })
public getManualJournals(
@Query() filterDto: Partial<IManualJournalsFilter>
) {
return this.manualJournalsApplication.getManualJournals(filterDto);
}
} }

View File

@@ -79,7 +79,7 @@ export class ManualJournalsApplication {
* Retrieves the paginated manual journals. * Retrieves the paginated manual journals.
* @param {IManualJournalsFilter} filterDTO * @param {IManualJournalsFilter} filterDTO
*/ */
public getManualJournals = (filterDTO: IManualJournalsFilter) => { public getManualJournals = (filterDTO: Partial<IManualJournalsFilter>) => {
return this.getManualJournalsService.getManualJournals(filterDTO); return this.getManualJournalsService.getManualJournals(filterDTO);
}; };
} }

View File

@@ -31,14 +31,21 @@ export class GetManualJournals {
* @param {IManualJournalsFilter} filter - * @param {IManualJournalsFilter} filter -
*/ */
public getManualJournals = async ( public getManualJournals = async (
filterDTO: IManualJournalsFilter, filterDTO: Partial<IManualJournalsFilter>,
): Promise<{ ): Promise<{
manualJournals: ManualJournal[]; manualJournals: ManualJournal[];
pagination: IPaginationMeta; pagination: IPaginationMeta;
filterMeta: IFilterMeta; filterMeta: IFilterMeta;
}> => { }> => {
const _filterDto = {
sortOrder: 'desc',
columnSortBy: 'created_at',
page: 1,
pageSize: 12,
...filterDTO,
};
// Parses filter DTO. // Parses filter DTO.
const filter = this.parseListFilterDTO(filterDTO); const filter = this.parseListFilterDTO(_filterDto);
// Dynamic service. // Dynamic service.
const dynamicService = await this.dynamicListService.dynamicList( const dynamicService = await this.dynamicListService.dynamicList(

View File

@@ -77,7 +77,7 @@ export class PaymentReceivesApplication {
* @param {IPaymentsReceivedFilter} filterDTO * @param {IPaymentsReceivedFilter} filterDTO
* @returns * @returns
*/ */
public async getPaymentsReceived(filterDTO: IPaymentsReceivedFilter) { public async getPaymentsReceived(filterDTO: Partial<IPaymentsReceivedFilter>) {
return this.getPaymentsReceivedService.getPaymentReceives(filterDTO); return this.getPaymentsReceivedService.getPaymentReceives(filterDTO);
} }

View File

@@ -1,3 +1,4 @@
import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
import { import {
Body, Body,
Controller, Controller,
@@ -17,7 +18,6 @@ import {
IPaymentsReceivedFilter, IPaymentsReceivedFilter,
PaymentReceiveMailOptsDTO, PaymentReceiveMailOptsDTO,
} from './types/PaymentReceived.types'; } from './types/PaymentReceived.types';
import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
@Controller('payments-received') @Controller('payments-received')
@ApiTags('payments-received') @ApiTags('payments-received')
@@ -88,7 +88,7 @@ export class PaymentReceivesController {
@Get() @Get()
@ApiOperation({ summary: 'Retrieves the payment received list.' }) @ApiOperation({ summary: 'Retrieves the payment received list.' })
public getPaymentsReceived(@Query() filterDTO: IPaymentsReceivedFilter) { public getPaymentsReceived(@Query() filterDTO: Partial<IPaymentsReceivedFilter>) {
return this.paymentReceivesApplication.getPaymentsReceived(filterDTO); return this.paymentReceivesApplication.getPaymentsReceived(filterDTO);
} }

View File

@@ -24,13 +24,22 @@ export class GetPaymentsReceivedService {
* Retrieve payment receives paginated and filterable list. * Retrieve payment receives paginated and filterable list.
* @param {IPaymentsReceivedFilter} filterDTO * @param {IPaymentsReceivedFilter} filterDTO
*/ */
public async getPaymentReceives(filterDTO: IPaymentsReceivedFilter): Promise<{ public async getPaymentReceives(
filterDTO: Partial<IPaymentsReceivedFilter>,
): Promise<{
paymentReceives: PaymentReceived[]; paymentReceives: PaymentReceived[];
pagination: IPaginationMeta; pagination: IPaginationMeta;
filterMeta: IFilterMeta; filterMeta: IFilterMeta;
}> { }> {
const _filterDto = {
sortOrder: 'desc',
columnSortBy: 'created_at',
page: 1,
pageSize: 12,
...filterDTO,
};
// Parses filter DTO. // Parses filter DTO.
const filter = this.parseListFilterDTO(filterDTO); const filter = this.parseListFilterDTO(_filterDto);
// Dynamic list service. // Dynamic list service.
const dynamicList = await this.dynamicListService.dynamicList( const dynamicList = await this.dynamicListService.dynamicList(
@@ -44,7 +53,7 @@ export class GetPaymentsReceivedService {
builder.withGraphFetched('depositAccount'); builder.withGraphFetched('depositAccount');
dynamicList.buildQuery()(builder); dynamicList.buildQuery()(builder);
filterDTO?.filterQuery && filterDTO.filterQuery(builder as any); _filterDto?.filterQuery && _filterDto.filterQuery(builder as any);
}) })
.pagination(filter.page - 1, filter.pageSize); .pagination(filter.page - 1, filter.pageSize);

View File

@@ -79,7 +79,7 @@ export class SaleEstimatesApplication {
* @param {ISalesEstimatesFilter} filterDTO - Sales estimates filter DTO. * @param {ISalesEstimatesFilter} filterDTO - Sales estimates filter DTO.
* @returns * @returns
*/ */
public getSaleEstimates(filterDTO: ISalesEstimatesFilter) { public getSaleEstimates(filterDTO: Partial<ISalesEstimatesFilter>) {
return this.getSaleEstimatesService.getEstimates(filterDTO); return this.getSaleEstimatesService.getEstimates(filterDTO);
} }

View File

@@ -22,13 +22,22 @@ export class GetSaleEstimatesService {
* Retrieves estimates filterable and paginated list. * Retrieves estimates filterable and paginated list.
* @param {IEstimatesFilter} estimatesFilter - * @param {IEstimatesFilter} estimatesFilter -
*/ */
public async getEstimates(filterDTO: ISalesEstimatesFilter): Promise<{ public async getEstimates(
filterDTO: Partial<ISalesEstimatesFilter>,
): Promise<{
salesEstimates: SaleEstimate[]; salesEstimates: SaleEstimate[];
pagination: IPaginationMeta; pagination: IPaginationMeta;
filterMeta: IFilterMeta; filterMeta: IFilterMeta;
}> { }> {
const _filterDto = {
sortOrder: 'desc',
columnSortBy: 'created_at',
page: 1,
pageSize: 12,
...filterDTO,
};
// Parses filter DTO. // Parses filter DTO.
const filter = this.parseListFilterDTO(filterDTO); const filter = this.parseListFilterDTO(_filterDto);
// Dynamic list service. // Dynamic list service.
const dynamicFilter = await this.dynamicListService.dynamicList( const dynamicFilter = await this.dynamicListService.dynamicList(
@@ -43,7 +52,7 @@ export class GetSaleEstimatesService {
builder.withGraphFetched('entries.item'); builder.withGraphFetched('entries.item');
dynamicFilter.buildQuery()(builder); dynamicFilter.buildQuery()(builder);
filterDTO?.filterQuery && filterDTO?.filterQuery(builder); _filterDto?.filterQuery && _filterDto?.filterQuery(builder);
}) })
.pagination(filter.page - 1, filter.pageSize); .pagination(filter.page - 1, filter.pageSize);

View File

@@ -81,7 +81,7 @@ export class SaleInvoiceApplication {
* @param {ISalesInvoicesFilter} filterDTO * @param {ISalesInvoicesFilter} filterDTO
* @returns {Promise<{ salesInvoices: SaleInvoice[]; pagination: IPaginationMeta; filterMeta: IFilterMeta; }>} * @returns {Promise<{ salesInvoices: SaleInvoice[]; pagination: IPaginationMeta; filterMeta: IFilterMeta; }>}
*/ */
public getSaleInvoices(filterDTO: ISalesInvoicesFilter) { public getSaleInvoices(filterDTO: Partial<ISalesInvoicesFilter>) {
return this.getSaleInvoicesService.getSaleInvoices(filterDTO); return this.getSaleInvoicesService.getSaleInvoices(filterDTO);
} }

View File

@@ -117,7 +117,7 @@ export class SaleInvoicesController {
status: 200, status: 200,
description: 'The sale invoices have been successfully retrieved.', description: 'The sale invoices have been successfully retrieved.',
}) })
getSaleInvoices(@Query() filterDTO: ISalesInvoicesFilter) { getSaleInvoices(@Query() filterDTO: Partial<ISalesInvoicesFilter>) {
return this.saleInvoiceApplication.getSaleInvoices(filterDTO); return this.saleInvoiceApplication.getSaleInvoices(filterDTO);
} }

View File

@@ -24,13 +24,22 @@ export class GetSaleInvoicesService {
* @param {ISalesInvoicesFilter} filterDTO - * @param {ISalesInvoicesFilter} filterDTO -
* @returns {Promise<{ salesInvoices: SaleInvoice[]; pagination: IPaginationMeta; filterMeta: IFilterMeta; }>} * @returns {Promise<{ salesInvoices: SaleInvoice[]; pagination: IPaginationMeta; filterMeta: IFilterMeta; }>}
*/ */
public async getSaleInvoices(filterDTO: ISalesInvoicesFilter): Promise<{ public async getSaleInvoices(
filterDTO: Partial<ISalesInvoicesFilter>,
): Promise<{
salesInvoices: SaleInvoice[]; salesInvoices: SaleInvoice[];
pagination: IPaginationMeta; pagination: IPaginationMeta;
filterMeta: IFilterMeta; filterMeta: IFilterMeta;
}> { }> {
const _filterDto = {
sortOrder: 'desc',
columnSortBy: 'created_at',
page: 1,
pageSize: 12,
...filterDTO,
};
// Parses stringified filter roles. // Parses stringified filter roles.
const filter = this.parseListFilterDTO(filterDTO); const filter = this.parseListFilterDTO(_filterDto);
// Dynamic list service. // Dynamic list service.
const dynamicFilter = await this.dynamicListService.dynamicList( const dynamicFilter = await this.dynamicListService.dynamicList(
@@ -44,7 +53,7 @@ export class GetSaleInvoicesService {
builder.withGraphFetched('customer'); builder.withGraphFetched('customer');
dynamicFilter.buildQuery()(builder); dynamicFilter.buildQuery()(builder);
filterDTO?.filterQuery?.(builder as any); _filterDto?.filterQuery?.(builder as any);
}) })
.pagination(filter.page - 1, filter.pageSize); .pagination(filter.page - 1, filter.pageSize);

View File

@@ -23,9 +23,10 @@ export class SaleReceiptBrandingTemplate {
public async getSaleReceiptBrandingTemplate(templateId: number) { public async getSaleReceiptBrandingTemplate(templateId: number) {
const template = const template =
await this.getPdfTemplateService.getPdfTemplate(templateId); await this.getPdfTemplateService.getPdfTemplate(templateId);
// Retrieves the organization branding attributes. // Retrieves the organization branding attributes.
const commonOrgBrandingAttrs = const commonOrgBrandingAttrs =
await this.getOrgBrandingAttributes.getOrganizationBrandingAttributes(); await this.getOrgBrandingAttributes.execute();
// Merges the default branding attributes with organization common branding attrs. // Merges the default branding attributes with organization common branding attrs.
const organizationBrandingAttrs = { const organizationBrandingAttrs = {

View File

@@ -24,7 +24,7 @@ export class VendorsController {
@Get() @Get()
@ApiOperation({ summary: 'Retrieves the vendors.' }) @ApiOperation({ summary: 'Retrieves the vendors.' })
getVendors(@Query() filterDTO: IVendorsFilter) { getVendors(@Query() filterDTO: Partial<IVendorsFilter>) {
return this.vendorsApplication.getVendors(filterDTO); return this.vendorsApplication.getVendors(filterDTO);
} }

View File

@@ -79,10 +79,10 @@ export class VendorsApplication {
/** /**
* Retrieves the vendors paginated list. * Retrieves the vendors paginated list.
* @param {IVendorsFilter} filterDTO * @param {Partial<IVendorsFilter>} filterDTO
* @returns {Promise<{ vendors: Vendor[], pagination: IPaginationMeta, filterMeta: IFilterMeta }>>} * @returns {Promise<{ vendors: Vendor[], pagination: IPaginationMeta, filterMeta: IFilterMeta }>>}
*/ */
public getVendors(filterDTO: IVendorsFilter) { public getVendors(filterDTO: Partial<IVendorsFilter>) {
return this.getVendorsService.getVendorsList(filterDTO); return this.getVendorsService.getVendorsList(filterDTO);
} }
} }

View File

@@ -28,10 +28,18 @@ export class GetVendorsService {
* @returns {Promise<GetVendorsResponse>} * @returns {Promise<GetVendorsResponse>}
*/ */
public async getVendorsList( public async getVendorsList(
filterDTO: IVendorsFilter, filterDto: Partial<IVendorsFilter>,
): Promise<GetVendorsResponse> { ): Promise<GetVendorsResponse> {
const _filterDto = {
inactiveMode: false,
sortOrder: 'desc',
columnSortBy: 'created_at',
page: 1,
pageSize: 12,
...filterDto,
};
// Parses vendors list filter DTO. // Parses vendors list filter DTO.
const filter = this.parseVendorsListFilterDTO(filterDTO); const filter = this.parseVendorsListFilterDTO(_filterDto);
// Dynamic list service. // Dynamic list service.
const dynamicList = await this.dynamicListService.dynamicList( const dynamicList = await this.dynamicListService.dynamicList(