Skip to content

Commit

Permalink
Merge branch '1343-store-activity-identifier-in-database-to-include-t…
Browse files Browse the repository at this point in the history
…he-activity-identifier-with-old-organisation-identifier' into develop
  • Loading branch information
Momik Shrestha committed Jan 18, 2024
2 parents 3b82092 + 1fbc6b2 commit 5828dbd
Show file tree
Hide file tree
Showing 14 changed files with 155 additions and 48 deletions.
71 changes: 71 additions & 0 deletions app/Console/Commands/FillDataForIssue1343Changes.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<?php

namespace App\Console\Commands;

use App\IATI\Models\Organization\Organization;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use PHPUnit\Exception;

class FillDataForIssue1343Changes extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'command:FillDataForIssue1343Changes';

/**
* The console command description.
*
* @var string
*/
protected $description = 'Fills activity identifier data for activity and organization for change related to issue #1343';

/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
try {
DB::beginTransaction();
$this->info('Filling data for Issue 1343 changes...');
$organizations = Organization::all();

foreach ($organizations as $organization) {
// $organization->timestamps = false;
// $organization->updateQuietly([
// 'old_organization_identifiers' => [ json_encode(['identifiers' => $organization->identifier, 'created_at' => $organization->created_at]) ]
// ]);
//
// $organization->saveQuietly();

$orgActivities = $organization->allActivities;

foreach ($orgActivities as $activity) {
$activityIdentifier = $activity->iati_identifier['activity_identifier'];
$organizationIdentifier = $organization->identifier;

$iatiIdentifier = [
'activity_identifier' => $activityIdentifier,
'iati_identifier_text' => $organizationIdentifier . '-' . $activityIdentifier,
'present_organization_identifier' => $organizationIdentifier,
'updated_at' => $activity->created_at,
];

$activity->timestamps = false;
$activity->updateQuietly(['iati_identifier' => $iatiIdentifier]);
}
}

DB::commit();
$this->info('Data filled successfully.');
} catch(Exception $e) {
DB::rollback();
logger()->info($e);
}
}
}
2 changes: 1 addition & 1 deletion app/CsvImporter/Queue/Processor.php
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public function getValidHumanitarianScopeVocabulary($humanitarianScopeVocabulary
$humanitarianScopeVocabulary = Arr::get($csvDatum, 'humanitarian_scope_vocabulary', '');

if ($humanitarianScopeVocabulary) {
return Arr::get($humanitarianScopeVocabularyArray, $humanitarianScopeVocabulary, $humanitarianScopeVocabulary);
return (string) Arr::get($humanitarianScopeVocabularyArray, $humanitarianScopeVocabulary, $humanitarianScopeVocabulary);
}

return '';
Expand Down
5 changes: 0 additions & 5 deletions app/Http/Controllers/Admin/Activity/ActivityController.php
Original file line number Diff line number Diff line change
Expand Up @@ -179,11 +179,6 @@ public function show($id): View|JsonResponse|RedirectResponse
$validatorResponse = $this->activityValidatorResponseService->getValidatorResponse($id);
$importActivityError = $this->importActivityErrorService->getImportActivityError($id);
$organization_identifier = $activity->organization->identifier;
$activity->iati_identifier = [
'activity_identifier' => $activity->iati_identifier['activity_identifier'],
'iati_identifier_text' => $activity->organization->identifier . '-' . $activity->iati_identifier['activity_identifier'],
];

$iatiValidatorResponse = $validatorResponse->response ?? null;
$importActivityError = $importActivityError->error ?? null;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,13 +76,15 @@ public function update(OrganizationIdentifierRequest $request): RedirectResponse
$id = Auth::user()->organization_id;
$organizationIdentifier = $request->all();

if (!$this->verifyPublisher($organizationIdentifier)) {
return redirect()->route('admin.organisation.identifier.edit')->with('error', 'Please enter correct identifier as present in IATI Registry.')->withInput();
}
// TODO: Uncomment this after testing
// if (!$this->verifyPublisher($organizationIdentifier)) {
// return redirect()->route('admin.organisation.identifier.edit')->with('error', 'Please enter correct identifier as present in IATI Registry.')->withInput();
// }

if (!$this->organizationIdentifierService->update($id, $organizationIdentifier)) {
return redirect()->route('admin.organisation.index')->with('error', 'Error has occurred while updating organization identifier.');
}
logger('bbbbbbb');

return redirect()->route('admin.organisation.index')->with('success', 'Organization identifier updated successfully.');
} catch (\Exception $e) {
Expand Down
7 changes: 5 additions & 2 deletions app/Http/Requests/Activity/Identifier/IdentifierRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace App\Http\Requests\Activity\Identifier;

use App\IATI\Services\Activity\ActivityService;
use Illuminate\Contracts\Container\BindingResolutionException;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

Expand Down Expand Up @@ -33,9 +34,11 @@ public function rules(bool $fileUpload = false): array
/**
* Return critical rules for identifier.
*
* @param $fileUpload
* @param bool $fileUpload
* @param string $elementName
* @return array
*
* @return void
* @throws BindingResolutionException
*/
public function getErrorsForIdentifier(bool $fileUpload = false, $elementName = ''): array
{
Expand Down
37 changes: 27 additions & 10 deletions app/IATI/Repositories/Activity/ActivityRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -516,16 +516,33 @@ public function getAllActivitiesToDownload($organizationId, $queryParams): objec
*/
public function syncReportingOrg($id, $reportingOrg): int
{
$activitiesCount = $this->model->where('org_id', $id)->count();

if ($activitiesCount > 0) {
$this->model->where('org_id', $id)->update(['reporting_org->0->ref' => $reportingOrg['ref'] ?? '']);
$this->model->where('org_id', $id)->update(['reporting_org->0->type' => $reportingOrg['type'] ?? '']);

return $this->model->where('org_id', $id)->update([
'reporting_org->0->narrative' => $reportingOrg['narrative'] ?? '',
'status' => 'draft',
]);
$baseQueryForOrganizationActivities = $this->model->where('org_id', $id);
$queryForDraftedActivities = function ($query) {
$query
->where('linked_to_iati', false)
->orWhere(fn ($query) => $query->where('linked_to_iati', true)->where('status', 'draft'));
};

$syncableActivitiesCount = $baseQueryForOrganizationActivities
->where($queryForDraftedActivities)
->count();

if ($syncableActivitiesCount > 0) {
$baseQueryForOrganizationActivities
->where($queryForDraftedActivities)
->update(['reporting_org->0->ref' => $reportingOrg['ref'] ?? '']);
$baseQueryForOrganizationActivities
->where($queryForDraftedActivities)
->update(['reporting_org->0->type' => $reportingOrg['type'] ?? '']);

return $baseQueryForOrganizationActivities
->where($queryForDraftedActivities)
->update(
[
'reporting_org->0->narrative' => $reportingOrg['narrative'] ?? '',
'status' => 'draft',
]
);
}

return 1;
Expand Down
5 changes: 1 addition & 4 deletions app/IATI/Services/Activity/ActivityIdentifierService.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,7 @@ public function getActivityIdentifierData(int $activity_id): ?array
{
$activity = $this->activityRepository->find($activity_id);

return [
'activity_identifier' => $activity->iati_identifier['activity_identifier'],
'iati_identifier_text' => $activity->organization->identifier . '-' . $activity->iati_identifier['activity_identifier'],
];
return $activity->iati_identifier;
}

/**
Expand Down
17 changes: 12 additions & 5 deletions app/IATI/Services/Activity/ActivityService.php
Original file line number Diff line number Diff line change
Expand Up @@ -108,19 +108,26 @@ public function getPaginatedActivities(int $page, array $queryParams): Collectio
*/
public function store($input): Model
{
$authUser = auth()->user();
$activityIdentifierOnly = $input['activity_identifier'];
$presentOrganizationIdentifier = $authUser->organization->identifier;
$iatiIdentifierText = $presentOrganizationIdentifier . '-' . $activityIdentifierOnly;

$activity_identifier = [
'activity_identifier' => $input['activity_identifier'],
'activity_identifier' => $activityIdentifierOnly,
'iati_identifier_text' => $iatiIdentifierText,
'present_organization_identifier' => $presentOrganizationIdentifier,
];

$activity_title = [
[
'narrative' => $input['narrative'],
'language' => $input['language'],
'language' => $input['language'],
],
];

$defaultElementStatus = getDefaultElementStatus();
$budgetNotProvided = Auth::user()->organization->settings->activity_default_values['budget_not_provided'] ?? '';
$budgetNotProvided = $authUser->organization->settings->activity_default_values['budget_not_provided'] ?? '';
$defaultElementStatus['budget'] = $budgetNotProvided === '1' || $defaultElementStatus['budget'];
$defaultValues = $this->getDefaultValues();
$defaultAidType = null;
Expand All @@ -142,10 +149,10 @@ public function store($input): Model
'default_finance_type' => isset($defaultValues['default_finance_type']) && !empty($defaultValues['default_finance_type']) ? (int) $defaultValues['default_finance_type'] : null,
'default_aid_type' => $defaultAidType,
'default_tied_status' => isset($defaultValues['default_tied_status']) && !empty($defaultValues['default_tied_status']) ? (int) $defaultValues['default_tied_status'] : null,
'org_id' => Auth::user()->organization_id,
'org_id' => $authUser->organization_id,
'element_status' => $defaultElementStatus,
'default_field_values' => $this->getDefaultValues(),
'reporting_org' => Auth::user()->organization->reporting_org,
'reporting_org' => $authUser->organization->reporting_org,
]);
}

Expand Down
17 changes: 10 additions & 7 deletions app/IATI/Services/ImportActivity/ImportCsvService.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
use App\IATI\Traits\FillDefaultValuesTrait;
use App\Imports\CsvToArray;
use Exception;
use Illuminate\Contracts\Container\BindingResolutionException;
use Illuminate\Filesystem\Filesystem;
use Illuminate\Session\SessionManager;
use Illuminate\Support\Arr;
Expand Down Expand Up @@ -185,25 +186,27 @@ public function localStorageFile($file, $filename): File
* @param $activities
*
* @return void
*
* @throws BindingResolutionException
* @throws \JsonException
*/
public function create($activities): void
{
$organizationId = Auth::user()->organization_id;
$userId = Auth::user()->id;
$authUser = Auth::user();
$organizationId = $authUser->organization_id;
$userId = $authUser->id;
$file = awsGetFile(sprintf('%s/%s/%s/%s', $this->csv_data_storage_path, $organizationId, $userId, self::VALID_CSV_FILE));
$contents = json_decode($file, true, 512, JSON_THROW_ON_ERROR);
$organizationIdentifier = $authUser->organization->identifier;

$organizationIdentifier = Arr::get(
$this->organizationRepo->getOrganizationData($organizationId)->toArray(),
'reporting_org.0.reporting_organization_identifier'
);
logger($this->organizationRepo->getOrganizationData($organizationId));

foreach ($activities as $value) {
$activity = unsetErrorFields($contents[$value]);
$activity['data']['organization_id'] = $organizationId;
$iati_identifier_text = $organizationIdentifier . '-' . Arr::get($activity, 'data.identifier.activity_identifier');
$activity['data']['organization_id'] = $organizationId;
$activity['data']['identifier']['iati_identifier_text'] = $iati_identifier_text;
$activity['data']['identifier']['present_organization_identifier'] = $organizationIdentifier;

if (Arr::get($activity, 'existence', false) && $this->activityRepo->getActivityWithIdentifier($organizationId, Arr::get($activity, 'data.identifier.activity_identifier'))) {
$oldActivity = $this->activityRepo->getActivityWithIdentifier($organizationId, Arr::get($activity, 'data.identifier.activity_identifier'));
Expand Down
5 changes: 5 additions & 0 deletions app/IATI/Services/ImportActivity/ImportXlsService.php
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,7 @@ protected function saveActivities($activities): void
foreach ($activities as $value) {
$activity = unsetErrorFields($contents[$value]);
$activityData = Arr::get($activity, 'data', []);

$organizationId = Auth::user()->organization->id;
$existingId = Arr::get($activity, 'existing', false);

Expand All @@ -221,13 +222,17 @@ protected function saveActivities($activities): void
}
} else {
$activityService = app()->make(ActivityService::class);
$organizationIdentifier = Auth::user()->organization->identifier;
$defaultValues = $activityService->getDefaultValues();

$activityData['org_id'] = $organizationId;
$activityData['upload_medium'] = 'xls';
$activityData['collaboration_type'] = isset($defaultValues['default_collaboration_type']) && !empty($defaultValues['default_collaboration_type']) ? (int) $defaultValues['default_collaboration_type'] : null;
$activityData['default_flow_type'] = isset($defaultValues['default_flow_type']) && !empty($defaultValues['default_flow_type']) ? (int) $defaultValues['default_flow_type'] : null;
$activityData['default_finance_type'] = isset($defaultValues['default_finance_type']) && !empty($defaultValues['default_finance_type']) ? (int) $defaultValues['default_finance_type'] : null;
$activityData['default_tied_status'] = isset($defaultValues['default_tied_status']) && !empty($defaultValues['default_tied_status']) ? (int) $defaultValues['default_tied_status'] : null;
$activityData['iati_identifier']['iati_identifier_text'] = $organizationIdentifier . '-' . $activityData['iati_identifier']['activity_identifier'];
$activityData['iati_identifier']['present_organization_identifier'] = $organizationIdentifier;

if (isset($defaultValues['default_aid_type']) && !empty($defaultValues['default_aid_type'])) {
$activityData['default_aid_type'] = [
Expand Down
5 changes: 5 additions & 0 deletions app/IATI/Services/ImportActivity/ImportXmlService.php
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@ public function create($activities): bool
foreach ($activities as $value) {
$activity = unsetErrorFields($contents[$value]);
$activityData = Arr::get($activity, 'data', []);

$organizationId = Auth::user()->organization->id;
$defaultFieldValues = Arr::get($activityData, 'default_field_values.0', []);

Expand All @@ -203,6 +204,10 @@ public function create($activities): bool
$this->importActivityErrorRepo->deleteImportError($oldActivity->id);
}
} else {
$organizationIdentifier = Auth::user()->organization->identifier;
$activityData['iati_identifier']['iati_identifier_text'] = $organizationIdentifier . '-' . $activityData['iati_identifier']['activity_identifier'];
$activityData['iati_identifier']['present_organization_identifier'] = $organizationIdentifier;

$storeActivity = $this->activityRepository->importXmlActivities(null, $activityData);

$this->saveTransactions(Arr::get($activityData, 'transactions'), $storeActivity->id, $defaultFieldValues);
Expand Down
Loading

0 comments on commit 5828dbd

Please sign in to comment.