diff --git a/src/web/pages/clients/add.rs b/src/web/pages/clients/add.rs new file mode 100644 index 0000000..c0749a9 --- /dev/null +++ b/src/web/pages/clients/add.rs @@ -0,0 +1,55 @@ +use askama::Template; +use axum::extract::State; +use axum::response::{Html, IntoResponse, Response}; +use axum::http::StatusCode; + +use crate::db::DbPool; +use crate::db::models::Client; +use crate::web::pages::{BaseTemplate, BaseTemplateCtx}; + +#[derive(Template)] +#[template(path = "clients/index.html")] +pub struct PageTemplate { + pub ctx: BaseTemplateCtx, + pub clients: Vec +} + +impl BaseTemplate for PageTemplate { + fn ctx(&self) -> &BaseTemplateCtx { + &self.ctx + } + fn ctx_mut(&mut self) -> &mut BaseTemplateCtx { + &mut self.ctx + } + +} + +#[axum::debug_handler] +pub async fn get_page(State(pool): State) -> Response { + async fn inner(pool: &DbPool) -> anyhow::Result<(StatusCode, String)> { + use diesel::prelude::*; + use crate::db::schema::clients::dsl::*; + + let results = clients + .order(id.asc()) + .limit(50) + .load::(&mut pool.get()?)?; + + let mut template = PageTemplate { + ctx: Default::default(), + clients: results + }; + + template.set_title("Clients"); + + Ok((StatusCode::OK, template.render()?)) + } + + match inner(&pool).await { + Ok((status, s)) => (status, Html(s)).into_response(), + Err(e) => { + let s = crate::web::pages::error::get_error_page(e.to_string()).await; + (StatusCode::INTERNAL_SERVER_ERROR, Html(s)).into_response() + } + } +} diff --git a/src/web/pages/clients/edit.rs b/src/web/pages/clients/edit.rs new file mode 100644 index 0000000..c0749a9 --- /dev/null +++ b/src/web/pages/clients/edit.rs @@ -0,0 +1,55 @@ +use askama::Template; +use axum::extract::State; +use axum::response::{Html, IntoResponse, Response}; +use axum::http::StatusCode; + +use crate::db::DbPool; +use crate::db::models::Client; +use crate::web::pages::{BaseTemplate, BaseTemplateCtx}; + +#[derive(Template)] +#[template(path = "clients/index.html")] +pub struct PageTemplate { + pub ctx: BaseTemplateCtx, + pub clients: Vec +} + +impl BaseTemplate for PageTemplate { + fn ctx(&self) -> &BaseTemplateCtx { + &self.ctx + } + fn ctx_mut(&mut self) -> &mut BaseTemplateCtx { + &mut self.ctx + } + +} + +#[axum::debug_handler] +pub async fn get_page(State(pool): State) -> Response { + async fn inner(pool: &DbPool) -> anyhow::Result<(StatusCode, String)> { + use diesel::prelude::*; + use crate::db::schema::clients::dsl::*; + + let results = clients + .order(id.asc()) + .limit(50) + .load::(&mut pool.get()?)?; + + let mut template = PageTemplate { + ctx: Default::default(), + clients: results + }; + + template.set_title("Clients"); + + Ok((StatusCode::OK, template.render()?)) + } + + match inner(&pool).await { + Ok((status, s)) => (status, Html(s)).into_response(), + Err(e) => { + let s = crate::web::pages::error::get_error_page(e.to_string()).await; + (StatusCode::INTERNAL_SERVER_ERROR, Html(s)).into_response() + } + } +} diff --git a/src/web/pages/clients/mod.rs b/src/web/pages/clients/mod.rs index c0749a9..73c7587 100644 --- a/src/web/pages/clients/mod.rs +++ b/src/web/pages/clients/mod.rs @@ -7,6 +7,11 @@ use crate::db::DbPool; use crate::db::models::Client; use crate::web::pages::{BaseTemplate, BaseTemplateCtx}; +pub mod add; +pub mod edit; +pub mod view; +pub mod remove; + #[derive(Template)] #[template(path = "clients/index.html")] pub struct PageTemplate { @@ -32,7 +37,7 @@ pub async fn get_page(State(pool): State) -> Response { let results = clients .order(id.asc()) - .limit(50) + .limit(100) .load::(&mut pool.get()?)?; let mut template = PageTemplate { diff --git a/src/web/pages/clients/remove.rs b/src/web/pages/clients/remove.rs new file mode 100644 index 0000000..c0749a9 --- /dev/null +++ b/src/web/pages/clients/remove.rs @@ -0,0 +1,55 @@ +use askama::Template; +use axum::extract::State; +use axum::response::{Html, IntoResponse, Response}; +use axum::http::StatusCode; + +use crate::db::DbPool; +use crate::db::models::Client; +use crate::web::pages::{BaseTemplate, BaseTemplateCtx}; + +#[derive(Template)] +#[template(path = "clients/index.html")] +pub struct PageTemplate { + pub ctx: BaseTemplateCtx, + pub clients: Vec +} + +impl BaseTemplate for PageTemplate { + fn ctx(&self) -> &BaseTemplateCtx { + &self.ctx + } + fn ctx_mut(&mut self) -> &mut BaseTemplateCtx { + &mut self.ctx + } + +} + +#[axum::debug_handler] +pub async fn get_page(State(pool): State) -> Response { + async fn inner(pool: &DbPool) -> anyhow::Result<(StatusCode, String)> { + use diesel::prelude::*; + use crate::db::schema::clients::dsl::*; + + let results = clients + .order(id.asc()) + .limit(50) + .load::(&mut pool.get()?)?; + + let mut template = PageTemplate { + ctx: Default::default(), + clients: results + }; + + template.set_title("Clients"); + + Ok((StatusCode::OK, template.render()?)) + } + + match inner(&pool).await { + Ok((status, s)) => (status, Html(s)).into_response(), + Err(e) => { + let s = crate::web::pages::error::get_error_page(e.to_string()).await; + (StatusCode::INTERNAL_SERVER_ERROR, Html(s)).into_response() + } + } +} diff --git a/src/web/pages/clients/view.rs b/src/web/pages/clients/view.rs new file mode 100644 index 0000000..c0749a9 --- /dev/null +++ b/src/web/pages/clients/view.rs @@ -0,0 +1,55 @@ +use askama::Template; +use axum::extract::State; +use axum::response::{Html, IntoResponse, Response}; +use axum::http::StatusCode; + +use crate::db::DbPool; +use crate::db::models::Client; +use crate::web::pages::{BaseTemplate, BaseTemplateCtx}; + +#[derive(Template)] +#[template(path = "clients/index.html")] +pub struct PageTemplate { + pub ctx: BaseTemplateCtx, + pub clients: Vec +} + +impl BaseTemplate for PageTemplate { + fn ctx(&self) -> &BaseTemplateCtx { + &self.ctx + } + fn ctx_mut(&mut self) -> &mut BaseTemplateCtx { + &mut self.ctx + } + +} + +#[axum::debug_handler] +pub async fn get_page(State(pool): State) -> Response { + async fn inner(pool: &DbPool) -> anyhow::Result<(StatusCode, String)> { + use diesel::prelude::*; + use crate::db::schema::clients::dsl::*; + + let results = clients + .order(id.asc()) + .limit(50) + .load::(&mut pool.get()?)?; + + let mut template = PageTemplate { + ctx: Default::default(), + clients: results + }; + + template.set_title("Clients"); + + Ok((StatusCode::OK, template.render()?)) + } + + match inner(&pool).await { + Ok((status, s)) => (status, Html(s)).into_response(), + Err(e) => { + let s = crate::web::pages::error::get_error_page(e.to_string()).await; + (StatusCode::INTERNAL_SERVER_ERROR, Html(s)).into_response() + } + } +} diff --git a/src/web/pages/mod.rs b/src/web/pages/mod.rs index 91fa2b4..2104ea6 100644 --- a/src/web/pages/mod.rs +++ b/src/web/pages/mod.rs @@ -1,5 +1,5 @@ - +pub mod services; pub mod clients; pub mod inventory; pub mod tickets; diff --git a/src/web/pages/services/add.rs b/src/web/pages/services/add.rs new file mode 100644 index 0000000..83daad2 --- /dev/null +++ b/src/web/pages/services/add.rs @@ -0,0 +1,44 @@ +use askama::Template; +use axum::extract::State; +use axum::response::{Html, IntoResponse, Response}; +use axum::http::StatusCode; + +use crate::db::DbPool; +use crate::web::pages::{BaseTemplate, BaseTemplateCtx}; + +#[derive(Template)] +#[template(path = "services/add.html")] +pub struct PageTemplate { + pub ctx: BaseTemplateCtx, +} + +impl BaseTemplate for PageTemplate { + fn ctx(&self) -> &BaseTemplateCtx { + &self.ctx + } + fn ctx_mut(&mut self) -> &mut BaseTemplateCtx { + &mut self.ctx + } + +} + +#[axum::debug_handler] +pub async fn get_page(State(pool): State) -> Response { + async fn inner(_pool: &DbPool) -> anyhow::Result<(StatusCode, String)> { + let mut template = PageTemplate { + ctx: Default::default(), + }; + + template.set_title("Assigning a service"); + + Ok((StatusCode::OK, template.render()?)) + } + + match inner(&pool).await { + Ok((status, s)) => (status, Html(s)).into_response(), + Err(e) => { + let s = crate::web::pages::error::get_error_page(e.to_string()).await; + (StatusCode::INTERNAL_SERVER_ERROR, Html(s)).into_response() + } + } +} diff --git a/src/web/pages/services/catalog/add.rs b/src/web/pages/services/catalog/add.rs new file mode 100644 index 0000000..0946479 --- /dev/null +++ b/src/web/pages/services/catalog/add.rs @@ -0,0 +1,44 @@ +use askama::Template; +use axum::extract::State; +use axum::response::{Html, IntoResponse, Response}; +use axum::http::StatusCode; + +use crate::db::DbPool; +use crate::web::pages::{BaseTemplate, BaseTemplateCtx}; + +#[derive(Template)] +#[template(path = "services/catalog/add.html")] +pub struct PageTemplate { + pub ctx: BaseTemplateCtx, +} + +impl BaseTemplate for PageTemplate { + fn ctx(&self) -> &BaseTemplateCtx { + &self.ctx + } + fn ctx_mut(&mut self) -> &mut BaseTemplateCtx { + &mut self.ctx + } + +} + +#[axum::debug_handler] +pub async fn get_page(State(pool): State) -> Response { + async fn inner(_pool: &DbPool) -> anyhow::Result<(StatusCode, String)> { + let mut template = PageTemplate { + ctx: Default::default(), + }; + + template.set_title("Adding a service to the catalog"); + + Ok((StatusCode::OK, template.render()?)) + } + + match inner(&pool).await { + Ok((status, s)) => (status, Html(s)).into_response(), + Err(e) => { + let s = crate::web::pages::error::get_error_page(e.to_string()).await; + (StatusCode::INTERNAL_SERVER_ERROR, Html(s)).into_response() + } + } +} diff --git a/src/web/pages/services/catalog/edit.rs b/src/web/pages/services/catalog/edit.rs new file mode 100644 index 0000000..f5a5465 --- /dev/null +++ b/src/web/pages/services/catalog/edit.rs @@ -0,0 +1,44 @@ +use askama::Template; +use axum::extract::State; +use axum::response::{Html, IntoResponse, Response}; +use axum::http::StatusCode; + +use crate::db::DbPool; +use crate::web::pages::{BaseTemplate, BaseTemplateCtx}; + +#[derive(Template)] +#[template(path = "services/catalog/edit.html")] +pub struct PageTemplate { + pub ctx: BaseTemplateCtx, +} + +impl BaseTemplate for PageTemplate { + fn ctx(&self) -> &BaseTemplateCtx { + &self.ctx + } + fn ctx_mut(&mut self) -> &mut BaseTemplateCtx { + &mut self.ctx + } + +} + +#[axum::debug_handler] +pub async fn get_page(State(pool): State) -> Response { + async fn inner(_pool: &DbPool) -> anyhow::Result<(StatusCode, String)> { + let mut template = PageTemplate { + ctx: Default::default(), + }; + + template.set_title("Editing a service in the catalog"); + + Ok((StatusCode::OK, template.render()?)) + } + + match inner(&pool).await { + Ok((status, s)) => (status, Html(s)).into_response(), + Err(e) => { + let s = crate::web::pages::error::get_error_page(e.to_string()).await; + (StatusCode::INTERNAL_SERVER_ERROR, Html(s)).into_response() + } + } +} diff --git a/src/web/pages/services/catalog/mod.rs b/src/web/pages/services/catalog/mod.rs new file mode 100644 index 0000000..c18ef9d --- /dev/null +++ b/src/web/pages/services/catalog/mod.rs @@ -0,0 +1,48 @@ +use askama::Template; +use axum::extract::State; +use axum::response::{Html, IntoResponse, Response}; +use axum::http::StatusCode; + +use crate::db::DbPool; +use crate::web::pages::{BaseTemplate, BaseTemplateCtx}; + +pub mod add; +pub mod edit; +pub mod view; + +#[derive(Template)] +#[template(path = "services/catalog/index.html")] +pub struct PageTemplate { + pub ctx: BaseTemplateCtx, +} + +impl BaseTemplate for PageTemplate { + fn ctx(&self) -> &BaseTemplateCtx { + &self.ctx + } + fn ctx_mut(&mut self) -> &mut BaseTemplateCtx { + &mut self.ctx + } + +} + +#[axum::debug_handler] +pub async fn get_page(State(pool): State) -> Response { + async fn inner(_pool: &DbPool) -> anyhow::Result<(StatusCode, String)> { + let mut template = PageTemplate { + ctx: Default::default(), + }; + + template.set_title("Clients"); + + Ok((StatusCode::OK, template.render()?)) + } + + match inner(&pool).await { + Ok((status, s)) => (status, Html(s)).into_response(), + Err(e) => { + let s = crate::web::pages::error::get_error_page(e.to_string()).await; + (StatusCode::INTERNAL_SERVER_ERROR, Html(s)).into_response() + } + } +} diff --git a/src/web/pages/services/catalog/view.rs b/src/web/pages/services/catalog/view.rs new file mode 100644 index 0000000..252a558 --- /dev/null +++ b/src/web/pages/services/catalog/view.rs @@ -0,0 +1,44 @@ +use askama::Template; +use axum::extract::State; +use axum::response::{Html, IntoResponse, Response}; +use axum::http::StatusCode; + +use crate::db::DbPool; +use crate::web::pages::{BaseTemplate, BaseTemplateCtx}; + +#[derive(Template)] +#[template(path = "services/catalog/view.html")] +pub struct PageTemplate { + pub ctx: BaseTemplateCtx, +} + +impl BaseTemplate for PageTemplate { + fn ctx(&self) -> &BaseTemplateCtx { + &self.ctx + } + fn ctx_mut(&mut self) -> &mut BaseTemplateCtx { + &mut self.ctx + } + +} + +#[axum::debug_handler] +pub async fn get_page(State(pool): State) -> Response { + async fn inner(_pool: &DbPool) -> anyhow::Result<(StatusCode, String)> { + let mut template = PageTemplate { + ctx: Default::default(), + }; + + template.set_title("Service from the catalog"); + + Ok((StatusCode::OK, template.render()?)) + } + + match inner(&pool).await { + Ok((status, s)) => (status, Html(s)).into_response(), + Err(e) => { + let s = crate::web::pages::error::get_error_page(e.to_string()).await; + (StatusCode::INTERNAL_SERVER_ERROR, Html(s)).into_response() + } + } +} diff --git a/src/web/pages/services/mod.rs b/src/web/pages/services/mod.rs new file mode 100644 index 0000000..536ef97 --- /dev/null +++ b/src/web/pages/services/mod.rs @@ -0,0 +1,49 @@ +use askama::Template; +use axum::extract::State; +use axum::response::{Html, IntoResponse, Response}; +use axum::http::StatusCode; + +use crate::db::DbPool; +use crate::web::pages::{BaseTemplate, BaseTemplateCtx}; + +pub mod catalog; +pub mod view; +pub mod add; +pub mod remove; + +#[derive(Template)] +#[template(path = "services/index.html")] +pub struct PageTemplate { + pub ctx: BaseTemplateCtx, +} + +impl BaseTemplate for PageTemplate { + fn ctx(&self) -> &BaseTemplateCtx { + &self.ctx + } + fn ctx_mut(&mut self) -> &mut BaseTemplateCtx { + &mut self.ctx + } + +} + +#[axum::debug_handler] +pub async fn get_page(State(pool): State) -> Response { + async fn inner(_pool: &DbPool) -> anyhow::Result<(StatusCode, String)> { + let mut template = PageTemplate { + ctx: Default::default(), + }; + + template.set_title("Services"); + + Ok((StatusCode::OK, template.render()?)) + } + + match inner(&pool).await { + Ok((status, s)) => (status, Html(s)).into_response(), + Err(e) => { + let s = crate::web::pages::error::get_error_page(e.to_string()).await; + (StatusCode::INTERNAL_SERVER_ERROR, Html(s)).into_response() + } + } +} diff --git a/src/web/pages/services/remove.rs b/src/web/pages/services/remove.rs new file mode 100644 index 0000000..2d39ea7 --- /dev/null +++ b/src/web/pages/services/remove.rs @@ -0,0 +1,44 @@ +use askama::Template; +use axum::extract::State; +use axum::response::{Html, IntoResponse, Response}; +use axum::http::StatusCode; + +use crate::db::DbPool; +use crate::web::pages::{BaseTemplate, BaseTemplateCtx}; + +#[derive(Template)] +#[template(path = "services/remove.html")] +pub struct PageTemplate { + pub ctx: BaseTemplateCtx, +} + +impl BaseTemplate for PageTemplate { + fn ctx(&self) -> &BaseTemplateCtx { + &self.ctx + } + fn ctx_mut(&mut self) -> &mut BaseTemplateCtx { + &mut self.ctx + } + +} + +#[axum::debug_handler] +pub async fn get_page(State(pool): State) -> Response { + async fn inner(_pool: &DbPool) -> anyhow::Result<(StatusCode, String)> { + let mut template = PageTemplate { + ctx: Default::default(), + }; + + template.set_title("Removing a service"); + + Ok((StatusCode::OK, template.render()?)) + } + + match inner(&pool).await { + Ok((status, s)) => (status, Html(s)).into_response(), + Err(e) => { + let s = crate::web::pages::error::get_error_page(e.to_string()).await; + (StatusCode::INTERNAL_SERVER_ERROR, Html(s)).into_response() + } + } +} diff --git a/src/web/pages/services/view.rs b/src/web/pages/services/view.rs new file mode 100644 index 0000000..68793a8 --- /dev/null +++ b/src/web/pages/services/view.rs @@ -0,0 +1,44 @@ +use askama::Template; +use axum::extract::State; +use axum::response::{Html, IntoResponse, Response}; +use axum::http::StatusCode; + +use crate::db::DbPool; +use crate::web::pages::{BaseTemplate, BaseTemplateCtx}; + +#[derive(Template)] +#[template(path = "services/view.html")] +pub struct PageTemplate { + pub ctx: BaseTemplateCtx, +} + +impl BaseTemplate for PageTemplate { + fn ctx(&self) -> &BaseTemplateCtx { + &self.ctx + } + fn ctx_mut(&mut self) -> &mut BaseTemplateCtx { + &mut self.ctx + } + +} + +#[axum::debug_handler] +pub async fn get_page(State(pool): State) -> Response { + async fn inner(_pool: &DbPool) -> anyhow::Result<(StatusCode, String)> { + let mut template = PageTemplate { + ctx: Default::default(), + }; + + template.set_title("Service"); + + Ok((StatusCode::OK, template.render()?)) + } + + match inner(&pool).await { + Ok((status, s)) => (status, Html(s)).into_response(), + Err(e) => { + let s = crate::web::pages::error::get_error_page(e.to_string()).await; + (StatusCode::INTERNAL_SERVER_ERROR, Html(s)).into_response() + } + } +} diff --git a/static/base.css b/static/css/base.css similarity index 84% rename from static/base.css rename to static/css/base.css index eae63e1..17f57b2 100644 --- a/static/base.css +++ b/static/css/base.css @@ -5,14 +5,19 @@ body,html { } .nav { + position: fixed; display: flex; + top: 0; list-style: none; gap: 10px; background: gray; padding: 8px; margin: 0px; + width: 99.5%; +} +main { + padding-top: 50px } - .right { margin-left: auto; } @@ -40,8 +45,8 @@ body,html { } footer { - position: absolute; - bottom: 0px; + position: sticky; + bottom: 0; width: 100%; padding: 5px; padding-left: 10px; diff --git a/static/css/clients/index.css b/static/css/clients/index.css new file mode 100644 index 0000000..f0daac2 --- /dev/null +++ b/static/css/clients/index.css @@ -0,0 +1,41 @@ + + +.table { + margin: 0 auto; + width: 80%; + font-size: 0.95rem; + border-radius: 8px; + overflow: hidden; + border-collapse: collapse; + border: 5px double black; +} + + +.table-header { + border: 5px double black; +} + +.table-header-item { + padding-top: 1px; + padding-bottom: 1px; + padding-left: 5px; + padding-right: 1px; + border: 1px solid black; + border-left: 0.5px thin gray; + border-right: 0.5px thin gray; +} + + +.table-body { + border: 5px double black; +} + +.table-cell { + padding-top: 1px; + padding-bottom: 1px; + padding-left: 5px; + padding-right: 1px; + border: 1px solid black; + border-left: 0.5px thin gray; + border-right: 0.5px thin gray; +} diff --git a/static/login.css b/static/css/login.css similarity index 100% rename from static/login.css rename to static/css/login.css diff --git a/templates/base.html b/templates/base.html index 22cf4a4..a376211 100644 --- a/templates/base.html +++ b/templates/base.html @@ -3,7 +3,7 @@ {{ self.title() }} - + {% block headers %}{% endblock %} diff --git a/templates/clients/add.html b/templates/clients/add.html new file mode 100644 index 0000000..e69de29 diff --git a/templates/clients/edit.html b/templates/clients/edit.html new file mode 100644 index 0000000..e69de29 diff --git a/templates/clients/index.html b/templates/clients/index.html index f00c234..e2b4739 100644 --- a/templates/clients/index.html +++ b/templates/clients/index.html @@ -1,31 +1,38 @@ {% extends "base.html" %} + {% block headers %} + + {% endblock %} {% block content %} - - - - - - - - - {% for client in clients %} - - - - - - - - {% endfor %} +
First NameLast NameAddressNumberEmail
{{ client.first_name }}{{ client.last_name }} - {{ client.country}} - {{ client.city}} - {{ client.state}} - {{ client.address_line}} - {{ client.house_number}} - {{ client.postal_code}} - {{ client.phone_number }}{{ client.email }}
+ + + + + + + + + + + {% for client in clients %} + + + + + + + + {% endfor %} +
First NameLast NameAddressNumberEmail
{{ client.first_name }}{{ client.last_name }} + {{ client.country}} + {{ client.city}} + {{ client.state}} + {{ client.address_line}} + {{ client.house_number}} + {{ client.postal_code}} + {{ client.phone_number }}{{ client.email }}
{% endblock %} diff --git a/templates/clients/remove.html b/templates/clients/remove.html new file mode 100644 index 0000000..e69de29 diff --git a/templates/clients/client.html b/templates/clients/view.html similarity index 100% rename from templates/clients/client.html rename to templates/clients/view.html diff --git a/templates/inventory/catalog/add.html b/templates/inventory/catalog/add.html new file mode 100644 index 0000000..e69de29 diff --git a/templates/inventory/catalog/edit.html b/templates/inventory/catalog/edit.html new file mode 100644 index 0000000..e69de29 diff --git a/templates/inventory/catalog.html b/templates/inventory/catalog/index.html similarity index 100% rename from templates/inventory/catalog.html rename to templates/inventory/catalog/index.html diff --git a/templates/inventory/catalog/remove.html b/templates/inventory/catalog/remove.html new file mode 100644 index 0000000..e69de29 diff --git a/templates/login.html b/templates/login.html index b95cde4..fea99f9 100644 --- a/templates/login.html +++ b/templates/login.html @@ -1,7 +1,7 @@ {% extends "base.html" %} {% block headers %} - + {% endblock %} {% block content %} diff --git a/templates/services/add.html b/templates/services/add.html new file mode 100644 index 0000000..e69de29 diff --git a/templates/services/catalog/add.html b/templates/services/catalog/add.html new file mode 100644 index 0000000..e69de29 diff --git a/templates/services/catalog/edit.html b/templates/services/catalog/edit.html new file mode 100644 index 0000000..e69de29 diff --git a/templates/services/catalog/index.html b/templates/services/catalog/index.html new file mode 100644 index 0000000..5a84a91 --- /dev/null +++ b/templates/services/catalog/index.html @@ -0,0 +1,7 @@ +{% extends "base.html" %} +{% block headers %} +{% endblock %} + +{% block content %} +Hewwo wowld!!!! +{% endblock %} diff --git a/templates/services/catalog/view.html b/templates/services/catalog/view.html new file mode 100644 index 0000000..e69de29 diff --git a/templates/services/index.html b/templates/services/index.html new file mode 100644 index 0000000..5a84a91 --- /dev/null +++ b/templates/services/index.html @@ -0,0 +1,7 @@ +{% extends "base.html" %} +{% block headers %} +{% endblock %} + +{% block content %} +Hewwo wowld!!!! +{% endblock %} diff --git a/templates/services/remove.html b/templates/services/remove.html new file mode 100644 index 0000000..e69de29 diff --git a/templates/services/view.html b/templates/services/view.html new file mode 100644 index 0000000..e69de29 diff --git a/templates/tickets/view.html b/templates/tickets/view.html new file mode 100644 index 0000000..e69de29