public async Task <TransactResponseViewModel> Transact(TransactViewModel transactViewModel)
        {
            var supporter  = _customerService.GetCustomerById(transactViewModel.SupporterId);
            var ambassador = _customerService.GetCustomerById(supporter.AmbassadorId);
            var service    = _serviceService.GetServiceById(transactViewModel.ServiceId);
            var commission = ComputeAmbassadorCommission(transactViewModel.Amount, service.AmbassadorCommissionRate);

            if (supporter != null && service != null)
            {
                var newServiceTransaction = new ServiceTransaction
                {
                    ServiceId        = transactViewModel.ServiceId,
                    AmbassadorId     = supporter.AmbassadorId,
                    SupporterId      = transactViewModel.SupporterId,
                    Amount           = _dataProtector.Protect(transactViewModel.Amount.ToString()),
                    CommissionAmount = _dataProtector.Protect(commission.ToString()),
                    CreatedOn        = DateTime.UtcNow
                };

                await _serviceTransactionService.InsertServiceTransactionAsync(newServiceTransaction);

                if (ambassador.CommissionBalance == null)
                {
                    ambassador.CommissionBalance = newServiceTransaction.CommissionAmount;
                }
                else
                {
                    var ambassadorCommissionBalance = Convert.ToDecimal(_dataProtector.Unprotect(ambassador.CommissionBalance)) + commission;
                    ambassador.CommissionBalance = _dataProtector.Protect(ambassadorCommissionBalance.ToString());
                }

                _customerService.UpdateCustomer(ambassador);
            }

            return(new TransactResponseViewModel
            {
                ServicePaid = service.Name,
                Amount = transactViewModel.Amount,
                PaidBy = supporter.Name,
                CommissionPaidTo = ambassador.Name
            });
        }
 public TransactWindowView(AClient selectedItem)
 {
     InitializeComponent();
     DataContext = new TransactViewModel(selectedItem);
 }
示例#3
0
 public TransactWindow(TransactViewModel viewModel)
 {
     InitializeComponent();
     DataContext = viewModel;
 }
示例#4
0
 public async Task <TransactResponseViewModel> Transact([FromBody] TransactViewModel transactViewModel)
 {
     return(await _networkMarketingFactory.Transact(transactViewModel));
 }