Verbindlichkeiten

  • Habe Ende letzten Jahres mal versucht, den Selbstprogrammier-Vorschlägen der Wawision/Xentral-Entwicklerseiten zu folgen, um mir meine sorgsam hochgeladenen Scan's oder Kopien wenigstens per Lieferant und/oder Rechnungsnummer anschauen zu können, eine entsprechende "Page" gebaut, die aber nicht immer alle Dokumente findet, weil es wohl während der Entwicklung v. Wawision/Xentral auch Veränderungen an den Ablageorten der Dateien gegeben hat. Ich bin noch nicht ganz dahinter gekommen, wie der Ablageort bestimmt wird. Vielleicht weiß jemand ja Bescheid usw. und/oder hat Tipps.

  • Ablageorte von Dateien sind ok und mit


    $datei_id = $this->app->DB->Select("SELECT dv.datei FROM datei_stichwoerter ds INNER JOIN datei_version dv ON ds.datei = dv.datei WHERE ds.parameter ='$id' AND ds.objekt = 'verbindlichkeit'");

    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ergänzung

    werden sie auch gefunden, da der Inhalt v. "parameter", die Belegnummer in ds nicht eindeutig ist.


    Unter www/pages/content muss allerdings auch eine tpl-Datei hinterlegt sein.

  • Laut Angabe in der Zeile nach "Update Center" auf der "www/index.php?module=welcome&action=start"-Startseite: 20.3.c9ffacf (Open-Source)

    Vorher hatten wir die Enterprise mit verschiedenen Modulen.

    Neue Dokumente wurden seit der Umstellung logischer Weise nicht mehr eingepflegt, weil das Enterprise-Verbindlichkeits-Modul ja nicht mehr arbeitet usw.


    Durch die oben angesprochene Korrektur werde ich jetzt wohl öfter mal nach alten Dokumenten schauen, wenn es um Artikel geht, die in der Vergangenheit angeschafft wurden.


    Generell würde mich interessieren, ob dieses Forum tatsächlich als Plattform der Entwicklung gedacht ist. Also meinetwegen gerne. Ich habe allerdings schon verschiedene Anläufe unternommen, mir die Arbeitsweise der Applikation durch Nachvollziehen des Kodes zu erschliessen, muss aber gestehen, dass es mir schnell zu unübersichtlich wird.


    Zum Beispiel finde ich gerade nicht den Grund, warum der Filter für Betrag im Gegensatz zu den übrigen wie "Name", "Kundennummer", "Lieferantennummer" (in der oben bereitgestellten php-Datei) nicht funktioniert. Kann da jemand einen Tipp geben?

  • Das Forum hier ist als Austausch für Anwender sowie Entwickler gedacht. Wir wollen damit noch mehr Leute ins Boot holen welche die Open Source weiterbetreiben wollen, da das Thema ja von Xentral beerdigt wurde.


    Der Original-Code ist teilweise schlimm, das stimmt. Mittelfristig wollen wir das auch aufräumen und besser strukturieren, sodass neue Module schneller entwickelt/angepasst werden können. Aktuell fokussieren wir uns allerdings darauf, bis Ende des Jahres einen einsatzfähigen Ersatz für die Enterprise bereitzustellen, erstmal auf der "alten" Codestruktur.


    Zu deinem Modul: Du hast einen Fehler in der Spaltenreihenfolge. Bei "Findcols" kommt p.abkuerzung vor v.betragbezahlt, im SQL-Statement ist das allerdings anders herum. Das muss immer gleich aufgebaut sein, sonst funktioniert es nicht.


    Tausche mal

    Code
    $findcols = array('a.name','a.kundennummer','a.lieferantennummer', 'v.rechnung', "v.rechnungsdatum",'p.abkuerzung','v.betragbezahlt', 'v.id');

    gegen

    Code
    $findcols = array('a.name','a.kundennummer','a.lieferantennummer', 'v.rechnung', "v.rechnungsdatum",'v.betragbezahlt','p.abkuerzung', 'v.id');

    dann gehts.


    Bei OpenXE gibt es im Ordner "tools" ein kleines Helferlein (module_creator) das auf Basis einer Tabelle ein funktionierendes Modul mit List und Edit-Funktion erstellt.

  • bzgl. Helferlein (module_creator) tools-Verzeichnis per cp -r in d. "Produktions"-Umgebung plus:


    if (!function_exists('str_starts_with')) {

    function str_starts_with($str, $start) {

    return (@substr_compare($str, $start, 0, strlen($start))==0);

    }

    }

    gemäß

    https://www.php.net/manual/en/function.str-starts-with.php
    in der module_creator.php ergänzt, da bislang nur php 7.2


    dann d. Erzeugung d. Moduls

    verbindlichkeit


    Allerdings entstehen dann tatsächlich sehr viele Spalten, eben alle.


    1. Gibt's im Kode eine geeignete Stelle für einen selektieren, whs. in while nach //* Iterate through the result set */ ?

    2. Zeilen werden auch nicht ausgegeben, muss noch was manuell angepasst werden?

  • Danke für die Anmerkung, ich stelle das mal auf substr_compare um, das geht bei php 7 und 8.


    Die überflüssigen Spalten habe ich bisher immer manuell rausgeworfen. Evtl. könnte man einen Parameter als Zähler machen (max. 10 Spalten etc.) Meinst Du das?


    Die Positionen muss man extra als Modul anlegen, und dann kann man das in ein Modul zusammenkopieren, z.B. in ein eigenes Tab.

  • Statt Zähler ein array mit den Namen der Spalten


    Code
    $insert_array = array(
      'id' => 1,
      'rechnung' => 1,
      'rechnungsdatum' => 1,
      'betragbezahlt' => 1,
    );

    und dann statt


    Code
        while ($row = mysqli_fetch_assoc($result)) {
    
              foreach ($row as $key => $value) {

    eine Abfrage dazwischen

    Code
        while ($row = mysqli_fetch_assoc($result)) {
    
            if (!array_key_exists($row['Field'], $insert_array)) {
              continue;
            }
              foreach ($row as $key => $value) {

    Der Generator ist ja wirklich sehr praktisch!

  • Da es ein Skript ist, bevorzuge ich persönlich das Editieren im Skript, da es für mich im Vergleich zur Kommandozeile komfortabler ist.


    Man könnte beide Möglichkeiten umsetzen: Kommandozeilenangabe überschreibt d. Definition im Skript.

  • Zwecks Auslesen und Speichern einer Änderung in einem AutoComplete-Feld komme ich gerade nicht weiter ohne tiefer in den Quell-Kode von

    $this->app->Secure->GetGET(<attributname>) oder $this->GetInput() reinzuschauen(Name/Pfade der Sourcedatei(-en)???)


    In verbindlichkeiten_edit.tpl habe ich das Feld so definiert:


    Code
    <tr><td>{|Lieferant|}:</td><td><input type="text" name="lieferantennummer" id="lieferantennummer" 
    value="[LIEFERANTENNUMMER]" size="20"></td></tr>


    In Verbindlichkeiten.php


    Code
    $result = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS v.id, a.lieferantennummer, v.rechnung, DATE_FORMAT(v.rechnungsdatum,'%d.%m.%Y'), v.betragbezahlt, v.id FROM verbindlichkeit v LEFT JOIN projekt p ON v.projekt = p.id LEFT JOIN adresse a ON v.adresse = a.id WHERE v.id=$id");


    Das anschließende

    Code
    foreach ($result[0] as $key => $value) {
      $this->app->Tpl->Set(strtoupper($key), $value);
    }

    bringt den Wert auch ins AutoComplete-Feld


    Nur nach dem Speichern wird der Inhalt des Felds nicht als Variable in $input geliefert.


    Hat jemand einen Tipp?

  • Kurze Frage bevor ich lange im Kode rumsuche.


    Wie kriege ich beim Umschalten auf einen zweiten bzw. weiteren Reiter "Datei(1)", so nenne ich ihn mal i.G. zum tab#xx's in der tbl-Datei, diesen mit weissen Hintergrund zum Erkennen, dass dieser ausgewählt bzw. gerade aktuell ist, belegt?


    Beim Aufruf von <Modul>_Edit() ist das zum Beispiel für "Details" gegeben:


    In beiden Fällen wird in der entsprechenden Funktion jeweils


    Code
    $this->app->erp->MenuEintrag("index.php?module=verbindlichkeit&action=edit&id=$id", "Details");

    und

    Code
    $this->app->erp->MenuEintrag("index.php?module=verbindlichkeit&action=dateien&id=$id&smodule=verbindlichkeit",'Dateien'.$anzahldateien);

    Denoch mit unterschiedlichem Erscheinungsbild.

  • Eigentlich funktioniert das automatisch... Noch ein Hinweis, in der .tpl das <div id="tabs"> das sind nicht die Tabs die man sieht, sondern die Ebene darunter, also in Deinem Fall "Übersicht" und "neue Datei anlegen".


    Die oberen Tabs werden durch die verschiedenen Handler definiert, also z.B. edit, list, etc. und haben im Code dann eine eigene Funktion.


    Warum bei Dir der Tab angeklickt ist, aber nicht hervorgehoben kann ich leider nicht nachvollziehen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!