function teerivi($tuoteno, $valittu_toimittaja)
{
    // Kukarow ja päivämäärät globaaleina
    global $kukarow, $nykyinen_alku, $nykyinen_loppu, $tilaustuotteiden_kasittely, $multi_status;
    // Tehdään kaudet päivämääristä
    $alku_kausi = substr(str_replace("-", "", $nykyinen_alku), 0, 8);
    $loppu_kausi = substr(str_replace("-", "", $nykyinen_loppu), 0, 8);
    // Haetaan raaka-aineen varastosaldo
    $query = "SELECT ifnull(sum(saldo), 0) saldo\n            FROM tuotepaikat\n            WHERE tuotepaikat.yhtio = '{$kukarow["yhtio"]}'\n            AND tuotepaikat.tuoteno = '{$tuoteno}'";
    $result = pupe_query($query);
    $row = mysql_fetch_assoc($result);
    $lapsi_saldo = $row['saldo'];
    // Haetaan raaka-aineen vuosikulutus (rullaava 12 kk)
    $query = "SELECT ifnull(sum(tilausrivi.kpl), 0) vuosikulutus\n            FROM tilausrivi\n            WHERE tilausrivi.yhtio        = '{$kukarow["yhtio"]}'\n            AND tilausrivi.tyyppi         = 'V'\n            AND tilausrivi.tuoteno        = '{$tuoteno}'\n            AND tilausrivi.toimitettuaika >= DATE_SUB(now(), INTERVAL 1 YEAR)";
    $result = pupe_query($query);
    $row = mysql_fetch_assoc($result);
    $lapsi_vuosikulutus = $row['vuosikulutus'];
    // Haetaan raaka-aineen ostettu, varattu, ennakkotilattu sekä valmistuksessa oleva määrä
    $query = "SELECT\n            ifnull(sum(if(tilausrivi.tyyppi = 'O', tilausrivi.varattu, 0)), 0) tilattu,\n            ifnull(sum(if(tilausrivi.tyyppi = 'L', tilausrivi.varattu, 0)), 0) varattu,\n            ifnull(sum(if(tilausrivi.tyyppi = 'E' and tilausrivi.var != 'O', tilausrivi.varattu, 0)), 0) ennakko,\n            ifnull(sum(if(tilausrivi.tyyppi in ('V','W'), tilausrivi.varattu, 0)), 0) valmistuksessa\n            FROM tilausrivi\n            WHERE tilausrivi.yhtio  = '{$kukarow["yhtio"]}'\n            AND tilausrivi.tyyppi   in ('O', 'L', 'E', 'V','W')\n            AND tilausrivi.tuoteno  = '{$tuoteno}'\n            AND tilausrivi.varattu != 0";
    $result = pupe_query($query);
    $row = mysql_fetch_assoc($result);
    $lapsi_varattu = $row['varattu'];
    $lapsi_tilattu = $row['tilattu'];
    $lapsi_ennakko = $row['ennakko'];
    $lapsi_valmistuksessa = $row['valmistuksessa'];
    // Haetaan raaka-aineen toimittajatiedot
    $query = "SELECT if(tuotteen_toimittajat.toimitusaika > 0, tuotteen_toimittajat.toimitusaika, toimi.oletus_toimaika) toimitusaika,\n            if(tuotteen_toimittajat.pakkauskoko > 0, tuotteen_toimittajat.pakkauskoko, 1) pakkauskoko,\n            toimi.ytunnus,\n            tuotteen_toimittajat.ostohinta,\n            toimi.nimi,\n            toimi.tunnus,\n            tuote.tuotemassa,\n            tuote.tuotekorkeus * tuote.tuoteleveys * tuote.tuotesyvyys as tilavuus\n            FROM tuotteen_toimittajat\n            JOIN toimi ON (toimi.yhtio = tuotteen_toimittajat.yhtio AND toimi.tunnus = tuotteen_toimittajat.liitostunnus and toimi.tunnus = '{$valittu_toimittaja}')\n            JOIN tuote ON ( tuote.yhtio = tuotteen_toimittajat.yhtio AND tuote.tuoteno = tuotteen_toimittajat.tuoteno )\n            WHERE tuotteen_toimittajat.yhtio = '{$kukarow["yhtio"]}'\n            AND tuotteen_toimittajat.tuoteno = '{$tuoteno}'\n            ORDER BY if(jarjestys = 0, 9999, jarjestys)\n            LIMIT 1";
    $result = pupe_query($query);
    if (mysql_num_rows($result) == 1) {
        $toimittajarow = mysql_fetch_assoc($result);
    } else {
        // Toimittajaa ei löydy -> alustetaan defaulttiarvot (lisää tähän jos muutat queryä)
        $toimittajarow = array("toimitusaika" => 0, "pakkauskoko" => 1, "toimittaja" => "", "nimi" => t("Ei toimittajaa"), "tunnus" => 0, "ostohinta" => 0, "tuotemassa" => 0, "tilavuus" => 0);
    }
    if (isset($multi_status) and count($multi_status) > 0) {
        $tuote_where = " AND tuote.status in ('" . implode("','", $multi_status) . "')";
    } else {
        $tuote_where = " ";
    }
    // Loopataan läpi raaka-aineen isätuotteet ja lasketaan ostoehdotukset
    $query = "SELECT isatuoteno, kerroin\n            FROM tuoteperhe\n            JOIN tuote ON (tuote.yhtio = tuoteperhe.yhtio\n              AND tuote.tuoteno    = tuoteperhe.isatuoteno\n              {$tuote_where})\n            WHERE tuoteperhe.yhtio = '{$kukarow["yhtio"]}'\n            AND tuoteperhe.tuoteno = '{$tuoteno}'\n            AND tuoteperhe.tyyppi  = 'R'";
    $isatuote_result = pupe_query($query);
    // While loopissa käytettävät muuttujat
    $lapsi_kulutus = 0;
    $budjetin_peruste = array();
    while ($isatuote_row = mysql_fetch_assoc($isatuote_result)) {
        // Haetaan isätuotteen budjetoitu myynti
        $params = array('tuoteno' => $isatuote_row["isatuoteno"], 'pvm_alku' => $nykyinen_alku, 'pvm_loppu' => $nykyinen_loppu, 'tilaustuotteiden_kasittely' => $tilaustuotteiden_kasittely);
        list($isa_budjetoitu_myynti, $budjetin_peruste[]) = tuotteen_budjetoitu_myynti($params);
        // Haetaan isätuotteiden varastosaldo
        $query = "SELECT ifnull(sum(saldo), 0) saldo\n              FROM tuotepaikat\n              WHERE tuotepaikat.yhtio = '{$kukarow["yhtio"]}'\n              AND tuotepaikat.tuoteno = '{$isatuote_row["isatuoteno"]}'";
        $result = pupe_query($query);
        $row = mysql_fetch_assoc($result);
        $isa_saldo = $row['saldo'];
        // Haetaan isätuotteen ostettu, varattu, ennakkotilattu sekä valmistuksessa määrä
        $query = "SELECT\n              ifnull(sum(if(tilausrivi.tyyppi = 'O', tilausrivi.varattu, 0)), 0) tilattu,\n              ifnull(sum(if(tilausrivi.tyyppi = 'L', tilausrivi.varattu, 0)), 0) varattu,\n              ifnull(sum(if(tilausrivi.tyyppi = 'E' and tilausrivi.var != 'O', tilausrivi.varattu, 0)), 0) ennakko,\n              ifnull(sum(if(tilausrivi.tyyppi in ('V','W'), tilausrivi.varattu, 0)), 0) valmistuksessa\n              FROM tilausrivi\n              WHERE tilausrivi.yhtio  = '{$kukarow["yhtio"]}'\n              AND tilausrivi.tyyppi   in ('O', 'L', 'E', 'V','W')\n              AND tilausrivi.tuoteno  = '{$isatuote_row["isatuoteno"]}'\n              AND tilausrivi.varattu != 0";
        $result = pupe_query($query);
        $row = mysql_fetch_assoc($result);
        $isa_tilattu = $row['tilattu'];
        $isa_varattu = $row['varattu'];
        $isa_ennakko = $row['ennakko'];
        $isa_valmistuksessa = $row['valmistuksessa'];
        // Isätuotteen reaalisaldo
        $isa_reaalisaldo = $isa_saldo + $isa_tilattu - $isa_varattu - $isa_ennakko - $isa_valmistuksessa;
        // Isätuotteen myyntiennuste
        $isa_myyntiennuste = $isa_budjetoitu_myynti - $isa_reaalisaldo;
        // Jos myyntiennuste on miinusta, nollataan ennuste, ettei se vähennä raaka-aine tarvetta (jo valmistetuista tuotteista ei voida käyttää raaka-aineita)
        $isa_myyntiennuste = $isa_myyntiennuste < 0 ? 0 : $isa_myyntiennuste;
        // Lapsen kulutusennuste
        $lapsi_kerroin = $isatuote_row["kerroin"];
        $lapsi_kulutus += $isa_myyntiennuste * $lapsi_kerroin;
    }
    // Lasketaan raaka-aineen reaalisaldo
    $lapsi_reaalisaldo = $lapsi_saldo + $lapsi_tilattu - $lapsi_varattu - $lapsi_ennakko - $lapsi_valmistuksessa;
    // Lasketaan raaka-aineen päiväkulutus
    $lapsi_paivakulutus = round($lapsi_vuosikulutus / 240, 6);
    // Lasketaan raaka-aineen riittopäivät
    $lapsi_riittopv = $lapsi_paivakulutus == 0 ? t("Ei tiedossa") : floor($lapsi_reaalisaldo / $lapsi_paivakulutus);
    // Lasketaan raaka-aineen kulutusennuste
    $lapsi_kulutusennuste = $lapsi_kulutus + $lapsi_paivakulutus * $toimittajarow['toimitusaika'];
    // Lasketaan raaka-aineen ostosuositus
    $lapsi_ostosuositus = round($lapsi_kulutusennuste - $lapsi_reaalisaldo);
    // Pyöristetään raaka-aineen ostosuositus toimittajan pakkauskokoon
    $lapsi_ostettavamaara = round($lapsi_ostosuositus / $toimittajarow['pakkauskoko']) * $toimittajarow['pakkauskoko'];
    // Palautettava array
    $tuoterivi = array();
    $tuoterivi['reaalisaldo'] = $lapsi_reaalisaldo;
    $tuoterivi['varastosaldo'] = $lapsi_saldo;
    $tuoterivi['tilattu'] = $lapsi_tilattu;
    $tuoterivi['varattu'] = $lapsi_varattu;
    $tuoterivi['ennakko'] = $lapsi_ennakko;
    $tuoterivi['valmistuksessa'] = $lapsi_valmistuksessa;
    $tuoterivi['paivakulutus'] = $lapsi_paivakulutus;
    $tuoterivi['vuosikulutus'] = $lapsi_vuosikulutus;
    $tuoterivi['riittopv'] = $lapsi_riittopv;
    $tuoterivi['kulutusennuste'] = $lapsi_kulutusennuste;
    $tuoterivi['kulutus'] = $lapsi_kulutus;
    $tuoterivi['toimitusaika'] = $toimittajarow['toimitusaika'];
    $tuoterivi['ostosuositus'] = $lapsi_ostosuositus;
    $tuoterivi['ostoeramaara'] = $lapsi_ostettavamaara;
    $tuoterivi['pakkauskoko'] = $toimittajarow['pakkauskoko'];
    $tuoterivi['toimittajan_tunnus'] = $toimittajarow['tunnus'];
    $tuoterivi['toimittajan_ytunnus'] = $toimittajarow['ytunnus'];
    $tuoterivi['toimittajan_nimi'] = $toimittajarow['nimi'];
    $tuoterivi['ostohinta'] = $toimittajarow['ostohinta'];
    $tuoterivi['ostosuosituksen_arvo'] = $toimittajarow['ostohinta'] * $lapsi_ostosuositus;
    $tuoterivi['ostosuosituksen_paino'] = $toimittajarow['tuotemassa'] * $lapsi_ostosuositus;
    $tuoterivi['ostosuosituksen_tilavuus'] = $toimittajarow['tilavuus'] * $lapsi_ostosuositus;
    $tuoterivi['budjetin_peruste'] = $budjetin_peruste;
    return $tuoterivi;
}
function teerivi($tuoteno, $valittu_toimittaja, $abc_rajaustapa)
{
    // Kukarow ja päivämäärät globaaleina
    global $kukarow, $nykyinen_alku, $nykyinen_loppu, $ryhmanimet, $tilaustuotteiden_kasittely;
    // Tehdään kaudet päivämääristä
    $alku_kausi = substr(str_replace("-", "", $nykyinen_alku), 0, 6);
    $loppu_kausi = substr(str_replace("-", "", $nykyinen_loppu), 0, 6);
    // Haetaan tuotteen ABC luokka
    $query = "SELECT abc_aputaulu.luokka\n            FROM abc_aputaulu\n            WHERE abc_aputaulu.yhtio = '{$kukarow["yhtio"]}'\n            AND abc_aputaulu.tyyppi  = '{$abc_rajaustapa}'\n            AND abc_aputaulu.tuoteno = '{$tuoteno}'";
    $result = pupe_query($query);
    $row = mysql_fetch_assoc($result);
    $abcluokka = isset($ryhmanimet[$row['luokka']]) ? $ryhmanimet[$row['luokka']] : t("Ei tiedossa");
    // Haetaan tuotteen varastosaldo
    $query = "SELECT ifnull(sum(tuotepaikat.saldo),0) saldo\n            FROM tuotepaikat\n            WHERE tuotepaikat.yhtio = '{$kukarow["yhtio"]}'\n            AND tuotepaikat.tuoteno = '{$tuoteno}'";
    $result = pupe_query($query);
    $row = mysql_fetch_assoc($result);
    $varastosaldo = $row['saldo'];
    // Haetaan tuotteen vuosikulutus (= myynti)
    $query = "SELECT ifnull(sum(tilausrivi.kpl), 0) vuosikulutus\n            FROM tilausrivi\n            WHERE tilausrivi.yhtio        = '{$kukarow["yhtio"]}'\n            AND tilausrivi.tyyppi         = 'L'\n            AND tilausrivi.tuoteno        = '{$tuoteno}'\n            AND tilausrivi.toimitettuaika >= DATE_SUB(now(), INTERVAL 1 YEAR)";
    $result = pupe_query($query);
    $row = mysql_fetch_assoc($result);
    $vuosikulutus = $row['vuosikulutus'];
    // Haetaan tuotteen valmistuksessa, ostettu, varattu sekä ennakkotilattu määrä
    $query = "SELECT\n            ifnull(sum(if(tilausrivi.tyyppi = 'O', tilausrivi.varattu, 0)), 0) tilattu,\n            ifnull(sum(if(tilausrivi.tyyppi = 'L', tilausrivi.varattu, 0)), 0) varattu,\n            ifnull(sum(if(tilausrivi.tyyppi = 'E' and tilausrivi.var != 'O', tilausrivi.varattu, 0)), 0) ennakko,\n            ifnull(sum(if(tilausrivi.tyyppi IN ('V','W'), tilausrivi.varattu, 0)), 0) valmistuksessa\n            FROM tilausrivi\n            WHERE tilausrivi.yhtio  = '{$kukarow["yhtio"]}'\n            AND tilausrivi.tyyppi   IN ('O', 'L', 'E', 'V', 'W')\n            AND tilausrivi.tuoteno  = '{$tuoteno}'\n            AND tilausrivi.varattu != 0";
    $result = pupe_query($query);
    $row = mysql_fetch_assoc($result);
    $tilattu = $row['tilattu'];
    $varattu = $row['varattu'];
    $ennakko = $row['ennakko'];
    $valmistuksessa = $row['valmistuksessa'];
    // Haetaan tuotteen toimittajatiedot
    $query = "SELECT if(tuotteen_toimittajat.toimitusaika > 0, tuotteen_toimittajat.toimitusaika, toimi.oletus_toimaika) toimitusaika,\n            if(tuotteen_toimittajat.pakkauskoko > 0, tuotteen_toimittajat.pakkauskoko, 1) pakkauskoko,\n            toimi.ytunnus,\n            toimi.nimi,\n            toimi.tunnus\n            FROM tuotteen_toimittajat\n            JOIN toimi ON (toimi.yhtio = tuotteen_toimittajat.yhtio AND toimi.tunnus = tuotteen_toimittajat.liitostunnus and toimi.tunnus = '{$valittu_toimittaja}')\n            WHERE tuotteen_toimittajat.yhtio = '{$kukarow["yhtio"]}'\n            AND tuotteen_toimittajat.tuoteno = '{$tuoteno}'\n            ORDER BY if(jarjestys = 0, 9999, jarjestys)\n            LIMIT 1";
    $result = pupe_query($query);
    if (mysql_num_rows($result) == 1) {
        $toimittajarow = mysql_fetch_assoc($result);
    } else {
        // Toimittajaa ei löydy -> alustetaan defaulttiarvot (lisää tähän jos muutat queryä)
        $toimittajarow = array("toimitusaika" => 0, "pakkauskoko" => 1, "toimittaja" => "", "nimi" => t("Ei toimittajaa"), "tunnus" => 0);
    }
    // Haetaan tuotteen status
    $query = "SELECT tuote.status\n            FROM tuote\n            WHERE tuote.yhtio = '{$kukarow["yhtio"]}'\n            AND tuote.tuoteno = '{$tuoteno}'";
    $result = pupe_query($query);
    $row = mysql_fetch_assoc($result);
    $tuote_status = $row['status'];
    // Haetaan budjetoitu myynti
    $params = array('tuoteno' => $tuoteno, 'pvm_alku' => $nykyinen_alku, 'pvm_loppu' => $nykyinen_loppu, 'tilaustuotteiden_kasittely' => $tilaustuotteiden_kasittely, 'tuote_status' => $tuote_status);
    list($budjetoitu_myynti, $budjetin_peruste) = tuotteen_budjetoitu_myynti($params);
    // Lasketaan reaalisaldo
    $reaalisaldo = $varastosaldo + $tilattu + $valmistuksessa - $varattu - $ennakko;
    // Lasketaan riittopäivät
    $paivakulutus = round($vuosikulutus / 240, 6);
    $riittopv = $paivakulutus == 0 ? t("Ei tiedossa") : floor($reaalisaldo / $paivakulutus);
    // Toimitustuotteilla määräennuste on suoraan budjetoitu myynti
    // Mutta vain jos ollaan valittu: A tai C
    // 'A' - "Tilaustuotteiden määräennuste on jälkitoimitusrivit"
    // 'B' - "Tilaustuotteiden määräennuste on budjetti/myynti"
    // 'C' - "Tilaustuotteiden määräennuste on jälkitoimitusrivit + budjetti/myynti"
    if ($tuote_status == 'T' and ($tilaustuotteiden_kasittely == 'A' or $tilaustuotteiden_kasittely == 'C')) {
        $maaraennuste = $budjetoitu_myynti;
        $paivakulutus = t("ei käytössä");
        $toimittajarow['toimitusaika'] = t("ei käytössä");
    } else {
        // Lasketaan määräennuste (paljon kuluu toimittajan toimitusajan aikana + arvioitu myynti)
        $maaraennuste = $paivakulutus * $toimittajarow['toimitusaika'] + $budjetoitu_myynti;
    }
    // Lasketaan paljon kannattaisi valmistaa
    $valmistussuositus = round($maaraennuste - $reaalisaldo);
    // Pyöristetään suositus ylöspäin seuraavaan pakkauskokoon
    $valmistusmaara = round($valmistussuositus / $toimittajarow['pakkauskoko']) * $toimittajarow['pakkauskoko'];
    // Palautettava array
    $tuoterivi = array();
    $tuoterivi['reaalisaldo'] = $reaalisaldo;
    $tuoterivi['varastosaldo'] = $varastosaldo;
    $tuoterivi['tilattu'] = $tilattu;
    $tuoterivi['valmistuksessa'] = $valmistuksessa;
    $tuoterivi['varattu'] = $varattu;
    $tuoterivi['ennakko'] = $ennakko;
    $tuoterivi['budjetoitu_myynti'] = $budjetoitu_myynti;
    $tuoterivi['vuosikulutus'] = $vuosikulutus;
    $tuoterivi['paivakulutus'] = $paivakulutus;
    $tuoterivi['riittopv'] = $riittopv;
    $tuoterivi['maaraennuste'] = $maaraennuste;
    $tuoterivi['toimitusaika'] = $toimittajarow['toimitusaika'];
    $tuoterivi['valmistussuositus'] = $valmistussuositus;
    $tuoterivi['pakkauskoko'] = $toimittajarow['pakkauskoko'];
    $tuoterivi['valmistusmaara'] = $valmistusmaara;
    $tuoterivi['abcluokka'] = $abcluokka;
    $tuoterivi['budjetin_peruste'] = $budjetin_peruste;
    return $tuoterivi;
}