könnte man so machen:
LAGER1 (Hauptlager)
├── LAGER1-A (Regal A)
│ ├── LAGER1-A-B1 (Boden 1)
│ │ ├── LAGER1-A-B1-1 (Box 1)
│ │ ├── LAGER1-A-B1-2 (Box 2)
│ │ ├── … bis Box 5
│ ├── LAGER1-A-B2 (Boden 2)
│ │ └── … 5 Boxen
│ └── … bis Boden 5
├── LAGER1-B (Regal B)
│ └── … gleiche Struktur
└── … bis Regal T
<?php
/\*\*
\* Script zum hierarchischen Anlegen von Warenlagern in Dolibarr
\*
\* Struktur:
\* - Lager 1
\* - Regale A bis T (20 Regale)
\* - Pro Regal 5 Böden (1-5)
\* - Pro Boden 5 Boxen (1-5)
\*
\* Total: 1 + 20 + 100 + 500 = 621 Warenlager
\*
\* METHODE 1: Dolibarr API (empfohlen, sauber)
\*/
// Dolibarr Umgebung laden - Automatische Pfad-Erkennung
$res = 0;
$possible_paths = \[
"/usr/share/dolibarr/htdocs/master.inc.php", // Debian/Ubuntu Standard
"/var/www/html/dolibarr/htdocs/master.inc.php", // Apache Standard
"/var/www/dolibarr/htdocs/master.inc.php", // Alternative
dirname(\__FILE_\_) . "/../../htdocs/master.inc.php", // Relativ zum Script
"/opt/dolibarr/htdocs/master.inc.php", // Custom Installation
getcwd() . "/htdocs/master.inc.php", // Current Directory
\];
foreach ($possible_paths as $path) {
if (!$res && file_exists($path)) {
echo "✓ Dolibarr gefunden: $path\\n";
$res = @include $path;
if ($res) break;
}
}
if (!$res) {
echo "❌ FEHLER: Dolibarr master.inc.php nicht gefunden!\\n\\n";
echo "Gesuchte Pfade:\\n";
foreach ($possible_paths as $path) {
echo " - $path\\n";
}
echo "\\nBitte Script im Dolibarr-Verzeichnis ausführen oder Pfad anpassen.\\n";
die();
}
require_once DOL_DOCUMENT_ROOT.'/product/stock/class/entrepot.class.php';
// Konfiguration
$config = \[
'main_ref' => 'LAGER1',
'main_label' => 'Hauptlager 1',
'main_location' => 'Standort Hauptlager',
'regale' => range('A', 'T'), // A bis T = 20 Regale
'boeden_per_regal' => 5, // 5 Böden pro Regal
'boxen_per_boden' => 5, // 5 Boxen pro Boden
'dry_run' => true // true = nur anzeigen, false = tatsächlich anlegen
\];
echo "===========================================\\n";
echo "Warenlager Hierarchie Generator\\n";
echo "===========================================\\n\\n";
// Statistik
$stats = \[
'main' => 1,
'regale' => count($config\['regale'\]),
'boeden' => count($config\['regale'\]) \* $config\['boeden_per_regal'\],
'boxen' => count($config\['regale'\]) \* $config\['boeden_per_regal'\] \* $config\['boxen_per_boden'\]
\];
$stats\['total'\] = $stats\['main'\] + $stats\['regale'\] + $stats\['boeden'\] + $stats\['boxen'\];
echo "Anzulegen:\\n";
echo "- 1 Hauptlager\\n";
echo "- {$stats\['regale'\]} Regale\\n";
echo "- {$stats\['boeden'\]} Böden\\n";
echo "- {$stats\['boxen'\]} Boxen\\n";
echo "- TOTAL: {$stats\['total'\]} Warenlager\\n\\n";
if ($config\['dry_run'\]) {
echo "⚠️ DRY RUN MODE - Keine echten Änderungen!\\n";
echo " Setze 'dry_run' => false zum tatsächlichen Anlegen.\\n\\n";
}
// ===========================================
// METHODE 1: Dolibarr API (empfohlen)
// ===========================================
function createWarehouseAPI($ref, $description, $location, $parent_id = 0, $dry_run = true) {
global $db, $conf, $user;
if ($dry_run) {
echo " \[DRY\] Würde anlegen: $ref - $description\\n";
return rand(1000, 9999); // Fake ID für Dry-Run
}
$warehouse = new Entrepot($db);
$warehouse->ref = $ref;
$warehouse->description = $description;
$warehouse->lieu = $location;
$warehouse->statut = 1; // Aktiv
$warehouse->country_id = 1; // Deutschland
$warehouse->fk_parent = $parent_id;
$result = $warehouse->create($user);
if ($result > 0) {
echo " ✅ Angelegt: $ref (ID: $result)\\n";
return $result;
} else {
echo " ❌ FEHLER bei $ref: " . $warehouse->error . "\\n";
return false;
}
}
echo "===========================================\\n";
echo "METHODE 1: Dolibarr API\\n";
echo "===========================================\\n\\n";
$created = 0;
// 1. Hauptlager
echo "1. Hauptlager anlegen...\\n";
$main_id = createWarehouseAPI(
$config\['main_ref'\],
$config\['main_label'\],
$config\['main_location'\],
0,
$config\['dry_run'\]
);
if ($main_id) $created++;
// 2. Regale
echo "\\n2. Regale anlegen...\\n";
$regal_ids = \[\];
foreach ($config\['regale'\] as $regal) {
$ref = $config\['main_ref'\] . '-' . $regal;
$desc = 'Regal ' . $regal;
$loc = 'Regal ' . $regal;
$regal_id = createWarehouseAPI($ref, $desc, $loc, $main_id, $config\['dry_run'\]);
if ($regal_id) {
$regal_ids\[$regal\] = $regal_id;
$created++;
}
}
// 3. Böden
echo "\\n3. Böden anlegen...\\n";
$boden_ids = \[\];
foreach ($config\['regale'\] as $regal) {
if (!isset($regal_ids\[$regal\])) continue;
for ($boden = 1; $boden <= $config\['boeden_per_regal'\]; $boden++) {
$ref = $config\['main_ref'\] . '-' . $regal . '-B' . $boden;
$desc = "Regal $regal - Boden $boden";
$loc = "Boden $boden";
$boden_id = createWarehouseAPI($ref, $desc, $loc, $regal_ids\[$regal\], $config\['dry_run'\]);
if ($boden_id) {
$boden_ids\[$regal\]\[$boden\] = $boden_id;
$created++;
}
}
}
// 4. Boxen
echo "\\n4. Boxen anlegen...\\n";
$box_count = 0;
foreach ($config\['regale'\] as $regal) {
if (!isset($boden_ids\[$regal\])) continue;
for ($boden = 1; $boden <= $config\['boeden_per_regal'\]; $boden++) {
if (!isset($boden_ids\[$regal\]\[$boden\])) continue;
for ($box = 1; $box <= $config\['boxen_per_boden'\]; $box++) {
$ref = $config\['main_ref'\] . '-' . $regal . '-B' . $boden . '-' . $box;
$desc = "Regal $regal - Boden $boden - Box $box";
$loc = "Box $box";
$box_id = createWarehouseAPI($ref, $desc, $loc, $boden_ids\[$regal\]\[$boden\], $config\['dry_run'\]);
if ($box_id) {
$box_count++;
$created++;
}
}
}
}
echo "\\n===========================================\\n";
echo "FERTIG!\\n";
echo "===========================================\\n";
echo "Angelegt: $created von {$stats\['total'\]} Warenlagern\\n\\n";
?>
Diese Datei ist nur ein dry run - ändert also noch nichts. Aber so könnte man es über die API machen.