mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-18 05:40:31 +00:00
87 lines
2.3 KiB
TypeScript
87 lines
2.3 KiB
TypeScript
import { Inject, Service } from 'typedi';
|
|
import HasTenancyService from '@/services/Tenancy/TenancyService';
|
|
import { ServiceError } from '@/exceptions';
|
|
import { SaleInvoice } from '@/models';
|
|
import { ERRORS } from './constants';
|
|
|
|
@Service()
|
|
export class CommandSaleInvoiceValidators {
|
|
@Inject()
|
|
private tenancy: HasTenancyService;
|
|
|
|
/**
|
|
* Validates the given invoice is existance.
|
|
* @param {SaleInvoice | undefined} invoice
|
|
*/
|
|
public validateInvoiceExistance(invoice: SaleInvoice | undefined) {
|
|
if (!invoice) {
|
|
throw new ServiceError(ERRORS.SALE_INVOICE_NOT_FOUND);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Validate whether sale invoice number unqiue on the storage.
|
|
*/
|
|
public async validateInvoiceNumberUnique(
|
|
tenantId: number,
|
|
invoiceNumber: string,
|
|
notInvoiceId?: number
|
|
) {
|
|
const { SaleInvoice } = this.tenancy.models(tenantId);
|
|
|
|
const saleInvoice = await SaleInvoice.query()
|
|
.findOne('invoice_no', invoiceNumber)
|
|
.onBuild((builder) => {
|
|
if (notInvoiceId) {
|
|
builder.whereNot('id', notInvoiceId);
|
|
}
|
|
});
|
|
|
|
if (saleInvoice) {
|
|
throw new ServiceError(ERRORS.INVOICE_NUMBER_NOT_UNIQUE);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Validate the invoice amount is bigger than payment amount before edit the invoice.
|
|
* @param {number} saleInvoiceAmount
|
|
* @param {number} paymentAmount
|
|
*/
|
|
public validateInvoiceAmountBiggerPaymentAmount(
|
|
saleInvoiceAmount: number,
|
|
paymentAmount: number
|
|
) {
|
|
if (saleInvoiceAmount < paymentAmount) {
|
|
throw new ServiceError(ERRORS.INVOICE_AMOUNT_SMALLER_THAN_PAYMENT_AMOUNT);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Validate the invoice number require.
|
|
* @param {ISaleInvoice} saleInvoiceObj
|
|
*/
|
|
public validateInvoiceNoRequire(invoiceNo: string) {
|
|
if (!invoiceNo) {
|
|
throw new ServiceError(ERRORS.SALE_INVOICE_NO_IS_REQUIRED);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Validate the given customer has no sales invoices.
|
|
* @param {number} tenantId
|
|
* @param {number} customerId - Customer id.
|
|
*/
|
|
public async validateCustomerHasNoInvoices(
|
|
tenantId: number,
|
|
customerId: number
|
|
) {
|
|
const { SaleInvoice } = this.tenancy.models(tenantId);
|
|
|
|
const invoices = await SaleInvoice.query().where('customer_id', customerId);
|
|
|
|
if (invoices.length > 0) {
|
|
throw new ServiceError(ERRORS.CUSTOMER_HAS_SALES_INVOICES);
|
|
}
|
|
}
|
|
}
|