def group_invoice(self):
     date_inv = self.date_invoice
     data_invoice_title = self.invoice_title
     force_period = self.period_id.id
     today_date = time.strftime('%Y-%m-%d')
     obj_inv = self.env['account.invoice']
     dict_info=[]
     models=['cci_missions.certificate','cci_missions.legalization','cci_missions.embassy_folder','cci_missions.ata_carnet']
     
     if self.registration:
         models.append('event.registration')
 
     for model in models:
         if model == 'cci_missions.embassy_folder' or model == 'event.registration':
             state_to_check = 'open'
         else:
             state_to_check = 'draft'
         if model == 'event.registration':
             date_to_check = 'event_id.date_begin'
         elif model == 'cci_missions.ata_carnet':
             date_to_check = 'creation_date'
         elif model == 'cci_missions.embassy_folder':
             date_to_check = 'create_date'
         else:
             date_to_check = 'date'
 
         try:
             model_ids = self.env[model].search([('state','=', state_to_check), (date_to_check, '<=', self.date_invoice)])
         except Exception ,e:
             model_ids = self.env[model].search([('stage_id.name','=', state_to_check), (date_to_check, '<=', self.date_invoice)])
 
         if model_ids:
             read_ids = model_ids.read(['partner_id','order_partner_id','date','creation_date','partner_invoice_id'])
             for element in read_ids:
                 part_info={}
                 if ('partner_id' in element) and element['partner_id']:
                     part_info['partner_id'] = element['partner_id'][0]
                     part_info['id'] = element['id']
                     part_info['model'] = model
 
                 if ('order_partner_id' in element) and element['order_partner_id']:
                     part_info['partner_id'] = element['order_partner_id'][0]
                     part_info['id'] = element['id']
                     part_info['model'] = model
 
                 if ('partner_invoice_id' in element) and element['partner_invoice_id']:
                     part_info['partner_id'] = element['partner_invoice_id'][0]
                     part_info['id'] = element['id']
                     part_info['model'] = model
 
                 if 'date' in element:
                     part_info['date'] = element['date']
 
                 if 'creation_date' in element:
                     part_info['date'] = element['creation_date']
 
                 if part_info and part_info.has_key('partner_id'):
                     dict_info.append(part_info)
Ejemplo n.º 2
0
 def send_all(self, cr, uid, ids, context=None):
     obj = self.browse(cr, uid, ids[0])
     ws = self.pool.get('cenit.serializer')
     mo = self.pool.get(obj.model_id.model, False)
     if mo:
         models = []
         model_ids = mo.search(cr, uid, [], context=context)
         if obj.format == 'json':
             for x in mo.browse(cr, uid, model_ids, context):
                 models.append(ws.serialize(cr, uid, x))
         elif obj.format == 'edi' and hasattr(mo, 'edi_export'):
             models = mo.edi_export(cr, uid, mo.browse(cr, uid, model_ids))
         if model_ids:
             return self._send(cr, uid, obj, models, context)
     return False
Ejemplo n.º 3
0
 def send_all(self, cr, uid, ids, context=None):
     obj = self.browse(cr, uid, ids[0])
     ws = self.pool.get('cenit.serializer')
     mo = self.pool.get(obj.model_id.model, False)
     if mo:
         models = []
         model_ids = mo.search(cr, uid, [], context=context)
         if obj.format == 'json':
             for x in mo.browse(cr, uid, model_ids, context):
                 models.append(ws.serialize(cr, uid, x))
         elif obj.format == 'edi' and hasattr(mo, 'edi_export'):
             models = mo.edi_export(cr, uid, mo.browse(cr, uid, model_ids))
         if model_ids:
             return self._send(cr, uid, obj, models, context)
     return False
Ejemplo n.º 4
0
 def get_graphical_representation(self, cr, uid, model_ids, context=None):
     obj_model = self.pool.get('ir.model')
     if context is None:
         context = {}
     res = {}
     models = []
     for obj in obj_model.browse(cr, uid, model_ids, context=context):
         models.append(obj.model)
     relations = set(
         self._get_graphical_representation(cr, uid, model_ids,
                                            context.get('level', 1)))
     res[obj.model] = (
         "digraph G {\nnode [style=rounded, shape=record];\n%s\n%s }" % (
             self._get_structure(relations, models),
             ''.join('"%s":%s -> "%s":id:n [%s]; // %s\n' %
                     (m, fn, fr, self._get_arrow(ft), ft)
                     for m, fn, ft, fr, fl in relations),
         ))
     return res
