Files
storage_fresco/Ordering.py
2019-05-23 13:36:01 +00:00

111 lines
4.7 KiB
Python
Executable File

#!/usr/bin/env python
import sys,string
from datetime import datetime
import os
import codecs
class ORDERING:
def __init__ (self, *dummy, **args):
"""
Initialize an new Ordering module
"""
self.path = args.get ("path", "/opt/sap")
self.path += self.path[-1] != '/' and '/' or ''
def setloggingmethods (self, log, message):
self.log = log
self.message = message
def message (self, level, msg):
"""
Dummy Message if not overloaded
"""
dt = datetime.now ()
print ("DB-LOG %4d-%02d-%02d %02d:%02d:%02d.%06d:" %(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.microsecond)),
print msg
def log (self, msg):
"""
Dummy Logging if not overloaded
"""
dt = datetime.now ()
print ("DB-LOG %4d-%02d-%02d %02d:%02d:%02d.%06d: " %(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.microsecond)),
print msg
def orderfiles (self):
"""
returns list of exportfiles found in path
"""
#return filter (lambda f: ".exp" in f, os.listdir (self.path))
return filter (lambda f: "O_" == f[:2], os.listdir (self.path))
def archiveorderfile (self, filename):
"""
Move file to archive
processed Subfolder is obligatoric
"""
os.rename (self.path + filename, self.path + "processed/" + filename)
def orderheader (self, data):
"""
E2VPPIH 03400000000024436740000010000000100011835090001 002010100620101006 44.850 KG 0.000 MENSA UNI KLAGENFURT OESTERR.MENSEN BETRIEBSGMBH UNI - BUFFET UNIVERSITAETSSTR. 65-67 AT 9020 KLAGENFURT
"""
ret_val = {}
ret_val ['orderid'] = data [63:73].lstrip ('0')
ret_val ['overall_weight'] = data [121:135].lstrip (' ')
ret_val ['overall_weight_unit'] = data [135:138].lstrip (' ')
ret_val ['deliverydate'] = data [113:121]
ret_val ['cust'] = data [153:192].lstrip (' ').rstrip (' ').replace ("'",'')
ret_val ['cust2'] = data [192:254].lstrip (' ').rstrip (' ').replace ("'",'')
ret_val ['cust_street'] = data [254:335].lstrip (' ').rstrip (' ')
ret_val ['cust_country'] = data [335:370].lstrip (' ').rstrip (' ')
ret_val ['cust_postcode'] = data [370:374].lstrip (' ').rstrip (' ')
ret_val ['cust_city'] = data [376:390].lstrip (' ').rstrip (' ')
return ret_val
def orderline (self, data):
"""
E2VPPII 0.00 14.780 034000000000241359800000300000102000116862300004001 000000000000001320R-KALBIN H?FTE AT 0001001 15.000 15.000 15.000 KG KG 1 1 601000 20100902 0011149314 15.000 15.000 KG 0.000
E2VPPII002 034000000000244361100000400000102008018550500003002 000000000000007603K?RNTNER ROHWURST 300g 0001001 4.000 4.000 4.000 ST ST 1 1 647000 20101006 4500185836 1.200 1.200 KG 0.000
"""
ret_val = {}
ret_val ['article'] = data [121:139].lstrip ('0')
ret_val ['caption'] = data [139:179].rstrip (' ')
ret_val ['order_amount'] = data [236:251].lstrip (' ')
ret_val ['order_amount_unit'] = data [251:254].lstrip (' ')
ret_val ['order_weight'] = data [334:349].lstrip (' ')
ret_val ['order_weight_unit'] = data [349:352].lstrip (' ')
return ret_val
def decodefile (self, filename):
"""
Decodes Orderfile and returns (orderheader, [orderlines])
"""
_header = None
_orderlines = []
self.message (6, "Ordering: Decoding Orderfile %s" % filename)
sfile = codecs.open (self.path + filename, "r", "latin-1")
for line in sfile:
if line.find ("EDI_DC40") >= 0:
self.message (6, "Ordering: EDoc-Header found")
elif line.find ("E2VPPIH") >= 0:
self.message (6, "Ordering: Order-Header found")
_header = self.orderheader (line)
elif line.find ("E2VPPII") >= 0:
_orderlines.append (self.orderline (line))
else:
self.log ("Ordering: found invalid line in Orderfile: '%s'" % line)
sfile.close ()
return (_header, _orderlines)
if __name__ == "__main__":
ordering = ORDERING (path ='/opt/sap')
for i in ordering.orderfiles ():
print ordering.decodefile (i)