# Internetový obchod nejen s hrami / funkce pro obsloužení objednávky.
# Copyright © 2007-2017 Dan Zeman <zeman@ufal.mff.cuni.cz>
# Licence: GNU GPL
# 3.3.2012: začíná přestavba, na  jejímž konci by obchod měl mít několik oddělení, hry budou jedno z nich
# 9.4.2015: stěhování na new.kub.cz

package objednavka;
use utf8;
use Encode;
use LWP::Simple;
use pomoc;
use kosik;
use mail;



#------------------------------------------------------------------------------
# Zjistí IP adresu klienta. Používáme ji, když chceme stanovit, zda uživatel
# odeslal tentýž formulář dvakrát.
#------------------------------------------------------------------------------
sub zjistit_ip_klienta
{
    # Mnoho let jsme používali REMOTE_ADDR, ale na novém kubu (po přechodu na mod_perl) se v ní objevuje vždy 127.0.0.1,
    # což zřejmě znamená, že dochází k nějakému lokálnímu přesměrování komunikace. Naštěstí je tam ještě HTTP_X_REAL_IP a HTTP_X_FORWARDED_FOR,
    # kde lze nalézt skutečnou adresu klienta.
    my $ip = defined($ENV{HTTP_X_REAL_IP}) ? $ENV{HTTP_X_REAL_IP} : $ENV{REMOTE_ADDR};
    return $ip;
}



#------------------------------------------------------------------------------
# Sestaví HTML s prvním objednávkovým formulářem.
# V této fázi zjistíme údaje, které ovlivňují celkovou cenu:
# způsob placení a dodání, slevové kódy a žádost o klubové ceny.
#------------------------------------------------------------------------------
sub formular1
{
    # Pokud to není poprvé, co tomuto uživateli ukazujeme objednávkový formulář,
    # je možné, že už některé své údaje zadal. Proto se podíváme do hashe
    # objednávka (to nejsou přímo parametry CGI, tady je to už trochu
    # předchroustáno). Tento hash se plní voláním objednavka::zjistit().
    my $objednavka = shift;
    my $odb = shift; # databázi obchod potřebujeme kvůli seznamu výdejních míst
    my $html;
    $html .= "<form method=get action=\"prodej.pl\">\n";
    $html .= odsadit(formpar(), 2);
    my %checked;
    # Vložit do formuláře neviditelné pole s informací, kdy a komu byl formulář vygenerován.
    # Díky tomu dokážeme později odhadnout, jestli uživatel omylem neodeslal formulář dvakrát.
    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time());
    my $cas = sprintf("%04d%02d%02d%02d%02d%02d", $year+1900, $mon+1, $mday, $hour, $min, $sec);
    $html .= "  <input type=hidden name=gencas value=\"$cas\">\n";
    my $ip = zjistit_ip_klienta();
    $html .= "  <input type=hidden name=genadr value=\"$ip\">\n";
    my $zkosik = kosik::zakodovat($objednavka->{kosik});
    $html .= "  <input type=hidden name=kosik value=\"$zkosik\">\n";
    # Vypsat kolonky, v nichž lze žádat o slevu.
    $html .= formular_slevove_kody($objednavka, 1);
    # Vypsat způsob dodání a placení.
    $html .= formular_odber_platba($objednavka, 1, $odb);
    $html .= "  <input type=hidden name=pohled value=konec2>\n";
    $html .= "  <input type=submit value=\"Pokračovat v&nbsp;objednávce\"><br>\n";
    $html .= "</form>\n";
    return $html;
}



#------------------------------------------------------------------------------
# Sestaví HTML s druhým objednávkovým formulářem.
# V této fázi zjistíme kontaktní údaje na objednatele.
#------------------------------------------------------------------------------
sub formular2
{
    # Pokud to není poprvé, co tomuto uživateli ukazujeme objednávkový formulář,
    # je možné, že už některé své údaje zadal. Proto se podíváme do hashe
    # objednávka (to nejsou přímo parametry CGI, tady je to už trochu
    # předchroustáno). Tento hash se plní voláním objednavka::zjistit().
    my $objednavka = shift;
    my $odb = shift; # databázi obchod potřebujeme kvůli seznamu výdejních míst
    my $html;
    $html .= "<form method=get action=\"prodej.pl\">\n";
    $html .= odsadit(formpar(), 2);
    my %checked;
    # Vložit do formuláře neviditelné pole s informací, kdy a komu byl formulář vygenerován.
    # Díky tomu dokážeme později odhadnout, jestli uživatel omylem neodeslal formulář dvakrát.
    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time());
    my $cas = sprintf("%04d%02d%02d%02d%02d%02d", $year+1900, $mon+1, $mday, $hour, $min, $sec);
    $html .= "  <input type=hidden name=gencas value=\"$cas\">\n";
    my $ip = zjistit_ip_klienta();
    $html .= "  <input type=hidden name=genadr value=\"$ip\">\n";
    my $zkosik = kosik::zakodovat($objednavka->{kosik});
    $html .= "  <input type=hidden name=kosik value=\"$zkosik\">\n";
    # Uložit do formuláře údaje o slevách. Uživateli už je vypisovat nemusíme,
    # protože se mu objevily výše spolu s výpisem obsahu košíku.
    $html .= formular_slevove_kody($objednavka, 0);
    # Vypsat způsob dodání a placení.
    $html .= formular_odber_platba($objednavka, 0, $odb);
    # Vypsat kolonky pro kontaktní údaje.
    $html .= formular_kontaktni_udaje($objednavka);
    # Vypsat závěrečné kolonky.
    $html .= formular_zaverecne_kolonky($objednavka);
    $html .= "  <input type=hidden name=pohled value=objednavka>\n";
    $html .= "  <input type=submit name=submit value=\"Zpět\">\n";
    $html .= "  <input type=submit name=submit value=\"Odeslat objednávku\"><br>\n";
    $html .= "</form>\n";
    return $html;
}



#------------------------------------------------------------------------------
# Sestaví HTML s objednávkovým formulářem. Tato verze se momentálně volá pouze
# v případě, že kontrola odhalila chyby v objednávce a chceme po uživateli, aby
# je opravil. V normálním případě se postupně zobrazí formuláře z funkcí
# formular1() a formular2().
#------------------------------------------------------------------------------
sub formular
{
    # Pokud to není poprvé, co tomuto uživateli ukazujeme objednávkový formulář,
    # je možné, že už některé své údaje zadal. Proto se podíváme do hashe
    # objednávka (to nejsou přímo parametry CGI, tady je to už trochu
    # předchroustáno). Tento hash se plní voláním objednavka::zjistit().
    my $objednavka = shift;
    my $odb = shift; # databázi obchod potřebujeme kvůli seznamu výdejních míst
    my $html;
    $html .= "<form method=get action=\"prodej.pl\">\n";
    my %checked;
    # Vložit do formuláře neviditelné pole s informací, kdy a komu byl formulář vygenerován.
    # Díky tomu dokážeme později odhadnout, jestli uživatel omylem neodeslal formulář dvakrát.
    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time());
    my $cas = sprintf("%04d%02d%02d%02d%02d%02d", $year+1900, $mon+1, $mday, $hour, $min, $sec);
    $html .= "  <input type=hidden name=gencas value=\"$cas\">\n";
    my $ip = zjistit_ip_klienta();
    $html .= "  <input type=hidden name=genadr value=\"$ip\">\n";
    my $zkosik = kosik::zakodovat($objednavka->{kosik});
    $html .= "  <input type=hidden name=kosik value=\"$zkosik\">\n";
    # Vypsat kolonky, v nichž lze žádat o slevu.
    $html .= formular_slevove_kody($objednavka, 1);
    # Vypsat způsob dodání a placení.
    $html .= formular_odber_platba($objednavka, 1, $odb);
    # Vypsat kolonky pro kontaktní údaje.
    $html .= formular_kontaktni_udaje($objednavka);
    # Vypsat závěrečné kolonky.
    $html .= formular_zaverecne_kolonky($objednavka);
    $html .= "  <input type=hidden name=hra value=objednavka>\n";
    $html .= "  <input type=submit value=\"Odeslat objednávku\"><br>\n";
    $html .= "</form>\n";
    return $html;
}



