Compare commits
3 Commits
fa696172aa
...
6b414deb61
| Author | SHA1 | Date | |
|---|---|---|---|
| 6b414deb61 | |||
| 7d53d742a9 | |||
| 412e013799 |
@ -837,8 +837,7 @@ namespace ENI2
|
|||||||
private ValidationResult ValidateCore(List<Message> messagesSnapshot)
|
private ValidationResult ValidateCore(List<Message> messagesSnapshot)
|
||||||
{
|
{
|
||||||
List<MessageViolation> vViolations = new List<MessageViolation>();
|
List<MessageViolation> vViolations = new List<MessageViolation>();
|
||||||
List<MessageError> vErrors = new List<MessageError>();
|
List<MessageError> vErrors = new List<MessageError>();
|
||||||
Dictionary<Message, MessageValidationCounts> counts = new Dictionary<Message, MessageValidationCounts>();
|
|
||||||
|
|
||||||
RuleEngine ruleEngine = new RuleEngine();
|
RuleEngine ruleEngine = new RuleEngine();
|
||||||
foreach (Message aMessage in messagesSnapshot)
|
foreach (Message aMessage in messagesSnapshot)
|
||||||
@ -847,15 +846,7 @@ namespace ENI2
|
|||||||
|
|
||||||
List<MessageError> errors = new List<MessageError>();
|
List<MessageError> errors = new List<MessageError>();
|
||||||
List<MessageViolation> violations = new List<MessageViolation>();
|
List<MessageViolation> violations = new List<MessageViolation>();
|
||||||
ruleEngine.ValidateMessage(aMessage, out errors, out violations);
|
ruleEngine.ValidateMessage(aMessage, out errors, out violations);
|
||||||
|
|
||||||
MessageValidationCounts messageCounts = new MessageValidationCounts
|
|
||||||
{
|
|
||||||
ErrorCount = errors.Count > 0 ? (int?)errors.Count : null,
|
|
||||||
ViolationCount = violations.Count > 0 ? (int?)violations.Count : null,
|
|
||||||
PositionViolationCount = violations.Count > 0 ? (int?)violations.Count(v => !v.Identifier.IsNullOrEmpty()) : null
|
|
||||||
};
|
|
||||||
counts[aMessage] = messageCounts;
|
|
||||||
|
|
||||||
string messageGroup = this.MessageGroupForMessage(aMessage);
|
string messageGroup = this.MessageGroupForMessage(aMessage);
|
||||||
|
|
||||||
@ -1267,7 +1258,7 @@ namespace ENI2
|
|||||||
case 401:
|
case 401:
|
||||||
if (waste.WasteAmountRetained_MTQ > waste.WasteCapacity_MTQ * 0.5)
|
if (waste.WasteAmountRetained_MTQ > waste.WasteCapacity_MTQ * 0.5)
|
||||||
{
|
{
|
||||||
MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Acc. to EU Regulation 2022/89 the amount retained on board is noticeably", null, "WAS", waste.Identifier, "WAS");
|
MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Acc. to EU Regulation 2022/89 the amount retained on board is noticeably", null, "Waste", waste.Identifier, was.Tablename);
|
||||||
mv.MessageGroupName = wasMessageGroup;
|
mv.MessageGroupName = wasMessageGroup;
|
||||||
vViolations.Add(mv);
|
vViolations.Add(mv);
|
||||||
}
|
}
|
||||||
@ -1285,7 +1276,7 @@ namespace ENI2
|
|||||||
case 511:
|
case 511:
|
||||||
if (waste.WasteAmountRetained_MTQ > waste.WasteCapacity_MTQ * 0.25)
|
if (waste.WasteAmountRetained_MTQ > waste.WasteCapacity_MTQ * 0.25)
|
||||||
{
|
{
|
||||||
MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Acc. to EU Regulation 2022/89 the amount retained on board is noticeably", null, "WAS", waste.Identifier, "WAS");
|
MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Acc. to EU Regulation 2022/89 the amount retained on board is noticeably", null, "Waste", waste.Identifier, was.Tablename);
|
||||||
mv.MessageGroupName = wasMessageGroup;
|
mv.MessageGroupName = wasMessageGroup;
|
||||||
vViolations.Add(mv);
|
vViolations.Add(mv);
|
||||||
}
|
}
|
||||||
@ -1294,7 +1285,7 @@ namespace ENI2
|
|||||||
case 602:
|
case 602:
|
||||||
if (waste.WasteAmountRetained_MTQ > waste.WasteCapacity_MTQ * 0.75)
|
if (waste.WasteAmountRetained_MTQ > waste.WasteCapacity_MTQ * 0.75)
|
||||||
{
|
{
|
||||||
MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Acc. to EU Regulation 2022/89 the amount retained on board is noticeably", null, "WAS", waste.Identifier, "WAS");
|
MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Acc. to EU Regulation 2022/89 the amount retained on board is noticeably", null, "Waste", waste.Identifier, was.Tablename);
|
||||||
mv.MessageGroupName = wasMessageGroup;
|
mv.MessageGroupName = wasMessageGroup;
|
||||||
vViolations.Add(mv);
|
vViolations.Add(mv);
|
||||||
}
|
}
|
||||||
@ -1315,7 +1306,7 @@ namespace ENI2
|
|||||||
case 105:
|
case 105:
|
||||||
if (waste.WasteAmountRetained_MTQ > waste.WasteCapacity_MTQ * 0.25)
|
if (waste.WasteAmountRetained_MTQ > waste.WasteCapacity_MTQ * 0.25)
|
||||||
{
|
{
|
||||||
MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Acc. to EU Regulation 2022/89 the amount retained on board is noticeably", null, "WAS", waste.Identifier, "WAS");
|
MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Acc. to EU Regulation 2022/89 the amount retained on board is noticeably", null, "Waste", waste.Identifier, was.Tablename);
|
||||||
mv.MessageGroupName = wasMessageGroup;
|
mv.MessageGroupName = wasMessageGroup;
|
||||||
vViolations.Add(mv);
|
vViolations.Add(mv);
|
||||||
}
|
}
|
||||||
@ -1323,7 +1314,7 @@ namespace ENI2
|
|||||||
case 401:
|
case 401:
|
||||||
if (waste.WasteAmountRetained_MTQ > waste.WasteCapacity_MTQ * 0.5)
|
if (waste.WasteAmountRetained_MTQ > waste.WasteCapacity_MTQ * 0.5)
|
||||||
{
|
{
|
||||||
MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Acc. to EU Regulation 2022/89 the amount retained on board is noticeably", null, "WAS", waste.Identifier, "WAS");
|
MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Acc. to EU Regulation 2022/89 the amount retained on board is noticeably", null, "Waste", waste.Identifier, was.Tablename);
|
||||||
mv.MessageGroupName = wasMessageGroup;
|
mv.MessageGroupName = wasMessageGroup;
|
||||||
vViolations.Add(mv);
|
vViolations.Add(mv);
|
||||||
}
|
}
|
||||||
@ -1341,7 +1332,7 @@ namespace ENI2
|
|||||||
case 511:
|
case 511:
|
||||||
if (waste.WasteAmountRetained_MTQ > waste.WasteCapacity_MTQ * 0.2)
|
if (waste.WasteAmountRetained_MTQ > waste.WasteCapacity_MTQ * 0.2)
|
||||||
{
|
{
|
||||||
MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Acc. to EU Regulation 2022/89 the amount retained on board is noticeably", null, "WAS", waste.Identifier, "WAS");
|
MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Acc. to EU Regulation 2022/89 the amount retained on board is noticeably", null, "Waste", waste.Identifier, was.Tablename);
|
||||||
mv.MessageGroupName = wasMessageGroup;
|
mv.MessageGroupName = wasMessageGroup;
|
||||||
vViolations.Add(mv);
|
vViolations.Add(mv);
|
||||||
}
|
}
|
||||||
@ -1350,7 +1341,7 @@ namespace ENI2
|
|||||||
case 602:
|
case 602:
|
||||||
if (waste.WasteAmountRetained_MTQ > waste.WasteCapacity_MTQ * 0.25)
|
if (waste.WasteAmountRetained_MTQ > waste.WasteCapacity_MTQ * 0.25)
|
||||||
{
|
{
|
||||||
MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Acc. to EU Regulation 2022/89 the amount retained on board is noticeably", null, "WAS", waste.Identifier, "WAS");
|
MessageViolation mv = RuleEngine.CreateViolation(ValidationCode.IMPLAUSIBLE, "Acc. to EU Regulation 2022/89 the amount retained on board is noticeably", null, "Waste", waste.Identifier, was.Tablename);
|
||||||
mv.MessageGroupName = wasMessageGroup;
|
mv.MessageGroupName = wasMessageGroup;
|
||||||
vViolations.Add(mv);
|
vViolations.Add(mv);
|
||||||
}
|
}
|
||||||
@ -1393,9 +1384,70 @@ namespace ENI2
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Recompute per-message counts after all global validations
|
||||||
|
Dictionary<Message, MessageValidationCounts> counts = new Dictionary<Message, MessageValidationCounts>();
|
||||||
|
|
||||||
|
int assignViolationCounter = 0;
|
||||||
|
int assignErrorCounter = 0;
|
||||||
|
|
||||||
|
List<MessageViolation> tmpVList = new List<MessageViolation>(vViolations);
|
||||||
|
List<MessageError> tmpEList = new List<MessageError>(vErrors);
|
||||||
|
|
||||||
|
foreach (Message aMessage in messagesSnapshot)
|
||||||
|
{
|
||||||
|
counts[aMessage] = new MessageValidationCounts();
|
||||||
|
counts[aMessage].ErrorCount = tmpEList.Count(me => me.NotificationClass == aMessage.MessageNotificationClassDisplay); // generic
|
||||||
|
// special cases
|
||||||
|
counts[aMessage].ErrorCount += tmpEList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.WAS_RCPT) && (me.NotificationClass == "WasteReceived"));
|
||||||
|
counts[aMessage].ErrorCount += tmpEList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.HAZA) && (me.NotificationClass == "IMDGPosition") && me.MessageGroupName.Contains("arrival", StringComparison.OrdinalIgnoreCase));
|
||||||
|
counts[aMessage].ErrorCount += tmpEList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.HAZA) && (me.NotificationClass == "IGCPosition") && me.MessageGroupName.Contains("arrival", StringComparison.OrdinalIgnoreCase));
|
||||||
|
counts[aMessage].ErrorCount += tmpEList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.HAZA) && (me.NotificationClass == "IBCPosition") && me.MessageGroupName.Contains("arrival", StringComparison.OrdinalIgnoreCase));
|
||||||
|
counts[aMessage].ErrorCount += tmpEList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.HAZA) && (me.NotificationClass == "IMSBCPosition") && me.MessageGroupName.Contains("arrival", StringComparison.OrdinalIgnoreCase));
|
||||||
|
counts[aMessage].ErrorCount += tmpEList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.HAZA) && (me.NotificationClass == "MARPOL_Annex_I_Position") && me.MessageGroupName.Contains("arrival", StringComparison.OrdinalIgnoreCase));
|
||||||
|
counts[aMessage].ErrorCount += tmpEList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.HAZD) && (me.NotificationClass == "IMDGPosition") && me.MessageGroupName.Contains("departure", StringComparison.OrdinalIgnoreCase));
|
||||||
|
counts[aMessage].ErrorCount += tmpEList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.HAZD) && (me.NotificationClass == "IGCPosition") && me.MessageGroupName.Contains("departure", StringComparison.OrdinalIgnoreCase));
|
||||||
|
counts[aMessage].ErrorCount += tmpEList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.HAZD) && (me.NotificationClass == "IBCPosition") && me.MessageGroupName.Contains("departure", StringComparison.OrdinalIgnoreCase));
|
||||||
|
counts[aMessage].ErrorCount += tmpEList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.HAZD) && (me.NotificationClass == "IMSBCPosition") && me.MessageGroupName.Contains("departure", StringComparison.OrdinalIgnoreCase));
|
||||||
|
counts[aMessage].ErrorCount += tmpEList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.HAZD) && (me.NotificationClass == "MARPOL_Annex_I_Position") && me.MessageGroupName.Contains("departure", StringComparison.OrdinalIgnoreCase));
|
||||||
|
counts[aMessage].ErrorCount += tmpEList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.WAS) && (me.NotificationClass == "Waste"));
|
||||||
|
counts[aMessage].ErrorCount += tmpEList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.SEC) && (me.NotificationClass == "LastTenPortFacilitiesCalled"));
|
||||||
|
counts[aMessage].ErrorCount += tmpEList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.SEC) && (me.NotificationClass == "ShipToShipActivitiesDuringLastTenPortFacilitiesCalled"));
|
||||||
|
|
||||||
|
if (counts[aMessage].ErrorCount == 0) counts[aMessage].ErrorCount = null; // set to empty if nothing counted
|
||||||
|
assignErrorCounter += counts[aMessage].ErrorCount ?? 0;
|
||||||
|
|
||||||
|
counts[aMessage].ViolationCount = vViolations.Count(mv => mv.NotificationClass == aMessage.MessageNotificationClassDisplay); // generic
|
||||||
|
// special cases
|
||||||
|
counts[aMessage].ViolationCount += tmpVList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.WAS_RCPT) && (me.NotificationClass == "WasteReceived"));
|
||||||
|
counts[aMessage].ViolationCount += tmpVList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.HAZA) && (me.NotificationClass == "IMDGPosition") && me.MessageGroupName.Contains("arrival", StringComparison.OrdinalIgnoreCase));
|
||||||
|
counts[aMessage].ViolationCount += tmpVList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.HAZA) && (me.NotificationClass == "IGCPosition") && me.MessageGroupName.Contains("arrival", StringComparison.OrdinalIgnoreCase));
|
||||||
|
counts[aMessage].ViolationCount += tmpVList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.HAZA) && (me.NotificationClass == "IBCPosition") && me.MessageGroupName.Contains("arrival", StringComparison.OrdinalIgnoreCase));
|
||||||
|
counts[aMessage].ViolationCount += tmpVList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.HAZA) && (me.NotificationClass == "IMSBCPosition") && me.MessageGroupName.Contains("arrival", StringComparison.OrdinalIgnoreCase));
|
||||||
|
counts[aMessage].ViolationCount += tmpVList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.HAZA) && (me.NotificationClass == "MARPOL_Annex_I_Position") && me.MessageGroupName.Contains("arrival", StringComparison.OrdinalIgnoreCase));
|
||||||
|
counts[aMessage].ViolationCount += tmpVList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.HAZD) && (me.NotificationClass == "IMDGPosition") && me.MessageGroupName.Contains("departure", StringComparison.OrdinalIgnoreCase));
|
||||||
|
counts[aMessage].ViolationCount += tmpVList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.HAZD) && (me.NotificationClass == "IGCPosition") && me.MessageGroupName.Contains("departure", StringComparison.OrdinalIgnoreCase));
|
||||||
|
counts[aMessage].ViolationCount += tmpVList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.HAZD) && (me.NotificationClass == "IBCPosition") && me.MessageGroupName.Contains("departure", StringComparison.OrdinalIgnoreCase));
|
||||||
|
counts[aMessage].ViolationCount += tmpVList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.HAZD) && (me.NotificationClass == "IMSBCPosition") && me.MessageGroupName.Contains("departure", StringComparison.OrdinalIgnoreCase));
|
||||||
|
counts[aMessage].ViolationCount += tmpVList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.HAZD) && (me.NotificationClass == "MARPOL_Annex_I_Position") && me.MessageGroupName.Contains("departure", StringComparison.OrdinalIgnoreCase));
|
||||||
|
counts[aMessage].ViolationCount += tmpVList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.WAS) && (me.NotificationClass == "Waste"));
|
||||||
|
counts[aMessage].ViolationCount += tmpVList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.SEC) && (me.NotificationClass == "LastTenPortFacilitiesCalled"));
|
||||||
|
counts[aMessage].ViolationCount += tmpVList.Count(me => (aMessage.MessageNotificationClass == Message.NotificationClass.SEC) && (me.NotificationClass == "ShipToShipActivitiesDuringLastTenPortFacilitiesCalled"));
|
||||||
|
|
||||||
|
if (counts[aMessage].ViolationCount == 0) counts[aMessage].ViolationCount = null;
|
||||||
|
|
||||||
|
assignViolationCounter += counts[aMessage].ViolationCount ?? 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Trace.WriteLine(string.Format("Unassigned errors: {0}, unassigned violations: {1}", vErrors.Count - assignErrorCounter, vViolations.Count - assignViolationCounter));
|
||||||
|
|
||||||
|
|
||||||
return new ValidationResult(vViolations, vErrors, counts);
|
return new ValidationResult(vViolations, vErrors, counts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void ApplyValidationResult(ValidationResult result, bool showMessages)
|
private void ApplyValidationResult(ValidationResult result, bool showMessages)
|
||||||
{
|
{
|
||||||
// TODO: clear highlighting
|
// TODO: clear highlighting
|
||||||
@ -1404,8 +1456,7 @@ namespace ENI2
|
|||||||
Message aMessage = entry.Key;
|
Message aMessage = entry.Key;
|
||||||
MessageValidationCounts messageCounts = entry.Value;
|
MessageValidationCounts messageCounts = entry.Value;
|
||||||
aMessage.ErrorCount = messageCounts.ErrorCount;
|
aMessage.ErrorCount = messageCounts.ErrorCount;
|
||||||
aMessage.ViolationCount = messageCounts.ViolationCount;
|
aMessage.ViolationCount = messageCounts.ViolationCount;
|
||||||
aMessage.PositionViolationCount = messageCounts.PositionViolationCount;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (MessageError me in result.Errors)
|
foreach (MessageError me in result.Errors)
|
||||||
|
|||||||
@ -341,8 +341,8 @@ namespace ENI2.DetailViewControls
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateCore()
|
public void UpdateCore()
|
||||||
{
|
{
|
||||||
this.UnregisterTextboxChange(this.textBoxDisplayId);
|
this.UnregisterTextboxChange(this.textBoxDisplayId);
|
||||||
|
|
||||||
this.textBoxDisplayId.DataContext = null;
|
this.textBoxDisplayId.DataContext = null;
|
||||||
@ -367,13 +367,13 @@ namespace ENI2.DetailViewControls
|
|||||||
//};
|
//};
|
||||||
//sid.UpdateId(this.Core.DisplayId);
|
//sid.UpdateId(this.Core.DisplayId);
|
||||||
//sid.Show();
|
//sid.Show();
|
||||||
this.Core.IsDirty = false; // ist ja schon gespeichert..
|
this.Core.IsDirty = false; // ist ja schon gespeichert..
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void RefreshMessageGrid()
|
internal void RefreshMessageGrid()
|
||||||
{
|
{
|
||||||
this.dataGridMessages?.Items?.Refresh();
|
this.dataGridMessages?.Items?.Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
using bsmd.database;
|
using bsmd.database;
|
||||||
using ClosedXML.Excel;
|
using ClosedXML.Excel;
|
||||||
using ENI2.EditControls;
|
using ENI2.EditControls;
|
||||||
|
using ENI2.Excel;
|
||||||
using ENI2.Util;
|
using ENI2.Util;
|
||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
using System;
|
using System;
|
||||||
@ -479,88 +480,14 @@ namespace ENI2.DetailViewControls
|
|||||||
|
|
||||||
private void buttonImportFromExcel_Click(object sender, RoutedEventArgs e)
|
private void buttonImportFromExcel_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
OpenFileDialog ofd = new OpenFileDialog();
|
int importWasteListCnt = ExcelLocalImportHelper.ImportWaste(_was);
|
||||||
ofd.Filter = "Excel Files|*.xls;*.xlsx";
|
|
||||||
if (ofd.ShowDialog() ?? false)
|
if (importWasteListCnt > 0)
|
||||||
{
|
{
|
||||||
try
|
this.dataGridWaste.Items.Refresh();
|
||||||
{
|
this.SublistElementChanged(Message.NotificationClass.WAS);
|
||||||
using (var stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
|
MessageBox.Show(String.Format(Properties.Resources.textWasteImported, importWasteListCnt), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information);
|
||||||
using (var workbook = new XLWorkbook(stream))
|
}
|
||||||
{
|
|
||||||
var worksheet = workbook.Worksheet(1); // Get first worksheet
|
|
||||||
var rows = worksheet.RangeUsed().RowsUsed().Skip(3); // Skip first three rows
|
|
||||||
|
|
||||||
List<Waste> importWasteList = new List<Waste>();
|
|
||||||
|
|
||||||
int cnt = 0;
|
|
||||||
object o = null;
|
|
||||||
|
|
||||||
// Diese Funktion kann das "alte" Sheet Format nicht mehr einlesen!
|
|
||||||
|
|
||||||
foreach (var row in rows)
|
|
||||||
{
|
|
||||||
if (cnt >= 35) break; // Maximum 35 rows
|
|
||||||
|
|
||||||
if (worksheet.RangeUsed().ColumnCount() < 9)
|
|
||||||
{
|
|
||||||
throw new InvalidDataException("Sheet must have 9 Columns of data");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!row.Cell(2).IsEmpty()) o = row.Cell(2).Value; else o = null;
|
|
||||||
if ((o != null) && Int32.TryParse(o.ToString(), out int wasteType))
|
|
||||||
{
|
|
||||||
Waste waste = _was.GetWasteForType(wasteType);
|
|
||||||
if (waste == null)
|
|
||||||
{
|
|
||||||
waste = new Waste();
|
|
||||||
waste.WasteType = wasteType;
|
|
||||||
waste.WAS = this._was;
|
|
||||||
waste.IsDirty = true;
|
|
||||||
waste.Identifier = Waste.GetNewIdentifier(this._was.Waste);
|
|
||||||
this._was.Waste.Add(waste);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
waste.IsDirty = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!row.Cell(5).IsEmpty()) waste.WasteDescription = row.Cell(5).GetString();
|
|
||||||
if (waste.WasteDescription.IsNullOrEmpty())
|
|
||||||
waste.WasteDescription = "-";
|
|
||||||
|
|
||||||
if (!row.Cell(6).IsEmpty()) o = row.Cell(6).Value; else o = null;
|
|
||||||
if (o != null) waste.WasteDisposalAmount_MTQ = Convert.ToDouble(o);
|
|
||||||
|
|
||||||
if (!row.Cell(7).IsEmpty()) o = row.Cell(7).Value; else o = null;
|
|
||||||
if (o != null) waste.WasteCapacity_MTQ = Convert.ToDouble(o);
|
|
||||||
|
|
||||||
if (!row.Cell(8).IsEmpty()) o = row.Cell(8).Value; else o = null;
|
|
||||||
if (o != null) waste.WasteAmountRetained_MTQ = Convert.ToDouble(o);
|
|
||||||
|
|
||||||
if (!row.Cell(9).IsEmpty()) waste.WasteDisposalPort = row.Cell(9).GetString().ToUpper();
|
|
||||||
|
|
||||||
if (!row.Cell(10).IsEmpty()) o = row.Cell(10).Value; else o = null;
|
|
||||||
if (o != null) waste.WasteAmountGeneratedTillNextPort_MTQ = Convert.ToDouble(o);
|
|
||||||
|
|
||||||
importWasteList.Add(waste);
|
|
||||||
cnt++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (importWasteList.Count > 0)
|
|
||||||
{
|
|
||||||
this.dataGridWaste.Items.Refresh();
|
|
||||||
this.SublistElementChanged(Message.NotificationClass.WAS);
|
|
||||||
MessageBox.Show(String.Format(Properties.Resources.textWasteImported, importWasteList.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -36,8 +36,8 @@
|
|||||||
<MinimumRequiredVersion>5.4.0.0</MinimumRequiredVersion>
|
<MinimumRequiredVersion>5.4.0.0</MinimumRequiredVersion>
|
||||||
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
|
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
|
||||||
<WebPage>publish.html</WebPage>
|
<WebPage>publish.html</WebPage>
|
||||||
<ApplicationRevision>1</ApplicationRevision>
|
<ApplicationRevision>2</ApplicationRevision>
|
||||||
<ApplicationVersion>7.2.14.1</ApplicationVersion>
|
<ApplicationVersion>7.2.14.2</ApplicationVersion>
|
||||||
<UseApplicationTrust>false</UseApplicationTrust>
|
<UseApplicationTrust>false</UseApplicationTrust>
|
||||||
<CreateDesktopShortcut>true</CreateDesktopShortcut>
|
<CreateDesktopShortcut>true</CreateDesktopShortcut>
|
||||||
<PublishWizardCompleted>true</PublishWizardCompleted>
|
<PublishWizardCompleted>true</PublishWizardCompleted>
|
||||||
|
|||||||
@ -4,6 +4,7 @@ using Microsoft.Win32;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
|
|
||||||
namespace ENI2.Excel
|
namespace ENI2.Excel
|
||||||
@ -41,7 +42,7 @@ namespace ENI2.Excel
|
|||||||
|
|
||||||
List<LastTenPortFacilitiesCalled> importL10C = new List<LastTenPortFacilitiesCalled>();
|
List<LastTenPortFacilitiesCalled> importL10C = new List<LastTenPortFacilitiesCalled>();
|
||||||
|
|
||||||
|
|
||||||
foreach (var row in rows)
|
foreach (var row in rows)
|
||||||
{
|
{
|
||||||
if (cnt >= 10) break; // Maximum 10 rows
|
if (cnt >= 10) break; // Maximum 10 rows
|
||||||
@ -115,7 +116,7 @@ namespace ENI2.Excel
|
|||||||
{
|
{
|
||||||
throw new InvalidDataException($"Error processing row {row.RowNumber()}: {ex.Message}", ex);
|
throw new InvalidDataException($"Error processing row {row.RowNumber()}: {ex.Message}", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@ -229,7 +230,7 @@ namespace ENI2.Excel
|
|||||||
poc30.MDH = mdh;
|
poc30.MDH = mdh;
|
||||||
mdh.PortOfCallLast30Days.Add(poc30);
|
mdh.PortOfCallLast30Days.Add(poc30);
|
||||||
importPoC30.Add(poc30);
|
importPoC30.Add(poc30);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@ -244,5 +245,89 @@ namespace ENI2.Excel
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Waste from Excel
|
||||||
|
|
||||||
|
public static int ImportWaste(WAS was)
|
||||||
|
{
|
||||||
|
int cnt = 0;
|
||||||
|
OpenFileDialog ofd = new OpenFileDialog();
|
||||||
|
ofd.Filter = "Excel Files|*.xls;*.xlsx";
|
||||||
|
if (ofd.ShowDialog() ?? false)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (var stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
|
||||||
|
using (var workbook = new XLWorkbook(stream))
|
||||||
|
{
|
||||||
|
var worksheet = workbook.Worksheet(1); // Get first worksheet
|
||||||
|
var rows = worksheet.RangeUsed().RowsUsed().Skip(3); // Skip first three rows
|
||||||
|
|
||||||
|
List<Waste> importWasteList = new List<Waste>();
|
||||||
|
|
||||||
|
object o = null;
|
||||||
|
|
||||||
|
// Diese Funktion kann das "alte" Sheet Format nicht mehr einlesen!
|
||||||
|
|
||||||
|
foreach (var row in rows)
|
||||||
|
{
|
||||||
|
if (cnt >= 35) break; // Maximum 35 rows
|
||||||
|
|
||||||
|
if (worksheet.RangeUsed().ColumnCount() < 9)
|
||||||
|
{
|
||||||
|
throw new InvalidDataException("Sheet must have 9 Columns of data");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!row.Cell(2).IsEmpty()) o = row.Cell(2).Value; else o = null;
|
||||||
|
if ((o != null) && Int32.TryParse(o.ToString(), out int wasteType))
|
||||||
|
{
|
||||||
|
Waste waste = was.GetWasteForType(wasteType);
|
||||||
|
if (waste == null)
|
||||||
|
{
|
||||||
|
waste = new Waste();
|
||||||
|
waste.WasteType = wasteType;
|
||||||
|
waste.WAS = was;
|
||||||
|
waste.IsDirty = true;
|
||||||
|
waste.Identifier = Waste.GetNewIdentifier(was.Waste);
|
||||||
|
was.Waste.Add(waste);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
waste.IsDirty = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!row.Cell(5).IsEmpty()) waste.WasteDescription = row.Cell(5).GetString();
|
||||||
|
if (waste.WasteDescription.IsNullOrEmpty())
|
||||||
|
waste.WasteDescription = "-";
|
||||||
|
|
||||||
|
if (!row.Cell(6).IsEmpty())
|
||||||
|
waste.WasteDisposalAmount_MTQ = row.Cell(6).GetDouble();
|
||||||
|
|
||||||
|
if (!row.Cell(7).IsEmpty())
|
||||||
|
waste.WasteCapacity_MTQ = row.Cell(7).GetDouble();
|
||||||
|
|
||||||
|
if (!row.Cell(8).IsEmpty()) waste.WasteAmountRetained_MTQ = row.Cell(8).GetDouble();
|
||||||
|
|
||||||
|
if (!row.Cell(9).IsEmpty())
|
||||||
|
waste.WasteDisposalPort = row.Cell(9).GetString().ToUpper();
|
||||||
|
|
||||||
|
if (!row.Cell(10).IsEmpty())
|
||||||
|
waste.WasteAmountGeneratedTillNextPort_MTQ = row.Cell(10).GetDouble();
|
||||||
|
|
||||||
|
importWasteList.Add(waste);
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
using bsmd.database;
|
using bsmd.database;
|
||||||
using ClosedXML.Excel;
|
using ClosedXML.Excel;
|
||||||
using ENI2.EditControls;
|
using ENI2.EditControls;
|
||||||
|
using ENI2.Excel;
|
||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
@ -514,89 +515,14 @@ namespace ENI2.SheetDisplayControls
|
|||||||
|
|
||||||
private void buttonImportFromExcel_Click(object sender, RoutedEventArgs e)
|
private void buttonImportFromExcel_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
OpenFileDialog ofd = new OpenFileDialog();
|
int importWasteListCnt = ExcelLocalImportHelper.ImportWaste(_was);
|
||||||
ofd.Filter = "Excel Files|*.xls;*.xlsx";
|
|
||||||
if (ofd.ShowDialog() ?? false)
|
if (importWasteListCnt > 0)
|
||||||
{
|
{
|
||||||
try
|
this.dataGridWaste.Items.Refresh();
|
||||||
{
|
this.SublistElementChanged(Message.NotificationClass.WAS);
|
||||||
using (var stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
|
MessageBox.Show(String.Format(Properties.Resources.textWasteImported, importWasteListCnt), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information);
|
||||||
using (var workbook = new XLWorkbook(stream))
|
}
|
||||||
{
|
|
||||||
var worksheet = workbook.Worksheet(1); // Get first worksheet
|
|
||||||
var rows = worksheet.RangeUsed().RowsUsed().Skip(3); // Skip first three rows
|
|
||||||
|
|
||||||
List<Waste> importWasteList = new List<Waste>();
|
|
||||||
|
|
||||||
int cnt = 0;
|
|
||||||
|
|
||||||
// Diese Funktion kann das "alte" Sheet Format nicht mehr einlesen!
|
|
||||||
|
|
||||||
foreach (var row in rows)
|
|
||||||
{
|
|
||||||
if (cnt >= 35) break; // Maximum 35 rows
|
|
||||||
|
|
||||||
if (worksheet.RangeUsed().ColumnCount() < 9)
|
|
||||||
{
|
|
||||||
throw new InvalidDataException("Sheet must have 9 Columns of data");
|
|
||||||
}
|
|
||||||
|
|
||||||
object o = null;
|
|
||||||
|
|
||||||
if (!row.Cell(2).IsEmpty()) o = row.Cell(2).Value; else o = null;
|
|
||||||
if ((o != null) && Int32.TryParse(o.ToString(), out int wasteType))
|
|
||||||
{
|
|
||||||
Waste waste = _was.GetWasteForType(wasteType);
|
|
||||||
if (waste == null)
|
|
||||||
{
|
|
||||||
waste = new Waste();
|
|
||||||
waste.WasteType = wasteType;
|
|
||||||
waste.WAS = this._was;
|
|
||||||
waste.IsDirty = true;
|
|
||||||
waste.Identifier = Waste.GetNewIdentifier(this._was.Waste);
|
|
||||||
this._was.Waste.Add(waste);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
waste.IsDirty = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!row.Cell(5).IsEmpty()) waste.WasteDescription = row.Cell(5).GetString();
|
|
||||||
if (waste.WasteDescription.IsNullOrEmpty())
|
|
||||||
waste.WasteDescription = "-";
|
|
||||||
|
|
||||||
if (!row.Cell(6).IsEmpty()) o = row.Cell(6).Value; else o = null;
|
|
||||||
if (o != null) waste.WasteDisposalAmount_MTQ = Convert.ToDouble(o);
|
|
||||||
|
|
||||||
if (!row.Cell(7).IsEmpty()) o = row.Cell(7).Value; else o = null;
|
|
||||||
if (o != null) waste.WasteCapacity_MTQ = Convert.ToDouble(o);
|
|
||||||
|
|
||||||
if (!row.Cell(8).IsEmpty()) o = row.Cell(8).Value; else o = null;
|
|
||||||
if (o != null) waste.WasteAmountRetained_MTQ = Convert.ToDouble(o);
|
|
||||||
|
|
||||||
if (!row.Cell(9).IsEmpty()) waste.WasteDisposalPort = row.Cell(9).GetString().ToUpper();
|
|
||||||
|
|
||||||
if (!row.Cell(10).IsEmpty()) o = row.Cell(10).Value; else o = null;
|
|
||||||
if (o != null) waste.WasteAmountGeneratedTillNextPort_MTQ = Convert.ToDouble(o);
|
|
||||||
|
|
||||||
importWasteList.Add(waste);
|
|
||||||
cnt++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (importWasteList.Count > 0)
|
|
||||||
{
|
|
||||||
this.dataGridWaste.Items.Refresh();
|
|
||||||
this.SublistElementChanged(Message.NotificationClass.WAS);
|
|
||||||
MessageBox.Show(String.Format(Properties.Resources.textWasteImported, importWasteList.Count), Properties.Resources.textCaptionInformation, MessageBoxButton.OK, MessageBoxImage.Information);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
MessageBox.Show("Error reading Excel: " + ex.Message, Properties.Resources.textCaptionError, MessageBoxButton.OK, MessageBoxImage.Error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@ -431,11 +431,6 @@ namespace bsmd.database
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public int? ViolationCount { get; set; }
|
public int? ViolationCount { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Number of violations during last validation that have the "identifier" set and are thus detected violations
|
|
||||||
/// from underlying list elements
|
|
||||||
/// </summary>
|
|
||||||
public int? PositionViolationCount { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Number of errors during last validation
|
/// Number of errors during last validation
|
||||||
|
|||||||
@ -76,7 +76,7 @@ namespace bsmd.database
|
|||||||
wasteReceived.id = reader.GetGuid(0);
|
wasteReceived.id = reader.GetGuid(0);
|
||||||
if (!reader.IsDBNull(1)) wasteReceived.WasteCode = reader.GetString(1);
|
if (!reader.IsDBNull(1)) wasteReceived.WasteCode = reader.GetString(1);
|
||||||
if (!reader.IsDBNull(2)) wasteReceived.WasteDescription = reader.GetString(2);
|
if (!reader.IsDBNull(2)) wasteReceived.WasteDescription = reader.GetString(2);
|
||||||
if (!reader.IsDBNull(3)) wasteReceived.AmountWasteReceived_MTQ = (float)reader.GetDouble(3);
|
if (!reader.IsDBNull(3)) wasteReceived.AmountWasteReceived_MTQ = (float)reader.GetDouble(3);
|
||||||
if (!reader.IsDBNull(4)) wasteReceived.Identifier = reader.GetString(4);
|
if (!reader.IsDBNull(4)) wasteReceived.Identifier = reader.GetString(4);
|
||||||
result.Add(wasteReceived);
|
result.Add(wasteReceived);
|
||||||
}
|
}
|
||||||
@ -111,7 +111,7 @@ namespace bsmd.database
|
|||||||
scmd.Parameters.AddWithValue("@P1", this.WAS_RCPT.Id);
|
scmd.Parameters.AddWithValue("@P1", this.WAS_RCPT.Id);
|
||||||
scmd.Parameters.AddWithNullableValue("@P2", this.WasteCode);
|
scmd.Parameters.AddWithNullableValue("@P2", this.WasteCode);
|
||||||
scmd.Parameters.AddWithNullableValue("@P3", this.WasteDescription);
|
scmd.Parameters.AddWithNullableValue("@P3", this.WasteDescription);
|
||||||
scmd.Parameters.AddWithNullableValue("@P4", this.AmountWasteReceived_MTQ);
|
scmd.Parameters.AddWithNullableValue("@P4", this.AmountWasteReceived_MTQ);
|
||||||
scmd.Parameters.AddWithNullableValue("@P5", this.Identifier);
|
scmd.Parameters.AddWithNullableValue("@P5", this.Identifier);
|
||||||
|
|
||||||
if (this.IsNew)
|
if (this.IsNew)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user