mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-18 22:00:31 +00:00
feat: Assign default pdf template automatically
This commit is contained in:
@@ -27,6 +27,7 @@ import GetCreditNoteAssociatedAppliedInvoices from '@/services/CreditNotes/GetCr
|
||||
import GetRefundCreditTransaction from '@/services/CreditNotes/GetRefundCreditNoteTransaction';
|
||||
import GetCreditNotePdf from '../../../services/CreditNotes/GetCreditNotePdf';
|
||||
import { ACCEPT_TYPE } from '@/interfaces/Http';
|
||||
import { GetCreditNoteState } from '@/services/CreditNotes/GetCreditNoteState';
|
||||
/**
|
||||
* Credit notes controller.
|
||||
* @service
|
||||
@@ -81,6 +82,9 @@ export default class PaymentReceivesController extends BaseController {
|
||||
@Inject()
|
||||
creditNotePdf: GetCreditNotePdf;
|
||||
|
||||
@Inject()
|
||||
getCreditNoteStateService: GetCreditNoteState;
|
||||
|
||||
/**
|
||||
* Router constructor.
|
||||
*/
|
||||
@@ -105,6 +109,12 @@ export default class PaymentReceivesController extends BaseController {
|
||||
this.asyncMiddleware(this.newCreditNote),
|
||||
this.handleServiceErrors
|
||||
);
|
||||
router.get(
|
||||
'/state',
|
||||
CheckPolicies(CreditNoteAction.View, AbilitySubject.CreditNote),
|
||||
this.asyncMiddleware(this.getCreditNoteState.bind(this)),
|
||||
this.handleServiceErrors
|
||||
);
|
||||
// Get specific credit note.
|
||||
router.get(
|
||||
'/:id',
|
||||
@@ -736,6 +746,23 @@ export default class PaymentReceivesController extends BaseController {
|
||||
}
|
||||
};
|
||||
|
||||
private getCreditNoteState = async (
|
||||
req: Request,
|
||||
res: Response,
|
||||
next: NextFunction
|
||||
) => {
|
||||
const { tenantId } = req;
|
||||
|
||||
try {
|
||||
const data = await this.getCreditNoteStateService.getCreditNoteState(
|
||||
tenantId
|
||||
);
|
||||
return res.status(200).send({ data });
|
||||
} catch (error) {
|
||||
next(error);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Handles service errors.
|
||||
* @param {Error} error
|
||||
|
||||
@@ -51,7 +51,7 @@ export default class SalesEstimatesController extends BaseController {
|
||||
router.post(
|
||||
'/:id/approve',
|
||||
CheckPolicies(SaleEstimateAction.Edit, AbilitySubject.SaleEstimate),
|
||||
[this.validateSpecificEstimateSchema],
|
||||
[...this.validateSpecificEstimateSchema],
|
||||
this.validationResult,
|
||||
asyncMiddleware(this.approveSaleEstimate.bind(this)),
|
||||
this.handleServiceErrors
|
||||
@@ -59,7 +59,7 @@ export default class SalesEstimatesController extends BaseController {
|
||||
router.post(
|
||||
'/:id/reject',
|
||||
CheckPolicies(SaleEstimateAction.Edit, AbilitySubject.SaleEstimate),
|
||||
[this.validateSpecificEstimateSchema],
|
||||
[...this.validateSpecificEstimateSchema],
|
||||
this.validationResult,
|
||||
asyncMiddleware(this.rejectSaleEstimate.bind(this)),
|
||||
this.handleServiceErrors
|
||||
|
||||
@@ -314,3 +314,7 @@ export interface CreditNotePdfTemplateAttributes {
|
||||
showCreditNoteDate: boolean;
|
||||
creditNoteDateLabel: string;
|
||||
}
|
||||
|
||||
export interface ICreditNoteState {
|
||||
defaultTemplateId: number;
|
||||
}
|
||||
@@ -29,6 +29,20 @@ export class PdfTemplate extends TenantModel {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Model modifiers.
|
||||
*/
|
||||
static get modifiers() {
|
||||
return {
|
||||
/**
|
||||
* Filters the due invoices.
|
||||
*/
|
||||
default(query) {
|
||||
query.where('default', true);
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Virtual attributes.
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
import { Inject, Service } from 'typedi';
|
||||
import { ICreditNoteState } from '@/interfaces';
|
||||
import HasTenancyService from '../Tenancy/TenancyService';
|
||||
|
||||
@Service()
|
||||
export class GetCreditNoteState {
|
||||
@Inject()
|
||||
private tenancy: HasTenancyService;
|
||||
|
||||
/**
|
||||
* Retrieves the create/edit initial state of the payment received.
|
||||
* @param {Number} saleInvoiceId -
|
||||
* @return {Promise<ISaleInvoice>}
|
||||
*/
|
||||
public async getCreditNoteState(tenantId: number): Promise<ICreditNoteState> {
|
||||
const { PdfTemplate } = this.tenancy.models(tenantId);
|
||||
|
||||
const defaultPdfTemplate = await PdfTemplate.query()
|
||||
.findOne({ resource: 'CreditNote' })
|
||||
.modify('default');
|
||||
|
||||
return {
|
||||
defaultTemplateId: defaultPdfTemplate?.id,
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -1,20 +1,28 @@
|
||||
|
||||
|
||||
import { Service } from 'typedi';
|
||||
import { Inject, Service } from 'typedi';
|
||||
import { ISaleEstimateState } from '@/interfaces';
|
||||
import HasTenancyService from '@/services/Tenancy/TenancyService';
|
||||
|
||||
@Service()
|
||||
export class GetSaleEstimateState {
|
||||
@Inject()
|
||||
private tenancy: HasTenancyService;
|
||||
|
||||
/**
|
||||
*
|
||||
* Retrieves the create/edit sale estimate state.
|
||||
* @param {Number} saleEstimateId -
|
||||
* @return {Promise<ISaleEstimateState>}
|
||||
*/
|
||||
public async getSaleEstimateState(
|
||||
tenantId: number
|
||||
): Promise<ISaleEstimateState> {
|
||||
const { PdfTemplate } = this.tenancy.models(tenantId);
|
||||
|
||||
const defaultPdfTemplate = await PdfTemplate.query()
|
||||
.findOne({ resource: 'SaleEstimate' })
|
||||
.modify('default');
|
||||
|
||||
return {
|
||||
defaultTemplateId: 1,
|
||||
defaultTemplateId: defaultPdfTemplate?.id,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,7 +259,7 @@ export class SaleEstimatesApplication {
|
||||
* @param {number} tenantId - The ID of the tenant.
|
||||
* @returns {Promise<ISaleEstimateState>} - A promise resolving to the sale estimate state.
|
||||
*/
|
||||
public getSaleEstimateStat(tenantId: number) {
|
||||
public getSaleEstimateState(tenantId: number) {
|
||||
return this.getSaleEstimateStateService.getSaleEstimateState(tenantId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,18 +1,28 @@
|
||||
import { Service } from 'typedi';
|
||||
import { Inject, Service } from 'typedi';
|
||||
import { ISaleInvocieState } from '@/interfaces';
|
||||
import HasTenancyService from '@/services/Tenancy/TenancyService';
|
||||
|
||||
@Service()
|
||||
export class GetSaleInvoiceState {
|
||||
@Inject()
|
||||
private tenancy: HasTenancyService;
|
||||
|
||||
/**
|
||||
*
|
||||
* Retrieves the create/edit invoice state.
|
||||
* @param {Number} saleInvoiceId -
|
||||
* @return {Promise<ISaleInvoice>}
|
||||
*/
|
||||
public async getSaleInvoiceState(
|
||||
tenantId: number
|
||||
): Promise<ISaleInvocieState> {
|
||||
const { PdfTemplate } = this.tenancy.models(tenantId);
|
||||
|
||||
const defaultPdfTemplate = await PdfTemplate.query()
|
||||
.findOne({ resource: 'SaleInvoice' })
|
||||
.modify('default');
|
||||
|
||||
return {
|
||||
defaultTemplateId: 1,
|
||||
defaultTemplateId: defaultPdfTemplate?.id,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,18 +1,28 @@
|
||||
import { Service } from 'typedi';
|
||||
import { Inject, Service } from 'typedi';
|
||||
import { IPaymentReceivedState } from '@/interfaces';
|
||||
import HasTenancyService from '@/services/Tenancy/TenancyService';
|
||||
|
||||
@Service()
|
||||
export class GetPaymentReceivedState {
|
||||
@Inject()
|
||||
private tenancy: HasTenancyService;
|
||||
|
||||
/**
|
||||
* Retrieves the current state of the payment received.
|
||||
* Retrieves the create/edit initial state of the payment received.
|
||||
* @param {number} tenantId - The ID of the tenant.
|
||||
* @returns {Promise<IPaymentReceivedState>} - A promise resolving to the payment received state.
|
||||
*/
|
||||
public async getPaymentReceivedState(
|
||||
tenantId: number
|
||||
): Promise<IPaymentReceivedState> {
|
||||
const { PdfTemplate } = this.tenancy.models(tenantId);
|
||||
|
||||
const defaultPdfTemplate = await PdfTemplate.query()
|
||||
.findOne({ resource: 'PaymentReceive' })
|
||||
.modify('default');
|
||||
|
||||
return {
|
||||
defaultTemplateId: 1,
|
||||
defaultTemplateId: defaultPdfTemplate?.id,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
import { Service } from 'typedi';
|
||||
import { Inject, Service } from 'typedi';
|
||||
import { ISaleReceiptState } from '@/interfaces';
|
||||
import HasTenancyService from '@/services/Tenancy/TenancyService';
|
||||
|
||||
@Service()
|
||||
export class GetSaleReceiptState {
|
||||
@Inject()
|
||||
private tenancy: HasTenancyService;
|
||||
|
||||
/**
|
||||
* Retireves the sale receipt state.
|
||||
* @param {Number} tenantId -
|
||||
@@ -11,8 +15,14 @@ export class GetSaleReceiptState {
|
||||
public async getSaleReceiptState(
|
||||
tenantId: number
|
||||
): Promise<ISaleReceiptState> {
|
||||
const { PdfTemplate } = this.tenancy.models(tenantId);
|
||||
|
||||
const defaultPdfTemplate = await PdfTemplate.query()
|
||||
.findOne({ resource: 'SaleReceipt' })
|
||||
.modify('default');
|
||||
|
||||
return {
|
||||
defaultTemplateId: 1,
|
||||
defaultTemplateId: defaultPdfTemplate?.id,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user