add server to monorepo.

This commit is contained in:
a.bouhuolia
2023-02-03 11:57:50 +02:00
parent 28e309981b
commit 80b97b5fdc
1303 changed files with 137049 additions and 0 deletions

View File

@@ -0,0 +1,38 @@
import { IBranchesActivatedPayload } from '@/interfaces';
import { Service, Inject } from 'typedi';
import events from '@/subscribers/events';
import { CashflowTransactionsActivateBranches } from '../../Integrations/Cashflow/CashflowActivateBranches';
@Service()
export class CreditNoteActivateBranchesSubscriber {
@Inject()
private cashflowActivateBranches: CashflowTransactionsActivateBranches;
/**
* Attaches events with handlers.
*/
public attach(bus) {
bus.subscribe(
events.branch.onActivated,
this.updateCashflowWithBranchOnActivated
);
return bus;
}
/**
* Updates accounts transactions with the primary branch once
* the multi-branches is activated.
* @param {IBranchesActivatedPayload}
*/
private updateCashflowWithBranchOnActivated = async ({
tenantId,
primaryBranch,
trx,
}: IBranchesActivatedPayload) => {
await this.cashflowActivateBranches.updateCashflowTransactionsWithBranch(
tenantId,
primaryBranch.id,
trx
);
};
}

View File

@@ -0,0 +1,38 @@
import { IBranchesActivatedPayload } from '@/interfaces';
import { Service, Inject } from 'typedi';
import { CreditNoteActivateBranches } from '../../Integrations/Sales/CreditNoteBranchesActivate';
import events from '@/subscribers/events';
@Service()
export class CreditNoteActivateBranchesSubscriber {
@Inject()
private creditNotesActivateBranches: CreditNoteActivateBranches;
/**
* Attaches events with handlers.
*/
public attach(bus) {
bus.subscribe(
events.branch.onActivated,
this.updateCreditNoteWithBranchOnActivated
);
return bus;
}
/**
* Updates accounts transactions with the primary branch once
* the multi-branches is activated.
* @param {IBranchesActivatedPayload}
*/
private updateCreditNoteWithBranchOnActivated = async ({
tenantId,
primaryBranch,
trx,
}: IBranchesActivatedPayload) => {
await this.creditNotesActivateBranches.updateCreditsWithBranch(
tenantId,
primaryBranch.id,
trx
);
};
}

View File

@@ -0,0 +1,38 @@
import { IBranchesActivatedPayload } from '@/interfaces';
import { Service, Inject } from 'typedi';
import events from '@/subscribers/events';
import { ExpensesActivateBranches } from '../../Integrations/Expense/ExpensesActivateBranches';
@Service()
export class ExpenseActivateBranchesSubscriber {
@Inject()
private expensesActivateBranches: ExpensesActivateBranches;
/**
* Attaches events with handlers.
*/
public attach(bus) {
bus.subscribe(
events.branch.onActivated,
this.updateExpensesWithBranchOnActivated
);
return bus;
}
/**
* Updates accounts transactions with the primary branch once
* the multi-branches is activated.
* @param {IBranchesActivatedPayload}
*/
private updateExpensesWithBranchOnActivated = async ({
tenantId,
primaryBranch,
trx,
}: IBranchesActivatedPayload) => {
await this.expensesActivateBranches.updateExpensesWithBranch(
tenantId,
primaryBranch.id,
trx
);
};
}

View File

@@ -0,0 +1,38 @@
import { IBranchesActivatedPayload } from '@/interfaces';
import { Service, Inject } from 'typedi';
import events from '@/subscribers/events';
import { BillPaymentsActivateBranches } from '../../Integrations/Purchases/PaymentMadeBranchesActivate';
@Service()
export class PaymentMadeActivateBranchesSubscriber {
@Inject()
private paymentsActivateBranches: BillPaymentsActivateBranches;
/**
* Attaches events with handlers.
*/
public attach(bus) {
bus.subscribe(
events.branch.onActivated,
this.updatePaymentsWithBranchOnActivated
);
return bus;
}
/**
* Updates accounts transactions with the primary branch once
* the multi-branches is activated.
* @param {IBranchesActivatedPayload}
*/
private updatePaymentsWithBranchOnActivated = async ({
tenantId,
primaryBranch,
trx,
}: IBranchesActivatedPayload) => {
await this.paymentsActivateBranches.updateBillPaymentsWithBranch(
tenantId,
primaryBranch.id,
trx
);
};
}

