]> Frank Brehm's Git Trees - books.git/commitdiff
Verlagsliste ausgeben
authorFrank Brehm <frank@brehm-online.com>
Tue, 9 Jun 2009 21:16:39 +0000 (21:16 +0000)
committerFrank Brehm <frank@brehm-online.com>
Tue, 9 Jun 2009 21:16:39 +0000 (21:16 +0000)
lib/FrBr/Books/Controller/Verlag.pm
lib/FrBr/Books/Db/Verlage.pm
lib/FrBr/Books/Util/Author.pm
lib/FrBr/Books/Util/Verlag.pm
root/src/autor/styles.css
root/src/verlag/list.tt2 [new file with mode: 0644]
root/src/verlag/styles.css

index 0eba0837f490d243782c99d6134d3ab768c020df..7159bab3eb6269a67cf715f4c11e769f52f415fc 100644 (file)
@@ -82,6 +82,33 @@ sub default : Private {
 
 #-------------------------------------------------------
 
+=head2 list
+    
+Sucht alle Verlage als Objekt zusammen und übergibt das verlag/list.tt2 zur Darstellung.
+    
+=cut
+     
+sub list : Local {
+
+    my ($self, $c) = @_;
+    my $K = ( caller(0) )[3] . "(): ";
+    $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
+
+    push @{ $c->stash->{'menu_path'} }, {
+        'path' => $c->web_path("/verlag/list"),
+        'name' => "Liste"
+    };
+
+    my $liste = get_verlagsliste( $c, 'get_books' => 1 );
+    $c->log->debug( get_output_string( $K, "Erhaltene Liste der Verlage: ", $liste ) ) if $c->stash->{'debug_level'} >= 2;
+    $c->stash->{'verlage'} = $liste;
+
+    $c->stash->{'template'} = 'verlag/list.tt2';
+
+}
+
+#-------------------------------------------------------
+
 =head2 form_new( )
 
 Erstellen eines neuen Verlages.
index 9624090734235e639ec42a2bce9e87ef895ab823..230d32cf473f8cf49a5954d4a14cb9b5bd113b3d 100644 (file)
@@ -18,14 +18,10 @@ __PACKAGE__->add_columns(
 __PACKAGE__->set_primary_key("id");
 __PACKAGE__->add_unique_constraint("name_short", ["name_short"]);
 
+__PACKAGE__->has_many( 'buecher' => 'FrBr::Books::Db::Buecher', { 'foreign.verlags_id' => 'self.id' } );
 
-# Created by DBIx::Class::Schema::Loader v0.04004 @ 2008-03-17 17:53:52
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:DAa/d3XMLm6o69u4vod7zA
-
-
-# You can replace this text with custom content, and it will be preserved on regeneration
 1;
 
 __END__
 
-# vim: noai : ts=4 fenc=utf-8 filetype=perl expandtab :
+# vim: noai : ts=4 fenc=utf-8 filetype=perl
index 1b350a7cffa070579770403fa9ce595c16bc0016..61e7b0b5c16813af22a76397eb211b3d681aa961 100644 (file)
@@ -469,4 +469,4 @@ it under the same terms as Perl itself.
 
 __END__
 
-# vim: noai : ts=4 fenc=utf-8 filetype=perl expandtab :
+# vim: noai : ts=4 fenc=utf-8 filetype=perl :
index e64a989dbc470565ebf9bd4bc3644dd4caf224f8..64280b3d513b12621b0507378fc1d3bfa239d42d 100644 (file)
@@ -51,16 +51,29 @@ Sammelt alle Verlage zusammen.
 
 Folgende benannte Parameter koennen ueber $params uebergeben werden:
 
-Rueckgabe: Eine Array-Ref von Hash-Refs mit allen verlagen, die den uebergebenen Suchkriterien entsprechen:
+=over 4
+
+=item B<page>
+
+Integer: Zeigt an, welche Seite von Verlagen dargestellt werden soll.
+
+Wenn nicht angegeben, werden alle Verlage zurückgegeben.
+
+=back
+
+Rueckgabe: Eine Array-Ref von Hash-Refs mit allen Verlagen, die den uebergebenen Suchkriterien entsprechen:
 
   $res = [
-    { 'id'             => 1,
-      'name'           => 'Heyne',
-      'name_long'      => 'Heyne-Verlag usw. GmbH & Co. KG',
-    },
-    { 'id'     => 2,
-      ...
-    },
+       {
+               'id'                    => 1,
+               'name'                  => 'Heyne',
+               'name_long'             => 'Heyne-Verlag usw. GmbH & Co. KG',
+               'count_books'   => 22,
+       },
+       {
+               'id'                    => 2,
+               ...
+       },
     ...
   ];
 
@@ -85,27 +98,40 @@ sub get_verlagsliste {
     $c->log->debug(  get_output_string( $K, "Uebergebene Parameter: ", $params ) ) if $c->stash->{'debug_level'} >= 2;
 
     my $list = [];
+       my $page = to_int( $params->{'page'} ) ? to_int( $params->{'page'} ) : undef;
+       my $rows = undef;
+       $rows = $c->stash->{'list_length'} || 20 if defined $page;
 
     my $search_params = undef;
 
     my $other_params = {};
     $other_params->{'order_by'} = [ 'name_short' ];
     $other_params->{'select'} = [
-        'id',
-        'name_short',
-        'name_long',
+        'me.id',
+        'me.name_short',
+        'me.name_long',
+               { 'count' => 'buecher.id' }
     ];
     $other_params->{'as'} = [
         'id',
         'name_short',
         'name_long',
+               'count_books',
     ];
+       $other_params->{'join'} = [ 'buecher'];
+       $other_params->{'group_by'} = [ 'id' ];
+
+       if ( $page ) {
+               $other_params->{'rows'} = $rows;
+               $other_params->{'page'} = $page;
+       }
  
     for my $verlag_rs ( $c->model('Schema::Verlage')->search( $search_params, $other_params )->all() ) {
         my $verlag = {};
-        $verlag->{'id'}    = $verlag_rs->id();
-        $verlag->{'name'}  = $verlag_rs->name_short();
-        $verlag->{'descr'} = $verlag_rs->name_long();
+        $verlag->{'id'}          = $verlag_rs->id();
+        $verlag->{'name'}        = $verlag_rs->name_short();
+        $verlag->{'descr'}       = $verlag_rs->name_long();
+        $verlag->{'count_books'} = $verlag_rs->get_column('count_books');
         push @$list, $verlag;
     }
 
@@ -174,4 +200,4 @@ it under the same terms as Perl itself.
 
 __END__
 
-# vim: noai : ts=4 fenc=utf-8 filetype=perl expandtab :
+# vim: noai : ts=4 fenc=utf-8 filetype=perl
index e9fe6e9e0d04312a591635de5a283eba9786d57d..bb2d0b7d5b2559e32e896ee73bd2d0d8f58ba21b 100644 (file)
@@ -1,88 +1,90 @@
-[%#
+/* [%#
    # Template fuer Stylesheets Autoren
    #
+   # vim: noai : ts=4 fenc=utf-8 filetype=css 
+   #
    # $Id$
    # $URL$
    #
 -%]
-/*  Stylesheets Autoren */
+Stylesheets Autoren */
 
 DIV.center {
-  margin:               auto;
-  text-align:           center;
-  width:                auto;
+       margin:         auto;
+       text-align:     center;
+       width:          auto;
 }
 
 TABLE.wrapper {
-  border-spacing:       0;
-  margin:               auto;
+       border-spacing: 0;
+       margin:         auto;
 }
 
 TABLE.wrapper TH {
-  text-align:           center;
-  font-size:            1.2em;
+       text-align:     center;
+       font-size:      1.2em;
 }
 
 TABLE.wrapper TD {
-  text-align:           left;
+       text-align:     left;
 }
 
 TABLE.wrapper TD.action {
-  font-weight:          bolder;
-  padding-top:          1em;
-  padding-bottom:       1em;
+       font-weight:    bolder;
+       padding-top:    1em;
+       padding-bottom: 1em;
 }
 
 TABLE.autorliste {
-  border-width:                2px;
-  border-style:                solid;
-  border-top-color:     [% site.col.tab_rahmen_hell %];
-  border-left-color:    [% site.col.tab_rahmen_hell %];
-  border-right-color:  [% site.col.tab_rahmen_dkl %];
-  border-bottom-color:  [% site.col.tab_rahmen_dkl %];  
-  border-collapse:     separate;
-  border-spacing:      0;
+       border-width:                   2px;
+       border-style:                   solid;
+       border-top-color:               [% site.col.tab_rahmen_hell %];
+       border-left-color:              [% site.col.tab_rahmen_hell %];
+       border-right-color:             [% site.col.tab_rahmen_dkl %];
+       border-bottom-color:    [% site.col.tab_rahmen_dkl %];  
+       border-collapse:                separate;
+       border-spacing:                 0;
 }
 
 TABLE.autorliste TH {
-  vertical-align:      top;
-  text-align:          left; 
-  font-size:            1em;
-  padding:             2px;
-  border-width:                1px;
-  border-style:                solid;
-  border-top-color:     [% site.col.tab_rahmen_dkl %];
-  border-left-color:    [% site.col.tab_rahmen_dkl %];
-  border-right-color:  [% site.col.tab_rahmen_hell %];
-  border-bottom-color:  [% site.col.tab_rahmen_hell %];  
-  background-color:    [% site.col.list_head %];
+       vertical-align:                 top;
+       text-align:                             left; 
+       font-size:                              1em;
+       padding:                                2px;
+       border-width:                   1px;
+       border-style:                   solid;
+       border-top-color:               [% site.col.tab_rahmen_dkl %];
+       border-left-color:              [% site.col.tab_rahmen_dkl %];
+       border-right-color:             [% site.col.tab_rahmen_hell %];
+       border-bottom-color:    [% site.col.tab_rahmen_hell %];  
+       background-color:               [% site.col.list_head %];
 }
 
 TABLE.autorliste TD {
-  vertical-align:      top;
-  font-size:            1em;
-  padding:             2px;
-  border-width:                1px;
-  border-style:                solid;
-  border-top-color:     [% site.col.tab_rahmen_dkl %];
-  border-left-color:    [% site.col.tab_rahmen_dkl %];
-  border-right-color:  [% site.col.tab_rahmen_hell %];
-  border-bottom-color:  [% site.col.tab_rahmen_hell %];  
-  background-color:    [% site.col.list_row_bold %];
+       vertical-align:                 top;
+       font-size:                              1em;
+       padding:                                2px;
+       border-width:                   1px;
+       border-style:                   solid;
+       border-top-color:               [% site.col.tab_rahmen_dkl %];
+       border-left-color:              [% site.col.tab_rahmen_dkl %];
+       border-right-color:             [% site.col.tab_rahmen_hell %];
+       border-bottom-color:    [% site.col.tab_rahmen_hell %];  
+       background-color:               [% site.col.list_row_bold %];
 }
 
 TABLE.autorliste TD.odd {
-  background-color:    [% site.col.list_row %];
+       background-color:       [% site.col.list_row %];
 }
 
 TABLE.autorliste UL {
-  margin:      0;
+       margin: 0;
 }
 
 TABLE.autorliste TD.button {
-  font-weight:          bolder;
-  text-align:           center;
-  padding-left:         1em;
-  padding-right:        1em;
+       font-weight:    bolder;
+       text-align:             center;
+       padding-left:   1em;
+       padding-right:  1em;
 }
 
diff --git a/root/src/verlag/list.tt2 b/root/src/verlag/list.tt2
new file mode 100644 (file)
index 0000000..6846d8a
--- /dev/null
@@ -0,0 +1,42 @@
+<!-- [%#
+  ** Template fuer Verlagsliste
+  **
+  ** vim: noai : ts=4 fenc=utf-8 filetype=html :
+  **
+  ** $Id$
+  ** $URL$
+  ** -%]
+
+  Verlagsliste
+
+-->
+
+[% META title = 'Verlagsliste' -%]
+
+<div class="center">
+
+<table class="wrapper" cellspacing="0">
+<tr><th>Liste der Verlage</th> </tr>
+[% IF Catalyst.user_exists %]<tr><td class="action"><a href="[% path('/verlag/new') %]">Neuer Verlag ...</a></td></tr>[% END %]
+<tr><td><table class="verlagsliste">
+  <tr>
+    <th>Name des Verlags</th>
+    <th>Ausführlicher Verlagsname</th>
+    <th>Anzahl Bücher</th>
+    <th></th>
+    [% IF Catalyst.user_exists %]<th></th>
+    <th></th>[% END %]
+  </tr>
+[% rowstyle = 'even' %][%- FOREACH verlag IN verlage -%]
+  <tr>
+    <td class="[% rowstyle %]">[% verlag.name %]</td>
+    <td class="[% rowstyle %]">[% verlag.descr %]</td>
+    <td class="[% rowstyle %]" style="text-align: right;">[% verlag.count_books %]</td>
+    <td class="button [% rowstyle %]"><a href="[% path('/verlag/view') %]?view_verlags_id=[% verlag.id %]">Ansehen</a></td>
+    [% IF Catalyst.user_exists %]<td class="button [% rowstyle %]"><a href="[% path('/verlag/edit') %]?edit_verlags_id=[% verlag.id %]">Ändern</a></td>
+    <td class="button [% rowstyle %]">[% IF verlag.count_books > 0 %]Löschen[% ELSE %]<a href="[% path('/verlag/delete') %]?delete_verlags_id=[% author.id %]">Löschen</a>[% END %]</td>[% END %]
+  </tr>
+[% IF rowstyle == 'even' %][% rowstyle = 'odd'%][% ELSE %][% rowstyle = 'even' %][% END %][% END -%]
+</table></td></tr></table>
+</div>
+<br />
index e80cbb25faff55accaa3cc8e0facbdac4fcb432c..96f85d27eab060f082ed0d5b6fcfe52210754b91 100644 (file)
@@ -7,4 +7,82 @@
 -%]
 Stylesheets Verlage */
 
+DIV.center {
+  margin:               auto;
+  text-align:           center;
+  width:                auto;
+}
+
+TABLE.wrapper {
+  border-spacing:       0;
+  margin:               auto;
+}
+
+TABLE.wrapper TH {
+  text-align:           center;
+  font-size:            1.2em;
+}
+
+TABLE.wrapper TD {
+  text-align:           left;
+}
+
+TABLE.wrapper TD.action {
+  font-weight:          bolder;
+  padding-top:          1em;
+  padding-bottom:       1em;
+}
+
+TABLE.verlagsliste {
+  border-width:                2px;
+  border-style:                solid;
+  border-top-color:     [% site.col.tab_rahmen_hell %];
+  border-left-color:    [% site.col.tab_rahmen_hell %];
+  border-right-color:  [% site.col.tab_rahmen_dkl %];
+  border-bottom-color:  [% site.col.tab_rahmen_dkl %];  
+  border-collapse:     separate;
+  border-spacing:      0;
+}
+
+TABLE.verlagsliste TH {
+  vertical-align:      top;
+  text-align:          left; 
+  font-size:            1em;
+  padding:             2px;
+  border-width:                1px;
+  border-style:                solid;
+  border-top-color:     [% site.col.tab_rahmen_dkl %];
+  border-left-color:    [% site.col.tab_rahmen_dkl %];
+  border-right-color:  [% site.col.tab_rahmen_hell %];
+  border-bottom-color:  [% site.col.tab_rahmen_hell %];  
+  background-color:    [% site.col.list_head %];
+}
+
+TABLE.verlagsliste TD {
+  vertical-align:      top;
+  font-size:            1em;
+  padding:             2px;
+  border-width:                1px;
+  border-style:                solid;
+  border-top-color:     [% site.col.tab_rahmen_dkl %];
+  border-left-color:    [% site.col.tab_rahmen_dkl %];
+  border-right-color:  [% site.col.tab_rahmen_hell %];
+  border-bottom-color:  [% site.col.tab_rahmen_hell %];  
+  background-color:    [% site.col.list_row_bold %];
+}
+
+TABLE.verlagsliste TD.odd {
+  background-color:    [% site.col.list_row %];
+}
+
+TABLE.verlagsliste UL {
+  margin:      0;
+}
+
+TABLE.verlagsliste TD.button {
+  font-weight:          bolder;
+  text-align:           center;
+  padding-left:         1em;
+  padding-right:        1em;
+}