diff --git a/web/src/endpoints/export/get_events.rs b/web/src/endpoints/export/get_events.rs new file mode 100644 index 00000000..cb60cd23 --- /dev/null +++ b/web/src/endpoints/export/get_events.rs @@ -0,0 +1,48 @@ +use actix_web::{web, Responder}; +use askama::Template; +use chrono::{Datelike, NaiveDate, Utc}; +use sqlx::PgPool; + +use crate::{ + models::{Area, Role, User}, + utils::{ApplicationError, TemplateResponse}, +}; + +#[derive(Template)] +#[template(path = "export/events.html")] +struct EventExportTemplate { + user: User, + areas: Option>, + daterange: (NaiveDate, NaiveDate), +} + +#[actix_web::get("/export/events")] +pub async fn get( + user: web::ReqData, + pool: web::Data, +) -> Result { + if user.role != Role::Admin && user.role != Role::AreaManager { + return Err(ApplicationError::Unauthorized); + } + + let areas = if user.role == Role::Admin { + Some(Area::read_all(pool.get_ref()).await?) + } else { + None + }; + + let today = Utc::now().date_naive(); + let start = NaiveDate::from_ymd_opt(today.year(), today.month0() + 1, 1).unwrap(); + let end = NaiveDate::from_ymd_opt(today.year(), today.month0() + 2, 1) + .unwrap() + .pred_opt() + .unwrap(); + + let template = EventExportTemplate { + user: user.into_inner(), + areas, + daterange: (start, end), + }; + + Ok(template.to_response()?) +} diff --git a/web/src/endpoints/export/get_events_data.rs b/web/src/endpoints/export/get_events_data.rs new file mode 100644 index 00000000..9f486d54 --- /dev/null +++ b/web/src/endpoints/export/get_events_data.rs @@ -0,0 +1,29 @@ +use actix_web::{web, HttpResponse, Responder}; +use chrono::NaiveDate; +use serde::Deserialize; +use sqlx::PgPool; + +use crate::{ + models::{Role, User}, + utils::ApplicationError, +}; + +#[derive(Deserialize)] +struct ExportQuery { + start: NaiveDate, + end: NaiveDate, + area: Option, +} + +#[actix_web::get("/export/eventsdata")] +pub async fn get( + pool: web::Data, + user: web::ReqData, + query: web::Query, +) -> Result { + if user.role != Role::Admin && user.role != Role::AreaManager { + return Err(ApplicationError::Unauthorized); + } + + Ok(HttpResponse::BadRequest().finish()) +} diff --git a/web/src/endpoints/export/mod.rs b/web/src/endpoints/export/mod.rs index 8fabad39..60d05cc2 100644 --- a/web/src/endpoints/export/mod.rs +++ b/web/src/endpoints/export/mod.rs @@ -1,2 +1,4 @@ pub mod get_availability; pub mod get_availability_data; +pub mod get_events; +pub mod get_events_data; diff --git a/web/src/endpoints/mod.rs b/web/src/endpoints/mod.rs index 60663254..1a5eeb36 100644 --- a/web/src/endpoints/mod.rs +++ b/web/src/endpoints/mod.rs @@ -81,6 +81,8 @@ pub fn init(cfg: &mut ServiceConfig) { cfg.service(export::get_availability::get); cfg.service(export::get_availability_data::get); + cfg.service(export::get_events::get); + cfg.service(export::get_events_data::get); cfg.service(imprint::get_imprint); diff --git a/web/templates/export/events.html b/web/templates/export/events.html new file mode 100644 index 00000000..1fba0f51 --- /dev/null +++ b/web/templates/export/events.html @@ -0,0 +1,49 @@ +{% extends "nav.html" %} + +{% block content %} +
+
+

+ Veranstaltungen nach Excel (.xslx) exportieren +

+
+ +
+ +
+ +
+
+ aktueller Monat + nächster Monat + aktuelles Quartal + nächstes Quartal +
+
+ +
+ +
+ +
+
+ + {% if user.role == Role::Admin %} +
+ +
+
+ +
+
+
+ {% endif %} + +
+
+
+{% endblock %} diff --git a/web/templates/nav.html b/web/templates/nav.html index 68b9606c..a7c9c300 100644 --- a/web/templates/nav.html +++ b/web/templates/nav.html @@ -31,6 +31,10 @@ Verfügbarkeiten + + + Veranstaltungen +