diff --git a/app/Config/Routes.php b/app/Config/Routes.php index b08ca39c..a7164a8c 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -437,6 +437,7 @@ $routes->get('sales_invoice', 'Sales::sales_invoice'); $routes->post('sales_invoice', 'Sales::sales_invoice'); $routes->post('download_sales_invoice', 'Sales::download_sales_invoice'); $routes->post('updateInvRecQty', 'Sales::updateInvRecQty'); +$routes->match(['GET', 'POST'], 'sales_report', 'Sales::sales_report'); // transporter Routes $routes->get('transporterListing', 'Supplier::transporterListing'); diff --git a/app/Controllers/Sales.php b/app/Controllers/Sales.php index 48b2656b..a58fb3ee 100755 --- a/app/Controllers/Sales.php +++ b/app/Controllers/Sales.php @@ -118,6 +118,44 @@ class Sales extends BaseController $this->loadViews("sales_invoice", $this->global, $data, NULL); } + + public function sales_report() + { + $headline = ''; + $report = []; + + if ($this->request->getMethod(true) === 'POST' && $this->request->getPost('btn_submit')) { + + + $from_date = $this->request->getPost('from_date'); + $to_date = $this->request->getPost('to_date'); + $hsn_number = $this->request->getPost('hsn_number'); + $product_id = $this->request->getPost('product'); + $client_id = $this->request->getPost('client'); + + + + $headline .= ((isset($from_date) && isset($to_date)) && (!empty($from_date) && !empty($to_date))) ? $from_date . ' to ' . $to_date. ', ' : ''; + $headline .= (isset($hsn_number) && !empty($hsn_number)) ? $hsn_number . ', ' : ''; + $headline .= (isset($product_id) && !empty($product_id)) ? $this->ipinvoice_model->getProductName($product_id) . ', ' : ''; + $headline .= (isset($client_id) && !empty($client_id)) ? $this->ipinvoice_model->getClientName($client_id) . ', ' : ''; + + + + $report = $this->ipinvoice_model->sales_report($from_date, $to_date, $hsn_number, $product_id, $client_id); + } + $data['hsn'] = $this->ipinvoice_model->getHsn(); + $data['product'] = $this->ipinvoice_model->getProducts(); + $data['client'] = $this->ipinvoice_model->getClients(); + + $data['headline'] = $headline; + $data['sales_invoice'] = $report; + + // Load the view + $this->global['pageTitle'] = 'Reports'; + $this->loadviews("report_sales", $this->global, $data, NULL); + } + public function download_sales_invoice() { // Fetch data from the model diff --git a/app/Controllers/User.php b/app/Controllers/User.php index 5cea8b2e..6209aefd 100755 --- a/app/Controllers/User.php +++ b/app/Controllers/User.php @@ -1368,6 +1368,10 @@ class User extends BaseController $headers_new = $result['headers_new']; $res = json_decode($result['data'], true); $inv_array = $res['invoices']; + + // $cteditNotes = getAllCreditNotes($date_today, $date_yesterday, $token); + // dd($cteditNotes); + // dd($inv_array); // print_r($inv_array); // echo "rrrr"; @@ -1388,6 +1392,7 @@ class User extends BaseController // dd($res2); foreach ($res2 as $rs) { + $gst_no = $rs['gst_no']; $customer_id = $rs['customer_id']; $customer_name = $rs['customer_name']; @@ -1538,7 +1543,7 @@ class User extends BaseController if (isset($rs['line_items']) && count($rs['line_items']) > 0) { log_message('error', 'Processing line items' . count($rs['line_items'])); - dd($rs); + // dd($rs); for ($i = 0; $i < count($rs['line_items']); $i++) { //start insert line items $sku = $rs['line_items'][$i]['sku']; diff --git a/app/Helpers/zohobook_helper.php b/app/Helpers/zohobook_helper.php index bfce0ba3..4d957e05 100755 --- a/app/Helpers/zohobook_helper.php +++ b/app/Helpers/zohobook_helper.php @@ -110,4 +110,94 @@ if (! function_exists('test_helper')) { } } +if (! function_exists('getAllCreditNotes')) { + // function getAllCreditNotes($date_today, $date_yesterday, $accesstoken) + // { + // // Initialize cURL + // $ch = curl_init(); + + // // Zoho API credentials + // $organization_id = '776847408'; + // // $url_org = "https://books.zoho.com/api/v3/creditnotes?"; + // $url_org = "https://www.zohoapis.com/books/v3/creditnotes?"; + + // // Construct query parameters + // $fields = array( + // "usestate" => "true", + // "organization_id" => $organization_id, + // "date_start" => $date_yesterday, + // "date_end" => $date_today + // ); + // $data_all = http_build_query($fields); + + // // Set headers + // $headers = array( + // 'Authorization: Zoho-oauthtoken '.$accesstoken, + // 'Content-Type: application/json' + // ); + + // // Construct URL + // $data_access = $url_org.$data_all; + + // // Set cURL options + // curl_setopt($ch, CURLOPT_URL, $data_access); + // curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + + // curl_setopt($ch, CURLOPT_HEADER, 0); + // curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); + // curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + + // // Execute cURL request + // $result = curl_exec($ch); + + // // Store headers and data + // $data['headers_new'] = $headers; + // $data['data'] = curl_exec($ch); + // // Return data + // return $data; + // } + + function getAllCreditNotes($date_today, $date_yesterday, $accesstoken) + { + // Initialize cURL + $ch = curl_init(); + var_dump($accesstoken); + // Zoho API credentials + $organization_id = '776847408'; + $url_org = "https://books.zoho.com/api/v3/creditnotes?"; + + // Construct query parameters manually (Zoho might need raw values) + $query_string = "usestate=true&organization_id=$organization_id&date_start=$date_yesterday&date_end=$date_today"; + + // Set headers + $headers = array( + 'Authorization: Zoho-oauthtoken ' . $accesstoken, + 'Content-Type: application/json' + ); + + // Set cURL options + curl_setopt($ch, CURLOPT_URL, $url_org . $query_string); + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + + // Execute cURL request + $result = curl_exec($ch); + + // Check for errors + if ($result === false) { + return ['error' => curl_error($ch)]; + } + + // Close cURL session + curl_close($ch); + + return [ + 'headers_new' => $headers, + 'data' => $result + ]; + } + +} + ?> \ No newline at end of file diff --git a/app/Models/Inwardgateregister_model.php b/app/Models/Inwardgateregister_model.php index 4ec07343..f8f6a1b3 100755 --- a/app/Models/Inwardgateregister_model.php +++ b/app/Models/Inwardgateregister_model.php @@ -410,6 +410,7 @@ class Inwardgateregister_model extends Model LEFT JOIN t_purchaseorder_lineitem POL ON PONO = POL.PONO AND IGRD.MaterialCode = POL.MaterialCode LEFT JOIN t_revenue_tax tax ON tax.LineItemNo = POL.LineItemNo WHERE IGRD.IGRNO = igr.IGRNO AND IGRD.QuantityAsPerInvoice != 0 + GROUP BY POL.PONO LIMIT 1 ) WHEN (PO.POType = 'service' OR (PO.POType = 'capital' AND PO.CapitalRange = '1')) THEN ( @@ -421,6 +422,7 @@ class Inwardgateregister_model extends Model LEFT JOIN t_purchaseorder_lineitem POL ON PONO = POL.PONO AND IGRD.MaterialCode = POL.MaterialCode LEFT JOIN t_service_tax tax ON tax.LineItemNo = POL.LineItemNo WHERE IGRD.IGRNO = igr.IGRNO AND IGRD.QuantityAsPerInvoice != 0 + GROUP BY POL.PONO LIMIT 1 ) diff --git a/app/Models/Ipinvoice_model.php b/app/Models/Ipinvoice_model.php index 40f8b1c7..dc662e6f 100755 --- a/app/Models/Ipinvoice_model.php +++ b/app/Models/Ipinvoice_model.php @@ -4,6 +4,7 @@ namespace App\Models; use CodeIgniter\Model; + class Ipinvoice_model extends Model { @@ -23,7 +24,7 @@ class Ipinvoice_model extends Model 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_items.item_quantity, ip_invoice_items.item_price, ip_invoice_items.item_name, ip_invoice_items.item_quantity,ip_invoice_items.hsn_or_sac, ip_invoice_amounts.invoice_total, ip_invoice_amounts.invoice_item_subtotal, ip_invoice_amounts.invoice_item_tax_total ,ip_invoice_attachment.file_name , ip_invoices.received_qty') ->join('ip_payment_methods', 'ip_invoices.payment_method = ip_payment_methods.payment_method_id', 'left') @@ -41,47 +42,100 @@ class Ipinvoice_model extends Model $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; + } + + function getHsn() + { + return $this->db->table('ip_invoice_items') + ->select('hsn_or_sac') + ->distinct() + ->get() + ->getResult(); + } + + function getProducts() + { + return $this->db->table('ip_products') + ->select('product_id,product_name') + ->distinct() + ->get() + ->getResult(); + } + + function getProductName($id) + { + return $this->db->table('ip_products') + ->select('product_id,product_name') + ->where('product_id',$id) + ->get()->getRow()->product_name; + + } + + + function getClientName($id) + { + return $this->db->table('ip_clients') + ->select('client_id,client_name') + ->where('client_id',$id) + ->get()->getRow()->client_name; + } + + function getClients() + { + return $this->db->table('ip_clients') + ->select('client_id,client_name') + ->distinct() + ->get() + ->getResult(); + } + + public function sales_report($from_date, $to_date, $hsn_number, $product_id, $client_id) + { + $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_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_items.hsn_or_sac, + ip_invoice_amounts.invoice_total, ip_invoice_amounts.invoice_item_subtotal, ip_invoice_amounts.invoice_item_tax_total, + ip_invoice_attachment.file_name, ip_invoices.received_qty') + ->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') + ->join('ip_invoice_attachment', 'ip_invoices.invoice_id = ip_invoice_attachment.invoice_id AND ip_invoice_attachment.is_active = 1', 'left'); + + // Apply filters only if values are provided + if (!empty($from_date) && !empty($to_date)) { + $from_date = get_date_time_dynamical_format('d-m-Y', 'Y-m-d', $from_date); + $to_date = get_date_time_dynamical_format('d-m-Y', 'Y-m-d', $to_date); + $builder->where('ip_invoices.invoice_date_created >=', $from_date); + $builder->where('ip_invoices.invoice_date_created <=', $to_date); + } + + if (!empty($hsn_number)) { + $builder->where('ip_invoice_items.hsn_or_sac', $hsn_number); + } + + if (!empty($product_id)) { + $builder->where('ip_invoice_items.item_product_id', $product_id); + } + + if (!empty($client_id)) { + $builder->where('ip_invoices.client_id', $client_id); + } + + // Order by invoice number in descending order + $builder->orderBy('ip_invoices.invoice_number', 'DESC'); + + $query = $builder->get(); + return $query->getResult(); + } + diff --git a/app/Views/includes/new_header.php b/app/Views/includes/new_header.php index 2f08bd30..eedc8e88 100755 --- a/app/Views/includes/new_header.php +++ b/app/Views/includes/new_header.php @@ -654,6 +654,7 @@ diff --git a/app/Views/viewinwardgateregister.php b/app/Views/viewinwardgateregister.php index bf6ab9c7..8a00b012 100755 --- a/app/Views/viewinwardgateregister.php +++ b/app/Views/viewinwardgateregister.php @@ -262,7 +262,7 @@ NetWeight ?> taxable_value ?> gst_amount ?> - gst_amount + (int)$record->gst_amount) ?> + taxable_value + (int)$record->gst_amount) ?> VehicleNo ?> DriverName ?> @@ -1808,6 +1808,7 @@ +