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 collective: Ident
): F[AddResult] ): F[AddResult]
def setItemDate(item: Ident, date: Option[Timestamp], collective: Ident): F[AddResult] def setItemDate(
item: NonEmptyList[Ident],
def setItemDueDate(
item: Ident,
date: Option[Timestamp], date: Option[Timestamp],
collective: Ident 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] def getProposals(item: Ident, collective: Ident): F[MetaProposalList]
@ -480,24 +484,24 @@ object OItem {
.map(AddResult.fromUpdate) .map(AddResult.fromUpdate)
def setItemDate( def setItemDate(
item: Ident, items: NonEmptyList[Ident],
date: Option[Timestamp], date: Option[Timestamp],
collective: Ident collective: Ident
): F[AddResult] = ): F[UpdateResult] =
store UpdateResult.fromUpdate(
.transact(RItem.updateDate(item, collective, date)) store
.attempt .transact(RItem.updateDate(items, collective, date))
.map(AddResult.fromUpdate) )
def setItemDueDate( def setItemDueDate(
item: Ident, items: NonEmptyList[Ident],
date: Option[Timestamp], date: Option[Timestamp],
collective: Ident collective: Ident
): F[AddResult] = ): F[UpdateResult] =
store UpdateResult.fromUpdate(
.transact(RItem.updateDueDate(item, collective, date)) store
.attempt .transact(RItem.updateDueDate(items, collective, date))
.map(AddResult.fromUpdate) )
def deleteItem(itemId: Ident, collective: Ident): F[Int] = def deleteItem(itemId: Ident, collective: Ident): F[Int] =
QItem QItem

View File

@ -1,5 +1,6 @@
package docspell.joex.process package docspell.joex.process
import cats.data.NonEmptyList
import cats.effect.Sync import cats.effect.Sync
import cats.implicits._ import cats.implicits._
@ -88,7 +89,11 @@ object LinkProposal {
val ts = Timestamp.from(ld.atStartOfDay(Timestamp.UTC)) val ts = Timestamp.from(ld.atStartOfDay(Timestamp.UTC))
ctx.logger.debug(s"Updating item date ${value.id}") *> ctx.logger.debug(s"Updating item date ${value.id}") *>
ctx.store.transact( 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 => case None =>
ctx.logger.info(s"Cannot read value '${value.id}' into a date.") *> 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)) val ts = Timestamp.from(ld.atStartOfDay(Timestamp.UTC))
ctx.logger.debug(s"Updating item due-date suggestion ${value.id}") *> ctx.logger.debug(s"Updating item due-date suggestion ${value.id}") *>
ctx.store.transact( 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 => case None =>
ctx.logger.info(s"Cannot read value '${value.id}' into a date.") *> 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")) resp <- Ok(Conversions.basicResult(res, "Direction updated"))
} yield resp } 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" => // case req @ PUT -> Root / "corrOrg" =>
// for { // for {
// idref <- req.as[OptionalId] // idref <- req.as[OptionalId]
@ -130,22 +146,6 @@ object ItemMultiRoutes {
// resp <- Ok(Conversions.basicResult(res, "Concerned equipment updated")) // resp <- Ok(Conversions.basicResult(res, "Concerned equipment updated"))
// } yield resp // } 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" => // case req @ POST -> Root / "reprocess" =>
// for { // for {
// data <- req.as[IdList] // data <- req.as[IdList]

View File

@ -264,7 +264,11 @@ object ItemRoutes {
for { for {
date <- req.as[OptionalDate] date <- req.as[OptionalDate]
_ <- logger.fdebug(s"Setting item due date to ${date.date}") _ <- 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")) resp <- Ok(Conversions.basicResult(res, "Item due date updated"))
} yield resp } yield resp
@ -272,7 +276,11 @@ object ItemRoutes {
for { for {
date <- req.as[OptionalDate] date <- req.as[OptionalDate]
_ <- logger.fdebug(s"Setting item date to ${date.date}") _ <- 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")) resp <- Ok(Conversions.basicResult(res, "Item date updated"))
} yield resp } yield resp

View File

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

View File

@ -81,8 +81,10 @@ module Api exposing
, setConfirmed , setConfirmed
, setCorrOrg , setCorrOrg
, setCorrPerson , setCorrPerson
, setDateMultiple
, setDirection , setDirection
, setDirectionMultiple , setDirectionMultiple
, setDueDateMultiple
, setFolder , setFolder
, setFolderMultiple , setFolderMultiple
, setItemDate , setItemDate
@ -135,6 +137,7 @@ import Api.Model.ItemLightList exposing (ItemLightList)
import Api.Model.ItemProposals exposing (ItemProposals) import Api.Model.ItemProposals exposing (ItemProposals)
import Api.Model.ItemSearch exposing (ItemSearch) import Api.Model.ItemSearch exposing (ItemSearch)
import Api.Model.ItemUploadMeta exposing (ItemUploadMeta) import Api.Model.ItemUploadMeta exposing (ItemUploadMeta)
import Api.Model.ItemsAndDate exposing (ItemsAndDate)
import Api.Model.ItemsAndDirection exposing (ItemsAndDirection) import Api.Model.ItemsAndDirection exposing (ItemsAndDirection)
import Api.Model.ItemsAndName exposing (ItemsAndName) import Api.Model.ItemsAndName exposing (ItemsAndName)
import Api.Model.ItemsAndRef exposing (ItemsAndRef) 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 --- Item

View File

@ -6,6 +6,7 @@ module Comp.ItemDetail.FormChange exposing
import Api import Api
import Api.Model.BasicResult exposing (BasicResult) import Api.Model.BasicResult exposing (BasicResult)
import Api.Model.IdName exposing (IdName) import Api.Model.IdName exposing (IdName)
import Api.Model.ItemsAndDate exposing (ItemsAndDate)
import Api.Model.ItemsAndDirection exposing (ItemsAndDirection) import Api.Model.ItemsAndDirection exposing (ItemsAndDirection)
import Api.Model.ItemsAndName exposing (ItemsAndName) import Api.Model.ItemsAndName exposing (ItemsAndName)
import Api.Model.ItemsAndRef exposing (ItemsAndRef) import Api.Model.ItemsAndRef exposing (ItemsAndRef)
@ -71,5 +72,19 @@ multiUpdate flags ids change receive =
in in
Api.setDirectionMultiple flags data receive 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 Cmd.none