UNPKG

@it_kyryl/arbitrage_admin_schema

Version:

Schema for arbitrage admin panel

104 lines (103 loc) 5.07 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const big_js_1 = __importDefault(require("big.js")); const moment_timezone_1 = __importDefault(require("moment-timezone")); class ResolveUserFinanceReportUseCase { dependency; constructor(dependency) { this.dependency = dependency; } async execute({ totalFinanceReport, userFinanceProfile, financeReport, providerAccounts }) { // calculate static monthly salary, hourly salary rate await this.resolverUserFinanceReport({ userFinanceProfile, userFinanceReport: financeReport.userFinanceReport, financeReportId: financeReport.id }); // calculate providers revenue await this.resolveProviderRevenueReport({ financeReportId: financeReport.id, totalFinanceReport, userId: userFinanceProfile.userId, providerAccounts }); // calculate accounts spend await this.resolveAccountsSpendReport({ financeReportId: financeReport.id, totalFinanceReport, userId: userFinanceProfile.userId }); } // resolve fixed salary, hors salary async resolverUserFinanceReport({ userFinanceProfile, userFinanceReport, financeReportId }) { let fixedSalary = new big_js_1.default(userFinanceProfile.fixedSalary); let workingHours = 0; let hourlyRate = userFinanceProfile.hourlyRate; let totalRateSalary = new big_js_1.default(workingHours).mul(new big_js_1.default(hourlyRate)); let totalEmploymentSalary = totalRateSalary.add(fixedSalary); if (!userFinanceReport) { userFinanceReport = await this.dependency.userFinanceReportRepository.createUserFinanceReportForResolveFinanceProviderUseCase({ financeReportId, fixedSalary: fixedSalary.toNumber(), hourlyRate: hourlyRate, workingHours, totalEmploymentSalary: totalEmploymentSalary.toNumber(), totalRateSalary: totalRateSalary.toNumber() }); } else if (userFinanceReport.totalEmploymentSalary !== totalEmploymentSalary.toNumber()) { await this.dependency.userFinanceReportRepository.updateUserFinanceReport(userFinanceReport.id, { fixedSalary: fixedSalary.toNumber(), workingHours, hourlyRate, totalRateSalary: totalRateSalary.toNumber(), totalEmploymentSalary: totalEmploymentSalary.toNumber() }); } } async resolveProviderRevenueReport({ financeReportId, totalFinanceReport, userId, providerAccounts }) { for (let providerAccount of providerAccounts) { const providerAccountId = providerAccount.id; const dateRevenue = await this.dependency.dateRevenueRepository.getTotalDateRevenueForResolveFinanceProviderUseCase({ dateFrom: (0, moment_timezone_1.default)(totalFinanceReport.dateFrom), dateTo: (0, moment_timezone_1.default)(totalFinanceReport.dateTo), providerAccountId, userId }); await this.dependency.providerRevenueReportRepository.createOrUpdateProviderRevenueReportForResolveUserFinanceReportUseCase({ revenue: dateRevenue, financeReportId, providerAccountId }); } } async resolveAccountsSpendReport({ financeReportId, totalFinanceReport, userId }) { const accountsSpend = await this.dependency.adStatRepository.getGroupedAccountSpend({ userId, dateFrom: (0, moment_timezone_1.default)(totalFinanceReport.dateFrom), dateTo: (0, moment_timezone_1.default)(totalFinanceReport.dateTo) }); for (let accountSpend of accountsSpend) { const accountData = await this.dependency.accountRepository.getAccountDetailsForFinanceResolver(accountSpend.accountId); if (!accountData) continue; const feeSubscription = accountData.startFee; const feePercent = accountData.accountFeePercent; const fee = new big_js_1.default(feePercent).mul(accountSpend.spend); const totalSpend = fee.plus(new big_js_1.default(accountSpend.spend)).plus(new big_js_1.default(feeSubscription)); await this.dependency.accountSpendReportRepository.createOrUpdateAccountSpendReportForResolveUserFinanceReportUseCase({ accountId: accountSpend.accountId, financeReportId, feeSubscription, feePercent, fee: fee.toNumber(), spend: accountSpend.spend, totalSpend: totalSpend.toNumber() }); } } } exports.default = ResolveUserFinanceReportUseCase;