public async Task <OrderSuspendViewModel> SuspendOrder(CheckoutInfoInput checkoutInfoInput)
        {
            var basket = await _basketService.Get();

            var orderCreateInput = new OrderCreateInput()
            {
                BuyerId = _sharedIdentityService.GetUserId,
                Address = new AddressCreateInput()
                {
                    Province = checkoutInfoInput.Province,
                    District = checkoutInfoInput.District,
                    Street   = checkoutInfoInput.Street,
                    ZipCode  = checkoutInfoInput.ZipCode,
                    Line     = checkoutInfoInput.Line
                }
            };

            basket.BasketItems.ForEach(x =>
            {
                orderCreateInput.OrderItems.Add(new OrderItemCreateInput()
                {
                    ProductId   = x.CourseId,
                    Price       = x.GetCurrentPrice,
                    PictureUrl  = "",
                    ProductName = x.CourseName
                });
            });

            var paymentInfoInput = new PaymentInfoInput()
            {
                CardName   = checkoutInfoInput.CardName,
                CardNumber = checkoutInfoInput.CardNumber,
                Expiration = checkoutInfoInput.Expiration,
                CVV        = checkoutInfoInput.CVV,
                TotalPrice = basket.TotalPrice,
                Order      = orderCreateInput
            };

            var responsePayment = await _paymentService.ReveivePayment(paymentInfoInput);

            if (!responsePayment)
            {
                return(new OrderSuspendViewModel()
                {
                    Error = "Ödeme alınamadı",
                    IsSuccessful = false
                });
            }

            await _basketService.Delete();

            return(new OrderSuspendViewModel()
            {
                IsSuccessful = true
            });
        }
Exemple #2
0
        public async Task <OrderCreatedViewModel> CreateOrder(CheckOutInfoInput checkOutInfoInput)
        {
            var basket = await _basketService.Get();

            var paymentInfoInput = new PaymentInfoInput()
            {
                CardName   = checkOutInfoInput.CardName,
                CardNumber = checkOutInfoInput.CardNumber,
                Expiration = checkOutInfoInput.Expiration,
                CVV        = checkOutInfoInput.CVV,
                TotalPrice = basket.TotalPrice
            };

            var responsePayment = await _paymentService.ReceivePayment(paymentInfoInput);

            if (!responsePayment)
            {
                return(new OrderCreatedViewModel()
                {
                    Error = "Ödeme alınamadı.", IsSuccessful = false
                });
            }

            var orderCreateInput = new OrderCreateInput()
            {
                BuyerId = _sharedIdentityService.GetUserId,
                Address = new AddressCreateInput {
                    Province = checkOutInfoInput.Province, District = checkOutInfoInput.District, Street = checkOutInfoInput.Street, Line = checkOutInfoInput.Line, ZipCode = checkOutInfoInput.ZipCode
                },
            };

            basket.BasketItems.ForEach(x =>
            {
                var orderItem = new OrderItemCreateInput {
                    ProductId = x.CourseId, Price = x.GetCurrentPrice, PictureUrl = "", ProductName = x.CourseName
                };
                orderCreateInput.OrderItems.Add(orderItem);
            });

            var response = await _httpClient.PostAsJsonAsync <OrderCreateInput>("orders", orderCreateInput);

            if (!response.IsSuccessStatusCode)
            {
                return(new OrderCreatedViewModel()
                {
                    Error = "Sipariş oluşturulamadı", IsSuccessful = false
                });
            }

            var orderCreatedViewModel = await response.Content.ReadFromJsonAsync <Response <OrderCreatedViewModel> >();

            orderCreatedViewModel.Data.IsSuccessful = true;
            await _basketService.Delete();

            return(orderCreatedViewModel.Data);
        }
        public async Task <PaymentInfoDto> GetPaymentInfo(PaymentInfoInput input)
        {
            var tenant = await TenantManager.GetByIdAsync(AbpSession.GetTenantId());

            if (tenant.EditionId == null)
            {
                throw new UserFriendlyException(L("TenantEditionIsNotAssigned"));
            }

            var currentEdition = (SubscribableEdition)await _editionManager.GetByIdAsync(tenant.EditionId.Value);

            var targetEdition = input.UpgradeEditionId == null ? currentEdition : (SubscribableEdition)await _editionManager.GetByIdAsync(input.UpgradeEditionId.Value);

            decimal additionalPrice = 0;

            if (input.UpgradeEditionId.HasValue)
            {
                var remainingHoursCount = tenant.CalculateRemainingHoursCount();
                if (remainingHoursCount > 0)
                {
                    var lastPayment = await _subscriptionPaymentRepository.GetLastCompletedPaymentOrDefaultAsync(tenant.Id, null, null);

                    if (lastPayment == null || !lastPayment.PaymentPeriodType.HasValue)
                    {
                        throw new ApplicationException("There is no completed payment record !");
                    }

                    additionalPrice = TenantManager
                                      .GetUpgradePrice(
                        currentEdition,
                        targetEdition,
                        remainingHoursCount,
                        lastPayment.PaymentPeriodType.Value
                        );
                }
            }

            var edition = ObjectMapper.Map <EditionSelectDto>(input.UpgradeEditionId == null ? currentEdition : targetEdition);

            return(new PaymentInfoDto
            {
                Edition = edition,
                AdditionalPrice = additionalPrice
            });
        }
        public async Task <PaymentInfoDto> GetPaymentInfo(PaymentInfoInput input)
        {
            var tenant = await TenantManager.GetByIdAsync(AbpSession.GetTenantId());

            if (tenant.EditionId == null)
            {
                throw new UserFriendlyException(L("TenantEditionIsNotAssigned"));
            }

            var currentEdition = (SubscribableEdition)await _editionManager.GetByIdAsync(tenant.EditionId.Value);

            var targetEdition = input.UpgradeEditionId == null ? currentEdition : (SubscribableEdition)await _editionManager.GetByIdAsync(input.UpgradeEditionId.Value);

            decimal additionalPrice = 0;

            if (input.UpgradeEditionId.HasValue)
            {
                var remainingDaysCount = tenant.CalculateRemainingDayCount();
                if (remainingDaysCount > 0)
                {
                    additionalPrice = TenantManager
                                      .GetUpgradePrice(
                        currentEdition,
                        targetEdition,
                        remainingDaysCount
                        );
                }
            }

            var edition = ObjectMapper.Map <EditionSelectDto>(input.UpgradeEditionId == null ? currentEdition : targetEdition);

            await SetAdditionalDataForPaymentGateways(edition);

            return(new PaymentInfoDto
            {
                Edition = edition,
                AdditionalPrice = additionalPrice
            });
        }
