diff --git a/changelog/67_UNRELEASED_xxxx-xx-xx.md b/changelog/67_UNRELEASED_xxxx-xx-xx.md index 41b14989..e3c86ede 100644 --- a/changelog/67_UNRELEASED_xxxx-xx-xx.md +++ b/changelog/67_UNRELEASED_xxxx-xx-xx.md @@ -80,7 +80,9 @@ ### Equipment -- xxx +- It's now possible to add multiple files (PDFs / manuals) to each equipment + - Define as many Userfields for the entity `equipment` and use the type `File` + - => Each of those File-Userfields will be shown as a separate tab on the equipment page ### Userfields diff --git a/public/viewjs/equipment.js b/public/viewjs/equipment.js index 0b135e88..ea4ec649 100644 --- a/public/viewjs/equipment.js +++ b/public/viewjs/equipment.js @@ -55,6 +55,39 @@ function DisplayEquipment(id) $("a[href='#description-tab']").tab("show"); } + + if (equipmentItem.userfields != null) + { + Grocy.Api.Get('objects/userfields?query[]=entity=equipment&query[]=type=file', + function(result) + { + $.each(result, function(key, userfield) + { + var userfieldFile = equipmentItem.userfields[userfield.name]; + if (userfieldFile != null && !userfieldFile.isEmpty()) + { + var pdfUrl = U('/files/userfiles/' + userfieldFile); + $("#file-userfield-" + userfield.name + "-embed").attr("src", pdfUrl); + $("#file-userfield-" + userfield.name + "-download-button").attr("href", pdfUrl); + $("#file-userfield-" + userfield.name + "-embed").removeClass("d-none"); + $("#file-userfield-" + userfield.name + "-download-button").removeClass("d-none"); + $("#file-userfield-" + userfield.name + "-empty-hint").addClass("d-none"); + ResizeResponsiveEmbeds(); + } + else + { + $("#file-userfield-" + userfield.name + "-embed").addClass("d-none"); + $("#file-userfield-" + userfield.name + "-download-button").addClass("d-none"); + $("#file-userfield-" + userfield.name + "-empty-hint").removeClass("d-none"); + } + });; + }, + function(xhr) + { + console.error(xhr); + } + ); + } }, function(xhr) { @@ -117,11 +150,14 @@ $(document).on('click', '.equipment-delete-button', function(e) }); }); -$("#selectedEquipmentInstructionManualToggleFullscreenButton").on('click', function(e) +$(".selectedEquipmentInstructionManualToggleFullscreenButton").on('click', function(e) { - $("#selectedEquipmentInstructionManualCard").toggleClass("fullscreen"); - $("#selectedEquipmentInstructionManualCard .card-header").toggleClass("fixed-top"); - $("#selectedEquipmentInstructionManualCard .card-body").toggleClass("mt-5"); + var button = $(e.currentTarget); + var card = button.closest(".selectedEquipmentInstructionManualCard"); + + card.toggleClass("fullscreen"); + card.find(".card-header").toggleClass("fixed-top"); + card.find(".card-body").toggleClass("mt-5"); $("body").toggleClass("fullscreen-card"); ResizeResponsiveEmbeds(true); }); diff --git a/views/components/userfields_tbody.blade.php b/views/components/userfields_tbody.blade.php index 354c9a94..c815fc97 100644 --- a/views/components/userfields_tbody.blade.php +++ b/views/components/userfields_tbody.blade.php @@ -1,7 +1,18 @@ +@php +if (!isset($excludeFieldTypes)) +{ +$excludeFieldTypes = []; +} +@endphp + @if($userfields && count($userfields) > 0) @foreach($userfields as $userfield) +@if(in_array($userfield->type, $excludeFieldTypes)) +@continue +@endif + @if($userfield->show_as_column_in_tables == 1) @php $userfieldObject = FindObjectInArrayByPropertyValue($userfieldValues, 'name', $userfield->name) @endphp @@ -26,10 +37,10 @@ @endphp {{ $title }} - @elseif($userfield->type == \Grocy\Services\UserfieldsService::USERFIELD_TYPE_FILE) + @elseif($userfield->type == \Grocy\Services\UserfieldsService::USERFIELD_TYPE_FILE && !empty($userfieldObject->value)) {{ base64_decode(explode('_', $userfieldObject->value)[1]) }} - @elseif($userfield->type == \Grocy\Services\UserfieldsService::USERFIELD_TYPE_IMAGE) + @elseif($userfield->type == \Grocy\Services\UserfieldsService::USERFIELD_TYPE_IMAGE && !empty($userfieldObject->value)) 0) @foreach($userfields as $userfield) +@if(in_array($userfield->type, $excludeFieldTypes)) +@continue +@endif + @if($userfield->show_as_column_in_tables == 1) {{ $userfield->caption }} @endif diff --git a/views/components/userfieldsform.blade.php b/views/components/userfieldsform.blade.php index 8bfc6543..9d7c3cce 100644 --- a/views/components/userfieldsform.blade.php +++ b/views/components/userfieldsform.blade.php @@ -176,7 +176,7 @@
+ class="input-group-text userfield-file-show d-none discrete-link">
@@ -201,7 +201,7 @@ {{ $userfield->name }} @endif diff --git a/views/equipment.blade.php b/views/equipment.blade.php index a7ee7cd4..bedd1dc4 100644 --- a/views/equipment.blade.php +++ b/views/equipment.blade.php @@ -70,7 +70,8 @@ {{ $__t('Name') }} @include('components.userfields_thead', array( - 'userfields' => $userfields + 'userfields' => $userfields, + 'excludeFieldTypes' => [\Grocy\Services\UserfieldsService::USERFIELD_TYPE_FILE] )) @@ -108,7 +109,8 @@ @include('components.userfields_tbody', array( 'userfields' => $userfields, - 'userfieldValues' => FindAllObjectsInArrayByPropertyValue($userfieldValues, 'object_id', $equipmentItem->id) + 'userfieldValues' => FindAllObjectsInArrayByPropertyValue($userfieldValues, 'object_id', $equipmentItem->id), + 'excludeFieldTypes' => [\Grocy\Services\UserfieldsService::USERFIELD_TYPE_FILE] )) @@ -129,16 +131,23 @@ data-toggle="tab" href="#description-tab">{{ $__t('Notes') }} + @foreach($userfields as $userfield) + @if($userfield->type == \Grocy\Services\UserfieldsService::USERFIELD_TYPE_FILE) + + @endif + @endforeach
- + @foreach($userfields as $userfield) + @if($userfield->type == \Grocy\Services\UserfieldsService::USERFIELD_TYPE_FILE) + + @endif + @endforeach