Jump to content

[gelöst] Rechnung Reihenfolge der Artikel


Recommended Posts

Hallo,

 

weiß jemand von Euch ob es möglich ist die die Position der Artikel auf der Rechnung anders anzuordnen?

 

Ich würde gerne die Produkte auf der Rechnung anhand der Referenz / Produktnummer aufsteigend sortieren.

 

Weiß jemand wie man das umsetzten kann oder ob es ggf. ein passendes Modul gibt?

 

Vielen Dank schon mal für Eure Hilfe :-)

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

Hi Shobbie,

 

das geht nur durch einen kleinen Eingriff - entweder in den Quellcode oder als Override. Verantwortlich ist die Funktion getProductsDetail() in der /classes/order/Order.php:

 

public function getProductsDetail()
{
 return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
 SELECT *
 FROM `'._DB_PREFIX_.'order_detail` od
 LEFT JOIN `'._DB_PREFIX_.'product` p ON (p.id_product = od.product_id)
 LEFT JOIN `'._DB_PREFIX_.'product_shop` ps ON (ps.id_product = p.id_product AND ps.id_shop = od.id_shop)
 WHERE od.`id_order` = '.(int)($this->id));
}

 

Die braucht einen kleinen Appendix:

 

ORDER BY od.`product_reference`')

 

so dass sie wie folgt aussieht:

 

public function getProductsDetail()
{
 return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
 SELECT *
 FROM `'._DB_PREFIX_.'order_detail` od
 LEFT JOIN `'._DB_PREFIX_.'product` p ON (p.id_product = od.product_id)
 LEFT JOIN `'._DB_PREFIX_.'product_shop` ps ON (ps.id_product = p.id_product AND ps.id_shop = od.id_shop)
 WHERE od.`id_order` = '.(int)($this->id).'
 ORDER BY od.`product_reference`');
}

 

Oder du speicherst folgenden Code unter dem Namen Order.php in das Verzeichnis /overrides/classes/order:

 

<?php
/* override für classes/order/Order.php*/
class Order extends OrderCore{
public function getProductsDetail()
{
 return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
 SELECT *
 FROM `'._DB_PREFIX_.'order_detail` od
 LEFT JOIN `'._DB_PREFIX_.'product` p ON (p.id_product = od.product_id)
 LEFT JOIN `'._DB_PREFIX_.'product_shop` ps ON (ps.id_product = p.id_product AND ps.id_shop = od.id_shop)
 WHERE od.`id_order` = '.(int)($this->id).'
 ORDER BY od.`product_reference`');
}
}

 

Achtung: Groß- und Kleinschreibung bei Dateinamen beachten.

 

Viele Grüße

eleazar

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

Hi eleazar,

 

vielen Dank das ist ja echt super :)

 

Werde es gleich mal auf dem Testserver probieren - Ist der Code auf für die Version 1.4.7.0 richtig oder schon für 1.5.X gedacht?

 

Danke noch mal für den tollen Tipp.

Link to comment
Share on other sites

Da bin ich noch mal ;-)

 

Hab es jetzt auf unserem Testserver ausprobiert und leider geht es nicht, folgendes Problem taucht auf:

 

1. Check-Out läuft nicht mehr durch auf der letzten Seite kommt nur noch eine weiße Seite anstatt bspw. der Kontodaten für die Überweisung

 

2. Im BO wird nur noch 1. Bestellung angezeigt anstatt aller vorhanden

 

3. Beim versuch au die Bestellung zu klicken wir einfach alles weiß

 

Mir ist auch auf aufgefallen, dass unsere Funktion ein wenig anders aussieht diese Absatz ist bei uns standardmäßig scheinbar garnicht vorhanden alles andere ist identisch. Irgendeine Idee?

 

LEFT JOIN `'._DB_PREFIX_.'product` p ON (p.id_product = od.product_id)

