feat: optimize dynamic list service.

feat: inactive mode for accounts, items, customers and vendors services.
This commit is contained in:
a.bouhuolia
2021-07-29 08:46:41 +02:00
parent 720dc5b7d7
commit 9186076676
80 changed files with 2748 additions and 1806 deletions

View File

@@ -1,6 +1,6 @@
import { Inject, Service } from 'typedi';
import { omit, defaultTo } from 'lodash';
import async from 'async';
import * as R from 'ramda';
import {
EventDispatcher,
EventDispatcherInterface,
@@ -265,6 +265,16 @@ export default class CustomersService {
return this.transformContactToCustomer(contact);
}
/**
* Parses customers list filter DTO.
* @param filterDTO -
*/
private parseCustomersListFilterDTO(filterDTO) {
return R.compose(
this.dynamicListService.parseStringifiedFilter
)(filterDTO);
}
/**
* Retrieve customers paginated list.
* @param {number} tenantId - Tenant id.
@@ -272,7 +282,7 @@ export default class CustomersService {
*/
public async getCustomersList(
tenantId: number,
customersFilter: ICustomersFilter
filterDTO: ICustomersFilter
): Promise<{
customers: ICustomer[];
pagination: IPaginationMeta;
@@ -280,17 +290,23 @@ export default class CustomersService {
}> {
const { Customer } = this.tenancy.models(tenantId);
// Parses customers list filter DTO.
const filter = this.parseCustomersListFilterDTO(filterDTO);
// Dynamic list.
const dynamicList = await this.dynamicListService.dynamicList(
tenantId,
Customer,
customersFilter
filter
);
// Customers.
const { results, pagination } = await Customer.query()
.onBuild((query) => {
dynamicList.buildQuery()(query);
.onBuild((builder) => {
dynamicList.buildQuery()(builder);
builder.modify('inactiveMode', filter.inactiveMode);
})
.pagination(customersFilter.page - 1, customersFilter.pageSize);
.pagination(filter.page - 1, filter.pageSize);
return {
customers: results.map(this.transformContactToCustomer),