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; }