erp_forms 2.0.2 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
});
|