Initial commit: JDE Scoping Tool migration project
Set up repository with legacy .NET Framework 4.8 source (OLD/), new .NET 10 Blazor solution (NEW/), OpenSpec specifications, documentation, and project configuration.
This commit is contained in:
Executable
+18
@@ -0,0 +1,18 @@
|
||||
namespace DataModel.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// View model for item
|
||||
/// </summary>
|
||||
public class ItemViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Item unique number
|
||||
/// </summary>
|
||||
public string ItemNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Item description
|
||||
/// </summary>
|
||||
public string Description { get; set; }
|
||||
}
|
||||
}
|
||||
Executable
+23
@@ -0,0 +1,23 @@
|
||||
namespace DataModel.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// View model for JDE user
|
||||
/// </summary>
|
||||
public class JdeUserViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// User unique address number
|
||||
/// </summary>
|
||||
public long AddressNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// User unique ID
|
||||
/// </summary>
|
||||
public string UserID { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// User's full name (last, first [middle initial])
|
||||
/// </summary>
|
||||
public string FullName { get; set; }
|
||||
}
|
||||
}
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
namespace DataModel.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// View model for lot
|
||||
/// </summary>
|
||||
public class LotViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Lot unique number
|
||||
/// </summary>
|
||||
public string LotNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Item number
|
||||
/// </summary>
|
||||
public string ItemNumber { get; set; }
|
||||
}
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
namespace DataModel.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// Model for part (item number) / operation (job step number) / MIS combination
|
||||
/// </summary>
|
||||
public class PartOperationViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Part's item number
|
||||
/// </summary>
|
||||
public string ItemNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Operation's job step number
|
||||
/// </summary>
|
||||
public string OperationNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// MIS number
|
||||
/// </summary>
|
||||
public string MisNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// MIS revision
|
||||
/// </summary>
|
||||
public string MisRevision { get; set; }
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
namespace DataModel.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// View model for profit center
|
||||
/// </summary>
|
||||
public class ProfitCenterViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Profit center unique code
|
||||
/// </summary>
|
||||
public string Code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Profit center description
|
||||
/// </summary>
|
||||
public string Description { get; set; }
|
||||
}
|
||||
}
|
||||
+171
@@ -0,0 +1,171 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using DataModel.Helpers;
|
||||
using DataModel.Models;
|
||||
using DataModel.Process;
|
||||
|
||||
namespace DataModel.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// View model for search criteria
|
||||
/// </summary>
|
||||
public class SearchCriteriaViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Minimum timestamp to include in filter
|
||||
/// </summary>
|
||||
public DateTime? MinimumDT { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Maxmimum timestamp to include in filter
|
||||
/// </summary>
|
||||
public DateTime? MaximumDT { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Collection of workorders to include in filter
|
||||
/// </summary>
|
||||
public List<WorkOrderViewModel> WorkOrders { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Collection of items to include in filter
|
||||
/// </summary>
|
||||
public List<ItemViewModel> Items { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Collection of profit centers to include in filter
|
||||
/// </summary>
|
||||
public List<ProfitCenterViewModel> ProfitCenters { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Collection of work centers to include in filter
|
||||
/// </summary>
|
||||
public List<WorkCenterViewModel> WorkCenters { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Collection component lots to include in filter
|
||||
/// </summary>
|
||||
public List<LotViewModel> ComponentLots { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Collection of operators to include in filter
|
||||
/// </summary>
|
||||
public List<JdeUserViewModel> Operators { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Whether or not to extract MIS data
|
||||
/// </summary>
|
||||
public bool ExtractMisData { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Collection of part/operation combinations to get MIS data for
|
||||
/// </summary>
|
||||
public List<PartOperationViewModel> PartOperations { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Constructor
|
||||
/// </summary>
|
||||
public SearchCriteriaViewModel()
|
||||
{
|
||||
WorkOrders = new List<WorkOrderViewModel>();
|
||||
Items = new List<ItemViewModel>();
|
||||
ProfitCenters = new List<ProfitCenterViewModel>();
|
||||
WorkCenters = new List<WorkCenterViewModel>();
|
||||
ComponentLots = new List<LotViewModel>();
|
||||
Operators = new List<JdeUserViewModel>();
|
||||
PartOperations=new List<PartOperationViewModel>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Constructor
|
||||
/// </summary>
|
||||
/// <param name="criteria">Search criteria to explode</param>
|
||||
public SearchCriteriaViewModel(SearchCriteria criteria) : this()
|
||||
{
|
||||
if (criteria == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
MinimumDT = criteria.MinimumDT;
|
||||
MaximumDT = criteria.MaximumDT;
|
||||
ExtractMisData = criteria.ExtractMisData;
|
||||
|
||||
//Load work orders
|
||||
if (criteria.WorkOrderNumbers != null && criteria.WorkOrderNumbers.Any())
|
||||
{
|
||||
WorkOrders.AddRange(LotFinderDB.LookupWorkorders(criteria.WorkOrderNumbers)
|
||||
.OrderBy(wo => wo.WorkOrderNumber)
|
||||
.Select(wo => wo.ToViewModel()));
|
||||
}
|
||||
|
||||
//Load items
|
||||
if (criteria.ItemNumbers != null && criteria.ItemNumbers.Any())
|
||||
{
|
||||
Items.AddRange(LotFinderDB.LookupItems(criteria.ItemNumbers)
|
||||
.OrderBy(wo => wo.ItemNumber)
|
||||
.Select(wo => wo.ToViewModel()));
|
||||
}
|
||||
|
||||
//Load profit centers
|
||||
if (criteria.ProfitCenters != null && criteria.ProfitCenters.Any())
|
||||
{
|
||||
ProfitCenters.AddRange(LotFinderDB.LookupProfitCenters(criteria.ProfitCenters)
|
||||
.OrderBy(wo => wo.Code)
|
||||
.Select(wo => wo.ToViewModel()));
|
||||
}
|
||||
|
||||
//Load work centers
|
||||
if (criteria.WorkCenters != null && criteria.WorkCenters.Any())
|
||||
{
|
||||
WorkCenters.AddRange(LotFinderDB.LookupWorkCenters(criteria.WorkCenters)
|
||||
.OrderBy(wo => wo.Code)
|
||||
.Select(wo => wo.ToViewModel()));
|
||||
}
|
||||
|
||||
//Load component lots
|
||||
if (criteria.ComponentLotNumbers != null && criteria.ComponentLotNumbers.Any())
|
||||
{
|
||||
ComponentLots.AddRange(LotFinderDB.LookupLots(criteria.ComponentLotNumbers)
|
||||
.Select(l => l.ToViewModel())
|
||||
.DistinctBy(l => new { l.LotNumber, l.ItemNumber })
|
||||
.OrderBy(wo => wo.LotNumber));
|
||||
}
|
||||
|
||||
//Load operators
|
||||
if (criteria.OperatorIDs != null && criteria.OperatorIDs.Any())
|
||||
{
|
||||
Operators.AddRange(LotFinderDB.LookupUsers(criteria.OperatorIDs)
|
||||
.OrderBy(wo => wo.UserID)
|
||||
.Select(wo => wo.ToViewModel()));
|
||||
}
|
||||
|
||||
//Load part operations
|
||||
if (criteria.PartOperations != null && criteria.PartOperations.Any())
|
||||
{
|
||||
PartOperations.AddRange(criteria.PartOperations);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts the view model into standard model
|
||||
/// </summary>
|
||||
/// <returns>Compressed search criteria model</returns>
|
||||
public SearchCriteria ToModel()
|
||||
{
|
||||
return new SearchCriteria()
|
||||
{
|
||||
MinimumDT = MinimumDT,
|
||||
MaximumDT = MaximumDT,
|
||||
ExtractMisData = ExtractMisData,
|
||||
WorkOrderNumbers = WorkOrders.Select(wo => wo.WorkOrderNumber).ToList(),
|
||||
ItemNumbers = Items.Select(i => i.ItemNumber).ToList(),
|
||||
ProfitCenters = ProfitCenters.Select(pc => pc.Code).ToList(),
|
||||
WorkCenters = WorkCenters.Select(wc => wc.Code).ToList(),
|
||||
ComponentLotNumbers = ComponentLots,
|
||||
OperatorIDs = Operators.Select(o => o.AddressNumber.ToString()).ToList(),
|
||||
PartOperations = PartOperations
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Executable
+102
@@ -0,0 +1,102 @@
|
||||
using System;
|
||||
using DataModel.Models;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
|
||||
namespace DataModel.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// View model for search
|
||||
/// </summary>
|
||||
public class SearchViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// PK ID of search
|
||||
/// </summary>
|
||||
public int ID { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// User name of user that created search
|
||||
/// </summary>
|
||||
public string UserName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// User-friendly name for search
|
||||
/// </summary>
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Current search status
|
||||
/// </summary>
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public SearchStatus Status { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Timestamp search was submitted
|
||||
/// </summary>
|
||||
public DateTime? SubmitDT { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Timestamp search was started
|
||||
/// </summary>
|
||||
public DateTime? StartDT { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Timestamp search was completed
|
||||
/// </summary>
|
||||
public DateTime? EndDT { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Search critera
|
||||
/// </summary>
|
||||
public SearchCriteriaViewModel Criteria { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Constructor
|
||||
/// </summary>
|
||||
public SearchViewModel()
|
||||
{
|
||||
Criteria = new SearchCriteriaViewModel();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Constructor
|
||||
/// </summary>
|
||||
/// <param name="search">Search specifications to copy</param>
|
||||
public SearchViewModel(Search search) : this()
|
||||
{
|
||||
if (search == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ID = search.ID;
|
||||
UserName = search.UserName;
|
||||
Name = search.Name;
|
||||
Status = search.Status;
|
||||
SubmitDT = search.SubmitDT;
|
||||
StartDT = search.StartDT;
|
||||
EndDT = search.EndDT;
|
||||
Criteria = new SearchCriteriaViewModel(search.Criteria);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts the view model into standard model
|
||||
/// </summary>
|
||||
/// <returns>Compressed search model</returns>
|
||||
public Search ToModel()
|
||||
{
|
||||
return new Search()
|
||||
{
|
||||
ID = ID,
|
||||
UserName = UserName,
|
||||
Name = Name,
|
||||
Status = Status,
|
||||
Criteria = Criteria.ToModel(),
|
||||
SubmitDT = SubmitDT,
|
||||
StartDT = StartDT,
|
||||
EndDT = EndDT
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
namespace DataModel.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// View model for work center
|
||||
/// </summary>
|
||||
public class WorkCenterViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Work center unique code
|
||||
/// </summary>
|
||||
public string Code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Work center description
|
||||
/// </summary>
|
||||
public string Description { get; set; }
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
namespace DataModel.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// View model for work order
|
||||
/// </summary>
|
||||
public class WorkOrderViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Work order unique number
|
||||
/// </summary>
|
||||
public long WorkOrderNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Work order item number
|
||||
/// </summary>
|
||||
public string ItemNumber { get; set; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user