Merge branch 'CI4-Application' of bitbucket.org:venbainformationtechnology/ria into CI4-Application

This commit is contained in:
VE10-Sanjeev 2024-08-17 09:29:20 +00:00
commit 72e1907a95
4 changed files with 470 additions and 384 deletions

View File

@ -1280,357 +1280,362 @@ class User extends BaseController
// print_r($_GET);
// echo isset($_GET['from']) ? $_GET['from'] : 'n';
// echo isset($_GET['to']) ? $_GET['to'] : 'n';
// die();
try{
// if (isset($_POST['sync']) || $_GET['from'] != null && $_GET['to'] != null)
// {
// $ch=curl_init();
//$this->load->helper('zohobooks_fetch_api_helper');
helper('zohobook');
$Zohobook_model = model('Zohobook_api_model');
if(isset($_GET['from']) && $_GET['from'] != null && isset($_GET['to']) && $_GET['to'] != null)
{
$date_today = $_GET['to'];
$date_yesterday = $_GET['from'];
// die();
try{
// if (isset($_POST['sync']) || $_GET['from'] != null && $_GET['to'] != null)
// {
// $ch=curl_init();
//$this->load->helper('zohobooks_fetch_api_helper');
helper('zohobook');
$Zohobook_model = model('Zohobook_api_model');
if(isset($_GET['from']) && $_GET['from'] != null && isset($_GET['to']) && $_GET['to'] != null)
{
$date_today = $_GET['to'];
$date_yesterday = $_GET['from'];
}
else
{
$date_today = date('Y-m-d');
$date_yesterday = date('Y-m-d',strtotime('-3 day',strtotime($date_today)));
}
// echo $date_today.'--'.$date_yesterday;die;
$chk_acc_token_val = $Zohobook_model->get_data('zohobook_accesstoken','id' , 1);
// print_r($chk_acc_token_val);//die();
$date = new \DateTime($chk_acc_token_val[0]['created_at']);
//print_r($date);
$date->add(new \DateInterval('PT1H'));
//print_r($date);
//echo '****************';
//print_r(date('Y-m-d h:i:s'));
$token = 0;
if ($date->format('Y-m-d H:i:s') > date('Y-m-d H:i:s')) { $token = $chk_acc_token_val[0]['token']; }
else { $token = generateNewToken(); $tokendata['token'] = $token; $Zohobook_model->customUpdate($tokendata , 1,'zohobook_accesstoken'); }
// $token = generateNewToken(); $tokendata['token'] = $token;
//$Zohobook_model->update($tokendata , 1,'zohobook_accesstoken');
$result = getheringInvoiceDetails($date_today , $date_yesterday , $token);
$headers_new = $result['headers_new'];
$res = json_decode($result['data'],true);
$inv_array = $res['invoices'];
// print_r($inv_array);
// echo "rrrr";
// die();
foreach($inv_array as $inv){
$invoice_id = $inv['invoice_id'];
//filter only einvoice status pushed invoices only
//&& isset($inv['einvoice_details']) && isset($inv['einvoice_details']['status']) && ($inv['einvoice_details']['status'] == 'pushed')
if($invoice_id !== "" ){
$organization_id = '776847408';
$result2=getheringInvoiceSubDetails($invoice_id,$organization_id,$headers_new);
$resall = json_decode($result2,true);
$res2[] = $resall['invoice'];
}
else
{
$date_today = date('Y-m-d');
$date_yesterday = date('Y-m-d',strtotime('-3 day',strtotime($date_today)));
}
// echo $date_today.'--'.$date_yesterday;die;
$chk_acc_token_val = $Zohobook_model->get_data('zohobook_accesstoken','id' , 1);
// print_r($chk_acc_token_val);//die();
$date = new \DateTime($chk_acc_token_val[0]['created_at']);
//print_r($date);
$date->add(new \DateInterval('PT1H'));
//print_r($date);
//echo '****************';
//print_r(date('Y-m-d h:i:s'));
$token = 0;
if ($date->format('Y-m-d H:i:s') > date('Y-m-d H:i:s')) { $token = $chk_acc_token_val[0]['token']; }
else { $token = generateNewToken(); $tokendata['token'] = $token; $Zohobook_model->customUpdate($tokendata , 1,'zohobook_accesstoken'); }
// $token = generateNewToken(); $tokendata['token'] = $token;
//$Zohobook_model->update($tokendata , 1,'zohobook_accesstoken');
$result = getheringInvoiceDetails($date_today , $date_yesterday , $token);
$headers_new = $result['headers_new'];
$res = json_decode($result['data'],true);
$inv_array = $res['invoices'];
// print_r($inv_array);
// echo "rrrr";
// die();
foreach($inv_array as $inv){
$invoice_id = $inv['invoice_id'];
//filter only einvoice status pushed invoices only
//&& isset($inv['einvoice_details']) && isset($inv['einvoice_details']['status']) && ($inv['einvoice_details']['status'] == 'pushed')
if($invoice_id !== "" ){
$organization_id = '776847408';
$result2=getheringInvoiceSubDetails($invoice_id,$organization_id,$headers_new);
$resall = json_decode($result2,true);
$res2[] = $resall['invoice'];
}
}
$insert_count = 0;
$update_count = 0;
foreach($res2 as $rs)
{
$gst_no = $rs['gst_no'];
$invoice_number = $rs['invoice_number'];
$invoice_date = $rs['date'];
$status = $rs['status'];
$due_date = $rs['due_date'];
$invoice_time=$rs['created_time'];
$time_array = explode("T", $invoice_time);
$time_array = explode("+",$time_array[1]);
$invoice_time = $time_array[0];
$sql_invoice_chk = $Zohobook_model->ip_invoices($invoice_number , $invoice_date);
if($sql_invoice_chk <= 0)
{
$gst_sql = $Zohobook_model->ip_clients($gst_no);
if($gst_sql)
{
$client_id = $gst_sql[0]['client_id'];
log_message('error', 'Data fetch success DB : ip_clients , client_id : '.$client_id);
}
else
{
log_message('error', 'No data => Data fetch failed DB : ip_clients '.$gst_no);
$gst_no_data['client_tax_code'] = $gst_no;
$gst_inserted_id = $Zohobook_model->customInsert($gst_no_data,'ip_clients');
$client_id = $gst_inserted_id;
log_message('error', 'New Data Created : DB : ip_clients , client_id : '.$client_id);
}
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < 16; $i++) { $randomString .= $characters[rand(0, $charactersLength - 1)]; }
$url_key = $randomString;
$ip_invoices['user_id'] = 1;
$ip_invoices['client_id'] = $client_id;
$ip_invoices['invoice_group_id'] = 6;
$ip_invoices['invoice_status_id'] = ($status == 'draft' ? 1 : (($status == 'sent' || $status == 'overdue') ? 2 : 5));
$ip_invoices['invoice_date_created'] = $invoice_date;
$ip_invoices['invoice_time_created'] = $invoice_time;
$ip_invoices['invoice_date_due'] = $due_date;
$ip_invoices['invoice_number'] = $invoice_number;
$ip_invoices['invoice_url_key'] = $url_key;
$ip_invoices['receivedstatus'] = 'ST066';
$ip_invoices['credit_status'] = 0;
$invoice_insert_id = $Zohobook_model->customInsert($ip_invoices,'ip_invoices');
if($invoice_insert_id)
{
log_message('error', 'Data insert success DB : ip_invoices client id :'. $client_id);
$insert_count = $insert_count + 1;
//start invoice level custom fields
//custom fields insert
$batch_no = isset($rs['custom_fields'][5]['value']) ? $rs['custom_fields'][5]['value'] : "";
// $batch_no = "";
$vehicle_number = isset($rs['custom_field_hash']['cf_vehicle_number']) ? $rs['custom_field_hash']['cf_vehicle_number']: '';
$transport_mode =isset($rs['custom_field_hash']['cf_transport_mode']) ? $rs['custom_field_hash']['cf_transport_mode'] : '';
$purchase_order_date = isset($rs['custom_field_hash']['cf_purchase_order_date'])?$rs['custom_field_hash']['cf_purchase_order_date']:'';
$driver = isset($rs['custom_field_hash']['cf_driver']) ? $rs['custom_field_hash']['cf_driver'] : '';
$place_of_supply = isset($rs['custom_field_hash']['cf_place_of_supply']) ? $rs['custom_field_hash']['cf_place_of_supply']:'';
// batch_no
$ip_invoice_custom_b['invoice_id'] = $invoice_insert_id;
$ip_invoice_custom_b['invoice_custom_fieldid'] = 62;
$ip_invoice_custom_b['invoice_custom_fieldvalue'] = $batch_no;
$result_invoice_custom_insert = $Zohobook_model->customInsert($ip_invoice_custom_b,'ip_invoice_custom');
if($result_invoice_custom_insert)
log_message('error', 'Data insert success DB : ip_invoice_custom ');
else
log_message('error', 'Data insert failed DB : ip_invoice_custom ');
// vehicle_number
$ip_invoice_custom_v['invoice_id'] = $invoice_insert_id;
$ip_invoice_custom_v['invoice_custom_fieldid'] = 8;
$ip_invoice_custom_v['invoice_custom_fieldvalue'] = $vehicle_number;
$res_vehicle = $Zohobook_model->customInsert($ip_invoice_custom_v,'ip_invoice_custom');
if($res_vehicle)
log_message('error', 'Data insert success DB : ip_invoice_custom ');
else
log_message('error', 'Data insert failed DB : ip_invoice_custom ');
// transport_mode
$ip_invoice_custom_t['invoice_id'] = $invoice_insert_id;
$ip_invoice_custom_t['invoice_custom_fieldid'] = 7;
$ip_invoice_custom_t['invoice_custom_fieldvalue'] = $transport_mode;
$res_transport_mode = $Zohobook_model->customInsert($ip_invoice_custom_t,'ip_invoice_custom');
if($res_transport_mode)
log_message('error', 'Data insert success DB : ip_invoice_custom ');
else
log_message('error', 'Data insert failed DB : ip_invoice_custom ');
// purchase_order_date
$ip_invoice_custom_p['invoice_id'] = $invoice_insert_id;
$ip_invoice_custom_p['invoice_custom_fieldid'] = 15;
$ip_invoice_custom_p['invoice_custom_fieldvalue'] = $purchase_order_date;
$res_purchase_order_date =$Zohobook_model->customInsert($ip_invoice_custom_p,'ip_invoice_custom');
if($res_purchase_order_date)
log_message('error', 'Data insert success DB : ip_invoice_custom ');
else
log_message('error', 'Data insert failed DB : ip_invoice_custom ');
// driver
$ip_invoice_custom_d['invoice_id'] = $invoice_insert_id;
$ip_invoice_custom_d['invoice_custom_fieldid'] = 58;
$ip_invoice_custom_d['invoice_custom_fieldvalue'] = $driver;
$res_driver = $Zohobook_model->customInsert($ip_invoice_custom_d,'ip_invoice_custom');
if($res_driver)
log_message('error', 'Data insert success DB : ip_invoice_custom ');
else
log_message('error', 'Data insert failed DB : ip_invoice_custom ');
// place_of_supply
$ip_invoice_custom_d['invoice_id'] = $invoice_insert_id;
$ip_invoice_custom_d['invoice_custom_fieldid'] = 10;
$ip_invoice_custom_d['invoice_custom_fieldvalue'] = $place_of_supply;
$res_place = $Zohobook_model->customInsert($ip_invoice_custom_d,'ip_invoice_custom');
if($res_place)
log_message('error', 'Data insert success DB : ip_invoice_custom ');
else
log_message('error', 'Data insert failed DB : ip_invoice_custom ');
//end invoice level custom fields
//if line items available
if(isset($rs['line_items']) && count($rs['line_items']) > 0)
{
log_message('error', 'Processing line items'.count($rs['line_items']));
for($i = 0; $i< count($rs['line_items']);$i++)
{ //start insert line items
$sku = $rs['line_items'][$i]['sku'];
$item_price = $rs['line_items'][$i]['rate'];
$item_order = $rs['line_items'][$i]['item_order'];
$item_product_unit = $rs['line_items'][$i]['unit'];
$item_name = $rs['line_items'][$i]['name'];
$item_description = $rs['line_items'][$i]['description'];
$item_quantity = $rs['line_items'][$i]['quantity'];
$cgst = $rs['line_items'][$i]['line_item_taxes'][1]['tax_name'];
$sgst = $rs['line_items'][$i]['line_item_taxes'][0]['tax_name'];
$cgst = $cgst[4];
$sgst = $sgst[4];
$cgst = $cgst.'.000';
$getcgsttax = $Zohobook_model->ip_tax_rates($cgst);
if($getcgsttax)
{
$cgsttaxid = $getcgsttax[0]['tax_rate_id'];
log_message('error', 'Data fetch success DB : ip_tax_rates cgst'. $cgst);
}
else
{
log_message('error', 'No data => Data fetch failed DB : ip_tax_rates '. $cgst);
$cgst_data['tax_rate_percent'] = $cgst;
$getcgsttax = $Zohobook_model->customInsert($cgst_data,'ip_tax_rates');
$cgsttaxid = $getcgsttax;
log_message('error', 'New Data Created : DB : ip_tax_rates , tax_rate_id : '.$cgsttaxid);
}
$sgst = $sgst.'.000';
$getsgsttax = $Zohobook_model->ip_tax_rates($sgst);
if($getsgsttax)
{
$sgsttaxid = $getsgsttax[0]['tax_rate_id'];
log_message('error', 'Data fetch success DB : ip_tax_rates sgst'. $sgst);
}
else
{
log_message('error', 'No data => Data fetch failed DB : ip_tax_rates '. $sgst);
$sgst_data['tax_rate_percent'] = $sgst;
$getsgsttax = $Zohobook_model->customInsert($sgst_data,'ip_tax_rates');
$sgsttaxid = $getsgsttax;
log_message('error', 'New Data Created : DB : ip_tax_rates , tax_rate_id : '.$sgsttaxid);
}
$item_subtotal = $rs['line_items'][$i]['item_total'];
$item_sgst_amt = $rs['line_items'][$i]['line_item_taxes'][0]['tax_amount'];
$item_cgst_amt = $rs['line_items'][$i]['line_item_taxes'][1]['tax_amount'];
$item_tax_total = ($item_sgst_amt + $item_cgst_amt);
$item_total = ($item_subtotal + $item_tax_total);
$item_discount = 0.00;
$item_igst_amt = 0.00;
// if($batch_no==""){ $batch_no = "";}
$sku_sql = $Zohobook_model->ip_products($sku);
if(!empty($sku_sql))
{
$product_id = $sku_sql[0]['product_id'];
log_message('error', 'Data fetch success DB : ip_products , product_id : '.$product_id);
}
else
{
log_message('error', 'No data => Data fetch failed DB : ip_products '. $sku);
$sku_data['product_name'] = $item_name;
$sku_data['product_description'] = $item_description;
$sku_data['sku'] = $sku;
$sku_inserted_id = $Zohobook_model->customInsert($sku_data,'ip_products');
$product_id = $sku_inserted_id;
log_message('error', '$sku_sql => Data fetch failed DB : ip_products '. $sku_sql);
}
$insert_count = 0;
$update_count = 0;
foreach($res2 as $rs)
{
$gst_no = $rs['gst_no'];
$invoice_number = $rs['invoice_number'];
$invoice_date = $rs['date'];
$status = $rs['status'];
$due_date = $rs['due_date'];
$invoice_url = $rs['invoice_url'];
$einvoice_number = $rs['einvoice_details']['inv_ref_num'];
log_message('error', 'sku'.$sku);
log_message('error', 'New Data Created : DB : product_id , product_id : '.$product_id);
}
//#1
$ip_invoice_items['invoice_id'] = $invoice_insert_id;
$ip_invoice_items['item_product_id'] = $product_id;
$ip_invoice_items['item_date_added'] = $invoice_date;
$ip_invoice_items['item_name'] = $item_name;
$ip_invoice_items['item_description'] = $item_description;
$ip_invoice_items['item_quantity'] = $item_quantity;
$ip_invoice_items['item_price'] = $item_price;
$ip_invoice_items['item_order'] = $item_order;
$ip_invoice_items['item_product_unit'] = $item_product_unit;
$ip_invoice_items['Sgst_item_tax_rate_id'] = $sgsttaxid;
$ip_invoice_items['Cgst_item_tax_rate_id'] = $cgsttaxid;
$item_insert_id = $Zohobook_model->customInsert($ip_invoice_items,'ip_invoice_items');
if($item_insert_id)
log_message('error', 'Data insert success DB : ip_invoice_items => Sgst_item_tax_rate_id :'. $sgsttaxid);
else
log_message('error', 'Data insert failed DB : ip_invoice_items => Sgst_item_tax_rate_id :'. $sgsttaxid);
//tax amount -- ip_invoice_item_amounts - table
$ip_invoice_item_amounts['item_id'] = $item_insert_id;
$ip_invoice_item_amounts['item_subtotal'] = $item_subtotal;
$ip_invoice_item_amounts['item_tax_total'] = $item_tax_total;
$ip_invoice_item_amounts['item_total'] = $item_total;
$ip_invoice_item_amounts['item_sgst_amt'] = $item_sgst_amt;
$ip_invoice_item_amounts['item_cgst_amt'] = $item_cgst_amt;
$ip_invoice_item_amounts['item_discount'] = $item_discount;
$ip_invoice_item_amounts['item_igst_amt'] = $item_igst_amt;
$result_tax_amount_insert = $Zohobook_model->customInsert($ip_invoice_item_amounts,'ip_invoice_item_amounts');
if($result_tax_amount_insert)
log_message('error', 'Data insert success DB : ip_invoice_item_amounts ');
else
log_message('error', 'Data insert failed DB : ip_invoice_item_amounts ');
} //end line items insert
}
else
{
log_message('error', 'Line Items not found in API result');
}
}
else
{
log_message('error', 'Data insert failed DB : ip_invoice_items client id :'. $client_id);
}
}
else // update invoice status, especially for cancelled invoices
$invoice_time=$rs['created_time'];
$time_array = explode("T", $invoice_time);
$time_array = explode("+",$time_array[1]);
$invoice_time = $time_array[0];
$sql_invoice_chk = $Zohobook_model->ip_invoices($invoice_number , $invoice_date);
if($sql_invoice_chk <= 0)
{
$gst_sql = $Zohobook_model->ip_clients($gst_no);
if($gst_sql)
{
if($status == "void" || $status == "sent" || $status == "overdue")
$client_id = $gst_sql[0]['client_id'];
log_message('error', 'Data fetch success DB : ip_clients , client_id : '.$client_id);
}
else
{
log_message('error', 'No data => Data fetch failed DB : ip_clients '.$gst_no);
$gst_no_data['client_tax_code'] = $gst_no;
$gst_inserted_id = $Zohobook_model->customInsert($gst_no_data,'ip_clients');
$client_id = $gst_inserted_id;
log_message('error', 'New Data Created : DB : ip_clients , client_id : '.$client_id);
}
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < 16; $i++) { $randomString .= $characters[rand(0, $charactersLength - 1)]; }
$url_key = $randomString;
$ip_invoices['user_id'] = 1;
$ip_invoices['client_id'] = $client_id;
$ip_invoices['invoice_group_id'] = 6;
$ip_invoices['invoice_status_id'] = ($status == 'draft' ? 1 : (($status == 'sent' || $status == 'overdue') ? 2 : 5));
$ip_invoices['invoice_date_created'] = $invoice_date;
$ip_invoices['invoice_time_created'] = $invoice_time;
$ip_invoices['invoice_date_due'] = $due_date;
$ip_invoices['invoice_number'] = $invoice_number;
$ip_invoices['invoice_url_key'] = $url_key;
$ip_invoices['receivedstatus'] = 'ST066';
$ip_invoices['credit_status'] = 0;
$ip_invoices['status'] = $status;
$ip_invoices['e_invoice_number'] = $einvoice_number;
$ip_invoices['invoice_url'] = $invoice_url;
$invoice_insert_id = $Zohobook_model->customInsert($ip_invoices,'ip_invoices');
if($invoice_insert_id)
{
log_message('error', 'Data insert success DB : ip_invoices client id :'. $client_id);
$insert_count = $insert_count + 1;
//start invoice level custom fields
//custom fields insert
$batch_no = isset($rs['custom_fields'][5]['value']) ? $rs['custom_fields'][5]['value'] : "";
// $batch_no = "";
$vehicle_number = isset($rs['custom_field_hash']['cf_vehicle_number']) ? $rs['custom_field_hash']['cf_vehicle_number']: '';
$transport_mode =isset($rs['custom_field_hash']['cf_transport_mode']) ? $rs['custom_field_hash']['cf_transport_mode'] : '';
$purchase_order_date = isset($rs['custom_field_hash']['cf_purchase_order_date'])?$rs['custom_field_hash']['cf_purchase_order_date']:'';
$driver = isset($rs['custom_field_hash']['cf_driver']) ? $rs['custom_field_hash']['cf_driver'] : '';
$place_of_supply = isset($rs['custom_field_hash']['cf_place_of_supply']) ? $rs['custom_field_hash']['cf_place_of_supply']:'';
// batch_no
$ip_invoice_custom_b['invoice_id'] = $invoice_insert_id;
$ip_invoice_custom_b['invoice_custom_fieldid'] = 62;
$ip_invoice_custom_b['invoice_custom_fieldvalue'] = $batch_no;
$result_invoice_custom_insert = $Zohobook_model->customInsert($ip_invoice_custom_b,'ip_invoice_custom');
if($result_invoice_custom_insert)
log_message('error', 'Data insert success DB : ip_invoice_custom ');
else
log_message('error', 'Data insert failed DB : ip_invoice_custom ');
// vehicle_number
$ip_invoice_custom_v['invoice_id'] = $invoice_insert_id;
$ip_invoice_custom_v['invoice_custom_fieldid'] = 8;
$ip_invoice_custom_v['invoice_custom_fieldvalue'] = $vehicle_number;
$res_vehicle = $Zohobook_model->customInsert($ip_invoice_custom_v,'ip_invoice_custom');
if($res_vehicle)
log_message('error', 'Data insert success DB : ip_invoice_custom ');
else
log_message('error', 'Data insert failed DB : ip_invoice_custom ');
// transport_mode
$ip_invoice_custom_t['invoice_id'] = $invoice_insert_id;
$ip_invoice_custom_t['invoice_custom_fieldid'] = 7;
$ip_invoice_custom_t['invoice_custom_fieldvalue'] = $transport_mode;
$res_transport_mode = $Zohobook_model->customInsert($ip_invoice_custom_t,'ip_invoice_custom');
if($res_transport_mode)
log_message('error', 'Data insert success DB : ip_invoice_custom ');
else
log_message('error', 'Data insert failed DB : ip_invoice_custom ');
// purchase_order_date
$ip_invoice_custom_p['invoice_id'] = $invoice_insert_id;
$ip_invoice_custom_p['invoice_custom_fieldid'] = 15;
$ip_invoice_custom_p['invoice_custom_fieldvalue'] = $purchase_order_date;
$res_purchase_order_date =$Zohobook_model->customInsert($ip_invoice_custom_p,'ip_invoice_custom');
if($res_purchase_order_date)
log_message('error', 'Data insert success DB : ip_invoice_custom ');
else
log_message('error', 'Data insert failed DB : ip_invoice_custom ');
// driver
$ip_invoice_custom_d['invoice_id'] = $invoice_insert_id;
$ip_invoice_custom_d['invoice_custom_fieldid'] = 58;
$ip_invoice_custom_d['invoice_custom_fieldvalue'] = $driver;
$res_driver = $Zohobook_model->customInsert($ip_invoice_custom_d,'ip_invoice_custom');
if($res_driver)
log_message('error', 'Data insert success DB : ip_invoice_custom ');
else
log_message('error', 'Data insert failed DB : ip_invoice_custom ');
// place_of_supply
$ip_invoice_custom_d['invoice_id'] = $invoice_insert_id;
$ip_invoice_custom_d['invoice_custom_fieldid'] = 10;
$ip_invoice_custom_d['invoice_custom_fieldvalue'] = $place_of_supply;
$res_place = $Zohobook_model->customInsert($ip_invoice_custom_d,'ip_invoice_custom');
if($res_place)
log_message('error', 'Data insert success DB : ip_invoice_custom ');
else
log_message('error', 'Data insert failed DB : ip_invoice_custom ');
//end invoice level custom fields
//if line items available
if(isset($rs['line_items']) && count($rs['line_items']) > 0)
{
$sql_invoice_update = array();
$sql_invoice_update['invoice_status_id'] = (($status == "sent" || $status == "overdue") ? 2 : 5);
// echo 'script' . $invoice_number. $status;
// print_r( $sql_invoice_update);
// echo '<br>';
$sql_invoice_update = $Zohobook_model->sql_invoice_update($sql_invoice_update,$invoice_number,$invoice_date,'ip_invoices');
if($sql_invoice_update)
{
log_message('error', 'Data update success DB : ip_invoices ');
}
else
{
log_message('error', 'Data update failed DB : ip_invoices ');
}
$update_count = $update_count + 1;
log_message('error', 'Processing line items'.count($rs['line_items']));
for($i = 0; $i< count($rs['line_items']);$i++)
{ //start insert line items
$sku = $rs['line_items'][$i]['sku'];
$item_price = $rs['line_items'][$i]['rate'];
$item_order = $rs['line_items'][$i]['item_order'];
$item_product_unit = $rs['line_items'][$i]['unit'];
$item_name = $rs['line_items'][$i]['name'];
$item_description = $rs['line_items'][$i]['description'];
$item_quantity = $rs['line_items'][$i]['quantity'];
$cgst = $rs['line_items'][$i]['line_item_taxes'][1]['tax_name'];
$sgst = $rs['line_items'][$i]['line_item_taxes'][0]['tax_name'];
$cgst = $cgst[4];
$sgst = $sgst[4];
$cgst = $cgst.'.000';
$getcgsttax = $Zohobook_model->ip_tax_rates($cgst);
if($getcgsttax)
{
$cgsttaxid = $getcgsttax[0]['tax_rate_id'];
log_message('error', 'Data fetch success DB : ip_tax_rates cgst'. $cgst);
}
else
{
log_message('error', 'No data => Data fetch failed DB : ip_tax_rates '. $cgst);
$cgst_data['tax_rate_percent'] = $cgst;
$getcgsttax = $Zohobook_model->customInsert($cgst_data,'ip_tax_rates');
$cgsttaxid = $getcgsttax;
log_message('error', 'New Data Created : DB : ip_tax_rates , tax_rate_id : '.$cgsttaxid);
}
$sgst = $sgst.'.000';
$getsgsttax = $Zohobook_model->ip_tax_rates($sgst);
if($getsgsttax)
{
$sgsttaxid = $getsgsttax[0]['tax_rate_id'];
log_message('error', 'Data fetch success DB : ip_tax_rates sgst'. $sgst);
}
else
{
log_message('error', 'No data => Data fetch failed DB : ip_tax_rates '. $sgst);
$sgst_data['tax_rate_percent'] = $sgst;
$getsgsttax = $Zohobook_model->customInsert($sgst_data,'ip_tax_rates');
$sgsttaxid = $getsgsttax;
log_message('error', 'New Data Created : DB : ip_tax_rates , tax_rate_id : '.$sgsttaxid);
}
$item_subtotal = $rs['line_items'][$i]['item_total'];
$item_sgst_amt = $rs['line_items'][$i]['line_item_taxes'][0]['tax_amount'];
$item_cgst_amt = $rs['line_items'][$i]['line_item_taxes'][1]['tax_amount'];
$item_tax_total = ($item_sgst_amt + $item_cgst_amt);
$item_total = ($item_subtotal + $item_tax_total);
$item_discount = 0.00;
$item_igst_amt = 0.00;
// if($batch_no==""){ $batch_no = "";}
$sku_sql = $Zohobook_model->ip_products($sku);
if(!empty($sku_sql))
{
$product_id = $sku_sql[0]['product_id'];
log_message('error', 'Data fetch success DB : ip_products , product_id : '.$product_id);
}
else
{
log_message('error', 'No data => Data fetch failed DB : ip_products '. $sku);
$sku_data['product_name'] = $item_name;
$sku_data['product_description'] = $item_description;
$sku_data['sku'] = $sku;
$sku_inserted_id = $Zohobook_model->customInsert($sku_data,'ip_products');
$product_id = $sku_inserted_id;
log_message('error', '$sku_sql => Data fetch failed DB : ip_products '. $sku_sql);
log_message('error', 'sku'.$sku);
log_message('error', 'New Data Created : DB : product_id , product_id : '.$product_id);
}
//#1
$ip_invoice_items['invoice_id'] = $invoice_insert_id;
$ip_invoice_items['item_product_id'] = $product_id;
$ip_invoice_items['item_date_added'] = $invoice_date;
$ip_invoice_items['item_name'] = $item_name;
$ip_invoice_items['item_description'] = $item_description;
$ip_invoice_items['item_quantity'] = $item_quantity;
$ip_invoice_items['item_price'] = $item_price;
$ip_invoice_items['item_order'] = $item_order;
$ip_invoice_items['item_product_unit'] = $item_product_unit;
$ip_invoice_items['Sgst_item_tax_rate_id'] = $sgsttaxid;
$ip_invoice_items['Cgst_item_tax_rate_id'] = $cgsttaxid;
$item_insert_id = $Zohobook_model->customInsert($ip_invoice_items,'ip_invoice_items');
if($item_insert_id)
log_message('error', 'Data insert success DB : ip_invoice_items => Sgst_item_tax_rate_id :'. $sgsttaxid);
else
log_message('error', 'Data insert failed DB : ip_invoice_items => Sgst_item_tax_rate_id :'. $sgsttaxid);
//tax amount -- ip_invoice_item_amounts - table
$ip_invoice_item_amounts['item_id'] = $item_insert_id;
$ip_invoice_item_amounts['item_subtotal'] = $item_subtotal;
$ip_invoice_item_amounts['item_tax_total'] = $item_tax_total;
$ip_invoice_item_amounts['item_total'] = $item_total;
$ip_invoice_item_amounts['item_sgst_amt'] = $item_sgst_amt;
$ip_invoice_item_amounts['item_cgst_amt'] = $item_cgst_amt;
$ip_invoice_item_amounts['item_discount'] = $item_discount;
$ip_invoice_item_amounts['item_igst_amt'] = $item_igst_amt;
$result_tax_amount_insert = $Zohobook_model->customInsert($ip_invoice_item_amounts,'ip_invoice_item_amounts');
if($result_tax_amount_insert)
log_message('error', 'Data insert success DB : ip_invoice_item_amounts ');
else
log_message('error', 'Data insert failed DB : ip_invoice_item_amounts ');
} //end line items insert
}
else
{
log_message('error', 'Line Items not found in API result');
}
}
// echo 'new invoice inserted count- ' . $insert_count . '/' . 'status updated count - ' . $update_count;
else
{
log_message('error', 'Data insert failed DB : ip_invoice_items client id :'. $client_id);
}
}
else // update invoice status, especially for cancelled invoices
{
// if($status == "void" || $status == "sent" || $status == "overdue")
// {
$sql_invoice_update = array();
$sql_invoice_update['invoice_status_id'] = (($status == "sent" || $status == "overdue") ? 2 : 5);
// echo 'script' . $invoice_number. $status;
// print_r( $sql_invoice_update);
// echo '<br>';
$sql_invoice_update = $Zohobook_model->sql_invoice_update($sql_invoice_update,$invoice_number,$invoice_date,'ip_invoices');
if($sql_invoice_update)
{
log_message('error', 'Data update success DB : ip_invoices ');
}
else
{
log_message('error', 'Data update failed DB : ip_invoices ');
}
$update_count = $update_count + 1;
// }
}
// echo 'new invoice inserted count- ' . $insert_count . '/' . 'status updated count - ' . $update_count;
}$response = [
'status' => true,
'message' => "Successfully data inserted. Total inserted: " . $insert_count . ", Total Updated: " . $update_count
];
return json_encode($response);
// curl_close($ch);
// }
}
catch (\Exception $e) {
$data['err'] = $e->getMessage();
// $db = \Config\Database::connect();
// $data['last_query'] = $db->getLastQuery();;
$Zohobook_model->customInsert($data,'zohobook_api_err');
log_message('error', "Data insertion failed : " . $e->getMessage());
return json_encode("Data insertion failed : " . $e->getMessage());
}
}
// END zoho API
}$response = [
'status' => true,
'message' => "Successfully data inserted. Total inserted: " . $insert_count . ", Total Updated: " . $update_count
];
return json_encode($response);
// curl_close($ch);
// }
}
catch (\Exception $e) {
$data['err'] = $e->getMessage();
// $db = \Config\Database::connect();
// $data['last_query'] = $db->getLastQuery();;
$Zohobook_model->customInsert($data,'zohobook_api_err');
log_message('error', "Data insertion failed : " . $e->getMessage());
return json_encode("Data insertion failed : " . $e->getMessage());
}
}
// END zoho API
// Sales Invoice List

