<?php
namespace Hardy\Finder;
class BedCapacity extends AbstractFinder
{
public function getWardTypes()
{
$sql = 'SELECT id, name FROM ward_types';
$this->connectPhc();
return $this->connPhc->fetchAllAssociative($sql);
}
public function getAllSummary(?string $type, ?string $level, ?string $departmentId)
{
$params = [];
$sql = "SELECT d.id district_id, d.name district, SUM(w.male_num_bed_func + w.female_num_bed_func) available,
COUNT(wb.id) occupied, COUNT(h.id) hospitals, SUM(bs.male_num_bed + bs.female_num_bed) iphs
FROM districts d
INNER JOIN hospitals h ON h.district_id = d.id
INNER JOIN wards w ON w.hospital_id = h.id
LEFT JOIN ward_beds wb ON wb.ward_id = w.id AND wb.status = 'Admitted'
INNER JOIN ward_types wt ON w.ward_type_id = wt.id
INNER JOIN iphs_bed_strength bs ON bs.ward_type_id = wt.id";
if (!empty($type) || !empty($level) || !empty($departmentId)) {
$sql .= ' WHERE 1 ';
if (!empty($type)) {
$sql .= ' AND h.type = ?';
$params[] = $type;
}
if (!empty($departmentId)) {
$sql .= ' AND wt.id = ?';
$params[] = $departmentId;
}
}
$sql .= ' GROUP BY d.id';
$this->connectPhc();
return $this->connPhc->fetchAllAssociative($sql, $params);
}
public function getDetailsByDistrictId($districtId, ?string $type, ?string $level, ?string $department)
{
$params = [$districtId];
$sql = "SELECT d.name, h.id, h.name facility, wt.name department, SUM(w.male_num_bed_func) avail_m, SUM(w.female_num_bed_func) avail_f,
SUM(bs.male_num_bed) iphs_m, SUM(bs.female_num_bed) iphs_f,
SUM(IF(p.gender = 'Male', 1, 0)) occ_m, SUM(IF(p.gender = 'Female', 1, 0)) occ_f
FROM hospitals h
INNER JOIN districts d ON h.district_id = d.id
INNER JOIN wards w ON w.hospital_id = h.id
INNER JOIN ward_types wt ON w.ward_type_id = wt.id
INNER JOIN iphs_bed_strength bs ON bs.ward_type_id = wt.id
LEFT JOIN ward_beds wb ON wb.ward_id = w.id AND wb.status = 'Admitted'
LEFT JOIN cases c ON wb.case_id = c.id
LEFT JOIN patients p ON c.patient_id = p.id
WHERE h.district_id = ?";
if (!empty($type) || !empty($level) || !empty($departmentId)) {
if (!empty($type)) {
$sql .= ' AND h.type = ?';
$params[] = $type;
}
if (!empty($departmentId)) {
$sql .= ' AND wt.id = ?';
$params[] = $departmentId;
}
}
$sql .= ' GROUP BY wt.id';
$this->connectPhc();
return $this->connPhc->fetchAllAssociative($sql, $params);
}
public function getDetailsByHospitalId($hospitalId, ?string $type, ?string $level, ?string $department)
{
$sql = "SELECT h.id, h.name facility, w.id ward_id, wt.name department, SUM(w.male_num_bed_func) avail_m, SUM(w.female_num_bed_func) avail_f,
SUM(bs.male_num_bed) iphs_m, SUM(bs.female_num_bed) iphs_f,
SUM(IF(p.gender = 'Male', 1, 0)) occ_m, SUM(IF(p.gender = 'Female', 1, 0)) occ_f
FROM hospitals h
INNER JOIN wards w ON w.hospital_id = h.id
INNER JOIN ward_types wt ON w.ward_type_id = wt.id
INNER JOIN iphs_bed_strength bs ON bs.ward_type_id = wt.id
LEFT JOIN ward_beds wb ON wb.ward_id = w.id AND wb.status = 'Admitted'
LEFT JOIN cases c ON wb.case_id = c.id
LEFT JOIN patients p ON c.patient_id = p.id
WHERE h.id = ?
GROUP BY wt.id";
$this->connectPhc();
return $this->connPhc->fetchAllAssociative($sql, [$hospitalId]);
}
public function getDetailsByDepartmentId($departmentId)
{
$sql = "SELECT h.name facility, h.phone, h.address, v.name village, w.id ward_id, wt.name department,
sp.first_name, sp.last_name, sp.mobile, SUM(w.male_num_bed_func + w.female_num_bed_func) sanc,
SUM(IF((DATE(wb.created_at) = CURDATE() - INTERVAL 1 DAY OR DATE(wb.updated_at) = CURDATE() - INTERVAL 1 DAY) AND wb.status = 'Admitted', 1, 0)) yesterday,
SUM(IF(DATE(wb.created_at) = CURDATE() AND wb.status = 'Admitted', 1, 0)) today,
SUM(IF(DATE(wb.updated_at) = CURDATE() AND wb.status = 'Discharged', 1, 0)) discharged,
SUM(IF(wb.status = 'Admitted', 1, 0)) occupied
FROM wards w
INNER JOIN hospitals h ON w.hospital_id = h.id
INNER JOIN villages v ON h.village_id = v.id
INNER JOIN ward_types wt ON w.ward_type_id = wt.id
LEFT JOIN ward_beds wb ON wb.ward_id = w.id
LEFT JOIN cases c ON wb.case_id = c.id
LEFT JOIN users u ON c.doctor_id = u.id
LEFT JOIN staff_profiles sp ON u.profile_id = sp.id
WHERE w.id = ?
GROUP BY w.id";
$this->connectPhc();
return $this->connPhc->fetchAllAssociative($sql, [$departmentId]);
}
}