Skip to content

Commit

Permalink
[ADD] form: Basic new record support
Browse files Browse the repository at this point in the history
  • Loading branch information
amigrave committed Apr 7, 2011
1 parent b1310a9 commit 2acfa4b
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 47 deletions.
6 changes: 6 additions & 0 deletions addons/base/controllers/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,12 @@ def call(self, req, model, method, ids, args):
r = getattr(m, method)(ids, *args)
return {'result': r}

@openerpweb.jsonrequest
def default_get(self, req, model, fields, context={}):
m = req.session.model(model)
r = m.default_get(fields, context)
return {'result': r}

class View(openerpweb.Controller):
def fields_view_get(self, session, model, view_id, view_type, transform=True):
Model = session.model(model)
Expand Down
8 changes: 2 additions & 6 deletions addons/base/static/src/css/base.css
Original file line number Diff line number Diff line change
Expand Up @@ -419,17 +419,13 @@ body.openerp {
.openerp .required.error {
border: 1px solid #900;
}
.openerp .oe_form_buttons {
.openerp .oe_form_buttons, .openerp .oe_list_buttons {
float: left;
}
.openerp .oe_form_pager {
.openerp .oe_form_pager, .openerp .oe_list_pager {
float: right;
}

.openerp .oe_list_pager {
text-align: right;
}

/* Inputs */
.openerp input[type="text"], .openerp input[type="password"], .openerp select, .openerp textarea {
-moz-box-sizing: border-box;
Expand Down
7 changes: 6 additions & 1 deletion addons/base/static/src/js/data.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,12 @@ openerp.base.DataSet = openerp.base.Controller.extend( /** @lends openerp.base.
});
}
},
default_get: function() {
default_get: function(fields, callback) {
this.rpc('/base/dataset/default_get', {
model: this.model,
fields: fields,
context: this.context
}, callback);
},
create: function() {
},
Expand Down
75 changes: 49 additions & 26 deletions addons/base/static/src/js/form.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ openerp.base.FormView = openerp.base.Controller.extend( /** @lends openerp.base
this.$element.find('div.oe_form_buttons button.oe_form_button_save').click(this.do_save);
this.$element.find('div.oe_form_buttons button.oe_form_button_save_edit').click(this.do_save_edit);
this.$element.find('div.oe_form_buttons button.oe_form_button_cancel').click(this.do_cancel);
this.$element.find('div.oe_form_buttons button.oe_form_button_new').click(this.on_button_new);

// sidebar stuff
if (this.view_manager.sidebar) {
Expand All @@ -71,6 +72,15 @@ openerp.base.FormView = openerp.base.Controller.extend( /** @lends openerp.base
for (var f in this.fields) {
this.fields[f].set_value(this.datarecord[f]);
}
if (!record.id) {
// Second pass in order to trigger the onchanges in case of new record
for (var f in this.fields) {
var field = this.fields[f];
if (field.node.attrs.on_change) {
this.do_onchange(field);
}
}
}
this.on_form_changed();
this.ready = true;
} else {
Expand All @@ -79,13 +89,14 @@ openerp.base.FormView = openerp.base.Controller.extend( /** @lends openerp.base
this.do_update_pager();
},
on_form_changed: function(widget) {
for (var w in this.widgets) {
w = this.widgets[w];
w.process_attrs();
w.update_dom();
}
if (widget && widget.node.attrs.on_change) {
this.do_onchange(widget);
} else {
for (var w in this.widgets) {
w = this.widgets[w];
w.process_attrs();
w.update_dom();
}
}
},
on_pager_action: function(action) {
Expand Down Expand Up @@ -113,24 +124,29 @@ openerp.base.FormView = openerp.base.Controller.extend( /** @lends openerp.base
this.$element.find('span.oe_pager_count').html(this.dataset.count);
},
do_onchange: function(widget) {
var self = this;
this.ready = false;
var onchange = _.trim(widget.node.attrs.on_change);
var call = onchange.match(/^\s?(.*?)\((.*?)\)\s?$/);
if (call) {
var method = call[1], args = [];
_.each(call[2].split(','), function(a) {
var field = _.trim(a);
if (self.fields[field]) {
args.push(self.fields[field].value);
} else {
args.push(false);
this.log("warning : on_change can't find field " + field, onchange);
}
});
this.dataset.call(method, [this.datarecord.id], args, this.on_processed_onchange);
} else {
this.log("Wrong on_change format", on_change);
if (widget.node.attrs.on_change) {
var self = this;
this.ready = false;
var onchange = _.trim(widget.node.attrs.on_change);
var call = onchange.match(/^\s?(.*?)\((.*?)\)\s?$/);
if (call) {
var method = call[1], args = [];
_.each(call[2].split(','), function(a) {
var field = _.trim(a);
if (self.fields[field]) {
var value = self.fields[field].value;
args.push(value == null ? false : value);
} else {
args.push(false);
this.log("warning : on_change can't find field " + field, onchange);
}
});
console.info("Calling onchange :", onchange);
// TODO: no async for onchange
this.dataset.call(method, (this.datarecord.id == null ? [] : [this.datarecord.id]), args, this.on_processed_onchange);
} else {
this.log("Wrong on_change format", on_change);
}
}
},
on_processed_onchange: function(response) {
Expand All @@ -143,13 +159,13 @@ openerp.base.FormView = openerp.base.Controller.extend( /** @lends openerp.base
var value = result.value[f];
if (field.value != value) {
field.set_value(value);
// TODO: Recursive on_change
// this.on_form_changed(field);
this.do_onchange(field);
}
} else {
this.log("warning : on_processed_onchange can't find field " + field, result);
}
}
this.on_form_changed();
}
if (result.warning) {
$(QWeb.render("DialogWarning", result.warning)).dialog({
Expand All @@ -166,6 +182,12 @@ openerp.base.FormView = openerp.base.Controller.extend( /** @lends openerp.base
}
this.ready = true;
},
on_button_new: function() {
var self = this;
this.dataset.default_get(_.keys(this.fields), function(result) {
self.on_record_loaded(result.result);
});
},
do_save: function() {
if (!this.ready) {
return false;
Expand Down Expand Up @@ -462,6 +484,7 @@ openerp.base.form.Field = openerp.base.form.Widget.extend({
set_value: function(value) {
this.value = value;
this.invalid = false;
this.update_dom();
},
get_value: function() {
return this.value;
Expand Down Expand Up @@ -710,7 +733,7 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
this.viewmanager = new openerp.base.form.FieldOne2ManyViewManager(this.view.session, this.element_id, this.dataset, views);
this.viewmanager.start();
},
set_value: function(value) {
set_value_CASSEEEEEEEEEEEEEEEEE: function(value) {
this.value = value;
this.log("o2m.set_value",value);
this.viewmanager.dataset.ids = value;
Expand Down
30 changes: 16 additions & 14 deletions addons/base/static/src/xml/base.xml
Original file line number Diff line number Diff line change
Expand Up @@ -156,15 +156,21 @@
<!--
<h3><t t-esc="fields_view.arch['@string']"/></h3>
-->
<div class="oe_list_pager">
<button type="button" data-pager-action="first">First</button>
<button type="button" data-pager-action="previous">&lt;&lt;</button>
<div class="oe_list_header">
<div class="oe_list_buttons">
<!--<button type="button" class="oe_list_button_new">New</button>-->
</div>
<div class="oe_list_pager">
<button type="button" data-pager-action="first">First</button>
<button type="button" data-pager-action="previous">&lt;&lt;</button>

<span class="oe_pager_index">0</span> / <span class="oe_pager_count">0</span>
<span class="oe_pager_index">0</span> / <span class="oe_pager_count">0</span>

<button type="button" data-pager-action="next">&gt;&gt;</button>
<button type="button" data-pager-action="last">Last</button>
<button type="button" data-pager-action="next">&gt;&gt;</button>
<button type="button" data-pager-action="last">Last</button>
</div>
</div>
<br style="clear: both;"/>
<table id="todo_use_unique_id" class="jqGrid"></table>
</t>
<t t-name="GanttView">
Expand All @@ -184,9 +190,10 @@
<h2 class="oe_view_title"><t t-esc="view.fields_view.arch.attrs.string"/></h2>
<div class="oe_form_header">
<div class="oe_form_buttons">
<button type="button" class="oe_form_button_save">Save</button>
<!--<button type="button" class="oe_form_button_save">Save</button>-->
<button type="button" class="oe_form_button_save_edit">Save &amp; Edit</button>
<button type="button" class="oe_form_button_cancel">Cancel</button>
<!--<button type="button" class="oe_form_button_cancel">Cancel</button>-->
<button type="button" class="oe_form_button_new">New</button>
</div>
<div class="oe_form_pager">
<button type="button" data-pager-action="first">First</button>
Expand All @@ -199,11 +206,6 @@
</div>
</div>
<t t-raw="frame.render()"/>
<div style="text-align:right;">
<button type="button" class="form_save">
Save
</button>
</div>
</t>
<t t-name="Widget">
Unhandled widget
Expand All @@ -218,7 +220,7 @@
t-att-nowrap="td.is_field_label ? 'true' : undefined"
t-att-valign="td.table ? 'top' : undefined"
t-att-id="td.element_id"
t-att-class="'container_' + td.type"
t-att-class="'oe_form_' + (td.is_field_label ? 'label' : (td.field ? 'field_' + td.type : td.type))"
>
<t t-raw="td.render()"/>
</td>
Expand Down

0 comments on commit 2acfa4b

Please sign in to comment.