diff --git a/LaaProductionWeb/Data/LaaProduction.Data.Cordonel/Interfaces/ISpecialRequirementsRepository[T].cs b/LaaProductionWeb/Data/LaaProduction.Data.Cordonel/Interfaces/ISpecialRequirementsRepository[T].cs index 8f2b9392..fb9b9d1f 100644 --- a/LaaProductionWeb/Data/LaaProduction.Data.Cordonel/Interfaces/ISpecialRequirementsRepository[T].cs +++ b/LaaProductionWeb/Data/LaaProduction.Data.Cordonel/Interfaces/ISpecialRequirementsRepository[T].cs @@ -1,13 +1,21 @@ namespace LaaProduction.Data.Cordonel.Interfaces { - using System; + using LaaPackages.Features.Cordonel.Models; + + using System.Collections.Generic; public interface ISpecialRequirementsRepository : IRepository { - T FirstOrDefaultByPO(string ponr); - void Approve(int id, string name, string comment); + SpecialRequiremetnsFilter Filter(); + + IEnumerable Filter(SpecialRequiremetnsFilter filter); + + T Find(CordonelSpecialRequirement model); + + T FirstOrDefaultByPO(string ponr); + void Unapprove(int id); } } diff --git a/LaaProductionWeb/Data/LaaProduction.Data.Cordonel/Interfaces/IStandardRequirementRepository[T].cs b/LaaProductionWeb/Data/LaaProduction.Data.Cordonel/Interfaces/IStandardRequirementRepository[T].cs index a8e9d8a8..70bb7112 100644 --- a/LaaProductionWeb/Data/LaaProduction.Data.Cordonel/Interfaces/IStandardRequirementRepository[T].cs +++ b/LaaProductionWeb/Data/LaaProduction.Data.Cordonel/Interfaces/IStandardRequirementRepository[T].cs @@ -8,7 +8,7 @@ { void Approve(int id, string name, string comment); - StandardRequiremetnsFilter CreateFilter(); + StandardRequiremetnsFilter Filter(); IEnumerable Filter(StandardRequiremetnsFilter filter); diff --git a/LaaProductionWeb/Data/LaaProduction.Data.Cordonel/Repositories/SpecialRequirementsRepository.cs b/LaaProductionWeb/Data/LaaProduction.Data.Cordonel/Repositories/SpecialRequirementsRepository.cs index 6b504760..4b964818 100644 --- a/LaaProductionWeb/Data/LaaProduction.Data.Cordonel/Repositories/SpecialRequirementsRepository.cs +++ b/LaaProductionWeb/Data/LaaProduction.Data.Cordonel/Repositories/SpecialRequirementsRepository.cs @@ -7,6 +7,8 @@ using System; using System.Collections; using System.Collections.Generic; + using System.IO; + using System.Xml.Serialization; public class SpecialRequirementsRepository : ISpecialRequirementsRepository { @@ -130,6 +132,175 @@ public CordonelSpecialRequirement Delete(object id) => throw new NotImplementedException($"{nameof(CordonelSpecialRequirement)} could not be deleted"); + public SpecialRequiremetnsFilter Filter() + { + var xmlFilter = this.sqlConnection + .CreateCommand($@" + DECLARE @spl TABLE( + Region VARCHAR(20) + , MeterSize VARCHAR(20) + , ProductionOrder INT + , PcbId INT + , IsActive BIT + , IsApproved BIT) + INSERT INTO @spl + SELECT std.Region + , std.MeterSize + , spl.ProductionOrderNo + , spl.PcbId + , spl.IsActive + , CAST(CASE WHEN spl.ApprovedDate IS NOT NULL THEN 1 ELSE 0 END AS BIT) + FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY Id ORDER BY Version DESC) AS RowNr + FROM Cordonel_Special_Requirements) AS spl + JOIN Cordonel_Standard_Requirements AS std + ON spl.StandardId = std.Id + AND spl.StandardVersion = std.Version + WHERE spl.RowNr = 1 + SELECT CAST((SELECT (SELECT DISTINCT Region AS 'Region/@Value' + FROM @spl + FOR XML PATH(''), TYPE) AS Regions + , (SELECT DISTINCT MeterSize AS 'MeterSize/@Value' + FROM @spl + FOR XML PATH(''), TYPE) AS MeterSizes + , (SELECT DISTINCT ProductionOrder AS 'ProductionOrder/@Value' + FROM @spl + FOR XML PATH(''), TYPE) AS ProductionOrders + , (SELECT DISTINCT PcbId AS 'PcbId/@Value' + FROM @spl + FOR XML PATH(''), TYPE) AS PcbIds + , (SELECT DISTINCT IsActive AS 'Active/@Value' + FROM @spl + FOR XML PATH(''), TYPE) AS ActiveRequirements + , (SELECT DISTINCT IsApproved AS 'Approved/@Value' + FROM @spl + FOR XML PATH(''), TYPE) AS ApprovedRequirements + FOR XML PATH(''), ROOT('SpecialRequiremetnsFilter'), TYPE) AS XML)") + .FirstOrDefault(x => x.GetValue(0)); + var filter = default(SpecialRequiremetnsFilter); + + if (!string.IsNullOrWhiteSpace(xmlFilter)) + { + var xmlSerializer = new XmlSerializer(typeof(SpecialRequiremetnsFilter)); + var xmlReader = new StringReader(xmlFilter); + + try + { + filter = xmlSerializer.Deserialize(xmlReader) as SpecialRequiremetnsFilter; + } + catch // TODO: (Exception e) + { + + } + } + + return filter ?? new SpecialRequiremetnsFilter(); + } + + public IEnumerable Filter(SpecialRequiremetnsFilter filter) + { + var query = $@" + SELECT * + FROM (SELECT [Latest].[Id] + , [Latest].[Version] + , [Latest].[StandardId] + , [Latest].[StandardVersion] + , [Standards].[Key] + , [Standards].[Region] + , [Standards].[MeterSize] + , [Latest].[ProductionOrderNo] + , [Latest].[PcbId] + , [Latest].[FwVersion] + , [Latest].[LutCrc] + , [Latest].[SkipCalibration] + , [Latest].[SkipRadioCheck] + , [Latest].[RequiredLifeTimeYearsAssembly] + , [Latest].[RequiredLifeTimeYearsShipping] + , [Latest].[MaxDrainedBatteryLoadPercentAssembly] + , [Latest].[MaxDrainedBatteryLoadPercentShipping] + , [Latest].[MaxStorageMonths] + , [Latest].[MaxStorageMonthsBigOrders] + , [Latest].[QuiescentCurrent_uA] + , [Latest].[EstimatedProductionBatteryLoadPercent] + , [Latest].[Timestamp] + , [Latest].[CreatedBy] + , [Latest].[ApprovedBy] + , [Latest].[ApprovedDate] + , [Latest].[Comment] + , [Latest].[IsActive] + , [Standards].[ProductGroup] + FROM (SELECT *, RANK() OVER (PARTITION BY [Id] + ORDER BY [Version] DESC) AS [RowNr] + FROM [Cordonel_Special_Requirements]) + AS [Latest] + LEFT JOIN [Cordonel_Standard_Requirements] + AS [Standards] + ON [Standards].[Id] = [Latest].[StandardId] + AND [Standards].[Version] = [Latest].[StandardVersion] + WHERE [Latest].[RowNr] = 1) + AS [req] + {filter?.SqlConditions("req", "WHERE")} + ORDER BY [req].[ProductGroup] ASC + , LEN(SUBSTRING([req].[MeterSize], 1, CASE WHEN CHARINDEX(' ', [req].[MeterSize]) > 0 THEN CHARINDEX(' ', [req].[MeterSize]) - 1 ELSE LEN([req].[MeterSize]) END)) + , SUBSTRING([req].[MeterSize], 1, CASE WHEN CHARINDEX(' ', [req].[MeterSize]) > 0 THEN CHARINDEX(' ', [req].[MeterSize]) - 1 ELSE LEN([req].[MeterSize]) END) + , [req].[MeterSize]"; + + return this.sqlConnection + .CreateCommand(query) + .ExecuteReader(this.ParseSpecialRequirement); + } + + public CordonelSpecialRequirement Find(CordonelSpecialRequirement model) + { + var requirement = this.sqlConnection + .CreateCommand($@" + SELECT [Special].[Id] + , [Special].[Version] + , [Special].[StandardId] + , [Special].[StandardVersion] + , [Standard].[Key] + , [Standard].[Region] + , [Standard].[MeterSize] + , [Special].[ProductionOrderNo] + , [Special].[PcbId] + , [Special].[FwVersion] + , [Special].[LutCrc] + , [Special].[SkipCalibration] + , [Special].[SkipRadioCheck] + , [Special].[RequiredLifeTimeYearsAssembly] + , [Special].[RequiredLifeTimeYearsShipping] + , [Special].[MaxDrainedBatteryLoadPercentAssembly] + , [Special].[MaxDrainedBatteryLoadPercentShipping] + , [Special].[MaxStorageMonths] + , [Special].[MaxStorageMonthsBigOrders] + , [Special].[QuiescentCurrent_uA] + , [Special].[EstimatedProductionBatteryLoadPercent] + , [Special].[Timestamp] + , [Special].[CreatedBy] + , [Special].[ApprovedBy] + , [Special].[ApprovedDate] + , [Special].[Comment] + , [Special].[IsActive] + , [Standard].[ProductGroup] + FROM [Cordonel_Special_Requirements] AS [Special] + LEFT JOIN [Cordonel_Standard_Requirements] AS [Standard] + ON [Standard].[Id] = [Special].[StandardId] + AND [Standard].[Version] = [Special].[StandardVersion] + WHERE ISNULL([Special].[ProductionOrderNo], '') = ISNULL(@{nameof(model.ProductionOrderNr)}, '') + AND ISNULL([Special].[PcbId], '') = ISNULL(@{nameof(model.PcbId)}, '') + ORDER BY [Special].[Version] DESC") + .SetParameter(nameof(model.ProductionOrderNr), model.ProductionOrderNr) + .SetParameter(nameof(model.PcbId), model.PcbId) + .FirstOrDefault(this.ParseSpecialRequirement); + + if (requirement != null) + { + requirement.StandardRequirement = this.StandardRequirement(requirement.StandardId); + requirement.History = this.Hostory(requirement.Id, requirement.Version); + } + + return requirement; + } + public CordonelSpecialRequirement FirstOrDefault(object id) { var requirement = this.sqlConnection diff --git a/LaaProductionWeb/Data/LaaProduction.Data.Cordonel/Repositories/StandardRequirementsRepository.cs b/LaaProductionWeb/Data/LaaProduction.Data.Cordonel/Repositories/StandardRequirementsRepository.cs index 14ea45e8..304ea00d 100644 --- a/LaaProductionWeb/Data/LaaProduction.Data.Cordonel/Repositories/StandardRequirementsRepository.cs +++ b/LaaProductionWeb/Data/LaaProduction.Data.Cordonel/Repositories/StandardRequirementsRepository.cs @@ -344,16 +344,16 @@ .SetParameter(nameof(requirementId), requirementId) .ExecuteNonQuery(); - public StandardRequiremetnsFilter CreateFilter() + public StandardRequiremetnsFilter Filter() { var xmlFilter = this.sqlConnection .CreateCommand($@" SELECT CAST((SELECT (SELECT DISTINCT Region AS 'Region/@Value' - FROM Cordonel_Standard_Requirements + FROM Cordonel_Standard_Requirements FOR XML PATH(''), TYPE) AS Regions - , (SELECT DISTINCT MeterSize AS 'MeterSize/@Value' - FROM Cordonel_Standard_Requirements - FOR XML PATH(''), TYPE) AS MeterSizes + , (SELECT DISTINCT MeterSize AS 'MeterSize/@Value' + FROM Cordonel_Standard_Requirements + FOR XML PATH(''), TYPE) AS MeterSizes , (SELECT DISTINCT IsActive AS 'Active/@Value' FROM Cordonel_Standard_Requirements FOR XML PATH(''), TYPE) AS ActiveRequirements @@ -385,39 +385,42 @@ public IEnumerable Filter(StandardRequiremetnsFilter filter) { var query = $@" - SELECT [Id] - , [Version] - , [Key] - , [Region] - , [ProductGroup] - , [MeterSize] - , [FwVersion] - , [LutCrc] - , [SkipCalibration] - , [SkipRadioCheck] - , [RequiredLifeTimeYearsAssembly] - , [RequiredLifeTimeYearsShipping] - , [MaxDrainedBatteryLoadPercentAssembly] - , [MaxDrainedBatteryLoadPercentShipping] - , [MaxStorageMonths] - , [MaxStorageMonthsBigOrders] - , [QuiescentCurrent_uA] - , [EstimatedProductionBatteryLoadPercent] - , [Timestamp] - , [CreatedBy] - , [ApprovedBy] - , [ApprovedDate] - , [Comment] - , [IsActive] - FROM (SELECT *, RANK() OVER (PARTITION BY [Id] - ORDER BY [Version] DESC) AS [RowNr] - FROM [Cordonel_Standard_Requirements] {filter?.SqlConditions()}) - AS [Latest] - WHERE [Latest].[RowNr] = 1 - ORDER BY [ProductGroup] ASC - , LEN(SUBSTRING([MeterSize], 1, CASE WHEN CHARINDEX(' ', [MeterSize]) > 0 THEN CHARINDEX(' ', [MeterSize]) - 1 ELSE LEN([MeterSize]) END)) - , SUBSTRING([MeterSize], 1, CASE WHEN CHARINDEX(' ', [MeterSize]) > 0 THEN CHARINDEX(' ', [MeterSize]) - 1 ELSE LEN([MeterSize]) END) - , [MeterSize] ASC"; + SELECT * + FROM (SELECT [Id] + , [Version] + , [Key] + , [Region] + , [ProductGroup] + , [MeterSize] + , [FwVersion] + , [LutCrc] + , [SkipCalibration] + , [SkipRadioCheck] + , [RequiredLifeTimeYearsAssembly] + , [RequiredLifeTimeYearsShipping] + , [MaxDrainedBatteryLoadPercentAssembly] + , [MaxDrainedBatteryLoadPercentShipping] + , [MaxStorageMonths] + , [MaxStorageMonthsBigOrders] + , [QuiescentCurrent_uA] + , [EstimatedProductionBatteryLoadPercent] + , [Timestamp] + , [CreatedBy] + , [ApprovedBy] + , [ApprovedDate] + , [Comment] + , [IsActive] + FROM (SELECT *, RANK() OVER (PARTITION BY [Id] + ORDER BY [Version] DESC) AS [RowNr] + FROM [Cordonel_Standard_Requirements]) + AS [Latest] + WHERE [Latest].[RowNr] = 1) + AS [req] + {filter?.SqlConditions("req", "WHERE")} + ORDER BY [req].[ProductGroup] ASC + , LEN(SUBSTRING([req].[MeterSize], 1, CASE WHEN CHARINDEX(' ', [req].[MeterSize]) > 0 THEN CHARINDEX(' ', [req].[MeterSize]) - 1 ELSE LEN([req].[MeterSize]) END)) + , SUBSTRING([req].[MeterSize], 1, CASE WHEN CHARINDEX(' ', [req].[MeterSize]) > 0 THEN CHARINDEX(' ', [req].[MeterSize]) - 1 ELSE LEN([req].[MeterSize]) END) + , [req].[MeterSize] ASC"; return this.sqlConnection .CreateCommand(query) diff --git a/LaaProductionWeb/LaaPackages b/LaaProductionWeb/LaaPackages index 66f7bb45..6a016687 160000 --- a/LaaProductionWeb/LaaPackages +++ b/LaaProductionWeb/LaaPackages @@ -1 +1 @@ -Subproject commit 66f7bb45d2ad42c18b29bb0793a5e509109b884a +Subproject commit 6a016687bc8a3aee54697cc0afdb4a5d29029c36 diff --git a/LaaProductionWeb/LaaProductionWeb/API/Cordonel/SpecialRequirementsController.cs b/LaaProductionWeb/LaaProductionWeb/API/Cordonel/SpecialRequirementsController.cs index ff788b06..510bd165 100644 --- a/LaaProductionWeb/LaaProductionWeb/API/Cordonel/SpecialRequirementsController.cs +++ b/LaaProductionWeb/LaaProductionWeb/API/Cordonel/SpecialRequirementsController.cs @@ -4,8 +4,7 @@ using LaaProduction.Data.Cordonel; using LaaProduction.Personalization; using LaaProductionWeb.App_Infrastructure; - - using System; + using System.Web.Http; [RoutePrefix(RoutePrefixes.API_CORDONEL_SPECIALREQUIREMENTS)] @@ -57,7 +56,12 @@ return this.BadRequest(); } - var result = this.cordonels.SpecialRequirements.Add(model); + var result = this.cordonels.SpecialRequirements.Find(model); + + if (result is null) + { + result = this.cordonels.SpecialRequirements.Add(model); + } return this.Json(result); } @@ -97,5 +101,23 @@ return this.Ok(id); } + + [HttpGet] + [Route(nameof(Filter))] + public IHttpActionResult Filter() + { + var result = this.cordonels.SpecialRequirements.Filter(); + + return this.Ok(result); + } + + [HttpPost] + [Route(nameof(Filter))] + public IHttpActionResult Filter(SpecialRequiremetnsFilter filter) + { + var result = this.cordonels.SpecialRequirements.Filter(filter); + + return this.Ok(result); + } } } diff --git a/LaaProductionWeb/LaaProductionWeb/API/Cordonel/StandardRequirementsController.cs b/LaaProductionWeb/LaaProductionWeb/API/Cordonel/StandardRequirementsController.cs index 6185e0c1..5d8e7e8f 100644 --- a/LaaProductionWeb/LaaProductionWeb/API/Cordonel/StandardRequirementsController.cs +++ b/LaaProductionWeb/LaaProductionWeb/API/Cordonel/StandardRequirementsController.cs @@ -122,7 +122,7 @@ [Route(nameof(Filter))] public IHttpActionResult Filter() { - var result = this.cordonels.StandardRequirements.CreateFilter(); + var result = this.cordonels.StandardRequirements.Filter(); return this.Ok(result); } diff --git a/LaaProductionWeb/LaaProductionWeb/Controllers/HomeController.cs b/LaaProductionWeb/LaaProductionWeb/Controllers/HomeController.cs index 84d944b5..b45e7e05 100644 --- a/LaaProductionWeb/LaaProductionWeb/Controllers/HomeController.cs +++ b/LaaProductionWeb/LaaProductionWeb/Controllers/HomeController.cs @@ -62,7 +62,7 @@ } else if (token.Errors != null) { - this.ModelState.AddModelErrors(token.Errors); + this.ModelState.AddModelError(nameof(token.Errors), "Invalid login attempt!"); } } else diff --git a/LaaProductionWeb/LaaProductionWeb/Controllers/SpecialRequirementsController.cs b/LaaProductionWeb/LaaProductionWeb/Controllers/SpecialRequirementsController.cs index 37005f7b..5a09c088 100644 --- a/LaaProductionWeb/LaaProductionWeb/Controllers/SpecialRequirementsController.cs +++ b/LaaProductionWeb/LaaProductionWeb/Controllers/SpecialRequirementsController.cs @@ -27,6 +27,28 @@ return this.View(requirements); } + [HttpGet] + public ActionResult TBody() + { + var requirements = this.http + .Get>(x => x.SetPath(RoutePrefixes.API_CORDONEL_SPECIALREQUIREMENTS.ToURL())) + .Value ?? new List(); + + return this.PartialView(requirements); + } + + [HttpPost] + public ActionResult TBody(SpecialRequiremetnsFilter filter) + { + var requirements = this.http + .Post>(x => x + .SetPath(RoutePrefixes.API_CORDONEL_SPECIALREQUIREMENTS.ToURL("Filter")) + .SetJsonBody(filter)) + .Value ?? new List(); + + return this.PartialView(requirements); + } + [HttpGet] public ActionResult Create() { @@ -59,6 +81,9 @@ { if (this.ModelState.IsValid) { + model.Timestamp = DateTime.UtcNow; + model.CreatedBy = this.User.FullName(); + var requirement = this.http .Post(request => request .SetPath(RoutePrefixes.API_CORDONEL_SPECIALREQUIREMENTS.ToURL()) @@ -144,7 +169,6 @@ [HttpGet] [HttpUpdateRequirement] - [Route("SpecialRequirements/Update/{id}")] public ActionResult Update(string id) { var requirement = this.http @@ -172,6 +196,26 @@ return this.PartialView(requirement); } + [HttpGet] + [HttpUpdateRequirement] + [Route("SpecialRequirements/Version/{id}/{version}")] + public ActionResult Version(string id, string version) + { + var requirement = this.http + .Get(x => x + .SetPath(RoutePrefixes.API_CORDONEL_SPECIALREQUIREMENTS.ToURL($"{id}/{version}"))) + .Value ?? new CordonelSpecialRequirement(); + + if (requirement is null) + { + requirement = new CordonelSpecialRequirement(); + + this.ModelState.AddModelError("Error", "Requirement not found!"); + } + + return this.PartialView(nameof(this.Update), requirement); + } + [HttpPost] [HttpUpdateRequirement] [Route("SpecialRequirements/Update")] @@ -221,37 +265,37 @@ return this.PartialView(requirement); } - [HttpGet] - public ActionResult SpecialRequirements() - { - var requirements = this.http - .Get>(x => x.SetPath(RoutePrefixes.API_CORDONEL_SPECIALREQUIREMENTS.ToURL())) - .Value ?? new List(); - - return this.PartialView(requirements); - } - [HttpPost] [AllowedRoles(EmployeesRoles.WEB_Requirements_Approve)] public ActionResult Approve(string id, string comment) { var response = this.http .SetBearer(this.bearer) - .Put(x => x.SetPath(RoutePrefixes.API_CORDONEL_STANDARDREQUIREMENTS.ToURL($"Approve/{id}")) + .Put(x => x.SetPath(RoutePrefixes.API_CORDONEL_SPECIALREQUIREMENTS.ToURL($"Approve/{id}")) .SetJsonBody(comment)); - return this.RedirectToAction(nameof(Update), "SpecialRequirements", new { id }); + return this.Redirect($"/LaaProductionWeb/SpecialRequirements/Update/{id}"); } - [HttpGet] - [Route("SpecialRequirements/Unapprove/{id}/")] + [HttpPost] public ActionResult Unapprove(string id) { var response = this.http .SetBearer(this.bearer) .Put(x => x.SetPath(RoutePrefixes.API_CORDONEL_SPECIALREQUIREMENTS.ToURL($"Unapprove/{id}"))); - return this.Redirect(this.HttpContext.GetUrlReferer()); + return this.Redirect($"/LaaProductionWeb/SpecialRequirements/Update/{id}"); + } + + [HttpGet] + public ActionResult Filter() + { + var filter = this.http + .SetBearer(this.bearer) + .Get(x => x.SetPath(RoutePrefixes.API_CORDONEL_SPECIALREQUIREMENTS.ToURL("Filter"))) + .Value ?? new SpecialRequiremetnsFilter(); + + return this.PartialView(filter); } } } \ No newline at end of file diff --git a/LaaProductionWeb/LaaProductionWeb/Controllers/StandardRequirementsController.cs b/LaaProductionWeb/LaaProductionWeb/Controllers/StandardRequirementsController.cs index 8baae62f..2265b1ea 100644 --- a/LaaProductionWeb/LaaProductionWeb/Controllers/StandardRequirementsController.cs +++ b/LaaProductionWeb/LaaProductionWeb/Controllers/StandardRequirementsController.cs @@ -16,7 +16,7 @@ public StandardRequirementsController() => this.http = WebApiApplication.GetService(); - + [HttpGet] public ActionResult Index() { @@ -107,8 +107,6 @@ var requirement = this.http .Get(x => x.SetPath(RoutePrefixes.API_CORDONEL_STANDARDREQUIREMENTS.ToURL($"{id}/{nr}"))) .Value ?? new CordonelStandardRequirement(); - requirement.CreatedBy = this.User.FullName(); - requirement.Timestamp = DateTime.UtcNow; return this.PartialView(nameof(Update), requirement); } diff --git a/LaaProductionWeb/LaaProductionWeb/LaaProductionWeb.csproj b/LaaProductionWeb/LaaProductionWeb/LaaProductionWeb.csproj index 2743acc2..0854e971 100644 --- a/LaaProductionWeb/LaaProductionWeb/LaaProductionWeb.csproj +++ b/LaaProductionWeb/LaaProductionWeb/LaaProductionWeb.csproj @@ -356,6 +356,8 @@ + + diff --git a/LaaProductionWeb/LaaProductionWeb/Views/SpecialRequirements/Filter.cshtml b/LaaProductionWeb/LaaProductionWeb/Views/SpecialRequirements/Filter.cshtml new file mode 100644 index 00000000..2d21520b --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb/Views/SpecialRequirements/Filter.cshtml @@ -0,0 +1,201 @@ +@using LaaPackages.Features.Cordonel.Models +@using LaaProductionWeb.Resources +@using System.Text.RegularExpressions + +@model SpecialRequiremetnsFilter + +
+ +
@UITranslations.Requirements_Region_Name
+
+ + @if (this.Model?.Regions?.Count > 0) + { + var regions = this.Model.Regions; + var regionsCount = regions.Count; + + for (int i = 0; i < regionsCount; i++) + { + var region = regions[i]; + var idSelected = $"{nameof(this.Model.Regions)}_{i}_{nameof(region.Selected)}"; + +
+ + + +
+ } + } + +
@UITranslations.Requirements_MeterSize_Name
+
+ + @if (this.Model?.MeterSizes?.Count > 0) + { + var meterSizes = this.Model.MeterSizes.OrderBy(x => + { + var matches = Regex.Matches($"{x.Value}", @"\d+"); + var value = default(int); + + foreach (Match match in matches) + { + _ = match.Success && int.TryParse(match.Value, out value); + break; + } + + return value; + }) + .ToList(); + var meterSizesCount = meterSizes.Count; + + for (int i = 0; i < meterSizesCount; i++) + { + var meterSize = meterSizes[i]; + var idSelected = $"{nameof(this.Model.MeterSizes)}_{i}_{nameof(meterSize.Selected)}"; + +
+ + + +
+ } + } + +
@UITranslations.Requirements_IsActive_Name
+
+ + @if (this.Model?.ActiveRequirements?.Count > 0) + { + var activeRequirements = this.Model.ActiveRequirements; + var activeRequirementsCount = activeRequirements.Count; + + for (int i = 0; i < activeRequirementsCount; i++) + { + var state = activeRequirements[i]; + var idSelected = $"{nameof(this.Model.ActiveRequirements)}_{i}_{nameof(state.Selected)}"; + +
+ + + +
+ } + } + +
@UITranslations.RequirementApproved_Title
+
+ + @if (this.Model?.ApprovedRequirements?.Count > 0) + { + var approvedRequirements = this.Model.ApprovedRequirements; + var approvedRequirementsCount = approvedRequirements.Count; + + for (int i = 0; i < approvedRequirementsCount; i++) + { + var approved = approvedRequirements[i]; + var idSelected = $"{nameof(this.Model.ApprovedRequirements)}_{i}_{nameof(approved.Selected)}"; + +
+ + + +
+ } + } + +
@UITranslations.Requirements_ProductionOrderNr_Name
+
+ + @if (this.Model?.ProductionOrders?.Count > 0) + { + var productionOrders = this.Model.ProductionOrders; + var productionOrdersCount = productionOrders.Count; + + for (int i = 0; i < productionOrdersCount; i++) + { + var productionOrder = productionOrders[i]; + var idSelected = $"{nameof(this.Model.ProductionOrders)}_{i}_{nameof(productionOrder.Selected)}"; + +
+ + + +
+ } + } + +
@UITranslations.Requirements_PcbId_Name
+
+ + @if (this.Model?.PcbIds?.Count > 0) + { + var pcbs = this.Model.PcbIds; + var pcbsCount = pcbs.Count; + + for (int i = 0; i < pcbsCount; i++) + { + var pcb = pcbs[i]; + var idSelected = $"{nameof(this.Model.PcbIds)}_{i}_{nameof(pcb.Selected)}"; + +
+ + + +
+ } + } +
diff --git a/LaaProductionWeb/LaaProductionWeb/Views/SpecialRequirements/Index.cshtml b/LaaProductionWeb/LaaProductionWeb/Views/SpecialRequirements/Index.cshtml index 2a1e055e..b0d0fa51 100644 --- a/LaaProductionWeb/LaaProductionWeb/Views/SpecialRequirements/Index.cshtml +++ b/LaaProductionWeb/LaaProductionWeb/Views/SpecialRequirements/Index.cshtml @@ -5,61 +5,60 @@ @model List -
- - +
+
+ + + + @{ - var model = new LaaPackages.Features.Cordonel.Models.CordonelSpecialRequirement(); + var model = new CordonelSpecialRequirement(); } - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - @if (Model != null && Model.Any()) - { - foreach (var x in this.Model) - { - - @Html.Partial("TrContent", x) - - } - } + @{ Html.RenderPartial("TBody", this.Model); }
- @UITranslations.StandardRequirements_Title - + @UITranslations.StandardRequirements_Title + @if (this.User.IsInRole(EmployeesRoles.WEB_Approvals)) { - + }
+ +
@Html.DisplayNameFor(_ => model.Version)@Html.DisplayNameFor(_ => model.StandardId)@Html.DisplayNameFor(_ => model.Region)@Html.DisplayNameFor(_ => model.MeterSize)@Html.DisplayNameFor(_ => model.ProductionOrderNr)@Html.DisplayNameFor(_ => model.PcbId)@Html.DisplayNameFor(_ => model.IsActive)@Html.DisplayNameFor(_ => model.FwVersion)@Html.DisplayNameFor(_ => model.LutCrc)@Html.DisplayNameFor(_ => model.SkipCalibration)@Html.DisplayNameFor(_ => model.SkipRadioCheck)@Html.DisplayNameFor(_ => model.RequiredLifeTimeYearsAssembly)@Html.DisplayNameFor(_ => model.RequiredLifeTimeYearsShipping)@Html.DisplayNameFor(_ => model.MaxDrainedBatteryLoadPercentAssembly)@Html.DisplayNameFor(_ => model.MaxDrainedBatteryLoadPercentShipping)@Html.DisplayNameFor(_ => model.MaxStorageMonths)@Html.DisplayNameFor(_ => model.MaxStorageMonthsBigOrders)@Html.DisplayNameFor(_ => model.QuiescentCurrent_uA)@Html.DisplayNameFor(_ => model.EstimatedProductionBatteryLoadPercent)@Html.DisplayNameFor(_ => model.CreatedBy)@Html.DisplayNameFor(_ => model.Timestamp)@Html.DisplayNameFor(_ => model.ApprovedBy)@Html.DisplayNameFor(_ => model.ApprovedDate)@Html.DisplayNameFor(_ => model.Comment)@Html.DisplayNameFor(_ => model.Version)@Html.DisplayNameFor(_ => model.StandardId)@Html.DisplayNameFor(_ => model.Region)@Html.DisplayNameFor(_ => model.MeterSize)@Html.DisplayNameFor(_ => model.ProductionOrderNr)@Html.DisplayNameFor(_ => model.PcbId)@Html.DisplayNameFor(_ => model.IsActive)@Html.DisplayNameFor(_ => model.FwVersion)@Html.DisplayNameFor(_ => model.LutCrc)@Html.DisplayNameFor(_ => model.SkipCalibration)@Html.DisplayNameFor(_ => model.SkipRadioCheck)@Html.DisplayNameFor(_ => model.RequiredLifeTimeYearsAssembly)@Html.DisplayNameFor(_ => model.RequiredLifeTimeYearsShipping)@Html.DisplayNameFor(_ => model.MaxDrainedBatteryLoadPercentAssembly)@Html.DisplayNameFor(_ => model.MaxDrainedBatteryLoadPercentShipping)@Html.DisplayNameFor(_ => model.MaxStorageMonths)@Html.DisplayNameFor(_ => model.MaxStorageMonthsBigOrders)@Html.DisplayNameFor(_ => model.QuiescentCurrent_uA)@Html.DisplayNameFor(_ => model.EstimatedProductionBatteryLoadPercent)@Html.DisplayNameFor(_ => model.CreatedBy)@Html.DisplayNameFor(_ => model.Timestamp)@Html.DisplayNameFor(_ => model.ApprovedBy)@Html.DisplayNameFor(_ => model.ApprovedDate)@Html.DisplayNameFor(_ => model.Comment)
@@ -76,23 +75,54 @@ +
+
+
@UITranslations.SpecialRequirements_Title
+ +
+
+ @{ + Html.RenderAction("Filter"); + } +
+
+ @section scripts {