Skip to content

Commit e1537be

Browse files
authored
Merge pull request #108 from DiyorMarket/mechanicAcceptance-create-page
mechanicAcceptance-create-page
2 parents 77a13f0 + e2bb2e2 commit e1537be

File tree

4 files changed

+161
-189
lines changed

4 files changed

+161
-189
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using CheckDrive.ApiContracts;
2+
using CheckDrive.ApiContracts.Mechanic;
23
using CheckDrive.ApiContracts.MechanicAcceptance;
34
using CheckDrive.Web.Stores.Cars;
45
using CheckDrive.Web.Stores.Drivers;
@@ -8,27 +9,19 @@
89
using CheckDrive.Web.Stores.OperatorReviews;
910
using Microsoft.AspNetCore.Mvc;
1011
using Microsoft.AspNetCore.Mvc.Rendering;
12+
using NuGet.Versioning;
13+
using System.Linq;
1114

1215
namespace CheckDrive.Web.Controllers
1316
{
14-
public class MechanicAcceptancesController : Controller
17+
public class MechanicAcceptancesController(IMechanicAcceptanceDataStore mechanicAcceptanceDataStore, IDriverDataStore driverDataStore, ICarDataStore carDataStore, IMechanicDataStore mechanicDataStore, IOperatorReviewDataStore operatorReviewDataStore, IMechanicHandoverDataStore mechanicHandoverDataStore) : Controller
1518
{
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;
3225

3326
public async Task<IActionResult> Index(int? pageNumber, string? searchString, DateTime? date)
3427
{
@@ -82,87 +75,30 @@ public async Task<IActionResult> PersonalIndex(string? searchString, int? pageNu
8275

8376
return View(response.Data);
8477
}
85-
public async Task<IActionResult> Create(int? driverId, int? carId, string carName)
78+
public async Task<IActionResult> CreateByButton()
8679
{
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);
9082

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();
9385

9486
var accountIdStr = TempData["AccountId"] as string;
9587
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();
9989
if (int.TryParse(accountIdStr, out int accountId))
10090
{
10191
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();
16193
}
94+
ViewBag.MechanicId = mechanic.Id;
16295

163-
return NotFound("Mechanic not found for the specified account.");
96+
ViewBag.FilteredOperatorResponse = filteredOperatorResponse;
97+
98+
return View();
16499
}
165100

101+
166102
[HttpPost]
167103
[ValidateAntiForgeryToken]
168104
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
180116
return RedirectToAction(nameof(PersonalIndex));
181117
}
182118

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-
195119
return View(mechanicAcceptanceForCreateDto);
196120
}
197121

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+
}
198141

199142
[HttpPost]
200143
[ValidateAntiForgeryToken]
@@ -225,9 +168,6 @@ public async Task<IActionResult> Edit(int id, MechanicAcceptanceForUpdateDto mec
225168
return RedirectToAction(nameof(Index));
226169
}
227170

228-
ViewBag.Drivers = new SelectList(await GETDrivers(), "Value", "Text");
229-
ViewBag.Cars = new SelectList(await GETCars(), "Value", "Text");
230-
231171
return View(mechanicAcceptance);
232172
}
233173

@@ -254,56 +194,5 @@ private async Task<bool> MechanicAcceptanceExists(int id)
254194
var mechanicAcceptance = await _mechanicAcceptanceDataStore.GetMechanicAcceptanceAsync(id);
255195
return mechanicAcceptance != null;
256196
}
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-
}
308197
}
309198
}

CheckDrive.Web/CheckDrive.Web/Views/MechanicAcceptances/Create.cshtml CheckDrive.Web/CheckDrive.Web/Views/MechanicAcceptances/CreateByButton.cshtml

+28-35
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
@model CheckDrive.ApiContracts.MechanicAcceptance.MechanicAcceptanceForCreateDto
22

33
@{
4-
ViewData["Title"] = "Create";
4+
ViewData["Title"] = "CreateByButton";
55
Layout = "~/Views/Shared/_PersonalLayout.cshtml";
66
}
77

