private static PaymentCollection PopulateOrderPayments(MobilePghOrderRequestViewModel request, decimal amount)
        {
            if (request == null)
            {
                return(null);
            }
            var payment = OrderProvider.GetBasePayment("CreditCard");

            payment.Amount = amount;
            return(new PaymentCollection
            {
                payment
            });
        }
 private static HandlingInfo PopulateOrderHandlingInfo(MobilePghOrderRequestViewModel request)
 {
     return(new HandlingInfo_V01
     {
         PickupName = request.Data.ShippingInfo.Recipient,
         IncludeInvoice = (InvoiceHandlingType)
                          Enum.Parse(typeof(InvoiceHandlingType), request.Data.PackWithInvoice), //TODO: Confirm
         ShippingInstructions =
             string.IsNullOrEmpty(request.Data.ShippingInstruction)
                 ? string.Format("{0},{1}", request.Data.ShippingInfo.Recipient,
                                 string.IsNullOrEmpty(request.Data.ShippingInfo.Phone)
                         ? "11111111111"
                         : request.Data.ShippingInfo.Phone) : request.Data.ShippingInstruction
     });
 }
        private static ShippingInfo_V01 PopulateOrderShipment(MobilePghOrderRequestViewModel request)
        {
            if (request == null)
            {
                return(null);
            }
            var shippingInfo = request.Data.ShippingInfo;

            return(new ShippingInfo_V01
            {
                Address = ConvertAddressViewModelToAddress(shippingInfo.Address),
                WarehouseCode = request.Data.WarehouseCode,
                ShippingMethodID = !string.IsNullOrEmpty(shippingInfo.ShippingMethodID) &&
                                   shippingInfo.ShippingMethodID != "0"
                    ? shippingInfo.ShippingMethodID
                    : HLConfigManager.Configurations.ShoppingCartConfiguration.DefaultFreightCode,
                Recipient = shippingInfo.Recipient,
                Phone =
                    shippingInfo.Phone == string.Empty ? "11111111111" : shippingInfo.Phone
            });
        }
        public MobilePghResponseWrapper InsertPghOrder(MobilePghOrderRequestViewModel request)
        {
            try
            {
                var response = new MobilePghResponseWrapper();

                if (WebAPI.Provider.SSO.SSOProvider.UseSSO(request.Data.Locale, Getclient()))
                {
                    if (WebAPI.Provider.SSO.SSOProvider.IsValidUser(request.Data.DistributorId))
                    {
                        string distributor = WebAPI.Provider.SSO.SSOProvider.CurrentDistributor(GetToken());
                        if (!string.IsNullOrEmpty(distributor))
                        {
                            request.Data.DistributorId = distributor;
                        }
                        else
                        {
                            return(response);
                        }
                    }
                }

                List <ValidationErrorViewModel> Errors = null;

                var orderResponse = MobilePghProvider.InsertPghOrder(request, out Errors);

                response.Data             = orderResponse;
                response.ValidationErrors = Errors;

                return(response);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        public static MobilePghOrderResponseViewModel InsertPghOrder(MobilePghOrderRequestViewModel request,
                                                                     out List <ValidationErrorViewModel> validationErrors)
        {
            Thread.CurrentThread.Name = request.Client.Name == "ikiosk" ? "iKiosk" : request.Client.Name;
            var memberId = string.Empty;

            validationErrors = null;
            var response = new MobilePghOrderResponseViewModel();

            if (null == request || null == request.Data || null == request.InvoiceData)
            {
                return(response);
            }
            try
            {
                var order        = new Order_V01();
                var shoppingCart = new MyHLShoppingCart();
                var countryCode  = request.Data.Locale.Substring(3, 2);
                memberId = request.Data.DistributorId;
                var totals = ConvertToOrderTotals(request.InvoiceData, countryCode);
                if (totals == null)
                {
                    validationErrors.Add(new ValidationErrorViewModel
                    {
                        Code   = 0,
                        Reason = "Error on Totals is null value."
                    });
                    return(response);
                }
                GenerateObject(request, out order, out shoppingCart, totals);
                var btOrder = OrderProvider.CreateOrder(order, shoppingCart, countryCode);
                if (null != btOrder && request.Client.Name == "ikiosk")
                {
                    ((ServiceProvider.SubmitOrderBTSvc.Order)btOrder).InputMethod = "IK";
                }
                var amount      = GetAmountdue(request.InvoiceData);
                var orderNumber = GetOrderNumber(amount, shoppingCart.CountryCode, shoppingCart.DistributorID);
                var holder      = OrderProvider.GetSerializedOrderHolder(btOrder, order, shoppingCart, new Guid());
                var orderData   = OrderSerializer.SerializeOrder(holder);

                var gatewayName        = HLConfigManager.Configurations.PaymentsConfiguration.GatewayName;
                var netbankingName     = "TechProcessPaymentGateway";
                var paymentTypeDefault = "CreditCard";
                var selectedGateway    = request.Data.PaymentInfo.IssuerAssociation.PaymentType.ToUpper() == paymentTypeDefault.ToUpper() ? gatewayName : netbankingName;

                var paymentId = OrderProvider.InsertPaymentGatewayRecord(orderNumber, memberId, selectedGateway,
                                                                         orderData, request.Data.Locale);
                if (paymentId > 0)
                {
                    response.OrderNumber = orderNumber;
                    response.Status      = true;
                    return(response);
                }
            }
            catch (Exception ex)
            {
                validationErrors = new List <ValidationErrorViewModel>
                {
                    new ValidationErrorViewModel {
                        Code = 0, Reason = ex.Message
                    }
                };
            }
            response.OrderNumber = string.Empty;
            response.Status      = false;
            return(response);
        }
        private static void GenerateObject(MobilePghOrderRequestViewModel request, out Order_V01 Order,
                                           out MyHLShoppingCart ShoppingCart, OrderTotals Totals)
        {
            var orderTotalsV01 = Totals as OrderTotals_V01;
            var orderTotalsV02 = Totals as OrderTotals_V02;


            decimal amount = 0;

            if (request.Data.OrderItems.Count > 0)
            {
                amount = request.Data.Locale.Substring(3, 2) == "CN"
                    ? orderTotalsV02.AmountDue
                    : orderTotalsV01.AmountDue;
            }
            else
            {
                amount = request.Data.Locale.Substring(3, 2) == "CN"
                    ? orderTotalsV02.Donation
                    : orderTotalsV01.AmountDue;
            }

            #region Fill Order
            var order = new Order_V01
            {
                DistributorID       = request.Data.DistributorId,
                CountryOfProcessing = request.Data.Locale.Substring(3, 2),
                OrderCategory       =
                    string.IsNullOrEmpty(request.Data.OrderType)
                        ? OrderCategoryType.RSO
                        : (OrderCategoryType)
                    Enum.Parse(typeof(OrderCategoryType), request.Data.OrderType),
                OrderMonth         = GetOrderMonth(request.Data.OrderYear, request.Data.OrderMonth),
                Pricing            = Totals,
                OrderItems         = PopulateOrderItems(request.Data.OrderItems),
                ReceivedDate       = DateUtils.GetCurrentLocalTime(request.Data.Locale.Substring(3, 2)),
                Shipment           = PopulateOrderShipment(request),
                Payments           = PopulateOrderPayments(request, amount),
                Handling           = PopulateOrderHandlingInfo(request),
                DiscountPercentage = request.InvoiceData.Discount
            };

            #endregion

            #region ShoppingCart

            var shoppingCart = new MyHLShoppingCart
            {
                Locale         = request.Data.Locale,
                CountryCode    = request.Data.Locale.Substring(3, 2),
                DistributorID  = request.Data.DistributorId,
                Totals         = Totals,
                ShoppingCartID = 0,
                OrderCategory  = ServiceProvider.CatalogSvc.OrderCategoryType.RSO,
                EmailAddress   = request.Data.Confirmation.Email,
                EmailValues    = new HLShoppingCartEmailValues(),
                DeliveryInfo   = new ShippingInfo
                {
                    WarehouseCode         = request.Data.WarehouseCode,
                    AdditionalInformation = string.Empty,
                    Option =
                        !string.IsNullOrEmpty(request.Data.DeliveryType) &&
                        request.Data.DeliveryType.ToUpper() == "PICKUP"
                            ? MyHerbalife3.Ordering.ServiceProvider.ShippingSvc.DeliveryOptionType.Pickup
                            : MyHerbalife3.Ordering.ServiceProvider.ShippingSvc.DeliveryOptionType.Shipping,
                    Address = new MyHerbalife3.Ordering.ServiceProvider.ShippingSvc.ShippingAddress_V01
                    {
                        Recipient = (request.Data.ShippingInfo as ShippingInfo_V01).Recipient,
                        Address   = ObjectMappingHelper.Instance.GetToShipping(request.Data.ShippingInfo.Address as Address_V01)
                    }
                }
            };

            shoppingCart.ShoppingCartItems = new List <DistributorShoppingCartItem>();
            foreach (var item in request.Data.OrderItems)
            {
                shoppingCart.ShoppingCartItems.Add(new DistributorShoppingCartItem
                {
                    Description = item.Description,
                    Quantity    = item.Quantity,
                    SKU         = item.Sku
                });
            }

            #endregion

            Order        = order;
            ShoppingCart = shoppingCart;
        }