Exemple #1
0
        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");
        }
Exemple #2
0
        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);
        }