103 lines
3.2 KiB
PHP
103 lines
3.2 KiB
PHP
|
|
<?php
|
||
|
|
namespace App\Models\OrderTest;
|
||
|
|
|
||
|
|
use App\Models\BaseModel;
|
||
|
|
|
||
|
|
class OrderTestModel extends BaseModel {
|
||
|
|
protected $table = 'ordertest';
|
||
|
|
protected $primaryKey = 'OrderID';
|
||
|
|
protected $allowedFields = [
|
||
|
|
'OrderID',
|
||
|
|
'InternalPID',
|
||
|
|
'PatVisitID',
|
||
|
|
'OrderDateTime',
|
||
|
|
'Priority',
|
||
|
|
'OrderStatus',
|
||
|
|
'OrderedBy',
|
||
|
|
'OrderingProvider',
|
||
|
|
'SiteID',
|
||
|
|
'SourceSiteID',
|
||
|
|
'DepartmentID',
|
||
|
|
'WorkstationID',
|
||
|
|
'BillingAccount',
|
||
|
|
'DelDate'
|
||
|
|
];
|
||
|
|
|
||
|
|
public function generateOrderID(string $siteCode = '00'): string {
|
||
|
|
$date = new \DateTime();
|
||
|
|
$year = $date->format('y');
|
||
|
|
$month = $date->format('m');
|
||
|
|
$day = $date->format('d');
|
||
|
|
|
||
|
|
$counter = $this->db->table('counter')
|
||
|
|
->where('CounterName', 'ORDER')
|
||
|
|
->get()
|
||
|
|
->getRow();
|
||
|
|
|
||
|
|
if (!$counter) {
|
||
|
|
$this->db->table('counter')->insert([
|
||
|
|
'CounterName' => 'ORDER',
|
||
|
|
'CounterValue' => 1
|
||
|
|
]);
|
||
|
|
$seq = 1;
|
||
|
|
} else {
|
||
|
|
$seq = $counter->CounterValue + 1;
|
||
|
|
$this->db->table('counter')
|
||
|
|
->where('CounterName', 'ORDER')
|
||
|
|
->update(['CounterValue' => $seq]);
|
||
|
|
}
|
||
|
|
|
||
|
|
$seqStr = str_pad($seq, 5, '0', STR_PAD_LEFT);
|
||
|
|
return $siteCode . $year . $month . $day . $seqStr;
|
||
|
|
}
|
||
|
|
|
||
|
|
public function createOrder(array $data): string {
|
||
|
|
$orderID = $data['OrderID'] ?? $this->generateOrderID();
|
||
|
|
|
||
|
|
$orderData = [
|
||
|
|
'OrderID' => $orderID,
|
||
|
|
'InternalPID' => $data['InternalPID'],
|
||
|
|
'PatVisitID' => $data['PatVisitID'] ?? null,
|
||
|
|
'OrderDateTime' => $data['OrderDateTime'] ?? date('Y-m-d H:i:s'),
|
||
|
|
'Priority' => $data['Priority'] ?? 'R',
|
||
|
|
'OrderStatus' => $data['OrderStatus'] ?? 'ORD',
|
||
|
|
'OrderedBy' => $data['OrderedBy'] ?? null,
|
||
|
|
'OrderingProvider' => $data['OrderingProvider'] ?? null,
|
||
|
|
'SiteID' => $data['SiteID'] ?? 1,
|
||
|
|
'SourceSiteID' => $data['SourceSiteID'] ?? 1,
|
||
|
|
'DepartmentID' => $data['DepartmentID'] ?? null,
|
||
|
|
'WorkstationID' => $data['WorkstationID'] ?? null,
|
||
|
|
'BillingAccount' => $data['BillingAccount'] ?? null,
|
||
|
|
'CreateDate' => date('Y-m-d H:i:s')
|
||
|
|
];
|
||
|
|
|
||
|
|
$this->insert($orderData);
|
||
|
|
return $orderID;
|
||
|
|
}
|
||
|
|
|
||
|
|
public function getOrder(string $orderID): ?array {
|
||
|
|
return $this->select('*')
|
||
|
|
->where('OrderID', $orderID)
|
||
|
|
->where('DelDate', null)
|
||
|
|
->get()
|
||
|
|
->getRowArray();
|
||
|
|
}
|
||
|
|
|
||
|
|
public function getOrdersByPatient(int $internalPID): array {
|
||
|
|
return $this->select('*')
|
||
|
|
->where('InternalPID', $internalPID)
|
||
|
|
->where('DelDate', null)
|
||
|
|
->orderBy('OrderDateTime', 'DESC')
|
||
|
|
->get()
|
||
|
|
->getResultArray();
|
||
|
|
}
|
||
|
|
|
||
|
|
public function updateStatus(string $orderID, string $status): bool {
|
||
|
|
return $this->where('OrderID', $orderID)->update(['OrderStatus' => $status]);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function softDelete(string $orderID): bool {
|
||
|
|
return $this->where('OrderID', $orderID)->update(['DelDate' => date('Y-m-d H:i:s')]);
|
||
|
|
}
|
||
|
|
}
|