#------------------------------------------------------------------------------
# Sestaví HTML s prvky formuláře pro slevové kódy, IČO organizace apod. Podle
# potřeby to budou buď plnohodnotné prvky formuláře, nebo budou vlastní prvky
# formuláře skryté a uživateli se zobrazí jen informace o hodnotách, které
# nemůže měnit.
#------------------------------------------------------------------------------
sub formular_slevove_kody
{
    # Pokud to není poprvé, co tomuto uživateli ukazujeme objednávkový formulář,
    # je možné, že už některé své údaje zadal. Proto se podíváme do hashe
    # objednávka (to nejsou přímo parametry CGI, tady je to už trochu
    # předchroustáno). Tento hash se plní voláním objednavka::zjistit().
    my $objednavka = shift;
    my $editovatelne = shift;
    my $html;
    # Vypsat kolonky, v nichž lze žádat o slevu.
    if($editovatelne)
    {
        $html .= "  <p align=left><br><b>Slevy:</b><br>\n";
        $checked{sleva_org_deti} = "checked=1" if($objednavka->{sleva_org_deti});
        $html .= "    Máte-li <b>slevový kód</b>, napište ho sem: <input type=text name=slevkod value=\"$objednavka->{slevkod}\" size=\"20\"><br/>\n";
        $html .= "    (u <b>dárkových poukázek</b> prosíme zadat do poznámky při zadávání svých údajů. Robot se to ještě nanaučil a ohlásil by chybný kód.)<br/>\n";
        $html .= "    <br><input type=checkbox name=organizace value=\"ano\" $checked{sleva_org_deti}> Jsme organizace pracující s&nbsp;mládeží a žádáme o slevu.\n";
        $html .= "    Naše IČO je: <input name=ico type=text value=\"$objednavka->{ico}\" size=\"10\"><br/>\n";
        $html .= "  </p>\n";
    }
    else
    {
        # Uložit do formuláře údaje o slevách. Uživateli už je vypisovat nemusíme,
        # protože se mu objevily výše spolu s výpisem obsahu košíku.
        if($objednavka->{sleva_org_deti})
        {
            $html .= "  <input type=hidden name=organizace value=ano>\n";
            $html .= "  <input type=hidden name=ico value=\"$objednavka->{ico}\">\n";
        }
        if($objednavka->{slevkod} ne '')
        {
            ###!!! objednavka.pm zatím neumí kontrolovat chyby vstupních dat už po prvním formuláři.
            ###!!! Nicméně je možné, že se nám i tak vynořilo nějaké chybové hlášení při zpracování slevového kódu.
            my $chyby;
            if(scalar(@{$objednavka->{chyby}}) > 0)
            {
                $chyby = join(' ', @{$objednavka->{chyby}});
            }
            ###!!! Jestliže byl slevový kód platný a správně se použil, tak tady ani nic psát nemusíme, protože informace o kódu a o slevě
            ###!!! už je uvedena o něco výše v rekapitulaci obsahu košíku. Ale pokud se kód z nějakého důvodu nepoužil, tak nikde není vidět proč,
            ###!!! čili to raději napíšeme alespoň tady. Do budoucna by to chtělo zařídit plnohodnotné hlídání chyb i po první stránce formuláře!
            $html .= "  <p align=left>Slevový kód $objednavka->{slevkod} přináší slevu $objednavka->{sleva_kod}&nbsp;%. $chyby\n";
            $html .= "    <input type=hidden name=slevkod value=\"$objednavka->{slevkod}\" />\n";
            $html .= "  </p>\n";
        }
    }
    return $html;
}



#------------------------------------------------------------------------------
# Sestaví HTML s prvky formuláře pro stanovení způsobu dopravy a placení. Podle
# potřeby to budou buď plnohodnotné prvky formuláře, nebo budou vlastní prvky
# formuláře skryté a uživateli se zobrazí jen informace o hodnotách, které
# nemůže měnit.
#------------------------------------------------------------------------------
sub formular_odber_platba
{
    # Pokud to není poprvé, co tomuto uživateli ukazujeme objednávkový formulář,
    # je možné, že už některé své údaje zadal. Proto se podíváme do hashe
    # objednávka (to nejsou přímo parametry CGI, tady je to už trochu
    # předchroustáno). Tento hash se plní voláním objednavka::zjistit().
    my $objednavka = shift;
    my $editovatelne = shift;
    my $odb = shift; # databázi obchod potřebujeme kvůli seznamu výdejních míst
    my $html;
    # Vypsat způsob dodání a placení.
    # Výdejní místa "paluba" (Paluba) a "cm" (Černý Most) existují v databázi u starých objednávek, ale k novým objednávkám už je nenabízíme.
    $objednavka->{odber} = 'posta' if($objednavka->{odber} !~ m/^(jenstejn|ulozenka|posta|posta_do_ruky|posta_na_postu|dpd)$/);
    if($editovatelne)
    {
        $html .= "  <script>\n";
        $html .= "    function showUlozenka() { var element = document.getElementById('ulozenka-branch-select-table'); element.style.display = ''; }\n";
        $html .= "    function hideUlozenka() { var element = document.getElementById('ulozenka-branch-select-table'); element.style.display = 'none'; }\n";
        $html .= "    function showPosta() { var element = document.getElementById('posta-select-table'); element.style.display = ''; }\n";
        $html .= "    function hidePosta() { var element = document.getElementById('posta-select-table'); element.style.display = 'none'; }\n";
        $html .= "  </script>\n";
        my %checked;
        $checked{$objednavka->{odber}} = 'checked=1';
        $html .= "  <table celpadding=0 cellspacing=0>\n";
        $html .= "    <tr><td colspan=5><br><hr><b>Zboží si vyzvednu osobně </b>(Ceny dopravy najdete v <b>záložce INFO</b> v pravém horním rohu):</td></tr>\n";
        # Od března 2017 není možné přijímat od lidí platby v hotovosti, protože bychom se museli registrovat do Babišovy EET.
         $html .= "    <tr><td><input type=radio name=prevzeti value=\"jenstejn\" $checked{jenstejn} onclick=\"hideUlozenka(); hidePosta();\" /></td><td></td><td colspan=3><br>v&nbsp;<a href=\"https://www.mapy.cz/s/dDT6\" target=\"mapa\">Jenštejně</a> u Prahy. Bohužel kvůli EET platby možné <b>pouze předem PŘEVODEM. </b> HRY SKLADEM - <b> týž den PŘIPRAVENO, ZDARMA.</b>
 </td></tr>\n";

# toto bylo vloženo před koncem každého řádku -- >     <br>(<font color=red><b>dodání do Vánoc</font> u objednávek podaných <font color=red>do 23.12. do 10 hodin, možnost vyzvednutí do 24.12. do 11 hodin.</b></font>)

	 $html .= "    <tr><td><input type=radio name=prevzeti value=\"ulozenka\" $checked{ulozenka} onclick=\"showUlozenka(); hidePosta();\" /></td><td></td><td colspan=3><br>na pobočce <a href=\"https://www.ulozenka.cz/\" target=\"mapa\">Uloženky, Uloženky Partner,</a> <a href=\"https://www.dpd.com/cz/\" target=\"mapa\">DPD PickUp</a> v ČR i SR <!--<br>(<font color=red><b>dodání do Vánoc</font> u objednávek podaných <font color=red>do 17.12. do 17 hodin.</b></font>)--> </td></tr>\n";
         $html .= odsadit(formular_pobocky_ulozenky($objednavka), 4);
         $html .= "    <tr><td><input type=radio name=prevzeti value=\"posta_na_postu\" $checked{posta_na_postu} onclick=\"hideUlozenka(); showPosta();\" /></td><td></td><td colspan=3><br>na pobočce <a href=\"https://www.ceskaposta.cz/\" target=\"mapa\">České pošty </a> <!--<br>(<font color=red><b>dodání do Vánoc</font> u objednávek podaných <font color=red>do 14.12. do 17 hodin.</b></font>)--> </td></tr>\n";
         $html .= odsadit(formular_posty($objednavka, $odb), 4);
         $html .= "    <tr><td colspan=5> <hr><b>Zboží chci zaslat na adresu:</b></td></tr> \n";       
         $html .= "    <tr><td><input type=radio name=prevzeti value=\"posta\" $checked{posta} onclick=\"hideUlozenka(); hidePosta();\" /></td><td></td><td colspan=3><br>nejlevnějším a nejrychlejším způsobem na území Česka jedním z dopravců: Uloženka, Pošta nebo DPD (Cena od: $kosik::glob_doprava_sazebnik{posta}[0][1] Kč / $kosik::glob_doprava_sazebnik{posta}[0][2] Kč) <!--<br><br>(<font color=red><b>dodání do Vánoc</font> u objednávek podaných <font color=red>do 11.12. do 17 hodin.</b></font>)--> </td></tr>\n";
      	 $html .= "    <tr><td><input type=radio name=prevzeti value=\"dpd\" $checked{dpd} onclick=\"hideUlozenka(); hidePosta();\" /></td><td></td><td colspan=3><br>prostřednictvím kurýrní služby <a href=\"https://www.dpd.com/cz/\" target=\"mapa\">DPD</a> na území Česka (Cena: $kosik::glob_doprava_sazebnik{dpd}[0][1] Kč / $kosik::glob_doprava_sazebnik{dpd}[0][2] Kč) <!--<br><br>(<font color=red><b>dodání do Vánoc</font> u objednávek podaných <font color=red>do 17.12. do 17 hodin.</b></font>)--> </td></tr>\n";
 
       # Kdybychom jim chtěli poskytnout odkaz na popis balíku Do ruky: https://www.ceskaposta.cz/sluzby/baliky/cr/balik-do-ruky
        $html .= "    <tr><td><input type=radio name=prevzeti value=\"posta_do_ruky\" $checked{posta_do_ruky} onclick=\"hideUlozenka(); hidePosta();\" /></td><td></td><td colspan=3><br>prostřednictvím <a href=\"https://www.ceskaposta.cz/sluzby/baliky/cr/balik-do-ruky\" target=\"mapa\">České pošty </a> na území Česka jako <b>balík do ruky</b> (Cena: $kosik::glob_doprava_sazebnik{posta_do_ruky}[0][1] Kč / $kosik::glob_doprava_sazebnik{posta_do_ruky}[0][2] Kč) <!--<br><br>(<font color=red><b>dodání do Vánoc</font> u objednávek podaných <font color=red>do 14.12. do 17 hodin.</b></font>)--> \n";
        $html .= "    <tr><td colspan=5> <hr><br><b>Zaplatím:</b></td></tr>\n";
        $objednavka->{platba} = 'hotově' if($objednavka->{platba} !~ m/^(hotově|převodem)$/);
        $checked{$objednavka->{platba}} = 'checked=1';
        $html .= "    <tr><td><input type=radio name=platba value=\"hotově\" $checked{\"hotově\"}></td><td></td><td colspan=3>hotově (dobírkou či osobně při převzetí - <b>NELZE u osobních odběrů v Jenštejně - kvůli EET. Omlouváme se!</b>)</td></tr>\n";
        $html .= "    <tr><td><input type=radio name=platba value=\"převodem\" $checked{\"převodem\"}></td><td></td><td colspan=3>předplatbou (bezhotovostním převodem - dodání se zdrží o dobu, než dorazí platba.)</td></tr>\n";
        $html .= "  </table>\n";
    }
    else # fixní informace o vybraných službách, bez možnosti upravit je
    {
        if($objednavka->{odber} eq 'paluba')
        {
            $html .= "  <p align=left>Zboží si vyzvednu osobně v&nbsp;Praze u Anděla na Palubě.\n";
            $html .= "    <input type=hidden name=prevzeti value=\"paluba\" />\n";
            $html .= "  </p>\n";
        }
        elsif($objednavka->{odber} eq 'cm')
        {
            $html .= "  <p align=left>Zboží si vyzvednu osobně v&nbsp;Praze na Černém Mostě.\n";
            $html .= "    <input type=hidden name=prevzeti value=\"cm\" />\n";
            $html .= "  </p>\n";
        }
        elsif($objednavka->{odber} eq 'jenstejn')
        {
            $html .= "  <p align=left>Zboží si vyzvednu osobně v&nbsp;Jenštejně u Prahy a zaplatím předem převodem!\n";
            $html .= "    <input type=hidden name=prevzeti value=\"jenstejn\" />\n";
            $html .= "  </p>\n";
        }
        elsif($objednavka->{odber} eq 'ulozenka')
        {
            my $pobocka;
            if($objednavka->{ulozenka_branches_name})
            {
                $pobocka = "<a href=\"$objednavka->{ulozenka_branches_link}\" target=mapa>$objednavka->{ulozenka_branches_name}</a>";
            }
            else
            {
                $pobocka = "<span style='color:red'>NEZNÁMÁ POBOČKA</span>";
            }
            $html .= "  <p align=left>Zboží si vyzvednu osobně na pobočce Uloženky (HeurekaPoint, DPD ParcelShop, UloženkaPartner)</p><h3> $pobocka.\n";
            $html .= "    <input type=hidden name=prevzeti value=\"ulozenka\" />\n";
            $html .= "    <input type=hidden name=ulozenka_branches value=\"$objednavka->{ulozenka_branches}\" />\n";
            $html .= "  </h3>\n";
        }
        elsif($objednavka->{odber} eq 'posta_na_postu')
        {
            my $pobocka;
            if($objednavka->{ulozenka_branches_name})
            {
                $pobocka = "<a href=\"$objednavka->{ulozenka_branches_link}\" target=mapa>$objednavka->{ulozenka_branches_name}</a>";
            }
            else
            {
                $pobocka = "<span style='color:red'>NEZNÁMÁ POŠTA</span>";
            }
            $html .= "  <p align=left>Zboží si vyzvednu osobně na pobočce České pošty </p><h3> $pobocka.\n";
            $html .= "    <input type=hidden name=prevzeti value=\"posta_na_postu\" />\n";
            $html .= "    <input type=hidden name=posta_branches value=\"$objednavka->{ulozenka_branches}\" />\n";
            $html .= "  </h3>\n";
        }
        elsif($objednavka->{odber} eq 'posta_do_ruky')
        {
            $html .= "  <p align=left>Zboží chci zaslat poštou jako balík do ruky na území Česka.\n";
            $html .= "    <input type=hidden name=prevzeti value=\"posta_do_ruky\" />\n";
            $html .= "  </p>\n";
        }
        elsif($objednavka->{odber} eq 'dpd')
        {
            $html .= "  <p align=left>Zboží chci zaslat kurýrní službou DPD na území Česka.\n";
            $html .= "    <input type=hidden name=prevzeti value=\"dpd\" />\n";
            $html .= "  </p>\n";
        }
        else # posta je default
        {
            $html .= "  <p align=left>Zboží chci zaslat poštou obyčejně na území Česka.\n";
            $html .= "    <input type=hidden name=prevzeti value=\"posta\" />\n";
            $html .= "  </p>\n";
        }
        # Způsob placení.
        if($objednavka->{platba} eq 'převodem')
        {
            $html .= "  <p align=left>Zaplatím předem bezhotovostním převodem na účet.\n";
            $html .= "    <input type=hidden name=platba value=\"převodem\" />\n";
            $html .= "  </p>\n";
        }
        else
        {
            $html .= "  <p align=left>Zaplatím hotově při převzetí zboží.\n";
            $html .= "    <input type=hidden name=platba value=\"hotově\" />\n";
            $html .= "  </p>\n";
        }
    }
    return $html;
}



