diff --git a/FaKrosnoApi/Controllers/ExcelGeneratorController.cs b/FaKrosnoApi/Controllers/ExcelGeneratorController.cs index 38be5b4..d8c1979 100644 --- a/FaKrosnoApi/Controllers/ExcelGeneratorController.cs +++ b/FaKrosnoApi/Controllers/ExcelGeneratorController.cs @@ -89,14 +89,14 @@ public class ExcelGeneratorController(IWzHeaderService wzHeaderService, IMateria workbook.SaveAs(stream); stream.Position = 0; - SendEmail(stream, wzHeader); + SendEmail(stream, wzHeader, "Meyle"); } [HttpGet("generate-marelli")] public async Task GeneratePackListForMarelli(Guid packListId) { - WzHeaderDto wzHeader = await wzHeaderService.GetById(packListId); - MaterialTransactionDto? materialTransaction = await materialTransactionService.GetByWzNumber(wzHeader.WzRowsMeyle.First().WzNumber); + WzHeaderDto wzHeader = await wzHeaderService.GetByIdMarelli(packListId); + MaterialTransactionDto? materialTransaction = await materialTransactionService.GetByWzNumber(wzHeader.WzRowsMarelli.First().WzNumber); using ExcelEngine excelEngine = new ExcelEngine(); IApplication application = excelEngine.Excel; @@ -109,33 +109,28 @@ public class ExcelGeneratorController(IWzHeaderService wzHeaderService, IMateria 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; + { "", "ColliNr", "Magneti Marelli Sales nr", "Engineer number", "Quantity", "Order nr", "Supplier Comments" }; - worksheet["B3"].Value = "Supplier Name"; + 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["D3"].Value = "FA KROSNO"; - worksheet["D3"].CellStyle = boldFontStyle; - - worksheet["B4"].Value = "Packing List nr"; + worksheet["A4"].Value = "Packing List nr"; + worksheet["A4"].CellStyle = boldFontStyle; + + worksheet["B4"].Value = string.Join(", ", wzHeader.WzRowsMeyle.Select(x => x.WzNumber).Distinct()); worksheet["B4"].CellStyle = boldFontStyle; - worksheet["B6"].Value = "Related delivery note"; - worksheet["B6"].CellStyle = boldFontStyle; + worksheet["A6"].Value = "Date"; + worksheet["A6"].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; + worksheet["B6"].DateTime = materialTransaction?.CreateDate ?? DateTime.Now; int currentRow = 12; @@ -148,14 +143,15 @@ public class ExcelGeneratorController(IWzHeaderService wzHeaderService, IMateria currentRow++; - foreach (var wzRow in wzHeader.WzRowsMeyle) + foreach (var wzRow in wzHeader.WzRowsMarelli.Where(x => x.PalletNumber != null)) { - 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; + 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++; } @@ -169,7 +165,7 @@ public class ExcelGeneratorController(IWzHeaderService wzHeaderService, IMateria workbook.SaveAs(stream); stream.Position = 0; - SendEmail(stream, wzHeader); + SendEmail(stream, wzHeader, "Marelli Magneti"); } private static string GetColumnLetter(int columnIndex) @@ -184,7 +180,7 @@ public class ExcelGeneratorController(IWzHeaderService wzHeaderService, IMateria return columnName; } - private void SendEmail(MemoryStream stream, WzHeaderDto wzHeader) + private void SendEmail(MemoryStream stream, WzHeaderDto wzHeader, string client) { IConfigurationSection smtpSettings = configuration.GetSection("EmailSettings"); string smtpHost = smtpSettings["SmtpServer"] ?? string.Empty; @@ -194,9 +190,9 @@ public class ExcelGeneratorController(IWzHeaderService wzHeaderService, IMateria string fromEmail = smtpSettings["SenderEmail"] ?? string.Empty; List toEmail = wzHeader.EmailAddresses?.Split(',')?.ToList() ?? (smtpSettings["RecipientEmail"] ?? string.Empty).Split(',').ToList(); - string subject = "MEYLE: Packing List"; + string subject = $"{client}: Packing List"; string body = - $"W załączeniu znajduje się Packing List dla klienta MEYLE wygenerowany {DateTime.Now:dd.MM.yyyy HH:mm:ss}"; + $"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); @@ -204,7 +200,7 @@ public class ExcelGeneratorController(IWzHeaderService wzHeaderService, IMateria mailMessage.Body = body; mailMessage.IsBodyHtml = false; - mailMessage.Attachments.Add(new Attachment(stream, $"PackingList_Meyle_{DateTime.Now:yyyyMMddHHmmss}.xlsx", + 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)); diff --git a/OrdersManagement/Components/Pages/PackingLists/Marelli/MarelliPackList.razor b/OrdersManagement/Components/Pages/PackingLists/Marelli/MarelliPackList.razor index c934687..fe1b92e 100644 --- a/OrdersManagement/Components/Pages/PackingLists/Marelli/MarelliPackList.razor +++ b/OrdersManagement/Components/Pages/PackingLists/Marelli/MarelliPackList.razor @@ -259,7 +259,7 @@ private async Task ExportXls() { int count = WzRowsMarelli.Count(x => x.PalletNumber == null); - + _isValid = true; _isValid = count == 0; _isValid = _isValid && !string.IsNullOrWhiteSpace(EmailAddresses); diff --git a/SytelineSaAppEfDataModel/Dtos/WzClientDto.cs b/SytelineSaAppEfDataModel/Dtos/WzClientDto.cs index 1d2d974..75af10f 100644 --- a/SytelineSaAppEfDataModel/Dtos/WzClientDto.cs +++ b/SytelineSaAppEfDataModel/Dtos/WzClientDto.cs @@ -8,4 +8,5 @@ public class WzClientDto 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 index c618a0e..dd45e0f 100644 --- a/SytelineSaAppEfDataModel/Dtos/WzHeaderDto.cs +++ b/SytelineSaAppEfDataModel/Dtos/WzHeaderDto.cs @@ -8,4 +8,5 @@ public class WzHeaderDto 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/Entities/WzClient.cs b/SytelineSaAppEfDataModel/Entities/WzClient.cs index b83bc51..13db712 100644 --- a/SytelineSaAppEfDataModel/Entities/WzClient.cs +++ b/SytelineSaAppEfDataModel/Entities/WzClient.cs @@ -8,4 +8,5 @@ public class WzClient 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/MappingProfile.cs b/SytelineSaAppEfDataModel/MappingProfile.cs index 6b24589..630102f 100644 --- a/SytelineSaAppEfDataModel/MappingProfile.cs +++ b/SytelineSaAppEfDataModel/MappingProfile.cs @@ -20,7 +20,8 @@ namespace SytelineSaAppEfDataModel CreateMap().ReverseMap(); 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(); diff --git a/SytelineSaAppEfDataModel/Services/IWzHeaderService.cs b/SytelineSaAppEfDataModel/Services/IWzHeaderService.cs index 53b59b8..d25e8a5 100644 --- a/SytelineSaAppEfDataModel/Services/IWzHeaderService.cs +++ b/SytelineSaAppEfDataModel/Services/IWzHeaderService.cs @@ -8,5 +8,6 @@ public interface IWzHeaderService 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/WzHeaderService.cs b/SytelineSaAppEfDataModel/Services/WzHeaderService.cs index 5779d2e..a14bb07 100644 --- a/SytelineSaAppEfDataModel/Services/WzHeaderService.cs +++ b/SytelineSaAppEfDataModel/Services/WzHeaderService.cs @@ -38,6 +38,18 @@ public class WzHeaderService(SytelineSaAppDbContext context, IMapper mapper) : I 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); diff --git a/SytelineSaAppEfDataModel/SytelineSaAppDbContext.cs b/SytelineSaAppEfDataModel/SytelineSaAppDbContext.cs index 66ff00f..adc3804 100644 --- a/SytelineSaAppEfDataModel/SytelineSaAppDbContext.cs +++ b/SytelineSaAppEfDataModel/SytelineSaAppDbContext.cs @@ -959,6 +959,10 @@ namespace SytelineSaAppEfDataModel .HasColumnName("ShortName") .HasMaxLength(30) .IsRequired(false); + + entity.Property(e => e.Logo) + .HasColumnType("VARBINARY(MAX)") + .IsRequired(false); }); modelBuilder.Entity(entity =>