Ejemplo n.º 5
0
 def get_graphical_representation(self, cr, uid, model_ids, context=None):
     obj_model = self.pool.get('ir.model')
     if context is None:
         context = {}
     res = {}
     models = []
     for obj in obj_model.browse(cr, uid, model_ids, context=context):
         models.append(obj.model)
     relations = set(
         self._get_graphical_representation(
             cr, uid, model_ids, context.get('level', 1)
         )
     )
     res[obj.model] = (
         "digraph G {\nnode [style=rounded, shape=record];\n%s\n%s }" % (
             self._get_structure(relations, models),
             ''.join('"%s":%s -> "%s":id:n [%s]; // %s\n' % (
                 m, fn, fr, self._get_arrow(ft), ft
             ) for m, fn, ft, fr, fl in relations),
         )
     )
     return res
Ejemplo n.º 6
0
 def _get_notification_model_domain(self):
     models = []
     for model, obj in self.env.registry.models.iteritems():
         if hasattr(obj, '_follow_partner_fields'):
             models.append(model)
     return [('model', 'in', models)]
Ejemplo n.º 7
0
def _group_invoice(self, data):
    date_inv = self.date_invoice
    force_period = self.period_id
    today_date = time.strftime('%Y-%m-%d')
    obj_inv = self.env['account.invoice']
    dict_info = []
    models = [
        'cci_missions.certificate', 'cci_missions.legalization',
        'cci_missions.embassy_folder', 'cci_missions.ata_carnet'
    ]
    if self.registration:
        models.append('event.registration')

    for model in models:
        if model == 'cci_missions.embassy_folder' or model == 'event.registration':
            model_ids = self.env[model].search([('state', '=', 'open')])
        else:
            model_ids = self.env[model].search([('state', '=', 'draft')])

        if model_ids:
            read_ids = self.env[model].read(model_ids, [
                'partner_id', 'order_partner_id', 'date', 'creation_date',
                'partner_invoice_id'
            ])
            for element in read_ids:
                part_info = {}
                if ('partner_id' in element) and element['partner_id']:
                    part_info['partner_id'] = element['partner_id'][0]
                    part_info['id'] = element['id']
                    part_info['model'] = model

                if ('order_partner_id'
                        in element) and element['order_partner_id']:
                    part_info['partner_id'] = element['order_partner_id'][0]
                    part_info['id'] = element['id']
                    part_info['model'] = model

                if ('partner_invoice_id'
                        in element) and element['partner_invoice_id']:
                    part_info['partner_id'] = element['partner_invoice_id'][0]
                    part_info['id'] = element['id']
                    part_info['model'] = model

                if 'date' in element:
                    part_info['date'] = element['date']

                if 'creation_date' in element:
                    part_info['date'] = element['creation_date']

                if part_info:
                    dict_info.append(part_info)

    if not dict_info:
        self.invoice_ids = []
        if self.registration:
            self.message = "No invoices grouped  because no invoices for ATA Carnet, Legalizations, Certifications and (Embassy Folders and Registrations) are in 'Draft' state."
        else:
            self.message = "No invoices grouped  because no invoices for ATA Carnet, Legalizations, Certifications and Embassy Folders are in 'Draft' state."
        return self.message

    partner_ids = list(set([x['partner_id'] for x in dict_info]))
    partner_ids.sort()
    disp_msg = ''

    list_invoice = []
    for partner_id in partner_ids:
        partner = self.env['res.partner'].browse(partner_id)
        final_info = {}
        list_info = []
        list_invoice_ids = []
        self.invoice_info = []
        for element in dict_info:
            final_info = {}
            if element['partner_id'] == partner_id:
                data = {
                    'model': element['model'],
                    'form': {},
                    'id': element['id'],
                    'ids': [element['id']],
                    'report_type': 'pdf'
                }
                final_info['ids'] = []
                final_info['date'] = element['date'][0:10]

                if element['model'] == 'cci_missions.ata_carnet':
                    result = create_invoice_carnet._createInvoices(data)

                    if result['inv_rejected'] > 0 and result['inv_rej_reason']:
                        disp_msg += '\nFor Partner ' + partner.name + ' On ATA Carnet with ' + result[
                            'inv_rej_reason']
                        continue
                    if result['invoice_ids']:
                        list_invoice_ids.append(result['invoice_ids'][0])
                        final_info['ids'].append(result['invoice_ids'][0])
                        list_info.append(final_info)
                        final_info = {}
                        final_info['id'] = element['id']
                        final_info['model'] = element['model']
                        self.invoice_info.append(final_info)

                if element['model'] == 'cci_missions.embassy_folder':
                    result = create_invoice_embassy._createInvoices(data)

                    if result['inv_rejected'] > 0 and result['inv_rej_reason']:
                        disp_msg += '\nFor Partner ' + partner.name + ' On Embassy Folder with ' + result[
                            'inv_rej_reason']
                        continue
                    if result['invoice_ids']:
                        list_invoice_ids.append(result['invoice_ids'][0])
                        final_info['ids'].append(result['invoice_ids'][0])
                        list_info.append(final_info)
                        final_info = {}
                        final_info['id'] = element['id']
                        final_info['model'] = element['model']
                        self.invoice_info.append(final_info)

                if element['model'] in ('cci_missions.certificate',
                                        'cci_missions.legalization'):
                    result = create_invoice._createInvoices(data)

                    if result['inv_rejected'] > 0 and result['inv_rej_reason']:
                        disp_msg += '\nFor Partner ' + partner.name + ' On Certificate or Legalization with ' + result[
                            'inv_rej_reason']
                        continue
                    if result['invoice_ids']:
                        list_invoice_ids.append(result['invoice_ids'][0])
                        final_info['ids'].append(result['invoice_ids'][0])
                        list_info.append(final_info)
                        final_info = {}
                        final_info['id'] = element['id']
                        final_info['model'] = element['model']
                        self.invoice_info.append(final_info)

                if element['model'] == 'event.registration':
                    result = make_invoice._makeInvoices(data)

                    if result['inv_rejected'] > 0 and result['inv_rej_reason']:
                        disp_msg += '\nFor Partner ' + partner.name + ' On Event Registration ' + result[
                            'inv_rej_reason']
                        continue
                    if result['invoice_ids']:
                        list_invoice_ids.append(result['invoice_ids'][0])
                        final_info['ids'].append(result['invoice_ids'][0])
                        list_info.append(final_info)
                        final_info = {}
                        final_info['id'] = element['id']
                        final_info['model'] = element['model']
                        self.invoice_info.append(final_info)

        done_date = []
        date_id_dict = {}
        done_date = list(set([x['date'] for x in list_info]))
        done_date.sort()
        final_list = []
        for date in done_date:
            date_id_dict = {}
            date_id_dict['date'] = date
            date_id_dict['ids'] = []
            for item in list_info:
                if date == item['date']:
                    date_id_dict['ids'] += item['ids']
            final_list.append(date_id_dict)

        count = 0
        list_inv_lines = []
        #marked

        if not final_list:
            continue
        for record in final_list:
            customer_ref = record['date']
            line_obj = self.env['account.invoice.line']
            id_note = line_obj.create({
                'name': customer_ref,
                'state': 'title',
                'sequence': count
            })
            count = count + 1
            list_inv_lines.append(id_note)
            data_inv = obj_inv.browse(record['ids'])
            notes = ''
            for invoice in data_inv:
                if invoice.reference:
                    customer_ref = customer_ref + ' ' + invoice.reference
                if invoice.comment:
                    notes = (notes + ' ' + invoice.comment)

                for line in invoice.invoice_line:
                    if invoice.name:
                        name = invoice.name + ' ' + line.name
                    else:
                        name = line.name
                    #pool_obj.get('account.invoice.line').write(cr,uid,line.id,{'name':name,'sequence':count})


