e9_crm 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. data/.gitignore +3 -0
  2. data/Gemfile +3 -0
  3. data/Gemfile.lock +105 -0
  4. data/README.md +31 -0
  5. data/Rakefile +2 -0
  6. data/app/controllers/e9_crm/advertising_campaigns_controller.rb +3 -0
  7. data/app/controllers/e9_crm/affiliate_campaigns_controller.rb +3 -0
  8. data/app/controllers/e9_crm/base_controller.rb +5 -0
  9. data/app/controllers/e9_crm/campaign_groups_controller.rb +3 -0
  10. data/app/controllers/e9_crm/campaigns_controller.rb +4 -0
  11. data/app/controllers/e9_crm/companies_controller.rb +3 -0
  12. data/app/controllers/e9_crm/contact_emails_controller.rb +38 -0
  13. data/app/controllers/e9_crm/contact_merges_controller.rb +26 -0
  14. data/app/controllers/e9_crm/contacts_controller.rb +46 -0
  15. data/app/controllers/e9_crm/dated_costs_controller.rb +4 -0
  16. data/app/controllers/e9_crm/deals_controller.rb +19 -0
  17. data/app/controllers/e9_crm/email_campaigns_controller.rb +3 -0
  18. data/app/controllers/e9_crm/email_templates.controller.rb +3 -0
  19. data/app/controllers/e9_crm/menu_options_controller.rb +26 -0
  20. data/app/controllers/e9_crm/offers_controller.rb +3 -0
  21. data/app/controllers/e9_crm/page_views_controller.rb +20 -0
  22. data/app/controllers/e9_crm/record_attributes_controller.rb +3 -0
  23. data/app/controllers/e9_crm/reports_controller.rb +2 -0
  24. data/app/controllers/e9_crm/resources_controller.rb +43 -0
  25. data/app/controllers/e9_crm/sales_campaigns_controller.rb +3 -0
  26. data/app/helpers/e9_crm/base_helper.rb +77 -0
  27. data/app/helpers/e9_crm/campaigns_helper.rb +14 -0
  28. data/app/helpers/e9_crm/contact_merges_helper.rb +17 -0
  29. data/app/helpers/e9_crm/contacts_helper.rb +27 -0
  30. data/app/helpers/e9_crm/deals_helper.rb +15 -0
  31. data/app/helpers/e9_crm/menu_options_helper.rb +11 -0
  32. data/app/helpers/e9_crm/page_views_helper.rb +2 -0
  33. data/app/models/address_attribute.rb +4 -0
  34. data/app/models/advertising_campaign.rb +15 -0
  35. data/app/models/affiliate.rb +4 -0
  36. data/app/models/affiliate_campaign.rb +15 -0
  37. data/app/models/campaign.rb +34 -0
  38. data/app/models/campaign_group.rb +5 -0
  39. data/app/models/company.rb +4 -0
  40. data/app/models/contact.rb +258 -0
  41. data/app/models/contact_email.rb +49 -0
  42. data/app/models/dated_cost.rb +9 -0
  43. data/app/models/deal.rb +83 -0
  44. data/app/models/email_campaign.rb +13 -0
  45. data/app/models/email_template.rb +7 -0
  46. data/app/models/instant_messaging_handle_attribute.rb +4 -0
  47. data/app/models/menu_option.rb +33 -0
  48. data/app/models/offer.rb +50 -0
  49. data/app/models/page_view.rb +80 -0
  50. data/app/models/phone_number_attribute.rb +4 -0
  51. data/app/models/record_attribute.rb +41 -0
  52. data/app/models/sales_campaign.rb +15 -0
  53. data/app/models/sales_person.rb +4 -0
  54. data/app/models/tracking_cookie.rb +61 -0
  55. data/app/models/website_attribute.rb +4 -0
  56. data/app/observers/deal_observer.rb +11 -0
  57. data/app/uploaders/file_uploader.rb +34 -0
  58. data/app/views/e9_crm/campaigns/_form_inner.html.haml +5 -0
  59. data/app/views/e9_crm/contact_emails/_form.html.haml +7 -0
  60. data/app/views/e9_crm/contact_emails/_form_inner.html.haml +11 -0
  61. data/app/views/e9_crm/contact_emails/destroy.js.erb +3 -0
  62. data/app/views/e9_crm/contact_emails/send_email.js.erb +1 -0
  63. data/app/views/e9_crm/contact_merges/_field.html.haml +10 -0
  64. data/app/views/e9_crm/contact_merges/_form.html.haml +10 -0
  65. data/app/views/e9_crm/contact_merges/new.html.haml +2 -0
  66. data/app/views/e9_crm/contacts/_details.html.haml +22 -0
  67. data/app/views/e9_crm/contacts/_form_inner.html.haml +51 -0
  68. data/app/views/e9_crm/contacts/_header.html.haml +19 -0
  69. data/app/views/e9_crm/contacts/_tag_table.html.haml +15 -0
  70. data/app/views/e9_crm/contacts/index.html.haml +13 -0
  71. data/app/views/e9_crm/contacts/index.js.erb +5 -0
  72. data/app/views/e9_crm/contacts/merge.html.haml +1 -0
  73. data/app/views/e9_crm/contacts/templates.js.erb +1 -0
  74. data/app/views/e9_crm/deals/_form_inner.html.haml +5 -0
  75. data/app/views/e9_crm/deals/_header.html.haml +0 -0
  76. data/app/views/e9_crm/deals/leads.html.haml +13 -0
  77. data/app/views/e9_crm/email_templates/_form_inner.html.haml +9 -0
  78. data/app/views/e9_crm/menu_options/_form_inner.html.haml +6 -0
  79. data/app/views/e9_crm/menu_options/_header.html.haml +8 -0
  80. data/app/views/e9_crm/offers/_form.html.haml +7 -0
  81. data/app/views/e9_crm/offers/_form_inner.html.haml +42 -0
  82. data/app/views/e9_crm/offers/_form_inner.html.haml.bak +43 -0
  83. data/app/views/e9_crm/page_views/_table.html.haml +25 -0
  84. data/app/views/e9_crm/record_attributes/_address_attribute.html.haml +5 -0
  85. data/app/views/e9_crm/record_attributes/_instant_messaging_handle_attribute.html.haml +5 -0
  86. data/app/views/e9_crm/record_attributes/_phone_number_attribute.html.haml +5 -0
  87. data/app/views/e9_crm/record_attributes/_record_attribute.html.haml +10 -0
  88. data/app/views/e9_crm/record_attributes/_templates.js.erb +12 -0
  89. data/app/views/e9_crm/record_attributes/_user.html.haml +23 -0
  90. data/app/views/e9_crm/record_attributes/_website_attribute.html.haml +5 -0
  91. data/app/views/e9_crm/resources/_footer.html.haml +1 -0
  92. data/app/views/e9_crm/resources/_form.html.haml +7 -0
  93. data/app/views/e9_crm/resources/_form_inner.html.haml +5 -0
  94. data/app/views/e9_crm/resources/_header.html.haml +0 -0
  95. data/app/views/e9_crm/resources/_table.html.haml +21 -0
  96. data/app/views/e9_crm/resources/create.js.erb +6 -0
  97. data/app/views/e9_crm/resources/destroy.js.erb +3 -0
  98. data/app/views/e9_crm/resources/edit.html.haml +2 -0
  99. data/app/views/e9_crm/resources/index.html.haml +13 -0
  100. data/app/views/e9_crm/resources/index.js.erb +1 -0
  101. data/app/views/e9_crm/resources/new.html.haml +2 -0
  102. data/app/views/e9_crm/resources/show.html.haml +2 -0
  103. data/app/views/e9_crm/resources/update.js.erb +5 -0
  104. data/config/initializers/inflections.rb +3 -0
  105. data/config/locales/e9.en.yml +28 -0
  106. data/config/locales/en.yml +63 -0
  107. data/config/routes.rb +61 -0
  108. data/e9_crm.gemspec +29 -0
  109. data/lib/e9_crm/model.rb +63 -0
  110. data/lib/e9_crm/rails_extensions.rb +98 -0
  111. data/lib/e9_crm/tracking_controller.rb +78 -0
  112. data/lib/e9_crm/version.rb +3 -0
  113. data/lib/e9_crm.rb +59 -0
  114. data/lib/generators/e9_crm/install_generator.rb +32 -0
  115. data/lib/generators/e9_crm/templates/create_e9_crm_tables.rb +107 -0
  116. data/lib/generators/e9_crm/templates/initializer.rb +4 -0
  117. data/lib/generators/e9_crm/templates/javascript.js +187 -0
  118. data/test/functional/e9_crm/campaign_types_controller_test.rb +49 -0
  119. data/test/functional/home_controller_test.rb +8 -0
  120. metadata +283 -0