View File

@@ -0,0 +1,38 @@
import { IBranchesActivatedPayload } from '@/interfaces';
import { Service, Inject } from 'typedi';
import events from '@/subscribers/events';
import { PaymentReceiveActivateBranches } from '../../Integrations/Sales/PaymentReceiveBranchesActivate';
@Service()
export class PaymentReceiveActivateBranchesSubscriber {
@Inject()
private paymentsActivateBranches: PaymentReceiveActivateBranches;
/**
* Attaches events with handlers.
*/
public attach(bus) {
bus.subscribe(
events.branch.onActivated,
this.updateCreditNoteWithBranchOnActivated
);
return bus;
}
/**
* Updates accounts transactions with the primary branch once
* the multi-branches is activated.
* @param {IBranchesActivatedPayload}
*/
private updateCreditNoteWithBranchOnActivated = async ({
tenantId,
primaryBranch,
trx,
}: IBranchesActivatedPayload) => {
await this.paymentsActivateBranches.updatePaymentsWithBranch(
tenantId,
primaryBranch.id,
trx
);
};
}

View File

@@ -0,0 +1,38 @@
import { IBranchesActivatedPayload } from '@/interfaces';
import { Service, Inject } from 'typedi';
import events from '@/subscribers/events';
import { SaleEstimateActivateBranches } from '../../Integrations/Sales/SaleEstimatesBranchesActivate';
@Service()
export class SaleEstimatesActivateBranchesSubscriber {
@Inject()
private estimatesActivateBranches: SaleEstimateActivateBranches;
/**
* Attaches events with handlers.
*/
public attach(bus) {
bus.subscribe(
events.branch.onActivated,
this.updateEstimatesWithBranchOnActivated
);
return bus;
}
/**
* Updates accounts transactions with the primary branch once
* the multi-branches is activated.
* @param {IBranchesActivatedPayload}
*/
private updateEstimatesWithBranchOnActivated = async ({
tenantId,
primaryBranch,
trx,
}: IBranchesActivatedPayload) => {
await this.estimatesActivateBranches.updateEstimatesWithBranch(
tenantId,
primaryBranch.id,
trx
);
};
}

View File

@@ -0,0 +1,38 @@
import { IBranchesActivatedPayload } from '@/interfaces';
import { Service, Inject } from 'typedi';
import events from '@/subscribers/events';
import { SaleInvoiceActivateBranches } from '../../Integrations/Sales/SaleInvoiceBranchesActivate';
@Service()
export class SaleInvoicesActivateBranchesSubscriber {
@Inject()
private invoicesActivateBranches: SaleInvoiceActivateBranches;
/**
* Attaches events with handlers.
*/
public attach(bus) {
bus.subscribe(
events.branch.onActivated,
this.updateInvoicesWithBranchOnActivated
);
return bus;
}
/**
* Updates accounts transactions with the primary branch once
* the multi-branches is activated.
* @param {IBranchesActivatedPayload}
*/
private updateInvoicesWithBranchOnActivated = async ({
tenantId,
primaryBranch,
trx,
}: IBranchesActivatedPayload) => {
await this.invoicesActivateBranches.updateInvoicesWithBranch(
tenantId,
primaryBranch.id,
trx
);
};
}

View File

