diff --git a/Application.hs b/Application.hs index 91ae1fd..b30cadd 100644 --- a/Application.hs +++ b/Application.hs @@ -38,6 +38,7 @@ import Handler.Update import Handler.Stock import Handler.ProfitItems import Handler.Orders +import Handler.Item -- This line actually creates our YesodDispatch instance. It is the second half -- of the call to mkYesodData which occurs in Foundation.hs. Please see the diff --git a/Handler/Item.hs b/Handler/Item.hs new file mode 100644 index 0000000..4e764d1 --- /dev/null +++ b/Handler/Item.hs @@ -0,0 +1,84 @@ +module Handler.Item where + +import Import + +itemsPerPage :: Int +itemsPerPage = 100 + +getItemR :: Int64 -> Handler Html +getItemR transactionTypeId = getItemPagedR transactionTypeId 0 + +getItemPagedR :: Int64 -> Int -> Handler Html +getItemPagedR tid page = + loginOrDo (\(uid,user) -> do + items <- runDB $ selectList [TransactionTypeId ==. tid] [Desc TransactionDateTime, LimitTo itemsPerPage, OffsetBy (itemsPerPage*page)] + total <- runDB $ count [TransactionTypeId ==. tid] + let offset = itemsPerPage * page + loginLayout user $ [whamlet| +
Time + | P/C + | B/S + | Item + | ## + | ISK/Item + | ISK total + | ISK profit + | % + | Time + | Client + | Station + | ? + | + $forall Entity _ t <- items + | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
#{showDateTime $ transactionDateTime $ t} + $if transactionTransForCorp t + | C + $else + | P + $if transactionTransIsSell t + | S + $else + | B + | #{transactionTypeName t} + | #{transactionQuantity t} + | #{prettyISK $ transactionPriceCents t} + | #{prettyISK $ transactionQuantity t * transactionPriceCents t} + $maybe profit <- transRealProfit t + $if (&&) (transactionTransIsSell t) (profit > 0) + | + #{prettyISK $ profit} + $elseif (&&) (transactionTransIsSell t) (profit < 0) + | + #{prettyISK $ profit} + $elseif not (transactionTransIsSell t) + | + #{prettyISK $ profit} + $else + | + #{prettyISK $ profit} + | + #{profitPercent profit t}% + $nothing + | + - + | + | + $maybe secs <- transactionSecondsToSell t + #{showSecsToSell secs} + $nothing + + | #{transactionClientName t} + | #{transactionStationName t} + | + | + |] + ) + diff --git a/Handler/Orders.hs b/Handler/Orders.hs index f6d064f..b2268e3 100644 --- a/Handler/Orders.hs +++ b/Handler/Orders.hs @@ -42,7 +42,7 @@ getOrdersR = loginOrDo (\(uid,user) -> do $forall (Entity _ o, Single name, Single stationname, Single regionid) <- sellorders |
#{showDateTime $ orderIssued $ o} - | #{name} + | #{name} | #{prettyISK $ orderPriceCents o} | #{orderVolRemaining o}/#{orderVolEntered o} (#{orderMinVolume o}) | #{prettyISK $ orderVolRemaining o * orderPriceCents o} @@ -76,7 +76,7 @@ getOrdersR = loginOrDo (\(uid,user) -> do $forall (Entity _ o, Single name, Single stationname, Single regionid) <- buyorders | |||||||||||||||
#{showDateTime $ orderIssued $ o} - | #{name} + | #{name} | #{prettyISK $ orderPriceCents o} | #{orderVolRemaining o}/#{orderVolEntered o} (#{orderMinVolume o}) | #{prettyISK $ orderPriceCents o * orderVolRemaining o} diff --git a/Handler/ProfitItems.hs b/Handler/ProfitItems.hs index ab431d4..291ede0 100644 --- a/Handler/ProfitItems.hs +++ b/Handler/ProfitItems.hs @@ -77,7 +77,7 @@ getProfitItemsDetailsR days = loginOrDo (\(uid,user) -> do | %/Day $forall (Profit tn tid quant pc f t a sc) <- items | ||||||||||||||
#{tn} + | #{tn} | #{prettyISK pc} | #{prettyISK f} | #{prettyISK t} @@ -85,7 +85,7 @@ getProfitItemsDetailsR days = loginOrDo (\(uid,user) -> do | #{showSecsToSell a} | #{quant} | #{prettyISK $ profitPerDay pc f t a} - | #{profitPercent pc f t sc} + | #{profitPercent' pc f t sc} | #{profitPercentDay pc f t sc a} |] ) @@ -98,9 +98,9 @@ profitPerDay :: Int64 -> Int64 -> Int64 -> Int64 -> Int64 profitPerDay _ _ _ 0 = 0 profitPerDay p f t a = ((p-f-t) * 86400) `div` a -profitPercent :: Int64 -> Int64 -> Int64 -> Int64 -> String -profitPercent _ _ _ 0 = printf "%.2f" $ (0 :: Double) -profitPercent p f t s = printf "%.2f" $ (100*(fromIntegral (p-f-t)) / (fromIntegral s) :: Double) +profitPercent' :: Int64 -> Int64 -> Int64 -> Int64 -> String +profitPercent' _ _ _ 0 = printf "%.2f" $ (0 :: Double) +profitPercent' p f t s = printf "%.2f" $ (100*(fromIntegral (p-f-t)) / (fromIntegral s) :: Double) profitPercentDay :: Int64 -> Int64 -> Int64 -> Int64 -> Int64 -> String profitPercentDay _ _ _ 0 _ = printf "%.2f" $ (0 :: Double) diff --git a/Handler/Stock.hs b/Handler/Stock.hs index 11b5c12..9b9a37b 100644 --- a/Handler/Stock.hs +++ b/Handler/Stock.hs @@ -96,7 +96,7 @@ getStockR = loginOrDo (\(uid,user) -> do $forall DisCols tid sid sn tn is wrth avg' dt taxed <- items' | ||||||||||
#{showDateTime dt} - | #{tn} + | #{tn} | #{is} | #{prettyISK avg'} | #{prettyISK taxed} diff --git a/Handler/Wallet.hs b/Handler/Wallet.hs index 7ea1c68..e8487a5 100644 --- a/Handler/Wallet.hs +++ b/Handler/Wallet.hs @@ -106,7 +106,7 @@ getWalletDetailsR hrs days = loginOrDo (\(uid,user) -> do | S $else | B - | #{transactionTypeName t} + | #{transactionTypeName t} | #{transactionQuantity t} | #{prettyISK $ transactionPriceCents t} | #{prettyISK $ transactionQuantity t * transactionPriceCents t} @@ -188,12 +188,6 @@ getWalletDetailsR hrs days = loginOrDo (\(uid,user) -> do |] ) -transRealProfit :: Transaction -> Maybe Int64 -transRealProfit t = if transactionTransIsSell t then - (\a b c -> a - b - c) <$> transactionProfit t <*> transactionFee t <*> transactionTax t - else - negate <$> ((+) <$> transactionFee t <*> transactionTax t) - transRealProfit' :: Int64 -> Int64 -> Int64 -> String transRealProfit' p bf tt = prettyISK (p-bf-tt) @@ -201,8 +195,5 @@ profitPercent' :: Int64 -> Int64 -> Int64 -> Int64 -> Maybe String profitPercent' p bf tt s = if s == 0 then Nothing else Just . printf "%.2f" $ 100*(fromIntegral (p - bf - tt) / fromIntegral s :: Double) -profitPercent :: Int64 -> Transaction -> String -profitPercent p t = printf "%.2f" $ (100*(fromIntegral p) / (fromIntegral (transactionQuantity t * transactionPriceCents t)) :: Double) - addProfit :: ProfitSum -> Profit -> ProfitSum addProfit (ProfitSum b' s' p' bf' tt') (Profit _ b s p bf tt) = ProfitSum (b+b') (s+s') (p+p') (bf+bf') (tt+tt') diff --git a/Import.hs b/Import.hs index 2f362fe..ae0b1bf 100644 --- a/Import.hs +++ b/Import.hs @@ -76,3 +76,12 @@ showSecsToSell t | otherwise = pp (fromIntegral t :: Double) ++ "s" where pp = printf "%.2f" + +transRealProfit :: Transaction -> Maybe Int64 +transRealProfit t = if transactionTransIsSell t then + (\a b c -> a - b - c) <$> transactionProfit t <*> transactionFee t <*> transactionTax t + else + negate <$> ((+) <$> transactionFee t <*> transactionTax t) + +profitPercent :: Int64 -> Transaction -> String +profitPercent p t = printf "%.2f" $ (100*(fromIntegral p) / (fromIntegral (transactionQuantity t * transactionPriceCents t)) :: Double) diff --git a/config/routes b/config/routes index 5fd208b..09c71f9 100644 --- a/config/routes +++ b/config/routes @@ -14,3 +14,4 @@ /analysis/items ProfitItemsR GET /analysis/items/#Int64 ProfitItemsDetailsR GET /orders OrdersR GET +/history/#Int64 ItemR GET diff --git a/neat.cabal b/neat.cabal index 3c3371c..abbe85c 100644 --- a/neat.cabal +++ b/neat.cabal @@ -28,6 +28,7 @@ library Handler.Stock Handler.ProfitItems Handler.Orders + Handler.Item if flag(dev) || flag(library-only) cpp-options: -DDEVELOPMENT diff --git a/static/js/neat.js b/static/js/neat.js index a6bafd0..037e343 100644 --- a/static/js/neat.js +++ b/static/js/neat.js @@ -5,8 +5,8 @@ neat utility functions Number.prototype.formatMoney = function(c, d, t) { var n = this, c = isNaN(c = Math.abs(c)) ? 2 : c, - d = d == undefined ? "." : t, - t = t == undefined ? "," : d, + d = d == undefined ? "." : d, + t = t == undefined ? "," : t, s = n < 0 ? "-" : "", i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0; diff --git a/test/Handler/ItemSpec.hs b/test/Handler/ItemSpec.hs new file mode 100644 index 0000000..aebb3e4 --- /dev/null +++ b/test/Handler/ItemSpec.hs @@ -0,0 +1,10 @@ +module Handler.ItemSpec (spec) where + +import TestImport + +spec :: Spec +spec = withApp $ do + + describe "getItemR" $ do + error "Spec not implemented: getItemRR" + |