#!/usr/bin/perl
# Internetový obchod s hrami / funkce pro maily zákazníkům.
# Copyright © 2009, 2013, 2015 Dan Zeman <zeman@ufal.mff.cuni.cz>
# 25.7.2015: přechod na nový kub.cz

package objmail;
use utf8;
use open ':utf8';
use lib '/s/w/lib/dan';
use mail;



#-----------------------------------------------------------------------------
# Vrátí vzor mailu pro konkrétní příležitost.
#-----------------------------------------------------------------------------
sub vzor_mailu
{
    my $novy_stav = shift;
    my $objednavka = shift;
    my $rekapitulace = shift;
    my $dodaci_adresa;
    if($objednavka->{odber} eq 'ulozenka')
    {
        $dodaci_adresa .= "$objednavka->{jmeno} $objednavka->{prijmeni}\n";
        $dodaci_adresa .= "Pobočka Uloženky:\n";
        $dodaci_adresa .= "$objednavka->{ulozenka_branches_name}";
    }
    elsif($objednavka->{odber} eq 'intime')
    {
        $dodaci_adresa .= "$objednavka->{jmeno} $objednavka->{prijmeni}\n";
        $dodaci_adresa .= "Poštomat:\n";
        $dodaci_adresa .= "$objednavka->{ulozenka_branches_name}";
    }
    elsif($objednavka->{odber} eq 'posta_na_postu')
    {
        $dodaci_adresa .= "$objednavka->{jmeno} $objednavka->{prijmeni}\n";
        $dodaci_adresa .= "Pobočka České pošty:\n";
        $dodaci_adresa .= "$objednavka->{ulozenka_branches_name}";
    }
    else
    {
        $dodaci_adresa .= "$objednavka->{jmeno} $objednavka->{prijmeni}\n";
        $dodaci_adresa .= "$objednavka->{ulice_a_dum}\n";
        $dodaci_adresa .= "$objednavka->{psc}  $objednavka->{obec}";
    }
    # Má objednávka přiřazený variabilní symbol?
    my $vs = 'VSVSVSVSVS';
    if($objednavka->{varsymbol}>0)
    {
        $vs = $objednavka->{varsymbol};
    }
    # Podle druhu dopravy připravit informaci o možnostech sledování zásilky.
    my $sledovani_zasilky;
    if($objednavka->{odber} eq 'ulozenka')
    {
        if($objednavka->{ulozenka_branches} =~ m/^dpd/)
        {
            # DPD: https://tracking.dpd.de/cgi-bin/delistrack?lang=cs&pknr=13815017505974
            # Stejná sledovací stránka funguje i pro doručení do DPD Parcel Shopu, tedy pro nás nevlastní pobočky Uloženky.
            $sledovani_zasilky = "\nZásilku lze sledovat na stránkách DPD:\n";
            $sledovani_zasilky .= "https://tracking.dpd.de/cgi-bin/delistrack?lang=cs&pknr=$objednavka->{podaci_cislo}\n";
        }
        else
        {
            # Uloženka (vlastní pobočky): https://tracking.ulozenka.cz/1704311
            $sledovani_zasilky = "\nZásilku lze sledovat na stránkách Uloženky:\n";
            $sledovani_zasilky .= "https://tracking.ulozenka.cz/$objednavka->{podaci_cislo}\n";
        }
    }
    elsif($objednavka->{odber} eq 'dpd')
    {
        # DPD: https://tracking.dpd.de/cgi-bin/delistrack?lang=cs&pknr=13815017505974
        $sledovani_zasilky = "\nZásilku lze sledovat na stránkách DPD:\n";
        $sledovani_zasilky .= "https://tracking.dpd.de/cgi-bin/delistrack?lang=cs&pknr=$objednavka->{podaci_cislo}\n";
    }
    elsif($objednavka->{odber} eq 'intime')
    {
        # Intime: kód zásilky se zřejmě předává metodou POST, takže není součástí adresy.
        # http://www.intime.cz/track_and_trace ... vyplnit číslo X8700000436 do kolonky IN TIME sledování zásilek
        $sledovani_zasilky = "\nZásilku lze sledovat na stránkách společnosti InTime.\n";
        $sledovani_zasilky .= "Jděte na https://www.intime.cz/track_and_trace a do pole „IN TIME sledování zásilek“ zkopírujte kód vaší zásilky: $objednavka->{podaci_cislo}\n";
    }
    else # Česká pošta, včetně balíků Do ruky a Na poštu.
    {
        $sledovani_zasilky = "\nZásilku lze sledovat na stránkách České pošty:\n";
        $sledovani_zasilky .= "https://www.ceskaposta.cz/cz/nastroje/sledovani-zasilky.php?barcode=$objednavka->{podaci_cislo}&locale=CZ&send.x=51&send.y=6&go=ok\n";
    }
    # Odhadnout datum doručení zásilky zákazníkovi poštou.
    ###!!! V budoucnosti zde budeme chtít přímo vypočítat cílové datum, resp. rozsah dat.
    ###!!! Zatím pouze údaj o počtu pracovních dnů (Klára schválně udává větší rozpětí než Česká pošta).
    my $datum_doruceni;
    # Obyčejný balík (i pilný) má podací číslo začínající na BX nebo BA.
    if($objednavka->{podaci_cislo} =~ m/^B[XA]/)
    {
        if($objednavka->{pilne})
        {
            $datum_doruceni = '1 až 2 pracovní dny';
        }
        else
        {
            $datum_doruceni = '1 až 4 pracovní dny';
        }
    }
    # Doporučený dopis má podací číslo začínající na R.
    elsif($objednavka->{podaci_cislo} =~ m/^R/)
    {
        $datum_doruceni = '1 až 3 pracovní dny';
    }
    # Obchodní balík má podací číslo začínající na BO.
    elsif($objednavka->{podaci_cislo} =~ m/^BO/)
    {
        $datum_doruceni = '1 pracovní den';
    }
    my $vzor;
    #--------------------------------------------------------------------------
    # PODPISY
    #--------------------------------------------------------------------------
    my $podpis_klara = <<EOF
Za Obchod.Hrejsi.Cz zdraví
Klára Zemanová
tel.: 777552729
skype: klara.zemanova
https://obchod.hrejsi.cz/
https://www.deskohrani.cz/
EOF
    ;
    if($novy_stav eq '')
    {
        #--------------------------------------------------------------------------
        # OBECNÝ MAIL, POŠTA
        #--------------------------------------------------------------------------
        $vzor = <<EOF
Dobrý den,

*** DOPLNIT TEXT MAILU ZDE ***

Celková cena dobírky je $objednavka->{celkem} Kč.

Rekapitulace objednávky:
$rekapitulace
Dodací adresa:

$dodaci_adresa

$podpis_klara
EOF
        ;
    }
    elsif($novy_stav eq 'máme')
    {
        #--------------------------------------------------------------------------
        # MÁME, POSÍLÁME, POŠTA
        #--------------------------------------------------------------------------
        $vzor = <<EOF
Dobrý den,

děkujeme za objednávku. Zboží máme pro Vás připravené.
Dobírku můžete čekat koncem tohoto či začátkem příštího týdne.
Celková cena dobírky bude $objednavka->{celkem} Kč.

Rekapitulace objednávky:
$rekapitulace
Dodací adresa:

$dodaci_adresa

$podpis_klara
EOF
        ;
    }
    elsif($novy_stav eq 'odesláno')
    {
        my $jako_pilny_balik;
        if($objednavka->{pilne})
        {
            $jako_pilny_balik = ' jako pilný balík';
        }
        #--------------------------------------------------------------------------
        # ODESLALI JSME POŠTOU
        #--------------------------------------------------------------------------
        $vzor = <<EOF
Dobrý den,

zásilku jsme předali dopravci dne $objednavka->{datum_odeslani}$jako_pilny_balik.
Podací číslo je $objednavka->{podaci_cislo}.
Přepravce Vás bude informovat SMS a e-mailem.
Předpokládaný termín doručení: $datum_doruceni.
$sledovani_zasilky
$podpis_klara
EOF
            ;
    }
    elsif($novy_stav eq 'zaplaťte')
    {
        #--------------------------------------------------------------------------
        # ZAPLAŤTE, POŠTA
        #--------------------------------------------------------------------------
        $vzor = <<EOF
Dobrý den,

děkujeme za objednávku. Zboží máme pro Vás připravené.

Uhraďte tedy prosím částku $objednavka->{celkem} Kč na účet 188936299/0300, variabilní symbol $vs.
Jakmile obdržíme platbu, zásilku odešleme.
Poště trvá dodání 1 až 4 pracovní dny.

Rekapitulace objednávky:

$rekapitulace
Dodací adresa:

$dodaci_adresa

$podpis_klara
EOF
        ;
    }
    # Pokud se při přechodu do stavu "vytištěno" volá tato funkce pro přípravu mailu, znamená to,
    # že jsme byli ve stavu "vytištěno před zaplacením" a tím pádem chceme zákazníkovi psát totéž
    # jako při přechodu do stavu "zaplaceno". Do stavu "vytištěno" se dá také přejít ručně ze stavu
    # "máme" nebo "zaplaceno", v tom případě se ale žádný další mail zákazníkovi neposílá.
    elsif($novy_stav =~ m/^(zaplaceno|vytištěno)$/)
    {
        $vzor = <<EOF
Dobrý den,

Vaše platba dorazila. Zboží připravujeme k odeslání.

Rekapitulace objednávky:
$rekapitulace
Dodací adresa:

$dodaci_adresa

$podpis_klara
EOF
        ;
    }
    elsif($novy_stav eq 'nemáme')
    {
        ###!!! Rozlišit případ, kdy nemáme skladem část objednávky a kdy nemáme nic:
        ###!!! 1. Bohužel nemáme vše skladem.
        ###!!! 2. Bohužel nemáme zboží skladem.
        ###!!! Rozlišit také podle očekávané doby doskladnění:
        ###!!! 1. XXX již nemají ani naši dodavatelé a v dohledné době neočekáváme, že se na tom něco změní.
        ###!!! 2. XXX momentálně nemají ani naši dodavatelé. Čeká se na dotisk/Pokoušíme se sehnat v zahraničí, budeme vás informovat.
        ###!!! 3. Předpokládáme, že další XXX nám přijde TTT (příští týden apod.)
        ###!!! 4. XXX je potřeba převézt mezi Jenštejnem a Palubou: tohle lidem ani nepsat, rovnou to udělat?
        #--------------------------------------------------------------------------
        # NEMÁME, POŠTA
        #--------------------------------------------------------------------------
        $vzor = <<EOF
Dobrý den,

děkujeme za objednávku. Bohužel nemáme vše skladem. Jakmile bude pro Vás zásilka
připravena, upřesníme termín odeslání. Děkujeme za pochopení.

$rekapitulace

$podpis_klara
EOF
        ;
    }
    return $vzor;
}



#-----------------------------------------------------------------------------
# Sestaví rekapitulaci objednaného zboží do mailu.
#-----------------------------------------------------------------------------
sub prehled_zbozi
{
    my $objednavka = shift;
    my $prehled;
    foreach my $polozka (@{$objednavka->{zbozi}})
    {
        $prehled .= sprintf("%2d × %4d Kč = %4d Kč: %s\n", $polozka->{pocet}, $polozka->{jednotkova_cena}, $polozka->{cena_celkem}, $polozka->{nazev});
    }
    $prehled .= sprintf("MEZISOUČET   = %4d Kč\n", $objednavka->{mezisoucet});
    # Přičíst poštovné.
    # Pokud není znám způsob odběru nebo pokud jde o osobní odběr, informaci o poštovném nezobrazovat.
    if($objednavka->{odber} =~ m/^(posta|posta_do_ruky|posta_na_postu|ulozenka|intime|dpd)$/)
    {
        $prehled .= sprintf("Poštovné     = %4d Kč\n", $objednavka->{postovne});
    }
    # Započítat množstevní slevu.
    # Předpokládáme, že množstevní sleva se aplikuje při vyšším nákupu,
    # než při jakém se odpouští poštovné, takže se nemusíme bát, že bychom
    # výši slevy počítali i z poštovného.
    if($objednavka->{mnozstevni_sleva}>0)
    {
        $prehled .= sprintf("Sleva        = %4d Kč\n", $objednavka->{mnozstevni_sleva});
    }
    # Závěr.
    $prehled .= sprintf("CELKEM       = %4d Kč\n", $objednavka->{celkem});
    return $prehled;
}



#-----------------------------------------------------------------------------
# Odešle dopis zákazníkovi.
#-----------------------------------------------------------------------------
sub odeslat_mail
{
    my $cislo_objednavky = shift;
    my $adresat = shift;
    my $predmet = shift;
    my $text = shift;
    my %mail =
    (
        'From'    => 'obchod@hrejsi.cz',
        'To'      => $adresat,
        'Cc'      => 'obchod@hrejsi.cz',
        'Subject' => $predmet,
        'text'    => $text
    );
    mail::odeslat(%mail);
}



1;
