* Added Excel generation for Marelli
* Added Logo
This commit is contained in:
@@ -89,14 +89,14 @@ public class ExcelGeneratorController(IWzHeaderService wzHeaderService, IMateria
|
|||||||
workbook.SaveAs(stream);
|
workbook.SaveAs(stream);
|
||||||
stream.Position = 0;
|
stream.Position = 0;
|
||||||
|
|
||||||
SendEmail(stream, wzHeader);
|
SendEmail(stream, wzHeader, "Meyle");
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("generate-marelli")]
|
[HttpGet("generate-marelli")]
|
||||||
public async Task GeneratePackListForMarelli(Guid packListId)
|
public async Task GeneratePackListForMarelli(Guid packListId)
|
||||||
{
|
{
|
||||||
WzHeaderDto wzHeader = await wzHeaderService.GetById(packListId);
|
WzHeaderDto wzHeader = await wzHeaderService.GetByIdMarelli(packListId);
|
||||||
MaterialTransactionDto? materialTransaction = await materialTransactionService.GetByWzNumber(wzHeader.WzRowsMeyle.First().WzNumber);
|
MaterialTransactionDto? materialTransaction = await materialTransactionService.GetByWzNumber(wzHeader.WzRowsMarelli.First().WzNumber);
|
||||||
|
|
||||||
using ExcelEngine excelEngine = new ExcelEngine();
|
using ExcelEngine excelEngine = new ExcelEngine();
|
||||||
IApplication application = excelEngine.Excel;
|
IApplication application = excelEngine.Excel;
|
||||||
@@ -109,33 +109,28 @@ public class ExcelGeneratorController(IWzHeaderService wzHeaderService, IMateria
|
|||||||
boldFontStyle.Font.Bold = true;
|
boldFontStyle.Font.Bold = true;
|
||||||
|
|
||||||
var mainHeaders = new List<string>
|
var mainHeaders = new List<string>
|
||||||
{ "Numer zamówienia Meyle", "Meyle Numer", "Ilość w dostawie", "Numer Palety", "Nr Wz", "Nr Partii" };
|
{ "", "ColliNr", "Magneti Marelli Sales nr", "Engineer number", "Quantity", "Order nr", "Supplier Comments" };
|
||||||
|
|
||||||
worksheet["B1"].Value = "Packing List";
|
|
||||||
worksheet["B1"].CellStyle = boldFontStyle;
|
|
||||||
|
|
||||||
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["B3"].CellStyle = boldFontStyle;
|
||||||
|
|
||||||
worksheet["D3"].Value = "FA KROSNO";
|
worksheet["A4"].Value = "Packing List nr";
|
||||||
worksheet["D3"].CellStyle = boldFontStyle;
|
worksheet["A4"].CellStyle = boldFontStyle;
|
||||||
|
|
||||||
worksheet["B4"].Value = "Packing List nr";
|
worksheet["B4"].Value = string.Join(", ", wzHeader.WzRowsMeyle.Select(x => x.WzNumber).Distinct());
|
||||||
worksheet["B4"].CellStyle = boldFontStyle;
|
worksheet["B4"].CellStyle = boldFontStyle;
|
||||||
|
|
||||||
worksheet["B6"].Value = "Related delivery note";
|
worksheet["A6"].Value = "Date";
|
||||||
worksheet["B6"].CellStyle = boldFontStyle;
|
worksheet["A6"].CellStyle = boldFontStyle;
|
||||||
|
|
||||||
worksheet["D6"].Value = string.Join(", ", wzHeader.WzRowsMeyle.Select(x => x.WzNumber).Distinct());
|
worksheet["B6"].DateTime = materialTransaction?.CreateDate ?? DateTime.Now;
|
||||||
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;
|
int currentRow = 12;
|
||||||
|
|
||||||
@@ -148,14 +143,15 @@ public class ExcelGeneratorController(IWzHeaderService wzHeaderService, IMateria
|
|||||||
|
|
||||||
currentRow++;
|
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[$"A{currentRow}"].Text = "MIX";
|
||||||
worksheet.Range[$"B{currentRow}"].Text = wzRow.ItemNumber;
|
worksheet.Range[$"B{currentRow}"].Number = (double)wzRow.PalletNumber!;
|
||||||
worksheet.Range[$"C{currentRow}"].Number = (double)wzRow.Quantity!;
|
worksheet.Range[$"C{currentRow}"].Text = wzRow.ItemNumber;
|
||||||
worksheet.Range[$"D{currentRow}"].Number = (double)wzRow.PalletNumber!;
|
worksheet.Range[$"D{currentRow}"].Text = wzRow.EngineerNumber;
|
||||||
worksheet.Range[$"E{currentRow}"].Text = wzRow.WzNumber;
|
worksheet.Range[$"E{currentRow}"].Number = (double)wzRow.Quantity!;
|
||||||
worksheet.Range[$"F{currentRow}"].Text = wzRow.PartNumber;
|
worksheet.Range[$"F{currentRow}"].Text = wzRow.OrderNumber;
|
||||||
|
worksheet.Range[$"G{currentRow}"].Text = wzRow.WzNumber;
|
||||||
|
|
||||||
currentRow++;
|
currentRow++;
|
||||||
}
|
}
|
||||||
@@ -169,7 +165,7 @@ public class ExcelGeneratorController(IWzHeaderService wzHeaderService, IMateria
|
|||||||
workbook.SaveAs(stream);
|
workbook.SaveAs(stream);
|
||||||
stream.Position = 0;
|
stream.Position = 0;
|
||||||
|
|
||||||
SendEmail(stream, wzHeader);
|
SendEmail(stream, wzHeader, "Marelli Magneti");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string GetColumnLetter(int columnIndex)
|
private static string GetColumnLetter(int columnIndex)
|
||||||
@@ -184,7 +180,7 @@ public class ExcelGeneratorController(IWzHeaderService wzHeaderService, IMateria
|
|||||||
return columnName;
|
return columnName;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SendEmail(MemoryStream stream, WzHeaderDto wzHeader)
|
private void SendEmail(MemoryStream stream, WzHeaderDto wzHeader, string client)
|
||||||
{
|
{
|
||||||
IConfigurationSection smtpSettings = configuration.GetSection("EmailSettings");
|
IConfigurationSection smtpSettings = configuration.GetSection("EmailSettings");
|
||||||
string smtpHost = smtpSettings["SmtpServer"] ?? string.Empty;
|
string smtpHost = smtpSettings["SmtpServer"] ?? string.Empty;
|
||||||
@@ -194,9 +190,9 @@ public class ExcelGeneratorController(IWzHeaderService wzHeaderService, IMateria
|
|||||||
string fromEmail = smtpSettings["SenderEmail"] ?? string.Empty;
|
string fromEmail = smtpSettings["SenderEmail"] ?? string.Empty;
|
||||||
List<string> toEmail = wzHeader.EmailAddresses?.Split(',')?.ToList() ??
|
List<string> toEmail = wzHeader.EmailAddresses?.Split(',')?.ToList() ??
|
||||||
(smtpSettings["RecipientEmail"] ?? string.Empty).Split(',').ToList();
|
(smtpSettings["RecipientEmail"] ?? string.Empty).Split(',').ToList();
|
||||||
string subject = "MEYLE: Packing List";
|
string subject = $"{client}: Packing List";
|
||||||
string body =
|
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();
|
using var mailMessage = new MailMessage();
|
||||||
mailMessage.From = new MailAddress(fromEmail);
|
mailMessage.From = new MailAddress(fromEmail);
|
||||||
@@ -204,7 +200,7 @@ public class ExcelGeneratorController(IWzHeaderService wzHeaderService, IMateria
|
|||||||
mailMessage.Body = body;
|
mailMessage.Body = body;
|
||||||
mailMessage.IsBodyHtml = false;
|
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"));
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"));
|
||||||
|
|
||||||
toEmail.ForEach(x => mailMessage.To.Add(x));
|
toEmail.ForEach(x => mailMessage.To.Add(x));
|
||||||
|
|||||||
@@ -259,7 +259,7 @@
|
|||||||
private async Task ExportXls()
|
private async Task ExportXls()
|
||||||
{
|
{
|
||||||
int count = WzRowsMarelli.Count(x => x.PalletNumber == null);
|
int count = WzRowsMarelli.Count(x => x.PalletNumber == null);
|
||||||
|
_isValid = true;
|
||||||
_isValid = count == 0;
|
_isValid = count == 0;
|
||||||
_isValid = _isValid && !string.IsNullOrWhiteSpace(EmailAddresses);
|
_isValid = _isValid && !string.IsNullOrWhiteSpace(EmailAddresses);
|
||||||
|
|
||||||
|
|||||||
@@ -8,4 +8,5 @@ public class WzClientDto
|
|||||||
public DateTime CreatedDate { get; set; }
|
public DateTime CreatedDate { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public string ShortName { get; set; }
|
public string ShortName { get; set; }
|
||||||
|
public string? LogoBase64 { get; set; }
|
||||||
}
|
}
|
||||||
@@ -8,4 +8,5 @@ public class WzHeaderDto
|
|||||||
public string? EmailAddresses { get; set; }
|
public string? EmailAddresses { get; set; }
|
||||||
public string? WzNumbers { get; set; }
|
public string? WzNumbers { get; set; }
|
||||||
public IEnumerable<WzRowMeyleDto> WzRowsMeyle { get; set; } = new List<WzRowMeyleDto>();
|
public IEnumerable<WzRowMeyleDto> WzRowsMeyle { get; set; } = new List<WzRowMeyleDto>();
|
||||||
|
public IEnumerable<WzRowMarelliDto> WzRowsMarelli { get; set; } = new List<WzRowMarelliDto>();
|
||||||
}
|
}
|
||||||
@@ -8,4 +8,5 @@ public class WzClient
|
|||||||
public DateTime CreatedDate { get; set; }
|
public DateTime CreatedDate { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public string ShortName { get; set; }
|
public string ShortName { get; set; }
|
||||||
|
public byte[]? Logo { get; set; }
|
||||||
}
|
}
|
||||||
@@ -20,7 +20,8 @@ namespace SytelineSaAppEfDataModel
|
|||||||
CreateMap<UserName, UserNameDto>().ReverseMap();
|
CreateMap<UserName, UserNameDto>().ReverseMap();
|
||||||
CreateMap<EdiUser, EdiUserDto>().ReverseMap();
|
CreateMap<EdiUser, EdiUserDto>().ReverseMap();
|
||||||
CreateMap<MaterialTransaction, MaterialTransactionDto>().ReverseMap();
|
CreateMap<MaterialTransaction, MaterialTransactionDto>().ReverseMap();
|
||||||
CreateMap<WzClient, WzClientDto>().ReverseMap();
|
CreateMap<WzClient, WzClientDto>().ForMember(dest => dest.LogoBase64,
|
||||||
|
opt => opt.MapFrom(src => src.Logo != null ? Convert.ToBase64String(src.Logo) : null)).ReverseMap();
|
||||||
CreateMap<WzHeader, WzHeaderDto>().ReverseMap();
|
CreateMap<WzHeader, WzHeaderDto>().ReverseMap();
|
||||||
CreateMap<WzRowMeyle, WzRowMeyleDto>().ReverseMap();
|
CreateMap<WzRowMeyle, WzRowMeyleDto>().ReverseMap();
|
||||||
CreateMap<ItemCust, ItemCustDto>().ReverseMap();
|
CreateMap<ItemCust, ItemCustDto>().ReverseMap();
|
||||||
|
|||||||
@@ -8,5 +8,6 @@ public interface IWzHeaderService
|
|||||||
Task<IEnumerable<WzHeaderDto>> GetByCustomerNumber(string customerNumber, int customerSequence);
|
Task<IEnumerable<WzHeaderDto>> GetByCustomerNumber(string customerNumber, int customerSequence);
|
||||||
Task CreateHeader(WzHeaderDto wzHeader);
|
Task CreateHeader(WzHeaderDto wzHeader);
|
||||||
Task<WzHeaderDto> GetById(Guid id);
|
Task<WzHeaderDto> GetById(Guid id);
|
||||||
|
Task<WzHeaderDto> GetByIdMarelli(Guid id);
|
||||||
Task AddEmailsToWzHeader(Guid id, string emailAddresses);
|
Task AddEmailsToWzHeader(Guid id, string emailAddresses);
|
||||||
}
|
}
|
||||||
@@ -38,6 +38,18 @@ public class WzHeaderService(SytelineSaAppDbContext context, IMapper mapper) : I
|
|||||||
return wzHeader;
|
return wzHeader;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<WzHeaderDto> GetByIdMarelli(Guid id)
|
||||||
|
{
|
||||||
|
var entity = await context.WzHeaders.FindAsync(id);
|
||||||
|
var items = await context.WzRowsMareli.Where(x => x.FKHeader == id).Select(x => mapper.Map<WzRowMarelliDto>(x))
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
WzHeaderDto wzHeader = mapper.Map<WzHeaderDto>(entity);
|
||||||
|
wzHeader.WzRowsMarelli = items;
|
||||||
|
|
||||||
|
return wzHeader;
|
||||||
|
}
|
||||||
|
|
||||||
public async Task AddEmailsToWzHeader(Guid id, string emailAddresses)
|
public async Task AddEmailsToWzHeader(Guid id, string emailAddresses)
|
||||||
{
|
{
|
||||||
var entity = await context.WzHeaders.FindAsync(id);
|
var entity = await context.WzHeaders.FindAsync(id);
|
||||||
|
|||||||
@@ -959,6 +959,10 @@ namespace SytelineSaAppEfDataModel
|
|||||||
.HasColumnName("ShortName")
|
.HasColumnName("ShortName")
|
||||||
.HasMaxLength(30)
|
.HasMaxLength(30)
|
||||||
.IsRequired(false);
|
.IsRequired(false);
|
||||||
|
|
||||||
|
entity.Property(e => e.Logo)
|
||||||
|
.HasColumnType("VARBINARY(MAX)")
|
||||||
|
.IsRequired(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity<WzRowMeyle>(entity =>
|
modelBuilder.Entity<WzRowMeyle>(entity =>
|
||||||
|
|||||||
Reference in New Issue
Block a user