LEFT JOIN `'._DB_PREFIX_.'product_shop` ps ON (ps.id_product = p.id_product AND ps.id_shop = od.id_shopIr

 

Danke :)

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

Ja, so ist das, wenn man seine Version nicht dazuschreibt ;-)

In 1.4 ist es noch einfacher:

 

public function getProductsDetail()

return Db::getInstance()->ExecuteS('    SELECT *    FROM `'._DB_PREFIX_.'order_detail` od    WHERE od.`id_order` = '.intval($this->id).'    ORDER BY od.`product_reference`');}

Link to comment
Share on other sites

Ja das stimmt, sorry :lol:

 

Vielen Dank für den tollen Codees läuft auf dem Testserver bisher ohne Probleme noch mal vielen vielen Dank :)

 

Der "Code-Schnipsel" sollte ja eigentlich sonst keine negativen Auswirkungen haben können auf die Datenbank etc. von der reinen Logik her oder?

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

Super danke, dann übernehmen wir die Änderung jetzt für unseren Live Shop.

 

Noch mal vielen Dank, dass wir gerade beim zusammenstellen der Waren bei größeren Bestellungen extrem hilfreich sein.

 

Dankeschööööön :)

Link to comment
Share on other sites

Bei einem Shop-Upgrade sind die Änderungen aber wieder nichtig gemacht. Musst du immer wieder anpassen und der Code kann je nach Version auch anders dann sein.

Die version als override ist sicherer, weil sie beim Upgrade erhalten bleibt. Jedoch ist auch hier Vorsicht geboten, es kann sein, dass die Override-Datei irgendwann mal angepasst werden muss.

Link to comment
Share on other sites

  • 1 year later...

Hallo allerseits.

 

Ich versuche mich gerade an dem gleichen Problem. Damit man möglichst wenige Dateien hat, die bei einem Update angepasst werden müssen, überlege ich gerade, ob man die Sortierung nicht direkt in der invoice.tpl hinbekommt (de ich eh anpasse). Aber ich krieg es nicht hin ... Hier:

 

{foreach $order_details as $order_detail}

 

habe ich versucht einen sortby Befehl zu integrieren, aber dann wird gar keine Rwechnung mehr erzeugt. Ich habe das mal so versucht:

 

{foreach $order_details|@sortby:"$order_detail.product_reference" as $order_detail}

 

funktioniert aber leider nicht :-(

 

Ich wäre dankbar, wenn jemand eine Idee hätte, wie man das hinbekommt.

Link to comment
Share on other sites

Mmmmh, habe deinen Tipp in der 1.6.10 Version gerade mal ausprobiert ... zeigt leider keine Wirkung.

 

Wenn ich mir eine Bestellübersicht ausdrucke, dann werden die Artikel sortiert. Auf der Rechnung erscheinen sie aber so wie sie in den Warenkorb gelegt wurden. Ich habe extra ne neue Bestellung getätigt, weil ich dachte, dass das vielleicht nicht rückwirkend funktioniert.

 

    public function getProductsDetail()
    {
        return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
        SELECT *
        FROM `'._DB_PREFIX_.'order_detail` od
        LEFT JOIN `'._DB_PREFIX_.'product` p ON (p.id_product = od.product_id)
        LEFT JOIN `'._DB_PREFIX_.'product_shop` ps ON (ps.id_product = p.id_product AND ps.id_shop = od.id_shop)
        WHERE od.`id_order` = '.(int)($this->id).'
        ORDER BY od.`product_reference`');
    }

Link to comment
Share on other sites

  • 6 months later...

Okay ... für alle die auch noch nicht so ganz das Prestashop-Universum durchblicken, hier noch der Hinweis, dass es im Backend unter 'Erweiterte Einstellungen / Leistung' einen Schalter gibt: Alle Overrides deaktivieren.

 

 

Nachdem ich den gefunden und auf NEIN gesetzt hatte, funktionierte es ganz wunderbar.

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...