Exemple #5
0
        public async Task <PaymentInfoDto> GetPaymentInfo(PaymentInfoInput input)
        {
            var tenant = await TenantManager.GetByIdAsync(AbpSession.GetTenantId());

            if (tenant.EditionId == null)
            {
                throw new UserFriendlyException(L("TenantEditionIsNotAssigned"));
            }

            var currentEdition = (SubscribableEdition)await _editionManager.GetByIdAsync(tenant.EditionId.Value);

            var targetEdition = input.UpgradeEditionId == null ? currentEdition : (SubscribableEdition)await _editionManager.GetByIdAsync(input.UpgradeEditionId.Value);

            decimal additionalPrice = 0;

            if (input.UpgradeEditionId.HasValue)
            {
                var lastPayment = await _subscriptionPaymentRepository.GetLastCompletedPaymentOrDefaultAsync(
                    tenantId : AbpSession.GetTenantId(),
                    gateway : null,
                    isRecurring : null);

                using (UnitOfWorkManager.Current.SetTenantId(null))
                {
                    additionalPrice = await CalculateAmountForPaymentAsync(targetEdition, lastPayment.PaymentPeriodType, EditionPaymentType.Upgrade, tenant);
                }
            }

            var edition = ObjectMapper.Map <EditionSelectDto>(input.UpgradeEditionId == null ? currentEdition : targetEdition);

            return(new PaymentInfoDto
            {
                Edition = edition,
                AdditionalPrice = additionalPrice
            });
        }
        public async Task <bool> ReceivePayment(PaymentInfoInput paymentInfoInput)
        {
            var response = await _httpClient.PostAsJsonAsync <PaymentInfoInput>("fakepayment", paymentInfoInput);

            return(response.IsSuccessStatusCode);
        }
Exemple #7
0
        public async Task <PaymentInfoOutput> PayRestByOrderId([FromBody] PaymentInfoInput input)
        {
            PaymentInfoOutput output = new PaymentInfoOutput();

            if (input == null)
            {
                output.Result = "INPUT_IS_NULL";
            }
            else
            {
                if (string.IsNullOrEmpty(input.OrderId))
                {
                    output.Result = "INPUT_IS_NULL";
                }
                else
                {
                    Order order = _db.Orders.Where(e => e.Id.Equals(input.OrderId) && e.Deleted == false).FirstOrDefault();
                    if (order == null)
                    {
                        output.Result = "ORDER_DOES_NOT_EXIST";
                    }
                    else
                    {
                        if (order.Status == 1)
                        {
                            List <OrderItem>   orderItems   = order.OrderItems.Where(e => e.Deleted == false).ToList();
                            List <PaymentItem> paymentItems = new List <PaymentItem>();
                            decimal            sum          = 0;

                            foreach (OrderItem item in orderItems.Where(e => e.Status == 1))
                            {
                                PaymentItem pItem = new PaymentItem()
                                {
                                    OrderItem = orderItems.Where(e => e.Id.Equals(item.Id)).FirstOrDefault(),
                                    Quantity  = item.Quantity - item.QuantityPaid
                                };

                                sum += item.UnitPrice * (decimal)(item.Quantity - item.QuantityPaid);
                                paymentItems.Add(pItem);
                                _db.PaymentItems.Add(pItem);
                            }

                            if (sum > 0)
                            {
                                PaymentServiceOutput paymentService = await PaymentService.InitPaypalAsync(sum);

                                Payment newPayment = new Payment()
                                {
                                    Amount   = sum,
                                    Status   = 1,
                                    Order    = order,
                                    Method   = "PAYPAL",
                                    MethodId = paymentService.PaymentId
                                };
                                newPayment.PaymentItems = paymentItems;

                                _db.Payments.Add(newPayment);
                                _db.SaveChanges();
                                output.Amount      = sum;
                                output.Result      = "OK";
                                output.PaymentId   = newPayment.Id;
                                output.PaymentLink = paymentService.PaymentLink;
                                string[] urlFrag = Request.GetDisplayUrl().Split('/');
                                output.PaymentLinkQR = urlFrag[0] + "//" + urlFrag[2] + "/qrcode/" + QRCodeService.GenerateQRCode(_hostingEnvironment, output.PaymentLink);
                            }
                            else
                            {
                                order.Status = 2;
                                _db.SaveChanges();
                                output.Amount = sum;
                                output.Result = "PAID";
                            }
                        }
                        else
                        {
                            output.Result = "PAID_OR_EXPIRED";
                        }
                    }
                }
            }
            return(output);
        }