fix: Kupferzuschlag mit Mindestmenge berechnen und auf 2 Stellen runden
- Formel: Kupfergehalt × CU-Notiz / 100.000 × Mindestmenge - Ergebnis auf 2 Nachkommastellen gerundet - Cronjob und Trigger angepasst - Dokumentation aktualisiert - Version auf 1.2 erhöht Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
8729b5fdb7
commit
2e2cb5b710
5 changed files with 21 additions and 12 deletions
|
|
@ -1,5 +1,12 @@
|
|||
# Changelog - Metallzuschlag Modul
|
||||
|
||||
## 1.2 (2026-02-24)
|
||||
|
||||
### Geaendert
|
||||
- Kupferzuschlag-Berechnung: Jetzt Gesamtbetrag fuer Mindestmenge statt EUR/m
|
||||
- Formel: Kupfergehalt x CU-Notiz / 100.000 x Mindestmenge
|
||||
- Rundung auf 2 Nachkommastellen
|
||||
|
||||
## 1.1 (2026-02-19)
|
||||
|
||||
### Neu
|
||||
|
|
|
|||
10
README.md
10
README.md
|
|
@ -7,7 +7,7 @@ Metallnotierungen (Kupfer/Aluminium) von Sonepar abrufen, verwalten und automati
|
|||
- **Metallnotierungen abrufen**: Tageswerte und Monatsdurchschnitte (CU/AL) von der Sonepar Metal Note API
|
||||
- **Dashboard**: Aktuelle Notierungen, Verlaufsdiagramm (Chart.js) und Historie
|
||||
- **Kupfergehalt berechnen**: Automatisch aus Aderanzahl x Querschnitt x 8,89 kg/(km*mm2) beim Speichern von Produkten
|
||||
- **Kupferzuschlag berechnen**: EUR/m auf Einkaufspreisen = Kupfergehalt x CU-Notiz / 100.000
|
||||
- **Kupferzuschlag berechnen**: Gesamtbetrag auf Einkaufspreisen = Kupfergehalt x CU-Notiz / 100.000 x Mindestmenge
|
||||
- **Lieferanten-Zuschlaege**: CU/AL-Werte pro Lieferant (automatisch oder manuell)
|
||||
- **Cronjobs**: Woechentlicher API-Abruf + Neuberechnung aller Kupferzuschlaege
|
||||
|
||||
|
|
@ -31,18 +31,18 @@ Metallnotierungen (Kupfer/Aluminium) von Sonepar abrufen, verwalten und automati
|
|||
- `kupfergehalt` - Berechnetes Kupfergewicht in kg/km (automatisch per Trigger)
|
||||
|
||||
### Auf Einkaufspreisen (product_fournisseur_price)
|
||||
- `kupferzuschlag` - Berechneter Kupferzuschlag in EUR/m (automatisch per Trigger + Cronjob)
|
||||
- `kupferzuschlag` - Berechneter Kupferzuschlag in EUR (Gesamtbetrag fuer Mindestmenge, automatisch per Trigger + Cronjob)
|
||||
|
||||
## Berechnung
|
||||
|
||||
```
|
||||
Kupfergehalt (kg/km) = Aderanzahl x Querschnitt (mm2) x 8,89
|
||||
Kupferzuschlag (EUR/m) = Kupfergehalt (kg/km) x CU-Notiz (EUR/100kg) / 100.000
|
||||
Kupferzuschlag (EUR) = Kupfergehalt (kg/km) x CU-Notiz (EUR/100kg) / 100.000 x Mindestmenge
|
||||
```
|
||||
|
||||
Beispiel: NYM-J 3x1,5mm2 bei CU = 1.092,10 EUR/100kg
|
||||
Beispiel: NYM-J 3x1,5mm2 bei CU = 1.092,10 EUR/100kg, Mindestmenge 100m
|
||||
- Kupfergehalt = 3 x 1,5 x 8,89 = 40,005 kg/km
|
||||
- Kupferzuschlag = 40,005 x 1.092,10 / 100.000 = 0,4369 EUR/m
|
||||
- Kupferzuschlag = 40,005 x 1.092,10 / 100.000 x 100 = 43,69 EUR
|
||||
|
||||
## CU-Notiz Logik
|
||||
|
||||
|
|
|
|||
|
|
@ -371,7 +371,7 @@ class MetallzuschlagApi
|
|||
$productId = (int) $product->fk_object;
|
||||
|
||||
// Alle Einkaufspreise dieses Produkts
|
||||
$sqlPrices = "SELECT pf.rowid, pf.fk_soc";
|
||||
$sqlPrices = "SELECT pf.rowid, pf.fk_soc, pf.quantity";
|
||||
$sqlPrices .= " FROM ".$this->db->prefix()."product_fournisseur_price pf";
|
||||
$sqlPrices .= " WHERE pf.fk_product = ".$productId;
|
||||
|
||||
|
|
@ -388,8 +388,9 @@ class MetallzuschlagApi
|
|||
continue;
|
||||
}
|
||||
|
||||
// Kupferzuschlag EUR/m = Kupfergehalt (kg/km) × CU (EUR/100kg) / 100.000
|
||||
$kupferzuschlag = $kupfergehalt * $cuNotiz / 100000;
|
||||
// Kupferzuschlag = Kupfergehalt (kg/km) × CU (EUR/100kg) / 100.000 × Mindestmenge
|
||||
$quantity = (float) $price->quantity > 0 ? (float) $price->quantity : 1;
|
||||
$kupferzuschlag = round($kupfergehalt * $cuNotiz / 100000 * $quantity, 2);
|
||||
|
||||
// UPDATE oder INSERT
|
||||
$sqlUpd = "UPDATE ".$this->db->prefix()."product_fournisseur_price_extrafields";
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ class modMetallzuschlag extends DolibarrModules
|
|||
$this->descriptionlong = "MetallzuschlagDescriptionLong";
|
||||
$this->editor_name = 'Alles Watt laeuft';
|
||||
$this->editor_url = '';
|
||||
$this->version = '1.0';
|
||||
$this->version = '1.2';
|
||||
$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
|
||||
$this->picto = 'fa-coins';
|
||||
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@ class InterfaceMetallzuschlagTriggers extends DolibarrTriggers
|
|||
private function updateKupferzuschlagForProduct($productId, $kupfergehalt)
|
||||
{
|
||||
// Alle Einkaufspreise des Produkts holen
|
||||
$sql = "SELECT pf.rowid, pf.fk_soc";
|
||||
$sql = "SELECT pf.rowid, pf.fk_soc, pf.quantity";
|
||||
$sql .= " FROM ".$this->db->prefix()."product_fournisseur_price pf";
|
||||
$sql .= " WHERE pf.fk_product = ".((int) $productId);
|
||||
|
||||
|
|
@ -145,8 +145,9 @@ class InterfaceMetallzuschlagTriggers extends DolibarrTriggers
|
|||
continue;
|
||||
}
|
||||
|
||||
// Kupferzuschlag EUR/m = Kupfergehalt (kg/km) × CU (EUR/100kg) / 100.000
|
||||
$kupferzuschlag = $kupfergehalt * $cuNotiz / 100000;
|
||||
// Kupferzuschlag = Kupfergehalt (kg/km) × CU (EUR/100kg) / 100.000 × Mindestmenge
|
||||
$quantity = (float) $obj->quantity > 0 ? (float) $obj->quantity : 1;
|
||||
$kupferzuschlag = round($kupfergehalt * $cuNotiz / 100000 * $quantity, 2);
|
||||
|
||||
// In Einkaufspreis-Extrafield schreiben
|
||||
if ($this->saveKupferzuschlag((int) $obj->rowid, $kupferzuschlag)) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue