fat_free_crm 0.11.4 → 0.12.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.
Potentially problematic release.
This version of fat_free_crm might be problematic. Click here for more details.
- checksums.yaml +15 -0
- data/.gitignore +2 -1
- data/.travis.yml +10 -17
- data/CHANGELOG +57 -4
- data/CONTRIBUTORS +6 -4
- data/Gemfile +24 -21
- data/Gemfile.lock +142 -111
- data/Guardfile +11 -31
- data/MIT-LICENSE +21 -0
- data/README.md +30 -39
- data/app/assets/javascripts/admin/fields.js.coffee +5 -18
- data/app/assets/javascripts/application.js.erb +3 -14
- data/app/assets/javascripts/crm.js +3 -15
- data/app/assets/javascripts/crm_chosen.js.coffee +21 -4
- data/app/assets/javascripts/crm_classes.js +3 -15
- data/app/assets/javascripts/crm_fields.js +3 -15
- data/app/assets/javascripts/crm_loginout.js +3 -15
- data/app/assets/javascripts/crm_textarea_autocomplete.js +3 -15
- data/app/assets/javascripts/datepicker.js.coffee +5 -0
- data/app/assets/javascripts/format_buttons.js.coffee +5 -0
- data/app/assets/javascripts/groups.js.coffee +5 -0
- data/app/assets/javascripts/jquery-noconflict.js +3 -15
- data/app/assets/javascripts/lists.js.coffee +6 -0
- data/app/assets/javascripts/search.js.coffee +5 -0
- data/app/assets/stylesheets/admin/fields.css.scss +10 -0
- data/app/assets/stylesheets/advanced_search.css.scss +5 -0
- data/app/assets/stylesheets/application.css.erb +3 -14
- data/app/assets/stylesheets/base.scss +3 -15
- data/app/assets/stylesheets/common.scss +3 -15
- data/app/assets/stylesheets/ffcrm_chosen.scss +5 -0
- data/app/assets/stylesheets/fields.scss +5 -0
- data/app/assets/stylesheets/format_buttons.css.scss +5 -0
- data/app/assets/stylesheets/groups.css.scss +5 -0
- data/app/assets/stylesheets/header.scss +3 -15
- data/app/assets/stylesheets/index_headers.css.scss +5 -0
- data/app/assets/stylesheets/lists.css.scss +5 -0
- data/app/assets/stylesheets/print.css.scss +3 -15
- data/app/assets/stylesheets/rails.scss +4 -16
- data/app/assets/stylesheets/safari.scss +3 -15
- data/app/assets/stylesheets/textarea_autocomplete.scss +5 -0
- data/app/controllers/admin/application_controller.rb +3 -15
- data/app/controllers/admin/field_groups_controller.rb +3 -15
- data/app/controllers/admin/fields_controller.rb +3 -15
- data/app/controllers/admin/groups_controller.rb +3 -15
- data/app/controllers/admin/plugins_controller.rb +3 -15
- data/app/controllers/admin/settings_controller.rb +3 -15
- data/app/controllers/admin/tags_controller.rb +3 -15
- data/app/controllers/admin/users_controller.rb +3 -15
- data/app/controllers/application_controller.rb +3 -15
- data/app/controllers/authentications_controller.rb +3 -15
- data/app/controllers/comments_controller.rb +6 -16
- data/app/controllers/emails_controller.rb +3 -15
- data/app/controllers/entities/accounts_controller.rb +4 -15
- data/app/controllers/entities/campaigns_controller.rb +4 -15
- data/app/controllers/entities/contacts_controller.rb +4 -15
- data/app/controllers/entities/leads_controller.rb +4 -15
- data/app/controllers/entities/opportunities_controller.rb +6 -16
- data/app/controllers/entities_controller.rb +3 -15
- data/app/controllers/home_controller.rb +3 -15
- data/app/controllers/lists_controller.rb +3 -15
- data/app/controllers/passwords_controller.rb +3 -15
- data/app/controllers/tasks_controller.rb +5 -16
- data/app/controllers/users_controller.rb +3 -15
- data/app/helpers/accounts_helper.rb +7 -17
- data/app/helpers/addresses_helper.rb +3 -15
- data/app/helpers/admin/application_helper.rb +3 -15
- data/app/helpers/admin/field_groups_helper.rb +3 -15
- data/app/helpers/admin/fields_helper.rb +3 -15
- data/app/helpers/admin/plugins_helper.rb +3 -15
- data/app/helpers/admin/settings_helper.rb +3 -15
- data/app/helpers/admin/tags_helper.rb +3 -15
- data/app/helpers/admin/users_helper.rb +3 -15
- data/app/helpers/application_helper.rb +12 -18
- data/app/helpers/authentications_helper.rb +3 -15
- data/app/helpers/campaigns_helper.rb +3 -15
- data/app/helpers/comments_helper.rb +3 -15
- data/app/helpers/contacts_helper.rb +3 -15
- data/app/helpers/emails_helper.rb +3 -15
- data/app/helpers/fields_helper.rb +3 -15
- data/app/helpers/groups_helper.rb +5 -0
- data/app/helpers/home_helper.rb +3 -15
- data/app/helpers/leads_helper.rb +3 -15
- data/app/helpers/lists_helper.rb +3 -15
- data/app/helpers/opportunities_helper.rb +3 -15
- data/app/helpers/passwords_helper.rb +3 -15
- data/app/helpers/tags_helper.rb +3 -15
- data/app/helpers/tasks_helper.rb +3 -15
- data/app/helpers/users_helper.rb +3 -15
- data/app/helpers/versions_helper.rb +3 -15
- data/app/inputs/{datepair_input.rb → date_pair_input.rb} +10 -21
- data/app/inputs/date_time_input.rb +13 -15
- data/app/inputs/datetime_pair_input.rb +26 -0
- data/app/inputs/text_input.rb +5 -15
- data/app/mailers/dropbox_mailer.rb +3 -15
- data/app/mailers/subscription_mailer.rb +9 -16
- data/app/mailers/user_mailer.rb +3 -15
- data/app/models/entities/account.rb +7 -17
- data/app/models/entities/account_contact.rb +6 -17
- data/app/models/entities/account_opportunity.rb +5 -15
- data/app/models/entities/campaign.rb +5 -15
- data/app/models/entities/contact.rb +15 -25
- data/app/models/entities/contact_opportunity.rb +5 -15
- data/app/models/entities/lead.rb +6 -16
- data/app/models/entities/opportunity.rb +6 -16
- data/app/models/fields/core_field.rb +5 -16
- data/app/models/fields/custom_field.rb +6 -16
- data/app/models/fields/custom_field_date_pair.rb +6 -21
- data/app/models/fields/custom_field_datetime_pair.rb +5 -19
- data/app/models/fields/custom_field_pair.rb +6 -16
- data/app/models/fields/field.rb +6 -17
- data/app/models/fields/field_group.rb +7 -17
- data/app/models/list.rb +4 -15
- data/app/models/observers/entity_observer.rb +5 -0
- data/app/models/observers/lead_observer.rb +3 -15
- data/app/models/observers/opportunity_observer.rb +3 -15
- data/app/models/observers/task_observer.rb +3 -15
- data/app/models/polymorphic/address.rb +5 -16
- data/app/models/polymorphic/avatar.rb +5 -16
- data/app/models/polymorphic/comment.rb +5 -15
- data/app/models/polymorphic/email.rb +5 -15
- data/app/models/polymorphic/tag.rb +6 -16
- data/app/models/polymorphic/tagging.rb +4 -15
- data/app/models/polymorphic/task.rb +6 -16
- data/app/models/setting.rb +5 -23
- data/app/models/users/ability.rb +9 -2
- data/app/models/users/authentication.rb +5 -16
- data/app/models/users/group.rb +7 -0
- data/app/models/users/permission.rb +5 -16
- data/app/models/users/preference.rb +4 -15
- data/app/models/users/user.rb +10 -19
- data/app/views/admin/fields/index.html.haml +2 -0
- data/app/views/comments/_edit.html.haml +0 -1
- data/app/views/comments/_new.html.haml +0 -1
- data/app/views/contacts/_contacts.html.haml +1 -1
- data/app/views/contacts/_sidebar_show.html.haml +19 -0
- data/app/views/contacts/_top_section.html.haml +3 -2
- data/app/views/entities/_search.html.haml +4 -3
- data/app/views/entities/contacts.js.rjs +1 -1
- data/app/views/entities/leads.js.rjs +1 -1
- data/app/views/entities/opportunities.js.rjs +1 -1
- data/app/views/fields/_edit_custom_field_group.html.haml +1 -1
- data/app/views/home/_task.html.haml +3 -1
- data/app/views/layouts/_footer.html.haml +1 -1
- data/app/views/leads/_leads.html.haml +1 -1
- data/app/views/leads/_sidebar_show.html.haml +7 -0
- data/app/views/leads/_top_section.html.haml +3 -2
- data/app/views/lists/_sidebar.html.haml +5 -5
- data/app/views/opportunities/_opportunities.html.haml +1 -1
- data/app/views/versions/_versions.html.haml +1 -1
- data/config/application.rb +11 -3
- data/config/boot.rb +5 -1
- data/config/deploy.example.rb +5 -0
- data/config/environment.rb +5 -0
- data/config/environments/development.rb +5 -0
- data/config/environments/production.rb +5 -0
- data/config/environments/staging.rb +5 -0
- data/config/environments/test.rb +6 -1
- data/config/initializers/action_mailer.rb +5 -0
- data/config/initializers/authlogic.rb +5 -0
- data/config/initializers/constants.rb +5 -0
- data/config/initializers/gravatar.rb +5 -0
- data/config/initializers/locale.rb +3 -15
- data/config/initializers/mime_types.rb +5 -0
- data/config/initializers/paginate_arrays.rb +5 -0
- data/config/initializers/paper_trail.rb +5 -0
- data/config/initializers/ransack.rb +6 -1
- data/config/initializers/relative_url_root.rb +3 -15
- data/config/initializers/sass.rb +5 -0
- data/config/initializers/secret_token.rb +6 -1
- data/config/initializers/simple_form.rb +5 -0
- data/config/initializers/views.rb +5 -0
- data/config/locales/de_fat_free_crm.yml +125 -7
- data/config/locales/en-US_fat_free_crm.yml +7 -2
- data/config/locales/th.rb +5 -0
- data/config/routes.rb +5 -0
- data/config/settings.default.yml +10 -18
- data/config/unicorn.rb +5 -0
- data/fat_free_crm.gemspec +6 -4
- data/lib/development_tasks/gem.rake +3 -15
- data/lib/development_tasks/license.rake +12 -32
- data/lib/development_tasks/rdoc.rake +3 -15
- data/lib/development_tasks/rspec.rake +3 -15
- data/lib/fat_free_crm.rb +6 -16
- data/lib/fat_free_crm/callback.rb +3 -15
- data/lib/fat_free_crm/comment_extensions.rb +5 -0
- data/lib/fat_free_crm/core_ext.rb +3 -15
- data/lib/fat_free_crm/core_ext/nil.rb +3 -15
- data/lib/fat_free_crm/core_ext/string.rb +3 -15
- data/lib/fat_free_crm/custom_fields.rb +12 -0
- data/lib/fat_free_crm/engine.rb +3 -15
- data/lib/fat_free_crm/errors.rb +3 -15
- data/lib/fat_free_crm/exceptions.rb +3 -15
- data/lib/fat_free_crm/export_csv.rb +35 -0
- data/lib/fat_free_crm/exportable.rb +3 -15
- data/lib/fat_free_crm/fields.rb +5 -17
- data/lib/fat_free_crm/gem_dependencies.rb +3 -15
- data/lib/fat_free_crm/gem_ext.rb +3 -15
- data/lib/fat_free_crm/gem_ext/action_controller/base.rb +3 -15
- data/lib/fat_free_crm/gem_ext/active_model/serializers/xml/serializer/attribute.rb +3 -15
- data/lib/fat_free_crm/gem_ext/active_record/schema_dumper.rb +3 -15
- data/lib/fat_free_crm/gem_ext/active_support/buffered_logger.rb +3 -15
- data/lib/fat_free_crm/gem_ext/authlogic/session/cookies.rb +3 -15
- data/lib/fat_free_crm/gem_ext/rails/engine.rb +3 -15
- data/lib/fat_free_crm/gem_ext/rails/text_helper.rb +3 -15
- data/lib/fat_free_crm/gem_ext/rake/task.rb +3 -15
- data/lib/fat_free_crm/gem_ext/simple_form/action_view_extensions/form_helper.rb +3 -15
- data/lib/fat_free_crm/i18n.rb +3 -15
- data/lib/fat_free_crm/load_settings.rb +20 -0
- data/lib/fat_free_crm/mail_processor/base.rb +20 -18
- data/lib/fat_free_crm/mail_processor/comment_replies.rb +3 -15
- data/lib/fat_free_crm/mail_processor/dropbox.rb +4 -16
- data/lib/fat_free_crm/permissions.rb +3 -15
- data/lib/fat_free_crm/plugin.rb +3 -15
- data/lib/fat_free_crm/plugin_dependencies.rb +3 -15
- data/lib/fat_free_crm/renderers.rb +6 -25
- data/lib/fat_free_crm/sortable.rb +3 -15
- data/lib/fat_free_crm/tabs.rb +3 -15
- data/lib/fat_free_crm/version.rb +5 -17
- data/lib/fat_free_crm/view_factory.rb +3 -15
- data/lib/missing_translation_detector.rb +50 -0
- data/lib/tasks/db/migrate.rake +3 -15
- data/lib/tasks/db/schema.rake +3 -15
- data/lib/tasks/ffcrm/comment_replies.rake +3 -15
- data/lib/tasks/ffcrm/config.rake +28 -16
- data/lib/tasks/ffcrm/demo.rake +3 -15
- data/lib/tasks/ffcrm/dropbox.rake +3 -15
- data/lib/tasks/ffcrm/missing_translations.rake +33 -0
- data/lib/tasks/ffcrm/settings.rake +3 -15
- data/lib/tasks/ffcrm/setup.rake +15 -24
- data/lib/tasks/ffcrm/update_data.rake +3 -15
- data/spec/controllers/admin/groups_controller_spec.rb +5 -0
- data/spec/controllers/admin/users_controller_spec.rb +5 -0
- data/spec/controllers/applications_controller_spec.rb +5 -0
- data/spec/controllers/authentications_controller_spec.rb +5 -0
- data/spec/controllers/comments_controller_spec.rb +5 -0
- data/spec/controllers/emails_controller_spec.rb +5 -0
- data/spec/controllers/entities/accounts_controller_spec.rb +5 -0
- data/spec/controllers/entities/campaigns_controller_spec.rb +5 -0
- data/spec/controllers/entities/contacts_controller_spec.rb +5 -0
- data/spec/controllers/entities/leads_controller_spec.rb +5 -0
- data/spec/controllers/entities/opportunities_controller_spec.rb +5 -0
- data/spec/controllers/entities_controller_spec.rb +5 -0
- data/spec/controllers/home_controller_spec.rb +5 -0
- data/spec/controllers/lists_controller_spec.rb +5 -0
- data/spec/controllers/passwords_controller_spec.rb +5 -0
- data/spec/controllers/tasks_controller_spec.rb +7 -6
- data/spec/controllers/users_controller_spec.rb +5 -0
- data/spec/factories/account_factories.rb +5 -0
- data/spec/factories/campaign_factories.rb +6 -1
- data/spec/factories/contact_factories.rb +6 -1
- data/spec/factories/field_factories.rb +6 -1
- data/spec/factories/lead_factories.rb +6 -1
- data/spec/factories/list_factories.rb +6 -1
- data/spec/factories/opportunity_factories.rb +16 -5
- data/spec/factories/sequences.rb +7 -1
- data/spec/factories/setting_factories.rb +6 -1
- data/spec/factories/shared_factories.rb +5 -0
- data/spec/factories/subscription_factories.rb +5 -0
- data/spec/factories/tag_factories.rb +6 -1
- data/spec/factories/task_factories.rb +6 -1
- data/spec/factories/user_factories.rb +5 -0
- data/spec/features/acceptance_helper.rb +9 -0
- data/spec/{acceptance → features}/accounts_spec.rb +14 -9
- data/spec/{acceptance → features}/admin/groups_spec.rb +5 -0
- data/spec/{acceptance → features}/admin/users_spec.rb +9 -4
- data/spec/{acceptance → features}/campaigns_spec.rb +14 -16
- data/spec/{acceptance → features}/contacts_spec.rb +13 -16
- data/spec/{acceptance → features}/dashboard_spec.rb +5 -0
- data/spec/{acceptance → features}/leads_spec.rb +11 -12
- data/spec/{acceptance → features}/opportunities_overview_spec.rb +5 -0
- data/spec/{acceptance → features}/opportunities_spec.rb +14 -16
- data/spec/features/support/browser.rb +18 -0
- data/spec/{acceptance → features}/support/headless.rb +5 -3
- data/spec/{acceptance → features}/support/helpers.rb +6 -1
- data/spec/features/support/maintain_sessions.rb +10 -0
- data/spec/{acceptance → features}/support/paths.rb +9 -4
- data/spec/{acceptance → features}/support/selector_helpers.rb +6 -1
- data/spec/{acceptance → features}/tasks_spec.rb +7 -5
- data/spec/helpers/accounts_helper_spec.rb +5 -0
- data/spec/helpers/admin/field_groups_helper_spec.rb +5 -0
- data/spec/helpers/admin/plugins_helper_spec.rb +5 -0
- data/spec/helpers/admin/settings_helper_spec.rb +5 -0
- data/spec/helpers/admin/users_helper_spec.rb +5 -0
- data/spec/helpers/application_helper_spec.rb +5 -0
- data/spec/helpers/authentications_helper_spec.rb +5 -0
- data/spec/helpers/campaigns_helper_spec.rb +5 -0
- data/spec/helpers/comments_helper_spec.rb +5 -0
- data/spec/helpers/contacts_helper_spec.rb +5 -0
- data/spec/helpers/emails_helper_spec.rb +5 -0
- data/spec/helpers/fields_helper_spec.rb +5 -0
- data/spec/helpers/groups_helper_spec.rb +6 -1
- data/spec/helpers/home_helper_spec.rb +5 -0
- data/spec/helpers/leads_helper_spec.rb +5 -0
- data/spec/helpers/lists_helper_spec.rb +6 -1
- data/spec/helpers/opportunities_helper_spec.rb +5 -0
- data/spec/helpers/passwords_helper_spec.rb +5 -0
- data/spec/helpers/tasks_helper_spec.rb +5 -0
- data/spec/helpers/users_helper_spec.rb +5 -0
- data/spec/lib/comment_extensions_spec.rb +5 -0
- data/spec/lib/core_ext/string_spec.rb +5 -0
- data/spec/lib/errors_spec.rb +5 -0
- data/spec/lib/fields_spec.rb +5 -0
- data/spec/lib/mail_processor/base_spec.rb +5 -0
- data/spec/lib/mail_processor/comment_replies_spec.rb +5 -0
- data/spec/lib/mail_processor/dropbox_spec.rb +5 -0
- data/spec/lib/mail_processor/sample_emails/dropbox.rb +5 -0
- data/spec/lib/permissions_spec.rb +5 -0
- data/spec/lib/view_factory_spec.rb +5 -0
- data/spec/mailers/subscription_mailer_spec.rb +19 -1
- data/spec/mailers/user_mailer_spec.rb +6 -1
- data/spec/models/entities/account_contact_spec.rb +5 -0
- data/spec/models/entities/account_opportunity_spec.rb +5 -0
- data/spec/models/entities/account_spec.rb +6 -1
- data/spec/models/entities/campaign_spec.rb +5 -0
- data/spec/models/entities/contact_opportunity_spec.rb +5 -0
- data/spec/models/entities/contact_spec.rb +5 -0
- data/spec/models/entities/lead_spec.rb +5 -0
- data/spec/models/entities/opportunity_spec.rb +15 -2
- data/spec/models/fields/custom_field_date_pair_spec.rb +3 -15
- data/spec/models/fields/custom_field_pair_spec.rb +3 -15
- data/spec/models/fields/custom_field_spec.rb +5 -0
- data/spec/models/fields/field_group_spec.rb +5 -0
- data/spec/models/fields/field_spec.rb +5 -0
- data/spec/models/list_spec.rb +5 -0
- data/spec/models/observers/entity_observer_spec.rb +5 -0
- data/spec/models/polymorphic/address_spec.rb +5 -0
- data/spec/models/polymorphic/avatar_spec.rb +5 -0
- data/spec/models/polymorphic/comment_spec.rb +5 -0
- data/spec/models/polymorphic/email_spec.rb +5 -0
- data/spec/models/polymorphic/task_spec.rb +5 -0
- data/spec/models/polymorphic/version_spec.rb +26 -22
- data/spec/models/setting_spec.rb +5 -0
- data/spec/models/users/authentication_spec.rb +5 -0
- data/spec/models/users/group_spec.rb +6 -1
- data/spec/models/users/permission_spec.rb +5 -0
- data/spec/models/users/preference_spec.rb +5 -0
- data/spec/models/users/user_spec.rb +6 -1
- data/spec/routing/accounts_routing_spec.rb +5 -0
- data/spec/routing/admin/users_routing_spec.rb +5 -0
- data/spec/routing/campaigns_routing_spec.rb +5 -0
- data/spec/routing/comments_routing_spec.rb +5 -0
- data/spec/routing/contacts_routing_spec.rb +5 -0
- data/spec/routing/emails_routing_spec.rb +5 -0
- data/spec/routing/leads_routing_spec.rb +5 -0
- data/spec/routing/opportunities_routing_spec.rb +5 -0
- data/spec/routing/tasks_routing_spec.rb +5 -0
- data/spec/routing/users_routing_spec.rb +5 -0
- data/spec/shared/controllers.rb +8 -3
- data/spec/shared/models.rb +110 -105
- data/spec/spec_helper.rb +40 -22
- data/spec/support/assert_select.rb +5 -0
- data/spec/support/auth_macros.rb +5 -0
- data/spec/support/macros.rb +5 -0
- data/spec/support/mail_processor_mocks.rb +5 -0
- data/spec/support/rjs_support.rb +6 -1
- data/spec/support/uploaded_file.rb +5 -0
- data/spec/views/accounts/_edit.haml_spec.rb +5 -0
- data/spec/views/accounts/_new.haml_spec.rb +5 -0
- data/spec/views/accounts/create.rjs_spec.rb +5 -0
- data/spec/views/accounts/destroy.rjs_spec.rb +5 -0
- data/spec/views/accounts/edit.rjs_spec.rb +5 -0
- data/spec/views/accounts/index.haml_spec.rb +5 -0
- data/spec/views/accounts/index.rjs_spec.rb +5 -0
- data/spec/views/accounts/new.rjs_spec.rb +5 -0
- data/spec/views/accounts/show.haml_spec.rb +5 -0
- data/spec/views/accounts/update.rjs_spec.rb +5 -0
- data/spec/views/admin/users/_create.haml_spec.rb +5 -0
- data/spec/views/admin/users/create.rjs_spec.rb +5 -0
- data/spec/views/admin/users/destroy.rjs_spec.rb +5 -0
- data/spec/views/admin/users/edit.rjs_spec.rb +5 -0
- data/spec/views/admin/users/index.haml_spec.rb +5 -0
- data/spec/views/admin/users/index.rjs_spec.rb +5 -0
- data/spec/views/admin/users/new.rjs_spec.rb +5 -0
- data/spec/views/admin/users/reactivate.rjs_spec.rb +5 -0
- data/spec/views/admin/users/show.haml_spec.rb +5 -0
- data/spec/views/admin/users/suspend.rjs_spec.rb +5 -0
- data/spec/views/admin/users/update.rjs_spec.rb +5 -0
- data/spec/views/application/auto_complete.haml_spec.rb +5 -0
- data/spec/views/authentications/new.haml_spec.rb +5 -0
- data/spec/views/campaigns/_edit.haml_spec.rb +8 -2
- data/spec/views/campaigns/_new.haml_spec.rb +5 -0
- data/spec/views/campaigns/create.rjs_spec.rb +5 -0
- data/spec/views/campaigns/destroy.rjs_spec.rb +5 -0
- data/spec/views/campaigns/edit.rjs_spec.rb +5 -0
- data/spec/views/campaigns/index.haml_spec.rb +5 -0
- data/spec/views/campaigns/index.rjs_spec.rb +5 -0
- data/spec/views/campaigns/new.rjs_spec.rb +5 -0
- data/spec/views/campaigns/show.haml_spec.rb +5 -0
- data/spec/views/campaigns/update.rjs_spec.rb +5 -0
- data/spec/views/comments/new.rjs_spec.rb +5 -0
- data/spec/views/contacts/_edit.haml_spec.rb +5 -0
- data/spec/views/contacts/_new.haml_spec.rb +5 -0
- data/spec/views/contacts/create.rjs_spec.rb +5 -0
- data/spec/views/contacts/destroy.rjs_spec.rb +5 -0
- data/spec/views/contacts/edit.rjs_spec.rb +5 -0
- data/spec/views/contacts/index.haml_spec.rb +5 -0
- data/spec/views/contacts/index.rjs_spec.rb +5 -0
- data/spec/views/contacts/new.rjs_spec.rb +5 -0
- data/spec/views/contacts/show.haml_spec.rb +5 -0
- data/spec/views/contacts/update.rjs_spec.rb +5 -0
- data/spec/views/home/index.haml_spec.rb +5 -0
- data/spec/views/home/index.rjs_spec.rb +5 -0
- data/spec/views/home/options.rjs_spec.rb +5 -0
- data/spec/views/leads/_convert.haml_spec.rb +5 -0
- data/spec/views/leads/_edit.haml_spec.rb +5 -0
- data/spec/views/leads/_new.haml_spec.rb +5 -0
- data/spec/views/leads/_sidebar_show.haml_spec.rb +5 -0
- data/spec/views/leads/convert.rjs_spec.rb +5 -0
- data/spec/views/leads/create.rjs_spec.rb +5 -0
- data/spec/views/leads/destroy.rjs_spec.rb +5 -0
- data/spec/views/leads/edit.rjs_spec.rb +5 -0
- data/spec/views/leads/index.haml_spec.rb +5 -0
- data/spec/views/leads/index.rjs_spec.rb +5 -0
- data/spec/views/leads/new.rjs_spec.rb +5 -0
- data/spec/views/leads/promote.rjs_spec.rb +5 -0
- data/spec/views/leads/reject.rjs_spec.rb +5 -0
- data/spec/views/leads/show.haml_spec.rb +5 -0
- data/spec/views/leads/update.rjs_spec.rb +5 -0
- data/spec/views/opportunities/_edit.haml_spec.rb +5 -0
- data/spec/views/opportunities/_new.haml_spec.rb +5 -0
- data/spec/views/opportunities/create.rjs_spec.rb +5 -0
- data/spec/views/opportunities/destroy.rjs_spec.rb +5 -0
- data/spec/views/opportunities/edit.rjs_spec.rb +5 -0
- data/spec/views/opportunities/index.haml_spec.rb +5 -0
- data/spec/views/opportunities/index.rjs_spec.rb +5 -0
- data/spec/views/opportunities/new.rjs_spec.rb +5 -0
- data/spec/views/opportunities/show.haml_spec.rb +5 -0
- data/spec/views/opportunities/update.rjs_spec.rb +5 -0
- data/spec/views/tasks/_edit.haml_spec.rb +5 -0
- data/spec/views/tasks/complete.rjs_spec.rb +5 -0
- data/spec/views/tasks/create.rjs_spec.rb +5 -0
- data/spec/views/tasks/destroy.rjs_spec.rb +5 -0
- data/spec/views/tasks/edit.rjs_spec.rb +5 -0
- data/spec/views/tasks/index.haml_spec.rb +5 -0
- data/spec/views/tasks/new.rjs_spec.rb +5 -0
- data/spec/views/tasks/update.rjs_spec.rb +5 -0
- data/spec/views/users/avatar.rjs_spec.rb +5 -0
- data/spec/views/users/change_password.rjs_spec.rb +5 -0
- data/spec/views/users/edit.rjs_spec.rb +5 -0
- data/spec/views/users/password.rjs_spec.rb +5 -0
- data/spec/views/users/update.rjs_spec.rb +5 -0
- data/spec/views/users/upload_avatar.rjs_spec.rb +5 -0
- metadata +45 -101
- data/LICENSE +0 -620
- data/app/inputs/datetimepair_input.rb +0 -37
- data/config/initializers/custom_fields.rb +0 -21
- data/lib/fat_free_crm/core_ext/array.rb +0 -75
- data/lib/fat_free_crm/syck_yaml.rb +0 -21
- data/spec/acceptance/acceptance_helper.rb +0 -8
- data/spec/acceptance/support/browser.rb +0 -13
- data/spec/acceptance/support/maintain_sessions.rb +0 -5
data/app/mailers/user_mailer.rb
CHANGED
@@ -1,20 +1,8 @@
|
|
1
|
-
#
|
2
|
-
# Copyright (C) 2008-2011 by Michael Dvorkin
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
3
2
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# the Free Software Foundation, either version 3 of the License, or
|
7
|
-
# (at your option) any later version.
|
8
|
-
#
|
9
|
-
# This program is distributed in the hope that it will be useful,
|
10
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
-
# GNU Affero General Public License for more details.
|
13
|
-
#
|
14
|
-
# You should have received a copy of the GNU Affero General Public License
|
15
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
16
5
|
#------------------------------------------------------------------------------
|
17
|
-
|
18
6
|
class UserMailer < ActionMailer::Base
|
19
7
|
|
20
8
|
def password_reset_instructions(user)
|
@@ -1,20 +1,8 @@
|
|
1
|
-
#
|
2
|
-
# Copyright (C) 2008-2011 by Michael Dvorkin
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
3
2
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# the Free Software Foundation, either version 3 of the License, or
|
7
|
-
# (at your option) any later version.
|
8
|
-
#
|
9
|
-
# This program is distributed in the hope that it will be useful,
|
10
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
-
# GNU Affero General Public License for more details.
|
13
|
-
#
|
14
|
-
# You should have received a copy of the GNU Affero General Public License
|
15
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
16
5
|
#------------------------------------------------------------------------------
|
17
|
-
|
18
6
|
# == Schema Information
|
19
7
|
#
|
20
8
|
# Table name: accounts
|
@@ -83,14 +71,14 @@ class Account < ActiveRecord::Base
|
|
83
71
|
ransack_can_autocomplete
|
84
72
|
|
85
73
|
validates_presence_of :name, :message => :missing_account_name
|
86
|
-
validates_uniqueness_of :name, :scope => :deleted_at
|
74
|
+
validates_uniqueness_of :name, :scope => :deleted_at if Setting.require_unique_account_names
|
87
75
|
validate :users_for_shared_access
|
88
76
|
before_save :nullify_blank_category
|
89
77
|
|
90
78
|
# Default values provided through class methods.
|
91
79
|
#----------------------------------------------------------------------------
|
92
80
|
def self.per_page ; 20 ; end
|
93
|
-
|
81
|
+
|
94
82
|
# Extract last line of billing address and get rid of numeric zipcode.
|
95
83
|
#----------------------------------------------------------------------------
|
96
84
|
def location
|
@@ -143,4 +131,6 @@ class Account < ActiveRecord::Base
|
|
143
131
|
def nullify_blank_category
|
144
132
|
self.category = nil if self.category.blank?
|
145
133
|
end
|
134
|
+
|
135
|
+
ActiveSupport.run_load_hooks(:fat_free_crm_account, self)
|
146
136
|
end
|
@@ -1,20 +1,8 @@
|
|
1
|
-
#
|
2
|
-
# Copyright (C) 2008-2011 by Michael Dvorkin
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
3
2
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# the Free Software Foundation, either version 3 of the License, or
|
7
|
-
# (at your option) any later version.
|
8
|
-
#
|
9
|
-
# This program is distributed in the hope that it will be useful,
|
10
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
-
# GNU Affero General Public License for more details.
|
13
|
-
#
|
14
|
-
# You should have received a copy of the GNU Affero General Public License
|
15
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
16
5
|
#------------------------------------------------------------------------------
|
17
|
-
|
18
6
|
# == Schema Information
|
19
7
|
#
|
20
8
|
# Table name: account_contacts
|
@@ -30,9 +18,10 @@
|
|
30
18
|
class AccountContact < ActiveRecord::Base
|
31
19
|
belongs_to :account
|
32
20
|
belongs_to :contact
|
33
|
-
|
21
|
+
|
34
22
|
has_paper_trail :meta => { :related => :contact }, :ignore => [ :id, :created_at, :updated_at, :contact_id ]
|
35
|
-
|
23
|
+
|
36
24
|
validates :account_id, :presence => true
|
37
25
|
|
26
|
+
ActiveSupport.run_load_hooks(:fat_free_crm_account_contact, self)
|
38
27
|
end
|
@@ -1,20 +1,8 @@
|
|
1
|
-
#
|
2
|
-
# Copyright (C) 2008-2011 by Michael Dvorkin
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
3
2
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# the Free Software Foundation, either version 3 of the License, or
|
7
|
-
# (at your option) any later version.
|
8
|
-
#
|
9
|
-
# This program is distributed in the hope that it will be useful,
|
10
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
-
# GNU Affero General Public License for more details.
|
13
|
-
#
|
14
|
-
# You should have received a copy of the GNU Affero General Public License
|
15
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
16
5
|
#------------------------------------------------------------------------------
|
17
|
-
|
18
6
|
# == Schema Information
|
19
7
|
#
|
20
8
|
# Table name: account_opportunities
|
@@ -33,4 +21,6 @@ class AccountOpportunity < ActiveRecord::Base
|
|
33
21
|
validates_presence_of :account_id, :opportunity_id
|
34
22
|
|
35
23
|
has_paper_trail
|
24
|
+
|
25
|
+
ActiveSupport.run_load_hooks(:fat_free_crm_account_opportunity, self)
|
36
26
|
end
|
@@ -1,20 +1,8 @@
|
|
1
|
-
#
|
2
|
-
# Copyright (C) 2008-2011 by Michael Dvorkin
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
3
2
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# the Free Software Foundation, either version 3 of the License, or
|
7
|
-
# (at your option) any later version.
|
8
|
-
#
|
9
|
-
# This program is distributed in the hope that it will be useful,
|
10
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
-
# GNU Affero General Public License for more details.
|
13
|
-
#
|
14
|
-
# You should have received a copy of the GNU Affero General Public License
|
15
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
16
5
|
#------------------------------------------------------------------------------
|
17
|
-
|
18
6
|
# == Schema Information
|
19
7
|
#
|
20
8
|
# Table name: campaigns
|
@@ -120,4 +108,6 @@ class Campaign < ActiveRecord::Base
|
|
120
108
|
errors.add(:access, :share_campaign) if self[:access] == "Shared" && !self.permissions.any?
|
121
109
|
end
|
122
110
|
|
111
|
+
ActiveSupport.run_load_hooks(:fat_free_crm_campaign, self)
|
112
|
+
|
123
113
|
end
|
@@ -1,20 +1,8 @@
|
|
1
|
-
#
|
2
|
-
# Copyright (C) 2008-2011 by Michael Dvorkin
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
3
2
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# the Free Software Foundation, either version 3 of the License, or
|
7
|
-
# (at your option) any later version.
|
8
|
-
#
|
9
|
-
# This program is distributed in the hope that it will be useful,
|
10
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
-
# GNU Affero General Public License for more details.
|
13
|
-
#
|
14
|
-
# You should have received a copy of the GNU Affero General Public License
|
15
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
16
5
|
#------------------------------------------------------------------------------
|
17
|
-
|
18
6
|
# == Schema Information
|
19
7
|
#
|
20
8
|
# Table name: contacts
|
@@ -67,7 +55,7 @@ class Contact < ActiveRecord::Base
|
|
67
55
|
serialize :subscribed_users, Set
|
68
56
|
|
69
57
|
accepts_nested_attributes_for :business_address, :allow_destroy => true, :reject_if => proc {|attributes| Address.reject_address(attributes)}
|
70
|
-
|
58
|
+
|
71
59
|
scope :created_by, lambda { |user| { :conditions => [ "user_id = ?", user.id ] } }
|
72
60
|
scope :assigned_to, lambda { |user| { :conditions => ["assigned_to = ?", user.id ] } }
|
73
61
|
|
@@ -87,7 +75,7 @@ class Contact < ActiveRecord::Base
|
|
87
75
|
|
88
76
|
other = t[:email].matches("%#{query}%").or(t[:alt_email].matches("%#{query}%"))
|
89
77
|
other = other.or(t[:phone].matches("%#{query}%")).or(t[:mobile].matches("%#{query}%"))
|
90
|
-
|
78
|
+
|
91
79
|
where( name_query.nil? ? other : name_query.or(other) )
|
92
80
|
}
|
93
81
|
|
@@ -96,12 +84,12 @@ class Contact < ActiveRecord::Base
|
|
96
84
|
uses_comment_extensions
|
97
85
|
acts_as_taggable_on :tags
|
98
86
|
has_paper_trail :ignore => [ :subscribed_users ]
|
99
|
-
|
87
|
+
|
100
88
|
has_fields
|
101
89
|
exportable
|
102
90
|
sortable :by => [ "first_name ASC", "last_name ASC", "created_at DESC", "updated_at DESC" ], :default => "created_at DESC"
|
103
91
|
|
104
|
-
validates_presence_of :first_name, :message => :missing_first_name
|
92
|
+
validates_presence_of :first_name, :message => :missing_first_name if Setting.require_first_names
|
105
93
|
validates_presence_of :last_name, :message => :missing_last_name if Setting.require_last_names
|
106
94
|
validate :users_for_shared_access
|
107
95
|
|
@@ -124,8 +112,9 @@ class Contact < ActiveRecord::Base
|
|
124
112
|
#----------------------------------------------------------------------------
|
125
113
|
def save_with_account_and_permissions(params)
|
126
114
|
save_account(params)
|
115
|
+
result = self.save
|
127
116
|
self.opportunities << Opportunity.find(params[:opportunity]) unless params[:opportunity].blank?
|
128
|
-
|
117
|
+
result
|
129
118
|
end
|
130
119
|
|
131
120
|
# Backend handler for [Update Contact] form (see contact/update).
|
@@ -168,9 +157,9 @@ class Contact < ActiveRecord::Base
|
|
168
157
|
%w(first_name last_name title source email alt_email phone mobile blog linkedin facebook twitter skype do_not_call background_info).each do |name|
|
169
158
|
attributes[name] = model.send(name.intern)
|
170
159
|
end
|
171
|
-
|
160
|
+
|
172
161
|
contact = Contact.new(attributes)
|
173
|
-
|
162
|
+
|
174
163
|
# Set custom fields.
|
175
164
|
if model.class.respond_to?(:fields)
|
176
165
|
model.class.fields.each do |field|
|
@@ -179,19 +168,19 @@ class Contact < ActiveRecord::Base
|
|
179
168
|
end
|
180
169
|
end
|
181
170
|
end
|
182
|
-
|
171
|
+
|
183
172
|
contact.business_address = Address.new(:street1 => model.business_address.street1, :street2 => model.business_address.street2, :city => model.business_address.city, :state => model.business_address.state, :zipcode => model.business_address.zipcode, :country => model.business_address.country, :full_address => model.business_address.full_address, :address_type => "Business") unless model.business_address.nil?
|
184
173
|
|
185
174
|
# Save the contact only if the account and the opportunity have no errors.
|
186
175
|
if account.errors.empty? && opportunity.errors.empty?
|
187
176
|
# Note: contact.account = account doesn't seem to work here.
|
188
177
|
contact.account_contact = AccountContact.new(:account => account, :contact => contact) unless account.id.blank?
|
189
|
-
contact.opportunities << opportunity unless opportunity.id.blank?
|
190
178
|
if contact.access != "Lead" || model.nil?
|
191
179
|
contact.save
|
192
180
|
else
|
193
181
|
contact.save_with_model_permissions(model)
|
194
182
|
end
|
183
|
+
contact.opportunities << opportunity unless opportunity.id.blank? # must happen after contact is saved
|
195
184
|
end
|
196
185
|
contact
|
197
186
|
end
|
@@ -202,7 +191,7 @@ class Contact < ActiveRecord::Base
|
|
202
191
|
def users_for_shared_access
|
203
192
|
errors.add(:access, :share_contact) if self[:access] == "Shared" && !self.permissions.any?
|
204
193
|
end
|
205
|
-
|
194
|
+
|
206
195
|
# Handles the saving of related accounts
|
207
196
|
#----------------------------------------------------------------------------
|
208
197
|
def save_account(params)
|
@@ -217,4 +206,5 @@ class Contact < ActiveRecord::Base
|
|
217
206
|
self.reload unless self.new_record? # ensure the account association is updated
|
218
207
|
end
|
219
208
|
|
209
|
+
ActiveSupport.run_load_hooks(:fat_free_crm_contact, self)
|
220
210
|
end
|
@@ -1,20 +1,8 @@
|
|
1
|
-
#
|
2
|
-
# Copyright (C) 2008-2011 by Michael Dvorkin
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
3
2
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# the Free Software Foundation, either version 3 of the License, or
|
7
|
-
# (at your option) any later version.
|
8
|
-
#
|
9
|
-
# This program is distributed in the hope that it will be useful,
|
10
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
-
# GNU Affero General Public License for more details.
|
13
|
-
#
|
14
|
-
# You should have received a copy of the GNU Affero General Public License
|
15
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
16
5
|
#------------------------------------------------------------------------------
|
17
|
-
|
18
6
|
# == Schema Information
|
19
7
|
#
|
20
8
|
# Table name: contact_opportunities
|
@@ -34,4 +22,6 @@ class ContactOpportunity < ActiveRecord::Base
|
|
34
22
|
validates_presence_of :contact_id, :opportunity_id
|
35
23
|
|
36
24
|
# has_paper_trail
|
25
|
+
|
26
|
+
ActiveSupport.run_load_hooks(:fat_free_crm_contact_opportunity, self)
|
37
27
|
end
|
data/app/models/entities/lead.rb
CHANGED
@@ -1,20 +1,8 @@
|
|
1
|
-
#
|
2
|
-
# Copyright (C) 2008-2011 by Michael Dvorkin
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
3
2
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# the Free Software Foundation, either version 3 of the License, or
|
7
|
-
# (at your option) any later version.
|
8
|
-
#
|
9
|
-
# This program is distributed in the hope that it will be useful,
|
10
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
-
# GNU Affero General Public License for more details.
|
13
|
-
#
|
14
|
-
# You should have received a copy of the GNU Affero General Public License
|
15
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
16
5
|
#------------------------------------------------------------------------------
|
17
|
-
|
18
6
|
# == Schema Information
|
19
7
|
#
|
20
8
|
# Table name: leads
|
@@ -84,7 +72,7 @@ class Lead < ActiveRecord::Base
|
|
84
72
|
has_ransackable_associations %w(contact campaign tasks tags activities emails addresses comments)
|
85
73
|
ransack_can_autocomplete
|
86
74
|
|
87
|
-
validates_presence_of :first_name, :message => :missing_first_name
|
75
|
+
validates_presence_of :first_name, :message => :missing_first_name if Setting.require_first_names
|
88
76
|
validates_presence_of :last_name, :message => :missing_last_name if Setting.require_last_names
|
89
77
|
validate :users_for_shared_access
|
90
78
|
|
@@ -196,4 +184,6 @@ private
|
|
196
184
|
def users_for_shared_access
|
197
185
|
errors.add(:access, :share_lead) if self[:access] == "Shared" && !self.permissions.any?
|
198
186
|
end
|
187
|
+
|
188
|
+
ActiveSupport.run_load_hooks(:fat_free_crm_lead, self)
|
199
189
|
end
|
@@ -1,20 +1,8 @@
|
|
1
|
-
#
|
2
|
-
# Copyright (C) 2008-2011 by Michael Dvorkin
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
3
2
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# the Free Software Foundation, either version 3 of the License, or
|
7
|
-
# (at your option) any later version.
|
8
|
-
#
|
9
|
-
# This program is distributed in the hope that it will be useful,
|
10
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
-
# GNU Affero General Public License for more details.
|
13
|
-
#
|
14
|
-
# You should have received a copy of the GNU Affero General Public License
|
15
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
16
5
|
#------------------------------------------------------------------------------
|
17
|
-
|
18
6
|
# == Schema Information
|
19
7
|
#
|
20
8
|
# Table name: opportunities
|
@@ -89,7 +77,7 @@ class Opportunity < ActiveRecord::Base
|
|
89
77
|
exportable
|
90
78
|
sortable :by => [ "name ASC", "amount DESC", "amount*probability DESC", "probability DESC", "closes_on ASC", "created_at DESC", "updated_at DESC" ], :default => "created_at DESC"
|
91
79
|
|
92
|
-
has_ransackable_associations %w(account contacts tags activities emails comments)
|
80
|
+
has_ransackable_associations %w(account contacts tags campaign activities emails comments)
|
93
81
|
ransack_can_autocomplete
|
94
82
|
|
95
83
|
validates :stage, :inclusion => { :in => Setting.unroll(:opportunity_stage).map{|s| s.last.to_s } }
|
@@ -109,6 +97,7 @@ class Opportunity < ActiveRecord::Base
|
|
109
97
|
# Default values provided through class methods.
|
110
98
|
#----------------------------------------------------------------------------
|
111
99
|
def self.per_page ; 20 ; end
|
100
|
+
def self.default_stage; Setting[:opportunity_default_stage].try(:to_s) || 'prospecting'; end
|
112
101
|
|
113
102
|
#----------------------------------------------------------------------------
|
114
103
|
def weighted_amount
|
@@ -204,4 +193,5 @@ class Opportunity < ActiveRecord::Base
|
|
204
193
|
end
|
205
194
|
end
|
206
195
|
|
196
|
+
ActiveSupport.run_load_hooks(:fat_free_crm_opportunity, self)
|
207
197
|
end
|
@@ -1,20 +1,8 @@
|
|
1
|
-
#
|
2
|
-
# Copyright (C) 2008-2011 by Michael Dvorkin
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
3
2
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# the Free Software Foundation, either version 3 of the License, or
|
7
|
-
# (at your option) any later version.
|
8
|
-
#
|
9
|
-
# This program is distributed in the hope that it will be useful,
|
10
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
-
# GNU Affero General Public License for more details.
|
13
|
-
#
|
14
|
-
# You should have received a copy of the GNU Affero General Public License
|
15
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
16
5
|
#------------------------------------------------------------------------------
|
17
|
-
|
18
6
|
# == Schema Information
|
19
7
|
#
|
20
8
|
# Table name: fields
|
@@ -44,5 +32,6 @@ class CoreField < Field
|
|
44
32
|
def error_on_destroy
|
45
33
|
errors.add_to_base "Core fields cannot be deleted."
|
46
34
|
end
|
47
|
-
end
|
48
35
|
|
36
|
+
ActiveSupport.run_load_hooks(:fat_free_crm_core_field, self)
|
37
|
+
end
|
@@ -1,20 +1,8 @@
|
|
1
|
-
#
|
2
|
-
# Copyright (C) 2008-2011 by Michael Dvorkin
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
3
2
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# the Free Software Foundation, either version 3 of the License, or
|
7
|
-
# (at your option) any later version.
|
8
|
-
#
|
9
|
-
# This program is distributed in the hope that it will be useful,
|
10
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
-
# GNU Affero General Public License for more details.
|
13
|
-
#
|
14
|
-
# You should have received a copy of the GNU Affero General Public License
|
15
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
16
5
|
#------------------------------------------------------------------------------
|
17
|
-
|
18
6
|
# == Schema Information
|
19
7
|
#
|
20
8
|
# Table name: fields
|
@@ -81,7 +69,7 @@ class CustomField < Field
|
|
81
69
|
obj.errors.add(attr, ::I18n.t('activerecord.errors.models.custom_field.required', :field => label)) if required? and obj.send(attr).blank?
|
82
70
|
obj.errors.add(attr, ::I18n.t('activerecord.errors.models.custom_field.maxlength', :field => label)) if (maxlength.to_i > 0) and (obj.send(attr).to_s.length > maxlength.to_i)
|
83
71
|
end
|
84
|
-
|
72
|
+
|
85
73
|
protected
|
86
74
|
|
87
75
|
# When changing a custom field's type, it may be necessary to
|
@@ -151,4 +139,6 @@ class CustomField < Field
|
|
151
139
|
klass.serialize_custom_fields!
|
152
140
|
end
|
153
141
|
end
|
142
|
+
|
143
|
+
ActiveSupport.run_load_hooks(:fat_free_crm_custom_field, self)
|
154
144
|
end
|