From 712b3c83f4e49095c46c8a11edaef2b9d2b5d1a3 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Mon, 14 Nov 2011 15:21:16 +0530 Subject: [PATCH] [ADD] vieweditor:- implement functionality of create new view. bzr revid: ysa@tinyerp.com-20111114095116-us7a14avj84e4bi2 --- addons/web/static/src/js/view_editor.js | 125 +++++++++++++++++++++--- 1 file changed, 113 insertions(+), 12 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 0e889cc429d..841ca4ba81c 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -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('
'); + 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('' + widget.name + ':' + type_widget.render()+''); + 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("\n<%s string='%s'>\n\t\n", 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', }); };