diff options
Diffstat (limited to 'app/Import/Ing/Shared.hs')
-rw-r--r-- | app/Import/Ing/Shared.hs | 44 |
1 files changed, 0 insertions, 44 deletions
diff --git a/app/Import/Ing/Shared.hs b/app/Import/Ing/Shared.hs deleted file mode 100644 index b5d1703..0000000 --- a/app/Import/Ing/Shared.hs +++ /dev/null | |||
@@ -1,44 +0,0 @@ | |||
1 | module Import.Ing.Shared where | ||
2 | |||
3 | import Data.Attoparsec.Text qualified as AP | ||
4 | import Data.Char (digitToInt, ord) | ||
5 | import Data.Csv qualified as C | ||
6 | import Data.Decimal (Decimal, DecimalRaw (Decimal), normalizeDecimal) | ||
7 | import Data.Iban (Iban, mkIban) | ||
8 | import Data.Text qualified as T | ||
9 | import Data.Time.Calendar (Day) | ||
10 | import Data.Time.Clock (UTCTime) | ||
11 | import Data.Time.Format (defaultTimeLocale, parseTimeM) | ||
12 | import Data.Time.Zones (TZ, localTimeToUTCTZ) | ||
13 | |||
14 | data DebitCredit = Debit | Credit deriving (Show) | ||
15 | |||
16 | scsvOptions :: C.DecodeOptions | ||
17 | scsvOptions = C.defaultDecodeOptions {C.decDelimiter = fromIntegral (ord ';')} | ||
18 | |||
19 | maybeCP :: (T.Text -> C.Parser a) -> T.Text -> C.Parser (Maybe a) | ||
20 | maybeCP p t = if T.null t then return Nothing else Just <$> p t | ||
21 | |||
22 | parseDecimalM :: (MonadFail m) => T.Text -> m Decimal | ||
23 | parseDecimalM = | ||
24 | either fail return | ||
25 | . AP.parseOnly | ||
26 | ( do | ||
27 | decPart <- AP.decimal | ||
28 | _ <- AP.char ',' | ||
29 | f1 <- AP.digit | ||
30 | f2 <- AP.digit | ||
31 | AP.endOfInput | ||
32 | let fracPart = fromIntegral $ digitToInt f1 * 10 + digitToInt f2 | ||
33 | return $ normalizeDecimal (Decimal 2 (decPart * 100 + fracPart)) | ||
34 | ) | ||
35 | |||
36 | parseIbanM :: (MonadFail m) => T.Text -> m Iban | ||
37 | parseIbanM = either fail return . mkIban | ||
38 | |||
39 | parseDateM :: (MonadFail m) => String -> T.Text -> m Day | ||
40 | parseDateM fmt = parseTimeM False defaultTimeLocale fmt . T.unpack | ||
41 | |||
42 | parseTimestampM :: (MonadFail m) => String -> TZ -> T.Text -> m UTCTime | ||
43 | parseTimestampM fmt amsTz t = do | ||
44 | localTimeToUTCTZ amsTz <$> parseTimeM False defaultTimeLocale fmt (T.unpack t) | ||