Snooty Posted April 22, 2017 Share Posted April 22, 2017 (edited) Hallo, ist es möglich, eine Bestellübersicht aller Produkte über einen beliebigen Zeitraum (bspw. letzte 7 Tage, letzte 30 Tage) anzeigen zu lassen und als csv zu exportieren? Ich habe bislang nur die Möglichkeit gefunden, entweder jede Bestellung einzeln durchzuklicken oder mir alle Lieferscheine in einer PDF zu speichern. Ich bräuchte nur eine simple Liste a la: 01.4.2017-30.4.2017: Produkt a: 2 Stück Produkt b: 1 Stück Produkt c: 5 Stück ... Ich habe hier aktuell die 1.7.1.1 zum Testen. Danke. Edited April 22, 2017 by Snooty (see edit history) Link to comment Share on other sites More sharing options...
electrostuff_de Posted April 23, 2017 Share Posted April 23, 2017 (edited) Hallo Snooty und wilkommen im Forum! Möchtest du das für deine Kunden als Feature zur Verfügung stellen oder nur für dich im Adminbereich? Sofern letzteres, kannst du direkt aus der Datenbank heraus exportieren, das Statement müsste wie folgt aussehen: SELECT SQL_CALC_FOUND_ROWS a.`id_order`, `reference`, `total_paid_tax_incl`, `payment`, a.`date_add` AS `date_add` , a.id_currency, a.id_order AS id_pdf, CONCAT(LEFT(c.`firstname`, 1), '. ', c.`lastname`) AS `customer`, osl.`name` AS `osname`, os.`color`, IF((SELECT so.id_order FROM `ps_orders` so WHERE so.id_customer = a.id_customer AND so.id_order < a.id_order LIMIT 1) > 0, 0, 1) as new, country_lang.name as cname, IF(a.valid, 1, 0) badge_success FROM `ps_orders` a LEFT JOIN `ps_customer` c ON (c.`id_customer` = a.`id_customer`) LEFT JOIN `ps_address` address ON address.id_address = a.id_address_delivery LEFT JOIN `ps_country` country ON address.id_country = country.id_country LEFT JOIN `ps_country_lang` country_lang ON (country.`id_country` = country_lang.`id_country` AND country_lang.`id_lang` = 2) LEFT JOIN `ps_order_state` os ON (os.`id_order_state` = a.`current_state`) LEFT JOIN `ps_order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = 2) WHERE 1 ORDER BY a.`id_order` DESC LIMIT 0, 50 In PHPMyAdmin kannst du deine Ergebnisse dann auch als CSV exportieren. Wenn du das als Feature für deine Kunden haben möchtest... joa, dann muss das wohl entwickelt werden Edited April 23, 2017 by electrostuff_de (see edit history) Link to comment Share on other sites More sharing options...
Snooty Posted April 24, 2017 Author Share Posted April 24, 2017 (edited) Hallo electrostuff, vielen Dank schon mal. Das Ganze soll nur mir als Admin zur Verfügung stehen. Mit deinem Befehl bekomme ich allerdings nur dieselbe Übersicht, wie man sie auch unter Verkauf > Bestellungen sieht. Ich bräuchte aber eine Übersicht aller einzelnen Produkte. Ich werde mal versuchen, ob ich damit weiterkomme - allerdings habe ich noch nicht wirklich einen Überblick über die ganzen SQL-Tabellen edit: so, ich habs, ganz einfach: SELECT d.`product_name` , COUNT( d.`product_quantity` ) AS qty FROM `ps_orders` a LEFT JOIN `ps_order_detail` d ON a.`id_order` = d.`id_order` WHERE a.`date_add` >= '2017-04-03 0:0:0' AND a.`date_add` <= '2017-04-23 23:59:59' GROUP BY d.`product_name` ORDER BY d.product_name DESC Edited April 24, 2017 by Snooty (see edit history) 1 Link to comment Share on other sites More sharing options...
electrostuff_de Posted April 25, 2017 Share Posted April 25, 2017 Die Abfrage solltest du dir im SQL Manager speichern (erweiterte Einstellungen->SQL Manager) - dort kannst du die Abfrage direkt als csv exportieren. Good Job! Link to comment Share on other sites More sharing options...
Snooty Posted April 25, 2017 Author Share Posted April 25, 2017 Danke für den Tipp - ich habe mir aber mittlerweile selbst ein Script geschrieben, bei dem ich auch die Datumswahl + CSV-Export dabei habe. 1 Link to comment Share on other sites More sharing options...
electrostuff_de Posted April 25, 2017 Share Posted April 25, 2017 Danke für den Tipp - ich habe mir aber mittlerweile selbst ein Script geschrieben, bei dem ich auch die Datumswahl + CSV-Export dabei habe. Teilen macht glücklich Link to comment Share on other sites More sharing options...
Snooty Posted April 25, 2017 Author Share Posted April 25, 2017 Kann ich machen, solange sich niemand über den Programmierstil beschwert <!doctype html> <html lang="de"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title></title> <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> <script src="https://code.jquery.com/jquery-1.12.4.js"></script> <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> <script> $( function() { var dateFormat = "yy-mm-dd", from = $( "#from" ) .datepicker({ defaultDate: "-14d", changeMonth: true, changeYear: true, numberOfMonths: 1, dateFormat: 'yy-mm-dd', showOtherMonths: true, selectOtherMonths: true, showButtonPanel: true }) .on( "change", function() { to.datepicker( "option", "minDate", getDate( this ) ); }), to = $( "#to" ).datepicker({ defaultDate: "+0d", changeMonth: true, changeYear: true, numberOfMonths: 1, dateFormat: 'yy-mm-dd', showOtherMonths: true, selectOtherMonths: true, showButtonPanel: true }) .on( "change", function() { from.datepicker( "option", "maxDate", getDate( this ) ); }); function getDate( element ) { var date; try { date = $.datepicker.parseDate( dateFormat, element.value ); } catch( error ) { date = null; } return date; } }); </script> <style type="text/css"> body { font-family:Verdana } form { margin: 20px } .anzahl { text-align:center } </style> </head> <body> <?php $start_datum = htmlspecialchars($_POST['start_datum']); $end_datum = htmlspecialchars($_POST['end_datum']); ?> <form method="post"> <label for="from">Von </label> <input type="text" id="from" name="start_datum" value="<?php if(isset($_POST['start_datum'])) { echo $start_datum; } else { echo date("Y-m-d", mktime(0, 0, 0, date("m") , date("d")-14, date("Y"))); } ?>"> <label for="to"> bis </label> <input type="text" id="to" name="end_datum" value="<?php if(isset($_POST['end_datum'])) { echo $end_datum; } else { echo date("Y-m-d"); } ?>"> <button name="submit" type="submit" value="Start">Start</button> </form> <div> <button id="export" class="btn" data-export="export">Export als CSV</button> <table border=1 cellspacing=0> <thead> <tr> <th class="caption">Bestellungen nach <?php echo $start_datum; ?></th> <th>Anzahl</th> </tr> </thead> <tbody> <?php if(isset($_POST['submit']) && $_POST['submit'] == 'Start') { $dbname = ""; $server = ""; $user = ""; $pass = ""; $verbindung = mysqli_connect($server, $user, $pass, $dbname); if (mysqli_connect_error()) { die('Fehler: (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); } mysqli_query($verbindung, "SET NAMES 'utf8'"); ##UTF8-Kodierung $sql_orders = sprintf("SELECT d.`product_name` AS product, COUNT( d.`product_quantity` ) AS qty FROM `ps_orders` a LEFT JOIN `ps_order_detail` d ON a.`id_order` = d.`id_order` WHERE a.`date_add` >= '%s' AND a.`date_add` <= '%s' GROUP BY d.`product_name` ORDER BY d.product_name DESC", mysqli_real_escape_string($verbindung, $start_datum . " 0:0:0"), mysqli_real_escape_string($verbindung, $end_datum . " 23:59:59") ); $abfrage_orders = mysqli_query($verbindung, $sql_orders); while($orders = mysqli_fetch_object($abfrage_orders)) { echo "<tr><td>"; echo $orders->product . "</td><td class=\"anzahl\">" . $orders->qty; echo "</td></tr>"; $gesamt_anzahl = $gesamt_anzahl + $orders->qty; } mysqli_free_result($abfrage_orders); } ?> </tbody> <tfoot class="anzahl" style="font-weight:bold"> <tr> <td>Gesamtanzahl</td> <td><?php echo $gesamt_anzahl; ?></td> </tr> </tfoot> </table> </div> <script> $.prototype.kb_table_csv = function() { var kb_tidy_content = function(text){ text = text.replace(/"/g, '""'); return '"'+text+'"'; }; $(this).each(function(){ var table = $(this); var caption = $(this).find('.caption').text(); var title = []; var rows = []; $(this).find('tr').each(function(){ var data = []; $(this).find('th').each(function(){ var text = kb_tidy_content($(this).text()); title.push(text); }); $(this).find('td').each(function(){ var text = kb_tidy_content($(this).text()); data.push(text); }); data = data.join(";"); rows.push(data); }); title = title.join(";"); rows = rows.join("\n"); var csv = title + rows; var uri = 'data:text/csv;charset=utf-8,' + encodeURIComponent(csv); var download_link = document.createElement('a'); download_link.href = uri; download_link.download = caption+".csv"; document.body.appendChild(download_link); download_link.click(); document.body.removeChild(download_link); }); }; $("#export").click(function(){ $("table").kb_table_csv(); }); </script> </body> </html> Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now