diff --git a/addons/membership/__terp__.py b/addons/membership/__terp__.py index 3d8deb6ef75..49297bc010d 100644 --- a/addons/membership/__terp__.py +++ b/addons/membership/__terp__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution # Copyright (C) 2004-2010 Tiny SPRL (). # @@ -15,7 +15,7 @@ # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . +# along with this program. If not, see . # ############################################################################## @@ -41,8 +41,9 @@ invoice and send propositions for membership renewal. 'init_xml': ['membership_data.xml'], 'update_xml': [ 'security/ir.model.access.csv', + 'wizard/membership_invoice_view.xml', 'membership_view.xml', - 'membership_wizard.xml', + 'wizard/membership_unpaid_invoice_view.xml', 'process/membership_process.xml' ], 'demo_xml': ['membership_demo.xml'], diff --git a/addons/membership/membership_view.xml b/addons/membership/membership_view.xml index 3e22529332f..dd23cb61145 100644 --- a/addons/membership/membership_view.xml +++ b/addons/membership/membership_view.xml @@ -151,13 +151,14 @@ - + diff --git a/addons/membership/membership_wizard.xml b/addons/membership/membership_wizard.xml deleted file mode 100644 index 67068ff151d..00000000000 --- a/addons/membership/membership_wizard.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - diff --git a/addons/membership/wizard/__init__.py b/addons/membership/wizard/__init__.py index bffa2fb6a21..07d484d7125 100644 --- a/addons/membership/wizard/__init__.py +++ b/addons/membership/wizard/__init__.py @@ -19,7 +19,6 @@ # ############################################################################## -import invoice_membership -import unpaid_partner_invoice -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - +import membership_invoice +import membership_unpaid_invoice +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file diff --git a/addons/membership/wizard/invoice_membership.py b/addons/membership/wizard/invoice_membership.py deleted file mode 100644 index 2eb63ad6c96..00000000000 --- a/addons/membership/wizard/invoice_membership.py +++ /dev/null @@ -1,141 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -from osv import fields -import wizard -import pooler -import time -from tools.translate import _ - -def _invoice_membership(self, cr, uid, data, context): - partner_ids = data['ids'] - product_id = data['form']['product'] - pool = pooler.get_pool(cr.dbname) - cr.execute(''' - SELECT partner_id, id, type - FROM res_partner_address - WHERE partner_id =ANY(%s)''',(partner_ids,)) - fetchal = cr.fetchall() - if not fetchal: - raise wizard.except_wizard(_('Error !'), _('No Address defined for this partner')) - partner_address_ids = {} - for x in range(len(fetchal)): - pid = fetchal[x][0] - id = fetchal[x][1] - type = fetchal[x][2] - if partner_address_ids.has_key(pid) and partner_address_ids[pid]['type'] == 'invoice': - continue - partner_address_ids[pid] = {'id': id, 'type': type} - - invoice_list= [] - invoice_obj = pool.get('account.invoice') - partner_obj = pool.get('res.partner') - product_obj = pool.get('product.product') - invoice_line_obj = pool.get(('account.invoice.line')) - invoice_tax_obj = pool.get(('account.invoice.tax')) - product = product_obj.read(cr, uid, product_id, ['uom_id']) - - for partner_id in partner_ids: - account_id = partner_obj.read(cr, uid, partner_id, ['property_account_receivable'])['property_account_receivable'][0] - read_fpos = partner_obj.read(cr, uid, partner_id, ['property_account_position']) - fpos_id = read_fpos['property_account_position'] and read_fpos['property_account_position'][0] - line_value = { - 'product_id' : product_id, - } - quantity = 1 - line_dict = invoice_line_obj.product_id_change(cr, uid, {}, product_id, product['uom_id'][0], quantity, '', 'out_invoice', partner_id, fpos_id, context=context) - line_value.update(line_dict['value']) - if line_value['invoice_line_tax_id']: - tax_tab = [(6, 0, line_value['invoice_line_tax_id'])] - line_value['invoice_line_tax_id'] = tax_tab - invoice_id = invoice_obj.create(cr, uid, { - 'partner_id' : partner_id, - 'address_invoice_id': partner_address_ids[partner_id]['id'], - 'account_id': account_id, - 'fiscal_position': fpos_id or False - } - ) - line_value['invoice_id'] = invoice_id - invoice_line_id = invoice_line_obj.create(cr, uid, line_value, context) - invoice_obj.write(cr, uid, invoice_id, {'invoice_line':[(6,0,[invoice_line_id])]}) - invoice_list.append(invoice_id) - if line_value['invoice_line_tax_id']: - tax_value = invoice_tax_obj.compute(cr, uid, invoice_id).values() - for tax in tax_value: - invoice_tax_obj.create(cr, uid, tax, context=context) - - result = pool.get('ir.model.data')._get_id(cr, uid, 'account', 'view_account_invoice_filter') - res = pool.get('ir.model.data').read(cr, uid, result, ['res_id']) - - value = { - 'domain': [ - ('id', 'in', invoice_list), - ], - 'name': 'Membership invoice', - 'view_type': 'form', - 'view_mode': 'tree,form', - 'res_model': 'account.invoice', - 'type': 'ir.actions.act_window', - 'res_id' : invoice_list, - 'search_view_id' : res['res_id'] - } - return value - -wizard_arch= """ -
- -""" - -class wizard_invoice_membership(wizard.interface): - - states = { - 'init' : { - 'actions' : [], - 'result' : { - 'type' : 'form', - 'arch' : wizard_arch, - 'fields' : { - 'product': { - 'string': 'Membership product', - 'type': 'many2one', - 'relation': 'product.product', - 'required': True - }, - }, - 'state' : [('end', 'Cancel'),('ok', 'Confirm') ]} - }, - 'ok' : { - 'actions' : [], - 'result' : {'type' : 'action', - 'action': _invoice_membership, - 'state' : 'end' - }, - }, - - } - -wizard_invoice_membership("wizard_invoice_membership") - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/membership/wizard/membership_invoice.py b/addons/membership/wizard/membership_invoice.py new file mode 100644 index 00000000000..45d5c538b15 --- /dev/null +++ b/addons/membership/wizard/membership_invoice.py @@ -0,0 +1,102 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +import time + +from osv import fields, osv +from tools.translate import _ +import tools + +class membership_invoice(osv.osv_memory): + _name = "membership.invoice" + _description = "Membership Invoice From Partner" + _columns ={ + 'product_id': fields.many2one('product.product','Membership Product', required=True), + } + + def membership_invoice(self, cr, uid, ids, context={}): + invoice_obj = self.pool.get('account.invoice') + partner_obj = self.pool.get('res.partner') + product_obj = self.pool.get('product.product') + invoice_line_obj = self.pool.get(('account.invoice.line')) + invoice_tax_obj = self.pool.get(('account.invoice.tax')) + partner_ids = context['active_ids'] + for data in self.read(cr, uid, ids, context=context): + product_id = data['product_id'] + cr.execute(''' + SELECT partner_id, id, type + FROM res_partner_address + WHERE partner_id =ANY(%s)''',(partner_ids,)) + fetchal = cr.fetchall() + if not fetchal: + raise osv.except_osv(_('Error !'), _('No Address defined for this partner')) + partner_address_ids = {} + for x in range(len(fetchal)): + pid = fetchal[x][0] + id = fetchal[x][1] + type = fetchal[x][2] + if partner_address_ids.has_key(pid) and partner_address_ids[pid]['type'] == 'invoice': + continue + partner_address_ids[pid] = {'id': id, 'type': type} + + invoice_list= [] + product = product_obj.read(cr, uid, product_id, ['uom_id'], context=context) + + for partner_id in partner_ids: + account_id = partner_obj.read(cr, uid, partner_id, ['property_account_receivable'], context=context)['property_account_receivable'][0] + read_fpos = partner_obj.read(cr, uid, partner_id, ['property_account_position'], context=context) + fpos_id = read_fpos['property_account_position'] and read_fpos['property_account_position'][0] + line_value = { + 'product_id' : product_id, + } + quantity = 1 + line_dict = invoice_line_obj.product_id_change(cr, uid, {}, product_id, product['uom_id'][0], quantity, '', 'out_invoice', partner_id, fpos_id, context=context) + line_value.update(line_dict['value']) + if line_value['invoice_line_tax_id']: + tax_tab = [(6, 0, line_value['invoice_line_tax_id'])] + line_value['invoice_line_tax_id'] = tax_tab + invoice_id = invoice_obj.create(cr, uid, { + 'partner_id' : partner_id, + 'address_invoice_id': partner_address_ids[partner_id]['id'], + 'account_id': account_id, + 'fiscal_position': fpos_id or False + } + ) + line_value['invoice_id'] = invoice_id + invoice_line_id = invoice_line_obj.create(cr, uid, line_value, context=context) + invoice_obj.write(cr, uid, invoice_id, {'invoice_line':[(6,0,[invoice_line_id])]}, context=context) + invoice_list.append(invoice_id) + if line_value['invoice_line_tax_id']: + tax_value = invoice_tax_obj.compute(cr, uid, invoice_id).values() + for tax in tax_value: + invoice_tax_obj.create(cr, uid, tax, context=context) + + return { + 'domain': [('id', 'in', invoice_list)], + 'name': 'Membership Invoice', + 'view_type': 'form', + 'view_mode': 'tree,form', + 'res_model': 'account.invoice', + 'type': 'ir.actions.act_window', + } + +membership_invoice() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/membership/wizard/membership_invoice_view.xml b/addons/membership/wizard/membership_invoice_view.xml new file mode 100644 index 00000000000..c18c53d6679 --- /dev/null +++ b/addons/membership/wizard/membership_invoice_view.xml @@ -0,0 +1,42 @@ + + + + + + membership.invoice.view.form + membership.invoice + form + +
+ + + + +