mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-15 04:10:32 +00:00
add server to monorepo.
This commit is contained in:
51
packages/server/src/interfaces/APAgingSummaryReport.ts
Normal file
51
packages/server/src/interfaces/APAgingSummaryReport.ts
Normal 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,
|
||||
}
|
||||
37
packages/server/src/interfaces/ARAgingSummaryReport.ts
Normal file
37
packages/server/src/interfaces/ARAgingSummaryReport.ts
Normal 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,
|
||||
}
|
||||
144
packages/server/src/interfaces/Account.ts
Normal file
144
packages/server/src/interfaces/Account.ts
Normal 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',
|
||||
}
|
||||
22
packages/server/src/interfaces/AgingReport.ts
Normal file
22
packages/server/src/interfaces/AgingReport.ts
Normal 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;
|
||||
}
|
||||
29
packages/server/src/interfaces/Authentication.ts
Normal file
29
packages/server/src/interfaces/Authentication.ts
Normal 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>;
|
||||
}
|
||||
192
packages/server/src/interfaces/BalanceSheet.ts
Normal file
192
packages/server/src/interfaces/BalanceSheet.ts
Normal 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',
|
||||
}
|
||||
140
packages/server/src/interfaces/Bill.ts
Normal file
140
packages/server/src/interfaces/Bill.ts
Normal 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',
|
||||
}
|
||||
117
packages/server/src/interfaces/BillPayment.ts
Normal file
117
packages/server/src/interfaces/BillPayment.ts
Normal 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',
|
||||
}
|
||||
50
packages/server/src/interfaces/Branches.ts
Normal file
50
packages/server/src/interfaces/Branches.ts
Normal 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;
|
||||
}
|
||||
227
packages/server/src/interfaces/CashFlow.ts
Normal file
227
packages/server/src/interfaces/CashFlow.ts
Normal 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 {}
|
||||
128
packages/server/src/interfaces/CashflowService.ts
Normal file
128
packages/server/src/interfaces/CashflowService.ts
Normal 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',
|
||||
}
|
||||
391
packages/server/src/interfaces/Contact.ts
Normal file
391
packages/server/src/interfaces/Contact.ts
Normal 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;
|
||||
}
|
||||
47
packages/server/src/interfaces/ContactBalanceSummary.ts
Normal file
47
packages/server/src/interfaces/ContactBalanceSummary.ts
Normal 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>;
|
||||
}
|
||||
255
packages/server/src/interfaces/CreditNote.ts
Normal file
255
packages/server/src/interfaces/CreditNote.ts
Normal 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'
|
||||
>;
|
||||
27
packages/server/src/interfaces/Currency.ts
Normal file
27
packages/server/src/interfaces/Currency.ts
Normal 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[]>;
|
||||
}
|
||||
49
packages/server/src/interfaces/CustomerBalanceSummary.ts
Normal file
49
packages/server/src/interfaces/CustomerBalanceSummary.ts
Normal 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>;
|
||||
}
|
||||
38
packages/server/src/interfaces/DynamicFilter.ts
Normal file
38
packages/server/src/interfaces/DynamicFilter.ts
Normal 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;
|
||||
}
|
||||
18
packages/server/src/interfaces/Entry.ts
Normal file
18
packages/server/src/interfaces/Entry.ts
Normal 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;
|
||||
}
|
||||
36
packages/server/src/interfaces/ExchangeRate.ts
Normal file
36
packages/server/src/interfaces/ExchangeRate.ts
Normal 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>;
|
||||
};
|
||||
200
packages/server/src/interfaces/Expenses.ts
Normal file
200
packages/server/src/interfaces/Expenses.ts
Normal 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',
|
||||
}
|
||||
15
packages/server/src/interfaces/Features.ts
Normal file
15
packages/server/src/interfaces/Features.ts
Normal 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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
44
packages/server/src/interfaces/FinancialStatements.ts
Normal file
44
packages/server/src/interfaces/FinancialStatements.ts
Normal 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[];
|
||||
}
|
||||
81
packages/server/src/interfaces/GeneralLedgerSheet.ts
Normal file
81
packages/server/src/interfaces/GeneralLedgerSheet.ts
Normal 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,
|
||||
};
|
||||
47
packages/server/src/interfaces/IInventoryValuationSheet.ts
Normal file
47
packages/server/src/interfaces/IInventoryValuationSheet.ts
Normal 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;
|
||||
}
|
||||
| {};
|
||||
100
packages/server/src/interfaces/InventoryAdjustment.ts
Normal file
100
packages/server/src/interfaces/InventoryAdjustment.ts
Normal 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',
|
||||
}
|
||||
16
packages/server/src/interfaces/InventoryCost.ts
Normal file
16
packages/server/src/interfaces/InventoryCost.ts
Normal 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
|
||||
}
|
||||
6
packages/server/src/interfaces/InventoryCostMethod.ts
Normal file
6
packages/server/src/interfaces/InventoryCostMethod.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
|
||||
|
||||
interface IInventoryCostMethod {
|
||||
computeItemsCost(fromDate: Date): void,
|
||||
storeInventoryLotsCost(transactions: any[]): void,
|
||||
}
|
||||
94
packages/server/src/interfaces/InventoryDetails.ts
Normal file
94
packages/server/src/interfaces/InventoryDetails.ts
Normal 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;
|
||||
}
|
||||
95
packages/server/src/interfaces/InventoryTransaction.ts
Normal file
95
packages/server/src/interfaces/InventoryTransaction.ts
Normal 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;
|
||||
}
|
||||
130
packages/server/src/interfaces/Item.ts
Normal file
130
packages/server/src/interfaces/Item.ts
Normal 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];
|
||||
87
packages/server/src/interfaces/ItemCategory.ts
Normal file
87
packages/server/src/interfaces/ItemCategory.ts
Normal 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;
|
||||
}
|
||||
55
packages/server/src/interfaces/ItemEntry.ts
Normal file
55
packages/server/src/interfaces/ItemEntry.ts
Normal 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',
|
||||
}
|
||||
14
packages/server/src/interfaces/Jobs.ts
Normal file
14
packages/server/src/interfaces/Jobs.ts
Normal 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;
|
||||
}
|
||||
55
packages/server/src/interfaces/Journal.ts
Normal file
55
packages/server/src/interfaces/Journal.ts
Normal 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;
|
||||
}
|
||||
36
packages/server/src/interfaces/JournalReport.ts
Normal file
36
packages/server/src/interfaces/JournalReport.ts
Normal 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,
|
||||
}
|
||||
153
packages/server/src/interfaces/LandedCost.ts
Normal file
153
packages/server/src/interfaces/LandedCost.ts
Normal 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 {}
|
||||
71
packages/server/src/interfaces/Ledger.ts
Normal file
71
packages/server/src/interfaces/Ledger.ts
Normal 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;
|
||||
}
|
||||
25
packages/server/src/interfaces/License.ts
Normal file
25
packages/server/src/interfaces/License.ts
Normal 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,
|
||||
};
|
||||
16
packages/server/src/interfaces/Mailable.ts
Normal file
16
packages/server/src/interfaces/Mailable.ts
Normal 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;
|
||||
}
|
||||
172
packages/server/src/interfaces/ManualJournal.ts
Normal file
172
packages/server/src/interfaces/ManualJournal.ts
Normal 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',
|
||||
}
|
||||
25
packages/server/src/interfaces/Media.ts
Normal file
25
packages/server/src/interfaces/Media.ts
Normal 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>;
|
||||
}
|
||||
28
packages/server/src/interfaces/Metable.ts
Normal file
28
packages/server/src/interfaces/Metable.ts
Normal 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>;
|
||||
}
|
||||
81
packages/server/src/interfaces/Model.ts
Normal file
81
packages/server/src/interfaces/Model.ts
Normal 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 };
|
||||
}
|
||||
11
packages/server/src/interfaces/Options.ts
Normal file
11
packages/server/src/interfaces/Options.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
|
||||
export interface IOptionDTO {
|
||||
key: string,
|
||||
value: string|number,
|
||||
group: string,
|
||||
};
|
||||
|
||||
export interface IOptionsDTO {
|
||||
options: IOptionDTO[],
|
||||
};
|
||||
20
packages/server/src/interfaces/Payment.ts
Normal file
20
packages/server/src/interfaces/Payment.ts
Normal 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>;
|
||||
}
|
||||
168
packages/server/src/interfaces/PaymentReceive.ts
Normal file
168
packages/server/src/interfaces/PaymentReceive.ts
Normal 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'
|
||||
>;
|
||||
6
packages/server/src/interfaces/Preferences.ts
Normal file
6
packages/server/src/interfaces/Preferences.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
|
||||
|
||||
|
||||
export enum PreferencesAction {
|
||||
Mutate = 'Mutate'
|
||||
}
|
||||
179
packages/server/src/interfaces/ProfitLossSheet.ts
Normal file
179
packages/server/src/interfaces/ProfitLossSheet.ts
Normal 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',
|
||||
}
|
||||
160
packages/server/src/interfaces/Project.ts
Normal file
160
packages/server/src/interfaces/Project.ts
Normal 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',
|
||||
}
|
||||
@@ -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'
|
||||
}
|
||||
22
packages/server/src/interfaces/Resource.ts
Normal file
22
packages/server/src/interfaces/Resource.ts
Normal 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;
|
||||
}
|
||||
121
packages/server/src/interfaces/Roles.ts
Normal file
121
packages/server/src/interfaces/Roles.ts
Normal 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;
|
||||
}
|
||||
126
packages/server/src/interfaces/SaleEstimate.ts
Normal file
126
packages/server/src/interfaces/SaleEstimate.ts
Normal 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;
|
||||
}
|
||||
174
packages/server/src/interfaces/SaleInvoice.ts
Normal file
174
packages/server/src/interfaces/SaleInvoice.ts
Normal 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',
|
||||
}
|
||||
136
packages/server/src/interfaces/SaleReceipt.ts
Normal file
136
packages/server/src/interfaces/SaleReceipt.ts
Normal 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;
|
||||
}
|
||||
45
packages/server/src/interfaces/SalesByItemsSheet.ts
Normal file
45
packages/server/src/interfaces/SalesByItemsSheet.ts
Normal 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
|
||||
} | {};
|
||||
|
||||
34
packages/server/src/interfaces/Setup.ts
Normal file
34
packages/server/src/interfaces/Setup.ts
Normal 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;
|
||||
}
|
||||
51
packages/server/src/interfaces/SmsNotifications.ts
Normal file
51
packages/server/src/interfaces/SmsNotifications.ts
Normal 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',
|
||||
}
|
||||
31
packages/server/src/interfaces/Table.ts
Normal file
31
packages/server/src/interfaces/Table.ts
Normal 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;
|
||||
}
|
||||
78
packages/server/src/interfaces/Tasks.ts
Normal file
78
packages/server/src/interfaces/Tasks.ts
Normal 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;
|
||||
}
|
||||
55
packages/server/src/interfaces/Tenancy.ts
Normal file
55
packages/server/src/interfaces/Tenancy.ts
Normal 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();
|
||||
}
|
||||
72
packages/server/src/interfaces/Times.ts
Normal file
72
packages/server/src/interfaces/Times.ts
Normal 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;
|
||||
}
|
||||
33
packages/server/src/interfaces/TransactionsByContacts.ts
Normal file
33
packages/server/src/interfaces/TransactionsByContacts.ts
Normal 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;
|
||||
}
|
||||
36
packages/server/src/interfaces/TransactionsByCustomers.ts
Normal file
36
packages/server/src/interfaces/TransactionsByCustomers.ts
Normal 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>;
|
||||
}
|
||||
31
packages/server/src/interfaces/TransactionsByReference.ts
Normal file
31
packages/server/src/interfaces/TransactionsByReference.ts
Normal 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;
|
||||
}
|
||||
36
packages/server/src/interfaces/TransactionsByVendors.ts
Normal file
36
packages/server/src/interfaces/TransactionsByVendors.ts
Normal 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>;
|
||||
}
|
||||
71
packages/server/src/interfaces/TransactionsLocking.ts
Normal file
71
packages/server/src/interfaces/TransactionsLocking.ts
Normal 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;
|
||||
}
|
||||
49
packages/server/src/interfaces/TrialBalanceSheet.ts
Normal file
49
packages/server/src/interfaces/TrialBalanceSheet.ts
Normal 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;
|
||||
}
|
||||
157
packages/server/src/interfaces/User.ts
Normal file
157
packages/server/src/interfaces/User.ts
Normal 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;
|
||||
}
|
||||
50
packages/server/src/interfaces/VendorBalanceSummary.ts
Normal file
50
packages/server/src/interfaces/VendorBalanceSummary.ts
Normal 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>;
|
||||
}
|
||||
240
packages/server/src/interfaces/VendorCredit.ts
Normal file
240
packages/server/src/interfaces/VendorCredit.ts
Normal 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;
|
||||
}
|
||||
68
packages/server/src/interfaces/View.ts
Normal file
68
packages/server/src/interfaces/View.ts
Normal 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>;
|
||||
}
|
||||
212
packages/server/src/interfaces/Warehouses.ts
Normal file
212
packages/server/src/interfaces/Warehouses.ts
Normal 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;
|
||||
}
|
||||
79
packages/server/src/interfaces/index.ts
Normal file
79
packages/server/src/interfaces/index.ts
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user