summaryrefslogtreecommitdiff
path: root/httemplate/search
diff options
context:
space:
mode:
authorivan <ivan>2006-03-08 10:05:01 +0000
committerivan <ivan>2006-03-08 10:05:01 +0000
commit600a0939e7e7e589dae4f4f5bfef3650728940b7 (patch)
tree4e96278b41fc621fa15d03cf2e48a5a3b5a8b72d /httemplate/search
parent5809a99d862a6bd0da6742479f18728aae8216a2 (diff)
Add a new table for inventory with for DIDs/serials/etc., and an additional
new table for inventory category (i.e. to distinguish DIDs, serials, MACs, etc.)
Diffstat (limited to 'httemplate/search')
-rw-r--r--httemplate/search/elements/search.html80
-rw-r--r--httemplate/search/inventory_class.html58
-rw-r--r--httemplate/search/inventory_item.html35
3 files changed, 169 insertions, 4 deletions
diff --git a/httemplate/search/elements/search.html b/httemplate/search/elements/search.html
index d19fb4acd..b14bded10 100644
--- a/httemplate/search/elements/search.html
+++ b/httemplate/search/elements/search.html
@@ -1,5 +1,73 @@
<%
+ # options example...
+ # (everything not commented required is optional)
+ #
+ # # basic options, required
+ # 'title' => 'Page title',
+ # 'name' => 'items', #name for the records returned
+ #
+ # # some HTML callbacks...
+ # 'menubar' => '', #menubar arrayref
+ # 'html_init' => '', #after the header/menubar and before the pager
+ #
+ # #literal SQL query string or qsearch hashref, required
+ # 'query' => {
+ # 'table' => 'tablename',
+ # #everything else is optional...
+ # 'hashref' => { 'field' => 'value',
+ # 'field' => { 'op' => '<',
+ # 'value' => '54',
+ # },
+ # },
+ # 'select' => '*',
+ # 'addl_from' => '', #'LEFT JOIN othertable USING ( key )',
+ # 'extra_sql' => '', #'AND otherstuff', #'WHERE onlystuff',
+ #
+ #
+ # },
+ # # "select * from tablename";
+ #
+ # #required unless 'query' is an SQL query string (shouldn't be...)
+ # 'count_query' => 'SELECT COUNT(*) FROM tablename',
+ #
+ # 'count_addl' => [], #additional count fields listref of sprintf strings
+ # # [ $money_char.'%.2f total paid', ],
+ #
+ # #listref of column labels, <TH>
+ # #required unless 'query' is an SQL query string
+ # # (if not specified the database column names will be used)
+ # 'header' => [ '#', 'Item' ],
+ #
+ # #listref - each item is a literal column name (or method) or coderef
+ # #if not specified all columns will be shown
+ # 'fields' => [
+ # 'column',
+ # sub { my $row = shift; $row->column; },
+ # ],
+ #
+ # #listref of column footers
+ # 'footer' => [],
+ #
+ # #listref - each item is the empty string, or a listref of ...
+ # 'links' =>
+ #
+ #
+ # 'align' => 'lrc.', #one letter for each column, left/right/center/none
+ # # can also pass a listref with full values:
+ # # [ 'left', 'right', 'center', '' ]
+ #
+ # #listrefs...
+ # #currently only HTML, maybe eventually Excel too
+ # 'color' => [],
+ # 'size' => [],
+ # 'style' => [],
+ #
+ # #redirect if there's only one item...
+ # # listref of URL base and column name (or method)
+ # # or a coderef that returns the same
+ # 'redirect' =>
+
my(%opt) = @_;
#warn join(' / ', map { "$_ => $opt{$_}" } keys %opt ). "\n";
@@ -189,7 +257,9 @@
redirect( $url. $rows->[0]->$method() );
} else {
( my $xlsname = $opt{'name'} ) =~ s/\W//g;
- $opt{'name'} =~ s/s$// if $total == 1;
+ #$opt{'name'} =~ s/s$// if $total == 1;
+ $opt{'name'} =~ s/((s)e)?s$/$2/ if $total == 1; #should use Lingua::bs
+ # to "depluralize"
my @menubar = ();
if ( $opt{'menubar'} ) {
@@ -197,6 +267,8 @@
} else {
@menubar = ( 'Main menu' => $p );
}
+
+
%>
<%= include( '/elements/header.html', $opt{'title'},
include( '/elements/menubar.html', @menubar )
@@ -239,7 +311,8 @@
<%= include('/elements/table-grid.html') %>
<TR>
- <% foreach my $header ( @$header ) { %>
+ <%
+ foreach my $header ( @$header ) { %>
<TH CLASS="grid" BGCOLOR="#cccccc"><%= $header %></TH>
<% } %>
</TR>
@@ -386,7 +459,6 @@
</TABLE>
<% } %>
- </BODY>
- </HTML>
+ <%= include( '/elements/footer.html' ) %>
<% } %>
<% } %>
diff --git a/httemplate/search/inventory_class.html b/httemplate/search/inventory_class.html
new file mode 100644
index 000000000..1bf1bcbce
--- /dev/null
+++ b/httemplate/search/inventory_class.html
@@ -0,0 +1,58 @@
+<%
+
+tie my %labels, 'Tie::IxHash',
+ 'num_avail' => 'Available', # <FONT SIZE="-1"><A HREF="eventually">(upload batch)</A></FONT>',
+ 'num_used' => 'In use', #'Used', #'Allocated',
+ 'num_total' => 'Total',
+;
+my %inv_action_link = (
+ 'num_avail' => 'eventually'
+);
+my %inv_action_label = (
+ 'num_avail' => 'upload_batch'
+);
+
+my $link = [ "${p}edit/inventory_class.html?", 'classnum' ];
+
+%><%= include( 'elements/search.html',
+ 'title' => 'Inventory Classes',
+ 'name' => 'inventory classes',
+ 'menubar' => [ 'Add a new inventory class' =>
+ $p.'edit/inventory_class.html',
+ ],
+ 'query' => { 'table' => 'inventory_class', },
+ 'count_query' => 'SELECT COUNT(*) FROM inventory_class',
+ 'header' => [ '#', 'Inventory class', 'Inventory' ],
+ 'fields' => [ 'classnum',
+ 'classname',
+ sub {
+ #my $inventory_class = shift;
+ my $i_c = shift;
+
+ [ map {
+ [
+ {
+ 'data' => '<B>'. $i_c->$_(). '</B>',
+ 'align' => 'right',
+ },
+ {
+ 'data' => $labels{$_},
+ 'align' => 'left',
+ },
+ { 'data' => ( exists($inv_action_link{$_})
+ ? '<FONT SIZE="-1">(<A HREF="'. $inv_action_link{$_}. '">'. $inv_action_label{$_}. '</A>)</FONT>'
+ : ''
+ ),
+ 'align' => 'left',
+ },
+ ]
+ } keys %labels
+ ];
+ },
+ ],
+ 'links' => [ $link,
+ $link,
+ '',
+ ],
+ )
+%>
diff --git a/httemplate/search/inventory_item.html b/httemplate/search/inventory_item.html
new file mode 100644
index 000000000..ff7f1fadf
--- /dev/null
+++ b/httemplate/search/inventory_item.html
@@ -0,0 +1,35 @@
+<%
+
+my $classnum = $cgi->param('classnum');
+$classnum =~ /^(\d+)$/ or eidiot "illegal agentnum $agentnum";
+$classnum = $1;
+my $inventory_class = qsearchs('inventory_class', { 'classnum' => $classnum } );
+
+my $count_query =
+ "SELECT COUNT(*) FROM inventory_class WHERE classnum = $classnum";
+
+%><%= include( 'elements/search.html',
+ 'title' => $inventory_class->classname. ' Inventory',
+
+ #less lame to use Lingua:: something to pluralize
+ 'name' => $inventory_class->classname. 's',
+
+ 'query' => {
+ 'table' => 'inventory_item',
+ 'hashref' => { 'classnum' => $classnum },
+ },
+
+ 'count_query' => $count_query,
+
+ # XXX proper full service/customer link ala svc_acct
+ 'header' => [ '#', $inventory_class->classname, 'svcnum' ],
+
+ 'fields' => [
+ 'itemnum',
+ 'item',
+ 'svcnum', #XXX proper full service customer link ala svc_acct
+ # "unallocated" ? "available" ?
+ ],
+
+ )
+%>