Version 3.3.6: Anspassungen Excel Verarbeitung, CREWD / PASD, Mail-Subject und kleinere Verbesserungen

This commit is contained in:
Daniel Schick 2017-01-19 11:01:23 +00:00
parent b4a4f1167b
commit 48864ded81
11 changed files with 2380 additions and 2087 deletions

View File

@ -0,0 +1,26 @@
PRINT N'Altering [dbo].[LADG]...';
GO
ALTER TABLE [dbo].[LADG] ALTER COLUMN [CargoCodeNST] NVARCHAR (255) NULL;
GO
PRINT N'Altering [dbo].[Waste]...';
GO
ALTER TABLE [dbo].[Waste] ALTER COLUMN [WasteType] INT NULL;
GO
PRINT N'Altering [dbo].[CREW]...';
GO
ALTER TABLE [dbo].[CREW] ADD [IsDeparture] BIT NULL;
GO
UPDATE [dbo].[CREW] SET IsDeparture = 0;
GO
PRINT N'Altering [dbo].[PAS]...';
GO
ALTER TABLE [dbo].[PAS] ADD [IsDeparture] BIT NULL;
GO
UPDATE [dbo].[PAS] SET IsDeparture = 0;
GO

View File

@ -62,8 +62,8 @@ namespace bsmd.ExcelReadService
string messageId = "";
string attachmentLocalPath = null;
string mailSender = "";
string receiptSubject = "NSW Sheet Service Status INFO";
string receiptSubject = "NSW Sheet Service Status INFO";
string mailSubject = "";
using (BSMDPopClient bsmdPopClient = new BSMDPopClient())
{
@ -84,7 +84,7 @@ namespace bsmd.ExcelReadService
// --- END --------------- TEST
// check and download next e-Mail, saving attachment
while (bsmdPopClient.ReceiveSingleMail(out attachmentLocalPath, out messageId, out mailSender))
while (bsmdPopClient.ReceiveSingleMail(out attachmentLocalPath, out messageId, out mailSender, out mailSubject))
{
bool readResult;
@ -141,10 +141,11 @@ namespace bsmd.ExcelReadService
string shipname = DBManager.Instance.GetShipNameFromCore(messageCore);
if (shipname.IsNullOrEmpty()) shipname = messageCore.IMO;
string subject = string.Format("{0}: {1}", Properties.Settings.Default.SendEMailSubject, shipname);
if(mailSubject.IsNullOrEmpty())
mailSubject = string.Format("{0}: {1}", Properties.Settings.Default.SendEMailSubject, shipname);
// send reply sheet back to sender
BSMDMail.SendNSWReportWithAttachments(subject, localConfirmationSheets, mailSender);
BSMDMail.SendNSWReportWithAttachments(mailSubject, localConfirmationSheets, mailSender);
}
}

View File

