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,51 @@
import {
IAgingPeriod,
IAgingPeriodTotal,
IAgingAmount
} from './AgingReport';
import {
INumberFormatQuery
} from './FinancialStatements';
export interface IAPAgingSummaryQuery {
asDate: Date | string;
agingDaysBefore: number;
agingPeriods: number;
numberFormat: INumberFormatQuery;
vendorsIds: number[];
noneZero: boolean;
branchesIds?: number[]
}
export interface IAPAgingSummaryVendor {
vendorName: string,
current: IAgingAmount,
aging: IAgingPeriodTotal[],
total: IAgingAmount,
};
export interface IAPAgingSummaryTotal {
current: IAgingAmount,
aging: IAgingPeriodTotal[],
total: IAgingAmount,
};
export interface IAPAgingSummaryData {
vendors: IAPAgingSummaryVendor[],
total: IAPAgingSummaryTotal,
};
export type IAPAgingSummaryColumns = IAgingPeriod[];
export interface IARAgingSummaryMeta {
baseCurrency: string,
organizationName: string,
}
export interface IAPAgingSummaryMeta {
baseCurrency: string,
organizationName: string,
}

View File

@@ -0,0 +1,37 @@
import { IAgingPeriod, IAgingPeriodTotal, IAgingAmount } from './AgingReport';
import { INumberFormatQuery } from './FinancialStatements';
export interface IARAgingSummaryQuery {
asDate: Date | string;
agingDaysBefore: number;
agingPeriods: number;
numberFormat: INumberFormatQuery;
customersIds: number[];
branchesIds: number[];
noneZero: boolean;
}
export interface IARAgingSummaryCustomer {
customerName: string;
current: IAgingAmount;
aging: IAgingPeriodTotal[];
total: IAgingAmount;
}
export interface IARAgingSummaryTotal {
current: IAgingAmount;
aging: IAgingPeriodTotal[];
total: IAgingAmount;
}
export interface IARAgingSummaryData {
customers: IARAgingSummaryCustomer[];
total: IARAgingSummaryTotal;
}
export type IARAgingSummaryColumns = IAgingPeriod[];
export interface IARAgingSummaryMeta {
organizationName: string,
baseCurrency: string,
}

View File

@@ -0,0 +1,144 @@
import { Knex } from 'knex';
import { IDynamicListFilterDTO } from '@/interfaces/DynamicFilter';
export interface IAccountDTO {
name: string;
code: string;
description: string;
accountType: string;
parentAccountId: number;
active: boolean;
}
export interface IAccountCreateDTO extends IAccountDTO {
currencyCode?: string;
}
export interface IAccountEditDTO extends IAccountDTO {}
export interface IAccount {
id: number;
name: string;
slug: string;
code: string;
index: number;
description: string;
accountType: string;
parentAccountId: number;
active: boolean;
predefined: boolean;
amount: number;
currencyCode: string;
transactions?: any[];
type?: any[];
accountNormal: string;
accountParentType: string;
}
export enum AccountNormal {
DEBIT = 'debit',
CREDIT = 'credit',
}
export interface IAccountsTransactionsFilter {
accountId?: number;
}
export interface IAccountTransaction {
id?: number;
credit: number;
debit: number;
currencyCode: string;
exchangeRate: number;
accountId: number;
contactId?: number | null;
date: string | Date;
referenceType: string;
referenceId: number;
referenceNumber?: string;
transactionNumber?: string;
note?: string;
index: number;
indexGroup?: number;
costable?: boolean;
userId?: number;
itemId?: number;
branchId?: number;
projectId?: number;
account?: IAccount;
}
export interface IAccountResponse extends IAccount {}
export interface IAccountsFilter extends IDynamicListFilterDTO {
stringifiedFilterRoles?: string;
onlyInactive: boolean;
}
export interface IAccountType {
label: string;
key: string;
normal: string;
rootType: string;
childType: string;
balanceSheet: boolean;
incomeSheet: boolean;
}
export interface IAccountsTypesService {
getAccountsTypes(tenantId: number): Promise<IAccountType>;
}
export interface IAccountEventCreatingPayload {
tenantId: number;
accountDTO: any;
trx: Knex.Transaction;
}
export interface IAccountEventCreatedPayload {
tenantId: number;
account: IAccount;
accountId: number;
trx: Knex.Transaction;
}
export interface IAccountEventEditedPayload {
tenantId: number;
account: IAccount;
oldAccount: IAccount;
trx: Knex.Transaction;
}
export interface IAccountEventDeletedPayload {
tenantId: number;
accountId: number;
oldAccount: IAccount;
trx: Knex.Transaction;
}
export interface IAccountEventDeletePayload {
trx: Knex.Transaction;
oldAccount: IAccount;
tenantId: number;
}
export interface IAccountEventActivatedPayload {
tenantId: number;
accountId: number;
trx: Knex.Transaction;
}
export enum AccountAction {
CREATE = 'Create',
EDIT = 'Edit',
DELETE = 'Delete',
VIEW = 'View',
TransactionsLocking = 'TransactionsLocking',
}

View File

@@ -0,0 +1,22 @@
export interface IAgingPeriodTotal extends IAgingPeriod {
total: IAgingAmount;
};
export interface IAgingAmount {
amount: number;
formattedAmount: string;
currencyCode: string;
}
export interface IAgingPeriod {
fromPeriod: Date | string;
toPeriod: Date | string;
beforeDays: number;
toDays: number;
}
export interface IAgingSummaryContact {
current: IAgingAmount;
aging: IAgingPeriodTotal[];
total: IAgingAmount;
}

View File

@@ -0,0 +1,29 @@
import { ISystemUser } from './User';
import { ITenant } from './Tenancy';
export interface IRegisterDTO {
firstName: string,
lastName: string,
email: string,
password: string,
organizationName: string,
};
export interface ILoginDTO {
crediential: string,
password: string,
};
export interface IPasswordReset {
id: number,
email: string,
token: string,
createdAt: Date,
};
export interface IAuthenticationService {
signIn(emailOrPhone: string, password: string): Promise<{ user: ISystemUser, token: string, tenant: ITenant }>;
register(registerDTO: IRegisterDTO): Promise<ISystemUser>;
sendResetPassword(email: string): Promise<IPasswordReset>;
resetPassword(token: string, password: string): Promise<void>;
}

View File

@@ -0,0 +1,192 @@
import {
INumberFormatQuery,
IFormatNumberSettings,
IFinancialSheetBranchesQuery,
} from './FinancialStatements';
// Balance sheet schema nodes types.
export enum BALANCE_SHEET_SCHEMA_NODE_TYPE {
AGGREGATE = 'AGGREGATE',
ACCOUNTS = 'ACCOUNTS',
ACCOUNT = 'ACCOUNT',
}
export enum BALANCE_SHEET_NODE_TYPE {
AGGREGATE = 'AGGREGATE',
ACCOUNTS = 'ACCOUNTS',
ACCOUNT = 'ACCOUNT',
}
// Balance sheet schema nodes ids.
export enum BALANCE_SHEET_SCHEMA_NODE_ID {
ASSETS = 'ASSETS',
CURRENT_ASSETS = 'CURRENT_ASSETS',
CASH_EQUIVALENTS = 'CASH_EQUIVALENTS',
ACCOUNTS_RECEIVABLE = 'ACCOUNTS_RECEIVABLE',
NON_CURRENT_ASSET = 'NON_CURRENT_ASSET',
FIXED_ASSET = 'FIXED_ASSET',
OTHER_CURRENT_ASSET = 'OTHER_CURRENT_ASSET',
INVENTORY = 'INVENTORY',
LIABILITY_EQUITY = 'LIABILITY_EQUITY',
LIABILITY = 'LIABILITY',
CURRENT_LIABILITY = 'CURRENT_LIABILITY',
LOGN_TERM_LIABILITY = 'LOGN_TERM_LIABILITY',
NON_CURRENT_LIABILITY = 'NON_CURRENT_LIABILITY',
EQUITY = 'EQUITY',
}
// Balance sheet query.
export interface IBalanceSheetQuery extends IFinancialSheetBranchesQuery {
displayColumnsType: 'total' | 'date_periods';
displayColumnsBy: string;
fromDate: Date;
toDate: Date;
numberFormat: INumberFormatQuery;
noneTransactions: boolean;
noneZero: boolean;
basis: 'cash' | 'accural';
accountIds: number[];
percentageOfColumn: boolean;
percentageOfRow: boolean;
previousPeriod: boolean;
previousPeriodAmountChange: boolean;
previousPeriodPercentageChange: boolean;
previousYear: boolean;
previousYearAmountChange: boolean;
previousYearPercentageChange: boolean;
}
// Balance sheet meta.
export interface IBalanceSheetMeta {
isCostComputeRunning: boolean;
organizationName: string;
baseCurrency: string;
}
export interface IBalanceSheetFormatNumberSettings
extends IFormatNumberSettings {
type: string;
}
// Balance sheet service.
export interface IBalanceSheetStatementService {
balanceSheet(
tenantId: number,
query: IBalanceSheetQuery
): Promise<IBalanceSheetDOO>;
}
export type IBalanceSheetStatementData = IBalanceSheetDataNode[];
export interface IBalanceSheetDOO {
query: IBalanceSheetQuery;
data: IBalanceSheetStatementData;
meta: IBalanceSheetMeta;
}
export interface IBalanceSheetCommonNode {
total: IBalanceSheetTotal;
horizontalTotals?: IBalanceSheetTotal[];
percentageRow?: IBalanceSheetPercentageAmount;
percentageColumn?: IBalanceSheetPercentageAmount;
previousPeriod?: IBalanceSheetTotal;
previousPeriodChange?: IBalanceSheetTotal;
previousPeriodPercentage?: IBalanceSheetPercentageAmount;
previousYear?: IBalanceSheetTotal;
previousYearChange?: IBalanceSheetTotal;
previousYearPercentage?: IBalanceSheetPercentageAmount;
}
export interface IBalanceSheetAggregateNode extends IBalanceSheetCommonNode {
id: string;
name: string;
nodeType: BALANCE_SHEET_SCHEMA_NODE_TYPE.AGGREGATE;
children?: (IBalanceSheetAggregateNode | IBalanceSheetAccountNode)[];
}
export interface IBalanceSheetTotal {
amount: number;
formattedAmount: string;
currencyCode: string;
date?: string | Date;
}
export interface IBalanceSheetAccountNode extends IBalanceSheetCommonNode {
id: number;
index: number;
name: string;
code: string;
parentAccountId?: number;
nodeType: BALANCE_SHEET_SCHEMA_NODE_TYPE.ACCOUNT;
children?: IBalanceSheetAccountNode[];
}
export type IBalanceSheetDataNode = IBalanceSheetAggregateNode;
export interface IBalanceSheetPercentageAmount {
amount: number;
formattedAmount: string;
}
export interface IBalanceSheetSchemaAggregateNode {
name: string;
id: string;
type: BALANCE_SHEET_SCHEMA_NODE_TYPE;
children: IBalanceSheetSchemaNode[];
alwaysShow: boolean;
}
export interface IBalanceSheetSchemaAccountNode {
name: string;
id: string;
type: BALANCE_SHEET_SCHEMA_NODE_TYPE;
accountsTypes: string[];
}
export type IBalanceSheetSchemaNode =
| IBalanceSheetSchemaAccountNode
| IBalanceSheetSchemaAggregateNode;
export interface IBalanceSheetDatePeriods {
assocAccountNodeDatePeriods(node): any;
initDateRangeCollection(): void;
}
export interface IBalanceSheetComparsions {
assocPreviousYearAccountNode(node);
hasPreviousPeriod(): boolean;
hasPreviousYear(): boolean;
assocPreviousPeriodAccountNode(node);
}
export interface IBalanceSheetTotalPeriod extends IFinancialSheetTotalPeriod {
percentageRow?: IBalanceSheetPercentageAmount;
percentageColumn?: IBalanceSheetPercentageAmount;
}
export interface IFinancialSheetTotalPeriod {
fromDate: any;
toDate: any;
total: any;
}
export enum IFinancialDatePeriodsUnit {
Day = 'day',
Month = 'month',
Year = 'year',
}
export enum IAccountTransactionsGroupBy {
Quarter = 'quarter',
Year = 'year',
Day = 'day',
Month = 'month',
Week = 'week',
}

View File

@@ -0,0 +1,140 @@
import { Knex } from 'knex';
import { IDynamicListFilterDTO } from './DynamicFilter';
import { IItemEntry, IItemEntryDTO } from './ItemEntry';
import { IBillLandedCost } from './LandedCost';
export interface IBillDTO {
vendorId: number;
billNumber: string;
billDate: Date;
dueDate: Date;
referenceNo: string;
status: string;
note: string;
amount: number;
paymentAmount: number;
exchangeRate?: number;
open: boolean;
entries: IItemEntryDTO[];
branchId?: number;
warehouseId?: number;
projectId?: number;
}
export interface IBillEditDTO {
vendorId: number;
billNumber: string;
billDate: Date;
dueDate: Date;
referenceNo: string;
status: string;
note: string;
amount: number;
paymentAmount: number;
open: boolean;
entries: IItemEntryDTO[];
branchId?: number;
warehouseId?: number;
projectId?: number;
}
export interface IBill {
id?: number;
vendorId: number;
billNumber: string;
billDate: Date;
dueDate: Date;
referenceNo: string;
status: string;
note: string;
amount: number;
allocatedCostAmount: number;
landedCostAmount: number;
unallocatedCostAmount: number;
paymentAmount: number;
currencyCode: string;
exchangeRate: number;
dueAmount: number;
overdueDays: number;
billableAmount: number;
invoicedAmount: number;
openedAt: Date | string;
entries: IItemEntry[];
createdAt: Date;
updateAt: Date;
isOpen: boolean;
userId?: number;
branchId?: number;
projectId?: number;
localAmount?: number;
locatedLandedCosts?: IBillLandedCost[];
}
export interface IBillsFilter extends IDynamicListFilterDTO {
stringifiedFilterRoles?: string;
page: number;
pageSize: number;
}
export interface IBillsService {
validateVendorHasNoBills(tenantId: number, vendorId: number): Promise<void>;
}
export interface IBillCreatedPayload {
tenantId: number;
bill: IBill;
billId: number;
trx: Knex.Transaction;
}
export interface IBillCreatingPayload{
tenantId: number;
billDTO: IBillDTO;
trx: Knex.Transaction;
}
export interface IBillEditingPayload {
tenantId: number;
oldBill: IBill;
billDTO: IBillEditDTO;
trx: Knex.Transaction;
}
export interface IBillEditedPayload {
tenantId: number;
billId: number;
oldBill: IBill;
bill: IBill;
trx: Knex.Transaction;
}
export interface IBIllEventDeletedPayload {
tenantId: number;
billId: number;
oldBill: IBill;
trx: Knex.Transaction;
}
export interface IBillEventDeletingPayload {
tenantId: number;
oldBill: IBill;
trx: Knex.Transaction;
}
export enum BillAction {
Create = 'Create',
Edit = 'Edit',
Delete = 'Delete',
View = 'View',
NotifyBySms = 'NotifyBySms',
}

View File

@@ -0,0 +1,117 @@
import { Knex } from 'knex';
import { IBill } from './Bill';
export interface IBillPaymentEntry {
id?: number;
billPaymentId: number;
billId: number;
paymentAmount: number;
bill?: IBill;
}
export interface IBillPayment {
id?: number;
vendorId: number;
amount: number;
currencyCode: string;
reference: string;
paymentAccountId: number;
paymentNumber: string;
paymentDate: Date;
exchangeRate: number | null;
userId: number;
entries: IBillPaymentEntry[];
statement: string;
createdAt: Date;
updatedAt: Date;
localAmount?: number;
branchId?: number;
}
export interface IBillPaymentEntryDTO {
billId: number;
paymentAmount: number;
}
export interface IBillPaymentDTO {
vendorId: number;
paymentAccountId: number;
paymentNumber?: string;
paymentDate: Date;
exchangeRate?: number;
statement: string;
reference: string;
entries: IBillPaymentEntryDTO[];
branchId?: number;
}
export interface IBillReceivePageEntry {
billId: number;
entryType: string;
billNo: string;
dueAmount: number;
amount: number;
totalPaymentAmount: number;
paymentAmount: number;
currencyCode: string;
date: Date | string;
}
export interface IBillPaymentsService {
validateVendorHasNoPayments(tenantId: number, vendorId): Promise<void>;
}
export interface IBillPaymentEventCreatedPayload {
tenantId: number;
billPayment: IBillPayment;
billPaymentId: number;
trx: Knex.Transaction;
}
export interface IBillPaymentCreatingPayload {
tenantId: number;
billPaymentDTO: IBillPaymentDTO;
trx: Knex.Transaction;
}
export interface IBillPaymentEditingPayload {
tenantId: number;
billPaymentDTO: IBillPaymentDTO;
oldBillPayment: IBillPayment;
trx: Knex.Transaction;
}
export interface IBillPaymentEventEditedPayload {
tenantId: number;
billPaymentId: number;
billPayment: IBillPayment;
oldBillPayment: IBillPayment;
trx: Knex.Transaction;
}
export interface IBillPaymentEventDeletedPayload {
tenantId: number;
billPaymentId: number;
oldBillPayment: IBillPayment;
trx: Knex.Transaction;
}
export interface IBillPaymentDeletingPayload {
tenantId: number;
oldBillPayment: IBillPayment;
trx: Knex.Transaction;
}
export interface IBillPaymentPublishingPayload {
tenantId: number;
oldBillPayment: IBillPayment;
trx: Knex.Transaction;
}
export enum IPaymentMadeAction {
Create = 'Create',
Edit = 'Edit',
Delete = 'Delete',
View = 'View',
}

View File

@@ -0,0 +1,50 @@
import { Knex } from 'knex';
export interface IBranch {
id?: number;
}
export interface ICreateBranchDTO {
name: string;
code: string;
primary?: boolean;
}
export interface IEditBranchDTO {
code: string;
}
export interface IBranchCreatePayload {
tenantId: number;
createBranchDTO: ICreateBranchDTO;
trx: Knex.Transaction;
}
export interface IBranchCreatedPayload {}
export interface IBranchEditPayload {}
export interface IBranchEditedPayload {}
export interface IBranchDeletePayload {}
export interface IBranchDeletedPayload {}
export interface IBranchesActivatePayload {
tenantId: number;
trx: Knex.Transaction;
}
export interface IBranchesActivatedPayload {
tenantId: number;
primaryBranch: IBranch;
trx: Knex.Transaction;
}
export interface IBranchMarkAsPrimaryPayload {
tenantId: number;
oldBranch: IBranch;
trx: Knex.Transaction;
}
export interface IBranchMarkedAsPrimaryPayload {
tenantId: number;
oldBranch: IBranch;
markedBranch: IBranch;
trx: Knex.Transaction;
}

View File

