from PyQt5.QtWidgets import QApplication, QDialog, QFileDialog from PyQt5.uic import loadUi import sys from pathlib import Path import pandas as pd from icecream import ic import numpy as np class MainUI(QDialog): # erbt von QDialog def __init__(self): #super (MainUI, self).__init__() #Aufrufen des Konstruktors von QDialog super().__init__() loadUi ("Aufbaumaster2CSV.ui", self) self.filename = None self.path = None self.df_vte = None self.df_cmdb = None self.dfb = None self.openBtn.clicked.connect(self.open_file_dialog) self.saveBtn.clicked.connect(self.save_file_dialog) self.filter = "Hostnamen" self.group = None self.typ = None def changegroup(self): self.group = self.gruppierung.currentText() # ic("Gruppen: ", self.group) def changegtyp(self): self.typ = self.geraetetyp.currentText() # ic("Typ: ", self.typ) def open_file_dialog(self): self.filename, _ = QFileDialog.getOpenFileName( self, "Aufbaumaster", "\\Volumes\\Daten01\\Documents\\toCSV", "Images (*.xls *.xlsx *.xlsb)" ) # self.filename_edit.setPixmap(QPixmap(self.filename)) self.lblCMDBPath.setText(self.filename) if self.filename: self.path = Path(self.filename) #self.changetable() self.collectdata() def onClicked(self): pass def collectdata(self): # Einlesen der Sheets self.df_vte = pd.read_excel(self.filename,header=7,na_filter=False,sheet_name="VTE-Input",engine='pyxlsb',usecols=['Hostname','Gruppierung','CONFIG-ID','CMDB Status']) #print(self.df_vte.head) self.df_cmdb = pd.read_excel(self.filename,header=2,sheet_name="CMDB", engine='pyxlsb') #self.df_sw_asset = pd.read_excel(self.filename,sheet_name="SW-Asset", engine='pyxlsb') # Nach relevanten Spalten filtern self.df_vte = self.df_vte[self.df_vte['Gruppierung']=='Grundgerät'] #self.df_vte = self.df_vte.drop(columns=['RAM','Bestelldatum','Hersteller','Lieferant','SAP-Nr.','Lieferdatum','Lieferschein-Nr.','WV-Start','WV-Ende','Aufgaben Schritt','Verkehrsart','Anz.\nHE ']) self.df_cmdb = self.df_cmdb[self.df_cmdb['Filter'].isin(['Grundgerät','Erweiterung'])] self.df_cmdb = self.df_cmdb.drop(columns=['WV-Start','WV-Ende','CMDB-Status','Aufgabe Schritt','Filter','Waermeabgabe [BTU/h]','kalk. Strom [A]']) # Einfügen von Spalten in die CMDB-Tabelle self.dfb = self.df_vte.merge(self.df_cmdb, on=['Hostname'], how='left') # Spalte für Mandanten Kontaktzuweisung self.dfb.insert(loc=7, column='Mandanten Kontaktzuweisung', value='Mandant') # Spalte für Segmente self.dfb.insert(loc=8, column='Segment', value='') # Spalte für Domains self.dfb.insert(loc=9, column='Domain', value='') # Spalte einfügen für HE self.dfb.insert(loc=14, column='HE', value='') # Einschub self.dfb.insert(loc=15, column='Einschub', value='') # Montage --> nur horizontal self.dfb.insert(loc=16, column='Montage', value='horizontal') # Formfaktor self.dfb.insert(loc=17, column='Formfaktor', value='19"') # Masseinheit self.dfb.insert(loc=18, column='Masseinheit', value='Zoll') # Führende Leerzeichen in allen Spalten entfernen self.dfb = self.dfb.apply(lambda x: x.str.lstrip() if x.dtype == "object" else x) self.dfb = self.dfb.apply(self.prüfe_und_setze_wert, axis=1) # Setzen von int für HE und Anz. HE self.dfb['HE'] = self.dfb['HE'].apply(lambda x: x if pd.isnull(x) else str(int(x))) self.dfb['belegte\nHE'] = self.dfb['belegte\nHE'].apply(lambda x: x if pd.isnull(x) else str(int(x))) def prüfe_und_setze_wert(self, zeile): ic(zeile) # Fehlerbereinigung if zeile['ID\nStandort'] not in ("Ber-PS","Bon-BTW"): print("Kein Standort P40 oder BTW") sys.exit(0) else: if len((zeile['Montageort'][8:13])) !=2: zeile['HE'] = zeile['Montageort'][8:10] zeile['Montageort'] = zeile['Montageort'][0:7] else: zeile['HE'] = zeile['Montageort'][8:10] zeile['Montageort'] = zeile['Montageort'][0:7] # TODO: # Einschub vorn/hinten einbauen if zeile['Hersteller'].lower() == "cisco": zeile['Hersteller'] = "Cisco Systems" elif zeile['Hersteller'].lower() == "genua": zeile['Hersteller'] = "genua GmbH" elif zeile['Hersteller'].lower() == "digi": zeile['Hersteller'] = "Digi International Inc." else: pass ################################################################ if zeile['Hostname'][4:6] == "10": zeile['ID\nMandanten'] = 'm10 CMP Plattform / iM.0 / iM.4 / PAP sIMCP' if zeile['Hostname'][4:8] == "1011": zeile['Domain'] = 'im0.t-cmp.de' elif zeile['Hostname'][4:8] == "1015": zeile['Domain'] = 'im4.t-cmp.de' else: zeile['Domain'] = 'mgmt.t-cmp.de' elif zeile['Hostname'][4:6] == "19": zeile['ID\nMandanten'] = 'm19 Testumgebung' if zeile['Hostname'][4:8].isin("1920","1921"): zeile['Domain'] = 'm19.t-cmp.de' else: zeile['Domain'] = 'm193.t-cmp.de' elif zeile['Hostname'][4:6] == "20": zeile['ID\nMandanten'] = 'm20 iM.1 Interner Mandant (Schutzbedarf sehr hoch)' zeile['Domain'] = 'im1.t-cmp.de' elif zeile['Hostname'][4:6] == "21": zeile['ID\nMandanten'] = 'm21 iM.2 Interner Mandant (Schutzbedarf normal)' zeile['Domain'] = 'im2.t-cmp.de' elif zeile['Hostname'][4:6] == "22": zeile['ID\nMandanten'] = 'm22 iM.3 Interner Mandant (Schutzbedarf hoch)' zeile['Domain'] = 'im3.t-cmp.de' elif zeile['Hostname'][4:6] == "50": zeile['ID\nMandanten'] = 'm50 sEMCP.Instanz-1 (CMP Zentral)' zeile['Domain'] = 'm50.t-cmp.de' elif zeile['Hostname'][4:6] == "51": zeile['ID\nMandanten'] = 'm51 Classified OPS' zeile['Domain'] = 'm51.t-cmp.de' elif zeile['Hostname'][4:6] == "73": zeile['ID\nMandanten'] = 'm73 FWP Lüftersteuerung' zeile['Domain'] = 'm73.t-cmp.de' elif zeile['Hostname'][4:6] == "75": zeile['ID\nMandanten'] = 'm75 Fawkes' zeile['Domain'] = 'm75.t-cmp.de' elif zeile['Hostname'][4:6] == "76": zeile['ID\nMandanten'] = 'm76 Demo' zeile['Domain'] = 'm76.t-cmp.de' elif zeile['Hostname'][4:6] == "77": zeile['ID\nMandanten'] = 'm77 Fritz54' zeile['Domain'] = 'm77.t-cmp.de' elif zeile['Hostname'][4:6] == "78": zeile['ID\nMandanten'] = 'm78 ITZBund mSBC' zeile['Domain'] = 'm78.t-cmp.de' elif zeile['Hostname'][4:6] == "79": zeile['ID\nMandanten'] = 'm79 BOS-Spur' zeile['Domain'] = 'm79.t-cmp.de' elif zeile['Hostname'][4:6] == "99": zeile['ID\nMandanten'] = 'm99 Releasemanagement' elif zeile['Hostname'][4:6] == "80": zeile['ID\nMandanten'] = 'm80 ACDC' zeile['Domain'] = 'm80.t-cmp.de' ################################################################ if zeile['Hostname'][6:8] == "00": zeile['Segment'] = 'm10 mgmt CMP Core' elif zeile['Hostname'][6:8] == "01": zeile['Segment'] = 'm10 mgmt Infrastructure' elif zeile['Hostname'][6:8] == "02": zeile['Segment'] = 'm10 mgmt Administration' elif zeile['Hostname'][6:8] == "03": zeile['Segment'] = 'm10 mgmt zLightsOut' elif zeile['Hostname'][6:8] == "04": zeile['Segment'] = 'm10 CTS' elif zeile['Hostname'][6:8] == "05": zeile['Segment'] = 'm10-OSS' elif zeile['Hostname'][6:8] == "10": zeile['Segment'] = 'm10 CMP2sIM' elif zeile['Hostname'][6:8] == "11": zeile['Segment'] = 'm10 Intern-CMP iM0' elif zeile['Hostname'][6:8] == "12": zeile['Segment'] = 'm20 iM.1 Interner Mandant 1 (SB sehr hoch)' elif zeile['Hostname'][6:8] == "13": zeile['Segment'] = 'm21 iM.2 Interner Mandant 2 (SB normal)' elif zeile['Hostname'][6:8] == "14": zeile['Segment'] = 'm22 iM.3 Interner Mandant 3 (SB hoch)' elif zeile['Hostname'][6:8] == "15": zeile['Segment'] = 'm10 iM.4 Interner Mandant 4 (CNMS2CMP)' elif zeile['Hostname'][6:8] == "20": zeile['Segment'] = 'VRD-Plattform (PAP-Anbindung)' elif zeile['Hostname'][6:8] == "21": zeile['Segment'] = 'VRD-Plattform (LightsOut + Basisinfrastruktur + Cache)' elif zeile['Hostname'][6:8] == "22": zeile['Segment'] = 'VRD-Plattform (Admin)' elif zeile['Hostname'][6:8] == "23": zeile['Segment'] = 'VRD-Plattform (Basisinfrastruktur Mandant zentral)' elif zeile['Hostname'][6:8] == "24": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "25": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "26": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "27": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "28": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "29": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "30": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "31": zeile['Segment'] = 'VRD-Mandant (Infrastruktur)' elif zeile['Hostname'][6:8] == "32": zeile['Segment'] = 'VRD-Mandant (Admin)' elif zeile['Hostname'][6:8] == "33": zeile['Segment'] = 'VRD-Mandant (Anbindung)' elif zeile['Hostname'][6:8] == "34": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "35": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "36": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "37": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "38": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "39": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "40": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "41": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "42": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "43": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "44": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "45": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "46": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "47": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "48": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "49": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "50": zeile['Segment'] = 'Spare' elif zeile['Hostname'][6:8] == "51": zeile['Segment'] = 'VRD-Mandant (Kundensegment Infra)' elif zeile['Hostname'][6:8] == "52": zeile['Segment'] = 'VRD-Mandant (Kundensegment Admin)' elif zeile['Hostname'][6:8] == "53": zeile['Segment'] = 'VRD-Mandant (Kundensegment)' elif zeile['Hostname'][6:8] == "b0": zeile['Segment'] = 'mgmt BS Übergang zum CMP Core' elif zeile['Hostname'][6:8] == "ba": zeile['Segment'] = 'mgmt BS Bon BTW' elif zeile['Hostname'][6:8] == "bb": zeile['Segment'] = 'mgmt BS Bon LRS' elif zeile['Hostname'][6:8] == "bc": zeile['Segment'] = 'mgmt BS Ber W55' elif zeile['Hostname'][6:8] == "bd": zeile['Segment'] = 'mgmt BS Ber PS' elif zeile['Hostname'][6:8] == "be": zeile['Segment'] = 'mgmt BS Ber NDA' elif zeile['Hostname'][6:8] == "bf": zeile['Segment'] = 'mgmt BS HanTMX' elif zeile['Hostname'][6:8] == "bg": zeile['Segment'] = 'mgmt BS Ber DS' elif zeile['Hostname'][6:8] == "c0": zeile['Segment'] = 'mgmt CMP Übergang Internet' elif zeile['Hostname'][6:8] == "x1": zeile['Segment'] = 'm10 SecA2sIM' ################################################################ # Genucenter - # HW Appliance - # Kryptierer - # Medienkonverter # Paketfilter / ALG - # Router - C__OBJTYPE__ROUTER # Server -- # SFP - C__OBJTYPE__SD_SFP - # Speichersystem C__OBJTYPE__SAN - # Storage C__OBJTYPE__SAN - # Switch C__OBJTYPE__SWITCH - # virtuelle Maschine Objekttyp = C__OBJTYPE__VIRTUAL_SERVER # Terminalserver Objekttyp = C__OBJTYPE__TERMINALSERVER - # wenn vho dann Objekttyp = C__OBJTYPE__VIRTUAL_HOST - if zeile['Objekttyp (CMDB)'] == 'Genucenter': zeile['Objekttyp (CMDB)'] = 'C__OBJTYPE__APPLIANCE' elif zeile['Objekttyp (CMDB)'] == 'HW Appliance': zeile['Objekttyp (CMDB)'] = 'C__OBJTYPE__APPLIANCE' elif zeile['Objekttyp (CMDB)'] == 'Paketfilter / ALG': zeile['Objekttyp (CMDB)'] = 'C__OBJTYPE__APPLIANCE' elif zeile['Objekttyp (CMDB)'] == 'Kryptierer': zeile['Objekttyp (CMDB)'] = 'C__OBJTYPE__SD_KRYPTIERER' elif zeile['Objekttyp (CMDB)'] == 'Server': zeile['Objekttyp (CMDB)'] = 'C__OBJTYPE__SERVER' elif zeile['Objekttyp (CMDB)'] == 'Switch': zeile['Objekttyp (CMDB)'] = 'C__OBJTYPE__SWITCH' elif zeile['Objekttyp (CMDB)'] == 'virtuelle Maschine': zeile['Objekttyp (CMDB)'] = 'C__OBJTYPE__VIRTUAL_SERVER' elif zeile['Objekttyp (CMDB)'] == 'Terminalserver': zeile['Objekttyp (CMDB)'] = 'C__OBJTYPE__TERMINALSERVER' elif zeile['Objekttyp (CMDB)'] == 'Storage': zeile['Objekttyp (CMDB)'] = 'C__OBJTYPE__SAN' elif zeile['Objekttyp (CMDB)'] == 'SFP': zeile['Objekttyp (CMDB)'] = 'C__OBJTYPE__SD_SFP' elif zeile['Objekttyp (CMDB)'] == 'Speichersystem': zeile['Objekttyp (CMDB)'] = 'C__OBJTYPE__SAN' elif zeile['Objekttyp (CMDB)'] == 'Router': zeile['Objekttyp (CMDB)'] = 'C__OBJTYPE__ROUTER' if zeile['Hostname'][1:3] == "vho": zeile['Objekttyp (CMDB)'] = 'C__OBJTYPE__VIRTUAL_HOST' ################################################################ # Einschub if zeile['Montageort'][-1].isin('v', 'h'): zeile['Einschub'] = zeile['Montageort'][-1] ################################################################ return zeile def save_file_dialog(self): ic(self.dfb) options = QFileDialog.Options() options |= QFileDialog.DontUseNativeDialog self.savefilename, _ = QFileDialog.getSaveFileName(self, "Save File", "", "CSV(*.csv);;CSV Files(*.csv)", options = options) self.dfb.to_csv(self.savefilename, index=None, header=True, encoding='utf-8') print("Datei wurde gespeichert:", self.savefilename) if __name__ == "__main__" : app = QApplication (sys.argv) ui = MainUI() ui.show() app.exec_()