devsofttech_hms_ci4/app/Models/BedMasterModel.php
DevSoftTech Server d722714ef1 feat: Complete bed management system with transfer and time tracking
- Implemented automatic bed release on patient discharge
- Added bed transfer functionality in nursing workspace
- Added date/time tracking for bed assignments with duration calculation
- Fixed bed_master.current_ipd_id as source of truth for occupancy
- Created data fix scripts for existing records
- Added bed assignment history with duration display (hours/minutes)
- Fixed display issues in bed assignment tab
- Added route for bed transfer endpoint
- Supports custom assignment datetime for backdated entries
- Automatically marks previous bed as released on transfer
2026-06-09 08:39:48 +05:30

63 lines
1.9 KiB
PHP

<?php
namespace App\Models;
use CodeIgniter\Model;
class BedMasterModel extends Model
{
protected $table = 'bed_master';
protected $primaryKey = 'id';
protected $returnType = 'object';
protected $allowedFields = [
'bed_code',
'bed_number',
'ward_id',
'bed_category_id',
'bed_status',
'bed_position',
'has_oxygen',
'has_suction',
'has_monitor',
'has_ventilator',
'is_isolation_bed',
'remarks',
'base_charge_override',
'nursing_charge_override',
'status',
];
public function getAllWithRelations(): array
{
return $this->select('bed_master.*, ward_master.ward_name, bed_category_master.category_name')
->join('ward_master', 'ward_master.id = bed_master.ward_id', 'left')
->join('bed_category_master', 'bed_category_master.id = bed_master.bed_category_id', 'left')
->orderBy('bed_master.id', 'DESC')
->findAll();
}
public function getAvailableBedsGroupedByWard(): array
{
$beds = $this->select('bed_master.*, ward_master.ward_name, bed_category_master.category_name')
->join('ward_master', 'ward_master.id = bed_master.ward_id', 'left')
->join('bed_category_master', 'bed_category_master.id = bed_master.bed_category_id', 'left')
->where('bed_master.status', 'active')
->where('bed_master.bed_status', 'available')
->where('bed_master.current_ipd_id IS NULL')
->orderBy('ward_master.ward_name', 'ASC')
->orderBy('bed_master.bed_number', 'ASC')
->findAll();
$grouped = [];
foreach ($beds as $bed) {
$wardName = $bed->ward_name ?? 'Unassigned';
if (!isset($grouped[$wardName])) {
$grouped[$wardName] = [];
}
$grouped[$wardName][] = $bed;
}
return $grouped;
}
}