Warehouses #1

Merged
trent merged 159 commits from Warehouses into master 2026-01-10 20:24:17 +00:00
15 changed files with 172 additions and 23 deletions
Showing only changes of commit 0199467f72 - Show all commits

View File

@@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using SytelineSaAppEfDataModel.Dtos;
using SytelineSaAppEfDataModel.Services; using SytelineSaAppEfDataModel.Services;
namespace FaKrosnoApi.Controllers; namespace FaKrosnoApi.Controllers;
@@ -13,4 +14,22 @@ public class EdiCustomerOrderImportController(IEdiCustomerOrderImportService ser
DateTime lastUpdateDate = await service.GetLastUpdateDate(); DateTime lastUpdateDate = await service.GetLastUpdateDate();
return Ok(lastUpdateDate); return Ok(lastUpdateDate);
} }
[HttpPost]
public async Task<ActionResult> 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<ActionResult> Add([FromBody] IList<EdiCustomerOrderImportDto> ediCustomerOrderImports)
{
var result = await service.AddEdiCustomerOrderImports(ediCustomerOrderImports);
return result
? Ok("Utworzono rekordy w tabeli EdiCustomerOrderImport.")
: BadRequest($"Nie mogę utworzyć rekordów w tabeli EdiCustomerOrderImport.");
}
} }

View File

@@ -55,7 +55,7 @@ namespace FaKrosnoApi.Controllers
var result = await service.SaveOrdersWithDetails(ediCustomerOrders); var result = await service.SaveOrdersWithDetails(ediCustomerOrders);
return result.Item1 return result.Item1
? Ok("Orders saved successfully.") ? Ok(result)
: BadRequest($"Failed to save orders. Error: {result.Item2}"); : BadRequest($"Failed to save orders. Error: {result.Item2}");
} }
} }

View File

@@ -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<ActionResult> 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.");
}
}

View File

@@ -66,19 +66,19 @@ builder.Services.AddOpenApiDocument(config =>
config.OperationProcessors.Add(new OperationSecurityScopeProcessor("Bearer")); config.OperationProcessors.Add(new OperationSecurityScopeProcessor("Bearer"));
}); });
// builder.Services.AddHangfire(config => config builder.Services.AddHangfire(config => config
// .SetDataCompatibilityLevel(CompatibilityLevel.Version_170) .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
// .UseSimpleAssemblyNameTypeSerializer() .UseSimpleAssemblyNameTypeSerializer()
// .UseRecommendedSerializerSettings() .UseRecommendedSerializerSettings()
// .UseSqlServerStorage(builder.Configuration.GetConnectionString("OrdersManagementConnection"), new SqlServerStorageOptions .UseSqlServerStorage(builder.Configuration.GetConnectionString("OrdersManagementConnection"), new SqlServerStorageOptions
// { {
// CommandBatchMaxTimeout = TimeSpan.FromMinutes(5), CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
// SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5), SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
// QueuePollInterval = TimeSpan.Zero, QueuePollInterval = TimeSpan.Zero,
// UseRecommendedIsolationLevel = true, UseRecommendedIsolationLevel = true,
// DisableGlobalLocks = true DisableGlobalLocks = true
// })); }));
// builder.Services.AddHangfireServer(); builder.Services.AddHangfireServer();
builder.Services.AddAutoMapper(typeof(FaKrosnoMappingProfile), typeof(SytelineSaAppMappingProfile), builder.Services.AddAutoMapper(typeof(FaKrosnoMappingProfile), typeof(SytelineSaAppMappingProfile),
typeof(OrdersManagementMappingProfile)); typeof(OrdersManagementMappingProfile));
@@ -108,6 +108,7 @@ builder.Services.AddScoped<ICustomerTpService, CustomerTpService>();
builder.Services.AddScoped<IItemService, ItemService>(); builder.Services.AddScoped<IItemService, ItemService>();
builder.Services.AddScoped<IVatCodeAssociationService, VatCodeAssociationService>(); builder.Services.AddScoped<IVatCodeAssociationService, VatCodeAssociationService>();
builder.Services.AddScoped<IItemCustPriceAllService, ItemCustPriceAllService>(); builder.Services.AddScoped<IItemCustPriceAllService, ItemCustPriceAllService>();
builder.Services.AddScoped<IEdiLogService, EdiLogService>();
builder.Services.AddHostedService<TimedHostedService>(); builder.Services.AddHostedService<TimedHostedService>();
@@ -125,6 +126,6 @@ app.UseAuthorization();
app.MapControllers(); app.MapControllers();
//app.UseHangfireDashboard(); app.UseHangfireDashboard();
app.Run(); app.Run();

View File