@@ -0,0 +1,38 @@
import { IBranchesActivatedPayload } from '@/interfaces';
import { Service, Inject } from 'typedi';
import events from '@/subscribers/events';
import { SaleReceiptActivateBranches } from '../../Integrations/Sales/SaleReceiptBranchesActivate';
@Service()
export class SaleReceiptsActivateBranchesSubscriber {
@Inject()
private receiptsActivateBranches: SaleReceiptActivateBranches;
/**
* Attaches events with handlers.
*/
public attach(bus) {
bus.subscribe(
events.branch.onActivated,
this.updateReceiptsWithBranchOnActivated
);
return bus;
}
/**
* Updates accounts transactions with the primary branch once
* the multi-branches is activated.
* @param {IBranchesActivatedPayload}
*/
private updateReceiptsWithBranchOnActivated = async ({
tenantId,
primaryBranch,
trx,
}: IBranchesActivatedPayload) => {
await this.receiptsActivateBranches.updateReceiptsWithBranch(
tenantId,
primaryBranch.id,
trx
);
};
}

View File

@@ -0,0 +1,8 @@
export * from './CashflowBranchesActviateSubscriber';
export * from './CreditNoteBranchesActivateSubscriber';
export * from './PaymentMadeBranchesActivateSubscriber';
export * from './PaymentReceiveBranchesActivateSubscriber';
export * from './SaleReceiptsBranchesActivateSubscriber';
export * from './SaleEstiamtesBranchesActivateSubscriber';
export * from './SaleInvoiceBranchesActivateSubscriber';
export * from './ExpenseBranchesActivateSubscriber';

View File

@@ -0,0 +1,53 @@
import { Inject, Service } from 'typedi';
import events from '@/subscribers/events';
import { IBillCreatingPayload, IBillEditingPayload } from '@/interfaces';
import { ValidateBranchExistance } from '../../Integrations/ValidateBranchExistance';
@Service()
export class BillBranchValidateSubscriber {
@Inject()
private validateBranchExistance: ValidateBranchExistance;
/**
* Attaches events with handlers.
*/
public attach = (bus) => {
bus.subscribe(
events.bill.onCreating,
this.validateBranchExistanceOnBillCreating
);
bus.subscribe(
events.bill.onEditing,
this.validateBranchExistanceOnBillEditing
);
return bus;
};
/**
* Validate branch existance on estimate creating.
* @param {ISaleEstimateCreatedPayload} payload
*/
private validateBranchExistanceOnBillCreating = async ({
tenantId,
billDTO,
}: IBillCreatingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
billDTO.branchId
);
};
/**
* Validate branch existance once estimate editing.
* @param {ISaleEstimateEditingPayload} payload
*/
private validateBranchExistanceOnBillEditing = async ({
billDTO,
tenantId,
}: IBillEditingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
billDTO.branchId
);
};
}

View File

@@ -0,0 +1,35 @@
import { Inject, Service } from 'typedi';
import events from '@/subscribers/events';
import { ICommandCashflowCreatingPayload } from '@/interfaces';
import { ValidateBranchExistance } from '../../Integrations/ValidateBranchExistance';
@Service()
export class CashflowBranchDTOValidatorSubscriber {
@Inject()
private validateBranchExistance: ValidateBranchExistance;
/**
* Attaches events with handlers.
*/
public attach = (bus) => {
bus.subscribe(
events.cashflow.onTransactionCreating,
this.validateBranchExistanceOnCashflowTransactionCreating
);
return bus;
};
/**
* Validate branch existance once cashflow transaction creating.
* @param {ICommandCashflowCreatingPayload} payload
*/
private validateBranchExistanceOnCashflowTransactionCreating = async ({
tenantId,
newTransactionDTO,
}: ICommandCashflowCreatingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
newTransactionDTO.branchId
);
};
}

View File

