Auélien DUMAINE
11 years ago
8 changed files with 231 additions and 4 deletions
-
16pos_customer_display/static/src/js/customer_display.js
-
1pos_payment_terminal/__init__.py
-
45pos_payment_terminal/__openerp__.py
-
36pos_payment_terminal/pos_payment_terminal.py
-
10pos_payment_terminal/pos_payment_terminal.xml
-
25pos_payment_terminal/pos_payment_terminal_view.xml
-
86pos_payment_terminal/static/src/js/pos_payment_terminal.js
-
16pos_payment_terminal/static/src/xml/pos_payment_terminal.xml
@ -0,0 +1 @@ |
|||
import pos_payment_terminal |
@ -0,0 +1,45 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# OpenERP, Open Source Management Solution |
|||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). |
|||
# |
|||
# 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': 'POS Payment Terminal', |
|||
'version': '0.1', |
|||
'category': 'Point Of Sale', |
|||
'summary': 'Manage Payment Terminal device from POS front end', |
|||
'description': """ |
|||
POS Payment Terminal |
|||
==================== |
|||
|
|||
This module adds support for Payment Terminal in the Point of Sale. This module is designed to be installed on the *main Odoo server*. On the *POSbox*, you should install the module *hw_x* depending on the protocol implemented in your device. Ingenico devices support the Telium protocol implemented in the *hw_telium_payment_terminal* module. |
|||
|
|||
This module support two payment methods : cards and checks. The payment method should be configured on the main Odoo server, in the menu Point of Sale > Configuration > Payment Methods. |
|||
|
|||
This module has been developped during a POS code sprint at Akretion France from July 7th to July 10th 2014. This module is part of the POS project of the Odoo Community Association http://odoo-community.org/. You are invited to become a member and/or get involved in the Association ! |
|||
|
|||
Please contact Alexis de Lattre from Akretion <alexis.delattre@akretion.com> for any help or question about this module. |
|||
""", |
|||
'author': 'Aurélien DUMAINE', |
|||
'depends': ['point_of_sale'], |
|||
'data' : ['pos_payment_terminal.xml', |
|||
'pos_payment_terminal_view.xml'], |
|||
'qweb': ['static/src/xml/pos_payment_terminal.xml'], |
|||
} |
@ -0,0 +1,36 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# OpenERP, Open Source Management Solution |
|||
# Copyright (C) 2004-2010 Tiny SP (<http://tiny.be>). |
|||
# |
|||
# 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/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
from openerp import models, fields |
|||
|
|||
class account_journal(models.Model): |
|||
_name = 'account.journal' |
|||
_inherit = 'account.journal' |
|||
|
|||
payment_mode = fields.Selection((('card', 'Card'), ('check', 'Check')), 'Payment mode', help="Select the payment mode sent to the payment terminal") |
|||
|
|||
class pos_config(models.Model): |
|||
_name = 'pos.config' |
|||
_inherit = 'pos.config' |
|||
|
|||
iface_payment_terminal = fields.Boolean('Payment Terminal', help="A payment terminal is available on the Proxy") |
|||
|
|||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
@ -0,0 +1,10 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<openerp> |
|||
<data> |
|||
<template id="assets_backend" name="point_of_sale assets" inherit_id="web.assets_backend"> |
|||
<xpath expr="." position="inside"> |
|||
<script type="text/javascript" src="/pos_payment_terminal/static/src/js/pos_payment_terminal.js"></script> |
|||
</xpath> |
|||
</template> |
|||
</data> |
|||
</openerp> |
@ -0,0 +1,25 @@ |
|||
<?xml version="1.0"?> |
|||
<openerp> |
|||
<data> |
|||
<record id="view_pos_config_form" model="ir.ui.view"> |
|||
<field name="name">pos.config.form.view.inherit</field> |
|||
<field name="model">pos.config</field> |
|||
<field name="inherit_id" ref="point_of_sale.view_pos_config_form"/> |
|||
<field name="arch" type="xml"> |
|||
<field name="iface_cashdrawer" position="after"> |
|||
<field name="iface_payment_terminal"/> |
|||
</field> |
|||
</field> |
|||
</record> |
|||
<record id="view_account_journal_pos_user_form" model="ir.ui.view"> |
|||
<field name="name">POS journal inherit</field> |
|||
<field name="model">account.journal</field> |
|||
<field name="inherit_id" ref="point_of_sale.view_account_journal_pos_user_form"/> |
|||
<field name="arch" type="xml"> |
|||
<field name="self_checkout_payment_method" position="after"> |
|||
<field name="payment_mode"/> |
|||
</field> |
|||
</field> |
|||
</record> |
|||
</data> |
|||
</openerp> |
@ -0,0 +1,86 @@ |
|||
openerp.pos_payment_terminal = function(instance){ |
|||
module = instance.point_of_sale; |
|||
|
|||
module.ProxyDevice = module.ProxyDevice.extend({ |
|||
payment_terminal_transaction_start: function(line, currency_iso, currency_iso_numeric){ |
|||
var data = {'amount' : line.get_amount(), |
|||
'currency_iso' : currency_iso, |
|||
'currency_iso_numeric' : currency_iso_numeric, |
|||
'payment_mode' : line.cashregister.journal.payment_mode}; |
|||
alert(JSON.stringify(data)); |
|||
this.message('payment_terminal_transaction_start', {'payment_info' : JSON.stringify(data)}); |
|||
}, |
|||
}); |
|||
|
|||
//TODO make the button bigger and with better name
|
|||
|
|||
var _super_PaymentScreenWidget_init_ = module.PaymentScreenWidget.prototype.init; |
|||
module.PaymentScreenWidget.prototype.init = function(parent, options){ |
|||
_super_PaymentScreenWidget_init_.call(this, parent, options); |
|||
self = this; |
|||
this.payment_terminal_transaction_start = function(event){ |
|||
var node = this; |
|||
while(node && !node.classList.contains('paymentline')){ |
|||
node = node.parentNode; |
|||
} |
|||
if(node){ |
|||
if (self.pos.config.iface_payment_terminal) |
|||
self.pos.proxy.payment_terminal_transaction_start(node.line, self.pos.currency.name, self.pos.currency.iso_numeric); |
|||
} |
|||
event.stopPropagation(); |
|||
}; |
|||
}; |
|||
|
|||
var _super_renderPaymentline_ = module.PaymentScreenWidget.prototype.render_paymentline; |
|||
module.PaymentScreenWidget.prototype.render_paymentline = function(line){ |
|||
var el_node = _super_renderPaymentline_.call(this, line); |
|||
if (line.cashregister.journal.payment_mode && this.pos.config.iface_payment_terminal){ |
|||
if (!this.pos.currency.name){ |
|||
var self = this; |
|||
var currencies = new instance.web.Model('res.currency').query(['name', 'iso_numeric']) |
|||
.filter([['id','=',this.pos.currency.id]]) |
|||
.all().then(function (currency) { |
|||
self.pos.currency.name = currency[0].name; |
|||
self.pos.currency.iso_numeric = currency[0].iso_numeric; |
|||
}); |
|||
} |
|||
el_node.querySelector('.payment-terminal-transaction-start') |
|||
.addEventListener('click', this.payment_terminal_transaction_start); |
|||
//.addEventListener('click', this.pos.proxy.payment_terminal_transaction_start(line, this.pos.currency.name, this.pos.currency.iso_numeric));
|
|||
} |
|||
return el_node; |
|||
}; |
|||
|
|||
/* |
|||
var _super_load_server_data_ = module.PosModel.prototype.load_server_data; |
|||
module.PosModel.prototype.load_server_data = function(){ |
|||
var loaded = _super_load_server_data_.call(this); |
|||
//FIXME : this is asynchronous, I can't assume the pos.currency loaded when we enter is this
|
|||
this.pos.currency.name = new instance.web.Model('res.currency').query('name').filter([['id','=',this.pos_currency.id]]).all()[0] |
|||
return loaded; |
|||
}; |
|||
*/ |
|||
|
|||
/* |
|||
var _super_setSmartStatus_ = module.ProxyStatusWidget.prototype.set_smart_status; |
|||
module.ProxyStatusWidget.prototype.set_smart_status = function(status){ |
|||
_super_setSmartStatus_.call(this, status); |
|||
if(status.status === 'connected'){ |
|||
var warning = false; |
|||
var msg = '' |
|||
if(this.pos.config.iface_customer_display){ |
|||
var customer_display = status.drivers.customer_display ? status.drivers.customer_display.status : false; |
|||
if( customer_display != 'connected' && customer_display != 'connecting'){ |
|||
warning = true; |
|||
msg = msg ? msg + ' & ' : msg; |
|||
msg += _t('Customer display'); |
|||
} |
|||
} |
|||
msg = msg ? msg + ' ' + _t('Offline') : msg; |
|||
this.set_status(warning ? 'warning' : 'connected', msg); |
|||
}else{ |
|||
this.set_status(status.status,''); |
|||
} |
|||
}; |
|||
*/ |
|||
}; |
@ -0,0 +1,16 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<templates id="template" xml:space="preserve"> |
|||
<t t-extend="Paymentline" > |
|||
<t t-jquery=".paymentline-name" t-operation="append"> |
|||
<t t-if="line.cashregister.journal.payment_mode"> |
|||
<!-- <t t-if="pos.config.iface_payment_terminal">--> |
|||
<span class="payment-terminal-transaction-start"> |
|||
<button> |
|||
<t t-esc="line.cashregister.journal.payment_mode"/> |
|||
</button> |
|||
</span> |
|||
<!-- </t> --> |
|||
</t> |
|||
</t> |
|||
</t> |
|||
</templates> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue