Payment Method options based on categories or products in cart

Started by Robert_ITMan, April 25, 2014, 17:28:33 PM

Previous topic - Next topic

Robert_ITMan

For VirtueMart 2 we need Payment Method options based on categories or products in cart. We need it so that the payment method will only be available for the products or categories selected - same as for existing Shopper Group option.

We need to have additional option(s) below 'Shopper Group' selection under the 'Payment Method Information' tab. Will need this to be added to core or a plugin rather than a hack that needs rewriting every update. This can not be further customizing existing payment plugins.

Please help! I see several people asking in the forums but no answers, yet. If I solve this I will post it here.

In looking at the code and trying to build similar to Shopper Group I am lost looking at the following in /administrator/components/com_virtuemart/views/paymentmethod and also looking at duplicating the database table virtuemart_paymentmethod_shoppergroups (maybe something like virtuemart_paymentmethod_category)

view.html.php

$this->assignRef('shopperGroupList', ShopFunctions::renderShopperGroupList($payment->virtuemart_shoppergroup_ids, true));

// must be something like this
$this->assignRef('categoryListTree', ShopFunctions::categoryListTree($payment->virtuemart_category_ids, true));


tmpl/edit_edit.php

        <?php echo VmHTML::row('raw','COM_VIRTUEMART_PAYMENTMETHOD_FORM_SHOPPER_GROUP'$this->shopperGroupList ); ?>
       
        <?php // must be something similar to this
echo VmHTML::row('raw','COM_VIRTUEMART_CATEGORY_S'$this->categoryListTree ); ?>

       
        <?php // or must be something similar to this ?>
        <tr>
<td class="key">
<?php echo vmText::_('COM_VIRTUEMART_CATEGORY_S'?>
</td>
<td>
<select class="inputbox" id="categories" name="categories[]" multiple="multiple"  data-placeholder="<?php echo vmText::_('COM_VIRTUEMART_DRDOWN_SELECT_SOME_OPTIONS')  ?>" size="10">
<option value=""><?php echo vmText::_('COM_VIRTUEMART_UNCATEGORIZED'?></option>
<?php echo $this->category_tree?>
</select>
</td>
        </tr>
WEBSITES @ OURFINGERTIPS
manage > develop > market > repeat

Save a lot of time and money when focused on building a website that works with marketing efforts to get more leads and sales from visitors.

www.ourfingertips.com

Robert_ITMan

I have a work around - it's not pretty, nor is it for very helpful for anyone... but I needed something working right away so this is what I came up with by editing only my template file select_payment.php

/templates/(my-template)/com_virtuemart/cart/select_payment.php

<?php if ($this->found_payment_method) {
// only show the full payment method when certain products are in the cart
$pay_full_method_id '4';
// following products ids force full payment
$pay_full_prod_id = array('36','39');
// set the values
$pay_in_full=0;
$pay_options=0;
// get the products in the cart
//echo 'cart product id(s): '; 
foreach ($pay_full_prod_id as $full_prod_id) {
  foreach (
$this->cart->products as $paykey => $payrow) {
  
$prod_id $payrow->cart_item_id;
  
//echo $prod_id;
  
if ($prod_id == $full_prod_id) {
    
//echo ' match ('.$full_prod_id.'), ';
$pay_in_full=$pay_in_full+1;
} else {
    
//echo ' no match, ';
$pay_options=$pay_options+1;
}
  }
}
if (
$pay_options>0) {
  if (
$pay_in_full==1) {
   
$pay_in_full_desc='You have an item in your cart that would give you other payment options if you ordered it separately<br />';
  } elseif (
$pay_in_full>1) {
   
$pay_in_full_desc='You have items in your cart that would give you other payment options if you ordered them separately<br />';
  }
}
    echo 
"<fieldset>";
foreach ($this->paymentplugins_payments as $paymentplugin_payments) {
if (is_array($paymentplugin_payments)) {
foreach ($paymentplugin_payments as $paymentplugin_payment) {
  if ($pay_in_full>0) { // need to hide all but the full payment method
$method_id substr(strstr($paymentplugin_payment,'value='), 71) ;
if ($method_id != $pay_full_method_id) {
      echo 'hide this payment method '.$method_id.'<br />';
  continue;
    } else {
    echo $pay_in_full_desc;
}
  }
  echo $paymentplugin_payment.'<br />';
  }
    }
}
    echo 
"</fieldset>";
    } else {
 echo "<h3>".$this->payment_not_found_text."</h3>";
    }
    
?>

WEBSITES @ OURFINGERTIPS
manage > develop > market > repeat

Save a lot of time and money when focused on building a website that works with marketing efforts to get more leads and sales from visitors.

www.ourfingertips.com

servlet

Он-лайн магазин за фототапети http://mishelfoster.com

skhn123

Hey i am also looking for something like this so can you tell me if i want to hide a particular payment method on cart view if the user has chosen a cart variant.
for example:
if user select a particular option on product details page then i want to hide COD (standard) payment method from cart.
is it possible.
thanks