[IMP] One2many fields in formview.

bzr revid: bth@tinyerp.com-20110816130257-bz614pn2722vo1pl
This commit is contained in:
Bhumi Thakkar (Open ERP) 2011-08-16 18:32:57 +05:30
parent 08cf0f2fb0
commit c9d824a1d9
2 changed files with 98 additions and 64 deletions

View File

@ -1,9 +1,16 @@
openerp.web_mobile.form_mobile = function (openerp) {
openerp.web_mobile.FormView = openerp.base.Widget.extend({
init: function(session, element_id, list_id, action) {
this._super(session, element_id);
this.list_id = list_id;
this.action = action;
this.content_expanded_class = "ui-collapsible-content ui-collapsible-content-expanded";
this.content_collapsed_class = "ui-collapsible-content ui-collapsible-content-collapsed";
this.expanded_class = "ui-collapsible-content-expanded";
this.collapsed_class = "ui-collapsible-content-collapsed";
this.plus_class = "ui-icon-plus";
this.minus_class = "ui-icon-minus";
},
start: function() {
var self = this;
@ -13,7 +20,7 @@ openerp.web_mobile.FormView = openerp.base.Widget.extend({
this.dataset = new openerp.base.DataSetSearch(this, this.action.res_model, null, null);
this.dataset.read_slice([],function (result) {
for (var i = 0; i < result.length; i++) {
for (var i = 0; i < result.length; i++) {
if (result[i].id == id) {
var data = result[i];
}
@ -29,6 +36,7 @@ openerp.web_mobile.FormView = openerp.base.Widget.extend({
var notebooks = view_fields[j];
}
}
$("#oe_header").find("h1").html(result.fields_view.arch.attrs.string);
self.$element.html(QWeb.render("FormView", {'get_fields': get_fields, 'notebooks': notebooks || false, 'fields' : fields, 'values' : data }));
@ -43,12 +51,7 @@ openerp.web_mobile.FormView = openerp.base.Widget.extend({
var text = $(this).find('.ui-btn-text').text();
var next = $(this).next();
var span = $(this).find('span .ui-icon');
var content_expanded_class = "ui-collapsible-content ui-collapsible-content-expanded";
var content_collapsed_class = "ui-collapsible-content ui-collapsible-content-collapsed";
var expanded_class = "ui-collapsible-content-expanded";
var collapsed_class = "ui-collapsible-content-collapsed";
var plus_class = "ui-icon-plus";
var minus_class = "ui-icon-minus";
if (notebooks.children[k].attrs.string == $.trim(text)) {
get_fields = self.get_fields(notebooks.children[k].children);
@ -56,42 +59,52 @@ openerp.web_mobile.FormView = openerp.base.Widget.extend({
$(this).parents().find('form').find('div').each( function() {
var prev = $(this).prev();
var trim_class = $.trim($(this).attr('class'));
if (trim_class == content_expanded_class || trim_class == content_collapsed_class) {
if (trim_class == self.content_expanded_class || trim_class == self.content_collapsed_class) {
prev.removeClass('ui-btn-active');
if ($.trim(prev.find('.ui-btn-text').text()) != notebooks.children[k].attrs.string) {
prev.find('span .ui-icon').removeClass(minus_class);
prev.find('span .ui-icon').addClass(plus_class);
$(this).removeClass(expanded_class);
$(this).addClass(collapsed_class);
self.expanded($(this),prev.find('span .ui-icon'));
}
}
});
if (next.hasClass(content_collapsed_class)) {
span.removeClass(plus_class);
span.addClass(minus_class);
next.removeClass(collapsed_class);
next.addClass(expanded_class);
if (next.hasClass(self.content_collapsed_class)) {
self.collapsed(next,span);
}
else if (next.hasClass(content_expanded_class)) {
span.removeClass(minus_class);
span.addClass(plus_class);
next.removeClass(expanded_class);
next.addClass(collapsed_class);
else if (next.hasClass(self.content_expanded_class)) {
self.expanded(next,span);
}
if (!next.find('.detail').html().length) {
for (var i = 0; i < get_fields.length; i++) {
if (fields[get_fields[i].attrs.name].type == 'one2many'){
var get_fields_test = self.get_fields(fields[get_fields[i].attrs.name].views.form.arch.children);
var fields_test = fields[get_fields[i].attrs.name]['views'].form.fields;
next.find('.detail').append(QWeb.render("FormView", {'get_fields': get_fields_test,'fields' : fields_test, 'values' : data }));
var notebook=fields[get_fields[i].attrs.name].views.form.arch;
}
}
next.find('.detail').append(QWeb.render("FormView", {'get_fields': get_fields,'fields' : result.fields_view.fields, 'values' : data }));
if(notebook){
next.find('.detail').append(QWeb.render("FormView", {'get_fields': get_fields,'fields' : result.fields_view.fields, 'values' : data,'til': notebook.attrs.string }));
}else{
next.find('.detail').append(QWeb.render("FormView", {'get_fields': get_fields,'fields' : result.fields_view.fields, 'values' : data }));
}
}
next.find('.detail').find('a').click(function(){
if(next.find('.detail').find('a').next().find('.detail').html().length){
if (next.find('.detail').find('a').next().hasClass(self.content_collapsed_class)) {
self.collapsed(next.find('.detail').find('a').next(),next.find('.detail').find('a').find('span .ui-icon'));
}
else if (next.find('.detail').find('a').next().hasClass(self.content_expanded_class)) {
self.expanded(next.find('.detail').find('a').next(),next.find('.detail').find('a').find('span .ui-icon'));
}
}
if(!next.find('.detail').find('a').next().find('.detail').html().length){
next.find('.detail').find('a').next().find('.detail').append(QWeb.render("FormView", {'get_fields': get_fields_test,'fields' : fields_test, 'values' : data }));
self.collapsed(next.find('.detail').find('a').next(),next.find('.detail').find('a').find('span .ui-icon'));
}
});
}
}
@ -113,6 +126,19 @@ openerp.web_mobile.FormView = openerp.base.Widget.extend({
}
}
return this.fields;
},
collapsed: function(next,span) {
span.removeClass(this.plus_class);
span.addClass(this.minus_class);
next.removeClass(this.collapsed_class);
next.addClass(this.expanded_class);
},
expanded: function(next,span) {
span.removeClass(this.minus_class);
span.addClass(this.plus_class);
next.removeClass(this.expanded_class);
next.addClass(this.collapsed_class);
}
});
}

View File

@ -97,13 +97,14 @@
<form>
<t t-foreach="get_fields" t-as="field">
<div data-role="fieldcontain">
<t t-if="fields[field.attrs.name].type!='one2many' and fields[field.attrs.name].type!='many2many'" >
<label class="ui-input-text">
<span>
<t t-if="!(field.attrs.string)" t-esc="fields[field.attrs.name].string"></t>
<t t-if="field.attrs.string" t-esc="field.attrs.string"></t>
</span>:
</label>
</t>
<t t-if="fields[field.attrs.name].type == 'char'">
<t t-if="values[field.attrs.name]">
<input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" t-att-value="values[field.attrs.name]"/><br/>
@ -123,6 +124,30 @@
<t t-if="fields[field.attrs.name].type == 'text'">
<input type="text" style="width: 100%"/><br/>
</t>
<t t-if="fields[field.attrs.name].type == 'float'">
<t t-if="values[field.attrs.name]">
<input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" t-att-value="values[field.attrs.name]"/><br/>
</t>
<t t-if="!(values[field.attrs.name])">
<input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" value=""/><br/>
</t>
</t>
<t t-if="fields[field.attrs.name].type == 'date'">
<t t-if="values[field.attrs.name]">
<input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" t-att-value="values[field.attrs.name]"/><br/>
</t>
<t t-if="!(values[field.attrs.name])">
<input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" value=""/><br/>
</t>
</t>
<t t-if="fields[field.attrs.name].type == 'datetime'">
<t t-if="values[field.attrs.name]">
<input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" t-att-value="values[field.attrs.name]"/><br/>
</t>
<t t-if="!(values[field.attrs.name])">
<input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" value=""/><br/>
</t>
</t>
<t t-if="fields[field.attrs.name].type == 'selection'">
<div class="ui-select">
<div data-theme="c" class="ui-btn ui-btn-icon-right ui-btn-corner-all ui-shadow ui-btn-up-c">
@ -176,44 +201,27 @@
</div>
</t>
<t t-if="fields[field.attrs.name].type == 'one2many'">
<t t-if="values[field.attrs.name]">
<input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" t-att-value="values[field.attrs.name]"/><br/>
</t>
<t t-if="!(values[field.attrs.name])">
<input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" value=""/><br/>
</t>
</t>
<t t-if="fields[field.attrs.name].type == 'many2many'">
<t t-if="values[field.attrs.name]">
<input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" t-att-value="values[field.attrs.name]"/><br/>
</t>
<t t-if="!(values[field.attrs.name])">
<input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" value=""/><br/>
</t>
</t>
<t t-if="fields[field.attrs.name].type == 'float'">
<t t-if="values[field.attrs.name]">
<input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" t-att-value="values[field.attrs.name]"/><br/>
</t>
<t t-if="!(values[field.attrs.name])">
<input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" value=""/><br/>
</t>
</t>
<t t-if="fields[field.attrs.name].type == 'date'">
<t t-if="values[field.attrs.name]">
<input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" t-att-value="values[field.attrs.name]"/><br/>
</t>
<t t-if="!(values[field.attrs.name])">
<input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" value=""/><br/>
</t>
</t>
<t t-if="fields[field.attrs.name].type == 'datetime'">
<t t-if="values[field.attrs.name]">
<input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" t-att-value="values[field.attrs.name]"/><br/>
</t>
<t t-if="!(values[field.attrs.name])">
<input class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c" type="text" value=""/><br/>
</t>
<div class="info ui-collapsible-contain" data-collapsed="true" data-role="collapsible">
<h1 class="ui-collapsible-heading">
<a class="ui-collapsible-heading-toggle ui-btn ui-btn-icon-left ui-shadow ui-corner-all ui-btn-up-c" href="#" data-theme="c" t-id="page.attrs.string">
<span class="ui-btn-inner ui-corner-all">
<span class="ui-btn-text">
<t t-esc="til"></t>
<!-- <span class="ui-collapsible-heading-status"></span> -->
</span>
<span data-theme="d" class="ui-btn ui-btn-icon-left ui-btn-corner-all ui-shadow ui-btn-up-d">
<span class="ui-btn-inner ui-btn-corner-all ui-corner-all">
<span class="ui-btn-text"></span>
<span class="ui-icon ui-icon-shadow ui-icon-plus"></span>
</span>
</span>
</span>
</a>
<div class="ui-collapsible-content ui-collapsible-content-collapsed" aria-hidden="true">
<div class="detail"></div>
</div>
</h1>
</div>
</t>
</div>
</t>