The C4/Biblio.pm subroutines PrepHostMarcField and prepare_host_field both do the same thing, so should be merged.
In addition: 1) prepare_host_field: if ( $field = $host->field('100') || $host->field('110') || $host->field('11') ) - the '11' should be '111' 2) prepare_host_field has a 240 -> 773b, which should be 250a -> 773b, as it is in PrepHostMarcField 3) There's a difference in how the 773a is set: prepare_host_field uses 100ab | 110ab | 11ab, but PrepHostMarcField uses 100a | 110a | 111a
*** Bug 30793 has been marked as a duplicate of this bug. ***
I remove C4::Biblio::prepare_host_field in bug 37305, opting to use the tested method I add to Koha::Biblio as `generate_marc_host_field` in bug 29560. 1) The 111 vs 11 mistake in prepare_marc_host is fixed in generate_marc_host_field already. 2) We set 773b t 250ab and 773s to 240a in generate_marc_host_field 3) We stick to 1XXab for 773a in generate_marc_host_field The outstanding differences between PrepHostMarcField, for EasyAnalytics, and generate_marc_host_field are: 1) Subfield 0 is set to the host biblionumber 2) Subfield 9 is set to the host itemnumber 3) Subfield o is set to the host item barcode
Created attachment 183766 [details] [review] Bug 22439: Remove C4::Biblio::PrepHostMarcField and consolidate with Koha::Biblio::generate_marc_host_field This patch removes the PrepHostMarcField function from C4::Biblio and enhances the modern generate_marc_host_field method in Koha::Biblio to handle item-specific data when needed. The refactoring eliminates code duplication while maintaining all existing functionality. Item-specific subfields (barcode, itemnumber, biblionumber) are now only included when EasyAnalyticalRecords is enabled, ensuring the implementation continues to be compliant with MARC standards. Changes: - Remove PrepHostMarcField function from C4::Biblio - Enhance generate_marc_host_field to accept optional item parameter - Update cataloguing/addbiblio.pl to use the modern method - Update cataloguing/linkitem.pl to use the modern method - Add EasyAnalyticalRecords preference checking to ensure we only add the additional non-standard fields when the preference is enabled. Test plan: 1. Apply patch 2. Enable EasyAnalyticalRecords system preference 3. Create a parent bibliographic record with items 4. Create a child analytical record: - Go to Cataloging > New Record - Use "Add child record" option for the parent record - Choose a specific item from the parent record - Verify the 773 field contains subfields $0 (biblionumber), $9 (itemnumber), $o (barcode) 5. Test the linkitem.pl functionality: - Create an analytical record without using "Add child record" - Go to cataloguing/linkitem.pl with appropriate parameters - Link an item using its barcode - Verify the 773 field is properly populated 6. Disable EasyAnalyticalRecords system preference 7. Repeat steps 4-5 and verify that subfields $0, $9, and $o are NOT added to the 773 field 8. Verify that other 773 subfields (title, author, etc.) are still properly populated 9. Test with both MARC21 and UNIMARC if available 10. Run tests: prove t/db_dependent/Koha/Biblio.t
Created attachment 183767 [details] [review] Bug 22439: Add comprehensive tests for generate_marc_host_field item parameter This patch adds test coverage for the new item parameter functionality in generate_marc_host_field, ensuring proper behavior with the EasyAnalyticalRecords system preference. Test coverage includes: - MARC21 item functionality with EasyAnalyticalRecords enabled/disabled - UNIMARC item functionality with proper biblionumber precedence - Item-specific subfields: $0 (biblionumber), $9 (itemnumber), $o (barcode) - Verification that item subfields are only added when EasyAnalyticalRecords is enabled - Backward compatibility when no item parameter is provided The tests verify that biblionumber takes precedence over control number in UNIMARC when using item-specific data, matching the original PrepHostMarcField behavior and ensuring compliance with the easy analytics workflow. To test: prove t/db_dependent/Koha/Biblio.t
*** Bug 37996 has been marked as a duplicate of this bug. ***
Created attachment 184035 [details] [review] Bug 22439: Remove C4::Biblio::PrepHostMarcField and consolidate with Koha::Biblio::generate_marc_host_field This patch removes the PrepHostMarcField function from C4::Biblio and enhances the modern generate_marc_host_field method in Koha::Biblio to handle item-specific data when needed. The refactoring eliminates code duplication while maintaining all existing functionality. Item-specific subfields (barcode, itemnumber, biblionumber) are now only included when EasyAnalyticalRecords is enabled, ensuring the implementation continues to be compliant with MARC standards. Changes: - Remove PrepHostMarcField function from C4::Biblio - Enhance generate_marc_host_field to accept optional item parameter - Update cataloguing/addbiblio.pl to use the modern method - Update cataloguing/linkitem.pl to use the modern method - Add EasyAnalyticalRecords preference checking to ensure we only add the additional non-standard fields when the preference is enabled. Test plan: 1. Apply patch 2. Enable EasyAnalyticalRecords system preference 3. Create a parent bibliographic record with items 4. Create a child analytical record: - Go to Cataloging > New Record - Use "Add child record" option for the parent record - Choose a specific item from the parent record - Verify the 773 field contains subfields $0 (biblionumber), $9 (itemnumber), $o (barcode) 5. Test the linkitem.pl functionality: - Create an analytical record without using "Add child record" - Go to cataloguing/linkitem.pl with appropriate parameters - Link an item using its barcode - Verify the 773 field is properly populated 6. Disable EasyAnalyticalRecords system preference 7. Repeat steps 4-5 and verify that subfields $0, $9, and $o are NOT added to the 773 field 8. Verify that other 773 subfields (title, author, etc.) are still properly populated 9. Test with both MARC21 and UNIMARC if available 10. Run tests: prove t/db_dependent/Koha/Biblio.t Sponsored-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Created attachment 184036 [details] [review] Bug 22439: Add comprehensive tests for generate_marc_host_field item parameter This patch adds test coverage for the new item parameter functionality in generate_marc_host_field, ensuring proper behavior with the EasyAnalyticalRecords system preference. Test coverage includes: - MARC21 item functionality with EasyAnalyticalRecords enabled/disabled - UNIMARC item functionality with proper biblionumber precedence - Item-specific subfields: $0 (biblionumber), $9 (itemnumber), $o (barcode) - Verification that item subfields are only added when EasyAnalyticalRecords is enabled - Backward compatibility when no item parameter is provided The tests verify that biblionumber takes precedence over control number in UNIMARC when using item-specific data, matching the original PrepHostMarcField behavior and ensuring compliance with the easy analytics workflow. To test: prove t/db_dependent/Koha/Biblio.t
Automated patch testing results: [PASS] ALL PATCHES APPLY CLEANLY All patches apply successfully to the current codebase. **Patch Results:** [PASS] Bug-22439-Add-comprehensive-tests-for-generatemarc.patch (ID: 184036) Status: SUCCESS Dependencies failed: 39545 (failed to apply) + Patch applies cleanly [PASS] Bug-22439-Remove-C4BiblioPrepHostMarcField-and-con.patch (ID: 184035) Status: SUCCESS Dependencies failed: 39545 (failed to apply) + Patch applies cleanly **Dependencies:** 39545 --- This is an automated message from the patch testing system. Tested against branch: main
Noted
Hi Martin, On KTD, In the test plan step 4: it says to use "Add child record" but I couldn't find this button, only "link to host record" could be found (either I'm dumb, or it was removed?). Step 5 worked as a charm. after step 6 and EasyAnalyticalRecords have been disabled, I don't have access to the button "Link to host record" so I cannot repeat step 5. Maybe it's just the test plan which needs to be updated? If that is so then I'm happy to signoff! Unit tests are fine/not complaining! Best, Arthur
(In reply to Arthur Suzuki from comment #11) > Hi Martin, > On KTD, > In the test plan step 4: > it says to use "Add child record" but I couldn't find this button, only > "link to host record" could be found (either I'm dumb, or it was removed?). > > Step 5 worked as a charm. > > after step 6 and EasyAnalyticalRecords have been disabled, I don't have > access to the button "Link to host record" so I cannot repeat step 5. > > Maybe it's just the test plan which needs to be updated? > If that is so then I'm happy to signoff! > Unit tests are fine/not complaining! > Best, > Arthur After doing this from BZ37710 : 2 - Create a bundle on an item by changing the 7th character of the leader to c (go to the marc, click on the button at the right of the field 000 and change the bibliographical level to collection). I was able to access the "Add child record" button from the parent record. I think that is worth documenting!
Also, Just found out that using the "manage bundle" button from the holdings table to add items to the bundle doesn't properly creates the subfields. This is because it uses the API and the marc field logic is not properly implemented there. See Koha/REST/V1/Items.pm L324 -> generate_marc_host_field should be called before calling link_marc_host.
Created attachment 190955 [details] [review] Bug 22439: (QA follow-up) add generate_marc_host_field to api/v1/items
Created attachment 190956 [details] [review] Bug 22439: (QA follow-up) add generate_marc_host_field to api/v1/items