Bug beim Prüfen auf ungültige Unterschriften behoben

This commit is contained in:
2023-10-28 13:34:32 +02:00
parent dd3e0ec274
commit 5e9864ab9b
7 changed files with 103 additions and 109 deletions

View File

@@ -324,7 +324,7 @@
<Grid x:Name="root" Grid.Row="1" Margin="8,0,8,-8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />

View File

@@ -5547,6 +5547,7 @@ namespace BeWo.Data.Access
return result;
}
// ToDo: Veraltet und wird nicht mehr benutzt!
public List<ServiceRecord> FindFormerlyLinkedServiceRecords(long confirmationReceiptSignatureOid, long customerOid, long supportConceptOid, long costBearer2SupportConceptOid, string timeSpanString)
{
if(timeSpanString?.Length != 21)
@@ -5564,14 +5565,41 @@ namespace BeWo.Data.Access
var timeSpanEnd = DateTime.Parse($"{year}-{m2}-{d2}");
// ToDo: Warum wird geprüft, ob der InsTs im Intervall liegt?
// ToDo: Die ausschließen, die mit einer aktiven ConfirmationReceiptSignature verlinkt sind!
var criteria = CreateCriteria<ServiceRecord>()
//.Add(Restrictions.Between(nameof(ServiceRecord.InsTs), timeSpanStart, timeSpanEnd))
.Add(Restrictions.Eq(nameof(ServiceRecord.CustomerOid), customerOid))
.Add(Restrictions.Eq(nameof(ServiceRecord.SupportConcept)+".Oid", supportConceptOid))
.Add(Restrictions.Eq(nameof(ServiceRecord.SupportConcept) + ".Oid", supportConceptOid))
.Add(Restrictions.Eq(nameof(ServiceRecord.CostBearer2SupportConceptOid), costBearer2SupportConceptOid))
.Add(Restrictions.Between(nameof(ServiceRecord.Start), timeSpanStart, timeSpanEnd))
.Add(Restrictions.Between(nameof(ServiceRecord.End), timeSpanStart, timeSpanEnd))
.Add(Expression.Sql(new SqlString($"this_.Oid NOT IN (SELECT ServiceRecordOid FROM confirmationreceiptsignature2servicerecord WHERE ConfirmationReceiptSignatureOid = {confirmationReceiptSignatureOid})")));
//.Add(Expression.Sql(new SqlString($"this_.Oid NOT IN (SELECT ServiceRecordOid FROM confirmationreceiptsignature2servicerecord WHERE ConfirmationReceiptSignatureOid = {confirmationReceiptSignatureOid})")));
.Add(Expression.Sql(new SqlString($"this_.Oid NOT IN (SELECT ServiceRecordOid FROM confirmationreceiptsignature2servicerecord WHERE ConfirmationReceiptSignatureOid IN (SELECT ConfirmationReceiptSignatureOid FROM confirmationreceiptsignature WHERE IsActive = 1))")));
return criteria.List<ServiceRecord>().ToList();
}
public List<ConfirmationReceiptSignature> LoadAllActiveConfirmationReceiptSignaturesByServiceRecordOids(IList<long> serviceRecordOids)
{
var c = CreateCriteriaIsActive<ConfirmationReceiptSignature>()
.CreateAlias(nameof(ConfirmationReceiptSignature.ServiceRecords), "sr", JoinType.InnerJoin)
.Add(Restrictions.In($"sr.{nameof(BeWoEntityBase.Oid)}", serviceRecordOids.ToArray()));
// Der ResultTransformer erzeugt ein SELECT DISTINCT für den Roottypen (ConfirmationReceiptSignature)
c.SetResultTransformer(new DistinctRootEntityResultTransformer());
var result = c.List<ConfirmationReceiptSignature>().ToList();
return result;
}
public List<ServiceRecord> FindFormerlyLinkedServiceRecordsBySignatureOid(long confirmationReceiptSignatureOid)
{
var sql = new SqlString($"this_.Oid NOT IN (SELECT ServiceRecordOid FROM confirmationreceiptsignature2servicerecord WHERE ConfirmationReceiptSignatureOid = {confirmationReceiptSignatureOid}) AND " +
$"this_.Oid IN (SELECT ServiceRecordOid FROM servicerecordhistory WHERE CustomerConfirmationReceiptSignatureOid = {confirmationReceiptSignatureOid} OR EmployeeConfirmationReceiptSignatureOid = {confirmationReceiptSignatureOid})");
var criteria = CreateCriteria<ServiceRecord>()
.Add(Expression.Sql(sql));
return criteria.List<ServiceRecord>().ToList();
}

View File