@@ -0,0 +1,104 @@
import { Inject, Service } from 'typedi';
import events from '@/subscribers/events';
import {
ICustomerEventCreatingPayload,
ICustomerOpeningBalanceEditingPayload,
IVendorEventCreatingPayload,
IVendorOpeningBalanceEditingPayload,
} from '@/interfaces';
import { ValidateBranchExistance } from '../../Integrations/ValidateBranchExistance';
@Service()
export class ContactBranchValidateSubscriber {
@Inject()
private validateBranchExistance: ValidateBranchExistance;
/**
* Attaches events with handlers.
*/
public attach = (bus) => {
bus.subscribe(
events.customers.onCreating,
this.validateBranchExistanceOnCustomerCreating
);
bus.subscribe(
events.customers.onOpeningBalanceChanging,
this.validateBranchExistanceOnCustomerOpeningBalanceEditing
);
bus.subscribe(
events.vendors.onCreating,
this.validateBranchExistanceonVendorCreating
);
bus.subscribe(
events.vendors.onOpeningBalanceChanging,
this.validateBranchExistanceOnVendorOpeningBalanceEditing
);
return bus;
};
/**
* Validate branch existance on customer creating.
* @param {ICustomerEventCreatingPayload} payload
*/
private validateBranchExistanceOnCustomerCreating = async ({
tenantId,
customerDTO,
}: ICustomerEventCreatingPayload) => {
// Can't continue if the customer opening balance is zero.
if (!customerDTO.openingBalance) return;
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
customerDTO.openingBalanceBranchId
);
};
/**
* Validate branch existance once customer opening balance editing.
* @param {ICustomerOpeningBalanceEditingPayload} payload
*/
private validateBranchExistanceOnCustomerOpeningBalanceEditing = async ({
openingBalanceEditDTO,
tenantId,
}: ICustomerOpeningBalanceEditingPayload) => {
if (!openingBalanceEditDTO.openingBalance) return;
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
openingBalanceEditDTO.openingBalanceBranchId
);
};
/**
* Validates the branch existance on vendor creating.
* @param {IVendorEventCreatingPayload} payload -
*/
private validateBranchExistanceonVendorCreating = async ({
vendorDTO,
tenantId,
}: IVendorEventCreatingPayload) => {
// Can't continue if the customer opening balance is zero.
if (!vendorDTO.openingBalance) return;
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
vendorDTO.openingBalanceBranchId
);
};
/**
* Validate branch existance once the vendor opening balance editing.
* @param {IVendorOpeningBalanceEditingPayload}
*/
private validateBranchExistanceOnVendorOpeningBalanceEditing = async ({
tenantId,
openingBalanceEditDTO,
}: IVendorOpeningBalanceEditingPayload) => {
if (!openingBalanceEditDTO.openingBalance) return;
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
openingBalanceEditDTO.openingBalanceBranchId
);
};
}

View File

@@ -0,0 +1,56 @@
import { Inject, Service } from 'typedi';
import events from '@/subscribers/events';
import {
ICreditNoteCreatingPayload,
ICreditNoteEditingPayload,
} from '@/interfaces';
import { ValidateBranchExistance } from '../../Integrations/ValidateBranchExistance';
@Service()
export class CreditNoteBranchValidateSubscriber {
@Inject()
private validateBranchExistance: ValidateBranchExistance;
/**
* Attaches events with handlers.
*/
public attach = (bus) => {
bus.subscribe(
events.creditNote.onCreating,
this.validateBranchExistanceOnCreditCreating
);
bus.subscribe(
events.creditNote.onEditing,
this.validateBranchExistanceOnCreditEditing
);
return bus;
};
/**
* Validate branch existance on estimate creating.
* @param {ICreditNoteCreatingPayload} payload
*/
private validateBranchExistanceOnCreditCreating = async ({
tenantId,
creditNoteDTO,
}: ICreditNoteCreatingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
creditNoteDTO.branchId
);
};
/**
* Validate branch existance once estimate editing.
* @param {ISaleEstimateEditingPayload} payload
*/
private validateBranchExistanceOnCreditEditing = async ({
creditNoteEditDTO,
tenantId,
}: ICreditNoteEditingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
creditNoteEditDTO.branchId
);
};
}

View File

