Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:

Autor Thema: MODUL: Anzahl Bestellungen eines Kunden in Bestellübersicht anzeigen  (Gelesen 1456 mal)

Offline FräuleinGarn

  • Fördermitglied
  • *****
  • Beiträge: 3.027
    • Teile Beitrag
Re: MODUL: Anzahl Bestellungen eines Kunden in Bestellübersicht anzeigen
« Antwort #30 am: 21. August 2019, 12:32:13 »
Nein noch nicht. Brauch ich etwas Zeit zu wo ich mich auch konzentrieren kann und im Moment haben Frau und Kind Urlaub und ich komm zu nichts  :flee-mrgreen:

Ich versuche es Abends mal die Tage. Danke dir vielmals.

Gruß Timm

Offline FräuleinGarn

  • Fördermitglied
  • *****
  • Beiträge: 3.027
    • Teile Beitrag
Re: MODUL: Anzahl Bestellungen eines Kunden in Bestellübersicht anzeigen
« Antwort #31 am: 23. August 2019, 11:56:35 »
Sorry noch keine Zeit gehabt, aber ein Fehler ist mir noch aufgefallen.

Neueste Version von dir ist drauf mit Einstellung Kommentare anzeigen ja; erster Kommentar anzeigen ja; try_count_guest_orders ja, compare_also_cust_address nein.

Kunde bestellt zuerst als Neuer Kunde.
Später bestellt er nochmal als Gast.

Dann steht bei der ersten früheren Bestellung in schwarz eine (1) und bei der zweiten neueren Bestellung als Gast eine rote (2).

Er scheint also nur bei Gastbestellungen auch die Bestellung von neuen Kunden hinzuzuzählen, aber nicht bei Bestellung eines neuen Kunden seine Bestellungen als Gast.

Gruß Timm

Offline noRiddle

  • Experte
  • *****
  • Beiträge: 10.070
  • Geschlecht: Männlich
    • Teile Beitrag
    • Webdesign Bonn - Köln
Re: MODUL: Anzahl Bestellungen eines Kunden in Bestellübersicht anzeigen
« Antwort #32 am: 23. August 2019, 13:05:07 »
Eine Vermischung von "echten" Konten und Gast-Konten ist nie beabsichtigt gewesen.
Daß ein Kunde als Gast und mit einem "echten" Konto mit jeweils derselben Mail-Adresse bestellen kann habe ich nicht bedacht.
Ich habe deshalb beim Zählen der Bestellungen eines Gast-Kontos noch den account_type hinzugefügt, sodaß wirklich nur Gast-Bestellungen gezählt werden und es keine Vermischung gibt.

Es werden gezählt
  • Alle Bestellungen mit demselben "echten" Konto.
  • Wenn $try_count_guest_orders auf true steht
    • alle Bestellungen eines Gasts mit derselben E-Mail-Adresse
    • wenn außerdem $compare_also_cust_address auf true steht
      alle Bestellungen eines Gastes mit derselben E-Mail-Adresse und derselben PLZ und desselben Ortes und derselben Strasse

Code: PHP  [Auswählen]
<?php
/**************************************************************************************************
* file: 13_add_to_ordlist.php
* use: display total amount of orders per customer in order listing
       optional: display also comments of order (with option to display all or only first (oldest))
* path: /admin/includes/extra/footer/
*
* (c) noRiddle 08-2019
**************************************************************************************************/


