예제 #1
0
        public async Task <IActionResult> CampaignPayment(CreateCampaignPaymentViewModel model)
        {
            var paymentResult = await _paymentService.CreateAgencyPayment(CurrentUser.Id, model, CurrentUser.Username);

            var campaign = await _campaignService.GetCampaignById(model.CampaignId);

            if (paymentResult.Status == Core.Entities.TransactionStatus.Completed && paymentResult.Amount > 0)
            {
                BackgroundJob.Enqueue <ICampaignService>(m => m.RequestJoinCampaignByAgency(CurrentUser.Id, model.CampaignId, CurrentUser.Username));
                //########### Longhk add create notification ##########################################################


                string _msg  = string.Format("Chiến dịch \"{0}\" đã được thanh toán bởi doanh nghiệp \"{1}\", với số tiền {2}.", campaign.Title, CurrentUser.Name, paymentResult.Amount.ToPriceText());
                string _data = "Campaign";
                await _notificationService.CreateNotification(model.CampaignId, EntityType.System, 0, NotificationType.AgencyPayCampaignService, _msg, _data);

                //#####################################################################################################
            }

            if (paymentResult.ErrorCode == PaymentResultErrorCode.ChoHeThongDuyetRutTien)
            {
                try {
                    //########### Longhk add create notification ##########################################################
                    string _msg  = string.Format("Doanh nghiệp \"{0}\" yêu cầu rút tiền chiến dịch \"{1}\", với số tiền {2}.", CurrentUser.Name, campaign.Title, paymentResult.Amount.ToPriceText());
                    string _data = "Transaction";
                    await _notificationService.CreateNotification(paymentResult.TransactionId, EntityType.System, 0, NotificationType.AgencyRequestWithdrawFromCampaign, _msg, _data);

                    //#####################################################################################################
                }
                catch { }
            }

            ViewBag.PaymentResult = paymentResult;
            return(PartialView("ModalPaymentMessage"));
        }
예제 #2
0
        public async Task <PaymentResultViewModel> CreateAgencyPayment(int agencyId, CreateCampaignPaymentViewModel model, string username)
        {
            var payment = await _campaignRepository.GetCampaignPaymentByAgency(agencyId, model.CampaignId);

            if (payment == null)
            {
                return(new PaymentResultViewModel(PaymentResultErrorCode.ThongTinThanhToanKhongChinhXac));
            }
            long amount          = 0;
            var  senderId        = 0;
            var  receiverId      = 0;
            var  transactionType = TransactionType.Undefined;
            var  refId           = payment.CampaignId;
            var  refData         = string.Empty;

            if (payment.IsValid)
            {
                //service charge --> tru tien cho agency ; + tien cho he thong
                receiverId = await _walletRepository.GetSystemId();

                senderId = await _walletRepository.GetWalletId(Core.Entities.EntityType.Agency, agencyId);

                amount          = payment.TotalChargeValue;
                transactionType = amount > 0 ? TransactionType.CampaignServiceCharge : TransactionType.CampaignServiceCashBack;

                return(await Pay(senderId, receiverId, amount, transactionType, model.Note, username, refId, refData));
            }

            return(new PaymentResultViewModel(PaymentResultErrorCode.ThongTinThanhToanKhongChinhXac));
        }
예제 #3
0
        public async Task <IActionResult> CampaignPayment(CreateCampaignPaymentViewModel model)
        {
            var paymentResult = await _paymentService.CreateAgencyPayment(CurrentUser.Id, model, CurrentUser.Username);

            if (paymentResult.Status == Core.Entities.TransactionStatus.Completed && paymentResult.Amount > 0)
            {
                BackgroundJob.Enqueue <ICampaignService>(m => m.RequestJoinCampaignByAgency(CurrentUser.Id, model.CampaignId, CurrentUser.Username));
            }
            ViewBag.PaymentResult = paymentResult;
            return(PartialView("ModalPaymentMessage"));
        }
예제 #4
0
        public async Task <PaymentResultViewModel> CreateAgencyPayment(int agencyId, CreateCampaignPaymentViewModel model, string username)
        {
            var payment = await _campaignRepository.GetCampaignPaymentByAgency(agencyId, model.CampaignId);

            if (payment == null)
            {
                return(new PaymentResultViewModel(PaymentResultErrorCode.ThongTinThanhToanKhongChinhXac));
            }
            long amount          = 0;
            long amountOriginal  = 0;
            var  senderId        = 0;
            var  receiverId      = 0;
            var  transactionType = TransactionType.Undefined;
            var  refId           = payment.CampaignId;
            var  refData         = string.Empty;

            if (payment.IsValid)
            {
                //service charge --> tru tien cho agency ; + tien cho he thong
                receiverId = await _walletRepository.GetSystemId();

                senderId = await _walletRepository.GetWalletId(Core.Entities.EntityType.Agency, agencyId);

                amount         = payment.TotalChargeValue;
                amountOriginal = payment.TotalOriginalChargeAmount;

                transactionType = amount > 0 ? TransactionType.CampaignServiceCharge : TransactionType.CampaignServiceCashBack;
                if (transactionType == TransactionType.CampaignServiceCharge)
                {
                    //############# a Long sửa #############################################################
                    PaymentResultViewModel _PaymentResultViewModel = await Pay(senderId, receiverId, amount, amountOriginal, transactionType, model.Note, username, refId, refData);

                    if (_PaymentResultViewModel.Status == TransactionStatus.Completed && _PaymentResultViewModel.Amount > 0)
                    {
                        foreach (var campaignAccount in payment.CampaignAccounts)
                        {
                            //update campaign account mark as agency had paid

                            var arrIgnoreStatus = new List <CampaignAccountStatus>()
                            {
                                CampaignAccountStatus.Canceled,
                                CampaignAccountStatus.Unfinished,
                                CampaignAccountStatus.AccountRequest,
                                CampaignAccountStatus.AgencyRequest,
                                CampaignAccountStatus.WaitToPay,
                                CampaignAccountStatus.All,
                                CampaignAccountStatus.NeedToCheckExcecuteCampaign,
                                CampaignAccountStatus.AgencyCanceled
                            };

                            if (!arrIgnoreStatus.Contains(campaignAccount.Status) && campaignAccount.MerchantPaidToSystem == false)
                            {
                                await _campaignAccountRepository.UpdateMerchantPaidToSystem(campaignAccount.Id, true);
                            }
                        }
                    }
                    //#####################################################################################

                    return(_PaymentResultViewModel);
                }

                // nếu là yêu cầu rút tiền -- Đổi sender - recivert -> số tiền dương
                var transactionid = await _transactionRepository.CreateTransaction(receiverId, senderId, 0 - amount, transactionType, model.Note, string.Empty, username, refId, refData);

                return(new PaymentResultViewModel(PaymentResultErrorCode.ChoHeThongDuyetRutTien, transactionid, 0 - amount)); // anh Longhk bổ sung
            }

            return(new PaymentResultViewModel(PaymentResultErrorCode.ThongTinThanhToanKhongChinhXac));
        }