diff --git a/FaKrosnoApi/Controllers/WzRowMeyleController.cs b/FaKrosnoApi/Controllers/WzRowMeyleController.cs index 6ee43f5..97d7305 100644 --- a/FaKrosnoApi/Controllers/WzRowMeyleController.cs +++ b/FaKrosnoApi/Controllers/WzRowMeyleController.cs @@ -6,7 +6,7 @@ namespace FaKrosnoApi.Controllers; [ApiController] [Route("api/[controller]")] -public class WzRowMeyleController(IWzRowMeyleService service) : Controller +public class WzRowMeyleController(IWzRowMeyleService service, IMaterialTransactionService materialTransactionService) : Controller { [HttpGet] public async Task>> GetAll() @@ -34,6 +34,13 @@ public class WzRowMeyleController(IWzRowMeyleService service) : Controller return Ok(wzRows); } + [HttpGet("by-part-number")] + public async Task> GetByPartNumber([FromQuery] string partNumber) + { + MaterialTransactionDto materialTransaction = await materialTransactionService.GetByPartNumber(partNumber); + return Ok(materialTransaction); + } + [HttpPut] public async Task UpdateRows([FromBody] IEnumerable rows) { diff --git a/OrdersManagement/Components/Pages/Warehouse.razor b/OrdersManagement/Components/Pages/Warehouse.razor index d76474c..9ed444e 100644 --- a/OrdersManagement/Components/Pages/Warehouse.razor +++ b/OrdersManagement/Components/Pages/Warehouse.razor @@ -207,7 +207,9 @@ OrderNumber = customerOrder.CustPo, WzNumber = materialTransactionDto.MTGroupNum ?? string.Empty, FK_Header = wzHeader.ID, - TransactionNumber = (int?)materialTransactionDto.TransNum ?? 0 + TransactionNumber = (int?)materialTransactionDto.TransNum ?? 0, + PartNumberSl = materialTransactionDto.NR_KARTY_KONTROLNEJ, + FaIndex = item.Item }); } diff --git a/OrdersManagement/Components/Pages/WarehousePackList.razor b/OrdersManagement/Components/Pages/WarehousePackList.razor index e7465d6..7103e87 100644 --- a/OrdersManagement/Components/Pages/WarehousePackList.razor +++ b/OrdersManagement/Components/Pages/WarehousePackList.razor @@ -41,7 +41,7 @@ AllowSorting="true" AllowSelection="true" TValue="WzRowMeyleDto" - DataSource="@_wzRowsMeyle" + DataSource="@WzRowsMeyle" EnableAdaptiveUI="true"> @@ -57,16 +57,20 @@ + + TextAlign="TextAlign.Center" HeaderText="Numer Indeksu Meyle" Width="100"> + + HeaderText="Nr Partii Meyle" Width="80"> _grid; - private IEnumerable _wzRowsMeyle { get; set; } = new List(); + private List WzRowsMeyle { get; set; } = new List(); private WzHeaderDto _wzHeader; private SfTextBox _scanner; + private WzRowMeyleDto? SelectedRow { get; set; } + private bool _isValid; private bool Visibility { get; set; } @@ -143,11 +149,12 @@ if (firstRender) { _wzHeader = await WarehouseService.GetWzHeaderByIdAsync(WzHeader); - _wzRowsMeyle = await WarehouseService.GetWzRowsByWzHeaderId(WzHeader); + WzRowsMeyle = (await WarehouseService.GetWzRowsByWzHeaderId(WzHeader)).ToList(); - _wzRowsMeyle.ToList().ForEach(x => ScannedValuesWithItems.Add(new RowMeyleModel + WzRowsMeyle.ToList().ForEach(x => ScannedValuesWithItems.Add(new RowMeyleModel { ItemNumber = x.ItemNumber.Replace(" ", "").Replace("-", ""), + PartNumberSl = x.PartNumberSl, TransactionNumber = x.TransactionNumber, WzNumber = x.WzNumber }, null)); @@ -172,7 +179,7 @@ foreach (KeyValuePair scannedValueWithNotNullValue in scannedValuesWithNotNullValues) { - WzRowMeyleDto rowMeyleDto = _wzRowsMeyle.First(r => r.ItemNumber.Replace(" ", "").Replace("-", "").Trim() == scannedValueWithNotNullValue.Key.ItemNumber && r.TransactionNumber == scannedValueWithNotNullValue.Key.TransactionNumber && r.WzNumber == scannedValueWithNotNullValue.Key.WzNumber); + WzRowMeyleDto rowMeyleDto = WzRowsMeyle.First(r => r.ItemNumber.Replace(" ", "").Replace("-", "").Trim() == scannedValueWithNotNullValue.Key.ItemNumber && r.PartNumberSl == scannedValueWithNotNullValue.Key.PartNumberSl && r.WzNumber == scannedValueWithNotNullValue.Key.WzNumber); rowMeyleDto.PalletNumber = int.Parse(PalletNumber); rowMeyleDto.PartNumber = scannedValueWithNotNullValue.Value; @@ -191,7 +198,7 @@ private async Task OnBatchSave(BeforeBatchSaveArgs obj) { var changes = obj.BatchChanges; - var changedRecords = changes.ChangedRecords; + List changedRecords = changes.ChangedRecords; if (!changedRecords.Any()) return; @@ -200,7 +207,7 @@ private async Task ExportXls() { - int count = _wzRowsMeyle.Count(x => x.PalletNumber == null); + int count = WzRowsMeyle.Count(x => x.PalletNumber == null); _isValid = count == 0; _isValid = _isValid && !string.IsNullOrWhiteSpace(EmailAddresses); @@ -214,32 +221,80 @@ Visibility = true; } - private void ScanValue(ChangedEventArgs obj) + private async Task ScanValue(ChangedEventArgs obj) { if (string.IsNullOrWhiteSpace(obj.Value)) return; - ScannedValue = obj.Value.Replace(" ", "").Replace("-", "").Replace("http://qr.meyle.com/", "").Trim(); - //ScannedValue = ScannedValue.Replace("40409100006", "1409100076"); - if (ScannedValuesWithItems.All(x => x.Key.ItemNumber != ScannedValue.Replace(" ", "").Trim()) && ScannedValuesWithItems.Any(x => x.Key.ItemNumber == LastScannedValue.Replace(" ", "").Trim())) + MaterialTransactionDto? materialTransactionByPartNumber = await GetMaterialTransactionByPartNumber(ScannedValue).ConfigureAwait(false); + + if (materialTransactionByPartNumber != null) { - RowMeyleModel key = ScannedValuesWithItems.First(x => x.Key.ItemNumber == LastScannedValue).Key; - ScannedValuesWithItems[key] = ScannedValue.Trim(); - ScannedValues += $"{ScannedValue}\n"; + var rowIndex = WzRowsMeyle.FindIndex(x => x.FaIndex == materialTransactionByPartNumber.Item && x.Quantity == materialTransactionByPartNumber.Qty); + rowIndex = WzRowsMeyle.FindIndex(x => x.FaIndex == "FA24278.18" && x.Quantity == 70); + + if (_grid.AllowPaging) + { + int pageSize = _grid.PageSettings.PageSize; + int targetPage = (rowIndex / pageSize) + 1; + await _grid.GoToPageAsync(targetPage).ConfigureAwait(false); + + rowIndex %= pageSize; + } + + await _grid.SelectRowAsync(rowIndex).ConfigureAwait(false); + await _grid.ScrollIntoViewAsync(rowIndex: rowIndex).ConfigureAwait(false); + await _grid.FocusAsync().ConfigureAwait(false); + + SelectedRow = WzRowsMeyle[rowIndex]; } - else if (!string.IsNullOrWhiteSpace(ScannedValue)) + else if (ValidateScannedValue(obj.Value) && SelectedRow != null) { - ScannedValues += $"{ScannedValue}: "; + SelectedRow.PartNumber = obj.Value.Trim(); + await InvokeAsync(StateHasChanged).ConfigureAwait(false); + await _grid.Refresh().ConfigureAwait(false); } + else + { + ScannedValue = obj.Value.Trim(); + SelectedRow = null; + } + + // if (ScannedValuesWithItems.All(x => x.Key.ItemNumber != ScannedValue.Replace(" ", "").Trim()) && ScannedValuesWithItems.Any(x => x.Key.ItemNumber == LastScannedValue.Replace(" ", "").Trim())) + // { + // RowMeyleModel key = ScannedValuesWithItems.First(x => x.Key.ItemNumber == LastScannedValue).Key; + // ScannedValuesWithItems[key] = ScannedValue.Trim(); + // ScannedValues += $"{ScannedValue}\n"; + // } + // else if (!string.IsNullOrWhiteSpace(ScannedValue)) + // { + // ScannedValues += $"{ScannedValue}: "; + // } LastScannedValue = ScannedValue; ScannedValue = string.Empty; } + private bool ValidateScannedValue(string scannedValue) + { + int year = DateTime.Now.Year - 2000; + + string format = $"{year}X"; + + return scannedValue.StartsWith(format); + } + + private async Task GetMaterialTransactionByPartNumber(string partNumber) + { + MaterialTransactionDto? materialTransaction = await WarehouseService.GetMaterialTransactionByPartNumberAsync(partNumber).ConfigureAwait(false); + + return materialTransaction; + } + private async Task UpdateRows(IList changedRecords) { await WarehouseService.UpdateWzRowsMeyleAsync(changedRecords); - _wzRowsMeyle = await WarehouseService.GetWzRowsByWzHeaderId(WzHeader); + WzRowsMeyle = (await WarehouseService.GetWzRowsByWzHeaderId(WzHeader)).ToList(); StateHasChanged(); await _grid.Refresh(); } diff --git a/OrdersManagement/Models/RowMeyleModel.cs b/OrdersManagement/Models/RowMeyleModel.cs index 365532f..c4ced10 100644 --- a/OrdersManagement/Models/RowMeyleModel.cs +++ b/OrdersManagement/Models/RowMeyleModel.cs @@ -4,13 +4,14 @@ public class RowMeyleModel : IEquatable { public string ItemNumber {get; set;} = string.Empty; public string WzNumber { get; set; } = string.Empty; + public string? PartNumberSl { get; set; } public int? TransactionNumber { get; set; } public bool Equals(RowMeyleModel? other) { if (other is null) return false; if (ReferenceEquals(this, other)) return true; - return ItemNumber == other.ItemNumber && WzNumber == other.WzNumber && TransactionNumber == other.TransactionNumber; + return ItemNumber == other.ItemNumber && WzNumber == other.WzNumber && PartNumberSl == other.PartNumberSl && TransactionNumber == other.TransactionNumber; } public override bool Equals(object? obj) @@ -23,6 +24,6 @@ public class RowMeyleModel : IEquatable public override int GetHashCode() { - return HashCode.Combine(ItemNumber, WzNumber, TransactionNumber); + return HashCode.Combine(ItemNumber, WzNumber, PartNumberSl, TransactionNumber); } } \ No newline at end of file diff --git a/OrdersManagement/Services/WarehouseService.cs b/OrdersManagement/Services/WarehouseService.cs index b74faf5..f9321ae 100644 --- a/OrdersManagement/Services/WarehouseService.cs +++ b/OrdersManagement/Services/WarehouseService.cs @@ -1,3 +1,5 @@ +using System.Net; +using System.Web; using SytelineSaAppEfDataModel.Dtos; namespace OrdersManagement.Services; @@ -28,6 +30,20 @@ public class WarehouseService(IHttpClientFactory httpClientFactory) return await response.Content.ReadFromJsonAsync>(); } + public async Task GetMaterialTransactionByPartNumberAsync(string partNumber) + { + string encodedPartNumber = HttpUtility.UrlEncode(partNumber); + var response = await _httpClient.GetAsync( + $"api/WzRowMeyle/by-part-number?partNumber={encodedPartNumber}").ConfigureAwait(false);; + + if (response.StatusCode == HttpStatusCode.NoContent) + { + return null; + } + + return await response.Content.ReadFromJsonAsync().ConfigureAwait(false);; + } + public async Task> GetAllClientWzHeadersAsync(string customerNumber, int customerSequence) { var response = await _httpClient.GetAsync( @@ -85,7 +101,7 @@ public class WarehouseService(IHttpClientFactory httpClientFactory) return await response.Content.ReadFromJsonAsync>(); } - public async Task UpdateWzRowsMeyleAsync(IEnumerable wzRowsMeyle) + public async Task UpdateWzRowsMeyleAsync(IEnumerable wzRowsMeyle) { if (wzRowsMeyle == null || !wzRowsMeyle.Any()) { @@ -106,7 +122,7 @@ public class WarehouseService(IHttpClientFactory httpClientFactory) } } - public async Task AddEmailsToWzHeaderAsync(Guid wzHeaderId, string emailAddresses) + public async Task AddEmailsToWzHeaderAsync(Guid wzHeaderId, string? emailAddresses) { var response = await _httpClient.PostAsJsonAsync( $"api/WzHeader/add-emails?id={wzHeaderId}", diff --git a/SytelineSaAppEfDataModel/Dtos/LotDto.cs b/SytelineSaAppEfDataModel/Dtos/LotDto.cs new file mode 100644 index 0000000..3008569 --- /dev/null +++ b/SytelineSaAppEfDataModel/Dtos/LotDto.cs @@ -0,0 +1,32 @@ +namespace SytelineSaAppEfDataModel.Dtos; + +public class LotDto +{ + public string Item { get; set; } + public string LotNumber { get; set; } + public decimal? RcvdQty { get; set; } + public DateTime? CreateDate { get; set; } + public DateTime? ExpDate { get; set; } + public DateTime? PurgeDate { get; set; } + public string VendLot { get; set; } + public string CertNum { get; set; } + public string Charfld1 { get; set; } + public string Charfld2 { get; set; } + public string Charfld3 { get; set; } + public DateTime? Datefld { get; set; } + public decimal? Decifld1 { get; set; } + public decimal? Decifld2 { get; set; } + public decimal? Decifld3 { get; set; } + public bool Logifld { get; set; } + public bool NoteExistsFlag { get; set; } + public DateTime RecordDate { get; set; } + public Guid RowPointer { get; set; } + public string CreatedBy { get; set; } + public string UpdatedBy { get; set; } + public DateTime CreateDateField { get; set; } + public bool InWorkflow { get; set; } + public bool ContainsTaxFreeMatl { get; set; } + public string AttrGroup { get; set; } + public string ManufacturerId { get; set; } + public string ManufacturerItem { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Dtos/WzRowMeyleDto.cs b/SytelineSaAppEfDataModel/Dtos/WzRowMeyleDto.cs index 53e6f47..8a16c6c 100644 --- a/SytelineSaAppEfDataModel/Dtos/WzRowMeyleDto.cs +++ b/SytelineSaAppEfDataModel/Dtos/WzRowMeyleDto.cs @@ -11,4 +11,6 @@ public class WzRowMeyleDto public string WzNumber { get; set; } public string? PartNumber { get; set; } public int? TransactionNumber { get; set; } + public string? FaIndex { get; set; } + public string? PartNumberSl { get; set; } } \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Entities/Lot.cs b/SytelineSaAppEfDataModel/Entities/Lot.cs new file mode 100644 index 0000000..6f5f0b4 --- /dev/null +++ b/SytelineSaAppEfDataModel/Entities/Lot.cs @@ -0,0 +1,32 @@ +namespace SytelineSaAppEfDataModel.Entities; + +public class Lot +{ + public string Item { get; set; } + public string LotNumber { get; set; } + public decimal? RcvdQty { get; set; } + public DateTime? CreateDate { get; set; } + public DateTime? ExpDate { get; set; } + public DateTime? PurgeDate { get; set; } + public string VendLot { get; set; } + public string CertNum { get; set; } + public string Charfld1 { get; set; } + public string Charfld2 { get; set; } + public string Charfld3 { get; set; } + public DateTime? Datefld { get; set; } + public decimal? Decifld1 { get; set; } + public decimal? Decifld2 { get; set; } + public decimal? Decifld3 { get; set; } + public bool Logifld { get; set; } + public bool NoteExistsFlag { get; set; } + public DateTime RecordDate { get; set; } + public Guid RowPointer { get; set; } + public string CreatedBy { get; set; } + public string UpdatedBy { get; set; } + public DateTime CreateDateField { get; set; } + public bool InWorkflow { get; set; } + public bool ContainsTaxFreeMatl { get; set; } + public string AttrGroup { get; set; } + public string ManufacturerId { get; set; } + public string ManufacturerItem { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Entities/WzRowMeyle.cs b/SytelineSaAppEfDataModel/Entities/WzRowMeyle.cs index 679a4f2..445f8d7 100644 --- a/SytelineSaAppEfDataModel/Entities/WzRowMeyle.cs +++ b/SytelineSaAppEfDataModel/Entities/WzRowMeyle.cs @@ -11,6 +11,8 @@ public class WzRowMeyle public string WzNumber { get; set; } public string? PartNumber { get; set; } public int? TransactionNumber { get; set; } + public string? FaIndex { get; set; } + public string? PartNumberSl { get; set; } // Navigation property public WzHeader Header { get; set; } diff --git a/SytelineSaAppEfDataModel/MappingProfile.cs b/SytelineSaAppEfDataModel/MappingProfile.cs index 3c86434..23eabcd 100644 --- a/SytelineSaAppEfDataModel/MappingProfile.cs +++ b/SytelineSaAppEfDataModel/MappingProfile.cs @@ -24,6 +24,7 @@ namespace SytelineSaAppEfDataModel CreateMap().ReverseMap(); CreateMap().ReverseMap(); CreateMap().ReverseMap(); + CreateMap().ReverseMap(); } } } diff --git a/SytelineSaAppEfDataModel/Services/ILotService.cs b/SytelineSaAppEfDataModel/Services/ILotService.cs new file mode 100644 index 0000000..ceb6519 --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/ILotService.cs @@ -0,0 +1,10 @@ +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public interface ILotService +{ + Task> GetAll(); + Task GetByItemNumber(string itemNumber); + Task GetByLotNumber(string lotNumber); +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/IMaterialTransactionService.cs b/SytelineSaAppEfDataModel/Services/IMaterialTransactionService.cs index 78535cb..ccae08a 100644 --- a/SytelineSaAppEfDataModel/Services/IMaterialTransactionService.cs +++ b/SytelineSaAppEfDataModel/Services/IMaterialTransactionService.cs @@ -10,4 +10,5 @@ public interface IMaterialTransactionService Task> GetByOrderNumber(string orderNumber); Task> GetOrderNumbersByWz(ISet wzNumbers); Task> GetByCustomerNumber(string customerNumber, int customerSequence); + Task GetByPartNumber(string partNumber); } \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/LotService.cs b/SytelineSaAppEfDataModel/Services/LotService.cs new file mode 100644 index 0000000..1d217a0 --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/LotService.cs @@ -0,0 +1,25 @@ +using AutoMapper; +using Microsoft.EntityFrameworkCore; +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public class LotService(SytelineSaAppDbContext context, IMapper mapper) : ILotService +{ + public async Task> GetAll() + { + return await context.Lots.Select(x => mapper.Map(x)).ToListAsync(); + } + + public async Task GetByItemNumber(string itemNumber) + { + return await context.Lots.Where(x => x.Item == itemNumber).Select(x => mapper.Map(x)) + .FirstOrDefaultAsync(); + } + + public async Task GetByLotNumber(string lotNumber) + { + return await context.Lots.Where(x => x.LotNumber == lotNumber).Select(x => mapper.Map(x)) + .FirstOrDefaultAsync(); + } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/MaterialTransactionService.cs b/SytelineSaAppEfDataModel/Services/MaterialTransactionService.cs index 4cdff57..46e5ffb 100644 --- a/SytelineSaAppEfDataModel/Services/MaterialTransactionService.cs +++ b/SytelineSaAppEfDataModel/Services/MaterialTransactionService.cs @@ -83,4 +83,11 @@ public class MaterialTransactionService(SytelineSaAppDbContext context, IMapper return result.OrderByDescending(x => x.CreateDate); } + + public async Task GetByPartNumber(string partNumber) + { + return await context.MaterialTransactions + .Where(x => x.NR_KARTY_KONTROLNEJ == partNumber) + .Select(x => mapper.Map(x)).FirstOrDefaultAsync(); + } } \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/SytelineSaAppDbContext.cs b/SytelineSaAppEfDataModel/SytelineSaAppDbContext.cs index 4397d3a..2921637 100644 --- a/SytelineSaAppEfDataModel/SytelineSaAppDbContext.cs +++ b/SytelineSaAppEfDataModel/SytelineSaAppDbContext.cs @@ -27,6 +27,8 @@ namespace SytelineSaAppEfDataModel public DbSet WzRowsMeyle { get; set; } public DbSet ItemCusts { get; set; } + + public DbSet Lots { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { var configuration = new ConfigurationBuilder() @@ -1000,7 +1002,17 @@ namespace SytelineSaAppEfDataModel .HasColumnName("trans_num") .HasColumnType("int") .IsRequired(false); + + entity.Property(e => e.FaIndex) + .HasColumnName("fa_index") + .HasMaxLength(100) + .IsRequired(false); + entity.Property(e => e.PartNumberSl) + .HasColumnName("part_number_sl") + .HasMaxLength(100) + .IsRequired(false); + // Relationship entity.HasOne(e => e.Header) .WithMany() @@ -1150,6 +1162,150 @@ namespace SytelineSaAppEfDataModel .HasDatabaseName("IX_itemcust_RowPointer") .IsUnique(); }); + + modelBuilder.Entity(entity => + { + entity.ToTable("lot"); + + entity.HasKey(e => new { e.Item, e.LotNumber }); + + entity.Property(e => e.Item) + .HasColumnName("item") + .HasMaxLength(60) + .IsRequired(); + + entity.Property(e => e.LotNumber) + .HasColumnName("lot") + .HasMaxLength(15) + .IsRequired(); + + entity.Property(e => e.RcvdQty) + .HasColumnName("rcvd_qty") + .HasDefaultValueSql("0") + .IsRequired(false); + + entity.Property(e => e.CreateDate) + .HasColumnName("create_date") + .IsRequired(false); + + entity.Property(e => e.ExpDate) + .HasColumnName("exp_date") + .IsRequired(false); + + entity.Property(e => e.PurgeDate) + .HasColumnName("purge_date") + .IsRequired(false); + + entity.Property(e => e.VendLot) + .HasColumnName("vend_lot") + .HasMaxLength(30) + .IsRequired(false); + + entity.Property(e => e.CertNum) + .HasColumnName("cert_num") + .HasMaxLength(20) + .IsRequired(false); + + entity.Property(e => e.Charfld1) + .HasColumnName("charfld1") + .HasMaxLength(40) + .IsRequired(false); + + entity.Property(e => e.Charfld2) + .HasColumnName("charfld2") + .HasMaxLength(40) + .IsRequired(false); + + entity.Property(e => e.Charfld3) + .HasColumnName("charfld3") + .HasMaxLength(40) + .IsRequired(false); + + entity.Property(e => e.Datefld) + .HasColumnName("datefld") + .IsRequired(false); + + entity.Property(e => e.Decifld1) + .HasColumnName("decifld1") + .HasDefaultValueSql("0") + .IsRequired(false); + + entity.Property(e => e.Decifld2) + .HasColumnName("decifld2") + .HasDefaultValueSql("0") + .IsRequired(false); + + entity.Property(e => e.Decifld3) + .HasColumnName("decifld3") + .HasDefaultValueSql("0") + .IsRequired(false); + + entity.Property(e => e.Logifld) + .HasColumnName("logifld") + .HasColumnType("tinyint") + .HasDefaultValueSql("0"); + + entity.Property(e => e.NoteExistsFlag) + .HasColumnName("NoteExistsFlag") + .HasColumnType("tinyint") + .HasDefaultValueSql("0"); + + entity.Property(e => e.RecordDate) + .HasColumnName("RecordDate") + .HasDefaultValueSql("getdate()"); + + entity.Property(e => e.RowPointer) + .HasColumnName("RowPointer") + .HasColumnType("uniqueidentifier") + .HasDefaultValueSql("newid()"); + + entity.Property(e => e.CreatedBy) + .HasColumnName("CreatedBy") + .HasMaxLength(60) + .HasDefaultValueSql("suser_sname()"); + + entity.Property(e => e.UpdatedBy) + .HasColumnName("UpdatedBy") + .HasMaxLength(60) + .HasDefaultValueSql("suser_sname()"); + + entity.Property(e => e.CreateDateField) + .HasColumnName("CreateDate") + .HasDefaultValueSql("getdate()"); + + entity.Property(e => e.InWorkflow) + .HasColumnName("InWorkflow") + .HasColumnType("tinyint") + .HasDefaultValueSql("0"); + + entity.Property(e => e.ContainsTaxFreeMatl) + .HasColumnName("contains_tax_free_matl") + .HasColumnType("tinyint") + .HasDefaultValueSql("0"); + + entity.Property(e => e.AttrGroup) + .HasColumnName("attr_group") + .HasMaxLength(20) + .IsRequired(false); + + entity.Property(e => e.ManufacturerId) + .HasColumnName("manufacturer_id") + .HasMaxLength(14) + .IsRequired(false); + + entity.Property(e => e.ManufacturerItem) + .HasColumnName("manufacturer_item") + .HasMaxLength(60) + .IsRequired(false); + + // Indexes + entity.HasIndex(e => e.LotNumber) + .HasDatabaseName("IX_lot"); + + entity.HasIndex(e => e.RowPointer) + .HasDatabaseName("IX_lot_RowPointer") + .IsUnique(); + }); } } }