Compare commits

..

No commits in common. "306fef3e07aefe3d5a64ca35d082c32a0dbdb11b" and "b67fa85539914a6f4bc55ed59cb604e74950bc27" have entirely different histories.

20 changed files with 40 additions and 120 deletions

View File

@ -5,11 +5,10 @@ RUN composer install --ignore-platform-reqs --no-dev
RUN php artisan telescope:publish
RUN php artisan horizon:publish
FROM node:20.15.0-slim as node
FROM node:18.13.0-slim as node
WORKDIR /app
COPY . /app
RUN cd packages/adrema-form && npm ci && npm run build && rm -R node_modules && cd ../../
RUN npm ci && npm run prod && npm run img && rm -R node_modules
RUN npm install && npm run prod && npm run img && rm -R node_modules
FROM nginx:1.21.6-alpine as nginx
WORKDIR /app

View File

@ -3,11 +3,10 @@ WORKDIR /app
COPY . /app
RUN composer install --ignore-platform-reqs --no-dev
FROM node:20.15.0-slim as node
FROM node:17.9.0-slim as node
WORKDIR /app
COPY . /app
RUN cd packages/adrema-form && npm ci && npm run build && rm -R node_modules && cd ../../
RUN npm ci && npm run prod && npm run img && rm -R node_modules
RUN npm install && npm run prod && npm run img && rm -R node_modules
FROM zoomyboy/adrema-base:latest as php
COPY --chown=www-data:www-data . /app
@ -21,7 +20,7 @@ RUN php artisan horizon:publish
USER root
COPY ./.docker/php /bin
VOLUME ["/app/packages/laravel-nami/.cookies", "/app/storage/app", "/app/resources/views/tex/invoice"]
VOLUME ["/app/packages/laravel-nami/.cookies", "/app/storage/app"]
EXPOSE 9000

View File

@ -15,11 +15,6 @@ mkdir -p /app/storage/app/public || true
chown -R www-data:www-data /app/packages/laravel-nami/.cookies
chown -R www-data:www-data /app/storage/app
if [ $APP_KEY = "YOUR_APP_KEY" ]; then
echo "----------------------- Keinen APP KEY gefunden. Key wird generiert: $(su www-data -c 'php artisan key:generate --show') ----------------------- Füge diesen Key als APP_KEY ein ---------------------"
exit 1
fi
if [ $1 == "horizon" ]; then
wait_for_db
su www-data -c 'php artisan horizon'
@ -27,6 +22,10 @@ fi
if [ $1 == "app" ]; then
# --------------------------- ensure appkey is set ----------------------------
if [ $APP_KEY = "YOUR_APP_KEY" ]; then
echo "----------------------- Keinen APP KEY gefunden. Key wird generiert: $(su www-data -c 'php artisan key:generate --show') ----------------------- Füge diesen Key als APP_KEY ein ---------------------"
exit 1
fi
wait_for_db
php -r '$connection = new PDO("mysql:host='$DB_HOST';dbname='$DB_DATABASE'", "'$DB_USERNAME'", "'$DB_PASSWORD'"); $connection->query("DESCRIBE migrations");' > /dev/null || php artisan migrate --seed --force
su www-data -c 'php artisan migrate --force'

View File

@ -32,9 +32,9 @@ steps:
- while ! curl --silent 'http://owncloudserver:8080/ocs/v1.php/cloud/capabilities?format=json' -u admin:admin | grep '"status":"ok"'; do sleep 1; done
- name: node
image: node:20.15.0-slim
image: node:18.13.0-slim
commands:
- npm ci && cd packages/adrema-form && npm ci && npm run build && rm -R node_modules && cd ../../ && npm run img && npm run prod && rm -R node_modules
- npm ci && cd packages/adrema-form && npm ci && npm run build && cd ../../ && npm run img && npm run prod && rm -R node_modules
- name: tests
image: zoomyboy/adrema-base:latest

3
.gitmodules vendored
View File

@ -1,3 +1,6 @@
[submodule "packages/silvaletter"]
path = packages/silvaletter
url = https://git.zoomyboy.de/silva/silvaletter.git
[submodule "packages/laravel-nami"]
path = packages/laravel-nami
url = https://git.zoomyboy.de/silva/laravel-nami-api

View File

