sqStorage Webbasierte Mini-Lagerverwaltung

Re: Webbasierte Mini-Lagerverwaltung

Hi, hab gerade Langeweile und setze mich gerade mal an ein einfache Benutzer/Gruppen-Funktion, wenn theSplit nichts dagegen hat.
 
  • Thread Starter Thread Starter
  • #62
Re: Webbasierte Mini-Lagerverwaltung

Nein nein, mach ruhig, sogar sehr sehr gerne! :T
 
  • Thread Starter Thread Starter
  • #63
Re: Webbasierte Mini-Lagerverwaltung

Die Arbeit an den Custom Fields geht voran! Die Eingabemaske für die Felder steht schon bereit.

Dazu mal zwei Videos:

Gestern:
Heute:

Und hier die Internas:



Was aktuell noch fehlt, das man bei Einträgen/Gegenständen entsprechend Daten mit Auswahl von einem oder mehreren Feldern einpflegen kann.
Geplant ist es so, dass man die Felder auswählen kann die man für einen Artikel braucht, und diese individuell mit Werten füllen oder nicht füllen können soll. Das funktioniert dann unabhängig für jeden Gegenstand, er kann aber muß keine Zusatzfelder haben.
 
Re: Webbasierte Mini-Lagerverwaltung

Habe es nun eben auch mal endlich geschafft meine Arbeit von September mit dem Benutzer-/Gruppensystem fertig zustellen und dir eben einen dazu geschickt. Habe auch versucht den Style von dir zu übernehmen.

Das Script versendet automatisch Einladungs-Mails beim anlegen von Benutzern über den internen Mailserver sofern eine Absender-Adresse gesetzt ist und das Mailing bei den Einstellungen eingeschaltet ist und PHP's mail-Funktion verwendet werden kann, darüber kann dann das Passwort gesetzt werden.

Todo: besser wäre es aber auch eine andere mail-lib anzuschließen wie damit Mails auch über externe Mailserver versendet werden können, falls die mail-Funktion nicht genutzt werden kann. Habe einen Fallback drin, damit es eingeschränkt auch ohne Mailserver geht (Admin kann Link manuell versenden). Weis nur nicht wie es damit aussieht, weil es die MIT-Lizenz verwendet und du GPL V3. Kann man das einfach inkludieren oder beißt sich dass?

Einstellungen dazu speichere ich direkt in der Datenbank in der neuen settings-Tabelle, diese kannst du auch für andere Einstellungen nutzen. Die Einstellungen werden dort json-codiert über mysql's JSON_SET-Funktion gespeichert.

Die Passwörter werden mit PHP's -Funktion in der Datenbank gespeichert, diese verwendet momentan bcrypt zum hashen und den PASSWORD_DEFAULT algo.

Hier mal ein paar Screenshots dazu:


Neue PHP Scripte müsstest du jetzt schützen, indem du die login.php per require einbindest.
Als Benutzergruppen habe ich mal Administrator, Gast und Benutzer angelegt.
 
Zuletzt bearbeitet:
  • Thread Starter Thread Starter
  • #65
Re: Webbasierte Mini-Lagerverwaltung

Sieht super aus und hat Hand und Fuß! Vielen Dank :T
Eine Bitte dazu, kannst du die SQL Anweisungen in "updateDB.php" mit den "Create Table if not exists" (der Struktur für die Nutzer Tabelle) füllen?

Dann ließe sich die Datenbank "bootstrappen", mit Aufruf der "updateDB.php" zum Beispiel so einen Eintrag:
[src=text]DB::query('CREATE TABLE IF NOT EXISTS `customFields` ( `id` BIGINT(20) UNSIGNED NOT NULL, `label` VARCHAR(64) NOT NULL, `dataType` INT UNSIGNED NOT NULL, `default` VARCHAR(64) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;');[/src]

Die Idee dahinter ist, das man nicht die SQL importieren muß, sondern einfach die Datei aufruft, nachdem man die Einstellungen für die Datenbank getätigt hat und ein DB-Nutzer und Datenbank angelegt worden ist.


Update:

Mit den neuen Daten habe ich eine neue DB Bootstrap Datei geschrieben [kw]bootDB.php[/kw]:


Und dafür ist das "tlv_empty.sql" entfernt. Alles was an DB Arbeit gemacht werden muß kommt dann in die BootDB - und (nachträgliche) Änderungen an Datensätzen in die [kw]updateDB.php[/kw]

Die Readme passe ich entsprechend noch an.
 
Zuletzt bearbeitet:
Re: Webbasierte Mini-Lagerverwaltung

