diff --git a/.gitea/workflows/build-and-publish.yml b/.gitea/workflows/build-and-publish.yml new file mode 100644 index 0000000..0ebad99 --- /dev/null +++ b/.gitea/workflows/build-and-publish.yml @@ -0,0 +1,192 @@ +name: Build, Test & Publish DataModels + Apps + +on: + push: + branches: + - master + create: # nowe tagi + tags: + - 'v*' + pull_request: + types: [opened, synchronize, reopened, closed] + workflow_dispatch: # ręczne uruchomienie + +jobs: + restore-and-test: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 # potrzebne do MinVer i git describe + repository: FA/FA_WEB # ← nazwa repozytorium (organizacja/repo) + ref: ${{ github.ref }} # lub ${{ gitea.ref }} – w Gitea obie działają + # Najważniejsze – nadpisz domyślny URL + url: http://srv51.mikr.us:20120/git/FA/FA_WEB.git + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' # zmień na swoją wersję jeśli inna + + - name: Restore all projects + run: | + echo "=== Restore wszystkich projektów ===" + find . -name "*.csproj" -type f -exec dotnet restore "{}" \; + + - name: Run tests + run: | + echo "=== Uruchamianie testów ===" + dotnet test --no-restore --configuration Release --logger "trx" + + pack-datamodels: + runs-on: ubuntu-latest + needs: restore-and-test + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' + + - name: Install MinVer CLI + run: dotnet tool install --global minver-cli + + - name: Pack DataModel projects + env: + MINVER_AUTO_INCREMENT: patch + MINVER_MINIMUM_MAJOR_MINOR: 2.0 + MINVER_DEFAULT_PRE_RELEASE_IDENTIFIERS: alpha.0 + run: | + echo "=== Obliczona wersja przez MinVer ===" + MINVER_VERSION=$(minver --verbosity detailed) + echo "Wersja: $MINVER_VERSION" + + mkdir -p nupkg + + echo "=== Pełniejsze fetch git (tags) ===" + git fetch --prune --tags --force + + echo "=== Dostępne tagi ===" + git tag -l + + echo "=== Aktualny opis commitu ===" + git describe --tags --always --dirty || echo "Brak tagów" + + echo "=== Pakowanie projektów z PackageId ===" + find . -name "*.csproj" -type f | while read -r csproj; do + if grep -q '' "$csproj"; then + PROJECT_NAME=$(basename "$csproj" .csproj) + echo "→ Pakuję $PROJECT_NAME" + dotnet pack "$csproj" \ + --no-restore \ + --configuration Release \ + -o "./nupkg" \ + /p:PackageVersion="$MINVER_VERSION" + else + echo "→ Pomijam $(basename "$csproj" .csproj) – brak PackageId" + fi + done + + ls -la nupkg/ || echo "Brak wygenerowanych pakietów" + + - name: Upload NuGet packages as artifact + uses: actions/upload-artifact@v4 + with: + name: nuget-packages + path: nupkg/*.nupkg + retention-days: 3 + + publish-to-baget: + runs-on: ubuntu-latest + needs: pack-datamodels + steps: + - uses: actions/checkout@v4 # potrzebne tylko jeśli chcesz logować coś z repo + + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' + + - name: Download built packages + uses: actions/download-artifact@v4 + with: + name: nuget-packages + path: nupkg/ + + - name: Create custom NuGet.config (allow HTTP) + run: | + cat > NuGet.Config < + + + + + + + + EOF + + - name: Publish packages to BaGet + env: + BAGET_API_KEY: ${{ secrets.BAGET_API_KEY }} + run: | + echo "=== Publikacja do BaGet ===" + find nupkg -name "*.nupkg" -type f | while read -r pkg; do + echo "→ Push $(basename "$pkg")" + dotnet nuget push "$pkg" \ + --source "BaGet" \ + --api-key "$BAGET_API_KEY" \ + --skip-duplicate + done + + build-and-publish-apps: + runs-on: ubuntu-latest + needs: publish-to-baget + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' + + - name: Restore (with latest DataModels) + run: | + echo "=== Restore z najnowszymi pakietami z BaGet ===" + dotnet restore + + - name: Publish selected applications + run: | + echo "=== Publish aplikacji z DeployToCentral ===" + find . -name "*.csproj" -type f | while read -r csproj; do + PROJECT_NAME=$(basename "$csproj" .csproj) + PROJECT_DIR=$(dirname "$csproj") + + if [[ "$PROJECT_NAME" == *"Api"* ]] || [[ "$PROJECT_NAME" == *"Blazor"* ]] || \ + [[ "$PROJECT_DIR" == *"/Api/"* ]] || [[ "$PROJECT_DIR" == *"/Blazor/"* ]]; then + + DEPLOY_TO_CENTRAL=$(dotnet msbuild "$csproj" -getProperty:DeployToCentral -nologo 2>/dev/null || echo "false") + + if [ "$DEPLOY_TO_CENTRAL" != "true" ]; then + echo "Pomijam $PROJECT_NAME (DeployToCentral ≠ true)" + continue + fi + + echo "→ Publishing $PROJECT_NAME" + dotnet publish "$csproj" \ + --no-restore \ + --configuration Release \ + -o "./publish-$PROJECT_NAME" + + # Tutaj możesz dodać deployment (np. rsync, scp, docker build+push itp.) + # Przykład (zakomentowany): + # rsync -avz --delete ./publish-$PROJECT_NAME/ user@server:/path/to/app/ + else + echo "Pomijam $PROJECT_NAME (nie Api/Blazor)" + fi + done + + echo "Pipeline zakończony" diff --git a/.woodpecker.yml b/.woodpecker.yml new file mode 100644 index 0000000..3ba5af3 --- /dev/null +++ b/.woodpecker.yml @@ -0,0 +1,162 @@ +skip_clone: true + +when: + event: [push, tag, manual] + branch: [master] + +steps: + clone-manual: + image: woodpeckerci/plugin-git + settings: + remote: http://gitea:3000/FA/FA_WEB.git + branch: master + depth: 1 + + restore: + image: mcr.microsoft.com/dotnet/sdk:latest + commands: + - | + set -euf + CODE_DIR="/woodpecker/src/localhost/git/FA/FA_WEB" + cd "$CODE_DIR" + echo "=== Restore wszystkich projektów ===" + find . -name "*.csproj" -type f -exec dotnet restore "{}" \; + + test: + image: mcr.microsoft.com/dotnet/sdk:latest + commands: + - | + set -euf + CODE_DIR="/woodpecker/src/localhost/git/FA/FA_WEB" + cd "$CODE_DIR" + echo "=== Uruchamianie testów ===" + dotnet test --no-restore --configuration Release --logger "trx" + depends_on: [restore] + + pack-datamodels: + image: mcr.microsoft.com/dotnet/sdk:latest + commands: + - | + set -euf + echo "=== Instalacja MinVer CLI ===" + dotnet tool install --tool-path /tmp/minver minver-cli + CODE_DIR="/woodpecker/src/localhost/git/FA/FA_WEB" + cd "$CODE_DIR" + + echo "=== Obliczona wersja przez MinVer ===" + MINVER_VERSION=$(/tmp/minver/minver \ + --auto-increment patch \ + --minimum-major-minor 2.0 \ + --default-pre-release-identifiers alpha.0 \ + --verbosity info) + + echo "Wersja: $MINVER_VERSION" + + mkdir -p nupkg + + echo "=== Pełniejsze fetch git (unshallow + tags) ===" + git fetch --prune --unshallow || echo "Już full clone – OK" + git fetch --tags + + # Diagnostyka – sprawdź czy tag jest widoczny + echo "=== Dostępne tagi ===" + git tag -l + echo "=== Aktualny commit i opis ===" + git describe --tags --always --dirty + + echo "=== Diagnostyka projektów ===" + find . -name "*.csproj" -type f | sort + mkdir -p nupkg + echo "=== Pakowanie projektów DataModel (wykrywane po obecności ) ===" + find . -name "*.csproj" -type f | while read csproj; do + if grep -q '' "$csproj"; then + PROJECT_NAME=$(basename "$csproj" .csproj) + echo "→ Pakuję $PROJECT_NAME ($csproj)" + #dotnet pack "$csproj" --configuration Release -o "$CODE_DIR/nupkg" /p:PackageVersion=$MINVER_VERSION + dotnet pack "$csproj" \ + --configuration Release \ + -o "./nupkg" \ + /p:PackageVersion=$MINVER_VERSION + else + PROJECT_NAME=$(basename "$csproj" .csproj) + echo "→ Pomijam $PROJECT_NAME – brak (nie jest to biblioteka NuGet)" + fi + done + echo "=== Spakowane pakiety (.nupkg) ===" + ls -la nupkg/ || echo "Brak spakowanych pakietów!" + depends_on: [test] + + publish-datamodels-to-baget: + image: mcr.microsoft.com/dotnet/sdk:latest + environment: + BAGETTER_API_KEY: + from_secret: baget_api_key + commands: + - | + set -euf + CODE_DIR="/woodpecker/src/localhost/git/FA/FA_WEB" + cd "$CODE_DIR" + + echo "=== Test połączenia z BaGetter ===" + curl -f http://baget:80/v3/index.json || echo "Nie można połączyć się z BaGetter!" + + # Tworzymy minimalny NuGet.Config tylko po to, żeby odblokować HTTP dla nazwanego źródła + cat < NuGet.Config + + + + + + + + + EOF + + echo "=== Użyty NuGet.Config (tylko do odblokowania HTTP) ===" + cat NuGet.Config + + echo "=== Publikacja pakietów do BaGetter ===" + find ./nupkg -name "*.nupkg" -type f | while read pkg; do + echo "→ Push $(basename "$pkg")" + dotnet nuget push "$pkg" \ + --source "BaGet" \ + --api-key "$BAGETTER_API_KEY" \ + --skip-duplicate + done + + echo "Wszystkie pakiety DataModel opublikowane w BaGetter!" + depends_on: [pack-datamodels] + + build-and-publish-apps: + image: mcr.microsoft.com/dotnet/sdk:latest + # environment: + # DEPLOY_SSH_KEY: + # from_secret: deploy_ssh_key + commands: + - | + set -euf + CODE_DIR="/woodpecker/src/localhost/git/FA/FA_WEB" + cd "$CODE_DIR" + echo "=== Ponowny restore aplikacji (z najnowszymi pakietami z BaGetter) ===" + find . -name "*.csproj" -type f -exec dotnet restore "{}" \; + echo "=== Publish aplikacji ===" + find . -name "*.csproj" -type f | while read csproj; do + PROJECT_NAME=$(basename "$csproj" .csproj) + PROJECT_DIR=$(dirname "$csproj") + if [[ "$PROJECT_NAME" == *"Api"* ]] || [[ "$PROJECT_NAME" == *"Blazor"* ]] || [[ "$PROJECT_DIR" == *"/Api/"* ]] || [[ "$PROJECT_DIR" == *"/Blazor/"* ]]; then + DEPLOY_TO_CENTRAL=$(dotnet msbuild "$csproj" -getProperty:DeployToCentral -noLogo 2>/dev/null || echo "false") + if [ "$DEPLOY_TO_CENTRAL" != "true" ]; then + echo "Pomijam $PROJECT_NAME (DeployToCentral ≠ true)" + continue + fi + echo "→ Publish $PROJECT_NAME ($csproj)" + dotnet publish "$csproj" --no-restore -c Release -o "$CODE_DIR/publish-$PROJECT_NAME" + # ←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←← + # Tu wstaw swój kod deployu (rsync/ssh itp.) + # ←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←← + else + echo "Pomijam $PROJECT_NAME (nie jest to Api ani Blazor)" + fi + done + echo "Pipeline zakończony pomyślnie!" + depends_on: [publish-datamodels-to-baget] \ No newline at end of file diff --git a/FaKrosnoApi/Controllers/CustomerController.cs b/FaKrosnoApi/Controllers/CustomerController.cs new file mode 100644 index 0000000..abf4b1a --- /dev/null +++ b/FaKrosnoApi/Controllers/CustomerController.cs @@ -0,0 +1,17 @@ +using Microsoft.AspNetCore.Mvc; +using SytelineSaAppEfDataModel.Dtos; +using SytelineSaAppEfDataModel.Services; + +namespace FaKrosnoApi.Controllers; + +[ApiController] +[Route("api/[controller]")] +public class CustomerController(ICustomerService service) : Controller +{ + [HttpGet] + public async Task>> GetAllCustomers() + { + IList customers = await service.GetAllCustomers(); + return Ok(customers); + } +} \ No newline at end of file diff --git a/FaKrosnoApi/Controllers/CustomerOrdersController.cs b/FaKrosnoApi/Controllers/CustomerOrdersController.cs index 39fa4a3..72dfa81 100644 --- a/FaKrosnoApi/Controllers/CustomerOrdersController.cs +++ b/FaKrosnoApi/Controllers/CustomerOrdersController.cs @@ -12,15 +12,96 @@ namespace FaKrosnoApi.Controllers [HttpGet] public async Task>> GetAll() { - IEnumerable ediCustomerOrders = await service.GetAll(); - return Ok(ediCustomerOrders); + IEnumerable customerOrders = await service.GetAll(); + return Ok(customerOrders); } [HttpGet("by-order-number")] - public async Task> GetByCustomerOrderNumber([FromQuery] Guid customerOrderNumber) + public async Task> GetByCustomerOrderNumber( + [FromQuery] Guid customerOrderNumber) { - CustomerOrderDto? scheduleOrder = await service.GetByOrderNumber(customerOrderNumber); - return scheduleOrder != null ? Ok(scheduleOrder) : NotFound(); + CustomerOrderDto? customerOrder = await service.GetByOrderNumber(customerOrderNumber); + return customerOrder != null ? Ok(customerOrder) : NotFound(); + } + + [HttpGet("by-co-number")] + public async Task> GetByCoNumber([FromQuery] string customerOrderNumber) + { + CustomerOrderDto? customerOrder = await service.GetByCoNumber(customerOrderNumber); + return customerOrder != null ? Ok(customerOrder) : NotFound(); + } + + [HttpGet("lines-by-co-number")] + public async Task?>> GetLinesByCoNumber( + [FromQuery] string customerOrderNumber) + { + var customerOrderLines = await service.GetLinesByCoNumber(customerOrderNumber); + return customerOrderLines != null ? Ok(customerOrderLines) : NotFound(); + } + + [HttpGet("items-by-co-number")] + public async Task?>> GetItemsByCoNumber( + [FromQuery] string customerOrderNumber) + { + var customerOrderLineItems = await service.GetItemsByCoNumber(customerOrderNumber); + return customerOrderLineItems != null ? Ok(customerOrderLineItems) : NotFound(); + } + + [HttpGet("by-customer-and-po")] + public async Task> GetByCustomerAndPo([FromQuery] string customerNumber, + [FromQuery] int customerSequence, [FromQuery] string poNumber) + { + CustomerOrderDto? customerOrder = + await service.GetByCustomerAndPo(customerNumber, customerSequence, poNumber); + return customerOrder != null ? Ok(customerOrder) : NotFound(); + } + + [HttpGet("by-po")] + public async Task> GetByPo([FromQuery] string poNumber) + { + CustomerOrderDto? customerOrder = await service.GetByPo(poNumber); + return customerOrder != null ? Ok(customerOrder) : NotFound(); + } + + [HttpGet("list-by-customer-and-po")] + public async Task>> GetListByCustomerAndPo( + [FromQuery] string customerNumber, [FromQuery] int customerSequence, [FromQuery] string poNumber) + { + IList customerOrders = + await service.GetListByCustomerAndPo(customerNumber, customerSequence, poNumber); + + foreach (CustomerOrderDto customerOrder in customerOrders) + { + customerOrder.CustomerOrderLines = await service.GetLinesByCoNumber(customerOrder.CoNum) ?? []; + + foreach (CustomerOrderLineDto customerOrderLine in customerOrder.CustomerOrderLines) + { + customerOrderLine.CustomerOrderLineItems = + await service.GetItemsByCoNumber(customerOrder.CoNum) ?? []; + } + } + + return Ok(customerOrders); + } + + [HttpGet("list-by-customer")] + public async Task>> GetListByCustomer([FromQuery] string customerNumber, + [FromQuery] int customerSequence) + { + IList customerOrders = await service.GetListByCustomer(customerNumber, customerSequence); + + foreach (CustomerOrderDto customerOrder in customerOrders) + { + customerOrder.CustomerOrderLines = await service.GetLinesByCoNumber(customerOrder.CoNum) ?? []; + + foreach (CustomerOrderLineDto customerOrderLine in customerOrder.CustomerOrderLines) + { + customerOrderLine.CustomerOrderLineItems = + await service.GetItemsByCoNumber(customerOrder.CoNum) ?? []; + } + } + + return Ok(customerOrders); } } } diff --git a/FaKrosnoApi/Controllers/CustomerTpController.cs b/FaKrosnoApi/Controllers/CustomerTpController.cs new file mode 100644 index 0000000..e0a45dc --- /dev/null +++ b/FaKrosnoApi/Controllers/CustomerTpController.cs @@ -0,0 +1,17 @@ +using Microsoft.AspNetCore.Mvc; +using SytelineSaAppEfDataModel.Dtos; +using SytelineSaAppEfDataModel.Services; + +namespace FaKrosnoApi.Controllers; + +[ApiController] +[Route("api/[controller]")] +public class CustomerTpController(ICustomerTpService service) : Controller +{ + [HttpGet] + public async Task>> GetAllCustomers() + { + IList customers = await service.GetAllCustomersTp(); + return Ok(customers); + } +} \ No newline at end of file diff --git a/FaKrosnoApi/Controllers/EdiCustomerOrderImportController.cs b/FaKrosnoApi/Controllers/EdiCustomerOrderImportController.cs new file mode 100644 index 0000000..a73553f --- /dev/null +++ b/FaKrosnoApi/Controllers/EdiCustomerOrderImportController.cs @@ -0,0 +1,35 @@ +using Microsoft.AspNetCore.Mvc; +using SytelineSaAppEfDataModel.Dtos; +using SytelineSaAppEfDataModel.Services; + +namespace FaKrosnoApi.Controllers; + +[ApiController] +[Route("api/[controller]")] +public class EdiCustomerOrderImportController(IEdiCustomerOrderImportService service) : Controller +{ + [HttpGet("last-update-date")] + public async Task> GetLastUpdateDate() + { + DateTime lastUpdateDate = await service.GetLastUpdateDate(); + return Ok(lastUpdateDate); + } + + [HttpPost] + public async Task Add([FromBody] EdiCustomerOrderImportDto ediCustomerOrderImport) + { + var result = await service.AddEdiCustomerOrderImport(ediCustomerOrderImport); + return result + ? Ok("Utworzono rekord w tabeli EdiCustomerOrderImport.") + : BadRequest($"Nie mogę utworzyć rekordu w tabeli EdiCustomerOrderImport."); + } + + [HttpPost("add-bulk")] + public async Task Add([FromBody] IList ediCustomerOrderImports) + { + var result = await service.AddEdiCustomerOrderImports(ediCustomerOrderImports); + return result + ? Ok("Utworzono rekordy w tabeli EdiCustomerOrderImport.") + : BadRequest($"Nie mogę utworzyć rekordów w tabeli EdiCustomerOrderImport."); + } +} \ No newline at end of file diff --git a/FaKrosnoApi/Controllers/EdiCustomerOrdersController.cs b/FaKrosnoApi/Controllers/EdiCustomerOrdersController.cs index f3954ef..b690cc6 100644 --- a/FaKrosnoApi/Controllers/EdiCustomerOrdersController.cs +++ b/FaKrosnoApi/Controllers/EdiCustomerOrdersController.cs @@ -30,11 +30,33 @@ namespace FaKrosnoApi.Controllers return scheduleOrder != null ? Ok(scheduleOrder) : NotFound(); } + [HttpGet("last-order-number")] + public async Task> GetLastOrderNumber() + { + int lastOrderNumber = await service.GetLastOrderNumber(); + return Ok(lastOrderNumber); + } + [HttpPost("send-to-syteline")] public async Task> SendOrderToSyteline([FromQuery] Guid customerOrderNumber) { int result = await service.SendOrderToSyteline(customerOrderNumber); return result > 0 ? Ok() : BadRequest(); } + + [HttpPost("save-orders")] + public async Task SaveOrdersWithDetails([FromBody] List ediCustomerOrders) + { + if (!ediCustomerOrders.Any()) + { + return BadRequest("The list of orders cannot be null or empty."); + } + + var result = await service.SaveOrdersWithDetails(ediCustomerOrders); + + return result.Item1 + ? Ok(result) + : BadRequest($"Failed to save orders. Error: {result.Item2}"); + } } } diff --git a/FaKrosnoApi/Controllers/EdiLogController.cs b/FaKrosnoApi/Controllers/EdiLogController.cs new file mode 100644 index 0000000..5af8a40 --- /dev/null +++ b/FaKrosnoApi/Controllers/EdiLogController.cs @@ -0,0 +1,19 @@ +using Microsoft.AspNetCore.Mvc; +using SytelineSaAppEfDataModel.Dtos; +using SytelineSaAppEfDataModel.Services; + +namespace FaKrosnoApi.Controllers; + +[ApiController] +[Route("api/[controller]")] +public class EdiLogController(IEdiLogService service) : Controller +{ + [HttpPost] + public async Task Add([FromBody] EdiLogDto ediLog) + { + var result = await service.AddEdiLog(ediLog); + return result + ? Ok("Utworzono rekord w tabeli EdiLog.") + : BadRequest($"Nie mogę utworzyć rekordu w tabeli EdiLog."); + } +} \ No newline at end of file diff --git a/FaKrosnoApi/Controllers/ExcelGeneratorController.cs b/FaKrosnoApi/Controllers/ExcelGeneratorController.cs new file mode 100644 index 0000000..5c24e09 --- /dev/null +++ b/FaKrosnoApi/Controllers/ExcelGeneratorController.cs @@ -0,0 +1,224 @@ +using System.Net; +using System.Net.Mail; +using Microsoft.AspNetCore.Mvc; +using Syncfusion.Drawing; +using Syncfusion.XlsIO; +using SytelineSaAppEfDataModel.Dtos; +using SytelineSaAppEfDataModel.Services; + +namespace FaKrosnoApi.Controllers; + +[ApiController] +[Route("api/[controller]")] +public class ExcelGeneratorController(IWzHeaderService wzHeaderService, IWzClientService wzClientService, IMaterialTransactionService materialTransactionService, IConfiguration configuration) : Controller +{ + [HttpGet("generate-meyle")] + public async Task GeneratePackListForMeyle(Guid packListId) + { + WzHeaderDto wzHeader = await wzHeaderService.GetById(packListId); + MaterialTransactionDto? materialTransaction = await materialTransactionService.GetByWzNumber(wzHeader.WzRowsMeyle.First().WzNumber); + + using ExcelEngine excelEngine = new ExcelEngine(); + IApplication application = excelEngine.Excel; + application.DefaultVersion = ExcelVersion.Xlsx; + + IWorkbook workbook = application.Workbooks.Create(1); + IWorksheet worksheet = workbook.Worksheets[0]; + + IStyle boldFontStyle = workbook.Styles.Add("BoldFontStyle"); + boldFontStyle.Font.Bold = true; + + var mainHeaders = new List + { "Numer zamówienia Meyle", "Meyle Numer", "Ilość w dostawie", "Numer Palety", "Nr Wz", "Nr Partii" }; + + worksheet["B1"].Value = "Packing List"; + worksheet["B1"].CellStyle = boldFontStyle; + + worksheet["B3"].Value = "Supplier Name"; + worksheet["B3"].CellStyle = boldFontStyle; + + worksheet["D3"].Value = "FA KROSNO"; + worksheet["D3"].CellStyle = boldFontStyle; + + worksheet["B4"].Value = "Packing List nr"; + worksheet["B4"].CellStyle = boldFontStyle; + + worksheet["B6"].Value = "Related delivery note"; + worksheet["B6"].CellStyle = boldFontStyle; + + worksheet["D6"].Value = string.Join(", ", wzHeader.WzRowsMeyle.Select(x => x.WzNumber).Distinct()); + worksheet["D6"].CellStyle = boldFontStyle; + + worksheet["B9"].Value = "Forwarder"; + worksheet["B9"].CellStyle = boldFontStyle; + + worksheet["B10"].Value = "Date"; + worksheet["B10"].CellStyle = boldFontStyle; + + worksheet["D10"].DateTime = materialTransaction?.CreateDate ?? DateTime.Now; + + int currentRow = 12; + + for (int i = 0; i < mainHeaders.Count; i++) + { + string columnLetter = GetColumnLetter(i); + worksheet.Range[$"{columnLetter}{currentRow}"].Text = mainHeaders[i]; + worksheet.Range[$"{columnLetter}{currentRow}"].CellStyle = boldFontStyle; + } + + currentRow++; + + foreach (var wzRow in wzHeader.WzRowsMeyle) + { + worksheet.Range[$"A{currentRow}"].Text = wzRow.OrderNumber; + worksheet.Range[$"B{currentRow}"].Text = wzRow.ItemNumber; + worksheet.Range[$"C{currentRow}"].Number = (double)wzRow.Quantity!; + worksheet.Range[$"D{currentRow}"].Number = (double)wzRow.PalletNumber!; + worksheet.Range[$"E{currentRow}"].Text = wzRow.WzNumber; + worksheet.Range[$"F{currentRow}"].Text = wzRow.PartNumber; + + currentRow++; + } + + for (int i = 0; i < 6; i++) + { + worksheet.AutofitColumn(i + 1); + } + + using MemoryStream stream = new MemoryStream(); + workbook.SaveAs(stream); + stream.Position = 0; + + SendEmail(stream, wzHeader, "Meyle"); + } + + [HttpGet("generate-marelli")] + public async Task GeneratePackListForMarelli(Guid packListId) + { + WzHeaderDto wzHeader = await wzHeaderService.GetByIdMarelli(packListId); + WzClientDto? wzClient = await wzClientService.GetById(wzHeader.FK_Client ?? Guid.NewGuid()); + MaterialTransactionDto? materialTransaction = await materialTransactionService.GetByWzNumber(wzHeader.WzRowsMarelli.First().WzNumber); + + using ExcelEngine excelEngine = new ExcelEngine(); + IApplication application = excelEngine.Excel; + application.DefaultVersion = ExcelVersion.Xlsx; + + IWorkbook workbook = application.Workbooks.Create(1); + IWorksheet worksheet = workbook.Worksheets[0]; + + IStyle boldFontStyle = workbook.Styles.Add("BoldFontStyle"); + boldFontStyle.Font.Bold = true; + + var mainHeaders = new List + { "", "ColliNr", "Magneti Marelli Sales nr", "Engineer number", "Quantity", "Order nr", "Supplier Comments" }; + + worksheet.Range["A1:B1"].Merge(); + worksheet.Range["A1"].Text = "PACKING LIST"; + worksheet.Range["A1"].CellStyle = boldFontStyle; + + worksheet["A3"].Value = "Supplier Name"; + worksheet["A3"].CellStyle = boldFontStyle; + + worksheet["B3"].Value = "FA KROSNO"; + worksheet["B3"].CellStyle = boldFontStyle; + + worksheet["A4"].Value = "Packing List nr"; + worksheet["A4"].CellStyle = boldFontStyle; + + worksheet["B4"].Value = string.Join(", ", wzHeader.WzRowsMarelli.Select(x => x.WzNumber).Distinct()); + worksheet["B4"].CellStyle = boldFontStyle; + + worksheet["A6"].Value = "Date"; + worksheet["A6"].CellStyle = boldFontStyle; + + worksheet["B6"].DateTime = materialTransaction?.CreateDate ?? DateTime.Now; + + if (!string.IsNullOrEmpty(wzClient?.LogoBase64)) + { + byte[] logoBytes = Convert.FromBase64String(wzClient.LogoBase64); + + worksheet.Range["D1:F6"].Merge(); + + using MemoryStream imageStream = new MemoryStream(logoBytes); + worksheet.Pictures.AddPicture(1, 4, imageStream); + } + + int currentRow = 12; + + for (int i = 0; i < mainHeaders.Count; i++) + { + string columnLetter = GetColumnLetter(i); + worksheet.Range[$"{columnLetter}{currentRow}"].Text = mainHeaders[i]; + worksheet.Range[$"{columnLetter}{currentRow}"].CellStyle = boldFontStyle; + } + + currentRow++; + + foreach (var wzRow in wzHeader.WzRowsMarelli) + { + worksheet.Range[$"A{currentRow}"].Text = "MIX"; + worksheet.Range[$"B{currentRow}"].Number = (double)wzRow.PalletNumber!; + worksheet.Range[$"C{currentRow}"].Text = wzRow.ItemNumber; + worksheet.Range[$"D{currentRow}"].Text = wzRow.EngineerNumber; + worksheet.Range[$"E{currentRow}"].Number = (double)wzRow.Quantity!; + worksheet.Range[$"F{currentRow}"].Text = wzRow.OrderNumber; + worksheet.Range[$"G{currentRow}"].Text = wzRow.WzNumber; + + currentRow++; + } + + for (int i = 0; i < 6; i++) + { + worksheet.AutofitColumn(i + 1); + } + + using MemoryStream stream = new MemoryStream(); + workbook.SaveAs(stream); + stream.Position = 0; + + SendEmail(stream, wzHeader, "Marelli Magneti"); + } + + private static string GetColumnLetter(int columnIndex) + { + string columnName = string.Empty; + while (columnIndex >= 0) + { + columnName = (char)('A' + (columnIndex % 26)) + columnName; + columnIndex = (columnIndex / 26) - 1; + } + + return columnName; + } + + private void SendEmail(MemoryStream stream, WzHeaderDto wzHeader, string client) + { + IConfigurationSection smtpSettings = configuration.GetSection("EmailSettings"); + string smtpHost = smtpSettings["SmtpServer"] ?? string.Empty; + int smtpPort = int.Parse(smtpSettings["Port"] ?? "0"); + string smtpUsername = smtpSettings["SenderEmail"] ?? string.Empty; + string smtpPassword = smtpSettings["SenderPassword"] ?? string.Empty; + string fromEmail = smtpSettings["SenderEmail"] ?? string.Empty; + List toEmail = wzHeader.EmailAddresses?.Split(',')?.ToList() ?? + (smtpSettings["RecipientEmail"] ?? string.Empty).Split(',').ToList(); + string subject = $"{client}: Packing List"; + string body = + $"W załączeniu znajduje się Packing List dla klienta ${client} wygenerowany {DateTime.Now:dd.MM.yyyy HH:mm:ss}"; + + using var mailMessage = new MailMessage(); + mailMessage.From = new MailAddress(fromEmail); + mailMessage.Subject = subject; + mailMessage.Body = body; + mailMessage.IsBodyHtml = false; + + mailMessage.Attachments.Add(new Attachment(stream, $"PackingList_{client}_{DateTime.Now:yyyyMMddHHmmss}.xlsx", + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")); + + toEmail.ForEach(x => mailMessage.To.Add(x)); + + using var smtpClient = new SmtpClient(smtpHost, smtpPort); + smtpClient.EnableSsl = true; + smtpClient.Credentials = new NetworkCredential(smtpUsername, smtpPassword); + smtpClient.Send(mailMessage); + } +} \ No newline at end of file diff --git a/FaKrosnoApi/Controllers/HangfireJobsController.cs b/FaKrosnoApi/Controllers/HangfireJobsController.cs index 86e89d0..bccbc0d 100644 --- a/FaKrosnoApi/Controllers/HangfireJobsController.cs +++ b/FaKrosnoApi/Controllers/HangfireJobsController.cs @@ -2,7 +2,6 @@ using System.Diagnostics; using FaKrosnoApi.Models; using Hangfire; using Hangfire.Storage; -using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using OrdersManagementDataModel.Dtos; using OrdersManagementDataModel.Services; @@ -16,20 +15,19 @@ public class HangfireJobsController( IRecurringJobManager recurringJobManager, ITaskSchedulerService service) : Controller { - [HttpGet("GetJobsToRun")] public async Task>> GetJobsToRun() { IList jobsToRun = new List(); - + using (IStorageConnection? connection = jobStorage.GetConnection()) { IList? recurringJobs = connection.GetRecurringJobs(); IList? taskSchedulers = (await service.GetTaskSchedulers()).ToList(); - + foreach (var recurringJob in recurringJobs) { TaskSchedulerDto? taskScheduler = taskSchedulers?.FirstOrDefault(ts => ts.Name == recurringJob.Id); - + if (taskScheduler != null) { jobsToRun.Add(new JobModel(recurringJob.Id, recurringJob.Cron, taskScheduler.Path, @@ -37,20 +35,20 @@ public class HangfireJobsController( } } } - + return Ok(jobsToRun); } - + [HttpPost("run")] public async Task RunJobs() { var jobsToRun = (await GetJobsToRun()).Value?.ToList(); - + if (jobsToRun == null || jobsToRun.Count == 0) { return BadRequest("Nie udało się pobrać zadań do uruchomienia."); } - + foreach (var job in jobsToRun) { if (!string.IsNullOrEmpty(job.Path)) @@ -59,10 +57,10 @@ public class HangfireJobsController( new RecurringJobOptions { TimeZone = TimeZoneInfo.Local }); } } - + return Ok("Zadania zostały zaplanowane do uruchamiania zgodnie z ich CRON."); } - + [HttpPost("add")] public async Task AddTask([FromBody] TaskSchedulerDto taskSchedulerDto) { @@ -73,71 +71,87 @@ public class HangfireJobsController( CronOptions = taskSchedulerDto.CronOptions, CreateDate = DateTime.UtcNow }; - + int result = await service.AddTaskScheduler(taskSchedulerDto); - + if (result == 0) { return BadRequest("Nie udało się dodać zadania."); } - + recurringJobManager.AddOrUpdate(taskScheduler.Name, () => RunConsoleApplication(taskScheduler.Path), taskScheduler.CronOptions, new RecurringJobOptions { TimeZone = TimeZoneInfo.Local }); - + return Ok("Zadanie zostało dodane."); } - + [HttpPost("delete")] public async Task DeleteTask([FromBody] TaskSchedulerDto taskSchedulerDto) { int result = await service.DeleteTaskScheduler(taskSchedulerDto.RowPointer); - + if (result == 0) { return BadRequest("Nie udało się usunąć zadania."); } - + recurringJobManager.RemoveIfExists(taskSchedulerDto.Name); - + return Ok("Zadanie zostało usunięte."); } - + + [HttpPost("update")] + public async Task UpdateTask([FromBody] TaskSchedulerDto taskSchedulerDto) + { + int result = await service.UpdateTaskScheduler(taskSchedulerDto); + + if (result == 0) + { + return BadRequest("Nie udało się uaktualnic zadania."); + } + + recurringJobManager.AddOrUpdate(taskSchedulerDto.Name, () => RunConsoleApplication(taskSchedulerDto.Path), + taskSchedulerDto.CronOptions, new RecurringJobOptions { TimeZone = TimeZoneInfo.Local }); + + return Ok("Zadanie zostało zaktualizowane."); + } + [HttpGet] public async Task>> GetTasks() { var tasks = await service.GetTaskSchedulers(); - + foreach (TaskSchedulerDto taskSchedulerDto in tasks) { var job = GetJob(taskSchedulerDto.Name); taskSchedulerDto.LastExecution = job?.LastExecution; taskSchedulerDto.NextExecution = job?.NextExecution; } - + return Ok(tasks); } - + [HttpGet("by-name")] public async Task> GetTaskSchedulerByTaskName([FromQuery] string name) { var taskSchedulerDto = await service.GetTaskSchedulerByTaskName(name); - + if (taskSchedulerDto == null) return NotFound(); var job = GetJob(taskSchedulerDto.Name); taskSchedulerDto.LastExecution = job?.LastExecution; taskSchedulerDto.NextExecution = job?.NextExecution; - + return Ok(taskSchedulerDto); } - + private RecurringJobDto? GetJob(string jobId) { using IStorageConnection? connection = jobStorage.GetConnection(); IList? recurringJobs = connection.GetRecurringJobs(); return recurringJobs.FirstOrDefault(x => x.Id == jobId); } - + public void RunConsoleApplication(string pathToApp) { try @@ -158,7 +172,7 @@ public class HangfireJobsController( string output = process.StandardOutput.ReadToEnd(); string error = process.StandardError.ReadToEnd(); process.WaitForExit(); - + Console.WriteLine($"Output: {output}"); Console.WriteLine($"Error: {error}"); } diff --git a/FaKrosnoApi/Controllers/ItemController.cs b/FaKrosnoApi/Controllers/ItemController.cs new file mode 100644 index 0000000..5142b7a --- /dev/null +++ b/FaKrosnoApi/Controllers/ItemController.cs @@ -0,0 +1,17 @@ +using Microsoft.AspNetCore.Mvc; +using SytelineSaAppEfDataModel.Dtos; +using SytelineSaAppEfDataModel.Services; + +namespace FaKrosnoApi.Controllers; + +[ApiController] +[Route("api/[controller]")] +public class ItemController(IItemService service) : Controller +{ + [HttpGet("by-number")] + public async Task> Get([FromQuery] string itemNumber) + { + ItemDto item = await service.GetItem(itemNumber); + return Ok(item); + } +} \ No newline at end of file diff --git a/FaKrosnoApi/Controllers/ItemCustController.cs b/FaKrosnoApi/Controllers/ItemCustController.cs new file mode 100644 index 0000000..f5c6ddd --- /dev/null +++ b/FaKrosnoApi/Controllers/ItemCustController.cs @@ -0,0 +1,16 @@ +using Microsoft.AspNetCore.Mvc; +using SytelineSaAppEfDataModel.Dtos; +using SytelineSaAppEfDataModel.Services; + +namespace FaKrosnoApi.Controllers; + +[ApiController] +[Route("api/[controller]")] +public class ItemCustController(IItemCustService service) : Controller +{ + public async Task> GetItem([FromQuery] string itemNumber, [FromQuery] string customerNumber) + { + ItemCustDto item = await service.GetItem(itemNumber, customerNumber); + return item != null ? Ok(item) : NotFound(); + } +} \ No newline at end of file diff --git a/FaKrosnoApi/Controllers/ItemCustPriceAllController.cs b/FaKrosnoApi/Controllers/ItemCustPriceAllController.cs new file mode 100644 index 0000000..1fbb591 --- /dev/null +++ b/FaKrosnoApi/Controllers/ItemCustPriceAllController.cs @@ -0,0 +1,23 @@ +using AutoMapper; +using Microsoft.AspNetCore.Mvc; +using SytelineSaAppEfDataModel.Dtos; +using SytelineSaAppEfDataModel.Services; + +namespace FaKrosnoApi.Controllers; + +[ApiController] +[Route("api/[controller]")] +public class ItemCustPriceAllController(IItemCustPriceAllService service, IMapper mapper) : Controller +{ + [HttpGet("by-parameters")] + public async Task> GetItemCustPriceAll([FromQuery] string itemNumber, [FromQuery] string customerNumber) + { + var result = await service.GetItemCustPriceAllAsync(itemNumber, customerNumber); + if (result == null) + { + return NotFound(); + } + + return Ok(mapper.Map(result)); + } +} \ No newline at end of file diff --git a/FaKrosnoApi/Controllers/MaterialTransactionsController.cs b/FaKrosnoApi/Controllers/MaterialTransactionsController.cs new file mode 100644 index 0000000..abbb60b --- /dev/null +++ b/FaKrosnoApi/Controllers/MaterialTransactionsController.cs @@ -0,0 +1,42 @@ +using AutoMapper; +using Microsoft.AspNetCore.Mvc; +using SytelineSaAppEfDataModel.Dtos; +using SytelineSaAppEfDataModel.Services; + +namespace FaKrosnoApi.Controllers; + +[ApiController] +[Route("api/[controller]")] +public class MaterialTransactionsController(IMaterialTransactionService service) : Controller +{ + [HttpGet] + public async Task> GetAll() + { + return await service.GetAll(); + } + + [HttpGet("by-wz-number")] + public Task GetByWzNumber([FromQuery] string wzNumber) + { + return service.GetByWzNumber(wzNumber); + } + + [HttpGet("list-by-wz-numbers")] + public Task> GetListByWzNumber([FromBody] ISet wzNumbers) + { + return service.GetOrderNumbersByWz(wzNumbers); + } + + [HttpGet("by-order-number")] + public Task> GetByOrderNumber([FromQuery] string orderNumber) + { + return service.GetByOrderNumber(orderNumber); + } + + // public Task> GetOrderNumbersByWz(ISet wzNumbers); + // public Task> GetByCustomerNumber(string customerNumber, int customerSequence); + // public Task GetByPartNumber(string partNumber); + // public Task> GetWithPartNumber(); + + +} \ No newline at end of file diff --git a/FaKrosnoApi/Controllers/VatCodeAssociationController.cs b/FaKrosnoApi/Controllers/VatCodeAssociationController.cs new file mode 100644 index 0000000..4c495d3 --- /dev/null +++ b/FaKrosnoApi/Controllers/VatCodeAssociationController.cs @@ -0,0 +1,25 @@ +using AutoMapper; +using Microsoft.AspNetCore.Mvc; +using SytelineSaAppEfDataModel.Dtos; +using SytelineSaAppEfDataModel.Services; + +namespace FaKrosnoApi.Controllers; + +[ApiController] +[Route("api/[controller]")] +public class VatCodeAssociationController(IVatCodeAssociationService service, IMapper mapper) : Controller +{ + [HttpGet("by-parameters")] + public async Task> GetVatCodesAssociation(string customerDoInvoice, + string endUserType, string productCode) + { + var result = await service.GetVatCodesAssociation(customerDoInvoice, endUserType, productCode); + if (result == null) + { + return NotFound(); + } + + return Ok(mapper.Map(result)); + } + +} \ No newline at end of file diff --git a/FaKrosnoApi/Controllers/WzClientController.cs b/FaKrosnoApi/Controllers/WzClientController.cs new file mode 100644 index 0000000..89c84d7 --- /dev/null +++ b/FaKrosnoApi/Controllers/WzClientController.cs @@ -0,0 +1,24 @@ +using Microsoft.AspNetCore.Mvc; +using SytelineSaAppEfDataModel.Dtos; +using SytelineSaAppEfDataModel.Services; + +namespace FaKrosnoApi.Controllers; + +[ApiController] +[Route("api/[controller]")] +public class WzClientController(IWzClientService service) : Controller +{ + [HttpGet] + public async Task>> GetAll() + { + IEnumerable wzClients = await service.GetAll(); + return Ok(wzClients); + } + + [HttpGet("by-id")] + public async Task> GetById(Guid id) + { + WzClientDto? wzClient = await service.GetById(id); + return Ok(wzClient); + } +} \ No newline at end of file diff --git a/FaKrosnoApi/Controllers/WzHeaderController.cs b/FaKrosnoApi/Controllers/WzHeaderController.cs new file mode 100644 index 0000000..74f6b64 --- /dev/null +++ b/FaKrosnoApi/Controllers/WzHeaderController.cs @@ -0,0 +1,67 @@ +using Microsoft.AspNetCore.Mvc; +using SytelineSaAppEfDataModel.Dtos; +using SytelineSaAppEfDataModel.Services; + +namespace FaKrosnoApi.Controllers; + +[ApiController] +[Route("api/[controller]")] +public class WzHeaderController(IWzHeaderService service, IMaterialTransactionService materialTransactionService) : Controller +{ + [HttpGet] + public async Task>> GetAll() + { + IEnumerable wzHeaders = await service.GetAll(); + return Ok(wzHeaders); + } + + [HttpGet("by-customer-number")] + public async Task>> GetByCustomerNumber( + [FromQuery] string customerNumber, [FromQuery] int customerSequence) + { + IEnumerable materialTransactions = + await materialTransactionService.GetByCustomerNumber(customerNumber, customerSequence); + return Ok(materialTransactions); + } + + [HttpGet("all-wz-headers")] + public async Task>> GetHeadersByCustomerNumber( + [FromQuery] string customerNumber, [FromQuery] int customerSequence) + { + IEnumerable wzHeaders = + await service.GetByCustomerNumber(customerNumber, customerSequence); + + return Ok(wzHeaders.OrderByDescending(x => x.CreatedDate)); + } + + [HttpPost] + public async Task CreateHeader([FromBody] WzHeaderDto wzHeader) + { + if (wzHeader == null) + { + return BadRequest("WzHeader cannot be null."); + } + + await service.CreateHeader(wzHeader); + return CreatedAtAction(nameof(CreateHeader), wzHeader); + } + + [HttpGet("by-id")] + public async Task> GetById([FromQuery] Guid id) + { + WzHeaderDto? wzHeader = await service.GetById(id); + return wzHeader != null ? Ok(wzHeader) : NotFound(); + } + + [HttpPost("add-emails")] + public async Task AddEmailsToWzHeader([FromQuery] Guid id, [FromBody] string emailAddresses) + { + if (string.IsNullOrWhiteSpace(emailAddresses)) + { + return BadRequest("Email addresses cannot be empty."); + } + + await service.AddEmailsToWzHeader(id, emailAddresses); + return NoContent(); + } +} \ No newline at end of file diff --git a/FaKrosnoApi/Controllers/WzRowMarelliController.cs b/FaKrosnoApi/Controllers/WzRowMarelliController.cs new file mode 100644 index 0000000..e3f18fb --- /dev/null +++ b/FaKrosnoApi/Controllers/WzRowMarelliController.cs @@ -0,0 +1,62 @@ +using Microsoft.AspNetCore.Mvc; +using SytelineSaAppEfDataModel.Dtos; +using SytelineSaAppEfDataModel.Services; + +namespace FaKrosnoApi.Controllers; + +[ApiController] +[Route("api/[controller]")] +public class WzRowMarelliController(IWzRowMareliService service, IMaterialTransactionService materialTransactionService) : Controller +{ + [HttpGet] + public async Task>> GetAll() + { + IEnumerable wzRows = await service.GetAll(); + return Ok(wzRows); + } + + [HttpPost] + public async Task CreateRows([FromBody] IEnumerable rows) + { + if (rows == null || !rows.Any()) + { + return BadRequest("No rows provided."); + } + + await service.CreateRows(rows); + return CreatedAtAction(nameof(GetAll), new { count = rows.Count() }, rows); + } + + [HttpGet("by-wz-header-id")] + public async Task>> GetByWzHeaderId(Guid wzHeaderId) + { + IEnumerable wzRows = await service.GetByWzHeaderId(wzHeaderId); + return Ok(wzRows); + } + + [HttpGet("by-part-number")] + public async Task> GetByPartNumber([FromQuery] string partNumber) + { + MaterialTransactionDto materialTransaction = await materialTransactionService.GetByPartNumber(partNumber); + return Ok(materialTransaction); + } + + [HttpGet("transactions-with-part-number")] + public async Task> GetTransactionsWithPartNumber() + { + IEnumerable materialTransactions = await materialTransactionService.GetWithPartNumber(); + return Ok(materialTransactions); + } + + [HttpPut] + public async Task UpdateRows([FromBody] IEnumerable rows) + { + if (rows == null || !rows.Any()) + { + return BadRequest("No rows provided."); + } + + await service.UpdateRows(rows); + return NoContent(); + } +} \ No newline at end of file diff --git a/FaKrosnoApi/Controllers/WzRowMeyleController.cs b/FaKrosnoApi/Controllers/WzRowMeyleController.cs new file mode 100644 index 0000000..265176d --- /dev/null +++ b/FaKrosnoApi/Controllers/WzRowMeyleController.cs @@ -0,0 +1,62 @@ +using Microsoft.AspNetCore.Mvc; +using SytelineSaAppEfDataModel.Dtos; +using SytelineSaAppEfDataModel.Services; + +namespace FaKrosnoApi.Controllers; + +[ApiController] +[Route("api/[controller]")] +public class WzRowMeyleController(IWzRowMeyleService service, IMaterialTransactionService materialTransactionService) : Controller +{ + [HttpGet] + public async Task>> GetAll() + { + IEnumerable wzRows = await service.GetAll(); + return Ok(wzRows); + } + + [HttpPost] + public async Task CreateRows([FromBody] IEnumerable rows) + { + if (rows == null || !rows.Any()) + { + return BadRequest("No rows provided."); + } + + await service.CreateRows(rows); + return CreatedAtAction(nameof(GetAll), new { count = rows.Count() }, rows); + } + + [HttpGet("by-wz-header-id")] + public async Task>> GetByWzHeaderId(Guid wzHeaderId) + { + IEnumerable wzRows = await service.GetByWzHeaderId(wzHeaderId); + return Ok(wzRows); + } + + [HttpGet("by-part-number")] + public async Task> GetByPartNumber([FromQuery] string partNumber) + { + MaterialTransactionDto materialTransaction = await materialTransactionService.GetByPartNumber(partNumber); + return Ok(materialTransaction); + } + + [HttpGet("transactions-with-part-number")] + public async Task> GetTransactionsWithPartNumber() + { + IEnumerable materialTransactions = await materialTransactionService.GetWithPartNumber(); + return Ok(materialTransactions); + } + + [HttpPut] + public async Task UpdateRows([FromBody] IEnumerable rows) + { + if (rows == null || !rows.Any()) + { + return BadRequest("No rows provided."); + } + + await service.UpdateRows(rows); + return NoContent(); + } +} \ No newline at end of file diff --git a/FaKrosnoApi/FaKrosnoApi.csproj b/FaKrosnoApi/FaKrosnoApi.csproj index 595a074..05268b0 100644 --- a/FaKrosnoApi/FaKrosnoApi.csproj +++ b/FaKrosnoApi/FaKrosnoApi.csproj @@ -2,12 +2,14 @@ net8.0 + Api enable enable + @@ -18,13 +20,13 @@ + + - - diff --git a/FaKrosnoApi/Program.cs b/FaKrosnoApi/Program.cs index d0e531f..e32d345 100644 --- a/FaKrosnoApi/Program.cs +++ b/FaKrosnoApi/Program.cs @@ -1,13 +1,10 @@ using Microsoft.EntityFrameworkCore; -using Microsoft.IdentityModel.Tokens; -using System.Text; using FaKrosnoApi.Models; using FaKrosnoApi.Services; using FaKrosnoEfDataModel; using FaKrosnoEfDataModel.Services; using Hangfire; using Hangfire.SqlServer; -using Microsoft.AspNetCore.Authentication.JwtBearer; using OrdersManagementDataModel; using OrdersManagementDataModel.Services; using SytelineSaAppEfDataModel; @@ -65,7 +62,7 @@ builder.Services.AddOpenApiDocument(config => In = OpenApiSecurityApiKeyLocation.Header, Description = "Wprowadź token JWT w formacie: Bearer {token}" }); - + config.OperationProcessors.Add(new OperationSecurityScopeProcessor("Bearer")); }); @@ -100,9 +97,24 @@ builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); +builder.Services.AddScoped(); +builder.Services.AddScoped(); +builder.Services.AddScoped(); +builder.Services.AddScoped(); +builder.Services.AddScoped(); +builder.Services.AddScoped(); +builder.Services.AddScoped(); +builder.Services.AddScoped(); +builder.Services.AddScoped(); +builder.Services.AddScoped(); +builder.Services.AddScoped(); +builder.Services.AddScoped(); +builder.Services.AddScoped(); builder.Services.AddHostedService(); +Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("NRAiBiAaIQQuGjN/V09+XU9HdVRDX3xKf0x/TGpQb19xflBPallYVBYiSV9jS3tTckVgWHldc3ZUR2lfVE90Vg=="); + var app = builder.Build(); app.UseOpenApi(); diff --git a/FaKrosnoEfDataModel/Dtos/ProductDto.cs b/FaKrosnoEfDataModel/Dtos/ProductDto.cs index 6883ce1..d2f00b5 100644 --- a/FaKrosnoEfDataModel/Dtos/ProductDto.cs +++ b/FaKrosnoEfDataModel/Dtos/ProductDto.cs @@ -6,4 +6,7 @@ public class ProductDto : DtoBase public int RecipientID { get; set; } public string RecipientIdx { get; set; } public string FaIdx { get; set; } + public string RecipientName { get; set; } + + public RecipientDto Recipient { get; set; } } \ No newline at end of file diff --git a/FaKrosnoEfDataModel/Entities/Product.cs b/FaKrosnoEfDataModel/Entities/Product.cs index 554a2ac..afd31c1 100644 --- a/FaKrosnoEfDataModel/Entities/Product.cs +++ b/FaKrosnoEfDataModel/Entities/Product.cs @@ -6,4 +6,6 @@ public class Product : EntityBase public int RecipientID { get; set; } public string RecipientIdx { get; set; } public string FaIdx { get; set; } + + public Recipient Recipient { get; set; } } \ No newline at end of file diff --git a/FaKrosnoEfDataModel/FaKrosnoEfDataModel.csproj b/FaKrosnoEfDataModel/FaKrosnoEfDataModel.csproj index c238b1a..ab4a415 100644 --- a/FaKrosnoEfDataModel/FaKrosnoEfDataModel.csproj +++ b/FaKrosnoEfDataModel/FaKrosnoEfDataModel.csproj @@ -1,9 +1,15 @@ + FaKrosnoEfDataModel + Piotr Kus + FaKrosno Entity Framework Data Model net8.0 + DataModel enable enable + patch + 1.0 @@ -20,6 +26,10 @@ + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + diff --git a/FaKrosnoEfDataModel/Services/ProductService.cs b/FaKrosnoEfDataModel/Services/ProductService.cs index cebdfa2..5b97f18 100644 --- a/FaKrosnoEfDataModel/Services/ProductService.cs +++ b/FaKrosnoEfDataModel/Services/ProductService.cs @@ -5,12 +5,9 @@ using Microsoft.EntityFrameworkCore; namespace FaKrosnoEfDataModel.Services; -public class ProductService : ServiceBase, IProductService +public class ProductService(FaKrosnoDbContext context, IMapper mapper) + : ServiceBase(context, mapper), IProductService { - public ProductService(FaKrosnoDbContext context, IMapper mapper) : base(context, mapper) - { - } - public async Task> GetEntities() { IList products = (await GetAll()).ToList(); @@ -20,9 +17,32 @@ public class ProductService : ServiceBase, IProductService public async Task> GetEntitiesToFix(string indexName) { + IList recipients = + (await Context.Recipients.ToListAsync()).Select(x => Mapper.Map(x)).ToList(); + IList purchasers = (await Context.Purchasers.ToListAsync()).Select(x => Mapper.Map(x)).ToList(); IList products = (await GetAll()).ToList(); - - return products.Where(x => x?.FaIdx == indexName); + + IEnumerable productDtos = products.Where(x => x.FaIdx == indexName).ToList(); + + foreach (ProductDto productDto in productDtos) + { + RecipientDto? recipient = recipients.FirstOrDefault(x => x.ID == productDto.RecipientID); + + if (recipient != null) + { + productDto.Recipient = recipient; + productDto.RecipientName = recipient.RecipientDesc; + } + + PurchaserDto? purchaser = purchasers.FirstOrDefault(x => x.ID == productDto.Recipient.PurchaserID); + + if (purchaser != null) + { + productDto.Recipient.Purchaser = purchaser; + } + } + + return productDtos; } public async Task UpdateEntity(ProductDto entity) diff --git a/OrdersManagement/Components/Layout/MainLayout.razor b/OrdersManagement/Components/Layout/MainLayout.razor index 1906219..cdf48fb 100644 --- a/OrdersManagement/Components/Layout/MainLayout.razor +++ b/OrdersManagement/Components/Layout/MainLayout.razor @@ -34,14 +34,15 @@ - @* *@ - @* *@ - @if (UserName == "pkus") + + @if (IsAdminRoute()) { - + - - + + + + } @@ -63,6 +64,12 @@ private bool IsAuthenticated { get; set; } private string UserName { get; set; } = string.Empty; + private bool IsAdminRoute() + { + var path = new Uri(NavigationManager.Uri).AbsolutePath; + return path.StartsWith("/admin", StringComparison.OrdinalIgnoreCase); + } + protected override void OnInitialized() { // ClaimsPrincipal currentUser = AuthenticationStateProvider.GetCurrentUser(); diff --git a/OrdersManagement/Components/Layout/MainLayout.razor.css b/OrdersManagement/Components/Layout/MainLayout.razor.css index 038baf1..a72fb73 100644 --- a/OrdersManagement/Components/Layout/MainLayout.razor.css +++ b/OrdersManagement/Components/Layout/MainLayout.razor.css @@ -94,3 +94,12 @@ main { right: 0.75rem; top: 0.5rem; } + +.e-grid .e-row.e-selection { + background-color: #D3D3D3 !important; /* Jasny szary */ +} + +/* Domyślny styl dla wierszy (na wszelki wypadek) */ +.e-grid .e-row { + background-color: #FFFFFF; /* Biały, domyślny kolor */ +} diff --git a/OrdersManagement/Components/Pages/Admin/Scheduler.razor b/OrdersManagement/Components/Pages/Admin/Scheduler.razor index 72e25c5..46313e1 100644 --- a/OrdersManagement/Components/Pages/Admin/Scheduler.razor +++ b/OrdersManagement/Components/Pages/Admin/Scheduler.razor @@ -1,4 +1,4 @@ -@page "/Admin/Scheduler" +@page "/Admin/PK/Scheduler" @using System.Security.Claims @using Microsoft.AspNetCore.Authorization @@ -92,6 +92,17 @@ await LoadTasks(); } } + + private async Task UpdateTask(TaskSchedulerDto taskSchedulerDto) + { + var response = await HangfireService.UpdateTaskSchedulerAsync(taskSchedulerDto); + if (response == 1) + { + await LoadTasks(); + } + } + + private async Task LoadTasks() { @@ -108,6 +119,9 @@ case Action.Save when args.Data.Id == 0: await AddTask(args.Data); break; + case Action.Save when args.Data.Id != 0: + await UpdateTask(args.Data); + break; } } diff --git a/OrdersManagement/Components/Pages/Admin/UsersManager.razor b/OrdersManagement/Components/Pages/Admin/UsersManager.razor index 7262b2d..84f1642 100644 --- a/OrdersManagement/Components/Pages/Admin/UsersManager.razor +++ b/OrdersManagement/Components/Pages/Admin/UsersManager.razor @@ -1,4 +1,4 @@ -@page "/admin/UsersManager" +@page "/Admin/PK/UsersManager" @using System.Security.Claims @using Microsoft.AspNetCore.Authorization diff --git a/OrdersManagement/Components/Pages/CustomerOrder.razor b/OrdersManagement/Components/Pages/CustomerOrder.razor index 1e1464a..42a0810 100644 --- a/OrdersManagement/Components/Pages/CustomerOrder.razor +++ b/OrdersManagement/Components/Pages/CustomerOrder.razor @@ -1,4 +1,4 @@ -@page "/CustomerOrder/{CustomerOrderId:guid}" +@page "/Admin/PK/CustomerOrder/{CustomerOrderId:guid}" @inject CustomerOrderService CustomerOrderService @inject ScheduleOrderService ScheduleOrderService diff --git a/OrdersManagement/Components/Pages/CustomerOrders.razor b/OrdersManagement/Components/Pages/CustomerOrders.razor index 2ea4343..45a5e2c 100644 --- a/OrdersManagement/Components/Pages/CustomerOrders.razor +++ b/OrdersManagement/Components/Pages/CustomerOrders.razor @@ -1,4 +1,4 @@ -@page "/CustomerOrders" +@page "/Admin/PK/CustomerOrders" @inject CustomerOrderService CustomerOrderService @inject NavigationManager NavigationManager @@ -109,7 +109,7 @@ { Guid customerOrderId = obj.RowData.RowPointer; - NavigationManager.NavigateTo($"/CustomerOrder/{customerOrderId}"); + NavigationManager.NavigateTo($"/Admin/PK/CustomerOrder/{customerOrderId}"); } } \ No newline at end of file diff --git a/OrdersManagement/Components/Pages/CustomerOrdersTranslations.razor b/OrdersManagement/Components/Pages/CustomerOrdersTranslations.razor index 361b150..273a19b 100644 --- a/OrdersManagement/Components/Pages/CustomerOrdersTranslations.razor +++ b/OrdersManagement/Components/Pages/CustomerOrdersTranslations.razor @@ -1,4 +1,4 @@ -@page "/CustomerOrdersTranslations" +@page "/admin/pk" @using SytelineSaAppEfDataModel.Dtos @using Syncfusion.Blazor.Cards diff --git a/OrdersManagement/Components/Pages/EdiCustomerOrder.razor b/OrdersManagement/Components/Pages/EdiCustomerOrder.razor index d2f444f..a26d1cf 100644 --- a/OrdersManagement/Components/Pages/EdiCustomerOrder.razor +++ b/OrdersManagement/Components/Pages/EdiCustomerOrder.razor @@ -1,4 +1,4 @@ -@page "/EdiCustomerOrder/{CustomerOrderId:guid}" +@page "/Admin/PK/EdiCustomerOrder/{CustomerOrderId:guid}" @inject EdiCustomerOrderService EdiCustomerOrderService @inject NavigationManager NavigationManager diff --git a/OrdersManagement/Components/Pages/EdiCustomerOrders.razor b/OrdersManagement/Components/Pages/EdiCustomerOrders.razor index e5289c5..ec07b1e 100644 --- a/OrdersManagement/Components/Pages/EdiCustomerOrders.razor +++ b/OrdersManagement/Components/Pages/EdiCustomerOrders.razor @@ -1,4 +1,4 @@ -@page "/EdiCustomerOrders" +@page "/Admin/PK/EdiCustomerOrders" @inject EdiCustomerOrderService EdiCustomerOrderService @inject NavigationManager NavigationManager @@ -161,7 +161,7 @@ { Guid customerOrderId = obj.RowData.RowPointer; - NavigationManager.NavigateTo($"/EdiCustomerOrder/{customerOrderId}"); + NavigationManager.NavigateTo($"/Admin/PK/EdiCustomerOrder/{customerOrderId}"); } private async Task SendOrderToSyteLine() diff --git a/OrdersManagement/Components/Pages/PackingLists/Marelli/MarelliPackList.razor b/OrdersManagement/Components/Pages/PackingLists/Marelli/MarelliPackList.razor new file mode 100644 index 0000000..4b9fab1 --- /dev/null +++ b/OrdersManagement/Components/Pages/PackingLists/Marelli/MarelliPackList.razor @@ -0,0 +1,468 @@ +@page "/Warehouse/Marelli/PackList/{WzHeader:guid}" + +@using OrdersManagement.Models +@using Syncfusion.Blazor.Cards +@using Syncfusion.Blazor.Grids +@using SytelineSaAppEfDataModel.Dtos +@using Syncfusion.Blazor.Navigations +@using Syncfusion.Blazor.Popups +@using Syncfusion.Blazor.Inputs +@using FilterType = Syncfusion.Blazor.Grids.FilterType +@using Syncfusion.Blazor.Buttons +@using SelectionType = Syncfusion.Blazor.Grids.SelectionType + +@inject NavigationManager NavigationManager +@inject WarehouseService WarehouseService + +
+ + +

