riainvoice/application/modules/invoices/controllers/Invoices.php
2023-05-27 19:26:12 +05:30

718 lines
21 KiB
PHP

<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
/*
* InvoicePlane
*
* @author InvoicePlane Developers & Contributors
* @copyright Copyright (c) 2012 - 2017 InvoicePlane.com
* @license https://invoiceplane.com/license.txt
* @link https://invoiceplane.com
*/
/**
* Class Invoices
*/
class Invoices extends Admin_Controller
{
/**
* Invoices constructor.
*/
public function __construct()
{
parent::__construct();
$this->load->model('mdl_invoices');
$this->load->model('Mdl_items');
}
public function index()
{
// Display all invoices by default
redirect('invoices/status/all');
}
/**
* @param string $status
* @param int $page
*/
public function status($status = 'all', $page = 0)
{
//echo 'main';
// Determine which group of invoices to load
switch ($status) {
case 'draft':
$this->mdl_invoices->is_draft();
break;
case 'sent':
$this->mdl_invoices->is_sent();
break;
case 'viewed':
$this->mdl_invoices->is_viewed();
break;
case 'paid':
$this->mdl_invoices->is_paid();
break;
case 'overdue':
$this->mdl_invoices->is_overdue();
break;
}
$this->mdl_invoices->paginate(site_url('invoices/status/' . $status), $page);
$invoices = $this->mdl_invoices->result();
//print_r($invoices);
$this->layout->set(
array(
'invoices' => $invoices,
'status' => $status,
'filter_display' => true,
'filter_placeholder' => trans('filter_invoices'),
'filter_method' => 'filter_invoices',
'invoice_statuses' => $this->mdl_invoices->statuses()
)
);
$this->layout->buffer('content', 'invoices/index');
$this->layout->render();
}
public function archive()
{
$invoice_array = array();
if (isset($_POST['invoice_number'])) {
$invoiceNumber = $_POST['invoice_number'];
$invoice_array = glob('./uploads/archive/*' . '_' . $invoiceNumber . '.pdf');
$this->layout->set(
array(
'invoices_archive' => $invoice_array));
$this->layout->buffer('content', 'invoices/archive');
$this->layout->render();
} else {
foreach (glob('./uploads/archive/*.pdf') as $file) {
array_push($invoice_array, $file);
}
rsort($invoice_array);
$this->layout->set(
array(
'invoices_archive' => $invoice_array));
$this->layout->buffer('content', 'invoices/archive');
$this->layout->render();
}
}
/**
* @param $invoice
*/
public function download($invoice)
{
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="' . $invoice . '"');
readfile('./uploads/archive/' . $invoice);
}
/**
* @param $invoice_id
*/
public function view($invoice_id)
{
$this->load->model(
array(
'mdl_items',
'tax_rates/mdl_tax_rates',
'payment_methods/mdl_payment_methods',
'mdl_invoice_tax_rates',
'custom_fields/mdl_custom_fields',
)
);
$this->load->helper("custom_values");
$this->load->helper("client");
$this->load->model('units/mdl_units');
$this->load->module('payments');
$this->load->model('products/mdl_products');
$this->load->model('custom_values/mdl_custom_values');
$this->load->model('custom_fields/mdl_invoice_custom');
$this->db->reset_query();
/*$invoice_custom = $this->mdl_invoice_custom->where('invoice_id', $invoice_id)->get();
if ($invoice_custom->num_rows()) {
$invoice_custom = $invoice_custom->row();
unset($invoice_custom->invoice_id, $invoice_custom->invoice_custom_id);
foreach ($invoice_custom as $key => $val) {
$this->mdl_invoices->set_form_value('custom[' . $key . ']', $val);
}
}*/
// $quo = $this->input->post('quote_id');
$fields = $this->mdl_invoice_custom->by_id($invoice_id)->get()->result();
//print_r($fields);
$invoice = $this->mdl_invoices->get_by_id($invoice_id);
//print_r($invoice);
//print_r($invoice_id);die;
if (!$invoice) {
show_404();
}
//$ClientID = '';
// foreach ($invoice[0] as $key ) {
$InvoiceDetails = json_decode(json_encode($invoice),true);
$ClientID = $InvoiceDetails['client_id'];
///print_r($InvoiceDetails);
$quote=$InvoiceDetails['Qid'];
$bqty ='';
$sqty ='';
$oqty = '';
if($InvoiceDetails['quote_id'] !="")
{
// echo "quoteid";
// echo $InvoiceDetails['quote_id'];
$balqty =$this->mdl_invoices->getinvbalqty($InvoiceDetails['quote_id']);
}
else if($InvoiceDetails['Qid']!="")
{
// echo "qid";
// echo $InvoiceDetails['Qid'];
$balqty =$this->mdl_invoices->getinvbalqty($InvoiceDetails['Qid']);
}
// print_r($balqty);
if(!empty($balqty))
{
foreach($balqty as $bal)
{
$bqty= $bal->item_balancequantity;
$sqty= $bal->item_suppliedquantity;
$oqty= $bal->item_quantity;
}
}
//echo $bqty;
// if($InvoiceDetails['quote_id'] != '')
// {
// $quoteid = $InvoiceDetails['quote_id'];
// $GetQuotetax = $this->mdl_invoices->GetQuoteamount($quoteid);
// }
// $quoteid = $InvoiceDetails['quote_id'];
// // echo $quo;
//echo $ClientID;
// }
/*foreach ($invoice as $inv) {
$ClientID = $inv->client_id;
}
echo $ClientID; */
$PaymentDays = $this->mdl_invoices->GetPaymentDays($invoice_id,$ClientID,'51');
$GetSecondaryAddress = $this->mdl_invoices->GetSecondaryAddress($ClientID);
//print_r($GetSecondaryAddress);
$GetClientState = $this->mdl_invoices->GetState($ClientID);
// $GetClientStateCode = $this->mdl_invoices->GetStateCode($ClientID,'12');
//print_r( $GetClientStateCode);
$get_invoice_items= $this->mdl_invoices->Get_invoiceitems($invoice_id);
if(empty($get_invoice_items))
{
$drp_check=1;
}
else
{
$drp_check=0;
}
$GetClientPrimaryStateCode = $this->mdl_invoices->GetPrimaryStateCode($ClientID,'12');
$GetClientSecondaryStateCode = $this->mdl_invoices->GetSecondaryStateCode($ClientID,'57');
// print_r($GetClientPrimaryStateCode);
// print_r($GetClientSecondaryStateCode);
$primarystatecode='';
foreach ($GetClientPrimaryStateCode as $primary)
{
$primarystatecode=$primary->client_custom_fieldvalue;
}
$secondarystatecode='';
foreach ($GetClientSecondaryStateCode as $secondary)
{
$secondarystatecode=$secondary->client_custom_fieldvalue;
}
// echo $secondarystatecode;
// echo $primarystatecode;
$getSecondayAddressSelected = $this->mdl_invoices->getSecondayAddressSelected($invoice_id,'44');
//print_r($GetSecondaryAddress);
$custom_fields = $this->mdl_custom_fields->by_table('ip_invoice_custom')->get()->result();
$custom_values = [];
//print_r($custom_fields);
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();
//print_r($values);
$custom_values[$custom_field->custom_field_id] = $values;
}
}
//print_r($custom_fields);die;
foreach ($custom_fields as $cfield) {
foreach ($fields as $fvalue) {
if ($fvalue->invoice_custom_fieldid == $cfield->custom_field_id) {
// TODO: Hackish, may need a better optimization
//echo $fvalue->invoice_custom_fieldid ;
if ($fvalue->invoice_custom_fieldid == "7" && $fvalue->invoice_custom_fieldvalue == '')
{
echo $fvalue->invoice_custom_fieldvalue;
$this->mdl_invoices->set_form_value(
'custom[' . $cfield->custom_field_id . ']',
'By Road'
);
}
else
{
$this->mdl_invoices->set_form_value(
'custom[' . $cfield->custom_field_id . ']',
$fvalue->invoice_custom_fieldvalue
);
}
break;
}
}
}
$clientid = $this->mdl_invoices->get_clientid($invoice_id);
foreach($clientid as $cl)
{
$client_id= $cl->client_id;
}
$creditststus= $this->mdl_invoices->getcreditstatus($invoice_id);
//print_r($creditststus);
$crestatus='';
foreach($creditststus as $cre)
{
$crestatus=$cre->credit_status;
}
$parentqty= $this->mdl_invoices->getinv_parentqty($invoice_id);
// print_r($parentqty);
$parent_inv_qty = '';
if(!empty($parentqty))
{
foreach($parentqty as $pa)
{
$parent_inv_qty = $pa->item_quantity;
}
}
//echo $parent_inv_qty;
//$taxcheck=$this->mdl_invoices->get_taxcheck($invoice_id);
//print_r($taxcheck);
// if(!empty($taxcheck))
// {
// $exctax=$taxcheck[0]->taxcheck;
// }
// else
// {
// $exctax=0;
// }
//echo $exctax;
// $quotes = $this->Mdl_items->get_quotes($client_id);
// print_r($quotes);
// $inv_status= $this->mdl_invoices->get_status($invoice_id)
//$product = $this->Mdl_items->get_product();
//print_r($product);die;
// $state=$this->test();
// echo $state;
$this->layout->set(
array(
'invoice' => $invoice,
'Duedate' =>$PaymentDays,
'GetSecondary' =>$GetSecondaryAddress,
'GetState'=>$GetClientState,
'getSecondaySelected' => $getSecondayAddressSelected,
'GetClientPrimaryStateCode'=>$GetClientPrimaryStateCode,
'GetClientSecondaryStateCode'=>$GetClientSecondaryStateCode,
'items' => $this->mdl_items->where('invoice_id', $invoice_id)->get()->result(),
'invoice_id' => $invoice_id,
'drop_check' => $drp_check,
'clientid' => $this->mdl_invoices->get_clientid($invoice_id),
'products' => $this->Mdl_items->get_product(),
'quotes' => $this->Mdl_items->get_quotes($client_id),
'producttax'=>$this->Mdl_items->get_tax(),
'tax_rates' => $this->mdl_tax_rates->get()->result(),
'invoice_tax_rates' => $this->mdl_invoice_tax_rates->where('invoice_id', $invoice_id)->get()->result(),
'creditstatus'=>$crestatus,
'balancequoteqty'=>$bqty,
'parentinvoiceqty'=>$parent_inv_qty,
'suppliedquoteqty'=>$sqty,
'orderedquoteqty'=>$oqty,
'units' => $this->mdl_units->get()->result(),
'payment_methods' => $this->mdl_payment_methods->get()->result(),
'custom_fields' => $custom_fields,
'custom_values' => $custom_values,
'fields'=>$fields,
'custom_js_vars' => array(
'currency_symbol' => get_setting('currency_symbol'),
'currency_symbol_placement' => get_setting('currency_symbol_placement'),
'decimal_point' => get_setting('decimal_point')
),
'invoice_statuses' => $this->mdl_invoices->statuses(),
'quoteid' =>$InvoiceDetails['quote_id'],
'qid' =>$quote,
'inv_status'=> $this->mdl_invoices->get_status($invoice_id)
)
);
// print_r($custom_values);
if ($invoice->sumex_id != null) {
$this->layout->buffer(
array(
array('modal_delete_invoice', 'invoices/modal_delete_invoice'),
array('modal_add_invoice_tax', 'invoices/modal_add_invoice_tax'),
array('modal_add_payment', 'payments/modal_add_payment'),
array('content', 'invoices/view_sumex')
)
);
} else {
$this->layout->buffer(
array(
array('modal_delete_invoice', 'invoices/modal_delete_invoice'),
array('modal_add_invoice_tax', 'invoices/modal_add_invoice_tax'),
array('modal_add_payment', 'payments/modal_add_payment'),
array('content', 'invoices/view')
)
);
}
$this->layout->render();
}
public function view1($invoice_id)
{
//echo 'Edit';die;
$this->layout->buffer('content', 'invoices/view');
$this->layout->render();
}
public function get_quote_items()
{
$this->load->model('quotes/mdl_quote_items');
$quote_id = $this->input->post('qid');
$quote_no = $this->input->post('quno');
$invoice_id = $this->input->post('invoice_id');
$pono='';
$podate='';
$quote_item = $this->Mdl_items->get_quoteproduct($quote_id);
foreach($quote_item as $qu)
{
$pono= $qu->quote_pono;
$podate= $qu->po_date_created;
$cpofieldid= '14';
$cdatefieldid = '15';
$timestamp = strtotime($podate);
$dmy = date("d-m-Y", $timestamp);
}
//echo "pono".$pono;
//echo "podate".$dmy;
//die();
$db_array = array('61'=>'','40'=>'','42'=>'','38'=>'','41'=>'','53'=>'','39'=>'','43'=>'','54'=>'','44'=>'','10'=>'','14'=>$pono,'15'=>$dmy,'7'=>'','8'=>'','58'=>'','62'=>'','64'=>'');
//print_r($db_array);
$this->load->model('custom_fields/mdl_invoice_custom');
$result = $this->mdl_invoice_custom->save_custom($invoice_id, $db_array);
die(json_encode(array('quotedetails' =>$quote_item)));
}
/**
* @param $invoice_id
*/
public function delete($invoice_id)
{
// Get the status of the invoice
$invoice = $this->mdl_invoices->get_by_id($invoice_id);
$invoice_status = $invoice->invoice_status_id;
if ($invoice_status == 1 || $this->config->item('enable_invoice_deletion') === true) {
// If invoice refers to tasks, mark those tasks back to 'Complete'
$this->load->model('tasks/mdl_tasks');
$tasks = $this->mdl_tasks->update_on_invoice_delete($invoice_id);
// Delete the invoice
$this->mdl_invoices->delete($invoice_id);
} else {
// Add alert that invoices can't be deleted
$this->session->set_flashdata('alert_error', trans('invoice_deletion_forbidden'));
}
// Redirect to invoice index
redirect('invoices/index');
}
/**
* @param $invoice_id
* @param $item_id
*/
public function delete_item($invoice_id, $item_id)
{
// Delete invoice item
$this->load->model('mdl_items');
$item = $this->mdl_items->delete($item_id);
// Mark item back to complete:
if ($item && $item->item_task_id) {
$this->load->model('tasks/mdl_tasks');
$this->mdl_tasks->update_status(3, $item->item_task_id);
}
// Redirect to invoice view
redirect('invoices/view/' . $invoice_id);
}
/**
* @param $invoice_id
* @param bool $stream
* @param null $invoice_template
*/
public function generate_pdf($invoice_id, $stream = true, $invoice_template = null)
{
$this->load->helper('pdf');
if (get_setting('mark_invoices_sent_pdf') == 1) {
$this->mdl_invoices->mark_sent($invoice_id);
}
generate_invoice_pdf($invoice_id, $stream, $invoice_template, null);
}
/**
* @param $invoice_id
*/
public function generate_zugferd_xml($invoice_id)
{
$this->load->model('invoices/mdl_items');
$this->load->library('ZugferdXml', array(
'invoice' => $this->mdl_invoices->get_by_id($invoice_id),
'items' => $this->mdl_items->where('invoice_id', $invoice_id)->get()->result()
));
$this->output->set_content_type('text/xml');
$this->output->set_output($this->zugferdxml->xml());
}
public function generate_sumex_pdf($invoice_id)
{
$this->load->helper('pdf');
generate_invoice_sumex($invoice_id);
}
public function generate_sumex_copy($invoice_id)
{
$this->load->model('invoices/mdl_items');
$this->load->library('Sumex', array(
'invoice' => $this->mdl_invoices->get_by_id($invoice_id),
'items' => $this->mdl_items->where('invoice_id', $invoice_id)->get()->result(),
'options' => array(
'copy' => "1",
'storno' => "0"
)
));
$this->output->set_content_type('application/pdf');
$this->output->set_output($this->sumex->pdf());
}
/**
* @param $invoice_id
* @param $invoice_tax_rate_id
*/
//$invoice_id,$invoice_tax_rate_id
public function delete_invoice_tax()
{
$tcsamount=$this->input->post('tcs');
$invoice_id=$this->input->post('inv_id');
$invoice_amount=$this->input->post('invoiceamount');
$invoice_balance=$this->input->post('inv_balance');
$this->load->model('mdl_invoice_tax_rates');
$res=$this->mdl_invoice_tax_rates->invoice_delete($invoice_id,$invoice_amount,$invoice_balance);
$res1=$this->mdl_invoice_tax_rates->invoice_delete_tax($invoice_id);
//$res = $this->mdl_invoice_amounts->invoice_delete($bankdata,$bankid);
}
// public function delete_invoice_tax()
// {
// print_r('maran');
// $tcsamount=$this->input->post('tcs');
// $invoice_id=$this->input->post('inv_id');
// print_r($tcsamount);
// print_r($invoice_id);
// die();
// $this->load->model('mdl_invoice_tax_rates');
// $this->mdl_invoice_tax_rates->delete($invoice_tax_rate_id);
// $this->load->model('mdl_invoice_amounts');
// $this->mdl_invoice_amounts->calculate($invoice_id);
// redirect('invoices/view/' . $invoice_id);
// }
public function recalculate_all_invoices()
{
$this->db->select('invoice_id');
$invoice_ids = $this->db->get('ip_invoices')->result();
$this->load->model('mdl_invoice_amounts');
foreach ($invoice_ids as $invoice_id) {
$this->mdl_invoice_amounts->calculate($invoice_id->invoice_id);
}
}
function test(){
$data = $this->input->post('state');
// $invoice = $this->input->post('invoice_id');
echo $data;
//return $data;
$obj=json_encode($data);
return $obj;
}
public function po_details()
{
$this->layout->buffer('content', 'invoices/po_details');
$this->layout->render();
}
// public function polistcheck()
// {
// $this->layout->buffer('content', 'invoices/polistcheck');
// $this->layout->render();
// }
public function modal_create_poinvoice()
{
$this->load->module('layout');
$this->load->model('invoice_groups/mdl_invoice_groups');
$this->load->model('tax_rates/mdl_tax_rates');
$this->load->model('clients/mdl_clients');
$customerid = $this->input->post('customerid');
// $data = array(
// 'invoice_groups' => $this->mdl_invoice_groups->get()->result(),
// 'tax_rates' => $this->mdl_tax_rates->get()->result(),
// 'client' => $this->mdl_clients->get_by_id($customerid ),
// 'clients' => $this->mdl_clients->get_latest(),
// );
// $this->layout->load_view('invoices/modal_create_poinvoice', $data);
}
}