Ich bekomme beim initalisieren der DB leider den Fehler "ERROR: Unknown character set: 'utf8mb4'"

Bin leider nicht so Datenbankaffin, kann es sein, dass mir eine Erweiterung fehlt?

Ansonsten wäre glaube ich der Support für SQLite3 ziemlich nice, da man dann von irgendwelchen größeren SQL System absehen kann und das ganze "on-the-fly" im Hintergrund laufen könnte.

LG
 
  • Thread Starter Thread Starter
  • #67
Re: Webbasierte Mini-Lagerverwaltung

Hi, spontan scheint es an der mySQL Version zu liegen:


Hier gibt es auch noch einen Workaround, aber ich weiß nicht in wie weit das Konsequenzen hat:


TLDR: Von "utf8mb4" auf "utf8" umstellen. Also müsstest du nur die [kw]bootDB.php[/kw] so ummodeln:

Zeile 9, "settings"-Tabelle:

[src=php]DB::query('CREATE TABLE IF NOT EXISTS `settings` (`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT , `namespace` varchar(64) NOT NULL, `jsondoc` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `namespace` (`namespace`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;');[/src]

zu dem hier, sollte helfen:

[src=php]DB::query('CREATE TABLE IF NOT EXISTS `settings` (`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT , `namespace` varchar(64) NOT NULL, `jsondoc` longtext CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `namespace` (`namespace`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;');[/src]

Allerdings, da mußt du X-Coder fragen, wird es wohl einen Grund haben warum er "utf8mb4" nimmt. und nicht eine andere Kodierung wie "utf8".
 
Re: Webbasierte Mini-Lagerverwaltung

Allerdings, da mußt du X-Coder fragen, wird es wohl einen Grund haben warum er "utf8mb4" nimmt. und nicht eine andere Kodierung wie "utf8".
Ist heutzutage best practise UTF8 im 4 byte Multibyte Modus zu verwenden.
Spätestens wenn mal jemand ein UTF8-Smiley eingibt, fällt einem Standard-UTF8 auf die Füsse
 
Re: Webbasierte Mini-Lagerverwaltung

Das Encoding war eigentlich keine Absicht sondern ist beim Export meines SQL-Dumps herein gerutscht, da meine Datenbank dies schon als Standard hatte. Es läuft auch mit einem anderen Encoding, es gehen dann halt manche Zeichen nicht.

Aber eigentlich hat braegler recht, best practice wäre heut zu Tage utf8mb4, dies wird allerdings erst ab MariaDB 10.2 / Mysql 5.5.3 unterstützt.

Allerdings habe ich auch noch die JSON_SET-Funktion genutzt, dafür wird mindestens MariaDB 10.2.3 / Mysql 5.7 benötigt.

Da theSplit heute aber eh das statische SQL-Script auf eine dynamische Methode (bootDB) umgestellt hat, könnte man dort das optimale Encoding erkennen lassen, oder sogar noch konfigurierbar machen.

Die Frage ist, sollte man das Encoding überhaupt beim Anlegen der Tabellen mitgeben? -Wenn keines angegeben wird, so wird ja automatisch das verwendet, was beim Anlegen des Datenbank-Schemas als default gesetzt wurde, bzw. kann das ja dort geändert werden, bevor bootDB aufgerufen wird, so könnte man die gesetzte Locale respektieren. @theSplit: habe dir mal ein PR dazu geschickt, wenn du es für Sinnvoll hälst, kannst du das mergen.
 
Zuletzt bearbeitet:
  • Thread Starter Thread Starter
  • #70
Re: Webbasierte Mini-Lagerverwaltung

Wichtig zum Encoding der Datenbank wäre auch der Punkt in der [kw]dba.php[/kw], Zeile 5:
[src=php]DB::$encoding = 'utf8';[/src]

Hier steht noch etwas dazu:

Dann müsste man das Encoding an zentraler Stelle vorgeben, also in der dba.php welches dann global für die Erstellung der Tabellen genutzt wird.

Den PR würde ich daher in dieser Form noch nicht zusammenführen.

---

Da auf Github ein Issue bezüglich hübscherer und durchsuchbarer Dropdowns/Selects gefordert wurde, hab ich mich mal dazu hingesetzt:

anderes Icon:

Das einzige was dabei noch fehlt sind "Multiple" Selektionen - da würde ich, so fern ein Select das Attribute "multiple" aufweist, mit Checkboxen arbeiten die mit Klick auf den Namen des Elements an bzw. abgewählt werden.
 