Packing List

+
+ + @* *@ + @* *@ + @* Zmień widok *@ + @* *@ + @* *@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @if (_isValid) + { +

Packing List został wygenerowany i wysłany!

+ } + else if (string.IsNullOrWhiteSpace(EmailAddresses)) + { +

Błąd: Proszę wprowadzić przynajmniej jeden ADRES EMAIL do wysyłki raportu!

+ } + else if (!_isValid) + { +

Błąd: Nie Wszystkie linie mają wypełniony NUMER PALETY.
Packing List nie zostanie + wygenerowany!

+ } +
+
+ + + +
+ + + + +

Błąd skanowania! Wybierz NUMER PALETY większy niż 0 (Aktualnie '@PalletNumber'):

+
+
+ + + +
+ + + + +

Nie znaleziono indeksu z ilością sztuk ('@IndexWithQty') odpowiadającemu skanowanym wartościom!

+

Znaleziono indeks, który ma ilość sztuk: '@IndexQty'!

+

Uzupełnij numer palety ręcznie i kliknij 'Zapisz'!

+
+
+ + + +
+ + + + +

Na liście nie znaleziono skanowanego numeru partii '@NotFoundItem'!

+
+
+ + + +
+ + FA Krosno Manager © @(DateTime.Now.Year) + +
+
+ +@code { + [Parameter] public Guid WzHeader { get; set; } + + private SfGrid _grid; + private List WzRowsMarelli { get; set; } = new(); + private IDictionary> TransactionModelsByPartNumber { get; set; } = new Dictionary>(); + private List ChangedRecords = new(); + private WzHeaderDto _wzHeader; + private SfTextBox _scanner; + + private WzRowMarelliDto? SelectedRow { get; set; } + private List SelectedRows { get; set; } = new(); + + private string WzNumber { get; set; } = string.Empty; + + private bool _isValid; + + private bool Visibility { get; set; } + private bool VisibilityPalletNumber { get; set; } + private bool VisibilityIndexQty { get; set; } + private bool VisibilityNotFound { get; set; } + + private string? EmailAddresses { get; set; } = string.Empty; + private string PalletNumber { get; set; } = "0"; + + private string LastScannedValue { get; set; } = string.Empty; + private string ScannedValue { get; set; } = string.Empty; + + private bool IsDisabled => SelectedRow == null; + + private string IndexWithQty { get; set; } = string.Empty; + private string IndexQty { get; set; } = string.Empty; + private string NotFoundItem { get; set; } = string.Empty; + + private void HideModal() + { + Visibility = false; + VisibilityPalletNumber = false; + VisibilityIndexQty = false; + VisibilityNotFound = false; + + LastScannedValue = ScannedValue; + ScannedValue = string.Empty; + IndexQty = string.Empty; + IndexWithQty = string.Empty; + NotFoundItem = string.Empty; + + _scanner.FocusAsync(); + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + _wzHeader = await WarehouseService.GetWzHeaderByIdAsync(WzHeader); + WzRowsMarelli = (await WarehouseService.GetWzRowsMarelliByWzHeaderId(WzHeader)).ToList(); + + TransactionModelsByPartNumber = await GetTransactionModels(); + + EmailAddresses = _wzHeader.EmailAddresses; + + WzNumber = _wzHeader.WzNumbers ?? string.Empty; + + await _scanner.FocusAsync(); + StateHasChanged(); + } + } + + private async Task SaveChanges() + { + if (!string.IsNullOrWhiteSpace(EmailAddresses)) + { + await WarehouseService.AddEmailsToWzHeaderAsync(WzHeader, EmailAddresses); + } + + if (ChangedRecords.Any()) + { + await UpdateRows(ChangedRecords); + } + + await _grid.EndEditAsync(); + await _grid.ClearSelectionAsync(); + } + + private async Task OnBatchSave(BeforeBatchSaveArgs obj) + { + var changes = obj.BatchChanges; + List changedRecords = changes.ChangedRecords; + + if (!changedRecords.Any()) return; + + await UpdateRows(changedRecords); + } + + private async Task ExportXls() + { + int count = WzRowsMarelli.Count(x => x.PalletNumber == null); + _isValid = count == 0; + _isValid = _isValid && !string.IsNullOrWhiteSpace(EmailAddresses); + + if (_isValid) + { + await WarehouseService.AddEmailsToWzHeaderAsync(WzHeader, EmailAddresses); + await WarehouseService.GenerateXlsForMarelliAsync(WzHeader); + } + + Visibility = true; + } + + private void ScanValue(ChangedEventArgs obj) + { + if (string.IsNullOrWhiteSpace(obj.Value)) return; + if (int.Parse(PalletNumber) <= 0) + { + VisibilityPalletNumber = true; + return; + } + + ScannedValue = obj.Value.Trim(); + + StateHasChanged(); + + TransactionModelsByPartNumber.TryGetValue(obj.Value.Trim(), out List? materialTransactionsByPartNumber); + TransactionModel? materialTransactionByPartNumber = materialTransactionsByPartNumber?.FirstOrDefault(); + + _grid.Query = null; + _grid.ClearFilteringAsync(); + + if (materialTransactionByPartNumber != null) + { + SelectedRows.Clear(); + FillPalletNumber(materialTransactionByPartNumber, obj.Value.Trim()); + } + else + { + NotFoundItem = ScannedValue; + VisibilityNotFound = true; + } + + LastScannedValue = ScannedValue; + ScannedValue = string.Empty; + + _scanner.FocusAsync(); + } + + private async Task FillPalletNumber(TransactionModel materialTransactionByPartNumber, string scannedValue) + { + await _grid.ClearSelectionAsync(); + await _grid.Refresh(); + await InvokeAsync(StateHasChanged); + + List selectedIndices = new List(); + int palletNumber = int.Parse(PalletNumber); + int rowIndex = WzRowsMarelli.FindIndex(x => x.FaIndex == materialTransactionByPartNumber.ItemNumber && x.Quantity == materialTransactionByPartNumber.Quantity); + + switch (rowIndex) + { + case -1: + { + SelectedRows = WzRowsMarelli.Where(x => x.FaIndex == materialTransactionByPartNumber.ItemNumber).ToList(); + + rowIndex = WzRowsMarelli.FindIndex(x => x.FaIndex == SelectedRows.First().FaIndex && x.Quantity == SelectedRows.First().Quantity); + + var validCombinations = FindCombinations(SelectedRows, (int?)materialTransactionByPartNumber.Quantity ?? 0); + + if (!validCombinations.Any() && SelectedRows.Count > 0) + { + IndexWithQty = $"{materialTransactionByPartNumber.ItemNumber}, Qty = {materialTransactionByPartNumber.Quantity}"; + IndexQty = SelectedRows.First().Quantity.ToString() ?? "0"; + VisibilityIndexQty = true; + + await ApplyFilter(SelectedRows); + break; + } + + foreach (var combination in validCombinations) + { + foreach (var record in combination) + { + record.PalletNumber = palletNumber; + ChangedRecords.Add(record); + + int index = WzRowsMarelli.IndexOf(record); + + if (index >= 0) + { + selectedIndices.Add(index); + } + } + } + + SelectedRows.Clear(); + SelectedRows.AddRange(ChangedRecords); + + SelectedRow = SelectedRows.FirstOrDefault(); + + await ApplyFilter(ChangedRecords); + + break; + } + default: + { + SelectedRow = WzRowsMarelli[rowIndex]; + selectedIndices.Add(rowIndex); + + SelectedRow.PalletNumber = palletNumber; + + if (ChangedRecords.All(x => x.TransactionNumber != SelectedRow.TransactionNumber)) + { + ChangedRecords.Add(SelectedRow); + } + + break; + } + } + + await SaveChanges(); + ChangedRecords.Clear(); + + if (selectedIndices.Any()) + { + await _grid.SelectRowsAsync(selectedIndices.ToArray()); + } + + await _grid.Refresh(); + await InvokeAsync(StateHasChanged); + + FocusGridRow(rowIndex); + await _scanner.FocusAsync(); + } + + private void FocusGridRow(int rowIndex) + { + if (_grid.AllowPaging) + { + int pageSize = _grid.PageSettings.PageSize; + int targetPage = (rowIndex / pageSize) + 1; + _grid.GoToPageAsync(targetPage); + + rowIndex %= pageSize; + } + + _grid.SelectRowAsync(rowIndex); + _grid.ScrollIntoViewAsync(rowIndex: rowIndex); + _grid.FocusAsync(); + } + + private async Task>> GetTransactionModels() + { + return await WarehouseService.GetTransactionsModels(); + } + + private async Task UpdateRows(IList changedRecords) + { + await WarehouseService.UpdateWzRowsMarelliAsync(changedRecords); + + WzRowsMarelli = (await WarehouseService.GetWzRowsMarelliByWzHeaderId(WzHeader)).ToList(); + await InvokeAsync(StateHasChanged); + await _grid.Refresh(); + } + + private void OnRowSelected(RowSelectEventArgs obj) + { + SelectedRow = obj.Data; + } + + private List> FindCombinations(List records, int targetSum) + { + var result = new List>(); + var currentCombination = new List(); + + void Backtrack(int start, int currentSum) + { + if (currentSum == targetSum) + { + result.Add([..currentCombination]); + return; + } + + for (int i = start; i < records.Count; i++) + { + if (currentSum + records[i].Quantity <= targetSum) + { + currentCombination.Add(records[i]); + Backtrack(i + 1, currentSum + records[i].Quantity ?? 0); + currentCombination.RemoveAt(currentCombination.Count - 1); + } + } + } + + Backtrack(0, 0); + return result; + } + + private async Task ApplyFilter(IList selectedRecords) + { + await _grid.FilterByColumnAsync(nameof(WzRowMarelliDto.ItemNumber), "equal", selectedRecords.First().ItemNumber); + } + + private void ChangeView() + { + NavigationManager.NavigateTo($"/Warehouse/Marelli/PackList/{WzHeader}/Simple"); + } +} \ No newline at end of file diff --git a/OrdersManagement/Components/Pages/PackingLists/Marelli/MarelliPacklistSimple.razor b/OrdersManagement/Components/Pages/PackingLists/Marelli/MarelliPacklistSimple.razor new file mode 100644 index 0000000..d210f66 --- /dev/null +++ b/OrdersManagement/Components/Pages/PackingLists/Marelli/MarelliPacklistSimple.razor @@ -0,0 +1,316 @@ +@page "/Warehouse/Marelli/PackList/{WzHeader:guid}/Simple" +@using OrdersManagement.Models +@using Syncfusion.Blazor.Cards +@using SytelineSaAppEfDataModel.Dtos +@using Syncfusion.Blazor.Popups +@using Syncfusion.Blazor.Inputs +@using Syncfusion.Blazor.Buttons + +@inject NavigationManager NavigationManager +@inject WarehouseService WarehouseService + +
+ + +

Packing List

+
+ + + + Zmień widok + Generuj XLS i Wyślij + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @if (_isValid) + { +

Packing List został wygenerowany i wysłany!

+ } + else if (string.IsNullOrWhiteSpace(EmailAddresses)) + { +

Błąd: Proszę wprowadzić przynajmniej jeden ADRES EMAIL do wysyłki raportu!

+ } + else if (!_isValid) + { +

Błąd: Nie Wszystkie linie mają wypełniony NUMER PALETY.
Packing List nie zostanie + wygenerowany!

+ } +
+
+ + + +
+ + + + +

Błąd skanowania! Wybierz NUMER PALETY większy niż 0 (Aktualnie '@PalletNumber'):

+
+
+ + + +
+ + + FA Krosno Manager © @(DateTime.Now.Year) + +
+
+ +@code { + [Parameter] public Guid WzHeader { get; set; } + + private List WzRowsMarelli { get; set; } = new(); + private IDictionary> TransactionModelsByPartNumber { get; set; } = new Dictionary>(); + private List ChangedRecords = new(); + private WzHeaderDto _wzHeader; + private SfTextBox _scanner; + + private string ItemNumber { get; set; } = string.Empty; + private string Qty { get; set; } = "0"; + private string PalletNumberOutput { get; set; } = "0"; + + private string WzNumber { get; set; } = string.Empty; + + private WzRowMarelliDto? SelectedRow { get; set; } + private List SelectedRows { get; set; } = new(); + + private bool _isValid; + + public bool Visibility { get; set; } + public bool VisibilityPalletNumber { get; set; } + + private string? EmailAddresses { get; set; } = string.Empty; + private string PalletNumber { get; set; } = "0"; + + private string LastScannedValue { get; set; } = string.Empty; + private string ScannedValue { get; set; } = string.Empty; + + private void HideModal() + { + VisibilityPalletNumber = false; + Visibility = false; + + LastScannedValue = ScannedValue; + ScannedValue = string.Empty; + + _scanner.FocusAsync(); + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + _wzHeader = await WarehouseService.GetWzHeaderByIdAsync(WzHeader); + WzRowsMarelli = (await WarehouseService.GetWzRowsMarelliByWzHeaderId(WzHeader)).ToList(); + + TransactionModelsByPartNumber = await GetTransactionModels(); + + EmailAddresses = _wzHeader.EmailAddresses; + + WzNumber = _wzHeader.WzNumbers ?? string.Empty; + + await _scanner.FocusAsync(); + StateHasChanged(); + } + } + + private async Task SaveChanges() + { + if (!string.IsNullOrWhiteSpace(EmailAddresses)) + { + await WarehouseService.AddEmailsToWzHeaderAsync(WzHeader, EmailAddresses); + } + + if (ChangedRecords.Any()) + { + await UpdateRows(ChangedRecords); + } + } + + private async Task ExportXls() + { + int count = WzRowsMarelli.Count(x => x.PalletNumber == null); + + _isValid = count == 0; + _isValid = _isValid && !string.IsNullOrWhiteSpace(EmailAddresses); + + if (_isValid) + { + await WarehouseService.AddEmailsToWzHeaderAsync(WzHeader, EmailAddresses); + await WarehouseService.GenerateXlsForMarelliAsync(WzHeader); + } + + Visibility = true; + } + + private void ScanValue(ChangedEventArgs obj) + { + if (string.IsNullOrWhiteSpace(obj.Value)) return; + if (int.Parse(PalletNumber) <= 0) + { + VisibilityPalletNumber = true; + return; + } + + ScannedValue = obj.Value.Trim(); + + StateHasChanged(); + + TransactionModelsByPartNumber.TryGetValue(obj.Value.Trim(), out List? materialTransactionsByPartNumber); + TransactionModel? materialTransactionByPartNumber = materialTransactionsByPartNumber?.FirstOrDefault(); + + if (materialTransactionByPartNumber != null) + { + FillPalletNumber(materialTransactionByPartNumber, obj.Value.Trim()); + } + + LastScannedValue = ScannedValue; + ScannedValue = string.Empty; + + _scanner.FocusAsync(); + } + + private async Task FillPalletNumber(TransactionModel materialTransactionByPartNumber, string scannedValue) + { + await InvokeAsync(StateHasChanged); + + int palletNumber = int.Parse(PalletNumber); + int rowIndex = WzRowsMarelli.FindIndex(x => x.FaIndex == materialTransactionByPartNumber.ItemNumber && x.Quantity == materialTransactionByPartNumber.Quantity); + + switch (rowIndex) + { + case -1: + { + SelectedRows = WzRowsMarelli.Where(x => x.FaIndex == materialTransactionByPartNumber.ItemNumber).ToList(); + + var validCombinations = FindCombinations(SelectedRows, (int?)materialTransactionByPartNumber.Quantity ?? 0); + + foreach (var combination in validCombinations) + { + foreach (var record in combination) + { + record.PalletNumber = palletNumber; + ChangedRecords.Add(record); + } + } + + SelectedRows.Clear(); + SelectedRows.AddRange(ChangedRecords); + + SelectedRow = SelectedRows.FirstOrDefault(); + + break; + } + default: + { + SelectedRow = WzRowsMarelli[rowIndex]; + + SelectedRow.PalletNumber = palletNumber; + + if (ChangedRecords.All(x => x.TransactionNumber != SelectedRow.TransactionNumber)) + { + ChangedRecords.Add(SelectedRow); + } + + break; + } + } + + await SaveChanges(); + ChangedRecords.Clear(); + + await InvokeAsync(StateHasChanged); + + await _scanner.FocusAsync(); + } + + private async Task>> GetTransactionModels() + { + return await WarehouseService.GetTransactionsModels(); + } + + private async Task UpdateRows(IList changedRecords) + { + await WarehouseService.UpdateWzRowsMarelliAsync(changedRecords); + + WzRowsMarelli = (await WarehouseService.GetWzRowsMarelliByWzHeaderId(WzHeader)).ToList(); + await InvokeAsync(StateHasChanged); + } + + private List> FindCombinations(List records, int targetSum) + { + var result = new List>(); + var currentCombination = new List(); + + void Backtrack(int start, int currentSum) + { + if (currentSum == targetSum) + { + result.Add(new List(currentCombination)); + return; + } + + for (int i = start; i < records.Count; i++) + { + if (currentSum + records[i].Quantity <= targetSum) + { + currentCombination.Add(records[i]); + Backtrack(i + 1, currentSum + records[i].Quantity ?? 0); + currentCombination.RemoveAt(currentCombination.Count - 1); + } + } + } + + Backtrack(0, 0); + return result; + } + + private void ChangeView() + { + NavigationManager.NavigateTo($"/Warehouse/Marelli/PackList/{WzHeader}"); + } +} \ No newline at end of file diff --git a/OrdersManagement/Components/Pages/PackingLists/Meyle/MeylePackList.razor b/OrdersManagement/Components/Pages/PackingLists/Meyle/MeylePackList.razor new file mode 100644 index 0000000..65be4b2 --- /dev/null +++ b/OrdersManagement/Components/Pages/PackingLists/Meyle/MeylePackList.razor @@ -0,0 +1,568 @@ +@page "/Warehouse/Meyle/PackList/{WzHeader:guid}" + +@using OrdersManagement.Models +@using Syncfusion.Blazor.Cards +@using Syncfusion.Blazor.Grids +@using SytelineSaAppEfDataModel.Dtos +@using Syncfusion.Blazor.Navigations +@using Syncfusion.Blazor.Popups +@using Syncfusion.Blazor.Inputs +@using FilterType = Syncfusion.Blazor.Grids.FilterType +@using Syncfusion.Blazor.Buttons +@using SelectionType = Syncfusion.Blazor.Grids.SelectionType + +@inject NavigationManager NavigationManager +@inject WarehouseService WarehouseService + +
+ + +

Packing List

+
+ + + + Zmień widok + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @if (_isValid) + { +

Packing List został wygenerowany i wysłany!

+ } + else if (string.IsNullOrWhiteSpace(EmailAddresses)) + { +

Błąd: Proszę wprowadzić przynajmniej jeden ADRES EMAIL do wysyłki raportu!

+ } + else if (!_isValid) + { +

Błąd: Nie Wszystkie linie mają wypełniony NUMER PALETY.
Packing List nie zostanie + wygenerowany!

+ } +
+
+ + + +
+ + + + +

Błąd skanowania! Wystąpił jeden z wyjątków (Zeskanowana wartość '@ScannedValue'):

+
    +
  • Zeskanowano niepoprawny Numer Partii SL (nieistniejący w tabeli)

  • +
  • Zeskanowano niepoprawny numer Partii Meyle (niezaczynający się od + @($"{DateTime.Now.Year - 2000}X"))

  • +
  • Numer Palety nie jest większy niż 0 (aktualnie wybrany numer palety: + '@PalletNumber')

  • +
+
+
+ + + +
+ + + + +

Błąd skanowania! Wybierz NUMER PALETY większy niż 0 (Aktualnie '@PalletNumber'):

+
+
+ + + +
+ + + + + + + + + + + + + + + + FA Krosno Manager © @(DateTime.Now.Year) + +
+
+ +@code { + [Parameter] public Guid WzHeader { get; set; } + + private SfGrid _grid; + private List WzRowsMeyle { get; set; } = new(); + private IDictionary> TransactionModelsByPartNumber { get; set; } = new Dictionary>(); + private List ChangedRecords = new(); + private WzHeaderDto _wzHeader; + private SfTextBox _scanner; + + private WzRowMeyleDto? SelectedRow { get; set; } + private List SelectedRows { get; set; } = new(); + + private string WzNumber { get; set; } = string.Empty; + + private bool _isValid; + + private bool Visibility { get; set; } + private bool VisibilityValidation { get; set; } + private bool VisibilityLineSplitter { get; set; } + public bool VisibilityPalletNumber { get; set; } + + private string? EmailAddresses { get; set; } = string.Empty; + private string PalletNumber { get; set; } = "0"; + + private string LastScannedValue { get; set; } = string.Empty; + private string ScannedValue { get; set; } = string.Empty; + + private string NewQuantity { get; set; } = "0"; + + private bool IsDisabled => SelectedRow == null; + + private void HideModal() + { + Visibility = false; + VisibilityValidation = false; + VisibilityLineSplitter = false; + VisibilityPalletNumber = false; + + LastScannedValue = ScannedValue; + ScannedValue = string.Empty; + + _scanner.FocusAsync(); + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + _wzHeader = await WarehouseService.GetWzHeaderByIdAsync(WzHeader); + WzRowsMeyle = (await WarehouseService.GetWzRowsMeyleByWzHeaderId(WzHeader)).ToList(); + + TransactionModelsByPartNumber = await GetTransactionModels(); + + EmailAddresses = _wzHeader.EmailAddresses; + + WzNumber = _wzHeader.WzNumbers ?? string.Empty; + + await _scanner.FocusAsync(); + StateHasChanged(); + } + } + + private async Task SaveChanges() + { + if (!string.IsNullOrWhiteSpace(EmailAddresses)) + { + await WarehouseService.AddEmailsToWzHeaderAsync(WzHeader, EmailAddresses); + } + + if (ChangedRecords.Any()) + { + await UpdateRows(ChangedRecords); + } + + await _grid.EndEditAsync(); + } + + private async Task OnBatchSave(BeforeBatchSaveArgs obj) + { + var changes = obj.BatchChanges; + List changedRecords = changes.ChangedRecords; + + if (!changedRecords.Any()) return; + + await UpdateRows(changedRecords); + } + + private async Task ExportXls() + { + int count = WzRowsMeyle.Count(x => x.PalletNumber == null); + + _isValid = count == 0; + _isValid = _isValid && !string.IsNullOrWhiteSpace(EmailAddresses); + + if (_isValid) + { + await WarehouseService.AddEmailsToWzHeaderAsync(WzHeader, EmailAddresses); + await WarehouseService.GenerateXlsForMeyleAsync(WzHeader); + } + + Visibility = true; + } + + private void ScanValue(ChangedEventArgs obj) + { + if (string.IsNullOrWhiteSpace(obj.Value)) return; + if (int.Parse(PalletNumber) <= 0) + { + VisibilityPalletNumber = true; + return; + } + + ScannedValue = obj.Value.Trim(); + + StateHasChanged(); + + TransactionModelsByPartNumber.TryGetValue(obj.Value.Trim(), out List? materialTransactionsByPartNumber); + TransactionModel? materialTransactionByPartNumber = materialTransactionsByPartNumber?.FirstOrDefault(); + + if (materialTransactionByPartNumber == null && IsValidScannedValue(obj.Value)) + { + FillMeylePartNumber(ScannedValue); + + LastScannedValue = ScannedValue; + ScannedValue = string.Empty; + + return; + } + + _grid.Query = null; + _grid.ClearFilteringAsync(); + + if (materialTransactionByPartNumber != null) + { + SelectedRows.Clear(); + FillFaPartNumberAndPalletNumber(materialTransactionByPartNumber, obj.Value.Trim()); + } + + if (materialTransactionByPartNumber == null) + { + ShowValidationMessage(); + return; + } + + LastScannedValue = ScannedValue; + ScannedValue = string.Empty; + + _scanner.FocusAsync(); + } + + private bool IsValidScannedValue(string scannedValue) + { + int year = DateTime.Now.Year - 2000; + + string format = $"{year}X"; + + return scannedValue.StartsWith(format); + } + + private async Task FillMeylePartNumber(string scannedValue) + { + var rowIndex = WzRowsMeyle.FindIndex(x => x.FaIndex == SelectedRow?.FaIndex && x.Quantity == SelectedRow?.Quantity); + + if (SelectedRow != null && !SelectedRows.Any()) + { + SelectedRow.PartNumber = scannedValue; + ChangedRecords.Add(SelectedRow); + } + + foreach (WzRowMeyleDto wzRowMeyleDto in SelectedRows) + { + wzRowMeyleDto.PartNumber = scannedValue; + ChangedRecords.Add(wzRowMeyleDto); + } + + await SaveChanges(); + + ChangedRecords.Clear(); + SelectedRows.Clear(); + + FocusGridRow(rowIndex); + await _scanner.FocusAsync(); + } + + private async Task FillFaPartNumberAndPalletNumber(TransactionModel materialTransactionByPartNumber, string scannedValue) + { + await _grid.ClearSelectionAsync(); + await _grid.Refresh(); + await InvokeAsync(StateHasChanged); + + List selectedIndices = new List(); + int palletNumber = int.Parse(PalletNumber); + int rowIndex = WzRowsMeyle.FindIndex(x => x.FaIndex == materialTransactionByPartNumber.ItemNumber && x.Quantity == materialTransactionByPartNumber.Quantity); + + switch (rowIndex) + { + case -1: + { + SelectedRows = WzRowsMeyle.Where(x => x.FaIndex == materialTransactionByPartNumber.ItemNumber).ToList(); + + if (SelectedRows.Count == 0) + { + ShowValidationMessage(); + return; + } + + rowIndex = WzRowsMeyle.FindIndex(x => x.FaIndex == SelectedRows.First().FaIndex && x.Quantity == SelectedRows.First().Quantity); + + var validCombinations = FindCombinations(SelectedRows, (int?)materialTransactionByPartNumber.Quantity ?? 0); + + foreach (var combination in validCombinations) + { + foreach (var record in combination) + { + record.PartNumberSl = scannedValue; + record.PalletNumber = palletNumber; + ChangedRecords.Add(record); + + int index = WzRowsMeyle.IndexOf(record); + + if (index >= 0) + { + selectedIndices.Add(index); + } + } + } + + SelectedRows.Clear(); + SelectedRows.AddRange(ChangedRecords); + + SelectedRow = SelectedRows.FirstOrDefault(); + + await ApplyFilter(ChangedRecords); + + break; + } + default: + { + SelectedRow = WzRowsMeyle[rowIndex]; + selectedIndices.Add(rowIndex); + + SelectedRow.PartNumberSl = scannedValue; + SelectedRow.PalletNumber = palletNumber; + + if (ChangedRecords.All(x => x.TransactionNumber != SelectedRow.TransactionNumber)) + { + ChangedRecords.Add(SelectedRow); + } + + break; + } + } + + await SaveChanges(); + ChangedRecords.Clear(); + + if (selectedIndices.Any()) + { + await _grid.SelectRowsAsync(selectedIndices.ToArray()); + } + + await _grid.Refresh(); + await InvokeAsync(StateHasChanged); + + FocusGridRow(rowIndex); + await _scanner.FocusAsync(); + } + + private void FocusGridRow(int rowIndex) + { + if (_grid.AllowPaging) + { + int pageSize = _grid.PageSettings.PageSize; + int targetPage = (rowIndex / pageSize) + 1; + _grid.GoToPageAsync(targetPage); + + rowIndex %= pageSize; + } + + _grid.SelectRowAsync(rowIndex); + _grid.ScrollIntoViewAsync(rowIndex: rowIndex); + _grid.FocusAsync(); + } + + private void ShowValidationMessage() + { + VisibilityValidation = true; + + ChangedRecords.Clear(); + _scanner.FocusAsync(); + } + + private async Task>> GetTransactionModels() + { + return await WarehouseService.GetTransactionsModels(); + } + + private async Task UpdateRows(IList changedRecords) + { + await WarehouseService.UpdateWzRowsMeyleAsync(changedRecords); + + WzRowsMeyle = (await WarehouseService.GetWzRowsMeyleByWzHeaderId(WzHeader)).ToList(); + await InvokeAsync(StateHasChanged); + await _grid.Refresh(); + } + + private async Task SplitLine(MouseEventArgs arg) + { + int newQuantity = int.Parse(NewQuantity); + + if (newQuantity > 0 && SelectedRow != null) + { + WzRowMeyleDto splitRow = new WzRowMeyleDto + { + ID = Guid.NewGuid(), + FK_Header = SelectedRow.FK_Header, + Quantity = newQuantity, + FaIndex = SelectedRow.FaIndex, + ItemNumber = SelectedRow.ItemNumber, + OrderNumber = SelectedRow.OrderNumber, + PalletNumber = SelectedRow.PalletNumber, + WzNumber = SelectedRow.WzNumber, + TransactionNumber = SelectedRow.TransactionNumber += 10000, + PartNumberSl = SelectedRow.PartNumberSl, + PartNumber = SelectedRow.PartNumber + }; + + WzRowsMeyle.Add(splitRow); + SelectedRow.Quantity -= newQuantity; + + ChangedRecords.Add(SelectedRow); + + await WarehouseService.CreateWzRowsMeyleAsync(new List { splitRow }); + await UpdateRows(ChangedRecords); + } + + VisibilityLineSplitter = false; + } + + private void ShowSplitDialog(ClickEventArgs obj) + { + VisibilityLineSplitter = true; + NewQuantity = "0"; + } + + private void OnRowSelected(RowSelectEventArgs obj) + { + SelectedRow = obj.Data; + } + + private List> FindCombinations(List records, int targetSum) + { + var result = new List>(); + var currentCombination = new List(); + + void Backtrack(int start, int currentSum) + { + if (currentSum == targetSum) + { + result.Add(new List(currentCombination)); + return; + } + + for (int i = start; i < records.Count; i++) + { + if (currentSum + records[i].Quantity <= targetSum) + { + currentCombination.Add(records[i]); + Backtrack(i + 1, currentSum + records[i].Quantity ?? 0); + currentCombination.RemoveAt(currentCombination.Count - 1); + } + } + } + + Backtrack(0, 0); + return result; + } + + private async Task ApplyFilter(IList selectedRecords) + { + await _grid.FilterByColumnAsync(nameof(WzRowMeyleDto.FaIndex), "equal", selectedRecords.First().FaIndex); + } + + private void ChangeView() + { + NavigationManager.NavigateTo($"/Warehouse/Meyle/PackList/{WzHeader}/Simple"); + } +} \ No newline at end of file diff --git a/OrdersManagement/Components/Pages/PackingLists/Meyle/MeylePacklistSimple.razor b/OrdersManagement/Components/Pages/PackingLists/Meyle/MeylePacklistSimple.razor new file mode 100644 index 0000000..855edbe --- /dev/null +++ b/OrdersManagement/Components/Pages/PackingLists/Meyle/MeylePacklistSimple.razor @@ -0,0 +1,424 @@ +@page "/Warehouse/Meyle/PackList/{WzHeader:guid}/Simple" +@using OrdersManagement.Models +@using Syncfusion.Blazor.Cards +@using Syncfusion.Blazor.Grids +@using SytelineSaAppEfDataModel.Dtos +@using Syncfusion.Blazor.Popups +@using Syncfusion.Blazor.Inputs +@using Syncfusion.Blazor.Buttons + +@inject NavigationManager NavigationManager +@inject WarehouseService WarehouseService + +
+ + +

Packing List

+
+ + + + Zmień widok + Generuj XLS i Wyślij + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @if (_isValid) + { +

Packing List został wygenerowany i wysłany!

+ } + else if (string.IsNullOrWhiteSpace(EmailAddresses)) + { +

Błąd: Proszę wprowadzić przynajmniej jeden ADRES EMAIL do wysyłki raportu!

+ } + else if (!_isValid) + { +

Błąd: Nie Wszystkie linie mają wypełniony NUMER PALETY.
Packing List nie zostanie + wygenerowany!

+ } +
+
+ + + +
+ + + + +

Błąd skanowania! Wystąpił jeden z wyjątków (Zeskanowana wartość '@ScannedValue'):

+
    +
  • Zeskanowano niepoprawny Numer Partii SL (nieistniejący w tabeli)

  • +
  • Zeskanowano niepoprawny numer Partii Meyle (niezaczynający się od + @($"{DateTime.Now.Year - 2000}X"))

  • +
  • Numer Palety nie jest większy niż 0 (aktualnie wybrany numer palety: + '@PalletNumber')

  • +
+
+
+ + + +
+ + + + +

Błąd skanowania! Wybierz NUMER PALETY większy niż 0 (Aktualnie '@PalletNumber'):

+
+
+ + + +
+ + + FA Krosno Manager © @(DateTime.Now.Year) + +
+
+ +@code { + [Parameter] public Guid WzHeader { get; set; } + + private List WzRowsMeyle { get; set; } = new(); + private IDictionary> TransactionModelsByPartNumber { get; set; } = new Dictionary>(); + private List ChangedRecords = new(); + private WzHeaderDto _wzHeader; + private SfTextBox _scanner; + + private string ItemNumber { get; set; } = string.Empty; + private string Qty { get; set; } = "0"; + private string PalletNumberOutput { get; set; } = "0"; + private string PartNumberSl { get; set; } = string.Empty; + private string PartNumberMeyle { get; set; } = string.Empty; + + private string WzNumber { get; set; } = string.Empty; + + private WzRowMeyleDto? SelectedRow { get; set; } + private List SelectedRows { get; set; } = new(); + + private bool _isValid; + + private bool Visibility { get; set; } + private bool VisibilityValidation { get; set; } + private bool VisibilityLineSplitter { get; set; } + public bool VisibilityPalletNumber { get; set; } + + private string? EmailAddresses { get; set; } = string.Empty; + private string PalletNumber { get; set; } = "0"; + + private string LastScannedValue { get; set; } = string.Empty; + private string ScannedValue { get; set; } = string.Empty; + + private void HideModal() + { + Visibility = false; + VisibilityValidation = false; + VisibilityLineSplitter = false; + VisibilityPalletNumber = false; + + LastScannedValue = ScannedValue; + ScannedValue = string.Empty; + + _scanner.FocusAsync(); + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + _wzHeader = await WarehouseService.GetWzHeaderByIdAsync(WzHeader); + WzRowsMeyle = (await WarehouseService.GetWzRowsMeyleByWzHeaderId(WzHeader)).ToList(); + + TransactionModelsByPartNumber = await GetTransactionModels(); + + EmailAddresses = _wzHeader.EmailAddresses; + + WzNumber = _wzHeader.WzNumbers ?? string.Empty; + + await _scanner.FocusAsync(); + StateHasChanged(); + } + } + + private async Task SaveChanges() + { + if (!string.IsNullOrWhiteSpace(EmailAddresses)) + { + await WarehouseService.AddEmailsToWzHeaderAsync(WzHeader, EmailAddresses); + } + + if (ChangedRecords.Any()) + { + await UpdateRows(ChangedRecords); + } + } + + private async Task OnBatchSave(BeforeBatchSaveArgs obj) + { + var changes = obj.BatchChanges; + List changedRecords = changes.ChangedRecords; + + if (!changedRecords.Any()) return; + + await UpdateRows(changedRecords); + } + + private async Task ExportXls() + { + int count = WzRowsMeyle.Count(x => x.PalletNumber == null); + + _isValid = count == 0; + _isValid = _isValid && !string.IsNullOrWhiteSpace(EmailAddresses); + + if (_isValid) + { + await WarehouseService.AddEmailsToWzHeaderAsync(WzHeader, EmailAddresses); + await WarehouseService.GenerateXlsForMeyleAsync(WzHeader); + } + + Visibility = true; + } + + private void ScanValue(ChangedEventArgs obj) + { + if (string.IsNullOrWhiteSpace(obj.Value)) return; + if (int.Parse(PalletNumber) <= 0) + { + VisibilityPalletNumber = true; + return; + } + + ScannedValue = obj.Value.Trim(); + + StateHasChanged(); + + TransactionModelsByPartNumber.TryGetValue(obj.Value.Trim(), out List? materialTransactionsByPartNumber); + TransactionModel? materialTransactionByPartNumber = materialTransactionsByPartNumber?.FirstOrDefault(); + + if (materialTransactionByPartNumber == null && IsValidScannedValue(obj.Value)) + { + FillMeylePartNumber(ScannedValue); + + LastScannedValue = ScannedValue; + ScannedValue = string.Empty; + + return; + } + + if (materialTransactionByPartNumber != null) + { + FillFaPartNumberAndPalletNumber(materialTransactionByPartNumber, obj.Value.Trim()); + } + + if (materialTransactionByPartNumber == null) + { + ShowValidationMessage(); + return; + } + + LastScannedValue = ScannedValue; + ScannedValue = string.Empty; + + _scanner.FocusAsync(); + } + + private bool IsValidScannedValue(string scannedValue) + { + int year = DateTime.Now.Year - 2000; + + string format = $"{year}X"; + + return scannedValue.StartsWith(format); + } + + private async Task FillMeylePartNumber(string scannedValue) + { + if (SelectedRow != null && !SelectedRows.Any()) + { + SelectedRow.PartNumber = scannedValue; + ChangedRecords.Add(SelectedRow); + + PartNumberMeyle = scannedValue; + } + + foreach (WzRowMeyleDto wzRowMeyleDto in SelectedRows) + { + wzRowMeyleDto.PartNumber = scannedValue; + ChangedRecords.Add(wzRowMeyleDto); + } + + await SaveChanges(); + + ChangedRecords.Clear(); + SelectedRows.Clear(); + + await _scanner.FocusAsync(); + } + + private async Task FillFaPartNumberAndPalletNumber(TransactionModel materialTransactionByPartNumber, string scannedValue) + { + await InvokeAsync(StateHasChanged); + + int palletNumber = int.Parse(PalletNumber); + int rowIndex = WzRowsMeyle.FindIndex(x => x.FaIndex == materialTransactionByPartNumber.ItemNumber && x.Quantity == materialTransactionByPartNumber.Quantity); + + switch (rowIndex) + { + case -1: + { + SelectedRows = WzRowsMeyle.Where(x => x.FaIndex == materialTransactionByPartNumber.ItemNumber).ToList(); + + if (SelectedRows.Count == 0) + { + ShowValidationMessage(); + return; + } + + var validCombinations = FindCombinations(SelectedRows, (int?)materialTransactionByPartNumber.Quantity ?? 0); + + foreach (var combination in validCombinations) + { + foreach (var record in combination) + { + record.PartNumberSl = scannedValue; + record.PalletNumber = palletNumber; + ChangedRecords.Add(record); + } + } + + SelectedRows.Clear(); + SelectedRows.AddRange(ChangedRecords); + + SelectedRow = SelectedRows.FirstOrDefault(); + + break; + } + default: + { + SelectedRow = WzRowsMeyle[rowIndex]; + + SelectedRow.PartNumberSl = scannedValue; + SelectedRow.PalletNumber = palletNumber; + + if (ChangedRecords.All(x => x.TransactionNumber != SelectedRow.TransactionNumber)) + { + ChangedRecords.Add(SelectedRow); + } + + break; + } + } + + PartNumberSl = SelectedRow?.PartNumberSl ?? string.Empty; + PalletNumberOutput = SelectedRow?.PalletNumber.ToString() ?? "0"; + ItemNumber = SelectedRow?.FaIndex ?? string.Empty; + Qty = SelectedRow?.Quantity.ToString() ?? "0"; + + await SaveChanges(); + ChangedRecords.Clear(); + await _scanner.FocusAsync(); + } + + private void ShowValidationMessage() + { + VisibilityValidation = true; + + ChangedRecords.Clear(); + _scanner.FocusAsync(); + } + + private async Task>> GetTransactionModels() + { + return await WarehouseService.GetTransactionsModels(); + } + + private async Task UpdateRows(IList changedRecords) + { + await WarehouseService.UpdateWzRowsMeyleAsync(changedRecords); + + WzRowsMeyle = (await WarehouseService.GetWzRowsMeyleByWzHeaderId(WzHeader)).ToList(); + await InvokeAsync(StateHasChanged); + } + + private List> FindCombinations(List records, int targetSum) + { + var result = new List>(); + var currentCombination = new List(); + + void Backtrack(int start, int currentSum) + { + if (currentSum == targetSum) + { + result.Add(new List(currentCombination)); + return; + } + + for (int i = start; i < records.Count; i++) + { + if (currentSum + records[i].Quantity <= targetSum) + { + currentCombination.Add(records[i]); + Backtrack(i + 1, currentSum + records[i].Quantity ?? 0); + currentCombination.RemoveAt(currentCombination.Count - 1); + } + } + } + + Backtrack(0, 0); + return result; + } + + private void ChangeView() + { + NavigationManager.NavigateTo($"/Warehouse/Meyle/PackList/{WzHeader}"); + } +} \ No newline at end of file diff --git a/OrdersManagement/Components/Pages/Products.razor b/OrdersManagement/Components/Pages/Products.razor index 3ef59a6..3f836cc 100644 --- a/OrdersManagement/Components/Pages/Products.razor +++ b/OrdersManagement/Components/Pages/Products.razor @@ -18,7 +18,7 @@ Toolbar="@(new List { "Update" })"> - + diff --git a/OrdersManagement/Components/Pages/ScheduleOrder.razor b/OrdersManagement/Components/Pages/ScheduleOrder.razor index 0488fc9..b037b11 100644 --- a/OrdersManagement/Components/Pages/ScheduleOrder.razor +++ b/OrdersManagement/Components/Pages/ScheduleOrder.razor @@ -12,7 +12,7 @@
-

Zamówienie DELFOR nr @(ScheduleOrderDto?.PONum ?? "Brak numeru")

+

Zamówienie DELFOR nr @(ScheduleOrderDto?.PONum ?? "Brak numeru") (ID: @ScheduleOrderDto?.ID)

? scheduleOrderDetailMiscs = (@context as ScheduleOrderDetailDto)?.ScheduleOrderDetailMiscs; IList? scheduleOrderDetailDetails = (@context as ScheduleOrderDetailDto)?.ScheduleOrderDetailDetails; - + - - - - - - + @@ -67,18 +67,18 @@ AdaptiveUIMode="AdaptiveMode.Both"> + HeaderText="Numer Zamówienia" Width="100" AllowResizing="true"> + Width="100" AllowResizing="true"> + HeaderText="Odbiorca" Width="100" AllowResizing="true"> + AllowFiltering="true" AllowResizing="true"> + HeaderText="Pozycja Klienta" Width="100" AllowResizing="true"> + HeaderText="Pozycja" Width="100" AllowResizing="true"> @@ -94,17 +94,17 @@ AdaptiveUIMode="AdaptiveMode.Both"> + HeaderText="Data Od" Width="100" AllowResizing="true"> + HeaderText="Data Do" Width="100" AllowResizing="true"> + Width="50" AllowResizing="true"> + Width="50" AllowResizing="true"> + HeaderText="Opis Typu" Width="100" AllowResizing="true"> @@ -210,7 +210,7 @@ private void OnRowDataBound(RowDataBoundEventArgs args) { - if (args.Data.QtyType == "83" || args.Data.QtyType == "84") + if (new[] { "54", "83", "84" }.Any(x => x == args.Data.QtyType)) { args.Row.AddClass(["highlight-red"]); } diff --git a/OrdersManagement/Components/Pages/Warehouse.razor b/OrdersManagement/Components/Pages/Warehouse.razor new file mode 100644 index 0000000..0214ac5 --- /dev/null +++ b/OrdersManagement/Components/Pages/Warehouse.razor @@ -0,0 +1,280 @@ +@page "/Warehouse" + +@using Blazored.LocalStorage +@using Syncfusion.Blazor.Cards +@using Syncfusion.Blazor.Grids +@using SytelineSaAppEfDataModel.Dtos +@using Syncfusion.Blazor.DropDowns +@using FilterType = Syncfusion.Blazor.Grids.FilterType +@using SelectionMode = Syncfusion.Blazor.Grids.SelectionMode +@using Syncfusion.Blazor.Navigations +@using Syncfusion.Blazor.Popups + +@inject WarehouseService WarehouseService +@inject NavigationManager NavigationManager +@inject ILocalStorageService LocalStorage + +
+ + +

Dokumenty WZ na Magazynie

+
+ +
Klient
+ + + + + @if (_isVisible) + { + + +
Dokumenty WZ
+
+ + + + + + + + + + + + + + + + + +
+ + +
Packling Listy
+
+ + + + + + + + + + + + + +
+ } +
+ + + + +

Błąd: Zaznacz przynajmniej jeden rekord, żeby wygenerowac Pack List!

+
+
+ + + +
+ + + + +

Błąd: Dla zaznaczonego rekordu istnieje już PackingList!

+
+
+ + + +
+ + + FA Krosno Manager © @(DateTime.Now.Year) + +
+
+ +@code { + private SfGrid _grid; + private IEnumerable _clients = new List(); + private IEnumerable _materialTransactions = new List(); + private IEnumerable _dataSource = new List(); + private IEnumerable _wzHeaders = new List(); + + private WzClientDto? _selectedClient; + + private WzHeaderDto? _selectedHeader; + private SfDropDownList _dropdown; + private bool _isVisible; + + private bool Visibility { get; set; } + private bool VisibilityError { get; set; } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + _clients = await WarehouseService.GetAllClientsAsync(); + _clients = _clients.Where(x => new[] { "MAGNETI MARELLI", "MEYLE" }.Any(y => y.Equals(x.Name, StringComparison.OrdinalIgnoreCase))).ToList(); + + StateHasChanged(); + + var savedClientId = await LocalStorage.GetItemAsync("SelectedClientId"); + + if (savedClientId != null && _clients.FirstOrDefault(c => c.ID == savedClientId) is {} savedClient) + { + await OnValueChange(new ChangeEventArgs() { Value = savedClient.ID }); + StateHasChanged(); + } + } + } + + private async Task OnValueChange(ChangeEventArgs args) + { + if (args.Value.HasValue) + { + _selectedClient = args.ItemData ?? _clients.FirstOrDefault(x => x.ID == args.Value); + + if (_selectedClient == null) { return; } + + _isVisible = true; + _materialTransactions = await WarehouseService.GetAllClientWzsAsync(_selectedClient.CustomerNumber, _selectedClient.CustomerSequence ?? 0); + _dataSource = _materialTransactions.GroupBy(x => x.MTGroupNum).Select(x => x.First()).ToList(); + _wzHeaders = await WarehouseService.GetAllClientWzHeadersAsync(_selectedClient.CustomerNumber, _selectedClient.CustomerSequence ?? 0); + + await LocalStorage.SetItemAsync("SelectedClientId", _selectedClient.ID); + + _dropdown.Value = _selectedClient.ID; + } + else + { + _selectedClient = null; + _isVisible = false; + } + + StateHasChanged(); + } + + private void OnRowDoubleClick(RecordDoubleClickEventArgs obj) + { + if (_selectedClient is null) return; + + Guid headerId = obj.RowData.ID; + + NavigationManager.NavigateTo($"/Warehouse/{_selectedClient.ShortName}/PackList/" + headerId); + } + + private async Task CreatePackingList() + { + var selectedRecords = await _grid.GetSelectedRecordsAsync(); + + if (!selectedRecords.Any()) + { + Visibility = true; + return; + } + + string wzNumbers = string.Join(", ",selectedRecords.Select(x => x.MTGroupNum).Distinct()); + + if (_wzHeaders.Any(x => x.WzNumbers == wzNumbers)) + { + VisibilityError = true; + return; + } + + WzHeaderDto wzHeader = new WzHeaderDto + { + ID = Guid.NewGuid(), + FK_Client = _selectedClient?.ID, + CreatedDate = DateTime.Now, + WzNumbers = wzNumbers + }; + + await WarehouseService.CreateWzHeaderAsync(wzHeader); + + switch (_selectedClient?.ShortName.ToUpper()) + { + case "MEYLE": + IList meyleRows = new List(); + IList meyleMaterialTransactions = _materialTransactions.Where(x => selectedRecords.Any(y => y.MTGroupNum == x.MTGroupNum)).ToList(); + + foreach (MaterialTransactionDto materialTransactionDto in meyleMaterialTransactions) + { + CustomerOrderDto customerOrder = await WarehouseService.GetCustomerOrder(materialTransactionDto.RefNum ?? string.Empty); + ItemCustDto item = await WarehouseService.GetItem(materialTransactionDto.Item ?? string.Empty, customerOrder.CustNum); + + meyleRows.Add(new WzRowMeyleDto + { + ID = Guid.NewGuid(), + Quantity = Math.Abs((int?)materialTransactionDto.Qty ?? 0), + ItemNumber = item.CustItem, + OrderNumber = customerOrder.CustPo, + WzNumber = materialTransactionDto.MTGroupNum ?? string.Empty, + FK_Header = wzHeader.ID, + TransactionNumber = (int?)materialTransactionDto.TransNum ?? 0, + PartNumberSl = materialTransactionDto.NR_KARTY_KONTROLNEJ, + FaIndex = item.Item + }); + } + + await WarehouseService.CreateWzRowsMeyleAsync(meyleRows); + + NavigationManager.NavigateTo("/Warehouse/Meyle/PackList/" + wzHeader.ID); + + break; + case "MARELLI": + IList marelliRows = new List(); + IList marelliMaterialTransactions = _materialTransactions.Where(x => selectedRecords.Any(y => y.MTGroupNum == x.MTGroupNum)).ToList(); + + foreach (MaterialTransactionDto materialTransactionDto in marelliMaterialTransactions) + { + CustomerOrderDto customerOrder = await WarehouseService.GetCustomerOrder(materialTransactionDto.RefNum ?? string.Empty); + ItemCustDto item = await WarehouseService.GetItem(materialTransactionDto.Item ?? string.Empty, customerOrder.CustNum); + + marelliRows.Add(new WzRowMarelliDto + { + ID = Guid.NewGuid(), + Quantity = Math.Abs((int?)materialTransactionDto.Qty ?? 0), + ItemNumber = item.CustItem, + OrderNumber = customerOrder.CustPo, + WzNumber = materialTransactionDto.MTGroupNum ?? string.Empty, + FKHeader = wzHeader.ID, + TransactionNumber = (int?)materialTransactionDto.TransNum ?? 0, + Type = "MIX", + FaIndex = item.Item, + EngineerNumber = item.Uf_FKR_CustItem2 + }); + } + + await WarehouseService.CreateWzRowsMarelliAsync(marelliRows); + + NavigationManager.NavigateTo("/Warehouse/Marelli/PackList/" + wzHeader.ID); + + break; + } + } + + private void HideModal() + { + Visibility = false; + VisibilityError = false; + } +} \ No newline at end of file diff --git a/OrdersManagement/Models/RowMeyleModel.cs b/OrdersManagement/Models/RowMeyleModel.cs new file mode 100644 index 0000000..c4ced10 --- /dev/null +++ b/OrdersManagement/Models/RowMeyleModel.cs @@ -0,0 +1,29 @@ +namespace OrdersManagement.Models; + +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 && PartNumberSl == other.PartNumberSl && TransactionNumber == other.TransactionNumber; + } + + public override bool Equals(object? obj) + { + if (obj is null) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != GetType()) return false; + return Equals((RowMeyleModel)obj); + } + + public override int GetHashCode() + { + return HashCode.Combine(ItemNumber, WzNumber, PartNumberSl, TransactionNumber); + } +} \ No newline at end of file diff --git a/OrdersManagement/Models/TransactionModel.cs b/OrdersManagement/Models/TransactionModel.cs new file mode 100644 index 0000000..5348642 --- /dev/null +++ b/OrdersManagement/Models/TransactionModel.cs @@ -0,0 +1,29 @@ +namespace OrdersManagement.Models; + +public class TransactionModel : IEquatable +{ + public string? PartNumber { get; set; } + public string? ItemNumber { get; set; } + public decimal? Quantity { get; set; } + + + public bool Equals(TransactionModel? other) + { + if (other is null) return false; + if (ReferenceEquals(this, other)) return true; + return PartNumber == other.PartNumber; + } + + public override bool Equals(object? obj) + { + if (obj is null) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != GetType()) return false; + return Equals((TransactionModel)obj); + } + + public override int GetHashCode() + { + return PartNumber.GetHashCode(); + } +} \ No newline at end of file diff --git a/OrdersManagement/OrdersManagement.csproj b/OrdersManagement/OrdersManagement.csproj index 8256497..d90a0da 100644 --- a/OrdersManagement/OrdersManagement.csproj +++ b/OrdersManagement/OrdersManagement.csproj @@ -2,6 +2,7 @@ net8.0 + Blazor enable enable @@ -20,12 +21,11 @@ + - - diff --git a/OrdersManagement/Program.cs b/OrdersManagement/Program.cs index 2a820f3..04c31b1 100644 --- a/OrdersManagement/Program.cs +++ b/OrdersManagement/Program.cs @@ -52,6 +52,7 @@ builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); +builder.Services.AddScoped(); var app = builder.Build(); diff --git a/OrdersManagement/Services/HangfireService.cs b/OrdersManagement/Services/HangfireService.cs index 86701c1..05c12e2 100644 --- a/OrdersManagement/Services/HangfireService.cs +++ b/OrdersManagement/Services/HangfireService.cs @@ -28,4 +28,10 @@ public class HangfireService( HttpResponseMessage responseMessage = await PostAsJsonAsync("api/HangfireJobs/delete", taskSchedulerDto); return responseMessage.IsSuccessStatusCode ? 1 : 0; } + + public async Task UpdateTaskSchedulerAsync(TaskSchedulerDto taskSchedulerDto) + { + HttpResponseMessage responseMessage = await PostAsJsonAsync("api/HangfireJobs/update", taskSchedulerDto); + return responseMessage.IsSuccessStatusCode ? 1 : 0; + } } \ No newline at end of file diff --git a/OrdersManagement/Services/WarehouseService.cs b/OrdersManagement/Services/WarehouseService.cs new file mode 100644 index 0000000..e82fd52 --- /dev/null +++ b/OrdersManagement/Services/WarehouseService.cs @@ -0,0 +1,187 @@ +using System.Net; +using System.Web; +using OrdersManagement.Models; +using SytelineSaAppEfDataModel.Dtos; + +namespace OrdersManagement.Services; + +public class WarehouseService(IHttpClientFactory httpClientFactory) +{ + private readonly HttpClient _httpClient = httpClientFactory.CreateClient("FaKrosnoApi"); + + public async Task GetWzHeaderByIdAsync(Guid wzHeaderId) + { + var response = await _httpClient.GetAsync($"api/WzHeader/by-id?id={wzHeaderId}"); + response.EnsureSuccessStatusCode(); + return await response.Content.ReadFromJsonAsync(); + } + + public async Task> GetAllClientsAsync() + { + var response = await _httpClient.GetAsync($"api/WzClient"); + response.EnsureSuccessStatusCode(); + return await response.Content.ReadFromJsonAsync>(); + } + + public async Task> GetAllClientWzsAsync(string customerNumber, int customerSequence) + { + var response = await _httpClient.GetAsync( + $"api/WzHeader/by-customer-number?customerNumber={customerNumber}&customerSequence={customerSequence}"); + response.EnsureSuccessStatusCode(); + 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( + $"api/WzHeader/all-wz-headers?customerNumber={customerNumber}&customerSequence={customerSequence}"); + response.EnsureSuccessStatusCode(); + return await response.Content.ReadFromJsonAsync>(); + } + + public async Task CreateWzHeaderAsync(WzHeaderDto wzHeader) + { + var response = await _httpClient.PostAsJsonAsync("api/WzHeader", wzHeader); + response.EnsureSuccessStatusCode(); + if (response.StatusCode != System.Net.HttpStatusCode.Created) + { + throw new Exception("Failed to create WzHeader"); + } + } + + public async Task CreateWzRowsMeyleAsync(IEnumerable wzRowsMeyle) + { + if (wzRowsMeyle == null || !wzRowsMeyle.Any()) + { + throw new ArgumentException("No rows provided to create."); + } + + var response = await _httpClient.PostAsJsonAsync("api/WzRowMeyle", wzRowsMeyle); + if (!response.IsSuccessStatusCode) + { + var errorContent = await response.Content.ReadAsStringAsync(); + throw new HttpRequestException($"Failed to create WzRowMeyle: {response.StatusCode}, Content: {errorContent}"); + } + } + + public async Task CreateWzRowsMarelliAsync(IEnumerable wzRowsMarelli) + { + if (wzRowsMarelli == null || !wzRowsMarelli.Any()) + { + throw new ArgumentException("No rows provided to create."); + } + + var response = await _httpClient.PostAsJsonAsync("api/WzRowMarelli", wzRowsMarelli); + if (!response.IsSuccessStatusCode) + { + var errorContent = await response.Content.ReadAsStringAsync(); + throw new HttpRequestException($"Failed to create WzRowMarelli: {response.StatusCode}, Content: {errorContent}"); + } + } + + public async Task GetCustomerOrder(string customerOrderNumber) + { + var response = await _httpClient.GetAsync( + $"api/CustomerOrders/by-co-number/?customerOrderNumber={customerOrderNumber}"); + response.EnsureSuccessStatusCode(); + return await response.Content.ReadFromJsonAsync(); + } + + public async Task GetItem(string itemNumber, string customerNumber) + { + var response = await _httpClient.GetAsync( + $"api/ItemCust?itemNumber={itemNumber}&customerNumber={customerNumber}"); + response.EnsureSuccessStatusCode(); + return await response.Content.ReadFromJsonAsync(); + } + + public async Task> GetWzRowsMeyleByWzHeaderId(Guid wzHeaderId) + { + var response = await _httpClient.GetAsync($"api/WzRowMeyle/by-wz-header-id?wzHeaderId={wzHeaderId}"); + response.EnsureSuccessStatusCode(); + return await response.Content.ReadFromJsonAsync>(); + } + + public async Task> GetWzRowsMarelliByWzHeaderId(Guid wzHeaderId) + { + var response = await _httpClient.GetAsync($"api/WzRowMarelli/by-wz-header-id?wzHeaderId={wzHeaderId}"); + response.EnsureSuccessStatusCode(); + return await response.Content.ReadFromJsonAsync>(); + } + + public async Task>> GetTransactionsModels() + { + var response = await _httpClient.GetAsync($"api/WzRowMeyle/transactions-with-part-number"); + response.EnsureSuccessStatusCode(); + IEnumerable materialTransactions = + await response.Content.ReadFromJsonAsync>(); + + return materialTransactions.GroupBy(x => x.NR_KARTY_KONTROLNEJ).ToDictionary(x => x.Key ?? "", + y => y.Select(z => new TransactionModel() { ItemNumber = z.Item, PartNumber = z.NR_KARTY_KONTROLNEJ, Quantity = z.Qty }).ToList()); + } + + public async Task UpdateWzRowsMeyleAsync(IEnumerable wzRowsMeyle) + { + if (wzRowsMeyle == null || !wzRowsMeyle.Any()) + { + throw new ArgumentException("No rows provided to update."); + } + + var response = await _httpClient.PutAsJsonAsync("api/WzRowMeyle", wzRowsMeyle); + response.EnsureSuccessStatusCode(); + } + + public async Task UpdateWzRowsMarelliAsync(IEnumerable wzRowsMarelli) + { + if (wzRowsMarelli == null || !wzRowsMarelli.Any()) + { + throw new ArgumentException("No rows provided to update."); + } + + var response = await _httpClient.PutAsJsonAsync("api/WzRowMarelli", wzRowsMarelli); + response.EnsureSuccessStatusCode(); + } + + public async Task GenerateXlsForMeyleAsync(Guid wzHeaderId) + { + var response = await _httpClient.GetAsync($"api/ExcelGenerator/generate-meyle?packListId={wzHeaderId}"); + response.EnsureSuccessStatusCode(); + if (response.StatusCode != HttpStatusCode.OK) + { + throw new Exception("Failed to generate XLS for Mayle"); + } + } + + public async Task GenerateXlsForMarelliAsync(Guid wzHeaderId) + { + var response = await _httpClient.GetAsync($"api/ExcelGenerator/generate-marelli?packListId={wzHeaderId}"); + response.EnsureSuccessStatusCode(); + if (response.StatusCode != HttpStatusCode.OK) + { + throw new Exception("Failed to generate XLS for Marelli"); + } + } + + public async Task AddEmailsToWzHeaderAsync(Guid wzHeaderId, string? emailAddresses) + { + var response = await _httpClient.PostAsJsonAsync( + $"api/WzHeader/add-emails?id={wzHeaderId}", + emailAddresses); + + response.EnsureSuccessStatusCode(); + } +} \ No newline at end of file diff --git a/OrdersManagementDataModel/OrdersManagementDataModel.csproj b/OrdersManagementDataModel/OrdersManagementDataModel.csproj index 8e0703a..a159008 100644 --- a/OrdersManagementDataModel/OrdersManagementDataModel.csproj +++ b/OrdersManagementDataModel/OrdersManagementDataModel.csproj @@ -2,6 +2,7 @@ net8.0 + DataModel enable enable diff --git a/SytelineSaAppEfDataModel/Dtos/CustomerDto.cs b/SytelineSaAppEfDataModel/Dtos/CustomerDto.cs new file mode 100644 index 0000000..f9b5cfa --- /dev/null +++ b/SytelineSaAppEfDataModel/Dtos/CustomerDto.cs @@ -0,0 +1,132 @@ +namespace SytelineSaAppEfDataModel.Dtos; + +public class CustomerDto : DtoBase +{ + public string CustNum { get; set; } + public int CustSeq { get; set; } + public string? Contact1 { get; set; } + public string? Contact2 { get; set; } + public string? Contact3 { get; set; } + public string Phone1 { get; set; } + public string Phone2 { get; set; } + public string Phone3 { get; set; } + public string CustType { get; set; } + public string TermsCode { get; set; } + public string ShipCode { get; set; } + public string Slsman { get; set; } + public string StateCycle { get; set; } + public bool FinChg { get; set; } + public DateTime? LastInv { get; set; } + public DateTime? LastPaid { get; set; } + public decimal? SalesYtd { get; set; } + public decimal? SalesLstYr { get; set; } + public decimal? DiscYtd { get; set; } + public decimal? DiscLstYr { get; set; } + public DateTime? LastFinChg { get; set; } + public decimal? SalesPtd { get; set; } + public DateTime? CalcDate { get; set; } + public short? NumPeriods { get; set; } + public short? AvgDaysOs { get; set; } + public int? NumInvoices { get; set; } + public int? HistDaysOs { get; set; } + public int? LargDaysOs { get; set; } + public short? LastDaysOs { get; set; } + public decimal? AvgBalOs { get; set; } + public decimal? LargeBalOs { get; set; } + public decimal? LastBalOs { get; set; } + public string? Whse { get; set; } + public string Charfld1 { get; set; } + public string Charfld2 { get; set; } + public string Charfld3 { get; set; } + public decimal? Decifld1 { get; set; } + public decimal? Decifld2 { get; set; } + public decimal? Decifld3 { get; set; } + public bool Logifld { get; set; } + public DateTime? Datefld { get; set; } + public string TaxRegNum1 { get; set; } + public string BankCode { get; set; } + public string TaxRegNum2 { get; set; } + public string PayType { get; set; } + public bool EdiCust { get; set; } + public string BranchId { get; set; } + public string TransNat { get; set; } + public string Delterm { get; set; } + public string ProcessInd { get; set; } + public bool UseExchRate { get; set; } + public string TaxCode1 { get; set; } + public string TaxCode2 { get; set; } + public string Pricecode { get; set; } + public bool ShipEarly { get; set; } + public bool ShipPartial { get; set; } + public string LangCode { get; set; } + public string EndUserType { get; set; } + public string ShipSite { get; set; } + public bool LcrReqd { get; set; } + public string CustBank { get; set; } + public bool DraftPrintFlag { get; set; } + public bool RcvInternalEmail { get; set; } + public string CustomerEmailAddr { get; set; } + public bool SendCustomerEmail { get; set; } + public bool ApsPullUp { get; set; } + public string DoInvoice { get; set; } + public bool Consolidate { get; set; } + public string InvFreq { get; set; } + public bool Summarize { get; set; } + public bool NoteExistsFlag { get; set; } + public DateTime RecordDate { get; set; } + public Guid RowPointer { get; set; } + public bool Einvoice { get; set; } + public decimal? OrderBal { get; set; } + public decimal? PostedBal { get; set; } + public string CreatedBy { get; set; } + public string UpdatedBy { get; set; } + public DateTime CreateDate { get; set; } + public string CrmGuid { get; set; } + public bool InWorkflow { get; set; } + public bool PrintPackInv { get; set; } + public bool OnePackInv { get; set; } + public string InvCategory { get; set; } + public bool IncludeTaxInPrice { get; set; } + public string TransNat2 { get; set; } + public bool UseRevisionPayDays { get; set; } + public int? RevisionDay { get; set; } + public TimeSpan? RevisionDayStartTime1 { get; set; } + public TimeSpan? RevisionDayStartTime2 { get; set; } + public TimeSpan? RevisionDayEndTime1 { get; set; } + public TimeSpan? RevisionDayEndTime2 { get; set; } + public int? PayDay { get; set; } + public TimeSpan? PayDayStartTime1 { get; set; } + public TimeSpan? PayDayStartTime2 { get; set; } + public TimeSpan? PayDayEndTime1 { get; set; } + public TimeSpan? PayDayEndTime2 { get; set; } + public string ExportType { get; set; } + public bool ActiveForDataIntegration { get; set; } + public bool ShowInShipToDropDownList { get; set; } + public bool ShowInDropDownList { get; set; } + public string SicCode { get; set; } + public int? NumberOfEmployees { get; set; } + public decimal? CompanyRevenue { get; set; } + public string TerritoryCode { get; set; } + public string SalesTeamId { get; set; } + public short? DaysShippedBeforeDueDateTolerance { get; set; } + public short? DaysShippedAfterDueDateTolerance { get; set; } + public decimal? ShippedOverOrderedQtyTolerance { get; set; } + public decimal? ShippedUnderOrderedQtyTolerance { get; set; } + public int DefaultShipTo { get; set; } + public bool IncludeOrdersInTaxRpt { get; set; } + public decimal? ConstructiveSalePricePct { get; set; } + public string Uf_ZPL_FedId { get; set; } + public string Uf_ZPL_VATRegisterCode { get; set; } + public int? Uf_INT_CustSeq { get; set; } + public bool Uf_INT_Replicate { get; set; } + public int? Uf_FKR_FA_SL_SYKOF { get; set; } + public bool? Uf_FKR_FA_Eksport_SYKOF { get; set; } + public string Uf_FKR_FA_Kod_Dostawcy_u_Klienta { get; set; } + public string Uf_FKR_FA_Rampa { get; set; } + public string Uf_FKR_FA_Zaklad_Przeznaczenia { get; set; } + public char? Uf_FKR_Customer_Status { get; set; } + public bool? Uf_bpx_customer_printbatch { get; set; } + public string Uf_cust_receiver_line1 { get; set; } + public string Uf_cust_receiver_line2 { get; set; } + public int? Uf_cust_supplier_no { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Dtos/CustomerTpDto.cs b/SytelineSaAppEfDataModel/Dtos/CustomerTpDto.cs new file mode 100644 index 0000000..9b66ee3 --- /dev/null +++ b/SytelineSaAppEfDataModel/Dtos/CustomerTpDto.cs @@ -0,0 +1,41 @@ +namespace SytelineSaAppEfDataModel.Dtos; + +public class CustomerTpDto +{ + public string CustNum { get; set; } + public int CustSeq { get; set; } + public bool UpdCustAddress { get; set; } + public string TpCode { get; set; } + public string DunsNum { get; set; } + public bool GenAck { get; set; } + public bool PaperAck { get; set; } + public bool GenAsn { get; set; } + public bool PaperAsn { get; set; } + public bool GenInv { get; set; } + public bool PaperInv { get; set; } + public string AutoPost { get; set; } + public bool PostPlanned { get; set; } + public string ReleaseProc { get; set; } + public bool PooledAsn { get; set; } + public bool ValPrice { get; set; } + public string UsePrice { get; set; } + public bool ValCredit { get; set; } + public string NoteProc { get; set; } + public string UseDate { get; set; } + public short? DateOffset { get; set; } + public string InvCode { get; set; } + public string AckCode { get; set; } + public string AsnCode { get; set; } + public DateTime? LastItemDate { get; set; } + public DateTime? LastCustaDate { get; set; } + public bool IncludeSerial { 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 CreateDate { get; set; } + public bool InWorkflow { get; set; } + public string Uf_FKR_EDI_RSSBussFolder { get; set; } + public string Uf_FKR_EDI_IdentificationCode { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Dtos/EdiCustomerOrderDto.cs b/SytelineSaAppEfDataModel/Dtos/EdiCustomerOrderDto.cs index e11c8aa..ed84d72 100644 --- a/SytelineSaAppEfDataModel/Dtos/EdiCustomerOrderDto.cs +++ b/SytelineSaAppEfDataModel/Dtos/EdiCustomerOrderDto.cs @@ -3,13 +3,14 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using AutoMapper.Configuration.Annotations; namespace SytelineSaAppEfDataModel.Dtos { public class EdiCustomerOrderDto : DtoBase { - public string TransactionCode { get; set; } - public string TpCode { get; set; } + public string? TransactionCode { get; set; } + public string? TpCode { get; set; } public DateTime? RecivedDate { get; set; } public byte? Posted { get; set; } public DateTime? PostedDate { get; set; } @@ -17,24 +18,24 @@ namespace SytelineSaAppEfDataModel.Dtos public short? ErrorMessage { get; set; } public byte? Override { get; set; } public byte? Ack { get; set; } - public string AckNumber { get; set; } + public string? AckNumber { get; set; } public int? AckSequence { get; set; } - public string AckType { get; set; } + public string? AckType { get; set; } public DateTime? AckDate { get; set; } - public string SymbolicCustomerOrderNumber { get; set; } + public string? SymbolicCustomerOrderNumber { get; set; } public decimal? BlanketDollar { get; set; } - public string Type { get; set; } - public string CustomerOrderNumber { get; set; } - public string EstimatedNumber { get; set; } - public string CustomerNumber { get; set; } + public string? Type { get; set; } + public string? CustomerOrderNumber { get; set; } + public string? EstimatedNumber { get; set; } + public string? CustomerNumber { get; set; } public int? CustomerSequence { get; set; } - public string Contact { get; set; } - public string Phone { get; set; } - public string CustomerPoNumber { get; set; } + public string? Contact { get; set; } + public string? Phone { get; set; } + public string? CustomerPoNumber { get; set; } public DateTime? OrderDate { get; set; } - public string TakenBy { get; set; } - public string TermsCode { get; set; } - public string ShipCode { get; set; } + public string? TakenBy { get; set; } + public string? TermsCode { get; set; } + public string? ShipCode { get; set; } public decimal? Price { get; set; } public decimal? Weight { get; set; } public short? QtyPackages { get; set; } @@ -42,69 +43,71 @@ namespace SytelineSaAppEfDataModel.Dtos public decimal? MiscCharges { get; set; } public decimal? PrepaidAmount { get; set; } public decimal? SalesTax { get; set; } - public string Status { get; set; } + public string? Status { get; set; } public decimal? Cost { get; set; } public DateTime? CloseDate { get; set; } public decimal? FreightT { get; set; } public decimal? MchargesT { get; set; } public decimal? PrepaidT { get; set; } public decimal? SalesTaxT { get; set; } - public string Salesman { get; set; } + public string? Salesman { get; set; } public DateTime? EffectiveDate { get; set; } public DateTime? ExpirationDate { get; set; } - public string Warehouse { get; set; } + public string? Warehouse { get; set; } public decimal? SalesTaxTwo { get; set; } public decimal? SalesTaxTwoT { get; set; } - public string CharFieldOne { get; set; } - public string CharFieldTwo { get; set; } - public string CharFieldThree { get; set; } + public string? CharFieldOne { get; set; } + public string? CharFieldTwo { get; set; } + public string? CharFieldThree { get; set; } public DateTime? DateField { get; set; } public decimal? DecimalFieldOne { get; set; } public decimal? DecimalFieldTwo { get; set; } public decimal? DecimalFieldThree { get; set; } public byte? LogiField { get; set; } public byte? EdiOrder { get; set; } - public string TransactionNat { get; set; } - public string ProcessInd { get; set; } - public string DelTerm { get; set; } + public string? TransactionNat { get; set; } + public string? ProcessInd { get; set; } + public string? DelTerm { get; set; } public byte? UseExchangeRate { get; set; } - public string TaxCodeOne { get; set; } - public string TaxCodeTwo { get; set; } - public string FreightTaxCodeOne { get; set; } - public string FreightTaxCodeTwo { get; set; } - public string MscTaxCodeOne { get; set; } - public string MscTaxCodeTwo { get; set; } + public string? TaxCodeOne { get; set; } + public string? TaxCodeTwo { get; set; } + public string? FreightTaxCodeOne { get; set; } + public string? FreightTaxCodeTwo { get; set; } + public string? MscTaxCodeOne { get; set; } + public string? MscTaxCodeTwo { get; set; } public decimal? Discount { get; set; } - public string PriceCode { get; set; } + public string? PriceCode { get; set; } public byte? ShipPartial { get; set; } public byte? ShipEarly { get; set; } - public string NonApplyData { get; set; } + public string? NonApplyData { get; set; } public byte NoteExistsFlag { get; set; } public DateTime RecordDate { get; set; } public Guid RowPointer { get; set; } - public string CreatedBy { get; set; } - public string UpdatedBy { get; set; } + public string? CreatedBy { get; set; } + public string? UpdatedBy { get; set; } public DateTime CreateDate { get; set; } public byte InWorkflow { get; set; } - public string DiscountType { get; set; } + public string? DiscountType { get; set; } public decimal? DiscountAmount { get; set; } - public string TransNatTwo { get; set; } - public string UfFkrEdiMessageRefNum { get; set; } - public string UfFkrEdiConsigneeAddress { get; set; } - public string UfFkrEdiConsigneeName { get; set; } - public string UfFkrEdiFileName { get; set; } - public string UfFkrEdiBuyerDunsNumber { get; set; } - public string Gate { get; set; } - public string CustomerName { get; set; } - public string RecipientCode { get; set; } - public string SenderCode { get; set; } - public string SellerCode { get; set; } - public string DocType { get; set; } - public string BuyerCode { get; set; } + public string? TransNatTwo { get; set; } + public string? UfFkrEdiMessageRefNum { get; set; } + public string? UfFkrEdiConsigneeAddress { get; set; } + public string? UfFkrEdiConsigneeName { get; set; } + public string? UfFkrEdiFileName { get; set; } + public string? UfFkrEdiBuyerDunsNumber { get; set; } + public string? Gate { get; set; } + public string? CustomerName { get; set; } + public string? RecipientCode { get; set; } + public string? SenderCode { get; set; } + public string? SellerCode { get; set; } + public string? DocType { get; set; } + public string? BuyerCode { get; set; } - public string TranslatedStatus => TranslateStatus(Status); + public string TranslatedStatus => TranslateStatus(Status ?? string.Empty); public string? SlOrderNumber => EdiCustomerOrderTranslates.MaxBy(x => x.CreatedDate)?.CoCoNum; public string SentToSl => Posted == 1 ? "TAK" : "NIE"; + [Ignore] public int ScheduleOrderId { get; set; } + [Ignore] public DateTime LastUpdateDate { get; set; } public IEnumerable EdiCustomerOrderLines { get; set; } = new List(); public IEnumerable EdiCustomerOrderTranslates { get; set; } = new List(); diff --git a/SytelineSaAppEfDataModel/Dtos/EdiCustomerOrderImportDto.cs b/SytelineSaAppEfDataModel/Dtos/EdiCustomerOrderImportDto.cs new file mode 100644 index 0000000..1da4730 --- /dev/null +++ b/SytelineSaAppEfDataModel/Dtos/EdiCustomerOrderImportDto.cs @@ -0,0 +1,12 @@ +namespace SytelineSaAppEfDataModel.Dtos; + +public class EdiCustomerOrderImportDto +{ + public int Id { get; set; } + public int ScheduleOrderId { get; set; } + public DateTime LastUpdateDate { get; set; } + public DateTime CreatedDate { get; set; } + public string? Status { get; set; } + public string? LogData { get; set; } + public int ItemsCount { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Dtos/EdiCustomerOrderLineDto.cs b/SytelineSaAppEfDataModel/Dtos/EdiCustomerOrderLineDto.cs index 1d1088e..9c6764f 100644 --- a/SytelineSaAppEfDataModel/Dtos/EdiCustomerOrderLineDto.cs +++ b/SytelineSaAppEfDataModel/Dtos/EdiCustomerOrderLineDto.cs @@ -3,44 +3,47 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using AutoMapper.Configuration.Annotations; namespace SytelineSaAppEfDataModel.Dtos { public class EdiCustomerOrderLineDto : DtoBase { - public string CustomerOrderNumber { get; set; } + public string? CustomerOrderNumber { get; set; } public int CustomerOrderLine { get; set; } - public string Item { get; set; } - public string CustomerItemNumber { get; set; } - public string FeatStr { get; set; } + public string? Item { get; set; } + public string? CustomerItemNumber { get; set; } + public string? FeatStr { get; set; } public decimal? BlanketQty { get; set; } public DateTime? EffectiveDate { get; set; } public DateTime? ExpirationDate { get; set; } public decimal? ContPrice { get; set; } - public string Status { get; set; } + public string? Status { get; set; } public DateTime? PromiseDate { get; set; } - public string PriceCode { get; set; } - public string Uom { get; set; } + public string? PriceCode { get; set; } + public string? Uom { get; set; } public decimal? BlanketQtyReleased { get; set; } public decimal? ContPriceReleased { get; set; } public decimal? QtySent { get; set; } - public string SentCode { get; set; } - public string NonAppliedData { get; set; } + public string? SentCode { get; set; } + public string? NonAppliedData { get; set; } public byte NoteExistsFlag { get; set; } public DateTime RecordDate { get; set; } public Guid RowPointer { get; set; } - public string Description { get; set; } - public string CreatedBy { get; set; } - public string UpdatedBy { get; set; } - public DateTime CreateDate { get; set; } + public string? Description { get; set; } + public string? CreatedBy { get; set; } + public string? UpdatedBy { get; set; } + public DateTime? CreateDate { get; set; } public byte InWorkflow { get; set; } - public string BoxType { get; set; } - public string Address { get; set; } - public string FinalDestination { get; set; } + public string? BoxType { get; set; } + public string? Address { get; set; } + public string? FinalDestination { get; set; } public int? QtyPerBox { get; set; } public string TranslatedStatus => TranslateStatus(Status); + [Ignore] public string VatCode { get; set; } + public IEnumerable EdiCustomerOrderLineItems { get; set; } } } diff --git a/SytelineSaAppEfDataModel/Dtos/EdiCustomerOrderLineItemDto.cs b/SytelineSaAppEfDataModel/Dtos/EdiCustomerOrderLineItemDto.cs index cc85648..d5f8b0a 100644 --- a/SytelineSaAppEfDataModel/Dtos/EdiCustomerOrderLineItemDto.cs +++ b/SytelineSaAppEfDataModel/Dtos/EdiCustomerOrderLineItemDto.cs @@ -8,7 +8,7 @@ namespace SytelineSaAppEfDataModel.Dtos { public class EdiCustomerOrderLineItemDto : DtoBase { - public string TransactionCode { get; set; } + public string? TransactionCode { get; set; } public DateTime? ReceivedDate { get; set; } public byte? Posted { get; set; } public DateTime? PostedDate { get; set; } @@ -17,17 +17,17 @@ namespace SytelineSaAppEfDataModel.Dtos public byte? Override { get; set; } public byte? Edi { get; set; } public byte? Ack { get; set; } - public string AckNumber { get; set; } - public string AckType { get; set; } + public string? AckNumber { get; set; } + public string? AckType { get; set; } public DateTime? AckDate { get; set; } - public string SymCustomerOrderNumber { get; set; } + public string? SymCustomerOrderNumber { get; set; } public byte? QtyChanged { get; set; } public byte? DateChanged { get; set; } public byte? PriceChanged { get; set; } - public string CustomerOrderNumber { get; set; } + public string? CustomerOrderNumber { get; set; } public int CustomerOrderLine { get; set; } public int CustomerOrderRelease { get; set; } - public string Item { get; set; } + public string? Item { get; set; } public decimal? QtyOrdered { get; set; } public decimal? QtyReady { get; set; } public decimal? QtyShipped { get; set; } @@ -35,8 +35,8 @@ namespace SytelineSaAppEfDataModel.Dtos public decimal? Discount { get; set; } public decimal? Cost { get; set; } public decimal? Price { get; set; } - public string RefType { get; set; } - public string RefNumber { get; set; } + public string? RefType { get; set; } + public string? RefNumber { get; set; } public short? RefLineSuf { get; set; } public short? RefRelease { get; set; } public DateTime? DueDate { get; set; } @@ -47,68 +47,68 @@ namespace SytelineSaAppEfDataModel.Dtos public decimal? BrkQtyFour { get; set; } public decimal? BrkQtyFive { get; set; } public byte? Reprice { get; set; } - public string CustomerItem { get; set; } + public string? CustomerItem { get; set; } public decimal? QtyInvoiced { get; set; } public decimal? QtyReturned { get; set; } public decimal? CgsTotal { get; set; } - public string FeatStr { get; set; } - public string Status { get; set; } - public string CustomerNumber { get; set; } + public string? FeatStr { get; set; } + public string? Status { get; set; } + public string? CustomerNumber { get; set; } public int? CustomerSequence { get; set; } public decimal? PrgBillTot { get; set; } public decimal? PrgBillApp { get; set; } public DateTime? ReleaseDate { get; set; } public DateTime? PromiseDate { get; set; } - public string Warehouse { get; set; } - public string WksBasis { get; set; } + public string? Warehouse { get; set; } + public string? WksBasis { get; set; } public decimal? WksValue { get; set; } - public string CommCode { get; set; } - public string TransNat { get; set; } - public string ProcessInd { get; set; } - public string DelTerm { get; set; } + public string? CommCode { get; set; } + public string? TransNat { get; set; } + public string? ProcessInd { get; set; } + public string? DelTerm { get; set; } public decimal? UnitWeight { get; set; } - public string Origin { get; set; } + public string? Origin { get; set; } public int? ConsNumber { get; set; } - public string TaxCodeOne { get; set; } - public string TaxCodeTwo { get; set; } + public string? TaxCodeOne { get; set; } + public string? TaxCodeTwo { get; set; } public decimal? ExportValue { get; set; } - public string EcCode { get; set; } - public string Transport { get; set; } + public string? EcCode { get; set; } + public string? Transport { get; set; } public DateTime? PickupDate { get; set; } - public string PriceCode { get; set; } - public string Uom { get; set; } + public string? PriceCode { get; set; } + public string? Uom { get; set; } public decimal? QtyOrderedReleased { get; set; } public decimal? PriceReleased { get; set; } - public string CustomerOrderCustomerNumber { get; set; } + public string? CustomerOrderCustomerNumber { get; set; } public byte? Packed { get; set; } public byte? Bol { get; set; } public decimal? QtyBco { get; set; } - public string BcoCode { get; set; } - public string ExternalRef { get; set; } - public string CustomerPoNumber { get; set; } - public string NonApplyData { get; set; } + public string? BcoCode { get; set; } + public string? ExternalRef { get; set; } + public string? CustomerPoNumber { get; set; } + public string? NonApplyData { get; set; } public byte NoteExistsFlag { get; set; } public DateTime RecordDate { get; set; } public Guid RowPointer { get; set; } - public string Description { get; set; } - public string CreatedBy { get; set; } - public string UpdatedBy { get; set; } + public string? Description { get; set; } + public string? CreatedBy { get; set; } + public string? UpdatedBy { get; set; } public DateTime CreateDate { get; set; } public byte InWorkflow { get; set; } - public string TransNatTwo { get; set; } + public string? TransNatTwo { get; set; } public decimal SupplyQtyConvFactor { get; set; } - public string UfFkrEdiAddIntDest { get; set; } - public string UfFkrEdiCustPoLineNum { get; set; } - public string UfFkrEdiPlaceOrPortDischarge { get; set; } - public string RoutingCode { get; set; } - public string DeliveryCallNumber { get; set; } - public string UnloadingPoint { get; set; } - public string DestinationPoint { get; set; } - public string NewStatus { get; set; } - public string PalletCode { get; set; } - public string PalletNumber { get; set; } + public string? UfFkrEdiAddIntDest { get; set; } + public string? UfFkrEdiCustPoLineNum { get; set; } + public string? UfFkrEdiPlaceOrPortDischarge { get; set; } + public string? RoutingCode { get; set; } + public string? DeliveryCallNumber { get; set; } + public string? UnloadingPoint { get; set; } + public string? DestinationPoint { get; set; } + public string? NewStatus { get; set; } + public string? PalletCode { get; set; } + public string? PalletNumber { get; set; } - public string DocumentType { get; set; } + public string? DocumentType { get; set; } public string TranslatedStatus => TranslateStatus(Status); } } diff --git a/SytelineSaAppEfDataModel/Dtos/EdiCustomerOrderTranslateDto.cs b/SytelineSaAppEfDataModel/Dtos/EdiCustomerOrderTranslateDto.cs index bc1e487..15e6cbe 100644 --- a/SytelineSaAppEfDataModel/Dtos/EdiCustomerOrderTranslateDto.cs +++ b/SytelineSaAppEfDataModel/Dtos/EdiCustomerOrderTranslateDto.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using AutoMapper.Configuration.Annotations; namespace SytelineSaAppEfDataModel.Dtos { @@ -11,14 +12,16 @@ namespace SytelineSaAppEfDataModel.Dtos public int Id { get; set; } public byte CoEdiOrder { get; set; } public Guid CoRowPointer { get; set; } - public string CoCoNum { get; set; } - public string CoType { get; set; } - public string CoTakenBy { get; set; } - public string EdiCoCoNum { get; set; } + public string? CoCoNum { get; set; } + public string? CoType { get; set; } + public string? CoTakenBy { get; set; } + public string? EdiCoCoNum { get; set; } public int OrdersCount { get; set; } public bool OrderFound { get; set; } public DateTime CreatedDate { get; set; } - public string FoundNumbers { get; set; } + public string? FoundNumbers { get; set; } public int ScheduleOrderId { get; set; } + + [Ignore] public string? PoNumber { get; set; } } } diff --git a/SytelineSaAppEfDataModel/Dtos/EdiLogDto.cs b/SytelineSaAppEfDataModel/Dtos/EdiLogDto.cs new file mode 100644 index 0000000..9953e01 --- /dev/null +++ b/SytelineSaAppEfDataModel/Dtos/EdiLogDto.cs @@ -0,0 +1,11 @@ +namespace SytelineSaAppEfDataModel.Dtos; + +public class EdiLogDto +{ + public int Id { get; set; } + public string ProcessName { get; set; } + public string ConfigurationName { get; set; } + public int Status { get; set; } + public string LogText { get; set; } + public DateTime Date { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Dtos/ItemCustDto.cs b/SytelineSaAppEfDataModel/Dtos/ItemCustDto.cs new file mode 100644 index 0000000..5b479e6 --- /dev/null +++ b/SytelineSaAppEfDataModel/Dtos/ItemCustDto.cs @@ -0,0 +1,30 @@ +namespace SytelineSaAppEfDataModel.Dtos; + +public class ItemCustDto +{ + public string Item { get; set; } + public string CustNum { get; set; } + public int CustItemSeq { get; set; } + public string CustItem { get; set; } + public int? PurchYtd { get; set; } + public decimal? OrderYtd { get; set; } + public decimal? ShipYtd { get; set; } + public decimal? OrderPtd { get; set; } + public string UM { get; set; } + public int? DuePeriod { get; set; } + public byte 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 CreateDate { get; set; } + public byte InWorkflow { get; set; } + public int? Rank { get; set; } + public string EndUser { get; set; } + public string Uf_FKR_CustItem2 { get; set; } + public string Uf_KOD_EAN13 { get; set; } + public string Uf_Paleta_BROSE { get; set; } + public string Uf_Pojemnik_BROSE { get; set; } + public string Uf_Paleta_BROSE_Pokrywa { get; set; } + public string Uf_RewizjaRysunku { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Dtos/ItemCustPriceAllDto.cs b/SytelineSaAppEfDataModel/Dtos/ItemCustPriceAllDto.cs new file mode 100644 index 0000000..cb39d8f --- /dev/null +++ b/SytelineSaAppEfDataModel/Dtos/ItemCustPriceAllDto.cs @@ -0,0 +1,39 @@ +namespace SytelineSaAppEfDataModel.Dtos; + +public class ItemCustPriceAllDto : DtoBase +{ + public string SiteRef { get; set; } + public string Item { get; set; } + public string CustNum { get; set; } + public int CustItemSeq { get; set; } + public DateTime EffectDate { get; set; } + public decimal? ContPrice { get; set; } + public decimal? BrkQty1 { get; set; } + public decimal? BrkQty2 { get; set; } + public decimal? BrkQty3 { get; set; } + public decimal? BrkQty4 { get; set; } + public decimal? BrkQty5 { get; set; } + public decimal? BrkPrice1 { get; set; } + public decimal? BrkPrice2 { get; set; } + public decimal? BrkPrice3 { get; set; } + public decimal? BrkPrice4 { get; set; } + public decimal? BrkPrice5 { get; set; } + public string BaseCode1 { get; set; } + public string BaseCode2 { get; set; } + public string BaseCode3 { get; set; } + public string BaseCode4 { get; set; } + public string BaseCode5 { get; set; } + public string DolPercent1 { get; set; } + public string DolPercent2 { get; set; } + public string DolPercent3 { get; set; } + public string DolPercent4 { get; set; } + public string DolPercent5 { 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 CreateDate { get; set; } + public bool InWorkflow { get; set; } + public bool IncludeTaxInPrice { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Dtos/ItemDto.cs b/SytelineSaAppEfDataModel/Dtos/ItemDto.cs new file mode 100644 index 0000000..8402956 --- /dev/null +++ b/SytelineSaAppEfDataModel/Dtos/ItemDto.cs @@ -0,0 +1,228 @@ +namespace SytelineSaAppEfDataModel.Dtos; + +public class ItemDto : DtoBase +{ + public string ItemCode { get; set; } + public string Description { get; set; } + public decimal? QtyAllocjob { get; set; } + public string UM { get; set; } + public short LeadTime { get; set; } + public decimal? LotSize { get; set; } + public decimal? QtyUsedYtd { get; set; } + public decimal? QtyMfgYtd { get; set; } + public string AbcCode { get; set; } + public string DrawingNbr { get; set; } + public string ProductCode { get; set; } + public string PMTCode { get; set; } + public string CostMethod { get; set; } + public decimal? LstLotSize { get; set; } + public decimal? UnitCost { get; set; } + public decimal? LstUCost { get; set; } + public decimal? AvgUCost { get; set; } + public string Job { get; set; } + public short? Suffix { get; set; } + public bool Stocked { get; set; } + public string MatlType { get; set; } + public string FamilyCode { get; set; } + public byte? LowLevel { get; set; } + public DateTime? LastInv { get; set; } + public short? DaysSupply { get; set; } + public decimal? OrderMin { get; set; } + public decimal? OrderMult { get; set; } + public string PlanCode { get; set; } + public bool MpsFlag { get; set; } + public bool AcceptReq { get; set; } + public DateTime? ChangeDate { get; set; } + public string Revision { get; set; } + public bool PhantomFlag { get; set; } + public bool PlanFlag { get; set; } + public short PaperTime { get; set; } + public short DockTime { get; set; } + public decimal? AsmSetup { get; set; } + public decimal? AsmRun { get; set; } + public decimal? AsmMatl { get; set; } + public decimal? AsmTool { get; set; } + public decimal? AsmFixture { get; set; } + public decimal? AsmOther { get; set; } + public decimal? AsmFixed { get; set; } + public decimal? AsmVar { get; set; } + public decimal? AsmOutside { get; set; } + public decimal? CompSetup { get; set; } + public decimal? CompRun { get; set; } + public decimal? CompMatl { get; set; } + public decimal? CompTool { get; set; } + public decimal? CompFixture { get; set; } + public decimal? CompOther { get; set; } + public decimal? CompFixed { get; set; } + public decimal? CompVar { get; set; } + public decimal? CompOutside { get; set; } + public decimal? SubMatl { get; set; } + public decimal? ShrinkFact { get; set; } + public string AltItem { get; set; } + public decimal? UnitWeight { get; set; } + public string WeightUnits { get; set; } + public string Charfld4 { get; set; } + public decimal? CurUCost { get; set; } + public string FeatType { get; set; } + public decimal? VarLead { get; set; } + public string FeatStr { get; set; } + public short? NextConfig { get; set; } + public string FeatTempl { get; set; } + public bool Backflush { get; set; } + public string Charfld1 { get; set; } + public string Charfld2 { get; set; } + public string Charfld3 { get; set; } + public decimal? Decifld1 { get; set; } + public decimal? Decifld2 { get; set; } + public decimal? Decifld3 { get; set; } + public bool Logifld { get; set; } + public DateTime? Datefld { get; set; } + public bool TrackEcn { get; set; } + + public string CommCode { get; set; } + public string Origin { get; set; } + public decimal? UnitMatCost { get; set; } + public decimal? UnitDutyCost { get; set; } + public decimal? UnitFreightCost { get; set; } + public decimal? UnitBrokerageCost { get; set; } + public decimal? CurMatCost { get; set; } + public decimal? CurDutyCost { get; set; } + public decimal? CurFreightCost { get; set; } + public decimal? CurBrokerageCost { get; set; } + public string TaxCode1 { get; set; } + public string TaxCode2 { get; set; } + public string BflushLoc { get; set; } + public bool Reservable { get; set; } + public short? ShelfLife { get; set; } + public string LotPrefix { get; set; } + public string SerialPrefix { get; set; } + public byte? SerialLength { get; set; } + public string IssueBy { get; set; } + public bool SerialTracked { get; set; } + public bool LotTracked { get; set; } + public string CostType { get; set; } + public decimal? MatlCost { get; set; } + public decimal? LbrCost { get; set; } + public decimal? FovhdCost { get; set; } + public decimal? VovhdCost { get; set; } + public decimal? OutCost { get; set; } + public decimal? CurMatlCost { get; set; } + public decimal? CurLbrCost { get; set; } + public decimal? CurFovhdCost { get; set; } + public decimal? CurVovhdCost { get; set; } + public decimal? CurOutCost { get; set; } + public decimal? AvgMatlCost { get; set; } + public decimal? AvgLbrCost { get; set; } + public decimal? AvgFovhdCost { get; set; } + public decimal? AvgVovhdCost { get; set; } + public decimal? AvgOutCost { get; set; } + public string ProdType { get; set; } + public decimal? RatePerDay { get; set; } + public short? MpsPlanFence { get; set; } + public bool PassReq { get; set; } + public bool LotGenExp { get; set; } + public string SupplySite { get; set; } + public string ProdMix { get; set; } + public string Stat { get; set; } + public string StatusChgUserCode { get; set; } + public DateTime? ChgDate { get; set; } + public string ReasonCode { get; set; } + public string SupplyWhse { get; set; } + public short? DuePeriod { get; set; } + public decimal? OrderMax { get; set; } + public bool MrpPart { get; set; } + public bool InfinitePart { get; set; } + public bool NoteExistsFlag { get; set; } + public DateTime RecordDate { get; set; } + public Guid RowPointer { get; set; } + public decimal? SupplyToleranceHrs { get; set; } + public short ExpLeadTime { get; set; } + public decimal? VarExpLead { get; set; } + public string Buyer { get; set; } + public bool OrderConfigurable { get; set; } + public bool JobConfigurable { get; set; } + public string CfgModel { get; set; } + public string CoPostConfig { get; set; } + public string JobPostConfig { get; set; } + public string AutoJob { get; set; } + public string AutoPost { get; set; } + public string Setupgroup { get; set; } + public string CreatedBy { get; set; } + public string UpdatedBy { get; set; } + public DateTime CreateDate { get; set; } + public bool InWorkflow { get; set; } + public bool MfgSupplySwitchingActive { get; set; } + public short? TimeFenceRule { get; set; } + public double? TimeFenceValue { get; set; } + public DateTime? EarliestPlannedPoReceipt { get; set; } + public bool UseReorderPoint { get; set; } + public decimal? ReorderPoint { get; set; } + public decimal? FixedOrderQty { get; set; } + public decimal? UnitInsuranceCost { get; set; } + public decimal? UnitLocFrtCost { get; set; } + public decimal? CurInsuranceCost { get; set; } + public decimal? CurLocFrtCost { get; set; } + public bool TaxFreeMatl { get; set; } + public short? TaxFreeDays { get; set; } + public decimal? SafetyStockPercent { get; set; } + public string TariffClassification { get; set; } + public DateTime Lowdate { get; set; } + public string RcptRqmt { get; set; } + public bool ActiveForDataIntegration { get; set; } + public decimal? RcvdOverPoQtyTolerance { get; set; } + public decimal? RcvdUnderPoQtyTolerance { get; set; } + public bool IncludeInNetChangePlanning { get; set; } + public bool Kit { get; set; } + public bool PrintKitComponents { get; set; } + public short? SafetyStockRule { get; set; } + public bool ShowInDropDownList { get; set; } + public bool ControlledByExternalIcs { get; set; } + public decimal? InventoryUclTolerance { get; set; } + public decimal? InventoryLclTolerance { get; set; } + public string SeparationAttribute { get; set; } + public double? BatchReleaseAttribute1 { get; set; } + public double? BatchReleaseAttribute2 { get; set; } + public double? BatchReleaseAttribute3 { get; set; } + public byte[] Picture { get; set; } + public bool ActiveForCustomerPortal { get; set; } + public bool Featured { get; set; } + public bool TopSeller { get; set; } + public string Overview { get; set; } + public bool PreassignLots { get; set; } + public bool PreassignSerials { get; set; } + public string AttrGroup { get; set; } + public string DimensionGroup { get; set; } + public string LotAttrGroup { get; set; } + public bool TrackPieces { get; set; } + public DateTime? BomLastImportDate { get; set; } + public bool SaveCurrentRevUponBomImport { get; set; } + public string NaftaPrefCrit { get; set; } + public bool SubjectToNaftaRvc { get; set; } + public bool Producer { get; set; } + public string NaftaCountryOfOrigin { get; set; } + public bool MustUseFutureRcptsBeforePln { get; set; } + public bool SubjectToExciseTax { get; set; } + public decimal? ExciseTaxPercent { get; set; } + public string Uf_PLT_AddItemDesc { get; set; } + public string Uf_PLT_Class { get; set; } + public string Uf_PLT_CNCode { get; set; } + public string Uf_PLT_Norm { get; set; } + public string Uf_PLT_OldItemID { get; set; } + public decimal? Uf_PLT_Volume { get; set; } + public string Uf_PLT_VolumeUnit { get; set; } + public bool Uf_INT_Replicate { get; set; } + public string BoxId { get; set; } + public decimal? ItemLength { get; set; } + public decimal? ItemFi { get; set; } + public decimal? BoxItemsCnt { get; set; } + public string Klient { get; set; } + public string Uf_FKR_FA_RodzajPozycji { get; set; } + public string Uf_Nr_Klienta { get; set; } + public int? Uf_FKR_FA_Items_Nr_Zmiany { get; set; } + public string Uf_FKR_FA_item_core { get; set; } + public string Uf_FKR_GTU { get; set; } + public int? Uf_FKR_FA_Ilosc_Na_Jedn_Pak { get; set; } + public int? Uf_Element_Ilosc_W_Palecie { get; set; } + public bool? Uf_PUDELKO { get; set; } + public string Uf_IMP_OrginalItem { get; set; } +} \ No newline at end of file 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/VatCodeAssociationDto.cs b/SytelineSaAppEfDataModel/Dtos/VatCodeAssociationDto.cs new file mode 100644 index 0000000..22ccfab --- /dev/null +++ b/SytelineSaAppEfDataModel/Dtos/VatCodeAssociationDto.cs @@ -0,0 +1,66 @@ +namespace SytelineSaAppEfDataModel.Dtos; + +public class VatCodeAssociationDto +{ + public string VATRegisterType { get; set; } + public string EndUserType { get; set; } + public string Category { get; set; } + public string ProdCode { get; set; } + public string TaxCode { get; set; } + public string VATRegisterCode { get; set; } + public bool InWorkflow { 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 CreateDate { get; set; } + public string Uf_ZPL_CodesCgsAcct { get; set; } + public string Uf_ZPL_CodesCgsAcctUnit1 { get; set; } + public string Uf_ZPL_CodesCgsAcctUnit2 { get; set; } + public string Uf_ZPL_CodesCgsAcctUnit3 { get; set; } + public string Uf_ZPL_CodesCgsAcctUnit4 { get; set; } + public string Uf_ZPL_CodesCgsDescription { get; set; } + public string Uf_ZPL_CodesCgsFovhdAcct { get; set; } + public string Uf_ZPL_CodesCgsFovhdAcctUnit1 { get; set; } + public string Uf_ZPL_CodesCgsFovhdAcctUnit2 { get; set; } + public string Uf_ZPL_CodesCgsFovhdAcctUnit3 { get; set; } + public string Uf_ZPL_CodesCgsFovhdAcctUnit4 { get; set; } + public string Uf_ZPL_CodesCgsFovhdDescription { get; set; } + public string Uf_ZPL_CodesCgsLbrAcct { get; set; } + public string Uf_ZPL_CodesCgsLbrAcctUnit1 { get; set; } + public string Uf_ZPL_CodesCgsLbrAcctUnit2 { get; set; } + public string Uf_ZPL_CodesCgsLbrAcctUnit3 { get; set; } + public string Uf_ZPL_CodesCgsLbrAcctUnit4 { get; set; } + public string Uf_ZPL_CodesCgsLbrDescription { get; set; } + public string Uf_ZPL_CodesCgsVovhdAcct { get; set; } + public string Uf_ZPL_CodesCgsVovhdAcctUnit1 { get; set; } + public string Uf_ZPL_CodesCgsVovhdAcctUnit2 { get; set; } + public string Uf_ZPL_CodesCgsVovhdAcctUnit3 { get; set; } + public string Uf_ZPL_CodesCgsVovhdAcctUnit4 { get; set; } + public string Uf_ZPL_CodesCgsVovhdDescription { get; set; } + public string Uf_ZPL_CodesCOGSVarsAcct { get; set; } + public string Uf_ZPL_CodesCOGSVarsAcctUnit1 { get; set; } + public string Uf_ZPL_CodesCOGSVarsAcctUnit2 { get; set; } + public string Uf_ZPL_CodesCOGSVarsAcctUnit3 { get; set; } + public string Uf_ZPL_CodesCOGSVarsAcctUnit4 { get; set; } + public string Uf_ZPL_CodesCOGVarsDescription { get; set; } + public string Uf_ZPL_CodesOutAcct { get; set; } + public string Uf_ZPL_CodesOutAcctUnit1 { get; set; } + public string Uf_ZPL_CodesOutAcctUnit2 { get; set; } + public string Uf_ZPL_CodesOutAcctUnit3 { get; set; } + public string Uf_ZPL_CodesOutAcctUnit4 { get; set; } + public string Uf_ZPL_CodesOutDescription { get; set; } + public string Uf_ZPL_CodesSaleDsAcct { get; set; } + public string Uf_ZPL_CodesSaleDsAcctUnit1 { get; set; } + public string Uf_ZPL_CodesSaleDsAcctUnit2 { get; set; } + public string Uf_ZPL_CodesSaleDsAcctUnit3 { get; set; } + public string Uf_ZPL_CodesSaleDsAcctUnit4 { get; set; } + public string Uf_ZPL_CodesSaleDsDescription { get; set; } + public string Uf_ZPL_CodesSalesAcct { get; set; } + public string Uf_ZPL_CodesSalesAcctUnit1 { get; set; } + public string Uf_ZPL_CodesSalesAcctUnit2 { get; set; } + public string Uf_ZPL_CodesSalesAcctUnit3 { get; set; } + public string Uf_ZPL_CodesSalesAcctUnit4 { get; set; } + public string Uf_ZPL_CodesSalesDescription { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Dtos/WzClientDto.cs b/SytelineSaAppEfDataModel/Dtos/WzClientDto.cs new file mode 100644 index 0000000..75af10f --- /dev/null +++ b/SytelineSaAppEfDataModel/Dtos/WzClientDto.cs @@ -0,0 +1,12 @@ +namespace SytelineSaAppEfDataModel.Dtos; + +public class WzClientDto +{ + public Guid ID { get; set; } + public string CustomerNumber { get; set; } + public int? CustomerSequence { get; set; } + public DateTime CreatedDate { get; set; } + public string Name { get; set; } + public string ShortName { get; set; } + public string? LogoBase64 { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Dtos/WzHeaderDto.cs b/SytelineSaAppEfDataModel/Dtos/WzHeaderDto.cs new file mode 100644 index 0000000..dd45e0f --- /dev/null +++ b/SytelineSaAppEfDataModel/Dtos/WzHeaderDto.cs @@ -0,0 +1,12 @@ +namespace SytelineSaAppEfDataModel.Dtos; + +public class WzHeaderDto +{ + public Guid ID { get; set; } + public Guid? FK_Client { get; set; } + public DateTime CreatedDate { get; set; } + public string? EmailAddresses { get; set; } + public string? WzNumbers { get; set; } + public IEnumerable WzRowsMeyle { get; set; } = new List(); + public IEnumerable WzRowsMarelli { get; set; } = new List(); +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Dtos/WzRowMarelliDto.cs b/SytelineSaAppEfDataModel/Dtos/WzRowMarelliDto.cs new file mode 100644 index 0000000..5bb1507 --- /dev/null +++ b/SytelineSaAppEfDataModel/Dtos/WzRowMarelliDto.cs @@ -0,0 +1,16 @@ +namespace SytelineSaAppEfDataModel.Dtos; + +public class WzRowMarelliDto +{ + public Guid ID { get; set; } + public Guid? FKHeader { get; set; } + public string Type { get; set; } + public int? PalletNumber { get; set; } + public string ItemNumber { get; set; } + public string EngineerNumber { get; set; } + public int? Quantity { get; set; } + public string OrderNumber { get; set; } + public string WzNumber { get; set; } + public string FaIndex { get; set; } + public int? TransactionNumber { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Dtos/WzRowMeyleDto.cs b/SytelineSaAppEfDataModel/Dtos/WzRowMeyleDto.cs new file mode 100644 index 0000000..8a16c6c --- /dev/null +++ b/SytelineSaAppEfDataModel/Dtos/WzRowMeyleDto.cs @@ -0,0 +1,16 @@ +namespace SytelineSaAppEfDataModel.Dtos; + +public class WzRowMeyleDto +{ + public Guid ID { get; set; } + public Guid? FK_Header { get; set; } + public string OrderNumber { get; set; } + public string ItemNumber { get; set; } + public int? Quantity { get; set; } + public int? PalletNumber { get; set; } + 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/Customer.cs b/SytelineSaAppEfDataModel/Entities/Customer.cs new file mode 100644 index 0000000..d659435 --- /dev/null +++ b/SytelineSaAppEfDataModel/Entities/Customer.cs @@ -0,0 +1,132 @@ +namespace SytelineSaAppEfDataModel.Entities; + +public class Customer +{ + public string CustNum { get; set; } + public int CustSeq { get; set; } + public string Contact1 { get; set; } + public string Contact2 { get; set; } + public string Contact3 { get; set; } + public string Phone1 { get; set; } + public string Phone2 { get; set; } + public string Phone3 { get; set; } + public string CustType { get; set; } + public string TermsCode { get; set; } + public string ShipCode { get; set; } + public string Slsman { get; set; } + public string StateCycle { get; set; } + public bool FinChg { get; set; } + public DateTime? LastInv { get; set; } + public DateTime? LastPaid { get; set; } + public decimal? SalesYtd { get; set; } + public decimal? SalesLstYr { get; set; } + public decimal? DiscYtd { get; set; } + public decimal? DiscLstYr { get; set; } + public DateTime? LastFinChg { get; set; } + public decimal? SalesPtd { get; set; } + public DateTime? CalcDate { get; set; } + public short? NumPeriods { get; set; } + public short? AvgDaysOs { get; set; } + public int? NumInvoices { get; set; } + public int? HistDaysOs { get; set; } + public int? LargDaysOs { get; set; } + public short? LastDaysOs { get; set; } + public decimal? AvgBalOs { get; set; } + public decimal? LargeBalOs { get; set; } + public decimal? LastBalOs { get; set; } + public string Whse { get; set; } + public string Charfld1 { get; set; } + public string Charfld2 { get; set; } + public string Charfld3 { get; set; } + public decimal? Decifld1 { get; set; } + public decimal? Decifld2 { get; set; } + public decimal? Decifld3 { get; set; } + public bool Logifld { get; set; } + public DateTime? Datefld { get; set; } + public string TaxRegNum1 { get; set; } + public string BankCode { get; set; } + public string TaxRegNum2 { get; set; } + public string PayType { get; set; } + public bool EdiCust { get; set; } + public string BranchId { get; set; } + public string TransNat { get; set; } + public string Delterm { get; set; } + public string ProcessInd { get; set; } + public bool UseExchRate { get; set; } + public string TaxCode1 { get; set; } + public string TaxCode2 { get; set; } + public string Pricecode { get; set; } + public bool ShipEarly { get; set; } + public bool ShipPartial { get; set; } + public string LangCode { get; set; } + public string EndUserType { get; set; } + public string ShipSite { get; set; } + public bool LcrReqd { get; set; } + public string CustBank { get; set; } + public bool DraftPrintFlag { get; set; } + public bool RcvInternalEmail { get; set; } + public string CustomerEmailAddr { get; set; } + public bool SendCustomerEmail { get; set; } + public bool ApsPullUp { get; set; } + public string DoInvoice { get; set; } + public bool Consolidate { get; set; } + public string InvFreq { get; set; } + public bool Summarize { get; set; } + public bool NoteExistsFlag { get; set; } + public DateTime RecordDate { get; set; } + public Guid RowPointer { get; set; } + public bool Einvoice { get; set; } + public decimal? OrderBal { get; set; } + public decimal? PostedBal { get; set; } + public string CreatedBy { get; set; } + public string UpdatedBy { get; set; } + public DateTime CreateDate { get; set; } + public string CrmGuid { get; set; } + public bool InWorkflow { get; set; } + public bool PrintPackInv { get; set; } + public bool OnePackInv { get; set; } + public string InvCategory { get; set; } + public bool IncludeTaxInPrice { get; set; } + public string TransNat2 { get; set; } + public bool UseRevisionPayDays { get; set; } + public int? RevisionDay { get; set; } + public TimeSpan? RevisionDayStartTime1 { get; set; } + public TimeSpan? RevisionDayStartTime2 { get; set; } + public TimeSpan? RevisionDayEndTime1 { get; set; } + public TimeSpan? RevisionDayEndTime2 { get; set; } + public int? PayDay { get; set; } + public TimeSpan? PayDayStartTime1 { get; set; } + public TimeSpan? PayDayStartTime2 { get; set; } + public TimeSpan? PayDayEndTime1 { get; set; } + public TimeSpan? PayDayEndTime2 { get; set; } + public string ExportType { get; set; } + public bool ActiveForDataIntegration { get; set; } + public bool ShowInShipToDropDownList { get; set; } + public bool ShowInDropDownList { get; set; } + public string SicCode { get; set; } + public int? NumberOfEmployees { get; set; } + public decimal? CompanyRevenue { get; set; } + public string TerritoryCode { get; set; } + public string SalesTeamId { get; set; } + public short? DaysShippedBeforeDueDateTolerance { get; set; } + public short? DaysShippedAfterDueDateTolerance { get; set; } + public decimal? ShippedOverOrderedQtyTolerance { get; set; } + public decimal? ShippedUnderOrderedQtyTolerance { get; set; } + public int DefaultShipTo { get; set; } + public bool IncludeOrdersInTaxRpt { get; set; } + public decimal? ConstructiveSalePricePct { get; set; } + public string Uf_ZPL_FedId { get; set; } + public string Uf_ZPL_VATRegisterCode { get; set; } + public int? Uf_INT_CustSeq { get; set; } + public bool Uf_INT_Replicate { get; set; } + public int? Uf_FKR_FA_SL_SYKOF { get; set; } + public bool? Uf_FKR_FA_Eksport_SYKOF { get; set; } + public string Uf_FKR_FA_Kod_Dostawcy_u_Klienta { get; set; } + public string Uf_FKR_FA_Rampa { get; set; } + public string Uf_FKR_FA_Zaklad_Przeznaczenia { get; set; } + public char? Uf_FKR_Customer_Status { get; set; } + public bool? Uf_bpx_customer_printbatch { get; set; } + public string Uf_cust_receiver_line1 { get; set; } + public string Uf_cust_receiver_line2 { get; set; } + public int? Uf_cust_supplier_no { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Entities/CustomerTp.cs b/SytelineSaAppEfDataModel/Entities/CustomerTp.cs new file mode 100644 index 0000000..77eee35 --- /dev/null +++ b/SytelineSaAppEfDataModel/Entities/CustomerTp.cs @@ -0,0 +1,41 @@ +namespace SytelineSaAppEfDataModel.Entities; + +public class CustomerTp +{ + public string CustNum { get; set; } + public int CustSeq { get; set; } + public bool UpdCustAddress { get; set; } + public string TpCode { get; set; } + public string DunsNum { get; set; } + public bool GenAck { get; set; } + public bool PaperAck { get; set; } + public bool GenAsn { get; set; } + public bool PaperAsn { get; set; } + public bool GenInv { get; set; } + public bool PaperInv { get; set; } + public string AutoPost { get; set; } + public bool PostPlanned { get; set; } + public string ReleaseProc { get; set; } + public bool PooledAsn { get; set; } + public bool ValPrice { get; set; } + public string UsePrice { get; set; } + public bool ValCredit { get; set; } + public string NoteProc { get; set; } + public string UseDate { get; set; } + public short? DateOffset { get; set; } + public string InvCode { get; set; } + public string AckCode { get; set; } + public string AsnCode { get; set; } + public DateTime? LastItemDate { get; set; } + public DateTime? LastCustaDate { get; set; } + public bool IncludeSerial { 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 CreateDate { get; set; } + public bool InWorkflow { get; set; } + public string Uf_FKR_EDI_RSSBussFolder { get; set; } + public string Uf_FKR_EDI_IdentificationCode { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Entities/EdiCustomerOrder.cs b/SytelineSaAppEfDataModel/Entities/EdiCustomerOrder.cs index 76723c1..edfa5c6 100644 --- a/SytelineSaAppEfDataModel/Entities/EdiCustomerOrder.cs +++ b/SytelineSaAppEfDataModel/Entities/EdiCustomerOrder.cs @@ -8,8 +8,8 @@ namespace SytelineSaAppEfDataModel.Entities { public class EdiCustomerOrder : EntityBase { - public string TransactionCode { get; set; } - public string TpCode { get; set; } + public string? TransactionCode { get; set; } + public string? TpCode { get; set; } public DateTime? RecivedDate { get; set; } public byte? Posted { get; set; } public DateTime? PostedDate { get; set; } @@ -17,24 +17,24 @@ namespace SytelineSaAppEfDataModel.Entities public short? ErrorMessage { get; set; } public byte? Override { get; set; } public byte? Ack { get; set; } - public string AckNumber { get; set; } + public string? AckNumber { get; set; } public int? AckSequence { get; set; } - public string AckType { get; set; } + public string? AckType { get; set; } public DateTime? AckDate { get; set; } - public string SymbolicCustomerOrderNumber { get; set; } + public string? SymbolicCustomerOrderNumber { get; set; } public decimal? BlanketDollar { get; set; } - public string Type { get; set; } - public string CustomerOrderNumber { get; set; } - public string EstimatedNumber { get; set; } - public string CustomerNumber { get; set; } + public string? Type { get; set; } + public string? CustomerOrderNumber { get; set; } + public string? EstimatedNumber { get; set; } + public string? CustomerNumber { get; set; } public int? CustomerSequence { get; set; } - public string Contact { get; set; } - public string Phone { get; set; } - public string CustomerPoNumber { get; set; } + public string? Contact { get; set; } + public string? Phone { get; set; } + public string? CustomerPoNumber { get; set; } public DateTime? OrderDate { get; set; } - public string TakenBy { get; set; } - public string TermsCode { get; set; } - public string ShipCode { get; set; } + public string? TakenBy { get; set; } + public string? TermsCode { get; set; } + public string? ShipCode { get; set; } public decimal? Price { get; set; } public decimal? Weight { get; set; } public short? QtyPackages { get; set; } @@ -42,64 +42,64 @@ namespace SytelineSaAppEfDataModel.Entities public decimal? MiscCharges { get; set; } public decimal? PrepaidAmount { get; set; } public decimal? SalesTax { get; set; } - public string Status { get; set; } + public string? Status { get; set; } public decimal? Cost { get; set; } public DateTime? CloseDate { get; set; } public decimal? FreightT { get; set; } public decimal? MchargesT { get; set; } public decimal? PrepaidT { get; set; } public decimal? SalesTaxT { get; set; } - public string Salesman { get; set; } + public string? Salesman { get; set; } public DateTime? EffectiveDate { get; set; } public DateTime? ExpirationDate { get; set; } - public string Warehouse { get; set; } + public string? Warehouse { get; set; } public decimal? SalesTaxTwo { get; set; } public decimal? SalesTaxTwoT { get; set; } - public string CharFieldOne { get; set; } - public string CharFieldTwo { get; set; } - public string CharFieldThree { get; set; } + public string? CharFieldOne { get; set; } + public string? CharFieldTwo { get; set; } + public string? CharFieldThree { get; set; } public DateTime? DateField { get; set; } public decimal? DecimalFieldOne { get; set; } public decimal? DecimalFieldTwo { get; set; } public decimal? DecimalFieldThree { get; set; } public byte? LogiField { get; set; } public byte? EdiOrder { get; set; } - public string TransactionNat { get; set; } - public string ProcessInd { get; set; } - public string DelTerm { get; set; } + public string? TransactionNat { get; set; } + public string? ProcessInd { get; set; } + public string? DelTerm { get; set; } public byte? UseExchangeRate { get; set; } - public string TaxCodeOne { get; set; } - public string TaxCodeTwo { get; set; } - public string FreightTaxCodeOne { get; set; } - public string FreightTaxCodeTwo { get; set; } - public string MscTaxCodeOne { get; set; } - public string MscTaxCodeTwo { get; set; } + public string? TaxCodeOne { get; set; } + public string? TaxCodeTwo { get; set; } + public string? FreightTaxCodeOne { get; set; } + public string? FreightTaxCodeTwo { get; set; } + public string? MscTaxCodeOne { get; set; } + public string? MscTaxCodeTwo { get; set; } public decimal? Discount { get; set; } - public string PriceCode { get; set; } + public string? PriceCode { get; set; } public byte? ShipPartial { get; set; } public byte? ShipEarly { get; set; } - public string NonApplyData { get; set; } + public string? NonApplyData { get; set; } public byte NoteExistsFlag { get; set; } public DateTime RecordDate { get; set; } public Guid RowPointer { get; set; } - public string CreatedBy { get; set; } - public string UpdatedBy { get; set; } + public string? CreatedBy { get; set; } + public string? UpdatedBy { get; set; } public DateTime CreateDate { get; set; } public byte InWorkflow { get; set; } - public string DiscountType { get; set; } + public string? DiscountType { get; set; } public decimal? DiscountAmount { get; set; } - public string TransNatTwo { get; set; } - public string UfFkrEdiMessageRefNum { get; set; } - public string UfFkrEdiConsigneeAddress { get; set; } - public string UfFkrEdiConsigneeName { get; set; } - public string UfFkrEdiFileName { get; set; } - public string UfFkrEdiBuyerDunsNumber { get; set; } - public string Gate { get; set; } - public string CustomerName { get; set; } - public string RecipientCode { get; set; } - public string SenderCode { get; set; } - public string SellerCode { get; set; } - public string DocType { get; set; } - public string BuyerCode { get; set; } + public string? TransNatTwo { get; set; } + public string? UfFkrEdiMessageRefNum { get; set; } + public string? UfFkrEdiConsigneeAddress { get; set; } + public string? UfFkrEdiConsigneeName { get; set; } + public string? UfFkrEdiFileName { get; set; } + public string? UfFkrEdiBuyerDunsNumber { get; set; } + public string? Gate { get; set; } + public string? CustomerName { get; set; } + public string? RecipientCode { get; set; } + public string? SenderCode { get; set; } + public string? SellerCode { get; set; } + public string? DocType { get; set; } + public string? BuyerCode { get; set; } } } diff --git a/SytelineSaAppEfDataModel/Entities/EdiCustomerOrderImport.cs b/SytelineSaAppEfDataModel/Entities/EdiCustomerOrderImport.cs new file mode 100644 index 0000000..ea9e369 --- /dev/null +++ b/SytelineSaAppEfDataModel/Entities/EdiCustomerOrderImport.cs @@ -0,0 +1,12 @@ +namespace SytelineSaAppEfDataModel.Entities; + +public class EdiCustomerOrderImport +{ + public int Id { get; set; } + public int ScheduleOrderId { get; set; } + public DateTime LastUpdateDate { get; set; } + public DateTime CreatedDate { get; set; } + public string Status { get; set; } + public string LogData { get; set; } + public int ItemsCount { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Entities/EdiCustomerOrderLine.cs b/SytelineSaAppEfDataModel/Entities/EdiCustomerOrderLine.cs index def2f18..366d5f9 100644 --- a/SytelineSaAppEfDataModel/Entities/EdiCustomerOrderLine.cs +++ b/SytelineSaAppEfDataModel/Entities/EdiCustomerOrderLine.cs @@ -8,35 +8,35 @@ namespace SytelineSaAppEfDataModel.Entities { public class EdiCustomerOrderLine { - public string CustomerOrderNumber { get; set; } + public string? CustomerOrderNumber { get; set; } public int CustomerOrderLine { get; set; } - public string Item { get; set; } - public string CustomerItemNumber { get; set; } - public string FeatStr { get; set; } + public string? Item { get; set; } + public string? CustomerItemNumber { get; set; } + public string? FeatStr { get; set; } public decimal? BlanketQty { get; set; } public DateTime? EffectiveDate { get; set; } public DateTime? ExpirationDate { get; set; } public decimal? ContPrice { get; set; } - public string Status { get; set; } + public string? Status { get; set; } public DateTime? PromiseDate { get; set; } - public string PriceCode { get; set; } - public string Uom { get; set; } + public string? PriceCode { get; set; } + public string? Uom { get; set; } public decimal? BlanketQtyReleased { get; set; } public decimal? ContPriceReleased { get; set; } public decimal? QtySent { get; set; } - public string SentCode { get; set; } - public string NonAppliedData { get; set; } + public string? SentCode { get; set; } + public string? NonAppliedData { get; set; } public byte NoteExistsFlag { get; set; } public DateTime RecordDate { get; set; } public Guid RowPointer { get; set; } - public string Description { get; set; } - public string CreatedBy { get; set; } - public string UpdatedBy { get; set; } - public DateTime CreateDate { get; set; } + public string? Description { get; set; } + public string? CreatedBy { get; set; } + public string? UpdatedBy { get; set; } + public DateTime? CreateDate { get; set; } public byte InWorkflow { get; set; } - public string BoxType { get; set; } - public string Address { get; set; } - public string FinalDestination { get; set; } + public string? BoxType { get; set; } + public string? Address { get; set; } + public string? FinalDestination { get; set; } public int? QtyPerBox { get; set; } } } diff --git a/SytelineSaAppEfDataModel/Entities/EdiCustomerOrderLineItem.cs b/SytelineSaAppEfDataModel/Entities/EdiCustomerOrderLineItem.cs index 86c2a9e..530d491 100644 --- a/SytelineSaAppEfDataModel/Entities/EdiCustomerOrderLineItem.cs +++ b/SytelineSaAppEfDataModel/Entities/EdiCustomerOrderLineItem.cs @@ -8,7 +8,7 @@ namespace SytelineSaAppEfDataModel.Entities { public class EdiCustomerOrderLineItem { - public string TransactionCode { get; set; } + public string? TransactionCode { get; set; } public DateTime? ReceivedDate { get; set; } public byte? Posted { get; set; } public DateTime? PostedDate { get; set; } @@ -17,17 +17,17 @@ namespace SytelineSaAppEfDataModel.Entities public byte? Override { get; set; } public byte? Edi { get; set; } public byte? Ack { get; set; } - public string AckNumber { get; set; } - public string AckType { get; set; } + public string? AckNumber { get; set; } + public string? AckType { get; set; } public DateTime? AckDate { get; set; } - public string SymCustomerOrderNumber { get; set; } + public string? SymCustomerOrderNumber { get; set; } public byte? QtyChanged { get; set; } public byte? DateChanged { get; set; } public byte? PriceChanged { get; set; } - public string CustomerOrderNumber { get; set; } + public string? CustomerOrderNumber { get; set; } public int CustomerOrderLine { get; set; } public int CustomerOrderRelease { get; set; } - public string Item { get; set; } + public string? Item { get; set; } public decimal? QtyOrdered { get; set; } public decimal? QtyReady { get; set; } public decimal? QtyShipped { get; set; } @@ -35,8 +35,8 @@ namespace SytelineSaAppEfDataModel.Entities public decimal? Discount { get; set; } public decimal? Cost { get; set; } public decimal? Price { get; set; } - public string RefType { get; set; } - public string RefNumber { get; set; } + public string? RefType { get; set; } + public string? RefNumber { get; set; } public short? RefLineSuf { get; set; } public short? RefRelease { get; set; } public DateTime? DueDate { get; set; } @@ -47,67 +47,67 @@ namespace SytelineSaAppEfDataModel.Entities public decimal? BrkQtyFour { get; set; } public decimal? BrkQtyFive { get; set; } public byte? Reprice { get; set; } - public string CustomerItem { get; set; } + public string? CustomerItem { get; set; } public decimal? QtyInvoiced { get; set; } public decimal? QtyReturned { get; set; } public decimal? CgsTotal { get; set; } - public string FeatStr { get; set; } - public string Status { get; set; } - public string CustomerNumber { get; set; } + public string? FeatStr { get; set; } + public string? Status { get; set; } + public string? CustomerNumber { get; set; } public int? CustomerSequence { get; set; } public decimal? PrgBillTot { get; set; } public decimal? PrgBillApp { get; set; } public DateTime? ReleaseDate { get; set; } public DateTime? PromiseDate { get; set; } - public string Warehouse { get; set; } - public string WksBasis { get; set; } + public string? Warehouse { get; set; } + public string? WksBasis { get; set; } public decimal? WksValue { get; set; } - public string CommCode { get; set; } - public string TransNat { get; set; } - public string ProcessInd { get; set; } - public string DelTerm { get; set; } + public string? CommCode { get; set; } + public string? TransNat { get; set; } + public string? ProcessInd { get; set; } + public string? DelTerm { get; set; } public decimal? UnitWeight { get; set; } - public string Origin { get; set; } + public string? Origin { get; set; } public int? ConsNumber { get; set; } - public string TaxCodeOne { get; set; } - public string TaxCodeTwo { get; set; } + public string? TaxCodeOne { get; set; } + public string? TaxCodeTwo { get; set; } public decimal? ExportValue { get; set; } - public string EcCode { get; set; } - public string Transport { get; set; } + public string? EcCode { get; set; } + public string? Transport { get; set; } public DateTime? PickupDate { get; set; } - public string PriceCode { get; set; } - public string Uom { get; set; } + public string? PriceCode { get; set; } + public string? Uom { get; set; } public decimal? QtyOrderedReleased { get; set; } public decimal? PriceReleased { get; set; } - public string CustomerOrderCustomerNumber { get; set; } + public string? CustomerOrderCustomerNumber { get; set; } public byte? Packed { get; set; } public byte? Bol { get; set; } public decimal? QtyBco { get; set; } - public string BcoCode { get; set; } - public string ExternalRef { get; set; } - public string CustomerPoNumber { get; set; } - public string NonApplyData { get; set; } + public string? BcoCode { get; set; } + public string? ExternalRef { get; set; } + public string? CustomerPoNumber { get; set; } + public string? NonApplyData { get; set; } public byte NoteExistsFlag { get; set; } public DateTime RecordDate { get; set; } public Guid RowPointer { get; set; } - public string Description { get; set; } - public string CreatedBy { get; set; } - public string UpdatedBy { get; set; } + public string? Description { get; set; } + public string? CreatedBy { get; set; } + public string? UpdatedBy { get; set; } public DateTime CreateDate { get; set; } public byte InWorkflow { get; set; } - public string TransNatTwo { get; set; } + public string? TransNatTwo { get; set; } public decimal SupplyQtyConvFactor { get; set; } - public string UfFkrEdiAddIntDest { get; set; } - public string UfFkrEdiCustPoLineNum { get; set; } - public string UfFkrEdiPlaceOrPortDischarge { get; set; } - public string RoutingCode { get; set; } - public string DeliveryCallNumber { get; set; } - public string UnloadingPoint { get; set; } - public string DestinationPoint { get; set; } - public string NewStatus { get; set; } - public string PalletCode { get; set; } - public string PalletNumber { get; set; } + public string? UfFkrEdiAddIntDest { get; set; } + public string? UfFkrEdiCustPoLineNum { get; set; } + public string? UfFkrEdiPlaceOrPortDischarge { get; set; } + public string? RoutingCode { get; set; } + public string? DeliveryCallNumber { get; set; } + public string? UnloadingPoint { get; set; } + public string? DestinationPoint { get; set; } + public string? NewStatus { get; set; } + public string? PalletCode { get; set; } + public string? PalletNumber { get; set; } - public string DocumentType { get; set; } + public string? DocumentType { get; set; } } } diff --git a/SytelineSaAppEfDataModel/Entities/EdiCustomerOrderTranslate.cs b/SytelineSaAppEfDataModel/Entities/EdiCustomerOrderTranslate.cs index 81aa9db..881e55a 100644 --- a/SytelineSaAppEfDataModel/Entities/EdiCustomerOrderTranslate.cs +++ b/SytelineSaAppEfDataModel/Entities/EdiCustomerOrderTranslate.cs @@ -11,14 +11,14 @@ namespace SytelineSaAppEfDataModel.Entities public int Id { get; set; } public byte CoEdiOrder { get; set; } public Guid CoRowPointer { get; set; } - public string CoCoNum { get; set; } - public string CoType { get; set; } - public string CoTakenBy { get; set; } - public string EdiCoCoNum { get; set; } + public string? CoCoNum { get; set; } + public string? CoType { get; set; } + public string? CoTakenBy { get; set; } + public string? EdiCoCoNum { get; set; } public int OrdersCount { get; set; } public bool OrderFound { get; set; } public DateTime CreatedDate { get; set; } - public string FoundNumbers { get; set; } + public string? FoundNumbers { get; set; } public int ScheduleOrderId { get; set; } } } diff --git a/SytelineSaAppEfDataModel/Entities/EdiLog.cs b/SytelineSaAppEfDataModel/Entities/EdiLog.cs new file mode 100644 index 0000000..602b935 --- /dev/null +++ b/SytelineSaAppEfDataModel/Entities/EdiLog.cs @@ -0,0 +1,11 @@ +namespace SytelineSaAppEfDataModel.Entities; + +public class EdiLog +{ + public int Id { get; set; } + public string ProcessName { get; set; } + public string ConfigurationName { get; set; } + public int Status { get; set; } + public string LogText { get; set; } + public DateTime Date { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Entities/Item.cs b/SytelineSaAppEfDataModel/Entities/Item.cs new file mode 100644 index 0000000..c01deca --- /dev/null +++ b/SytelineSaAppEfDataModel/Entities/Item.cs @@ -0,0 +1,228 @@ +namespace SytelineSaAppEfDataModel.Entities; + +public class Item +{ + public string ItemCode { get; set; } + public string Description { get; set; } + public decimal? QtyAllocjob { get; set; } + public string UM { get; set; } + public short LeadTime { get; set; } + public decimal? LotSize { get; set; } + public decimal? QtyUsedYtd { get; set; } + public decimal? QtyMfgYtd { get; set; } + public string AbcCode { get; set; } + public string DrawingNbr { get; set; } + public string ProductCode { get; set; } + public string PMTCode { get; set; } + public string CostMethod { get; set; } + public decimal? LstLotSize { get; set; } + public decimal? UnitCost { get; set; } + public decimal? LstUCost { get; set; } + public decimal? AvgUCost { get; set; } + public string Job { get; set; } + public short? Suffix { get; set; } + public bool Stocked { get; set; } + public string MatlType { get; set; } + public string FamilyCode { get; set; } + public byte? LowLevel { get; set; } + public DateTime? LastInv { get; set; } + public short? DaysSupply { get; set; } + public decimal? OrderMin { get; set; } + public decimal? OrderMult { get; set; } + public string PlanCode { get; set; } + public bool MpsFlag { get; set; } + public bool AcceptReq { get; set; } + public DateTime? ChangeDate { get; set; } + public string Revision { get; set; } + public bool PhantomFlag { get; set; } + public bool PlanFlag { get; set; } + public short PaperTime { get; set; } + public short DockTime { get; set; } + public decimal? AsmSetup { get; set; } + public decimal? AsmRun { get; set; } + public decimal? AsmMatl { get; set; } + public decimal? AsmTool { get; set; } + public decimal? AsmFixture { get; set; } + public decimal? AsmOther { get; set; } + public decimal? AsmFixed { get; set; } + public decimal? AsmVar { get; set; } + public decimal? AsmOutside { get; set; } + public decimal? CompSetup { get; set; } + public decimal? CompRun { get; set; } + public decimal? CompMatl { get; set; } + public decimal? CompTool { get; set; } + public decimal? CompFixture { get; set; } + public decimal? CompOther { get; set; } + public decimal? CompFixed { get; set; } + public decimal? CompVar { get; set; } + public decimal? CompOutside { get; set; } + public decimal? SubMatl { get; set; } + public decimal? ShrinkFact { get; set; } + public string AltItem { get; set; } + public decimal? UnitWeight { get; set; } + public string WeightUnits { get; set; } + public string Charfld4 { get; set; } + public decimal? CurUCost { get; set; } + public string FeatType { get; set; } + public decimal? VarLead { get; set; } + public string FeatStr { get; set; } + public short? NextConfig { get; set; } + public string FeatTempl { get; set; } + public bool Backflush { get; set; } + public string Charfld1 { get; set; } + public string Charfld2 { get; set; } + public string Charfld3 { get; set; } + public decimal? Decifld1 { get; set; } + public decimal? Decifld2 { get; set; } + public decimal? Decifld3 { get; set; } + public bool Logifld { get; set; } + public DateTime? Datefld { get; set; } + public bool TrackEcn { get; set; } + + public string CommCode { get; set; } + public string Origin { get; set; } + public decimal? UnitMatCost { get; set; } + public decimal? UnitDutyCost { get; set; } + public decimal? UnitFreightCost { get; set; } + public decimal? UnitBrokerageCost { get; set; } + public decimal? CurMatCost { get; set; } + public decimal? CurDutyCost { get; set; } + public decimal? CurFreightCost { get; set; } + public decimal? CurBrokerageCost { get; set; } + public string TaxCode1 { get; set; } + public string TaxCode2 { get; set; } + public string BflushLoc { get; set; } + public bool Reservable { get; set; } + public short? ShelfLife { get; set; } + public string LotPrefix { get; set; } + public string SerialPrefix { get; set; } + public byte? SerialLength { get; set; } + public string IssueBy { get; set; } + public bool SerialTracked { get; set; } + public bool LotTracked { get; set; } + public string CostType { get; set; } + public decimal? MatlCost { get; set; } + public decimal? LbrCost { get; set; } + public decimal? FovhdCost { get; set; } + public decimal? VovhdCost { get; set; } + public decimal? OutCost { get; set; } + public decimal? CurMatlCost { get; set; } + public decimal? CurLbrCost { get; set; } + public decimal? CurFovhdCost { get; set; } + public decimal? CurVovhdCost { get; set; } + public decimal? CurOutCost { get; set; } + public decimal? AvgMatlCost { get; set; } + public decimal? AvgLbrCost { get; set; } + public decimal? AvgFovhdCost { get; set; } + public decimal? AvgVovhdCost { get; set; } + public decimal? AvgOutCost { get; set; } + public string ProdType { get; set; } + public decimal? RatePerDay { get; set; } + public short? MpsPlanFence { get; set; } + public bool PassReq { get; set; } + public bool LotGenExp { get; set; } + public string SupplySite { get; set; } + public string ProdMix { get; set; } + public string Stat { get; set; } + public string StatusChgUserCode { get; set; } + public DateTime? ChgDate { get; set; } + public string ReasonCode { get; set; } + public string SupplyWhse { get; set; } + public short? DuePeriod { get; set; } + public decimal? OrderMax { get; set; } + public bool MrpPart { get; set; } + public bool InfinitePart { get; set; } + public bool NoteExistsFlag { get; set; } + public DateTime RecordDate { get; set; } + public Guid RowPointer { get; set; } + public decimal? SupplyToleranceHrs { get; set; } + public short ExpLeadTime { get; set; } + public decimal? VarExpLead { get; set; } + public string Buyer { get; set; } + public bool OrderConfigurable { get; set; } + public bool JobConfigurable { get; set; } + public string CfgModel { get; set; } + public string CoPostConfig { get; set; } + public string JobPostConfig { get; set; } + public string AutoJob { get; set; } + public string AutoPost { get; set; } + public string Setupgroup { get; set; } + public string CreatedBy { get; set; } + public string UpdatedBy { get; set; } + public DateTime CreateDate { get; set; } + public bool InWorkflow { get; set; } + public bool MfgSupplySwitchingActive { get; set; } + public short? TimeFenceRule { get; set; } + public double? TimeFenceValue { get; set; } + public DateTime? EarliestPlannedPoReceipt { get; set; } + public bool UseReorderPoint { get; set; } + public decimal? ReorderPoint { get; set; } + public decimal? FixedOrderQty { get; set; } + public decimal? UnitInsuranceCost { get; set; } + public decimal? UnitLocFrtCost { get; set; } + public decimal? CurInsuranceCost { get; set; } + public decimal? CurLocFrtCost { get; set; } + public bool TaxFreeMatl { get; set; } + public short? TaxFreeDays { get; set; } + public decimal? SafetyStockPercent { get; set; } + public string TariffClassification { get; set; } + public DateTime Lowdate { get; set; } + public string RcptRqmt { get; set; } + public bool ActiveForDataIntegration { get; set; } + public decimal? RcvdOverPoQtyTolerance { get; set; } + public decimal? RcvdUnderPoQtyTolerance { get; set; } + public bool IncludeInNetChangePlanning { get; set; } + public bool Kit { get; set; } + public bool PrintKitComponents { get; set; } + public short? SafetyStockRule { get; set; } + public bool ShowInDropDownList { get; set; } + public bool ControlledByExternalIcs { get; set; } + public decimal? InventoryUclTolerance { get; set; } + public decimal? InventoryLclTolerance { get; set; } + public string SeparationAttribute { get; set; } + public double? BatchReleaseAttribute1 { get; set; } + public double? BatchReleaseAttribute2 { get; set; } + public double? BatchReleaseAttribute3 { get; set; } + public byte[] Picture { get; set; } + public bool ActiveForCustomerPortal { get; set; } + public bool Featured { get; set; } + public bool TopSeller { get; set; } + public string Overview { get; set; } + public bool PreassignLots { get; set; } + public bool PreassignSerials { get; set; } + public string AttrGroup { get; set; } + public string DimensionGroup { get; set; } + public string LotAttrGroup { get; set; } + public bool TrackPieces { get; set; } + public DateTime? BomLastImportDate { get; set; } + public bool SaveCurrentRevUponBomImport { get; set; } + public string NaftaPrefCrit { get; set; } + public bool SubjectToNaftaRvc { get; set; } + public bool Producer { get; set; } + public string NaftaCountryOfOrigin { get; set; } + public bool MustUseFutureRcptsBeforePln { get; set; } + public bool SubjectToExciseTax { get; set; } + public decimal? ExciseTaxPercent { get; set; } + public string Uf_PLT_AddItemDesc { get; set; } + public string Uf_PLT_Class { get; set; } + public string Uf_PLT_CNCode { get; set; } + public string Uf_PLT_Norm { get; set; } + public string Uf_PLT_OldItemID { get; set; } + public decimal? Uf_PLT_Volume { get; set; } + public string Uf_PLT_VolumeUnit { get; set; } + public bool Uf_INT_Replicate { get; set; } + public string BoxId { get; set; } + public decimal? ItemLength { get; set; } + public decimal? ItemFi { get; set; } + public decimal? BoxItemsCnt { get; set; } + public string Klient { get; set; } + public string Uf_FKR_FA_RodzajPozycji { get; set; } + public string Uf_Nr_Klienta { get; set; } + public int? Uf_FKR_FA_Items_Nr_Zmiany { get; set; } + public string Uf_FKR_FA_item_core { get; set; } + public string Uf_FKR_GTU { get; set; } + public int? Uf_FKR_FA_Ilosc_Na_Jedn_Pak { get; set; } + public int? Uf_Element_Ilosc_W_Palecie { get; set; } + public bool? Uf_PUDELKO { get; set; } + public string Uf_IMP_OrginalItem { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Entities/ItemCust.cs b/SytelineSaAppEfDataModel/Entities/ItemCust.cs new file mode 100644 index 0000000..bc897ea --- /dev/null +++ b/SytelineSaAppEfDataModel/Entities/ItemCust.cs @@ -0,0 +1,30 @@ +namespace SytelineSaAppEfDataModel.Entities; + +public class ItemCust +{ + public string Item { get; set; } + public string CustNum { get; set; } + public int CustItemSeq { get; set; } + public string CustItem { get; set; } + public int? PurchYtd { get; set; } + public decimal? OrderYtd { get; set; } + public decimal? ShipYtd { get; set; } + public decimal? OrderPtd { get; set; } + public string UM { get; set; } + public int? DuePeriod { get; set; } + public byte 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 CreateDate { get; set; } + public byte InWorkflow { get; set; } + public int? Rank { get; set; } + public string EndUser { get; set; } + public string Uf_FKR_CustItem2 { get; set; } + public string Uf_KOD_EAN13 { get; set; } + public string Uf_Paleta_BROSE { get; set; } + public string Uf_Pojemnik_BROSE { get; set; } + public string Uf_Paleta_BROSE_Pokrywa { get; set; } + public string Uf_RewizjaRysunku { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Entities/ItemCustPriceAll.cs b/SytelineSaAppEfDataModel/Entities/ItemCustPriceAll.cs new file mode 100644 index 0000000..8862ed4 --- /dev/null +++ b/SytelineSaAppEfDataModel/Entities/ItemCustPriceAll.cs @@ -0,0 +1,39 @@ +namespace SytelineSaAppEfDataModel.Entities; + +public class ItemCustPriceAll +{ + public string SiteRef { get; set; } + public string Item { get; set; } + public string CustNum { get; set; } + public int CustItemSeq { get; set; } + public DateTime EffectDate { get; set; } + public decimal? ContPrice { get; set; } + public decimal? BrkQty1 { get; set; } + public decimal? BrkQty2 { get; set; } + public decimal? BrkQty3 { get; set; } + public decimal? BrkQty4 { get; set; } + public decimal? BrkQty5 { get; set; } + public decimal? BrkPrice1 { get; set; } + public decimal? BrkPrice2 { get; set; } + public decimal? BrkPrice3 { get; set; } + public decimal? BrkPrice4 { get; set; } + public decimal? BrkPrice5 { get; set; } + public string BaseCode1 { get; set; } + public string BaseCode2 { get; set; } + public string BaseCode3 { get; set; } + public string BaseCode4 { get; set; } + public string BaseCode5 { get; set; } + public string DolPercent1 { get; set; } + public string DolPercent2 { get; set; } + public string DolPercent3 { get; set; } + public string DolPercent4 { get; set; } + public string DolPercent5 { 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 CreateDate { get; set; } + public bool InWorkflow { get; set; } + public bool IncludeTaxInPrice { 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/VatCodeAssociation.cs b/SytelineSaAppEfDataModel/Entities/VatCodeAssociation.cs new file mode 100644 index 0000000..5d24d0a --- /dev/null +++ b/SytelineSaAppEfDataModel/Entities/VatCodeAssociation.cs @@ -0,0 +1,66 @@ +namespace SytelineSaAppEfDataModel.Entities; + +public class VatCodeAssociation +{ + public string VATRegisterType { get; set; } + public string EndUserType { get; set; } + public string Category { get; set; } + public string ProdCode { get; set; } + public string TaxCode { get; set; } + public string VATRegisterCode { get; set; } + public bool InWorkflow { 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 CreateDate { get; set; } + public string Uf_ZPL_CodesCgsAcct { get; set; } + public string Uf_ZPL_CodesCgsAcctUnit1 { get; set; } + public string Uf_ZPL_CodesCgsAcctUnit2 { get; set; } + public string Uf_ZPL_CodesCgsAcctUnit3 { get; set; } + public string Uf_ZPL_CodesCgsAcctUnit4 { get; set; } + public string Uf_ZPL_CodesCgsDescription { get; set; } + public string Uf_ZPL_CodesCgsFovhdAcct { get; set; } + public string Uf_ZPL_CodesCgsFovhdAcctUnit1 { get; set; } + public string Uf_ZPL_CodesCgsFovhdAcctUnit2 { get; set; } + public string Uf_ZPL_CodesCgsFovhdAcctUnit3 { get; set; } + public string Uf_ZPL_CodesCgsFovhdAcctUnit4 { get; set; } + public string Uf_ZPL_CodesCgsFovhdDescription { get; set; } + public string Uf_ZPL_CodesCgsLbrAcct { get; set; } + public string Uf_ZPL_CodesCgsLbrAcctUnit1 { get; set; } + public string Uf_ZPL_CodesCgsLbrAcctUnit2 { get; set; } + public string Uf_ZPL_CodesCgsLbrAcctUnit3 { get; set; } + public string Uf_ZPL_CodesCgsLbrAcctUnit4 { get; set; } + public string Uf_ZPL_CodesCgsLbrDescription { get; set; } + public string Uf_ZPL_CodesCgsVovhdAcct { get; set; } + public string Uf_ZPL_CodesCgsVovhdAcctUnit1 { get; set; } + public string Uf_ZPL_CodesCgsVovhdAcctUnit2 { get; set; } + public string Uf_ZPL_CodesCgsVovhdAcctUnit3 { get; set; } + public string Uf_ZPL_CodesCgsVovhdAcctUnit4 { get; set; } + public string Uf_ZPL_CodesCgsVovhdDescription { get; set; } + public string Uf_ZPL_CodesCOGSVarsAcct { get; set; } + public string Uf_ZPL_CodesCOGSVarsAcctUnit1 { get; set; } + public string Uf_ZPL_CodesCOGSVarsAcctUnit2 { get; set; } + public string Uf_ZPL_CodesCOGSVarsAcctUnit3 { get; set; } + public string Uf_ZPL_CodesCOGSVarsAcctUnit4 { get; set; } + public string Uf_ZPL_CodesCOGVarsDescription { get; set; } + public string Uf_ZPL_CodesOutAcct { get; set; } + public string Uf_ZPL_CodesOutAcctUnit1 { get; set; } + public string Uf_ZPL_CodesOutAcctUnit2 { get; set; } + public string Uf_ZPL_CodesOutAcctUnit3 { get; set; } + public string Uf_ZPL_CodesOutAcctUnit4 { get; set; } + public string Uf_ZPL_CodesOutDescription { get; set; } + public string Uf_ZPL_CodesSaleDsAcct { get; set; } + public string Uf_ZPL_CodesSaleDsAcctUnit1 { get; set; } + public string Uf_ZPL_CodesSaleDsAcctUnit2 { get; set; } + public string Uf_ZPL_CodesSaleDsAcctUnit3 { get; set; } + public string Uf_ZPL_CodesSaleDsAcctUnit4 { get; set; } + public string Uf_ZPL_CodesSaleDsDescription { get; set; } + public string Uf_ZPL_CodesSalesAcct { get; set; } + public string Uf_ZPL_CodesSalesAcctUnit1 { get; set; } + public string Uf_ZPL_CodesSalesAcctUnit2 { get; set; } + public string Uf_ZPL_CodesSalesAcctUnit3 { get; set; } + public string Uf_ZPL_CodesSalesAcctUnit4 { get; set; } + public string Uf_ZPL_CodesSalesDescription { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Entities/WzClient.cs b/SytelineSaAppEfDataModel/Entities/WzClient.cs new file mode 100644 index 0000000..13db712 --- /dev/null +++ b/SytelineSaAppEfDataModel/Entities/WzClient.cs @@ -0,0 +1,12 @@ +namespace SytelineSaAppEfDataModel.Entities; + +public class WzClient +{ + public Guid ID { get; set; } + public string CustomerNumber { get; set; } + public int? CustomerSequence { get; set; } + public DateTime CreatedDate { get; set; } + public string Name { get; set; } + public string ShortName { get; set; } + public byte[]? Logo { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Entities/WzHeader.cs b/SytelineSaAppEfDataModel/Entities/WzHeader.cs new file mode 100644 index 0000000..8fabda1 --- /dev/null +++ b/SytelineSaAppEfDataModel/Entities/WzHeader.cs @@ -0,0 +1,13 @@ +namespace SytelineSaAppEfDataModel.Entities; + +public class WzHeader +{ + public Guid ID { get; set; } + public Guid? FK_Client { get; set; } + public DateTime CreatedDate { get; set; } + public string? EmailAddresses { get; set; } + public string? WzNumbers { get; set; } + + // Navigation property + public WzClient Client { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Entities/WzRowMarelli.cs b/SytelineSaAppEfDataModel/Entities/WzRowMarelli.cs new file mode 100644 index 0000000..1a5dab2 --- /dev/null +++ b/SytelineSaAppEfDataModel/Entities/WzRowMarelli.cs @@ -0,0 +1,19 @@ +namespace SytelineSaAppEfDataModel.Entities; + +public class WzRowMarelli +{ + public Guid ID { get; set; } + public Guid? FKHeader { get; set; } + public string Type { get; set; } + public int? PalletNumber { get; set; } + public string ItemNumber { get; set; } + public string EngineerNumber { get; set; } + public int? Quantity { get; set; } + public string OrderNumber { get; set; } + public string WzNumber { get; set; } + public string FaIndex { get; set; } + public int? TransactionNumber { get; set; } + + // Navigation property + public WzHeader Header { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Entities/WzRowMeyle.cs b/SytelineSaAppEfDataModel/Entities/WzRowMeyle.cs new file mode 100644 index 0000000..445f8d7 --- /dev/null +++ b/SytelineSaAppEfDataModel/Entities/WzRowMeyle.cs @@ -0,0 +1,19 @@ +namespace SytelineSaAppEfDataModel.Entities; + +public class WzRowMeyle +{ + public Guid ID { get; set; } + public Guid? FK_Header { get; set; } + public string OrderNumber { get; set; } + public string ItemNumber { get; set; } + public int? Quantity { get; set; } + public int? PalletNumber { get; set; } + 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; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/MappingProfile.cs b/SytelineSaAppEfDataModel/MappingProfile.cs index d8d3847..da80dc5 100644 --- a/SytelineSaAppEfDataModel/MappingProfile.cs +++ b/SytelineSaAppEfDataModel/MappingProfile.cs @@ -20,6 +20,20 @@ namespace SytelineSaAppEfDataModel CreateMap().ReverseMap(); CreateMap().ReverseMap(); CreateMap().ReverseMap(); + CreateMap().ForMember(dest => dest.LogoBase64, + opt => opt.MapFrom(src => src.Logo != null ? Convert.ToBase64String(src.Logo) : null)).ReverseMap(); + CreateMap().ReverseMap(); + CreateMap().ReverseMap(); + CreateMap().ReverseMap(); + CreateMap().ReverseMap(); + CreateMap().ReverseMap(); + CreateMap().ReverseMap(); + CreateMap().ReverseMap(); + CreateMap().ReverseMap(); + CreateMap().ReverseMap(); + CreateMap().ReverseMap(); + CreateMap().ReverseMap(); + CreateMap(); } } } diff --git a/SytelineSaAppEfDataModel/Services/CustomerOrderService.cs b/SytelineSaAppEfDataModel/Services/CustomerOrderService.cs index 616ec7b..912bfea 100644 --- a/SytelineSaAppEfDataModel/Services/CustomerOrderService.cs +++ b/SytelineSaAppEfDataModel/Services/CustomerOrderService.cs @@ -1,9 +1,4 @@ using AutoMapper; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using SytelineSaAppEfDataModel.Dtos; @@ -22,7 +17,7 @@ namespace SytelineSaAppEfDataModel.Services .Where(x => x.RowPointer == orderNumber) .Select(x => mapper.Map(x)).FirstOrDefaultAsync(); if (customerOrder == null) return null; - + customerOrder.CustomerOrderLines = await context.CustomerOrderLines .Where(x => x.CoNum == customerOrder.CoNum) .Select(x => mapper.Map(x)).ToListAsync(); @@ -33,14 +28,88 @@ namespace SytelineSaAppEfDataModel.Services .Where(x => x.CoNum == customerOrder.CoNum && x.CoLine == customerOrderLine.CoLine) .Select(x => mapper.Map(x)).ToListAsync(); } - + IList ediCustomerOrderTranslates = await context.EdiCustomerOrderTranslates .Where(x => x.CoCoNum == customerOrder.CoNum) .Select(x => mapper.Map(x)).ToListAsync(); - + customerOrder.EdiCustomerOrderTranslates = ediCustomerOrderTranslates; return customerOrder; } + + public async Task GetByCoNumber(string orderNumber) + { + CustomerOrderDto? customerOrder = await context.CustomerOrders + .Where(x => x.CoNum == orderNumber) + .Select(x => mapper.Map(x)).FirstOrDefaultAsync(); + if (customerOrder == null) return null; + + customerOrder.CustomerOrderLines = await context.CustomerOrderLines + .Where(x => x.CoNum == customerOrder.CoNum) + .Select(x => mapper.Map(x)).ToListAsync(); + + foreach (CustomerOrderLineDto customerOrderLine in customerOrder.CustomerOrderLines) + { + customerOrderLine.CustomerOrderLineItems = await context.CustomerOrderLineItems + .Where(x => x.CoNum == customerOrder.CoNum && x.CoLine == customerOrderLine.CoLine) + .Select(x => mapper.Map(x)).ToListAsync(); + } + + IList ediCustomerOrderTranslates = await context.EdiCustomerOrderTranslates + .Where(x => x.CoCoNum == customerOrder.CoNum) + .Select(x => mapper.Map(x)).ToListAsync(); + + customerOrder.EdiCustomerOrderTranslates = ediCustomerOrderTranslates; + + return customerOrder; + } + + public async Task GetByCustomerAndPo(string customerNumber, int customerSequence, + string poNumber) + { + return await context.CustomerOrders + .Where(x => x.CustNum == customerNumber && x.CustSeq == customerSequence && x.CustPo == poNumber) + .Select(x => mapper.Map(x)).FirstOrDefaultAsync(); + } + + public async Task GetByPo(string poNumber) + { + return await context.CustomerOrders.Where(x => x.CustPo == poNumber && x.Stat == "O") + .OrderByDescending(x => x.CreateDate).Select(x => mapper.Map(x)) + .FirstOrDefaultAsync(); + } + + public async Task> GetListByCustomerAndPo(string customerNumber, int customerSequence, + string poNumber) + { + return await context.CustomerOrders + .Where(x => x.CustNum == customerNumber && x.CustSeq == customerSequence && x.CustPo == poNumber) + .Select(x => mapper.Map(x)).ToListAsync(); + } + + public async Task> GetListByCustomer(string customerNumber, int customerSequence) + { + return await context.CustomerOrders.Where(x => x.CustNum == customerNumber && x.CustSeq == customerSequence) + .Select(x => mapper.Map(x)).ToListAsync(); + } + + public async Task?> GetLinesByCoNumber(string customerOrderNumber) + { + List customerOrderLines = await context.CustomerOrderLines + .Where(x => x.CoNum == customerOrderNumber).Select(x => mapper.Map(x)) + .ToListAsync(); + + return customerOrderLines; + } + + public async Task?> GetItemsByCoNumber(string customerOrderNumber) + { + List customerOrderLineItems = await context.CustomerOrderLineItems + .Where(x => x.CoNum == customerOrderNumber) + .Select(x => mapper.Map(x)).ToListAsync(); + + return customerOrderLineItems; + } } -} +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/CustomerService.cs b/SytelineSaAppEfDataModel/Services/CustomerService.cs new file mode 100644 index 0000000..a0ef006 --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/CustomerService.cs @@ -0,0 +1,13 @@ +using AutoMapper; +using Microsoft.EntityFrameworkCore; +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public class CustomerService(SytelineSaAppDbContext context, IMapper mapper) : ICustomerService +{ + public async Task> GetAllCustomers() + { + return await context.Customers.Select(x => mapper.Map(x)).ToListAsync(); + } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/CustomerTpService.cs b/SytelineSaAppEfDataModel/Services/CustomerTpService.cs new file mode 100644 index 0000000..e5acd16 --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/CustomerTpService.cs @@ -0,0 +1,13 @@ +using AutoMapper; +using Microsoft.EntityFrameworkCore; +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public class CustomerTpService(SytelineSaAppDbContext context, IMapper mapper) : ICustomerTpService +{ + public async Task> GetAllCustomersTp() + { + return await context.CustomerTps.Select(x => mapper.Map(x)).ToListAsync(); + } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/EdiCustomerOrderImportService.cs b/SytelineSaAppEfDataModel/Services/EdiCustomerOrderImportService.cs new file mode 100644 index 0000000..9118519 --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/EdiCustomerOrderImportService.cs @@ -0,0 +1,29 @@ +using AutoMapper; +using Microsoft.EntityFrameworkCore; +using SytelineSaAppEfDataModel.Dtos; +using SytelineSaAppEfDataModel.Entities; + +namespace SytelineSaAppEfDataModel.Services; + +public class EdiCustomerOrderImportService(SytelineSaAppDbContext context, IMapper mapper) : IEdiCustomerOrderImportService +{ + public async Task GetLastUpdateDate() + { + return (await context.EdiCustomerOrderImports.OrderByDescending(x => x.LastUpdateDate) + .FirstOrDefaultAsync())?.LastUpdateDate ?? DateTime.Now.Date; + } + + public async Task AddEdiCustomerOrderImport(EdiCustomerOrderImportDto ediCustomerOrderImport) + { + var entity = mapper.Map(ediCustomerOrderImport); + await context.EdiCustomerOrderImports.AddAsync(entity); + return await context.SaveChangesAsync() > 0; + } + + public async Task AddEdiCustomerOrderImports(IList ediCustomerOrderImports) + { + var entities = mapper.Map>(ediCustomerOrderImports); + context.EdiCustomerOrderImports.AddRange(entities); + return await context.SaveChangesAsync() > 0; + } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/EdiCustomerOrderService.cs b/SytelineSaAppEfDataModel/Services/EdiCustomerOrderService.cs index a958d33..1876637 100644 --- a/SytelineSaAppEfDataModel/Services/EdiCustomerOrderService.cs +++ b/SytelineSaAppEfDataModel/Services/EdiCustomerOrderService.cs @@ -9,6 +9,15 @@ namespace SytelineSaAppEfDataModel.Services { public class EdiCustomerOrderService(SytelineSaAppDbContext context, IMapper mapper) : IEdiCustomerOrderService { + public async Task GetLastOrderNumber() + { + var lastOrderNumber = + (await context.EdiCustomerOrders.OrderByDescending(x => x.CustomerOrderNumber).FirstOrDefaultAsync()) + ?.CustomerOrderNumber[3..] ?? "0"; + + return int.Parse(lastOrderNumber); + } + public async Task> GetAll() { IList ediCustomerOrderTranslates = await context.EdiCustomerOrderTranslates @@ -24,7 +33,7 @@ namespace SytelineSaAppEfDataModel.Services { if (!ediTranslatesByCoNumber.TryGetValue(ediCustomerOrder.CustomerOrderNumber, out List? customerOrderTranslates)) continue; - + customerOrderTranslates = customerOrderTranslates.OrderByDescending(x => x.CreatedDate).ToList(); ediCustomerOrder.EdiCustomerOrderTranslates = customerOrderTranslates; } @@ -56,7 +65,7 @@ namespace SytelineSaAppEfDataModel.Services { return null; } - + IList ediCustomerOrderLines = await context.EdiCustomerOrderLines .Where(x => x.CustomerOrderNumber == ediCustomerOrder.CustomerOrderNumber) .Select(x => mapper.Map(x)).ToListAsync(); @@ -78,7 +87,7 @@ namespace SytelineSaAppEfDataModel.Services return ediCustomerOrder; } - + public async Task> FindMissingOrders(DateTime startDate) { IList ediCustomerOrderTranslates = await context.EdiCustomerOrderTranslates @@ -100,14 +109,19 @@ namespace SytelineSaAppEfDataModel.Services public async Task SendOrderToSyteline(Guid customerOrderNumber) { - EdiCustomerOrder? ediCustomerOrder = await context.EdiCustomerOrders.FirstOrDefaultAsync(x => x.RowPointer == customerOrderNumber); - + EdiCustomerOrder? ediCustomerOrder = + await context.EdiCustomerOrders.FirstOrDefaultAsync(x => x.RowPointer == customerOrderNumber); + if (ediCustomerOrder == null) return 0; - var ediCoNum = new SqlParameter("@PEdiCoNum", SqlDbType.NVarChar, 50) { Value = ediCustomerOrder.CustomerOrderNumber }; - var ediCoCount = new SqlParameter("@PEdiCoCount", SqlDbType.Int) { Value = 0, Direction = ParameterDirection.Output }; - var postedCount = new SqlParameter("@PPostedCount", SqlDbType.Int) { Value = 0, Direction = ParameterDirection.Output }; - var infoBar = new SqlParameter("@Infobar", SqlDbType.NVarChar, 2800) { Value = "", Direction = ParameterDirection.Output }; + var ediCoNum = new SqlParameter("@PEdiCoNum", SqlDbType.NVarChar, 50) + { Value = ediCustomerOrder.CustomerOrderNumber }; + var ediCoCount = new SqlParameter("@PEdiCoCount", SqlDbType.Int) + { Value = 0, Direction = ParameterDirection.Output }; + var postedCount = new SqlParameter("@PPostedCount", SqlDbType.Int) + { Value = 0, Direction = ParameterDirection.Output }; + var infoBar = new SqlParameter("@Infobar", SqlDbType.NVarChar, 2800) + { Value = "", Direction = ParameterDirection.Output }; var autoPost = new SqlParameter("@AutoPost", SqlDbType.Int) { Value = 0 }; var processId = new SqlParameter("@ProcessId", SqlDbType.Int) { Value = 423456 }; @@ -125,5 +139,36 @@ namespace SytelineSaAppEfDataModel.Services return postedCountResult; } + + public async Task<(bool, string)> SaveOrdersWithDetails(List ediCustomerOrders) + { + if (ediCustomerOrders.Count == 0) + { + return (false, string.Empty); + } + + try + { + IList customerOrders = ediCustomerOrders.Select(mapper.Map).ToList(); + IList ediCustomerOrderLines = ediCustomerOrders + .SelectMany(x => x.EdiCustomerOrderLines).Select(mapper.Map).ToList(); + IList ediCustomerOrderLineItems = ediCustomerOrders + .SelectMany(x => x.EdiCustomerOrderLines).SelectMany(y => y.EdiCustomerOrderLineItems) + .Select(mapper.Map).ToList(); + + await context.EdiCustomerOrders.AddRangeAsync(customerOrders); + await context.EdiCustomerOrderLines.AddRangeAsync(ediCustomerOrderLines); + await context.EdiCustomerOrderLineItems.AddRangeAsync(ediCustomerOrderLineItems); + await context.EdiCustomerOrderTranslates.AddRangeAsync(ediCustomerOrders + .SelectMany(x => x.EdiCustomerOrderTranslates) + .Select(mapper.Map)); + await context.SaveChangesAsync(); + return (true, string.Empty); + } + catch (Exception ex) + { + return (false, ex.Message); + } + } } } diff --git a/SytelineSaAppEfDataModel/Services/EdiLogService.cs b/SytelineSaAppEfDataModel/Services/EdiLogService.cs new file mode 100644 index 0000000..2672925 --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/EdiLogService.cs @@ -0,0 +1,15 @@ +using AutoMapper; +using SytelineSaAppEfDataModel.Dtos; +using SytelineSaAppEfDataModel.Entities; + +namespace SytelineSaAppEfDataModel.Services; + +public class EdiLogService(SytelineSaAppDbContext context, IMapper mapper) : IEdiLogService +{ + public async Task AddEdiLog(EdiLogDto ediLog) + { + var entity = mapper.Map(ediLog); + await context.EdiLogs.AddAsync(entity); + return await context.SaveChangesAsync() > 0; + } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/ICustomerOrderService.cs b/SytelineSaAppEfDataModel/Services/ICustomerOrderService.cs index 5db216a..784e881 100644 --- a/SytelineSaAppEfDataModel/Services/ICustomerOrderService.cs +++ b/SytelineSaAppEfDataModel/Services/ICustomerOrderService.cs @@ -11,5 +11,15 @@ namespace SytelineSaAppEfDataModel.Services { Task> GetAll(); Task GetByOrderNumber(Guid orderNumber); + Task GetByCoNumber(string orderNumber); + Task GetByCustomerAndPo(string customerNumber, int customerSequence, string poNumber); + + Task> GetListByCustomerAndPo(string customerNumber, int customerSequence, + string poNumber); + + Task GetByPo(string poNumber); + Task> GetListByCustomer(string customerNumber, int customerSequence); + Task?> GetLinesByCoNumber(string customerOrderNumber); + Task?> GetItemsByCoNumber(string customerOrderNumber); } } diff --git a/SytelineSaAppEfDataModel/Services/ICustomerService.cs b/SytelineSaAppEfDataModel/Services/ICustomerService.cs new file mode 100644 index 0000000..ab1d42d --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/ICustomerService.cs @@ -0,0 +1,8 @@ +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public interface ICustomerService +{ + Task> GetAllCustomers(); +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/ICustomerTpService.cs b/SytelineSaAppEfDataModel/Services/ICustomerTpService.cs new file mode 100644 index 0000000..061bb59 --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/ICustomerTpService.cs @@ -0,0 +1,8 @@ +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public interface ICustomerTpService +{ + Task> GetAllCustomersTp(); +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/IEdiCustomerOrderImportService.cs b/SytelineSaAppEfDataModel/Services/IEdiCustomerOrderImportService.cs new file mode 100644 index 0000000..b621444 --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/IEdiCustomerOrderImportService.cs @@ -0,0 +1,10 @@ +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public interface IEdiCustomerOrderImportService +{ + Task GetLastUpdateDate(); + Task AddEdiCustomerOrderImport(EdiCustomerOrderImportDto ediCustomerOrderImport); + Task AddEdiCustomerOrderImports(IList ediCustomerOrderImports); +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/IEdiCustomerOrderService.cs b/SytelineSaAppEfDataModel/Services/IEdiCustomerOrderService.cs index 1c61e65..472b5ab 100644 --- a/SytelineSaAppEfDataModel/Services/IEdiCustomerOrderService.cs +++ b/SytelineSaAppEfDataModel/Services/IEdiCustomerOrderService.cs @@ -9,10 +9,12 @@ namespace SytelineSaAppEfDataModel.Services { public interface IEdiCustomerOrderService { + Task GetLastOrderNumber(); Task> GetAll(); Task> GetByDate(DateTime date); Task GetByOrderNumber(Guid orderNumber); Task> FindMissingOrders(DateTime startDate); + Task<(bool, string)> SaveOrdersWithDetails(List ediCustomerOrders); Task SendOrderToSyteline(Guid customerOrderNumber); } } diff --git a/SytelineSaAppEfDataModel/Services/IEdiLogService.cs b/SytelineSaAppEfDataModel/Services/IEdiLogService.cs new file mode 100644 index 0000000..bdb653c --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/IEdiLogService.cs @@ -0,0 +1,8 @@ +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public interface IEdiLogService +{ + Task AddEdiLog(EdiLogDto ediLog); +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/IItemCustPriceAllService.cs b/SytelineSaAppEfDataModel/Services/IItemCustPriceAllService.cs new file mode 100644 index 0000000..408acef --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/IItemCustPriceAllService.cs @@ -0,0 +1,8 @@ +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public interface IItemCustPriceAllService +{ + Task GetItemCustPriceAllAsync(string itemNumber, string customerNumber); +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/IItemCustService.cs b/SytelineSaAppEfDataModel/Services/IItemCustService.cs new file mode 100644 index 0000000..37dc032 --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/IItemCustService.cs @@ -0,0 +1,8 @@ +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public interface IItemCustService +{ + Task GetItem(string itemNumber, string customerNumber); +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/IItemService.cs b/SytelineSaAppEfDataModel/Services/IItemService.cs new file mode 100644 index 0000000..8b40cbc --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/IItemService.cs @@ -0,0 +1,8 @@ +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public interface IItemService +{ + Task GetItem(string itemNumber); +} \ No newline at end of file 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 9050da6..c7ba459 100644 --- a/SytelineSaAppEfDataModel/Services/IMaterialTransactionService.cs +++ b/SytelineSaAppEfDataModel/Services/IMaterialTransactionService.cs @@ -6,7 +6,11 @@ public interface IMaterialTransactionService { Task> GetAll(); Task GetByWzNumber(string wzNumber); + Task> GetListByWzNumber(string wzNumber); Task> GetByWzNumbers(ISet wzNumbers); Task> GetByOrderNumber(string orderNumber); Task> GetOrderNumbersByWz(ISet wzNumbers); + Task> GetByCustomerNumber(string customerNumber, int customerSequence); + Task GetByPartNumber(string partNumber); + Task> GetWithPartNumber(); } \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/IVatCodeAssociationService.cs b/SytelineSaAppEfDataModel/Services/IVatCodeAssociationService.cs new file mode 100644 index 0000000..6bb52a0 --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/IVatCodeAssociationService.cs @@ -0,0 +1,8 @@ +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public interface IVatCodeAssociationService +{ + Task GetVatCodesAssociation(string customerDoInvoice, string endUserType, string productCode); +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/IWzClientService.cs b/SytelineSaAppEfDataModel/Services/IWzClientService.cs new file mode 100644 index 0000000..0c3ac86 --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/IWzClientService.cs @@ -0,0 +1,9 @@ +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public interface IWzClientService +{ + Task> GetAll(); + Task GetById(Guid id); +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/IWzHeaderService.cs b/SytelineSaAppEfDataModel/Services/IWzHeaderService.cs new file mode 100644 index 0000000..d25e8a5 --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/IWzHeaderService.cs @@ -0,0 +1,13 @@ +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public interface IWzHeaderService +{ + Task> GetAll(); + Task> GetByCustomerNumber(string customerNumber, int customerSequence); + Task CreateHeader(WzHeaderDto wzHeader); + Task GetById(Guid id); + Task GetByIdMarelli(Guid id); + Task AddEmailsToWzHeader(Guid id, string emailAddresses); +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/IWzRowMareliService.cs b/SytelineSaAppEfDataModel/Services/IWzRowMareliService.cs new file mode 100644 index 0000000..5817563 --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/IWzRowMareliService.cs @@ -0,0 +1,11 @@ +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public interface IWzRowMareliService +{ + Task> GetAll(); + Task CreateRows(IEnumerable rows); + Task> GetByWzHeaderId(Guid wzHeaderId); + Task UpdateRows(IEnumerable rows); +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/IWzRowMeyleService.cs b/SytelineSaAppEfDataModel/Services/IWzRowMeyleService.cs new file mode 100644 index 0000000..47ff117 --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/IWzRowMeyleService.cs @@ -0,0 +1,11 @@ +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public interface IWzRowMeyleService +{ + Task> GetAll(); + Task CreateRows(IEnumerable rows); + Task> GetByWzHeaderId(Guid wzHeaderId); + Task UpdateRows(IEnumerable rows); +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/ItemCustPriceAllService.cs b/SytelineSaAppEfDataModel/Services/ItemCustPriceAllService.cs new file mode 100644 index 0000000..a06b5ec --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/ItemCustPriceAllService.cs @@ -0,0 +1,13 @@ +using AutoMapper; +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public class ItemCustPriceAllService(SytelineSaAppDbContext context, IMapper mapper) : IItemCustPriceAllService +{ + public async Task GetItemCustPriceAllAsync(string itemNumber, string customerNumber) + { + return await Task.FromResult(mapper.Map(context.ItemCustPriceAlls + .OrderByDescending(x => x.EffectDate).FirstOrDefault(x => x.Item == itemNumber && x.CustNum == customerNumber))); + } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/ItemCustService.cs b/SytelineSaAppEfDataModel/Services/ItemCustService.cs new file mode 100644 index 0000000..9877609 --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/ItemCustService.cs @@ -0,0 +1,17 @@ +using AutoMapper; +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public class ItemCustService(SytelineSaAppDbContext context, IMapper mapper) : IItemCustService +{ + public Task GetItem(string itemNumber, string customerNumber) + { + var item = context.ItemCusts + .FirstOrDefault(x => x.Item == itemNumber && x.CustNum == customerNumber); + + return item == null + ? Task.FromResult(null) + : Task.FromResult(mapper.Map(item)); + } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/ItemService.cs b/SytelineSaAppEfDataModel/Services/ItemService.cs new file mode 100644 index 0000000..0d3cad5 --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/ItemService.cs @@ -0,0 +1,14 @@ +using AutoMapper; +using Microsoft.EntityFrameworkCore; +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public class ItemService(SytelineSaAppDbContext context, IMapper mapper) : IItemService +{ + public async Task GetItem(string itemNumber) + { + var item = await context.Items.FirstOrDefaultAsync(x => x.ItemCode == itemNumber); + return mapper.Map(item); + } +} \ 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 a2e9fb8..015427b 100644 --- a/SytelineSaAppEfDataModel/Services/MaterialTransactionService.cs +++ b/SytelineSaAppEfDataModel/Services/MaterialTransactionService.cs @@ -18,6 +18,13 @@ public class MaterialTransactionService(SytelineSaAppDbContext context, IMapper .Where(x => x.MTGroupNum == wzNumber) .Select(x => mapper.Map(x)).FirstOrDefaultAsync(); } + + public async Task> GetListByWzNumber(string wzNumber) + { + return await context.MaterialTransactions + .Where(x => x.MTGroupNum == wzNumber) + .Select(x => mapper.Map(x)).ToListAsync(); + } public async Task> GetByWzNumbers(ISet wzNumbers) { @@ -66,4 +73,35 @@ public class MaterialTransactionService(SytelineSaAppDbContext context, IMapper return result.Select(x => mapper.Map(x)); } + + public async Task> GetByCustomerNumber(string customerNumber, int customerSequence) + { + IList coNumbers = await context.CustomerOrders + .Where(x => x.CustNum == customerNumber && x.CustSeq == customerSequence && (x.Stat == "P" || x.Stat == "O")) + .Select(x => x.CoNum).ToListAsync(); + + List result = new List(); + + foreach (string coNumber in coNumbers) + { + IEnumerable materialTransactions = await GetByOrderNumber(coNumber); + result.AddRange(materialTransactions); + } + + 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(); + } + + public async Task> GetWithPartNumber() + { + return await context.MaterialTransactions + .Where(x => x.NR_KARTY_KONTROLNEJ != null) + .Select(x => mapper.Map(x)).ToListAsync(); + } } \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/VatCodeAssociationService.cs b/SytelineSaAppEfDataModel/Services/VatCodeAssociationService.cs new file mode 100644 index 0000000..fa163a6 --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/VatCodeAssociationService.cs @@ -0,0 +1,14 @@ +using AutoMapper; +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public class VatCodeAssociationService(SytelineSaAppDbContext context, IMapper mapper) : IVatCodeAssociationService +{ + public async Task GetVatCodesAssociation(string customerDoInvoice, string endUserType, + string productCode) + { + return await Task.FromResult(mapper.Map(context.VatCodeAssociations.FirstOrDefault(x => + x.VATRegisterType == customerDoInvoice && x.EndUserType == endUserType && x.ProdCode == productCode))); + } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/WzClientService.cs b/SytelineSaAppEfDataModel/Services/WzClientService.cs new file mode 100644 index 0000000..9cfe4df --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/WzClientService.cs @@ -0,0 +1,19 @@ +using AutoMapper; +using Microsoft.EntityFrameworkCore; +using SytelineSaAppEfDataModel.Dtos; + +namespace SytelineSaAppEfDataModel.Services; + +public class WzClientService(SytelineSaAppDbContext context, IMapper mapper) : IWzClientService +{ + public async Task> GetAll() + { + return await context.WzClients.Select(x => mapper.Map(x)).ToListAsync(); + } + + public async Task GetById(Guid id) + { + var entity = await context.WzClients.FirstOrDefaultAsync(x => x.ID == id); + return entity == null ? null : mapper.Map(entity); + } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/WzHeaderService.cs b/SytelineSaAppEfDataModel/Services/WzHeaderService.cs new file mode 100644 index 0000000..a14bb07 --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/WzHeaderService.cs @@ -0,0 +1,66 @@ +using AutoMapper; +using Microsoft.EntityFrameworkCore; +using SytelineSaAppEfDataModel.Dtos; +using SytelineSaAppEfDataModel.Entities; + +namespace SytelineSaAppEfDataModel.Services; + +public class WzHeaderService(SytelineSaAppDbContext context, IMapper mapper) : IWzHeaderService +{ + public async Task> GetAll() + { + return await context.WzHeaders.Select(x => mapper.Map(x)).ToListAsync(); + } + + public async Task> GetByCustomerNumber(string customerNumber, int customerSequence) + { + return await context.WzHeaders.Include(x => x.Client) + .Where(x => x.Client.CustomerNumber == customerNumber && x.Client.CustomerSequence == customerSequence) + .Select(x => mapper.Map(x)).ToListAsync(); + } + + public async Task CreateHeader(WzHeaderDto wzHeader) + { + var entity = mapper.Map(wzHeader); + await context.WzHeaders.AddAsync(entity); + await context.SaveChangesAsync(); + } + + public async Task GetById(Guid id) + { + var entity = await context.WzHeaders.FindAsync(id); + var items = await context.WzRowsMeyle.Where(x => x.FK_Header == id).Select(x => mapper.Map(x)) + .ToListAsync(); + + WzHeaderDto wzHeader = mapper.Map(entity); + wzHeader.WzRowsMeyle = items; + + return wzHeader; + } + + public async Task GetByIdMarelli(Guid id) + { + var entity = await context.WzHeaders.FindAsync(id); + var items = await context.WzRowsMareli.Where(x => x.FKHeader == id).Select(x => mapper.Map(x)) + .ToListAsync(); + + WzHeaderDto wzHeader = mapper.Map(entity); + wzHeader.WzRowsMarelli = items; + + return wzHeader; + } + + public async Task AddEmailsToWzHeader(Guid id, string emailAddresses) + { + var entity = await context.WzHeaders.FindAsync(id); + + if (entity == null) + { + throw new KeyNotFoundException($"WzHeader with ID {id} not found."); + } + + entity.EmailAddresses = emailAddresses; + context.WzHeaders.Update(entity); + await context.SaveChangesAsync(); + } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/WzRowMareliService.cs b/SytelineSaAppEfDataModel/Services/WzRowMareliService.cs new file mode 100644 index 0000000..93f4c05 --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/WzRowMareliService.cs @@ -0,0 +1,36 @@ +using AutoMapper; +using Microsoft.EntityFrameworkCore; +using SytelineSaAppEfDataModel.Dtos; +using SytelineSaAppEfDataModel.Entities; + +namespace SytelineSaAppEfDataModel.Services; + +public class WzRowMareliService(SytelineSaAppDbContext context, IMapper mapper) : IWzRowMareliService +{ + public async Task> GetAll() + { + return await context.WzRowsMeyle.Select(x => mapper.Map(x)).ToListAsync(); + } + + public async Task CreateRows(IEnumerable rows) + { + var entities = mapper.Map>(rows); + await context.WzRowsMareli.AddRangeAsync(entities); + await context.SaveChangesAsync(); + } + + public async Task> GetByWzHeaderId(Guid wzHeaderId) + { + return await context.WzRowsMareli + .Where(x => x.FKHeader == wzHeaderId) + .Select(x => mapper.Map(x)) + .ToListAsync(); + } + + public async Task UpdateRows(IEnumerable rows) + { + var entities = mapper.Map>(rows); + context.WzRowsMareli.UpdateRange(entities); + await context.SaveChangesAsync(); + } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Services/WzRowMeyleService.cs b/SytelineSaAppEfDataModel/Services/WzRowMeyleService.cs new file mode 100644 index 0000000..a0f11e3 --- /dev/null +++ b/SytelineSaAppEfDataModel/Services/WzRowMeyleService.cs @@ -0,0 +1,36 @@ +using AutoMapper; +using Microsoft.EntityFrameworkCore; +using SytelineSaAppEfDataModel.Dtos; +using SytelineSaAppEfDataModel.Entities; + +namespace SytelineSaAppEfDataModel.Services; + +public class WzRowMeyleService(SytelineSaAppDbContext context, IMapper mapper) : IWzRowMeyleService +{ + public async Task> GetAll() + { + return await context.WzRowsMeyle.Select(x => mapper.Map(x)).ToListAsync(); + } + + public async Task CreateRows(IEnumerable rows) + { + var entities = mapper.Map>(rows); + await context.WzRowsMeyle.AddRangeAsync(entities); + await context.SaveChangesAsync(); + } + + public async Task> GetByWzHeaderId(Guid wzHeaderId) + { + return await context.WzRowsMeyle + .Where(x => x.FK_Header == wzHeaderId) + .Select(x => mapper.Map(x)) + .ToListAsync(); + } + + public async Task UpdateRows(IEnumerable rows) + { + var entities = mapper.Map>(rows); + context.WzRowsMeyle.UpdateRange(entities); + await context.SaveChangesAsync(); + } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/SytelineSaAppDbContext.cs b/SytelineSaAppEfDataModel/SytelineSaAppDbContext.cs index ec06d4d..adc3804 100644 --- a/SytelineSaAppEfDataModel/SytelineSaAppDbContext.cs +++ b/SytelineSaAppEfDataModel/SytelineSaAppDbContext.cs @@ -18,9 +18,21 @@ namespace SytelineSaAppEfDataModel public DbSet CustomerOrderLineItems { get; set; } public DbSet UserNames { get; set; } public DbSet EdiUsers { get; set; } - public DbSet MaterialTransactions { get; set; } - + public DbSet WzClients { get; set; } + public DbSet WzHeaders { get; set; } + public DbSet WzRowsMeyle { get; set; } + public DbSet WzRowsMareli { get; set; } + public DbSet ItemCusts { get; set; } + public DbSet Lots { get; set; } + public DbSet EdiCustomerOrderImports { get; set; } + public DbSet Customers { get; set; } + public DbSet CustomerTps { get; set; } + public DbSet Items { get; set; } + public DbSet VatCodeAssociations { get; set; } + public DbSet ItemCustPriceAlls { get; set; } + public DbSet EdiLogs { get; set; } + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { var configuration = new ConfigurationBuilder() @@ -796,7 +808,7 @@ namespace SytelineSaAppEfDataModel entity.Property(e => e.WhseSplit) .HasColumnName("WhseSplit") .HasColumnType("tinyint") - .IsRequired(false);; + .IsRequired(false); entity.Property(e => e.VariableId) .HasColumnName("VariableId") @@ -875,6 +887,1703 @@ namespace SytelineSaAppEfDataModel .HasMaxLength(20) .IsRequired(false); }); + + modelBuilder.Entity(entity => + { + entity.ToTable("wz_header"); + + entity.HasKey(e => e.ID); + + entity.Property(e => e.ID) + .HasColumnName("ID") + .HasColumnType("uniqueidentifier"); + + entity.Property(e => e.FK_Client) + .HasColumnName("FK_Client") + .HasColumnType("uniqueidentifier") + .IsRequired(false); + + entity.Property(e => e.CreatedDate) + .HasColumnName("CreatedDate") + .HasColumnType("DateTime") + .IsRowVersion(); + + entity.Property(e => e.EmailAddresses) + .HasColumnName("EmailAddresses") + .HasMaxLength(1000) + .IsRequired(false); + + entity.Property(e => e.WzNumbers) + .HasColumnName("WzNumbers") + .HasMaxLength(500) + .IsRequired(false); + + // Relationship + entity.HasOne(e => e.Client) + .WithMany() + .HasForeignKey(e => e.FK_Client) + .HasConstraintName("wz_header_wz_clients_ID_fk"); + }); + + modelBuilder.Entity(entity => + { + entity.ToTable("wz_clients"); + + entity.HasKey(e => e.ID); + + entity.Property(e => e.ID) + .HasColumnName("ID") + .HasColumnType("uniqueidentifier"); + + entity.Property(e => e.CustomerNumber) + .HasColumnName("CustomerNumber") + .HasMaxLength(20) + .IsRequired(false); + + entity.Property(e => e.CustomerSequence) + .HasColumnName("CustomerSequence") + .HasColumnType("int") + .IsRequired(false); + + entity.Property(e => e.CreatedDate) + .HasColumnName("CreatedDate") + .HasColumnType("DateTime") + .IsRowVersion(); + + entity.Property(e => e.Name) + .HasColumnName("Name") + .HasMaxLength(255) + .IsRequired(false); + + entity.Property(e => e.ShortName) + .HasColumnName("ShortName") + .HasMaxLength(30) + .IsRequired(false); + + entity.Property(e => e.Logo) + .HasColumnType("VARBINARY(MAX)") + .IsRequired(false); + }); + + modelBuilder.Entity(entity => + { + entity.ToTable("wz_row_meyle"); + + entity.HasKey(e => e.ID); + + entity.Property(e => e.ID) + .HasColumnName("ID") + .HasColumnType("uniqueidentifier") + .HasDefaultValueSql("newid()"); + + entity.Property(e => e.FK_Header) + .HasColumnName("FK_Header") + .HasColumnType("uniqueidentifier") + .IsRequired(false); + + entity.Property(e => e.OrderNumber) + .HasColumnName("order_number") + .HasMaxLength(100) + .IsRequired(false); + + entity.Property(e => e.ItemNumber) + .HasColumnName("item_number") + .HasMaxLength(100) + .IsRequired(false); + + entity.Property(e => e.Quantity) + .HasColumnName("quantity") + .HasColumnType("int") + .IsRequired(false); + + entity.Property(e => e.PalletNumber) + .HasColumnName("pallet_number") + .HasColumnType("int") + .IsRequired(false); + + entity.Property(e => e.WzNumber) + .HasColumnName("wz_number") + .HasMaxLength(100) + .IsRequired(false); + + entity.Property(e => e.PartNumber) + .HasColumnName("part_number") + .HasMaxLength(100) + .IsRequired(false); + + entity.Property(e => e.TransactionNumber) + .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() + .HasForeignKey(e => e.FK_Header) + .HasConstraintName("wz_rows_meyle_wz_header_ID_fk"); + }); + + modelBuilder.Entity(entity => + { + entity.ToTable("itemcust"); + + entity.HasKey(e => new { e.Item, e.CustNum, e.CustItemSeq }); + + entity.Property(e => e.Item) + .HasColumnName("item") + .HasMaxLength(60) + .IsRequired(); + + entity.Property(e => e.CustNum) + .HasColumnName("cust_num") + .HasMaxLength(14) + .IsRequired(); + + entity.Property(e => e.CustItemSeq) + .HasColumnName("cust_item_seq") + .HasColumnType("int") + .HasDefaultValueSql("1"); + + entity.Property(e => e.CustItem) + .HasColumnName("cust_item") + .HasMaxLength(60) + .IsRequired(false); + + entity.Property(e => e.PurchYtd) + .HasColumnName("purch_ytd") + .HasDefaultValueSql("0") + .IsRequired(false); + + entity.Property(e => e.OrderYtd) + .HasColumnName("order_ytd") + .HasDefaultValueSql("0") + .IsRequired(false); + + entity.Property(e => e.ShipYtd) + .HasColumnName("ship_ytd") + .HasDefaultValueSql("0") + .IsRequired(false); + + entity.Property(e => e.OrderPtd) + .HasColumnName("order_ptd") + .HasDefaultValueSql("0") + .IsRequired(false); + + entity.Property(e => e.UM) + .HasColumnName("u_m") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.DuePeriod) + .HasColumnName("due_period") + .HasColumnType("smallint") + .IsRequired(false); + + 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.CreateDate) + .HasColumnName("CreateDate") + .HasDefaultValueSql("getdate()"); + + entity.Property(e => e.InWorkflow) + .HasColumnName("InWorkflow") + .HasColumnType("tinyint") + .HasDefaultValueSql("0"); + + entity.Property(e => e.Rank) + .HasColumnName("rank") + .HasColumnType("int") + .IsRequired(false); + + entity.Property(e => e.EndUser) + .HasColumnName("end_user") + .HasMaxLength(60) + .IsRequired(false); + + entity.Property(e => e.Uf_FKR_CustItem2) + .HasColumnName("Uf_FKR_CustItem2") + .HasMaxLength(30) + .IsRequired(false); + + entity.Property(e => e.Uf_KOD_EAN13) + .HasColumnName("Uf_KOD_EAN13") + .HasMaxLength(13) + .IsRequired(false); + + entity.Property(e => e.Uf_Paleta_BROSE) + .HasColumnName("Uf_Paleta_BROSE") + .HasMaxLength(20) + .IsRequired(false); + + entity.Property(e => e.Uf_Pojemnik_BROSE) + .HasColumnName("Uf_Pojemnik_BROSE") + .HasMaxLength(20) + .IsRequired(false); + + entity.Property(e => e.Uf_Paleta_BROSE_Pokrywa) + .HasColumnName("Uf_Paleta_BROSE_Pokrywa") + .HasMaxLength(30) + .IsRequired(false); + + entity.Property(e => e.Uf_RewizjaRysunku) + .HasColumnName("Uf_RewizjaRysunku") + .HasMaxLength(20) + .IsRequired(false); + + // Indexes + entity.HasIndex(e => new { e.CustNum, e.Item, e.CustItemSeq }) + .HasDatabaseName("IX_itemcust_custitem") + .IsUnique(); + + entity.HasIndex(e => new { e.CustNum, e.Item, e.CustItem }) + .HasDatabaseName("IX_itemcust_custitemci") + .IsUnique(); + + entity.HasIndex(e => e.RowPointer) + .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(); + }); + + modelBuilder.Entity(entity => + { + entity.ToTable("edi_co_import"); + + entity.HasKey(e => e.Id); + + entity.Property(e => e.Id) + .HasColumnName("Id") + .ValueGeneratedOnAdd(); + + entity.Property(e => e.ScheduleOrderId) + .HasColumnName("ScheduleOrderId") + .IsRequired(); + + entity.Property(e => e.LastUpdateDate) + .HasColumnName("LastUpdateDate") + .IsRequired(); + + entity.Property(e => e.CreatedDate) + .HasColumnName("CreatedDate") + .IsRequired(); + + entity.Property(e => e.Status) + .HasColumnName("Status") + .HasMaxLength(50) + .IsRequired(); + + entity.Property(e => e.LogData) + .HasColumnName("LogData") + .HasColumnType("varchar(max)") + .IsRequired(false); + + entity.Property(e => e.ItemsCount) + .HasColumnName("ItemsCount") + .IsRequired(); + }); + + modelBuilder.Entity(entity => + { + entity.ToTable("customer"); + + entity.HasKey(e => new { e.CustNum, e.CustSeq }); + + entity.Property(e => e.CustNum).HasColumnName("cust_num").HasMaxLength(14).IsRequired(); + entity.Property(e => e.CustSeq).HasColumnName("cust_seq").HasDefaultValueSql("0"); + entity.Property(e => e.Contact1).HasColumnName("contact##1").HasMaxLength(60).IsRequired(false); + entity.Property(e => e.Contact2).HasColumnName("contact##2").HasMaxLength(60).IsRequired(false); + entity.Property(e => e.Contact3).HasColumnName("contact##3").HasMaxLength(60).IsRequired(false); + entity.Property(e => e.Phone1).HasColumnName("phone##1").HasMaxLength(50).IsRequired(false); + entity.Property(e => e.Phone2).HasColumnName("phone##2").HasMaxLength(50).IsRequired(false); + entity.Property(e => e.Phone3).HasColumnName("phone##3").HasMaxLength(50).IsRequired(false); + entity.Property(e => e.CustType).HasColumnName("cust_type").HasMaxLength(6).IsRequired(false); + entity.Property(e => e.TermsCode).HasColumnName("terms_code").HasMaxLength(6).IsRequired(false); + entity.Property(e => e.ShipCode).HasColumnName("ship_code").HasMaxLength(6).IsRequired(false); + entity.Property(e => e.Slsman).HasColumnName("slsman").HasMaxLength(6).IsRequired(false); + entity.Property(e => e.StateCycle).HasColumnName("state_cycle").HasMaxLength(2).IsRequired(false); + entity.Property(e => e.FinChg).HasColumnName("fin_chg").HasColumnType("tinyint") + .HasDefaultValueSql("0"); + entity.Property(e => e.LastInv).HasColumnName("last_inv").IsRequired(false); + entity.Property(e => e.LastPaid).HasColumnName("last_paid").IsRequired(false); + entity.Property(e => e.SalesYtd).HasColumnName("sales_ytd").HasDefaultValueSql("0").IsRequired(false); + entity.Property(e => e.SalesLstYr).HasColumnName("sales_lst_yr").HasDefaultValueSql("0") + .IsRequired(false); + entity.Property(e => e.DiscYtd).HasColumnName("disc_ytd").HasDefaultValueSql("0").IsRequired(false); + entity.Property(e => e.DiscLstYr).HasColumnName("disc_lst_yr").HasDefaultValueSql("0") + .IsRequired(false); + entity.Property(e => e.LastFinChg).HasColumnName("last_fin_chg").IsRequired(false); + entity.Property(e => e.SalesPtd).HasColumnName("sales_ptd").HasDefaultValueSql("0").IsRequired(false); + entity.Property(e => e.CalcDate).HasColumnName("calc_date").IsRequired(false); + entity.Property(e => e.NumPeriods).HasColumnName("num_periods").HasDefaultValueSql("0") + .IsRequired(false); + entity.Property(e => e.AvgDaysOs).HasColumnName("avg_days_os").HasDefaultValueSql("0") + .IsRequired(false); + entity.Property(e => e.NumInvoices).HasColumnName("num_invoices").HasDefaultValueSql("0") + .IsRequired(false); + entity.Property(e => e.HistDaysOs).HasColumnName("hist_days_os").HasDefaultValueSql("0") + .IsRequired(false); + entity.Property(e => e.LargDaysOs).HasColumnName("larg_days_os").HasDefaultValueSql("0") + .IsRequired(false); + entity.Property(e => e.LastDaysOs).HasColumnName("last_days_os").HasDefaultValueSql("0") + .IsRequired(false); + entity.Property(e => e.AvgBalOs).HasColumnName("avg_bal_os").HasDefaultValueSql("0").IsRequired(false); + entity.Property(e => e.LargeBalOs).HasColumnName("large_bal_os").HasDefaultValueSql("0") + .IsRequired(false); + entity.Property(e => e.LastBalOs).HasColumnName("last_bal_os").HasDefaultValueSql("0") + .IsRequired(false); + entity.Property(e => e.Whse).HasColumnName("whse").HasMaxLength(8).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.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.Datefld).HasColumnName("datefld").IsRequired(false); + entity.Property(e => e.TaxRegNum1).HasColumnName("tax_reg_num1").HasMaxLength(40).IsRequired(false); + entity.Property(e => e.BankCode).HasColumnName("bank_code").HasMaxLength(8).IsRequired(false); + entity.Property(e => e.TaxRegNum2).HasColumnName("tax_reg_num2").HasMaxLength(40).IsRequired(false); + entity.Property(e => e.PayType).HasColumnName("pay_type").HasMaxLength(1).HasDefaultValueSql("'C'"); + entity.Property(e => e.EdiCust).HasColumnName("edi_cust").HasColumnType("tinyint") + .HasDefaultValueSql("0"); + entity.Property(e => e.BranchId).HasColumnName("branch_id").HasMaxLength(20).IsRequired(false); + entity.Property(e => e.TransNat).HasColumnName("trans_nat").HasMaxLength(4).IsRequired(false); + entity.Property(e => e.Delterm).HasColumnName("delterm").HasMaxLength(8).IsRequired(false); + entity.Property(e => e.ProcessInd).HasColumnName("process_ind").HasMaxLength(2).IsRequired(false); + entity.Property(e => e.UseExchRate).HasColumnName("use_exch_rate").HasColumnType("tinyint") + .HasDefaultValueSql("0"); + entity.Property(e => e.TaxCode1).HasColumnName("tax_code1").HasMaxLength(12).IsRequired(false); + entity.Property(e => e.TaxCode2).HasColumnName("tax_code2").HasMaxLength(12).IsRequired(false); + entity.Property(e => e.Pricecode).HasColumnName("pricecode").HasMaxLength(6).IsRequired(false); + entity.Property(e => e.ShipEarly).HasColumnName("ship_early").HasColumnType("tinyint") + .HasDefaultValueSql("1"); + entity.Property(e => e.ShipPartial).HasColumnName("ship_partial").HasColumnType("tinyint") + .HasDefaultValueSql("1"); + entity.Property(e => e.LangCode).HasColumnName("lang_code").HasMaxLength(6).IsRequired(false); + entity.Property(e => e.EndUserType).HasColumnName("end_user_type").HasMaxLength(6).IsRequired(false); + entity.Property(e => e.ShipSite).HasColumnName("ship_site").HasMaxLength(16).IsRequired(false); + entity.Property(e => e.LcrReqd).HasColumnName("lcr_reqd").HasColumnType("tinyint") + .HasDefaultValueSql("0"); + entity.Property(e => e.CustBank).HasColumnName("cust_bank").HasMaxLength(8).IsRequired(false); + entity.Property(e => e.DraftPrintFlag).HasColumnName("draft_print_flag").HasColumnType("tinyint") + .HasDefaultValueSql("0"); + entity.Property(e => e.RcvInternalEmail).HasColumnName("rcv_internal_email").HasColumnType("tinyint") + .HasDefaultValueSql("0"); + entity.Property(e => e.CustomerEmailAddr).HasColumnName("customer_email_addr").HasMaxLength(60) + .IsRequired(false); + entity.Property(e => e.SendCustomerEmail).HasColumnName("send_customer_email").HasColumnType("tinyint") + .HasDefaultValueSql("0"); + entity.Property(e => e.ApsPullUp).HasColumnName("aps_pull_up").HasColumnType("tinyint") + .HasDefaultValueSql("0"); + entity.Property(e => e.DoInvoice).HasColumnName("do_invoice").HasMaxLength(1).HasDefaultValueSql("'S'"); + entity.Property(e => e.Consolidate).HasColumnName("consolidate").HasColumnType("tinyint") + .HasDefaultValueSql("0"); + entity.Property(e => e.InvFreq).HasColumnName("inv_freq").HasMaxLength(1).HasDefaultValueSql("'W'"); + entity.Property(e => e.Summarize).HasColumnName("summarize").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.Einvoice).HasColumnName("einvoice").HasColumnType("tinyint") + .HasDefaultValueSql("0"); + entity.Property(e => e.OrderBal).HasColumnName("order_bal").HasDefaultValueSql("0").IsRequired(false); + entity.Property(e => e.PostedBal).HasColumnName("posted_bal").HasDefaultValueSql("0").IsRequired(false); + 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.CreateDate).HasColumnName("CreateDate").HasDefaultValueSql("getdate()"); + entity.Property(e => e.CrmGuid).HasColumnName("crm_guid").HasMaxLength(36).IsRequired(false); + entity.Property(e => e.InWorkflow).HasColumnName("InWorkflow").HasColumnType("tinyint") + .HasDefaultValueSql("0"); + entity.Property(e => e.PrintPackInv).HasColumnName("print_pack_inv").HasColumnType("tinyint") + .HasDefaultValueSql("0"); + entity.Property(e => e.OnePackInv).HasColumnName("one_pack_inv").HasColumnType("tinyint") + .HasDefaultValueSql("0"); + entity.Property(e => e.InvCategory).HasColumnName("inv_category").HasMaxLength(20) + .HasDefaultValueSql("'DEFAULTCATEGORY'"); + entity.Property(e => e.IncludeTaxInPrice).HasColumnName("include_tax_in_price").HasColumnType("tinyint") + .HasDefaultValueSql("0"); + entity.Property(e => e.TransNat2).HasColumnName("trans_nat_2").HasMaxLength(4).IsRequired(false); + entity.Property(e => e.UseRevisionPayDays).HasColumnName("use_revision_pay_days") + .HasColumnType("tinyint").HasDefaultValueSql("0"); + entity.Property(e => e.RevisionDay).HasColumnName("revision_day").IsRequired(false); + entity.Property(e => e.RevisionDayStartTime1).HasColumnName("revision_day_start_time##1") + .IsRequired(false); + entity.Property(e => e.RevisionDayStartTime2).HasColumnName("revision_day_start_time##2") + .IsRequired(false); + entity.Property(e => e.RevisionDayEndTime1).HasColumnName("revision_day_end_time##1").IsRequired(false); + entity.Property(e => e.RevisionDayEndTime2).HasColumnName("revision_day_end_time##2").IsRequired(false); + entity.Property(e => e.PayDay).HasColumnName("pay_day").IsRequired(false); + entity.Property(e => e.PayDayStartTime1).HasColumnName("pay_day_start_time##1").IsRequired(false); + entity.Property(e => e.PayDayStartTime2).HasColumnName("pay_day_start_time##2").IsRequired(false); + entity.Property(e => e.PayDayEndTime1).HasColumnName("pay_day_end_time##1").IsRequired(false); + entity.Property(e => e.PayDayEndTime2).HasColumnName("pay_day_end_time##2").IsRequired(false); + entity.Property(e => e.ExportType).HasColumnName("export_type").HasMaxLength(1) + .HasDefaultValueSql("'N'"); + entity.Property(e => e.ActiveForDataIntegration).HasColumnName("active_for_data_integration") + .HasColumnType("tinyint").HasDefaultValueSql("1"); + entity.Property(e => e.ShowInShipToDropDownList).HasColumnName("show_in_ship_to_drop_down_list") + .HasColumnType("tinyint").HasDefaultValueSql("1"); + entity.Property(e => e.ShowInDropDownList).HasColumnName("show_in_drop_down_list") + .HasColumnType("tinyint").HasDefaultValueSql("1"); + entity.Property(e => e.SicCode).HasColumnName("sic_code").HasMaxLength(8).IsRequired(false); + entity.Property(e => e.NumberOfEmployees).HasColumnName("number_of_employees").HasDefaultValueSql("0") + .IsRequired(false); + entity.Property(e => e.CompanyRevenue).HasColumnName("company_revenue").HasDefaultValueSql("0") + .IsRequired(false); + entity.Property(e => e.TerritoryCode).HasColumnName("territory_code").HasMaxLength(10) + .IsRequired(false); + entity.Property(e => e.SalesTeamId).HasColumnName("sales_team_id").HasMaxLength(10).IsRequired(false); + entity.Property(e => e.DaysShippedBeforeDueDateTolerance) + .HasColumnName("days_shipped_before_due_date_tolerance").IsRequired(false); + entity.Property(e => e.DaysShippedAfterDueDateTolerance) + .HasColumnName("days_shipped_after_due_date_tolerance").IsRequired(false); + entity.Property(e => e.ShippedOverOrderedQtyTolerance) + .HasColumnName("shipped_over_ordered_qty_tolerance").IsRequired(false); + entity.Property(e => e.ShippedUnderOrderedQtyTolerance) + .HasColumnName("shipped_under_ordered_qty_tolerance").IsRequired(false); + entity.Property(e => e.DefaultShipTo).HasColumnName("default_ship_to").HasDefaultValueSql("0"); + entity.Property(e => e.IncludeOrdersInTaxRpt).HasColumnName("include_orders_in_tax_rpt") + .HasColumnType("tinyint").HasDefaultValueSql("0"); + entity.Property(e => e.ConstructiveSalePricePct).HasColumnName("constructive_sale_price_pct") + .IsRequired(false); + entity.Property(e => e.Uf_ZPL_FedId).HasColumnName("uf_ZPL_FedId").HasMaxLength(20).IsRequired(false); + entity.Property(e => e.Uf_ZPL_VATRegisterCode).HasColumnName("uf_ZPL_VATRegisterCode").HasMaxLength(20) + .IsRequired(false); + entity.Property(e => e.Uf_INT_CustSeq).HasColumnName("Uf_INT_CustSeq").IsRequired(false); + entity.Property(e => e.Uf_INT_Replicate).HasColumnName("UF_INT_Replicate").HasColumnType("tinyint") + .HasDefaultValueSql("0"); + entity.Property(e => e.Uf_FKR_FA_SL_SYKOF).HasColumnName("Uf_FKR_FA_SL_SYKOF").IsRequired(false); + entity.Property(e => e.Uf_FKR_FA_Eksport_SYKOF).HasColumnName("Uf_FKR_FA_Eksport_SYKOF") + .HasColumnType("tinyint").IsRequired(false); + entity.Property(e => e.Uf_FKR_FA_Kod_Dostawcy_u_Klienta) + .HasColumnName("Uf_FKR_FA_Kod_Dostawcy_u_Klienta").HasMaxLength(20).IsRequired(false); + entity.Property(e => e.Uf_FKR_FA_Rampa).HasColumnName("Uf_FKR_FA_Rampa").HasMaxLength(20) + .IsRequired(false); + entity.Property(e => e.Uf_FKR_FA_Zaklad_Przeznaczenia).HasColumnName("Uf_FKR_FA_Zaklad_Przeznaczenia") + .HasMaxLength(100).IsRequired(false); + entity.Property(e => e.Uf_FKR_Customer_Status).HasColumnName("Uf_FKR_Customer_Status").HasMaxLength(1) + .IsRequired(false); + entity.Property(e => e.Uf_bpx_customer_printbatch).HasColumnName("Uf_bpx_customer_printbatch") + .HasColumnType("tinyint").IsRequired(false); + entity.Property(e => e.Uf_cust_receiver_line1).HasColumnName("Uf_cust_receiver_line1").HasMaxLength(100) + .IsRequired(false); + entity.Property(e => e.Uf_cust_receiver_line2).HasColumnName("Uf_cust_receiver_line2").HasMaxLength(100) + .IsRequired(false); + entity.Property(e => e.Uf_cust_supplier_no).HasColumnName("Uf_cust_supplier_no").IsRequired(false); + + entity.HasIndex(e => e.RowPointer).HasDatabaseName("IX_customer_RowPointer").IsUnique(); + }); + + modelBuilder.Entity(entity => + { + entity.ToTable("cust_tp"); + + entity.HasKey(e => new { e.CustNum, e.CustSeq }); + + entity.Property(e => e.CustNum) + .HasColumnName("cust_num") + .HasMaxLength(14) + .IsRequired(); + + entity.Property(e => e.CustSeq) + .HasColumnName("cust_seq") + .HasColumnType("int") + .HasDefaultValueSql("0"); + + entity.Property(e => e.UpdCustAddress) + .HasColumnName("upd_cust_address") + .HasColumnType("tinyint") + .HasDefaultValueSql("1"); + + entity.Property(e => e.TpCode) + .HasColumnName("tp_code") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.DunsNum) + .HasColumnName("duns_num") + .HasMaxLength(20) + .IsRequired(false); + + entity.Property(e => e.GenAck) + .HasColumnName("gen_ack") + .HasColumnType("tinyint") + .HasDefaultValueSql("0"); + + entity.Property(e => e.PaperAck) + .HasColumnName("paper_ack") + .HasColumnType("tinyint") + .HasDefaultValueSql("1"); + + entity.Property(e => e.GenAsn) + .HasColumnName("gen_asn") + .HasColumnType("tinyint") + .HasDefaultValueSql("0"); + + entity.Property(e => e.PaperAsn) + .HasColumnName("paper_asn") + .HasColumnType("tinyint") + .HasDefaultValueSql("1"); + + entity.Property(e => e.GenInv) + .HasColumnName("gen_inv") + .HasColumnType("tinyint") + .HasDefaultValueSql("0"); + + entity.Property(e => e.PaperInv) + .HasColumnName("paper_inv") + .HasColumnType("tinyint") + .HasDefaultValueSql("1"); + + entity.Property(e => e.AutoPost) + .HasColumnName("auto_post") + .HasMaxLength(1) + .HasDefaultValueSql("'N'"); + + entity.Property(e => e.PostPlanned) + .HasColumnName("post_planned") + .HasColumnType("tinyint") + .HasDefaultValueSql("0"); + + entity.Property(e => e.ReleaseProc) + .HasColumnName("release_proc") + .HasMaxLength(1) + .HasDefaultValueSql("'R'"); + + entity.Property(e => e.PooledAsn) + .HasColumnName("pooled_asn") + .HasColumnType("tinyint") + .HasDefaultValueSql("0"); + + entity.Property(e => e.ValPrice) + .HasColumnName("val_price") + .HasColumnType("tinyint") + .HasDefaultValueSql("1"); + + entity.Property(e => e.UsePrice) + .HasColumnName("use_price") + .HasMaxLength(1) + .HasDefaultValueSql("'S'"); + + entity.Property(e => e.ValCredit) + .HasColumnName("val_credit") + .HasColumnType("tinyint") + .HasDefaultValueSql("1"); + + entity.Property(e => e.NoteProc) + .HasColumnName("note_proc") + .HasMaxLength(2) + .HasDefaultValueSql("'A'"); + + entity.Property(e => e.UseDate) + .HasColumnName("use_date") + .HasMaxLength(1) + .HasDefaultValueSql("'C'"); + + entity.Property(e => e.DateOffset) + .HasColumnName("date_offset") + .HasColumnType("smallint") + .HasDefaultValueSql("0") + .IsRequired(false); + + entity.Property(e => e.InvCode) + .HasColumnName("inv_code") + .HasMaxLength(10) + .IsRequired(false); + + entity.Property(e => e.AckCode) + .HasColumnName("ack_code") + .HasMaxLength(10) + .IsRequired(false); + + entity.Property(e => e.AsnCode) + .HasColumnName("asn_code") + .HasMaxLength(10) + .IsRequired(false); + + entity.Property(e => e.LastItemDate) + .HasColumnName("last_item_date") + .IsRequired(false); + + entity.Property(e => e.LastCustaDate) + .HasColumnName("last_custa_date") + .IsRequired(false); + + entity.Property(e => e.IncludeSerial) + .HasColumnName("include_serial") + .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.CreateDate) + .HasColumnName("CreateDate") + .HasDefaultValueSql("getdate()"); + + entity.Property(e => e.InWorkflow) + .HasColumnName("InWorkflow") + .HasColumnType("tinyint") + .HasDefaultValueSql("0"); + + entity.Property(e => e.Uf_FKR_EDI_RSSBussFolder) + .HasColumnName("uf_FKR_EDI_RSSBussFolder") + .HasMaxLength(100) + .IsRequired(false); + + entity.Property(e => e.Uf_FKR_EDI_IdentificationCode) + .HasColumnName("uf_FKR_EDI_IdentificationCode") + .HasMaxLength(20) + .IsRequired(false); + + // Index + entity.HasIndex(e => e.RowPointer) + .HasDatabaseName("IX_cust_tp_RowPointer") + .IsUnique(); + }); + + modelBuilder.Entity(entity => + { + entity.ToTable("item"); + + entity.HasKey(e => e.ItemCode); + + entity.Property(e => e.ItemCode).HasColumnName("item").HasMaxLength(60).IsRequired(); + entity.Property(e => e.Description).HasColumnName("description").HasMaxLength(60).IsRequired(false); + entity.Property(e => e.QtyAllocjob).HasColumnName("qty_allocjob").IsRequired(false); + entity.Property(e => e.UM).HasColumnName("u_m").HasMaxLength(6).IsRequired(false); + entity.Property(e => e.LeadTime).HasColumnName("lead_time").IsRequired(); + entity.Property(e => e.LotSize).HasColumnName("lot_size").IsRequired(false); + entity.Property(e => e.QtyUsedYtd).HasColumnName("qty_used_ytd").IsRequired(false); + entity.Property(e => e.QtyMfgYtd).HasColumnName("qty_mfg_ytd").IsRequired(false); + entity.Property(e => e.AbcCode).HasColumnName("abc_code").HasMaxLength(1).IsRequired(false); + entity.Property(e => e.DrawingNbr).HasColumnName("drawing_nbr").HasMaxLength(20).IsRequired(false); + entity.Property(e => e.ProductCode).HasColumnName("product_code").HasMaxLength(10).IsRequired(false); + entity.Property(e => e.PMTCode).HasColumnName("p_m_t_code").HasMaxLength(1).IsRequired(false); + entity.Property(e => e.CostMethod).HasColumnName("cost_method").HasMaxLength(1).IsRequired(false); + entity.Property(e => e.LstLotSize).HasColumnName("lst_lot_size").IsRequired(false); + entity.Property(e => e.UnitCost).HasColumnName("unit_cost").IsRequired(false); + entity.Property(e => e.LstUCost).HasColumnName("lst_u_cost").IsRequired(false); + entity.Property(e => e.AvgUCost).HasColumnName("avg_u_cost").IsRequired(false); + entity.Property(e => e.Job).HasColumnName("job").HasMaxLength(10).IsRequired(false); + entity.Property(e => e.Suffix).HasColumnName("suffix").IsRequired(false); + entity.Property(e => e.Stocked).HasColumnName("stocked").HasColumnType("tinyint"); + entity.Property(e => e.MatlType).HasColumnName("matl_type").HasMaxLength(1).IsRequired(false); + entity.Property(e => e.FamilyCode).HasColumnName("family_code").HasMaxLength(10).IsRequired(false); + entity.Property(e => e.LowLevel).HasColumnName("low_level").IsRequired(false); + entity.Property(e => e.LastInv).HasColumnName("last_inv").IsRequired(false); + entity.Property(e => e.DaysSupply).HasColumnName("days_supply").IsRequired(false); + entity.Property(e => e.OrderMin).HasColumnName("order_min").IsRequired(false); + entity.Property(e => e.OrderMult).HasColumnName("order_mult").IsRequired(false); + entity.Property(e => e.PlanCode).HasColumnName("plan_code").HasMaxLength(10).IsRequired(false); + entity.Property(e => e.MpsFlag).HasColumnName("mps_flag").HasColumnType("tinyint"); + entity.Property(e => e.AcceptReq).HasColumnName("accept_req").HasColumnType("tinyint"); + entity.Property(e => e.ChangeDate).HasColumnName("change_date").IsRequired(false); + entity.Property(e => e.Revision).HasColumnName("revision").HasMaxLength(10).IsRequired(false); + entity.Property(e => e.PhantomFlag).HasColumnName("phantom_flag").HasColumnType("tinyint"); + entity.Property(e => e.PlanFlag).HasColumnName("plan_flag").HasColumnType("tinyint"); + entity.Property(e => e.PaperTime).HasColumnName("paper_time").IsRequired(); + entity.Property(e => e.DockTime).HasColumnName("dock_time").IsRequired(); + entity.Property(e => e.AsmSetup).HasColumnName("asm_setup").IsRequired(false); + entity.Property(e => e.AsmRun).HasColumnName("asm_run").IsRequired(false); + entity.Property(e => e.AsmMatl).HasColumnName("asm_matl").IsRequired(false); + entity.Property(e => e.AsmTool).HasColumnName("asm_tool").IsRequired(false); + entity.Property(e => e.AsmFixture).HasColumnName("asm_fixture").IsRequired(false); + entity.Property(e => e.AsmOther).HasColumnName("asm_other").IsRequired(false); + entity.Property(e => e.AsmFixed).HasColumnName("asm_fixed").IsRequired(false); + entity.Property(e => e.AsmVar).HasColumnName("asm_var").IsRequired(false); + entity.Property(e => e.AsmOutside).HasColumnName("asm_outside").IsRequired(false); + entity.Property(e => e.CompSetup).HasColumnName("comp_setup").IsRequired(false); + entity.Property(e => e.CompRun).HasColumnName("comp_run").IsRequired(false); + entity.Property(e => e.CompMatl).HasColumnName("comp_matl").IsRequired(false); + entity.Property(e => e.CompTool).HasColumnName("comp_tool").IsRequired(false); + entity.Property(e => e.CompFixture).HasColumnName("comp_fixture").IsRequired(false); + entity.Property(e => e.CompOther).HasColumnName("comp_other").IsRequired(false); + entity.Property(e => e.CompFixed).HasColumnName("comp_fixed").IsRequired(false); + entity.Property(e => e.CompVar).HasColumnName("comp_var").IsRequired(false); + entity.Property(e => e.CompOutside).HasColumnName("comp_outside").IsRequired(false); + entity.Property(e => e.SubMatl).HasColumnName("sub_matl").IsRequired(false); + entity.Property(e => e.ShrinkFact).HasColumnName("shrink_fact").IsRequired(false); + entity.Property(e => e.AltItem).HasColumnName("alt_item").HasMaxLength(60).IsRequired(false); + entity.Property(e => e.UnitWeight).HasColumnName("unit_weight").IsRequired(false); + entity.Property(e => e.WeightUnits).HasColumnName("weight_units").HasMaxLength(4).IsRequired(false); + entity.Property(e => e.Charfld4).HasColumnName("charfld4").HasMaxLength(40).IsRequired(false); + entity.Property(e => e.CurUCost).HasColumnName("cur_u_cost").IsRequired(false); + entity.Property(e => e.FeatType).HasColumnName("feat_type").HasMaxLength(1).IsRequired(false); + entity.Property(e => e.VarLead).HasColumnName("var_lead").IsRequired(false); + entity.Property(e => e.FeatStr).HasColumnName("feat_str").HasMaxLength(255).IsRequired(false); + entity.Property(e => e.NextConfig).HasColumnName("next_config").IsRequired(false); + entity.Property(e => e.FeatTempl).HasColumnName("feat_templ").HasMaxLength(255).IsRequired(false); + entity.Property(e => e.Backflush).HasColumnName("backflush").HasColumnType("tinyint"); + 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.Decifld1).HasColumnName("decifld1").IsRequired(false); + entity.Property(e => e.Decifld2).HasColumnName("decifld2").IsRequired(false); + entity.Property(e => e.Decifld3).HasColumnName("decifld3").IsRequired(false); + entity.Property(e => e.Logifld).HasColumnName("logifld").HasColumnType("tinyint"); + entity.Property(e => e.Datefld).HasColumnName("datefld").IsRequired(false); + entity.Property(e => e.TrackEcn).HasColumnName("track_ecn").HasColumnType("tinyint"); + entity.Property(e => e.CommCode).HasColumnName("comm_code").HasMaxLength(12).IsRequired(false); + entity.Property(e => e.Origin).HasColumnName("origin").HasMaxLength(3).IsRequired(false); + entity.Property(e => e.UnitMatCost).HasColumnName("unit_mat_cost").IsRequired(false); + entity.Property(e => e.UnitDutyCost).HasColumnName("unit_duty_cost").IsRequired(false); + entity.Property(e => e.UnitFreightCost).HasColumnName("unit_freight_cost").IsRequired(false); + entity.Property(e => e.UnitBrokerageCost).HasColumnName("unit_brokerage_cost").IsRequired(false); + entity.Property(e => e.CurMatCost).HasColumnName("cur_mat_cost").IsRequired(false); + entity.Property(e => e.CurDutyCost).HasColumnName("cur_duty_cost").IsRequired(false); + entity.Property(e => e.CurFreightCost).HasColumnName("cur_freight_cost").IsRequired(false); + entity.Property(e => e.CurBrokerageCost).HasColumnName("cur_brokerage_cost").IsRequired(false); + entity.Property(e => e.TaxCode1).HasColumnName("tax_code1").HasMaxLength(12).IsRequired(false); + entity.Property(e => e.TaxCode2).HasColumnName("tax_code2").HasMaxLength(12).IsRequired(false); + entity.Property(e => e.BflushLoc).HasColumnName("bflush_loc").HasMaxLength(20).IsRequired(false); + entity.Property(e => e.Reservable).HasColumnName("reservable").HasColumnType("tinyint"); + entity.Property(e => e.ShelfLife).HasColumnName("shelf_life").IsRequired(false); + entity.Property(e => e.LotPrefix).HasColumnName("lot_prefix").HasMaxLength(10).IsRequired(false); + entity.Property(e => e.SerialPrefix).HasColumnName("serial_prefix").HasMaxLength(10).IsRequired(false); + entity.Property(e => e.SerialLength).HasColumnName("serial_length").IsRequired(false); + entity.Property(e => e.IssueBy).HasColumnName("issue_by").HasMaxLength(3).IsRequired(false); + entity.Property(e => e.SerialTracked).HasColumnName("serial_tracked").HasColumnType("tinyint"); + entity.Property(e => e.LotTracked).HasColumnName("lot_tracked").HasColumnType("tinyint"); + entity.Property(e => e.CostType).HasColumnName("cost_type").HasMaxLength(1).IsRequired(false); + entity.Property(e => e.MatlCost).HasColumnName("matl_cost").IsRequired(false); + entity.Property(e => e.LbrCost).HasColumnName("lbr_cost").IsRequired(false); + entity.Property(e => e.FovhdCost).HasColumnName("fovhd_cost").IsRequired(false); + entity.Property(e => e.VovhdCost).HasColumnName("vovhd_cost").IsRequired(false); + entity.Property(e => e.OutCost).HasColumnName("out_cost").IsRequired(false); + entity.Property(e => e.CurMatlCost).HasColumnName("cur_matl_cost").IsRequired(false); + entity.Property(e => e.CurLbrCost).HasColumnName("cur_lbr_cost").IsRequired(false); + entity.Property(e => e.CurFovhdCost).HasColumnName("cur_fovhd_cost").IsRequired(false); + entity.Property(e => e.CurVovhdCost).HasColumnName("cur_vovhd_cost").IsRequired(false); + entity.Property(e => e.CurOutCost).HasColumnName("cur_out_cost").IsRequired(false); + entity.Property(e => e.AvgMatlCost).HasColumnName("avg_matl_cost").IsRequired(false); + entity.Property(e => e.AvgLbrCost).HasColumnName("avg_lbr_cost").IsRequired(false); + entity.Property(e => e.AvgFovhdCost).HasColumnName("avg_fovhd_cost").IsRequired(false); + entity.Property(e => e.AvgVovhdCost).HasColumnName("avg_vovhd_cost").IsRequired(false); + entity.Property(e => e.AvgOutCost).HasColumnName("avg_out_cost").IsRequired(false); + entity.Property(e => e.ProdType).HasColumnName("prod_type").HasMaxLength(1).IsRequired(false); + entity.Property(e => e.RatePerDay).HasColumnName("rate_per_day").IsRequired(false); + entity.Property(e => e.MpsPlanFence).HasColumnName("mps_plan_fence").IsRequired(false); + entity.Property(e => e.PassReq).HasColumnName("pass_req").HasColumnType("tinyint"); + entity.Property(e => e.LotGenExp).HasColumnName("lot_gen_exp").HasColumnType("tinyint"); + entity.Property(e => e.SupplySite).HasColumnName("supply_site").HasMaxLength(16).IsRequired(false); + entity.Property(e => e.ProdMix).HasColumnName("prod_mix").HasMaxLength(10).IsRequired(false); + entity.Property(e => e.Stat).HasColumnName("stat").HasMaxLength(1).IsRequired(false); + entity.Property(e => e.StatusChgUserCode).HasColumnName("status_chg_user_code").HasMaxLength(10).IsRequired(false); + entity.Property(e => e.ChgDate).HasColumnName("chg_date").IsRequired(false); + entity.Property(e => e.ReasonCode).HasColumnName("reason_code").HasMaxLength(6).IsRequired(false); + entity.Property(e => e.SupplyWhse).HasColumnName("supply_whse").HasMaxLength(8).IsRequired(false); + entity.Property(e => e.DuePeriod).HasColumnName("due_period").IsRequired(false); + entity.Property(e => e.OrderMax).HasColumnName("order_max").IsRequired(false); + entity.Property(e => e.MrpPart).HasColumnName("mrp_part").HasColumnType("tinyint"); + entity.Property(e => e.InfinitePart).HasColumnName("infinite_part").HasColumnType("tinyint"); + entity.Property(e => e.NoteExistsFlag).HasColumnName("NoteExistsFlag").HasColumnType("tinyint"); + entity.Property(e => e.RecordDate).HasColumnName("RecordDate").IsRequired(); + entity.Property(e => e.RowPointer).HasColumnName("RowPointer").HasColumnType("uniqueidentifier").IsRequired(); + entity.Property(e => e.SupplyToleranceHrs).HasColumnName("supply_tolerance_hrs").IsRequired(false); + entity.Property(e => e.ExpLeadTime).HasColumnName("exp_lead_time").IsRequired(); + entity.Property(e => e.VarExpLead).HasColumnName("var_exp_lead").IsRequired(false); + entity.Property(e => e.Buyer).HasColumnName("buyer").HasMaxLength(60).IsRequired(false); + entity.Property(e => e.OrderConfigurable).HasColumnName("order_configurable").HasColumnType("tinyint").IsRequired(); + entity.Property(e => e.JobConfigurable).HasColumnName("job_configurable").HasColumnType("tinyint").IsRequired(); + entity.Property(e => e.CfgModel).HasColumnName("cfg_model").HasMaxLength(255).IsRequired(false); + entity.Property(e => e.CoPostConfig).HasColumnName("co_post_config").HasMaxLength(1).IsRequired(false); + entity.Property(e => e.JobPostConfig).HasColumnName("job_post_config").HasMaxLength(1).IsRequired(false); + entity.Property(e => e.AutoJob).HasColumnName("auto_job").HasMaxLength(1).IsRequired(); + entity.Property(e => e.AutoPost).HasColumnName("auto_post").HasMaxLength(1).IsRequired(); + entity.Property(e => e.Setupgroup).HasColumnName("setupgroup").HasMaxLength(10).IsRequired(false); + entity.Property(e => e.CreatedBy).HasColumnName("CreatedBy").HasMaxLength(60).IsRequired(); + entity.Property(e => e.UpdatedBy).HasColumnName("UpdatedBy").HasMaxLength(60).IsRequired(); + entity.Property(e => e.CreateDate).HasColumnName("CreateDate").IsRequired(); + entity.Property(e => e.InWorkflow).HasColumnName("InWorkflow").HasColumnType("tinyint").IsRequired(); + entity.Property(e => e.MfgSupplySwitchingActive).HasColumnName("mfg_supply_switching_active").HasColumnType("tinyint"); + entity.Property(e => e.TimeFenceRule).HasColumnName("time_fence_rule").IsRequired(false); + entity.Property(e => e.TimeFenceValue).HasColumnName("time_fence_value").IsRequired(false); + entity.Property(e => e.EarliestPlannedPoReceipt).HasColumnName("earliest_planned_po_receipt").IsRequired(false); + entity.Property(e => e.UseReorderPoint).HasColumnName("use_reorder_point").HasColumnType("tinyint"); + entity.Property(e => e.ReorderPoint).HasColumnName("reorder_point").IsRequired(false); + entity.Property(e => e.FixedOrderQty).HasColumnName("fixed_order_qty").IsRequired(false); + entity.Property(e => e.UnitInsuranceCost).HasColumnName("unit_insurance_cost").IsRequired(false); + entity.Property(e => e.UnitLocFrtCost).HasColumnName("unit_loc_frt_cost").IsRequired(false); + entity.Property(e => e.CurInsuranceCost).HasColumnName("cur_insurance_cost").IsRequired(false); + entity.Property(e => e.CurLocFrtCost).HasColumnName("cur_loc_frt_cost").IsRequired(false); + entity.Property(e => e.TaxFreeMatl).HasColumnName("tax_free_matl").HasColumnType("tinyint").IsRequired(); + entity.Property(e => e.TaxFreeDays).HasColumnName("tax_free_days").IsRequired(false); + entity.Property(e => e.SafetyStockPercent).HasColumnName("safety_stock_percent").IsRequired(); + entity.Property(e => e.TariffClassification).HasColumnName("tariff_classification").HasMaxLength(20).IsRequired(false); + entity.Property(e => e.Lowdate).HasColumnName("lowdate").IsRequired(); + entity.Property(e => e.RcptRqmt).HasColumnName("rcpt_rqmt").HasMaxLength(1).IsRequired(); + entity.Property(e => e.ActiveForDataIntegration).HasColumnName("active_for_data_integration").HasColumnType("tinyint").IsRequired(); + entity.Property(e => e.RcvdOverPoQtyTolerance).HasColumnName("rcvd_over_po_qty_tolerance").IsRequired(false); + entity.Property(e => e.RcvdUnderPoQtyTolerance).HasColumnName("rcvd_under_po_qty_tolerance").IsRequired(false); + entity.Property(e => e.IncludeInNetChangePlanning).HasColumnName("include_in_net_change_planning").HasColumnType("tinyint"); + entity.Property(e => e.Kit).HasColumnName("kit").HasColumnType("tinyint").IsRequired(); + entity.Property(e => e.PrintKitComponents).HasColumnName("print_kit_components").HasColumnType("tinyint").IsRequired(); + entity.Property(e => e.SafetyStockRule).HasColumnName("safety_stock_rule").IsRequired(false); + entity.Property(e => e.ShowInDropDownList).HasColumnName("show_in_drop_down_list").HasColumnType("tinyint").IsRequired(); + entity.Property(e => e.ControlledByExternalIcs).HasColumnName("controlled_by_external_ics").HasColumnType("tinyint").IsRequired(); + entity.Property(e => e.InventoryUclTolerance).HasColumnName("inventory_ucl_tolerance").IsRequired(false); + entity.Property(e => e.InventoryLclTolerance).HasColumnName("inventory_lcl_tolerance").IsRequired(false); + entity.Property(e => e.SeparationAttribute).HasColumnName("separation_attribute").HasMaxLength(20).IsRequired(false); + entity.Property(e => e.BatchReleaseAttribute1).HasColumnName("batch_release_attribute1").IsRequired(false); + entity.Property(e => e.BatchReleaseAttribute2).HasColumnName("batch_release_attribute2").IsRequired(false); + entity.Property(e => e.BatchReleaseAttribute3).HasColumnName("batch_release_attribute3").IsRequired(false); + entity.Property(e => e.Picture).HasColumnName("picture").HasColumnType("image").IsRequired(false); + entity.Property(e => e.ActiveForCustomerPortal).HasColumnName("active_for_customer_portal").HasColumnType("tinyint").IsRequired(); + entity.Property(e => e.Featured).HasColumnName("featured").HasColumnType("tinyint").IsRequired(); + entity.Property(e => e.TopSeller).HasColumnName("top_seller").HasColumnType("tinyint").IsRequired(); + entity.Property(e => e.Overview).HasColumnName("overview").HasMaxLength(2000).IsRequired(false); + entity.Property(e => e.PreassignLots).HasColumnName("preassign_lots").HasColumnType("tinyint").IsRequired(); + entity.Property(e => e.PreassignSerials).HasColumnName("preassign_serials").HasColumnType("tinyint").IsRequired(); + entity.Property(e => e.AttrGroup).HasColumnName("attr_group").HasMaxLength(20).IsRequired(false); + entity.Property(e => e.DimensionGroup).HasColumnName("dimension_group").HasMaxLength(20).IsRequired(false); + entity.Property(e => e.LotAttrGroup).HasColumnName("lot_attr_group").HasMaxLength(20).IsRequired(false); + entity.Property(e => e.TrackPieces).HasColumnName("track_pieces").HasColumnType("tinyint").IsRequired(); + entity.Property(e => e.BomLastImportDate).HasColumnName("bom_last_import_date").IsRequired(false); + entity.Property(e => e.SaveCurrentRevUponBomImport).HasColumnName("save_current_rev_upon_bom_import").HasColumnType("tinyint").IsRequired(); + entity.Property(e => e.NaftaPrefCrit).HasColumnName("nafta_pref_crit").HasMaxLength(2).IsRequired(false); + entity.Property(e => e.SubjectToNaftaRvc).HasColumnName("subject_to_nafta_rvc").HasColumnType("tinyint").IsRequired(); + entity.Property(e => e.Producer).HasColumnName("producer").HasColumnType("tinyint").IsRequired(); + entity.Property(e => e.NaftaCountryOfOrigin).HasColumnName("nafta_country_of_origin").HasMaxLength(3).IsRequired(false); + entity.Property(e => e.MustUseFutureRcptsBeforePln).HasColumnName("must_use_future_rcpts_before_pln").HasColumnType("tinyint").IsRequired(); + entity.Property(e => e.SubjectToExciseTax).HasColumnName("subject_to_excise_tax").HasColumnType("tinyint").IsRequired(); + entity.Property(e => e.ExciseTaxPercent).HasColumnName("excise_tax_percent").IsRequired(false); + entity.Property(e => e.Uf_PLT_AddItemDesc).HasColumnName("uf_PLT_AddItemDesc").HasMaxLength(60).IsRequired(false); + entity.Property(e => e.Uf_PLT_Class).HasColumnName("uf_PLT_Class").HasMaxLength(20).IsRequired(false); + entity.Property(e => e.Uf_PLT_CNCode).HasColumnName("uf_PLT_CNCode").HasMaxLength(20).IsRequired(false); + entity.Property(e => e.Uf_PLT_Norm).HasColumnName("uf_PLT_Norm").HasMaxLength(20).IsRequired(false); + entity.Property(e => e.Uf_PLT_OldItemID).HasColumnName("uf_PLT_OldItemID").HasMaxLength(60).IsRequired(false); + entity.Property(e => e.Uf_PLT_Volume).HasColumnName("uf_PLT_Volume").IsRequired(false); + entity.Property(e => e.Uf_PLT_VolumeUnit).HasColumnName("uf_PLT_VolumeUnit").HasMaxLength(6).IsRequired(false); + entity.Property(e => e.Uf_INT_Replicate).HasColumnName("UF_INT_Replicate").HasColumnType("tinyint"); + entity.Property(e => e.BoxId).HasColumnName("box_id").HasMaxLength(3).IsRequired(false); + entity.Property(e => e.ItemLength).HasColumnName("item_length").HasColumnType("decimal(8,2)").IsRequired(false); + entity.Property(e => e.ItemFi).HasColumnName("item_fi").HasColumnType("decimal(8,2)").IsRequired(false); + entity.Property(e => e.BoxItemsCnt).HasColumnName("BoxItemsCnt").IsRequired(false); + entity.Property(e => e.Klient).HasColumnName("klient").HasMaxLength(10).IsRequired(false); + entity.Property(e => e.Uf_FKR_FA_RodzajPozycji).HasColumnName("Uf_FKR_FA_RodzajPozycji").HasMaxLength(4).IsRequired(false); + entity.Property(e => e.Uf_Nr_Klienta).HasColumnName("Uf_Nr_Klienta").HasMaxLength(20).IsRequired(false); + entity.Property(e => e.Uf_FKR_FA_Items_Nr_Zmiany).HasColumnName("Uf_FKR_FA_Items_Nr_Zmiany").IsRequired(false); + entity.Property(e => e.Uf_FKR_FA_item_core).HasColumnName("Uf_FKR_FA_item_core").HasMaxLength(30).IsRequired(false); + entity.Property(e => e.Uf_FKR_GTU).HasColumnName("Uf_FKR_GTU").HasMaxLength(15).IsRequired(false); + entity.Property(e => e.Uf_FKR_FA_Ilosc_Na_Jedn_Pak).HasColumnName("Uf_FKR_FA_Ilosc_Na_Jedn_Pak").IsRequired(false); + entity.Property(e => e.Uf_Element_Ilosc_W_Palecie).HasColumnName("Uf_Element_Ilosc_W_Palecie").IsRequired(false); + entity.Property(e => e.Uf_PUDELKO).HasColumnName("Uf_PUDELKO").HasColumnType("tinyint").IsRequired(false); + entity.Property(e => e.Uf_IMP_OrginalItem).HasColumnName("Uf_IMP_OrginalItem").HasMaxLength(60).IsRequired(false); + + // Indexes + entity.HasIndex(e => new { e.ItemCode, e.Lowdate, e.RcptRqmt, e.RowPointer }) + .HasDatabaseName("IX_item_item_lowdate") + .IsUnique(); + + entity.HasIndex(e => new { e.LowLevel, e.ItemCode }) + .HasDatabaseName("IX_item_level") + .IsUnique(); + + entity.HasIndex(e => new { e.PlanCode, e.ItemCode }) + .HasDatabaseName("IX_item_plan") + .IsUnique(); + + entity.HasIndex(e => new { e.ProductCode, e.ItemCode }) + .HasDatabaseName("IX_item_product") + .IsUnique(); + + entity.HasIndex(e => new { e.SerialTracked, e.ItemCode }) + .HasDatabaseName("IX_item_serial") + .IsUnique(); + + entity.HasIndex(e => new { e.UseReorderPoint, e.ItemCode }) + .HasDatabaseName("IX_item_use_reorder_point") + .IsUnique(); + + entity.HasIndex(e => e.RowPointer) + .HasDatabaseName("IX_item_RowPointer") + .IsUnique(); + }); + + modelBuilder.Entity(entity => + { + entity.ToTable("ZPL_VAT_CodesAssociations"); + + entity.HasKey(e => new { e.VATRegisterType, e.EndUserType, e.Category, e.ProdCode }); + + entity.Property(e => e.VATRegisterType) + .HasColumnName("VATRegisterType") + .HasMaxLength(20) + .IsRequired(); + + entity.Property(e => e.EndUserType) + .HasColumnName("end_user_type") + .HasMaxLength(6) + .IsRequired(); + + entity.Property(e => e.Category) + .HasColumnName("category") + .HasMaxLength(20) + .IsRequired(); + + entity.Property(e => e.ProdCode) + .HasColumnName("prod_code") + .HasMaxLength(10) + .IsRequired(); + + entity.Property(e => e.TaxCode) + .HasColumnName("tax_code") + .HasMaxLength(12) + .IsRequired(); + + entity.Property(e => e.VATRegisterCode) + .HasColumnName("VATRegisterCode") + .HasMaxLength(20) + .IsRequired(); + + entity.Property(e => e.InWorkflow) + .HasColumnName("InWorkflow") + .HasColumnType("tinyint") + .IsRequired(); + + entity.Property(e => e.NoteExistsFlag) + .HasColumnName("NoteExistsFlag") + .HasColumnType("tinyint") + .IsRequired(); + + entity.Property(e => e.RecordDate) + .HasColumnName("RecordDate") + .IsRequired(); + + entity.Property(e => e.RowPointer) + .HasColumnName("RowPointer") + .HasColumnType("uniqueidentifier") + .IsRequired(); + + entity.Property(e => e.CreatedBy) + .HasColumnName("CreatedBy") + .HasMaxLength(60) + .IsRequired(); + + entity.Property(e => e.UpdatedBy) + .HasColumnName("UpdatedBy") + .HasMaxLength(60) + .IsRequired(); + + entity.Property(e => e.CreateDate) + .HasColumnName("CreateDate") + .IsRequired(); + + entity.Property(e => e.Uf_ZPL_CodesCgsAcct) + .HasColumnName("uf_ZPL_CodesCgsAcct") + .HasMaxLength(12) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsAcctUnit1) + .HasColumnName("uf_ZPL_CodesCgsAcctUnit1") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsAcctUnit2) + .HasColumnName("uf_ZPL_CodesCgsAcctUnit2") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsAcctUnit3) + .HasColumnName("uf_ZPL_CodesCgsAcctUnit3") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsAcctUnit4) + .HasColumnName("uf_ZPL_CodesCgsAcctUnit4") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsDescription) + .HasColumnName("uf_ZPL_CodesCgsDescription") + .HasMaxLength(200) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsFovhdAcct) + .HasColumnName("uf_ZPL_CodesCgsFovhdAcct") + .HasMaxLength(12) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsFovhdAcctUnit1) + .HasColumnName("uf_ZPL_CodesCgsFovhdAcctUnit1") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsFovhdAcctUnit2) + .HasColumnName("uf_ZPL_CodesCgsFovhdAcctUnit2") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsFovhdAcctUnit3) + .HasColumnName("uf_ZPL_CodesCgsFovhdAcctUnit3") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsFovhdAcctUnit4) + .HasColumnName("uf_ZPL_CodesCgsFovhdAcctUnit4") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsFovhdDescription) + .HasColumnName("uf_ZPL_CodesCgsFovhdDescription") + .HasMaxLength(200) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsLbrAcct) + .HasColumnName("uf_ZPL_CodesCgsLbrAcct") + .HasMaxLength(12) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsLbrAcctUnit1) + .HasColumnName("uf_ZPL_CodesCgsLbrAcctUnit1") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsLbrAcctUnit2) + .HasColumnName("uf_ZPL_CodesCgsLbrAcctUnit2") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsLbrAcctUnit3) + .HasColumnName("uf_ZPL_CodesCgsLbrAcctUnit3") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsLbrAcctUnit4) + .HasColumnName("uf_ZPL_CodesCgsLbrAcctUnit4") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsLbrDescription) + .HasColumnName("uf_ZPL_CodesCgsLbrDescription") + .HasMaxLength(200) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsVovhdAcct) + .HasColumnName("uf_ZPL_CodesCgsVovhdAcct") + .HasMaxLength(12) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsVovhdAcctUnit1) + .HasColumnName("uf_ZPL_CodesCgsVovhdAcctUnit1") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsVovhdAcctUnit2) + .HasColumnName("uf_ZPL_CodesCgsVovhdAcctUnit2") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsVovhdAcctUnit3) + .HasColumnName("uf_ZPL_CodesCgsVovhdAcctUnit3") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsVovhdAcctUnit4) + .HasColumnName("uf_ZPL_CodesCgsVovhdAcctUnit4") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCgsVovhdDescription) + .HasColumnName("uf_ZPL_CodesCgsVovhdDescription") + .HasMaxLength(200) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCOGSVarsAcct) + .HasColumnName("uf_ZPL_CodesCOGSVarsAcct") + .HasMaxLength(12) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCOGSVarsAcctUnit1) + .HasColumnName("uf_ZPL_CodesCOGSVarsAcctUnit1") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCOGSVarsAcctUnit2) + .HasColumnName("uf_ZPL_CodesCOGSVarsAcctUnit2") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCOGSVarsAcctUnit3) + .HasColumnName("uf_ZPL_CodesCOGSVarsAcctUnit3") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCOGSVarsAcctUnit4) + .HasColumnName("uf_ZPL_CodesCOGSVarsAcctUnit4") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesCOGVarsDescription) + .HasColumnName("uf_ZPL_CodesCOGVarsDescription") + .HasMaxLength(200) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesOutAcct) + .HasColumnName("uf_ZPL_CodesOutAcct") + .HasMaxLength(12) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesOutAcctUnit1) + .HasColumnName("uf_ZPL_CodesOutAcctUnit1") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesOutAcctUnit2) + .HasColumnName("uf_ZPL_CodesOutAcctUnit2") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesOutAcctUnit3) + .HasColumnName("uf_ZPL_CodesOutAcctUnit3") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesOutAcctUnit4) + .HasColumnName("uf_ZPL_CodesOutAcctUnit4") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesOutDescription) + .HasColumnName("uf_ZPL_CodesOutDescription") + .HasMaxLength(200) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesSaleDsAcct) + .HasColumnName("uf_ZPL_CodesSaleDsAcct") + .HasMaxLength(12) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesSaleDsAcctUnit1) + .HasColumnName("uf_ZPL_CodesSaleDsAcctUnit1") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesSaleDsAcctUnit2) + .HasColumnName("uf_ZPL_CodesSaleDsAcctUnit2") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesSaleDsAcctUnit3) + .HasColumnName("uf_ZPL_CodesSaleDsAcctUnit3") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesSaleDsAcctUnit4) + .HasColumnName("uf_ZPL_CodesSaleDsAcctUnit4") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesSaleDsDescription) + .HasColumnName("uf_ZPL_CodesSaleDsDescription") + .HasMaxLength(200) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesSalesAcct) + .HasColumnName("uf_ZPL_CodesSalesAcct") + .HasMaxLength(12) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesSalesAcctUnit1) + .HasColumnName("uf_ZPL_CodesSalesAcctUnit1") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesSalesAcctUnit2) + .HasColumnName("uf_ZPL_CodesSalesAcctUnit2") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesSalesAcctUnit3) + .HasColumnName("uf_ZPL_CodesSalesAcctUnit3") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesSalesAcctUnit4) + .HasColumnName("uf_ZPL_CodesSalesAcctUnit4") + .HasMaxLength(6) + .IsRequired(false); + + entity.Property(e => e.Uf_ZPL_CodesSalesDescription) + .HasColumnName("uf_ZPL_CodesSalesDescription") + .HasMaxLength(200) + .IsRequired(false); + }); + + modelBuilder.Entity(entity => + { + entity.ToTable("itemcustprice_all"); + + entity.HasKey(e => new { e.SiteRef, e.Item, e.CustNum, e.CustItemSeq, e.EffectDate }); + + entity.Property(e => e.SiteRef) + .HasColumnName("site_ref") + .HasMaxLength(16) + .IsRequired(); + + entity.Property(e => e.Item) + .HasColumnName("item") + .HasMaxLength(60) + .IsRequired(); + + entity.Property(e => e.CustNum) + .HasColumnName("cust_num") + .HasMaxLength(14) + .IsRequired(); + + entity.Property(e => e.CustItemSeq) + .HasColumnName("cust_item_seq") + .HasColumnType("int") + .IsRequired(); + + entity.Property(e => e.EffectDate) + .HasColumnName("effect_date") + .IsRequired(); + + entity.Property(e => e.ContPrice) + .HasColumnName("cont_price") + .IsRequired(false); + + entity.Property(e => e.BrkQty1) + .HasColumnName("brk_qty##1") + .IsRequired(false); + + entity.Property(e => e.BrkQty2) + .HasColumnName("brk_qty##2") + .IsRequired(false); + + entity.Property(e => e.BrkQty3) + .HasColumnName("brk_qty##3") + .IsRequired(false); + + entity.Property(e => e.BrkQty4) + .HasColumnName("brk_qty##4") + .IsRequired(false); + + entity.Property(e => e.BrkQty5) + .HasColumnName("brk_qty##5") + .IsRequired(false); + + entity.Property(e => e.BrkPrice1) + .HasColumnName("brk_price##1") + .IsRequired(false); + + entity.Property(e => e.BrkPrice2) + .HasColumnName("brk_price##2") + .IsRequired(false); + + entity.Property(e => e.BrkPrice3) + .HasColumnName("brk_price##3") + .IsRequired(false); + + entity.Property(e => e.BrkPrice4) + .HasColumnName("brk_price##4") + .IsRequired(false); + + entity.Property(e => e.BrkPrice5) + .HasColumnName("brk_price##5") + .IsRequired(false); + + entity.Property(e => e.BaseCode1) + .HasColumnName("base_code##1") + .HasMaxLength(2) + .IsRequired(false); + + entity.Property(e => e.BaseCode2) + .HasColumnName("base_code##2") + .HasMaxLength(2) + .IsRequired(false); + + entity.Property(e => e.BaseCode3) + .HasColumnName("base_code##3") + .HasMaxLength(2) + .IsRequired(false); + + entity.Property(e => e.BaseCode4) + .HasColumnName("base_code##4") + .HasMaxLength(2) + .IsRequired(false); + + entity.Property(e => e.BaseCode5) + .HasColumnName("base_code##5") + .HasMaxLength(2) + .IsRequired(false); + + entity.Property(e => e.DolPercent1) + .HasColumnName("dol_percent##1") + .HasMaxLength(1) + .IsRequired(false); + + entity.Property(e => e.DolPercent2) + .HasColumnName("dol_percent##2") + .HasMaxLength(1) + .IsRequired(false); + + entity.Property(e => e.DolPercent3) + .HasColumnName("dol_percent##3") + .HasMaxLength(1) + .IsRequired(false); + + entity.Property(e => e.DolPercent4) + .HasColumnName("dol_percent##4") + .HasMaxLength(1) + .IsRequired(false); + + entity.Property(e => e.DolPercent5) + .HasColumnName("dol_percent##5") + .HasMaxLength(1) + .IsRequired(false); + + entity.Property(e => e.NoteExistsFlag) + .HasColumnName("NoteExistsFlag") + .HasColumnType("tinyint") + .IsRequired(); + + entity.Property(e => e.RecordDate) + .HasColumnName("RecordDate") + .IsRequired(); + + entity.Property(e => e.RowPointer) + .HasColumnName("RowPointer") + .HasColumnType("uniqueidentifier") + .IsRequired(); + + entity.Property(e => e.CreatedBy) + .HasColumnName("CreatedBy") + .HasMaxLength(60) + .IsRequired(); + + entity.Property(e => e.UpdatedBy) + .HasColumnName("UpdatedBy") + .HasMaxLength(60) + .IsRequired(); + + entity.Property(e => e.CreateDate) + .HasColumnName("CreateDate") + .IsRequired(); + + entity.Property(e => e.InWorkflow) + .HasColumnName("InWorkflow") + .HasColumnType("tinyint") + .IsRequired(); + + entity.Property(e => e.IncludeTaxInPrice) + .HasColumnName("include_tax_in_price") + .HasColumnType("tinyint") + .IsRequired(); + + // Index + entity.HasIndex(e => new { e.RowPointer, e.SiteRef }) + .HasDatabaseName("IX_itemcustprice_all_RowPointer") + .IsUnique(); + }); + + modelBuilder.Entity(entity => + { + entity.ToTable("edi_logs"); + + entity.HasKey(e => e.Id); + + entity.Property(e => e.Id) + .HasColumnName("Id") + .HasColumnType("int") + .IsRequired(); + + entity.Property(e => e.ProcessName) + .HasColumnName("ProcessName") + .HasMaxLength(200) + .IsRequired(); + + entity.Property(e => e.ConfigurationName) + .HasColumnName("ConfigurationName") + .HasMaxLength(200) + .IsRequired(); + + entity.Property(e => e.Status) + .HasColumnName("Status") + .HasColumnType("int") + .IsRequired(); + + entity.Property(e => e.LogText) + .HasColumnName("LogText") + .HasColumnType("varchar(max)") + .IsRequired(); + + entity.Property(e => e.Date) + .HasColumnName("Date") + .HasColumnType("datetime") + .IsRequired(); + }); + + modelBuilder.Entity(entity => + { + entity.ToTable("wz_row_mareli"); + + entity.HasKey(e => e.ID); + + entity.Property(e => e.ID) + .HasColumnName("ID") + .HasColumnType("uniqueidentifier") + .IsRequired(); + + entity.Property(e => e.FKHeader) + .HasColumnName("FK_Header") + .HasColumnType("uniqueidentifier") + .IsRequired(false); + + entity.Property(e => e.Type) + .HasColumnName("type") + .HasMaxLength(30) + .IsRequired(false); + + entity.Property(e => e.PalletNumber) + .HasColumnName("pallet_number") + .HasColumnType("int") + .IsRequired(false); + + entity.Property(e => e.ItemNumber) + .HasColumnName("item_number") + .HasMaxLength(50) + .IsRequired(false); + + entity.Property(e => e.EngineerNumber) + .HasColumnName("engineer_number") + .HasMaxLength(50) + .IsRequired(false); + + entity.Property(e => e.Quantity) + .HasColumnName("quantity") + .HasColumnType("int") + .IsRequired(false); + + entity.Property(e => e.OrderNumber) + .HasColumnName("order_number") + .HasMaxLength(50) + .IsRequired(false); + + entity.Property(e => e.WzNumber) + .HasColumnName("wz_number") + .HasMaxLength(50) + .IsRequired(false); + + entity.Property(e => e.FaIndex) + .HasColumnName("fa_index") + .HasMaxLength(30) + .IsRequired(false); + + entity.Property(e => e.TransactionNumber) + .HasColumnName("trans_num") + .HasColumnType("int") + .IsRequired(false); + + // Foreign Key + entity.HasOne(e => e.Header) + .WithMany() + .HasForeignKey(e => e.FKHeader) + .HasConstraintName("wz_row_mareli_wz_header_ID_fk"); + }); } } } diff --git a/SytelineSaAppEfDataModel/SytelineSaAppEfDataModel.csproj b/SytelineSaAppEfDataModel/SytelineSaAppEfDataModel.csproj index c44357d..1e23ae8 100644 --- a/SytelineSaAppEfDataModel/SytelineSaAppEfDataModel.csproj +++ b/SytelineSaAppEfDataModel/SytelineSaAppEfDataModel.csproj @@ -2,10 +2,18 @@ net8.0 + DataModel enable enable - + + SytelineSaAppEfDataModel + Piotr Kus + Syteline Entity Framework Data Model + patch + 1.0 + + @@ -20,6 +28,10 @@ + + runtime; build; native; contentfiles; analyzers; buildtransitive + all +