@@ -0,0 +1,35 @@
import { Inject, Service } from 'typedi';
import events from '@/subscribers/events';
import { IRefundCreditNoteCreatingPayload } from '@/interfaces';
import { ValidateBranchExistance } from '../../Integrations/ValidateBranchExistance';
@Service()
export class CreditNoteRefundBranchValidateSubscriber {
@Inject()
private validateBranchExistance: ValidateBranchExistance;
/**
* Attaches events with handlers.
*/
public attach = (bus) => {
bus.subscribe(
events.creditNote.onRefundCreating,
this.validateBranchExistanceOnCreditRefundCreating
);
return bus;
};
/**
* Validate branch existance on refund credit note creating.
* @param {ICreditNoteCreatingPayload} payload
*/
private validateBranchExistanceOnCreditRefundCreating = async ({
tenantId,
newCreditNoteDTO,
}: IRefundCreditNoteCreatingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
newCreditNoteDTO.branchId
);
};
}

View File

@@ -0,0 +1,56 @@
import { Inject, Service } from 'typedi';
import events from '@/subscribers/events';
import {
IExpenseCreatingPayload,
IExpenseEventEditingPayload,
} from '@/interfaces';
import { ValidateBranchExistance } from '../../Integrations/ValidateBranchExistance';
@Service()
export class ExpenseBranchValidateSubscriber {
@Inject()
private validateBranchExistance: ValidateBranchExistance;
/**
* Attaches events with handlers.
*/
public attach = (bus) => {
bus.subscribe(
events.expenses.onCreating,
this.validateBranchExistanceOnExpenseCreating
);
bus.subscribe(
events.expenses.onEditing,
this.validateBranchExistanceOnExpenseEditing
);
return bus;
};
/**
* Validate branch existance once expense transaction creating.
* @param {ISaleEstimateCreatedPayload} payload
*/
private validateBranchExistanceOnExpenseCreating = async ({
tenantId,
expenseDTO,
}: IExpenseCreatingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
expenseDTO.branchId
);
};
/**
* Validate branch existance once expense transaction editing.
* @param {ISaleEstimateEditingPayload} payload
*/
private validateBranchExistanceOnExpenseEditing = async ({
expenseDTO,
tenantId,
}: IExpenseEventEditingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
expenseDTO.branchId
);
};
}

View File

@@ -0,0 +1,35 @@
import { Inject, Service } from 'typedi';
import events from '@/subscribers/events';
import { IInventoryAdjustmentCreatingPayload } from '@/interfaces';
import { ValidateBranchExistance } from '../../Integrations/ValidateBranchExistance';
@Service()
export class InventoryAdjustmentBranchValidateSubscriber {
@Inject()
private validateBranchExistance: ValidateBranchExistance;
/**
* Attaches events with handlers.
*/
public attach = (bus) => {
bus.subscribe(
events.inventoryAdjustment.onQuickCreating,
this.validateBranchExistanceOnInventoryCreating
);
return bus;
};
/**
* Validate branch existance on invoice creating.
* @param {ISaleInvoiceCreatingPaylaod} payload
*/
private validateBranchExistanceOnInventoryCreating = async ({
tenantId,
quickAdjustmentDTO,
}: IInventoryAdjustmentCreatingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
quickAdjustmentDTO.branchId
);
};
}

View File

@@ -0,0 +1,56 @@
import { Inject, Service } from 'typedi';
import events from '@/subscribers/events';
import {
ISaleInvoiceCreatingPaylaod,
ISaleInvoiceEditingPayload,
} from '@/interfaces';
import { ValidateBranchExistance } from '../../Integrations/ValidateBranchExistance';
@Service()
export class InvoiceBranchValidateSubscriber {
@Inject()
private validateBranchExistance: ValidateBranchExistance;
/**
* Attaches events with handlers.
*/
public attach = (bus) => {
bus.subscribe(
events.saleInvoice.onCreating,
this.validateBranchExistanceOnInvoiceCreating
);
bus.subscribe(
events.saleInvoice.onEditing,
this.validateBranchExistanceOnInvoiceEditing
);
return bus;
};
/**
* Validate branch existance on invoice creating.
* @param {ISaleInvoiceCreatingPaylaod} payload
*/
private validateBranchExistanceOnInvoiceCreating = async ({
tenantId,
saleInvoiceDTO,
}: ISaleInvoiceCreatingPaylaod) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
saleInvoiceDTO.branchId
);
};
/**
* Validate branch existance once invoice editing.
* @param {ISaleInvoiceEditingPayload} payload
*/
private validateBranchExistanceOnInvoiceEditing = async ({
saleInvoiceDTO,
tenantId,
}: ISaleInvoiceEditingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
saleInvoiceDTO.branchId
);
};
}

View File

@@ -0,0 +1,76 @@
import { Inject, Service } from 'typedi';
import events from '@/subscribers/events';
import {
Features,
IManualJournalCreatingPayload,
IManualJournalEditingPayload,
} from '@/interfaces';
import { ManualJournalBranchesValidator } from '../../Integrations/ManualJournals/ManualJournalsBranchesValidator';
import { FeaturesManager } from '@/services/Features/FeaturesManager';
@Service()
export class ManualJournalBranchValidateSubscriber {
@Inject()
private validateManualJournalBranch: ManualJournalBranchesValidator;
@Inject()
private featuresManager: FeaturesManager;
/**
* Attaches events with handlers.
*/
public attach = (bus) => {
bus.subscribe(
events.manualJournals.onCreating,
this.validateBranchExistanceOnBillCreating
);
bus.subscribe(
events.manualJournals.onEditing,
this.validateBranchExistanceOnBillEditing
);
return bus;
};
/**
* Validate branch existance on estimate creating.
* @param {IManualJournalCreatingPayload} payload
*/
private validateBranchExistanceOnBillCreating = async ({
manualJournalDTO,
tenantId,
}: IManualJournalCreatingPayload) => {
// Detarmines whether the multi-branches is accessible by tenant.
const isAccessible = await this.featuresManager.accessible(
tenantId,
Features.BRANCHES
);
// Can't continue if the multi-branches feature is inactive.
if (!isAccessible) return;
// Validates the entries whether have branch id.
await this.validateManualJournalBranch.validateEntriesHasBranchId(
manualJournalDTO
);
};
/**
* Validate branch existance once estimate editing.
* @param {ISaleEstimateEditingPayload} payload
*/
private validateBranchExistanceOnBillEditing = async ({
tenantId,
manualJournalDTO,
}: IManualJournalEditingPayload) => {
// Detarmines whether the multi-branches is accessible by tenant.
const isAccessible = await this.featuresManager.accessible(
tenantId,
Features.BRANCHES
);
// Can't continue if the multi-branches feature is inactive.
if (!isAccessible) return;
await this.validateManualJournalBranch.validateEntriesHasBranchId(
manualJournalDTO
);
};
}

View File

@@ -0,0 +1,56 @@
import { Inject, Service } from 'typedi';
import events from '@/subscribers/events';
import {
IBillPaymentCreatingPayload,
IBillPaymentEditingPayload,
} from '@/interfaces';
import { ValidateBranchExistance } from '../../Integrations/ValidateBranchExistance';
@Service()
export class PaymentMadeBranchValidateSubscriber {
@Inject()
private validateBranchExistance: ValidateBranchExistance;
/**
* Attaches events with handlers.
*/
public attach = (bus) => {
bus.subscribe(
events.billPayment.onCreating,
this.validateBranchExistanceOnPaymentCreating
);
bus.subscribe(
events.billPayment.onEditing,
this.validateBranchExistanceOnPaymentEditing
);
return bus;
};
/**
* Validate branch existance on estimate creating.
* @param {ISaleEstimateCreatedPayload} payload
*/
private validateBranchExistanceOnPaymentCreating = async ({
tenantId,
billPaymentDTO,
}: IBillPaymentCreatingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
billPaymentDTO.branchId
);
};
/**
* Validate branch existance once estimate editing.
* @param {ISaleEstimateEditingPayload} payload
*/
private validateBranchExistanceOnPaymentEditing = async ({
billPaymentDTO,
tenantId,
}: IBillPaymentEditingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
billPaymentDTO.branchId
);
};
}

