Jump to content

COD+ free von prestahost.cz


Recommended Posts

Hallo ljebes Forum,

 

durch die Forensuche bin ich auf das COD+ free Modul von prestahost.cz gestoßen. Im Gegensatz zum hauseigenen COD Modul, kann man hier beim checkout eine Gebühr einrichten, die dann automatisch addiert wird.

 

Leider funktioniert es nicht  :( Das Modul habe ich erfolgreich installiert und eingerichtet und es läuft auch ohne Fehler und ist in der Rubrik Module -> Zahlungsarten und Schnittstellen auch als aktiv gelistet. Jedoch in der Rubrik Zahlungsart ist es weder in den aktiven Modulen, noch in den empfohlenen Zahlungsschnittstellen.

 

Weiß hierzu jemand was?

 

Würde gerne die Option Nachnahme anbieten, mit automatischer Gebühr.

 

Vielen Dank!

Link to comment
Share on other sites

doof. Gibt es eine andere (einfache) Möglichkeit Prestashop rechtssicher für den dt. Raum zu machen und nicht gleichzeitig alle möglichen Funktionen und Themes zu verlieren?

Link to comment
Share on other sites

Hallo Blutiges,

er möchte Gebühren dazu haben. Weil die Bestellzusammenfassung und die Wahl des Bezahlverfahrens bei eu-legal auf der gleichen Seite sind müsste sich die Summe der Bestellzusammenfassung per Klick auf den Radio-Button des jeweiligen Bezahlverfahrens anpassen, wenn man Gebühren berechnen möchte. Das tut eu-legal soweit ich gesehen habe nicht. Oder hat sich da was geändert?

Viele Grüße

Link to comment
Share on other sites

Okay,

 

das kann natürlich möglich sein ;), dann habe ich es nicht komplett gelesen gehabt.

 

Die Frage ist natürlich wie das Modul COD with FEE bisher funktioniert, ob es nur nach Bestellung den Betrag X draufschlägt oder schon im Checkout process?

 

Grüße

Link to comment
Share on other sites

ws schlägt gar nichts drauf, das ist das absurde... Man wählt COD als Zahlmethode aus, aber weder gleich, noch am später im Bestellprozess werden irgendwelche Aufschläge berechnet. Man kann in dem Modul auch nichts einstellen - frage mich also, was die Existenz des Moduls überhaupt soll?? Außer einem Auswahlbutton zur Verfügung zu stellen, macht das Modul rein gar nichts...

Link to comment
Share on other sites

Hallo Blutiges,

 

Die Frage ist natürlich wie das Modul COD with FEE bisher funktioniert, ob es nur nach Bestellung den Betrag X draufschlägt oder schon im Checkout process?

Wie das Modul COD with FEE von prestahost.cz funktioniert weiß ich nicht genau. Die Gebührenberechnungen im originalen Prestashop erfolgt ja erst nach der Auswahl der Zahlungsmethode auf der Seite auf der die Bestellsumme ausgewiesen wird. Diese Seite ist für jedes Zahlungsmodul individuell. Üblicherweise werden erst dort zahlungsabhängige Gebühren aufaddiert.

Das macht auch aus dem klassischen one-page-checkout eigentlich ein two-page-checkout. :)

Eu-Legal bringt die Bestellzusammenfassung auf die Seite der Auswahl des Bezahlverfahrens. Somit entfällt die Seite mit der Summe aus jedem Bezahlmodul aus dem originalen Prestashop Checkout.

Ich kenne drei Möglichkeiten mit dem Problem umzugehen, die ich auch in unserem Shop zu unterschiedlichen Zeiten schon mal umgesetzt habe:

1. Das modifizierte Summaryorder-Modul von der Homepage Community. Das Verfahren erweitert die Bestellsummen-Seite der Bezahlmodule um eine Bestellzusammenfassung. Die Modifizierung ist nicht ganz einfach und man braucht mindestens php-Grundlagen und muß wissen wie ein Hook funktioniert. Ich glaube Deine Anpassung zur One-Button-Lösung für die 1.5 Version funktioniert auch so ähnlich.

2. Das modifizieren des Eu-Legal Moduls, sodass für jede Bezahlart eine eigene Summe und ggf. die Gebühren an die tpl-Datei der Bestellzusamenfassung übergeben werden. Über ein Javascript kann man dann für jede Auswahl eine eigene Bestellzusammenfassung anzeigen. Das ist auch nicht einfach und man braucht php-Kenntnisse und Java-Gundlagen. Das mache ich derzeit in unserem Shop.

