Warehouses #1
@@ -6,7 +6,7 @@ namespace FaKrosnoApi.Controllers;
|
|||||||
|
|
||||||
[ApiController]
|
[ApiController]
|
||||||
[Route("api/[controller]")]
|
[Route("api/[controller]")]
|
||||||
public class WzRowMeyleController(IWzRowMeyleService service) : Controller
|
public class WzRowMeyleController(IWzRowMeyleService service, IMaterialTransactionService materialTransactionService) : Controller
|
||||||
{
|
{
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public async Task<ActionResult<IEnumerable<WzRowMeyleDto>>> GetAll()
|
public async Task<ActionResult<IEnumerable<WzRowMeyleDto>>> GetAll()
|
||||||
@@ -34,6 +34,13 @@ public class WzRowMeyleController(IWzRowMeyleService service) : Controller
|
|||||||
return Ok(wzRows);
|
return Ok(wzRows);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet("by-part-number")]
|
||||||
|
public async Task<ActionResult<MaterialTransactionDto>> GetByPartNumber([FromQuery] string partNumber)
|
||||||
|
{
|
||||||
|
MaterialTransactionDto materialTransaction = await materialTransactionService.GetByPartNumber(partNumber);
|
||||||
|
return Ok(materialTransaction);
|
||||||
|
}
|
||||||
|
|
||||||
[HttpPut]
|
[HttpPut]
|
||||||
public async Task<ActionResult> UpdateRows([FromBody] IEnumerable<WzRowMeyleDto> rows)
|
public async Task<ActionResult> UpdateRows([FromBody] IEnumerable<WzRowMeyleDto> rows)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -207,7 +207,9 @@
|
|||||||
OrderNumber = customerOrder.CustPo,
|
OrderNumber = customerOrder.CustPo,
|
||||||
WzNumber = materialTransactionDto.MTGroupNum ?? string.Empty,
|
WzNumber = materialTransactionDto.MTGroupNum ?? string.Empty,
|
||||||
FK_Header = wzHeader.ID,
|
FK_Header = wzHeader.ID,
|
||||||
TransactionNumber = (int?)materialTransactionDto.TransNum ?? 0
|
TransactionNumber = (int?)materialTransactionDto.TransNum ?? 0,
|
||||||
|
PartNumberSl = materialTransactionDto.NR_KARTY_KONTROLNEJ,
|
||||||
|
FaIndex = item.Item
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@
|
|||||||
AllowSorting="true"
|
AllowSorting="true"
|
||||||
AllowSelection="true"
|
AllowSelection="true"
|
||||||
TValue="WzRowMeyleDto"
|
TValue="WzRowMeyleDto"
|
||||||
DataSource="@_wzRowsMeyle"
|
DataSource="@WzRowsMeyle"
|
||||||
EnableAdaptiveUI="true">
|
EnableAdaptiveUI="true">
|
||||||
<SfToolbar>
|
<SfToolbar>
|
||||||
<ToolbarItems>
|
<ToolbarItems>
|
||||||
@@ -57,16 +57,20 @@
|
|||||||
<GridColumn Field=@nameof(WzRowMeyleDto.OrderNumber) AllowEditing="false"
|
<GridColumn Field=@nameof(WzRowMeyleDto.OrderNumber) AllowEditing="false"
|
||||||
TextAlign="TextAlign.Center" HeaderText="Numer Zamówienia Meyle"
|
TextAlign="TextAlign.Center" HeaderText="Numer Zamówienia Meyle"
|
||||||
Width="70"></GridColumn>
|
Width="70"></GridColumn>
|
||||||
|
<GridColumn Field=@nameof(WzRowMeyleDto.FaIndex) AllowEditing="false"
|
||||||
|
TextAlign="TextAlign.Center" HeaderText="Numer Indeksu FA" Width="100"></GridColumn>
|
||||||
<GridColumn Field=@nameof(WzRowMeyleDto.ItemNumber) AllowEditing="false"
|
<GridColumn Field=@nameof(WzRowMeyleDto.ItemNumber) AllowEditing="false"
|
||||||
TextAlign="TextAlign.Center" HeaderText="Meyle Numer" Width="100"></GridColumn>
|
TextAlign="TextAlign.Center" HeaderText="Numer Indeksu Meyle" Width="100"></GridColumn>
|
||||||
<GridColumn Field=@nameof(WzRowMeyleDto.Quantity) AllowEditing="false" TextAlign="TextAlign.Center"
|
<GridColumn Field=@nameof(WzRowMeyleDto.Quantity) AllowEditing="false" TextAlign="TextAlign.Center"
|
||||||
HeaderText="Ilość w Dostawie" Width="80"></GridColumn>
|
HeaderText="Ilość w Dostawie" Width="80"></GridColumn>
|
||||||
<GridColumn Field=@nameof(WzRowMeyleDto.PalletNumber) AllowEditing="true"
|
<GridColumn Field=@nameof(WzRowMeyleDto.PalletNumber) AllowEditing="true"
|
||||||
TextAlign="TextAlign.Center" HeaderText="Nr Palety" Width="100"></GridColumn>
|
TextAlign="TextAlign.Center" HeaderText="Nr Palety" Width="100"></GridColumn>
|
||||||
<GridColumn Field=@nameof(WzRowMeyleDto.WzNumber) AllowEditing="false" TextAlign="TextAlign.Center"
|
<GridColumn Field=@nameof(WzRowMeyleDto.WzNumber) AllowEditing="false" TextAlign="TextAlign.Center"
|
||||||
HeaderText="Nr WZ" Width="100"></GridColumn>
|
HeaderText="Nr WZ" Width="100"></GridColumn>
|
||||||
|
<GridColumn Field=@nameof(WzRowMeyleDto.PartNumberSl) AllowEditing="true" TextAlign="TextAlign.Center"
|
||||||
|
HeaderText="Nr Partii SL" Width="80"></GridColumn>
|
||||||
<GridColumn Field=@nameof(WzRowMeyleDto.PartNumber) AllowEditing="true" TextAlign="TextAlign.Center"
|
<GridColumn Field=@nameof(WzRowMeyleDto.PartNumber) AllowEditing="true" TextAlign="TextAlign.Center"
|
||||||
HeaderText="Nr Partii" Width="80"></GridColumn>
|
HeaderText="Nr Partii Meyle" Width="80"></GridColumn>
|
||||||
</GridColumns>
|
</GridColumns>
|
||||||
<GridEditSettings AllowDeleting="false"
|
<GridEditSettings AllowDeleting="false"
|
||||||
AllowAdding="false"
|
AllowAdding="false"
|
||||||
@@ -116,10 +120,12 @@
|
|||||||
[Parameter] public Guid WzHeader { get; set; }
|
[Parameter] public Guid WzHeader { get; set; }
|
||||||
|
|
||||||
private SfGrid<WzRowMeyleDto> _grid;
|
private SfGrid<WzRowMeyleDto> _grid;
|
||||||
private IEnumerable<WzRowMeyleDto> _wzRowsMeyle { get; set; } = new List<WzRowMeyleDto>();
|
private List<WzRowMeyleDto> WzRowsMeyle { get; set; } = new List<WzRowMeyleDto>();
|
||||||
private WzHeaderDto _wzHeader;
|
private WzHeaderDto _wzHeader;
|
||||||
private SfTextBox _scanner;
|
private SfTextBox _scanner;
|
||||||
|
|
||||||
|
private WzRowMeyleDto? SelectedRow { get; set; }
|
||||||
|
|
||||||
private bool _isValid;
|
private bool _isValid;
|
||||||
|
|
||||||
private bool Visibility { get; set; }
|
private bool Visibility { get; set; }
|
||||||
@@ -143,11 +149,12 @@
|
|||||||
if (firstRender)
|
if (firstRender)
|
||||||
{
|
{
|
||||||
_wzHeader = await WarehouseService.GetWzHeaderByIdAsync(WzHeader);
|
_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("-", ""),
|
ItemNumber = x.ItemNumber.Replace(" ", "").Replace("-", ""),
|
||||||
|
PartNumberSl = x.PartNumberSl,
|
||||||
TransactionNumber = x.TransactionNumber,
|
TransactionNumber = x.TransactionNumber,
|
||||||
WzNumber = x.WzNumber
|
WzNumber = x.WzNumber
|
||||||
}, null));
|
}, null));
|
||||||
@@ -172,7 +179,7 @@
|
|||||||
|
|
||||||
foreach (KeyValuePair<RowMeyleModel, string?> scannedValueWithNotNullValue in scannedValuesWithNotNullValues)
|
foreach (KeyValuePair<RowMeyleModel, string?> 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.PalletNumber = int.Parse(PalletNumber);
|
||||||
rowMeyleDto.PartNumber = scannedValueWithNotNullValue.Value;
|
rowMeyleDto.PartNumber = scannedValueWithNotNullValue.Value;
|
||||||
@@ -191,7 +198,7 @@
|
|||||||
private async Task OnBatchSave(BeforeBatchSaveArgs<WzRowMeyleDto> obj)
|
private async Task OnBatchSave(BeforeBatchSaveArgs<WzRowMeyleDto> obj)
|
||||||
{
|
{
|
||||||
var changes = obj.BatchChanges;
|
var changes = obj.BatchChanges;
|
||||||
var changedRecords = changes.ChangedRecords;
|
List<WzRowMeyleDto> changedRecords = changes.ChangedRecords;
|
||||||
|
|
||||||
if (!changedRecords.Any()) return;
|
if (!changedRecords.Any()) return;
|
||||||
|
|
||||||
@@ -200,7 +207,7 @@
|
|||||||
|
|
||||||
private async Task ExportXls()
|
private async Task ExportXls()
|
||||||
{
|
{
|
||||||
int count = _wzRowsMeyle.Count(x => x.PalletNumber == null);
|
int count = WzRowsMeyle.Count(x => x.PalletNumber == null);
|
||||||
|
|
||||||
_isValid = count == 0;
|
_isValid = count == 0;
|
||||||
_isValid = _isValid && !string.IsNullOrWhiteSpace(EmailAddresses);
|
_isValid = _isValid && !string.IsNullOrWhiteSpace(EmailAddresses);
|
||||||
@@ -214,32 +221,80 @@
|
|||||||
Visibility = true;
|
Visibility = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ScanValue(ChangedEventArgs obj)
|
private async Task ScanValue(ChangedEventArgs obj)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(obj.Value)) return;
|
if (string.IsNullOrWhiteSpace(obj.Value)) return;
|
||||||
|
|
||||||
ScannedValue = obj.Value.Replace(" ", "").Replace("-", "").Replace("http://qr.meyle.com/", "").Trim();
|
MaterialTransactionDto? materialTransactionByPartNumber = await GetMaterialTransactionByPartNumber(ScannedValue).ConfigureAwait(false);
|
||||||
//ScannedValue = ScannedValue.Replace("40409100006", "1409100076");
|
|
||||||
if (ScannedValuesWithItems.All(x => x.Key.ItemNumber != ScannedValue.Replace(" ", "").Trim()) && ScannedValuesWithItems.Any(x => x.Key.ItemNumber == LastScannedValue.Replace(" ", "").Trim()))
|
if (materialTransactionByPartNumber != null)
|
||||||
{
|
{
|
||||||
RowMeyleModel key = ScannedValuesWithItems.First(x => x.Key.ItemNumber == LastScannedValue).Key;
|
var rowIndex = WzRowsMeyle.FindIndex(x => x.FaIndex == materialTransactionByPartNumber.Item && x.Quantity == materialTransactionByPartNumber.Qty);
|
||||||
ScannedValuesWithItems[key] = ScannedValue.Trim();
|
rowIndex = WzRowsMeyle.FindIndex(x => x.FaIndex == "FA24278.18" && x.Quantity == 70);
|
||||||
ScannedValues += $"{ScannedValue}\n";
|
|
||||||
|
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;
|
LastScannedValue = ScannedValue;
|
||||||
ScannedValue = string.Empty;
|
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<MaterialTransactionDto?> GetMaterialTransactionByPartNumber(string partNumber)
|
||||||
|
{
|
||||||
|
MaterialTransactionDto? materialTransaction = await WarehouseService.GetMaterialTransactionByPartNumberAsync(partNumber).ConfigureAwait(false);
|
||||||
|
|
||||||
|
return materialTransaction;
|
||||||
|
}
|
||||||
|
|
||||||
private async Task UpdateRows(IList<WzRowMeyleDto> changedRecords)
|
private async Task UpdateRows(IList<WzRowMeyleDto> changedRecords)
|
||||||
{
|
{
|
||||||
await WarehouseService.UpdateWzRowsMeyleAsync(changedRecords);
|
await WarehouseService.UpdateWzRowsMeyleAsync(changedRecords);
|
||||||
|
|
||||||
_wzRowsMeyle = await WarehouseService.GetWzRowsByWzHeaderId(WzHeader);
|
WzRowsMeyle = (await WarehouseService.GetWzRowsByWzHeaderId(WzHeader)).ToList();
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
await _grid.Refresh();
|
await _grid.Refresh();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,13 +4,14 @@ public class RowMeyleModel : IEquatable<RowMeyleModel>
|
|||||||
{
|
{
|
||||||
public string ItemNumber {get; set;} = string.Empty;
|
public string ItemNumber {get; set;} = string.Empty;
|
||||||
public string WzNumber { get; set; } = string.Empty;
|
public string WzNumber { get; set; } = string.Empty;
|
||||||
|
public string? PartNumberSl { get; set; }
|
||||||
public int? TransactionNumber { get; set; }
|
public int? TransactionNumber { get; set; }
|
||||||
|
|
||||||
public bool Equals(RowMeyleModel? other)
|
public bool Equals(RowMeyleModel? other)
|
||||||
{
|
{
|
||||||
if (other is null) return false;
|
if (other is null) return false;
|
||||||
if (ReferenceEquals(this, other)) return true;
|
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)
|
public override bool Equals(object? obj)
|
||||||
@@ -23,6 +24,6 @@ public class RowMeyleModel : IEquatable<RowMeyleModel>
|
|||||||
|
|
||||||
public override int GetHashCode()
|
public override int GetHashCode()
|
||||||
{
|
{
|
||||||
return HashCode.Combine(ItemNumber, WzNumber, TransactionNumber);
|
return HashCode.Combine(ItemNumber, WzNumber, PartNumberSl, TransactionNumber);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
using System.Net;
|
||||||
|
using System.Web;
|
||||||
using SytelineSaAppEfDataModel.Dtos;
|
using SytelineSaAppEfDataModel.Dtos;
|
||||||
|
|
||||||
namespace OrdersManagement.Services;
|
namespace OrdersManagement.Services;
|
||||||
@@ -28,6 +30,20 @@ public class WarehouseService(IHttpClientFactory httpClientFactory)
|
|||||||
return await response.Content.ReadFromJsonAsync<IEnumerable<MaterialTransactionDto>>();
|
return await response.Content.ReadFromJsonAsync<IEnumerable<MaterialTransactionDto>>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<MaterialTransactionDto?> 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<MaterialTransactionDto>().ConfigureAwait(false);;
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<IEnumerable<WzHeaderDto>> GetAllClientWzHeadersAsync(string customerNumber, int customerSequence)
|
public async Task<IEnumerable<WzHeaderDto>> GetAllClientWzHeadersAsync(string customerNumber, int customerSequence)
|
||||||
{
|
{
|
||||||
var response = await _httpClient.GetAsync(
|
var response = await _httpClient.GetAsync(
|
||||||
@@ -85,7 +101,7 @@ public class WarehouseService(IHttpClientFactory httpClientFactory)
|
|||||||
return await response.Content.ReadFromJsonAsync<IEnumerable<WzRowMeyleDto>>();
|
return await response.Content.ReadFromJsonAsync<IEnumerable<WzRowMeyleDto>>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task UpdateWzRowsMeyleAsync(IEnumerable<WzRowMeyleDto> wzRowsMeyle)
|
public async Task UpdateWzRowsMeyleAsync(IEnumerable<WzRowMeyleDto?> wzRowsMeyle)
|
||||||
{
|
{
|
||||||
if (wzRowsMeyle == null || !wzRowsMeyle.Any())
|
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(
|
var response = await _httpClient.PostAsJsonAsync(
|
||||||
$"api/WzHeader/add-emails?id={wzHeaderId}",
|
$"api/WzHeader/add-emails?id={wzHeaderId}",
|
||||||
|
|||||||
32
SytelineSaAppEfDataModel/Dtos/LotDto.cs
Normal file
32
SytelineSaAppEfDataModel/Dtos/LotDto.cs
Normal file
@@ -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; }
|
||||||
|
}
|
||||||
@@ -11,4 +11,6 @@ public class WzRowMeyleDto
|
|||||||
public string WzNumber { get; set; }
|
public string WzNumber { get; set; }
|
||||||
public string? PartNumber { get; set; }
|
public string? PartNumber { get; set; }
|
||||||
public int? TransactionNumber { get; set; }
|
public int? TransactionNumber { get; set; }
|
||||||
|
public string? FaIndex { get; set; }
|
||||||
|
public string? PartNumberSl { get; set; }
|
||||||
}
|
}
|
||||||
32
SytelineSaAppEfDataModel/Entities/Lot.cs
Normal file
32
SytelineSaAppEfDataModel/Entities/Lot.cs
Normal file
@@ -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; }
|
||||||
|
}
|
||||||
@@ -11,6 +11,8 @@ public class WzRowMeyle
|
|||||||
public string WzNumber { get; set; }
|
public string WzNumber { get; set; }
|
||||||
public string? PartNumber { get; set; }
|
public string? PartNumber { get; set; }
|
||||||
public int? TransactionNumber { get; set; }
|
public int? TransactionNumber { get; set; }
|
||||||
|
public string? FaIndex { get; set; }
|
||||||
|
public string? PartNumberSl { get; set; }
|
||||||
|
|
||||||
// Navigation property
|
// Navigation property
|
||||||
public WzHeader Header { get; set; }
|
public WzHeader Header { get; set; }
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ namespace SytelineSaAppEfDataModel
|
|||||||
CreateMap<WzHeader, WzHeaderDto>().ReverseMap();
|
CreateMap<WzHeader, WzHeaderDto>().ReverseMap();
|
||||||
CreateMap<WzRowMeyle, WzRowMeyleDto>().ReverseMap();
|
CreateMap<WzRowMeyle, WzRowMeyleDto>().ReverseMap();
|
||||||
CreateMap<ItemCust, ItemCustDto>().ReverseMap();
|
CreateMap<ItemCust, ItemCustDto>().ReverseMap();
|
||||||
|
CreateMap<Lot, LotDto>().ReverseMap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
10
SytelineSaAppEfDataModel/Services/ILotService.cs
Normal file
10
SytelineSaAppEfDataModel/Services/ILotService.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
using SytelineSaAppEfDataModel.Dtos;
|
||||||
|
|
||||||
|
namespace SytelineSaAppEfDataModel.Services;
|
||||||
|
|
||||||
|
public interface ILotService
|
||||||
|
{
|
||||||
|
Task<IEnumerable<LotDto>> GetAll();
|
||||||
|
Task<LotDto?> GetByItemNumber(string itemNumber);
|
||||||
|
Task<LotDto?> GetByLotNumber(string lotNumber);
|
||||||
|
}
|
||||||
@@ -10,4 +10,5 @@ public interface IMaterialTransactionService
|
|||||||
Task<IEnumerable<MaterialTransactionDto>> GetByOrderNumber(string orderNumber);
|
Task<IEnumerable<MaterialTransactionDto>> GetByOrderNumber(string orderNumber);
|
||||||
Task<IEnumerable<MaterialTransactionDto>> GetOrderNumbersByWz(ISet<string> wzNumbers);
|
Task<IEnumerable<MaterialTransactionDto>> GetOrderNumbersByWz(ISet<string> wzNumbers);
|
||||||
Task<IEnumerable<MaterialTransactionDto>> GetByCustomerNumber(string customerNumber, int customerSequence);
|
Task<IEnumerable<MaterialTransactionDto>> GetByCustomerNumber(string customerNumber, int customerSequence);
|
||||||
|
Task<MaterialTransactionDto?> GetByPartNumber(string partNumber);
|
||||||
}
|
}
|
||||||
25
SytelineSaAppEfDataModel/Services/LotService.cs
Normal file
25
SytelineSaAppEfDataModel/Services/LotService.cs
Normal file
@@ -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<IEnumerable<LotDto>> GetAll()
|
||||||
|
{
|
||||||
|
return await context.Lots.Select(x => mapper.Map<LotDto>(x)).ToListAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<LotDto?> GetByItemNumber(string itemNumber)
|
||||||
|
{
|
||||||
|
return await context.Lots.Where(x => x.Item == itemNumber).Select(x => mapper.Map<LotDto>(x))
|
||||||
|
.FirstOrDefaultAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<LotDto?> GetByLotNumber(string lotNumber)
|
||||||
|
{
|
||||||
|
return await context.Lots.Where(x => x.LotNumber == lotNumber).Select(x => mapper.Map<LotDto>(x))
|
||||||
|
.FirstOrDefaultAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -83,4 +83,11 @@ public class MaterialTransactionService(SytelineSaAppDbContext context, IMapper
|
|||||||
|
|
||||||
return result.OrderByDescending(x => x.CreateDate);
|
return result.OrderByDescending(x => x.CreateDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<MaterialTransactionDto?> GetByPartNumber(string partNumber)
|
||||||
|
{
|
||||||
|
return await context.MaterialTransactions
|
||||||
|
.Where(x => x.NR_KARTY_KONTROLNEJ == partNumber)
|
||||||
|
.Select(x => mapper.Map<MaterialTransactionDto>(x)).FirstOrDefaultAsync();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -27,6 +27,8 @@ namespace SytelineSaAppEfDataModel
|
|||||||
public DbSet<WzRowMeyle> WzRowsMeyle { get; set; }
|
public DbSet<WzRowMeyle> WzRowsMeyle { get; set; }
|
||||||
|
|
||||||
public DbSet<ItemCust> ItemCusts { get; set; }
|
public DbSet<ItemCust> ItemCusts { get; set; }
|
||||||
|
|
||||||
|
public DbSet<Lot> Lots { get; set; }
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
{
|
{
|
||||||
var configuration = new ConfigurationBuilder()
|
var configuration = new ConfigurationBuilder()
|
||||||
@@ -1000,7 +1002,17 @@ namespace SytelineSaAppEfDataModel
|
|||||||
.HasColumnName("trans_num")
|
.HasColumnName("trans_num")
|
||||||
.HasColumnType("int")
|
.HasColumnType("int")
|
||||||
.IsRequired(false);
|
.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
|
// Relationship
|
||||||
entity.HasOne(e => e.Header)
|
entity.HasOne(e => e.Header)
|
||||||
.WithMany()
|
.WithMany()
|
||||||
@@ -1150,6 +1162,150 @@ namespace SytelineSaAppEfDataModel
|
|||||||
.HasDatabaseName("IX_itemcust_RowPointer")
|
.HasDatabaseName("IX_itemcust_RowPointer")
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity<Lot>(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();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user