View File

@@ -0,0 +1,56 @@
import { Inject, Service } from 'typedi';
import events from '@/subscribers/events';
import {
IPaymentReceiveCreatingPayload,
IPaymentReceiveEditingPayload,
} from '@/interfaces';
import { ValidateBranchExistance } from '../../Integrations/ValidateBranchExistance';
@Service()
export class PaymentReceiveBranchValidateSubscriber {
@Inject()
private validateBranchExistance: ValidateBranchExistance;
/**
* Attaches events with handlers.
*/
public attach = (bus) => {
bus.subscribe(
events.paymentReceive.onCreating,
this.validateBranchExistanceOnPaymentCreating
);
bus.subscribe(
events.paymentReceive.onEditing,
this.validateBranchExistanceOnPaymentEditing
);
return bus;
};
/**
* Validate branch existance on estimate creating.
* @param {IPaymentReceiveCreatingPayload} payload
*/
private validateBranchExistanceOnPaymentCreating = async ({
tenantId,
paymentReceiveDTO,
}: IPaymentReceiveCreatingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
paymentReceiveDTO.branchId
);
};
/**
* Validate branch existance once estimate editing.
* @param {IPaymentReceiveEditingPayload} payload
*/
private validateBranchExistanceOnPaymentEditing = async ({
paymentReceiveDTO,
tenantId,
}: IPaymentReceiveEditingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
paymentReceiveDTO.branchId
);
};
}

View File

@@ -0,0 +1,56 @@
import { Inject, Service } from 'typedi';
import events from '@/subscribers/events';
import {
ISaleEstimateCreatingPayload,
ISaleEstimateEditingPayload,
} from '@/interfaces';
import { ValidateBranchExistance } from '../../Integrations/ValidateBranchExistance';
@Service()
export class SaleEstimateBranchValidateSubscriber {
@Inject()
private validateBranchExistance: ValidateBranchExistance;
/**
* Attaches events with handlers.
*/
public attach = (bus) => {
bus.subscribe(
events.saleEstimate.onCreating,
this.validateBranchExistanceOnEstimateCreating
);
bus.subscribe(
events.saleEstimate.onEditing,
this.validateBranchExistanceOnEstimateEditing
);
return bus;
};
/**
* Validate branch existance on estimate creating.
* @param {ISaleEstimateCreatedPayload} payload
*/
private validateBranchExistanceOnEstimateCreating = async ({
tenantId,
estimateDTO,
}: ISaleEstimateCreatingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
estimateDTO.branchId
);
};
/**
* Validate branch existance once estimate editing.
* @param {ISaleEstimateEditingPayload} payload
*/
private validateBranchExistanceOnEstimateEditing = async ({
estimateDTO,
tenantId,
}: ISaleEstimateEditingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
estimateDTO.branchId
);
};
}

View File

@@ -0,0 +1,56 @@
import { Inject, Service } from 'typedi';
import events from '@/subscribers/events';
import {
ISaleReceiptCreatingPayload,
ISaleReceiptEditingPayload,
} from '@/interfaces';
import { ValidateBranchExistance } from '../../Integrations/ValidateBranchExistance';
@Service()
export class SaleReceiptBranchValidateSubscriber {
@Inject()
private validateBranchExistance: ValidateBranchExistance;
/**
* Attaches events with handlers.
*/
public attach = (bus) => {
bus.subscribe(
events.saleReceipt.onCreating,
this.validateBranchExistanceOnInvoiceCreating
);
bus.subscribe(
events.saleReceipt.onEditing,
this.validateBranchExistanceOnInvoiceEditing
);
return bus;
};
/**
* Validate branch existance on estimate creating.
* @param {ISaleReceiptCreatingPayload} payload
*/
private validateBranchExistanceOnInvoiceCreating = async ({
tenantId,
saleReceiptDTO,
}: ISaleReceiptCreatingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
saleReceiptDTO.branchId
);
};
/**
* Validate branch existance once estimate editing.
* @param {ISaleReceiptEditingPayload} payload
*/
private validateBranchExistanceOnInvoiceEditing = async ({
saleReceiptDTO,
tenantId,
}: ISaleReceiptEditingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
saleReceiptDTO.branchId
);
};
}

