103 lines
3.9 KiB
C#
103 lines
3.9 KiB
C#
// Copyright (c) 2017-present schick Informatik
|
|
// Description: Former ReportService, manager class handles creation of a PDF document
|
|
// from a set of report classes
|
|
//
|
|
|
|
using System;
|
|
using System.Text;
|
|
using System.Collections.Generic;
|
|
|
|
using log4net;
|
|
using MigraDoc.DocumentObjectModel;
|
|
|
|
using bsmd.database;
|
|
|
|
namespace ENI2.Report
|
|
{
|
|
class ReportManager
|
|
{
|
|
private readonly ILog _log = LogManager.GetLogger(typeof(ReportManager));
|
|
|
|
public bool Create(string filePath, MessageCore core, List<Message.NotificationClass> notificationClasses, out string readMessage)
|
|
{
|
|
bool result = false;
|
|
readMessage = "";
|
|
if(notificationClasses.Count == 0)
|
|
{
|
|
readMessage = "no classes selected";
|
|
return result;
|
|
}
|
|
|
|
List<Message> messages = DBManager.Instance.GetMessagesForCore(core, DBManager.MessageLoad.ALL);
|
|
List<Message> reportMessages = new List<Message>();
|
|
messages.Sort(new ReportMessageComparer());
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
foreach (Message aMessage in messages)
|
|
{
|
|
if (aMessage.Elements.Count == 0) continue; // don't output empty list classes
|
|
if (notificationClasses.Contains(aMessage.MessageNotificationClass))
|
|
{
|
|
reportMessages.Add(aMessage);
|
|
|
|
sb.Append(aMessage.MessageNotificationClassDisplay);
|
|
sb.Append("_");
|
|
}
|
|
}
|
|
if (sb.Length > 0) sb.Remove(sb.Length - 1, 1);
|
|
string classes = sb.ToString();
|
|
|
|
try
|
|
{
|
|
string etaDisplay = "";
|
|
foreach (Message message in reportMessages)
|
|
{
|
|
if(message.MessageNotificationClass == Message.NotificationClass.NOA_NOD)
|
|
{
|
|
if (message.Elements[0] is NOA_NOD noa_nod)
|
|
{
|
|
if (core.IsTransit && noa_nod.ETAToKielCanal.HasValue)
|
|
etaDisplay = noa_nod.ETAToKielCanal.Value.ToLocalTime().ToString();
|
|
if (!core.IsTransit && noa_nod.ETAToPortOfCall.HasValue)
|
|
etaDisplay = noa_nod.ETAToPortOfCall.Value.ToLocalTime().ToString();
|
|
}
|
|
}
|
|
}
|
|
|
|
Dictionary<string, string> coverInfos = new Dictionary<string, string>();
|
|
coverInfos.Add("Ship", DBManager.Instance.GetShipNameFromCore(core));
|
|
coverInfos.Add("ETA", etaDisplay);
|
|
coverInfos.Add("Port of call", core.Portname);
|
|
coverInfos.Add("Visit-ID", core.DisplayId);
|
|
coverInfos.Add("Class", classes);
|
|
|
|
Document migraDocument = ReportDocument.CreateSingleClassDocument(core, coverInfos, classes, ReportingParty.CurrentReportingParty);
|
|
|
|
// print messages to document
|
|
foreach (Message message in reportMessages)
|
|
{
|
|
ReportDocument.AddNSWMessageParagraph(migraDocument, message);
|
|
}
|
|
|
|
ReportDocument.RenderDocument(migraDocument, filePath);
|
|
_log.InfoFormat("Created PDF document: {0}", filePath);
|
|
result = true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
readMessage += ex.Message;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
internal class ReportMessageComparer : IComparer<bsmd.database.Message>
|
|
{
|
|
public int Compare(Message x, Message y)
|
|
{
|
|
return Message.ANSWSortList.IndexOf(x.MessageNotificationClass).CompareTo(Message.ANSWSortList.IndexOf(y.MessageNotificationClass));
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|