#                    inv_line = line_obj.create(cr, uid, {'name': name,'account_id':line.account_id.id,'price_unit': line.price_unit,'quantity': line.quantity,'discount': False,'uos_id': line.uos_id.id,'product_id':line.product_id.id,'invoice_line_tax_id': [(6,0,line.invoice_line_tax_id)],'note':line.note,'sequence' : count})
                    inv_line = line_obj.create({
                        'name':
                        name,
                        'account_id':
                        line.account_id.id,
                        'price_unit':
                        line.price_unit,
                        'quantity':
                        line.quantity,
                        'discount':
                        False,
                        'uos_id':
                        line.uos_id.id,
                        'product_id':
                        line.product_id.id,
                        'invoice_line_tax_id':
                        [(6, 0, line.invoice_line_tax_id)],
                        'note':
                        line.note,
                        'sequence':
                        count,
                        'cci_special_reference':
                        line.cci_special_reference
                    })
                    count = count + 1
                    list_inv_lines.append(inv_line)
    #            If we want to cancel ==> obj_inv.write(cr,uid,invoice.id,{'state':'cancel'}) here
    #            If we want to delete ==> obj_inv.unlink(cr,uid,list_invoice_ids) after new invoice creation.

            line_obj.write(id_note, {'name': customer_ref})
            id_note1 = line_obj.create({
                'name': notes,
                'state': 'text',
                'sequence': count
            })  # a new line of type 'note' with all the old invoice note
            count = count + 1
            list_inv_lines.append(id_note1)
            id_linee = line_obj.create({
                'state': 'line',
                'sequence': count
            })  #a new line of type 'line'
            count = count + 1
            list_inv_lines.append(id_linee)
            id_stotal = line_obj.create({
                'name': 'Subtotal',
                'state': 'subtotal',
                'sequence': count
            })  #a new line of type 'subtotal'
            count = count + 1
            list_inv_lines.append(id_stotal)
        #end-marked
        inv = {
            'name': 'Grouped Invoice - ' + partner.name,
            'origin': 'Grouped Invoice',
            'type': 'out_invoice',
            'reference': False,
            'account_id': invoice.account_id.id,
            'partner_id': invoice.partner_id.id,
            'address_invoice_id': invoice.address_invoice_id.id,
            'address_contact_id': invoice.address_contact_id.id,
            'invoice_line': [(6, 0, list_inv_lines)],
            'currency_id': invoice.currency_id.id,  # 1
            'comment': "",
            'payment_term': invoice.payment_term.id,
            'date_invoice': date_inv or today_date,
            'period_id': force_period or False
        }
        inv_id = obj_inv.create(inv)
        for item in self.invoice_info:
            pool_obj.get(item['model']).write([item['id']],
                                              {'invoice_id': inv_id})
        disp_msg += '\n' + partner.name + ': ' + str(
            len(data_inv)) + ' Invoice(s) Grouped.'
        list_invoice.append(inv_id)
        obj_inv.unlink(list_invoice_ids)
    self.invoice_ids = list_invoice
    self.message = disp_msg
    return data['form']