@@ -0,0 +1,227 @@
import { INumberFormatQuery } from './FinancialStatements';
import { IAccount } from './Account';
import { ILedger } from './Ledger';
import { ITableRow } from './Table';
export interface ICashFlowStatementQuery {
fromDate: Date | string;
toDate: Date | string;
displayColumnsBy: string;
displayColumnsType: string;
noneZero: boolean;
noneTransactions: boolean;
numberFormat: INumberFormatQuery;
basis: string;
branchesIds?: number[];
}
export interface ICashFlowStatementTotal {
amount: number;
formattedAmount: string;
currencyCode: string;
}
export interface ICashFlowStatementTotalPeriod {
fromDate: Date;
toDate: Date;
total: ICashFlowStatementTotal;
}
export interface ICashFlowStatementCommonSection {
id: string;
label: string;
total: ICashFlowStatementTotal;
footerLabel?: string;
}
export interface ICashFlowStatementAccountMeta {
id: number;
label: string;
code: string;
total: ICashFlowStatementTotal;
accountType: string;
adjusmentType: string;
sectionType: ICashFlowStatementSectionType.ACCOUNT;
}
export enum ICashFlowStatementSectionType {
REGULAR = 'REGULAR',
AGGREGATE = 'AGGREGATE',
NET_INCOME = 'NET_INCOME',
ACCOUNT = 'ACCOUNT',
ACCOUNTS = 'ACCOUNTS',
TOTAL = 'TOTAL',
CASH_AT_BEGINNING = 'CASH_AT_BEGINNING',
}
export interface ICashFlowStatementAccountSection
extends ICashFlowStatementCommonSection {
sectionType: ICashFlowStatementSectionType.ACCOUNTS;
children: ICashFlowStatementAccountMeta[];
total: ICashFlowStatementTotal;
}
export interface ICashFlowStatementNetIncomeSection
extends ICashFlowStatementCommonSection {
sectionType: ICashFlowStatementSectionType.NET_INCOME;
}
export interface ICashFlowStatementTotalSection
extends ICashFlowStatementCommonSection {
sectionType: ICashFlowStatementSectionType.TOTAL;
}
export interface ICashFlowStatementAggregateSection
extends ICashFlowStatementCommonSection {
sectionType: ICashFlowStatementSectionType.AGGREGATE;
}
export interface ICashFlowCashBeginningNode
extends ICashFlowStatementCommonSection {
sectionType: ICashFlowStatementSectionType.CASH_AT_BEGINNING;
}
export type ICashFlowStatementSection =
| ICashFlowStatementAccountSection
| ICashFlowStatementNetIncomeSection
| ICashFlowStatementTotalSection
| ICashFlowStatementCommonSection;
export interface ICashFlowStatementColumn {}
export interface ICashFlowStatementMeta {
isCostComputeRunning: boolean;
organizationName: string;
baseCurrency: string;
}
export interface ICashFlowStatementDOO {
data: ICashFlowStatementData;
meta: ICashFlowStatementMeta;
query: ICashFlowStatementQuery;
}
export interface ICashFlowStatementService {
cashFlow(
tenantId: number,
query: ICashFlowStatementQuery
): Promise<ICashFlowStatementDOO>;
}
// CASH FLOW SCHEMA TYPES.
// -----------------------------
export interface ICashFlowSchemaCommonSection {
id: string;
label: string;
children: ICashFlowSchemaSection[];
footerLabel?: string;
}
export enum CASH_FLOW_ACCOUNT_RELATION {
MINES = 'mines',
PLUS = 'plus',
}
export enum CASH_FLOW_SECTION_ID {
NET_INCOME = 'NET_INCOME',
OPERATING = 'OPERATING',
OPERATING_ACCOUNTS = 'OPERATING_ACCOUNTS',
INVESTMENT = 'INVESTMENT',
FINANCIAL = 'FINANCIAL',
NET_OPERATING = 'NET_OPERATING',
NET_INVESTMENT = 'NET_INVESTMENT',
NET_FINANCIAL = 'NET_FINANCIAL',
CASH_BEGINNING_PERIOD = 'CASH_BEGINNING_PERIOD',
CASH_END_PERIOD = 'CASH_END_PERIOD',
NET_CASH_INCREASE = 'NET_CASH_INCREASE',
}
export interface ICashFlowSchemaAccountsSection
extends ICashFlowSchemaCommonSection {
sectionType: ICashFlowStatementSectionType.ACCOUNT;
accountsRelations: ICashFlowSchemaAccountRelation[];
}
export interface ICashFlowSchemaTotalSection
extends ICashFlowStatementCommonSection {
sectionType: ICashFlowStatementSectionType.TOTAL;
equation: string;
}
export type ICashFlowSchemaSection =
| ICashFlowSchemaAccountsSection
| ICashFlowSchemaTotalSection
| ICashFlowSchemaCommonSection;
export type ICashFlowStatementData = ICashFlowSchemaSection[];
export interface ICashFlowSchemaAccountRelation {
type: string;
direction: CASH_FLOW_ACCOUNT_RELATION.PLUS;
}
export interface ICashFlowSchemaSectionAccounts
extends ICashFlowStatementCommonSection {
type: ICashFlowStatementSectionType.ACCOUNT;
accountsRelations: ICashFlowSchemaAccountRelation[];
}
export interface ICashFlowSchemaSectionTotal {
type: ICashFlowStatementSectionType.TOTAL;
totalEquation: string;
}
export interface ICashFlowDatePeriod {
fromDate: ICashFlowDate;
toDate: ICashFlowDate;
total: ICashFlowStatementTotal;
}
export interface ICashFlowDate {
formattedDate: string;
date: Date;
}
export interface ICashFlowStatement {
/**
* Constructor method.
* @constructor
*/
constructor(
accounts: IAccount[],
ledger: ILedger,
cashLedger: ILedger,
netIncomeLedger: ILedger,
query: ICashFlowStatementQuery,
baseCurrency: string
): void;
reportData(): ICashFlowStatementData;
}
export interface ICashFlowTable {
constructor(reportStatement: ICashFlowStatement): void;
tableRows(): ITableRow[];
}
export interface IDateRange {
fromDate: Date;
toDate: Date;
}
export interface ICashflowTransactionSchema {
amount: number;
date: Date;
referenceNo?: string | null;
transactionNumber: string;
transactionType: string;
creditAccountId: number;
cashflowAccountId: number;
userId: number;
publishedAt?: Date | null;
branchId?: number;
}
export interface ICashflowTransactionInput extends ICashflowTransactionSchema {}

View File

@@ -0,0 +1,128 @@
import { Knex } from 'knex';
import { IAccount } from './Account';
export interface ICashflowAccountTransactionsFilter {
page: number;
pageSize: number;
}
export interface ICashflowAccountsFilter {
inactiveMode: boolean;
stringifiedFilterRoles?: string;
sortOrder: string;
columnSortBy: string;
}
export interface ICashflowAccount {
id: number;
name: string;
balance: number;
formattedBalance: string;
accountType: string;
}
interface ICashflowCommandLineDTO {
creditAccountId: number;
cashflowAccountId: number;
amount: number;
index: number;
}
export interface ICashflowCommandDTO {
date: Date;
transactionNumber: string;
referenceNo: string;
transactionType: string;
description: string;
amount: number;
exchangeRate: number;
currencyCode: string;
creditAccountId: number;
cashflowAccountId: number;
publish: boolean;
branchId?: number;
}
export interface ICashflowNewCommandDTO extends ICashflowCommandDTO {}
export interface ICashflowTransaction {
id?: number;
date: Date;
referenceNo: string;
description: string;
transactionType: string;
transactionNumber: string;
amount: number;
localAmount?: number;
currencyCode: string;
exchangeRate: number;
publishedAt?: Date | null;
userId: number;
entries: ICashflowTransactionLine[];
creditAccountId: number;
cashflowAccountId: number;
creditAccount?: IAccount;
cashflowAccount?: IAccount;
branchId?: number;
isPublished: boolean;
isCashDebit?: boolean;
isCashCredit?: boolean;
}
export interface ICashflowTransactionLine {
creditAccountId: number;
cashflowAccountId: number;
amount: number;
index: number;
creditAccount?: IAccount;
}
export enum CashflowDirection {
IN = 'in',
OUT = 'out',
}
export interface ICommandCashflowCreatingPayload {
tenantId: number;
trx: Knex.Transaction;
newTransactionDTO: ICashflowNewCommandDTO;
}
export interface ICommandCashflowCreatedPayload {
tenantId: number;
newTransactionDTO: ICashflowNewCommandDTO;
cashflowTransaction: ICashflowTransaction;
trx: Knex.Transaction;
}
export interface ICommandCashflowDeletingPayload {
tenantId: number;
oldCashflowTransaction: ICashflowTransaction;
trx: Knex.Transaction;
}
export interface ICommandCashflowDeletedPayload {
tenantId: number;
cashflowTransactionId: number;
oldCashflowTransaction: ICashflowTransaction;
trx: Knex.Transaction;
}
export enum CashflowAction {
Create = 'Create',
Delete = 'Delete',
View = 'View',
}

View File

@@ -0,0 +1,391 @@
import { ISystemUser } from '@/interfaces';
import { Knex } from 'knex';
import { IFilterRole } from './DynamicFilter';
export enum ContactService {
Customer = 'customer',
Vendor = 'vendor',
}
// ----------------------------------
export interface IContactAddress {
billingAddress1: string;
billingAddress2: string;
billingAddressCity: string;
billingAddressCountry: string;
billingAddressEmail: string;
billingAddressZipcode: string;
billingAddressPhone: string;
billingAddressState: string;
shippingAddress1: string;
shippingAddress2: string;
shippingAddressCity: string;
shippingAddressCountry: string;
shippingAddressEmail: string;
shippingAddressZipcode: string;
shippingAddressPhone: string;
shippingAddressState: string;
}
export interface IContactAddressDTO {
billingAddress1?: string;
billingAddress2?: string;
billingAddressCity?: string;
billingAddressCountry?: string;
billingAddressEmail?: string;
billingAddressZipcode?: string;
billingAddressPhone?: string;
billingAddressState?: string;
shippingAddress1?: string;
shippingAddress2?: string;
shippingAddressCity?: string;
shippingAddressCountry?: string;
shippingAddressEmail?: string;
shippingAddressZipcode?: string;
shippingAddressPhone?: string;
shippingAddressState?: string;
}
export interface IContact extends IContactAddress {
id?: number;
contactService: 'customer' | 'vendor';
contactType: string;
balance: number;
currencyCode: string;
openingBalance: number;
openingBalanceExchangeRate: number;
localOpeningBalance?: number;
openingBalanceAt: Date;
openingBalanceBranchId: number;
salutation: string;
firstName: string;
lastName: string;
companyName: string;
displayName: string;
email: string;
website: string;
workPhone: string;
personalPhone: string;
note: string;
active: boolean;
}
export interface IContactNewDTO {
contactType?: string;
currencyCode?: string;
openingBalance?: number;
openingBalanceAt?: string;
salutation?: string;
firstName?: string;
lastName?: string;
companyName?: string;
displayName: string;
website?: string;
email?: string;
workPhone?: string;
personalPhone?: string;
note?: string;
active: boolean;
}
export interface IContactEditDTO {
contactType?: string;
salutation?: string;
firstName?: string;
lastName?: string;
companyName?: string;
displayName: string;
website?: string;
email?: string;
workPhone?: string;
personalPhone?: string;
note?: string;
active: boolean;
}
// Customer Interfaces.
// ----------------------------------
export interface ICustomer extends IContact {
contactService: 'customer';
}
export interface ICustomerNewDTO extends IContactAddressDTO {
customerType: string;
currencyCode: string;
openingBalance?: number;
openingBalanceAt?: string;
openingBalanceExchangeRate?: number;
openingBalanceBranchId?: number;
salutation?: string;
firstName?: string;
lastName?: string;
companyName?: string;
displayName: string;
website?: string;
email?: string;
workPhone?: string;
personalPhone?: string;
note?: string;
active?: boolean;
}
export interface ICustomerEditDTO extends IContactAddressDTO {
customerType: string;
salutation?: string;
firstName?: string;
lastName?: string;
companyName?: string;
displayName: string;
website?: string;
email?: string;
workPhone?: string;
personalPhone?: string;
note?: string;
active?: boolean;
}
// Vendor Interfaces.
// ----------------------------------
export interface IVendor extends IContact {
contactService: 'vendor';
}
export interface IVendorNewDTO extends IContactAddressDTO {
currencyCode: string;
openingBalance?: number;
openingBalanceAt?: string;
openingBalanceExchangeRate?: number;
openingBalanceBranchId?: number;
salutation?: string;
firstName?: string;
lastName?: string;
companyName?: string;
displayName: string;
website?: string;
email?: string;
workPhone?: string;
personalPhone?: string;
note?: string;
active?: boolean;
}
export interface IVendorEditDTO extends IContactAddressDTO {
salutation?: string;
firstName?: string;
lastName?: string;
companyName?: string;
displayName?: string;
website?: string;
email?: string;
workPhone?: string;
personalPhone?: string;
note?: string;
active?: boolean;
}
export interface IVendorsFilter extends IDynamicListFilter {
stringifiedFilterRoles?: string;
page?: number;
pageSize?: number;
}
export interface ICustomersFilter extends IDynamicListFilter {
stringifiedFilterRoles?: string;
page?: number;
pageSize?: number;
}
export interface IContactsAutoCompleteFilter {
limit: number;
keyword: string;
filterRoles?: IFilterRole[];
columnSortBy: string;
sortOrder: string;
}
export interface IContactAutoCompleteItem {
displayName: string;
contactService: string;
}
export interface ICustomerEventCreatedPayload {
tenantId: number;
customerId: number;
authorizedUser: ISystemUser;
customer: ICustomer;
trx: Knex.Transaction;
}
export interface ICustomerEventCreatingPayload {
tenantId: number;
customerDTO: ICustomerNewDTO;
trx: Knex.Transaction;
}
export interface ICustomerEventEditedPayload {
customerId: number;
customer: ICustomer;
trx: Knex.Transaction;
}
export interface ICustomerEventEditingPayload {
tenantId: number;
customerDTO: ICustomerEditDTO;
customerId: number;
trx: Knex.Transaction;
}
export interface ICustomerDeletingPayload {
tenantId: number;
customerId: number;
oldCustomer: ICustomer;
}
export interface ICustomerEventDeletedPayload {
tenantId: number;
customerId: number;
oldCustomer: ICustomer;
authorizedUser: ISystemUser;
trx: Knex.Transaction;
}
export interface IVendorEventCreatingPayload {
tenantId: number;
vendorDTO: IVendorNewDTO;
trx: Knex.Transaction;
}
export interface IVendorEventCreatedPayload {
tenantId: number;
vendorId: number;
vendor: IVendor;
authorizedUser: ISystemUser;
trx: Knex.Transaction;
}
export interface IVendorEventDeletingPayload {
tenantId: number;
vendorId: number;
oldVendor: IVendor;
}
export interface IVendorEventDeletedPayload {
tenantId: number;
vendorId: number;
authorizedUser: ISystemUser;
oldVendor: IVendor;
trx: Knex.Transaction;
}
export interface IVendorEventEditingPayload {
trx: Knex.Transaction;
tenantId: number;
vendorDTO: IVendorEditDTO;
}
export interface IVendorEventEditedPayload {
tenantId: number;
vendorId: number;
vendor: IVendor;
authorizedUser: ISystemUser;
trx: Knex.Transaction;
}
export enum CustomerAction {
Create = 'Create',
Edit = 'Edit',
Delete = 'Delete',
View = 'View',
}
export enum VendorAction {
Create = 'Create',
Edit = 'Edit',
Delete = 'Delete',
View = 'View',
}
export interface ICustomerOpeningBalanceEditDTO {
openingBalance: number;
openingBalanceAt: Date | string;
openingBalanceExchangeRate: number;
openingBalanceBranchId?: number;
}
export interface ICustomerOpeningBalanceEditingPayload {
tenantId: number;
oldCustomer: ICustomer;
openingBalanceEditDTO: ICustomerOpeningBalanceEditDTO;
trx: Knex.Transaction;
}
export interface ICustomerOpeningBalanceEditedPayload {
tenantId: number;
customer: ICustomer;
oldCustomer: ICustomer;
openingBalanceEditDTO: ICustomerOpeningBalanceEditDTO;
trx: Knex.Transaction;
}
export interface IVendorOpeningBalanceEditDTO {
openingBalance: number;
openingBalanceAt: Date | string;
openingBalanceExchangeRate: number;
openingBalanceBranchId?: number;
}
export interface IVendorOpeningBalanceEditingPayload {
tenantId: number;
oldVendor: IVendor;
openingBalanceEditDTO: IVendorOpeningBalanceEditDTO;
trx: Knex.Transaction;
}
export interface IVendorOpeningBalanceEditedPayload {
tenantId: number;
vendor: IVendor;
oldVendor: IVendor;
openingBalanceEditDTO: IVendorOpeningBalanceEditDTO;
trx: Knex.Transaction;
}
export interface ICustomerActivatingPayload {
tenantId: number;
trx: Knex.Transaction,
oldCustomer: IContact;
}
export interface ICustomerActivatedPayload {
tenantId: number;
trx: Knex.Transaction,
oldCustomer: IContact;
customer: IContact;
}
export interface IVendorActivatingPayload {
tenantId: number;
trx: Knex.Transaction,
oldVendor: IContact;
}
export interface IVendorActivatedPayload {
tenantId: number;
trx: Knex.Transaction,
oldVendor: IContact;
vendor: IContact;
}

View File

@@ -0,0 +1,47 @@
import { INumberFormatQuery } from './FinancialStatements';
export interface IContactBalanceSummaryQuery {
asDate: Date;
numberFormat: INumberFormatQuery;
percentageColumn: boolean;
noneTransactions: boolean;
noneZero: boolean;
}
export interface IContactBalanceSummaryAmount {
amount: number;
formattedAmount: string;
currencyCode: string;
}
export interface IContactBalanceSummaryPercentage {
amount: number;
formattedAmount: string;
}
export interface IContactBalanceSummaryContact {
total: IContactBalanceSummaryAmount;
percentageOfColumn?: IContactBalanceSummaryPercentage;
}
export interface IContactBalanceSummaryTotal {
total: IContactBalanceSummaryAmount;
percentageOfColumn?: IContactBalanceSummaryPercentage;
}
export interface ICustomerBalanceSummaryData {
customers: IContactBalanceSummaryContact[];
total: IContactBalanceSummaryTotal;
}
export interface ICustomerBalanceSummaryStatement {
data: ICustomerBalanceSummaryData;
columns: {};
query: IContactBalanceSummaryQuery;
}
export interface ICustomerBalanceSummaryService {
customerBalanceSummary(
tenantId: number,
query: IContactBalanceSummaryQuery
): Promise<ICustomerBalanceSummaryStatement>;
}

View File

