diff options
Diffstat (limited to 'server/src/View/Mail')
| -rw-r--r-- | server/src/View/Mail/WeeklyReport.hs | 124 | 
1 files changed, 0 insertions, 124 deletions
| diff --git a/server/src/View/Mail/WeeklyReport.hs b/server/src/View/Mail/WeeklyReport.hs deleted file mode 100644 index 3fe224f..0000000 --- a/server/src/View/Mail/WeeklyReport.hs +++ /dev/null @@ -1,124 +0,0 @@ -module View.Mail.WeeklyReport -  ( mail -  ) where - -import           Data.List             (sortOn) -import           Data.Map              (Map) -import qualified Data.Map              as M -import           Data.Maybe            (catMaybes, fromMaybe) -import           Data.Monoid           ((<>)) -import           Data.Text             (Text) -import qualified Data.Text             as T -import           Data.Time.Clock       (UTCTime) - -import           Common.Model          (ExceedingPayer (..), Income (..), -                                        Payment (..), User (..), UserId) -import qualified Common.Model          as CM -import qualified Common.Msg            as Msg -import qualified Common.View.Format    as Format - -import           Conf                  (Conf) -import qualified Conf                  as Conf -import           Model.IncomeResource  (IncomeResource (..)) -import           Model.Mail            (Mail (Mail)) -import qualified Model.Mail            as M -import           Model.PaymentResource (PaymentResource (..)) -import qualified Payer                 as Payer -import           Resource              (Status (..), groupByStatus, statuses) - -mail :: Conf -> [User] -> [Income] -> [Payment] -> Map UserId Int -> Map UserId Int -> Map UserId Int -> UTCTime -> UTCTime -> Mail -mail conf users weekIncomes weekPayments cumulativeIncome preIncomeRepartition postIncomeRepartition start end = -  Mail -    { M.from = Conf.noReplyMail conf -    , M.to = map _user_email users -    , M.subject = T.concat -        [ Msg.get Msg.App_Title -        , " − " -        , Msg.get Msg.WeeklyReport_Title -        ] -    , M.body = body conf users weekIncomes weekPayments cumulativeIncome preIncomeRepartition postIncomeRepartition start end -    } - -body :: Conf -> [User] -> [Income] -> [Payment] -> Map UserId Int -> Map UserId Int -> Map UserId Int -> UTCTime -> UTCTime -> Text -body conf users weekIncomes weekPayments cumulativeIncome preIncomeRepartition postIncomeRepartition start end = -  T.intercalate "\n" $ -    [ exceedingPayers conf users cumulativeIncome preIncomeRepartition postIncomeRepartition -    , operations conf users paymentsGroupedByStatus incomesGroupedByStatus -    ] -      where -        paymentsGroupedByStatus = groupByStatus start end . map PaymentResource $ weekPayments -        incomesGroupedByStatus = groupByStatus start end . map IncomeResource $ weekIncomes - -exceedingPayers :: Conf -> [User] -> Map UserId Int -> Map UserId Int -> Map UserId Int -> Text -exceedingPayers conf users cumulativeIncome preIncomeRepartition postIncomeRepartition = -  T.intercalate "\n" . map formatPayer $ payers -  where -    payers = Payer.getExceedingPayers users cumulativeIncome preIncomeRepartition postIncomeRepartition -    formatPayer p = T.concat -      [ "  * " -      , fromMaybe "" $ _user_name <$> CM.findUser (_exceedingPayer_userId p) users -      , " + " -      , Format.price (Conf.currency conf) $ _exceedingPayer_amount p -      , "\n" -      ] - -operations :: Conf -> [User] -> Map Status [PaymentResource] -> Map Status [IncomeResource] -> Text -operations conf users paymentsByStatus incomesByStatus = -  if M.null paymentsByStatus && M.null incomesByStatus -    then -      Msg.get Msg.WeeklyReport_Empty -    else -      T.intercalate "\n" . catMaybes . concat $ -        [ map (\s -> paymentSection s conf users <$> M.lookup s paymentsByStatus) statuses -        , map (\s -> incomeSection s conf users <$> M.lookup s incomesByStatus) statuses -        ] - -paymentSection :: Status -> Conf -> [User] -> [PaymentResource] -> Text -paymentSection status conf users payments = -  section sectionTitle sectionItems -  where count = length payments -        sectionTitle = Msg.get $ case status of -          Created -> if count > 1 then Msg.WeeklyReport_PaymentsCreated count else Msg.WeeklyReport_PaymentCreated count -          Edited -> if count > 1 then Msg.WeeklyReport_PaymentsEdited count else Msg.WeeklyReport_PaymentEdited count -          Deleted -> if count > 1 then Msg.WeeklyReport_PaymentsDeleted count else Msg.WeeklyReport_PaymentDeleted count -        sectionItems = map (payedFor status conf users) . sortOn _payment_date . map (\(PaymentResource p) -> p) $ payments - -payedFor :: Status -> Conf -> [User] -> Payment -> Text -payedFor status conf users payment = -  case status of -    Deleted -> Msg.get (Msg.WeeklyReport_PayedForNot name amount for at) -    _       -> Msg.get (Msg.WeeklyReport_PayedFor name amount for at) -  where name = formatUserName (_payment_user payment) users -        amount = Format.price (Conf.currency conf) . _payment_cost $ payment -        for = _payment_name payment -        at = Format.longDay $ _payment_date payment - -incomeSection :: Status -> Conf -> [User] -> [IncomeResource] -> Text -incomeSection status conf users incomes = -  section sectionTitle sectionItems -  where count = length incomes -        sectionTitle = Msg.get $ case status of -          Created -> if count > 1 then Msg.WeeklyReport_IncomesCreated count else Msg.WeeklyReport_IncomeCreated count -          Edited -> if count > 1 then Msg.WeeklyReport_IncomesEdited count else Msg.WeeklyReport_IncomeEdited count -          Deleted -> if count > 1 then Msg.WeeklyReport_IncomesDeleted count else Msg.WeeklyReport_IncomeDeleted count -        sectionItems = map (isPayedFrom status conf users) . sortOn _income_date . map (\(IncomeResource i) -> i) $ incomes - -isPayedFrom :: Status -> Conf -> [User] -> Income -> Text -isPayedFrom status conf users income = -  case status of -    Deleted -> Msg.get (Msg.WeeklyReport_PayedFromNot name amount for) -    _       -> Msg.get (Msg.WeeklyReport_PayedFrom name amount for) -  where name = formatUserName (_income_userId income) users -        amount = Format.price (Conf.currency conf) . _income_amount $ income -        for = Format.longDay $ _income_date income - -formatUserName :: UserId -> [User] -> Text -formatUserName userId = fromMaybe "−" . fmap _user_name . CM.findUser userId - -section :: Text -> [Text] -> Text -section title items = -  T.concat -    [ title -    , "\n\n" -    , T.unlines . map ("  * " <>) $ items -    ] | 
