#!/usr/bin/perl
# Generuje přehled odeslaných zásilek. Hodí se při ročním vyúčtování kvůli daňovému přiznání.
# Copyright © 2011 Daniel Zeman
# 29.3.2011: vytvořeno

use utf8;
use Encode;
use DBI;
# Přidat Danovy sdílené knihovny. Skript běžící pod uživatelem apache by je jinak nenašel.
use lib '/home/dan/lib';
use dzcgi;
use sitesql;
use dzsql;
use cas;
# Přinutit Perl, aby UTF8 vypisoval jako UTF8 a nevymýšlel pro mě "vhodné" osmibitové kódování.
binmode(STDOUT, ":utf8");



# Zapamatovat si, kdy jsme s generováním stránky začali, abychom na konci mohli
# zjistit, jak dlouho nám to trvalo.
$starttime = time();



# Používání absolutních URL místo relativních údajně zvyšuje šance, že prohlížeč nepoužije cache.
my $urlbase = 'http://hrejsi.cz/cgi/hry/vnitro';
# Poslat MIME záhlaví dokumentu.
print("Content-Type: text/html; charset=utf-8\n\n");
# Přečíst parametry.
dzcgi::cist_parametry(\%konfig);
# Poslat začátek stránky.
print <<EOF
<html>
  <head>
    <meta http-equiv="Content-Language" content="cs">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta http-equiv="Cache-Control" content="no-cache" />
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" CONTENT="0" /><!-- 0 is illegal timestamp, which means "now" -->
    <meta name="robots" content="noindex">
    <meta name="robots" content="noarchive">
    <title>Roční vyúčtování poštovného</title>
  </head>
  <body>
  <h1>Roční vyúčtování poštovného</h1>
