refactor: split the services to multiple service classes (#202)

This commit is contained in:
Ahmed Bouhuolia
2023-08-10 20:29:39 +02:00
committed by GitHub
parent ffef627dc3
commit 26c6ca9e36
150 changed files with 7188 additions and 5007 deletions

View File

@@ -1,26 +1,27 @@
import { Service, Inject } from 'typedi';
import { Router, Request, Response, NextFunction } from 'express';
import { check, param, query } from 'express-validator';
import { Service, Inject } from 'typedi';
import { AbilitySubject, BillAction, IBillDTO, IBillEditDTO } from '@/interfaces';
import {
AbilitySubject,
BillAction,
IBillDTO,
IBillEditDTO,
} from '@/interfaces';
import asyncMiddleware from '@/api/middleware/asyncMiddleware';
import BillsService from '@/services/Purchases/Bills';
import BaseController from '@/api/controllers/BaseController';
import DynamicListingService from '@/services/DynamicListing/DynamicListService';
import { ServiceError } from '@/exceptions';
import CheckPolicies from '@/api/middleware/CheckPolicies';
import BillPaymentsService from '@/services/Purchases/BillPaymentsService';
import { BillsApplication } from '@/services/Purchases/Bills/BillsApplication';
@Service()
export default class BillsController extends BaseController {
@Inject()
private billsService: BillsService;
private billsApplication: BillsApplication;
@Inject()
private dynamicListService: DynamicListingService;
@Inject()
private billPayments: BillPaymentsService;
/**
* Router constructor.
*/
@@ -97,7 +98,7 @@ export default class BillsController extends BaseController {
/**
* Common validation schema.
*/
get billValidationSchema() {
private get billValidationSchema() {
return [
check('bill_number').exists().trim().escape(),
check('reference_no').optional().trim().escape(),
@@ -142,7 +143,7 @@ export default class BillsController extends BaseController {
/**
* Common validation schema.
*/
get billEditValidationSchema() {
private get billEditValidationSchema() {
return [
check('bill_number').optional().trim().escape(),
check('reference_no').optional().trim().escape(),
@@ -184,14 +185,14 @@ export default class BillsController extends BaseController {
/**
* Bill validation schema.
*/
get specificBillValidationSchema() {
private get specificBillValidationSchema() {
return [param('id').exists().isNumeric().toInt()];
}
/**
* Bills list validation schema.
*/
get billsListingValidationSchema() {
private get billsListingValidationSchema() {
return [
query('view_slug').optional().isString().trim(),
query('stringified_filter_roles').optional().isJSON(),
@@ -203,7 +204,7 @@ export default class BillsController extends BaseController {
];
}
get dueBillsListingValidationSchema() {
private get dueBillsListingValidationSchema() {
return [
query('vendor_id').optional().trim().escape(),
query('payment_made_id').optional().trim().escape(),
@@ -216,17 +217,16 @@ export default class BillsController extends BaseController {
* @param {Response} res
* @param {Function} next
*/
async newBill(req: Request, res: Response, next: NextFunction) {
private async newBill(req: Request, res: Response, next: NextFunction) {
const { tenantId, user } = req;
const billDTO: IBillDTO = this.matchedBodyData(req);
try {
const storedBill = await this.billsService.createBill(
const storedBill = await this.billsApplication.createBill(
tenantId,
billDTO,
user
);
return res.status(200).send({
id: storedBill.id,
message: 'The bill has been created successfully.',
@@ -241,13 +241,13 @@ export default class BillsController extends BaseController {
* @param {Request} req
* @param {Response} res
*/
async editBill(req: Request, res: Response, next: NextFunction) {
private async editBill(req: Request, res: Response, next: NextFunction) {
const { id: billId } = req.params;
const { tenantId, user } = req;
const billDTO: IBillEditDTO = this.matchedBodyData(req);
try {
await this.billsService.editBill(tenantId, billId, billDTO, user);
await this.billsApplication.editBill(tenantId, billId, billDTO, user);
return res.status(200).send({
id: billId,
@@ -263,12 +263,12 @@ export default class BillsController extends BaseController {
* @param {Request} req -
* @param {Response} res -
*/
async openBill(req: Request, res: Response, next: NextFunction) {
private async openBill(req: Request, res: Response, next: NextFunction) {
const { id: billId } = req.params;
const { tenantId } = req;
try {
await this.billsService.openBill(tenantId, billId);
await this.billsApplication.openBill(tenantId, billId);
return res.status(200).send({
id: billId,
@@ -285,12 +285,12 @@ export default class BillsController extends BaseController {
* @param {Response} res
* @return {Response}
*/
async getBill(req: Request, res: Response, next: NextFunction) {
private async getBill(req: Request, res: Response, next: NextFunction) {
const { tenantId } = req;
const { id: billId } = req.params;
try {
const bill = await this.billsService.getBill(tenantId, billId);
const bill = await this.billsApplication.getBill(tenantId, billId);
return res.status(200).send(this.transfromToResponse({ bill }));
} catch (error) {
@@ -304,12 +304,12 @@ export default class BillsController extends BaseController {
* @param {Response} res -
* @return {Response}
*/
async deleteBill(req: Request, res: Response, next: NextFunction) {
private async deleteBill(req: Request, res: Response, next: NextFunction) {
const billId = req.params.id;
const { tenantId } = req;
try {
await this.billsService.deleteBill(tenantId, billId);
await this.billsApplication.deleteBill(tenantId, billId);
return res.status(200).send({
id: billId,
@@ -326,7 +326,7 @@ export default class BillsController extends BaseController {
* @param {Response} res -
* @return {Response}
*/
public async billsList(req: Request, res: Response, next: NextFunction) {
private async billsList(req: Request, res: Response, next: NextFunction) {
const { tenantId } = req;
const filter = {
page: 1,
@@ -338,7 +338,7 @@ export default class BillsController extends BaseController {
try {
const { bills, pagination, filterMeta } =
await this.billsService.getBills(tenantId, filter);
await this.billsApplication.getBills(tenantId, filter);
return res.status(200).send({
bills: this.transfromToResponse(bills),
@@ -356,12 +356,13 @@ export default class BillsController extends BaseController {
* @param {Response} res
* @param {NextFunction} next
*/
public async getDueBills(req: Request, res: Response, next: NextFunction) {
private async getDueBills(req: Request, res: Response, next: NextFunction) {
const { tenantId } = req;
const { vendorId } = this.matchedQueryData(req);
try {
const bills = await this.billsService.getDueBills(tenantId, vendorId);
const bills = await this.billsApplication.getDueBills(tenantId, vendorId);
return res.status(200).send({ bills });
} catch (error) {
next(error);
@@ -374,7 +375,7 @@ export default class BillsController extends BaseController {
* @param {Response} res
* @param {NextFunction} next
*/
public getBillPaymentsTransactions = async (
private getBillPaymentsTransactions = async (
req: Request,
res: Response,
next: NextFunction
@@ -383,7 +384,7 @@ export default class BillsController extends BaseController {
const { id: billId } = req.params;
try {
const billPayments = await this.billPayments.getBillPayments(
const billPayments = await this.billsApplication.getBillPayments(
tenantId,
billId
);

View File

@@ -4,7 +4,7 @@ import { check, param, query, ValidationChain } from 'express-validator';
import asyncMiddleware from '@/api/middleware/asyncMiddleware';
import { ServiceError } from '@/exceptions';
import BaseController from '@/api/controllers/BaseController';
import BillPaymentsService from '@/services/Purchases/BillPayments/BillPayments';
import { BillPaymentsApplication } from '@/services/Purchases/BillPayments/BillPaymentsApplication';
import BillPaymentsPages from '@/services/Purchases/BillPayments/BillPaymentsPages';
import DynamicListingService from '@/services/DynamicListing/DynamicListService';
import CheckPolicies from '@/api/middleware/CheckPolicies';
@@ -17,18 +17,18 @@ import { AbilitySubject, IPaymentMadeAction } from '@/interfaces';
@Service()
export default class BillsPayments extends BaseController {
@Inject()
billPaymentService: BillPaymentsService;
private billPaymentsApplication: BillPaymentsApplication;
@Inject()
dynamicListService: DynamicListingService;
private dynamicListService: DynamicListingService;
@Inject()
billPaymentsPages: BillPaymentsPages;
private billPaymentsPages: BillPaymentsPages;
/**
* Router constructor.
*/
router() {
public router() {
const router = Router();
router.post(
@@ -106,7 +106,7 @@ export default class BillsPayments extends BaseController {
* Bill payments schema validation.
* @return {ValidationChain[]}
*/
get billPaymentSchemaValidation(): ValidationChain[] {
private get billPaymentSchemaValidation(): ValidationChain[] {
return [
check('vendor_id').exists().isNumeric().toInt(),
check('exchange_rate').optional().isFloat({ gt: 0 }).toFloat(),
@@ -129,7 +129,7 @@ export default class BillsPayments extends BaseController {
* Specific bill payment schema validation.
* @returns {ValidationChain[]}
*/
get specificBillPaymentValidateSchema(): ValidationChain[] {
private get specificBillPaymentValidateSchema(): ValidationChain[] {
return [param('id').exists().isNumeric().toInt()];
}
@@ -137,7 +137,7 @@ export default class BillsPayments extends BaseController {
* Bills payment list validation schema.
* @returns {ValidationChain[]}
*/
get listingValidationSchema(): ValidationChain[] {
private get listingValidationSchema(): ValidationChain[] {
return [
query('custom_view_id').optional().isNumeric().toInt(),
query('stringified_filter_roles').optional().isJSON(),
@@ -154,7 +154,7 @@ export default class BillsPayments extends BaseController {
* @param {Request} req -
* @param {Response} res -
*/
async getBillPaymentNewPageEntries(req: Request, res: Response) {
private async getBillPaymentNewPageEntries(req: Request, res: Response) {
const { tenantId } = req;
const { vendorId } = this.matchedQueryData(req);
@@ -174,7 +174,7 @@ export default class BillsPayments extends BaseController {
* @param {Request} req
* @param {Response} res
*/
async getBillPaymentEditPage(
private async getBillPaymentEditPage(
req: Request,
res: Response,
next: NextFunction
@@ -205,16 +205,19 @@ export default class BillsPayments extends BaseController {
* @param {Response} res
* @param {Response} res
*/
async createBillPayment(req: Request, res: Response, next: NextFunction) {
private async createBillPayment(
req: Request,
res: Response,
next: NextFunction
) {
const { tenantId } = req;
const billPaymentDTO = this.matchedBodyData(req);
try {
const billPayment = await this.billPaymentService.createBillPayment(
const billPayment = await this.billPaymentsApplication.createBillPayment(
tenantId,
billPaymentDTO
);
return res.status(200).send({
id: billPayment.id,
message: 'Payment made has been created successfully.',
@@ -229,13 +232,17 @@ export default class BillsPayments extends BaseController {
* @param {Request} req
* @param {Response} res
*/
async editBillPayment(req: Request, res: Response, next: NextFunction) {
private async editBillPayment(
req: Request,
res: Response,
next: NextFunction
) {
const { tenantId } = req;
const billPaymentDTO = this.matchedBodyData(req);
const { id: billPaymentId } = req.params;
try {
const paymentMade = await this.billPaymentService.editBillPayment(
const paymentMade = await this.billPaymentsApplication.editBillPayment(
tenantId,
billPaymentId,
billPaymentDTO
@@ -256,12 +263,19 @@ export default class BillsPayments extends BaseController {
* @param {Response} res -
* @return {Response} res -
*/
async deleteBillPayment(req: Request, res: Response, next: NextFunction) {
private async deleteBillPayment(
req: Request,
res: Response,
next: NextFunction
) {
const { tenantId } = req;
const { id: billPaymentId } = req.params;
try {
await this.billPaymentService.deleteBillPayment(tenantId, billPaymentId);
await this.billPaymentsApplication.deleteBillPayment(
tenantId,
billPaymentId
);
return res.status(200).send({
id: billPaymentId,
@@ -277,16 +291,19 @@ export default class BillsPayments extends BaseController {
* @param {Request} req
* @param {Response} res
*/
async getBillPayment(req: Request, res: Response, next: NextFunction) {
private async getBillPayment(
req: Request,
res: Response,
next: NextFunction
) {
const { tenantId } = req;
const { id: billPaymentId } = req.params;
try {
const billPayment = await this.billPaymentService.getBillPayment(
const billPayment = await this.billPaymentsApplication.getBillPayment(
tenantId,
billPaymentId
);
return res.status(200).send({
bill_payment: this.transfromToResponse(billPayment),
});
@@ -301,12 +318,16 @@ export default class BillsPayments extends BaseController {
* @param {Response} res
* @param {NextFunction} next
*/
async getPaymentBills(req: Request, res: Response, next: NextFunction) {
private async getPaymentBills(
req: Request,
res: Response,
next: NextFunction
) {
const { tenantId } = req;
const { id: billPaymentId } = req.params;
try {
const bills = await this.billPaymentService.getPaymentBills(
const bills = await this.billPaymentsApplication.getPaymentBills(
tenantId,
billPaymentId
);
@@ -322,7 +343,11 @@ export default class BillsPayments extends BaseController {
* @param {Response} res -
* @return {Response}
*/
async getBillsPayments(req: Request, res: Response, next: NextFunction) {
private async getBillsPayments(
req: Request,
res: Response,
next: NextFunction
) {
const { tenantId } = req;
const billPaymentsFilter = {
page: 1,
@@ -335,7 +360,7 @@ export default class BillsPayments extends BaseController {
try {
const { billPayments, pagination, filterMeta } =
await this.billPaymentService.listBillPayments(
await this.billPaymentsApplication.getBillPayments(
tenantId,
billPaymentsFilter
);
@@ -357,7 +382,7 @@ export default class BillsPayments extends BaseController {
* @param {Response} res
* @param {NextFunction} next
*/
handleServiceError(
private handleServiceError(
error: Error,
req: Request,
res: Response,

View File

@@ -1,42 +1,29 @@
import { Inject, Service } from 'typedi';
import { Router, Request, Response, NextFunction } from 'express';
import { check, param, query, ValidationChain } from 'express-validator';
import { Inject, Service } from 'typedi';
import {
AbilitySubject,
IPaymentReceiveDTO,
PaymentReceiveAction,
SaleInvoiceAction,
} from '@/interfaces';
import BaseController from '@/api/controllers/BaseController';
import asyncMiddleware from '@/api/middleware/asyncMiddleware';
import PaymentReceiveService from '@/services/Sales/PaymentReceives/PaymentsReceives';
import PaymentReceivesPages from '@/services/Sales/PaymentReceives/PaymentReceivesPages';
import DynamicListingService from '@/services/DynamicListing/DynamicListService';
import { ServiceError } from '@/exceptions';
import PaymentReceiveNotifyBySms from '@/services/Sales/PaymentReceives/PaymentReceiveSmsNotify';
import { PaymentReceivesApplication } from '@/services/Sales/PaymentReceives/PaymentReceivesApplication';
import CheckPolicies from '@/api/middleware/CheckPolicies';
import GetPaymentReceivePdf from '@/services/Sales/PaymentReceives/GetPaymentReeceivePdf';
import { ServiceError } from '@/exceptions';
/**
* Payments receives controller.
* @service
*/
@Service()
export default class PaymentReceivesController extends BaseController {
@Inject()
paymentReceiveService: PaymentReceiveService;
private paymentReceiveApplication: PaymentReceivesApplication;
@Inject()
PaymentReceivesPages: PaymentReceivesPages;
private PaymentReceivesPages: PaymentReceivesPages;
@Inject()
dynamicListService: DynamicListingService;
@Inject()
paymentReceiveSmsNotify: PaymentReceiveNotifyBySms;
@Inject()
paymentReceivePdf: GetPaymentReceivePdf;
private dynamicListService: DynamicListingService;
/**
* Router constructor.
@@ -137,7 +124,7 @@ export default class PaymentReceivesController extends BaseController {
* Payment receive schema.
* @return {Array}
*/
get paymentReceiveSchema(): ValidationChain[] {
private get paymentReceiveSchema(): ValidationChain[] {
return [
check('customer_id').exists().isNumeric().toInt(),
check('exchange_rate').optional().isFloat({ gt: 0 }).toFloat(),
@@ -162,7 +149,7 @@ export default class PaymentReceivesController extends BaseController {
/**
* Payment receive list validation schema.
*/
get validatePaymentReceiveList(): ValidationChain[] {
private get validatePaymentReceiveList(): ValidationChain[] {
return [
query('stringified_filter_roles').optional().isJSON(),
@@ -181,7 +168,7 @@ export default class PaymentReceivesController extends BaseController {
/**
* Validate payment receive parameters.
*/
get paymentReceiveValidation() {
private get paymentReceiveValidation() {
return [param('id').exists().isNumeric().toInt()];
}
@@ -189,14 +176,14 @@ export default class PaymentReceivesController extends BaseController {
* New payment receive validation schema.
* @return {Array}
*/
get newPaymentReceiveValidation() {
private get newPaymentReceiveValidation() {
return [...this.paymentReceiveSchema];
}
/**
* Edit payment receive validation.
*/
get editPaymentReceiveValidation() {
private get editPaymentReceiveValidation() {
return [
param('id').exists().isNumeric().toInt(),
...this.paymentReceiveSchema,
@@ -209,13 +196,17 @@ export default class PaymentReceivesController extends BaseController {
* @param {Response} res
* @return {Response}
*/
async newPaymentReceive(req: Request, res: Response, next: NextFunction) {
private async newPaymentReceive(
req: Request,
res: Response,
next: NextFunction
) {
const { tenantId, user } = req;
const paymentReceive: IPaymentReceiveDTO = this.matchedBodyData(req);
try {
const storedPaymentReceive =
await this.paymentReceiveService.createPaymentReceive(
await this.paymentReceiveApplication.createPaymentReceive(
tenantId,
paymentReceive,
user
@@ -235,14 +226,18 @@ export default class PaymentReceivesController extends BaseController {
* @param {Response} res
* @return {Response}
*/
async editPaymentReceive(req: Request, res: Response, next: NextFunction) {
private async editPaymentReceive(
req: Request,
res: Response,
next: NextFunction
) {
const { tenantId, user } = req;
const { id: paymentReceiveId } = req.params;
const paymentReceive: IPaymentReceiveDTO = this.matchedBodyData(req);
try {
await this.paymentReceiveService.editPaymentReceive(
await this.paymentReceiveApplication.editPaymentReceive(
tenantId,
paymentReceiveId,
paymentReceive,
@@ -262,17 +257,20 @@ export default class PaymentReceivesController extends BaseController {
* @param {Request} req
* @param {Response} res
*/
async deletePaymentReceive(req: Request, res: Response, next: NextFunction) {
private async deletePaymentReceive(
req: Request,
res: Response,
next: NextFunction
) {
const { tenantId, user } = req;
const { id: paymentReceiveId } = req.params;
try {
await this.paymentReceiveService.deletePaymentReceive(
await this.paymentReceiveApplication.deletePaymentReceive(
tenantId,
paymentReceiveId,
user
);
return res.status(200).send({
id: paymentReceiveId,
message: 'The payment receive has been deleted successfully',
@@ -288,7 +286,7 @@ export default class PaymentReceivesController extends BaseController {
* @param {Response} res
* @param {NextFunction} next
*/
async getPaymentReceiveInvoices(
private async getPaymentReceiveInvoices(
req: Request,
res: Response,
next: NextFunction
@@ -298,7 +296,7 @@ export default class PaymentReceivesController extends BaseController {
try {
const saleInvoices =
await this.paymentReceiveService.getPaymentReceiveInvoices(
await this.paymentReceiveApplication.getPaymentReceiveInvoices(
tenantId,
paymentReceiveId
);
@@ -315,7 +313,11 @@ export default class PaymentReceivesController extends BaseController {
* @param {Response} res
* @return {Response}
*/
async getPaymentReceiveList(req: Request, res: Response, next: NextFunction) {
private async getPaymentReceiveList(
req: Request,
res: Response,
next: NextFunction
) {
const { tenantId } = req;
const filter = {
sortOrder: 'desc',
@@ -327,7 +329,10 @@ export default class PaymentReceivesController extends BaseController {
try {
const { paymentReceives, pagination, filterMeta } =
await this.paymentReceiveService.listPaymentReceives(tenantId, filter);
await this.paymentReceiveApplication.getPaymentReceives(
tenantId,
filter
);
return res.status(200).send({
payment_receives: this.transfromToResponse(paymentReceives),
@@ -344,7 +349,7 @@ export default class PaymentReceivesController extends BaseController {
* @param {Request} req - Request.
* @param {Response} res - Response.
*/
async getPaymentReceiveNewPageEntries(
private async getPaymentReceiveNewPageEntries(
req: Request,
res: Response,
next: NextFunction
@@ -371,7 +376,7 @@ export default class PaymentReceivesController extends BaseController {
* @param {Request} req -
* @param {Response} res -
*/
async getPaymentReceiveEditPage(
private async getPaymentReceiveEditPage(
req: Request,
res: Response,
next: NextFunction
@@ -402,15 +407,20 @@ export default class PaymentReceivesController extends BaseController {
* @param {Response} res
* @param {NextFunction} next
*/
async getPaymentReceive(req: Request, res: Response, next: NextFunction) {
private async getPaymentReceive(
req: Request,
res: Response,
next: NextFunction
) {
const { tenantId } = req;
const { id: paymentReceiveId } = req.params;
try {
const paymentReceive = await this.paymentReceiveService.getPaymentReceive(
tenantId,
paymentReceiveId
);
const paymentReceive =
await this.paymentReceiveApplication.getPaymentReceive(
tenantId,
paymentReceiveId
);
const ACCEPT_TYPE = {
APPLICATION_PDF: 'application/pdf',
@@ -423,10 +433,11 @@ export default class PaymentReceivesController extends BaseController {
});
},
[ACCEPT_TYPE.APPLICATION_PDF]: async () => {
const pdfContent = await this.paymentReceivePdf.getPaymentReceivePdf(
tenantId,
paymentReceive
);
const pdfContent =
await this.paymentReceiveApplication.getPaymentReceivePdf(
tenantId,
paymentReceive
);
res.set({
'Content-Type': 'application/pdf',
'Content-Length': pdfContent.length,
@@ -454,10 +465,11 @@ export default class PaymentReceivesController extends BaseController {
const { id: paymentReceiveId } = req.params;
try {
const paymentReceive = await this.paymentReceiveSmsNotify.notifyBySms(
tenantId,
paymentReceiveId
);
const paymentReceive =
await this.paymentReceiveApplication.notifyPaymentBySms(
tenantId,
paymentReceiveId
);
return res.status(200).send({
id: paymentReceive.id,
message: 'The payment notification has been sent successfully.',
@@ -482,10 +494,11 @@ export default class PaymentReceivesController extends BaseController {
const { id: paymentReceiveId } = req.params;
try {
const smsDetails = await this.paymentReceiveSmsNotify.smsDetails(
tenantId,
paymentReceiveId
);
const smsDetails =
await this.paymentReceiveApplication.getPaymentSmsDetails(
tenantId,
paymentReceiveId
);
return res.status(200).send({
data: smsDetails,
});

View File

@@ -1,20 +1,17 @@
import { Router, Request, Response, NextFunction } from 'express';
import { check, param, query, matchedData } from 'express-validator';
import { check, param, query } from 'express-validator';
import { Inject, Service } from 'typedi';
import {
AbilitySubject,
ISaleEstimateDTO,
SaleEstimateAction,
SaleInvoiceAction,
} from '@/interfaces';
import BaseController from '@/api/controllers/BaseController';
import asyncMiddleware from '@/api/middleware/asyncMiddleware';
import SaleEstimateService from '@/services/Sales/SalesEstimate';
import DynamicListingService from '@/services/DynamicListing/DynamicListService';
import { ServiceError } from '@/exceptions';
import SaleEstimatesPdfService from '@/services/Sales/Estimates/SaleEstimatesPdf';
import SaleEstimateNotifyBySms from '@/services/Sales/Estimates/SaleEstimateSmsNotify';
import CheckPolicies from '@/api/middleware/CheckPolicies';
import { SaleEstimatesApplication } from '@/services/Sales/Estimates/SaleEstimatesApplication';
const ACCEPT_TYPE = {
APPLICATION_PDF: 'application/pdf',
@@ -23,21 +20,15 @@ const ACCEPT_TYPE = {
@Service()
export default class SalesEstimatesController extends BaseController {
@Inject()
saleEstimateService: SaleEstimateService;
private saleEstimatesApplication: SaleEstimatesApplication;
@Inject()
dynamicListService: DynamicListingService;
@Inject()
saleEstimatesPdf: SaleEstimatesPdfService;
@Inject()
saleEstimateNotifySms: SaleEstimateNotifyBySms;
private dynamicListService: DynamicListingService;
/**
* Router constructor.
*/
router() {
public router() {
const router = Router();
router.post(
@@ -136,7 +127,7 @@ export default class SalesEstimatesController extends BaseController {
/**
* Estimate validation schema.
*/
get estimateValidationSchema() {
private get estimateValidationSchema() {
return [
check('customer_id').exists().isNumeric().toInt(),
check('estimate_date').exists().isISO8601().toDate(),
@@ -177,14 +168,14 @@ export default class SalesEstimatesController extends BaseController {
/**
* Specific sale estimate validation schema.
*/
get validateSpecificEstimateSchema() {
private get validateSpecificEstimateSchema() {
return [param('id').exists().isNumeric().toInt()];
}
/**
* Sales estimates list validation schema.
*/
get validateEstimateListSchema() {
private get validateEstimateListSchema() {
return [
query('view_slug').optional().isString().trim(),
query('stringified_filter_roles').optional().isJSON(),
@@ -202,15 +193,16 @@ export default class SalesEstimatesController extends BaseController {
* @param {Response} res -
* @return {Response} res -
*/
async newEstimate(req: Request, res: Response, next: NextFunction) {
private async newEstimate(req: Request, res: Response, next: NextFunction) {
const { tenantId } = req;
const estimateDTO: ISaleEstimateDTO = this.matchedBodyData(req);
try {
const storedEstimate = await this.saleEstimateService.createEstimate(
tenantId,
estimateDTO
);
const storedEstimate =
await this.saleEstimatesApplication.createSaleEstimate(
tenantId,
estimateDTO
);
return res.status(200).send({
id: storedEstimate.id,
@@ -226,19 +218,18 @@ export default class SalesEstimatesController extends BaseController {
* @param {Request} req
* @param {Response} res
*/
async editEstimate(req: Request, res: Response, next: NextFunction) {
private async editEstimate(req: Request, res: Response, next: NextFunction) {
const { id: estimateId } = req.params;
const { tenantId } = req;
const estimateDTO: ISaleEstimateDTO = this.matchedBodyData(req);
try {
// Update estimate with associated estimate entries.
await this.saleEstimateService.editEstimate(
await this.saleEstimatesApplication.editSaleEstimate(
tenantId,
estimateId,
estimateDTO
);
return res.status(200).send({
id: estimateId,
message: 'The sale estimate has been created successfully.',
@@ -253,13 +244,19 @@ export default class SalesEstimatesController extends BaseController {
* @param {Request} req
* @param {Response} res
*/
async deleteEstimate(req: Request, res: Response, next: NextFunction) {
private async deleteEstimate(
req: Request,
res: Response,
next: NextFunction
) {
const { id: estimateId } = req.params;
const { tenantId } = req;
try {
await this.saleEstimateService.deleteEstimate(tenantId, estimateId);
await this.saleEstimatesApplication.deleteSaleEstimate(
tenantId,
estimateId
);
return res.status(200).send({
id: estimateId,
message: 'The sale estimate has been deleted successfully.',
@@ -274,13 +271,19 @@ export default class SalesEstimatesController extends BaseController {
* @param {Request} req
* @param {Response} res
*/
async deliverSaleEstimate(req: Request, res: Response, next: NextFunction) {
private async deliverSaleEstimate(
req: Request,
res: Response,
next: NextFunction
) {
const { id: estimateId } = req.params;
const { tenantId } = req;
try {
await this.saleEstimateService.deliverSaleEstimate(tenantId, estimateId);
await this.saleEstimatesApplication.deliverSaleEstimate(
tenantId,
estimateId
);
return res.status(200).send({
id: estimateId,
message: 'The sale estimate has been delivered successfully.',
@@ -296,12 +299,19 @@ export default class SalesEstimatesController extends BaseController {
* @param {Response} res
* @param {NextFunction} next
*/
async approveSaleEstimate(req: Request, res: Response, next: NextFunction) {
private async approveSaleEstimate(
req: Request,
res: Response,
next: NextFunction
) {
const { id: estimateId } = req.params;
const { tenantId } = req;
try {
await this.saleEstimateService.approveSaleEstimate(tenantId, estimateId);
await this.saleEstimatesApplication.approveSaleEstimate(
tenantId,
estimateId
);
return res.status(200).send({
id: estimateId,
@@ -318,12 +328,19 @@ export default class SalesEstimatesController extends BaseController {
* @param {Response} res
* @param {NextFunction} next
*/
async rejectSaleEstimate(req: Request, res: Response, next: NextFunction) {
private async rejectSaleEstimate(
req: Request,
res: Response,
next: NextFunction
) {
const { id: estimateId } = req.params;
const { tenantId } = req;
try {
await this.saleEstimateService.rejectSaleEstimate(tenantId, estimateId);
await this.saleEstimatesApplication.rejectSaleEstimate(
tenantId,
estimateId
);
return res.status(200).send({
id: estimateId,
@@ -340,12 +357,12 @@ export default class SalesEstimatesController extends BaseController {
* @param {Response} res
* @param {NextFunction} next
*/
async getEstimate(req: Request, res: Response, next: NextFunction) {
private async getEstimate(req: Request, res: Response, next: NextFunction) {
const { id: estimateId } = req.params;
const { tenantId } = req;
try {
const estimate = await this.saleEstimateService.getEstimate(
const estimate = await this.saleEstimatesApplication.getSaleEstimate(
tenantId,
estimateId
);
@@ -357,10 +374,11 @@ export default class SalesEstimatesController extends BaseController {
},
// PDF content type.
[ACCEPT_TYPE.APPLICATION_PDF]: async () => {
const pdfContent = await this.saleEstimatesPdf.saleEstimatePdf(
tenantId,
estimate
);
const pdfContent =
await this.saleEstimatesApplication.getSaleEstimatePdf(
tenantId,
estimate
);
res.set({
'Content-Type': 'application/pdf',
'Content-Length': pdfContent.length,
@@ -378,7 +396,7 @@ export default class SalesEstimatesController extends BaseController {
* @param {Request} req
* @param {Response} res
*/
async getEstimates(req: Request, res: Response, next: NextFunction) {
private async getEstimates(req: Request, res: Response, next: NextFunction) {
const { tenantId } = req;
const filter = {
sortOrder: 'desc',
@@ -390,7 +408,7 @@ export default class SalesEstimatesController extends BaseController {
try {
const { salesEstimates, pagination, filterMeta } =
await this.saleEstimateService.estimatesList(tenantId, filter);
await this.saleEstimatesApplication.getSaleEstimates(tenantId, filter);
res.format({
[ACCEPT_TYPE.APPLICATION_JSON]: () => {
@@ -408,7 +426,7 @@ export default class SalesEstimatesController extends BaseController {
}
}
public saleEstimateNotifyBySms = async (
private saleEstimateNotifyBySms = async (
req: Request,
res: Response,
next: NextFunction
@@ -417,10 +435,11 @@ export default class SalesEstimatesController extends BaseController {
const { id: estimateId } = req.params;
try {
const saleEstimate = await this.saleEstimateNotifySms.notifyBySms(
tenantId,
estimateId
);
const saleEstimate =
await this.saleEstimatesApplication.notifySaleEstimateBySms(
tenantId,
estimateId
);
return res.status(200).send({
id: saleEstimate.id,
message:
@@ -437,7 +456,7 @@ export default class SalesEstimatesController extends BaseController {
* @param {Response} res
* @param {NextFunction} next
*/
public saleEstimateSmsDetails = async (
private saleEstimateSmsDetails = async (
req: Request,
res: Response,
next: NextFunction
@@ -446,10 +465,11 @@ export default class SalesEstimatesController extends BaseController {
const { id: estimateId } = req.params;
try {
const estimateSmsDetails = await this.saleEstimateNotifySms.smsDetails(
tenantId,
estimateId
);
const estimateSmsDetails =
await this.saleEstimatesApplication.getSaleEstimateSmsDetails(
tenantId,
estimateId
);
return res.status(200).send({
data: estimateSmsDetails,
});

View File

@@ -3,7 +3,6 @@ import { check, param, query } from 'express-validator';
import { Service, Inject } from 'typedi';
import BaseController from '../BaseController';
import asyncMiddleware from '@/api/middleware/asyncMiddleware';
import SaleInvoiceService from '@/services/Sales/SalesInvoices';
import DynamicListingService from '@/services/DynamicListing/DynamicListService';
import { ServiceError } from '@/exceptions';
import {
@@ -12,11 +11,8 @@ import {
SaleInvoiceAction,
AbilitySubject,
} from '@/interfaces';
import SaleInvoicePdf from '@/services/Sales/SaleInvoicePdf';
import SaleInvoiceWriteoff from '@/services/Sales/SaleInvoiceWriteoff';
import SaleInvoiceNotifyBySms from '@/services/Sales/SaleInvoiceNotifyBySms';
import CheckPolicies from '@/api/middleware/CheckPolicies';
import InvoicePaymentsService from '@/services/Sales/Invoices/InvoicePaymentsService';
import { SaleInvoiceApplication } from '@/services/Sales/Invoices/SaleInvoicesApplication';
const ACCEPT_TYPE = {
APPLICATION_PDF: 'application/pdf',
@@ -25,27 +21,15 @@ const ACCEPT_TYPE = {
@Service()
export default class SaleInvoicesController extends BaseController {
@Inject()
saleInvoiceService: SaleInvoiceService;
private saleInvoiceApplication: SaleInvoiceApplication;
@Inject()
dynamicListService: DynamicListingService;
@Inject()
saleInvoicePdf: SaleInvoicePdf;
@Inject()
saleInvoiceWriteoff: SaleInvoiceWriteoff;
@Inject()
saleInvoiceSmsNotify: SaleInvoiceNotifyBySms;
@Inject()
invoicePaymentsSerivce: InvoicePaymentsService;
private dynamicListService: DynamicListingService;
/**
* Router constructor.
*/
router() {
public router() {
const router = Router();
router.post(
@@ -167,7 +151,7 @@ export default class SaleInvoicesController extends BaseController {
/**
* Sale invoice validation schema.
*/
get saleInvoiceValidationSchema() {
private get saleInvoiceValidationSchema() {
return [
check('customer_id').exists().isNumeric().toInt(),
check('invoice_date').exists().isISO8601().toDate(),
@@ -227,14 +211,14 @@ export default class SaleInvoicesController extends BaseController {
/**
* Specific sale invoice validation schema.
*/
get specificSaleInvoiceValidation() {
private get specificSaleInvoiceValidation() {
return [param('id').exists().isNumeric().toInt()];
}
/**
* Sales invoices list validation schema.
*/
get saleInvoiceListValidationSchema() {
private get saleInvoiceListValidationSchema() {
return [
query('view_slug').optional({ nullable: true }).isString().trim(),
query('stringified_filter_roles').optional().isJSON(),
@@ -249,7 +233,7 @@ export default class SaleInvoicesController extends BaseController {
/**
* Due sale invoice list validation schema.
*/
get dueSalesInvoicesListValidationSchema() {
private get dueSalesInvoicesListValidationSchema() {
return [query('customer_id').optional().isNumeric().toInt()];
}
@@ -259,17 +243,22 @@ export default class SaleInvoicesController extends BaseController {
* @param {Response} res
* @param {Function} next
*/
async newSaleInvoice(req: Request, res: Response, next: NextFunction) {
private async newSaleInvoice(
req: Request,
res: Response,
next: NextFunction
) {
const { tenantId, user } = req;
const saleInvoiceDTO: ISaleInvoiceCreateDTO = this.matchedBodyData(req);
try {
// Creates a new sale invoice with associated entries.
const storedSaleInvoice = await this.saleInvoiceService.createSaleInvoice(
tenantId,
saleInvoiceDTO,
user
);
const storedSaleInvoice =
await this.saleInvoiceApplication.createSaleInvoice(
tenantId,
saleInvoiceDTO,
user
);
return res.status(200).send({
id: storedSaleInvoice.id,
message: 'The sale invoice has been created successfully.',
@@ -285,14 +274,18 @@ export default class SaleInvoicesController extends BaseController {
* @param {Response} res
* @param {Function} next
*/
async editSaleInvoice(req: Request, res: Response, next: NextFunction) {
private async editSaleInvoice(
req: Request,
res: Response,
next: NextFunction
) {
const { tenantId, user } = req;
const { id: saleInvoiceId } = req.params;
const saleInvoiceOTD: ISaleInvoiceDTO = this.matchedBodyData(req);
try {
// Update the given sale invoice details.
await this.saleInvoiceService.editSaleInvoice(
await this.saleInvoiceApplication.editSaleInvoice(
tenantId,
saleInvoiceId,
saleInvoiceOTD,
@@ -313,12 +306,16 @@ export default class SaleInvoicesController extends BaseController {
* @param {Response} res -
* @param {NextFunction} next -
*/
async deliverSaleInvoice(req: Request, res: Response, next: NextFunction) {
private async deliverSaleInvoice(
req: Request,
res: Response,
next: NextFunction
) {
const { tenantId, user } = req;
const { id: saleInvoiceId } = req.params;
try {
await this.saleInvoiceService.deliverSaleInvoice(
await this.saleInvoiceApplication.deliverSaleInvoice(
tenantId,
saleInvoiceId,
user
@@ -338,13 +335,17 @@ export default class SaleInvoicesController extends BaseController {
* @param {Response} res
* @param {Function} next
*/
async deleteSaleInvoice(req: Request, res: Response, next: NextFunction) {
private async deleteSaleInvoice(
req: Request,
res: Response,
next: NextFunction
) {
const { id: saleInvoiceId } = req.params;
const { tenantId, user } = req;
try {
// Deletes the sale invoice with associated entries and journal transaction.
await this.saleInvoiceService.deleteSaleInvoice(
await this.saleInvoiceApplication.deleteSaleInvoice(
tenantId,
saleInvoiceId,
user
@@ -364,12 +365,16 @@ export default class SaleInvoicesController extends BaseController {
* @param {Request} req - Request object.
* @param {Response} res - Response object.
*/
async getSaleInvoice(req: Request, res: Response, next: NextFunction) {
private async getSaleInvoice(
req: Request,
res: Response,
next: NextFunction
) {
const { id: saleInvoiceId } = req.params;
const { tenantId, user } = req;
try {
const saleInvoice = await this.saleInvoiceService.getSaleInvoice(
const saleInvoice = await this.saleInvoiceApplication.getSaleInvoice(
tenantId,
saleInvoiceId,
user
@@ -384,7 +389,7 @@ export default class SaleInvoicesController extends BaseController {
},
// PDF content type.
[ACCEPT_TYPE.APPLICATION_PDF]: async () => {
const pdfContent = await this.saleInvoicePdf.saleInvoicePdf(
const pdfContent = await this.saleInvoiceApplication.saleInvoicePdf(
tenantId,
saleInvoice
);
@@ -420,7 +425,7 @@ export default class SaleInvoicesController extends BaseController {
};
try {
const { salesInvoices, filterMeta, pagination } =
await this.saleInvoiceService.salesInvoicesList(tenantId, filter);
await this.saleInvoiceApplication.getSaleInvoices(tenantId, filter);
return res.status(200).send({
sales_invoices: this.transfromToResponse(salesInvoices),
@@ -448,10 +453,11 @@ export default class SaleInvoicesController extends BaseController {
const { customerId } = this.matchedQueryData(req);
try {
const salesInvoices = await this.saleInvoiceService.getPayableInvoices(
tenantId,
customerId
);
const salesInvoices =
await this.saleInvoiceApplication.getReceivableSaleInvoices(
tenantId,
customerId
);
return res.status(200).send({
sales_invoices: this.transfromToResponse(salesInvoices),
});
@@ -477,7 +483,7 @@ export default class SaleInvoicesController extends BaseController {
const writeoffDTO = this.matchedBodyData(req);
try {
const saleInvoice = await this.saleInvoiceWriteoff.writeOff(
const saleInvoice = await this.saleInvoiceApplication.writeOff(
tenantId,
invoiceId,
writeoffDTO
@@ -485,7 +491,7 @@ export default class SaleInvoicesController extends BaseController {
return res.status(200).send({
id: saleInvoice.id,
message: 'The given sale invoice has been writte-off successfully.',
message: 'The given sale invoice has been written-off successfully.',
});
} catch (error) {
next(error);
@@ -507,7 +513,7 @@ export default class SaleInvoicesController extends BaseController {
const { id: invoiceId } = req.params;
try {
const saleInvoice = await this.saleInvoiceWriteoff.cancelWrittenoff(
const saleInvoice = await this.saleInvoiceApplication.cancelWrittenoff(
tenantId,
invoiceId
);
@@ -538,11 +544,12 @@ export default class SaleInvoicesController extends BaseController {
const invoiceNotifySmsDTO = this.matchedBodyData(req);
try {
const saleInvoice = await this.saleInvoiceSmsNotify.notifyBySms(
tenantId,
invoiceId,
invoiceNotifySmsDTO.notificationKey
);
const saleInvoice =
await this.saleInvoiceApplication.notifySaleInvoiceBySms(
tenantId,
invoiceId,
invoiceNotifySmsDTO.notificationKey
);
return res.status(200).send({
id: saleInvoice.id,
message:
@@ -569,11 +576,12 @@ export default class SaleInvoicesController extends BaseController {
const smsDetailsDTO = this.matchedQueryData(req);
try {
const invoiceSmsDetails = await this.saleInvoiceSmsNotify.smsDetails(
tenantId,
invoiceId,
smsDetailsDTO
);
const invoiceSmsDetails =
await this.saleInvoiceApplication.getSaleInvoiceSmsDetails(
tenantId,
invoiceId,
smsDetailsDTO
);
return res.status(200).send({
data: invoiceSmsDetails,
});
@@ -599,7 +607,7 @@ export default class SaleInvoicesController extends BaseController {
try {
const invoicePayments =
await this.invoicePaymentsSerivce.getInvoicePayments(
await this.saleInvoiceApplication.getInvoicePayments(
tenantId,
invoiceId
);

View File

@@ -2,34 +2,26 @@ import { Router, Request, Response, NextFunction } from 'express';
import { check, param, query } from 'express-validator';
import { Inject, Service } from 'typedi';
import asyncMiddleware from '@/api/middleware/asyncMiddleware';
import SaleReceiptService from '@/services/Sales/SalesReceipts';
import SaleReceiptsPdfService from '@/services/Sales/Receipts/SaleReceiptsPdfService';
import BaseController from '../BaseController';
import { ISaleReceiptDTO } from '@/interfaces/SaleReceipt';
import { ServiceError } from '@/exceptions';
import DynamicListingService from '@/services/DynamicListing/DynamicListService';
import SaleReceiptNotifyBySms from '@/services/Sales/SaleReceiptNotifyBySms';
import CheckPolicies from '@/api/middleware/CheckPolicies';
import { AbilitySubject, SaleReceiptAction } from '@/interfaces';
import { SaleReceiptApplication } from '@/services/Sales/Receipts/SaleReceiptApplication';
@Service()
export default class SalesReceiptsController extends BaseController {
@Inject()
saleReceiptService: SaleReceiptService;
private saleReceiptsApplication: SaleReceiptApplication;
@Inject()
saleReceiptsPdf: SaleReceiptsPdfService;
@Inject()
dynamicListService: DynamicListingService;
@Inject()
saleReceiptSmsNotify: SaleReceiptNotifyBySms;
private dynamicListService: DynamicListingService;
/**
* Router constructor.
*/
router() {
public router() {
const router = Router();
router.post(
@@ -105,7 +97,7 @@ export default class SalesReceiptsController extends BaseController {
* Sales receipt validation schema.
* @return {Array}
*/
get salesReceiptsValidationSchema() {
private get salesReceiptsValidationSchema() {
return [
check('customer_id').exists().isNumeric().toInt(),
check('exchange_rate').optional().isFloat({ gt: 0 }).toFloat(),
@@ -146,14 +138,14 @@ export default class SalesReceiptsController extends BaseController {
/**
* Specific sale receipt validation schema.
*/
get specificReceiptValidationSchema() {
private get specificReceiptValidationSchema() {
return [param('id').exists().isNumeric().toInt()];
}
/**
* List sales receipts validation schema.
*/
get listSalesReceiptsValidationSchema() {
private get listSalesReceiptsValidationSchema() {
return [
query('view_slug').optional().isString().trim(),
query('stringified_filter_roles').optional().isJSON(),
@@ -170,16 +162,21 @@ export default class SalesReceiptsController extends BaseController {
* @param {Request} req
* @param {Response} res
*/
async newSaleReceipt(req: Request, res: Response, next: NextFunction) {
private async newSaleReceipt(
req: Request,
res: Response,
next: NextFunction
) {
const { tenantId } = req;
const saleReceiptDTO: ISaleReceiptDTO = this.matchedBodyData(req);
try {
// Store the given sale receipt details with associated entries.
const storedSaleReceipt = await this.saleReceiptService.createSaleReceipt(
tenantId,
saleReceiptDTO
);
const storedSaleReceipt =
await this.saleReceiptsApplication.createSaleReceipt(
tenantId,
saleReceiptDTO
);
return res.status(200).send({
id: storedSaleReceipt.id,
message: 'Sale receipt has been created successfully.',
@@ -194,13 +191,20 @@ export default class SalesReceiptsController extends BaseController {
* @param {Request} req
* @param {Response} res
*/
async deleteSaleReceipt(req: Request, res: Response, next: NextFunction) {
private async deleteSaleReceipt(
req: Request,
res: Response,
next: NextFunction
) {
const { tenantId } = req;
const { id: saleReceiptId } = req.params;
try {
// Deletes the sale receipt.
await this.saleReceiptService.deleteSaleReceipt(tenantId, saleReceiptId);
await this.saleReceiptsApplication.deleteSaleReceipt(
tenantId,
saleReceiptId
);
return res.status(200).send({
id: saleReceiptId,
@@ -217,14 +221,18 @@ export default class SalesReceiptsController extends BaseController {
* @param {Request} req -
* @param {Response} res -
*/
async editSaleReceipt(req: Request, res: Response, next: NextFunction) {
private async editSaleReceipt(
req: Request,
res: Response,
next: NextFunction
) {
const { tenantId } = req;
const { id: saleReceiptId } = req.params;
const saleReceipt = this.matchedBodyData(req);
try {
// Update the given sale receipt details.
await this.saleReceiptService.editSaleReceipt(
await this.saleReceiptsApplication.editSaleReceipt(
tenantId,
saleReceiptId,
saleReceipt
@@ -244,13 +252,20 @@ export default class SalesReceiptsController extends BaseController {
* @param {Response} res
* @param {NextFunction} next
*/
async closeSaleReceipt(req: Request, res: Response, next: NextFunction) {
private async closeSaleReceipt(
req: Request,
res: Response,
next: NextFunction
) {
const { tenantId } = req;
const { id: saleReceiptId } = req.params;
try {
// Update the given sale receipt details.
await this.saleReceiptService.closeSaleReceipt(tenantId, saleReceiptId);
await this.saleReceiptsApplication.closeSaleReceipt(
tenantId,
saleReceiptId
);
return res.status(200).send({
id: saleReceiptId,
message: 'Sale receipt has been closed successfully.',
@@ -265,7 +280,11 @@ export default class SalesReceiptsController extends BaseController {
* @param {Request} req
* @param {Response} res
*/
async getSalesReceipts(req: Request, res: Response, next: NextFunction) {
private async getSalesReceipts(
req: Request,
res: Response,
next: NextFunction
) {
const { tenantId } = req;
const filter = {
sortOrder: 'desc',
@@ -274,10 +293,9 @@ export default class SalesReceiptsController extends BaseController {
pageSize: 12,
...this.matchedQueryData(req),
};
try {
const { data, pagination, filterMeta } =
await this.saleReceiptService.salesReceiptsList(tenantId, filter);
await this.saleReceiptsApplication.getSaleReceipts(tenantId, filter);
const response = this.transfromToResponse({
data,
@@ -301,11 +319,10 @@ export default class SalesReceiptsController extends BaseController {
const { tenantId } = req;
try {
const saleReceipt = await this.saleReceiptService.getSaleReceipt(
const saleReceipt = await this.saleReceiptsApplication.getSaleReceipt(
tenantId,
saleReceiptId
);
res.format({
'application/json': () => {
return res
@@ -313,10 +330,11 @@ export default class SalesReceiptsController extends BaseController {
.send(this.transfromToResponse({ saleReceipt }));
},
'application/pdf': async () => {
const pdfContent = await this.saleReceiptsPdf.saleReceiptPdf(
tenantId,
saleReceipt
);
const pdfContent =
await this.saleReceiptsApplication.getSaleReceiptPdf(
tenantId,
saleReceipt
);
res.set({
'Content-Type': 'application/pdf',
'Content-Length': pdfContent.length,
@@ -344,10 +362,11 @@ export default class SalesReceiptsController extends BaseController {
const { id: receiptId } = req.params;
try {
const saleReceipt = await this.saleReceiptSmsNotify.notifyBySms(
tenantId,
receiptId
);
const saleReceipt =
await this.saleReceiptsApplication.saleReceiptNotifyBySms(
tenantId,
receiptId
);
return res.status(200).send({
id: saleReceipt.id,
message:
@@ -373,10 +392,11 @@ export default class SalesReceiptsController extends BaseController {
const { id: receiptId } = req.params;
try {
const smsDetails = await this.saleReceiptSmsNotify.smsDetails(
tenantId,
receiptId
);
const smsDetails =
await this.saleReceiptsApplication.getSaleReceiptSmsDetails(
tenantId,
receiptId
);
return res.status(200).send({
data: smsDetails,
});

View File

@@ -1,10 +1,10 @@
import { Router } from 'express';
import { Container, Service } from 'typedi';
import SalesInvoices from './SalesInvoices'
import SalesEstimates from './SalesEstimates';
import SalesReceipts from './SalesReceipts';
import SalesInvoices from './SalesInvoices'
import PaymentReceives from './PaymentReceives';
import CreditNotes from './CreditNotes';
import PaymentReceives from './PaymentReceives';
@Service()
export default class SalesController {
/**