Jump to content

Bestellübersicht über beliebigen Zeitraum


Snooty

Recommended Posts

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 by Snooty (see edit history)
Link to comment
Share on other sites

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 by electrostuff_de (see edit history)
Link to comment
Share on other sites

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 by Snooty (see edit history)
  • Like 1
Link to comment
Share on other sites

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

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