1
1
using CheckDrive . ApiContracts ;
2
+ using CheckDrive . ApiContracts . Mechanic ;
2
3
using CheckDrive . ApiContracts . MechanicAcceptance ;
3
4
using CheckDrive . Web . Stores . Cars ;
4
5
using CheckDrive . Web . Stores . Drivers ;
8
9
using CheckDrive . Web . Stores . OperatorReviews ;
9
10
using Microsoft . AspNetCore . Mvc ;
10
11
using Microsoft . AspNetCore . Mvc . Rendering ;
12
+ using NuGet . Versioning ;
13
+ using System . Linq ;
11
14
12
15
namespace CheckDrive . Web . Controllers
13
16
{
14
- public class MechanicAcceptancesController : Controller
17
+ public class MechanicAcceptancesController ( IMechanicAcceptanceDataStore mechanicAcceptanceDataStore , IDriverDataStore driverDataStore , ICarDataStore carDataStore , IMechanicDataStore mechanicDataStore , IOperatorReviewDataStore operatorReviewDataStore , IMechanicHandoverDataStore mechanicHandoverDataStore ) : Controller
15
18
{
16
- private readonly IMechanicAcceptanceDataStore _mechanicAcceptanceDataStore ;
17
- private readonly IDriverDataStore _driverDataStore ;
18
- private readonly ICarDataStore _carDataStore ;
19
- private readonly IMechanicDataStore _mechanicDataStore ;
20
- private readonly IOperatorReviewDataStore _operatorReviewDataStore ;
21
- private readonly IMechanicHandoverDataStore _mechanicHandoverDataStore ;
22
-
23
- public MechanicAcceptancesController ( IMechanicAcceptanceDataStore mechanicAcceptanceDataStore , IDriverDataStore driverDataStore , ICarDataStore carDataStore , IMechanicDataStore mechanicDataStore , IOperatorReviewDataStore operatorReviewDataStore , IMechanicHandoverDataStore mechanicHandoverDataStore )
24
- {
25
- _mechanicAcceptanceDataStore = mechanicAcceptanceDataStore ;
26
- _driverDataStore = driverDataStore ;
27
- _carDataStore = carDataStore ;
28
- _mechanicDataStore = mechanicDataStore ;
29
- _operatorReviewDataStore = operatorReviewDataStore ;
30
- _mechanicHandoverDataStore = mechanicHandoverDataStore ;
31
- }
19
+ private readonly IMechanicAcceptanceDataStore _mechanicAcceptanceDataStore = mechanicAcceptanceDataStore ;
20
+ private readonly IDriverDataStore _driverDataStore = driverDataStore ;
21
+ private readonly ICarDataStore _carDataStore = carDataStore ;
22
+ private readonly IMechanicDataStore _mechanicDataStore = mechanicDataStore ;
23
+ private readonly IOperatorReviewDataStore _operatorReviewDataStore = operatorReviewDataStore ;
24
+ private readonly IMechanicHandoverDataStore _mechanicHandoverDataStore = mechanicHandoverDataStore ;
32
25
33
26
public async Task < IActionResult > Index ( int ? pageNumber , string ? searchString , DateTime ? date )
34
27
{
@@ -82,87 +75,30 @@ public async Task<IActionResult> PersonalIndex(string? searchString, int? pageNu
82
75
83
76
return View ( response . Data ) ;
84
77
}
85
- public async Task < IActionResult > Create ( int ? driverId , int ? carId , string carName )
78
+ public async Task < IActionResult > CreateByButton ( )
86
79
{
87
- var mechanics = await GETMechanics ( ) ;
88
- var drivers = await GETDrivers ( ) ;
89
- var cars = await GETCars ( ) ;
80
+ var operatorResponse = await _operatorReviewDataStore . GetOperatorReviews ( null , null , DateTime . Today , true , 1 ) ;
81
+ var mechanicAcceptanceResponse = await _mechanicAcceptanceDataStore . GetMechanicAcceptancesAsync ( null , null , DateTime . Today , null , null ) ;
90
82
91
- var operatorReviews = await _operatorReviewDataStore . GetOperatorReviews ( null , null , DateTime . Today , true , 1 ) ;
92
- var mechanicAcceptances = await _mechanicAcceptanceDataStore . GetMechanicAcceptancesAsync ( null , null , DateTime . Today , true , 1 ) ;
83
+ var mechanicDriverIds = mechanicAcceptanceResponse . Data . Select ( ma => ma . DriverId ) . ToHashSet ( ) ;
84
+ var filteredOperatorResponse = operatorResponse . Data . Where ( or => ! mechanicDriverIds . Contains ( or . DriverId ) ) . ToList ( ) ;
93
85
94
86
var accountIdStr = TempData [ "AccountId" ] as string ;
95
87
TempData . Keep ( "AccountId" ) ;
96
-
97
- var driverCarMapping = drivers . ToDictionary ( d => int . Parse ( d . Value ) , d => cars . FirstOrDefault ( c => c . Value == d . Value ) ? . Value ) ;
98
-
88
+ var mechanic = new MechanicDto ( ) ;
99
89
if ( int . TryParse ( accountIdStr , out int accountId ) )
100
90
{
101
91
var mechanicResponse = await _mechanicDataStore . GetMechanics ( accountId ) ;
102
- var mechanic = mechanicResponse . Data . FirstOrDefault ( ) ;
103
- if ( mechanic != null )
104
- {
105
- var healthyDrivers = operatorReviews . Data
106
- . Select ( dr => dr . DriverId )
107
- . ToList ( ) ;
108
-
109
- var acceptedDrivers = mechanicAcceptances . Data
110
- . Select ( ma => ma . DriverId )
111
- . ToList ( ) ;
112
-
113
- var filteredDrivers = drivers
114
- . Where ( d => healthyDrivers . Contains ( int . Parse ( d . Value ) ) && ! acceptedDrivers . Contains ( int . Parse ( d . Value ) ) )
115
- . ToList ( ) ;
116
-
117
- if ( driverId . HasValue && ! carId . HasValue )
118
- {
119
- driverCarMapping . TryGetValue ( driverId . Value , out var associatedCarId ) ;
120
- if ( int . TryParse ( associatedCarId , out int parsedCarId ) )
121
- {
122
- if ( parsedCarId != 1 )
123
- {
124
- carId = parsedCarId - 1 ;
125
- }
126
- else
127
- {
128
-
129
- carId = parsedCarId ;
130
- }
131
- }
132
- }
133
-
134
- ViewBag . Mechanics = new SelectList ( mechanics , "Value" , "Text" ) ;
135
- ViewBag . Drivers = new SelectList ( filteredDrivers , "Value" , "Text" , driverId ) ;
136
-
137
- if ( string . IsNullOrEmpty ( carName ) )
138
- {
139
- ViewBag . Cars = new SelectList ( cars , "Value" , "Text" , carId ) ;
140
- ViewBag . SelectedCar = cars . FirstOrDefault ( c => c . Value == carId . ToString ( ) ) ? . Text ;
141
- }
142
- else
143
- {
144
- ViewBag . Cars = carName ;
145
- ViewBag . SelectedCarId = carId ;
146
- }
147
-
148
- var selectedDriverName = filteredDrivers . FirstOrDefault ( d => d . Value == driverId . ToString ( ) ) ? . Text ;
149
- ViewBag . SelectedDriverName = selectedDriverName ?? string . Empty ;
150
- ViewBag . SelectedDriverId = driverId ;
151
-
152
- var model = new MechanicAcceptanceForCreateDto
153
- {
154
- DriverId = driverId ?? 0 ,
155
- MechanicId = mechanic . Id ,
156
- CarId = carId ?? 0
157
- } ;
158
-
159
- return View ( model ) ;
160
- }
92
+ mechanic = mechanicResponse . Data . FirstOrDefault ( ) ;
161
93
}
94
+ ViewBag . MechanicId = mechanic . Id ;
162
95
163
- return NotFound ( "Mechanic not found for the specified account." ) ;
96
+ ViewBag . FilteredOperatorResponse = filteredOperatorResponse ;
97
+
98
+ return View ( ) ;
164
99
}
165
100
101
+
166
102
[ HttpPost ]
167
103
[ ValidateAntiForgeryToken ]
168
104
public async Task < IActionResult > Create ( [ Bind ( "IsAccepted,Comments,MechanicId,Distance,CarId,DriverId" ) ] MechanicAcceptanceForCreateDto mechanicAcceptanceForCreateDto )
@@ -180,21 +116,28 @@ public async Task<IActionResult> Create([Bind("IsAccepted,Comments,MechanicId,Di
180
116
return RedirectToAction ( nameof ( PersonalIndex ) ) ;
181
117
}
182
118
183
- var mechanics = await GETMechanics ( ) ;
184
- var drivers = await GETDrivers ( ) ;
185
- var cars = await GETCars ( ) ;
186
- ViewBag . Mechanics = new SelectList ( mechanics , "Value" , "Text" ) ;
187
- ViewBag . Drivers = new SelectList ( drivers , "Value" , "Text" , mechanicAcceptanceForCreateDto . DriverId ) ;
188
- ViewBag . Cars = new SelectList ( cars , "Value" , "Text" , mechanicAcceptanceForCreateDto . CarId ) ;
189
-
190
- var selectedDriverName = drivers . FirstOrDefault ( d => d . Value == mechanicAcceptanceForCreateDto . DriverId . ToString ( ) ) ? . Text ;
191
- ViewBag . SelectedDriverName = selectedDriverName ?? string . Empty ;
192
- ViewBag . SelectedDriverId = mechanicAcceptanceForCreateDto . DriverId ;
193
- ViewBag . SelectedCar = cars . FirstOrDefault ( c => c . Value == mechanicAcceptanceForCreateDto . CarId . ToString ( ) ) ? . Text ;
194
-
195
119
return View ( mechanicAcceptanceForCreateDto ) ;
196
120
}
197
121
122
+ public async Task < IActionResult > CreateByLink ( int driverId , int carId , string carName , string driverName )
123
+ {
124
+ var accountIdStr = TempData [ "AccountId" ] as string ;
125
+ TempData . Keep ( "AccountId" ) ;
126
+ var mechanic = new MechanicDto ( ) ;
127
+ if ( int . TryParse ( accountIdStr , out int accountId ) )
128
+ {
129
+ var mechanicResponse = await _mechanicDataStore . GetMechanics ( accountId ) ;
130
+ mechanic = mechanicResponse . Data . FirstOrDefault ( ) ;
131
+ }
132
+
133
+ ViewBag . MechanicId = mechanic . Id ;
134
+ ViewBag . CarId = carId ;
135
+ ViewBag . DriverId = driverId ;
136
+ ViewBag . CarName = carName ;
137
+ ViewBag . DriverName = driverName ;
138
+
139
+ return View ( ) ;
140
+ }
198
141
199
142
[ HttpPost ]
200
143
[ ValidateAntiForgeryToken ]
@@ -225,9 +168,6 @@ public async Task<IActionResult> Edit(int id, MechanicAcceptanceForUpdateDto mec
225
168
return RedirectToAction ( nameof ( Index ) ) ;
226
169
}
227
170
228
- ViewBag . Drivers = new SelectList ( await GETDrivers ( ) , "Value" , "Text" ) ;
229
- ViewBag . Cars = new SelectList ( await GETCars ( ) , "Value" , "Text" ) ;
230
-
231
171
return View ( mechanicAcceptance ) ;
232
172
}
233
173
@@ -254,56 +194,5 @@ private async Task<bool> MechanicAcceptanceExists(int id)
254
194
var mechanicAcceptance = await _mechanicAcceptanceDataStore . GetMechanicAcceptanceAsync ( id ) ;
255
195
return mechanicAcceptance != null ;
256
196
}
257
-
258
- private async Task < List < SelectListItem > > GETMechanics ( )
259
- {
260
- var mechanicResponse = await _mechanicDataStore . GetMechanicsAsync ( ) ;
261
- var mechanics = mechanicResponse . Data
262
- . Select ( d => new SelectListItem
263
- {
264
- Value = d . Id . ToString ( ) ,
265
- Text = $ "{ d . FirstName } { d . LastName } "
266
- } )
267
- . ToList ( ) ;
268
- return mechanics ;
269
- }
270
- private async Task < List < SelectListItem > > GETCars ( )
271
- {
272
- var carResponse = await _carDataStore . GetCarsAsync ( null , null ) ;
273
- var cars = carResponse . Data
274
- . Select ( c => new SelectListItem
275
- {
276
- Value = c . Id . ToString ( ) ,
277
- Text = $ "{ c . Model } ({ c . Number } )"
278
- } )
279
- . ToList ( ) ;
280
- return cars ;
281
- }
282
-
283
- private async Task < List < SelectListItem > > GETDrivers ( )
284
- {
285
- var driverResponse = await _driverDataStore . GetDriversAsync ( null , null ) ;
286
- var drivers = driverResponse . Data
287
- . Select ( d => new SelectListItem
288
- {
289
- Value = d . Id . ToString ( ) ,
290
- Text = $ "{ d . FirstName } { d . LastName } "
291
- } )
292
- . ToList ( ) ;
293
- return drivers ;
294
- }
295
-
296
- public async Task < IActionResult > GetCarByDriverId ( int driverId )
297
- {
298
- var operatorReviews = await _operatorReviewDataStore . GetOperatorReviews ( null , null , DateTime . Today , true , 1 ) ;
299
- var operatorr = operatorReviews . Data . FirstOrDefault ( m => m . DriverId == driverId ) ;
300
-
301
- if ( operatorr != null )
302
- {
303
- var car = await _carDataStore . GetCarAsync ( operatorr . CarId ) ;
304
- return Json ( new { success = true , car } ) ;
305
- }
306
- return Json ( new { success = false } ) ;
307
- }
308
197
}
309
198
}
0 commit comments