[Koha-patches] commit 96869b85b23c2a9c023865ada44cc264bfff16b0

Henri-Damien LAURENT henridamien at koha-fr.org
Thu Apr 24 10:05:48 CEST 2008


    Adding Recent Acquisitions page

diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/recentacquisitions.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/recentacquisitions.tmpl
new file mode 100644
index 0000000..cf49984
--- /dev/null
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/recentacquisitions.tmpl
@@ -0,0 +1,102 @@
+<!-- TMPL_INCLUDE NAME="doc-head-open.inc" -->
+<title>Koha &rsaquo; Recent Acquisitions <!-- TMPL_IF NAME="show_list" -->&rsaquo; Results<!-- TMPL_ELSE -->&rsaquo; Select<!-- /TMPL_IF --></title>
+<!-- TMPL_INCLUDE NAME="doc-head-close.inc" -->
+<!-- TMPL_INCLUDE NAME="calendar.inc" -->
+</head>
+<body>
+<!-- TMPL_INCLUDE NAME="header.inc" -->
+<!-- TMPL_INCLUDE NAME="cat-search.inc" -->
+
+<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a> <!-- TMPL_IF NAME="show_list" -->&rsaquo; <a href="/cgi-bin/koha/tools/acquisitionsrecentes.pl">Recent Acquisitions</a> &rsaquo; Results<!-- TMPL_ELSE -->&rsaquo; Recent Acquisitions<!-- /TMPL_IF --></div>
+
+<div id="doc3" class="yui-t2">
+   
+   <div id="bd">
+	<div id="yui-main">
+	<div class="yui-b">
+
+<!-- TMPL_IF NAME="show_list" -->
+  <h1>Recent Acquisitions</h1>
+  <!-- TMPL_LOOP NAME="loopacquisitions" -->
+  <a href="#<!--TMPL_VAR Name="titlecode"-->"><!--TMPL_VAR Name="title"--></a><br />
+  <!-- /TMPL_LOOP -->
+ 
+	<!-- TMPL_LOOP NAME="loopacquisitions" -->
+  <h2><a name="<!--TMPL_VAR Name="titlecode"-->"><!--TMPL_VAR Name="title"--></a></h2>
+  <!-- TMPL_LOOP NAME="loopdata" -->
+    <!--TMPL_VAR Name="summary"--><br /> <br/>
+  <!-- /TMPL_LOOP-->
+	<!-- /TMPL_LOOP -->
+<!-- TMPL_ELSE -->
+	<form method="post" action="/cgi-bin/koha/tools/recentacquisitions.pl">
+	<fieldset class="rows"><legend>Recent Acquisitions</legend>
+                <p>From <input type="text" readonly="readonly" size="10" id="datebegin" name="datebegin" value="<!--TMPL_VAR Name="datebegin"-->"/>
+                   <script type="text/javascript">
+				   //<![CDATA[
+                    Calendar.setup(
+                        {
+                            inputField : "datebegin",
+                            ifFormat : "<!-- TMPL_VAR NAME="DHTMLcalendar_dateformat" -->",
+                            button : "openCalendarDateBegin",
+                        }
+                    );
+					//]]>
+                    </script>
+                    To <input readonly="readonly" size="10" id="dateend" name="dateend" value="<!--TMPL_VAR Name="dateend"-->" type="text" />
+                        
+                          <script type="text/javascript">
+						  //<![CDATA[ 
+                            Calendar.setup(
+                                {
+                                    inputField : "dateend",
+                                    ifFormat : "<!-- TMPL_VAR NAME="DHTMLcalendar_dateformat" -->",
+                                    button : "openCalendarDateEnd",
+                                }
+                            );
+							//]]>
+                </script></p> 
+   <p>List By : <select name="criteria">
+            <option value=""> None</option>
+            <option value="branchcode"> branch</option>
+            <option value="itemcallnumber" selected="selected"> itemcallnumber</option>
+            <option value="title"> Title</option>
+            </select>
+      Authorised Value attached : <select name="authvaluelist">
+            <option value="">None</option>
+            <option value="CatDom" selected="selected">Domaine</option>      
+            </select></p>
+   <p>Limit type to: match any of the following:
+    <table>
+        <tr>
+      <!--TMPL_LOOP Name="itemtypeloop"-->
+        <td>
+        <!-- TMPL_IF name="imageurl"--><img border="0" src="<!--TMPL_VAR Name="imageurl" -->" alt="<!--TMPL_VAR Name="description" -->" /><!-- /TMPL_IF -->
+    <input type="checkbox" id="mc-<!--TMPL_VAR Name="number" -->" name="itemtypes" value="<!--TMPL_VAR Name="code" -->" />&nbsp;
+        <label for="mc-<!--TMPL_VAR Name="number" -->"><!--TMPL_VAR Name="description" --></label></td>
+        <!-- TMPL_UNLESS name="count5" --></tr><tr><!-- /TMPL_UNLESS -->
+      <!--/TMPL_LOOP-->
+      </tr>
+    </table>     
+   </p>
+   <p>Order By : <select name="orderby">
+            <option value=""> </option>
+            <option value="date_desc"> date desc</option>
+            <option value="title"> Title</option>
+            </select></p>
+      
+                   
+  </fieldset>
+	<fieldset class="action">
+	<input type="submit" value="Submit" />
+	<input type="hidden" name="op" value="show_list" />
+	</fieldset>
+	</form>
+<!-- /TMPL_IF -->
+
+</div>
+</div>
+<div class="yui-b">
+<!-- TMPL_INCLUDE NAME="reports-menu.inc" -->
+</div>
+</div>
+<!-- TMPL_INCLUDE NAME="intranet-bottom.inc" -->
\ No newline at end of file
diff --git a/tools/recentacquisitions.pl b/tools/recentacquisitions.pl
new file mode 100755
index 0000000..090c707
--- /dev/null
+++ b/tools/recentacquisitions.pl
@@ -0,0 +1,211 @@
+#!/usr/bin/perl
+
+use strict;
+use C4::Context;
+use C4::Biblio;
+use MARC::File::XML;
+use XML::LibXML;
+use XML::LibXSLT;
+use CGI;
+use C4::Dates;
+use Date::Calc;
+use C4::Auth;
+use C4::Output;
+use C4::Koha;
+
+sub Summary {
+#prendre le XML
+#Le parser avec le xsl
+my $recorddata =shift @_;
+my 
+$marc=MARC::Record::new_from_xml($recorddata,"utf-8",C4::Context->preference("marcflavour"));
+my $str="<b>".$marc->subfield('200',"a")."</b>" if $marc->subfield('200','a');
+$str.= " <i>".$marc->subfield('200',"e")."</i> " if $marc->subfield('200','a');
+if ($marc->field('200')){
+$str.=" / ";
+foreach ($marc->field('200')->subfield("f")) {
+$str.=$_." ; ";
+}
+$str=~s/ ; $/. /; 
+}
+if ($marc->subfield('200','g')){
+$str.=" ; ";
+foreach ($marc->field('200')->subfield("g")){
+$str.=$_." ; ";
+} 
+$str=~s/ ; $/. /; 
+}
+if ($marc->subfield('461','t')){
+$str.="- In ".$marc->subfield('461','t');
+$str.=" ; ".$marc->subfield('461','x') if $marc->subfield('461','x');
+}
+$str.=" - ".$marc->subfield('210',"a")." " if $marc->subfield('210','a');
+$str.=" : ".$marc->subfield('210',"c")." " if $marc->subfield('210','c');
+$str.=", ".$marc->subfield('210',"d")." " if $marc->subfield('210','d');
+if ($marc->subfield('215','a')){
+$str.=" - ".$marc->subfield('215','a');
+$str.=" ; ".$marc->subfield('215','d') if $marc->subfield('215','d');
+$str.=" ; ".$marc->subfield('215','c') if $marc->subfield('215','c');
+$str.=" ; ".$marc->subfield('215','e') if $marc->subfield('215','e');
+}
+foreach ($marc->field('300')){
+$str.=" - ";
+foreach ($_->subfield("a")){
+$str.=$_."; "
+} 
+}
+my $itemtypes=GetItemTypes;
+$str.=" - <u>".$itemtypes->{$marc->subfield('200','b')}->{'description'}."</u> ";
+$str.="<br />\n";
+$str.="".GetAuthorisedValueDesc(
+    '','', $marc->subfield('309','a') ,'','','Level')." -\n" if ($marc->subfield('309','a'));
+$str.="".GetAuthorisedValueDesc(
+    '','', $marc->subfield('327','a') ,'','','Content')." -\n" if ($marc->subfield('327','a'));
+$str.="".GetAuthorisedValueDesc(
+    '','', $marc->subfield('333','a') ,'','','Rlevel')." <br />\n" if ($marc->subfield('333','a'));
+$str.="<i>".$marc->subfield('330','a')."</i> <br />\n" if ($marc->subfield('330','a'));
+$str.="<i>".$marc->subfield('686','a')."</i> ";
+
+return $str;
+}
+
+
+
+
+my $query= new CGI;
+my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
+    {
+        template_name   => "tools/recentacquisitions.tmpl",
+        query           => $query,
+        type            => "intranet",
+        authnotrequired => 0,
+        flagsrequired   => {},
+        debug           => 1,
+    }
+);
+
+my $op = $query->param('op');
+if ($op eq "show_list"){
+    #Entrées :
+    #$datebegin
+    #dateend
+    #period
+    #itemtypes
+    #itemcallnumbers
+    #criteria
+    my $datebegin = C4::Dates->new($query->param('datebegin'));
+    my $dateend = C4::Dates->new($query->param('dateend')) if ($query->param('dateend'));
+    my $orderby = $query->param('orderby') if ($query->param('orderby'));
+    my $criteria = $query->param('criteria');
+    my @itemtypes = $query->param('itemtypes');
+    my @criteriavalues = $query->param('criteriavalues');
+    my $authorisedvaluelist = $query->param('authvaluelist');
+    
+    my $dbh=C4::Context->dbh;
+    #initialisations des variables
+    my $str=qq|
+    SELECT marcxml 
+    FROM biblio 
+    LEFT JOIN biblioitems ON biblioitems.biblionumber=biblio.biblionumber
+    LEFT JOIN items ON items.biblionumber=biblio.biblionumber
+    WHERE datecreated>=?
+    |;
+    my (@params, at loopcriteria);
+    push @params, $datebegin->output("iso");
+    if ($dateend){
+    $str .= "AND datecreated<=? ";
+    push @params,$dateend->output("iso");
+    }
+    if (scalar(@itemtypes)>0){
+    $str .= "AND biblioitems.itemtype IN (?".( ',?' x scalar @itemtypes - 1 ).") ";
+    map{push @params,$_} @itemtypes;
+    }
+    my %authvalues;
+    if ($authorisedvaluelist){
+    my $processauthvalues=GetAuthorisedValues($authorisedvaluelist);  
+    map{$authvalues{$_->{"authorised_value"}}=$_->{'lib'}} @$processauthvalues;
+    @loopcriteria=keys %authvalues;
+    }
+    if ($criteria =~/itemtype/){
+        $str .= "AND biblioitems.itemtype=? ";
+        @loopcriteria= @itemtypes;
+    } elsif ($criteria=~/itemcallnumber/){
+        $str .= "AND items.itemcallnumber LIKE CONCAT(?,'%') ";
+        @loopcriteria= @criteriavalues unless (scalar(@loopcriteria)>0);
+        @loopcriteria=("AA".."zz") unless (scalar(@loopcriteria)>0);  
+    } else {
+        $str .= "AND biblio.title LIKE CONCAT(?,'%') ";
+        @loopcriteria= @criteriavalues unless (scalar(@loopcriteria)>0);
+        @loopcriteria=("A".."z") unless (scalar(@loopcriteria)>0);  
+    }
+    if ($orderby =~/date_desc/){
+        $str.="ORDER BY datecreated DESC";
+    } else {
+        $str.="ORDER BY title";
+    }
+    warn "$str";  
+    my $qdataacquisitions=$dbh->prepare($str);
+    #Lire le fichier XSLT
+    #Si fichier inexistant, sortir en erreur 
+    #En faire un parser
+    
+    my @loopacquisitions;
+    foreach my $value(@loopcriteria){
+        push @params,$value;
+        my %cell;
+        if (%authvalues && $authvalues{$value}){
+            $cell{"title"}=$authvalues{$value};
+            $cell{"titlecode"}=$value;
+        }else {
+            $cell{"title"}=$value;
+            $cell{"titlecode"}=$value;
+        }  
+        eval{$qdataacquisitions->execute(@params);};
+        warn @params;  
+        if ($@){ warn "recentacquisitions Error :$@";}
+        else {
+        my @loopdata;
+        while (my $data=$qdataacquisitions->fetchrow_hashref){
+        #mettre le résultat en sortie
+        push @loopdata, {"summary"=>Summary( $data->{'marcxml'} ) };
+        }
+        $cell{"loopdata"}=\@loopdata;
+        }
+        push @loopacquisitions,\%cell if (scalar(@{$cell{loopdata}})>0);
+        pop @params;
+    }
+    $qdataacquisitions->finish;  
+    $template->param(loopacquisitions=>\@loopacquisitions,
+                     show_list=>1);
+} else {
+    my $period=C4::Context->preference("recentacquisitionregularPeriod")||30;
+    my $dateend = C4::Dates->new();
+    my @dateend=Date::Calc::Today;
+    my @datebegin = Date::Calc::Add_Delta_Days(@dateend,-$period) if ($period);
+    my $datebegin = C4::Dates->new(sprintf("%04d-%02d-%02d", at datebegin[0..2]),'iso');
+    my $itemtypes = GetItemTypes;
+    my @itemtypesloop;
+    my $selected=1;
+    my $cnt;
+    my $imgdir = getitemtypeimagesrc();
+    foreach my $thisitemtype ( sort {$itemtypes->{$a}->{'description'} cmp $itemtypes->{$b}->{'description'} } keys %$itemtypes ) {
+        my %row =(  number=>$cnt++,
+                    imageurl=> $itemtypes->{$thisitemtype}->{'imageurl'}?($imgdir."/".$itemtypes->{$thisitemtype}->{'imageurl'}):"",
+                    code => $thisitemtype,
+                    selected => $selected,
+                    description => $itemtypes->{$thisitemtype}->{'description'},
+                    count5 => $cnt % 4,
+                );
+        $selected = 0 if ($selected) ;
+        push @itemtypesloop, \%row;
+    }
+    $template->param(datebegin=>$datebegin->output("syspref"),
+                     dateend=>$dateend->output("syspref"),);
+    $template->param(period=>$period,
+                     itemtypeloop=>\@itemtypesloop,
+                     DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),        
+                    );
+          
+}
+output_html_with_http_headers $query, $cookie, $template->output;
+



More information about the Koha-patches mailing list