@ -85,12 +85,6 @@ Außerdem ist AdReMa auch problemlos auf Handys und Tablets bedienbar ("mobiles
7. Nach kurzer Zeit ist AdReMa über <http://localhost:8000> erreichbar und es kann sich mit dem zuvor festgelegten Login eingeloggt werden
### Individuelle anpassungen
#### Rechnungswesen
Bei dem Setup wird im Daten-Verzeichniss ein Ordner `./data/setup` angelegt. Hier kann das Logo des Stammes in den Briefkopf eingefügt werden. Zusätzlich kann der Text der Rechnung und der Zahlungserinnerung angepasst werden, dafür ist ein grundlegendes Verständnis für `.tex` Datein erforderlich.
## Nutzen des Entwicklungssystmes
1. Klonen des Reposetories

View File

@ -15,6 +15,6 @@ class BillDocument extends InvoiceDocument
public function view(): string
{
return 'tex.invoice.bill';
return 'tex.bill';
}
}

View File

@ -64,7 +64,7 @@ abstract class InvoiceDocument extends Document
public function template(): Template
{
return Template::make('tex.templates.invoice');
return Template::make('tex.templates.default');
}
public function setFilename(string $filename): self

View File

@ -15,6 +15,6 @@ class RememberDocument extends InvoiceDocument
public function view(): string
{
return 'tex.invoice.remember';
return 'tex.remember';
}
}

View File

@ -355,10 +355,6 @@ class Member extends Model implements Geolocatable
$preventions[] = Prevention::EFZ;
}
if (!$this->has_vk) {
$preventions[] = Prevention::VK;
}
if ($this->more_ps_at === null) {
if ($this->ps_at === null || $this->ps_at->diffInYears($date) >= 5) {
$preventions[] = Prevention::PS;

View File

@ -7,7 +7,6 @@ enum Prevention
case EFZ;
case PS;
case MOREPS;
case VK;
public function text(): string
{
@ -15,7 +14,6 @@ enum Prevention
static::EFZ => 'erweitertes Führungszeugnis',
static::PS => 'Präventionsschulung Basis Plus',
static::MOREPS => 'Präventionsschulung (Auffrischung)',
static::VK => 'Verhaltenskodex',
};
}
}

View File

@ -34,7 +34,6 @@ services:
- ./data/storage:/app/storage/app
- ./data/plugins:/app/plugins
- ./data/cookies:/app/packages/laravel-nami/.cookies
- ./data/invoice:/app/resources/views/tex/invoice
horizon:
image: zoomyboy/adrema-app:latest
@ -58,7 +57,6 @@ services:
- ./data/storage:/app/storage/app
- ./data/plugins:/app/plugins
- ./data/cookies:/app/packages/laravel-nami/.cookies
- ./data/invoice:/app/resources/views/tex/invoice
schedule:
image: zoomyboy/adrema-app:latest
@ -82,7 +80,6 @@ services:
- ./data/storage:/app/storage/app
- ./data/plugins:/app/plugins
- ./data/cookies:/app/packages/laravel-nami/.cookies
- ./data/invoice:/app/resources/views/tex/invoice
db:
image: mariadb:10.6.5

1
packages/silvaletter Submodule

@ -0,0 +1 @@
Subproject commit 409cbaf4639d20aea52caa8e2136ffbcf9d4c7cc

View File

