In Teil 3 von Mxperts-Invoice möchte ich nun die Möglichkeit schaffen, das man im Backend die Verfügbakeit des Moduls auf bestimmte Kundengruppen einschränken kann. Das haben wir ja bereits in unserem Shipping-Modul gemacht, weshalb das eine leichte Übung ist :-)

Wir benötigen:
1. Liste aller Kundengruppen
2. Zustzfelder im Backend
3. Aktuelle Kundengruppe des eingeloggten User’s
4. Gütligkeitsprüfung

Zuerst lesen wir die Kundengruppen aus – Datei: app\code\local\Mxperts\Invoice\Model\Source\Customergroups.php

<?php
class Mxperts_Invoice_Model_Source_Customergroups
{
    public function toOptionArray()
    {
      $customer_groups[] = array('value'=>Mage_Customer_Model_Group::NOT_LOGGED_IN_ID, 'label'=>'NOT LOGGED IN');
      $groups = Mage::helper('customer')->getGroups()->toOptionArray();
      foreach($groups as $group){
        $customer_groups[] = array('value'=>$group['value'], 'label'=>$group['label']);
      }
      return $customer_groups;
    }
}

Da uns die Kundengruppen-Liste für das Backend zur Verfügung steht, definieren wir dafür eine Multiselect-Liste zur Auswahl.
Datei: app\code\local\Mxperts\Invoice\etc\system.xml

...
                        <!-- Erlaubte Kundengruppen -->
                        <customergroups translate="label comment">
	                            <label>Customer Group(s)</label>
	                            <frontend_type>multiselect</frontend_type>
	                            <source_model>invoice/source_customergroups</source_model>
	                            <sort_order>4</sort_order>
	                            <show_in_default>1</show_in_default>
	                            <show_in_website>1</show_in_website>
	                            <show_in_store>1</show_in_store>
	                      </customergroups>
...

Zum Schluss nur noch die Datei app\code\local\Mxperts\Invoice\Model\Invoice.php mit den Zusatzfunktionen ausstatten.

<?php
class Mxperts_Invoice_Model_Invoice extends Mage_Payment_Model_Method_Abstract
{
    // Eindeutiger Bezeichner
    protected $_code = 'invoice';

    // Klassen fuer unsere Blocks/Templates
    protected $_formBlockType = 'invoice/form';
    protected $_infoBlockType = 'invoice/info';

	  // Kundengruppe des aktuellen Users auslesen
    public function getCurrentCustomerGroup()
	  {
		  $session = Mage::getSingleton('customer/session');
		  if (! $session->isLoggedIn()) $customer_group_id = Mage_Customer_Model_Group::NOT_LOGGED_IN_ID;
		  else $customer_group_id = $session->getCustomerGroupId();
		  return $customer_group_id;
	  }

    // Ausgabe des Titels aus dem Backend
    public function getCODTitle()
    {
        return $this->getConfigData('title');
    }

    // Ausgabe von Daten aus dem Backend
    public function getInfoText($fieldname)
    {
        return $this->getConfigData($fieldname);
    }

    public function canUseCheckout()
    {
        $canUse = true;
	      if($this->getConfigData('customergroups') != '') {
          $customer_groups = explode(',',$this->getConfigData('customergroups'));
          $activecustomer_groups_id = $this->getCurrentCustomerGroup();
          if (!in_array($activecustomer_groups_id,$customer_groups)) {
            $canUse = false;
          }
        }
        return $canUse;
	  }
}

Nachdem Sie den Cache geleert und das Modul konfiguriert haben, erhalten nur noch die angeklickten Kundengruppen die Zahlungsart Rechnung zur Auswahl.

invoice_group

Das fertige Modul haben wir bei Magento-Connect veröffentlicht.
www.magentocommerce.com/extension/1589/mxperts–customer-groups-invoice
Daniel Sasse wird in Teil 4 erklären, wie man seine Module auf Magento-Connect publiziert.

Viele Grüße
Johannes Teitge