Added communication to member profile

This commit is contained in:
Keanu D?lle 2020-09-08 21:18:12 +02:00
parent 23846347fa
commit 3b64124d5c
11 changed files with 84 additions and 12 deletions

View File

@ -1,8 +1,8 @@
-- Your SQL goes here
create table communication_types
(
id uuid default uuid_generate_v1() not null,
name text not null,
constraint pk___communication_types___id
primary key (id)
type_id uuid default uuid_generate_v1() not null
constraint pk___communication_types___id
primary key,
type_name text not null
);

View File

@ -1,7 +1,7 @@
-- Your SQL goes here
create table communication_targets
(
id uuid default uuid_generate_v1() not null
target_id uuid default uuid_generate_v1() not null
constraint pk___communication_targets___id
primary key,
entity_id uuid not null

View File

@ -138,6 +138,29 @@
{{/each}}
</div>
</div>
<div class="card bg-light mb-3">
<div class="card-header">Kommunikation</div>
<div class="card-body">
<table class="table">
<thead>
<tr>
<th scope="col">Typ</th>
<th scope="col">Wert</th>
<th scope="col">Beschreibung</th>
</tr>
</thead>
<tbody>
{{#each communication_targets}}
<tr>
<td><input type="text" value="{{type_name}}" readonly size="8"></td>
<td><input type="text" value="{{value}}" class="form-control" readonly></td>
<td><input type="text" value="{{description}}" class="form-control" readonly></td>
</tr>
{{/each}}
</tbody>
</table>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="card bg-light mb-3">

View File

@ -0,0 +1,36 @@
use crate::database::controller::connector::establish_connection;
use crate::database::model::member_communication::CommunicationTarget;
use crate::database::model::member_licenses::RawMemberLicense;
use crate::helper::settings::Settings;
use crate::modules::member_management::model::licenses::MemberLicense;
use diesel::pg::types::sql_types::Uuid;
use diesel::serialize::IsNull;
use diesel::{sql_query, ExpressionMethods, JoinOnDsl, QueryDsl, RunQueryDsl};
use rocket::State;
pub fn get_member_communication(
settings: &State<Settings>,
member_entity_id: uuid::Uuid,
) -> Vec<CommunicationTarget> {
use crate::schema::communication_targets::dsl::*;
use crate::schema::communication_types::dsl::*;
let connection = establish_connection(settings);
let data: Result<Vec<CommunicationTarget>, diesel::result::Error> = communication_targets
.inner_join(communication_types)
.filter(entity_id.eq(member_entity_id))
.select((target_id, type_name, value, description))
.load(&connection);
match data {
Ok(data) => data,
Err(e) => {
error!(
"Couldn't get communication targets for {}: {}",
member_entity_id, e
);
vec![]
}
}
}

View File

@ -1,5 +1,5 @@
use crate::database::controller::connector::establish_connection;
use crate::database::model::qualifications::RawQualificationCategory;
use crate::database::model::member_qualifications::RawQualificationCategory;
use crate::helper::settings::Settings;
use crate::modules::member_management::model::qualifications::{
Qualification, QualificationCategory,

View File

@ -0,0 +1,7 @@
#[derive(Serialize, Deserialize, Queryable, Clone)]
pub struct CommunicationTarget {
pub(crate) target_id: uuid::Uuid,
pub(crate) type_name: String,
pub(crate) value: String,
pub(crate) description: Option<String>,
}

View File

@ -1,7 +1,8 @@
pub mod addresses;
pub mod entities;
pub mod groups;
pub mod member_communication;
pub mod member_licenses;
pub mod member_qualifications;
pub mod members;
pub mod qualifications;
pub mod users;

View File

@ -1,4 +1,5 @@
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::database::controller::members::get_raw_member_by_uuid;
@ -49,6 +50,7 @@ pub fn handle_view(
let address = get_addresses_for_entity_only_one_allowed(settings, raw_member.entity_id);
let licenses = get_member_licenses(settings, raw_member.entity_id);
let qualification_categories = get_qualifcation_categories(settings, raw_member.entity_id);
let communication_targets = get_member_communication(settings, raw_member.entity_id);
return Ok(Template::render(
"module_member_management_profile",
@ -60,6 +62,7 @@ pub fn handle_view(
address,
licenses,
qualification_categories,
communication_targets,
readonly: true,
sidebar,
},

View File

@ -1,4 +1,5 @@
use crate::database::model::addresses::Address;
use crate::database::model::member_communication::CommunicationTarget;
use crate::database::model::members::RawMember;
use crate::helper::sitebuilder::model::general::{Footer, Header};
use crate::helper::sitebuilder::model::sidebar::Sidebar;
@ -28,6 +29,7 @@ pub struct MemberModuleProfile {
pub address: Option<Address>,
pub licenses: Vec<MemberLicense>,
pub qualification_categories: Vec<QualificationCategory>,
pub communication_targets: Vec<CommunicationTarget>,
pub readonly: bool,
pub sidebar: Sidebar,
}

View File

@ -39,8 +39,8 @@ table! {
use diesel::sql_types::*;
use diesel_geometry::sql_types::*;
communication_targets (id) {
id -> Uuid,
communication_targets (target_id) {
target_id -> Uuid,
entity_id -> Uuid,
com_type -> Uuid,
value -> Text,
@ -52,9 +52,9 @@ table! {
use diesel::sql_types::*;
use diesel_geometry::sql_types::*;
communication_types (id) {
id -> Uuid,
name -> Text,
communication_types (type_id) {
type_id -> Uuid,
type_name -> Text,
}
}