UNPKG

@it_kyryl/arbitrage_admin_schema

Version:

Schema for arbitrage admin panel

59 lines (58 loc) 3.09 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const moment_timezone_1 = __importDefault(require("moment-timezone")); class ResolveFinanceBalanceUseCase { dependency; constructor(dependency) { this.dependency = dependency; } async execute({ financeProfile, mainTimezone, monthlyReportId, todayDate }) { // resolve current balance here // const rulesTotalRevenue = const balanceSettings = await this.dependency.balanceSettingRepository.resolveFinanceFindManyBalanceRepositoryByFinanceProfileId({ financeProfileId: financeProfile.id }); for (let balanceSetting of balanceSettings) { // guards, do not create transactions if (financeProfile.currentBalance === 0) continue; if (balanceSetting.currentToOutstandingPayoutAmount === 0) { if (balanceSetting.currentToOutstandingPayoutPercent === 0) continue; } const isTodayDayByDayOfTheMonth = this.dependency.momentService.isTodayDayByDayOfTheMonth(balanceSetting.currentToOutstandingPayoutDay, mainTimezone); if (!isTodayDayByDayOfTheMonth) continue; const isTodaySameDayByLastUpdate = balanceSetting.currentToOutstandingLastActionDate ? this.dependency.momentService.isTodayTheSameDateAs((0, moment_timezone_1.default)(balanceSetting.currentToOutstandingLastActionDate)) : false; if (isTodaySameDayByLastUpdate) continue; const transactionHasBeenCreated = await this.dependency.transactionRepository.hasIncomingTransactionBeenCreatedForFinanceProfile({ date: this.dependency.momentService.getCurDate(), financeProfileId: financeProfile.id, transactionType: 'CURRENT_TO_OUTSTANDING' }); if (!transactionHasBeenCreated) continue; await this.dependency.transactionService.currentToOutstandingTransaction({ balanceSettingTitle: balanceSetting.title, currency: financeProfile.payoutCurrency, currentBalance: financeProfile.currentBalance, financeProfileId: financeProfile.id, outstandingBalance: financeProfile.outstandingBalance, payoutPercent: balanceSetting.currentToOutstandingPayoutPercent, staticPayoutAmount: balanceSetting.currentToOutstandingPayoutAmount, dependency: { financeReportRepository: this.dependency.financeReportRepository, balanceSettingRepository: this.dependency.balanceSettingRepository }, todayDate, balanceSettingId: balanceSetting.id, monthlyReportId: monthlyReportId }); } } } exports.default = ResolveFinanceBalanceUseCase;