Ejemplo n.º 8
0
def _group_invoice(self, data):
    date_inv = self.date_invoice
    force_period = self.period_id
    today_date = time.strftime('%Y-%m-%d')
    obj_inv = self.env['account.invoice']
    dict_info=[]
    models=['cci_missions.certificate','cci_missions.legalization','cci_missions.embassy_folder','cci_missions.ata_carnet']
    if self.registration:
        models.append('event.registration')

    for model in models:
        if model=='cci_missions.embassy_folder' or model=='event.registration':
            model_ids=self.env[model].search([('state','=','open')])
        else:
            model_ids=self.env[model].search([('state','=','draft')])

        if model_ids:
            read_ids=self.env[model].read(model_ids,['partner_id','order_partner_id','date','creation_date','partner_invoice_id'])
            for element in read_ids:
                part_info={}
                if ('partner_id' in element) and element['partner_id']:
                    part_info['partner_id']=element['partner_id'][0]
                    part_info['id']=element['id']
                    part_info['model']=model

                if ('order_partner_id' in element) and element['order_partner_id']:
                    part_info['partner_id']=element['order_partner_id'][0]
                    part_info['id']=element['id']
                    part_info['model']=model

                if ('partner_invoice_id' in element) and element['partner_invoice_id']:
                    part_info['partner_id']=element['partner_invoice_id'][0]
                    part_info['id']=element['id']
                    part_info['model']=model

                if 'date' in element:
                    part_info['date']=element['date']

                if 'creation_date' in element:
                    part_info['date']=element['creation_date']

                if part_info:
                    dict_info.append(part_info)

    if not dict_info:
        self.invoice_ids=[]
        if self.registration:
            self.message ="No invoices grouped  because no invoices for ATA Carnet, Legalizations, Certifications and (Embassy Folders and Registrations) are in 'Draft' state."
        else:
            self.message="No invoices grouped  because no invoices for ATA Carnet, Legalizations, Certifications and Embassy Folders are in 'Draft' state."
        return self.message

    partner_ids = list(set([x['partner_id'] for x in dict_info]))
    partner_ids.sort()
    disp_msg=''

    list_invoice=[]
    for partner_id in partner_ids:
        partner=self.env['res.partner'].browse(partner_id)
        final_info={}
        list_info=[]
        list_invoice_ids=[]
        self.invoice_info=[]
        for element in dict_info:
            final_info={}
            if element['partner_id']==partner_id:
                data={'model':element['model'],'form':{},'id':element['id'],'ids':[element['id']],'report_type': 'pdf'}
                final_info['ids']=[]
                final_info['date']=element['date'][0:10]

                if element['model']=='cci_missions.ata_carnet':
                    result=create_invoice_carnet._createInvoices(data)

                    if result['inv_rejected']>0 and result['inv_rej_reason']:
                        disp_msg +='\nFor Partner '+ partner.name +' On ATA Carnet with ' + result['inv_rej_reason']
                        continue
                    if result['invoice_ids']:
                        list_invoice_ids.append(result['invoice_ids'][0])
                        final_info['ids'].append(result['invoice_ids'][0])
                        list_info.append(final_info)
                        final_info={}
                        final_info['id']=element['id']
                        final_info['model']=element['model']
                        self.invoice_info.append(final_info)

                if element['model']=='cci_missions.embassy_folder':
                    result=create_invoice_embassy._createInvoices(data)

                    if result['inv_rejected']>0 and result['inv_rej_reason']:
                        disp_msg +='\nFor Partner '+ partner.name +' On Embassy Folder with ' + result['inv_rej_reason']
                        continue
                    if result['invoice_ids']:
                        list_invoice_ids.append(result['invoice_ids'][0])
                        final_info['ids'].append(result['invoice_ids'][0])
                        list_info.append(final_info)
                        final_info={}
                        final_info['id']=element['id']
                        final_info['model']=element['model']
                        self.invoice_info.append(final_info)

                if element['model'] in ('cci_missions.certificate','cci_missions.legalization'):
                    result=create_invoice._createInvoices(data)

                    if result['inv_rejected']>0 and result['inv_rej_reason']:
                        disp_msg +='\nFor Partner '+ partner.name +' On Certificate or Legalization with ' + result['inv_rej_reason']
                        continue
                    if result['invoice_ids']:
                        list_invoice_ids.append(result['invoice_ids'][0])
                        final_info['ids'].append(result['invoice_ids'][0])
                        list_info.append(final_info)
                        final_info={}
                        final_info['id']=element['id']
                        final_info['model']=element['model']
                        self.invoice_info.append(final_info)

                if element['model']=='event.registration':
                    result=make_invoice._makeInvoices(data)

                    if result['inv_rejected']>0 and result['inv_rej_reason']:
                        disp_msg +='\nFor Partner '+ partner.name +' On Event Registration ' + result['inv_rej_reason']
                        continue
                    if result['invoice_ids']:
                        list_invoice_ids.append(result['invoice_ids'][0])
                        final_info['ids'].append(result['invoice_ids'][0])
                        list_info.append(final_info)
                        final_info={}
                        final_info['id']=element['id']
                        final_info['model']=element['model']
                        self.invoice_info.append(final_info)

        done_date=[]
        date_id_dict={}
        done_date=list(set([x['date'] for x in list_info]))
        done_date.sort()
        final_list=[]
        for date in done_date:
            date_id_dict={}
            date_id_dict['date']=date
            date_id_dict['ids']=[]
            for item in list_info:
                if date==item['date']:
                    date_id_dict['ids'] +=item['ids']
            final_list.append(date_id_dict)

        count=0
        list_inv_lines=[]
        #marked

        if not final_list:
            continue
        for record in final_list:
            customer_ref = record['date']
            line_obj = self.env['account.invoice.line']
            id_note=line_obj.create({'name':customer_ref,'state':'title','sequence':count})
            count=count+1
            list_inv_lines.append(id_note)
            data_inv=obj_inv.browse(record['ids'])
            notes = ''
            for invoice in data_inv:
                if invoice.reference:
                    customer_ref = customer_ref +' ' + invoice.reference
                if invoice.comment:
                    notes = (notes + ' ' + invoice.comment)

                for line in invoice.invoice_line:
                    if invoice.name:
                        name = invoice.name +' '+ line.name
                    else:
                        name = line.name
                    #pool_obj.get('account.invoice.line').write(cr,uid,line.id,{'name':name,'sequence':count})