@@ -14,39 +14,20 @@
1414
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
1515
<div class="form-group w-50 mt-2">
1616
<label asp-for="DriverId" class="control-label mt-2">Haydovchi</label>
17-
@if (ViewBag.SelectedDriverId != null && ViewBag.SelectedDriverId != 0)
18-
{
19-
<input type="text" class="form-control" value="@ViewBag.SelectedDriverName" disabled />
20-
<input type="hidden" asp-for="DriverId" value="@ViewBag.SelectedDriverId" />
21-
}
22-
else
23-
{
24-
@if (ViewBag.Drivers == null || !((IEnumerable<SelectListItem>)ViewBag.Drivers.Items).Any())
25-
{
26-
<select id="driverIdDropdown" class="form-control border border-dark" disabled>
27-
<option selected>Haydovchilar mavjud emas</option>
28-
</select>
29-
}
30-
else
17+
<select asp-for="DriverId" class="form-control border border-dark" id="driverSelect">
18+
<option value="">Haydovchini tanlang</option>
19+
@foreach (var driver in ViewBag.FilteredOperatorResponse)
3120
{
32-
<select asp-for="DriverId" id="driverIdDropdown" class="form-control border border-dark" asp-items="@(ViewBag.Drivers as SelectList)"></select>
21+
<option value="@driver.DriverId" data-carid="@driver.CarId" data-carname="@driver.CarModel (@driver.CarNumber)">@driver.DriverName</option>
3322
}
34-
}
23+
</select>
3524
</div>
3625
<div class="form-group w-50">
37-
<input type="text" asp-for="MechanicId" class="form-control border border-dark d-none" />
26+
<input type="hidden" asp-for="MechanicId" class="form-control border border-dark" value="@ViewBag.MechanicId" />
3827
</div>
3928
<div class="form-group w-50 mt-2">
4029
<label asp-for="CarId" class="control-label mt-2">Mashina</label>
41-
@if (ViewBag.Cars is SelectList)
42-
{
43-
<select asp-for="CarId" class="form-control border border-dark" asp-items="@(ViewBag.Cars as SelectList)" value="@ViewBag.SelectedCarId"></select>
44-
}
45-
else
46-
{
47-
<input type="text" class="form-control" value="@ViewBag.Cars" />
48-
<input type="hidden" asp-for="CarId" value="@ViewBag.SelectedCarId" />
49-
}
30+
<select asp-for="CarId" class="form-control border border-dark" id="carSelect"></select>
5031
</div>
5132
<div class="form-check form-switch mt-3">
5233
<input asp-for="IsAccepted" class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckDefault">
@@ -75,6 +56,26 @@
7556
@section Scripts {
7657
<script type="text/javascript">
7758
document.addEventListener('DOMContentLoaded', function () {
59+
var driverSelect = document.getElementById('driverSelect');
60+
var carSelect = document.getElementById('carSelect');
61+
62+
driverSelect.addEventListener('change', function () {
63+
var selectedOption = driverSelect.options[driverSelect.selectedIndex];
64+
var carId = selectedOption.getAttribute('data-carid');
65+
var carName = selectedOption.getAttribute('data-carname');
66+
67+
carSelect.innerHTML = '';
68+
69+
if (carId && carName) {
70+
var option = document.createElement('option');
71+
option.value = carId;
72+
option.textContent = carName;
73+
carSelect.appendChild(option);
74+
}
75+
76+
carSelect.disabled = false;
77+
});
78+
7879
var checkbox = document.getElementById('flexSwitchCheckDefault');
7980
var checkboxLabel = document.querySelector('label[for="flexSwitchCheckDefault"]');
8081
@@ -88,17 +89,9 @@
8889
}
8990
}
9091
91-
// Initialize the highlight on page load
9292
toggleCheckboxHighlight();
9393
94-
// Add change event listener to toggle the highlight
9594
checkbox.addEventListener('change', toggleCheckboxHighlight);
96-
97-
var shouldDisable = '@ViewBag.SelectedDriverId' != '' ? "true" : "false";
98-
if (shouldDisable === "true") {
99-
document.getElementById("driverIdDropdown").setAttribute("disabled", "disabled");
100-
document.getElementById("carIdDropdown").setAttribute("disabled", "disabled");
101-
}
10295
});
10396
</script>
10497
}

0 commit comments

Comments
 (0)