mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-19 22:30:31 +00:00
refactor: inventory transfers to nestjs
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import { WarehouseTransferTransformer } from './WarehouseTransferTransfomer';
|
||||
import { Inject, Injectable } from '@nestjs/common';
|
||||
import { TransformerInjectable } from '@/modules/Transformer/TransformerInjectable.service';
|
||||
import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel';
|
||||
import { WarehouseTransfer } from '../models/WarehouseTransfer';
|
||||
import { ModelObject } from 'objection';
|
||||
|
||||
@Injectable()
|
||||
export class GetWarehouseTransfer {
|
||||
constructor(
|
||||
private readonly transformer: TransformerInjectable,
|
||||
|
||||
@Inject(WarehouseTransfer.name)
|
||||
private readonly warehouseTransferModel: TenantModelProxy<
|
||||
typeof WarehouseTransfer
|
||||
>,
|
||||
) {}
|
||||
|
||||
/**
|
||||
* Retrieves the specific warehouse transfer transaction.
|
||||
* @param {number} warehouseTransferId
|
||||
* @param {IEditWarehouseTransferDTO} editWarehouseDTO
|
||||
* @returns {Promise<IWarehouseTransfer>}
|
||||
*/
|
||||
public getWarehouseTransfer = async (
|
||||
warehouseTransferId: number,
|
||||
): Promise<ModelObject<WarehouseTransfer>> => {
|
||||
// Retrieves the old warehouse transfer transaction.
|
||||
const warehouseTransfer = await this.warehouseTransferModel()
|
||||
.query()
|
||||
.findById(warehouseTransferId)
|
||||
.withGraphFetched('entries.item')
|
||||
.withGraphFetched('fromWarehouse')
|
||||
.withGraphFetched('toWarehouse')
|
||||
.throwIfNotFound();
|
||||
|
||||
// Retrieves the transfromed warehouse transfers.
|
||||
return this.transformer.transform(
|
||||
warehouseTransfer,
|
||||
new WarehouseTransferTransformer(),
|
||||
);
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
import * as R from 'ramda';
|
||||
import { WarehouseTransferTransformer } from './WarehouseTransferTransfomer';
|
||||
import { IGetWarehousesTransfersFilterDTO } from '../../Warehouses/Warehouse.types';
|
||||
import { TransformerInjectable } from '../../Transformer/TransformerInjectable.service';
|
||||
import { Inject, Injectable } from '@nestjs/common';
|
||||
import { DynamicListService } from '../../DynamicListing/DynamicList.service';
|
||||
import { TenantModelProxy } from '../../System/models/TenantBaseModel';
|
||||
import { WarehouseTransfer } from '../models/WarehouseTransfer';
|
||||
|
||||
@Injectable()
|
||||
export class GetWarehouseTransfers {
|
||||
constructor(
|
||||
private readonly dynamicListService: DynamicListService,
|
||||
private readonly transformer: TransformerInjectable,
|
||||
|
||||
@Inject(WarehouseTransfer.name)
|
||||
private readonly warehouseTransferModel: TenantModelProxy<
|
||||
typeof WarehouseTransfer
|
||||
>,
|
||||
) {}
|
||||
|
||||
/**
|
||||
* Parses the sale invoice list filter DTO.
|
||||
* @param filterDTO
|
||||
* @returns
|
||||
*/
|
||||
private parseListFilterDTO(filterDTO) {
|
||||
return R.compose(this.dynamicListService.parseStringifiedFilter)(filterDTO);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves warehouse transfers paginated list.
|
||||
* @param {number} tenantId
|
||||
* @param {IGetWarehousesTransfersFilterDTO} filterDTO
|
||||
* @returns {}
|
||||
*/
|
||||
public getWarehouseTransfers = async (
|
||||
filterDTO: IGetWarehousesTransfersFilterDTO,
|
||||
) => {
|
||||
// Parses stringified filter roles.
|
||||
const filter = this.parseListFilterDTO(filterDTO);
|
||||
|
||||
// Dynamic list service.
|
||||
const dynamicFilter = await this.dynamicListService.dynamicList(
|
||||
this.warehouseTransferModel(),
|
||||
filter,
|
||||
);
|
||||
const { results, pagination } = await this.warehouseTransferModel()
|
||||
.query()
|
||||
.onBuild((query) => {
|
||||
query.withGraphFetched('entries.item');
|
||||
query.withGraphFetched('fromWarehouse');
|
||||
query.withGraphFetched('toWarehouse');
|
||||
|
||||
dynamicFilter.buildQuery()(query);
|
||||
})
|
||||
.pagination(filter.page - 1, filter.pageSize);
|
||||
|
||||
// Retrieves the transformed warehouse transfers
|
||||
const warehousesTransfers = await this.transformer.transform(
|
||||
results,
|
||||
new WarehouseTransferTransformer(),
|
||||
);
|
||||
return {
|
||||
warehousesTransfers,
|
||||
pagination,
|
||||
filter,
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
import { Transformer } from "../../Transformer/Transformer";
|
||||
|
||||
export class WarehouseTransferItemTransformer extends Transformer {
|
||||
/**
|
||||
* Include these attributes to sale invoice object.
|
||||
* @returns {Array}
|
||||
*/
|
||||
public includeAttributes = (): string[] => {
|
||||
return ['formattedQuantity', 'formattedCost', 'formattedTotal'];
|
||||
};
|
||||
|
||||
/**
|
||||
* Formats the total.
|
||||
* @param {IWarehouseTransferEntry} entry
|
||||
* @returns {string}
|
||||
*/
|
||||
public formattedTotal = (entry) => {
|
||||
return this.formatMoney(entry.total);
|
||||
};
|
||||
|
||||
/**
|
||||
* Formats the quantity.
|
||||
* @param {IWarehouseTransferEntry} entry
|
||||
* @returns {string}
|
||||
*/
|
||||
public formattedQuantity = (entry) => {
|
||||
return this.formatNumber(entry.quantity);
|
||||
};
|
||||
|
||||
/**
|
||||
* Formats the cost.
|
||||
* @param {IWarehouseTransferEntry} entry
|
||||
* @returns {string}
|
||||
*/
|
||||
public formattedCost = (entry) => {
|
||||
return this.formatMoney(entry.cost);
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
import { WarehouseTransferItemTransformer } from './WarehouseTransferItemTransformer';
|
||||
import { Transformer } from '@/modules/Transformer/Transformer';
|
||||
export class WarehouseTransferTransformer extends Transformer {
|
||||
/**
|
||||
* Include these attributes to sale invoice object.
|
||||
* @returns {Array}
|
||||
*/
|
||||
public includeAttributes = (): string[] => {
|
||||
return ['formattedDate', 'entries'];
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
* @param transfer
|
||||
* @returns
|
||||
*/
|
||||
protected formattedDate = (transfer) => {
|
||||
return this.formatDate(transfer.date);
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
protected entries = (transfer) => {
|
||||
return this.item(transfer.entries, new WarehouseTransferItemTransformer());
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user