Edit dates of multiple items

This commit is contained in:
Eike Kettner 2020-10-26 13:16:03 +01:00
parent 7ade7dd70b
commit 2e6026b817
7 changed files with 121 additions and 50 deletions

View File

@ -98,13 +98,17 @@ trait OItem[F[_]] {
collective: Ident
): F[AddResult]
def setItemDate(item: Ident, date: Option[Timestamp], collective: Ident): F[AddResult]
def setItemDueDate(
item: Ident,
def setItemDate(
item: NonEmptyList[Ident],
date: Option[Timestamp],
collective: Ident
): F[AddResult]
): F[UpdateResult]
def setItemDueDate(
item: NonEmptyList[Ident],
date: Option[Timestamp],
collective: Ident
): F[UpdateResult]
def getProposals(item: Ident, collective: Ident): F[MetaProposalList]
@ -480,24 +484,24 @@ object OItem {
.map(AddResult.fromUpdate)
def setItemDate(
item: Ident,
items: NonEmptyList[Ident],
date: Option[Timestamp],
collective: Ident
): F[AddResult] =
store
.transact(RItem.updateDate(item, collective, date))
.attempt
.map(AddResult.fromUpdate)
): F[UpdateResult] =
UpdateResult.fromUpdate(
store
.transact(RItem.updateDate(items, collective, date))
)
def setItemDueDate(
item: Ident,
items: NonEmptyList[Ident],
date: Option[Timestamp],
collective: Ident
): F[AddResult] =
store
.transact(RItem.updateDueDate(item, collective, date))
.attempt
.map(AddResult.fromUpdate)
): F[UpdateResult] =
UpdateResult.fromUpdate(
store
.transact(RItem.updateDueDate(items, collective, date))
)
def deleteItem(itemId: Ident, collective: Ident): F[Int] =
QItem

View File