#------------------------------------------------------------------------------
# Sestaví HTML s prvkem formuláře pro výběr pobočky Uloženky, na které si chce
# zákazník zboží převzít. Tento kód je převzatý z Uloženky a sahá JavaScriptem
# přímo na její server pro aktuální seznam poboček.
#------------------------------------------------------------------------------
sub formular_pobocky_ulozenky
{
    my $objednavka = shift;
    # Má být tento prvek zpočátku skrytý, nebo zobrazený?
    my $pocatecni_styl = '';
    $pocatecni_styl = " style='display:none'" unless($objednavka->{odber} eq 'ulozenka');
    # Pro srozumitelnější výběr z globálních sazeb za dopravu:
    my $prevodem = 1;
    my $dobirkou = 2;
    my $html = <<EOF
<tr><td colspan=2></td><td colspan=3><table id="ulozenka-branch-select-table"$pocatecni_styl>
    <tr>
        <td>
            <img src="https://www.ulozenka.cz/logo/ulozenka.png" width="130" border="0">
        </td>
        <td style="padding:7px;">
            <font size="1">Uloženka - výdejní místa profesionálně. Vyberte pobočku:</font><br>
            <div id="ulozenka-branch-select-options"></div>
        </td>
    </tr>
</table>

<script>
    var response = "";
    var request = new XMLHttpRequest();
    optionsDiv = document.getElementById('ulozenka-branch-select-options');
    request.open("GET", "https://api.ulozenka.cz/v2/branches?shopId=6826", true);
        request.setRequestHeader('Accept', 'application/json')
        request.onreadystatechange = function() {
            if (request.readyState == 4) {
                if (request.status == 200 || request.status == 0) {
                    response = JSON.parse(request.responseText);
                    branches = response.data;
                    select = document.createElement("select");
                    select.setAttribute('name', "ulozenka_branches");
                    optionsDiv.appendChild(select);
                    option = document.createElement("option");
                    option.setAttribute('value', "");
                    option.innerHTML = 'Vyberte pobočku';
                    select.appendChild(option);
                    // sort by name
                    branches.sort(function(a, b) {
                        var nameA = a.name.toUpperCase(); // ignore upper and lowercase
                        var nameB = b.name.toUpperCase(); // ignore upper and lowercase
                        if (nameA < nameB) {
                            return -1;
                        }
                        if (nameA > nameB) {
                            return 1;
                        }
                        // names must be equal
                        return 0;
                    });
                    for (i = 0; i < branches.length; i++) {
                        var prefix = "Uloženka ";
                        branch = branches[i];
                        option = document.createElement("option");
                        option.setAttribute('value', branch.shortcut);
                        if (branch.shortcut == "$objednavka->{ulozenka_branches}") {
                            option.setAttribute('selected', 1);
                        }
                        // Přidat informaci o ceně doručení na danou pobočku.
                        var cena = " (Uloženka, Cena: $kosik::glob_doprava_sazebnik{ulozenka}[0][$prevodem] Kč / $kosik::glob_doprava_sazebnik{ulozenka}[0][$dobirkou] Kč)";
                        if (/^fr/.test(branch.shortcut)) {
                            cena = " (Uloženka Partner, Cena: $kosik::glob_doprava_sazebnik{ulozenka}[0][$prevodem] Kč / $kosik::glob_doprava_sazebnik{ulozenka}[0][$dobirkou] Kč)";
						            }
                        else if (/^dpdcz/.test(branch.shortcut)) {
                            cena = " (DPD CZ PickUp, Cena: $kosik::glob_doprava_sazebnik{dpdcz}[0][$prevodem] Kč / $kosik::glob_doprava_sazebnik{dpdcz}[0][$dobirkou] Kč)";
                        }
                        else if (/^dpdsk/.test(branch.shortcut)) {
                            cena = " (DPD SK PickUp, Cena: $kosik::glob_doprava_sazebnik{dpdsk}[0][$prevodem] Kč / $kosik::glob_doprava_sazebnik{dpdsk}[0][$dobirkou] Kč)";
                        }
                        option.innerHTML = ""+branch.name+cena+"";
                        select.appendChild(option);
                    }
                } else {
                    optionsDiv.innerHTML = "Nepodařilo se načíst seznam poboček.";
                }
            }
        }
        request.send();
</script></td></tr>
EOF
    ;
    return $html;
}



#------------------------------------------------------------------------------
# Sestaví HTML s prvkem formuláře pro výběr pobočky České pošty, na které si
# chce zákazník zboží převzít. Seznam pošt máme v databázi na serveru spolu
# s pobočkami Uloženky. Stáhli jsme si ho ze serveru Uloženky.
#------------------------------------------------------------------------------
sub formular_posty
{
    my $objednavka = shift;
    my $odb = shift; # databázi obchod potřebujeme kvůli seznamu výdejních míst
    my $html;
    # Má být tento prvek zpočátku skrytý, nebo zobrazený?
    my $pocatecni_styl = '';
    $pocatecni_styl = " style='display:none'" unless($objednavka->{odber} eq 'posta_na_postu');
    my $posty = dzsql::dotaz($odb, 'shortcut', 'name', "ulozenka_branches WHERE (active = 1) AND (shortcut LIKE 'cpost_np_%') ORDER BY name");
    my $n = scalar(@{$posty});
    $html .= "<!-- jsme tu a vidime $n pobocek posty -->\n";
    if(scalar(@{$posty})>=1)
    {
        $html .= "<tr><td colspan=2></td><td colspan=3><table id=\"posta-select-table\"$pocatecni_styl>\n";
        $html .= "  <tr>\n";
        $html .= "    <td><img src=\"https://obchod.hrejsi.cz/ondra_2012/loga/logo_balik_na_postu.png\" border=\"0\" width=\"130\" /></td>\n";
        $html .= "    <td style=\"padding:7px;\">\n";
        $html .= "      <font size=\"1\">Vyberte poštu:</font><br />\n";
        $html .= "      <div id=\"posta-select-options\">\n";
        $html .= "        <select name=\"posta_branches\">\n";
        foreach my $posta (@{$posty})
        {
            my $selected = $posta->{shortcut} eq $objednavka->{ulozenka_branches} ? ' selected="1"' : '';
            $html .= "          <option value=\"$posta->{shortcut}\"$selected>$posta->{name}</option>\n";
        }
        $html .= "        </select>\n";
        $html .= "      </div>\n";
        $html .= "    </td>\n";
        $html .= "  </tr>\n";
        $html .= "</table></td></tr>\n";
    }
    return $html;
}



