diff --git a/app/models/enterprise.rb b/app/models/enterprise.rb index 5982444..3db581e 100644 --- a/app/models/enterprise.rb +++ b/app/models/enterprise.rb @@ -96,14 +96,22 @@ class Enterprise < Organization save end + def activation_task + self.tasks.where(:type => 'EnterpriseActivation').first + 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! + # must be set first for the following to work + self.enabled = true + + self.affiliate owner, Profile::Roles.all_roles(self.environment.id) if owner + + self.apply_template template if self.environment.replace_enterprise_template_when_enable + + self.activation_task.update_attribute :status, Task::Status::FINISHED rescue nil + + self.save_without_validation! end def question diff --git a/app/models/enterprise_activation.rb b/app/models/enterprise_activation.rb index 64f2aec..5ab9d1c 100644 --- a/app/models/enterprise_activation.rb +++ b/app/models/enterprise_activation.rb @@ -1,22 +1,15 @@ class EnterpriseActivation < Task - class RequestorRequired < Exception; end + alias :person :requestor + alias :person= :requestor= - settings_items :enterprise_id, :integer + alias :enterprise :target + alias :enterprise= :target= - validates_presence_of :enterprise_id - - def enterprise - Enterprise.find(enterprise_id) - end - - def enterprise=(ent) - self.enterprise_id = ent.id - end + validates_presence_of :enterprise def perform - raise EnterpriseActivation::RequestorRequired if requestor.nil? - self.enterprise.enable(requestor) + self.enterprise.enable self.requestor end def title @@ -28,15 +21,27 @@ class EnterpriseActivation < Task end def information - {:message => _('%{requestor} wants to activate enterprise %{linked_subject}.')} + if self.requestor + {:message => _('%{requestor} wants to activate enterprise %{linked_subject}.')} + else + {:message => _('Pending activation of enterprise %{linked_subject}.')} + end end def icon - {:type => :profile_image, :profile => requestor, :url => requestor.url} + if self.requestor + {:type => :profile_image, :profile => self.requestor, :url => self.requestor.url} + else + {:type => :profile_image, :profile => self.enterprise, :url => self.enterprise.url} + end end def target_notification_description - _('%{requestor} wants to activate enterprise %{enterprise}.') % {:requestor => requestor.name, :enterprise => enterprise.name} + if self.requestor + _('%{requestor} wants to activate enterprise %{enterprise}.') % {:requestor => self.requestor.name, :enterprise => self.enterprise.name} + else + _('Pending activation of enterprise %{enterprise}.') % {:enterprise => self.enterprise.name} + end end end diff --git a/db/migrate/20140318225328_set_target_for_enterprise_activation.rb b/db/migrate/20140318225328_set_target_for_enterprise_activation.rb new file mode 100644 index 0000000..1c303eb --- /dev/null +++ b/db/migrate/20140318225328_set_target_for_enterprise_activation.rb @@ -0,0 +1,13 @@ +class SetTargetForEnterpriseActivation < ActiveRecord::Migration + def self.up + EnterpriseActivation.find_each do |enterprise_activation| + enterprise_activation.target = enterprise_activation.enterprise + enterprise_activation.data.delete :enterprise_id + enterprise_activation.save + end + end + + def self.down + say "this migration can't be reverted" + end +end diff --git a/po/pt/noosfero.po b/po/pt/noosfero.po index d14e54c..f83f11c 100644 --- a/po/pt/noosfero.po +++ b/po/pt/noosfero.po @@ -2815,6 +2815,14 @@ msgstr "%{requestor} quer ativar o empreendimento %{linked_subject}." msgid "%{requestor} wants to activate enterprise %{enterprise}." msgstr "%{requestor} quer ativar o empreendimento %{enterprise}." +#: app/models/enterprise_activation.rb:31 +msgid "Pending activation of enterprise %{linked_subject}." +msgstr "Ativação pendente para o empreendimento %{linked_subject}." + +#: app/models/enterprise_activation.rb:39 +msgid "Pending activation of enterprise %{enterprise}." +msgstr "Ativação pendente para o empreendimento %{enterprise}." + #: app/models/contact.rb:- app/views/friends/index.rhtml:33 #: app/views/friends/index.rhtml:36 msgid "contact" diff --git a/test/unit/enterprise_activation_test.rb b/test/unit/enterprise_activation_test.rb index cb9a124..757c2c7 100644 --- a/test/unit/enterprise_activation_test.rb +++ b/test/unit/enterprise_activation_test.rb @@ -9,24 +9,24 @@ class EnterpriseActivationTest < ActiveSupport::TestCase end should 'keep enterprise_id' do - assert_nil EnterpriseActivation.new.enterprise_id + assert_nil EnterpriseActivation.new.target_id end should 'have an enteprise through enterprise_id' do ent = Enterprise.create!(:name => 'my enterprise', :identifier => 'myent') - assert_equal ent, EnterpriseActivation.new(:enterprise_id => ent.id).enterprise + assert_equal ent, EnterpriseActivation.new(:target => ent).enterprise end should 'require an enterprise' do t = EnterpriseActivation.new t.valid? - assert t.errors.invalid?(:enterprise_id), "enterprise must be required" + assert t.errors.invalid?(:enterprise), "enterprise must be required" ent = Enterprise.create!(:name => 'my enterprise', :identifier => 'myent') t.enterprise = ent t.valid? - assert !t.errors.invalid?(:enterprise_id), "must validate after enterprise is set" + assert !t.errors.invalid?(:target_id), "must validate after enterprise is set" end should 'activate enterprise when finished' do @@ -40,15 +40,6 @@ class EnterpriseActivationTest < ActiveSupport::TestCase assert ent.enabled, "finishing task should left enterprise enabled" end - should 'require requestor to finish' do - ent = Enterprise.create!(:name => 'my enterprise', :identifier => 'myent', :enabled => false) - t = EnterpriseActivation.create!(:enterprise => ent) - - assert_raise EnterpriseActivation::RequestorRequired do - t.finish - end - end - should 'put requestor as enterprise owner when finishing' do ent = Enterprise.create!(:name => 'my enterprise', :identifier => 'myent', :enabled => false) t = EnterpriseActivation.create!(:enterprise => ent) -- libgit2 0.21.2