@ -1,5 +1,6 @@
package docspell.joex.process
import cats.data.NonEmptyList
import cats.effect.Sync
import cats.implicits._
@ -88,7 +89,11 @@ object LinkProposal {
val ts = Timestamp.from(ld.atStartOfDay(Timestamp.UTC))
ctx.logger.debug(s"Updating item date ${value.id}") *>
ctx.store.transact(
RItem.updateDate(itemId, ctx.args.meta.collective, Some(ts))
RItem.updateDate(
NonEmptyList.of(itemId),
ctx.args.meta.collective,
Some(ts)
)
)
case None =>
ctx.logger.info(s"Cannot read value '${value.id}' into a date.") *>
@ -100,7 +105,11 @@ object LinkProposal {
val ts = Timestamp.from(ld.atStartOfDay(Timestamp.UTC))
ctx.logger.debug(s"Updating item due-date suggestion ${value.id}") *>
ctx.store.transact(
RItem.updateDueDate(itemId, ctx.args.meta.collective, Some(ts))
RItem.updateDueDate(
NonEmptyList.of(itemId),
ctx.args.meta.collective,
Some(ts)
)
)
case None =>
ctx.logger.info(s"Cannot read value '${value.id}' into a date.") *>

View File

@ -102,6 +102,22 @@ object ItemMultiRoutes {
resp <- Ok(Conversions.basicResult(res, "Direction updated"))
} yield resp
case req @ PUT -> Root / "date" =>
for {
json <- req.as[ItemsAndDate]
items <- readIds[F](json.items)
res <- backend.item.setItemDate(items, json.date, user.account.collective)
resp <- Ok(Conversions.basicResult(res, "Item date updated"))
} yield resp
case req @ PUT -> Root / "duedate" =>
for {
json <- req.as[ItemsAndDate]
items <- readIds[F](json.items)
res <- backend.item.setItemDueDate(items, json.date, user.account.collective)
resp <- Ok(Conversions.basicResult(res, "Item due date updated"))
} yield resp
// case req @ PUT -> Root / "corrOrg" =>
// for {
// idref <- req.as[OptionalId]
@ -130,22 +146,6 @@ object ItemMultiRoutes {
// resp <- Ok(Conversions.basicResult(res, "Concerned equipment updated"))
// } yield resp
// case req @ PUT -> Root / "duedate" =>
// for {
// date <- req.as[OptionalDate]
// _ <- logger.fdebug(s"Setting item due date to ${date.date}")
// res <- backend.item.setItemDueDate(id, date.date, user.account.collective)
// resp <- Ok(Conversions.basicResult(res, "Item due date updated"))
// } yield resp
// case req @ PUT -> Root / "date" =>
// for {
// date <- req.as[OptionalDate]
// _ <- logger.fdebug(s"Setting item date to ${date.date}")
// res <- backend.item.setItemDate(id, date.date, user.account.collective)
// resp <- Ok(Conversions.basicResult(res, "Item date updated"))
// } yield resp
// case req @ POST -> Root / "reprocess" =>
// for {
// data <- req.as[IdList]

View File

@ -264,7 +264,11 @@ object ItemRoutes {
for {
date <- req.as[OptionalDate]
_ <- logger.fdebug(s"Setting item due date to ${date.date}")
res <- backend.item.setItemDueDate(id, date.date, user.account.collective)
res <- backend.item.setItemDueDate(
NonEmptyList.of(id),
date.date,
user.account.collective
)
resp <- Ok(Conversions.basicResult(res, "Item due date updated"))
} yield resp
@ -272,7 +276,11 @@ object ItemRoutes {
for {
date <- req.as[OptionalDate]
_ <- logger.fdebug(s"Setting item date to ${date.date}")
res <- backend.item.setItemDate(id, date.date, user.account.collective)
res <- backend.item.setItemDate(
NonEmptyList.of(id),
date.date,
user.account.collective
)
resp <- Ok(Conversions.basicResult(res, "Item date updated"))
} yield resp

View File

@ -285,18 +285,8 @@ object RItem {
).update.run
} yield n
def updateDate(itemId: Ident, coll: Ident, date: Option[Timestamp]): ConnectionIO[Int] =
for {
t <- currentTime
n <- updateRow(
table,
and(id.is(itemId), cid.is(coll)),
commas(itemDate.setTo(date), updated.setTo(t))
).update.run
} yield n
def updateDueDate(
itemId: Ident,
def updateDate(
itemIds: NonEmptyList[Ident],
coll: Ident,
date: Option[Timestamp]
): ConnectionIO[Int] =
@ -304,7 +294,21 @@ object RItem {
t <- currentTime
n <- updateRow(
table,
and(id.is(itemId), cid.is(coll)),
and(id.isIn(itemIds), cid.is(coll)),
commas(itemDate.setTo(date), updated.setTo(t))
).update.run
} yield n
def updateDueDate(
itemIds: NonEmptyList[Ident],
coll: Ident,
date: Option[Timestamp]
): ConnectionIO[Int] =
for {
t <- currentTime
n <- updateRow(
table,
and(id.isIn(itemIds), cid.is(coll)),
commas(dueDate.setTo(date), updated.setTo(t))
).update.run
} yield n

View File

@ -81,8 +81,10 @@ module Api exposing
, setConfirmed
, setCorrOrg
, setCorrPerson
, setDateMultiple
, setDirection
, setDirectionMultiple
, setDueDateMultiple
, setFolder
, setFolderMultiple
, setItemDate
@ -135,6 +137,7 @@ import Api.Model.ItemLightList exposing (ItemLightList)
import Api.Model.ItemProposals exposing (ItemProposals)
import Api.Model.ItemSearch exposing (ItemSearch)
import Api.Model.ItemUploadMeta exposing (ItemUploadMeta)
import Api.Model.ItemsAndDate exposing (ItemsAndDate)
import Api.Model.ItemsAndDirection exposing (ItemsAndDirection)
import Api.Model.ItemsAndName exposing (ItemsAndName)
import Api.Model.ItemsAndRef exposing (ItemsAndRef)
@ -1344,6 +1347,34 @@ setDirectionMultiple flags data receive =
}
setDateMultiple :
Flags
-> ItemsAndDate
-> (Result Http.Error BasicResult -> msg)
-> Cmd msg
setDateMultiple flags data receive =
Http2.authPut
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/date"
, account = getAccount flags
, body = Http.jsonBody (Api.Model.ItemsAndDate.encode data)
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
}
setDueDateMultiple :
Flags
-> ItemsAndDate
-> (Result Http.Error BasicResult -> msg)
-> Cmd msg
setDueDateMultiple flags data receive =
Http2.authPut
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/duedate"
, account = getAccount flags
, body = Http.jsonBody (Api.Model.ItemsAndDate.encode data)
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
}
--- Item

View File

@ -6,6 +6,7 @@ module Comp.ItemDetail.FormChange exposing
import Api
import Api.Model.BasicResult exposing (BasicResult)
import Api.Model.IdName exposing (IdName)
import Api.Model.ItemsAndDate exposing (ItemsAndDate)
import Api.Model.ItemsAndDirection exposing (ItemsAndDirection)
import Api.Model.ItemsAndName exposing (ItemsAndName)
import Api.Model.ItemsAndRef exposing (ItemsAndRef)
@ -71,5 +72,19 @@ multiUpdate flags ids change receive =
in
Api.setDirectionMultiple flags data receive
ItemDateChange date ->
let
data =
ItemsAndDate items date
in
Api.setDateMultiple flags data receive
DueDateChange date ->
let
data =
ItemsAndDate items date
in
Api.setDueDateMultiple flags data receive
_ ->
Cmd.none