diff --git a/addons/account/models/account_invoice.py b/addons/account/models/account_invoice.py
index 4da3b2f624d..b6eb9f69efa 100644
--- a/addons/account/models/account_invoice.py
+++ b/addons/account/models/account_invoice.py
@@ -213,7 +213,7 @@ class AccountInvoice(models.Model):
move_name = fields.Char(string='Journal Entry Name', readonly=False,
default=False, copy=False,
help="Technical field holding the number given to the invoice, automatically set when the invoice is validated then stored to set the same number again if the invoice is cancelled, set to draft and re-validated.")
- reference = fields.Char(string='Vendor Reference',
+ reference = fields.Char(string='Vendor Reference', copy=False,
help="The partner reference of this invoice.", readonly=True, states={'draft': [('readonly', False)]})
reference_type = fields.Selection('_get_reference_type', string='Payment Reference',
required=True, readonly=True, states={'draft': [('readonly', False)]},
diff --git a/addons/account/tests/test_reconciliation.py b/addons/account/tests/test_reconciliation.py
index c0430d720c9..3b0198b3f09 100644
--- a/addons/account/tests/test_reconciliation.py
+++ b/addons/account/tests/test_reconciliation.py
@@ -19,13 +19,14 @@ class TestReconciliation(AccountingTestCase):
self.res_currency_model = self.registry('res.currency')
self.res_currency_rate_model = self.registry('res.currency.rate')
- self.partner_agrolait_id = self.env.ref("base.res_partner_2").id
+ partner_agrolait = self.env.ref("base.res_partner_2")
+ self.partner_agrolait_id = partner_agrolait.id
self.currency_swiss_id = self.env.ref("base.CHF").id
self.currency_usd_id = self.env.ref("base.USD").id
self.currency_euro_id = self.env.ref("base.EUR").id
self.env.ref('base.main_company').write({'currency_id': self.currency_euro_id})
- self.account_rcv = self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_receivable').id)], limit=1)
- self.account_rsa = self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_payable').id)], limit=1)
+ self.account_rcv = partner_agrolait.property_account_receivable_id or self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_receivable').id)], limit=1)
+ self.account_rsa = partner_agrolait.property_account_payable_id or self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_payable').id)], limit=1)
self.product = self.env.ref("product.product_product_4")
self.bank_journal_euro = self.env['account.journal'].create({'name': 'Bank', 'type': 'bank', 'code': 'BNK67'})
diff --git a/addons/hr_attendance/models/hr_attendance.py b/addons/hr_attendance/models/hr_attendance.py
index 76d442a4b67..1e43f98cd69 100644
--- a/addons/hr_attendance/models/hr_attendance.py
+++ b/addons/hr_attendance/models/hr_attendance.py
@@ -16,7 +16,8 @@ class HrAttendance(models.Model):
return self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
employee_id = fields.Many2one('hr.employee', string="Employee", default=_default_employee, required=True, ondelete='cascade', index=True)
- department_id = fields.Many2one('hr.department', string="Department", related="employee_id.department_id")
+ department_id = fields.Many2one('hr.department', string="Department", related="employee_id.department_id",
+ readonly=True)
check_in = fields.Datetime(string="Check In", default=fields.Datetime.now, required=True)
check_out = fields.Datetime(string="Check Out")
worked_hours = fields.Float(string='Worked Hours', compute='_compute_worked_hours', store=True, readonly=True)
diff --git a/addons/point_of_sale/models/pos_order.py b/addons/point_of_sale/models/pos_order.py
index 43885b39768..27c1b8cfbcd 100644
--- a/addons/point_of_sale/models/pos_order.py
+++ b/addons/point_of_sale/models/pos_order.py
@@ -993,6 +993,7 @@ class ReportSaleDetails(models.AbstractModel):
payments = []
return {
+ 'currency_precision': user_currency.decimal_places,
'total_paid': user_currency.round(total),
'payments': payments,
'company_name': self.env.user.company_id.name,
diff --git a/addons/point_of_sale/static/src/js/devices.js b/addons/point_of_sale/static/src/js/devices.js
index 5d272bbfda8..e8bd95bc117 100644
--- a/addons/point_of_sale/static/src/js/devices.js
+++ b/addons/point_of_sale/static/src/js/devices.js
@@ -4,6 +4,7 @@ odoo.define('point_of_sale.devices', function (require) {
var core = require('web.core');
var Model = require('web.DataModel');
var Session = require('web.Session');
+var PosBaseWidget = require('point_of_sale.BaseWidget');
var QWeb = core.qweb;
var _t = core._t;
@@ -440,6 +441,7 @@ var ProxyDevice = core.Class.extend(core.mixins.PropertiesMixin,{
var self = this;
new Model('report.point_of_sale.report_saledetails').call('get_sale_details').then(function(result){
var env = {
+ widget: new PosBaseWidget(self),
company: self.pos.company,
pos: self.pos,
products: result.products,
diff --git a/addons/point_of_sale/static/src/js/screens.js b/addons/point_of_sale/static/src/js/screens.js
index d9fe56cd5e5..1dcbf9d90fb 100644
--- a/addons/point_of_sale/static/src/js/screens.js
+++ b/addons/point_of_sale/static/src/js/screens.js
@@ -980,6 +980,9 @@ var ProductScreenWidget = ScreenWidget.extend({
this.product_categories_widget.reset_category();
this.numpad.state.reset();
}
+ if (this.pos.config.iface_vkeyboard && this.chrome.widget.keyboard) {
+ this.chrome.widget.keyboard.connect($(this.el.querySelector('.searchbox input')));
+ }
},
close: function(){
@@ -1326,6 +1329,7 @@ var ClientListScreenWidget = ScreenWidget.extend({
// to maintain consistent scroll.
display_client_details: function(visibility,partner,clickpos){
var self = this;
+ var searchbox = this.$('.searchbox input');
var contents = this.$('.client-details-contents');
var parent = this.$('.client-list').parent();
var scroll = parent.scrollTop();
@@ -1362,6 +1366,19 @@ var ClientListScreenWidget = ScreenWidget.extend({
this.details_visible = true;
this.toggle_save_button();
} else if (visibility === 'edit') {
+ // Connect the keyboard to the edited field
+ if (this.pos.config.iface_vkeyboard && this.chrome.widget.keyboard) {
+ contents.off('click', '.detail');
+ searchbox.off('click');
+ contents.on('click', '.detail', function(ev){
+ self.chrome.widget.keyboard.connect(ev.target);
+ self.chrome.widget.keyboard.show();
+ });
+ searchbox.on('click', function() {
+ self.chrome.widget.keyboard.connect($(this));
+ });
+ }
+
this.editing_client = true;
contents.empty();
contents.append($(QWeb.render('ClientDetailsEdit',{widget:this,partner:partner})));
@@ -1404,6 +1421,9 @@ var ClientListScreenWidget = ScreenWidget.extend({
},
close: function(){
this._super();
+ if (this.pos.config.iface_vkeyboard && this.chrome.widget.keyboard) {
+ this.chrome.widget.keyboard.hide();
+ }
},
});
gui.define_screen({name:'clientlist', widget: ClientListScreenWidget});
diff --git a/addons/point_of_sale/static/src/xml/pos.xml b/addons/point_of_sale/static/src/xml/pos.xml
index ee5bef3456d..c6627159262 100644
--- a/addons/point_of_sale/static/src/xml/pos.xml
+++ b/addons/point_of_sale/static/src/xml/pos.xml
@@ -900,7 +900,7 @@