3. Man legt eine zusätzliche Versandart an, die um die Nachnahmegebühr höhere Versandkosten ausweist. Dann muß man dafür sorgen, dass die Zahlart "Nachnahme" nur dann ausgewählt werden kann, wenn die Versandart "Nachnahme" ausgewählt ist. Hierzu braucht man z.B. ein Modul für die Anzeige von versandartabhängigen Bezahlverfahren. Ob das mit Eu-Legal läuft, weiß ich nicht. :unsure: Oder man passt die Anzeige der Bezahlarten im Code an. Dazu habe ich mal hier irgendwo was geschrieben, weiß aber nicht mehr wo.  :blink:

Alles nicht so ohne :unsure:

 

Viele Grüße

Edited by Luca01 (see edit history)
Link to comment
Share on other sites

Ja habe mal für 1.5 und 1.6 den fix gepflegt gehabt, aber da schon eu legal läuft ist das unsinnig wegen dem einem Modul das umzubauen ;).

 

 

Vll sollte man eine Change Request für EuLegal stellen zwecks Aufschlag.

 

Oder man passt alles manuell an und entfernt eu legal. Geht auch aber muss man sich ein wenig auskennen ;)

Link to comment
Share on other sites

Hallo Blutiges,

 

Vll sollte man eine Change Request für EuLegal stellen zwecks Aufschlag.

