[openerp] corrige un oubli d'imports.
[burette/pos_membership.git] / pos_membership.py
index d705c86..e181bb4 100644 (file)
@@ -20,8 +20,9 @@
 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 ##############################################################################
-from openerp.osv import osv
-from openerp.osv import fields
+from openerp import netsvc
+from openerp.osv import fields, osv
+from openerp.tools.translate import _
 
 class pos_order(osv.osv):
     _inherit = 'pos.order'
@@ -31,19 +32,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: