erp_forms 2.0.2 → 2.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +8 -3
- data/app/controllers/erp_forms/erp_app/desktop/dynamic_forms/comments_controller.rb +16 -0
- data/app/controllers/erp_forms/erp_app/desktop/dynamic_forms/data_controller.rb +45 -8
- data/app/controllers/erp_forms/erp_app/desktop/dynamic_forms/forms_controller.rb +14 -5
- data/app/controllers/erp_forms/erp_app/desktop/dynamic_forms/models_controller.rb +2 -2
- data/app/models/dynamic_datum.rb +31 -21
- data/app/models/dynamic_form.rb +42 -35
- data/app/models/ticket.rb +16 -0
- data/config/routes.rb +1 -0
- data/db/data_migrations/20110608185830_create_default_dynamic_models_and_forms.rb +4 -4
- data/db/data_migrations/20120824013449_create_ticket_form.rb +65 -0
- data/db/data_migrations/{20110830170240_update_contact_form.rb → 20120904191738_update_contact_form.rb} +5 -6
- data/db/migrate/20120824012520_create_tickets.rb +18 -0
- data/lib/erp_forms/dynamic_form_field.rb +93 -20
- data/lib/erp_forms/dynamic_grid_column.rb +7 -5
- data/lib/erp_forms/engine.rb +1 -0
- data/lib/erp_forms/extensions/active_record/has_dynamic_forms.rb +5 -5
- data/lib/erp_forms/extensions/railties/action_view.rb +6 -3
- data/lib/erp_forms/version.rb +1 -1
- data/public/javascripts/erp_app/desktop/applications/dynamic_forms/dynamic_data_grid.js +165 -13
- data/public/javascripts/erp_app/desktop/applications/dynamic_forms/module.js +1 -2
- data/public/javascripts/erp_app/desktop/applications/dynamic_forms/west_region.js +26 -13
- data/public/javascripts/erp_app/shared/dynamic_forms/dynamic_form_fields.js +37 -0
- data/public/stylesheets/erp_app/desktop/applications/dynamic_forms/comments.css +15 -0
- metadata +16 -11
- data/db/data_migrations/20110822170240_update_contact_form_validation.rb +0 -22
@@ -5,22 +5,23 @@ class DynamicFormField
|
|
5
5
|
|
6
6
|
Field Types TODO
|
7
7
|
special:
|
8
|
-
|
9
|
-
file upload
|
10
|
-
|
8
|
+
codemirror
|
9
|
+
file upload - use has_file_assets and plupload
|
10
|
+
test password field
|
11
|
+
|
11
12
|
complex (for future implementation):
|
12
13
|
concatenated
|
13
14
|
calculated
|
14
|
-
related
|
15
|
+
related with search ahead for relations with huge datasets
|
15
16
|
=end
|
16
17
|
|
17
18
|
# options = {
|
18
19
|
# :fieldLabel => Field label text string
|
19
20
|
# :name => Field variable name string
|
20
|
-
# :
|
21
|
+
# :allowBlank => required true or false
|
21
22
|
# :value => prepopulated default value string
|
22
|
-
# :
|
23
|
-
# :
|
23
|
+
# :readOnly => disabled true or false
|
24
|
+
# :maxLength => maxLength integer
|
24
25
|
# :width => size integer
|
25
26
|
# :validation_regex => regex string
|
26
27
|
# }
|
@@ -37,6 +38,11 @@ class DynamicFormField
|
|
37
38
|
DynamicFormField.basic_field('numberfield', options)
|
38
39
|
end
|
39
40
|
|
41
|
+
def self.password(options={})
|
42
|
+
options[:inputType] = 'password'
|
43
|
+
DynamicFormField.basic_field('textfield', options)
|
44
|
+
end
|
45
|
+
|
40
46
|
def self.datefield(options={})
|
41
47
|
DynamicFormField.basic_field('datefield', options)
|
42
48
|
end
|
@@ -47,21 +53,81 @@ class DynamicFormField
|
|
47
53
|
|
48
54
|
def self.yesno(selections=[], options={})
|
49
55
|
selections = [['yes', 'Yes'],['no', 'No']]
|
50
|
-
DynamicFormField.basic_field('
|
56
|
+
DynamicFormField.basic_field('combobox', options, selections)
|
57
|
+
end
|
58
|
+
|
59
|
+
# a combobox that dynamically pulls options from a related model
|
60
|
+
def self.related_combobox(model='', displayField = '', options={})
|
61
|
+
options[:forceSelection] = true if options[:forceSelection].nil?
|
62
|
+
options[:displayField] = displayField
|
63
|
+
|
64
|
+
options[:extraParams] = {
|
65
|
+
:model => model,
|
66
|
+
:displayField => displayField
|
67
|
+
}
|
68
|
+
|
69
|
+
options[:fields] = [
|
70
|
+
{ :name => 'id' },
|
71
|
+
{ :name => displayField }
|
72
|
+
]
|
73
|
+
|
74
|
+
options[:url] = '/erp_forms/erp_app/desktop/dynamic_forms/forms/related_field' if options[:url].blank?
|
75
|
+
|
76
|
+
DynamicFormField.basic_field('related_combobox', options)
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.ckeditor(options={})
|
80
|
+
options[:height] = 300 if options[:height].nil?
|
81
|
+
options[:width] = 850 if options[:width].nil?
|
82
|
+
|
83
|
+
if options[:ckEditorConfig].nil?
|
84
|
+
options[:ckEditorConfig] = {
|
85
|
+
# :width => options[:width],
|
86
|
+
# :height => options[:height],
|
87
|
+
:extraPlugins => 'compasssave,jwplayer',
|
88
|
+
:toolbar => [
|
89
|
+
['Source','-','CompassSave','Preview','Print'],
|
90
|
+
['Cut','Copy','Paste','PasteText','PasteFromWord'],
|
91
|
+
['Undo','Redo'],
|
92
|
+
['Find','Replace'],
|
93
|
+
['SpellChecker','-','SelectAll'],
|
94
|
+
['TextColor','BGColor'],
|
95
|
+
['Bold','Italic','Underline','Strike'],
|
96
|
+
['Subscript','Superscript','-','jwplayer'],
|
97
|
+
['Table','NumberedList','BulletedList'],
|
98
|
+
['Outdent','Indent','Blockquote'],
|
99
|
+
['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
|
100
|
+
['BidiLtr','BidiRtl'],
|
101
|
+
['Link','Unlink','Anchor'],
|
102
|
+
['HorizontalRule','SpecialChar','PageBreak'],
|
103
|
+
['ShowBlocks','RemoveFormat'],
|
104
|
+
['Styles','Format','Font','FontSize' ],
|
105
|
+
['Maximize','-','About']
|
106
|
+
]
|
107
|
+
}
|
108
|
+
end
|
109
|
+
|
110
|
+
DynamicFormField.basic_field('ckeditor', options)
|
51
111
|
end
|
52
112
|
|
53
113
|
################
|
54
114
|
# BASIC FIELDS #
|
55
|
-
################
|
115
|
+
################
|
116
|
+
# ComboBox with a static store, if you need a dynamic store use DynamicFormField.related_combobox
|
56
117
|
# selections is an array of tuples, i.e. [['AL', 'Alabama'],['AK', 'Alaska']] - [value, text]
|
57
118
|
def self.combobox(selections=[], options={})
|
58
|
-
|
119
|
+
options[:forceSelection] = true if options[:forceSelection].nil?
|
120
|
+
DynamicFormField.basic_field('combobox', options, selections)
|
59
121
|
end
|
60
122
|
|
61
123
|
def self.textfield(options={})
|
62
124
|
DynamicFormField.basic_field('textfield', options)
|
63
125
|
end
|
64
126
|
|
127
|
+
def self.displayfield(options={})
|
128
|
+
DynamicFormField.basic_field('displayfield', options)
|
129
|
+
end
|
130
|
+
|
65
131
|
def self.textarea(options={})
|
66
132
|
options[:height] = 100 if options[:height].nil?
|
67
133
|
DynamicFormField.basic_field('textarea', options)
|
@@ -83,21 +149,27 @@ class DynamicFormField
|
|
83
149
|
:fieldLabel => options[:fieldLabel],
|
84
150
|
:name => options[:name],
|
85
151
|
:value => options[:value],
|
86
|
-
:allowBlank => options[:
|
87
|
-
:readOnly => options[:
|
152
|
+
:allowBlank => options[:allowBlank],
|
153
|
+
:readOnly => options[:readOnly],
|
88
154
|
:width =>options[:width],
|
89
155
|
:height => options[:height],
|
90
|
-
:labelWidth => options[:
|
156
|
+
:labelWidth => options[:labelWidth],
|
157
|
+
:display_in_grid => options[:display_in_grid]
|
91
158
|
}
|
159
|
+
|
160
|
+
field[:displayField] = options[:displayField] unless options[:displayField].blank?
|
161
|
+
field[:extraParams] = options[:extraParams] unless options[:extraParams].blank?
|
162
|
+
field[:url] = options[:url] unless options[:url].blank?
|
163
|
+
field[:fields] = options[:fields] unless options[:fields].blank?
|
92
164
|
|
93
165
|
field[:mapping] = options[:mapping] unless options[:mapping].blank?
|
94
|
-
field[:maxLength] = options[:
|
166
|
+
field[:maxLength] = options[:maxLength] unless options[:maxLength].nil?
|
95
167
|
|
96
168
|
if selections and selections != []
|
97
|
-
field[:store] = selections
|
169
|
+
field[:store] = selections
|
98
170
|
end
|
99
171
|
|
100
|
-
if options[:validation_regex] or options[:validator_function]
|
172
|
+
if !options[:validation_regex].blank? or !options[:validator_function].blank?
|
101
173
|
field[:validateOnBlur] = true
|
102
174
|
end
|
103
175
|
|
@@ -116,14 +188,15 @@ class DynamicFormField
|
|
116
188
|
|
117
189
|
options[:fieldLabel] = '' if options[:fieldLabel].nil?
|
118
190
|
options[:name] = '' if options[:name].nil?
|
119
|
-
options[:
|
191
|
+
options[:allowBlank] = true if options[:allowBlank].nil?
|
120
192
|
options[:value] = '' if options[:value].nil?
|
121
|
-
options[:
|
122
|
-
options[:
|
193
|
+
options[:readOnly] = false if options[:readOnly].nil?
|
194
|
+
options[:maxLength] = nil if options[:maxLength].nil?
|
123
195
|
options[:width] = 200 if options[:width].nil?
|
124
196
|
options[:height] = nil if options[:height].nil?
|
125
197
|
options[:validation_regex] = '' if options[:validation_regex].nil?
|
126
|
-
options[:
|
198
|
+
options[:labelWidth] = 75 if options[:labelWidth].nil?
|
199
|
+
options[:display_in_grid] = true if options[:display_in_grid].nil?
|
127
200
|
|
128
201
|
options
|
129
202
|
end
|
@@ -4,7 +4,7 @@ class DynamicGridColumn
|
|
4
4
|
field_hash.symbolize_keys!
|
5
5
|
header = field_hash[:fieldLabel]
|
6
6
|
type = DynamicGridColumn.convert_xtype_to_column_type(field_hash[:xtype])
|
7
|
-
data_index = field_hash[:name]
|
7
|
+
data_index = (field_hash[:dataIndex] ? field_hash[:dataIndex] : field_hash[:name])
|
8
8
|
|
9
9
|
if type == 'date'
|
10
10
|
renderer = "Ext.util.Format.dateRenderer('m/d/Y')"
|
@@ -17,15 +17,17 @@ class DynamicGridColumn
|
|
17
17
|
\"type\":\"#{type}\",
|
18
18
|
\"dataIndex\":\"#{data_index}\""
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
|
21
|
+
col << ",\"width\":#{field_hash[:width]}" if field_hash[:width]
|
22
|
+
|
23
|
+
sortable = field_hash[:sortable].nil? ? true : field_hash[:sortable]
|
24
|
+
col << ",\"sortable\":#{sortable}"
|
23
25
|
|
24
26
|
col += ",
|
25
27
|
\"renderer\": #{renderer}" if renderer != ''
|
26
28
|
|
27
29
|
if options[:editor]
|
28
|
-
readonly = field_hash[:
|
30
|
+
readonly = field_hash[:readOnly].blank? ? false : field_hash[:readOnly]
|
29
31
|
col += ",
|
30
32
|
{
|
31
33
|
\"xtype\": \"#{field_hash[:xtype]}\",
|
data/lib/erp_forms/engine.rb
CHANGED
@@ -14,10 +14,10 @@ module ErpForms
|
|
14
14
|
|
15
15
|
include HasDynamicForms::InstanceMethods
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
def set_default(form_id)
|
18
|
+
DynamicForm.update_all({ :default => false }, conditions={ :model_name => self.class_name.to_s })
|
19
|
+
DynamicForm.update_all({ :default => true }, conditions={ :id => form_id })
|
20
|
+
end
|
21
21
|
end
|
22
22
|
|
23
23
|
end
|
@@ -55,7 +55,7 @@ module ErpForms
|
|
55
55
|
|
56
56
|
# get all forms by type
|
57
57
|
def forms
|
58
|
-
|
58
|
+
DynamicForm.find_all_by_model_name(self.class_name)
|
59
59
|
end
|
60
60
|
|
61
61
|
def set_default(internal_identifier)
|
@@ -7,14 +7,17 @@ ActionView::Base.class_eval do
|
|
7
7
|
# :width => 'width of form in pixels'
|
8
8
|
# }
|
9
9
|
def render_dynamic_form(name, options={})
|
10
|
-
|
11
|
-
|
10
|
+
output = raw ' <script type="text/javascript">'
|
11
|
+
output += raw "Compass.ErpApp.Utility.JsLoader.load(['/javascripts/erp_app/shared/dynamic_forms/dynamic_form_fields.js'], function(){"
|
12
|
+
|
13
|
+
output += raw DynamicForm.get_form(name.to_s, options[:internal_identifier]).to_extjs_widget(
|
12
14
|
{ :url => build_widget_url(:new),
|
13
15
|
:widget_result_id => widget_result_id,
|
14
16
|
:width => options[:width]
|
15
17
|
})
|
16
18
|
|
17
|
-
|
19
|
+
output += raw '});</script>'
|
20
|
+
output
|
18
21
|
end
|
19
22
|
|
20
23
|
end
|
data/lib/erp_forms/version.rb
CHANGED
@@ -1,6 +1,148 @@
|
|
1
1
|
Ext.define("Compass.ErpApp.Desktop.Applications.DynamicForms.DynamicDataGridPanel",{
|
2
2
|
extend:"Compass.ErpApp.Shared.DynamicEditableGridLoaderPanel",
|
3
3
|
alias:'widget.dynamic_forms_DynamicDataGridPanel',
|
4
|
+
|
5
|
+
addCommentWindow : function(record_id, model_name, comment_div_id){
|
6
|
+
var commentForm = {
|
7
|
+
url: '/erp_forms/erp_app/desktop/dynamic_forms/comments/add',
|
8
|
+
xtype: 'form',
|
9
|
+
items: [{
|
10
|
+
xtype: 'textarea',
|
11
|
+
name: 'comment',
|
12
|
+
width: 800,
|
13
|
+
height: 400
|
14
|
+
}],
|
15
|
+
buttons:[{
|
16
|
+
text:'Submit',
|
17
|
+
listeners:{
|
18
|
+
'click':function(button){
|
19
|
+
var formPanel = button.findParentByType('form');
|
20
|
+
//self.setWindowStatus('Adding Comment ...');
|
21
|
+
formPanel.getForm().submit({
|
22
|
+
params:{
|
23
|
+
id:record_id,
|
24
|
+
model_name:model_name
|
25
|
+
},
|
26
|
+
reset:false,
|
27
|
+
success:function(form, action){
|
28
|
+
//self.clearWindowStatus();
|
29
|
+
var obj = Ext.decode(action.response.responseText);
|
30
|
+
if(obj.success){
|
31
|
+
var randomnumber=Math.floor(Math.random()*1024)
|
32
|
+
var target_div = 'new-comment-'+randomnumber;
|
33
|
+
string = '<div id="'+target_div+'" class="comment">';
|
34
|
+
string += '<i>by you, just now</i><br />';
|
35
|
+
string += formPanel.getForm().findField('comment').getValue();
|
36
|
+
string += '</div>';
|
37
|
+
document.getElementById(comment_div_id).innerHTML += string;
|
38
|
+
Ext.getCmp('commentWindow_'+model_name+record_id).close();
|
39
|
+
codemirrorHighlight(target_div);
|
40
|
+
}
|
41
|
+
else{
|
42
|
+
Ext.Msg.alert("Error", obj.msg);
|
43
|
+
}
|
44
|
+
},
|
45
|
+
failure:function(form, action){
|
46
|
+
//self.clearWindowStatus();
|
47
|
+
var obj = Ext.decode(action.response.responseText);
|
48
|
+
if(Compass.ErpApp.Utility.isBlank(obj.message)){
|
49
|
+
Ext.Msg.alert("Error", 'Error adding comment.');
|
50
|
+
}
|
51
|
+
else{
|
52
|
+
Ext.Msg.alert("Error", obj.message);
|
53
|
+
}
|
54
|
+
}
|
55
|
+
});
|
56
|
+
}
|
57
|
+
}
|
58
|
+
}]
|
59
|
+
}
|
60
|
+
|
61
|
+
var commentWindow = Ext.create('Ext.window.Window',{
|
62
|
+
id: 'commentWindow_'+model_name+record_id,
|
63
|
+
title: 'Add Comment',
|
64
|
+
items: [commentForm],
|
65
|
+
autoDestroy:true
|
66
|
+
});
|
67
|
+
|
68
|
+
commentWindow.show();
|
69
|
+
|
70
|
+
},
|
71
|
+
|
72
|
+
viewRecord : function(rec, gridpanel_id){
|
73
|
+
var self = this;
|
74
|
+
Ext.getCmp('westregionPanel').setWindowStatus('Getting data ...');
|
75
|
+
Ext.Ajax.request({
|
76
|
+
url: '/erp_forms/erp_app/desktop/dynamic_forms/data/get',
|
77
|
+
method: 'POST',
|
78
|
+
params:{
|
79
|
+
id:rec.get("id"),
|
80
|
+
model_name:rec.get("model_name")
|
81
|
+
},
|
82
|
+
success: function(response) {
|
83
|
+
Ext.getCmp('westregionPanel').clearWindowStatus();
|
84
|
+
var response_text = Ext.decode(response.responseText);
|
85
|
+
var center_region = self.findParentByType('dynamic_forms_centerregion');
|
86
|
+
|
87
|
+
var ticket_div_id = gridpanel_id+'_ticket';
|
88
|
+
|
89
|
+
string = '<div id="'+ticket_div_id+'" style="padding: 10px;">';
|
90
|
+
string += '<div class="metadata">';
|
91
|
+
string += 'Created by '+response_text.metadata.created_username+' at '+response_text.metadata.created_at+'<br/>';
|
92
|
+
string += 'Updated';
|
93
|
+
if (response_text.metadata.updated_username){
|
94
|
+
string += ' by '+response_text.metadata.updated_username;
|
95
|
+
}
|
96
|
+
if (response_text.metadata.updated_at){
|
97
|
+
string += ' at '+response_text.metadata.updated_at;
|
98
|
+
}
|
99
|
+
string += '</div>';
|
100
|
+
for(var index in response_text.data) {
|
101
|
+
string += '<b>'+ index + ':</b> ' + response_text.data[index] + '<br />';
|
102
|
+
}
|
103
|
+
string += '</div>';
|
104
|
+
|
105
|
+
var comment_div_id = gridpanel_id+'_comments';
|
106
|
+
|
107
|
+
if (response_text.comments){
|
108
|
+
string += '<div id="'+comment_div_id+'" class="comments"><h1>Comments ';
|
109
|
+
string += '<a onclick="javascript: Ext.getCmp(\''+gridpanel_id+'\').addCommentWindow('+rec.get("id")+',\''+rec.get("model_name")+'\',\''+comment_div_id+'\');" href="#">Add Comment</a></h1>';
|
110
|
+
|
111
|
+
Ext.each(response_text.comments, function(comment){
|
112
|
+
string += '<div class="comment">';
|
113
|
+
string += '<i>by '+comment.commentor_name+ ', '+comment.created_at+'</i><br />';
|
114
|
+
string += comment.comment;
|
115
|
+
string += '</div>';
|
116
|
+
});
|
117
|
+
|
118
|
+
string += '</div>';
|
119
|
+
}
|
120
|
+
|
121
|
+
var viewPanel = {
|
122
|
+
xtype: 'panel',
|
123
|
+
title: rec.get("model_name")+' '+rec.get("id"),
|
124
|
+
closable: true,
|
125
|
+
autoScroll: true,
|
126
|
+
record: rec,
|
127
|
+
html: string,
|
128
|
+
items: [],
|
129
|
+
listeners:{
|
130
|
+
'afterrender':function(){
|
131
|
+
codemirrorHighlight(ticket_div_id);
|
132
|
+
codemirrorHighlight(comment_div_id);
|
133
|
+
}
|
134
|
+
}
|
135
|
+
}
|
136
|
+
|
137
|
+
center_region.workArea.add(viewPanel);
|
138
|
+
center_region.workArea.setActiveTab(center_region.workArea.items.length - 1);
|
139
|
+
},
|
140
|
+
failure: function(response) {
|
141
|
+
Ext.getCmp('westregionPanel').clearWindowStatus();
|
142
|
+
Ext.Msg.alert('Error', 'Error getting data');
|
143
|
+
}
|
144
|
+
});
|
145
|
+
},
|
4
146
|
|
5
147
|
editRecord : function(rec, model_name){
|
6
148
|
var self = this;
|
@@ -9,23 +151,28 @@ Ext.define("Compass.ErpApp.Desktop.Applications.DynamicForms.DynamicDataGridPane
|
|
9
151
|
url: '/erp_forms/erp_app/desktop/dynamic_forms/forms/get',
|
10
152
|
method: 'POST',
|
11
153
|
params:{
|
12
|
-
id:rec.get("
|
154
|
+
id:rec.get("form_id"),
|
155
|
+
record_id:rec.get("id"),
|
13
156
|
model_name:model_name,
|
14
157
|
form_action: 'update'
|
15
158
|
},
|
16
159
|
success: function(response) {
|
17
160
|
Ext.getCmp('westregionPanel').clearWindowStatus();
|
18
161
|
form_definition = Ext.decode(response.responseText);
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
162
|
+
if (form_definition.success == false){
|
163
|
+
Ext.Msg.alert('Error', form_definition.error);
|
164
|
+
}else{
|
165
|
+
var editRecordWindow = Ext.create("Ext.window.Window",{
|
166
|
+
layout:'fit',
|
167
|
+
title:'Update Record',
|
168
|
+
y: 100, // this fixes chrome and safari rendering the window at the bottom of the screen
|
169
|
+
plain: true,
|
170
|
+
buttonAlign:'center',
|
171
|
+
items: form_definition
|
172
|
+
});
|
173
|
+
Ext.getCmp('dynamic_form_panel_'+model_name).getForm().loadRecord(rec);
|
174
|
+
editRecordWindow.show();
|
175
|
+
}
|
29
176
|
},
|
30
177
|
failure: function(response) {
|
31
178
|
Ext.getCmp('westregionPanel').clearWindowStatus();
|
@@ -64,13 +211,18 @@ Ext.define("Compass.ErpApp.Desktop.Applications.DynamicForms.DynamicDataGridPane
|
|
64
211
|
|
65
212
|
constructor : function(config) {
|
66
213
|
config = Ext.apply({
|
67
|
-
id:
|
214
|
+
id:config.id,
|
68
215
|
//title:'Dynamic Data',
|
69
216
|
editable:false,
|
70
217
|
page:true,
|
71
218
|
pageSize: 20,
|
72
219
|
displayMsg:'Displaying {0} - {1} of {2}',
|
73
|
-
emptyMsg:'Empty'
|
220
|
+
emptyMsg:'Empty',
|
221
|
+
grid_listeners:{
|
222
|
+
'itemdblclick':function(view, record){
|
223
|
+
Ext.getCmp(config.id).viewRecord(record, config.id);
|
224
|
+
}
|
225
|
+
}
|
74
226
|
}, config);
|
75
227
|
|
76
228
|
this.callParent([config]);
|
@@ -18,8 +18,7 @@ Ext.define("Compass.ErpApp.Desktop.Applications.DynamicForms",{
|
|
18
18
|
win = desktop.createWindow({
|
19
19
|
id: 'dynamic_forms',
|
20
20
|
title:'Dynamic Forms',
|
21
|
-
|
22
|
-
height:550,
|
21
|
+
maximized:true,
|
23
22
|
iconCls: 'icon-document',
|
24
23
|
shim:false,
|
25
24
|
animCollapse:false,
|
@@ -130,7 +130,7 @@ Ext.define("Compass.ErpApp.Desktop.Applications.DynamicForms.WestRegion",{
|
|
130
130
|
sectionId,
|
131
131
|
response.responseText,
|
132
132
|
[{
|
133
|
-
text: 'Insert Content
|
133
|
+
text: 'Insert Content Area1',
|
134
134
|
handler: function(btn){
|
135
135
|
var codeMirror = btn.findParentByType('codemirror');
|
136
136
|
Ext.MessageBox.prompt('New File', 'Please enter content area name:', function(btn, text){
|
@@ -152,12 +152,20 @@ Ext.define("Compass.ErpApp.Desktop.Applications.DynamicForms.WestRegion",{
|
|
152
152
|
|
153
153
|
getDynamicData : function(record, title){
|
154
154
|
var self = this;
|
155
|
+
dynamic_data = Ext.getCmp('centerRegionLayout_'+record.data.text);
|
156
|
+
if (dynamic_data){
|
157
|
+
this.centerRegion.workArea.setActiveTab(dynamic_data);
|
158
|
+
return;
|
159
|
+
}
|
160
|
+
|
155
161
|
var centerRegionLayout = Ext.create("Ext.panel.Panel",{
|
162
|
+
id: 'centerRegionLayout_'+record.data.text,
|
156
163
|
layout:'border',
|
157
164
|
title: record.data.text + " Dynamic Data",
|
158
165
|
closable:true,
|
159
166
|
items:[
|
160
167
|
{
|
168
|
+
id: record.data.text,
|
161
169
|
xtype:'dynamic_forms_DynamicDataGridPanel',
|
162
170
|
model_name:record.data.text,
|
163
171
|
dataUrl: '/erp_forms/erp_app/desktop/dynamic_forms/data/index/'+record.data.text,
|
@@ -184,15 +192,19 @@ Ext.define("Compass.ErpApp.Desktop.Applications.DynamicForms.WestRegion",{
|
|
184
192
|
success: function(response) {
|
185
193
|
self.clearWindowStatus();
|
186
194
|
form_definition = Ext.decode(response.responseText);
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
195
|
+
if (form_definition.success == false){
|
196
|
+
Ext.Msg.alert('Error', form_definition.error);
|
197
|
+
}else{
|
198
|
+
var newRecordWindow = Ext.create("Ext.window.Window",{
|
199
|
+
layout:'fit',
|
200
|
+
title:'New Record',
|
201
|
+
y: 100, // this fixes chrome and safari rendering the window at the bottom of the screen
|
202
|
+
plain: true,
|
203
|
+
buttonAlign:'center',
|
204
|
+
items: form_definition
|
205
|
+
});
|
206
|
+
newRecordWindow.show();
|
207
|
+
}
|
196
208
|
},
|
197
209
|
failure: function(response) {
|
198
210
|
self.clearWindowStatus();
|
@@ -290,7 +302,8 @@ Ext.define("Compass.ErpApp.Desktop.Applications.DynamicForms.WestRegion",{
|
|
290
302
|
}
|
291
303
|
}
|
292
304
|
else if(record.data['isForm']){
|
293
|
-
self.getDynamicForm(record);
|
305
|
+
//self.getDynamicForm(record);
|
306
|
+
Ext.Msg.alert('Info', 'Form Builder not yet implemented');
|
294
307
|
}
|
295
308
|
},
|
296
309
|
'itemcontextmenu':function(view, record, htmlItem, index, e){
|
@@ -383,7 +396,7 @@ Ext.define("Compass.ErpApp.Desktop.Applications.DynamicForms.WestRegion",{
|
|
383
396
|
var layout = new Ext.Panel({
|
384
397
|
layout: 'border',
|
385
398
|
autoDestroy:true,
|
386
|
-
title:'Dynamic Forms',
|
399
|
+
title:'Dynamic Models & Forms',
|
387
400
|
items: [this.sitesTree],
|
388
401
|
tbar:{
|
389
402
|
items:[
|
@@ -474,7 +487,7 @@ Ext.define("Compass.ErpApp.Desktop.Applications.DynamicForms.WestRegion",{
|
|
474
487
|
id: 'westregionPanel',
|
475
488
|
region:'west',
|
476
489
|
split:true,
|
477
|
-
width:
|
490
|
+
width:175,
|
478
491
|
collapsible:false
|
479
492
|
}, config);
|
480
493
|
|
@@ -0,0 +1,37 @@
|
|
1
|
+
Ext.define("Compass.ErpApp.Shared.DynamicRelatedComboBox",{
|
2
|
+
extend:"Ext.form.field.ComboBox",
|
3
|
+
alias:'widget.related_combobox',
|
4
|
+
initComponent: function() {
|
5
|
+
//var config = this.initialConfig;
|
6
|
+
this.callParent(arguments);
|
7
|
+
},
|
8
|
+
|
9
|
+
constructor : function(config) {
|
10
|
+
|
11
|
+
config = Ext.apply({
|
12
|
+
width: config['width'],
|
13
|
+
loadingText:'Retrieving Options...',
|
14
|
+
displayField: config['displayField'],
|
15
|
+
valueField:'id',
|
16
|
+
triggerAction: 'all',
|
17
|
+
allowBlank: config['allowBlank'],
|
18
|
+
store: Ext.create('Ext.data.Store', {
|
19
|
+
fields:config['fields'],
|
20
|
+
//remoteSort:config['remoteSort'],
|
21
|
+
proxy: {
|
22
|
+
type:'ajax',
|
23
|
+
reader:{
|
24
|
+
type:'json',
|
25
|
+
root:'data'
|
26
|
+
},
|
27
|
+
extraParams: config['extraParams'],
|
28
|
+
url: config['url']
|
29
|
+
},
|
30
|
+
//storeId: config['storeId'],
|
31
|
+
autoLoad: true
|
32
|
+
})
|
33
|
+
}, config);
|
34
|
+
|
35
|
+
this.callParent([config]);
|
36
|
+
}
|
37
|
+
});
|