From ab80df92be61c11d83b77c86e3d7f162f358e6be Mon Sep 17 00:00:00 2001 From: Keanu D?lle Date: Tue, 8 Mar 2022 20:48:10 +0100 Subject: [PATCH] FIX: fixed https://git.anghenfil.de/EinsatzOnline/EinsatzOnline/issues/4 finally --- .../em_edit_event_cast_instances.hbs | 7 +-- .../em_eventlist_cast_instances.hbs | 2 +- resources/js/em_edit_event.js | 36 +++++++-------- resources/js/em_eventlist.js | 27 +++++------- resources/js/global.js | 9 ++-- resources/js/search2.js | 17 ++++++- src/database/controller/events.rs | 6 +-- src/database/model/events.rs | 2 + src/modules/api/events/instances/update.rs | 44 ++++++++++++------- 9 files changed, 87 insertions(+), 63 deletions(-) diff --git a/resources/ajax_templates/em_edit_event_cast_instances.hbs b/resources/ajax_templates/em_edit_event_cast_instances.hbs index a92e399..5e2fd0f 100644 --- a/resources/ajax_templates/em_edit_event_cast_instances.hbs +++ b/resources/ajax_templates/em_edit_event_cast_instances.hbs @@ -19,7 +19,7 @@ {{#each positions}}
+ data-member-id="{{taken_by}}" data-position-instance-id="{{position_instance_id}}">
{{search2 type="member" classname="search_instance_position_member" value_id=taken_by @@ -33,10 +33,11 @@
{{#each vehicle_positions}}
+ data-position-id="{{position_id}}" data-position-instance-id="{{position_instance_id}}" data-identifier="{{identifier}}" data-entity-id="{{taken_by}}">
- {{> search base=this.base type="vehicle"}} + {{search2 type="vehicle" classname="search_instance_vehicle_position" value_id=taken_by + value=identifier}}
{{/each}} diff --git a/resources/ajax_templates/em_eventlist_cast_instances.hbs b/resources/ajax_templates/em_eventlist_cast_instances.hbs index c17b83d..ecfa69e 100644 --- a/resources/ajax_templates/em_eventlist_cast_instances.hbs +++ b/resources/ajax_templates/em_eventlist_cast_instances.hbs @@ -15,7 +15,7 @@ {{#each positions}}
+ data-member-id="{{taken_by}}", data-position-instance-id="{{position_instance_id}}">
{{#if taken_by}}{{member_name}}{{else}} diff --git a/resources/js/em_edit_event.js b/resources/js/em_edit_event.js index fee7d73..f4bafea 100644 --- a/resources/js/em_edit_event.js +++ b/resources/js/em_edit_event.js @@ -205,7 +205,7 @@ EventEditModule = (function () { this.positions = await load_positions_for_instance(this.instance_id); this.vehicle_positions = await load_vehicle_positions_for_instance(this.instance_id); - + console.log(data); let positions_taken = true; for(let i=0;i
  • Hinzufügen: " + value.identifier + "("+value.numberplate+")
  • "); + }); + }; + options.overlay_click_handler = function () { + let res = res_map.get($(this).data("entity-id")); + setValue(this, res.entity_id, res.identifier+" ("+res.numberplate+")"); + }; + }else { console.error("Unknown search type: " + type); return; } diff --git a/src/database/controller/events.rs b/src/database/controller/events.rs index dff5b78..07ca44a 100644 --- a/src/database/controller/events.rs +++ b/src/database/controller/events.rs @@ -554,7 +554,7 @@ pub fn get_position_instance(settings: &State, position_instance_id: u pub fn get_instance_vehicle_positions(settings: &State, instance_id2: uuid::Uuid) -> Result, diesel::result::Error> { let connection = establish_connection(settings); let position_instances: Result, diesel::result::Error> = sql_query( - "SELECT instance_id, position_id, taken_by, name, description, required_vehicle_category FROM eu_position_instances INNER JOIN eu_vehicle_positions ON position_id = entity_id WHERE instance_id = $1;", + "SELECT position_instance_id, instance_id, position_id, taken_by, name, description, required_vehicle_category FROM eu_position_instances INNER JOIN eu_vehicle_positions ON position_id = entity_id WHERE instance_id = $1;", ) .bind::(instance_id2) .get_results(&connection); @@ -581,11 +581,11 @@ pub fn add_vehicle_position(settings: &State, position: EventUnitVehic } } -pub fn change_position_instances(settings: &State, instance_id2: uuid::Uuid, position_id2: uuid::Uuid, taken_by2: Option) -> Result{ +pub fn change_position_instances(settings: &State, position_instance_id2: uuid::Uuid, taken_by2: Option) -> Result{ use crate::schema::eu_position_instances::dsl::*; let connection = establish_connection(settings); - match diesel::update(eu_position_instances).filter(instance_id.eq(instance_id2)).filter(position_id.eq(position_id2)).set(taken_by.eq(taken_by2)).execute(&connection){ + match diesel::update(eu_position_instances).filter(position_instance_id.eq(position_instance_id2)).set(taken_by.eq(taken_by2)).execute(&connection){ Ok(count) => Ok(count), Err(e) => { error!("Couldn't update position instances: {}", e); diff --git a/src/database/model/events.rs b/src/database/model/events.rs index 6ee508b..f8485da 100644 --- a/src/database/model/events.rs +++ b/src/database/model/events.rs @@ -121,6 +121,8 @@ pub struct EventUnitInstancePosition{ #[derive(Queryable, Clone, Deserialize, Serialize, QueryableByName)] pub struct EventUnitInstanceVehiclePosition{ + #[sql_type = "Uuid"] + pub(crate) position_instance_id: uuid::Uuid, #[sql_type = "Uuid"] pub(crate) instance_id: uuid::Uuid, #[sql_type = "Uuid"] diff --git a/src/modules/api/events/instances/update.rs b/src/modules/api/events/instances/update.rs index 447fdf4..84d30e4 100644 --- a/src/modules/api/events/instances/update.rs +++ b/src/modules/api/events/instances/update.rs @@ -3,7 +3,7 @@ use std::convert::TryInto; use rocket::serde::json::Json; use rocket::State; -use crate::database::controller::events::{change_position_instances, get_event}; +use crate::database::controller::events::{change_position_instances, get_event, get_position_instance}; use crate::database::controller::events::instances::instance_positions::RawPositionInstanceChangeset; use crate::database::controller::events::instances::instances::{get_instance, get_instances, RawEventUnitInstanceChangeset, update_instance}; use crate::helper::serde_patch::Patch; @@ -16,21 +16,27 @@ use crate::modules::api::member_management::controller::parser::{parse_member_co use crate::modules::api::model::api_outcome::{ApiError, ApiErrorWrapper}; use crate::modules::event_management::check_position_requirements::{check_position_requirements, RequirementParserError}; -#[put("/api/events/instances//positions//entities/", format = "json", rank = 1)] +#[put("/api/entities//position_instances/", format = "json", rank = 1)] pub fn put_entity_in_position( settings: &State, cookie: SessionCookie, - instance_id: String, - position_id: String, + position_instance: String, entity_id: String, ) -> Result, Json> { let caller = parse_member_cookie(cookie.member)?; - let position_id = parse_uuid_string(position_id)?; + let position_instance = parse_uuid_string(position_instance)?; let entity_id = parse_uuid_string(entity_id)?; - let instance_id = parse_uuid_string(instance_id)?; - let instance = match get_instance(settings, instance_id) { + let position_instance_data = match get_position_instance(settings, position_instance){ + Ok(res) => res, + Err(e) => { + error!("Couldn't retrieve position instance: {}", e); + return Err(Json(ApiError::new(404, "position instance not found!".to_string()).to_wrapper())); + } + }; + + let instance = match get_instance(settings, position_instance_data.instance_id) { Ok(instance) => instance, Err(e) => { @@ -52,7 +58,7 @@ pub fn put_entity_in_position( } if caller.entity_id == entity_id { - match check_position_requirements(settings, position_id, entity_id) { + match check_position_requirements(settings, position_instance_data.position_id, entity_id) { Ok(res) => { if !res { //if member tries to add himself to a position, but don't fulfill the position requirements AND don't have the event edit permission (overwrite), abort if !caller.has_permission(crate::permissions::modules::event_management::events::EDIT.to_string()) { @@ -80,18 +86,17 @@ pub fn put_entity_in_position( )); } - match change_position_instances(settings, instance_id, position_id, Some(entity_id)) { + match change_position_instances(settings, position_instance, Some(entity_id)) { Ok(pos) => Ok(Json(pos)), Err(e) => return Err(translate_diesel(e)) } } -#[delete("/api/events/instances//positions//entities", format = "json", rank = 1)] +#[delete("/api/position_instances//taken_by", format = "json", rank = 1)] pub fn remove_entity_from_position( settings: &State, cookie: SessionCookie, - instance_id: String, - position_id: String, + position_instance: String, ) -> Result, Json> { let caller = parse_member_cookie(cookie.member)?; if !caller.has_permission(crate::permissions::modules::event_management::events::EDIT.to_string()) { @@ -100,9 +105,17 @@ pub fn remove_entity_from_position( )); } - let instance_id = parse_uuid_string(instance_id)?; + let position_instance = parse_uuid_string(position_instance)?; - let instance = match get_instance(settings, instance_id) { + let position_instance_data = match get_position_instance(settings, position_instance){ + Ok(res) => res, + Err(e) => { + error!("Couldn't retrieve position instance: {}", e); + return Err(Json(ApiError::new(404, "position instance not found!".to_string()).to_wrapper())); + } + }; + + let instance = match get_instance(settings, position_instance_data.instance_id) { Ok(instance) => instance, Err(e) => { @@ -118,12 +131,13 @@ pub fn remove_entity_from_position( ApiError::new(404, "event for instance not found!".to_string()).to_wrapper())) } }; + if event.state >= 4 { return Err(Json( ApiError::new(400, "Dieser Einsatz wurde bereits geschlossen!".to_string()).to_wrapper())) } - match change_position_instances(settings, instance_id, parse_uuid_string(position_id)?, None) { + match change_position_instances(settings, position_instance, None) { Ok(pos) => Ok(Json(pos)), Err(e) => return Err(translate_diesel(e)) }