diff --git a/addons/base/static/src/css/base.css b/addons/base/static/src/css/base.css index dc16c772785..b700aea2702 100644 --- a/addons/base/static/src/css/base.css +++ b/addons/base/static/src/css/base.css @@ -836,5 +836,32 @@ body.openerp { display: none; } +.create_m2o { + background-color: #4C4C4C; + height: 1.5em; + left: 0; + overflow: hidden; + padding-bottom: 0.05em; + padding-top: 0.05em; + top: 0; +} + +.a_m2o { + background-color: white; + border: 0.05em solid gray; + cursor: pointer; + font-family: arial; + font-size: 0.8em; + font-style: italic; + font-weight: bold; + margin: 10px; + margin-left: 10px; + margin-right: 10px; + padding-left: 10px; + padding-right: 10px; + padding-top: 0.1em; + text-decoration: none; + width: 4em; +} /* ------------- End autocomplete ------- */ diff --git a/addons/base/static/src/js/data.js b/addons/base/static/src/js/data.js index b9dc86d1f00..107ba65e468 100644 --- a/addons/base/static/src/js/data.js +++ b/addons/base/static/src/js/data.js @@ -89,12 +89,12 @@ openerp.base.DataSet = openerp.base.Controller.extend( /** @lends openerp.base. context: this.context }, callback); }, - create: function(data, callback) { + create: function(data, callback, error_callback) { return this.rpc('/base/dataset/create', { model: this.model, data: data, context: this.context - }, callback); + }, callback, error_callback); }, write: function (id, data, callback) { return this.rpc('/base/dataset/save', { diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 3a2db9e4e53..bf3c806140a 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -817,6 +817,12 @@ openerp.base.form.FieldMany2OneDatasSet = openerp.base.DataSetStatic.extend({ }, }); +openerp.base.form.FieldMany2OneViewManager = openerp.base.ViewManager.extend({ + init: function(session, element_id, dataset, views) { + this._super(session, element_id, dataset, views); + } +}); + openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ init: function(view, node) { this._super(view, node); @@ -826,7 +832,9 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ start: function() { this.$element = $('#' + this.element_id); this.dataset = new openerp.base.form.FieldMany2OneDatasSet(this.session, this.field.relation); - new openerp.base.m2o(this.$element, this.field.relation, this.dataset, this.session) + var views = [ [false,"list"], [false,"form"] ]; + this.viewmanager = new openerp.base.form.FieldMany2OneViewManager(this.view.session, this.element_id, this.dataset, views); + new openerp.base.m2o(this.viewmanager, this.$element, this.field.relation, this.dataset, this.session) this.$element.find('input').change(this.on_ui_change); }, set_value: function(value) { diff --git a/addons/base/static/src/js/m2o.js b/addons/base/static/src/js/m2o.js index d12ddf05ad5..f59e76471b5 100644 --- a/addons/base/static/src/js/m2o.js +++ b/addons/base/static/src/js/m2o.js @@ -1,9 +1,10 @@ openerp.base.m2o = function(openerp) { openerp.base.m2o = openerp.base.Controller.extend({ - init: function(element_id, model, dataset, session) { + init: function(view_manager, element_id, model, dataset, session) { this._super(element_id, model, dataset, session); + this.view_manager = view_manager this.session = session; this.element = element_id.find('input'); this.relation = model; @@ -34,7 +35,7 @@ openerp.base.m2o = openerp.base.Controller.extend({ if(!this.relation) { return; } - var self = this + var self = this; this.dataset.name_search(this.element.val(), function(response) { var res = response.result[0]; self.element.val(res[1]); @@ -133,8 +134,6 @@ openerp.base.m2o = openerp.base.Controller.extend({ $resultsHolder.empty().append($fancyTable); this.updateSelectedResult(); $resultsHolder.show(); - } else { - $resultsHolder.hide(); } return true; }, @@ -199,9 +198,11 @@ openerp.base.m2o = openerp.base.Controller.extend({ event_list.start(); event_list.do_reload(); } - if ($selectedRow.find('td').attr('id') == 'create') { + if ($selectedRow.find('td').attr('id') == 'create') { + return this.PseudoDialogue(); } + this.setCompletionText($selectedRow, true); this.clearResults(); break; @@ -270,10 +271,6 @@ openerp.base.m2o = openerp.base.Controller.extend({ setCompletionText: function ($selectedRow, flag) { var $cell = $selectedRow.find('td'); - if ($cell.attr('id')) { - this.element.val(''); - return; - } var autoCompleteText = $cell.find('span').text(); autoCompleteText = flag ? autoCompleteText : this.lastSearch + '[' + autoCompleteText.substring(this.lastSearch.length) + ']' this.element.val(autoCompleteText); @@ -289,5 +286,80 @@ openerp.base.m2o = openerp.base.Controller.extend({ this.numResultRows = 0; this.lastSearch = null; }, + + PseudoDialogue: function(){ + var parent_element = jQuery("#autoCompleteResults_" + this.name); + var $DiaTable = jQuery('', { + "name": "create_m2o" + this.name, + "id": "create_m2o" + this.name}); + var $tbl = jQuery('').appendTo($DiaTable); + var onClick = jQuery.proxy(this, 'getOnclick'); + + jQuery('').append( + jQuery('', {'class':'create_m2o'}).append( + jQuery('
').append( + jQuery('', { + 'style':'text-transform:none; white-space: nowrap', + 'title': 'Name', + 'text': 'Name :'}).after( + jQuery('', { + 'id': 'm2o_' + this.name, + 'type': 'text', + 'val':this.element.val()})))).after( + jQuery('
').append( + jQuery('',{ + 'id':'create', + 'text':'Create', + 'href':'javascript: void(0)', + 'click': onClick, + 'class':'a_m2o'}, 'EDIT')).append( + jQuery('',{ + 'id':'edit', + 'href':'javascript: void(0)', + 'click':onClick, + 'text':'Edit', + 'class':'a_m2o'})).append( + jQuery('',{ + 'id':'close', + 'text':'Close', + 'href':'javascript: void(0)', + 'click':onClick, + 'class':'a_m2o'})))).appendTo($tbl); + + parent_element.empty().append($DiaTable); + parent_element.show(); + }, + getOnclick : function(evt) { + if(evt.currentTarget.id == 'create') { + var self = this + this.dataset.create({'name': this.element.val()}, + function(r){}, function(r){self.on_edit(r)}); + } + + if(evt.currentTarget.id == 'edit') { + this.on_edit(); + } + + var parent_element = jQuery("#autoCompleteResults_" + this.name); + parent_element.empty(); + parent_element.hide(); + }, + + on_edit: function(r) { + var element_id = _.uniqueId("act_window_dialog"); + var dialog = jQuery('
', + {'id': element_id + }).dialog({title: 'test', + modal: true, + minWidth: 800, + buttons: { + Cancel: function() { + $(this).dialog("close"); + } + } + }); + var event_form = new openerp.base.FormView(this.view_manager, this.session, element_id, this.dataset, false); + event_form.start(); + }, }) -} \ No newline at end of file +}