log = LoggerManager::getLogger('case'); $this->db = new PearDatabase(); } var $new_schema = true; function create_tables () { $query = 'CREATE TABLE '.$this->table_name.' ( '; $query .='id char(36) NOT NULL'; $query .=', number int( 11 ) NOT NULL auto_increment'; $query .=', date_entered datetime NOT NULL'; $query .=', date_modified datetime NOT NULL'; $query .=', modified_user_id char(36) NOT NULL'; $query .=', assigned_user_id char(36)'; $query .=', deleted bool NOT NULL default 0'; $query .=', name varchar(255)'; $query .=', account_name char(100)'; $query .=', account_id char(36)'; $query .=', status char(25)'; $query .=', description text'; $query .=', KEY ( NUMBER )'; $query .=', PRIMARY KEY ( ID ) )'; $this->db->query($query,true,"Error creating table: "); //TODO Clint 4/27 - add exception handling logic here if the table can't be created. $query = "CREATE TABLE $this->rel_contact_table ("; $query .='id char(36) NOT NULL'; $query .=', contact_id char(36)'; $query .=', case_id char(36)'; $query .=', contact_role char(50)'; $query .=', deleted bool NOT NULL default 0'; $query .=', PRIMARY KEY ( ID ) )'; $this->db->query($query,true,"Error creating case/contact relationship table: "); // Create the indexes $this->create_index("create index idx_case_name on cases (name)"); $this->create_index("create index idx_con_case_con on contacts_cases (contact_id)"); $this->create_index("create index idx_con_case_case on contacts_cases (case_id)"); } function drop_tables () { $query = 'DROP TABLE IF EXISTS '.$this->table_name; $this->db->query($query); $query = 'DROP TABLE IF EXISTS '.$this->rel_account_table; $this->db->query($query); $query = 'DROP TABLE IF EXISTS '.$this->rel_contact_table; $this->db->query($query); //TODO Clint 4/27 - add exception handling logic here if the table can't be dropped. } function get_summary_text() { return "$this->name"; } function create_list_query($order_by, $where) { // Fill in the assigned_user_name $this->assigned_user_name = get_assigned_user_name($this->assigned_user_id); $query = "SELECT cases.id, cases.assigned_user_id, cases.status, cases.name, cases.number, accounts.name as account_name, cases.account_id FROM cases LEFT JOIN accounts ON cases.account_id=accounts.id "; $where_auto = " (accounts.deleted IS NULL OR accounts.deleted=0 ) AND cases.deleted=0"; if($where != "") $query .= "where $where AND ".$where_auto; else $query .= "where ".$where_auto; if($order_by != "") $query .= " ORDER BY cases.$order_by"; else $query .= " ORDER BY cases.name"; return $query; } function create_export_query($order_by, $where) { $query = "SELECT cases.*, accounts.name as account_name, users.user_name as assigned_user_name FROM cases LEFT JOIN users ON cases.assigned_user_id=users.id LEFT JOIN accounts ON cases.account_id=accounts.id "; $where_auto = " (accounts.deleted IS NULL OR accounts.deleted=0) AND cases.deleted=0 AND users.status='ACTIVE' "; if($where != "") $query .= "where $where AND ".$where_auto; else $query .= "where ".$where_auto; if($order_by != "") $query .= " ORDER BY $order_by"; else $query .= " ORDER BY cases.name"; return $query; } function save_relationship_changes($is_update) { $this->clear_case_account_relationship($this->id); if($this->account_id != "") { $this->set_case_account_relationship($this->id, $this->account_id); } if($this->contact_id != "") { $this->set_case_contact_relationship($this->id, $this->contact_id); } if($this->task_id != "") { $this->set_case_task_relationship($this->id, $this->task_id); } if($this->note_id != "") { $this->set_case_note_relationship($this->id, $this->note_id); } if($this->meeting_id != "") { $this->set_case_meeting_relationship($this->id, $this->meeting_id); } if($this->call_id != "") { $this->set_case_call_relationship($this->id, $this->call_id); } if($this->email_id != "") { $this->set_case_email_relationship($this->id, $this->email_id); } } function set_case_account_relationship($case_id, $account_id) { $query = "update cases set account_id='$account_id' where id='$case_id'"; $this->db->query($query,true,"Error setting account to case relationship: "); } function clear_case_account_relationship($case_id) { $query = "UPDATE cases set account_id='' where id='$case_id' and deleted=0"; $this->db->query($query,true,"Error clearing account to case relationship: "); } function set_case_contact_relationship($case_id, $contact_id) { global $app_list_strings; $default = $app_list_strings['case_relationship_type_default_key']; $query = "insert into contacts_cases set id='".create_guid()."', case_id='$case_id', contact_id='$contact_id', contact_role='$default'"; $this->db->query($query,true,"Error setting case to contact relationship: "); } function clear_case_contact_relationship($case_id) { $query = "update contacts_cases set deleted=1 where case_id='$case_id' AND deleted=0"; $this->db->query($query,true,"Error clearing case to contact relationship: "); } function set_case_task_relationship($case_id, $task_id) { $query = "UPDATE tasks set parent_id='$case_id', parent_type='Cases' where id='$task_id' AND deleted=0"; $this->db->query($query,true,"Error setting case to task relationship: "); } function clear_case_task_relationship($case_id) { $query = "UPDATE tasks set parent_id='', parent_type='' where parent_id='$case_id' AND deleted=0"; $this->db->query($query,true,"Error clearing case to task relationship: "); } function set_case_note_relationship($case_id, $note_id) { $query = "UPDATE notes set parent_id='$case_id', parent_type='Cases' where id='$note_id' AND deleted=0"; $this->db->query($query,true,"Error setting case to note relationship: "); } function clear_case_note_relationship($case_id) { $query = "UPDATE notes set parent_id='', parent_type='' where parent_id='$case_id' AND deleted=0"; $this->db->query($query,true,"Error clearing case to note relationship: "); } function set_case_meeting_relationship($case_id, $meeting_id) { $query = "UPDATE meetings set parent_id='$case_id', parent_type='Cases' where id='$meeting_id' AND deleted=0"; $this->db->query($query,true,"Error setting case to meeting relationship: "); } function clear_case_meeting_relationship($case_id) { $query = "UPDATE meetings set parent_id='', parent_type='' where parent_id='$case_id' AND deleted=0"; $this->db->query($query,true,"Error clearing case to meeting relationship: "); } function set_case_call_relationship($case_id, $call_id) { $query = "UPDATE calls set parent_id='$case_id', parent_type='Cases' where id='$call_id' AND deleted=0"; $this->db->query($query,true,"Error setting case to call relationship: "); } function clear_case_call_relationship($case_id) { $query = "UPDATE calls set parent_id='', parent_type='' where parent_id='$case_id' AND deleted=0"; $this->db->query($query,true,"Error clearing case to call relationship: "); } function set_case_email_relationship($email_id, $call_id) { $query = "UPDATE emails set parent_id='$case_id', parent_type='Cases' where id='$email_id' AND deleted=0"; $this->db->query($query,true,"Error setting email to case relationship: "); } function clear_case_email_relationship($case_id) { $query = "UPDATE emails set parent_id='', parent_type='' where parent_id='$case_id' AND deleted=0"; $this->db->query($query,true,"Error clearing email to case relationship: "); } function mark_relationships_deleted($id) { $this->clear_case_contact_relationship($id); $this->clear_case_task_relationship($id); $this->clear_case_note_relationship($id); $this->clear_case_meeting_relationship($id); $this->clear_case_call_relationship($id); $this->clear_case_email_relationship($id); } function fill_in_additional_list_fields() { // Fill in the assigned_user_name $this->assigned_user_name = get_assigned_user_name($this->assigned_user_id); } function fill_in_additional_detail_fields() { // Fill in the assigned_user_name $this->assigned_user_name = get_assigned_user_name($this->assigned_user_id); $query = "SELECT acc.id, acc.name from accounts as acc, cases where acc.id = cases.account_id and cases.id = '$this->id' and cases.deleted=0 and acc.deleted=0"; $result = $this->db->query($query,true," Error filling in additional detail fields: "); // Get the id and the name. $row = $this->db->fetchByAssoc($result); if($row != null) { $this->account_name = stripslashes($row['name']); $this->account_id = $row['id']; } } /** Returns a list of the associated contacts * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.. * All Rights Reserved.. * Contributor(s): ______________________________________.. */ function get_contacts() { // First, get the list of IDs. $query = "SELECT c.id, c.first_name, c.last_name, c.title, c.yahoo_id, c.email1, c.phone_work, o_c.contact_role as case_role, o_c.id as case_rel_id ". "from contacts_cases o_c, contacts c ". "where o_c.case_id = '$this->id' and o_c.deleted=0 and c.id = o_c.contact_id AND c.deleted=0"; $temp = Array('id', 'first_name', 'last_name', 'title', 'yahoo_id', 'email1', 'phone_work', 'case_role', 'case_rel_id'); return $this->build_related_list2($query, new Contact(), $temp); } /** Returns a list of the associated tasks * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.. * All Rights Reserved.. * Contributor(s): ______________________________________.. */ function get_tasks() { // First, get the list of IDs. $query = "SELECT id from tasks where parent_id='$this->id' AND deleted=0"; return $this->build_related_list($query, new Task()); } /** Returns a list of the associated notes * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.. * All Rights Reserved.. * Contributor(s): ______________________________________.. */ function get_notes() { // First, get the list of IDs. $query = "SELECT id from notes where parent_id='$this->id' AND deleted=0"; return $this->build_related_list($query, new Note()); } /** Returns a list of the associated meetings * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.. * All Rights Reserved.. * Contributor(s): ______________________________________.. */ function get_meetings() { // First, get the list of IDs. $query = "SELECT id from meetings where parent_id='$this->id' AND deleted=0"; return $this->build_related_list($query, new Meeting()); } /** Returns a list of the associated calls * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.. * All Rights Reserved.. * Contributor(s): ______________________________________.. */ function get_calls() { // First, get the list of IDs. $query = "SELECT id from calls where parent_id='$this->id' AND deleted=0"; return $this->build_related_list($query, new Call()); } /** Returns a list of the associated emails * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.. * All Rights Reserved.. * Contributor(s): ______________________________________.. */ function get_emails() { // First, get the list of IDs. $query = "SELECT id from emails where parent_id='$this->id' AND deleted=0"; return $this->build_related_list($query, new Email()); } /** builds a generic search based on the query string using or do not include any $this-> because this is called on without having the class instantiated */ function build_generic_where_clause ($the_query_string) { $where_clauses = Array(); $the_query_string = addslashes($the_query_string); array_push($where_clauses, "cases.name like '$the_query_string%'"); if (is_numeric($the_query_string)) array_push($where_clauses, "cases.number like '$the_query_string%'"); $the_where = ""; foreach($where_clauses as $clause) { if($the_where != "") $the_where .= " or "; $the_where .= $clause; } return $the_where; } } ?>