erp_forms 2.0.0
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/GPL-3-LICENSE +674 -0
- data/README.rdoc +2 -0
- data/Rakefile +30 -0
- data/app/assets/javascripts/erp_forms/application.js +9 -0
- data/app/assets/stylesheets/erp_forms/application.css +7 -0
- data/app/controllers/erp_forms/erp_app/desktop/dynamic_forms/base_controller.rb +47 -0
- data/app/controllers/erp_forms/erp_app/desktop/dynamic_forms/data_controller.rb +87 -0
- data/app/controllers/erp_forms/erp_app/desktop/dynamic_forms/forms_controller.rb +79 -0
- data/app/controllers/erp_forms/erp_app/desktop/dynamic_forms/models_controller.rb +45 -0
- data/app/helpers/erp_forms/application_helper.rb +4 -0
- data/app/models/dynamic_datum.rb +65 -0
- data/app/models/dynamic_form.rb +191 -0
- data/app/models/dynamic_form_document.rb +29 -0
- data/app/models/dynamic_form_model.rb +42 -0
- data/app/views/layouts/application.html.erb +14 -0
- data/app/views/layouts/erp_forms/application.html.erb +14 -0
- data/app/widgets/dynamic_forms/base.rb +61 -0
- data/app/widgets/dynamic_forms/javascript/dynamic_forms.js +109 -0
- data/app/widgets/dynamic_forms/views/error.html.erb +4 -0
- data/app/widgets/dynamic_forms/views/index.html.erb +8 -0
- data/app/widgets/dynamic_forms/views/success.html.erb +4 -0
- data/config/routes.rb +6 -0
- data/db/data_migrations/20110608185830_create_default_dynamic_models_and_forms.rb +30 -0
- data/db/data_migrations/20110822170240_update_contact_form_validation.rb +22 -0
- data/db/data_migrations/20110828190913_create_desktop_app_dynamic_forms.rb +18 -0
- data/db/data_migrations/20110830170240_update_contact_form.rb +23 -0
- data/db/migrate/20110530193446_dynamic_forms.rb +82 -0
- data/lib/erp_forms/dynamic_attributes_patch.rb +10 -0
- data/lib/erp_forms/dynamic_form_field.rb +130 -0
- data/lib/erp_forms/dynamic_grid_column.rb +108 -0
- data/lib/erp_forms/engine.rb +22 -0
- data/lib/erp_forms/extensions/active_record/has_dynamic_data.rb +54 -0
- data/lib/erp_forms/extensions/active_record/has_dynamic_forms.rb +70 -0
- data/lib/erp_forms/extensions/extensions.rb +6 -0
- data/lib/erp_forms/extensions/railties/action_view.rb +20 -0
- data/lib/erp_forms/version.rb +3 -0
- data/lib/erp_forms.rb +11 -0
- data/lib/tasks/erp_forms_tasks.rake +4 -0
- data/public/javascripts/erp_app/desktop/applications/dynamic_forms/center_region.js +23 -0
- data/public/javascripts/erp_app/desktop/applications/dynamic_forms/dynamic_data_grid.js +81 -0
- data/public/javascripts/erp_app/desktop/applications/dynamic_forms/form_builder.js +93 -0
- data/public/javascripts/erp_app/desktop/applications/dynamic_forms/module.js +37 -0
- data/public/javascripts/erp_app/desktop/applications/dynamic_forms/west_region.js +468 -0
- data/public/javascripts/erp_app/shared/dynamic_forms/dynamic_forms_validation.js +4 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +9 -0
- data/spec/dummy/app/assets/stylesheets/application.css +7 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config/application.rb +45 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +8 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/spec.rb +27 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +10 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +12 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +4 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +26 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/models/dynamic_datum_spec.rb +9 -0
- data/spec/models/dynamic_form_document_spec.rb +11 -0
- data/spec/models/dynamic_form_model_spec.rb +11 -0
- data/spec/models/dynamic_form_spec.rb +11 -0
- data/spec/spec_helper.rb +60 -0
- metadata +183 -0
@@ -0,0 +1,54 @@
|
|
1
|
+
module ErpForms
|
2
|
+
module Extensions
|
3
|
+
module ActiveRecord
|
4
|
+
module HasDynamicData
|
5
|
+
def self.included(base)
|
6
|
+
base.extend(ClassMethods)
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
def has_dynamic_data
|
11
|
+
include HasDynamicData::InstanceMethods
|
12
|
+
|
13
|
+
after_save :save_dynamic_data
|
14
|
+
after_initialize :initialize_dynamic_data
|
15
|
+
|
16
|
+
has_one :dynamic_data, :as => :reference, :class_name => 'DynamicDatum', :dependent => :destroy
|
17
|
+
|
18
|
+
[:reference_type,:reference_type=,
|
19
|
+
:reference_id,:reference_id=,
|
20
|
+
:dynamic_attributes,:dynamic_attributes=,
|
21
|
+
].each { |m| delegate m, :to => :dynamic_data }
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
module InstanceMethods
|
27
|
+
|
28
|
+
def data
|
29
|
+
self.dynamic_data
|
30
|
+
end
|
31
|
+
|
32
|
+
def save_dynamic_data
|
33
|
+
self.dynamic_data.save
|
34
|
+
end
|
35
|
+
|
36
|
+
def initialize_dynamic_data
|
37
|
+
if self.new_record? and self.dynamic_data.nil?
|
38
|
+
t = DynamicDatum.new
|
39
|
+
self.dynamic_data = t
|
40
|
+
t.reference = self
|
41
|
+
end
|
42
|
+
|
43
|
+
if self.class == DynamicFormDocument or self.class.superclass == DynamicFormDocument
|
44
|
+
if self.dynamic_form_model_id.nil?
|
45
|
+
dfm = DynamicFormModel.find_by_model_name(self.class.to_s)
|
46
|
+
self.dynamic_form_model_id = dfm.id unless dfm.nil?
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module ErpForms
|
2
|
+
module Extensions
|
3
|
+
module ActiveRecord
|
4
|
+
module HasDynamicForms
|
5
|
+
|
6
|
+
def self.included(base)
|
7
|
+
base.extend(ClassMethods)
|
8
|
+
end
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
|
12
|
+
def has_dynamic_forms
|
13
|
+
attr_accessor :dynamic_form
|
14
|
+
|
15
|
+
include HasDynamicForms::InstanceMethods
|
16
|
+
|
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
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
module InstanceMethods
|
26
|
+
|
27
|
+
def new_form
|
28
|
+
d = DynamicForm.new
|
29
|
+
d.model_name = self.class.to_s
|
30
|
+
d.dynamic_form_model_id = self.dynamic_form_model_id
|
31
|
+
return self.dynamic_form = d
|
32
|
+
end
|
33
|
+
|
34
|
+
def form
|
35
|
+
unless self.dynamic_form.nil?
|
36
|
+
return self.dynamic_form
|
37
|
+
else
|
38
|
+
current_form = default_form
|
39
|
+
unless current_form.nil?
|
40
|
+
return current_form
|
41
|
+
else
|
42
|
+
return new_form
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def default_form
|
48
|
+
get_form
|
49
|
+
end
|
50
|
+
|
51
|
+
# get active form by type and active columns
|
52
|
+
def get_form(internal_identifier='')
|
53
|
+
self.dynamic_form = DynamicForm.get_form(self.class.to_s, internal_identifier)
|
54
|
+
end
|
55
|
+
|
56
|
+
# get all forms by type
|
57
|
+
def forms
|
58
|
+
DynamicForm.find_all_by_model_name(self.class_name)
|
59
|
+
end
|
60
|
+
|
61
|
+
def set_default(internal_identifier)
|
62
|
+
DynamicForm.update_all('default=0', conditions="model_name=#{self.class.to_s}")
|
63
|
+
DynamicForm.update_all('default=1', conditions="model_name=#{self.class.to_s} AND internal_identifier=#{internal_identifier}")
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
ActionView::Base.class_eval do
|
2
|
+
|
3
|
+
# name is ClassName of form you want
|
4
|
+
# options are optional
|
5
|
+
# options = {
|
6
|
+
# :internal_identifier => 'iid of exact form you want' (a model can have multiple forms)
|
7
|
+
# :width => 'width of form in pixels'
|
8
|
+
# }
|
9
|
+
def render_dynamic_form(name, options={})
|
10
|
+
|
11
|
+
form = DynamicForm.get_form(name.to_s, options[:internal_identifier]).to_extjs_widget(
|
12
|
+
{ :url => build_widget_url(:new),
|
13
|
+
:widget_result_id => widget_result_id,
|
14
|
+
:width => options[:width]
|
15
|
+
})
|
16
|
+
|
17
|
+
form
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
data/lib/erp_forms.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
#compass libraries
|
2
|
+
require 'erp_tech_svcs'
|
3
|
+
|
4
|
+
require 'erp_forms/dynamic_form_field'
|
5
|
+
require 'erp_forms/dynamic_grid_column'
|
6
|
+
require 'erp_forms/dynamic_form_field'
|
7
|
+
require 'erp_forms/extensions/extensions'
|
8
|
+
require "erp_forms/engine"
|
9
|
+
|
10
|
+
module ErpForms
|
11
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
Ext.define("Compass.ErpApp.Desktop.Applications.DynamicForms.CenterRegion",{
|
2
|
+
extend:"Ext.panel.Panel",
|
3
|
+
alias:'widget.dynamic_forms_centerregion',
|
4
|
+
|
5
|
+
constructor : function(config) {
|
6
|
+
this.workArea = new Ext.TabPanel({
|
7
|
+
autoDestroy:true,
|
8
|
+
region:'center'
|
9
|
+
});
|
10
|
+
|
11
|
+
config = Ext.apply({
|
12
|
+
id:'dynamic_formsCenterRegion',
|
13
|
+
autoDestroy:true,
|
14
|
+
layout:'border',
|
15
|
+
region:'center',
|
16
|
+
split:true,
|
17
|
+
items:[this.workArea]
|
18
|
+
}, config);
|
19
|
+
|
20
|
+
this.callParent([config]);
|
21
|
+
}
|
22
|
+
});
|
23
|
+
|
@@ -0,0 +1,81 @@
|
|
1
|
+
Ext.define("Compass.ErpApp.Desktop.Applications.DynamicForms.DynamicDataGridPanel",{
|
2
|
+
extend:"Compass.ErpApp.Shared.DynamicEditableGridLoaderPanel",
|
3
|
+
alias:'widget.dynamic_forms_DynamicDataGridPanel',
|
4
|
+
|
5
|
+
editRecord : function(rec, model_name){
|
6
|
+
var self = this;
|
7
|
+
Ext.getCmp('westregionPanel').setWindowStatus('Getting update form...');
|
8
|
+
var conn = new Ext.data.Connection();
|
9
|
+
conn.request({
|
10
|
+
url: '/erp_forms/erp_app/desktop/dynamic_forms/forms/get',
|
11
|
+
method: 'POST',
|
12
|
+
params:{
|
13
|
+
id:rec.get("id"),
|
14
|
+
model_name:model_name,
|
15
|
+
form_action: 'update'
|
16
|
+
},
|
17
|
+
success: function(response) {
|
18
|
+
Ext.getCmp('westregionPanel').clearWindowStatus();
|
19
|
+
form_definition = Ext.decode(response.responseText);
|
20
|
+
var editRecordWindow = Ext.create("Ext.window.Window",{
|
21
|
+
layout:'fit',
|
22
|
+
title:'Update Record',
|
23
|
+
y: 100, // this fixes chrome and safari rendering the window at the bottom of the screen
|
24
|
+
plain: true,
|
25
|
+
buttonAlign:'center',
|
26
|
+
items: form_definition
|
27
|
+
});
|
28
|
+
Ext.getCmp('dynamic_form_panel').getForm().loadRecord(rec);
|
29
|
+
editRecordWindow.show();
|
30
|
+
},
|
31
|
+
failure: function(response) {
|
32
|
+
Ext.getCmp('westregionPanel').clearWindowStatus();
|
33
|
+
Ext.Msg.alert('Error', 'Error getting form');
|
34
|
+
}
|
35
|
+
});
|
36
|
+
},
|
37
|
+
|
38
|
+
deleteRecord : function(rec, model_name){
|
39
|
+
var self = this;
|
40
|
+
Ext.getCmp('westregionPanel').setWindowStatus('Deleting record...');
|
41
|
+
var conn = new Ext.data.Connection();
|
42
|
+
conn.request({
|
43
|
+
url: '/erp_forms/erp_app/desktop/dynamic_forms/data/delete',
|
44
|
+
method: 'POST',
|
45
|
+
params:{
|
46
|
+
id:rec.get("id"),
|
47
|
+
model_name:model_name
|
48
|
+
},
|
49
|
+
success: function(response) {
|
50
|
+
var obj = Ext.decode(response.responseText);
|
51
|
+
if(obj.success){
|
52
|
+
Ext.getCmp('westregionPanel').clearWindowStatus();
|
53
|
+
self.query('shared_dynamiceditablegrid')[0].store.load();
|
54
|
+
}
|
55
|
+
else{
|
56
|
+
Ext.Msg.alert('Error', 'Error deleting record');
|
57
|
+
Ext.getCmp('westregionPanel').clearWindowStatus();
|
58
|
+
}
|
59
|
+
},
|
60
|
+
failure: function(response) {
|
61
|
+
Ext.getCmp('westregionPanel').clearWindowStatus();
|
62
|
+
Ext.Msg.alert('Error', 'Error deleting record');
|
63
|
+
}
|
64
|
+
});
|
65
|
+
},
|
66
|
+
|
67
|
+
constructor : function(config) {
|
68
|
+
config = Ext.apply({
|
69
|
+
id:'DynamicFormDataGridPanel',
|
70
|
+
title:'Dynamic Data',
|
71
|
+
editable:false,
|
72
|
+
page:true,
|
73
|
+
pageSize: 20,
|
74
|
+
displayMsg:'Displaying {0} - {1} of {2}',
|
75
|
+
emptyMsg:'Empty'
|
76
|
+
}, config);
|
77
|
+
|
78
|
+
this.callParent([config]);
|
79
|
+
}
|
80
|
+
});
|
81
|
+
|
@@ -0,0 +1,93 @@
|
|
1
|
+
Ext.define("Compass.ErpApp.Desktop.Applications.DynamicForms.FormBuilder",{
|
2
|
+
extend:"Ext.window.Window",
|
3
|
+
alias:'widget.dynamic_forms_FormBuilder',
|
4
|
+
initComponent : function() {
|
5
|
+
|
6
|
+
this.addEvents(
|
7
|
+
/**
|
8
|
+
* @event publish_success
|
9
|
+
* Fired after success response is recieved from server
|
10
|
+
* @param {Compass.ErpApp.Applications.Desktop.PublishWindow} this Object
|
11
|
+
* @param {Object} Server Response
|
12
|
+
*/
|
13
|
+
"publish_success",
|
14
|
+
/**
|
15
|
+
* @event publish_failure
|
16
|
+
* Fired after response is recieved from server with error
|
17
|
+
* @param {Compass.ErpApp.Applications.Desktop.PublishWindow} this Object
|
18
|
+
* @param {Object} Server Response
|
19
|
+
*/
|
20
|
+
"publish_failure"
|
21
|
+
);
|
22
|
+
|
23
|
+
this.callParent(arguments);
|
24
|
+
},
|
25
|
+
|
26
|
+
constructor : function(config) {
|
27
|
+
config = Ext.apply({
|
28
|
+
layout:'fit',
|
29
|
+
title:'Form Builder',
|
30
|
+
autoHeight:true,
|
31
|
+
iconCls:'icon-document',
|
32
|
+
width:400,
|
33
|
+
height:300,
|
34
|
+
buttonAlign:'center',
|
35
|
+
plain: true,
|
36
|
+
items: new Ext.form.FormPanel({
|
37
|
+
timeout: 130000,
|
38
|
+
// baseParams:config['baseParams'],
|
39
|
+
autoHeight:true,
|
40
|
+
labelWidth:110,
|
41
|
+
frame:false,
|
42
|
+
layout:'fit',
|
43
|
+
// url:config['url'],
|
44
|
+
defaults: {
|
45
|
+
width: 225
|
46
|
+
},
|
47
|
+
items: [{
|
48
|
+
xtype: 'textarea',
|
49
|
+
hideLabel:true,
|
50
|
+
name:'comment'
|
51
|
+
}]
|
52
|
+
}),
|
53
|
+
buttons: [{
|
54
|
+
text:'Submit',
|
55
|
+
listeners:{
|
56
|
+
'click':function(button){
|
57
|
+
var win = button.findParentByType('dynamic_forms_form_builer');
|
58
|
+
var formPanel = win.findByType('form')[0];
|
59
|
+
formPanel.getForm().submit({
|
60
|
+
method:'POST',
|
61
|
+
waitMsg:'Publishing...',
|
62
|
+
success:function(form, action){
|
63
|
+
var response = Ext.util.JSON.decode(action.response.responseText);
|
64
|
+
win.fireEvent('publish_success', win, response);
|
65
|
+
win.close();
|
66
|
+
},
|
67
|
+
failure:function(form, action){
|
68
|
+
var response = Ext.util.JSON.decode(action.response.responseText);
|
69
|
+
win.fireEvent('publish_failure', win, response);
|
70
|
+
win.close();
|
71
|
+
}
|
72
|
+
});
|
73
|
+
}
|
74
|
+
}
|
75
|
+
},
|
76
|
+
{
|
77
|
+
text: 'Cancel',
|
78
|
+
listeners:{
|
79
|
+
'click':function(button){
|
80
|
+
var win = button.findParentByType('dynamic_forms_form_builer');
|
81
|
+
var form = win.findByType('form')[0];
|
82
|
+
form.getForm().reset();
|
83
|
+
win.close();
|
84
|
+
}
|
85
|
+
}
|
86
|
+
}]
|
87
|
+
}, config);
|
88
|
+
|
89
|
+
this.callParent([config]);
|
90
|
+
}
|
91
|
+
|
92
|
+
});
|
93
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
Ext.define("Compass.ErpApp.Desktop.Applications.DynamicForms",{
|
2
|
+
extend:"Ext.ux.desktop.Module",
|
3
|
+
id:'dynamic_forms-win',
|
4
|
+
init : function(){
|
5
|
+
this.launcher = {
|
6
|
+
text: 'Dynamic Forms',
|
7
|
+
iconCls:'icon-document',
|
8
|
+
handler: this.createWindow,
|
9
|
+
scope: this
|
10
|
+
}
|
11
|
+
},
|
12
|
+
|
13
|
+
createWindow : function(){
|
14
|
+
var desktop = this.app.getDesktop();
|
15
|
+
var win = desktop.getWindow('dynamic_forms');
|
16
|
+
this.centerRegion = new Compass.ErpApp.Desktop.Applications.DynamicForms.CenterRegion();
|
17
|
+
if(!win){
|
18
|
+
win = desktop.createWindow({
|
19
|
+
id: 'dynamic_forms',
|
20
|
+
title:'Dynamic Forms',
|
21
|
+
width:1150,
|
22
|
+
height:550,
|
23
|
+
iconCls: 'icon-document',
|
24
|
+
shim:false,
|
25
|
+
animCollapse:false,
|
26
|
+
constrainHeader:true,
|
27
|
+
layout: 'border',
|
28
|
+
items:[this.centerRegion,{
|
29
|
+
xtype:'dynamic_forms_westregion',
|
30
|
+
centerRegion:this.centerRegion,
|
31
|
+
module:this
|
32
|
+
}]
|
33
|
+
});
|
34
|
+
}
|
35
|
+
win.show();
|
36
|
+
}
|
37
|
+
});
|