378 lines
14 KiB
Python
Executable File
378 lines
14 KiB
Python
Executable File
#!/usr/bin/python3
|
|
|
|
import sys, os
|
|
sys.path.append (".")
|
|
from time import time, strftime, sleep
|
|
from datetime import datetime
|
|
import pytz
|
|
from states import *
|
|
from parts import artikelnummer
|
|
|
|
|
|
def isotonav (isostr):
|
|
if isostr != '':
|
|
try:
|
|
dt = datetime.strptime (isostr, '%Y-%m-%d %H:%M:%S')
|
|
dtl = dt.replace (tzinfo = pytz.utc).astimezone( pytz.timezone ('Europe/Berlin'))
|
|
return dtl.strftime ('%d.%m.%Y %H:%M:%S')
|
|
except:
|
|
return ''
|
|
return ''
|
|
|
|
|
|
class NAV:
|
|
def __init__ (self, *dummy, **args):
|
|
"""
|
|
Initialize a new Navision exporter
|
|
"""
|
|
self.path = args.get ("path", "/srv/navision/")
|
|
self.time = time ()
|
|
self.dbcon = args.get ("db", None)
|
|
|
|
def createcsv(self, dmc):
|
|
"""
|
|
create CSV for BDE Data
|
|
"""
|
|
csvdata = ['']*155
|
|
csvheader = ['']*155
|
|
#1st check for BDE date
|
|
bdefield = ['dmc', 'startts', 'endts', 'ladungstraeger', 'seriennr', 'variante', 'pruefzelle1', 'putzzelle', 'chiron', 'blindniet', 'bajonettclip', 'cclip', 'masseblech', 'pruefzelle2', 'nacharbeit', 'csv']
|
|
ret = self.dbcon.getbde (dmc)
|
|
if not len (ret):
|
|
print ("No BDE Data")
|
|
raise Warning
|
|
bdedata = {}
|
|
for i in range (len (bdefield)):
|
|
bdedata [bdefield [i]] = ret[0][i]
|
|
|
|
#1 ID
|
|
csvheader [0] = 'ID'
|
|
#2 DMC
|
|
csvheader [1] = 'BMWDMC'
|
|
csvdata [1] = bdedata ['dmc']
|
|
#3 FINOBADMC
|
|
csvheader [2] = 'FINOBADMC'
|
|
csvdata [2] = artikelnummer.get (bdedata ['variante'], '')
|
|
#4 Typ
|
|
csvheader [3] = 'Typ'
|
|
csvdata [3] = bdedata ['variante']
|
|
#5 Zeitstempel Start
|
|
csvheader [4] = 'Zeitstempel_Start'
|
|
csvdata [4] = isotonav (bdedata ['startts'])
|
|
#6 Zeitstempel Ende
|
|
csvheader [5] = 'Zeitstempel_Ende'
|
|
csvdata [5] = isotonav (bdedata ['endts'])
|
|
#7 Seriennummer
|
|
csvheader [6] = 'Seriennummer'
|
|
csvdata [6] = bdedata ['seriennr']
|
|
#8 Ladungstraeger
|
|
csvheader [7] = 'Ladungstraeger'
|
|
csvdata [7] = bdedata ['ladungstraeger']
|
|
#9 Status BMW DMC FixMe muss imer i.O. sein eigtl.
|
|
csvheader [8] = 'Status_BMW_DMC'
|
|
csvdata [8] = 'i.o durchlaufen'
|
|
#10 Status Finoba DMC FixMe gibts nimma
|
|
csvheader [9] = 'Status_Finoba_DMC'
|
|
csvdata [9] = 'nicht durchlaufen'
|
|
|
|
#11 Status Pruefzelle 1
|
|
csvheader [10] = 'Pruefzelle_1_Status'
|
|
csvheader [96] = 'Pruefzelle_1_Start'
|
|
csvheader [97] = 'Pruefzelle_1_Ende'
|
|
for i in range (40):
|
|
csvheader [114 + i] = 'Pruefzelle_1_PP%02d' % (i + 1)
|
|
csvdata [10] = bauteilstatusNav [bdedata ['pruefzelle1']]
|
|
if bdedata ['pruefzelle1'] in ['i.O.', 'n.i.O.']:
|
|
pz1field = ['dmc', 'startts', 'endts', 'pp01', 'pp02', 'pp03', 'pp04', 'pp05', 'pp06', 'pp07', 'pp08', 'pp09', 'pp10', 'pp11', 'pp12', 'pp13', 'pp14', 'pp15', 'pp16', 'pp17', 'pp18', 'pp19', 'pp20', 'pp21', 'pp22', 'pp23', 'pp24', 'pp25', 'pp26', 'pp27', 'pp28', 'pp29', 'pp30', 'pp31', 'pp32', 'pp33', 'pp34', 'pp35', 'pp36', 'pp37', 'pp38', 'pp39', 'pp40']
|
|
ret = self.dbcon.getpruefzelle1 (dmc)
|
|
if not len (ret):
|
|
print ("No Pruefzelle1 Data")
|
|
raise Warning
|
|
else:
|
|
pz1data = {}
|
|
for i in range (len (pz1field)):
|
|
pz1data [pz1field [i]] = ret[0][i]
|
|
|
|
#97 PZ1 Zeitstempel Start
|
|
csvdata [96] = isotonav (pz1data ['startts'])
|
|
#98 PZ1 Zeitstempel Ende
|
|
csvdata [97] = isotonav (pz1data ['endts'])
|
|
#115 - 154
|
|
for i in range (40):
|
|
csvdata [114 + i] = bearbeitungstatusNav [pz1data ['pp%02d' % (i + 1)]]
|
|
|
|
del pz1field
|
|
del pz1data
|
|
|
|
|
|
#12 Status Putzzelle
|
|
csvheader [11] = 'Putzzelle_Status'
|
|
csvheader [98] = 'Putzzelle_Aufnahme'
|
|
csvheader [99] = 'Putzzelle_Start'
|
|
csvheader [100] = 'Putzzelle_Ende'
|
|
csvdata [11] = bauteilstatusNav [bdedata ['putzzelle']]
|
|
if bdedata ['putzzelle'] in ['i.O.', 'n.i.O.']:
|
|
pufield = ['dmc', 'startts', 'endts', 'aufnahme']
|
|
ret = self.dbcon.getputzzelle (dmc)
|
|
if not len (ret):
|
|
print ("No Putzzelle Data")
|
|
raise Warning
|
|
else:
|
|
pudata = {}
|
|
for i in range (len (pufield)):
|
|
pudata [pufield [i]] = ret[0][i]
|
|
|
|
#99 Putzzelle Aufnahme
|
|
csvdata [98] = pudata ['aufnahme']
|
|
#100 Putzzelle Zeitstempel Start
|
|
csvdata [99] = isotonav (pudata ['startts'])
|
|
#101 Putzzelle Zeitstempel Ende
|
|
csvdata [100] = isotonav (pudata ['endts'])
|
|
|
|
del pufield
|
|
del pudata
|
|
|
|
|
|
#13 Chiron Status
|
|
csvheader [12] = 'Chiron_Status'
|
|
csvheader [101] = 'Chiron_Anlage'
|
|
csvheader [102] = 'Chiron_Start'
|
|
csvheader [103] = 'Chiron_Ende'
|
|
csvdata [12] = bauteilstatusNav [bdedata ['chiron']]
|
|
if bdedata ['chiron'] in ['i.O.', 'n.i.O.']:
|
|
chfield = ['dmc', 'startts', 'endts', 'chiron']
|
|
ret = self.dbcon.getchiron (dmc)
|
|
if not len (ret):
|
|
print ("No Chiron Data")
|
|
raise Warning
|
|
else:
|
|
chdata = {}
|
|
for i in range (len (chfield)):
|
|
chdata [chfield [i]] = ret[0][i]
|
|
|
|
#102 Chiron 1 oder 2
|
|
csvdata [101] = chdata ['chiron']
|
|
#103 Chiron Zeitstempel Start
|
|
csvdata [102] = isotonav (chdata ['startts'])
|
|
#104 Chiron Zeitstempel Ende
|
|
csvdata [103] = isotonav (chdata ['endts'])
|
|
|
|
del chfield
|
|
del chdata
|
|
|
|
|
|
#14 Blindniet Status
|
|
csvheader [13] = 'Blindniet_Status'
|
|
csvheader [104] = 'Blindniet_Start'
|
|
csvheader [105] = 'Blindniet_Ende'
|
|
for i in range (2):
|
|
csvheader [20 + i] = 'Blindniet_Status_Rifbolt_M8_%d' % (i + 1)
|
|
csvheader [58 + i * 2] = 'Blindniet_Rifbolt_M8_%d_Kraft' % (i + 1)
|
|
csvheader [59 + i * 2] = 'Blindniet_Rifbolt_M8_%d_Weg' % (i + 1)
|
|
for i in range (4):
|
|
csvheader [22 + i] = 'Blindniet_Status_Bolzen_%d' % (i + 1)
|
|
csvheader [62 + i * 4] = 'Blindniet_Bolzen_%d_Moment' % (i + 1)
|
|
csvheader [63 + i * 4] = 'Blindniet_Bolzen_%d_Tiefe' % (i + 1)
|
|
csvheader [64 + i * 4] = 'Blindniet_Bolzen_%d_Winkel' % (i + 1)
|
|
csvheader [65 + i * 4] = 'Blindniet_Bolzen_%d_Zeit' % (i + 1)
|
|
for i in range (5):
|
|
csvheader [26 + i] = 'Blindniet_Status_Rifbolt_M6_%d' % (i + 1)
|
|
csvheader [78 + i * 2] = 'Blindniet_Rifbolt_M6_%d_Kraft' % (i + 1)
|
|
csvheader [79 + i * 2] = 'Blindniet_Rifbolt_M6_%d_Weg' % (i + 1)
|
|
|
|
csvdata [13] = bauteilstatusNav [bdedata ['blindniet']]
|
|
if bdedata ['blindniet'] in ['i.O.', 'n.i.O.']:
|
|
bnfield = ['dmc', 'startts', 'endts', 'DGBM8status01', 'DGBM8status02', 'DGBM8status03', 'DGBM8status04', 'NietM8status01', 'NietM8status02', 'NietM6status01', 'NietM6status02', 'NietM6status03', 'NietM6status04', 'NietM6status05', 'DGBM8M01', 'DGBM8D01', 'DGBM8W01', 'DGBM8T01', 'DGBM8M02', 'DGBM8D02', 'DGBM8W02', 'DGBM8T02', 'DGBM8M03', 'DGBM8D03', 'DGBM8W03', 'DGBM8T03', 'DGBM8M04', 'DGBM8D04', 'DGBM8W04', 'DGBM8T04', 'NietM8F01', 'NietM8S01', 'NietM8F02', 'NietM8S02', 'NietM6F01', 'NietM6S01', 'NietM6F02', 'NietM6S02', 'NietM6F03', 'NietM6S03', 'NietM6F04', 'NietM6S04', 'NietM6F05', 'NietM6S05']
|
|
ret = self.dbcon.getblindniet (dmc)
|
|
if not len (ret):
|
|
print ("No Blindniet Data")
|
|
raise Warning
|
|
else:
|
|
bndata = {}
|
|
for i in range (len (bnfield)):
|
|
bndata [bnfield [i]] = ret[0][i]
|
|
|
|
#105 Blindniet Zeitstempel Start
|
|
csvdata [104] = isotonav (bndata ['startts'])
|
|
#106 Blindniet Zeitstempel Ende
|
|
csvdata [105] = isotonav (bndata ['endts'])
|
|
#21-22 (d=1), 59-61 (d=2), 60-62 (d=2)
|
|
for i in range (2):
|
|
csvdata [20 + i] = bearbeitungstatusNav[bndata ['NietM8status%02d' % (i + 1)]]
|
|
csvdata [58 + i * 2] = bndata ['NietM8F%02d' % (i + 1)]
|
|
csvdata [59 + i * 2] = bndata ['NietM8S%02d' % (i + 1)]
|
|
#23-26 (d=1), 63-75 (d=2) ff
|
|
for i in range (4):
|
|
csvdata [22 + i] = bearbeitungstatusNav[bndata ['DGBM8status%02d' % (i + 1)]]
|
|
csvdata [62 + i * 4] = bndata ['DGBM8M%02d' % (i + 1)]
|
|
csvdata [63 + i * 4] = bndata ['DGBM8D%02d' % (i + 1)]
|
|
csvdata [64 + i * 4] = bndata ['DGBM8W%02d' % (i + 1)]
|
|
csvdata [65 + i * 4] = bndata ['DGBM8T%02d' % (i + 1)]
|
|
#27-31 (d=1), 79-87 (d=2), 80-88 (d=2):
|
|
for i in range (5):
|
|
csvdata [26 + i] = bearbeitungstatusNav[bndata ['NietM6status%02d' % (i + 1)]]
|
|
csvdata [78 + i * 2] = bndata ['NietM6F%02d' % (i + 1)]
|
|
csvdata [79 + i * 2] = bndata ['NietM6S%02d' % (i + 1)]
|
|
del bnfield
|
|
del bndata
|
|
|
|
#15 Status Bajonettclip
|
|
csvheader [14] = 'Bajonetclip_Status'
|
|
csvheader [106] = 'Bajonetclip_Aufnahme'
|
|
csvheader [107] = 'Bajonetclip_Start'
|
|
csvheader [108] = 'Bajonetclip_Ende'
|
|
for i in range (4):
|
|
csvheader [31 + i] = 'Bajonetclip_Status_Clip_%d' % (i + 1)
|
|
csvdata [14] = bauteilstatusNav [bdedata ['bajonettclip']]
|
|
if bdedata ['bajonettclip'] in ['i.O.', 'n.i.O.']:
|
|
bajofield = ['dmc', 'startts', 'endts', 'aufnahme', 'bajostatus01', 'bajostatus02', 'bajostatus03', 'bajostatus04']
|
|
ret = self.dbcon.getbajonettclip (dmc)
|
|
if not len (ret):
|
|
print ("No Bajonettclip Data")
|
|
raise Warning
|
|
else:
|
|
bajodata = {}
|
|
for i in range (len (bajofield)):
|
|
bajodata [bajofield [i]] = ret[0][i]
|
|
|
|
#107 Bajonettclip Zeitstempel Aufnahem
|
|
csvdata [106] = bajodata ['aufnahme']
|
|
#108 Bajonettclip Zeitstempel Start
|
|
csvdata [107] = isotonav (bajodata ['startts'])
|
|
#109 Bajonettclip Zeitstempel Ende
|
|
csvdata [108] = isotonav (bajodata ['endts'])
|
|
#32-35
|
|
for i in range (4):
|
|
csvdata [31 + i] = bearbeitungstatusNav[bajodata ['bajostatus%02d' % (i + 1)]]
|
|
del bajodata
|
|
del bajofield
|
|
|
|
|
|
#16 Status CClip
|
|
csvheader [15] = 'C_Clip_Status'
|
|
csvheader [109] = 'C_Clip_Aufnahme'
|
|
csvheader [110] = 'C_Clip_Start'
|
|
csvheader [111] = 'C_Clip_Ende'
|
|
for i in range (18):
|
|
csvheader [35 + i] = 'C_Clip_Status_Clip_%d' % (i + 1)
|
|
csvdata [15] = bauteilstatusNav [bdedata ['cclip']]
|
|
if bdedata ['cclip'] in ['i.O.', 'n.i.O.']:
|
|
ccfield = ['dmc', 'startts', 'endts', 'aufnahme', 'clipstatus01', 'clipstatus02', 'clipstatus03', 'clipstatus04', 'clipstatus05', 'clipstatus06', 'clipstatus07', 'clipstatus08', 'clipstatus09', 'clipstatus10', 'clipstatus11', 'clipstatus12', 'clipstatus13', 'clipstatus14', 'clipstatus15', 'clipstatus16', 'clipstatus17', 'clipstatus18']
|
|
ret = self.dbcon.getcclip (dmc)
|
|
if not len (ret):
|
|
print ("No CClip Data")
|
|
raise Warning
|
|
else:
|
|
ccdata = {}
|
|
for i in range (len (ccfield)):
|
|
ccdata [ccfield [i]] = ret[0][i]
|
|
|
|
#110 CClip Zeitstempel Aufnahme
|
|
csvdata [109] = ccdata ['aufnahme']
|
|
#111 CClip Zeitstempel Start
|
|
csvdata [110] = isotonav (ccdata ['startts'])
|
|
#112 CClip Zeitstempel Ende
|
|
csvdata [111] = isotonav (ccdata ['endts'])
|
|
#36 -
|
|
for i in range (18):
|
|
csvdata [35 + i] = bearbeitungstatusNav[ccdata ['clipstatus%02d' % (i + 1)]]
|
|
del ccfield
|
|
del ccdata
|
|
|
|
|
|
#17 Status Masseblech
|
|
csvheader [16] = 'Masseblech_Status'
|
|
csvheader [112] = 'Masseblech_Start'
|
|
csvheader [113] = 'Masseblech_Ende'
|
|
csvheader [53] = 'Masseblech_Status_Ausgleichelement'
|
|
csvheader [54] = 'Masseblech_Status_Schallisolierung'
|
|
csvheader [55] = 'Masseblech_Status_Masseblech'
|
|
csvheader [56] = 'Masseblech_Status_Blindniet'
|
|
csvheader [57] = 'Masseblech_Status_Kombimutter'
|
|
csvheader [90] = 'Masseblech_Blindniet_Kombimutter_Moment'
|
|
csvheader [91] = 'Masseblech_Blindniet_Kombimutter_Tiefe'
|
|
csvheader [92] = 'Masseblech_Blindniet_Kombimutter_Winkel'
|
|
csvheader [93] = 'Masseblech_Blindniet_Kombimutter_Zeit'
|
|
csvheader [88] = 'Masseblech_Blindniet_Kraft'
|
|
csvheader [89] = 'Masseblech_Blindniet_Weg'
|
|
csvdata [16] = bauteilstatusNav [bdedata ['masseblech']]
|
|
if bdedata ['masseblech'] in ['i.O.', 'n.i.O.']:
|
|
mbfield = ['dmc', 'startts', 'endts', 'ausgleichselement', 'schallisolierung', 'masseblech', 'blindniet', 'kombimutter', 'fniet', 'sniet', 'mmutter', 'dmutter', 'wmutter', 'tmutter']
|
|
ret = self.dbcon.getmasseblech (dmc)
|
|
if not len (ret):
|
|
print ("No Masseblech Data")
|
|
raise Warning
|
|
else:
|
|
mbdata = {}
|
|
for i in range (len (mbfield)):
|
|
mbdata [mbfield [i]] = ret[0][i]
|
|
|
|
#113 Masseblech Zeitstempel Start
|
|
csvdata [112] = isotonav (mbdata ['startts'])
|
|
#114 Masseblech Zeitstempel Ende
|
|
csvdata [113] = isotonav (mbdata ['endts'])
|
|
#54 Masseblech Ausgleichseelement
|
|
csvdata [53] = bearbeitungstatusNav [mbdata ['ausgleichselement']]
|
|
#55 Masseblech Schallisolierung
|
|
csvdata [54] = bearbeitungstatusNav [mbdata ['schallisolierung']]
|
|
#56 Masseblech Masseblech
|
|
csvdata [55] = bearbeitungstatusNav [mbdata ['masseblech']]
|
|
#57 Masseblech Blindniet
|
|
csvdata [56] = bearbeitungstatusNav [mbdata ['blindniet']]
|
|
#58 Masseblech Blindniet
|
|
csvdata [57] = bearbeitungstatusNav [mbdata ['kombimutter']]
|
|
#91 Masseblech Kombimutter M
|
|
csvdata [90] = mbdata ['mmutter']
|
|
#92 Masseblech Kombimutter D
|
|
csvdata [91] = mbdata ['dmutter']
|
|
#93 Masseblech Kombimutter W
|
|
csvdata [92] = mbdata ['wmutter']
|
|
#94 Masseblech Kombimutter T
|
|
csvdata [93] = mbdata ['tmutter']
|
|
#89 Masseblech Blindniet F
|
|
csvdata [88] = mbdata ['fniet']
|
|
#90 Masseblech Blindniet S
|
|
csvdata [89] = mbdata ['sniet']
|
|
|
|
del mbfield
|
|
del mbdata
|
|
|
|
|
|
#18 Status Pruefzelle2
|
|
csvheader [17] = 'Pruefzelle_2'
|
|
csvdata [17] = bauteilstatusNav [bdedata ['pruefzelle2']]
|
|
#19 Status Nacharbeit
|
|
csvheader [18] = 'Nacharbeitung'
|
|
csvdata [18] = bauteilstatusNav [bdedata ['nacharbeit']]
|
|
|
|
#20 DMC uberpruefen Obsolete
|
|
csvheader [19] = 'DMC_ueberpruefen'
|
|
csvdata [19] = 'nicht durchlaufen'
|
|
|
|
#95 DMC uberpruefen Obsolete
|
|
csvheader [94] = 'Bemerkung'
|
|
#96 DMC uberpruefen Obsolete
|
|
csvheader [95] = 'Gesamt'
|
|
|
|
file = open (self.path + dmc + '.csv', "w")
|
|
for i in csvheader:
|
|
if type (i) == str and';' in i:
|
|
print ("Semikolon in Data")
|
|
file.write (str (i) + ';')
|
|
file.write (str (i) + '\r\n')
|
|
for i in csvdata:
|
|
if type (i) == str and';' in i:
|
|
print ("Semikolon in Data")
|
|
file.write (str (i) + ';')
|
|
file.close ()
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
from DB import DB, logtest, errlogtest
|
|
conn = DB ('/opt/data/bde.sqlite', '/tmp/talog.sql', logtest, errlogtest)
|
|
nav = NAV (path = "/srv/navision/", db = conn)
|
|
dmc = '1234'
|
|
dmc = '40656431290716929764415'
|
|
nav.createcsv (dmc)
|