From 3a679c2b7fa4d76e1ae505c36ae40ab0718d15a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 23 Jan 2014 16:01:35 +0100 Subject: [PATCH] [IMP] payment_acquirer_paypal: paypal account integration in payment_paypal - added a call to _migrate_paypal_account in the payment_paypal data that does the migration from company.paypal_account (char field) to a payment.acquirer and company.paypal_account becoming a function field, with a getter / setter. This function field is company aware. - added an update of the res_config view of invoicing to link to the list of acquirers - added possibilty to install acquirers from invoicing (paypal / ogone / adyen are installable through config) bzr revid: tde@openerp.com-20140123150135-07b4pkbjade6vimq --- addons/payment/__openerp__.py | 3 +- addons/payment/models/__init__.py | 1 + addons/payment/models/res_config.py | 22 ++++++++++ addons/payment/views/res_config_view.xml | 28 ++++++++++++ addons/payment_paypal/__openerp__.py | 1 + addons/payment_paypal/data/paypal.xml | 2 + addons/payment_paypal/models/__init__.py | 1 + addons/payment_paypal/models/paypal.py | 25 +++++++++-- addons/payment_paypal/models/res_company.py | 43 +++++++++++++++++++ .../payment_paypal/views/res_config_view.xml | 18 ++++++++ addons/portal_sale/res_config_view.xml | 2 + 11 files changed, 142 insertions(+), 4 deletions(-) create mode 100644 addons/payment/models/res_config.py create mode 100644 addons/payment/views/res_config_view.xml create mode 100644 addons/payment_paypal/models/res_company.py create mode 100644 addons/payment_paypal/views/res_config_view.xml diff --git a/addons/payment/__openerp__.py b/addons/payment/__openerp__.py index 4102c4fe276..bc5d3896ac2 100644 --- a/addons/payment/__openerp__.py +++ b/addons/payment/__openerp__.py @@ -7,9 +7,10 @@ 'version': '1.0', 'description': """Payment Acquirer Base Module""", 'author': 'OpenERP SA', - 'depends': ['mail'], + 'depends': ['mail', 'account'], 'data': [ 'views/payment_acquirer.xml', + 'views/res_config_view.xml', 'security/ir.model.access.csv', ], 'installable': True, diff --git a/addons/payment/models/__init__.py b/addons/payment/models/__init__.py index da51c9c1854..cd7858767fc 100644 --- a/addons/payment/models/__init__.py +++ b/addons/payment/models/__init__.py @@ -1,3 +1,4 @@ # -*- coding: utf-8 -*- import payment_acquirer +import res_config diff --git a/addons/payment/models/res_config.py b/addons/payment/models/res_config.py new file mode 100644 index 00000000000..a0e9b1f7a11 --- /dev/null +++ b/addons/payment/models/res_config.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- + +from openerp.osv import fields, osv + + +class AccountPaymentConfig(osv.TransientModel): + _inherit = 'account.config.settings' + + _columns = { + 'module_payment_paypal': fields.boolean( + 'Manage Payments Using Paypal', + help='Blahblahblah\n' + '-It installs the module payment_paypal.'), + 'module_payment_ogone': fields.boolean( + 'Manage Payments Using Ogone', + help='Blahblahblah\n' + '-It installs the module payment_ogone.'), + 'module_payment_adyen': fields.boolean( + 'Manage Payments Using Adyen', + help='Blahblahblah\n' + '-It installs the module payment_adyen.'), + } diff --git a/addons/payment/views/res_config_view.xml b/addons/payment/views/res_config_view.xml new file mode 100644 index 00000000000..101acb7c9ee --- /dev/null +++ b/addons/payment/views/res_config_view.xml @@ -0,0 +1,28 @@ + + + + + + + account.config.settings + + + +
+ +
+
+ +
+
+ +
+
+
+
+ +
+
diff --git a/addons/payment_paypal/__openerp__.py b/addons/payment_paypal/__openerp__.py index d2341b5bae8..d57ce377b2d 100644 --- a/addons/payment_paypal/__openerp__.py +++ b/addons/payment_paypal/__openerp__.py @@ -11,6 +11,7 @@ 'data': [ 'views/paypal.xml', 'views/payment_acquirer.xml', + 'views/res_config_view.xml', 'data/paypal.xml', ], 'installable': True, diff --git a/addons/payment_paypal/data/paypal.xml b/addons/payment_paypal/data/paypal.xml index fdf59ce967e..bb31b063aee 100644 --- a/addons/payment_paypal/data/paypal.xml +++ b/addons/payment_paypal/data/paypal.xml @@ -4,6 +4,7 @@ paypal + test dummy + diff --git a/addons/payment_paypal/models/__init__.py b/addons/payment_paypal/models/__init__.py index a1fe670f56f..7af8e269d79 100644 --- a/addons/payment_paypal/models/__init__.py +++ b/addons/payment_paypal/models/__init__.py @@ -1,3 +1,4 @@ # -*- coding: utf-8 -*- import paypal +import res_company diff --git a/addons/payment_paypal/models/paypal.py b/addons/payment_paypal/models/paypal.py index e3d58ffbc12..f02fb644eec 100644 --- a/addons/payment_paypal/models/paypal.py +++ b/addons/payment_paypal/models/paypal.py @@ -36,8 +36,10 @@ class AcquirerPaypal(osv.Model): _columns = { 'paypal_email_account': fields.char('Paypal Email ID', required_if_provider='paypal'), - 'paypal_seller_account': fields.char('Paypal Seller ID', required_if_provider='paypal'), - 'paypal_use_ipn': fields.boolean('Use IPN'), + 'paypal_seller_account': fields.char( + 'Paypal Seller ID', + help='The Seller ID is used to ensure communications coming from Paypal are valid and secured.'), + 'paypal_use_ipn': fields.boolean('Use IPN', help='Paypal Instant Payment Notification'), # Server 2 server 'paypal_api_enabled': fields.boolean('Use Rest API'), 'paypal_api_username': fields.char('Rest API Username'), @@ -56,6 +58,23 @@ class AcquirerPaypal(osv.Model): 'paypal_api_enabled': False, } + def _migrate_paypal_account(self, cr, uid, context=None): + """ COMPLETE ME """ + cr.execute('SELECT id, paypal_account FROM res_company') + res = cr.fetchall() + for (company_id, company_paypal_account) in res: + if company_paypal_account: + company_paypal_ids = self.search(cr, uid, [('company_id', '=', company_id), ('name', '=', 'paypal')], limit=1, context=context) + if company_paypal_ids: + self.write(cr, uid, company_paypal_ids, {'paypal_email_account': company_paypal_account}, context=context) + else: + paypal_view = self.pool['ir.model.data'].get_object(cr, uid, 'payment_paypal', 'paypal_acquirer_button') + self.create(cr, uid, { + 'paypal_email_account': company_paypal_account, + 'view_template_id': paypal_view.id, + }, context=context) + return True + def paypal_compute_fees(self, cr, uid, id, amount, currency_id, country_id, context=None): """ Compute paypal fees. @@ -195,7 +214,7 @@ class TxPaypal(osv.Model): # check seller if data.get('receiver_email') != tx.acquirer_id.paypal_email_account: invalid_parameters.append(('receiver_email', data.get('receiver_email'), tx.acquirer_id.paypal_email_account)) - if data.get('receiver_id') != tx.acquirer_id.paypal_seller_account: + if tx.acquirer_id.paypal_seller_account and data.get('receiver_id') != tx.acquirer_id.paypal_seller_account: invalid_parameters.append(('receiver_id', data.get('receiver_id'), tx.acquirer_id.paypal_seller_account)) return invalid_parameters diff --git a/addons/payment_paypal/models/res_company.py b/addons/payment_paypal/models/res_company.py new file mode 100644 index 00000000000..16fd51dfeda --- /dev/null +++ b/addons/payment_paypal/models/res_company.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- + +from openerp.osv import fields, osv + + +class ResCompany(osv.Model): + _inherit = "res.company" + + def _get_paypal_account(self, cr, uid, ids, name, arg, context=None): + Acquirer = self.pool['payment.acquirer'] + company_id = self.pool['res.users'].browse(cr, uid, uid, context=context).company_id.id + paypal_ids = Acquirer.search(cr, uid, [ + ('portal_published', '=', True), + ('name', 'ilike', 'paypal'), + ('company_id', '=', company_id), + ], limit=1, context=context) + if paypal_ids: + paypal = Acquirer.browse(cr, uid, paypal_ids[0], context=context) + return dict.fromkeys(ids, paypal.paypal_email_account) + return dict.fromkeys(ids, False) + + def _set_paypal_account(self, cr, uid, id, name, value, arg, context=None): + Acquirer = self.pool['payment.acquirer'] + company_id = self.pool['res.users'].browse(cr, uid, uid, context=context).company_id.id + paypal_account = self.browse(cr, uid, id, context=context).paypal_account + paypal_ids = Acquirer.search(cr, uid, [ + ('portal_published', '=', True), + ('paypal_email_account', '=', paypal_account), + ('company_id', '=', company_id), + ], context=context) + if paypal_ids: + Acquirer.write(cr, uid, paypal_ids, {'paypal_email_account': value}, context=context) + return True + + _columns = { + 'paypal_account': fields.function( + _get_paypal_account, + fnct_inv=_set_paypal_account, + nodrop=True, + type='char', string='Paypal Account', + help="Paypal username (usually email) for receiving online payments." + ), + } diff --git a/addons/payment_paypal/views/res_config_view.xml b/addons/payment_paypal/views/res_config_view.xml new file mode 100644 index 00000000000..fbe23f71229 --- /dev/null +++ b/addons/payment_paypal/views/res_config_view.xml @@ -0,0 +1,18 @@ + + + + + + + account.config.settings + + + +