würdest Du das tun, wenn ich hier meine Änderungen poste? Ich komme mit GitHub nicht zurecht, bzw. habe keine Motivation mich da reinzuarbeiten  :(  . Aber es wäre schön, wenn ich den Code bei einem Update nicht anpassen müßte.

Viele Grüße

Link to comment
Share on other sites

Hallo Blutiges,

so, jetzt bin ich etwas sortiert und kann die Änderungen posten die ich in Eu-Legal eingebaut habe, um ein Zahlungsmodul mit Gebühren einzubinden.

Ich habe Änderungen an folgenden Dateien vorgenommen:

/js/legal.js

/views/templates/hook/displayShippingPrice.tpl

/views/templates/thenes/default-bootstrap/order-summary.tpl

 

legal.js habe ich mit einer Funktion ergänzt:

/**------- Anfang Änderung für Gebühr**/
    setActiveConfim: function() {
    $( ".payment-choosen" ).removeClass('active');
    if (this.paymentChosen) {$('[id=' + this.paymentChosen + ']').addClass('active');
      }
	},
/**------- Ende Änderung für Gebühr**/

die aus der Funktion toggleChosenForm aufgerufen wird

   toggleChosenForm: function(show, undefined) {
	if (this.paymentChosen) {
/**------- Anfang Änderung für Gebühr**/
	    this.setActiveConfim();
/**------- Ende Änderung für Gebühr**/
	    this.setActiveState();
	    var elt = $('#' + this.paymentChosen + '_form_container');

	    if (elt.length && elt.attr('data-do-not-toggle') != 1) {
		if (show === undefined) {
		    elt.toggle();
		}
		else if (show) {
		    elt.show();
		}
		else {
		    elt.hide();
		}
	    }
	}
    },

Die tpl-Datei displayShippingPrice.tpl habe ich so umgeschrieben:

{* ------- Anfang Änderung für Gebühr*}
{foreach from=$payment_options item=option key=payment_name}
			<div class="payment-choosen" id="{$payment_name}">{displayPrice price=$option.total_shipping}</div>
{/foreach}
{if !$payment_options}{displayPrice price=$shipping_price} {else} <div class="payment-choosen active" id="no_payment_selected">{displayPrice price=$shipping_price}</div> {/if}
<!-- Auskommentiert
{displayPrice price=$shipping_price}<br>
-->
{* ------- Ende Änderung für Gebühr*}


{if $no_address_selected}{l s='Shipping to' mod='eu_legal'} {$default_country}{if $shipping_link}<br><a href="{$shipping_link}" class="iframe">{l s='further shipping costs' mod='eu_legal'}</a>{else}<br>{l s='further shipping costs' mod='eu_legal'}{/if}{/if}

Die tpl-Datei order-summary.tpl habe ich so umgeschrieben:

{* ------- Anfang Änderung für Gebühr*}
<style>
    #order-detail-content #cart_summary td div.payment-choosen
	{
	display: none;
	}
	#order-detail-content #cart_summary td div.payment-choosen.active
	{
	display: inline;
	}
</style>
{* ------- Ende Änderung für Gebühr*}
.
.
.
.

und

								{displayPrice price=$total_discounts*-1}
							{/if}
						{else}
							{displayPrice price=$total_discounts_tax_exc*-1}
						{/if}
					</td>
				</tr>
{* ------- Anfang Änderung für Gebühr*}
                <tr class="cart_total">
                    <td colspan="5" class="text-right">
						{foreach from=$payment_options item=option key=payment_name}
						<div class="payment-choosen" id="{$payment_name}"{if $option.fee ==0} style="display: none;"{/if}>
                        {if $use_taxes}
							{if $priceDisplay}
								{if $display_tax_label}{l s='Total fee (tax excl.)' mod='eu_legal'}{else}{l s='Total fee' mod='eu_legal'}{/if}
							{else}
								{if $display_tax_label}{l s='Total fee (tax incl.)' mod='eu_legal'}{else}{l s='Total fee' mod='eu_legal'}{/if}
							{/if}
						{else}
							{l s='Total fee' mod='eu_legal'}
						{/if}
						</div>
						{/foreach}
					</td>
					<td colspan="2" class="price-discount price" id="total_discount">
					{foreach from=$payment_options item=option key=payment_name}
					<div class="payment-choosen" id="{$payment_name}">{displayPrice price=$option.fee}</div>
					{/foreach}
            	</td>
				</tr>
{* ------- Ende Änderung für Gebühr*}
				{if $use_taxes}
					{if $priceDisplay && $total_tax != 0}
						<tr class="cart_total_tax">
							<td colspan="5" class="text-right">{l s='Total tax:' mod='eu_legal'}</td>
							<td colspan="2" class="price" id="total_tax" >{displayPrice price=$total_tax}</td>
						</tr>
					{/if}
{* ------- Anfang Änderung für Gebühr*}
                     <tr class="cart_total_price">
						<td colspan="5" class="total_price_container text-right"><span>{l s='Total' mod='eu_legal'}</span></td>
						<td colspan="2" class="price" id="total_price_container">
						{foreach from=$payment_options item=option key=payment_name}
					<div class="payment-choosen" id="{$payment_name}"><span id="total_price">{displayPrice price={$option.total[spam-filter]</span></div>
					{/foreach}
					{if !$payment_options}{displayPrice price=$total_price} {else} <div class="payment-choosen active" id="no_payment_selected">{displayPrice price=$total_price}</div> {/if}
						</td>
					</tr>
<!-- Auskommentiert
					<tr class="cart_total_price">
						<td colspan="5" class="total_price_container text-right"><span>{l s='Total' mod='eu_legal'}</span></td>
						<td colspan="2" class="price" id="total_price_container">
							<span id="total_price">{displayPrice price=$total_price}</span>
						</td>
					</tr>
-->
{* ------- Ende Änderung für Gebühr*}
				{else}
				<tr class="cart_total_price">
					{if $voucherAllowed}
						<td colspan="2" id="cart_voucher" class="cart_voucher">

Wie Du bestimmt siehst, werden jetzt mehr Variablen verarbeitet, die noch aus dem Zahlungsmodul übergeben werden müssen.

Hierzu habe ich die Funktion hookDisplayPaymentEU umgeschrieben. Hier als Beispiel aus dem Bankwire-Modul:

public function hookDisplayPaymentEU($params)
	{
/* ---------Anfang Änderung für Gebühr*/
       $totalfee = false;
/* ---------Ende Änderung für Gebühr*/
		if (!$this->active)
			return;

		if (!$this->checkCurrency($params['cart']))
			return;


		return array(
/* ---------Anfang Änderung für Gebühr*/
		      'total_shipping' => $this->context->cart->getPackageShippingCost((int)(string)$this->context->cart->id_carrier, true, null, $order->product_list),
		      'total' => $this->context->cart->getOrderTotal(true, Cart::BOTH)+$totalfee,
		      'fee' => $totalfee,
/* ---------Ende Änderung für Gebühr*/
			'cta_text' => $this->l('Pay by Bank Wire'),
			'logo' => Tools::getShopDomainSsl(true, true).__PS_BASE_URI__.'modules/'.$this->name.'/bankwire.jpg',
			'action' => $this->context->link->getModuleLink($this->name, 'validation', array(), true)
		);
	}

Jetzt kann man über die Variable $totalfee Gebühren an die Anzeige im Eu-Legal-Modul übergeben, die dann dort in der Bestellzusammenfassung angezeigt werden.

Das Konstrukt läuft schon eine Weile bei uns im Shop ziemlich zuverlässig. :)

Viele Grüße

Edited by Luca01 (see edit history)
Link to comment
Share on other sites

Wow! Jetzt bräuchte ich noch jemanden, der das bei mir reinfummelt  :) vielen Dank! Ich habe so wenig Ahnung, daß ich noch nicht einmal abschätzen kann wie viel oder wenig Arbeit das war, daher erst einmal DANKE!

Link to comment
Share on other sites

Hallo Luca,

 

danke für den Code, aber was bringt deine Anpassung inder legal.js? 

Die macht ja nchts anderes wie bereits dort vorhanden, das element aktiv zu setzen.

 

 

deine total_shipping anpassung, setzt vorrasu das alle Module das mit zurückgeben.

Wäre es nicht sinnvoller dafür anstelle eine neue Zeile im Cart einzublenden mit Fee ?

 

 

Ich schaus mir mal an.

Link to comment
Share on other sites

Hallo Blutiges,

 

aber was bringt deine Anpassung inder legal.js? 

Die macht ja nchts anderes wie bereits dort vorhanden, das element aktiv zu setzen.

Die Funktion im Javascript in Kombination mit dem css-style in der tpl-Datei macht die Summen in der Bestellzusammenfassung für die einzelnen Bezahlmodule sichtbar oder unsichtbar und macht die Gebühren sichtbar oder unsichtbar je nach Auswahl. :)

 