View File

@ -17,24 +17,68 @@ class Ipinvoice_model extends Model
*/
function saleInvoiceListing()
{
$builder = $this->db->table('ip_invoices ')
$builder = $this->db->table('ip_invoices')
->select('ip_invoices.invoice_id, ip_invoices.user_id, ip_invoices.client_id,
ip_invoices.invoice_group_id, ip_invoices.invoice_status_id, ip_invoices.invoice_date_due, ip_invoices.invoice_date_created,
ip_invoices.invoice_number, ip_invoices.invoice_terms, ip_clients.client_name,
ip_payment_methods.payment_method_name, ip_users.user_name, ip_products.product_name,
ip_invoice_amounts.invoice_total')
ip_invoices.invoice_number, ip_invoices.invoice_terms, ip_invoices.status, ip_invoices.e_invoice_number, ip_invoices.invoice_url, ip_clients.client_name,
ip_payment_methods.payment_method_name, ip_users.user_name,
ip_products.product_name, ip_invoice_items.item_price, ip_products.cgst, ip_products.sgst,
ip_invoice_items.item_quantity, ip_invoice_items.item_price, ip_invoice_items.item_name, ip_invoice_items.item_quantity,
ip_invoice_amounts.invoice_total, ip_invoice_amounts.invoice_item_subtotal, ip_invoice_amounts.invoice_item_tax_total')
->join('ip_payment_methods', 'ip_invoices.payment_method = ip_payment_methods.payment_method_id', 'left')
->join('ip_clients', 'ip_invoices.client_id = ip_clients.client_id', 'left')
->join('ip_users', 'ip_invoices.user_id = ip_users.user_id', 'left')
->join('ip_invoice_items', 'ip_invoices.invoice_id = ip_invoice_items.invoice_id', 'left')
->join('ip_products', 'ip_invoice_items.item_product_id = ip_products.product_id', 'left')
->join('ip_invoice_amounts', 'ip_invoices.invoice_id = ip_invoice_amounts.invoice_id', 'left')
->orderBy('ip_invoices.invoice_number', 'DESC');
->orderBy('ip_invoices.invoice_number', 'DESC');
$query = $builder->get();
$result = $query->getResult();
// $results = $query->getResultArray();
return $result;
// $invoices = [];
// foreach ($results as $row) {
// $invoice_id = $row['invoice_id'];
// // If the invoice_id doesn't exist in the $invoices array, initialize it
// if (!isset($invoices[$invoice_id])) {
// $invoices[$invoice_id] = [
// 'invoice_id' => $row['invoice_id'],
// 'user_id' => $row['user_id'],
// 'client_id' => $row['client_id'],
// 'invoice_group_id' => $row['invoice_group_id'],
// 'invoice_status_id' => $row['invoice_status_id'],
// 'invoice_date_due' => $row['invoice_date_due'],
// 'invoice_date_created' => $row['invoice_date_created'],
// 'invoice_number' => $row['invoice_number'],
// 'invoice_terms' => $row['invoice_terms'],
// 'status' => $row['status'],
// 'e_invoice_number' => $row['e_invoice_number'],
// 'invoice_url' => $row['invoice_url'],
// 'client_name' => $row['client_name'],
// 'payment_method_name' => $row['payment_method_name'],
// 'user_name' => $row['user_name'],
// 'invoice_total' => $row['invoice_total'],
// 'invoice_item_subtotal' => $row['invoice_item_subtotal'],
// 'invoice_item_tax_total' => $row['invoice_item_tax_total'],
// 'products' => [] // Initialize the products array
// ];
// }
// // Add the product to the products array for the current invoice
// $invoices[$invoice_id]['products'][] = [
// 'product_name' => $row['product_name'],
// 'item_quantity' => $row['item_quantity'],
// 'item_price' => $row['item_price'],
// ];
// }
// // Return the grouped invoices
// return $invoices;
}

View File

@ -349,7 +349,7 @@
<?php } ?>
<li class="treeview">
<a id="salesDashboardLin" href="<?php echo base_url(); ?>sales_invoice">
<i class="fa fa-file-text-o"></i><span>Sales Invoice</span>
<i class="fa fa-file-text-o"></i><span>Sales</span>
</a>
</li><!--Dashboard active treeview -->

