Compare commits
No commits in common. "306fef3e07aefe3d5a64ca35d082c32a0dbdb11b" and "b67fa85539914a6f4bc55ed59cb604e74950bc27" have entirely different histories.
306fef3e07
...
b67fa85539
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -15,6 +15,6 @@ class BillDocument extends InvoiceDocument
|
|||
|
||||
public function view(): string
|
||||
{
|
||||
return 'tex.invoice.bill';
|
||||
return 'tex.bill';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -15,6 +15,6 @@ class RememberDocument extends InvoiceDocument
|
|||
|
||||
public function view(): string
|
||||
{
|
||||
return 'tex.invoice.remember';
|
||||
return 'tex.remember';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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',
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 409cbaf4639d20aea52caa8e2136ffbcf9d4c7cc
|
|
@ -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,
|
||||
|
||||
|
|
|
@ -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}
|
||||
|
|
@ -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}
|
||||
|
|
@ -0,0 +1 @@
|
|||
../../../../packages/silvaletter/template
|
Binary file not shown.
Before Width: | Height: | Size: 64 KiB |
|
@ -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
|
||||
|
|
@ -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],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue