From 66aa17a470ce330df6fa7a70e657e9546a0ba144 Mon Sep 17 00:00:00 2001 From: mistangl Date: Tue, 20 Jun 2023 16:06:34 +0200 Subject: [PATCH] Ergebnisse mit mehreren Tabs rausgeschrieben --- lib/calc_site.py | 212 ++++++++++++++++++++++++++++++++++++++++++-- lib/rieter_ekalk.py | 5 +- 2 files changed, 211 insertions(+), 6 deletions(-) diff --git a/lib/calc_site.py b/lib/calc_site.py index 138d289..0d93965 100644 --- a/lib/calc_site.py +++ b/lib/calc_site.py @@ -5,6 +5,189 @@ import os import configparser +order_dienstleistungen = [ +"Pflichtenheft_Autom_Schnittstellen", + +"Erstellung_Steuerungslayout", +"Schaltplanerstellung_incl_Korrekturen", +"Projektkoordination", +"Materialdispo", +"Abstimmung_mit_E_Werkstatt", +"Erstellen_E_Montageunterlagen", + +"PC_Installation", +"Oberfläche_Simulation", +"SPS_Test_im_Haus_Simulation", +"Bedienerhandbuch", +"SPS_Doku", +"PC_Doku", +"Summe_Dienstleistungen_Hardwareplanung", + +"Schaltschrankbau", +"Unterverteilerbau", +"Klemmkastenbau_je_2h", +"Bedientableaubau", +"Vormontage_im_Haus", +"Summe_Dienstleistungen_Elektrowerkstatt", + +"Summe_Dienstleistungen_in_LL", +] +order_ergebnisse = [ +"E_Werkstatt", +"Schaltschrankbau_extern_Mehrkosten", +"Dienstleistung_in_LL", +"Pflichtenheft", +"SPS_Programmierung", +"PC_Programmierung_Visualisierung", +"Montage_elektrisch", +"Inbetriebnahmetest_Hardware_durch_Montage", +"SPS_Inbetriebsetzung", +"PC_Inbetriebsetzung", +"Inbetriebnahmeunterstützung_durch_Montage", +"Dokumentation", +"Bedienungsanleitung_Emmert", +"Schulung_vor_Ort_beim_Kunden", +"Abnahme", +"SPS_Anlagenbetreuung", +"PC_Anlagenbetreuung", +"Anlagenbetreuung_durch_Montage", +"GESAMT", +] +order_hardware = [ +"schaltschrankgehaeuse_b1x1200_zubehoer", +"schaltschrankgehaeuse_b2x800_zubehoer", +"schaltschrankgehaeuse_b1x1200+1x800_zubehoer", +"sps_simatic_s7_cpu315_2_pn_dp", +"speicherkarte_fuer_sps_512_kb", +"sps_simatic_s7_cpu317_2_pn_dp", +"speicherkarte_fuer_sps2_mb", +"sps_simatic_s7_1515_2", +"sps_simatic_s7_1517_3", +"sps_simatic_s7_1518_4", +"sps_et200_1512sp", +"memory_card_2_gb", +"et200_sp_ea_ebene", +"netzwerk_fernwartung", +"abgang_400v", +"abgang_24_v", +"anlagenrechner", +"anlagenrechner_ohne_bildschirm", +"pulteinbau_monitor_srline_rflat_24fhd", +"kurzhubtastatur_kbt06_mit_touchpad_uslayout", +"netzwerk_display_adapter_lindy", +"zusaetzlicher_bildschirm", +"schaltschrank", +"unterverteiler_fuer_1neuenhauser_pm", +"unterverteiler_fuer_1flyer", +"unterverteiler_fuer_2flyer", +"unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", +"unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", +"unterverteiler_fuer_puffer", +"unterverteiler_fuer_5_rsm_fa", +"korrektur_5_rsm_zusaetzlich_im_unterverteiler", +"unterverteiler_fuer_10_rsm_fa", +"korrektur_10_rsm_zusaetzlich_im_unterverteiler", +"unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", +"korrektur_3_rsm_zusaetzlich_im_unterverteiler", +"unterverteiler_fuer_4_rsm_direct", +"korrektur_4_rsm_zusaetzlich_im_unterverteiler", +"unterverteiler_fuer_12_rsm_direct", +"korrektur_12_rsm_zusaetzlich_im_unterverteiler", +"unterverteiler_fuer_8_rsm_direct", +"korrektur_8_rsm_direct_zusaetzlich_im_unterverteiler", +"busverteiler_6_rsm_direct", +"korrektur_6_rsm_zusaetzlich_im_busverteiler", +"busverteiler_8_rsm_direct", +"korrektur_8_rsm_zusaetzlich_im_busverteiler", +"antrieb_unidirektional_halbleiter", +"antrieb_bidirektional_halbleiter", +"antrieb_unidirektional_schuetz", +"antrieb_bidirektional_schuetz", +"motorschutzschalter", +"wendeschuetzschaltung", +"frequenzumrichter", +"bedienstation_1fach_kpl", +"bedienst_2fach_wechs_bcd_10f", +"bedienstation_2fach_kpl", +"halter_bedientableau_2fach", +"bedienstation_3fach_kpl", +"halter_bedientableau_3fach", +"bedienstation_4fach_kpl", +"halter_bedientableau_4fach", +"bedienstation_6fach_kpl", +"halter_bedienstation_6fach", +"drucktaster_automatische_umfahrung", +"halter_fuer_drucktaster", +"ET200_SP", +"et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45", +"korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45", +"et200_sp_eingangskarte_8_de", +"korrektur_et200_sp_eingangskarte_8_de", +"et200_sp_eingangskarte_16_de", +"et200_sp_eingangskarte_8_do", +"korrektur_et200_sp_eingangskarte_8_do", +"et200_sp_eingangskarte_16_do", +"et200_sp_base_unit_neue_last_mit_potKlemmen", +"korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen", +"et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen", +"et200_sp_base_unit_neue_last", +"korrektur_et200_sp_base_unit_neue_last", +"et200_sp_base_unit_links_gebrueckt", +"korrektur_et200_sp_base_unit_links_gebrueckt", +"SLIO", +"et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO", +"korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO", +"slio_eingangskarte_4_de", +"korrektur_slio_eingangskarte_4_de", +"slio_eingangskarte_8_de", +"korrektur_slio_eingangskarte_8_de", +"slio_ausgangskarte_4_do", +"korrektur_slio_ausgangskarte_4_do", +"slio_ausgangskarte_8_do", +"korrektur_slio_ausgangskarte_8_do", +"slio_power_modul", +"korrektur_slio_power_modul", +"slio_4_x_dc_24v_4_x_dc_0v", +"korrektur_slio_4_x_dc_24v_4_x_dc_0v", +"slio_8_x_dc_24v", +"slio_8_x_dc_0v", +"korrektur_slio_8_x_dc_0v", +"movimot_fu_mit_anschaltung", +"sensor_optisch_traverse", +"sensorhalter_ohne_sensor", +"reflexionslichtschranke_rsm_direct", +"stoppersensor_induktiv_mit_halter", +"sensor_spulenpruefung_voll_leer", +"seilzugschalter", +"seil_fuer_seilzugschalter", +"blitzleuchte", +"spulenumsetzstation", +"sensorkabel_je_20m", +"stopper_weichenkabel_je_5m", +"motorkabel_je_30m", +"kabelpritschen_leitern_200_60", +"kabelpritsche_rsm_100_60", +"kabelpritsche_rsm_50_35", +"klemmkasten_rsm", +"klemmkasten_direct_in_rsm", +"erdung", +"kleinteile_rohre_schellen_kabelbinder_ect", +"kabel_fuer_klemmkasten_und_bts_60m", +"kabel_fuer_1fach_bts_zug_wechseln", +"zuleitung_75_m_unterverteiler_4x4mm2_400vac", +"zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", +"korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", +"zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", +"korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", +"zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm", +"zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm", +"profinetkabel", +"korrektur_profinetkabel", +"schnittstellen_8x1mm2_30m", +"Summe_Landsberg", +"Summe_vorOrt", +"Summe_gesamt", +] class cfg(): """ Liest die config-Datei ein, in der Stückpreise und Zeiteinheiten pro Bauteil wie in der rieter_ekalk Excel-Datei verwendet angegeben sind, und schreibt sie in ein Dictionary. @@ -108,6 +291,14 @@ def run_calc(infile, outfile, SivasConfig): hw = rek.HW(hwep, hwhp, hwzew) hw.calc(Anzahl_HW, mg, eas) + hardware = hw.get_anzahl() + hardware["Summe_vorOrt"] = hw.summe_vorort() + hardware["Summe_gesamt"] = hw.summe_gesamt() + hardware["Summe_Landsberg"] = hw.summe_in_LL() + hardware["Zeiten_Hardwareplanung"] = hw.summe_h_zeiten_hardwareplanung() + hardware["Zeiten_Unterverteiler_Werkstatt"] = hw.summe_h_unterverteiler_e_werkstatt() + df_temp = pd.DataFrame.from_dict(data=hardware, orient='index', columns=['Strück']) + df_hardware = pd.DataFrame(data=df_temp, index=order_hardware) emoz = SivasConfig.getTypedDict("Elektro-Montagezeiten") emo = rek.EMO(emoz) @@ -115,18 +306,29 @@ def run_calc(infile, outfile, SivasConfig): Anzahl_DL = infileCfg.getTypedDict("DL") dl = rek.Dienstleistung(Anzahl_DL, hw) + dienstleistung = dl.get_hours() + dienstleistung["Summe_Dienstleistungen_Hardwareplanung"] = dl.stunden_diensleistung_hardwareplanung() + dienstleistung["Summe_Dienstleistungen_Elektrowerkstatt"] = dl.stunden_elektrowerkstatt() + dienstleistung["Summe_Dienstleistungen_in_LL"] = dl.summe_stunden_dienstleistung_in_landsberg() + df_temp = pd.DataFrame.from_dict(data=dienstleistung, orient='index', columns=['Aufwand']) + df_dienst = pd.DataFrame(data=df_temp, index=order_dienstleistungen) Anzahl_Ergebnis = infileCfg.getTypedDict("Ergebnis") kph = SivasConfig.getTypedDict("Kosten pro h") erg = rek.Ergebnis(kph) erg.calc(Anzahl_Ergebnis, hw, dl, emo) - summary = erg.summary_costs(hw) - dienstleistung = dl.get_hours() + ergebnisse = erg.summary_costs(hw) + df_temp = pd.DataFrame.from_dict(data=ergebnisse, orient='index', columns=['Aufwand']) + df_aufwand = pd.DataFrame(data=df_temp, index=order_ergebnisse) - df = pd.DataFrame.from_dict(data=summary, orient='index', columns=['Aufwand']) - #df = pd.DataFrame.from_dict(data=dienstleistung, orient='index', columns=['Dienstleistunge']) - df.to_excel(outfile, sheet_name="Kostenaufstellung") + + #df = pd.DataFrame.from_dict(data=dienstleistung, orient='index', columns=['Dienstleistungen']) + + with pd.ExcelWriter(outfile) as writer: + df_aufwand.to_excel(writer, sheet_name='Kostenaufstellung') + df_hardware.to_excel(writer, sheet_name='Hardware') + df_dienst.to_excel(writer, sheet_name='Dienstleistungen') if __name__ == '__main__': diff --git a/lib/rieter_ekalk.py b/lib/rieter_ekalk.py index 8cf96a7..2e2a0e6 100644 --- a/lib/rieter_ekalk.py +++ b/lib/rieter_ekalk.py @@ -2033,7 +2033,7 @@ class HW(): del self._anzahl[item] # with open('HW_Daten.txt', 'w') as convert_file: # convert_file.write(json.dumps(self._anzahl)) - + def __repr__(self): return repr(self._anzahl) @@ -2048,6 +2048,9 @@ class HW(): def anzahl(self, partname, default_val = 0): return self._anzahl.get(partname, default_val) + def get_anzahl(self): + return self._anzahl + def summe_gesamt(self): """ :return: price sum of all given items within self._anzahl