user status method. Now the sub_role shall be sat with it's status in order to record sub_role status into user object.
Sub_role can be removed normally and the method check_status_record will make sure data is being saved as it should be. Also unnecessary role will be removed if no sub role exists.
This commit is contained in:
		
							parent
							
								
									a4c94c4404
								
							
						
					
					
						commit
						1aacf5e2ce
					
				| 
						 | 
					@ -34,8 +34,40 @@ class User
 | 
				
			||||||
  accepts_nested_attributes_for :attribute_values, :allow_destroy => true 
 | 
					  accepts_nested_attributes_for :attribute_values, :allow_destroy => true 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  before_create :initialize_desktop
 | 
					  before_create :initialize_desktop
 | 
				
			||||||
 | 
					  before_save :check_status_record
 | 
				
			||||||
  scope :remote_account, where(:nccu_id.ne => nil)
 | 
					  scope :remote_account, where(:nccu_id.ne => nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def set_sub_role(sub_role_id,status_id)
 | 
				
			||||||
 | 
					    self.sub_roles << SubRole.find(sub_role_id)
 | 
				
			||||||
 | 
					    self.status_record.store(sub_role_id,status_id)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def get_status(*params)
 | 
				
			||||||
 | 
					    param = params[0]
 | 
				
			||||||
 | 
					    case param.class.to_s
 | 
				
			||||||
 | 
					    when 'String'
 | 
				
			||||||
 | 
					      sr = ::SubRole.find sub_role_id
 | 
				
			||||||
 | 
					    when 'Hash'
 | 
				
			||||||
 | 
					      sr = ::SubRole.first({conditions:{key: param[:key]}})
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    if self.sub_roles.include?(sr)
 | 
				
			||||||
 | 
					      return ::Status.find(status_record.fetch(sr.id.to_s))
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      nil
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def self.find_by_status_and_sub_role_key(sub_role_key,status_key)
 | 
				
			||||||
 | 
					    sr = ::SubRole.first({conditions: { key: sub_role_key }})
 | 
				
			||||||
 | 
					    status = ::Status.first({conditions:{role_id: sr.role.id,key: status_key}})
 | 
				
			||||||
 | 
					    find_by_status(sr.id,status.id)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def self.find_by_status(sub_role_id,status_id)
 | 
				
			||||||
 | 
					    User.where("status_record.#{sub_role_id}" => status_id)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def create_dept_cache
 | 
					  def create_dept_cache
 | 
				
			||||||
    dept_hash = {}
 | 
					    dept_hash = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -91,4 +123,21 @@ class User
 | 
				
			||||||
    self.build_desktop
 | 
					    self.build_desktop
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					  protected
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def check_status_record
 | 
				
			||||||
 | 
					    roles = sub_roles.collect{|t| t.role}.uniq  #get all role from sub_roles
 | 
				
			||||||
 | 
					    sub_roles_ary = sub_roles.collect{|t| t.id.to_s}
 | 
				
			||||||
 | 
					    self.status_record = status_record.keep_if{|sub_role_id, status_id|
 | 
				
			||||||
 | 
					      includeing = sub_roles_ary.include?(sub_role_id) 
 | 
				
			||||||
 | 
					      valide = false
 | 
				
			||||||
 | 
					      if includeing
 | 
				
			||||||
 | 
					        sub_role = SubRole.find sub_role_id
 | 
				
			||||||
 | 
					        valide = sub_role.role.statuses.include? (Status.find status_id)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      (includeing and valide)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue