Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release/11.2.4 #473

Merged
merged 207 commits into from
Dec 19, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
207 commits
Select commit Hold shift + click to select a range
ebffd1c
added consequences model
a-naskret Nov 17, 2022
05eaae6
changed changelog
a-naskret Nov 18, 2022
35f8c80
added subscription flag
mrjsawdk Nov 18, 2022
b47c092
added subscription flag to methods and API contract
mrjsawdk Nov 18, 2022
f3d6630
updated dto
a-naskret Nov 18, 2022
58e4593
added info to status page
mrjsawdk Nov 18, 2022
6ca6002
added consequences to the changelog
a-naskret Nov 18, 2022
1ed75fc
added toggle switch to the dialog
mrjsawdk Nov 18, 2022
6cf50cf
Updated unit test
mrjsawdk Nov 19, 2022
d6dd1a0
cleanup
mrjsawdk Nov 19, 2022
69814ec
updated-integration-test
mrjsawdk Nov 19, 2022
4d900f5
Merge branch 'master' of github.com:Strongminds/kitos into feature/ki…
mrjsawdk Nov 21, 2022
9a100bc
cleanup
mrjsawdk Nov 21, 2022
1e61cc9
cleanup
mrjsawdk Nov 21, 2022
221237b
fix dto ctors
mrjsawdk Nov 21, 2022
b04b67f
Added retries to all "organisation" integration requests
mrjsawdk Nov 21, 2022
09128f8
cleanup test
mrjsawdk Nov 21, 2022
b96804f
recomputed migrations
mrjsawdk Nov 21, 2022
692c8e0
added subscription check
mrjsawdk Nov 21, 2022
c9253c1
expose DateOfLatestCheckBySubscription on the DTO
mrjsawdk Nov 21, 2022
2ade9c0
added ui for sync settings
mrjsawdk Nov 21, 2022
4c545ca
fixed expected response codes
mrjsawdk Nov 21, 2022
8b07891
Merge pull request #849 from Strongminds/feature/kitosudv-3312-subscr…
mrjsawdk Nov 21, 2022
a27b5b2
Merge branch 'master' of github.com:Strongminds/kitos into feature/ki…
mrjsawdk Nov 21, 2022
cc765a3
mapping
a-naskret Nov 21, 2022
abb0689
added sts organization change log + tests
a-naskret Nov 21, 2022
1a76667
cleanup
a-naskret Nov 21, 2022
1a24d65
migration cleanup
a-naskret Nov 21, 2022
33f760a
added a "rough" scheduled job for background updates of fk org
mrjsawdk Nov 21, 2022
fa0b40f
merge
a-naskret Nov 21, 2022
c796977
added comment for more parallel jobs
mrjsawdk Nov 22, 2022
d025e0c
log-change component
a-naskret Nov 22, 2022
81ad848
fix styling and add twp in parallel
mrjsawdk Nov 22, 2022
1d2a0b1
relocated job
mrjsawdk Nov 22, 2022
b707145
reduced-dependencies
mrjsawdk Nov 22, 2022
59a2ccd
added unit test of the update scheduling and the spread
mrjsawdk Nov 22, 2022
c6faafe
cahnges after review
a-naskret Nov 22, 2022
f6a257f
renaming
mrjsawdk Nov 22, 2022
57c7669
added background initiator detection
mrjsawdk Nov 22, 2022
665dec5
added ordering to the view. Fixed columns used for contract name in p…
mrjsawdk Nov 22, 2022
1a869eb
removed obsoleted directive
mrjsawdk Nov 22, 2022
12cf755
changes after review
a-naskret Nov 22, 2022
e6c121a
Merge pull request #852 from Strongminds/bugfix/kitosudv-3654
mrjsawdk Nov 23, 2022
57ed27c
changes after review 2
a-naskret Nov 23, 2022
12e0e33
cleanup
a-naskret Nov 23, 2022
4bace97
Merge branch 'feature/KITOSUDV-3317-backend' of https://github.com/St…
a-naskret Nov 23, 2022
8f7fe79
changes after review 3
a-naskret Nov 23, 2022
98c34d7
consequences root component
a-naskret Nov 23, 2022
09f8c3a
Merge pull request #853 from Strongminds/bugfix/broken-org-structure
mrjsawdk Nov 23, 2022
25c0c95
Merge branch 'feature/KITOSUDV-3317-backend' of https://github.com/St…
a-naskret Nov 24, 2022
9f03b14
added data to the views, fixed select changelog dropdown
a-naskret Nov 24, 2022
4e431a2
fixed switching between different change logs
a-naskret Nov 24, 2022
10db4ef
cleanup
a-naskret Nov 24, 2022
ca78d73
Merge branch 'master' of https://github.com/Strongminds/kitos into fe…
a-naskret Nov 24, 2022
f7b5706
fixed unit test
a-naskret Nov 24, 2022
bcfc4d6
Merge branch 'feature/KITOSUDV-3317-backend' into feature/KITOSUDV-33…
a-naskret Nov 24, 2022
57a9461
only global admin can edit cvr
a-naskret Nov 24, 2022
3c8d911
cleanup
a-naskret Nov 24, 2022
76f46f4
cleanup 2
a-naskret Nov 24, 2022
83028a5
cleanup 3
a-naskret Nov 25, 2022
cc501fc
fix
a-naskret Nov 25, 2022
5be7edb
changed parent unit dropdown
a-naskret Nov 25, 2022
b554724
cleanup
a-naskret Nov 25, 2022
ae50b2e
cleanup
a-naskret Nov 25, 2022
5506cf1
fixed an error in date selections
a-naskret Nov 25, 2022
4bd85d4
cleanup
a-naskret Nov 25, 2022
80fcb8a
cleanup 2
a-naskret Nov 25, 2022
055f839
Merge pull request #851 from Strongminds/feature/kitosudv-3633-sort-r…
mrjsawdk Nov 27, 2022
ea8d262
Merge branch 'master' of github.com:Strongminds/kitos into feature/KI…
mrjsawdk Nov 27, 2022
d791f4e
align ordering
mrjsawdk Nov 27, 2022
bc87825
some cleanup
mrjsawdk Nov 27, 2022
17ad77a
Merge branch 'master' of github.com:Strongminds/kitos into feature/KI…
mrjsawdk Nov 27, 2022
f49b53e
Merge branch 'master' of github.com:Strongminds/kitos into freature/K…
mrjsawdk Nov 27, 2022
2e4fcae
Merge branch 'master' of github.com:Strongminds/kitos into bugfix/KIT…
mrjsawdk Nov 28, 2022
386e599
Review comments inspiration
mrjsawdk Nov 28, 2022
33dba02
changes after review
a-naskret Nov 28, 2022
cf449a7
Merge branch 'master' of github.com:Strongminds/kitos into feature/ki…
mrjsawdk Nov 28, 2022
0f7eadf
added quick-unsubscribe button
mrjsawdk Nov 28, 2022
557327d
merge
a-naskret Nov 28, 2022
405180a
changes after review
a-naskret Nov 28, 2022
0623b6f
draft
mrjsawdk Nov 28, 2022
a3ff0ab
fix
mrjsawdk Nov 28, 2022
4e501f3
changes after review
a-naskret Nov 28, 2022
0225ae9
Merge branch 'freature/KITOSUDV-3435' of https://github.com/Strongmin…
a-naskret Nov 28, 2022
10e5260
fixed TestEnvironment's DatabaseAccess
mrjsawdk Nov 28, 2022
18c664d
fix
mrjsawdk Nov 28, 2022
59a8561
changes after review 2
a-naskret Nov 28, 2022
e3966db
fix access control on it-system lifecycle
mrjsawdk Nov 29, 2022
f1e76f4
Merge pull request #858 from Strongminds/bugfix/kitosudv-3673
mrjsawdk Nov 29, 2022
01e620a
Merge branch 'master' of github.com:Strongminds/kitos into freature/K…
mrjsawdk Nov 29, 2022
1bf6d15
changes after review 3
a-naskret Nov 29, 2022
79c68b2
cleanup
a-naskret Nov 29, 2022
d204573
review changes
mrjsawdk Nov 29, 2022
9ae6448
review changes
mrjsawdk Nov 29, 2022
7aad1b3
fix missing using
mrjsawdk Nov 29, 2022
cf9758d
cleanup
mrjsawdk Nov 29, 2022
7898d50
fixed subscription bug
a-naskret Nov 29, 2022
c21d5ce
Merge pull request #855 from Strongminds/freature/KITOSUDV-3435
mrjsawdk Nov 29, 2022
484bfb3
Merge branch 'master' of github.com:Strongminds/kitos into feature/KI…
mrjsawdk Nov 29, 2022
0c6b10c
changes after review
a-naskret Nov 29, 2022
d2cb255
Merge branch 'master' of github.com:Strongminds/kitos into feature/KI…
mrjsawdk Nov 29, 2022
a3f26ad
changed addNewLog in Organization to accept generic input
a-naskret Nov 29, 2022
486c1b8
fix flaky test
mrjsawdk Nov 29, 2022
1b5c056
fix
mrjsawdk Nov 29, 2022
ab5bef3
Merge pull request #859 from Strongminds/fix-test
mrjsawdk Nov 29, 2022
58215b2
Merge branch 'feature/KITOSUDV-3317' of github.com:Strongminds/kitos …
mrjsawdk Nov 29, 2022
1c5c87c
added null validation
a-naskret Nov 29, 2022
9711217
changes after review
a-naskret Nov 29, 2022
56315e6
Merge branch 'feature/KITOSUDV-3317-backend' of https://github.com/St…
a-naskret Nov 29, 2022
df0fcef
more cleanup
mrjsawdk Nov 29, 2022
7c42b19
more cleanup
mrjsawdk Nov 29, 2022
1314fd8
cleanup
mrjsawdk Nov 29, 2022
f343c2e
Merge pull request #856 from Strongminds/feature/KITOSUDV-3655
mrjsawdk Nov 29, 2022
a5a3645
Merge pull request #857 from Strongminds/bugfix/KITOSUDV-3453
mrjsawdk Nov 29, 2022
785bcd8
merge
a-naskret Nov 29, 2022
9c9f943
master merge
a-naskret Nov 29, 2022
7dc5182
Merge pull request #848 from Strongminds/feature/KITOSUDV-3317-backend
mrjsawdk Nov 30, 2022
6809e2c
Merge branch 'master' of github.com:Strongminds/kitos into feature/KI…
mrjsawdk Nov 30, 2022
f241969
ui fix
a-naskret Nov 30, 2022
5bc37d1
Added the test that exposes the issue
mrjsawdk Nov 30, 2022
5811036
fixed import issue
mrjsawdk Nov 30, 2022
fbd1099
typo
mrjsawdk Nov 30, 2022
b5621cb
changes after review
a-naskret Nov 30, 2022
abd2297
cleanup
a-naskret Nov 30, 2022
1859ae0
Merge pull request #861 from Strongminds/bugfix/kitosudv-3677
mrjsawdk Nov 30, 2022
f33b347
clean before merge
mrjsawdk Nov 30, 2022
9c36a9a
Merge branch 'master' of github.com:Strongminds/kitos into feature/ki…
mrjsawdk Nov 30, 2022
935b53b
fix
mrjsawdk Dec 1, 2022
766f893
added migration
a-naskret Dec 1, 2022
549611e
extracted mapping - marked to-be migrated tests
mrjsawdk Dec 1, 2022
91c3070
fixed command
mrjsawdk Dec 1, 2022
72cd98b
relocated import tests
mrjsawdk Dec 1, 2022
74dcb46
added remaining tests
mrjsawdk Dec 1, 2022
44cbf7f
cleanup
mrjsawdk Dec 1, 2022
a977055
fixed a flaky test
a-naskret Dec 1, 2022
f162711
fix
mrjsawdk Dec 1, 2022
bfe09b0
fix
mrjsawdk Dec 1, 2022
22b98f8
fixed dto issue
mrjsawdk Dec 1, 2022
a340f0c
cleanup
a-naskret Dec 1, 2022
386e4c4
fix
mrjsawdk Dec 1, 2022
fa5d2e4
Merge branch 'master' of github.com:Strongminds/kitos into feature/KI…
mrjsawdk Dec 1, 2022
3458d59
Merge pull request #854 from Strongminds/feature/KITOSUDV-3317-frontend
mrjsawdk Dec 1, 2022
0709f37
Merge branch 'master' of github.com:Strongminds/kitos into feature/ki…
mrjsawdk Dec 1, 2022
b0b7249
use getconnection
mrjsawdk Dec 1, 2022
bfd4c6d
cleanup 2
a-naskret Dec 1, 2022
4e13f6d
Merge pull request #862 from Strongminds/bugfix/KITOSUDV-3681
a-naskret Dec 1, 2022
5d6c9da
fix mapping
mrjsawdk Dec 1, 2022
29f60ab
Merge branch 'master' of github.com:Strongminds/kitos into feature/ki…
mrjsawdk Dec 1, 2022
bb63d80
Merge pull request #850 from Strongminds/feature/kitosudv-3322
mrjsawdk Dec 2, 2022
8b125ea
only save logs if changes
mrjsawdk Dec 2, 2022
486479a
draft setup
mrjsawdk Dec 2, 2022
999e3dd
added real email
mrjsawdk Dec 2, 2022
3c1b669
removed duplicate send
mrjsawdk Dec 2, 2022
f12e936
added unit test of the handler
mrjsawdk Dec 2, 2022
1a59347
Merge pull request #864 from Strongminds/feature/kitosudv-3323-send-e…
mrjsawdk Dec 2, 2022
c27827d
Do not send update to api users
mrjsawdk Dec 5, 2022
8033609
Merge pull request #865 from Strongminds/feature/kitosudv-3323-send-e…
mrjsawdk Dec 5, 2022
09479ed
added overview customizatoin
mrjsawdk Dec 5, 2022
6ea1909
added origin indication to unit dropdown
a-naskret Dec 5, 2022
fe44a62
Merge branch 'master' of https://github.com/Strongminds/kitos into fe…
a-naskret Dec 5, 2022
cf55b24
cleanup
a-naskret Dec 5, 2022
9fdb205
cleanup2
a-naskret Dec 5, 2022
dd23b95
fixed the cursor
a-naskret Dec 5, 2022
31882ab
fixed flaky unit test
a-naskret Dec 6, 2022
944aae4
changed the day to a random number
a-naskret Dec 6, 2022
b5bc63f
cleanup
a-naskret Dec 6, 2022
a1716f2
cleanup
a-naskret Dec 6, 2022
b9e2282
fixed description duplication
a-naskret Dec 6, 2022
25ab21e
fixes
mrjsawdk Dec 6, 2022
34e2269
fixes
mrjsawdk Dec 6, 2022
692d9c4
Merge pull request #867 from Strongminds/feature/KITOSUDV-3646-v2
mrjsawdk Dec 6, 2022
9b65f9a
Merge pull request #866 from Strongminds/feature/kitosudv-3602
mrjsawdk Dec 6, 2022
b3b358b
added excel export to org-user overview
a-naskret Dec 6, 2022
75b77a9
Merge branch 'master' of https://github.com/Strongminds/kitos into fe…
a-naskret Dec 6, 2022
46f61f9
Merge pull request #868 from Strongminds/bugfix/KITOSUDV-3689
mrjsawdk Dec 6, 2022
b95ef76
Merge pull request #869 from Strongminds/bugfix/KITOSUDV-3682
mrjsawdk Dec 6, 2022
a82637e
Merge branch 'master' of github.com:Strongminds/kitos into bugfix/KIT…
mrjsawdk Dec 6, 2022
c168e27
Merge pull request #870 from Strongminds/bugfix/KITOSUDV-3688
mrjsawdk Dec 6, 2022
d8e7470
updated app service to support pre-disconnect purge
mrjsawdk Dec 6, 2022
b7988e9
enabled search in third country dropdown
a-naskret Dec 6, 2022
b91e42e
Merge branch 'master' of https://github.com/Strongminds/kitos into fe…
a-naskret Dec 6, 2022
034c626
added integration test
mrjsawdk Dec 6, 2022
47a0e1d
updated command handler test to cover the preloaded organization
mrjsawdk Dec 6, 2022
eba10f6
changes after review
a-naskret Dec 6, 2022
753d8c6
cleanup
a-naskret Dec 6, 2022
2989d5c
Merge branch 'master' of https://github.com/Strongminds/kitos into fe…
a-naskret Dec 6, 2022
d3ad621
added unit test to app service
mrjsawdk Dec 6, 2022
edeecce
added error case
mrjsawdk Dec 6, 2022
37518e6
cleanup
a-naskret Dec 6, 2022
d2f4ff3
Merge pull request #873 from Strongminds/feature/KITOSUDV-3546
mrjsawdk Dec 7, 2022
3989178
Merge branch 'master' of github.com:Strongminds/kitos into feature/ki…
mrjsawdk Dec 7, 2022
4ff0d7f
fixed
a-naskret Dec 7, 2022
5541e84
cleanup
a-naskret Dec 7, 2022
cee3377
fixes
mrjsawdk Dec 7, 2022
03dc0c1
Merge pull request #871 from Strongminds/feature/KITOSUDV-3635
a-naskret Dec 7, 2022
59a1708
removed fields dependency
a-naskret Dec 7, 2022
6a30c26
added prompt when disconnecting
mrjsawdk Dec 7, 2022
84f53b4
Merge branch 'master' of github.com:Strongminds/kitos into feature/ki…
mrjsawdk Dec 7, 2022
7dd32f0
Merge pull request #875 from Strongminds/feature/KITOSUDV-3548
mrjsawdk Dec 7, 2022
ff1a7a3
Merge pull request #872 from Strongminds/feature/kitosudv-3646-purge-…
mrjsawdk Dec 7, 2022
a5e47bb
fix
mrjsawdk Dec 7, 2022
8f7f11d
Merge pull request #876 from Strongminds/bugfix/typos
mrjsawdk Dec 7, 2022
9f98c72
fixed null propagation
a-naskret Dec 8, 2022
d20c76f
endpoints-reestablished
mrjsawdk Dec 8, 2022
d776696
Merge pull request #886 from Strongminds/feature/kitosudv-3809
mrjsawdk Dec 8, 2022
7aaf747
introduced uiOnlyColumns for situations like the row buttons on the o…
mrjsawdk Dec 9, 2022
15352f1
fixed
mrjsawdk Dec 9, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Core.ApplicationServices/Core.ApplicationServices.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@
<Compile Include="Extensions\IAuthorizationContextExtensions.cs" />
<Compile Include="Authorization\Policies\GlobalReadAccessPolicy.cs" />
<Compile Include="Extensions\OptionalValueChangeExtensions.cs" />
<Compile Include="Extensions\OrganizationTreeUpdateConsequencesExtensions.cs" />
<Compile Include="GDPR\DataProcessingRegistrationReadModelService.cs" />
<Compile Include="GDPR\DataProcessingRegistrationApplicationService.cs" />
<Compile Include="GDPR\DataProcessingRegistrationOptionsApplicationService.cs" />
Expand Down Expand Up @@ -149,6 +150,7 @@
<Compile Include="Model\Organizations\OrganizationRemovalConflicts.cs" />
<Compile Include="Model\Organizations\PaymentChangeParameters.cs" />
<Compile Include="Model\Organizations\StsOrganizationSynchronizationDetails.cs" />
<Compile Include="Model\Organizations\AuthorizedUpdateOrganizationFromFKOrganisationCommand.cs" />
<Compile Include="Model\RightsHolder\UserRoleAssociationDTO.cs" />
<Compile Include="Model\Shared\OptionalValueChange.cs" />
<Compile Include="Model\SystemUsage\Write\NamedLink.cs" />
Expand Down Expand Up @@ -183,6 +185,8 @@
<Compile Include="Notification\UserNotificationApplicationService.cs" />
<Compile Include="Organizations\Handlers\HandleOrganizationBeingDeleted.cs" />
<Compile Include="Organizations\Handlers\RemoveOrganizationUnitRegistrationsCommandHandler.cs" />
<Compile Include="Organizations\Handlers\AuthorizedUpdateOrganizationFromFKOrganisationCommandHandler.cs" />
<Compile Include="Organizations\Handlers\SendEmailToStakeholdersOnExternalOrganizationConnectionUpdatedHandler.cs" />
<Compile Include="Organizations\IOrganizationUnitService.cs" />
<Compile Include="Organizations\IStsOrganizationSynchronizationService.cs" />
<Compile Include="Organizations\OrganizationUnitService.cs" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
using Core.Abstractions.Types;
using Core.DomainModel.Organization;
using Core.DomainServices.Context;
using Core.DomainServices.Time;
using System.Collections.Generic;
using System.Linq;

