diff --git a/addons/pos_adyen/__manifest__.py b/addons/pos_adyen/__manifest__.py index 51fb9d2d2fa..638d4afc9c6 100644 --- a/addons/pos_adyen/__manifest__.py +++ b/addons/pos_adyen/__manifest__.py @@ -10,6 +10,7 @@ 'data': [ 'security/ir.model.access.csv', 'views/adyen_account_views.xml', + 'views/adyen_transaction_views.xml', 'views/pos_config_views.xml', 'views/pos_payment_method_views.xml', 'views/res_config_settings_views.xml', diff --git a/addons/pos_adyen/models/__init__.py b/addons/pos_adyen/models/__init__.py index d8557bb1c89..10adfce1aa9 100644 --- a/addons/pos_adyen/models/__init__.py +++ b/addons/pos_adyen/models/__init__.py @@ -2,6 +2,7 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from . import adyen_account +from . import adyen_transaction from . import pos_config from . import pos_payment_method from . import res_config_settings diff --git a/addons/pos_adyen/models/adyen_account.py b/addons/pos_adyen/models/adyen_account.py index b3c2eb41794..39520f97524 100644 --- a/addons/pos_adyen/models/adyen_account.py +++ b/addons/pos_adyen/models/adyen_account.py @@ -46,13 +46,12 @@ class AdyenStore(models.Model): @api.model def create(self, values): - adyen_store_id = super(AdyenStore, self).create(values) - response = adyen_store_id.adyen_account_id._adyen_rpc('v1/create_store', adyen_store_id._format_data()) + adyen_account_id = self.env['adyen.account'].browse(values.get('adyen_account_id')) + response = adyen_account_id._adyen_rpc('v1/create_store', self._format_data(values)) stores = response['accountHolderDetails']['storeDetails'] - created_store = next(store for store in stores if store['storeReference'] == adyen_store_id.store_reference) - adyen_store_id.with_context(update_from_adyen=True).sudo().write({ - 'store_uuid': created_store['store'], - }) + created_store = next(store for store in stores if store['storeReference'] == values.get('store_reference')) + values['store_uuid'] = created_store['store'] + adyen_store_id = super(AdyenStore, self).create(values) return adyen_store_id def unlink(self): @@ -63,23 +62,26 @@ class AdyenStore(models.Model): }) return super(AdyenStore, self).unlink() - def _format_data(self): + def _format_data(self, values): + adyen_account_id = self.env['adyen.account'].browse(values.get('adyen_account_id')) if values.get('adyen_account_id') else self.adyen_account_id + country_id = self.env['res.country'].browse(values.get('country_id')) if values.get('country_id') else self.country_id + state_id = self.env['res.country.state'].browse(values.get('state_id')) if values.get('state_id') else self.state_id return { - 'accountHolderCode': self.adyen_account_id.account_holder_code, + 'accountHolderCode': adyen_account_id.account_holder_code, 'accountHolderDetails': { 'storeDetails': [{ - 'storeReference': self.store_reference, - 'storeName': self.name, + 'storeReference': values.get('store_reference') or self.store_reference, + 'storeName': values.get('name') or self.name, 'merchantCategoryCode': '7999', 'address': { - 'city': self.city, - 'country': self.country_id.code, - 'houseNumberOrName': self.house_number_or_name, - 'postalCode': self.zip, - 'stateOrProvince': self.state_id.code or None, - 'street': self.street, + 'city': values.get('city') or self.city, + 'country': country_id.code, + 'houseNumberOrName': values.get('house_number_or_name') or self.house_number_or_name, + 'postalCode': values.get('zip') or self.zip, + 'stateOrProvince': state_id.code or None, + 'street': values.get('street') or self.street, }, - 'fullPhoneNumber': self.phone_number, + 'fullPhoneNumber': values.get('phone_number') or self.phone_number, }], } } diff --git a/addons/pos_adyen/models/adyen_transaction.py b/addons/pos_adyen/models/adyen_transaction.py new file mode 100644 index 00000000000..f0acb036acb --- /dev/null +++ b/addons/pos_adyen/models/adyen_transaction.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models + + +class AdyenTransaction(models.Model): + _inherit = 'adyen.transaction' + + pos_payment_id = fields.Many2one('pos.payment', string='POS Order') + pos_order_id = fields.Many2one(related='pos_payment_id.pos_order_id') + + def _post_transaction_sync(self): + to_match = self.filtered(lambda t: not t.pos_payment_id) + pos_payment_ids = self.env['pos.payment'].search([('transaction_id', 'in', to_match.mapped('reference'))]) + + for tx in to_match: + tx.pos_payment_id = pos_payment_ids.filtered(lambda t: t.transaction_id == tx.reference) diff --git a/addons/pos_adyen/models/pos_payment_method.py b/addons/pos_adyen/models/pos_payment_method.py index 31058fe9290..461850d4697 100644 --- a/addons/pos_adyen/models/pos_payment_method.py +++ b/addons/pos_adyen/models/pos_payment_method.py @@ -26,7 +26,6 @@ class PosPaymentMethod(models.Model): # Odoo Payments by Adyen adyen_account_id = fields.Many2one('adyen.account', related='company_id.adyen_account_id') - adyen_payout_id = fields.Many2one('adyen.payout', string='Adyen Payout', domain="[('adyen_account_id', '=', adyen_account_id)]") adyen_terminal_id = fields.Many2one('adyen.terminal', string='Adyen Terminal', domain="[('adyen_account_id', '=', adyen_account_id)]") adyen_latest_response = fields.Char(help='Technical field used to buffer the latest asynchronous notification from Adyen.', copy=False, groups='base.group_erp_manager') @@ -138,7 +137,7 @@ class PosPaymentMethod(models.Model): company_sudo = self.env.company.sudo() return company_sudo.adyen_account_id._adyen_rpc('v1/%s' % operation, { 'request_data': data, - 'account_code': self.sudo().adyen_payout_id.code, + 'account_code': self.sudo().adyen_account_id.account_code, 'notification_url': company_sudo.get_base_url(), }) except Forbidden: diff --git a/addons/pos_adyen/security/ir.model.access.csv b/addons/pos_adyen/security/ir.model.access.csv index 302878ed368..935319b4f73 100644 --- a/addons/pos_adyen/security/ir.model.access.csv +++ b/addons/pos_adyen/security/ir.model.access.csv @@ -1,4 +1,3 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_adyen_store_group_erp_manager,adyen.store,model_adyen_store,base.group_erp_manager,1,0,1,1 -access_adyen_payout_group_pos_manager,adyen.payout,adyen_platforms.model_adyen_payout,point_of_sale.group_pos_manager,1,0,0,0 access_adyen_terminal_group_pos_manager,adyen.terminal,model_adyen_terminal,point_of_sale.group_pos_manager,1,0,0,0 diff --git a/addons/pos_adyen/views/adyen_account_views.xml b/addons/pos_adyen/views/adyen_account_views.xml index c31771d9d97..85a9bf01894 100644 --- a/addons/pos_adyen/views/adyen_account_views.xml +++ b/addons/pos_adyen/views/adyen_account_views.xml @@ -21,7 +21,6 @@ - adyen.store.view.form adyen.store @@ -29,6 +28,7 @@
+ diff --git a/addons/pos_adyen/views/adyen_transaction_views.xml b/addons/pos_adyen/views/adyen_transaction_views.xml new file mode 100644 index 00000000000..1cb0f3ddaf4 --- /dev/null +++ b/addons/pos_adyen/views/adyen_transaction_views.xml @@ -0,0 +1,22 @@ + + + + adyen.transaction + + + + + + + + + + adyen.transaction + + + + + + + + diff --git a/addons/pos_adyen/views/pos_payment_method_views.xml b/addons/pos_adyen/views/pos_payment_method_views.xml index fe6ce37dae2..db41943a7df 100644 --- a/addons/pos_adyen/views/pos_payment_method_views.xml +++ b/addons/pos_adyen/views/pos_payment_method_views.xml @@ -14,7 +14,6 @@ -