7 Commits
Author SHA1 Message Date
leopold.strobl 5582a09e21 caching eingebaut: Cacht eine definierte Anzahl Jahren für die ROI Planung vor 2026-07-20 20:33:31 +02:00
leopold.strobl 0b6ae3d933 Umsatz pro Artikel pro Kund ein ROI, Pivot table angepasst 2026-07-20 15:16:32 +02:00
leopold.strobl b7ad70a6ea Readme angepasst 2026-07-03 16:50:27 +02:00
leopold.stroblandClaude Opus 4.7 6fd76baf90 ROI: Neuester Artikelname als Hauptname, ältere Namen als Tooltip
Bei gleicher Artikelnummer (product_pk) kann sich der Name im Laufe der
Zeit ändern. Bisher wurde der Name der ERSTEN gefundenen Rechnungszeile
festgehalten – jetzt wird pro Produkt eine Titel-Historie mit dem letzten
zugehörigen invoice_date gesammelt. In der Pivot-Tabelle erscheint der
neueste Name als Hauptname; frühere Namen werden über ein i-Icon neben
dem Namen als Hover-Tooltip angezeigt.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-07-03 11:07:51 +02:00
leopold.stroblandClaude Opus 4.7 9818f2f0db ROI: Search-Bar der DataTables bleibt beim horizontalen Scrollen fest angedockt
Bisher lagen Search-Feld, Length-Selector und Pagination innerhalb eines
äußeren .table-responsive-Containers und sind beim horizontalen Scrollen
mitgewandert. Jetzt übernimmt DataTables via scrollX das horizontale
Scrolling der Tabelle selbst, sodass die Bedienelemente außerhalb des
Scroll-Bereichs bleiben.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-07-03 10:59:53 +02:00
leopold.strobl 786c8234ca Merge branch 'main' of http://srvgitea01.vtm.zone:3000/epi/EpiWebview 2026-06-29 10:09:30 +02:00
leopold.strobl a914cab035 Versicherung greift jetzt schon auf den Versicherungswert der Artikelliste zu -> Deutlich performanter 2026-06-29 10:09:28 +02:00
4 changed files with 1059 additions and 76 deletions
+10
View File
@@ -134,3 +134,13 @@ sudo docker exec -it epiwebview-apache-php bash
cd /var/www/html cd /var/www/html
git pull git pull
``` ```
Falls Daten verändert wurden:
```
git fetch origin
git reset --hard origin/main
```
Danach auf jeden Fall Berechtigungen fixen:
```
chown -R www-data:www-data /var/www/html
```
+997 -40
View File
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -30,7 +30,7 @@ $productList = json_decode($result)->payload;
$filteredProductArray = []; $filteredProductArray = [];
foreach ($productList as $product) { foreach ($productList as $product) {
if ($product->is_stock_control && $product->is_stock_single_entry && !$product->is_virtual) { if ($product->is_stock_control && $product->is_stock_single_entry && !$product->is_virtual) {
if (!empty($product->stock_data[0]->stock_rent) && $product->stock_data[0]->stock_rent > 0) { if (!empty($product->stock_data[0]->stock_rent) && $product->stock_data[0]->stock_rent > 0 && !empty($product->pricing) && $product->pricing->insurance_net!=0) {
$filteredProductArray[] = $product; $filteredProductArray[] = $product;
} }
} }
@@ -41,13 +41,13 @@ foreach ($filteredProductArray as $filteredProduct) {
$detailRes = $Epi->requestEpiApi('/v1/product/' . $filteredProduct->primary_key . '?cl=' . Epirent_Mandant); $detailRes = $Epi->requestEpiApi('/v1/product/' . $filteredProduct->primary_key . '?cl=' . Epirent_Mandant);
$insuredProduct = json_decode($detailRes)->payload[0] ?? null; $insuredProduct = json_decode($detailRes)->payload[0] ?? null;
if (!$insuredProduct || empty($insuredProduct->pricing) || !isset($insuredProduct->pricing->insurance_net)) { /* if (!$insuredProduct || empty($insuredProduct->pricing) || !isset($insuredProduct->pricing->insurance_net)) {
continue; continue;
} }
if ((float)$insuredProduct->pricing->insurance_net == 0.0) { if ((float)$insuredProduct->pricing->insurance_net == 0.0) {
continue; continue;
} }
*/
// Materials // Materials
$MaterialList = ""; $MaterialList = "";
if (!empty($insuredProduct->materials)) { if (!empty($insuredProduct->materials)) {
+16
View File
@@ -16,6 +16,22 @@ define('CrewBrain_TaskListID', 6);
define('Enable_QR_Code_CrewBrainAufgaben', true); define('Enable_QR_Code_CrewBrainAufgaben', true);
// @hr // @hr
// @section: Epirent-Spezifische Einstellungen // @section: Epirent-Spezifische Einstellungen
// @note: -------------------- ROI Cache --------------------
// @note: Aktiviert einen lokalen Cache für die ROI-Ansicht, weil die Live-API-Abfrage sehr langsam ist.
// @note: Der Cache enthält Rohdaten für einen definierten Zeitraum. Alles außerhalb wird live geladen.
// @note: Zulässige Werte (Integer ODER String):
// @note: -1 = alles aus dem Vorjahr UND ÄLTER (Jahre <= currentYear-1)
// @note: -2 = alles aus vor 2 Jahren UND ÄLTER (Jahre <= currentYear-2)
// @note: 0 = nur das aktuelle Jahr (Vorsicht: ändert sich täglich!)
// @note: 2024 = exakt dieses eine Kalenderjahr (>=1900)
// @note: '<2015' = alles vor 2015 (Jahre <= 2014)
// @note: '<=2015' = alles bis inkl. 2015
// @note: '>=2018' = alles ab 2018 (kein Live-Anteil, weil Cache oben offen)
// @note: '>2018' = alles ab 2019
// @note: '2015-2017' = konkreter Range (Jahre 2015..2017)
// @note: Ist der Parameter nicht definiert, ist der Cache DEAKTIVIERT und alles läuft live wie bisher.
define('ROI_Cache_YearRange', -1);
define('Enable_QR_Code_CheckOut', false); //Zeigt statt der Packscheinnummer einen Scanbaren QR Code für den CheckOut an define('Enable_QR_Code_CheckOut', false); //Zeigt statt der Packscheinnummer einen Scanbaren QR Code für den CheckOut an
define('Enable_QR_Code_CheckIn', false); //Zeigt statt der Packscheinnummer einen Scanbaren QR Code für den CheckIn an define('Enable_QR_Code_CheckIn', false); //Zeigt statt der Packscheinnummer einen Scanbaren QR Code für den CheckIn an
define('Vorbereitungs_Zeitvariable', 'Packen'); //Name des zu verwendenden Zeitabschnitts, der Zusätzlich zur DispoZeit beim Check Out Angezeigt werden soll define('Vorbereitungs_Zeitvariable', 'Packen'); //Name des zu verwendenden Zeitabschnitts, der Zusätzlich zur DispoZeit beim Check Out Angezeigt werden soll