@@ -0,0 +1,187 @@
1
+ jQuery(function($) {
2
+ var selector_prefix = 'body.controller-e9-crm-contacts',
3
+ $selector = $(selector_prefix);
4
+
5
+ $.fn.exclusiveCheck = function() {
6
+ var selector = $(this);
7
+ return this.each(function(i) {
8
+ $(this).click(function(e) {
9
+ var clicked = this;
10
+ if (this.checked) {
11
+ selector.each(function() {
12
+ if (this != clicked) this.checked = false;
13
+ });
14
+ }
15
+ });
16
+ });
17
+ }
18
+
19
+ /*
20
+ * A function might exist for this already, but basically this stores the query variables
21
+ * in a hash when the page loads for later re-use/modification.
22
+ */
23
+ $.query = (function() {
24
+ var qs = document.location.search;
25
+
26
+ if (!qs.length) return {};
27
+
28
+ var params = {},
29
+ regex = /[?&]?([^=]+)=([^&]*)/g,
30
+ tokens, key, val;
31
+
32
+ qs = qs.split('+').join(' ');
33
+
34
+ while (tokens = regex.exec(qs)) {
35
+ key = decodeURIComponent(tokens[1]);
36
+ val = decodeURIComponent(tokens[2]);
37
+
38
+ if(/\[\]$/.test(key)) {
39
+ if (!params[key]) params[key] = [];
40
+ params[key].push(val);
41
+ } else {
42
+ params[key] = val;
43
+ }
44
+ }
45
+
46
+ return params;
47
+ })();
48
+
49
+ /*
50
+ * The status of "primary" for a User login is stored on the individual records, but must be exlcusive in
51
+ * the scope of the Contact (only one User may be primary).
52
+ *
53
+ * NOTE This function is called initially, then after adding new nested associations to the page.
54
+ */
55
+ var exclusifyEmailRadios;
56
+ (exclusifyEmailRadios = function() {
57
+ $('.nested-association input[type=radio][name$="[primary]"]', $(selector_prefix)).exclusiveCheck();
58
+ })();
59
+
60
+ /**
61
+ * Adds a new nested assocation. Depends on the nested association
62
+ * js templates being loaded.
63
+ */
64
+ $('a.add-nested-association').click(function(e) {
65
+ e.preventDefault();
66
+
67
+ var $this = $(this),
68
+ $parent = $this.closest('.nested-associations'),
69
+ template,
70
+ index;
71
+
72
+ try {
73
+ template = E9CRM.js_templates[this.getAttribute('data-association')];
74
+ } catch(e) { return }
75
+
76
+ template = template.replace(
77
+ new RegExp(E9CRM.js_templates.start_child_index, 'g'),
78
+ ++E9CRM.js_templates.current_child_index
79
+ );
80
+
81
+ $(template).appendTo($parent);
82
+
83
+ exclusifyEmailRadios();
84
+ });
85
+
86
+ /**
87
+ * Effectively destroys an added nested association, removing the container
88
+ * the association is not persisted, or hiding it and setting the _destroy
89
+ * parameter for the association if it is.
90
+ */
91
+ $('a.destroy-nested-association').live('click', function(e) {
92
+ e.preventDefault();
93
+
94
+ var $parent = $(this).closest('.nested-association').hide(),
95
+ $destro = $parent.find('input[id$=__destroy]');
96
+
97
+ if ($destro.length) {
98
+ $destro.val('1');
99
+ } else {
100
+ $parent.remove();
101
+ }
102
+ });
103
+
104
+ var filter_contacts = function(data) {
105
+ $.ajax({
106
+ dataType: 'script',
107
+ url: window.location.pathname,
108
+ data: data || $.param($.query)
109
+ });
110
+ }
111
+
112
+ $('#contact_email_form', $selector).live('submit', function(e) {
113
+ var $f = $(this);
114
+
115
+ if ($f.attr('data-count') == '0') {
116
+ alert($f.attr('data-empty'));
117
+ $f.undisable();
118
+ return false;
119
+ }
120
+ });
121
+
122
+ $.fn.undisable = function() {
123
+ $('input[type=submit]', this).removeAttr('disabled').removeClass('ui-state-hover').blur();
124
+ }
125
+
126
+ $('#contact_newsletter_form', $selector).live('submit', function(e) {
127
+ e.preventDefault();
128
+
129
+ var $f = $(this);
130
+
131
+ if (!$('select', this).children().length) {
132
+ $f.undisable();
133
+ return false;
134
+ }
135
+
136
+ if ($f.attr('data-count') == '0') {
137
+ alert($f.attr('data-empty'));
138
+ $f.undisable();
139
+ return false;
140
+ }
141
+
142
+ if (!confirm($f.attr('data-confirm'))) {
143
+ $f.undisable();
144
+ return false;
145
+ }
146
+
147
+ $f.attr('action', function(i, val) {
148
+ return val.replace(/__ID__/, $('#eid', $f).val());
149
+ });
150
+
151
+ $f.callRemote();
152
+ });
153
+
154
+ $('.tag-table', $selector).change(function(e) {
155
+ $.extend($.query, {
156
+ 'tagged[]': $.makeArray($(this).find('input[name="tagged[]"]').map(function(i, el) { return $(el).attr('checked') ? $(el).val() : null }))
157
+ });
158
+
159
+ filter_contacts();
160
+ });
161
+
162
+ $('form#contact_search_form', $(selector_prefix)).live('submit', function(e) {
163
+ e.preventDefault();
164
+
165
+ $.extend($.query, {
166
+ 'search': $(this).find('input[name=search]').val()
167
+ });
168
+
169
+ filter_contacts();
170
+ });
171
+
172
+ $('input#contact_search_clear', $(selector_prefix)).live('click', function(e) {
173
+
174
+ $(selector_prefix)
175
+ .find('form#contact_search_form input[name=search]', $selector).val('').end()
176
+ .find('.tag-table input[name="tagged[]"]', $selector).attr('checked', false)
177
+ ;
178
+
179
+ $.query = {};
180
+
181
+ filter_contacts();
182
+ });
183
+
184
+ //$('#menu_option_key_select_form select').change(function(e) {
185
+ //$(this).submit();
186
+ //});
187
+ });
@@ -0,0 +1,49 @@
1
+ require 'test_helper'
2
+
3
+ class E9Crm::CampaignTypesControllerTest < ActionController::TestCase
4
+ setup do
5
+ @e9_crm_campaign_type = e9_crm_campaign_types(:one)
6
+ end
7
+
8
+ test "should get index" do
9
+ get :index
10
+ assert_response :success
11
+ assert_not_nil assigns(:e9_crm_campaign_types)
12
+ end
13
+
14
+ test "should get new" do
15
+ get :new
16
+ assert_response :success
17
+ end
18
+
19
+ test "should create e9_crm_campaign_type" do
20
+ assert_difference('E9Crm::CampaignType.count') do
21
+ post :create, :e9_crm_campaign_type => @e9_crm_campaign_type.attributes
22
+ end
23
+
24
+ assert_redirected_to e9_crm_campaign_type_path(assigns(:e9_crm_campaign_type))
25
+ end
26
+
27
+ test "should show e9_crm_campaign_type" do
28
+ get :show, :id => @e9_crm_campaign_type.to_param
29
+ assert_response :success
30
+ end
31
+
32
+ test "should get edit" do
33
+ get :edit, :id => @e9_crm_campaign_type.to_param
34
+ assert_response :success
35
+ end
36
+
37
+ test "should update e9_crm_campaign_type" do
38
+ put :update, :id => @e9_crm_campaign_type.to_param, :e9_crm_campaign_type => @e9_crm_campaign_type.attributes
39
+ assert_redirected_to e9_crm_campaign_type_path(assigns(:e9_crm_campaign_type))
40
+ end
41
+
42
+ test "should destroy e9_crm_campaign_type" do
43
+ assert_difference('E9Crm::CampaignType.count', -1) do
44
+ delete :destroy, :id => @e9_crm_campaign_type.to_param
45
+ end
46
+
47
+ assert_redirected_to e9_crm_campaign_types_path
48
+ end
49
+ end
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ class HomeControllerTest < ActionController::TestCase
4
+ # Replace this with your real tests.
5
+ test "the truth" do
6
+ assert true
7
+ end
8
+ end
metadata ADDED
@@ -0,0 +1,283 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: e9_crm
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.1
6
+ platform: ruby
7
+ authors:
8
+ - Travis Cox
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-05-12 00:00:00 -04:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rails
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: 3.0.0
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: inherited_resources
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: 1.1.2
36
+ type: :runtime
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: has_scope
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: money
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ type: :runtime
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: e9_rails
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 0.0.11
69
+ type: :runtime
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: e9_tags
73
+ prerelease: false
74
+ requirement: &id006 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ version: 0.0.11
80
+ type: :runtime
81
+ version_requirements: *id006
82
+ - !ruby/object:Gem::Dependency
83
+ name: will_paginate
84
+ prerelease: false
85
+ requirement: &id007 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: "0"
91
+ type: :runtime
92
+ version_requirements: *id007
93
+ description: |
94
+ CRM Plugin for the e9 CMS
95
+ =========================
96
+
97
+ It should be noted that while this plugin is intended for use in the
98
+ e9 CMS, it does neither includes nor requires it.
99
+
100
+ To use, add as a gem and install by running:
101
+
102
+ rails g e9_crm:install
103
+
104
+ Then modify the installed initializer as per your app, including
105
+ the controller module in your desired controllers, with the final
106
+ result looking something like this:
107
+
108
+ require 'e9_crm'
109
+
110
+ User.send :include, E9Crm::Backend::ActiveRecord
111
+
112
+ Rails.configuration.after_initialize do
113
+ [
114
+ MyFirstTrackedController,
115
+ MySecondTrackedController
116
+ ].each {|c| c.send(:include, E9Crm::TrackingController) }
117
+ end
118
+
119
+ NOTE: A few assumptions are made:
120
+ ---------------------------------
121
+
122
+ 1. Your app has a "User" model
123
+ 2. Your app has a controller method #current_user to return the
124
+ currently logged in user.
125
+
126
+ email: travis@e9digital.com
127
+ executables: []
128
+
129
+ extensions: []
130
+
131
+ extra_rdoc_files: []
132
+
133
+ files:
134
+ - .gitignore
135
+ - Gemfile
136
+ - Gemfile.lock
137
+ - README.md
138
+ - Rakefile
139
+ - app/controllers/e9_crm/advertising_campaigns_controller.rb
140
+ - app/controllers/e9_crm/affiliate_campaigns_controller.rb
141
+ - app/controllers/e9_crm/base_controller.rb
142
+ - app/controllers/e9_crm/campaign_groups_controller.rb
143
+ - app/controllers/e9_crm/campaigns_controller.rb
144
+ - app/controllers/e9_crm/companies_controller.rb
145
+ - app/controllers/e9_crm/contact_emails_controller.rb
146
+ - app/controllers/e9_crm/contact_merges_controller.rb
147
+ - app/controllers/e9_crm/contacts_controller.rb
148
+ - app/controllers/e9_crm/dated_costs_controller.rb
149
+ - app/controllers/e9_crm/deals_controller.rb
150
+ - app/controllers/e9_crm/email_campaigns_controller.rb
151
+ - app/controllers/e9_crm/email_templates.controller.rb
152
+ - app/controllers/e9_crm/menu_options_controller.rb
153
+ - app/controllers/e9_crm/offers_controller.rb
154
+ - app/controllers/e9_crm/page_views_controller.rb
155
+ - app/controllers/e9_crm/record_attributes_controller.rb
156
+ - app/controllers/e9_crm/reports_controller.rb
157
+ - app/controllers/e9_crm/resources_controller.rb
158
+ - app/controllers/e9_crm/sales_campaigns_controller.rb
159
+ - app/helpers/e9_crm/base_helper.rb
160
+ - app/helpers/e9_crm/campaigns_helper.rb
161
+ - app/helpers/e9_crm/contact_merges_helper.rb
162
+ - app/helpers/e9_crm/contacts_helper.rb
163
+ - app/helpers/e9_crm/deals_helper.rb
164
+ - app/helpers/e9_crm/menu_options_helper.rb
165
+ - app/helpers/e9_crm/page_views_helper.rb
166
+ - app/models/address_attribute.rb
167
+ - app/models/advertising_campaign.rb
168
+ - app/models/affiliate.rb
169
+ - app/models/affiliate_campaign.rb
170
+ - app/models/campaign.rb
171
+ - app/models/campaign_group.rb
172
+ - app/models/company.rb
173
+ - app/models/contact.rb
174
+ - app/models/contact_email.rb
175
+ - app/models/dated_cost.rb
176
+ - app/models/deal.rb
177
+ - app/models/email_campaign.rb
178
+ - app/models/email_template.rb
179
+ - app/models/instant_messaging_handle_attribute.rb
180
+ - app/models/menu_option.rb
181
+ - app/models/offer.rb
182
+ - app/models/page_view.rb
183
+ - app/models/phone_number_attribute.rb
184
+ - app/models/record_attribute.rb
185
+ - app/models/sales_campaign.rb
186
+ - app/models/sales_person.rb
187
+ - app/models/tracking_cookie.rb
188
+ - app/models/website_attribute.rb
189
+ - app/observers/deal_observer.rb
190
+ - app/uploaders/file_uploader.rb
191
+ - app/views/e9_crm/campaigns/_form_inner.html.haml
192
+ - app/views/e9_crm/contact_emails/_form.html.haml
193
+ - app/views/e9_crm/contact_emails/_form_inner.html.haml
194
+ - app/views/e9_crm/contact_emails/destroy.js.erb
195
+ - app/views/e9_crm/contact_emails/send_email.js.erb
196
+ - app/views/e9_crm/contact_merges/_field.html.haml
197
+ - app/views/e9_crm/contact_merges/_form.html.haml
198
+ - app/views/e9_crm/contact_merges/new.html.haml
199
+ - app/views/e9_crm/contacts/_details.html.haml
200
+ - app/views/e9_crm/contacts/_form_inner.html.haml
201
+ - app/views/e9_crm/contacts/_header.html.haml
202
+ - app/views/e9_crm/contacts/_tag_table.html.haml
203
+ - app/views/e9_crm/contacts/index.html.haml
204
+ - app/views/e9_crm/contacts/index.js.erb
205
+ - app/views/e9_crm/contacts/merge.html.haml
206
+ - app/views/e9_crm/contacts/templates.js.erb
207
+ - app/views/e9_crm/deals/_form_inner.html.haml
208
+ - app/views/e9_crm/deals/_header.html.haml
209
+ - app/views/e9_crm/deals/leads.html.haml
210
+ - app/views/e9_crm/email_templates/_form_inner.html.haml
211
+ - app/views/e9_crm/menu_options/_form_inner.html.haml
212
+ - app/views/e9_crm/menu_options/_header.html.haml
213
+ - app/views/e9_crm/offers/_form.html.haml
214
+ - app/views/e9_crm/offers/_form_inner.html.haml
215
+ - app/views/e9_crm/offers/_form_inner.html.haml.bak
216
+ - app/views/e9_crm/page_views/_table.html.haml
217
+ - app/views/e9_crm/record_attributes/_address_attribute.html.haml
218
+ - app/views/e9_crm/record_attributes/_instant_messaging_handle_attribute.html.haml
219
+ - app/views/e9_crm/record_attributes/_phone_number_attribute.html.haml
220
+ - app/views/e9_crm/record_attributes/_record_attribute.html.haml
221
+ - app/views/e9_crm/record_attributes/_templates.js.erb
222
+ - app/views/e9_crm/record_attributes/_user.html.haml
223
+ - app/views/e9_crm/record_attributes/_website_attribute.html.haml
224
+ - app/views/e9_crm/resources/_footer.html.haml
225
+ - app/views/e9_crm/resources/_form.html.haml
226
+ - app/views/e9_crm/resources/_form_inner.html.haml
227
+ - app/views/e9_crm/resources/_header.html.haml
228
+ - app/views/e9_crm/resources/_table.html.haml
229
+ - app/views/e9_crm/resources/create.js.erb
230
+ - app/views/e9_crm/resources/destroy.js.erb
231
+ - app/views/e9_crm/resources/edit.html.haml
232
+ - app/views/e9_crm/resources/index.html.haml
233
+ - app/views/e9_crm/resources/index.js.erb
234
+ - app/views/e9_crm/resources/new.html.haml
235
+ - app/views/e9_crm/resources/show.html.haml
236
+ - app/views/e9_crm/resources/update.js.erb
237
+ - config/initializers/inflections.rb
238
+ - config/locales/e9.en.yml
239
+ - config/locales/en.yml
240
+ - config/routes.rb
241
+ - e9_crm.gemspec
242
+ - lib/e9_crm.rb
243
+ - lib/e9_crm/model.rb
244
+ - lib/e9_crm/rails_extensions.rb
245
+ - lib/e9_crm/tracking_controller.rb
246
+ - lib/e9_crm/version.rb
247
+ - lib/generators/e9_crm/install_generator.rb
248
+ - lib/generators/e9_crm/templates/create_e9_crm_tables.rb
249
+ - lib/generators/e9_crm/templates/initializer.rb
250
+ - lib/generators/e9_crm/templates/javascript.js
251
+ - test/functional/e9_crm/campaign_types_controller_test.rb
252
+ - test/functional/home_controller_test.rb
253
+ has_rdoc: true
254
+ homepage: http://www.e9digital.com
255
+ licenses: []
256
+
257
+ post_install_message:
258
+ rdoc_options: []
259
+
260
+ require_paths:
261
+ - lib
262
+ required_ruby_version: !ruby/object:Gem::Requirement
263
+ none: false
264
+ requirements:
265
+ - - ">="
266
+ - !ruby/object:Gem::Version
267
+ version: "0"
268
+ required_rubygems_version: !ruby/object:Gem::Requirement
269
+ none: false
270
+ requirements:
271
+ - - ">="
272
+ - !ruby/object:Gem::Version
273
+ version: "0"
274
+ requirements: []
275
+
276
+ rubyforge_project: e9_crm
277
+ rubygems_version: 1.6.2
278
+ signing_key:
279
+ specification_version: 3
280
+ summary: CRM engine plugin for the e9 CMS
281
+ test_files:
282
+ - test/functional/e9_crm/campaign_types_controller_test.rb
283
+ - test/functional/home_controller_test.rb