diff --git a/src/bundle/organization/Controller/organization.php b/src/bundle/organization/Controller/organization.php index e36e222502fca23b2a393527be8ecc86a78387cc..03ce841a23fce4540a9fdfc789a626887d4c1e29 100755 --- a/src/bundle/organization/Controller/organization.php +++ b/src/bundle/organization/Controller/organization.php @@ -1650,20 +1650,22 @@ class organization */ protected function getOwnerOrgsByRole($currentService, $role) { - $organizationController = \laabs::newController('organization/organization'); - $orgUnits = $organizationController->getOrgsByRole($role); + $orgUnits = $this->getOrgsByRole($role); $userPositionController = \laabs::newController('organization/userPosition'); - $orgController = \laabs::newController('organization/organization'); + $archivalAgreementController = \laabs::newController('medona/archivalAgreement'); $owner = false; $archiver = false; $userOrgUnits = []; $userOrgs = []; + $allArchivalAgreements = $archivalAgreementController->index(); + + $originatorOrgIds = []; $userOrgUnitOrgRegNumbers = array_merge(array($currentService->registrationNumber), $userPositionController->readDescandantService((string)$currentService->orgId)); foreach ($userOrgUnitOrgRegNumbers as $userOrgUnitOrgRegNumber) { - $userOrgUnit = $orgController->getOrgByRegNumber($userOrgUnitOrgRegNumber); + $userOrgUnit = $this->getOrgByRegNumber($userOrgUnitOrgRegNumber); $userOrgUnits[] = $userOrgUnit; if (isset($userOrgUnit->orgRoleCodes)) { foreach ($userOrgUnit->orgRoleCodes as $orgRoleCode) { @@ -1672,6 +1674,12 @@ class organization } if ($orgRoleCode == 'archiver') { $archiver = true; + $myOriginatorOrgs = []; + foreach ($allArchivalAgreements as $archivalAgreement) { + if($archivalAgreement->archiverOrgRegNumber == $userOrgUnitOrgRegNumber) { + $myOriginatorOrgs = array_merge($myOriginatorOrgs, $archivalAgreement->originatorOrgIds->jsonSerialize()); + } + } } } } @@ -1681,14 +1689,14 @@ class organization foreach ($orgUnits as $orgUnit) { if (// Owner = all originators $owner - // Archiver = all originators fo the same org - || ($archiver && $orgUnit->ownerOrgId == $userOrgUnit->ownerOrgId) + // Archiver = all originators for the same org + || ($archiver && ($orgUnit->ownerOrgId == $userOrgUnit->ownerOrgId || in_array($orgUnit->orgId, $myOriginatorOrgs))) // Originator = all originators at position and sub-services || ($role == 'originator' && $orgUnit->registrationNumber == $userOrgUnit->registrationNumber) // Depositor = all || $role == 'depositor') { if (!isset($userOrgs[(string)$orgUnit->ownerOrgId])) { - $orgObject = $organizationController->read((string)$orgUnit->ownerOrgId); + $orgObject = $this->read((string)$orgUnit->ownerOrgId); $userOrgs[(string)$orgObject->orgId] = new \stdClass(); $userOrgs[(string)$orgObject->orgId]->displayName = $orgObject->displayName; diff --git a/src/presentation/maarchRM/Presenter/recordsManagement/archive.php b/src/presentation/maarchRM/Presenter/recordsManagement/archive.php index e59846ac95a5046f9ceb2b0601fcad45a46eb592..33cde9368a6d12f0754c354fd5b652b4289198d6 100755 --- a/src/presentation/maarchRM/Presenter/recordsManagement/archive.php +++ b/src/presentation/maarchRM/Presenter/recordsManagement/archive.php @@ -77,7 +77,21 @@ class archive $emptyRole = true; } else { $emptyRole = false; - $ownerOriginatorOrgs = $this->getOwnerOriginatorsOrgs($currentService); + // $ownerOriginatorOrgs = $this->getOwnerOriginatorsOrgs($currentService); + + $orgController = \laabs::newController('organization/organization'); + $originators = $orgController->getOriginator(); + foreach ($originators as $originator) { + if (!isset($ownerOriginatorOrgs[(string) $originator->ownerOrgId])) { + $ownerOriginatorOrgs[(string) $originator->ownerOrgId] = new \stdClass(); + $ownerOriginatorOrgs[(string) $originator->ownerOrgId]->displayName = $originator->ownerOrgName; + $ownerOriginatorOrgs[(string) $originator->ownerOrgId]->originators = []; + } + if (!in_array($originator, $ownerOriginatorOrgs[(string) $originator->ownerOrgId]->originators)) { + $ownerOriginatorOrgs[(string)$originator->ownerOrgId]->originators[] = $originator; + } + } + } $descriptionSchemeNames = \laabs::callService('recordsManagement/descriptionScheme/read_name_Descriptionfields'); $retentionRuleController = \laabs::newController('recordsManagement/retentionRule'); diff --git a/src/presentation/maarchRM/Resources/view/recordsManagement/archive/search.html b/src/presentation/maarchRM/Resources/view/recordsManagement/archive/search.html index 8e83e6a2a7efa18653030100c649f6862e95343a..9aee26cf1889bb95038d6bf238d0adeb30263330 100755 --- a/src/presentation/maarchRM/Resources/view/recordsManagement/archive/search.html +++ b/src/presentation/maarchRM/Resources/view/recordsManagement/archive/search.html @@ -902,10 +902,11 @@ /* -- EDITION MODAL -- */ var organizations = new Bloodhound({ - datumTokenizer: Bloodhound.tokenizers.obj.whitespace('displayName'), + datumTokenizer: Bloodhound.tokenizers.obj.whitespace('orgName'), queryTokenizer: Bloodhound.tokenizers.whitespace, prefetch: { - url: '/organizations/todisplay?orgUnit=true', + //url: '/organizations/todisplay?orgUnit=true', + url: '/originator', ttl: '0' }, limit: 100 diff --git a/src/presentation/maarchRM/Resources/view/recordsManagement/archive/searchform.html b/src/presentation/maarchRM/Resources/view/recordsManagement/archive/searchform.html index c7418bd44a1ca41c506a1d766d983566ad640b1b..df2c8c426ff96f73efee6474394bd32abb7d4e04 100644 --- a/src/presentation/maarchRM/Resources/view/recordsManagement/archive/searchform.html +++ b/src/presentation/maarchRM/Resources/view/recordsManagement/archive/searchform.html @@ -246,6 +246,7 @@