if(strpos($PHP_SELF, FILENAME_ORDERS) && !isset($_GET['action']) && xtc_db_num_rows($orders_query) > 0) {
    //BOC config
    $tot_ord_debug = false; //debug ? (true will display certain generated arrays in footer area for control purposes, see code)

    $we_have_ord_comments = true; //want to display comments of orders ?
    $only_first_comment = false; //if $we_have_ord_comments is set to true, want to display all comments or only first (oldest) one ?

    $try_count_guest_orders = true; //try to count also guest orders (comparing mail-address)
    $compare_also_cust_address = false; //compare not only mail-address but also customer-address when trying to count orders placed by guests
    //EOC config

    xtc_db_data_seek($orders_query, 0);

    $queried_custs = array();
    $ord_cust_map = array();
    if($we_have_ord_comments === true) {
        $ord_comm_arr = array();
    }
   
    while($ord = xtc_db_fetch_array($orders_query)) {
        $ord_cust_map[$ord['orders_id']] = $ord['customers_id'];
    }

    $collect_unique_custids = array_unique($ord_cust_map);
    $custs_str = implode(',', $collect_unique_custids);
    if($we_have_ord_comments === true) {
        $ord_id_array = array_keys($ord_cust_map);
        $ordc_in_str = implode(',', $ord_id_array);
    }

//debug
if($tot_ord_debug === true) {
    echo '<pre>$ord_cust_map: '.print_r($ord_cust_map, true).'</pre>';
    echo '<pre>$collect_unique_custids: '.print_r($collect_unique_custids, true).'</pre>';
}
 
    $hmo_add_select = $try_count_guest_orders === true ? ' customers_email_address,'.($compare_also_cust_address === true ? ' customers_street_address, customers_city, customers_postcode,' : '') : '';
    $how_many_orders_query = xtc_db_query("SELECT COUNT(*) AS total_orders,".$hmo_add_select." account_type, customers_id FROM " . TABLE_ORDERS . " WHERE customers_id IN(".$custs_str.") GROUP BY customers_id");

    while($custs_total_arr = xtc_db_fetch_array($how_many_orders_query)) {
        if($try_count_guest_orders === true && $custs_total_arr['account_type'] == '1') {
            $hmo_add_guest_select = $compare_also_cust_address === true ? " AND customers_street_address = '".xtc_db_input($custs_total_arr['customers_street_address'])."'
                                                                             AND customers_city = '"
.xtc_db_input($custs_total_arr['customers_city'])."'
                                                                             AND customers_postcode = '"
.xtc_db_input($custs_total_arr['customers_postcode'])."'"
                                                                         : '';
            $how_many_orders_guest_query = xtc_db_query("SELECT COUNT(*) AS total_guest_orders
                                                           FROM "
. TABLE_ORDERS . "
                                                          WHERE account_type = 1
                                                            AND customers_email_address = '"
.xtc_db_input($custs_total_arr['customers_email_address'])."'"
                                                          .$hmo_add_guest_select);

            $how_many_orders_guest_arr = xtc_db_fetch_array($how_many_orders_guest_query);
        }
       
        $hmo_result_arr = array('total_orders' => $custs_total_arr['account_type'] == '0' ? $custs_total_arr['total_orders'] : ($custs_total_arr['account_type'] == '1' ? $how_many_orders_guest_arr['total_guest_orders'] : ''),
                                'account_type' => $custs_total_arr['account_type']
                               );
        if($tot_ord_debug === true) {
            if(isset($custs_total_arr['customers_email_address'])) { //which is effectively if($try_count_guest_orders === true)
                $hmo_result_arr['customers_email_address'] = $custs_total_arr['customers_email_address'];

                if($compare_also_cust_address === true) {
                    $hmo_result_arr['customers_street_address'] = $custs_total_arr['customers_street_address'];
                    $hmo_result_arr['customers_city'] = $custs_total_arr['customers_city'];
                    $hmo_result_arr['customers_postcode'] = $custs_total_arr['customers_postcode'];
                }
            } //we don't need that, only for debugging purposes
        }

        $queried_custs[$custs_total_arr['customers_id']] = $hmo_result_arr;
    }

//debug
if($tot_ord_debug === true) {
    echo '<pre>$queried_custs: '.print_r($queried_custs, true).'</pre>';
}

    if($we_have_ord_comments === true) {
        $orders_history_query = xtc_db_query("SELECT orders_id, comments FROM " . TABLE_ORDERS_STATUS_HISTORY . " WHERE orders_id IN(".$ordc_in_str.") ORDER BY orders_id DESC, date_added");

        if(xtc_db_num_rows($orders_history_query) > 0) {
            while($orders_comments = xtc_db_fetch_array($orders_history_query)) {
                $ord_comm_arr[$orders_comments['orders_id']][] = $orders_comments['comments'];
            }
if($tot_ord_debug === true) {
    echo '<pre>$ord_comm_arr: '.print_r($ord_comm_arr, true).'</pre>';
}

            if(!empty($ord_comm_arr)) {
                foreach($ord_comm_arr as $ordid => $comm_arr) {
                    $ord_comments = "";
                   
                    if($only_first_comment !== true) {
                        for($oc = 0, $ocl = count($comm_arr); $oc < $ocl; $oc++) {
                            if($comm_arr[$oc] != '') {
                                $ord_comments .= '<span style="display:block; margin:0 0 3px 0; padding:0 0 3px 0; border-bottom:1px dotted #000;">'.nl2br($comm_arr[$oc]).'</span>';
                            }
                        }

                        echo '<span class="ord-comm tooltip" data-ord="ord-'.$ordid.'" style="padding:0 0 0 10px; float:right;">'.(!empty($ord_comments) ? '<img src="images/icons/comment2.gif" style="border:0;"><em>'.$ord_comments.'</em>' : '').'</span>';
                    } else {
                        if($comm_arr[0] != '') {
                            $ord_comments .= '<span style="display:block; margin:0 0 3px 0; padding:0 0 3px 0;">'.nl2br($comm_arr[0]).'</span>';
                        }

                        echo '<span class="ord-comm tooltip" data-ord="ord-'.$ordid.'" style="padding:0 0 0 10px; float:right;">'.(!empty($ord_comments) ? '<img src="images/icons/comment2.gif" style="border:0;"><em>'.$ord_comments.'</em>' : '').'</span>';
                    }
                }
            }
        }
    }

    foreach($ord_cust_map as $ordid => $custid) {
        echo '<span class="ord-tot" data-ordc="ordc-'.$ordid.'" style="display:inline-block; padding:0 0 0 10px;'.($queried_custs[$custid]['account_type'] == '1' ? ' color:#c00;' : '').'" title="No. of orders'.($queried_custs[$custid]['account_type'] == '1' ? ' (GAST)' : '').'">('.$queried_custs[$custid]['total_orders'].')</span>';
    }
?>
<style>
.tooltip:hover em {bottom:auto; top:100%;}
</style>
<script>
$(function() {
    var $tbc = $('.tableBoxCenter tbody tr');

    $tbc.each(function(index) {
        var $skip_header = $tbc.eq(index + 1),
            $tbc_dtc = $skip_header.find('.dataTableContent'),
            $tbc_dtc_oid = $tbc_dtc.eq(1).text(),
            $class_data_var = 'ordc-'+$tbc_dtc_oid;
<?php
if($we_have_ord_comments === true) {
?>
        var $class_data_cvar = 'ord-'+$tbc_dtc_oid;
<?php
}
?>

        $tbc_dtc.eq(0).addClass($class_data_var);
       
        $('span[data-ordc='+$class_data_var+']').appendTo($skip_header.find('.'+$class_data_var));
<?php
if($we_have_ord_comments === true) {
?>
        $('span[data-ord='+$class_data_cvar+']').appendTo($skip_header.find('.'+$class_data_var));
<?php
}
?>
    });
});
</script>
<?php
}
?>

