diff --git a/app/Models/TrpProductionModel.php b/app/Models/TrpProductionModel.php index 5302d616..8b8366ae 100644 --- a/app/Models/TrpProductionModel.php +++ b/app/Models/TrpProductionModel.php @@ -166,38 +166,42 @@ class TrpProductionModel extends Model ->getResultArray(); - $crsClientList = array_column($crsClientList, 'client_name'); + $crsClientList = array_column($crsClientList, 'client_name'); - // Initialize an empty array for dynamic SQL conditions - $caseStatementsCrs = []; + // Initialize an empty array for dynamic SQL conditions + $caseStatementsCrs = []; + + // Loop through the client list and build dynamic SUM(CASE WHEN...) + foreach ($crsClientList as $index => $client) { + + $crsClientList[$index] = $client."_crs"; + $clientCrs = $client."_crs"; + + // Add the condition to the array + $caseStatementsCrs[] = "SUM(CASE WHEN clients.client_name = " . $this->db->escape($client) . " THEN invItems.item_quantity ELSE 0 END) AS `$clientCrs`"; + } + + // Convert array to a comma-separated string + $caseSQLCrs = implode(', ', $caseStatementsCrs); + + // Subquery: Get unique invoice_id with item_date_added and total item_quantity per invoice + $subquery = $this->db->table('ip_invoice_items') + ->select('invoice_id, item_date_added, item_quantity') + ->whereIn('item_product_id', [81, 93]) + ->groupBy(['invoice_id']) + ->getCompiledSelect(); // Convert to raw SQL for subquery + + // Main Query: Use the subquery as invItems and join with ip_invoices and ip_clients + $subquery3 = $this->db->table("($subquery) invItems") + ->select(array_merge(['invItems.item_date_added'], $caseStatementsCrs)) // Add dynamic SUM(CASE WHEN..) + ->join('ip_invoices inv', 'inv.invoice_id = invItems.invoice_id', 'left') + ->join('ip_clients clients', 'clients.client_id = inv.client_id', 'left') + ->where("invItems.item_date_added BETWEEN '$startDate' AND '$endDate'", null, false) // Use BETWEEN for date filtering + ->groupBy('invItems.item_date_added') + ->getCompiledSelect(false); // Convert Query Builder to raw SQL; + - // Loop through the client list and build dynamic SUM(CASE WHEN...) - foreach ($crsClientList as $index => $client) { - - $crsClientList[$index] = $client."_crs"; - $clientCrs = $client."_crs"; - - // Add the condition to the array - $caseStatementsCrs[] = "SUM(CASE WHEN clients.client_name = " . $this->db->escape($client) . " THEN invItems.item_quantity ELSE 0 END) AS `$clientCrs`"; - } - - // Convert array to a comma-separated string - $caseSQLCrs = implode(', ', $caseStatementsCrs); - - - - $subquery3 = $this->db->table('ip_invoice_items invItems') - ->select([ - 'invItems.item_date_added', - $caseSQLCrs - ]) - ->join('ip_invoices inv', 'inv.invoice_id = invItems.invoice_id', 'left') - ->join('ip_clients clients', 'clients.client_id = inv.client_id', 'left') - ->whereIn('invItems.item_product_id', [81, 93]) - ->where("invItems.item_date_added BETWEEN '$startDate' AND '$endDate'", null, false) // Use BETWEEN for date filtering - ->groupBy('invItems.item_date_added') - - ->getCompiledSelect(false); // Convert Query Builder to raw SQL; + $builder->join("({$subquery3}) invItems", 'invItems.item_date_added = tpmd.date', 'left'); diff --git a/app/Views/editconfig.php b/app/Views/editconfig.php index f1cbac68..3c1f97c4 100755 --- a/app/Views/editconfig.php +++ b/app/Views/editconfig.php @@ -69,7 +69,7 @@ if (!empty($master)) { echo form_open(base_url() . 'configurationctrl/updateconfig', $attributes); ?>