namespace Core.ApplicationServices.Extensions
{
public static class OrganizationTreeUpdateConsequencesExtensions
{
public static ExternalConnectionAddNewLogInput ToLogEntries(this OrganizationTreeUpdateConsequences consequences, Maybe<ActiveUserIdContext> activeUserIdContext, IOperationClock operationClock)
{
var changeLogType = ExternalOrganizationChangeLogResponsible.Background;
int? changeLogUserId = null;
if (activeUserIdContext.HasValue)
{
var userId = activeUserIdContext.Value.ActiveUserId;
changeLogType = ExternalOrganizationChangeLogResponsible.User;
changeLogUserId = userId;
}

var changeLogEntries = consequences.ConvertConsequencesToConsequenceLogs().ToList();
var changeLogLogTime = operationClock.Now;

return new ExternalConnectionAddNewLogInput(changeLogUserId, changeLogType, changeLogLogTime, MapToExternalConnectionAddNewLogEntryInput(changeLogEntries));
}

private static IEnumerable<ExternalConnectionAddNewLogEntryInput> MapToExternalConnectionAddNewLogEntryInput(IEnumerable<StsOrganizationConsequenceLog> entry)
{
return entry
.Select(x => new ExternalConnectionAddNewLogEntryInput(x.ExternalUnitUuid, x.Name, x.Type, x.Description))
.ToList();
}

public static IEnumerable<StsOrganizationConsequenceLog> ConvertConsequencesToConsequenceLogs(this OrganizationTreeUpdateConsequences consequences)
{
var logs = new List<StsOrganizationConsequenceLog>();
logs.AddRange(MapAddedOrganizationUnits(consequences));
logs.AddRange(MapRenamedOrganizationUnits(consequences));
logs.AddRange(MapMovedOrganizationUnits(consequences));
logs.AddRange(MapRemovedOrganizationUnits(consequences));
logs.AddRange(MapConvertedOrganizationUnits(consequences));

return logs;
}

private static IEnumerable<StsOrganizationConsequenceLog> MapConvertedOrganizationUnits(OrganizationTreeUpdateConsequences consequences)
{
return consequences
.DeletedExternalUnitsBeingConvertedToNativeUnits
.Select(converted => new StsOrganizationConsequenceLog
{
Name = converted.organizationUnit.Name,
Type = ConnectionUpdateOrganizationUnitChangeType.Converted,
ExternalUnitUuid = converted.externalOriginUuid,
Description = $"'{converted.organizationUnit.Name}' er slettet i FK Organisation men konverteres til KITOS enhed, da den anvendes aktivt i KITOS."
})
.ToList();
}

private static IEnumerable<StsOrganizationConsequenceLog> MapRemovedOrganizationUnits(OrganizationTreeUpdateConsequences consequences)
{
return consequences
.DeletedExternalUnitsBeingDeleted
.Select(deleted => new StsOrganizationConsequenceLog
{
Name = deleted.organizationUnit.Name,
Type = ConnectionUpdateOrganizationUnitChangeType.Deleted,
ExternalUnitUuid = deleted.externalOriginUuid,
Description = $"'{deleted.organizationUnit.Name}' slettes."
})
.ToList();
}

private static IEnumerable<StsOrganizationConsequenceLog> MapMovedOrganizationUnits(OrganizationTreeUpdateConsequences consequences)
{
return consequences
.OrganizationUnitsBeingMoved
.Select(moved =>
{
var (movedUnit, oldParent, newParent) = moved;
return new StsOrganizationConsequenceLog
{
Name = movedUnit.Name,
Type = ConnectionUpdateOrganizationUnitChangeType.Moved,
ExternalUnitUuid = movedUnit.ExternalOriginUuid.GetValueOrDefault(),
Description = $"'{movedUnit.Name}' flyttes fra at være underenhed til '{oldParent.Name}' til fremover at være underenhed for {newParent.Name}"
};
})
.ToList();
}

private static IEnumerable<StsOrganizationConsequenceLog> MapRenamedOrganizationUnits(OrganizationTreeUpdateConsequences consequences)
{
return consequences
.OrganizationUnitsBeingRenamed
.Select(renamed =>
{
var (affectedUnit, oldName, newName) = renamed;
return new StsOrganizationConsequenceLog
{
Name = oldName,
Type = ConnectionUpdateOrganizationUnitChangeType.Renamed,
ExternalUnitUuid = affectedUnit.ExternalOriginUuid.GetValueOrDefault(),
Description = $"'{oldName}' omdøbes til '{newName}'"
};
})
.ToList();
}

private static IEnumerable<StsOrganizationConsequenceLog> MapAddedOrganizationUnits(OrganizationTreeUpdateConsequences consequences)
{
return consequences
.AddedExternalOrganizationUnits
.Select(added => new StsOrganizationConsequenceLog
{
Name = added.unitToAdd.Name,
Type = ConnectionUpdateOrganizationUnitChangeType.Added,
ExternalUnitUuid = added.unitToAdd.Uuid,
Description = $"'{added.unitToAdd.Name}' tilføjes som underenhed til '{added.parent?.Name}'"
}
)
.ToList();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using Core.Abstractions.Types;
using Core.DomainModel.Commands;
using Core.DomainModel.Organization;

namespace Core.ApplicationServices.Model.Organizations
{
/// <summary>
/// Describes a pre-authorized update command for the FK Org synchronization.
/// Make sure to authorize the call prior to executing this command
/// </summary>
public class AuthorizedUpdateOrganizationFromFKOrganisationCommand : ICommand
{
public bool SubscribeToChanges { get; }
public Maybe<int> SynchronizationDepth { get; }
public Organization Organization { get; }
public Maybe<ExternalOrganizationUnit> PreloadedExternalTree { get; }

public AuthorizedUpdateOrganizationFromFKOrganisationCommand(Organization organization, Maybe<int> synchronizationDepth, bool subscribeToChanges, Maybe<ExternalOrganizationUnit> preloadedExternalTree)
{
SubscribeToChanges = subscribeToChanges;
PreloadedExternalTree = preloadedExternalTree;
SynchronizationDepth = synchronizationDepth;
Organization = organization;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Core.DomainServices.Model.StsOrganization;
using System;
using Core.DomainServices.Model.StsOrganization;

namespace Core.ApplicationServices.Model.Organizations
{
Expand All @@ -10,15 +11,19 @@ public class StsOrganizationSynchronizationDetails
public bool CanUpdateConnection { get; }
public bool CanDeleteConnection { get; }
public CheckConnectionError? CheckConnectionError { get; }
public bool SubscribesToUpdates { get; }
public DateTime? DateOfLatestCheckBySubscription { get; }

public StsOrganizationSynchronizationDetails(bool connected, int? synchronizationDepth, bool canCreateConnection, bool canUpdateConnection, bool canDeleteConnection, CheckConnectionError? checkConnectionError)
public StsOrganizationSynchronizationDetails(bool connected, int? synchronizationDepth, bool canCreateConnection, bool canUpdateConnection, bool canDeleteConnection, CheckConnectionError? checkConnectionError, bool subscribesToUpdates, DateTime? dateOfLatestCheckBySubscription)
{
Connected = connected;
SynchronizationDepth = synchronizationDepth;
CanCreateConnection = canCreateConnection;
CanUpdateConnection = canUpdateConnection;
CanDeleteConnection = canDeleteConnection;
CheckConnectionError = checkConnectionError;
SubscribesToUpdates = subscribesToUpdates;
DateOfLatestCheckBySubscription = dateOfLatestCheckBySubscription;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
using Core.Abstractions.Types;
using Core.ApplicationServices.Model.Organizations;
using Core.DomainModel.Commands;
using Core.DomainModel.Events;
using Core.DomainModel.Organization;
using System;
using System.Linq;
using Core.ApplicationServices.Extensions;
using Core.DomainServices;
using Core.DomainServices.Organizations;
using Infrastructure.Services.DataAccess;
using Serilog;
using Core.DomainServices.Context;
using Core.DomainServices.Time;

namespace Core.ApplicationServices.Organizations.Handlers
{
public class AuthorizedUpdateOrganizationFromFKOrganisationCommandHandler : ICommandHandler<AuthorizedUpdateOrganizationFromFKOrganisationCommand, Maybe<OperationError>>
{
private readonly IStsOrganizationUnitService _stsOrganizationUnitService;
private readonly IGenericRepository<OrganizationUnit> _organizationUnitRepository;
private readonly ILogger _logger;
private readonly IDomainEvents _domainEvents;
private readonly IDatabaseControl _databaseControl;
private readonly ITransactionManager _transactionManager;
private readonly Maybe<ActiveUserIdContext> _userContext;
private readonly IOperationClock _operationClock;
private readonly IGenericRepository<StsOrganizationChangeLog> _stsChangeLogRepository;

public AuthorizedUpdateOrganizationFromFKOrganisationCommandHandler(
IStsOrganizationUnitService stsOrganizationUnitService,
IGenericRepository<OrganizationUnit> organizationUnitRepository,
ILogger logger,
IDomainEvents domainEvents,
IDatabaseControl databaseControl,
ITransactionManager transactionManager,
Maybe<ActiveUserIdContext> userContext,
IOperationClock operationClock,
IGenericRepository<StsOrganizationChangeLog> stsChangeLogRepository)
{
_stsOrganizationUnitService = stsOrganizationUnitService;
_organizationUnitRepository = organizationUnitRepository;
_logger = logger;
_domainEvents = domainEvents;
_databaseControl = databaseControl;
_transactionManager = transactionManager;
_userContext = userContext;
_operationClock = operationClock;
_stsChangeLogRepository = stsChangeLogRepository;
}

public Maybe<OperationError> Execute(AuthorizedUpdateOrganizationFromFKOrganisationCommand command)
{
var organization = command.Organization;
using var transaction = _transactionManager.Begin();
try
{
//Load the external tree if not already provided
var organizationTree = command
.PreloadedExternalTree
.Match(tree => tree, () => _stsOrganizationUnitService.ResolveOrganizationTree(organization));

if (organizationTree.Failed)
{
var error = organizationTree.Error;
_logger.Error("Unable to resolve external org tree for organization with uuid {uuid}. Failed with: {code}:{detail}:{message}", command.Organization.Uuid, error.FailureType, error.Detail, error.Message);
return new OperationError($"Failed to resolve org tree:{error.Message.GetValueOrFallback("")}:{error.Detail:G}:{error.FailureType:G}", error.FailureType);
}

//Import the external tree into the organization
var updateResult = organization.UpdateConnectionToExternalOrganizationHierarchy(OrganizationUnitOrigin.STS_Organisation, organizationTree.Value, command.SynchronizationDepth, command.SubscribeToChanges);
if (updateResult.Failed)
{
var error = updateResult.Error;
_logger.Error("Failed importing org tree for organization with uuid {uuid}. Failed with: {code}:{message}", command.Organization.Uuid, error.FailureType, error.Message);
transaction.Rollback();
return new OperationError($"Failed to import org tree:{error.Message.GetValueOrFallback("")}:{error.FailureType:G}", error.FailureType);
}

//React on import consequences
var consequences = updateResult.Value;

if (consequences.DeletedExternalUnitsBeingDeleted.Any())
{
_organizationUnitRepository.RemoveRange(consequences.DeletedExternalUnitsBeingDeleted.Select(x => x.organizationUnit).ToList());
}
foreach (var (affectedUnit, _, _) in consequences.OrganizationUnitsBeingRenamed)
{
_domainEvents.Raise(new EntityUpdatedEvent<OrganizationUnit>(affectedUnit));
}

if (IsBackgroundImport())
{
organization.StsOrganizationConnection.DateOfLatestCheckBySubscription = DateTime.Now;
}

var logEntries = consequences.ToLogEntries(_userContext, _operationClock);

//We only add a change log entry if any changes were detected
if (logEntries.Entries.Any())
{
var addLogResult = organization.AddExternalImportLog(OrganizationUnitOrigin.STS_Organisation, logEntries);
if (addLogResult.Failed)
{
var error = addLogResult.Error;
_logger.Error("Failed adding change log while importing org tree for organization with uuid {uuid}. Failed with: {code}:{message}", command.Organization.Uuid, error.FailureType, error.Message);
transaction.Rollback();
return error;
}

var addNewLogsResult = addLogResult.Value;
var removedChangeLogs = addNewLogsResult.RemovedChangeLogs.OfType<StsOrganizationChangeLog>().ToList();
if (removedChangeLogs.Any())
{
_stsChangeLogRepository.RemoveRange(removedChangeLogs);
}
}

_domainEvents.Raise(new EntityUpdatedEvent<Organization>(organization));
_databaseControl.SaveChanges();
transaction.Commit();

_domainEvents.Raise(new ExternalOrganizationConnectionUpdated(organization, organization.StsOrganizationConnection, logEntries));

return Maybe<OperationError>.None;

}
catch (Exception e)
{
_logger.Error(e, "Exception during FK Org sync of organization with uuid:{uuid}", command.Organization.Uuid);
transaction.Rollback();
return new OperationError("Exception during import", OperationFailure.UnknownError);
}
}

private bool IsBackgroundImport()
{
return _userContext.IsNone;
}
}
}
Loading