Advertisement
Guest User

Untitled

a guest
Apr 25th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 6.41 KB | None | 0 0
  1. # encoding: utf-8
  2. # ACRESCENTADA ESTA LINHA PARA PERMITIR TIRAR OS CAMPOS DE PESQUISA CUSTOMIZÁVEL DO ESTUDANTE EM MÚLTIPLOS MODELS
  3. include RansackableAttributes
  4.  
  5. class Dept < ActiveRecord::Base  
  6.   spare_ransack :id, :acronym, :cnpj, :started_at, :finished_at, :site, :email, :description,
  7.                 :dept_type_id, :dept_id, :created_at, :updated_at, :code_number, :creation_law  
  8.   belongs_to :dept_type
  9.   belongs_to :dept
  10.   has_many :children_depts, :dependent => :restrict, :class_name => 'Dept', :foreign_key => 'dept_id'
  11.  
  12.   has_many :person_person_types, :through => :person_person_type_depts
  13.   has_many :person_person_type_depts, :dependent => :destroy
  14.  
  15.   has_one :dept_address, :dependent => :destroy
  16.   has_many :dept_telephones, :dependent => :destroy
  17.   has_many :teaching_equipaments, :dependent => :destroy
  18.   has_many :class_seasons, :dependent => :restrict
  19.   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
  20.  
  21.   validate :at_least_one_telephone
  22.   # validate :at_least_one_dept_users
  23.  
  24.   has_many :dept_employees, :through => :dept_users, :class_name => 'User'
  25.   has_many :dept_users, :dependent => :destroy
  26.  
  27.   #Validacoes
  28.   validates_presence_of :name, :acronym, :code_number, :dept_type_id
  29.   validates_uniqueness_of :name, :acronym, :code_number
  30.   validates :started_at, :presence => true
  31.  
  32.   validate :finished_at_date
  33.   before_update :parent_dept
  34.  
  35.   has_many :courses, :dependent => :restrict
  36.   accepts_nested_attributes_for :dept_address, :dept_telephones, :dept_users, :allow_destroy => true
  37.  
  38.   has_paper_trail
  39.   #before_update :prevent_parent_loop
  40.  
  41.   # def prevent_parent_loop
  42.   #    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)
  43.   # end
  44.  
  45.   validate :self_parent?
  46.   def self_parent?
  47.     errors.add(:dept_id, "Um departamento nao pode ser pai de si mesmo.") if self.dept == self
  48.   end
  49.  
  50.   def depts_and_childs(depts)
  51.     result_depts = depts
  52.     depts.each do |d|
  53.       if d.children_depts.any?
  54.         result_depts += depts_and_childs(d.children_depts)
  55.       end
  56.     end
  57.     result_depts
  58.   end
  59.  
  60.   def name_for_ad
  61.     self.name.gsub(' ','').remover_acentos
  62.   end
  63.  
  64.   def depts_and_fathers(depts)
  65.     result_depts = depts
  66.     depts.each do |d|
  67.       if d.try(:dept_id)
  68.         result_depts += depts_and_fathers([d.dept])
  69.       end
  70.     end
  71.     result_depts
  72.   end
  73.  
  74.   def students_to_csv
  75.     info = ['','','','',"Campus: #{self.try(:name).upcase}", "Sigla: #{self.try(:acronym)} - Código: #{self.code_number}"]
  76.     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"]
  77.     dados_alunos = []
  78.    
  79.     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|
  80.       dados_alunos << [
  81.         r.person.person_identification_doc.try(:cpf).to_s,
  82.         r.person.person_identification_doc.try(:rg),
  83.         r.person.person_identification_doc.rg_issuing_institution.try(:acronym),
  84.         (r.person.person_identification_doc.try(:rg_uf) ? State.find(r.person.person_identification_doc.try(:rg_uf)).acronym : ''),
  85.         r.person.name.nome_proprio,
  86.         r.person.social_name.try(:nome_proprio),
  87.         r.person.birth_date.try(:strftime, '%d/%m/%Y'),
  88.         r.person.father_name.try(:nome_proprio),
  89.         r.person.mom_name.try(:nome_proprio),
  90.         r.person.email,
  91.         r.person.lattes_url,
  92.         r.person.gender.try(:acronym),
  93.         r.person.education_degree.try(:degree),
  94.         r.person.race.try(:race),
  95.         r.person.marital_status.try(:status),
  96.         r.person.blood_type.try(:type),
  97.         r.person.nationality.try(:name),
  98.         r.person.city.try(:state).try(:acronym),
  99.         r.person.city.try(:name),
  100.         r.person.number_children,
  101.         r.person.person_address.street_name,
  102.         r.person.person_address.neighborhood,
  103.         r.person.person_address.number,
  104.         r.person.person_address.complement,
  105.         r.person.person_address.zip_code.to_s,
  106.         r.person.person_address.city.try(:name),
  107.         r.person.person_address.city.try(:state).try(:acronym),
  108.         r.person.people_telephones.map{|t| t.number}.join(' '),
  109.         r.registration_number,
  110.         r.registration_status.try(:description),
  111.         r.health_problems.map {|hp| hp.title}.join(", "),
  112.         r.special_needs.map {|hp| hp.title}.join(","),
  113.         r.registration_admission_types.map {|adp| adp.admission_type.try(:description)}.join(''),
  114.         r.course_matrix.course.name,
  115.         r.course_matrix.course.modality.try(:description),
  116.         r.course_matrix.course.dept.name,
  117.         r.registration_classes.map {|p| p.discipline_class.school_class.identifier}.join('')
  118.       ]
  119.     end
  120.  
  121.  
  122.     CSV.generate do |csv|
  123.       csv << info
  124.       csv << header
  125.       for item in dados_alunos
  126.         csv << item
  127.       end
  128.     end
  129.   end
  130.  
  131.   def at_least_one_telephone
  132.     errors.add(:base, "Insira ao menos um telefone para este departamento.") unless (self.dept_telephones.any?)
  133.   end
  134.  
  135.   def at_least_one_dept_users
  136.     errors.add(:base, "Insira ao menos um cargo para o departamento.") unless (self.dept_users.any?)
  137.   end
  138.  
  139.   def parent_dept
  140.     errors.add(:base, "Departamento pai igual ao departamento editado") unless (self.dept_id != self.id and Dept.count > 0)
  141.   end
  142.  
  143.   def dept_type_desc
  144.     self.dept_type.dept_type
  145.   end
  146.  
  147.   #departamento pai que nao seja nulo
  148.   def dept_institute
  149.     self.dept
  150.   end
  151.  
  152.   # searchable do
  153.   #   text :id, :acronym, :cnpj, :description, :email, :name, :site, :dept_type_desc
  154.   # end
  155.  
  156.   def finished_at_date
  157.     if finished_at and started_at
  158.      errors.add(:base, "Data de desativação não pode ser menor que a data de ativação") unless finished_at >= started_at
  159.     end
  160.   end
  161.  
  162.  
  163. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement