@lyxa.ai/core 1.4.252 → 1.4.253-alpha.1
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.
- package/dist/libraries/cash-settlement/providers/bob.js +2 -2
- package/dist/libraries/cash-settlement/providers/bob.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/adjustment-information.model.d.ts +1 -0
- package/dist/libraries/mongo/models/embedded/adjustment-information.model.js +5 -0
- package/dist/libraries/mongo/models/embedded/adjustment-information.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/price-breakdown.model.d.ts +1 -1
- package/dist/libraries/mongo/models/embedded/price-breakdown.model.js +1 -1
- package/dist/libraries/mongo/models/embedded/price-breakdown.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/rider-setting.model.d.ts +1 -0
- package/dist/libraries/mongo/models/embedded/rider-setting.model.js +5 -0
- package/dist/libraries/mongo/models/embedded/rider-setting.model.js.map +1 -1
- package/dist/types/README.md +1 -1
- package/dist/types/package.json +1 -1
- package/dist/types/utilities/enum.d.ts +8 -4
- package/dist/types/utilities/enum.js +4 -0
- package/dist/types/utilities/enum.js.map +1 -1
- package/dist/utilities/enum.d.ts +8 -4
- package/dist/utilities/enum.js +4 -0
- package/dist/utilities/enum.js.map +1 -1
- package/package.json +1 -1
|
@@ -429,7 +429,7 @@ let BOBService = class BOBService {
|
|
|
429
429
|
updatedAt: lastSettlement.updatedAt ?? new Date(),
|
|
430
430
|
};
|
|
431
431
|
}
|
|
432
|
-
async getTransfers(timeframe) {
|
|
432
|
+
async getTransfers(timeframe, model = enum_1.BobModel.C2B) {
|
|
433
433
|
const DateTimeFrom = new Date(timeframe.startDate).toISOString().split('.')[0] + 'Z';
|
|
434
434
|
const DateTimeTo = new Date(timeframe.endDate).toISOString().split('.')[0] + 'Z';
|
|
435
435
|
const bobData = {
|
|
@@ -438,7 +438,7 @@ let BOBService = class BOBService {
|
|
|
438
438
|
User: this.BOB_USER_NAME,
|
|
439
439
|
Password: this.BOB_PASSWORD,
|
|
440
440
|
},
|
|
441
|
-
Model:
|
|
441
|
+
Model: model,
|
|
442
442
|
DateTimeFrom,
|
|
443
443
|
DateTimeTo,
|
|
444
444
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bob.js","sourceRoot":"/","sources":["libraries/cash-settlement/providers/bob.ts"],"names":[],"mappings":"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","sourcesContent":["import axios from 'axios';\nimport { ICashSettlementService, ISettlementInfo, ISettlementStatus } from '../interfaces/ICashSettlement';\nimport { SoftDeleteModel } from '../../mongo/plugins/soft-delete-plugin';\nimport {\n\tBOBFinance,\n\tBOBFinanceModel,\n\tFinanceSettlement,\n\tFinanceSettlementModel,\n\tRider,\n\tRiderModel,\n\tSetting,\n} from '../../mongo/models';\nimport { Service } from 'typedi';\nimport https from 'https';\nimport zlib from 'zlib';\nimport { TRPCError } from '@trpc/server';\nimport {\n\tAccountType,\n\tBobChannelType,\n\tBobModel,\n\tBobSettlementStatus,\n\tBobSettlementType,\n\tBobType,\n\tLogTag,\n\tSettlementType,\n} from '../../../utilities/enum';\nimport { DocumentType, mongoose } from '@typegoose/typegoose';\nimport { getLibraries } from '../../..';\nimport { badRequestError, notFoundError } from '../../../utilities/error-common';\nimport { roundBaseCurrency, roundSecondaryCurrency } from '../../../utilities/shared/currency';\nimport dayjs from 'dayjs';\nimport { publishEvent } from '../../event';\nimport { RiderCashSettledEvent } from '../../event/events';\n\nexport type BOBSecrets = {\n\tBOB_USER_NAME: string;\n\tBOB_PASSWORD: string;\n\tBOB_URL: string;\n};\n\nexport enum BOBTransferStatus {\n\tNOT_PAID = 'NOT PAID',\n\tPAID = 'PAID',\n}\n\n@Service()\nexport class BOBService implements ICashSettlementService {\n\tprivate model: typeof BOBFinanceModel & SoftDeleteModel<BOBFinance>;\n\tprivate riderModel: typeof RiderModel & SoftDeleteModel<Rider>;\n\tprivate financeSettlementModel: typeof FinanceSettlementModel & SoftDeleteModel<FinanceSettlement>;\n\n\tprivate BOB_USER_NAME: string;\n\tprivate BOB_PASSWORD: string;\n\tprivate BOB_URL: string;\n\n\tconstructor(secrets: BOBSecrets) {\n\t\tthis.BOB_USER_NAME = secrets.BOB_USER_NAME;\n\t\tthis.BOB_PASSWORD = secrets.BOB_PASSWORD;\n\t\tthis.BOB_URL = secrets.BOB_URL;\n\n\t\tthis.model = BOBFinanceModel as typeof BOBFinanceModel & SoftDeleteModel<BOBFinance>;\n\t\tthis.riderModel = RiderModel as typeof RiderModel & SoftDeleteModel<Rider>;\n\t\tthis.financeSettlementModel = FinanceSettlementModel as typeof FinanceSettlementModel &\n\t\t\tSoftDeleteModel<FinanceSettlement>;\n\t}\n\n\t/**\n\t * Initiates a cash settlement process\n\t *\n\t * @param amount - The amount to be settled\n\t * @param currency - The currency of the amount\n\t * @param reference - A unique reference for the settlement\n\t * @param firstName - The first name of the settler\n\t * @param lastName - The last name of the settler\n\t * @param riderId - The ID of the rider associated with the settlement\n\t * @param location - Optional location of the settler\n\t * @returns Confirmation of the settlement initiation\n\t */\n\tpublic async initiateSettlement(\n\t\tamount: number,\n\t\tcurrency: string,\n\t\treference: string,\n\t\tfirstName: string,\n\t\tlastName: string,\n\t\triderId: mongoose.Types.ObjectId,\n\t\tlocation?: string\n\t): Promise<boolean> {\n\t\tconst logger = getLibraries().getLoggerKit();\n\n\t\tlogger.info('Initiating BOB settlement', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_INITIATE,\n\t\t\tdata: {\n\t\t\t\tamount,\n\t\t\t\tcurrency,\n\t\t\t\treference,\n\t\t\t\tfirstName,\n\t\t\t\tlastName,\n\t\t\t\triderId: riderId.toString(),\n\t\t\t\tlocation,\n\t\t\t},\n\t\t});\n\n\t\t// BOB cannot handle amount > 20000000\n\t\tif (amount > 20000000) {\n\t\t\tbadRequestError('Please provide a value between 0 and 20000000');\n\t\t}\n\n\t\tconst crmNumber = reference;\n\n\t\tconst bobData = {\n\t\t\tChannelType: BobChannelType.CO,\n\t\t\tCredentials: {\n\t\t\t\tUser: this.BOB_USER_NAME,\n\t\t\t\tPassword: this.BOB_PASSWORD,\n\t\t\t},\n\t\t\tModel: BobModel.C2B,\n\t\t\tFirstName: firstName,\n\t\t\tLastName: lastName,\n\t\t\tCRMNumber: crmNumber,\n\t\t\tAmount: String(amount),\n\t\t\tCurrency: currency,\n\t\t};\n\n\t\tconst { data } = await axios.post(`${this.BOB_URL}InsertTransferData`, bobData, {\n\t\t\thttpsAgent: new https.Agent({ rejectUnauthorized: false }),\n\t\t});\n\n\t\tif (data.ErrorCode != 100) {\n\t\t\tconsole.error(`Error in BOB initiateSettlement: ${data.ErrorDescription}`);\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: 'Failed to post data to BOB API.',\n\t\t\t});\n\t\t}\n\n\t\tconst responseObject = await this.decompressResponse(data.Response);\n\n\t\tif (!responseObject || !responseObject.isSuccess) {\n\t\t\tconsole.error('Failed to initiate settlement in BOB');\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: 'Failed to initiate settlement in BOB.',\n\t\t\t});\n\t\t}\n\n\t\tconst bobSettlement = await this.model.create({\n\t\t\tamount: currency === 'USD' ? amount : 0,\n\t\t\tsecondaryAmount: currency === 'USD' ? 0 : amount,\n\t\t\tcrmNumber: crmNumber,\n\t\t\trider: riderId,\n\t\t\tbobLocation: location,\n\t\t\tstatus: BobSettlementStatus.NOT_PAID,\n\t\t\tsettlementType: BobSettlementType.SETTLE_CASH,\n\t\t\tbobModel: BobModel.C2B,\n\t\t\tbobType: BobType.INWARD,\n\t\t});\n\n\t\tlogger.info('Created BOB settlement in database', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_INITIATE,\n\t\t\tdata: {\n\t\t\t\tbobSettlementId: bobSettlement._id.toString(),\n\t\t\t\tcrmNumber,\n\t\t\t},\n\t\t});\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Mark a settlement as paid\n\t *\n\t * @param settlementId - The ID of the settlement to update\n\t * @returns Confirmation of the update\n\t */\n\tpublic async markSettlementAsPaid(settlementId: mongoose.Types.ObjectId): Promise<boolean> {\n\t\tconst logger = getLibraries().getLoggerKit();\n\n\t\tlogger.info('Marking BOB settlement as paid', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_SETTLE,\n\t\t\tdata: {\n\t\t\t\tsettlementId: settlementId.toString(),\n\t\t\t},\n\t\t});\n\n\t\tconst settlement = await this.model.findById(settlementId);\n\n\t\tif (!settlement) {\n\t\t\tlogger.info('Settlement not found', {\n\t\t\t\ttag: LogTag.BOB_TRANSACTION_SETTLE,\n\t\t\t\tdata: {\n\t\t\t\t\tsettlementId: settlementId.toString(),\n\t\t\t\t},\n\t\t\t});\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: 'Settlement not found.',\n\t\t\t});\n\t\t}\n\n\t\tif (settlement.status === BobSettlementStatus.PAID) {\n\t\t\tlogger.info('Settlement is already marked as paid', {\n\t\t\t\ttag: LogTag.BOB_TRANSACTION_SETTLE,\n\t\t\t\tdata: {\n\t\t\t\t\tsettlementId: settlementId.toString(),\n\t\t\t\t},\n\t\t\t});\n\t\t\tbadRequestError('Settlement is already marked as paid.');\n\t\t}\n\n\t\tawait this.settlePayment(settlement);\n\n\t\tif (settlement.status === BobSettlementStatus.NOT_PAID) {\n\t\t\tawait this.removeTransfer(settlement.crmNumber); // Remove the transfer from BOB so future settlements with the same reference do not fail\n\t\t}\n\n\t\tlogger.info('BOB settlement marked as paid', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_SETTLE,\n\t\t\tdata: {\n\t\t\t\tsettlementId: settlementId.toString(),\n\t\t\t},\n\t\t});\n\n\t\treturn true;\n\t}\n\n\tprivate async settlePayment(settlement: DocumentType<BOBFinance>) {\n\t\tconst logger = getLibraries().getLoggerKit();\n\n\t\tlogger.info('Settling BOB payment', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_SETTLE,\n\t\t\tdata: {\n\t\t\t\tsettlementId: settlement._id.toString(),\n\t\t\t\tcrmNumber: settlement.crmNumber,\n\t\t\t},\n\t\t});\n\n\t\tconst updatedSettlement = await this.model.findByIdAndUpdate(\n\t\t\tsettlement._id,\n\t\t\t{ status: BobSettlementStatus.PAID },\n\t\t\t{ new: true, runValidators: true }\n\t\t);\n\n\t\tconst financeSettlement = await this.financeSettlementModel.create({\n\t\t\tamount: settlement.amount,\n\t\t\tsecondaryAmount: settlement.secondaryAmount,\n\t\t\trider: settlement.rider,\n\t\t\tsettlementType: SettlementType.RIDER_SETTLE_CASH,\n\t\t\taccountType: AccountType.RIDER,\n\t\t});\n\n\t\tconst rider = await this.riderModel.findById(settlement.rider);\n\t\tif (!rider) {\n\t\t\tconsole.error(`Rider with ID ${settlement.rider} not found.`);\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: 'Rider not found.',\n\t\t\t});\n\t\t}\n\n\t\tconst settings: Setting = (await getLibraries().getCachedSettingsService().getSettings()) as Setting;\n\t\tconst exchangeRate = settings?.currencySetting?.exchangeRate || 1;\n\n\t\tconst totalSettlement = settlement.amount || 0;\n\t\tconst totalSecondarySettlement = settlement.secondaryAmount || 0;\n\n\t\tconst { deltaPrimary, deltaSecondary } = this.calculateAmountsToDeduct({\n\t\t\texchangeRate,\n\t\t\ttotalSettlement,\n\t\t\ttotalSecondarySettlement,\n\t\t\tcashInHandAmount: rider.cashInHand?.amount ?? 0,\n\t\t\tcashInHandSecondaryAmount: rider.cashInHand?.secondaryAmount ?? 0,\n\t\t});\n\n\t\t// if rider cash in hand will be below limit then remove limit reached flag\n\t\tconst bobCashSettlementLimit = settings?.riderSetting?.bobCashSettlementLimit || Infinity;\n\n\t\tconst limitForRider =\n\t\t\trider.useIndividualCashSettlementLimit && rider.cashSettlementLimit\n\t\t\t\t? rider.cashSettlementLimit\n\t\t\t\t: bobCashSettlementLimit;\n\n\t\tconst totalCashInHand =\n\t\t\t(rider.cashInHand?.amount || 0) +\n\t\t\tdeltaPrimary +\n\t\t\troundBaseCurrency(((rider.cashInHand?.secondaryAmount || 0) + deltaSecondary) / exchangeRate);\n\n\t\tconst isLimitReached = totalCashInHand >= limitForRider;\n\n\t\tconst unsetUpdate = !isLimitReached ? { cashLimitReason: 1, isCashSettlementLimitReached: 1 } : {};\n\n\t\tconst updatedRider = await this.riderModel.findByIdAndUpdate(\n\t\t\trider._id,\n\t\t\t{\n\t\t\t\t$inc: {\n\t\t\t\t\t'cashInHand.secondaryAmount': deltaSecondary,\n\t\t\t\t\t'cashInHand.amount': deltaPrimary,\n\t\t\t\t},\n\t\t\t\t$unset: unsetUpdate,\n\t\t\t},\n\t\t\t{ new: true, runValidators: true }\n\t\t);\n\n\t\tlogger.info('Settled BOB payment and updated rider cash in hand', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_SETTLE,\n\t\t\tdata: {\n\t\t\t\tsettlementId: settlement._id.toString(),\n\t\t\t\tcrmNumber: settlement.crmNumber,\n\t\t\t\tdeltaSecondary,\n\t\t\t\tdeltaPrimary,\n\t\t\t\triderId: rider._id.toString(),\n\t\t\t\tpreviousRiderCashInHand: rider.cashInHand,\n\t\t\t\tupdatedRiderCashInHand: updatedRider?.cashInHand,\n\t\t\t\tfinanceSettlementId: financeSettlement._id.toString(),\n\t\t\t},\n\t\t});\n\n\t\tpublishEvent(new RiderCashSettledEvent(rider._id));\n\t}\n\n\tpublic calculateAmountsToDeduct(data: {\n\t\texchangeRate: number;\n\t\ttotalSettlement: number;\n\t\ttotalSecondarySettlement: number;\n\t\tcashInHandAmount: number;\n\t\tcashInHandSecondaryAmount: number;\n\t}) {\n\t\tlet primaryToDeduct = data.totalSettlement;\n\t\tlet secondaryToDeduct = 0;\n\n\t\tlet availablePrimary = data.cashInHandAmount;\n\t\tlet availableSecondary = data.cashInHandSecondaryAmount;\n\n\t\t// 1. Handle primary settlement\n\t\tlet deductedPrimary = Math.min(availablePrimary, primaryToDeduct);\n\t\tprimaryToDeduct -= deductedPrimary;\n\t\tavailablePrimary -= deductedPrimary;\n\n\t\t// fallback to secondary if needed\n\t\tif (primaryToDeduct > 0) {\n\t\t\tconst neededSecondary = roundSecondaryCurrency(primaryToDeduct * data.exchangeRate);\n\n\t\t\tconst deductedSecondary = Math.min(availableSecondary, neededSecondary);\n\n\t\t\tsecondaryToDeduct += deductedSecondary; // accumulate deduction\n\t\t\tavailableSecondary -= deductedSecondary;\n\n\t\t\tprimaryToDeduct = 0;\n\t\t}\n\n\t\t// 2. Handle secondary settlement\n\t\tlet deductedSecondaryDirect = Math.min(availableSecondary, data.totalSecondarySettlement);\n\t\tsecondaryToDeduct += deductedSecondaryDirect;\n\t\tavailableSecondary -= deductedSecondaryDirect;\n\n\t\tconst remainingSecondary = data.totalSecondarySettlement - deductedSecondaryDirect;\n\n\t\t// fallback to primary\n\t\tif (remainingSecondary > 0) {\n\t\t\tconst neededPrimary = roundBaseCurrency(remainingSecondary / data.exchangeRate);\n\n\t\t\tconst deductedPrimaryFallback = Math.min(availablePrimary, neededPrimary);\n\n\t\t\tdeductedPrimary += deductedPrimaryFallback;\n\t\t\tavailablePrimary -= deductedPrimaryFallback;\n\t\t}\n\n\t\tconst deltaPrimary = -deductedPrimary;\n\t\tconst deltaSecondary = -secondaryToDeduct;\n\n\t\treturn { deltaPrimary, deltaSecondary };\n\t}\n\n\t/**\n\t * Revokes a cash settlement\n\t *\n\t * @param reference - The reference ID of the settlement to revoke\n\t * @returns Confirmation of the revocation\n\t */\n\tpublic async revokeSettlement(reference: string): Promise<boolean> {\n\t\tconst logger = getLibraries().getLoggerKit();\n\n\t\tlogger.info('Revoking BOB settlement', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_REVOKE,\n\t\t\tdata: {\n\t\t\t\treference,\n\t\t\t},\n\t\t});\n\n\t\tconst settlement = await this.model.findOne({\n\t\t\tcrmNumber: reference,\n\t\t\tstatus: BobSettlementStatus.NOT_PAID,\n\t\t});\n\n\t\tif (!settlement) {\n\t\t\tconsole.error(`Settlement with reference ${reference} not found.`);\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: 'Settlement not found.',\n\t\t\t});\n\t\t}\n\n\t\tawait this.removeTransfer(reference);\n\n\t\tconst result = await this.model.findOneAndUpdate(\n\t\t\t{\n\t\t\t\tcrmNumber: reference,\n\t\t\t\tstatus: BobSettlementStatus.NOT_PAID,\n\t\t\t},\n\t\t\t{\n\t\t\t\tstatus: BobSettlementStatus.REVOKED,\n\t\t\t},\n\t\t\t{ new: true, runValidators: true }\n\t\t);\n\n\t\tlogger.info('BOB settlement revoked', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_REVOKE,\n\t\t\tdata: {\n\t\t\t\treference,\n\t\t\t\tsettlementId: settlement._id.toString(),\n\t\t\t\tresult,\n\t\t\t},\n\t\t});\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Revokes a cash settlement\n\t *\n\t * @param reference - The reference ID of the settlement to revoke\n\t * @returns Confirmation of the revocation\n\t */\n\tpublic async revokeRiderSettlements(rider: mongoose.Types.ObjectId): Promise<boolean> {\n\t\tconst logger = getLibraries().getLoggerKit();\n\n\t\tlogger.info('Revoking BOB settlements for rider', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_REVOKE,\n\t\t\tdata: {\n\t\t\t\triderId: rider.toString(),\n\t\t\t},\n\t\t});\n\n\t\tconst settlements = await this.model.find({\n\t\t\trider: rider,\n\t\t\tstatus: BobSettlementStatus.NOT_PAID,\n\t\t});\n\n\t\tif (!settlements.length) {\n\t\t\tlogger.info('No unpaid BOB settlements found for rider', {\n\t\t\t\ttag: LogTag.BOB_TRANSACTION_REVOKE,\n\t\t\t\tdata: {\n\t\t\t\t\triderId: rider.toString(),\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tnotFoundError('No unpaid settlements found.');\n\t\t}\n\n\t\tfor (const settlement of settlements) {\n\t\t\tawait this.removeTransfer(settlement.crmNumber);\n\t\t\tawait this.model.findByIdAndUpdate(settlement._id, {\n\t\t\t\tstatus: BobSettlementStatus.REVOKED,\n\t\t\t});\n\t\t}\n\n\t\tlogger.info('BOB settlements revoked for rider', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_REVOKE,\n\t\t\tdata: {\n\t\t\t\triderId: rider.toString(),\n\t\t\t\tsettlementIds: settlements.map(s => s._id.toString()),\n\t\t\t},\n\t\t});\n\n\t\treturn true;\n\t}\n\n\tprivate async removeTransfer(crmNumber: string) {\n\t\tconst logger = getLibraries().getLoggerKit();\n\n\t\tlogger.info('Removing transfer from BOB', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_REMOVE,\n\t\t\tdata: {\n\t\t\t\tcrmNumber,\n\t\t\t},\n\t\t});\n\n\t\tconst transferExists = await this.hasUnpaidTransfer(crmNumber);\n\n\t\tif (!transferExists) {\n\t\t\tlogger.info('No transfer exists for this crm number in bob', {\n\t\t\t\ttag: LogTag.BOB_TRANSACTION_CHECK,\n\t\t\t\tdata: {\n\t\t\t\t\tcrmNumber,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst bobData = {\n\t\t\tChannelType: BobChannelType.CO,\n\t\t\tCredentials: {\n\t\t\t\tUser: this.BOB_USER_NAME,\n\t\t\t\tPassword: this.BOB_PASSWORD,\n\t\t\t},\n\t\t\tModel: BobModel.C2B,\n\t\t\tCRMNumber: crmNumber,\n\t\t};\n\n\t\tconst { data } = await axios.post(`${this.BOB_URL}RemoveTransfer`, bobData, {\n\t\t\thttpsAgent: new https.Agent({ rejectUnauthorized: false }),\n\t\t});\n\n\t\tif (data.ErrorCode == 213) {\n\t\t\t// Record does not exist\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.ErrorCode != 100) {\n\t\t\tconsole.error(`Error in BOB removeTransfer: ${data.ErrorDescription}`);\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: 'Failed to post data to BOB API.',\n\t\t\t});\n\t\t}\n\n\t\tconst responseObject = await this.decompressResponse(data.Response);\n\n\t\tif (!responseObject || !responseObject.isSuccess) {\n\t\t\tconsole.error('Failed to remove transfer in BOB');\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: 'Failed to remove transfer in BOB.',\n\t\t\t});\n\t\t}\n\n\t\tlogger.info('Removed transfer from BOB', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_REMOVE,\n\t\t\tdata: {\n\t\t\t\tcrmNumber,\n\t\t\t\tresponseObject,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Check if there are pending settlements\n\t *\n\t * @param reference - The reference ID of the settlement to check\n\t * @returns true if there are pending settlements, false otherwise\n\t */\n\tpublic async hasPendingSettlements(reference: string): Promise<boolean> {\n\t\tconst pendingSettlements = await this.model.find({\n\t\t\tcrmNumber: reference,\n\t\t\tstatus: BobSettlementStatus.NOT_PAID,\n\t\t});\n\t\treturn pendingSettlements.length > 0;\n\t}\n\n\t/**\n\t * Check if there are pending settlements\n\t *\n\t * @param riderId - The ID of the rider to check\n\t * @returns true if there are pending settlements, false otherwise\n\t */\n\tpublic async hasPendingRiderSettlements(riderId: mongoose.Types.ObjectId): Promise<boolean> {\n\t\tconst pendingSettlements = await this.model.find({\n\t\t\trider: riderId,\n\t\t\tstatus: BobSettlementStatus.NOT_PAID,\n\t\t});\n\t\treturn pendingSettlements.length > 0;\n\t}\n\n\t/**\n\t * Get latest settlement info\n\t *\n\t * @param reference - The reference ID of the settlement to check\n\t * @returns the latest settlement if it exists, null otherwise\n\t */\n\tpublic async getLastSettlement(reference: string): Promise<ISettlementInfo | null> {\n\t\tconst pendingSettlements = await this.model\n\t\t\t.findOne({\n\t\t\t\tcrmNumber: reference,\n\t\t\t})\n\t\t\t.sort({ createdAt: -1 });\n\n\t\tif (!pendingSettlements) return null;\n\n\t\treturn {\n\t\t\tamount: pendingSettlements.amount || pendingSettlements.secondaryAmount || 0,\n\t\t\tcurrency: pendingSettlements.amount ? 'USD' : 'LBP',\n\t\t\treferenceNumber: pendingSettlements.crmNumber,\n\t\t\tstatus: (pendingSettlements.status ?? BobSettlementStatus.NOT_PAID) as unknown as ISettlementStatus,\n\t\t\tcreatedAt: pendingSettlements.createdAt ?? new Date(),\n\t\t\tupdatedAt: pendingSettlements.createdAt ?? new Date(),\n\t\t};\n\t}\n\n\t/**\n\t * Get latest settlement info\n\t *\n\t * @param riderId - The ID of the rider to check\n\t * @returns the latest settlement if it exists, null otherwise\n\t */\n\tpublic async getLastRiderSettlement(rider: mongoose.Types.ObjectId): Promise<ISettlementInfo | null> {\n\t\tconst lastSettlement = await this.model\n\t\t\t.findOne({\n\t\t\t\trider: rider,\n\t\t\t})\n\t\t\t.sort({ createdAt: -1 });\n\n\t\tif (!lastSettlement) return null;\n\n\t\treturn {\n\t\t\tamount: lastSettlement.amount || lastSettlement.secondaryAmount || 0,\n\t\t\tcurrency: lastSettlement.amount ? 'USD' : 'LBP',\n\t\t\treferenceNumber: lastSettlement.crmNumber,\n\t\t\tstatus: (lastSettlement.status ?? BobSettlementStatus.NOT_PAID) as unknown as ISettlementStatus,\n\t\t\tcreatedAt: lastSettlement.createdAt ?? new Date(),\n\t\t\tupdatedAt: lastSettlement.updatedAt ?? new Date(),\n\t\t};\n\t}\n\n\tprivate async getTransfers(timeframe: { startDate: Date; endDate: Date }) {\n\t\tconst DateTimeFrom = new Date(timeframe.startDate).toISOString().split('.')[0] + 'Z';\n\t\tconst DateTimeTo = new Date(timeframe.endDate).toISOString().split('.')[0] + 'Z';\n\n\t\tconst bobData = {\n\t\t\tChannelType: BobChannelType.CO,\n\t\t\tCredentials: {\n\t\t\t\tUser: this.BOB_USER_NAME,\n\t\t\t\tPassword: this.BOB_PASSWORD,\n\t\t\t},\n\t\t\tModel: BobModel.C2B,\n\t\t\tDateTimeFrom,\n\t\t\tDateTimeTo,\n\t\t};\n\t\tconst { data } = await axios.post(`${this.BOB_URL}GetTransfers`, bobData, {\n\t\t\thttpsAgent: new https.Agent({ rejectUnauthorized: false }),\n\t\t});\n\n\t\tif (data.ErrorCode != 100) {\n\t\t\tconsole.error(`Error in BOB getTransfers: ${data.ErrorDescription}`);\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: 'Failed to post data to BOB API.',\n\t\t\t});\n\t\t}\n\n\t\tconst responseObject = await this.decompressResponse(data.Response);\n\n\t\tif (!responseObject) {\n\t\t\tconsole.error('Failed to get transfers in BOB');\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: 'Failed to get transfers in BOB.',\n\t\t\t});\n\t\t}\n\n\t\treturn responseObject;\n\t}\n\n\tprivate async decompressResponse(response: string): Promise<any> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t// Step 1: Decode Base64\n\t\t\tconst decodedBuffer = Buffer.from(response, 'base64');\n\n\t\t\t// Step 2: Decompress GZIP\n\t\t\tzlib.gunzip(decodedBuffer, (err, decompressedBuffer) => {\n\t\t\t\tif (err) {\n\t\t\t\t\tconsole.error('Error decompressing GZIP:', err);\n\t\t\t\t\tthrow new TRPCError({\n\t\t\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\t\t\tmessage: 'Failed to decompress data from BOB API.',\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// Step 3: Convert decompressed buffer to string\n\t\t\t\t\tconst decodedString = decompressedBuffer.toString('utf-8');\n\n\t\t\t\t\t// Step 4: Parse the JSON string to a JavaScript object\n\t\t\t\t\tconst responseObject = JSON.parse(decodedString);\n\n\t\t\t\t\tresolve(responseObject);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate async hasUnpaidTransfer(crmNumber: string): Promise<Boolean> {\n\t\tconst bobData = {\n\t\t\tChannelType: BobChannelType.CO,\n\t\t\tCredentials: {\n\t\t\t\tUser: this.BOB_USER_NAME,\n\t\t\t\tPassword: this.BOB_PASSWORD,\n\t\t\t},\n\t\t\tModel: BobModel.C2B,\n\t\t\tCRMNumber: crmNumber,\n\t\t};\n\t\tconst { data } = await axios.post(`${this.BOB_URL}GetTransferStatus`, bobData, {\n\t\t\thttpsAgent: new https.Agent({ rejectUnauthorized: false }),\n\t\t});\n\n\t\tif (data.ErrorCode == 213) {\n\t\t\t// Record does not exist\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data.ErrorCode != 100) {\n\t\t\tconsole.error(`Error in BOB getTransferStatus: ${data.ErrorDescription}`);\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: 'Failed to post data to BOB API.',\n\t\t\t});\n\t\t}\n\n\t\tconst responseObject = await this.decompressResponse(data.Response);\n\n\t\tif (!responseObject) {\n\t\t\tconsole.error('Failed to get settlement status in BOB');\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: 'Failed to get settlement status in BOB.',\n\t\t\t});\n\t\t}\n\n\t\tconst hasUnpaidTransfer = responseObject.some(\n\t\t\t(item: any) => item.CRMNumber == crmNumber && item.Status == BOBTransferStatus.NOT_PAID\n\t\t);\n\n\t\treturn hasUnpaidTransfer;\n\t}\n\n\tpublic async checkAllPendingTransfers() {\n\t\tconst logger = getLibraries().getLoggerKit();\n\n\t\tlogger.info('Checking pending BOB settlements', { tag: LogTag.BOB_TRANSACTION_CHECK });\n\n\t\tconst notPaidSettlements = await this.model.find({\n\t\t\tstatus: BobSettlementStatus.NOT_PAID,\n\t\t});\n\n\t\tif (!notPaidSettlements.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tlogger.info('Checking pending settlements', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_CHECK,\n\t\t\tdata: {\n\t\t\t\tcount: notPaidSettlements.length,\n\t\t\t\tsettlementIds: notPaidSettlements.map(s => s._id.toString()),\n\t\t\t},\n\t\t});\n\n\t\tlet maxDate = dayjs();\n\t\tlet minDate = dayjs();\n\n\t\tconst createdAtDates = notPaidSettlements.map(item => dayjs(item.createdAt!));\n\n\t\tif (createdAtDates.length > 0) {\n\t\t\tmaxDate = dayjs.max(...createdAtDates)!;\n\t\t\tminDate = dayjs.min(...createdAtDates)!;\n\t\t}\n\n\t\tconst maxDatePlusOneDay = maxDate.add(1, 'day').toDate();\n\t\tconst minDateMinusOneDay = minDate.subtract(1, 'day').toDate();\n\n\t\tconst transfers = await this.getTransfers({\n\t\t\tstartDate: minDateMinusOneDay,\n\t\t\tendDate: maxDatePlusOneDay,\n\t\t});\n\n\t\tlogger.info('Transactions on BOB', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_CHECK,\n\t\t\tdata: {\n\t\t\t\tcount: transfers.length,\n\t\t\t\ttransfers,\n\t\t\t\tstartDate: minDateMinusOneDay,\n\t\t\t\tendDate: maxDatePlusOneDay,\n\t\t\t},\n\t\t});\n\n\t\tif (!transfers || transfers.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst transferStatusMap = new Map<string, string>();\n\n\t\tfor (const trx of transfers) {\n\t\t\ttransferStatusMap.set(trx.ReferenceNumber, trx.Status);\n\t\t}\n\n\t\tlogger.info('Mapped transfer statuses', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_CHECK,\n\t\t\tdata: {\n\t\t\t\ttransferStatusMap,\n\t\t\t},\n\t\t});\n\n\t\tawait Promise.all(\n\t\t\tnotPaidSettlements.map(async settlement => {\n\t\t\t\ttry {\n\t\t\t\t\tconst status = transferStatusMap.get(settlement.crmNumber);\n\n\t\t\t\t\tif (status == BOBTransferStatus.PAID) {\n\t\t\t\t\t\tawait this.settlePayment(settlement);\n\t\t\t\t\t}\n\n\t\t\t\t\tlogger.info(`Settled payment for crmNumber ${settlement.crmNumber}`, {\n\t\t\t\t\t\ttag: LogTag.BOB_TRANSACTION_CHECK,\n\t\t\t\t\t\tdata: { status },\n\t\t\t\t\t});\n\t\t\t\t} catch (err) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t`Failed settlement with crmNumber ${settlement.crmNumber}, id: ${settlement._id}`,\n\t\t\t\t\t\terr,\n\t\t\t\t\t\t{ tag: LogTag.BOB_TRANSACTION_CHECK }\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"bob.js","sourceRoot":"/","sources":["libraries/cash-settlement/providers/bob.ts"],"names":[],"mappings":"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","sourcesContent":["import axios from 'axios';\nimport { ICashSettlementService, ISettlementInfo, ISettlementStatus } from '../interfaces/ICashSettlement';\nimport { SoftDeleteModel } from '../../mongo/plugins/soft-delete-plugin';\nimport {\n\tBOBFinance,\n\tBOBFinanceModel,\n\tFinanceSettlement,\n\tFinanceSettlementModel,\n\tRider,\n\tRiderModel,\n\tSetting,\n} from '../../mongo/models';\nimport { Service } from 'typedi';\nimport https from 'https';\nimport zlib from 'zlib';\nimport { TRPCError } from '@trpc/server';\nimport {\n\tAccountType,\n\tBobChannelType,\n\tBobModel,\n\tBobSettlementStatus,\n\tBobSettlementType,\n\tBobType,\n\tLogTag,\n\tSettlementType,\n} from '../../../utilities/enum';\nimport { DocumentType, mongoose } from '@typegoose/typegoose';\nimport { getLibraries } from '../../..';\nimport { badRequestError, notFoundError } from '../../../utilities/error-common';\nimport { roundBaseCurrency, roundSecondaryCurrency } from '../../../utilities/shared/currency';\nimport dayjs from 'dayjs';\nimport { publishEvent } from '../../event';\nimport { RiderCashSettledEvent } from '../../event/events';\n\nexport type BOBSecrets = {\n\tBOB_USER_NAME: string;\n\tBOB_PASSWORD: string;\n\tBOB_URL: string;\n};\n\nexport enum BOBTransferStatus {\n\tNOT_PAID = 'NOT PAID',\n\tPAID = 'PAID',\n}\n\n@Service()\nexport class BOBService implements ICashSettlementService {\n\tprivate model: typeof BOBFinanceModel & SoftDeleteModel<BOBFinance>;\n\tprivate riderModel: typeof RiderModel & SoftDeleteModel<Rider>;\n\tprivate financeSettlementModel: typeof FinanceSettlementModel & SoftDeleteModel<FinanceSettlement>;\n\n\tprivate BOB_USER_NAME: string;\n\tprivate BOB_PASSWORD: string;\n\tprivate BOB_URL: string;\n\n\tconstructor(secrets: BOBSecrets) {\n\t\tthis.BOB_USER_NAME = secrets.BOB_USER_NAME;\n\t\tthis.BOB_PASSWORD = secrets.BOB_PASSWORD;\n\t\tthis.BOB_URL = secrets.BOB_URL;\n\n\t\tthis.model = BOBFinanceModel as typeof BOBFinanceModel & SoftDeleteModel<BOBFinance>;\n\t\tthis.riderModel = RiderModel as typeof RiderModel & SoftDeleteModel<Rider>;\n\t\tthis.financeSettlementModel = FinanceSettlementModel as typeof FinanceSettlementModel &\n\t\t\tSoftDeleteModel<FinanceSettlement>;\n\t}\n\n\t/**\n\t * Initiates a cash settlement process\n\t *\n\t * @param amount - The amount to be settled\n\t * @param currency - The currency of the amount\n\t * @param reference - A unique reference for the settlement\n\t * @param firstName - The first name of the settler\n\t * @param lastName - The last name of the settler\n\t * @param riderId - The ID of the rider associated with the settlement\n\t * @param location - Optional location of the settler\n\t * @returns Confirmation of the settlement initiation\n\t */\n\tpublic async initiateSettlement(\n\t\tamount: number,\n\t\tcurrency: string,\n\t\treference: string,\n\t\tfirstName: string,\n\t\tlastName: string,\n\t\triderId: mongoose.Types.ObjectId,\n\t\tlocation?: string\n\t): Promise<boolean> {\n\t\tconst logger = getLibraries().getLoggerKit();\n\n\t\tlogger.info('Initiating BOB settlement', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_INITIATE,\n\t\t\tdata: {\n\t\t\t\tamount,\n\t\t\t\tcurrency,\n\t\t\t\treference,\n\t\t\t\tfirstName,\n\t\t\t\tlastName,\n\t\t\t\triderId: riderId.toString(),\n\t\t\t\tlocation,\n\t\t\t},\n\t\t});\n\n\t\t// BOB cannot handle amount > 20000000\n\t\tif (amount > 20000000) {\n\t\t\tbadRequestError('Please provide a value between 0 and 20000000');\n\t\t}\n\n\t\tconst crmNumber = reference;\n\n\t\tconst bobData = {\n\t\t\tChannelType: BobChannelType.CO,\n\t\t\tCredentials: {\n\t\t\t\tUser: this.BOB_USER_NAME,\n\t\t\t\tPassword: this.BOB_PASSWORD,\n\t\t\t},\n\t\t\tModel: BobModel.C2B,\n\t\t\tFirstName: firstName,\n\t\t\tLastName: lastName,\n\t\t\tCRMNumber: crmNumber,\n\t\t\tAmount: String(amount),\n\t\t\tCurrency: currency,\n\t\t};\n\n\t\tconst { data } = await axios.post(`${this.BOB_URL}InsertTransferData`, bobData, {\n\t\t\thttpsAgent: new https.Agent({ rejectUnauthorized: false }),\n\t\t});\n\n\t\tif (data.ErrorCode != 100) {\n\t\t\tconsole.error(`Error in BOB initiateSettlement: ${data.ErrorDescription}`);\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: 'Failed to post data to BOB API.',\n\t\t\t});\n\t\t}\n\n\t\tconst responseObject = await this.decompressResponse(data.Response);\n\n\t\tif (!responseObject || !responseObject.isSuccess) {\n\t\t\tconsole.error('Failed to initiate settlement in BOB');\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: 'Failed to initiate settlement in BOB.',\n\t\t\t});\n\t\t}\n\n\t\tconst bobSettlement = await this.model.create({\n\t\t\tamount: currency === 'USD' ? amount : 0,\n\t\t\tsecondaryAmount: currency === 'USD' ? 0 : amount,\n\t\t\tcrmNumber: crmNumber,\n\t\t\trider: riderId,\n\t\t\tbobLocation: location,\n\t\t\tstatus: BobSettlementStatus.NOT_PAID,\n\t\t\tsettlementType: BobSettlementType.SETTLE_CASH,\n\t\t\tbobModel: BobModel.C2B,\n\t\t\tbobType: BobType.INWARD,\n\t\t});\n\n\t\tlogger.info('Created BOB settlement in database', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_INITIATE,\n\t\t\tdata: {\n\t\t\t\tbobSettlementId: bobSettlement._id.toString(),\n\t\t\t\tcrmNumber,\n\t\t\t},\n\t\t});\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Mark a settlement as paid\n\t *\n\t * @param settlementId - The ID of the settlement to update\n\t * @returns Confirmation of the update\n\t */\n\tpublic async markSettlementAsPaid(settlementId: mongoose.Types.ObjectId): Promise<boolean> {\n\t\tconst logger = getLibraries().getLoggerKit();\n\n\t\tlogger.info('Marking BOB settlement as paid', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_SETTLE,\n\t\t\tdata: {\n\t\t\t\tsettlementId: settlementId.toString(),\n\t\t\t},\n\t\t});\n\n\t\tconst settlement = await this.model.findById(settlementId);\n\n\t\tif (!settlement) {\n\t\t\tlogger.info('Settlement not found', {\n\t\t\t\ttag: LogTag.BOB_TRANSACTION_SETTLE,\n\t\t\t\tdata: {\n\t\t\t\t\tsettlementId: settlementId.toString(),\n\t\t\t\t},\n\t\t\t});\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: 'Settlement not found.',\n\t\t\t});\n\t\t}\n\n\t\tif (settlement.status === BobSettlementStatus.PAID) {\n\t\t\tlogger.info('Settlement is already marked as paid', {\n\t\t\t\ttag: LogTag.BOB_TRANSACTION_SETTLE,\n\t\t\t\tdata: {\n\t\t\t\t\tsettlementId: settlementId.toString(),\n\t\t\t\t},\n\t\t\t});\n\t\t\tbadRequestError('Settlement is already marked as paid.');\n\t\t}\n\n\t\tawait this.settlePayment(settlement);\n\n\t\tif (settlement.status === BobSettlementStatus.NOT_PAID) {\n\t\t\tawait this.removeTransfer(settlement.crmNumber); // Remove the transfer from BOB so future settlements with the same reference do not fail\n\t\t}\n\n\t\tlogger.info('BOB settlement marked as paid', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_SETTLE,\n\t\t\tdata: {\n\t\t\t\tsettlementId: settlementId.toString(),\n\t\t\t},\n\t\t});\n\n\t\treturn true;\n\t}\n\n\tprivate async settlePayment(settlement: DocumentType<BOBFinance>) {\n\t\tconst logger = getLibraries().getLoggerKit();\n\n\t\tlogger.info('Settling BOB payment', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_SETTLE,\n\t\t\tdata: {\n\t\t\t\tsettlementId: settlement._id.toString(),\n\t\t\t\tcrmNumber: settlement.crmNumber,\n\t\t\t},\n\t\t});\n\n\t\tconst updatedSettlement = await this.model.findByIdAndUpdate(\n\t\t\tsettlement._id,\n\t\t\t{ status: BobSettlementStatus.PAID },\n\t\t\t{ new: true, runValidators: true }\n\t\t);\n\n\t\tconst financeSettlement = await this.financeSettlementModel.create({\n\t\t\tamount: settlement.amount,\n\t\t\tsecondaryAmount: settlement.secondaryAmount,\n\t\t\trider: settlement.rider,\n\t\t\tsettlementType: SettlementType.RIDER_SETTLE_CASH,\n\t\t\taccountType: AccountType.RIDER,\n\t\t});\n\n\t\tconst rider = await this.riderModel.findById(settlement.rider);\n\t\tif (!rider) {\n\t\t\tconsole.error(`Rider with ID ${settlement.rider} not found.`);\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: 'Rider not found.',\n\t\t\t});\n\t\t}\n\n\t\tconst settings: Setting = (await getLibraries().getCachedSettingsService().getSettings()) as Setting;\n\t\tconst exchangeRate = settings?.currencySetting?.exchangeRate || 1;\n\n\t\tconst totalSettlement = settlement.amount || 0;\n\t\tconst totalSecondarySettlement = settlement.secondaryAmount || 0;\n\n\t\tconst { deltaPrimary, deltaSecondary } = this.calculateAmountsToDeduct({\n\t\t\texchangeRate,\n\t\t\ttotalSettlement,\n\t\t\ttotalSecondarySettlement,\n\t\t\tcashInHandAmount: rider.cashInHand?.amount ?? 0,\n\t\t\tcashInHandSecondaryAmount: rider.cashInHand?.secondaryAmount ?? 0,\n\t\t});\n\n\t\t// if rider cash in hand will be below limit then remove limit reached flag\n\t\tconst bobCashSettlementLimit = settings?.riderSetting?.bobCashSettlementLimit || Infinity;\n\n\t\tconst limitForRider =\n\t\t\trider.useIndividualCashSettlementLimit && rider.cashSettlementLimit\n\t\t\t\t? rider.cashSettlementLimit\n\t\t\t\t: bobCashSettlementLimit;\n\n\t\tconst totalCashInHand =\n\t\t\t(rider.cashInHand?.amount || 0) +\n\t\t\tdeltaPrimary +\n\t\t\troundBaseCurrency(((rider.cashInHand?.secondaryAmount || 0) + deltaSecondary) / exchangeRate);\n\n\t\tconst isLimitReached = totalCashInHand >= limitForRider;\n\n\t\tconst unsetUpdate = !isLimitReached ? { cashLimitReason: 1, isCashSettlementLimitReached: 1 } : {};\n\n\t\tconst updatedRider = await this.riderModel.findByIdAndUpdate(\n\t\t\trider._id,\n\t\t\t{\n\t\t\t\t$inc: {\n\t\t\t\t\t'cashInHand.secondaryAmount': deltaSecondary,\n\t\t\t\t\t'cashInHand.amount': deltaPrimary,\n\t\t\t\t},\n\t\t\t\t$unset: unsetUpdate,\n\t\t\t},\n\t\t\t{ new: true, runValidators: true }\n\t\t);\n\n\t\tlogger.info('Settled BOB payment and updated rider cash in hand', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_SETTLE,\n\t\t\tdata: {\n\t\t\t\tsettlementId: settlement._id.toString(),\n\t\t\t\tcrmNumber: settlement.crmNumber,\n\t\t\t\tdeltaSecondary,\n\t\t\t\tdeltaPrimary,\n\t\t\t\triderId: rider._id.toString(),\n\t\t\t\tpreviousRiderCashInHand: rider.cashInHand,\n\t\t\t\tupdatedRiderCashInHand: updatedRider?.cashInHand,\n\t\t\t\tfinanceSettlementId: financeSettlement._id.toString(),\n\t\t\t},\n\t\t});\n\n\t\tpublishEvent(new RiderCashSettledEvent(rider._id));\n\t}\n\n\tpublic calculateAmountsToDeduct(data: {\n\t\texchangeRate: number;\n\t\ttotalSettlement: number;\n\t\ttotalSecondarySettlement: number;\n\t\tcashInHandAmount: number;\n\t\tcashInHandSecondaryAmount: number;\n\t}) {\n\t\tlet primaryToDeduct = data.totalSettlement;\n\t\tlet secondaryToDeduct = 0;\n\n\t\tlet availablePrimary = data.cashInHandAmount;\n\t\tlet availableSecondary = data.cashInHandSecondaryAmount;\n\n\t\t// 1. Handle primary settlement\n\t\tlet deductedPrimary = Math.min(availablePrimary, primaryToDeduct);\n\t\tprimaryToDeduct -= deductedPrimary;\n\t\tavailablePrimary -= deductedPrimary;\n\n\t\t// fallback to secondary if needed\n\t\tif (primaryToDeduct > 0) {\n\t\t\tconst neededSecondary = roundSecondaryCurrency(primaryToDeduct * data.exchangeRate);\n\n\t\t\tconst deductedSecondary = Math.min(availableSecondary, neededSecondary);\n\n\t\t\tsecondaryToDeduct += deductedSecondary; // accumulate deduction\n\t\t\tavailableSecondary -= deductedSecondary;\n\n\t\t\tprimaryToDeduct = 0;\n\t\t}\n\n\t\t// 2. Handle secondary settlement\n\t\tlet deductedSecondaryDirect = Math.min(availableSecondary, data.totalSecondarySettlement);\n\t\tsecondaryToDeduct += deductedSecondaryDirect;\n\t\tavailableSecondary -= deductedSecondaryDirect;\n\n\t\tconst remainingSecondary = data.totalSecondarySettlement - deductedSecondaryDirect;\n\n\t\t// fallback to primary\n\t\tif (remainingSecondary > 0) {\n\t\t\tconst neededPrimary = roundBaseCurrency(remainingSecondary / data.exchangeRate);\n\n\t\t\tconst deductedPrimaryFallback = Math.min(availablePrimary, neededPrimary);\n\n\t\t\tdeductedPrimary += deductedPrimaryFallback;\n\t\t\tavailablePrimary -= deductedPrimaryFallback;\n\t\t}\n\n\t\tconst deltaPrimary = -deductedPrimary;\n\t\tconst deltaSecondary = -secondaryToDeduct;\n\n\t\treturn { deltaPrimary, deltaSecondary };\n\t}\n\n\t/**\n\t * Revokes a cash settlement\n\t *\n\t * @param reference - The reference ID of the settlement to revoke\n\t * @returns Confirmation of the revocation\n\t */\n\tpublic async revokeSettlement(reference: string): Promise<boolean> {\n\t\tconst logger = getLibraries().getLoggerKit();\n\n\t\tlogger.info('Revoking BOB settlement', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_REVOKE,\n\t\t\tdata: {\n\t\t\t\treference,\n\t\t\t},\n\t\t});\n\n\t\tconst settlement = await this.model.findOne({\n\t\t\tcrmNumber: reference,\n\t\t\tstatus: BobSettlementStatus.NOT_PAID,\n\t\t});\n\n\t\tif (!settlement) {\n\t\t\tconsole.error(`Settlement with reference ${reference} not found.`);\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: 'Settlement not found.',\n\t\t\t});\n\t\t}\n\n\t\tawait this.removeTransfer(reference);\n\n\t\tconst result = await this.model.findOneAndUpdate(\n\t\t\t{\n\t\t\t\tcrmNumber: reference,\n\t\t\t\tstatus: BobSettlementStatus.NOT_PAID,\n\t\t\t},\n\t\t\t{\n\t\t\t\tstatus: BobSettlementStatus.REVOKED,\n\t\t\t},\n\t\t\t{ new: true, runValidators: true }\n\t\t);\n\n\t\tlogger.info('BOB settlement revoked', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_REVOKE,\n\t\t\tdata: {\n\t\t\t\treference,\n\t\t\t\tsettlementId: settlement._id.toString(),\n\t\t\t\tresult,\n\t\t\t},\n\t\t});\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Revokes a cash settlement\n\t *\n\t * @param reference - The reference ID of the settlement to revoke\n\t * @returns Confirmation of the revocation\n\t */\n\tpublic async revokeRiderSettlements(rider: mongoose.Types.ObjectId): Promise<boolean> {\n\t\tconst logger = getLibraries().getLoggerKit();\n\n\t\tlogger.info('Revoking BOB settlements for rider', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_REVOKE,\n\t\t\tdata: {\n\t\t\t\triderId: rider.toString(),\n\t\t\t},\n\t\t});\n\n\t\tconst settlements = await this.model.find({\n\t\t\trider: rider,\n\t\t\tstatus: BobSettlementStatus.NOT_PAID,\n\t\t});\n\n\t\tif (!settlements.length) {\n\t\t\tlogger.info('No unpaid BOB settlements found for rider', {\n\t\t\t\ttag: LogTag.BOB_TRANSACTION_REVOKE,\n\t\t\t\tdata: {\n\t\t\t\t\triderId: rider.toString(),\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tnotFoundError('No unpaid settlements found.');\n\t\t}\n\n\t\tfor (const settlement of settlements) {\n\t\t\tawait this.removeTransfer(settlement.crmNumber);\n\t\t\tawait this.model.findByIdAndUpdate(settlement._id, {\n\t\t\t\tstatus: BobSettlementStatus.REVOKED,\n\t\t\t});\n\t\t}\n\n\t\tlogger.info('BOB settlements revoked for rider', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_REVOKE,\n\t\t\tdata: {\n\t\t\t\triderId: rider.toString(),\n\t\t\t\tsettlementIds: settlements.map(s => s._id.toString()),\n\t\t\t},\n\t\t});\n\n\t\treturn true;\n\t}\n\n\tprivate async removeTransfer(crmNumber: string) {\n\t\tconst logger = getLibraries().getLoggerKit();\n\n\t\tlogger.info('Removing transfer from BOB', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_REMOVE,\n\t\t\tdata: {\n\t\t\t\tcrmNumber,\n\t\t\t},\n\t\t});\n\n\t\tconst transferExists = await this.hasUnpaidTransfer(crmNumber);\n\n\t\tif (!transferExists) {\n\t\t\tlogger.info('No transfer exists for this crm number in bob', {\n\t\t\t\ttag: LogTag.BOB_TRANSACTION_CHECK,\n\t\t\t\tdata: {\n\t\t\t\t\tcrmNumber,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst bobData = {\n\t\t\tChannelType: BobChannelType.CO,\n\t\t\tCredentials: {\n\t\t\t\tUser: this.BOB_USER_NAME,\n\t\t\t\tPassword: this.BOB_PASSWORD,\n\t\t\t},\n\t\t\tModel: BobModel.C2B,\n\t\t\tCRMNumber: crmNumber,\n\t\t};\n\n\t\tconst { data } = await axios.post(`${this.BOB_URL}RemoveTransfer`, bobData, {\n\t\t\thttpsAgent: new https.Agent({ rejectUnauthorized: false }),\n\t\t});\n\n\t\tif (data.ErrorCode == 213) {\n\t\t\t// Record does not exist\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.ErrorCode != 100) {\n\t\t\tconsole.error(`Error in BOB removeTransfer: ${data.ErrorDescription}`);\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: 'Failed to post data to BOB API.',\n\t\t\t});\n\t\t}\n\n\t\tconst responseObject = await this.decompressResponse(data.Response);\n\n\t\tif (!responseObject || !responseObject.isSuccess) {\n\t\t\tconsole.error('Failed to remove transfer in BOB');\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: 'Failed to remove transfer in BOB.',\n\t\t\t});\n\t\t}\n\n\t\tlogger.info('Removed transfer from BOB', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_REMOVE,\n\t\t\tdata: {\n\t\t\t\tcrmNumber,\n\t\t\t\tresponseObject,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Check if there are pending settlements\n\t *\n\t * @param reference - The reference ID of the settlement to check\n\t * @returns true if there are pending settlements, false otherwise\n\t */\n\tpublic async hasPendingSettlements(reference: string): Promise<boolean> {\n\t\tconst pendingSettlements = await this.model.find({\n\t\t\tcrmNumber: reference,\n\t\t\tstatus: BobSettlementStatus.NOT_PAID,\n\t\t});\n\t\treturn pendingSettlements.length > 0;\n\t}\n\n\t/**\n\t * Check if there are pending settlements\n\t *\n\t * @param riderId - The ID of the rider to check\n\t * @returns true if there are pending settlements, false otherwise\n\t */\n\tpublic async hasPendingRiderSettlements(riderId: mongoose.Types.ObjectId): Promise<boolean> {\n\t\tconst pendingSettlements = await this.model.find({\n\t\t\trider: riderId,\n\t\t\tstatus: BobSettlementStatus.NOT_PAID,\n\t\t});\n\t\treturn pendingSettlements.length > 0;\n\t}\n\n\t/**\n\t * Get latest settlement info\n\t *\n\t * @param reference - The reference ID of the settlement to check\n\t * @returns the latest settlement if it exists, null otherwise\n\t */\n\tpublic async getLastSettlement(reference: string): Promise<ISettlementInfo | null> {\n\t\tconst pendingSettlements = await this.model\n\t\t\t.findOne({\n\t\t\t\tcrmNumber: reference,\n\t\t\t})\n\t\t\t.sort({ createdAt: -1 });\n\n\t\tif (!pendingSettlements) return null;\n\n\t\treturn {\n\t\t\tamount: pendingSettlements.amount || pendingSettlements.secondaryAmount || 0,\n\t\t\tcurrency: pendingSettlements.amount ? 'USD' : 'LBP',\n\t\t\treferenceNumber: pendingSettlements.crmNumber,\n\t\t\tstatus: (pendingSettlements.status ?? BobSettlementStatus.NOT_PAID) as unknown as ISettlementStatus,\n\t\t\tcreatedAt: pendingSettlements.createdAt ?? new Date(),\n\t\t\tupdatedAt: pendingSettlements.createdAt ?? new Date(),\n\t\t};\n\t}\n\n\t/**\n\t * Get latest settlement info\n\t *\n\t * @param riderId - The ID of the rider to check\n\t * @returns the latest settlement if it exists, null otherwise\n\t */\n\tpublic async getLastRiderSettlement(rider: mongoose.Types.ObjectId): Promise<ISettlementInfo | null> {\n\t\tconst lastSettlement = await this.model\n\t\t\t.findOne({\n\t\t\t\trider: rider,\n\t\t\t})\n\t\t\t.sort({ createdAt: -1 });\n\n\t\tif (!lastSettlement) return null;\n\n\t\treturn {\n\t\t\tamount: lastSettlement.amount || lastSettlement.secondaryAmount || 0,\n\t\t\tcurrency: lastSettlement.amount ? 'USD' : 'LBP',\n\t\t\treferenceNumber: lastSettlement.crmNumber,\n\t\t\tstatus: (lastSettlement.status ?? BobSettlementStatus.NOT_PAID) as unknown as ISettlementStatus,\n\t\t\tcreatedAt: lastSettlement.createdAt ?? new Date(),\n\t\t\tupdatedAt: lastSettlement.updatedAt ?? new Date(),\n\t\t};\n\t}\n\n\tprivate async getTransfers(\n\t\ttimeframe: { startDate: Date; endDate: Date },\n\t\tmodel: BobModel = BobModel.C2B\n\t): Promise<any[]> {\n\t\tconst DateTimeFrom = new Date(timeframe.startDate).toISOString().split('.')[0] + 'Z';\n\t\tconst DateTimeTo = new Date(timeframe.endDate).toISOString().split('.')[0] + 'Z';\n\n\t\tconst bobData = {\n\t\t\tChannelType: BobChannelType.CO,\n\t\t\tCredentials: {\n\t\t\t\tUser: this.BOB_USER_NAME,\n\t\t\t\tPassword: this.BOB_PASSWORD,\n\t\t\t},\n\t\t\tModel: model,\n\t\t\tDateTimeFrom,\n\t\t\tDateTimeTo,\n\t\t};\n\t\tconst { data } = await axios.post(`${this.BOB_URL}GetTransfers`, bobData, {\n\t\t\thttpsAgent: new https.Agent({ rejectUnauthorized: false }),\n\t\t});\n\n\t\tif (data.ErrorCode != 100) {\n\t\t\tconsole.error(`Error in BOB getTransfers: ${data.ErrorDescription}`);\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: 'Failed to post data to BOB API.',\n\t\t\t});\n\t\t}\n\n\t\tconst responseObject = await this.decompressResponse(data.Response);\n\n\t\tif (!responseObject) {\n\t\t\tconsole.error('Failed to get transfers in BOB');\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: 'Failed to get transfers in BOB.',\n\t\t\t});\n\t\t}\n\n\t\treturn responseObject;\n\t}\n\n\tprivate async decompressResponse(response: string): Promise<any> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t// Step 1: Decode Base64\n\t\t\tconst decodedBuffer = Buffer.from(response, 'base64');\n\n\t\t\t// Step 2: Decompress GZIP\n\t\t\tzlib.gunzip(decodedBuffer, (err, decompressedBuffer) => {\n\t\t\t\tif (err) {\n\t\t\t\t\tconsole.error('Error decompressing GZIP:', err);\n\t\t\t\t\tthrow new TRPCError({\n\t\t\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\t\t\tmessage: 'Failed to decompress data from BOB API.',\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// Step 3: Convert decompressed buffer to string\n\t\t\t\t\tconst decodedString = decompressedBuffer.toString('utf-8');\n\n\t\t\t\t\t// Step 4: Parse the JSON string to a JavaScript object\n\t\t\t\t\tconst responseObject = JSON.parse(decodedString);\n\n\t\t\t\t\tresolve(responseObject);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate async hasUnpaidTransfer(crmNumber: string): Promise<Boolean> {\n\t\tconst bobData = {\n\t\t\tChannelType: BobChannelType.CO,\n\t\t\tCredentials: {\n\t\t\t\tUser: this.BOB_USER_NAME,\n\t\t\t\tPassword: this.BOB_PASSWORD,\n\t\t\t},\n\t\t\tModel: BobModel.C2B,\n\t\t\tCRMNumber: crmNumber,\n\t\t};\n\t\tconst { data } = await axios.post(`${this.BOB_URL}GetTransferStatus`, bobData, {\n\t\t\thttpsAgent: new https.Agent({ rejectUnauthorized: false }),\n\t\t});\n\n\t\tif (data.ErrorCode == 213) {\n\t\t\t// Record does not exist\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data.ErrorCode != 100) {\n\t\t\tconsole.error(`Error in BOB getTransferStatus: ${data.ErrorDescription}`);\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: 'Failed to post data to BOB API.',\n\t\t\t});\n\t\t}\n\n\t\tconst responseObject = await this.decompressResponse(data.Response);\n\n\t\tif (!responseObject) {\n\t\t\tconsole.error('Failed to get settlement status in BOB');\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: 'Failed to get settlement status in BOB.',\n\t\t\t});\n\t\t}\n\n\t\tconst hasUnpaidTransfer = responseObject.some(\n\t\t\t(item: any) => item.CRMNumber == crmNumber && item.Status == BOBTransferStatus.NOT_PAID\n\t\t);\n\n\t\treturn hasUnpaidTransfer;\n\t}\n\n\tpublic async checkAllPendingTransfers() {\n\t\tconst logger = getLibraries().getLoggerKit();\n\n\t\tlogger.info('Checking pending BOB settlements', { tag: LogTag.BOB_TRANSACTION_CHECK });\n\n\t\tconst notPaidSettlements = await this.model.find({\n\t\t\tstatus: BobSettlementStatus.NOT_PAID,\n\t\t});\n\n\t\tif (!notPaidSettlements.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tlogger.info('Checking pending settlements', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_CHECK,\n\t\t\tdata: {\n\t\t\t\tcount: notPaidSettlements.length,\n\t\t\t\tsettlementIds: notPaidSettlements.map(s => s._id.toString()),\n\t\t\t},\n\t\t});\n\n\t\tlet maxDate = dayjs();\n\t\tlet minDate = dayjs();\n\n\t\tconst createdAtDates = notPaidSettlements.map(item => dayjs(item.createdAt!));\n\n\t\tif (createdAtDates.length > 0) {\n\t\t\tmaxDate = dayjs.max(...createdAtDates)!;\n\t\t\tminDate = dayjs.min(...createdAtDates)!;\n\t\t}\n\n\t\tconst maxDatePlusOneDay = maxDate.add(1, 'day').toDate();\n\t\tconst minDateMinusOneDay = minDate.subtract(1, 'day').toDate();\n\n\t\tconst transfers = await this.getTransfers({\n\t\t\tstartDate: minDateMinusOneDay,\n\t\t\tendDate: maxDatePlusOneDay,\n\t\t});\n\n\t\tlogger.info('Transactions on BOB', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_CHECK,\n\t\t\tdata: {\n\t\t\t\tcount: transfers.length,\n\t\t\t\ttransfers,\n\t\t\t\tstartDate: minDateMinusOneDay,\n\t\t\t\tendDate: maxDatePlusOneDay,\n\t\t\t},\n\t\t});\n\n\t\tif (!transfers || transfers.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst transferStatusMap = new Map<string, string>();\n\n\t\tfor (const trx of transfers) {\n\t\t\ttransferStatusMap.set(trx.ReferenceNumber, trx.Status);\n\t\t}\n\n\t\tlogger.info('Mapped transfer statuses', {\n\t\t\ttag: LogTag.BOB_TRANSACTION_CHECK,\n\t\t\tdata: {\n\t\t\t\ttransferStatusMap,\n\t\t\t},\n\t\t});\n\n\t\tawait Promise.all(\n\t\t\tnotPaidSettlements.map(async settlement => {\n\t\t\t\ttry {\n\t\t\t\t\tconst status = transferStatusMap.get(settlement.crmNumber);\n\n\t\t\t\t\tif (status == BOBTransferStatus.PAID) {\n\t\t\t\t\t\tawait this.settlePayment(settlement);\n\t\t\t\t\t}\n\n\t\t\t\t\tlogger.info(`Settled payment for crmNumber ${settlement.crmNumber}`, {\n\t\t\t\t\t\ttag: LogTag.BOB_TRANSACTION_CHECK,\n\t\t\t\t\t\tdata: { status },\n\t\t\t\t\t});\n\t\t\t\t} catch (err) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t`Failed settlement with crmNumber ${settlement.crmNumber}, id: ${settlement._id}`,\n\t\t\t\t\t\terr,\n\t\t\t\t\t\t{ tag: LogTag.BOB_TRANSACTION_CHECK }\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t}\n}\n"]}
|
|
@@ -21,6 +21,7 @@ class AdjustedLineItem {
|
|
|
21
21
|
note;
|
|
22
22
|
adjustmentStatus;
|
|
23
23
|
isAttributeAdjustedOnly;
|
|
24
|
+
isGroceryProduceAdjustment;
|
|
24
25
|
adjustedAttributes;
|
|
25
26
|
adjustedQuantity;
|
|
26
27
|
}
|
|
@@ -41,6 +42,10 @@ __decorate([
|
|
|
41
42
|
(0, typegoose_1.prop)({ type: Boolean, default: false }),
|
|
42
43
|
__metadata("design:type", Boolean)
|
|
43
44
|
], AdjustedLineItem.prototype, "isAttributeAdjustedOnly", void 0);
|
|
45
|
+
__decorate([
|
|
46
|
+
(0, typegoose_1.prop)({ type: Boolean, default: false }),
|
|
47
|
+
__metadata("design:type", Boolean)
|
|
48
|
+
], AdjustedLineItem.prototype, "isGroceryProduceAdjustment", void 0);
|
|
44
49
|
__decorate([
|
|
45
50
|
(0, typegoose_1.prop)({ type: () => [[line_item_attribute_model_1.LineItemAttribute]], default: [] }),
|
|
46
51
|
__metadata("design:type", Array)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adjustment-information.model.js","sourceRoot":"/","sources":["libraries/mongo/models/embedded/adjustment-information.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA2D;AAC3D,qDAAgG;AAEhG,wDAA8C;AAC9C,gDAAuC;AACvC,uCAAiC;AACjC,2EAAgE;AAEhE,MAAa,gBAAgB;IAErB,QAAQ,CAAiB;IAGzB,IAAI,CAAU;IAGd,gBAAgB,CAAoB;IAGpC,uBAAuB,CAAW;IAGlC,kBAAkB,CAAyB;IAG3C,gBAAgB,CAAU;CACjC;
|
|
1
|
+
{"version":3,"file":"adjustment-information.model.js","sourceRoot":"/","sources":["libraries/mongo/models/embedded/adjustment-information.model.ts"],"names":[],"mappings":"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","sourcesContent":["import { prop, PropType, Ref } from '@typegoose/typegoose';\nimport { AdjustmentReason, AdjustmentStatus, AdjustmentType } from '../../../../utilities/enum';\nimport { Product } from '../product.model';\nimport { LineItem } from '../line-item.model';\nimport { Admin } from '../admin.model';\nimport { Types } from 'mongoose';\nimport { LineItemAttribute } from './line-item-attribute.model';\n\nexport class AdjustedLineItem {\n\t@prop({ required: true, ref: () => LineItem })\n\tpublic lineItem!: Ref<LineItem>;\n\n\t@prop({ type: String, maxlength: 150 })\n\tpublic note?: string;\n\n\t@prop({ type: String, enum: AdjustmentStatus })\n\tpublic adjustmentStatus?: AdjustmentStatus;\n\n\t@prop({ type: Boolean, default: false })\n\tpublic isAttributeAdjustedOnly?: boolean;\n\n\t@prop({ type: Boolean, default: false })\n\tpublic isGroceryProduceAdjustment?: boolean;\n\n\t@prop({ type: () => [[LineItemAttribute]], default: [] })\n\tpublic adjustedAttributes?: LineItemAttribute[][];\n\n\t@prop({ type: Number, default: 0 })\n\tpublic adjustedQuantity?: number;\n}\n\nexport class AdjustmentInformation {\n\t@prop({ type: String, enum: AdjustmentReason })\n\tpublic reason?: AdjustmentReason;\n\n\t@prop({ type: () => [Types.ObjectId] }, PropType.MAP)\n\tpublic suggestedProduct?: Map<string, Ref<Product>[]>;\n\n\t@prop({ type: () => [AdjustedLineItem], default: [] })\n\tpublic adjustedLineItems?: AdjustedLineItem[];\n\n\t@prop({ type: Date, default: () => new Date() })\n\tpublic requestedAt?: Date;\n\n\t@prop({ type: () => Date })\n\tpublic resolvedAt?: Date;\n\n\t@prop({ ref: () => Admin })\n\tpublic admin?: Ref<Admin>;\n\n\t@prop({ type: Boolean, default: false })\n\tpublic isRequestByShop?: boolean;\n}\n\nexport class AdjustmentHistory {\n\t@prop({ type: () => [Types.ObjectId] }, PropType.MAP)\n\tpublic suggestedProduct?: Map<string, Ref<Product>[]>;\n\n\t@prop({ type: () => [AdjustedLineItem], default: [] })\n\tpublic adjustedLineItems?: AdjustedLineItem[];\n\n\t@prop({ type: () => [AdjustedLineItem], default: [] })\n\tpublic addedLineItems?: AdjustedLineItem[];\n\n\t@prop({ type: Date, default: new Date() })\n\tpublic timestamp?: Date;\n\n\t@prop({ type: String, enum: AdjustmentType })\n\tpublic adjustmentType?: AdjustmentType;\n\n\t@prop({ required: true, type: String })\n\tpublic adjustmentRef!: string;\n\n\t@prop({ ref: () => Admin })\n\tpublic admin?: Ref<Admin>;\n}\n"]}
|
|
@@ -62,7 +62,7 @@ __decorate([
|
|
|
62
62
|
__metadata("design:type", Number)
|
|
63
63
|
], OrderPriceBreakdown.prototype, "price", void 0);
|
|
64
64
|
__decorate([
|
|
65
|
-
(0, typegoose_1.prop)({
|
|
65
|
+
(0, typegoose_1.prop)({ type: Number, min: 0, max: 99999999 }),
|
|
66
66
|
__metadata("design:type", Number)
|
|
67
67
|
], OrderPriceBreakdown.prototype, "oldPrice", void 0);
|
|
68
68
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"price-breakdown.model.js","sourceRoot":"/","sources":["libraries/mongo/models/embedded/price-breakdown.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA4C;AAE5C,MAAa,cAAc;IAEnB,IAAI,CAAU;IAGd,SAAS,CAAU;IAGnB,KAAK,CAAU;IAGf,GAAG,CAAU;CACpB;AAZD,wCAYC;AAVO;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;4CACF;AAGd;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;;iDACrB;AAGnB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;;6CACxC;AAGf;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;;2CAChB;AAGrB,MAAa,mBAAmB;IAExB,IAAI,CAAU;IAGd,SAAS,CAAU;IAGnB,YAAY,CAAU;IAGtB,KAAK,CAAU;IAGf,QAAQ,CAAU;IAGlB,cAAc,CAAU;IAGxB,iBAAiB,CAAU;IAG3B,GAAG,CAAS;CACnB;AAxBD,kDAwBC;AAtBO;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;iDACF;AAGd;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;;sDACrB;AAGnB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;;yDAClB;AAGtB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;;kDACxC;AAGf;IADN,IAAA,gBAAI,EAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"price-breakdown.model.js","sourceRoot":"/","sources":["libraries/mongo/models/embedded/price-breakdown.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA4C;AAE5C,MAAa,cAAc;IAEnB,IAAI,CAAU;IAGd,SAAS,CAAU;IAGnB,KAAK,CAAU;IAGf,GAAG,CAAU;CACpB;AAZD,wCAYC;AAVO;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;4CACF;AAGd;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;;iDACrB;AAGnB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;;6CACxC;AAGf;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;;2CAChB;AAGrB,MAAa,mBAAmB;IAExB,IAAI,CAAU;IAGd,SAAS,CAAU;IAGnB,YAAY,CAAU;IAGtB,KAAK,CAAU;IAGf,QAAQ,CAAU;IAGlB,cAAc,CAAU;IAGxB,iBAAiB,CAAU;IAG3B,GAAG,CAAS;CACnB;AAxBD,kDAwBC;AAtBO;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;iDACF;AAGd;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;;sDACrB;AAGnB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;;yDAClB;AAGtB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;;kDACxC;AAGf;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;;qDACrB;AAGlB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;;2DACA;AAGxB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;;8DACG;AAG3B;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;;gDACjB","sourcesContent":["import { prop } from '@typegoose/typegoose';\n\nexport class PriceBreakdown {\n\t@prop({ type: String })\n\tpublic unit?: string;\n\n\t@prop({ type: Number, min: 0, max: 999999999 })\n\tpublic unitValue?: number;\n\n\t@prop({ required: true, type: Number, min: 0, max: 99999999 })\n\tpublic price!: number;\n\n\t@prop({ type: String, index: true })\n\tpublic uid?: string;\n}\n\nexport class OrderPriceBreakdown {\n\t@prop({ type: String })\n\tpublic unit?: string;\n\n\t@prop({ type: Number, min: 0, max: 999999999 })\n\tpublic unitValue?: number;\n\n\t@prop({ type: Number, min: 0, max: 999999999 })\n\tpublic oldUnitValue?: number;\n\n\t@prop({ required: true, type: Number, min: 0, max: 99999999 })\n\tpublic price!: number;\n\n\t@prop({ type: Number, min: 0, max: 99999999 })\n\tpublic oldPrice?: number;\n\n\t@prop({ type: Number, min: 0 })\n\tpublic secondaryPrice?: number;\n\n\t@prop({ type: Number, min: 0 })\n\tpublic oldSecondaryPrice?: number;\n\n\t@prop({ type: String, index: true })\n\tpublic uid: string;\n}\n"]}
|
|
@@ -14,6 +14,7 @@ const typegoose_1 = require("@typegoose/typegoose");
|
|
|
14
14
|
class RiderSetting {
|
|
15
15
|
dailyWorkingHours;
|
|
16
16
|
bobCashSettlementLimit;
|
|
17
|
+
maxCashBalanceForBobPayout;
|
|
17
18
|
cashHoldPeriodLimitInMinutes;
|
|
18
19
|
tips;
|
|
19
20
|
equipments;
|
|
@@ -27,6 +28,10 @@ __decorate([
|
|
|
27
28
|
(0, typegoose_1.prop)({ type: Number, default: Infinity, min: 0 }),
|
|
28
29
|
__metadata("design:type", Number)
|
|
29
30
|
], RiderSetting.prototype, "bobCashSettlementLimit", void 0);
|
|
31
|
+
__decorate([
|
|
32
|
+
(0, typegoose_1.prop)({ type: Number, default: Infinity, min: 1 }),
|
|
33
|
+
__metadata("design:type", Number)
|
|
34
|
+
], RiderSetting.prototype, "maxCashBalanceForBobPayout", void 0);
|
|
30
35
|
__decorate([
|
|
31
36
|
(0, typegoose_1.prop)({ type: Number, default: 10080, min: 1 }),
|
|
32
37
|
__metadata("design:type", Number)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rider-setting.model.js","sourceRoot":"/","sources":["libraries/mongo/models/embedded/rider-setting.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA4C;AAE5C,MAAa,YAAY;IAExB,iBAAiB,CAAU;IAG3B,sBAAsB,CAAU;IAGhC,4BAA4B,CAAU;IAGtC,IAAI,CAAY;IAGhB,UAAU,CAAY;CACtB;
|
|
1
|
+
{"version":3,"file":"rider-setting.model.js","sourceRoot":"/","sources":["libraries/mongo/models/embedded/rider-setting.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA4C;AAE5C,MAAa,YAAY;IAExB,iBAAiB,CAAU;IAG3B,sBAAsB,CAAU;IAGhC,0BAA0B,CAAU;IAGpC,4BAA4B,CAAU;IAGtC,IAAI,CAAY;IAGhB,UAAU,CAAY;CACtB;AAlBD,oCAkBC;AAhBA;IADC,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;;uDACnB;AAG3B;IADC,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;;4DAClB;AAGhC;IADC,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;;gEACd;AAGpC;IADC,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;;kEACT;AAGtC;IADC,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;;0CAC5B;AAGhB;IADC,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;;gDACtB","sourcesContent":["import { prop } from '@typegoose/typegoose';\n\nexport class RiderSetting {\n\t@prop({ type: Number, default: null, min: 0 })\n\tdailyWorkingHours?: number;\n\n\t@prop({ type: Number, default: Infinity, min: 0 })\n\tbobCashSettlementLimit?: number;\n\n\t@prop({ type: Number, default: Infinity, min: 1 })\n\tmaxCashBalanceForBobPayout?: number;\n\n\t@prop({ type: Number, default: 10080, min: 1 }) // default 7 days\n\tcashHoldPeriodLimitInMinutes?: number;\n\n\t@prop({ type: () => [Number], default: [] })\n\ttips?: number[];\n\n\t@prop({ type: () => [String], default: [] })\n\tequipments?: string[];\n}\n"]}
|
package/dist/types/README.md
CHANGED
package/dist/types/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lyxa.ai/types",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.253-alpha.1",
|
|
4
4
|
"description": "Lyxa type definitions and validation schemas for both frontend and backend",
|
|
5
5
|
"author": "elie <42282499+Internalizable@users.noreply.github.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -470,7 +470,8 @@ export declare enum BobAccountType {
|
|
|
470
470
|
SHOP = "shop"
|
|
471
471
|
}
|
|
472
472
|
export declare enum BobSettlementType {
|
|
473
|
-
SETTLE_CASH = "settle_cash"
|
|
473
|
+
SETTLE_CASH = "settle_cash",
|
|
474
|
+
SETTLE_PAYOUT = "settle_payout"
|
|
474
475
|
}
|
|
475
476
|
export declare enum BobSettlementStatus {
|
|
476
477
|
NOT_PAID = "not_paid",
|
|
@@ -478,13 +479,15 @@ export declare enum BobSettlementStatus {
|
|
|
478
479
|
REVOKED = "revoked"
|
|
479
480
|
}
|
|
480
481
|
export declare enum BobModel {
|
|
481
|
-
C2B = "C2B"
|
|
482
|
+
C2B = "C2B",
|
|
483
|
+
B2C = "B2C"
|
|
482
484
|
}
|
|
483
485
|
export declare enum BobChannelType {
|
|
484
486
|
CO = "CO"
|
|
485
487
|
}
|
|
486
488
|
export declare enum BobType {
|
|
487
|
-
INWARD = "inward"
|
|
489
|
+
INWARD = "inward",
|
|
490
|
+
OUTWARD = "outward"
|
|
488
491
|
}
|
|
489
492
|
export declare enum CouponType {
|
|
490
493
|
GLOBAL = "global",
|
|
@@ -644,7 +647,8 @@ export declare enum StatusTimelineType {
|
|
|
644
647
|
ADDRESS_CHANGED = "address_changed",
|
|
645
648
|
REQUEST_SEND_TO_RIDER = "request_send_to_rider",
|
|
646
649
|
ORDER_IS_REFUNDED = "order_is_refunded",
|
|
647
|
-
ORDER_IS_REPLACED = "order_is_replaced"
|
|
650
|
+
ORDER_IS_REPLACED = "order_is_replaced",
|
|
651
|
+
GROCERY_PRODUCE_ADJUSTMENT = "grocery_produce_adjustment"
|
|
648
652
|
}
|
|
649
653
|
export declare enum ServiceBookingStatusTimelineType {
|
|
650
654
|
UPDATE_STATUS = "update_status",
|
|
@@ -526,6 +526,7 @@ var BobAccountType;
|
|
|
526
526
|
var BobSettlementType;
|
|
527
527
|
(function (BobSettlementType) {
|
|
528
528
|
BobSettlementType["SETTLE_CASH"] = "settle_cash";
|
|
529
|
+
BobSettlementType["SETTLE_PAYOUT"] = "settle_payout";
|
|
529
530
|
})(BobSettlementType || (exports.BobSettlementType = BobSettlementType = {}));
|
|
530
531
|
var BobSettlementStatus;
|
|
531
532
|
(function (BobSettlementStatus) {
|
|
@@ -536,6 +537,7 @@ var BobSettlementStatus;
|
|
|
536
537
|
var BobModel;
|
|
537
538
|
(function (BobModel) {
|
|
538
539
|
BobModel["C2B"] = "C2B";
|
|
540
|
+
BobModel["B2C"] = "B2C";
|
|
539
541
|
})(BobModel || (exports.BobModel = BobModel = {}));
|
|
540
542
|
var BobChannelType;
|
|
541
543
|
(function (BobChannelType) {
|
|
@@ -544,6 +546,7 @@ var BobChannelType;
|
|
|
544
546
|
var BobType;
|
|
545
547
|
(function (BobType) {
|
|
546
548
|
BobType["INWARD"] = "inward";
|
|
549
|
+
BobType["OUTWARD"] = "outward";
|
|
547
550
|
})(BobType || (exports.BobType = BobType = {}));
|
|
548
551
|
var CouponType;
|
|
549
552
|
(function (CouponType) {
|
|
@@ -734,6 +737,7 @@ var StatusTimelineType;
|
|
|
734
737
|
StatusTimelineType["REQUEST_SEND_TO_RIDER"] = "request_send_to_rider";
|
|
735
738
|
StatusTimelineType["ORDER_IS_REFUNDED"] = "order_is_refunded";
|
|
736
739
|
StatusTimelineType["ORDER_IS_REPLACED"] = "order_is_replaced";
|
|
740
|
+
StatusTimelineType["GROCERY_PRODUCE_ADJUSTMENT"] = "grocery_produce_adjustment";
|
|
737
741
|
})(StatusTimelineType || (exports.StatusTimelineType = StatusTimelineType = {}));
|
|
738
742
|
var ServiceBookingStatusTimelineType;
|
|
739
743
|
(function (ServiceBookingStatusTimelineType) {
|