deine total_shipping anpassung, setzt vorrasu das alle Module das mit zurückgeben.

Ja, das stimmt. Kann vermutlich raus. :unsure:

 

Wäre es nicht sinnvoller dafür anstelle eine neue Zeile im Cart einzublenden mit Fee ?

Die Gebührenzeile wird eingeblendet.

Hier:

{* ------- Anfang Änderung für Gebühr*}
<tr class="cart_total">
<td colspan="5" class="text-right">
{foreach from=$payment_options item=option key=payment_name}
<div class="payment-choosen" id="{$payment_name}"{if $option.fee ==0} style="display: none;"{/if}>
{if $use_taxes}
{if $priceDisplay}
{if $display_tax_label}{l s='Total fee (tax excl.)' mod='eu_legal'}{else}{l s='Total fee' mod='eu_legal'}{/if}
{else}
{if $display_tax_label}{l s='Total fee (tax incl.)' mod='eu_legal'}{else}{l s='Total fee' mod='eu_legal'}{/if}
{/if}
{else}
{l s='Total fee' mod='eu_legal'}
{/if}
</div>
{/foreach}
</td>
<td colspan="2" class="price-discount price" id="total_discount">
{foreach from=$payment_options item=option key=payment_name}
<div class="payment-choosen" id="{$payment_name}">{displayPrice price=$option.fee}</div>
{/foreach}
</td>
</tr>
{* ------- Ende Änderung für Gebühr*}

 

Ich schaus mir mal an.

:)

Viele Grüße

Edited by Luca01 (see edit history)
Link to comment
Share on other sites

Hmm iwie sieht das alles nicht nach einer sauberen Lösung aus ehrlich gesagt.

 

Klar es funktioniert so, wenn jedes modul mit den options array angepasst wird, aber sauberer wäre es ja wenn das COD odl an sich schon den cart aktualisiert und dann das EU legal den toal preis von dort holen kann.

 

Ich würde das mal auf eine Change Request Liste machen, das man es sich mal von dr architektur anschaut, vll hat Chris oder silbersaiten noch eine schlaue Idee.

Link to comment
Share on other sites

Hallo Blutiges,

 

Klar es funktioniert so, wenn jedes modul mit den options array angepasst wird,

Das ist nunmal der Datenfluß von Eu-Legal. ;) Das Konzept, die Daten der Zahlungsmodule per array an die Bestellzusammenfassungsseite zu geben ist vom Eu-Legal Modul übernommen. Man könnte auch einen rechtssicheren Checkout machen ohne jedes Zahlungsmodul anzupassen, nur Eu-Legal funktioniert aktuell nicht so.

 

aber sauberer wäre es ja wenn das COD odl an sich schon den cart aktualisiert und dann das EU legal den toal preis von dort holen kann.

 

Dann müßte man erst das Bezahlverfahren auswählen und dann eine zusätzliche Seite, ein Popup o.Ä. mit der Bestellzusammenfassung ausgeben. Das ist aber nicht die Art wie Eu-Legal an dieser Stelle funktioniert. Wenn es einen anderen Checkout gibt, gibt es auch eine andere Lösung für Gebühren das ist klar.

 

Viele Grüße

Link to comment
Share on other sites

Ja klar ist mir schon bewusst das es so funktioniert :)))))),

 

aber der Code von dir verlangt das jedes Modul angepasst werden muss auch wenn es fee => 0 hat.

 

Vll musst du dich doch mal mit github auseinander setzen ;), ich glaube aber leider nicht das der Code es so in den Master Branch schaffen würde.

 

Aber ja das Ursprungsproblem hier fürs eine Modul sollte es beheben, aber eine Lösung für alle Varianten ist es noch nicht.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...