EinsatzOnline/src/modules/member_management/controller/member_personal_profile.rs

133 lines
4.5 KiB
Rust

use crate::database::controller::addresses::get_addresses_for_entity_only_one_allowed;
use crate::database::controller::member_communication::get_member_communication;
use crate::database::controller::member_licenses::get_member_licenses;
use crate::database::controller::member_qualifications::get_qualifcation_categories;
use crate::helper::age_calculator::calculate_age;
use crate::helper::caller_permissions::get_permissions_for_context;
use crate::modules::member_management::model::login::Login;
use crate::helper::settings::Settings;
use crate::helper::sitebuilder::model::general::{Footer, Header, Script, Stylesheet};
use crate::helper::sitebuilder::model::sidebar::Sidebar;
use crate::modules::member_management::model::member::Member;
use crate::modules::member_management::model::member_module::MemberModuleProfile;
use rocket::http::Status;
use rocket::State;
use crate::database::controller::units_members::get_members_units;
use crate::database::controller::users::get_user_by_member;
use rocket_dyn_templates::Template;
pub fn handle_view(
settings: &State<Settings>,
member: Member,
) -> Result<Template, Status> {
let header = Header {
html_language: "de".to_string(),
site_title: "Mitgliedprofil".to_string(),
stylesheets: vec![Stylesheet {
path: "/css/errms.css".to_string(),
}],
};
let footer = Footer {
scripts: vec![
Script {
path: "/js/member_management_profile.js".to_string(),
},
],
};
let sidebar = Sidebar::new(member.clone());
let age = match member.date_of_birth {
Some(date) => Some(calculate_age(date)),
None => None,
};
let address = get_addresses_for_entity_only_one_allowed(settings, member.entity_id);
let licenses = get_member_licenses(settings, member.entity_id);
let qualification_categories = get_qualifcation_categories(settings, member.entity_id);
let communication_targets = get_member_communication(settings, member.entity_id);
let caller_permissions = get_permissions_for_context(settings, &member, &member);
let units = match get_members_units(settings, member.entity_id){
Ok(units) => units,
Err(_) => return Err(Status::InternalServerError)
};
let login = Login::from(get_user_by_member(settings, member.entity_id));
return Ok(Template::render(
"module_member_management_personal_profile",
MemberModuleProfile {
header,
footer,
member,
member_age: age,
address,
licenses,
qualification_categories,
communication_targets,
readonly: true,
sidebar,
caller_permissions,
units,
login
},
));
}
pub fn handle_edit(
settings: &State<Settings>,
member: Member,
) -> Result<Template, Status> {
let header = Header {
html_language: "de".to_string(),
site_title: "Mitgliedprofil".to_string(),
stylesheets: vec![Stylesheet {
path: "/css/errms.css".to_string(),
}],
};
let footer = Footer {
scripts: vec![
Script {
path: "/js/member_management_profile.js".to_string(),
},
],
};
let sidebar = Sidebar::new(member.clone());
let age = match member.date_of_birth {
Some(date) => Some(calculate_age(date)),
None => None,
};
let address = get_addresses_for_entity_only_one_allowed(settings, member.entity_id);
let licenses = get_member_licenses(settings, member.entity_id);
let qualification_categories = get_qualifcation_categories(settings, member.entity_id);
let communication_targets = get_member_communication(settings, member.entity_id);
let caller_permissions = get_permissions_for_context(settings, &member, &member);
let units = match get_members_units(settings, member.entity_id){
Ok(units) => units,
Err(_) => return Err(Status::InternalServerError)
};
let login = Login::from(get_user_by_member(settings, member.entity_id));
return Ok(Template::render(
"module_member_management_personal_profile",
MemberModuleProfile {
header,
footer,
member,
member_age: age,
address,
licenses,
qualification_categories,
communication_targets,
readonly: false,
sidebar,
caller_permissions,
units,
login
},
));
}