View File

@ -1,5 +1,10 @@
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
<style>
.invoice-link {
text-decoration: underline;
color: #007bff; /* Adjust color as needed */
}
</style>
<div class="content-wrapper">
<!-- Content Header (Page header) -->
<section class="content-header">
@ -21,40 +26,60 @@
</div><!-- /.box-header -->
<div class="box-body">
<table id="datatable_sales_invoice_list" class="table table-bordered table-hover" style="background-color:#fff;font-size:12px;text-align: right;" >
<table id="datatable_sales_invoice_list" class="table table-striped dt-responsive nowrap w-100" style="background-color:#fff;font-size:12px;text-align: right;" >
<thead style="background-color: #ddd;">
<tr >
<th width="10%">Invoice Date</th>
<th width="10%">Invoice No</th>
<th width="10%">Invoice Date Created</th>
<th width="10%">Invoice Date Due</th>
<th width="10%">Client Name</th>
<th width="10%">User Name</th>
<th width="10%">Product Name</th>
<th width="10%" >Payment Method</th>
<th width="10%">Invoice Total</th>
<th width="10%">Product</th>
<th width="10%">Rate</th>
<th width="10%">Quantity</th>
<th width="10%">Sub Total</th>
<th width="10%">GST</th>
<th width="10%">Total</th>
<th width="10%">Status</th>
<th width="10%" >E-Invoice Number</th>
<th width="5%">Action</th>
</tr>
</thead>
<tbody>
<input type="text" id="invoice_id_set" name="invoice_id_set" hidden>
<?php if(!empty($sales_invoice)){ foreach($sales_invoice as $invoice){ ?>
<tr style="cursor: pointer;" onclick="openInvoiceModal('<?php echo $invoice->invoice_number; ?>')">
<?php if(!empty($sales_invoice)){ foreach($sales_invoice as $invoice){
$subtotal = $invoice->item_price * $invoice->item_quantity;
// Calculate CGST and SGST
$cgst_amount = ($subtotal * $invoice->cgst) / 100;
$sgst_amount = ($subtotal * $invoice->sgst) / 100;
$total = $subtotal + $cgst_amount + $sgst_amount;?>
<!-- Main invoice row -->
<tr class="parent-row">
<td style="text-align: center;"><?php echo date('d-m-Y', strtotime($invoice->invoice_date_created)); ?></td>
<td style="text-align: left;">
<?php echo $invoice->invoice_number; ?>
</td>
<td style="text-align: center;"><?php echo date('d/m/y', strtotime($invoice->invoice_date_created)); ?>
<td style="text-align: center;"><?php echo date('d/m/y', strtotime($invoice->invoice_date_due)); ?>
<?php if(!empty($invoice->invoice_url)){ ?>
<a href="<?php echo $invoice->invoice_url; ?>" target="_blank" class="invoice-link">
<?php } ?>
<?php echo $invoice->invoice_number; ?>
<?php if(!empty($invoice->invoice_url)){ ?>
</a>
<?php } ?>
</td>
<td style="text-align: center;"><?php echo $invoice->client_name ?></td>
<td style="text-align: center;"><?php echo $invoice->user_name ?></td>
<td style="text-align: center;"><?php echo $invoice->product_name ?></td>
<td style="text-align: center;"><?php echo $invoice->payment_method_name; ?></td>
<td style="text-align: center;"><?php echo $invoice->invoice_total ?></td>
<td style="text-align: center;"><?php echo $invoice->item_name ?></td>
<td style="text-align: center;"><?php echo $invoice->item_price ?></td>
<td style="text-align: center;"><?php echo number_format($invoice->item_quantity, 2 ,'.', ',' ) ?></td>
<td style="text-align: center;"><?php echo number_format($subtotal, 2, '.', ',') ?></td>
<td style="text-align: center;"><?php echo number_format($cgst_amount+$sgst_amount, 2, '.', ',') ?></td>
<td style="text-align: center;"><?php echo number_format($total, 2, '.', ',') ?></td>
<td style="text-align: center;"><?php echo $invoice->status ?></td>
<td style="text-align: center;"><?php echo $invoice->e_invoice_number; ?></td>
<td style="text-align: center;">
<a class="edit-button" style="cursor: pointer; display: inline-block;" title="Files Upload" onclick="openInvoiceModal('<?php echo $invoice->invoice_number; ?>', '<?php echo $invoice->client_name; ?>', '<?php echo $invoice->invoice_date_created; ?>')">
<i class="fas fa-file-upload text-muted" style="font-size: 18px; vertical-align: middle;"></i>
</a>
</td>
</tr>
<?php
}
}
?>
<?php } } ?>
</tbody>
</table>
</div><!-- /.box-body -->
@ -72,14 +97,16 @@
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title" id="invoiceModalLabel">Invoice Files</h3>
<label for=""> Invoice Number :</label><span id="invoice_number_display_model"></span>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<label for=""> Client Name :</label><span id="client_name_display_model"></span><br>
<label for=""> Date :</label><span id="date_display_model"></span><br>
<label for=""> Invoice Number :</label><span id="invoice_number_display_model"></span>
<div class="col-md-12">
<div class="col-md-10"></div>
<div class="col-md-2">
<button type="button" class="btn btn-primary btn-sm a1" onclick="appendFilesFileds()" id="day">
<button type="button" class="btn btn-primary btn-sm a1" onclick="appendFilesFileds()" id="day" >
Add New File
</button>
</div>
@ -123,12 +150,12 @@
</div>
<script type="text/javascript" src="<?php echo base_url(); ?>public/assets/js/common.js" charset="utf-8"></script>
<script type="text/javascript">
$(function () {
$('#datatable_sales_invoice_list').DataTable({
$(document).ready(function() {
var table = $('#datatable_sales_invoice_list').DataTable({
"paging": true,
"lengthChange": true,
"searching": true,
@ -138,14 +165,21 @@
"type": "date-eu"
}],
"aaSorting": [
[1, "desc"]
[0, "desc"]
],
"info": true,
"autoWidth": true,
"pageLength": 10,
"lengthMenu": [10, 25, 50, 100],
});
});
"rowCallback": function(row, data, index) {
// Ignore child rows
if ($(row).hasClass('child-row')) {
return;
}
}
});
});
</script>
<script>
@ -191,8 +225,11 @@ function saveAttachment() {
}
function openInvoiceModal(invoiceNumber) {
function openInvoiceModal(invoiceNumber, clientName, Date) {
$('#invoice_number_display_model').html(invoiceNumber);
$('#client_name_display_model').html(clientName);
$('#date_display_model').html(Date);
// document.getElementById('modalInvoiceNumber').innerText = invoiceNumber;
$('#day').show();
// $('#invoiceModal').modal('show');