From: Julien Moutinho Date: Mon, 4 Feb 2013 23:49:13 +0000 (+0100) Subject: [action_invoice] corrige l'ordre de création des account.invoice.line pour bien avoir... X-Git-Url: https://git.cyclocoop.org/%7B%24admin_url%7Dmembres/%40%20%27info_classement_2%27%20=%3E%20%27%C3%82%C2%A0out%20of%20%40liste%40%27%2C%20%27info_code_acces%27%20=%3E%20%27Do%20not%20forget%20your%20own%20access%20codes%21%27%2C%20%27info_compatibilite_html%27%20=%3E%20%27HTML%20norm%20to%20apply%27%2C-%27info_compresseur_gzip%27%20=%3E%20%27It%20is%20advisable%20to%20check%20first%20whether%20your%20hosting%20provider%20already%20systematically%20compresses%20PHP%20scripts.%20To%20do%20this%20you%20can%20use%20a%20service%20such%20as%20%40testgzip%40%27%2C-%27info_compresseur_texte%27%20=%3E%20%27If%20your%20server%20does%20not%20compress%20HTML%20pages%20before%20sending%20them%2C%20you%20can%20attempt%20to%20force%20compression%20in%20order%20to%20reduce%20the%20size%20of%20the%20pages%20transmitted.%3Cb%3EWarning%3C/b%3E:%20this%20can%20have%20a%20noticeable%20adverse%20effect%20on%20the%20performance%20of%20some%20servers%2C%20%27%2C%20%27info_config_suivi%27%20=%3E%20%27If%20this%20address%20corresponds%20to%20a%20mailing%20list%2C%20you%20can%20indicate%20the%20subscription%20address%20for%20this%20list.%20This%20may%20be%20a%20URL%20%28e.g.%20a%20webpage%20enabling%20subscription%20online%29%2C%20or%20an%20email%20address%20with%20a%20specific%20subject%20%28for%20instance:%20%3Ctt%3E%40adresse_suivi%40?a=commitdiff_plain;h=7b2b83ce712f17239f1cc1bb198086b8e955735c;p=burette%2Fpos_membership.git [action_invoice] corrige l'ordre de création des account.invoice.line pour bien avoir membership_state en 'wait'. --- diff --git a/.gitignore b/.gitignore index 0d20b64..cc66745 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ *.pyc +*.mo diff --git a/pos_membership.py b/pos_membership.py index d705c86..b347b70 100644 --- a/pos_membership.py +++ b/pos_membership.py @@ -31,19 +31,95 @@ class pos_order(osv.osv): if not context is None: context = {} order_line_obj = self.pool.get('pos.order.line') - #order_obj = self.pool.get('pos.order') data_order_line = order_line_obj.browse(cr, uid, ids, context=context) for data in data_order_line: - print("INFO: pos_membership - Line:" + data.id), - print("Product: " + data.product_id) + print("DEV: [pos_membership] [_check_membership_product] [order_line]: data=%s product=%s" % (str(data.id), str(data.product_id))), return True _constraints = [ (_check_membership_product, 'Error: Invalid Message', ['field_name']), ] -pos_order() + # XXX: copied from openerp/addons/point_of_sale/point_of_sale.py + def action_invoice(self, cr, uid, ids, context=None): + print ("DEV: [pos_membership] [pos_order] [action_invoice]"); + wf_service = netsvc.LocalService("workflow") + inv_ref = self.pool.get('account.invoice') + inv_line_ref = self.pool.get('account.invoice.line') + product_obj = self.pool.get('product.product') + inv_ids = [] + + for order in self.pool.get('pos.order').browse(cr, uid, ids, context=context): + if order.invoice_id: + inv_ids.append(order.invoice_id.id) + continue + + if not order.partner_id: + raise osv.except_osv(_('Error!'), _('Please provide a partner for the sale.')) + + acc = order.partner_id.property_account_receivable.id + # XXX: copied from openerp/addons/point_of_sale/point_of_sale.py to fix account.invoice.line creation + inv = { + 'name': order.name, + 'origin': order.name, + 'account_id': acc, + 'journal_id': order.sale_journal.id or None, + 'type': 'out_invoice', + 'reference': order.name, + 'partner_id': order.partner_id.id, + 'comment': order.note or '', + 'currency_id': order.pricelist_id.currency_id.id, # considering partner's sale pricelist's currency + 'invoice_line': [] + } + inv.update(inv_ref.onchange_partner_id(cr, uid, [], 'out_invoice', order.partner_id.id)['value']) + if not inv.get('account_id', None): + inv['account_id'] = acc + for line in order.lines: + inv_line = { + #'invoice_id': inv_id, + 'product_id': line.product_id.id, + 'quantity': line.qty, + } + inv_name = product_obj.name_get(cr, uid, [line.product_id.id], context=context)[0][1] + inv_line.update(inv_line_ref.product_id_change(cr, uid, [], + line.product_id.id, + line.product_id.uom_id.id, + line.qty, partner_id = order.partner_id.id, + fposition_id=order.partner_id.property_account_position.id)['value']) + if line.product_id.description_sale: + inv_line['note'] = line.product_id.description_sale + inv_line['price_unit'] = line.price_unit + inv_line['discount'] = line.discount + inv_line['name'] = inv_name + inv_line['invoice_line_tax_id'] = ('invoice_line_tax_id' in inv_line)\ + and [(6, 0, inv_line['invoice_line_tax_id'])] or [] + #inv_line_ref.create(cr, uid, inv_line, context=context) + inv['invoice_line'].append((0, 0, inv_line)) + inv_id = inv_ref.create(cr, uid, inv, context=context) + self.write(cr, uid, [order.id], {'invoice_id': inv_id, 'state': 'invoiced'}, context=context) + inv_ids.append(inv_id) + inv_ref.button_reset_taxes(cr, uid, [inv_id], context=context) + wf_service.trg_validate(uid, 'pos.order', order.id, 'invoice', cr) + if not inv_ids: return {} + + mod_obj = self.pool.get('ir.model.data') + res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_form') + res_id = res and res[1] or False + return { + 'name': _('Customer Invoice'), + 'view_type': 'form', + 'view_mode': 'form', + 'view_id': [res_id], + 'res_model': 'account.invoice', + 'context': "{'type':'out_invoice'}", + 'type': 'ir.actions.act_window', + 'nodestroy': True, + 'target': 'current', + 'res_id': inv_ids and inv_ids[0] or False, + } + +pos_order() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: