[ADD]:Added Upstream patch for payment
This commit is contained in:
parent
21211564c3
commit
3ee4085418
@ -89,6 +89,7 @@ class WebsitePayment(http.Controller):
|
|||||||
'amount': float(amount),
|
'amount': float(amount),
|
||||||
'currency_id': currency_id,
|
'currency_id': currency_id,
|
||||||
'partner_id': partner_id,
|
'partner_id': partner_id,
|
||||||
|
'type': 'form_save' if acquirer.save_token != 'none' and partner_id else 'form',
|
||||||
}
|
}
|
||||||
|
|
||||||
tx = request.env['payment.transaction'].sudo().create(values)
|
tx = request.env['payment.transaction'].sudo().create(values)
|
||||||
@ -117,7 +118,8 @@ class WebsitePayment(http.Controller):
|
|||||||
'amount': float(amount),
|
'amount': float(amount),
|
||||||
'currency_id': int(currency_id),
|
'currency_id': int(currency_id),
|
||||||
'partner_id': partner_id,
|
'partner_id': partner_id,
|
||||||
'payment_token_id': pm_id
|
'payment_token_id': pm_id,
|
||||||
|
'type': 'form_save' if token.acquirer_id.save_token != 'none' and partner_id else 'form',
|
||||||
}
|
}
|
||||||
|
|
||||||
tx = request.env['payment.transaction'].sudo().create(values)
|
tx = request.env['payment.transaction'].sudo().create(values)
|
||||||
|
@ -3,8 +3,7 @@
|
|||||||
|
|
||||||
<template id="default_acquirer_button">
|
<template id="default_acquirer_button">
|
||||||
<input type="hidden" name="data_set" t-att-data-action-url="tx_url"/>
|
<input type="hidden" name="data_set" t-att-data-action-url="tx_url"/>
|
||||||
<input type="hidden" name="csrf_token"
|
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
|
||||||
t-att-value="request.csrf_token()"/>
|
|
||||||
<t t-if="return_url">
|
<t t-if="return_url">
|
||||||
<input type="hidden" name="return_url" t-att-value="return_url"/>
|
<input type="hidden" name="return_url" t-att-value="return_url"/>
|
||||||
</t>
|
</t>
|
||||||
@ -148,8 +147,7 @@
|
|||||||
</field>
|
</field>
|
||||||
<field name="description" type="html">
|
<field name="description" type="html">
|
||||||
<p>
|
<p>
|
||||||
Provide instructions to customers so that they can pay their
|
Provide instructions to customers so that they can pay their orders manually.
|
||||||
orders manually.
|
|
||||||
</p>
|
</p>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
@ -3,3 +3,4 @@
|
|||||||
from . import payment_acquirer
|
from . import payment_acquirer
|
||||||
from . import res_partner
|
from . import res_partner
|
||||||
from . import account_payment
|
from . import account_payment
|
||||||
|
from . import chart_template
|
||||||
|
14
addons/payment/models/chart_template.py
Normal file
14
addons/payment/models/chart_template.py
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from flectra import api, fields, models, _
|
||||||
|
|
||||||
|
|
||||||
|
class WizardMultiChartsAccounts(models.TransientModel):
|
||||||
|
_inherit = 'wizard.multi.charts.accounts'
|
||||||
|
|
||||||
|
@api.multi
|
||||||
|
def _create_bank_journals_from_o2m(self, company, acc_template_ref):
|
||||||
|
res = super(WizardMultiChartsAccounts, self)._create_bank_journals_from_o2m(company, acc_template_ref)
|
||||||
|
|
||||||
|
# Try to generate the missing journals
|
||||||
|
return res + self.env['payment.acquirer']._create_missing_journal_for_acquirers(company=company)
|
@ -8,6 +8,7 @@ from flectra import api, exceptions, fields, models, _
|
|||||||
from flectra.tools import consteq, float_round, image_resize_images, image_resize_image, ustr
|
from flectra.tools import consteq, float_round, image_resize_images, image_resize_image, ustr
|
||||||
from flectra.addons.base.module import module
|
from flectra.addons.base.module import module
|
||||||
from flectra.exceptions import ValidationError
|
from flectra.exceptions import ValidationError
|
||||||
|
from flectra import api, SUPERUSER_ID
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -20,6 +21,11 @@ def _partner_split_name(partner_name):
|
|||||||
return [' '.join(partner_name.split()[:-1]), ' '.join(partner_name.split()[-1:])]
|
return [' '.join(partner_name.split()[:-1]), ' '.join(partner_name.split()[-1:])]
|
||||||
|
|
||||||
|
|
||||||
|
def create_missing_journal_for_acquirers(cr, registry):
|
||||||
|
env = api.Environment(cr, SUPERUSER_ID, {})
|
||||||
|
env['payment.acquirer']._create_missing_journal_for_acquirers()
|
||||||
|
|
||||||
|
|
||||||
class PaymentAcquirer(models.Model):
|
class PaymentAcquirer(models.Model):
|
||||||
""" Acquirer Model. Each specific acquirer can extend the model by adding
|
""" Acquirer Model. Each specific acquirer can extend the model by adding
|
||||||
its own fields, using the acquirer_name as a prefix for the new fields.
|
its own fields, using the acquirer_name as a prefix for the new fields.
|
||||||
@ -51,6 +57,9 @@ class PaymentAcquirer(models.Model):
|
|||||||
_description = 'Payment Acquirer'
|
_description = 'Payment Acquirer'
|
||||||
_order = 'website_published desc, sequence, name'
|
_order = 'website_published desc, sequence, name'
|
||||||
|
|
||||||
|
def _get_default_view_template_id(self):
|
||||||
|
return self.env.ref('payment.default_acquirer_button', raise_if_not_found=False)
|
||||||
|
|
||||||
name = fields.Char('Name', required=True, translate=True)
|
name = fields.Char('Name', required=True, translate=True)
|
||||||
description = fields.Html('Description')
|
description = fields.Html('Description')
|
||||||
sequence = fields.Integer('Sequence', default=10, help="Determine the display order")
|
sequence = fields.Integer('Sequence', default=10, help="Determine the display order")
|
||||||
@ -196,6 +205,58 @@ class PaymentAcquirer(models.Model):
|
|||||||
"""
|
"""
|
||||||
return dict(authorize=[], tokenize=[], fees=[])
|
return dict(authorize=[], tokenize=[], fees=[])
|
||||||
|
|
||||||
|
@api.multi
|
||||||
|
def _prepare_account_journal_vals(self):
|
||||||
|
'''Prepare the values to create the acquirer's journal.
|
||||||
|
:return: a dictionary to create a account.journal record.
|
||||||
|
'''
|
||||||
|
self.ensure_one()
|
||||||
|
account_vals = self.env['account.journal']._prepare_liquidity_account(
|
||||||
|
self.name, self.company_id, None, 'bank')
|
||||||
|
account_vals['user_type_id'] = self.env.ref('account.data_account_type_current_assets').id
|
||||||
|
account_vals['reconcile'] = True
|
||||||
|
account = self.env['account.account'].create(account_vals)
|
||||||
|
return {
|
||||||
|
'name': self.name,
|
||||||
|
'code': self.name.upper(),
|
||||||
|
'sequence': 999,
|
||||||
|
'type': 'bank',
|
||||||
|
'company_id': self.company_id.id,
|
||||||
|
'default_debit_account_id': account.id,
|
||||||
|
'default_credit_account_id': account.id,
|
||||||
|
# Show the journal on dashboard if the acquirer is published on the website.
|
||||||
|
'show_on_dashboard': self.website_published,
|
||||||
|
# Don't show payment methods in the backend.
|
||||||
|
'inbound_payment_method_ids': [],
|
||||||
|
'outbound_payment_method_ids': [],
|
||||||
|
}
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def _create_missing_journal_for_acquirers(self, company=None):
|
||||||
|
'''Create the journal for active acquirers.
|
||||||
|
We want one journal per acquirer. However, we can't create them during the 'create' of the payment.acquirer
|
||||||
|
because every acquirers are defined on the 'payment' module but is active only when installing their own module
|
||||||
|
(e.g. payment_paypal for Paypal). We can't do that in such modules because we have no guarantee the chart template
|
||||||
|
is already installed.
|
||||||
|
'''
|
||||||
|
# Search for installed acquirers modules.
|
||||||
|
# If this method is triggered by a post_init_hook, the module is 'to install'.
|
||||||
|
# If the trigger comes from the chart template wizard, the modules are already installed.
|
||||||
|
acquirer_modules = self.env['ir.module.module'].search(
|
||||||
|
[('name', 'like', 'payment_%'), ('state', 'in', ('to install', 'installed'))])
|
||||||
|
acquirer_names = [a.name.split('_')[1] for a in acquirer_modules]
|
||||||
|
|
||||||
|
# Search for acquirers having no journal
|
||||||
|
company = company or self.env.user.company_id
|
||||||
|
acquirers = self.env['payment.acquirer'].search(
|
||||||
|
[('provider', 'in', acquirer_names), ('journal_id', '=', False), ('company_id', '=', company.id)])
|
||||||
|
|
||||||
|
journals = self.env['account.journal']
|
||||||
|
for acquirer in acquirers.filtered(lambda l: not l.journal_id and l.company_id.chart_template_id):
|
||||||
|
acquirer.journal_id = self.env['account.journal'].create(acquirer._prepare_account_journal_vals())
|
||||||
|
journals += acquirer.journal_id
|
||||||
|
return journals
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def create(self, vals):
|
def create(self, vals):
|
||||||
image_resize_images(vals)
|
image_resize_images(vals)
|
||||||
@ -208,7 +269,13 @@ class PaymentAcquirer(models.Model):
|
|||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def toggle_website_published(self):
|
def toggle_website_published(self):
|
||||||
self.write({'website_published': not self.website_published})
|
''' When clicking on the website publish toggle button, the website_published is reversed and
|
||||||
|
the acquirer journal is set or not in favorite on the dashboard.
|
||||||
|
'''
|
||||||
|
self.ensure_one()
|
||||||
|
self.website_published = not self.website_published
|
||||||
|
if self.journal_id:
|
||||||
|
self.journal_id.show_on_dashboard = self.website_published
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
@ -617,6 +684,10 @@ class PaymentTransaction(models.Model):
|
|||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def get_next_reference(self, reference):
|
def get_next_reference(self, reference):
|
||||||
|
return self._get_next_reference(reference)
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def _get_next_reference(self, reference, acquirer=None):
|
||||||
ref_suffix = 1
|
ref_suffix = 1
|
||||||
init_ref = reference
|
init_ref = reference
|
||||||
while self.env['payment.transaction'].sudo().search_count([('reference', '=', reference)]):
|
while self.env['payment.transaction'].sudo().search_count([('reference', '=', reference)]):
|
||||||
|
@ -414,8 +414,14 @@ flectra.define('payment.payment_form', function (require) {
|
|||||||
},
|
},
|
||||||
displayError: function (title, message) {
|
displayError: function (title, message) {
|
||||||
var $checkedRadio = this.$('input[type="radio"]:checked'),
|
var $checkedRadio = this.$('input[type="radio"]:checked'),
|
||||||
acquirerID = this.getAcquirerIdFromRadio($checkedRadio[0]),
|
acquirerID = this.getAcquirerIdFromRadio($checkedRadio[0]);
|
||||||
|
var $acquirerForm;
|
||||||
|
if (this.isNewPaymentRadio($checkedRadio[0])) {
|
||||||
$acquirerForm = this.$('#o_payment_add_token_acq_' + acquirerID);
|
$acquirerForm = this.$('#o_payment_add_token_acq_' + acquirerID);
|
||||||
|
}
|
||||||
|
else if (this.isFormPaymentRadio($checkedRadio[0])) {
|
||||||
|
$acquirerForm = this.$('#o_payment_form_acq_' + acquirerID);
|
||||||
|
}
|
||||||
|
|
||||||
if ($checkedRadio.length === 0) {
|
if ($checkedRadio.length === 0) {
|
||||||
return new Dialog(null, {
|
return new Dialog(null, {
|
||||||
|
@ -71,7 +71,7 @@
|
|||||||
</page>
|
</page>
|
||||||
<page string="Messages">
|
<page string="Messages">
|
||||||
<group>
|
<group>
|
||||||
<field name="pre_msg"/>
|
<field name="pre_msg" invisible="1"/>
|
||||||
<field name="post_msg"/>
|
<field name="post_msg"/>
|
||||||
<field name="pending_msg"/>
|
<field name="pending_msg"/>
|
||||||
<field name="done_msg"/>
|
<field name="done_msg"/>
|
||||||
@ -81,7 +81,7 @@
|
|||||||
</page>
|
</page>
|
||||||
<page string="Configuration">
|
<page string="Configuration">
|
||||||
<group name="acquirer_config">
|
<group name="acquirer_config">
|
||||||
<field name="journal_id" context="{'default_type': 'bank'}" required="1"/>
|
<field name="journal_id" context="{'default_type': 'bank'}"/>
|
||||||
<field name="capture_manually" attrs="{'invisible': [('authorize_implemented', '=', False)]}"/>
|
<field name="capture_manually" attrs="{'invisible': [('authorize_implemented', '=', False)]}"/>
|
||||||
<field name="save_token" widget="radio" attrs="{'invisible': ['|', ('token_implemented', '=', False), ('payment_flow', '=', 's2s')]}"/>
|
<field name="save_token" widget="radio" attrs="{'invisible': ['|', ('token_implemented', '=', False), ('payment_flow', '=', 's2s')]}"/>
|
||||||
<field name="fees_active" attrs="{'invisible': [('fees_implemented', '=', False)]}"/>
|
<field name="fees_active" attrs="{'invisible': [('fees_implemented', '=', False)]}"/>
|
||||||
@ -113,7 +113,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<field name="registration_view_template_id" groups="base.group_no_one"/>
|
<field name="registration_view_template_id" groups="base.group_no_one"/>
|
||||||
<field name="payment_icon_ids" widget="many2many_tags"/>
|
<field name="payment_icon_ids" widget="many2many_tags"/>
|
||||||
<field name="payment_flow" widget="radio"/>
|
<field name="payment_flow" widget="radio" attrs="{'invisible': [('token_implemented', '=', False)]}"/>
|
||||||
</group>
|
</group>
|
||||||
</page>
|
</page>
|
||||||
</notebook>
|
</notebook>
|
||||||
|
Loading…
Reference in New Issue
Block a user