A couple of new logics have been implemented. Need to create views for complicated queries. :|
This commit is contained in:
parent
9a35b1224b
commit
1ca752ecd9
88
RentalBusiness/AuxilaryElements/BusinessLogic/BrandLogic.cs
Normal file
88
RentalBusiness/AuxilaryElements/BusinessLogic/BrandLogic.cs
Normal file
@ -0,0 +1,88 @@
|
||||
using Npgsql;
|
||||
using RentalBusiness.Models.ViewModels;
|
||||
|
||||
namespace RentalBusiness.AuxilaryElements.BusinessLogic
|
||||
{
|
||||
public class BrandLogic
|
||||
{
|
||||
public List<BrandViewModel> _brand;
|
||||
|
||||
public BrandLogic()
|
||||
{
|
||||
_brand = new();
|
||||
_brand = ReadBrands().Result;
|
||||
}
|
||||
|
||||
public async Task<List<BrandViewModel>> ReadBrands()
|
||||
{
|
||||
NpgsqlConnection connection = new NpgsqlConnection("Host=localhost;Database=local;Username=postgres;Password=postgres");
|
||||
List<BrandViewModel> brands = new List<BrandViewModel>();
|
||||
connection.Open();
|
||||
|
||||
await using (NpgsqlCommand getRecordStorage = new NpgsqlCommand("SELECT brand_id, brand_name, brand_ratio FROM brand", connection))
|
||||
{
|
||||
await using (NpgsqlDataReader reader = await getRecordStorage.ExecuteReaderAsync())
|
||||
{
|
||||
while (await reader.ReadAsync())
|
||||
{
|
||||
BrandViewModel viewModel = ReadModelView(reader);
|
||||
brands.Add(viewModel);
|
||||
}
|
||||
}
|
||||
}
|
||||
connection.Close();
|
||||
return brands;
|
||||
|
||||
}
|
||||
|
||||
public BrandViewModel ReadModelView(NpgsqlDataReader reader)
|
||||
{
|
||||
int? id = reader["brand_id"] as int?;
|
||||
string brandName = reader["brand_name"] as string;
|
||||
int? ratio = reader["brand_ratio"] as int?;
|
||||
BrandViewModel view = new BrandViewModel
|
||||
{
|
||||
ID = id.Value,
|
||||
BrandName = new string(brandName)
|
||||
};
|
||||
return view;
|
||||
}
|
||||
|
||||
public void PostBrand(BrandViewModel view)
|
||||
{
|
||||
NpgsqlConnection connection = new NpgsqlConnection("Host=localhost;Database=local;Username=postgres;Password=postgres");
|
||||
connection.Open();
|
||||
|
||||
using var checkDuplicate = new NpgsqlCommand("SELECT brand_id FROM brand WHERE brand_name LIKE @bn")
|
||||
{
|
||||
Parameters =
|
||||
{
|
||||
new("bn", view.BrandName)
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
int? buff = Convert.ToInt32(checkDuplicate.ExecuteScalar());
|
||||
|
||||
if(buff == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
using var postBrand = new NpgsqlCommand("INSERT INTO brand (brand_name,brand_ratio) VALUES(@bs,@br)",connection)
|
||||
{
|
||||
Parameters =
|
||||
{
|
||||
new("bs",view.BrandName),
|
||||
new("br",view.BrandRatio)
|
||||
}
|
||||
};
|
||||
|
||||
postBrand.ExecuteNonQueryAsync();
|
||||
|
||||
connection.Close();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
74
RentalBusiness/AuxilaryElements/BusinessLogic/ModelLogic.cs
Normal file
74
RentalBusiness/AuxilaryElements/BusinessLogic/ModelLogic.cs
Normal file
@ -0,0 +1,74 @@
|
||||
using Npgsql;
|
||||
using RentalBusiness.Enums;
|
||||
using RentalBusiness.Models.ViewModels;
|
||||
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
|
||||
|
||||
namespace RentalBusiness.AuxilaryElements.BusinessLogic
|
||||
{
|
||||
public class ModelLogic
|
||||
{
|
||||
public List<ModelViewModel> _model;
|
||||
|
||||
public ModelLogic()
|
||||
{
|
||||
_model = new();
|
||||
_model = ReadModels().Result;
|
||||
}
|
||||
|
||||
public async Task<List<ModelViewModel>> ReadModels()
|
||||
{
|
||||
NpgsqlConnection connection = new NpgsqlConnection("Host=localhost;Database=local;Username=postgres;Password=postgres");
|
||||
List<ModelViewModel> models = new List<ModelViewModel>();
|
||||
connection.Open();
|
||||
|
||||
await using (NpgsqlCommand getRecordStorage = new NpgsqlCommand("SELECT model_id, model_spec, model_ratio FROM model", connection))
|
||||
{
|
||||
await using (NpgsqlDataReader reader = await getRecordStorage.ExecuteReaderAsync())
|
||||
{
|
||||
while (await reader.ReadAsync())
|
||||
{
|
||||
ModelViewModel viewModel = ReadModelView(reader);
|
||||
models.Add(viewModel);
|
||||
}
|
||||
}
|
||||
}
|
||||
connection.Close();
|
||||
return models;
|
||||
|
||||
}
|
||||
|
||||
public ModelViewModel ReadModelView(NpgsqlDataReader reader)
|
||||
{
|
||||
int? id = reader["model_id"] as int?;
|
||||
string modelSpec = reader["model_spec"] as string;
|
||||
int? ratio = reader["model_ratio"] as int?;
|
||||
ModelViewModel view = new ModelViewModel
|
||||
{
|
||||
ID = id.Value,
|
||||
ModelSpec = new string(modelSpec),
|
||||
ModelRatio = ratio.Value,
|
||||
};
|
||||
return view;
|
||||
}
|
||||
|
||||
public void PostModel(ModelViewModel view)
|
||||
{
|
||||
NpgsqlConnection connection = new NpgsqlConnection("Host=localhost;Database=local;Username=postgres;Password=postgres");
|
||||
connection.Open();
|
||||
|
||||
using var postModel = new NpgsqlCommand("INSERT INTO model (model_spec,model_ratio) VALUES(@ms,@mr)")
|
||||
{
|
||||
Parameters =
|
||||
{
|
||||
new("ms",view.ModelSpec),
|
||||
new("mr",view.ModelRatio)
|
||||
}
|
||||
};
|
||||
|
||||
postModel.ExecuteNonQueryAsync();
|
||||
|
||||
connection.Close();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
using Npgsql;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Internal;
|
||||
using Npgsql;
|
||||
using RentalBusiness.Enums;
|
||||
using RentalBusiness.Models.ViewModels;
|
||||
|
||||
@ -8,7 +9,6 @@ namespace RentalBusiness.AuxilaryElements.BusinessLogic
|
||||
{
|
||||
public List<StorageViewModel> _storageFull;
|
||||
public List<StorageViewModel> _storageFree;
|
||||
|
||||
public StorageLogic()
|
||||
{
|
||||
_storageFree = new List<StorageViewModel>();
|
||||
@ -77,5 +77,26 @@ namespace RentalBusiness.AuxilaryElements.BusinessLogic
|
||||
};
|
||||
return view;
|
||||
}
|
||||
|
||||
public void PostCar(StorageViewModel model)
|
||||
{
|
||||
NpgsqlConnection connection = new NpgsqlConnection("Host=localhost;Database=local;Username=postgres;Password=postgres");
|
||||
connection.Open();
|
||||
|
||||
using var postCar = new NpgsqlCommand("INSERT INTO storage(brand_id,model_id,car_ratio_per_hour,car_status) VALUES(@bid,@mid,@ratio,@cs)", connection)
|
||||
{
|
||||
Parameters =
|
||||
{
|
||||
new("bid",model.Brand_ID),
|
||||
new("mid",model.Model_ID),
|
||||
new("ratio",model.CarRatio),
|
||||
new("cs",model.CarStatus),
|
||||
}
|
||||
};
|
||||
|
||||
postCar.ExecuteNonQueryAsync();
|
||||
|
||||
connection.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -12,12 +12,16 @@ namespace RentalBusiness.Controllers
|
||||
private readonly StorageLogic _storageLogic;
|
||||
private readonly ClientLogic _clientLogic;
|
||||
private readonly ContractLogic _contractLogic;
|
||||
private readonly ModelLogic _modelLogic;
|
||||
private readonly BrandLogic _brandLogic;
|
||||
public HomeController(ILogger<HomeController> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
_storageLogic = new StorageLogic();
|
||||
_clientLogic = new ClientLogic();
|
||||
_contractLogic = new ContractLogic();
|
||||
_modelLogic = new ModelLogic();
|
||||
_brandLogic = new BrandLogic();
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
@ -77,10 +81,51 @@ namespace RentalBusiness.Controllers
|
||||
[HttpGet]
|
||||
public IActionResult Car()
|
||||
{
|
||||
ViewBag.Cars = _storageLogic._storageFull;
|
||||
ViewBag.Models = _modelLogic._model;
|
||||
ViewBag.Brands = _brandLogic._brand;
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public void Car(string? brandname, int? brandratio, string? modelname, int? modelratio, int? brand, int? model )
|
||||
{
|
||||
if(!string.IsNullOrEmpty(brandname) && !string.IsNullOrEmpty(brandratio.ToString()))
|
||||
{
|
||||
BrandViewModel brandModel = new()
|
||||
{
|
||||
BrandName = brandname,
|
||||
BrandRatio = brandratio
|
||||
};
|
||||
|
||||
_brandLogic.PostBrand(brandModel);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(modelname) && !string.IsNullOrEmpty(modelratio.ToString()))
|
||||
{
|
||||
ModelViewModel modelModel = new()
|
||||
{
|
||||
ModelSpec = modelname,
|
||||
ModelRatio = brandratio
|
||||
};
|
||||
|
||||
_modelLogic.PostModel(modelModel);
|
||||
return;
|
||||
}
|
||||
|
||||
if(brand != null && model != null)
|
||||
{
|
||||
StorageViewModel storageModel = new()
|
||||
{
|
||||
Brand_ID = brand,
|
||||
Model_ID = model,
|
||||
CarRatio = _modelLogic._model.First(x => x.ID == model).ModelRatio + _brandLogic._brand.First(x => x.ID == brand).BrandRatio
|
||||
};
|
||||
|
||||
_storageLogic.PostCar(storageModel);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public IActionResult Storage()
|
||||
{
|
||||
|
9
RentalBusiness/Models/ViewModels/BrandViewModel.cs
Normal file
9
RentalBusiness/Models/ViewModels/BrandViewModel.cs
Normal file
@ -0,0 +1,9 @@
|
||||
namespace RentalBusiness.Models.ViewModels
|
||||
{
|
||||
public class BrandViewModel
|
||||
{
|
||||
public int? ID { get; set; }
|
||||
public string BrandName { get; set; } = string.Empty;
|
||||
public int? BrandRatio { get; set; }
|
||||
}
|
||||
}
|
10
RentalBusiness/Models/ViewModels/ModelViewModel.cs
Normal file
10
RentalBusiness/Models/ViewModels/ModelViewModel.cs
Normal file
@ -0,0 +1,10 @@
|
||||
namespace RentalBusiness.Models.ViewModels
|
||||
{
|
||||
public class ModelViewModel
|
||||
{
|
||||
public int? ID { get; set; }
|
||||
public string ModelSpec { get; set; } = string.Empty;
|
||||
|
||||
public int? ModelRatio { get; set; }
|
||||
}
|
||||
}
|
@ -7,8 +7,11 @@ namespace RentalBusiness.Models.ViewModels
|
||||
public int ID { get; set; }
|
||||
public string CarInfo { get; set; } = string.Empty;
|
||||
|
||||
public int CarRatio { get; set; }
|
||||
public int? CarRatio { get; set; }
|
||||
|
||||
public CarStatus CarStatus { get; set; } = CarStatus.available;
|
||||
|
||||
public int? Brand_ID { get; set; }
|
||||
public int? Model_ID { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -20,15 +20,15 @@
|
||||
<div class="modeltitle" style="text-align: center; font-size: 25px;">ADD A MODEL</div>
|
||||
<div class="modelname" style="text-align: left; font-size: 15px;">Model name:</div>
|
||||
<input type="text" id="modelname" name="modelname" />
|
||||
<div class="modeltratio" style="text-align: left; font-size: 15px;">Model ratio:</div>
|
||||
<input type="text" id="modeltratio" name="modeltratio" />
|
||||
<div class="modelratio" style="text-align: left; font-size: 15px;">Model ratio:</div>
|
||||
<input type="text" id="modelratio" name="modelratio" />
|
||||
<input type="submit" id="modelbtn" value="Model" class="btn btn-primary" />
|
||||
</div>
|
||||
<aside style="flex: 1"></aside>
|
||||
<div class="flex-containerB3" style="flex-direction: column; background-color:yellow;flex: 4; gap: 20px;display: flex; align-items: center; justify-content: center;">
|
||||
<div class="brandtitle" style="text-align: center; font-size: 25px;">ADD A CAR</div>
|
||||
<select></select>
|
||||
<select></select>
|
||||
<select id="brand" name="brand" class="form-control" asp-items="@(new SelectList(@ViewBag.Brands,"ID","BrandName"))"></select>
|
||||
<select id="model" name="model" class="form-control" asp-items="@(new SelectList(@ViewBag.Models,"ID","ModelSpec"))"></select>
|
||||
<input type="submit" id="carbtn" value="Car" class="btn btn-primary" />
|
||||
</div>
|
||||
<aside style="flex: 1"></aside>
|
||||
|
@ -29,7 +29,7 @@
|
||||
<a class="nav-link text-dark" asparea="" asp-controller="Home" asp-action="Index">ADD CONTRACT</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-dark" asparea="" asp-controller="Home" asp-action="Car">ADD CAR</a>
|
||||
<a class="nav-link text-dark" asparea="" asp-controller="Home" asp-action="Car">ADD BRAND/MODEL/CAR</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-dark" asparea="" asp-controller="Home" asp-action="Customer">ADD CUSTOMER</a>
|
||||
|
Loading…
Reference in New Issue
Block a user