@ -30,6 +30,10 @@ namespace bsmd.ExcelReadService
private Dictionary<string, Name> _nameDict;
internal enum ReadState { NONE, OK, WARN, FAIL };
internal enum CountryMode { NONE, DE, DK };
private CountryMode _countryMode = CountryMode.NONE;
public ExcelReader(string filePath)
{
@ -48,8 +52,13 @@ namespace bsmd.ExcelReadService
internal Confirmation Conf { get; set; }
internal CountryMode Mode { get { return _countryMode; } }
internal void SetConfirmation(System.Collections.Specialized.StringCollection templatePaths)
{
if (templatePaths == Properties.Settings.Default.ConfirmationDE) _countryMode = CountryMode.DE;
if (templatePaths == Properties.Settings.Default.ConfirmationDK) _countryMode = CountryMode.DK;
this.Conf = new Confirmation(templatePaths, _excelApp);
}
@ -523,6 +532,17 @@ namespace bsmd.ExcelReadService
return result;
}
internal double ReadNumberDefaultZero(string lookup)
{
double? result = this.ReadNumber(lookup);
if(!result.HasValue)
{
result = 0;
this.Conf.ConfirmNumber(lookup, 0, ReadState.WARN);
}
return result.Value;
}
internal bool? ReadBoolean(string lookup)
{
string val = this.ReadText(lookup);

File diff suppressed because it is too large Load Diff

View File

@ -94,6 +94,8 @@ namespace bsmd.database
[MaxLength(100)]
public string CrewMemberDuty { get; set; }
public bool IsDeparture { get; set; }
public string Identifier { get; set; }
#endregion
@ -125,13 +127,14 @@ namespace bsmd.database
scmd.Parameters.AddWithNullableValue("@P10", this.CrewMemberVisaNumber);
scmd.Parameters.AddWithNullableValue("@P11", this.CrewMemberDuty);
scmd.Parameters.AddWithNullableValue("@P12", this.Identifier);
scmd.Parameters.AddWithValue("@P13", this.IsDeparture);
if (this.IsNew)
{
scmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, CrewMemberLastName, CrewMemberFirstName, " +
"CrewMemberPlaceOfBirth, CrewMemberDateOfBirth, CrewMemberGender, CrewMemberNationality,CrewMemberIdentityDocumentType, " +
"CrewMemberIdentityDocumentId, CrewMemberVisaNumber, CrewMemberDuty, Identifier) " +
"VALUES ( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12 )", this.Tablename);
"CrewMemberIdentityDocumentId, CrewMemberVisaNumber, CrewMemberDuty, Identifier, IsDeparture) " +
"VALUES ( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, @P13 )", this.Tablename);
}
else
{
@ -139,7 +142,7 @@ namespace bsmd.database
scmd.CommandText = string.Format("UPDATE {0} SET CrewMemberLastName = @P2, CrewMemberFirstName = @P3, " +
"CrewMemberPlaceOfBirth = @P4, CrewMemberDateOfBirth = @P5, CrewMemberGender = @P6, CrewMemberNationality = @P7, "+
"CrewMemberIdentityDocumentType = @P8, CrewMemberIdentityDocumentId = @P9, CrewMemberVisaNumber = @P10, " +
"CrewMemberDuty = @P11 WHERE Id = @ID", this.Tablename);
"CrewMemberDuty = @P11, IsDeparture = @P13 WHERE Id = @ID", this.Tablename);
}
}
@ -147,17 +150,17 @@ namespace bsmd.database
{
string query = string.Format("SELECT Id, CrewMemberLastName, CrewMemberFirstName, CrewMemberPlaceOfBirth, " +
"CrewMemberDateOfBirth, CrewMemberGender, CrewMemberNationality, CrewMemberIdentityDocumentType, CrewMemberIdentityDocumentId, " +
"CrewMemberVisaNumber, CrewMemberDuty, Identifier FROM {0}", this.Tablename);
"CrewMemberVisaNumber, CrewMemberDuty, Identifier, IsDeparture FROM {0}", this.Tablename);
switch (filter)
{
case Message.LoadFilter.MESSAGEHEADER:
query += " WHERE MessageHeaderId = @MHID";
query += " WHERE IsDeparture = 0 AND MessageHeaderId = @MHID";
((SqlCommand)cmd).Parameters.AddWithValue("@MHID", criteria[0]);
break;
case Message.LoadFilter.ALL:
default:
query += " WHERE IsDeparture = 0";
break;
}
@ -184,6 +187,7 @@ namespace bsmd.database
if (!reader.IsDBNull(9)) crew.CrewMemberVisaNumber = reader.GetString(9);
if (!reader.IsDBNull(10)) crew.CrewMemberDuty = reader.GetString(10);
if (!reader.IsDBNull(11)) crew.Identifier = reader.GetString(11);
if (!reader.IsDBNull(12)) crew.IsDeparture = reader.GetBoolean(12);
result.Add(crew);
}
reader.Close();
@ -193,4 +197,36 @@ namespace bsmd.database
#endregion
}
#region CREWD
/// <summary>
/// Helper class to model / filter crew members on departure
/// </summary>
public class CREWD : CREW
{
public override void PrepareLoadCommand(System.Data.IDbCommand cmd, Message.LoadFilter filter, params object[] criteria)
{
string query = string.Format("SELECT Id, CrewMemberLastName, CrewMemberFirstName, CrewMemberPlaceOfBirth, " +
"CrewMemberDateOfBirth, CrewMemberGender, CrewMemberNationality, CrewMemberIdentityDocumentType, CrewMemberIdentityDocumentId, " +
"CrewMemberVisaNumber, CrewMemberDuty, Identifier, IsDeparture FROM {0}", this.Tablename);
switch (filter)
{
case Message.LoadFilter.MESSAGEHEADER:
query += " WHERE IsDeparture = 1 AND MessageHeaderId = @MHID";
((SqlCommand)cmd).Parameters.AddWithValue("@MHID", criteria[0]);
break;
case Message.LoadFilter.ALL:
default:
query += " WHERE IsDeparture = 1";
break;
}
cmd.CommandText = query;
}
}
#endregion
}

View File