@@ -146,6 +146,9 @@ namespace BeWo.Data.Entities
private SignatureStateType _EmployeeConfirmationReceiptSignatureStateType;
private SignatureStateType _ServiceRecordSignatureStateType;
private long? _CustomerConfirmationReceiptSignatureOid;
private long? _EmployeeConfirmationReceiptSignatureOid;
public virtual CostBearer2SupportConcept CostBearer2SupportConcept
{
@@ -695,5 +698,31 @@ namespace BeWo.Data.Entities
}
}
}
public virtual long? CustomerConfirmationReceiptSignatureOid
{
get => _CustomerConfirmationReceiptSignatureOid;
set
{
if(AreDifferent(_CustomerConfirmationReceiptSignatureOid, value))
{
_CustomerConfirmationReceiptSignatureOid = value;
}
}
}
public virtual long? EmployeeConfirmationReceiptSignatureOid
{
get => _EmployeeConfirmationReceiptSignatureOid;
set
{
if(AreDifferent(_EmployeeConfirmationReceiptSignatureOid, value))
{
_EmployeeConfirmationReceiptSignatureOid = value;
}
}
}
}
}

View File

@@ -46,6 +46,9 @@
<property column="EmployeeConfirmationReceiptSignatureStateType" type="BS.Shared.SignatureStateType, BS.Shared" name="EmployeeConfirmationReceiptSignatureStateType" />
<property column="ServiceRecordSignatureStateType" type="BS.Shared.SignatureStateType, BS.Shared" name="ServiceRecordSignatureStateType" />
<property column="CustomerConfirmationReceiptSignatureOid" type="Int64" name="CustomerConfirmationReceiptSignatureOid" />
<property column="EmployeeConfirmationReceiptSignatureOid" type="Int64" name="EmployeeConfirmationReceiptSignatureOid" />
<many-to-one name="Group" column="GroupOid" class="BeWo.Data.Entities.ServiceRecordGroup,BeWo.Data" cascade="none" />
<many-to-one name="Employee" column="EmployeeOid" class="BeWo.Data.Entities.Employee,BeWo.Data" cascade="none" />
<many-to-one name="Customer" column="CustomerOid" class="BeWo.Data.Entities.Customer,BeWo.Data" cascade="none" />

View File

@@ -0,0 +1 @@
ALTER TABLE servicerecordhistory ADD COLUMN `CustomerConfirmationReceiptSignatureOid` BIGINT(18) DEFAULT NULL, ADD COLUMN `EmployeeConfirmationReceiptSignatureOid` BIGINT(18) DEFAULT NULL;

View File

@@ -327,7 +327,7 @@ namespace BeWo.Service.Plugins
//t = "9094672461"; // Transkulturelles Betreuungsbüro (Toprak GmbH)
//t = "9008813932"; // Aids Hilfe Giessen
//t = "4052216789"; // Perspektiven e.V.
t = "7663765314"; // Christina Frommen (Frommen BeWo)
//t = "7663765314"; // Christina Frommen (Frommen BeWo)
//t = "5462295916"; // BeWo Dellbrueck
//t = "2120989920"; // Sozialbüro Schüßler und Wilckens GbR
//t = "9815376800"; // Haus Dülken GmbH + Co. KG

View File

