From 3870d13a6cd60f1c5862ab95d8f34c8c60788120 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Aleksi=20Kyt=C3=B6viita?= <aleksi.j.kytoviita@utu.fi>
Date: Fri, 9 Dec 2022 14:14:56 +0000
Subject: [PATCH] Upload New File

---
 varasto_valmis.py | 155 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 155 insertions(+)
 create mode 100644 varasto_valmis.py

diff --git a/varasto_valmis.py b/varasto_valmis.py
new file mode 100644
index 0000000..87ef425
--- /dev/null
+++ b/varasto_valmis.py
@@ -0,0 +1,155 @@
+"""Ohjelma mallintaa yksinkertaista varastokirjanpitoa"""
+
+
+def nayta_UI():
+    """Näyttää käyttöliittymän"""
+    while True:
+        print("Valitse toiminto:")
+        print("1. Lataa tuotteet tiedostosta")
+        print("2. Tallenna tuotteet tiedostoon")
+        print("3. Lisää tuote")
+        print("4. Ota tuotetta varastosta")
+        print("5. Etsi tuote")
+        print("6. Listaa kaikki tuotteet")
+        print("7. Listaa vähissä olevat tuotteet")
+        print("0. Poistu")
+
+        valinta = int(input("Valintasi: "))
+
+        if valinta == 1:
+            lataa_tiedot()
+            print("Tiedot ladattu!")
+        elif valinta == 2:
+            tallenna_tiedot()
+            print("Tiedot tallennettu!")
+        elif valinta == 3:
+            nimi = input("Anna tuotteen nimi:")
+            maara = int(input("Anna määrä: "))
+            lisaa_tuote(nimi, maara)
+            print("Tuote lisätty!")
+        elif valinta == 4:
+            nimi = input("Anna tuotteen nimi:")
+            maara = int(input("Anna määrä: "))
+            if ota_tuotetta(nimi, maara):
+                print("Tuotetta otettu!")
+            else:
+                print("Tuotetta ei ollut tarpeeksi varastossa.")
+        elif valinta == 5:
+            tuotteet = etsi_tuotteet(input("Anna hakutermi: "))
+            # Jos tuotelista ei ollut tyhjä...
+            if tuotteet:
+                print(tuotteet)
+            else:
+                print("Tuotteita ei löytynyt.")
+        elif valinta == 6:
+            print(listaa_tuotteet())
+        elif valinta == 7:
+            maara = int(input("Anna enimmäismäärä: "))
+            print(vahissa_olevat_tuotteet(maara))
+        elif valinta == 0:
+            break
+
+        # Ylimääräinen rivinvaihto
+        print()
+
+
+def lataa_tiedot() -> list:
+    """Lataa varaston tuotetiedot tiedostosta"""
+    # tyhjennetään ensin kaikki nykyiset tuotteet
+    global tuotteet
+    tuotteet.clear()
+
+    # Tiedoston nimi on aina sama
+    with open("tuotteet.csv") as tiedosto:
+        for rivi in tiedosto:
+            tiedot = rivi.strip().split(",")
+            # rivillä on ensin nimi, sitten kappalemäärä
+            tuotteet[tiedot[0]] = int(tiedot[1])
+
+
+def tallenna_tiedot():
+    """Tallentaa varaston tuotetiedot tiedostoon"""
+    # Tiedoston nimi on aina sama
+    with open("tuotteet.csv", "w") as tiedosto:
+        for nimi, maara in tuotteet.items():
+            rivi = f"{nimi},{maara}\n"
+            tiedosto.write(rivi)
+
+
+def lisaa_tuote(nimi: str, maara: int):
+    """Lisää annetun tuotteen varastoon"""
+    global tuotteet
+    # Tarkistetaan, onko tuote jo varastossa
+    if nimi in tuotteet:
+        # Jos on, lisätään saldoa
+        tuotteet[nimi] += maara
+    else:
+        # Jos ei, lisätään uusi tuote
+        tuotteet[nimi] = maara
+
+
+def ota_tuotetta(nimi: str, maara: int) -> bool:
+    """Ottaa tuotetta varastosta annetun määrän, jos sitä on tarpeeksi
+
+    Args:
+        nimi (str): tuotteen nimi
+        maara (int): kuinka paljon tuotetta otetaan
+
+    Returns:
+        bool: True, jos tuotetta oli varastossa tarpeeksi, muuten False
+    """
+    global tuotteet
+    if nimi in tuotteet:
+        # onko varastossa tarpeeksi...
+        if tuotteet[nimi] >= maara:
+            tuotteet[nimi] -= maara
+            return True
+            # Tuotetta ei ollut (tarpeeksi) varastossa
+    return False
+
+
+def etsi_tuotteet(hakutermi: str) -> str:
+    """Hakee annettuja tuotteita varastosta"""
+    # iteroidaan tuotteet läpi, tallennetaan merkkijonoon sopivat
+    tulos = ""
+    # dictin ei tarvitse olla global, koska sitä ei muuteta
+    for nimi in tuotteet:
+        if hakutermi in nimi:
+            # Rivinvaihto perässä tekee siistimmän tulosteen
+            tulos += f"{nimi}, {tuotteet[nimi]} kpl.\n"
+
+    return tulos
+
+
+def listaa_tuotteet() -> str:
+    """Listaa kaikki varaston tuotteet"""
+
+    # hyödynnetään etsi_tuotteet -funktiota tyhjällä hakutermillä,
+    # joka löytää siis kaikki tuotteet
+    return etsi_tuotteet("")
+
+
+def vahissa_olevat_tuotteet(luku:int) -> str:
+    """Listaa kaikki tuotteet, joiden määrä on pienempi kuin syötetty määrä"""
+    #Hyödynnetään etsi-tuotteet funktiota, joka suodatetaan enimmäismäärän läpi. Funktio palauttaa kätevästi myös kappalemäärän
+    tulos = ""
+    for nimi in tuotteet:
+        if tuotteet[nimi] < luku:
+            tulos += etsi_tuotteet(nimi)
+    return(tulos)
+
+
+
+
+
+# ------------------
+# PÄÄOHJELMA
+# ------------------
+
+# Varastotiedot ovat tallessa globaalissa sanakirjassa
+# Avaimena on tuotteen nimi ja arvona sen määrä kokonaislukuna
+tuotteet = {}
+nayta_UI()
+
+
+
-- 
GitLab