public function journal($agent, $agent_id, $voucher_ids, $sort, $where = '')
 {
     include_once APPPATH . "models/helperClasses/Universal_Voucher.php";
     include_once APPPATH . "models/helperClasses/Voucher_Entry.php";
     $this->db->select("voucher_journal.id as voucher_id, voucher_journal.ignored, voucher_entry.id as voucher_entry_id,\r                            voucher_journal.voucher_date, voucher_journal.detail, voucher_journal.person_tid,\r                            voucher_journal.trip_id,voucher_journal.trip_product_detail_id, voucher_journal.tanker_id, tankers.truck_number as tanker_number,\r                            voucher_journal.entryDate,\r                            voucher_entry.id as voucher_entry_id, voucher_entry.related_other_agent,\r                             voucher_entry.related_customer, voucher_entry.related_contractor,\r                            voucher_entry.description, account_titles.title, account_titles.id as account_title_id,\r                             account_titles.type as ac_type, voucher_entry.debit_amount,\r                            voucher_entry.credit_amount, voucher_entry.dr_cr,\r                            companies.name as company_name, voucher_entry.related_company,\r                            other_agents.name as related_other_agent_name, customers.name as related_customer_name, carriage_contractors.name as related_contractor_name, companies.name as related_company_name,\r        ");
     $this->db->from('voucher_journal');
     $this->db->join('voucher_entry', 'voucher_entry.journal_voucher_id = voucher_journal.id', 'left');
     $this->db->join('other_agents', 'other_agents.id = voucher_entry.related_other_agent', 'left');
     $this->db->join('customers', 'customers.id = voucher_entry.related_customer', 'left');
     $this->db->join('carriage_contractors', 'carriage_contractors.id = voucher_entry.related_contractor', 'left');
     $this->db->join('companies', 'companies.id = voucher_entry.related_company', 'left');
     $this->db->join('account_titles', 'account_titles.id = voucher_entry.account_title_id', 'left');
     $this->db->join('tankers', 'tankers.id = voucher_journal.tanker_id', 'left');
     if ($voucher_ids != "") {
         $this->db->where_in('voucher_journal.id', $voucher_ids);
     }
     //sorting
     if ($sort != '') {
         $this->db->order_by('voucher_journal.id', $sort['order']);
     } else {
         $this->db->order_by('voucher_journal.id', 'asc');
     }
     $this->db->order_by('voucher_entry.dr_cr', 'asc');
     $result = $this->db->get()->result();
     $previous_voucher_id = -1;
     $temp_voucher = new Universal_Voucher();
     $final_journal = array();
     $count = 0;
     foreach ($result as $voucher) {
         $count++;
         if ($voucher->voucher_id != $previous_voucher_id) {
             if ($previous_voucher_id != -1) {
                 array_push($final_journal, $temp_voucher);
             }
             $previous_voucher_id = $voucher->voucher_id;
             $temp_voucher = new Universal_Voucher();
             //setting data in the parent object
             $temp_voucher->voucher_id = $voucher->voucher_id;
             $temp_voucher->ignore = $voucher->ignored;
             $temp_voucher->voucher_details = $voucher->detail;
             $temp_voucher->voucher_date = $voucher->voucher_date;
             $temp_voucher->tanker_id = $voucher->tanker_id;
             $temp_voucher->tanker_number = $voucher->tanker_number;
             $temp_voucher->trip_id = $voucher->trip_id;
             $temp_voucher->trip_detail_id = $voucher->trip_product_detail_id;
             $person = explode('.', $voucher->person_tid);
             $temp_voucher->person_id = $person[1];
             $temp_voucher->person = $person[0];
         }
         //making a voucher Entry
         $temp_voucher_entry = new Voucher_Entry();
         //setting data in temp_voucher_entry
         $temp_voucher_entry->setId($voucher->voucher_entry_id);
         $temp_voucher_entry->setAc_type($voucher->ac_type);
         $temp_voucher_entry->setTitle($voucher->title);
         $temp_voucher_entry->setAccount_title_id($voucher->account_title_id);
         $temp_voucher_entry->setDescription($voucher->description);
         //finding the related agent
         $related_agent = '';
         $related_agent_id = '';
         $related_agent_name = '';
         if ($voucher->related_other_agent != 0) {
             $related_agent = "other_agents";
             $related_agent_id = $voucher->related_other_agent;
             $related_agent_name = $voucher->related_other_agent_name;
         } else {
             if ($voucher->related_customer != 0) {
                 $related_agent = "customers";
                 $related_agent_id = $voucher->related_customer;
                 $related_agent_name = $voucher->related_customer_name;
             } else {
                 if ($voucher->related_contractor != 0) {
                     $related_agent = "carriage_contractors";
                     $related_agent_id = $voucher->related_contractor;
                     $related_agent_name = $voucher->related_contractor_name;
                 } else {
                     if ($voucher->related_company != 0) {
                         $related_agent = "companies";
                         $related_agent_id = $voucher->related_company;
                         $related_agent_name = $voucher->related_company_name;
                     } else {
                         $related_agent = "self";
                         $related_agent_id = 0;
                         $related_agent_name = '';
                     }
                 }
             }
         }
         $temp_voucher_entry->setRelated_agent($related_agent);
         $temp_voucher_entry->setRelated_agent_id($related_agent_id);
         $temp_voucher_entry->setRelated_agent_name($related_agent_name);
         $temp_voucher_entry->setDebit($voucher->debit_amount);
         $temp_voucher_entry->setCredit($voucher->credit_amount);
         $dr_cr = $voucher->dr_cr == 0 ? 'credit' : 'debit';
         $temp_voucher_entry->setDr_cr($dr_cr);
         $temp_voucher_entry->setJournal_voucher_id($voucher->voucher_id);
         //insert voucher entry into the voucher
         array_unshift($temp_voucher->entries, $temp_voucher_entry);
         //checking if the record is final
         if ($count == sizeof($result)) {
             array_push($final_journal, $temp_voucher);
         }
     }
     return $final_journal;
 }