Пример #1
0
class BaseVypocet():
    def __init__(self):
        self.db = DbHelper("janicka", "janicka",
                           "Tajne heslo, ktere neni na githubu")
        self.denni_prijem_kj = self.db.select_single_value(
            "SELECT u.denni_prijem_kj FROM uzivatel u WHERE id = 1")
        self.kj_potrebne_snidane = int(self.denni_prijem_kj / 100 *
                                       20)  # snidane 20%
        self.kj_potrebne_svacina = int(self.denni_prijem_kj / 100 *
                                       10)  # svacina 10-15%
        self.kj_potrebne_obed = int(self.denni_prijem_kj / 100 *
                                    35)  # obed 30-35%
        self.kj_potrebne_vecere = int(self.denni_prijem_kj / 100 *
                                      25)  # vecere 15-25%

        self.prebytek_ze_snidane = 0
        self.prebytek_z_obeda = 0

    def nacti_zasoby(self):
        funkce.nacti_zasoby(
        )  # toto je zde, aby se tabulka nenacitala hned po spusteni serveru

    def _formatuj_vystup(self, jidla):
        vypis = []
        for jidlo in jidla:
            nazev = jidlo[0]
            mnozstvi = "{} {}".format(jidlo[1], jidlo[2])

            vypis.append(Polozka_jidelnicku(nazev, mnozstvi))

        return vypis

    def get_snidane(self):
        snidane = funkce.vytvor_snidani(self.kj_potrebne_snidane)
        self.prebytek_ze_snidane = snidane[0]
        return self._formatuj_vystup(snidane[1])

    def get_svacina_dopo(self):
        svacina = funkce.vytvor_svacinu(self.kj_potrebne_svacina)
        return self._formatuj_vystup(svacina[1])

    def get_obed(self):
        obed = funkce.vytvor_obed(self.kj_potrebne_obed +
                                  self.prebytek_ze_snidane)
        self.prebytek_z_obeda = obed[0]
        return self._formatuj_vystup(obed[1])

    def get_svacina_odpo(self):
        svacina = funkce.vytvor_svacinu(self.kj_potrebne_svacina)
        return self._formatuj_vystup(svacina[1])

    def get_vecere(self):
        vecere = funkce.vytvor_veceri(self.kj_potrebne_vecere +
                                      self.prebytek_z_obeda)
        return self._formatuj_vystup(vecere[1])
Пример #2
0
class VypocetDbBased(BaseVypocet):

    SNIDANE_ID = 1
    SVACINA_DOPO_ID = 2
    OBED_ID = 3
    SVACINA_ODPO_ID = 4
    VECERE_ID = 5

    def __init__(self):
        self.db = DbHelper("ada", "ada", "To heslo ti nereknu")

    def get_snidane(self):
        return self.get_dennichod(self.SNIDANE_ID)

    def get_svacina_dopo(self):
        return get_dennichod(self.SVACINA_DOPO_ID)

    def get_obed(self):
        return get_dennichod(self.OBED_ID)

    def get_svacina_odpo(self):
        return get_dennichod(self.SVACINA_ODPO_ID)

    def get_vecere(self):
        return get_dennichod(self.VECERE_ID)

    def get_dennichod(self, dennichod_id):

        denni_prijem_kj = self.db.select_single_value(
            "SELECT u.denni_prijem_kj FROM uzivatel u WHERE id = 1")

        mozne_patterny = self.db.select_all(
            "SELECT p.id FROM Pattern p JOIN denni_chody dch ON p.id_denni_chody = dch.id WHERE 0 < all(SELECT sum(CASE WHEN (z.mnozstvi-z.blokovano)*pom.kj >= dch.zastoupeni_procenta * pl.ratio * %s then 1 else 0 END) FROM pattern_line pl JOIN pattern_line_set pls ON pl.id_pattern = pls.id_pattern and pl.line = pls.pattern_line JOIN potraviny_kat_skup pom ON pls.id_potraviny = pom.id_potravina or pls.id_kategorie = pom.id_kategorie or pls.id_skupina = pom.id_skupina LEFT JOIN zasoby z ON pom.id_potravina = z.id_potraviny WHERE pl.id_pattern = p.id GROUP BY pl.id_pattern, pl.line) and exists(select 1 from pattern_line pl where pl.id_pattern = p.id) and p.id_denni_chody = %s",
            (
                denni_prijem_kj,
                dennichod_id,
            ))

        if not mozne_patterny:
            raise Exception("nenalezen ani jeden vhodny pattern")

        vybrany_pattern = random.choice(mozne_patterny)[0]
        print(vybrany_pattern)

        mozne_potraviny = self.db.select_all(
            "SELECT pl.line, pom.id_potravina, pot.nazev, round(dch.zastoupeni_procenta * pl.ratio * %s/pot.kj) as mnozstvi, mj.zkratka FROM pattern_line pl JOIN Pattern p on pl.id_pattern = p.id JOIN denni_chody dch ON p.id_denni_chody = dch.id JOIN pattern_line_set pls ON pl.id_pattern = pls.id_pattern and pl.line = pls.pattern_line JOIN potraviny_kat_skup pom ON pls.id_potraviny = pom.id_potravina or pls.id_kategorie = pom.id_kategorie or pls.id_skupina = pom.id_skupina JOIN zasoby z ON pom.id_potravina = z.id_potraviny JOIN potraviny pot on pot.id = pom.id_potravina JOIN merna_jednotka mj on pot.id_merna_jednotka = mj.id WHERE (z.mnozstvi-z.blokovano)*pom.kj >= dch.zastoupeni_procenta * pl.ratio * "
            + str(denni_prijem_kj) + " and p.id = %s", (
                denni_prijem_kj,
                vybrany_pattern,
            ))

        pocet_lines = self.db.select_single_value(
            "select COUNT (*) from pattern_line pl where pl.id_pattern = %s",
            (vybrany_pattern, ))

        polozky_jidelnicku = []
        for i in range(1, pocet_lines + 1):
            vybrana_polozka = random.choice(
                list(filter(lambda x: x[0] == i, mozne_potraviny)))
            polozky_jidelnicku.append(
                Polozka_jidelnicku(
                    vybrana_polozka[2],
                    str(vybrana_polozka[3]) + " " + vybrana_polozka[4]))

        print(polozky_jidelnicku)

        return polozky_jidelnicku