From 7b2b83ce712f17239f1cc1bb198086b8e955735c Mon Sep 17 00:00:00 2001 From: Julien Moutinho Date: Tue, 5 Feb 2013 00:49:13 +0100 Subject: [PATCH] =?utf8?q?[action=5Finvoice]=20corrige=20l'ordre=20de=20cr?= =?utf8?q?=C3=A9ation=20des=20account.invoice.line=20pour=20bien=20avoir?= =?utf8?q?=20membership=5Fstate=20en=20'wait'.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + pos_membership.py | 84 ++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 81 insertions(+), 4 deletions(-) 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: -- 2.20.1