#                    inv_line = line_obj.create(cr, uid, {'name': name,'account_id':line.account_id.id,'price_unit': line.price_unit,'quantity': line.quantity,'discount': False,'uos_id': line.uos_id.id,'product_id':line.product_id.id,'invoice_line_tax_id': [(6,0,line.invoice_line_tax_id)],'note':line.note,'sequence' : count})
                    inv_line = line_obj.create({'name': name,'account_id':line.account_id.id,'price_unit': line.price_unit,'quantity': line.quantity,'discount': False,'uos_id': line.uos_id.id,'product_id':line.product_id.id,'invoice_line_tax_id': [(6,0,line.invoice_line_tax_id)],'note':line.note,'sequence' : count,'cci_special_reference': line.cci_special_reference})
                    count=count+1
                    list_inv_lines.append(inv_line)
    #            If we want to cancel ==> obj_inv.write(cr,uid,invoice.id,{'state':'cancel'}) here
    #            If we want to delete ==> obj_inv.unlink(cr,uid,list_invoice_ids) after new invoice creation.

            line_obj.write(id_note,{'name':customer_ref})
            id_note1=line_obj.create({'name':notes,'state':'text','sequence':count})# a new line of type 'note' with all the old invoice note
            count=count+1
            list_inv_lines.append(id_note1)
            id_linee=line_obj.create({'state':'line','sequence':count}) #a new line of type 'line'
            count=count+1
            list_inv_lines.append(id_linee)
            id_stotal=line_obj.create({'name':'Subtotal','state':'subtotal','sequence':count})#a new line of type 'subtotal'
            count=count+1
            list_inv_lines.append(id_stotal)
        #end-marked
        inv = {
                'name': 'Grouped Invoice - ' + partner.name,
                'origin': 'Grouped Invoice',
                'type': 'out_invoice',
                'reference': False,
                'account_id': invoice.account_id.id,
                'partner_id': invoice.partner_id.id,
                'address_invoice_id':invoice.address_invoice_id.id,
                'address_contact_id':invoice.address_contact_id.id,
                'invoice_line': [(6,0,list_inv_lines)],
                'currency_id' :invoice.currency_id.id,# 1
                'comment': "",
                'payment_term':invoice.payment_term.id,
                'date_invoice':date_inv or today_date,
                'period_id':force_period or False
            }
        inv_id = obj_inv.create(inv)
        for item in self.invoice_info:
            pool_obj.get(item['model']).write([item['id']], {'invoice_id' : inv_id})
        disp_msg +='\n'+ partner.name + ': '+ str(len(data_inv)) +' Invoice(s) Grouped.'
        list_invoice.append(inv_id)
        obj_inv.unlink(list_invoice_ids)
    self.invoice_ids=list_invoice
    self.message=disp_msg
    return data['form']