Re: Webbasierte Mini-Lagerverwaltung

Dann schaue ich nochmal in einer gewissen Zeit rein, eine Keller habe ich sowieso nicht :cool: #minimalist
 
  • Thread Starter Thread Starter
  • #72
Re: Webbasierte Mini-Lagerverwaltung

Nur kurz, "custom dropdowns" sind nun komplett eingebaut:

Video demo mit Multiple Select:


Das schöne daran, funktioniert alles über Javascript und die original Dropdowns bleiben erhalten.

Code:


Und hier ist der Issue in Github:


Update:
Tastaturnavigation für die CustomDropdowns:
 
Zuletzt bearbeitet:
Re: Webbasierte Mini-Lagerverwaltung

sehr geil! Super arbeit. werd ich jetzt direkt mal updaten und durchchecken.. Vielen dank für eure Arbeit an diesem projekt! :)
 
Re: Webbasierte Mini-Lagerverwaltung

Tachjen,
hab gerade damit angefangen die Lagerverwaltung mit dem Template-System Smarty auszurüsten.
Werde in den nächsten Tagen einen PR dazu machen ( ) .

Hatte ja vor ca. 10 Monaten schonmal die damalige Version umgesetzt ( ), aber nachdem doch einiges lief, habe ich beschlossen nochmal von Null an durch zu starten.

Was mir aber gleich aufgefallen ist:
Ich arbeite bei der Entwicklung immer mit "error_log(E_ALL)".

Beim ersten Aufruf (nach der DB Installation) waren dann die 4 Felder zur Admin-Daten-Eingabe mit Fehlermeldungen zugepflastert, und auch das Formular an für sich hat nicht funktioniert, da die Action des Frms plötzlich auch die Fehlermeldung enthielt.

Betrifft aber wohl die meisten Seiten.
Notice: Undefined variable: isEdit in H:\phpDEV\sqstorage\settings.php on line 90
Notice: Undefined variable: isAdd in H:\phpDEV\sqstorage\settings.php on line 90
Notice: Undefined variable: error in H:\phpDEV\sqstorage\settings.php on line 195
Notice: Undefined property: stdClass::$senderAddress in H:\phpDEV\sqstorage\settings.php on line 242
Notice: Undefined property: stdClass::$enabled in H:\phpDEV\sqstorage\settings.php on line 242


Ich werde versuchen die Dinge gleich mit auszubügeln.


Edit: Hab mir gerade mal spasseshalber die Zip Datei ( - Clone or download - Download Zip) gezogen.
Auf dem Windows 10 Rechner hat WindowsDefender darin "einen Trojaner entdeckt"

Die selbe Datei entpackt auf der HD stört ihn jedoch nicht.
Eben sowenig der selbe Inhalt (als Zip Download) in der Datei templates/jsDropDown.tpl
 
Zuletzt bearbeitet:
Re: Webbasierte Mini-Lagerverwaltung

Die Seiten sind nun fast komplett umgebaut.
Muss noch die Subkategorie Tabelle im Inventar [sqstorage/inventory.php?category=1] einbauen, dann ist das geschafft.
und die Übersetzungen aktualisieren (mo-dateien).

Sollte morgen über die Bühne sein. Der aktuelle Stand kann problemlos ausgecheckt und getestet werden.


Was soll eigentlich mit den zusätzlichen Datenfeldern in Zukunft passieren?
Automatisch (dynamisch?!?) in die entsprechenden Formulare (index.php?editItem=X) mit einblenden?

--- [2020-01-02 21:49 CET] Automatisch zusammengeführter Beitrag ---

Es ist vollbracht.

Die komplette Webapp ist nun einmal auf die Smarty-Template-Engine umgestellt.
Übersetzung ist soweit komplett, eine LANGUAGE.md mit den nötigen Informationen um die Übersetzungen up-to-date zu halten ist mit dabei.

Seit meinem Fork (Stand 25.12.) sind einige Commits bei Dir dazu gekommen, die ich nicht rebasen kann, da sie die Aufsplittung wieder zu Nichte machen würden.

Hab mir die angeschaut, und eigentlich sind nur zwei Commit wirklich "zu gebrauchen"



Die restlichen ändern Dateien, die ich komplett neu strukturiert hab.

Mein Vorschlag wäre, auf den Stand 44e51ea8dbc7a93ad39b192d07b1f5165251671a zurück zu gehen, den PR ( ) zu mergen und die 2 Commits manuell aufzubügeln (oder patchen)
--- [2020-01-03 12:02 CET] Automatisch zusammengeführter Beitrag ---