View File

@@ -0,0 +1,56 @@
import { Inject, Service } from 'typedi';
import events from '@/subscribers/events';
import {
IVendorCreditCreatingPayload,
IVendorCreditEditingPayload,
} from '@/interfaces';
import { ValidateBranchExistance } from '../../Integrations/ValidateBranchExistance';
@Service()
export class VendorCreditBranchValidateSubscriber {
@Inject()
private validateBranchExistance: ValidateBranchExistance;
/**
* Attaches events with handlers.
*/
public attach = (bus) => {
bus.subscribe(
events.vendorCredit.onCreating,
this.validateBranchExistanceOnCreditCreating
);
bus.subscribe(
events.vendorCredit.onEditing,
this.validateBranchExistanceOnCreditEditing
);
return bus;
};
/**
* Validate branch existance on estimate creating.
* @param {ISaleEstimateCreatedPayload} payload
*/
private validateBranchExistanceOnCreditCreating = async ({
tenantId,
vendorCreditCreateDTO,
}: IVendorCreditCreatingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
vendorCreditCreateDTO.branchId
);
};
/**
* Validate branch existance once estimate editing.
* @param {ISaleEstimateEditingPayload} payload
*/
private validateBranchExistanceOnCreditEditing = async ({
vendorCreditDTO,
tenantId,
}: IVendorCreditEditingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
vendorCreditDTO.branchId
);
};
}

View File

@@ -0,0 +1,35 @@
import { Inject, Service } from 'typedi';
import events from '@/subscribers/events';
import { IRefundVendorCreditCreatingPayload } from '@/interfaces';
import { ValidateBranchExistance } from '../../Integrations/ValidateBranchExistance';
@Service()
export class VendorCreditRefundBranchValidateSubscriber {
@Inject()
private validateBranchExistance: ValidateBranchExistance;
/**
* Attaches events with handlers.
*/
public attach = (bus) => {
bus.subscribe(
events.vendorCredit.onRefundCreating,
this.validateBranchExistanceOnCreditRefundCreating
);
return bus;
};
/**
* Validate branch existance on refund credit note creating.
* @param {IRefundVendorCreditCreatingPayload} payload
*/
private validateBranchExistanceOnCreditRefundCreating = async ({
tenantId,
refundVendorCreditDTO,
}: IRefundVendorCreditCreatingPayload) => {
await this.validateBranchExistance.validateTransactionBranchWhenActive(
tenantId,
refundVendorCreditDTO.branchId
);
};
}

View File

@@ -0,0 +1,15 @@
export * from './BillBranchSubscriber';
export * from './CashflowBranchDTOValidatorSubscriber';
export * from './CreditNoteBranchesSubscriber';
export * from './CreditNoteRefundBranchSubscriber';
export * from './ExpenseBranchSubscriber';
export * from './ManualJournalBranchSubscriber';
export * from './PaymentMadeBranchSubscriber';
export * from './PaymentReceiveBranchSubscriber';
export * from './SaleEstimateMultiBranchesSubscriber';
export * from './SaleReceiptBranchesSubscriber';
export * from './VendorCreditBranchSubscriber';
export * from './VendorCreditRefundBranchSubscriber';
export * from './InvoiceBranchValidatorSubscriber';
export * from './ContactOpeningBalanceBranchSubscriber';
export * from './InventoryAdjustmentBranchValidatorSubscriber';