Add a short-name to organizations

This commit is contained in:
Eike Kettner 2021-02-17 22:47:49 +01:00
parent 20ccdda609
commit 5181283b1b
8 changed files with 78 additions and 28 deletions

View File

@ -5069,6 +5069,8 @@ components:
description: DateTime
type: integer
format: date-time
shortName:
type: string
OrganizationList:
description: |
A list of full organization values.

View File

@ -386,7 +386,8 @@ trait Conversions {
Address(ro.street, ro.zip, ro.city, ro.country),
v.contacts.map(mkContact).toList,
ro.notes,
ro.created
ro.created,
ro.shortName
)
}
@ -407,7 +408,8 @@ trait Conversions {
v.address.country,
v.notes,
now,
now
now,
v.shortName
)
} yield OOrganization.OrgAndContacts(org, cont)
}
@ -431,7 +433,8 @@ trait Conversions {
v.address.country,
v.notes,
v.created,
now
now,
v.shortName
)
} yield OOrganization.OrgAndContacts(org, cont)
}

View File

@ -0,0 +1,2 @@
ALTER TABLE "organization"
ADD COLUMN "short_name" varchar(254);

View File

@ -0,0 +1,2 @@
ALTER TABLE `organization`
ADD COLUMN `short_name` varchar(254);

View File

@ -0,0 +1,2 @@
ALTER TABLE "organization"
ADD COLUMN "short_name" varchar(254);

View File

@ -25,7 +25,7 @@ object QOrganization {
): Stream[ConnectionIO, (ROrganization, Vector[RContact])] = {
val valFilter = query.map { q =>
val v = s"%$q%"
c.value.like(v) || org.name.like(v) || org.notes.like(v)
c.value.like(v) || org.name.like(v) || org.shortName.like(v) || org.notes.like(v)
}
val sql = Select(
select(org.all, c.all),

View File

@ -21,7 +21,8 @@ case class ROrganization(
country: String,
notes: Option[String],
created: Timestamp,
updated: Timestamp
updated: Timestamp,
shortName: Option[String]
) {}
object ROrganization {
@ -31,16 +32,17 @@ object ROrganization {
final case class Table(alias: Option[String]) extends TableDef {
val tableName = "organization"
val oid = Column[Ident]("oid", this)
val cid = Column[Ident]("cid", this)
val name = Column[String]("name", this)
val street = Column[String]("street", this)
val zip = Column[String]("zip", this)
val city = Column[String]("city", this)
val country = Column[String]("country", this)
val notes = Column[String]("notes", this)
val created = Column[Timestamp]("created", this)
val updated = Column[Timestamp]("updated", this)
val oid = Column[Ident]("oid", this)
val cid = Column[Ident]("cid", this)
val name = Column[String]("name", this)
val street = Column[String]("street", this)
val zip = Column[String]("zip", this)
val city = Column[String]("city", this)
val country = Column[String]("country", this)
val notes = Column[String]("notes", this)
val created = Column[Timestamp]("created", this)
val updated = Column[Timestamp]("updated", this)
val shortName = Column[String]("short_name", this)
val all =
NonEmptyList.of[Column[_]](
oid,
@ -52,7 +54,8 @@ object ROrganization {
country,
notes,
created,
updated
updated,
shortName
)
}
@ -64,7 +67,7 @@ object ROrganization {
DML.insert(
T,
T.all,
fr"${v.oid},${v.cid},${v.name},${v.street},${v.zip},${v.city},${v.country},${v.notes},${v.created},${v.updated}"
fr"${v.oid},${v.cid},${v.name},${v.street},${v.zip},${v.city},${v.country},${v.notes},${v.created},${v.updated},${v.shortName}"
)
def update(v: ROrganization): ConnectionIO[Int] = {
@ -80,7 +83,8 @@ object ROrganization {
T.city.setTo(v.city),
T.country.setTo(v.country),
T.notes.setTo(v.notes),
T.updated.setTo(now)
T.updated.setTo(now),
T.shortName.setTo(v.shortName)
)
)
for {
@ -106,7 +110,11 @@ object ROrganization {
}
def findLike(coll: Ident, orgName: String): ConnectionIO[Vector[IdRef]] =
run(select(T.oid, T.name), from(T), T.cid === coll && T.name.like(orgName))
run(
select(T.oid, T.name),
from(T),
T.cid === coll && (T.name.like(orgName) || T.shortName.like(orgName))
)
.query[IdRef]
.to[Vector]
@ -141,7 +149,9 @@ object ROrganization {
nameQ: Option[String],
order: Table => Column[_]
): ConnectionIO[Vector[IdRef]] = {
val nameFilter = nameQ.map(s => T.name.like(s"%${s.toLowerCase}%"))
val nameFilter = nameQ.map(s =>
T.name.like(s"%${s.toLowerCase}%") || T.shortName.like(s"%${s.toLowerCase}%")
)
val sql = Select(select(T.oid, T.name), from(T), T.cid === coll &&? nameFilter)
.orderBy(order(T))
sql.build.query[IdRef].to[Vector]

View File

@ -20,6 +20,7 @@ import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onInput)
import Styles as S
import Util.Maybe
type alias Model =
@ -28,6 +29,7 @@ type alias Model =
, addressModel : Comp.AddressForm.Model
, contactModel : Comp.ContactField.Model
, notes : Maybe String
, shortName : Maybe String
}
@ -38,6 +40,7 @@ emptyModel =
, addressModel = Comp.AddressForm.emptyModel
, contactModel = Comp.ContactField.emptyModel
, notes = Nothing
, shortName = Nothing
}
@ -57,6 +60,7 @@ getOrg model =
, address = Comp.AddressForm.getAddress model.addressModel
, contacts = Comp.ContactField.getContacts model.contactModel
, notes = model.notes
, shortName = model.shortName
}
@ -66,6 +70,7 @@ type Msg
| AddressMsg Comp.AddressForm.Msg
| ContactMsg Comp.ContactField.Msg
| SetNotes String
| SetShortName String
update : Flags -> Msg -> Model -> ( Model, Cmd Msg )
@ -79,7 +84,14 @@ update flags msg model =
( m2, c2 ) =
update flags (ContactMsg (Comp.ContactField.SetItems t.contacts)) m1
in
( { m2 | org = t, name = t.name, notes = t.notes }, Cmd.batch [ c1, c2 ] )
( { m2
| org = t
, name = t.name
, notes = t.notes
, shortName = t.shortName
}
, Cmd.batch [ c1, c2 ]
)
AddressMsg am ->
let
@ -99,14 +111,12 @@ update flags msg model =
( { model | name = n }, Cmd.none )
SetNotes str ->
( { model
| notes =
if str == "" then
Nothing
( { model | notes = Util.Maybe.fromString str }
, Cmd.none
)
else
Just str
}
SetShortName str ->
( { model | shortName = Util.Maybe.fromString str }
, Cmd.none
)
@ -184,6 +194,25 @@ view2 mobile settings model =
]
[]
]
, div
[ class "mb-4" ]
[ label
[ for "org-short-name"
, class S.inputLabel
]
[ text "Short Name"
]
, input
[ type_ "text"
, onInput SetShortName
, placeholder "Abbreviation"
, Maybe.withDefault "" model.shortName
|> value
, name "org-short-name"
, class S.textInput
]
[]
]
, div [ class "mb-4" ]
[ h3 [ class S.header3 ]
[ text "Address"