Ejemplo n.º 9
0
    def button_update_self(self, cr, uid, ids, context=None):
        registry = openerp.registry(cr.dbname)

        def process_sql_file(cr, fp):
            queries = fp.read().split(';')
            for query in queries:
                new_query = ' '.join(query.split())
                if new_query:
                    cr.execute(new_query)

        def _get_files_of_kind(kind):
            if kind == 'demo':
                kind = ['demo_xml', 'demo']
            elif kind == 'data':
                kind = ['init_xml', 'update_xml', 'data']
            if isinstance(kind, str):
                kind = [kind]
            files = []
            for k in kind:
                for f in package[k]:
                    files.append(f)
                    if k.endswith('_xml') and not (k == 'init_xml'
                                                   and not f.endswith('.xml')):
                        correct_key = 'demo' if k.count('demo') else 'data'
                        _logger.warning(
                            "module %s: key '%s' is deprecated in favor of '%s' for file '%s'.",
                            module['name'], k, correct_key, f)
            return files

        def _load_data(cr, module_name, idref, mode, kind):
            """

            kind: data, demo, test, init_xml, update_xml, demo_xml.

            noupdate is False, unless it is demo data or it is csv data in
            init mode.

            """
            try:
                if kind in ('demo', 'test'):
                    threading.currentThread().testing = True
                for filename in _get_files_of_kind(kind):
                    _logger.info("loading %s/%s", module_name, filename)
                    noupdate = False
                    if kind in ('demo',
                                'demo_xml') or (filename.endswith('.csv') and
                                                kind in ('init', 'init_xml')):
                        noupdate = True
                    tools.convert_file(cr, module_name, filename, idref, mode,
                                       noupdate, kind,
                                       registry._assertion_report)
            finally:
                if kind in ('demo', 'test'):
                    threading.currentThread().testing = False

        mode = 'update'
        for module in self.read(cr, uid, ids, [
                'name',
        ], context=context):
            idref = {}
            models = []
            for cls in openerp.models.MetaModel.module_to_models.get(
                    module['name'], []):
                model_name = cls._name
                if model_name == None:
                    if cls._inherit != None:
                        if isinstance(cls._inherit, (set, list, tuple)):
                            model_name = cls._inherit[0]
                        else:
                            model_name = cls._inherit
                    else:
                        continue

                if model_name != None and model_name not in models:
                    models.append(model_name)
            models = [self.pool.get(m) for m in models]

            init_module_models(cr, module['name'], models)
            registry.setup_models(cr, partial=True)

            package = openerp.modules.module.load_information_from_description_file(
                module['name'])

            modobj = self.pool.get('ir.module.module')

            modobj.check(cr, SUPERUSER_ID, [module['id']])

            _load_data(cr, module['name'], idref, mode, kind='data')
            registry['ir.ui.view']._validate_module_views(
                cr, SUPERUSER_ID, module['name'])
            modobj.update_translations(cr, SUPERUSER_ID, [module['id']], None,
                                       {'overwrite': True})
        cr.commit()
        return True
