enterprise.rb
4.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
# An enterprise is a kind of organization. According to the system concept,
# only enterprises can offer products and services.
class Enterprise < Organization
  def self.type_name
    _('Enterprise')
  end
  N_('Enterprise')
  has_many :products, :dependent => :destroy, :order => 'name ASC'
  has_many :inputs, :through => :products
  has_many :production_costs, :as => :owner
  has_and_belongs_to_many :fans, :class_name => 'Person', :join_table => 'favorite_enteprises_people'
  after_save_reindex [:products], :with => :delayed_job
  extra_data_for_index :product_categories
  def product_categories
    products.map{|p| p.category_full_name}.compact
  end
  N_('Organization website'); N_('Historic and current context'); N_('Activities short description'); N_('City'); N_('State'); N_('Country'); N_('ZIP code')
  settings_items :organization_website, :historic_and_current_context, :activities_short_description, :zip_code, :city, :state, :country
  extend SetProfileRegionFromCityState::ClassMethods
  set_profile_region_from_city_state
  before_save do |enterprise|
    enterprise.organization_website = enterprise.maybe_add_http(enterprise.organization_website)
  end
  include MaybeAddHttp
  def business_name
    self.nickname
  end
  def business_name=(value)
    self.nickname = value
  end
  N_('Business name')
  FIELDS = %w[
    business_name
    organization_website
    historic_and_current_context
    activities_short_description
    acronym
    foundation_year
  ]
  def self.fields
    super + FIELDS
  end
  def validate
    super
    self.required_fields.each do |field|
      if self.send(field).blank?
        self.errors.add_on_blank(field)
      end
    end
  end
  def active_fields
    environment ? environment.active_enterprise_fields : []
  end
  def highlighted_products_with_image(options = {})
    Product.find(:all, {:conditions => {:highlighted => true}, :joins => :image}.merge(options))
  end
  def required_fields
    environment ? environment.required_enterprise_fields : []
  end
  def signup_fields
    environment ? environment.signup_enterprise_fields : []
  end
  def closed?
    true
  end
  def blocked?
    data[:blocked]
  end
  def block
    data[:blocked] = true
    save
  end
  def unblock
    data[:blocked] = false
    save
  end
  def enable(owner)
    return if enabled
    affiliate(owner, Profile::Roles.all_roles(environment.id))
    update_attribute(:enabled,true)
    if environment.replace_enterprise_template_when_enable
      apply_template(template)
    end
    save_without_validation!
  end
  def question
    if !self.foundation_year.blank?
      :foundation_year
    elsif !self.cnpj.blank?
      :cnpj
    else
      nil
    end
  end
  after_create :create_activation_task
  def create_activation_task
    if !self.enabled
      EnterpriseActivation.create!(:enterprise => self, :code_length => 7)
    end
  end
  def default_set_of_blocks
    links = [
      {:name => _("Enterprises's profile"), :address => '/profile/{profile}', :icon => 'ok'},
      {:name => _('Blog'), :address => '/{profile}/blog', :icon => 'edit'},
      {:name => _('Products'), :address => '/catalog/{profile}', :icon => 'new'},
    ]
    blocks = [
      [MainBlock.new],
      [ProfileImageBlock.new, LinkListBlock.new(:links => links)],
      []
    ]
    if !environment.enabled?('disable_products_for_enterprises')
      blocks[2].unshift ProductsBlock.new
    end
    blocks
  end
  def default_set_of_articles
    [
      Blog.new(:name => _('Blog')),
    ]
  end
  before_create do |enterprise|
    enterprise.validated = enterprise.environment.enabled?('enterprises_are_validated_when_created')
    if enterprise.environment.enabled?('enterprises_are_disabled_when_created')
      enterprise.enabled = false
    end
    true
  end
  def default_template
    environment.enterprise_template
  end
  def template_with_inactive_enterprise
    !enabled? ? environment.inactive_enterprise_template : template_without_inactive_enterprise
  end
  alias_method_chain :template, :inactive_enterprise
  def control_panel_settings_button
    {:title => __('Enterprise Info and settings'), :icon => 'edit-profile-enterprise'}
  end
  settings_items :enable_contact_us, :type => :boolean, :default => true
  def enable_contact?
    enable_contact_us
  end
  def control_panel_settings_button
    {:title => __('Enterprise Info and settings'), :icon => 'edit-profile-enterprise'}
  end
  def create_product?
    true
  end
  def activities
    Scrap.find_by_sql("SELECT id, updated_at, 'Scrap' AS klass FROM scraps WHERE scraps.receiver_id = #{self.id} AND scraps.scrap_id IS NULL UNION SELECT id, updated_at, 'ActionTracker::Record' AS klass FROM action_tracker WHERE action_tracker.target_id = #{self.id} UNION SELECT action_tracker.id, action_tracker.updated_at, 'ActionTracker::Record' AS klass FROM action_tracker INNER JOIN articles ON action_tracker.target_id = articles.id WHERE articles.profile_id = #{self.id} AND action_tracker.target_type = 'Article' ORDER BY action_tracker.updated_at DESC")
  end
end