111 lines
4.7 KiB
Python
Executable File
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)
|
|
|