summaryrefslogtreecommitdiff
path: root/addons/iap/static/src
diff options
context:
space:
mode:
authorAntony Lesuisse <al@openerp.com>2017-10-04 20:05:05 +0200
committerAntony Lesuisse <al@openerp.com>2017-10-04 20:22:22 +0200
commit6b22476e20fb7eade959194bfabd94d353e2d5ff (patch)
treefbad12338bed7d4f4b38b017cd746878f897b81c /addons/iap/static/src
parentea51b6b06f33fa97ace9c55bb86fceaeb60bb18a (diff)
[ADD] iap: In app purchase
IAP allow app publishers to charge for ongoing services. In that context, Odoo acts mostly as a payment platform between the service user (client) and the service provider (Odoo App developer).
Diffstat (limited to 'addons/iap/static/src')
-rw-r--r--addons/iap/static/src/js/crash_manager.js49
-rw-r--r--addons/iap/static/src/js/dashboard.js29
-rw-r--r--addons/iap/static/src/js/iap_credit.js28
-rw-r--r--addons/iap/static/src/xml/iap_templates.xml26
4 files changed, 132 insertions, 0 deletions
diff --git a/addons/iap/static/src/js/crash_manager.js b/addons/iap/static/src/js/crash_manager.js
new file mode 100644
index 00000000000..3c8d330013e
--- /dev/null
+++ b/addons/iap/static/src/js/crash_manager.js
@@ -0,0 +1,49 @@
+odoo.define('iap.CrashManager', function (require) {
+"use strict";
+
+var ajax = require('web.ajax');
+var core = require('web.core');
+var CrashManager = require('web.CrashManager');
+var Dialog = require('web.Dialog');
+
+var _t = core._t;
+var QWeb = core.qweb;
+
+CrashManager.include({
+ /**
+ * @override
+ */
+ rpc_error: function (error) {
+ if (error.data.name === "odoo.addons.iap.models.iap.InsufficientCreditError") {
+ var error_data = JSON.parse(error.data.message);
+ ajax.jsonRpc('/web/dataset/call_kw', 'call', {
+ model: 'iap.account',
+ method: 'get_credits_url',
+ args: [],
+ kwargs: {
+ base_url: error_data.base_url,
+ service_name: error_data.service_name,
+ credit: error_data.credit,
+ }
+ }).then(function (url) {
+ new Dialog(this, {
+ size: 'large',
+ title: error_data.title || _t("Insufficient Balance"),
+ $content: $(QWeb.render('iap.redirect_to_odoo_credit', {
+ data: error_data,
+ })).css('padding', 0),
+ buttons: [
+ {text: 'Buy credits at Odoo', classes : "btn-primary", click: function() {
+ window.open(url, '_blank');
+ }, close:true},
+ {text: _t("Cancel"), close: true}
+ ],
+ }).open();
+ });
+ } else {
+ this._super.apply(this, arguments);
+ }
+ },
+});
+
+});
diff --git a/addons/iap/static/src/js/dashboard.js b/addons/iap/static/src/js/dashboard.js
new file mode 100644
index 00000000000..b3490da2eda
--- /dev/null
+++ b/addons/iap/static/src/js/dashboard.js
@@ -0,0 +1,29 @@
+odoo.define('iap.Dashboard', function (require) {
+"use strict";
+
+var ajax = require('web.ajax');
+var core = require('web.core');
+var Dashboard = require('web_settings_dashboard');
+
+var _t = core._t;
+var QWeb = core.qweb;
+
+Dashboard.Dashboard.include({
+ /**
+ * @override
+ */
+ load_apps: function (data) {
+ var _super = this._super.bind(this);
+ return ajax.jsonRpc('/web/dataset/call_kw', 'call', {
+ model: 'iap.account',
+ method: 'get_account_url',
+ args: [],
+ kwargs: {},
+ }).then(function (url) {
+ data.apps.url = url;
+ return _super(data);
+ });
+ },
+});
+
+});
diff --git a/addons/iap/static/src/js/iap_credit.js b/addons/iap/static/src/js/iap_credit.js
new file mode 100644
index 00000000000..37cddd72aa8
--- /dev/null
+++ b/addons/iap/static/src/js/iap_credit.js
@@ -0,0 +1,28 @@
+odoo.define('iap.redirect_odoo_credit_widget', function(require) {
+"use strict";
+
+var core = require('web.core');
+var framework = require('web.framework');
+var Widget = require('web.Widget');
+var QWeb = core.qweb;
+
+
+var IapOdooCreditRedirect = Widget.extend({
+ template: 'iap.redirect_to_odoo_credit',
+ events : {
+ "click .redirect_confirm" : "odoo_redirect",
+ },
+ init: function (parent, action) {
+ this._super(parent, action);
+ this.url = action.params.url;
+ },
+
+ odoo_redirect: function () {
+ window.open(this.url, '_blank');
+ this.do_action({type: 'ir.actions.act_window_close'});
+ // framework.redirect(this.url);
+ },
+
+});
+core.action_registry.add('iap_odoo_credit_redirect', IapOdooCreditRedirect);
+});
diff --git a/addons/iap/static/src/xml/iap_templates.xml b/addons/iap/static/src/xml/iap_templates.xml
new file mode 100644
index 00000000000..9b52a4ec445
--- /dev/null
+++ b/addons/iap/static/src/xml/iap_templates.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<template id="template" xml:space="preserve">
+
+ <!-- LAYOUT TEMPLATES -->
+ <div t-name="iap.redirect_to_odoo_credit">
+ <t t-if="data.body">
+ <div t-raw="data.body"/>
+ </t>
+ <t t-if="!data.body">
+ <t t-if="data.message">
+ <span t-esc="data.message"/>
+ </t>
+ <t t-if="!data.message">
+ <span>Insufficient credit to perform this service.</span>
+ </t>
+ </t>
+ </div>
+
+ <t t-extend="DashboardApps">
+ <t t-jquery=".o_web_settings_dashboard_pills" t-operation="append">
+ <a class="pull-right" t-att-href="widget.data.url" target="_blank">
+ <i class="fa fa-money fa-2x text-muted"/> In-App Purchases</a>
+ </t>
+ </t>
+
+</template>