[ADD] vieweditor:- implement functionality of create new view.

bzr revid: ysa@tinyerp.com-20111114095116-us7a14avj84e4bi2
This commit is contained in:
Yogesh (OpenERP) 2011-11-14 15:21:16 +05:30
parent b89e0dbd5e
commit 712b3c83f4
1 changed files with 113 additions and 12 deletions

View File

@ -44,7 +44,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
height: 500,
buttons: {
"Create": function(){
//to do
self.on_create_view();
},
"Edit": function(){
self.xml_element_id = 0;
@ -73,6 +73,80 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
});
});
},
on_create_view: function() {
var self = this;
this.create_view_dialog = new openerp.web.Dialog(this,{
modal: true,
title: _.sprintf("Create a view (%s)", self.model),
width: 500,
height: 400,
buttons: {
"Save": function(){
var view_values = {};
_.each(self.create_view_widget, function(widget) {
if (widget.dirty && !widget.invalid) {
view_values[widget.name] = widget.get_value();
}
});
$.when(self.do_save_view(view_values)).then(function() {
self.create_view_dialog.close();
var controller = self.action_manager.inner_viewmanager.views[self.action_manager.inner_viewmanager.active_view].controller;
controller.reload_content();
});
},
"Cancel": function(){
self.create_view_dialog.close();
}
}
});
this.create_view_dialog.start().open();
var view_widget = [{'name': 'view_name', 'type': 'char', 'required': true, 'value' : this.model + '.custom_' + Math.round(Math.random() * 1000)},
{'name': 'view_type', 'type': 'selection', 'required': true, 'value': 'Form', 'selection': [['',''],['tree', 'Tree'],['form', 'Form'],['graph', 'Graph'],['calendar', 'Calender']]},
{'name': 'pririty', 'type': 'char', 'required': true, 'value':'16'}];
this.create_view_dialog.$element.append('<table id="create_view" style="width:400px" class="oe_forms"></table>');
this.create_view_widget = [];
_.each(view_widget, function(widget) {
var type_widget = new (self.property.get_any([widget.type])) (self.create_view_dialog, widget.name);
if (widget.selection) {
type_widget.selection = widget.selection;
}
type_widget.required = widget.required;
self.create_view_dialog.$element.find('table[id=create_view]').append('<tr><td align="right">' + widget.name + ':</td><td id="' +widget.name+ '">' + type_widget.render()+'</td></tr>');
var value = null;
if (widget.value) {
value = [widget.name, widget.value];
type_widget.dirty = true;
}
type_widget.start();
type_widget.set_value(value)
self.create_view_widget.push(type_widget);
});
},
do_save_view: function(values) {
def = $.Deferred();
var field_dataset = new openerp.web.DataSetSearch(this, this.model, null, null);
var model_dataset = new openerp.web.DataSetSearch(this, 'ir.model', null, null);
var view_string = "", field_name = false, self = this;
field_dataset.call( 'fields_get', [], function(fields) {
_.each(['name', 'x_name'], function(value) {
if (_.include(_.keys(fields), value)) {
field_name = value;
return false;
}
});
if (field_name) {
model_dataset.read_slice(['name','field_id'], {"domain": [['model','=',self.model]]}, function(records) {
if (records) {view_string = records[0].name;}
var arch = _.sprintf("<?xml version='1.0'?>\n<%s string='%s'>\n\t<field name='%s'/>\n</%s>", values.view_type, view_string, field_name, values.view_type);
var vals = {'model': self.model, 'name': values.view_name, 'priority': values.priority, 'type': values.view_type, 'arch': arch};
self.dataset.create(vals, function(suc) {
def.resolve();
});
});
}
});
return def.promise();
},
add_node_name : function(node) {
if(node.tagName.toLowerCase() == "button" || node.tagName.toLowerCase() == "field"){
return (node.getAttribute('name'))?
@ -541,8 +615,8 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
"Update": function(){
var update_values = [];
_.each(self.edit_widget, function(widget) {
if (widget.dirty) {
update_values.push(widget.get_value());
if (widget.dirty && !widget.invalid) {
update_values.push([widget.name, widget.get_value()]);
}
});
self.do_save_update_arch(obj, view_id, view_xml_id, clicked_tr_id, clicked_tr_level, "update_node", update_values);
@ -617,9 +691,26 @@ openerp.web.ViewEditor.Field = openerp.web.Class.extend({
this.$element = view.$element;
this.dirty = false;
this.name = id;
this.required = false;
this.invalid = false;
},
start: function () {
this.update_dom();
},
update_dom: function() {
this.$element.find("td[id="+ this.name+"]").toggleClass('invalid', this.invalid);
this.$element.find("td[id="+ this.name+"]").toggleClass('required', this.required);
},
on_ui_change: function() {
var value = this.get_value();
value = value instanceof Array ? value[1] : value;
if (this.required && !value) {
this.invalid = true;
} else {
this.invalid = false;
}
this.dirty = true;
this.update_dom();
},
render: function() {
return QWeb.render(this.template, {widget: this});
@ -632,6 +723,7 @@ openerp.web.ViewEditor.FieldBoolean = openerp.web.ViewEditor.Field.extend({
this.$element.find("input[id="+ self.name+"]").change(function() {
self.on_ui_change();
});
this._super();
},
set_value: function(value) {
if (value) {
@ -640,7 +732,7 @@ openerp.web.ViewEditor.FieldBoolean = openerp.web.ViewEditor.Field.extend({
},
get_value: function() {
var value = this.$element.find("input[id=" + this.name + "]").is(':checked');
return value ? [this.name, value] : [this.name, null];
return value ? value: null;
}
});
openerp.web.ViewEditor.FieldChar = openerp.web.ViewEditor.Field.extend({
@ -650,22 +742,28 @@ openerp.web.ViewEditor.FieldChar = openerp.web.ViewEditor.Field.extend({
this.$element.find("input[id="+ this.name+"]").css('width','100%').change(function() {
self.on_ui_change();
});
this._super();
},
set_value: function(value) {
value ? this.$element.find("input[id=" + this.name + "]").val(value[1]): this.$element.find("tr[id=" + this.name + "] input").val();
},
get_value: function() {
var value= this.$element.find("input[id=" + this.name + "]").val();
return value ? [this.name, value] : [this.name, ""];
return value ? value: "";
}
});
openerp.web.ViewEditor.FieldSelect = openerp.web.ViewEditor.Field.extend({
template : "vieweditor_selection",
init: function(view, id) {
this._super(view, id);
this.selection = false;
},
start: function () {
var self = this;
this.$element.find("select[id=" + this.name + "]").css('width', '100%').change(function() {
self.on_ui_change();
});
this._super();
},
set_value: function(value) {
value = value === null ? false : value;
@ -678,7 +776,7 @@ openerp.web.ViewEditor.FieldSelect = openerp.web.ViewEditor.Field.extend({
},
get_value: function() {
var value = this.$element.find("select[id=" + this.name + "]").val();
return value ? [this.name, value] : [this.name, ""];
return value ? value: "";
}
});
openerp.web.ViewEditor.WidgetProperty = openerp.web.ViewEditor.FieldSelect.extend({
@ -735,6 +833,7 @@ openerp.web.ViewEditor.GroupsProperty = openerp.web.ViewEditor.FieldSelect.exten
start: function () {
this._super();
this.$element.find("select[id=" + this.name + "]").css('height', '100px').attr("multiple",true);
this._super();
},
set_value: function(value) {
var self = this;
@ -800,11 +899,13 @@ openerp.web.ViewEditor.property_widget = new openerp.web.Registry({
'completion' : 'openerp.web.ViewEditor.FieldBoolean',
'widget' : 'openerp.web.ViewEditor.WidgetProperty',
'groups' : 'openerp.web.ViewEditor.GroupsProperty',
'position': 'openerp.web.ViewEditor.PositionProperty',
'icon': 'openerp.web.ViewEditor.IconProperty',
'align': 'openerp.web.ViewEditor.AlignProperty',
'special': 'openerp.web.ViewEditor.ButtonSpecialProperty',
'type': 'openerp.web.ViewEditor.ButtonTypeProperty',
'target': 'openerp.web.ViewEditor.ButtonTargetProperty'
'position' : 'openerp.web.ViewEditor.PositionProperty',
'icon' : 'openerp.web.ViewEditor.IconProperty',
'align' : 'openerp.web.ViewEditor.AlignProperty',
'special' : 'openerp.web.ViewEditor.ButtonSpecialProperty',
'type' : 'openerp.web.ViewEditor.ButtonTypeProperty',
'target' : 'openerp.web.ViewEditor.ButtonTargetProperty',
'selection' : 'openerp.web.ViewEditor.FieldSelect',
'char' : 'openerp.web.ViewEditor.FieldChar',
});
};