@ -67,7 +67,7 @@
v-model="values.params.inGrp"
label="In Gruppierung suchen"
name="inGrp"
hint="Mitglieder finden, die direktes Mitglied in der kleinsten ausgewählten Gruppierung sind."
hint="Mitglieder finden, die direktes Mitglied in der kleinsten befüllten Gruppierung sind."
size="sm"
@update:modelValue="search"
></f-switch>
@ -76,7 +76,7 @@
v-model="values.params.unterhalbGrp"
label="Unterhalb Gruppierung suchen"
name="unterhalbGrp"
hint="Mitglieder finden, die direktes Mitglied in einer Untergruppe der kleinsten ausgewählten Gruppierung sind."
hint="Mitglieder finden, die direktes Mitglied in einer Untergruppe der kleinsten befüllten Gruppierung sind."
size="sm"
@update:modelValue="search"
></f-switch>
@ -141,6 +141,7 @@ import hasFlash from '../../mixins/hasFlash.js';
import debounce from 'lodash/debounce';
export default {
mixins: [hasFlash],
layout: FullLayout,

View File

@ -1,24 +1,14 @@
\documentclass[dpsgletter,12pt]{scrlttr2}
\documentclass[silvaletter,12pt]{scrlttr2}
\setkomavar{subject}{<<< $getSubject >>>}
\setkomavar{fromname}[<<<$settings->from>>>]{<<<$settings->from_long>>>}
@if($settings->mobile)
\KOMAoptions{frommobilephone}
\setkomavar{frommobilephone}[Mobiltelefon: ]{<<<$settings->mobile>>>}
@endif
@if($settings->email)
\KOMAoptions{fromemail}
\setkomavar{fromemail}[E-Mail: ]{<<<$settings->email>>>}
@endif
@if($settings->website)
\KOMAoptions{fromurl}
\setkomavar{fromurl}[Website: ]{<<<$settings->website>>>}
@endif
@if($settings->address && $settings->zip && $settings->place)
\setkomavar{fromaddress}{<<<$settings->address>>>\\<<<$settings->zip>>> <<<$settings->place>>>}
\setkomavar{fromaddress}{<<<$settings->address>>>}
\setkomavar{place}{<<<$settings->place>>>}
\setkomavar{fromzipcode}{<<<$settings->zip>>>}
@endif
\setkomavar{fromlogo}{\includegraphics[width=2cm]{logo.png}} % stammeslogo
\begin{document}
\begin{letter}{<<< $toName >>>\\<<< $toAddress >>>\\<<< $toZip >>> <<< $toLocation >>>}
@ -26,7 +16,7 @@
\gdef\TotalHT{0}
\opening{<<< $greeting >>>,}
hiermit stellen wir Ihnen den aktuellen Mitgliedsbeitrag für den \usekomavar*{fromname} und die DPSG in Rechnung. Dieser setzt sich wie folgt zusammen:
Hiermit stellen wir Ihnen den aktuellen Mitgliedsbeitrag für den \usekomavar*{fromname} und die DPSG in Rechnung. Dieser setzt sich wie folgt zusammen:
\begin{center}
\begin{tabular}{@{}p{0.8\textwidth}|r}
@ -43,7 +33,7 @@
\begin{tabular}{ll}
Kontoinhaber: & <<<$settings->from_long>>> \\
IBAN: & <<<$settings->iban>>> \\
BIC: & <<<$settings->bic>>> \\
Bic: & <<<$settings->bic>>> \\
Verwendungszweck: & <<<$usage>>>
\end{tabular}

View File

@ -1,24 +1,14 @@
\documentclass[dpsgletter,12pt]{scrlttr2}
\documentclass[silvaletter,12pt]{scrlttr2}
\setkomavar{subject}{<<< $getSubject >>>}
\setkomavar{fromname}[<<<$settings->from>>>]{<<<$settings->from_long>>>}
@if($settings->mobile)
\KOMAoptions{frommobilephone}
\setkomavar{frommobilephone}[Mobiltelefon: ]{<<<$settings->mobile>>>}
@endif
@if($settings->email)
\KOMAoptions{fromemail}
\setkomavar{fromemail}[E-Mail: ]{<<<$settings->email>>>}
@endif
@if($settings->website)
\KOMAoptions{fromurl}
\setkomavar{fromurl}[Website: ]{<<<$settings->website>>>}
@endif
@if($settings->address && $settings->zip && $settings->place)
\setkomavar{fromaddress}{<<<$settings->address>>>\\<<<$settings->zip>>> <<<$settings->place>>>}
\setkomavar{fromaddress}{<<<$settings->address>>>}
\setkomavar{place}{<<<$settings->place>>>}
\setkomavar{fromzipcode}{<<<$settings->zip>>>}
@endif
\setkomavar{fromlogo}{\includegraphics[width=2cm]{logo.png}} % stammeslogo
\begin{document}
\begin{letter}{<<< $toName >>>\\<<< $toAddress >>>\\<<< $toZip >>> <<< $toLocation >>>}
@ -26,7 +16,7 @@
\gdef\TotalHT{0}
\opening{<<< $greeting >>>,}
ihr Mitgliedbeitrag ist noch ausstehend. Dieser setzt sich wie folgt zusammen:
Ihr Mitgliedbeitrag ist noch ausstehend. Dieser setzt sich wie folgt zusammen:
\begin{center}
\begin{tabular}{@{}p{0.8\textwidth}|r}
@ -43,7 +33,7 @@
\begin{tabular}{ll}
Kontoinhaber: & <<<$settings->from_long>>> \\
IBAN: & <<<$settings->iban>>> \\
BIC: & <<<$settings->bic>>> \\
Bic: & <<<$settings->bic>>> \\
Verwendungszweck: & <<<$usage>>>
\end{tabular}

View File

@ -0,0 +1 @@
../../../../packages/silvaletter/template

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

View File

@ -1,43 +0,0 @@
\ProvidesFile{dpsgletter.lco}
% ---------------------------- Require packages ----------------------------
\RequirePackage{xcolor}
\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}
\RequirePackage[ngerman]{babel}
\RequirePackage{fp}
\RequirePackage{booktabs}
\RequirePackage{ragged2e}
\RequirePackage{graphicx}
\RequirePackage{numprint}
\RequirePackage[gen]{eurosym}
\RequirePackage[condensed,math]{kurier}
% ---------------------------- Color definition ----------------------------
\definecolor{dpsgblue}{HTML}{003056}
% ----------------------------- font settings ------------------------------
\addtokomafont{subject}{\large\color{dpsgblue}}
% -------------------------- Calculation of table --------------------------
\gdef\TotalHT{0}
\newcommand{\product}[2]{%
#1 & \FPmul\temp{#2}{1}\FPround\temp{\temp}{2}\numprint[\euro]{\temp}
%% Totalize
\FPadd\total{\TotalHT}{\temp}%
\FPround\total{\total}{2}%
\global\let\TotalHT\total%
\\ }
\newcommand{\totalttc}{\numprint[\euro]{\TotalHT}
}
% ---------------------------- Global variables ----------------------------
\KOMAoptions{DIV=15, pagenumber=no, enlargefirstpage, firstfoot=false, foldmarks, fromlogo, fromalign=right}
\setlength{\parindent}{0pt}
\setlength{\parskip}{10pt}
\setkomavar{backaddressseparator}{ $\cdot$ }
\setkomavar{fromlogo}{\includegraphics[height=3cm]{assets/logo.png}} % stammeslogo
\renewcommand*{\raggedsignature}{\raggedright} % Signatur links ausrichten
\setkomavar{signature}{} % Kein From unter Unterschriften-Feld

