В настоящее время у меня проблема с моей суммой. Ну, у меня есть 3 разных стола. billing_payments, billing_entry и сервисы.
Моя проблема в том, что я не могу получить общее количество сервисов. Я предоставил скриншот, чтобы вы поняли, что я имею в виду.
Вот код отчета. Я добавил несколько комментариев, чтобы указать, где проблема начинается и заканчивается.
<table class="table table-striped table-hover">
<thead>
<tr>
<th>#</th>
<th>PATIENT NAME</th>
<th>CASE</th>
<?php
$servicesquery = $this->db->get('services');
foreach ($servicesquery->result() as $service) {
echo '<th>'.$service->service_name.'</th>';
}
?>
<th>MEDICAL SUPPLIES</th>
<th>PHILHEALTH</th>
<th>DISCOUNT</th>
<th>GROSS</th>
<th>NET</th>
<tr>
</thead>
<tbody>
<?php
$x = 1;
$billquery = $this->db->query('SELECT * FROM 'billing_payments' WHERE ('date' BETWEEN "'.$this->input->get('from').'" AND "'.$this->input->get('to').'")');
foreach ($billquery->result() as $data) {
echo '<tr>';
echo '<td>'.$x++.'</td>';
echo '<td>'.$data->patientname.'</td>';
echo '<td>'.$data->session_id.'</td>';
//SERVICES
$servicesquery = $this->db->get('services');
foreach ($servicesquery->result() as $service) {
$this->db->where('billing_serviceid', $service->service_id);
$this->db->where('billing_patientid', $data->patient_id);
$this->db->where('billing_id', $data->billing_id);
$this->db->select_sum('billing_amount');
$billing = $this->db->get('billing_entry');
foreach ($billing->result() as $bill) {
echo '<td>'.$bill->billing_amount.'</td>';
}
}
//MEDICAL SUPPLIES
$this->db->where('billing_id', $data->billing_id);
$this->db->where('billing_servicename', 'MEDICAL SUPPLIES');
$this->db->select_sum('billing_amount');
$medsup = $this->db->get('billing_entry');
foreach ($medsup->result() as $med) {
echo '<td>'.$med->billing_amount.'</td>';
}
//PHILHEALTH
$this->db->where('billing_id', $data->billing_id);
$this->db->select_sum('billing_philhealth');
$philhealth = $this->db->get('billing_entry');
foreach ($philhealth->result() as $phil) {
echo '<td class="bg-info">'.$phil->billing_philhealth.'</td>';
}
//DISCOUNT
$this->db->where('billing_id', $data->billing_id);
$this->db->select_sum('billing_discount');
$philhealth = $this->db->get('billing_entry');
foreach ($philhealth->result() as $phil) {
echo '<td class="bg-info">'.$phil->billing_discount.'</td>';
}
//GROSS
$this->db->where('billing_id', $data->billing_id);
$this->db->select_sum('billing_amount');
$gross = $this->db->get('billing_entry');
foreach ($gross->result() as $gr) {
echo '<td class="bg-warning">'.$gr->billing_amount.'</td>';
}
echo '<td class="bg-danger">'.$data->total_amount.'</td>';
echo '</tr>';
}
echo '<tr>';
echo '<td colspan="3" style="text-align:right"><strong>TOTAL:</strong></td>';
//PROBLEM STARTS HERE
//TOTAL PER SERVICES
$quer = $this->db->get('services');
foreach ($quer->result() as $service) {
$totserv = $this->db->query('SELECT * FROM 'billing_payments' WHERE ('date' BETWEEN "'.$this->input->get('from').'" AND "'.$this->input->get('to').'")');
foreach ($totserv->result() as $servdata) {
$id = $servdata->id;
$this->db->where('billing_id', $servdata->billing_id);
$this->db->where('billing_serviceid', $service->service_id);
$this->db->select_sum('billing_amount');
$medsup = $this->db->get('billing_entry');
foreach ($medsup->result() as $med) {
echo '<td class="bg-success">'.$med->billing_amount.'</td>';
}
}
}
//PROBLEM ENDS HERE
//TOTAL NET
$totalamt = $this->db->query('SELECT SUM(total_amount) AS totalamount FROM 'billing_payments' WHERE ('date' BETWEEN "'.$this->input->get('from').'" AND "'.$this->input->get('to').'")');
foreach ($totalamt->result() as $data) {
echo '<td>'.$data->totalamount.'</td>';
}
echo '</tr>';
?>
Если вы посмотрите на свое изображение, ясно, что вы выводите каждое значение из столбцов (в зеленом поле) в последней строке (350, zero, 350, 485, 485, 485, zero, 15, 300
)
Вы можете исправить это, добавив переменную-заполнителя для вычисления общего количества для каждой службы, например:
foreach ($quer->result() as $service) { // you want to output one <td> per service, so the <td> should be printed at the end of this foreach
$serviceTotal = 0; // initialize the total for each service
$totserv = $this->db->query('SELECT * FROM 'billing_payments' WHERE ('date' BETWEEN "'.$this->input->get('from').'" AND "'.$this->input->get('to').'")');
foreach ($totserv->result() as $servdata) {
$id = $servdata->id;
$this->db->where('billing_id', $servdata->billing_id);
$this->db->where('billing_serviceid', $service->service_id);
$this->db->select_sum('billing_amount');
$medsup = $this->db->get('billing_entry');
foreach ($medsup->result() as $med) {
$serviceTotal = $serviceTotal + $med->billing_amount
}
}
echo '<td class="bg-success">'. $serviceTotal .'</td>';
}
Таким образом, вы получите один за услугу, а переменная $serviceTotal
будет содержать сумму каждой отдельной позиции для этой конкретной услуги.
У вас есть более эффективные варианты, открытые для вас - во-первых, вы можете рассчитать отдельные суммы, когда вы получаете их в блоке кода услуг, например:
$serviceTotals = array(); // a holder for all the totals
foreach ($servicesquery->result() as $service) {
$this->db->where('billing_serviceid', $service->service_id);
$this->db->where('billing_patientid', $data->patient_id);
$this->db->where('billing_id', $data->billing_id);
$this->db->select_sum('billing_amount');
$billing = $this->db->get('billing_entry');
foreach ($billing->result() as $bill) {
$serviceTotals[$service->service_id] = $serviceTotals[$service->service_id] + $bill->billing_amount; //this updates the total for each service ID
echo '<td>'.$bill->billing_amount.'</td>';
}
}
Затем вы можете пропустить этот массив для вывода каждого итога.
В идеале вам следует также рассмотреть возможность расчета всех этих значений в вашем контроллере, который будет вызывать запросы, которые вам нужны из вашей модели (ов), а затем упаковывать эти данные в переменную $data
. Затем контроллер может передать все это вашему виду. CodeIgniter имеет много хороших ресурсов для объяснения шаблона Model-View-Controller (MVC) (он немного выходит за рамки этого вопроса, чтобы войти в него здесь), и использование CI без реализации шаблона MVC собирается сделать это сложнее использовать большую часть документации и поддерживать CI в сети.
sum
так какsum
будет общая сумма данных столбца. Вы можете попробовать$bill->row()->billing_amount;