@@ -0,0 +1,255 @@
import { Knex } from 'knex';
import { IDynamicListFilter, IItemEntry, IVendorCredit } from '@/interfaces';
import { ILedgerEntry } from './Ledger';
export interface ICreditNoteEntryNewDTO {
index: number;
itemId: number;
rate: number;
quantity: number;
discount: number;
description: string;
warehouseId?: number;
}
export interface ICreditNoteNewDTO {
customerId: number;
exchangeRate?: number;
creditNoteDate: Date;
creditNoteNumber: string;
note: string;
open: boolean;
entries: ICreditNoteEntryNewDTO[];
branchId?: number;
warehouseId?: number;
}
export interface ICreditNoteEditDTO {
customerId: number;
exchangeRate?: number;
creditNoteDate: Date;
creditNoteNumber: string;
note: string;
open: boolean;
entries: ICreditNoteEntryNewDTO[];
branchId?: number;
warehouseId?: number;
}
export interface ICreditNoteEntry extends IItemEntry {}
export interface ICreditNote {
id?: number;
customerId: number;
amount: number;
refundedAmount: number;
currencyCode: string;
exchangeRate: number;
creditNoteDate: Date;
creditNoteNumber: string;
referenceNo?: string;
note?: string;
openedAt: Date | null;
entries: ICreditNoteEntry[];
isOpen: boolean;
isClosed: boolean;
isDraft: boolean;
isPublished: boolean;
creditsRemaining: number;
localAmount?: number;
branchId?: number;
warehouseId: number;
createdAt?: Date,
}
export enum CreditNoteAction {
Create = 'Create',
Edit = 'Edit',
Delete = 'Delete',
View = 'View',
Refund = 'Refund',
}
export interface ICreditNoteDeletingPayload {
tenantId: number;
oldCreditNote: ICreditNote;
trx: Knex.Transaction;
}
export interface ICreditNoteDeletedPayload {
tenantId: number;
oldCreditNote: ICreditNote;
creditNoteId: number;
trx: Knex.Transaction;
}
export interface ICreditNoteEditingPayload {
trx: Knex.Transaction;
oldCreditNote: ICreditNote;
creditNoteEditDTO: ICreditNoteEditDTO;
tenantId: number;
}
export interface ICreditNoteEditedPayload {
trx: Knex.Transaction;
oldCreditNote: ICreditNote;
creditNoteId: number;
creditNote: ICreditNote;
creditNoteEditDTO: ICreditNoteEditDTO;
tenantId: number;
}
export interface ICreditNoteCreatedPayload {
tenantId: number;
creditNoteDTO: ICreditNoteNewDTO;
creditNote: ICreditNote;
creditNoteId: number;
trx: Knex.Transaction;
}
export interface ICreditNoteCreatingPayload {
tenantId: number;
creditNoteDTO: ICreditNoteNewDTO;
trx: Knex.Transaction;
}
export interface ICreditNoteOpeningPayload {
tenantId: number;
creditNoteId: number;
oldCreditNote: ICreditNote;
trx: Knex.Transaction;
}
export interface ICreditNoteOpenedPayload {
tenantId: number;
creditNote: ICreditNote;
creditNoteId: number;
oldCreditNote: ICreditNote;
trx: Knex.Transaction;
}
export interface ICreditNotesQueryDTO {}
export interface ICreditNotesQueryDTO extends IDynamicListFilter {
page: number;
pageSize: number;
searchKeyword?: string;
}
export interface ICreditNoteRefundDTO {
fromAccountId: number;
amount: number;
exchangeRate?: number;
referenceNo: string;
description: string;
date: Date;
branchId?: number;
}
export interface ICreditNoteApplyInvoiceDTO {
entries: { invoiceId: number; amount: number }[];
}
export interface IRefundCreditNote {
id?: number | null;
date: Date;
referenceNo: string;
amount: number;
currencyCode: string;
exchangeRate: number;
fromAccountId: number;
description: string;
creditNoteId: number;
createdAt?: Date | null;
userId?: number;
branchId?: number;
creditNote?: ICreditNote;
}
export interface IRefundCreditNotePOJO {
formattedAmount: string;
}
export interface IRefundCreditNoteDeletedPayload {
trx: Knex.Transaction;
refundCreditId: number;
oldRefundCredit: IRefundCreditNote;
tenantId: number;
}
export interface IRefundCreditNoteDeletingPayload {
trx: Knex.Transaction;
refundCreditId: number;
oldRefundCredit: IRefundCreditNote;
tenantId: number;
}
export interface IRefundCreditNoteCreatingPayload {
trx: Knex.Transaction;
creditNote: ICreditNote;
tenantId: number;
newCreditNoteDTO: ICreditNoteRefundDTO;
}
export interface IRefundCreditNoteCreatedPayload {
trx: Knex.Transaction;
refundCreditNote: IRefundCreditNote;
creditNote: ICreditNote;
tenantId: number;
}
export interface IRefundCreditNoteOpenedPayload {
tenantId: number;
creditNoteId: number;
oldCreditNote: ICreditNote;
trx: Knex.Transaction;
}
export interface IApplyCreditToInvoiceEntryDTO {
amount: number;
invoiceId: number;
}
export interface IApplyCreditToInvoicesDTO {
entries: IApplyCreditToInvoiceEntryDTO[];
}
export interface IApplyCreditToInvoicesCreatedPayload {
trx: Knex.Transaction;
creditNote: ICreditNote;
tenantId: number;
creditNoteAppliedInvoices: ICreditNoteAppliedToInvoice[];
}
export interface IApplyCreditToInvoicesDeletedPayload {
trx: Knex.Transaction;
creditNote: ICreditNote;
creditNoteAppliedToInvoice: ICreditNoteAppliedToInvoice;
tenantId: number;
}
export interface ICreditNoteAppliedToInvoice {
invoiceId: number;
amount: number;
creditNoteId: number;
}
export interface ICreditNoteAppliedToInvoiceModel {
amount: number;
entries: ICreditNoteAppliedToInvoice[];
}
export type ICreditNoteGLCommonEntry = Pick<
ILedgerEntry,
| 'date'
| 'userId'
| 'currencyCode'
| 'exchangeRate'
| 'transactionType'
| 'transactionId'
| 'transactionNumber'
| 'referenceNumber'
| 'createdAt'
| 'indexGroup'
| 'credit'
| 'debit'
| 'branchId'
>;

View File

@@ -0,0 +1,27 @@
export interface ICurrencyDTO {
currencyName: string,
currencyCode: string,
currencySign: string,
};
export interface ICurrencyEditDTO {
currencyName: string,
currencySign: string,
}
export interface ICurrency {
id: number,
currencyName: string,
currencyCode: string,
currencySign: string,
createdAt: Date,
updatedAt: Date,
};
export interface ICurrenciesService {
newCurrency(tenantId: number, currencyDTO: ICurrencyDTO): Promise<void>;
editCurrency(tenantId: number, currencyId: number, editCurrencyDTO: ICurrencyEditDTO): Promise<void>;
deleteCurrency(tenantId: number, currencyCode: string): Promise<void>;
listCurrencies(tenantId: number): Promise<ICurrency[]>;
}

View File

@@ -0,0 +1,49 @@
import { INumberFormatQuery } from './FinancialStatements';
import {
IContactBalanceSummaryQuery,
IContactBalanceSummaryAmount,
IContactBalanceSummaryPercentage,
IContactBalanceSummaryTotal,
} from './ContactBalanceSummary';
export interface ICustomerBalanceSummaryQuery
extends IContactBalanceSummaryQuery {
customersIds?: number[];
}
export interface ICustomerBalanceSummaryAmount
extends IContactBalanceSummaryAmount {}
export interface ICustomerBalanceSummaryPercentage
extends IContactBalanceSummaryPercentage {}
export interface ICustomerBalanceSummaryCustomer {
id: number,
customerName: string;
total: ICustomerBalanceSummaryAmount;
percentageOfColumn?: ICustomerBalanceSummaryPercentage;
}
export interface ICustomerBalanceSummaryTotal
extends IContactBalanceSummaryTotal {
total: ICustomerBalanceSummaryAmount;
percentageOfColumn?: ICustomerBalanceSummaryPercentage;
}
export interface ICustomerBalanceSummaryData {
customers: ICustomerBalanceSummaryCustomer[];
total: ICustomerBalanceSummaryTotal;
}
export interface ICustomerBalanceSummaryStatement {
data: ICustomerBalanceSummaryData;
query: ICustomerBalanceSummaryQuery;
}
export interface ICustomerBalanceSummaryService {
customerBalanceSummary(
tenantId: number,
query: ICustomerBalanceSummaryQuery
): Promise<ICustomerBalanceSummaryStatement>;
}

View File

@@ -0,0 +1,38 @@
import { IModel, ISortOrder } from "./Model";
export interface IDynamicFilter {
setModel(model: IModel): void;
buildQuery(): void;
getResponseMeta();
}
export interface IFilterRole {
fieldKey: string;
value: string;
condition?: string;
index?: number;
comparator?: string;
}
export interface IDynamicListFilter {
customViewId?: number;
filterRoles?: IFilterRole[];
columnSortBy: ISortOrder;
sortOrder: string;
stringifiedFilterRoles: string;
searchKeyword?: string;
}
export interface IDynamicListService {
dynamicList(
tenantId: number,
model: any,
filter: IDynamicListFilter
): Promise<any>;
handlerErrorsToResponse(error, req, res, next): void;
}
// Search role.
export interface ISearchRole {
fieldKey: string;
comparator: string;
}

View File

@@ -0,0 +1,18 @@
export interface ICommonEntry {
id?: number;
amount: number;
}
export interface ICommonLandedCostEntry extends ICommonEntry {
landedCost: boolean;
allocatedCostAmount: number;
}
export interface ICommonEntryDTO {
id?: number;
amount: number;
}
export interface ICommonLandedCostEntryDTO extends ICommonEntryDTO {
landedCost?: boolean;
}

View File

@@ -0,0 +1,36 @@
import { IFilterRole } from './DynamicFilter';
export interface IExchangeRate {
id: number,
currencyCode: string,
exchangeRate: number,
date: Date,
createdAt: Date,
updatedAt: Date,
};
export interface IExchangeRateDTO {
currencyCode: string,
exchangeRate: number,
date: Date,
};
export interface IExchangeRateEditDTO {
exchangeRate: number,
};
export interface IExchangeRateFilter {
page: number,
pageSize: number,
filterRoles?: IFilterRole[];
columnSortBy: string;
sortOrder: string;
};
export interface IExchangeRatesService {
newExchangeRate(tenantId: number, exchangeRateDTO: IExchangeRateDTO): Promise<IExchangeRate>;
editExchangeRate(tenantId: number, exchangeRateId: number, editExRateDTO: IExchangeRateEditDTO): Promise<void>;
deleteExchangeRate(tenantId: number, exchangeRateId: number): Promise<void>;
listExchangeRates(tenantId: number, exchangeRateFilter: IExchangeRateFilter): Promise<void>;
};

View File

@@ -0,0 +1,200 @@
import { Knex } from 'knex';
import { ISystemUser } from './User';
import { IFilterRole } from './DynamicFilter';
import { IAccount } from './Account';
export interface IPaginationMeta {
total: number;
page: number;
pageSize: number;
}
export interface IExpensesFilter {
page: number;
pageSize: number;
filterRoles?: IFilterRole[];
columnSortBy: string;
sortOrder: string;
viewSlug?: string;
}
export interface IExpense {
id: number;
totalAmount: number;
localAmount?: number;
currencyCode: string;
exchangeRate: number;
description?: string;
paymentAccountId: number;
peyeeId?: number;
referenceNo?: string;
publishedAt: Date | null;
userId: number;
paymentDate: Date;
payeeId: number;
landedCostAmount: number;
allocatedCostAmount: number;
unallocatedCostAmount: number;
categories?: IExpenseCategory[];
isPublished: boolean;
localLandedCostAmount?: number;
localAllocatedCostAmount?: number;
localUnallocatedCostAmount?: number;
billableAmount: number;
invoicedAmount: number;
branchId?: number;
createdAt?: Date;
}
export interface IExpenseCategory {
id?: number;
expenseAccountId: number;
index: number;
description: string;
expenseId: number;
amount: number;
projectId?: number;
allocatedCostAmount: number;
unallocatedCostAmount: number;
landedCost: boolean;
expenseAccount?: IAccount;
}
export interface IExpenseCommonDTO {
currencyCode: string;
exchangeRate?: number;
description?: string;
paymentAccountId: number;
peyeeId?: number;
referenceNo?: string;
publish: boolean;
userId: number;
paymentDate: Date;
payeeId: number;
categories: IExpenseCategoryDTO[];
branchId?: number;
}
export interface IExpenseCreateDTO extends IExpenseCommonDTO {}
export interface IExpenseEditDTO extends IExpenseCommonDTO {}
export interface IExpenseCategoryDTO {
id?: number;
expenseAccountId: number;
index: number;
amount: number;
description?: string;
expenseId: number;
landedCost?: boolean;
projectId?: number;
}
export interface IExpensesService {
newExpense(
tenantid: number,
expenseDTO: IExpenseDTO,
authorizedUser: ISystemUser
): Promise<IExpense>;
editExpense(
tenantid: number,
expenseId: number,
expenseDTO: IExpenseDTO,
authorizedUser: ISystemUser
): void;
publishExpense(
tenantId: number,
expenseId: number,
authorizedUser: ISystemUser
): Promise<void>;
deleteExpense(
tenantId: number,
expenseId: number,
authorizedUser: ISystemUser
): Promise<void>;
getExpensesList(
tenantId: number,
expensesFilter: IExpensesFilter
): Promise<{
expenses: IExpense[];
pagination: IPaginationMeta;
filterMeta: IFilterMeta;
}>;
getExpense(tenantId: number, expenseId: number): Promise<IExpense>;
}
export interface IExpenseCreatingPayload {
trx: Knex.Transaction;
tenantId: number;
expenseDTO: IExpenseCreateDTO;
}
export interface IExpenseEventEditingPayload {
tenantId: number;
oldExpense: IExpense;
expenseDTO: IExpenseEditDTO;
trx: Knex.Transaction;
}
export interface IExpenseCreatedPayload {
tenantId: number;
expenseId: number;
authorizedUser: ISystemUser;
expense: IExpense;
trx: Knex.Transaction;
}
export interface IExpenseEventEditPayload {
tenantId: number;
expenseId: number;
expense: IExpense;
expenseDTO: IExpenseEditDTO;
authorizedUser: ISystemUser;
oldExpense: IExpense;
trx: Knex.Transaction;
}
export interface IExpenseEventDeletePayload {
tenantId: number;
expenseId: number;
authorizedUser: ISystemUser;
oldExpense: IExpense;
trx: Knex.Transaction;
}
export interface IExpenseDeletingPayload {
trx: Knex.Transaction;
tenantId: number;
oldExpense: IExpense;
}
export interface IExpenseEventPublishedPayload {
tenantId: number;
expenseId: number;
oldExpense: IExpense;
expense: IExpense;
authorizedUser: ISystemUser;
trx: Knex.Transaction;
}
export interface IExpensePublishingPayload {
trx: Knex.Transaction;
oldExpense: IExpense;
tenantId: number;
}
export enum ExpenseAction {
Create = 'Create',
Edit = 'Edit',
Delete = 'Delete',
View = 'View',
}

View File

@@ -0,0 +1,15 @@
export enum Features {
WAREHOUSES = 'warehouses',
BRANCHES = 'branches',
}
export interface IFeatureAllItem {
name: string;
isAccessible: boolean;
defaultAccessible: boolean;
}
export interface IFeatureConfiugration {
name: string;
defaultValue?: boolean;
}

View File

@@ -0,0 +1,32 @@
import { INumberFormatQuery } from '../../FinancialStatements';
export interface ICashflowAccountTransactionsQuery {
page: number;
pageSize: number;
accountId: number;
numberFormat: INumberFormatQuery;
}
export interface ICashflowAccountTransaction {
withdrawal: number;
deposit: number;
runningBalance: number;
formattedWithdrawal: string;
formattedDeposit: string;
formattedRunningBalance: string;
transactionNumber: string;
referenceNumber: string;
referenceId: number;
referenceType: string;
formattedTransactionType: string;
balance: number;
formattedBalance: string;
date: Date;
formattedDate: string;
}

View File

@@ -0,0 +1,44 @@
export interface INumberFormatQuery {
precision: number;
divideOn1000: boolean;
showZero: boolean;
formatMoney: 'total' | 'always' | 'none';
negativeFormat: 'parentheses' | 'mines';
}
export interface IFormatNumberSettings {
precision?: number;
divideOn1000?: boolean;
excerptZero?: boolean;
negativeFormat?: 'parentheses' | 'mines';
thousand?: string;
decimal?: string;
zeroSign?: string;
currencyCode?: string;
money?: boolean;
}
export enum ReportsAction {
READ_BALANCE_SHEET = 'read-balance-sheet',
READ_TRIAL_BALANCE_SHEET = 'read-trial-balance-sheet',
READ_PROFIT_LOSS = 'read-profit-loss',
READ_JOURNAL = 'read-journal',
READ_GENERAL_LEDGET = 'read-general-ledger',
READ_CASHFLOW = 'read-cashflow',
READ_AR_AGING_SUMMARY = 'read-ar-aging-summary',
READ_AP_AGING_SUMMARY = 'read-ap-aging-summary',
READ_PURCHASES_BY_ITEMS = 'read-purchases-by-items',
READ_SALES_BY_ITEMS = 'read-sales-by-items',
READ_CUSTOMERS_TRANSACTIONS = 'read-customers-transactions',
READ_VENDORS_TRANSACTIONS = 'read-vendors-transactions',
READ_CUSTOMERS_SUMMARY_BALANCE = 'read-customers-summary-balance',
READ_VENDORS_SUMMARY_BALANCE = 'read-vendors-summary-balance',
READ_INVENTORY_VALUATION_SUMMARY = 'read-inventory-valuation-summary',
READ_INVENTORY_ITEM_DETAILS = 'read-inventory-item-details',
READ_CASHFLOW_ACCOUNT_TRANSACTION = 'read-cashflow-account-transactions',
READ_PROJECT_PROFITABILITY_SUMMARY = 'read-project-profitability-summary',
}
export interface IFinancialSheetBranchesQuery {
branchesIds?: number[];
}

View File

@@ -0,0 +1,81 @@
export interface IGeneralLedgerSheetQuery {
fromDate: Date | string,
toDate: Date | string,
basis: string,
numberFormat: {
noCents: boolean,
divideOn1000: boolean,
},
noneTransactions: boolean,
accountsIds: number[],
branchesIds?: number[];
};
export interface IGeneralLedgerSheetAccountTransaction {
id: number,
amount: number,
runningBalance: number,
credit: number,
debit: number,
formattedAmount: string,
formattedCredit: string,
formattedDebit: string,
formattedRunningBalance: string,
currencyCode: string,
note?: string,
transactionType?: string,
transactionNumber: string,
referenceId?: number,
referenceType?: string,
date: Date|string,
};
export interface IGeneralLedgerSheetAccountBalance {
date: Date|string,
amount: number,
formattedAmount: string,
currencyCode: string,
}
export interface IGeneralLedgerSheetAccount {
id: number,
name: string,
code: string,
index: number,
parentAccountId: number,
transactions: IGeneralLedgerSheetAccountTransaction[],
openingBalance: IGeneralLedgerSheetAccountBalance,
closingBalance: IGeneralLedgerSheetAccountBalance,
}
export interface IAccountTransaction {
id: number,
index: number,
draft: boolean,
note: string,
accountId: number,
transactionType: string,
referenceType: string,
referenceId: number,
contactId: number,
contactType: string,
credit: number,
debit: number,
date: string|Date,
createdAt: string|Date,
updatedAt: string|Date,
}
export interface IGeneralLedgerMeta {
isCostComputeRunning: boolean,
organizationName: string,
baseCurrency: string,
};

