Files
BDE/Navision.py

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)