feat: integrate multiple branches and warehouses with import

This commit is contained in:
Ahmed Bouhuolia
2024-09-02 14:42:05 +02:00
parent 266902026e
commit bfb3909d26
41 changed files with 392 additions and 11 deletions

View File

@@ -15,12 +15,17 @@ export class CreditNotesExportable extends Exportable {
* @returns {}
*/
public exportable(tenantId: number, query: ICreditNotesQueryDTO) {
const filterQuery = (query) => {
query.withGraphFetched('branch');
query.withGraphFetched('warehouse');
};
const parsedQuery = {
sortOrder: 'desc',
columnSortBy: 'created_at',
...query,
page: 1,
pageSize: 12000,
filterQuery,
} as ICreditNotesQueryDTO;
return this.getCreditNotes

View File

@@ -48,6 +48,7 @@ export default class ListCreditNotes extends BaseCreditNotes {
builder.withGraphFetched('entries.item');
builder.withGraphFetched('customer');
dynamicFilter.buildQuery()(builder);
creditNotesQuery?.filterQuery && creditNotesQuery?.filterQuery(builder);
})
.pagination(filter.page - 1, filter.pageSize);

View File

@@ -56,7 +56,10 @@ export class ExportResourceService {
) {
const resource = sanitizeResourceName(resourceName);
const resourceMeta = this.getResourceMeta(tenantId, resource);
const resourceColumns = this.resourceService.getResourceColumns(
tenantId,
resource
);
this.validateResourceMeta(resourceMeta);
const data = await this.getExportableData(tenantId, resource);
@@ -64,7 +67,7 @@ export class ExportResourceService {
// Returns the csv, xlsx format.
if (format === ExportFormat.Csv || format === ExportFormat.Xlsx) {
const exportableColumns = this.getExportableColumns(resourceMeta);
const exportableColumns = this.getExportableColumns(resourceColumns);
const workbook = this.createWorkbook(transformed, exportableColumns);
return this.exportWorkbook(workbook, format);
@@ -143,7 +146,7 @@ export class ExportResourceService {
* @param {IModelMeta} resourceMeta - The metadata of the resource.
* @returns An array of exportable columns.
*/
private getExportableColumns(resourceMeta: IModelMeta) {
private getExportableColumns(resourceColumns: any) {
const processColumns = (
columns: { [key: string]: IModelMetaColumn },
parent = ''
@@ -166,7 +169,7 @@ export class ExportResourceService {
}
});
};
return processColumns(resourceMeta.columns);
return processColumns(resourceColumns);
}
private getPrintableColumns(resourceMeta: IModelMeta) {

View File

@@ -33,6 +33,8 @@ export class ImportFileMapping {
// Invalidate the from/to map attributes.
this.validateMapsAttrs(tenantId, importFile, maps);
// @todo validate the required fields.
// Validate the diplicated relations of map attrs.
this.validateDuplicatedMapAttrs(maps);

View File

@@ -16,6 +16,7 @@ export class BillPaymentExportable extends Exportable {
public exportable(tenantId: number, query: any) {
const filterQuery = (builder) => {
builder.withGraphFetched('entries.bill');
builder.withGraphFetched('branch');
};
const parsedQuery = {
sortOrder: 'desc',

View File

@@ -1,8 +1,10 @@
import { Inject, Service } from 'typedi';
import { Knex } from 'knex';
import { IBillsFilter } from '@/interfaces';
import { Exportable } from '@/services/Export/Exportable';
import { BillsApplication } from './BillsApplication';
import { EXPORT_SIZE_LIMIT } from '@/services/Export/constants';
import Objection from 'objection';
@Service()
export class BillsExportable extends Exportable {
@@ -15,12 +17,17 @@ export class BillsExportable extends Exportable {
* @returns
*/
public exportable(tenantId: number, query: IBillsFilter) {
const filterQuery = (query) => {
query.withGraphFetched('branch');
query.withGraphFetched('warehouse');
};
const parsedQuery = {
sortOrder: 'desc',
columnSortBy: 'created_at',
...query,
page: 1,
pageSize: EXPORT_SIZE_LIMIT,
filterQuery,
} as IBillsFilter;
return this.billsApplication

View File

@@ -51,6 +51,9 @@ export class GetBills {
builder.withGraphFetched('vendor');
builder.withGraphFetched('entries.item');
dynamicFilter.buildQuery()(builder);
// Filter query.
filterDTO?.filterQuery && filterDTO?.filterQuery(builder);
})
.pagination(filter.page - 1, filter.pageSize);

View File

@@ -48,6 +48,10 @@ export default class ListVendorCredits extends BaseVendorCredit {
builder.withGraphFetched('entries');
builder.withGraphFetched('vendor');
dynamicFilter.buildQuery()(builder);
// Gives ability to inject custom query to filter results.
vendorCreditQuery?.filterQuery &&
vendorCreditQuery?.filterQuery(builder);
})
.pagination(filter.page - 1, filter.pageSize);

View File

@@ -2,6 +2,7 @@ import { Inject, Service } from 'typedi';
import { IVendorCreditsQueryDTO } from '@/interfaces';
import ListVendorCredits from './ListVendorCredits';
import { Exportable } from '@/services/Export/Exportable';
import { QueryBuilder } from 'knex';
@Service()
export class VendorCreditsExportable extends Exportable {
@@ -15,12 +16,17 @@ export class VendorCreditsExportable extends Exportable {
* @returns {}
*/
public exportable(tenantId: number, query: IVendorCreditsQueryDTO) {
const filterQuery = (query) => {
query.withGraphFetched('branch');
query.withGraphFetched('warehouse');
};
const parsedQuery = {
sortOrder: 'desc',
columnSortBy: 'created_at',
...query,
page: 1,
pageSize: 12000,
filterQuery,
} as IVendorCreditsQueryDTO;
return this.getVendorCredits

View File

@@ -53,6 +53,7 @@ export class GetSaleEstimates {
builder.withGraphFetched('entries');
builder.withGraphFetched('entries.item');
dynamicFilter.buildQuery()(builder);
filterDTO?.filterQuery && filterDTO?.filterQuery(builder);
})
.pagination(filter.page - 1, filter.pageSize);

View File

@@ -15,12 +15,17 @@ export class SaleEstimatesExportable extends Exportable {
* @returns
*/
public exportable(tenantId: number, query: ISalesInvoicesFilter) {
const filterQuery = (query) => {
query.withGraphFetched('branch');
query.withGraphFetched('warehouse');
};
const parsedQuery = {
sortOrder: 'desc',
columnSortBy: 'created_at',
...query,
page: 1,
pageSize: EXPORT_SIZE_LIMIT,
filterQuery,
} as ISalesInvoicesFilter;
return this.saleEstimatesApplication

View File

@@ -52,6 +52,7 @@ export class GetSaleInvoices {
builder.withGraphFetched('entries.item');
builder.withGraphFetched('customer');
dynamicFilter.buildQuery()(builder);
filterDTO?.filterQuery && filterDTO?.filterQuery(builder);
})
.pagination(filter.page - 1, filter.pageSize);

View File

@@ -15,12 +15,17 @@ export class SaleInvoicesExportable extends Exportable {
* @returns
*/
public exportable(tenantId: number, query: ISalesInvoicesFilter) {
const filterQuery = (query) => {
query.withGraphFetched('branch');
query.withGraphFetched('warehouse');
};
const parsedQuery = {
sortOrder: 'desc',
columnSortBy: 'created_at',
...query,
page: 1,
pageSize: EXPORT_SIZE_LIMIT,
filterQuery,
} as ISalesInvoicesFilter;
return this.saleInvoicesApplication

View File

@@ -18,6 +18,7 @@ export class PaymentsReceivedExportable extends Exportable {
public exportable(tenantId: number, query: IPaymentsReceivedFilter) {
const filterQuery = (builder) => {
builder.withGraphFetched('entries.invoice');
builder.withGraphFetched('branch');
};
const parsedQuery = {

View File

@@ -56,6 +56,7 @@ export class GetSaleReceipts {
builder.withGraphFetched('entries.item');
dynamicFilter.buildQuery()(builder);
filterDTO?.filterQuery && filterDTO?.filterQuery(builder);
})
.pagination(filter.page - 1, filter.pageSize);

View File

@@ -15,12 +15,17 @@ export class SaleReceiptsExportable extends Exportable {
* @returns
*/
public exportable(tenantId: number, query: ISalesReceiptsFilter) {
const filterQuery = (query) => {
query.withGraphFetched('branch');
query.withGraphFetched('warehouse');
};
const parsedQuery = {
sortOrder: 'desc',
columnSortBy: 'created_at',
...query,
page: 1,
pageSize: EXPORT_SIZE_LIMIT,
filterQuery,
} as ISalesReceiptsFilter;
return this.saleReceiptsApp