Natürlich kann es sein, daß man wissen will wieviele Bestellungen es gab mit ausschließlich derselben Mail-Adresse wie die in der angezeigten Bestellung verwendete, ohne Unterscheidung zwischen Gast- und "echtem" Konto.
Das kann man sich ja erweitern wenn man das so möchte. Ich baue nicht mehr weiter daran.

Gruß,
noRiddle

Offline japadi83

  • Mitglied
  • ***
  • Beiträge: 102
  • Geschlecht: Männlich
    • Teile Beitrag
Re: MODUL: Anzahl Bestellungen eines Kunden in Bestellübersicht anzeigen
« Antwort #33 am: 29. August 2019, 11:29:24 »
Vielen Dank für den Code und die Anleitung noRiddle, funktioniert super!  :thumbs:

Ich habe nun versucht die Anzahl auch auf der Bestelldetailseite (orders_info_blocks.php) einzubauen, bekomme jedoch dort kein Ergebnis angezeigt.
Wäre es möglich die Anzahl auch dort anzeigen zu lassen?
Da ich in der Regel die Bestellung direkt über die Berstellnummer-Suche aufrufe, wäre die Anzeige dort sehr hilfreich für mich.

Danke und Gruß
Patrick

Offline noRiddle

  • Experte
  • *****
  • Beiträge: 10.070
  • Geschlecht: Männlich
    • Teile Beitrag
    • Webdesign Bonn - Köln
Re: MODUL: Anzahl Bestellungen eines Kunden in Bestellübersicht anzeigen
« Antwort #34 am: 01. September 2019, 16:46:57 »
Für die Einzelansicht der Bestellungen müsstest du eine Datei in /admin/includes/extra/modules/orders/orders_info_blocks_end/ anlegen in welcher die nötigen Queries gemacht werden.
Das Ergebnis in ein wenig HTML schreiben, ausgeben und mittels Javascript an die gewünschte Position schieben.

Gruß,
noRiddle


Teile per facebook Teile per linkedin Teile per twitter

 


             
anything