app/models/approval.rb
class Approval < ActiveRecord::Base
extend ActiveRecordExtension
attr_accessible :adoption_report_flg, :all_process_end_at, :all_process_start_at, :approval_end_at, :approval_result, :collect_user, :created_at, :created_by,
:donate_request_at, :donate_request_replay_at, :donate_request_result, :group_approval_at, :group_approval_result, :group_note,
:group_result_reason, :group_user_id, :id, :manifestation_id, :publication_status, :reason, :reception_agent_id, :refuse_at, :sample_arrival_at,
:sample_carrier_type, :sample_name, :sample_note, :sample_request_at, :status, :updated_at, :collection_sources,
:approval_identifier, :thrsis_review_flg, :ja_text_author_summary_flg, :en_text_author_summary_flg, :proceedings_number_of_year,
:excepting_number_of_year, :four_priority_areas, :document_classification_1, :document_classification_2,
:approval_extexts_attributes, :process_notes_attributes
attr_accessor :identifier
belongs_to :manifestation
belongs_to :create_user, :class_name => "User", :foreign_key => :created_by
belongs_to :group_user, :class_name => "User", :foreign_key => :group_user_id
belongs_to :reception_agent, :class_name => "Agent", :foreign_key => :reception_agent_id
belongs_to :thrsis_review_flg_code, :class_name => 'Keycode', :foreign_key => 'thrsis_review_flg'
belongs_to :ja_text_author_summary_flg_code, :class_name => 'Keycode', :foreign_key => 'ja_text_author_summary_flg'
belongs_to :en_text_author_summary_flg_code, :class_name => 'Keycode', :foreign_key => 'en_text_author_summary_flg'
belongs_to :four_priority_areas_code, :class_name => 'Keycode', :foreign_key => 'four_priority_areas'
belongs_to :document_classification_1_code, :class_name => 'Keycode', :foreign_key => 'document_classification_1'
belongs_to :document_classification_2_code, :class_name => 'Keycode', :foreign_key => 'document_classification_2'
has_many :approval_exinfos, :dependent => :destroy, :order => "position"
#TODO accepts_nested_attributes_for :approval_extexts
has_many :approval_extexts, :dependent => :destroy, :order => "position"
has_many :process_notes, class_name: 'ApprovalExtext', dependent: :destroy, conditions: { name: 'notes' }
accepts_nested_attributes_for :process_notes, allow_destroy: true, reject_if: lambda { |a| a[:value].blank? and !(ApprovalExtext.find(a[:id]) rescue nil) }
validates_uniqueness_of :approval_identifier, :allow_nil => true, :allow_blank => true
validate :validate_identifier
def validate_identifier
return if self.manifestation_id
if self.identifier.blank?
errors.add(I18n.t('activerecord.attributes.manifestation.identifier'), I18n.t('approval.no_blank_identifier'))
else
manifestation = Manifestation.find_by_identifier(self.identifier)
if manifestation
self.manifestation_id = manifestation.id
else
errors.add(I18n.t('activerecord.attributes.manifestation.identifier'), I18n.t('approval.no_matches_found_manifestation'))
end
end
end
before_save :mark_destroy_extext, :set_created_by_extext
state_machine :status, :initial => :pending do
event :set_pending do
transition all => :pending
end
event :set_start_approval do
transition all => :start_approval
end
event :set_sample_requested do
transition all => :sample_requested
end
event :set_sample_arrival do
transition all => :sample_arrival
end
event :set_group_approved do
transition all => :group_approved
end
event :set_end_approved do
transition all => :end_approved
end
event :set_donate_requested do
transition all => :donate_requested
end
event :set_replied_donate_request do
transition all => :replied_donate_request
end
event :set_all_process_end do
transition all => :all_process_end
end
end
def check_status
if self.all_process_start_at
if self.all_process_end_at
self.set_all_process_end
else
if self.donate_request_replay_at || self.refuse_at
self.set_replied_donate_request
else
if self.donate_request_at
self.set_donate_requested
else
if self.approval_end_at
self.set_end_approved
else
if self.group_approval_at
self.set_group_approved
else
if self.sample_arrival_at
self.set_sample_arrival
else
if self.sample_request_at
self.set_sample_requested
else
self.set_start_approval
end
end
end
end
end
end
end
else
self.set_pending
end
end
def mark_destroy_extext
approval_extexts.each { |extext| extext.mark_for_destruction if extext.value.blank? }
end
def set_created_by_extext
approval_extexts.each { |extext| extext.created_by = User.current_user.id unless extext.created_by }
end
paginates_per 10
def self.ouput_columns
return [{name:"approval_identifier"},
{name:"identifier"},
{name:"original_title"},
{name:"four_priority_areas"},
{name:"document_classification_1"},
{name:"document_classification_2"},
{name:"carrier_type"},
{name:"jmas"},
{name:"sample_note"},
{name:"group_approval_result"},
{name:"group_result_reason"},
{name:"group_note"},
{name:"adoption_report_flg"},
{name:"approval_result"},
{name:"reason"},
{name:"approval_end_at"},
{name:"all_process_end_at"},
{name:"publishers"},
{name:"thrsis_review_flg"},
{name:"ja_text_author_summary_flg"},
{name:"en_text_author_summary_flg"},
{name:"proceedings_number_of_year"},
{name:"excepting_number_of_year"},
{name:"creators"},
{name:"country_of_publication"},
{name:"frequency"},
{name:"subject"},
{name:"language"},
{name:"date_of_publication"},
{name:"adption_code"},
{name:"issn"},
{name:"jstage"}]
end
end