Mahlzeit.

Hab dir mal den PR hinterlassen.
Dein aktueller Stand, die Dateien manuell überschrieben, .editorconfig drüber laufen lassen.
 
Zuletzt bearbeitet:
  • Thread Starter Thread Starter
  • #76
Re: Webbasierte Mini-Lagerverwaltung

Erst mal vielen Dank für deine Mitarbeit!

Bezüglich der Commits, können wir so machen, ich habe dir aber einen Kommentar, mit möglichen Problemen hier geschildert:


Das Problem ist auch, wenn das Projekt in einem Unterordner gelagert wird und es die (relativen) Pfade kaputt macht oder zusätzliche "/" Slahes hinzufügt die dann Mehrfach vorkommen.

Bezüglich der Custom Fields, die wollte ich dynamisch hinzufügen lassen, also beim Eintragen/Bearbeiten ein extra Dropdown für die Feldauswahl und man kann das Gegenständen hinzufügen, dabei kann aber muß ein Artikel nicht alle Felder haben. Also wirklich dynamisch. Die Speicherung soll so aussehen das für jeden Gegenstand ein Datenfeld reserviert wird, was genutzt werden kann, aber nicht muß.
 
Re: Webbasierte Mini-Lagerverwaltung

Hab ein wenig gefixt und auf verschiedenen Systemen getestet.
Unterordner hab ich ebenfalls getestet
foldertest.jpg
 
  • Thread Starter Thread Starter
  • #78
Re: Webbasierte Mini-Lagerverwaltung

Super Arbeit! Ich geb zu, ich war etwas überfordert den Merge zu machen..

Aber was ich dafür gelöst habe in den letzten Commits:
- Prio1 - Dropdowns werden nun korrekt erkannt anhand eines Indexes
- Sprachauswahl über Custom Dropdown mit Change Event inside "nav.tpl"
- Überflüsse Zeichen entfernt welche sich ins Display bei den Kategorien geschlichen haben (categories.tpl)

Was noch fehlt, die Sprache beim bzw. für Login einzustellen.

Und eine weitere Frage, wie funktioniert das mit der Sprachauswahl - bei mir gibt es keine Änderung. Muss da etwas am Server eingestellt sein? Oder ist das davon unabhängig und orientiert sich woran anders? Habs in Chrome und Firefox getestet, ein Wechsel ergibt aber keine Änderung der Anzeigesprache.


Edit: Lesen müsste man können: steht ja alles in der LANGUAGE.md mit dem Server.

Habe nun auch die Locales installiert, was bei mir broken war:
[src=bash]~$ sudo dpkg-reconfigure locales
Generating locales (this might take a while)...
de_DE.UTF-8... done
en_GB.UTF-8... done
en_US.UTF-8... done
Generation complete.

~$/sudo service apache2 restart
[/src]

Jetzt funktioniert auch die Sprachauswahl in Firefox und Chrome. :T



 
Zuletzt bearbeitet:
Re: Webbasierte Mini-Lagerverwaltung

Vielen Dank für die Blumen.
Hab schon gleich den nächsten PR hinterher geschoben. Beim Mergen macht ja Übung bekanntlich den Meister.
Mit dabei ist auch die Sprachauswahl auf der Login-Seite
 
Re: Webbasierte Mini-Lagerverwaltung

Habe da mal eine Anmerkung zur composer-Nutzung:

Eigentlich sollte der vendor-Ordner nicht in git eingecheckt werden, dieser sollte in der .gitignore aufgenommen werden. Nur die composer.lock-Datei sollte commited werden, damit alle, die das Projekt ausschecken, bei allen externen Abhängigkeiten immer auf dem gleichen Versionsstand sind. Sonst gibt es Probleme wenn ich dein Projekt z.B. als Subprojekt/require per composer in einem neuen Projekt einbinden möchte.

getcomposer.org schrieb:
Tip: If you are using git for your project, you probably want to add vendor in your .gitignore. You really don't want to add all of that third-party code to your versioned repository.
Mehr dazu findest du .

Zur Installation der Abhängigkeiten müssen Entwickler und Nutzer dann nur composer install aufrufen, dadurch wird der vendor-Ordner angelegt und die externen Abhängigkeiten heruntergeladen und eingebunden.

Entwickler können dann alle Abhängigkeiten mit "composer update" aktualisieren, dadurch wird eine neue composer.lock angelegt die wieder commited werden kann, nachdem auf Kompatibilität der Abhängigkeiten geprüft wurde.
 
Zuletzt bearbeitet:
Zurück
Oben