Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Fehler: Kunden können alle Kommentare in der Bestellhistorie einsehen

    xxhappyxx

    • Viel Schreiber
    • Beiträge: 829
    • Geschlecht:
    Hallo zusammen,

    es ist ja schon seit längerem bekannt, dass Kunden die Kommentare in der Bestellhistorie (account_history_info.php) einsehen können, auch wenn diese nicht per Mail versendet wurden.

    Das ist unschön und führte in der Vergangenheit bestimmt zu der einen oder anderen Überraschung auf Kundenseite und im Anschluß daran auf Händlerseite.

    Um dieses Problem, zumindest mit den nicht versandten Statusänderungen, zu bereinigen ist nur eine kleine Änderung in der root/account_history_info.php notwendig.

    Suche:
    Code: PHP  [Auswählen]
    $statuses_query = xtc_db_query("select os.orders_status_name,
                                           osh.date_added,
                                           osh.comments
                                    from "
    .TABLE_ORDERS_STATUS." os,
                                         "
    .TABLE_ORDERS_STATUS_HISTORY." osh
                                    where osh.orders_id = '"
    .(int) $_GET['order_id']."'
                                    and   osh.orders_status_id = os.orders_status_id
                                    and   os.language_id = '"
    .(int) $_SESSION['languages_id']."'
                                    order by osh.date_added"
    );

    und ersetze mit:
    Code: PHP  [Auswählen]
    $statuses_query = xtc_db_query("select os.orders_status_name,
                                           osh.date_added,
                                           osh.comments
                                    from "
    .TABLE_ORDERS_STATUS." os,
                                         "
    .TABLE_ORDERS_STATUS_HISTORY." osh
                                    where osh.orders_id = '"
    .(int) $_GET['order_id']."'
                                    and   osh.customer_notified = 1
                                    and   osh.orders_status_id = os.orders_status_id
                                    and   os.language_id = '"
    .(int) $_SESSION['languages_id']."'
                                    order by osh.date_added"
    );

    Um dieses Problem abschließend zu lösen, wäre es notwendig die Tabelle "ORDERS_STATUS_HISTORY" um eine weitere Spalte "comments_send" zu erweitern, diese Spalte entsprechend aus der admin/orders.php heraus zu füllen und in der account_history_info.php die o.g. Abfrage zu erweitern.

    Wenn gewünscht, würde ich im nächsten Jahr eine Anleitung dafür erstellen.

    Gruß Thomas

    Edit: Ronny hat Recht. Quelle für die schnelle Lösung http://www.sellerforum.de/xt-c-xt-commerce-weiterentwicklungen-f12/kleines-datenleck-kunden-sehen-alle-statusaenderun-t31684.html

    Linkback: https://www.modified-shop.org/forum/index.php?topic=23922.0
    Marktplatz - Eine große Auswahl an neuen und hilfreichen Modulen sowie modernen Templates für die modified eCommerce Shopsoftware

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Vielleicht noch ein Danke an Xantiva senden und deinen Post mit Quellenangabe versehen?

    Gruß
    Ronny

    WayneTsun

    • Fördermitglied
    • Beiträge: 1.082
    • Geschlecht:
    @xxhappyxx
    Danke dafür! Aber den Rest wirklich erst im nächsten Jahr? ...puuh  :blower:

    Guten Rutsch!

    Beste Grüße,
    Wayne

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Was bewirkt denn das überhaupt ?
    Code: XML  [Auswählen]
    <input type="checkbox" checked="" name="notify_comments">
    Habe ich noch nie ausprobiert (mangels Testshop  :oops:).
    Wohin wird das geschrieben ?
    Vor allem, welchen Sinn hat es ?
    Entweder ich schreibe gar keinen Kommentar ins Textfeld, weil ich nur den Status ändern möchte
    oder ich schreibe einen Kommentar in Textfeld
    und den möchte ich ja auch nacher in der orders.php noch nachvollziehen können.

    Bewirkt die genannte Checkbox, daß ich zwar einen geschriebenen Kommentar nachher in der order_history sehen kann, dieser aber im Falle ich den Kommentar auch absende (erste Checkbox) nicht mit an den Kunden gesendet wird ?
    Hängen die beiden Boxen also voneinander ab ?

    Im übrigen finde ich es gerade gut, daß der Kunde in "Mein Konto" alles sehen kann.
    Für Interna sind doch die Memos da.

    Gruß,
    noRiddle

    xxhappyxx

    • Viel Schreiber
    • Beiträge: 829
    • Geschlecht:
    Hallo noRiddle,

    die 2. Checkbox bewirkt, dass der Kommentar nicht in der Mail an den Kunden auftaucht (wenn nicht gesetzt).  Ich kann auch die 1. Box nicht setzen und die 2. aktivieren, was zur Folge hat, dass der Kunde keine Mail bekommt, der Kommentar aber in der orders.php angezeigt wird. Unter "Mein Konto" ist dieser Kommentar zur Zeit aber leider immer sichtbar.

    Grundsätzlich stimme ich dir zu, dass Anmerkungen zu Kunden nichts in diesem Feld zu suchen haben. Aber es gibt bestimmt Anmerkungen die sich aus dem Ablauf einer Bestellung ergeben, die ein Kunde nicht unbedingt zu Gesicht bekommen muß. Und dafür kann dieses Feld genutzt werden. Wenn denn der kleine Fehler in der account_history_info.php und admin/orders.php bereinigt ist.

    Gruß Thomas

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Okay, aber
    Wohin wird das geschrieben ?

    ... da ja offensichtlich nicht in die DB ...

    Übrigens, wo wir gerade dabei sind und weil's mir gerade auffällt:
    Auch in der 1.06 Beta 4 wird immer noch ein ORDER_LINK an Gäste gesendet (change_order_mail.*),
    an Kunden also die keinen Kunden-Account haben und folglich der Link die Kunden ins "Nirwana" leitet.
    Dafür sollte man unbedingt das hier machen:
    Code: PHP  [Auswählen]
        // BOC added if clause not to send order link to customers with guest account
            if ($check_status['customers_status'] != 1) {
                $smarty->assign('ORDER_LINK', xtc_catalog_href_link(FILENAME_CATALOG_ACCOUNT_HISTORY_INFO, 'order_id='.$oID, 'SSL'));
            }
        // EOC added if clause not to send order link to customers with guest account

    Gruß,
    noRiddle

    xxhappyxx

    • Viel Schreiber
    • Beiträge: 829
    • Geschlecht:
    Also sowohl der Wortlaut des Kommentars, als auch die Info ob der Kunde eine Mail bekommen hat wird in die DB geschrieben. Genauer gesagt in die Tabelle "orders_status_history"

    Gruß Thomas

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Bitte sei mir nicht böse, liest du auch was ich schreibe ?
    Ich weiß das alles,
    aber der POST-Wert dieser Checkbox hier:
    Code: XML  [Auswählen]
    <input type="checkbox" checked="" name="notify_comments">
    um den geht es.

    Der den du meinst heißt ja so
    Code: XML  [Auswählen]
    <input type="checkbox" checked="" name="notify">

    Gruß,
    noRiddle

    xxhappyxx

    • Viel Schreiber
    • Beiträge: 829
    • Geschlecht:
    Keine Sorge, ich bin dir nicht böse, denn ich hatte mich in der Tat in der Checkbox vertan.  ;-)

    Dieser Wert wird, so wie ich es z.Z. überschauen kann, nicht in die DB übernommen sondern nur einmalig genutzt um den Inhalt der Mail zu bestimmen.

    Gruß Thomas

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Ja, aber der POST-Wert muß ja irgendwo verarbeitet werden...

    Okay, in der /admin/orders.php gibt's das hier
    Code: PHP  [Auswählen]
    if ($_POST['notify'] == 'on') {
            $notify_comments = ($_POST['notify_comments'] == 'on') ? $comments : '';
    //...
    }

    Das heißt aber doch, daß, wenn die Checkbox für Mail an Kunden senden (name="notify") nicht "on" ist,
    $notify_comments gar nicht definiert sein dürfte und somit auch nicht das dazugehörige Smarty für die account_history_info.
    Das wiederum bedeutet, daß der Kunde es auch nicht in der E-Mail hat wenn ich's nicht abgesendet habe.
    Soweit so gut.
    Das heißt aber doch, daß die vom OP gepostete Lösung ausreichend ist und es keines weiteren DB-Feldes bedarf, wofür denn ?
    In die DB muß $comments ja für die hauseigene history immer geschrieben werden.

    Gruß,
    noRiddle

    web28

    • modified Team
    • Beiträge: 9.404
    Danke für die Anregungen, wird beides in 1.06 übernommen.

    Da die Gast Stauts ID aber nicht auf 1 festgetackert ist sollte man besser DEFAULT_CUSTOMERS_STATUS_ID_GUEST verwenden.

    Meiner Meinung reicht "and   osh.customer_notified = 1 " auch aus. Falls nicht bitte Beispiel posten

    Gruss Web28

    xxhappyxx

    • Viel Schreiber
    • Beiträge: 829
    • Geschlecht:
    Das "and   osh.customer_notified = 1 " reicht in dem Monent nicht aus, wenn der Kunde eine Mail bekommt aber dennoch ein Kommentar eingetragen wird und dieser für den Kunden nicht sichtbar sein soll.

    Gruß Thomas

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Nicht korrekt.
    In der account_history_info.php wird ja mit der Änderung der Kommentar überhaupt nur ausgelesen wenn man ihn auch abgeschickt hat, also osh.customer_notified = 1.

    Habe aber ein anderes Problem:
    Wie soll ich denn die Gast-Status-ID ändern ?
    Wenn ich das Gastkonto umbenenne in z.B. Premium-Customer oder was immer, ist die ID natrülich dann dieser Kundengruppe zugeordnet.
    Dann stimmt aber ja  DEFAULT_CUSTOMERS_STATUS_ID_GUEST auch nicht mehr.
    Wie würden dann Gastbestellungen behandelt ?
    Und was ist eigentlich ?
    Code: PHP  [Auswählen]
    xtc_get_status_users($customers_status['customers_status_id'])

    Gruß,
    noRiddle

    web28

    • modified Team
    • Beiträge: 9.404
    Zitat
    Das "and   osh.customer_notified = 1 " reicht in dem Monent nicht aus, wenn der Kunde eine Mail bekommt aber dennoch ein Kommentar eingetragen wird und dieser für den Kunden nicht sichtbar sein soll.

    Das kann ich so bestätigen, allerdings fehlt mir bei einem Update die Idee, wie alte Bestellungen behandelt werden sollen, da würden dann ja keine Kommentare mehr angezeigt werden wenn comments_sent = 0.

    Code: PHP  [Auswählen]
    ALTER TABLE orders_status_history ADD comments_sent INT( 1 )  NULL DEFAULT '0';

    Um den alten Status Quo zu erhalten wäre wohl noch ein

    Code: PHP  [Auswählen]
    UPDATE orders_status_history SET comments_sent = '1' WHERE customer_notified = '1';

    nötig.
    Bei neuen Statusänderungen wird dann comments_send dann richtig gesetzt.

    Gruss Web28

    xxhappyxx

    • Viel Schreiber
    • Beiträge: 829
    • Geschlecht:
    Hallo web28,

    über die von dir genannte Problematik grübel ich schon den ganzen Abend.

    Aber auf eine andere Lösung, als die von dir genannte, bin ich auch noch nicht gekommen.

    Gruß Thomas