module MonthlyPaymentJob ( monthlyPaymentJobListener ) where import Control.Monad.IO.Class (liftIO) import Data.Time.Clock import Database.Persist (entityVal, insert) import Job (jobListener) import Model.Database import Model.Payment (getMonthlyPayments) import Model.JobKind import Model.Frequency import Utils.Time (belongToCurrentMonth) monthlyPaymentJobListener :: IO () monthlyPaymentJobListener = let lastExecutionTooOld = fmap not . belongToCurrentMonth runJob () = monthlyPaymentJob msDelay = 1000000 * 60 * 60 in jobListener MonthlyPaymentJob lastExecutionTooOld runJob msDelay monthlyPaymentJob :: Persist () monthlyPaymentJob = do monthlyPayments <- map entityVal <$> getMonthlyPayments now <- liftIO $ getCurrentTime let punctualPayments = map (\p -> p { paymentFrequency = Punctual, paymentCreation = now }) monthlyPayments sequence_ $ map insert punctualPayments