mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-03-28 17:55:06 +00:00
Edit dates of multiple items
This commit is contained in:
parent
7ade7dd70b
commit
2e6026b817
@ -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
|
||||||
|
@ -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.") *>
|
||||||
|
@ -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]
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user