[IMP] Refactored form view's buttons

Yuck

bzr revid: fme@openerp.com-20111107134539-ndykhew56v66i218
This commit is contained in:
Fabien Meghazi 2011-11-07 14:45:39 +01:00
parent a3d158bc75
commit 6389731d37
2 changed files with 51 additions and 26 deletions

View File

@ -10,6 +10,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
* view should be displayed (if there is one active).
*/
searchable: false,
readonly : false,
form_template: "FormView",
identifier_prefix: 'formview-',
/**
@ -37,7 +38,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
this.dirty_for_user = false;
this.default_focus_field = null;
this.default_focus_button = null;
this.registry = openerp.web.form.widgets;
this.registry = this.readonly ? openerp.web.form.readonly : openerp.web.form.widgets;
this.has_been_loaded = $.Deferred();
this.$form_header = null;
this.translatable_fields = [];
@ -101,10 +102,11 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
self.on_pager_action(action);
});
this.$form_header.find('button.oe_form_button_save').click(this.do_save);
this.$form_header.find('button.oe_form_button_save').click(this.do_save_then_readonly);
this.$form_header.find('button.oe_form_button_cancel').click(this.do_cancel);
this.$form_header.find('button.oe_form_button_new').click(this.on_button_new);
this.$form_header.find('button.oe_form_button_duplicate').click(this.on_button_duplicate);
this.$form_header.find('button.oe_form_button_delete').click(this.on_button_delete);
this.$form_header.find('button.oe_form_button_toggle').click(this.on_toggle_readonly);
if (this.options.sidebar && this.options.sidebar_id) {
@ -123,11 +125,16 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
self.widgets = {};
self.fields = {};
self.$form_header.find('button').unbind('click');
self.registry = self.registry === openerp.web.form.widgets
? openerp.web.form.readonly
: openerp.web.form.widgets;
self.readonly = !self.readonly;
self.registry = self.readonly ? openerp.web.form.readonly : openerp.web.form.widgets;
self.on_loaded(self.fields_view);
self.reload();
return self.reload();
},
do_set_readonly: function() {
return this.readonly ? $.Deferred().resolve() : this.on_toggle_readonly();
},
do_set_editable: function() {
return !this.readonly ? $.Deferred().resolve() : this.on_toggle_readonly();
},
do_show: function () {
var promise;
@ -164,6 +171,8 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
this.$form_header.find('.oe_form_on_update').show();
this.$form_header.find('button.oe_form_button_new').show();
}
this.$form_header.find('.oe_form_on_readonly').toggle(this.readonly);
this.$form_header.find('.oe_form_on_editable').toggle(!this.readonly);
this.dirty_for_user = false;
this.datarecord = record;
for (var f in this.fields) {
@ -344,14 +353,16 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
$.when(this.has_been_loaded).then(function() {
if (self.can_be_discarded()) {
var keys = _.keys(self.fields_view.fields);
if (keys.length) {
self.dataset.default_get(keys).then(self.on_record_loaded).then(function() {
$.when(self.do_set_editable()).then(function() {
if (keys.length) {
self.dataset.default_get(keys).then(self.on_record_loaded).then(function() {
def.resolve();
});
} else {
self.on_record_loaded({});
def.resolve();
});
} else {
self.on_record_loaded({});
def.resolve();
}
}
});
}
});
return def.promise();
@ -363,7 +374,20 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
if (self.can_be_discarded()) {
self.dataset.call('copy', [self.datarecord.id, {}, self.dataset.context]).then(function(new_id) {
return self.on_created({ result : new_id });
}).then(function() {
}).then(self.do_set_editable).then(function() {
def.resolve();
});
}
});
return def.promise();
},
on_button_delete: function() {
var self = this;
var def = $.Deferred();
$.when(this.has_been_loaded).then(function() {
if (self.can_be_discarded() && self.datarecord.id) {
self.dataset.unlink([self.datarecord.id]).then(function() {
self.on_pager_action('next');
def.resolve();
});
}
@ -381,6 +405,9 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
* @param {Function} success callback on save success
* @param {Boolean} [prepend_on_create=false] if ``do_save`` creates a new record, should that record be inserted at the start of the dataset (by default, records are added at the end)
*/
do_save_then_readonly: function(success, prepend_on_create) {
return this.do_save(success, prepend_on_create).then(this.do_set_readonly);
},
do_save: function(success, prepend_on_create) {
var self = this;
var action = function() {
@ -428,10 +455,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
this.mutating_lock = this.mutating_lock.pipe(action, action);
return this.mutating_lock;
},
switch_readonly: function() {
},
switch_editable: function() {
},
on_invalid: function() {
var msg = "<ul>";
_.each(this.fields, function(f) {

View File

@ -473,8 +473,6 @@
<h2><t t-esc="name"/></h2>
</div>
</t>
<t t-name="Sidebar.section.items">
<li t-foreach="items" t-as="item" t-att-class="item.classname">
<a class="oe_sidebar_action_a" t-att-id="item.element_id" t-att-title="item.title" href="#">
@ -551,6 +549,7 @@
</span>
</td>
</tr>
<table t-name="ListView" class="oe-listview-content">
<t t-set="columns_count" t-value="visible_columns.length + (options.selectable ? 1 : 0) + (options.deletable ? 1 : 0)"/>
<thead class="ui-widget-header">
@ -660,16 +659,18 @@
<t t-name="ListView.row.form">
<t t-raw="frame.render()"/>
</t>
<t t-name="FormView">
<div class="oe_form_header">
<div class="oe_form_buttons" t-if="widget.options.action_buttons !== false">
<button type="button" class="oe_form_button_save">
<span class="oe_form_on_update">Save</span>
<span class="oe_form_on_create">Create</span>
<button type="button" class="oe_form_button_save oe_form_on_editable">Save</button>
<button type="button" class="oe_form_button_toggle">
<span class="oe_form_on_editable">Cancel</span>
<span class="oe_form_on_readonly">Edit</span>
</button>
<button type="button" class="oe_form_button_new">New</button>
<button type="button" class="oe_form_button_duplicate oe_form_on_update">Duplicate</button>
<button type="button" class="oe_form_button_toggle">Readonly/Editable</button>
<button type="button" class="oe_form_button_new oe_form_on_readonly">Create</button>
<button type="button" class="oe_form_button_duplicate oe_form_on_readonly">Duplicate</button>
<button type="button" class="oe_form_button_delete oe_form_on_readonly">Delete</button>
</div>
<div class="oe_form_pager" t-if="widget.options.pager !== false">
<button type="button" data-pager-action="first">First</button>
@ -1010,6 +1011,7 @@
<span t-if="widget.string"><t t-esc="widget.string"/></span>
</button>
</t>
<t t-name="SearchView">
<form class="oe_forms">
<t t-call="SearchView.render_lines"/>