Open sidebar
public function filter(Request $request) { $reservationId = $request->input('reservation_name', []); $lockId = $request->input('lock_name', []); $activityId = $request->input('activity_name'); $statuId = $request->input('label_name', []); $startDate = $request->input('start_name'); $endDate = $request->input('end_name'); $poolId = $request->input('pool_name', []); $userId = $request->input('user_name', []); $cityId = $request->input('city_name', []); $gameId = $request->input('game_name', []); $payId = $request->input('pay_name', []); $approvedId = $request->input('approved_name', []); $searchId = $request->input('searchInput'); $query = PoolCustomer::query(); $eagerLoadRelations = ['lock', 'statu', 'label', 'pool', 'user', 'tempCustomerData']; if ($userId) { $query->whereExists(function ($subQuery) use ($userId) { $subQuery->select(DB::raw(1)) ->from('user_partner_customer') ->whereRaw('user_partner_customer.customer_id = pool_customer.id') ->whereIn('user_partner_customer.user_id', (array)$userId); }); } if ($startDate && $endDate) { $query->whereExists(function ($subQuery) use ($startDate, $endDate, $userId) { $subQuery->select(DB::raw(1)) ->from('user_customer_reservation') ->whereRaw('user_customer_reservation.customer_id = pool_customer.id') ->whereBetween('user_customer_reservation.start_date_reserve', [$startDate, $endDate]) ->whereNull('user_customer_reservation.deleted_at'); if ($userId) { $subQuery->whereIn('user_customer_reservation.user_id', (array)$userId); } }); } if ($cityId) { $query->whereExists(function ($subQuery) use ($cityId, $userId) { $subQuery->select(DB::raw(1)) ->from('user_customer_details') ->whereRaw('user_customer_details.customer_id = pool_customer.id') ->whereIn('user_customer_details.city_id', (array)$cityId); if ($userId) { $subQuery->whereIn('user_customer_details.user_id', (array)$userId); } }); } if ($searchId) { $query->where('pool_customer.customer_name', 'LIKE', '%' . $searchId . '%'); if ($userId) { $query->where(function ($q) use ($userId) { $q->whereIn('pool_customer.user_id', (array)$userId); }); } } if ($payId) { $query->whereExists(function ($subQuery) use ($payId, $userId) { $subQuery->select(DB::raw(1)) ->from('user_customer_details') ->whereRaw('user_customer_details.customer_id = pool_customer.id') ->whereIn('user_customer_details.pay_label_id', (array)$payId); if ($userId) { $subQuery->whereIn('user_customer_details.user_id', (array)$userId); } }); } if ($reservationId) { $query->whereExists(function ($subQuery) use ($reservationId, $userId) { $subQuery->select(DB::raw(1)) ->from('user_customer_reservation') ->whereNull('user_customer_reservation.deleted_at') ->whereRaw('user_customer_reservation.customer_id = pool_customer.id') ->whereIn('user_customer_reservation.reserve_id', (array)$reservationId); if ($userId) { $subQuery->whereIn('user_customer_reservation.user_id', (array)$userId); } }); } if ($poolId) { $query->whereIn('pool_customer.pool_id', (array)$poolId); if ($userId) { $query->where(function ($q) use ($userId) { $q->whereIn('pool_customer.user_id', (array)$userId); }); } } if ($lockId) { $query->whereIn('pool_customer.lock_id', (array)$lockId); if ($userId) { $query->where(function ($q) use ($userId) { $q->whereIn('pool_customer.user_id', (array)$userId); }); } } if ($activityId) { $query->where('pool_customer.activity_status_id', $activityId); if ($userId) { $query->where(function ($q) use ($userId) { $q->whereIn('pool_customer.user_id', (array)$userId); }); } } if ($statuId) { $query->whereExists(function ($subQuery) use ($statuId, $userId) { $subQuery->select(DB::raw(1)) ->from('user_customer_statu') ->whereRaw('user_customer_statu.customer_id = pool_customer.id') ->whereNull('user_customer_statu.deleted_at') ->whereIn('user_customer_statu.statu_id', (array)$statuId); if ($userId) { $subQuery->where('user_customer_statu.user_id', $userId); } }); } if ($approvedId) { $query->whereIn('pool_customer.is_approved', (array)$approvedId); if ($userId) { $query->where(function ($q) use ($userId) { $q->whereIn('pool_customer.user_id', (array)$userId); }); } } if ($gameId) { $query->whereExists(function ($subQuery) use ($gameId, $userId) { $subQuery->select(DB::raw(1)) ->from('customer_game_label') ->whereRaw('customer_game_label.customer_id = pool_customer.id') ->whereIn('customer_game_label.game_id', (array)$gameId); if ($userId) { $subQuery->whereIn('customer_game_label.user_id', (array)$userId); } }); } $result = $query->with($eagerLoadRelations) ->orderBy('updated_at', 'desc'); $customerIds = $result->pluck('id')->toArray(); $customerReservationsMap = DB::table('user_customer_reservation') ->select('customer_id', 'reserve_id', 'start_date_reserve') ->whereNull('deleted_at') ->whereIn('customer_id', $customerIds) ->where('is_completed', 0) ->orderBy('created_at', 'desc') ->get() ->groupBy('customer_id'); $reserveIds = $customerReservationsMap->flatten(1)->pluck('reserve_id')->unique()->toArray(); $reservationNames = DB::table('reservation') ->whereIn('id', $reserveIds) ->select('id', 'reservation_name') ->get() ->keyBy('id'); $query2 = TepmCustomerData::query(); foreach ($customerIds as $id) { $query2->orWhereJsonContains('customer_ids', (string) $id); } $tempCustomerDataList = $query2->get(); $callCountsMap = DB::table('call_record') ->select('customer_id', DB::raw('count(*) as total_calls')) ->whereIn('customer_id', $customerIds) ->groupBy('customer_id') ->get() ->keyBy('customer_id'); $callDetailsMap = DB::table('call_record') ->join('users', 'call_record.user_id', '=', 'users.id') ->select( 'call_record.customer_id', 'call_record.user_id', 'users.first_name', 'users.last_name', DB::raw('count(*) as user_call_count') ) ->whereIn('call_record.customer_id', $customerIds) ->groupBy('call_record.customer_id', 'call_record.user_id', 'users.first_name', 'users.last_name') ->get() ->groupBy('customer_id'); $statusUsersQuery = DB::table('user_customer_statu as ucs') ->join('users', 'ucs.user_id', '=', 'users.id') ->select( 'ucs.customer_id', 'users.first_name', 'users.last_name', DB::raw('ROW_NUMBER() OVER(PARTITION BY ucs.customer_id ORDER BY ucs.updated_at DESC) as rn') ) ->whereIn('ucs.customer_id', $customerIds); $latestStatusDates = DB::table('user_customer_statu') ->select('customer_id', DB::raw('MAX(updated_at) as latest_update')) ->whereIn('customer_id', $customerIds) ->groupBy('customer_id'); $statusUsersMap = DB::table('user_customer_statu as ucs') ->joinSub($latestStatusDates, 'latest', function ($join) { $join->on('ucs.customer_id', '=', 'latest.customer_id') ->on('ucs.updated_at', '=', 'latest.latest_update'); }) ->join('users', 'ucs.user_id', '=', 'users.id') ->select('ucs.customer_id', 'users.first_name', 'users.last_name') ->get() ->groupBy('customer_id'); $getCustomerName = DB::table('user_customer_reservation') ->select('customer_id', 'reserve_id', 'start_date_reserve') ->whereNull('deleted_at') ->whereIn('customer_id', $customerIds) ->orderBy('start_date_reserve', 'desc') ->get(); $filteredData = $result->get()->map(function ($customer) use ( $reservationNames, $customerReservationsMap, $tempCustomerDataList, $callCountsMap, $callDetailsMap, $statusUsersMap, $getCustomerName, ) { $tempCustomerData = $tempCustomerDataList->first(function ($item) use ($customer) { return in_array((string) $customer->id, json_decode($item->customer_ids, true)); }); $customer->expiration_date = $tempCustomerData ? Carbon::parse($tempCustomerData->created_at)->addHours(48) : null; $customer->total_calls = $callCountsMap[$customer->id]->total_calls ?? 0; $customer->call_details = isset($callDetailsMap[$customer->id]) ? $callDetailsMap[$customer->id]->map(function ($detail) { return [ 'first_name' => $detail->first_name ?? "Bilinmiyor", 'last_name' => $detail->last_name ?? "Bilinmiyor", 'user_call_count' => $detail->user_call_count ?? 0, ]; })->toArray() : []; $statusUsers = isset($statusUsersMap[$customer->id]) ? $statusUsersMap[$customer->id]->map(function ($statusUser) { return $statusUser->first_name . ' ' . $statusUser->last_name; })->toArray() : []; $customer->status_users = implode(', ', $statusUsers); $customerReservations = $customerReservationsMap[$customer->id] ?? collect([]); $latestReservation = $customerReservations->first(); $reservationGetName = $getCustomerName->firstWhere('customer_id',$customer->id); $customer->end_date = $reservationGetName && isset($reservationNames[$reservationGetName->reserve_id]) ? $reservationNames[$reservationGetName->reserve_id]->reservation_name : null; if ($latestReservation && isset($reservationNames[$latestReservation->reserve_id])) { $customer->reserve_name = $reservationNames[$latestReservation->reserve_id]->reservation_name; } else { $customer->reserve_name = null; } $customer->is_reserve_locked = ($customer->reserve_lock == 1); if ($customer->is_reserve_locked && $latestReservation && $latestReservation->start_date_reserve) { $customer->reserve_lock_date = Carbon::parse($latestReservation->start_date_reserve) ->addMonths(3) ->format('d-m-Y'); } else { $customer->reserve_lock_date = null; } return $customer; }); return response()->json([ 'filterdata' => $filteredData, ]); }
Close sidebar
Back
Please note that all pasted data is publicly available.
X (fomerly Twitter)
GitHub
Use setting
Back
Please note that all pasted data is publicly available.
X (fomerly Twitter)
GitHub
Use setting