diff options
| author | Gregor Kleen <gkleen@yggdrasil.li> | 2017-03-28 14:56:52 +0200 |
|---|---|---|
| committer | Gregor Kleen <gkleen@yggdrasil.li> | 2017-03-28 14:56:52 +0200 |
| commit | d28c483bdba02cf4163e99efcb07f2ee525ddda1 (patch) | |
| tree | f9becdc79bcb6495e462ec2f17762a63182dbc2a | |
| parent | de1513a40da72632b500c710c5254c8e3639b7bd (diff) | |
| download | bar-d28c483bdba02cf4163e99efcb07f2ee525ddda1.tar bar-d28c483bdba02cf4163e99efcb07f2ee525ddda1.tar.gz bar-d28c483bdba02cf4163e99efcb07f2ee525ddda1.tar.bz2 bar-d28c483bdba02cf4163e99efcb07f2ee525ddda1.tar.xz bar-d28c483bdba02cf4163e99efcb07f2ee525ddda1.zip | |
Implement list view
| -rw-r--r-- | Application.hs | 1 | ||||
| -rw-r--r-- | Foundation.hs | 5 | ||||
| -rw-r--r-- | Handler/Common.hs | 2 | ||||
| -rw-r--r-- | Handler/InventoryList.hs | 12 | ||||
| -rw-r--r-- | bar.cabal | 3 | ||||
| -rw-r--r-- | bar.nix | 2 | ||||
| -rw-r--r-- | config/routes | 3 | ||||
| -rw-r--r-- | templates/inventoryList.cassius | 51 | ||||
| -rw-r--r-- | templates/inventoryList.hamlet | 33 |
9 files changed, 106 insertions, 6 deletions
diff --git a/Application.hs b/Application.hs index 3a16e88..aa9422f 100644 --- a/Application.hs +++ b/Application.hs | |||
| @@ -43,6 +43,7 @@ import Handler.DeleteRefItem | |||
| 43 | import Handler.Kinds | 43 | import Handler.Kinds |
| 44 | import Handler.Types | 44 | import Handler.Types |
| 45 | import Handler.List | 45 | import Handler.List |
| 46 | import Handler.InventoryList | ||
| 46 | 47 | ||
| 47 | -- This line actually creates our YesodDispatch instance. It is the second half | 48 | -- This line actually creates our YesodDispatch instance. It is the second half |
| 48 | -- of the call to mkYesodData which occurs in Foundation.hs. Please see the | 49 | -- of the call to mkYesodData which occurs in Foundation.hs. Please see the |
diff --git a/Foundation.hs b/Foundation.hs index 27082fc..8f45202 100644 --- a/Foundation.hs +++ b/Foundation.hs | |||
| @@ -80,9 +80,10 @@ instance Yesod App where | |||
| 80 | 80 | ||
| 81 | -- Define the menu items of the header. | 81 | -- Define the menu items of the header. |
| 82 | let menuItems = | 82 | let menuItems = |
| 83 | [ MenuItem "Inventory" InventoryListingR | 83 | [ MenuItem "List" InventoryListR |
| 84 | , MenuItem "Table" InventoryListingR | ||
| 84 | , MenuItem "Reference" ReferenceListingR | 85 | , MenuItem "Reference" ReferenceListingR |
| 85 | , MenuItem "List" ListR | 86 | , MenuItem "Shopping List" ListR |
| 86 | ] | 87 | ] |
| 87 | currentMenu = listToMaybe | 88 | currentMenu = listToMaybe |
| 88 | [ menuItemLabel | 89 | [ menuItemLabel |
diff --git a/Handler/Common.hs b/Handler/Common.hs index 4f02e3c..73ce9ba 100644 --- a/Handler/Common.hs +++ b/Handler/Common.hs | |||
| @@ -11,7 +11,7 @@ module Handler.Common | |||
| 11 | , FormState(..) | 11 | , FormState(..) |
| 12 | , HasFormState(..) | 12 | , HasFormState(..) |
| 13 | , stockSort, referenceSort | 13 | , stockSort, referenceSort |
| 14 | , humanId | 14 | , humanId, dayFormat |
| 15 | ) where | 15 | ) where |
| 16 | 16 | ||
| 17 | import Import hiding ((\\)) | 17 | import Import hiding ((\\)) |
diff --git a/Handler/InventoryList.hs b/Handler/InventoryList.hs new file mode 100644 index 0000000..518d910 --- /dev/null +++ b/Handler/InventoryList.hs | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | module Handler.InventoryList where | ||
| 2 | |||
| 3 | import Import | ||
| 4 | import Handler.Common | ||
| 5 | |||
| 6 | import Data.Time.Calendar | ||
| 7 | |||
| 8 | getInventoryListR :: Handler Html | ||
| 9 | getInventoryListR = do | ||
| 10 | (stockSort -> stock) <- runDB $ withTypes =<< selectList [] [] | ||
| 11 | today <- utctDay <$> liftIO getCurrentTime | ||
| 12 | defaultLayout $(widgetFile "inventoryList") | ||
| @@ -1,5 +1,5 @@ | |||
| 1 | name: bar | 1 | name: bar |
| 2 | version: 0.3.0 | 2 | version: 0.4.0 |
| 3 | cabal-version: >= 1.8 | 3 | cabal-version: >= 1.8 |
| 4 | build-type: Simple | 4 | build-type: Simple |
| 5 | 5 | ||
| @@ -34,6 +34,7 @@ library | |||
| 34 | Handler.Kinds | 34 | Handler.Kinds |
| 35 | Handler.Types | 35 | Handler.Types |
| 36 | Handler.List | 36 | Handler.List |
| 37 | Handler.InventoryList | ||
| 37 | 38 | ||
| 38 | if flag(dev) || flag(library-only) | 39 | if flag(dev) || flag(library-only) |
| 39 | cpp-options: -DDEVELOPMENT | 40 | cpp-options: -DDEVELOPMENT |
| @@ -10,7 +10,7 @@ | |||
| 10 | }: | 10 | }: |
| 11 | mkDerivation { | 11 | mkDerivation { |
| 12 | pname = "bar"; | 12 | pname = "bar"; |
| 13 | version = "0.3.0"; | 13 | version = "0.4.0"; |
| 14 | src = ./.; | 14 | src = ./.; |
| 15 | isLibrary = true; | 15 | isLibrary = true; |
| 16 | isExecutable = true; | 16 | isExecutable = true; |
diff --git a/config/routes b/config/routes index 5024ab1..1ad940d 100644 --- a/config/routes +++ b/config/routes | |||
| @@ -14,4 +14,5 @@ | |||
| 14 | /types TypesR GET | 14 | /types TypesR GET |
| 15 | /type TypeR GET | 15 | /type TypeR GET |
| 16 | 16 | ||
| 17 | /list ListR GET POST | 17 | /shop ListR GET POST |
| 18 | /list InventoryListR GET | ||
diff --git a/templates/inventoryList.cassius b/templates/inventoryList.cassius new file mode 100644 index 0000000..edb9feb --- /dev/null +++ b/templates/inventoryList.cassius | |||
| @@ -0,0 +1,51 @@ | |||
| 1 | body > ul | ||
| 2 | list-style-type: none | ||
| 3 | margin: 0 | ||
| 4 | padding: 0 | ||
| 5 | li | ||
| 6 | padding: 0.25em | ||
| 7 | margin: 0 | ||
| 8 | .kindType | ||
| 9 | color: inherit | ||
| 10 | .type | ||
| 11 | color: #aaa | ||
| 12 | .type::before | ||
| 13 | content: "(" | ||
| 14 | .type::after | ||
| 15 | content: ")" | ||
| 16 | .info | ||
| 17 | list-style-type: none | ||
| 18 | margin: 0 | ||
| 19 | padding: 0 | ||
| 20 | li | ||
| 21 | display:inline-table | ||
| 22 | border-collapse: collapse | ||
| 23 | div | ||
| 24 | display: table-row | ||
| 25 | div | ||
| 26 | display: table-cell | ||
| 27 | background-color: #ddd | ||
| 28 | border-right:1px solid #999 | ||
| 29 | padding: 0.25em | ||
| 30 | div:first-child | ||
| 31 | border-radius: 0.5em 0 0 0.25em | ||
| 32 | div:last-child | ||
| 33 | border-right-style: none | ||
| 34 | border-radius: 0 0.25em 0.5em 0 | ||
| 35 | li.content | ||
| 36 | display:inline-block | ||
| 37 | background-color: #ddd | ||
| 38 | padding: 0.25em | ||
| 39 | border-radius: 0.5em 0.25em | ||
| 40 | li | ||
| 41 | margin-bottom:0.5em | ||
| 42 | li:last-child | ||
| 43 | margin-bottom:0 | ||
| 44 | |||
| 45 | .expireMonth | ||
| 46 | color: #995e00 | ||
| 47 | .expireWeek | ||
| 48 | color: #994000 | ||
| 49 | .expired | ||
| 50 | color: #990000 | ||
| 51 | text-decoration: line-through | ||
diff --git a/templates/inventoryList.hamlet b/templates/inventoryList.hamlet new file mode 100644 index 0000000..9bf48f1 --- /dev/null +++ b/templates/inventoryList.hamlet | |||
| @@ -0,0 +1,33 @@ | |||
| 1 | <ul> | ||
| 2 | $forall WithType (Entity itemId Item{..}) itemType <- stock | ||
| 3 | <li .color> | ||
| 4 | <div .kindType> | ||
| 5 | <span .kind>#{itemKind} | ||
| 6 | <span .type>#{itemType} | ||
| 7 | <ul .info> | ||
| 8 | $case itemBought | ||
| 9 | $of DateKnown d | ||
| 10 | <li> | ||
| 11 | <div> | ||
| 12 | <div>Bought | ||
| 13 | <div>#{dayFormat d} | ||
| 14 | $of _ | ||
| 15 | $case itemExpires | ||
| 16 | $of DateKnown d | ||
| 17 | <li> | ||
| 18 | <div> | ||
| 19 | <div>Expires | ||
| 20 | <div :d < today:.expired :d < addDays 7 today:.expireWeek :d < addGregorianMonthsRollOver 1 today:.expireMonth> | ||
| 21 | #{dayFormat d} | ||
| 22 | $of _ | ||
| 23 | $case itemOpened | ||
| 24 | $of DateKnown d | ||
| 25 | <li> | ||
| 26 | <div> | ||
| 27 | <div>Opened | ||
| 28 | <div>#{dayFormat d} | ||
| 29 | $of DateUnknown | ||
| 30 | <li .content>Open | ||
| 31 | $of _ | ||
| 32 | $if itemRunningLow | ||
| 33 | <li .content>Running low | ||
