SQL-Reporting via AdminMenu

Thema wurde von HolgerNils (xycons.de), 20. Dezember 2012 erstellt.

  1. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.985
    Danke erhalten:
    470
    Danke vergeben:
    369
    #1 HolgerNils (xycons.de), 20. Dezember 2012
    Zuletzt bearbeitet: 13. Januar 2013
    Noch ein kleines Weihnachtsgeschenk für die Community :rolleyes:
    Ich mach ganz gerne SQL-Abfragen gegen die DB um z. B. Bestände zu prüfen etc. - und das regelmässig.
    Wer keine WaWi "dran hat" braucht trotzdem Werte.

    Als bequemer Mensch hatte ich dann keine Lust mehr ständig die SQLs aus einem File zu holen, auszuführen und womöglich noch vorher in MySQL einzuloggen. So entstand die Möglichkeit wahlfreie SQLs als Bildschirmreporting abzusetzen.

    Sieht so aus im Menü:
    sreport1.JPG

    Sieht (beispielhaft) so aus, wenn angeklickt:
    sreport2.JPG

    Das "Tool" führt einen hinterlegten SQL gegen die DB aus und stellt die Ergebnismenge dar. Ganz simple eigentlich. Man erspart sich das Hantieren mit SQL-Statements, weil diese hinterlegt sind. So können dann auch Kolleg(inn)en ohne SQL-Kenntnisse reportieren ;-)

    Einbauen macht das Christkind, oder wer dem nicht traut macht es folgendermassen selbst:

    Einfach eine Datei anlegen mit folgendem Inhalt:
    Code:
    <?xml version="1.0"?>
    <admin_menu>
        <menugroup id="BOX_HEADING_SQLREPORTS" sort="90" background="statistik.png" title="SQL-Reporting">
            <menuitem sort="10" link="sql_reports.php" link_param="report=[COLOR=blue]1[/COLOR]" title="Attributemeldebestand" />
            <menuitem sort="20" link="sql_reports.php" link_param="report=[COLOR=purple]2[/COLOR]" title="Artikelmeldebestand" />
        </menugroup>
    </admin_menu>
    
    und als Datei /user_classes/conf/AdminMenu/menu_sqlreports.xml auf den Server laden.

    Hier könnt ihr nun die Abschnitte <menuitem... so oft duplizieren und anpassen abhängig davon wieviele "Reports" ihr braucht. Wenn also ein dritter Report notwendig ist, dann für die nächste Zeile die sort-Nummer hochzählen - also z. B. auf 30 setzen, den Wert "report=x" um eins erhöhen und z. B. auf "report=3" anpassen und einen neuen Titel vergeben - usw.

    Nun noch dem Admin das Recht geben die Menüeinträge zu sehen und auszuführen:
    SQL absetzen:
    Code:
    ALTER TABLE `admin_access` ADD `sql_reports` INT( 1 ) DEFAULT '0' NOT NULL ;
    UPDATE `admin_access` SET `sql_reports` = '1' WHERE `customers_id` = '1' LIMIT 1 ;
    
    Ggf. die "customer-id" anpassen, wenn der Admin nicht die kundennummer 1 besitzt :cool:
    Und nicht vergessen den Cache zu leeren.

    Dann noch die beigefügte Datei hochladen nach /admin/sql_reports.php.

    Ist die Datei hochgeladen, dann muss sie einmalig modifiziert werden.
    Am Anfang des Files findet sich nachfolgender Abschnitt, der angepasst werden muss.

    Dort gibt es (zunächst 2 sind vorbereitet) für jeden "report=x" aus dem XML-File einen CASE-Abschnitt, also auch hier für weitere Reports die Abschnitte hinzufügen, die benötigt werden abhängig von der in der XML-Datei definierten Anzahl Reports ("report=xxx"). Die Zahl im "case" muss mit der Zahl im "report=" des XML-Files oben übereinstimmen.

    Die schrägen Werte sind das jeweilige SQL-Statement, welches ihr nach Euren Bedürfnissen hinterlegen könnt.

    Braucht ihr also einen 3. Report dann den "case '2'-Abschnitt kopieren, aus dem "case '2' ein case '3' machen und die gewünschte SQL-Selektion eintragen.

    Der Define('HEADING_TITLE'... legt den Titel des Reports fest, also auch nach Notwendigkeit anpassen.

    Fettich!

    Code:
        switch ($_GET['report']) {
            [COLOR=blue]case '1' :[/COLOR]
                Define('HEADING_TITLE', 'Meldebestand &uuml;ber Artikel-Attribute (Bestand <= 3)');
                $gm_query = gm_split_sql_queries("
    [I]                        select  
                                    products_attributes.attributes_model as SKU,
                                    products.products_model as SKN, 
                                    products.products_quantity as SKN_Qty, 
                                    products_description.products_name as Name,
                                    products_attributes.attributes_stock as SKU_Qty 
                            from    products, products_description, products_attributes 
                            where   products.products_id = products_description.products_id 
                            and     products.products_id = products_attributes.products_id 
                            and     products_attributes.attributes_stock <= 3 
                                    order by products_attributes.attributes_model[/I];");
                break;
        [COLOR=purple]case '2' : [/COLOR]   
                Define('HEADING_TITLE', 'Meldebestand &uuml;ber Artikel ohne Attribute (Bestand <= 3)');
                $gm_query = gm_split_sql_queries("
    [I]                        select 
                                    products.products_model as SKU, 
                                    products.products_quantity as SKU_Qty, 
                                    products_description.products_name as Name
                            from    products, products_description 
                            where   products.products_id = products_description.products_id
                            and     products.products_id not in (Select products_id from products_attributes)
                            and     products.products_quantity <= 3;[/I]");
                break;
        }
    
     

    Anhänge:

  2. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Na, da hat aber einer jetzt richtig "Blut geleckt" mit dem (updatesicheren) Erweitern des Gambio-Systems ;)...
     
  3. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.985
    Danke erhalten:
    470
    Danke vergeben:
    369
    Ich LIEBE ES ! ;-)