[Koha-patches] [PATCH 1/2] Bug 12716: Allow the import patrons form have drop-downs and datepickers
Tomas Cohen Arazi
tomascohen at gmail.com
Wed Aug 6 19:27:48 CEST 2014
To reproduce:
- Go to Tools > Import patrons
- Notice branchcode and categorycode don't have dropdown menus with
valid options.
- Notice dateofbirth, dateenrolled and dateexpiry don't have date-pickers
- Notice each input field is labeled with the column name instead of a
proper description.
To test:
- Apply the patch, go to Tools > Import patrons
- Notice branchcode and categorycode have dropdown menus with valid options,
and by default the empty value is selected.
- Notice that if you go into the dateofbirth, dateenrolled and dateexpiry
fields, a nice date picker widget appears.
- Notice each field is labeled with the field description, and that the
column name is conveniently shown at the right of the input field.
Important: test switching the ExtendedPatronAttributes syspref, and verify that
if enabled, the patron_attributes field appears, and also the checkbox selector
controlling the extended patron attributes import behaviour shows too.
Bonus points: Verify that on a different language, the descriptions get translated,
and the column names show correctly
Regards
To+
---
C4/Templates.pm | 47 +++++++++++++++++
.../intranet-tmpl/prog/en/css/staff-global.css | 6 +++
.../prog/en/modules/tools/import_borrowers.tt | 60 +++++++++++++++++++---
tools/import_borrowers.pl | 19 ++++---
4 files changed, 116 insertions(+), 16 deletions(-)
diff --git a/C4/Templates.pm b/C4/Templates.pm
index 16eeec1..6a9d48b 100644
--- a/C4/Templates.pm
+++ b/C4/Templates.pm
@@ -307,4 +307,51 @@ sub getlanguagecookie {
return $cookie;
}
+=head2 GetColumnDefs
+
+ my $columns = GetColumnDefs( $cgi )
+
+It is passed a CGI object and returns a hash of hashes containing
+the column names and descriptions for each table defined in the
+columns.def file corresponding to the CGI object.
+
+=cut
+
+sub GetColumnDefs {
+
+ my $query = shift;
+
+ my $columns = {};
+
+ my $htdocs = C4::Context->config('intrahtdocs');
+ my $columns_file = 'columns.def';
+
+ # Get theme and language to build the path to columns.def
+ my ($theme, $lang, $availablethemes) =
+ themelanguage($htdocs, 'about.tt', 'intranet', $query);
+ # Build columns.def path
+ my $path = "$htdocs/$theme/$lang/$columns_file";
+ my $fh;
+ if ( ! open ( $fh, q{<}, $path ) ) {
+ carp "Error opening $path. Check your templates.";
+ return;
+ }
+ # Loop through the columns.def file
+ while ( my $input = <$fh> ){
+ chomp $input;
+ if ( $input =~ m|<field name="(.*)">(.*)</field>| ) {
+ my ( $table, $column ) = split( '\.', $1);
+ my $description = $2;
+ # Initialize the table array if needed.
+ @{$columns->{ $table }} = () if ! defined $columns->{ $table };
+ # Push field and description
+ push @{$columns->{ $table }},
+ { field => $column, description => $description };
+ }
+ }
+ close $fh;
+
+ return $columns;
+}
+
1;
diff --git a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
index a4ef390..bbd8458 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
+++ b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
@@ -1844,6 +1844,12 @@ fieldset.rows+h3 {clear:both;padding-top:.5em;}
padding-bottom: 10px;
}
+.field_hint {
+ color: grey;
+ font-style: italic;
+ padding-left: 1em;
+}
+
.m880 {
display:block;
text-align:right;
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tt
index 40410f8..a0727b8 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tt
@@ -1,15 +1,27 @@
+[% USE Koha %]
[% INCLUDE 'doc-head-open.inc' %]
<title>Koha › Tools › Import patrons [% IF ( uploadborrowers ) %]› Results[% END %]</title>
[% INCLUDE 'doc-head-close.inc' %]
<style type="text/css">
- .yui-u fieldset.rows label.widelabel { width: 12em; }
+ .yui-u fieldset.rows .widelabel { width: 12em; }
+ label.description { width: 20em; }
.line_error { width: 100%; }
code { background-color: yellow; }
</style>
+<script type="text/javascript">
+//<![CDATA[
+ $(document).ready(function() {
+ [%# Make date fields have the datepicker %]
+ $("#dateenrolled").addClass('datepicker');
+ $("#dateexpiry").addClass('datepicker');
+ $("#dateofbirth").addClass('datepicker');
+ });
+</script>
</head>
<body id="tools_import_borrowers" class="tools">
[% INCLUDE 'header.inc' %]
[% INCLUDE 'patron-search.inc' %]
+[% INCLUDE 'calendar.inc' %]
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a> › <a href="/cgi-bin/koha/tools/import_borrowers.pl">Import patrons</a>[% IF ( uploadborrowers ) %] › Results[% END %]</div>
@@ -112,12 +124,44 @@
<fieldset class="rows">
<legend>Default values</legend>
<ol>
- [% FOREACH columnkey IN columnkeys %]
- <li>
- <label class="widelabel" for="[% columnkey.key %]">[% columnkey.key %]: </label>
- <input id="[% columnkey.key %]" name="[% columnkey.key %]" />
- </li>
- [% END %]
+[% FOREACH borrower_field IN borrower_fields %]
+ [% SWITCH borrower_field.field %]
+ [% CASE 'branchcode' %]
+ <li>
+ <label class="description" for="branchcode">[% borrower_field.description %]: </label>
+ <select id="branchcode" name="branchcode">
+ <option value="" selected="selected"></option>
+ [% FOREACH branch IN branches %]
+ <option value="[% branch.branchcode %]">
+ [% branch.branchname %]</option>
+ [% END %]
+ </select><span class="field_hint">[% borrower_field.field %]</span>
+ </li>
+ [% CASE 'categorycode' %]
+ <li>
+ <label class="description" for="categorycode">[% borrower_field.description %]: </label>
+ <select id="categorycode" name="categorycode">
+ <option value="" selected="selected"></option>
+ [% FOREACH category IN categories %]
+ <option value="[% category.categorycode %]">
+ [% category.description %]</option>
+ [% END %]
+ </select><span class="field_hint">[% borrower_field.field %]</span>
+ </li>
+ [% CASE %]
+ <li>
+ <label class="description" for="[% borrower_field.field %]">[% borrower_field.description %]: </label>
+ <input id="[% borrower_field.field %]" name="[% borrower_field.field %]" /><span class="field_hint">[% borrower_field.field %]</span>
+ </li>
+ [% END %]
+[% END %]
+[% IF ( Koha.Preference('ExtendedPatronAttributes') == 1 ) %]
+ <li>
+ <label class="description" for="patron_attributes">Patron attributes: </label>
+ <input id="patron_attributes" name="patron_attributes" />
+ <span class="field_hint">patron_attributes</span>
+ </li>
+[% END %]
</ol></fieldset>
<fieldset class="rows">
<legend>If matching record is already in the borrowers table:</legend>
@@ -129,7 +173,7 @@
</li>
</ol>
</fieldset>
- [% IF ( ExtendedPatronAttributes ) %]
+ [% IF ( Koha.Preference('ExtendedPatronAttributes') == 1 ) %]
<fieldset class="rows">
<legend>Patron attributes</legend>
<ol><li class="radio">
diff --git a/tools/import_borrowers.pl b/tools/import_borrowers.pl
index abbef70..d99db2f 100755
--- a/tools/import_borrowers.pl
+++ b/tools/import_borrowers.pl
@@ -41,11 +41,13 @@ use C4::Auth;
use C4::Output;
use C4::Dates qw(format_date_in_iso);
use C4::Context;
-use C4::Branch qw(GetBranchName);
+use C4::Branch qw/GetBranchesLoop GetBranchName/;
use C4::Members;
use C4::Members::Attributes qw(:all);
use C4::Members::AttributeTypes;
use C4::Members::Messaging;
+use C4::Reports::Guided;
+use C4::Templates;
use Koha::Borrower::Debarments;
use Text::CSV;
@@ -60,10 +62,6 @@ my (@errors, @feedback);
my $extended = C4::Context->preference('ExtendedPatronAttributes');
my $set_messaging_prefs = C4::Context->preference('EnhancedMessagingPreferences');
my @columnkeys = C4::Members::columns();
-if ($extended) {
- push @columnkeys, 'patron_attributes';
-}
-my $columnkeystpl = [ map { {'key' => $_} } grep {$_ ne 'borrowernumber' } @columnkeys ]; # ref. to array of hashrefs.
my $input = CGI->new();
our $csv = Text::CSV->new({binary => 1}); # binary needed for non-ASCII Unicode
@@ -78,7 +76,14 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user({
debug => 1,
});
-$template->param(columnkeys => $columnkeystpl);
+# get the branches and pass them to the template
+my $branches = GetBranchesLoop();
+$template->param( branches => $branches ) if ( $branches );
+# get the patron categories and pass them to the template
+my $categories = GetBorrowercategoryList();
+$template->param( categories => $categories ) if ( $categories );
+my $columns = C4::Templates::GetColumnDefs( $input );
+$template->param( borrower_fields => $columns->{borrowers} );
if ($input->param('sample')) {
print $input->header(
@@ -98,8 +103,6 @@ my $overwrite_cardnumber = $input->param('overwrite_cardnumber');
$template->param( SCRIPT_NAME => $ENV{'SCRIPT_NAME'} );
-($extended) and $template->param(ExtendedPatronAttributes => 1);
-
if ( $uploadborrowers && length($uploadborrowers) > 0 ) {
push @feedback, {feedback=>1, name=>'filename', value=>$uploadborrowers, filename=>$uploadborrowers};
my $handle = $input->upload('uploadborrowers');
--
1.9.1
More information about the Koha-patches
mailing list