@tomei/finance 0.4.21 → 0.4.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/customer/customer.js +4 -4
  2. package/dist/customer/customer.js.map +1 -1
  3. package/dist/finance-company/finance-company.d.ts +1 -1
  4. package/dist/finance-company/finance-company.js +45 -5
  5. package/dist/finance-company/finance-company.js.map +1 -1
  6. package/dist/helpers/typeof.d.ts +1 -1
  7. package/dist/helpers/typeof.js +2 -1
  8. package/dist/helpers/typeof.js.map +1 -1
  9. package/dist/models/document.entity.d.ts +4 -0
  10. package/dist/models/document.entity.js +10 -0
  11. package/dist/models/document.entity.js.map +1 -1
  12. package/dist/models/payment.entity.d.ts +3 -0
  13. package/dist/models/payment.entity.js +15 -0
  14. package/dist/models/payment.entity.js.map +1 -1
  15. package/dist/payment/interfaces/payment-attr.interface.d.ts +1 -0
  16. package/dist/payment/interfaces/payment-attr.interface.js.map +1 -1
  17. package/dist/payment/payment.d.ts +1 -0
  18. package/dist/payment/payment.js +2 -0
  19. package/dist/payment/payment.js.map +1 -1
  20. package/dist/payment-item/payment-item.js +1 -1
  21. package/dist/payment-item/payment-item.js.map +1 -1
  22. package/dist/tsconfig.tsbuildinfo +1 -1
  23. package/migrations/finance-payment-migration.js +10 -0
  24. package/package.json +1 -1
  25. package/src/customer/customer.ts +1 -1
  26. package/src/finance-company/finance-company.ts +52 -4
  27. package/src/helpers/typeof.ts +1 -1
  28. package/src/models/document.entity.ts +8 -0
  29. package/src/models/payment.entity.ts +14 -0
  30. package/src/payment/interfaces/payment-attr.interface.ts +1 -0
  31. package/src/payment/payment.ts +2 -0
  32. package/src/payment-item/payment-item.ts +1 -1
@@ -61,6 +61,16 @@ module.exports = {
61
61
  type: Sequelize.STRING(200),
62
62
  allowNull: true,
63
63
  },
