You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
7.9 KiB
159 lines
7.9 KiB
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
from hashlib import sha1
|
|
from odoo import api, fields, tools, http, models, _
|
|
from odoo.http import request
|
|
from odoo.exceptions import AccessError, UserError, ValidationError
|
|
import logging
|
|
_logger = logging.getLogger(__name__)
|
|
import pprint
|
|
import payplug
|
|
payplug.set_api_version("2019-08-06")
|
|
import requests
|
|
import json
|
|
|
|
class PaymentAcquirerPayPlug(models.Model):
|
|
_inherit = 'payment.provider'
|
|
|
|
# FOR CREATE SIMULATION ONEY BY API
|
|
def _oney_payment_simulation(self, amount, country):
|
|
acquirer = request.env['payment.provider'].sudo().search([('code','=','payplug')], limit=1)
|
|
if acquirer.state != 'disabled' and acquirer.payment_type_oney == True: # ONEY IS ACTIVE
|
|
secret_payplug_key = request.env['payment.provider']._key_acquirer_state(acquirer)
|
|
URL = 'https://api.payplug.com/v1/oney_payment_simulations'
|
|
headers = {
|
|
'Content-Type': 'application/json',
|
|
'PayPlug-Version': '2019-08-06',
|
|
'Authorization': 'Bearer '+secret_payplug_key,
|
|
}
|
|
values = {
|
|
'amount': int(amount*100),
|
|
'country': 'FR',
|
|
'operations': ['x3_with_fees', 'x4_with_fees'],
|
|
}
|
|
# REQUEST TO THE API PAYPLUY/ONEY THE PAYMENT SIMULATION
|
|
result = requests.post(url=URL, json=values, headers=headers).json()
|
|
vals={}
|
|
if result and amount >= 100 and amount <= 3000 and result.get('x3_with_fees'):
|
|
vals['payment_3x']={
|
|
'contribution_of_3x': "%.2f" % (int(result['x3_with_fees']['down_payment_amount'])/100),
|
|
'1st_monthly_payment_3x': "%.2f" % (int(result['x3_with_fees']['installments'][0]['amount'])/100),
|
|
'2nd_monthly_payment_3x': "%.2f" % (int(result['x3_with_fees']['installments'][1]['amount'])/100),
|
|
'total_payment_3x': "%.2f" % (int(result['x3_with_fees']['down_payment_amount'])/100 \
|
|
+int(result['x3_with_fees']['installments'][0]['amount'])/100 \
|
|
+int(result['x3_with_fees']['installments'][1]['amount'])/100),
|
|
}
|
|
vals['payment_4x']={
|
|
'contribution_of_4x': "%.2f" % (int(result['x4_with_fees']['down_payment_amount'])/100),
|
|
'1st_monthly_payment_4x': "%.2f" % (int(result['x4_with_fees']['installments'][0]['amount'])/100),
|
|
'2nd_monthly_payment_4x': "%.2f" % (int(result['x4_with_fees']['installments'][1]['amount'])/100),
|
|
'3nd_monthly_payment_4x': "%.2f" % (int(result['x4_with_fees']['installments'][2]['amount'])/100),
|
|
'total_payment_4x': "%.2f" % (int(result['x4_with_fees']['down_payment_amount'])/100 \
|
|
+ int(result['x4_with_fees']['installments'][0]['amount'])/100 \
|
|
+ int(result['x4_with_fees']['installments'][1]['amount'])/100 \
|
|
+ int(result['x4_with_fees']['installments'][2]['amount'])/100),
|
|
}
|
|
else:
|
|
vals['payment_3x']={
|
|
'contribution_of_3x': "0.00",
|
|
'1st_monthly_payment_3x': "0.00",
|
|
'2nd_monthly_payment_3x': "0.00",
|
|
'total_payment_3x': "0.00",
|
|
}
|
|
vals['payment_4x']={
|
|
'contribution_of_4x': "0.00",
|
|
'1st_monthly_payment_4x': "0.00",
|
|
'2nd_monthly_payment_4x': "0.00",
|
|
'3nd_monthly_payment_4x': "0.00",
|
|
'total_payment_4x': "0.00",
|
|
}
|
|
return vals
|
|
|
|
# RETURN TEST KEY OR LIVE KEY
|
|
def _key_acquirer_state(self, acquirer):
|
|
if acquirer.code == 'payplug' and acquirer.code != 'disabled':
|
|
if acquirer.state == 'test':
|
|
secret_payplug_key = acquirer.payplug_secret_test_key
|
|
else:
|
|
secret_payplug_key = acquirer.payplug_secret_live_key
|
|
return secret_payplug_key
|
|
|
|
code = fields.Selection(
|
|
selection_add=[('payplug', "PayPlug")], ondelete={'payplug': 'set default'})
|
|
payplug_secret_test_key = fields.Char(
|
|
string="Secret Test Key",
|
|
help="Enter the TEST key of your PayPlug account",
|
|
required_if_provider='payplug',
|
|
groups='base.group_user')
|
|
payplug_secret_live_key = fields.Char(
|
|
string="Secret Live Key",
|
|
help="Enter the LIVE key of your PayPlug account",
|
|
required_if_provider='payplug',
|
|
groups='base.group_user')
|
|
# PAYPLUG VALUES
|
|
payplug_display_as = fields.Char(
|
|
string="PayPlug displayed as", help="Description of the acquirer for customers",
|
|
translate=True)
|
|
payment_type_payplug = fields.Boolean("Payment PayPlug", default=True)
|
|
available_payplug_country_ids = fields.Many2many(
|
|
string="Payplug countries", comodel_name='res.country', relation='payplug_payment_country_rel',
|
|
column1='payment_id', column2='country_id',
|
|
help="The countries for which this payment acquirer is available.\n"
|
|
"If none is set, it is available for all countries.")
|
|
# AMEX VALUES
|
|
amex_display_as = fields.Char(
|
|
string="Amex displayed as", help="Description of the acquirer for customers",
|
|
translate=True)
|
|
payment_type_amex = fields.Boolean("Payment AmEx")
|
|
available_amex_country_ids = fields.Many2many(
|
|
string="Amex countries", comodel_name='res.country', relation='amex_payment_country_rel',
|
|
column1='payment_id', column2='country_id',
|
|
help="The countries for which this payment acquirer is available.\n"
|
|
"If none is set, it is available for all countries.")
|
|
# BANCONTACT VALUES
|
|
bancontact_display_as = fields.Char(
|
|
string="Bancontact displayed as", help="Description of the acquirer for customers",
|
|
translate=True)
|
|
payment_type_bancontact = fields.Boolean("Payment Bancontact")
|
|
available_bancontact_country_ids = fields.Many2many(
|
|
string="Bancontact countries", comodel_name='res.country', relation='bancontact_payment_country_rel',
|
|
column1='payment_id', column2='country_id',
|
|
help="The countries for which this payment acquirer is available.\n"
|
|
"If none is set, it is available for all countries.")
|
|
# ONEY VALUES
|
|
oney_display_as = fields.Char(
|
|
string="PayLater displayed as", help="Description of the acquirer for customers",
|
|
translate=True)
|
|
payment_type_oney = fields.Boolean("Payment PayLater")
|
|
available_oney_country_ids = fields.Many2many(
|
|
string="Paylater countries", comodel_name='res.country', relation='oney_payment_country_rel',
|
|
column1='payment_id', column2='country_id',
|
|
help="The countries for which this payment acquirer is available.\n"
|
|
"If none is set, it is available for all countries.")
|
|
oney_information_message = fields.Char(
|
|
'Information message',
|
|
translate=True,
|
|
required_if_provider='oney',
|
|
groups='base.group_user')
|
|
oney_footer_message = fields.Text(
|
|
'Footer pop-up message',
|
|
translate=True,
|
|
required_if_provider='oney',
|
|
groups='base.group_user')
|
|
|
|
# CREATE DIGITAL KEY
|
|
def _playplug_generate_digital_sign(self, values):
|
|
keys = "reference customer_name customer_postcode".split()
|
|
def get_value(key):
|
|
if values.get(key):
|
|
return values[key]
|
|
return ''
|
|
values = dict(values or {})
|
|
sign = ''.join('%s=%s' % (k, get_value(k)) for k in keys)
|
|
shasign = sha1(sign.encode('utf-8')).hexdigest()
|
|
return shasign
|
|
|
|
|
|
|
|
|
|
|
|
|