mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-19 06:10:31 +00:00
feat: wip migrate to nestjs
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
import {
|
||||
Body,
|
||||
Controller,
|
||||
Delete,
|
||||
Get,
|
||||
Param,
|
||||
ParseIntPipe,
|
||||
Post,
|
||||
Put,
|
||||
} from '@nestjs/common';
|
||||
import { ISaleReceiptDTO } from './types/SaleReceipts.types';
|
||||
import { SaleReceiptApplication } from './SaleReceiptApplication.service';
|
||||
import { PublicRoute } from '../Auth/Jwt.guard';
|
||||
|
||||
@Controller('sale-receipts')
|
||||
@PublicRoute()
|
||||
export class SaleReceiptsController {
|
||||
constructor(private saleReceiptApplication: SaleReceiptApplication) {}
|
||||
|
||||
@Post()
|
||||
createSaleReceipt(@Body() saleReceiptDTO: ISaleReceiptDTO) {
|
||||
return this.saleReceiptApplication.createSaleReceipt(saleReceiptDTO);
|
||||
}
|
||||
|
||||
@Put(':id')
|
||||
editSaleReceipt(
|
||||
@Param('id', ParseIntPipe) id: number,
|
||||
@Body() saleReceiptDTO: ISaleReceiptDTO,
|
||||
) {
|
||||
return this.saleReceiptApplication.editSaleReceipt(id, saleReceiptDTO);
|
||||
}
|
||||
|
||||
@Get(':id')
|
||||
getSaleReceipt(@Param('id', ParseIntPipe) id: number) {
|
||||
return this.saleReceiptApplication.getSaleReceipt(id);
|
||||
}
|
||||
|
||||
@Delete(':id')
|
||||
deleteSaleReceipt(@Param('id', ParseIntPipe) id: number) {
|
||||
return this.saleReceiptApplication.deleteSaleReceipt(id);
|
||||
}
|
||||
|
||||
@Post(':id/close')
|
||||
closeSaleReceipt(@Param('id', ParseIntPipe) id: number) {
|
||||
return this.saleReceiptApplication.closeSaleReceipt(id);
|
||||
}
|
||||
|
||||
@Get(':id/pdf')
|
||||
getSaleReceiptPdf(@Param('id', ParseIntPipe) id: number) {
|
||||
return this.saleReceiptApplication.getSaleReceiptPdf(0, id);
|
||||
}
|
||||
|
||||
@Get('state')
|
||||
getSaleReceiptState() {
|
||||
return this.saleReceiptApplication.getSaleReceiptState();
|
||||
}
|
||||
}
|
||||
@@ -5,15 +5,47 @@ import { EditSaleReceipt } from './commands/EditSaleReceipt.service';
|
||||
import { GetSaleReceipt } from './queries/GetSaleReceipt.service';
|
||||
import { DeleteSaleReceipt } from './commands/DeleteSaleReceipt.service';
|
||||
import { CloseSaleReceipt } from './commands/CloseSaleReceipt.service';
|
||||
import { SaleReceiptsPdfService } from './queries/SaleReceiptsPdf.service';
|
||||
import { GetSaleReceiptState } from './queries/GetSaleReceiptState.service';
|
||||
import { ItemsModule } from '../Items/items.module';
|
||||
import { SaleReceiptDTOTransformer } from './commands/SaleReceiptDTOTransformer.service';
|
||||
import { SaleReceiptValidators } from './commands/SaleReceiptValidators.service';
|
||||
import { ChromiumlyTenancyModule } from '../ChromiumlyTenancy/ChromiumlyTenancy.module';
|
||||
import { TemplateInjectableModule } from '../TemplateInjectable/TemplateInjectable.module';
|
||||
import { TenancyContext } from '../Tenancy/TenancyContext.service';
|
||||
import { SaleReceiptBrandingTemplate } from './queries/SaleReceiptBrandingTemplate.service';
|
||||
import { BranchesModule } from '../Branches/Branches.module';
|
||||
import { WarehousesModule } from '../Warehouses/Warehouses.module';
|
||||
import { SaleReceiptIncrement } from './commands/SaleReceiptIncrement.service';
|
||||
import { PdfTemplatesModule } from '../PdfTemplate/PdfTemplates.module';
|
||||
import { AutoIncrementOrdersModule } from '../AutoIncrementOrders/AutoIncrementOrders.module';
|
||||
import { SaleReceiptsController } from './SaleReceipts.controller';
|
||||
|
||||
@Module({
|
||||
controllers: [SaleReceiptsController],
|
||||
imports: [
|
||||
ItemsModule,
|
||||
ChromiumlyTenancyModule,
|
||||
TemplateInjectableModule,
|
||||
BranchesModule,
|
||||
WarehousesModule,
|
||||
PdfTemplatesModule,
|
||||
AutoIncrementOrdersModule
|
||||
],
|
||||
providers: [
|
||||
TenancyContext,
|
||||
SaleReceiptValidators,
|
||||
SaleReceiptApplication,
|
||||
CreateSaleReceipt,
|
||||
EditSaleReceipt,
|
||||
GetSaleReceipt,
|
||||
DeleteSaleReceipt,
|
||||
CloseSaleReceipt,
|
||||
SaleReceiptsPdfService,
|
||||
GetSaleReceiptState,
|
||||
SaleReceiptDTOTransformer,
|
||||
SaleReceiptBrandingTemplate,
|
||||
SaleReceiptIncrement,
|
||||
],
|
||||
})
|
||||
export class SaleReceiptsModule {}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Inject, Injectable } from '@nestjs/common';
|
||||
import * as R from 'ramda';
|
||||
import { sumBy, omit } from 'lodash';
|
||||
import composeAsync from 'async/compose';
|
||||
import * as composeAsync from 'async/compose';
|
||||
import moment from 'moment';
|
||||
import { SaleReceiptIncrement } from './SaleReceiptIncrement.service';
|
||||
import { ItemsEntriesService } from '@/modules/Items/ItemsEntries.service';
|
||||
@@ -18,6 +18,15 @@ import { Customer } from '@/modules/Customers/models/Customer';
|
||||
|
||||
@Injectable()
|
||||
export class SaleReceiptDTOTransformer {
|
||||
/**
|
||||
* @param {ItemsEntriesService} itemsEntriesService - Items entries service.
|
||||
* @param {BranchTransactionDTOTransformer} branchDTOTransform - Branch transaction DTO transformer.
|
||||
* @param {WarehouseTransactionDTOTransform} warehouseDTOTransform - Warehouse transaction DTO transformer.
|
||||
* @param {SaleReceiptValidators} validators - Sale receipt validators.
|
||||
* @param {SaleReceiptIncrement} receiptIncrement - Sale receipt increment.
|
||||
* @param {BrandingTemplateDTOTransformer} brandingTemplatesTransformer - Branding template DTO transformer.
|
||||
* @param {typeof ItemEntry} itemEntryModel - Item entry model.
|
||||
*/
|
||||
constructor(
|
||||
private readonly itemsEntriesService: ItemsEntriesService,
|
||||
private readonly branchDTOTransform: BranchTransactionDTOTransformer,
|
||||
@@ -60,10 +69,9 @@ export class SaleReceiptDTOTransformer {
|
||||
reference_type: 'SaleReceipt',
|
||||
...entry,
|
||||
}));
|
||||
|
||||
const asyncEntries = await composeAsync(
|
||||
// Sets default cost and sell account to receipt items entries.
|
||||
this.itemsEntriesService.setItemsEntriesDefaultAccounts(),
|
||||
this.itemsEntriesService.setItemsEntriesDefaultAccounts,
|
||||
)(initialEntries);
|
||||
|
||||
const entries = R.compose(
|
||||
@@ -97,6 +105,6 @@ export class SaleReceiptDTOTransformer {
|
||||
return R.compose(
|
||||
this.branchDTOTransform.transformDTO<SaleReceipt>,
|
||||
this.warehouseDTOTransform.transformDTO<SaleReceipt>,
|
||||
)(initialAsyncDTO);
|
||||
)(initialAsyncDTO) as SaleReceipt;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,8 +12,8 @@ export class SaleReceiptValidators {
|
||||
* @param {typeof Account} accountModel - Account model.
|
||||
*/
|
||||
constructor(
|
||||
@Inject(SaleReceipt) private saleReceiptModel: typeof SaleReceipt,
|
||||
@Inject(Account) private accountModel: typeof Account,
|
||||
@Inject(SaleReceipt.name) private saleReceiptModel: typeof SaleReceipt,
|
||||
@Inject(Account.name) private accountModel: typeof Account,
|
||||
) {}
|
||||
|
||||
/**
|
||||
|
||||
@@ -119,18 +119,18 @@ export class SaleReceipt extends BaseModel {
|
||||
* Relationship mapping.
|
||||
*/
|
||||
static get relationMappings() {
|
||||
const Customer = require('@/modules/Customers/models/Customer');
|
||||
const Account = require('@/modules/Accounts/models/Account.model');
|
||||
const AccountTransaction = require('@/modules/AccountsTransactions/models/AccountTransaction.model');
|
||||
const ItemEntry = require('@/modules/ItemsEntries/models/ItemEntry');
|
||||
const Branch = require('@/modules/Branches/models/Branch');
|
||||
const Document = require('@/modules/Documents/models/Document');
|
||||
const Warehouse = require('@/modules/Warehouses/models/Warehouse');
|
||||
const { Customer } = require('../../Customers/models/Customer');
|
||||
const { Account } = require('../../Accounts/models/Account.model');
|
||||
const { AccountTransaction } = require('../../Accounts/models/AccountTransaction.model');
|
||||
const { ItemEntry } = require('../../TransactionItemEntry/models/ItemEntry');
|
||||
const { Branch } = require('../../Branches/models/Branch.model');
|
||||
const { Document } = require('../../ChromiumlyTenancy/models/Document');
|
||||
const { Warehouse } = require('../../Warehouses/models/Warehouse.model');
|
||||
|
||||
return {
|
||||
customer: {
|
||||
relation: Model.BelongsToOneRelation,
|
||||
modelClass: Customer.default,
|
||||
modelClass: Customer,
|
||||
join: {
|
||||
from: 'sales_receipts.customerId',
|
||||
to: 'contacts.id',
|
||||
@@ -142,7 +142,7 @@ export class SaleReceipt extends BaseModel {
|
||||
|
||||
depositAccount: {
|
||||
relation: Model.BelongsToOneRelation,
|
||||
modelClass: Account.default,
|
||||
modelClass: Account,
|
||||
join: {
|
||||
from: 'sales_receipts.depositAccountId',
|
||||
to: 'accounts.id',
|
||||
@@ -151,7 +151,7 @@ export class SaleReceipt extends BaseModel {
|
||||
|
||||
entries: {
|
||||
relation: Model.HasManyRelation,
|
||||
modelClass: ItemEntry.default,
|
||||
modelClass: ItemEntry,
|
||||
join: {
|
||||
from: 'sales_receipts.id',
|
||||
to: 'items_entries.referenceId',
|
||||
@@ -164,7 +164,7 @@ export class SaleReceipt extends BaseModel {
|
||||
|
||||
transactions: {
|
||||
relation: Model.HasManyRelation,
|
||||
modelClass: AccountTransaction.default,
|
||||
modelClass: AccountTransaction,
|
||||
join: {
|
||||
from: 'sales_receipts.id',
|
||||
to: 'accounts_transactions.referenceId',
|
||||
@@ -179,7 +179,7 @@ export class SaleReceipt extends BaseModel {
|
||||
*/
|
||||
branch: {
|
||||
relation: Model.BelongsToOneRelation,
|
||||
modelClass: Branch.default,
|
||||
modelClass: Branch,
|
||||
join: {
|
||||
from: 'sales_receipts.branchId',
|
||||
to: 'branches.id',
|
||||
@@ -191,7 +191,7 @@ export class SaleReceipt extends BaseModel {
|
||||
*/
|
||||
warehouse: {
|
||||
relation: Model.BelongsToOneRelation,
|
||||
modelClass: Warehouse.default,
|
||||
modelClass: Warehouse,
|
||||
join: {
|
||||
from: 'sales_receipts.warehouseId',
|
||||
to: 'warehouses.id',
|
||||
@@ -203,7 +203,7 @@ export class SaleReceipt extends BaseModel {
|
||||
*/
|
||||
attachments: {
|
||||
relation: Model.ManyToManyRelation,
|
||||
modelClass: Document.default,
|
||||
modelClass: Document,
|
||||
join: {
|
||||
from: 'sales_receipts.id',
|
||||
through: {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { Inject, Injectable } from '@nestjs/common';
|
||||
import { SaleReceiptTransformer } from './SaleReceiptTransformer';
|
||||
import { SaleReceiptValidators } from '../commands/SaleReceiptValidators.service';
|
||||
import { SaleReceipt } from '../models/SaleReceipt';
|
||||
@@ -7,6 +7,7 @@ import { TransformerInjectable } from '@/modules/Transformer/TransformerInjectab
|
||||
@Injectable()
|
||||
export class GetSaleReceipt {
|
||||
constructor(
|
||||
@Inject(SaleReceipt.name)
|
||||
private readonly saleReceiptModel: typeof SaleReceipt,
|
||||
private readonly transformer: TransformerInjectable,
|
||||
private readonly validators: SaleReceiptValidators,
|
||||
@@ -26,11 +27,11 @@ export class GetSaleReceipt {
|
||||
.withGraphFetched('depositAccount')
|
||||
.withGraphFetched('branch')
|
||||
.withGraphFetched('attachments')
|
||||
.throwIfNotFound()
|
||||
.throwIfNotFound();
|
||||
|
||||
return this.transformer.transform(
|
||||
saleReceipt,
|
||||
new SaleReceiptTransformer()
|
||||
new SaleReceiptTransformer(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user