refactor: fix typo in table name
This commit is contained in:
parent
1cf97b8c96
commit
3875f75f2a
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "UPDATE availabillity SET startTimestamp = $1, endTimestamp = $2, comment = $3 WHERE id = $4",
|
||||
"query": "UPDATE availability SET startTimestamp = $1, endTimestamp = $2, comment = $3 WHERE id = $4",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
@ -13,5 +13,5 @@
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "a517738fabdf4a8c48778ea953f5ab6a3fa9a224ebacc32f75b60cbc91a11fea"
|
||||
"hash": "09dd3e14c1d48847a9618b188ee7e7ac51e23fe98c53e27c400cadc50ccd6c2f"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n SELECT\n availabillity.id,\n availabillity.userId,\n availabillity.startTimestamp,\n availabillity.endTimestamp,\n availabillity.comment,\n user_.name,\n user_.email,\n user_.password,\n user_.salt,\n user_.role AS \"role: Role\",\n user_.function AS \"function: UserFunction\",\n user_.areaId,\n user_.locked,\n user_.lastLogin,\n user_.receiveNotifications\n FROM availabillity\n LEFT JOIN assignment ON availabillity.Id = assignment.availabillityId\n JOIN user_ ON availabillity.userId = user_.id\n WHERE availabillity.id = $1;\n ",
|
||||
"query": "\n SELECT\n availability.id,\n availability.userId,\n availability.startTimestamp,\n availability.endTimestamp,\n availability.comment,\n user_.name,\n user_.email,\n user_.password,\n user_.salt,\n user_.role AS \"role: Role\",\n user_.function AS \"function: UserFunction\",\n user_.areaId,\n user_.locked,\n user_.lastLogin,\n user_.receiveNotifications\n FROM availability\n LEFT JOIN assignment ON availability.Id = assignment.availabilityId\n JOIN user_ ON availability.userId = user_.id\n WHERE availability.id = $1;\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
@ -131,5 +131,5 @@
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "890ac023f7b2a6517ca46dfff5fc10e5e1d0c4757aa097294f5d7d6b6368b558"
|
||||
"hash": "1b85bca9dc5c0ec4568a07846ccda76468e81d9335548ef6f8b25c6e290b9cd0"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "DELETE FROM assignment WHERE assignment.eventId = $1 AND assignment.availabillityId = $2;",
|
||||
"query": "DELETE FROM assignment WHERE assignment.eventId = $1 AND assignment.availabilityId = $2;",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
@ -11,5 +11,5 @@
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "7d2e4fcde5bee6c9dcd85e35fa5f0dd4ae6b638b85f0e3a54afc85a46de6ae3a"
|
||||
"hash": "1c9387e3723fe4b7d1b10908a3580e7ebf4d56250f8f008ee030a158b02cb86e"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "SELECT * FROM vehicleAssignement WHERE vehicleAssignement.eventId = $1 AND vehicleAssignement.vehicleId = $2;",
|
||||
"query": "SELECT * FROM vehicleassignment WHERE vehicleassignment.eventId = $1 AND vehicleassignment.vehicleId = $2;",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
@ -37,5 +37,5 @@
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "159c257e9e7a164d369de950940166706b5adf4815de81481c9eb67d94b7ee0d"
|
||||
"hash": "22470315a6113d51ed84e262b6dd2e41a7c16d9dda06eb06c272345722f994ae"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n INSERT INTO assignment (eventId, availabillityId, function, startTimestamp, endTimestamp)\n VALUES ($1, $2, $3, $4, $5);\n ",
|
||||
"query": "\n INSERT INTO assignment (eventId, availabilityId, function, startTimestamp, endTimestamp)\n VALUES ($1, $2, $3, $4, $5);\n ",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
@ -25,5 +25,5 @@
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "1e0bac00becc335dbd0f71a3b65a91a77a9e4b1e323321fc41e29df7dda2b9da"
|
||||
"hash": "47bd20303899d5e804f8651c17428ee92f80321d1a5423be52e4f9a275180748"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "SELECT * FROM availabillity WHERE id = $1",
|
||||
"query": "SELECT * FROM availability WHERE id = $1",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
@ -42,5 +42,5 @@
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "0342272c9798389c37e229018e30bed399723ca0dba70438ba519d3ee7dad01b"
|
||||
"hash": "686a344fde1d9d3d7cfb431b30cd455f37854d8b728a7aac679e5c60f84cb08c"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "UPDATE assignment SET function = $1, startTimestamp = $2, endTimestamp = $3 WHERE eventId = $4 AND availabillityId = $5;",
|
||||
"query": "UPDATE assignment SET function = $1, startTimestamp = $2, endTimestamp = $3 WHERE eventId = $4 AND availabilityId = $5;",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
@ -25,5 +25,5 @@
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "75d96d0b937b8e222aa2ad6b9fc0fc185e2b6b5f1a7c80507d39d813af3e3478"
|
||||
"hash": "6a95b789e0f9fc868d8695a33614184ae14ee690d03cd7455a80430d0cb8ba63"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n SELECT\n availabillity.id,\n availabillity.userId,\n availabillity.startTimestamp,\n availabillity.endTimestamp,\n availabillity.comment,\n user_.name,\n user_.email,\n user_.password,\n user_.salt,\n user_.role AS \"role: Role\",\n user_.function AS \"function: UserFunction\",\n user_.areaId,\n user_.locked,\n user_.lastLogin,\n user_.receiveNotifications\n FROM availabillity\n JOIN user_ ON availabillity.userId = user_.id\n WHERE availabillity.starttimestamp::date = $1\n AND user_.areaId = $2\n AND availabillity.startTimestamp <= $3 AND availabillity.endTimestamp >= $4;\n ",
|
||||
"query": "\n SELECT\n availability.id,\n availability.userId,\n availability.startTimestamp,\n availability.endTimestamp,\n availability.comment,\n user_.name,\n user_.email,\n user_.password,\n user_.salt,\n user_.role AS \"role: Role\",\n user_.function AS \"function: UserFunction\",\n user_.areaId,\n user_.locked,\n user_.lastLogin,\n user_.receiveNotifications\n FROM availability\n JOIN user_ ON availability.userId = user_.id\n WHERE availability.starttimestamp::date = $1\n AND user_.areaId = $2\n AND availability.startTimestamp <= $3 AND availability.endTimestamp >= $4;\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
@ -134,5 +134,5 @@
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "85dc89689632abde0930ca3fde05ac1b6f3acb52e5ac2d2a98b966f05d5b9953"
|
||||
"hash": "7b3d623440f6ab8060223289d13687921a5c27317ea27d1b2c960b5e809a7497"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "SELECT * FROM vehicleAssignement WHERE vehicleAssignement.eventId = $1;",
|
||||
"query": "SELECT * FROM vehicleassignment WHERE vehicleassignment.eventId = $1;",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
@ -36,5 +36,5 @@
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "126a17ad3fe8937dfbf70e9a8c2bd7aee56eb35fdff0d0e47037b9af3e08b34f"
|
||||
"hash": "7c0145a715f40405e4401a6bb0bc27152a88c585d66da008d2729fb61d2d84b9"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n SELECT\n vehicleAssignement.eventId,\n vehicleAssignement.vehicleId,\n vehicleAssignement.starttimestamp,\n vehicleAssignement.endtimestamp\n FROM vehicleAssignement\n JOIN event ON vehicleAssignement.eventId = event.id\n WHERE vehicleAssignement.vehicleid = $1\n AND event.starttimestamp::date = $2;\n ",
|
||||
"query": "\n SELECT\n vehicleassignment.eventId,\n vehicleassignment.vehicleId,\n vehicleassignment.starttimestamp,\n vehicleassignment.endtimestamp\n FROM vehicleassignment\n JOIN event ON vehicleassignment.eventId = event.id\n WHERE vehicleassignment.vehicleid = $1\n AND event.starttimestamp::date = $2;\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
@ -37,5 +37,5 @@
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "4b3eebd13b23df2046dabf6ad161f1ec32d95ec24d6da507387e9a7cf8287eaf"
|
||||
"hash": "7d1f191fbff87ffc8d429221f6f42557a5ab9e6eab8e0f10f5bad6055a64f617"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "DELETE FROM vehicleassignement WHERE eventId = $1 AND vehicleId = $2;",
|
||||
"query": "DELETE FROM vehicleassignment WHERE eventId = $1 AND vehicleId = $2;",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
@ -11,5 +11,5 @@
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "48e3cab60736bf95958b063013090c64160aff1bad2f0db851db2e421711a156"
|
||||
"hash": "7db7ce0d13489ce3c0d967322f071a11174aa3c86ed405d352a3e3fb7ed10804"
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n INSERT INTO availabillity (userId, startTimestamp, endTimestamp, comment)\n VALUES ($1, $2, $3, $4);\n ",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Int4",
|
||||
"Timestamptz",
|
||||
"Timestamptz",
|
||||
"Text"
|
||||
]
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "843da813342d6d7875667d43a76f6f2820ef97b85e1185b846ff245113889096"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n SELECT\n assignment.eventId,\n assignment.availabillityId,\n assignment.function AS \"function: Function\",\n assignment.startTimestamp,\n assignment.endTimestamp\n FROM assignment\n WHERE assignment.AvailabillityId = $1;\n ",
|
||||
"query": "\n SELECT\n assignment.eventId,\n assignment.availabilityId,\n assignment.function AS \"function: Function\",\n assignment.startTimestamp,\n assignment.endTimestamp\n FROM assignment\n WHERE assignment.AvailabilityId = $1;\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
@ -10,7 +10,7 @@
|
||||
},
|
||||
{
|
||||
"ordinal": 1,
|
||||
"name": "availabillityid",
|
||||
"name": "availabilityid",
|
||||
"type_info": "Int4"
|
||||
},
|
||||
{
|
||||
@ -53,5 +53,5 @@
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "40254661a2d8a7e4b803551419e082b6ae3a5cb32ddc30a8fa844a4be67564ff"
|
||||
"hash": "8893828aa4509fc81f078b313a88c34d05eb7c5988e4d595768bc7dd47a7892f"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n SELECT\n assignment.eventId,\n assignment.availabillityId,\n assignment.function AS \"function: Function\",\n assignment.startTimestamp,\n assignment.endTimestamp\n FROM assignment\n WHERE assignment.eventId = $1;\n ",
|
||||
"query": "\n SELECT\n assignment.eventId,\n assignment.availabilityId,\n assignment.function AS \"function: Function\",\n assignment.startTimestamp,\n assignment.endTimestamp\n FROM assignment\n WHERE assignment.eventId = $1;\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
@ -10,7 +10,7 @@
|
||||
},
|
||||
{
|
||||
"ordinal": 1,
|
||||
"name": "availabillityid",
|
||||
"name": "availabilityid",
|
||||
"type_info": "Int4"
|
||||
},
|
||||
{
|
||||
@ -53,5 +53,5 @@
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "478a745b8953efab4fbc915d99a4ad6a47a5c83e7054bc9fda81a31e6555f4ff"
|
||||
"hash": "9315f185d76ae8e25c9bb0273fce388ca559c4494f82d31524f224c6b70000f9"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "DELETE FROM availabillity WHERE id = $1",
|
||||
"query": "DELETE FROM availability WHERE id = $1",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
@ -10,5 +10,5 @@
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "fc09093ce791d2d690b2e3f5ff2125a10757b06ff7d60c8843cb7814ea452f13"
|
||||
"hash": "96b1394c0dc24a9633af101d53af4844e919aca853ebeb9bab6b37a0d68c3b59"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n SELECT\n availabillity.id,\n availabillity.userId,\n availabillity.startTimestamp,\n availabillity.endTimestamp,\n availabillity.comment,\n user_.name,\n user_.email,\n user_.password,\n user_.salt,\n user_.role AS \"role: Role\",\n user_.function AS \"function: UserFunction\",\n user_.areaId,\n user_.locked,\n user_.lastLogin,\n user_.receiveNotifications,\n area.name AS areaName\n FROM availabillity\n JOIN user_ ON availabillity.userId = user_.id\n JOIN area ON user_.areaId = area.id\n WHERE user_.areaId = $1 AND\n availabillity.starttimestamp::date >= $2 AND\n availabillity.starttimestamp::date <= $3;\n ",
|
||||
"query": "\n SELECT\n availability.id,\n availability.userId,\n availability.startTimestamp,\n availability.endTimestamp,\n availability.comment,\n user_.name,\n user_.email,\n user_.password,\n user_.salt,\n user_.role AS \"role: Role\",\n user_.function AS \"function: UserFunction\",\n user_.areaId,\n user_.locked,\n user_.lastLogin,\n user_.receiveNotifications,\n area.name AS areaName\n FROM availability\n JOIN user_ ON availability.userId = user_.id\n JOIN area ON user_.areaId = area.id\n WHERE user_.areaId = $1 AND\n availability.starttimestamp::date >= $2 AND\n availability.starttimestamp::date <= $3;\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
@ -139,5 +139,5 @@
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "5ef1494706bb6c9d41f19f57d8120e57b274a5b38c0ded9f26824d4aba1822e9"
|
||||
"hash": "a05ae42af4e579697f6ddae93aa52fbc826a58edb71a23b54a589c56e1b50378"
|
||||
}
|
17
.sqlx/query-a55c1e8926f4aa039d8b14a054cb7d4e80387970467bf940c79433c08cb4f879.json
generated
Normal file
17
.sqlx/query-a55c1e8926f4aa039d8b14a054cb7d4e80387970467bf940c79433c08cb4f879.json
generated
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n INSERT INTO availability (userId, startTimestamp, endTimestamp, comment)\n VALUES ($1, $2, $3, $4);\n ",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Int4",
|
||||
"Timestamptz",
|
||||
"Timestamptz",
|
||||
"Text"
|
||||
]
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "a55c1e8926f4aa039d8b14a054cb7d4e80387970467bf940c79433c08cb4f879"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n SELECT\n availabillity.id,\n availabillity.userId,\n availabillity.startTimestamp,\n availabillity.endTimestamp,\n availabillity.comment,\n user_.name,\n user_.email,\n user_.password,\n user_.salt,\n user_.role AS \"role: Role\",\n user_.function AS \"function: UserFunction\",\n user_.areaId,\n user_.locked,\n user_.lastLogin,\n user_.receiveNotifications\n FROM availabillity\n JOIN user_ ON availabillity.userId = user_.id\n WHERE availabillity.startTimestamp::date = $1\n AND user_.areaId = $2;\n ",
|
||||
"query": "\n SELECT\n availability.id,\n availability.userId,\n availability.startTimestamp,\n availability.endTimestamp,\n availability.comment,\n user_.name,\n user_.email,\n user_.password,\n user_.salt,\n user_.role AS \"role: Role\",\n user_.function AS \"function: UserFunction\",\n user_.areaId,\n user_.locked,\n user_.lastLogin,\n user_.receiveNotifications\n FROM availability\n JOIN user_ ON availability.userId = user_.id\n WHERE availability.startTimestamp::date = $1\n AND user_.areaId = $2;\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
@ -132,5 +132,5 @@
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "18d37157e02280e00c1f3db9650775e04a665d5ac1475cc7a88f9b469438c942"
|
||||
"hash": "ae18073da63db05840fdd113a2a4727a7e2531cc54ca2bf35ba4f4f86d35a4d3"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "INSERT INTO vehicleassignement (eventId, vehicleId, startTimestamp, endTimestamp) VALUES ($1, $2, $3, $4);",
|
||||
"query": "INSERT INTO vehicleassignment (eventId, vehicleId, startTimestamp, endTimestamp) VALUES ($1, $2, $3, $4);",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
@ -13,5 +13,5 @@
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "bc79bfefe13543d35aca3443919dd4a2d4d8ee88a6bcdf0ee331cff0f7064811"
|
||||
"hash": "b76b8744228a18fee84e5f895d5b831e4fce2169daedc3d472c96bdaf4b29dae"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n SELECT\n assignment.eventId,\n assignment.availabillityId,\n assignment.function AS \"function: Function\",\n assignment.startTimestamp,\n assignment.endTimestamp\n FROM assignment\n WHERE\n assignment.eventId = $1 AND\n assignment.availabillityId = $2;\n ",
|
||||
"query": "\n SELECT\n assignment.eventId,\n assignment.availabilityId,\n assignment.function AS \"function: Function\",\n assignment.startTimestamp,\n assignment.endTimestamp\n FROM assignment\n WHERE\n assignment.eventId = $1 AND\n assignment.availabilityId = $2;\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
@ -10,7 +10,7 @@
|
||||
},
|
||||
{
|
||||
"ordinal": 1,
|
||||
"name": "availabillityid",
|
||||
"name": "availabilityid",
|
||||
"type_info": "Int4"
|
||||
},
|
||||
{
|
||||
@ -54,5 +54,5 @@
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "9e77980b06e46b1c2d8cbcab7006b984c81afc8ef02fbe289170f48411147022"
|
||||
"hash": "d2014068ac3b84a3682054e13e20ada311b1c36389b60ce8800d52ba4047730c"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n SELECT\n availabillity.id,\n availabillity.userId,\n availabillity.startTimestamp,\n availabillity.endTimestamp,\n availabillity.comment\n FROM availabillity\n WHERE availabillity.userId = $1\n AND availabillity.starttimestamp::date = $2;\n ",
|
||||
"query": "\n SELECT\n availability.id,\n availability.userId,\n availability.startTimestamp,\n availability.endTimestamp,\n availability.comment\n FROM availability\n WHERE availability.userId = $1\n AND availability.starttimestamp::date = $2;\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
@ -43,5 +43,5 @@
|
||||
true
|
||||
]
|
||||
},
|
||||
"hash": "13d164ba2c29ac2bb4ee9428309807693ff1b29c61e7d07cbf8fb5fcd553f233"
|
||||
"hash": "f90aa1fd76ddf0f667fc77f1cbb02b219aff6d73a3ee1e0afeb9eeea7e194f9d"
|
||||
}
|
3
migrations/20250512183312_fix_table_typos.sql
Normal file
3
migrations/20250512183312_fix_table_typos.sql
Normal file
@ -0,0 +1,3 @@
|
||||
ALTER TABLE availabillity RENAME TO availability;
|
||||
ALTER TABLE assignment RENAME COLUMN availabillityId TO availabilityId;
|
||||
ALTER TABLE vehicleassignement RENAME TO vehicleassignment;
|
@ -11,6 +11,9 @@ snapshot_kind: text
|
||||
|
||||
|
||||
<input type="hidden" name="date" value="2025-01-01">
|
||||
<input type="hidden" name="voluntarywachhabender" id="voluntarywachhabender" value="false">
|
||||
<input type="hidden" name="voluntaryfuehrungsassistent" id="voluntaryfuehrungsassistent"
|
||||
value="false">
|
||||
|
||||
|
||||
<div class="field is-horizontal">
|
||||
@ -109,9 +112,9 @@ snapshot_kind: text
|
||||
|
||||
<div class="control">
|
||||
<label class="checkbox">
|
||||
<input class="checkbox" type="checkbox" name="voluntarywachhabender" value="true"
|
||||
<input class="checkbox" type="checkbox"
|
||||
|
||||
>
|
||||
_="on click put (the value of #voluntarywachhabender) as inverseBool into the value of #voluntarywachhabender">
|
||||
</label>
|
||||
</div>
|
||||
|
||||
@ -128,9 +131,9 @@ snapshot_kind: text
|
||||
|
||||
<div class="control">
|
||||
<label class="checkbox">
|
||||
<input class="checkbox" type="checkbox" name="voluntaryfuehrungsassistent" value="true"
|
||||
<input class="checkbox" type="checkbox"
|
||||
|
||||
>
|
||||
_="on click put (the value of #voluntaryfuehrungsassistent) as inverseBool into the value of #voluntaryfuehrungsassistent">
|
||||
</label>
|
||||
</div>
|
||||
|
||||
|
@ -7,7 +7,7 @@ use crate::{
|
||||
models::{Assignment, Event, Role, User},
|
||||
utils::{
|
||||
event_planning_template::{
|
||||
generate_availabillity_assignment_list, generate_status_whether_staff_is_required,
|
||||
generate_availability_assignment_list, generate_status_whether_staff_is_required,
|
||||
},
|
||||
ApplicationError, TemplateResponse,
|
||||
},
|
||||
@ -15,7 +15,7 @@ use crate::{
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct AssignmentDeleteQuery {
|
||||
availabillity: i32,
|
||||
availability: i32,
|
||||
event: i32,
|
||||
}
|
||||
|
||||
@ -38,14 +38,14 @@ pub async fn delete(
|
||||
return Err(ApplicationError::Unauthorized);
|
||||
}
|
||||
|
||||
let Some(assignment) = Assignment::read(pool.get_ref(), event.id, query.availabillity).await?
|
||||
let Some(assignment) = Assignment::read(pool.get_ref(), event.id, query.availability).await?
|
||||
else {
|
||||
return Ok(HttpResponse::NotFound().finish());
|
||||
};
|
||||
|
||||
Assignment::delete(pool.get_ref(), event.id, assignment.availabillity_id).await?;
|
||||
Assignment::delete(pool.get_ref(), event.id, assignment.availability_id).await?;
|
||||
|
||||
let availabillities = generate_availabillity_assignment_list(pool.get_ref(), &event).await?;
|
||||
let availabilities = generate_availability_assignment_list(pool.get_ref(), &event).await?;
|
||||
let (
|
||||
further_posten_required,
|
||||
further_fuehrungsassistent_required,
|
||||
@ -54,7 +54,7 @@ pub async fn delete(
|
||||
|
||||
let template = PlanEventPersonalTablePartialTemplate {
|
||||
event,
|
||||
availabillities,
|
||||
availabilities,
|
||||
further_posten_required,
|
||||
further_fuehrungsassistent_required,
|
||||
further_wachhabender_required,
|
||||
@ -115,7 +115,7 @@ mod tests {
|
||||
|
||||
let app = context.app().await;
|
||||
let config = RequestConfig {
|
||||
uri: "/assignments/delete?availabillity=1&event=1".to_string(),
|
||||
uri: "/assignments/delete?availability=1&event=1".to_string(),
|
||||
role: Role::AreaManager,
|
||||
function: vec![Function::Posten],
|
||||
user_area: 1,
|
||||
@ -139,7 +139,7 @@ mod tests {
|
||||
|
||||
let app = context.app().await;
|
||||
let config = RequestConfig {
|
||||
uri: "/assignments/delete?availabillity=1&event=1".to_string(),
|
||||
uri: "/assignments/delete?availability=1&event=1".to_string(),
|
||||
role: Role::Staff,
|
||||
function: vec![Function::Posten],
|
||||
user_area: 1,
|
||||
@ -154,7 +154,7 @@ mod tests {
|
||||
async fn doesnt_work_when_event_does_not_exist(context: &DbTestContext) {
|
||||
let app = context.app().await;
|
||||
let config = RequestConfig {
|
||||
uri: "/assignments/delete?availabillity=1&event=1".to_string(),
|
||||
uri: "/assignments/delete?availability=1&event=1".to_string(),
|
||||
role: Role::AreaManager,
|
||||
function: vec![Function::Posten],
|
||||
user_area: 1,
|
||||
@ -171,7 +171,7 @@ mod tests {
|
||||
|
||||
let app = context.app().await;
|
||||
let config = RequestConfig {
|
||||
uri: "/assignments/delete?availabillity=2&event=1".to_string(),
|
||||
uri: "/assignments/delete?availability=2&event=1".to_string(),
|
||||
role: Role::AreaManager,
|
||||
function: vec![Function::Posten],
|
||||
user_area: 1,
|
||||
|
@ -2,7 +2,7 @@ use askama::Template;
|
||||
|
||||
use crate::{
|
||||
filters,
|
||||
models::{Availability, AvailabillityAssignmentState, Event},
|
||||
models::{Availability, AvailabilityAssignmentState, Event},
|
||||
};
|
||||
|
||||
pub mod delete;
|
||||
@ -12,7 +12,7 @@ pub mod post_new;
|
||||
#[template(path = "events/plan_personal_table.html")]
|
||||
pub struct PlanEventPersonalTablePartialTemplate {
|
||||
event: Event,
|
||||
availabillities: Vec<(Availability, AvailabillityAssignmentState)>,
|
||||
availabilities: Vec<(Availability, AvailabilityAssignmentState)>,
|
||||
further_posten_required: bool,
|
||||
further_fuehrungsassistent_required: bool,
|
||||
further_wachhabender_required: bool,
|
||||
|
@ -11,7 +11,7 @@ use crate::{
|
||||
},
|
||||
utils::{
|
||||
event_planning_template::{
|
||||
generate_availabillity_assignment_list, generate_status_whether_staff_is_required,
|
||||
generate_availability_assignment_list, generate_status_whether_staff_is_required,
|
||||
},
|
||||
ApplicationError, TemplateResponse,
|
||||
},
|
||||
@ -19,7 +19,7 @@ use crate::{
|
||||
|
||||
#[derive(Deserialize)]
|
||||
pub struct AssignmentQuery {
|
||||
availabillity: i32,
|
||||
availability: i32,
|
||||
function: u8,
|
||||
event: i32,
|
||||
}
|
||||
@ -43,14 +43,14 @@ pub async fn post(
|
||||
return Err(ApplicationError::Unauthorized);
|
||||
}
|
||||
|
||||
let Some(availabillity) =
|
||||
Availability::read_by_id_including_user(pool.get_ref(), query.availabillity).await?
|
||||
let Some(availability) =
|
||||
Availability::read_by_id_including_user(pool.get_ref(), query.availability).await?
|
||||
else {
|
||||
return Ok(HttpResponse::NotFound().finish());
|
||||
};
|
||||
|
||||
let availability_user_not_in_event_location_area =
|
||||
availabillity.user.as_ref().unwrap().area_id != event.location.as_ref().unwrap().area_id;
|
||||
availability.user.as_ref().unwrap().area_id != event.location.as_ref().unwrap().area_id;
|
||||
|
||||
if availability_user_not_in_event_location_area {
|
||||
return Ok(HttpResponse::BadRequest()
|
||||
@ -65,23 +65,23 @@ pub async fn post(
|
||||
};
|
||||
|
||||
let assignments_for_event = Assignment::read_all_by_event(pool.get_ref(), event.id).await?;
|
||||
let assignments_for_availabillity =
|
||||
Assignment::read_all_by_availabillity(pool.get_ref(), availabillity.id).await?;
|
||||
let assignments_for_availability =
|
||||
Assignment::read_all_by_availability(pool.get_ref(), availability.id).await?;
|
||||
let context = AssignmentContext {
|
||||
event: event.clone(),
|
||||
availabillity: availabillity.clone(),
|
||||
user_function: availabillity.user.as_ref().unwrap().function.clone(),
|
||||
availability: availability.clone(),
|
||||
user_function: availability.user.as_ref().unwrap().function.clone(),
|
||||
assignments_for_event,
|
||||
assignments_for_availabillity,
|
||||
assignments_for_availability,
|
||||
};
|
||||
|
||||
if let Err(e) = changeset.validate_with(&context) {
|
||||
return Ok(HttpResponse::BadRequest().body(e.to_string()));
|
||||
};
|
||||
|
||||
Assignment::create(pool.get_ref(), event.id, availabillity.id, changeset).await?;
|
||||
Assignment::create(pool.get_ref(), event.id, availability.id, changeset).await?;
|
||||
|
||||
let availabillities = generate_availabillity_assignment_list(pool.get_ref(), &event).await?;
|
||||
let availabilities = generate_availability_assignment_list(pool.get_ref(), &event).await?;
|
||||
|
||||
let (
|
||||
further_posten_required,
|
||||
@ -91,7 +91,7 @@ pub async fn post(
|
||||
|
||||
let template = PlanEventPersonalTablePartialTemplate {
|
||||
event,
|
||||
availabillities,
|
||||
availabilities,
|
||||
further_posten_required,
|
||||
further_fuehrungsassistent_required,
|
||||
further_wachhabender_required,
|
||||
|
@ -6,21 +6,21 @@ use crate::{
|
||||
models::{Availability, User}, utils::ApplicationError,
|
||||
};
|
||||
|
||||
#[actix_web::delete("/availabillity/delete/{id}")]
|
||||
#[actix_web::delete("/availability/delete/{id}")]
|
||||
pub async fn delete(
|
||||
user: web::ReqData<User>,
|
||||
pool: web::Data<PgPool>,
|
||||
path: web::Path<IdPath>,
|
||||
) -> Result<impl Responder, ApplicationError> {
|
||||
let Some(availabillity) = Availability::read_by_id(pool.get_ref(), path.id).await? else {
|
||||
let Some(availability) = Availability::read_by_id(pool.get_ref(), path.id).await? else {
|
||||
return Ok(HttpResponse::NotFound().finish());
|
||||
};
|
||||
|
||||
if availabillity.user_id != user.id {
|
||||
if availability.user_id != user.id {
|
||||
return Err(ApplicationError::Unauthorized);
|
||||
}
|
||||
|
||||
Availability::delete(pool.get_ref(), availabillity.id).await?;
|
||||
Availability::delete(pool.get_ref(), availability.id).await?;
|
||||
|
||||
Ok(HttpResponse::Ok().finish())
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ struct AvailabilityNewQuery {
|
||||
date: NaiveDate,
|
||||
}
|
||||
|
||||
#[actix_web::get("/availabillity/new")]
|
||||
#[actix_web::get("/availability/new")]
|
||||
pub async fn get(
|
||||
user: web::ReqData<User>,
|
||||
pool: web::Data<PgPool>,
|
||||
@ -22,10 +22,10 @@ pub async fn get(
|
||||
Availability::read_by_user_and_date(pool.get_ref(), user.id, &query.date).await?;
|
||||
let slot_suggestions = find_free_date_time_slots(&availabilities_from_user);
|
||||
|
||||
let user_can_create_availabillity =
|
||||
let user_can_create_availability =
|
||||
availabilities_from_user.is_empty() || !slot_suggestions.is_empty();
|
||||
|
||||
if !user_can_create_availabillity {
|
||||
if !user_can_create_availability {
|
||||
return Ok(HttpResponse::BadRequest().finish());
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,7 @@ pub struct CalendarQuery {
|
||||
#[template(path = "index.html")]
|
||||
struct CalendarTemplate {
|
||||
user: User,
|
||||
user_can_create_availabillity: bool,
|
||||
user_can_create_availability: bool,
|
||||
date: NaiveDate,
|
||||
selected_area: Option<i32>,
|
||||
areas: Vec<Area>,
|
||||
@ -35,7 +35,7 @@ struct CalendarTemplate {
|
||||
Option<String>,
|
||||
Vec<Vehicle>,
|
||||
)>,
|
||||
availabillities: Vec<Availability>,
|
||||
availabilities: Vec<Availability>,
|
||||
}
|
||||
|
||||
#[actix_web::get("/")]
|
||||
@ -62,7 +62,7 @@ async fn get(
|
||||
None => None,
|
||||
};
|
||||
|
||||
let availabillities = Availability::read_by_date_and_area_including_user(
|
||||
let availabilities = Availability::read_by_date_and_area_including_user(
|
||||
pool.get_ref(),
|
||||
date,
|
||||
query.area.unwrap_or(user.area_id),
|
||||
@ -73,10 +73,10 @@ async fn get(
|
||||
Availability::read_by_user_and_date(pool.get_ref(), user.id, &date).await?;
|
||||
//println!("{availabilities_from_user:#?}");
|
||||
|
||||
let user_can_create_availabillity = availabilities_from_user.is_empty()
|
||||
let user_can_create_availability = availabilities_from_user.is_empty()
|
||||
|| !find_free_date_time_slots(&availabilities_from_user).is_empty();
|
||||
|
||||
//println!("{} || {} || {} = {user_can_create_availabillity}", availabilities_from_user.is_empty(),
|
||||
//println!("{} || {} || {} = {user_can_create_availability}", availabilities_from_user.is_empty(),
|
||||
// !only_one_availability_exists_and_is_whole_day(&availabilities_from_user),
|
||||
// !find_free_time_slots(&availabilities_from_user).is_empty());
|
||||
|
||||
@ -104,9 +104,9 @@ async fn get(
|
||||
posten
|
||||
.into_iter()
|
||||
.map(|p| {
|
||||
availabillities
|
||||
availabilities
|
||||
.iter()
|
||||
.find(|a| a.id == p.availabillity_id)
|
||||
.find(|a| a.id == p.availability_id)
|
||||
.unwrap()
|
||||
.user
|
||||
.as_ref()
|
||||
@ -116,9 +116,9 @@ async fn get(
|
||||
})
|
||||
.collect(),
|
||||
fuehrungsassistent.first().map(|fa| {
|
||||
availabillities
|
||||
availabilities
|
||||
.iter()
|
||||
.find(|a| a.id == fa.availabillity_id)
|
||||
.find(|a| a.id == fa.availability_id)
|
||||
.unwrap()
|
||||
.user
|
||||
.as_ref()
|
||||
@ -127,9 +127,9 @@ async fn get(
|
||||
.clone()
|
||||
}),
|
||||
wachhabender.first().map(|wh| {
|
||||
availabillities
|
||||
availabilities
|
||||
.iter()
|
||||
.find(|a| a.id == wh.availabillity_id)
|
||||
.find(|a| a.id == wh.availability_id)
|
||||
.unwrap()
|
||||
.user
|
||||
.as_ref()
|
||||
@ -143,12 +143,12 @@ async fn get(
|
||||
|
||||
let template = CalendarTemplate {
|
||||
user: user.into_inner(),
|
||||
user_can_create_availabillity,
|
||||
user_can_create_availability,
|
||||
date,
|
||||
selected_area,
|
||||
areas,
|
||||
events_and_assignments,
|
||||
availabillities,
|
||||
availabilities,
|
||||
};
|
||||
|
||||
Ok(template.to_response()?)
|
||||
|
@ -8,7 +8,7 @@ use crate::{
|
||||
utils::{ApplicationError, TemplateResponse},
|
||||
};
|
||||
|
||||
#[actix_web::get("/availabillity/edit/{id}")]
|
||||
#[actix_web::get("/availability/edit/{id}")]
|
||||
pub async fn get(
|
||||
user: web::ReqData<User>,
|
||||
pool: web::Data<PgPool>,
|
||||
|
@ -27,7 +27,7 @@ struct NewOrEditAvailabilityTemplate<'a> {
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
pub struct AvailabillityForm {
|
||||
pub struct AvailabilityForm {
|
||||
pub startdate: NaiveDate,
|
||||
pub enddate: NaiveDate,
|
||||
pub starttime: NaiveTime,
|
||||
|
@ -3,16 +3,16 @@ use garde::Validate;
|
||||
use sqlx::PgPool;
|
||||
|
||||
use crate::{
|
||||
endpoints::availability::{find_adjacend_availability, AvailabillityForm},
|
||||
endpoints::availability::{find_adjacend_availability, AvailabilityForm},
|
||||
models::{Availability, AvailabilityChangeset, AvailabilityContext, User},
|
||||
utils::{self, ApplicationError},
|
||||
};
|
||||
|
||||
#[actix_web::post("/availabillity/new")]
|
||||
#[actix_web::post("/availability/new")]
|
||||
pub async fn post(
|
||||
user: web::ReqData<User>,
|
||||
pool: web::Data<PgPool>,
|
||||
form: web::Form<AvailabillityForm>,
|
||||
form: web::Form<AvailabilityForm>,
|
||||
) -> Result<impl Responder, ApplicationError> {
|
||||
let existing_availabilities =
|
||||
Availability::read_by_user_and_date(pool.get_ref(), user.id, &form.startdate).await?;
|
||||
|
@ -4,19 +4,19 @@ use sqlx::PgPool;
|
||||
|
||||
use crate::{
|
||||
endpoints::{
|
||||
availability::{find_adjacend_availability, AvailabillityForm},
|
||||
availability::{find_adjacend_availability, AvailabilityForm},
|
||||
IdPath,
|
||||
},
|
||||
models::{Availability, AvailabilityChangeset, AvailabilityContext, User},
|
||||
utils::{self, ApplicationError},
|
||||
};
|
||||
|
||||
#[actix_web::post("/availabillity/edit/{id}")]
|
||||
#[actix_web::post("/availability/edit/{id}")]
|
||||
pub async fn post(
|
||||
user: web::ReqData<User>,
|
||||
pool: web::Data<PgPool>,
|
||||
path: web::Path<IdPath>,
|
||||
form: web::Form<AvailabillityForm>,
|
||||
form: web::Form<AvailabilityForm>,
|
||||
) -> Result<impl Responder, ApplicationError> {
|
||||
let Some(availability) = Availability::read_by_id(pool.get_ref(), path.id).await? else {
|
||||
return Ok(HttpResponse::NotFound().finish());
|
||||
|
@ -5,10 +5,10 @@ use sqlx::PgPool;
|
||||
use crate::{
|
||||
endpoints::IdPath,
|
||||
filters,
|
||||
models::{Availability, AvailabillityAssignmentState, Event, Role, User, Vehicle},
|
||||
models::{Availability, AvailabilityAssignmentState, Event, Role, User, Vehicle},
|
||||
utils::{
|
||||
event_planning_template::{
|
||||
generate_availabillity_assignment_list, generate_status_whether_staff_is_required,
|
||||
generate_availability_assignment_list, generate_status_whether_staff_is_required,
|
||||
generate_vehicles_assigned_and_available,
|
||||
},
|
||||
ApplicationError, TemplateResponse,
|
||||
@ -20,7 +20,7 @@ use crate::{
|
||||
pub struct PlanEventTemplate {
|
||||
user: User,
|
||||
event: Event,
|
||||
availabillities: Vec<(Availability, AvailabillityAssignmentState)>,
|
||||
availabilities: Vec<(Availability, AvailabilityAssignmentState)>,
|
||||
further_posten_required: bool,
|
||||
further_fuehrungsassistent_required: bool,
|
||||
further_wachhabender_required: bool,
|
||||
@ -46,7 +46,7 @@ pub async fn get(
|
||||
return Err(ApplicationError::Unauthorized);
|
||||
}
|
||||
|
||||
let availabillities = generate_availabillity_assignment_list(pool.get_ref(), &event).await?;
|
||||
let availabilities = generate_availability_assignment_list(pool.get_ref(), &event).await?;
|
||||
|
||||
let (
|
||||
further_posten_required,
|
||||
@ -60,7 +60,7 @@ pub async fn get(
|
||||
let template = PlanEventTemplate {
|
||||
user: user.into_inner(),
|
||||
event,
|
||||
availabillities,
|
||||
availabilities,
|
||||
further_posten_required,
|
||||
further_fuehrungsassistent_required,
|
||||
further_wachhabender_required,
|
||||
|
@ -64,11 +64,11 @@ pub async fn post(
|
||||
let mut common_time = (start.and_time(START_OF_DAY), end.and_time(END_OF_DAY));
|
||||
|
||||
for assignment in &assignments_for_event {
|
||||
let availability = Availability::read_by_id(pool.get_ref(), assignment.availabillity_id)
|
||||
let availability = Availability::read_by_id(pool.get_ref(), assignment.availability_id)
|
||||
.await?
|
||||
.unwrap();
|
||||
let all_assignments =
|
||||
Assignment::read_all_by_availabillity(pool.get_ref(), assignment.availabillity_id)
|
||||
Assignment::read_all_by_availability(pool.get_ref(), assignment.availability_id)
|
||||
.await?;
|
||||
|
||||
if all_assignments.len() == 1 {
|
||||
@ -141,7 +141,7 @@ pub async fn post(
|
||||
function: a.function,
|
||||
time: changeset.time,
|
||||
};
|
||||
Assignment::update(pool.get_ref(), a.event_id, a.availabillity_id, c).await?;
|
||||
Assignment::update(pool.get_ref(), a.event_id, a.availability_id, c).await?;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -25,11 +25,11 @@ struct Export {
|
||||
year: u16,
|
||||
month: u8,
|
||||
area: String,
|
||||
availabillities: Vec<ExportAvailabillity>,
|
||||
availabilities: Vec<ExportAvailability>,
|
||||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
struct ExportAvailabillity {
|
||||
struct ExportAvailability {
|
||||
name: String,
|
||||
area: String,
|
||||
function: UserFunction,
|
||||
@ -63,12 +63,12 @@ pub async fn get(
|
||||
user.area_id
|
||||
};
|
||||
|
||||
let availabillities =
|
||||
let availabilities =
|
||||
Availability::read_for_export(pool.get_ref(), (start_date, end_date), area_id).await?;
|
||||
|
||||
let export_availabillities = availabillities
|
||||
let export_availabilities = availabilities
|
||||
.into_iter()
|
||||
.map(|a| ExportAvailabillity {
|
||||
.map(|a| ExportAvailability {
|
||||
name: a.user.as_ref().unwrap().name.clone(),
|
||||
area: a.user.as_ref().unwrap().area.as_ref().unwrap().name.clone(),
|
||||
function: a.user.unwrap().function,
|
||||
@ -88,7 +88,7 @@ pub async fn get(
|
||||
year: query.year,
|
||||
month: query.month,
|
||||
area,
|
||||
availabillities: export_availabillities,
|
||||
availabilities: export_availabilities,
|
||||
};
|
||||
|
||||
let (out, content_type) = match query.format.as_str() {
|
||||
|
@ -4,7 +4,7 @@ use sqlx::PgPool;
|
||||
|
||||
use crate::{
|
||||
endpoints::vehicle_assignment::PlanVehiclesPartialTemplate,
|
||||
models::{Event, Role, User, VehicleAssignement},
|
||||
models::{Event, Role, User, VehicleAssignment},
|
||||
utils::{
|
||||
event_planning_template::generate_vehicles_assigned_and_available, ApplicationError,
|
||||
TemplateResponse,
|
||||
@ -37,12 +37,12 @@ pub async fn delete(
|
||||
}
|
||||
|
||||
let Some(vehicle_assignment) =
|
||||
VehicleAssignement::read(pool.get_ref(), event.id, query.vehicle).await?
|
||||
VehicleAssignment::read(pool.get_ref(), event.id, query.vehicle).await?
|
||||
else {
|
||||
return Ok(HttpResponse::NotFound().finish());
|
||||
};
|
||||
|
||||
VehicleAssignement::delete(
|
||||
VehicleAssignment::delete(
|
||||
pool.get_ref(),
|
||||
vehicle_assignment.event_id,
|
||||
vehicle_assignment.vehicle_id,
|
||||
|
@ -4,7 +4,7 @@ use sqlx::PgPool;
|
||||
|
||||
use crate::{
|
||||
endpoints::vehicle_assignment::PlanVehiclesPartialTemplate,
|
||||
models::{Event, Role, User, Vehicle, VehicleAssignement},
|
||||
models::{Event, Role, User, Vehicle, VehicleAssignment},
|
||||
utils::{
|
||||
event_planning_template::generate_vehicles_assigned_and_available, ApplicationError,
|
||||
TemplateResponse,
|
||||
@ -45,16 +45,16 @@ pub async fn post(
|
||||
return Ok(HttpResponse::NotFound().finish());
|
||||
};
|
||||
|
||||
let existing_assignments_for_vehicle = VehicleAssignement::read_all_by_vehicle_and_date(
|
||||
let existing_assignments_for_vehicle = VehicleAssignment::read_all_by_vehicle_and_date(
|
||||
pool.get_ref(),
|
||||
vehicle.id,
|
||||
event.start.date(),
|
||||
)
|
||||
.await?;
|
||||
let has_start_time_during_event =
|
||||
|a: &VehicleAssignement| a.start >= event.start && a.start <= event.end;
|
||||
|a: &VehicleAssignment| a.start >= event.start && a.start <= event.end;
|
||||
let has_end_time_during_event =
|
||||
|a: &VehicleAssignement| a.end >= event.start && a.end <= event.end;
|
||||
|a: &VehicleAssignment| a.end >= event.start && a.end <= event.end;
|
||||
|
||||
let availability_already_assigned = existing_assignments_for_vehicle
|
||||
.iter()
|
||||
@ -65,7 +65,7 @@ pub async fn post(
|
||||
.body("Vehicle already assigned to a timely conflicting event."));
|
||||
}
|
||||
|
||||
VehicleAssignement::create(pool.get_ref(), event.id, vehicle.id, event.start, event.end)
|
||||
VehicleAssignment::create(pool.get_ref(), event.id, vehicle.id, event.start, event.end)
|
||||
.await?;
|
||||
|
||||
let (vehicles_assigned, vehicles_available) =
|
||||
|
@ -5,7 +5,7 @@ use super::{assignment_changeset::AssignmentChangeset, Function, Result};
|
||||
|
||||
pub struct Assignment {
|
||||
pub event_id: i32,
|
||||
pub availabillity_id: i32,
|
||||
pub availability_id: i32,
|
||||
pub function: Function,
|
||||
pub start: NaiveDateTime,
|
||||
pub end: NaiveDateTime,
|
||||
@ -15,16 +15,16 @@ impl Assignment {
|
||||
pub async fn create(
|
||||
pool: &PgPool,
|
||||
event_id: i32,
|
||||
availabillity_id: i32,
|
||||
availability_id: i32,
|
||||
changeset: AssignmentChangeset,
|
||||
) -> Result<()> {
|
||||
query!(
|
||||
r##"
|
||||
INSERT INTO assignment (eventId, availabillityId, function, startTimestamp, endTimestamp)
|
||||
INSERT INTO assignment (eventId, availabilityId, function, startTimestamp, endTimestamp)
|
||||
VALUES ($1, $2, $3, $4, $5);
|
||||
"##,
|
||||
event_id,
|
||||
availabillity_id,
|
||||
availability_id,
|
||||
changeset.function as Function,
|
||||
changeset.time.0.and_utc(),
|
||||
changeset.time.1.and_utc()
|
||||
@ -35,22 +35,22 @@ impl Assignment {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn read_all_by_availabillity(
|
||||
pub async fn read_all_by_availability(
|
||||
pool: &PgPool,
|
||||
availabillity_id: i32,
|
||||
availability_id: i32,
|
||||
) -> Result<Vec<Assignment>> {
|
||||
let records = query!(
|
||||
r##"
|
||||
SELECT
|
||||
assignment.eventId,
|
||||
assignment.availabillityId,
|
||||
assignment.availabilityId,
|
||||
assignment.function AS "function: Function",
|
||||
assignment.startTimestamp,
|
||||
assignment.endTimestamp
|
||||
FROM assignment
|
||||
WHERE assignment.AvailabillityId = $1;
|
||||
WHERE assignment.AvailabilityId = $1;
|
||||
"##,
|
||||
availabillity_id
|
||||
availability_id
|
||||
)
|
||||
.fetch_all(pool)
|
||||
.await?;
|
||||
@ -59,7 +59,7 @@ impl Assignment {
|
||||
.iter()
|
||||
.map(|r| Assignment {
|
||||
event_id: r.eventid,
|
||||
availabillity_id: r.availabillityid,
|
||||
availability_id: r.availabilityid,
|
||||
function: r.function,
|
||||
start: r.starttimestamp.naive_utc(),
|
||||
end: r.endtimestamp.naive_utc(),
|
||||
@ -74,7 +74,7 @@ impl Assignment {
|
||||
r##"
|
||||
SELECT
|
||||
assignment.eventId,
|
||||
assignment.availabillityId,
|
||||
assignment.availabilityId,
|
||||
assignment.function AS "function: Function",
|
||||
assignment.startTimestamp,
|
||||
assignment.endTimestamp
|
||||
@ -90,7 +90,7 @@ impl Assignment {
|
||||
.iter()
|
||||
.map(|r| Assignment {
|
||||
event_id: r.eventid,
|
||||
availabillity_id: r.availabillityid,
|
||||
availability_id: r.availabilityid,
|
||||
function: r.function,
|
||||
start: r.starttimestamp.naive_utc(),
|
||||
end: r.endtimestamp.naive_utc(),
|
||||
@ -103,30 +103,30 @@ impl Assignment {
|
||||
pub async fn read(
|
||||
pool: &PgPool,
|
||||
event_id: i32,
|
||||
availabillity_id: i32,
|
||||
availability_id: i32,
|
||||
) -> Result<Option<Assignment>> {
|
||||
let record = query!(
|
||||
r##"
|
||||
SELECT
|
||||
assignment.eventId,
|
||||
assignment.availabillityId,
|
||||
assignment.availabilityId,
|
||||
assignment.function AS "function: Function",
|
||||
assignment.startTimestamp,
|
||||
assignment.endTimestamp
|
||||
FROM assignment
|
||||
WHERE
|
||||
assignment.eventId = $1 AND
|
||||
assignment.availabillityId = $2;
|
||||
assignment.availabilityId = $2;
|
||||
"##,
|
||||
event_id,
|
||||
availabillity_id
|
||||
availability_id
|
||||
)
|
||||
.fetch_optional(pool)
|
||||
.await?;
|
||||
|
||||
let assignemnet = record.map(|r| Assignment {
|
||||
event_id: r.eventid,
|
||||
availabillity_id: r.availabillityid,
|
||||
availability_id: r.availabilityid,
|
||||
function: r.function,
|
||||
start: r.starttimestamp.naive_utc(),
|
||||
end: r.endtimestamp.naive_utc(),
|
||||
@ -138,18 +138,18 @@ impl Assignment {
|
||||
pub async fn update(
|
||||
pool: &PgPool,
|
||||
event_id: i32,
|
||||
availabillity_id: i32,
|
||||
availability_id: i32,
|
||||
changeset: AssignmentChangeset,
|
||||
) -> Result<()> {
|
||||
query!("UPDATE assignment SET function = $1, startTimestamp = $2, endTimestamp = $3 WHERE eventId = $4 AND availabillityId = $5;", changeset.function as Function, changeset.time.0.and_utc(), changeset.time.1.and_utc(), event_id, availabillity_id).execute(pool).await?;
|
||||
query!("UPDATE assignment SET function = $1, startTimestamp = $2, endTimestamp = $3 WHERE eventId = $4 AND availabilityId = $5;", changeset.function as Function, changeset.time.0.and_utc(), changeset.time.1.and_utc(), event_id, availability_id).execute(pool).await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn delete(pool: &PgPool, event_id: i32, availabillity_id: i32) -> Result<()> {
|
||||
query!("DELETE FROM assignment WHERE assignment.eventId = $1 AND assignment.availabillityId = $2;",
|
||||
pub async fn delete(pool: &PgPool, event_id: i32, availability_id: i32) -> Result<()> {
|
||||
query!("DELETE FROM assignment WHERE assignment.eventId = $1 AND assignment.availabilityId = $2;",
|
||||
event_id,
|
||||
availabillity_id
|
||||
availability_id
|
||||
)
|
||||
.execute(pool)
|
||||
.await?;
|
@ -8,7 +8,7 @@ use super::{
|
||||
#[derive(Validate)]
|
||||
#[garde(allow_unvalidated)]
|
||||
#[garde(context(AssignmentContext as ctx))]
|
||||
/// check before: event and availabillity and must exist and user of availabillity is in event location
|
||||
/// check before: event and availability and must exist and user of availability is in event location
|
||||
pub struct AssignmentChangeset {
|
||||
#[garde(
|
||||
custom(user_of_availability_has_function),
|
||||
@ -18,24 +18,24 @@ pub struct AssignmentChangeset {
|
||||
#[garde(
|
||||
custom(available_time_fits),
|
||||
custom(start_date_time_lies_before_end_date_time),
|
||||
custom(availabillity_not_already_assigned)
|
||||
custom(availability_not_already_assigned)
|
||||
)]
|
||||
pub time: (NaiveDateTime, NaiveDateTime),
|
||||
}
|
||||
|
||||
pub struct AssignmentContext {
|
||||
pub event: Event,
|
||||
pub availabillity: Availability,
|
||||
pub availability: Availability,
|
||||
pub user_function: UserFunction,
|
||||
pub assignments_for_event: Vec<Assignment>,
|
||||
pub assignments_for_availabillity: Vec<Assignment>,
|
||||
pub assignments_for_availability: Vec<Assignment>,
|
||||
}
|
||||
|
||||
fn available_time_fits(
|
||||
value: &(NaiveDateTime, NaiveDateTime),
|
||||
context: &AssignmentContext,
|
||||
) -> garde::Result {
|
||||
if value.0 < context.availabillity.start || value.1 > context.availabillity.end {
|
||||
if value.0 < context.availability.start || value.1 > context.availability.end {
|
||||
return Err(garde::Error::new(
|
||||
"time not made available can't be assigned",
|
||||
));
|
||||
@ -65,7 +65,7 @@ fn event_has_free_slot_for_function(
|
||||
.assignments_for_event
|
||||
.iter()
|
||||
.filter(|a| {
|
||||
a.availabillity_id != context.availabillity.id && a.event_id != context.event.id
|
||||
a.availability_id != context.availability.id && a.event_id != context.event.id
|
||||
})
|
||||
.collect();
|
||||
|
||||
@ -86,15 +86,15 @@ fn event_has_free_slot_for_function(
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn availabillity_not_already_assigned(
|
||||
fn availability_not_already_assigned(
|
||||
value: &(NaiveDateTime, NaiveDateTime),
|
||||
context: &AssignmentContext,
|
||||
) -> garde::Result {
|
||||
let list: Vec<&Assignment> = context
|
||||
.assignments_for_availabillity
|
||||
.assignments_for_availability
|
||||
.iter()
|
||||
.filter(|a| {
|
||||
a.availabillity_id != context.availabillity.id && a.event_id != context.event.id
|
||||
a.availability_id != context.availability.id && a.event_id != context.event.id
|
||||
})
|
||||
.collect();
|
||||
|
||||
@ -107,7 +107,7 @@ fn availabillity_not_already_assigned(
|
||||
.any(|a| has_start_time_during_assignment(a) || has_end_time_during_assignment(a))
|
||||
{
|
||||
return Err(garde::Error::new(
|
||||
"availabillity is already assigned for that time",
|
||||
"availability is already assigned for that time",
|
||||
));
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,6 @@ pub struct Availability {
|
||||
}
|
||||
|
||||
impl Availability {
|
||||
// TODO: fix db name
|
||||
pub async fn create(
|
||||
pool: &PgPool,
|
||||
user_id: i32,
|
||||
@ -22,7 +21,7 @@ impl Availability {
|
||||
) -> Result<()> {
|
||||
query!(
|
||||
r#"
|
||||
INSERT INTO availabillity (userId, startTimestamp, endTimestamp, comment)
|
||||
INSERT INTO availability (userId, startTimestamp, endTimestamp, comment)
|
||||
VALUES ($1, $2, $3, $4);
|
||||
"#,
|
||||
user_id,
|
||||
@ -44,11 +43,11 @@ impl Availability {
|
||||
let records = query!(
|
||||
r##"
|
||||
SELECT
|
||||
availabillity.id,
|
||||
availabillity.userId,
|
||||
availabillity.startTimestamp,
|
||||
availabillity.endTimestamp,
|
||||
availabillity.comment,
|
||||
availability.id,
|
||||
availability.userId,
|
||||
availability.startTimestamp,
|
||||
availability.endTimestamp,
|
||||
availability.comment,
|
||||
user_.name,
|
||||
user_.email,
|
||||
user_.password,
|
||||
@ -59,9 +58,9 @@ impl Availability {
|
||||
user_.locked,
|
||||
user_.lastLogin,
|
||||
user_.receiveNotifications
|
||||
FROM availabillity
|
||||
JOIN user_ ON availabillity.userId = user_.id
|
||||
WHERE availabillity.startTimestamp::date = $1
|
||||
FROM availability
|
||||
JOIN user_ ON availability.userId = user_.id
|
||||
WHERE availability.startTimestamp::date = $1
|
||||
AND user_.areaId = $2;
|
||||
"##,
|
||||
date,
|
||||
@ -70,7 +69,7 @@ impl Availability {
|
||||
.fetch_all(pool)
|
||||
.await?;
|
||||
|
||||
let availabillities = records
|
||||
let availabilities = records
|
||||
.iter()
|
||||
.map(|r| Availability {
|
||||
id: r.id,
|
||||
@ -95,7 +94,7 @@ impl Availability {
|
||||
})
|
||||
.collect();
|
||||
|
||||
Ok(availabillities)
|
||||
Ok(availabilities)
|
||||
}
|
||||
|
||||
pub async fn read_by_date_time_area_including_user(
|
||||
@ -107,11 +106,11 @@ impl Availability {
|
||||
let records = query!(
|
||||
r##"
|
||||
SELECT
|
||||
availabillity.id,
|
||||
availabillity.userId,
|
||||
availabillity.startTimestamp,
|
||||
availabillity.endTimestamp,
|
||||
availabillity.comment,
|
||||
availability.id,
|
||||
availability.userId,
|
||||
availability.startTimestamp,
|
||||
availability.endTimestamp,
|
||||
availability.comment,
|
||||
user_.name,
|
||||
user_.email,
|
||||
user_.password,
|
||||
@ -122,11 +121,11 @@ impl Availability {
|
||||
user_.locked,
|
||||
user_.lastLogin,
|
||||
user_.receiveNotifications
|
||||
FROM availabillity
|
||||
JOIN user_ ON availabillity.userId = user_.id
|
||||
WHERE availabillity.starttimestamp::date = $1
|
||||
FROM availability
|
||||
JOIN user_ ON availability.userId = user_.id
|
||||
WHERE availability.starttimestamp::date = $1
|
||||
AND user_.areaId = $2
|
||||
AND availabillity.startTimestamp <= $3 AND availabillity.endTimestamp >= $4;
|
||||
AND availability.startTimestamp <= $3 AND availability.endTimestamp >= $4;
|
||||
"##,
|
||||
date,
|
||||
area_id,
|
||||
@ -136,7 +135,7 @@ impl Availability {
|
||||
.fetch_all(pool)
|
||||
.await?;
|
||||
|
||||
let availabillities = records
|
||||
let availabilities = records
|
||||
.iter()
|
||||
.map(|r| Availability {
|
||||
id: r.id,
|
||||
@ -161,18 +160,18 @@ impl Availability {
|
||||
})
|
||||
.collect();
|
||||
|
||||
Ok(availabillities)
|
||||
Ok(availabilities)
|
||||
}
|
||||
|
||||
pub async fn read_by_id_including_user(pool: &PgPool, id: i32) -> Result<Option<Availability>> {
|
||||
let record = query!(
|
||||
r##"
|
||||
SELECT
|
||||
availabillity.id,
|
||||
availabillity.userId,
|
||||
availabillity.startTimestamp,
|
||||
availabillity.endTimestamp,
|
||||
availabillity.comment,
|
||||
availability.id,
|
||||
availability.userId,
|
||||
availability.startTimestamp,
|
||||
availability.endTimestamp,
|
||||
availability.comment,
|
||||
user_.name,
|
||||
user_.email,
|
||||
user_.password,
|
||||
@ -183,17 +182,17 @@ impl Availability {
|
||||
user_.locked,
|
||||
user_.lastLogin,
|
||||
user_.receiveNotifications
|
||||
FROM availabillity
|
||||
LEFT JOIN assignment ON availabillity.Id = assignment.availabillityId
|
||||
JOIN user_ ON availabillity.userId = user_.id
|
||||
WHERE availabillity.id = $1;
|
||||
FROM availability
|
||||
LEFT JOIN assignment ON availability.Id = assignment.availabilityId
|
||||
JOIN user_ ON availability.userId = user_.id
|
||||
WHERE availability.id = $1;
|
||||
"##,
|
||||
id
|
||||
)
|
||||
.fetch_optional(pool)
|
||||
.await?;
|
||||
|
||||
let availabillity = record.map(|r| Availability {
|
||||
let availability = record.map(|r| Availability {
|
||||
id: r.id,
|
||||
user_id: r.userid,
|
||||
user: Some(User {
|
||||
@ -215,15 +214,15 @@ impl Availability {
|
||||
comment: r.comment.clone(),
|
||||
});
|
||||
|
||||
Ok(availabillity)
|
||||
Ok(availability)
|
||||
}
|
||||
|
||||
pub async fn read_by_id(pool: &PgPool, id: i32) -> Result<Option<Availability>> {
|
||||
let record = query!("SELECT * FROM availabillity WHERE id = $1", id)
|
||||
let record = query!("SELECT * FROM availability WHERE id = $1", id)
|
||||
.fetch_optional(pool)
|
||||
.await?;
|
||||
|
||||
let availabillity = record.map(|record| Availability {
|
||||
let availability = record.map(|record| Availability {
|
||||
id: record.id,
|
||||
user_id: record.userid,
|
||||
user: None,
|
||||
@ -232,7 +231,7 @@ impl Availability {
|
||||
comment: record.comment.clone(),
|
||||
});
|
||||
|
||||
Ok(availabillity)
|
||||
Ok(availability)
|
||||
}
|
||||
|
||||
pub async fn read_for_export(
|
||||
@ -243,11 +242,11 @@ impl Availability {
|
||||
let records = query!(
|
||||
r##"
|
||||
SELECT
|
||||
availabillity.id,
|
||||
availabillity.userId,
|
||||
availabillity.startTimestamp,
|
||||
availabillity.endTimestamp,
|
||||
availabillity.comment,
|
||||
availability.id,
|
||||
availability.userId,
|
||||
availability.startTimestamp,
|
||||
availability.endTimestamp,
|
||||
availability.comment,
|
||||
user_.name,
|
||||
user_.email,
|
||||
user_.password,
|
||||
@ -259,12 +258,12 @@ impl Availability {
|
||||
user_.lastLogin,
|
||||
user_.receiveNotifications,
|
||||
area.name AS areaName
|
||||
FROM availabillity
|
||||
JOIN user_ ON availabillity.userId = user_.id
|
||||
FROM availability
|
||||
JOIN user_ ON availability.userId = user_.id
|
||||
JOIN area ON user_.areaId = area.id
|
||||
WHERE user_.areaId = $1 AND
|
||||
availabillity.starttimestamp::date >= $2 AND
|
||||
availabillity.starttimestamp::date <= $3;
|
||||
availability.starttimestamp::date >= $2 AND
|
||||
availability.starttimestamp::date <= $3;
|
||||
"##,
|
||||
area_id,
|
||||
date_range.0,
|
||||
@ -273,7 +272,7 @@ impl Availability {
|
||||
.fetch_all(pool)
|
||||
.await?;
|
||||
|
||||
let availabillities = records
|
||||
let availabilities = records
|
||||
.iter()
|
||||
.map(|r| Availability {
|
||||
id: r.id,
|
||||
@ -301,7 +300,7 @@ impl Availability {
|
||||
})
|
||||
.collect();
|
||||
|
||||
Ok(availabillities)
|
||||
Ok(availabilities)
|
||||
}
|
||||
|
||||
pub async fn read_by_user_and_date(
|
||||
@ -312,14 +311,14 @@ impl Availability {
|
||||
let records = query!(
|
||||
r##"
|
||||
SELECT
|
||||
availabillity.id,
|
||||
availabillity.userId,
|
||||
availabillity.startTimestamp,
|
||||
availabillity.endTimestamp,
|
||||
availabillity.comment
|
||||
FROM availabillity
|
||||
WHERE availabillity.userId = $1
|
||||
AND availabillity.starttimestamp::date = $2;
|
||||
availability.id,
|
||||
availability.userId,
|
||||
availability.startTimestamp,
|
||||
availability.endTimestamp,
|
||||
availability.comment
|
||||
FROM availability
|
||||
WHERE availability.userId = $1
|
||||
AND availability.starttimestamp::date = $2;
|
||||
"##,
|
||||
user_id,
|
||||
date
|
||||
@ -327,7 +326,7 @@ impl Availability {
|
||||
.fetch_all(pool)
|
||||
.await?;
|
||||
|
||||
let availabillities = records
|
||||
let availabilities = records
|
||||
.iter()
|
||||
.map(|r| Availability {
|
||||
id: r.id,
|
||||
@ -339,12 +338,12 @@ impl Availability {
|
||||
})
|
||||
.collect();
|
||||
|
||||
Ok(availabillities)
|
||||
Ok(availabilities)
|
||||
}
|
||||
|
||||
pub async fn update(pool: &PgPool, id: i32, changeset: AvailabilityChangeset) -> Result<()> {
|
||||
query!(
|
||||
"UPDATE availabillity SET startTimestamp = $1, endTimestamp = $2, comment = $3 WHERE id = $4",
|
||||
"UPDATE availability SET startTimestamp = $1, endTimestamp = $2, comment = $3 WHERE id = $4",
|
||||
changeset.time.0.and_utc(),
|
||||
changeset.time.1.and_utc(),
|
||||
changeset.comment,
|
||||
@ -357,7 +356,7 @@ impl Availability {
|
||||
}
|
||||
|
||||
pub async fn delete(pool: &PgPool, id: i32) -> Result<()> {
|
||||
query!("DELETE FROM availabillity WHERE id = $1", id)
|
||||
query!("DELETE FROM availability WHERE id = $1", id)
|
||||
.execute(pool)
|
||||
.await?;
|
||||
Ok(())
|
14
web/src/models/availability_assignment_state.rs
Normal file
14
web/src/models/availability_assignment_state.rs
Normal file
@ -0,0 +1,14 @@
|
||||
#[derive(PartialEq, Eq, Debug)]
|
||||
pub enum AvailabilityAssignmentState {
|
||||
// availability is not assigned at all or at least not timely conflicting
|
||||
Unassigned,
|
||||
// availability is assigned for another event that is timely conflicting
|
||||
Conflicting,
|
||||
// availability is assigned to this event as Posten
|
||||
AssignedPosten(i32),
|
||||
// availability is assigned to this event as Führungsassistent
|
||||
AssignedFührungsassistent(i32),
|
||||
// availability is assigned to this event as Wachhabender
|
||||
AssignedWachhabender(i32),
|
||||
}
|
||||
|
@ -1,14 +0,0 @@
|
||||
#[derive(PartialEq, Eq, Debug)]
|
||||
pub enum AvailabillityAssignmentState {
|
||||
// availabillity is not assigned at all or at least not timely conflicting
|
||||
Unassigned,
|
||||
// availabillity is assigned for another event that is timely conflicting
|
||||
Conflicting,
|
||||
// availabillity is assigned to this event as Posten
|
||||
AssignedPosten(i32),
|
||||
// availabillity is assigned to this event as Führungsassistent
|
||||
AssignedFührungsassistent(i32),
|
||||
// availabillity is assigned to this event as Wachhabender
|
||||
AssignedWachhabender(i32),
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
mod area;
|
||||
mod assignement;
|
||||
mod assignment;
|
||||
mod assignment_changeset;
|
||||
mod availability;
|
||||
mod availability_assignment_state;
|
||||
mod availability_changeset;
|
||||
mod availabillity;
|
||||
mod availabillity_assignment_state;
|
||||
mod event;
|
||||
mod event_changeset;
|
||||
mod function;
|
||||
@ -15,17 +15,16 @@ mod user;
|
||||
mod user_changeset;
|
||||
mod user_funtion;
|
||||
mod vehicle;
|
||||
mod vehicle_assignement;
|
||||
mod vehicle_assignment;
|
||||
|
||||
pub use area::Area;
|
||||
pub use assignement::Assignment;
|
||||
pub use assignment::Assignment;
|
||||
pub use assignment_changeset::{AssignmentChangeset, AssignmentContext};
|
||||
pub use availability::Availability;
|
||||
pub use availability_assignment_state::AvailabilityAssignmentState;
|
||||
pub use availability_changeset::{
|
||||
find_free_date_time_slots, AvailabilityChangeset, AvailabilityContext,
|
||||
};
|
||||
pub use availabillity::Availability;
|
||||
pub use availabillity_assignment_state::AvailabillityAssignmentState;
|
||||
use chrono::NaiveDateTime;
|
||||
pub use event::Event;
|
||||
pub use event_changeset::{EventChangeset, EventContext};
|
||||
pub use function::Function;
|
||||
@ -37,7 +36,9 @@ pub use user::User;
|
||||
pub use user_changeset::UserChangeset;
|
||||
pub use user_funtion::UserFunction;
|
||||
pub use vehicle::Vehicle;
|
||||
pub use vehicle_assignement::VehicleAssignement;
|
||||
pub use vehicle_assignment::VehicleAssignment;
|
||||
|
||||
use chrono::NaiveDateTime;
|
||||
|
||||
type Result<T> = std::result::Result<T, sqlx::Error>;
|
||||
|
||||
|
@ -3,14 +3,14 @@ use sqlx::{query, PgPool};
|
||||
|
||||
use super::Result;
|
||||
|
||||
pub struct VehicleAssignement {
|
||||
pub struct VehicleAssignment {
|
||||
pub event_id: i32,
|
||||
pub vehicle_id: i32,
|
||||
pub start: NaiveDateTime,
|
||||
pub end: NaiveDateTime,
|
||||
}
|
||||
|
||||
impl VehicleAssignement {
|
||||
impl VehicleAssignment {
|
||||
pub async fn create(
|
||||
pool: &PgPool,
|
||||
event_id: i32,
|
||||
@ -19,7 +19,7 @@ impl VehicleAssignement {
|
||||
end: NaiveDateTime,
|
||||
) -> Result<()> {
|
||||
query!(
|
||||
"INSERT INTO vehicleassignement (eventId, vehicleId, startTimestamp, endTimestamp) VALUES ($1, $2, $3, $4);",
|
||||
"INSERT INTO vehicleassignment (eventId, vehicleId, startTimestamp, endTimestamp) VALUES ($1, $2, $3, $4);",
|
||||
event_id,
|
||||
vehicle_id,
|
||||
start.and_utc(),
|
||||
@ -35,11 +35,11 @@ impl VehicleAssignement {
|
||||
pool: &PgPool,
|
||||
event_id: i32,
|
||||
vehicle_id: i32,
|
||||
) -> Result<Option<VehicleAssignement>> {
|
||||
let record = query!("SELECT * FROM vehicleAssignement WHERE vehicleAssignement.eventId = $1 AND vehicleAssignement.vehicleId = $2;", event_id, vehicle_id).fetch_optional(pool)
|
||||
) -> Result<Option<VehicleAssignment>> {
|
||||
let record = query!("SELECT * FROM vehicleassignment WHERE vehicleassignment.eventId = $1 AND vehicleassignment.vehicleId = $2;", event_id, vehicle_id).fetch_optional(pool)
|
||||
.await?;
|
||||
|
||||
let vehicle_assignment = record.map(|r| VehicleAssignement {
|
||||
let vehicle_assignment = record.map(|r| VehicleAssignment {
|
||||
event_id: r.eventid,
|
||||
vehicle_id: r.vehicleid,
|
||||
start: r.starttimestamp.naive_utc(),
|
||||
@ -52,9 +52,9 @@ impl VehicleAssignement {
|
||||
pub async fn read_all_by_event(
|
||||
pool: &PgPool,
|
||||
event_id: i32,
|
||||
) -> Result<Vec<VehicleAssignement>> {
|
||||
) -> Result<Vec<VehicleAssignment>> {
|
||||
let records = query!(
|
||||
"SELECT * FROM vehicleAssignement WHERE vehicleAssignement.eventId = $1;",
|
||||
"SELECT * FROM vehicleassignment WHERE vehicleassignment.eventId = $1;",
|
||||
event_id
|
||||
)
|
||||
.fetch_all(pool)
|
||||
@ -62,7 +62,7 @@ impl VehicleAssignement {
|
||||
|
||||
let vehicle_assignments = records
|
||||
.iter()
|
||||
.map(|r| VehicleAssignement {
|
||||
.map(|r| VehicleAssignment {
|
||||
event_id: r.eventid,
|
||||
vehicle_id: r.vehicleid,
|
||||
start: r.starttimestamp.naive_utc(),
|
||||
@ -77,17 +77,17 @@ impl VehicleAssignement {
|
||||
pool: &PgPool,
|
||||
vehicle_id: i32,
|
||||
date: NaiveDate,
|
||||
) -> Result<Vec<VehicleAssignement>> {
|
||||
) -> Result<Vec<VehicleAssignment>> {
|
||||
let records = query!(
|
||||
r#"
|
||||
SELECT
|
||||
vehicleAssignement.eventId,
|
||||
vehicleAssignement.vehicleId,
|
||||
vehicleAssignement.starttimestamp,
|
||||
vehicleAssignement.endtimestamp
|
||||
FROM vehicleAssignement
|
||||
JOIN event ON vehicleAssignement.eventId = event.id
|
||||
WHERE vehicleAssignement.vehicleid = $1
|
||||
vehicleassignment.eventId,
|
||||
vehicleassignment.vehicleId,
|
||||
vehicleassignment.starttimestamp,
|
||||
vehicleassignment.endtimestamp
|
||||
FROM vehicleassignment
|
||||
JOIN event ON vehicleassignment.eventId = event.id
|
||||
WHERE vehicleassignment.vehicleid = $1
|
||||
AND event.starttimestamp::date = $2;
|
||||
"#,
|
||||
vehicle_id,
|
||||
@ -98,7 +98,7 @@ impl VehicleAssignement {
|
||||
|
||||
let vehicle_assignments = records
|
||||
.iter()
|
||||
.map(|r| VehicleAssignement {
|
||||
.map(|r| VehicleAssignment {
|
||||
event_id: r.eventid,
|
||||
vehicle_id: r.vehicleid,
|
||||
start: r.starttimestamp.naive_utc(),
|
||||
@ -111,7 +111,7 @@ impl VehicleAssignement {
|
||||
|
||||
pub async fn delete(pool: &PgPool, event_id: i32, vehicle_id: i32) -> Result<()> {
|
||||
query!(
|
||||
"DELETE FROM vehicleassignement WHERE eventId = $1 AND vehicleId = $2;",
|
||||
"DELETE FROM vehicleassignment WHERE eventId = $1 AND vehicleId = $2;",
|
||||
event_id,
|
||||
vehicle_id
|
||||
)
|
@ -1,17 +1,17 @@
|
||||
use sqlx::PgPool;
|
||||
|
||||
use crate::models::{
|
||||
Assignment, Availability, AvailabillityAssignmentState, Event, Function, Vehicle,
|
||||
VehicleAssignement,
|
||||
Assignment, Availability, AvailabilityAssignmentState, Event, Function, Vehicle,
|
||||
VehicleAssignment,
|
||||
};
|
||||
|
||||
use super::ApplicationError;
|
||||
|
||||
pub async fn generate_availabillity_assignment_list(
|
||||
pub async fn generate_availability_assignment_list(
|
||||
pool: &PgPool,
|
||||
event: &Event,
|
||||
) -> Result<Vec<(Availability, AvailabillityAssignmentState)>, ApplicationError> {
|
||||
let availabillities_in_db = Availability::read_by_date_time_area_including_user(
|
||||
) -> Result<Vec<(Availability, AvailabilityAssignmentState)>, ApplicationError> {
|
||||
let availabilities_in_db = Availability::read_by_date_time_area_including_user(
|
||||
pool,
|
||||
event.start.date(),
|
||||
(event.start, event.end),
|
||||
@ -19,9 +19,9 @@ pub async fn generate_availabillity_assignment_list(
|
||||
)
|
||||
.await?;
|
||||
|
||||
let mut availabillities = Vec::new();
|
||||
for availabillity in availabillities_in_db {
|
||||
let assignments = Assignment::read_all_by_availabillity(pool, availabillity.id).await?;
|
||||
let mut availabilities = Vec::new();
|
||||
for availability in availabilities_in_db {
|
||||
let assignments = Assignment::read_all_by_availability(pool, availability.id).await?;
|
||||
|
||||
if let Some(assignment) = assignments
|
||||
.iter()
|
||||
@ -29,19 +29,19 @@ pub async fn generate_availabillity_assignment_list(
|
||||
{
|
||||
let state = match assignment.function {
|
||||
Function::Posten => {
|
||||
AvailabillityAssignmentState::AssignedPosten(assignment.availabillity_id)
|
||||
AvailabilityAssignmentState::AssignedPosten(assignment.availability_id)
|
||||
}
|
||||
Function::Fuehrungsassistent => {
|
||||
AvailabillityAssignmentState::AssignedFührungsassistent(
|
||||
assignment.availabillity_id,
|
||||
AvailabilityAssignmentState::AssignedFührungsassistent(
|
||||
assignment.availability_id,
|
||||
)
|
||||
}
|
||||
Function::Wachhabender => {
|
||||
AvailabillityAssignmentState::AssignedWachhabender(assignment.availabillity_id)
|
||||
AvailabilityAssignmentState::AssignedWachhabender(assignment.availability_id)
|
||||
}
|
||||
};
|
||||
|
||||
availabillities.push((availabillity, state));
|
||||
availabilities.push((availability, state));
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -53,15 +53,15 @@ pub async fn generate_availabillity_assignment_list(
|
||||
.iter()
|
||||
.any(|a| has_start_time_during_event(a) || has_end_time_during_event(a))
|
||||
{
|
||||
availabillities.push((availabillity, AvailabillityAssignmentState::Conflicting));
|
||||
availabilities.push((availability, AvailabilityAssignmentState::Conflicting));
|
||||
continue;
|
||||
}
|
||||
|
||||
availabillities.push((availabillity, AvailabillityAssignmentState::Unassigned));
|
||||
availabilities.push((availability, AvailabilityAssignmentState::Unassigned));
|
||||
}
|
||||
|
||||
//println!(" {availabillities:#?}");
|
||||
Ok(availabillities)
|
||||
//println!(" {availabilities:#?}");
|
||||
Ok(availabilities)
|
||||
}
|
||||
|
||||
pub async fn generate_status_whether_staff_is_required(
|
||||
@ -100,7 +100,7 @@ pub async fn generate_vehicles_assigned_and_available(
|
||||
) -> Result<(Vec<Vehicle>, Vec<Vehicle>), ApplicationError> {
|
||||
let all_vehicles = Vehicle::read_all(pool).await?;
|
||||
let existing_vehicle_assignments_for_event =
|
||||
VehicleAssignement::read_all_by_event(pool, event.id).await?;
|
||||
VehicleAssignment::read_all_by_event(pool, event.id).await?;
|
||||
let (vehicles_assigned, vehicles_available): (Vec<Vehicle>, Vec<Vehicle>) =
|
||||
all_vehicles.into_iter().partition(|v| {
|
||||
existing_vehicle_assignments_for_event
|
||||
|
@ -4,7 +4,7 @@
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
{% let is_edit = id.is_some() %}
|
||||
<form method="post" action="/availabillity/{% if is_edit %}edit/{{ id.unwrap() }}{% else %}new{% endif %}">
|
||||
<form method="post" action="/availability/{% if is_edit %}edit/{{ id.unwrap() }}{% else %}new{% endif %}">
|
||||
<h1 class="title">{% if is_edit %}Bearbeite{% else %}Neue{% endif %} Vefügbarkeit für den {{ date|date_d }}</h1>
|
||||
|
||||
<input type="hidden" name="startdate" value="{{ date }}">
|
||||
|
@ -19,35 +19,35 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for (availabillity, status) in availabillities %}
|
||||
{% let u = availabillity.user.as_ref().unwrap() %}
|
||||
{% for (availability, status) in availabilities %}
|
||||
{% let u = availability.user.as_ref().unwrap() %}
|
||||
<tr>
|
||||
<td>{{ u.name }}</td>
|
||||
<td>
|
||||
{{ u.function|show_tree|safe }}
|
||||
</td>
|
||||
<td>
|
||||
{{ availabillity.start.format("%R") }} bis {{ availabillity.end.format("%d.%m.%Y %R") }}
|
||||
{{ availability.start.format("%R") }} bis {{ availability.end.format("%d.%m.%Y %R") }}
|
||||
</td>
|
||||
<td>
|
||||
{{ availabillity.comment.as_deref().unwrap_or("") }}
|
||||
{{ availability.comment.as_deref().unwrap_or("") }}
|
||||
</td>
|
||||
<td>
|
||||
<div class="dropdown">
|
||||
<div class="dropdown-trigger">
|
||||
<button class="button" aria-haspopup="true" aria-controls="dropdown-menu">
|
||||
{% match status %}
|
||||
{% when AvailabillityAssignmentState::AssignedPosten(_) %}
|
||||
{% when AvailabilityAssignmentState::AssignedPosten(_) %}
|
||||
<span>als Posten geplant</span>
|
||||
<svg class="icon">
|
||||
<use href="/static/feather-sprite.svg#edit-2" />
|
||||
</svg>
|
||||
{% when AvailabillityAssignmentState::AssignedFührungsassistent(_) %}
|
||||
{% when AvailabilityAssignmentState::AssignedFührungsassistent(_) %}
|
||||
<span>als Führungsassistent geplant</span>
|
||||
<svg class="icon">
|
||||
<use href="/static/feather-sprite.svg#edit-2" />
|
||||
</svg>
|
||||
{% when AvailabillityAssignmentState::AssignedWachhabender(_) %}
|
||||
{% when AvailabilityAssignmentState::AssignedWachhabender(_) %}
|
||||
<span>als Wachhabender geplant</span>
|
||||
<svg class="icon">
|
||||
<use href="/static/feather-sprite.svg#edit-2" />
|
||||
@ -64,27 +64,27 @@
|
||||
<div class="dropdown-content" hx-target="closest table" hx-swap="outerHTML">
|
||||
{% if u.function.is_posten() %}
|
||||
<a class="dropdown-item"
|
||||
hx-post="/assignments/new?event={{ event.id }}&availabillity={{ availabillity.id }}&function=1" {% if
|
||||
!further_posten_required || status !=AvailabillityAssignmentState::Unassigned|ref %}disabled{% endif %}>
|
||||
hx-post="/assignments/new?event={{ event.id }}&availability={{ availability.id }}&function=1" {% if
|
||||
!further_posten_required || status !=AvailabilityAssignmentState::Unassigned|ref %}disabled{% endif %}>
|
||||
als Posten planen</a>
|
||||
{% endif %}
|
||||
{% if u.function.is_fuehrungsassistent() %}
|
||||
<a class="dropdown-item"
|
||||
hx-post="/assignments/new?event={{ event.id }}&availabillity={{ availabillity.id }}&function=5" {% if
|
||||
!further_fuehrungsassistent_required || status !=AvailabillityAssignmentState::Unassigned|ref
|
||||
hx-post="/assignments/new?event={{ event.id }}&availability={{ availability.id }}&function=5" {% if
|
||||
!further_fuehrungsassistent_required || status !=AvailabilityAssignmentState::Unassigned|ref
|
||||
%}disabled{% endif %}>als Führungsassistent planen</a>
|
||||
{% endif %}
|
||||
{% if u.function.is_wachhabender() %}
|
||||
<a class="dropdown-item"
|
||||
hx-post="/assignments/new?event={{ event.id }}&availabillity={{ availabillity.id }}&function=10" {% if
|
||||
!further_wachhabender_required || status !=AvailabillityAssignmentState::Unassigned|ref %}disabled{%
|
||||
hx-post="/assignments/new?event={{ event.id }}&availability={{ availability.id }}&function=10" {% if
|
||||
!further_wachhabender_required || status !=AvailabilityAssignmentState::Unassigned|ref %}disabled{%
|
||||
endif %}>als Wachhabender planen</a>
|
||||
{% endif %}
|
||||
{% if status != AvailabillityAssignmentState::Unassigned|ref && status !=
|
||||
AvailabillityAssignmentState::Conflicting|ref %}
|
||||
{% if status != AvailabilityAssignmentState::Unassigned|ref && status !=
|
||||
AvailabilityAssignmentState::Conflicting|ref %}
|
||||
<hr class="dropdown-divider" />
|
||||
<a class="dropdown-item"
|
||||
hx-delete="/assignments/delete?event={{ event.id }}&availabillity={{ availabillity.id }}"
|
||||
hx-delete="/assignments/delete?event={{ event.id }}&availability={{ availability.id }}"
|
||||
class="button is-small">entplanen</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
@ -185,8 +185,8 @@
|
||||
</div>
|
||||
{% if selected_area.is_none() || selected_area.unwrap() == user.area_id %}
|
||||
<div class="level-right">
|
||||
{% let btn_disabled = !user_can_create_availabillity %}
|
||||
<button class="button is-link is-light" hx-get="/availabillity/new?date={{ date }}" {{
|
||||
{% let btn_disabled = !user_can_create_availability %}
|
||||
<button class="button is-link is-light" hx-get="/availability/new?date={{ date }}" {{
|
||||
btn_disabled|cond_show("disabled") }} hx-target="closest body">
|
||||
<svg class="icon">
|
||||
<use href="/static/feather-sprite.svg#plus-circle" />
|
||||
@ -197,7 +197,7 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% if availabillities.len() == 0 %}
|
||||
{% if availabilities.len() == 0 %}
|
||||
<div class="box">
|
||||
<h5 class="subtitle is-5">keine Verfügbarkeiten eingetragen</h5>
|
||||
</div>
|
||||
@ -214,30 +214,30 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for availabillity in availabillities %}
|
||||
{% let u = availabillity.user.as_ref().unwrap() %}
|
||||
{% for availability in availabilities %}
|
||||
{% let u = availability.user.as_ref().unwrap() %}
|
||||
<tr>
|
||||
<td>{{ u.name }}</td>
|
||||
<td>
|
||||
{{ u.function|show_tree|safe }}
|
||||
</td>
|
||||
<td>
|
||||
{{ availabillity.start|dt_t }} Uhr bis {{ availabillity.end|dt_ff }} Uhr
|
||||
{{ availability.start|dt_t }} Uhr bis {{ availability.end|dt_ff }} Uhr
|
||||
</td>
|
||||
<td>
|
||||
{{ availabillity.comment.as_deref().unwrap_or("") }}
|
||||
{{ availability.comment.as_deref().unwrap_or("") }}
|
||||
</td>
|
||||
<td>
|
||||
{% if availabillity.user_id == user.id %}
|
||||
{% if availability.user_id == user.id %}
|
||||
<div class="buttons is-right">
|
||||
<a class="button is-primary is-light" hx-boost="true"
|
||||
href="/availabillity/edit/{{ availabillity.id }}">
|
||||
href="/availability/edit/{{ availability.id }}">
|
||||
<svg class="icon">
|
||||
<use href="/static/feather-sprite.svg#edit" />
|
||||
</svg>
|
||||
<span>Bearbeiten</span>
|
||||
</a>
|
||||
<button class="button is-danger is-light" hx-delete="/availabillity/delete/{{ availabillity.id }}"
|
||||
<button class="button is-danger is-light" hx-delete="/availability/delete/{{ availability.id }}"
|
||||
hx-target="closest tr" hx-swap="delete" hx-trigger="confirmed">
|
||||
<svg class="icon">
|
||||
<use href="/static/feather-sprite.svg#x-circle" />
|
||||
|
Loading…
x
Reference in New Issue
Block a user