View File

@ -111,49 +111,44 @@ class PreventionTest extends TestCase
protected function attributes(): Generator
{
yield [
'attrs' => ['has_vk' => true, 'efz' => null, 'ps_at' => now()],
'attrs' => ['efz' => null, 'ps_at' => now()],
'preventions' => [Prevention::EFZ]
];
yield [
'attrs' => ['has_vk' => true, 'efz' => now(), 'ps_at' => null],
'attrs' => ['efz' => now(), 'ps_at' => null],
'preventions' => [Prevention::PS]
];
yield [
'attrs' => ['has_vk' => true, 'efz' => now()->subDay(), 'ps_at' => now()],
'attrs' => ['efz' => now()->subDay(), 'ps_at' => now()],
'preventions' => []
];
yield [
'attrs' => ['has_vk' => true, 'efz' => now(), 'ps_at' => now()->subDay()],
'attrs' => ['efz' => now(), 'ps_at' => now()->subDay()],
'preventions' => []
];
yield [
'attrs' => ['has_vk' => true, 'efz' => now()->subYears(5)->subDay(), 'ps_at' => now()],
'attrs' => ['efz' => now()->subYears(5)->subDay(), 'ps_at' => now()],
'preventions' => [Prevention::EFZ]
];
yield [
'attrs' => ['has_vk' => true, 'efz' => now(), 'ps_at' => now()->subYears(5)->subDay()],
'attrs' => ['efz' => now(), 'ps_at' => now()->subYears(5)->subDay()],
'preventions' => [Prevention::PS]
];
yield [
'attrs' => ['has_vk' => true, 'efz' => now(), 'ps_at' => now()->subYears(5)->subDay(), 'more_ps_at' => now()],
'attrs' => ['efz' => now(), 'ps_at' => now()->subYears(5)->subDay(), 'more_ps_at' => now()],
'preventions' => []
];
yield [
'attrs' => ['has_vk' => true, 'efz' => now(), 'ps_at' => now()->subYears(15), 'more_ps_at' => now()->subYears(5)->subDay()],
'attrs' => ['efz' => now(), 'ps_at' => now()->subYears(15), 'more_ps_at' => now()->subYears(5)->subDay()],
'preventions' => [Prevention::MOREPS],
];
yield [
'attrs' => ['has_vk' => false, 'efz' => now(), 'ps_at' => now()],
'preventions' => [Prevention::VK],
];
}
/**