array( 'label' => trans('draft'), 'class' => 'draft', 'href' => 'invoices/status/draft' ), '2' => array( 'label' => trans('sent'), 'class' => 'sent', 'href' => 'invoices/status/sent' ), '3' => array( 'label' => trans('viewed'), 'class' => 'viewed', 'href' => 'invoices/status/viewed' ), '4' => array( 'label' => trans('paid'), 'class' => 'paid', 'href' => 'invoices/status/paid' ), // '5' => array( // 'label' => trans('Credit Note Created'), // 'class' => 'credit', // 'href' => 'invoices/status/credit' // ) ); } public function GetPaymentDays($InvID,$ClientID,$client_custom_fieldid) { $this->db->select('inv.client_id,client_custom_fieldid,client_custom_fieldvalue,invoice_id'); $this->db->from('ip_client_custom clients'); $this->db->join('ip_invoices inv', 'clients.client_id=inv.client_id'); $this->db->where('inv.invoice_id',$InvID); $this->db->where('client_custom_fieldid',$client_custom_fieldid); $this->db->where('inv.client_id',$ClientID); $query = $this->db->get(); return $query->result(); } public function GetSecondaryAddress($ClientID) { $subQuery = "select group_concat(client_custom_fieldvalue separator '
') as Secondary from ip_client_custom where client_id =? and client_custom_fieldid in (12,45,46,47,48,50,49)"; $query = $this->db->query($subQuery,array($ClientID)); return $query->result(); } public function GetClient_Details() { $subQuery = "select * from ip_clients"; $query = $this->db->query($subQuery,array()); return $query->result(); } // public function GetQuoteamount($quoteid) // { // $subQuery = "select item_sgst_percentage,item_cgst_percentage,item_igst_percentage from ip_quote_item_amounts where invoice_id=?"; // $query = $this->db->query($subQuery,array($invoice_id)); // return $query->result(); // } public function get_status($invoice_id) { $subQuery = "select invoice_status_id from ip_invoices where invoice_id=?"; $query = $this->db->query($subQuery,array($invoice_id)); return $query->result(); } public function Get_invoiceitems($invoice_id) { $subQuery = "select item_quantity from ip_invoice_items where invoice_id=?"; $query = $this->db->query($subQuery,array($invoice_id)); return $query->result(); } public function GetState($ClientID) { //echo $ClientID; $subQuery = "select client_id,client_name,client_state from ip_clients where client_id =?"; $query = $this->db->query($subQuery,array($ClientID)); return $query->result(); } // public function GetStateCode($ClientID,$CustomId) // { // //echo $ClientID; // $subQuery = "select client_id,client_custom_fieldid,client_custom_fieldvalue from ip_client_custom where client_id =? and client_custom_fieldid=?"; // $query = $this->db->query($subQuery,array($ClientID,$CustomId)); // return $query->result(); // } public function GetPrimaryStateCode($ClientID,$CustomId) { //echo $ClientID; $subQuery = "select client_custom_fieldvalue from ip_client_custom where client_id =? and client_custom_fieldid=?"; $query = $this->db->query($subQuery,array($ClientID,$CustomId)); return $query->result(); } public function GetSecondaryStateCode($ClientID,$CustomId) { //echo $ClientID; $subQuery = "select client_custom_fieldvalue from ip_client_custom where client_id =? and client_custom_fieldid=?"; $query = $this->db->query($subQuery,array($ClientID,$CustomId)); return $query->result(); } public function getinvbalqty($quoteid) { $subQuery = "select item_balancequantity,item_quantity,item_suppliedquantity from ip_quote_items where quote_id =?"; $query = $this->db->query($subQuery,array($quoteid)); return $query->result(); } public function getSecondayAddressSelected($InvID,$client_custom_fieldid) { $subQuery = "select invoice_custom_fieldvalue as secondary from ip_invoice_custom where invoice_id=? and invoice_custom_fieldid=?"; $query = $this->db->query($subQuery,array($InvID,$client_custom_fieldid)); //print_r( $this->db->last_query()); return $query->result(); } public function default_select() { $this->db->select(" SQL_CALC_FOUND_ROWS ip_quotes.*, ip_users.user_name, ip_users.user_company, ip_users.user_address_1, ip_users.user_address_2, ip_users.user_city, ip_users.user_state, ip_users.user_zip, ip_users.user_country, ip_users.user_phone, ip_users.user_fax, ip_users.user_mobile, ip_users.user_email, ip_users.user_web, ip_users.user_vat_id, ip_users.user_tax_code, ip_users.user_subscribernumber, ip_users.user_iban, ip_users.user_gln, ip_users.user_rcc, ip_clients.*, ip_invoice_sumex.*, ip_invoice_amounts.invoice_id, ip_quotetoinvoice.quote_id as Qid, ip_invoice_amounts.invoice_amount_id, IFnull(ip_invoice_amounts.invoice_item_subtotal, '0.00') AS invoice_item_subtotal, IFnull(ip_invoice_amounts.invoice_item_tax_total, '0.00') AS invoice_item_tax_total, IFnull(ip_invoice_amounts.invoice_tax_total, '0.00') AS invoice_tax_total, IFnull(ip_invoice_amounts.invoice_total, '0.00') AS invoice_total, IFnull(ip_invoice_amounts.invoice_paid, '0.00') AS invoice_paid, IFnull(ip_invoice_amounts.invoice_balance, '0.00') AS invoice_balance, ip_invoice_amounts.invoice_sign AS invoice_sign, (CASE WHEN ip_invoices.invoice_status_id NOT IN (1,4) AND DATEDIFF(NOW(), invoice_date_due) > 0 THEN 1 ELSE 0 END) is_overdue, DATEDIFF(NOW(), invoice_date_due) AS days_overdue, (CASE (SELECT COUNT(*) FROM ip_invoices_recurring WHERE ip_invoices_recurring.invoice_id = ip_invoices.invoice_id and ip_invoices_recurring.recur_next_date <> '0000-00-00') WHEN 0 THEN 0 ELSE 1 END) AS invoice_is_recurring, ip_invoices.*", false); } public function default_order_by() { $this->db->order_by('ip_invoices.invoice_number DESC'); $this->db->group_by('ip_invoices.invoice_number'); } public function default_join() { $this->db->join('ip_clients', 'ip_clients.client_id = ip_invoices.client_id'); $this->db->join('ip_users', 'ip_users.user_id = ip_invoices.user_id'); $this->db->join('ip_invoice_amounts', 'ip_invoice_amounts.invoice_id = ip_invoices.invoice_id', 'left'); $this->db->join('ip_invoice_sumex', 'sumex_invoice = ip_invoices.invoice_id', 'left'); $this->db->join('ip_quotes', 'ip_quotes.invoice_id = ip_invoices.invoice_id', 'left'); $this->db->join('ip_payments', 'ip_payments.invoice_id = ip_invoices.invoice_id', 'left'); $this->db->join('ip_quotetoinvoice', 'ip_invoices.invoice_id = ip_quotetoinvoice.invoice_id', 'left'); // print_r( $this->db->last_query()); } /** * @return array */ public function validation_rules() { return array( 'client_id' => array( 'field' => 'client_id', 'label' => trans('client'), 'rules' => 'required' ), 'invoice_date_created' => array( 'field' => 'invoice_date_created', 'label' => trans('invoice_date'), 'rules' => 'required' ), 'invoice_time_created' => array( 'rules' => 'required' ), 'invoice_group_id' => array( 'field' => 'invoice_group_id', 'label' => trans('invoice_group'), 'rules' => 'required' ), 'invoice_password' => array( 'field' => 'invoice_password', 'label' => trans('invoice_password') ), 'user_id' => array( 'field' => 'user_id', 'label' => trans('user'), 'rule' => 'required' ), ); } /** * @return array */ public function validation_rules_save_invoice() { return array( 'invoice_number' => array( 'field' => 'invoice_number', 'label' => trans('invoice') . ' #', 'rules' => 'is_unique[ip_invoices.invoice_number' . (($this->id) ? '.invoice_id.' . $this->id : '') . ']' ), 'invoice_date_created' => array( 'field' => 'invoice_date_created', 'label' => trans('date'), 'rules' => 'required' ), 'invoice_date_due' => array( 'field' => 'invoice_date_due', 'label' => trans('due_date'), 'rules' => 'required' ), 'invoice_time_created' => array( 'rules' => 'required' ), 'invoice_password' => array( 'field' => 'invoice_password', 'label' => trans('invoice_password') ) ); } /** * @param null $db_array * @param bool $include_invoice_tax_rates * @return int|null */ public function create($db_array = null, $include_invoice_tax_rates = true) { $invoice_id = parent::save(null, $db_array); $inv = $this->where('ip_invoices.invoice_id', $invoice_id)->get()->row(); $invoice_group = $inv->invoice_group_id; // Create an invoice amount record $db_array = array( 'invoice_id' => $invoice_id ); $this->db->insert('ip_invoice_amounts', $db_array); if ($include_invoice_tax_rates) { // Create the default invoice tax record if applicable if (get_setting('default_invoice_tax_rate')) { $db_array = array( 'invoice_id' => $invoice_id, 'tax_rate_id' => get_setting('default_invoice_tax_rate'), 'include_item_tax' => get_setting('default_include_item_tax', 0), 'invoice_tax_rate_amount' => 0 ); $this->db->insert('ip_invoice_tax_rates', $db_array); } } $invgroup = $this->mdl_invoice_groups->where('invoice_group_id', $invoice_group)->get()->row(); if (preg_match("/sumex/i", $invgroup->invoice_group_name)) { // If the Invoice Group includes "Sumex", make the invoice a Sumex one $db_array = array( 'sumex_invoice' => $invoice_id ); $this->db->insert('ip_invoice_sumex', $db_array); } return $invoice_id; } /** * Copies invoice items, tax rates, etc from source to target * @param int $source_id * @param int $target_id */ public function copy_invoice($source_id, $target_id) { $this->load->model('invoices/mdl_items'); $invoice_items = $this->mdl_items->where('invoice_id', $source_id)->get()->result(); foreach ($invoice_items as $invoice_item) { $db_array = array( 'invoice_id' => $target_id, 'item_tax_rate_id' => $invoice_item->item_tax_rate_id, 'item_name' => $invoice_item->item_name, 'item_description' => $invoice_item->item_description, 'item_quantity' => $invoice_item->item_quantity, 'item_price' => $invoice_item->item_price, 'item_order' => $invoice_item->item_order ); $this->mdl_items->save(null, $db_array); } $invoice_tax_rates = $this->mdl_invoice_tax_rates->where('invoice_id', $source_id)->get()->result(); foreach ($invoice_tax_rates as $invoice_tax_rate) { $db_array = array( 'invoice_id' => $target_id, 'tax_rate_id' => $invoice_tax_rate->tax_rate_id, 'include_item_tax' => $invoice_tax_rate->include_item_tax, 'invoice_tax_rate_amount' => $invoice_tax_rate->invoice_tax_rate_amount ); $this->mdl_invoice_tax_rates->save(null, $db_array); } // Copy the custom fields $this->load->model('custom_fields/mdl_invoice_custom'); $db_array = $this->mdl_invoice_custom->where('invoice_id', $source_id)->get()->row_array(); if (count($db_array) > 2) { unset($db_array['invoice_custom_id']); $db_array['invoice_id'] = $target_id; $this->mdl_invoice_custom->save_custom($target_id, $db_array); } } /** * Copies invoice items, tax rates, etc from source to target * @param int $source_id * @param int $target_id */ public function copy_credit_invoice($source_id, $target_id) { $this->load->model('invoices/mdl_items'); // echo "target/cre".$target_id; // echo "source/inv".$source_id; // die(); $invoice_items = $this->mdl_items->where('invoice_id', $source_id)->get()->result(); // $custom_items = $this->mdl_items->get_invoice_custom_values($source_id); //print_r($invoice_items); //die(); foreach ($invoice_items as $invoice_item) { $db_array = array( 'invoice_id' => $target_id, //'item_tax_rate_id' => $invoice_item->item_tax_rate_id, 'Sgst_item_tax_rate_id'=>$invoice_item->Sgst_item_tax_rate_id, 'Cgst_item_tax_rate_id'=>$invoice_item->Cgst_item_tax_rate_id, 'Igst_item_tax_rate_id'=>$invoice_item->Igst_item_tax_rate_id, 'item_name' => $invoice_item->item_name, 'item_product_unit' =>$invoice_item->item_product_unit, 'item_product_unit_id'=> $invoice_item->item_product_unit_id, 'item_product_id'=>$invoice_item->item_product_id, 'item_description' => $invoice_item->item_description, 'item_quantity' => -$invoice_item->item_quantity, 'item_price' => $invoice_item->item_price, 'item_order' => $invoice_item->item_order ); $this->mdl_items->save(null, $db_array); } $invoice_tax_rates = $this->mdl_invoice_tax_rates->where('invoice_id', $source_id)->get()->result(); foreach ($invoice_tax_rates as $invoice_tax_rate) { $db_array = array( 'invoice_id' => $target_id, 'tax_rate_id' => $invoice_tax_rate->tax_rate_id, 'include_item_tax' => $invoice_tax_rate->include_item_tax, 'invoice_tax_rate_amount' => -$invoice_tax_rate->invoice_tax_rate_amount ); $this->mdl_invoice_tax_rates->save(null, $db_array); } /// Copy the custom fields $this->load->model('custom_fields/mdl_invoice_custom'); $db_array = $this->mdl_invoice_custom->where('ip_invoice_custom.invoice_id', $source_id)->get()->row_array(); $custom_item = $this->get_invoice_custom_values($source_id); //echo "vdc"; foreach($custom_item as $cus) { //$invoice_id = $target_id; $customarray= array( 'invoice_id'=>$target_id, 'invoice_custom_fieldid'=>$cus->invoice_custom_fieldid, 'invoice_custom_fieldvalue'=>$cus->invoice_custom_fieldvalue ); $this->save_credit_custom($customarray); } $updatearray = array('invoice_status_id'=>'4'); $inv_status= $this->saveinvoicestatus($source_id,$updatearray); //print_r($db_array); //die(); // if (count($db_array) > 2) { // unset($db_array['invoice_custom_id']); // $db_array['invoice_id'] = $target_id; // $this->mdl_invoice_custom->save_custom($target_id, $db_array); // } } /** * @return array */ public function db_array() { $db_array = parent::db_array(); // print_r($db_array); // $receivedstatus='ST066'; $credit_status='0'; // Get the client id for the submitted invoice $this->load->model('clients/mdl_clients'); // Check if is SUMEX $this->load->model('invoice_groups/mdl_invoice_groups'); $db_array['invoice_date_created'] = date_to_mysql($db_array['invoice_date_created']); $db_array['invoice_date_due'] = $this->get_date_due($db_array['invoice_date_created']); $db_array['invoice_terms'] = get_setting('default_invoice_terms'); //$db_array['receivedstatus'] = $receivedstatus; // $db_array['credit_status'] = $credit_status; if (!isset($db_array['invoice_status_id'])) { $db_array['invoice_status_id'] = 1; } $generate_invoice_number = get_setting('generate_invoice_number_for_draft'); if ($db_array['invoice_status_id'] === 1 && $generate_invoice_number == 1) { $db_array['invoice_number'] = $this->get_invoice_number($db_array['invoice_group_id']); } elseif ($db_array['invoice_status_id'] != 1) { $db_array['invoice_number'] = $this->get_invoice_number($db_array['invoice_group_id']); } else { $db_array['invoice_number'] = ''; } // Set default values $db_array['payment_method'] = (empty($db_array['payment_method']) ? 0 : $db_array['payment_method']); // Generate the unique url key $db_array['invoice_url_key'] = $this->get_url_key(); return $db_array; } /** * @param string $invoice_date_created * @return string */ public function get_date_due($invoice_date_created) { $invoice_date_due = new DateTime($invoice_date_created); $invoice_date_due->add(new DateInterval('P' . get_setting('invoices_due_after') . 'D')); return $invoice_date_due->format('Y-m-d'); } /** * @param $invoice_group_id * @return mixed */ public function get_invoice_number($invoice_group_id) { $this->load->model('invoice_groups/mdl_invoice_groups'); return $this->mdl_invoice_groups->generate_invoice_number($invoice_group_id); } /** * @return string */ public function get_url_key() { $this->load->helper('string'); return random_string('alnum', 15); } /** * @param $invoice_id * @return mixed */ public function get_invoice_group_id($invoice_id) { $invoice = $this->get_by_id($invoice_id); return $invoice->invoice_group_id; } /** * @param int $parent_invoice_id * @return mixed */ public function get_parent_invoice_number($parent_invoice_id) { $parent_invoice = $this->get_by_id($parent_invoice_id); return $parent_invoice->invoice_number; } /** * @return mixed */ public function get_custom_values($id) { $this->load->module('custom_fields/Mdl_invoice_custom'); return $this->invoice_custom->get_by_invid($id); } /** * @param int $invoice_id */ public function delete($invoice_id) { parent::delete($invoice_id); $this->load->helper('orphan'); delete_orphans(); } // Used from the guest module, excludes draft and paid public function is_open() { $this->filter_where_in('invoice_status_id', array(2, 3)); return $this; } // Used to check if the invoice is Sumex public function is_sumex() { $this->where('sumex_id is NOT NULL', null, FALSE); return $this; } public function guest_visible() { $this->filter_where_in('invoice_status_id', array(2, 3, 4)); return $this; } public function is_draft() { $this->filter_where('invoice_status_id', 1); return $this; } public function is_sent() { $this->filter_where('invoice_status_id', 2); return $this; } public function is_viewed() { $this->filter_where('invoice_status_id', 3); return $this; } public function is_paid() { $this->filter_where('invoice_status_id', 4); return $this; } public function is_overdue() { $this->filter_having('is_overdue', 1); return $this; } public function by_client($client_id) { $this->filter_where('ip_invoices.client_id', $client_id); return $this; } /** * @param $invoice_id */ public function mark_viewed($invoice_id) { $invoice = $this->get_by_id($invoice_id); if (!empty($invoice)) { if ($invoice->invoice_status_id == 2) { $this->db->where('invoice_id', $invoice_id); $this->db->where('invoice_id', $invoice_id); $this->db->set('invoice_status_id', 3); $this->db->update('ip_invoices'); } // Set the invoice to read-only if feature is not disabled and setting is view if ($this->config->item('disable_read_only') == false && get_setting('read_only_toggle') == 3) { $this->db->where('invoice_id', $invoice_id); $this->db->set('is_read_only', 1); $this->db->update('ip_invoices'); } } } /** * @param $invoice_id */ public function mark_sent($invoice_id) { $invoice = $this->mdl_invoices->get_by_id($invoice_id); if (!empty($invoice)) { if ($invoice->invoice_status_id == 1) { // Generate new invoice number if applicable if (get_setting('generate_invoice_number_for_draft') == 0) { $invoice_number = $this->mdl_invoices->get_invoice_number($invoice->invoice_group_id); } else { $invoice_number = $invoice->invoice_number; } // Set new date and save $this->db->where('invoice_id', $invoice_id); $this->db->set('invoice_status_id', 2); $this->db->set('invoice_number', $invoice_number); $this->db->update('ip_invoices'); } // Set the invoice to read-only if feature is not disabled and setting is sent if ($this->config->item('disable_read_only') == false && get_setting('read_only_toggle') == 2) { $this->db->where('invoice_id', $invoice_id); $this->db->set('is_read_only', 1); $this->db->update('ip_invoices'); } } } function Save_quote_to_invtable($invoicedetails) { $this->db->trans_start(); $this->db->insert('ip_quotetoinvoice', $invoicedetails); $insert_id = $this->db->affected_rows(); $this->db->trans_complete(); return TRUE; } public function CheckInvId($invoice_id) { $this->db->select('count(invoice_id) as invcount'); $this->db->from('ip_quotetoinvoice'); $this->db->where('invoice_id ',$invoice_id); $query = $this->db->get(); // print_r( $this->db->last_query()); return $query->result(); } function GetOrder_qty($quoteid,$item_product_id) { $this->db->select('item_quantity as orderedqty,item_suppliedquantity as supqty, item_balancequantity as balqty '); $this->db->from('ip_quote_items'); $this->db->where('quote_id',$quoteid); $this->db->where('item_product_id',$item_product_id); $query = $this->db->get(); return $query->result(); } function check_item($quoteid,$itemproductid) { // echo $quoteid; // die(); $this->db->select('*'); $this->db->from('ip_quote_items'); $this->db->where('quote_id',$quoteid); $this->db->where('item_product_id',$itemproductid); $query = $this->db->get(); return $query->result(); } function Update_Qty($quoteid,$updatearray,$item_product_id) { // echo $item_product_id; // die(); $this->db->where('quote_id', $quoteid); $this->db->where('item_product_id',$item_product_id); $this->db->update('ip_quote_items', $updatearray); //print_r( $this->db->last_query()); //return TRUE; } function Check_Qid($quoteid) { $this->db->select('quote_id as quotecount,invoice_id'); $this->db->from('ip_quotetoinvoice'); $this->db->where('quote_id ',$quoteid); $query = $this->db->get(); // print_r( $this->db->last_query()); return $query->result(); } function GetInvOrdered($invoice_id) { $this->db->select('item_quantity,invoice_id'); $this->db->from('ip_invoice_items'); $this->db->where('invoice_id ',$invoice_id); $query = $this->db->get(); // print_r( $this->db->last_query()); return $query->result(); } function GetquoteOrdered($quoteid1) { $this->db->select('item_quantity,item_balancequantity,item_suppliedquantity'); $this->db->from('ip_quote_items'); $this->db->where('quote_id ',$quoteid1); $query = $this->db->get(); // print_r( $this->db->last_query()); return $query->result(); } function get_clientid($invoice_id) { $this->db->select('client_id'); $this->db->from('ip_invoices'); $this->db->where('invoice_id ',$invoice_id); $query = $this->db->get(); // print_r( $this->db->last_query()); return $query->result(); } // function get_taxcheck($invoice_id) // { // $this->db->select('taxcheck'); // $this->db->from('ip_invoice_item_amounts'); // $this->db->join('ip_invoice_items', 'ip_invoice_items.item_id = ip_invoice_item_amounts.item_id'); // $this->db->where('ip_invoice_items.invoice_id ',$invoice_id); // $query = $this->db->get(); // // print_r( $this->db->last_query()); // return $query->result(); // } public function get_invoice_custom_values($source_id) { //echo $source_id; $this->db->select('*'); $this->db->from('ip_invoice_custom'); $this->db->where('ip_invoice_custom.invoice_id',$source_id); $query = $this->db->get(); // print_r($this->db->last_query()); return $query->result(); return $this; } public function save_credit_custom($customarray) { $this->db->trans_start(); $this->db->insert('ip_invoice_custom', $customarray); $insert_id = $this->db->affected_rows(); $this->db->trans_complete(); return true; } public function saveinvoicestatus($source_id,$updatearray) { // echo "ff"; // print_r($updatearray); $this->db->where('invoice_id', $source_id); $this->db->update('ip_invoices',$updatearray); $insert_id = $this->db->affected_rows(); //return $insert_id; return true; } public function getcreditstatus($invoice_id) { $this->db->select('credit_status'); $this->db->from('ip_invoices'); $this->db->where('ip_invoices.invoice_id',$invoice_id); $query = $this->db->get(); return $query->result(); //return $this; } public function getinv_parentqty($invoice_id) { $this->db->select('creditinvoice_parent_id'); $this->db->from('ip_invoices'); $this->db->where('ip_invoices.invoice_id',$invoice_id); $query = $this->db->get(); // print_r($this->db->last_query()); // print_r($query->result()); $qty = ''; foreach($query->result() as $re) { $qty = $re->creditinvoice_parent_id; } //echo "qt".$qty; if($qty =="") { } else { $this->db->select('item_quantity'); $this->db->from('ip_invoice_items'); $this->db->where('invoice_id',$qty); $qtyquery = $this->db->get(); return $qtyquery->result(); } } }