#------------------------------------------------------------------------------
# Sestaví HTML s prvky formuláře pro kontaktní údaje zákazníka.
#------------------------------------------------------------------------------
sub formular_kontaktni_udaje
{
    # Pokud to není poprvé, co tomuto uživateli ukazujeme objednávkový formulář,
    # je možné, že už některé své údaje zadal. Proto se podíváme do hashe
    # objednávka (to nejsou přímo parametry CGI, tady je to už trochu
    # předchroustáno). Tento hash se plní voláním objednavka::zjistit().
    my $objednavka = shift;
    my $html;
    # Vypsat kolonky pro kontaktní údaje.
    $html .= "  <h3 align=left>Vyplňte kontaktní údaje:</h3>\n";
    $html .= "  <table border=\"0\">\n";
    $html .= "    <tr><td><p>Jméno: </p></td><td><p><input name=jmeno type=text value=\"$objednavka->{jmeno}\" size=\"20\"></p></td></tr>\n";
    $html .= "    <tr><td><p>Příjmení: </p></td><td><p><input name=prijmeni type=text value=\"$objednavka->{prijmeni}\" size=\"20\"></p></td></tr>\n";
    $html .= "    <tr><td><p>E-mail: </p></td><td><p><input name=email type=text value=\"$objednavka->{email}\" size=\"20\"></p></td></tr>\n";
    $html .= "    <tr><td colspan=\"2\">(E-mailem vám zašleme jak potvrzení objednávky, tak upřesnění dodání.)</td></tr>\n";
    $html .= "    <tr><td><p>Tel.: </p></td><td><p><input name=tel type=text value=\"$objednavka->{telefon}\" size=\"20\">\n";#</p></td></tr>\n";
    #my $checked = " checked=1" if($objednavka->{sms});
    # Kromě e-mailu si přeji i vyrozumění prostřednictvím SMS.
    $html .= "               <input type=hidden name=sms value=0></p></td></tr>\n";
    $html .= "    <tr><td><p>Poznámka: </p></td><td><p><input name=poznamka type=text value=\"$objednavka->{poznamka}\" size=\"20\"></p></td></tr>\n";
    $html .= "  </table>\n";
    # Vypsat kolonky pro zasílací adresu.
    $html .= "  <h3 align=left>Vyplňte adresu při zaslání na adresu:</h3>\n";
    $html .= "  <table border=\"0\">\n";
    $html .= "    <tr><td><p>Ulice a dům: </p></td><td><p><input name=ulice type=text value=\"$objednavka->{ulice_a_dum}\" size=\"20\"></p></td></tr>\n";
    $html .= "    <tr><td><p>Obec: </p></td><td><p><input name=obec type=text value=\"$objednavka->{obec}\" size=\"20\"></p></td></tr>\n";
    $html .= "    <tr><td><p>PSČ: </p></td><td><p><input name=psc type=text value=\"$objednavka->{psc}\" size=\"20\"></p></td></tr>\n";
    $html .= "  </table>\n";
    return $html;
}






#------------------------------------------------------------------------------
# Sestaví HTML se závěrečnými kolonkami objednávkového formuláře.
#------------------------------------------------------------------------------
sub formular_zaverecne_kolonky
{
    # Pokud to není poprvé, co tomuto uživateli ukazujeme objednávkový formulář,
    # je možné, že už některé své údaje zadal. Proto se podíváme do hashe
    # objednávka (to nejsou přímo parametry CGI, tady je to už trochu
    # předchroustáno). Tento hash se plní voláním objednavka::zjistit().
    my $objednavka = shift;
    my $html;
    # Vypsat závěrečné kolonky.
    $html .= "  <h3 align=left>Chcete-li jiné fakturační údaje než zasílací, použijte poznámku:</h3>\n";
    $html .= "  <p align=left>Poznámka 2: <input name=poznamka2 type=text value=\"$objednavka->{poznamka2}\" size=\"50\">\n";
    $html .= "  <p>Tímto způsobem lze objednat zboží k&nbsp;dodání na území Česka. Máte-li zájem o dodání do jiných zemí, kontaktujte nás na e-mailu <a href=\"mailto:obchod\@hrejsi.cz\">obchod\@hrejsi.cz</a>.<br>\n";
    $html .= "  <p>Prosíme, ohodnoťte nás na <a href=\"https://overeno.heureka.cz/\">srovnávači internetových obchodů Heuréka</a>. Vaše zpětná vazba je pro nás důležitá. Heuréka nám vaše hodnocení přešle, takže pokud si myslíte, že máme co zlepšovat, dozvíme se o tom. Pokud jste se vším spokojeni, budeme samozřejmě rádi, když nás pochválíte a doporučíte ostatním zákazníkům. Kvůli zajištění nezávislosti hodnocení probíhá komunikace přímo mezi vámi a Heurékou; potřebujeme tedy váš souhlas, abychom vaši e-mailovou adresu mohli výhradně za tímto účelem Heuréce poskytnout.</p>\n";
    $html .= "  <table border=\"0\">\n";
    $html .= "    <tr><td colspan=2><p><input type=checkbox name=souhlas_heureka value=1 checked=1 /></p></td><td><p>Souhlasím s poskytnutím mé e-mailové adresy serveru Heureka.cz za účelem hodnocení obchodu Hrejsi.cz v rámci služby Ověřeno zákazníky.</p></td></tr>\n";
    $html .= "  </table>\n";
    return $html;
}



#------------------------------------------------------------------------------
# Z parametrů skriptu posbírá informace o objednávce a sestaví z nich hash.
#------------------------------------------------------------------------------
sub zjistit
{
    my $pole = shift; # odkaz na hash s ostatními parametry skriptu
    # Databáze jsou momentálně dvě (her a ostatního zboží) a my potřebujeme obě.
    my $hdb = shift;
    my $odb = shift;
    my %objednavka;
    # Dekódovat košík.
    $objednavka{kosik_text} = $pole->{kosik};
    $objednavka{kosik} = kosik::dekodovat($pole->{kosik});
    # Z hashe s parametry skriptu zkopírovat informace o způsobu fakturace, platby a dodání.
    $objednavka{jmeno} = $pole->{jmeno};
    $objednavka{jmeno} =~ s/^\s+//;
    $objednavka{jmeno} =~ s/\s+$//;
    $objednavka{jmeno} =~ s/\s+/ /g;
    $objednavka{prijmeni} = $pole->{prijmeni};
    $objednavka{prijmeni} =~ s/^\s+//;
    $objednavka{prijmeni} =~ s/\s+$//;
    $objednavka{prijmeni} =~ s/\s+/ /g;
    $objednavka{ulice_a_dum} = $pole->{ulice};
    $objednavka{ulice_a_dum} =~ s/^\s+//;
    $objednavka{ulice_a_dum} =~ s/\s+$//;
    $objednavka{ulice_a_dum} =~ s/\s+/ /g;
    $objednavka{obec} = $pole->{obec};
    $objednavka{obec} =~ s/^\s+//;
    $objednavka{obec} =~ s/\s+$//;
    $objednavka{obec} =~ s/\s+/ /g;
    $objednavka{psc} = $pole->{psc};
    $objednavka{psc} =~ s/^\s+//;
    $objednavka{psc} =~ s/\s+$//;
    $objednavka{psc} =~ s/\s+//g;
    $objednavka{email} = $pole->{email};
    $objednavka{email} =~ s/^\s+//;
    $objednavka{email} =~ s/\s+$//;
    $objednavka{telefon} = $pole->{tel};
    $objednavka{sms} = $pole->{sms}; # 1 ... chce SMS
    $objednavka{poznamka} = $pole->{poznamka};
    $objednavka{poznamka2} = $pole->{poznamka2};
    $objednavka{odber} = $pole->{prevzeti};
    if($objednavka{odber} eq 'ulozenka')
    {
        $objednavka{ulozenka_branches} = $pole->{ulozenka_branches};
    }
    elsif($objednavka{odber} eq 'posta_na_postu')
    {
        $objednavka{ulozenka_branches} = $pole->{posta_branches};
    }
    if(defined($objednavka{ulozenka_branches}) && $objednavka{ulozenka_branches} !~ m/^\s*$/)
    {
        # Zjistit název pobočky podle jejího kódu. Budeme se dívat do naší databáze, kde nemusí být údaje aktuální,
        # zatímco zákazník vybíral ze seznamu, který se teď stáhnul ze serveru Uloženky. Ale pobočky se nemění tak často.
        my $pobocky = dzsql::dotaz($odb, 'name', 'link', 'lat', 'lng', "ulozenka_branches WHERE shortcut = '$objednavka{ulozenka_branches}'");
        if(scalar(@{$pobocky})>=1)
        {
            # Může se stát, že pobočku nenajdeme, ale nemělo by se stát, že jich najdeme více.
            $objednavka{ulozenka_branches_name} = $pobocky->[0]{name};
            $objednavka{ulozenka_branches_link} = $pobocky->[0]{link};
            # Některé pobočky (např. poštomaty) nemají odkaz na svou vlastní webovou stránku.
            # Mají ale souřadnice, takže vytvoříme alespoň odkaz na mapu.
            if(!defined($objednavka{ulozenka_branches_link}) || $objednavka{ulozenka_branches_link} =~ m/^\s*$/)
            {
                my $lat = $pobocky->[0]{lat};
                my $lng = $pobocky->[0]{lng};
                $objednavka{ulozenka_branches_link} = "https://www.mapy.cz/zakladni?x=$lng&y=$lat&z=15&source=coor&id=$lng%2C$lat";
            }
        }
    }
    $objednavka{rychlost} = $pole->{rychlost};
    $objednavka{platba} = $pole->{platba};
    $objednavka{platba} =~ s/prevodem/převodem/;
    $objednavka{platba} =~ s/hotove/hotově/;
    $objednavka{sleva_org_deti} = $pole->{organizace} eq "ano" ? 1 : 0;
    $objednavka{ico} = $pole->{ico};
    $objednavka{ico} =~ s/^\s+//;
    $objednavka{ico} =~ s/\s+$//;
    $objednavka{slevkod} = $pole->{slevkod};
    $objednavka{slevkod} =~ s/\s//g;
    $objednavka{souhlas_heureka} = $pole->{souhlas_heureka} ? 1 : 0;
    # Přidat informaci o čase vygenerování objednávkového formuláře a IP adrese, pro kterou byl vygenerován.
    $objednavka{gencas} = $pole->{gencas};
    $objednavka{genadr} = $pole->{genadr};
    # Přidat informaci o aktuálním čase jako identifikátor objednávky.
    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time());
    $objednavka{cas} = sprintf("%04d%02d%02d%02d%02d%02d", $year+1900, $mon+1, $mday, $hour, $min, $sec);
    # Dopočítat výši poštovného, slevy a celkovou hodnotu objednávky.
    # Ke každé položce také uložit odkaz na databázi, ze které tato položka pochází (hry, resp. obchod).
    kosik::dopocitat($hdb, $odb, $objednavka{kosik}, \%objednavka);
    # Vrátit záznam o objednávce.
    return \%objednavka;
}



#------------------------------------------------------------------------------
# Zkontroluje úplnost a správnost údajů v objednávce. Případné nedostatky
# popíše do objednávky do položky "chyby". Musí zkontrolovat i obsah košíku,
# protože se stává, že uživatelé mají v cachi starší verzi stránky, která jim
# poskytne odkazy na zboží, jež ve skutečnosti nemáme na skladě. Kvůli tomu
# objednávka obsahuje i dopočítaný obsah košíku, ne jen kódy zboží. Košík se
# ale dopočítává v samostatné funkci zjistit(). Zde předpokládáme, že už tuto
# funkci zavolal někdo dřív a že odkaz $objednavka už vede na hash, ve kterém
# je už vše dopočítáno.
#------------------------------------------------------------------------------
sub zkontrolovat_objednavku
{
    my $objednavka = shift;
    my $databaze = shift; # kvůli kontrole, že tutéž objednávku už nemáme v databázi (zákazník ji odeslal dvakrát)
    my $chyba = 0;
    # Košík nesmí být prázdný.
    if(!@{$objednavka->{kosik}})
    {
        push(@{$objednavka->{chyby}}, "Váš košík je prázdný, neobjednali jste si žádné zboží.");
        $chyba = 1;
    }
    # Jméno i příjmení musí být neprázdné.
    $objednavka->{jmeno} =~ s/^\s+//;
    $objednavka->{jmeno} =~ s/\s+$//;
    $objednavka->{prijmeni} =~ s/^\s+//;
    $objednavka->{prijmeni} =~ s/\s+$//;
    if($objednavka->{jmeno} eq '' || $objednavka->{prijmeni} eq '')
    {
        push(@{$objednavka->{chyby}}, 'Neuvedli jste jméno nebo příjmení.');
        $chyba = 1;
    }
    else
    {
        # Jestliže jméno nebo příjmení neobsahuje ani jedno velké písmeno, převést první znak na velké písmeno.
        # Test na velké písmeno uvnitř řetězce má pomoci rozlišit, kdy jde o ignoranci objednatele a kdy
        # o příjmení typu "van de Graaf".
        if(lc($objednavka->{jmeno}) eq $objednavka->{jmeno})
        {
            $objednavka->{jmeno} =~ s/^(.)/\u$1/;
        }
        if(lc($objednavka->{prijmeni}) eq $objednavka->{prijmeni})
        {
            $objednavka->{prijmeni} =~ s/^(.)/\u$1/;
        }
    }
    # E-mail musí vypadat jako běžný e-mail, tj. např. musí obsahovat zavináč a na konci musí být dva znaky nebo vyjmenované domény.
    $objednavka->{email} =~ s/^\s+//;
    $objednavka->{email} =~ s/\s+$//;
    if($objednavka->{email} !~ m/(\w|[-\._])+\@(\w|[-\._])+\.(\w\w|net|com|org|edu|mil|gov|biz|info)$/i)
    {
        push(@{$objednavka->{chyby}}, 'E-mailová adresa je asi chybná.');
        $chyba = 1;
    }
    # Má-li se zboží zasílat na dobírku, musí být vyplněna adresa.
    if($objednavka->{odber} !~ m/^(jenstejn|ulozenka|posta|posta_do_ruky|posta_na_postu|dpd)$/)
    {
        $objednavka->{odber} = 'posta';
    }
    if($objednavka->{odber} =~ m/^(posta|posta_do_ruky)$/)
    {
        $objednavka->{ulice_a_dum} =~ s/^\s+//;
        $objednavka->{ulice_a_dum} =~ s/\s+$//;
        $objednavka->{obec} =~ s/^\s+//;
        $objednavka->{obec} =~ s/\s+$//;
        $objednavka->{psc} =~ s/^\s+//;
        $objednavka->{psc} =~ s/\s+$//;
        my @chybadr = grep{$objednavka->{$_} =~ m/^\s*$/}('ulice_a_dum', 'obec', 'psc');
        if(@chybadr)
        {
            my $chybadr = join(", ", @chybadr);
            # Nahradit poslední čárku spojkou "a".
            $chybadr =~ s/, ([^,]*)$/ a $1/;
            # Doplnit diakritiku a velká písmena do názvů polí, než budou prezentována uživateli.
            $chybadr =~ s/ulice_a_dum/ulice/;
            $chybadr =~ s/psc/PSČ/;
            push(@{$objednavka->{chyby}}, "U poštovních zásilek musí být správně uvedena dodací adresa. Ve vaší adrese však chybí $chybadr.");
            $chyba = 1;
        }
        if($objednavka->{psc} !~ m/^[1234567]\d\d\d\d$/)
        {
            push(@{$objednavka->{chyby}}, "To, co jste vyplnili do kolonky PSČ, není platné české poštovní směrovací číslo. Pokud chcete zaslat zboží do zahraničí, je to možné, ale musíte nás <a href=\"mailto:obchod\@hrejsi.cz\">kontaktovat e-mailem</a> a počítat s&nbsp;podstatně vyššími náklady.");
            $chyba = 1;
        }
    }
    # Má-li se zboží dodat na pobočku Uloženky, musí být vyplněn kód pobočky.
    if($objednavka->{odber} eq 'ulozenka')
    {
        if($objednavka->{ulozenka_branches} =~ m/^\s*$/)
        {
            push(@{$objednavka->{chyby}}, 'Zvolili jste dodání prostřednictvím Uloženky, ale nevybrali jste pobočku.');
            $chyba = 1;
        }
    }
    # Telefon byl dříve povinný jen v případě, že zákazník požadoval vyrozumění prostřednictvím SMS.
    # Uloženka ale chce znát telefon vždy. Místo abychom dále podmiňovali telefon odběrem přes Uloženku, budeme ho také požadovat vždy.
    my $telefon = $objednavka->{telefon};
    # Kvůli kontrole vyházet vše, co nejsou číslice (pomlčky, mezery atd.)
    $telefon =~ s/\D//g;
    # Pokud nezbylo alespoň 9 číslic, s telefonem není něco v pořádku.
    # Česká telefonní čísla mají vždy 9 číslic. Před zahraničním telefonním číslem by zase musela být předvolba.
    if(length($telefon)<9)
    {
        push(@{$objednavka->{chyby}}, 'Nevyplnili jste telefonní číslo nebo je číslo neúplné.');
        $chyba = 1;
    }
    # IČO nesmí obsahovat nic jiného než číslice.
    if(exists($objednavka->{ico}) && $objednavka->{ico} =~ m/\D/)
    {
        push(@{$objednavka->{chyby}}, 'IČO nesmí obsahovat nic jiného než číslice.');
        $chyba = 1;
    }
    # Nelze žádat o slevu pro organizace pracující s mládeží, aniž by bylo uvedeno IČO.
    if($objednavka->{sleva_org_deti} && $objednavka->{ico} =~ m/^\s*$/)
    {
        push(@{$objednavka->{chyby}}, 'Nelze žádat o slevu pro organizace pracující s&nbsp;mládeží, není-li uvedeno IČO.');
        $chyba = 1;
    }
    # Ověřit platnost slevového kódu.
    if(exists($objednavka->{slevkod}))
    {
        # Odstranit ze slevového kódu všechny mezery, na ty nehrajeme.
        $objednavka->{slevkod} =~ s/\s//gs;
        if(kosik::slevkod($objednavka) eq 'chyba')
        {
            # Funkce kosik::slevkod() sama přidala do $objednavka->{chyby} nové chybové hlášení, takže tím už se nemusíme zabývat.
            $chyba = 1;
        }
    }
    # Ověřit, zda nejde o opakované odeslání téže objednávky.
    if(je_opakovana_objednavka($objednavka, $databaze))
    {
        push(@{$objednavka->{chyby}}, 'Pokoušíte se opakovaně odeslat objednávku, která již byla odeslána dříve.'.
                                     ' (K&nbsp;tomu může dojít i tehdy, když si tuto stránku uložíte do záložek a později náš server požádáte o její opětovné zobrazení.)'.
                                     ' Chcete-li objednat další zboží, klikněte prosím na název hry, která vás zajímá, a začněte znova s&nbsp;prázdným košíkem.');
        $chyba = 1;
    }
    # Opakované objednávky umíme detekovat až od 1. září 2009, ale občas se vynoří někdo, kdo má v záložkách ještě něco staršího.
    if($objednavka->{gencas}<20090901000000)
    {
        push(@{$objednavka->{chyby}}, 'Pokoušíte se odeslat objednávku, která byla sestavena před mnoha lety a její platnost už vypršela.'.
                                     ' (K&nbsp;tomu může dojít i tehdy, když si tuto stránku uložíte do záložek a později náš server požádáte o její opětovné zobrazení.)'.
                                     ' Chcete-li objednat další zboží, klikněte prosím na název hry, která vás zajímá, a začněte znova s&nbsp;prázdným košíkem.');
        $chyba = 1;
    }
    return !$chyba;
}



#------------------------------------------------------------------------------
# Ověří, zda obsah téhož objednávkového formuláře (ve stejný okamžik vygenero-
# vaného) nebyl už odeslán dříve, tj. jestli tato objednávka není duplicitní.
# To se může stát, pokud si uživatel uloží poslední stránku objednávky do
# záložek a pak se na ni chodí dívat. Nebo když se v prohlížeči vrátí o krok
# zpět, tam třeba opraví chybně zadanou adresu a znova zmáčkne "Odeslat
# objednávku". Na rozdíl od adresy, která může být u nové objednávky jiná,
# u obsahu košíku je zaručeno, že je stejný. Kdyby chtěl uživatel něco přidat
# nebo odebrat z košíku, u pokladny by se mu pak vygeneroval nový formulář
# s novou časovou známkou a objednávka by se nepovažovala za duplicitní.
#------------------------------------------------------------------------------
sub je_opakovana_objednavka
{
    my $objednavka = shift; # odkaz na hash
    my $databaze = shift;
    my $duplicity = dzsql::dotaz($databaze, 'gencas', "objednavky WHERE gencas = '$objednavka->{gencas}'");
    return scalar(@{$duplicity});
}



#------------------------------------------------------------------------------
# Zkontroluje správnost objednávky, vygeneruje potvrzovací (nebo zamítací) HTML
# kód, vygeneruje a pošle maily s objednávkou, uloží údaje na disk a do
# databáze.
#------------------------------------------------------------------------------
sub zpracovat
{
    my $objednavka = shift; # odkaz na hash
    my $databaze_obchod = shift; # potřebujeme kvůli uložení celé objednávky; na úpravu skladových zásob použijeme odkazy na databázové objekty, které jsou uložené přímo u každé objednané položky
    my $uspech = zkontrolovat_objednavku($objednavka, $databaze_obchod);
    my $html;
    if(!$uspech)
    {
        $html .= "<h1><font color=red>Vaše objednávka nebyla odeslána!</font></h1>\n";
        $html .= "<p>V&nbsp;objednávce byly zjištěny následující nedostatky:</p>\n";
        $html .= "<ul>\n";
        foreach my $chyba (@{$objednavka->{chyby}})
        {
            $html .= "<li>$chyba</li>\n";
        }
        $html .= "</ul>\n";
        # Vypsat případná varování (např. o zboží, které jsme z košíku odstranili, protože ho neprodáváme).
        if(@{$objednavka->{varovani}})
        {
            $html .= "<h2>Varování</h2>\n";
            $html .= "<ul>\n";
            foreach my $varovani (@{$objednavka->{varovani}})
            {
                $html .= "<li>$varovani</li>\n";
            }
            $html .= "</ul>\n";
        }
        $html .= "<div class=\"blok_note\">\n";
        $html .= kosik::html($objednavka, 0);
        $html .= "</div>\n";
        my $url = urlpar("hra=objednat");
        $html .= formular($objednavka, $databaze_obchod);
    }
    # Kontrola objednávky skončila úspěchem.
    else
    {
        my $mail; # mail pro obchod i pro zákazníka je z větší části stejný, ale před odeslání se obě verze oddělí
        $html .= "<h1>Objednávka byla úspěšně zpracována</h1>\n";
        if($objednavka->{platba} eq "převodem")
        {
            $mail .= "PLATBA PŘEDEM\n";
            $mail .= "Až si tuto objednávku přečte náš zaměstnanec a zkontroluje, že všechno zboží máme skladem, dostanete další mail s číslem účtu, na který máte platbu poslat.\n\n";
        }
        # Vypsat případná varování (např. o zboží, které jsme z košíku odstranili, protože ho neprodáváme).
        if(@{$objednavka->{varovani}})
        {
            $html .= "<h2>Varování</h2>\n";
            $html .= "<ul>\n";
            foreach my $varovani (@{$objednavka->{varovani}})
            {
                $html .= "<li>$varovani</li>\n";
            }
            $html .= "</ul>\n";
            $html .= "<p>Zbytek vaší objednávky byl v&nbsp;pořádku odeslán.</p>\n";
        }
        $html .= "<p>Děkujeme, že jste si objednali níže uvedené zboží.\n";
        $html .= "   Automatické potvrzení objednávky vám bylo současně zasláno e-mailem.\n";
        $html .= "   Do dvou pracovních dnů objednávku projde náš zaměstnanec,\n";
        $html .= "   zkontroluje, že všechno zboží máme skladem,\n";
        if($objednavka->{platba} eq "převodem")
        {
            $html .= "   a sdělí vám variabilní symbol a číslo účtu, kam máte zboží uhradit.\n";
        }
        else
        {
            $html .= "   a sdělí vám, kdy můžete zásilku očekávat.\n";
        }
        $html .= "</p>\n";
        $html .= "<p>Objednávka bude automaticky potvrzena e-mailem na adresu\n";
        $html .= "   <b>$objednavka->{email}</b>.\n";
        $html .= "   Pokud Vám tedy v nejbližších minutách nepřijde automatické potvrzení,\n";
        $html .= "   patrně jste se v adrese spletli a my Vám nebudeme moci doručit upřesnění\n";
        $html .= "   k&nbsp;Vaší objednávce. V&nbsp;takovém případě nám prosím pošlete e-mail na adresu\n";
        $html .= "   <a href=\"mailto:obchod\@hrejsi.cz\">obchod\@hrejsi.cz</a>.\n";
        $html .= "</p>\n";
#        if($objednavka->{odber} eq 'jenstejn')
#        {
#            $html .= "<p>Až bude pro Vás zboží v&nbsp;Jenštejně připravené, dáme Vám vědět a zašleme podklady k platbě (bohužel díky EET je při vyzvednutí v Jenštejně možná poute platba převodem. Omlouváme se.), včetně podrobností kdy (otvírací hodiny) a kde (přesná adresa).<br/>\n";
#            $mail .= "Osobní odběr: Jenštejn ($objednavka->{odber})\n";
#        }
#        els
        if($objednavka->{odber} eq 'ulozenka')
        {
            my $pobocka = "<a href=\"$objednavka->{ulozenka_branches_link}\" target=mapa>$objednavka->{ulozenka_branches_name}</a>";
            $html .= "<p>Až bude pro Vás zboží připravené na pobočce Uloženky $pobocka, pracovníci pobočky Vás budou informovat (SMS, e-mail).<br/>\n";
            $mail .= "Osobní odběr: Uloženka ($objednavka->{ulozenka_branches}: $objednavka->{ulozenka_branches_name})\n";
        }
        elsif($objednavka->{odber} eq 'posta_na_postu')
        {
            my $pobocka = "<a href=\"$objednavka->{ulozenka_branches_link}\" target=mapa>$objednavka->{ulozenka_branches_name}</a>";
            $html .= "<p>Až bude pro Vás zboží připravené na poště $pobocka, budete informováni (SMS, e-mail).<br/>\n";
            $mail .= "Osobní odběr: pobočka České pošty ($objednavka->{ulozenka_branches}: $objednavka->{ulozenka_branches_name})\n";
        }
        $html .= "<div class=\"blok_note\">\n";
        $html .= kosik::html($objednavka, 0);
        $html .= "</div>\n";
        my $kosik_text = kosik::text($objednavka);
        $mail .= $kosik_text;
        if(exists($objednavka->{slevkod}) && $objednavka->{slevkod} !~ m/^\s*$/)
        {
            $html .= "<p>Slevový kód: $objednavka->{slevkod}</p>\n";
            $mail .= "Slevový kód: $objednavka->{slevkod}\n";
        }
        my $platba = $objednavka->{platba};
        $platba =~ s/prevodem/převodem/;
        $platba =~ s/hotove/hotově/;
        # Vypsat dodací adresu.
        $html .= "<div class=\"blok_note\">\n";
        if($objednavka->{odber} =~ m/^(posta|posta_do_ruky|dpd)$/)
        {
            if($objednavka->{odber} eq 'dpd' && $platba eq 'hotově')
            {
                $html .= "<p>Zboží bude zasláno prostřednictvím kurýrní služby DPD (s&nbsp;dobírkou) na následující adresu:</p>\n";
                $mail .= "Zásilka DPD s dobírkou na adresu:\n";
            }
            elsif($objednavka->{odber} eq 'dpd')
            {
                $html .= "<p>Zboží bude zasláno prostřednictvím kurýrní služby DPD na následující adresu:</p>\n";
                $mail .= "Zásilka DPD na adresu:\n";
            }
            elsif($objednavka->{odber} eq 'posta_do_ruky' && $platba eq 'hotově')
            {
                $html .= "<p>Zboží bude zasláno prostřednictvím České pošty jako balík Do ruky (s&nbsp;dobírkou) na následující adresu:</p>\n";
                $mail .= "Balík Do ruky s dobírkou na adresu:\n";
            }
            elsif($objednavka->{odber} eq 'posta_do_ruky')
            {
                $html .= "<p>Zboží bude zasláno prostřednictvím České pošty jako balík Do ruky na následující adresu:</p>\n";
                $mail .= "Balík Do ruky na adresu:\n";
            }
            elsif($objednavka->{odber} eq 'posta' && $platba eq 'hotově')
            {
                $html .= "<p>Zboží bude zasláno dobírkou na následující adresu:</p>\n";
                $mail .= "Zaslání na dobírku na adresu:\n";
            }
            else
            {
                $html .= "<p>Zboží bude zasláno na následující adresu:</p>\n";
                $mail .= "Zaslání na adresu:\n";
            }
            $html .= "<table border=0>\n";
            $html .= "  <tr><td>Jméno:</td><td><b>$objednavka->{jmeno}</b></td></tr>\n";
            $html .= "  <tr><td>Příjmení:</td><td><b>$objednavka->{prijmeni}</b></td></tr>\n";
            $mail .= "Jméno: $objednavka->{jmeno} $objednavka->{prijmeni}\n";
            $html .= "  <tr><td>Ulice a dům:</td><td><b>$objednavka->{ulice_a_dum}</b></td></tr>\n";
            $mail .= "Ulice a dům: $objednavka->{ulice_a_dum}\n";
            $html .= "  <tr><td>Obec:</td><td><b>$objednavka->{psc} $objednavka->{obec}</b></td></tr>\n";
            $mail .= "Obec: $objednavka->{psc} $objednavka->{obec}\n";
        }
        else
        {
            $html .= "<table border=0>\n";
            $html .= "  <tr><td>Jméno:</td><td><b>$objednavka->{jmeno}</b></td></tr>\n";
            $html .= "  <tr><td>Příjmení:</td><td><b>$objednavka->{prijmeni}</b></td></tr>\n";
            $mail .= "Jméno: $objednavka->{jmeno} $objednavka->{prijmeni}\n";
            $html .= "  <tr><td>Ulice a dům:</td><td><b>$objednavka->{ulice_a_dum}</b></td></tr>\n";
            $mail .= "Ulice a dům: $objednavka->{ulice_a_dum}\n";
            $html .= "  <tr><td>Obec:</td><td><b>$objednavka->{psc} $objednavka->{obec}</b></td></tr>\n";
            $mail .= "Obec: $objednavka->{psc} $objednavka->{obec}\n";
        }
        $html .= "  <tr><td>E-mail:</td><td><b>$objednavka->{email}</b></td></tr>\n";
        $mail .= "E-mail: $objednavka->{email}\n";
        $html .= "  <tr><td>Telefon:</td><td><b>$objednavka->{telefon}</b></td></tr>\n";
        $mail .= "Telefon: $objednavka->{telefon}\n";
        $html .= "</table>\n";
        if($objednavka->{sms})
        {
            $html .= "<p>Kromě e-mailu si přeji i vyrozumění prostřednictvím SMS.</p>\n";
            $mail .= "Vyrozumět prostřednictvím SMS.\n";
        }
        $html .= "</div>\n";
        $html .= "<p>Poznámka: <b>$objednavka->{poznamka} </b><br>\n";
        $mail .= "Poznámka: $objednavka->{poznamka} \n";
        $html .= "Poznámka 2: <b>$objednavka->{poznamka2} </b><br>\n";
        $mail .= "Poznámka 2: $objednavka->{poznamka2} \n";
        $html .= "<p>Platba: $platba</p>\n";
        $mail .= "Platba: $platba\n";
        $mail .= "Souhlas Heuréka: $objednavka->{souhlas_heureka}\n";
        # Přidat kód, který zavolá Heuréku a nabonzuje jí zákazníka, aby mu mohla nabízet dotazník, jak s námi byl spokojen.
        if($objednavka->{souhlas_heureka})
        {
            # Kód obchodu Hrejsi.cz u Heuréky: f7073143bcc79c338c05ff8ee653aa98
            # Kódy objednaných věcí musí odpovídat tomu, co Heuréce dodáváme v XML.
            my @itemids;
            foreach my $vec (@{$objednavka->{kosik}})
            {
                if($vec->{oddeleni} eq 'hry')
                {
                    push(@itemids, "itemId[]=$vec->{kod}");
                }
                else
                {
                    push(@itemids, "itemId[]=O$vec->{kod}");
                }
            }
            my $itemids = join('&', @itemids);
            my $hurl = "https://www.heureka.cz/direct/dotaznik/objednavka.php?id=f7073143bcc79c338c05ff8ee653aa98&email=$objednavka->{email}&$itemids&orderid=$objednavka->{cas}";
            $objednavka->{hlaseni_heureka} = $hurl;
            $objednavka->{odpoved_heureka} = get($hurl);
        }
        # Přidat kód Google, který spáruje tuto objednávku s případným kliknutím na naši reklamu u Google.
        $html .= <<EOF
<!-- Google Code for Za vysvědčení Conversion Page -->
<script type="text/javascript">
/* <![CDATA[ */
var google_conversion_id = 1004330497;
var google_conversion_language = "cs";
var google_conversion_format = "3";
var google_conversion_color = "ffffff";
var google_conversion_label = "opn8CNfd3AIQgbzz3gM";
var google_conversion_value = 0;
/* ]]> */
</script>
<script type="text/javascript" src="https://www.googleadservices.com/pagead/conversion.js">
</script>
<noscript>
<div style="display:inline;">
<img height="1" width="1" style="border-style:none;" alt="" src="https://www.googleadservices.com/pagead/conversion/1004330497/?value=0&amp;label=opn8CNfd3AIQgbzz3gM&amp;guid=ON&amp;script=0"/>
</div>
</noscript>
EOF
        ;
        # Přidat kód Heuréky, který spáruje tuto objednávku s případným kliknutím na naši reklamu na Heuréce.
        $html .= <<EOF
<!-- Měření konverzí Heuréka -->
<script type="text/javascript">
    var _hrq = _hrq || [];
    _hrq.push(['setKey', 'D6EF7C44D6F158A085B47DF70A338078']);
EOF
        ;
        $html .= "    _hrq.push(['setOrderId', '$objednavka->{cas}']);\n";
        foreach my $vec (@{$objednavka->{kosik}})
        {
            # Takže Heuréka nepotřebuje kód zboží, ale jeho název?
            my $kod = $vec->{oddeleni} eq 'hry' ? $vec->{kod} : 'O'.$vec->{kod};
            my $nazev = $vec->{nazev};
            $nazev =~ s/'//g;
            $html .= "    _hrq.push(['addProduct', '$nazev', '$vec->{jednotkova_cena}', '$vec->{pocet}']);\n";
        }
        $html .= <<EOF

    _hrq.push(['trackOrder']);

(function() {
    var ho = document.createElement('script'); ho.type = 'text/javascript'; ho.async = true;
    ho.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.heureka.cz/direct/js/ext/1-roi-async.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ho, s);
})();
</script>
EOF
        ;
        my $subject;
        my $obchodto = 'obchod@hrejsi.cz';
#        if($objednavka->{odber} eq 'jenstejn')
#        {
#            $subject = "Objednavka odber Jenstejn: $objednavka->{jmeno} $objednavka->{prijmeni}";
#        }
#        else
        $subject = "Objednavka her: $objednavka->{jmeno} $objednavka->{prijmeni}";
        # Kopie na danzeman11@gmail.com je důležitá, protože mail, který jde zákazníkovi, bych jinak vůbec neviděl.
        my $skopie = 'danzeman11@gmail.com';
        # V této podobě odeslat mail zákazníkovi.
        mail::odeslat
        (
            'From'     => 'Robot Hrejsi <robot@hrejsi.cz>',
            'Reply-to' => 'Obchod Hrejsi.cz <obchod@hrejsi.cz>',
            'To'       => $objednavka->{email},
            'Bcc'      => $skopie,
            'Subject'  => $subject,
            'text'     => $mail
        );
        # Doplnit mail o informace, které slouží pro zpracování zakázky v obchodu.
        # Následující informace pomáhají poznat opakovaně odeslané formuláře a vůbec potíže s robotem.
        $mail .= "ip: $objednavka->{genadr}\n";
        $mail .= "gt: $objednavka->{gencas}\n";
        $mail .= "st: $objednavka->{cas}\n";
        ###!!! Kvůli ladění zatím do e-mailu pro nás okopíruju i hlášení, které jsme poslali Heuréce.
        ###!!! Později ho asi odstraním a nechám tu jen kopii jejich odpovědi.
        ###!!! Přece jen hlášení obsahuje tajný kód našeho obchodu, který nemusí zbytečně cestovat e-mailem.
        #$mail .= "hlášení Heuréce: $objednavka->{hlaseni_heureka}\n";
        $mail .= "odpověď od Heuréky: $objednavka->{odpoved_heureka}\n";
        $mail = "https://obchod.hrejsi.cz/cgi/hry/vnitro/objednavka.pl?cislo=$objednavka->{cas}\n\n$mail";
        # Rychlokódy důležitých údajů do předmětu zprávy.
        my @rychlokody;
        if($objednavka->{sms})
        {
            push(@rychlokody, 'S');
        }
        if($objednavka->{platba} eq 'převodem')
        {
            push(@rychlokody, 'P');
        }
        if(scalar(@rychlokody))
        {
            $subject .= ' ['.join('', @rychlokody).']';
        }
        # Pro odpověď zákazníkovi se nemá používat přímo e-mailový program, ale webové rozhraní, aby se reakce projevila i v databázi.
        # Proto vyplníme nefunkční reply-to adresu. Zákazníkův mail bude pro případ nouze vidět v těle mailu.
        my $replyto = "\"Odpovídej pomocí webového rozhraní!\" <noreply\@nefunkcni.adresa>";
        #my $replyto = "\"$objednavka->{jmeno} $objednavka->{prijmeni}\" <$objednavka->{email}>, obchod\@hrejsi.cz";
        # V této podobě odeslat mail zaměstnancům obchodu.
        mail::odeslat
        (
            'From'     => 'Robot Hrejsi <robot@hrejsi.cz>',
            'Reply-to' => $replyto,
            'To'       => $obchodto,
            'Bcc'      => $skopie,
            'Subject'  => $subject,
            'text'     => $mail
        );
        # Klárce na mobila poslat stručnější zprávu a v jiném pořadí.
        if($objednavka->{poznamka} ne "Pokus." && $objednavka->{email} ne "zeman\@ufal.mff.cuni.cz")
        {
            my $sms;
            $sms .= "$objednavka->{jmeno} $objednavka->{prijmeni}\n";
            $sms .= "$objednavka->{telefon}\n";
#            $sms .= "JENSTEJN\n" if($objednavka->{odber} eq 'jenstejn');
            $sms .= "PALUBA\n" if($objednavka->{odber} eq 'paluba');
            $sms .= "PREDEM\n" if($objednavka->{platba} eq 'převodem');
            $sms .= "SMS\n" if($objednavka->{sms});
            $sms .= $kosik_text;
            # Zkrátit SMS o věci z košíku, které jsou v SMS nadbytečné.
            # (Většinou akorát způsobují přetečení do druhé SMS, kterou Klárka hned maže.)
            $sms =~ s/MEZISOUČET\s+=\s+\d+\s+Kč\s*//s; # odsud ještě nemůžeme mazat až do konce, Klárka potřebuje poštovné
            $sms =~ s/\s*CELKEM.*//s;
            my $soukromy = 'klara.zemanova';
            #my $firemni = 'obchod.hrejsi'; ###!!! firemní číslo zrušeno, dostal ho Martínek!
            mail::odeslat
            (
                "From"     => "robot\@hrejsi.cz",
                "To"       => "$soukromy\@vodafonemail.cz",
                "Subject"  => "Objednavka:",
                "text"     => $sms
            );
        }
        # Úspěšně zadanou a odeslanou objednávku uložit do databáze.
        $html .= ulozit_objednavku($objednavka, $databaze_obchod);
    }
    return $html;
}



