def readwrite(filenamein="", filenameout="", **args): inn = inmessage.parse_edi_file(filename=filenamein, **args) out = outmessage.outmessage_init( filename=filenameout, divtext="", topartner="", **args ) # make outmessage object out.root = inn.root out.writeall()
def testidoc01(self): filenamein='botssys/infile/unitinisout/org/inisout01.idoc' filenameout='botssys/infile/unitinisout/output/inisout01.idoc' inn = inmessage.edifromfile(editype='idoc',messagetype='WP_PLU02',filename=filenamein) out = outmessage.outmessage_init(editype='idoc',messagetype='WP_PLU02',filename=filenameout,divtext='',topartner='') #make outmessage object out.root = inn.root out.writeall() self.failUnless(filecmp.cmp('bots/' + filenameout,'bots/' + filenamein))
def testedifact02(self): infile ='botssys/infile/unitinisout/org/inisout02.edi' outfile='botssys/infile/unitinisout/output/inisout02.edi' inn = inmessage.edifromfile(editype='edifact',messagetype='orderswithenvelope',filename=infile) out = outmessage.outmessage_init(editype='edifact',messagetype='orderswithenvelope',filename=outfile,divtext='',topartner='') #make outmessage object out.root = inn.root out.writeall() self.failUnless(filecmp.cmp('bots/' + outfile,'bots/' + infile))
def testx12_02(self): filenamein='botssys/infile/unitinisout/org/inisout02.x12' filenameout='botssys/infile/unitinisout/output/inisout02.x12' inn = inmessage.edifromfile(editype='x12',messagetype='850withenvelope',filename=filenamein) out = outmessage.outmessage_init(add_crlfafterrecord_sep='',editype='x12',messagetype='850withenvelope',filename=filenameout,divtext='',topartner='') #make outmessage object out.root = inn.root out.writeall() linesfile1 = utilsunit.readfile('bots/' + filenamein) linesfile2 = utilsunit.readfile('bots/' + filenameout) self.assertEqual(linesfile1[:103],linesfile2[:103],'first part of ISA') self.assertEqual(linesfile1[105:],linesfile2[103:],'rest of message')
def testinisoutjson02(self): #fails. this is because list of messages is read; and these are written in one time....nice for next release... filein = 'botssys/infile/unitinmessagejson/org/inisout05.json' fileout = 'botssys/infile/unitinmessagejson/output/inisout05.json' inn = inmessage.edifromfile(editype='json',messagetype='jsoninvoic',filename=filein) out = outmessage.outmessage_init(editype='json',messagetype='jsoninvoic',filename=fileout,divtext='',topartner='') #make outmessage object #~ inn.root.display() out.root = inn.root out.writeall() inn1 = inmessage.edifromfile(filename=filein,editype='jsonnocheck',messagetype='jsonnocheck',defaultBOTSIDroot='HEA') inn2 = inmessage.edifromfile(filename=fileout,editype='jsonnocheck',messagetype='jsonnocheck')
def testx12_01(self): filenamein='botssys/infile/unitinisout/org/inisout01.x12' filenameout='botssys/infile/unitinisout/output/inisout01.x12' inn = inmessage.edifromfile(editype='x12',messagetype='850withenvelope',filename=filenamein) out = outmessage.outmessage_init(editype='x12',messagetype='850withenvelope',filename=filenameout,divtext='',topartner='') #make outmessage object out.root = inn.root out.writeall() linesfile1 = utilsunit.readfilelines('bots/' + filenamein) linesfile2 = utilsunit.readfilelines('bots/' + filenameout) self.assertEqual(linesfile1[0][:103],linesfile2[0][:103],'first part of ISA') for line1,line2 in zip(linesfile1[1:],linesfile2[1:]): self.assertEqual(line1,line2,'Cmplines')
def testedifact02(self): infile = 'botssys/infile/unitinisout/org/inisout02.edi' outfile = 'botssys/infile/unitinisout/output/inisout02.edi' inn = inmessage.edifromfile(editype='edifact', messagetype='orderswithenvelope', filename=infile) out = outmessage.outmessage_init(editype='edifact', messagetype='orderswithenvelope', filename=outfile, divtext='', topartner='') #make outmessage object out.root = inn.root out.writeall() self.failUnless(filecmp.cmp('bots/' + outfile, 'bots/' + infile))
def testidoc01(self): filenamein = 'botssys/infile/unitinisout/org/inisout01.idoc' filenameout = 'botssys/infile/unitinisout/output/inisout01.idoc' inn = inmessage.edifromfile(editype='idoc', messagetype='WP_PLU02', filename=filenamein) out = outmessage.outmessage_init(editype='idoc', messagetype='WP_PLU02', filename=filenameout, divtext='', topartner='') #make outmessage object out.root = inn.root out.writeall() self.failUnless( filecmp.cmp('bots/' + filenameout, 'bots/' + filenamein))
def testx12_02(self): filenamein = 'botssys/infile/unitinisout/org/inisout02.x12' filenameout = 'botssys/infile/unitinisout/output/inisout02.x12' inn = inmessage.edifromfile(editype='x12', messagetype='850withenvelope', filename=filenamein) out = outmessage.outmessage_init(add_crlfafterrecord_sep='', editype='x12', messagetype='850withenvelope', filename=filenameout, divtext='', topartner='') #make outmessage object out.root = inn.root out.writeall() linesfile1 = utilsunit.readfile('bots/' + filenamein) linesfile2 = utilsunit.readfile('bots/' + filenameout) self.assertEqual(linesfile1[:103], linesfile2[:103], 'first part of ISA') self.assertEqual(linesfile1[105:], linesfile2[103:], 'rest of message')
def testx12_01(self): filenamein = 'botssys/infile/unitinisout/org/inisout01.x12' filenameout = 'botssys/infile/unitinisout/output/inisout01.x12' inn = inmessage.edifromfile(editype='x12', messagetype='850withenvelope', filename=filenamein) out = outmessage.outmessage_init(editype='x12', messagetype='850withenvelope', filename=filenameout, divtext='', topartner='') #make outmessage object out.root = inn.root out.writeall() linesfile1 = utilsunit.readfilelines('bots/' + filenamein) linesfile2 = utilsunit.readfilelines('bots/' + filenameout) self.assertEqual(linesfile1[0][:103], linesfile2[0][:103], 'first part of ISA') for line1, line2 in zip(linesfile1[1:], linesfile2[1:]): self.assertEqual(line1, line2, 'Cmplines')
def get_edi_invoice_envelops(self, invoice): out = outmessage.outmessage_init(editype='edifact', messagetype='INVOICD93AUN', filename='1', reference='', statust=2, divtext='') out.put({ 'BOTSID': 'UNB', 'S001.0001': 'UNOC', 'S001.0002': '3', 'S002.0004': self.limit_string( self.env.ref('base.main_company').company_registry, 17), 'S002.0007': 'ZZ', 'S003.0010': '8422416888881', 'S003.0007': '14', 'S004.0017': self.get_invoice_date(invoice.write_date, 'short'), 'S004.0019': self.get_invoice_time(invoice.write_date), '0020': self.get_invoice_name(invoice.number) }) out.put({'BOTSID': 'UNB'}, { 'BOTSID': 'UNZ', '0036': '1', '0020': self.get_invoice_name(invoice.number) }) out.messagegrammarread(typeofgrammarfile='envelope') out.checkmessage(out.root, out.defmessage) out.tree2records(out.root) una = 'UNA:+.? \'\n' header = out.record2string(out.lex_records[0:1]) footer = out.record2string(out.lex_records[1:2]) return una, header, footer
def testinisoutjson02(self): #fails. this is because list of messages is read; and these are written in one time....nice for next release... filein = 'botssys/infile/unitinmessagejson/org/inisout05.json' fileout = 'botssys/infile/unitinmessagejson/output/inisout05.json' inn = inmessage.edifromfile(editype='json', messagetype='jsoninvoic', filename=filein) out = outmessage.outmessage_init(editype='json', messagetype='jsoninvoic', filename=fileout, divtext='', topartner='') #make outmessage object # inn.root.display() out.root = inn.root out.writeall() inn1 = inmessage.edifromfile(filename=filein, editype='jsonnocheck', messagetype='jsonnocheck', defaultBOTSIDroot='HEA') inn2 = inmessage.edifromfile(filename=fileout, editype='jsonnocheck', messagetype='jsonnocheck')
def testedifact01(self): inn = inmessage.parse_edi_file(editype='edifact',messagetype='invoicwithenvelope',filename='botssys/infile/unitnode/nodetest01.edi') out = outmessage.outmessage_init(editype='edifact',messagetype='invoicwithenvelope',filename='botssys/infile/unitnode/output/inisout03.edi',divtext='',topartner='') #make outmessage object out.root = inn.root #* getloop ************************************** count = 0 for t in inn.getloop({'BOTSID':'XXX'}): count += 1 self.assertEqual(count,0,'Cmplines') count = 0 for t in inn.getloop({'BOTSID':'UNB'}): count += 1 self.assertEqual(count,2,'Cmplines') count = 0 for t in out.getloop({'BOTSID':'UNB'},{'BOTSID':'XXX'}): count += 1 self.assertEqual(count,0,'Cmplines') count = 0 for t in out.getloop({'BOTSID':'UNB'},{'BOTSID':'UNH'}): count += 1 self.assertEqual(count,3,'Cmplines') count = 0 for t in inn.getloop({'BOTSID':'UNB'},{'BOTSID':'UNH'},{'BOTSID':'XXX'}): count += 1 self.assertEqual(count,0,'Cmplines') count = 0 for t in inn.getloop({'BOTSID':'UNB'},{'BOTSID':'UNH'},{'BOTSID':'LIN'}): count += 1 self.assertEqual(count,6,'Cmplines') count = 0 for t in inn.getloop({'BOTSID':'UNB'},{'BOTSID':'XXX'},{'BOTSID':'LIN'},{'BOTSID':'QTY'}): count += 1 self.assertEqual(count,0,'Cmplines') count = 0 for t in inn.getloop({'BOTSID':'UNB'},{'BOTSID':'UNH'},{'BOTSID':'LIN'},{'BOTSID':'XXX'}): count += 1 self.assertEqual(count,0,'Cmplines') count = 0 for t in inn.getloop({'BOTSID':'UNB'},{'BOTSID':'UNH'},{'BOTSID':'LIN'},{'BOTSID':'QTY'}): count += 1 self.assertEqual(count,6,'Cmplines') #* getcount, getcountmpath ************************************** count = 0 countlist=[5,0,1] nrsegmentslist=[132,10,12] for t in out.getloop({'BOTSID':'UNB'},{'BOTSID':'UNH'}): count2 = 0 for u in t.getloop({'BOTSID':'UNH'},{'BOTSID':'LIN'}): count2 += 1 count3 = t.getcountoccurrences({'BOTSID':'UNH'},{'BOTSID':'LIN'}) self.assertEqual(t.getcount(),nrsegmentslist[count],'Cmplines') self.assertEqual(count2,countlist[count],'Cmplines') self.assertEqual(count3,countlist[count],'Cmplines') count += 1 self.assertEqual(out.getcountoccurrences({'BOTSID':'UNB'},{'BOTSID':'UNH'}),count,'Cmplines') self.assertEqual(inn.getcountoccurrences({'BOTSID':'UNB'},{'BOTSID':'UNH'}),count,'Cmplines') self.assertEqual(inn.getcount(),sum(nrsegmentslist,4),'Cmplines') self.assertEqual(out.getcount(),sum(nrsegmentslist,4),'Cmplines') #* get, getnozero, countmpath, sort************************************** for t in out.getloop({'BOTSID':'UNB'},{'BOTSID':'UNH'}): self.assertRaises(botslib.MappingRootError,out.get,()) self.assertRaises(botslib.MappingRootError,out.getnozero,()) self.assertRaises(botslib.MappingRootError,out.get,0) self.assertRaises(botslib.MappingRootError,out.getnozero,0) t.sort({'BOTSID':'UNH'},{'BOTSID':'LIN','C212.7140':None}) start='0' for u in t.getloop({'BOTSID':'UNH'},{'BOTSID':'LIN'}): nextstart = u.get({'BOTSID':'LIN','C212.7140':None}) self.failUnless(start<nextstart) start = nextstart t.sort({'BOTSID':'UNH'},{'BOTSID':'LIN','1082':None}) start='0' for u in t.getloop({'BOTSID':'UNH'},{'BOTSID':'LIN'}): nextstart = u.get({'BOTSID':'LIN','1082':None}) self.failUnless(start<nextstart) start = nextstart self.assertRaises(botslib.MappingRootError,out.get,()) self.assertRaises(botslib.MappingRootError,out.getnozero,()) #~ # self.assertRaises(botslib.MpathError,out.get,()) first=True for t in out.getloop({'BOTSID':'UNB'}): if first: self.assertEqual('15',t.getcountsum({'BOTSID':'UNB'},{'BOTSID':'UNH'},{'BOTSID':'LIN','1082':None}),'Cmplines') self.assertEqual('8',t.getcountsum({'BOTSID':'UNB'},{'BOTSID':'UNH'},{'BOTSID':'LIN'},{'BOTSID':'QTY','C186.6063':'47','C186.6060':None}),'Cmplines') self.assertEqual('0',t.getcountsum({'BOTSID':'UNB'},{'BOTSID':'UNH'},{'BOTSID':'LIN'},{'BOTSID':'QTY','C186.6063':'12','C186.6060':None}),'Cmplines') self.assertEqual('54.4',t.getcountsum({'BOTSID':'UNB'},{'BOTSID':'UNH'},{'BOTSID':'LIN'},{'BOTSID':'MOA','C516.5025':'203','C516.5004':None}),'Cmplines') first = False else: self.assertEqual('1',t.getcountsum({'BOTSID':'UNB'},{'BOTSID':'UNH'},{'BOTSID':'LIN'},{'BOTSID':'QTY','C186.6063':'47','C186.6060':None}),'Cmplines') self.assertEqual('0',t.getcountsum({'BOTSID':'UNB'},{'BOTSID':'UNH'},{'BOTSID':'LIN'},{'BOTSID':'QTY','C186.6063':'12','C186.6060':None}),'Cmplines') self.assertEqual('0',t.getcountsum({'BOTSID':'UNB'},{'BOTSID':'UNH'},{'BOTSID':'LIN'},{'BOTSID':'MOA','C516.5025':'203','C516.5004':None}),'Cmplines')
def readwrite(filenamein='', filenameout='', **args): inn = inmessage.parse_edi_file(filename=filenamein, **args) out = outmessage.outmessage_init(filename=filenameout, divtext='', topartner='', **args) # make outmessage object out.root = inn.root out.writeall()
def get_edi_invoice_body(self, invoice): out = outmessage.outmessage_init(editype='edifact', messagetype='INVOICD93AUN', filename='1', reference='', statust=2, divtext='') ta_info = { 'sfield_sep': ':', 'record_tag_sep': '', 'field_sep': '+', 'quote_char': '', 'escape': '?', 'record_sep': "'", 'add_crlfafterrecord_sep': '\r\n', 'forcequote': False, 'reserve': '*', 'version': 3 } out.ta_info.update(ta_info) main_company = self.env.ref('base.main_company') out.put({ 'BOTSID': 'UNH', '0062': self.get_invoice_name(invoice.number), 'S009.0065': 'DESADV', 'S009.0052': 'D', 'S009.0054': '93A', 'S009.0051': 'UN', 'S009.0057': 'EAN007' }) bgm = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'BGM'}) bgm.put({ 'BOTSID': 'BGM', 'C002.1001': '380', 'C002.1000': '2017FVN493', 'C002.3055': '9' }) dtm = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'DTM'}) dtm.put({ 'BOTSID': 'DTM', 'C507.2005': '137', 'C507.2380': self.get_invoice_date(invoice.write_date), 'C507.2379': '102' }) pai = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'PAI'}) pai.put({'BOTSID': 'PAI', 'C534.4461': '60'}) rff = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'RFF'}) rff.put({ 'BOTSID': 'RFF', 'C506.1153': 'ON', 'C506.1154': self.get_order_number(invoice.origin) }) rff = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'RFF'}) rff.put({ 'BOTSID': 'RFF', 'C506.1153': 'DQ', 'C506.1154': self.get_picking(invoice.origin) }) nad = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'NAD'}) if not main_company.company_registry: raise exceptions.Warning( _('ERROR: Company %s has no VAT defined: invoice %s') % (main_company.name, invoice.number)) nad.put({ 'BOTSID': 'NAD', '3035': 'SCO', 'C082.3039': self.limit_string(main_company.company_registry, 17), 'C082.3055': '9', 'C080.3036#1': self.limit_string(main_company.name, 35), 'C059.3042#1': self.limit_string(main_company.street, 35), '3164': self.limit_string(main_company.city, 35), '3207': '', '3251': self.limit_string(main_company.zip, 9) }) rff = nad.putloop({'BOTSID': 'NAD'}, {'BOTSID': 'RFF'}) rff.put({ 'BOTSID': 'RFF', 'C506.1153': 'VA', 'C506.1154': self.limit_string(main_company.company_registry, 17) }) parent_partner = self.get_parent_partner(invoice.partner_id) nad = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'NAD'}) if not parent_partner.ean13: raise exceptions.Warning( _('ERROR: Client %s has no EAN defined: invoice %s') % (parent_partner.name, invoice.number)) nad.put({ 'BOTSID': 'NAD', '3035': 'BCO', 'C082.3039': self.limit_string(parent_partner.ean13, 17), 'C082.3055': '9', 'C080.3036#1': self.limit_string(parent_partner.name, 35), 'C059.3042#1': self.limit_string(parent_partner.street, 35), '3164': self.limit_string(parent_partner.city, 35), '3207': '', '3251': self.limit_string(parent_partner.zip, 9) }) rff = nad.putloop({'BOTSID': 'NAD'}, {'BOTSID': 'RFF'}) rff.put({ 'BOTSID': 'RFF', 'C506.1153': 'VA', 'C506.1154': self.limit_string(parent_partner.vat, 17) }) nad = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'NAD'}) nad.put({ 'BOTSID': 'NAD', '3035': 'SU', 'C082.3039': self.limit_string(main_company.company_registry, 17), 'C082.3055': '9', 'C080.3036#1': self.limit_string(main_company.name, 35), 'C059.3042#1': self.limit_string(main_company.street, 35), '3164': self.limit_string(main_company.city, 35), '3207': '', '3251': self.limit_string(main_company.zip, 9) }) rff = nad.putloop({'BOTSID': 'NAD'}, {'BOTSID': 'RFF'}) rff.put({ 'BOTSID': 'RFF', 'C506.1153': 'VA', 'C506.1154': self.limit_string(main_company.company_registry, 17) }) nad = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'NAD'}) nad.put({ 'BOTSID': 'NAD', '3035': 'BY', 'C082.3039': self.limit_string(invoice.partner_id.vat, 17), 'C082.3055': '9', 'C080.3036#1': self.limit_string(invoice.partner_id.name, 35), 'C059.3042#1': self.limit_string(invoice.partner_id.street, 35), '3164': self.limit_string(invoice.partner_id.city, 35), '3207': '', '3251': self.limit_string(invoice.partner_id.zip, 9) }) rff = nad.putloop({'BOTSID': 'NAD'}, {'BOTSID': 'RFF'}) rff.put({ 'BOTSID': 'RFF', 'C506.1153': 'VA', 'C506.1154': self.limit_string(invoice.partner_id.vat, 17) }) rff = nad.putloop({'BOTSID': 'NAD'}, {'BOTSID': 'RFF'}) rff.put({ 'BOTSID': 'RFF', 'C506.1153': 'API', 'C506.1154': self.limit_string(invoice.partner_id.ref, 35) }) nad = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'NAD'}) nad.put({ 'BOTSID': 'NAD', '3035': 'II', 'C082.3039': self.limit_string(main_company.company_registry, 17), 'C082.3055': '9', 'C080.3036#1': self.limit_string(main_company.name, 35), 'C059.3042#1': self.limit_string(main_company.street, 35), '3164': self.limit_string(main_company.city, 35), '3207': '', '3251': self.limit_string(main_company.zip, 9) }) rff = nad.putloop({'BOTSID': 'NAD'}, {'BOTSID': 'RFF'}) rff.put({ 'BOTSID': 'RFF', 'C506.1153': 'VA', 'C506.1154': self.limit_string(main_company.company_registry, 17) }) nad = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'NAD'}) nad.put({ 'BOTSID': 'NAD', '3035': 'IV', 'C082.3039': self.limit_string(parent_partner.ean13, 17), 'C082.3055': '9', 'C080.3036#1': self.limit_string(parent_partner.name, 35), 'C059.3042#1': self.limit_string(parent_partner.street, 35), '3164': self.limit_string(parent_partner.city, 35), '3207': '', '3251': self.limit_string(parent_partner.zip, 9) }) rff = nad.putloop({'BOTSID': 'NAD'}, {'BOTSID': 'RFF'}) rff.put({ 'BOTSID': 'RFF', 'C506.1153': 'VA', 'C506.1154': self.limit_string(parent_partner.vat, 17) }) nad = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'NAD'}) nad.put({ 'BOTSID': 'NAD', '3035': 'DP', 'C082.3039': self.limit_string(invoice.partner_id.vat, 17), 'C082.3055': '9', 'C080.3036#1': self.limit_string(invoice.partner_id.name, 35), 'C059.3042#1': self.limit_string(invoice.partner_id.street, 35), '3164': self.limit_string(invoice.partner_id.city, 35), '3207': '', '3251': self.limit_string(invoice.partner_id.zip, 9) }) rff = nad.putloop({'BOTSID': 'NAD'}, {'BOTSID': 'RFF'}) rff.put({ 'BOTSID': 'RFF', 'C506.1153': 'VA', 'C506.1154': self.limit_string(invoice.partner_id.vat, 17) }) nad = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'NAD'}) nad.put({ 'BOTSID': 'NAD', '3035': 'PR', 'C082.3039': self.limit_string(invoice.partner_id.vat, 17), 'C082.3055': '9', 'C080.3036#1': self.limit_string(invoice.partner_id.name, 35), 'C059.3042#1': self.limit_string(invoice.partner_id.street, 35), '3164': self.limit_string(invoice.partner_id.city, 35), '3207': '', '3251': self.limit_string(invoice.partner_id.zip, 9) }) rff = nad.putloop({'BOTSID': 'NAD'}, {'BOTSID': 'RFF'}) rff.put({ 'BOTSID': 'RFF', 'C506.1153': 'VA', 'C506.1154': self.limit_string(invoice.partner_id.vat, 17) }) nad = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'NAD'}) nad.put({ 'BOTSID': 'NAD', '3035': 'PE', 'C082.3039': self.limit_string(main_company.company_registry, 17), 'C082.3055': '9', 'C080.3036#1': self.limit_string(main_company.name, 35), 'C059.3042#1': self.limit_string(main_company.street, 35), '3164': self.limit_string(main_company.city, 35), '3207': '', '3251': self.limit_string(main_company.zip, 9) }) rff = nad.putloop({'BOTSID': 'NAD'}, {'BOTSID': 'RFF'}) rff.put({ 'BOTSID': 'RFF', 'C506.1153': 'VA', 'C506.1154': self.limit_string(main_company.company_registry, 17) }) cux = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'CUX'}) cux.put({ 'BOTSID': 'CUX', 'C504#1.6347': '2', 'C504#1.6345': self.limit_string(invoice.currency_id.name, 3), 'C504#1.6343': '4' }) pat = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'PAT'}) pat.put({'BOTSID': 'PAT', '4279': '35'}) dtm = pat.putloop({'BOTSID': 'PAT'}, {'BOTSID': 'DTM'}) dtm.put({ 'BOTSID': 'DTM', 'C507.2005': '13', 'C507.2380': self.get_invoice_date(invoice.date_due), 'C507.2379': '102' }) count = 1 total_lines = 0 for line in invoice.invoice_line: total_lines += 1 lin = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'LIN'}) lin.put({'BOTSID': 'LIN', '1082': count}) count += 1 lin.put({ 'BOTSID': 'LIN', 'C212.7140': line.product_id.ean13 and self.limit_string(line.product_id.ean13, 17) or self.limit_string(line.product_id.default_code, 17), 'C212.7143': 'EN' }) pia = lin.putloop({'BOTSID': 'LIN'}, {'BOTSID': 'PIA'}) pia.put({'BOTSID': 'PIA', '4347': '1'}) pia.put({ 'BOTSID': 'PIA', 'C212#1.7140': self.limit_string(line.product_id.default_code, 35), 'C212#1.7143': 'IN' }) pia = lin.putloop({'BOTSID': 'LIN'}, {'BOTSID': 'PIA'}) pia.put({'BOTSID': 'PIA', '4347': '1'}) pia.put({ 'BOTSID': 'PIA', 'C212#1.7140': self.limit_string(line.product_id.ean13, 17), 'C212#1.7143': 'SA' }) imd = lin.putloop({'BOTSID': 'LIN'}, {'BOTSID': 'IMD'}) imd.put({ 'BOTSID': 'IMD', '7077': 'F', '7081': 'M', 'C273.7008#1': self.limit_string(line.product_id.name, 35) }) qty = lin.putloop({'BOTSID': 'LIN'}, {'BOTSID': 'QTY'}) qty.put({ 'BOTSID': 'QTY', 'C186.6063': '47', 'C186.6060': int(line.quantity) }) qty = lin.putloop({'BOTSID': 'LIN'}, {'BOTSID': 'QTY'}) qty.put({ 'BOTSID': 'QTY', 'C186.6063': '46', 'C186.6060': int(line.quantity) }) qty = lin.putloop({'BOTSID': 'LIN'}, {'BOTSID': 'QTY'}) qty.put({ 'BOTSID': 'QTY', 'C186.6063': '59', 'C186.6060': int(line.quantity) }) moa = lin.putloop({'BOTSID': 'LIN'}, {'BOTSID': 'MOA'}) moa.put({ 'BOTSID': 'MOA', 'C516.5025': '66', 'C516.5004': line.price_subtotal }) pri = lin.putloop({'BOTSID': 'LIN'}, {'BOTSID': 'PRI'}) pri.put({ 'BOTSID': 'PRI', 'C509.5125': 'AAA', 'C509.5118': line.price_unit }) pri = lin.putloop({'BOTSID': 'LIN'}, {'BOTSID': 'PRI'}) pri.put({ 'BOTSID': 'PRI', 'C509.5125': 'AAB', 'C509.5118': line.price_unit }) for prod_tax in line.invoice_line_tax_id: tax = lin.putloop({'BOTSID': 'LIN'}, {'BOTSID': 'TAX'}) tax.put({ 'BOTSID': 'TAX', '5283': '7', 'C241.5153': 'VAT', 'C243.5278': self.limit_string(prod_tax.description, 7) }) taxes = line.invoice_line_tax_id.compute_all( line.price_unit, line.quantity) moa = tax.putloop({'BOTSID': 'TAX'}, {'BOTSID': 'MOA'}) moa.put({ 'BOTSID': 'MOA', 'C516.5025': '124', 'C516.5004': taxes['taxes'][0]['amount'] }) out.put({'BOTSID': 'UNH'}, {'BOTSID': 'UNS', '0081': 'S'}) out.put({'BOTSID': 'UNH'}, { 'BOTSID': 'CNT', 'C270.6069': '2', 'C270.6066': total_lines }) out.put({'BOTSID': 'UNH'}, { 'BOTSID': 'MOA', 'C516.5025': '79', 'C516.5004': invoice.amount_untaxed }) out.put({'BOTSID': 'UNH'}, { 'BOTSID': 'MOA', 'C516.5025': '98', 'C516.5004': invoice.amount_untaxed }) out.put({'BOTSID': 'UNH'}, { 'BOTSID': 'MOA', 'C516.5025': '125', 'C516.5004': invoice.amount_untaxed }) out.put({'BOTSID': 'UNH'}, { 'BOTSID': 'MOA', 'C516.5025': '139', 'C516.5004': invoice.amount_total }) out.put({'BOTSID': 'UNH'}, { 'BOTSID': 'MOA', 'C516.5025': '179', 'C516.5004': invoice.amount_tax }) out.put({'BOTSID': 'UNH'}, { 'BOTSID': 'TAX', 'BOTSIDnr': '2', '5283': '7', 'C241.5153': 'VAT', 'C243.5278': self.limit_string(prod_tax.description, 7) }) out.put({'BOTSID': 'UNH'}, { 'BOTSID': 'MOA', 'C516.5025': '179', 'C516.5004': invoice.amount_tax }) out.put({'BOTSID': 'UNH'}, { 'BOTSID': 'MOA', 'C516.5025': '125', 'C516.5004': invoice.amount_untaxed }) out.put({'BOTSID': 'UNH'}, { 'BOTSID': 'UNT', '0074': out.getcount() + 1, '0062': self.get_invoice_name(invoice.number) }) out.writeall() return out.record2string(out.lex_records)
def testedifact01(self): inn = inmessage.parse_edi_file( editype='edifact', messagetype='invoicwithenvelope', filename='botssys/infile/unitnode/nodetest01.edi') out = outmessage.outmessage_init( editype='edifact', messagetype='invoicwithenvelope', filename='botssys/infile/unitnode/output/inisout03.edi', divtext='', topartner='') #make outmessage object out.root = inn.root #* getloop ************************************** count = 0 for t in inn.getloop({'BOTSID': 'XXX'}): count += 1 self.assertEqual(count, 0, 'Cmplines') count = 0 for t in inn.getloop({'BOTSID': 'UNB'}): count += 1 self.assertEqual(count, 2, 'Cmplines') count = 0 for t in out.getloop({'BOTSID': 'UNB'}, {'BOTSID': 'XXX'}): count += 1 self.assertEqual(count, 0, 'Cmplines') count = 0 for t in out.getloop({'BOTSID': 'UNB'}, {'BOTSID': 'UNH'}): count += 1 self.assertEqual(count, 3, 'Cmplines') count = 0 for t in inn.getloop({'BOTSID': 'UNB'}, {'BOTSID': 'UNH'}, {'BOTSID': 'XXX'}): count += 1 self.assertEqual(count, 0, 'Cmplines') count = 0 for t in inn.getloop({'BOTSID': 'UNB'}, {'BOTSID': 'UNH'}, {'BOTSID': 'LIN'}): count += 1 self.assertEqual(count, 6, 'Cmplines') count = 0 for t in inn.getloop({'BOTSID': 'UNB'}, {'BOTSID': 'XXX'}, {'BOTSID': 'LIN'}, {'BOTSID': 'QTY'}): count += 1 self.assertEqual(count, 0, 'Cmplines') count = 0 for t in inn.getloop({'BOTSID': 'UNB'}, {'BOTSID': 'UNH'}, {'BOTSID': 'LIN'}, {'BOTSID': 'XXX'}): count += 1 self.assertEqual(count, 0, 'Cmplines') count = 0 for t in inn.getloop({'BOTSID': 'UNB'}, {'BOTSID': 'UNH'}, {'BOTSID': 'LIN'}, {'BOTSID': 'QTY'}): count += 1 self.assertEqual(count, 6, 'Cmplines') #* getcount, getcountmpath ************************************** count = 0 countlist = [5, 0, 1] nrsegmentslist = [132, 10, 12] for t in out.getloop({'BOTSID': 'UNB'}, {'BOTSID': 'UNH'}): count2 = 0 for u in t.getloop({'BOTSID': 'UNH'}, {'BOTSID': 'LIN'}): count2 += 1 count3 = t.getcountoccurrences({'BOTSID': 'UNH'}, {'BOTSID': 'LIN'}) self.assertEqual(t.getcount(), nrsegmentslist[count], 'Cmplines') self.assertEqual(count2, countlist[count], 'Cmplines') self.assertEqual(count3, countlist[count], 'Cmplines') count += 1 self.assertEqual( out.getcountoccurrences({'BOTSID': 'UNB'}, {'BOTSID': 'UNH'}), count, 'Cmplines') self.assertEqual( inn.getcountoccurrences({'BOTSID': 'UNB'}, {'BOTSID': 'UNH'}), count, 'Cmplines') self.assertEqual(inn.getcount(), sum(nrsegmentslist, 4), 'Cmplines') self.assertEqual(out.getcount(), sum(nrsegmentslist, 4), 'Cmplines') #* get, getnozero, countmpath, sort************************************** for t in out.getloop({'BOTSID': 'UNB'}, {'BOTSID': 'UNH'}): self.assertRaises(botslib.MappingRootError, out.get, ()) self.assertRaises(botslib.MappingRootError, out.getnozero, ()) self.assertRaises(botslib.MappingRootError, out.get, 0) self.assertRaises(botslib.MappingRootError, out.getnozero, 0) t.sort({'BOTSID': 'UNH'}, {'BOTSID': 'LIN', 'C212.7140': None}) start = '0' for u in t.getloop({'BOTSID': 'UNH'}, {'BOTSID': 'LIN'}): nextstart = u.get({'BOTSID': 'LIN', 'C212.7140': None}) self.failUnless(start < nextstart) start = nextstart t.sort({'BOTSID': 'UNH'}, {'BOTSID': 'LIN', '1082': None}) start = '0' for u in t.getloop({'BOTSID': 'UNH'}, {'BOTSID': 'LIN'}): nextstart = u.get({'BOTSID': 'LIN', '1082': None}) self.failUnless(start < nextstart) start = nextstart self.assertRaises(botslib.MappingRootError, out.get, ()) self.assertRaises(botslib.MappingRootError, out.getnozero, ()) #~ # self.assertRaises(botslib.MpathError,out.get,()) first = True for t in out.getloop({'BOTSID': 'UNB'}): if first: self.assertEqual( '15', t.getcountsum({'BOTSID': 'UNB'}, {'BOTSID': 'UNH'}, { 'BOTSID': 'LIN', '1082': None }), 'Cmplines') self.assertEqual( '8', t.getcountsum({'BOTSID': 'UNB'}, {'BOTSID': 'UNH'}, {'BOTSID': 'LIN'}, { 'BOTSID': 'QTY', 'C186.6063': '47', 'C186.6060': None }), 'Cmplines') self.assertEqual( '0', t.getcountsum({'BOTSID': 'UNB'}, {'BOTSID': 'UNH'}, {'BOTSID': 'LIN'}, { 'BOTSID': 'QTY', 'C186.6063': '12', 'C186.6060': None }), 'Cmplines') self.assertEqual( '54.4', t.getcountsum({'BOTSID': 'UNB'}, {'BOTSID': 'UNH'}, {'BOTSID': 'LIN'}, { 'BOTSID': 'MOA', 'C516.5025': '203', 'C516.5004': None }), 'Cmplines') first = False else: self.assertEqual( '1', t.getcountsum({'BOTSID': 'UNB'}, {'BOTSID': 'UNH'}, {'BOTSID': 'LIN'}, { 'BOTSID': 'QTY', 'C186.6063': '47', 'C186.6060': None }), 'Cmplines') self.assertEqual( '0', t.getcountsum({'BOTSID': 'UNB'}, {'BOTSID': 'UNH'}, {'BOTSID': 'LIN'}, { 'BOTSID': 'QTY', 'C186.6063': '12', 'C186.6060': None }), 'Cmplines') self.assertEqual( '0', t.getcountsum({'BOTSID': 'UNB'}, {'BOTSID': 'UNH'}, {'BOTSID': 'LIN'}, { 'BOTSID': 'MOA', 'C516.5025': '203', 'C516.5004': None }), 'Cmplines')
def get_edi_picking_body(self, picking): out = outmessage.outmessage_init(editype='edifact', messagetype='DESADVD96AUNEAN005', filename='1', reference='', statust=2, divtext='') ta_info = { 'sfield_sep': ':', 'record_tag_sep': '', 'field_sep': '+', 'quote_char': '', 'escape': '?', 'record_sep': "'", 'add_crlfafterrecord_sep': '\r\n', 'forcequote': False, 'reserve': '*', 'version': 3 } out.ta_info.update(ta_info) main_company = self.env.ref('base.main_company') out.put({ 'BOTSID': 'UNH', '0062': self.get_picking_name(picking.name), 'S009.0065': 'DESADV', 'S009.0052': 'D', 'S009.0054': '96A', 'S009.0051': 'UN', 'S009.0057': 'EAN005' }) bgm = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'BGM'}) bgm.put({ 'BOTSID': 'BGM', 'C002.1001': '351', 'C002.1000': '1700705', 'C002.3055': '9' }) dtm = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'DTM'}) dtm.put({ 'BOTSID': 'DTM', 'C507.2005': '137', 'C507.2380': self.get_picking_date(picking.date), 'C507.2379': '102' }) ali = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'ALI'}) ali.put({'BOTSID': 'ALI', '4183#1': 'X6'}) rff = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'RFF'}) rff.put({ 'BOTSID': 'RFF', 'C506.1153': 'ON', 'C506.1154': self.get_order_number(picking.origin) }) nad = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'NAD'}) if not main_company.company_registry: raise exceptions.Warning( _('ERROR: Company %s has no VAT defined: picking %s') % (main_company.name, picking.name)) nad.put({ 'BOTSID': 'NAD', '3035': 'MS', 'C082.3039': self.limit_string(main_company.company_registry, 35), 'C082.3055': '9' }) nad = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'NAD'}) if not picking.partner_id.ean13: raise exceptions.Warning( _('ERROR: Client %s has no EAN defined: picking %s') % (picking.partner_id.name, picking.name)) nad.put({ 'BOTSID': 'NAD', '3035': 'MR', 'C082.3039': self.limit_string(picking.partner_id.ean13, 17), 'C082.3055': '9' }) nad = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'NAD'}) nad.put({ 'BOTSID': 'NAD', '3035': 'SU', 'C082.3039': self.limit_string(main_company.company_registry, 35), 'C082.3055': '9', 'C080.3036#1': self.limit_string(main_company.name, 35), 'C059.3042#1': self.limit_string(main_company.street, 35), '3164': self.limit_string(main_company.city, 35), '3207': '', '3251': self.limit_string(main_company.zip, 9) }) rff = nad.putloop({'BOTSID': 'NAD'}, {'BOTSID': 'RFF'}) rff.put({ 'BOTSID': 'RFF', 'C506.1153': 'VA', 'C506.1154': self.limit_string(main_company.company_registry, 35) }) nad = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'NAD'}) nad.put({ 'BOTSID': 'NAD', '3035': 'BY', 'C082.3039': self.limit_string(picking.partner_id.ean13, 17), 'C082.3055': '9', 'C080.3036#1': self.limit_string(picking.partner_id.name, 35), 'C059.3042#1': self.limit_string(picking.partner_id.street, 35), '3164': self.limit_string(picking.partner_id.city, 35), '3207': '', '3251': self.limit_string(picking.partner_id.zip, 9) }) rff = nad.putloop({'BOTSID': 'NAD'}, {'BOTSID': 'RFF'}) rff.put({'BOTSID': 'RFF', 'C506.1153': 'API', 'C506.1154': '513'}) rff = nad.putloop({'BOTSID': 'NAD'}, {'BOTSID': 'RFF'}) rff.put({ 'BOTSID': 'RFF', 'C506.1153': 'VA', 'C506.1154': picking.partner_id.vat and self.limit_string(picking.partner_id.vat, 35) or '' }) nad = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'NAD'}) nad.put({ 'BOTSID': 'NAD', '3035': 'DP', 'C082.3039': self.limit_string(picking.partner_id.ean13, 17), 'C082.3055': '9', 'C080.3036#1': self.limit_string(picking.partner_id.name, 35), 'C059.3042#1': self.limit_string(picking.partner_id.street, 35), '3164': self.limit_string(picking.partner_id.city, 35), '3207': '', '3251': self.limit_string(picking.partner_id.zip, 9) }) rff = nad.putloop({'BOTSID': 'NAD'}, {'BOTSID': 'RFF'}) rff.put({ 'BOTSID': 'RFF', 'C506.1153': 'VA', 'C506.1154': picking.partner_id.vat and self.limit_string(picking.partner_id.vat, 35) or '' }) cps = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'CPS'}) cps.put({'BOTSID': 'CPS', '7164': '1'}) pac = cps.putloop({'BOTSID': 'CPS'}, {'BOTSID': 'PAC'}) pac.put({'BOTSID': 'PAC', '7224': '1'}) cps = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'CPS'}) cps.put({'BOTSID': 'CPS', '7164': '2', '7166': '1'}) pac = cps.putloop({'BOTSID': 'CPS'}, {'BOTSID': 'PAC'}) pac.put({'BOTSID': 'PAC', '7224': '1', 'C202.7065': '201'}) pci = pac.putloop({'BOTSID': 'PAC'}, {'BOTSID': 'PCI'}) pci.put({'BOTSID': 'PCI', '4233': '33E'}) gin = pci.putloop({'BOTSID': 'PCI'}, {'BOTSID': 'GIN'}) gin.put({ 'BOTSID': 'GIN', '7405': 'BJ', 'C208#1.7402#1': '300000000000014282' }) cps_lin = out.putloop({'BOTSID': 'UNH'}, {'BOTSID': 'CPS'}) cps_lin.put({'BOTSID': 'CPS', '7164': '3', '7166': '2'}) pac = cps_lin.putloop({'BOTSID': 'CPS'}, {'BOTSID': 'PAC'}) pac.put({ 'BOTSID': 'PAC', '7224': '1', 'C531.7233': '52', 'C202.7065': 'CT' }) pci = pac.putloop({'BOTSID': 'PAC'}, {'BOTSID': 'PCI'}) pci.put({'BOTSID': 'PCI', '4233': '33E'}) gin = pci.putloop({'BOTSID': 'PCI'}, {'BOTSID': 'GIN'}) gin.put({ 'BOTSID': 'GIN', '7405': 'BJ', 'C208#1.7402#1': '300000000000014299' }) count = 1 total_qty = 0 for move in picking.move_lines: total_qty += move.product_uom_qty lin = cps_lin.putloop({'BOTSID': 'CPS'}, {'BOTSID': 'LIN'}) lin.put({'BOTSID': 'LIN', '1082': count}) count += 1 lin.put({ 'BOTSID': 'LIN', 'C212.7140': move.product_id.ean13 and self.limit_string(move.product_id.ean13, 35) or (self.limit_string(move.product_id.default_code, 35)), 'C212.7143': 'EN' }) pia = lin.putloop({'BOTSID': 'LIN'}, {'BOTSID': 'PIA'}) pia.put({'BOTSID': 'PIA', '4347': '1'}) pia.put({ 'BOTSID': 'PIA', 'C212#1.7140': self.limit_string(move.product_id.default_code, 35), 'C212#1.7143': 'IN' }) pia = lin.putloop({'BOTSID': 'LIN'}, {'BOTSID': 'PIA'}) pia.put({'BOTSID': 'PIA', '4347': '1'}) pia.put({ 'BOTSID': 'PIA', 'C212#1.7140': self.limit_string(move.product_id.ean13, 17), 'C212#1.7143': 'SA' }) imd = lin.putloop({'BOTSID': 'LIN'}, {'BOTSID': 'IMD'}) imd.put({ 'BOTSID': 'IMD', '7077': 'F', 'C273.3055': '9', 'C273.7008#1': self.limit_string(move.product_id.name, 35) }) qty = lin.putloop({'BOTSID': 'LIN'}, {'BOTSID': 'QTY'}) qty.put({ 'BOTSID': 'QTY', 'C186.6063': '12', 'C186.6060': int(move.product_uom_qty) }) qty = lin.putloop({'BOTSID': 'LIN'}, {'BOTSID': 'QTY'}) qty.put({ 'BOTSID': 'QTY', 'C186.6063': '59', 'C186.6060': int(move.product_uom_qty) }) rff = lin.putloop({'BOTSID': 'LIN'}, {'BOTSID': 'RFF'}) rff.put({ 'BOTSID': 'RFF', 'C506.1153': 'ON', 'C506.1154': picking.origin and self.limit_string(picking.origin, 35) or '' }) out.put({'BOTSID': 'UNH'}, { 'BOTSID': 'CNT', 'C270.6069': '1', 'C270.6066': int(total_qty) }) out.put({'BOTSID': 'UNH'}, { 'BOTSID': 'CNT', 'C270.6069': '2', 'C270.6066': int(count) - 1 }) out.put({'BOTSID': 'UNH'}, { 'BOTSID': 'UNT', '0074': out.getcount() + 1, '0062': self.get_picking_name(picking.name) }) out.writeall() return out.record2string(out.lex_records)