private PaymentDetailsType CreatePayPalPaymentDetails(IInvoice invoice, ProcessorArgumentCollection args = null)
		{
			
			string articleBySkuPath = args.GetArticleBySkuPath(_settings.ArticleBySkuPath.IsEmpty() ? null : GetWebsiteUrl() + _settings.ArticleBySkuPath);
			var currencyCodeType = PayPalCurrency(invoice.CurrencyCode());
			var currencyDecimals = CurrencyDecimals(currencyCodeType);

			decimal itemTotal = 0;
            decimal taxTotal = 0;
			decimal shippingTotal = 0;
			AddressType shipAddress = null;

			var paymentDetailItems = new List<PaymentDetailsItemType>();
			foreach (var item in invoice.Items)
			{
				if (item.LineItemTfKey == Merchello.Core.Constants.TypeFieldKeys.LineItem.TaxKey) 
                {
					taxTotal = item.TotalPrice;
				} 
                else if (item.LineItemTfKey == Merchello.Core.Constants.TypeFieldKeys.LineItem.ShippingKey) 
                {
					shippingTotal = item.TotalPrice;
					var address = item.ExtendedData.GetAddress(Merchello.Core.AddressType.Shipping);
					if (address != null) {
						shipAddress = new AddressType() {
							Name = address.Name,
							Street1 = address.Address1,
							Street2 = address.Address2,
							PostalCode = address.PostalCode,
							CityName = address.Locality,
							StateOrProvince = address.Region,
							CountryName = address.Country().Name,
							Country = (CountryCodeType)Enum.Parse(typeof(CountryCodeType), address.Country().CountryCode, true),
							Phone = address.Phone
						};
					}
				}
                else if (item.LineItemTfKey == Merchello.Core.Constants.TypeFieldKeys.LineItem.DiscountKey)
                {
                    var discountItem = new PaymentDetailsItemType
                    {
                        Name = item.Name,
                        ItemURL = (articleBySkuPath.IsEmpty() ? null : articleBySkuPath + item.Sku),
                        Amount = new BasicAmountType(currencyCodeType, PriceToString(item.Price*-1, currencyDecimals)),
                        Quantity = item.Quantity,
                    };
                    paymentDetailItems.Add(discountItem);
                    itemTotal -= item.TotalPrice;
                } 
                else {
					var paymentItem = new PaymentDetailsItemType {
						Name = item.Name,
						ItemURL = (articleBySkuPath.IsEmpty() ? null : articleBySkuPath + item.Sku),
						Amount = new BasicAmountType(currencyCodeType, PriceToString(item.Price, currencyDecimals)),
						Quantity = item.Quantity,
					};
					paymentDetailItems.Add(paymentItem);
					itemTotal += item.TotalPrice;
				}
			}

			var paymentDetails = new PaymentDetailsType
			{
				PaymentDetailsItem = paymentDetailItems,
				ItemTotal = new BasicAmountType(currencyCodeType, PriceToString(itemTotal, currencyDecimals)),
				TaxTotal = new BasicAmountType(currencyCodeType, PriceToString(taxTotal, currencyDecimals)),
				ShippingTotal = new BasicAmountType(currencyCodeType, PriceToString(shippingTotal, currencyDecimals)),
                OrderTotal = new BasicAmountType(currencyCodeType, PriceToString(invoice.Total, currencyDecimals)),
                PaymentAction = PaymentActionCodeType.ORDER,
				InvoiceID = invoice.InvoiceNumberPrefix + invoice.InvoiceNumber.ToString("0"),
				SellerDetails = new SellerDetailsType { PayPalAccountID = _settings.AccountId },
				PaymentRequestID = "PaymentRequest",
				ShipToAddress = shipAddress,
				NotifyURL = "http://IPNhost"
			};

			return paymentDetails;
		}
Exemple #2
0
        private PaymentDetailsType CreatePayPalPaymentDetails(IInvoice invoice, ProcessorArgumentCollection args = null)
        {
            string articleBySkuPath = args.GetArticleBySkuPath(_settings.ArticleBySkuPath.IsEmpty() ? null : GetWebsiteUrl() + _settings.ArticleBySkuPath);
            var    currencyCodeType = PayPalCurrency(invoice.CurrencyCode());
            var    currencyDecimals = CurrencyDecimals(currencyCodeType);

            decimal     itemTotal     = 0;
            decimal     taxTotal      = 0;
            decimal     shippingTotal = 0;
            AddressType shipAddress   = null;

            var paymentDetailItems = new List <PaymentDetailsItemType>();

            foreach (var item in invoice.Items)
            {
                if (item.LineItemTfKey == Merchello.Core.Constants.TypeFieldKeys.LineItem.TaxKey)
                {
                    taxTotal = item.TotalPrice;
                }
                else if (item.LineItemTfKey == Merchello.Core.Constants.TypeFieldKeys.LineItem.ShippingKey)
                {
                    shippingTotal = item.TotalPrice;
                    var address = item.ExtendedData.GetAddress(Merchello.Core.AddressType.Shipping);
                    if (address != null)
                    {
                        shipAddress = new AddressType()
                        {
                            Name            = address.Name,
                            Street1         = address.Address1,
                            Street2         = address.Address2,
                            PostalCode      = address.PostalCode,
                            CityName        = address.Locality,
                            StateOrProvince = address.Region,
                            CountryName     = address.Country().Name,
                            Country         = (CountryCodeType)Enum.Parse(typeof(CountryCodeType), address.Country().CountryCode, true),
                            Phone           = address.Phone
                        };
                    }
                }
                else if (item.LineItemTfKey == Merchello.Core.Constants.TypeFieldKeys.LineItem.DiscountKey)
                {
                    var discountItem = new PaymentDetailsItemType
                    {
                        Name     = item.Name,
                        ItemURL  = (articleBySkuPath.IsEmpty() ? null : articleBySkuPath + item.Sku),
                        Amount   = new BasicAmountType(currencyCodeType, PriceToString(item.Price * -1, currencyDecimals)),
                        Quantity = item.Quantity,
                    };
                    paymentDetailItems.Add(discountItem);
                    itemTotal -= item.TotalPrice;
                }
                else
                {
                    var paymentItem = new PaymentDetailsItemType {
                        Name     = item.Name,
                        ItemURL  = (articleBySkuPath.IsEmpty() ? null : articleBySkuPath + item.Sku),
                        Amount   = new BasicAmountType(currencyCodeType, PriceToString(item.Price, currencyDecimals)),
                        Quantity = item.Quantity,
                    };
                    paymentDetailItems.Add(paymentItem);
                    itemTotal += item.TotalPrice;
                }
            }

            var paymentDetails = new PaymentDetailsType
            {
                PaymentDetailsItem = paymentDetailItems,
                ItemTotal          = new BasicAmountType(currencyCodeType, PriceToString(itemTotal, currencyDecimals)),
                TaxTotal           = new BasicAmountType(currencyCodeType, PriceToString(taxTotal, currencyDecimals)),
                ShippingTotal      = new BasicAmountType(currencyCodeType, PriceToString(shippingTotal, currencyDecimals)),
                OrderTotal         = new BasicAmountType(currencyCodeType, PriceToString(invoice.Total, currencyDecimals)),
                PaymentAction      = PaymentActionCodeType.ORDER,
                InvoiceID          = invoice.InvoiceNumberPrefix + invoice.InvoiceNumber.ToString("0"),
                SellerDetails      = new SellerDetailsType {
                    PayPalAccountID = _settings.AccountId
                },
                PaymentRequestID = "PaymentRequest",
                ShipToAddress    = shipAddress,
                NotifyURL        = "http://IPNhost"
            };

            return(paymentDetails);
        }