From c448b81a2d451c8faefa0121f487e98d244cc2be Mon Sep 17 00:00:00 2001
From: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Date: Mon, 7 Feb 2022 09:26:12 +0100
Subject: [PATCH] Bug 30035: Fix month name in prediction pattern

We are using %B to display the month name but it seems that using the
CLDR pattern LLLL would be more appropriated.
https://metacpan.org/pod/DateTime#CLDR-Patterns
%B   - The full month name.
LLLL - The wide stand-alone form for the month.

For instance in Catalan:
https://metacpan.org/pod/DateTime::Locale::ca
%B will display "de gener" when LLLL will be "gener"

Test plan:
Create a new numbering pattern:
Home > Serials > Numbering patterns > New numbering pattern
Numbering formula: {X}
Label: monthname
Add: 1
Every: 1
Set back to: 1
When more than: 999
Formatting: Name of month
And test it at the bottom of the form
Locale: Catalan
The number column should contain "gener", not "de gener"
Test other locales and confirm that the output is correct (no change
expected for English, French and Spanish for instance).

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
---
 C4/Serials.pm            |  2 +-
 t/db_dependent/Serials.t | 21 ++++++++++++++++++++-
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/C4/Serials.pm b/C4/Serials.pm
index 72d16590ea..ad772fecac 100644
--- a/C4/Serials.pm
+++ b/C4/Serials.pm
@@ -2511,7 +2511,7 @@ sub _numeration {
             locale  => $locale,
         );
         $string = $num_type =~ /^monthname$/
-            ? $dt->strftime("%B")
+            ? $dt->format_cldr( "LLLL" )
             : $dt->strftime("%b");
     } elsif ( $num_type =~ /^season$/ ) {
         my @seasons= qw( Spring Summer Fall Winter );
diff --git a/t/db_dependent/Serials.t b/t/db_dependent/Serials.t
index 816a8a9714..293905d931 100755
--- a/t/db_dependent/Serials.t
+++ b/t/db_dependent/Serials.t
@@ -16,7 +16,7 @@ use Koha::DateUtils qw( dt_from_string output_pref );
 use Koha::Acquisition::Booksellers;
 use t::lib::Mocks;
 use t::lib::TestBuilder;
-use Test::More tests => 49;
+use Test::More tests => 50;
 
 BEGIN {
     use_ok('C4::Serials', qw( updateClaim NewSubscription GetSubscription GetSubscriptionHistoryFromSubscriptionId SearchSubscriptions ModSubscription GetExpirationDate GetSerials GetSerialInformation NewIssue AddItem2Serial DelSubscription GetFullSubscription PrepareSerialsData GetSubscriptionsFromBiblionumber ModSubscriptionHistory GetSerials2 GetLatestSerials GetNextSeq GetSeq CountSubscriptionFromBiblionumber ModSerialStatus findSerialsByStatus HasSubscriptionStrictlyExpired HasSubscriptionExpired GetLateOrMissingIssues check_routing addroutingmember GetNextDate ));
@@ -451,3 +451,22 @@ subtest "NewSubscription|ModSubscription" => sub {
     is( $serials->count, 1, "Still only one serial" );
     is( $serials->next->biblionumber, $biblio_2->biblionumber, 'ModSubscription should have updated serial.biblionumber');
 };
+
+subtest "_numeration" => sub {
+
+    plan tests => 6;
+
+    my $s = C4::Serials::_numeration(0, 'monthname', 'cat');
+    is( $s, "gener" );
+    $s = C4::Serials::_numeration(0, 'monthname', 'es');
+    is( $s, "enero" );
+    $s = C4::Serials::_numeration(0, 'monthname', 'fr');
+    is( $s, "janvier" );
+
+    $s = C4::Serials::_numeration(0, 'monthabrv', 'cat');
+    is( $s, "de gen." );
+    $s = C4::Serials::_numeration(0, 'monthabrv', 'es');
+    is( $s, "ene" );
+    $s = C4::Serials::_numeration(0, 'monthabrv', 'fr');
+    is( $s, "janv." );
+};
-- 
2.30.2