|
15 | 15 | use App\Models\Team; |
16 | 16 | use App\Models\User; |
17 | 17 | use App\Util\AuthorizeInclude; |
| 18 | +use App\Util\DeviceInventory; |
18 | 19 | use Illuminate\Database\Eloquent\Builder; |
19 | 20 | use Illuminate\Http\JsonResponse; |
20 | 21 | use Illuminate\Http\Request; |
@@ -73,33 +74,47 @@ public function store(StoreAttendanceRequest $request): JsonResponse |
73 | 74 | } |
74 | 75 |
|
75 | 76 | if ($gtid !== null) { |
76 | | - $user = User::where('gtid', '=', $gtid)->first(); |
| 77 | + $attendee = User::where('gtid', '=', $gtid)->first(); |
77 | 78 | $attExistingQ = Attendance::where($request->only(['attendable_type', 'attendable_id'])) |
78 | 79 | ->where('gtid', '=', $gtid)->whereDate('created_at', $date); |
79 | 80 | $identifier = ['key' => 'gtid', 'value' => $gtid]; |
80 | 81 | } else { |
81 | | - $user = null; |
| 82 | + $attendee = null; |
82 | 83 | $attExistingQ = Attendance::where( |
83 | 84 | $request->only(['attendable_type', 'attendable_id', 'access_card_number']) |
84 | 85 | ) |
85 | 86 | ->whereDate('created_at', $date); |
86 | 87 | $identifier = ['key' => 'access_card_number', 'value' => $request->input('access_card_number')]; |
87 | 88 | } |
88 | 89 |
|
| 90 | + // Upsert the device if a reader is provided |
| 91 | + $device = null; |
| 92 | + if ($request->has('reader')) { |
| 93 | + $device = DeviceInventory::upsert($request, $request->input('reader')); |
| 94 | + } |
| 95 | + |
| 96 | + $attendanceData = $request->validated(); |
| 97 | + unset($attendanceData['reader']); |
| 98 | + |
89 | 99 | $attExistingCount = $attExistingQ->count(); |
90 | 100 | if ($attExistingCount > 0) { |
91 | 101 | Log::debug(self::class.': Found attendance on '.$date.' for '.$identifier['value'].' - ignoring.'); |
92 | 102 | $att = $attExistingQ->first(); |
93 | 103 | $code = 200; |
94 | 104 |
|
95 | | - if ($user !== null) { |
96 | | - PushToJedi::dispatch($user, self::class, -1, 'duplicate-attendance'); |
| 105 | + if ($attendee !== null) { |
| 106 | + PushToJedi::dispatch($attendee, self::class, -1, 'duplicate-attendance'); |
97 | 107 | } |
98 | 108 | } else { |
99 | 109 | Log::debug(self::class.': No attendance yet on '.$date.' for '.$identifier['value'].' - saving.'); |
| 110 | + |
| 111 | + if ($device !== null) { |
| 112 | + $attendanceData['device_serial_number'] = $device->serial_number; |
| 113 | + } |
| 114 | + |
100 | 115 | $att = Attendance::create( |
101 | 116 | array_merge( |
102 | | - $request->validated(), |
| 117 | + $attendanceData, |
103 | 118 | [ |
104 | 119 | 'recorded_by' => $request->user()->id, |
105 | 120 | $identifier['key'] => $identifier['value'], |
|
0 commit comments