robin.keunen
5 years ago
10 changed files with 0 additions and 348 deletions
-
2easy_my_coop_online_payment/__init__.py
-
40easy_my_coop_online_payment/__openerp__.py
-
1easy_my_coop_online_payment/controllers/__init__.py
-
112easy_my_coop_online_payment/controllers/main.py
-
65easy_my_coop_online_payment/i18n/fr.po
-
2easy_my_coop_online_payment/models/__init__.py
-
26easy_my_coop_online_payment/models/coop.py
-
47easy_my_coop_online_payment/models/payment_transaction.py
-
25easy_my_coop_online_payment/views/online_payment_template.xml
-
28easy_my_coop_online_payment/views/subscription_request_view.xml
@ -1,2 +0,0 @@ |
|||||
from . import models |
|
||||
from . import controllers |
|
@ -1,40 +0,0 @@ |
|||||
# -*- coding: utf-8 -*- |
|
||||
############################################################################## |
|
||||
# |
|
||||
# Copyright (C) 2013-2017 Open Architects Consulting SPRL. |
|
||||
# Copyright (C) 2018- Coop IT Easy SCRLfs. |
|
||||
# |
|
||||
# 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 <http://www.gnu.org/licenses/>. |
|
||||
# |
|
||||
############################################################################## |
|
||||
{ |
|
||||
"name": "Easy My Coop Online Payment", |
|
||||
"version": "1.0", |
|
||||
"depends": ["easy_my_coop", |
|
||||
"website_payment", |
|
||||
"payment_paypal"], |
|
||||
"author": "Houssine BAKKALI <houssine@coopiteasy.be>", |
|
||||
"category": "Cooperative management", |
|
||||
'website': "www.coopiteasy.be", |
|
||||
"description": """ |
|
||||
This module allows the cooperator to pay the subscribed shares online |
|
||||
during the subscription process |
|
||||
""", |
|
||||
'data': [ |
|
||||
"views/online_payment_template.xml", |
|
||||
"views/subscription_request_view.xml", |
|
||||
], |
|
||||
'installable': False, |
|
||||
'application': False, |
|
||||
} |
|
@ -1 +0,0 @@ |
|||||
from . import main |
|
@ -1,112 +0,0 @@ |
|||||
# -*- coding: utf-8 -*- |
|
||||
|
|
||||
from openerp import http |
|
||||
from openerp.http import request |
|
||||
from openerp.tools.translate import _ |
|
||||
|
|
||||
from openerp.addons.easy_my_coop.controllers.main import WebsiteSubscription |
|
||||
from openerp.addons.website_payment.controllers.main import website_payment |
|
||||
|
|
||||
|
|
||||
class SubscriptionOnlinePayment(WebsiteSubscription): |
|
||||
|
|
||||
def fill_values(self, values, is_company, load_from_user=False): |
|
||||
values = super(SubscriptionOnlinePayment, self).fill_values(values, is_company, load_from_user) |
|
||||
fields_desc = request.env['subscription.request'].sudo().fields_get(['payment_type']) |
|
||||
values['payment_types'] = fields_desc['payment_type']['selection'] |
|
||||
|
|
||||
return values |
|
||||
|
|
||||
def get_subscription_response(self, values, kwargs): |
|
||||
subscription = values.get('subscription_id', False) |
|
||||
if kwargs.get('payment_type') == 'online': |
|
||||
invoice = subscription.validate_subscription_request()[0] |
|
||||
acquirer = request.env['payment.acquirer'].search([('website_published', '=', True)])[0] |
|
||||
return website_payment().pay(reference=invoice.number, amount=invoice.residual, currency_id=invoice.currency_id.id, acquirer_id=acquirer.id) |
|
||||
else: |
|
||||
values = self.preRenderThanks(values, kwargs) |
|
||||
return request.website.render(kwargs.get("view_callback", "easy_my_coop.cooperator_thanks"), values) |
|
||||
|
|
||||
return True |
|
||||
|
|
||||
|
|
||||
class SubscriptionWebsitePayment(website_payment): |
|
||||
|
|
||||
@http.route(['/website_payment/transaction'], |
|
||||
type='json', |
|
||||
auth="public", website=True) |
|
||||
def transaction(self, reference, amount, currency_id, acquirer_id): |
|
||||
inv_obj = request.env['account.invoice'] |
|
||||
partner_id = request.env.user.partner_id.id if request.env.user.partner_id != request.website.partner_id else False |
|
||||
capital_release_request = inv_obj.sudo().search([('release_capital_request', '=', True), |
|
||||
('number', '=', reference)]) |
|
||||
|
|
||||
values = { |
|
||||
'acquirer_id': int(acquirer_id), |
|
||||
'reference': reference, |
|
||||
'amount': float(amount), |
|
||||
'currency_id': int(currency_id), |
|
||||
'partner_id': partner_id, |
|
||||
'release_capital_request': capital_release_request.id, |
|
||||
} |
|
||||
|
|
||||
if len(capital_release_request) > 0: |
|
||||
values['partner_id'] = capital_release_request.partner_id.id |
|
||||
values['release_capital_request'] = capital_release_request.id |
|
||||
|
|
||||
tx = request.env['payment.transaction'].sudo().create(values) |
|
||||
request.session['website_payment_tx_id'] = tx.id |
|
||||
return tx.id |
|
||||
|
|
||||
@http.route(['/website_payment/confirm'], |
|
||||
type='http', |
|
||||
auth='public', website=True) |
|
||||
def confirm(self, **kw): |
|
||||
tx_id = request.session.pop('website_payment_tx_id', False) |
|
||||
if tx_id: |
|
||||
tx = request.env['payment.transaction'].sudo().browse(tx_id) |
|
||||
status = (tx.state == 'done' and 'success') or 'danger' |
|
||||
message = (tx.state == 'done' and 'Your payment was successful! It may take some time to be validated on our end.') or 'OOps! There was a problem with your payment.' |
|
||||
return request.website.render('website_payment.confirm', {'tx': tx, 'status': status, 'message': message}) |
|
||||
else: |
|
||||
return request.redirect('/my/home') |
|
||||
|
|
||||
@http.route(['/website_payment/pay'], |
|
||||
type='http', |
|
||||
auth='public', website=True) |
|
||||
def pay(self, reference='', amount=False, currency_id=None, |
|
||||
acquirer_id=None, **kw): |
|
||||
env = request.env |
|
||||
user = env.user.sudo() |
|
||||
|
|
||||
currency_id = currency_id and int(currency_id) or user.company_id.currency_id.id |
|
||||
currency = env['res.currency'].browse(currency_id) |
|
||||
|
|
||||
# Try default one then fallback on first |
|
||||
acquirer_id = acquirer_id and int(acquirer_id) or \ |
|
||||
env['ir.values'].get_default('payment.transaction', 'acquirer_id', company_id=user.company_id.id) or \ |
|
||||
env['payment.acquirer'].search([('website_published', '=', True), ('company_id', '=', user.company_id.id)])[0].id |
|
||||
|
|
||||
acquirer = env['payment.acquirer'].with_context(submit_class='btn btn-primary pull-right', |
|
||||
submit_txt=_('Pay Now')).browse(acquirer_id) |
|
||||
# auto-increment reference with a number suffix if the reference already exists |
|
||||
reference = request.env['payment.transaction'].get_next_reference(reference) |
|
||||
|
|
||||
partner_id = user.partner_id.id if user.partner_id.id != request.website.partner_id.id else False |
|
||||
capital_release_request = request.env['account.invoice'].sudo().search( |
|
||||
[('release_capital_request', '=', True), |
|
||||
('number', '=', reference)] |
|
||||
) |
|
||||
|
|
||||
if len(capital_release_request) > 0: |
|
||||
partner_id = capital_release_request.partner_id.id |
|
||||
|
|
||||
payment_form = acquirer.sudo().render(reference, float(amount), currency.id, values={'return_url': '/website_payment/confirm', 'partner_id': partner_id})[0] |
|
||||
values = { |
|
||||
'reference': reference, |
|
||||
'acquirer': acquirer, |
|
||||
'currency': currency, |
|
||||
'amount': float(amount), |
|
||||
'payment_form': payment_form, |
|
||||
} |
|
||||
return request.website.render('website_payment.pay', values) |
|
@ -1,65 +0,0 @@ |
|||||
# Translation of Odoo Server. |
|
||||
# This file contains the translation of the following modules: |
|
||||
# * easy_my_coop_online_payment |
|
||||
# |
|
||||
msgid "" |
|
||||
msgstr "" |
|
||||
"Project-Id-Version: Odoo Server 9.0c\n" |
|
||||
"Report-Msgid-Bugs-To: \n" |
|
||||
"POT-Creation-Date: 2017-01-18 21:56+0000\n" |
|
||||
"PO-Revision-Date: 2017-01-18 23:19+0100\n" |
|
||||
"Last-Translator: <>\n" |
|
||||
"Language-Team: \n" |
|
||||
"MIME-Version: 1.0\n" |
|
||||
"Content-Type: text/plain; charset=UTF-8\n" |
|
||||
"Content-Transfer-Encoding: 8bit\n" |
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n" |
|
||||
"X-Generator: Poedit 1.6.5\n" |
|
||||
"Language: fr\n" |
|
||||
|
|
||||
#. module: easy_my_coop_online_payment |
|
||||
#: model:ir.ui.view,arch_db:easy_my_coop_online_payment.SubscriptionOnlinePayment |
|
||||
msgid "<i class=\"fa fa-arrow-circle-right\"/> Pay Now" |
|
||||
msgstr "<i class=\"fa fa-arrow-circle-right\"/> Pay Now" |
|
||||
|
|
||||
#. module: easy_my_coop_online_payment |
|
||||
#: selection:subscription.request,payment_type:0 |
|
||||
msgid "Deferred" |
|
||||
msgstr "Différé" |
|
||||
|
|
||||
#. module: easy_my_coop_online_payment |
|
||||
#: selection:subscription.request,payment_type:0 |
|
||||
msgid "Online" |
|
||||
msgstr "En ligne" |
|
||||
|
|
||||
#. module: easy_my_coop_online_payment |
|
||||
#: code:addons/easy_my_coop_online_payment/controllers/main.py:86 |
|
||||
#: model:ir.ui.view,arch_db:easy_my_coop_online_payment.SubscriptionOnlinePayment |
|
||||
#, python-format |
|
||||
msgid "Pay Now" |
|
||||
msgstr "Payer Maintenant" |
|
||||
|
|
||||
#. module: easy_my_coop_online_payment |
|
||||
#: model:ir.model,name:easy_my_coop_online_payment.model_payment_transaction |
|
||||
msgid "Payment Transaction" |
|
||||
msgstr "Transaction" |
|
||||
|
|
||||
#. module: easy_my_coop_online_payment |
|
||||
#: model:ir.model.fields,field_description:easy_my_coop_online_payment.field_subscription_request_payment_type |
|
||||
msgid "Payment Type" |
|
||||
msgstr "Type de paiement" |
|
||||
|
|
||||
#. module: easy_my_coop_online_payment |
|
||||
#: model:ir.ui.view,arch_db:easy_my_coop_online_payment.subscription_payment_type |
|
||||
msgid "Payment type" |
|
||||
msgstr "Type de paiement" |
|
||||
|
|
||||
#. module: easy_my_coop_online_payment |
|
||||
#: model:ir.model.fields,field_description:easy_my_coop_online_payment.field_payment_transaction_release_capital_request |
|
||||
msgid "Release Capital request" |
|
||||
msgstr "Demande de libération de capital" |
|
||||
|
|
||||
#. module: easy_my_coop_online_payment |
|
||||
#: model:ir.model,name:easy_my_coop_online_payment.model_subscription_request |
|
||||
msgid "Subscription Request" |
|
||||
msgstr "Demande de souscription" |
|
@ -1,2 +0,0 @@ |
|||||
from . import payment_transaction |
|
||||
from . import coop |
|
@ -1,26 +0,0 @@ |
|||||
# -*- coding: utf-8 -*- |
|
||||
from openerp import fields, models |
|
||||
|
|
||||
|
|
||||
class SubscriptionRequest(models.Model): |
|
||||
_inherit = 'subscription.request' |
|
||||
|
|
||||
payment_type = fields.Selection([('online', 'Online'), |
|
||||
('deferred', 'Deferred')], |
|
||||
string='Payment Type', |
|
||||
default="deferred") |
|
||||
|
|
||||
def send_capital_release_request(self, inv): |
|
||||
if self.payment_type == 'deferred': |
|
||||
super(SubscriptionRequest, self).send_capital_release_request(inv) |
|
||||
return True |
|
||||
|
|
||||
|
|
||||
class AccountInvoice(models.Model): |
|
||||
_inherit = 'account.invoice' |
|
||||
|
|
||||
def post_process_confirm_paid(self, effective_date): |
|
||||
if self.subscription_request.payment_type == 'deferred': |
|
||||
self.set_cooperator_effective(effective_date) |
|
||||
|
|
||||
return True |
|
@ -1,47 +0,0 @@ |
|||||
# -*- coding: utf-8 -*- |
|
||||
from datetime import datetime |
|
||||
import logging |
|
||||
|
|
||||
from openerp import api, fields, models |
|
||||
|
|
||||
_logger = logging.getLogger(__name__) |
|
||||
|
|
||||
|
|
||||
class PaymentTransaction(models.Model): |
|
||||
|
|
||||
_inherit = 'payment.transaction' |
|
||||
|
|
||||
release_capital_request = fields.Many2one('account.invoice', |
|
||||
string="Release Capital request") |
|
||||
|
|
||||
@api.model |
|
||||
def process_online_payment_reception(self, tx): |
|
||||
release_capital_request = tx.release_capital_request |
|
||||
release_capital_request.subscription_request[0].state = 'paid' |
|
||||
effective_date = datetime.now().strftime("%d/%m/%Y") |
|
||||
release_capital_request.sudo().set_cooperator_effective(effective_date) |
|
||||
|
|
||||
return True |
|
||||
|
|
||||
@api.v7 |
|
||||
def _paypal_form_validate(self, cr, uid, tx, data, context=None): |
|
||||
status = data.get('payment_status') |
|
||||
res = { |
|
||||
'acquirer_reference': data.get('txn_id'), |
|
||||
'paypal_txn_type': data.get('payment_type'), |
|
||||
} |
|
||||
if status in ['Completed', 'Processed']: |
|
||||
_logger.info('Validated Paypal payment for tx %s: set as done' % (tx.reference)) |
|
||||
res.update(state='done', date_validate=fields.Datetime.now()) |
|
||||
result = tx.write(res) |
|
||||
self.process_online_payment_reception(cr, uid, tx) |
|
||||
return result |
|
||||
elif status in ['Pending', 'Expired']: |
|
||||
_logger.info('Received notification for Paypal payment %s: set as pending' % (tx.reference)) |
|
||||
res.update(state='pending', state_message=data.get('pending_reason', '')) |
|
||||
return tx.write(res) |
|
||||
else: |
|
||||
error = 'Received unrecognized status for Paypal payment %s: %s, set as error' % (tx.reference, status) |
|
||||
_logger.info(error) |
|
||||
res.update(state='error', state_message=error) |
|
||||
return tx.write(res) |
|
@ -1,25 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<odoo> |
|
||||
<data> |
|
||||
<template id="subscription_payment_type" inherit_id="easy_my_coop.becomecooperator" name="Removing fields"> |
|
||||
<xpath expr="//div[@name='share_div']" position="after"> |
|
||||
<div t-attf-class="form-group #{error and 'payment_type' in error and 'has-error' or ''}"> |
|
||||
<label class="col-md-3 col-sm-4 control-label" for="company_type">Payment type</label> |
|
||||
<select name="payment_type" class="col-md-7 col-sm-8 form-control" required="True" style="width:54%;margin-left:15px"> |
|
||||
<option value=""></option> |
|
||||
<t t-foreach="payment_types or []" t-as="pay_type"> |
|
||||
<option t-att-value="pay_type[0]" t-att-selected="pay_type[0] == payment_type"><t t-esc="pay_type[1]"/></option> |
|
||||
</t> |
|
||||
</select> |
|
||||
</div> |
|
||||
</xpath> |
|
||||
</template> |
|
||||
|
|
||||
<template id="easy_my_coop_online_payment.SubscriptionOnlinePayment" name="Subscription Online Payment" page="True"> |
|
||||
<a t-if="invoice.state == 'open'" t-attf-href="/website_payment/pay?reference=#{invoice.number}&amount=#{invoice.residual}&currency_id=#{invoice.currency_id.id}&acquirer_id=#{acquirer_id}&country_id=#{invoice.partner_id.country_id.id}" alt="Pay Now" class="btn btn-xs btn-primary"><i class="fa fa-arrow-circle-right"/> Pay Now</a> |
|
||||
</template> |
|
||||
</data> |
|
||||
</odoo> |
|
||||
|
|
||||
|
|
||||
|
|
@ -1,28 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<odoo> |
|
||||
<data> |
|
||||
|
|
||||
<record id="online_payment_subreq__tree" model="ir.ui.view"> |
|
||||
<field name="name">subscription.request.tree</field> |
|
||||
<field name="model">subscription.request</field> |
|
||||
<field name="inherit_id" ref="easy_my_coop.subscription_request_tree"/> |
|
||||
<field name="arch" type="xml"> |
|
||||
<field name="type" position="after"> |
|
||||
<field name="payment_type"/> |
|
||||
</field> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="online_payment_subreq_form" model="ir.ui.view"> |
|
||||
<field name="name">subscription.request.tree</field> |
|
||||
<field name="model">subscription.request</field> |
|
||||
<field name="inherit_id" ref="easy_my_coop.subscription_request_form"/> |
|
||||
<field name="arch" type="xml"> |
|
||||
<field name="date" position="after"> |
|
||||
<field name="payment_type"/> |
|
||||
</field> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
</data> |
|
||||
</odoo> |
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue