@it_kyryl/arbitrage_admin_schema
Version:
Schema for arbitrage admin panel
59 lines (58 loc) • 3.09 kB
JavaScript
;
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;