From de04e2309c0b7b798b8041ded1c7ad786eb9f93e Mon Sep 17 00:00:00 2001 From: Minh Tran Date: Fri, 25 Nov 2011 19:25:22 +0100 Subject: [PATCH 01/29] [IMP] After a module install from the installer, the user if fowarded to the module default screen bzr revid: mit@openerp.com-20111125182522-2dn2xt19rosv1sy6 --- .../web_dashboard/static/src/js/dashboard.js | 38 ++++++++++--------- .../static/src/xml/web_dashboard.xml | 2 +- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/addons/web_dashboard/static/src/js/dashboard.js b/addons/web_dashboard/static/src/js/dashboard.js index 5d9c82af027..e3ee0e2b542 100644 --- a/addons/web_dashboard/static/src/js/dashboard.js +++ b/addons/web_dashboard/static/src/js/dashboard.js @@ -337,44 +337,44 @@ openerp.web_dashboard.apps = { applications: [ [ { - module: 'crm', name: 'CRM', + module: 'crm', name: 'CRM', menu: 'Sales', help: "Acquire leads, follow opportunities, manage prospects and phone calls, \u2026" }, { - module: 'sale', name: 'Sales', + module: 'sale', name: 'Sales', menu: 'Sales', help: "Do quotations, follow sales orders, invoice and control deliveries" }, { - module: 'account_voucher', name: 'Invoicing', + module: 'account_voucher', name: 'Invoicing', menu: 'Accounting', help: "Send invoice, track payments and reminders" }, { - module: 'point_of_sale', name: 'Point of Sales', + module: 'point_of_sale', name: 'Point of Sale', menu: 'Point of Sale', help: "Manage shop sales, use touch-screen POS" } ], [ { - module: 'purchase', name: 'Purchase', + module: 'purchase', name: 'Purchase', menu: 'Sales', help: "Do purchase orders, control invoices and reception, follow your suppliers, \u2026" }, { - module: 'stock', name: 'Warehouse', + module: 'stock', name: 'Warehouse', menu: 'Warehouse', help: "Track your stocks, schedule product moves, manage incoming and outgoing shipments, \u2026" }, { - module: 'mrp', name: 'Manufacturing', + module: 'mrp', name: 'Manufacturing', menu: 'Manufacturing', help: "Manage your manufacturing, control your supply chain, personalize master data, \u2026" }, { - module: 'account_accountant', name: 'Accounting and Finance', + module: 'account_accountant', name: 'Accounting and Finance', menu: 'Accounting', help: "Record financial operations, automate followup, manage multi-currency, \u2026" } ], [ { - module: 'project', name: 'Projects', + module: 'project', name: 'Projects', menu: 'Project', help: "Manage projects, track tasks, invoice task works, follow issues, \u2026" }, { - module: 'hr', name: 'Human Resources', + module: 'hr', name: 'Human Resources', menu: 'Human Resources', help: "Manage employees and their contracts, follow laves, recruit people, \u2026" }, { - module: 'marketing', name: 'Marketing', + module: 'marketing', name: 'Marketing', menu: 'Marketing', help: "Manage campaigns, follow activities, automate emails, \u2026" }, { - module: 'knowledge', name: 'Knowledge', + module: 'knowledge', name: 'Knowledge', menu: 'Knowledge', help: "Track your documents, browse your files, \u2026" } ] @@ -426,10 +426,10 @@ openerp.web_dashboard.ApplicationTiles = openerp.web.View.extend({ var installer = QWeb.render('StaticHome', render_ctx); self.$element.append(installer); this.$element.delegate('.oe-static-home-tile-text button', 'click', function () { - self.install_module($(this).val()); + self.install_module($(this).val(), $(this).data('menu')); }); }, - install_module: function (module_name) { + install_module: function (module_name, menu_name) { var self = this; var Modules = new openerp.web.DataSetSearch( this, 'ir.module.module', null, @@ -443,21 +443,23 @@ openerp.web_dashboard.ApplicationTiles = openerp.web.View.extend({ [_.pluck(records, 'id'), 'to install', ['uninstalled']], function () { Upgrade.call('upgrade_module', [[]], function () { - self.run_configuration_wizards(); + self.run_configuration_wizards(menu_name); }); } ) }); }, - run_configuration_wizards: function () { + run_configuration_wizards: function (menu_name) { var self = this; new openerp.web.DataSet(this, 'res.config').call('start', [[]], function (action) { self.widget_parent.widget_parent.do_action(action, function () { openerp.webclient.do_reload(); }); self.$element.empty(); - self.do_display_root_menu().then(function () { - $.unblockUI(); + var dss = new openerp.web.DataSetSearch(this, 'ir.ui.menu', null, [['parent_id', '=', false], ['name', '=', menu_name]]); + dss.read_slice(['id'], {}, function(menus) { + if(!(menus.length === 1)) { $.unblockUI(); return; } + $.when(openerp.webclient.menu.on_menu_click(null, menus[0].id)).then($.unblockUI); }); }); } diff --git a/addons/web_dashboard/static/src/xml/web_dashboard.xml b/addons/web_dashboard/static/src/xml/web_dashboard.xml index 9703013f777..6a0f2c52628 100644 --- a/addons/web_dashboard/static/src/xml/web_dashboard.xml +++ b/addons/web_dashboard/static/src/xml/web_dashboard.xml @@ -129,7 +129,7 @@

- +
From 4ca43cd31e4324531d2816af27d97546aafb1f1f Mon Sep 17 00:00:00 2001 From: Minh Tran Date: Mon, 5 Dec 2011 16:44:25 +0100 Subject: [PATCH 02/29] [IMP] Changed the default home page bzr revid: mit@openerp.com-20111205154425-fw94io3x1dagpc5h --- addons/web/static/src/js/chrome.js | 10 +-- .../web_dashboard/static/src/js/dashboard.js | 69 +----------------- addons/web_default_home/__init__.py | 0 addons/web_default_home/__openerp__.py | 14 ++++ .../static/src/css/default_home.css | 47 ++++++++++++ .../static/src/js/default_home.js | 73 +++++++++++++++++++ .../static/src/xml/default_home.xml | 21 ++++++ 7 files changed, 158 insertions(+), 76 deletions(-) create mode 100644 addons/web_default_home/__init__.py create mode 100644 addons/web_default_home/__openerp__.py create mode 100644 addons/web_default_home/static/src/css/default_home.css create mode 100644 addons/web_default_home/static/src/js/default_home.js create mode 100644 addons/web_default_home/static/src/xml/default_home.xml diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index f10ee9376f6..d0a156ad9e5 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -1061,15 +1061,7 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie // TODO: add actual loading if there is url state to unpack, test on window.location.hash // not logged in if (!this.session.uid) { return; } - var ds = new openerp.web.DataSetSearch(this, 'res.users'); - ds.read_ids([this.session.uid], ['action_id'], function (users) { - var home_action = users[0].action_id; - if (!home_action) { - self.default_home(); - return; - } - self.execute_home_action(home_action[0], ds); - }) + self.action_manager.do_action({type: 'ir.actions.client', tag: 'default_home'}); }, default_home: function () { }, diff --git a/addons/web_dashboard/static/src/js/dashboard.js b/addons/web_dashboard/static/src/js/dashboard.js index e3ee0e2b542..2374acbec7a 100644 --- a/addons/web_dashboard/static/src/js/dashboard.js +++ b/addons/web_dashboard/static/src/js/dashboard.js @@ -385,21 +385,6 @@ openerp.web_dashboard.ApplicationTiles = openerp.web.View.extend({ start: function () { var self = this; this._super(); - // Check for installed application - var Installer = new openerp.web.DataSet(this, 'base.setup.installer'); - Installer.call('default_get', [], function (installed_modules) { - var installed = _(installed_modules).any(function (active, name) { - return _.str.startsWith(name, 'cat') && active; }); - - if(installed) { - self.do_display_root_menu(); - } else { - self.do_display_installer(); - } - }); - }, - do_display_root_menu: function() { - var self = this; var dss = new openerp.web.DataSetSearch( this, 'ir.ui.menu', null, [['parent_id', '=', false]]); var r = dss.read_slice( ['name', 'web_icon_data', 'web_icon_hover_data'], {}, function (applications) { // Create a matrix of 3*x applications @@ -408,58 +393,8 @@ openerp.web_dashboard.ApplicationTiles = openerp.web.View.extend({ rows.push(applications.splice(0, 3)); } var tiles = QWeb.render( 'ApplicationTiles.content', {rows: rows}); - self.$element.append(tiles) - .find('.oe-dashboard-home-tile') - .click(function () { - openerp.webclient.menu.on_menu_click(null, $(this).data('menuid')) - }); - }); - return r; - }, - do_display_installer: function() { - var self = this; - var render_ctx = { - url: window.location.protocol + '//' + window.location.host + window.location.pathname, - session: self.session, - rows: openerp.web_dashboard.apps.applications - }; - var installer = QWeb.render('StaticHome', render_ctx); - self.$element.append(installer); - this.$element.delegate('.oe-static-home-tile-text button', 'click', function () { - self.install_module($(this).val(), $(this).data('menu')); - }); - }, - install_module: function (module_name, menu_name) { - var self = this; - var Modules = new openerp.web.DataSetSearch( - this, 'ir.module.module', null, - [['name', '=', module_name], ['state', '=', 'uninstalled']]); - var Upgrade = new openerp.web.DataSet(this, 'base.module.upgrade'); - - $.blockUI(); - Modules.read_slice(['id'], {}, function (records) { - if (!(records.length === 1)) { $.unblockUI(); return; } - Modules.call('state_update', - [_.pluck(records, 'id'), 'to install', ['uninstalled']], - function () { - Upgrade.call('upgrade_module', [[]], function () { - self.run_configuration_wizards(menu_name); - }); - } - ) - }); - }, - run_configuration_wizards: function (menu_name) { - var self = this; - new openerp.web.DataSet(this, 'res.config').call('start', [[]], function (action) { - self.widget_parent.widget_parent.do_action(action, function () { - openerp.webclient.do_reload(); - }); - self.$element.empty(); - var dss = new openerp.web.DataSetSearch(this, 'ir.ui.menu', null, [['parent_id', '=', false], ['name', '=', menu_name]]); - dss.read_slice(['id'], {}, function(menus) { - if(!(menus.length === 1)) { $.unblockUI(); return; } - $.when(openerp.webclient.menu.on_menu_click(null, menus[0].id)).then($.unblockUI); + self.$element.append(tiles).find('.oe-dashboard-home-tile').click(function () { + openerp.webclient.menu.on_menu_click(null, $(this).data('menuid')) }); }); } diff --git a/addons/web_default_home/__init__.py b/addons/web_default_home/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/addons/web_default_home/__openerp__.py b/addons/web_default_home/__openerp__.py new file mode 100644 index 00000000000..ece173c8581 --- /dev/null +++ b/addons/web_default_home/__openerp__.py @@ -0,0 +1,14 @@ +{ + "name": "web Default Home", + "category" : "Hidden", + "version": "2.0", + "depends": ['web'], + "js": [ + 'static/src/js/default_home.js' + ], + "css": ['static/src/css/default_home.css'], + 'qweb' : [ + "static/src/xml/*.xml", + ], + 'active': True +} diff --git a/addons/web_default_home/static/src/css/default_home.css b/addons/web_default_home/static/src/css/default_home.css new file mode 100644 index 00000000000..96a6f9f4e82 --- /dev/null +++ b/addons/web_default_home/static/src/css/default_home.css @@ -0,0 +1,47 @@ +.installer { + width: 980px; +} + +.installer h1, .installer h3 { + margin: 16px 24px; + color: #555 +} + +.installer li { + float: left; + list-style: none; +} + +.installer li img { + display: block; + margin: 12px auto 16px; + height: 64px; + width: 64px; +} + +.installer li div { + color: #555; +} + +.installer li a { + display: block; + height: 120px; + width: 194px; + border: 1px solid #f4f2f2; + margin: 6px; + padding: 12px; + text-align: center; + text-transform: uppercase; + text-decoration: none; + font-size: 12px; + font-weight: 800; + background: white; + -moz-border-radius: 6px; + -webkit-border-radius: 6px; + -ms-border-radius: 6px; + border-radius: 6px; + -moz-box-shadow: 0 1px 2px #bbb; + -webkit-box-shadow: 0 1px 2px #bbb; + -o-box-shadow: 0 1px 2px #bbb; + box-shadow: 0 1px 2px #bbb; +} diff --git a/addons/web_default_home/static/src/js/default_home.js b/addons/web_default_home/static/src/js/default_home.js new file mode 100644 index 00000000000..0a95ace0681 --- /dev/null +++ b/addons/web_default_home/static/src/js/default_home.js @@ -0,0 +1,73 @@ +openerp.web_default_home = function(openerp) { + var QWeb = openerp.web.qweb; + + openerp.web.client_actions.add('default_home', 'openerp.web.Welcome'); + openerp.web.Welcome = openerp.web.Widget.extend({ + init: function(parent) { + this._super(parent); + }, + start: function() { + var self = this; + var applications = [ + {module: 'crm', name: 'CRM', menu: 'Sales', help: "Acquire leads, follow opportunities, manage prospects and phone calls, \u2026"}, + {module: 'sale', name: 'Sales', menu: 'Sales', help: "Do quotations, follow sales orders, invoice and control deliveries"}, + {module: 'account_voucher', name: 'Invoicing', menu: 'Accounting', help: "Send invoice, track payments and reminders"}, + {module: 'point_of_sale', name: 'Point of Sale', menu: 'Point of Sale', help: "Manage shop sales, use touch-screen POS"}, + {module: 'purchase', name: 'Purchase', menu: 'Sales', help: "Do purchase orders, control invoices and reception, follow your suppliers, \u2026"}, + {module: 'stock', name: 'Warehouse', menu: 'Warehouse', help: "Track your stocks, schedule product moves, manage incoming and outgoing shipments, \u2026"}, + {module: 'mrp', name: 'Manufacturing', menu: 'Manufacturing', help: "Manage your manufacturing, control your supply chain, personalize master data, \u2026"}, + {module: 'account_accountant', name: 'Accounting & Finance', menu: 'Accounting', help: "Record financial operations, automate followup, manage multi-currency, \u2026"}, + {module: 'project', name: 'Projects', menu: 'Project', help: "Manage projects, track tasks, invoice task works, follow issues, \u2026"}, + {module: 'hr', name: 'Human Resources', menu: 'Human Resources', help: "Manage employees and their contracts, follow laves, recruit people, \u2026"}, + {module: 'marketing', name: 'Marketing', menu: 'Marketing', help: "Manage campaigns, follow activities, automate emails, \u2026"}, + {module: 'knowledge', name: 'Knowledge', menu: 'Knowledge', help: "Track your documents, browse your files, \u2026"} + ]; + + var Installer = new openerp.web.DataSet(this, 'base.setup.installer'); + Installer.call('default_get', [], function (installed_modules) { + console.log(installed_modules); + self.$element.html(QWeb.render('Welcome-Page', {'applications': applications})); + self.$element.find('.install-module-link').click(function () { + self.install_module($(this).data('module'), $(this).data('menu')); + return false; + }); + }); + }, + install_module: function (module_name, menu_name) { + var self = this; + var Modules = new openerp.web.DataSetSearch( + this, 'ir.module.module', null, + [['name', '=', module_name], ['state', '=', 'uninstalled']]); + var Upgrade = new openerp.web.DataSet(this, 'base.module.upgrade'); + + $.blockUI(); + Modules.read_slice(['id'], {}, function (records) { + if (!(records.length === 1)) { $.unblockUI(); return; } + Modules.call('state_update', + [_.pluck(records, 'id'), 'to install', ['uninstalled']], + function () { + Upgrade.call('upgrade_module', [[]], function () { + self.run_configuration_wizards(menu_name); + }); + } + ) + }); + }, + run_configuration_wizards: function (menu_name) { + var self = this; + new openerp.web.DataSet(this, 'res.config').call('start', [[]], function (action) { + self.widget_parent.widget_parent.do_action(action, function () { + openerp.webclient.do_reload(); + }); + self.$element.empty(); + var dss = new openerp.web.DataSetSearch(this, 'ir.ui.menu', null, [['parent_id', '=', false], ['name', '=', menu_name]]); + dss.read_slice(['id'], {}, function(menus) { + if(!(menus.length === 1)) { $.unblockUI(); return; } + $.when(openerp.webclient.menu.on_menu_click(null, menus[0].id)).then($.unblockUI); + }); + }); + } + }); + +}; + diff --git a/addons/web_default_home/static/src/xml/default_home.xml b/addons/web_default_home/static/src/xml/default_home.xml new file mode 100644 index 00000000000..4d9e4a26938 --- /dev/null +++ b/addons/web_default_home/static/src/xml/default_home.xml @@ -0,0 +1,21 @@ + + + + +
+

Welcome to OpenERP

+

Please choose the first application to install.

+ +
+
+ +
From 229e507a4bce79ae6bfe652330b714c3e94d45ff Mon Sep 17 00:00:00 2001 From: Minh Tran Date: Wed, 7 Dec 2011 19:50:58 +0100 Subject: [PATCH 03/29] [IMP] Relooking of the modules vignette, the Kanban view is now the default view for the module screen. bzr revid: mit@openerp.com-20111207185058-xb5b4z8cz0zd6gla --- openerp/addons/base/__openerp__.py | 2 + openerp/addons/base/module/module_view.xml | 48 +++++++++---------- .../addons/base/static/src/css/modules.css | 31 ++++++++++++ openerp/addons/base/static/src/js/modules.js | 0 4 files changed, 55 insertions(+), 26 deletions(-) create mode 100644 openerp/addons/base/static/src/css/modules.css create mode 100644 openerp/addons/base/static/src/js/modules.js diff --git a/openerp/addons/base/__openerp__.py b/openerp/addons/base/__openerp__.py index f1ceb9a0915..2bd66fa5a02 100644 --- a/openerp/addons/base/__openerp__.py +++ b/openerp/addons/base/__openerp__.py @@ -99,5 +99,7 @@ 'installable': True, 'active': True, 'certificate': '0076807797149', + "js": [ 'static/src/js/modules.js' ], + "css": [ 'static/src/css/modules.css' ], } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/addons/base/module/module_view.xml b/openerp/addons/base/module/module_view.xml index ff4dee3b3c0..212a2881cf2 100644 --- a/openerp/addons/base/module/module_view.xml +++ b/openerp/addons/base/module/module_view.xml @@ -62,34 +62,30 @@ ir.module.module kanban - - - - - - - - - - - - -
- - -
-
-
- -
-
-
-
+ + + + + + + + +
+

+

+
+ Complexity: +

+ Install + +
+
+
+
+
- - Modules ir.module.module @@ -194,7 +190,7 @@ Modules ir.module.module form - tree,form,kanban + kanban,tree,form You can install new modules in order to activate new features, menu, reports or data in your OpenERP instance. To install some modules, click on the button "Install" from the form view and then click on "Start Upgrade". diff --git a/openerp/addons/base/static/src/css/modules.css b/openerp/addons/base/static/src/css/modules.css new file mode 100644 index 00000000000..645a332bc46 --- /dev/null +++ b/openerp/addons/base/static/src/css/modules.css @@ -0,0 +1,31 @@ +.module-icon, .module-desc { + display: inline-block; + vertical-align: top; +} + +.module-icon { + width: 80px; + height: 80px; + padding: 0 4px; +} + +.module-desc { + width: 220px; + font-size: 13px; + padding: 2px 4px 8px; + color: #4c4c4c; +} + +.module-desc h4 { + margin: 3px 0; + font-size: 13px; +} + +.module-desc p { + margin: 3px 0 5px; +} + +.oe_kanban_record { + margin: 5px 0; + min-height: 80px; +} diff --git a/openerp/addons/base/static/src/js/modules.js b/openerp/addons/base/static/src/js/modules.js new file mode 100644 index 00000000000..e69de29bb2d From 8683629a75374ef7cf6c284f55ea9983f43b27fa Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 8 Dec 2011 11:37:32 +0100 Subject: [PATCH 04/29] [IMP] move page widgets to an openerp.web.page namespace, from openerp.web.form bzr revid: xmo@openerp.com-20111208103732-grfv19fhu0dxtk3m --- addons/web/static/src/js/view_page.js | 64 ++++++++++++++------------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/addons/web/static/src/js/view_page.js b/addons/web/static/src/js/view_page.js index 76ad81837c2..2ca07152a56 100644 --- a/addons/web/static/src/js/view_page.js +++ b/addons/web/static/src/js/view_page.js @@ -7,7 +7,7 @@ openerp.web.page = function (openerp) { form_template: "PageView", init: function () { this._super.apply(this, arguments); - this.registry = openerp.web.form.readonly; + this.registry = openerp.web.page.readonly; }, on_loaded: function(data) { this._super(data); @@ -55,10 +55,14 @@ openerp.web.page = function (openerp) { return def.promise(); } }); - openerp.web.form.FieldReadonly = openerp.web.form.Field.extend({ + + /** @namespace */ + openerp.web.page = {}; + + openerp.web.page.FieldReadonly = openerp.web.form.Field.extend({ }); - openerp.web.form.FieldCharReadonly = openerp.web.form.FieldReadonly.extend({ + openerp.web.page.FieldCharReadonly = openerp.web.page.FieldReadonly.extend({ template: 'FieldChar.readonly', init: function(view, node) { this._super(view, node); @@ -74,7 +78,7 @@ openerp.web.page = function (openerp) { return show_value; } }); - openerp.web.form.FieldURIReadonly = openerp.web.form.FieldCharReadonly.extend({ + openerp.web.page.FieldURIReadonly = openerp.web.page.FieldCharReadonly.extend({ template: 'FieldURI.readonly', scheme: null, set_value: function (value) { @@ -84,10 +88,10 @@ openerp.web.page = function (openerp) { .text(displayed); } }); - openerp.web.form.FieldEmailReadonly = openerp.web.form.FieldURIReadonly.extend({ + openerp.web.page.FieldEmailReadonly = openerp.web.page.FieldURIReadonly.extend({ scheme: 'mailto' }); - openerp.web.form.FieldUrlReadonly = openerp.web.form.FieldURIReadonly.extend({ + openerp.web.page.FieldUrlReadonly = openerp.web.page.FieldURIReadonly.extend({ set_value: function (value) { var s = /(\w+):(.+)/.exec(value); if (!s || !(s[1] === 'http' || s[1] === 'https')) { return; } @@ -95,12 +99,12 @@ openerp.web.page = function (openerp) { this._super(s[2]); } }); - openerp.web.form.FieldBooleanReadonly = openerp.web.form.FieldCharReadonly.extend({ + openerp.web.page.FieldBooleanReadonly = openerp.web.page.FieldCharReadonly.extend({ set_value: function (value) { this._super(value ? '\u2611' : '\u2610'); } }); - openerp.web.form.FieldSelectionReadonly = openerp.web.form.FieldReadonly.extend({ + openerp.web.page.FieldSelectionReadonly = openerp.web.page.FieldReadonly.extend({ template: 'FieldChar.readonly', init: function(view, node) { // lifted straight from r/w version @@ -123,7 +127,7 @@ openerp.web.page = function (openerp) { this.$element.find('div').text(option ? option[1] : this.values[0][1]); } }); - openerp.web.form.FieldMany2OneReadonly = openerp.web.form.FieldURIReadonly.extend({ + openerp.web.page.FieldMany2OneReadonly = openerp.web.page.FieldURIReadonly.extend({ set_value: function (value) { value = value || null; this.invalid = false; @@ -168,7 +172,7 @@ openerp.web.page = function (openerp) { } } }); - openerp.web.form.FieldReferenceReadonly = openerp.web.form.FieldMany2OneReadonly.extend({ + openerp.web.page.FieldReferenceReadonly = openerp.web.page.FieldMany2OneReadonly.extend({ set_value: function (value) { if (!value) { return this._super(null); @@ -186,29 +190,29 @@ openerp.web.page = function (openerp) { } }); - openerp.web.form.FieldMany2ManyReadonly = openerp.web.form.FieldMany2Many.extend({ + openerp.web.page.FieldMany2ManyReadonly = openerp.web.form.FieldMany2Many.extend({ force_readonly: true }); - openerp.web.form.FieldOne2ManyReadonly = openerp.web.form.FieldOne2Many.extend({ + openerp.web.page.FieldOne2ManyReadonly = openerp.web.form.FieldOne2Many.extend({ force_readonly: true }); - openerp.web.form.readonly = openerp.web.form.widgets.clone({ - 'char': 'openerp.web.form.FieldCharReadonly', - 'email': 'openerp.web.form.FieldEmailReadonly', - 'url': 'openerp.web.form.FieldUrlReadonly', - 'text': 'openerp.web.form.FieldCharReadonly', - 'text_wiki' : 'openerp.web.form.FieldCharReadonly', - 'date': 'openerp.web.form.FieldCharReadonly', - 'datetime': 'openerp.web.form.FieldCharReadonly', - 'selection' : 'openerp.web.form.FieldSelectionReadonly', - 'many2one': 'openerp.web.form.FieldMany2OneReadonly', - 'many2many' : 'openerp.web.form.FieldMany2ManyReadonly', - 'one2many' : 'openerp.web.form.FieldOne2ManyReadonly', - 'one2many_list' : 'openerp.web.form.FieldOne2ManyReadonly', - 'reference': 'openerp.web.form.FieldReferenceReadonly', - 'boolean': 'openerp.web.form.FieldBooleanReadonly', - 'float': 'openerp.web.form.FieldCharReadonly', - 'integer': 'openerp.web.form.FieldCharReadonly', - 'float_time': 'openerp.web.form.FieldCharReadonly' + openerp.web.page.readonly = openerp.web.form.widgets.clone({ + 'char': 'openerp.web.page.FieldCharReadonly', + 'email': 'openerp.web.page.FieldEmailReadonly', + 'url': 'openerp.web.page.FieldUrlReadonly', + 'text': 'openerp.web.page.FieldCharReadonly', + 'text_wiki' : 'openerp.web.page.FieldCharReadonly', + 'date': 'openerp.web.page.FieldCharReadonly', + 'datetime': 'openerp.web.page.FieldCharReadonly', + 'selection' : 'openerp.web.page.FieldSelectionReadonly', + 'many2one': 'openerp.web.page.FieldMany2OneReadonly', + 'many2many' : 'openerp.web.page.FieldMany2ManyReadonly', + 'one2many' : 'openerp.web.page.FieldOne2ManyReadonly', + 'one2many_list' : 'openerp.web.page.FieldOne2ManyReadonly', + 'reference': 'openerp.web.page.FieldReferenceReadonly', + 'boolean': 'openerp.web.page.FieldBooleanReadonly', + 'float': 'openerp.web.page.FieldCharReadonly', + 'integer': 'openerp.web.page.FieldCharReadonly', + 'float_time': 'openerp.web.page.FieldCharReadonly' }); }; From eacd5ff1f249f28d118d0ed16133b04a0a9f84a4 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 8 Dec 2011 11:47:42 +0100 Subject: [PATCH 05/29] [FIX] have readonly m2m fields open their form popup in readonly mode bzr revid: xmo@openerp.com-20111208104742-k8rapp1l49wyayst --- addons/web/static/src/js/view_form.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 46bb2ef7c35..9d940d85bae 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2450,7 +2450,9 @@ openerp.web.form.Many2ManyListView = openerp.web.ListView.extend(/** @lends open do_activate_record: function(index, id) { var self = this; var pop = new openerp.web.form.FormOpenPopup(this); - pop.show_element(this.dataset.model, id, this.m2m_field.build_context(), {}); + pop.show_element(this.dataset.model, id, this.m2m_field.build_context(), { + readonly: this.widget_parent.is_readonly() + }); pop.on_write_completed.add_last(function() { self.reload_content(); }); From 75fb009dae2a5614e671215a6cf035edcb39af4a Mon Sep 17 00:00:00 2001 From: Fabien Pinckaers Date: Thu, 8 Dec 2011 13:01:11 +0100 Subject: [PATCH 06/29] [IMP] fix on PoS module bzr revid: fp@tinyerp.com-20111208120111-skr3af91uiqot1ie --- addons/point_of_sale/point_of_sale.py | 16 +-- addons/point_of_sale/point_of_sale_view.xml | 112 +++++------------- .../security/ir.model.access.csv | 7 +- 3 files changed, 42 insertions(+), 93 deletions(-) diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index b19405bd43f..1afa10b1be3 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -122,10 +122,10 @@ class pos_order(osv.osv): 'partner_id': fields.many2one('res.partner', 'Customer', change_default=True, select=1, states={'draft': [('readonly', False)], 'paid': [('readonly', False)]}), 'state': fields.selection([('draft', 'New'), - ('paid', 'Done'), + ('cancel', 'Cancelled'), + ('paid', 'Paid'), ('done', 'Posted'), - ('invoiced', 'Invoiced'), - ('cancel', 'Cancelled')], + ('invoiced', 'Invoiced')], 'State', readonly=True), 'invoice_id': fields.many2one('account.invoice', 'Invoice'), @@ -691,10 +691,12 @@ pos_category() class product_product(osv.osv): _inherit = 'product.product' _columns = { - 'income_pdt': fields.boolean('Product for Input'), - 'expense_pdt': fields.boolean('Product for Output'), - 'img': fields.binary('Pos Image, must be 50x50'), - 'pos_categ_id': fields.many2one('pos.category','POS Category', change_default=True, domain="[('type','=','normal')]" ,help="Select a pos category for the current product") + 'income_pdt': fields.boolean('PoS Cash Input', help="This is a product you can use to put cash into a statement for the point of sale backend."), + 'expense_pdt': fields.boolean('PoS Cash Output', help="This is a product you can use to take cash from a statement for the point of sale backend, exemple: money lost, transfer to bank, etc."), + 'img': fields.binary('Product Image, must be 50x50', help="Use an image size of 50x50."), + 'pos_categ_id': fields.many2one('pos.category','PoS Category', + domain="[('type','=','normal')]", + help="If you want to sell this product through the point of sale, select the category it belongs to.") } product_product() diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml index 165c6c83e3a..b69305c1a30 100644 --- a/addons/point_of_sale/point_of_sale_view.xml +++ b/addons/point_of_sale/point_of_sale_view.xml @@ -12,11 +12,11 @@ pos.order form -
+ - +