View File

@@ -0,0 +1,47 @@
import { INumberFormatQuery } from './FinancialStatements';
export interface IInventoryValuationReportQuery {
asDate: Date | string;
numberFormat: INumberFormatQuery;
noneTransactions: boolean;
noneZero: boolean;
onlyActive: boolean;
itemsIds: number[];
warehousesIds?: number[];
branchesIds?: number[];
}
export interface IInventoryValuationSheetMeta {
organizationName: string;
baseCurrency: string;
isCostComputeRunning: boolean;
}
export interface IInventoryValuationItem {
id: number;
name: string;
code: string;
valuation: number;
quantity: number;
average: number;
valuationFormatted: string;
quantityFormatted: string;
averageFormatted: string;
currencyCode: string;
}
export interface IInventoryValuationTotal {
valuation: number;
quantity: number;
valuationFormatted: string;
quantityFormatted: string;
}
export type IInventoryValuationStatement =
| {
items: IInventoryValuationItem[];
total: IInventoryValuationTotal;
}
| {};

View File

@@ -0,0 +1,100 @@
import { Knex } from 'knex';
import { IItem } from './Item';
type IAdjustmentTypes = 'increment' | 'decrement';
export interface IQuickInventoryAdjustmentDTO {
date: Date;
type: IAdjustmentTypes;
adjustmentAccountId: number;
reason: string;
description: string;
referenceNo: string;
itemId: number;
quantity: number;
cost: number;
publish: boolean;
warehouseId?: number;
branchId?: number;
}
export interface IInventoryAdjustment {
id?: number;
date: Date;
adjustmentAccountId: number;
reason: string;
description: string;
type: string;
referenceNo: string;
inventoryDirection?: 'IN' | 'OUT';
entries: IInventoryAdjustmentEntry[];
userId: number;
publishedAt?: Date | null;
createdAt?: Date;
isPublished: boolean;
branchId?: number;
warehouseId?: number;
}
export interface IInventoryAdjustmentEntry {
id?: number;
adjustmentId?: number;
index: number;
itemId: number;
quantity?: number;
cost?: number;
value?: number;
item?: IItem;
}
export interface IInventoryAdjustmentsFilter {
page: number;
pageSize: number;
}
export interface IInventoryAdjustmentEventCreatedPayload {
tenantId: number;
inventoryAdjustment: IInventoryAdjustment;
inventoryAdjustmentId: number;
trx: Knex.Transaction;
}
export interface IInventoryAdjustmentCreatingPayload {
tenantId: number;
quickAdjustmentDTO: IQuickInventoryAdjustmentDTO;
trx: Knex.Transaction;
}
export interface IInventoryAdjustmentEventPublishedPayload {
tenantId: number;
inventoryAdjustmentId: number;
inventoryAdjustment: IInventoryAdjustment;
trx: Knex.Transaction;
}
export interface IInventoryAdjustmentPublishingPayload {
trx: Knex.Transaction;
tenantId: number;
oldInventoryAdjustment: IInventoryAdjustment;
}
export interface IInventoryAdjustmentEventDeletedPayload {
tenantId: number;
inventoryAdjustmentId: number;
oldInventoryAdjustment: IInventoryAdjustment;
trx: Knex.Transaction;
}
export interface IInventoryAdjustmentDeletingPayload {
tenantId: number;
oldInventoryAdjustment: IInventoryAdjustment;
trx: Knex.Transaction;
}
export enum InventoryAdjustmentAction {
CREATE = 'Create',
EDIT = 'Edit',
DELETE = 'Delete',
VIEW = 'View',
}

View File

@@ -0,0 +1,16 @@
import { Knex } from "knex";
export interface IInventoryItemCostMeta {
itemId: number;
valuation: number;
quantity: number;
average: number;
}
export interface IInventoryCostLotsGLEntriesWriteEvent {
tenantId: number,
startingDate: Date,
trx: Knex.Transaction
}

View File

@@ -0,0 +1,6 @@
interface IInventoryCostMethod {
computeItemsCost(fromDate: Date): void,
storeInventoryLotsCost(transactions: any[]): void,
}

View File

@@ -0,0 +1,94 @@
import {
INumberFormatQuery,
} from './FinancialStatements';
export interface IInventoryDetailsQuery {
fromDate: Date | string;
toDate: Date | string;
numberFormat: INumberFormatQuery;
noneTransactions: boolean;
itemsIds: number[]
warehousesIds?: number[];
branchesIds?: number[];
}
export interface IInventoryDetailsNumber {
number: number;
formattedNumber: string;
}
export interface IInventoryDetailsMoney {
amount: number;
formattedAmount: string;
currencyCode: string;
}
export interface IInventoryDetailsDate {
date: Date;
formattedDate: string;
}
export interface IInventoryDetailsOpening {
nodeType: 'OPENING_ENTRY';
date: IInventoryDetailsDate;
quantity: IInventoryDetailsNumber;
value: IInventoryDetailsNumber;
}
export interface IInventoryDetailsClosing extends IInventoryDetailsOpening {
nodeType: 'CLOSING_ENTRY';
}
export interface IInventoryDetailsItem {
id: number;
nodeType: string;
name: string;
code: string;
children: (
| IInventoryDetailsItemTransaction
| IInventoryDetailsOpening
| IInventoryDetailsClosing
)[];
}
export interface IInventoryDetailsItemTransaction {
nodeType: string;
date: IInventoryDetailsDate;
transactionType: string;
transactionNumber?: string;
quantityMovement: IInventoryDetailsNumber;
valueMovement: IInventoryDetailsNumber;
quantity: IInventoryDetailsNumber;
total: IInventoryDetailsNumber;
cost: IInventoryDetailsNumber;
value: IInventoryDetailsNumber;
profitMargin: IInventoryDetailsNumber;
rate: IInventoryDetailsNumber;
runningQuantity: IInventoryDetailsNumber;
runningValuation: IInventoryDetailsNumber;
direction: string;
}
export type IInventoryDetailsNode =
| IInventoryDetailsItem
| IInventoryDetailsItemTransaction;
export type IInventoryDetailsData = IInventoryDetailsItem[];
export interface IInventoryItemDetailMeta {
isCostComputeRunning: boolean;
organizationName: string;
baseCurrency: string;
}
export interface IInvetoryItemDetailDOO {
data: IInventoryDetailsData;
query: IInventoryDetailsQuery;
meta: IInventoryItemDetailMeta;
}

View File

@@ -0,0 +1,95 @@
import { Knex } from 'knex';
import { IItem } from './Item';
import { ISaleInvoice } from './SaleInvoice';
import { ISaleReceipt } from './SaleReceipt';
export type TInventoryTransactionDirection = 'IN' | 'OUT';
export interface IInventoryTransaction {
id?: number;
date: Date | string;
direction: TInventoryTransactionDirection;
itemId: number;
quantity: number | null;
rate: number;
transactionType: string;
transcationTypeFormatted?: string;
transactionId: number;
costAccountId?: number;
entryId: number;
meta?: IInventoryTransactionMeta;
costLotAggregated?: IInventoryCostLotAggregated;
createdAt?: Date;
updatedAt?: Date;
warehouseId?: number;
}
export interface IInventoryTransactionMeta {
id?: number;
transactionNumber: string;
description: string;
}
export interface IInventoryCostLotAggregated {
cost: number;
quantity: number;
}
export interface IInventoryLotCost {
id?: number;
date: Date;
direction: string;
itemId: number;
quantity: number;
rate: number;
remaining: number;
cost: number;
transactionType: string;
transactionId: number;
costAccountId: number;
entryId: number;
createdAt: Date;
exchangeRate: number;
currencyCode: string;
item?: IItem;
invoice?: ISaleInvoice;
receipt?: ISaleReceipt;
}
export interface IItemsQuantityChanges {
itemId: number;
balanceChange: number;
}
export interface IInventoryTransactionsCreatedPayload {
tenantId: number;
inventoryTransactions: IInventoryTransaction[];
trx: Knex.Transaction;
}
export interface IInventoryTransactionsDeletedPayload {
tenantId: number;
oldInventoryTransactions: IInventoryTransaction[];
transactionId: number;
transactionType: string;
trx: Knex.Transaction;
}
export interface IInventoryItemCostScheduledPayload {
startingDate: Date | string;
itemId: number;
tenantId: number;
}
export interface IComputeItemCostJobStartedPayload {
startingDate: Date | string;
itemId: number;
tenantId: number;
}
export interface IComputeItemCostJobCompletedPayload {
startingDate: Date | string;
itemId: number;
tenantId: number;
}

View File

@@ -0,0 +1,130 @@
import { Knex } from 'knex';
import { AbilitySubject } from '@/interfaces';
import { IFilterRole } from '@/interfaces/DynamicFilter';
export interface IItem {
id: number;
name: string;
type: string;
code: string;
sellable: boolean;
purchasable: boolean;
costPrice: number;
sellPrice: number;
currencyCode: string;
costAccountId: number;
sellAccountId: number;
inventoryAccountId: number;
sellDescription: string;
purchaseDescription: string;
quantityOnHand: number;
note: string;
active: boolean;
categoryId: number;
userId: number;
createdAt: Date;
updatedAt: Date;
}
export interface IItemDTO {
name: string;
type: string;
code: string;
sellable: boolean;
purchasable: boolean;
costPrice: number;
sellPrice: number;
currencyCode: string;
costAccountId: number;
sellAccountId: number;
inventoryAccountId: number;
sellDescription: string;
purchaseDescription: string;
quantityOnHand: number;
note: string;
active: boolean;
categoryId: number;
}
export interface IItemCreateDTO extends IItemDTO {}
export interface IItemEditDTO extends IItemDTO {}
export interface IItemsService {
getItem(tenantId: number, itemId: number): Promise<IItem>;
deleteItem(tenantId: number, itemId: number): Promise<void>;
editItem(tenantId: number, itemId: number, itemDTO: IItemDTO): Promise<IItem>;
newItem(tenantId: number, itemDTO: IItemDTO): Promise<IItem>;
itemsList(
tenantId: number,
itemsFilter: IItemsFilter
): Promise<{ items: IItem[] }>;
}
export interface IItemsFilter extends IDynamicListFilterDTO {
stringifiedFilterRoles?: string;
page: number;
pageSize: number;
inactiveMode: boolean;
viewSlug?: string;
}
export interface IItemsAutoCompleteFilter {
limit: number;
keyword: string;
filterRoles?: IFilterRole[];
columnSortBy: string;
sortOrder: string;
}
export interface IItemEventCreatedPayload {
tenantId: number;
item: IItem;
itemId: number;
trx: Knex.Transaction;
}
export interface IItemEventEditedPayload {
tenantId: number;
item: IItem;
oldItem: IItem;
itemId: number;
trx: Knex.Transaction;
}
export interface IItemEventDeletingPayload {
tenantId: number;
trx: Knex.Transaction;
oldItem: IItem;
}
export interface IItemEventDeletedPayload {
tenantId: number;
oldItem: IItem;
itemId: number;
trx: Knex.Transaction;
}
export enum ItemAction {
CREATE = 'Create',
EDIT = 'Edit',
DELETE = 'Delete',
VIEW = 'View',
}
export type ItemAbility = [ItemAction, AbilitySubject.Item];

View File

@@ -0,0 +1,87 @@
import Knex from 'knex';
import { IDynamicListFilterDTO } from './DynamicFilter';
import { ISystemUser } from './User';
export interface IItemCategory {
id: number;
name: string;
description?: string;
userId: number;
costAccountId?: number;
sellAccountId?: number;
inventoryAccountId?: number;
costMethod?: string;
}
export interface IItemCategoryOTD {
name: string;
description?: string;
userId: number;
costAccountId?: number;
sellAccountId?: number;
inventoryAccountId?: number;
costMethod?: string;
}
export interface IItemCategoriesFilter extends IDynamicListFilterDTO {
stringifiedFilterRoles?: string;
}
export interface IItemCategoriesService {
newItemCategory(
tenantId: number,
itemCategoryOTD: IItemCategoryOTD,
authorizedUser: ISystemUser
): Promise<IItemCategory>;
editItemCategory(
tenantId: number,
itemCategoryId: number,
itemCategoryOTD: IItemCategoryOTD,
authorizedUser: ISystemUser
): Promise<IItemCategory>;
deleteItemCategory(
tenantId: number,
itemCategoryId: number,
authorizedUser: ISystemUser
): Promise<void>;
deleteItemCategories(
tenantId: number,
itemCategoriesIds: number[],
authorizedUser: ISystemUser
): Promise<void>;
getItemCategory(
tenantId: number,
itemCategoryId: number,
authorizedUser: ISystemUser
): Promise<void>;
getItemCategoriesList(
tenantId: number,
itemCategoriesFilter: IItemCategoriesFilter,
authorizedUser: ISystemUser
): Promise<void>;
}
export interface IItemCategoryCreatedPayload {
tenantId: number;
itemCategory: IItemCategory;
trx: Knex.Transaction;
}
export interface IItemCategoryEditedPayload {
oldItemCategory: IItemCategory;
tenantId: number;
trx: Knex.Transaction;
}
export interface IItemCategoryDeletedPayload {
tenantId: number;
itemCategoryId: number;
oldItemCategory: IItemCategory;
}

View File

@@ -0,0 +1,55 @@
import { IItem } from './Item';
import { IBillLandedCostEntry } from './LandedCost';
export type IItemEntryTransactionType = 'SaleInvoice' | 'Bill' | 'SaleReceipt';
export interface IItemEntry {
id?: number;
referenceType: string;
referenceId: number;
index: number;
itemId: number;
description: string;
discount: number;
quantity: number;
rate: number;
amount: number;
landedCost: number;
allocatedCostAmount: number;
unallocatedCostAmount: number;
sellAccountId: number;
costAccountId: number;
warehouseId: number;
projectId: number;
projectRefId?: number;
projectRefType?: ProjectLinkRefType;
projectRefInvoicedAmount?: number;
item?: IItem;
allocatedCostEntries?: IBillLandedCostEntry[];
}
export interface IItemEntryDTO {
id?: number;
itemId: number;
landedCost?: boolean;
warehouseId?: number;
projectRefId?: number;
projectRefType?: ProjectLinkRefType;
projectRefInvoicedAmount?: number;
}
export enum ProjectLinkRefType {
Task = 'TASK',
Bill = 'BILL',
Expense = 'EXPENSE',
}

View File

@@ -0,0 +1,14 @@
export interface IJobMeta {
id: string;
nextRunAt: Date;
lastModifiedBy: null | Date;
lockedAt: null | Date;
lastRunAt: null | Date;
failCount: number;
failedAt: null | Date;
lastFinishedAt: Date | null;
running: boolean;
queued: boolean;
completed: boolean;
failed: boolean;
}

View File

@@ -0,0 +1,55 @@
export interface IJournalEntry {
id: number;
index?: number;
date: Date;
credit: number;
debit: number;
account: number;
referenceType: string;
referenceId: number;
referenceTypeFormatted: string;
itemId?: number;
transactionNumber?: string;
referenceNumber?: string;
transactionType?: string;
note?: string;
userId?: number;
contactType?: string;
contactId?: number;
branchId: number;
}
export interface IJournalPoster {
entries: IJournalEntry[];
credit(entry: IJournalEntry): void;
debit(entry: IJournalEntry): void;
removeEntries(ids: number[]): void;
saveEntries(): void;
saveBalance(): void;
deleteEntries(): void;
getAccountBalance(
accountId: number,
closingDate?: Date | string,
dateType?: string
): number;
getAccountEntries(accountId: number): IJournalEntry[];
}
export type TEntryType = 'credit' | 'debit';
export interface IAccountChange {
credit: number;
debit: number;
}
export interface IAccountsChange {
[key: string]: IAccountChange;
}

View File

@@ -0,0 +1,36 @@
import { IJournalEntry } from './Journal';
export interface IJournalReportQuery {
fromDate: Date | string,
toDate: Date | string,
numberFormat: {
noCents: boolean,
divideOn1000: boolean,
},
transactionType: string,
transactionId: string,
accountsIds: number | number[],
fromRange: number,
toRange: number,
}
export interface IJournalReportEntriesGroup {
id: string,
entries: IJournalEntry[],
currencyCode: string,
credit: number,
debit: number,
formattedCredit: string,
formattedDebit: string,
}
export interface IJournalReport {
entries: IJournalReportEntriesGroup[],
}
export interface IJournalSheetMeta {
isCostComputeRunning: boolean,
organizationName: string,
baseCurrency: string,
}

View File

@@ -0,0 +1,153 @@
import { IBill } from '@/interfaces';
import Knex from 'knex';
import { IItemEntry } from './ItemEntry';
export interface IBillLandedCost {
id?: number;
fromTransactionId: number;
fromTransactionType: string;
fromTransactionEntryId: number;
allocationMethod: string;
costAccountId: number;
description: string;
amount: number;
localAmount?: number;
exchangeRate: number;
currencyCode: string;
billId: number;
allocateEntries: IBillLandedCostEntry[]
}
export interface IBillLandedCostEntry {
id?: number;
cost: number;
entryId: number;
billLocatedCostId: number;
itemEntry?: IItemEntry;
}
export interface ILandedCostItemDTO {
entryId: number;
cost: number;
}
export type ILandedCostType = 'Expense' | 'Bill';
export interface ILandedCostDTO {
transactionType: ILandedCostType;
transactionId: number;
transactionEntryId: number;
allocationMethod: string;
description: string;
items: ILandedCostItemDTO[];
}
export interface ILandedCostQueryDTO {
vendorId: number;
fromDate: Date;
toDate: Date;
}
export interface IUnallocatedListCost {
costNumber: string;
costAmount: number;
unallocatedAmount: number;
}
export interface ILandedCostTransactionsQueryDTO {
transactionType: string;
date: Date;
}
export interface ILandedCostEntriesQueryDTO {
transactionType: string;
transactionId: number;
}
export interface ILandedCostTransaction {
id: number;
name: string;
amount: number;
allocatedCostAmount: number;
unallocatedCostAmount: number;
currencyCode: string;
exchangeRate: number;
// formattedAllocatedCostAmount: string;
// formattedAmount: string;
// formattedUnallocatedCostAmount: string;
transactionType: string;
entries?: ILandedCostTransactionEntry[];
}
export interface ILandedCostTransactionEntry {
id: number;
name: string;
code: string;
amount: number;
unallocatedCostAmount: number;
allocatedCostAmount: number;
description: string;
costAccountId: number;
}
export interface ILandedCostTransactionEntryDOJO
extends ILandedCostTransactionEntry {
formattedAmount: string;
formattedUnallocatedCostAmount: string;
formattedAllocatedCostAmount: string;
}
export interface ILandedCostTransactionDOJO extends ILandedCostTransaction {
formattedAmount: string;
formattedUnallocatedCostAmount: string;
formattedAllocatedCostAmount: string;
}
interface ILandedCostEntry {
id: number;
landedCost?: boolean;
}
export interface IBillLandedCostTransaction {
id: number;
fromTransactionId: number;
fromTransactionType: string;
fromTransactionEntryId: number;
billId: number;
allocationMethod: string;
costAccountId: number;
description: string;
amount: number;
localAmount?: number;
currencyCode: string;
exchangeRate: number;
allocateEntries?: IBillLandedCostTransactionEntry[];
}
export interface IBillLandedCostTransactionEntry {
cost: number;
entryId: number;
billLocatedCostId: number;
}
export interface IAllocatedLandedCostDeletedPayload {
tenantId: number;
oldBillLandedCost: IBillLandedCostTransaction;
billId: number;
trx: Knex.Transaction;
}
export interface IAllocatedLandedCostCreatedPayload {
tenantId: number;
bill: IBill;
billLandedCostId: number;
billLandedCost: IBillLandedCostTransaction;
trx: Knex.Transaction;
}
export interface IBillAssociatedLandedCostTransactions {}

View File

@@ -0,0 +1,71 @@
import { Knex } from 'knex';
export interface ILedger {
entries: ILedgerEntry[];
getEntries(): ILedgerEntry[];
whereAccountId(accountId: number): ILedger;
whereContactId(contactId: number): ILedger;
whereFromDate(fromDate: Date | string): ILedger;
whereToDate(toDate: Date | string): ILedger;
whereCurrencyCode(currencyCode: string): ILedger;
whereBranch(branchId: number): ILedger;
whereItem(itemId: number): ILedger;
getClosingBalance(): number;
getForeignClosingBalance(): number;
getContactsIds(): number[];
getAccountsIds(): number[];
}
export interface ILedgerEntry {
credit: number;
debit: number;
currencyCode: string;
exchangeRate: number;
accountId?: number;
accountNormal: string;
contactId?: number;
date: Date | string;
transactionType: string;
transactionId: number;
transactionNumber?: string;
referenceNumber?: string;
index: number;
indexGroup?: number;
userId?: number;
itemId?: number;
branchId?: number;
projectId?: number;
entryId?: number;
createdAt?: Date;
costable?: boolean;
}
export interface ISaveLedgerEntryQueuePayload {
tenantId: number;
entry: ILedgerEntry;
trx?: Knex.Transaction;
}
export interface ISaveAccountsBalanceQueuePayload {
ledger: ILedger;
tenantId: number;
accountId: number;
trx?: Knex.Transaction;
}
export interface ISaleContactsBalanceQueuePayload {
ledger: ILedger;
tenantId: number;
contactId: number;
trx?: Knex.Transaction;
}

View File

@@ -0,0 +1,25 @@
export interface ILicense {
id?: number,
licenseCode: string,
licensePeriod: number,
sent: boolean,
disabled: boolean,
used: boolean,
};
export interface ILicensesFilter {
active: boolean,
disabld: boolean,
used: boolean,
sent: boolean,
};
export interface ISendLicenseDTO {
phoneNumber: string,
email: string,
period: string,
periodInterval: string,
planSlug: string,
};

View File

@@ -0,0 +1,16 @@
export interface IMailable {
constructor(
view: string,
data?: { [key: string]: string | number },
);
send(): Promise<any>;
build(): void;
setData(data: { [key: string]: string | number }): IMailable;
setTo(to: string): IMailable;
setFrom(from: string): IMailable;
setSubject(subject: string): IMailable;
setView(view: string): IMailable;
render(data?: { [key: string]: string | number }): string;
getViewContent(): string;
}

View File

@@ -0,0 +1,172 @@
import { Knex } from 'knex';
import { IDynamicListFilterDTO } from './DynamicFilter';
import { ISystemUser } from './User';
import { IAccount } from './Account';
export interface IManualJournal {
id?: number;
date: Date;
journalNumber: string;
journalType: string;
reference: string;
amount: number;
currencyCode: string;
exchangeRate: number | null;
publishedAt: Date | null;
description: string;
userId?: number;
entries: IManualJournalEntry[];
createdAt?: Date;
updatedAt?: Date;
isPublished?: boolean;
}
export interface IManualJournalEntry {
index: number;
credit: number;
debit: number;
accountId: number;
note: string;
contactId?: number;
account?: IAccount
branchId?: number;
projectId?: number;
}
export interface IManualJournalEntryDTO {
index: number;
credit: number;
debit: number;
accountId: number;
note: string;
contactId?: number;
branchId?: number
projectId?: number;
}
export interface IManualJournalDTO {
date: Date;
currencyCode?: string;
exchangeRate?: number;
journalNumber: string;
journalType: string;
reference?: string;
description?: string;
publish?: boolean;
branchId?: number;
entries: IManualJournalEntryDTO[];
}
export interface IManualJournalsFilter extends IDynamicListFilterDTO {
stringifiedFilterRoles?: string;
page: number;
pageSize: number;
}
export interface IManualJournalsService {
makeJournalEntries(
tenantId: number,
manualJournalDTO: IManualJournalDTO,
authorizedUser: ISystemUser
): Promise<{ manualJournal: IManualJournal }>;
editJournalEntries(
tenantId: number,
manualJournalId: number,
manualJournalDTO: IManualJournalDTO,
authorizedUser
): Promise<{ manualJournal: IManualJournal }>;
deleteManualJournal(tenantId: number, manualJournalId: number): Promise<void>;
deleteManualJournals(
tenantId: number,
manualJournalsIds: number[]
): Promise<void>;
publishManualJournals(
tenantId: number,
manualJournalsIds: number[]
): Promise<{
meta: {
alreadyPublished: number;
published: number;
total: number;
};
}>;
publishManualJournal(
tenantId: number,
manualJournalId: number
): Promise<void>;
getManualJournals(
tenantId: number,
filter: IManualJournalsFilter
): Promise<{
manualJournals: IManualJournal;
pagination: IPaginationMeta;
filterMeta: IFilterMeta;
}>;
}
export interface IManualJournalEventPublishedPayload {
tenantId: number;
manualJournal: IManualJournal;
manualJournalId: number;
oldManualJournal: IManualJournal;
trx: Knex.Transaction;
}
export interface IManualJournalPublishingPayload {
oldManualJournal: IManualJournal;
trx: Knex.Transaction;
tenantId: number;
}
export interface IManualJournalEventDeletedPayload {
tenantId: number;
manualJournalId: number;
oldManualJournal: IManualJournal;
trx: Knex.Transaction;
}
export interface IManualJournalDeletingPayload {
tenantId: number;
oldManualJournal: IManualJournal;
trx: Knex.Transaction;
}
export interface IManualJournalEventEditedPayload {
tenantId: number;
manualJournal: IManualJournal;
oldManualJournal: IManualJournal;
trx: Knex.Transaction;
}
export interface IManualJournalEditingPayload {
tenantId: number;
oldManualJournal: IManualJournal;
manualJournalDTO: IManualJournalDTO;
trx: Knex.Transaction;
}
export interface IManualJournalCreatingPayload {
tenantId: number;
manualJournalDTO: IManualJournalDTO;
trx: Knex.Transaction;
}
export interface IManualJournalEventCreatedPayload {
tenantId: number;
manualJournal: IManualJournal;
manualJournalId: number;
trx: Knex.Transaction;
}
export enum ManualJournalAction {
Create = 'Create',
View = 'View',
Edit = 'Edit',
Delete = 'Delete',
}

View File

@@ -0,0 +1,25 @@
export interface IMedia {
id?: number,
attachmentFile: string,
createdAt?: Date,
};
export interface IMediaLink {
mediaId: number,
modelName: string,
modelId: number,
};
export interface IMediaLinkDTO {
modelName: string,
modelId: number,
};
export interface IMediaService {
linkMedia(tenantId: number, mediaId: number, modelId?: number, modelName?: string): Promise<void>;
getMedia(tenantId: number, mediaId: number): Promise<IMedia>;
deleteMedia(tenantId: number, mediaId: number | number[]): Promise<void>;
upload(tenantId: number, attachment: any, modelName?: string, modelId?: number): Promise<IMedia>;
}

View File

@@ -0,0 +1,28 @@
export interface IMetadata {
key: string,
value: string|boolean|number,
group: string,
_markAsDeleted?: boolean,
_markAsInserted?: boolean,
_markAsUpdated?: boolean,
};
export interface IMetaQuery {
key: string,
group?: string,
};
export interface IMetableStore {
find(query: string|IMetaQuery): IMetadata;
all(): IMetadata[];
get(query: string|IMetaQuery, defaultValue: any): string|number|boolean;
remove(query: string|IMetaQuery): void;
removeAll(): void;
toArray(): IMetadata[];
};
export interface IMetableStoreStorage {
save(): Promise<void>;
}

View File

@@ -0,0 +1,81 @@
export interface IModel {
name: string;
tableName: string;
fields: { [key: string]: any };
}
export interface IFilterMeta {
sortOrder: string;
sortBy: string;
}
export interface IPaginationMeta {
pageSize: number;
page: number;
}
export interface IModelMetaDefaultSort {
sortOrder: ISortOrder;
sortField: string;
}
export type IModelColumnType =
| 'text'
| 'number'
| 'enumeration'
| 'boolean'
| 'relation';
export type ISortOrder = 'DESC' | 'ASC';
export interface IModelMetaFieldCommon {
name: string;
column: string;
columnable?: boolean;
fieldType: IModelColumnType;
customQuery?: Function;
}
export interface IModelMetaFieldNumber {
fieldType: 'number';
minLength?: number;
maxLength?: number;
}
export interface IModelMetaFieldOther {
fieldType: 'text' | 'boolean';
}
export type IModelMetaField = IModelMetaFieldCommon &
(IModelMetaFieldOther | IModelMetaEnumerationField | IModelMetaRelationField);
export interface IModelMetaEnumerationOption {
key: string;
label: string;
}
export interface IModelMetaEnumerationField {
fieldType: 'enumeration';
options: IModelMetaEnumerationOption[];
}
export interface IModelMetaRelationFieldCommon {
fieldType: 'relation';
}
export interface IModelMetaRelationEnumerationField {
relationType: 'enumeration';
relationKey: string;
relationEntityLabel: string;
relationEntityKey: string;
}
export type IModelMetaRelationField = IModelMetaRelationFieldCommon & (
IModelMetaRelationEnumerationField
);
export interface IModelMeta {
defaultFilterField: string;
defaultSort: IModelMetaDefaultSort;
fields: { [key: string]: IModelMetaField };
}

View File

@@ -0,0 +1,11 @@
export interface IOptionDTO {
key: string,
value: string|number,
group: string,
};
export interface IOptionsDTO {
options: IOptionDTO[],
};

View File

@@ -0,0 +1,20 @@
export interface IPaymentModel {}
export interface ILicensePaymentModel extends IPaymentModel {
licenseCode: string;
}
export interface IPaymentMethod {
makePayment(paymentModel: IPaymentModel): Promise<boolean>;
}
export interface ILicensePaymentMethod {
makePayment(paymentModel: ILicensePaymentModel): Promise<boolean>;
}
export interface IPaymentContext<PaymentModel> {
paymentMethod: IPaymentMethod;
makePayment(paymentModel: PaymentModel): Promise<boolean>;
}

View File

@@ -0,0 +1,168 @@
import { ISystemUser } from '@/interfaces';
import { Knex } from 'knex';
import { pick } from 'lodash';
import { ILedgerEntry } from './Ledger';
import { ISaleInvoice } from './SaleInvoice';
export interface IPaymentReceive {
id?: number;
customerId: number;
paymentDate: Date;
amount: number;
currencyCode: string;
exchangeRate: number;
referenceNo: string;
depositAccountId: number;
paymentReceiveNo: string;
statement: string;
entries: IPaymentReceiveEntry[];
userId: number;
createdAt: Date;
updatedAt: Date;
localAmount?: number;
branchId?: number
}
export interface IPaymentReceiveCreateDTO {
customerId: number;
paymentDate: Date;
amount: number;
exchangeRate: number;
referenceNo: string;
depositAccountId: number;
paymentReceiveNo?: string;
statement: string;
entries: IPaymentReceiveEntryDTO[];
branchId?: number;
}
export interface IPaymentReceiveEditDTO {
customerId: number;
paymentDate: Date;
amount: number;
exchangeRate: number;
referenceNo: string;
depositAccountId: number;
paymentReceiveNo?: string;
statement: string;
entries: IPaymentReceiveEntryDTO[];
branchId?: number;
}
export interface IPaymentReceiveEntry {
id?: number;
paymentReceiveId: number;
invoiceId: number;
paymentAmount: number;
invoice?: ISaleInvoice;
}
export interface IPaymentReceiveEntryDTO {
id?: number;
index: number;
paymentReceiveId: number;
invoiceId: number;
paymentAmount: number;
}
export interface IPaymentReceivesFilter extends IDynamicListFilterDTO {
stringifiedFilterRoles?: string;
}
export interface IPaymentReceivePageEntry {
invoiceId: number;
entryType: string;
invoiceNo: string;
dueAmount: number;
amount: number;
totalPaymentAmount: number;
paymentAmount: number;
currencyCode: string;
date: Date | string;
}
export interface IPaymentReceiveEditPage {
paymentReceive: IPaymentReceive;
entries: IPaymentReceivePageEntry[];
}
export interface IPaymentsReceiveService {
validateCustomerHasNoPayments(
tenantId: number,
customerId: number
): Promise<void>;
}
export interface IPaymentReceiveSmsDetails {
customerName: string;
customerPhoneNumber: string;
smsMessage: string;
}
export interface IPaymentReceiveCreatingPayload {
tenantId: number;
paymentReceiveDTO: IPaymentReceiveCreateDTO;
trx: Knex.Transaction;
}
export interface IPaymentReceiveCreatedPayload {
tenantId: number;
paymentReceive: IPaymentReceive;
paymentReceiveId: number;
authorizedUser: ISystemUser;
trx: Knex.Transaction;
}
export interface IPaymentReceiveEditedPayload {
tenantId: number;
paymentReceiveId: number;
paymentReceive: IPaymentReceive;
oldPaymentReceive: IPaymentReceive;
authorizedUser: ISystemUser;
trx: Knex.Transaction;
}
export interface IPaymentReceiveEditingPayload {
tenantId: number;
oldPaymentReceive: IPaymentReceive;
paymentReceiveDTO: IPaymentReceiveEditDTO;
trx: Knex.Transaction;
}
export interface IPaymentReceiveDeletingPayload {
tenantId: number;
oldPaymentReceive: IPaymentReceive;
trx: Knex.Transaction;
}
export interface IPaymentReceiveDeletedPayload {
tenantId: number;
paymentReceiveId: number;
oldPaymentReceive: IPaymentReceive;
authorizedUser: ISystemUser;
trx: Knex.Transaction;
}
export enum PaymentReceiveAction {
Create = 'Create',
Edit = 'Edit',
Delete = 'Delete',
View = 'View',
NotifyBySms = 'NotifyBySms',
}
export type IPaymentReceiveGLCommonEntry = Pick<
ILedgerEntry,
| 'debit'
| 'credit'
| 'currencyCode'
| 'exchangeRate'
| 'transactionId'
| 'transactionType'
| 'transactionNumber'
| 'referenceNumber'
| 'date'
| 'userId'
| 'createdAt'
| 'branchId'
>;

View File

@@ -0,0 +1,6 @@
export enum PreferencesAction {
Mutate = 'Mutate'
}

View File

@@ -0,0 +1,179 @@
import {
IFinancialSheetBranchesQuery,
INumberFormatQuery,
} from './FinancialStatements';
export enum ProfitLossAggregateNodeId {
INCOME = 'INCOME',
COS = 'COST_OF_SALES',
GROSS_PROFIT = 'GROSS_PROFIT',
EXPENSES = 'EXPENSES',
OTHER_INCOME = 'OTHER_INCOME',
OTHER_EXPENSES = 'OTHER_EXPENSES',
OPERATING_PROFIT = 'OPERATING_PROFIT',
NET_OTHER_INCOME = 'NET_OTHER_INCOME',
NET_INCOME = 'NET_INCOME',
NET_OPERATING_INCOME = 'NET_OPERATING_INCOME',
}
export enum ProfitLossNodeType {
EQUATION = 'EQUATION',
ACCOUNTS = 'ACCOUNTS',
ACCOUNT = 'ACCOUNT',
AGGREGATE = 'AGGREGATE',
}
interface FinancialDateMeta {
date: Date;
formattedDate: string;
}
export interface IFinancialNodeWithPreviousPeriod {
previousPeriodFromDate?: FinancialDateMeta;
previousPeriodToDate?: FinancialDateMeta;
previousPeriod?: IProfitLossSheetTotal;
previousPeriodChange?: IProfitLossSheetTotal;
previousPeriodPercentage?: IProfitLossSheetPercentage;
}
export interface IFinancialNodeWithPreviousYear {
previousYearFromDate: FinancialDateMeta;
previousYearToDate: FinancialDateMeta;
previousYear?: IProfitLossSheetTotal;
previousYearChange?: IProfitLossSheetTotal;
previousYearPercentage?: IProfitLossSheetPercentage;
}
export interface IFinancialCommonNode {
total: IProfitLossSheetTotal;
}
export interface IFinancialCommonHorizDatePeriodNode {
fromDate: FinancialDateMeta;
toDate: FinancialDateMeta;
total: IProfitLossSheetTotal;
}
export interface IProfitLossSheetQuery extends IFinancialSheetBranchesQuery {
basis: string;
fromDate: Date;
toDate: Date;
numberFormat: INumberFormatQuery;
noneZero: boolean;
noneTransactions: boolean;
accountsIds: number[];
displayColumnsType: 'total' | 'date_periods';
displayColumnsBy: string;
percentageColumn: boolean;
percentageRow: boolean;
percentageIncome: boolean;
percentageExpense: boolean;
previousPeriod: boolean;
previousPeriodAmountChange: boolean;
previousPeriodPercentageChange: boolean;
previousYear: boolean;
previousYearAmountChange: boolean;
previousYearPercentageChange: boolean;
}
export interface IProfitLossSheetTotal {
amount: number;
formattedAmount: string;
currencyCode: string;
}
export interface IProfitLossSheetPercentage {
amount: number;
formattedAmount: string;
}
export interface IProfitLossHorizontalDatePeriodNode
extends IFinancialNodeWithPreviousYear,
IFinancialNodeWithPreviousPeriod {
fromDate: FinancialDateMeta;
toDate: FinancialDateMeta;
total: IProfitLossSheetTotal;
percentageRow?: IProfitLossSheetPercentage;
percentageColumn?: IProfitLossSheetPercentage;
}
export interface IProfitLossSheetCommonNode
extends IFinancialNodeWithPreviousYear,
IFinancialNodeWithPreviousPeriod {
id: ProfitLossAggregateNodeId;
name: string;
children?: IProfitLossSheetNode[];
total: IProfitLossSheetTotal;
horizontalTotals?: IProfitLossHorizontalDatePeriodNode[];
percentageRow?: IProfitLossSheetPercentage;
percentageColumn?: IProfitLossSheetPercentage;
}
export interface IProfitLossSheetAccountNode
extends IProfitLossSheetCommonNode {
nodeType: ProfitLossNodeType.ACCOUNT;
}
export interface IProfitLossSheetEquationNode
extends IProfitLossSheetCommonNode {
nodeType: ProfitLossNodeType.EQUATION;
}
export interface IProfitLossSheetAccountsNode
extends IProfitLossSheetCommonNode {
nodeType: ProfitLossNodeType.ACCOUNTS;
}
export type IProfitLossSheetNode =
| IProfitLossSheetAccountsNode
| IProfitLossSheetEquationNode
| IProfitLossSheetAccountNode;
export interface IProfitLossSheetMeta {
isCostComputeRunning: boolean;
organizationName: string;
baseCurrency: string;
}
// ------------------------------------------------
// # SCHEMA NODES
// ------------------------------------------------
export interface IProfitLossCommonSchemaNode {
id: ProfitLossAggregateNodeId;
name: string;
nodeType: ProfitLossNodeType;
children?: IProfitLossSchemaNode[];
alwaysShow?: boolean;
}
export interface IProfitLossEquationSchemaNode
extends IProfitLossCommonSchemaNode {
nodeType: ProfitLossNodeType.EQUATION;
equation: string;
}
export interface IProfitLossAccountsSchemaNode
extends IProfitLossCommonSchemaNode {
nodeType: ProfitLossNodeType.ACCOUNTS;
accountsTypes: string[];
}
export type IProfitLossSchemaNode =
| IProfitLossCommonSchemaNode
| IProfitLossAccountsSchemaNode
| IProfitLossEquationSchemaNode;
// ------------------------------
// # Table
// ------------------------------
export enum ProfitLossSheetRowType {
AGGREGATE = 'AGGREGATE',
ACCOUNTS = 'ACCOUNTS',
ACCOUNT = 'ACCOUNT',
TOTAL = 'TOTAL',
}

