From 89792d3d2868a189cdb5fec948b5591cb0dc6f15 Mon Sep 17 00:00:00 2001 From: Piotr Kus Date: Mon, 8 Sep 2025 21:19:17 +0200 Subject: [PATCH] * Introduced new WzRowMareli service to handle new client --- .../Controllers/WzRowMareliController.cs | 62 +++++++++++++++++++ FaKrosnoApi/Program.cs | 1 + .../Dtos/WzRowMareliDto.cs | 14 +++++ .../Entities/WzRowMareli.cs | 17 +++++ SytelineSaAppEfDataModel/MappingProfile.cs | 1 + .../Services/IWzRowMareliService.cs | 11 ++++ .../Services/WzRowMareliService.cs | 36 +++++++++++ .../SytelineSaAppDbContext.cs | 59 ++++++++++++++++++ 8 files changed, 201 insertions(+) create mode 100644 FaKrosnoApi/Controllers/WzRowMareliController.cs create mode 100644 SytelineSaAppEfDataModel/Dtos/WzRowMareliDto.cs create mode 100644 SytelineSaAppEfDataModel/Entities/WzRowMareli.cs create mode 100644 SytelineSaAppEfDataModel/Services/IWzRowMareliService.cs create mode 100644 SytelineSaAppEfDataModel/Services/WzRowMareliService.cs diff --git a/FaKrosnoApi/Controllers/WzRowMareliController.cs b/FaKrosnoApi/Controllers/WzRowMareliController.cs new file mode 100644 index 0000000..d9879a1 --- /dev/null +++ b/FaKrosnoApi/Controllers/WzRowMareliController.cs @@ -0,0 +1,62 @@ +using Microsoft.AspNetCore.Mvc; +using SytelineSaAppEfDataModel.Dtos; +using SytelineSaAppEfDataModel.Services; + +namespace FaKrosnoApi.Controllers; + +[ApiController] +[Route("api/[controller]")] +public class WzRowMareliController(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/Program.cs b/FaKrosnoApi/Program.cs index b5efa89..e32d345 100644 --- a/FaKrosnoApi/Program.cs +++ b/FaKrosnoApi/Program.cs @@ -109,6 +109,7 @@ builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); +builder.Services.AddScoped(); builder.Services.AddHostedService(); diff --git a/SytelineSaAppEfDataModel/Dtos/WzRowMareliDto.cs b/SytelineSaAppEfDataModel/Dtos/WzRowMareliDto.cs new file mode 100644 index 0000000..1fb112c --- /dev/null +++ b/SytelineSaAppEfDataModel/Dtos/WzRowMareliDto.cs @@ -0,0 +1,14 @@ +namespace SytelineSaAppEfDataModel.Dtos; + +public class WzRowMareliDto +{ + 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; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/Entities/WzRowMareli.cs b/SytelineSaAppEfDataModel/Entities/WzRowMareli.cs new file mode 100644 index 0000000..3b13bdc --- /dev/null +++ b/SytelineSaAppEfDataModel/Entities/WzRowMareli.cs @@ -0,0 +1,17 @@ +namespace SytelineSaAppEfDataModel.Entities; + +public class WzRowMareli +{ + 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; } + + // Navigation property + public WzHeader Header { get; set; } +} \ No newline at end of file diff --git a/SytelineSaAppEfDataModel/MappingProfile.cs b/SytelineSaAppEfDataModel/MappingProfile.cs index f7dbb77..cc28cee 100644 --- a/SytelineSaAppEfDataModel/MappingProfile.cs +++ b/SytelineSaAppEfDataModel/MappingProfile.cs @@ -32,6 +32,7 @@ namespace SytelineSaAppEfDataModel CreateMap().ReverseMap(); CreateMap().ReverseMap(); CreateMap().ReverseMap(); + CreateMap().ReverseMap(); } } } diff --git a/SytelineSaAppEfDataModel/Services/IWzRowMareliService.cs b/SytelineSaAppEfDataModel/Services/IWzRowMareliService.cs new file mode 100644 index 0000000..91fb853 --- /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/WzRowMareliService.cs b/SytelineSaAppEfDataModel/Services/WzRowMareliService.cs new file mode 100644 index 0000000..3e3cd36 --- /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/SytelineSaAppDbContext.cs b/SytelineSaAppEfDataModel/SytelineSaAppDbContext.cs index 41c790a..41abf7c 100644 --- a/SytelineSaAppEfDataModel/SytelineSaAppDbContext.cs +++ b/SytelineSaAppEfDataModel/SytelineSaAppDbContext.cs @@ -22,6 +22,7 @@ namespace SytelineSaAppEfDataModel 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; } @@ -2506,6 +2507,64 @@ namespace SytelineSaAppEfDataModel .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); + + // Foreign Key + entity.HasOne(e => e.Header) + .WithMany() + .HasForeignKey(e => e.FKHeader) + .HasConstraintName("wz_row_mareli_wz_header_ID_fk"); + }); } } }