diff --git a/.gitignore b/.gitignore index af3d87c..fb8447e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,12 @@ *.bak *~ -_tables.php -_globals.php -_cfg.php +cfg/_tables.php +cfg/_globals.php +cfg/_cfg.php +db_data/ /logs +node_modules/ +playwright-report/ +test-results/ .agents/* skills-lock.json diff --git a/Docs/Development.md b/Docs/Development.md index a868a6a..3eb4fd9 100644 --- a/Docs/Development.md +++ b/Docs/Development.md @@ -1,66 +1,134 @@ -# Jak si postavit vlastní prostředí: - -* naklonuj [repo](https://github.com/arnost00/members) do pracovního adresáře ( můžeš potřebovat [git windows klient](https://git-scm.com/downloads/win) ) -* nainstaluj docker composer - např. [Docker Desktop](https://www.docker.com/products/docker-desktop/) -* do pracovního adresáře rozpakuj soubory pro docker [members_development_files.zip](Docs/members_development_files.zip) - -* konfigurace - * zkopíruj soubor members/cfg/_cfg.php.default do members/cfg/_cfg.php a uprav nebo použij připravený [_cfg.php](Docs/X_cfg.php) - - * zkopíruj soubor members/cfg/_globals.php.default do members/cfg/_globals.php a uprav nebo použij připravený [_globals.php]hDocs/X_globals.php) - - * zkopíruj soubor members/cfg/_tables.php.default do members/cfg/_tables.php a uprav nebo použij připravený [_tables.php](Docs/X_tables.php) - - Výsledek: - ``` - ── docker-compose.yml - ├── db_init - │   └── d235220_members.sql - ├── members - │   ... - │ ├── cfg - │   ... - │ ├── _cfg.php - │    ... - │   ... - └── web -     └── DockerFile - ``` -* spusť docker compose - z VS Code, docker desktopu, příkazové řádky, … - - `docker compose -f docker-compose.yml up` -* přihlaš se do [members](http://127.0.0.1/members/) heslo 54321 - * admin - administrátor - aktualizace databáze, opravy - * tnov_1 - přihlašovatel - * tnov_2 - trenér - * tnov_3 - oddílový administrátor - * tnov_4 - malý trenér - * tnov_5 - člen - * tnov_6 - finančník -* databáze je přístupná v [phpMyAdmin](http://127.0.0.1:8080/index.php?route=/database/structure&db=d235220_members) - * uživatel root, heslo dev4password -* kód můžeš měnit z hosta i z kontejneru, logy jsou v members/logs - * cli přístup do php servru - `docker exec -it zbm-web-1 bash` - * cli přístup do mysql - `docker exec -it zbm-db-1 mysql -u root -p` +# Jak si připravit vývojové prostředí +## Požadavky + +* naklonuj [repozitář](https://github.com/arnost00/members) do pracovního adresáře +* ve Windows se může hodit [Git for Windows](https://git-scm.com/downloads/win) +* nainstaluj Docker s podporou `docker compose`, například [Docker Desktop](https://www.docker.com/products/docker-desktop/) + +## Plné vývojové prostředí + +* v kořenovém adresáři `members` spusť: + +```bash +docker compose -p members-dev -f docker-compose.dev.yml up --build +``` + +* do Visual Studio Code přidej [Remote Explorer extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.remote-explorer) +* připoj Visual Studio Code ke kontejneru `members-dev-web-1` +* otevři adresář `/var/www/html/members` + +Prostředí obsahuje Git, Playwright a další nástroje. + +Konfigurační soubory, které aplikace v kontejneru používá, jsou publikované v gitu a připojené z `docker/config/dev` do `cfg` jako read-only. Upravuj proto soubory v `docker/config/dev`, ne jejich cíle v `cfg`. + +Dostupné služby: + +* [members](http://127.0.0.1:10100/members) +* [phpMyAdmin](http://127.0.0.1:10101) + +## Automatické testy + +V kořenovém adresáři `members` spusť: + +```bash +docker compose -p members-autotest -f docker-compose.autotest.yml up -d --build +docker compose -p members-autotest -f docker-compose.autotest.yml exec web npm run test:e2e +docker compose -p members-autotest -f docker-compose.autotest.yml down +``` + +## Minimální konfigurace + +Vhodná pro manuální testování a změny nastavení. + +* zkopíruj `members/cfg/_cfg.php.default` do `members/cfg/_cfg.php` a uprav jej, nebo použij připravený [`_cfg.php`](X_cfg.php) +* zkopíruj `members/cfg/_globals.php.default` do `members/cfg/_globals.php` a uprav jej, nebo použij připravený [`_globals.php`](X_globals.php) +* zkopíruj `members/cfg/_tables.php.default` do `members/cfg/_tables.php` a uprav jej, nebo použij připravený [`_tables.php`](X_tables.php) + +Výsledná struktura: + +```text +members +├── cfg +│ ├── _cfg.php +│ ├── _globals.php +│ └── _tables.php +├── docker +│ └── db_init +└── ... +``` + +Spuštění: + +```bash +docker compose up --build +``` + +Přihlášení do aplikace: + +* [members](http://127.0.0.1/members/), heslo `54321` +* `admin` - administrátor, aktualizace databáze, opravy +* `tnov_1` - přihlašovatel +* `tnov_2` - trenér +* `tnov_3` - oddílový administrátor +* `tnov_4` - malý trenér +* `tnov_5` - člen +* `tnov_6` - finančník + +Databáze: + +* [phpMyAdmin](http://127.0.0.1:8080) +* uživatel `root`, heslo `dev4password` + +Práce s kontejnery: + +* kód můžeš měnit z hosta i z kontejneru, logy jsou v `members/logs` +* CLI přístup do PHP kontejneru: + +```bash +docker compose exec web bash +``` + +* CLI přístup do databáze: + +```bash +docker compose exec db mariadb -u root -p +``` + +Přerušení a obnovení práce: + +```bash +docker compose stop +docker compose start +``` + +Ukončení a smazání kontejnerů: + +```bash +docker compose down +``` + +Po změně Docker image nebo závislostí: + +```bash +docker compose up --build +``` ## Známé problémy -* nevytvoří se adresář logs - `docker exec -it zbm-web-1 mkdir -p /var/www/html/members/logs` - `docker exec -it zbm-web-1 chown -R www-data:www-data /var/www/html/members/logs` - -## Jak dodat změny: - -* změny jdou přes pull request na [arnost00/members](https://github.com/arnost00/members) z nějakého repository forku -* udělej branch, commituj změny, ptej se a navrhuj s odkazem na commit -* otestuj, proklikej gui s různými uživateli -* udělej pull request -* proběhne - * diskuze - * nasazení na test - * testování - * pojeb - * opravy - * nasazení na produkci + +Nevytvoří se adresář `logs`: + +```bash +docker compose exec web mkdir -p /var/www/html/members/logs +docker compose exec web chown -R www-data:www-data /var/www/html/members/logs +``` + +## Jak dodat změny + +* změny posílej přes pull request do [arnost00/members](https://github.com/arnost00/members) z vlastního forku +* vytvoř branch a průběžně commituj +* průběžně automaticky testuj +* ptej se, navrhuj řešení a odkazuj na konkrétní commit +* změny otestuj a proklikej GUI s různými uživateli +* pošli pull request +* obvyklý průběh je: diskuze, nasazení na test, testování, připomínky, opravy a nasazení do produkce diff --git a/Docs/members_development_files.zip b/Docs/members_development_files.zip deleted file mode 100644 index 0ca0964..0000000 Binary files a/Docs/members_development_files.zip and /dev/null differ diff --git a/docker-compose.autotest.yml b/docker-compose.autotest.yml new file mode 100644 index 0000000..c79db70 --- /dev/null +++ b/docker-compose.autotest.yml @@ -0,0 +1,44 @@ +services: + web: + build: + context: ./docker + dockerfile: Dockerfile.srv + target: autotest + working_dir: /var/www/html/members + ports: + - "10090:10100" #this line maps your pc port to the container port + depends_on: + db: + condition: service_healthy # wait until the autotest database import is complete + volumes: + - ./:/var/www/html/members #this line maps the content of ./html in your pc to the /var/www/html of the container + # override configuration, modifiable in original place only + - ./docker/config/autotest/_cfg.php:/var/www/html/members/cfg/_cfg.php:ro + - ./docker/config/autotest/_globals.php:/var/www/html/members/cfg/_globals.php:ro + - ./docker/config/autotest/_tables.php:/var/www/html/members/cfg/_tables.php:ro + db: + image: mariadb:10.11 + environment: + MARIADB_ROOT_PASSWORD: lkj234@sf!--+KLM + MARIADB_DATABASE: members_test + MARIADB_USER: appuser + MARIADB_PASSWORD: apppass + healthcheck: + test: ["CMD-SHELL", "mariadb -uroot -p\"$${MARIADB_ROOT_PASSWORD}\" -e \"SELECT 1 FROM members_test.tst_accounts LIMIT 1\" >/dev/null 2>&1"] + interval: 2s + timeout: 5s + retries: 30 + start_period: 10s + volumes: + # initial database content + - ./docker/db_init/d235220_members_latest.sql:/docker-entrypoint-initdb.d/d235220_members.sql + phpmyadmin: + image: phpmyadmin/phpmyadmin + profiles: + - tools + ports: + - "10091:80" #this line maps your pc port to the container port + depends_on: + - db #this line links this container to the db container + environment: + PMA_HOST: db diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml new file mode 100644 index 0000000..d980fcc --- /dev/null +++ b/docker-compose.dev.yml @@ -0,0 +1,36 @@ +services: + web: + build: + context: ./docker + dockerfile: Dockerfile.srv + target: dev + ports: + - "10100:10100" #this line maps your pc port to the container port + depends_on: + - db #this line links this container to the db container + volumes: + - ./:/var/www/html/members #this line maps the content of ./html in your pc to the /var/www/html of the container + # override configuration, modifiable in original place only + - ./docker/config/dev/_cfg.php:/var/www/html/members/cfg/_cfg.php:ro + - ./docker/config/dev/_globals.php:/var/www/html/members/cfg/_globals.php:ro + - ./docker/config/dev/_tables.php:/var/www/html/members/cfg/_tables.php:ro + db: + image: mariadb:10.11 + environment: + MARIADB_ROOT_PASSWORD: dev4password + MARIADB_DATABASE: members_dev + MARIADB_USER: appuser + MARIADB_PASSWORD: apppass + volumes: + # persistent database storage + - ./db_data/dev:/var/lib/mysql #this line maps the content of ./db_data/dev in your pc to the /var/lib/mysql of the container + # initial database content + - ./docker/db_init/d235220_members_latest.sql:/docker-entrypoint-initdb.d/d235220_members.sql + phpmyadmin: + image: phpmyadmin/phpmyadmin + ports: + - "10101:80" #this line maps your pc port to the container port + depends_on: + - db #this line links this container to the db container + environment: + PMA_HOST: db diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..5472511 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,39 @@ +services: + web: + build: + context: ./docker + dockerfile: Dockerfile.srv + target: base + ports: + - "80:10100" #this line maps your pc port to the container port + depends_on: + db: #this line links this container to the db container + condition: service_healthy # wait until the autotest database import is complete + volumes: + - ./:/var/www/html/members #this line maps the content of ./html in your pc to the /var/www/html of the container + db: + image: mariadb:10.11 + environment: + MARIADB_ROOT_PASSWORD: dev4password + MARIADB_DATABASE: members + MARIADB_USER: appuser + MARIADB_PASSWORD: apppass + healthcheck: + test: ["CMD-SHELL", "mariadb -uroot -p\"$${MARIADB_ROOT_PASSWORD}\" -e \"SELECT 1 FROM members.tst_accounts LIMIT 1\" >/dev/null 2>&1"] + interval: 2s + timeout: 5s + retries: 30 + start_period: 10s + volumes: + # persistent database storage + - ./db_data/test:/var/lib/mysql #this line maps the content of ./db_data/dev in your pc to the /var/lib/mysql of the container + # initial database content + - ./docker/db_init/d235220_members_latest.sql:/docker-entrypoint-initdb.d/d235220_members.sql + phpmyadmin: + image: phpmyadmin/phpmyadmin + ports: + - "8080:80" #this line maps your pc port to the container port + depends_on: + - db #this line links this container to the db container + environment: + PMA_HOST: db diff --git a/docker/Dockerfile.srv b/docker/Dockerfile.srv new file mode 100644 index 0000000..d39c74a --- /dev/null +++ b/docker/Dockerfile.srv @@ -0,0 +1,48 @@ +FROM php:8.2-apache as base + +# Install mysqli and clean up +RUN docker-php-ext-install mysqli + +# Let Apache listen on port 10100 inside the container. +RUN sed -ri 's/^Listen 80$/Listen 10100/' /etc/apache2/ports.conf \ + && sed -ri 's###' /etc/apache2/sites-available/000-default.conf + +# Create log directory +RUN mkdir -p /var/www/html/members/logs && chown -R www-data:www-data /var/www/html/members/logs + +# Add Apache alias for /members +RUN echo '\ +Alias /members /var/www/html/members\n\ +\n\ + Options Indexes FollowSymLinks\n\ + Require all granted\n\ +' \ + > /etc/apache2/conf-available/members.conf \ + && a2enconf members + +EXPOSE 10100 + +FROM base as autotest + +ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright + +# Install Playwright CLI and Chromium for browser-based tests. +RUN apt-get update \ + && apt-get install -y --no-install-recommends nodejs npm ca-certificates \ + && npm install -g playwright \ + && playwright install --with-deps chromium \ + && rm -rf /var/lib/apt/lists/* + +FROM autotest as dev + +# Install common VS Code Container Tools dependencies. +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + curl \ + git \ + iproute2 \ + less \ + procps \ + unzip \ + wget \ + && rm -rf /var/lib/apt/lists/* diff --git a/docker/config/autotest/_cfg.php b/docker/config/autotest/_cfg.php new file mode 100644 index 0000000..4ad0706 --- /dev/null +++ b/docker/config/autotest/_cfg.php @@ -0,0 +1,105 @@ + diff --git a/docker/config/autotest/_globals.php b/docker/config/autotest/_globals.php new file mode 100644 index 0000000..8ab2814 --- /dev/null +++ b/docker/config/autotest/_globals.php @@ -0,0 +1,51 @@ + diff --git a/docker/config/autotest/_tables.php b/docker/config/autotest/_tables.php new file mode 100644 index 0000000..37ab77c --- /dev/null +++ b/docker/config/autotest/_tables.php @@ -0,0 +1,29 @@ + \ No newline at end of file diff --git a/docker/config/dev/_cfg.php b/docker/config/dev/_cfg.php new file mode 100644 index 0000000..5bc470f --- /dev/null +++ b/docker/config/dev/_cfg.php @@ -0,0 +1,105 @@ + diff --git a/docker/config/dev/_globals.php b/docker/config/dev/_globals.php new file mode 100644 index 0000000..8ab2814 --- /dev/null +++ b/docker/config/dev/_globals.php @@ -0,0 +1,51 @@ + diff --git a/docker/config/dev/_tables.php b/docker/config/dev/_tables.php new file mode 100644 index 0000000..37ab77c --- /dev/null +++ b/docker/config/dev/_tables.php @@ -0,0 +1,29 @@ + \ No newline at end of file diff --git a/docker/db_init/d235220_members.sql b/docker/db_init/d235220_members.sql new file mode 100644 index 0000000..b4172d4 --- /dev/null +++ b/docker/db_init/d235220_members.sql @@ -0,0 +1,1441 @@ +-- phpMyAdmin SQL Dump +-- version 4.4.15.1 +-- http://www.phpmyadmin.net +-- +-- Počítač: md72.wedos.net:3306 +-- Vytvořeno: Úte 19. bře 2024, 13:05 +-- Verze serveru: 10.1.37-MariaDB +-- Verze PHP: 5.4.23 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Databáze: `d235220_members` +-- +CREATE DATABASE IF NOT EXISTS `d235220_members` DEFAULT CHARACTER SET utf8 COLLATE utf8_czech_ci; +USE `d235220_members`; + +-- -------------------------------------------------------- + +-- +-- Struktura tabulky `tst_accounts` +-- + +DROP TABLE IF EXISTS `tst_accounts`; +CREATE TABLE IF NOT EXISTS `tst_accounts` ( + `id` smallint(5) unsigned NOT NULL, + `id_users` smallint(5) DEFAULT NULL, + `login` varchar(25) COLLATE utf8_czech_ci NOT NULL DEFAULT '', + `heslo` varchar(255) COLLATE utf8_czech_ci NOT NULL DEFAULT '', + `policy_news` tinyint(1) unsigned NOT NULL DEFAULT '0', + `policy_regs` tinyint(1) unsigned NOT NULL DEFAULT '0', + `policy_mng` tinyint(1) unsigned NOT NULL DEFAULT '0', + `policy_adm` tinyint(1) unsigned NOT NULL DEFAULT '0', + `podpis` varchar(15) COLLATE utf8_czech_ci NOT NULL DEFAULT '', + `locked` tinyint(1) unsigned NOT NULL DEFAULT '0', + `last_visit` int(11) NOT NULL DEFAULT '0', + `policy_fin` tinyint(1) unsigned NOT NULL DEFAULT '0' +) ENGINE=MyISAM AUTO_INCREMENT=31 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci COMMENT='loginy a hesla uzivatelu'; + +-- +-- Vypisuji data pro tabulku `tst_accounts` +-- + +INSERT INTO `tst_accounts` (`id`, `id_users`, `login`, `heslo`, `policy_news`, `policy_regs`, `policy_mng`, `policy_adm`, `podpis`, `locked`, `last_visit`, `policy_fin`) VALUES +(1, 0, 'admin', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 0, 0, 0, '', 0, 1710802800, 0), +(10, 2, 'test_k', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 1, 0, 1, 'Kenia', 0, 1578524400, 1), +(11, 1, 'test_a', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 1, 4, 1, 'arnost', 0, 1578438000, 1), +(12, 3, 'test_v', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 1, 4, 1, 'Veseláček', 0, 1359586800, 1), +(13, 4, 'tnov_1', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 1, 0, 0, 'tnov_1', 0, 1700262000, 0), +(14, 5, 'tnov_2', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 0, 4, 0, 'tnov_2', 0, 1708988400, 0), +(15, 6, 'tnov_3', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 1, 4, 1, 'tnov_3', 0, 1708988400, 1), +(16, 7, 'tnov_4', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 0, 0, 2, 0, 'tnov_4', 0, 1708988400, 0), +(17, 8, 'tnov_5', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 0, 0, 0, 0, 'tnov_5', 0, 1701903600, 0), +(18, 11, 'test_d1', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 0, 2, 0, 'Drbča', 0, 1393455600, 0), +(19, 14, 'hanah', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 0, 2, 0, 'Hanka', 0, 1420758000, 0), +(20, 13, 'test_k1', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 0, 2, 0, 'Verča', 0, 1342648800, 0), +(21, 18, 'test_s1', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 0, 2, 0, 'Martin', 0, 1340056800, 0), +(22, 12, 'test_z1', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 0, 2, 0, 'Zhusta', 0, 1361919600, 1), +(23, 15, 'test_z3', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 0, 2, 0, 'Tomi1', 0, 1358982000, 0), +(24, 32, 'test_c1', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 1, 4, 1, 'Cvrcek', 0, 1359932400, 0), +(25, 23, 'MB7605', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 0, 0, 0, 0, 'Maroš', 0, 0, 0), +(26, 21, 'PB8101', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 0, 0, 0, 0, 'Palo', 0, 0, 0), +(27, 33, 'VM8951', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 0, 0, 0, 'Věra', 0, 1421622000, 1), +(28, 9, 'tnov_6', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 0, 0, 0, 0, 'tnov_6', 0, 1700262000, 1), +(29, 34, 'majkl', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 0, 1, 2, 0, 'majkl', 0, 1393714800, 1), +(30, 36, 'RS8006', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 0, 0, 0, 0, 'Řehoř', 0, 0, 0); + +-- -------------------------------------------------------- + +-- +-- Struktura tabulky `tst_categories_predef` +-- + +DROP TABLE IF EXISTS `tst_categories_predef`; +CREATE TABLE IF NOT EXISTS `tst_categories_predef` ( + `id` int(10) unsigned NOT NULL, + `name` varchar(50) COLLATE utf8_czech_ci NOT NULL, + `cat_list` varchar(255) COLLATE utf8_czech_ci NOT NULL +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; + +-- +-- Vypisuji data pro tabulku `tst_categories_predef` +-- + +INSERT INTO `tst_categories_predef` (`id`, `name`, `cat_list`) VALUES +(1, 'Oblž', 'D10N;D12;D14;D16;D18;D21C;D21D;D35;D45;D55;H10N;H12;H14;H16;H18;H21C;H21D;H35;H45;H55;HDR;'), +(2, 'Oblž větší', 'D10N;D12C;D14C;D16C;D18C;D21C;D21D;D35C;D45C;D55C;H10N;H12C;H14C;H16C;H18C;H21C;H21D;H35C;H45C;H55C;HDR;'), +(3, 'žebříček B', 'D12B;D14B;D16B;D18B;D20B;D21B;D21C;D35B;D40B;D45B;D50B;D55B;D60B;D65B;H12B;H14B;H16B;H18B;H20B;H21B;H21C;H35B;H40B;H45B;H50B;H55B;H60B;H65B;H70B;H75B;'), +(4, 'žebříček A', 'D16A;D18A;D20A;D21A;D21E;H16A;H18A;H20A;H21A;H21E;'), +(5, 'Štafety', 'D14;D18;D21;D105;D140;H14;H18;H21;H105;H140;H165;dorost;dospělí;HD175;HD235;'), +(6, 'MTBO', 'W11;W14;W17;W20;W21E;W21A;W21B;W40;W50;W60;M11;M14;M17;M20;M21E;M21A;M21B;M40A;M40B;M50;M60;OPEN;'); + +-- -------------------------------------------------------- + +-- +-- Struktura tabulky `tst_claim` +-- + +DROP TABLE IF EXISTS `tst_claim`; +CREATE TABLE IF NOT EXISTS `tst_claim` ( + `id` int(10) unsigned NOT NULL, + `user_id` int(10) unsigned NOT NULL, + `payment_id` int(10) unsigned NOT NULL, + `text` mediumtext COLLATE utf8_czech_ci NOT NULL, + `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP +) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; + +-- +-- Vypisuji data pro tabulku `tst_claim` +-- + +INSERT INTO `tst_claim` (`id`, `user_id`, `payment_id`, `text`, `date`) VALUES +(1, 2, 23, '¨ěščěšřžčýřžýářžýýöïüÿt¨rewëw¨dfs¨ds¨dfas', '2015-02-16 15:56:11'), +(2, 2, 9, '¨;+ě+čřžščýřžýíáýáéýáí', '2015-02-16 15:56:37'), +(3, 2, 13, '', '2015-02-16 16:08:56'), +(4, 9, 87, 'vyreseno', '2018-08-28 18:46:37'); + +-- -------------------------------------------------------- + +-- +-- Struktura tabulky `tst_finance` +-- + +DROP TABLE IF EXISTS `tst_finance`; +CREATE TABLE IF NOT EXISTS `tst_finance` ( + `id` int(10) unsigned NOT NULL, + `id_users_editor` smallint(5) unsigned NOT NULL, + `id_users_user` smallint(5) unsigned NOT NULL, + `id_zavod` int(10) unsigned DEFAULT NULL, + `amount` int(11) NOT NULL, + `date` date NOT NULL, + `note` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL, + `storno` tinyint(1) DEFAULT NULL, + `storno_by` int(10) unsigned DEFAULT NULL, + `storno_date` date DEFAULT NULL, + `storno_note` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL, + `claim` tinyint(1) DEFAULT NULL COMMENT 'null = bez reklamace, 1 = aktivni reklamace, 0 = uzavrena reklamace' +) ENGINE=InnoDB AUTO_INCREMENT=178 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; + +-- +-- Vypisuji data pro tabulku `tst_finance` +-- + +INSERT INTO `tst_finance` (`id`, `id_users_editor`, `id_users_user`, `id_zavod`, `amount`, `date`, `note`, `storno`, `storno_by`, `storno_date`, `storno_note`, `claim`) VALUES +(1, 0, 8, 3, -5000, '2013-02-05', '', NULL, NULL, NULL, NULL, NULL), +(2, 0, 8, 4, 5400, '2013-02-05', '', NULL, NULL, NULL, NULL, NULL), +(3, 1, 1, NULL, 4000, '2013-02-05', 'členský příspěvek', NULL, NULL, NULL, NULL, NULL), +(4, 1, 1, 11, -200, '2013-02-05', 'startovné', NULL, NULL, NULL, NULL, NULL), +(5, 1, 1, 11, -60, '2013-02-05', 'ubytování', NULL, NULL, NULL, NULL, NULL), +(6, 2, 22, NULL, -32, '2013-02-05', '32', NULL, NULL, NULL, NULL, NULL), +(7, 2, 22, 17, 543, '2013-02-05', '543', NULL, NULL, NULL, NULL, NULL), +(8, 2, 2, 3, -32768, '2013-02-05', 'er3', 1, 2, '2013-02-06', 'storno', NULL), +(9, 2, 2, 3, -100, '2013-02-06', 'stovka', NULL, NULL, NULL, NULL, 0), +(10, 2, 22, 37, 0, '2013-02-06', 'trista', NULL, NULL, NULL, NULL, NULL), +(11, 1, 7, 10, 300, '2013-02-21', 'test', 1, 2, '2013-03-23', '', NULL), +(12, 1, 1, 38, -130, '2013-02-25', 'startovné', NULL, NULL, NULL, NULL, NULL), +(13, 1, 2, 38, -130, '2013-02-25', 'startovné', NULL, NULL, NULL, NULL, 0), +(14, 1, 11, 38, 130, '2013-02-25', 'startovné', NULL, NULL, NULL, NULL, NULL), +(15, 1, 6, 38, -70, '2013-02-25', 'storno startovné', NULL, NULL, NULL, NULL, NULL), +(16, 1, 5, 35, -70, '2013-02-25', 'storno startovné', NULL, NULL, NULL, NULL, NULL), +(17, 12, 22, NULL, 500, '2013-02-01', 'Oddílové přípsěvky', NULL, NULL, NULL, NULL, NULL), +(18, 12, 1, 1, 80, '2013-02-27', 'závod Jml', NULL, NULL, NULL, NULL, NULL), +(19, 12, 2, 1, 80, '2013-02-27', 'závod Jml', NULL, NULL, NULL, NULL, NULL), +(20, 12, 3, 1, 80, '2013-02-27', 'závod Jml', NULL, NULL, NULL, NULL, NULL), +(21, 12, 4, 1, 0, '2013-02-27', 'závod Jml', NULL, NULL, NULL, NULL, NULL), +(22, 12, 5, 1, 80, '2013-02-27', 'závod Jml', NULL, NULL, NULL, NULL, NULL), +(23, 12, 2, NULL, 1800, '2013-02-27', 'Oddílové příspěvky', NULL, NULL, NULL, NULL, 0), +(24, 2, 22, NULL, -100, '2013-03-23', 'platba', NULL, NULL, NULL, NULL, NULL), +(25, 2, 1, 20, 400, '2013-03-23', 'adfds', NULL, NULL, NULL, NULL, NULL), +(26, 33, 33, 33, -40, '2013-05-14', 'vkld', NULL, NULL, NULL, NULL, NULL), +(27, 2, 29, 26, 100, '2013-05-15', 'sto podruhe', NULL, NULL, NULL, NULL, NULL), +(28, 2, 3, 36, 400, '2013-05-28', '+??š?+?š??š?šžž?ýáýú?ú?', NULL, NULL, NULL, NULL, NULL), +(29, 2, 22, 36, 100, '2013-05-28', 'sto', NULL, NULL, NULL, NULL, NULL), +(30, 1, 8, 10, -500, '2013-05-28', '?š??žýáíé', NULL, NULL, NULL, NULL, NULL), +(31, 1, 9, 15, 200, '2013-05-28', 'test2', NULL, NULL, NULL, NULL, NULL), +(32, 1, 8, 15, 300, '2013-05-28', 'test2', NULL, NULL, NULL, NULL, NULL), +(33, 9, 13, 40, -40, '2014-01-31', '', NULL, NULL, NULL, NULL, NULL), +(34, 9, 13, NULL, 40, '2014-01-31', '', NULL, NULL, NULL, NULL, NULL), +(35, 0, 26, NULL, 200, '2014-02-04', '', NULL, NULL, NULL, NULL, NULL), +(36, 9, 27, NULL, 300, '2014-02-04', 'aser', 1, 9, '2014-02-04', 'chybka', NULL), +(37, 9, 4, 41, 150, '2014-02-06', 'Startovne', NULL, NULL, NULL, NULL, NULL), +(38, 9, 5, 41, 150, '2014-02-06', 'Startovne', NULL, NULL, NULL, NULL, NULL), +(39, 9, 6, 41, 150, '2014-02-06', 'Startovne', NULL, NULL, NULL, NULL, NULL), +(40, 9, 7, 41, 80, '2014-02-06', '', NULL, NULL, NULL, NULL, NULL), +(41, 9, 8, 41, 80, '2014-02-06', '', NULL, NULL, NULL, NULL, NULL), +(42, 9, 4, NULL, 1000, '2014-02-06', 'vklad na účet', NULL, NULL, NULL, NULL, NULL), +(43, 2, 22, 11, 100, '2014-02-07', '', NULL, NULL, NULL, NULL, NULL), +(44, 2, 22, 11, -200, '2014-02-07', '', NULL, NULL, NULL, NULL, NULL), +(45, 2, 22, 11, 300, '2014-02-07', 'vklad', NULL, NULL, NULL, NULL, NULL), +(46, 9, 4, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(47, 9, 5, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(48, 9, 6, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(49, 9, 7, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(50, 9, 8, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(51, 9, 4, 42, 80, '2014-02-11', '', 1, 9, '2014-02-11', '', NULL), +(52, 9, 5, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(53, 9, 6, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(54, 9, 7, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(55, 9, 8, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(56, 9, 4, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(57, 9, 5, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(58, 9, 6, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(59, 9, 7, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(60, 9, 8, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(61, 7, 7, 0, -400, '2014-02-26', '', NULL, NULL, NULL, NULL, NULL), +(62, 7, 9, 0, 400, '2014-02-26', '', NULL, NULL, NULL, NULL, NULL), +(63, 5, 5, 0, -400, '2014-02-26', '', NULL, NULL, NULL, NULL, NULL), +(64, 5, 8, 0, 400, '2014-02-26', '', NULL, NULL, NULL, NULL, NULL), +(65, 9, 4, 8, -4000, '2014-02-27', 'test velke platby', NULL, NULL, NULL, NULL, NULL), +(66, 13, 13, 0, -100, '2014-02-27', '', NULL, NULL, NULL, NULL, NULL), +(67, 13, 11, 27, 1000, '2014-02-27', '', NULL, NULL, NULL, NULL, NULL), +(68, 11, 11, 0, -200, '2014-02-27', '', NULL, NULL, NULL, NULL, NULL), +(69, 11, 13, 0, 200, '2014-02-27', '', NULL, NULL, NULL, NULL, NULL), +(70, 9, 4, 43, -80, '2014-03-02', '', NULL, NULL, NULL, NULL, NULL), +(71, 9, 5, 43, -80, '2014-03-02', '', NULL, NULL, NULL, NULL, NULL), +(72, 9, 6, 43, -80, '2014-03-02', '', NULL, NULL, NULL, NULL, NULL), +(73, 9, 7, 43, -80, '2014-03-02', '', NULL, NULL, NULL, NULL, NULL), +(74, 9, 8, 43, -80, '2014-03-02', '', NULL, NULL, NULL, NULL, NULL), +(75, 2, 1, 21, 1000, '2014-04-29', '', NULL, NULL, NULL, NULL, NULL), +(76, 2, 2, 0, -12, '2015-02-16', 'asfs', NULL, NULL, NULL, NULL, NULL), +(77, 2, 22, 0, 12, '2015-02-16', 'asfs', NULL, NULL, NULL, NULL, NULL), +(78, 1, 23, 36, 100, '2015-02-16', '', NULL, NULL, NULL, NULL, NULL), +(79, 0, 22, 15, 100, '2015-02-17', '[''2222', NULL, NULL, NULL, NULL, NULL), +(80, 9, 14, 0, 500, '2016-02-15', 'Vklad', NULL, NULL, NULL, NULL, NULL), +(81, 9, 14, 31, -30, '2016-02-15', '', NULL, NULL, NULL, NULL, NULL), +(82, 9, 13, 31, -500, '2016-02-15', '', NULL, NULL, NULL, NULL, NULL), +(83, 9, 33, 31, -13, '2016-02-15', '', NULL, NULL, NULL, NULL, NULL), +(84, 9, 9, 0, -20, '2016-02-15', 'zkouška transferu', NULL, NULL, NULL, NULL, NULL), +(85, 9, 10, 0, 20, '2016-02-15', 'zkouška transferu', NULL, NULL, NULL, NULL, NULL), +(86, 1, 1, 0, -200, '2016-02-20', '', NULL, NULL, NULL, NULL, NULL), +(87, 1, 9, 0, 200, '2016-02-20', '', NULL, NULL, NULL, NULL, 0), +(88, 22, 22, 0, -1000, '2016-05-11', '', 1, 9, '2016-05-11', '', NULL), +(89, 22, 32, 0, 1000, '2016-05-11', '', NULL, NULL, NULL, NULL, NULL), +(90, 2, 7, NULL, 2000, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(91, 2, 8, 29, -840, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(92, 2, 8, 30, -1820, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(93, 2, 4, 0, 2840, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(94, 2, 5, 0, -150, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(95, 2, 5, 0, 300, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(96, 2, 6, 0, -170, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(97, 2, 9, 0, -780, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(98, 2, 7, 0, -20, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(99, 7, 7, 0, -1819, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(100, 7, 8, 0, 1819, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(101, 2, 7, 0, 1819, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(102, 2, 8, 0, -1819, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(103, 1, 8, 0, 1820, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(104, 1, 5, 0, -1820, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(105, 2, 5, 34, 0, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(106, 2, 8, 0, 10000, '2018-02-09', '', NULL, NULL, NULL, NULL, NULL), +(107, 2, 9, 0, 10000, '2018-02-09', '', NULL, NULL, NULL, NULL, NULL), +(108, 2, 7, 0, 10000, '2018-02-09', '', NULL, NULL, NULL, NULL, NULL), +(109, 0, 37, 4, -500, '2018-03-10', '', NULL, NULL, NULL, NULL, NULL), +(110, 9, 37, 0, -500, '2018-03-10', 'oddilove prispevky', NULL, NULL, NULL, NULL, NULL), +(111, 9, 37, 0, 3000, '2018-03-10', 'vklad na ucet', NULL, NULL, NULL, NULL, NULL), +(112, 9, 37, 1, -150, '2018-03-10', '', NULL, NULL, NULL, NULL, NULL), +(113, 37, 37, 0, -300, '2018-03-10', ' [Gross Michal->Mocvesely Osvald] ', NULL, NULL, NULL, NULL, NULL), +(114, 37, 34, 0, 300, '2018-03-10', ' [Gross Michal->Mocvesely Osvald] ', NULL, NULL, NULL, NULL, NULL), +(115, 37, 37, 0, -200, '2018-03-10', ' [Kočová Hana->Mocvesely Osvald] ', NULL, NULL, NULL, NULL, NULL), +(116, 37, 28, 0, 200, '2018-03-10', ' [Kočová Hana->Mocvesely Osvald] ', NULL, NULL, NULL, NULL, NULL), +(117, 7, 7, 0, -1, '2018-03-10', ' [Nováková Eva->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(118, 7, 22, 0, 1, '2018-03-10', ' [Nováková Eva->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(119, 2, 2, 0, -2, '2018-03-10', '', NULL, NULL, NULL, NULL, NULL), +(120, 2, 22, 0, 2, '2018-03-10', '', NULL, NULL, NULL, NULL, NULL), +(121, 2, 2, 0, -3, '2018-03-10', '', NULL, NULL, NULL, NULL, NULL), +(122, 2, 23, 0, 3, '2018-03-10', '', NULL, NULL, NULL, NULL, NULL), +(123, 2, 2, 0, -1, '2018-03-13', ' [König Lukáš->Bukovac Dušan] poznamka 1', NULL, NULL, NULL, NULL, NULL), +(124, 2, 22, 0, 1, '2018-03-13', ' [König Lukáš->Bukovac Dušan] poznamka 1', NULL, NULL, NULL, NULL, NULL), +(125, 22, 22, 0, -2, '2018-03-13', ' [König Lukáš->Bukovac Dušan] poznamka 2', NULL, NULL, NULL, NULL, NULL), +(126, 22, 2, 0, 2, '2018-03-13', ' [König Lukáš->Bukovac Dušan] poznamka 2', NULL, NULL, NULL, NULL, NULL), +(127, 22, 22, 0, -2, '2018-03-13', ' [König Lukáš->Bukovac Dušan] poznamka 2', NULL, NULL, NULL, NULL, NULL), +(128, 22, 2, 0, 2, '2018-03-13', ' [König Lukáš->Bukovac Dušan] poznamka 2', NULL, NULL, NULL, NULL, NULL), +(129, 2, 2, 0, -1, '2018-03-16', ' [König Lukáš->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(130, 2, 22, 0, 1, '2018-03-16', ' [König Lukáš->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(131, 2, 2, 0, -2, '2018-03-16', ' [König Lukáš->Nováková Eva] ', NULL, NULL, NULL, NULL, NULL), +(132, 2, 7, 0, 2, '2018-03-16', ' [König Lukáš->Nováková Eva] ', NULL, NULL, NULL, NULL, NULL), +(133, 7, 7, 0, -1, '2018-03-16', ' [Nováková Eva->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(134, 7, 22, 0, 1, '2018-03-16', ' [Nováková Eva->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(135, 7, 7, 0, -2, '2018-03-16', ' [Novák Karel->Nováková Eva] ', NULL, NULL, NULL, NULL, NULL), +(136, 7, 5, 0, 2, '2018-03-16', ' [Novák Karel->Nováková Eva] ', NULL, NULL, NULL, NULL, NULL), +(137, 7, 7, 0, -3, '2018-03-16', ' [Novák Karel->Nováková Eva] novakova->novak', NULL, NULL, NULL, NULL, NULL), +(138, 7, 5, 0, 3, '2018-03-16', ' [Novák Karel->Nováková Eva] novakova->novak', NULL, NULL, NULL, NULL, NULL), +(139, 2, 2, 0, -12, '2018-03-22', ' [König Lukáš->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(140, 2, 22, 0, 12, '2018-03-22', ' [König Lukáš->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(141, 2, 2, 0, -13, '2018-03-22', ' [König Lukáš->Nováková Eva] ', NULL, NULL, NULL, NULL, NULL), +(142, 2, 7, 0, 13, '2018-03-22', ' [König Lukáš->Nováková Eva] ', NULL, NULL, NULL, NULL, NULL), +(143, 2, 2, 0, -300, '2018-03-22', ' [König Lukáš->Novák Martin] ', NULL, NULL, NULL, NULL, NULL), +(144, 2, 6, 0, 300, '2018-03-22', ' [König Lukáš->Novák Martin] ', NULL, NULL, NULL, NULL, NULL), +(145, 2, 2, 0, -300, '2018-03-22', ' [König Lukáš->Nováková Eva] ', NULL, NULL, NULL, NULL, NULL), +(146, 2, 7, 0, 300, '2018-03-22', ' [König Lukáš->Nováková Eva] ', NULL, NULL, NULL, NULL, NULL), +(147, 6, 6, 0, -1, '2018-03-22', ' [Novák Martin->König Lukáš] nov-kenia', NULL, NULL, NULL, NULL, NULL), +(148, 6, 2, 0, 1, '2018-03-22', ' [Novák Martin->König Lukáš] nov-kenia', NULL, NULL, NULL, NULL, NULL), +(149, 6, 6, 0, -2, '2018-03-22', ' [Novák Martin->Nováková Eva] mart-eva', NULL, NULL, NULL, NULL, NULL), +(150, 6, 7, 0, 2, '2018-03-22', ' [Novák Martin->Nováková Eva] mart-eva', NULL, NULL, NULL, NULL, NULL), +(151, 7, 7, 0, -5, '2018-03-22', ' [Nováková Eva->Novák Martin] eva-martin', NULL, NULL, NULL, NULL, NULL), +(152, 7, 6, 0, 5, '2018-03-22', ' [Nováková Eva->Novák Martin] eva-martin', NULL, NULL, NULL, NULL, NULL), +(153, 7, 7, 0, -6, '2018-03-22', ' [Nováková Eva->König Lukáš] eva-kenia', NULL, NULL, NULL, NULL, NULL), +(154, 7, 2, 0, 6, '2018-03-22', ' [Nováková Eva->König Lukáš] eva-kenia', NULL, NULL, NULL, NULL, NULL), +(155, 9, 21, 5, -50, '2018-08-28', '', NULL, NULL, NULL, NULL, NULL), +(156, 9, 11, 5, -100, '2018-08-28', '', NULL, NULL, NULL, NULL, NULL), +(157, 2, 2, 0, 10000, '2020-01-08', 'test', NULL, NULL, NULL, NULL, NULL), +(158, 2, 2, 0, -1000, '2019-01-08', 'test 2019', NULL, NULL, NULL, NULL, NULL), +(159, 2, 2, 0, -1, '2020-01-08', ' [König Lukáš->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(160, 2, 22, 0, 1, '2020-01-08', ' [König Lukáš->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(161, 2, 2, 0, -2, '2020-01-08', ' [König Lukáš->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(162, 2, 22, 0, 2, '2020-01-08', ' [König Lukáš->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(163, 2, 2, 0, -3, '2020-01-08', ' [König Lukáš->Novák Martin] ', NULL, NULL, NULL, NULL, NULL), +(164, 2, 6, 0, 3, '2020-01-08', ' [König Lukáš->Novák Martin] ', NULL, NULL, NULL, NULL, NULL), +(165, 6, 4, 46, 50, '2020-10-20', '', NULL, NULL, NULL, NULL, NULL), +(166, 6, 6, 0, -34, '2020-10-20', ' [Novák Martin->Bukovacová Alena] ', NULL, NULL, NULL, NULL, NULL), +(167, 6, 25, 0, 34, '2020-10-20', ' [Novák Martin->Bukovacová Alena] ', NULL, NULL, NULL, NULL, NULL), +(168, 6, 4, 47, 44, '2020-10-20', '', NULL, NULL, NULL, NULL, NULL), +(169, 6, 5, 47, 55, '2020-10-20', '', NULL, NULL, NULL, NULL, NULL), +(170, 6, 4, 47, 44, '2020-10-20', '', NULL, NULL, NULL, NULL, NULL), +(171, 6, 5, 47, 55, '2020-10-20', '', NULL, NULL, NULL, NULL, NULL), +(172, 6, 4, 47, 44, '2020-10-20', '', NULL, NULL, NULL, NULL, NULL), +(173, 6, 5, 47, 55, '2020-10-20', '', NULL, NULL, NULL, NULL, NULL), +(174, 6, 4, 47, 44, '2020-10-20', '', NULL, NULL, NULL, NULL, NULL), +(175, 6, 5, 47, 55, '2020-10-20', '', NULL, NULL, NULL, NULL, NULL), +(176, 9, 21, 44, 100, '2023-11-18', 'Startovne', NULL, NULL, NULL, NULL, NULL), +(177, 6, 22, 41, 100, '2023-11-18', 'Cesta', NULL, NULL, NULL, NULL, NULL); + +-- -------------------------------------------------------- + +-- +-- Struktura tabulky `tst_finance_types` +-- + +DROP TABLE IF EXISTS `tst_finance_types`; +CREATE TABLE IF NOT EXISTS `tst_finance_types` ( + `id` int(10) unsigned NOT NULL, + `nazev` varchar(50) COLLATE utf8_czech_ci NOT NULL, + `popis` varchar(255) COLLATE utf8_czech_ci NOT NULL +) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; + +-- +-- Vypisuji data pro tabulku `tst_finance_types` +-- + +INSERT INTO `tst_finance_types` (`id`, `nazev`, `popis`) VALUES +(1, 'Základní platba', 'nikam nejezdím nebo málo'), +(2, 'Žabičky', 'JML'), +(3, 'Pulci', ''), +(4, 'Reprezentant ČR, licence A a E', ''), +(5, 'Licence R', ''), +(6, 'Licence B (žactvo + dorost)', ''), +(7, 'Ostatní = jezdím jen na Jihomoravskou ligu', ''), +(8, 'Ostatní = jezdím Jihomoravskou ligu a ŽB-M', ''), +(9, 'Ostatní = jezdím všude', ''); + +-- -------------------------------------------------------- + +-- +-- Struktura tabulky `tst_modify_log` +-- + +DROP TABLE IF EXISTS `tst_modify_log`; +CREATE TABLE IF NOT EXISTS `tst_modify_log` ( + `id` int(10) unsigned NOT NULL, + `timestamp` int(10) unsigned NOT NULL DEFAULT '0', + `action` enum('unknown','add','edit','delete') COLLATE utf8_czech_ci NOT NULL DEFAULT 'unknown', + `table` varchar(20) COLLATE utf8_czech_ci NOT NULL DEFAULT '', + `description` varchar(255) COLLATE utf8_czech_ci NOT NULL DEFAULT '', + `author` int(10) unsigned NOT NULL DEFAULT '0' +) ENGINE=MyISAM AUTO_INCREMENT=464 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; + +-- +-- Vypisuji data pro tabulku `tst_modify_log` +-- + +INSERT INTO `tst_modify_log` (`id`, `timestamp`, `action`, `table`, `description`, `author`) VALUES +(1, 1289933547, 'add', 'tst_users', 'Richard Pátek [7609]', 1), +(2, 1289933580, 'add', 'tst_users', 'Lukáš König [8001]', 1), +(3, 1289933584, 'edit', 'tst_users', 'Richard Pátek [7609]', 1), +(4, 1289934520, 'add', 'tst_accounts', 'acc.id = 10 login = "test_k" [Kenia]', 1), +(5, 1289934537, 'add', 'tst_accounts', 'acc.id = 11 login = "test_a" [arnost]', 1), +(6, 1295343992, 'add', 'tst_users', 'Martin Veselý [7502]', 11), +(7, 1295344023, 'add', 'tst_accounts', 'acc.id = 12 login = "test_v" [Veseláček]', 11), +(8, 1295344047, 'edit', 'tst_accounts', 'acc.id = 12 login = "test_v" [Veseláček]', 1), +(9, 1327942602, 'add', 'tst_users', 'Jan Novák [9111]', 1), +(10, 1327942626, 'add', 'tst_users', 'Karel Novák [9312]', 1), +(11, 1327942656, 'add', 'tst_users', 'Martin Novák [9513]', 1), +(12, 1327942693, 'add', 'tst_users', 'Eva Nováková [9751]', 1), +(13, 1327942827, 'add', 'tst_accounts', 'acc.id = 13 login = "tnov_1" [tnov_1]', 1), +(14, 1327942849, 'add', 'tst_accounts', 'acc.id = 14 login = "tnov_2" [tnov_2]', 1), +(15, 1327942865, 'add', 'tst_accounts', 'acc.id = 15 login = "tnov_3" [tnov_3]', 1), +(16, 1327942891, 'add', 'tst_accounts', 'acc.id = 16 login = "tnov_4" [tnov_4]', 1), +(17, 1327942936, 'add', 'tst_users', 'Zuzana Nováková [9952]', 1), +(18, 1327942953, 'add', 'tst_accounts', 'acc.id = 17 login = "tnov_5" [tnov_5]', 1), +(19, 1327942997, 'add', 'tst_users', 'Jitka Nováková [8357]', 1), +(20, 1339023196, 'add', 'tst_users', 'Filil Mazaný [8801]', 1), +(21, 1339420963, 'add', 'tst_accounts', 'acc.id = 18 login = "test_d1" [Drbča]', 1), +(22, 1339420994, 'add', 'tst_accounts', 'acc.id = 19 login = "test_h1" [Hanka]', 1), +(23, 1339421206, 'add', 'tst_accounts', 'acc.id = 20 login = "test_k1" [Verča]', 1), +(24, 1339421245, 'add', 'tst_accounts', 'acc.id = 21 login = "test_s1" [Martin]', 1), +(25, 1339421292, 'add', 'tst_accounts', 'acc.id = 22 login = "test_z1" [Zhusta]', 1), +(26, 1339421316, 'add', 'tst_accounts', 'acc.id = 23 login = "test_z2" [Tomi]', 1), +(27, 1339421726, 'delete', 'tst_users', 'id = 19', 1), +(28, 1339421730, 'delete', 'tst_users', 'id = 20', 1), +(29, 1339421733, 'delete', 'tst_users', 'id = 24', 1), +(30, 1339445000, 'edit', 'tst_accounts', 'acc.id = 23 login = "test_z2" [Tomi]', 23), +(31, 1339445014, 'edit', 'tst_accounts', 'acc.id = 23 login = "test_z3" [Tomi1]', 23), +(32, 1339445055, 'edit', 'tst_accounts', 'acc.id = 23 login = "test_z3" [1Tomi1]', 23), +(33, 1339445081, 'edit', 'tst_accounts', 'acc.id = 23 login = "1test_z3" [Tomi1]', 23), +(34, 1339445414, 'edit', 'tst_accounts', 'acc.id = 23 login = "cdfrt" [Tomi1]', 23), +(35, 1339445419, 'edit', 'tst_accounts', 'acc.id = 23 login = "1test_z3" [Tomi1]', 23), +(36, 1339445535, 'edit', 'tst_accounts', 'acc.id = 23 login = "test_z3" [Tomi1]', 23), +(37, 1339493823, 'edit', 'tst_accounts', 'acc.id = 21 - pass', 1), +(38, 1339493887, 'edit', 'tst_accounts', 'acc.id = 21 login = "test_s1" [Martin]', 1), +(39, 1339493951, 'edit', 'tst_accounts', 'acc.id = 20 login = "test_k1" [Verča]', 1), +(40, 1339493959, 'edit', 'tst_accounts', 'acc.id = 20 - pass', 1), +(41, 1339498535, 'edit', 'tst_accounts', 'acc.id = 20 login = "test_k1" [Verča Verča]', 20), +(42, 1339498904, 'edit', 'tst_accounts', 'acc.id = 20 login = "test_k1" [Verča]', 20), +(43, 1339586830, 'edit', 'tst_accounts', 'acc.id = 19 - pass', 1), +(44, 1339590326, 'edit', 'tst_users', 'Hana Hlavová [8888]', 19), +(45, 1339590349, 'edit', 'tst_accounts', 'acc.id = 19 login = "hanah" [Hanka]', 19), +(46, 1339621838, 'edit', 'tst_accounts', 'acc.id = 10 login = "test_k" [Keniaa]', 10), +(47, 1339621865, 'edit', 'tst_accounts', 'acc.id = 10 login = "test_k" [Kenia]', 10), +(48, 1339621988, 'edit', 'tst_accounts', 'acc.id = 10 login = "test_ka" [Kenia]', 10), +(49, 1339622014, 'edit', 'tst_accounts', 'acc.id = 10 login = "test_k" [Kenia]', 10), +(50, 1339622045, 'edit', 'tst_accounts', 'acc.id = 10 - pass', 10), +(51, 1339622076, 'edit', 'tst_accounts', 'acc.id = 10 - pass', 10), +(52, 1339622089, 'edit', 'tst_accounts', 'acc.id = 10 login = "test_kk" [Kenia]', 10), +(53, 1339622093, 'edit', 'tst_accounts', 'acc.id = 10 login = "test_k" [Kenia]', 10), +(54, 1339622203, 'edit', 'tst_users', 'Lukáš König [8001]', 10), +(55, 1339622214, 'edit', 'tst_users', 'Lukáš König [8001]', 10), +(56, 1339622225, 'edit', 'tst_users', 'Lukáš König [8001]', 10), +(57, 1339622231, 'edit', 'tst_users', 'Lukáš König [8001]', 10), +(58, 1339622235, 'edit', 'tst_users', 'Lukáš König [8001]', 10), +(59, 1339622242, 'edit', 'tst_users', 'Lukáš König [8001]', 10), +(60, 1339622640, 'edit', 'tst_users', 'Lukáš König [8001]', 10), +(61, 1339622670, 'edit', 'tst_users', 'Lukáš König [8001]', 10), +(62, 1339624484, 'edit', 'tst_accounts', 'acc.id = 14 - lock (1)', 10), +(63, 1339624491, 'edit', 'tst_accounts', 'acc.id = 14 - lock (0)', 10), +(64, 1339624496, 'edit', 'tst_accounts', 'acc.id = 10 - lock (1)', 10), +(65, 1339624586, 'edit', 'tst_accounts', 'acc.id = 10 - lock (0)', 11), +(66, 1339624594, 'edit', 'tst_users', 'user.id = 2 - hide (1)', 11), +(67, 1339624594, 'edit', 'tst_accounts', 'acc.id = 10 - lock (1)', 11), +(68, 1339624629, 'edit', 'tst_users', 'user.id = 2 - hide (0)', 11), +(69, 1339624629, 'edit', 'tst_accounts', 'acc.id = 10 - lock (0)', 11), +(70, 1339624637, 'edit', 'tst_users', 'user.id = 2 - hide (1)', 11), +(71, 1339624637, 'edit', 'tst_accounts', 'acc.id = 10 - lock (1)', 11), +(72, 1339624822, 'edit', 'tst_users', 'user.id = 29 - hide (1)', 11), +(73, 1339624837, 'edit', 'tst_users', 'user.id = 2 - hide (0)', 11), +(74, 1339624837, 'edit', 'tst_accounts', 'acc.id = 10 - lock (0)', 11), +(75, 1339624848, 'edit', 'tst_users', 'user.id = 29 - hide (0)', 11), +(76, 1339806911, 'edit', 'tst_users', 'Lukáš König [8001]', 10), +(77, 1340112199, 'edit', 'tst_users', 'Hana Kočová [8676]', 21), +(78, 1340576247, 'edit', 'tst_accounts', 'acc.id = 23 - pass', 1), +(79, 1340614010, 'edit', 'tst_accounts', 'acc.id = 11 login = "11test_a" [arnost]', 11), +(80, 1340614019, 'edit', 'tst_accounts', 'acc.id = 11 login = "test_a" [arnost]', 11), +(81, 1342708090, 'edit', 'tst_accounts', 'acc.id = 20 - pass', 20), +(82, 1342708146, 'edit', 'tst_users', 'Veronika Křístková [8379]', 20), +(83, 1342709476, 'edit', 'tst_users', 'Alexandr Jevsejenko [8110]', 20), +(84, 1342709542, 'edit', 'tst_users', 'Jaroslav Koča [8200]', 20), +(85, 1358973306, 'edit', 'tst_users', 'Lukáš König [8001]', 10), +(86, 1358976836, 'edit', 'tst_users', 'user.id = 8 - hide (1)', 10), +(87, 1358976836, 'edit', 'tst_accounts', 'acc.id = 17 - lock (1)', 10), +(88, 1358976897, 'edit', 'tst_accounts', 'acc.id = 16 - lock (1)', 10), +(89, 1358976902, 'edit', 'tst_accounts', 'acc.id = 16 - lock (0)', 10), +(90, 1358978129, 'edit', 'tst_users', 'user.id = 2 - hide (1)', 10), +(91, 1358978129, 'edit', 'tst_accounts', 'acc.id = 10 - lock (1)', 10), +(92, 1358978284, 'edit', 'tst_users', 'user.id = 2 - hide (0)', 10), +(93, 1358978284, 'edit', 'tst_accounts', 'acc.id = 10 - lock (0)', 10), +(94, 1358978290, 'edit', 'tst_accounts', 'acc.id = 10 - lock (1)', 10), +(95, 1358978313, 'edit', 'tst_accounts', 'acc.id = 10 - lock (0)', 10), +(96, 1359376315, 'edit', 'tst_accounts', 'acc.id = 12 - pass', 12), +(97, 1359376503, 'edit', 'tst_users', 'user.id = 8 - hide (0)', 12), +(98, 1359376503, 'edit', 'tst_accounts', 'acc.id = 17 - lock (0)', 12), +(99, 1359376508, 'edit', 'tst_accounts', 'acc.id = 17 - lock (1)', 12), +(100, 1359620742, 'edit', 'tst_users', 'Martin Veselý [7502]', 12), +(101, 1359620895, 'edit', 'tst_users', 'Martin Veselý [7502]', 12), +(102, 1359624656, 'add', 'tst_users', 'Jiří Urválek [6107]', 1), +(103, 1359624701, 'add', 'tst_accounts', 'acc.id = 24 login = "test_c1" [Cvrcek]', 1), +(104, 1359635865, 'edit', 'tst_accounts', 'acc.id = 24 - pass', 1), +(105, 1359636459, 'edit', 'tst_users', 'user.id = 29 - hide (1)', 24), +(106, 1359636477, 'edit', 'tst_users', 'user.id = 29 - hide (0)', 24), +(107, 1359636520, 'edit', 'tst_accounts', 'acc.id = 22 - lock (1)', 24), +(108, 1359636525, 'edit', 'tst_accounts', 'acc.id = 22 - lock (0)', 24), +(109, 1359636529, 'edit', 'tst_users', 'user.id = 12 - hide (1)', 24), +(110, 1359636529, 'edit', 'tst_accounts', 'acc.id = 22 - lock (1)', 24), +(111, 1359636534, 'edit', 'tst_users', 'user.id = 12 - hide (0)', 24), +(112, 1359636534, 'edit', 'tst_accounts', 'acc.id = 22 - lock (0)', 24), +(113, 1360093952, 'edit', 'tst_accounts', 'acc.id = 12 login = "test_v" [Veseláček]', 1), +(114, 1360093958, 'edit', 'tst_accounts', 'acc.id = 11 login = "test_a" [arnost]', 1), +(115, 1360093969, 'edit', 'tst_accounts', 'acc.id = 10 login = "test_k" [Kenia]', 1), +(116, 1360093983, 'edit', 'tst_accounts', 'acc.id = 24 login = "test_c1" [Cvrcek]', 1), +(117, 1361814777, 'edit', 'tst_accounts', 'acc.id = 22 login = "test_z1" [Zhusta]', 1), +(118, 1363134063, 'edit', 'tst_users', 'user.id = 29 - hide (1)', 10), +(119, 1363134073, 'edit', 'tst_users', 'user.id = 29 - hide (0)', 10), +(120, 1363134088, 'edit', 'tst_users', 'user.id = 11 - hide (1)', 10), +(121, 1363134088, 'edit', 'tst_accounts', 'acc.id = 18 - lock (1)', 10), +(122, 1363134098, 'edit', 'tst_users', 'user.id = 11 - hide (0)', 10), +(123, 1363134098, 'edit', 'tst_accounts', 'acc.id = 18 - lock (0)', 10), +(124, 1363134112, 'edit', 'tst_users', 'user.id = 28 - hide (1)', 10), +(125, 1363134282, 'edit', 'tst_users', 'user.id = 4 - hide (1)', 10), +(126, 1363134282, 'edit', 'tst_accounts', 'acc.id = 13 - lock (1)', 10), +(127, 1363134304, 'edit', 'tst_accounts', 'acc.id = 19 - lock (1)', 10), +(128, 1363134322, 'edit', 'tst_accounts', 'acc.id = 13 - lock (0)', 10), +(129, 1363134356, 'edit', 'tst_users', 'user.id = 4 - hide (0)', 10), +(130, 1363134356, 'edit', 'tst_accounts', 'acc.id = 13 - lock (0)', 10), +(131, 1363134359, 'edit', 'tst_users', 'user.id = 28 - hide (0)', 10), +(132, 1363134366, 'edit', 'tst_accounts', 'acc.id = 19 - lock (0)', 10), +(133, 1363134371, 'edit', 'tst_accounts', 'acc.id = 17 - lock (0)', 10), +(134, 1366383192, 'add', 'tst_accounts', 'acc.id = 25 login = "MB7605" [Maroš]', 11), +(135, 1366383286, 'add', 'tst_accounts', 'acc.id = 26 login = "PB8101" [Palo]', 11), +(136, 1367166256, 'add', 'tst_users', 'Věra Mádlová [8951]', 1), +(137, 1367166361, 'add', 'tst_accounts', 'acc.id = 27 login = "VM8951" [Věra]', 1), +(138, 1367166373, 'edit', 'tst_accounts', 'acc.id = 27 login = "VM8951" [Věra]', 1), +(139, 1368537895, 'add', 'tst_finance', 'id=26|user_id=33|amount=-40', 27), +(140, 1368537907, 'edit', 'tst_finance', 'id=26|user_id=33|amount=-40|note=vkld', 27), +(141, 1368609991, 'add', 'tst_finance', 'id=27|user_id=29|amount=100', 10), +(142, 1368610004, 'edit', 'tst_finance', 'id=27|user_id=2|amount=100|note=sto podruhe', 10), +(143, 1368724164, 'edit', 'tst_finance', 'id=26|user_id=33|amount=-40|note=vkld', 27), +(144, 1368724207, 'edit', 'tst_finance', 'id=26|user_id=33|amount=|note=', 27), +(145, 1368724218, 'edit', 'tst_finance', 'id=26|user_id=33|amount=-40|note=vkld', 27), +(146, 1369739191, 'add', 'tst_finance', 'id=28|user_id=3|amount=200', 10), +(147, 1369739285, 'edit', 'tst_finance', 'id=28|user_id=2|amount=+?š??žýáíéú?|note=', 10), +(148, 1369739301, 'edit', 'tst_finance', 'id=28|user_id=2|amount=sto|note=', 10), +(149, 1369739341, 'edit', 'tst_finance', 'id=28|user_id=2|amount=sto|note=', 10), +(150, 1369739373, 'add', 'tst_finance', 'id=29|user_id=22|amount=100', 10), +(151, 1369739377, 'edit', 'tst_finance', 'id=28|user_id=2|amount=dveste|note=', 10), +(152, 1369739377, 'edit', 'tst_finance', 'id=29|user_id=2|amount=sto|note=', 10), +(153, 1369739385, 'edit', 'tst_finance', 'id=28|user_id=2|amount=sto|note=', 10), +(154, 1369739385, 'edit', 'tst_finance', 'id=29|user_id=2|amount=sto|note=', 10), +(155, 1369739435, 'edit', 'tst_finance', 'id=28|user_id=2|amount=100|note=sto', 10), +(156, 1369739450, 'edit', 'tst_finance', 'id=28|user_id=2|amount=dve|note=', 10), +(157, 1369739450, 'edit', 'tst_finance', 'id=29|user_id=2|amount=sto|note=', 10), +(158, 1369739532, 'add', 'tst_finance', 'id=30|user_id=8|amount=-500', 11), +(159, 1369739646, 'add', 'tst_finance', 'id=31|user_id=9|amount=200', 11), +(160, 1369739646, 'add', 'tst_finance', 'id=32|user_id=8|amount=300', 11), +(161, 1369739897, 'edit', 'tst_finance', 'id=28|user_id=2|amount=sto|note=', 10), +(162, 1369739897, 'edit', 'tst_finance', 'id=29|user_id=2|amount=sto|note=', 10), +(163, 1369739904, 'edit', 'tst_finance', 'id=28|user_id=2|amount=dve|note=', 10), +(164, 1369739904, 'edit', 'tst_finance', 'id=29|user_id=2|amount=sto|note=', 10), +(165, 1369741196, 'edit', 'tst_finance', 'id=36|user_id=2|amount=200|note=dve', 10), +(166, 1369741196, 'edit', 'tst_finance', 'id=36|user_id=2|amount=100|note=sto', 10), +(167, 1369741209, 'edit', 'tst_finance', 'id=28|user_id=2|amount=200|note=dve', 10), +(168, 1369741221, 'edit', 'tst_finance', 'id=36|user_id=2|amount=300|note=tri', 10), +(169, 1369741221, 'edit', 'tst_finance', 'id=36|user_id=2|amount=100|note=sto', 10), +(170, 1369741290, 'edit', 'tst_finance', 'id=36|user_id=2|amount=200|note=dve', 10), +(171, 1369741290, 'edit', 'tst_finance', 'id=36|user_id=2|amount=200|note=dve', 10), +(172, 1369741470, 'edit', 'tst_finance', 'id=28|user_id=2|amount=100|note=sto', 10), +(173, 1369741470, 'edit', 'tst_finance', 'id=29|user_id=2|amount=100|note=sto', 10), +(174, 1369741479, 'edit', 'tst_finance', 'id=28|user_id=2|amount=200|note=dve', 10), +(175, 1369741479, 'edit', 'tst_finance', 'id=29|user_id=2|amount=100|note=sto', 10), +(176, 1369741494, 'edit', 'tst_finance', 'id=28|user_id=2|amount=300|note=tri', 10), +(177, 1369741494, 'edit', 'tst_finance', 'id=29|user_id=2|amount=100|note=sto', 10), +(178, 1369741764, 'edit', 'tst_finance', 'id=28|user_id=2|amount=400|note=styri', 10), +(179, 1369741764, 'edit', 'tst_finance', 'id=29|user_id=2|amount=100|note=sto', 10), +(180, 1369742365, 'edit', 'tst_finance', 'id=28|user_id=2|amount=400|note=+??š?+?š??š?šžž?ýáýú?ú?', 10), +(181, 1369742365, 'edit', 'tst_finance', 'id=29|user_id=2|amount=100|note=sto', 10), +(182, 1387190044, 'add', 'tst_accounts', 'acc.id = 28 login = "tnov_6" [Jitka]', 1), +(183, 1387190861, 'edit', 'tst_accounts', 'acc.id = 28 login = "tnov_6" [tnov_6]', 1), +(184, 1391192876, 'add', 'tst_finance', 'id=33|user_id=13|amount=-40', 28), +(185, 1391192889, 'add', 'tst_finance', 'id=34|user_id=13|amount=40', 28), +(186, 1391537721, 'add', 'tst_finance', 'id=35|user_id=26|amount=200', 1), +(187, 1391537834, 'add', 'tst_finance', 'id=36|user_id=27|amount=300', 28), +(188, 1391537853, 'add', 'tst_finance', 'id=36|note=chybka', 28), +(189, 1391725840, 'add', 'tst_finance', 'id=37|user_id=4|amount=80', 28), +(190, 1391725840, 'add', 'tst_finance', 'id=38|user_id=5|amount=80', 28), +(191, 1391725840, 'add', 'tst_finance', 'id=39|user_id=6|amount=80', 28), +(192, 1391725840, 'add', 'tst_finance', 'id=40|user_id=7|amount=80', 28), +(193, 1391725840, 'add', 'tst_finance', 'id=41|user_id=8|amount=80', 28), +(194, 1391726066, 'add', 'tst_finance', 'id=42|user_id=4|amount=1000', 28), +(195, 1391782211, 'add', 'tst_finance', 'id=43|user_id=22|amount=100', 10), +(196, 1391782287, 'add', 'tst_finance', 'id=44|user_id=22|amount=-200', 10), +(197, 1391782303, 'add', 'tst_finance', 'id=45|user_id=22|amount=300', 10), +(198, 1391803186, 'edit', 'tst_finance', 'id=37|user_id=9|amount=80|note=', 28), +(199, 1391803186, 'edit', 'tst_finance', 'id=38|user_id=9|amount=80|note=', 28), +(200, 1391803186, 'edit', 'tst_finance', 'id=39|user_id=9|amount=80|note=', 28), +(201, 1391803186, 'edit', 'tst_finance', 'id=40|user_id=9|amount=80|note=', 28), +(202, 1391803186, 'edit', 'tst_finance', 'id=41|user_id=9|amount=80|note=', 28), +(203, 1391804991, 'edit', 'tst_finance', 'id=38|user_id=9|amount=80|note=', 28), +(204, 1391804991, 'edit', 'tst_finance', 'id=39|user_id=9|amount=80|note=', 28), +(205, 1391804991, 'edit', 'tst_finance', 'id=40|user_id=9|amount=80|note=', 28), +(206, 1391804991, 'edit', 'tst_finance', 'id=41|user_id=9|amount=80|note=', 28), +(207, 1391804997, 'edit', 'tst_finance', 'id=38|user_id=9|amount=80|note=', 28), +(208, 1391804997, 'edit', 'tst_finance', 'id=39|user_id=9|amount=80|note=', 28), +(209, 1391804997, 'edit', 'tst_finance', 'id=40|user_id=9|amount=80|note=', 28), +(210, 1391804997, 'edit', 'tst_finance', 'id=41|user_id=9|amount=80|note=', 28), +(211, 1391805011, 'edit', 'tst_finance', 'id=38|user_id=9|amount=80|note=', 28), +(212, 1391805011, 'edit', 'tst_finance', 'id=39|user_id=9|amount=80|note=', 28), +(213, 1391805011, 'edit', 'tst_finance', 'id=40|user_id=9|amount=80|note=', 28), +(214, 1391805011, 'edit', 'tst_finance', 'id=41|user_id=9|amount=80|note=', 28), +(215, 1391805028, 'edit', 'tst_finance', 'id=38|user_id=9|amount=80|note=', 28), +(216, 1391805028, 'edit', 'tst_finance', 'id=39|user_id=9|amount=80|note=', 28), +(217, 1391805028, 'edit', 'tst_finance', 'id=40|user_id=9|amount=80|note=', 28), +(218, 1391805028, 'edit', 'tst_finance', 'id=41|user_id=9|amount=80|note=', 28), +(219, 1391805035, 'edit', 'tst_finance', 'id=37|user_id=9|amount=80|note=', 28), +(220, 1391805035, 'edit', 'tst_finance', 'id=38|user_id=9|amount=80|note=', 28), +(221, 1391805035, 'edit', 'tst_finance', 'id=39|user_id=9|amount=80|note=', 28), +(222, 1391805035, 'edit', 'tst_finance', 'id=40|user_id=9|amount=80|note=', 28), +(223, 1391805035, 'edit', 'tst_finance', 'id=41|user_id=9|amount=80|note=', 28), +(224, 1391805064, 'edit', 'tst_finance', 'id=21|user_id=9|amount=0|note=závod Jml', 28), +(225, 1392143449, 'add', 'tst_finance', 'id=46|user_id=4|amount=80', 28), +(226, 1392143449, 'add', 'tst_finance', 'id=47|user_id=5|amount=80', 28), +(227, 1392143449, 'add', 'tst_finance', 'id=48|user_id=6|amount=80', 28), +(228, 1392143449, 'add', 'tst_finance', 'id=49|user_id=7|amount=80', 28), +(229, 1392143449, 'add', 'tst_finance', 'id=50|user_id=8|amount=80', 28), +(230, 1392143456, 'add', 'tst_finance', 'id=51|user_id=4|amount=80', 28), +(231, 1392143456, 'add', 'tst_finance', 'id=52|user_id=5|amount=80', 28), +(232, 1392143456, 'add', 'tst_finance', 'id=53|user_id=6|amount=80', 28), +(233, 1392143456, 'add', 'tst_finance', 'id=54|user_id=7|amount=80', 28), +(234, 1392143456, 'add', 'tst_finance', 'id=55|user_id=8|amount=80', 28), +(235, 1392143502, 'add', 'tst_finance', 'id=56|user_id=4|amount=80', 28), +(236, 1392143502, 'add', 'tst_finance', 'id=57|user_id=5|amount=80', 28), +(237, 1392143502, 'add', 'tst_finance', 'id=58|user_id=6|amount=80', 28), +(238, 1392143502, 'add', 'tst_finance', 'id=59|user_id=7|amount=80', 28), +(239, 1392143502, 'add', 'tst_finance', 'id=60|user_id=8|amount=80', 28), +(240, 1392143529, 'add', 'tst_finance', 'id=51|note=', 28), +(241, 1393332212, 'edit', 'tst_users', 'Karel Novák [9312] - entry lock (1)', 27), +(242, 1393332216, 'edit', 'tst_users', 'Karel Novák [9312] - entry lock (0)', 27), +(243, 1393332221, 'edit', 'tst_users', 'Věra Mádlová [8951] - entry lock (1)', 27), +(244, 1393332230, 'edit', 'tst_users', 'Věra Mádlová [8951] - entry lock (0)', 27), +(245, 1393449298, 'add', 'tst_finance', 'id=61|user_id=7|amount=-400', 16), +(246, 1393449298, 'add', 'tst_finance', 'id=62|user_id=9|amount=400', 16), +(247, 1393449318, 'add', 'tst_finance', 'id=63|user_id=5|amount=-400', 16), +(248, 1393449318, 'add', 'tst_finance', 'id=64|user_id=8|amount=400', 16), +(249, 1393495022, 'add', 'tst_finance', 'id=65|user_id=4|amount=-4000', 28), +(250, 1393498007, 'add', 'tst_finance', 'id=66|user_id=13|amount=-100', 10), +(251, 1393498007, 'add', 'tst_finance', 'id=67|user_id=11|amount=100', 10), +(252, 1393498069, 'add', 'tst_finance', 'id=68|user_id=11|amount=-200', 10), +(253, 1393498069, 'add', 'tst_finance', 'id=69|user_id=13|amount=200', 10), +(254, 1393777075, 'add', 'tst_finance', 'id=70|user_id=4|amount=-80', 28), +(255, 1393777075, 'add', 'tst_finance', 'id=71|user_id=5|amount=-80', 28), +(256, 1393777112, 'edit', 'tst_finance', 'id=70|user_id=9|amount=-80|note=', 28), +(257, 1393777112, 'edit', 'tst_finance', 'id=71|user_id=9|amount=-80|note=', 28), +(258, 1393777112, 'add', 'tst_finance', 'id=72|user_id=6|amount=-80', 28), +(259, 1393777112, 'add', 'tst_finance', 'id=73|user_id=7|amount=-80', 28), +(260, 1393777112, 'add', 'tst_finance', 'id=74|user_id=8|amount=-80', 28), +(261, 1393778030, 'add', 'tst_users', 'Michal Gross [6946]', 15), +(262, 1393778159, 'add', 'tst_accounts', 'acc.id = 29 login = "majkl" [majkl]', 15), +(263, 1398782135, 'add', 'tst_finance', 'id=75|user_id=1|amount=100', 10), +(264, 1398782139, 'edit', 'tst_finance', 'id=75|user_id=2|amount=1000|note=', 10), +(265, 1420830069, 'edit', 'tst_accounts', 'acc.id = 19 - pass', 10), +(266, 1422644190, 'edit', 'tst_finance', 'id=67|user_id=2|amount=1000|note=', 10), +(267, 1422644208, 'edit', 'tst_users', 'Dušan Bukovac [7503] - entry lock (1)', 10), +(268, 1422644227, 'edit', 'tst_users', 'Maroš Bukovac [7605] - entry lock (1)', 10), +(269, 1422644230, 'edit', 'tst_users', 'Dušan Bukovac [7503] - entry lock (0)', 10), +(270, 1422644233, 'edit', 'tst_users', 'Maroš Bukovac [7605] - entry lock (0)', 10), +(271, 1422644457, 'edit', 'tst_users', 'Richard Pátek [7609] - entry lock (1)', 10), +(272, 1422644464, 'edit', 'tst_users', 'Richard Pátek [7609] - entry lock (0)', 10), +(273, 1422644468, 'edit', 'tst_users', 'Richard Pátek [7609] - entry lock (1)', 10), +(274, 1422644611, 'edit', 'tst_users', 'Richard Pátek [7609] - entry lock (0)', 10), +(275, 1424102245, 'add', 'tst_finance', 'id=0|user_id=2|amount=-12', 10), +(276, 1424102245, 'add', 'tst_finance', 'id=275|user_id=22|amount=12', 10), +(277, 1424102259, 'add', 'tst_finance', 'id=76|user_id=2|amount=-12', 10), +(278, 1424102259, 'add', 'tst_finance', 'id=77|user_id=22|amount=12', 10), +(279, 1424102267, 'add', 'tst_finance', 'id=0|user_id=2|amount=-23', 10), +(280, 1424102267, 'add', 'tst_finance', 'id=279|user_id=22|amount=23', 10), +(281, 1424102311, 'add', 'tst_finance', 'id=0|user_id=2|amount=-456', 10), +(282, 1424102311, 'add', 'tst_finance', 'id=281|user_id=22|amount=456', 10), +(283, 1424102315, 'add', 'tst_finance', 'id=0|user_id=2|amount=-456', 10), +(284, 1424102315, 'add', 'tst_finance', 'id=283|user_id=22|amount=456', 10), +(285, 1424102565, 'add', 'tst_finance', 'id=0|user_id=23|amount=100', 11), +(286, 1424102581, 'add', 'tst_finance', 'id=78|user_id=23|amount=100', 11), +(287, 1424102800, 'add', 'tst_finance', 'id=0|user_id=21|amount=200', 11), +(288, 1424103042, 'add', 'tst_users', 'asdfasd ''adsfdas [0011]', 10), +(289, 1424103056, 'edit', 'tst_users', 'asdfasd ¨\\''adsfdas [0011]', 10), +(290, 1424103075, 'edit', 'tst_users', 'asdfasd adsfd''as''\\dasf?> [0011]', 10), +(291, 1424103082, 'edit', 'tst_users', 'asdfasd adsfd''as''\\dasf?> [0011]', 10), +(292, 1424103088, 'edit', 'tst_users', 'asdfasd [0011]', 10), +(293, 1424103107, 'delete', 'tst_users', 'id = 35', 10), +(294, 1424103163, 'add', 'tst_finance', 'id=0|user_id=29|amount=-12', 10), +(295, 1424103258, 'add', 'tst_finance', 'id=0|user_id=2|amount=6', 10), +(296, 1424103258, 'add', 'tst_finance', 'id=295|user_id=16|amount=6', 10), +(297, 1424103258, 'add', 'tst_finance', 'id=296|user_id=17|amount=6', 10), +(298, 1424103258, 'edit', 'tst_finance', 'id=10|user_id=2|amount=300|note=trista', 10), +(299, 1424103260, 'add', 'tst_finance', 'id=0|user_id=2|amount=6', 10), +(300, 1424103260, 'add', 'tst_finance', 'id=299|user_id=16|amount=6', 10), +(301, 1424103260, 'add', 'tst_finance', 'id=300|user_id=17|amount=6', 10), +(302, 1424103260, 'edit', 'tst_finance', 'id=10|user_id=2|amount=300|note=trista', 10), +(303, 1424174537, 'add', 'tst_finance', 'id=79|user_id=22|amount=100', 1), +(304, 1425430171, 'add', 'tst_users', 'Řehoř Štěrbák [8006]', 1), +(305, 1425430183, 'add', 'tst_accounts', 'acc.id = 30 login = "RS8006" [Řehoř]', 1), +(306, 1455563721, 'add', 'tst_finance', 'id=80|user_id=14|amount=500', 28), +(307, 1455563753, 'add', 'tst_finance', 'id=81|user_id=14|amount=-30', 28), +(308, 1455563753, 'add', 'tst_finance', 'id=82|user_id=13|amount=-500', 28), +(309, 1455563753, 'add', 'tst_finance', 'id=83|user_id=33|amount=-13', 28), +(310, 1455563808, 'add', 'tst_finance', 'id=0|user_id=|amount=-200', 28), +(311, 1455563808, 'add', 'tst_finance', 'id=310|user_id=13|amount=200', 28), +(312, 1455563839, 'add', 'tst_finance', 'id=0|user_id=|amount=-300', 28), +(313, 1455563839, 'add', 'tst_finance', 'id=312|user_id=13|amount=300', 28), +(314, 1455563849, 'add', 'tst_finance', 'id=0|user_id=|amount=-34', 28), +(315, 1455563849, 'add', 'tst_finance', 'id=314|user_id=21|amount=34', 28), +(316, 1455563902, 'add', 'tst_finance', 'id=84|user_id=9|amount=-20', 28), +(317, 1455563902, 'add', 'tst_finance', 'id=85|user_id=10|amount=20', 28), +(318, 1455563944, 'add', 'tst_finance', 'id=0|user_id=|amount=-100', 28), +(319, 1455563944, 'add', 'tst_finance', 'id=318|user_id=28|amount=100', 28), +(320, 1455979543, 'add', 'tst_finance', 'id=86|user_id=1|amount=-200', 28), +(321, 1455979543, 'add', 'tst_finance', 'id=87|user_id=9|amount=200', 28), +(322, 1462959637, 'edit', 'tst_users', 'user.id = 11 - hide (1)', 15), +(323, 1462959637, 'edit', 'tst_accounts', 'acc.id = 18 - lock (1)', 15), +(324, 1462959645, 'edit', 'tst_users', 'user.id = 11 - hide (0)', 15), +(325, 1462959645, 'edit', 'tst_accounts', 'acc.id = 18 - lock (0)', 15), +(326, 1462959649, 'edit', 'tst_accounts', 'acc.id = 18 - lock (1)', 15), +(327, 1462959653, 'edit', 'tst_users', 'user.id = 11 - hide (1)', 15), +(328, 1462959653, 'edit', 'tst_accounts', 'acc.id = 18 - lock (1)', 15), +(329, 1462959657, 'edit', 'tst_users', 'user.id = 11 - hide (0)', 15), +(330, 1462959657, 'edit', 'tst_accounts', 'acc.id = 18 - lock (0)', 15), +(331, 1462960041, 'add', 'tst_finance', 'id=88|user_id=22|amount=-1000', 28), +(332, 1462960041, 'add', 'tst_finance', 'id=89|user_id=32|amount=1000', 28), +(333, 1462960072, 'add', 'tst_finance', 'id=88|note=', 28), +(334, 1488208658, 'add', 'tst_finance', 'id=90|user_id=7|amount=3150', 10), +(335, 1488208717, 'add', 'tst_finance', 'id=91|user_id=8|amount=840', 10), +(336, 1488208728, 'edit', 'tst_finance', 'id=91|user_id=2|amount=840|note=', 10), +(337, 1488208769, 'edit', 'tst_finance', 'id=91|user_id=2|amount=-840|note=', 10), +(338, 1488208802, 'add', 'tst_finance', 'id=92|user_id=8|amount=-1820', 10), +(339, 1488208830, 'edit', 'tst_finance', 'id=90|user_id=2|amount=2000|note=', 10), +(340, 1488208999, 'add', 'tst_finance', 'id=93|user_id=4|amount=2840', 10), +(341, 1488209008, 'add', 'tst_finance', 'id=94|user_id=5|amount=-150', 10), +(342, 1488209016, 'add', 'tst_finance', 'id=95|user_id=5|amount=300', 10), +(343, 1488209027, 'add', 'tst_finance', 'id=96|user_id=6|amount=-170', 10), +(344, 1488209486, 'add', 'tst_finance', 'id=97|user_id=9|amount=-780', 10), +(345, 1488209539, 'add', 'tst_finance', 'id=98|user_id=7|amount=-20', 10), +(346, 1488209758, 'add', 'tst_finance', 'id=99|user_id=7|amount=-1819', 16), +(347, 1488209759, 'add', 'tst_finance', 'id=100|user_id=8|amount=1819', 16), +(348, 1488209854, 'add', 'tst_finance', 'id=101|user_id=7|amount=1819', 10), +(349, 1488209868, 'add', 'tst_finance', 'id=102|user_id=8|amount=-1819', 10), +(350, 1488210089, 'add', 'tst_finance', 'id=103|user_id=8|amount=1820', 11), +(351, 1488210100, 'add', 'tst_finance', 'id=104|user_id=5|amount=-1820', 11), +(352, 1488210444, 'add', 'tst_finance', 'id=105|user_id=5|amount=-10', 10), +(353, 1488210610, 'edit', 'tst_finance', 'id=105|user_id=2|amount=0|note=', 10), +(354, 1510648905, 'edit', 'tst_finance', 'id=9|user_id=9|amount=-100|note=stovka', 28), +(355, 1510648905, 'edit', 'tst_finance', 'id=1|user_id=9|amount=-5000|note=', 28), +(356, 1518180051, 'edit', 'tst_accounts', 'acc.id = 10 - pass', 15), +(357, 1518180122, 'add', 'tst_finance', 'id=106|user_id=8|amount=10000', 10), +(358, 1518180132, 'add', 'tst_finance', 'id=107|user_id=9|amount=10000', 10), +(359, 1518180142, 'add', 'tst_finance', 'id=108|user_id=7|amount=10000', 10), +(360, 1518180179, 'add', 'tst_finance', 'id=0|user_id=|amount=-2', 16), +(361, 1518180179, 'add', 'tst_finance', 'id=360|user_id=5|amount=2', 16), +(362, 1518180319, 'add', 'tst_finance', 'id=0|user_id=|amount=-2', 16), +(363, 1518180319, 'add', 'tst_finance', 'id=362|user_id=5|amount=2', 16), +(364, 1518180325, 'add', 'tst_finance', 'id=0|user_id=|amount=-2', 16), +(365, 1518180325, 'add', 'tst_finance', 'id=364|user_id=5|amount=2', 16), +(366, 1518443815, 'add', 'tst_finance', 'id=0|user_id=|amount=-2', 16), +(367, 1518443815, 'add', 'tst_finance', 'id=366|user_id=5|amount=2', 16), +(368, 1520712175, 'add', 'tst_users', 'Osvald Mocvesely [4400]', 1), +(369, 1520712193, 'edit', 'tst_users', 'Osvald Mocvesely [4400] - entry lock (1)', 1), +(370, 1520712235, 'add', 'tst_finance', 'id=109|user_id=37|amount=-500', 1), +(371, 1520712391, 'add', 'tst_finance', 'id=110|user_id=37|amount=-500', 28), +(372, 1520712416, 'add', 'tst_finance', 'id=111|user_id=37|amount=3000', 28), +(373, 1520712428, 'add', 'tst_finance', 'id=112|user_id=37|amount=-150', 28), +(374, 1520712442, 'add', 'tst_finance', 'id=113|user_id=37|amount=-300', 28), +(375, 1520712442, 'add', 'tst_finance', 'id=114|user_id=34|amount=300', 28), +(376, 1520713908, 'add', 'tst_finance', 'id=115|user_id=37|amount=-200', 28), +(377, 1520713908, 'add', 'tst_finance', 'id=116|user_id=28|amount=200', 28), +(378, 1520716394, 'add', 'tst_finance', 'id=117|user_id=7|amount=-1', 10), +(379, 1520716394, 'add', 'tst_finance', 'id=118|user_id=22|amount=1', 10), +(380, 1520716418, 'add', 'tst_finance', 'id=119|user_id=2|amount=-2', 10), +(381, 1520716418, 'add', 'tst_finance', 'id=120|user_id=22|amount=2', 10), +(382, 1520716549, 'add', 'tst_finance', 'id=121|user_id=2|amount=-3', 10), +(383, 1520716549, 'add', 'tst_finance', 'id=122|user_id=23|amount=3', 10), +(384, 1520934283, 'add', 'tst_finance', 'id=123|user_id=2|amount=-1', 10), +(385, 1520934283, 'add', 'tst_finance', 'id=124|user_id=22|amount=1', 10), +(386, 1520934357, 'add', 'tst_finance', 'id=125|user_id=22|amount=-2', 10), +(387, 1520934357, 'add', 'tst_finance', 'id=126|user_id=2|amount=2', 10), +(388, 1520934682, 'add', 'tst_finance', 'id=127|user_id=22|amount=-2', 10), +(389, 1520934682, 'add', 'tst_finance', 'id=128|user_id=2|amount=2', 10), +(390, 1521221577, 'add', 'tst_finance', 'id=129|user_id=2|amount=-1', 10), +(391, 1521221578, 'add', 'tst_finance', 'id=130|user_id=22|amount=1', 10), +(392, 1521221590, 'add', 'tst_finance', 'id=131|user_id=2|amount=-2', 10), +(393, 1521221590, 'add', 'tst_finance', 'id=132|user_id=7|amount=2', 10), +(394, 1521221627, 'add', 'tst_finance', 'id=133|user_id=7|amount=-1', 10), +(395, 1521221627, 'add', 'tst_finance', 'id=134|user_id=22|amount=1', 10), +(396, 1521221665, 'add', 'tst_finance', 'id=135|user_id=7|amount=-2', 10), +(397, 1521221665, 'add', 'tst_finance', 'id=136|user_id=5|amount=2', 10), +(398, 1521221695, 'add', 'tst_finance', 'id=137|user_id=7|amount=-3', 10), +(399, 1521221695, 'add', 'tst_finance', 'id=138|user_id=5|amount=3', 10), +(400, 1521721796, 'add', 'tst_finance', 'id=139|user_id=2|amount=-12', 10), +(401, 1521721796, 'add', 'tst_finance', 'id=140|user_id=22|amount=12', 10), +(402, 1521721816, 'add', 'tst_finance', 'id=141|user_id=2|amount=-13', 10), +(403, 1521721816, 'add', 'tst_finance', 'id=142|user_id=7|amount=13', 10), +(404, 1521721917, 'add', 'tst_finance', 'id=143|user_id=2|amount=-300', 10), +(405, 1521721917, 'add', 'tst_finance', 'id=144|user_id=6|amount=300', 10), +(406, 1521721927, 'add', 'tst_finance', 'id=145|user_id=2|amount=-300', 10), +(407, 1521721928, 'add', 'tst_finance', 'id=146|user_id=7|amount=300', 10), +(408, 1521721965, 'add', 'tst_finance', 'id=147|user_id=6|amount=-1', 15), +(409, 1521721965, 'add', 'tst_finance', 'id=148|user_id=2|amount=1', 15), +(410, 1521721984, 'add', 'tst_finance', 'id=149|user_id=6|amount=-2', 15), +(411, 1521721984, 'add', 'tst_finance', 'id=150|user_id=7|amount=2', 15), +(412, 1521722027, 'add', 'tst_finance', 'id=151|user_id=7|amount=-5', 16), +(413, 1521722027, 'add', 'tst_finance', 'id=152|user_id=6|amount=5', 16), +(414, 1521722067, 'add', 'tst_finance', 'id=153|user_id=7|amount=-6', 16), +(415, 1521722067, 'add', 'tst_finance', 'id=154|user_id=2|amount=6', 16), +(416, 1535481765, 'edit', 'tst_users', 'Maroš Bukovac [7605] - entry lock (1)', 28), +(417, 1535481786, 'add', 'tst_finance', 'id=155|user_id=21|amount=-50', 28), +(418, 1535481786, 'add', 'tst_finance', 'id=156|user_id=11|amount=-100', 28), +(419, 1578498014, 'add', 'tst_finance', 'id=157|user_id=2|amount=10000', 10), +(420, 1578498030, 'add', 'tst_finance', 'id=158|user_id=2|amount=-1000', 10), +(421, 1578498138, 'add', 'tst_finance', 'id=159|user_id=2|amount=-1', 10), +(422, 1578498138, 'add', 'tst_finance', 'id=160|user_id=22|amount=1', 10), +(423, 1578498143, 'add', 'tst_finance', 'id=161|user_id=2|amount=-2', 10), +(424, 1578498143, 'add', 'tst_finance', 'id=162|user_id=22|amount=2', 10), +(425, 1578498149, 'add', 'tst_finance', 'id=163|user_id=2|amount=-3', 10), +(426, 1578498149, 'add', 'tst_finance', 'id=164|user_id=6|amount=3', 10), +(427, 1603201124, 'edit', 'tst_users', 'user.id = 37 - hide (1)', 15), +(428, 1603201130, 'edit', 'tst_users', 'user.id = 37 - hide (0)', 15), +(429, 1603201473, 'edit', 'tst_accounts', 'acc.id = 15 login = "tnov_3" [tnov_3]', 15), +(430, 1603204414, 'add', 'tst_finance', 'id=165|user_id=4|amount=50', 15), +(431, 1603205168, 'edit', 'tst_finance', 'id=10|user_id=6|amount=300|note=trista', 15), +(432, 1603205183, 'edit', 'tst_finance', 'id=10|user_id=6|amount=0|note=trista', 15), +(433, 1603205199, 'edit', 'tst_finance', 'id=10|user_id=6|amount=0|note=trista', 15), +(434, 1603205268, 'edit', 'tst_users', 'Dušan Bukovac [7503] - entry lock (1)', 15), +(435, 1603214270, 'edit', 'tst_users', 'Hana Hlavová [8888] - entry lock (1)', 15), +(436, 1603215016, 'edit', 'tst_users', 'Palo Bukovac [8101] - entry lock (1)', 15), +(437, 1603215024, 'edit', 'tst_users', 'user.id = 22 - hide (1)', 15), +(438, 1603215031, 'edit', 'tst_users', 'user.id = 22 - hide (0)', 15), +(439, 1603215364, 'edit', 'tst_users', 'Alena Bukovacová [7454] - entry lock (1)', 15), +(440, 1603215432, 'add', 'tst_finance', 'id=166|user_id=6|amount=-34', 15), +(441, 1603215432, 'add', 'tst_finance', 'id=167|user_id=25|amount=34', 15), +(442, 1603215471, 'add', 'tst_finance', 'id=168|user_id=4|amount=44', 15), +(443, 1603215471, 'add', 'tst_finance', 'id=169|user_id=5|amount=55', 15), +(444, 1603215482, 'add', 'tst_finance', 'id=170|user_id=4|amount=44', 15), +(445, 1603215482, 'add', 'tst_finance', 'id=171|user_id=5|amount=55', 15), +(446, 1603215511, 'add', 'tst_finance', 'id=172|user_id=4|amount=44', 15), +(447, 1603215511, 'add', 'tst_finance', 'id=173|user_id=5|amount=55', 15), +(448, 1603215515, 'add', 'tst_finance', 'id=174|user_id=4|amount=44', 15), +(449, 1603215515, 'add', 'tst_finance', 'id=175|user_id=5|amount=55', 15), +(450, 1671476006, 'add', 'tst_users', 'Petr Matula [8202]', 15), +(451, 1671476334, 'edit', 'tst_users', 'Petr Matula [8202] - entry lock (1)', 15), +(452, 1671476353, 'edit', 'tst_users', 'Petr Matula [8202] - entry lock (0)', 15), +(453, 1671476363, 'edit', 'tst_users', 'Petr Matula [8202] - entry lock (1)', 15), +(454, 1671476495, 'edit', 'tst_users', 'Petr Matula [8202] - entry lock (0)', 15), +(455, 1671476645, 'edit', 'tst_users', 'Petr Matula [8202] - entry lock (1)', 15), +(456, 1671476649, 'edit', 'tst_users', 'Petr Matula [8202] - entry lock (0)', 15), +(457, 1700315171, 'add', 'tst_finance', 'id=176|user_id=21|amount=100', 28), +(458, 1700315793, 'edit', 'tst_finance', 'id=37|user_id=9|amount=150|note=Startovne', 28), +(459, 1700315793, 'edit', 'tst_finance', 'id=38|user_id=9|amount=150|note=Startovne', 28), +(460, 1700315793, 'edit', 'tst_finance', 'id=39|user_id=9|amount=150|note=Startovne', 28), +(461, 1700315793, 'edit', 'tst_finance', 'id=40|user_id=9|amount=80|note=', 28), +(462, 1700315793, 'edit', 'tst_finance', 'id=41|user_id=9|amount=80|note=', 28), +(463, 1700317985, 'add', 'tst_finance', 'id=177|user_id=22|amount=100', 15); + +-- -------------------------------------------------------- + +-- +-- Struktura tabulky `tst_news` +-- + +DROP TABLE IF EXISTS `tst_news`; +CREATE TABLE IF NOT EXISTS `tst_news` ( + `id` int(10) unsigned NOT NULL, + `id_user` smallint(5) unsigned DEFAULT NULL, + `datum` int(11) NOT NULL DEFAULT '0', + `nadpis` varchar(50) COLLATE utf8_czech_ci NOT NULL DEFAULT '', + `text` longtext COLLATE utf8_czech_ci NOT NULL, + `internal` tinyint(1) NOT NULL DEFAULT '0', + `modify_flag` tinyint(1) NOT NULL DEFAULT '0' +) ENGINE=MyISAM AUTO_INCREMENT=138 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci COMMENT='novinky'; + +-- +-- Vypisuji data pro tabulku `tst_news` +-- + +INSERT INTO `tst_news` (`id`, `id_user`, `datum`, `nadpis`, `text`, `internal`, `modify_flag`) VALUES +(7, 11, 1295305200, '', 'Update na RC2.', 0, 0), +(5, 11, 1292281200, '', 'Spuštěn test cronu.', 0, 0), +(6, 11, 1294268400, '', 'Update na RC1.', 0, 0), +(8, 1, 1327878000, 'Nová doba', 'První RC verze 2.1 byl nasazen pro testovani. Konkrétně jde o build 234. Slouží k ověření funkčnosti systému, zatím bez financí.\r\n', 0, 0), +(9, 11, 1327878000, '', 'Update na build 236.', 0, 0), +(10, 11, 1327878000, '', 'Update na build 238.', 0, 0), +(11, 1, 1327878000, '', 'Update na build 239.', 0, 0), +(12, 1, 1338760800, 'Testování začíná', 'Druhá RC verze 2.1 byla nasazena pro testovani. Konkrétně jde o build 261. Slouží k ověření funkčnosti modernizace systému, pořád bez financí. Finance nejspíš budou až v další větší verzi.', 0, 0), +(13, 1, 1338847200, '', 'Update na build 262.', 0, 0), +(14, 1, 1338847200, 'Seznam změn', '', 0, 0), +(15, 1, 1339365600, '', 'Testeři vpuštěni :)', 0, 0), +(17, 23, 1339365600, 'mam pravo na pridávanie noviniek? ', 'Mám normalniho uzivatele + maleho trenera (2 nahodni sverenci). \r\n', 0, 0), +(19, 1, 1339452000, 'Upozornovani', 'Tak jsem konecne zapnul spravne upozornovani na email.', 0, 0), +(22, 19, 1339538400, 'Ahoj', 'Tak už jsem se taky pustila do testování:)', 0, 0), +(30, 21, 1340056800, 'Ahoj', 'Taky testuju !', 0, 0), +(32, 18, 1340143200, 'Zdar jak sviňa', 'Co ta šipka na liště v aktualitách. Nezmátla vás? ;-)tak já tedy edituji', 0, 0), +(33, 20, 1342648800, 'testujeme, ale...', '...ono se to postupně mění! takže testujeme vkládání novinek ještě jednou...i tučné písmo...i podtržené', 0, 0), +(34, 20, 1342648800, '', 'tak ještě jednou tučné a podtržené', 0, 0), +(35, 1, 1358809200, '', 'Update na RC3 build 291.', 0, 0), +(36, 1, 1358809200, 'Seznam změn ', '
    \r\n
  • různé menší změny a sjednocování vzhledu\r\n
  • přidána možnost editace novinky\r\n
  • několik jednotících úprav u malého trenéra\r\n
  • odkaz na seznam přihlášených již není pod ikonou typu závodu, pokus o sjednocení v rámci různých typů zobrazení\r\n
  • v aktualitkách přidána možnost přihlašování\r\n
  • další opravy dle nahlášených do mantisu.\r\n
  • drobné opravy a úpravy nahlášené při testování\r\n
', 0, 0), +(38, 10, 1358895600, 'test', 'test2', 0, 0), +(41, 1, 1358982000, '', 'Update na build 292. (Práva u editace novinky)', 0, 0), +(42, 1, 1359241200, '', 'Update na RC4 build 296.', 0, 0), +(43, 1, 1359241200, ' Seznam změn ', '
    \r\n
  • pridani bublinkove napovedy v hlavickach tabulek\r\n
  • odstraneno zobrazeni uzivateli, ze ma povoleno psani novinek\r\n
  • uprava menu spravce, slouceno do jednoho a znemozneno editovat sebe samu\r\n
  • zrusen starsi format prihlasky\r\n
  • drobne graficke upravy v upozornovani\r\n
', 0, 0), +(44, 1, 1359327600, '', 'Update na build 302. Vylepseni dialogu pro upozornovani emailem.', 0, 0), +(49, 12, 1359500400, 'Tak trochu test', 'Trochu testu Blabla', 0, 0), +(47, 1, 1359327600, '', 'Update na build 303. Upravy barvy zvyrazneni v tabulce.', 0, 0), +(48, 1, 1359327600, '', 'Update na build 304. Opravena funkncnost Upozornovani pod IE.', 0, 0), +(51, 1, 1360018800, '', 'Update na build 312. Přidáno testování základního nástřelu financí.', 0, 0), +(53, 1, 1360105200, '', 'Update na build 328.', 0, 0), +(54, 1, 1360623600, '', 'Update na build 341. Změny ohledně financí.', 0, 0), +(55, 1, 1361746800, '', 'Update na build 355.', 0, 0), +(56, 1, 1361746800, '', 'Update na build 356.', 0, 0), +(57, 1, 1361746800, 'Seznam změn ', '
    \r\n
  • Upraveno zobrazení informací o závodě, většinou se teď zobrazuje minimální info s možností zobrazit celé info.\r\n
  • Zobrazení přehledu financí pro oba typy trenerů.\r\n
  • Různé úpravy vzhledu u financí. A to jak zobrazení, tak i formulářů.\r\n
  • Zakladní funkční platby pro závody.\r\n
  • Oprava generování RSS.\r\n
\r\n', 0, 0), +(61, 1, 1366322400, '', 'Update na build 379.', 0, 0), +(62, 1, 1366322400, 'Seznam změn ', '
    \r\n
  • Přidána možnost pro odesílání emailu při vytvoření účtu a při změně hesla.\r\n
  • Aktualizace předdefinovaných kategorii pro MTBO.\r\n
  • Zrušeno zobrazení datumu v záhlaví některých stránek, další sjednocování vzhledu.\r\n
  • Odstraněny červené nápisy o refreshi. Provádí se automaticky pri změně.\r\n
  • Uživateli přidánan vlastno národnost, pro budoucí export do ORISu. Přidána podpora pro editaci národnosti.\r\n
', 0, 0), +(63, 1, 1367100000, '', 'Update na build 386.', 0, 0), +(64, 1, 1367100000, 'Seznam změn ', '
    \r\n
  • Pridana moznost hromadneho zadani castky a poznamky pro platby k zavodu.\r\n
  • Opraveno zobrazni lidi pro platby k zavodu.\r\n
', 0, 0), +(65, 1, 1368568800, '', 'Update na build 392.', 0, 0), +(66, 1, 1368568800, 'Seznam změn ', '
    \r\n
  • Přidána možnost změnit závod při update jednotlivé platby\r\n
', 0, 0), +(68, 11, 1369692000, '', 'ěěščřžýáíé\r\n12345', 0, 0), +(74, 1, 1391468400, '', 'Update na build 413.', 0, 0), +(71, 10, 1369692000, '+ěščšěřšěřžčýřřýžáýžíéíáýúůúů', 'ěěšžščýřáýžáýžéíýáúůúůúěčřšžčůáýíúůýžúřčůšěč', 0, 0), +(75, 1, 1391468400, 'Seznam změn', '
    \r\n
  • Posílena role správce\r\n
  • Možnost v závodě volby společné dopravy\r\n
  • Možnost reklamace k platbám u financí\r\n
', 0, 0), +(76, 1, 1392591600, '', 'Update na build 418.', 0, 0), +(77, 1, 1392591600, 'Seznam změn', '
    \r\n
  • Možnost označení závodu jako zrušeného\r\n
  • Možnost spec. textu v seznamu přihlášek člena\r\n
', 0, 0), +(78, 1, 1393282800, '', 'Update na build 424.', 0, 0), +(79, 1, 1393282800, 'Seznam změn ', '
    \r\n
  • Do exportu financí přidána registračka.\r\n
  • Přidány sumy za závod a za celý oddíl do financí.\r\n
  • Přidána možnost transferu peněz mezi členy.\r\n
  • Přidána možnost blokovat přihlášky na závody.\r\n
', 0, 0), +(80, 1, 1393455600, '', 'Update na build 432.', 0, 0), +(81, 1, 1393455600, 'Seznam změn', '
    \r\n
  • Vylepšená verze možnosti transferu peněz mezi členy. \r\n
  • Přidána možnost malého trenéra přiřadit si členy do financí.\r\n
', 0, 0), +(82, 1, 1400018400, '', 'Update na build 437.', 0, 0), +(83, 1, 1400018400, 'Seznam změn ', '
    \r\n
  • Sjednocení zobrazení v malém trenérovi\r\n
  • Rozšíření informací pro malého trenéra (suma za "rodinu", atp).\r\n
  • U finančníka doplněn sloupec s celkovou platbou za závod.\r\n
  • Odstraneni ''0'' z exportu přihlášek do jednotného formátu.\r\n
\r\n', 0, 0), +(84, 1, 1412028000, '', 'Update na build 439.', 0, 0), +(85, 1, 1412028000, 'Seznam změn', '
    \r\n
  • Doplnění společné dopravy do hromadného přihlašování [LuF]\r\n
', 0, 0), +(86, 1, 1420498800, '', 'Update na build 451.', 0, 0), +(87, 1, 1420498800, 'Seznam změn ', '
    \r\n
  • Rozšíření společné dopravy o automaticky stav. Nyní lze mít závod buď :
      \r\n
    • Bez společné dopravy\r\n
    • Společná doprava s výběrem účasti\r\n
    • Automatická společná doprava\r\n
    Nová třetí možnost neumožňuje závodníkovy vybrat zda využije hromadnou dopravu, počítá ji automaticky.\r\n
', 0, 0), +(88, 1, 1421535600, '', 'Update na build 454.', 0, 0), +(89, 1, 1421535600, 'Seznam změn ', '
    \r\n
  • Přidána editace a zobrazeni typu oddílového příspěvku pro člena. Možnost editace finančníkem.\r\n
', 0, 0), +(90, 1, 1422918000, '', 'Update na build 461.', 0, 0), +(91, 1, 1422918000, 'Seznam změn ', '
    \r\n
  • Komplet překódováno do UTF-8\r\n
  • Vnitřní opravy a rušení obsolete kódu\r\n
  • Přidána další varianta filtru pro zobrazení závodu, a to cca měsíc staré závody\r\n
', 0, 0), +(92, 1, 1423004400, '', 'Update na build 464.', 0, 0), +(93, 1, 1423004400, 'Seznam změn ', '
    \r\n
  • Oprava pravidelného rozesílání emailů.\r\n
', 0, 0), +(94, 10, 1424041200, '+ěřčžřčýřžýážýáííéˇqňˇočóöüï¨zaä¨c¨v¨b¨n¨n¨dgfrëwt', 'asdfadsfljalřěžýýčážýáíýířěřáěíářýíčáíščř''qwe;++;°;ˇěčřetˇGhDYˇHyˇyˇyuˇU͡OˇˇjˇghfďfšˇXC', 0, 0), +(95, 11, 1424041200, '''', '''', 0, 0), +(96, 1, 1424127600, '', 'Update na build 466.', 0, 0), +(97, 1, 1424127600, 'Seznam změn', '
    \r\n
  • Oprava zpracování duplicit v editaci kategorií.\r\n
  • Opraveno chování poznámky ve financích.\r\n
', 0, 0), +(98, 1, 1425423600, '', 'Update na build 470.', 0, 0), +(99, 1, 1425423600, 'Seznam změn ', '
    \r\n
  • Oprava drobností při přechodu na jiné kódování (emaily, generování loginu)\r\n
  • Defaultně je v převodu peněz prázdný příjemnce \r\n
\r\n', 0, 0), +(100, 1, 1426633200, '', 'Update na build 473.', 0, 0), +(101, 1, 1426633200, 'Seznam změn ', '
    \r\n
  • Opraveno zasilání upozorňování o finančním stavu člena.\r\n
\r\n', 0, 0), +(102, 10, 1429740000, 'Páteční trénink', 'Páteční trénink od 17 hodin na kraji lesa severně od univerzitního \r\nkampusu Bohunice (N 49°10.871'', E 16°34.173''). Krátká trať (hodně \r\nkontrol, krátké postupy), pro menší nefáborkovaná linie, pro začátečníky \r\nhvězdice (vždy 1 kontrola tam a zpět). Les je pěkný humus, zakrytí všech \r\núdů doporučeno.', 0, 0), +(103, 10, 1429740000, 'Páteční trénink od 17 hodin na kraji lesa severně ', 'Páteční trénink od 17 hodin na kraji lesa severně od univerzitního kampusu Bohunice (N 49°10.871'', E 16°34.173''). Krátká trať (hodně kontrol, krátké postupy), pro menší nefáborkovaná linie, pro začátečníky hvězdice (vždy 1 kontrola tam a zpět). Les je pěkný humus, zakrytí všech údů doporučeno. Páteční trénink od 17 hodin na kraji lesa severně od univerzitního kampusu Bohunice (N 49°10.871'', E 16°34.173''). Krátká trať (hodně kontrol, krátké postupy), pro menší nefáborkovaná linie, pro začátečníky hvězdice (vždy 1 kontrola tam a zpět). Les je pěkný humus, zakrytí všech údů doporučeno. Páteční trénink od 17 hodin na kraji lesa severně od univerzitního kampusu Bohunice (N 49°10.871'', E 16°34.173''). Krátká trať (hodně kontrol, krátké postupy), pro menší nefáborkovaná linie, pro začátečníky hvězdice (vždy 1 kontrola tam a zpět). Les je pěkný humus, zakrytí všech údů doporučeno. Páteční trénink od 17 hodin na kraji lesa severně od univerzitního kampusu Bohunice (N 49°10.871'', E 16°34.173''). Krátká trať (hodně kontrol, krátké postupy), pro menší nefáborkovaná linie, pro začátečníky hvězdice (vždy 1 kontrola tam a zpět). Les je pěkný humus, zakrytí všech údů doporučeno. Páteční trénink od 17 hodin na kraji lesa severně od univerzitního kampusu Bohunice (N 49°10.871'', E 16°34.173''). Krátká trať (hodně kontrol, krátké postupy), pro menší nefáborkovaná linie, pro začátečníky hvězdice (vždy 1 kontrola tam a zpět). Les je pěkný humus, zakrytí všech údů doporučeno. Páteční trénink od 17 hodin na kraji lesa severně od univerzitního kampusu Bohunice (N 49°10.871'', E 16°34.173''). Krátká trať (hodně kontrol, krátké postupy), pro menší nefáborkovaná linie, pro začátečníky hvězdice (vždy 1 kontrola tam a zpět). Les je pěkný humus, zakrytí všech údů doporučeno.', 0, 0), +(105, 1, 1430172000, '', 'Update na build 477.', 0, 0), +(106, 1, 1430172000, 'Seznam změn ', '
    \r\n
  • Sjednoceny aktualitky do jednoho seznamu jež zobrazuje datum a přihlášky X dní dopředu.\r\n
  • Oprava chyby, kdy při editaci platby se vždy vybral nějaký závod i když platba nepatřila závodu.\r\n
  • Opraveno zpracování seznamu kategorií, kdy občas vypadla poslední.\r\n
\r\n', 0, 0), +(107, 1, 1455318000, '', 'Update na build 493.', 0, 0), +(108, 1, 1455318000, 'Seznam změn ', '
    \r\n
  • Trenér může u nového člena zadat i rodné číslo.\r\n
  • Přidáno společné ubytování v přihláškách na závody.\r\n
  • Doplněny kontroly při převodech mezi členy (zůstatek, mínusové částky atp.)\r\n
  • Možnost admina resetovat plošně typ oddílových příspěvků.\r\n
\r\n', 0, 0), +(109, 1, 1455663600, '', 'Update na build 497.', 0, 0), +(110, 1, 1455663600, 'Seznam změn ', '
    \r\n
  • Rozšířen export financí o informace o přiřazeném závodě.\r\n
  • Oprava posílání peněz pro finančníka.\r\n
\r\n', 0, 0), +(111, 1, 1483830000, '', 'Update na build 502.', 0, 0), +(112, 1, 1483830000, 'Seznam změn ', 'Jen opravy chyb.', 0, 0), +(113, 1, 1514070000, '', 'Update na build 508.', 0, 0), +(114, 1, 1514070000, 'Seznam změn ', '
    \r\n
  • Nové typy pro závody/akce
  • \r\n
  • Přihlašování se doopravdy zavře až 2 hodiny po půlnoci
  • \r\n
\r\n', 0, 0), +(115, 1, 1515020400, '', 'Update na build 513.', 0, 0), +(116, 1, 1515020400, 'Seznam změn ', '
    \r\n
  • Opraveno zobrazení financí pro finančníka a trenéry
  • \r\n
  • Opraveno generování emailů o financích
  • \r\n
\r\n', 0, 0), +(117, 1, 1515452400, '', 'Update na build 515.', 0, 0), +(118, 1, 1515452400, 'Seznam změn', 'Jen opravy chyb. ', 0, 0), +(119, 1, 1518562800, '', 'Update na build 519.', 0, 0), +(120, 1, 1518562800, 'Seznam změn', '
    \r\n
  • Vylepsena podpora vice emailovych adres.
  • \r\n
  • Opraven problem s posilam penez u maleho trenera
  • \r\n
  • Finance - prehled u financnika - pridano zobrazeni k nejakemu datu
  • \r\n
  • U prihlasovatale uz nesjou zaskrtnuty stare zavody
  • \r\n
\r\n', 0, 0), +(121, 1, 1520636400, '', 'Update na build 527.', 0, 0), +(122, 1, 1520636400, 'HTTPS', 'Testovací provoz na HTTPS.', 0, 0), +(123, 1, 1530655200, '', 'Update na build 531.', 0, 0), +(124, 1, 1530655200, 'Seznam změn', '
    \r\n
  • Zmena poradi trideni zavodniku pri prihlasovani.
  • \r\n
  • Pridany interni novinky
  • \r\n
  • Pridano posilani poslednich novinek emailem.
  • \r\n
  • Pridano zobrazeni poslednich internich novinek do aktualitek.
  • \r\n
  • Normalni uzivatel si nemuze editovat sam nektere udaje
  • \r\n
', 0, 0), +(125, 1, 1530655200, 'Ukazkova interni novinka', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', 1, 0), +(126, 1, 1532642400, '', 'Update na build 533.', 0, 0), +(127, 1, 1532642400, 'Seznam změn', '
    \r\n
  • API pro seznam zavodu.
  • \r\n
', 0, 0), +(129, 14, 1533592800, 'Jendova pokusna novinka', 'Vypada to dobre! Muzu editovat novinky ostatnim?', 1, 0), +(130, 1, 1540677600, '', 'Update na build 537.', 0, 0), +(131, 1, 1543273200, '', 'Update na build 538.', 0, 0), +(132, 1, 1543273200, 'Seznam změn', '
    \r\n
  • Pokus o urychleni kodu - prihlasovani po 1 zavodnikovi pro trenery a prihlasovatele.
  • \r\n
', 0, 0), +(133, 11, 1577487600, '', 'Update na build 539.', 0, 0), +(134, 1, 1603144800, '', 'Update na build 570.', 0, 1), +(135, 1, 1607209200, '', 'Update na build 576.', 0, 1), +(136, 1, 1653170400, '', 'Update na build 607.', 0, 2), +(137, 1, 1653170400, 'Seznam změn', '
    \r\n
  • Předefinované kategorie lze nyní přímo editovat a rozšiřovat
  • \r\n
  • Vylepšeno zabezpečení hesel
  • \r\n
  • Přidán link s detaily o členovy do části finance
  • \r\n
  • Přihlašování po jednom nyní umožnuje schovávat již přihlášené z výběru na příhlášení
  • \r\n
  • Drobné opravy a úpravy UI, CSS, překlepy
  • \r\n
', 0, 1); + +-- -------------------------------------------------------- + +-- +-- Struktura tabulky `tst_users` +-- + +DROP TABLE IF EXISTS `tst_users`; +CREATE TABLE IF NOT EXISTS `tst_users` ( + `id` smallint(5) unsigned NOT NULL, + `prijmeni` varchar(30) COLLATE utf8_czech_ci NOT NULL DEFAULT '', + `jmeno` varchar(20) COLLATE utf8_czech_ci NOT NULL DEFAULT '', + `datum` date DEFAULT NULL, + `adresa` varchar(50) COLLATE utf8_czech_ci DEFAULT NULL, + `mesto` varchar(25) COLLATE utf8_czech_ci NOT NULL, + `psc` varchar(6) COLLATE utf8_czech_ci NOT NULL, + `tel_domu` varchar(25) COLLATE utf8_czech_ci DEFAULT NULL, + `tel_zam` varchar(25) COLLATE utf8_czech_ci DEFAULT NULL, + `tel_mobil` varchar(25) COLLATE utf8_czech_ci DEFAULT NULL, + `email` varchar(50) COLLATE utf8_czech_ci DEFAULT NULL, + `reg` int(4) unsigned zerofill NOT NULL DEFAULT '0000', + `si_chip` int(9) unsigned NOT NULL DEFAULT '0', + `hidden` tinyint(1) unsigned NOT NULL DEFAULT '0', + `sort_name` varchar(50) COLLATE utf8_czech_ci NOT NULL DEFAULT '', + `poh` enum('H','D') COLLATE utf8_czech_ci NOT NULL DEFAULT 'H', + `lic` enum('E','A','B','C','D','R','-') COLLATE utf8_czech_ci DEFAULT '-', + `lic_mtbo` enum('E','A','B','C','D','R','-') COLLATE utf8_czech_ci DEFAULT '-', + `lic_lob` enum('E','A','B','C','D','R','-') COLLATE utf8_czech_ci DEFAULT '-', + `fin` int(11) NOT NULL DEFAULT '0', + `chief_id` smallint(5) unsigned NOT NULL DEFAULT '0', + `rc` varchar(10) COLLATE utf8_czech_ci NOT NULL, + `narodnost` varchar(2) COLLATE utf8_czech_ci NOT NULL DEFAULT 'CZ', + `entry_locked` tinyint(1) unsigned NOT NULL DEFAULT '0', + `chief_pay` smallint(5) unsigned DEFAULT NULL, + `finance_type` int(10) unsigned NOT NULL DEFAULT '0' +) ENGINE=MyISAM AUTO_INCREMENT=39 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci COMMENT='vsechny informace o uzivatelich'; + +-- +-- Vypisuji data pro tabulku `tst_users` +-- + +INSERT INTO `tst_users` (`id`, `prijmeni`, `jmeno`, `datum`, `adresa`, `mesto`, `psc`, `tel_domu`, `tel_zam`, `tel_mobil`, `email`, `reg`, `si_chip`, `hidden`, `sort_name`, `poh`, `lic`, `lic_mtbo`, `lic_lob`, `fin`, `chief_id`, `rc`, `narodnost`, `entry_locked`, `chief_pay`, `finance_type`) VALUES +(1, 'Pátek', 'Richard', '0000-00-00', '', '', '', '', '', '', 'arnost.p@centrum.cz', 7609, 130, 0, 'Pátek Richard', 'H', 'C', '-', '-', 0, 0, '', 'CZ', 0, NULL, 2), +(2, 'König', 'Lukáš', '1980-06-17', '', '', '', '', '', '', 'kenia@seznam.cz', 8001, 121, 0, 'König Lukáš', 'H', 'C', '-', '-', 0, 0, '', 'CZ', 0, NULL, 0), +(3, 'Veselý', 'Martin', '0000-00-00', 'Předklášteří ', '', '', '', '', '', '', 7502, 53201, 0, 'Veselý Martin', 'H', 'C', '-', '-', 0, 12, '', 'CZ', 0, NULL, 0), +(4, 'Novák', 'Jan', '1991-01-01', '', '', '', '', '', '', '', 9111, 0, 0, 'Novák Jan', 'H', 'C', '-', '-', 0, 7, '', 'CZ', 0, 7, 3), +(5, 'Novák', 'Karel', '1993-01-01', '', '', '', '', '', '', '', 9312, 0, 0, 'Novák Karel', 'H', 'A', '-', '-', 0, 7, '', 'CZ', 0, 7, 0), +(6, 'Novák', 'Martin', '1995-01-01', '', '', '', '', '', '', '', 9513, 1341, 0, 'Novák Martin', 'H', 'E', '-', '-', 0, 0, '', 'CZ', 0, NULL, 0), +(7, 'Nováková', 'Eva', '1997-01-01', '', '', '', '', '', '', '', 9751, 55555, 0, 'Nováková Eva', 'D', 'E', 'E', '-', 0, 0, '', 'CZ', 0, NULL, 0), +(8, 'Nováková', 'Zuzana', '1999-01-01', '', '', '', '', '', '', '', 9952, 1341431, 0, 'Nováková Zuzana', 'D', 'R', '-', '-', 0, 7, '', 'CZ', 0, 7, 0), +(9, 'Nováková', 'Jitka', '1983-01-01', '', '', '', '', '', '', '', 8357, 49494, 0, 'Nováková Jitka', 'D', 'C', '-', '-', 0, 7, '', 'CZ', 0, 7, 0), +(10, 'Mazaný', 'Filil', '1988-05-01', '', '', '', '', '', '', '', 8801, 1486785, 0, 'Mazaný Filil', 'H', 'E', '-', 'A', 0, 0, '', 'CZ', 0, NULL, 2), +(11, 'Drábek', 'Jan', '1985-11-04', 'Škroupova 10', 'Brno - Židenice', '636 00', '', '', '608477026', 'jan_drabek@volny.cz', 8511, 49690, 0, 'Drábek Jan', 'H', 'C', '-', '-', 0, 13, '', 'CZ', 0, 13, 1), +(12, 'Zřídkaveselý', 'Libor', '1972-07-03', 'Skorkovského 153', 'Brno', '636 00', '549246395', '545321282', '604776993', 'zr@jaroska.cz', 7207, 101, 0, 'Zřídkaveselý Libor', 'H', 'C', '-', '-', 0, 0, '', 'CZ', 0, NULL, 0), +(13, 'Křístková', 'Veronika', '1983-01-28', 'Za kovárnou 405', 'Smržice', '79817', '', '', '736120094', 'fricco@seznam.cz', 8379, 52865, 0, 'Křístková Veronika', 'D', 'C', '-', '-', 0, 0, '', 'CZ', 0, NULL, 0), +(14, 'Hlavová', 'Hana', '1988-05-12', 'Tyršova 397', 'Konice', '798 52', '608131017', '', '608131017', 'hanah.kon@centrum.cz', 8888, 515450, 0, 'Hlavová Hana', 'D', 'E', '-', '-', 0, 0, '', 'CZ', 1, NULL, 3), +(15, 'Zvarik', 'Tomáš', '1977-01-29', '', '', '000 00', '', '', '', 'ciselko@gmail.com, icq 220735915', 7702, 0, 0, 'Zvarik Tomáš', 'H', 'C', '-', '-', 0, 0, '', 'CZ', 0, NULL, 0), +(16, 'Zřídkaveselý', 'Adam', '2005-11-11', 'Skorkovského 153', 'Brno', '636 00', '', '', '', '', 0505, 0, 0, 'Zřídkaveselý Adam', 'H', 'C', '-', '-', 0, 12, '', 'CZ', 0, NULL, 0), +(17, 'Zřídkaveselý', 'Martin', '2008-09-01', 'Skorkovského 153', 'Brno', '636 00', '', '', '', '', 0808, 0, 0, 'Zřídkaveselý Martin', 'H', 'C', '-', '-', 0, 12, '', 'CZ', 0, NULL, 0), +(18, 'Stehlík', 'Martin', '1985-06-25', 'Tichého 7', 'Brno', '616 00', '543240819', '', '608438928', 'stehlik.m@atlas.cz', 8503, 1985625, 0, 'Stehlík Martin', 'H', 'C', '-', '-', 0, 0, '', 'CZ', 0, NULL, 3), +(32, 'Urválek', 'Jiří', '0000-00-00', '', '', '', '', '', '', '', 6107, 0, 0, 'Urválek Jiří', 'H', 'C', '-', '-', 0, 0, '', 'CZ', 0, NULL, 0), +(21, 'Bukovac', 'Palo', '1981-09-27', 'Nezvalova 27', 'Bratislava, Slovensko', '821 06', '00421245525925', '', '00421905570266', 'bukki.pallo@zoznam.sk', 8101, 515478, 0, 'Bukovac Palo', 'H', 'E', '-', '-', 0, 14, '', 'CZ', 1, NULL, 0), +(22, 'Bukovac', 'Dušan', '1975-03-07', 'Nezvalova 27', 'Bratislava, Slovensko', '821 06', '00421245525925', '', '00421905296601', 'dusan.bukovac@vertical.sk ', 7503, 232004, 0, 'Bukovac Dušan', 'H', 'C', '-', '-', 0, 11, '', 'CZ', 1, NULL, 3), +(23, 'Bukovac', 'Maroš', '1976-05-25', 'Nezvalova 27', 'Bratislava, Slovensko', '821 06', '00421245525925', '00421268206015', '00421905974050', 'bukovaci@centrum.sk maros.bukovac@vertical.sk', 7605, 232006, 0, 'Bukovac Maroš', 'H', 'C', '-', '-', 0, 11, '', 'CZ', 1, NULL, 0), +(25, 'Bukovacová', 'Alena', '1974-04-22', 'Nezvalova 27', 'Bratislava, Slovensko', '821 06', '00421245525925', '', '00421905194946', 'alena.bukovacova@gmail.com', 7454, 232008, 0, 'Bukovacová Alena', 'D', 'C', '-', '-', 0, 14, '', 'CZ', 1, NULL, 0), +(26, 'Jevsejenko', 'Alexandr', '1981-01-23', 'Orlí 9', 'Brno', '602 00', '542213452', '', '605534547', 'jevsejenko@gmail.com', 8110, 52073, 0, 'Jevsejenko Alexandr', 'D', 'C', '-', '-', 0, 13, '', 'CZ', 0, NULL, 5), +(27, 'Koča', 'Jaroslav', '1982-06-15', 'Dusíkova 29', 'Brno', '638 00', '', '', '777269786', 'jerry.koca@email.cz', 8200, 301217, 0, 'Koča Jaroslav', 'H', 'C', '-', '-', 0, 13, '', 'CZ', 0, NULL, 4), +(28, 'Kočová', 'Hana', '1986-02-27', 'Vranov 260', 'Vranov', '664 32', '', '', '602 344 660', 'hankoc@seznam.cz', 8676, 52165, 0, 'Kočová Hana', 'D', 'A', '-', '-', 0, 18, '', 'CZ', 0, NULL, 1), +(29, 'Kolbaba', 'Tomáš', '1982-02-21', '', '', '', '', '', '724243655', 'kolbic@seznam.cz', 8243, 52022, 0, 'Kolbaba Tomáš', 'H', 'C', '-', '-', 0, 18, '', 'CZ', 0, NULL, 0), +(30, 'Zimmermann', 'Jakub', '1989-01-11', 'Blatnická 12', 'Brno', '628 00', '', '', '723 967 341', 'jarazim@seznam.cz ,skype:jara.zimmermann', 8928, 995810, 0, 'Zimmermann Jakub', 'H', 'C', '-', '-', 0, 15, '', 'CZ', 0, NULL, 0), +(31, 'Zimmermann', 'Štěpán', '1991-12-20', 'Blatnická 12', 'Brno', '628 00', '', '', '721062310', 'stepazdepa@seznam.cz, xzimmermanns@gmail.com', 9101, 911220, 0, 'Zimmermann Štěpán', 'H', 'R', '-', '-', 0, 15, '', 'CZ', 0, NULL, 0), +(33, 'Mádlová', 'Věra', '0000-00-00', '', '', '', '', '', '', '', 8951, 0, 0, 'Mádlová Věra', 'D', 'C', '-', '-', 0, 0, '', 'CZ', 0, NULL, 6), +(34, 'Gross', 'Michal', '0000-00-00', '', '', '', '', '', '', '', 6946, 0, 0, 'Gross Michal', 'H', 'C', '-', '-', 0, 0, '', 'CZ', 0, NULL, 0), +(36, 'Štěrbák', 'Řehoř', '0000-00-00', '', '', '', '', '', '', 'arnost@eob.cz', 8006, 0, 0, 'Štěrbák Řehoř', 'H', 'C', '-', '-', 0, 0, '', 'CZ', 0, NULL, 0), +(37, 'Mocvesely', 'Osvald', '1944-01-01', '', '', '', '', '', '', '', 4400, 0, 0, 'Mocvesely Osvald', 'H', 'C', '-', '-', 0, 0, '', 'BW', 1, NULL, 8), +(38, 'Matula', 'Petr', '1982-05-17', '', '', '', '', '', '', '', 8202, 2042531, 0, 'Matula Petr', 'H', 'C', '-', '-', 0, 0, '', 'CZ', 0, NULL, 5); + +-- -------------------------------------------------------- + +-- +-- Struktura tabulky `tst_xmailinfo` +-- + +DROP TABLE IF EXISTS `tst_xmailinfo`; +CREATE TABLE IF NOT EXISTS `tst_xmailinfo` ( + `id` int(11) unsigned NOT NULL, + `id_user` int(11) unsigned NOT NULL, + `email` varchar(50) COLLATE utf8_czech_ci NOT NULL, + `active_tf` tinyint(1) unsigned NOT NULL, + `active_ch` tinyint(1) unsigned NOT NULL, + `active_rg` tinyint(1) unsigned NOT NULL, + `daysbefore` int(2) NOT NULL, + `type` int(11) NOT NULL, + `sub_type` int(11) unsigned NOT NULL, + `ch_data` int(11) unsigned NOT NULL, + `active_fin` tinyint(1) unsigned NOT NULL, + `active_finf` tinyint(1) unsigned NOT NULL, + `fin_type` int(11) unsigned NOT NULL, + `fin_limit` smallint(5) NOT NULL, + `active_news` tinyint(1) unsigned NOT NULL DEFAULT '0' +) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; + +-- +-- Vypisuji data pro tabulku `tst_xmailinfo` +-- + +INSERT INTO `tst_xmailinfo` (`id`, `id_user`, `email`, `active_tf`, `active_ch`, `active_rg`, `daysbefore`, `type`, `sub_type`, `ch_data`, `active_fin`, `active_finf`, `fin_type`, `fin_limit`, `active_news`) VALUES +(1, 1, 'arnost@eob.cz', 1, 1, 1, 3, 31, 191, 7, 1, 0, 1, 500, 0), +(2, 2, 'kenia@seznam.cz', 1, 1, 1, 11, 31, 191, 7, 0, 0, 0, 0, 0), +(3, 11, 'jan_drabek@volny.cz', 0, 0, 0, 3, 1, 43, 0, 0, 0, 0, 0, 0), +(4, 13, 'fricco@seznam.cz', 0, 0, 0, 14, 31, 191, 7, 0, 0, 0, 0, 0), +(5, 18, 'stehlik.m@atlas.cz', 0, 0, 0, 3, 1, 0, 7, 0, 0, 0, 0, 0), +(6, 3, 'veselacek@atlas.cz', 0, 0, 0, 3, 31, 191, 7, 0, 0, 0, 0, 0); + +-- -------------------------------------------------------- + +-- +-- Struktura tabulky `tst_zavod` +-- + +DROP TABLE IF EXISTS `tst_zavod`; +CREATE TABLE IF NOT EXISTS `tst_zavod` ( + `id` smallint(5) unsigned NOT NULL, + `datum` int(11) NOT NULL DEFAULT '0', + `datum2` int(11) NOT NULL DEFAULT '0', + `nazev` varchar(50) COLLATE utf8_czech_ci DEFAULT NULL, + `misto` varchar(50) COLLATE utf8_czech_ci DEFAULT NULL, + `typ` enum('ob','mtbo','lob','jine','trail') COLLATE utf8_czech_ci NOT NULL, + `typ0` enum('Z','T','S','V','N','J') COLLATE utf8_czech_ci NOT NULL DEFAULT 'Z', + `vicedenni` tinyint(1) unsigned NOT NULL DEFAULT '0', + `zebricek` int(10) unsigned NOT NULL DEFAULT '0', + `ranking` enum('0','1') COLLATE utf8_czech_ci NOT NULL DEFAULT '0', + `odkaz` varchar(100) COLLATE utf8_czech_ci DEFAULT NULL, + `prihlasky` tinyint(4) unsigned NOT NULL DEFAULT '0', + `prihlasky1` int(11) DEFAULT '0', + `prihlasky2` int(11) NOT NULL DEFAULT '0', + `prihlasky3` int(11) NOT NULL DEFAULT '0', + `prihlasky4` int(11) NOT NULL DEFAULT '0', + `prihlasky5` int(11) NOT NULL DEFAULT '0', + `etap` tinyint(4) unsigned NOT NULL DEFAULT '0', + `kategorie` mediumtext COLLATE utf8_czech_ci NOT NULL, + `poznamka` mediumtext COLLATE utf8_czech_ci NOT NULL, + `vedouci` int(10) unsigned NOT NULL, + `poslano` tinyint(3) unsigned NOT NULL, + `oddil` varchar(7) COLLATE utf8_czech_ci NOT NULL DEFAULT '', + `send` tinyint(1) unsigned NOT NULL DEFAULT '0', + `modify_flag` int(10) unsigned NOT NULL, + `transport` tinyint(1) DEFAULT NULL, + `ubytovani` tinyint(1) DEFAULT NULL, + `cancelled` tinyint(1) NOT NULL DEFAULT '0' +) ENGINE=MyISAM AUTO_INCREMENT=51 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci COMMENT='tabulka popisu zavodu'; + +-- +-- Vypisuji data pro tabulku `tst_zavod` +-- + +INSERT INTO `tst_zavod` (`id`, `datum`, `datum2`, `nazev`, `misto`, `typ`, `typ0`, `vicedenni`, `zebricek`, `ranking`, `odkaz`, `prihlasky`, `prihlasky1`, `prihlasky2`, `prihlasky3`, `prihlasky4`, `prihlasky5`, `etap`, `kategorie`, `poznamka`, `vedouci`, `poslano`, `oddil`, `send`, `modify_flag`, `transport`, `ubytovani`, `cancelled`) VALUES +(1, 1545433200, 0, 'Vánoční běh Brnem', 'Brno', 'ob', 'V', 0, 0, '1', '', 1, 1543618800, 0, 0, 0, 0, 1, '', '', 0, 0, 'ABC', 0, 0, 0, 0, 1), +(2, 1545778800, 0, 'Štěpánský běh', 'Radostice2', 'jine', 'T', 0, 0, '1', '', 1, 1545174000, 0, 0, 0, 0, 1, '', '', 0, 0, 'BBM', 0, 0, 0, 0, 1), +(3, 1671750000, 1672009200, 'Svátky ', 'Doma u krbu', 'lob', 'T', 1, 2, '1', '', 4, 1670626800, 1670886000, 1671231600, 1671577200, 0, 0, '', '', 0, 0, 'XMA', 0, 5, 0, 0, 1), +(4, 1546210800, 0, 'Silvestrovské poježdění', 'Velodrom', 'mtbo', 'V', 0, 8, '1', '', 1, 1545865200, 0, 0, 0, 0, 1, '', '', 0, 0, 'ACH', 0, 0, 0, 0, 0), +(5, 1546124400, 0, 'Hromniční trápení', 'Blansko', 'ob', 'Z', 0, 0, '0', '', 1, 1545692400, 0, 0, 0, 0, 1, '', '', 0, 0, 'RBK', 0, 0, 0, 0, 0), +(6, 1675378800, 1675724400, 'Další pracovní týden', 'Brno', 'jine', 'T', 1, 0, '0', '', 5, 1672873200, 1672959600, 1673046000, 1674774000, 1675033200, 5, '', '', 0, 0, 'WRK', 0, 5, 0, 0, 0), +(7, 1675378800, 0, 'testovaci nejakej', 'misto', 'ob', 'J', 0, 191, '1', 'www.asdad.sd', 1, 1672873200, 0, 0, 0, 0, 1, '', '', 0, 0, 'asdf', 0, 5, 0, 0, 0), +(8, 1673737200, 0, 'MČR klasická trať, 1.ČP', 'Strážné ', 'lob', 'Z', 0, 17, '0', 'www.ob.spartak-vrchlabi.cz/zavody2011/lob/', 1, 1672786800, 0, 0, 0, 0, 1, '', '', 0, 0, 'VRL', 0, 5, 0, 0, 0), +(9, 1674946800, 0, '3.ČP na krátké trati', 'Zinnwald, DE', 'lob', 'Z', 0, 1, '0', '', 1, 1672786800, 0, 0, 0, 0, 1, '', '', 0, 0, 'LIV', 0, 5, 1, 0, 0), +(10, 1676761200, 0, 'MČR dvoučlenných družstev', 'Tři Studně', 'lob', 'T', 0, 48, '0', 'www.ski-adventure.cz/2011/rozpis-lob/', 1, 1675897200, 0, 0, 0, 0, 1, '', '', 28, 0, 'OSN+TBM', 0, 5, 0, 0, 0), +(11, 1708902000, 0, 'MČR ve sprintu, 6.ČP', 'Nová Ves u Rýmařova', 'lob', 'Z', 0, 16, '0', '', 0, 0, 0, 0, 0, 0, 1, '', '', 0, 0, 'VRB', 0, 4, 0, 0, 0), +(36, 1675292400, 0, 'Hromniční trápení', 'Blansko', 'ob', 'Z', 0, 7, '1', 'hromnicni.wz.cz/', 2, 1674860400, 1675033200, 0, 0, 0, 1, '', 'Testovací závod', 0, 0, 'RBK', 0, 5, 2, 0, 0), +(13, 1710802800, 1710889200, 'Brutus Extreme Orienteering', '', 'jine', 'Z', 1, 0, '0', '', 3, 1705964400, 1707260400, 1709334000, 0, 0, 2, 'D10N;D12C;D14C;D16C;D18C;D21C;D21D;D35C;D45C;D55C;H10N;H12C;H14C;H16C;H18C;H21C;H21D;H35C;H45C;H55C;HDR', '', 0, 0, 'GEMMA', 0, 5, 0, 0, 0), +(14, 1675465200, 0, 'Hromniční trápení II', 'Blansko', 'ob', 'Z', 0, 8, '0', 'www.hromnicni.wz.cz/', 1, 1675033200, 0, 0, 0, 0, 1, 'H14;D14;H19;D19;H35;D35;P;HDR', '', 0, 0, 'RBK', 0, 5, 0, 0, 0), +(15, 1680213600, 1680300000, 'CESOM 2015', 'Borský Mikuláš', 'ob', 'Z', 1, 0, '1', '', 2, 1677193200, 1678834800, 0, 0, 0, 3, 'H10N;D10N;H12C;D12C;H14C;D14C;H16C;D16C;H18C;D18C;H21C;D21C;H21D;D21D;H35C;D35C;H45C;D45C;H55C;D55C;HDR;D12B;D14B;D16B;D18B;D20B;D21B;D35B;D40B;D45B;D50B;D55B;D60B;D65B;H12B;H14B;H16B;H18B;H20B;H21B;H35B;H40B;H45B;H50B;H55B;H60B;H65B;H70B;H75B', '', 0, 0, 'BBA', 0, 5, 0, 0, 0), +(16, 1687989600, 1688162400, 'Cena střední Moravy', 'Okrouhlá – Melkov', 'mtbo', 'Z', 1, 0, '1', 'csm12.kobkon.cz/', 1, 1686693600, 0, 0, 0, 0, 3, 'H10N;D10N;H12C;D12C;D12;H14C;D14C;D14;H16C;D16C;D16;H18C;D18C;D18;H21C;D21C;H21D;D21D;H35C;D35C;D35;H45C;D45C;D45;H55C;D55C;D55;D10N;D12C;D14C;D16C;D18C;D21C;D21D;D35C;D45C;D55C;HDR;D10N;D12C;D14C;D16C;D18C;D21C;D21D;D35C;D45C;D55C;H10N;H12C;H14C;H16C;H18C;H21C;H21D;H35C;H45C;H55C;HDR;', '', 0, 0, 'KON+ZBM', 0, 5, 1, 0, 0), +(18, 1689199200, 1689372000, 'H.S.H. Vysočina cup', 'Leština u Skály', 'ob', 'Z', 1, 128, '1', 'www.obchrast.com/', 2, 1686866400, 1688508000, 0, 0, 0, 3, '', '', 0, 0, 'CHT', 0, 5, 1, 1, 0), +(19, 1689112800, 0, 'H.S.H. Vysočina cup - noční ', 'Leština u Skály', 'ob', 'Z', 0, 128, '1', 'obchrast.com/nz.php?nzid=891', 1, 1683842400, 0, 0, 0, 0, 1, '', '2154365ěřčěšžžřážíáýöïÿ¨tëw¨s¨ds¨d¨x¨vdgf¨ds¨sä', 23, 0, 'CHT', 0, 5, 1, 0, 0), +(20, 1721426400, 1721599200, 'Veteran cup', 'Obec Záměl', 'ob', 'Z', 1, 0, '1', 'obvamberk.aspone.cz/VETERAN_CUP_2012_podrobny_rozpis.pdf', 3, 1715551200, 1719525600, 1720735200, 0, 0, 3, '', '', 0, 0, 'VAM', 0, 5, 0, 0, 0), +(21, 1721944800, 1722204000, 'Grand Prix Silesia 20XX', 'Vidnava', 'ob', 'Z', 1, 128, '1', 'silesia.obopava.cz/silesia_2012/', 3, 1709074800, 1719525600, 1720821600, 0, 0, 5, 'D10N;D12;D14;D16;D18;D21C;D21D;D35;D45;D55;H10N;H12;H14;H16;H18;H21C;H21D;H35;H45;H55;HDR', '', 0, 0, 'AOP', 1, 5, 1, 1, 0), +(22, 1724536800, 1724623200, 'Pěkné prázdniny', 'Malá Skála, Český ráj', 'ob', 'Z', 1, 0, '1', 'www.tur.cz/pekneprazdniny/', 2, 1722031200, 1723327200, 0, 0, 0, 3, '', '', 0, 0, 'TUR', 0, 5, 2, 0, 0), +(23, 1535061600, 0, 'Pěkné prázdniny - sprint ', 'Turnov', 'ob', 'Z', 0, 0, '1', 'tur.cz/pekneprazdniny/', 2, 1532642400, 1532728800, 0, 0, 0, 1, '', 'Prihlasuje se spolu prihlaskou na PPcka', 0, 0, 'TUR', 1, 0, 0, 0, 0), +(24, 1723932000, 1724018400, '3 etapový OB Jičín ', 'Sportcentrum Brada', 'ob', 'Z', 1, 0, '1', 'objicin.tpc.cz/jicin/main.php?&zavody=40&menu=100&jazyk=0', 1, 1720821600, 0, 0, 0, 0, 3, '', 'E1 a E2 bez rankingu', 0, 0, 'SJC', 0, 5, 1, 0, 0), +(25, 1725055200, 1725228000, 'Cena východních Čech', 'Seč', 'ob', 'Z', 1, 0, '1', 'lpu.cz/cvc15', 2, 1719957600, 1720821600, 0, 0, 0, 3, '', '', 0, 0, 'LPU', 0, 5, 0, 0, 0), +(26, 1727474400, 1727560800, 'MČR na klasice', 'Skokovy', 'ob', 'Z', 1, 17, '1', 'www.ok99.cz/mct2012', 1, 1725746400, 0, 0, 0, 0, 0, '', '', 0, 0, 'PHK+TUV', 0, 5, 0, 0, 0), +(27, 1538776800, 0, 'MČR štafet', 'Březina', 'ob', 'Z', 0, 48, '1', 'mcrdruzstva.eob.cz', 1, 1537567200, 0, 0, 0, 0, 1, 'a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d', '', 0, 0, 'ZBM', 0, 0, 1, 0, 0), +(28, 1728252000, 0, 'MČR klubů a oblastních výběrů žactva', 'Březina', 'ob', 'Z', 0, 0, '1', 'mcrdruzstva.eob.cz', 1, 1726956000, 0, 0, 0, 0, 1, 'H65D;', '', 0, 0, 'ZBM', 0, 5, 0, 0, 0), +(29, 1536357600, 0, 'ČP, ŽA , ŽB - klasika', 'Nová Ves, lyžařský stadion', 'ob', 'Z', 0, 131, '1', 'cp12.aljosa.org', 1, 1534975200, 0, 0, 0, 0, 1, '', '', 0, 0, 'ASU', 0, 0, 0, 0, 0), +(30, 1536444000, 0, 'ČP, ŽA , ŽB - krátká trať', 'Nová Ves, lyžařský stadion', 'ob', 'Z', 0, 131, '1', 'cp12.aljosa.org', 1, 1534975200, 0, 0, 0, 0, 1, '', '', 0, 0, 'ASU', 0, 0, 0, 0, 0), +(31, 1726351200, 0, '9. JmL - klasika', 'Předklášteří', 'ob', 'Z', 0, 136, '1', 'www.tbm.cz/zavody/', 0, 0, 0, 0, 0, 0, 1, '', '', 0, 0, 'TBM', 0, 4, 1, 0, 0), +(32, 1726956000, 0, '10. JmL - klasika', 'Nová Dědina', 'ob', 'Z', 0, 136, '1', 'www.smerkromeriz.cz/poradame/', 5, 1715292000, 1718056800, 1720735200, 1723500000, 1726264800, 1, '', '', 0, 0, 'SKM', 0, 5, 2, 0, 0), +(33, 1539381600, 0, '11. JmL - klasika', 'Dambořice', 'ob', 'Z', 0, 136, '1', 'abm.eob.cz/', 1, 1538863200, 0, 0, 0, 0, 1, 'H10N;D10N;H10;D10;H12;D12;H14;D14;H16;D16;H18;D18;H21C;D21C;H21D;D21D;H35;D35;H45;D45;H55;D55;H65;HDR;P;pořadatel;', '', 0, 0, 'ABM', 0, 0, 0, 0, 0), +(34, 1539986400, 0, '12. JmL - klasika2', 'Bílý potok', 'ob', 'Z', 0, 136, '1', 'vsk-mendelu.cz/', 0, 0, 0, 0, 0, 0, 1, '', 'Test', 0, 0, 'VBM', 0, 0, 0, 0, 0), +(35, 1540591200, 0, '13. JmL - klasika', 'Senetářov', 'ob', 'Z', 0, 136, '1', 'radioklub.blansko.net/', 1, 1536098400, 0, 0, 0, 0, 1, 'D12E;', '', 0, 0, 'RBK', 0, 0, 0, 0, 0), +(37, 1551999600, 0, 'Kvetinovy zavod bez dopravy', 'Brno', 'ob', 'Z', 0, 24, '0', '', 2, 1549234800, 1549407600, 0, 0, 0, 1, '', '', 0, 0, 'PBM', 0, 0, 0, 0, 0), +(38, 1678402800, 1678575600, 'Perina kup', 'Podoli', 'ob', 'S', 1, 132, '1', '', 3, 1675292400, 1676588400, 1677625200, 0, 0, 4, 'D10N;D12;D14;D16;D18;D21C;D21D;D35;D45;D55;H10N;H12;H14;H16;H18;H21C;H21D;H35;H45;H55;HDR;', '', 0, 0, 'PGP', 0, 5, 0, 0, 0), +(40, 1710198000, 0, 'bjlsdjvn', 'Brno', 'ob', 'Z', 0, 128, '1', 'o-mikron.czechian.net/', 2, 1710025200, 1710111600, 0, 0, 0, 1, 'H35A;D35A;H35D;D35D;', 'fsdgdgh', 0, 0, 'MBM', 0, 5, 0, 0, 1), +(41, 1707433200, 0, 'POKUS ABM', 'Žabiny', 'ob', 'Z', 0, 0, '1', '', 3, 1694124000, 1699657200, 1703977200, 0, 0, 1, 'D10N;D12;D14;D16;D18;D21C;D21D;D35;D45;D55;H10N;H12;H14;H16;H18;H21C;H21D;H35;H45;H55;HDR;', '', 0, 0, 'ZBM', 0, 5, 0, 0, 0), +(42, 1708815600, 0, 'pokus ABM 2', 'Brno', 'ob', 'Z', 0, 1, '1', '', 1, 1708729200, 0, 0, 0, 0, 1, 'D10N;D12;D14;D16;D18;D21C;D21D;D35;D45;D55;H10N;H12;H14;H16;H18;H21C;H21D;H35;H45;H55;HDR;', '', 0, 0, 'ABM', 0, 5, 1, 0, 0), +(43, 1678402800, 0, 'ABM 3', '', 'ob', 'J', 0, 0, '1', '', 1, 1678402800, 0, 0, 0, 0, 1, 'D10N;D12;D14;D16;D18;D21C;D21D;D35;D45;D55;H10N;H12;H14;H16;H18;H21C;H21D;H35;H45;H55;HDR;', '', 0, 0, 'ABM', 0, 5, 0, 0, 0), +(44, 1738364400, 0, 'Testovaci zavod pro dopravu', 'Misto', 'ob', 'Z', 0, 52, '1', '', 0, 0, 0, 0, 0, 0, 1, '', '', 0, 0, 'XYZ', 0, 4, 1, 0, 0), +(45, 1720994400, 0, 'ěščřžýáíé', 'BřBr = ěščřžýáíé', 'ob', 'J', 0, 0, '1', '', 0, 0, 0, 0, 0, 0, 1, '', '', 0, 0, 'AZT', 0, 4, 1, 0, 0), +(46, 1602712800, 0, 'Test', 'Brno', 'ob', 'Z', 0, 1, '1', '', 1, 1603058400, 0, 0, 0, 0, 1, '', '', 38, 0, 'YBV', 0, 2, 2, 1, 0), +(47, 1615590000, 0, 'Pokus', 'XXX', 'ob', 'Z', 0, 1, '1', '', 2, 1607727600, 1610406000, 0, 0, 0, 1, 'D10N;D12C;D14C;D16C;D18C;D21C;D21D;D35C;D45C;D55C;H10N;H12C;H14C;H16C;H18C;H21C;H21D;H35C;H45C;H55C;HDR', '', 0, 0, 'kkk', 1, 2, 0, 0, 0), +(48, 1658354400, 0, 'Letni test', 'Brno - Salingrad', 'jine', 'Z', 0, 17, '0', '', 2, 1658095200, 1658268000, 0, 0, 0, 1, 'D16A;D18A;D20A;D21A;D21E;H16A;H18A;H20A;H21A;H21E', '', 0, 0, 'FAK', 0, 2, 2, 2, 0), +(49, 1675378800, 0, 'MČR Klasika', 'Dolní Lhota', 'ob', 'Z', 0, 1, '1', '', 2, 1674169200, 1674255600, 0, 0, 0, 1, 'H18D;H18N;H20B;H20C;H21E;H21A;D10N;D12;D14;D16;D18;D21C;D21D;D35;D45;D55;H10N;H12;H14;H16;H18;H21C;H21D;H35;H45;H55;HDR;D16A;D18A;D20A;D21A;D21E;H16A;H18A;H20A', '', 0, 0, 'GBM', 0, 2, 1, 2, 0), +(50, 1699311600, 0, 'Kamenec pod Vtáčnikom Middle sobota', 'Kamenec pod Vtáčnikom', 'ob', 'Z', 0, 1, '1', 'is.orienteering.sk/competitions/1759', 3, 1696111200, 1696370400, 1698793200, 0, 0, 1, 'D10N;D12;D14;D16;D18;D21C;D21D;D35;D45;D55;H10N;H12;H14;H16;H18;H21C;H21D;H35;H45;H55;HDR', 'Slovenský rebríček jednotlivcov - E1 07.10.2023 Stredná trať 205\r\nSlovenský rebríček jednotlivcov - E2 08.10.2023 Stredná trať 212', 0, 0, 'SKS', 0, 2, 0, 0, 0); + +-- -------------------------------------------------------- + +-- +-- Struktura tabulky `tst_zavxus` +-- + +DROP TABLE IF EXISTS `tst_zavxus`; +CREATE TABLE IF NOT EXISTS `tst_zavxus` ( + `id` int(10) unsigned NOT NULL, + `id_user` smallint(5) unsigned NOT NULL DEFAULT '0', + `id_zavod` smallint(5) unsigned NOT NULL DEFAULT '0', + `kat` varchar(10) COLLATE utf8_czech_ci NOT NULL DEFAULT '', + `pozn` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL, + `pozn_in` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL, + `termin` tinyint(4) unsigned NOT NULL DEFAULT '1', + `si_chip` int(9) unsigned NOT NULL DEFAULT '0', + `transport` tinyint(1) DEFAULT NULL, + `ubytovani` tinyint(1) DEFAULT NULL +) ENGINE=MyISAM AUTO_INCREMENT=135 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci COMMENT='tabulka prihlasek - clovek X zavod'; + +-- +-- Vypisuji data pro tabulku `tst_zavxus` +-- + +INSERT INTO `tst_zavxus` (`id`, `id_user`, `id_zavod`, `kat`, `pozn`, `pozn_in`, `termin`, `si_chip`, `transport`, `ubytovani`) VALUES +(2, 1, 14, 'H19', '', '', 1, 0, NULL, NULL), +(3, 1, 15, 'H21', '', '', 1, 0, NULL, NULL), +(4, 2, 15, 'H21', '', '', 1, 0, NULL, NULL), +(5, 3, 15, 'H21', '', '', 1, 0, NULL, NULL), +(6, 4, 15, 'H21', 'postel', '', 1, 0, NULL, NULL), +(7, 5, 15, 'H20', '', 'jedu vlakem', 1, 0, NULL, NULL), +(8, 6, 15, 'H18', '', '', 1, 0, NULL, NULL), +(9, 7, 15, 'D16', '', '', 1, 0, NULL, NULL), +(10, 8, 15, 'D14', '', '', 1, 0, NULL, NULL), +(11, 9, 15, 'D21', 'stan', '', 1, 0, NULL, NULL), +(12, 1, 21, 'H21A', 'ubytovani na louce', '', 2, 0, NULL, NULL), +(13, 1, 23, 'H', '', '', 1, 0, NULL, NULL), +(14, 1, 22, 'H21A', 'louka', '', 1, 0, NULL, NULL), +(16, 15, 18, 'H10', 'chci F1', 'a teba', 1, 0, NULL, NULL), +(19, 11, 16, 'H21A', 'ubytování v lese', '', 1, 0, 1, NULL), +(20, 11, 19, 'H21A', '', '', 1, 0, 0, NULL), +(21, 22, 29, 'H21B', '', '', 1, 0, NULL, NULL), +(22, 14, 25, 'D21', '', '', 1, 0, NULL, NULL), +(27, 29, 26, 'H21', '', '', 1, 0, NULL, NULL), +(28, 18, 26, 'H21', 'Pojedu', '', 1, 0, NULL, NULL), +(29, 28, 26, 'D21', '', '', 1, 0, NULL, NULL), +(30, 13, 23, 'D21', 'tohle je jen testovací přihláška:)', '', 1, 0, NULL, NULL), +(31, 27, 22, 'HDR', 'TESTING', '', 1, 0, NULL, NULL), +(34, 3, 10, 'H105', '', '', 1, 0, NULL, NULL), +(35, 3, 36, 'H21', 'Co nejdřív', '', 1, 0, NULL, NULL), +(41, 8, 38, 'H21D', '', '', 1, 0, NULL, NULL), +(40, 5, 38, 'D35', '', '', 1, 0, NULL, NULL), +(39, 32, 38, 'H50', '', '', 1, 0, NULL, NULL), +(42, 11, 38, 'D21C', '', '', 1, 0, NULL, NULL), +(43, 14, 38, 'H12', '', '', 1, 0, NULL, NULL), +(44, 2, 38, 'H21C', '', '', 1, 0, NULL, NULL), +(45, 1, 35, 'H21', '', '', 1, 0, NULL, NULL), +(46, 1, 20, 'H21', '', '', 1, 0, NULL, NULL), +(47, 1, 38, 'H21', '', '', 3, 0, NULL, NULL), +(48, 4, 40, 'D35A', '', '', 1, 0, NULL, NULL), +(49, 4, 41, 'H21C', '', '', 1, 0, NULL, NULL), +(50, 5, 41, 'H21C', '', '', 1, 0, NULL, NULL), +(51, 6, 41, 'H21C', '', '', 1, 0, NULL, NULL), +(52, 7, 41, 'D18', '', '', 1, 0, NULL, NULL), +(53, 8, 41, 'D16', '', '', 1, 0, NULL, NULL), +(54, 4, 42, 'H21C', '', '', 1, 0, NULL, NULL), +(55, 5, 42, 'H21D', '', '', 1, 0, NULL, NULL), +(56, 6, 42, 'H18', '', '', 1, 0, NULL, NULL), +(57, 7, 42, 'D21C', '', '', 1, 0, NULL, NULL), +(58, 8, 42, 'D16', '', '', 1, 0, NULL, NULL), +(103, 2, 45, 'H21B', '', '', 1, 0, 1, 0), +(60, 5, 43, 'H21D', '', '', 1, 0, NULL, NULL), +(61, 6, 43, 'H21C', '', '', 1, 0, NULL, NULL), +(62, 7, 43, 'D18', '', '', 1, 0, NULL, NULL), +(63, 8, 43, 'D16', '', '', 1, 0, NULL, NULL), +(64, 8, 16, 'h', '', '', 1, 0, 0, NULL), +(65, 33, 16, 'D21', '', '', 1, 0, 1, NULL), +(66, 16, 36, '12', '', '', 1, 0, 0, NULL), +(67, 16, 37, '12', '', '', 1, 0, 0, NULL), +(68, 2, 44, '123', '', '', 1, 0, 1, NULL), +(69, 21, 44, '12', '', '', 1, 0, 1, NULL), +(70, 26, 44, '122', '', '', 1, 0, 1, NULL), +(71, 16, 44, '321', '', '', 1, 0, 1, NULL), +(72, 27, 44, '1', '', '', 1, 0, 0, NULL), +(73, 34, 44, '999', '', '', 1, 0, 1, NULL), +(74, 25, 44, '45', '', '', 1, 0, 0, NULL), +(75, 14, 44, '2', '', '', 1, 0, 0, NULL), +(76, 1, 32, 'H19', '', '', 1, 0, 0, NULL), +(77, 1, 25, 'H21C', '', '', 1, 0, 0, NULL), +(78, 1, 19, 'H35', '', '', 1, 0, 0, NULL), +(79, 1, 18, 'H35', '', '', 1, 0, 0, NULL), +(80, 17, 37, '10', '', '', 1, 0, 0, NULL), +(81, 2, 37, 'H21', '', '', 1, 0, 0, NULL), +(82, 16, 16, 'H10', '', '', 1, 0, 1, NULL), +(83, 2, 16, 'D34', 'ěčřčžčýýíýéýéˇoö''i''u''öïüÿ¨tëë¨q¨s¨d¨g¨h¨kj¨m¨bv¨xc¨xz¨zčďˇFˇgRěˇqˇWeťˇyúˇiKˇhˇfć', '', 1, 0, 1, NULL), +(84, 2, 19, 'D123', '\\''\\\\\\''adsfsad', '', 1, 0, 0, NULL), +(85, 4, 19, 'H21A', '', '', 1, 0, 0, NULL), +(100, 8, 7, 'H40', '', '', 1, 0, 0, 0), +(102, 8, 6, 'G11', '', '', 2, 0, 0, 0), +(104, 16, 4, 'D21Q', '', '', 1, 0, 0, 0), +(105, 17, 4, 'q12w', '', '', 1, 0, 0, 0), +(106, 32, 4, 'weq1', '', '', 1, 0, 0, 0), +(107, 37, 4, 'e221', '', '', 1, 0, 0, 0), +(108, 4, 29, 'D21B', '', '', 1, 0, 0, 0), +(109, 8, 29, 'H21B', '', '', 1, 0, 0, 0), +(110, 2, 27, 'a,b,c,d,a,', '', '', 1, 0, 0, 0), +(111, 28, 37, 'D12C', '', '', 1, 0, 0, 0), +(112, 4, 47, 'H55C', '', '', 1, 0, 0, 0), +(113, 5, 47, 'D35C', '', '', 1, 0, 0, 0), +(118, 6, 47, 'H35C', '', '', 1, 0, 0, 0), +(115, 7, 47, 'D18C', '', '', 1, 0, 0, 0), +(117, 8, 47, 'H18C', '', '', 1, 0, 0, 0), +(119, 11, 48, 'H21E', '', '', 1, 0, 0, 0), +(120, 34, 48, 'H21A', '', '', 1, 0, 0, 0), +(121, 27, 48, 'H21A', '', '', 1, 0, 0, 0), +(122, 2, 48, 'H16A', '', '', 1, 0, 0, 0), +(123, 8, 48, 'D21E', '', '', 1, 0, 0, 0), +(124, 15, 48, 'H21E', '', '', 1, 0, 0, 0), +(125, 26, 48, 'H21A', '', '', 1, 0, 0, 0), +(126, 28, 48, 'D21E', '', '', 1, 0, 0, 0), +(127, 29, 48, 'H21A', '', '', 1, 0, 0, 0), +(128, 8, 49, 'H21C', 'poznámka do přihlášky', 'poznámka interní', 1, 0, 1, 0), +(129, 6, 50, 'H45', 'tester 1', '', 3, 0, 0, 0), +(130, 4, 50, 'H45', '', '', 3, 0, 0, 0), +(131, 6, 13, 'D21C', '', '', 1, 0, 0, 0), +(132, 4, 11, 'H', '', '', 1, 0, 0, 0), +(133, 4, 13, 'H', '', '', 1, 0, 0, 0); + +-- +-- Klíče pro exportované tabulky +-- + +-- +-- Klíče pro tabulku `tst_accounts` +-- +ALTER TABLE `tst_accounts` + ADD PRIMARY KEY (`id`), + ADD UNIQUE KEY `login` (`login`), + ADD KEY `policy_mng` (`policy_mng`), + ADD KEY `id_users` (`id_users`); + +-- +-- Klíče pro tabulku `tst_categories_predef` +-- +ALTER TABLE `tst_categories_predef` + ADD PRIMARY KEY (`id`); + +-- +-- Klíče pro tabulku `tst_claim` +-- +ALTER TABLE `tst_claim` + ADD PRIMARY KEY (`id`); + +-- +-- Klíče pro tabulku `tst_finance` +-- +ALTER TABLE `tst_finance` + ADD PRIMARY KEY (`id`); + +-- +-- Klíče pro tabulku `tst_finance_types` +-- +ALTER TABLE `tst_finance_types` + ADD PRIMARY KEY (`id`); + +-- +-- Klíče pro tabulku `tst_modify_log` +-- +ALTER TABLE `tst_modify_log` + ADD PRIMARY KEY (`id`); + +-- +-- Klíče pro tabulku `tst_news` +-- +ALTER TABLE `tst_news` + ADD PRIMARY KEY (`id`), + ADD KEY `sort_datum` (`datum`,`id`); + +-- +-- Klíče pro tabulku `tst_users` +-- +ALTER TABLE `tst_users` + ADD PRIMARY KEY (`id`), + ADD KEY `name2` (`sort_name`), + ADD KEY `chief_id` (`chief_id`); + +-- +-- Klíče pro tabulku `tst_xmailinfo` +-- +ALTER TABLE `tst_xmailinfo` + ADD PRIMARY KEY (`id`); + +-- +-- Klíče pro tabulku `tst_zavod` +-- +ALTER TABLE `tst_zavod` + ADD PRIMARY KEY (`id`), + ADD FULLTEXT KEY `misto` (`misto`); + +-- +-- Klíče pro tabulku `tst_zavxus` +-- +ALTER TABLE `tst_zavxus` + ADD PRIMARY KEY (`id`), + ADD KEY `id_termin` (`termin`,`id`); + +-- +-- AUTO_INCREMENT pro tabulky +-- + +-- +-- AUTO_INCREMENT pro tabulku `tst_accounts` +-- +ALTER TABLE `tst_accounts` + MODIFY `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=31; +-- +-- AUTO_INCREMENT pro tabulku `tst_categories_predef` +-- +ALTER TABLE `tst_categories_predef` + MODIFY `id` int(10) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=7; +-- +-- AUTO_INCREMENT pro tabulku `tst_claim` +-- +ALTER TABLE `tst_claim` + MODIFY `id` int(10) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=5; +-- +-- AUTO_INCREMENT pro tabulku `tst_finance` +-- +ALTER TABLE `tst_finance` + MODIFY `id` int(10) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=178; +-- +-- AUTO_INCREMENT pro tabulku `tst_finance_types` +-- +ALTER TABLE `tst_finance_types` + MODIFY `id` int(10) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=14; +-- +-- AUTO_INCREMENT pro tabulku `tst_modify_log` +-- +ALTER TABLE `tst_modify_log` + MODIFY `id` int(10) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=464; +-- +-- AUTO_INCREMENT pro tabulku `tst_news` +-- +ALTER TABLE `tst_news` + MODIFY `id` int(10) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=138; +-- +-- AUTO_INCREMENT pro tabulku `tst_users` +-- +ALTER TABLE `tst_users` + MODIFY `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=39; +-- +-- AUTO_INCREMENT pro tabulku `tst_xmailinfo` +-- +ALTER TABLE `tst_xmailinfo` + MODIFY `id` int(11) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=7; +-- +-- AUTO_INCREMENT pro tabulku `tst_zavod` +-- +ALTER TABLE `tst_zavod` + MODIFY `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=51; +-- +-- AUTO_INCREMENT pro tabulku `tst_zavxus` +-- +ALTER TABLE `tst_zavxus` + MODIFY `id` int(10) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=135; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/docker/db_init/d235220_members_latest.sql b/docker/db_init/d235220_members_latest.sql new file mode 100644 index 0000000..7cee142 --- /dev/null +++ b/docker/db_init/d235220_members_latest.sql @@ -0,0 +1,1501 @@ +-- phpMyAdmin SQL Dump +-- version 5.2.3 +-- https://www.phpmyadmin.net/ +-- +-- Host: db +-- Generation Time: Apr 09, 2026 at 08:23 PM +-- Server version: 10.11.16-MariaDB-ubu2204 +-- PHP Version: 8.3.26 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +START TRANSACTION; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Database: `d235220_members` +-- + +-- -------------------------------------------------------- + +-- +-- Table structure for table `tokens` +-- + +CREATE TABLE `tokens` ( + `device` varchar(36) NOT NULL COMMENT 'https://capacitorjs.com/docs/apis/device#deviceid', + `device_name` varchar(32) NOT NULL, + `user_id` smallint(5) NOT NULL, + `fcm_token` varchar(4096) NOT NULL, + `fcm_token_timestamp` timestamp NOT NULL DEFAULT current_timestamp() COMMENT 'update on token update', + `app_version` varchar(16) NOT NULL, + `app_last_opened` timestamp NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_czech_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `tst_accounts` +-- + +CREATE TABLE `tst_accounts` ( + `id` smallint(5) UNSIGNED NOT NULL, + `id_users` smallint(5) DEFAULT NULL, + `login` varchar(25) NOT NULL DEFAULT '', + `heslo` varchar(255) NOT NULL DEFAULT '', + `policy_news` tinyint(1) UNSIGNED NOT NULL DEFAULT 0, + `policy_regs` tinyint(1) UNSIGNED NOT NULL DEFAULT 0, + `policy_mng` tinyint(1) UNSIGNED NOT NULL DEFAULT 0, + `policy_adm` tinyint(1) UNSIGNED NOT NULL DEFAULT 0, + `podpis` varchar(15) NOT NULL DEFAULT '', + `locked` tinyint(1) UNSIGNED NOT NULL DEFAULT 0, + `last_visit` int(11) NOT NULL DEFAULT 0, + `policy_fin` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_czech_ci COMMENT='loginy a hesla uzivatelu'; + +-- +-- Dumping data for table `tst_accounts` +-- + +INSERT INTO `tst_accounts` (`id`, `id_users`, `login`, `heslo`, `policy_news`, `policy_regs`, `policy_mng`, `policy_adm`, `podpis`, `locked`, `last_visit`, `policy_fin`) VALUES +(1, 0, 'admin', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 0, 0, 0, '', 0, 1710802800, 0), +(10, 2, 'test_k', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 1, 0, 1, 'Kenia', 0, 1578524400, 1), +(11, 1, 'test_a', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 1, 4, 1, 'arnost', 0, 1578438000, 1), +(12, 3, 'test_v', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 1, 4, 1, 'Veseláček', 0, 1359586800, 1), +(13, 4, 'tnov_1', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 1, 0, 0, 'tnov_1', 0, 1700262000, 0), +(14, 5, 'tnov_2', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 0, 4, 0, 'tnov_2', 0, 1708988400, 0), +(15, 6, 'tnov_3', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 1, 4, 1, 'tnov_3', 0, 1708988400, 1), +(16, 7, 'tnov_4', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 0, 0, 2, 0, 'tnov_4', 0, 1708988400, 0), +(17, 8, 'tnov_5', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 0, 0, 0, 0, 'tnov_5', 0, 1701903600, 0), +(18, 11, 'test_d1', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 0, 2, 0, 'Drbča', 0, 1393455600, 0), +(19, 14, 'hanah', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 0, 2, 0, 'Hanka', 0, 1420758000, 0), +(20, 13, 'test_k1', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 0, 2, 0, 'Verča', 0, 1342648800, 0), +(21, 18, 'test_s1', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 0, 2, 0, 'Martin', 0, 1340056800, 0), +(22, 12, 'test_z1', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 0, 2, 0, 'Zhusta', 0, 1361919600, 1), +(23, 15, 'test_z3', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 0, 2, 0, 'Tomi1', 0, 1358982000, 0), +(24, 32, 'test_c1', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 1, 4, 1, 'Cvrcek', 0, 1359932400, 0), +(25, 23, 'MB7605', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 0, 0, 0, 0, 'Maroš', 0, 0, 0), +(26, 21, 'PB8101', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 0, 0, 0, 0, 'Palo', 0, 0, 0), +(27, 33, 'VM8951', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 1, 0, 0, 0, 'Věra', 0, 1421622000, 1), +(28, 9, 'tnov_6', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 0, 0, 0, 0, 'tnov_6', 0, 1700262000, 1), +(29, 34, 'majkl', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 0, 1, 2, 0, 'majkl', 0, 1393714800, 1), +(30, 36, 'RS8006', '$2y$10$R1tJ3QEZsG490bMvfao2jOKnhrJUOnHntqKQwgp14vbIN88BMRMje', 0, 0, 0, 0, 'Řehoř', 0, 0, 0); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `tst_categories_predef` +-- + +CREATE TABLE `tst_categories_predef` ( + `id` int(10) UNSIGNED NOT NULL, + `name` varchar(50) NOT NULL, + `cat_list` varchar(255) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_czech_ci; + +-- +-- Dumping data for table `tst_categories_predef` +-- + +INSERT INTO `tst_categories_predef` (`id`, `name`, `cat_list`) VALUES +(1, 'Oblž', 'D10N;D12;D14;D16;D18;D21C;D21D;D35;D45;D55;H10N;H12;H14;H16;H18;H21C;H21D;H35;H45;H55;HDR;'), +(2, 'Oblž větší', 'D10N;D12C;D14C;D16C;D18C;D21C;D21D;D35C;D45C;D55C;H10N;H12C;H14C;H16C;H18C;H21C;H21D;H35C;H45C;H55C;HDR;'), +(3, 'žebříček B', 'D12B;D14B;D16B;D18B;D20B;D21B;D21C;D35B;D40B;D45B;D50B;D55B;D60B;D65B;H12B;H14B;H16B;H18B;H20B;H21B;H21C;H35B;H40B;H45B;H50B;H55B;H60B;H65B;H70B;H75B;'), +(4, 'žebříček A', 'D16A;D18A;D20A;D21A;D21E;H16A;H18A;H20A;H21A;H21E;'), +(5, 'Štafety', 'D14;D18;D21;D105;D140;H14;H18;H21;H105;H140;H165;dorost;dospělí;HD175;HD235;'), +(6, 'MTBO', 'W11;W14;W17;W20;W21E;W21A;W21B;W40;W50;W60;M11;M14;M17;M20;M21E;M21A;M21B;M40A;M40B;M50;M60;OPEN;'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `tst_claim` +-- + +CREATE TABLE `tst_claim` ( + `id` int(10) UNSIGNED NOT NULL, + `user_id` int(10) UNSIGNED NOT NULL, + `payment_id` int(10) UNSIGNED NOT NULL, + `text` mediumtext NOT NULL, + `date` timestamp NOT NULL DEFAULT current_timestamp() +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_czech_ci; + +-- +-- Dumping data for table `tst_claim` +-- + +INSERT INTO `tst_claim` (`id`, `user_id`, `payment_id`, `text`, `date`) VALUES +(1, 2, 23, '¨ěščěšřžčýřžýářžýýöïüÿt¨rewëw¨dfs¨ds¨dfas', '2015-02-16 15:56:11'), +(2, 2, 9, '¨;+ě+čřžščýřžýíáýáéýáí', '2015-02-16 15:56:37'), +(3, 2, 13, '', '2015-02-16 16:08:56'), +(4, 9, 87, 'vyreseno', '2018-08-28 18:46:37'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `tst_finance` +-- + +CREATE TABLE `tst_finance` ( + `id` int(10) UNSIGNED NOT NULL, + `id_users_editor` smallint(5) UNSIGNED NOT NULL, + `id_users_user` smallint(5) UNSIGNED NOT NULL, + `id_zavod` int(10) UNSIGNED DEFAULT NULL, + `amount` int(11) NOT NULL, + `date` date NOT NULL, + `note` varchar(255) DEFAULT NULL, + `storno` tinyint(1) DEFAULT NULL, + `storno_by` int(10) UNSIGNED DEFAULT NULL, + `storno_date` date DEFAULT NULL, + `storno_note` varchar(255) DEFAULT NULL, + `claim` tinyint(1) DEFAULT NULL COMMENT 'null = bez reklamace, 1 = aktivni reklamace, 0 = uzavrena reklamace' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_czech_ci; + +-- +-- Dumping data for table `tst_finance` +-- + +INSERT INTO `tst_finance` (`id`, `id_users_editor`, `id_users_user`, `id_zavod`, `amount`, `date`, `note`, `storno`, `storno_by`, `storno_date`, `storno_note`, `claim`) VALUES +(1, 0, 8, 3, -5000, '2013-02-05', '', NULL, NULL, NULL, NULL, NULL), +(2, 0, 8, 4, 5400, '2013-02-05', '', NULL, NULL, NULL, NULL, NULL), +(3, 1, 1, NULL, 4000, '2013-02-05', 'členský příspěvek', NULL, NULL, NULL, NULL, NULL), +(4, 1, 1, 11, -200, '2013-02-05', 'startovné', NULL, NULL, NULL, NULL, NULL), +(5, 1, 1, 11, -60, '2013-02-05', 'ubytování', NULL, NULL, NULL, NULL, NULL), +(6, 2, 22, NULL, -32, '2013-02-05', '32', NULL, NULL, NULL, NULL, NULL), +(7, 2, 22, 17, 543, '2013-02-05', '543', NULL, NULL, NULL, NULL, NULL), +(8, 2, 2, 3, -32768, '2013-02-05', 'er3', 1, 2, '2013-02-06', 'storno', NULL), +(9, 2, 2, 3, -100, '2013-02-06', 'stovka', NULL, NULL, NULL, NULL, 0), +(10, 2, 22, 37, 0, '2013-02-06', 'trista', NULL, NULL, NULL, NULL, NULL), +(11, 1, 7, 10, 300, '2013-02-21', 'test', 1, 2, '2013-03-23', '', NULL), +(12, 1, 1, 38, -130, '2013-02-25', 'startovné', NULL, NULL, NULL, NULL, NULL), +(13, 1, 2, 38, -130, '2013-02-25', 'startovné', NULL, NULL, NULL, NULL, 0), +(14, 1, 11, 38, 130, '2013-02-25', 'startovné', NULL, NULL, NULL, NULL, NULL), +(15, 1, 6, 38, -70, '2013-02-25', 'storno startovné', NULL, NULL, NULL, NULL, NULL), +(16, 1, 5, 35, -70, '2013-02-25', 'storno startovné', NULL, NULL, NULL, NULL, NULL), +(17, 12, 22, NULL, 500, '2013-02-01', 'Oddílové přípsěvky', NULL, NULL, NULL, NULL, NULL), +(18, 12, 1, 1, 80, '2013-02-27', 'závod Jml', NULL, NULL, NULL, NULL, NULL), +(19, 12, 2, 1, 80, '2013-02-27', 'závod Jml', NULL, NULL, NULL, NULL, NULL), +(20, 12, 3, 1, 80, '2013-02-27', 'závod Jml', NULL, NULL, NULL, NULL, NULL), +(21, 12, 4, 1, 0, '2013-02-27', 'závod Jml', NULL, NULL, NULL, NULL, NULL), +(22, 12, 5, 1, 80, '2013-02-27', 'závod Jml', NULL, NULL, NULL, NULL, NULL), +(23, 12, 2, NULL, 1800, '2013-02-27', 'Oddílové příspěvky', NULL, NULL, NULL, NULL, 0), +(24, 2, 22, NULL, -100, '2013-03-23', 'platba', NULL, NULL, NULL, NULL, NULL), +(25, 2, 1, 20, 400, '2013-03-23', 'adfds', NULL, NULL, NULL, NULL, NULL), +(26, 33, 33, 33, -40, '2013-05-14', 'vkld', NULL, NULL, NULL, NULL, NULL), +(27, 2, 29, 26, 100, '2013-05-15', 'sto podruhe', NULL, NULL, NULL, NULL, NULL), +(28, 2, 3, 36, 400, '2013-05-28', '+??š?+?š??š?šžž?ýáýú?ú?', NULL, NULL, NULL, NULL, NULL), +(29, 2, 22, 36, 100, '2013-05-28', 'sto', NULL, NULL, NULL, NULL, NULL), +(30, 1, 8, 10, -500, '2013-05-28', '?š??žýáíé', NULL, NULL, NULL, NULL, NULL), +(31, 1, 9, 15, 200, '2013-05-28', 'test2', NULL, NULL, NULL, NULL, NULL), +(32, 1, 8, 15, 300, '2013-05-28', 'test2', NULL, NULL, NULL, NULL, NULL), +(33, 9, 13, 40, -40, '2014-01-31', '', NULL, NULL, NULL, NULL, NULL), +(34, 9, 13, NULL, 40, '2014-01-31', '', NULL, NULL, NULL, NULL, NULL), +(35, 0, 26, NULL, 200, '2014-02-04', '', NULL, NULL, NULL, NULL, NULL), +(36, 9, 27, NULL, 300, '2014-02-04', 'aser', 1, 9, '2014-02-04', 'chybka', NULL), +(37, 9, 4, 41, 150, '2014-02-06', 'Startovne', NULL, NULL, NULL, NULL, NULL), +(38, 9, 5, 41, 150, '2014-02-06', 'Startovne', NULL, NULL, NULL, NULL, NULL), +(39, 9, 6, 41, 150, '2014-02-06', 'Startovne', NULL, NULL, NULL, NULL, NULL), +(40, 9, 7, 41, 80, '2014-02-06', '', NULL, NULL, NULL, NULL, NULL), +(41, 9, 8, 41, 80, '2014-02-06', '', NULL, NULL, NULL, NULL, NULL), +(42, 9, 4, NULL, 1000, '2014-02-06', 'vklad na účet', NULL, NULL, NULL, NULL, NULL), +(43, 2, 22, 11, 100, '2014-02-07', '', NULL, NULL, NULL, NULL, NULL), +(44, 2, 22, 11, -200, '2014-02-07', '', NULL, NULL, NULL, NULL, NULL), +(45, 2, 22, 11, 300, '2014-02-07', 'vklad', NULL, NULL, NULL, NULL, NULL), +(46, 9, 4, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(47, 9, 5, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(48, 9, 6, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(49, 9, 7, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(50, 9, 8, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(51, 9, 4, 42, 80, '2014-02-11', '', 1, 9, '2014-02-11', '', NULL), +(52, 9, 5, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(53, 9, 6, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(54, 9, 7, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(55, 9, 8, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(56, 9, 4, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(57, 9, 5, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(58, 9, 6, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(59, 9, 7, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(60, 9, 8, 42, 80, '2014-02-11', '', NULL, NULL, NULL, NULL, NULL), +(61, 7, 7, 0, -400, '2014-02-26', '', NULL, NULL, NULL, NULL, NULL), +(62, 7, 9, 0, 400, '2014-02-26', '', NULL, NULL, NULL, NULL, NULL), +(63, 5, 5, 0, -400, '2014-02-26', '', NULL, NULL, NULL, NULL, NULL), +(64, 5, 8, 0, 400, '2014-02-26', '', NULL, NULL, NULL, NULL, NULL), +(65, 9, 4, 8, -4000, '2014-02-27', 'test velke platby', NULL, NULL, NULL, NULL, NULL), +(66, 13, 13, 0, -100, '2014-02-27', '', NULL, NULL, NULL, NULL, NULL), +(67, 13, 11, 27, 1000, '2014-02-27', '', NULL, NULL, NULL, NULL, NULL), +(68, 11, 11, 0, -200, '2014-02-27', '', NULL, NULL, NULL, NULL, NULL), +(69, 11, 13, 0, 200, '2014-02-27', '', NULL, NULL, NULL, NULL, NULL), +(70, 9, 4, 43, -80, '2014-03-02', '', NULL, NULL, NULL, NULL, NULL), +(71, 9, 5, 43, -80, '2014-03-02', '', NULL, NULL, NULL, NULL, NULL), +(72, 9, 6, 43, -80, '2014-03-02', '', NULL, NULL, NULL, NULL, NULL), +(73, 9, 7, 43, -80, '2014-03-02', '', NULL, NULL, NULL, NULL, NULL), +(74, 9, 8, 43, -80, '2014-03-02', '', NULL, NULL, NULL, NULL, NULL), +(75, 2, 1, 21, 1000, '2014-04-29', '', NULL, NULL, NULL, NULL, NULL), +(76, 2, 2, 0, -12, '2015-02-16', 'asfs', NULL, NULL, NULL, NULL, NULL), +(77, 2, 22, 0, 12, '2015-02-16', 'asfs', NULL, NULL, NULL, NULL, NULL), +(78, 1, 23, 36, 100, '2015-02-16', '', NULL, NULL, NULL, NULL, NULL), +(79, 0, 22, 15, 100, '2015-02-17', '[\'2222', NULL, NULL, NULL, NULL, NULL), +(80, 9, 14, 0, 500, '2016-02-15', 'Vklad', NULL, NULL, NULL, NULL, NULL), +(81, 9, 14, 31, -30, '2016-02-15', '', NULL, NULL, NULL, NULL, NULL), +(82, 9, 13, 31, -500, '2016-02-15', '', NULL, NULL, NULL, NULL, NULL), +(83, 9, 33, 31, -13, '2016-02-15', '', NULL, NULL, NULL, NULL, NULL), +(84, 9, 9, 0, -20, '2016-02-15', 'zkouška transferu', NULL, NULL, NULL, NULL, NULL), +(85, 9, 10, 0, 20, '2016-02-15', 'zkouška transferu', NULL, NULL, NULL, NULL, NULL), +(86, 1, 1, 0, -200, '2016-02-20', '', NULL, NULL, NULL, NULL, NULL), +(87, 1, 9, 0, 200, '2016-02-20', '', NULL, NULL, NULL, NULL, 0), +(88, 22, 22, 0, -1000, '2016-05-11', '', 1, 9, '2016-05-11', '', NULL), +(89, 22, 32, 0, 1000, '2016-05-11', '', NULL, NULL, NULL, NULL, NULL), +(90, 2, 7, NULL, 2000, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(91, 2, 8, 29, -840, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(92, 2, 8, 30, -1820, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(93, 2, 4, 0, 2840, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(94, 2, 5, 0, -150, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(95, 2, 5, 0, 300, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(96, 2, 6, 0, -170, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(97, 2, 9, 0, -780, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(98, 2, 7, 0, -20, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(99, 7, 7, 0, -1819, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(100, 7, 8, 0, 1819, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(101, 2, 7, 0, 1819, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(102, 2, 8, 0, -1819, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(103, 1, 8, 0, 1820, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(104, 1, 5, 0, -1820, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(105, 2, 5, 34, 0, '2017-02-27', '', NULL, NULL, NULL, NULL, NULL), +(106, 2, 8, 0, 10000, '2018-02-09', '', NULL, NULL, NULL, NULL, NULL), +(107, 2, 9, 0, 10000, '2018-02-09', '', NULL, NULL, NULL, NULL, NULL), +(108, 2, 7, 0, 10000, '2018-02-09', '', NULL, NULL, NULL, NULL, NULL), +(109, 0, 37, 4, -500, '2018-03-10', '', NULL, NULL, NULL, NULL, NULL), +(110, 9, 37, 0, -500, '2018-03-10', 'oddilove prispevky', NULL, NULL, NULL, NULL, NULL), +(111, 9, 37, 0, 3000, '2018-03-10', 'vklad na ucet', NULL, NULL, NULL, NULL, NULL), +(112, 9, 37, 1, -150, '2018-03-10', '', NULL, NULL, NULL, NULL, NULL), +(113, 37, 37, 0, -300, '2018-03-10', ' [Gross Michal->Mocvesely Osvald] ', NULL, NULL, NULL, NULL, NULL), +(114, 37, 34, 0, 300, '2018-03-10', ' [Gross Michal->Mocvesely Osvald] ', NULL, NULL, NULL, NULL, NULL), +(115, 37, 37, 0, -200, '2018-03-10', ' [Kočová Hana->Mocvesely Osvald] ', NULL, NULL, NULL, NULL, NULL), +(116, 37, 28, 0, 200, '2018-03-10', ' [Kočová Hana->Mocvesely Osvald] ', NULL, NULL, NULL, NULL, NULL), +(117, 7, 7, 0, -1, '2018-03-10', ' [Nováková Eva->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(118, 7, 22, 0, 1, '2018-03-10', ' [Nováková Eva->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(119, 2, 2, 0, -2, '2018-03-10', '', NULL, NULL, NULL, NULL, NULL), +(120, 2, 22, 0, 2, '2018-03-10', '', NULL, NULL, NULL, NULL, NULL), +(121, 2, 2, 0, -3, '2018-03-10', '', NULL, NULL, NULL, NULL, NULL), +(122, 2, 23, 0, 3, '2018-03-10', '', NULL, NULL, NULL, NULL, NULL), +(123, 2, 2, 0, -1, '2018-03-13', ' [König Lukáš->Bukovac Dušan] poznamka 1', NULL, NULL, NULL, NULL, NULL), +(124, 2, 22, 0, 1, '2018-03-13', ' [König Lukáš->Bukovac Dušan] poznamka 1', NULL, NULL, NULL, NULL, NULL), +(125, 22, 22, 0, -2, '2018-03-13', ' [König Lukáš->Bukovac Dušan] poznamka 2', NULL, NULL, NULL, NULL, NULL), +(126, 22, 2, 0, 2, '2018-03-13', ' [König Lukáš->Bukovac Dušan] poznamka 2', NULL, NULL, NULL, NULL, NULL), +(127, 22, 22, 0, -2, '2018-03-13', ' [König Lukáš->Bukovac Dušan] poznamka 2', NULL, NULL, NULL, NULL, NULL), +(128, 22, 2, 0, 2, '2018-03-13', ' [König Lukáš->Bukovac Dušan] poznamka 2', NULL, NULL, NULL, NULL, NULL), +(129, 2, 2, 0, -1, '2018-03-16', ' [König Lukáš->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(130, 2, 22, 0, 1, '2018-03-16', ' [König Lukáš->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(131, 2, 2, 0, -2, '2018-03-16', ' [König Lukáš->Nováková Eva] ', NULL, NULL, NULL, NULL, NULL), +(132, 2, 7, 0, 2, '2018-03-16', ' [König Lukáš->Nováková Eva] ', NULL, NULL, NULL, NULL, NULL), +(133, 7, 7, 0, -1, '2018-03-16', ' [Nováková Eva->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(134, 7, 22, 0, 1, '2018-03-16', ' [Nováková Eva->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(135, 7, 7, 0, -2, '2018-03-16', ' [Novák Karel->Nováková Eva] ', NULL, NULL, NULL, NULL, NULL), +(136, 7, 5, 0, 2, '2018-03-16', ' [Novák Karel->Nováková Eva] ', NULL, NULL, NULL, NULL, NULL), +(137, 7, 7, 0, -3, '2018-03-16', ' [Novák Karel->Nováková Eva] novakova->novak', NULL, NULL, NULL, NULL, NULL), +(138, 7, 5, 0, 3, '2018-03-16', ' [Novák Karel->Nováková Eva] novakova->novak', NULL, NULL, NULL, NULL, NULL), +(139, 2, 2, 0, -12, '2018-03-22', ' [König Lukáš->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(140, 2, 22, 0, 12, '2018-03-22', ' [König Lukáš->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(141, 2, 2, 0, -13, '2018-03-22', ' [König Lukáš->Nováková Eva] ', NULL, NULL, NULL, NULL, NULL), +(142, 2, 7, 0, 13, '2018-03-22', ' [König Lukáš->Nováková Eva] ', NULL, NULL, NULL, NULL, NULL), +(143, 2, 2, 0, -300, '2018-03-22', ' [König Lukáš->Novák Martin] ', NULL, NULL, NULL, NULL, NULL), +(144, 2, 6, 0, 300, '2018-03-22', ' [König Lukáš->Novák Martin] ', NULL, NULL, NULL, NULL, NULL), +(145, 2, 2, 0, -300, '2018-03-22', ' [König Lukáš->Nováková Eva] ', NULL, NULL, NULL, NULL, NULL), +(146, 2, 7, 0, 300, '2018-03-22', ' [König Lukáš->Nováková Eva] ', NULL, NULL, NULL, NULL, NULL), +(147, 6, 6, 0, -1, '2018-03-22', ' [Novák Martin->König Lukáš] nov-kenia', NULL, NULL, NULL, NULL, NULL), +(148, 6, 2, 0, 1, '2018-03-22', ' [Novák Martin->König Lukáš] nov-kenia', NULL, NULL, NULL, NULL, NULL), +(149, 6, 6, 0, -2, '2018-03-22', ' [Novák Martin->Nováková Eva] mart-eva', NULL, NULL, NULL, NULL, NULL), +(150, 6, 7, 0, 2, '2018-03-22', ' [Novák Martin->Nováková Eva] mart-eva', NULL, NULL, NULL, NULL, NULL), +(151, 7, 7, 0, -5, '2018-03-22', ' [Nováková Eva->Novák Martin] eva-martin', NULL, NULL, NULL, NULL, NULL), +(152, 7, 6, 0, 5, '2018-03-22', ' [Nováková Eva->Novák Martin] eva-martin', NULL, NULL, NULL, NULL, NULL), +(153, 7, 7, 0, -6, '2018-03-22', ' [Nováková Eva->König Lukáš] eva-kenia', NULL, NULL, NULL, NULL, NULL), +(154, 7, 2, 0, 6, '2018-03-22', ' [Nováková Eva->König Lukáš] eva-kenia', NULL, NULL, NULL, NULL, NULL), +(155, 9, 21, 5, -50, '2018-08-28', '', NULL, NULL, NULL, NULL, NULL), +(156, 9, 11, 5, -100, '2018-08-28', '', NULL, NULL, NULL, NULL, NULL), +(157, 2, 2, 0, 10000, '2020-01-08', 'test', NULL, NULL, NULL, NULL, NULL), +(158, 2, 2, 0, -1000, '2019-01-08', 'test 2019', NULL, NULL, NULL, NULL, NULL), +(159, 2, 2, 0, -1, '2020-01-08', ' [König Lukáš->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(160, 2, 22, 0, 1, '2020-01-08', ' [König Lukáš->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(161, 2, 2, 0, -2, '2020-01-08', ' [König Lukáš->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(162, 2, 22, 0, 2, '2020-01-08', ' [König Lukáš->Bukovac Dušan] ', NULL, NULL, NULL, NULL, NULL), +(163, 2, 2, 0, -3, '2020-01-08', ' [König Lukáš->Novák Martin] ', NULL, NULL, NULL, NULL, NULL), +(164, 2, 6, 0, 3, '2020-01-08', ' [König Lukáš->Novák Martin] ', NULL, NULL, NULL, NULL, NULL), +(165, 6, 4, 46, 50, '2020-10-20', '', NULL, NULL, NULL, NULL, NULL), +(166, 6, 6, 0, -34, '2020-10-20', ' [Novák Martin->Bukovacová Alena] ', NULL, NULL, NULL, NULL, NULL), +(167, 6, 25, 0, 34, '2020-10-20', ' [Novák Martin->Bukovacová Alena] ', NULL, NULL, NULL, NULL, NULL), +(168, 6, 4, 47, 44, '2020-10-20', '', NULL, NULL, NULL, NULL, NULL), +(169, 6, 5, 47, 55, '2020-10-20', '', NULL, NULL, NULL, NULL, NULL), +(170, 6, 4, 47, 44, '2020-10-20', '', NULL, NULL, NULL, NULL, NULL), +(171, 6, 5, 47, 55, '2020-10-20', '', NULL, NULL, NULL, NULL, NULL), +(172, 6, 4, 47, 44, '2020-10-20', '', NULL, NULL, NULL, NULL, NULL), +(173, 6, 5, 47, 55, '2020-10-20', '', NULL, NULL, NULL, NULL, NULL), +(174, 6, 4, 47, 44, '2020-10-20', '', NULL, NULL, NULL, NULL, NULL), +(175, 6, 5, 47, 55, '2020-10-20', '', NULL, NULL, NULL, NULL, NULL), +(176, 9, 21, 44, 100, '2023-11-18', 'Startovne', NULL, NULL, NULL, NULL, NULL), +(177, 6, 22, 41, 100, '2023-11-18', 'Cesta', NULL, NULL, NULL, NULL, NULL); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `tst_finance_types` +-- + +CREATE TABLE `tst_finance_types` ( + `id` int(10) UNSIGNED NOT NULL, + `nazev` varchar(50) NOT NULL, + `popis` varchar(255) NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_czech_ci; + +-- +-- Dumping data for table `tst_finance_types` +-- + +INSERT INTO `tst_finance_types` (`id`, `nazev`, `popis`) VALUES +(1, 'Základní platba', 'nikam nejezdím nebo málo'), +(2, 'Žabičky', 'JML'), +(3, 'Pulci', ''), +(4, 'Reprezentant ČR, licence A a E', ''), +(5, 'Licence R', ''), +(6, 'Licence B (žactvo + dorost)', ''), +(7, 'Ostatní = jezdím jen na Jihomoravskou ligu', ''), +(8, 'Ostatní = jezdím Jihomoravskou ligu a ŽB-M', ''), +(9, 'Ostatní = jezdím všude', ''); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `tst_modify_log` +-- + +CREATE TABLE `tst_modify_log` ( + `id` int(10) UNSIGNED NOT NULL, + `timestamp` int(10) UNSIGNED NOT NULL DEFAULT 0, + `action` enum('unknown','add','edit','delete') NOT NULL DEFAULT 'unknown', + `table` varchar(20) NOT NULL DEFAULT '', + `description` varchar(255) NOT NULL DEFAULT '', + `author` int(10) UNSIGNED NOT NULL DEFAULT 0 +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_czech_ci; + +-- +-- Dumping data for table `tst_modify_log` +-- + +INSERT INTO `tst_modify_log` (`id`, `timestamp`, `action`, `table`, `description`, `author`) VALUES +(1, 1289933547, 'add', 'tst_users', 'Richard Pátek [7609]', 1), +(2, 1289933580, 'add', 'tst_users', 'Lukáš König [8001]', 1), +(3, 1289933584, 'edit', 'tst_users', 'Richard Pátek [7609]', 1), +(4, 1289934520, 'add', 'tst_accounts', 'acc.id = 10 login = \"test_k\" [Kenia]', 1), +(5, 1289934537, 'add', 'tst_accounts', 'acc.id = 11 login = \"test_a\" [arnost]', 1), +(6, 1295343992, 'add', 'tst_users', 'Martin Veselý [7502]', 11), +(7, 1295344023, 'add', 'tst_accounts', 'acc.id = 12 login = \"test_v\" [Veseláček]', 11), +(8, 1295344047, 'edit', 'tst_accounts', 'acc.id = 12 login = \"test_v\" [Veseláček]', 1), +(9, 1327942602, 'add', 'tst_users', 'Jan Novák [9111]', 1), +(10, 1327942626, 'add', 'tst_users', 'Karel Novák [9312]', 1), +(11, 1327942656, 'add', 'tst_users', 'Martin Novák [9513]', 1), +(12, 1327942693, 'add', 'tst_users', 'Eva Nováková [9751]', 1), +(13, 1327942827, 'add', 'tst_accounts', 'acc.id = 13 login = \"tnov_1\" [tnov_1]', 1), +(14, 1327942849, 'add', 'tst_accounts', 'acc.id = 14 login = \"tnov_2\" [tnov_2]', 1), +(15, 1327942865, 'add', 'tst_accounts', 'acc.id = 15 login = \"tnov_3\" [tnov_3]', 1), +(16, 1327942891, 'add', 'tst_accounts', 'acc.id = 16 login = \"tnov_4\" [tnov_4]', 1), +(17, 1327942936, 'add', 'tst_users', 'Zuzana Nováková [9952]', 1), +(18, 1327942953, 'add', 'tst_accounts', 'acc.id = 17 login = \"tnov_5\" [tnov_5]', 1), +(19, 1327942997, 'add', 'tst_users', 'Jitka Nováková [8357]', 1), +(20, 1339023196, 'add', 'tst_users', 'Filil Mazaný [8801]', 1), +(21, 1339420963, 'add', 'tst_accounts', 'acc.id = 18 login = \"test_d1\" [Drbča]', 1), +(22, 1339420994, 'add', 'tst_accounts', 'acc.id = 19 login = \"test_h1\" [Hanka]', 1), +(23, 1339421206, 'add', 'tst_accounts', 'acc.id = 20 login = \"test_k1\" [Verča]', 1), +(24, 1339421245, 'add', 'tst_accounts', 'acc.id = 21 login = \"test_s1\" [Martin]', 1), +(25, 1339421292, 'add', 'tst_accounts', 'acc.id = 22 login = \"test_z1\" [Zhusta]', 1), +(26, 1339421316, 'add', 'tst_accounts', 'acc.id = 23 login = \"test_z2\" [Tomi]', 1), +(27, 1339421726, 'delete', 'tst_users', 'id = 19', 1), +(28, 1339421730, 'delete', 'tst_users', 'id = 20', 1), +(29, 1339421733, 'delete', 'tst_users', 'id = 24', 1), +(30, 1339445000, 'edit', 'tst_accounts', 'acc.id = 23 login = \"test_z2\" [Tomi]', 23), +(31, 1339445014, 'edit', 'tst_accounts', 'acc.id = 23 login = \"test_z3\" [Tomi1]', 23), +(32, 1339445055, 'edit', 'tst_accounts', 'acc.id = 23 login = \"test_z3\" [1Tomi1]', 23), +(33, 1339445081, 'edit', 'tst_accounts', 'acc.id = 23 login = \"1test_z3\" [Tomi1]', 23), +(34, 1339445414, 'edit', 'tst_accounts', 'acc.id = 23 login = \"cdfrt\" [Tomi1]', 23), +(35, 1339445419, 'edit', 'tst_accounts', 'acc.id = 23 login = \"1test_z3\" [Tomi1]', 23), +(36, 1339445535, 'edit', 'tst_accounts', 'acc.id = 23 login = \"test_z3\" [Tomi1]', 23), +(37, 1339493823, 'edit', 'tst_accounts', 'acc.id = 21 - pass', 1), +(38, 1339493887, 'edit', 'tst_accounts', 'acc.id = 21 login = \"test_s1\" [Martin]', 1), +(39, 1339493951, 'edit', 'tst_accounts', 'acc.id = 20 login = \"test_k1\" [Verča]', 1), +(40, 1339493959, 'edit', 'tst_accounts', 'acc.id = 20 - pass', 1), +(41, 1339498535, 'edit', 'tst_accounts', 'acc.id = 20 login = \"test_k1\" [Verča Verča]', 20), +(42, 1339498904, 'edit', 'tst_accounts', 'acc.id = 20 login = \"test_k1\" [Verča]', 20), +(43, 1339586830, 'edit', 'tst_accounts', 'acc.id = 19 - pass', 1), +(44, 1339590326, 'edit', 'tst_users', 'Hana Hlavová [8888]', 19), +(45, 1339590349, 'edit', 'tst_accounts', 'acc.id = 19 login = \"hanah\" [Hanka]', 19), +(46, 1339621838, 'edit', 'tst_accounts', 'acc.id = 10 login = \"test_k\" [Keniaa]', 10), +(47, 1339621865, 'edit', 'tst_accounts', 'acc.id = 10 login = \"test_k\" [Kenia]', 10), +(48, 1339621988, 'edit', 'tst_accounts', 'acc.id = 10 login = \"test_ka\" [Kenia]', 10), +(49, 1339622014, 'edit', 'tst_accounts', 'acc.id = 10 login = \"test_k\" [Kenia]', 10), +(50, 1339622045, 'edit', 'tst_accounts', 'acc.id = 10 - pass', 10), +(51, 1339622076, 'edit', 'tst_accounts', 'acc.id = 10 - pass', 10), +(52, 1339622089, 'edit', 'tst_accounts', 'acc.id = 10 login = \"test_kk\" [Kenia]', 10), +(53, 1339622093, 'edit', 'tst_accounts', 'acc.id = 10 login = \"test_k\" [Kenia]', 10), +(54, 1339622203, 'edit', 'tst_users', 'Lukáš König [8001]', 10), +(55, 1339622214, 'edit', 'tst_users', 'Lukáš König [8001]', 10), +(56, 1339622225, 'edit', 'tst_users', 'Lukáš König [8001]', 10), +(57, 1339622231, 'edit', 'tst_users', 'Lukáš König [8001]', 10), +(58, 1339622235, 'edit', 'tst_users', 'Lukáš König [8001]', 10), +(59, 1339622242, 'edit', 'tst_users', 'Lukáš König [8001]', 10), +(60, 1339622640, 'edit', 'tst_users', 'Lukáš König [8001]', 10), +(61, 1339622670, 'edit', 'tst_users', 'Lukáš König [8001]', 10), +(62, 1339624484, 'edit', 'tst_accounts', 'acc.id = 14 - lock (1)', 10), +(63, 1339624491, 'edit', 'tst_accounts', 'acc.id = 14 - lock (0)', 10), +(64, 1339624496, 'edit', 'tst_accounts', 'acc.id = 10 - lock (1)', 10), +(65, 1339624586, 'edit', 'tst_accounts', 'acc.id = 10 - lock (0)', 11), +(66, 1339624594, 'edit', 'tst_users', 'user.id = 2 - hide (1)', 11), +(67, 1339624594, 'edit', 'tst_accounts', 'acc.id = 10 - lock (1)', 11), +(68, 1339624629, 'edit', 'tst_users', 'user.id = 2 - hide (0)', 11), +(69, 1339624629, 'edit', 'tst_accounts', 'acc.id = 10 - lock (0)', 11), +(70, 1339624637, 'edit', 'tst_users', 'user.id = 2 - hide (1)', 11), +(71, 1339624637, 'edit', 'tst_accounts', 'acc.id = 10 - lock (1)', 11), +(72, 1339624822, 'edit', 'tst_users', 'user.id = 29 - hide (1)', 11), +(73, 1339624837, 'edit', 'tst_users', 'user.id = 2 - hide (0)', 11), +(74, 1339624837, 'edit', 'tst_accounts', 'acc.id = 10 - lock (0)', 11), +(75, 1339624848, 'edit', 'tst_users', 'user.id = 29 - hide (0)', 11), +(76, 1339806911, 'edit', 'tst_users', 'Lukáš König [8001]', 10), +(77, 1340112199, 'edit', 'tst_users', 'Hana Kočová [8676]', 21), +(78, 1340576247, 'edit', 'tst_accounts', 'acc.id = 23 - pass', 1), +(79, 1340614010, 'edit', 'tst_accounts', 'acc.id = 11 login = \"11test_a\" [arnost]', 11), +(80, 1340614019, 'edit', 'tst_accounts', 'acc.id = 11 login = \"test_a\" [arnost]', 11), +(81, 1342708090, 'edit', 'tst_accounts', 'acc.id = 20 - pass', 20), +(82, 1342708146, 'edit', 'tst_users', 'Veronika Křístková [8379]', 20), +(83, 1342709476, 'edit', 'tst_users', 'Alexandr Jevsejenko [8110]', 20), +(84, 1342709542, 'edit', 'tst_users', 'Jaroslav Koča [8200]', 20), +(85, 1358973306, 'edit', 'tst_users', 'Lukáš König [8001]', 10), +(86, 1358976836, 'edit', 'tst_users', 'user.id = 8 - hide (1)', 10), +(87, 1358976836, 'edit', 'tst_accounts', 'acc.id = 17 - lock (1)', 10), +(88, 1358976897, 'edit', 'tst_accounts', 'acc.id = 16 - lock (1)', 10), +(89, 1358976902, 'edit', 'tst_accounts', 'acc.id = 16 - lock (0)', 10), +(90, 1358978129, 'edit', 'tst_users', 'user.id = 2 - hide (1)', 10), +(91, 1358978129, 'edit', 'tst_accounts', 'acc.id = 10 - lock (1)', 10), +(92, 1358978284, 'edit', 'tst_users', 'user.id = 2 - hide (0)', 10), +(93, 1358978284, 'edit', 'tst_accounts', 'acc.id = 10 - lock (0)', 10), +(94, 1358978290, 'edit', 'tst_accounts', 'acc.id = 10 - lock (1)', 10), +(95, 1358978313, 'edit', 'tst_accounts', 'acc.id = 10 - lock (0)', 10), +(96, 1359376315, 'edit', 'tst_accounts', 'acc.id = 12 - pass', 12), +(97, 1359376503, 'edit', 'tst_users', 'user.id = 8 - hide (0)', 12), +(98, 1359376503, 'edit', 'tst_accounts', 'acc.id = 17 - lock (0)', 12), +(99, 1359376508, 'edit', 'tst_accounts', 'acc.id = 17 - lock (1)', 12), +(100, 1359620742, 'edit', 'tst_users', 'Martin Veselý [7502]', 12), +(101, 1359620895, 'edit', 'tst_users', 'Martin Veselý [7502]', 12), +(102, 1359624656, 'add', 'tst_users', 'Jiří Urválek [6107]', 1), +(103, 1359624701, 'add', 'tst_accounts', 'acc.id = 24 login = \"test_c1\" [Cvrcek]', 1), +(104, 1359635865, 'edit', 'tst_accounts', 'acc.id = 24 - pass', 1), +(105, 1359636459, 'edit', 'tst_users', 'user.id = 29 - hide (1)', 24), +(106, 1359636477, 'edit', 'tst_users', 'user.id = 29 - hide (0)', 24), +(107, 1359636520, 'edit', 'tst_accounts', 'acc.id = 22 - lock (1)', 24), +(108, 1359636525, 'edit', 'tst_accounts', 'acc.id = 22 - lock (0)', 24), +(109, 1359636529, 'edit', 'tst_users', 'user.id = 12 - hide (1)', 24), +(110, 1359636529, 'edit', 'tst_accounts', 'acc.id = 22 - lock (1)', 24), +(111, 1359636534, 'edit', 'tst_users', 'user.id = 12 - hide (0)', 24), +(112, 1359636534, 'edit', 'tst_accounts', 'acc.id = 22 - lock (0)', 24), +(113, 1360093952, 'edit', 'tst_accounts', 'acc.id = 12 login = \"test_v\" [Veseláček]', 1), +(114, 1360093958, 'edit', 'tst_accounts', 'acc.id = 11 login = \"test_a\" [arnost]', 1), +(115, 1360093969, 'edit', 'tst_accounts', 'acc.id = 10 login = \"test_k\" [Kenia]', 1), +(116, 1360093983, 'edit', 'tst_accounts', 'acc.id = 24 login = \"test_c1\" [Cvrcek]', 1), +(117, 1361814777, 'edit', 'tst_accounts', 'acc.id = 22 login = \"test_z1\" [Zhusta]', 1), +(118, 1363134063, 'edit', 'tst_users', 'user.id = 29 - hide (1)', 10), +(119, 1363134073, 'edit', 'tst_users', 'user.id = 29 - hide (0)', 10), +(120, 1363134088, 'edit', 'tst_users', 'user.id = 11 - hide (1)', 10), +(121, 1363134088, 'edit', 'tst_accounts', 'acc.id = 18 - lock (1)', 10), +(122, 1363134098, 'edit', 'tst_users', 'user.id = 11 - hide (0)', 10), +(123, 1363134098, 'edit', 'tst_accounts', 'acc.id = 18 - lock (0)', 10), +(124, 1363134112, 'edit', 'tst_users', 'user.id = 28 - hide (1)', 10), +(125, 1363134282, 'edit', 'tst_users', 'user.id = 4 - hide (1)', 10), +(126, 1363134282, 'edit', 'tst_accounts', 'acc.id = 13 - lock (1)', 10), +(127, 1363134304, 'edit', 'tst_accounts', 'acc.id = 19 - lock (1)', 10), +(128, 1363134322, 'edit', 'tst_accounts', 'acc.id = 13 - lock (0)', 10), +(129, 1363134356, 'edit', 'tst_users', 'user.id = 4 - hide (0)', 10), +(130, 1363134356, 'edit', 'tst_accounts', 'acc.id = 13 - lock (0)', 10), +(131, 1363134359, 'edit', 'tst_users', 'user.id = 28 - hide (0)', 10), +(132, 1363134366, 'edit', 'tst_accounts', 'acc.id = 19 - lock (0)', 10), +(133, 1363134371, 'edit', 'tst_accounts', 'acc.id = 17 - lock (0)', 10), +(134, 1366383192, 'add', 'tst_accounts', 'acc.id = 25 login = \"MB7605\" [Maroš]', 11), +(135, 1366383286, 'add', 'tst_accounts', 'acc.id = 26 login = \"PB8101\" [Palo]', 11), +(136, 1367166256, 'add', 'tst_users', 'Věra Mádlová [8951]', 1), +(137, 1367166361, 'add', 'tst_accounts', 'acc.id = 27 login = \"VM8951\" [Věra]', 1), +(138, 1367166373, 'edit', 'tst_accounts', 'acc.id = 27 login = \"VM8951\" [Věra]', 1), +(139, 1368537895, 'add', 'tst_finance', 'id=26|user_id=33|amount=-40', 27), +(140, 1368537907, 'edit', 'tst_finance', 'id=26|user_id=33|amount=-40|note=vkld', 27), +(141, 1368609991, 'add', 'tst_finance', 'id=27|user_id=29|amount=100', 10), +(142, 1368610004, 'edit', 'tst_finance', 'id=27|user_id=2|amount=100|note=sto podruhe', 10), +(143, 1368724164, 'edit', 'tst_finance', 'id=26|user_id=33|amount=-40|note=vkld', 27), +(144, 1368724207, 'edit', 'tst_finance', 'id=26|user_id=33|amount=|note=', 27), +(145, 1368724218, 'edit', 'tst_finance', 'id=26|user_id=33|amount=-40|note=vkld', 27), +(146, 1369739191, 'add', 'tst_finance', 'id=28|user_id=3|amount=200', 10), +(147, 1369739285, 'edit', 'tst_finance', 'id=28|user_id=2|amount=+?š??žýáíéú?|note=', 10), +(148, 1369739301, 'edit', 'tst_finance', 'id=28|user_id=2|amount=sto|note=', 10), +(149, 1369739341, 'edit', 'tst_finance', 'id=28|user_id=2|amount=sto|note=', 10), +(150, 1369739373, 'add', 'tst_finance', 'id=29|user_id=22|amount=100', 10), +(151, 1369739377, 'edit', 'tst_finance', 'id=28|user_id=2|amount=dveste|note=', 10), +(152, 1369739377, 'edit', 'tst_finance', 'id=29|user_id=2|amount=sto|note=', 10), +(153, 1369739385, 'edit', 'tst_finance', 'id=28|user_id=2|amount=sto|note=', 10), +(154, 1369739385, 'edit', 'tst_finance', 'id=29|user_id=2|amount=sto|note=', 10), +(155, 1369739435, 'edit', 'tst_finance', 'id=28|user_id=2|amount=100|note=sto', 10), +(156, 1369739450, 'edit', 'tst_finance', 'id=28|user_id=2|amount=dve|note=', 10), +(157, 1369739450, 'edit', 'tst_finance', 'id=29|user_id=2|amount=sto|note=', 10), +(158, 1369739532, 'add', 'tst_finance', 'id=30|user_id=8|amount=-500', 11), +(159, 1369739646, 'add', 'tst_finance', 'id=31|user_id=9|amount=200', 11), +(160, 1369739646, 'add', 'tst_finance', 'id=32|user_id=8|amount=300', 11), +(161, 1369739897, 'edit', 'tst_finance', 'id=28|user_id=2|amount=sto|note=', 10), +(162, 1369739897, 'edit', 'tst_finance', 'id=29|user_id=2|amount=sto|note=', 10), +(163, 1369739904, 'edit', 'tst_finance', 'id=28|user_id=2|amount=dve|note=', 10), +(164, 1369739904, 'edit', 'tst_finance', 'id=29|user_id=2|amount=sto|note=', 10), +(165, 1369741196, 'edit', 'tst_finance', 'id=36|user_id=2|amount=200|note=dve', 10), +(166, 1369741196, 'edit', 'tst_finance', 'id=36|user_id=2|amount=100|note=sto', 10), +(167, 1369741209, 'edit', 'tst_finance', 'id=28|user_id=2|amount=200|note=dve', 10), +(168, 1369741221, 'edit', 'tst_finance', 'id=36|user_id=2|amount=300|note=tri', 10), +(169, 1369741221, 'edit', 'tst_finance', 'id=36|user_id=2|amount=100|note=sto', 10), +(170, 1369741290, 'edit', 'tst_finance', 'id=36|user_id=2|amount=200|note=dve', 10), +(171, 1369741290, 'edit', 'tst_finance', 'id=36|user_id=2|amount=200|note=dve', 10), +(172, 1369741470, 'edit', 'tst_finance', 'id=28|user_id=2|amount=100|note=sto', 10), +(173, 1369741470, 'edit', 'tst_finance', 'id=29|user_id=2|amount=100|note=sto', 10), +(174, 1369741479, 'edit', 'tst_finance', 'id=28|user_id=2|amount=200|note=dve', 10), +(175, 1369741479, 'edit', 'tst_finance', 'id=29|user_id=2|amount=100|note=sto', 10), +(176, 1369741494, 'edit', 'tst_finance', 'id=28|user_id=2|amount=300|note=tri', 10), +(177, 1369741494, 'edit', 'tst_finance', 'id=29|user_id=2|amount=100|note=sto', 10), +(178, 1369741764, 'edit', 'tst_finance', 'id=28|user_id=2|amount=400|note=styri', 10), +(179, 1369741764, 'edit', 'tst_finance', 'id=29|user_id=2|amount=100|note=sto', 10), +(180, 1369742365, 'edit', 'tst_finance', 'id=28|user_id=2|amount=400|note=+??š?+?š??š?šžž?ýáýú?ú?', 10), +(181, 1369742365, 'edit', 'tst_finance', 'id=29|user_id=2|amount=100|note=sto', 10), +(182, 1387190044, 'add', 'tst_accounts', 'acc.id = 28 login = \"tnov_6\" [Jitka]', 1), +(183, 1387190861, 'edit', 'tst_accounts', 'acc.id = 28 login = \"tnov_6\" [tnov_6]', 1), +(184, 1391192876, 'add', 'tst_finance', 'id=33|user_id=13|amount=-40', 28), +(185, 1391192889, 'add', 'tst_finance', 'id=34|user_id=13|amount=40', 28), +(186, 1391537721, 'add', 'tst_finance', 'id=35|user_id=26|amount=200', 1), +(187, 1391537834, 'add', 'tst_finance', 'id=36|user_id=27|amount=300', 28), +(188, 1391537853, 'add', 'tst_finance', 'id=36|note=chybka', 28), +(189, 1391725840, 'add', 'tst_finance', 'id=37|user_id=4|amount=80', 28), +(190, 1391725840, 'add', 'tst_finance', 'id=38|user_id=5|amount=80', 28), +(191, 1391725840, 'add', 'tst_finance', 'id=39|user_id=6|amount=80', 28), +(192, 1391725840, 'add', 'tst_finance', 'id=40|user_id=7|amount=80', 28), +(193, 1391725840, 'add', 'tst_finance', 'id=41|user_id=8|amount=80', 28), +(194, 1391726066, 'add', 'tst_finance', 'id=42|user_id=4|amount=1000', 28), +(195, 1391782211, 'add', 'tst_finance', 'id=43|user_id=22|amount=100', 10), +(196, 1391782287, 'add', 'tst_finance', 'id=44|user_id=22|amount=-200', 10), +(197, 1391782303, 'add', 'tst_finance', 'id=45|user_id=22|amount=300', 10), +(198, 1391803186, 'edit', 'tst_finance', 'id=37|user_id=9|amount=80|note=', 28), +(199, 1391803186, 'edit', 'tst_finance', 'id=38|user_id=9|amount=80|note=', 28), +(200, 1391803186, 'edit', 'tst_finance', 'id=39|user_id=9|amount=80|note=', 28), +(201, 1391803186, 'edit', 'tst_finance', 'id=40|user_id=9|amount=80|note=', 28), +(202, 1391803186, 'edit', 'tst_finance', 'id=41|user_id=9|amount=80|note=', 28), +(203, 1391804991, 'edit', 'tst_finance', 'id=38|user_id=9|amount=80|note=', 28), +(204, 1391804991, 'edit', 'tst_finance', 'id=39|user_id=9|amount=80|note=', 28), +(205, 1391804991, 'edit', 'tst_finance', 'id=40|user_id=9|amount=80|note=', 28), +(206, 1391804991, 'edit', 'tst_finance', 'id=41|user_id=9|amount=80|note=', 28), +(207, 1391804997, 'edit', 'tst_finance', 'id=38|user_id=9|amount=80|note=', 28), +(208, 1391804997, 'edit', 'tst_finance', 'id=39|user_id=9|amount=80|note=', 28), +(209, 1391804997, 'edit', 'tst_finance', 'id=40|user_id=9|amount=80|note=', 28), +(210, 1391804997, 'edit', 'tst_finance', 'id=41|user_id=9|amount=80|note=', 28), +(211, 1391805011, 'edit', 'tst_finance', 'id=38|user_id=9|amount=80|note=', 28), +(212, 1391805011, 'edit', 'tst_finance', 'id=39|user_id=9|amount=80|note=', 28), +(213, 1391805011, 'edit', 'tst_finance', 'id=40|user_id=9|amount=80|note=', 28), +(214, 1391805011, 'edit', 'tst_finance', 'id=41|user_id=9|amount=80|note=', 28), +(215, 1391805028, 'edit', 'tst_finance', 'id=38|user_id=9|amount=80|note=', 28), +(216, 1391805028, 'edit', 'tst_finance', 'id=39|user_id=9|amount=80|note=', 28), +(217, 1391805028, 'edit', 'tst_finance', 'id=40|user_id=9|amount=80|note=', 28), +(218, 1391805028, 'edit', 'tst_finance', 'id=41|user_id=9|amount=80|note=', 28), +(219, 1391805035, 'edit', 'tst_finance', 'id=37|user_id=9|amount=80|note=', 28), +(220, 1391805035, 'edit', 'tst_finance', 'id=38|user_id=9|amount=80|note=', 28), +(221, 1391805035, 'edit', 'tst_finance', 'id=39|user_id=9|amount=80|note=', 28), +(222, 1391805035, 'edit', 'tst_finance', 'id=40|user_id=9|amount=80|note=', 28), +(223, 1391805035, 'edit', 'tst_finance', 'id=41|user_id=9|amount=80|note=', 28), +(224, 1391805064, 'edit', 'tst_finance', 'id=21|user_id=9|amount=0|note=závod Jml', 28), +(225, 1392143449, 'add', 'tst_finance', 'id=46|user_id=4|amount=80', 28), +(226, 1392143449, 'add', 'tst_finance', 'id=47|user_id=5|amount=80', 28), +(227, 1392143449, 'add', 'tst_finance', 'id=48|user_id=6|amount=80', 28), +(228, 1392143449, 'add', 'tst_finance', 'id=49|user_id=7|amount=80', 28), +(229, 1392143449, 'add', 'tst_finance', 'id=50|user_id=8|amount=80', 28), +(230, 1392143456, 'add', 'tst_finance', 'id=51|user_id=4|amount=80', 28), +(231, 1392143456, 'add', 'tst_finance', 'id=52|user_id=5|amount=80', 28), +(232, 1392143456, 'add', 'tst_finance', 'id=53|user_id=6|amount=80', 28), +(233, 1392143456, 'add', 'tst_finance', 'id=54|user_id=7|amount=80', 28), +(234, 1392143456, 'add', 'tst_finance', 'id=55|user_id=8|amount=80', 28), +(235, 1392143502, 'add', 'tst_finance', 'id=56|user_id=4|amount=80', 28), +(236, 1392143502, 'add', 'tst_finance', 'id=57|user_id=5|amount=80', 28), +(237, 1392143502, 'add', 'tst_finance', 'id=58|user_id=6|amount=80', 28), +(238, 1392143502, 'add', 'tst_finance', 'id=59|user_id=7|amount=80', 28), +(239, 1392143502, 'add', 'tst_finance', 'id=60|user_id=8|amount=80', 28), +(240, 1392143529, 'add', 'tst_finance', 'id=51|note=', 28), +(241, 1393332212, 'edit', 'tst_users', 'Karel Novák [9312] - entry lock (1)', 27), +(242, 1393332216, 'edit', 'tst_users', 'Karel Novák [9312] - entry lock (0)', 27), +(243, 1393332221, 'edit', 'tst_users', 'Věra Mádlová [8951] - entry lock (1)', 27), +(244, 1393332230, 'edit', 'tst_users', 'Věra Mádlová [8951] - entry lock (0)', 27), +(245, 1393449298, 'add', 'tst_finance', 'id=61|user_id=7|amount=-400', 16), +(246, 1393449298, 'add', 'tst_finance', 'id=62|user_id=9|amount=400', 16), +(247, 1393449318, 'add', 'tst_finance', 'id=63|user_id=5|amount=-400', 16), +(248, 1393449318, 'add', 'tst_finance', 'id=64|user_id=8|amount=400', 16), +(249, 1393495022, 'add', 'tst_finance', 'id=65|user_id=4|amount=-4000', 28), +(250, 1393498007, 'add', 'tst_finance', 'id=66|user_id=13|amount=-100', 10), +(251, 1393498007, 'add', 'tst_finance', 'id=67|user_id=11|amount=100', 10), +(252, 1393498069, 'add', 'tst_finance', 'id=68|user_id=11|amount=-200', 10), +(253, 1393498069, 'add', 'tst_finance', 'id=69|user_id=13|amount=200', 10), +(254, 1393777075, 'add', 'tst_finance', 'id=70|user_id=4|amount=-80', 28), +(255, 1393777075, 'add', 'tst_finance', 'id=71|user_id=5|amount=-80', 28), +(256, 1393777112, 'edit', 'tst_finance', 'id=70|user_id=9|amount=-80|note=', 28), +(257, 1393777112, 'edit', 'tst_finance', 'id=71|user_id=9|amount=-80|note=', 28), +(258, 1393777112, 'add', 'tst_finance', 'id=72|user_id=6|amount=-80', 28), +(259, 1393777112, 'add', 'tst_finance', 'id=73|user_id=7|amount=-80', 28), +(260, 1393777112, 'add', 'tst_finance', 'id=74|user_id=8|amount=-80', 28), +(261, 1393778030, 'add', 'tst_users', 'Michal Gross [6946]', 15), +(262, 1393778159, 'add', 'tst_accounts', 'acc.id = 29 login = \"majkl\" [majkl]', 15), +(263, 1398782135, 'add', 'tst_finance', 'id=75|user_id=1|amount=100', 10), +(264, 1398782139, 'edit', 'tst_finance', 'id=75|user_id=2|amount=1000|note=', 10), +(265, 1420830069, 'edit', 'tst_accounts', 'acc.id = 19 - pass', 10), +(266, 1422644190, 'edit', 'tst_finance', 'id=67|user_id=2|amount=1000|note=', 10), +(267, 1422644208, 'edit', 'tst_users', 'Dušan Bukovac [7503] - entry lock (1)', 10), +(268, 1422644227, 'edit', 'tst_users', 'Maroš Bukovac [7605] - entry lock (1)', 10), +(269, 1422644230, 'edit', 'tst_users', 'Dušan Bukovac [7503] - entry lock (0)', 10), +(270, 1422644233, 'edit', 'tst_users', 'Maroš Bukovac [7605] - entry lock (0)', 10), +(271, 1422644457, 'edit', 'tst_users', 'Richard Pátek [7609] - entry lock (1)', 10), +(272, 1422644464, 'edit', 'tst_users', 'Richard Pátek [7609] - entry lock (0)', 10), +(273, 1422644468, 'edit', 'tst_users', 'Richard Pátek [7609] - entry lock (1)', 10), +(274, 1422644611, 'edit', 'tst_users', 'Richard Pátek [7609] - entry lock (0)', 10), +(275, 1424102245, 'add', 'tst_finance', 'id=0|user_id=2|amount=-12', 10), +(276, 1424102245, 'add', 'tst_finance', 'id=275|user_id=22|amount=12', 10), +(277, 1424102259, 'add', 'tst_finance', 'id=76|user_id=2|amount=-12', 10), +(278, 1424102259, 'add', 'tst_finance', 'id=77|user_id=22|amount=12', 10), +(279, 1424102267, 'add', 'tst_finance', 'id=0|user_id=2|amount=-23', 10), +(280, 1424102267, 'add', 'tst_finance', 'id=279|user_id=22|amount=23', 10), +(281, 1424102311, 'add', 'tst_finance', 'id=0|user_id=2|amount=-456', 10), +(282, 1424102311, 'add', 'tst_finance', 'id=281|user_id=22|amount=456', 10), +(283, 1424102315, 'add', 'tst_finance', 'id=0|user_id=2|amount=-456', 10), +(284, 1424102315, 'add', 'tst_finance', 'id=283|user_id=22|amount=456', 10), +(285, 1424102565, 'add', 'tst_finance', 'id=0|user_id=23|amount=100', 11), +(286, 1424102581, 'add', 'tst_finance', 'id=78|user_id=23|amount=100', 11), +(287, 1424102800, 'add', 'tst_finance', 'id=0|user_id=21|amount=200', 11), +(288, 1424103042, 'add', 'tst_users', 'asdfasd \'adsfdas [0011]', 10), +(289, 1424103056, 'edit', 'tst_users', 'asdfasd ¨\\\'adsfdas [0011]', 10), +(290, 1424103075, 'edit', 'tst_users', 'asdfasd adsfd\'as\'\\dasf?> [0011]', 10), +(291, 1424103082, 'edit', 'tst_users', 'asdfasd adsfd\'as\'\\dasf?> [0011]', 10), +(292, 1424103088, 'edit', 'tst_users', 'asdfasd [0011]', 10), +(293, 1424103107, 'delete', 'tst_users', 'id = 35', 10), +(294, 1424103163, 'add', 'tst_finance', 'id=0|user_id=29|amount=-12', 10), +(295, 1424103258, 'add', 'tst_finance', 'id=0|user_id=2|amount=6', 10), +(296, 1424103258, 'add', 'tst_finance', 'id=295|user_id=16|amount=6', 10), +(297, 1424103258, 'add', 'tst_finance', 'id=296|user_id=17|amount=6', 10), +(298, 1424103258, 'edit', 'tst_finance', 'id=10|user_id=2|amount=300|note=trista', 10), +(299, 1424103260, 'add', 'tst_finance', 'id=0|user_id=2|amount=6', 10), +(300, 1424103260, 'add', 'tst_finance', 'id=299|user_id=16|amount=6', 10), +(301, 1424103260, 'add', 'tst_finance', 'id=300|user_id=17|amount=6', 10), +(302, 1424103260, 'edit', 'tst_finance', 'id=10|user_id=2|amount=300|note=trista', 10), +(303, 1424174537, 'add', 'tst_finance', 'id=79|user_id=22|amount=100', 1), +(304, 1425430171, 'add', 'tst_users', 'Řehoř Štěrbák [8006]', 1), +(305, 1425430183, 'add', 'tst_accounts', 'acc.id = 30 login = \"RS8006\" [Řehoř]', 1), +(306, 1455563721, 'add', 'tst_finance', 'id=80|user_id=14|amount=500', 28), +(307, 1455563753, 'add', 'tst_finance', 'id=81|user_id=14|amount=-30', 28), +(308, 1455563753, 'add', 'tst_finance', 'id=82|user_id=13|amount=-500', 28), +(309, 1455563753, 'add', 'tst_finance', 'id=83|user_id=33|amount=-13', 28), +(310, 1455563808, 'add', 'tst_finance', 'id=0|user_id=|amount=-200', 28), +(311, 1455563808, 'add', 'tst_finance', 'id=310|user_id=13|amount=200', 28), +(312, 1455563839, 'add', 'tst_finance', 'id=0|user_id=|amount=-300', 28), +(313, 1455563839, 'add', 'tst_finance', 'id=312|user_id=13|amount=300', 28), +(314, 1455563849, 'add', 'tst_finance', 'id=0|user_id=|amount=-34', 28), +(315, 1455563849, 'add', 'tst_finance', 'id=314|user_id=21|amount=34', 28), +(316, 1455563902, 'add', 'tst_finance', 'id=84|user_id=9|amount=-20', 28), +(317, 1455563902, 'add', 'tst_finance', 'id=85|user_id=10|amount=20', 28), +(318, 1455563944, 'add', 'tst_finance', 'id=0|user_id=|amount=-100', 28), +(319, 1455563944, 'add', 'tst_finance', 'id=318|user_id=28|amount=100', 28), +(320, 1455979543, 'add', 'tst_finance', 'id=86|user_id=1|amount=-200', 28), +(321, 1455979543, 'add', 'tst_finance', 'id=87|user_id=9|amount=200', 28), +(322, 1462959637, 'edit', 'tst_users', 'user.id = 11 - hide (1)', 15), +(323, 1462959637, 'edit', 'tst_accounts', 'acc.id = 18 - lock (1)', 15), +(324, 1462959645, 'edit', 'tst_users', 'user.id = 11 - hide (0)', 15), +(325, 1462959645, 'edit', 'tst_accounts', 'acc.id = 18 - lock (0)', 15), +(326, 1462959649, 'edit', 'tst_accounts', 'acc.id = 18 - lock (1)', 15), +(327, 1462959653, 'edit', 'tst_users', 'user.id = 11 - hide (1)', 15), +(328, 1462959653, 'edit', 'tst_accounts', 'acc.id = 18 - lock (1)', 15), +(329, 1462959657, 'edit', 'tst_users', 'user.id = 11 - hide (0)', 15), +(330, 1462959657, 'edit', 'tst_accounts', 'acc.id = 18 - lock (0)', 15), +(331, 1462960041, 'add', 'tst_finance', 'id=88|user_id=22|amount=-1000', 28), +(332, 1462960041, 'add', 'tst_finance', 'id=89|user_id=32|amount=1000', 28), +(333, 1462960072, 'add', 'tst_finance', 'id=88|note=', 28), +(334, 1488208658, 'add', 'tst_finance', 'id=90|user_id=7|amount=3150', 10), +(335, 1488208717, 'add', 'tst_finance', 'id=91|user_id=8|amount=840', 10), +(336, 1488208728, 'edit', 'tst_finance', 'id=91|user_id=2|amount=840|note=', 10), +(337, 1488208769, 'edit', 'tst_finance', 'id=91|user_id=2|amount=-840|note=', 10), +(338, 1488208802, 'add', 'tst_finance', 'id=92|user_id=8|amount=-1820', 10), +(339, 1488208830, 'edit', 'tst_finance', 'id=90|user_id=2|amount=2000|note=', 10), +(340, 1488208999, 'add', 'tst_finance', 'id=93|user_id=4|amount=2840', 10), +(341, 1488209008, 'add', 'tst_finance', 'id=94|user_id=5|amount=-150', 10), +(342, 1488209016, 'add', 'tst_finance', 'id=95|user_id=5|amount=300', 10), +(343, 1488209027, 'add', 'tst_finance', 'id=96|user_id=6|amount=-170', 10), +(344, 1488209486, 'add', 'tst_finance', 'id=97|user_id=9|amount=-780', 10), +(345, 1488209539, 'add', 'tst_finance', 'id=98|user_id=7|amount=-20', 10), +(346, 1488209758, 'add', 'tst_finance', 'id=99|user_id=7|amount=-1819', 16), +(347, 1488209759, 'add', 'tst_finance', 'id=100|user_id=8|amount=1819', 16), +(348, 1488209854, 'add', 'tst_finance', 'id=101|user_id=7|amount=1819', 10), +(349, 1488209868, 'add', 'tst_finance', 'id=102|user_id=8|amount=-1819', 10), +(350, 1488210089, 'add', 'tst_finance', 'id=103|user_id=8|amount=1820', 11), +(351, 1488210100, 'add', 'tst_finance', 'id=104|user_id=5|amount=-1820', 11), +(352, 1488210444, 'add', 'tst_finance', 'id=105|user_id=5|amount=-10', 10), +(353, 1488210610, 'edit', 'tst_finance', 'id=105|user_id=2|amount=0|note=', 10), +(354, 1510648905, 'edit', 'tst_finance', 'id=9|user_id=9|amount=-100|note=stovka', 28), +(355, 1510648905, 'edit', 'tst_finance', 'id=1|user_id=9|amount=-5000|note=', 28), +(356, 1518180051, 'edit', 'tst_accounts', 'acc.id = 10 - pass', 15), +(357, 1518180122, 'add', 'tst_finance', 'id=106|user_id=8|amount=10000', 10), +(358, 1518180132, 'add', 'tst_finance', 'id=107|user_id=9|amount=10000', 10), +(359, 1518180142, 'add', 'tst_finance', 'id=108|user_id=7|amount=10000', 10), +(360, 1518180179, 'add', 'tst_finance', 'id=0|user_id=|amount=-2', 16), +(361, 1518180179, 'add', 'tst_finance', 'id=360|user_id=5|amount=2', 16), +(362, 1518180319, 'add', 'tst_finance', 'id=0|user_id=|amount=-2', 16), +(363, 1518180319, 'add', 'tst_finance', 'id=362|user_id=5|amount=2', 16), +(364, 1518180325, 'add', 'tst_finance', 'id=0|user_id=|amount=-2', 16), +(365, 1518180325, 'add', 'tst_finance', 'id=364|user_id=5|amount=2', 16), +(366, 1518443815, 'add', 'tst_finance', 'id=0|user_id=|amount=-2', 16), +(367, 1518443815, 'add', 'tst_finance', 'id=366|user_id=5|amount=2', 16), +(368, 1520712175, 'add', 'tst_users', 'Osvald Mocvesely [4400]', 1), +(369, 1520712193, 'edit', 'tst_users', 'Osvald Mocvesely [4400] - entry lock (1)', 1), +(370, 1520712235, 'add', 'tst_finance', 'id=109|user_id=37|amount=-500', 1), +(371, 1520712391, 'add', 'tst_finance', 'id=110|user_id=37|amount=-500', 28), +(372, 1520712416, 'add', 'tst_finance', 'id=111|user_id=37|amount=3000', 28), +(373, 1520712428, 'add', 'tst_finance', 'id=112|user_id=37|amount=-150', 28), +(374, 1520712442, 'add', 'tst_finance', 'id=113|user_id=37|amount=-300', 28), +(375, 1520712442, 'add', 'tst_finance', 'id=114|user_id=34|amount=300', 28), +(376, 1520713908, 'add', 'tst_finance', 'id=115|user_id=37|amount=-200', 28), +(377, 1520713908, 'add', 'tst_finance', 'id=116|user_id=28|amount=200', 28), +(378, 1520716394, 'add', 'tst_finance', 'id=117|user_id=7|amount=-1', 10), +(379, 1520716394, 'add', 'tst_finance', 'id=118|user_id=22|amount=1', 10), +(380, 1520716418, 'add', 'tst_finance', 'id=119|user_id=2|amount=-2', 10), +(381, 1520716418, 'add', 'tst_finance', 'id=120|user_id=22|amount=2', 10), +(382, 1520716549, 'add', 'tst_finance', 'id=121|user_id=2|amount=-3', 10), +(383, 1520716549, 'add', 'tst_finance', 'id=122|user_id=23|amount=3', 10), +(384, 1520934283, 'add', 'tst_finance', 'id=123|user_id=2|amount=-1', 10), +(385, 1520934283, 'add', 'tst_finance', 'id=124|user_id=22|amount=1', 10), +(386, 1520934357, 'add', 'tst_finance', 'id=125|user_id=22|amount=-2', 10), +(387, 1520934357, 'add', 'tst_finance', 'id=126|user_id=2|amount=2', 10), +(388, 1520934682, 'add', 'tst_finance', 'id=127|user_id=22|amount=-2', 10), +(389, 1520934682, 'add', 'tst_finance', 'id=128|user_id=2|amount=2', 10), +(390, 1521221577, 'add', 'tst_finance', 'id=129|user_id=2|amount=-1', 10), +(391, 1521221578, 'add', 'tst_finance', 'id=130|user_id=22|amount=1', 10), +(392, 1521221590, 'add', 'tst_finance', 'id=131|user_id=2|amount=-2', 10), +(393, 1521221590, 'add', 'tst_finance', 'id=132|user_id=7|amount=2', 10), +(394, 1521221627, 'add', 'tst_finance', 'id=133|user_id=7|amount=-1', 10), +(395, 1521221627, 'add', 'tst_finance', 'id=134|user_id=22|amount=1', 10), +(396, 1521221665, 'add', 'tst_finance', 'id=135|user_id=7|amount=-2', 10), +(397, 1521221665, 'add', 'tst_finance', 'id=136|user_id=5|amount=2', 10), +(398, 1521221695, 'add', 'tst_finance', 'id=137|user_id=7|amount=-3', 10), +(399, 1521221695, 'add', 'tst_finance', 'id=138|user_id=5|amount=3', 10), +(400, 1521721796, 'add', 'tst_finance', 'id=139|user_id=2|amount=-12', 10), +(401, 1521721796, 'add', 'tst_finance', 'id=140|user_id=22|amount=12', 10), +(402, 1521721816, 'add', 'tst_finance', 'id=141|user_id=2|amount=-13', 10), +(403, 1521721816, 'add', 'tst_finance', 'id=142|user_id=7|amount=13', 10), +(404, 1521721917, 'add', 'tst_finance', 'id=143|user_id=2|amount=-300', 10), +(405, 1521721917, 'add', 'tst_finance', 'id=144|user_id=6|amount=300', 10), +(406, 1521721927, 'add', 'tst_finance', 'id=145|user_id=2|amount=-300', 10), +(407, 1521721928, 'add', 'tst_finance', 'id=146|user_id=7|amount=300', 10), +(408, 1521721965, 'add', 'tst_finance', 'id=147|user_id=6|amount=-1', 15), +(409, 1521721965, 'add', 'tst_finance', 'id=148|user_id=2|amount=1', 15), +(410, 1521721984, 'add', 'tst_finance', 'id=149|user_id=6|amount=-2', 15), +(411, 1521721984, 'add', 'tst_finance', 'id=150|user_id=7|amount=2', 15), +(412, 1521722027, 'add', 'tst_finance', 'id=151|user_id=7|amount=-5', 16), +(413, 1521722027, 'add', 'tst_finance', 'id=152|user_id=6|amount=5', 16), +(414, 1521722067, 'add', 'tst_finance', 'id=153|user_id=7|amount=-6', 16), +(415, 1521722067, 'add', 'tst_finance', 'id=154|user_id=2|amount=6', 16), +(416, 1535481765, 'edit', 'tst_users', 'Maroš Bukovac [7605] - entry lock (1)', 28), +(417, 1535481786, 'add', 'tst_finance', 'id=155|user_id=21|amount=-50', 28), +(418, 1535481786, 'add', 'tst_finance', 'id=156|user_id=11|amount=-100', 28), +(419, 1578498014, 'add', 'tst_finance', 'id=157|user_id=2|amount=10000', 10), +(420, 1578498030, 'add', 'tst_finance', 'id=158|user_id=2|amount=-1000', 10), +(421, 1578498138, 'add', 'tst_finance', 'id=159|user_id=2|amount=-1', 10), +(422, 1578498138, 'add', 'tst_finance', 'id=160|user_id=22|amount=1', 10), +(423, 1578498143, 'add', 'tst_finance', 'id=161|user_id=2|amount=-2', 10), +(424, 1578498143, 'add', 'tst_finance', 'id=162|user_id=22|amount=2', 10), +(425, 1578498149, 'add', 'tst_finance', 'id=163|user_id=2|amount=-3', 10), +(426, 1578498149, 'add', 'tst_finance', 'id=164|user_id=6|amount=3', 10), +(427, 1603201124, 'edit', 'tst_users', 'user.id = 37 - hide (1)', 15), +(428, 1603201130, 'edit', 'tst_users', 'user.id = 37 - hide (0)', 15), +(429, 1603201473, 'edit', 'tst_accounts', 'acc.id = 15 login = \"tnov_3\" [tnov_3]', 15), +(430, 1603204414, 'add', 'tst_finance', 'id=165|user_id=4|amount=50', 15), +(431, 1603205168, 'edit', 'tst_finance', 'id=10|user_id=6|amount=300|note=trista', 15), +(432, 1603205183, 'edit', 'tst_finance', 'id=10|user_id=6|amount=0|note=trista', 15), +(433, 1603205199, 'edit', 'tst_finance', 'id=10|user_id=6|amount=0|note=trista', 15), +(434, 1603205268, 'edit', 'tst_users', 'Dušan Bukovac [7503] - entry lock (1)', 15), +(435, 1603214270, 'edit', 'tst_users', 'Hana Hlavová [8888] - entry lock (1)', 15), +(436, 1603215016, 'edit', 'tst_users', 'Palo Bukovac [8101] - entry lock (1)', 15), +(437, 1603215024, 'edit', 'tst_users', 'user.id = 22 - hide (1)', 15), +(438, 1603215031, 'edit', 'tst_users', 'user.id = 22 - hide (0)', 15), +(439, 1603215364, 'edit', 'tst_users', 'Alena Bukovacová [7454] - entry lock (1)', 15), +(440, 1603215432, 'add', 'tst_finance', 'id=166|user_id=6|amount=-34', 15), +(441, 1603215432, 'add', 'tst_finance', 'id=167|user_id=25|amount=34', 15), +(442, 1603215471, 'add', 'tst_finance', 'id=168|user_id=4|amount=44', 15), +(443, 1603215471, 'add', 'tst_finance', 'id=169|user_id=5|amount=55', 15), +(444, 1603215482, 'add', 'tst_finance', 'id=170|user_id=4|amount=44', 15), +(445, 1603215482, 'add', 'tst_finance', 'id=171|user_id=5|amount=55', 15), +(446, 1603215511, 'add', 'tst_finance', 'id=172|user_id=4|amount=44', 15), +(447, 1603215511, 'add', 'tst_finance', 'id=173|user_id=5|amount=55', 15), +(448, 1603215515, 'add', 'tst_finance', 'id=174|user_id=4|amount=44', 15), +(449, 1603215515, 'add', 'tst_finance', 'id=175|user_id=5|amount=55', 15), +(450, 1671476006, 'add', 'tst_users', 'Petr Matula [8202]', 15), +(451, 1671476334, 'edit', 'tst_users', 'Petr Matula [8202] - entry lock (1)', 15), +(452, 1671476353, 'edit', 'tst_users', 'Petr Matula [8202] - entry lock (0)', 15), +(453, 1671476363, 'edit', 'tst_users', 'Petr Matula [8202] - entry lock (1)', 15), +(454, 1671476495, 'edit', 'tst_users', 'Petr Matula [8202] - entry lock (0)', 15), +(455, 1671476645, 'edit', 'tst_users', 'Petr Matula [8202] - entry lock (1)', 15), +(456, 1671476649, 'edit', 'tst_users', 'Petr Matula [8202] - entry lock (0)', 15), +(457, 1700315171, 'add', 'tst_finance', 'id=176|user_id=21|amount=100', 28), +(458, 1700315793, 'edit', 'tst_finance', 'id=37|user_id=9|amount=150|note=Startovne', 28), +(459, 1700315793, 'edit', 'tst_finance', 'id=38|user_id=9|amount=150|note=Startovne', 28), +(460, 1700315793, 'edit', 'tst_finance', 'id=39|user_id=9|amount=150|note=Startovne', 28), +(461, 1700315793, 'edit', 'tst_finance', 'id=40|user_id=9|amount=80|note=', 28), +(462, 1700315793, 'edit', 'tst_finance', 'id=41|user_id=9|amount=80|note=', 28), +(463, 1700317985, 'add', 'tst_finance', 'id=177|user_id=22|amount=100', 15); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `tst_news` +-- + +CREATE TABLE `tst_news` ( + `id` int(10) UNSIGNED NOT NULL, + `id_user` smallint(5) UNSIGNED DEFAULT NULL, + `datum` int(11) NOT NULL DEFAULT 0, + `nadpis` varchar(50) NOT NULL DEFAULT '', + `text` longtext NOT NULL, + `internal` tinyint(1) NOT NULL DEFAULT 0, + `modify_flag` tinyint(1) NOT NULL DEFAULT 0 +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_czech_ci COMMENT='novinky'; + +-- +-- Dumping data for table `tst_news` +-- + +INSERT INTO `tst_news` (`id`, `id_user`, `datum`, `nadpis`, `text`, `internal`, `modify_flag`) VALUES +(7, 11, 1295305200, '', 'Update na RC2.', 0, 0), +(5, 11, 1292281200, '', 'Spuštěn test cronu.', 0, 0), +(6, 11, 1294268400, '', 'Update na RC1.', 0, 0), +(8, 1, 1327878000, 'Nová doba', 'První RC verze 2.1 byl nasazen pro testovani. Konkrétně jde o build 234. Slouží k ověření funkčnosti systému, zatím bez financí.\r\n', 0, 0), +(9, 11, 1327878000, '', 'Update na build 236.', 0, 0), +(10, 11, 1327878000, '', 'Update na build 238.', 0, 0), +(11, 1, 1327878000, '', 'Update na build 239.', 0, 0), +(12, 1, 1338760800, 'Testování začíná', 'Druhá RC verze 2.1 byla nasazena pro testovani. Konkrétně jde o build 261. Slouží k ověření funkčnosti modernizace systému, pořád bez financí. Finance nejspíš budou až v další větší verzi.', 0, 0), +(13, 1, 1338847200, '', 'Update na build 262.', 0, 0), +(14, 1, 1338847200, 'Seznam změn', '
    \r\n
  • modifikace vzhledu cele aplikace\r\n
  • zruseno omezeni na jeden termin prihlasek / nyni jednodenni i vicedenni maji stejne moznosti (az 5 terminu)\r\n
  • do seznamu zavodu pridana rozsahlejsi moznost filtrace\r\n
  • moznost vytvaret zjednodusene prihlasky clenu (jen generovani formatu prihlasek bez zapisu do db.)\r\n
  • pri vytvareni noveho clena pridana moznost pro hledani volnych reg. cisel\r\n
  • upozornovani ne email o terminech prihlasek\r\n
  • Pokud je prihlasen uzivatel, uz se nezobrazuje oddilova terminovka samostatne.\r\n
  • prihlasovatel - odhlasovani prevedeno do hromadne prihlasky.\r\n
  • upravena moznost zmenit SI cip pro zavod i zavodnikovi s vlastnim cipem.\r\n
  • spousta drobnych oprav / uprav / vylepseni\r\n
', 0, 0), +(15, 1, 1339365600, '', 'Testeři vpuštěni :)', 0, 0), +(17, 23, 1339365600, 'mam pravo na pridávanie noviniek? ', 'Mám normalniho uzivatele + maleho trenera (2 nahodni sverenci). \r\n', 0, 0), +(19, 1, 1339452000, 'Upozornovani', 'Tak jsem konecne zapnul spravne upozornovani na email.', 0, 0), +(22, 19, 1339538400, 'Ahoj', 'Tak už jsem se taky pustila do testování:)', 0, 0), +(30, 21, 1340056800, 'Ahoj', 'Taky testuju !', 0, 0), +(32, 18, 1340143200, 'Zdar jak sviňa', 'Co ta šipka na liště v aktualitách. Nezmátla vás? ;-)tak já tedy edituji', 0, 0), +(33, 20, 1342648800, 'testujeme, ale...', '...ono se to postupně mění! takže testujeme vkládání novinek ještě jednou...i tučné písmo...i podtržené', 0, 0), +(34, 20, 1342648800, '', 'tak ještě jednou tučné a podtržené', 0, 0), +(35, 1, 1358809200, '', 'Update na RC3 build 291.', 0, 0), +(36, 1, 1358809200, 'Seznam změn ', '
    \r\n
  • různé menší změny a sjednocování vzhledu\r\n
  • přidána možnost editace novinky\r\n
  • několik jednotících úprav u malého trenéra\r\n
  • odkaz na seznam přihlášených již není pod ikonou typu závodu, pokus o sjednocení v rámci různých typů zobrazení\r\n
  • v aktualitkách přidána možnost přihlašování\r\n
  • další opravy dle nahlášených do mantisu.\r\n
  • drobné opravy a úpravy nahlášené při testování\r\n
', 0, 0), +(38, 10, 1358895600, 'test', 'test2', 0, 0), +(41, 1, 1358982000, '', 'Update na build 292. (Práva u editace novinky)', 0, 0), +(42, 1, 1359241200, '', 'Update na RC4 build 296.', 0, 0), +(43, 1, 1359241200, ' Seznam změn ', '
    \r\n
  • pridani bublinkove napovedy v hlavickach tabulek\r\n
  • odstraneno zobrazeni uzivateli, ze ma povoleno psani novinek\r\n
  • uprava menu spravce, slouceno do jednoho a znemozneno editovat sebe samu\r\n
  • zrusen starsi format prihlasky\r\n
  • drobne graficke upravy v upozornovani\r\n
', 0, 0), +(44, 1, 1359327600, '', 'Update na build 302. Vylepseni dialogu pro upozornovani emailem.', 0, 0), +(49, 12, 1359500400, 'Tak trochu test', 'Trochu testu Blabla', 0, 0), +(47, 1, 1359327600, '', 'Update na build 303. Upravy barvy zvyrazneni v tabulce.', 0, 0), +(48, 1, 1359327600, '', 'Update na build 304. Opravena funkncnost Upozornovani pod IE.', 0, 0), +(51, 1, 1360018800, '', 'Update na build 312. Přidáno testování základního nástřelu financí.', 0, 0), +(53, 1, 1360105200, '', 'Update na build 328.', 0, 0), +(54, 1, 1360623600, '', 'Update na build 341. Změny ohledně financí.', 0, 0), +(55, 1, 1361746800, '', 'Update na build 355.', 0, 0), +(56, 1, 1361746800, '', 'Update na build 356.', 0, 0), +(57, 1, 1361746800, 'Seznam změn ', '
    \r\n
  • Upraveno zobrazení informací o závodě, většinou se teď zobrazuje minimální info s možností zobrazit celé info.\r\n
  • Zobrazení přehledu financí pro oba typy trenerů.\r\n
  • Různé úpravy vzhledu u financí. A to jak zobrazení, tak i formulářů.\r\n
  • Zakladní funkční platby pro závody.\r\n
  • Oprava generování RSS.\r\n
\r\n', 0, 0), +(61, 1, 1366322400, '', 'Update na build 379.', 0, 0), +(62, 1, 1366322400, 'Seznam změn ', '
    \r\n
  • Přidána možnost pro odesílání emailu při vytvoření účtu a při změně hesla.\r\n
  • Aktualizace předdefinovaných kategorii pro MTBO.\r\n
  • Zrušeno zobrazení datumu v záhlaví některých stránek, další sjednocování vzhledu.\r\n
  • Odstraněny červené nápisy o refreshi. Provádí se automaticky pri změně.\r\n
  • Uživateli přidánan vlastno národnost, pro budoucí export do ORISu. Přidána podpora pro editaci národnosti.\r\n
', 0, 0), +(63, 1, 1367100000, '', 'Update na build 386.', 0, 0), +(64, 1, 1367100000, 'Seznam změn ', '
    \r\n
  • Pridana moznost hromadneho zadani castky a poznamky pro platby k zavodu.\r\n
  • Opraveno zobrazni lidi pro platby k zavodu.\r\n
', 0, 0), +(65, 1, 1368568800, '', 'Update na build 392.', 0, 0), +(66, 1, 1368568800, 'Seznam změn ', '
    \r\n
  • Přidána možnost změnit závod při update jednotlivé platby\r\n
', 0, 0), +(68, 11, 1369692000, '', 'ěěščřžýáíé\r\n12345', 0, 0), +(74, 1, 1391468400, '', 'Update na build 413.', 0, 0), +(71, 10, 1369692000, '+ěščšěřšěřžčýřřýžáýžíéíáýúůúů', 'ěěšžščýřáýžáýžéíýáúůúůúěčřšžčůáýíúůýžúřčůšěč', 0, 0), +(75, 1, 1391468400, 'Seznam změn', '
    \r\n
  • Posílena role správce\r\n
  • Možnost v závodě volby společné dopravy\r\n
  • Možnost reklamace k platbám u financí\r\n
', 0, 0), +(76, 1, 1392591600, '', 'Update na build 418.', 0, 0), +(77, 1, 1392591600, 'Seznam změn', '
    \r\n
  • Možnost označení závodu jako zrušeného\r\n
  • Možnost spec. textu v seznamu přihlášek člena\r\n
', 0, 0), +(78, 1, 1393282800, '', 'Update na build 424.', 0, 0), +(79, 1, 1393282800, 'Seznam změn ', '
    \r\n
  • Do exportu financí přidána registračka.\r\n
  • Přidány sumy za závod a za celý oddíl do financí.\r\n
  • Přidána možnost transferu peněz mezi členy.\r\n
  • Přidána možnost blokovat přihlášky na závody.\r\n
', 0, 0), +(80, 1, 1393455600, '', 'Update na build 432.', 0, 0), +(81, 1, 1393455600, 'Seznam změn', '
    \r\n
  • Vylepšená verze možnosti transferu peněz mezi členy. \r\n
  • Přidána možnost malého trenéra přiřadit si členy do financí.\r\n
', 0, 0), +(82, 1, 1400018400, '', 'Update na build 437.', 0, 0), +(83, 1, 1400018400, 'Seznam změn ', '
    \r\n
  • Sjednocení zobrazení v malém trenérovi\r\n
  • Rozšíření informací pro malého trenéra (suma za \"rodinu\", atp).\r\n
  • U finančníka doplněn sloupec s celkovou platbou za závod.\r\n
  • Odstraneni \'0\' z exportu přihlášek do jednotného formátu.\r\n
\r\n', 0, 0), +(84, 1, 1412028000, '', 'Update na build 439.', 0, 0), +(85, 1, 1412028000, 'Seznam změn', '
    \r\n
  • Doplnění společné dopravy do hromadného přihlašování [LuF]\r\n
', 0, 0), +(86, 1, 1420498800, '', 'Update na build 451.', 0, 0), +(87, 1, 1420498800, 'Seznam změn ', '
    \r\n
  • Rozšíření společné dopravy o automaticky stav. Nyní lze mít závod buď :
      \r\n
    • Bez společné dopravy\r\n
    • Společná doprava s výběrem účasti\r\n
    • Automatická společná doprava\r\n
    Nová třetí možnost neumožňuje závodníkovy vybrat zda využije hromadnou dopravu, počítá ji automaticky.\r\n
', 0, 0), +(88, 1, 1421535600, '', 'Update na build 454.', 0, 0), +(89, 1, 1421535600, 'Seznam změn ', '
    \r\n
  • Přidána editace a zobrazeni typu oddílového příspěvku pro člena. Možnost editace finančníkem.\r\n
', 0, 0), +(90, 1, 1422918000, '', 'Update na build 461.', 0, 0), +(91, 1, 1422918000, 'Seznam změn ', '
    \r\n
  • Komplet překódováno do UTF-8\r\n
  • Vnitřní opravy a rušení obsolete kódu\r\n
  • Přidána další varianta filtru pro zobrazení závodu, a to cca měsíc staré závody\r\n
', 0, 0), +(92, 1, 1423004400, '', 'Update na build 464.', 0, 0), +(93, 1, 1423004400, 'Seznam změn ', '
    \r\n
  • Oprava pravidelného rozesílání emailů.\r\n
', 0, 0), +(94, 10, 1424041200, '+ěřčžřčýřžýážýáííéˇqňˇočóöüï¨zaä¨c¨v¨b¨n¨n¨dgfrëwt', 'asdfadsfljalřěžýýčážýáíýířěřáěíářýíčáíščř\'qwe;++;°;ˇěčřetˇGhDYˇHyˇyˇyuˇU͡OˇˇjˇghfďfšˇXC', 0, 0), +(95, 11, 1424041200, '\'', '\'', 0, 0), +(96, 1, 1424127600, '', 'Update na build 466.', 0, 0), +(97, 1, 1424127600, 'Seznam změn', '
    \r\n
  • Oprava zpracování duplicit v editaci kategorií.\r\n
  • Opraveno chování poznámky ve financích.\r\n
', 0, 0), +(98, 1, 1425423600, '', 'Update na build 470.', 0, 0), +(99, 1, 1425423600, 'Seznam změn ', '
    \r\n
  • Oprava drobností při přechodu na jiné kódování (emaily, generování loginu)\r\n
  • Defaultně je v převodu peněz prázdný příjemnce \r\n
\r\n', 0, 0), +(100, 1, 1426633200, '', 'Update na build 473.', 0, 0), +(101, 1, 1426633200, 'Seznam změn ', '
    \r\n
  • Opraveno zasilání upozorňování o finančním stavu člena.\r\n
\r\n', 0, 0), +(102, 10, 1429740000, 'Páteční trénink', 'Páteční trénink od 17 hodin na kraji lesa severně od univerzitního \r\nkampusu Bohunice (N 49°10.871\', E 16°34.173\'). Krátká trať (hodně \r\nkontrol, krátké postupy), pro menší nefáborkovaná linie, pro začátečníky \r\nhvězdice (vždy 1 kontrola tam a zpět). Les je pěkný humus, zakrytí všech \r\núdů doporučeno.', 0, 0), +(103, 10, 1429740000, 'Páteční trénink od 17 hodin na kraji lesa severně ', 'Páteční trénink od 17 hodin na kraji lesa severně od univerzitního kampusu Bohunice (N 49°10.871\', E 16°34.173\'). Krátká trať (hodně kontrol, krátké postupy), pro menší nefáborkovaná linie, pro začátečníky hvězdice (vždy 1 kontrola tam a zpět). Les je pěkný humus, zakrytí všech údů doporučeno. Páteční trénink od 17 hodin na kraji lesa severně od univerzitního kampusu Bohunice (N 49°10.871\', E 16°34.173\'). Krátká trať (hodně kontrol, krátké postupy), pro menší nefáborkovaná linie, pro začátečníky hvězdice (vždy 1 kontrola tam a zpět). Les je pěkný humus, zakrytí všech údů doporučeno. Páteční trénink od 17 hodin na kraji lesa severně od univerzitního kampusu Bohunice (N 49°10.871\', E 16°34.173\'). Krátká trať (hodně kontrol, krátké postupy), pro menší nefáborkovaná linie, pro začátečníky hvězdice (vždy 1 kontrola tam a zpět). Les je pěkný humus, zakrytí všech údů doporučeno. Páteční trénink od 17 hodin na kraji lesa severně od univerzitního kampusu Bohunice (N 49°10.871\', E 16°34.173\'). Krátká trať (hodně kontrol, krátké postupy), pro menší nefáborkovaná linie, pro začátečníky hvězdice (vždy 1 kontrola tam a zpět). Les je pěkný humus, zakrytí všech údů doporučeno. Páteční trénink od 17 hodin na kraji lesa severně od univerzitního kampusu Bohunice (N 49°10.871\', E 16°34.173\'). Krátká trať (hodně kontrol, krátké postupy), pro menší nefáborkovaná linie, pro začátečníky hvězdice (vždy 1 kontrola tam a zpět). Les je pěkný humus, zakrytí všech údů doporučeno. Páteční trénink od 17 hodin na kraji lesa severně od univerzitního kampusu Bohunice (N 49°10.871\', E 16°34.173\'). Krátká trať (hodně kontrol, krátké postupy), pro menší nefáborkovaná linie, pro začátečníky hvězdice (vždy 1 kontrola tam a zpět). Les je pěkný humus, zakrytí všech údů doporučeno.', 0, 0), +(105, 1, 1430172000, '', 'Update na build 477.', 0, 0), +(106, 1, 1430172000, 'Seznam změn ', '
    \r\n
  • Sjednoceny aktualitky do jednoho seznamu jež zobrazuje datum a přihlášky X dní dopředu.\r\n
  • Oprava chyby, kdy při editaci platby se vždy vybral nějaký závod i když platba nepatřila závodu.\r\n
  • Opraveno zpracování seznamu kategorií, kdy občas vypadla poslední.\r\n
\r\n', 0, 0), +(107, 1, 1455318000, '', 'Update na build 493.', 0, 0), +(108, 1, 1455318000, 'Seznam změn ', '
    \r\n
  • Trenér může u nového člena zadat i rodné číslo.\r\n
  • Přidáno společné ubytování v přihláškách na závody.\r\n
  • Doplněny kontroly při převodech mezi členy (zůstatek, mínusové částky atp.)\r\n
  • Možnost admina resetovat plošně typ oddílových příspěvků.\r\n
\r\n', 0, 0), +(109, 1, 1455663600, '', 'Update na build 497.', 0, 0), +(110, 1, 1455663600, 'Seznam změn ', '
    \r\n
  • Rozšířen export financí o informace o přiřazeném závodě.\r\n
  • Oprava posílání peněz pro finančníka.\r\n
\r\n', 0, 0), +(111, 1, 1483830000, '', 'Update na build 502.', 0, 0), +(112, 1, 1483830000, 'Seznam změn ', 'Jen opravy chyb.', 0, 0), +(113, 1, 1514070000, '', 'Update na build 508.', 0, 0), +(114, 1, 1514070000, 'Seznam změn ', '
    \r\n
  • Nové typy pro závody/akce
  • \r\n
  • Přihlašování se doopravdy zavře až 2 hodiny po půlnoci
  • \r\n
\r\n', 0, 0), +(115, 1, 1515020400, '', 'Update na build 513.', 0, 0), +(116, 1, 1515020400, 'Seznam změn ', '
    \r\n
  • Opraveno zobrazení financí pro finančníka a trenéry
  • \r\n
  • Opraveno generování emailů o financích
  • \r\n
\r\n', 0, 0), +(117, 1, 1515452400, '', 'Update na build 515.', 0, 0), +(118, 1, 1515452400, 'Seznam změn', 'Jen opravy chyb. ', 0, 0), +(119, 1, 1518562800, '', 'Update na build 519.', 0, 0), +(120, 1, 1518562800, 'Seznam změn', '
    \r\n
  • Vylepsena podpora vice emailovych adres.
  • \r\n
  • Opraven problem s posilam penez u maleho trenera
  • \r\n
  • Finance - prehled u financnika - pridano zobrazeni k nejakemu datu
  • \r\n
  • U prihlasovatale uz nesjou zaskrtnuty stare zavody
  • \r\n
\r\n', 0, 0), +(121, 1, 1520636400, '', 'Update na build 527.', 0, 0), +(122, 1, 1520636400, 'HTTPS', 'Testovací provoz na HTTPS.', 0, 0), +(123, 1, 1530655200, '', 'Update na build 531.', 0, 0), +(124, 1, 1530655200, 'Seznam změn', '
    \r\n
  • Zmena poradi trideni zavodniku pri prihlasovani.
  • \r\n
  • Pridany interni novinky
  • \r\n
  • Pridano posilani poslednich novinek emailem.
  • \r\n
  • Pridano zobrazeni poslednich internich novinek do aktualitek.
  • \r\n
  • Normalni uzivatel si nemuze editovat sam nektere udaje
  • \r\n
', 0, 0), +(125, 1, 1530655200, 'Ukazkova interni novinka', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', 1, 0), +(126, 1, 1532642400, '', 'Update na build 533.', 0, 0), +(127, 1, 1532642400, 'Seznam změn', '
    \r\n
  • API pro seznam zavodu.
  • \r\n
', 0, 0), +(129, 14, 1533592800, 'Jendova pokusna novinka', 'Vypada to dobre! Muzu editovat novinky ostatnim?', 1, 0), +(130, 1, 1540677600, '', 'Update na build 537.', 0, 0), +(131, 1, 1543273200, '', 'Update na build 538.', 0, 0), +(132, 1, 1543273200, 'Seznam změn', '
    \r\n
  • Pokus o urychleni kodu - prihlasovani po 1 zavodnikovi pro trenery a prihlasovatele.
  • \r\n
', 0, 0), +(133, 11, 1577487600, '', 'Update na build 539.', 0, 0), +(134, 1, 1603144800, '', 'Update na build 570.', 0, 1), +(135, 1, 1607209200, '', 'Update na build 576.', 0, 1), +(136, 1, 1653170400, '', 'Update na build 607.', 0, 2), +(137, 1, 1653170400, 'Seznam změn', '
    \r\n
  • Předefinované kategorie lze nyní přímo editovat a rozšiřovat
  • \r\n
  • Vylepšeno zabezpečení hesel
  • \r\n
  • Přidán link s detaily o členovy do části finance
  • \r\n
  • Přihlašování po jednom nyní umožnuje schovávat již přihlášené z výběru na příhlášení
  • \r\n
  • Drobné opravy a úpravy UI, CSS, překlepy
  • \r\n
', 0, 1); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `tst_payment_rules` +-- + +CREATE TABLE `tst_payment_rules` ( + `id` int(10) UNSIGNED NOT NULL, + `typ` enum('ob','mtbo','lob','jine','trail') DEFAULT NULL, + `typ0` enum('Z','T','S','V','N','J') DEFAULT NULL, + `finance_type` int(10) UNSIGNED DEFAULT NULL, + `termin` tinyint(1) DEFAULT NULL COMMENT 'Platný termín pro pozitivní hodnoutu, první platný pro negativní', + `zebricek` int(10) UNSIGNED DEFAULT NULL, + `druh_platby` enum('C','P','R') DEFAULT NULL, + `platba` int(10) DEFAULT NULL, + `uctovano` tinyint(1) UNSIGNED DEFAULT NULL COMMENT '1 startovné, 2 doprava, 4 ubytování' +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_czech_ci COMMENT='podminene predpisy plateb uzivate'; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `tst_users` +-- + +CREATE TABLE `tst_users` ( + `id` smallint(5) UNSIGNED NOT NULL, + `prijmeni` varchar(30) NOT NULL DEFAULT '', + `jmeno` varchar(20) NOT NULL DEFAULT '', + `datum` date DEFAULT NULL, + `adresa` varchar(50) DEFAULT NULL, + `mesto` varchar(25) NOT NULL, + `psc` varchar(6) NOT NULL, + `tel_domu` varchar(25) DEFAULT NULL, + `tel_zam` varchar(25) DEFAULT NULL, + `tel_mobil` varchar(25) DEFAULT NULL, + `email` varchar(50) DEFAULT NULL, + `reg` int(4) UNSIGNED ZEROFILL NOT NULL DEFAULT 0000, + `si_chip` int(9) UNSIGNED NOT NULL DEFAULT 0, + `hidden` tinyint(1) UNSIGNED NOT NULL DEFAULT 0, + `sort_name` varchar(50) NOT NULL DEFAULT '', + `poh` enum('H','D') NOT NULL DEFAULT 'H', + `lic` enum('E','A','B','C','D','R','-') DEFAULT '-', + `lic_mtbo` enum('E','A','B','C','D','R','-') DEFAULT '-', + `lic_lob` enum('E','A','B','C','D','R','-') DEFAULT '-', + `fin` int(11) NOT NULL DEFAULT 0, + `bank_account` varchar(255) DEFAULT NULL, + `chief_id` smallint(5) UNSIGNED NOT NULL DEFAULT 0, + `rc` varchar(10) NOT NULL, + `narodnost` varchar(2) NOT NULL DEFAULT 'CZ', + `entry_locked` tinyint(1) UNSIGNED NOT NULL DEFAULT 0, + `chief_pay` smallint(5) UNSIGNED DEFAULT NULL, + `finance_type` int(10) UNSIGNED NOT NULL DEFAULT 0 +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_czech_ci COMMENT='vsechny informace o uzivatelich'; + +-- +-- Dumping data for table `tst_users` +-- + +INSERT INTO `tst_users` (`id`, `prijmeni`, `jmeno`, `datum`, `adresa`, `mesto`, `psc`, `tel_domu`, `tel_zam`, `tel_mobil`, `email`, `reg`, `si_chip`, `hidden`, `sort_name`, `poh`, `lic`, `lic_mtbo`, `lic_lob`, `fin`, `bank_account`, `chief_id`, `rc`, `narodnost`, `entry_locked`, `chief_pay`, `finance_type`) VALUES +(1, 'Pátek', 'Richard', '0000-00-00', '', '', '', '', '', '', 'arnost.p@centrum.cz', 7609, 130, 0, 'Pátek Richard', 'H', 'C', '-', '-', 0, NULL, 0, '', 'CZ', 0, NULL, 2), +(2, 'König', 'Lukáš', '1980-06-17', '', '', '', '', '', '', 'kenia@seznam.cz', 8001, 121, 0, 'König Lukáš', 'H', 'C', '-', '-', 0, NULL, 0, '', 'CZ', 0, NULL, 0), +(3, 'Veselý', 'Martin', '0000-00-00', 'Předklášteří ', '', '', '', '', '', '', 7502, 53201, 0, 'Veselý Martin', 'H', 'C', '-', '-', 0, NULL, 12, '', 'CZ', 0, NULL, 0), +(4, 'Novák', 'Jan', '1991-01-01', '', '', '', '', '', '', '', 9111, 0, 0, 'Novák Jan', 'H', 'C', '-', '-', 0, NULL, 7, '', 'CZ', 0, 7, 3), +(5, 'Novák', 'Karel', '1993-01-01', '', '', '', '', '', '', '', 9312, 0, 0, 'Novák Karel', 'H', 'A', '-', '-', 0, NULL, 7, '', 'CZ', 0, 7, 0), +(6, 'Novák', 'Martin', '1995-01-01', '', '', '', '', '', '', '', 9513, 1341, 0, 'Novák Martin', 'H', 'E', '-', '-', 0, NULL, 0, '', 'CZ', 0, NULL, 0), +(7, 'Nováková', 'Eva', '1997-01-01', '', '', '', '', '', '', '', 9751, 55555, 0, 'Nováková Eva', 'D', 'E', 'E', '-', 0, NULL, 0, '', 'CZ', 0, NULL, 0), +(8, 'Nováková', 'Zuzana', '1999-01-01', '', '', '', '', '', '', '', 9952, 1341431, 0, 'Nováková Zuzana', 'D', 'R', '-', '-', 0, NULL, 7, '', 'CZ', 0, 7, 0), +(9, 'Nováková', 'Jitka', '1983-01-01', '', '', '', '', '', '', '', 8357, 49494, 0, 'Nováková Jitka', 'D', 'C', '-', '-', 0, NULL, 7, '', 'CZ', 0, 7, 0), +(10, 'Mazaný', 'Filil', '1988-05-01', '', '', '', '', '', '', '', 8801, 1486785, 0, 'Mazaný Filil', 'H', 'E', '-', 'A', 0, NULL, 0, '', 'CZ', 0, NULL, 2), +(11, 'Drábek', 'Jan', '1985-11-04', 'Škroupova 10', 'Brno - Židenice', '636 00', '', '', '608477026', 'jan_drabek@volny.cz', 8511, 49690, 0, 'Drábek Jan', 'H', 'C', '-', '-', 0, NULL, 13, '', 'CZ', 0, 13, 1), +(12, 'Zřídkaveselý', 'Libor', '1972-07-03', 'Skorkovského 153', 'Brno', '636 00', '549246395', '545321282', '604776993', 'zr@jaroska.cz', 7207, 101, 0, 'Zřídkaveselý Libor', 'H', 'C', '-', '-', 0, NULL, 0, '', 'CZ', 0, NULL, 0), +(13, 'Křístková', 'Veronika', '1983-01-28', 'Za kovárnou 405', 'Smržice', '79817', '', '', '736120094', 'fricco@seznam.cz', 8379, 52865, 0, 'Křístková Veronika', 'D', 'C', '-', '-', 0, NULL, 0, '', 'CZ', 0, NULL, 0), +(14, 'Hlavová', 'Hana', '1988-05-12', 'Tyršova 397', 'Konice', '798 52', '608131017', '', '608131017', 'hanah.kon@centrum.cz', 8888, 515450, 0, 'Hlavová Hana', 'D', 'E', '-', '-', 0, NULL, 0, '', 'CZ', 1, NULL, 3), +(15, 'Zvarik', 'Tomáš', '1977-01-29', '', '', '000 00', '', '', '', 'ciselko@gmail.com, icq 220735915', 7702, 0, 0, 'Zvarik Tomáš', 'H', 'C', '-', '-', 0, NULL, 0, '', 'CZ', 0, NULL, 0), +(16, 'Zřídkaveselý', 'Adam', '2005-11-11', 'Skorkovského 153', 'Brno', '636 00', '', '', '', '', 0505, 0, 0, 'Zřídkaveselý Adam', 'H', 'C', '-', '-', 0, NULL, 12, '', 'CZ', 0, NULL, 0), +(17, 'Zřídkaveselý', 'Martin', '2008-09-01', 'Skorkovského 153', 'Brno', '636 00', '', '', '', '', 0808, 0, 0, 'Zřídkaveselý Martin', 'H', 'C', '-', '-', 0, NULL, 12, '', 'CZ', 0, NULL, 0), +(18, 'Stehlík', 'Martin', '1985-06-25', 'Tichého 7', 'Brno', '616 00', '543240819', '', '608438928', 'stehlik.m@atlas.cz', 8503, 1985625, 0, 'Stehlík Martin', 'H', 'C', '-', '-', 0, NULL, 0, '', 'CZ', 0, NULL, 3), +(32, 'Urválek', 'Jiří', '0000-00-00', '', '', '', '', '', '', '', 6107, 0, 0, 'Urválek Jiří', 'H', 'C', '-', '-', 0, NULL, 0, '', 'CZ', 0, NULL, 0), +(21, 'Bukovac', 'Palo', '1981-09-27', 'Nezvalova 27', 'Bratislava, Slovensko', '821 06', '00421245525925', '', '00421905570266', 'bukki.pallo@zoznam.sk', 8101, 515478, 0, 'Bukovac Palo', 'H', 'E', '-', '-', 0, NULL, 14, '', 'CZ', 1, NULL, 0), +(22, 'Bukovac', 'Dušan', '1975-03-07', 'Nezvalova 27', 'Bratislava, Slovensko', '821 06', '00421245525925', '', '00421905296601', 'dusan.bukovac@vertical.sk ', 7503, 232004, 0, 'Bukovac Dušan', 'H', 'C', '-', '-', 0, NULL, 11, '', 'CZ', 1, NULL, 3), +(23, 'Bukovac', 'Maroš', '1976-05-25', 'Nezvalova 27', 'Bratislava, Slovensko', '821 06', '00421245525925', '00421268206015', '00421905974050', 'bukovaci@centrum.sk maros.bukovac@vertical.sk', 7605, 232006, 0, 'Bukovac Maroš', 'H', 'C', '-', '-', 0, NULL, 11, '', 'CZ', 1, NULL, 0), +(25, 'Bukovacová', 'Alena', '1974-04-22', 'Nezvalova 27', 'Bratislava, Slovensko', '821 06', '00421245525925', '', '00421905194946', 'alena.bukovacova@gmail.com', 7454, 232008, 0, 'Bukovacová Alena', 'D', 'C', '-', '-', 0, NULL, 14, '', 'CZ', 1, NULL, 0), +(26, 'Jevsejenko', 'Alexandr', '1981-01-23', 'Orlí 9', 'Brno', '602 00', '542213452', '', '605534547', 'jevsejenko@gmail.com', 8110, 52073, 0, 'Jevsejenko Alexandr', 'D', 'C', '-', '-', 0, NULL, 13, '', 'CZ', 0, NULL, 5), +(27, 'Koča', 'Jaroslav', '1982-06-15', 'Dusíkova 29', 'Brno', '638 00', '', '', '777269786', 'jerry.koca@email.cz', 8200, 301217, 0, 'Koča Jaroslav', 'H', 'C', '-', '-', 0, NULL, 13, '', 'CZ', 0, NULL, 4), +(28, 'Kočová', 'Hana', '1986-02-27', 'Vranov 260', 'Vranov', '664 32', '', '', '602 344 660', 'hankoc@seznam.cz', 8676, 52165, 0, 'Kočová Hana', 'D', 'A', '-', '-', 0, NULL, 18, '', 'CZ', 0, NULL, 1), +(29, 'Kolbaba', 'Tomáš', '1982-02-21', '', '', '', '', '', '724243655', 'kolbic@seznam.cz', 8243, 52022, 0, 'Kolbaba Tomáš', 'H', 'C', '-', '-', 0, NULL, 18, '', 'CZ', 0, NULL, 0), +(30, 'Zimmermann', 'Jakub', '1989-01-11', 'Blatnická 12', 'Brno', '628 00', '', '', '723 967 341', 'jarazim@seznam.cz ,skype:jara.zimmermann', 8928, 995810, 0, 'Zimmermann Jakub', 'H', 'C', '-', '-', 0, NULL, 15, '', 'CZ', 0, NULL, 0), +(31, 'Zimmermann', 'Štěpán', '1991-12-20', 'Blatnická 12', 'Brno', '628 00', '', '', '721062310', 'stepazdepa@seznam.cz, xzimmermanns@gmail.com', 9101, 911220, 0, 'Zimmermann Štěpán', 'H', 'R', '-', '-', 0, NULL, 15, '', 'CZ', 0, NULL, 0), +(33, 'Mádlová', 'Věra', '0000-00-00', '', '', '', '', '', '', '', 8951, 0, 0, 'Mádlová Věra', 'D', 'C', '-', '-', 0, NULL, 0, '', 'CZ', 0, NULL, 6), +(34, 'Gross', 'Michal', '0000-00-00', '', '', '', '', '', '', '', 6946, 0, 0, 'Gross Michal', 'H', 'C', '-', '-', 0, NULL, 0, '', 'CZ', 0, NULL, 0), +(36, 'Štěrbák', 'Řehoř', '0000-00-00', '', '', '', '', '', '', 'arnost@eob.cz', 8006, 0, 0, 'Štěrbák Řehoř', 'H', 'C', '-', '-', 0, NULL, 0, '', 'CZ', 0, NULL, 0), +(37, 'Mocvesely', 'Osvald', '1944-01-01', '', '', '', '', '', '', '', 4400, 0, 0, 'Mocvesely Osvald', 'H', 'C', '-', '-', 0, NULL, 0, '', 'BW', 1, NULL, 8), +(38, 'Matula', 'Petr', '1982-05-17', '', '', '', '', '', '', '', 8202, 2042531, 0, 'Matula Petr', 'H', 'C', '-', '-', 0, NULL, 0, '', 'CZ', 0, NULL, 5); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `tst_xmailinfo` +-- + +CREATE TABLE `tst_xmailinfo` ( + `id` int(11) UNSIGNED NOT NULL, + `id_user` int(11) UNSIGNED NOT NULL, + `email` varchar(50) NOT NULL, + `active_tf` tinyint(1) UNSIGNED NOT NULL, + `active_ch` tinyint(1) UNSIGNED NOT NULL, + `active_rg` tinyint(1) UNSIGNED NOT NULL, + `daysbefore` int(2) NOT NULL, + `type` int(11) NOT NULL, + `sub_type` int(11) UNSIGNED NOT NULL, + `ch_data` int(11) UNSIGNED NOT NULL, + `active_fin` tinyint(1) UNSIGNED NOT NULL, + `active_finf` tinyint(1) UNSIGNED NOT NULL, + `fin_type` int(11) UNSIGNED NOT NULL, + `fin_limit` smallint(5) NOT NULL, + `active_news` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_czech_ci; + +-- +-- Dumping data for table `tst_xmailinfo` +-- + +INSERT INTO `tst_xmailinfo` (`id`, `id_user`, `email`, `active_tf`, `active_ch`, `active_rg`, `daysbefore`, `type`, `sub_type`, `ch_data`, `active_fin`, `active_finf`, `fin_type`, `fin_limit`, `active_news`) VALUES +(1, 1, 'arnost@eob.cz', 1, 1, 1, 3, 31, 191, 7, 1, 0, 1, 500, 0), +(2, 2, 'kenia@seznam.cz', 1, 1, 1, 11, 31, 191, 7, 0, 0, 0, 0, 0), +(3, 11, 'jan_drabek@volny.cz', 0, 0, 0, 3, 1, 43, 0, 0, 0, 0, 0, 0), +(4, 13, 'fricco@seznam.cz', 0, 0, 0, 14, 31, 191, 7, 0, 0, 0, 0, 0), +(5, 18, 'stehlik.m@atlas.cz', 0, 0, 0, 3, 1, 0, 7, 0, 0, 0, 0, 0), +(6, 3, 'veselacek@atlas.cz', 0, 0, 0, 3, 31, 191, 7, 0, 0, 0, 0, 0); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `tst_zavod` +-- + +CREATE TABLE `tst_zavod` ( + `id` smallint(5) UNSIGNED NOT NULL, + `ext_id` varchar(8) DEFAULT NULL, + `datum` int(11) NOT NULL DEFAULT 0, + `datum2` int(11) NOT NULL DEFAULT 0, + `nazev` varchar(70) DEFAULT NULL, + `misto` varchar(50) DEFAULT NULL, + `typ` enum('ob','mtbo','lob','jine','trail') NOT NULL, + `typ0` enum('Z','T','S','V','N','J') NOT NULL DEFAULT 'Z', + `vicedenni` tinyint(1) UNSIGNED NOT NULL DEFAULT 0, + `zebricek` int(10) UNSIGNED NOT NULL DEFAULT 0, + `ranking` enum('0','1') NOT NULL DEFAULT '0', + `odkaz` varchar(100) DEFAULT NULL, + `prihlasky` tinyint(4) UNSIGNED NOT NULL DEFAULT 0, + `prihlasky1` int(11) DEFAULT 0, + `prihlasky2` int(11) NOT NULL DEFAULT 0, + `prihlasky3` int(11) NOT NULL DEFAULT 0, + `prihlasky4` int(11) NOT NULL DEFAULT 0, + `prihlasky5` int(11) NOT NULL DEFAULT 0, + `etap` tinyint(4) UNSIGNED NOT NULL DEFAULT 0, + `kategorie` mediumtext NOT NULL, + `poznamka` mediumtext NOT NULL, + `vedouci` int(10) UNSIGNED NOT NULL, + `poslano` tinyint(3) UNSIGNED NOT NULL, + `oddil` varchar(8) DEFAULT NULL, + `send` tinyint(1) UNSIGNED NOT NULL DEFAULT 0, + `modify_flag` int(10) UNSIGNED NOT NULL, + `transport` tinyint(1) DEFAULT NULL, + `ubytovani` tinyint(1) DEFAULT NULL, + `kapacita` smallint(6) DEFAULT NULL, + `prihlasenych` smallint(6) NOT NULL DEFAULT 0, + `cancelled` tinyint(1) NOT NULL DEFAULT 0 +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_czech_ci COMMENT='tabulka popisu zavodu'; + +-- +-- Dumping data for table `tst_zavod` +-- + +INSERT INTO `tst_zavod` (`id`, `ext_id`, `datum`, `datum2`, `nazev`, `misto`, `typ`, `typ0`, `vicedenni`, `zebricek`, `ranking`, `odkaz`, `prihlasky`, `prihlasky1`, `prihlasky2`, `prihlasky3`, `prihlasky4`, `prihlasky5`, `etap`, `kategorie`, `poznamka`, `vedouci`, `poslano`, `oddil`, `send`, `modify_flag`, `transport`, `ubytovani`, `kapacita`, `prihlasenych`, `cancelled`) VALUES +(1, NULL, 1545433200, 0, 'Vánoční běh Brnem', 'Brno', 'ob', 'V', 0, 0, '1', '', 1, 1543618800, 0, 0, 0, 0, 1, '', '', 0, 0, 'ABC', 0, 0, 0, 0, NULL, 0, 1), +(2, NULL, 1545778800, 0, 'Štěpánský běh', 'Radostice2', 'jine', 'T', 0, 0, '1', '', 1, 1545174000, 0, 0, 0, 0, 1, '', '', 0, 0, 'BBM', 0, 0, 0, 0, NULL, 0, 1), +(3, NULL, 1671750000, 1672009200, 'Svátky ', 'Doma u krbu', 'lob', 'T', 1, 2, '1', '', 4, 1670626800, 1670886000, 1671231600, 1671577200, 0, 0, '', '', 0, 0, 'XMA', 0, 5, 0, 0, NULL, 0, 1), +(4, NULL, 1546210800, 0, 'Silvestrovské poježdění', 'Velodrom', 'mtbo', 'V', 0, 8, '1', '', 1, 1545865200, 0, 0, 0, 0, 1, '', '', 0, 0, 'ACH', 0, 0, 0, 0, NULL, 4, 0), +(5, NULL, 1546124400, 0, 'Hromniční trápení', 'Blansko', 'ob', 'Z', 0, 0, '0', '', 1, 1545692400, 0, 0, 0, 0, 1, '', '', 0, 0, 'RBK', 0, 0, 0, 0, NULL, 0, 0), +(6, NULL, 1675378800, 1675724400, 'Další pracovní týden', 'Brno', 'jine', 'T', 1, 0, '0', '', 5, 1672873200, 1672959600, 1673046000, 1674774000, 1675033200, 5, '', '', 0, 0, 'WRK', 0, 5, 0, 0, NULL, 1, 0), +(7, NULL, 1675378800, 0, 'testovaci nejakej', 'misto', 'ob', 'J', 0, 191, '1', 'www.asdad.sd', 1, 1672873200, 0, 0, 0, 0, 1, '', '', 0, 0, 'asdf', 0, 5, 0, 0, NULL, 1, 0), +(8, NULL, 1673737200, 0, 'MČR klasická trať, 1.ČP', 'Strážné ', 'lob', 'Z', 0, 17, '0', 'www.ob.spartak-vrchlabi.cz/zavody2011/lob/', 1, 1672786800, 0, 0, 0, 0, 1, '', '', 0, 0, 'VRL', 0, 5, 0, 0, NULL, 0, 0), +(9, NULL, 1674946800, 0, '3.ČP na krátké trati', 'Zinnwald, DE', 'lob', 'Z', 0, 1, '0', '', 1, 1672786800, 0, 0, 0, 0, 1, '', '', 0, 0, 'LIV', 0, 5, 1, 0, NULL, 0, 0), +(10, NULL, 1676761200, 0, 'MČR dvoučlenných družstev', 'Tři Studně', 'lob', 'T', 0, 48, '0', 'www.ski-adventure.cz/2011/rozpis-lob/', 1, 1675897200, 0, 0, 0, 0, 1, '', '', 28, 0, 'OSN+TBM', 0, 5, 0, 0, NULL, 1, 0), +(11, NULL, 1708902000, 0, 'MČR ve sprintu, 6.ČP', 'Nová Ves u Rýmařova', 'lob', 'Z', 0, 16, '0', '', 0, 0, 0, 0, 0, 0, 1, '', '', 0, 0, 'VRB', 0, 4, 0, 0, NULL, 1, 0), +(13, NULL, 1710802800, 1710889200, 'Brutus Extreme Orienteering', '', 'jine', 'Z', 1, 0, '0', '', 3, 1705964400, 1707260400, 1709334000, 0, 0, 2, 'D10N;D12C;D14C;D16C;D18C;D21C;D21D;D35C;D45C;D55C;H10N;H12C;H14C;H16C;H18C;H21C;H21D;H35C;H45C;H55C;HDR', '', 0, 0, 'GEMMA', 0, 5, 0, 0, NULL, 2, 0), +(14, NULL, 1675465200, 0, 'Hromniční trápení II', 'Blansko', 'ob', 'Z', 0, 8, '0', 'www.hromnicni.wz.cz/', 1, 1675033200, 0, 0, 0, 0, 1, 'H14;D14;H19;D19;H35;D35;P;HDR', '', 0, 0, 'RBK', 0, 5, 0, 0, NULL, 1, 0), +(15, NULL, 1680213600, 1680300000, 'CESOM 2015', 'Borský Mikuláš', 'ob', 'Z', 1, 0, '1', '', 2, 1677193200, 1678834800, 0, 0, 0, 3, 'H10N;D10N;H12C;D12C;H14C;D14C;H16C;D16C;H18C;D18C;H21C;D21C;H21D;D21D;H35C;D35C;H45C;D45C;H55C;D55C;HDR;D12B;D14B;D16B;D18B;D20B;D21B;D35B;D40B;D45B;D50B;D55B;D60B;D65B;H12B;H14B;H16B;H18B;H20B;H21B;H35B;H40B;H45B;H50B;H55B;H60B;H65B;H70B;H75B', '', 0, 0, 'BBA', 0, 5, 0, 0, NULL, 9, 0), +(16, NULL, 1687989600, 1688162400, 'Cena střední Moravy', 'Okrouhlá – Melkov', 'mtbo', 'Z', 1, 0, '1', 'csm12.kobkon.cz/', 1, 1686693600, 0, 0, 0, 0, 3, 'H10N;D10N;H12C;D12C;D12;H14C;D14C;D14;H16C;D16C;D16;H18C;D18C;D18;H21C;D21C;H21D;D21D;H35C;D35C;D35;H45C;D45C;D45;H55C;D55C;D55;D10N;D12C;D14C;D16C;D18C;D21C;D21D;D35C;D45C;D55C;HDR;D10N;D12C;D14C;D16C;D18C;D21C;D21D;D35C;D45C;D55C;H10N;H12C;H14C;H16C;H18C;H21C;H21D;H35C;H45C;H55C;HDR;', '', 0, 0, 'KON+ZBM', 0, 5, 1, 0, NULL, 5, 0), +(18, NULL, 1689199200, 1689372000, 'H.S.H. Vysočina cup', 'Leština u Skály', 'ob', 'Z', 1, 128, '1', 'www.obchrast.com/', 2, 1686866400, 1688508000, 0, 0, 0, 3, '', '', 0, 0, 'CHT', 0, 5, 1, 1, NULL, 2, 0), +(19, NULL, 1689112800, 0, 'H.S.H. Vysočina cup - noční ', 'Leština u Skály', 'ob', 'Z', 0, 128, '1', 'obchrast.com/nz.php?nzid=891', 1, 1683842400, 0, 0, 0, 0, 1, '', '2154365ěřčěšžžřážíáýöïÿ¨tëw¨s¨ds¨d¨x¨vdgf¨ds¨sä', 23, 0, 'CHT', 0, 5, 1, 0, NULL, 4, 0), +(20, NULL, 1721426400, 1721599200, 'Veteran cup', 'Obec Záměl', 'ob', 'Z', 1, 0, '1', 'obvamberk.aspone.cz/VETERAN_CUP_2012_podrobny_rozpis.pdf', 3, 1715551200, 1719525600, 1720735200, 0, 0, 3, '', '', 0, 0, 'VAM', 0, 5, 0, 0, NULL, 1, 0), +(21, NULL, 1721944800, 1722204000, 'Grand Prix Silesia 20XX', 'Vidnava', 'ob', 'Z', 1, 128, '1', 'silesia.obopava.cz/silesia_2012/', 3, 1709074800, 1719525600, 1720821600, 0, 0, 5, 'D10N;D12;D14;D16;D18;D21C;D21D;D35;D45;D55;H10N;H12;H14;H16;H18;H21C;H21D;H35;H45;H55;HDR', '', 0, 0, 'AOP', 1, 5, 1, 1, NULL, 1, 0), +(22, NULL, 1724536800, 1724623200, 'Pěkné prázdniny', 'Malá Skála, Český ráj', 'ob', 'Z', 1, 0, '1', 'www.tur.cz/pekneprazdniny/', 2, 1722031200, 1723327200, 0, 0, 0, 3, '', '', 0, 0, 'TUR', 0, 5, 2, 0, NULL, 2, 0), +(23, NULL, 1535061600, 0, 'Pěkné prázdniny - sprint ', 'Turnov', 'ob', 'Z', 0, 0, '1', 'tur.cz/pekneprazdniny/', 2, 1532642400, 1532728800, 0, 0, 0, 1, '', 'Prihlasuje se spolu prihlaskou na PPcka', 0, 0, 'TUR', 1, 0, 0, 0, NULL, 2, 0), +(24, NULL, 1723932000, 1724018400, '3 etapový OB Jičín ', 'Sportcentrum Brada', 'ob', 'Z', 1, 0, '1', 'objicin.tpc.cz/jicin/main.php?&zavody=40&menu=100&jazyk=0', 1, 1720821600, 0, 0, 0, 0, 3, '', 'E1 a E2 bez rankingu', 0, 0, 'SJC', 0, 5, 1, 0, NULL, 0, 0), +(25, NULL, 1725055200, 1725228000, 'Cena východních Čech', 'Seč', 'ob', 'Z', 1, 0, '1', 'lpu.cz/cvc15', 2, 1719957600, 1720821600, 0, 0, 0, 3, '', '', 0, 0, 'LPU', 0, 5, 0, 0, NULL, 2, 0), +(26, NULL, 1727474400, 1727560800, 'MČR na klasice', 'Skokovy', 'ob', 'Z', 1, 17, '1', 'www.ok99.cz/mct2012', 1, 1725746400, 0, 0, 0, 0, 0, '', '', 0, 0, 'PHK+TUV', 0, 5, 0, 0, NULL, 3, 0), +(27, NULL, 1538776800, 0, 'MČR štafet', 'Březina', 'ob', 'Z', 0, 48, '1', 'mcrdruzstva.eob.cz', 1, 1537567200, 0, 0, 0, 0, 1, 'a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d,a,b,c,d', '', 0, 0, 'ZBM', 0, 0, 1, 0, NULL, 1, 0), +(28, NULL, 1728252000, 0, 'MČR klubů a oblastních výběrů žactva', 'Březina', 'ob', 'Z', 0, 0, '1', 'mcrdruzstva.eob.cz', 1, 1726956000, 0, 0, 0, 0, 1, 'H65D;', '', 0, 0, 'ZBM', 0, 5, 0, 0, NULL, 0, 0), +(29, NULL, 1536357600, 0, 'ČP, ŽA , ŽB - klasika', 'Nová Ves, lyžařský stadion', 'ob', 'Z', 0, 131, '1', 'cp12.aljosa.org', 1, 1534975200, 0, 0, 0, 0, 1, '', '', 0, 0, 'ASU', 0, 0, 0, 0, NULL, 3, 0), +(30, NULL, 1536444000, 0, 'ČP, ŽA , ŽB - krátká trať', 'Nová Ves, lyžařský stadion', 'ob', 'Z', 0, 131, '1', 'cp12.aljosa.org', 1, 1534975200, 0, 0, 0, 0, 1, '', '', 0, 0, 'ASU', 0, 0, 0, 0, NULL, 0, 0), +(31, NULL, 1726351200, 0, '9. JmL - klasika', 'Předklášteří', 'ob', 'Z', 0, 136, '1', 'www.tbm.cz/zavody/', 0, 0, 0, 0, 0, 0, 1, '', '', 0, 0, 'TBM', 0, 4, 1, 0, NULL, 0, 0), +(32, NULL, 1726956000, 0, '10. JmL - klasika', 'Nová Dědina', 'ob', 'Z', 0, 136, '1', 'www.smerkromeriz.cz/poradame/', 5, 1715292000, 1718056800, 1720735200, 1723500000, 1726264800, 1, '', '', 0, 0, 'SKM', 0, 5, 2, 0, NULL, 1, 0), +(33, NULL, 1539381600, 0, '11. JmL - klasika', 'Dambořice', 'ob', 'Z', 0, 136, '1', 'abm.eob.cz/', 1, 1538863200, 0, 0, 0, 0, 1, 'H10N;D10N;H10;D10;H12;D12;H14;D14;H16;D16;H18;D18;H21C;D21C;H21D;D21D;H35;D35;H45;D45;H55;D55;H65;HDR;P;pořadatel;', '', 0, 0, 'ABM', 0, 0, 0, 0, NULL, 0, 0), +(34, NULL, 1539986400, 0, '12. JmL - klasika2', 'Bílý potok', 'ob', 'Z', 0, 136, '1', 'vsk-mendelu.cz/', 0, 0, 0, 0, 0, 0, 1, '', 'Test', 0, 0, 'VBM', 0, 0, 0, 0, NULL, 0, 0), +(35, NULL, 1540591200, 0, '13. JmL - klasika', 'Senetářov', 'ob', 'Z', 0, 136, '1', 'radioklub.blansko.net/', 1, 1536098400, 0, 0, 0, 0, 1, 'D12E;', '', 0, 0, 'RBK', 0, 0, 0, 0, NULL, 1, 0), +(36, NULL, 1675292400, 0, 'Hromniční trápení', 'Blansko', 'ob', 'Z', 0, 7, '1', 'hromnicni.wz.cz/', 2, 1674860400, 1675033200, 0, 0, 0, 1, '', 'Testovací závod', 0, 0, 'RBK', 0, 5, 2, 0, NULL, 2, 0), +(37, NULL, 1551999600, 0, 'Kvetinovy zavod bez dopravy', 'Brno', 'ob', 'Z', 0, 24, '0', '', 2, 1549234800, 1549407600, 0, 0, 0, 1, '', '', 0, 0, 'PBM', 0, 0, 0, 0, NULL, 4, 0), +(38, NULL, 1678402800, 1678575600, 'Perina kup', 'Podoli', 'ob', 'S', 1, 132, '1', '', 3, 1675292400, 1676588400, 1677625200, 0, 0, 4, 'D10N;D12;D14;D16;D18;D21C;D21D;D35;D45;D55;H10N;H12;H14;H16;H18;H21C;H21D;H35;H45;H55;HDR;', '', 0, 0, 'PGP', 0, 5, 0, 0, NULL, 7, 0), +(40, NULL, 1710198000, 0, 'bjlsdjvn', 'Brno', 'ob', 'Z', 0, 128, '1', 'o-mikron.czechian.net/', 2, 1710025200, 1710111600, 0, 0, 0, 1, 'H35A;D35A;H35D;D35D;', 'fsdgdgh', 0, 0, 'MBM', 0, 5, 0, 0, NULL, 1, 1), +(41, NULL, 1707433200, 0, 'POKUS ABM', 'Žabiny', 'ob', 'Z', 0, 0, '1', '', 3, 1694124000, 1699657200, 1703977200, 0, 0, 1, 'D10N;D12;D14;D16;D18;D21C;D21D;D35;D45;D55;H10N;H12;H14;H16;H18;H21C;H21D;H35;H45;H55;HDR;', '', 0, 0, 'ZBM', 0, 5, 0, 0, NULL, 5, 0), +(42, NULL, 1708815600, 0, 'pokus ABM 2', 'Brno', 'ob', 'Z', 0, 1, '1', '', 1, 1708729200, 0, 0, 0, 0, 1, 'D10N;D12;D14;D16;D18;D21C;D21D;D35;D45;D55;H10N;H12;H14;H16;H18;H21C;H21D;H35;H45;H55;HDR;', '', 0, 0, 'ABM', 0, 5, 1, 0, NULL, 5, 0), +(43, NULL, 1678402800, 0, 'ABM 3', '', 'ob', 'J', 0, 0, '1', '', 1, 1678402800, 0, 0, 0, 0, 1, 'D10N;D12;D14;D16;D18;D21C;D21D;D35;D45;D55;H10N;H12;H14;H16;H18;H21C;H21D;H35;H45;H55;HDR;', '', 0, 0, 'ABM', 0, 5, 0, 0, NULL, 4, 0), +(44, NULL, 1738364400, 0, 'Testovaci zavod pro dopravu', 'Misto', 'ob', 'Z', 0, 52, '1', '', 0, 0, 0, 0, 0, 0, 1, '', '', 0, 0, 'XYZ', 0, 4, 1, 0, NULL, 8, 0), +(45, NULL, 1720994400, 0, 'ěščřžýáíé', 'BřBr = ěščřžýáíé', 'ob', 'J', 0, 0, '1', '', 0, 0, 0, 0, 0, 0, 1, '', '', 0, 0, 'AZT', 0, 4, 1, 0, NULL, 1, 0), +(46, NULL, 1602712800, 0, 'Test', 'Brno', 'ob', 'Z', 0, 1, '1', '', 1, 1603058400, 0, 0, 0, 0, 1, '', '', 38, 0, 'YBV', 0, 2, 2, 1, NULL, 0, 0), +(47, NULL, 1615590000, 0, 'Pokus', 'XXX', 'ob', 'Z', 0, 1, '1', '', 2, 1607727600, 1610406000, 0, 0, 0, 1, 'D10N;D12C;D14C;D16C;D18C;D21C;D21D;D35C;D45C;D55C;H10N;H12C;H14C;H16C;H18C;H21C;H21D;H35C;H45C;H55C;HDR', '', 0, 0, 'kkk', 1, 2, 0, 0, NULL, 5, 0), +(48, NULL, 1658354400, 0, 'Letni test', 'Brno - Salingrad', 'jine', 'Z', 0, 17, '0', '', 2, 1658095200, 1658268000, 0, 0, 0, 1, 'D16A;D18A;D20A;D21A;D21E;H16A;H18A;H20A;H21A;H21E', '', 0, 0, 'FAK', 0, 2, 2, 2, NULL, 9, 0), +(49, NULL, 1675378800, 0, 'MČR Klasika', 'Dolní Lhota', 'ob', 'Z', 0, 1, '1', '', 2, 1674169200, 1674255600, 0, 0, 0, 1, 'H18D;H18N;H20B;H20C;H21E;H21A;D10N;D12;D14;D16;D18;D21C;D21D;D35;D45;D55;H10N;H12;H14;H16;H18;H21C;H21D;H35;H45;H55;HDR;D16A;D18A;D20A;D21A;D21E;H16A;H18A;H20A', '', 0, 0, 'GBM', 0, 2, 1, 2, NULL, 1, 0), +(50, NULL, 1699311600, 0, 'Kamenec pod Vtáčnikom Middle sobota', 'Kamenec pod Vtáčnikom', 'ob', 'Z', 0, 1, '1', 'is.orienteering.sk/competitions/1759', 3, 1696111200, 1696370400, 1698793200, 0, 0, 1, 'D10N;D12;D14;D16;D18;D21C;D21D;D35;D45;D55;H10N;H12;H14;H16;H18;H21C;H21D;H35;H45;H55;HDR', 'Slovenský rebríček jednotlivcov - E1 07.10.2023 Stredná trať 205\r\nSlovenský rebríček jednotlivcov - E2 08.10.2023 Stredná trať 212', 0, 0, 'SKS', 0, 2, 0, 0, NULL, 2, 0); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `tst_zavxus` +-- + +CREATE TABLE `tst_zavxus` ( + `id` int(10) UNSIGNED NOT NULL, + `id_user` smallint(5) UNSIGNED NOT NULL DEFAULT 0, + `id_zavod` smallint(5) UNSIGNED NOT NULL DEFAULT 0, + `kat` varchar(10) NOT NULL DEFAULT '', + `pozn` varchar(255) DEFAULT NULL, + `pozn_in` varchar(255) DEFAULT NULL, + `termin` tinyint(4) UNSIGNED NOT NULL DEFAULT 1, + `si_chip` int(9) UNSIGNED NOT NULL DEFAULT 0, + `transport` tinyint(1) DEFAULT NULL, + `sedadel` tinyint(1) DEFAULT NULL, + `ubytovani` tinyint(1) DEFAULT NULL, + `participated` tinyint(1) DEFAULT NULL, + `add_by_fin` tinyint(1) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_czech_ci COMMENT='tabulka prihlasek - clovek X zavod'; + +-- +-- Dumping data for table `tst_zavxus` +-- + +INSERT INTO `tst_zavxus` (`id`, `id_user`, `id_zavod`, `kat`, `pozn`, `pozn_in`, `termin`, `si_chip`, `transport`, `sedadel`, `ubytovani`, `participated`, `add_by_fin`) VALUES +(2, 1, 14, 'H19', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(3, 1, 15, 'H21', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(4, 2, 15, 'H21', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(5, 3, 15, 'H21', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(6, 4, 15, 'H21', 'postel', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(7, 5, 15, 'H20', '', 'jedu vlakem', 1, 0, NULL, NULL, NULL, NULL, NULL), +(8, 6, 15, 'H18', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(9, 7, 15, 'D16', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(10, 8, 15, 'D14', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(11, 9, 15, 'D21', 'stan', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(12, 1, 21, 'H21A', 'ubytovani na louce', '', 2, 0, NULL, NULL, NULL, NULL, NULL), +(13, 1, 23, 'H', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(14, 1, 22, 'H21A', 'louka', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(16, 15, 18, 'H10', 'chci F1', 'a teba', 1, 0, NULL, NULL, NULL, NULL, NULL), +(19, 11, 16, 'H21A', 'ubytování v lese', '', 1, 0, 1, NULL, NULL, NULL, NULL), +(20, 11, 19, 'H21A', '', '', 1, 0, 0, NULL, NULL, NULL, NULL), +(21, 22, 29, 'H21B', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(22, 14, 25, 'D21', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(27, 29, 26, 'H21', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(28, 18, 26, 'H21', 'Pojedu', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(29, 28, 26, 'D21', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(30, 13, 23, 'D21', 'tohle je jen testovací přihláška:)', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(31, 27, 22, 'HDR', 'TESTING', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(34, 3, 10, 'H105', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(35, 3, 36, 'H21', 'Co nejdřív', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(41, 8, 38, 'H21D', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(40, 5, 38, 'D35', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(39, 32, 38, 'H50', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(42, 11, 38, 'D21C', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(43, 14, 38, 'H12', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(44, 2, 38, 'H21C', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(45, 1, 35, 'H21', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(46, 1, 20, 'H21', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(47, 1, 38, 'H21', '', '', 3, 0, NULL, NULL, NULL, NULL, NULL), +(48, 4, 40, 'D35A', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(49, 4, 41, 'H21C', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(50, 5, 41, 'H21C', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(51, 6, 41, 'H21C', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(52, 7, 41, 'D18', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(53, 8, 41, 'D16', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(54, 4, 42, 'H21C', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(55, 5, 42, 'H21D', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(56, 6, 42, 'H18', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(57, 7, 42, 'D21C', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(58, 8, 42, 'D16', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(103, 2, 45, 'H21B', '', '', 1, 0, 1, NULL, 0, NULL, NULL), +(60, 5, 43, 'H21D', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(61, 6, 43, 'H21C', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(62, 7, 43, 'D18', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(63, 8, 43, 'D16', '', '', 1, 0, NULL, NULL, NULL, NULL, NULL), +(64, 8, 16, 'h', '', '', 1, 0, 0, NULL, NULL, NULL, NULL), +(65, 33, 16, 'D21', '', '', 1, 0, 1, NULL, NULL, NULL, NULL), +(66, 16, 36, '12', '', '', 1, 0, 0, NULL, NULL, NULL, NULL), +(67, 16, 37, '12', '', '', 1, 0, 0, NULL, NULL, NULL, NULL), +(68, 2, 44, '123', '', '', 1, 0, 1, NULL, NULL, NULL, NULL), +(69, 21, 44, '12', '', '', 1, 0, 1, NULL, NULL, NULL, NULL), +(70, 26, 44, '122', '', '', 1, 0, 1, NULL, NULL, NULL, NULL), +(71, 16, 44, '321', '', '', 1, 0, 1, NULL, NULL, NULL, NULL), +(72, 27, 44, '1', '', '', 1, 0, 0, NULL, NULL, NULL, NULL), +(73, 34, 44, '999', '', '', 1, 0, 1, NULL, NULL, NULL, NULL), +(74, 25, 44, '45', '', '', 1, 0, 0, NULL, NULL, NULL, NULL), +(75, 14, 44, '2', '', '', 1, 0, 0, NULL, NULL, NULL, NULL), +(76, 1, 32, 'H19', '', '', 1, 0, 0, NULL, NULL, NULL, NULL), +(77, 1, 25, 'H21C', '', '', 1, 0, 0, NULL, NULL, NULL, NULL), +(78, 1, 19, 'H35', '', '', 1, 0, 0, NULL, NULL, NULL, NULL), +(79, 1, 18, 'H35', '', '', 1, 0, 0, NULL, NULL, NULL, NULL), +(80, 17, 37, '10', '', '', 1, 0, 0, NULL, NULL, NULL, NULL), +(81, 2, 37, 'H21', '', '', 1, 0, 0, NULL, NULL, NULL, NULL), +(82, 16, 16, 'H10', '', '', 1, 0, 1, NULL, NULL, NULL, NULL), +(83, 2, 16, 'D34', 'ěčřčžčýýíýéýéˇoö\'i\'u\'öïüÿ¨tëë¨q¨s¨d¨g¨h¨kj¨m¨bv¨xc¨xz¨zčďˇFˇgRěˇqˇWeťˇyúˇiKˇhˇfć', '', 1, 0, 1, NULL, NULL, NULL, NULL), +(84, 2, 19, 'D123', '\\\'\\\\\\\'adsfsad', '', 1, 0, 0, NULL, NULL, NULL, NULL), +(85, 4, 19, 'H21A', '', '', 1, 0, 0, NULL, NULL, NULL, NULL), +(100, 8, 7, 'H40', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(102, 8, 6, 'G11', '', '', 2, 0, 0, NULL, 0, NULL, NULL), +(104, 16, 4, 'D21Q', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(105, 17, 4, 'q12w', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(106, 32, 4, 'weq1', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(107, 37, 4, 'e221', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(108, 4, 29, 'D21B', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(109, 8, 29, 'H21B', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(110, 2, 27, 'a,b,c,d,a,', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(111, 28, 37, 'D12C', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(112, 4, 47, 'H55C', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(113, 5, 47, 'D35C', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(118, 6, 47, 'H35C', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(115, 7, 47, 'D18C', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(117, 8, 47, 'H18C', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(119, 11, 48, 'H21E', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(120, 34, 48, 'H21A', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(121, 27, 48, 'H21A', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(122, 2, 48, 'H16A', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(123, 8, 48, 'D21E', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(124, 15, 48, 'H21E', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(125, 26, 48, 'H21A', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(126, 28, 48, 'D21E', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(127, 29, 48, 'H21A', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(128, 8, 49, 'H21C', 'poznámka do přihlášky', 'poznámka interní', 1, 0, 1, NULL, 0, NULL, NULL), +(129, 6, 50, 'H45', 'tester 1', '', 3, 0, 0, NULL, 0, NULL, NULL), +(130, 4, 50, 'H45', '', '', 3, 0, 0, NULL, 0, NULL, NULL), +(131, 6, 13, 'D21C', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(132, 4, 11, 'H', '', '', 1, 0, 0, NULL, 0, NULL, NULL), +(133, 4, 13, 'H', '', '', 1, 0, 0, NULL, 0, NULL, NULL); + +-- +-- Indexes for dumped tables +-- + +-- +-- Indexes for table `tokens` +-- +ALTER TABLE `tokens` + ADD PRIMARY KEY (`device`); + +-- +-- Indexes for table `tst_accounts` +-- +ALTER TABLE `tst_accounts` + ADD PRIMARY KEY (`id`), + ADD UNIQUE KEY `login` (`login`), + ADD KEY `policy_mng` (`policy_mng`), + ADD KEY `id_users` (`id_users`); + +-- +-- Indexes for table `tst_categories_predef` +-- +ALTER TABLE `tst_categories_predef` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `tst_claim` +-- +ALTER TABLE `tst_claim` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `tst_finance` +-- +ALTER TABLE `tst_finance` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `tst_finance_types` +-- +ALTER TABLE `tst_finance_types` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `tst_modify_log` +-- +ALTER TABLE `tst_modify_log` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `tst_news` +-- +ALTER TABLE `tst_news` + ADD PRIMARY KEY (`id`), + ADD KEY `sort_datum` (`datum`,`id`); + +-- +-- Indexes for table `tst_payment_rules` +-- +ALTER TABLE `tst_payment_rules` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `tst_users` +-- +ALTER TABLE `tst_users` + ADD PRIMARY KEY (`id`), + ADD KEY `name2` (`sort_name`), + ADD KEY `chief_id` (`chief_id`); + +-- +-- Indexes for table `tst_xmailinfo` +-- +ALTER TABLE `tst_xmailinfo` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `tst_zavod` +-- +ALTER TABLE `tst_zavod` + ADD PRIMARY KEY (`id`); +ALTER TABLE `tst_zavod` ADD FULLTEXT KEY `misto` (`misto`); + +-- +-- Indexes for table `tst_zavxus` +-- +ALTER TABLE `tst_zavxus` + ADD PRIMARY KEY (`id`), + ADD KEY `id_termin` (`termin`,`id`), + ADD KEY `id_user` (`id_user`); + +-- +-- AUTO_INCREMENT for dumped tables +-- + +-- +-- AUTO_INCREMENT for table `tst_accounts` +-- +ALTER TABLE `tst_accounts` + MODIFY `id` smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=31; + +-- +-- AUTO_INCREMENT for table `tst_categories_predef` +-- +ALTER TABLE `tst_categories_predef` + MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7; + +-- +-- AUTO_INCREMENT for table `tst_claim` +-- +ALTER TABLE `tst_claim` + MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5; + +-- +-- AUTO_INCREMENT for table `tst_finance` +-- +ALTER TABLE `tst_finance` + MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=178; + +-- +-- AUTO_INCREMENT for table `tst_finance_types` +-- +ALTER TABLE `tst_finance_types` + MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=14; + +-- +-- AUTO_INCREMENT for table `tst_modify_log` +-- +ALTER TABLE `tst_modify_log` + MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=464; + +-- +-- AUTO_INCREMENT for table `tst_news` +-- +ALTER TABLE `tst_news` + MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=138; + +-- +-- AUTO_INCREMENT for table `tst_payment_rules` +-- +ALTER TABLE `tst_payment_rules` + MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT for table `tst_users` +-- +ALTER TABLE `tst_users` + MODIFY `id` smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=39; + +-- +-- AUTO_INCREMENT for table `tst_xmailinfo` +-- +ALTER TABLE `tst_xmailinfo` + MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7; + +-- +-- AUTO_INCREMENT for table `tst_zavod` +-- +ALTER TABLE `tst_zavod` + MODIFY `id` smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=51; + +-- +-- AUTO_INCREMENT for table `tst_zavxus` +-- +ALTER TABLE `tst_zavxus` + MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=135; +COMMIT; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/docker/db_init/db_schema_version.txt b/docker/db_init/db_schema_version.txt new file mode 100644 index 0000000..39adda3 --- /dev/null +++ b/docker/db_init/db_schema_version.txt @@ -0,0 +1 @@ +656 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..4890fb1 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,72 @@ +{ + "name": "members-playwright-tests", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "members-playwright-tests", + "devDependencies": { + "@playwright/test": "1.59.1" + } + }, + "node_modules/@playwright/test": { + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", + "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", + "dev": true, + "dependencies": { + "playwright": "1.59.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/playwright": { + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", + "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", + "dev": true, + "dependencies": { + "playwright-core": "1.59.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", + "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", + "dev": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..04feeb1 --- /dev/null +++ b/package.json @@ -0,0 +1,13 @@ +{ + "name": "members-playwright-tests", + "private": true, + "scripts": { + "test:e2e": "playwright test", + "test:e2e:headed": "playwright test --headed", + "test:e2e:ui": "playwright test --ui", + "playwright:install": "playwright install chromium" + }, + "devDependencies": { + "@playwright/test": "1.59.1" + } +} diff --git a/playwright.config.js b/playwright.config.js new file mode 100644 index 0000000..32c75d2 --- /dev/null +++ b/playwright.config.js @@ -0,0 +1,30 @@ +const { defineConfig, devices } = require('@playwright/test'); + +const rawBaseURL = process.env.PLAYWRIGHT_BASE_URL || 'http://web:10100/members/'; +const baseURL = rawBaseURL.endsWith('/') ? rawBaseURL : `${rawBaseURL}/`; + +module.exports = defineConfig({ + testDir: './tests/playwright', + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 2 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['list'], + ['html', { open: 'never' }], + ], + use: { + baseURL, + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + }, + projects: [ + { + name: 'chromium', + use: { + ...devices['Desktop Chrome'], + }, + }, + ], +}); diff --git a/tests/playwright/README.md b/tests/playwright/README.md new file mode 100644 index 0000000..c6be617 --- /dev/null +++ b/tests/playwright/README.md @@ -0,0 +1,53 @@ +# Playwright tests + +This directory contains browser end-to-end tests for local development, CI, and debugging. +These files are not part of the PHP runtime and must not be deployed to the productive web root. + +## Local usage + +1. Start the development stack so the application is reachable, for example on `http://web:10100/members`. +2. Install test dependencies: + ```bash + npm install + ``` +3. Run the login smoke test: + ```bash + npm run test:e2e -- tests/playwright/login.spec.js + ``` +4. Run the reusable multi-user workflow: + ```bash + npm run test:e2e -- tests/playwright/workflows/multiuser-race-flow.spec.js + ``` +5. Run the ORIS local race workflow: + ```bash + npm run test:e2e -- tests/playwright/workflows/oris-local-race-flow.spec.js + ``` +6. Run the ORIS public multistage race workflow: + ```bash + npm run test:e2e -- tests/playwright/workflows/oris-public-multistage-race-flow.spec.js + ``` +7. Write new specs using shared constants instead of hardcoded usernames: + ```js + const { TEST_USERS } = require('./constants/users'); + const user = TEST_USERS.member; + ``` + +## Configuration + +- `PLAYWRIGHT_BASE_URL` overrides the application URL. Default: `http://web:10100/members/` +- The reusable login helper lives in `tests/playwright/components/login.js` +- Shared auth constants live in `tests/playwright/constants/auth.js` + - `DEFAULT_PASSWORD` = `54321` +- Shared seeded test users live in `tests/playwright/constants/users.js` + - `TEST_USERS.administrator` = `admin` + - `TEST_USERS.registrar` = `tnov_1` + - `TEST_USERS.manager` = `tnov_2` + - `TEST_USERS.clubAdmin` = `tnov_3` + - `TEST_USERS.smallManager` = `tnov_4` + - `TEST_USERS.member` = `tnov_5` + - `TEST_USERS.accountant` = `tnov_6` +- Shared reusable member fixtures keyed by registration id live in `tests/playwright/constants/members.js` +- Shared group IDs, route maps, and per-role login expectations live in `tests/playwright/constants/routes.js` +- Prefer importing `TEST_USERS` in specs instead of hardcoding seeded usernames +- Reusable workflow helpers live under `tests/playwright/helpers/` +- Shared multi-step workflow specs can live under `tests/playwright/workflows/` diff --git a/tests/playwright/components/login.js b/tests/playwright/components/login.js new file mode 100644 index 0000000..2bf9693 --- /dev/null +++ b/tests/playwright/components/login.js @@ -0,0 +1,22 @@ +const { expect } = require('@playwright/test'); +const { DEFAULT_PASSWORD } = require('../constants/auth'); + +async function login(page, user, password = DEFAULT_PASSWORD) { + await page.goto('./'); + + const loginInput = page.locator('input[name^="mbr_l_"]'); + const passwordInput = page.locator('input[name^="mbr_p_"]'); + const submitButton = page.locator('input[type="submit"][value="Přihlásit"]'); + + await expect(loginInput).toBeVisible(); + await expect(passwordInput).toBeVisible(); + + await loginInput.fill(user); + await passwordInput.fill(password); + await submitButton.click(); +} + +module.exports = { + DEFAULT_PASSWORD, + login, +}; diff --git a/tests/playwright/constants/auth.js b/tests/playwright/constants/auth.js new file mode 100644 index 0000000..d5a1a22 --- /dev/null +++ b/tests/playwright/constants/auth.js @@ -0,0 +1,5 @@ +const DEFAULT_PASSWORD = '54321'; + +module.exports = { + DEFAULT_PASSWORD, +}; diff --git a/tests/playwright/constants/members.js b/tests/playwright/constants/members.js new file mode 100644 index 0000000..10319d9 --- /dev/null +++ b/tests/playwright/constants/members.js @@ -0,0 +1,172 @@ +const TEST_MEMBER_FIXTURES = { + '8511': { + reg: '8511', + surname: 'Drábek', + name: 'Jan', + birthDate: '18.2.1985', + address: 'Javorova 41', + city: 'Brno - Zidenice', + postalCode: '636 00', + phoneHome: '541302118', + phoneWork: '533640271', + phoneMobile: '724581936', + email: 'jan.drabek.8511@example.test', + chip: '49690', + gender: 'H', + licenceOb: 'C', + licenceMtbo: '-', + licenceLob: '-', + birthNumber: '', + nationality: 'CZ', + chiefId: '13', + chiefPay: '13', + financeType: '1', + }, + '8200': { + reg: '8200', + surname: 'Koča', + name: 'Jaroslav', + birthDate: '7.10.1982', + address: 'Lipova 83', + city: 'Brno', + postalCode: '638 00', + phoneHome: '545118204', + phoneWork: '532447190', + phoneMobile: '731864205', + email: 'jaroslav.koca.8200@example.test', + chip: '301217', + gender: 'H', + licenceOb: 'C', + licenceMtbo: '-', + licenceLob: '-', + birthNumber: '', + nationality: 'CZ', + chiefId: '13', + chiefPay: '', + financeType: '4', + }, + '8676': { + reg: '8676', + surname: 'Kočová', + name: 'Hana', + birthDate: '12.8.1986', + address: 'Habrova 12', + city: 'Vranov', + postalCode: '664 32', + phoneHome: '516221904', + phoneWork: '548390217', + phoneMobile: '739112684', + email: 'hana.kocova.8676@example.test', + chip: '52165', + gender: 'D', + licenceOb: 'A', + licenceMtbo: '-', + licenceLob: '-', + birthNumber: '', + nationality: 'CZ', + chiefId: '18', + chiefPay: '', + financeType: '1', + }, + '6700': { + reg: '6700', + surname: 'Coufal', + name: 'Svatos', + birthDate: '9.12.1967', + address: 'Sadova 5', + city: '', + postalCode: '', + phoneHome: '543226871', + phoneWork: '537441908', + phoneMobile: '722640519', + email: 'svatos.coufal.6700@example.test', + chip: '1387775', + gender: 'H', + licenceOb: 'C', + licenceMtbo: '-', + licenceLob: '-', + birthNumber: '6703281684', + nationality: 'CZ', + chiefId: '0', + chiefPay: '', + financeType: '9', + }, + '0953': { + reg: '0953', + surname: 'Coufalová', + name: 'Rea', + birthDate: '21.11.2009', + address: 'Na Louce 27', + city: '', + postalCode: '', + phoneHome: '544903118', + phoneWork: '531228640', + phoneMobile: '728305417', + email: 'rea.coufalova.0953@example.test', + chip: '123', + gender: 'D', + licenceOb: 'A', + licenceMtbo: '-', + licenceLob: '-', + birthNumber: '0953066978', + nationality: 'CZ', + chiefId: '0', + chiefPay: '', + financeType: '0', + }, + '7755': { + reg: '7755', + surname: 'Coufalová', + name: 'Martina', + birthDate: '1.2.1977', + address: 'Na Louce 27', + city: '', + postalCode: '', + phoneHome: '544954254', + phoneWork: '531222140', + phoneMobile: '722255417', + email: 'martcoufalova.0953@example.test', + chip: '123', + gender: 'D', + licenceOb: 'A', + licenceMtbo: '-', + licenceLob: '-', + birthNumber: '7711001258', + nationality: 'CZ', + chiefId: '0', + chiefPay: '', + financeType: '1', + }, + '9711': { + reg: '9711', + surname: 'Kelbl', + name: 'Vladimír', + birthDate: '14.4.1997', + address: '', + city: 'Brno', + postalCode: '612 00', + phoneHome: '', + phoneWork: '', + phoneMobile: '', + email: 'vladimir.kelbl.9711@example.test', + chip: '8660427', + gender: 'H', + licenceOb: 'A', + licenceMtbo: '-', + licenceLob: '-', + birthNumber: '', + nationality: 'CZ', + chiefId: '13', + chiefPay: '', + financeType: '1', + }, +}; + +function getTestMemberFixture(registrationId) { + return TEST_MEMBER_FIXTURES[String(registrationId)] || null; +} + +module.exports = { + TEST_MEMBER_FIXTURES, + getTestMemberFixture, +}; diff --git a/tests/playwright/constants/payment-rules.js b/tests/playwright/constants/payment-rules.js new file mode 100644 index 0000000..a99b0aa --- /dev/null +++ b/tests/playwright/constants/payment-rules.js @@ -0,0 +1,222 @@ +const POPULATED_PAYMENT_RULES = [ + { + sport: 'ob', + eventType: 'Z', + financeType: '7', + rankings: ['1', '4'], + paymentType: 'C', + amount: '99', + chargedItems: [], + }, + { + sport: 'ob', + eventType: 'Z', + financeType: '8', + rankings: ['1', '4'], + paymentType: 'C', + amount: '98', + chargedItems: [], + }, + { + sport: 'ob', + eventType: 'Z', + financeType: '6', + rankings: ['1', '4'], + paymentType: 'C', + amount: '97', + chargedItems: [], + }, + { + sport: 'ob', + eventType: 'Z', + financeType: '2', + rankings: ['1', '4'], + paymentType: 'C', + amount: '96', + chargedItems: [], + }, + { + sport: 'ob', + eventType: 'Z', + financeType: '1', + rankings: ['1', '4'], + paymentType: 'C', + amount: '95', + chargedItems: [], + }, + { + sport: 'ob', + eventType: 'Z', + financeTypes: [], + terms: ['2', '3', '4', '5'], + paymentType: 'R', + amount: '101', + chargedItems: ['1'], + }, + { + sports: [], + eventTypes: [], + financeType: '1', + paymentType: 'C', + amount: '93', + chargedItems: [], + }, + { + sports: [], + eventType: 'V', + financeType: '9', + paymentType: 'C', + amount: '91', + chargedItems: [], + }, + { + sports: [], + eventType: 'V', + financeType: '8', + paymentType: 'C', + amount: '90', + chargedItems: [], + }, + { + sports: [], + eventType: 'V', + financeType: '7', + paymentType: 'C', + amount: '89', + chargedItems: [], + }, + { + sports: [], + eventType: 'V', + financeType: '3', + paymentType: 'C', + amount: '88', + chargedItems: [], + }, + { + sport: 'ob', + eventType: 'Z', + financeType: '3', + rankings: ['1', '2', '4'], + paymentType: 'C', + amount: '87', + chargedItems: [], + }, + { + sports: [], + eventType: 'V', + financeType: '2', + paymentType: 'C', + amount: '86', + chargedItems: [], + }, + { + sports: [], + eventType: 'J', + financeTypes: [], + paymentType: 'C', + amount: '85', + chargedItems: [], + }, + { + sports: [], + eventType: 'N', + financeTypes: [], + paymentType: 'C', + amount: '84', + chargedItems: [], + }, + { + sports: [], + eventType: 'V', + financeType: '1', + paymentType: 'C', + amount: '83', + chargedItems: [], + }, + { + sport: 'ob', + eventType: 'Z', + financeType: '7', + rankings: ['1', '2', '4'], + paymentType: 'C', + amount: '82', + chargedItems: [], + }, + { + sport: 'mtbo', + eventTypes: [], + financeTypes: [], + paymentType: 'C', + amount: '81', + chargedItems: [], + }, + { + sport: 'lob', + eventTypes: [], + financeTypes: [], + paymentType: 'C', + amount: '80', + chargedItems: [], + }, + { + sport: 'jine', + eventTypes: [], + financeTypes: [], + paymentType: 'C', + amount: '79', + chargedItems: [], + }, + { + sports: [], + eventType: 'S', + financeTypes: [], + paymentType: 'C', + amount: '78', + chargedItems: [], + }, + { + financeType: '1', + eventType: 'T', + paymentType: 'P', + amount: '45', + chargedItems: '1', + }, + { + financeType: '1', + eventType: 'T', + paymentType: 'P', + amount: '100', + chargedItems: '2', + }, + { + sport: 'ob', + eventType: 'Z', + financeType: '2', + rankings: ['1', '2', '4'], + paymentType: 'C', + amount: '76', + chargedItems: [], + }, + { + sport: 'ob', + eventType: 'Z', + financeType: '1', + rankings: ['1', '2', '4'], + paymentType: 'C', + amount: '75', + chargedItems: [], + }, + { + sport: 'trail', + eventTypes: [], + financeTypes: [], + paymentType: 'C', + amount: '74', + chargedItems: [], + }, +]; + +module.exports = { + POPULATED_PAYMENT_RULES, +}; diff --git a/tests/playwright/constants/routes.js b/tests/playwright/constants/routes.js new file mode 100644 index 0000000..f276aae --- /dev/null +++ b/tests/playwright/constants/routes.js @@ -0,0 +1,127 @@ +const GROUP_IDS = { + user: 200, + admin: 300, + registrator: 400, + manager: 500, + smallManager: 600, + clubAdmin: 700, + finance: 800, +}; + +function indexRoute(id, subid = 0, label) { + const path = subid === 0 ? `index.php?id=${id}` : `index.php?id=${id}&subid=${subid}`; + return { id, subid, label, path }; +} + +function uniqueRoutes(routes) { + return [...new Map(routes.map((route) => [route.path, route])).values()]; +} + +const COMMON_ROUTES = { + updates: indexRoute(4, 0, 'Aktualitky'), +}; + +const ROUTE_GROUPS = { + member: [ + indexRoute(GROUP_IDS.user, 2, 'Přihlášky na závody'), + indexRoute(GROUP_IDS.user, 1, 'Nastavení přístupu'), + indexRoute(GROUP_IDS.user, 3, 'Nastavení zákl.údajů'), + ], + registrator: [ + indexRoute(GROUP_IDS.registrator, 1, 'Přihlášky na závody'), + indexRoute(GROUP_IDS.registrator, 4, 'Editace závodů'), + ], + manager: [ + indexRoute(GROUP_IDS.manager, 2, 'Přihlášky na závody'), + indexRoute(GROUP_IDS.manager, 1, 'Členská základna'), + indexRoute(GROUP_IDS.manager, 3, 'Přiřazení skupin členů'), + indexRoute(GROUP_IDS.manager, 4, 'Přehled m.trenérů'), + ], + smallManager: [ + indexRoute(GROUP_IDS.smallManager, 2, 'Přihlášky na závody'), + indexRoute(GROUP_IDS.smallManager, 1, 'Členská základna'), + ], + clubAdmin: [ + indexRoute(GROUP_IDS.clubAdmin, 1, 'Členská základna'), + ], + finance: [ + indexRoute(GROUP_IDS.finance, 1, 'Členská základna'), + indexRoute(GROUP_IDS.finance, 2, 'Přehled závodů'), + indexRoute(GROUP_IDS.finance, 4, 'Typy příspěvků'), + indexRoute(GROUP_IDS.finance, 5, 'Pravidla plateb'), + ], + admin: [ + indexRoute(GROUP_IDS.admin, 1, 'Servisní menu'), + indexRoute(GROUP_IDS.admin, 2, 'Přihlášky na závody'), + indexRoute(GROUP_IDS.admin, 5, 'Editace závodů'), + indexRoute(GROUP_IDS.admin, 4, 'Účty / Náhled'), + indexRoute(GROUP_IDS.admin, 6, 'Výpis změn'), + indexRoute(GROUP_IDS.admin, 7, 'Historie plateb'), + indexRoute(GROUP_IDS.admin, 8, 'Email info'), + ], +}; + +const LOGIN_EXPECTATIONS = { + administrator: { + landingRoute: ROUTE_GROUPS.admin[0], + accessibleRoutes: [ + ...ROUTE_GROUPS.registrator, + ...ROUTE_GROUPS.manager, + ...ROUTE_GROUPS.clubAdmin, + ...ROUTE_GROUPS.finance, + ...ROUTE_GROUPS.admin, + ], + }, + registrar: { + landingRoute: COMMON_ROUTES.updates, + accessibleRoutes: [ + ...ROUTE_GROUPS.member, + ...ROUTE_GROUPS.registrator, + ], + }, + manager: { + landingRoute: COMMON_ROUTES.updates, + accessibleRoutes: [ + ...ROUTE_GROUPS.member, + ...ROUTE_GROUPS.manager, + ], + }, + clubAdmin: { + landingRoute: COMMON_ROUTES.updates, + accessibleRoutes: [ + ...ROUTE_GROUPS.member, + ...ROUTE_GROUPS.registrator, + ...ROUTE_GROUPS.manager, + ...ROUTE_GROUPS.clubAdmin, + ...ROUTE_GROUPS.finance, + ], + }, + smallManager: { + landingRoute: COMMON_ROUTES.updates, + accessibleRoutes: [ + ...ROUTE_GROUPS.member, + ...ROUTE_GROUPS.smallManager, + ], + }, + member: { + landingRoute: COMMON_ROUTES.updates, + accessibleRoutes: ROUTE_GROUPS.member, + }, + accountant: { + landingRoute: COMMON_ROUTES.updates, + accessibleRoutes: [ + ...ROUTE_GROUPS.member, + ...ROUTE_GROUPS.finance, + ], + }, +}; + +const ALL_PROTECTED_ROUTES = uniqueRoutes(Object.values(ROUTE_GROUPS).flat()); + +module.exports = { + ALL_PROTECTED_ROUTES, + COMMON_ROUTES, + GROUP_IDS, + LOGIN_EXPECTATIONS, + ROUTE_GROUPS, +}; diff --git a/tests/playwright/constants/users.js b/tests/playwright/constants/users.js new file mode 100644 index 0000000..832701a --- /dev/null +++ b/tests/playwright/constants/users.js @@ -0,0 +1,13 @@ +const TEST_USERS = { + administrator: 'admin', + registrar: 'tnov_1', + manager: 'tnov_2', + clubAdmin: 'tnov_3', + smallManager: 'tnov_4', + member: 'tnov_5', + accountant: 'tnov_6', +}; + +module.exports = { + TEST_USERS, +}; diff --git a/tests/playwright/helpers/api.js b/tests/playwright/helpers/api.js new file mode 100644 index 0000000..5212567 --- /dev/null +++ b/tests/playwright/helpers/api.js @@ -0,0 +1,95 @@ +const { DEFAULT_PASSWORD } = require('../constants/auth'); + +async function postJson(request, path, payload) { + const response = await request.post(path, { + data: payload, + }); + + const text = await response.text(); + let json; + + try { + json = JSON.parse(text || '{}'); + } catch (error) { + throw new Error(`Invalid JSON response from ${path}: ${text.slice(0, 200)}`); + } + + return { response, json }; +} + +function ensureApiSuccess(response, json, label) { + if (!response.ok()) { + throw new Error(`${label} failed with HTTP ${response.status()}: ${json.message || 'Unknown error'}`); + } + + if (json.message && !json.token && !Array.isArray(json) && Object.keys(json).length === 1) { + throw new Error(`${label} returned an application error: ${json.message}`); + } + + return json; +} + +async function loginViaApi(request, username, password = DEFAULT_PASSWORD) { + const { response, json } = await postJson(request, './api/user.php', { + action: 'login', + username, + password, + }); + + ensureApiSuccess(response, json, `API login for ${username}`); + + if (!json.token) { + throw new Error(`API login for ${username} did not return a token`); + } + + return json.token; +} + +async function getCurrentUser(request, token) { + const { response, json } = await postJson(request, './api/user.php', { + action: 'user_data', + token, + }); + + return ensureApiSuccess(response, json, 'Load current user'); +} + +async function getManagingUsers(request, token) { + const { response, json } = await postJson(request, './api/user.php', { + action: 'managing_users', + token, + }); + + return ensureApiSuccess(response, json, 'Load managing users'); +} + +async function listRaces(request) { + const { response, json } = await postJson(request, './api/race.php', { + action: 'list', + }); + + return ensureApiSuccess(response, json, 'List races'); +} + +async function getRaceDetail(request, raceId) { + const { response, json } = await postJson(request, './api/race.php', { + action: 'detail', + race_id: raceId, + }); + + return ensureApiSuccess(response, json, `Load race detail ${raceId}`); +} + +async function findRaceByName(request, raceName) { + const races = await listRaces(request); + return races.find((race) => race.name === raceName) || null; +} + +module.exports = { + findRaceByName, + getCurrentUser, + getManagingUsers, + getRaceDetail, + listRaces, + loginViaApi, +}; diff --git a/tests/playwright/helpers/app-actions.js b/tests/playwright/helpers/app-actions.js new file mode 100644 index 0000000..55a1e5c --- /dev/null +++ b/tests/playwright/helpers/app-actions.js @@ -0,0 +1,562 @@ +const { findRaceByName } = require('./api'); +const { getTestMemberFixture } = require('../constants/members'); +const { + ensureHtmlSubmission, + postFormInSession, + readFormState, +} = require('./browser'); + +async function createPaymentRule(page, overrides = {}) { + await page.goto('./fin_payrule_edit.php'); + + const normalizeValues = (value, fallback = []) => { + const resolved = value === undefined ? fallback : value; + if (resolved === null) { + return []; + } + + return Array.isArray(resolved) + ? resolved.map((item) => String(item)) + : [String(resolved)]; + }; + + async function setCheckboxGroup(name, values) { + await page.locator(`input[name="${name}_all"]`).evaluateAll((elements) => { + elements.forEach((element) => { + element.checked = false; + }); + }); + + await page.locator(`input[name="${name}[]"]`).evaluateAll((elements, selectedValues) => { + const selected = new Set(selectedValues); + elements.forEach((element) => { + element.checked = selected.has(String(element.value)); + }); + }, values); + } + + const sports = normalizeValues(overrides.sports ?? overrides.sport, []); + const eventTypes = normalizeValues(overrides.eventTypes ?? overrides.eventType, []); + const terms = normalizeValues(overrides.terms ?? overrides.term, []); + const rankings = normalizeValues(overrides.rankings ?? overrides.ranking, []); + const financeTypes = normalizeValues(overrides.financeTypes ?? overrides.financeType, []); + const chargedItems = normalizeValues(overrides.chargedItems ?? overrides.chargedItem, ['1']); + + await setCheckboxGroup('typ', sports); + await setCheckboxGroup('typ0', eventTypes); + await setCheckboxGroup('termin', terms); + await setCheckboxGroup('zebricek', rankings); + await setCheckboxGroup('finance_type', financeTypes); + await setCheckboxGroup('uctovano', chargedItems); + + await page.locator(`input[name="payment_type"][value="${String(overrides.paymentType ?? 'P')}"]`).check(); + await page.locator('input[name="amount"]').fill(String(overrides.amount ?? '1')); + + if (overrides.fields) { + await page.evaluate((fields) => { + for (const [name, value] of Object.entries(fields)) { + const field = document.querySelector(`[name="${CSS.escape(name)}"]`); + if (field) { + field.value = String(value); + } + } + }, overrides.fields); + } + + await Promise.all([ + page.waitForURL(/index\.php\?id=800&subid=5/), + page.locator('input[type="submit"][value="Uložit"]').click(), + ]); + + return ensureHtmlSubmission({ + ok: true, + status: 200, + url: page.url(), + text: await page.content(), + }, 'Create payment rule'); +} + +async function ensurePaymentRules(page, paymentRules = []) { + for (const paymentRule of paymentRules) { + await createPaymentRule(page, paymentRule); + } +} + +function formatClubReg(reg) { + return String(reg || 0).padStart(4, '0'); +} + +function getUserIdFromEditPath(editPath) { + if (!editPath) { + return null; + } + + const match = editPath.match(/[?&]id=(\d+)/); + return match ? match[1] : null; +} + +function getUserIdFromFinancePath(path) { + if (!path) { + return null; + } + + const match = path.match(/[?&]user_id=(\d+)/); + return match ? match[1] : null; +} + +function getMemberDirectoryPath(role = 'clubAdmin') { + switch (role) { + case 'manager': + return './index.php?id=500&subid=1'; + case 'clubAdmin': + return './index.php?id=700&subid=1'; + default: + throw new Error(`Unsupported member-directory role: ${role}`); + } +} + +async function findClubMemberByReg(page, reg, role) { + await page.goto(getMemberDirectoryPath(role)); + + return page.evaluate((formattedReg) => { + const rows = Array.from(document.querySelectorAll('table.ctmc tbody tr')); + + for (const row of rows) { + const cells = row.querySelectorAll('td'); + if (cells.length < 5) { + continue; + } + + const regText = cells[3].textContent.trim(); + if (regText !== formattedReg) { + continue; + } + + const editLink = row.querySelector('a[href*="./user_edit.php"], a[href*="user_edit.php"]'); + return { + reg: regText, + editPath: editLink ? editLink.getAttribute('href') : null, + }; + } + + return null; + }, formatClubReg(reg)); +} + +async function getFinanceDirectoryEntryByReg(page, reg, options = {}) { + if (options.path) { + await page.goto(options.path); + } + + const entry = await page.evaluate((formattedReg) => { + const rows = Array.from(document.querySelectorAll('table.ctmc tr')); + + function extractOverviewPath(href) { + if (!href) { + return null; + } + + const popupMatch = href.match(/open_win(?:_ex)?\('([^']+)'/); + if (popupMatch) { + return popupMatch[1]; + } + + return href.startsWith('javascript:') ? null : href; + } + + function parseAmountValue(text) { + const normalized = String(text || '').replace(/\s+/g, ''); + const match = normalized.match(/-?\d+/); + + return { + text: normalized, + value: match ? Number(match[0]) : null, + }; + } + + for (const row of rows) { + const cells = Array.from(row.querySelectorAll('td')); + if (cells.length < 5) { + continue; + } + + if (cells[3].textContent.trim() !== formattedReg) { + continue; + } + + const amountSpan = row.querySelector('span.amount, span.amountred, span.amountgreen'); + const overviewLink = Array.from(row.querySelectorAll('a')).find((link) => ( + link.textContent.includes('Přehled') + )); + const overviewPath = extractOverviewPath(overviewLink ? overviewLink.getAttribute('href') : null); + const parsedAmount = parseAmountValue(amountSpan ? amountSpan.textContent : ''); + + let userId = null; + if (overviewPath) { + try { + const url = new URL(overviewPath, window.location.href); + userId = url.searchParams.get('user_id'); + } catch (error) { + userId = null; + } + } + + return { + reg: formattedReg, + amount: parsedAmount.value, + amountText: parsedAmount.text, + overviewPath, + userId, + }; + } + + return null; + }, formatClubReg(reg)); + + if (!entry) { + return null; + } + + return { + ...entry, + userId: entry.userId || getUserIdFromFinancePath(entry.overviewPath), + }; +} + +async function ensureClubMember(page, overrides = {}) { + const role = overrides.role || 'clubAdmin'; + const financePage = overrides.financePage; + const existingMember = await findClubMemberByReg(page, overrides.reg, role); + + if (existingMember) { + const existingUserId = getUserIdFromEditPath(existingMember.editPath); + + if (financePage && overrides.financeType !== undefined) { + await setMemberFinanceType(financePage, existingUserId, overrides.financeType); + } + + return { + created: false, + reg: existingMember.reg, + userId: existingUserId, + editPath: existingMember.editPath, + }; + } + + const form = await readFormState(page, 'form[action^="./user_new_exc.php"]'); + + const result = await postFormInSession(page, form.action, { + ...form.fields, + prijmeni: overrides.surname, + jmeno: overrides.name, + reg: overrides.reg || '0', + si: overrides.chip || '0', + datum: overrides.birthDate || '', + adresa: overrides.address || '', + mesto: overrides.city || '', + psc: overrides.postalCode || '', + email: overrides.email || '', + domu: overrides.phoneHome || '', + zam: overrides.phoneWork || '', + mobil: overrides.phoneMobile || '', + bank_account: overrides.bankAccount || '', + poh: overrides.gender || form.fields.poh, + lic: overrides.licenceOb || form.fields.lic, + lic_mtbo: overrides.licenceMtbo || form.fields.lic_mtbo, + lic_lob: overrides.licenceLob || form.fields.lic_lob, + narodnost: overrides.nationality || form.fields.narodnost, + rc: overrides.birthNumber || '', + }); + + ensureHtmlSubmission(result, 'Ensure club member'); + + const createdMember = await findClubMemberByReg(page, overrides.reg, role); + if (!createdMember) { + throw new Error(`Club member with reg ${formatClubReg(overrides.reg)} was not found after ensure`); + } + + const createdUserId = getUserIdFromEditPath(createdMember.editPath); + + if (financePage && overrides.financeType !== undefined) { + await setMemberFinanceType(financePage, createdUserId, overrides.financeType); + } + + return { + created: true, + reg: createdMember.reg, + userId: createdUserId, + editPath: createdMember.editPath, + }; +} + +async function ensureClubMembers(page, registrationIds, options = {}) { + const role = options.role || 'clubAdmin'; + const financePage = options.financePage; + const ensuredMembers = []; + + for (const registrationId of registrationIds) { + const fixture = getTestMemberFixture(registrationId); + + if (!fixture) { + throw new Error(`No test member fixture is defined for registration id ${registrationId}`); + } + + const member = await ensureClubMember(page, { + role, + financePage, + ...fixture, + }); + + ensuredMembers.push({ + ...member, + fixture, + }); + } + + return ensuredMembers; +} + +async function setMemberFinanceType(page, userId, financeType) { + if (!userId) { + throw new Error('Cannot set member finance type without a user id'); + } + + const result = await postFormInSession(page, `./user_finance_type_exc.php?user_id=${userId}`, { + type: String(financeType ?? 0), + }); + + return ensureHtmlSubmission(result, `Set finance type for user ${userId}`); +} + +async function submitMemberFinanceEntry(page, userId, type, overrides = {}) { + if (!userId) { + throw new Error('Cannot submit member finance entry without a user id'); + } + + if (!['in', 'out'].includes(type)) { + throw new Error(`Unsupported finance entry type: ${type}`); + } + + await page.goto(`./user_finance_view.php?user_id=${userId}`); + + const form = await readFormState(page, `form.form[action^="?payment=${type}&user_id="]`); + const result = await postFormInSession(page, form.action, { + ...form.fields, + amount: String(overrides.amount ?? ''), + note: overrides.note ?? form.fields.note ?? '', + datum: overrides.date ?? form.fields.datum, + id_zavod: overrides.raceId ?? form.fields.id_zavod, + ...overrides.fields, + }); + + const label = type === 'out' ? 'Submit member payment' : 'Submit member deposit'; + return ensureHtmlSubmission(result, `${label} for user ${userId}`); +} + +async function submitFinanceTransferByReg(page, targetReg, overrides = {}) { + const sourcePath = overrides.path || './index.php?id=200&subid=10'; + await page.goto(sourcePath); + + const targetUserId = await page.evaluate((formattedReg) => { + const select = document.querySelector('form.form[action*="payment=both"] select[name="id_to"]'); + if (!select) { + return null; + } + + for (const option of Array.from(select.options)) { + if (option.textContent.includes(formattedReg)) { + return option.value; + } + } + + return null; + }, formatClubReg(targetReg)); + + if (!targetUserId || targetUserId === '-1') { + throw new Error(`Could not find member transfer recipient with reg ${formatClubReg(targetReg)}`); + } + + const form = await readFormState(page, 'form.form[action*="payment=both"]'); + const result = await postFormInSession(page, form.action, { + ...form.fields, + id_to: String(targetUserId), + amount: String(overrides.amount ?? ''), + note: overrides.note ?? form.fields.note ?? '', + ...overrides.fields, + }); + + return ensureHtmlSubmission(result, `Submit member transfer to reg ${formatClubReg(targetReg)}`); +} + +async function submitMemberTransferByReg(page, targetReg, overrides = {}) { + return submitFinanceTransferByReg(page, targetReg, { + path: './index.php?id=200&subid=10', + ...overrides, + }); +} + +async function stornoFirstMemberFinanceEntry(page, userId, overrides = {}) { + if (!userId) { + throw new Error('Cannot storno member finance entry without a user id'); + } + + await page.goto(`./user_finance_view.php?user_id=${userId}`); + + const stornoPath = await page.locator('a', { hasText: 'Storno' }).first().getAttribute('href'); + + if (!stornoPath) { + throw new Error(`No storno link was found for user ${userId}`); + } + + const match = stornoPath.match(/[?&]trn_id=(\d+)/); + if (!match) { + throw new Error(`No transaction id was found in storno link for user ${userId}`); + } + + const result = await postFormInSession(page, `./user_finance_view.php?payment=storno&trn_id=${match[1]}&user_id=${userId}`, { + storno_note: overrides.note ?? '', + ...overrides.fields, + }); + + return ensureHtmlSubmission(result, `Storno first member finance entry for user ${userId}`); +} + +async function updateFirstMemberFinanceEntry(page, userId, overrides = {}) { + if (!userId) { + throw new Error('Cannot update member finance entry without a user id'); + } + + await page.goto(`./user_finance_view.php?user_id=${userId}`); + + const updatePath = await page.locator('a', { hasText: 'Změnit' }).first().getAttribute('href'); + + if (!updatePath) { + throw new Error(`No update link was found for user ${userId}`); + } + + const match = updatePath.match(/[?&]trn_id=(\d+)/); + if (!match) { + throw new Error(`No transaction id was found in update link for user ${userId}`); + } + + const result = await postFormInSession(page, `./user_finance_view.php?payment=update&user_id=${userId}&trn_id=${match[1]}`, { + amount: String(overrides.amount ?? ''), + note: overrides.note ?? '', + id_zavod: overrides.raceId ?? 'null', + ...overrides.fields, + }); + + return ensureHtmlSubmission(result, `Update first member finance entry for user ${userId}`); +} + +async function findRaceUserIdByReg(page, raceId, options = {}) { + const groupId = options.groupId || 500; + + await page.goto(`./race_regs_1.php?gr_id=${groupId}&id=${raceId}&show_ed=1`); + + return page.evaluate((formattedReg) => { + const select = document.querySelector('select[name="user_id"]'); + if (!select) { + return null; + } + + for (const option of Array.from(select.options)) { + if (option.textContent.includes(`[${formattedReg}]`)) { + return option.value; + } + } + + return null; + }, formatClubReg(options.reg)); +} + +async function createRace(page, request, overrides = {}) { + await page.goto('./race_new.php?type=0'); + + const result = await postFormInSession(page, './race_new_exc.php?rtype=0', { + ext_id: '', + datum: overrides.date, + nazev: overrides.name, + misto: overrides.place || 'Brno', + oddil: overrides.club || 'TST', + typ0: overrides.eventType || 'Z', + typ: overrides.sport || 'ob', + ranking: overrides.ranking || '1', + transport: overrides.transport || '0', + accommodation: overrides.accommodation || '0', + kapacita: overrides.capacity || '20', + odkaz: overrides.url || '', + etap: '1', + poznamka: overrides.note || '', + prihlasky1: overrides.entryDate1, + prihlasky2: overrides.entryDate2 || '', + prihlasky3: '', + prihlasky4: '', + prihlasky5: '', + kategorie: overrides.categories || 'H21;D21', + ...overrides.fields, + }); + + ensureHtmlSubmission(result, 'Create race'); + + const race = await findRaceByName(request, overrides.name); + if (!race) { + throw new Error(`Created race "${overrides.name}" was not found in API list`); + } + + return { + ...race, + id: race.race_id, + }; +} + +async function updateRace(page, raceId, overrides = {}) { + await page.goto(`./race_edit.php?id=${raceId}`); + + const form = await readFormState(page, 'form[name="form2"]'); + const result = await postFormInSession(page, form.action, { + ...form.fields, + ...overrides, + }); + + return ensureHtmlSubmission(result, `Update race ${raceId}`); +} + +async function submitMemberRaceRegistration(page, fields) { + const result = await postFormInSession(page, './us_race_regon_exc.php', fields); + return ensureHtmlSubmission(result, 'Submit member race registration'); +} + +async function submitManagedRaceRegistration(page, raceId, fields) { + const groupId = fields.groupId || 600; + const postFields = { ...fields }; + delete postFields.groupId; + + const result = await postFormInSession( + page, + `./race_regs_1_exc.php?gr_id=${groupId}&id=${raceId}&show_ed=1`, + postFields + ); + + return ensureHtmlSubmission(result, 'Submit small-manager race registration'); +} + +module.exports = { + ensureClubMember, + ensureClubMembers, + findRaceUserIdByReg, + createPaymentRule, + ensurePaymentRules, + createRace, + formatClubReg, + getFinanceDirectoryEntryByReg, + setMemberFinanceType, + stornoFirstMemberFinanceEntry, + updateFirstMemberFinanceEntry, + submitFinanceTransferByReg, + submitMemberFinanceEntry, + submitMemberTransferByReg, + submitManagedRaceRegistration, + submitMemberRaceRegistration, + updateRace, +}; diff --git a/tests/playwright/helpers/browser.js b/tests/playwright/helpers/browser.js new file mode 100644 index 0000000..3f3183e --- /dev/null +++ b/tests/playwright/helpers/browser.js @@ -0,0 +1,134 @@ +const { TEST_USERS } = require('../constants/users'); +const { login } = require('../components/login'); + +async function loginAs(page, role) { + const user = TEST_USERS[role]; + + if (!user) { + throw new Error(`Unknown Playwright test role: ${role}`); + } + + await login(page, user); +} + +async function postFormInSession(page, action, fields = {}) { + return page.evaluate(async ({ action, fields }) => { + const params = new URLSearchParams(); + + for (const [key, rawValue] of Object.entries(fields)) { + if (rawValue === undefined || rawValue === null) { + continue; + } + + if (Array.isArray(rawValue)) { + for (const item of rawValue) { + if (item !== undefined && item !== null) { + params.append(key, String(item)); + } + } + continue; + } + + params.append(key, String(rawValue)); + } + + const response = await fetch(new URL(action, window.location.href).toString(), { + method: 'POST', + credentials: 'same-origin', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', + }, + body: params.toString(), + }); + + return { + ok: response.ok, + status: response.status, + url: response.url, + text: await response.text(), + }; + }, { action, fields }); +} + +async function readFormState(page, selector = 'form') { + const form = page.locator(selector); + + return form.evaluate((node) => { + const fields = {}; + + function setValue(name, value) { + if (Object.prototype.hasOwnProperty.call(fields, name)) { + if (Array.isArray(fields[name])) { + fields[name].push(value); + } else { + fields[name] = [fields[name], value]; + } + return; + } + + fields[name] = value; + } + + for (const element of Array.from(node.elements)) { + if (!element.name || element.disabled) { + continue; + } + + if (['submit', 'button', 'reset', 'file'].includes(element.type)) { + continue; + } + + if ((element.type === 'checkbox' || element.type === 'radio') && !element.checked) { + continue; + } + + if (element.tagName === 'SELECT' && element.multiple) { + for (const option of Array.from(element.selectedOptions)) { + setValue(element.name, option.value); + } + continue; + } + + setValue(element.name, element.value); + } + + return { + action: node.action, + method: node.method || 'GET', + fields, + }; + }); +} + +async function firstCheckedValue(page, selector) { + return page.locator(selector).first().getAttribute('value'); +} + +async function openPopup(page, action) { + const popupPromise = page.waitForEvent('popup'); + await action(); + const popup = await popupPromise; + await popup.waitForLoadState('domcontentloaded'); + return popup; +} + +function ensureHtmlSubmission(result, label) { + if (!result.ok) { + throw new Error(`${label} failed with HTTP ${result.status}`); + } + + if (/Nepodařilo se|Chyba při provádění dotazu|Fatal error|Warning:/i.test(result.text)) { + throw new Error(`${label} returned an application error`); + } + + return result; +} + +module.exports = { + ensureHtmlSubmission, + firstCheckedValue, + loginAs, + openPopup, + postFormInSession, + readFormState, +}; diff --git a/tests/playwright/helpers/oris-race-workflow.js b/tests/playwright/helpers/oris-race-workflow.js new file mode 100644 index 0000000..26a5a93 --- /dev/null +++ b/tests/playwright/helpers/oris-race-workflow.js @@ -0,0 +1,277 @@ +const { expect } = require('@playwright/test'); +const { + ensureHtmlSubmission, + openPopup, + postFormInSession, +} = require('./browser'); +const { + formatClubReg, +} = require('./app-actions'); + +async function openOrisRaceImportPopup(page, orisId) { + await page.goto('./index.php?id=400&subid=4'); + + const extIdInput = page.locator('#extID'); + await extIdInput.click(); + await extIdInput.fill(''); + await page.keyboard.type(String(orisId)); + + return openPopup(page, async () => { + await page.locator('#loadRaceByIdButton').click(); + }); +} + +async function readOrisRaceSummary(popup) { + await expect(popup.locator('input[name="ext_id"]')).toBeVisible(); + + return popup.evaluate(() => { + const inputValue = (name) => { + const node = document.querySelector(`input[name="${name}"]`); + return node ? node.value.trim() : ''; + }; + + return { + extId: inputValue('ext_id'), + date: inputValue('datum'), + name: inputValue('nazev'), + place: inputValue('misto'), + club: inputValue('oddil'), + alreadyExists: document.body.textContent.includes('ID již použito'), + }; + }); +} + +async function findRaceInTableBySummary(page, summary, options = {}) { + if (options.path) { + await page.goto(options.path); + } + + return page.evaluate((raceSummary) => { + const normalize = (value) => String(value || '').replace(/\s+/g, ' ').trim(); + const requiredParts = [ + raceSummary.name, + raceSummary.place, + raceSummary.club, + ].map(normalize).filter(Boolean); + const requiredExtId = normalize(raceSummary.extId); + + function extractPath(href, pattern) { + if (!href) { + return null; + } + + const match = href.match(pattern); + return match ? match[1] : null; + } + + for (const row of Array.from(document.querySelectorAll('tr'))) { + if (!row.classList.contains('r1') && !row.classList.contains('r2') && !row.classList.contains('highlight')) { + continue; + } + + const cells = row.querySelectorAll('td'); + if (cells.length < 4) { + continue; + } + + const rowText = normalize(row.textContent); + const hrefs = Array.from(row.querySelectorAll('a')) + .map((link) => link.getAttribute('href') || '') + .filter(Boolean); + + if (!requiredParts.every((part) => rowText.includes(part))) { + continue; + } + + if (requiredExtId && !hrefs.some((href) => href.includes(`id=${requiredExtId}`))) { + continue; + } + + const editPath = hrefs + .map((href) => extractPath(href, /(?:open_win\(')?(\.\/race_edit\.php\?id=\d+)/)) + .find(Boolean) || null; + const regsAllPath = hrefs + .map((href) => extractPath(href, /(?:open_win\(')?(\.\/race_regs_all\.php\?[^']*id=\d+)/)) + .find(Boolean) || null; + const financePath = hrefs + .map((href) => extractPath(href, /(?:open_win\(')?(\.\/race_finance_view\.php\?race_id=\d+)/)) + .find(Boolean) || null; + + const raceIdMatch = (editPath || regsAllPath || financePath || '').match(/(?:id|race_id)=(\d+)/); + + return { + raceId: raceIdMatch ? raceIdMatch[1] : null, + editPath, + regsAllPath, + financePath, + rowText, + }; + } + + return null; + }, summary); +} + +async function ensureOrisRace(page, orisId) { + const popup = await openOrisRaceImportPopup(page, orisId); + const summary = await readOrisRaceSummary(popup); + + if (!summary.date || !summary.name || !summary.place || !summary.club) { + throw new Error(`ORIS race ${orisId} did not load all summary fields`); + } + + if (summary.alreadyExists) { + const reloadPromise = page.waitForNavigation({ + url: /index\.php\?id=400&subid=4(?:&.*)?$/, + waitUntil: 'load', + timeout: 1000, + }).catch(() => null); + await popup.close(); + await reloadPromise; + } else { + await Promise.all([ + page.waitForNavigation({ + url: /index\.php\?id=400&subid=4(?:&.*)?$/, + waitUntil: 'load', + }), + popup.waitForEvent('close'), + popup.locator('input[type="submit"][value="Vytvořit závod"]').click(), + ]); + } + + const raceRow = await findRaceInTableBySummary(page, summary, { + path: './index.php?id=400&subid=4&fC=1', + }); + + if (!raceRow || !raceRow.raceId) { + throw new Error(`Could not find local race row for ORIS race ${orisId}`); + } + + return { + ...summary, + id: raceRow.raceId, + created: !summary.alreadyExists, + }; +} + +async function getRaceRegistrationRow(page, reg, options = {}) { + if (options.path) { + await page.goto(options.path); + } + + return page.evaluate((formattedReg) => { + const rows = Array.from(document.querySelectorAll('tr')); + + function getInputValue(row, prefix) { + const input = row.querySelector(`input[name^="${prefix}["]`); + return input ? input.value.trim() : null; + } + + function getCheckboxValue(row, prefix) { + const input = row.querySelector(`input[type="checkbox"][name^="${prefix}["]`); + return input ? input.checked : null; + } + + for (const row of rows) { + const cells = Array.from(row.querySelectorAll('td')); + if (cells.length < 6) { + continue; + } + + if (cells[1].textContent.trim() !== formattedReg) { + continue; + } + + const categoryInput = row.querySelector('input[name^="kateg["]'); + const userIdMatch = categoryInput ? categoryInput.name.match(/\[(\d+)\]/) : null; + + return { + reg: formattedReg, + userId: userIdMatch ? userIdMatch[1] : null, + category: getInputValue(row, 'kateg'), + transport: getCheckboxValue(row, 'transport'), + accommodation: getCheckboxValue(row, 'ubytovani'), + term: getInputValue(row, 'term'), + }; + } + + return null; + }, formatClubReg(reg)); +} + +async function ensureRaceParticipants(page, raceId, participants, options = {}) { + const groupId = options.groupId || 400; + const registrationPath = `./race_regs_all.php?gr_id=${groupId}&id=${raceId}`; + + await page.goto(registrationPath); + + const postFields = {}; + + for (const [reg, participant] of Object.entries(participants)) { + const row = await getRaceRegistrationRow(page, reg); + + if (!row || !row.userId) { + throw new Error(`Could not find race registration row for reg ${formatClubReg(reg)} on race ${raceId}`); + } + + postFields[`kateg[${row.userId}]`] = String(participant.kateg); + postFields[`pozn[${row.userId}]`] = participant.note || ''; + postFields[`pozn2[${row.userId}]`] = participant.noteInternal || ''; + + if (participant.transport) { + postFields[`transport[${row.userId}]`] = '1'; + } + + if (participant.ubytovani) { + postFields[`ubytovani[${row.userId}]`] = '1'; + } + + const effectiveTerm = participant.term ?? row.term; + if (effectiveTerm !== undefined && effectiveTerm !== null) { + postFields[`term[${row.userId}]`] = String(effectiveTerm); + } + } + + const result = await postFormInSession( + page, + `./race_regs_all_exc.php?gr_id=${groupId}&id=${raceId}`, + postFields + ); + + ensureHtmlSubmission(result, `Ensure race participants for race ${raceId}`); + + const verifiedParticipants = {}; + + for (const [reg, participant] of Object.entries(participants)) { + const row = await getRaceRegistrationRow(page, reg, { + path: reg === Object.keys(participants)[0] ? registrationPath : undefined, + }); + + if (!row) { + throw new Error(`Could not reload race registration row for reg ${formatClubReg(reg)} on race ${raceId}`); + } + + expect(row.category).toBe(String(participant.kateg)); + + if (participant.transport !== undefined) { + expect(Boolean(row.transport)).toBe(Boolean(participant.transport)); + } + + if (participant.ubytovani !== undefined) { + expect(Boolean(row.accommodation)).toBe(Boolean(participant.ubytovani)); + } + + if (participant.term !== undefined && row.term !== null) { + expect(row.term).toBe(String(participant.term)); + } + + verifiedParticipants[reg] = row; + } + + return verifiedParticipants; +} + +module.exports = { + ensureOrisRace, + ensureRaceParticipants, +}; diff --git a/tests/playwright/helpers/race-finance.js b/tests/playwright/helpers/race-finance.js new file mode 100644 index 0000000..98eea5f --- /dev/null +++ b/tests/playwright/helpers/race-finance.js @@ -0,0 +1,73 @@ +const { expect } = require('@playwright/test'); +const { + openPopup, +} = require('./browser'); + +function financeRow(page, memberName) { + const row = page.locator('tr', { + has: page.locator('a.adr_name', { hasText: memberName }), + }).first(); + + return { + row, + state: row.locator('.state'), + amount: row.locator('input[data-col="amount"]'), + note: row.locator('input[data-col="note"]'), + entryFee: row.locator('[data-col="entryFee"]'), + transport: row.locator('[data-col="transport"]'), + accommodation: row.locator('[data-col="accommodation"]'), + }; +} + +async function expectFinanceRowValues(finance, expected) { + await expect(finance.row).toBeVisible(); + + if (Object.prototype.hasOwnProperty.call(expected, 'state')) { + await expect(finance.state).toHaveText(expected.state); + } + + if (Object.prototype.hasOwnProperty.call(expected, 'amount')) { + await expect(finance.amount).toHaveValue(expected.amount); + } + + if (Object.prototype.hasOwnProperty.call(expected, 'note')) { + await expect(finance.note).toHaveValue(expected.note); + } + + if (Object.prototype.hasOwnProperty.call(expected, 'entryFee')) { + await expect(finance.entryFee).toContainText(expected.entryFee); + } + + if (Object.prototype.hasOwnProperty.call(expected, 'transport')) { + await expect(finance.transport).toHaveText(expected.transport); + } + + if (Object.prototype.hasOwnProperty.call(expected, 'accommodation')) { + await expect(finance.accommodation).toHaveText(expected.accommodation); + } +} + +async function openRaceFinancePopup(page, raceId) { + return openPopup(page, async () => { + await page.evaluate((currentRaceId) => { + window.open(`./race_finance_view.php?race_id=${currentRaceId}`, '', 'width=800,height=800'); + }, raceId); + }); +} + +async function runRaceFinanceWizard(page) { + await expect(page.locator('button[title="Vyplň platby podle pravidel"]')).toBeVisible(); + await page.waitForFunction(() => typeof window.fillTableFromInput === 'function'); + await page.evaluate(() => { + window.fillTableFromInput('payrule', { + preventDefault() {}, + }); + }); +} + +module.exports = { + expectFinanceRowValues, + financeRow, + openRaceFinancePopup, + runRaceFinanceWizard, +}; diff --git a/tests/playwright/helpers/workflow-runtime.js b/tests/playwright/helpers/workflow-runtime.js new file mode 100644 index 0000000..0c145fe --- /dev/null +++ b/tests/playwright/helpers/workflow-runtime.js @@ -0,0 +1,59 @@ +function pad(value) { + return String(value).padStart(2, '0'); +} + +function formatCzDate(date) { + return `${pad(date.getUTCDate())}.${pad(date.getUTCMonth() + 1)}.${date.getUTCFullYear()}`; +} + +function addUtcDays(baseDate, days) { + const next = new Date(baseDate.getTime()); + next.setUTCDate(next.getUTCDate() + days); + return next; +} + +function createWorkflowRun(name) { + const now = new Date(); + const stamp = [ + now.getUTCFullYear(), + pad(now.getUTCMonth() + 1), + pad(now.getUTCDate()), + '-', + pad(now.getUTCHours()), + pad(now.getUTCMinutes()), + pad(now.getUTCSeconds()), + ].join(''); + const suffix = Math.random().toString(36).slice(2, 8); + const runId = `${stamp}-${suffix}`; + + return { + name, + runId, + }; +} + +async function expandYear(page, year) { + const normalizedYear = String(year); + const expander = page.locator( + `span.year-expander[onclick="toggle_expand_by_group('${normalizedYear}', this)"]` + ).first(); + + if (await expander.count() === 0) { + return false; + } + + const label = String(await expander.textContent() || '').replace(/\s+/g, ' ').trim(); + if (label === `▼ ${normalizedYear}`) { + await expander.click(); + return true; + } + + return false; +} + +module.exports = { + addUtcDays, + createWorkflowRun, + expandYear, + formatCzDate, +}; diff --git a/tests/playwright/login.spec.js b/tests/playwright/login.spec.js new file mode 100644 index 0000000..2e82f99 --- /dev/null +++ b/tests/playwright/login.spec.js @@ -0,0 +1,50 @@ +const { test, expect } = require('@playwright/test'); +const { login } = require('./components/login'); +const { TEST_USERS } = require('./constants/users'); +const { ALL_PROTECTED_ROUTES, LOGIN_EXPECTATIONS } = require('./constants/routes'); + +function escapeRegExp(value) { + return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); +} + +async function expectActiveRoute(page, route) { + await expect(page).toHaveURL(new RegExp(`${escapeRegExp(route.path)}$`)); + await expect(page.locator('body')).toContainText('Přihlášen'); + await expect(page.locator('input[name^="mbr_l_"]')).toHaveCount(0); + await expect(page.locator('span.NaviColSmSel').filter({ hasText: route.label })).toBeVisible(); +} + +async function expectForbiddenRoute(page, route) { + await expect(page).toHaveURL(new RegExp(`${escapeRegExp(route.path)}$`)); + await expect(page.locator('body')).toContainText('Přihlášen'); + await expect(page.locator('input[name^="mbr_l_"]')).toHaveCount(0); + await expect(page.locator('h2')).toHaveText('Novinky'); + await expect(page.locator('span.NaviColSmSel')).toHaveCount(0); + await expect(page.locator(`a.NaviColSm[href="${route.path}"]`)).toHaveCount(0); +} + +for (const [role, user] of Object.entries(TEST_USERS)) { + const expectation = LOGIN_EXPECTATIONS[role]; + const accessibleRoutePaths = new Set(expectation.accessibleRoutes.map((route) => route.path)); + const forbiddenRoutes = ALL_PROTECTED_ROUTES.filter((route) => !accessibleRoutePaths.has(route.path)); + + test(`allows ${role} to log in and access expected routes`, async ({ page }) => { + await login(page, user); + await expectActiveRoute(page, expectation.landingRoute); + + for (const route of expectation.accessibleRoutes) { + await page.goto(route.path); + await expectActiveRoute(page, route); + } + }); + + test(`prevents ${role} from activating forbidden routes`, async ({ page }) => { + await login(page, user); + await expectActiveRoute(page, expectation.landingRoute); + + for (const route of forbiddenRoutes) { + await page.goto(route.path); + await expectForbiddenRoute(page, route); + } + }); +} diff --git a/tests/playwright/workflows/financial-flow.spec.js b/tests/playwright/workflows/financial-flow.spec.js new file mode 100644 index 0000000..5263e14 --- /dev/null +++ b/tests/playwright/workflows/financial-flow.spec.js @@ -0,0 +1,254 @@ +const { test, expect } = require('@playwright/test'); +const { + getFinanceDirectoryEntryByReg, + stornoFirstMemberFinanceEntry, + submitFinanceTransferByReg, + submitMemberFinanceEntry, + submitMemberTransferByReg, + updateFirstMemberFinanceEntry, +} = require('../helpers/app-actions'); +const { + loginAs, +} = require('../helpers/browser'); +const { + createWorkflowRun, +} = require('../helpers/workflow-runtime'); + +async function getFinalMemberBalance(page, path) { + if (path) { + await page.goto(path); + } + + const amountText = await page.locator('tr', { + has: page.locator('td', { hasText: 'Konečný zůstatek' }), + }).first().locator('span.amount, span.amountred, span.amountgreen').textContent(); + + const match = String(amountText || '').trim().match(/-?\d+/); + return match ? Number(match[0]) : null; +} + +async function getAccountantBalances(page, regs, path = './index.php?id=800&subid=1') { + const balances = {}; + + for (const [index, reg] of regs.entries()) { + const entry = await getFinanceDirectoryEntryByReg(page, reg, index === 0 ? { path } : {}); + if (!entry) { + throw new Error(`Could not find accountant balance for reg ${reg}`); + } + + balances[reg] = entry; + } + + return balances; +} + +function sumBalances(balances) { + return Object.values(balances).reduce((sum, entry) => sum + entry.amount, 0); +} + +test.describe('Balance Change Workflow', () => { + test.describe.configure({ mode: 'serial' }); + + const state = {}; + + test('accountant can manually update a member balance', async ({ browser }) => { + const run = createWorkflowRun('manual-accountant-flow'); + const reg = '9952'; + const notes = { + payment: `pw-manual-payment-${run.runId}`, + deposit: `pw-manual-deposit-${run.runId}`, + storno: `pw-manual-storno-${run.runId}`, + update: `pw-manual-update-${run.runId}`, + }; + + const memberContext = await browser.newContext(); + const accountantContext = await browser.newContext(); + const memberPage = await memberContext.newPage(); + const accountantPage = await accountantContext.newPage(); + + let memberBalance = null; + let memberUserId = null; + let initialAccountantEntry = null; + + try { + await loginAs(memberPage, 'member'); + + memberBalance = await getFinalMemberBalance(memberPage, './index.php?id=200&subid=10'); + expect(memberBalance).not.toBeNull(); + + await loginAs(accountantPage, 'accountant'); + + initialAccountantEntry = await getFinanceDirectoryEntryByReg(accountantPage, reg, { + path: './index.php?id=800&subid=1', + }); + + expect(initialAccountantEntry).toBeTruthy(); + expect(initialAccountantEntry.amount).toBe(memberBalance); + expect(initialAccountantEntry.overviewPath).toContain('./user_finance_view.php?user_id='); + + memberUserId = initialAccountantEntry.userId; + expect(memberUserId).toBeTruthy(); + + await submitMemberFinanceEntry(accountantPage, memberUserId, 'out', { + amount: 250, + note: notes.payment, + }); + + const afterPaymentEntry = await getFinanceDirectoryEntryByReg(accountantPage, reg, { + path: './index.php?id=800&subid=1', + }); + + expect(afterPaymentEntry).toBeTruthy(); + expect(afterPaymentEntry.amount).toBe(initialAccountantEntry.amount - 250); + + await submitMemberFinanceEntry(accountantPage, memberUserId, 'in', { + amount: 100, + note: notes.deposit, + }); + + const afterDepositEntry = await getFinanceDirectoryEntryByReg(accountantPage, reg, { + path: './index.php?id=800&subid=1', + }); + + expect(afterDepositEntry).toBeTruthy(); + expect(afterDepositEntry.amount).toBe(afterPaymentEntry.amount + 100); + expect(afterDepositEntry.amount).toBe(initialAccountantEntry.amount - 150); + + await stornoFirstMemberFinanceEntry(accountantPage, memberUserId, { + note: notes.storno, + }); + + const afterStornoEntry = await getFinanceDirectoryEntryByReg(accountantPage, reg, { + path: './index.php?id=800&subid=1', + }); + + expect(afterStornoEntry).toBeTruthy(); + expect(afterStornoEntry.amount).toBe(afterDepositEntry.amount - 100); + expect(afterStornoEntry.amount).toBe(afterPaymentEntry.amount); + + await updateFirstMemberFinanceEntry(accountantPage, memberUserId, { + amount: -350, + note: notes.update, + }); + + const afterUpdateEntry = await getFinanceDirectoryEntryByReg(accountantPage, reg, { + path: './index.php?id=800&subid=1', + }); + + expect(afterUpdateEntry).toBeTruthy(); + expect(afterUpdateEntry.amount).toBe(afterStornoEntry.amount - 100); + expect(afterUpdateEntry.amount).toBe(initialAccountantEntry.amount - 350); + + state.baselineBalances = await getAccountantBalances(accountantPage, ['9952', '8357', '9513']); + } finally { + await memberContext.close(); + await accountantContext.close(); + } + }); + + test('member can transfer money after the accountant changes', async ({ browser }) => { + const run = createWorkflowRun('manual-accountant-transfer'); + const notes = { + transfer8357: `pw-manual-transfer-8357-${run.runId}`, + transfer9513: `pw-manual-transfer-9513-${run.runId}`, + }; + + const memberContext = await browser.newContext(); + const memberPage = await memberContext.newPage(); + + try { + await loginAs(memberPage, 'member'); + + const beforeTransfersBalance = await getFinalMemberBalance(memberPage, './index.php?id=200&subid=10'); + expect(beforeTransfersBalance).not.toBeNull(); + + await submitMemberTransferByReg(memberPage, '8357', { + amount: 150, + note: notes.transfer8357, + }); + + await submitMemberTransferByReg(memberPage, '9513', { + amount: 50, + note: notes.transfer9513, + }); + + const afterTransfersBalance = await getFinalMemberBalance(memberPage, './index.php?id=200&subid=10'); + expect(afterTransfersBalance).toBe(beforeTransfersBalance - 200); + } finally { + await memberContext.close(); + } + }); + + test('accountant sees transfer totals preserved and can storno the latest 9952 transaction', async ({ browser }) => { + const run = createWorkflowRun('manual-accountant-recheck'); + const notes = { + storno: `pw-manual-post-transfer-storno-${run.runId}`, + }; + + const accountantContext = await browser.newContext(); + const accountantPage = await accountantContext.newPage(); + + try { + expect(state.baselineBalances).toBeTruthy(); + + await loginAs(accountantPage, 'accountant'); + + const beforeStornoBalances = await getAccountantBalances(accountantPage, ['9952', '8357', '9513']); + + expect(sumBalances(beforeStornoBalances)).toBe(sumBalances(state.baselineBalances)); + expect(beforeStornoBalances['9952'].amount).toBe(state.baselineBalances['9952'].amount - 200); + expect(beforeStornoBalances['8357'].amount).toBe(state.baselineBalances['8357'].amount + 150); + expect(beforeStornoBalances['9513'].amount).toBe(state.baselineBalances['9513'].amount + 50); + + await stornoFirstMemberFinanceEntry(accountantPage, beforeStornoBalances['9952'].userId, { + note: notes.storno, + }); + + const afterStornoBalances = await getAccountantBalances(accountantPage, ['9952', '8357', '9513']); + + expect(afterStornoBalances['9952'].amount).toBe(beforeStornoBalances['9952'].amount + 50); + expect(afterStornoBalances['8357'].amount).toBe(beforeStornoBalances['8357'].amount); + expect(afterStornoBalances['9513'].amount).toBe(beforeStornoBalances['9513'].amount); + expect(sumBalances(afterStornoBalances)).toBe(sumBalances(beforeStornoBalances) + 50); + } finally { + await accountantContext.close(); + } + }); + + test('small manager can transfer money between managed members', async ({ browser }) => { + const run = createWorkflowRun('small-manager-transfer'); + const notes = { + transfer: `pw-small-manager-transfer-${run.runId}`, + }; + + const smallManagerContext = await browser.newContext(); + const smallManagerPage = await smallManagerContext.newPage(); + + try { + await loginAs(smallManagerPage, 'smallManager'); + + const beforeBalances = await getAccountantBalances(smallManagerPage, ['8357', '9952'], './index.php?id=600&subid=10'); + + const sourceEntry = beforeBalances['8357']; + const targetEntry = beforeBalances['9952']; + + expect(sourceEntry.overviewPath).toContain('./user_finance_view.php?user_id='); + + await submitFinanceTransferByReg(smallManagerPage, '9952', { + path: sourceEntry.overviewPath, + amount: 100, + note: notes.transfer, + }); + + const sourceFinalBalance = await getFinalMemberBalance(smallManagerPage, sourceEntry.overviewPath); + expect(sourceFinalBalance).toBe(sourceEntry.amount - 100); + + const afterBalances = await getAccountantBalances(smallManagerPage, ['8357', '9952'], './index.php?id=600&subid=10'); + + expect(afterBalances['8357'].amount).toBe(sourceEntry.amount - 100); + expect(afterBalances['9952'].amount).toBe(targetEntry.amount + 100); + } finally { + await smallManagerContext.close(); + } + }); +}); diff --git a/tests/playwright/workflows/multiuser-race-flow.spec.js b/tests/playwright/workflows/multiuser-race-flow.spec.js new file mode 100644 index 0000000..598844f --- /dev/null +++ b/tests/playwright/workflows/multiuser-race-flow.spec.js @@ -0,0 +1,334 @@ +const { test, expect } = require('@playwright/test'); +const { getTestMemberFixture } = require('../constants/members'); +const { POPULATED_PAYMENT_RULES } = require('../constants/payment-rules'); +const { TEST_USERS } = require('../constants/users'); +const { + getCurrentUser, + getManagingUsers, + getRaceDetail, + loginViaApi, +} = require('../helpers/api'); +const { + loginAs, +} = require('../helpers/browser'); +const { + ensureClubMembers, + createRace, + ensurePaymentRules, + findRaceUserIdByReg, + getFinanceDirectoryEntryByReg, + submitManagedRaceRegistration, + submitMemberRaceRegistration, + updateRace, +} = require('../helpers/app-actions'); +const { + expectFinanceRowValues, + financeRow, + openRaceFinancePopup, + runRaceFinanceWizard, +} = require('../helpers/race-finance'); +const { + addUtcDays, + createWorkflowRun, + formatCzDate, +} = require('../helpers/workflow-runtime'); + +async function getAccountantBalances(page, regs, path = './index.php?id=800&subid=1') { + const balances = {}; + + for (const [index, reg] of regs.entries()) { + const entry = await getFinanceDirectoryEntryByReg(page, reg, index === 0 ? { path } : {}); + + if (!entry) { + throw new Error(`Could not find accountant balance for reg ${reg}`); + } + + balances[reg] = entry; + } + + return balances; +} + +test.describe('Multi-User Race Workflow', () => { + test.describe.configure({ mode: 'serial' }); + + const state = {}; + + test.beforeAll(async ({ browser, request }) => { + state.run = createWorkflowRun('multi-user-race-flow'); + + const today = new Date(); + const entryDate = formatCzDate(addUtcDays(today, 7)); + const raceDate = formatCzDate(addUtcDays(today, 14)); + + state.managerRaceUser = getTestMemberFixture('8511'); + if (!state.managerRaceUser) { + throw new Error('Missing test member fixture for registration id 8511'); + } + state.managerRaceUser2 = getTestMemberFixture('8200'); + if (!state.managerRaceUser2) { + throw new Error('Missing test member fixture for registration id 8200'); + } + state.registrarRaceUser = getTestMemberFixture('7755'); + if (!state.registrarRaceUser) { + throw new Error('Missing test member fixture for registration id 7755'); + } + + state.labels = { + memberNote: `member-note-${state.run.runId}`, + managerRaceUserNote: `manager-user-note-${state.run.runId}`, + registrarRaceUserNote: `registrar-user-note-${state.run.runId}`, + managerNote: `manager-note-${state.run.runId}`, + raceName: `PW Training ${state.run.runId}`, + raceNoteInitial: `Initial workflow note ${state.run.runId}`, + raceNoteUpdated: `Updated workflow note ${state.run.runId}`, + raceNameUpdated: `PW Training ${state.run.runId} v2`, + }; + + state.memberToken = await loginViaApi(request, TEST_USERS.member); + state.memberUser = await getCurrentUser(request, state.memberToken); + + state.smallManagerToken = await loginViaApi(request, TEST_USERS.smallManager); + state.smallManagerUser = await getCurrentUser(request, state.smallManagerToken); + state.smallManagerManagedUsers = await getManagingUsers(request, state.smallManagerToken); + state.smallManagerManagedChild = state.smallManagerManagedUsers.find( + (user) => user.user_id !== state.smallManagerUser.user_id + ); + + if (!state.smallManagerManagedChild) { + throw new Error('The seeded smallManager user has no managed child for workflow coverage'); + } + + const accountantContext = await browser.newContext(); + const accountantPage = await accountantContext.newPage(); + await loginAs(accountantPage, 'accountant'); + await ensurePaymentRules(accountantPage, POPULATED_PAYMENT_RULES); + + const managerContext = await browser.newContext(); + const managerPage = await managerContext.newPage(); + await loginAs(managerPage, 'manager'); + const ensuredMembers = await ensureClubMembers(managerPage, [state.managerRaceUser.reg,state.managerRaceUser2.reg,state.registrarRaceUser.reg], { + role: 'manager', + financePage: accountantPage, + }); + + const registrarContext = await browser.newContext(); + const registrarPage = await registrarContext.newPage(); + await loginAs(registrarPage, 'registrar'); + state.race = await createRace(registrarPage, request, { + name: state.labels.raceName, + note: state.labels.raceNoteInitial, + entryDate1: entryDate, + date: raceDate, + eventType: 'T', + transport: '3' + }); + + state.registrarRaceUserId = await findRaceUserIdByReg(registrarPage, state.race.id, { + groupId: 400, + reg: state.registrarRaceUser.reg, + }); + + if (!state.registrarRaceUserId) { + throw new Error(`Registrar could not find race user with reg ${state.registrarRaceUser.reg}`); + } + + await submitManagedRaceRegistration(registrarPage, state.race.id, { + groupId: 400, + user_id: String(state.registrarRaceUserId), + kateg: 'D21', + pozn: state.labels.registrarRaceUserNote, + pozn2: 'registrar setup', + sedadel: -1 + }); + + await registrarContext.close(); + + state.managerRaceUserId = await findRaceUserIdByReg(managerPage, state.race.id, { + groupId: 500, + reg: state.managerRaceUser.reg, + }); + + if (!state.managerRaceUserId) { + throw new Error(`Manager could not find race user with reg ${state.managerRaceUser.reg}`); + } + + await submitManagedRaceRegistration(managerPage, state.race.id, { + groupId: 500, + user_id: String(state.managerRaceUserId), + kateg: 'H21', + pozn: state.labels.managerRaceUserNote, + pozn2: 'manager setup', + sedadel: 4 + }); + + state.managerRaceUserId = await findRaceUserIdByReg(managerPage, state.race.id, { + groupId: 500, + reg: state.managerRaceUser2.reg, + }); + + if (!state.managerRaceUserId) { + throw new Error(`Manager could not find race user with reg ${state.managerRaceUser2.reg}`); + } + + await submitManagedRaceRegistration(managerPage, state.race.id, { + groupId: 500, + user_id: String(state.managerRaceUserId), + kateg: 'H35', + pozn: state.labels.managerRaceUserNote, + pozn2: 'manager setup', + }); + + await managerContext.close(); + await accountantContext.close(); + }); + + test('member can register using the created race id', async ({ page, request }) => { + await loginAs(page, 'member'); + await page.goto(`./us_race_regon.php?id_zav=${state.race.id}&id_us=${state.memberUser.user_id}`); + + await expect(page.locator('body')).toContainText(state.labels.raceName); + + await submitMemberRaceRegistration(page, { + id_us: String(state.memberUser.user_id), + id_zav: String(state.race.id), + novy: '1', + kat: 'D21', + pozn: state.labels.memberNote, + pozn2: 'member internal', + }); + + await page.goto(`./us_race_regon.php?id_zav=${state.race.id}&id_us=${state.memberUser.user_id}`); + await expect(page.locator('input[name="kat"]')).toHaveValue('D21'); + await expect(page.locator('input[name="pozn"]')).toHaveValue(state.labels.memberNote); + + const detail = await getRaceDetail(request, state.race.id); + const entry = detail.everyone.find((item) => item.user_id === state.memberUser.user_id); + + expect(entry).toBeTruthy(); + expect(entry.category).toBe('D21'); + expect(entry.note).toBe(state.labels.memberNote); + }); + + test('registrar can modify the created race after member registration', async ({ page }) => { + await loginAs(page, 'registrar'); + + await updateRace(page, state.race.id, { + nazev: state.labels.raceName, + poznamka: state.labels.raceNoteUpdated, + }); + + await page.goto(`./race_edit.php?id=${state.race.id}`); + await expect(page.locator('textarea[name="poznamka"]')).toHaveValue(state.labels.raceNoteUpdated); + }); + + test('member sees the registrar updates on the same race id', async ({ page }) => { + await loginAs(page, 'member'); + await page.goto(`./us_race_regon.php?id_zav=${state.race.id}&id_us=${state.memberUser.user_id}`); + + await expect(page.locator('body')).toContainText(state.labels.raceNoteUpdated); + await expect(page.locator('input[name="kat"]')).toHaveValue('D21'); + await expect(page.locator('input[name="pozn"]')).toHaveValue(state.labels.memberNote); + }); + + test('small manager can use the same shared race context', async ({ page, request }) => { + await loginAs(page, 'smallManager'); + await page.goto(`./race_regs_1.php?gr_id=600&id=${state.race.id}&show_ed=1`); + + await expect(page.locator('body')).toContainText(state.labels.raceName); + await expect(page.locator('select[name="user_id"]')).toBeVisible(); + + await submitManagedRaceRegistration(page, state.race.id, { + user_id: String(state.smallManagerManagedChild.user_id), + kateg: 'T1', + pozn: state.labels.managerNote, + pozn2: 'manager internal', + }); + + const detail = await getRaceDetail(request, state.race.id); + const entry = detail.everyone.find((item) => item.user_id === state.smallManagerManagedChild.user_id); + + expect(entry).toBeTruthy(); + expect(entry.category).toBe('T1'); + expect(entry.note).toBe(state.labels.managerNote); + }); + + test('registrar can perform a second modification on the same race id', async ({ page, request }) => { + await loginAs(page, 'registrar'); + + await updateRace(page, state.race.id, { + nazev: state.labels.raceNameUpdated, + poznamka: state.labels.raceNoteUpdated, + }); + + const detail = await getRaceDetail(request, state.race.id); + + expect(detail.name).toBe(state.labels.raceNameUpdated); + }); + + async function fillAndCheckFieldsWithWizard( page ) { + const financePopup = await openRaceFinancePopup(page, state.race.id); + await runRaceFinanceWizard(financePopup); + + await expectFinanceRowValues(financeRow(financePopup, 'Coufalová Martina'), { + state: '🪄', + amount: '145', + note: '+45 startovné+100 doprava', + entryFee: '45', + transport: '✔+100', + accommodation: '', + }); + + await expectFinanceRowValues(financeRow(financePopup, 'Drábek Jan'), { + state: '🪄', + amount: '45', + note: '+45 startovné', + entryFee: '45', + transport: '🚗', + accommodation: '', + }); + + await expectFinanceRowValues(financeRow(financePopup, 'Koča Jaroslav'), { + state: '📌', + amount: '', + note: '', + entryFee: '', + transport: '', + accommodation: '', + }); + return financePopup; + } + + test('accountant can apply payrule wizard on race finance view', async ({ page }) => { + await loginAs(page, 'accountant'); + await fillAndCheckFieldsWithWizard(page); + }); + + test('accountant can book the wizard suggestions', async ({ page }) => { + await loginAs(page, 'accountant'); + + const beforeBalances = await getAccountantBalances(page, ['7755', '8511']); + const financePopup = await fillAndCheckFieldsWithWizard(page); + + await Promise.all([ + financePopup.waitForURL(new RegExp(`race_finance_view\\.php\\?race_id=${state.race.id}.*status=ok`)), + financePopup.locator('input[type="submit"][value="Změnit platby"]').click(), + ]); + + await expect(financeRow(financePopup, 'Coufalová Martina').amount).toHaveValue('145'); + await expect(financeRow(financePopup, 'Coufalová Martina').note).toHaveValue('+45 startovné+100 doprava'); + await expect(financeRow(financePopup, 'Drábek Jan').amount).toHaveValue('45'); + await expect(financeRow(financePopup, 'Drábek Jan').note).toHaveValue('+45 startovné'); + + await Promise.all([ + financePopup.waitForEvent('close'), + financePopup.locator('button[onclick="javascript:close_popup();"]').click(), + ]); + + const afterBalances = await getAccountantBalances(page, ['7755', '8511']); + + expect(afterBalances['7755'].amount).toBe(beforeBalances['7755'].amount + 145); + expect(afterBalances['8511'].amount).toBe(beforeBalances['8511'].amount + 45); + + }); +}); diff --git a/tests/playwright/workflows/oris-local-race-flow.spec.js b/tests/playwright/workflows/oris-local-race-flow.spec.js new file mode 100644 index 0000000..38f813a --- /dev/null +++ b/tests/playwright/workflows/oris-local-race-flow.spec.js @@ -0,0 +1,155 @@ +const { test, expect } = require('@playwright/test'); +const { + loginAs, +} = require('../helpers/browser'); +const { + ensureClubMembers, + ensurePaymentRules, +} = require('../helpers/app-actions'); +const { + POPULATED_PAYMENT_RULES, +} = require('../constants/payment-rules'); +const { + ensureOrisRace, + ensureRaceParticipants, +} = require('../helpers/oris-race-workflow'); +const { + expandYear, +} = require('../helpers/workflow-runtime'); +const { + expectFinanceRowValues, + financeRow, + openRaceFinancePopup, + runRaceFinanceWizard, +} = require('../helpers/race-finance'); + +const ORIS_LOCAL_RACE_WORKFLOW = { + name: 'Oris Local Race Workflow', + orisId: '8971', + members: ['0953', '8511'], + participants: { + '0953': { + kateg: 'D16', + transport: 1, + ubytovani: 1, + term: 1, + }, + '8511': { + kateg: 'H21', + transport: 1, + ubytovani: 1, + }, + }, + accountantWizardChecks: { + 'Drábek Jan': { + state: '🪄', + amount: '139', + note: '+139 startovné', + }, + 'Křístková Veronika': { + state: '🪄', + amount: '75', + note: '+75 startovné', + }, + 'Coufalová Rea': { + state: '📌', + amount: '', + note: '', + transport: '✔', + accommodation: '✔', + }, + }, +}; + +test.describe(ORIS_LOCAL_RACE_WORKFLOW.name, () => { + test.describe.configure({ mode: 'serial' }); + + const state = {}; + + test.beforeAll(async ({ browser }) => { + const accountantContext = await browser.newContext(); + const accountantPage = await accountantContext.newPage(); + + try { + await loginAs(accountantPage, 'accountant'); + await ensurePaymentRules(accountantPage, POPULATED_PAYMENT_RULES); + } finally { + await accountantContext.close(); + } + }); + + test('club admin can ensure the configured members exist', async ({ page, browser }) => { + await loginAs(page, 'clubAdmin'); + + const accountantContext = await browser.newContext(); + const accountantPage = await accountantContext.newPage(); + + try { + await loginAs(accountantPage, 'accountant'); + + state.members = await ensureClubMembers(page, ORIS_LOCAL_RACE_WORKFLOW.members, { + financePage: accountantPage, + }); + } finally { + await accountantContext.close(); + } + + expect(state.members).toHaveLength(2); + }); + + test('registrar can ensure the ORIS race exists locally', async ({ page }) => { + await loginAs(page, 'registrar'); + + state.race = await ensureOrisRace(page, ORIS_LOCAL_RACE_WORKFLOW.orisId); + + expect(state.race.id).toBeTruthy(); + expect(state.race.extId).toBe(ORIS_LOCAL_RACE_WORKFLOW.orisId); + expect(state.race.date).toBeTruthy(); + expect(state.race.name).toBeTruthy(); + expect(state.race.place).toBeTruthy(); + expect(state.race.club).toBeTruthy(); + }); + + test('registrar can ensure the configured participants on the ORIS race', async ({ page }) => { + await loginAs(page, 'registrar'); + + if (!state.race) { + state.race = await ensureOrisRace(page, ORIS_LOCAL_RACE_WORKFLOW.orisId); + } + + state.participants = await ensureRaceParticipants( + page, + state.race.id, + ORIS_LOCAL_RACE_WORKFLOW.participants + ); + + expect(state.participants['0953']).toBeTruthy(); + expect(state.participants['8511']).toBeTruthy(); + }); + + test('accountant can open the race wizard and inspect the expected members', async ({ page }) => { + await loginAs(page, 'accountant'); + + if (!state.race) { + throw new Error('Race state is missing from the registrar setup step'); + } + + await page.goto('./index.php?id=800&subid=2&fC=1'); + await expandYear(page, 2025); + await expect(page.locator('body')).toContainText(state.race.name); + + const financePopup = await openRaceFinancePopup(page, state.race.id); + + try { + await expect(financePopup.locator('body')).toContainText(state.race.name); + + await runRaceFinanceWizard(financePopup); + + for (const [memberName, expectedValues] of Object.entries(ORIS_LOCAL_RACE_WORKFLOW.accountantWizardChecks)) { + await expectFinanceRowValues(financeRow(financePopup, memberName), expectedValues); + } + } finally { + await financePopup.close(); + } + }); +}); diff --git a/tests/playwright/workflows/oris-public-multistage-race-flow.spec.js b/tests/playwright/workflows/oris-public-multistage-race-flow.spec.js new file mode 100644 index 0000000..bc40fe1 --- /dev/null +++ b/tests/playwright/workflows/oris-public-multistage-race-flow.spec.js @@ -0,0 +1,162 @@ +const { test, expect } = require('@playwright/test'); +const { + loginAs, +} = require('../helpers/browser'); +const { + ensurePaymentRules, + ensureClubMembers, + updateRace, +} = require('../helpers/app-actions'); +const { + POPULATED_PAYMENT_RULES, +} = require('../constants/payment-rules'); +const { + ensureOrisRace, + ensureRaceParticipants, +} = require('../helpers/oris-race-workflow'); +const { + expandYear, +} = require('../helpers/workflow-runtime'); +const { + expectFinanceRowValues, + financeRow, + openRaceFinancePopup, + runRaceFinanceWizard, +} = require('../helpers/race-finance'); + +const ORIS_PUBLIC_MULTISTAGE_RACE_WORKFLOW = { + name: 'Oris Public Multistage Race Workflow', + orisId: '9026', + members: ['0953', '6700', '9711'], + raceSetup: { + transport: '1', + accommodation: '1', + }, + participants: { + '0953': { + kateg: 'D16', + transport: 1, + ubytovani: 1, + }, + '6700': { + kateg: 'H35', + transport: 1, + ubytovani: 1, + }, + '9711': { + kateg: 'H21A', + }, + }, + accountantWizardChecks: { + 'Kelbl Vladimír': { + state: '🪄', + amount: '837', + note: '+837 startovné', + entryFee: '837', + transport: '', + accommodation: '', + }, + 'Coufalová Rea': { + state: '📌', + note: '', + amount: '', + transport: '✔', + accommodation: '✔', + }, + }, +}; + +test.describe(ORIS_PUBLIC_MULTISTAGE_RACE_WORKFLOW.name, () => { + test.describe.configure({ mode: 'serial' }); + + const state = {}; + + test.beforeAll(async ({ browser }) => { + const accountantContext = await browser.newContext(); + const accountantPage = await accountantContext.newPage(); + + try { + await loginAs(accountantPage, 'accountant'); + await ensurePaymentRules(accountantPage, POPULATED_PAYMENT_RULES); + } finally { + await accountantContext.close(); + } + }); + + test('registrar can ensure the ORIS public multistage race exists locally', async ({ page }) => { + await loginAs(page, 'registrar'); + + state.race = await ensureOrisRace(page, ORIS_PUBLIC_MULTISTAGE_RACE_WORKFLOW.orisId); + + expect(state.race.id).toBeTruthy(); + expect(state.race.extId).toBe(ORIS_PUBLIC_MULTISTAGE_RACE_WORKFLOW.orisId); + expect(state.race.name).toBeTruthy(); + expect(state.race.place).toBeTruthy(); + expect(state.race.club).toBeTruthy(); + }); + + test('club admin can ensure the configured members exist', async ({ page, browser }) => { + await loginAs(page, 'clubAdmin'); + + const accountantContext = await browser.newContext(); + const accountantPage = await accountantContext.newPage(); + + try { + await loginAs(accountantPage, 'accountant'); + + state.members = await ensureClubMembers(page, ORIS_PUBLIC_MULTISTAGE_RACE_WORKFLOW.members, { + financePage: accountantPage, + }); + } finally { + await accountantContext.close(); + } + + expect(state.members).toHaveLength(3); + }); + + test('registrar can enable transport and accommodation and ensure the configured participants', async ({ page }) => { + await loginAs(page, 'registrar'); + + if (!state.race) { + state.race = await ensureOrisRace(page, ORIS_PUBLIC_MULTISTAGE_RACE_WORKFLOW.orisId); + } + + await updateRace(page, state.race.id, ORIS_PUBLIC_MULTISTAGE_RACE_WORKFLOW.raceSetup); + + state.participants = await ensureRaceParticipants( + page, + state.race.id, + ORIS_PUBLIC_MULTISTAGE_RACE_WORKFLOW.participants + ); + + expect(state.participants['0953']).toBeTruthy(); + expect(state.participants['6700']).toBeTruthy(); + expect(state.participants['9711']).toBeTruthy(); + }); + + test('accountant can inspect the race wizard without overwriting seeded finance rows', async ({ page }) => { + await loginAs(page, 'accountant'); + + if (!state.race) { + throw new Error('Race state is missing from the registrar setup step'); + } + + await page.goto('./index.php?id=800&subid=2&fC=1'); + await expandYear(page, 2025); + await expect(page.locator('body')).toContainText(state.race.name); + + const financePopup = await openRaceFinancePopup(page, state.race.id); + + try { + await expect(financePopup.locator('body')).toContainText(state.race.name); + + await runRaceFinanceWizard(financePopup); + + for (const [memberName, expectedValues] of Object.entries(ORIS_PUBLIC_MULTISTAGE_RACE_WORKFLOW.accountantWizardChecks)) { + await expectFinanceRowValues(financeRow(financePopup, memberName), expectedValues); + } + } finally { + await financePopup.close(); + } + }); +});