Skip to content
Snippets Groups Projects
Commit a6515654 authored by Suvi's avatar Suvi
Browse files

Tyyppien kanssa säätöä

parent 01768910
No related branches found
No related tags found
No related merge requests found
......@@ -14,21 +14,20 @@ import qualified Data.ByteString.Lazy as BS
--instance Data.Aeson.FromJSON Tehtava
--Omat luokat--------------------------------------------------------------------
data Tekija = Tekija { id :: Int , nimi :: String } deriving (Show)
data Tekija = Tekija { nimi :: String } deriving (Show)
--data VakioTekija = Tekija | False deriving (Show, Eq)
--korjattava!
data Askare = Askare { askare :: String
data Askare = Askare { hommanNimi :: String
, tarkea :: Bool
, toistuvuus :: Int
, toistuvuus :: Int
, vakioTekija :: String
} deriving (Show)
data Tehtava = Tehtava { homma :: Askare
data Tehtava = Tehtava { homma :: String --Askareelta
, paiva :: Data.Time.Calendar.Day
, tehty :: Bool
, tekija :: Tekija
, tehtava :: String
, tarkeys :: Bool --Askareelta
, tekija :: String --Tekijalta
, kuvaus :: String
} deriving (Show)
--Virheilmoitukset------------------------------------------------------------------
......@@ -80,50 +79,61 @@ tallennaTehtavat tehtava = BS.writeFile "tehtavat.json" (Data.Aeson.encode tehta
-}
-- Tekijät ----------------------------------------------------------------------------
tekijat :: [Tekija]
tekijat = [ Tekija {Main.id = 1, nimi = "Maija"}, Tekija {Main.id = 2, nimi = "Matti"}]
--miten perin mahdollisen vakiotekijän tehtävän tekijäksi???
uusiTekija :: String -> Tekija
uusiTekija a = Tekija { nimi = a }
-- Askareet ----------------------------------------------------------------------------------
{- Homman nimi, Tärkeys
, Toistuvuus 0:ei koskaan, 1:kerran viikossa 2:joka toinen viikko 3:kerran kuussa
, VakioTekijä (, vakioTekija :: VakioTekija) -}
askareet :: [Askare]
askareet = [ Askare { askare="Imurointi", tarkea=False, toistuvuus=1 }
, Askare { askare="Vuokran maksu", tarkea=True, toistuvuus=3 }
, Askare { askare="Pyykin pesu", tarkea=False, toistuvuus=0 }
]
, VakioTekijä -}
uusiAskare :: String -> Bool -> Int -> String -> Askare
uusiAskare a b c d = Askare { hommanNimi = a, tarkea = b, toistuvuus = c, vakioTekija = mahdTekija }
where
mahdTekija
| d == "" = "eo"
| otherwise = d
-- Tehtävät --------------------------------------------------------------------------------------
{- Mikä askare, Päivämäärä, Onko tehty, Kuka on tekijä, Kuvaus -}
uusiTehtava :: String -> Data.Time.Calendar.Day -> Bool -> String -> String -> Tehtava
uusiTehtava askare pvm tarkeako duunari teksti = Tehtava { homma = askare, paiva = pvm, tehty = False
, tarkeys = tarkeako, tekija = duunari, kuvaus = teksti }
tehtavat :: [Tehtava]
tehtavat = [ Tehtava { homma = Askare { askare="Vuokran maksu", tarkea=True, toistuvuus=3 }
, paiva = t 2022 10 10
, tehty = False
, tekija = Tekija {Main.id = 2, nimi = "Matti"}
, tehtava = "Maksa lokakuun vuokra"
}
, Tehtava { homma = Askare { askare="Pyykin pesu", tarkea=False, toistuvuus=0 }
, paiva = t 2022 10 5
, tehty = False
, tekija = Tekija {Main.id = 1, nimi = "Maija"}
, tehtava = "Pese valkoiset 40:n asteen pyykit"
}
]
tehtavat = []
annaKuvaukset :: [Tehtava] -> [String]
annaKuvaukset [] = []
annaKuvaukset (eka : loput) = kuvaus eka : hommatLopuista
where
t = Data.Time.Calendar.fromGregorian ---tuleeko tää tähän???
hommatLopuista = annaKuvaukset loput
karsiTehtavaListaa :: (Data.Time.Calendar.Day -> Bool) -> [Tehtava] -> [Tehtava]
karsiTehtavaListaa paivat (eka : loput)
| paivat == verrattava = eka : karsiTehtavaListaa paivat loput
| otherwise = karsiTehtavaListaa paivat loput
where
verrattava = paiva eka
--Listat------------------------------------------------------------------------------
lisaaListaan :: [a] -> a -> [a]
lisaaListaan vanhalista lisattava = lisattava : vanhalista
--Muuta-------------------------------------------------------------------------------
-- Kalenteri -------------------------------------------------------------------------
-- Antaa tehtävälistasta annettujen päivien tehtävät
annaTehtavista :: [Tehtava] -> (b -> Bool) -> [e]
annaListasta tehtavaLista paivat = otaJälkimmäiset tulosPareina
--Lisättäviä ominaisuuksia:
-- ilmoitus siitä, jos jollakin on jokin toistuvuus, mutta tehtävää ei olla lisätty tai lisäys ilman kuvausta(eli tehtävä)
-- -> tällöin oltava ehdottomasti muokkausmahdollisuus!!!
annaKuvausListasta :: [Tehtava] -> (Data.Time.Calendar.Day -> Bool) -> [String]
annaKuvausListasta tapahtumaLista pvm = otaTapahtumat tulosLista
where
mitäOtetaan (_a, b, _c, _d, _e) = paivat b
tulosPareina = filter mitäOtetaan tehtavaLista
otaJälkimmäiset = tehtavaLista.tehtava
--mitaOtetaan (homma, paiva, tehty, tarkeys, tekija, kuvaus) = pvm paiva
tulosLista :: [Tehtava]
tulosLista = karsiTehtavaListaa pvm tapahtumaLista
otaTapahtumat lista = annaKuvaukset lista
-- Antaa annetun päivän
annaTanaan :: Data.Time.Calendar.Day -> (Data.Time.Calendar.Day -> Bool)
......@@ -131,16 +141,16 @@ annaTanaan tanaan vertailtava = tanaan == vertailtava
-- Antaa päivät, joita annetun päivän viikolla on vielä jäljellä
annaViikko :: Data.Time.Calendar.Day -> (Data.Time.Calendar.Day -> Bool)
annaViikko paiva vertailtava = (vertailtava >= paiva) && (vertailtava <= sunnuntai)
annaViikko pvm vertailtava = (vertailtava >= pvm) && (vertailtava <= sunnuntai)
where
sunnuntai = Data.Time.Calendar.addDays luku paiva
sunnuntai = Data.Time.Calendar.addDays luku pvm
luku
| (Data.Time.Calendar.dayOfWeek paiva) == Data.Time.Calendar.Monday = 6
| (Data.Time.Calendar.dayOfWeek paiva) == Data.Time.Calendar.Tuesday = 5
| (Data.Time.Calendar.dayOfWeek paiva) == Data.Time.Calendar.Wednesday = 4
| (Data.Time.Calendar.dayOfWeek paiva) == Data.Time.Calendar.Thursday = 3
| (Data.Time.Calendar.dayOfWeek paiva) == Data.Time.Calendar.Friday = 2
| (Data.Time.Calendar.dayOfWeek paiva) == Data.Time.Calendar.Saturday = 1
| (Data.Time.Calendar.dayOfWeek pvm) == Data.Time.Calendar.Monday = 6
| (Data.Time.Calendar.dayOfWeek pvm) == Data.Time.Calendar.Tuesday = 5
| (Data.Time.Calendar.dayOfWeek pvm) == Data.Time.Calendar.Wednesday = 4
| (Data.Time.Calendar.dayOfWeek pvm) == Data.Time.Calendar.Thursday = 3
| (Data.Time.Calendar.dayOfWeek pvm) == Data.Time.Calendar.Friday = 2
| (Data.Time.Calendar.dayOfWeek pvm) == Data.Time.Calendar.Saturday = 1
| otherwise = 0
--Suoritettava:
......@@ -159,7 +169,9 @@ main = do
let tanaan = Data.Time.Clock.utctDay aika
putStrLn "Arkiaskareet"
putStrLn "Tämän päivän tehtävät: "
--putScrLn (unlines (annaListasta tehtavat annaTanaan tanaan))
putStrLn (unlines (annaKuvausListasta tehtavat (annaTanaan tanaan)))
putStrLn "Tämän viikon tulevat tehtävät: "
--putScrLn (unlines (annaListasta tehtavat (annaViikko tanaan)))
putStrLn "Anna haluamasi komento, ohje -komennolla saat listan kaikista komennoista."
\ No newline at end of file
--putStrLn (unlines (annaKuvausListasta tehtavat (annaViikko tanaan)))
putStrLn "Anna haluamasi komento, ohje -komennolla saat listan kaikista komennoista."
--POISTA TÄSTÄ ALASPÄIN KUN EI ENÄÄ TARVETTA----------------------------------------------------------
\ No newline at end of file
module Main (main) where
import qualified Data.Time.Calendar
import qualified Data.Time.Clock
import qualified Data.Aeson
import qualified Data.ByteString.Lazy as BS
--instance Data.Aeson.ToJSON Tekija
--instance Data.Aeson.ToJSON Askare
--instance Data.Aeson.ToJSON Tehtava
--instance Data.Aeson.FromJSON Tekija
--instance Data.Aeson.FromJSON Askare
--instance Data.Aeson.FromJSON Tehtava
--Omat luokat--------------------------------------------------------------------
data Tekija = Tekija { id :: Int , nimi :: String } deriving (Show)
--data VakioTekija = Tekija | False deriving (Show, Eq)
--korjattava!
data Askare = Askare { askare :: String
, tarkea :: Bool
, toistuvuus :: Int
} deriving (Show)
data Tehtava = Tehtava { homma :: Askare
, paiva :: Data.Time.Calendar.Day
, tehty :: Bool
, tekija :: Tekija
, tehtava :: String
} deriving (Show)
--Virheilmoitukset------------------------------------------------------------------
--Tiedoston luku/kirjoitus ---------------------------------------------------------
{-
{--}
tiedostojenLuku :: IO()
tiedostojenLuku = do
lataaTekijat
lataaAskareet
lataaTehtavat
putStrLn "Lataus suoritettu"
lataaTekijat :: IO (Maybe Tekija)
lataaTekijat = do
jsonTekijat <- BS.readFile "tekijat.json"
return (Data.Aeson.decode jsonTekijat)
lataaAskareet :: IO (Maybe Tekija)
lataaAskareet = do
jsonAskareet <- BS.readFile "askareet.json"
return (Data.Aeson.decode jsonAskareet)
lataaTehtavat :: IO (Maybe Tehtava)
lataaTehtavat = do
jsonTehtavat <- BS.readFile "tehtavat.json"
return (Data.Aeson.decode jsonTehtavat)
{-
Tallennetaan tiedostoon Aesonin avulla koodattua tietoa.
Tekijöille, Askareille ja Tehtäville pitää olla omat tiedostot ja ne on ladattava
oikeassa järjestyksessä.
Koodauksen jälkeen tiedostoon tallennus tapahtuu näin:
writeFile "tiedosto.json" tallennettava_asia
Tuleeko tähän ylös siis vain koodaus sekä dekoodaus ja varsinainen tallentaminen tapahtuu
luokkien sisällä?
-}
tallennaTekijat :: Tekija -> IO()
tallennaTekija tekija = BS.writeFile "tekijat.json" (Data.Aeson.encode tekija)
tallennaAskareet :: Askare -> IO()
tallennaAskareet askare = BS.writeFile "askareet.json" (Data.Aeson.encode askare)
tallennaTehtavat :: Tehtava -> IO()
tallennaTehtavat tehtava = BS.writeFile "tehtavat.json" (Data.Aeson.encode tehtava)
-}
-- Tekijät ----------------------------------------------------------------------------
tekijat :: [Tekija]
tekijat = [ Tekija {Main.id = 1, nimi = "Maija"}, Tekija {Main.id = 2, nimi = "Matti"}]
--miten perin mahdollisen vakiotekijän tehtävän tekijäksi???
-- Askareet ----------------------------------------------------------------------------------
{- Homman nimi, Tärkeys
, Toistuvuus 0:ei koskaan, 1:kerran viikossa 2:joka toinen viikko 3:kerran kuussa
, VakioTekijä (, vakioTekija :: VakioTekija) -}
askareet :: [Askare]
askareet = [ Askare { askare="Imurointi", tarkea=False, toistuvuus=1 }
, Askare { askare="Vuokran maksu", tarkea=True, toistuvuus=3 }
, Askare { askare="Pyykin pesu", tarkea=False, toistuvuus=0 }
]
-- Tehtävät --------------------------------------------------------------------------------------
{- Mikä askare, Päivämäärä, Onko tehty, Kuka on tekijä, Kuvaus -}
tehtavat :: [Tehtava]
tehtavat = [ Tehtava { homma = Askare { askare="Vuokran maksu", tarkea=True, toistuvuus=3 }
, paiva = t 2022 10 10
, tehty = False
, tekija = Tekija {Main.id = 2, nimi = "Matti"}
, tehtava = "Maksa lokakuun vuokra"
}
, Tehtava { homma = Askare { askare="Pyykin pesu", tarkea=False, toistuvuus=0 }
, paiva = t 2022 10 5
, tehty = False
, tekija = Tekija {Main.id = 1, nimi = "Maija"}
, tehtava = "Pese valkoiset 40:n asteen pyykit"
}
]
where
t = Data.Time.Calendar.fromGregorian ---tuleeko tää tähän???
-- Kalenteri -------------------------------------------------------------------------
-- Antaa tehtävälistasta annettujen päivien tehtävät
annaTehtavista :: [Tehtava] -> (b -> Bool) -> [e]
annaListasta tehtavaLista paivat = otaJälkimmäiset tulosPareina
where
mitäOtetaan (_a, b, _c, _d, _e) = paivat b
tulosPareina = filter mitäOtetaan tehtavaLista
otaJälkimmäiset = tehtavaLista.tehtava
-- Antaa annetun päivän
annaTanaan :: Data.Time.Calendar.Day -> (Data.Time.Calendar.Day -> Bool)
annaTanaan tanaan vertailtava = tanaan == vertailtava
-- Antaa päivät, joita annetun päivän viikolla on vielä jäljellä
annaViikko :: Data.Time.Calendar.Day -> (Data.Time.Calendar.Day -> Bool)
annaViikko paiva vertailtava = (vertailtava >= paiva) && (vertailtava <= sunnuntai)
where
sunnuntai = Data.Time.Calendar.addDays luku paiva
luku
| (Data.Time.Calendar.dayOfWeek paiva) == Data.Time.Calendar.Monday = 6
| (Data.Time.Calendar.dayOfWeek paiva) == Data.Time.Calendar.Tuesday = 5
| (Data.Time.Calendar.dayOfWeek paiva) == Data.Time.Calendar.Wednesday = 4
| (Data.Time.Calendar.dayOfWeek paiva) == Data.Time.Calendar.Thursday = 3
| (Data.Time.Calendar.dayOfWeek paiva) == Data.Time.Calendar.Friday = 2
| (Data.Time.Calendar.dayOfWeek paiva) == Data.Time.Calendar.Saturday = 1
| otherwise = 0
--Suoritettava:
-- Alkuinfo
-- Tämän päivän ja tämän viikon tehtävät
-- Komentojen anto:
-- -ohje
-- -Lisää/Poista tekijä/askare/tehtävä
-- -Katso viikon x tehtävät
-- -Poistu ohjelmasta
main :: IO ()
main = do
putStrLn "hello world"
--TODO: tiedostojen tietojen lataus
aika <- Data.Time.Clock.getCurrentTime
let tanaan = Data.Time.Clock.utctDay aika
putStrLn "Arkiaskareet"
putStrLn "Tämän päivän tehtävät: "
--putScrLn (unlines (annaListasta tehtavat annaTanaan tanaan))
putStrLn "Tämän viikon tulevat tehtävät: "
--putScrLn (unlines (annaListasta tehtavat (annaViikko tanaan)))
putStrLn "Anna haluamasi komento, ohje -komennolla saat listan kaikista komennoista."
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment