I've added the below code to controller.php of the paypal_payment_standard package.
I've added the below code inside public function form() {
$fields = array_merge($fields, $this->getProductFields($o)); $fields = array_merge($fields, $this->getOrderFields($o)); $fields['upload'] = 1;
and change the below code: previously it looks like this
$fields['cmd'] = '_xclick';
Now it looks like this:
$fields['cmd'] = '_cart';
Now at the outside of the public function form() {//code} I put some code mentioning below:
private function getOrderFields($o) {
$fields = array();
/* Get the tax rates so we can pick sales tax out of the line items */
Loader::model('sales/tax/rate', 'core_commerce');
$tr = CoreCommerceSalesTaxRate::getList();
$taxrates = array();
foreach ($tr as $taxrate) {
$taxrates[$taxrate->getSalesTaxRateName()] = $taxrate;
}
/* Get the list of discounts so we can pick discounts out of the line items */
$d = CoreCommerceDiscount::getList();
$discounts = array();
foreach ($d as $discount) {
$discounts[$discount->getDiscountName()] = $discount;
}
$items = $o->getOrderLineItems();
/* Get the shipping method name so we can pick it out of the line items */
$shipping_amount = 0.00;
$shipMethod = $o->getOrderShippingMethod();
if ($shipMethod) {
$shipMethodName = $shipMethod->getName();
/* Get the shipping cost */
foreach($items as $it) {
$itName = $it->getLineItemName();
if ($itName == $shipMethodName) {
$shipping_amount += $it->getLineItemTotal();
}
}
}
/* PayPal Cart doesn't support a shipping value for the whole cart, so there are three methods of
* dealing with this:
* 1) Use the cart handling fee
* 2) Add the shipping fee to the first item - this seems to be the best method as it's simple and
* PayPal doesn't appear to break down the shipping (amongst items) anywhere in it's reporting
* 3) Apportion shipping fee amongst items - this is more complex than #2 but would probably be
* more desirable if PayPal showed how shipping was apportioned.
*/
//$fields['handling_cart'] = $shipping_amount; // Method 1
$fields['shipping_1'] = $shipping_amount; // Method 2
/* Get the total tax */
$tax_amount = 0;
foreach($items as $it) {
$itName = $it->getLineItemName();
if (isset($taxrates[$itName])) {
$tax_amount += $it->getLineItemTotal();
}
}
if ($tax_amount) {
$fields['tax_cart'] = $tax_amount;
}
/* Get the discount info */
$discount_amount = 0.00;
$discount_code = '';
foreach($items as $it) {
$itName = $it->getLineItemName();
if (isset($discounts[$itName])) {
$discount_amount += $it->getLineItemTotal();
if (!empty($discount_code)) {
$discount_code .= '/';
}
$discount_code .= $discounts[$itName]->getDiscountCode();
}
}
if ($discount_amount) {
$fields['discount_amount_cart'] = $discount_amount;
}
return $fields;
}
private function getProductFields($o) {
Loader::model('attribute/categories/core_commerce_product', 'core_commerce');
//$pkg = Package::getByHandle('paypal_website_payments_standard');
$pkg = Package::getByHandle('core_commerce');
$n = 1;
foreach($o->getProducts() as $pr) {
//$numberField = $pkg->config('PAYMENT_METHOD_PAYPAL_CART_PRODUCT_NUMBER');
$number = $pr->getProductID();
$fields['item_number_'.$n] = $number;
$fields['item_name_'.$n] = $pr->getProductName();
$fields['amount_'.$n] = $pr->getProductPriceToPay() + $pr->getProductPriceAttributeAdjustment($pr->orderProductID);
$fields['quantity_'.$n] = $pr->getQuantity();
$n++;
}
return $fields;
}
Loading Conversation
