diff --git a/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php b/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php index 147cfdf3..6b496154 100644 --- a/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php +++ b/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php @@ -101,19 +101,39 @@ trait OrderCardConcern } if (isset($conditions['service_start_starttime'])) { - $query->where('service_start_at', '>=', Carbon::parse($conditions['service_start_starttime'])); + $date = Carbon::parse($conditions['service_start_starttime']); + $havingRaw = sprintf("sim in (SELECT sim FROM virtual_order_cards_partition GROUP BY sim HAVING MIN(service_start_at) >= '%s')", $date); + $this->model = $this->model->whereNotNull('service_start_at') + ->whereRaw($havingRaw); + + // $query->where('service_start_at', '>=', Carbon::parse($conditions['service_start_starttime'])); } if (isset($conditions['service_start_endtime'])) { - $query->where('service_start_at', '<=', Carbon::parse($conditions['service_start_endtime'])); + $date = Carbon::parse($conditions['service_start_starttime']); + $havingRaw = sprintf("sim in (SELECT sim FROM virtual_order_cards_partition GROUP BY sim HAVING MIN(service_start_at) <= '%s')", $date); + $this->model = $this->model->whereNotNull('service_start_at') + ->whereRaw($havingRaw); + + // $query->where('service_start_at', '<=', Carbon::parse($conditions['service_start_endtime'])); } if (isset($conditions['service_end_starttime'])) { - $query->where('service_end_at', '>=', Carbon::parse($conditions['service_end_starttime'])); + $date = Carbon::parse($conditions['service_end_starttime']); + $havingRaw = sprintf("sim in (SELECT sim FROM virtual_order_cards_partition GROUP BY sim HAVING MAX(service_end_at) >= '%s')", $date); + $this->model = $this->model->whereNotNull('service_start_at') + ->whereRaw($havingRaw); + + // $query->where('service_end_at', '>=', Carbon::parse($conditions['service_end_starttime'])); } if (isset($conditions['service_end_endtime'])) { - $query->where('service_end_at', '<=', Carbon::parse($conditions['service_end_endtime'])); + $date = Carbon::parse($conditions['service_end_starttime']); + $havingRaw = sprintf("sim in (SELECT sim FROM virtual_order_cards_partition GROUP BY sim HAVING MAX(service_end_at) <= '%s')", $date); + $this->model = $this->model->whereNotNull('service_start_at') + ->whereRaw($havingRaw); + + // $query->where('service_end_at', '<=', Carbon::parse($conditions['service_end_endtime'])); } if (isset($conditions['refunded_starttime'])) {