Пример #1
0
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()
Пример #2
0
 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))
Пример #3
0
 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))
Пример #4
0
 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')
Пример #5
0
 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')
Пример #6
0
 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')
Пример #7
0
 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))
Пример #8
0
 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))
Пример #9
0
 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')
Пример #10
0
 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')
Пример #11
0
 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
Пример #12
0
 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')
Пример #13
0
    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')
Пример #14
0
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()
Пример #15
0
    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)
Пример #16
0
    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')
Пример #17
0
 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)