View File

@@ -0,0 +1,160 @@
import { Knex } from 'knex';
export interface IProjectCommonDTO {
contactId: number;
name: string;
deadline: Date;
costEstimate: number;
}
export interface IProject {
id?: number;
name: string;
contactId: number;
deadline: number;
costEstimate: number;
status: string;
}
export interface IProjectCreateDTO extends IProjectCommonDTO {}
export interface IProjectEditDTO extends IProjectCommonDTO {}
export interface IProjectCreatePOJO extends IProject {}
export interface IProjectEditPOJO extends IProject {}
export interface IProjectGetPOJO {
costEstimate: number;
costEstimateFormatted: string;
deadlineFormatted: string;
contactDisplayName: string;
statusFormatted: string;
totalActualHours: number;
totalEstimateHours: number;
totalInvoicedHours: number;
totalBillableHours: number;
totalActualHoursAmount: number;
totalActualHoursAmountFormatted: string;
totalEstimateHoursAmount: number;
totalEstimateHoursAmountFormatted: string;
totalInvoicedHoursAmount: number;
totalInvoicedHoursAmountFormatted: string;
totalBillableHoursAmount: number;
totalBillableHoursAmountFormatted: string;
totalExpenses: number;
totalExpensesFormatted: string;
totalInvoicedExpenses: number;
totalInvoicedExpensesFormatted: string;
totalBillableExpenses: number;
totalBillableExpensesFormatted: string;
totalInvoiced: number;
totalInvoicedFormatted: string;
totalBillable: number;
totalBillableFormatted: string;
}
export interface IProjectCreateEventPayload {
tenantId: number;
projectDTO: IProjectCreateDTO;
}
export interface IProjectCreatedEventPayload {
tenantId: number;
projectDTO: IProjectCreateDTO;
project: IProject;
trx: Knex.Transaction;
}
export interface IProjectCreatingEventPayload {
tenantId: number;
projectDTO: IProjectCreateDTO;
trx: Knex.Transaction;
}
export interface IProjectDeleteEventPayload {
tenantId: number;
projectId: number;
}
export interface IProjectDeletingEventPayload {
tenantId: number;
oldProject: IProject;
trx: Knex.Transaction;
}
export interface IProjectDeletedEventPayload
extends IProjectDeletingEventPayload {}
export interface IProjectEditEventPayload {
tenantId: number;
oldProject: IProject;
projectDTO: IProjectEditDTO;
}
export interface IProjectEditingEventPayload {
tenantId: number;
oldProject: IProject;
projectDTO: IProjectEditDTO;
trx: Knex.Transaction;
}
export interface IProjectEditedEventPayload {
tenantId: number;
project: IProject;
oldProject: IProject;
projectDTO: IProjectEditDTO;
trx: Knex.Transaction;
}
export enum IProjectStatus {
Closed = 'Closed',
InProgress = 'InProgress',
}
export interface ProjectBillableEntriesQuery {
toDate?: Date;
billableType?: ProjectBillableType[];
}
export interface ProjectBillableEntry {
billableType: string;
billableId: number;
billableAmount: number;
billableCurrency: string;
billableTransactionNo: string;
}
export enum ProjectBillableType {
Task = 'Task',
Expense = 'Expense',
Bill = 'Bill',
}
export enum ProjectAction {
CREATE = 'Create',
EDIT = 'Edit',
DELETE = 'Delete',
VIEW = 'View',
}
export enum ProjectTaskAction {
CREATE = 'Create',
EDIT = 'Edit',
DELETE = 'Delete',
VIEW = 'View',
}
export enum ProjectTimeAction {
CREATE = 'Create',
EDIT = 'Edit',
DELETE = 'Delete',
VIEW = 'View',
}

View File

@@ -0,0 +1,54 @@
export class ProjectProfitabilitySummaryQuery {
fromDate: Date;
toDate: Date;
projectsIds?: number[];
}
export interface IProjectProfitabilitySummaryTotal {
amount: number;
formattedAmount: string;
currencyCode: string;
}
export interface IProjectProfitabilitySummaryProjectNode {
projectId: number;
projectName: string;
projectStatus: any;
customerName: string;
customerId: number;
income: IProjectProfitabilitySummaryTotal;
expenses: IProjectProfitabilitySummaryTotal;
profit: IProjectProfitabilitySummaryTotal;
}
export interface IProjectProfitabilitySummaryTotalNode {
income: IProjectProfitabilitySummaryTotal;
expenses: IProjectProfitabilitySummaryTotal;
profit: IProjectProfitabilitySummaryTotal;
}
export interface IProjectProfitabilitySummaryData {
projects: IProjectProfitabilitySummaryProjectNode[];
total: IProjectProfitabilitySummaryTotalNode;
}
export interface IProjectProfitabilitySummaryMeta {
organizationName: string;
baseCurrency: string;
}
export interface IProjectProfitabilitySummaryPOJO {
data: IProjectProfitabilitySummaryData;
query: ProjectProfitabilitySummaryQuery;
meta: IProjectProfitabilitySummaryMeta;
}
export enum IProjectProfitabilitySummaryRowType {
TOTAL = 'TOTAL',
PROJECT = 'PROJECT'
}

View File

@@ -0,0 +1,22 @@
export interface IResource {
id: number,
key: string,
}
export interface IResourceField {
labelName: string,
key: string,
dataType: string,
helpText?: string | null,
default?: string,
predefined: boolean,
active: boolean,
builtin: boolean,
columnable: boolean,
index: number,
dataResource: string,
resourceId: number,
options: any;
}

View File

@@ -0,0 +1,121 @@
import { Ability, RawRuleOf, ForcedSubject } from '@casl/ability';
import Knex from 'knex';
export const actions = [
'manage',
'create',
'read',
'update',
'delete',
] as const;
export const subjects = ['Article', 'all'] as const;
export type Abilities = [
typeof actions[number],
(
| typeof subjects[number]
| ForcedSubject<Exclude<typeof subjects[number], 'all'>>
)
];
export type AppAbility = Ability<Abilities>;
export const createAbility = (rules: RawRuleOf<AppAbility>[]) =>
new Ability<Abilities>(rules);
export interface IRoleDTO {
roleName: string;
roleDescription: string;
permissions: ICreateRolePermissionDTO[];
}
export interface IEditRoleDTO extends IRoleDTO {
permissions: IEditRolePermissionDTO[];
}
export interface IRolePermissionDTO {
subject: string;
ability: string;
value: boolean;
}
export interface ICreateRolePermissionDTO extends IRolePermissionDTO {}
export interface IEditRolePermissionDTO extends IRolePermissionDTO {
permissionId: number;
}
export interface ICreateRoleDTO extends IRoleDTO {}
export interface ISubjectAbilitySchema {
key: string;
label: string;
default?: boolean;
}
export interface ISubjectAbilitiesSchema {
subject: string;
subjectLabel: string;
description?: string;
abilities?: ISubjectAbilitySchema[];
extraAbilities?: ISubjectAbilitySchema[];
}
export interface IRole {
id?: number;
name: string;
slug: string;
description: string;
predefined: boolean;
permissions?: IRolePremission[];
}
export interface IRolePremission {
id?: number;
roleId?: number;
subject: string;
ability: string;
value: boolean;
}
export enum AbilitySubject {
Item = 'Item',
InventoryAdjustment = 'InventoryAdjustment',
Report = 'Report',
Account = 'Account',
SaleInvoice = 'SaleInvoice',
SaleEstimate = 'SaleEstimate',
SaleReceipt = 'SaleReceipt',
PaymentReceive = 'PaymentReceive',
Bill = 'Bill',
PaymentMade = 'PaymentMade',
Expense = 'Expense',
Customer = 'Customer',
Vendor = 'Vendor',
Cashflow = 'Cashflow',
ManualJournal = 'ManualJournal',
Preferences = 'Preferences',
CreditNote = 'CreditNode',
VendorCredit = 'VendorCredit',
Project = 'Project'
}
export interface IRoleCreatedPayload {
tenantId: number;
createRoleDTO: ICreateRoleDTO;
role: IRole;
trx: Knex.Transaction;
}
export interface IRoleEditedPayload {
editRoleDTO: IEditRoleDTO;
oldRole: IRole;
role: IRole;
trx: Knex.Transaction;
}
export interface IRoleDeletedPayload {
oldRole: IRole;
roleId: number;
tenantId: number;
trx: Knex.Transaction;
}

View File

@@ -0,0 +1,126 @@
import { Knex } from 'knex';
import { IItemEntry } from './ItemEntry';
import { IDynamicListFilterDTO } from '@/interfaces/DynamicFilter';
export interface ISaleEstimate {
id?: number;
amount: number;
currencyCode: string;
customerId: number;
estimateDate: Date;
estimateNumber: string;
reference: string;
note: string;
termsConditions: string;
userId: number;
entries: IItemEntry[];
sendToEmail: string;
createdAt?: Date;
deliveredAt: string | Date;
isConvertedToInvoice: boolean;
isDelivered: boolean;
branchId?: number;
warehouseId?: number;
}
export interface ISaleEstimateDTO {
customerId: number;
exchangeRate?: number;
estimateDate?: Date;
reference?: string;
estimateNumber?: string;
entries: IItemEntry[];
note: string;
termsConditions: string;
sendToEmail: string;
delivered: boolean;
branchId?: number;
warehouseId?: number;
}
export interface ISalesEstimatesFilter extends IDynamicListFilterDTO {
stringifiedFilterRoles?: string;
}
export interface ISalesEstimatesService {
validateCustomerHasNoEstimates(
tenantId: number,
customerId: number
): Promise<void>;
}
export interface ISaleEstimateCreatedPayload {
tenantId: number;
saleEstimate: ISaleEstimate;
saleEstimateId: number;
saleEstimateDTO: ISaleEstimateDTO;
trx: Knex.Transaction;
}
export interface ISaleEstimateCreatingPayload {
estimateDTO: ISaleEstimateDTO;
tenantId: number;
trx: Knex.Transaction;
}
export interface ISaleEstimateEditedPayload {
tenantId: number;
estimateId: number;
saleEstimate: ISaleEstimate;
oldSaleEstimate: ISaleEstimate;
trx: Knex.Transaction;
}
export interface ISaleEstimateEditingPayload {
tenantId: number;
oldSaleEstimate: ISaleEstimate;
estimateDTO: ISaleEstimateDTO;
trx: Knex.Transaction;
}
export interface ISaleEstimateDeletedPayload {
tenantId: number;
saleEstimateId: number;
oldSaleEstimate: ISaleEstimate;
trx: Knex.Transaction;
}
export interface ISaleEstimateDeletingPayload {
tenantId: number;
oldSaleEstimate: ISaleEstimate;
trx: Knex.Transaction;
}
export interface ISaleEstimateEventDeliveredPayload {
tenantId: number;
saleEstimate: ISaleEstimate;
trx: Knex.Transaction;
}
export interface ISaleEstimateEventDeliveringPayload {
tenantId: number;
oldSaleEstimate: ISaleEstimate;
trx: Knex.Transaction;
}
export enum SaleEstimateAction {
Create = 'Create',
Edit = 'Edit',
Delete = 'Delete',
View = 'View',
NotifyBySms = 'NotifyBySms',
}
export interface ISaleEstimateApprovingEvent {
tenantId: number;
oldSaleEstimate: ISaleEstimate;
trx: Knex.Transaction;
}
export interface ISaleEstimateApprovedEvent {
tenantId: number;
oldSaleEstimate: ISaleEstimate;
saleEstimate: ISaleEstimate;
trx: Knex.Transaction;
}

View File

@@ -0,0 +1,174 @@
import { Knex } from 'knex';
import { ISystemUser, IAccount } from '@/interfaces';
import { IDynamicListFilter } from '@/interfaces/DynamicFilter';
import { IItemEntry, IItemEntryDTO } from './ItemEntry';
export interface ISaleInvoice {
id: number;
balance: number;
paymentAmount: number;
currencyCode: string;
exchangeRate?: number;
invoiceDate: Date;
dueDate: Date;
dueAmount: number;
overdueDays: number;
customerId: number;
referenceNo: string;
invoiceNo: string;
isWrittenoff: boolean;
entries: IItemEntry[];
deliveredAt: string | Date;
userId: number;
createdAt: Date;
isDelivered: boolean;
warehouseId?: number;
branchId?: number;
projectId?: number;
localAmount?: number;
localWrittenoffAmount?: number;
writtenoffExpenseAccountId?: number;
writtenoffExpenseAccount?: IAccount;
}
export interface ISaleInvoiceDTO {
invoiceDate: Date;
dueDate: Date;
referenceNo: string;
invoiceNo: string;
customerId: number;
exchangeRate?: number;
invoiceMessage: string;
termsConditions: string;
entries: IItemEntryDTO[];
delivered: boolean;
warehouseId?: number | null;
projectId?: number;
branchId?: number | null;
}
export interface ISaleInvoiceCreateDTO extends ISaleInvoiceDTO {
fromEstimateId: number;
}
export interface ISaleInvoiceEditDTO extends ISaleInvoiceDTO {}
export interface ISalesInvoicesFilter extends IDynamicListFilter {
page: number;
pageSize: number;
searchKeyword?: string;
}
export interface ISalesInvoicesService {
validateCustomerHasNoInvoices(
tenantId: number,
customerId: number
): Promise<void>;
}
export interface ISaleInvoiceWriteoffDTO {
expenseAccountId: number;
date: Date;
reason: string;
}
export type InvoiceNotificationType = 'details' | 'reminder';
export interface ISaleInvoiceCreatedPayload {
tenantId: number;
saleInvoice: ISaleInvoice;
saleInvoiceDTO: ISaleInvoiceCreateDTO;
saleInvoiceId: number;
authorizedUser: ISystemUser;
trx: Knex.Transaction;
}
export interface ISaleInvoiceCreatingPaylaod {
tenantId: number;
saleInvoiceDTO: ISaleInvoiceCreateDTO;
trx: Knex.Transaction;
}
export interface ISaleInvoiceEditedPayload {
tenantId: number;
saleInvoice: ISaleInvoice;
oldSaleInvoice: ISaleInvoice;
saleInvoiceDTO: ISaleInvoiceEditDTO;
saleInvoiceId: number;
authorizedUser: ISystemUser;
trx: Knex.Transaction;
}
export interface ISaleInvoiceEditingPayload {
tenantId: number;
oldSaleInvoice: ISaleInvoice;
saleInvoiceDTO: ISaleInvoiceEditDTO;
trx: Knex.Transaction;
}
export interface ISaleInvoiceDeletePayload {
tenantId: number;
saleInvoice: ISaleInvoice;
saleInvoiceId: number;
trx: Knex.Transaction;
}
export interface ISaleInvoiceDeletedPayload {
tenantId: number;
oldSaleInvoice: ISaleInvoice;
saleInvoiceId: number;
trx: Knex.Transaction;
}
export interface ISaleInvoiceWriteoffCreatePayload {
tenantId: number;
saleInvoiceId: number;
saleInvoice: ISaleInvoice;
writeoffDTO: ISaleInvoiceWriteoffDTO;
trx: Knex.Transaction;
}
export interface ISaleInvoiceWriteoffCreatedPayload {
tenantId: number;
saleInvoiceId: number;
saleInvoice: ISaleInvoice;
writeoffDTO: ISaleInvoiceCreatedPayload;
}
export interface ISaleInvoiceWrittenOffCancelPayload {
tenantId: number;
saleInvoice: ISaleInvoice;
trx: Knex.Transaction;
}
export interface ISaleInvoiceWrittenOffCanceledPayload {
tenantId: number;
saleInvoice: ISaleInvoice;
trx: Knex.Transaction;
}
export interface ISaleInvoiceEventDeliveredPayload {
tenantId: number;
saleInvoiceId: number;
saleInvoice: ISaleInvoice;
}
export interface ISaleInvoiceDeliveringPayload {
tenantId: number;
oldSaleInvoice: ISaleInvoice;
trx: Knex.Transaction;
}
export enum SaleInvoiceAction {
Create = 'Create',
Edit = 'Edit',
Delete = 'Delete',
View = 'View',
Writeoff = 'Writeoff',
NotifyBySms = 'NotifyBySms',
}

View File

