diff --git a/ils_kalk.py b/ils_kalk.py index 322f8e2..b9e3335 100644 --- a/ils_kalk.py +++ b/ils_kalk.py @@ -1,5 +1,6 @@ import json import math +from typing import Counter import unittest from numpy import array @@ -34,7 +35,7 @@ class Gefaellestrecke(): class Bereich(): def __init__(self,bezeichnung, kreisel:list[Kreisel], gefaellestrecken:list[Gefaellestrecke],anzahl_eckraeder=0, anzahl_etagenfoerderer=0, anzahl_bt_mt_entladung=0, - anzahl_bt_beladung=0, anzahl_mt_beladung=0, anzahl_zufuehrung_klinkenf=0, laenge_zufuehrung_klinkenf=0): + anzahl_bt_beladung=0, anzahl_mt_beladung=0, anzahl_zufuehrung_klinkenf=0, laenge_zufuehrung_klinkenf=0): self._bezeichnung = bezeichnung #für jede instanz der kreiselklasse in der Liste 'kreisel' muss ein Materialpreis und Montagestunden berechnet werden #Äquivalent dazu Gefällestrecken, ETF, So-Förderer und Umbügeln berechnen @@ -46,6 +47,23 @@ class Bereich(): # Montagestunden # =D3*( Tabellen!C30 + E3*Tabellen!D30 + F3*E3*Tabellen!E30 + G3*Tabellen!F30 + H3*Tabellen!H30 + I3*Tabellen!I30 + J3*Tabellen!R30 + F3*Tabellen!G30) + self.bauteile = { + "Antriebsstation": 0, + "Spannstation": 0, + "Rampe": 0, + "Weiche": 0, + "Separator_LP": 0, + "Separator_SP": 0, + "Ausschleuselement": 0, + "BTMT_Entladung": 0, + "BT_Beladung": 0, + "MT_Beladung": 0, + "Etagenfoerderer": 0, + "Sonst_Foerderer": 0, + "Inkrementalgeber": 0, + "Scanner": 0, + } + self.bauteile["Antriebsstation"] += anzahl_eckraeder # BaaN => Montagezeit und Herstellkosten einzelner Baugruppen b = BaaN() @@ -53,6 +71,13 @@ class Bereich(): kreisel_hk_mech_el_summe = 0 kreisel_mont_mech_el_summe = 0 for k in kreisel: + self.bauteile["Antriebsstation"] += k.anzahl + self.bauteile["Spannstation"] += k.anzahl + self.bauteile["Rampe"] += k.anzahl_rampen + self.bauteile["Weiche"] += k.anzahl_weichen + self.bauteile["Separator_LP"] += k.anzahl_separatoren + self.bauteile["Scanner"] += k.anzahl_scanner + pin = 0 if(k.pin == True): pin = 1 kreisel_hk_mech_el = k.anzahl * (b.herstellkosten_mech_el("ANTRIEBSSTATION_800_ILS_20_(mit_Motor)") + b.herstellkosten_mech_el("SPANNSTATION_800_ILS_20") +\ @@ -84,6 +109,14 @@ class Bereich(): gefaelle_mont_mech_el_summe = 0 self._gefaellestrecken = {} for g in gefaellestrecken: + self.bauteile["Separator_SP"] += g.anzahl_separatoren + #TODO: Ausschleuselement 30° wird hier nicht addiert? + if(g.ausschleuselement_30_grad == False): + self.bauteile["Ausschleuselement"] += g.anzahl + + + + hkAE = b.herstellkosten_mech_el("AE_ILS_20_(SMC)") montAE = b.montagestunden_mech_el("AE_ILS_20_(SMC)") hkEE = b.herstellkosten_mech_el("EE") @@ -124,7 +157,8 @@ class Bereich(): # Klinkenförderer: Antrieb = 920, E-Material = 200, proMeter = 160, MontageAntrieb = 3(h), MontageMeter = 1(h) self._zufuehrung_cpc = {"hk_summe": round(anzahl_zufuehrung_klinkenf * (920 + laenge_zufuehrung_klinkenf),2), "mont_summe": round((anzahl_zufuehrung_klinkenf * (3 + laenge_zufuehrung_klinkenf * 1))/60,2)} - + def getBauteile(self): + return self.bauteile def getResult(self): res = { @@ -139,6 +173,33 @@ class Bereich(): } return res + def getSummenBereich(self): + hk_sum = 0 + mont_sum = 0 + + hk_sum += self._kreisel.get("_GESAMT_", {}).get("hk_summe", 0) + hk_sum += self._gefaellestrecken.get("_GESAMT_", {}).get("hk_summe", 0) + hk_sum += self._eckraeder.get("hk_summe", 0) + hk_sum += self._etagenfoerderer.get("hk_summe", 0) + #TODO: So Förderer + hk_sum += self._btmt_entladung.get("hk_summe", 0) + hk_sum += self._bt_beladung.get("hk_summe", 0) + hk_sum += self._mt_beladung.get("hk_summe", 0) + hk_sum += self._zufuehrung_cpc.get("hk_summe", 0) + + mont_sum += self._kreisel.get("_GESAMT_", {}).get("mont_summe", 0) + mont_sum += self._gefaellestrecken.get("_GESAMT_", {}).get("mont_summe", 0) + mont_sum += self._eckraeder.get("mont_summe", 0) + mont_sum += self._etagenfoerderer.get("mont_summe", 0) + #TODO: So Förderer + mont_sum += self._btmt_entladung.get("mont_summe", 0) + mont_sum += self._bt_beladung.get("mont_summe", 0) + mont_sum += self._mt_beladung.get("mont_summe", 0) + mont_sum += self._zufuehrung_cpc.get("mont_summe", 0) + + return {"Materialkosten": round(hk_sum, 2), "Montagezeit": round(mont_sum, 2)} #Ohne Aufschläge, reine HK Kosten bzw Montagezeiten + + def tojson(self, input:dict): return json.dumps(input, sort_keys=False, indent=4) @@ -148,6 +209,76 @@ class Bereich(): with open("Bereichszusammenfassung.json", "w") as file: file.write(json) +class Taschen(): + def __init__(self, baugruppensummen:type[dict]): + #Zusatzbauteile die für Taschentransport erforderlich sind + + self._Zusatzbauteile = { + #"Bezeichnung":[Einzelpreis, Montagedauer(h)], Teilenummer + "Fuehrung_an_AE": [22.0, 0.1], #829514073 + "Halter_Gegenleiste_an_AE": [0.6, 0.02], #829514071 + "Aluwinkel_40x20": [2.6, 0.02], #931011103 + "Halter_Gegenleiste_an_EE": [2.6, 0.02], #829514070 + "Alu_4kt_20x20": [4.7, 0.1], #931601003 + + "Rollenandruckleiste_Sep_LP": [45.0, 0.05], #829534007 + "Abhebeleiste_Sep_LP": [89.0, 0.5], #829534008 + "Zwangsfuehrung_Sep_SP": [34.0, 0.1], #829514072 + #Schrägkreisel und Noppenband wird nicht übernommen, da nicht mehr verwendet + } + self._Summen = { + #"Bezeichnung":[Summe Preis, Summe Montagedauer] + "Fuehrung_an_AE": [0, 0], #829514073 + "Halter_Gegenleiste_an_AE": [0, 0], #829514071 + "Aluwinkel_40x20": [0, 0], #931011103 + "Halter_Gegenleiste_an_EE": [0, 0], #829514070 + "Alu_4kt_20x20": [0, 0], #931601003 + + "Rollenandruckleiste_Sep_LP": [0, 0], #829534007 + "Abhebeleiste_Sep_LP": [0, 0], #829534008 + "Zwangsfuehrung_Sep_SP": [0, 0], #829514072 + } + + #Gesamtanzahl von AE, Sep_LP, Sep_SP und Scanner auslesen + + + summe_ausschleuselement = baugruppensummen.get("Ausschleuselement", 0) + summe_sepLP_scanner = baugruppensummen.get("Separator_LP", 0) + baugruppensummen.get("Scanner", 0) + summe_sepSP = baugruppensummen.get("Separator_SP", 0) + self._Summen["Fuehrung_an_AE"] = [round(self._Zusatzbauteile.get("Fuehrung_an_AE", [])[0] * summe_ausschleuselement,2), + round(self._Zusatzbauteile.get("Fuehrung_an_AE", [])[1] * summe_ausschleuselement,2)] + self._Summen["Halter_Gegenleiste_an_AE"] = [round(self._Zusatzbauteile.get("Halter_Gegenleiste_an_AE", [])[0] * summe_ausschleuselement,2), + round(self._Zusatzbauteile.get("Halter_Gegenleiste_an_AE", [])[1] * summe_ausschleuselement,2)] + self._Summen["Aluwinkel_40x20"] = [round(self._Zusatzbauteile.get("Aluwinkel_40x20", [])[0] * summe_ausschleuselement,2), + round(self._Zusatzbauteile.get("Aluwinkel_40x20", [])[1] * summe_ausschleuselement,2)] + self._Summen["Halter_Gegenleiste_an_EE"] = [round(self._Zusatzbauteile.get("Halter_Gegenleiste_an_EE", [])[0] * summe_ausschleuselement,2), + round(self._Zusatzbauteile.get("Halter_Gegenleiste_an_EE", [])[1] * summe_ausschleuselement,2)] + self._Summen["Alu_4kt_20x20"] = [round(self._Zusatzbauteile.get("Alu_4kt_20x20", [])[0] * summe_ausschleuselement, 2), + round(self._Zusatzbauteile.get("Alu_4kt_20x20", [])[1] * summe_ausschleuselement, 2)] + + self._Summen["Rollenandruckleiste_Sep_LP"] = [round(self._Zusatzbauteile.get("Rollenandruckleiste_Sep_LP", [])[0] * summe_sepLP_scanner * 0.2,2), #TODO: warum mit 0.2 multipliziert? + round(self._Zusatzbauteile.get("Rollenandruckleiste_Sep_LP", [])[1] * summe_sepLP_scanner * 0.2,2)] + self._Summen["Abhebeleiste_Sep_LP"] = [round(self._Zusatzbauteile.get("Abhebeleiste_Sep_LP", [])[0] * summe_sepLP_scanner * 0.2,2), + round(self._Zusatzbauteile.get("Abhebeleiste_Sep_LP", [])[1] * summe_sepLP_scanner * 0.2,2)] + self._Summen["Zwangsfuehrung_Sep_SP"] = [round(self._Zusatzbauteile.get("Zwangsfuehrung_Sep_SP", [])[0] * summe_sepSP * 0.5, 2), + round(self._Zusatzbauteile.get("Zwangsfuehrung_Sep_SP", [])[1] * summe_sepSP * 0.5, 2)] + + print(self._Summen) + + +class Deckblatt(): + def __init__(self, bereiche:type[list[Bereich]], taschentransport=False): + #zusatzbauteile/Aufwand wenn Taschen im System laufen + if(taschentransport): + i=0 + #Summe aller Baugruppen über alle Bereiche + self._Baugruppensummen = {} + for b in bereiche: + t = b.getBauteile() + t_count = Counter(t) + bgr_summen_count = Counter(self._Baugruppensummen) + sum_dict = t_count + bgr_summen_count + self._Baugruppensummen = dict(sum_dict) class BaaN(): @@ -177,6 +308,26 @@ class BaaN(): "Inkrementalgeber":[0,0,430,180], } + self._Taschen = { + #zusatzaufwand, wenn Taschen im System laufen + # [Preis, Montagezeit] + "829514073_Führg_an_AE": [22.0,1], + "829514071_Halter_Gegenl_an_AE": [0.6, 0.02], + "931011103_Alu_Winkel_40x20": [2.6, 0.02], + "829514070_Halter_Gegenl_an_EE": [2.6, 0.02], + "931601003_Alu_4_kt_20x20": [4.7, 0.1], + "829534007_Andr_Rollenl_Sep_LP": [45, 0.05], + "829534008_Abh_Leiste_vor_Sep_LP": [89, 0.5], + "829514072_Zwangsführg_an_Sep_SP": [34, 0.1], + "829514068_Verb_Schrägkr_Mitte": [6.8, 0.02], + "829514069_Verb_Schrägkr_Ende": [11.4, 0.02], + "829514061_Rampe": [57, 0.1], + "829416031_Stauprofil": [14.5, 0.05], + "LP_oben_abschneiden": [1, 0], #Arbeitsgang + #"829514075_Abstands_Band_Nop": [2.15, 0.01], #nicht mehr verwendet + #"Aufpreis_Band_noppen": [0.6, 0] #nicht mehr verwendet + } + def herstellkosten_mech(self, artikelbezeichnung): l = self._Kosten.get(artikelbezeichnung, [0,0,0,0]) return l[0] @@ -202,32 +353,31 @@ class BaaN(): return l[1] + l[3] class TestObjects(unittest.TestCase): - def test(self): - self.assertEqual(1,1) + def test(self): baan = BaaN() self.assertEqual(baan.herstellkosten_mech("ES_ELEMENT_30_F_SF_ILS"), 240) self.assertEqual(baan.montagestunden_mech("ES_ELEMENT_30_F_SF_ILS"), 180) self.assertEqual(baan.herstellkosten_el("ES_ELEMENT_30_F_SF_ILS"), 45.7) self.assertEqual(baan.montagestunden_el("ES_ELEMENT_30_F_SF_ILS"), 0) - - zufuehrung_puffer = Kreisel("Zufuehrung Richtung Puffer",2, 30, 4,4,4) - verbindung = Kreisel("Verbindung",3,4,0,0,0) - einschleusung_puffer = Kreisel("Einschleusung Puffer",6, 10, 0,2,1,True,2) - abzug_puffer = Kreisel("Abzug Puffer",6,10,1,2,2) - abzug_gesamt = Kreisel("Abzug Gesamt",2,33.5,5,3,0) + kreisel = [] + kreisel.append(Kreisel("Zufuehrung Richtung Puffer",2, 30, 4,4,4)) + kreisel.append(Kreisel("Verbindung",3,4,0,0,0)) + kreisel.append(Kreisel("Einschleusung Puffer",6, 10, 0,2,1,True,2)) + kreisel.append(Kreisel("Abzug Puffer",6,10,1,2,2)) + kreisel.append(Kreisel("Abzug Gesamt",2,33.5,5,3,0)) - umschleusung_puffer = Gefaellestrecke("Umschleusung",6, 10,2,0) + gefaellestrecken = [] + gefaellestrecken.append(Gefaellestrecke("Umschleusung",6, 10,2,0)) + gefaellestrecken.append(Gefaellestrecke("Puffer", 72, 21,2,0)) - puffer = Bereich("Puffer",[zufuehrung_puffer, verbindung, einschleusung_puffer, abzug_puffer, abzug_gesamt], [umschleusung_puffer],12, 6) + puffer = Bereich("Puffer",kreisel, gefaellestrecken,12, 6) puffer.resToFile() - #minuten in stunden umrechnen - #self.assertEqual(puffer._kreisel["mont_summe"]/60, 294) - #self.assertEqual(puffer._gefaellestrecken["mont_summe"]/60, 45.5) - #self.assertEqual(round(puffer._kreisel["hk_summe"], 1), 36501.6) - #self.assertEqual(round(puffer._gefaellestrecken["hk_summe"], 1), 6166.2) - #self.assertEqual(round(puffer._etagenfoerderer["hk_summe"], 1), 16914) - #self.assertEqual(round(puffer._etagenfoerderer["mont_summe"]/60, 1), 84.0) + + dblatt = Deckblatt([puffer, puffer]) + taschen = Taschen(dblatt._Baugruppensummen) + +