load->model('mdl_clients'); $this->load->model('custom_fields/mdl_custom_fields'); $this->load->model('custom_fields/mdl_client_custom'); } public function index() { // Display active clients by default redirect('clients/status/active'); } /** * @param string $status * @param int $page */ public function status($status = 'active', $page = 0) { if (is_numeric(array_search($status, array('active', 'inactive')))) { $function = 'is_' . $status; $this->mdl_clients->$function(); } $this->mdl_clients->with_total_balance()->paginate(site_url('clients/status/' . $status), $page); $clients = $this->mdl_clients->result(); $this->layout->set( array( 'records' => $clients, 'filter_display' => true, 'filter_placeholder' => trans('filter_clients'), 'filter_method' => 'filter_clients' ) ); $this->layout->buffer('content', 'clients/index'); $this->layout->render(); } /** * @param null $id */ public function form($id = null) { if ($this->input->post('btn_cancel')) { redirect('clients'); } // Set validation rule based on is_update if ($this->input->post('is_update') == 0 && $this->input->post('client_name') != '') { $check = $this->db->get_where('ip_clients', array( 'client_name' => $this->input->post('client_name'), 'client_surname' => $this->input->post('client_surname') ))->result(); if (!empty($check)) { $this->session->set_flashdata('alert_error', trans('client_already_exists')); redirect('clients/form'); } } if ($this->mdl_clients->run_validation()) { $id = $this->mdl_clients->save($id); $this->load->model('custom_fields/mdl_client_custom'); $result = $this->mdl_client_custom->save_custom($id, $this->input->post('custom')); if ($result !== true) { $this->session->set_flashdata('alert_error', $result); $this->session->set_flashdata('alert_success', null); redirect('clients/form/' . $id); return; } else { redirect('clients/view/' . $id); } } if ($id and !$this->input->post('btn_submit')) { if (!$this->mdl_clients->prep_form($id)) { show_404(); } $this->load->model('custom_fields/mdl_client_custom'); $this->mdl_clients->set_form_value('is_update', true); $client_custom = $this->mdl_client_custom->where('client_id', $id)->get(); if ($client_custom->num_rows()) { $client_custom = $client_custom->row(); unset($client_custom->client_id, $client_custom->client_custom_id); foreach ($client_custom as $key => $val) { $this->mdl_clients->set_form_value('custom[' . $key . ']', $val); } } } elseif ($this->input->post('btn_submit')) { if ($this->input->post('custom')) { foreach ($this->input->post('custom') as $key => $val) { $this->mdl_clients->set_form_value('custom[' . $key . ']', $val); } } } $this->load->model('custom_fields/mdl_custom_fields'); $this->load->model('custom_values/mdl_custom_values'); $this->load->model('custom_fields/mdl_client_custom'); $custom_fields = $this->mdl_custom_fields->by_table('ip_client_custom')->get()->result(); $custom_values = []; foreach ($custom_fields as $custom_field) { if (in_array($custom_field->custom_field_type, $this->mdl_custom_values->custom_value_fields())) { $values = $this->mdl_custom_values->get_by_fid($custom_field->custom_field_id)->result(); $custom_values[$custom_field->custom_field_id] = $values; } } $fields = $this->mdl_client_custom->get_by_clid($id); foreach ($custom_fields as $cfield) { foreach ($fields as $fvalue) { if ($fvalue->client_custom_fieldid == $cfield->custom_field_id) { // TODO: Hackish, may need a better optimization $this->mdl_clients->set_form_value( 'custom[' . $cfield->custom_field_id . ']', $fvalue->client_custom_fieldvalue ); break; } } } $this->load->helper('country'); $this->load->helper('custom_values'); $this->layout->set( array( 'custom_fields' => $custom_fields, 'custom_values' => $custom_values, 'countries' => get_country_list(trans('cldr')), 'selected_country' => $this->mdl_clients->form_value('client_country') ?: get_setting('default_country'), 'languages' => get_available_languages(), ) ); $this->layout->buffer('content', 'clients/form'); $this->layout->render(); } /** * @param int $client_id */ public function view($client_id) { $this->load->model('clients/mdl_client_notes'); $this->load->model('invoices/mdl_invoices'); $this->load->model('quotes/mdl_quotes'); $this->load->model('payments/mdl_payments'); $this->load->model('custom_fields/mdl_custom_fields'); $this->load->model('custom_fields/mdl_client_custom'); $client = $this->mdl_clients->with_total()->with_total_balance()->with_total_paid()->where('ip_clients.client_id', $client_id)->get()->row(); $custom_fields = $this->mdl_client_custom->get_by_client($client_id)->result(); $this->mdl_client_custom->prep_form($client_id); if (!$client) { show_404(); } $this->layout->set( array( 'client' => $client, 'client_notes' => $this->mdl_client_notes->where('client_id', $client_id)->get()->result(), 'invoices' => $this->mdl_invoices->by_client($client_id)->limit(20)->get()->result(), 'quotes' => $this->mdl_quotes->by_client($client_id)->limit(20)->get()->result(), 'payments' => $this->mdl_payments->by_client($client_id)->limit(20)->get()->result(), 'custom_fields' => $custom_fields, 'quote_statuses' => $this->mdl_quotes->statuses(), 'invoice_statuses' => $this->mdl_invoices->statuses() ) ); $this->layout->buffer( array( array( 'invoice_table', 'invoices/partial_invoice_table' ), array( 'quote_table', 'quotes/partial_quote_table' ), array( 'payment_table', 'payments/partial_payment_table' ), array( 'partial_notes', 'clients/partial_notes' ), array( 'content', 'clients/view' ) ) ); $this->layout->render(); } /** * @param int $client_id */ public function delete($client_id) { $this->mdl_clients->delete($client_id); redirect('clients'); } }