Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # encoding: utf-8
- # ACRESCENTADA ESTA LINHA PARA PERMITIR TIRAR OS CAMPOS DE PESQUISA CUSTOMIZÁVEL DO ESTUDANTE EM MÚLTIPLOS MODELS
- include RansackableAttributes
- class Dept < ActiveRecord::Base
- spare_ransack :id, :acronym, :cnpj, :started_at, :finished_at, :site, :email, :description,
- :dept_type_id, :dept_id, :created_at, :updated_at, :code_number, :creation_law
- belongs_to :dept_type
- belongs_to :dept
- has_many :children_depts, :dependent => :restrict, :class_name => 'Dept', :foreign_key => 'dept_id'
- has_many :person_person_types, :through => :person_person_type_depts
- has_many :person_person_type_depts, :dependent => :destroy
- has_one :dept_address, :dependent => :destroy
- has_many :dept_telephones, :dependent => :destroy
- has_many :teaching_equipaments, :dependent => :destroy
- has_many :class_seasons, :dependent => :restrict
- attr_accessible :acronym, :cnpj, :description, :email, :finished_at, :name, :site, :started_at, :dept_type_id, :dept_id, :code_number, :person_person_type_depts, :dept_address_attributes, :dept_telephones_attributes, :dept_users_attributes, :creation_law
- validate :at_least_one_telephone
- # validate :at_least_one_dept_users
- has_many :dept_employees, :through => :dept_users, :class_name => 'User'
- has_many :dept_users, :dependent => :destroy
- #Validacoes
- validates_presence_of :name, :acronym, :code_number, :dept_type_id
- validates_uniqueness_of :name, :acronym, :code_number
- validates :started_at, :presence => true
- validate :finished_at_date
- before_update :parent_dept
- has_many :courses, :dependent => :restrict
- accepts_nested_attributes_for :dept_address, :dept_telephones, :dept_users, :allow_destroy => true
- has_paper_trail
- #before_update :prevent_parent_loop
- # def prevent_parent_loop
- # errors.add(:base, "Departamente pai foi detectado como descendente desta UO.") if depts_and_childs([Dept.find(self.id)]).map {|d| d.id}.include?(self.dept_id)
- # end
- validate :self_parent?
- def self_parent?
- errors.add(:dept_id, "Um departamento nao pode ser pai de si mesmo.") if self.dept == self
- end
- def depts_and_childs(depts)
- result_depts = depts
- depts.each do |d|
- if d.children_depts.any?
- result_depts += depts_and_childs(d.children_depts)
- end
- end
- result_depts
- end
- def name_for_ad
- self.name.gsub(' ','').remover_acentos
- end
- def depts_and_fathers(depts)
- result_depts = depts
- depts.each do |d|
- if d.try(:dept_id)
- result_depts += depts_and_fathers([d.dept])
- end
- end
- result_depts
- end
- def students_to_csv
- info = ['','','','',"Campus: #{self.try(:name).upcase}", "Sigla: #{self.try(:acronym)} - Código: #{self.code_number}"]
- header = ["CPF","RG","Órgão emissor","Estado Órgão Emissor","Nome","Nome Social","Nascimento","Pai","Mãe","Email","Lattes","Sexo","Formação","Etnia","Estado Civil","Tipo Sanguíneo","Nacionalidade","Estado","Cidade","Filhos","Rua","Bairro","Número","Complemento","CEP","Cidade","Estado","Telefone(s)","Matrícula", "Status da Matrícula","Deficiência","Necessidade Específica","Tipo de Ingresso","Curso","Modalidade","Campus","Turma"]
- dados_alunos = []
- self.courses.map{|c| c.course_matrices}.flatten.map{|cm| cm.registrations.joins(:registration_status).where('registration_statuses.is_attending is true')}.flatten.each do |r|
- dados_alunos << [
- r.person.person_identification_doc.try(:cpf).to_s,
- r.person.person_identification_doc.try(:rg),
- r.person.person_identification_doc.rg_issuing_institution.try(:acronym),
- (r.person.person_identification_doc.try(:rg_uf) ? State.find(r.person.person_identification_doc.try(:rg_uf)).acronym : ''),
- r.person.name.nome_proprio,
- r.person.social_name.try(:nome_proprio),
- r.person.birth_date.try(:strftime, '%d/%m/%Y'),
- r.person.father_name.try(:nome_proprio),
- r.person.mom_name.try(:nome_proprio),
- r.person.email,
- r.person.lattes_url,
- r.person.gender.try(:acronym),
- r.person.education_degree.try(:degree),
- r.person.race.try(:race),
- r.person.marital_status.try(:status),
- r.person.blood_type.try(:type),
- r.person.nationality.try(:name),
- r.person.city.try(:state).try(:acronym),
- r.person.city.try(:name),
- r.person.number_children,
- r.person.person_address.street_name,
- r.person.person_address.neighborhood,
- r.person.person_address.number,
- r.person.person_address.complement,
- r.person.person_address.zip_code.to_s,
- r.person.person_address.city.try(:name),
- r.person.person_address.city.try(:state).try(:acronym),
- r.person.people_telephones.map{|t| t.number}.join(' '),
- r.registration_number,
- r.registration_status.try(:description),
- r.health_problems.map {|hp| hp.title}.join(", "),
- r.special_needs.map {|hp| hp.title}.join(","),
- r.registration_admission_types.map {|adp| adp.admission_type.try(:description)}.join(''),
- r.course_matrix.course.name,
- r.course_matrix.course.modality.try(:description),
- r.course_matrix.course.dept.name,
- r.registration_classes.map {|p| p.discipline_class.school_class.identifier}.join('')
- ]
- end
- CSV.generate do |csv|
- csv << info
- csv << header
- for item in dados_alunos
- csv << item
- end
- end
- end
- def at_least_one_telephone
- errors.add(:base, "Insira ao menos um telefone para este departamento.") unless (self.dept_telephones.any?)
- end
- def at_least_one_dept_users
- errors.add(:base, "Insira ao menos um cargo para o departamento.") unless (self.dept_users.any?)
- end
- def parent_dept
- errors.add(:base, "Departamento pai igual ao departamento editado") unless (self.dept_id != self.id and Dept.count > 0)
- end
- def dept_type_desc
- self.dept_type.dept_type
- end
- #departamento pai que nao seja nulo
- def dept_institute
- self.dept
- end
- # searchable do
- # text :id, :acronym, :cnpj, :description, :email, :name, :site, :dept_type_desc
- # end
- def finished_at_date
- if finished_at and started_at
- errors.add(:base, "Data de desativação não pode ser menor que a data de ativação") unless finished_at >= started_at
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement