mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-05 22:55:58 +00:00
Add a flag for restricting overdue items
This commit is contained in:
parent
b2ca314da9
commit
84e0ebf1a2
@ -81,6 +81,7 @@ object OUserTask {
|
|||||||
Nil,
|
Nil,
|
||||||
None,
|
None,
|
||||||
5,
|
5,
|
||||||
|
None,
|
||||||
Nil,
|
Nil,
|
||||||
Nil
|
Nil
|
||||||
)
|
)
|
||||||
|
@ -17,6 +17,7 @@ case class NotifyDueItemsArgs(
|
|||||||
recipients: List[String],
|
recipients: List[String],
|
||||||
itemDetailUrl: Option[LenientUri],
|
itemDetailUrl: Option[LenientUri],
|
||||||
remindDays: Int,
|
remindDays: Int,
|
||||||
|
daysBack: Option[Int],
|
||||||
tagsInclude: List[Ident],
|
tagsInclude: List[Ident],
|
||||||
tagsExclude: List[Ident]
|
tagsExclude: List[Ident]
|
||||||
) {}
|
) {}
|
||||||
|
@ -73,6 +73,7 @@ object NotifyDueItemsTask {
|
|||||||
states = ItemState.validStates,
|
states = ItemState.validStates,
|
||||||
tagsInclude = ctx.args.tagsInclude,
|
tagsInclude = ctx.args.tagsInclude,
|
||||||
tagsExclude = ctx.args.tagsExclude,
|
tagsExclude = ctx.args.tagsExclude,
|
||||||
|
dueDateFrom = ctx.args.daysBack.map(back => now - Duration.days(back.toLong)),
|
||||||
dueDateTo = Some(now + Duration.days(ctx.args.remindDays.toLong)),
|
dueDateTo = Some(now + Duration.days(ctx.args.remindDays.toLong)),
|
||||||
orderAsc = Some(_.dueDate)
|
orderAsc = Some(_.dueDate)
|
||||||
)
|
)
|
||||||
|
@ -1679,6 +1679,7 @@ components:
|
|||||||
- recipients
|
- recipients
|
||||||
- schedule
|
- schedule
|
||||||
- remindDays
|
- remindDays
|
||||||
|
- capOverdue
|
||||||
- tagsInclude
|
- tagsInclude
|
||||||
- tagsExclude
|
- tagsExclude
|
||||||
properties:
|
properties:
|
||||||
@ -1701,6 +1702,17 @@ components:
|
|||||||
remindDays:
|
remindDays:
|
||||||
type: integer
|
type: integer
|
||||||
format: int32
|
format: int32
|
||||||
|
description: |
|
||||||
|
Used to restrict items by their due dates. All items with
|
||||||
|
a due date lower than (now + remindDays) are searched.
|
||||||
|
capOverdue:
|
||||||
|
type: boolean
|
||||||
|
description: |
|
||||||
|
If this is true, the search is also restricted to due
|
||||||
|
dates greater than `now - remindDays'. Otherwise, due date
|
||||||
|
are not restricted in that direction (only lower than `now
|
||||||
|
+ remindDays' applies) and it is expected to restrict it
|
||||||
|
more using custom tags.
|
||||||
tagsInclude:
|
tagsInclude:
|
||||||
type: array
|
type: array
|
||||||
items:
|
items:
|
||||||
|
@ -74,6 +74,8 @@ object NotifyDueItemsRoutes {
|
|||||||
settings.recipients,
|
settings.recipients,
|
||||||
Some(cfg.baseUrl / "app" / "item"),
|
Some(cfg.baseUrl / "app" / "item"),
|
||||||
settings.remindDays,
|
settings.remindDays,
|
||||||
|
if (settings.capOverdue) Some(settings.remindDays)
|
||||||
|
else None,
|
||||||
settings.tagsInclude.map(_.id),
|
settings.tagsInclude.map(_.id),
|
||||||
settings.tagsExclude.map(_.id)
|
settings.tagsExclude.map(_.id)
|
||||||
)
|
)
|
||||||
@ -100,6 +102,7 @@ object NotifyDueItemsRoutes {
|
|||||||
task.args.recipients,
|
task.args.recipients,
|
||||||
task.timer,
|
task.timer,
|
||||||
task.args.remindDays,
|
task.args.remindDays,
|
||||||
|
task.args.daysBack.isDefined,
|
||||||
tinc.map(Conversions.mkTag).toList,
|
tinc.map(Conversions.mkTag).toList,
|
||||||
texc.map(Conversions.mkTag).toList
|
texc.map(Conversions.mkTag).toList
|
||||||
)
|
)
|
||||||
|
@ -38,6 +38,7 @@ type alias Model =
|
|||||||
, recipientsModel : Comp.EmailInput.Model
|
, recipientsModel : Comp.EmailInput.Model
|
||||||
, remindDays : Maybe Int
|
, remindDays : Maybe Int
|
||||||
, remindDaysModel : Comp.IntField.Model
|
, remindDaysModel : Comp.IntField.Model
|
||||||
|
, capOverdue : Bool
|
||||||
, enabled : Bool
|
, enabled : Bool
|
||||||
, schedule : Validated CalEvent
|
, schedule : Validated CalEvent
|
||||||
, scheduleModel : Comp.CalEventInput.Model
|
, scheduleModel : Comp.CalEventInput.Model
|
||||||
@ -56,6 +57,7 @@ type Msg
|
|||||||
| GetTagsResp (Result Http.Error TagList)
|
| GetTagsResp (Result Http.Error TagList)
|
||||||
| RemindDaysMsg Comp.IntField.Msg
|
| RemindDaysMsg Comp.IntField.Msg
|
||||||
| ToggleEnabled
|
| ToggleEnabled
|
||||||
|
| ToggleCapOverdue
|
||||||
| CalEventMsg Comp.CalEventInput.Msg
|
| CalEventMsg Comp.CalEventInput.Msg
|
||||||
| SetNotificationSettings (Result Http.Error NotificationSettings)
|
| SetNotificationSettings (Result Http.Error NotificationSettings)
|
||||||
| SubmitResp (Result Http.Error BasicResult)
|
| SubmitResp (Result Http.Error BasicResult)
|
||||||
@ -93,6 +95,7 @@ init flags =
|
|||||||
, remindDays = Just 1
|
, remindDays = Just 1
|
||||||
, remindDaysModel = Comp.IntField.init (Just 1) Nothing True "Remind Days"
|
, remindDaysModel = Comp.IntField.init (Just 1) Nothing True "Remind Days"
|
||||||
, enabled = False
|
, enabled = False
|
||||||
|
, capOverdue = False
|
||||||
, schedule = initialSchedule
|
, schedule = initialSchedule
|
||||||
, scheduleModel = sm
|
, scheduleModel = sm
|
||||||
, formMsg = Nothing
|
, formMsg = Nothing
|
||||||
@ -139,6 +142,7 @@ makeSettings model =
|
|||||||
, tagsExclude = Comp.Dropdown.getSelected model.tagExclModel
|
, tagsExclude = Comp.Dropdown.getSelected model.tagExclModel
|
||||||
, recipients = rec
|
, recipients = rec
|
||||||
, remindDays = days
|
, remindDays = days
|
||||||
|
, capOverdue = model.capOverdue
|
||||||
, enabled = model.enabled
|
, enabled = model.enabled
|
||||||
, schedule = Data.CalEvent.makeEvent timer
|
, schedule = Data.CalEvent.makeEvent timer
|
||||||
}
|
}
|
||||||
@ -316,6 +320,14 @@ update flags msg model =
|
|||||||
, Cmd.none
|
, Cmd.none
|
||||||
)
|
)
|
||||||
|
|
||||||
|
ToggleCapOverdue ->
|
||||||
|
( { model
|
||||||
|
| capOverdue = not model.capOverdue
|
||||||
|
, formMsg = Nothing
|
||||||
|
}
|
||||||
|
, Cmd.none
|
||||||
|
)
|
||||||
|
|
||||||
SetNotificationSettings (Ok s) ->
|
SetNotificationSettings (Ok s) ->
|
||||||
let
|
let
|
||||||
smtp =
|
smtp =
|
||||||
@ -343,6 +355,7 @@ update flags msg model =
|
|||||||
, recipients = s.recipients
|
, recipients = s.recipients
|
||||||
, remindDays = Just s.remindDays
|
, remindDays = Just s.remindDays
|
||||||
, enabled = s.enabled
|
, enabled = s.enabled
|
||||||
|
, capOverdue = s.capOverdue
|
||||||
, schedule = Data.Validated.Unknown newSchedule
|
, schedule = Data.Validated.Unknown newSchedule
|
||||||
, scheduleModel = sm
|
, scheduleModel = sm
|
||||||
, formMsg = Nothing
|
, formMsg = Nothing
|
||||||
@ -457,14 +470,14 @@ view extraClasses model =
|
|||||||
[ label [] [ text "Tags Include (and)" ]
|
[ label [] [ text "Tags Include (and)" ]
|
||||||
, Html.map TagIncMsg (Comp.Dropdown.view model.tagInclModel)
|
, Html.map TagIncMsg (Comp.Dropdown.view model.tagInclModel)
|
||||||
, span [ class "small-info" ]
|
, span [ class "small-info" ]
|
||||||
[ text "Items must have all tags specified here."
|
[ text "Items must have all the tags specified here."
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
, div [ class "field" ]
|
, div [ class "field" ]
|
||||||
[ label [] [ text "Tags Exclude (or)" ]
|
[ label [] [ text "Tags Exclude (or)" ]
|
||||||
, Html.map TagExcMsg (Comp.Dropdown.view model.tagExclModel)
|
, Html.map TagExcMsg (Comp.Dropdown.view model.tagExclModel)
|
||||||
, span [ class "small-info" ]
|
, span [ class "small-info" ]
|
||||||
[ text "Items must not have all tags specified here."
|
[ text "Items must not have any tag specified here."
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
, Html.map RemindDaysMsg
|
, Html.map RemindDaysMsg
|
||||||
@ -472,6 +485,25 @@ view extraClasses model =
|
|||||||
"required field"
|
"required field"
|
||||||
model.remindDaysModel
|
model.remindDaysModel
|
||||||
)
|
)
|
||||||
|
, div [ class "required inline field" ]
|
||||||
|
[ div [ class "ui checkbox" ]
|
||||||
|
[ input
|
||||||
|
[ type_ "checkbox"
|
||||||
|
, onCheck (\_ -> ToggleCapOverdue)
|
||||||
|
, checked model.capOverdue
|
||||||
|
]
|
||||||
|
[]
|
||||||
|
, label []
|
||||||
|
[ text "Cap overdue items"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, div [ class "small-info" ]
|
||||||
|
[ text "If checked, only items with a due date"
|
||||||
|
, em [] [ text " greater than " ]
|
||||||
|
, code [] [ text "today-remindDays" ]
|
||||||
|
, text " are considered."
|
||||||
|
]
|
||||||
|
]
|
||||||
, div [ class "required field" ]
|
, div [ class "required field" ]
|
||||||
[ label []
|
[ label []
|
||||||
[ text "Schedule"
|
[ text "Schedule"
|
||||||
|
@ -165,10 +165,13 @@ label span.muted {
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
span.small-info {
|
.small-info {
|
||||||
font-size: smaller;
|
font-size: smaller;
|
||||||
color: rgba(0,0,0,0.6);
|
color: rgba(0,0,0,0.6);
|
||||||
}
|
}
|
||||||
|
.small-info code {
|
||||||
|
font-size: smaller;
|
||||||
|
}
|
||||||
|
|
||||||
.placeholder-message {
|
.placeholder-message {
|
||||||
color: rgba(0,0,0,0.4);
|
color: rgba(0,0,0,0.4);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user