@@ -0,0 +1,136 @@
import { Knex } from 'knex';
import { IItemEntry } from './ItemEntry';
export interface ISaleReceipt {
id?: number;
customerId: number;
depositAccountId: number;
receiptDate: Date;
sendToEmail: string;
referenceNo: string;
receiptMessage: string;
receiptNumber: string;
amount: number;
currencyCode: string;
exchangeRate: number;
statement: string;
closedAt: Date | string;
createdAt: Date;
updatedAt: Date;
userId: number;
branchId?: number;
warehouseId?: number;
localAmount?: number;
entries?: IItemEntry[];
}
export interface ISalesReceiptsFilter {}
export interface ISaleReceiptDTO {
customerId: number;
exchangeRate?: number;
depositAccountId: number;
receiptDate: Date;
sendToEmail: string;
referenceNo?: string;
receiptNumber?: string;
receiptMessage: string;
statement: string;
closed: boolean;
entries: any[];
branchId?: number;
}
export interface ISalesReceiptsService {
createSaleReceipt(
tenantId: number,
saleReceiptDTO: ISaleReceiptDTO
): Promise<void>;
editSaleReceipt(tenantId: number, saleReceiptId: number): Promise<void>;
deleteSaleReceipt(tenantId: number, saleReceiptId: number): Promise<void>;
salesReceiptsList(
tennatid: number,
salesReceiptsFilter: ISalesReceiptsFilter
): Promise<{
salesReceipts: ISaleReceipt[];
pagination: IPaginationMeta;
filterMeta: IFilterMeta;
}>;
validateCustomerHasNoReceipts(
tenantId: number,
customerId: number
): Promise<void>;
}
export interface ISaleReceiptSmsDetails {
customerName: string;
customerPhoneNumber: string;
smsMessage: string;
}
export interface ISaleReceiptCreatingPayload {
saleReceiptDTO: ISaleReceiptDTO;
tenantId: number;
trx: Knex.Transaction;
}
export interface ISaleReceiptCreatedPayload {
tenantId: number;
saleReceipt: ISaleReceipt;
saleReceiptId: number;
trx: Knex.Transaction;
}
export interface ISaleReceiptEditedPayload {
tenantId: number;
oldSaleReceipt: number;
saleReceipt: ISaleReceipt;
saleReceiptId: number;
trx: Knex.Transaction;
}
export interface ISaleReceiptEditingPayload {
tenantId: number;
oldSaleReceipt: ISaleReceipt;
saleReceiptDTO: ISaleReceiptDTO;
trx: Knex.Transaction;
}
export interface ISaleReceiptEventClosedPayload {
tenantId: number;
saleReceiptId: number;
saleReceipt: ISaleReceipt;
trx: Knex.Transaction;
}
export interface ISaleReceiptEventClosingPayload {
tenantId: number;
oldSaleReceipt: ISaleReceipt;
trx: Knex.Transaction;
}
export interface ISaleReceiptEventDeletedPayload {
tenantId: number;
saleReceiptId: number;
oldSaleReceipt: ISaleReceipt;
trx: Knex.Transaction;
}
export enum SaleReceiptAction {
Create = 'Create',
Edit = 'Edit',
Delete = 'Delete',
View = 'View',
NotifyBySms = 'NotifyBySms',
}
export interface ISaleReceiptDeletingPayload {
tenantId: number;
oldSaleReceipt: ISaleReceipt;
trx: Knex.Transaction;
}

View File

@@ -0,0 +1,45 @@
import {
INumberFormatQuery,
} from './FinancialStatements';
export interface ISalesByItemsReportQuery {
fromDate: Date | string;
toDate: Date | string;
itemsIds: number[],
numberFormat: INumberFormatQuery;
noneTransactions: boolean;
onlyActive: boolean;
};
export interface ISalesByItemsSheetMeta {
organizationName: string,
baseCurrency: string,
};
export interface ISalesByItemsItem {
id: number,
name: string,
code: string,
quantitySold: number,
soldCost: number,
averageSellPrice: number,
quantitySoldFormatted: string,
soldCostFormatted: string,
averageSellPriceFormatted: string,
currencyCode: string,
};
export interface ISalesByItemsTotal {
quantitySold: number,
soldCost: number,
quantitySoldFormatted: string,
soldCostFormatted: string,
currencyCode: string,
};
export type ISalesByItemsSheetStatement = {
items: ISalesByItemsItem[],
total: ISalesByItemsTotal
} | {};

View File

@@ -0,0 +1,34 @@
import { ISystemUser } from '@/interfaces';
export interface IOrganizationSetupDTO {
organizationName: string;
baseCurrency: string;
fiscalYear: string;
industry: string;
timeZone: string;
}
export interface IOrganizationBuildDTO {
name: string;
industry: string;
location: string;
baseCurrency: string;
timezone: string;
fiscalYear: string;
dateFormat?: string;
}
export interface IOrganizationUpdateDTO {
name: string;
location: string;
baseCurrency: string;
timezone: string;
fiscalYear: string;
industry: string;
}
export interface IOrganizationBuildEventPayload {
tenantId: number;
buildDTO: IOrganizationBuildDTO;
systemUser: ISystemUser;
}

View File

@@ -0,0 +1,51 @@
export interface ISmsNotificationAllowedVariable {
variable: string;
description: string;
}
export interface ISmsNotificationDefined {
notificationLabel: string;
notificationDescription: string;
key: string;
module: string;
moduleFormatted: string;
allowedVariables: ISmsNotificationAllowedVariable[];
defaultSmsMessage: string;
defaultIsNotificationEnabled: boolean;
}
export interface ISmsNotificationMeta {
notificationLabel: string;
notificationDescription: string;
key: string;
module: string;
moduleFormatted: string;
allowedVariables: ISmsNotificationAllowedVariable[];
smsMessage: string;
isNotificationEnabled: boolean;
}
export interface IEditSmsNotificationDTO {
notificationKey: string;
messageText: string;
isNotificationEnabled: boolean;
}
export interface ISaleInvoiceSmsDetailsDTO {
notificationKey: 'details' | 'reminder';
}
export interface ISaleInvoiceSmsDetails {
customerName: string;
customerPhoneNumber: string;
smsMessage: string;
}
export enum SMS_NOTIFICATION_KEY {
SALE_INVOICE_DETAILS = 'sale-invoice-details',
SALE_INVOICE_REMINDER = 'sale-invoice-reminder',
SALE_ESTIMATE_DETAILS = 'sale-estimate-details',
SALE_RECEIPT_DETAILS = 'sale-receipt-details',
PAYMENT_RECEIVE_DETAILS = 'payment-receive-details',
CUSTOMER_BALANCE = 'customer-balance',
}

View File

@@ -0,0 +1,31 @@
export interface IColumnMapperMeta {
key: string;
accessor?: string;
value?: string;
}
export interface ITableCell {
value: string;
key: string;
}
export type ITableRow = {
rows: ITableCell[];
};
export interface ITableColumn {
key: string;
label: string;
cellIndex?: number;
children?: ITableColumn[];
}
export interface ITable {
columns: ITableColumn[];
data: ITableRow[];
}
export interface ITableColumnAccessor {
key: string;
accessor: string;
}

View File

@@ -0,0 +1,78 @@
import { Knex } from 'knex';
import { ProjectTaskChargeType } from '@/services/Projects/Tasks/constants';
export interface IProjectTask {
id?: number;
name: string;
chargeType: string;
estimateHours: number;
actualHours: number;
invoicedHours: number;
billableHours: number;
projectId: number;
billableAmount?: number;
createdAt?: Date|string;
}
export interface BaseTaskDTO {
name: string;
rate: number;
chargeType: ProjectTaskChargeType;
estimateHours: number;
}
export interface ICreateTaskDTO extends BaseTaskDTO {}
export interface IEditTaskDTO extends BaseTaskDTO {}
export interface IProjectTaskCreatePOJO extends IProjectTask {}
export interface IProjectTaskEditPOJO extends IProjectTask {}
export interface IProjectTaskGetPOJO extends IProjectTask {}
export interface ITaskCreateEventPayload {
tenantId: number;
taskDTO: ICreateTaskDTO;
}
export interface ITaskCreatedEventPayload {
tenantId: number;
taskDTO: ICreateTaskDTO;
task: any;
trx: Knex.Transaction;
}
export interface ITaskCreatingEventPayload {
tenantId: number;
taskDTO: ICreateTaskDTO;
trx: Knex.Transaction;
}
export interface ITaskDeleteEventPayload {
tenantId: number;
taskId: number;
}
export interface ITaskDeletingEventPayload {
tenantId: number;
oldTask: IProjectTask;
trx: Knex.Transaction;
}
export interface ITaskDeletedEventPayload {
tenantId: number;
oldTask: IProjectTask;
task: IProjectTask;
trx: Knex.Transaction;
}
export interface ITaskEditEventPayload {
tenantId: number;
taskId: number;
taskDTO: IEditTaskDTO;
}
export interface ITaskEditingEventPayload {
tenantId: number;
oldTask: IProjectTask;
taskDTO: IEditTaskDTO;
trx: Knex.Transaction;
}
export interface ITaskEditedEventPayload {
tenantId: number;
oldTask: IProjectTask;
task: IProjectTask;
taskDTO: IEditTaskDTO;
trx: Knex.Transaction;
}

View File

@@ -0,0 +1,55 @@
import { Knex } from 'knex';
export interface ITenantMetadata {
currencyCode: string;
}
export interface ITenant {
id: number,
organizationId: string,
initializedAt: Date|null,
seededAt: Date|null,
builtAt: Date|null,
createdAt: Date|null,
metadata?: ITenantMetadata
}
export interface ITenantDBManager {
constructor();
databaseExists(tenant: ITenant): Promise<boolean>;
createDatabase(tenant: ITenant): Promise<void>;
migrate(tenant: ITenant): Promise<void>;
seed(tenant: ITenant): Promise<void>;
setupKnexInstance(tenant: ITenant): Knex;
getKnexInstance(tenantId: number): Knex;
}
export interface ITenantManager {
tenantDBManager: ITenantDBManager;
tenant: ITenant;
constructor(): void;
createTenant(): Promise<ITenant>;
createDatabase(tenant: ITenant): Promise<void>;
hasDatabase(tenant: ITenant): Promise<boolean>;
dropTenant(tenant: ITenant): Promise<void>;
migrateTenant(tenant: ITenant): Promise<void>;
seedTenant(tenant: ITenant): Promise<void>;
setupKnexInstance(tenant: ITenant): Knex;
getKnexInstance(tenantId: number): Knex;
}
export interface ISystemService {
cache();
repositories();
knex();
dbManager();
}

View File

@@ -0,0 +1,72 @@
import { Knex } from 'knex';
export interface IProjectTime {
id?: number;
duration: number;
description: string;
date: string | Date;
taskId: number;
projectId: number;
}
export interface BaseProjectTimeDTO {
name: string;
rate: number;
chargeType: string;
estimateHours: number;
}
export interface IProjectTimeCreateDTO extends BaseProjectTimeDTO {}
export interface IProjectTimeEditDTO extends BaseProjectTimeDTO {}
export interface IProjectTimeCreatePOJO extends IProjectTime {}
export interface IProjectTimeEditPOJO extends IProjectTime{}
export interface IProjectTimeGetPOJO extends IProjectTime{}
export interface IProjectTimeCreateEventPayload {
tenantId: number;
timeDTO: IProjectTimeCreateDTO;
}
export interface IProjectTimeCreatedEventPayload {
tenantId: number;
timeDTO: IProjectTimeEditDTO;
time: any;
trx: Knex.Transaction;
}
export interface IProjectTimeCreatingEventPayload {
tenantId: number;
timeDTO: IProjectTimeEditDTO;
trx: Knex.Transaction;
}
export interface IProjectTimeDeleteEventPayload {
tenantId: number;
timeId: number;
trx?: Knex.Transaction;
}
export interface IProjectTimeDeletingEventPayload {
tenantId: number;
oldTime: IProjectTime;
trx: Knex.Transaction;
}
export interface IProjectTimeDeletedEventPayload {
tenantId: number;
oldTime: IProjectTime;
trx: Knex.Transaction;
}
export interface IProjectTimeEditEventPayload {
tenantId: number;
oldTime: IProjectTime;
timeDTO: IProjectTimeEditDTO;
}
export interface IProjectTimeEditingEventPayload {
tenantId: number;
oldTime: IProjectTime;
timeDTO: IProjectTimeEditDTO;
trx: Knex.Transaction;
}
export interface IProjectTimeEditedEventPayload {
tenantId: number;
oldTime: IProjectTime;
time: IProjectTime;
timeDTO: IProjectTimeEditDTO;
trx: Knex.Transaction;
}

View File

@@ -0,0 +1,33 @@
import { INumberFormatQuery } from './FinancialStatements';
export interface ITransactionsByContactsAmount {
amount: number;
formattedAmount: string;
currencyCode: string;
}
export interface ITransactionsByContactsTransaction {
date: string|Date,
credit: ITransactionsByContactsAmount;
debit: ITransactionsByContactsAmount;
accountName: string,
runningBalance: ITransactionsByContactsAmount;
currencyCode: string;
transactionType: string;
transactionNumber: string;
createdAt: string|Date,
};
export interface ITransactionsByContactsContact {
openingBalance: ITransactionsByContactsAmount,
closingBalance: ITransactionsByContactsAmount,
transactions: ITransactionsByContactsTransaction[],
}
export interface ITransactionsByContactsFilter {
fromDate: Date|string;
toDate: Date|string;
numberFormat: INumberFormatQuery;
noneTransactions: boolean;
noneZero: boolean;
}

View File

@@ -0,0 +1,36 @@
import {
ITransactionsByContactsAmount,
ITransactionsByContactsTransaction,
ITransactionsByContactsFilter,
} from './TransactionsByContacts';
export interface ITransactionsByCustomersAmount
extends ITransactionsByContactsAmount {}
export interface ITransactionsByCustomersTransaction
extends ITransactionsByContactsTransaction {}
export interface ITransactionsByCustomersCustomer {
customerName: string;
openingBalance: ITransactionsByCustomersAmount;
closingBalance: ITransactionsByCustomersAmount;
transactions: ITransactionsByCustomersTransaction[];
}
export interface ITransactionsByCustomersFilter
extends ITransactionsByContactsFilter {
customersIds: number[];
}
export type ITransactionsByCustomersData = ITransactionsByCustomersCustomer[];
export interface ITransactionsByCustomersStatement {
data: ITransactionsByCustomersData;
}
export interface ITransactionsByCustomersService {
transactionsByCustomers(
tenantId: number,
filter: ITransactionsByCustomersFilter
): Promise<ITransactionsByCustomersStatement>;
}

View File

@@ -0,0 +1,31 @@
export interface ITransactionsByReferenceQuery {
referenceType: string;
referenceId: string;
}
export interface ITransactionsByReferenceAmount {
amount: number;
formattedAmount: string;
currencyCode: string;
}
export interface ITransactionsByReferenceTransaction{
credit: ITransactionsByReferenceAmount;
debit: ITransactionsByReferenceAmount;
contactType: string;
formattedContactType: string;
contactId: number;
referenceType: string;
formattedReferenceType: string;
referenceId: number;
accountName: string;
accountCode: string;
accountId: number;
}

View File

@@ -0,0 +1,36 @@
import {
ITransactionsByContactsAmount,
ITransactionsByContactsTransaction,
ITransactionsByContactsFilter,
} from './TransactionsByContacts';
export interface ITransactionsByVendorsAmount
extends ITransactionsByContactsAmount {}
export interface ITransactionsByVendorsTransaction
extends ITransactionsByContactsTransaction {}
export interface ITransactionsByVendorsVendor {
vendorName: string;
openingBalance: ITransactionsByVendorsAmount;
closingBalance: ITransactionsByVendorsAmount;
transactions: ITransactionsByVendorsTransaction[];
}
export interface ITransactionsByVendorsFilter
extends ITransactionsByContactsFilter {
vendorsIds: number[];
}
export type ITransactionsByVendorsData = ITransactionsByVendorsVendor[];
export interface ITransactionsByVendorsStatement {
data: ITransactionsByVendorsData;
}
export interface ITransactionsByVendorsService {
transactionsByVendors(
tenantId: number,
filter: ITransactionsByVendorsFilter
): Promise<ITransactionsByVendorsStatement>;
}

View File

@@ -0,0 +1,71 @@
export interface ITransactionsLockingAllDTO {
lockToDate: Date;
reason: string;
}
export interface ITransactionsLockingCashflowDTO {}
export interface ITransactionsLockingSalesDTO {}
export interface ITransactionsLockingPurchasesDTO {}
export enum TransactionsLockingGroup {
All = 'all',
Sales = 'sales',
Purchases = 'purchases',
Financial = 'financial',
}
export enum TransactionsLockingType {
Partial = 'partial',
All = 'all',
}
export interface ITransactionsLockingPartialUnlocked {
tenantId: number;
module: TransactionsLockingGroup;
transactionLockingDTO: ITransactionsLockingAllDTO;
}
export interface ITransactionsLockingCanceled {
tenantId: number;
module: TransactionsLockingGroup;
cancelLockingDTO: ICancelTransactionsLockingDTO;
}
export interface ITransactionLockingPartiallyDTO {
unlockFromDate: Date;
unlockToDate: Date;
reason: string;
}
export interface ICancelTransactionsLockingDTO {
reason: string;
}
export interface ITransactionMeta {
isEnabled: boolean;
isPartialUnlock: boolean;
lockToDate: Date;
unlockFromDate: string;
unlockToDate: string;
lockReason: string;
unlockReason: string;
partialUnlockReason: string;
}
export interface ITransactionLockingMetaPOJO {
module: string;
formattedModule: string;
description: string;
formattedLockToDate: Date;
formattedUnlockFromDate: string;
formattedunlockToDate: string;
}
export interface ITransactionsLockingListPOJO {
lockingType: string;
all: ITransactionLockingMetaPOJO;
modules: ITransactionLockingMetaPOJO[];
}
export interface ITransactionsLockingSchema {
module: TransactionsLockingGroup;
formattedModule: string;
description: string;
}

View File

@@ -0,0 +1,49 @@
import { INumberFormatQuery } from './FinancialStatements';
export interface ITrialBalanceSheetQuery {
fromDate: Date | string;
toDate: Date | string;
numberFormat: INumberFormatQuery;
basis: 'cash' | 'accural';
noneZero: boolean;
noneTransactions: boolean;
onlyActive: boolean;
accountIds: number[];
branchesIds?: number[];
}
export interface ITrialBalanceTotal {
credit: number;
debit: number;
balance: number;
currencyCode: string;
formattedCredit: string;
formattedDebit: string;
formattedBalance: string;
}
export interface ITrialBalanceSheetMeta {
isCostComputeRunning: boolean;
organizationName: string;
baseCurrency: string;
}
export interface ITrialBalanceAccount extends ITrialBalanceTotal {
id: number;
parentAccountId: number;
name: string;
code: string;
accountNormal: string;
}
export type ITrialBalanceSheetData = {
accounts: ITrialBalanceAccount[];
total: ITrialBalanceTotal;
};
export interface ITrialBalanceStatement {
data: ITrialBalanceSheetData;
query: ITrialBalanceSheetQuery;
meta: ITrialBalanceSheetMeta;
}

View File

