|
@@ -24,6 +24,15 @@ class ScheduleService
|
|
|
->get();
|
|
->get();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ public function getFinished()
|
|
|
|
|
+ {
|
|
|
|
|
+ return Schedule::with(['client.user', 'provider.user'])
|
|
|
|
|
+ ->where('status', 'finished')
|
|
|
|
|
+ ->orderBy('date', 'desc')
|
|
|
|
|
+ ->orderBy('start_time', 'desc')
|
|
|
|
|
+ ->get();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
public function getById($id)
|
|
public function getById($id)
|
|
|
{
|
|
{
|
|
|
return Schedule::with(['client.user', 'provider.user', 'address'])->findOrFail($id);
|
|
return Schedule::with(['client.user', 'provider.user', 'address'])->findOrFail($id);
|
|
@@ -42,7 +51,7 @@ class ScheduleService
|
|
|
$createdSchedules[] = Schedule::create($scheduleData);
|
|
$createdSchedules[] = Schedule::create($scheduleData);
|
|
|
|
|
|
|
|
} catch (\Exception $e) {
|
|
} catch (\Exception $e) {
|
|
|
- throw new \Exception(__("validation.provider_unavailable"));
|
|
|
|
|
|
|
+ throw new \Exception(__($e->getMessage()));
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -97,6 +106,7 @@ class ScheduleService
|
|
|
$dayOfWeek = $date->dayOfWeek;
|
|
$dayOfWeek = $date->dayOfWeek;
|
|
|
$startTime = $data['start_time'];
|
|
$startTime = $data['start_time'];
|
|
|
$endTime = $data['end_time'];
|
|
$endTime = $data['end_time'];
|
|
|
|
|
+ $date_ymd = $date->format('Y-m-d');
|
|
|
$period = $startTime < '13:00:00' ? 'morning' : 'afternoon';
|
|
$period = $startTime < '13:00:00' ? 'morning' : 'afternoon';
|
|
|
|
|
|
|
|
// bloqueio 2 schedules por semana para o mesmo client e provider
|
|
// bloqueio 2 schedules por semana para o mesmo client e provider
|
|
@@ -130,18 +140,38 @@ class ScheduleService
|
|
|
$endTime,
|
|
$endTime,
|
|
|
$excludeScheduleId
|
|
$excludeScheduleId
|
|
|
);
|
|
);
|
|
|
|
|
+
|
|
|
|
|
+ // bloqueio provider tem outra proposta na mesma data
|
|
|
|
|
+ ScheduleBusinessRules::validateConflictingProposalSameDate(
|
|
|
|
|
+ $provider_id,
|
|
|
|
|
+ $date_ymd,
|
|
|
|
|
+ $startTime,
|
|
|
|
|
+ $endTime,
|
|
|
|
|
+ null
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ // bloqueio caso o client tenha bloqueado o provider
|
|
|
|
|
+ ScheduleBusinessRules::validateClientNotBlockedByProvider(
|
|
|
|
|
+ $client_id,
|
|
|
|
|
+ $provider_id
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ // bloqueio caso o provider tenha bloqueado o client
|
|
|
|
|
+ ScheduleBusinessRules::validateProviderNotBlockedByClient(
|
|
|
|
|
+ $client_id,
|
|
|
|
|
+ $provider_id
|
|
|
|
|
+ );
|
|
|
|
|
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public function getSchedulesDefaultGroupedByClient()
|
|
public function getSchedulesDefaultGroupedByClient()
|
|
|
{
|
|
{
|
|
|
- $schedules = Schedule::with(['client.user', 'provider.user', 'address'])
|
|
|
|
|
|
|
+ $schedules = Schedule::with(['client.user', 'provider.user', 'address', 'reviews.reviewsImprovements.improvementType'])
|
|
|
->orderBy('id', 'desc')
|
|
->orderBy('id', 'desc')
|
|
|
->where('schedule_type', 'default')
|
|
->where('schedule_type', 'default')
|
|
|
->select(
|
|
->select(
|
|
|
'schedules.*'
|
|
'schedules.*'
|
|
|
-
|
|
|
|
|
)
|
|
)
|
|
|
->get();
|
|
->get();
|
|
|
|
|
|
|
@@ -161,6 +191,7 @@ class ScheduleService
|
|
|
'total_amount' => $schedule->total_amount,
|
|
'total_amount' => $schedule->total_amount,
|
|
|
'code' => $schedule->code,
|
|
'code' => $schedule->code,
|
|
|
'code_verified' => $schedule->code_verified,
|
|
'code_verified' => $schedule->code_verified,
|
|
|
|
|
+ 'client_id' => $schedule->client_id,
|
|
|
'provider_id' => $schedule->provider_id,
|
|
'provider_id' => $schedule->provider_id,
|
|
|
'provider_name' => $schedule->provider->user->name ?? 'N/A',
|
|
'provider_name' => $schedule->provider->user->name ?? 'N/A',
|
|
|
'address' => $schedule->address ? [
|
|
'address' => $schedule->address ? [
|
|
@@ -172,6 +203,24 @@ class ScheduleService
|
|
|
'state' => $schedule->address->city->state->name ?? '',
|
|
'state' => $schedule->address->city->state->name ?? '',
|
|
|
] : null,
|
|
] : null,
|
|
|
'client_name' => $schedule->client->user->name ?? 'N/A',
|
|
'client_name' => $schedule->client->user->name ?? 'N/A',
|
|
|
|
|
+ 'reviews' => $schedule->reviews->map(function ($review) {
|
|
|
|
|
+ return [
|
|
|
|
|
+ 'id' => $review->id,
|
|
|
|
|
+ 'stars' => $review->stars,
|
|
|
|
|
+ 'comment' => $review->comment,
|
|
|
|
|
+ 'origin' => $review->origin,
|
|
|
|
|
+ 'origin_id' => $review->origin_id,
|
|
|
|
|
+ 'created_at' => Carbon::parse($review->created_at)->format('Y-m-d H:i'),
|
|
|
|
|
+ 'updated_at' => Carbon::parse($review->updated_at)->format('Y-m-d H:i'),
|
|
|
|
|
+ 'improvements' => $review->reviewsImprovements->map(function ($ri) {
|
|
|
|
|
+ return [
|
|
|
|
|
+ 'id' => $ri->id,
|
|
|
|
|
+ 'improvement_type_id' => $ri->improvement_type_id,
|
|
|
|
|
+ 'improvement_type_name' => $ri->improvementType ? $ri->improvementType->description : null,
|
|
|
|
|
+ ];
|
|
|
|
|
+ })->values(),
|
|
|
|
|
+ ];
|
|
|
|
|
+ })
|
|
|
];
|
|
];
|
|
|
})->values()
|
|
})->values()
|
|
|
];
|
|
];
|