#------------------------------------------------------------------------------
# Uloží objednávku do databáze.
#------------------------------------------------------------------------------
sub ulozit_objednavku
{
    my $objednavka = shift; # odkaz na hash
    my $databaze_obchod = shift; # potřebujeme kvůli uložení celé objednávky; na úpravu skladových zásob použijeme odkazy na databázové objekty, které jsou uložené přímo u každé objednané položky
    my $html; # chceme-li uživateli zobrazit chyby SQL (spíš jen při ladění), můžeme je připsat sem
    # Přidat základní informace o objednávce do tabulky objednavky.
    my @nazvy = qw(cas gencas jmeno prijmeni ulice_a_dum obec psc email telefon poznamka poznamka2 odber ulozenka_branches platba sms rychlost mezisoucet mnozstevni_sleva postovne celkem sleva_org_deti ico slevkod souhlas_heureka);
    my $seznam_poli = join(', ', @nazvy); use Encode;
    my @hodnoty = map{m/(mezisoucet|mnozstevni_sleva|postovne|celkem|sleva_org_deti|souhlas_heureka)/ ? $objednavka->{$_} : encode('utf8', "'$objednavka->{$_}'")}(@nazvy);
    my $seznam_hodnot = join(', ', @hodnoty);
    my $dotaz = "INSERT INTO objednavky ($seznam_poli) VALUES ($seznam_hodnot);";
    if(!$databaze_obchod->do($dotaz))
    {
        # Objednávka, která se naoko zpracuje, ale neuloží se do databáze, je fakt průšvih.
        # Proto se pokusit zařídit, aby se o tom někdo z obchodu dozvěděl.
        $html .= "<p><font color=magenta>Chyba: Nepodařilo se přidat záznam do tabulky objednavky: ".$DBI::errstr.". Prosím, informujte o této chybě správce serveru na adrese obchod\@hrejsi.cz.</font></p>\n";
        # Poslat Danovi varování. Snad bude fungovat alespoň mail.
        mail::odeslat
        (
            'From'     => 'robot@hrejsi.cz',
            'To'       => 'danzeman11@gmail.com',
            'Subject'  => 'VAROVANI: Nepodarilo se ulozit objednavku do databaze!',
            'text'     => $dotaz
        );
    }
    # Přidat informace o jednotlivých objednaných položkách do tabulky objzbozi.
    # Současně snížit stav zásob v tabulce zbozi (bude přepsáno aktuálními údaji při příštím Klářině exportu).
    @nazvy = qw(databaze kod_zbozi jednotkova_cena pocet cena_celkem);
    $seznam_poli = join(', ', ('cas', @nazvy));
    # Některá pole se jmenují v databázi jinak než v $objednavka->{kosik}. Zařídit překlad.
    my %kosiknazev; foreach my $nazev (@nazvy) { $kosiknazev{$nazev} = $nazev; }
    $kosiknazev{databaze} = 'db';
    $kosiknazev{kod_zbozi} = 'kod';
    foreach my $radek (@{$objednavka->{kosik}})
    {
        # Získat pole hodnot ve stejném pořadí jako pole názvů.
        # Řetězcové hodnoty obalit apostrofy, číselné nechat tak, jak jsou.
        @hodnoty = map {my $h = $radek->{$kosiknazev{$_}}; $_ =~ m/^(databaze|kod_zbozi)$/ ? "'$h'" : $h} (@nazvy);
        $seznam_hodnot = join(', ', ("'$objednavka->{cas}'", @hodnoty));
        ###!!!
        # Nemůžeme využít funkci dzsql::insert(), protože některá pole v hashi mají jiné názvy než v databázi.
        # Museli bychom nejdříve přepsat hash do jiného. Chtělo by to nějaký objektový modul, který všechny tyhle obtíže vyřeší.
        $dotaz = "INSERT INTO objzbozi ($seznam_poli) VALUES ($seznam_hodnot);";
        # Objednávka, která se naoko zpracuje, ale neuloží se do databáze, je fakt průšvih.
        # Proto se pokusit zařídit, aby se o tom někdo z obchodu dozvěděl.
        # (Už se nám stalo, že se uložil hlavní záznam objednávky a 4 hry ze 6, zatímco poslední 2 tam prostě nebyly.)
        if(!$databaze_obchod->do($dotaz))
        {
            $html .= "<p><font color=magenta>Chyba: Nepodařilo se přidat záznam do tabulky objzbozi: ".$DBI::errstr.". Prosím, informujte o této chybě správce serveru na adrese obchod\@hrejsi.cz.</font></p>\n";
            # Poslat Danovi varování. Snad bude fungovat alespoň mail.
            mail::odeslat
            (
                'From'     => 'robot@hrejsi.cz',
                'To'       => 'danzeman11@gmail.com',
                'Subject'  => 'VAROVANI: Nepodarilo se ulozit cast objednavky do databaze!',
                'text'     => $dotaz
            );
        }
        # Snížit v evidenci počet kusů daného zboží na skladě.
        my $sklad;
        if($objednavka->{odber} eq 'paluba')
        {
            $sklad = 'paluba';
        }
        else # dobírka, čm i jenštejn
        {
            # Tímhle se myslí distribuční sklad pro poštovní zásilky, i když už není na Černém Mostě.
            $sklad = 'cerny_most';
        }
        # Pozor! Objednávky jsme ukládali všechny do jediné databáze, ale informace o zboží mohou ležet v různých databázích.
        # U každé položky v košíku už bychom v tuto chvíli měli mít uložen odkaz na příslušný databázový objekt.
        # Uložil se tam při dopočítávání košíku ve funkci objednavka::zjistit(), která měla být zavolána z hlavního programu dříve, než se začala objednávka zpracovávat.
        my $zaznamy = dzsql::dotaz($radek->{dbobj}, $sklad, "zbozi WHERE kod = '$radek->{kod}'");
        my $puvodni_stav = $zaznamy->[0]{$sklad};
        if($puvodni_stav>0)
        {
            my $novy_stav = $puvodni_stav-$radek->{pocet};
            $novy_stav = 0 if($novy_stav<0);
            $dotaz = "UPDATE zbozi SET $sklad = '$novy_stav' WHERE kod = '$radek->{kod}'";
            if(!$radek->{dbobj}->do($dotaz))
            {
                $html .= "<p><font color=magenta>Chyba: Nepodařilo se aktualizovat stav zásob: ".$DBI::errstr.". Prosím, informujte o této chybě správce serveru na adrese obchod\@hrejsi.cz.</font></p>\n";
                # Poslat Danovi varování. Snad bude fungovat alespoň mail.
                mail::odeslat
                (
                    'From'     => 'robot@hrejsi.cz',
                    'To'       => 'danzeman11@gmail.com',
                    'Subject'  => 'VAROVANI: Nepodarilo se aktualizovat stav zasob v databazi!',
                    'text'     => $dotaz
                );
            }
        }
    }
    return $html;
}



1;