Ejemplo n.º 10
0
    def button_update_self(self, cr, uid, ids, context=None):
        registry = openerp.registry(cr.dbname)
        def process_sql_file(cr, fp):
            queries = fp.read().split(';')
            for query in queries:
                new_query = ' '.join(query.split())
                if new_query:
                    cr.execute(new_query)

        def _get_files_of_kind(kind):
            if kind == 'demo':
                kind = ['demo_xml', 'demo']
            elif kind == 'data':
                kind = ['init_xml', 'update_xml', 'data']
            if isinstance(kind, str):
                kind = [kind]
            files = []
            for k in kind:
                for f in package[k]:
                    files.append(f)
                    if k.endswith('_xml') and not (k == 'init_xml' and not f.endswith('.xml')):
                        correct_key = 'demo' if k.count('demo') else 'data'
                        _logger.warning(
                            "module %s: key '%s' is deprecated in favor of '%s' for file '%s'.",
                            module['name'], k, correct_key, f
                        )
            return files
    
        def _load_data(cr, module_name, idref, mode, kind):
            """

            kind: data, demo, test, init_xml, update_xml, demo_xml.

            noupdate is False, unless it is demo data or it is csv data in
            init mode.

            """
            try:
                if kind in ('demo', 'test'):
                    threading.currentThread().testing = True
                for filename in _get_files_of_kind(kind):
                    _logger.info("loading %s/%s", module_name, filename)
                    noupdate = False
                    if kind in ('demo', 'demo_xml') or (filename.endswith('.csv') and kind in ('init', 'init_xml')):
                        noupdate = True
                    tools.convert_file(cr, module_name, filename, idref, mode, noupdate, kind, registry._assertion_report)
            finally:
                if kind in ('demo', 'test'):
                    threading.currentThread().testing = False
        
        mode = 'update'
        for module in self.read(cr, uid, ids, ['name',], context=context):
            idref = {}
            models = []
            for cls in openerp.models.MetaModel.module_to_models.get(module['name'], []):
                model_name = cls._name
                if model_name == None:
                    if cls._inherit != None:
                        if isinstance(cls._inherit, (set, list, tuple)):
                            model_name = cls._inherit[0]
                        else:
                            model_name = cls._inherit
                    else:
                        continue
                    
                if model_name != None and model_name not in models:
                    models.append(model_name)
            models = [self.pool.get(m) for m in models]
            
            init_module_models(cr, module['name'], models)
            registry.setup_models(cr, partial=True)
            
            package = openerp.modules.module.load_information_from_description_file(module['name'])
            
            modobj = self.pool.get('ir.module.module')

            modobj.check(cr, SUPERUSER_ID, [module['id']])
            
            _load_data(cr, module['name'], idref, mode, kind='data')
            registry['ir.ui.view']._validate_module_views(cr, SUPERUSER_ID, module['name'])
            modobj.update_translations(cr, SUPERUSER_ID, [module['id']], None, {'overwrite': True})
        cr.commit()
        return True