def reset_workflow(self, cr, uid, ids, *args): # Called by workflow, launch needed action depending # of the next state and reset the workflow transaction_obj = self.pool.get('account.wallet.transaction') for proposition in self.browse(cr, uid, ids): state = proposition.state role_to_test = 'is_user' if state == 'rejected': role_to_test = 'is_announcer' elif state == 'paid': role_to_test = 'is_receiver' self.test_access_role(cr, uid, ids, role_to_test, *args) if state in ['cancel', 'rejected', 'paid']: workflow.trg_delete(uid, 'marketplace.proposition', proposition.id, cr) workflow.trg_create(uid, 'marketplace.proposition', proposition.id, cr) if state == 'paid': skip_confirm = transaction_obj.get_skip_confirm( cr, uid, proposition.transaction_id) if not skip_confirm: workflow.trg_validate(uid, 'marketplace.proposition', proposition.id, 'proposition_draft_confirm_refund', cr) else: workflow.trg_validate( uid, 'marketplace.proposition', proposition.id, 'proposition_paid_cancel_through_draft', cr) return True
def reset_workflow(self, cr, uid, ids, *args): # Called by workflow, launch needed action depending # of the next state and reset the workflow for transaction in self.browse(cr, uid, ids): state = transaction.state role_to_test = 'is_sender' if state == 'done': role_to_test = 'is_receiver' self.test_access_role(cr, uid, ids, role_to_test, *args) workflow.trg_delete(uid, 'exchange.transaction', transaction.id, cr) workflow.trg_create(uid, 'exchange.transaction', transaction.id, cr) if state == 'done': skip_confirm = self.get_skip_confirm(cr, uid, transaction) if not skip_confirm: workflow.trg_validate(uid, 'exchange.transaction', transaction.id, 'transaction_draft_confirm_refund', cr) else: workflow.trg_validate( uid, 'exchange.transaction', transaction.id, 'transaction_done_cancel_through_draft', cr) return True
def action_revert_done(self): for picking in self: # only in incoming pickings if picking.picking_type_code != 'incoming': raise exceptions.Warning( _('Picking %s is not incoming. ' 'Only valid in incoming pickings.') % (picking.name)) if not picking.has_revert_picking(): raise exceptions.Warning( _('Picking %s is not reverted: ' 'revert it first.') % (picking.name)) if picking.has_valuation_moves(): raise exceptions.Warning( _('Picking %s has valuation moves: ' 'remove them first.') % (picking.name)) if picking.invoice_id and picking.invoice_id.state != 'cancel': raise exceptions.Warning( _('Picking %s has invoices!') % (picking.name)) picking.move_lines.write({'state': 'draft'}) picking.state = 'draft' if picking.invoice_state == 'invoiced' and not picking.invoice_id or picking.invoice_id.state == 'cancel': picking.invoice_state = '2binvoiced' # Deleting the existing instance of workflow workflow.trg_delete(self._uid, 'stock.picking', picking.id, self._cr) workflow.trg_create(self._uid, 'stock.picking', picking.id, self._cr) picking.message_post( _("The picking has been re-opened and set to draft state")) return
def reset_workflow(self, cr, uid, ids, *args): # Called by workflow, launch needed action depending # of the next state and reset the workflow for transaction in self.browse(cr, uid, ids): state = transaction.state role_to_test = 'is_sender' if state == 'done': role_to_test = 'is_receiver' self.test_access_role(cr, uid, ids, role_to_test, *args) workflow.trg_delete( uid, 'exchange.transaction', transaction.id, cr ) workflow.trg_create( uid, 'exchange.transaction', transaction.id, cr ) if state == 'done': skip_confirm = self.get_skip_confirm(cr, uid, transaction) if not skip_confirm: workflow.trg_validate( uid, 'exchange.transaction', transaction.id, 'transaction_draft_confirm_refund', cr ) else: workflow.trg_validate( uid, 'exchange.transaction', transaction.id, 'transaction_done_cancel_through_draft', cr ) return True
def action_cancel_draft(self, cr, uid, ids, *args): self.write(cr, uid, ids, {'state': 'draft'}) for distinta_id in ids: workflow.trg_delete(uid, 'riba.distinta', distinta_id, cr) workflow.trg_create(uid, 'riba.distinta', distinta_id, cr) return True
def action_cancel_draft(self, cr, uid, ids, *args): self.write(cr, uid, ids, {'state':'draft'}) for distinta_id in ids: workflow.trg_delete(uid, 'riba.distinta', distinta_id, cr) workflow.trg_create(uid, 'riba.distinta', distinta_id, cr) return True
def reset_workflow(self, cr, uid, ids, *args): # Called by workflow, launch needed action depending of the next state and reset the workflow transaction_obj = self.pool.get('account.wallet.transaction') for proposition in self.browse(cr, uid, ids): state = proposition.state role_to_test = 'is_user' if state == 'rejected': role_to_test = 'is_announcer' elif state == 'paid': role_to_test = 'is_receiver' self.test_access_role(cr, uid, ids, role_to_test, *args) workflow.trg_delete(uid, 'marketplace.proposition', proposition.id, cr) workflow.trg_create(uid, 'marketplace.proposition', proposition.id, cr) if state == 'paid': skip_confirm = transaction_obj.get_skip_confirm(cr, uid, proposition.transaction_id) if not skip_confirm: workflow.trg_validate( uid, 'marketplace.proposition', proposition.id, 'proposition_draft_confirm_refund', cr ) else: workflow.trg_validate( uid, 'marketplace.proposition', proposition.id, 'proposition_paid_cancel_through_draft', cr ) return True
def action_cancel_draft(self): for riba_list in self: workflow.trg_delete(self.env.user.id, 'riba.distinta', riba_list.id, self._cr) workflow.trg_create(self.env.user.id, 'riba.distinta', riba_list.id, self._cr) riba_list.state = 'draft' riba_list.line_ids.state = 'draft'
def change_done_pending(self,cr,uid,ids,context=None): self.write(cr,SUPERUSER_ID,ids,{'state':'pending','submitted_by':False},context) attendance = self.pool.get('attendance.attendance') for line in self.browse(cr,uid,ids,context): workflow.trg_delete(SUPERUSER_ID, 'attendance.line', line.id, cr) workflow.trg_create(SUPERUSER_ID, 'attendance.line', line.id, cr) if line.attendance_id.state == "submitted": #if the attendance record workflow is finished then reset it attendance.reset_workflow(cr,uid,line.attendance_id.id,context=context) return True
def action_recover(self, cr, uid, ids, context=None): """ Called when the user clicks the draft button to create a new workflow instance. """ self.write(cr, uid, ids, {'state': 'new'}) for item_id in ids: workflow.trg_create(uid, 'account_fiscal_year_closing.fyc', item_id, cr) return True
def reset_workflow(self, cr, uid, ids, *args): # Called by workflow, launch needed action depending of the next state and reset the workflow self.test_access_role(cr, uid, ids, 'is_user', *args) for announcement in self.browse(cr, uid, ids): state = announcement.state self.write(cr, uid, [announcement.id], {'state': 'draft'}) workflow.trg_delete(uid, 'marketplace.announcement', announcement.id, cr) workflow.trg_create(uid, 'marketplace.announcement', announcement.id, cr) if state == 'done': workflow.trg_validate(uid, 'marketplace.announcement', announcement.id, 'announcement_draft_open', cr) return True
def action_set_to_draft(self): """ This method is used to change the state to draft of the hotel restaurant reservation -------------------------------------------- @param self: object pointer """ self.write({'state': 'draft'}) for res_id in self.ids: workflow.trg_create(self._uid, self._name, res_id, self._cr) return True
def action_set_to_dirty(self): """ This method is used to change the state to dirty of the hotel housekeeping --------------------------------------- @param self: object pointer """ self.write({'state': 'dirty'}) for hs_keep_id in self.ids: workflow.trg_create(self._uid, self._name, hs_keep_id, self._cr) return True
def action_cancel_draft(self): lines = self.env['sale.order.line'].\ search([ ('order_id', 'in', self.ids), ('state', '=', 'cancel'), ]) self.write({ 'state': 'draft', 'invoice_ids': [(6, 0, [])], 'shipped': 0, }) lines.write({ 'invoiced': False, 'state': 'draft', 'invoice_lines': [(6, 0, [])], }) for sale in self: # Deleting the existing instance of workflow for SO workflow.trg_delete(self._uid, 'sale.order', sale.id, self._cr) workflow.trg_create(self._uid, 'sale.order', sale.id, self._cr) return True
def action_revert_done(self): for picking in self: if picking.has_valuation_moves(): raise exceptions.Warning( _('Picking %s has valuation moves: ' 'remove them first.') % (picking.name)) if picking.invoice_id: raise exceptions.Warning( _('Picking %s has invoices!') % (picking.name)) picking.move_lines.write({'state': 'draft'}) picking.state = 'draft' if picking.invoice_state == 'invoiced' and not picking.invoice_id: picking.invoice_state = '2binvoiced' # Deleting the existing instance of workflow workflow.trg_delete(self._uid, 'stock.picking', picking.id, self._cr) workflow.trg_create(self._uid, 'stock.picking', picking.id, self._cr) picking.message_post( _("The picking has been re-opened and set to draft state")) return
def action_revert_done(self): for picking in self: if picking.has_valuation_moves(): raise exceptions.Warning( _('Picking %s has valuation moves: ' 'remove them first.') % (picking.name)) if picking.invoice_id: raise exceptions.Warning( _('Picking %s has invoices!') % (picking.name)) for move in picking.move_lines: for quant in move.quant_ids: if move.location_id.id == quant.location_id.id: quant.qty += move.product_uom_qty elif move.location_dest_id.id == quant.location_id.id: quant.qty -= move.product_uom_qty move.procurement_id.write({'state': 'exception'}) picking.move_lines.write({'state': 'draft'}) picking.pack_operation_ids.unlink() picking.state = 'draft' if picking.invoice_state == 'invoiced' and not picking.invoice_id: picking.invoice_state = '2binvoiced' # Deleting the existing instance of workflow workflow.trg_delete(self._uid, 'stock.picking', picking.id, self._cr) workflow.trg_create(self._uid, 'stock.picking', picking.id, self._cr) picking.message_post( _("The picking has been re-opened and set to draft state")) if picking.sale_id: picking.sale_id.write({'state': 'progress'}) instance = self.env['workflow.instance'].search([ ('res_type', '=', 'sale.order'), ('res_id', '=', picking.sale_id.id) ]) instance.state = 'active' for item in self.env['workflow.workitem'].search([ ('inst_id', '=', instance.id) ]): item.state = 'active' return
def action_revert_done(self): for picking in self: if picking.has_valuation_moves(): raise exceptions.Warning( _('Picking %s has valuation moves: ' 'remove them first.') % (picking.name)) if picking.invoice_id: raise exceptions.Warning( _('Picking %s has invoices!') % (picking.name)) picking.move_lines.write({'state': 'draft'}) picking.state = 'draft' if picking.invoice_state == 'invoiced' and not picking.invoice_id: picking.invoice_state = '2binvoiced' # Deleting the existing instance of workflow workflow.trg_delete( self._uid, 'stock.picking', picking.id, self._cr) workflow.trg_create( self._uid, 'stock.picking', picking.id, self._cr) picking.message_post( _("The picking has been re-opened and set to draft state")) return
def action_revert_done(self): for picking in self: if picking.has_valuation_moves(): raise exceptions.Warning( _('La orden de entrega %s tiene movimientos: ' 'eliminelos primero.') % (picking.name)) if picking.invoice_id: raise exceptions.Warning( _('La orden de entrega %s esta facturada!') % (picking.name)) picking.move_lines.write({'state': 'draft'}) picking.state = 'draft' if picking.invoice_state == 'invoiced' and not picking.invoice_id: picking.invoice_state = '2binvoiced' # Deleting the existing instance of workflow workflow.trg_delete(self._uid, 'stock.picking', picking.id, self._cr) workflow.trg_create(self._uid, 'stock.picking', picking.id, self._cr) picking.message_post( _("La orden de entrega se rehizo, convirtiendose en estado borrador" )) return
def change_done_pending(self,cr,uid,ids,context=None): self.write(cr,uid,ids,{'state':'pending'},context) for attendance in ids: workflow.trg_delete(SUPERUSER_ID, 'attendance.attendance', attendance, cr) workflow.trg_create(SUPERUSER_ID, 'attendance.attendance', attendance, cr) return True
# -*- coding: utf-8 -*-
def reset_workflow(self,cr,uid,id,context): workflow.trg_delete(SUPERUSER_ID, 'attendance.attendance', id, cr) workflow.trg_create(SUPERUSER_ID, 'attendance.attendance', id, cr) return True
def action_reopen(self, cr, uid, ids, context=None): """ Changes SO state to draft. @return: True """ _logger = logging.getLogger(__name__) _logger.debug('FGF sale_order action reopen %s' % (ids)) self.allow_reopen(cr, uid, ids, context=None) order_line_obj = self.pool.get('sale.order.line') po_line_obj = self.pool.get('purchase.order.line') move_obj = self.pool.get('stock.move') invoice_obj = self.pool.get('account.invoice') context.update({'cancel_procurement': True}) for order in self.browse(cr, uid, ids, context=context): proc_group_id = order.procurement_group_id if proc_group_id: #Raise warning if PO/MO is confirmed for proc in proc_group_id.procurement_ids: if proc.purchase_id and proc.purchase_id.state not in [ 'draft', 'cancel' ]: raise osv.except_osv( _('Warning'), _('You can not reset sales order %s as related Purchase order %s is confirmed.' % (order.name, proc.purchase_id.name))) if proc.production_id and proc.production_id.state not in [ 'new', 'cancel', 'confirmed', 'ready' ]: raise osv.except_osv( _('Warning'), _('You can not reset sales order %s as production started for related Manufacturing order %s.' % (order.name, proc.production_id.name))) for proc in proc_group_id.procurement_ids: for move in proc.move_ids: move_obj.action_cancel(cr, uid, move.id, context=context) proc.cancel() for oline in order.order_line: oline.procurement_ids = False if order.invoice_ids: flag = False for invoice in order.invoice_ids: if invoice.state in [ 'paid', 'open', 'proforma', 'proforma2' ]: raise osv.except_osv( _('Warning'), _('You can not reset this Sale Order as it\'s invoice not in draft' )) if invoice.state in ['draft']: invoice_obj.unlink(cr, uid, [invoice.id], context=context) self.write(cr, uid, order.id, {'state': 'draft'}) line_ids = [] for line in order.order_line: line_ids.append(line.id) order_line_obj.write(cr, uid, line_ids, { 'state': 'draft', 'invoiced': False }) _logger.debug('FGF sale_order trg del %s' % (order.id)) workflow.trg_delete(uid, 'sale.order', order.id, cr) _logger.debug('FGF sale_order trg create %s' % (order.id)) workflow.trg_create(uid, 'sale.order', order.id, cr) pol_fields = po_line_obj.fields_get(cr, uid, context=context) sol_fields = order_line_obj.fields_get(cr, uid, context=context) so_fields = self.fields_get(cr, uid, context=context) if so_fields.has_key('has_limit') and so_fields.has_key('by_pass'): self.write(cr, uid, ids, { 'has_limit': order.partner_id.allow_credit, 'by_pass': False }) if so_fields.has_key('ticket_button_visible'): self.write(cr, uid, ids, {'ticket_button_visible': False}) if so_fields.has_key('ticket_generated'): self.write(cr, uid, ids, {'ticket_generated': False}) if so_fields.has_key('generated_by_admin'): self.write(cr, uid, ids, {'generated_by_admin': False}) if so_fields.has_key('generated_by_oem'): self.write(cr, uid, ids, {'generated_by_oem': False}) if so_fields.has_key('generated_by_admin'): self.write(cr, uid, ids, {'generated_by_admin': False}) if so_fields.has_key('is_mo_created'): self.write(cr, uid, ids, {'is_mo_created': False}) if so_fields.has_key('carrier') and so_fields.has_key( 'method') and so_fields.has_key('ship_ids'): self.write(cr, uid, ids, { 'carrier': '', 'method': '', 'ship_ids': [] }) #Remove SO ref from PO line if ob_sol_to_po installed if pol_fields.has_key('so_ref') and pol_fields.has_key( 'so_line_ref'): po_line_ids = po_line_obj.search(cr, uid, [('so_ref', '=', order.name)], context=context) po_line_obj.write(cr, uid, po_line_ids, { 'so_ref': False, 'so_line_ref': False }, context=context) #Remove PO ref from SO line if ob_sol_to_po installed if sol_fields.has_key('po_ref') and sol_fields.has_key( 'po_line_ref'): for oline in order.order_line: order_line_obj.write(cr, uid, oline.id, { 'po_ref': False, 'po_line_ref': False }, context=context) return True
def bulk_invoice_ar(self, cr, uid, data, context=None): result = [] invoices = [] invoice_lines = [] moves = [] move_lines = [] # wkf_instances = [] # wf_service = netsvc.LocalService("workflow") # INSERT HEADER INVOICE start_time = datetime.now() begin_time = start_time company_cols = {} analytic4_cols = {} analytic3_cols = {} analytic2_cols = {} analytic1_cols = {} account_cols = {} branch_cols = {} period_cols = {} journal_cols = {} invoice_cols = {} headeraccount_cols = {} detailaccount_cols = {} moveid_cols = {} company_id_period_cols = {} invoice_vals = [] for n, dt in enumerate(data, start=0): module_analytic = dt['Analytic Account'].split('.', 1)[0] identifier_analytic = dt['Analytic Account'].split('.', 1)[1] module_account = dt['Header Account'].split('.', 1)[0] identifier_account = dt['Header Account'].split('.', 1)[1] module_branch = dt['Branch'].split('.', 1)[0] identifier_branch = dt['Branch'].split('.', 1)[1] module_company = dt['Company'].split('.', 1)[0] identifier_company = dt['Company'].split('.', 1)[1] module_company_identifier_company = '%s__%s' % (module_company, identifier_company) if not module_company_identifier_company in company_cols: cr.execute( """SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_company, identifier_company)) company_id = cr.fetchone() company_id = list == type( company_id) and company_id[0] or company_id company_cols[module_company_identifier_company] = company_id else: company_id = company_cols[module_company_identifier_company] module_analytic_identifier_analytic = '%s__%s' % ( module_analytic, identifier_analytic) if not module_analytic_identifier_analytic in analytic4_cols: cr.execute( """SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_analytic, identifier_analytic)) analytic_4 = cr.fetchone() analytic4_cols[ module_analytic_identifier_analytic] = analytic_4 else: analytic_4 = analytic4_cols[ module_analytic_identifier_analytic] if not analytic_4 in analytic3_cols: cr.execute( """SELECT parent_id FROM account_analytic_account WHERE id = %s """, (analytic_4)) analytic_3 = cr.fetchone() analytic_3 = self.pool.get('account.analytic.account').browse( cr, uid, [analytic_3[0]], context=None) analytic3_cols[analytic_4] = analytic_3 else: analytic_3 = analytic3_cols[analytic_4] if not analytic_3 in analytic2_cols: analytic_2 = self._get_analytic_2(cr, uid, analytic_3, context=None) analytic2_cols[analytic_3] = analytic_2 else: analytic_2 = analytic2_cols[analytic_3] if not company_id in analytic1_cols: cr.execute( """SELECT id FROM account_analytic_account WHERE segmen = 1 AND company_id = %s """, ((company_id, ))) analytic_1 = cr.fetchone() analytic1_cols[company_id] = analytic_1 else: analytic_1 = analytic1_cols[company_id] module_account_identifier_account = '%s__%s' % (module_account, identifier_account) if not module_account_identifier_account in account_cols: cr.execute( """SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_account, identifier_account)) account_id = int(cr.fetchone()[0]) account_cols[module_account_identifier_account] = account_id else: account_id = account_cols[module_account_identifier_account] module_branch_identifier_branch = '%s__%s' % (module_branch, identifier_branch) if not module_branch_identifier_branch in branch_cols: cr.execute( """SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_branch, identifier_branch)) branch_id = int(cr.fetchone()[0]) branch_cols[module_branch_identifier_branch] = branch_id else: branch_id = branch_cols[module_branch_identifier_branch] if not company_id in period_cols: cr.execute( """SELECT id FROM account_period WHERE name = %s AND company_id = %s """, (dt['Period'], company_id)) period_id = cr.fetchone() period_id = list == type(period_id) and int( period_id[0]) or period_id period_cols[company_id] = period_id else: period_id = period_cols[company_id] if not company_id in journal_cols: cr.execute( """SELECT id FROM account_journal WHERE name = %s AND company_id = %s """, (dt['Journal'], company_id)) journal_id = cr.fetchone() journal_id = list == type(journal_id) and int( journal_id[0]) or journal_id journal_cols[company_id] = journal_id else: journal_id = journal_cols[company_id] invoice_vals.append({ 'create_uid': 1, 'create_date': datetime.now(), 'write_date': datetime.now(), 'write_uid': 1, 'division': dt['Division'], 'partner_id': dt['Partner'], 'origin': dt['Source Document'], 'supplier_invoice_number': dt['Supplier Invoice Number'], 'date_due': dt['Due Date'], 'branch_id': branch_id, 'journal_id': journal_id, 'period_id': period_id, 'analytic_1': list == type(analytic_1) and analytic_1[0] or analytic_1, 'analytic_2': list == type(analytic_2) and analytic_2[0] or analytic_2, 'analytic_3': analytic_3.id, 'analytic_4': list == type(analytic_4) and analytic_4[0] or analytic_4, 'date_invoice': dt['Date'], 'company_id': company_id, 'state': 'open', 'currency_id': 13, 'reference_type': 'none', 'type': dt['Invoice Type'], 'account_id': account_id, 'amount_total': dt['Line / Price Unit'], 'residual': dt['Line / Price Unit'], 'consolidated': 'Consolidated' in dt and dt['Consolidated'] or True, }) invoice_ids = self.insert_many(cr, uid, 'account_invoice', 'origin,id', invoice_vals, context=None) inv_ids = [x[1] for x in invoice_ids] invoice_ids = dict(invoice_ids) # data_structure = ( # 1, # datetime.now(), # datetime.now(), # 1, # dt['Division'], # dt['Partner'], # dt['Source Document'], # dt['Supplier Invoice Number'], # dt['Due Date'], # branch_id, # journal_id, # period_id, # analytic_1[0], # analytic_2[0], # analytic_3.id, # analytic_4[0], # dt['Date'], # company_id, # 'open', # 13, # 'none', # dt['Invoice Type'], # account_id, # dt['Line / Price Unit'], # dt['Line / Price Unit'], # ) # invoices+=[data_structure] # cr.executemany("""INSERT INTO account_invoice # (create_uid,create_date,write_date,write_uid,division,partner_id,origin,supplier_invoice_number,date_due,branch_id,journal_id,period_id,analytic_1,analytic_2,analytic_3,analytic_4,date_invoice,company_id,state,currency_id,reference_type,type,account_id,amount_total,residual) # VALUES ("""+ ','.join(['%s' for x in range(0, len(data_structure))])+""")""",invoices) finish_time = datetime.now() msg = 'Duration to insert %s of account invoice = %s' % ( len(data), format(finish_time - start_time)) _logger.warning(msg) # INSERT DETAIL INVOICE source_document_cols = {} start_time = datetime.now() for dt in data: module_analytic = dt['Analytic Account'].split('.', 1)[0] identifier_analytic = dt['Analytic Account'].split('.', 1)[1] module_account = dt['Line / Account'].split('.', 1)[0] identifier_account = dt['Line / Account'].split('.', 1)[1] module_company = dt['Company'].split('.', 1)[0] identifier_company = dt['Company'].split('.', 1)[1] module_company_identifier_company = '%s__%s' % (module_company, identifier_company) if not module_company_identifier_company in company_cols: cr.execute( """SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_company, identifier_company)) company_id = int(cr.fetchone()[0]) company_cols[module_company_identifier_company] = company_id else: company_id = company_cols[module_company_identifier_company] module_analytic_identifier_analytic = '%s__%s' % ( module_analytic, identifier_analytic) if not module_analytic_identifier_analytic in analytic4_cols: cr.execute( """SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_analytic, identifier_analytic)) analytic_4 = cr.fetchone() analytic4_cols[ module_analytic_identifier_analytic] = analytic_4 else: analytic_4 = analytic4_cols[ module_analytic_identifier_analytic] module_account_identifier_account = '%s__%s' % (module_account, identifier_account) if not module_account_identifier_account in account_cols: cr.execute( """SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_account, identifier_account)) account_id = int(cr.fetchone()[0]) account_cols[module_account_identifier_account] = account_id else: account_id = account_cols[module_account_identifier_account] #source_document = dt['Source Document'] #if not source_document in source_document_cols: # cr.execute("""SELECT id FROM account_invoice WHERE origin = %s LIMIT 1""", (dt['Source Document'],)) # invoice_id = cr.fetchone() # source_document_cols[source_document] = invoice_id #else: # invoice_id = source_document_cols[source_document] invoice_id = [invoice_ids[dt['Source Document']]] data_structure = ( 1, datetime.now(), datetime.now(), 1, dt['Source Document'], account_id, invoice_id[0], #analytic_1[0], #analytic_2[0], #analytic_3.id, #account_analytic_id[0], analytic_4[0], company_id, dt['Line / Price Unit'], 1, dt['Line / Price Unit'], ) invoice_lines.append(data_structure) cr.executemany( """INSERT INTO account_invoice_line (create_uid,create_date,write_date,write_uid,name,account_id,invoice_id,account_analytic_id,company_id,price_unit,quantity,price_subtotal) VALUES (""" + ','.join(['%s' for x in range(0, len(data_structure))]) + """)""", invoice_lines) finish_time = datetime.now() msg = 'Duration to insert %s of account invoice line = %s' % ( len(data), format(finish_time - start_time)) _logger.warning(msg) for x in inv_ids: self.button_compute(cr, uid, [x], context=context) for inv_id in inv_ids: workflow.trg_create(uid, 'account.invoice', inv_id, cr) workflow.trg_validate(uid, 'account.invoice', inv_id, 'invoice_open', cr) self.action_date_assign(cr, uid, inv_ids) # INSERT ACCOUNT MOVE BASED ON INVOICE ABOVE company_id_journal_cols = {} start_time = datetime.now() move_vals = [] for m in data: module_company = dt['Company'].split('.', 1)[0] identifier_company = dt['Company'].split('.', 1)[1] module_company_identifier_company = '%s__%s' % (module_company, identifier_company) if not module_company_identifier_company in company_cols: cr.execute( """SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_company, identifier_company)) company_id = int(cr.fetchone()[0]) company_cols[module_company_identifier_company] = company_id else: company_id = company_cols[module_company_identifier_company] #module_invoice_identifier_account = '%s' % (dt['Source Document']) #if not module_invoice_identifier_account in invoice_cols: # cr.execute("""SELECT id FROM account_invoice WHERE origin = %s LIMIT 1""", (dt['Source Document'],)) # invoice_id = cr.fetchone() # invoice_cols[module_invoice_identifier_account] = invoice_id #else: # invoice_id = invoice_cols[module_invoice_identifier_account] invoice_id = [invoice_ids[m['Source Document']]] company_id_period = '%s__%s' % (dt['Period'], company_id) if not company_id_period in company_id_period_cols: cr.execute( """SELECT id FROM account_period WHERE name = %s AND company_id = %s """, (dt['Period'], company_id)) period_id = int(cr.fetchone()[0]) company_id_period_cols[company_id_period] = period_id else: period_id = company_id_period_cols[company_id_period] company_id_period = '%s__%s' % (dt['Journal'], company_id) if not company_id_period in company_id_journal_cols: cr.execute( """SELECT id FROM account_journal WHERE name = %s AND company_id = %s """, (dt['Journal'], company_id)) journal_id = int(cr.fetchone()[0]) company_id_journal_cols[company_id_period] = journal_id else: journal_id = company_id_journal_cols[company_id_period] # data_structure = ( # 1, # datetime.now(), # datetime.now(), # 1, # m['Source Document'], # company_id, # journal_id, # period_id, # m['Date'], # m['Source Document'], # dt['Partner'], # 'draft', # invoice_id[0], # 'account.invoice' # ) # moves += [data_structure] move_vals.append({ 'create_uid': 1, 'create_date': datetime.now(), 'write_date': datetime.now(), 'write_uid': 1, 'name': m['Source Document'], 'company_id': company_id, 'journal_id': journal_id, 'period_id': period_id, 'date': m['Date'], 'ref': m['Source Document'], 'partner_id': m['Partner'], 'state': 'draft', 'transaction_id': invoice_id[0], 'model': 'account.invoice', }) # cr.executemany("""INSERT INTO account_move # (create_uid,create_date,write_date,write_uid,name,company_id,journal_id,period_id,date,ref,partner_id,state, transaction_id,model) # VALUES ("""+ ','.join(['%s' for x in range(0, len(data_structure))])+""")""",moves) move_ids = self.insert_many(cr, uid, 'account_move', 'id', move_vals, context=None) finish_time = datetime.now() msg = 'Duration to insert %s of account move = %s' % ( len(data), format(finish_time - start_time)) _logger.warning(msg) # INSERT ACCOUNT MOVE LINE BASED ON ACCOUNT MOVE ABOVE start_time = datetime.now() for num, m in enumerate(data, start=0): module_analytic = m['Analytic Account'].split('.', 1)[0] identifier_analytic = m['Analytic Account'].split('.', 1)[1] module_header_account = m['Header Account'].split('.', 1)[0] identifier_header_account = m['Header Account'].split('.', 1)[1] module_detail_account = dt['Line / Account'].split('.', 1)[0] identifier_detail_account = dt['Line / Account'].split('.', 1)[1] module_branch = dt['Branch'].split('.', 1)[0] identifier_branch = dt['Branch'].split('.', 1)[1] module_company = dt['Company'].split('.', 1)[0] identifier_company = dt['Company'].split('.', 1)[1] module_company_identifier_company = '%s__%s' % (module_company, identifier_company) if not module_company_identifier_company in company_cols: cr.execute( """SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_company, identifier_company)) company_id = int(cr.fetchone()[0]) company_cols[module_company_identifier_company] = company_id else: company_id = company_cols[module_company_identifier_company] module_branch_identifier_branch = '%s__%s' % (module_branch, identifier_branch) if not module_branch_identifier_branch in branch_cols: cr.execute( """SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_branch, identifier_branch)) branch_id = int(cr.fetchone()[0]) branch_cols[module_branch_identifier_branch] = branch_id else: branch_id = branch_cols[module_branch_identifier_branch] module_analytic_identifier_analytic = '%s__%s' % ( module_analytic, identifier_analytic) if not module_analytic_identifier_analytic in analytic4_cols: cr.execute( """SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_analytic, identifier_analytic)) analytic_4 = cr.fetchone() analytic4_cols[ module_analytic_identifier_analytic] = analytic_4 else: analytic_4 = analytic4_cols[ module_analytic_identifier_analytic] modul_headeraccount = '%s__%s' % (module_header_account, identifier_header_account) if not modul_headeraccount in headeraccount_cols: cr.execute( """SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_header_account, identifier_header_account)) header_account_id = cr.fetchone() headeraccount_cols[modul_headeraccount] = header_account_id else: header_account_id = headeraccount_cols[modul_headeraccount] module_detailaccount = '%s__%s' % (module_detail_account, identifier_detail_account) if not module_detailaccount in detailaccount_cols: cr.execute( """SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_detail_account, identifier_detail_account)) detail_account_id = cr.fetchone() detailaccount_cols[module_detailaccount] = detail_account_id else: detail_account_id = detailaccount_cols[module_detailaccount] # module_moveid = '%s' % (m['Source Document']) # if not module_moveid in moveid_cols: # cr.execute("""SELECT id FROM account_move WHERE name = %s """, (m['Source Document'],)) # move_id = cr.fetchone() # moveid_cols[module_moveid] = move_id # else: # move_id = moveid_cols[module_moveid] move_id = move_ids[num] company_id_period = '%s__%s' % (dt['Period'], company_id) if not company_id_period in company_id_period_cols: cr.execute( """SELECT id FROM account_period WHERE name = %s AND company_id = %s """, (dt['Period'], company_id)) period_id = int(cr.fetchone()[0]) company_id_period_cols[company_id_period] = period_id else: period_id = company_id_period_cols[company_id_period] company_id_period = '%s__%s' % (dt['Journal'], company_id) if not company_id_period in company_id_journal_cols: cr.execute( """SELECT id FROM account_journal WHERE name = %s AND company_id = %s """, (dt['Journal'], company_id)) journal_id = int(cr.fetchone()[0]) company_id_journal_cols[company_id_period] = journal_id else: journal_id = company_id_journal_cols[company_id_period] if m['Invoice Type'] == 'out_invoice': data_structure = ( 1, datetime.now(), datetime.now(), 1, move_id[0], m['Source Document'], m['Source Document'], 13, 0.0, m['Due Date'], period_id, float(m['Line / Price Unit']), m["Date"], dt['Partner'] or None, header_account_id[0] or None, journal_id, 'valid', 'normal', company_id, branch_id, m['Division'], analytic_4[0], #analytic_3.id, #analytic_2[0], #analytic_1[0] ) move_lines += [ data_structure, ( 1, datetime.now(), datetime.now(), 1, move_id[0], m['Source Document'], m['Source Document'], 13, float(m['Line / Price Unit']), m['Due Date'], period_id, 0.0, m["Date"], dt['Partner'] or None, detail_account_id[0] or None, journal_id, 'valid', 'normal', company_id, branch_id, m['Division'], analytic_4[0], #analytic_3.id, #analytic_2[0], #analytic_1[0] ) ] elif m['Invoice Type'] == 'in_invoice': data_structure = ( 1, datetime.now(), datetime.now(), 1, move_id[0], m['Source Document'], m['Source Document'], 13, float(m['Line / Price Unit']), m['Due Date'], period_id, 0.0, m["Date"], dt['Partner'] or None, header_account_id[0] or None, journal_id, 'valid', 'normal', company_id, branch_id, m['Division'], analytic_4[0], #analytic_3.id, #analytic_2[0], #analytic_1[0] ) move_lines += [ data_structure, ( 1, datetime.now(), datetime.now(), 1, move_id[0], m['Source Document'], m['Source Document'], 13, 0.0, m['Due Date'], period_id, float(m['Line / Price Unit']), m["Date"], dt['Partner'] or None, detail_account_id[0] or None, journal_id, 'valid', 'normal', company_id, branch_id, m['Division'], analytic_4[0], #analytic_3.id, #analytic_2[0], #analytic_1[0] ) ] cr.executemany( """INSERT INTO account_move_line ( create_uid, create_date, write_date, write_uid, move_id, name, ref, currency_id, credit, date_maturity, period_id, debit, date, partner_id, account_id, journal_id, state, centralisation, company_id, branch_id, division, analytic_account_id ) VALUES (""" + ','.join(['%s' for x in range(0, len(data_structure))]) + """)""", move_lines) finish_time = datetime.now() msg = 'Duration to insert %s of account move lines = %s' % ( len(data) * 2, format(finish_time - start_time)) _logger.warning(msg) # cr.execute("""UPDATE account_invoice set move_id = (SELECT id FROM account_move am WHERE account_invoice.origin = am.ref LIMIT 1) where """) invoice_ids = dict(invoice_ids) for num, dt in enumerate(data, start=0): invoice_id = invoice_ids[dt['Source Document']] cr.execute( """UPDATE account_invoice set move_id = %s where id=%s""", (move_ids[num], invoice_id)) end_time = datetime.now() msg = 'Duration to upload all datas = %s' % (format(end_time - begin_time)) _logger.warning(msg) return json.dumps({'status': 'OK', 'message': result})
def bulk_invoice_ar(self, cr, uid, data, context=None): result = [] invoices = [] invoice_lines = [] moves = [] move_lines = [] # INSERT HEADER INVOICE start_time = datetime.now() begin_time = start_time company_cols = {} analytic4_cols = {} analytic3_cols = {} analytic2_cols = {} analytic1_cols = {} account_cols = {} branch_cols = {} period_cols = {} journal_cols = {} invoice_cols = {} headeraccount_cols = {} detailaccount_cols = {} moveid_cols = {} company_id_period_cols = {} invoice_vals = [] analytics = {} for n, dt in enumerate(data, start=0): module_analytic = dt['Analytic Account'].split('.', 1)[0] identifier_analytic = dt['Analytic Account'].split('.', 1)[1] module_account = dt['Header Account'].split('.', 1)[0] identifier_account = dt['Header Account'].split('.', 1)[1] module_branch = dt['Branch'].split('.', 1)[0] identifier_branch = dt['Branch'].split('.', 1)[1] module_company = dt['Company'].split('.', 1)[0] identifier_company = dt['Company'].split('.', 1)[1] analytics[dt['Source Document']] = { 'analytic_1': False, 'analytic_2': False, 'analytic_3': False, 'analytic_4': False, } module_company_identifier_company = '%s__%s' % (module_company, identifier_company) if not module_company_identifier_company in company_cols: cr.execute( """SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_company, identifier_company)) company_id = int(cr.fetchone()[0]) company_cols[module_company_identifier_company] = company_id else: company_id = company_cols[module_company_identifier_company] module_analytic_identifier_analytic = '%s__%s' % ( module_analytic, identifier_analytic) if not module_analytic_identifier_analytic in analytic4_cols: cr.execute( """SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_analytic, identifier_analytic)) analytic_4 = cr.fetchone() analytic4_cols[ module_analytic_identifier_analytic] = analytic_4 else: analytic_4 = analytic4_cols[ module_analytic_identifier_analytic] analytics[dt['Source Document']]['analytic_4'] = analytic_4 if not analytic_4 in analytic3_cols: cr.execute( """SELECT parent_id FROM account_analytic_account WHERE id = %s """, (analytic_4)) analytic_3 = cr.fetchone() analytic_3 = self.pool.get('account.analytic.account').browse( cr, uid, [analytic_3[0]], context=None) analytic3_cols[analytic_4] = analytic_3 else: analytic_3 = analytic3_cols[analytic_4] analytics[dt['Source Document']]['analytic_3'] = analytic_3 if not analytic_3 in analytic2_cols: analytic_2 = self._get_analytic_2(cr, uid, analytic_3, context=None) analytic2_cols[analytic_3] = analytic_2 else: analytic_2 = analytic2_cols[analytic_3] analytics[dt['Source Document']]['analytic_2'] = analytic_2 if not company_id in analytic1_cols: cr.execute( """SELECT id FROM account_analytic_account WHERE segmen = 1 AND company_id = %s """, ((company_id, ))) analytic_1 = cr.fetchone() analytic1_cols[company_id] = analytic_1 else: analytic_1 = analytic1_cols[company_id] analytics[dt['Source Document']]['analytic_1'] = analytic_1 module_account_identifier_account = '%s__%s' % (module_account, identifier_account) if not module_account_identifier_account in account_cols: cr.execute( """SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_account, identifier_account)) account_id = int(cr.fetchone()[0]) account_cols[module_account_identifier_account] = account_id else: account_id = account_cols[module_account_identifier_account] module_branch_identifier_branch = '%s__%s' % (module_branch, identifier_branch) if not module_branch_identifier_branch in branch_cols: cr.execute( """SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_branch, identifier_branch)) branch_id = int(cr.fetchone()[0]) branch_cols[module_branch_identifier_branch] = branch_id else: branch_id = branch_cols[module_branch_identifier_branch] if not company_id in period_cols: cr.execute( """SELECT id FROM account_period WHERE name = %s AND company_id = %s """, (dt['Period'], company_id)) period_id = int(cr.fetchone()[0]) period_cols[company_id] = period_id else: period_id = period_cols[company_id] if not company_id in journal_cols: cr.execute( """SELECT id FROM account_journal WHERE name = %s AND company_id = %s """, (dt['Journal'], company_id)) journal_id = cr.fetchone() if not journal_id: return self.return_error('Journal "%s" not found' % dt['Journal']) journal_id = int(journal_id[0]) journal_cols[company_id] = journal_id else: journal_id = journal_cols[company_id] invoice_vals.append({ 'create_uid': 1, 'create_date': datetime.now(), 'write_date': datetime.now(), 'write_uid': 1, 'document_date': dt['Date'], 'division': dt['Division'], 'partner_id': dt['Partner'], 'origin': dt['Source Document'], 'supplier_invoice_number': dt['Supplier Invoice Number'], 'date_due': dt['Due Date'], 'branch_id': branch_id, 'journal_id': journal_id, 'period_id': period_id, 'analytic_1': analytic_1[0], 'analytic_2': analytic_2[0], 'analytic_3': analytic_3.id, 'analytic_4': analytic_4[0], 'date_invoice': dt['Date'], 'company_id': company_id, 'state': 'draft', 'currency_id': 13, 'reference_type': 'none', 'type': dt['Invoice Type'], 'account_id': account_id, 'amount_total': dt['Line / Price Unit'], 'residual': dt['Line / Price Unit'], 'check_total': dt['Line / Price Unit'], 'consolidated': 'Consolidated' in dt and dt['Consolidated'] or True, }) invoice_ids = self.insert_many(cr, uid, 'account_invoice', 'origin,id', invoice_vals, context=None) finish_time = datetime.now() msg = 'Duration to insert %s of account invoice = %s' % ( len(data), format(finish_time - start_time)) _logger.warning(msg) # INSERT DETAIL INVOICE dict_invs = dict(invoice_ids) source_document_cols = {} start_time = datetime.now() invoice_line_vals = [] for dt in data: module_analytic = dt['Analytic Account'].split('.', 1)[0] identifier_analytic = dt['Analytic Account'].split('.', 1)[1] module_account = dt['Line / Account'].split('.', 1)[0] identifier_account = dt['Line / Account'].split('.', 1)[1] module_company = dt['Company'].split('.', 1)[0] identifier_company = dt['Company'].split('.', 1)[1] module_company_identifier_company = '%s__%s' % (module_company, identifier_company) if not module_company_identifier_company in company_cols: cr.execute( """SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_company, identifier_company)) company_id = int(cr.fetchone()[0]) company_cols[module_company_identifier_company] = company_id else: company_id = company_cols[module_company_identifier_company] module_analytic_identifier_analytic = '%s__%s' % ( module_analytic, identifier_analytic) if not module_analytic_identifier_analytic in analytic4_cols: cr.execute( """SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_analytic, identifier_analytic)) analytic_4 = cr.fetchone() analytic4_cols[ module_analytic_identifier_analytic] = analytic_4 else: analytic_4 = analytic4_cols[ module_analytic_identifier_analytic] module_account_identifier_account = '%s__%s' % (module_account, identifier_account) if not module_account_identifier_account in account_cols: cr.execute( """SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_account, identifier_account)) account_id = int(cr.fetchone()[0]) account_cols[module_account_identifier_account] = account_id else: account_id = account_cols[module_account_identifier_account] source_document = dt['Source Document'] if not source_document in source_document_cols: cr.execute( """SELECT id FROM account_invoice WHERE origin = %s LIMIT 1""", (dt['Source Document'], )) invoice_id = cr.fetchone() source_document_cols[source_document] = invoice_id else: invoice_id = source_document_cols[source_document] linedata = { 'create_uid': 1, 'create_date': datetime.now(), 'write_date': datetime.now(), 'write_uid': 1, 'name': dt['Source Document'], 'account_id': account_id, 'invoice_id': dict_invs[dt['Source Document']], 'account_analytic_id': analytic_4[0], 'company_id': company_id, 'price_unit': dt['Line / Price Unit'], 'quantity': 1, 'price_subtotal': dt['Line / Price Unit'], 'analytic_2': analytics[dt['Source Document']]['analytic_2'][0], 'analytic_3': analytics[dt['Source Document']]['analytic_3'].id, } invoice_line_vals.append(linedata) invoice_line_ids = self.insert_many(cr, uid, 'account_invoice_line', 'invoice_id,id', invoice_line_vals, context=None) finish_time = datetime.now() msg = 'Duration to insert %s of account invoice line = %s' % ( len(data), format(finish_time - start_time)) _logger.warning(msg) inv_ids = [x[1] for x in invoice_ids] for x in inv_ids: self.button_compute(cr, uid, [x], context=context) for inv_id in inv_ids: workflow.trg_create(uid, 'account.invoice', inv_id, cr) workflow.trg_validate(uid, 'account.invoice', inv_id, 'invoice_open', cr) self.action_date_assign(cr, uid, inv_ids) # Fix invoice date, make it same as document date # cr.execute("""UPDATE account_invoice SET date_invoice = document_date""") ''' # INSERT ACCOUNT MOVE BASED ON INVOICE ABOVE company_id_journal_cols = {} start_time = datetime.now() move_vals = [] for dt in data: module_company = dt['Company'].split('.',1)[0] identifier_company = dt['Company'].split('.',1)[1] module_company_identifier_company = '%s__%s' % (module_company, identifier_company) if not module_company_identifier_company in company_cols: cr.execute("""SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_company, identifier_company)) company_id = int(cr.fetchone()[0]) company_cols[module_company_identifier_company]=company_id else: company_id = company_cols[module_company_identifier_company] module_invoice_identifier_account = '%s' % (dt['Source Document']) if not module_invoice_identifier_account in invoice_cols: cr.execute("""SELECT id FROM account_invoice WHERE origin = %s LIMIT 1""", (dt['Source Document'],)) invoice_id = cr.fetchone() invoice_cols[module_invoice_identifier_account] = invoice_id else: invoice_id = invoice_cols[module_invoice_identifier_account] company_id_period = '%s__%s' % (dt['Period'], company_id) if not company_id_period in company_id_period_cols: cr.execute("""SELECT id FROM account_period WHERE name = %s AND company_id = %s """, (dt['Period'], company_id)) period_id = int(cr.fetchone()[0]) company_id_period_cols[company_id_period] = period_id else: period_id = company_id_period_cols[company_id_period] company_id_period = '%s__%s' % (dt['Journal'], company_id) if not company_id_period in company_id_journal_cols: cr.execute("""SELECT id FROM account_journal WHERE name = %s AND company_id = %s """, (dt['Journal'], company_id)) journal_id = int(cr.fetchone()[0]) company_id_journal_cols[company_id_period] = journal_id else: journal_id = company_id_journal_cols[company_id_period] move_vals.append({ 'create_uid': 1, 'create_date': datetime.now(), 'write_date': datetime.now(), 'write_uid': 1, 'name': dt['Source Document'], 'company_id': company_id, 'journal_id': journal_id, 'period_id': period_id, 'date': dt['Date'], 'ref': dt['Source Document'], 'partner_id': dt['Partner'], 'state': 'draft', 'transaction_id': invoice_id[0], 'model': 'account.invoice', }) move_ids = self.insert_many(cr, uid, 'account_move', 'id', move_vals, context=None) finish_time = datetime.now() msg = 'Duration to insert %s of account move = %s' % (len(data), format(finish_time - start_time)) _logger.warning(msg) # INSERT ACCOUNT MOVE LINE BASED ON ACCOUNT MOVE ABOVE start_time = datetime.now() for num,dt in enumerate(data,start=0): module_analytic = dt['Analytic Account'].split('.',1)[0] identifier_analytic = dt['Analytic Account'].split('.',1)[1] module_header_account = dt['Header Account'].split('.',1)[0] identifier_header_account = dt['Header Account'].split('.',1)[1] module_detail_account = dt['Line / Account'].split('.',1)[0] identifier_detail_account = dt['Line / Account'].split('.',1)[1] module_branch = dt['Branch'].split('.',1)[0] identifier_branch = dt['Branch'].split('.',1)[1] module_company = dt['Company'].split('.',1)[0] identifier_company = dt['Company'].split('.',1)[1] module_company_identifier_company = '%s__%s' % (module_company, identifier_company) if not module_company_identifier_company in company_cols: cr.execute("""SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_company, identifier_company)) company_id = int(cr.fetchone()[0]) company_cols[module_company_identifier_company]=company_id else: company_id = company_cols[module_company_identifier_company] module_branch_identifier_branch = '%s__%s' % (module_branch, identifier_branch) if not module_branch_identifier_branch in branch_cols: cr.execute("""SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_branch, identifier_branch)) branch_id = int(cr.fetchone()[0]) branch_cols[module_branch_identifier_branch] = branch_id else: branch_id = branch_cols[module_branch_identifier_branch] module_analytic_identifier_analytic = '%s__%s' % (module_analytic, identifier_analytic) if not module_analytic_identifier_analytic in analytic4_cols: cr.execute("""SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_analytic, identifier_analytic)) analytic_4 = cr.fetchone() analytic4_cols[module_analytic_identifier_analytic]=analytic_4 else: analytic_4 = analytic4_cols[module_analytic_identifier_analytic] modul_headeraccount = '%s__%s' % (module_header_account, identifier_header_account) if not modul_headeraccount in headeraccount_cols: cr.execute("""SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_header_account, identifier_header_account)) header_account_id = cr.fetchone() headeraccount_cols[modul_headeraccount] = header_account_id else: header_account_id = headeraccount_cols[modul_headeraccount] module_detailaccount = '%s__%s' % (module_detail_account, identifier_detail_account) if not module_detailaccount in detailaccount_cols: cr.execute("""SELECT res_id FROM ir_model_data WHERE module = %s AND name = %s """, (module_detail_account, identifier_detail_account)) detail_account_id = cr.fetchone() detailaccount_cols[module_detailaccount] = detail_account_id else: detail_account_id = detailaccount_cols[module_detailaccount] move_id = move_ids[num] company_id_period = '%s__%s' % (dt['Period'], company_id) if not company_id_period in company_id_period_cols: cr.execute("""SELECT id FROM account_period WHERE name = %s AND company_id = %s """, (dt['Period'], company_id)) period_id = int(cr.fetchone()[0]) company_id_period_cols[company_id_period] = period_id else: period_id = company_id_period_cols[company_id_period] company_id_period = '%s__%s' % (dt['Journal'], company_id) if not company_id_period in company_id_journal_cols: cr.execute("""SELECT id FROM account_journal WHERE name = %s AND company_id = %s """, (dt['Journal'], company_id)) journal_id = int(cr.fetchone()[0]) company_id_journal_cols[company_id_period] = journal_id else: journal_id = company_id_journal_cols[company_id_period] if dt['Invoice Type'] == 'out_invoice': data_structure = ( 1, datetime.now(), datetime.now(), 1, move_id[0], dt['Source Document'], dt['Source Document'], 13, 0.0, dt['Due Date'], period_id, float(dt['Line / Price Unit']), dt["Date"], dt['Partner'] or None, header_account_id[0] or None, journal_id, 'valid', 'normal', company_id, branch_id, dt['Division'], analytic_4[0], #analytic_3.id, #analytic_2[0], #analytic_1[0] ) move_lines+=[data_structure, ( 1, datetime.now(), datetime.now(), 1, move_id[0], dt['Source Document'], dt['Source Document'], 13, float(dt['Line / Price Unit']), dt['Due Date'], period_id, 0.0, dt["Date"], dt['Partner'] or None, detail_account_id[0] or None, journal_id, 'valid', 'normal', company_id, branch_id, dt['Division'], analytic_4[0], )] elif dt['Invoice Type'] == 'in_invoice': data_structure = ( 1, datetime.now(), datetime.now(), 1, move_id[0], dt['Source Document'], dt['Source Document'], 13, float(dt['Line / Price Unit']), dt['Due Date'], period_id, 0.0, dt["Date"], dt['Partner'] or None, header_account_id[0] or None, journal_id, 'valid', 'normal', company_id, branch_id, dt['Division'], analytic_4[0], ) move_lines+=[data_structure, ( 1, datetime.now(), datetime.now(), 1, move_id[0], dt['Source Document'], dt['Source Document'], 13, 0.0, dt['Due Date'], period_id, float(dt['Line / Price Unit']), dt["Date"], dt['Partner'] or None, detail_account_id[0] or None, journal_id, 'valid', 'normal', company_id, branch_id, dt['Division'], analytic_4[0], )] cr.executemany("""INSERT INTO account_move_line ( create_uid, create_date, write_date, write_uid, move_id, name, ref, currency_id, credit, date_maturity, period_id, debit, date, partner_id, account_id, journal_id, state, centralisation, company_id, branch_id, division, analytic_account_id ) VALUES ("""+ ','.join(['%s' for x in range(0, len(data_structure))])+""")""",move_lines) finish_time = datetime.now() msg = 'Duration to insert %s of account move lines = %s' % (len(data) * 2, format(finish_time - start_time)) _logger.warning(msg) invoice_ids = dict(invoice_ids) for num,dt in enumerate(data,start=0): invoice_id = invoice_ids[dt['Source Document']] cr.execute("""UPDATE account_invoice set move_id = %s where id=%s""", (move_ids[num],invoice_id)) end_time = datetime.now() msg = 'Duration to upload all datas = %s' % (format(end_time - begin_time)) _logger.warning(msg) ''' result = {} return json.dumps({'status': 'OK', 'message': result})