Compare commits

..

32 Commits

Author SHA1 Message Date
3b4c11e4c0 Merge branch 'feature/39-donation_list' of git.odit.services:lfk/selfservice into feature/39-donation_list 2021-04-06 21:25:12 +02:00
89820d4450 Added total to bottom of page
ref #39
2021-04-06 21:25:10 +02:00
121022c843 added distance formatting
ref #39
2021-04-06 21:23:24 +02:00
d713fbef94 Added translations 🌍
ref #39
2021-04-06 17:27:18 +02:00
815a36f202 Now w/ formatted currency amount
ref #39
2021-04-06 17:20:41 +02:00
baa6da3dd0 Fixed spaces in name
ref #39
2021-04-06 17:18:09 +02:00
f141130db5 Added basic sponsoring table
ref #39
2021-04-06 17:14:22 +02:00
5a123b0cf8 Updated env description
All checks were successful
continuous-integration/drone/push Build is passing
2021-04-06 17:03:05 +02:00
f5ae2145df 🚀Bumped version to v0.6.1
All checks were successful
continuous-integration/drone/push Build is passing
2021-04-06 17:01:20 +02:00
96c0e56986 Fixed imprint/privacy default links
All checks were successful
continuous-integration/drone/push Build is passing
2021-04-06 17:00:55 +02:00
bc1de2acdc 🚀Bumped version to v0.6.0
All checks were successful
continuous-integration/drone/push Build is passing
2021-04-03 18:53:32 +02:00
5c558aa9ee Merge branch 'dev' of git.odit.services:lfk/selfservice into dev 2021-04-03 18:53:14 +02:00
145b49906b Revert "🚀Bumped version to v0.6.0"
This reverts commit 0a62e8f5d1.
2021-04-03 18:53:12 +02:00
0a62e8f5d1 🚀Bumped version to v0.6.0 2021-04-03 18:52:54 +02:00
53eeb6be3d Merge pull request 'Certificate download feature/19-runner_certficates' (#38) from feature/19-runner_certficates into dev
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #38
2021-04-03 16:51:22 +00:00
a554a90e74 Merge branch 'dev' into feature/19-runner_certficates
# Conflicts:
#	index.html
2021-04-03 18:50:16 +02:00
c3b2b93d90 Reverted relative linking fix
ref #19
2021-04-03 18:48:53 +02:00
1a3c9edeb3 🚀Bumped version to v0.5.1
All checks were successful
continuous-integration/drone/push Build is passing
2021-04-03 18:38:44 +02:00
7064a5bd82 Merge branch 'dev' into feature/19-runner_certficates 2021-04-03 16:28:18 +00:00
fd6bd88d42 Merge pull request 'Env linking bugfix bugfix/31-env_linking' (#37) from bugfix/31-env_linking into dev
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #37
2021-04-03 16:27:56 +00:00
f0a7f35dec Renoved fixed data
ref #19
2021-04-03 18:11:57 +02:00
b938cfc49e Fixed blob handling
ref #19
2021-04-03 18:11:22 +02:00
f6334397dc first part of certificate generation with manual data
ref #19
2021-04-03 17:57:24 +02:00
544542ac1e Added building pipeline for current branch
All checks were successful
continuous-integration/drone/push Build is passing
ref #31
2021-04-03 15:26:07 +02:00
67c0dae537 Now manually linking env and main
ref #31
2021-04-03 15:24:52 +02:00
cd6a139daf Merge pull request 'feature/30-profile-forgot-link' (#35) from feature/30-profile-forgot-link into dev
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #35
close #30
2021-04-02 19:00:50 +00:00
ec44a8b63e Merge branch 'dev' into feature/30-profile-forgot-link
# Conflicts:
#	src/locales/en.json
#	src/views/Home.vue
2021-04-01 19:58:37 +02:00
713db5e1e8 Removed useless code
ref #30
2021-04-01 19:55:23 +02:00
0795ea318d Fixed post url and body
ref #30
2021-04-01 19:55:01 +02:00
30f3a51ef8 add forgot view + action
ref #30
2021-04-01 19:22:23 +02:00
60dea511b9 🐞 fix home routes
ref #30
2021-04-01 19:07:14 +02:00
863568d7d0 basic ProfileNone layout
ref #30
2021-04-01 19:07:04 +02:00
11 changed files with 857 additions and 551 deletions

View File

@@ -61,6 +61,31 @@ trigger:
event: event:
- push - push
---
kind: pipeline
type: kubernetes
name: build:testing
steps:
- name: build testing
image: plugins/docker
depends_on: [clone]
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: registry.odit.services/lfk/selfservice
tags:
- testing
registry: registry.odit.services
mtu: 1000
trigger:
branch:
- bugfix/31-env_linking
event:
- push
--- ---
kind: pipeline kind: pipeline
type: kubernetes type: kubernetes

View File

@@ -2,8 +2,43 @@
All notable changes to this project will be documented in this file. Dates are displayed in UTC. All notable changes to this project will be documented in this file. Dates are displayed in UTC.
#### [0.6.1](https://git.odit.services/lfk/selfservice/compare/0.6.0...0.6.1)
- Fixed imprint/privacy default links [`96c0e56`](https://git.odit.services/lfk/selfservice/commit/96c0e5698697361e65c5aa80c9a0aada5c3d5f30)
#### [0.6.0](https://git.odit.services/lfk/selfservice/compare/0.5.1...0.6.0)
> 3 April 2021
- 🚀Bumped version to v0.6.0 [`bc1de2a`](https://git.odit.services/lfk/selfservice/commit/bc1de2acdcbf8f3319026887cb6b3d594fcd63dc)
- first part of certificate generation with manual data [`f633439`](https://git.odit.services/lfk/selfservice/commit/f6334397dc99cd38d31ef524bc26ba7d386b33dd)
- Renoved fixed data [`f0a7f35`](https://git.odit.services/lfk/selfservice/commit/f0a7f35dec07508a07d4c11abda297ad0bf91187)
- Revert "🚀Bumped version to v0.6.0" [`145b499`](https://git.odit.services/lfk/selfservice/commit/145b49906bdf2d75abf93e1779f188a691a3a909)
- 🚀Bumped version to v0.6.0 [`0a62e8f`](https://git.odit.services/lfk/selfservice/commit/0a62e8f5d1929bfe9a53a9709a3031f06a2487c3)
- Merge pull request 'Certificate download feature/19-runner_certficates' (#38) from feature/19-runner_certficates into dev [`53eeb6b`](https://git.odit.services/lfk/selfservice/commit/53eeb6be3ddf4735a11b6c4636c28b4d16aa58ee)
- Fixed blob handling [`b938cfc`](https://git.odit.services/lfk/selfservice/commit/b938cfc49e269e76761a752f8257ebbab88f6959)
- Reverted relative linking fix [`c3b2b93`](https://git.odit.services/lfk/selfservice/commit/c3b2b93d90102b4e31cfce15220acfc8fe48a7c5)
#### [0.5.1](https://git.odit.services/lfk/selfservice/compare/0.5.0...0.5.1)
> 3 April 2021
- Merge pull request 'feature/30-profile-forgot-link' (#35) from feature/30-profile-forgot-link into dev [`#30`](https://git.odit.services/lfk/selfservice/issues/30)
- 🚀Bumped version to v0.5.1 [`1a3c9ed`](https://git.odit.services/lfk/selfservice/commit/1a3c9edeb3987907ffe2223da8f3be079a1c80d2)
- Merge pull request 'Env linking bugfix bugfix/31-env_linking' (#37) from bugfix/31-env_linking into dev [`fd6bd88`](https://git.odit.services/lfk/selfservice/commit/fd6bd88d4238cca2a2755ab1bc51ff7870bef947)
- basic ProfileNone layout [`863568d`](https://git.odit.services/lfk/selfservice/commit/863568d7d0e132dd1b7d13a2cb1afe8db02c472c)
- add forgot view + action [`30f3a51`](https://git.odit.services/lfk/selfservice/commit/30f3a51ef82ad966225abc6fd95508af56106924)
- Added building pipeline for current branch [`544542a`](https://git.odit.services/lfk/selfservice/commit/544542ac1e9717506676c1495c2d530eca833d31)
- Removed useless code [`713db5e`](https://git.odit.services/lfk/selfservice/commit/713db5e1e8fed5f38b3a5d19cfe870eff16eeda1)
- Now manually linking env and main [`67c0dae`](https://git.odit.services/lfk/selfservice/commit/67c0dae537df5842e89c0ed040c0fef02df01b69)
- Fixed post url and body [`0795ea3`](https://git.odit.services/lfk/selfservice/commit/0795ea318d80b764eee89462ad87da86aa7ce0ae)
- 🐞 fix home routes [`60dea51`](https://git.odit.services/lfk/selfservice/commit/60dea511b9fbb6d206ee531618e788e686fa6b5a)
#### [0.5.0](https://git.odit.services/lfk/selfservice/compare/0.4.5...0.5.0) #### [0.5.0](https://git.odit.services/lfk/selfservice/compare/0.4.5...0.5.0)
> 1 April 2021
- 🚀Bumped version to v0.5.0 [`676f0e8`](https://git.odit.services/lfk/selfservice/commit/676f0e83393be823ccb612846650a9a98bf7f0b3)
- Revert "🚀Bumped version to v0.5.0" [`27fd8f9`](https://git.odit.services/lfk/selfservice/commit/27fd8f9a9106294ae6522f2fff42dfbf84f06f82) - Revert "🚀Bumped version to v0.5.0" [`27fd8f9`](https://git.odit.services/lfk/selfservice/commit/27fd8f9a9106294ae6522f2fff42dfbf84f06f82)
- 🚀Bumped version to v0.5.0 [`b8c1b8c`](https://git.odit.services/lfk/selfservice/commit/b8c1b8c43b6d050d239d836bbb6ace2504fdcd21) - 🚀Bumped version to v0.5.0 [`b8c1b8c`](https://git.odit.services/lfk/selfservice/commit/b8c1b8c43b6d050d239d836bbb6ace2504fdcd21)
- Merge pull request 'Runner self deletion feature/21-user_deletion' (#36) from feature/21-user_deletion into dev [`bd512e0`](https://git.odit.services/lfk/selfservice/commit/bd512e0651363f1f2543136d354d9ada9990d83d) - Merge pull request 'Runner self deletion feature/21-user_deletion' (#36) from feature/21-user_deletion into dev [`bd512e0`](https://git.odit.services/lfk/selfservice/commit/bd512e0651363f1f2543136d354d9ada9990d83d)

View File

@@ -1,6 +1,6 @@
{ {
"name": "@odit/lfk-selfservice", "name": "@odit/lfk-selfservice",
"version": "0.5.0", "version": "0.6.1",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
"build": "vite build", "build": "vite build",

View File

@@ -5,8 +5,8 @@ const config = {
baseurl: '', baseurl: '',
// optional, will fallback to /selfservice/ // optional, will fallback to /selfservice/
baseurl_selfservice: '/selfservice/', baseurl_selfservice: '/selfservice/',
// optional, will fallback to /imprint // optional, will fallback to baseurl_selfservice/imprint
url_imprint: '', url_imprint: '',
// optional, will fallback to /privacy // optional, will fallback to baseurl_selfservice/privacy
url_privacy: '' url_privacy: ''
}; };

View File

@@ -31,8 +31,8 @@
export default { export default {
data() { data() {
return { return {
imprint_url: config.url_imprint || "/imprint/" imprint_url: config.url_imprint || config.baseurl_selfservice + "imprint"
, privacy_url: config.url_privacy || "/privacy/" , privacy_url: config.url_privacy || config.baseurl_selfservice + "privacy"
} }
}, },
} }

View File

@@ -1,46 +1,58 @@
{ {
"already_have_an_account": "Sie haben bereits einen Account?", "access_is_only_provided_via_your_email_link": "Der Zugang erfolgt nur über den Link, den Sie bei der Registrierung erhalten haben.",
"apartment_suite_etc": "Addresszeile 2", "already_have_an_account": "Sie haben bereits einen Account?",
"cancel_keep_my_data": "Abbrechen, meine Daten behalten", "amount_per_kilometer_in_eur": "Betrag pro Kilometer (in €)",
"configuration_error": "Konfigurationsfehler", "apartment_suite_etc": "Addresszeile 2",
"confirm_delete_all_of_my_data": "Bestätigung, meine gesamten Daten löschen", "cancel_keep_my_data": "Abbrechen, meine Daten behalten",
"confirm_personal_data": "Hiermit bestätige ich die Vollständigkeit und Richtigkeit der oben genannten Angaben", "configuration_error": "Konfigurationsfehler",
"delete-all-of-my-data": "Meine gesamten Daten löschen", "confirm_delete_all_of_my_data": "Bestätigung, meine gesamten Daten löschen",
"delete_my_data": "Meine Daten löschen", "confirm_personal_data": "Hiermit bestätige ich die Vollständigkeit und Richtigkeit der oben genannten Angaben",
"deletion_in_progress": "Daten werden gelöscht...", "current_total_amount_in_eur": "Aktueller Gesamtbetrag (in €)",
"distance": "Distanz", "delete_all_of_my_data": "Meine gesamten Daten löschen",
"download_certificate": "Urkunde herunterladen", "delete_my_data": "Meine Daten löschen",
"e_mail_adress": "E-Mail Adresse", "deletion_in_progress": "Daten werden gelöscht...",
"go_to_login": "Zum Login", "distance": "Distanz",
"i_accept": "Ich habe die ", "download_certificate": "Urkunde herunterladen",
"i_accept_end": "gelesen und akzeptiert.", "e_mail_adress": "E-Mail Adresse",
"if_you_are_the_system_administrator_please_refer_to_the_official_product_documentation_readme_for_configuration_guidance": "Wenn Sie der Systemadministrator sind, finden Sie Konfigurationsanweisungen in der offiziellen Produktdokumentation / README.", "go_to_login": "Zum Login",
"imprint": "Impressum", "i_accept": "Ich habe die ",
"lap_time": "Rundenzeit", "i_accept_end": "gelesen und akzeptiert.",
"lap_times": "Rundenzeiten", "if_you_are_the_system_administrator_please_refer_to_the_official_product_documentation_readme_for_configuration_guidance": "Wenn Sie der Systemadministrator sind, finden Sie Konfigurationsanweisungen in der offiziellen Produktdokumentation / README.",
"main_page_text": "Hier können Sie sich für den Lauf Für Kaya! registrieren oder ihr Läuferprofil verwalten.", "imprint": "Impressum",
"mittelname": "Mittelname", "lap_time": "Rundenzeit",
"nachname": "Nachname", "lap_times": "Rundenzeiten",
"no_laps_scans_were_recorded_yet": "Es wurden noch keine Runden / Scans aufgezeichnet ...", "lost_your_registration_mail": "Haben Sie Ihre Registrierungsmail verloren?",
"ort": "Ort", "main_page_text": "Hier können Sie sich für den Lauf Für Kaya! registrieren oder ihr Läuferprofil verwalten.",
"phone_number": "Telefonnummer", "mittelname": "Mittelname",
"please_provide_a_valid_zipcode": "Bitte geben Sie eine gültige Postleitzahl an...", "nachname": "Nachname",
"please_provide_valid_mail": "Bitte geben Sie eine gültige E-Mail Adresse an", "no_laps_scans_were_recorded_yet": "Es wurden noch keine Runden / Scans aufgezeichnet ...",
"plz": "PLZ", "no_sponsorings_for_you_were_recorded_yet": "Es gibt noch keine Sponsorings für dich",
"privacy_policy": "Datenschutzerklärung", "not_registered_yet": "Noch nicht registriert?",
"profile": "Profil", "organization": "Organisation",
"provide_address": "Adresse angeben?", "ort": "Ort",
"register": { "phone_number": "Telefonnummer",
"register_now": "Jetzt für den Lauf für Kaya! 2021 registrieren." "please_provide_a_valid_zipcode": "Bitte geben Sie eine gültige Postleitzahl an...",
}, "please_provide_valid_mail": "Bitte geben Sie eine gültige E-Mail Adresse an",
"register_now": "Jetzt registrieren!", "plz": "PLZ",
"registrieren": "Registrieren", "privacy_policy": "Datenschutzerklärung",
"save_changes": "Änderungen speichern", "profile": "Profil",
"sponsoring": "Sponsoring", "provide_address": "Adresse angeben?",
"strasse": "Straße", "register": {
"the_system_is_not_properly_configured_please_contact_the_system_administrator_for_help": "Das System ist nicht richtig konfiguriert. Bitte wenden Sie sich an den Systemadministrator, um Hilfe zu erhalten.", "register_now": "Jetzt für den Lauf für Kaya! 2021 registrieren."
"this_is_not_a_valid_international_phone_number": "Dies ist keine gültige internationale Telefonnummer", },
"tos": "AGBs", "register_now": "Jetzt registrieren!",
"view_my_data": "Meine Läuferdaten einsehen", "register_now_small": "Jetzt registrieren",
"vorname": "Vorname" "registrieren": "Registrieren",
"resend_the_registration_mail": "Registrierungsmail erneut versenden",
"save_changes": "Änderungen speichern",
"sponsoring": "Sponsoring",
"strasse": "Straße",
"the_system_is_not_properly_configured_please_contact_the_system_administrator_for_help": "Das System ist nicht richtig konfiguriert. Bitte wenden Sie sich an den Systemadministrator, um Hilfe zu erhalten.",
"this_is_not_a_valid_international_phone_number": "Dies ist keine gültige internationale Telefonnummer",
"tos": "AGBs",
"view_my_data": "Meine Läuferdaten einsehen",
"vorname": "Vorname",
"you_have_been_registered": "Sie wurden registriert!",
"you_have_not_provided_a_valid_access_key": "Sie haben keinen gültigen Zugangsschlüssel angegeben...",
"total": "Gesamt"
} }

View File

@@ -1,48 +1,58 @@
{ {
"all_data_deleted": "All Data deleted!", "access_is_only_provided_via_your_email_link": "Access is only provided via the link you received upon registration.",
"already_have_an_account": "Already have an account?", "all_data_deleted": "All Data deleted!",
"apartment_suite_etc": "Apartment, suite, etc.", "already_have_an_account": "Already have an account?",
"cancel_keep_my_data": "Cancel, keep my data", "amount_per_kilometer_in_eur": "Amount per kilometer (in €)",
"configuration_error": "Configuration error", "apartment_suite_etc": "Apartment, suite, etc.",
"confirm_delete_all_of_my_data": "Confirm, delete all of my data", "cancel_keep_my_data": "Cancel, keep my data",
"confirm_personal_data": "I hereby confirm that the above information is complete and correct", "configuration_error": "Configuration error",
"delete_my_data": "Delete my data", "confirm_delete_all_of_my_data": "Confirm, delete all of my data",
"deletion_in_progress": "Deletion in progress...", "confirm_personal_data": "I hereby confirm that the above information is complete and correct",
"distance": "Distance", "current_total_amount_in_eur": "Current total amount (in €)",
"download_certificate": "Download certificate", "delete_my_data": "Delete my data",
"e_mail_adress": "mail address", "deletion_in_progress": "Deletion in progress...",
"go_to_login": "Go To Login", "distance": "Distance",
"i_accept": "I have read and accepted the ", "download_certificate": "Download certificate",
"i_accept_end": "", "e_mail_adress": "mail address",
"if_you_are_the_system_administrator_please_refer_to_the_official_product_documentation_readme_for_configuration_guidance": "If you are the system administrator, please refer to the official product documentation/ README for configuration guidance.", "go_to_login": "Go To Login",
"imprint": "Imprint", "i_accept": "I have read and accepted the ",
"lap_time": "Lap time", "i_accept_end": "",
"lap_times": "Lap times", "if_you_are_the_system_administrator_please_refer_to_the_official_product_documentation_readme_for_configuration_guidance": "If you are the system administrator, please refer to the official product documentation/ README for configuration guidance.",
"main_page_text": "Here you can register for the Lauf Für Kaya! or manage your runner profile.", "imprint": "Imprint",
"mittelname": "Middlename", "lap_time": "Lap time",
"nachname": "Lastname", "lap_times": "Lap times",
"no_laps_scans_were_recorded_yet": "No laps/ scans were recorded yet...", "lost_your_registration_mail": "Lost your registration mail?",
"organization": "Organization", "main_page_text": "Here you can register for the Lauf Für Kaya! or manage your runner profile.",
"ort": "City", "mittelname": "Middlename",
"phone_number": "Phone Number", "nachname": "Lastname",
"please_provide_a_valid_zipcode": "Please provide a valid zipcode...", "no_laps_scans_were_recorded_yet": "No laps/ scans were recorded yet...",
"please_provide_valid_mail": "Please provide a valid mail address.", "no_sponsorings_for_you_were_recorded_yet": "No sponsorings for you were recorded yet...",
"plz": "zipcode", "not_registered_yet": "Not registered yet?",
"privacy_policy": "Privacy Policy", "organization": "Organization",
"profile": "Profile", "ort": "City",
"provide_address": "Provide a postal address?", "phone_number": "Phone Number",
"register": { "please_provide_a_valid_zipcode": "Please provide a valid zipcode...",
"register_now": "Register now for Lauf für Kaya! 2021." "please_provide_valid_mail": "Please provide a valid mail address.",
}, "plz": "zipcode",
"register_now": "Register now!", "privacy_policy": "Privacy Policy",
"registrieren": "Register Now", "profile": "Profile",
"save_changes": "Save changes", "provide_address": "Provide a postal address?",
"sponsoring": "Sponsoring", "register": {
"strasse": "Street/ Block", "register_now": "Register now for Lauf für Kaya! 2021."
"the_system_is_not_properly_configured_please_contact_the_system_administrator_for_help": "The system is not properly configured. Please contact the system administrator for help.", },
"this_is_not_a_valid_international_phone_number": "This is not a valid international phone number", "register_now": "Register now!",
"tos": "Terms of Service", "register_now_small": "Register now",
"view_my_data": "View my data", "registrieren": "Register Now",
"vorname": "Firstname", "resend_the_registration_mail": "Resend the registration mail",
"you_have_been_registered": "You have been registered!" "save_changes": "Save changes",
"sponsoring": "Sponsoring",
"strasse": "Street/ Block",
"the_system_is_not_properly_configured_please_contact_the_system_administrator_for_help": "The system is not properly configured. Please contact the system administrator for help.",
"this_is_not_a_valid_international_phone_number": "This is not a valid international phone number",
"tos": "Terms of Service",
"view_my_data": "View my data",
"vorname": "Firstname",
"you_have_been_registered": "You have been registered!",
"you_have_not_provided_a_valid_access_key": "You have not provided a valid access key...",
"total": "Total"
} }

View File

@@ -11,10 +11,10 @@
<div class="mt-6 sm:flex place-content-center"> <div class="mt-6 sm:flex place-content-center">
<a <a
class="w-full sm:w-auto inline-flex px-6 py-3 border border-transparent text-base font-semibold rounded-md text-gray-900 bg-white shadow-sm hover:text-gray-600 focus:outline-none focus:text-gray-600 transition ease-in-out duration-150 xl:text-lg xl:py-4" class="w-full sm:w-auto inline-flex px-6 py-3 border border-transparent text-base font-semibold rounded-md text-gray-900 bg-white shadow-sm hover:text-gray-600 focus:outline-none focus:text-gray-600 transition ease-in-out duration-150 xl:text-lg xl:py-4"
href="./register" href="./register/"
>{{ $t('register_now') }}</a> >{{ $t('register_now') }}</a>
<a <a
href="./profile" href="./profile/"
class="mt-4 sm:ml-4 sm:mt-0 w-full sm:w-auto inline-flex px-6 py-3 border border-transparent text-base font-semibold rounded-md text-white bg-gray-800 shadow-sm hover:bg-gray-700 focus:outline-none focus:bg-gray-700 transition ease-in-out duration-150 xl:text-lg xl:py-4" class="mt-4 sm:ml-4 sm:mt-0 w-full sm:w-auto inline-flex px-6 py-3 border border-transparent text-base font-semibold rounded-md text-white bg-gray-800 shadow-sm hover:bg-gray-700 focus:outline-none focus:bg-gray-700 transition ease-in-out duration-150 xl:text-lg xl:py-4"
>{{ $t('view_my_data') }}</a> >{{ $t('view_my_data') }}</a>
</div> </div>

View File

@@ -16,6 +16,7 @@
<button <button
type="button" type="button"
class="focus:border-black focus:ring-2 focus:ring-black text-white text-sm py-2.5 px-5 rounded-md bg-blue-500 hover:bg-blue-600 hover:shadow-lg" class="focus:border-black focus:ring-2 focus:ring-black text-white text-sm py-2.5 px-5 rounded-md bg-blue-500 hover:bg-blue-600 hover:shadow-lg"
@click="get_certificate"
> >
<svg <svg
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
@@ -215,7 +216,7 @@
<tbody class="text-gray-900 dark:text-gray-50"> <tbody class="text-gray-900 dark:text-gray-50">
<tr v-for="s in state.scans" :key="s.id"> <tr v-for="s in state.scans" :key="s.id">
<td class="px-4 py-3"> <td class="px-4 py-3">
<span v-text="s.distance"></span>m <span v-text="s.distance"></span>
</td> </td>
<td class="px-4 py-3" v-text="s.lapTime"></td> <td class="px-4 py-3" v-text="s.lapTime"></td>
</tr> </tr>
@@ -235,7 +236,88 @@
</div> </div>
</div> </div>
<div v-if="(state.activetab === 'sponsorings')" class="tab-content block"> <div v-if="(state.activetab === 'sponsorings')" class="tab-content block">
<div class="py-4 w-full">coming soon...</div> <div class="py-4 w-full">
<section class="text-gray-400 dark:bg-gray-900 body-font">
<div class="container mx-auto">
<div class="lg:w-2/3 w-full mx-auto overflow-auto">
<table
v-if="state.sponsorings.length > 0"
class="table-auto w-full text-left whitespace-no-wrap"
>
<thead
class="text-black bg-gray-300 dark:text-white text-sm dark:bg-gray-800"
>
<tr>
<th class="px-4 py-3 title-font tracking-wider font-medium">Name</th>
<th
class="px-4 py-3 title-font tracking-wider font-medium"
>{{ $t('amount_per_kilometer_in_eur') }}</th>
<th
class="px-4 py-3 title-font tracking-wider font-medium"
>{{ $t('current_total_amount_in_eur') }}</th>
</tr>
</thead>
<tbody class="text-gray-900 dark:text-gray-50">
<tr v-for="s in state.sponsorings" :key="s.id">
<td class="px-4 py-3">
<span v-text="s.donor.firstname"></span>
<span v-if="s.donor.middlename">
<span v-text="s.donor.middlename"></span>
</span>
<span v-text="s.donor.lastname"></span>
</td>
<td class="px-4 py-3">
<span
v-text="(s.amountPerDistance / 100)
.toFixed(2)
.toLocaleString('de-DE', { valute: 'EUR' })"
></span>€
</td>
<td class="px-4 py-3">
<span
v-text="(s.amount / 100)
.toFixed(2)
.toLocaleString('de-DE', { valute: 'EUR' })"
></span>€
</td>
</tr>
</tbody>
<tfoot class="text-gray-900 dark:text-gray-50">
<tr>
<td class="px-4 py-3">{{ $t('total') }}</td>
<td class="px-4 py-3">
<span
v-text="(state.sponsorings.reduce(function(sum, current) {
return sum + current.amountPerDistance;
}, 0) / 100)
.toFixed(2)
.toLocaleString('de-DE', { valute: 'EUR' })"
></span>€
</td>
<td class="px-4 py-3">
<span
v-text="(state.sponsorings.reduce(function(sum, current) {
return sum + current.amount;
}, 0) / 100)
.toFixed(2)
.toLocaleString('de-DE', { valute: 'EUR' })"
></span>€
</td>
</tr>
</tfoot>
</table>
<div v-else class="text-center font-bold text-black dark:text-white text-2xl">
<img
src="../assets/empty_laps.svg"
style="height:25rem; margin:0 auto;"
:alt="[[$t('no_sponsorings_for_you_were_recorded_yet')]]"
/>
{{ $t('no_sponsorings_for_you_were_recorded_yet') }}
</div>
</div>
</div>
</section>
</div>
</div> </div>
</div> </div>
</div> </div>
@@ -255,9 +337,11 @@ const state = reactive({
middlename: "", middlename: "",
lastname: "", lastname: "",
scans: [], scans: [],
sponsorings: [],
group: "", group: "",
activetab: "profile", activetab: "profile",
delete_active: false, delete_active: false,
fullobject: {}
}) })
const toast = useToast(); const toast = useToast();
const props = defineProps({ const props = defineProps({
@@ -272,6 +356,8 @@ axios.get(`${config.baseurl}api/runners/me/${accesstoken}`)
state.middlename = data.middlename; state.middlename = data.middlename;
state.lastname = data.lastname; state.lastname = data.lastname;
state.group = data.group; state.group = data.group;
state.sponsorings = data.distanceDonations;
state.fullobject = data;
}).catch((error) => { }).catch((error) => {
toast.error("An error occured while loading your profile data"); toast.error("An error occured while loading your profile data");
}) })
@@ -279,6 +365,7 @@ axios.get(`${config.baseurl}api/runners/me/${accesstoken}/scans`)
.then(({ data }) => { .then(({ data }) => {
data.map(function(s) { data.map(function(s) {
s.lapTime = Math.floor(s.lapTime / 60) + 'min ' + (Math.floor(s.lapTime % 60) + "").padStart(2, "0") + "s" s.lapTime = Math.floor(s.lapTime / 60) + 'min ' + (Math.floor(s.lapTime % 60) + "").padStart(2, "0") + "s"
s.distance = Math.floor(s.distance / 1000) + 'km ' + (Math.floor(s.distance % 1000) + "").padStart(3, "0") + "m"
return s; return s;
}) })
data.filter(s => s.valid === true); data.filter(s => s.valid === true);
@@ -298,4 +385,38 @@ function delete_me() {
toast.error("An error occured while deleting your profile data"); toast.error("An error occured while deleting your profile data");
}); });
} }
function get_certificate() {
toast("Generation in progress...");
const browserlocale = ((navigator.languages && navigator.languages[0]) || '').substr(0, 2);
let url = `${config.baseurl}documents/certificates?locale=${browserlocale}&download=true&key=${config.documentserver_key}`;
let postdata = Object.assign({}, state.fullobject);
postdata.group = {
name: postdata.group
}
postdata = [postdata]
axios.post(url, postdata, {
responseType: "blob"
})
.then((response) => {
console.log(response)
if (response.status != "200") {
toast.error("An error occured while generateing your certificate!");
} else {
var fileURL = window.URL.createObjectURL(new Blob([response.data], { type: 'application/pdf' }));
var fileLink = document.createElement('a');
fileLink.href = fileURL;
fileLink.setAttribute('download', 'Certificate.pdf');
document.body.appendChild(fileLink);
fileLink.click();
fileLink.remove();
toast("Document generated!");
}
})
.catch((err) => {
console.error(err);
toast.error("An error occured while deleting your profile data");
});
}
</script> </script>

View File

@@ -1 +1,104 @@
<template>You have not provided a valid access key...</template> <template>
<div class="min-h-screen flex items-center justify-center">
<div class="max-w-md w-full py-12 px-6">
<img class="mx-auto h-24 w-auto" src="/favicon.png" alt />
<h1
class="sm:text-3xl text-2xl font-medium title-font mb-4 text-center"
>Lauf für Kaya! - {{ $t('profile') }}</h1>
<p class="mx-auto leading-relaxed text-base text-center">
{{ $t('you_have_not_provided_a_valid_access_key') }}
<br />
{{ $t('access_is_only_provided_via_your_email_link') }}
</p>
<div class="mt-6">
<div class="relative">
<div class="absolute inset-0 flex items-center">
<div class="w-full border-t border-gray-300"></div>
</div>
<div class="relative flex justify-center text-sm">
<span
class="px-2 bg-white dark:bg-gray-900"
>{{ $t('lost_your_registration_mail') }}</span>
</div>
</div>
<div class="mt-4">
<label for="email_address" class="block font-medium">
{{ $t('e_mail_adress') }}
<span class="font-bold">*</span>
</label>
<input
v-model="user_email"
name="email_address"
id="email_address"
autocomplete="off"
:placeholder="[[$t('e_mail_adress')]]"
type="email"
:class="{ 'border-red-500': (!isEmail(user_email)), 'border-green-300': (isEmail(user_email)) }"
class="dark:bg-gray-800 mt-1 block w-full shadow-sm sm:text-sm border-2 bg-gray-50 text-gray-500 rounded-md p-2"
/>
<p
v-if="!isEmail(user_email)"
class="text-sm"
>{{ $t('please_provide_valid_mail') }}</p>
</div>
<div class="mt-2">
<a
:disabled="(!state.submit_enabled)"
:class="{ 'opacity-50': (!state.submit_enabled), 'cursor-not-allowed': (!state.submit_enabled) }"
@click="resendMail"
class="block w-full text-center py-2 px-3 border-2 border-gray-300 rounded-md p-1 dark:bg-gray-800 font-medium hover:border-gray-400 focus:outline-none focus:border-gray-400 sm:text-sm"
>{{ $t('resend_the_registration_mail') }}</a>
</div>
</div>
<div class="mt-12">
<div class="relative">
<div class="absolute inset-0 flex items-center">
<div class="w-full border-t border-gray-300"></div>
</div>
<div class="relative flex justify-center text-sm">
<span class="px-2 bg-white dark:bg-gray-900">{{ $t('not_registered_yet') }}</span>
</div>
</div>
<div class="mt-2">
<a
href="./register/"
class="text-white block w-full text-center py-2 px-3 border-2 border-gray-300 rounded-md p-1 bg-blue-800 font-medium hover:border-gray-400 focus:outline-none focus:border-gray-400 sm:text-sm"
>{{ $t('register_now_small') }}</a>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { computed, ref, reactive, defineProps } from "vue";
import axios from "redaxios";
import isEmail from 'validator/es/lib/isEmail';
import isMobilePhone from 'validator/es/lib/isMobilePhone';
import isPostalCode from 'validator/es/lib/isPostalCode';
import { useToast } from "vue-toastification";
let user_email = ref("");
//
const state = reactive({
org_name: "",
org_teams: [],
submit_enabled: computed(() => isEmail(user_email.value))
})
const toast = useToast();
function resendMail() {
if (isEmail(user_email.value)) {
toast("sending password reset mail...");
const browserlocale = ((navigator.languages && navigator.languages[0]) || '').substr(0, 2);
axios.post(`${config.baseurl}api/runners/forgot?mail=${user_email.value}&locale=${browserlocale}`)
.then(({ data }) => {
console.log(data);
toast("sent password reset mail to " + user_email.value + "!");
})
.catch((error) => {
console.log(error);
toast("user does not exist...");
});
}
}
</script>