Skip to content

Commit 7cc8c2c

Browse files
Updated create method in acceptance
1 parent 81e50ba commit 7cc8c2c

File tree

2 files changed

+67
-75
lines changed

2 files changed

+67
-75
lines changed

CheckDrive.Web/CheckDrive.Web/Controllers/MechanicAcceptancesController.cs

+33-22
Original file line numberDiff line numberDiff line change
@@ -82,23 +82,25 @@ public async Task<IActionResult> PersonalIndex(string? searchString, int? pageNu
8282

8383
return View(response.Data);
8484
}
85-
public async Task<IActionResult> Create(int? driverId, int? carId)
85+
public async Task<IActionResult> Create(int? driverId, int? carId, string carName)
8686
{
8787
var mechanics = await GETMechanics();
8888
var drivers = await GETDrivers();
8989
var cars = await GETCars();
9090

91-
var operatorReviews = await _operatorReviewDataStore.GetOperatorReviews(null, null, null, 1);
91+
var operatorReviews = await _operatorReviewDataStore.GetOperatorReviews(null, null,null, 1);
9292
var mechanicAcceptances = await _mechanicAcceptanceDataStore.GetMechanicAcceptancesAsync();
9393

9494
var accountIdStr = TempData["AccountId"] as string;
9595
TempData.Keep("AccountId");
9696

97+
// Creating a mapping from drivers to cars
98+
var driverCarMapping = drivers.ToDictionary(d => int.Parse(d.Value), d => cars.FirstOrDefault(c => c.Value == d.Value)?.Value);
99+
97100
if (int.TryParse(accountIdStr, out int accountId))
98101
{
99102
var mechanicResponse = await _mechanicDataStore.GetMechanics(accountId);
100103
var mechanic = mechanicResponse.Data.FirstOrDefault();
101-
102104
if (mechanic != null)
103105
{
104106
var healthyDrivers = operatorReviews.Data
@@ -115,26 +117,40 @@ public async Task<IActionResult> Create(int? driverId, int? carId)
115117
.Where(d => healthyDrivers.Contains(int.Parse(d.Value)) && !acceptedDrivers.Contains(int.Parse(d.Value)))
116118
.ToList();
117119

118-
if (driverId == null && filteredDrivers.Any())
120+
if (driverId.HasValue && !carId.HasValue)
119121
{
120-
driverId = int.Parse(filteredDrivers.First().Value);
122+
driverCarMapping.TryGetValue(driverId.Value, out var associatedCarId);
123+
if (int.TryParse(associatedCarId, out int parsedCarId))
124+
{
125+
if (parsedCarId != 1)
126+
{
127+
carId = parsedCarId - 1;
128+
}
129+
else
130+
{
131+
132+
carId = parsedCarId;
133+
}
134+
}
121135
}
122136

123-
filteredDrivers = filteredDrivers.Where(d => d.Value != driverId.ToString()).ToList();
137+
ViewBag.Mechanics = new SelectList(mechanics, "Value", "Text");
138+
ViewBag.Drivers = new SelectList(filteredDrivers, "Value", "Text", driverId);
124139

125-
if (carId == null && cars.Any())
140+
if (string.IsNullOrEmpty(carName))
126141
{
127-
carId = int.Parse(cars.First().Value);
142+
ViewBag.Cars = new SelectList(cars, "Value", "Text", carId);
143+
ViewBag.SelectedCar = cars.FirstOrDefault(c => c.Value == carId.ToString())?.Text;
144+
}
145+
else
146+
{
147+
ViewBag.Cars = carName;
148+
ViewBag.SelectedCarId = carId;
128149
}
129150

130-
ViewBag.Mechanics = new SelectList(mechanics, "Value", "Text");
131-
ViewBag.Drivers = new SelectList(filteredDrivers, "Value", "Text", driverId);
132-
ViewBag.Cars = new SelectList(cars, "Value", "Text", carId);
133-
134-
ViewBag.DriverId = driverId;
135-
ViewBag.CarId = carId;
136-
ViewBag.SelectedDriverName = drivers.FirstOrDefault(d => d.Value == driverId.ToString())?.Text ?? string.Empty;
137-
ViewBag.SelectedCar = cars.FirstOrDefault(c => c.Value == carId.ToString())?.Text ?? string.Empty;
151+
var selectedDriverName = filteredDrivers.FirstOrDefault(d => d.Value == driverId.ToString())?.Text;
152+
ViewBag.SelectedDriverName = selectedDriverName ?? string.Empty;
153+
ViewBag.SelectedDriverId = driverId;
138154

139155
var model = new MechanicAcceptanceForCreateDto
140156
{
@@ -162,26 +178,21 @@ public async Task<IActionResult> Create([Bind("IsAccepted,Comments,MechanicId,Di
162178
}
163179

164180
mechanicAcceptanceForCreateDto.Date = DateTime.Now;
165-
166181
await _mechanicAcceptanceDataStore.CreateMechanicAcceptanceAsync(mechanicAcceptanceForCreateDto);
167182
return RedirectToAction(nameof(PersonalIndex));
168183
}
169184

170185
var mechanics = await GETMechanics();
171186
var drivers = await GETDrivers();
172187
var cars = await GETCars();
173-
174188
ViewBag.Mechanics = new SelectList(mechanics, "Value", "Text");
175189
ViewBag.Drivers = new SelectList(drivers, "Value", "Text", mechanicAcceptanceForCreateDto.DriverId);
176190
ViewBag.Cars = new SelectList(cars, "Value", "Text", mechanicAcceptanceForCreateDto.CarId);
177191

178192
var selectedDriverName = drivers.FirstOrDefault(d => d.Value == mechanicAcceptanceForCreateDto.DriverId.ToString())?.Text;
179193
ViewBag.SelectedDriverName = selectedDriverName ?? string.Empty;
180194
ViewBag.SelectedDriverId = mechanicAcceptanceForCreateDto.DriverId;
181-
182-
var selectedCar = cars.FirstOrDefault(c => c.Value == mechanicAcceptanceForCreateDto.CarId.ToString())?.Text;
183-
ViewBag.SelectedCar = selectedCar ?? string.Empty;
184-
ViewBag.SelectedCarId = mechanicAcceptanceForCreateDto.CarId;
195+
ViewBag.SelectedCar = cars.FirstOrDefault(c => c.Value == mechanicAcceptanceForCreateDto.CarId.ToString())?.Text;
185196

186197
return View(mechanicAcceptanceForCreateDto);
187198
}

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

+34-53
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,39 @@
1818
</div>
1919
<div class="form-group w-50">
2020
<label asp-for="DriverId" class="control-label mt-2">Haydovchi</label>
21-
<select asp-for="DriverId" class="form-control border border-dark" asp-items="@ViewBag.Drivers" id="driverDropdown"></select>
21+
@if (ViewBag.SelectedDriverId != null && ViewBag.SelectedDriverId != 0)
22+
{
23+
<input type="text" class="form-control" value="@ViewBag.SelectedDriverName" disabled />
24+
<input type="hidden" asp-for="DriverId" value="@ViewBag.SelectedDriverId" />
25+
}
26+
else
27+
{
28+
@if (ViewBag.Drivers == null || !((IEnumerable<SelectListItem>)ViewBag.Drivers.Items).Any())
29+
{
30+
<select id="driverIdDropdown" class="form-control border border-dark" disabled>
31+
<option selected>Haydovchilar mavjud emas</option>
32+
</select>
33+
}
34+
else
35+
{
36+
<select asp-for="DriverId" id="driverIdDropdown" class="form-control border border-dark" asp-items="@(ViewBag.Drivers as SelectList)"></select>
37+
}
38+
}
2239
</div>
2340
<div class="form-group w-50">
24-
<label asp-for="CarId" class="control-label mt-2">Moshina</label>
25-
<select asp-for="CarId" class="form-control border border-dark" asp-items="@ViewBag.Cars" id="carDropdown"></select>
41+
<input type="text" asp-for="MechanicId" class="form-control border border-dark d-none" />
2642
</div>
2743
<div class="form-group w-50">
28-
<input type="hidden" asp-for="MechanicId" />
44+
<label asp-for="CarId" class="control-label mt-2">Mashina</label>
45+
@if (ViewBag.Cars is SelectList)
46+
{
47+
<select asp-for="CarId" class="form-control border border-dark" asp-items="@(ViewBag.Cars as SelectList)" value="@ViewBag.SelectedCarId" ></select>
48+
}
49+
else
50+
{
51+
<input type="text" class="form-control" value="@ViewBag.Cars" />
52+
<input type="hidden" asp-for="CarId" value="@ViewBag.SelectedCarId" />
53+
}
2954
</div>
3055
<div class="form-group w-50">
3156
<label asp-for="Distance" class="control-label mt-2">Qabul qilish masofasi</label>
@@ -49,54 +74,10 @@
4974

5075
@section Scripts {
5176
<script type="text/javascript">
52-
document.addEventListener('DOMContentLoaded', function () {
53-
var driverDropdown = document.getElementById('driverDropdown');
54-
var carDropdown = document.getElementById('carDropdown');
55-
var selectedDriverId = @Model.DriverId;
56-
57-
var urlParams = new URLSearchParams(window.location.search);
58-
var driverIdParam = urlParams.get('driverId');
59-
60-
if (driverIdParam) {
61-
driverDropdown.disabled = true;
62-
carDropdown.disabled = true;
63-
64-
driverDropdown.value = driverIdParam;
65-
66-
fetchCarByDriverId(driverIdParam);
67-
} else {
68-
driverDropdown.disabled = false;
69-
70-
if (selectedDriverId !== 0) {
71-
driverDropdown.value = selectedDriverId;
72-
fetchCarByDriverId(selectedDriverId);
73-
carDropdown.disabled = true;
74-
}
75-
}
76-
77-
driverDropdown.addEventListener('change', function () {
78-
var driverId = this.value;
79-
fetchCarByDriverId(driverId);
80-
});
81-
82-
function fetchCarByDriverId(driverId) {
83-
$.ajax({
84-
url: '@Url.Action("GetCarByDriverId")',
85-
type: 'GET',
86-
data: { driverId: driverId },
87-
success: function (response) {
88-
if (response.success) {
89-
var car = response.car;
90-
carDropdown.innerHTML = `<option value="${car.id}" selected>${car.model} (${car.number})</option>`;
91-
document.getElementById('CarId').value = car.id;
92-
} else {
93-
carDropdown.innerHTML = `<option value="" selected>No car available</option>`;
94-
document.getElementById('CarId').value = '';
95-
}
96-
carDropdown.disabled = false;
97-
}
98-
});
99-
}
100-
});
77+
var shouldDisable = @ViewBag.SelectedDriverId != null ? "true" : "false";
78+
if (shouldDisable === "true") {
79+
document.getElementById("driverIdDropdown").setAttribute("disabled", "disabled");
80+
document.getElementById("carIdDropdown").setAttribute("disabled", "disabled");
81+
}
10182
</script>
10283
}

0 commit comments

Comments
 (0)