@@ -2223,7 +2223,6 @@ namespace BeWo.Service.ServiceImplementations
{
var serviceRecordHistoryEntries = new List<ServiceRecordHistory>();
foreach(var serviceRecord2SignatureState in serviceRecords2SignatureStates)
{
var serviceRecord = serviceRecord2SignatureState.ServiceRecord;
@@ -2272,13 +2271,20 @@ namespace BeWo.Service.ServiceImplementations
IsCreatedInMobileClient = serviceRecord.IsCreatedInMobileClient,
ServiceRecordSignatureStateType = singleSignatureState ?? previousRecordHistoryEntry?.ServiceRecordSignatureStateType ?? SignatureStateType.None,
CustomerConfirmationReceiptSignatureStateType = customerMonthlySignatureState ?? previousRecordHistoryEntry?.CustomerConfirmationReceiptSignatureStateType ?? SignatureStateType.None,
EmployeeConfirmationReceiptSignatureStateType = employeeMonthlySignatureState ?? previousRecordHistoryEntry?.EmployeeConfirmationReceiptSignatureStateType ?? SignatureStateType.None
EmployeeConfirmationReceiptSignatureStateType = employeeMonthlySignatureState ?? previousRecordHistoryEntry?.EmployeeConfirmationReceiptSignatureStateType ?? SignatureStateType.None,
CustomerConfirmationReceiptSignatureOid = previousRecordHistoryEntry?.CustomerConfirmationReceiptSignatureOid,
EmployeeConfirmationReceiptSignatureOid = previousRecordHistoryEntry?.EmployeeConfirmationReceiptSignatureOid
});
}
DAOFactory.GenericDAO.Insert(serviceRecordHistoryEntries);
}
// ToDo: 3 Unterschriften; 1 Gültig mit U1; 2 Ungültig mit U1; 3 Gültig mit U2;
// ToDo:
// ToDo:
// ToDo:
// ToDo:
private static List<ServiceRecord2SignatureStates> GenerateSignatureStates(List<ServiceRecord> serviceRecordsWithDeletedSingleSignatures, List<ServiceRecord2SignatureStates> serviceRecordsdWithRemovedConfirmationReceiptSignatures, List<ServiceRecord> originals)
{
var serviceRecords2SignatureStates = new List<ServiceRecord2SignatureStates>();
@@ -3386,7 +3392,7 @@ namespace BeWo.Service.ServiceImplementations
DAOFactory.GenericDAO.Update(sr);
MakeSignatureStatusTypeServiceRecordHistoryEntry(sr, SignatureStateType.Valid, null, null);
MakeSignatureStatusTypeServiceRecordHistoryEntry(sr, SignatureStateType.Valid, null, null, null, null);
return updatedSignatureDC;
}
@@ -3798,7 +3804,7 @@ namespace BeWo.Service.ServiceImplementations
var serviceRecord = DAOFactory.GenericDAO.LoadByID<ServiceRecord>(serviceRecordOid);
MakeSignatureStatusTypeServiceRecordHistoryEntry(serviceRecord, SignatureStateType.Valid, null, null);
MakeSignatureStatusTypeServiceRecordHistoryEntry(serviceRecord, SignatureStateType.Valid, null, null, null, null);
}
return serviceRecordOid;
@@ -6971,6 +6977,7 @@ namespace BeWo.Service.ServiceImplementations
}
}
// ToDo: Ist der SignatureStateType Valid und ist die CRSOid null, die CRSOid hinzufügen!
private static void MakeHistoryEntriesForConfirmationReceiptSignatures(List<ConfirmationReceiptSignature> confirmationReceiptSignatures, SignatureStateType signatureStateType)
{
foreach(var confirmationReceiptSignature in confirmationReceiptSignatures)
@@ -6978,20 +6985,33 @@ namespace BeWo.Service.ServiceImplementations
foreach(var serviceRecord in confirmationReceiptSignature.ServiceRecords)
{
SignatureStateType? customerMonthlySignatureStateType;
SignatureStateType? employeeMonthlySignatureStateTyp;
SignatureStateType? employeeMonthlySignatureStateType;
long? customerConfirmationReceiptSignatureOid = null;
long? employeeConfirmationReceiptSignatureOid = null;
if(confirmationReceiptSignature.SignatureType == SignatureType.Customer)
{
customerMonthlySignatureStateType = signatureStateType;
employeeMonthlySignatureStateTyp = null;
employeeMonthlySignatureStateType = null;
if(signatureStateType == SignatureStateType.Valid)
{
customerConfirmationReceiptSignatureOid = confirmationReceiptSignature.Oid;
}
}
else
{
customerMonthlySignatureStateType = null;
employeeMonthlySignatureStateTyp = signatureStateType;
employeeMonthlySignatureStateType = signatureStateType;
if(signatureStateType == SignatureStateType.Valid)
{
employeeConfirmationReceiptSignatureOid = confirmationReceiptSignature.Oid;
}
}
MakeSignatureStatusTypeServiceRecordHistoryEntry(serviceRecord, null, customerMonthlySignatureStateType, employeeMonthlySignatureStateTyp);
MakeSignatureStatusTypeServiceRecordHistoryEntry(serviceRecord, null, customerMonthlySignatureStateType, employeeMonthlySignatureStateType, customerConfirmationReceiptSignatureOid, employeeConfirmationReceiptSignatureOid);
}
}
}
@@ -7840,7 +7860,7 @@ namespace BeWo.Service.ServiceImplementations
}
}
var confirmationReceiptSignatures = DAOFactory.SearchDAO.LoadAllConfirmationReceiptSignaturesByServiceRecordOids(serviceRecordOids);
var confirmationReceiptSignatures = DAOFactory.SearchDAO.LoadAllActiveConfirmationReceiptSignaturesByServiceRecordOids(serviceRecordOids);
var confirmationReceiptSignatures2Delete = new List<ConfirmationReceiptSignature>();
var confirmationReceiptSignatures2Update = new List<ConfirmationReceiptSignature>();
@@ -7908,15 +7928,12 @@ namespace BeWo.Service.ServiceImplementations
{
var first = confirmationReceiptSignature.ServiceRecords.FirstOrDefault();
// Eine Unterschrift, die in der confirmationReceiptSignatures2Delete ist, hat nur noch den einen ServiceRecord, der gerade in der Zeit bearbeitet wird!
if(first != null)
{
var customerOid = first.CustomerOid.Value;
var supportConceptOid = first.SupportConcept.Oid.Value;
var costbearer2SupportConceptOid = first.CostBearer2SupportConceptOid.Value;
var timeSpanString = confirmationReceiptSignature.TimeSpanString;
var signatureOid = confirmationReceiptSignature.Oid.Value;
var signatureOid = confirmationReceiptSignature.Oid.Value;
var formerlySignedServiceRecords = DAOFactory.SearchDAO.FindFormerlyLinkedServiceRecords(signatureOid, customerOid, supportConceptOid, costbearer2SupportConceptOid, timeSpanString);
var formerlySignedServiceRecords = DAOFactory.SearchDAO.FindFormerlyLinkedServiceRecordsBySignatureOid(signatureOid);
var mostRecentHistoryEntries = DAOFactory.SearchDAO.FindMostRecentServiceRecordHistoryEntryByServiceRecords(formerlySignedServiceRecords.Select(s => s.Oid.Value).ToList());
@@ -8278,7 +8295,7 @@ namespace BeWo.Service.ServiceImplementations
serviceRecord.SignatureOid = null;
DAOFactory.GenericDAO.Update(serviceRecord);
MakeSignatureStatusTypeServiceRecordHistoryEntry(serviceRecord, SignatureStateType.ManuallyDeleted, null, null);
MakeSignatureStatusTypeServiceRecordHistoryEntry(serviceRecord, SignatureStateType.ManuallyDeleted, null, null, null, null);
}
catch(Exception e)
{
@@ -8303,94 +8320,8 @@ namespace BeWo.Service.ServiceImplementations
throw Utils.CreateBeWoFaultException(e);
}
}
/*
* private static void MakeServiceRecordHistoryEntry(IEnumerable<ServiceRecord> lOriginals, IEnumerable<long> serviceRecordOidList, StatementType statementType)
{
var hServiceRecords = new List<ServiceRecordHistory>();
if (statementType.Equals(StatementType.Insert) && serviceRecordOidList != null)
{
int iterator = 0;
foreach (ServiceRecordHistory history in lOriginals.Select(ServiceRecordOriginal => new ServiceRecordHistory
{
TimeStamp = DateTime.Now,
ChangeType = statementType,
CostBearer2SupportConcept = ServiceRecordOriginal.CostBearer2SupportConcept,
CostBearer2SupportConceptOid = ServiceRecordOriginal.CostBearer2SupportConceptOid,
Customer = ServiceRecordOriginal.Customer,
CustomerOid = ServiceRecordOriginal.CustomerOid,
Employee = ServiceRecordOriginal.Employee,
EmployeeOid = ServiceRecordOriginal.EmployeeOid,
End = ServiceRecordOriginal.End,
Group = ServiceRecordOriginal.Group,
GroupEmployeeCount = ServiceRecordOriginal.GroupEmployeeCount,
GroupOid = ServiceRecordOriginal.GroupOid,
GroupPersonCount = ServiceRecordOriginal.GroupPersonCount,
GroupRoundedDuration = ServiceRecordOriginal.GroupRoundedDuration,
IP = ServiceRecordOriginal.IP,
IsActive = ServiceRecordOriginal.IsActive,
Notice = ServiceRecordOriginal.Notice,
ServiceRecordOid = serviceRecordOidList.ElementAt(iterator),
RoundedDuration = ServiceRecordOriginal.RoundedDuration,
ServiceDescription = ServiceRecordOriginal.ServiceDescription,
ServiceRecordType = ServiceRecordOriginal.ServiceRecordType,
ServiceRecordInsTs = ServiceRecordOriginal.InsTs,
ServiceRecordVersion = ServiceRecordOriginal.Version.Value,
ServiceRecordInsUser = ServiceRecordOriginal.InsUser,
ServiceRecordUdpUser = ServiceRecordOriginal.UdpUser,
Start = ServiceRecordOriginal.Start,
SupportConcept = ServiceRecordOriginal.SupportConcept,
SystemEntryID = ServiceRecordOriginal.SystemEntryID,
DistanceInMeter = ServiceRecordOriginal.DistanceInMeter,
IsCreatedInMobileClient = ServiceRecordOriginal.IsCreatedInMobileClient
}))
{
iterator++;
hServiceRecords.Add(history);
}
}
else
{
hServiceRecords.AddRange(lOriginals.Select(ServiceRecordOriginal => new ServiceRecordHistory
{
TimeStamp = DateTime.Now,
ChangeType = statementType,
CostBearer2SupportConcept = ServiceRecordOriginal.CostBearer2SupportConcept,
CostBearer2SupportConceptOid = ServiceRecordOriginal.CostBearer2SupportConceptOid,
Customer = ServiceRecordOriginal.Customer,
CustomerOid = ServiceRecordOriginal.CustomerOid,
Employee = ServiceRecordOriginal.Employee,
EmployeeOid = ServiceRecordOriginal.EmployeeOid,
End = ServiceRecordOriginal.End,
Group = ServiceRecordOriginal.Group,
GroupEmployeeCount = ServiceRecordOriginal.GroupEmployeeCount,
GroupOid = ServiceRecordOriginal.GroupOid,
GroupPersonCount = ServiceRecordOriginal.GroupPersonCount,
GroupRoundedDuration = ServiceRecordOriginal.GroupRoundedDuration,
IP = ServiceRecordOriginal.IP,
IsActive = ServiceRecordOriginal.IsActive,
Notice = ServiceRecordOriginal.Notice,
ServiceRecordOid = ServiceRecordOriginal.Oid,
RoundedDuration = ServiceRecordOriginal.RoundedDuration,
ServiceDescription = ServiceRecordOriginal.ServiceDescription,
ServiceRecordType = ServiceRecordOriginal.ServiceRecordType,
ServiceRecordInsTs = ServiceRecordOriginal.InsTs,
ServiceRecordVersion = ServiceRecordOriginal.Version.Value,
ServiceRecordInsUser = ServiceRecordOriginal.InsUser,
ServiceRecordUdpUser = ServiceRecordOriginal.UdpUser,
Start = ServiceRecordOriginal.Start,
SupportConcept = ServiceRecordOriginal.SupportConcept,
SystemEntryID = ServiceRecordOriginal.SystemEntryID,
DistanceInMeter = ServiceRecordOriginal.DistanceInMeter,
IsCreatedInMobileClient = ServiceRecordOriginal.IsCreatedInMobileClient
}));
}
DAOFactory.GenericDAO.Insert(hServiceRecords);
}
*/
private static void MakeSignatureStatusTypeServiceRecordHistoryEntry(ServiceRecord serviceRecord, SignatureStateType? singleSignatureStateType, SignatureStateType? customerMonthlySignatureStateType, SignatureStateType? employeeMonthlySignatureStateType)
private static void MakeSignatureStatusTypeServiceRecordHistoryEntry(ServiceRecord serviceRecord, SignatureStateType? singleSignatureStateType, SignatureStateType? customerMonthlySignatureStateType, SignatureStateType? employeeMonthlySignatureStateType, long? customerConfirmationReceiptSignatureOid, long? employeeConfirmationReceiptsignatureOid)
{
// Alten ServiceRecordHistory laden
var mostRecentHistoryEntry = DAOFactory.SearchDAO.FindMostRecentServiceRecordHistoryEntryByServiceRecordOid(serviceRecord.Oid.Value);
@@ -8429,7 +8360,9 @@ namespace BeWo.Service.ServiceImplementations
IsCreatedInMobileClient = serviceRecord.IsCreatedInMobileClient,
CustomerConfirmationReceiptSignatureStateType = customerMonthlySignatureStateType ?? mostRecentHistoryEntry?.CustomerConfirmationReceiptSignatureStateType ?? SignatureStateType.None,
EmployeeConfirmationReceiptSignatureStateType = employeeMonthlySignatureStateType ?? mostRecentHistoryEntry?.EmployeeConfirmationReceiptSignatureStateType ?? SignatureStateType.None,
ServiceRecordSignatureStateType = singleSignatureStateType ?? mostRecentHistoryEntry?.ServiceRecordSignatureStateType ?? SignatureStateType.None
ServiceRecordSignatureStateType = singleSignatureStateType ?? mostRecentHistoryEntry?.ServiceRecordSignatureStateType ?? SignatureStateType.None,
CustomerConfirmationReceiptSignatureOid = customerConfirmationReceiptSignatureOid ?? mostRecentHistoryEntry?.CustomerConfirmationReceiptSignatureOid,
EmployeeConfirmationReceiptSignatureOid = employeeConfirmationReceiptsignatureOid ?? mostRecentHistoryEntry?.EmployeeConfirmationReceiptSignatureOid
};
DAOFactory.GenericDAO.Insert(seviceRecordHistoryEntry);