@@ -0,0 +1,157 @@
import { AnyObject } from '@casl/ability/dist/types/types';
import { ITenant } from '@/interfaces';
import { Model } from 'objection';
export interface ISystemUser extends Model {
id: number;
firstName: string;
lastName: string;
active: boolean;
password: string;
email: string;
phoneNumber: string;
roleId: number;
tenantId: number;
inviteAcceptAt: Date;
lastLoginAt: Date;
deletedAt: Date;
createdAt: Date;
updatedAt: Date;
}
export interface ISystemUserDTO {
firstName: string;
lastName: string;
password: string;
phoneNumber: string;
active: boolean;
email: string;
roleId?: number;
}
export interface IEditUserDTO {
firstName: string;
lastName: string;
phoneNumber: string;
active: boolean;
email: string;
roleId: number;
}
export interface IInviteUserInput {
firstName: string;
lastName: string;
phoneNumber: string;
password: string;
}
export interface IUserInvite {
id: number;
email: string;
token: string;
tenantId: number;
userId: number;
createdAt?: Date;
}
export interface IInviteUserService {
acceptInvite(token: string, inviteUserInput: IInviteUserInput): Promise<void>;
resendInvite(
tenantId: number,
userId: number,
authorizedUser: ISystemUser
): Promise<{
invite: IUserInvite;
}>;
sendInvite(
tenantId: number,
email: string,
authorizedUser: ISystemUser
): Promise<{
invite: IUserInvite;
}>;
checkInvite(
token: string
): Promise<{ inviteToken: IUserInvite; orgName: object }>;
}
export interface ITenantUser {}
export interface ITenantUserEditedPayload {
tenantId: number;
userId: number;
editUserDTO: IEditUserDTO;
tenantUser: ITenantUser;
oldTenantUser: ITenantUser;
}
export interface ITenantUserActivatedPayload {
tenantId: number;
userId: number;
authorizedUser: ISystemUser;
tenantUser: ITenantUser;
}
export interface ITenantUserInactivatedPayload {
tenantId: number;
userId: number;
authorizedUser: ISystemUser;
tenantUser: ITenantUser;
}
export interface ITenantUserDeletedPayload {
tenantId: number;
userId: number;
tenantUser: ITenantUser;
}
export interface ITenantUser {
id?: number;
firstName: string;
lastName: string;
phoneNumber: string;
active: boolean;
email: string;
roleId?: number;
systemUserId: number;
invitedAt: Date | null;
inviteAcceptedAt: Date | null;
}
export interface IUserInvitedEventPayload {
inviteToken: string;
authorizedUser: ISystemUser;
tenantId: number;
user: ITenantUser;
}
export interface IUserInviteTenantSyncedEventPayload{
invite: IUserInvite;
authorizedUser: ISystemUser;
tenantId: number;
user: ITenantUser;
}
export interface IUserInviteResendEventPayload {
inviteToken: string;
authorizedUser: ISystemUser;
tenantId: number;
user: ITenantUser;
}
export interface IAcceptInviteEventPayload {
inviteToken: IUserInvite;
user: ISystemUser;
inviteUserDTO: IInviteUserInput;
}
export interface ICheckInviteEventPayload {
inviteToken: IUserInvite;
tenant: ITenant
}
export interface IUserSendInviteDTO {
email: string;
roleId: number;
}

View File

@@ -0,0 +1,50 @@
import { INumberFormatQuery } from './FinancialStatements';
export interface IVendorBalanceSummaryQuery {
asDate: Date;
vendorsIds: number[],
numberFormat: INumberFormatQuery;
percentageColumn: boolean;
noneTransactions: boolean;
noneZero: boolean;
}
export interface IVendorBalanceSummaryAmount {
amount: number;
formattedAmount: string;
currencyCode: string;
}
export interface IVendorBalanceSummaryPercentage {
amount: number;
formattedAmount: string;
}
export interface IVendorBalanceSummaryVendor {
id: number;
vendorName: string;
total: IVendorBalanceSummaryAmount;
percentageOfColumn?: IVendorBalanceSummaryPercentage;
}
export interface IVendorBalanceSummaryTotal {
total: IVendorBalanceSummaryAmount;
percentageOfColumn?: IVendorBalanceSummaryPercentage;
}
export interface IVendorBalanceSummaryData {
vendors: IVendorBalanceSummaryVendor[];
total: IVendorBalanceSummaryTotal;
}
export interface IVendorBalanceSummaryStatement {
data: IVendorBalanceSummaryData;
columns: {};
query: IVendorBalanceSummaryQuery;
}
export interface IVendorBalanceSummaryService {
vendorBalanceSummary(
tenantId: number,
query: IVendorBalanceSummaryQuery,
): Promise<IVendorBalanceSummaryStatement>;
}

View File

@@ -0,0 +1,240 @@
import { IDynamicListFilter, IItemEntry, IItemEntryDTO } from '@/interfaces';
import { Knex } from 'knex';
export enum VendorCreditAction {
Create = 'Create',
Edit = 'Edit',
Delete = 'Delete',
View = 'View',
Refund = 'Refund',
}
export interface IVendorCredit {
id: number | null;
vendorId: number;
amount: number;
localAmount?: number;
currencyCode: string;
exchangeRate: number;
vendorCreditNumber: string;
vendorCreditDate: Date;
referenceNo: string;
entries?: IItemEntry[];
openedAt: Date | null;
isOpen: boolean;
isPublished: boolean;
isClosed: boolean;
isDraft: boolean;
creditsRemaining: number;
branchId?: number;
warehouseId?: number,
}
export interface IVendorCreditEntryDTO extends IItemEntryDTO {}
export interface IRefundVendorCredit {
id?: number | null;
date: Date;
referenceNo: string;
amount: number;
currencyCode: string;
exchangeRate: number;
depositAccountId: number;
description: string;
vendorCreditId: number;
createdAt: Date | null;
userId: number;
branchId?: number;
vendorCredit?: IVendorCredit
}
export interface IVendorCreditDTO {
vendorId: number;
exchangeRate?: number;
vendorCreditNumber: string;
referenceNo: string;
vendorCreditDate: Date;
note: string;
open: boolean;
entries: IVendorCreditEntryDTO[];
branchId?: number;
warehouseId?: number;
}
export interface IVendorCreditCreateDTO extends IVendorCreditDTO {}
export interface IVendorCreditEditDTO extends IVendorCreditDTO {}
export interface IVendorCreditCreatePayload {
tenantId: number;
refundVendorCreditDTO: IRefundVendorCreditDTO;
vendorCreditId: number;
}
export interface IVendorCreditCreatingPayload {
tenantId: number;
vendorCredit: IVendorCredit;
vendorCreditId: number;
vendorCreditCreateDTO: IVendorCreditCreateDTO;
trx: Knex.Transaction;
}
export interface IVendorCreditCreatedPayload {
tenantId: number;
vendorCredit: IVendorCredit;
vendorCreditCreateDTO: IVendorCreditCreateDTO;
trx: Knex.Transaction;
}
export interface IVendorCreditCreatedPayload {}
export interface IVendorCreditDeletedPayload {
trx: Knex.Transaction;
tenantId: number;
vendorCreditId: number;
oldVendorCredit: IVendorCredit;
}
export interface IVendorCreditDeletingPayload {
trx: Knex.Transaction;
tenantId: number;
oldVendorCredit: IVendorCredit;
}
export interface IVendorCreditsQueryDTO extends IDynamicListFilter {
page: number;
pageSize: number;
searchKeyword?: string;
}
export interface IVendorCreditEditingPayload {
tenantId: number;
oldVendorCredit: IVendorCredit;
vendorCreditDTO: IVendorCreditEditDTO;
trx: Knex.Transaction;
}
export interface IVendorCreditEditedPayload {
tenantId: number;
oldVendorCredit: IVendorCredit;
vendorCredit: IVendorCredit;
vendorCreditId: number;
trx: Knex.Transaction;
}
export interface IRefundVendorCreditDTO {
amount: number;
exchangeRate?: number;
depositAccountId: number;
description: string;
date: Date;
branchId?: number;
}
export interface IRefundVendorCreditDeletedPayload {
trx: Knex.Transaction;
refundCreditId: number;
oldRefundCredit: IRefundVendorCredit;
tenantId: number;
}
export interface IRefundVendorCreditDeletePayload {
trx: Knex.Transaction;
refundCreditId: number;
oldRefundCredit: IRefundVendorCredit;
tenantId: number;
}
export interface IRefundVendorCreditDeletingPayload {
trx: Knex.Transaction;
refundCreditId: number;
oldRefundCredit: IRefundVendorCredit;
tenantId: number;
}
export interface IRefundVendorCreditCreatingPayload {
trx: Knex.Transaction;
vendorCredit: IVendorCredit;
refundVendorCreditDTO: IRefundVendorCreditDTO;
tenantId: number;
}
export interface IRefundVendorCreditCreatedPayload {
refundVendorCredit: IRefundVendorCredit;
vendorCredit: IVendorCredit;
trx: Knex.Transaction;
tenantId: number;
}
export interface IRefundVendorCreditPOJO {}
export interface IApplyCreditToBillEntryDTO {
amount: number;
billId: number;
}
export interface IApplyCreditToBillsDTO {
entries: IApplyCreditToBillEntryDTO[];
}
export interface IVendorCreditOpenedPayload {
tenantId: number;
vendorCreditId: number;
vendorCredit: IVendorCredit;
trx: Knex.Transaction;
}
export interface IVendorCreditOpenPayload {
tenantId: number;
vendorCreditId: number;
oldVendorCredit: IVendorCredit;
}
export interface IVendorCreditOpeningPayload {
tenantId: number;
vendorCreditId: number;
oldVendorCredit: IVendorCredit;
trx: Knex.Transaction;
}
export interface IVendorCreditApplyToBillsCreatedPayload {
tenantId: number;
vendorCredit: IVendorCredit;
vendorCreditAppliedBills: IVendorCreditAppliedBill[];
trx: Knex.Transaction;
}
export interface IVendorCreditApplyToBillsCreatingPayload {
trx: Knex.Transaction;
}
export interface IVendorCreditApplyToBillsCreatePayload {
trx: Knex.Transaction;
}
export interface IVendorCreditApplyToBillDeletedPayload {
tenantId: number;
vendorCredit: IVendorCredit;
oldCreditAppliedToBill: IVendorCreditAppliedBill;
trx: Knex.Transaction;
}
export interface IVendorCreditApplyToInvoiceDTO {
amount: number;
billId: number;
}
export interface IVendorCreditApplyToInvoicesDTO {
entries: IVendorCreditApplyToInvoiceDTO[];
}
export interface IVendorCreditApplyToInvoiceModel {
billId: number;
amount: number;
vendorCreditId: number;
}
export interface IVendorCreditApplyToInvoicesModel {
entries: IVendorCreditApplyToInvoiceModel[];
amount: number;
}
export interface IVendorCreditAppliedBill {
billId: number;
amount: number;
vendorCreditId: number;
}

View File

@@ -0,0 +1,68 @@
export interface IView {
id: number,
name: string,
slug: string;
predefined: boolean,
resourceModel: string,
favourite: boolean,
rolesLogicExpression: string,
roles: IViewRole[],
columns: IViewHasColumn[],
};
export interface IViewRole {
id: number,
fieldKey: string,
index: number,
comparator: string,
value: string,
viewId: number,
};
export interface IViewHasColumn {
id :number,
viewId: number,
fieldId: number,
index: number,
}
export interface IViewRoleDTO {
index: number,
fieldKey: string,
comparator: string,
value: string,
viewId: number,
}
export interface IViewColumnDTO {
id: number,
index: number,
viewId: number,
fieldKey: string,
};
export interface IViewDTO {
name: string,
logicExpression: string,
resourceModel: string,
roles: IViewRoleDTO[],
columns: IViewColumnDTO[],
};
export interface IViewEditDTO {
name: string,
logicExpression: string,
roles: IViewRoleDTO[],
columns: IViewColumnDTO[],
};
export interface IViewsService {
listResourceViews(tenantId: number, resourceModel: string): Promise<IView[]>;
newView(tenantId: number, viewDTO: IViewDTO): Promise<void>;
editView(tenantId: number, viewId: number, viewEditDTO: IViewEditDTO): Promise<void>;
deleteView(tenantId: number, viewId: number): Promise<void>;
}

View File

@@ -0,0 +1,212 @@
import { Knex } from 'knex';
export interface IWarehouse {
id?: number;
}
export interface IWarehouseTransfer {
id?: number;
date: Date;
fromWarehouseId: number;
toWarehouseId: number;
reason?: string;
transactionNumber: string;
entries: IWarehouseTransferEntry[];
transferInitiatedAt?: Date;
transferDeliveredAt?: Date;
isInitiated?: boolean;
isTransferred?: boolean;
}
export interface IWarehouseTransferEntry {
id?: number;
index?: number;
itemId: number;
description: string;
quantity: number;
cost: number;
}
export interface ICreateWarehouseDTO {
name: string;
code: string;
city?: string;
country?: string;
address?: string;
primary?: boolean;
}
export interface IEditWarehouseDTO {
name: string;
code: string;
city: string;
country: string;
address: string;
}
export interface IWarehouseTransferEntryDTO {
index?: number;
itemId: number;
description: string;
quantity: number;
cost?: number;
}
export interface ICreateWarehouseTransferDTO {
fromWarehouseId: number;
toWarehouseId: number;
transactionNumber: string;
date: Date;
transferInitiated: boolean;
transferDelivered: boolean;
entries: IWarehouseTransferEntryDTO[];
}
export interface IEditWarehouseTransferDTO {
fromWarehouseId: number;
toWarehouseId: number;
transactionNumber: string;
date: Date;
entries: {
id?: number;
itemId: number;
description: string;
quantity: number;
}[];
}
export interface IWarehouseEditPayload {
tenantId: number;
warehouseId: number;
warehouseDTO: IEditWarehouseDTO;
trx: Knex.Transaction;
}
export interface IWarehouseEditedPayload {
tenantId: number;
warehouse: IWarehouse;
warehouseDTO: IEditWarehouseDTO;
trx: Knex.Transaction;
}
export interface IWarehouseDeletePayload {
tenantId: number;
warehouseId: number;
trx: Knex.Transaction;
}
export interface IWarehouseDeletedPayload {
tenantId: number;
warehouseId: number;
trx: Knex.Transaction;
}
export interface IWarehouseCreatePayload {
tenantId: number;
warehouseDTO: ICreateWarehouseDTO;
trx: Knex.Transaction;
}
export interface IWarehouseCreatedPayload {
tenantId: number;
warehouse: IWarehouse;
warehouseDTO: ICreateWarehouseDTO;
trx: Knex.Transaction;
}
export interface IWarehouseTransferCreate {
trx: Knex.Transaction;
warehouseTransferDTO: ICreateWarehouseTransferDTO;
tenantId: number;
}
export interface IWarehouseTransferCreated {
trx: Knex.Transaction;
warehouseTransfer: IWarehouseTransfer;
warehouseTransferDTO: ICreateWarehouseTransferDTO;
tenantId: number;
}
export interface IWarehouseTransferEditPayload {
tenantId: number;
editWarehouseDTO: IEditWarehouseTransferDTO;
oldWarehouseTransfer: IWarehouseTransfer;
trx: Knex.Transaction;
}
export interface IWarehouseTransferEditedPayload {
tenantId: number;
editWarehouseDTO: IEditWarehouseTransferDTO;
oldWarehouseTransfer: IWarehouseTransfer;
warehouseTransfer: IWarehouseTransfer;
trx: Knex.Transaction;
}
export interface IWarehouseTransferDeletePayload {
tenantId: number;
oldWarehouseTransfer: IWarehouseTransfer;
trx: Knex.Transaction;
}
export interface IWarehouseTransferDeletedPayload {
tenantId: number;
warehouseTransfer: IWarehouseTransfer;
oldWarehouseTransfer: IWarehouseTransfer;
trx: Knex.Transaction;
}
export interface IGetWarehousesTransfersFilterDTO {
page: number;
pageSize: number;
searchKeyword: string;
}
export interface IItemWarehouseQuantityChange {
itemId: number;
warehouseId: number;
amount: number;
}
export interface IWarehousesActivatePayload {
tenantId: number;
}
export interface IWarehousesActivatedPayload {
tenantId: number;
primaryWarehouse: IWarehouse;
}
export interface IWarehouseMarkAsPrimaryPayload {
tenantId: number;
oldWarehouse: IWarehouse;
trx: Knex.Transaction;
}
export interface IWarehouseMarkedAsPrimaryPayload {
tenantId: number;
oldWarehouse: IWarehouse;
markedWarehouse: IWarehouse;
trx: Knex.Transaction;
}
export interface IWarehouseTransferInitiatePayload {
tenantId: number;
oldWarehouseTransfer: IWarehouseTransfer;
trx: Knex.Transaction;
}
export interface IWarehouseTransferInitiatedPayload {
tenantId: number;
warehouseTransfer: IWarehouseTransfer;
oldWarehouseTransfer: IWarehouseTransfer;
trx: Knex.Transaction;
}
export interface IWarehouseTransferTransferingPayload {
tenantId: number;
oldWarehouseTransfer: IWarehouseTransfer;
trx: Knex.Transaction;
}
export interface IWarehouseTransferTransferredPayload {
tenantId: number;
warehouseTransfer: IWarehouseTransfer;
oldWarehouseTransfer: IWarehouseTransfer;
trx: Knex.Transaction;
}

View File

@@ -0,0 +1,79 @@
export * from './Model';
export * from './InventoryTransaction';
export * from './BillPayment';
export * from './Bill';
export * from './InventoryCostMethod';
export * from './ItemEntry';
export * from './Item';
export * from './License';
export * from './ItemCategory';
export * from './Payment';
export * from './SaleInvoice';
export * from './SaleReceipt';
export * from './PaymentReceive';
export * from './SaleEstimate';
export * from './Authentication';
export * from './User';
export * from './Metable';
export * from './Options';
export * from './Account';
export * from './DynamicFilter';
export * from './Journal';
export * from './Contact';
export * from './Expenses';
export * from './Tenancy';
export * from './View';
export * from './ManualJournal';
export * from './Currency';
export * from './ExchangeRate';
export * from './Media';
export * from './SaleEstimate';
export * from './FinancialStatements';
export * from './BalanceSheet';
export * from './TrialBalanceSheet';
export * from './GeneralLedgerSheet';
export * from './ProfitLossSheet';
export * from './JournalReport';
export * from './AgingReport';
export * from './ARAgingSummaryReport';
export * from './APAgingSummaryReport';
export * from './Mailable';
export * from './InventoryAdjustment';
export * from './Setup';
export * from './IInventoryValuationSheet';
export * from './SalesByItemsSheet';
export * from './CustomerBalanceSummary';
export * from './VendorBalanceSummary';
export * from './ContactBalanceSummary';
export * from './TransactionsByCustomers';
export * from './TransactionsByContacts';
export * from './TransactionsByVendors';
export * from './Table';
export * from './Ledger';
export * from './CashFlow';
export * from './InventoryDetails';
export * from './LandedCost';
export * from './Entry';
export * from './TransactionsByReference';
export * from './Jobs';
export * from './CashflowService';
export * from './FinancialReports/CashflowAccountTransactions';
export * from './SmsNotifications';
export * from './Roles';
export * from './TransactionsLocking';
export * from './User';
export * from './Preferences';
export * from './CreditNote';
export * from './VendorCredit';
export * from './Warehouses';
export * from './Branches';
export * from './Features';
export * from './InventoryCost';
export * from './Project';
export * from './Tasks';
export * from './Times';
export * from './ProjectProfitabilitySummary';
export interface I18nService {
__: (input: string) => string;
}