public async Task Execute(ProjectDonatedModelViaAffiliateProgramModel model, PerformContext context) { context.WriteLine($"ProjectDonatedViaAffiliateProgramJob started with model data - {JsonConvert.SerializeObject(model)}"); // BC7Fee (9.5%) var bc7Fee = _withdrawalHelper.CalculateAmountToWithdraw(model.Amount, AffiliateProgramType.Bc7ConstFee); ScheduleWithdrawalJob( _rootId, bc7Fee, WithdrawalForHelper.ProjectDonationViaAffiliateProgramBc7ConstFee); var amountAfterTakenFee = model.Amount - bc7Fee; // DonatedDirectly (80%) ScheduleWithdrawalJob( model.DonatedUserMultiAccountId, _withdrawalHelper.CalculateAmountToWithdraw(amountAfterTakenFee, AffiliateProgramType.DirectDonate), WithdrawalForHelper.ProjectDonationViaAffiliateProgramDirectDonate); // DonatedLineA (10%) var lineAMultiAccount = await _userMultiAccountHelper.GetSponsorForMultiAccount(model.DonatedUserMultiAccountId); ScheduleWithdrawalJob( lineAMultiAccount.Id, _withdrawalHelper.CalculateAmountToWithdraw(amountAfterTakenFee, AffiliateProgramType.AffiliateLineA), WithdrawalForHelper.ProjectDonationViaAffiliateProgramLineA); // DonatedLineB (5%) var lineBMultiAccount = await _userMultiAccountHelper.GetSponsorForMultiAccount(lineAMultiAccount.Id); ScheduleWithdrawalJob( lineBMultiAccount.Id, _withdrawalHelper.CalculateAmountToWithdraw(amountAfterTakenFee, AffiliateProgramType.AffiliateLineB), WithdrawalForHelper.ProjectDonationViaAffiliateProgramLineB); // BC7DonatedFee (5%) ScheduleWithdrawalJob( _rootId, _withdrawalHelper.CalculateAmountToWithdraw(amountAfterTakenFee, AffiliateProgramType.Bc7DonateFee), WithdrawalForHelper.ProjectDonationViaAffiliateProgramBc7DonateFee); // TODO: WithdrawJob in the future to process automatically withdrawal via payment system to the user's btc wallet context.WriteLine("ProjectDonatedViaAffiliateProgramJob completed"); }
public async Task Execute(InitWithdrawalModel initWithdrawalModel, PerformContext context) { context.WriteLine($"InitWithdrawalJob started with data: {JsonConvert.SerializeObject(initWithdrawalModel)}"); var matrixPositionInLineB = await _matrixPositionRepository.GetAsync(initWithdrawalModel.MatrixPositionId); context.WriteLine($"Matrix position data: {JsonConvert.SerializeObject(matrixPositionInLineB)}"); var matrixOwner = await _matrixPositionHelper.GetTopParentAsync(matrixPositionInLineB, matrixPositionInLineB.MatrixLevel); context.WriteLine($"Matrix owner data: {JsonConvert.SerializeObject(matrixOwner)}"); if (!matrixOwner.UserMultiAccountId.HasValue) { throw new InvalidOperationException($"Matrix owner position with ID {matrixOwner.Id} does not assigned multi account."); } var amountToWithdraw = _withdrawalHelper.CalculateAmountToWithdraw(matrixOwner.MatrixLevel); var withdrawal = new Withdrawal( Guid.NewGuid(), matrixOwner.UserMultiAccountId.Value, amountToWithdraw, PaymentSystemType.BitBayPay, initWithdrawalModel.WithdrawalFor); BackgroundJob.Enqueue <CommitWithdrawalJob>( job => job.Execute(withdrawal, null)); // TODO: WithdrawJob in the future to process automatically withdrawal via payment system to the user's btc wallet context.WriteLine("InitWithdrawalJob completed"); }
public Task Execute(ProjectDonatedModel projectDonatedModel, PerformContext context) { context.WriteLine($"ProjectDonatedJob started with projectDonatedModel data - {JsonConvert.SerializeObject(projectDonatedModel)}"); var amountToWithdraw = _withdrawalHelper.CalculateAmountToWithdraw(projectDonatedModel.Amount); var withdrawal = new Withdrawal( Guid.NewGuid(), projectDonatedModel.DonatedUserMultiAccountId, amountToWithdraw, PaymentSystemType.BitBayPay, WithdrawalForHelper.ProjectDonation); BackgroundJob.Enqueue <CommitWithdrawalJob>( job => job.Execute(withdrawal, null)); // TODO: WithdrawJob in the future to process automatically withdrawal via payment system to the user's btc wallet context.WriteLine("ProjectDonatedJob completed"); return(Task.CompletedTask); }