EOF
;
# Připojit se k databázi.
$databaze = sitesql::connect('hry');
# Vypsat přehled objednávek.
vypsat_prehled_objednavek($konfig{filtr});
# Zjistit, jak dlouho nám to trvalo, a vypsat to na konec stránky.
my $hlaseni = cas::sestavit_hlaseni_o_trvani_programu($starttime);
print("  <div align=right><address>$hlaseni</address></div>\n");
# Poslat konec stránky.
print <<EOF
  </body>
  <head>
    <!-- Tohle se doporučuje zopakovat na konci dokumentu, protože pro Internet Explorer může být
         na začátku příliš brzo, aby se vůbec zabýval cachí (dosud načtená část stránky mu ještě
         nezaplnila dost velkou část bufferu. -->
    <meta http-equiv="pragma" content="no-cache" />
  </head>
</html>
EOF
;



##############################################################################
# PODPROGRAMY
##############################################################################



#-----------------------------------------------------------------------------
# Vypíše přehled objednávek.
#-----------------------------------------------------------------------------
sub vypsat_prehled_objednavek
{
    # Získat z databáze přehled objednávek.
 #    my $zdroj = "objednavky LEFT JOIN objzbozi ON objednavky.cas = objzbozi.cas LEFT JOIN zbozi ON objzbozi.kod_zbozi = zbozi.kod";
    my $zdroj = 'objednavky INNER JOIN objstavy ON objednavky.cas = objstavy.cobj';
    my $filtr = "(novy_stav = 'odesláno') AND ((cas_zmeny LIKE '2010%') OR (datum_odeslani LIKE '%2010'))";
    my @nazvy = qw(cas jmeno prijmeni obec odber platba varsymbol mezisoucet mnozstevni_sleva postovne celkem sleva_org_deti stav rychlost novy_stav cas_zmeny datum_odeslani podaci_cislo zaplacene_postovne);
    $dzsql::debug = 1;
    my $pokus = dzsql::dotaz($databaze, @nazvy, "$zdroj WHERE $filtr");
    my @objednavky = sort{$a->{cas_zmeny}<=>$b->{cas_zmeny}}(@{$pokus});
    print("<p>Dotaz vrátil ", scalar(@{$pokus}), " řádků.</p>\n");
    # Vypsat objednávky seřazené vzestupně podle okamžiku odeslání.
    print("  <table border=\"0\">\n");
    print("    <tr><th colspan=2>Objednáno</th><th colspan=3>Odesláno</th><th>Podací číslo</th><th>My</th><th>Jméno</th><th>Obec</th><th>Jak</th><th>VS</th><th>Celkem</th><th>Oni</th></tr>\n");
    my $i_radek = 0;
    foreach my $objednavka (@objednavky)
    {
        my $cas = $objednavka->{cas};
        my $tdatr = ++$i_radek % 2 ? " bgcolor=#D5D5D5" : " bgcolor=#E5E5E5";
        $tdatr .= " valign=top";
        my $tdatrr = $tdatr.' align=right';
        print("    <tr>\n");
        # Datum a čas vzniku objednávky.
        $cas =~ m/(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/;
        my $formdatum = sprintf("%d.%d.%d", $3, $2, $1);
        my $formcas = sprintf("%d:%02d:%02d", $4, $5, $6);
        print("      <td$tdatr align=right>$formdatum</td>\n");
        print("      <td$tdatr align=right>$formcas</td>\n");
        # Datum a čas odeslání.
        $objednavka->{cas_zmeny} =~ m/(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/;
        $formdatum = sprintf("%d.%d.%d", $3, $2, $1);
        $formcas = sprintf("%d:%02d:%02d", $4, $5, $6);
        print("      <td$tdatr align=right>$formdatum</td>\n");
        print("      <td$tdatr align=right>$formcas</td>\n");
        print("      <td$tdatr align=right>$objednavka->{datum_odeslani}</td>\n");
        print("      <td$tdatr align=left>$objednavka->{podaci_cislo}</td>\n");
        print("      <td$tdatr align=right>$objednavka->{zaplacene_postovne}&nbsp;Kč</td>\n");
        my $cele_jmeno = "$objednavka->{jmeno} $objednavka->{prijmeni}";
        $cele_jmeno =~ s/^\s+//;
        $cele_jmeno =~ s/\s+/&nbsp;/g;
        $cele_jmeno =~ s/\s+$//;
        print("      <td$tdatr><a href=\"$urlbase/objednavka.pl?cislo=$cas\">$cele_jmeno</a></td>\n");
        my $misto = $objednavka->{odber} eq "paluba" ? "(osobně&nbsp;na&nbsp;Palubě)" : $objednavka->{odber} eq "cm" ? "(osobně&nbsp;na&nbsp;Černém Mostě)" : $objednavka->{obec};
        $misto =~ s/^\s+//;
        $misto =~ s/\s+/ /g;
        $misto =~ s/\s+$//;
        print("      <td$tdatr>$misto</td>\n");
        my $platba = $objednavka->{odber} eq 'posta' && $objednavka->{platba} eq 'hotově' ? 'dobírkou' : $objednavka->{platba};
        print("      <td$tdatr>$platba</td>\n");
        my $vs = $objednavka->{varsymbol};
        print("      <td$tdatr>$vs</td>\n");
        my $cena = $objednavka->{celkem};
        print("      <td$tdatrr>$cena&nbsp;Kč</td>\n");
        my $postovne = $objednavka->{postovne};
        print("      <td$tdatrr>$postovne&nbsp;Kč</td>\n");
        my @polozky;
        foreach my $polozka (@{$objednavka->{polozky}})
        {
            my $poltext;
            if($polozka->{pocet}>1)
            {
                $poltext = "$polozka->{pocet} × ";
            }
            $poltext .= $polozka->{nazev};
            push(@polozky, $poltext);
        }
        my $polozky = join(", ", @polozky);
        print("      <td$tdatr>$polozky</td>\n");
        print("    </tr>\n");
    }
    print("  </table>\n");
}