64
+ ReceiptDocNo: {
65
+ type: Sequelize.STRING(30),
66
+ allowNull: true,
67
+ references: {
68
+ model: 'finance_Document',
69
+ key: 'DocNo',
70
+ },
71
+ onUpdate: 'CASCADE',
72
+ onDelete: 'CASCADE',
73
+ },
64
74
  AccSystemRefId: {
65
75
  type: Sequelize.STRING(30),
66
76
  allowNull: true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tomei/finance",
3
- "version": "0.4.21",
3
+ "version": "0.4.23",
4
4
  "description": "NestJS package for finance module",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -11,7 +11,7 @@ import { FinanceCustomerRepository } from './finance-customer.repository';
11
11
  import * as cuid from 'cuid';
12
12
  import Account from '../account/account';
13
13
  import { AccountRepository } from '../account/account.repository';
14
- import type from '../helpers/typeof';
14
+ import { type } from '../helpers/typeof';
15
15
  import * as FinanceDb from '../database';
16
16
 
17
17
  // const AccountSystemEntity = import('../account-system-entity').then(({AccountSystemEntity}) => AccountSystemEntity);
@@ -32,6 +32,8 @@ import PaymentMethod from '../payment-method/payment-method';
32
32
  import { AccountRepository } from '../account/account.repository';
33
33
  import { PaymentPaidWithRepository } from '../payment-paid-with/payment-paid-with.repository';
34
34
  import { MediasModel } from '@tomei/media';
35
+ import DocumentItem from '../document/document-item';
36
+ import { type } from 'src/helpers/typeof';
35
37
 
36
38
  // eslint-disable-next-line @typescript-eslint/no-var-requires
37
39
  const getConfig = require('../config');
@@ -1135,6 +1137,7 @@ export default class FinanceCompany extends ObjectBase {
1135
1137
  * @param payment - The payment object containing payment details
1136
1138
  * @param customer - The customer making the payment
1137
1139
  * @param ctAccountNo - The account number of the customer's Account Receivable account to transact, else the default customer account payable receivable will be used
1140
+ * @param receiptNo - The document receipt number
1138
1141
  *
1139
1142
  * @returns {Payment} - Payment object representing the full detals of the payment collection recorded
1140
1143
  */
@@ -1144,6 +1147,7 @@ export default class FinanceCompany extends ObjectBase {
1144
1147
  payment: Payment,
1145
1148
  customer: FinanceCustomerBase,
1146
1149
  ctAccountNo?: string,
1150
+ receiptNo?: string,
1147
1151
  ): Promise<Payment> {
1148
1152
  try {
1149
1153
  /*validation 1: Make sure that the payment has at least 1 payment item*/
@@ -1167,6 +1171,20 @@ export default class FinanceCompany extends ObjectBase {
1167
1171
  payment.ReceivedBy = loginUser.ObjectId;
1168
1172
  payment.IssuedBy = loginUser.ObjectId;
1169
1173
 
1174
+ const receiptDocuments: any =
1175
+ await FinanceCompany._DocumentRepository.findAll({
1176
+ where: {
1177
+ DocType: DocType.RECEIPT,
1178
+ CompanyId: config.financeCompanies['TXG-FS'].companyId,
1179
+ },
1180
+ });
1181
+
1182
+ if (receiptNo) {
1183
+ payment.ReceiptDocNo = receiptNo;
1184
+ } else {
1185
+ payment.ReceiptDocNo = `EZC-RCT-${receiptDocuments.length + 1}`;
1186
+ }
1187
+
1170
1188
  await FinanceCompany._PaymentRepository.create(
1171
1189
  {
1172
1190
  PaymentId: payment.PaymentId,
@@ -1182,6 +1200,7 @@ export default class FinanceCompany extends ObjectBase {
1182
1200
  Remarks: payment.Remarks,
1183
1201
  RelatedObjectId: payment.RelatedObjectId,
1184
1202
  RelatedObjectType: payment.RelatedObjectType,
1203
+ ReceiptDocNo: payment.ReceiptDocNo,
1185
1204
  UpdatedAt: new Date(),
1186
1205
  UpdatedBy: loginUser.ObjectId,
1187
1206
  CreatedAt: new Date(),
@@ -1231,6 +1250,33 @@ export default class FinanceCompany extends ObjectBase {
1231
1250
  );
1232
1251
  }
1233
1252
 
1253
+ /*Generating the receipt*/
1254
+ const receipt = new Document(dbTransaction);
1255
+
1256
+ receipt.DocNo = payment.ReceiptDocNo;
1257
+ receipt.DocType = DocType.RECEIPT;
1258
+ receipt.DocDate = new Date();
1259
+ receipt.CompanyId = config.financeCompanies['TXG-FS'].companyId;
1260
+ receipt.Currency = payment.Currency;
1261
+ receipt.Description = 'Payment Received';
1262
+ receipt.IssuedById = loginUser.ObjectId;
1263
+ receipt.IssuedToId = customer.CustomerId;
1264
+ receipt.IssuedToType = type(customer);
1265
+ receipt.RelatedObjectId = payment.RelatedObjectId;
1266
+ receipt.RelatedObjectType = payment.RelatedObjectType;
1267
+ receipt.UseAccSystemDocYN = 'N';
1268
+
1269
+ for (const paymentItem of paymentItems) {
1270
+ const receiptItem = new DocumentItem(dbTransaction, receipt);
1271
+ receiptItem.Name = `Payment for ${paymentItem.PayForObjectType} No. ${paymentItem.PayForObjectId}`;
1272
+ receiptItem.NameBM = `Bayaran untuk ${paymentItem.PayForObjectType} No. ${paymentItem.PayForObjectId}`;
1273
+ receiptItem.Amount = paymentItem.Amount;
1274
+ receiptItem.Currency = paymentItem.Currency;
1275
+ await receipt.newDocumentItem(receiptItem);
1276
+ }
1277
+
1278
+ await receipt.generateReceipt(receipt.IssuedById, customer);
1279
+
1234
1280
  /*Registering the Journal Entries for the transaction*/
1235
1281
  const transactionDate = new Date();
1236
1282
 
@@ -1263,10 +1309,11 @@ export default class FinanceCompany extends ObjectBase {
1263
1309
  debitLT.Currency = paymentPaidWith.Currency;
1264
1310
  debitLT.DebitAmount = paymentPaidWith.Amount;
1265
1311
  debitLT.Date = transactionDate;
1266
- debitLT.Description = customer.FullName;
1312
+ debitLT.Description = 'Payment Received'; //customer.FullName;
1267
1313
  debitLT.Name = customer.FullName;
1268
- debitLT.RelatedObjectId = payment.RelatedObjectId;
1314
+ debitLT.RelatedObjectId = receipt.RelatedObjectId;
1269
1315
  debitLT.RelatedObjectType = payment.RelatedObjectType;
1316
+ debitLT.RelatedPaymentId = payment.PaymentId;
1270
1317
 
1271
1318
  const creditLT = await journalEntry.newLedgerTransaction(
1272
1319
  TransactionTypeOptions.CREDIT,
@@ -1280,10 +1327,11 @@ export default class FinanceCompany extends ObjectBase {
1280
1327
  creditLT.Currency = paymentPaidWith.Currency;
1281
1328
  creditLT.CreditAmount = paymentPaidWith.Amount;
1282
1329
  creditLT.Date = transactionDate;
1283
- creditLT.Description = paymentMethodType.Name;
1330
+ creditLT.Description = 'Payment Received'; //paymentMethodType.Name;
1284
1331
  creditLT.Name = paymentMethodType.Name;
1285
- creditLT.RelatedObjectId = payment.RelatedObjectId;
1332
+ creditLT.RelatedObjectId = receipt.RelatedObjectId;
1286
1333
  creditLT.RelatedObjectType = payment.RelatedObjectType;
1334
+ creditLT.RelatedPaymentId = payment.PaymentId;
1287
1335
 
1288
1336
  await this.postJournal(dbTransaction, journalEntry, loginUser);
1289
1337
  }
@@ -1,4 +1,4 @@
1
- export default function type(value: any): string {
1
+ export function type(value: any): string {
2
2
  if (value === null) {
3
3
  return 'null';
4
4
  }
@@ -13,6 +13,8 @@ import {
13
13
  import { DocType, DocumentStatus } from '../enum';
14
14
  import FinanceCompanyModel from './finance-company.entity';
15
15
  import DocumentItemModel from './document-item.entity';
16
+ import LedgerTransactionModel from './ledger-transaction.entity';
17
+ import PaymentModel from './payment.entity';
16
18
 
17
19
  @Table({
18
20
  tableName: 'finance_Document',
@@ -198,6 +200,12 @@ export default class DocumentModel extends Model {
198
200
  @HasMany(() => DocumentItemModel)
199
201
  DocumentItems: DocumentItemModel[];
200
202
 
203
+ @HasMany(() => LedgerTransactionModel)
204
+ LedgerTransactions: LedgerTransactionModel[];
205
+
206
+ @HasMany(() => PaymentModel)
207
+ Payments: PaymentModel[];
208
+
201
209
  @BelongsTo(() => FinanceCompanyModel)
202
210
  FinanceCompany: FinanceCompanyModel;
203
211
  }
@@ -6,8 +6,11 @@ import {
6
6
  Model,
7
7
  Table,
8
8
  UpdatedAt,
9
+ BelongsTo,
9
10
  } from 'sequelize-typescript';
11
+ import { ForeignKey } from 'sequelize-typescript/dist/associations/foreign-key/foreign-key';
10
12
  import { PaymentType, PaymentStatus } from '../enum';
13
+ import DocumentModel from './document.entity';
11
14
  import PaymentItemModel from './payment-item.entity';
12
15
 
13
16
  @Table({
@@ -102,6 +105,14 @@ export default class PaymentModel extends Model {
102
105
  })
103
106
  RelatedObjectType: string;
104
107
 
108
+ @ApiProperty({ type: String, description: 'DocNo' })
109
+ @ForeignKey(() => DocumentModel)
110
+ @Column({
111
+ allowNull: true,
112
+ type: DataType.STRING(30),
113
+ })
114
+ ReceiptDocNo: string;
115
+
105
116
  @ApiProperty({
106
117
  type: String,
107
118
  description: 'Account Customer Id in API',
@@ -144,4 +155,7 @@ export default class PaymentModel extends Model {
144
155
 
145
156
  @HasMany(() => PaymentItemModel)
146
157
  PaymentItems: PaymentItemModel[];
158
+
159
+ @BelongsTo(() => DocumentModel)
160
+ Document: DocumentModel;
147
161
  }
@@ -12,6 +12,7 @@ export class IPaymentAttr {
12
12
  IssuedBy?: string;
13
13
  RelatedObjectId?: string;
14
14
  RelatedObjectType?: string;
15
+ ReceiptDocNo?: string;
15
16
  Remarks?: string;
16
17
  UpdatedAt: Date;
17
18
  UpdatedBy: string;
@@ -30,6 +30,7 @@ export default class Payment extends AccountSystemEntity {
30
30
  Remarks = '';
31
31
  RelatedObjectId = '';
32
32
  RelatedObjectType = '';
33
+ ReceiptDocNo = '';
33
34
 
34
35
  private static _RepositoryBase = new PaymentRepository();
35
36
  private static _PaymentItemRepository = new PaymentItemRepository();
@@ -103,6 +104,7 @@ export default class Payment extends AccountSystemEntity {
103
104
  payment.Remarks = paymentData.Remarks;
104
105
  payment.RelatedObjectId = paymentData.RelatedObjectId;
105
106
  payment.RelatedObjectType = paymentData.RelatedObjectType;
107
+ payment.ReceiptDocNo = paymentData.ReceiptDocNo;
106
108
  payment.AccSystemRefId = paymentData.AccSystemRefId;
107
109
  payment.PostedToAccSystemYN = paymentData.PostedToAccSystemYN;
108
110
  payment.PostedById = paymentData.PostedById;
@@ -1,6 +1,6 @@
1
1
  import { ObjectBase } from '@tomei/general';
2
2
  import Payment from '../payment/payment';
3
- import type from '../helpers/typeof';
3
+ import { type } from '../helpers/typeof';
4
4
  import { QueryTypes } from 'sequelize';
5
5
  import { FinanceDb } from '../';
6
6
  import { Next } from '@nestjs/common/decorators';