added from extra-addons
[odoo/odoo.git] / addons / membership / wizard / invoice_membership.py
1 # -*- encoding: utf-8 -*-
2 from osv import fields
3 import wizard
4 import pooler
5 import time
6
7 def _invoice_membership(self, cr, uid, data, context):
8     partner_ids = data['ids']
9     product_id = data['form']['product']
10
11     pool = pooler.get_pool(cr.dbname)
12
13     cr.execute('''
14             SELECT partner_id, id, type
15             FROM res_partner_address
16             WHERE partner_id IN (%s)
17             ''' % ','.join([str(id) for id in partner_ids])
18             )
19     fetchal = cr.fetchall()
20     if not fetchal:
21         raise wizard.except_wizard('Error !', 'No Address defined for this partner')
22     partner_address_ids = {}
23     for x in range(len(fetchal)):
24         pid = fetchal[x][0]
25         id = fetchal[x][1]
26         type = fetchal[x][2]
27
28         if partner_address_ids.has_key(pid) and partner_address_ids[pid]['type'] == 'invoice':
29             continue
30         partner_address_ids[pid] = {'id': id, 'type': type}
31
32
33     invoice_list= []
34     invoice_obj = pool.get('account.invoice')
35     partner_obj = pool.get('res.partner')
36     product_obj = pool.get('product.product')
37     invoice_line_obj = pool.get(('account.invoice.line'))
38     invoice_tax_obj = pool.get(('account.invoice.tax'))
39     product = product_obj.read(cr, uid, product_id, ['uom_id'])
40
41     for partner_id in partner_ids:
42         account_id = partner_obj.read(cr, uid, partner_id, ['property_account_receivable'])['property_account_receivable'][0]
43         invoice_id = invoice_obj.create(cr, uid, {
44             'partner_id' : partner_id,
45             'address_invoice_id': partner_address_ids[partner_id]['id'],
46             'account_id': account_id,
47             }
48         )
49
50         line_value =  {
51             'invoice_id' : invoice_id,
52             'product_id' : product_id,
53             }
54
55         quantity = 1
56
57         line_dict = invoice_line_obj.product_id_change(cr, uid, {}, product_id, product['uom_id'][0], quantity, '', 'out_invoice', partner_id, context=context)
58
59         line_value.update(line_dict['value'])
60         if line_value['invoice_line_tax_id']:
61             tax_tab = [(6, 0, line_value['invoice_line_tax_id'])]
62             line_value['invoice_line_tax_id'] = tax_tab
63         else:
64             print "no tax"
65         invoice_line_id = invoice_line_obj.create(cr, uid, line_value)
66         invoice_list.append(invoice_id)
67         if line_value['invoice_line_tax_id']:
68             invoice_obj.write(cr, uid, [invoice_id], {'tax_line':tax_tab})
69             tax_value = invoice_tax_obj.compute(cr, uid, invoice_id).values()[0]
70             invoice_tax_obj.create(cr, uid, tax_value)
71
72     value = {
73             'domain': [
74                 ('id', 'in', invoice_list),
75                 ],
76             'name': 'Membership invoice',
77             'view_type': 'form',
78             'view_mode': 'tree,form',
79             'res_model': 'account.invoice',
80             'type': 'ir.actions.act_window',
81         }
82
83     return value
84
85 wizard_arch= """<?xml version="1.0"?>
86 <form string="Choose invoice details">
87     <field
88         name="product"
89         domain="[('membership','=','True')]"
90         context="product='membership_product'"
91         />
92 </form>"""
93
94
95
96 class wizard_invoice_membership(wizard.interface):
97
98     states = {
99
100         'init' : {
101             'actions' : [],
102             'result' : {
103                 'type' : 'form',
104                 'arch' : wizard_arch,
105                 'fields' : {
106                         'product': {
107                             'string': 'Membership product',
108                             'type': 'many2one',
109                             'relation': 'product.product',
110                             'required': True
111                         },
112                 },
113                 'state' : [('end', 'Cancel'),('ok', 'Confirm') ]}
114         },
115
116         'ok' : {
117             'actions' : [],
118             'result' : {'type' : 'action',
119                         'action': _invoice_membership,
120                         'state' : 'end'
121             },
122         },
123
124     }
125
126 wizard_invoice_membership("wizard_invoice_membership")
127
128 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
129