@ -54,7 +54,9 @@ namespace bsmd.database
NotificationClass.ATA,
NotificationClass.ATD,
NotificationClass.AGNT,
NotificationClass.STO
NotificationClass.STO,
NotificationClass.CREWD,
NotificationClass.PASD
});
#endregion
@ -94,7 +96,9 @@ namespace bsmd.database
HAZA, // 25
HAZD,
AGNT,
STO // DK - only
STO, // DK - only
CREWD, // DK - only
PASD // DK - only
}
public enum MessageStatus
@ -202,7 +206,7 @@ namespace bsmd.database
/// <summary>
/// Vorwärts-Referenzen auf die von diesem Header-Element abhängigen speziellen Nachrichten-Datensätzen
/// Folgende Objekte können pro Nachricht n-fach vorkommen
/// BRKA, BRKD, LADG, CREW, PAS, SERV, TOWA, TOWD, STO
/// BRKA, BRKD, LADG, CREW, PAS, SERV, TOWA, TOWD, STO, CREWD, PASD
/// sonst hat die Liste immer ein Element
/// </summary>
public List<DatabaseEntity> Elements { get { return this.elements; } }
@ -460,7 +464,9 @@ namespace bsmd.database
case NotificationClass.BKRD: return 5;
case NotificationClass.LADG: return 36;
case NotificationClass.CREW: return 40;
case NotificationClass.CREWD: return 40;
case NotificationClass.PAS: return 30;
case NotificationClass.PASD: return 30;
case NotificationClass.TOWA: return 1;
case NotificationClass.TOWD: return 1;
case NotificationClass.STO: return 10;

View File

@ -106,6 +106,9 @@ namespace bsmd.database
public string Identifier { get; set; }
public bool IsDeparture { get; set; }
public override string Subtitle
{
get
@ -137,13 +140,14 @@ namespace bsmd.database
scmd.Parameters.AddWithNullableValue("@P12", this.PassengerPortOfDisembarkation);
scmd.Parameters.AddWithNullableValue("@P13", this.PassengerInTransit);
scmd.Parameters.AddWithNullableValue("@P14", this.Identifier);
scmd.Parameters.AddWithValue("@P15", this.IsDeparture);
if (this.IsNew)
{
scmd.CommandText = string.Format("INSERT INTO {0} (MessageHeaderId, PassengerLastName, PassengerFirstName, " +
"PassengerPlaceOfBirth, PassengerDateOfBirth, PassengerGender, PassengerNationality, PassengerIdentityDocumentType, " +
"PassengerIdentityDocumentId, PassengerVisaNumber, PassengerPortOfEmbarkation, PassengerPortOfDisembarkation," +
"PassengerInTransit, Identifier) VALUES ( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, @P13, @P14 )",
"PassengerInTransit, Identifier, IsDeparture) VALUES ( @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, @P13, @P14, @P15 )",
this.Tablename);
}
else
@ -153,7 +157,7 @@ namespace bsmd.database
"PassengerPlaceOfBirth = @P4, PassengerDateOfBirth = @P5, PassengerGender = @P6," +
"PassengerNationality = @P7, PassengerIdentityDocumentType = @P8, PassengerIdentityDocumentId = @P9, " +
"PassengerVisaNumber = @P10, PassengerPortOfEmbarkation = @P11, PassengerPortOfDisembarkation = @P12, " +
"PassengerInTransit = @P13 WHERE Id = @ID", this.Tablename);
"PassengerInTransit = @P13, IsDeparture = @P15 WHERE Id = @ID", this.Tablename);
}
}
@ -161,18 +165,18 @@ namespace bsmd.database
{
string query = string.Format("SELECT Id, PassengerLastName, PassengerFirstName, PassengerPlaceOfBirth, " +
"PassengerDateOfBirth, PassengerGender, PassengerNationality, PassengerIdentityDocumentType, PassengerIdentityDocumentId, " +
"PassengerVisaNumber, PassengerPortOfEmbarkation, PassengerPortOfDisembarkation, PassengerInTransit, Identifier FROM {0}",
"PassengerVisaNumber, PassengerPortOfEmbarkation, PassengerPortOfDisembarkation, PassengerInTransit, Identifier, IsDeparture FROM {0}",
this.Tablename);
switch (filter)
{
case Message.LoadFilter.MESSAGEHEADER:
query += "WHERE MessageHeaderId = @MHID";
query += " WHERE IsDeparture = 0 AND MessageHeaderId = @MHID";
((SqlCommand)cmd).Parameters.AddWithValue("@MHID", criteria[0]);
break;
case Message.LoadFilter.ALL:
default:
query += " WHERE IsDeparture = 0";
break;
}
@ -201,6 +205,7 @@ namespace bsmd.database
if (!reader.IsDBNull(11)) pas.PassengerPortOfDisembarkation = reader.GetString(11);
if (!reader.IsDBNull(12)) pas.PassengerInTransit = reader.GetBoolean(12);
if (!reader.IsDBNull(13)) pas.Identifier = reader.GetString(13);
if (!reader.IsDBNull(14)) pas.IsDeparture = reader.GetBoolean(14);
result.Add(pas);
}
reader.Close();
@ -223,4 +228,34 @@ namespace bsmd.database
#endregion
}
#region class PASD
public class PASD : PAS
{
public override void PrepareLoadCommand(System.Data.IDbCommand cmd, Message.LoadFilter filter, params object[] criteria)
{
string query = string.Format("SELECT Id, PassengerLastName, PassengerFirstName, PassengerPlaceOfBirth, " +
"PassengerDateOfBirth, PassengerGender, PassengerNationality, PassengerIdentityDocumentType, PassengerIdentityDocumentId, " +
"PassengerVisaNumber, PassengerPortOfEmbarkation, PassengerPortOfDisembarkation, PassengerInTransit, Identifier, IsDeparture FROM {0}",
this.Tablename);
switch (filter)
{
case Message.LoadFilter.MESSAGEHEADER:
query += " WHERE IsDeparture = 1 AND MessageHeaderId = @MHID";
((SqlCommand)cmd).Parameters.AddWithValue("@MHID", criteria[0]);
break;
case Message.LoadFilter.ALL:
default:
query += " WHERE IsDeparture = 1";
break;
}
cmd.CommandText = query;
}
}
#endregion
}

View File

@ -2,6 +2,6 @@
[assembly: AssemblyCompany("Informatikbüro Daniel Schick")]
[assembly: AssemblyProduct("BSMD NSW interface")]
[assembly: AssemblyInformationalVersion("3.3.5")]
[assembly: AssemblyInformationalVersion("3.3.6")]
[assembly: AssemblyCopyright("Copyright © 2014-2016 Informatikbüro Daniel Schick. All rights reserved.")]
[assembly: AssemblyTrademark("")]

View File

@ -1,4 +1,4 @@
using System.Reflection;
[assembly: AssemblyVersion("3.3.5.*")]
[assembly: AssemblyVersion("3.3.6.*")]

View File

@ -47,9 +47,37 @@ namespace bsmd.database
}
}
}
[ShowReport]
public string WasteTypeDisplayV4
{
get
{
if (!WasteType.HasValue) return "";
switch(WasteType.Value)
{
case 1100: return "Oily residues (sludge)";
case 1200: return "Oily bilge water";
case 1300: return "Waste oil - others (specify)";
case 2100: return "Food waste";
case 2200: return "Plastic";
case 2300: return "Domestic wastes";
case 2311: return "Cooking oil";
case 2308: return "Incinerator ashes";
case 2313: return "Operational wastes";
case 2309: return "Animal carcass(es)";
case 3000: return "Sewage";
case 5100: return "Cargo residues - Marpol Annex I";
case 5200: return "Cargo residues - Marpol Annex II";
case 5300: return "Cargo residues - Marpol Annex V";
default: return "Others (specify)";
}
}
}
[Validation(ValidationCode.NOT_NULL)]
public byte? WasteType { get; set; }
public int? WasteType { get; set; }
[ShowReport]
[Validation(ValidationCode.NOT_NULL)]
@ -145,7 +173,7 @@ namespace bsmd.database
Waste waste = new Waste();
waste.id = reader.GetGuid(0);
if (!reader.IsDBNull(1)) waste.WasteType = reader.GetByte(1);
if (!reader.IsDBNull(1)) waste.WasteType = reader.GetInt32(1);
if (!reader.IsDBNull(2)) waste.WasteDescription = reader.GetString(2);
if (!reader.IsDBNull(3)) waste.WasteDisposalAmount_MTQ = (float) reader.GetDouble(3);
if (!reader.IsDBNull(4)) waste.WasteCapacity_MTQ = (float) reader.GetDouble(4);

View File

@ -54,11 +54,12 @@ namespace bsmd.email
public bool IsConnected { get { return this._connected; } }
public bool ReceiveSingleMail(out string attachmentLocalFile, out string messageId, out string sender)
public bool ReceiveSingleMail(out string attachmentLocalFile, out string messageId, out string sender, out string subject)
{
attachmentLocalFile = null;
messageId = null;
sender = null;
subject = null;
if (!_connected) return false;
@ -73,6 +74,7 @@ namespace bsmd.email
sender = mailMessage.Headers.From.MailAddress.Address;
messageId = mailMessage.Headers.MessageId;
subject = mailMessage.Headers.Subject;
foreach(MessagePart part in mailMessage.FindAllAttachments())
{