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')]); } }