mirror of
https://github.com/opensourcepos/opensourcepos.git
synced 2026-01-21 15:57:57 -05:00
Remove id|name format in giftcards customer selection Cleanup duplicated custom field suggestion in Items Migrate table search suggestion to jQuery UI Add jquery UI bootstrap theme
369 lines
9.8 KiB
PHP
369 lines
9.8 KiB
PHP
<?php
|
|
class Employee extends Person
|
|
{
|
|
/*
|
|
Determines if a given person_id is an employee
|
|
*/
|
|
function exists($person_id)
|
|
{
|
|
$this->db->from('employees');
|
|
$this->db->join('people', 'people.person_id = employees.person_id');
|
|
$this->db->where('employees.person_id',$person_id);
|
|
$query = $this->db->get();
|
|
|
|
return ($query->num_rows()==1);
|
|
}
|
|
|
|
function get_total_rows()
|
|
{
|
|
$this->db->from('employees');
|
|
$this->db->where('deleted',0);
|
|
return $this->db->count_all_results();
|
|
}
|
|
/*
|
|
Returns all the employees
|
|
*/
|
|
function get_all($limit=10000, $offset=0)
|
|
{
|
|
$this->db->from('employees');
|
|
$this->db->where('deleted',0);
|
|
$this->db->join('people','employees.person_id=people.person_id');
|
|
$this->db->order_by("last_name", "asc");
|
|
$this->db->limit($limit);
|
|
$this->db->offset($offset);
|
|
return $this->db->get();
|
|
}
|
|
|
|
/*
|
|
Gets information about a particular employee
|
|
*/
|
|
function get_info($employee_id)
|
|
{
|
|
$this->db->from('employees');
|
|
$this->db->join('people', 'people.person_id = employees.person_id');
|
|
$this->db->where('employees.person_id',$employee_id);
|
|
$query = $this->db->get();
|
|
|
|
if($query->num_rows()==1)
|
|
{
|
|
return $query->row();
|
|
}
|
|
else
|
|
{
|
|
//Get empty base parent object, as $employee_id is NOT an employee
|
|
$person_obj=parent::get_info(-1);
|
|
|
|
//Get all the fields from employee table
|
|
$fields = $this->db->list_fields('employees');
|
|
|
|
//append those fields to base parent object, we we have a complete empty object
|
|
foreach ($fields as $field)
|
|
{
|
|
$person_obj->$field='';
|
|
}
|
|
|
|
return $person_obj;
|
|
}
|
|
}
|
|
|
|
/*
|
|
Gets information about multiple employees
|
|
*/
|
|
function get_multiple_info($employee_ids)
|
|
{
|
|
$this->db->from('employees');
|
|
$this->db->join('people', 'people.person_id = employees.person_id');
|
|
$this->db->where_in('employees.person_id',$employee_ids);
|
|
$this->db->order_by("last_name", "asc");
|
|
return $this->db->get();
|
|
}
|
|
|
|
/*
|
|
Inserts or updates an employee
|
|
*/
|
|
function save_employee(&$person_data, &$employee_data,&$grants_data,$employee_id=false)
|
|
{
|
|
$success=false;
|
|
|
|
//Run these queries as a transaction, we want to make sure we do all or nothing
|
|
$this->db->trans_start();
|
|
|
|
if(parent::save($person_data,$employee_id))
|
|
{
|
|
if (!$employee_id or !$this->exists($employee_id))
|
|
{
|
|
$employee_data['person_id'] = $employee_id = $person_data['person_id'];
|
|
$success = $this->db->insert('employees',$employee_data);
|
|
}
|
|
else
|
|
{
|
|
$this->db->where('person_id', $employee_id);
|
|
$success = $this->db->update('employees',$employee_data);
|
|
}
|
|
|
|
//We have either inserted or updated a new employee, now lets set permissions.
|
|
if($success)
|
|
{
|
|
//First lets clear out any grants the employee currently has.
|
|
$success=$this->db->delete('grants', array('person_id' => $employee_id));
|
|
|
|
//Now insert the new grants
|
|
if($success)
|
|
{
|
|
foreach($grants_data as $permission_id)
|
|
{
|
|
$success = $this->db->insert('grants',
|
|
array(
|
|
'permission_id'=>$permission_id,
|
|
'person_id'=>$employee_id));
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
$this->db->trans_complete();
|
|
return $success;
|
|
}
|
|
|
|
/*
|
|
Deletes one employee
|
|
*/
|
|
function delete($employee_id)
|
|
{
|
|
$success=false;
|
|
|
|
//Don't let employee delete their self
|
|
if($employee_id==$this->get_logged_in_employee_info()->person_id)
|
|
return false;
|
|
|
|
//Run these queries as a transaction, we want to make sure we do all or nothing
|
|
$this->db->trans_start();
|
|
|
|
//Delete permissions
|
|
if($this->db->delete('grants', array('person_id' => $employee_id)))
|
|
{
|
|
$this->db->where('person_id', $employee_id);
|
|
$success = $this->db->update('employees', array('deleted' => 1));
|
|
}
|
|
$this->db->trans_complete();
|
|
return $success;
|
|
}
|
|
|
|
/*
|
|
Deletes a list of employees
|
|
*/
|
|
function delete_list($employee_ids)
|
|
{
|
|
$success=false;
|
|
|
|
//Don't let employee delete their self
|
|
if(in_array($this->get_logged_in_employee_info()->person_id,$employee_ids))
|
|
return false;
|
|
|
|
//Run these queries as a transaction, we want to make sure we do all or nothing
|
|
$this->db->trans_start();
|
|
|
|
$this->db->where_in('person_id',$employee_ids);
|
|
//Delete permissions
|
|
if ($this->db->delete('grants'))
|
|
{
|
|
//delete from employee table
|
|
$this->db->where_in('person_id',$employee_ids);
|
|
$success = $this->db->update('employees', array('deleted' => 1));
|
|
}
|
|
$this->db->trans_complete();
|
|
return $success;
|
|
}
|
|
|
|
/*
|
|
Get search suggestions to find employees
|
|
*/
|
|
function get_search_suggestions($search,$limit=5)
|
|
{
|
|
$suggestions = array();
|
|
|
|
$this->db->from('employees');
|
|
$this->db->join('people','employees.person_id=people.person_id');
|
|
$this->db->where("(first_name LIKE '%".$this->db->escape_like_str($search)."%' or
|
|
last_name LIKE '%".$this->db->escape_like_str($search)."%' or
|
|
CONCAT(`first_name`,' ',`last_name`) LIKE '%".$this->db->escape_like_str($search)."%') and deleted=0");
|
|
$this->db->order_by("last_name", "asc");
|
|
$by_name = $this->db->get();
|
|
foreach($by_name->result() as $row)
|
|
{
|
|
$suggestions[]=array('value' => $row->person_id, 'label' => $row->first_name.' '.$row->last_name);
|
|
}
|
|
|
|
$this->db->from('employees');
|
|
$this->db->join('people','employees.person_id=people.person_id');
|
|
$this->db->where('deleted', 0);
|
|
$this->db->like("email",$search);
|
|
$this->db->order_by("email", "asc");
|
|
$by_email = $this->db->get();
|
|
foreach($by_email->result() as $row)
|
|
{
|
|
$suggestions[]=array('value' => $row->person_id, 'label' => $row->email);
|
|
}
|
|
|
|
$this->db->from('employees');
|
|
$this->db->join('people','employees.person_id=people.person_id');
|
|
$this->db->where('deleted', 0);
|
|
$this->db->like("username",$search);
|
|
$this->db->order_by("username", "asc");
|
|
$by_username = $this->db->get();
|
|
foreach($by_username->result() as $row)
|
|
{
|
|
$suggestions[]=array('value' => $row->person_id, 'label' => $row->username);
|
|
}
|
|
|
|
|
|
$this->db->from('employees');
|
|
$this->db->join('people','employees.person_id=people.person_id');
|
|
$this->db->where('deleted', 0);
|
|
$this->db->like("phone_number",$search);
|
|
$this->db->order_by("phone_number", "asc");
|
|
$by_phone = $this->db->get();
|
|
foreach($by_phone->result() as $row)
|
|
{
|
|
$suggestions[]=array('value' => $row->person_id, 'label' => $row->phone_number);
|
|
}
|
|
|
|
|
|
//only return $limit suggestions
|
|
if(count($suggestions > $limit))
|
|
{
|
|
$suggestions = array_slice($suggestions, 0,$limit);
|
|
}
|
|
return $suggestions;
|
|
|
|
}
|
|
|
|
function get_found_rows($search)
|
|
{
|
|
$this->db->from('employees');
|
|
$this->db->join('people','employees.person_id=people.person_id');
|
|
$this->db->where("(first_name LIKE '%".$this->db->escape_like_str($search)."%' or
|
|
last_name LIKE '%".$this->db->escape_like_str($search)."%' or
|
|
email LIKE '%".$this->db->escape_like_str($search)."%' or
|
|
phone_number LIKE '%".$this->db->escape_like_str($search)."%' or
|
|
username LIKE '%".$this->db->escape_like_str($search)."%' or
|
|
CONCAT(`first_name`,' ',`last_name`) LIKE '%".$this->db->escape_like_str($search)."%') and deleted=0");
|
|
return $this->db->get()->num_rows();
|
|
}
|
|
|
|
/*
|
|
Preform a search on employees
|
|
*/
|
|
function search($search, $rows = 0, $limit_from = 0)
|
|
{
|
|
$this->db->from('employees');
|
|
$this->db->join('people','employees.person_id=people.person_id');
|
|
$this->db->where("(first_name LIKE '%".$this->db->escape_like_str($search)."%' or
|
|
last_name LIKE '%".$this->db->escape_like_str($search)."%' or
|
|
email LIKE '%".$this->db->escape_like_str($search)."%' or
|
|
phone_number LIKE '%".$this->db->escape_like_str($search)."%' or
|
|
username LIKE '%".$this->db->escape_like_str($search)."%' or
|
|
CONCAT(`first_name`,' ',`last_name`) LIKE '%".$this->db->escape_like_str($search)."%') and deleted=0");
|
|
$this->db->order_by("last_name", "asc");
|
|
if ($rows > 0) {
|
|
$this->db->limit($rows, $limit_from);
|
|
}
|
|
return $this->db->get();
|
|
}
|
|
|
|
/*
|
|
Attempts to login employee and set session. Returns boolean based on outcome.
|
|
*/
|
|
function login($username, $password)
|
|
{
|
|
$query = $this->db->get_where('employees', array('username' => $username,'password'=>md5($password), 'deleted'=>0), 1);
|
|
if ($query->num_rows() ==1)
|
|
{
|
|
$row=$query->row();
|
|
$this->session->set_userdata('person_id', $row->person_id);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/*
|
|
Logs out a user by destorying all session data and redirect to login
|
|
*/
|
|
function logout()
|
|
{
|
|
$this->session->sess_destroy();
|
|
redirect('login');
|
|
}
|
|
|
|
/*
|
|
Determins if a employee is logged in
|
|
*/
|
|
function is_logged_in()
|
|
{
|
|
return $this->session->userdata('person_id')!=false;
|
|
}
|
|
|
|
/*
|
|
Gets information about the currently logged in employee.
|
|
*/
|
|
function get_logged_in_employee_info()
|
|
{
|
|
if($this->is_logged_in())
|
|
{
|
|
return $this->get_info($this->session->userdata('person_id'));
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/*
|
|
* Determines whether the employee has access to at least one submodule
|
|
*/
|
|
function has_module_grant($permission_id,$person_id)
|
|
{
|
|
$this->db->from('grants');
|
|
$this->db->like('permission_id', $permission_id, 'after');
|
|
$this->db->where('person_id',$person_id);
|
|
$result = $this->db->get();
|
|
$result_count = $result->num_rows();
|
|
if ($result_count != 1)
|
|
{
|
|
return $result_count != 0;
|
|
}
|
|
return $this->has_subpermissions($permission_id);
|
|
}
|
|
|
|
function has_subpermissions($permission_id)
|
|
{
|
|
$this->db->from('permissions');
|
|
$this->db->like('permission_id', $permission_id.'_', 'after');
|
|
$result = $this->db->get();
|
|
return $result->num_rows() == 0;
|
|
}
|
|
|
|
/*
|
|
Determines whether the employee specified employee has access the specific module.
|
|
*/
|
|
function has_grant($permission_id,$person_id)
|
|
{
|
|
//if no module_id is null, allow access
|
|
if($permission_id==null)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
$query = $this->db->get_where('grants', array('person_id'=>$person_id,'permission_id'=>$permission_id), 1);
|
|
return ($query->num_rows() == 1);
|
|
}
|
|
|
|
function get_employee_grants($person_id)
|
|
{
|
|
$this->db->from('grants');
|
|
$this->db->where('person_id',$person_id);
|
|
return $this->db->get()->result_array();
|
|
}
|
|
|
|
}
|
|
?>
|