@@ -1,7 +1,7 @@
{ {
"ConnectionStrings": { "ConnectionStrings": {
"FaKrosnoConnection": "Server=192.168.0.7;Database=fakrosno;User Id=sa;Password=Tetum#2021!;TrustServerCertificate=true", "FaKrosnoConnection": "Server=192.168.0.7;Database=fakrosno;User Id=sa;Password=Tetum#2021!;TrustServerCertificate=true",
"SytelineSaAppConnection": "Server=192.168.0.7;Database=SL_PROD_SA_APP;User Id=sa;Password=Tetum#2021!;TrustServerCertificate=true", "SytelineSaAppConnection": "Server=192.168.0.7;Database=SL_PRODTEST_SA_APP;User Id=sa;Password=Tetum#2021!;TrustServerCertificate=true",
"OrdersManagementConnection": "Server=192.168.0.7;Database=OrdersManagement;User Id=sa;Password=Tetum#2021!;TrustServerCertificate=true" "OrdersManagementConnection": "Server=192.168.0.7;Database=OrdersManagement;User Id=sa;Password=Tetum#2021!;TrustServerCertificate=true"
}, },
"Logging": { "Logging": {

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using AutoMapper.Configuration.Annotations;
namespace SytelineSaAppEfDataModel.Dtos namespace SytelineSaAppEfDataModel.Dtos
{ {
@@ -105,6 +106,8 @@ namespace SytelineSaAppEfDataModel.Dtos
public string TranslatedStatus => TranslateStatus(Status ?? string.Empty); public string TranslatedStatus => TranslateStatus(Status ?? string.Empty);
public string? SlOrderNumber => EdiCustomerOrderTranslates.MaxBy(x => x.CreatedDate)?.CoCoNum; public string? SlOrderNumber => EdiCustomerOrderTranslates.MaxBy(x => x.CreatedDate)?.CoCoNum;
public string SentToSl => Posted == 1 ? "TAK" : "NIE"; public string SentToSl => Posted == 1 ? "TAK" : "NIE";
[Ignore] public int ScheduleOrderId { get; set; }
[Ignore] public DateTime LastUpdateDate { get; set; }
public IEnumerable<EdiCustomerOrderLineDto> EdiCustomerOrderLines { get; set; } = new List<EdiCustomerOrderLineDto>(); public IEnumerable<EdiCustomerOrderLineDto> EdiCustomerOrderLines { get; set; } = new List<EdiCustomerOrderLineDto>();
public IEnumerable<EdiCustomerOrderTranslateDto> EdiCustomerOrderTranslates { get; set; } = new List<EdiCustomerOrderTranslateDto>(); public IEnumerable<EdiCustomerOrderTranslateDto> EdiCustomerOrderTranslates { get; set; } = new List<EdiCustomerOrderTranslateDto>();

View File

@@ -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; }
}

View File

@@ -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; }
}

View File

@@ -31,6 +31,7 @@ namespace SytelineSaAppEfDataModel
CreateMap<Item, ItemDto>().ReverseMap(); CreateMap<Item, ItemDto>().ReverseMap();
CreateMap<VatCodeAssociation, VatCodeAssociationDto>().ReverseMap(); CreateMap<VatCodeAssociation, VatCodeAssociationDto>().ReverseMap();
CreateMap<ItemCustPriceAll, ItemCustPriceAllDto>().ReverseMap(); CreateMap<ItemCustPriceAll, ItemCustPriceAllDto>().ReverseMap();
CreateMap<EdiLog, EdiLogDto>().ReverseMap();
} }
} }
} }

View File

@@ -1,5 +1,7 @@
using AutoMapper; using AutoMapper;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using SytelineSaAppEfDataModel.Dtos;
using SytelineSaAppEfDataModel.Entities;
namespace SytelineSaAppEfDataModel.Services; namespace SytelineSaAppEfDataModel.Services;
@@ -10,4 +12,18 @@ public class EdiCustomerOrderImportService(SytelineSaAppDbContext context, IMapp
return (await context.EdiCustomerOrderImports.OrderByDescending(x => x.LastUpdateDate) return (await context.EdiCustomerOrderImports.OrderByDescending(x => x.LastUpdateDate)
.FirstOrDefaultAsync())?.LastUpdateDate ?? DateTime.Now.Date; .FirstOrDefaultAsync())?.LastUpdateDate ?? DateTime.Now.Date;
} }
public async Task<bool> AddEdiCustomerOrderImport(EdiCustomerOrderImportDto ediCustomerOrderImport)
{
var entity = mapper.Map<EdiCustomerOrderImport>(ediCustomerOrderImport);
await context.EdiCustomerOrderImports.AddAsync(entity);
return await context.SaveChangesAsync() > 0;
}
public async Task<bool> AddEdiCustomerOrderImports(IList<EdiCustomerOrderImportDto> ediCustomerOrderImports)
{
var entities = mapper.Map<List<EdiCustomerOrderImport>>(ediCustomerOrderImports);
context.EdiCustomerOrderImports.AddRange(entities);
return await context.SaveChangesAsync() > 0;
}
} }

View File

@@ -149,13 +149,16 @@ namespace SytelineSaAppEfDataModel.Services
try try
{ {
await context.EdiCustomerOrders.AddRangeAsync(ediCustomerOrders.Select(mapper.Map<EdiCustomerOrder>)); IList<EdiCustomerOrder> customerOrders = ediCustomerOrders.Select(mapper.Map<EdiCustomerOrder>).ToList();
await context.EdiCustomerOrderLines.AddRangeAsync(ediCustomerOrders IList<EdiCustomerOrderLine> ediCustomerOrderLines = ediCustomerOrders
.SelectMany(x => x.EdiCustomerOrderLines) .SelectMany(x => x.EdiCustomerOrderLines).Select(mapper.Map<EdiCustomerOrderLine>).ToList();
.Select(mapper.Map<EdiCustomerOrderLine>)); IList<EdiCustomerOrderLineItem> ediCustomerOrderLineItems = ediCustomerOrders
await context.EdiCustomerOrderLineItems.AddRangeAsync(ediCustomerOrders .SelectMany(x => x.EdiCustomerOrderLines).SelectMany(y => y.EdiCustomerOrderLineItems)
.SelectMany(x => x.EdiCustomerOrderLines) .Select(mapper.Map<EdiCustomerOrderLineItem>).ToList();
.SelectMany(y => y.EdiCustomerOrderLineItems).Select(mapper.Map<EdiCustomerOrderLineItem>));
await context.EdiCustomerOrders.AddRangeAsync(customerOrders);
await context.EdiCustomerOrderLines.AddRangeAsync(ediCustomerOrderLines);
await context.EdiCustomerOrderLineItems.AddRangeAsync(ediCustomerOrderLineItems);
await context.EdiCustomerOrderTranslates.AddRangeAsync(ediCustomerOrders await context.EdiCustomerOrderTranslates.AddRangeAsync(ediCustomerOrders
.SelectMany(x => x.EdiCustomerOrderTranslates) .SelectMany(x => x.EdiCustomerOrderTranslates)
.Select(mapper.Map<EdiCustomerOrderTranslate>)); .Select(mapper.Map<EdiCustomerOrderTranslate>));

View File

@@ -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<bool> AddEdiLog(EdiLogDto ediLog)
{
var entity = mapper.Map<EdiLog>(ediLog);
await context.EdiLogs.AddAsync(entity);
return await context.SaveChangesAsync() > 0;
}
}

View File

@@ -1,6 +1,10 @@
using SytelineSaAppEfDataModel.Dtos;
namespace SytelineSaAppEfDataModel.Services; namespace SytelineSaAppEfDataModel.Services;
public interface IEdiCustomerOrderImportService public interface IEdiCustomerOrderImportService
{ {
Task<DateTime> GetLastUpdateDate(); Task<DateTime> GetLastUpdateDate();
Task<bool> AddEdiCustomerOrderImport(EdiCustomerOrderImportDto ediCustomerOrderImport);
Task<bool> AddEdiCustomerOrderImports(IList<EdiCustomerOrderImportDto> ediCustomerOrderImports);
} }

View File

@@ -0,0 +1,8 @@
using SytelineSaAppEfDataModel.Dtos;
namespace SytelineSaAppEfDataModel.Services;
public interface IEdiLogService
{
Task<bool> AddEdiLog(EdiLogDto ediLog);
}

View File

@@ -30,6 +30,7 @@ namespace SytelineSaAppEfDataModel
public DbSet<Item> Items { get; set; } public DbSet<Item> Items { get; set; }
public DbSet<VatCodeAssociation> VatCodeAssociations { get; set; } public DbSet<VatCodeAssociation> VatCodeAssociations { get; set; }
public DbSet<ItemCustPriceAll> ItemCustPriceAlls { get; set; } public DbSet<ItemCustPriceAll> ItemCustPriceAlls { get; set; }
public DbSet<EdiLog> EdiLogs { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{ {
@@ -2468,6 +2469,43 @@ namespace SytelineSaAppEfDataModel
.HasDatabaseName("IX_itemcustprice_all_RowPointer") .HasDatabaseName("IX_itemcustprice_all_RowPointer")
.IsUnique(); .IsUnique();
}); });
modelBuilder.Entity<EdiLog>(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();
});
} }
} }
} }