Compare commits
65 Commits
asset-mapp
...
v2.3.7
| Author | SHA1 | Date | |
|---|---|---|---|
| 9906737f39 | |||
| 982642543d | |||
| 51061f1699 | |||
| 05ecf57822 | |||
| cbe894293c | |||
| e7d3afbf24 | |||
| 633a042136 | |||
| cba13f9b54 | |||
| 2632d08946 | |||
| 332e8982ec | |||
| 6f65735675 | |||
| 965f56e0d4 | |||
| 51d935d28d | |||
| 5516913cc0 | |||
| a22df31b30 | |||
| 60148d9c9e | |||
| acae4b4843 | |||
| 4cf1203fad | |||
| 285e0e2d33 | |||
| 5a9dfe8d5a | |||
| b74708ca1a | |||
| c27e6c3c7f | |||
| a18f74b3df | |||
| 418e8fcded | |||
| 29a88e341f | |||
| d7748173a0 | |||
| 211562f917 | |||
| f2336e2996 | |||
| 755f7e92d4 | |||
| 4724f0c841 | |||
| be27d4b6f0 | |||
| 9937165710 | |||
| a2fc107f26 | |||
| a2187a48b8 | |||
| d598a9214f | |||
| 3a0019a1b9 | |||
| 7e46c1fc5d | |||
| 47057ea7a3 | |||
| e9ca2223e4 | |||
| 91ba43510b | |||
| 6d6241576d | |||
| 1ff03906c2 | |||
| 7e7628bbd3 | |||
| 1cc2bc57ba | |||
| c504f9e4de | |||
| e044a424fa | |||
| 0c00d36236 | |||
| e320761ff5 | |||
| 0e1ae9a1a7 | |||
| 4db2d79207 | |||
| beb6450338 | |||
| 4be0f5a39d | |||
| a65ecc8d47 | |||
| 75caff77f1 | |||
| ff9978d103 | |||
| deca028334 | |||
| 3fc04a4373 | |||
| d30ffb4981 | |||
| b6e25299cd | |||
| 2bc45b89c4 | |||
| 1021f70a8b | |||
| fe28e238be | |||
| 60a41b5f14 | |||
| 3f14580904 | |||
| fbd0cbf43e |
@ -33,7 +33,6 @@ services:
|
|||||||
- APP_ENV=dev
|
- APP_ENV=dev
|
||||||
ports:
|
ports:
|
||||||
- "${APPLICATION_SSH_HOST_PORT:-2222}:22"
|
- "${APPLICATION_SSH_HOST_PORT:-2222}:22"
|
||||||
- "${APPLICATION_PANTHER_HOST_PORT:-9001}:9001"
|
|
||||||
volumes:
|
volumes:
|
||||||
- ${APP_CODE_PATH_HOST?}:${APP_CODE_PATH_CONTAINER?}
|
- ${APP_CODE_PATH_HOST?}:${APP_CODE_PATH_CONTAINER?}
|
||||||
|
|
||||||
@ -53,8 +52,8 @@ services:
|
|||||||
|
|
||||||
mongodb:
|
mongodb:
|
||||||
ports:
|
ports:
|
||||||
- "127.0.0.1:27017:27017"
|
- "127.0.0.1:27018:27017"
|
||||||
|
|
||||||
mysql:
|
mysql:
|
||||||
ports:
|
ports:
|
||||||
- "127.0.0.1:3306:3306"
|
- "127.0.0.1:3307:3306"
|
||||||
|
|||||||
@ -41,6 +41,18 @@ services:
|
|||||||
- ServerOptions__HostName=smtp4dev
|
- ServerOptions__HostName=smtp4dev
|
||||||
networks:
|
networks:
|
||||||
- network
|
- network
|
||||||
|
ollama:
|
||||||
|
image: ollama/ollama:latest
|
||||||
|
networks:
|
||||||
|
- network
|
||||||
|
restart: always
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
reservations:
|
||||||
|
devices:
|
||||||
|
- driver: nvidia
|
||||||
|
count: 1 # alternatively, use `count: all` for all GPUs
|
||||||
|
capabilities: [gpu]
|
||||||
webhook:
|
webhook:
|
||||||
image: tarampampam/webhook-tester:2
|
image: tarampampam/webhook-tester:2
|
||||||
restart: always
|
restart: always
|
||||||
|
|||||||
@ -64,7 +64,7 @@ server {
|
|||||||
try_files $uri @sfFront;
|
try_files $uri @sfFront;
|
||||||
}
|
}
|
||||||
|
|
||||||
# location /w2p/ {
|
# location /w2p/ {
|
||||||
# proxy_pass http://tp:8080/w2p/;
|
# proxy_pass http://tp:8080/w2p/;
|
||||||
# proxy_temp_path /tmp/proxy;
|
# proxy_temp_path /tmp/proxy;
|
||||||
#}
|
#}
|
||||||
|
|||||||
@ -100,8 +100,14 @@ RUN docker-php-ext-install -j$(nproc) ldap
|
|||||||
RUN pecl install imap \
|
RUN pecl install imap \
|
||||||
&& docker-php-ext-enable imap
|
&& docker-php-ext-enable imap
|
||||||
|
|
||||||
|
# rsvg und pdfmerge für creativelayouter
|
||||||
|
COPY ./src/new/assets/fonts /usr/local/share/fonts/custom
|
||||||
|
RUN fc-cache -fv
|
||||||
|
RUN apt-get update && apt-get install cairosvg -y
|
||||||
|
|
||||||
# COPY ./.docker/images/php/base/pdf/php_pdflib.so /pdflib.so
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
poppler-utils \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# make bash default shell
|
# make bash default shell
|
||||||
RUN sed -e 's;/bin/ash$;/bin/bash;g' -i /etc/passwd
|
RUN sed -e 's;/bin/ash$;/bin/bash;g' -i /etc/passwd
|
||||||
|
|||||||
Binary file not shown.
@ -6,6 +6,7 @@ COPY ./images/php/cron/bin/ /usr/bin/
|
|||||||
COPY ./images/php/fpm/conf.d/policy.xml /etc/ImageMagick-6/policy.xml
|
COPY ./images/php/fpm/conf.d/policy.xml /etc/ImageMagick-6/policy.xml
|
||||||
RUN chmod +x /usr/bin/start-cron.sh
|
RUN chmod +x /usr/bin/start-cron.sh
|
||||||
RUN chmod +x /usr/bin/set-env.sh
|
RUN chmod +x /usr/bin/set-env.sh
|
||||||
|
RUN chmod +x /usr/bin/psc-cron-run.sh
|
||||||
RUN chmod 0600 /etc/cron.d/psc
|
RUN chmod 0600 /etc/cron.d/psc
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y cron rsyslog
|
RUN apt-get update && apt-get install -y cron rsyslog
|
||||||
|
|||||||
9
.docker/images/php/cron/bin/psc-cron-run.sh
Normal file
9
.docker/images/php/cron/bin/psc-cron-run.sh
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Check if a cache clear was requested via flag file
|
||||||
|
if [ -f /data/www/new/watch/psc_clear_cache ]; then
|
||||||
|
rm -f /data/www/new/watch/psc_clear_cache
|
||||||
|
/usr/local/bin/php /data/www/new/bin/clear-cache.php 2>&1
|
||||||
|
fi
|
||||||
|
|
||||||
|
/usr/local/bin/php /data/www/new/bin/console application:queue:doEveryMinute
|
||||||
@ -5,7 +5,7 @@ BASH_ENV=/container.env
|
|||||||
* * * * * root chmod -R 0777 /data/www/old/market/steplayouter >> /var/log/cron.log 2>&1
|
* * * * * root chmod -R 0777 /data/www/old/market/steplayouter >> /var/log/cron.log 2>&1
|
||||||
* * * * * root chmod -R 0777 /data/www/new/web/uploads/media >> /var/log/cron.log 2>&1
|
* * * * * root chmod -R 0777 /data/www/new/web/uploads/media >> /var/log/cron.log 2>&1
|
||||||
* * * * * root chmod -R 0777 /data/www/new/web/media >> /var/log/cron.log 2>&1
|
* * * * * root chmod -R 0777 /data/www/new/web/media >> /var/log/cron.log 2>&1
|
||||||
* * * * * www-data cd /data/www/new/web && /usr/local/bin/php /data/www/new/bin/console application:queue:doEveryMinute >> /var/log/cron.log 2>&1
|
* * * * * www-data cd /data/www/new/web && /usr/bin/psc-cron-run.sh >> /var/log/cron.log 2>&1
|
||||||
@daily www-data cd /data/www/new/web && /usr/local/bin/php /data/www/new/bin/console application:queue:doEveryDay >> /var/log/cronD.log 2>&1
|
@daily www-data cd /data/www/new/web && /usr/local/bin/php /data/www/new/bin/console application:queue:doEveryDay >> /var/log/cronD.log 2>&1
|
||||||
@hourly www-data cd /data/www/new/web && /usr/local/bin/php /data/www/new/bin/console application:queue:doEveryHour >> /var/log/cronH.log 2>&1
|
@hourly www-data cd /data/www/new/web && /usr/local/bin/php /data/www/new/bin/console application:queue:doEveryHour >> /var/log/cronH.log 2>&1
|
||||||
#
|
#
|
||||||
|
|||||||
@ -10,3 +10,7 @@ symfony-init: ## init Symfony
|
|||||||
$(EXECUTE_IN_APPLICATION_CONTAINER) php "/application/src/new/bin/console" importmap:install;
|
$(EXECUTE_IN_APPLICATION_CONTAINER) php "/application/src/new/bin/console" importmap:install;
|
||||||
$(EXECUTE_IN_APPLICATION_CONTAINER) php "/application/src/new/bin/console" asset-map:compile;
|
$(EXECUTE_IN_APPLICATION_CONTAINER) php "/application/src/new/bin/console" asset-map:compile;
|
||||||
$(EXECUTE_IN_APPLICATION_CONTAINER) php "/application/src/new/bin/console" assets:install;
|
$(EXECUTE_IN_APPLICATION_CONTAINER) php "/application/src/new/bin/console" assets:install;
|
||||||
|
|
||||||
|
.PHONY: php-stan
|
||||||
|
php-stan: ## init Symfony
|
||||||
|
$(EXECUTE_IN_APPLICATION_CONTAINER) php "vendor/bin/phpstan" analyse ;
|
||||||
|
|||||||
Binary file not shown.
@ -306,7 +306,7 @@ CREATE TABLE `article` (
|
|||||||
`a4_auflagen` text DEFAULT NULL,
|
`a4_auflagen` text DEFAULT NULL,
|
||||||
`a4_sponsoring` int(1) DEFAULT NULL,
|
`a4_sponsoring` int(1) DEFAULT NULL,
|
||||||
`a4_prodzeit` varchar(255) DEFAULT NULL,
|
`a4_prodzeit` varchar(255) DEFAULT NULL,
|
||||||
`a4_abpreis` float(8,2) DEFAULT 0.00,
|
`a4_abpreis` varchar(20) DEFAULT NULL,
|
||||||
`a5_buy` int(1) DEFAULT NULL,
|
`a5_buy` int(1) DEFAULT NULL,
|
||||||
`a5_xml` text DEFAULT NULL,
|
`a5_xml` text DEFAULT NULL,
|
||||||
`layouterid` varchar(255) DEFAULT NULL,
|
`layouterid` varchar(255) DEFAULT NULL,
|
||||||
@ -933,7 +933,7 @@ CREATE TABLE `contact_address` (
|
|||||||
`email` varchar(255) DEFAULT NULL,
|
`email` varchar(255) DEFAULT NULL,
|
||||||
`type` int(1) NOT NULL,
|
`type` int(1) NOT NULL,
|
||||||
`company` varchar(100) DEFAULT NULL,
|
`company` varchar(100) DEFAULT NULL,
|
||||||
`anrede` varchar(100) NOT NULL,
|
`anrede` varchar(100) DEFAULT NULL,
|
||||||
`country` varchar(100) DEFAULT NULL,
|
`country` varchar(100) DEFAULT NULL,
|
||||||
`fax` varchar(255) DEFAULT NULL,
|
`fax` varchar(255) DEFAULT NULL,
|
||||||
`company2` varchar(255) DEFAULT NULL,
|
`company2` varchar(255) DEFAULT NULL,
|
||||||
@ -1712,7 +1712,7 @@ CREATE TABLE `papierdb` (
|
|||||||
`huelsendurchmesser` varchar(60) DEFAULT NULL,
|
`huelsendurchmesser` varchar(60) DEFAULT NULL,
|
||||||
`kleber` varchar(60) DEFAULT NULL,
|
`kleber` varchar(60) DEFAULT NULL,
|
||||||
`abdeckpapier` varchar(60) DEFAULT NULL,
|
`abdeckpapier` varchar(60) DEFAULT NULL,
|
||||||
`laufrichtung` varchar(2) DEFAULT NULL,
|
`laufrichtung` varchar(60) DEFAULT NULL,
|
||||||
`mengenangabe` int(10) DEFAULT NULL,
|
`mengenangabe` int(10) DEFAULT NULL,
|
||||||
`mengenangabe_palette` int(10) DEFAULT NULL,
|
`mengenangabe_palette` int(10) DEFAULT NULL,
|
||||||
`inhalt` varchar(60) DEFAULT NULL,
|
`inhalt` varchar(60) DEFAULT NULL,
|
||||||
@ -2114,7 +2114,7 @@ CREATE TABLE `shop` (
|
|||||||
`smtphostname` varchar(255) DEFAULT NULL,
|
`smtphostname` varchar(255) DEFAULT NULL,
|
||||||
`smtpusername` varchar(255) DEFAULT NULL,
|
`smtpusername` varchar(255) DEFAULT NULL,
|
||||||
`smtppassword` varchar(255) DEFAULT NULL,
|
`smtppassword` varchar(255) DEFAULT NULL,
|
||||||
`smtpusethis` int(1) NOT NULL,
|
`smtpusethis` int(1) NULL DEFAULT 0,
|
||||||
`useemailaslogin` int(1) NOT NULL,
|
`useemailaslogin` int(1) NOT NULL,
|
||||||
`noverify` int(1) NOT NULL,
|
`noverify` int(1) NOT NULL,
|
||||||
`keywords` longtext DEFAULT NULL,
|
`keywords` longtext DEFAULT NULL,
|
||||||
|
|||||||
Binary file not shown.
@ -31,4 +31,3 @@ JWT_PASSPHRASE=f7754c7a99638fe7162a144825ddaea7
|
|||||||
# postgresql+advisory://db_user:db_password@localhost/db_name
|
# postgresql+advisory://db_user:db_password@localhost/db_name
|
||||||
LOCK_DSN=flock
|
LOCK_DSN=flock
|
||||||
###< symfony/lock ###
|
###< symfony/lock ###
|
||||||
|
|
||||||
|
|||||||
2
src/new/.env.dev
Normal file
2
src/new/.env.dev
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
MAILER_DSN=smtp://smtp4dev:25
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
[ 2727ms] [VERBOSE] [DOM] Input elements should have autocomplete attributes (suggested: "current-password"): (More info: https://goo.gl/9p2vKq) %o @ http://type-dev-tp.local/apps/backend/login:0
|
||||||
|
[ 70599ms] [LOG] details: {application: X} @ http://type-dev-tp.local/apps/assets/vendor/@hotwired/stimulus/stimulus.index-S4zNcea.js:6
|
||||||
|
[ 70601ms] [LOG] details: {application: X, identifier: symfony--ux-chartjs--chart, controller: t, element: canvas} @ http://type-dev-tp.local/apps/assets/vendor/@hotwired/stimulus/stimulus.index-S4zNcea.js:6
|
||||||
|
[ 70694ms] [LOG] details: {application: X, identifier: symfony--ux-chartjs--chart, controller: t, element: canvas} @ http://type-dev-tp.local/apps/assets/vendor/@hotwired/stimulus/stimulus.index-S4zNcea.js:6
|
||||||
|
[ 70695ms] [LOG] details: {application: X} @ http://type-dev-tp.local/apps/assets/vendor/@hotwired/stimulus/stimulus.index-S4zNcea.js:6
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
[ 6186ms] [LOG] details: {application: X} @ http://type-dev-tp.local/apps/assets/vendor/@hotwired/stimulus/stimulus.index-S4zNcea.js:6
|
||||||
|
[ 6186ms] [LOG] details: {application: X} @ http://type-dev-tp.local/apps/assets/vendor/@hotwired/stimulus/stimulus.index-S4zNcea.js:6
|
||||||
|
[ 6198ms] ReferenceError: jwt_token is not defined
|
||||||
|
at order.load_status (http://type-dev-tp.local/apps/assets/tailwind/js/order-fW8duE1.js:180:9)
|
||||||
|
at order.init (http://type-dev-tp.local/apps/assets/tailwind/js/order-fW8duE1.js:139:14)
|
||||||
|
at http://type-dev-tp.local/apps/assets/tailwind/backend-Awel2k1.js:52:18
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
[ 1851ms] [VERBOSE] [DOM] Input elements should have autocomplete attributes (suggested: "current-password"): (More info: https://goo.gl/9p2vKq) %o @ http://type-dev-tp.local/apps/backend/login:0
|
||||||
|
[ 11882ms] [LOG] details: {application: X} @ http://type-dev-tp.local/apps/assets/vendor/@hotwired/stimulus/stimulus.index-S4zNcea.js:6
|
||||||
|
[ 11882ms] [LOG] details: {application: X} @ http://type-dev-tp.local/apps/assets/vendor/@hotwired/stimulus/stimulus.index-S4zNcea.js:6
|
||||||
|
[ 11886ms] ReferenceError: jwt_token is not defined
|
||||||
|
at order.load_status (http://type-dev-tp.local/apps/assets/tailwind/js/order-fW8duE1.js:180:9)
|
||||||
|
at order.init (http://type-dev-tp.local/apps/assets/tailwind/js/order-fW8duE1.js:139:14)
|
||||||
|
at http://type-dev-tp.local/apps/assets/tailwind/backend-Awel2k1.js:52:18
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
[ 2130ms] [LOG] details: {application: X} @ http://type-dev-tp.local/apps/assets/vendor/@hotwired/stimulus/stimulus.index-S4zNcea.js:6
|
||||||
|
[ 2131ms] [LOG] details: {application: X} @ http://type-dev-tp.local/apps/assets/vendor/@hotwired/stimulus/stimulus.index-S4zNcea.js:6
|
||||||
|
[ 52018ms] [ERROR] An invalid form control with name='shop_settings[googleXML][productGroup][]' is not focusable. @ http://type-dev-tp.local/apps/backend/shop/settings/settings/index:0
|
||||||
|
[ 82560ms] [ERROR] An invalid form control with name='shop_settings[googleXML][productGroup][]' is not focusable. @ http://type-dev-tp.local/apps/backend/shop/settings/settings/index:0
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
[ 5014ms] [LOG] details: {application: X} @ http://type-dev-tp.local/apps/assets/vendor/@hotwired/stimulus/stimulus.index-S4zNcea.js:6
|
||||||
|
[ 5015ms] [LOG] details: {application: X} @ http://type-dev-tp.local/apps/assets/vendor/@hotwired/stimulus/stimulus.index-S4zNcea.js:6
|
||||||
|
[ 5037ms] [VERBOSE] [DOM] Input elements should have autocomplete attributes (suggested: "username"): (More info: https://goo.gl/9p2vKq) %o @ http://type-dev-tp.local/apps/backend/shop/settings/settings/index:0
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
[ 612ms] [LOG] details: {application: X} @ http://type-dev-tp.local/apps/assets/vendor/@hotwired/stimulus/stimulus.index-S4zNcea.js:6
|
||||||
|
[ 613ms] [LOG] details: {application: X} @ http://type-dev-tp.local/apps/assets/vendor/@hotwired/stimulus/stimulus.index-S4zNcea.js:6
|
||||||
19
src/new/.playwright-mcp/page-2026-06-01T18-03-00-308Z.yml
Normal file
19
src/new/.playwright-mcp/page-2026-06-01T18-03-00-308Z.yml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- img "Logo" [ref=e5]
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- text: "Benutzername:"
|
||||||
|
- textbox "Benutzername:" [ref=e7]
|
||||||
|
- text: "Passwort:"
|
||||||
|
- textbox "Passwort:" [ref=e8]
|
||||||
|
- button "Anmelden" [ref=e9] [cursor=pointer]
|
||||||
|
- region "Symfony Web Debug Toolbar" [ref=e10]:
|
||||||
|
- generic [ref=e13]:
|
||||||
|
- link "Symfony Loading…" [ref=e15] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/e39c88?panel=request
|
||||||
|
- generic [ref=e16]:
|
||||||
|
- img "Symfony" [ref=e17]
|
||||||
|
- generic [ref=e19]: Loading…
|
||||||
|
- button [expanded] [ref=e20] [cursor=pointer]:
|
||||||
|
- generic "Close Toolbar" [ref=e21]:
|
||||||
|
- img [ref=e22]
|
||||||
393
src/new/.playwright-mcp/page-2026-06-01T18-04-08-863Z.yml
Normal file
393
src/new/.playwright-mcp/page-2026-06-01T18-04-08-863Z.yml
Normal file
@ -0,0 +1,393 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- complementary [ref=e3]:
|
||||||
|
- generic [ref=e5]:
|
||||||
|
- button "Collapse sidebar" [ref=e6] [cursor=pointer]:
|
||||||
|
- img [ref=e7]
|
||||||
|
- img "PrintshopCreator Logo" [ref=e10]
|
||||||
|
- navigation [ref=e11]:
|
||||||
|
- list [ref=e12]:
|
||||||
|
- listitem [ref=e13]:
|
||||||
|
- list [ref=e14]:
|
||||||
|
- listitem [ref=e15]:
|
||||||
|
- link " Dashboard" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/dashboard
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: Dashboard
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " Aufträge" [ref=e22] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/order/list/index
|
||||||
|
- generic [ref=e23]:
|
||||||
|
- generic [ref=e24]: Aufträge
|
||||||
|
- listitem [ref=e25]:
|
||||||
|
- link " Sendcloud" [ref=e27] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/r2_sendcloud/list
|
||||||
|
- generic [ref=e28]:
|
||||||
|
- generic [ref=e29]: Sendcloud
|
||||||
|
- listitem [ref=e30]:
|
||||||
|
- generic [ref=e31]:
|
||||||
|
- generic [ref=e32]:
|
||||||
|
- generic [ref=e33]:
|
||||||
|
- generic [ref=e34]: Produktion
|
||||||
|
- generic [ref=e36]:
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- generic [ref=e38]:
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]:
|
||||||
|
- generic [ref=e41]: Produkte
|
||||||
|
- generic [ref=e43]:
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e44]:
|
||||||
|
- link " Firmen" [ref=e46] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/account/list/index
|
||||||
|
- generic [ref=e47]:
|
||||||
|
- generic [ref=e48]: Firmen
|
||||||
|
- listitem [ref=e49]:
|
||||||
|
- link " Kunden" [ref=e51] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/contact/list/index
|
||||||
|
- generic [ref=e52]:
|
||||||
|
- generic [ref=e53]: Kunden
|
||||||
|
- listitem [ref=e54]:
|
||||||
|
- link " CMS" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/cms/list
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: CMS
|
||||||
|
- listitem [ref=e59]:
|
||||||
|
- link " Versandarten" [ref=e61] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/shipping/list/index
|
||||||
|
- generic [ref=e62]:
|
||||||
|
- generic [ref=e63]: Versandarten
|
||||||
|
- listitem [ref=e64]:
|
||||||
|
- link " Zahlarten" [ref=e66] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/payment/list/index
|
||||||
|
- generic [ref=e67]:
|
||||||
|
- generic [ref=e68]: Zahlarten
|
||||||
|
- listitem [ref=e69]:
|
||||||
|
- link " News" [ref=e71] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/news/list/index
|
||||||
|
- generic [ref=e72]:
|
||||||
|
- generic [ref=e73]: News
|
||||||
|
- listitem [ref=e74]:
|
||||||
|
- link " Gutschein" [ref=e76] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/voucher/list/index
|
||||||
|
- generic [ref=e77]:
|
||||||
|
- generic [ref=e78]: Gutschein
|
||||||
|
- listitem [ref=e79]:
|
||||||
|
- generic [ref=e80]:
|
||||||
|
- generic [ref=e81]:
|
||||||
|
- generic [ref=e82]:
|
||||||
|
- generic [ref=e83]: Tools
|
||||||
|
- generic [ref=e85]:
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e86]:
|
||||||
|
- generic [ref=e87]:
|
||||||
|
- generic [ref=e88]:
|
||||||
|
- generic [ref=e89]:
|
||||||
|
- generic [ref=e90]: Shop Einstellungen
|
||||||
|
- generic [ref=e92]:
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e93]:
|
||||||
|
- link " Aktionen" [ref=e95] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/queue/list/index
|
||||||
|
- generic [ref=e96]:
|
||||||
|
- generic [ref=e97]: Aktionen
|
||||||
|
- list [ref=e98]:
|
||||||
|
- listitem [ref=e99]:
|
||||||
|
- button "Systemeinstellungen" [ref=e100] [cursor=pointer]:
|
||||||
|
- paragraph [ref=e102]: Systemeinstellungen
|
||||||
|
- list [ref=e103]:
|
||||||
|
- listitem [ref=e104]:
|
||||||
|
- link " Statusverwaltung" [ref=e106] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/system/settings/status/index
|
||||||
|
- generic [ref=e107]:
|
||||||
|
- generic [ref=e108]: Statusverwaltung
|
||||||
|
- listitem [ref=e109]:
|
||||||
|
- link " Papierdatenbank" [ref=e111] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/system/settings/paper/index
|
||||||
|
- generic [ref=e112]:
|
||||||
|
- generic [ref=e113]: Papierdatenbank
|
||||||
|
- listitem [ref=e114]:
|
||||||
|
- link " Hilfetexte" [ref=e116] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/system/settings/help/index
|
||||||
|
- generic [ref=e117]:
|
||||||
|
- generic [ref=e118]: Hilfetexte
|
||||||
|
- listitem [ref=e119]:
|
||||||
|
- link " Systemeinstellung" [ref=e121] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/system/settings/settings/index
|
||||||
|
- generic [ref=e122]:
|
||||||
|
- generic [ref=e123]: Systemeinstellung
|
||||||
|
- listitem [ref=e124]:
|
||||||
|
- link " Logs" [ref=e126] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/system/settings/log/index
|
||||||
|
- generic [ref=e127]:
|
||||||
|
- generic [ref=e128]: Logs
|
||||||
|
- listitem [ref=e129]:
|
||||||
|
- link " Media" [ref=e131] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/media/list/folder/show
|
||||||
|
- generic [ref=e132]:
|
||||||
|
- generic [ref=e133]: Media
|
||||||
|
- listitem [ref=e134]:
|
||||||
|
- list [ref=e135]:
|
||||||
|
- listitem [ref=e136]:
|
||||||
|
- link " Apps & App Store" [ref=e138] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/plugin/list
|
||||||
|
- generic [ref=e139]:
|
||||||
|
- generic [ref=e140]: Apps & App Store
|
||||||
|
- separator [ref=e141]
|
||||||
|
- paragraph [ref=e142]: 01.06.2026 20:04:06
|
||||||
|
- paragraph [ref=e143]:
|
||||||
|
- link "v2.3.6 (12.05.2026)" [ref=e144] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/system/settings/backend/system/version/changelog
|
||||||
|
- generic [ref=e145]:
|
||||||
|
- banner [ref=e146]:
|
||||||
|
- generic [ref=e148]:
|
||||||
|
- generic [ref=e150]:
|
||||||
|
- combobox [ref=e151]:
|
||||||
|
- option "Bestesvonhier" [selected]
|
||||||
|
- option "eder"
|
||||||
|
- option "nowe"
|
||||||
|
- option "Printchampion"
|
||||||
|
- option "Produkttypen"
|
||||||
|
- link "Shop anzeigen" [ref=e152] [cursor=pointer]:
|
||||||
|
- /url: https://b-dev-tp.dockserver.de
|
||||||
|
- img [ref=e153]
|
||||||
|
- generic [ref=e155]:
|
||||||
|
- checkbox [ref=e156]
|
||||||
|
- text: Deaktive Shops zeigen
|
||||||
|
- link "EN" [ref=e158] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/backend/dashboard?_locale=en
|
||||||
|
- button "User menu" [ref=e161] [cursor=pointer]
|
||||||
|
- generic [ref=e163]:
|
||||||
|
- banner [ref=e164]:
|
||||||
|
- heading " Dashboard" [level=1] [ref=e165]:
|
||||||
|
- generic [ref=e166]:
|
||||||
|
- text: Dashboard
|
||||||
|
- generic [ref=e167]:
|
||||||
|
- generic [ref=e168]:
|
||||||
|
- heading "Info" [level=2] [ref=e171]
|
||||||
|
- table [ref=e173]:
|
||||||
|
- rowgroup [ref=e174]:
|
||||||
|
- 'row "Name: Bestesvonhier" [ref=e175]':
|
||||||
|
- cell "Name:" [ref=e176]
|
||||||
|
- cell "Bestesvonhier" [ref=e177]
|
||||||
|
- 'row "Beschreibung: Bestesvonhier" [ref=e178]':
|
||||||
|
- cell "Beschreibung:" [ref=e179]
|
||||||
|
- cell "Bestesvonhier" [ref=e180]
|
||||||
|
- 'row "Layout: bootstrap4_api" [ref=e181]':
|
||||||
|
- cell "Layout:" [ref=e182]
|
||||||
|
- cell "bootstrap4_api" [ref=e183]
|
||||||
|
- 'row "UID: 2" [ref=e184]':
|
||||||
|
- cell "UID:" [ref=e185]
|
||||||
|
- cell "2" [ref=e186]
|
||||||
|
- 'row "UUID: 0001-ac11000b-547c6efd-f2e3-272f456d" [ref=e187]':
|
||||||
|
- cell "UUID:" [ref=e188]
|
||||||
|
- cell "0001-ac11000b-547c6efd-f2e3-272f456d" [ref=e189]
|
||||||
|
- generic [ref=e190]:
|
||||||
|
- heading "Warnhinweise" [level=2] [ref=e193]
|
||||||
|
- table [ref=e195]:
|
||||||
|
- rowgroup [ref=e196]:
|
||||||
|
- 'row "Aktionen: Alles Ok" [ref=e197]':
|
||||||
|
- cell "Aktionen:" [ref=e198]
|
||||||
|
- cell "Alles Ok" [ref=e199]:
|
||||||
|
- paragraph [ref=e200]: Alles Ok
|
||||||
|
- 'row "Mailserver: Smtp Einstellungen überprüfen" [ref=e201]':
|
||||||
|
- cell "Mailserver:" [ref=e202]
|
||||||
|
- cell "Smtp Einstellungen überprüfen" [ref=e203]:
|
||||||
|
- paragraph [ref=e204]: Smtp Einstellungen überprüfen
|
||||||
|
- heading "Umsatz" [level=2] [ref=e209]
|
||||||
|
- generic [ref=e213]:
|
||||||
|
- heading "Neue Kunden" [level=2] [ref=e216]
|
||||||
|
- table [ref=e218]:
|
||||||
|
- rowgroup [ref=e219]:
|
||||||
|
- row "KundeFirma KundeVorname KundeNachname kunde@printchampion.eu 17.11.2014 00:11:00" [ref=e220]:
|
||||||
|
- cell "KundeFirma KundeVorname KundeNachname kunde@printchampion.eu" [ref=e221]:
|
||||||
|
- generic [ref=e222]: KundeFirma KundeVorname KundeNachname
|
||||||
|
- generic [ref=e223]: kunde@printchampion.eu
|
||||||
|
- cell "17.11.2014 00:11:00" [ref=e224]:
|
||||||
|
- generic [ref=e225]: 17.11.2014
|
||||||
|
- generic [ref=e226]: 00:11:00
|
||||||
|
- cell [ref=e227]:
|
||||||
|
- link [ref=e228] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/contact/edit/edit/0001-ac11000b-546a252d-e23f-7dceef9d
|
||||||
|
- img [ref=e229]
|
||||||
|
- row "Bestes von Hier - Bio BGmbH Hauptsitz Münster Heinz Alder halder@bestesvonhier.de 24.01.2013 00:01:00" [ref=e231]:
|
||||||
|
- cell "Bestes von Hier - Bio BGmbH Hauptsitz Münster Heinz Alder halder@bestesvonhier.de" [ref=e232]:
|
||||||
|
- generic [ref=e233]: Bestes von Hier - Bio BGmbH Hauptsitz Münster Heinz Alder
|
||||||
|
- generic [ref=e234]: halder@bestesvonhier.de
|
||||||
|
- cell "24.01.2013 00:01:00" [ref=e235]:
|
||||||
|
- generic [ref=e236]: 24.01.2013
|
||||||
|
- generic [ref=e237]: 00:01:00
|
||||||
|
- cell [ref=e238]:
|
||||||
|
- link [ref=e239] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/contact/edit/edit/0001-00000000-50e1c4cc-4f7e-7a293d0f
|
||||||
|
- img [ref=e240]
|
||||||
|
- row "Bestes von Hier - Bio BGmbH Hauptsitz Münster Ursula Ammann uammann@bestesvonhier.de 24.01.2013 00:01:00" [ref=e242]:
|
||||||
|
- cell "Bestes von Hier - Bio BGmbH Hauptsitz Münster Ursula Ammann uammann@bestesvonhier.de" [ref=e243]:
|
||||||
|
- generic [ref=e244]: Bestes von Hier - Bio BGmbH Hauptsitz Münster Ursula Ammann
|
||||||
|
- generic [ref=e245]: uammann@bestesvonhier.de
|
||||||
|
- cell "24.01.2013 00:01:00" [ref=e246]:
|
||||||
|
- generic [ref=e247]: 24.01.2013
|
||||||
|
- generic [ref=e248]: 00:01:00
|
||||||
|
- cell [ref=e249]:
|
||||||
|
- link [ref=e250] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/contact/edit/edit/0001-00000000-50e1c4cc-679b-7123sd21
|
||||||
|
- img [ref=e251]
|
||||||
|
- row "Bestes von Hier - Bio BGmbH Hauptsitz Münster Roland Baum rbaum@bestesvonhier.de 24.01.2013 00:01:00" [ref=e253]:
|
||||||
|
- cell "Bestes von Hier - Bio BGmbH Hauptsitz Münster Roland Baum rbaum@bestesvonhier.de" [ref=e254]:
|
||||||
|
- generic [ref=e255]: Bestes von Hier - Bio BGmbH Hauptsitz Münster Roland Baum
|
||||||
|
- generic [ref=e256]: rbaum@bestesvonhier.de
|
||||||
|
- cell "24.01.2013 00:01:00" [ref=e257]:
|
||||||
|
- generic [ref=e258]: 24.01.2013
|
||||||
|
- generic [ref=e259]: 00:01:00
|
||||||
|
- cell [ref=e260]:
|
||||||
|
- link [ref=e261] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/contact/edit/edit/0001-00000000-50e1c4cc-7271-ae854c8c
|
||||||
|
- img [ref=e262]
|
||||||
|
- row "Bestes von Hier - Bio BGmbH Hauptsitz Münster Dave Beglinger dbeglinger@bestesvonhier.de 24.01.2013 00:01:00" [ref=e264]:
|
||||||
|
- cell "Bestes von Hier - Bio BGmbH Hauptsitz Münster Dave Beglinger dbeglinger@bestesvonhier.de" [ref=e265]:
|
||||||
|
- generic [ref=e266]: Bestes von Hier - Bio BGmbH Hauptsitz Münster Dave Beglinger
|
||||||
|
- generic [ref=e267]: dbeglinger@bestesvonhier.de
|
||||||
|
- cell "24.01.2013 00:01:00" [ref=e268]:
|
||||||
|
- generic [ref=e269]: 24.01.2013
|
||||||
|
- generic [ref=e270]: 00:01:00
|
||||||
|
- cell [ref=e271]:
|
||||||
|
- link [ref=e272] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/contact/edit/edit/0001-00000000-50e1c4cc-7670-5cb833b6
|
||||||
|
- img [ref=e273]
|
||||||
|
- row "Bestes von Hier - Bio BGmbH Hauptsitz Münster Thomas Beier tbeier@bestesvonhier.de 24.01.2013 00:01:00" [ref=e275]:
|
||||||
|
- cell "Bestes von Hier - Bio BGmbH Hauptsitz Münster Thomas Beier tbeier@bestesvonhier.de" [ref=e276]:
|
||||||
|
- generic [ref=e277]: Bestes von Hier - Bio BGmbH Hauptsitz Münster Thomas Beier
|
||||||
|
- generic [ref=e278]: tbeier@bestesvonhier.de
|
||||||
|
- cell "24.01.2013 00:01:00" [ref=e279]:
|
||||||
|
- generic [ref=e280]: 24.01.2013
|
||||||
|
- generic [ref=e281]: 00:01:00
|
||||||
|
- cell [ref=e282]:
|
||||||
|
- link [ref=e283] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/contact/edit/edit/0001-00000000-50e1c4cc-7aaf-1ce4e96f
|
||||||
|
- img [ref=e284]
|
||||||
|
- row "Bestes von Hier - Bio BGmbH Hauptsitz Münster Markus Breu mbreu@bestesvonhier.de 24.01.2013 00:01:00" [ref=e286]:
|
||||||
|
- cell "Bestes von Hier - Bio BGmbH Hauptsitz Münster Markus Breu mbreu@bestesvonhier.de" [ref=e287]:
|
||||||
|
- generic [ref=e288]: Bestes von Hier - Bio BGmbH Hauptsitz Münster Markus Breu
|
||||||
|
- generic [ref=e289]: mbreu@bestesvonhier.de
|
||||||
|
- cell "24.01.2013 00:01:00" [ref=e290]:
|
||||||
|
- generic [ref=e291]: 24.01.2013
|
||||||
|
- generic [ref=e292]: 00:01:00
|
||||||
|
- cell [ref=e293]:
|
||||||
|
- link [ref=e294] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/contact/edit/edit/0001-00000000-50e1c4cc-8133-fdf9dec3
|
||||||
|
- img [ref=e295]
|
||||||
|
- row "Bestes von Hier - Bio BGmbH Hauptsitz Münster Andrea Burri aburri@bestesvonhier.de 24.01.2013 00:01:00" [ref=e297]:
|
||||||
|
- cell "Bestes von Hier - Bio BGmbH Hauptsitz Münster Andrea Burri aburri@bestesvonhier.de" [ref=e298]:
|
||||||
|
- generic [ref=e299]: Bestes von Hier - Bio BGmbH Hauptsitz Münster Andrea Burri
|
||||||
|
- generic [ref=e300]: aburri@bestesvonhier.de
|
||||||
|
- cell "24.01.2013 00:01:00" [ref=e301]:
|
||||||
|
- generic [ref=e302]: 24.01.2013
|
||||||
|
- generic [ref=e303]: 00:01:00
|
||||||
|
- cell [ref=e304]:
|
||||||
|
- link [ref=e305] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/contact/edit/edit/0001-00000000-50e1c4cc-8ba0-00764e94
|
||||||
|
- img [ref=e306]
|
||||||
|
- row "Bestes von Hier - Bio BGmbH Hauptsitz Münster Catia Fari cfari@bestesvonhier.de 24.01.2013 00:01:00" [ref=e308]:
|
||||||
|
- cell "Bestes von Hier - Bio BGmbH Hauptsitz Münster Catia Fari cfari@bestesvonhier.de" [ref=e309]:
|
||||||
|
- generic [ref=e310]: Bestes von Hier - Bio BGmbH Hauptsitz Münster Catia Fari
|
||||||
|
- generic [ref=e311]: cfari@bestesvonhier.de
|
||||||
|
- cell "24.01.2013 00:01:00" [ref=e312]:
|
||||||
|
- generic [ref=e313]: 24.01.2013
|
||||||
|
- generic [ref=e314]: 00:01:00
|
||||||
|
- cell [ref=e315]:
|
||||||
|
- link [ref=e316] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/contact/edit/edit/0001-00000000-50e1c4cc-920a-2bcd7303
|
||||||
|
- img [ref=e317]
|
||||||
|
- generic [ref=e319]:
|
||||||
|
- heading "Neue Aufträge" [level=2] [ref=e322]
|
||||||
|
- table:
|
||||||
|
- rowgroup
|
||||||
|
- generic [ref=e325]:
|
||||||
|
- heading "KI Assistent (ollama · qwen2.5-coder:7b)" [level=2] [ref=e328]:
|
||||||
|
- img [ref=e329]
|
||||||
|
- text: KI Assistent
|
||||||
|
- generic [ref=e331]: (ollama · qwen2.5-coder:7b)
|
||||||
|
- paragraph [ref=e334]: Stellen Sie eine Frage oder geben Sie einen Befehl ein...
|
||||||
|
- generic [ref=e336]:
|
||||||
|
- textbox "Nachricht eingeben..." [ref=e337]
|
||||||
|
- button "Senden" [disabled] [ref=e338]:
|
||||||
|
- img [ref=e339]
|
||||||
|
- text: Senden
|
||||||
|
- region "Symfony Web Debug Toolbar" [ref=e341]:
|
||||||
|
- generic [ref=e344]:
|
||||||
|
- link "200 Redirect @ psc_backend_dashboard_index" [ref=e346] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/8cab8d?panel=request
|
||||||
|
- generic [ref=e347]:
|
||||||
|
- generic [ref=e348]: "200"
|
||||||
|
- img "Redirect" [ref=e350]
|
||||||
|
- generic [ref=e353]: "@"
|
||||||
|
- generic [ref=e354]: psc_backend_dashboard_index
|
||||||
|
- link "982 ms" [ref=e356] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/8cab8d?panel=time
|
||||||
|
- generic [ref=e357]:
|
||||||
|
- generic [ref=e358]: "982"
|
||||||
|
- generic [ref=e359]: ms
|
||||||
|
- link "110.5 MiB" [ref=e361] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/8cab8d?panel=time
|
||||||
|
- generic [ref=e362]:
|
||||||
|
- generic [ref=e363]: "110.5"
|
||||||
|
- generic [ref=e364]: MiB
|
||||||
|
- generic [ref=e366] [cursor=pointer]:
|
||||||
|
- img [ref=e367]
|
||||||
|
- generic [ref=e371]: "1"
|
||||||
|
- link "Logger 400" [ref=e373] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/8cab8d?panel=logger
|
||||||
|
- generic [ref=e374]:
|
||||||
|
- img "Logger" [ref=e375]
|
||||||
|
- generic [ref=e379]: "400"
|
||||||
|
- link "Cache 16 in 0.23 ms" [ref=e381] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/8cab8d?panel=cache
|
||||||
|
- generic [ref=e382]:
|
||||||
|
- img "Cache" [ref=e383]
|
||||||
|
- generic [ref=e388]: "16"
|
||||||
|
- generic [ref=e389]: in 0.23 ms
|
||||||
|
- link "47" [ref=e391] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/8cab8d?panel=translation
|
||||||
|
- generic [ref=e392]:
|
||||||
|
- img [ref=e393]
|
||||||
|
- generic [ref=e398]: "47"
|
||||||
|
- link "Security 1" [ref=e400] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/8cab8d?panel=security
|
||||||
|
- generic [ref=e401]:
|
||||||
|
- img "Security" [ref=e402]
|
||||||
|
- generic [ref=e406]: "1"
|
||||||
|
- link "Twig 153 ms" [ref=e408] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/8cab8d?panel=twig
|
||||||
|
- generic [ref=e409]:
|
||||||
|
- img "Twig" [ref=e410]
|
||||||
|
- generic [ref=e414]: "153"
|
||||||
|
- generic [ref=e415]: ms
|
||||||
|
- link "16 in 29.20 ms" [ref=e417] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/8cab8d?panel=db
|
||||||
|
- generic [ref=e418]:
|
||||||
|
- img [ref=e419]
|
||||||
|
- generic [ref=e424]: "16"
|
||||||
|
- generic [ref=e425]: in 29.20 ms
|
||||||
|
- link "52 in 30.26 ms" [ref=e427] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/8cab8d?panel=mongodb
|
||||||
|
- generic [ref=e428]:
|
||||||
|
- img [ref=e429]
|
||||||
|
- generic [ref=e431]: "52"
|
||||||
|
- generic [ref=e432]: in 30.26 ms
|
||||||
|
- 'link "S: 0 D: 0" [ref=e434] [cursor=pointer]':
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/8cab8d?panel=jms_serializer
|
||||||
|
- generic [ref=e435]:
|
||||||
|
- img [ref=e436]
|
||||||
|
- generic [ref=e438]: "S:"
|
||||||
|
- generic [ref=e439]: "0"
|
||||||
|
- generic [ref=e440]: "D:"
|
||||||
|
- generic [ref=e441]: "0"
|
||||||
|
- link "Symfony 7.4.6" [ref=e443] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/8cab8d?panel=config
|
||||||
|
- generic [ref=e444]:
|
||||||
|
- img "Symfony" [ref=e446]
|
||||||
|
- generic [ref=e448]: 7.4.6
|
||||||
|
- button [expanded] [ref=e449] [cursor=pointer]:
|
||||||
|
- generic "Close Toolbar" [ref=e450]:
|
||||||
|
- img [ref=e451]
|
||||||
204
src/new/.playwright-mcp/page-2026-06-01T18-04-15-205Z.yml
Normal file
204
src/new/.playwright-mcp/page-2026-06-01T18-04-15-205Z.yml
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- generic [ref=e4]:
|
||||||
|
- img [ref=e6]
|
||||||
|
- generic [ref=e8]:
|
||||||
|
- heading "Migration" [level=3] [ref=e9]
|
||||||
|
- paragraph [ref=e10]: Ausführen
|
||||||
|
- generic [ref=e11]: System aktuell
|
||||||
|
- table [ref=e13]:
|
||||||
|
- rowgroup [ref=e14]:
|
||||||
|
- row "Name Ausgeführt?" [ref=e15]:
|
||||||
|
- columnheader "Name" [ref=e16]
|
||||||
|
- columnheader "Ausgeführt?" [ref=e17]
|
||||||
|
- rowgroup [ref=e18]:
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201810051543 Ja" [ref=e19]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201810051543" [ref=e20]
|
||||||
|
- cell "Ja" [ref=e21]:
|
||||||
|
- generic [ref=e22]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201810061259 Ja" [ref=e23]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201810061259" [ref=e24]
|
||||||
|
- cell "Ja" [ref=e25]:
|
||||||
|
- generic [ref=e26]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201810152153 Ja" [ref=e27]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201810152153" [ref=e28]
|
||||||
|
- cell "Ja" [ref=e29]:
|
||||||
|
- generic [ref=e30]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201810242020 Ja" [ref=e31]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201810242020" [ref=e32]
|
||||||
|
- cell "Ja" [ref=e33]:
|
||||||
|
- generic [ref=e34]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201811271538 Ja" [ref=e35]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201811271538" [ref=e36]
|
||||||
|
- cell "Ja" [ref=e37]:
|
||||||
|
- generic [ref=e38]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201903022247 Ja" [ref=e39]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201903022247" [ref=e40]
|
||||||
|
- cell "Ja" [ref=e41]:
|
||||||
|
- generic [ref=e42]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201903121042 Ja" [ref=e43]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201903121042" [ref=e44]
|
||||||
|
- cell "Ja" [ref=e45]:
|
||||||
|
- generic [ref=e46]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201904281101 Ja" [ref=e47]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201904281101" [ref=e48]
|
||||||
|
- cell "Ja" [ref=e49]:
|
||||||
|
- generic [ref=e50]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20190506144710 Ja" [ref=e51]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20190506144710" [ref=e52]
|
||||||
|
- cell "Ja" [ref=e53]:
|
||||||
|
- generic [ref=e54]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20190612162510 Ja" [ref=e55]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20190612162510" [ref=e56]
|
||||||
|
- cell "Ja" [ref=e57]:
|
||||||
|
- generic [ref=e58]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20190708211200 Ja" [ref=e59]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20190708211200" [ref=e60]
|
||||||
|
- cell "Ja" [ref=e61]:
|
||||||
|
- generic [ref=e62]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201909031633 Ja" [ref=e63]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201909031633" [ref=e64]
|
||||||
|
- cell "Ja" [ref=e65]:
|
||||||
|
- generic [ref=e66]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202002151056 Ja" [ref=e67]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202002151056" [ref=e68]
|
||||||
|
- cell "Ja" [ref=e69]:
|
||||||
|
- generic [ref=e70]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202008071031 Ja" [ref=e71]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202008071031" [ref=e72]
|
||||||
|
- cell "Ja" [ref=e73]:
|
||||||
|
- generic [ref=e74]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202010142145 Ja" [ref=e75]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202010142145" [ref=e76]
|
||||||
|
- cell "Ja" [ref=e77]:
|
||||||
|
- generic [ref=e78]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202011021352 Ja" [ref=e79]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202011021352" [ref=e80]
|
||||||
|
- cell "Ja" [ref=e81]:
|
||||||
|
- generic [ref=e82]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202011131532 Ja" [ref=e83]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202011131532" [ref=e84]
|
||||||
|
- cell "Ja" [ref=e85]:
|
||||||
|
- generic [ref=e86]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202012152132 Ja" [ref=e87]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202012152132" [ref=e88]
|
||||||
|
- cell "Ja" [ref=e89]:
|
||||||
|
- generic [ref=e90]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202101041346 Ja" [ref=e91]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202101041346" [ref=e92]
|
||||||
|
- cell "Ja" [ref=e93]:
|
||||||
|
- generic [ref=e94]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202206051128 Ja" [ref=e95]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202206051128" [ref=e96]
|
||||||
|
- cell "Ja" [ref=e97]:
|
||||||
|
- generic [ref=e98]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202210151952 Ja" [ref=e99]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202210151952" [ref=e100]
|
||||||
|
- cell "Ja" [ref=e101]:
|
||||||
|
- generic [ref=e102]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202303021407 Ja" [ref=e103]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202303021407" [ref=e104]
|
||||||
|
- cell "Ja" [ref=e105]:
|
||||||
|
- generic [ref=e106]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202304111643 Ja" [ref=e107]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202304111643" [ref=e108]
|
||||||
|
- cell "Ja" [ref=e109]:
|
||||||
|
- generic [ref=e110]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202306261451 Ja" [ref=e111]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202306261451" [ref=e112]
|
||||||
|
- cell "Ja" [ref=e113]:
|
||||||
|
- generic [ref=e114]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202310011140 Ja" [ref=e115]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202310011140" [ref=e116]
|
||||||
|
- cell "Ja" [ref=e117]:
|
||||||
|
- generic [ref=e118]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202401151137 Ja" [ref=e119]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202401151137" [ref=e120]
|
||||||
|
- cell "Ja" [ref=e121]:
|
||||||
|
- generic [ref=e122]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202404031556 Ja" [ref=e123]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202404031556" [ref=e124]
|
||||||
|
- cell "Ja" [ref=e125]:
|
||||||
|
- generic [ref=e126]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202404220850 Ja" [ref=e127]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202404220850" [ref=e128]
|
||||||
|
- cell "Ja" [ref=e129]:
|
||||||
|
- generic [ref=e130]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202411271406 Ja" [ref=e131]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202411271406" [ref=e132]
|
||||||
|
- cell "Ja" [ref=e133]:
|
||||||
|
- generic [ref=e134]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250303120812 Ja" [ref=e135]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250303120812" [ref=e136]
|
||||||
|
- cell "Ja" [ref=e137]:
|
||||||
|
- generic [ref=e138]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250303120815 Ja" [ref=e139]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250303120815" [ref=e140]
|
||||||
|
- cell "Ja" [ref=e141]:
|
||||||
|
- generic [ref=e142]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250304145512 Ja" [ref=e143]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250304145512" [ref=e144]
|
||||||
|
- cell "Ja" [ref=e145]:
|
||||||
|
- generic [ref=e146]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250313154423 Ja" [ref=e147]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250313154423" [ref=e148]
|
||||||
|
- cell "Ja" [ref=e149]:
|
||||||
|
- generic [ref=e150]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250613181223 Ja" [ref=e151]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250613181223" [ref=e152]
|
||||||
|
- cell "Ja" [ref=e153]:
|
||||||
|
- generic [ref=e154]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250702215721 Ja" [ref=e155]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250702215721" [ref=e156]
|
||||||
|
- cell "Ja" [ref=e157]:
|
||||||
|
- generic [ref=e158]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20251124132556 Ja" [ref=e159]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20251124132556" [ref=e160]
|
||||||
|
- cell "Ja" [ref=e161]:
|
||||||
|
- generic [ref=e162]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20251202130922 Ja" [ref=e163]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20251202130922" [ref=e164]
|
||||||
|
- cell "Ja" [ref=e165]:
|
||||||
|
- generic [ref=e166]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20252402130922 Ja" [ref=e167]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20252402130922" [ref=e168]
|
||||||
|
- cell "Ja" [ref=e169]:
|
||||||
|
- generic [ref=e170]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260217102512 Ja" [ref=e171]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260217102512" [ref=e172]
|
||||||
|
- cell "Ja" [ref=e173]:
|
||||||
|
- generic [ref=e174]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260303100000 Ja" [ref=e175]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260303100000" [ref=e176]
|
||||||
|
- cell "Ja" [ref=e177]:
|
||||||
|
- generic [ref=e178]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100000 Ja" [ref=e179]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100000" [ref=e180]
|
||||||
|
- cell "Ja" [ref=e181]:
|
||||||
|
- generic [ref=e182]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100001 Ja" [ref=e183]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100001" [ref=e184]
|
||||||
|
- cell "Ja" [ref=e185]:
|
||||||
|
- generic [ref=e186]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100002 Ja" [ref=e187]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100002" [ref=e188]
|
||||||
|
- cell "Ja" [ref=e189]:
|
||||||
|
- generic [ref=e190]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260420120000 Ja" [ref=e191]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260420120000" [ref=e192]
|
||||||
|
- cell "Ja" [ref=e193]:
|
||||||
|
- generic [ref=e194]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260601120000 Ja" [ref=e195]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260601120000" [ref=e196]
|
||||||
|
- cell "Ja" [ref=e197]:
|
||||||
|
- generic [ref=e198]: Ja
|
||||||
|
- region "Symfony Web Debug Toolbar" [ref=e199]:
|
||||||
|
- generic [ref=e202]:
|
||||||
|
- link "Symfony Loading…" [ref=e204] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/6a6f63?panel=request
|
||||||
|
- generic [ref=e205]:
|
||||||
|
- img "Symfony" [ref=e206]
|
||||||
|
- generic [ref=e208]: Loading…
|
||||||
|
- button [expanded] [ref=e209] [cursor=pointer]:
|
||||||
|
- generic "Close Toolbar" [ref=e210]:
|
||||||
|
- img [ref=e211]
|
||||||
204
src/new/.playwright-mcp/page-2026-06-01T18-13-01-261Z.yml
Normal file
204
src/new/.playwright-mcp/page-2026-06-01T18-13-01-261Z.yml
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- generic [ref=e4]:
|
||||||
|
- img [ref=e6]
|
||||||
|
- generic [ref=e8]:
|
||||||
|
- heading "Migration" [level=3] [ref=e9]
|
||||||
|
- paragraph [ref=e10]: Ausführen
|
||||||
|
- generic [ref=e11]: System aktuell
|
||||||
|
- table [ref=e13]:
|
||||||
|
- rowgroup [ref=e14]:
|
||||||
|
- row "Name Ausgeführt?" [ref=e15]:
|
||||||
|
- columnheader "Name" [ref=e16]
|
||||||
|
- columnheader "Ausgeführt?" [ref=e17]
|
||||||
|
- rowgroup [ref=e18]:
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201810051543 Ja" [ref=e19]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201810051543" [ref=e20]
|
||||||
|
- cell "Ja" [ref=e21]:
|
||||||
|
- generic [ref=e22]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201810061259 Ja" [ref=e23]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201810061259" [ref=e24]
|
||||||
|
- cell "Ja" [ref=e25]:
|
||||||
|
- generic [ref=e26]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201810152153 Ja" [ref=e27]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201810152153" [ref=e28]
|
||||||
|
- cell "Ja" [ref=e29]:
|
||||||
|
- generic [ref=e30]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201810242020 Ja" [ref=e31]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201810242020" [ref=e32]
|
||||||
|
- cell "Ja" [ref=e33]:
|
||||||
|
- generic [ref=e34]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201811271538 Ja" [ref=e35]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201811271538" [ref=e36]
|
||||||
|
- cell "Ja" [ref=e37]:
|
||||||
|
- generic [ref=e38]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201903022247 Ja" [ref=e39]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201903022247" [ref=e40]
|
||||||
|
- cell "Ja" [ref=e41]:
|
||||||
|
- generic [ref=e42]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201903121042 Ja" [ref=e43]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201903121042" [ref=e44]
|
||||||
|
- cell "Ja" [ref=e45]:
|
||||||
|
- generic [ref=e46]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201904281101 Ja" [ref=e47]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201904281101" [ref=e48]
|
||||||
|
- cell "Ja" [ref=e49]:
|
||||||
|
- generic [ref=e50]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20190506144710 Ja" [ref=e51]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20190506144710" [ref=e52]
|
||||||
|
- cell "Ja" [ref=e53]:
|
||||||
|
- generic [ref=e54]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20190612162510 Ja" [ref=e55]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20190612162510" [ref=e56]
|
||||||
|
- cell "Ja" [ref=e57]:
|
||||||
|
- generic [ref=e58]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20190708211200 Ja" [ref=e59]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20190708211200" [ref=e60]
|
||||||
|
- cell "Ja" [ref=e61]:
|
||||||
|
- generic [ref=e62]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201909031633 Ja" [ref=e63]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201909031633" [ref=e64]
|
||||||
|
- cell "Ja" [ref=e65]:
|
||||||
|
- generic [ref=e66]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202002151056 Ja" [ref=e67]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202002151056" [ref=e68]
|
||||||
|
- cell "Ja" [ref=e69]:
|
||||||
|
- generic [ref=e70]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202008071031 Ja" [ref=e71]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202008071031" [ref=e72]
|
||||||
|
- cell "Ja" [ref=e73]:
|
||||||
|
- generic [ref=e74]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202010142145 Ja" [ref=e75]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202010142145" [ref=e76]
|
||||||
|
- cell "Ja" [ref=e77]:
|
||||||
|
- generic [ref=e78]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202011021352 Ja" [ref=e79]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202011021352" [ref=e80]
|
||||||
|
- cell "Ja" [ref=e81]:
|
||||||
|
- generic [ref=e82]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202011131532 Ja" [ref=e83]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202011131532" [ref=e84]
|
||||||
|
- cell "Ja" [ref=e85]:
|
||||||
|
- generic [ref=e86]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202012152132 Ja" [ref=e87]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202012152132" [ref=e88]
|
||||||
|
- cell "Ja" [ref=e89]:
|
||||||
|
- generic [ref=e90]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202101041346 Ja" [ref=e91]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202101041346" [ref=e92]
|
||||||
|
- cell "Ja" [ref=e93]:
|
||||||
|
- generic [ref=e94]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202206051128 Ja" [ref=e95]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202206051128" [ref=e96]
|
||||||
|
- cell "Ja" [ref=e97]:
|
||||||
|
- generic [ref=e98]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202210151952 Ja" [ref=e99]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202210151952" [ref=e100]
|
||||||
|
- cell "Ja" [ref=e101]:
|
||||||
|
- generic [ref=e102]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202303021407 Ja" [ref=e103]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202303021407" [ref=e104]
|
||||||
|
- cell "Ja" [ref=e105]:
|
||||||
|
- generic [ref=e106]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202304111643 Ja" [ref=e107]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202304111643" [ref=e108]
|
||||||
|
- cell "Ja" [ref=e109]:
|
||||||
|
- generic [ref=e110]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202306261451 Ja" [ref=e111]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202306261451" [ref=e112]
|
||||||
|
- cell "Ja" [ref=e113]:
|
||||||
|
- generic [ref=e114]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202310011140 Ja" [ref=e115]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202310011140" [ref=e116]
|
||||||
|
- cell "Ja" [ref=e117]:
|
||||||
|
- generic [ref=e118]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202401151137 Ja" [ref=e119]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202401151137" [ref=e120]
|
||||||
|
- cell "Ja" [ref=e121]:
|
||||||
|
- generic [ref=e122]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202404031556 Ja" [ref=e123]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202404031556" [ref=e124]
|
||||||
|
- cell "Ja" [ref=e125]:
|
||||||
|
- generic [ref=e126]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202404220850 Ja" [ref=e127]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202404220850" [ref=e128]
|
||||||
|
- cell "Ja" [ref=e129]:
|
||||||
|
- generic [ref=e130]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202411271406 Ja" [ref=e131]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202411271406" [ref=e132]
|
||||||
|
- cell "Ja" [ref=e133]:
|
||||||
|
- generic [ref=e134]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250303120812 Ja" [ref=e135]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250303120812" [ref=e136]
|
||||||
|
- cell "Ja" [ref=e137]:
|
||||||
|
- generic [ref=e138]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250303120815 Ja" [ref=e139]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250303120815" [ref=e140]
|
||||||
|
- cell "Ja" [ref=e141]:
|
||||||
|
- generic [ref=e142]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250304145512 Ja" [ref=e143]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250304145512" [ref=e144]
|
||||||
|
- cell "Ja" [ref=e145]:
|
||||||
|
- generic [ref=e146]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250313154423 Ja" [ref=e147]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250313154423" [ref=e148]
|
||||||
|
- cell "Ja" [ref=e149]:
|
||||||
|
- generic [ref=e150]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250613181223 Ja" [ref=e151]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250613181223" [ref=e152]
|
||||||
|
- cell "Ja" [ref=e153]:
|
||||||
|
- generic [ref=e154]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250702215721 Ja" [ref=e155]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250702215721" [ref=e156]
|
||||||
|
- cell "Ja" [ref=e157]:
|
||||||
|
- generic [ref=e158]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20251124132556 Ja" [ref=e159]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20251124132556" [ref=e160]
|
||||||
|
- cell "Ja" [ref=e161]:
|
||||||
|
- generic [ref=e162]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20251202130922 Ja" [ref=e163]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20251202130922" [ref=e164]
|
||||||
|
- cell "Ja" [ref=e165]:
|
||||||
|
- generic [ref=e166]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20252402130922 Ja" [ref=e167]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20252402130922" [ref=e168]
|
||||||
|
- cell "Ja" [ref=e169]:
|
||||||
|
- generic [ref=e170]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260217102512 Ja" [ref=e171]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260217102512" [ref=e172]
|
||||||
|
- cell "Ja" [ref=e173]:
|
||||||
|
- generic [ref=e174]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260303100000 Ja" [ref=e175]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260303100000" [ref=e176]
|
||||||
|
- cell "Ja" [ref=e177]:
|
||||||
|
- generic [ref=e178]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100000 Ja" [ref=e179]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100000" [ref=e180]
|
||||||
|
- cell "Ja" [ref=e181]:
|
||||||
|
- generic [ref=e182]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100001 Ja" [ref=e183]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100001" [ref=e184]
|
||||||
|
- cell "Ja" [ref=e185]:
|
||||||
|
- generic [ref=e186]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100002 Ja" [ref=e187]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100002" [ref=e188]
|
||||||
|
- cell "Ja" [ref=e189]:
|
||||||
|
- generic [ref=e190]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260420120000 Ja" [ref=e191]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260420120000" [ref=e192]
|
||||||
|
- cell "Ja" [ref=e193]:
|
||||||
|
- generic [ref=e194]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260601120000 Ja" [ref=e195]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260601120000" [ref=e196]
|
||||||
|
- cell "Ja" [ref=e197]:
|
||||||
|
- generic [ref=e198]: Ja
|
||||||
|
- region "Symfony Web Debug Toolbar" [ref=e199]:
|
||||||
|
- generic [ref=e202]:
|
||||||
|
- link "Symfony Loading…" [ref=e204] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/adbc43?panel=request
|
||||||
|
- generic [ref=e205]:
|
||||||
|
- img "Symfony" [ref=e206]
|
||||||
|
- generic [ref=e208]: Loading…
|
||||||
|
- button [expanded] [ref=e209] [cursor=pointer]:
|
||||||
|
- generic "Close Toolbar" [ref=e210]:
|
||||||
|
- img [ref=e211]
|
||||||
204
src/new/.playwright-mcp/page-2026-06-01T18-22-25-434Z.yml
Normal file
204
src/new/.playwright-mcp/page-2026-06-01T18-22-25-434Z.yml
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- generic [ref=e4]:
|
||||||
|
- img [ref=e6]
|
||||||
|
- generic [ref=e8]:
|
||||||
|
- heading "Migration" [level=3] [ref=e9]
|
||||||
|
- paragraph [ref=e10]: Ausführen
|
||||||
|
- generic [ref=e11]: System aktuell
|
||||||
|
- table [ref=e13]:
|
||||||
|
- rowgroup [ref=e14]:
|
||||||
|
- row "Name Ausgeführt?" [ref=e15]:
|
||||||
|
- columnheader "Name" [ref=e16]
|
||||||
|
- columnheader "Ausgeführt?" [ref=e17]
|
||||||
|
- rowgroup [ref=e18]:
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201810051543 Ja" [ref=e19]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201810051543" [ref=e20]
|
||||||
|
- cell "Ja" [ref=e21]:
|
||||||
|
- generic [ref=e22]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201810061259 Ja" [ref=e23]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201810061259" [ref=e24]
|
||||||
|
- cell "Ja" [ref=e25]:
|
||||||
|
- generic [ref=e26]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201810152153 Ja" [ref=e27]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201810152153" [ref=e28]
|
||||||
|
- cell "Ja" [ref=e29]:
|
||||||
|
- generic [ref=e30]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201810242020 Ja" [ref=e31]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201810242020" [ref=e32]
|
||||||
|
- cell "Ja" [ref=e33]:
|
||||||
|
- generic [ref=e34]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201811271538 Ja" [ref=e35]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201811271538" [ref=e36]
|
||||||
|
- cell "Ja" [ref=e37]:
|
||||||
|
- generic [ref=e38]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201903022247 Ja" [ref=e39]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201903022247" [ref=e40]
|
||||||
|
- cell "Ja" [ref=e41]:
|
||||||
|
- generic [ref=e42]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201903121042 Ja" [ref=e43]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201903121042" [ref=e44]
|
||||||
|
- cell "Ja" [ref=e45]:
|
||||||
|
- generic [ref=e46]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201904281101 Ja" [ref=e47]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201904281101" [ref=e48]
|
||||||
|
- cell "Ja" [ref=e49]:
|
||||||
|
- generic [ref=e50]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20190506144710 Ja" [ref=e51]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20190506144710" [ref=e52]
|
||||||
|
- cell "Ja" [ref=e53]:
|
||||||
|
- generic [ref=e54]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20190612162510 Ja" [ref=e55]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20190612162510" [ref=e56]
|
||||||
|
- cell "Ja" [ref=e57]:
|
||||||
|
- generic [ref=e58]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20190708211200 Ja" [ref=e59]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20190708211200" [ref=e60]
|
||||||
|
- cell "Ja" [ref=e61]:
|
||||||
|
- generic [ref=e62]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201909031633 Ja" [ref=e63]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201909031633" [ref=e64]
|
||||||
|
- cell "Ja" [ref=e65]:
|
||||||
|
- generic [ref=e66]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202002151056 Ja" [ref=e67]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202002151056" [ref=e68]
|
||||||
|
- cell "Ja" [ref=e69]:
|
||||||
|
- generic [ref=e70]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202008071031 Ja" [ref=e71]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202008071031" [ref=e72]
|
||||||
|
- cell "Ja" [ref=e73]:
|
||||||
|
- generic [ref=e74]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202010142145 Ja" [ref=e75]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202010142145" [ref=e76]
|
||||||
|
- cell "Ja" [ref=e77]:
|
||||||
|
- generic [ref=e78]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202011021352 Ja" [ref=e79]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202011021352" [ref=e80]
|
||||||
|
- cell "Ja" [ref=e81]:
|
||||||
|
- generic [ref=e82]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202011131532 Ja" [ref=e83]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202011131532" [ref=e84]
|
||||||
|
- cell "Ja" [ref=e85]:
|
||||||
|
- generic [ref=e86]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202012152132 Ja" [ref=e87]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202012152132" [ref=e88]
|
||||||
|
- cell "Ja" [ref=e89]:
|
||||||
|
- generic [ref=e90]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202101041346 Ja" [ref=e91]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202101041346" [ref=e92]
|
||||||
|
- cell "Ja" [ref=e93]:
|
||||||
|
- generic [ref=e94]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202206051128 Ja" [ref=e95]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202206051128" [ref=e96]
|
||||||
|
- cell "Ja" [ref=e97]:
|
||||||
|
- generic [ref=e98]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202210151952 Ja" [ref=e99]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202210151952" [ref=e100]
|
||||||
|
- cell "Ja" [ref=e101]:
|
||||||
|
- generic [ref=e102]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202303021407 Ja" [ref=e103]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202303021407" [ref=e104]
|
||||||
|
- cell "Ja" [ref=e105]:
|
||||||
|
- generic [ref=e106]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202304111643 Ja" [ref=e107]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202304111643" [ref=e108]
|
||||||
|
- cell "Ja" [ref=e109]:
|
||||||
|
- generic [ref=e110]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202306261451 Ja" [ref=e111]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202306261451" [ref=e112]
|
||||||
|
- cell "Ja" [ref=e113]:
|
||||||
|
- generic [ref=e114]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202310011140 Ja" [ref=e115]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202310011140" [ref=e116]
|
||||||
|
- cell "Ja" [ref=e117]:
|
||||||
|
- generic [ref=e118]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202401151137 Ja" [ref=e119]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202401151137" [ref=e120]
|
||||||
|
- cell "Ja" [ref=e121]:
|
||||||
|
- generic [ref=e122]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202404031556 Ja" [ref=e123]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202404031556" [ref=e124]
|
||||||
|
- cell "Ja" [ref=e125]:
|
||||||
|
- generic [ref=e126]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202404220850 Ja" [ref=e127]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202404220850" [ref=e128]
|
||||||
|
- cell "Ja" [ref=e129]:
|
||||||
|
- generic [ref=e130]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202411271406 Ja" [ref=e131]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202411271406" [ref=e132]
|
||||||
|
- cell "Ja" [ref=e133]:
|
||||||
|
- generic [ref=e134]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250303120812 Ja" [ref=e135]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250303120812" [ref=e136]
|
||||||
|
- cell "Ja" [ref=e137]:
|
||||||
|
- generic [ref=e138]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250303120815 Ja" [ref=e139]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250303120815" [ref=e140]
|
||||||
|
- cell "Ja" [ref=e141]:
|
||||||
|
- generic [ref=e142]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250304145512 Ja" [ref=e143]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250304145512" [ref=e144]
|
||||||
|
- cell "Ja" [ref=e145]:
|
||||||
|
- generic [ref=e146]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250313154423 Ja" [ref=e147]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250313154423" [ref=e148]
|
||||||
|
- cell "Ja" [ref=e149]:
|
||||||
|
- generic [ref=e150]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250613181223 Ja" [ref=e151]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250613181223" [ref=e152]
|
||||||
|
- cell "Ja" [ref=e153]:
|
||||||
|
- generic [ref=e154]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250702215721 Ja" [ref=e155]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250702215721" [ref=e156]
|
||||||
|
- cell "Ja" [ref=e157]:
|
||||||
|
- generic [ref=e158]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20251124132556 Ja" [ref=e159]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20251124132556" [ref=e160]
|
||||||
|
- cell "Ja" [ref=e161]:
|
||||||
|
- generic [ref=e162]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20251202130922 Ja" [ref=e163]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20251202130922" [ref=e164]
|
||||||
|
- cell "Ja" [ref=e165]:
|
||||||
|
- generic [ref=e166]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20252402130922 Ja" [ref=e167]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20252402130922" [ref=e168]
|
||||||
|
- cell "Ja" [ref=e169]:
|
||||||
|
- generic [ref=e170]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260217102512 Ja" [ref=e171]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260217102512" [ref=e172]
|
||||||
|
- cell "Ja" [ref=e173]:
|
||||||
|
- generic [ref=e174]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260303100000 Ja" [ref=e175]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260303100000" [ref=e176]
|
||||||
|
- cell "Ja" [ref=e177]:
|
||||||
|
- generic [ref=e178]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100000 Ja" [ref=e179]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100000" [ref=e180]
|
||||||
|
- cell "Ja" [ref=e181]:
|
||||||
|
- generic [ref=e182]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100001 Ja" [ref=e183]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100001" [ref=e184]
|
||||||
|
- cell "Ja" [ref=e185]:
|
||||||
|
- generic [ref=e186]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100002 Ja" [ref=e187]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100002" [ref=e188]
|
||||||
|
- cell "Ja" [ref=e189]:
|
||||||
|
- generic [ref=e190]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260420120000 Ja" [ref=e191]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260420120000" [ref=e192]
|
||||||
|
- cell "Ja" [ref=e193]:
|
||||||
|
- generic [ref=e194]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260601120000 Ja" [ref=e195]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260601120000" [ref=e196]
|
||||||
|
- cell "Ja" [ref=e197]:
|
||||||
|
- generic [ref=e198]: Ja
|
||||||
|
- region "Symfony Web Debug Toolbar" [ref=e199]:
|
||||||
|
- generic [ref=e202]:
|
||||||
|
- link "Symfony Loading…" [ref=e204] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/b0f869?panel=request
|
||||||
|
- generic [ref=e205]:
|
||||||
|
- img "Symfony" [ref=e206]
|
||||||
|
- generic [ref=e208]: Loading…
|
||||||
|
- button [expanded] [ref=e209] [cursor=pointer]:
|
||||||
|
- generic "Close Toolbar" [ref=e210]:
|
||||||
|
- img [ref=e211]
|
||||||
19
src/new/.playwright-mcp/page-2026-06-01T18-38-32-701Z.yml
Normal file
19
src/new/.playwright-mcp/page-2026-06-01T18-38-32-701Z.yml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- img "Logo" [ref=e5]
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- text: "Benutzername:"
|
||||||
|
- textbox "Benutzername:" [ref=e7]
|
||||||
|
- text: "Passwort:"
|
||||||
|
- textbox "Passwort:" [ref=e8]
|
||||||
|
- button "Anmelden" [ref=e9] [cursor=pointer]
|
||||||
|
- region "Symfony Web Debug Toolbar" [ref=e10]:
|
||||||
|
- generic [ref=e13]:
|
||||||
|
- link "Symfony Loading…" [ref=e15] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/a87e6b?panel=request
|
||||||
|
- generic [ref=e16]:
|
||||||
|
- img "Symfony" [ref=e17]
|
||||||
|
- generic [ref=e19]: Loading…
|
||||||
|
- button [expanded] [ref=e20] [cursor=pointer]:
|
||||||
|
- generic "Close Toolbar" [ref=e21]:
|
||||||
|
- img [ref=e22]
|
||||||
262
src/new/.playwright-mcp/page-2026-06-01T18-38-43-680Z.yml
Normal file
262
src/new/.playwright-mcp/page-2026-06-01T18-38-43-680Z.yml
Normal file
@ -0,0 +1,262 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- generic [ref=e4]:
|
||||||
|
- img [ref=e6]
|
||||||
|
- generic [ref=e8]:
|
||||||
|
- heading "Migration" [level=3] [ref=e9]
|
||||||
|
- paragraph [ref=e10]: Ausführen
|
||||||
|
- generic [ref=e11]: System aktuell
|
||||||
|
- table [ref=e13]:
|
||||||
|
- rowgroup [ref=e14]:
|
||||||
|
- row "Name Ausgeführt?" [ref=e15]:
|
||||||
|
- columnheader "Name" [ref=e16]
|
||||||
|
- columnheader "Ausgeführt?" [ref=e17]
|
||||||
|
- rowgroup [ref=e18]:
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201810051543 Ja" [ref=e19]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201810051543" [ref=e20]
|
||||||
|
- cell "Ja" [ref=e21]:
|
||||||
|
- generic [ref=e22]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201810061259 Ja" [ref=e23]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201810061259" [ref=e24]
|
||||||
|
- cell "Ja" [ref=e25]:
|
||||||
|
- generic [ref=e26]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201810152153 Ja" [ref=e27]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201810152153" [ref=e28]
|
||||||
|
- cell "Ja" [ref=e29]:
|
||||||
|
- generic [ref=e30]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201810242020 Ja" [ref=e31]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201810242020" [ref=e32]
|
||||||
|
- cell "Ja" [ref=e33]:
|
||||||
|
- generic [ref=e34]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201811271538 Ja" [ref=e35]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201811271538" [ref=e36]
|
||||||
|
- cell "Ja" [ref=e37]:
|
||||||
|
- generic [ref=e38]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201903022247 Ja" [ref=e39]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201903022247" [ref=e40]
|
||||||
|
- cell "Ja" [ref=e41]:
|
||||||
|
- generic [ref=e42]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201903121042 Ja" [ref=e43]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201903121042" [ref=e44]
|
||||||
|
- cell "Ja" [ref=e45]:
|
||||||
|
- generic [ref=e46]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201904281101 Ja" [ref=e47]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201904281101" [ref=e48]
|
||||||
|
- cell "Ja" [ref=e49]:
|
||||||
|
- generic [ref=e50]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20190506144710 Ja" [ref=e51]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20190506144710" [ref=e52]
|
||||||
|
- cell "Ja" [ref=e53]:
|
||||||
|
- generic [ref=e54]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20190612162510 Ja" [ref=e55]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20190612162510" [ref=e56]
|
||||||
|
- cell "Ja" [ref=e57]:
|
||||||
|
- generic [ref=e58]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20190708211200 Ja" [ref=e59]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20190708211200" [ref=e60]
|
||||||
|
- cell "Ja" [ref=e61]:
|
||||||
|
- generic [ref=e62]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version201909031633 Ja" [ref=e63]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version201909031633" [ref=e64]
|
||||||
|
- cell "Ja" [ref=e65]:
|
||||||
|
- generic [ref=e66]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202002151056 Ja" [ref=e67]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202002151056" [ref=e68]
|
||||||
|
- cell "Ja" [ref=e69]:
|
||||||
|
- generic [ref=e70]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202008071031 Ja" [ref=e71]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202008071031" [ref=e72]
|
||||||
|
- cell "Ja" [ref=e73]:
|
||||||
|
- generic [ref=e74]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202010142145 Ja" [ref=e75]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202010142145" [ref=e76]
|
||||||
|
- cell "Ja" [ref=e77]:
|
||||||
|
- generic [ref=e78]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202011021352 Ja" [ref=e79]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202011021352" [ref=e80]
|
||||||
|
- cell "Ja" [ref=e81]:
|
||||||
|
- generic [ref=e82]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202011131532 Ja" [ref=e83]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202011131532" [ref=e84]
|
||||||
|
- cell "Ja" [ref=e85]:
|
||||||
|
- generic [ref=e86]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202012152132 Ja" [ref=e87]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202012152132" [ref=e88]
|
||||||
|
- cell "Ja" [ref=e89]:
|
||||||
|
- generic [ref=e90]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202101041346 Ja" [ref=e91]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202101041346" [ref=e92]
|
||||||
|
- cell "Ja" [ref=e93]:
|
||||||
|
- generic [ref=e94]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202206051128 Ja" [ref=e95]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202206051128" [ref=e96]
|
||||||
|
- cell "Ja" [ref=e97]:
|
||||||
|
- generic [ref=e98]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202210151952 Ja" [ref=e99]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202210151952" [ref=e100]
|
||||||
|
- cell "Ja" [ref=e101]:
|
||||||
|
- generic [ref=e102]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202303021407 Ja" [ref=e103]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202303021407" [ref=e104]
|
||||||
|
- cell "Ja" [ref=e105]:
|
||||||
|
- generic [ref=e106]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202304111643 Ja" [ref=e107]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202304111643" [ref=e108]
|
||||||
|
- cell "Ja" [ref=e109]:
|
||||||
|
- generic [ref=e110]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202306261451 Ja" [ref=e111]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202306261451" [ref=e112]
|
||||||
|
- cell "Ja" [ref=e113]:
|
||||||
|
- generic [ref=e114]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202310011140 Ja" [ref=e115]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202310011140" [ref=e116]
|
||||||
|
- cell "Ja" [ref=e117]:
|
||||||
|
- generic [ref=e118]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202401151137 Ja" [ref=e119]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202401151137" [ref=e120]
|
||||||
|
- cell "Ja" [ref=e121]:
|
||||||
|
- generic [ref=e122]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202404031556 Ja" [ref=e123]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202404031556" [ref=e124]
|
||||||
|
- cell "Ja" [ref=e125]:
|
||||||
|
- generic [ref=e126]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202404220850 Ja" [ref=e127]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202404220850" [ref=e128]
|
||||||
|
- cell "Ja" [ref=e129]:
|
||||||
|
- generic [ref=e130]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version202411271406 Ja" [ref=e131]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version202411271406" [ref=e132]
|
||||||
|
- cell "Ja" [ref=e133]:
|
||||||
|
- generic [ref=e134]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250303120812 Ja" [ref=e135]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250303120812" [ref=e136]
|
||||||
|
- cell "Ja" [ref=e137]:
|
||||||
|
- generic [ref=e138]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250303120815 Ja" [ref=e139]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250303120815" [ref=e140]
|
||||||
|
- cell "Ja" [ref=e141]:
|
||||||
|
- generic [ref=e142]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250304145512 Ja" [ref=e143]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250304145512" [ref=e144]
|
||||||
|
- cell "Ja" [ref=e145]:
|
||||||
|
- generic [ref=e146]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250313154423 Ja" [ref=e147]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250313154423" [ref=e148]
|
||||||
|
- cell "Ja" [ref=e149]:
|
||||||
|
- generic [ref=e150]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250613181223 Ja" [ref=e151]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250613181223" [ref=e152]
|
||||||
|
- cell "Ja" [ref=e153]:
|
||||||
|
- generic [ref=e154]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20250702215721 Ja" [ref=e155]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20250702215721" [ref=e156]
|
||||||
|
- cell "Ja" [ref=e157]:
|
||||||
|
- generic [ref=e158]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20251124132556 Ja" [ref=e159]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20251124132556" [ref=e160]
|
||||||
|
- cell "Ja" [ref=e161]:
|
||||||
|
- generic [ref=e162]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20251202130922 Ja" [ref=e163]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20251202130922" [ref=e164]
|
||||||
|
- cell "Ja" [ref=e165]:
|
||||||
|
- generic [ref=e166]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20252402130922 Ja" [ref=e167]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20252402130922" [ref=e168]
|
||||||
|
- cell "Ja" [ref=e169]:
|
||||||
|
- generic [ref=e170]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260217102512 Ja" [ref=e171]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260217102512" [ref=e172]
|
||||||
|
- cell "Ja" [ref=e173]:
|
||||||
|
- generic [ref=e174]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260303100000 Ja" [ref=e175]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260303100000" [ref=e176]
|
||||||
|
- cell "Ja" [ref=e177]:
|
||||||
|
- generic [ref=e178]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100000 Ja" [ref=e179]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100000" [ref=e180]
|
||||||
|
- cell "Ja" [ref=e181]:
|
||||||
|
- generic [ref=e182]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100001 Ja" [ref=e183]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100001" [ref=e184]
|
||||||
|
- cell "Ja" [ref=e185]:
|
||||||
|
- generic [ref=e186]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100002 Ja" [ref=e187]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260311100002" [ref=e188]
|
||||||
|
- cell "Ja" [ref=e189]:
|
||||||
|
- generic [ref=e190]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260420120000 Ja" [ref=e191]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260420120000" [ref=e192]
|
||||||
|
- cell "Ja" [ref=e193]:
|
||||||
|
- generic [ref=e194]: Ja
|
||||||
|
- row "PSC\\System\\UpdateBundle\\Migrations\\Version20260601120000 Ja" [ref=e195]:
|
||||||
|
- cell "PSC\\System\\UpdateBundle\\Migrations\\Version20260601120000" [ref=e196]
|
||||||
|
- cell "Ja" [ref=e197]:
|
||||||
|
- generic [ref=e198]: Ja
|
||||||
|
- region "Symfony Web Debug Toolbar" [ref=e199]:
|
||||||
|
- generic [ref=e202]:
|
||||||
|
- link "200 Redirect @ psc_system_update_migration_do" [ref=e204] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/f6c1b1?panel=request
|
||||||
|
- generic [ref=e205]:
|
||||||
|
- generic [ref=e206]: "200"
|
||||||
|
- img "Redirect" [ref=e208]
|
||||||
|
- generic [ref=e211]: "@"
|
||||||
|
- generic [ref=e212]: psc_system_update_migration_do
|
||||||
|
- link "836 ms" [ref=e214] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/f6c1b1?panel=time
|
||||||
|
- generic [ref=e215]:
|
||||||
|
- generic [ref=e216]: "836"
|
||||||
|
- generic [ref=e217]: ms
|
||||||
|
- link "108.5 MiB" [ref=e219] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/f6c1b1?panel=time
|
||||||
|
- generic [ref=e220]:
|
||||||
|
- generic [ref=e221]: "108.5"
|
||||||
|
- generic [ref=e222]: MiB
|
||||||
|
- link "Cache 1" [ref=e224] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/f6c1b1?panel=form
|
||||||
|
- generic [ref=e225]:
|
||||||
|
- img "Cache" [ref=e226]
|
||||||
|
- generic [ref=e232]: "1"
|
||||||
|
- link "Logger 400" [ref=e234] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/f6c1b1?panel=logger
|
||||||
|
- generic [ref=e235]:
|
||||||
|
- img "Logger" [ref=e236]
|
||||||
|
- generic [ref=e240]: "400"
|
||||||
|
- link "Security 1" [ref=e242] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/f6c1b1?panel=security
|
||||||
|
- generic [ref=e243]:
|
||||||
|
- img "Security" [ref=e244]
|
||||||
|
- generic [ref=e248]: "1"
|
||||||
|
- link "Twig 19 ms" [ref=e250] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/f6c1b1?panel=twig
|
||||||
|
- generic [ref=e251]:
|
||||||
|
- img "Twig" [ref=e252]
|
||||||
|
- generic [ref=e256]: "19"
|
||||||
|
- generic [ref=e257]: ms
|
||||||
|
- link "2 in 1.47 ms" [ref=e259] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/f6c1b1?panel=db
|
||||||
|
- generic [ref=e260]:
|
||||||
|
- img [ref=e261]
|
||||||
|
- generic [ref=e266]: "2"
|
||||||
|
- generic [ref=e267]: in 1.47 ms
|
||||||
|
- link "91 in 41.14 ms" [ref=e269] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/f6c1b1?panel=mongodb
|
||||||
|
- generic [ref=e270]:
|
||||||
|
- img [ref=e271]
|
||||||
|
- generic [ref=e273]: "91"
|
||||||
|
- generic [ref=e274]: in 41.14 ms
|
||||||
|
- 'link "S: 0 D: 0" [ref=e276] [cursor=pointer]':
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/f6c1b1?panel=jms_serializer
|
||||||
|
- generic [ref=e277]:
|
||||||
|
- img [ref=e278]
|
||||||
|
- generic [ref=e280]: "S:"
|
||||||
|
- generic [ref=e281]: "0"
|
||||||
|
- generic [ref=e282]: "D:"
|
||||||
|
- generic [ref=e283]: "0"
|
||||||
|
- link "Symfony 7.4.6" [ref=e285] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/f6c1b1?panel=config
|
||||||
|
- generic [ref=e286]:
|
||||||
|
- img "Symfony" [ref=e288]
|
||||||
|
- generic [ref=e290]: 7.4.6
|
||||||
|
- button [expanded] [ref=e291] [cursor=pointer]:
|
||||||
|
- generic "Close Toolbar" [ref=e292]:
|
||||||
|
- img [ref=e293]
|
||||||
496
src/new/.playwright-mcp/page-2026-06-01T18-41-30-092Z.yml
Normal file
496
src/new/.playwright-mcp/page-2026-06-01T18-41-30-092Z.yml
Normal file
@ -0,0 +1,496 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- text: import $ from 'jquery'
|
||||||
|
- banner:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- heading "PSC Admin" [level=4] [ref=e4]
|
||||||
|
- group "Basic example" [ref=e7]:
|
||||||
|
- link "EN" [ref=e8] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/backend/shop/settings/settings/index?_locale=en
|
||||||
|
- link "DE" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/backend/shop/settings/settings/index?_locale=de
|
||||||
|
- link " Logout (admin@shop.de)" [ref=e10] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/logout
|
||||||
|
- generic [ref=e11]:
|
||||||
|
- text: Logout (admin@shop.de)
|
||||||
|
- generic [ref=e13]:
|
||||||
|
- navigation [ref=e14]:
|
||||||
|
- generic [ref=e16]:
|
||||||
|
- checkbox [ref=e17]
|
||||||
|
- text: Deaktive Shops zeigen
|
||||||
|
- combobox [ref=e18]:
|
||||||
|
- option "Bestesvonhier" [selected]
|
||||||
|
- option "eder"
|
||||||
|
- option "nowe"
|
||||||
|
- option "Printchampion"
|
||||||
|
- option "Produkttypen"
|
||||||
|
- link "Zum Shop" [ref=e19] [cursor=pointer]:
|
||||||
|
- /url: https://b-dev-tp.dockserver.de
|
||||||
|
- separator [ref=e20]
|
||||||
|
- list [ref=e21]:
|
||||||
|
- listitem [ref=e22] [cursor=pointer]:
|
||||||
|
- link " Dashboard" [ref=e23]:
|
||||||
|
- /url: /apps/backend/dashboard
|
||||||
|
- generic [ref=e24]:
|
||||||
|
- text: Dashboard
|
||||||
|
- listitem [ref=e25] [cursor=pointer]:
|
||||||
|
- link " Aufträge" [ref=e26]:
|
||||||
|
- /url: /apps/backend/order/list/index
|
||||||
|
- generic [ref=e27]:
|
||||||
|
- text: Aufträge
|
||||||
|
- listitem [ref=e28] [cursor=pointer]:
|
||||||
|
- link " Sendcloud" [ref=e29]:
|
||||||
|
- /url: /apps/backend/r2_sendcloud/list
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- text: Sendcloud
|
||||||
|
- listitem [ref=e31] [cursor=pointer]:
|
||||||
|
- generic [ref=e33]:
|
||||||
|
- generic [ref=e34]:
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- text: Produktion
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e36] [cursor=pointer]:
|
||||||
|
- generic [ref=e38]:
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]:
|
||||||
|
- text: Produkte
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e41] [cursor=pointer]:
|
||||||
|
- link " Firmen" [ref=e42]:
|
||||||
|
- /url: /apps/backend/account/list/index
|
||||||
|
- generic [ref=e43]:
|
||||||
|
- text: Firmen
|
||||||
|
- listitem [ref=e44] [cursor=pointer]:
|
||||||
|
- link " Kunden" [ref=e45]:
|
||||||
|
- /url: /apps/backend/contact/list/index
|
||||||
|
- generic [ref=e46]:
|
||||||
|
- text: Kunden
|
||||||
|
- listitem [ref=e47] [cursor=pointer]:
|
||||||
|
- link " CMS" [ref=e48]:
|
||||||
|
- /url: /apps/backend/cms/list
|
||||||
|
- generic [ref=e49]:
|
||||||
|
- text: CMS
|
||||||
|
- listitem [ref=e50] [cursor=pointer]:
|
||||||
|
- link " Versandarten" [ref=e51]:
|
||||||
|
- /url: /apps/backend/shipping/list/index
|
||||||
|
- generic [ref=e52]:
|
||||||
|
- text: Versandarten
|
||||||
|
- listitem [ref=e53] [cursor=pointer]:
|
||||||
|
- link " Zahlarten" [ref=e54]:
|
||||||
|
- /url: /apps/backend/payment/list/index
|
||||||
|
- generic [ref=e55]:
|
||||||
|
- text: Zahlarten
|
||||||
|
- listitem [ref=e56] [cursor=pointer]:
|
||||||
|
- link " News" [ref=e57]:
|
||||||
|
- /url: /apps/backend/news/list/index
|
||||||
|
- generic [ref=e58]:
|
||||||
|
- text: News
|
||||||
|
- listitem [ref=e59] [cursor=pointer]:
|
||||||
|
- link " Gutschein" [ref=e60]:
|
||||||
|
- /url: /apps/backend/voucher/list/index
|
||||||
|
- generic [ref=e61]:
|
||||||
|
- text: Gutschein
|
||||||
|
- listitem [ref=e62] [cursor=pointer]:
|
||||||
|
- generic [ref=e64]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- generic [ref=e66]:
|
||||||
|
- text: Tools
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e69]:
|
||||||
|
- generic [ref=e70]:
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- text: Shop Einstellungen
|
||||||
|
- list [ref=e72]:
|
||||||
|
- listitem [ref=e73]:
|
||||||
|
- generic [ref=e75]:
|
||||||
|
- generic [ref=e76]:
|
||||||
|
- generic [ref=e77]:
|
||||||
|
- text: Layouter
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e78]:
|
||||||
|
- link " Allgemeines" [ref=e79]:
|
||||||
|
- /url: /apps/backend/shop/settings/settings/index
|
||||||
|
- generic [ref=e80]:
|
||||||
|
- text: Allgemeines
|
||||||
|
- listitem [ref=e81]:
|
||||||
|
- link " Länder" [ref=e82]:
|
||||||
|
- /url: /apps/backend/shop/settings/country/index
|
||||||
|
- generic [ref=e83]:
|
||||||
|
- text: Länder
|
||||||
|
- listitem [ref=e84]:
|
||||||
|
- link " Routing" [ref=e85]:
|
||||||
|
- /url: /apps/backend/shop/settings/routing/index
|
||||||
|
- generic [ref=e86]:
|
||||||
|
- text: Routing
|
||||||
|
- listitem [ref=e87]:
|
||||||
|
- link " Webformulare" [ref=e88]:
|
||||||
|
- /url: /apps/backend/formular/list
|
||||||
|
- generic [ref=e89]:
|
||||||
|
- text: Webformulare
|
||||||
|
- listitem [ref=e90]:
|
||||||
|
- link " Theme" [ref=e91]:
|
||||||
|
- /url: /apps/backend/theme/settings
|
||||||
|
- generic [ref=e92]:
|
||||||
|
- text: Theme
|
||||||
|
- listitem [ref=e93]:
|
||||||
|
- link " Shipping Gateways" [ref=e94]:
|
||||||
|
- /url: /apps/backend/shipping/gateway/settings
|
||||||
|
- generic [ref=e95]:
|
||||||
|
- text: Shipping Gateways
|
||||||
|
- listitem [ref=e96]:
|
||||||
|
- link " Payment Gateways" [ref=e97]:
|
||||||
|
- /url: /apps/backend/payment/gateway/settings
|
||||||
|
- generic [ref=e98]:
|
||||||
|
- text: Payment Gateways
|
||||||
|
- listitem [ref=e99]:
|
||||||
|
- link " Domains" [ref=e100]:
|
||||||
|
- /url: /apps/backend/domain/list/index
|
||||||
|
- generic [ref=e101]:
|
||||||
|
- text: Domains
|
||||||
|
- listitem [ref=e102] [cursor=pointer]:
|
||||||
|
- link " Aktionen" [ref=e103]:
|
||||||
|
- /url: /apps/backend/queue/list/index
|
||||||
|
- generic [ref=e104]:
|
||||||
|
- text: Aktionen
|
||||||
|
- heading "Systemeinstellungen" [level=5] [ref=e105]
|
||||||
|
- list [ref=e106]:
|
||||||
|
- listitem [ref=e107] [cursor=pointer]:
|
||||||
|
- link " Statusverwaltung" [ref=e108]:
|
||||||
|
- /url: /apps/backend/system/settings/status/index
|
||||||
|
- generic [ref=e109]:
|
||||||
|
- text: Statusverwaltung
|
||||||
|
- listitem [ref=e110] [cursor=pointer]:
|
||||||
|
- link " Papierdatenbank" [ref=e111]:
|
||||||
|
- /url: /apps/backend/system/settings/paper/index
|
||||||
|
- generic [ref=e112]:
|
||||||
|
- text: Papierdatenbank
|
||||||
|
- listitem [ref=e113] [cursor=pointer]:
|
||||||
|
- link " Hilfetexte" [ref=e114]:
|
||||||
|
- /url: /apps/backend/system/settings/help/index
|
||||||
|
- generic [ref=e115]:
|
||||||
|
- text: Hilfetexte
|
||||||
|
- listitem [ref=e116] [cursor=pointer]:
|
||||||
|
- link " Systemeinstellung" [ref=e117]:
|
||||||
|
- /url: /apps/backend/system/settings/settings/index
|
||||||
|
- generic [ref=e118]:
|
||||||
|
- text: Systemeinstellung
|
||||||
|
- listitem [ref=e119] [cursor=pointer]:
|
||||||
|
- link " Logs" [ref=e120]:
|
||||||
|
- /url: /apps/backend/system/settings/log/index
|
||||||
|
- generic [ref=e121]:
|
||||||
|
- text: Logs
|
||||||
|
- listitem [ref=e122] [cursor=pointer]:
|
||||||
|
- link " Media" [ref=e123]:
|
||||||
|
- /url: /apps/backend/media/list/folder/show
|
||||||
|
- generic [ref=e124]:
|
||||||
|
- text: Media
|
||||||
|
- list [ref=e125]:
|
||||||
|
- listitem [ref=e126] [cursor=pointer]:
|
||||||
|
- link " Apps & App Store" [ref=e127]:
|
||||||
|
- /url: /apps/backend/plugin/list
|
||||||
|
- generic [ref=e128]:
|
||||||
|
- text: Apps & App Store
|
||||||
|
- separator [ref=e129]
|
||||||
|
- paragraph [ref=e130]: 01.06.2026 20:41:28
|
||||||
|
- main [ref=e131]:
|
||||||
|
- heading " Shop > Einstellungen" [level=3] [ref=e135]:
|
||||||
|
- generic [ref=e136]:
|
||||||
|
- text: Shop > Einstellungen
|
||||||
|
- generic [ref=e139]:
|
||||||
|
- 'heading "Bestesvonhier (ID: 2)" [level=4] [ref=e141]'
|
||||||
|
- generic [ref=e143]:
|
||||||
|
- tablist [ref=e145]:
|
||||||
|
- tab "Allgemein" [selected] [ref=e146] [cursor=pointer]
|
||||||
|
- tab "Meta" [ref=e147] [cursor=pointer]
|
||||||
|
- tab "Betreiber" [ref=e148] [cursor=pointer]
|
||||||
|
- tab "Nummernkreise" [ref=e149] [cursor=pointer]
|
||||||
|
- tab "Bestellablauf" [ref=e150] [cursor=pointer]
|
||||||
|
- tab "Preise" [ref=e151] [cursor=pointer]
|
||||||
|
- tab "Dokumente (Allgemein)" [ref=e152] [cursor=pointer]
|
||||||
|
- tab "Dokumente (Auftrag)" [ref=e153] [cursor=pointer]
|
||||||
|
- tab "Dokumente (Position)" [ref=e154] [cursor=pointer]
|
||||||
|
- tab "Rechtliches" [ref=e155] [cursor=pointer]
|
||||||
|
- tab "API" [ref=e156] [cursor=pointer]
|
||||||
|
- tab "Variable Felder" [ref=e157] [cursor=pointer]
|
||||||
|
- tab "Mailvorlagen" [ref=e158] [cursor=pointer]
|
||||||
|
- tab "Templateprint" [ref=e159] [cursor=pointer]
|
||||||
|
- tab "Erweitert" [ref=e160] [cursor=pointer]
|
||||||
|
- tab "SMTP" [ref=e161] [cursor=pointer]
|
||||||
|
- tab "Friendly Captcha" [ref=e162] [cursor=pointer]
|
||||||
|
- tab "CaptchaFox" [ref=e163] [cursor=pointer]
|
||||||
|
- tab "Saxoprint" [ref=e164] [cursor=pointer]
|
||||||
|
- tab "Sendcloud" [ref=e165] [cursor=pointer]
|
||||||
|
- tab "Printess" [ref=e166] [cursor=pointer]
|
||||||
|
- tab "Wir machen Druck" [ref=e167] [cursor=pointer]
|
||||||
|
- tab "GoogleXML" [ref=e168] [cursor=pointer]
|
||||||
|
- tab "Pitchprint R2 API" [ref=e169] [cursor=pointer]
|
||||||
|
- generic [ref=e171]:
|
||||||
|
- tabpanel [ref=e172]:
|
||||||
|
- group [ref=e173]:
|
||||||
|
- heading "Allgemein" [level=4] [ref=e174]
|
||||||
|
- generic [ref=e180]:
|
||||||
|
- checkbox "Shop deaktiviert" [ref=e181]
|
||||||
|
- generic [ref=e182]: Shop deaktiviert
|
||||||
|
- generic [ref=e183]:
|
||||||
|
- generic [ref=e185]:
|
||||||
|
- generic [ref=e187]: Titel
|
||||||
|
- textbox "Titel" [ref=e189]: Bestesvonhier
|
||||||
|
- generic [ref=e191]:
|
||||||
|
- generic [ref=e193]: Untertitel
|
||||||
|
- textbox "Untertitel" [ref=e195]: Bestesvonhier
|
||||||
|
- generic [ref=e196]:
|
||||||
|
- generic [ref=e198]:
|
||||||
|
- generic [ref=e200]: Logo (Topbanner)
|
||||||
|
- generic [ref=e202]:
|
||||||
|
- figure [ref=e204]:
|
||||||
|
- img
|
||||||
|
- button "" [ref=e205] [cursor=pointer]:
|
||||||
|
- generic [ref=e206]:
|
||||||
|
- button "Auswählen" [ref=e207] [cursor=pointer]: Auswählen
|
||||||
|
- generic [ref=e209]:
|
||||||
|
- generic [ref=e211]: Logo 2 (Background)
|
||||||
|
- generic [ref=e213]:
|
||||||
|
- figure [ref=e215]:
|
||||||
|
- img
|
||||||
|
- button "" [ref=e216] [cursor=pointer]:
|
||||||
|
- generic [ref=e217]:
|
||||||
|
- button "Auswählen" [ref=e218] [cursor=pointer]: Auswählen
|
||||||
|
- generic [ref=e220]:
|
||||||
|
- generic [ref=e222]: Logo 3 (Favicon)
|
||||||
|
- generic [ref=e224]:
|
||||||
|
- figure [ref=e226]:
|
||||||
|
- img
|
||||||
|
- button "" [ref=e227] [cursor=pointer]:
|
||||||
|
- generic [ref=e228]:
|
||||||
|
- button "Auswählen" [ref=e229] [cursor=pointer]: Auswählen
|
||||||
|
- generic [ref=e230]:
|
||||||
|
- generic [ref=e235]:
|
||||||
|
- checkbox "Privat" [checked] [ref=e236]
|
||||||
|
- generic [ref=e237]: Privat
|
||||||
|
- generic [ref=e242]:
|
||||||
|
- checkbox "Registrierung möglich" [ref=e243]
|
||||||
|
- generic [ref=e244]: Registrierung möglich
|
||||||
|
- generic [ref=e245]:
|
||||||
|
- generic [ref=e250]:
|
||||||
|
- checkbox "Gastbestellung" [ref=e251]
|
||||||
|
- generic [ref=e252]: Gastbestellung
|
||||||
|
- generic [ref=e257]:
|
||||||
|
- checkbox "Ohne E-Mail Verifizierung" [checked] [ref=e258]
|
||||||
|
- generic [ref=e259]: Ohne E-Mail Verifizierung
|
||||||
|
- generic [ref=e260]:
|
||||||
|
- generic [ref=e262]:
|
||||||
|
- generic [ref=e264]: Standard Sprache
|
||||||
|
- combobox "Standard Sprache" [ref=e266]:
|
||||||
|
- option "Deutsch" [selected]
|
||||||
|
- option "English"
|
||||||
|
- generic [ref=e268]:
|
||||||
|
- generic [ref=e270]: Standard Währung
|
||||||
|
- combobox "Standard Währung" [ref=e272]:
|
||||||
|
- option "VAE-Dirham"
|
||||||
|
- option "Afghanischer Afghani"
|
||||||
|
- option "Albanischer Lek"
|
||||||
|
- option "Armenischer Dram"
|
||||||
|
- option "Angolanischer Kwanza"
|
||||||
|
- option "Argentinischer Peso"
|
||||||
|
- option "Australischer Dollar"
|
||||||
|
- option "Aruba-Florin"
|
||||||
|
- option "Aserbaidschan-Manat"
|
||||||
|
- option "Konvertible Mark Bosnien und Herzegowina"
|
||||||
|
- option "Barbados-Dollar"
|
||||||
|
- option "Bangladesch-Taka"
|
||||||
|
- option "Bahrain-Dinar"
|
||||||
|
- option "Burundi-Franc"
|
||||||
|
- option "Bermuda-Dollar"
|
||||||
|
- option "Brunei-Dollar"
|
||||||
|
- option "Bolivianischer Boliviano"
|
||||||
|
- option "Brasilianischer Real"
|
||||||
|
- option "Bahamas-Dollar"
|
||||||
|
- option "Bhutan-Ngultrum"
|
||||||
|
- option "Botswanischer Pula"
|
||||||
|
- option "Weißrussischer Rubel"
|
||||||
|
- option "Belize-Dollar"
|
||||||
|
- option "Kanadischer Dollar"
|
||||||
|
- option "Kongo-Franc"
|
||||||
|
- option "Schweizer Franken"
|
||||||
|
- option "Chilenischer Peso"
|
||||||
|
- option "Renminbi Yuan"
|
||||||
|
- option "Kolumbianischer Peso"
|
||||||
|
- option "Costa-Rica-Colón"
|
||||||
|
- option "Kubanischer Peso"
|
||||||
|
- option "Cabo-Verde-Escudo"
|
||||||
|
- option "Tschechische Krone"
|
||||||
|
- option "Dschibuti-Franc"
|
||||||
|
- option "Dänische Krone"
|
||||||
|
- option "Dominikanischer Peso"
|
||||||
|
- option "Algerischer Dinar"
|
||||||
|
- option "Ägyptisches Pfund"
|
||||||
|
- option "Eritreischer Nakfa"
|
||||||
|
- option "Äthiopischer Birr"
|
||||||
|
- option "Euro" [selected]
|
||||||
|
- option "Fidschi-Dollar"
|
||||||
|
- option "Falkland-Pfund"
|
||||||
|
- option "Britisches Pfund"
|
||||||
|
- option "Georgischer Lari"
|
||||||
|
- option "Ghanaischer Cedi"
|
||||||
|
- option "Gibraltar-Pfund"
|
||||||
|
- option "Gambia-Dalasi"
|
||||||
|
- option "Guinea-Franc"
|
||||||
|
- option "Guatemaltekischer Quetzal"
|
||||||
|
- option "Guyana-Dollar"
|
||||||
|
- option "Hongkong-Dollar"
|
||||||
|
- option "Honduras-Lempira"
|
||||||
|
- option "Haitianische Gourde"
|
||||||
|
- option "Ungarischer Forint"
|
||||||
|
- option "Indonesische Rupiah"
|
||||||
|
- option "Israelischer Neuer Schekel"
|
||||||
|
- option "Indische Rupie"
|
||||||
|
- option "Irakischer Dinar"
|
||||||
|
- option "Iranischer Rial"
|
||||||
|
- option "Isländische Krone"
|
||||||
|
- option "Jamaika-Dollar"
|
||||||
|
- option "Jordanischer Dinar"
|
||||||
|
- option "Japanischer Yen"
|
||||||
|
- option "Kenia-Schilling"
|
||||||
|
- option "Kirgisischer Som"
|
||||||
|
- option "Kambodschanischer Riel"
|
||||||
|
- option "Komoren-Franc"
|
||||||
|
- option "Nordkoreanischer Won"
|
||||||
|
- option "Südkoreanischer Won"
|
||||||
|
- option "Kuwait-Dinar"
|
||||||
|
- option "Kaiman-Dollar"
|
||||||
|
- option "Kasachischer Tenge"
|
||||||
|
- option "Laotischer Kip"
|
||||||
|
- option "Libanesisches Pfund"
|
||||||
|
- option "Sri-Lanka-Rupie"
|
||||||
|
- option "Liberianischer Dollar"
|
||||||
|
- option "Loti"
|
||||||
|
- option "Libyscher Dinar"
|
||||||
|
- option "Marokkanischer Dirham"
|
||||||
|
- option "Moldau-Leu"
|
||||||
|
- option "Madagaskar-Ariary"
|
||||||
|
- option "Mazedonischer Denar"
|
||||||
|
- option "Myanmarischer Kyat"
|
||||||
|
- option "Mongolischer Tögrög"
|
||||||
|
- option "Macao-Pataca"
|
||||||
|
- option "Mauretanischer Ouguiya"
|
||||||
|
- option "Mauritius-Rupie"
|
||||||
|
- option "Malediven-Rufiyaa"
|
||||||
|
- option "Malawi-Kwacha"
|
||||||
|
- option "Mexikanischer Peso"
|
||||||
|
- option "Malaysischer Ringgit"
|
||||||
|
- option "Mosambikanischer Metical"
|
||||||
|
- option "Namibia-Dollar"
|
||||||
|
- option "Nigerianischer Naira"
|
||||||
|
- option "Nicaragua-Córdoba"
|
||||||
|
- option "Norwegische Krone"
|
||||||
|
- option "Nepalesische Rupie"
|
||||||
|
- option "Neuseeland-Dollar"
|
||||||
|
- option "Omanischer Rial"
|
||||||
|
- option "Panamaischer Balboa"
|
||||||
|
- option "Peruanischer Sol"
|
||||||
|
- option "Papua-neuguineischer Kina"
|
||||||
|
- option "Philippinischer Peso"
|
||||||
|
- option "Pakistanische Rupie"
|
||||||
|
- option "Polnischer Złoty"
|
||||||
|
- option "Paraguayischer Guaraní"
|
||||||
|
- option "Katar-Riyal"
|
||||||
|
- option "Rumänischer Leu"
|
||||||
|
- option "Serbischer Dinar"
|
||||||
|
- option "Russischer Rubel"
|
||||||
|
- option "Ruanda-Franc"
|
||||||
|
- option "Saudi-Rial"
|
||||||
|
- option "Salomonen-Dollar"
|
||||||
|
- option "Seychellen-Rupie"
|
||||||
|
- option "Sudanesisches Pfund"
|
||||||
|
- option "Schwedische Krone"
|
||||||
|
- option "Singapur-Dollar"
|
||||||
|
- option "St.-Helena-Pfund"
|
||||||
|
- option "Sierra-leonischer Leone"
|
||||||
|
- option "Somalia-Schilling"
|
||||||
|
- option "Suriname-Dollar"
|
||||||
|
- option "Südsudanesisches Pfund"
|
||||||
|
- option "São-toméischer Dobra"
|
||||||
|
- option "Syrisches Pfund"
|
||||||
|
- option "Swasiländischer Lilangeni"
|
||||||
|
- option "Thailändischer Baht"
|
||||||
|
- option "Tadschikistan-Somoni"
|
||||||
|
- option "Turkmenistan-Manat"
|
||||||
|
- option "Tunesischer Dinar"
|
||||||
|
- option "Tongaischer Paʻanga"
|
||||||
|
- option "Türkische Lira"
|
||||||
|
- option "Trinidad-und-Tobago-Dollar"
|
||||||
|
- option "Neuer Taiwan-Dollar"
|
||||||
|
- option "Tansania-Schilling"
|
||||||
|
- option "Ukrainische Hrywnja"
|
||||||
|
- option "Uganda-Schilling"
|
||||||
|
- option "US-Dollar"
|
||||||
|
- option "Uruguayischer Peso"
|
||||||
|
- option "Usbekistan-Sum"
|
||||||
|
- option "Venezolanischer Bolívar"
|
||||||
|
- option "Vietnamesischer Dong"
|
||||||
|
- option "Vanuatu-Vatu"
|
||||||
|
- option "Samoanischer Tala"
|
||||||
|
- option "CFA-Franc (BEAC)"
|
||||||
|
- option "Ostkaribischer Dollar"
|
||||||
|
- option "Karibischer Gulden"
|
||||||
|
- option "CFA-Franc (BCEAO)"
|
||||||
|
- option "CFP-Franc"
|
||||||
|
- option "Jemen-Rial"
|
||||||
|
- option "Südafrikanischer Rand"
|
||||||
|
- option "Kwacha"
|
||||||
|
- option "Simbabwe-Gold"
|
||||||
|
- group [ref=e273]:
|
||||||
|
- heading "Produktübersicht" [level=4] [ref=e274]
|
||||||
|
- generic [ref=e275]:
|
||||||
|
- generic [ref=e277]:
|
||||||
|
- generic [ref=e279]: Produktsortierung
|
||||||
|
- combobox "Produktsortierung" [ref=e281]:
|
||||||
|
- option
|
||||||
|
- option "Position" [selected]
|
||||||
|
- option "Name"
|
||||||
|
- generic [ref=e283]:
|
||||||
|
- generic [ref=e285]: Produktsortierung
|
||||||
|
- combobox "Produktsortierung" [ref=e287]:
|
||||||
|
- option
|
||||||
|
- option "Aufsteigend" [selected]
|
||||||
|
- option "Absteigend"
|
||||||
|
- text:
|
||||||
|
- button "Speichern" [ref=e292] [cursor=pointer]
|
||||||
|
- generic [ref=e294]:
|
||||||
|
- generic [ref=e295]:
|
||||||
|
- heading "Hilfe" [level=4] [ref=e297]
|
||||||
|
- button "Aufklappen / Zuklappen" [ref=e299] [cursor=pointer]
|
||||||
|
- generic [ref=e300]:
|
||||||
|
- heading "Changes" [level=4] [ref=e302]
|
||||||
|
- table [ref=e304]:
|
||||||
|
- rowgroup [ref=e305]:
|
||||||
|
- row "Date Username Changes" [ref=e306]:
|
||||||
|
- columnheader "Date" [ref=e307]
|
||||||
|
- columnheader "Username" [ref=e308]
|
||||||
|
- columnheader "Changes" [ref=e309]
|
||||||
|
- rowgroup [ref=e310]:
|
||||||
|
- row "16:00:57 28.06.2024 admin@shop.de" [ref=e311]:
|
||||||
|
- cell "16:00:57 28.06.2024" [ref=e312]
|
||||||
|
- cell "admin@shop.de" [ref=e313]
|
||||||
|
- cell [ref=e314]
|
||||||
|
- cell [ref=e315]
|
||||||
|
- row "14:23:55 17.11.2023 admin@shop.de" [ref=e316]:
|
||||||
|
- cell "14:23:55 17.11.2023" [ref=e317]
|
||||||
|
- cell "admin@shop.de" [ref=e318]
|
||||||
|
- cell [ref=e319]
|
||||||
|
- cell [ref=e320]
|
||||||
|
- row "12:35:05 09.10.2023 admin@shop.de" [ref=e321]:
|
||||||
|
- cell "12:35:05 09.10.2023" [ref=e322]
|
||||||
|
- cell "admin@shop.de" [ref=e323]
|
||||||
|
- cell [ref=e324]
|
||||||
|
- cell [ref=e325]
|
||||||
|
- region "Symfony Web Debug Toolbar" [ref=e326]:
|
||||||
|
- generic [ref=e329]:
|
||||||
|
- link "Symfony Loading…" [ref=e331] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=request
|
||||||
|
- generic [ref=e332]:
|
||||||
|
- img "Symfony" [ref=e333]
|
||||||
|
- generic [ref=e335]: Loading…
|
||||||
|
- button [expanded] [ref=e336] [cursor=pointer]:
|
||||||
|
- generic "Close Toolbar" [ref=e337]:
|
||||||
|
- img [ref=e338]
|
||||||
363
src/new/.playwright-mcp/page-2026-06-01T18-41-36-390Z.yml
Normal file
363
src/new/.playwright-mcp/page-2026-06-01T18-41-36-390Z.yml
Normal file
@ -0,0 +1,363 @@
|
|||||||
|
- generic [ref=e1]:
|
||||||
|
- text: import $ from 'jquery'
|
||||||
|
- banner:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- heading "PSC Admin" [level=4] [ref=e4]
|
||||||
|
- group "Basic example" [ref=e7]:
|
||||||
|
- link "EN" [ref=e8] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/backend/shop/settings/settings/index?_locale=en
|
||||||
|
- link "DE" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/backend/shop/settings/settings/index?_locale=de
|
||||||
|
- link " Logout (admin@shop.de)" [ref=e10] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/logout
|
||||||
|
- generic [ref=e11]:
|
||||||
|
- text: Logout (admin@shop.de)
|
||||||
|
- generic [ref=e13]:
|
||||||
|
- navigation [ref=e14]:
|
||||||
|
- generic [ref=e16]:
|
||||||
|
- checkbox [ref=e17]
|
||||||
|
- text: Deaktive Shops zeigen
|
||||||
|
- combobox [ref=e18]:
|
||||||
|
- option "Bestesvonhier" [selected]
|
||||||
|
- option "eder"
|
||||||
|
- option "nowe"
|
||||||
|
- option "Printchampion"
|
||||||
|
- option "Produkttypen"
|
||||||
|
- link "Zum Shop" [ref=e19] [cursor=pointer]:
|
||||||
|
- /url: https://b-dev-tp.dockserver.de
|
||||||
|
- separator [ref=e20]
|
||||||
|
- list [ref=e21]:
|
||||||
|
- listitem [ref=e22] [cursor=pointer]:
|
||||||
|
- link " Dashboard" [ref=e23]:
|
||||||
|
- /url: /apps/backend/dashboard
|
||||||
|
- generic [ref=e24]:
|
||||||
|
- text: Dashboard
|
||||||
|
- listitem [ref=e25] [cursor=pointer]:
|
||||||
|
- link " Aufträge" [ref=e26]:
|
||||||
|
- /url: /apps/backend/order/list/index
|
||||||
|
- generic [ref=e27]:
|
||||||
|
- text: Aufträge
|
||||||
|
- listitem [ref=e28] [cursor=pointer]:
|
||||||
|
- link " Sendcloud" [ref=e29]:
|
||||||
|
- /url: /apps/backend/r2_sendcloud/list
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- text: Sendcloud
|
||||||
|
- listitem [ref=e31] [cursor=pointer]:
|
||||||
|
- generic [ref=e33]:
|
||||||
|
- generic [ref=e34]:
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- text: Produktion
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e36] [cursor=pointer]:
|
||||||
|
- generic [ref=e38]:
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]:
|
||||||
|
- text: Produkte
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e41] [cursor=pointer]:
|
||||||
|
- link " Firmen" [ref=e42]:
|
||||||
|
- /url: /apps/backend/account/list/index
|
||||||
|
- generic [ref=e43]:
|
||||||
|
- text: Firmen
|
||||||
|
- listitem [ref=e44] [cursor=pointer]:
|
||||||
|
- link " Kunden" [ref=e45]:
|
||||||
|
- /url: /apps/backend/contact/list/index
|
||||||
|
- generic [ref=e46]:
|
||||||
|
- text: Kunden
|
||||||
|
- listitem [ref=e47] [cursor=pointer]:
|
||||||
|
- link " CMS" [ref=e48]:
|
||||||
|
- /url: /apps/backend/cms/list
|
||||||
|
- generic [ref=e49]:
|
||||||
|
- text: CMS
|
||||||
|
- listitem [ref=e50] [cursor=pointer]:
|
||||||
|
- link " Versandarten" [ref=e51]:
|
||||||
|
- /url: /apps/backend/shipping/list/index
|
||||||
|
- generic [ref=e52]:
|
||||||
|
- text: Versandarten
|
||||||
|
- listitem [ref=e53] [cursor=pointer]:
|
||||||
|
- link " Zahlarten" [ref=e54]:
|
||||||
|
- /url: /apps/backend/payment/list/index
|
||||||
|
- generic [ref=e55]:
|
||||||
|
- text: Zahlarten
|
||||||
|
- listitem [ref=e56] [cursor=pointer]:
|
||||||
|
- link " News" [ref=e57]:
|
||||||
|
- /url: /apps/backend/news/list/index
|
||||||
|
- generic [ref=e58]:
|
||||||
|
- text: News
|
||||||
|
- listitem [ref=e59] [cursor=pointer]:
|
||||||
|
- link " Gutschein" [ref=e60]:
|
||||||
|
- /url: /apps/backend/voucher/list/index
|
||||||
|
- generic [ref=e61]:
|
||||||
|
- text: Gutschein
|
||||||
|
- listitem [ref=e62] [cursor=pointer]:
|
||||||
|
- generic [ref=e64]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- generic [ref=e66]:
|
||||||
|
- text: Tools
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e69]:
|
||||||
|
- generic [ref=e70]:
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- text: Shop Einstellungen
|
||||||
|
- list [ref=e72]:
|
||||||
|
- listitem [ref=e73]:
|
||||||
|
- generic [ref=e75]:
|
||||||
|
- generic [ref=e76]:
|
||||||
|
- generic [ref=e77]:
|
||||||
|
- text: Layouter
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e78]:
|
||||||
|
- link " Allgemeines" [ref=e79]:
|
||||||
|
- /url: /apps/backend/shop/settings/settings/index
|
||||||
|
- generic [ref=e80]:
|
||||||
|
- text: Allgemeines
|
||||||
|
- listitem [ref=e81]:
|
||||||
|
- link " Länder" [ref=e82]:
|
||||||
|
- /url: /apps/backend/shop/settings/country/index
|
||||||
|
- generic [ref=e83]:
|
||||||
|
- text: Länder
|
||||||
|
- listitem [ref=e84]:
|
||||||
|
- link " Routing" [ref=e85]:
|
||||||
|
- /url: /apps/backend/shop/settings/routing/index
|
||||||
|
- generic [ref=e86]:
|
||||||
|
- text: Routing
|
||||||
|
- listitem [ref=e87]:
|
||||||
|
- link " Webformulare" [ref=e88]:
|
||||||
|
- /url: /apps/backend/formular/list
|
||||||
|
- generic [ref=e89]:
|
||||||
|
- text: Webformulare
|
||||||
|
- listitem [ref=e90]:
|
||||||
|
- link " Theme" [ref=e91]:
|
||||||
|
- /url: /apps/backend/theme/settings
|
||||||
|
- generic [ref=e92]:
|
||||||
|
- text: Theme
|
||||||
|
- listitem [ref=e93]:
|
||||||
|
- link " Shipping Gateways" [ref=e94]:
|
||||||
|
- /url: /apps/backend/shipping/gateway/settings
|
||||||
|
- generic [ref=e95]:
|
||||||
|
- text: Shipping Gateways
|
||||||
|
- listitem [ref=e96]:
|
||||||
|
- link " Payment Gateways" [ref=e97]:
|
||||||
|
- /url: /apps/backend/payment/gateway/settings
|
||||||
|
- generic [ref=e98]:
|
||||||
|
- text: Payment Gateways
|
||||||
|
- listitem [ref=e99]:
|
||||||
|
- link " Domains" [ref=e100]:
|
||||||
|
- /url: /apps/backend/domain/list/index
|
||||||
|
- generic [ref=e101]:
|
||||||
|
- text: Domains
|
||||||
|
- listitem [ref=e102] [cursor=pointer]:
|
||||||
|
- link " Aktionen" [ref=e103]:
|
||||||
|
- /url: /apps/backend/queue/list/index
|
||||||
|
- generic [ref=e104]:
|
||||||
|
- text: Aktionen
|
||||||
|
- heading "Systemeinstellungen" [level=5] [ref=e105]
|
||||||
|
- list [ref=e106]:
|
||||||
|
- listitem [ref=e107] [cursor=pointer]:
|
||||||
|
- link " Statusverwaltung" [ref=e108]:
|
||||||
|
- /url: /apps/backend/system/settings/status/index
|
||||||
|
- generic [ref=e109]:
|
||||||
|
- text: Statusverwaltung
|
||||||
|
- listitem [ref=e110] [cursor=pointer]:
|
||||||
|
- link " Papierdatenbank" [ref=e111]:
|
||||||
|
- /url: /apps/backend/system/settings/paper/index
|
||||||
|
- generic [ref=e112]:
|
||||||
|
- text: Papierdatenbank
|
||||||
|
- listitem [ref=e113] [cursor=pointer]:
|
||||||
|
- link " Hilfetexte" [ref=e114]:
|
||||||
|
- /url: /apps/backend/system/settings/help/index
|
||||||
|
- generic [ref=e115]:
|
||||||
|
- text: Hilfetexte
|
||||||
|
- listitem [ref=e116] [cursor=pointer]:
|
||||||
|
- link " Systemeinstellung" [ref=e117]:
|
||||||
|
- /url: /apps/backend/system/settings/settings/index
|
||||||
|
- generic [ref=e118]:
|
||||||
|
- text: Systemeinstellung
|
||||||
|
- listitem [ref=e119] [cursor=pointer]:
|
||||||
|
- link " Logs" [ref=e120]:
|
||||||
|
- /url: /apps/backend/system/settings/log/index
|
||||||
|
- generic [ref=e121]:
|
||||||
|
- text: Logs
|
||||||
|
- listitem [ref=e122] [cursor=pointer]:
|
||||||
|
- link " Media" [ref=e123]:
|
||||||
|
- /url: /apps/backend/media/list/folder/show
|
||||||
|
- generic [ref=e124]:
|
||||||
|
- text: Media
|
||||||
|
- list [ref=e125]:
|
||||||
|
- listitem [ref=e126] [cursor=pointer]:
|
||||||
|
- link " Apps & App Store" [ref=e127]:
|
||||||
|
- /url: /apps/backend/plugin/list
|
||||||
|
- generic [ref=e128]:
|
||||||
|
- text: Apps & App Store
|
||||||
|
- separator [ref=e129]
|
||||||
|
- paragraph [ref=e130]: 01.06.2026 20:41:28
|
||||||
|
- main [ref=e131]:
|
||||||
|
- heading " Shop > Einstellungen" [level=3] [ref=e135]:
|
||||||
|
- generic [ref=e136]:
|
||||||
|
- text: Shop > Einstellungen
|
||||||
|
- generic [ref=e139]:
|
||||||
|
- 'heading "Bestesvonhier (ID: 2)" [level=4] [ref=e141]'
|
||||||
|
- generic [ref=e143]:
|
||||||
|
- tablist [ref=e145]:
|
||||||
|
- tab "Allgemein" [ref=e146] [cursor=pointer]
|
||||||
|
- tab "Meta" [ref=e147] [cursor=pointer]
|
||||||
|
- tab "Betreiber" [ref=e148] [cursor=pointer]
|
||||||
|
- tab "Nummernkreise" [ref=e149] [cursor=pointer]
|
||||||
|
- tab "Bestellablauf" [ref=e150] [cursor=pointer]
|
||||||
|
- tab "Preise" [ref=e151] [cursor=pointer]
|
||||||
|
- tab "Dokumente (Allgemein)" [ref=e152] [cursor=pointer]
|
||||||
|
- tab "Dokumente (Auftrag)" [ref=e153] [cursor=pointer]
|
||||||
|
- tab "Dokumente (Position)" [ref=e154] [cursor=pointer]
|
||||||
|
- tab "Rechtliches" [ref=e155] [cursor=pointer]
|
||||||
|
- tab "API" [ref=e156] [cursor=pointer]
|
||||||
|
- tab "Variable Felder" [ref=e157] [cursor=pointer]
|
||||||
|
- tab "Mailvorlagen" [ref=e158] [cursor=pointer]
|
||||||
|
- tab "Templateprint" [ref=e159] [cursor=pointer]
|
||||||
|
- tab "Erweitert" [ref=e160] [cursor=pointer]
|
||||||
|
- tab "SMTP" [active] [selected] [ref=e161] [cursor=pointer]
|
||||||
|
- tab "Friendly Captcha" [ref=e162] [cursor=pointer]
|
||||||
|
- tab "CaptchaFox" [ref=e163] [cursor=pointer]
|
||||||
|
- tab "Saxoprint" [ref=e164] [cursor=pointer]
|
||||||
|
- tab "Sendcloud" [ref=e165] [cursor=pointer]
|
||||||
|
- tab "Printess" [ref=e166] [cursor=pointer]
|
||||||
|
- tab "Wir machen Druck" [ref=e167] [cursor=pointer]
|
||||||
|
- tab "GoogleXML" [ref=e168] [cursor=pointer]
|
||||||
|
- tab "Pitchprint R2 API" [ref=e169] [cursor=pointer]
|
||||||
|
- generic [ref=e171]:
|
||||||
|
- text:
|
||||||
|
- tabpanel [ref=e342]:
|
||||||
|
- group [ref=e343]:
|
||||||
|
- heading "SMTP" [level=4] [ref=e344]
|
||||||
|
- paragraph [ref=e345]: If disabled, the instance / default SMTP configuration is used.
|
||||||
|
- generic [ref=e346]:
|
||||||
|
- generic [ref=e351]:
|
||||||
|
- checkbox "Use own SMTP credentials" [ref=e352]
|
||||||
|
- generic [ref=e353]: Use own SMTP credentials
|
||||||
|
- generic [ref=e358]:
|
||||||
|
- checkbox "SMTP TLS" [ref=e359]
|
||||||
|
- generic [ref=e360]: SMTP TLS
|
||||||
|
- generic [ref=e361]:
|
||||||
|
- generic [ref=e363]:
|
||||||
|
- generic [ref=e365]: SMTP Host
|
||||||
|
- textbox "SMTP Host" [ref=e367]
|
||||||
|
- generic [ref=e369]:
|
||||||
|
- generic [ref=e371]: SMTP Port
|
||||||
|
- spinbutton "SMTP Port" [ref=e373]
|
||||||
|
- generic [ref=e374]:
|
||||||
|
- generic [ref=e376]:
|
||||||
|
- generic [ref=e378]: SMTP Username
|
||||||
|
- textbox "SMTP Username" [ref=e380]
|
||||||
|
- generic [ref=e382]:
|
||||||
|
- generic [ref=e384]: SMTP Password
|
||||||
|
- textbox "SMTP Password" [ref=e386]
|
||||||
|
- button "Speichern" [ref=e292] [cursor=pointer]
|
||||||
|
- generic [ref=e294]:
|
||||||
|
- generic [ref=e295]:
|
||||||
|
- heading "Hilfe" [level=4] [ref=e297]
|
||||||
|
- button "Aufklappen / Zuklappen" [ref=e299] [cursor=pointer]
|
||||||
|
- generic [ref=e300]:
|
||||||
|
- heading "Changes" [level=4] [ref=e302]
|
||||||
|
- table [ref=e304]:
|
||||||
|
- rowgroup [ref=e305]:
|
||||||
|
- row "Date Username Changes" [ref=e306]:
|
||||||
|
- columnheader "Date" [ref=e307]
|
||||||
|
- columnheader "Username" [ref=e308]
|
||||||
|
- columnheader "Changes" [ref=e309]
|
||||||
|
- rowgroup [ref=e310]:
|
||||||
|
- row "16:00:57 28.06.2024 admin@shop.de" [ref=e311]:
|
||||||
|
- cell "16:00:57 28.06.2024" [ref=e312]
|
||||||
|
- cell "admin@shop.de" [ref=e313]
|
||||||
|
- cell [ref=e314]
|
||||||
|
- cell [ref=e315]
|
||||||
|
- row "14:23:55 17.11.2023 admin@shop.de" [ref=e316]:
|
||||||
|
- cell "14:23:55 17.11.2023" [ref=e317]
|
||||||
|
- cell "admin@shop.de" [ref=e318]
|
||||||
|
- cell [ref=e319]
|
||||||
|
- cell [ref=e320]
|
||||||
|
- row "12:35:05 09.10.2023 admin@shop.de" [ref=e321]:
|
||||||
|
- cell "12:35:05 09.10.2023" [ref=e322]
|
||||||
|
- cell "admin@shop.de" [ref=e323]
|
||||||
|
- cell [ref=e324]
|
||||||
|
- cell [ref=e325]
|
||||||
|
- region "Symfony Web Debug Toolbar" [ref=e326]:
|
||||||
|
- generic [ref=e388]:
|
||||||
|
- link "200 @ psc_backend_shop_settings_index" [ref=e390] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=request
|
||||||
|
- generic [ref=e391]:
|
||||||
|
- generic [ref=e392]: "200"
|
||||||
|
- generic [ref=e393]: "@"
|
||||||
|
- generic [ref=e394]: psc_backend_shop_settings_index
|
||||||
|
- link "1983 ms" [ref=e396] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=time
|
||||||
|
- generic [ref=e397]:
|
||||||
|
- generic [ref=e398]: "1983"
|
||||||
|
- generic [ref=e399]: ms
|
||||||
|
- link "122.1 MiB" [ref=e401] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=time
|
||||||
|
- generic [ref=e402]:
|
||||||
|
- generic [ref=e403]: "122.1"
|
||||||
|
- generic [ref=e404]: MiB
|
||||||
|
- generic [ref=e406] [cursor=pointer]:
|
||||||
|
- img [ref=e407]
|
||||||
|
- generic [ref=e411]: "1"
|
||||||
|
- link "Cache 1" [ref=e413] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=form
|
||||||
|
- generic [ref=e414]:
|
||||||
|
- img "Cache" [ref=e415]
|
||||||
|
- generic [ref=e421]: "1"
|
||||||
|
- link "Logger 400" [ref=e423] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=logger
|
||||||
|
- generic [ref=e424]:
|
||||||
|
- img "Logger" [ref=e425]
|
||||||
|
- generic [ref=e429]: "400"
|
||||||
|
- link "Cache 8 in 0.12 ms" [ref=e431] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=cache
|
||||||
|
- generic [ref=e432]:
|
||||||
|
- img "Cache" [ref=e433]
|
||||||
|
- generic [ref=e438]: "8"
|
||||||
|
- generic [ref=e439]: in 0.12 ms
|
||||||
|
- link "237" [ref=e441] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=translation
|
||||||
|
- generic [ref=e442]:
|
||||||
|
- img [ref=e443]
|
||||||
|
- generic [ref=e448]: "237"
|
||||||
|
- link "Security 1" [ref=e450] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=security
|
||||||
|
- generic [ref=e451]:
|
||||||
|
- img "Security" [ref=e452]
|
||||||
|
- generic [ref=e456]: "1"
|
||||||
|
- link "Twig 241 ms" [ref=e458] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=twig
|
||||||
|
- generic [ref=e459]:
|
||||||
|
- img "Twig" [ref=e460]
|
||||||
|
- generic [ref=e464]: "241"
|
||||||
|
- generic [ref=e465]: ms
|
||||||
|
- link "13 in 24.92 ms" [ref=e467] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=db
|
||||||
|
- generic [ref=e468]:
|
||||||
|
- img [ref=e469]
|
||||||
|
- generic [ref=e474]: "13"
|
||||||
|
- generic [ref=e475]: in 24.92 ms
|
||||||
|
- link "8 in 24.12 ms" [ref=e477] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=mongodb
|
||||||
|
- generic [ref=e478]:
|
||||||
|
- img [ref=e479]
|
||||||
|
- generic [ref=e481]: "8"
|
||||||
|
- generic [ref=e482]: in 24.12 ms
|
||||||
|
- 'link "S: 0 D: 0" [ref=e484] [cursor=pointer]':
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=jms_serializer
|
||||||
|
- generic [ref=e485]:
|
||||||
|
- img [ref=e486]
|
||||||
|
- generic [ref=e488]: "S:"
|
||||||
|
- generic [ref=e489]: "0"
|
||||||
|
- generic [ref=e490]: "D:"
|
||||||
|
- generic [ref=e491]: "0"
|
||||||
|
- link "Symfony 7.4.6" [ref=e493] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=config
|
||||||
|
- generic [ref=e494]:
|
||||||
|
- img "Symfony" [ref=e496]
|
||||||
|
- generic [ref=e498]: 7.4.6
|
||||||
|
- button [expanded] [ref=e499] [cursor=pointer]:
|
||||||
|
- generic "Close Toolbar" [ref=e500]:
|
||||||
|
- img [ref=e501]
|
||||||
363
src/new/.playwright-mcp/page-2026-06-01T18-42-20-512Z.yml
Normal file
363
src/new/.playwright-mcp/page-2026-06-01T18-42-20-512Z.yml
Normal file
@ -0,0 +1,363 @@
|
|||||||
|
- generic [ref=e1]:
|
||||||
|
- text: import $ from 'jquery'
|
||||||
|
- banner:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- heading "PSC Admin" [level=4] [ref=e4]
|
||||||
|
- group "Basic example" [ref=e7]:
|
||||||
|
- link "EN" [ref=e8] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/backend/shop/settings/settings/index?_locale=en
|
||||||
|
- link "DE" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/backend/shop/settings/settings/index?_locale=de
|
||||||
|
- link " Logout (admin@shop.de)" [ref=e10] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/logout
|
||||||
|
- generic [ref=e11]:
|
||||||
|
- text: Logout (admin@shop.de)
|
||||||
|
- generic [ref=e13]:
|
||||||
|
- navigation [ref=e14]:
|
||||||
|
- generic [ref=e16]:
|
||||||
|
- checkbox [ref=e17]
|
||||||
|
- text: Deaktive Shops zeigen
|
||||||
|
- combobox [ref=e18]:
|
||||||
|
- option "Bestesvonhier" [selected]
|
||||||
|
- option "eder"
|
||||||
|
- option "nowe"
|
||||||
|
- option "Printchampion"
|
||||||
|
- option "Produkttypen"
|
||||||
|
- link "Zum Shop" [ref=e19] [cursor=pointer]:
|
||||||
|
- /url: https://b-dev-tp.dockserver.de
|
||||||
|
- separator [ref=e20]
|
||||||
|
- list [ref=e21]:
|
||||||
|
- listitem [ref=e22] [cursor=pointer]:
|
||||||
|
- link " Dashboard" [ref=e23]:
|
||||||
|
- /url: /apps/backend/dashboard
|
||||||
|
- generic [ref=e24]:
|
||||||
|
- text: Dashboard
|
||||||
|
- listitem [ref=e25] [cursor=pointer]:
|
||||||
|
- link " Aufträge" [ref=e26]:
|
||||||
|
- /url: /apps/backend/order/list/index
|
||||||
|
- generic [ref=e27]:
|
||||||
|
- text: Aufträge
|
||||||
|
- listitem [ref=e28] [cursor=pointer]:
|
||||||
|
- link " Sendcloud" [ref=e29]:
|
||||||
|
- /url: /apps/backend/r2_sendcloud/list
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- text: Sendcloud
|
||||||
|
- listitem [ref=e31] [cursor=pointer]:
|
||||||
|
- generic [ref=e33]:
|
||||||
|
- generic [ref=e34]:
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- text: Produktion
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e36] [cursor=pointer]:
|
||||||
|
- generic [ref=e38]:
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]:
|
||||||
|
- text: Produkte
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e41] [cursor=pointer]:
|
||||||
|
- link " Firmen" [ref=e42]:
|
||||||
|
- /url: /apps/backend/account/list/index
|
||||||
|
- generic [ref=e43]:
|
||||||
|
- text: Firmen
|
||||||
|
- listitem [ref=e44] [cursor=pointer]:
|
||||||
|
- link " Kunden" [ref=e45]:
|
||||||
|
- /url: /apps/backend/contact/list/index
|
||||||
|
- generic [ref=e46]:
|
||||||
|
- text: Kunden
|
||||||
|
- listitem [ref=e47] [cursor=pointer]:
|
||||||
|
- link " CMS" [ref=e48]:
|
||||||
|
- /url: /apps/backend/cms/list
|
||||||
|
- generic [ref=e49]:
|
||||||
|
- text: CMS
|
||||||
|
- listitem [ref=e50] [cursor=pointer]:
|
||||||
|
- link " Versandarten" [ref=e51]:
|
||||||
|
- /url: /apps/backend/shipping/list/index
|
||||||
|
- generic [ref=e52]:
|
||||||
|
- text: Versandarten
|
||||||
|
- listitem [ref=e53] [cursor=pointer]:
|
||||||
|
- link " Zahlarten" [ref=e54]:
|
||||||
|
- /url: /apps/backend/payment/list/index
|
||||||
|
- generic [ref=e55]:
|
||||||
|
- text: Zahlarten
|
||||||
|
- listitem [ref=e56] [cursor=pointer]:
|
||||||
|
- link " News" [ref=e57]:
|
||||||
|
- /url: /apps/backend/news/list/index
|
||||||
|
- generic [ref=e58]:
|
||||||
|
- text: News
|
||||||
|
- listitem [ref=e59] [cursor=pointer]:
|
||||||
|
- link " Gutschein" [ref=e60]:
|
||||||
|
- /url: /apps/backend/voucher/list/index
|
||||||
|
- generic [ref=e61]:
|
||||||
|
- text: Gutschein
|
||||||
|
- listitem [ref=e62] [cursor=pointer]:
|
||||||
|
- generic [ref=e64]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- generic [ref=e66]:
|
||||||
|
- text: Tools
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e69]:
|
||||||
|
- generic [ref=e70]:
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- text: Shop Einstellungen
|
||||||
|
- list [ref=e72]:
|
||||||
|
- listitem [ref=e73]:
|
||||||
|
- generic [ref=e75]:
|
||||||
|
- generic [ref=e76]:
|
||||||
|
- generic [ref=e77]:
|
||||||
|
- text: Layouter
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e78]:
|
||||||
|
- link " Allgemeines" [ref=e79]:
|
||||||
|
- /url: /apps/backend/shop/settings/settings/index
|
||||||
|
- generic [ref=e80]:
|
||||||
|
- text: Allgemeines
|
||||||
|
- listitem [ref=e81]:
|
||||||
|
- link " Länder" [ref=e82]:
|
||||||
|
- /url: /apps/backend/shop/settings/country/index
|
||||||
|
- generic [ref=e83]:
|
||||||
|
- text: Länder
|
||||||
|
- listitem [ref=e84]:
|
||||||
|
- link " Routing" [ref=e85]:
|
||||||
|
- /url: /apps/backend/shop/settings/routing/index
|
||||||
|
- generic [ref=e86]:
|
||||||
|
- text: Routing
|
||||||
|
- listitem [ref=e87]:
|
||||||
|
- link " Webformulare" [ref=e88]:
|
||||||
|
- /url: /apps/backend/formular/list
|
||||||
|
- generic [ref=e89]:
|
||||||
|
- text: Webformulare
|
||||||
|
- listitem [ref=e90]:
|
||||||
|
- link " Theme" [ref=e91]:
|
||||||
|
- /url: /apps/backend/theme/settings
|
||||||
|
- generic [ref=e92]:
|
||||||
|
- text: Theme
|
||||||
|
- listitem [ref=e93]:
|
||||||
|
- link " Shipping Gateways" [ref=e94]:
|
||||||
|
- /url: /apps/backend/shipping/gateway/settings
|
||||||
|
- generic [ref=e95]:
|
||||||
|
- text: Shipping Gateways
|
||||||
|
- listitem [ref=e96]:
|
||||||
|
- link " Payment Gateways" [ref=e97]:
|
||||||
|
- /url: /apps/backend/payment/gateway/settings
|
||||||
|
- generic [ref=e98]:
|
||||||
|
- text: Payment Gateways
|
||||||
|
- listitem [ref=e99]:
|
||||||
|
- link " Domains" [ref=e100]:
|
||||||
|
- /url: /apps/backend/domain/list/index
|
||||||
|
- generic [ref=e101]:
|
||||||
|
- text: Domains
|
||||||
|
- listitem [ref=e102] [cursor=pointer]:
|
||||||
|
- link " Aktionen" [ref=e103]:
|
||||||
|
- /url: /apps/backend/queue/list/index
|
||||||
|
- generic [ref=e104]:
|
||||||
|
- text: Aktionen
|
||||||
|
- heading "Systemeinstellungen" [level=5] [ref=e105]
|
||||||
|
- list [ref=e106]:
|
||||||
|
- listitem [ref=e107] [cursor=pointer]:
|
||||||
|
- link " Statusverwaltung" [ref=e108]:
|
||||||
|
- /url: /apps/backend/system/settings/status/index
|
||||||
|
- generic [ref=e109]:
|
||||||
|
- text: Statusverwaltung
|
||||||
|
- listitem [ref=e110] [cursor=pointer]:
|
||||||
|
- link " Papierdatenbank" [ref=e111]:
|
||||||
|
- /url: /apps/backend/system/settings/paper/index
|
||||||
|
- generic [ref=e112]:
|
||||||
|
- text: Papierdatenbank
|
||||||
|
- listitem [ref=e113] [cursor=pointer]:
|
||||||
|
- link " Hilfetexte" [ref=e114]:
|
||||||
|
- /url: /apps/backend/system/settings/help/index
|
||||||
|
- generic [ref=e115]:
|
||||||
|
- text: Hilfetexte
|
||||||
|
- listitem [ref=e116] [cursor=pointer]:
|
||||||
|
- link " Systemeinstellung" [ref=e117]:
|
||||||
|
- /url: /apps/backend/system/settings/settings/index
|
||||||
|
- generic [ref=e118]:
|
||||||
|
- text: Systemeinstellung
|
||||||
|
- listitem [ref=e119] [cursor=pointer]:
|
||||||
|
- link " Logs" [ref=e120]:
|
||||||
|
- /url: /apps/backend/system/settings/log/index
|
||||||
|
- generic [ref=e121]:
|
||||||
|
- text: Logs
|
||||||
|
- listitem [ref=e122] [cursor=pointer]:
|
||||||
|
- link " Media" [ref=e123]:
|
||||||
|
- /url: /apps/backend/media/list/folder/show
|
||||||
|
- generic [ref=e124]:
|
||||||
|
- text: Media
|
||||||
|
- list [ref=e125]:
|
||||||
|
- listitem [ref=e126] [cursor=pointer]:
|
||||||
|
- link " Apps & App Store" [ref=e127]:
|
||||||
|
- /url: /apps/backend/plugin/list
|
||||||
|
- generic [ref=e128]:
|
||||||
|
- text: Apps & App Store
|
||||||
|
- separator [ref=e129]
|
||||||
|
- paragraph [ref=e130]: 01.06.2026 20:41:28
|
||||||
|
- main [ref=e131]:
|
||||||
|
- heading " Shop > Einstellungen" [level=3] [ref=e135]:
|
||||||
|
- generic [ref=e136]:
|
||||||
|
- text: Shop > Einstellungen
|
||||||
|
- generic [ref=e139]:
|
||||||
|
- 'heading "Bestesvonhier (ID: 2)" [level=4] [ref=e141]'
|
||||||
|
- generic [ref=e143]:
|
||||||
|
- tablist [ref=e145]:
|
||||||
|
- tab "Allgemein" [ref=e146] [cursor=pointer]
|
||||||
|
- tab "Meta" [ref=e147] [cursor=pointer]
|
||||||
|
- tab "Betreiber" [ref=e148] [cursor=pointer]
|
||||||
|
- tab "Nummernkreise" [ref=e149] [cursor=pointer]
|
||||||
|
- tab "Bestellablauf" [ref=e150] [cursor=pointer]
|
||||||
|
- tab "Preise" [ref=e151] [cursor=pointer]
|
||||||
|
- tab "Dokumente (Allgemein)" [ref=e152] [cursor=pointer]
|
||||||
|
- tab "Dokumente (Auftrag)" [ref=e153] [cursor=pointer]
|
||||||
|
- tab "Dokumente (Position)" [ref=e154] [cursor=pointer]
|
||||||
|
- tab "Rechtliches" [ref=e155] [cursor=pointer]
|
||||||
|
- tab "API" [ref=e156] [cursor=pointer]
|
||||||
|
- tab "Variable Felder" [ref=e157] [cursor=pointer]
|
||||||
|
- tab "Mailvorlagen" [ref=e158] [cursor=pointer]
|
||||||
|
- tab "Templateprint" [ref=e159] [cursor=pointer]
|
||||||
|
- tab "Erweitert" [ref=e160] [cursor=pointer]
|
||||||
|
- tab "SMTP" [selected] [ref=e161] [cursor=pointer]
|
||||||
|
- tab "Friendly Captcha" [ref=e162] [cursor=pointer]
|
||||||
|
- tab "CaptchaFox" [ref=e163] [cursor=pointer]
|
||||||
|
- tab "Saxoprint" [ref=e164] [cursor=pointer]
|
||||||
|
- tab "Sendcloud" [ref=e165] [cursor=pointer]
|
||||||
|
- tab "Printess" [ref=e166] [cursor=pointer]
|
||||||
|
- tab "Wir machen Druck" [ref=e167] [cursor=pointer]
|
||||||
|
- tab "GoogleXML" [ref=e168] [cursor=pointer]
|
||||||
|
- tab "Pitchprint R2 API" [ref=e169] [cursor=pointer]
|
||||||
|
- generic [ref=e171]:
|
||||||
|
- text:
|
||||||
|
- tabpanel [ref=e342]:
|
||||||
|
- group [ref=e343]:
|
||||||
|
- heading "SMTP" [level=4] [ref=e344]
|
||||||
|
- paragraph [ref=e345]: If disabled, the instance / default SMTP configuration is used.
|
||||||
|
- generic [ref=e346]:
|
||||||
|
- generic [ref=e351]:
|
||||||
|
- checkbox "Use own SMTP credentials" [checked] [ref=e352]
|
||||||
|
- generic [ref=e353]: Use own SMTP credentials
|
||||||
|
- generic [ref=e358]:
|
||||||
|
- checkbox "SMTP TLS" [checked] [ref=e359]
|
||||||
|
- generic [ref=e360]: SMTP TLS
|
||||||
|
- generic [ref=e361]:
|
||||||
|
- generic [ref=e363]:
|
||||||
|
- generic [ref=e365]: SMTP Host
|
||||||
|
- textbox "SMTP Host" [ref=e367]: mail.example.com
|
||||||
|
- generic [ref=e369]:
|
||||||
|
- generic [ref=e371]: SMTP Port
|
||||||
|
- spinbutton "SMTP Port" [ref=e373]: "587"
|
||||||
|
- generic [ref=e374]:
|
||||||
|
- generic [ref=e376]:
|
||||||
|
- generic [ref=e378]: SMTP Username
|
||||||
|
- textbox "SMTP Username" [ref=e380]: shop2@example.com
|
||||||
|
- generic [ref=e382]:
|
||||||
|
- generic [ref=e384]: SMTP Password
|
||||||
|
- textbox "SMTP Password" [ref=e386]: secret123
|
||||||
|
- button "Speichern" [active] [ref=e292] [cursor=pointer]
|
||||||
|
- generic [ref=e294]:
|
||||||
|
- generic [ref=e295]:
|
||||||
|
- heading "Hilfe" [level=4] [ref=e297]
|
||||||
|
- button "Aufklappen / Zuklappen" [ref=e299] [cursor=pointer]
|
||||||
|
- generic [ref=e300]:
|
||||||
|
- heading "Changes" [level=4] [ref=e302]
|
||||||
|
- table [ref=e304]:
|
||||||
|
- rowgroup [ref=e305]:
|
||||||
|
- row "Date Username Changes" [ref=e306]:
|
||||||
|
- columnheader "Date" [ref=e307]
|
||||||
|
- columnheader "Username" [ref=e308]
|
||||||
|
- columnheader "Changes" [ref=e309]
|
||||||
|
- rowgroup [ref=e310]:
|
||||||
|
- row "16:00:57 28.06.2024 admin@shop.de" [ref=e311]:
|
||||||
|
- cell "16:00:57 28.06.2024" [ref=e312]
|
||||||
|
- cell "admin@shop.de" [ref=e313]
|
||||||
|
- cell [ref=e314]
|
||||||
|
- cell [ref=e315]
|
||||||
|
- row "14:23:55 17.11.2023 admin@shop.de" [ref=e316]:
|
||||||
|
- cell "14:23:55 17.11.2023" [ref=e317]
|
||||||
|
- cell "admin@shop.de" [ref=e318]
|
||||||
|
- cell [ref=e319]
|
||||||
|
- cell [ref=e320]
|
||||||
|
- row "12:35:05 09.10.2023 admin@shop.de" [ref=e321]:
|
||||||
|
- cell "12:35:05 09.10.2023" [ref=e322]
|
||||||
|
- cell "admin@shop.de" [ref=e323]
|
||||||
|
- cell [ref=e324]
|
||||||
|
- cell [ref=e325]
|
||||||
|
- region "Symfony Web Debug Toolbar" [ref=e326]:
|
||||||
|
- generic [ref=e388]:
|
||||||
|
- link "200 @ psc_backend_shop_settings_index" [ref=e390] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=request
|
||||||
|
- generic [ref=e391]:
|
||||||
|
- generic [ref=e392]: "200"
|
||||||
|
- generic [ref=e393]: "@"
|
||||||
|
- generic [ref=e394]: psc_backend_shop_settings_index
|
||||||
|
- link "1983 ms" [ref=e396] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=time
|
||||||
|
- generic [ref=e397]:
|
||||||
|
- generic [ref=e398]: "1983"
|
||||||
|
- generic [ref=e399]: ms
|
||||||
|
- link "122.1 MiB" [ref=e401] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=time
|
||||||
|
- generic [ref=e402]:
|
||||||
|
- generic [ref=e403]: "122.1"
|
||||||
|
- generic [ref=e404]: MiB
|
||||||
|
- generic [ref=e406] [cursor=pointer]:
|
||||||
|
- img [ref=e407]
|
||||||
|
- generic [ref=e411]: "1"
|
||||||
|
- link "Cache 1" [ref=e413] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=form
|
||||||
|
- generic [ref=e414]:
|
||||||
|
- img "Cache" [ref=e415]
|
||||||
|
- generic [ref=e421]: "1"
|
||||||
|
- link "Logger 400" [ref=e423] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=logger
|
||||||
|
- generic [ref=e424]:
|
||||||
|
- img "Logger" [ref=e425]
|
||||||
|
- generic [ref=e429]: "400"
|
||||||
|
- link "Cache 8 in 0.12 ms" [ref=e431] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=cache
|
||||||
|
- generic [ref=e432]:
|
||||||
|
- img "Cache" [ref=e433]
|
||||||
|
- generic [ref=e438]: "8"
|
||||||
|
- generic [ref=e439]: in 0.12 ms
|
||||||
|
- link "237" [ref=e441] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=translation
|
||||||
|
- generic [ref=e442]:
|
||||||
|
- img [ref=e443]
|
||||||
|
- generic [ref=e448]: "237"
|
||||||
|
- link "Security 1" [ref=e450] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=security
|
||||||
|
- generic [ref=e451]:
|
||||||
|
- img "Security" [ref=e452]
|
||||||
|
- generic [ref=e456]: "1"
|
||||||
|
- link "Twig 241 ms" [ref=e458] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=twig
|
||||||
|
- generic [ref=e459]:
|
||||||
|
- img "Twig" [ref=e460]
|
||||||
|
- generic [ref=e464]: "241"
|
||||||
|
- generic [ref=e465]: ms
|
||||||
|
- link "13 in 24.92 ms" [ref=e467] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=db
|
||||||
|
- generic [ref=e468]:
|
||||||
|
- img [ref=e469]
|
||||||
|
- generic [ref=e474]: "13"
|
||||||
|
- generic [ref=e475]: in 24.92 ms
|
||||||
|
- link "8 in 24.12 ms" [ref=e477] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=mongodb
|
||||||
|
- generic [ref=e478]:
|
||||||
|
- img [ref=e479]
|
||||||
|
- generic [ref=e481]: "8"
|
||||||
|
- generic [ref=e482]: in 24.12 ms
|
||||||
|
- 'link "S: 0 D: 0" [ref=e484] [cursor=pointer]':
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=jms_serializer
|
||||||
|
- generic [ref=e485]:
|
||||||
|
- img [ref=e486]
|
||||||
|
- generic [ref=e488]: "S:"
|
||||||
|
- generic [ref=e489]: "0"
|
||||||
|
- generic [ref=e490]: "D:"
|
||||||
|
- generic [ref=e491]: "0"
|
||||||
|
- link "Symfony 7.4.6" [ref=e493] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=config
|
||||||
|
- generic [ref=e494]:
|
||||||
|
- img "Symfony" [ref=e496]
|
||||||
|
- generic [ref=e498]: 7.4.6
|
||||||
|
- button [expanded] [ref=e499] [cursor=pointer]:
|
||||||
|
- generic "Close Toolbar" [ref=e500]:
|
||||||
|
- img [ref=e501]
|
||||||
363
src/new/.playwright-mcp/page-2026-06-01T18-42-50-850Z.yml
Normal file
363
src/new/.playwright-mcp/page-2026-06-01T18-42-50-850Z.yml
Normal file
@ -0,0 +1,363 @@
|
|||||||
|
- generic [ref=e1]:
|
||||||
|
- text: import $ from 'jquery'
|
||||||
|
- banner:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- heading "PSC Admin" [level=4] [ref=e4]
|
||||||
|
- group "Basic example" [ref=e7]:
|
||||||
|
- link "EN" [ref=e8] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/backend/shop/settings/settings/index?_locale=en
|
||||||
|
- link "DE" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/backend/shop/settings/settings/index?_locale=de
|
||||||
|
- link " Logout (admin@shop.de)" [ref=e10] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/logout
|
||||||
|
- generic [ref=e11]:
|
||||||
|
- text: Logout (admin@shop.de)
|
||||||
|
- generic [ref=e13]:
|
||||||
|
- navigation [ref=e14]:
|
||||||
|
- generic [ref=e16]:
|
||||||
|
- checkbox [ref=e17]
|
||||||
|
- text: Deaktive Shops zeigen
|
||||||
|
- combobox [ref=e18]:
|
||||||
|
- option "Bestesvonhier" [selected]
|
||||||
|
- option "eder"
|
||||||
|
- option "nowe"
|
||||||
|
- option "Printchampion"
|
||||||
|
- option "Produkttypen"
|
||||||
|
- link "Zum Shop" [ref=e19] [cursor=pointer]:
|
||||||
|
- /url: https://b-dev-tp.dockserver.de
|
||||||
|
- separator [ref=e20]
|
||||||
|
- list [ref=e21]:
|
||||||
|
- listitem [ref=e22] [cursor=pointer]:
|
||||||
|
- link " Dashboard" [ref=e23]:
|
||||||
|
- /url: /apps/backend/dashboard
|
||||||
|
- generic [ref=e24]:
|
||||||
|
- text: Dashboard
|
||||||
|
- listitem [ref=e25] [cursor=pointer]:
|
||||||
|
- link " Aufträge" [ref=e26]:
|
||||||
|
- /url: /apps/backend/order/list/index
|
||||||
|
- generic [ref=e27]:
|
||||||
|
- text: Aufträge
|
||||||
|
- listitem [ref=e28] [cursor=pointer]:
|
||||||
|
- link " Sendcloud" [ref=e29]:
|
||||||
|
- /url: /apps/backend/r2_sendcloud/list
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- text: Sendcloud
|
||||||
|
- listitem [ref=e31] [cursor=pointer]:
|
||||||
|
- generic [ref=e33]:
|
||||||
|
- generic [ref=e34]:
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- text: Produktion
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e36] [cursor=pointer]:
|
||||||
|
- generic [ref=e38]:
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]:
|
||||||
|
- text: Produkte
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e41] [cursor=pointer]:
|
||||||
|
- link " Firmen" [ref=e42]:
|
||||||
|
- /url: /apps/backend/account/list/index
|
||||||
|
- generic [ref=e43]:
|
||||||
|
- text: Firmen
|
||||||
|
- listitem [ref=e44] [cursor=pointer]:
|
||||||
|
- link " Kunden" [ref=e45]:
|
||||||
|
- /url: /apps/backend/contact/list/index
|
||||||
|
- generic [ref=e46]:
|
||||||
|
- text: Kunden
|
||||||
|
- listitem [ref=e47] [cursor=pointer]:
|
||||||
|
- link " CMS" [ref=e48]:
|
||||||
|
- /url: /apps/backend/cms/list
|
||||||
|
- generic [ref=e49]:
|
||||||
|
- text: CMS
|
||||||
|
- listitem [ref=e50] [cursor=pointer]:
|
||||||
|
- link " Versandarten" [ref=e51]:
|
||||||
|
- /url: /apps/backend/shipping/list/index
|
||||||
|
- generic [ref=e52]:
|
||||||
|
- text: Versandarten
|
||||||
|
- listitem [ref=e53] [cursor=pointer]:
|
||||||
|
- link " Zahlarten" [ref=e54]:
|
||||||
|
- /url: /apps/backend/payment/list/index
|
||||||
|
- generic [ref=e55]:
|
||||||
|
- text: Zahlarten
|
||||||
|
- listitem [ref=e56] [cursor=pointer]:
|
||||||
|
- link " News" [ref=e57]:
|
||||||
|
- /url: /apps/backend/news/list/index
|
||||||
|
- generic [ref=e58]:
|
||||||
|
- text: News
|
||||||
|
- listitem [ref=e59] [cursor=pointer]:
|
||||||
|
- link " Gutschein" [ref=e60]:
|
||||||
|
- /url: /apps/backend/voucher/list/index
|
||||||
|
- generic [ref=e61]:
|
||||||
|
- text: Gutschein
|
||||||
|
- listitem [ref=e62] [cursor=pointer]:
|
||||||
|
- generic [ref=e64]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- generic [ref=e66]:
|
||||||
|
- text: Tools
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e69]:
|
||||||
|
- generic [ref=e70]:
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- text: Shop Einstellungen
|
||||||
|
- list [ref=e72]:
|
||||||
|
- listitem [ref=e73]:
|
||||||
|
- generic [ref=e75]:
|
||||||
|
- generic [ref=e76]:
|
||||||
|
- generic [ref=e77]:
|
||||||
|
- text: Layouter
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e78]:
|
||||||
|
- link " Allgemeines" [ref=e79]:
|
||||||
|
- /url: /apps/backend/shop/settings/settings/index
|
||||||
|
- generic [ref=e80]:
|
||||||
|
- text: Allgemeines
|
||||||
|
- listitem [ref=e81]:
|
||||||
|
- link " Länder" [ref=e82]:
|
||||||
|
- /url: /apps/backend/shop/settings/country/index
|
||||||
|
- generic [ref=e83]:
|
||||||
|
- text: Länder
|
||||||
|
- listitem [ref=e84]:
|
||||||
|
- link " Routing" [ref=e85]:
|
||||||
|
- /url: /apps/backend/shop/settings/routing/index
|
||||||
|
- generic [ref=e86]:
|
||||||
|
- text: Routing
|
||||||
|
- listitem [ref=e87]:
|
||||||
|
- link " Webformulare" [ref=e88]:
|
||||||
|
- /url: /apps/backend/formular/list
|
||||||
|
- generic [ref=e89]:
|
||||||
|
- text: Webformulare
|
||||||
|
- listitem [ref=e90]:
|
||||||
|
- link " Theme" [ref=e91]:
|
||||||
|
- /url: /apps/backend/theme/settings
|
||||||
|
- generic [ref=e92]:
|
||||||
|
- text: Theme
|
||||||
|
- listitem [ref=e93]:
|
||||||
|
- link " Shipping Gateways" [ref=e94]:
|
||||||
|
- /url: /apps/backend/shipping/gateway/settings
|
||||||
|
- generic [ref=e95]:
|
||||||
|
- text: Shipping Gateways
|
||||||
|
- listitem [ref=e96]:
|
||||||
|
- link " Payment Gateways" [ref=e97]:
|
||||||
|
- /url: /apps/backend/payment/gateway/settings
|
||||||
|
- generic [ref=e98]:
|
||||||
|
- text: Payment Gateways
|
||||||
|
- listitem [ref=e99]:
|
||||||
|
- link " Domains" [ref=e100]:
|
||||||
|
- /url: /apps/backend/domain/list/index
|
||||||
|
- generic [ref=e101]:
|
||||||
|
- text: Domains
|
||||||
|
- listitem [ref=e102] [cursor=pointer]:
|
||||||
|
- link " Aktionen" [ref=e103]:
|
||||||
|
- /url: /apps/backend/queue/list/index
|
||||||
|
- generic [ref=e104]:
|
||||||
|
- text: Aktionen
|
||||||
|
- heading "Systemeinstellungen" [level=5] [ref=e105]
|
||||||
|
- list [ref=e106]:
|
||||||
|
- listitem [ref=e107] [cursor=pointer]:
|
||||||
|
- link " Statusverwaltung" [ref=e108]:
|
||||||
|
- /url: /apps/backend/system/settings/status/index
|
||||||
|
- generic [ref=e109]:
|
||||||
|
- text: Statusverwaltung
|
||||||
|
- listitem [ref=e110] [cursor=pointer]:
|
||||||
|
- link " Papierdatenbank" [ref=e111]:
|
||||||
|
- /url: /apps/backend/system/settings/paper/index
|
||||||
|
- generic [ref=e112]:
|
||||||
|
- text: Papierdatenbank
|
||||||
|
- listitem [ref=e113] [cursor=pointer]:
|
||||||
|
- link " Hilfetexte" [ref=e114]:
|
||||||
|
- /url: /apps/backend/system/settings/help/index
|
||||||
|
- generic [ref=e115]:
|
||||||
|
- text: Hilfetexte
|
||||||
|
- listitem [ref=e116] [cursor=pointer]:
|
||||||
|
- link " Systemeinstellung" [ref=e117]:
|
||||||
|
- /url: /apps/backend/system/settings/settings/index
|
||||||
|
- generic [ref=e118]:
|
||||||
|
- text: Systemeinstellung
|
||||||
|
- listitem [ref=e119] [cursor=pointer]:
|
||||||
|
- link " Logs" [ref=e120]:
|
||||||
|
- /url: /apps/backend/system/settings/log/index
|
||||||
|
- generic [ref=e121]:
|
||||||
|
- text: Logs
|
||||||
|
- listitem [ref=e122] [cursor=pointer]:
|
||||||
|
- link " Media" [ref=e123]:
|
||||||
|
- /url: /apps/backend/media/list/folder/show
|
||||||
|
- generic [ref=e124]:
|
||||||
|
- text: Media
|
||||||
|
- list [ref=e125]:
|
||||||
|
- listitem [ref=e126] [cursor=pointer]:
|
||||||
|
- link " Apps & App Store" [ref=e127]:
|
||||||
|
- /url: /apps/backend/plugin/list
|
||||||
|
- generic [ref=e128]:
|
||||||
|
- text: Apps & App Store
|
||||||
|
- separator [ref=e129]
|
||||||
|
- paragraph [ref=e130]: 01.06.2026 20:41:28
|
||||||
|
- main [ref=e131]:
|
||||||
|
- heading " Shop > Einstellungen" [level=3] [ref=e135]:
|
||||||
|
- generic [ref=e136]:
|
||||||
|
- text: Shop > Einstellungen
|
||||||
|
- generic [ref=e139]:
|
||||||
|
- 'heading "Bestesvonhier (ID: 2)" [level=4] [ref=e141]'
|
||||||
|
- generic [ref=e143]:
|
||||||
|
- tablist [ref=e145]:
|
||||||
|
- tab "Allgemein" [ref=e146] [cursor=pointer]
|
||||||
|
- tab "Meta" [ref=e147] [cursor=pointer]
|
||||||
|
- tab "Betreiber" [ref=e148] [cursor=pointer]
|
||||||
|
- tab "Nummernkreise" [ref=e149] [cursor=pointer]
|
||||||
|
- tab "Bestellablauf" [ref=e150] [cursor=pointer]
|
||||||
|
- tab "Preise" [ref=e151] [cursor=pointer]
|
||||||
|
- tab "Dokumente (Allgemein)" [ref=e152] [cursor=pointer]
|
||||||
|
- tab "Dokumente (Auftrag)" [ref=e153] [cursor=pointer]
|
||||||
|
- tab "Dokumente (Position)" [ref=e154] [cursor=pointer]
|
||||||
|
- tab "Rechtliches" [ref=e155] [cursor=pointer]
|
||||||
|
- tab "API" [ref=e156] [cursor=pointer]
|
||||||
|
- tab "Variable Felder" [ref=e157] [cursor=pointer]
|
||||||
|
- tab "Mailvorlagen" [ref=e158] [cursor=pointer]
|
||||||
|
- tab "Templateprint" [ref=e159] [cursor=pointer]
|
||||||
|
- tab "Erweitert" [ref=e160] [cursor=pointer]
|
||||||
|
- tab "SMTP" [selected] [ref=e161] [cursor=pointer]
|
||||||
|
- tab "Friendly Captcha" [ref=e162] [cursor=pointer]
|
||||||
|
- tab "CaptchaFox" [ref=e163] [cursor=pointer]
|
||||||
|
- tab "Saxoprint" [ref=e164] [cursor=pointer]
|
||||||
|
- tab "Sendcloud" [ref=e165] [cursor=pointer]
|
||||||
|
- tab "Printess" [ref=e166] [cursor=pointer]
|
||||||
|
- tab "Wir machen Druck" [ref=e167] [cursor=pointer]
|
||||||
|
- tab "GoogleXML" [ref=e168] [cursor=pointer]
|
||||||
|
- tab "Pitchprint R2 API" [ref=e169] [cursor=pointer]
|
||||||
|
- generic [ref=e171]:
|
||||||
|
- text:
|
||||||
|
- tabpanel [ref=e342]:
|
||||||
|
- group [ref=e343]:
|
||||||
|
- heading "SMTP" [level=4] [ref=e344]
|
||||||
|
- paragraph [ref=e345]: If disabled, the instance / default SMTP configuration is used.
|
||||||
|
- generic [ref=e346]:
|
||||||
|
- generic [ref=e351]:
|
||||||
|
- checkbox "Use own SMTP credentials" [ref=e352]
|
||||||
|
- generic [ref=e353]: Use own SMTP credentials
|
||||||
|
- generic [ref=e358]:
|
||||||
|
- checkbox "SMTP TLS" [ref=e359]
|
||||||
|
- generic [ref=e360]: SMTP TLS
|
||||||
|
- generic [ref=e361]:
|
||||||
|
- generic [ref=e363]:
|
||||||
|
- generic [ref=e365]: SMTP Host
|
||||||
|
- textbox "SMTP Host" [ref=e367]
|
||||||
|
- generic [ref=e369]:
|
||||||
|
- generic [ref=e371]: SMTP Port
|
||||||
|
- spinbutton "SMTP Port" [ref=e373]
|
||||||
|
- generic [ref=e374]:
|
||||||
|
- generic [ref=e376]:
|
||||||
|
- generic [ref=e378]: SMTP Username
|
||||||
|
- textbox "SMTP Username" [ref=e380]
|
||||||
|
- generic [ref=e382]:
|
||||||
|
- generic [ref=e384]: SMTP Password
|
||||||
|
- textbox "SMTP Password" [ref=e386]
|
||||||
|
- button "Speichern" [active] [ref=e292] [cursor=pointer]
|
||||||
|
- generic [ref=e294]:
|
||||||
|
- generic [ref=e295]:
|
||||||
|
- heading "Hilfe" [level=4] [ref=e297]
|
||||||
|
- button "Aufklappen / Zuklappen" [ref=e299] [cursor=pointer]
|
||||||
|
- generic [ref=e300]:
|
||||||
|
- heading "Changes" [level=4] [ref=e302]
|
||||||
|
- table [ref=e304]:
|
||||||
|
- rowgroup [ref=e305]:
|
||||||
|
- row "Date Username Changes" [ref=e306]:
|
||||||
|
- columnheader "Date" [ref=e307]
|
||||||
|
- columnheader "Username" [ref=e308]
|
||||||
|
- columnheader "Changes" [ref=e309]
|
||||||
|
- rowgroup [ref=e310]:
|
||||||
|
- row "16:00:57 28.06.2024 admin@shop.de" [ref=e311]:
|
||||||
|
- cell "16:00:57 28.06.2024" [ref=e312]
|
||||||
|
- cell "admin@shop.de" [ref=e313]
|
||||||
|
- cell [ref=e314]
|
||||||
|
- cell [ref=e315]
|
||||||
|
- row "14:23:55 17.11.2023 admin@shop.de" [ref=e316]:
|
||||||
|
- cell "14:23:55 17.11.2023" [ref=e317]
|
||||||
|
- cell "admin@shop.de" [ref=e318]
|
||||||
|
- cell [ref=e319]
|
||||||
|
- cell [ref=e320]
|
||||||
|
- row "12:35:05 09.10.2023 admin@shop.de" [ref=e321]:
|
||||||
|
- cell "12:35:05 09.10.2023" [ref=e322]
|
||||||
|
- cell "admin@shop.de" [ref=e323]
|
||||||
|
- cell [ref=e324]
|
||||||
|
- cell [ref=e325]
|
||||||
|
- region "Symfony Web Debug Toolbar" [ref=e326]:
|
||||||
|
- generic [ref=e388]:
|
||||||
|
- link "200 @ psc_backend_shop_settings_index" [ref=e390] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=request
|
||||||
|
- generic [ref=e391]:
|
||||||
|
- generic [ref=e392]: "200"
|
||||||
|
- generic [ref=e393]: "@"
|
||||||
|
- generic [ref=e394]: psc_backend_shop_settings_index
|
||||||
|
- link "1983 ms" [ref=e396] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=time
|
||||||
|
- generic [ref=e397]:
|
||||||
|
- generic [ref=e398]: "1983"
|
||||||
|
- generic [ref=e399]: ms
|
||||||
|
- link "122.1 MiB" [ref=e401] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=time
|
||||||
|
- generic [ref=e402]:
|
||||||
|
- generic [ref=e403]: "122.1"
|
||||||
|
- generic [ref=e404]: MiB
|
||||||
|
- generic [ref=e406] [cursor=pointer]:
|
||||||
|
- img [ref=e407]
|
||||||
|
- generic [ref=e411]: "1"
|
||||||
|
- link "Cache 1" [ref=e413] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=form
|
||||||
|
- generic [ref=e414]:
|
||||||
|
- img "Cache" [ref=e415]
|
||||||
|
- generic [ref=e421]: "1"
|
||||||
|
- link "Logger 400" [ref=e423] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=logger
|
||||||
|
- generic [ref=e424]:
|
||||||
|
- img "Logger" [ref=e425]
|
||||||
|
- generic [ref=e429]: "400"
|
||||||
|
- link "Cache 8 in 0.12 ms" [ref=e431] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=cache
|
||||||
|
- generic [ref=e432]:
|
||||||
|
- img "Cache" [ref=e433]
|
||||||
|
- generic [ref=e438]: "8"
|
||||||
|
- generic [ref=e439]: in 0.12 ms
|
||||||
|
- link "237" [ref=e441] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=translation
|
||||||
|
- generic [ref=e442]:
|
||||||
|
- img [ref=e443]
|
||||||
|
- generic [ref=e448]: "237"
|
||||||
|
- link "Security 1" [ref=e450] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=security
|
||||||
|
- generic [ref=e451]:
|
||||||
|
- img "Security" [ref=e452]
|
||||||
|
- generic [ref=e456]: "1"
|
||||||
|
- link "Twig 241 ms" [ref=e458] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=twig
|
||||||
|
- generic [ref=e459]:
|
||||||
|
- img "Twig" [ref=e460]
|
||||||
|
- generic [ref=e464]: "241"
|
||||||
|
- generic [ref=e465]: ms
|
||||||
|
- link "13 in 24.92 ms" [ref=e467] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=db
|
||||||
|
- generic [ref=e468]:
|
||||||
|
- img [ref=e469]
|
||||||
|
- generic [ref=e474]: "13"
|
||||||
|
- generic [ref=e475]: in 24.92 ms
|
||||||
|
- link "8 in 24.12 ms" [ref=e477] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=mongodb
|
||||||
|
- generic [ref=e478]:
|
||||||
|
- img [ref=e479]
|
||||||
|
- generic [ref=e481]: "8"
|
||||||
|
- generic [ref=e482]: in 24.12 ms
|
||||||
|
- 'link "S: 0 D: 0" [ref=e484] [cursor=pointer]':
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=jms_serializer
|
||||||
|
- generic [ref=e485]:
|
||||||
|
- img [ref=e486]
|
||||||
|
- generic [ref=e488]: "S:"
|
||||||
|
- generic [ref=e489]: "0"
|
||||||
|
- generic [ref=e490]: "D:"
|
||||||
|
- generic [ref=e491]: "0"
|
||||||
|
- link "Symfony 7.4.6" [ref=e493] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/0b6b9a?panel=config
|
||||||
|
- generic [ref=e494]:
|
||||||
|
- img "Symfony" [ref=e496]
|
||||||
|
- generic [ref=e498]: 7.4.6
|
||||||
|
- button [expanded] [ref=e499] [cursor=pointer]:
|
||||||
|
- generic "Close Toolbar" [ref=e500]:
|
||||||
|
- img [ref=e501]
|
||||||
294
src/new/.playwright-mcp/page-2026-06-02T12-38-20-198Z.yml
Normal file
294
src/new/.playwright-mcp/page-2026-06-02T12-38-20-198Z.yml
Normal file
@ -0,0 +1,294 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- text: import $ from 'jquery'
|
||||||
|
- banner:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- heading "PSC Admin" [level=4] [ref=e4]
|
||||||
|
- group "Basic example" [ref=e7]:
|
||||||
|
- link "EN" [ref=e8] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/backend/shop/settings/settings/index?_locale=en
|
||||||
|
- link "DE" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/backend/shop/settings/settings/index?_locale=de
|
||||||
|
- link " Logout (admin@shop.de)" [ref=e10] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/logout
|
||||||
|
- generic [ref=e11]:
|
||||||
|
- text: Logout (admin@shop.de)
|
||||||
|
- generic [ref=e13]:
|
||||||
|
- navigation [ref=e14]:
|
||||||
|
- generic [ref=e16]:
|
||||||
|
- checkbox [ref=e17]
|
||||||
|
- text: Deaktive Shops zeigen
|
||||||
|
- combobox [ref=e18]:
|
||||||
|
- option "Bestesvonhier" [selected]
|
||||||
|
- option "eder"
|
||||||
|
- option "nowe"
|
||||||
|
- option "Printchampion"
|
||||||
|
- option "Produkttypen"
|
||||||
|
- link "Zum Shop" [ref=e19] [cursor=pointer]:
|
||||||
|
- /url: https://b-dev-tp.dockserver.de
|
||||||
|
- separator [ref=e20]
|
||||||
|
- list [ref=e21]:
|
||||||
|
- listitem [ref=e22] [cursor=pointer]:
|
||||||
|
- link " Dashboard" [ref=e23]:
|
||||||
|
- /url: /apps/backend/dashboard
|
||||||
|
- generic [ref=e24]:
|
||||||
|
- text: Dashboard
|
||||||
|
- listitem [ref=e25] [cursor=pointer]:
|
||||||
|
- link " Aufträge" [ref=e26]:
|
||||||
|
- /url: /apps/backend/order/list/index
|
||||||
|
- generic [ref=e27]:
|
||||||
|
- text: Aufträge
|
||||||
|
- listitem [ref=e28] [cursor=pointer]:
|
||||||
|
- link " Sendcloud" [ref=e29]:
|
||||||
|
- /url: /apps/backend/r2_sendcloud/list
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- text: Sendcloud
|
||||||
|
- listitem [ref=e31] [cursor=pointer]:
|
||||||
|
- generic [ref=e33]:
|
||||||
|
- generic [ref=e34]:
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- text: Produktion
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e36] [cursor=pointer]:
|
||||||
|
- generic [ref=e38]:
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]:
|
||||||
|
- text: Produkte
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e41] [cursor=pointer]:
|
||||||
|
- link " Firmen" [ref=e42]:
|
||||||
|
- /url: /apps/backend/account/list/index
|
||||||
|
- generic [ref=e43]:
|
||||||
|
- text: Firmen
|
||||||
|
- listitem [ref=e44] [cursor=pointer]:
|
||||||
|
- link " Kunden" [ref=e45]:
|
||||||
|
- /url: /apps/backend/contact/list/index
|
||||||
|
- generic [ref=e46]:
|
||||||
|
- text: Kunden
|
||||||
|
- listitem [ref=e47] [cursor=pointer]:
|
||||||
|
- link " CMS" [ref=e48]:
|
||||||
|
- /url: /apps/backend/cms/list
|
||||||
|
- generic [ref=e49]:
|
||||||
|
- text: CMS
|
||||||
|
- listitem [ref=e50] [cursor=pointer]:
|
||||||
|
- link " Versandarten" [ref=e51]:
|
||||||
|
- /url: /apps/backend/shipping/list/index
|
||||||
|
- generic [ref=e52]:
|
||||||
|
- text: Versandarten
|
||||||
|
- listitem [ref=e53] [cursor=pointer]:
|
||||||
|
- link " Zahlarten" [ref=e54]:
|
||||||
|
- /url: /apps/backend/payment/list/index
|
||||||
|
- generic [ref=e55]:
|
||||||
|
- text: Zahlarten
|
||||||
|
- listitem [ref=e56] [cursor=pointer]:
|
||||||
|
- link " News" [ref=e57]:
|
||||||
|
- /url: /apps/backend/news/list/index
|
||||||
|
- generic [ref=e58]:
|
||||||
|
- text: News
|
||||||
|
- listitem [ref=e59] [cursor=pointer]:
|
||||||
|
- link " Gutschein" [ref=e60]:
|
||||||
|
- /url: /apps/backend/voucher/list/index
|
||||||
|
- generic [ref=e61]:
|
||||||
|
- text: Gutschein
|
||||||
|
- listitem [ref=e62] [cursor=pointer]:
|
||||||
|
- generic [ref=e64]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- generic [ref=e66]:
|
||||||
|
- text: Tools
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e69]:
|
||||||
|
- generic [ref=e70]:
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- text: Shop Einstellungen
|
||||||
|
- list [ref=e72]:
|
||||||
|
- listitem [ref=e73]:
|
||||||
|
- generic [ref=e75]:
|
||||||
|
- generic [ref=e76]:
|
||||||
|
- generic [ref=e77]:
|
||||||
|
- text: Layouter
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e78]:
|
||||||
|
- link " Allgemeines" [ref=e79]:
|
||||||
|
- /url: /apps/backend/shop/settings/settings/index
|
||||||
|
- generic [ref=e80]:
|
||||||
|
- text: Allgemeines
|
||||||
|
- listitem [ref=e81]:
|
||||||
|
- link " Länder" [ref=e82]:
|
||||||
|
- /url: /apps/backend/shop/settings/country/index
|
||||||
|
- generic [ref=e83]:
|
||||||
|
- text: Länder
|
||||||
|
- listitem [ref=e84]:
|
||||||
|
- link " Routing" [ref=e85]:
|
||||||
|
- /url: /apps/backend/shop/settings/routing/index
|
||||||
|
- generic [ref=e86]:
|
||||||
|
- text: Routing
|
||||||
|
- listitem [ref=e87]:
|
||||||
|
- link " Webformulare" [ref=e88]:
|
||||||
|
- /url: /apps/backend/formular/list
|
||||||
|
- generic [ref=e89]:
|
||||||
|
- text: Webformulare
|
||||||
|
- listitem [ref=e90]:
|
||||||
|
- link " Theme" [ref=e91]:
|
||||||
|
- /url: /apps/backend/theme/settings
|
||||||
|
- generic [ref=e92]:
|
||||||
|
- text: Theme
|
||||||
|
- listitem [ref=e93]:
|
||||||
|
- link " Shipping Gateways" [ref=e94]:
|
||||||
|
- /url: /apps/backend/shipping/gateway/settings
|
||||||
|
- generic [ref=e95]:
|
||||||
|
- text: Shipping Gateways
|
||||||
|
- listitem [ref=e96]:
|
||||||
|
- link " Payment Gateways" [ref=e97]:
|
||||||
|
- /url: /apps/backend/payment/gateway/settings
|
||||||
|
- generic [ref=e98]:
|
||||||
|
- text: Payment Gateways
|
||||||
|
- listitem [ref=e99]:
|
||||||
|
- link " Domains" [ref=e100]:
|
||||||
|
- /url: /apps/backend/domain/list/index
|
||||||
|
- generic [ref=e101]:
|
||||||
|
- text: Domains
|
||||||
|
- listitem [ref=e102] [cursor=pointer]:
|
||||||
|
- link " Aktionen" [ref=e103]:
|
||||||
|
- /url: /apps/backend/queue/list/index
|
||||||
|
- generic [ref=e104]:
|
||||||
|
- text: Aktionen
|
||||||
|
- heading "Systemeinstellungen" [level=5] [ref=e105]
|
||||||
|
- list [ref=e106]:
|
||||||
|
- listitem [ref=e107] [cursor=pointer]:
|
||||||
|
- link " Statusverwaltung" [ref=e108]:
|
||||||
|
- /url: /apps/backend/system/settings/status/index
|
||||||
|
- generic [ref=e109]:
|
||||||
|
- text: Statusverwaltung
|
||||||
|
- listitem [ref=e110] [cursor=pointer]:
|
||||||
|
- link " Papierdatenbank" [ref=e111]:
|
||||||
|
- /url: /apps/backend/system/settings/paper/index
|
||||||
|
- generic [ref=e112]:
|
||||||
|
- text: Papierdatenbank
|
||||||
|
- listitem [ref=e113] [cursor=pointer]:
|
||||||
|
- link " Hilfetexte" [ref=e114]:
|
||||||
|
- /url: /apps/backend/system/settings/help/index
|
||||||
|
- generic [ref=e115]:
|
||||||
|
- text: Hilfetexte
|
||||||
|
- listitem [ref=e116] [cursor=pointer]:
|
||||||
|
- link " Systemeinstellung" [ref=e117]:
|
||||||
|
- /url: /apps/backend/system/settings/settings/index
|
||||||
|
- generic [ref=e118]:
|
||||||
|
- text: Systemeinstellung
|
||||||
|
- listitem [ref=e119] [cursor=pointer]:
|
||||||
|
- link " Logs" [ref=e120]:
|
||||||
|
- /url: /apps/backend/system/settings/log/index
|
||||||
|
- generic [ref=e121]:
|
||||||
|
- text: Logs
|
||||||
|
- listitem [ref=e122] [cursor=pointer]:
|
||||||
|
- link " Media" [ref=e123]:
|
||||||
|
- /url: /apps/backend/media/list/folder/show
|
||||||
|
- generic [ref=e124]:
|
||||||
|
- text: Media
|
||||||
|
- list [ref=e125]:
|
||||||
|
- listitem [ref=e126] [cursor=pointer]:
|
||||||
|
- link " Apps & App Store" [ref=e127]:
|
||||||
|
- /url: /apps/backend/plugin/list
|
||||||
|
- generic [ref=e128]:
|
||||||
|
- text: Apps & App Store
|
||||||
|
- separator [ref=e129]
|
||||||
|
- paragraph [ref=e130]: 02.06.2026 14:38:18
|
||||||
|
- main [ref=e131]:
|
||||||
|
- heading " Shop > Einstellungen" [level=3] [ref=e135]:
|
||||||
|
- generic [ref=e136]:
|
||||||
|
- text: Shop > Einstellungen
|
||||||
|
- generic [ref=e139]:
|
||||||
|
- 'heading "Bestesvonhier (ID: 2)" [level=4] [ref=e141]'
|
||||||
|
- generic [ref=e143]:
|
||||||
|
- tablist [ref=e145]:
|
||||||
|
- tab "Allgemein" [ref=e146] [cursor=pointer]
|
||||||
|
- tab "Meta" [ref=e147] [cursor=pointer]
|
||||||
|
- tab "Betreiber" [ref=e148] [cursor=pointer]
|
||||||
|
- tab "Nummernkreise" [ref=e149] [cursor=pointer]
|
||||||
|
- tab "Bestellablauf" [ref=e150] [cursor=pointer]
|
||||||
|
- tab "Preise" [ref=e151] [cursor=pointer]
|
||||||
|
- tab "Dokumente (Allgemein)" [ref=e152] [cursor=pointer]
|
||||||
|
- tab "Dokumente (Auftrag)" [ref=e153] [cursor=pointer]
|
||||||
|
- tab "Dokumente (Position)" [ref=e154] [cursor=pointer]
|
||||||
|
- tab "Rechtliches" [ref=e155] [cursor=pointer]
|
||||||
|
- tab "API" [ref=e156] [cursor=pointer]
|
||||||
|
- tab "Variable Felder" [ref=e157] [cursor=pointer]
|
||||||
|
- tab "Mailvorlagen" [ref=e158] [cursor=pointer]
|
||||||
|
- tab "Templateprint" [ref=e159] [cursor=pointer]
|
||||||
|
- tab "Erweitert" [ref=e160] [cursor=pointer]
|
||||||
|
- tab "SMTP" [selected] [ref=e161] [cursor=pointer]
|
||||||
|
- tab "Friendly Captcha" [ref=e162] [cursor=pointer]
|
||||||
|
- tab "CaptchaFox" [ref=e163] [cursor=pointer]
|
||||||
|
- tab "Saxoprint" [ref=e164] [cursor=pointer]
|
||||||
|
- tab "Sendcloud" [ref=e165] [cursor=pointer]
|
||||||
|
- tab "Printess" [ref=e166] [cursor=pointer]
|
||||||
|
- tab "Wir machen Druck" [ref=e167] [cursor=pointer]
|
||||||
|
- tab "GoogleXML" [ref=e168] [cursor=pointer]
|
||||||
|
- tab "Pitchprint R2 API" [ref=e169] [cursor=pointer]
|
||||||
|
- generic [ref=e171]:
|
||||||
|
- text:
|
||||||
|
- tabpanel [ref=e172]:
|
||||||
|
- group [ref=e173]:
|
||||||
|
- heading "SMTP" [level=4] [ref=e174]
|
||||||
|
- paragraph [ref=e175]: If disabled, the instance / default SMTP configuration is used.
|
||||||
|
- generic [ref=e176]:
|
||||||
|
- generic [ref=e181]:
|
||||||
|
- checkbox "Use own SMTP credentials" [ref=e182]
|
||||||
|
- generic [ref=e183]: Use own SMTP credentials
|
||||||
|
- generic [ref=e188]:
|
||||||
|
- checkbox "SMTP TLS" [ref=e189]
|
||||||
|
- generic [ref=e190]: SMTP TLS
|
||||||
|
- generic [ref=e191]:
|
||||||
|
- generic [ref=e193]:
|
||||||
|
- generic [ref=e195]: SMTP Host
|
||||||
|
- textbox "SMTP Host" [ref=e197]
|
||||||
|
- generic [ref=e199]:
|
||||||
|
- generic [ref=e201]: SMTP Port
|
||||||
|
- spinbutton "SMTP Port" [ref=e203]
|
||||||
|
- generic [ref=e204]:
|
||||||
|
- generic [ref=e206]:
|
||||||
|
- generic [ref=e208]: SMTP Username
|
||||||
|
- textbox "SMTP Username" [ref=e210]
|
||||||
|
- generic [ref=e212]:
|
||||||
|
- generic [ref=e214]: SMTP Password
|
||||||
|
- textbox "SMTP Password" [ref=e216]
|
||||||
|
- link "Test settings" [ref=e219] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/shop/settings/settings/smtptest
|
||||||
|
- button "Speichern" [ref=e224] [cursor=pointer]
|
||||||
|
- generic [ref=e226]:
|
||||||
|
- generic [ref=e227]:
|
||||||
|
- heading "Hilfe" [level=4] [ref=e229]
|
||||||
|
- button "Aufklappen / Zuklappen" [ref=e231] [cursor=pointer]
|
||||||
|
- generic [ref=e232]:
|
||||||
|
- heading "Changes" [level=4] [ref=e234]
|
||||||
|
- table [ref=e236]:
|
||||||
|
- rowgroup [ref=e237]:
|
||||||
|
- row "Date Username Changes" [ref=e238]:
|
||||||
|
- columnheader "Date" [ref=e239]
|
||||||
|
- columnheader "Username" [ref=e240]
|
||||||
|
- columnheader "Changes" [ref=e241]
|
||||||
|
- rowgroup [ref=e242]:
|
||||||
|
- row "16:00:57 28.06.2024 admin@shop.de" [ref=e243]:
|
||||||
|
- cell "16:00:57 28.06.2024" [ref=e244]
|
||||||
|
- cell "admin@shop.de" [ref=e245]
|
||||||
|
- cell [ref=e246]
|
||||||
|
- cell [ref=e247]
|
||||||
|
- row "14:23:55 17.11.2023 admin@shop.de" [ref=e248]:
|
||||||
|
- cell "14:23:55 17.11.2023" [ref=e249]
|
||||||
|
- cell "admin@shop.de" [ref=e250]
|
||||||
|
- cell [ref=e251]
|
||||||
|
- cell [ref=e252]
|
||||||
|
- row "12:35:05 09.10.2023 admin@shop.de" [ref=e253]:
|
||||||
|
- cell "12:35:05 09.10.2023" [ref=e254]
|
||||||
|
- cell "admin@shop.de" [ref=e255]
|
||||||
|
- cell [ref=e256]
|
||||||
|
- cell [ref=e257]
|
||||||
|
- region "Symfony Web Debug Toolbar" [ref=e258]:
|
||||||
|
- generic [ref=e261]:
|
||||||
|
- link "Symfony Loading…" [ref=e263] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/c2b3a3?panel=request
|
||||||
|
- generic [ref=e264]:
|
||||||
|
- img "Symfony" [ref=e265]
|
||||||
|
- generic [ref=e267]: Loading…
|
||||||
|
- button [expanded] [ref=e268] [cursor=pointer]:
|
||||||
|
- generic "Close Toolbar" [ref=e269]:
|
||||||
|
- img [ref=e270]
|
||||||
181
src/new/.playwright-mcp/page-2026-06-02T12-38-30-494Z.yml
Normal file
181
src/new/.playwright-mcp/page-2026-06-02T12-38-30-494Z.yml
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- text: import $ from 'jquery'
|
||||||
|
- banner:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- heading "PSC Admin" [level=4] [ref=e4]
|
||||||
|
- group "Basic example" [ref=e7]:
|
||||||
|
- link "EN" [ref=e8] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/backend/shop/settings/settings/smtptest?_locale=en
|
||||||
|
- link "DE" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/backend/shop/settings/settings/smtptest?_locale=de
|
||||||
|
- link " Logout (admin@shop.de)" [ref=e10] [cursor=pointer]:
|
||||||
|
- /url: /apps/backend/logout
|
||||||
|
- generic [ref=e11]:
|
||||||
|
- text: Logout (admin@shop.de)
|
||||||
|
- generic [ref=e13]:
|
||||||
|
- navigation [ref=e14]:
|
||||||
|
- generic [ref=e16]:
|
||||||
|
- checkbox [ref=e17]
|
||||||
|
- text: Deaktive Shops zeigen
|
||||||
|
- combobox [ref=e18]:
|
||||||
|
- option "Bestesvonhier" [selected]
|
||||||
|
- option "eder"
|
||||||
|
- option "nowe"
|
||||||
|
- option "Printchampion"
|
||||||
|
- option "Produkttypen"
|
||||||
|
- link "Zum Shop" [ref=e19] [cursor=pointer]:
|
||||||
|
- /url: https://b-dev-tp.dockserver.de
|
||||||
|
- separator [ref=e20]
|
||||||
|
- list [ref=e21]:
|
||||||
|
- listitem [ref=e22] [cursor=pointer]:
|
||||||
|
- link " Dashboard" [ref=e23]:
|
||||||
|
- /url: /apps/backend/dashboard
|
||||||
|
- generic [ref=e24]:
|
||||||
|
- text: Dashboard
|
||||||
|
- listitem [ref=e25] [cursor=pointer]:
|
||||||
|
- link " Aufträge" [ref=e26]:
|
||||||
|
- /url: /apps/backend/order/list/index
|
||||||
|
- generic [ref=e27]:
|
||||||
|
- text: Aufträge
|
||||||
|
- listitem [ref=e28] [cursor=pointer]:
|
||||||
|
- link " Sendcloud" [ref=e29]:
|
||||||
|
- /url: /apps/backend/r2_sendcloud/list
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- text: Sendcloud
|
||||||
|
- listitem [ref=e31] [cursor=pointer]:
|
||||||
|
- generic [ref=e33]:
|
||||||
|
- generic [ref=e34]:
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- text: Produktion
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e36] [cursor=pointer]:
|
||||||
|
- generic [ref=e38]:
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]:
|
||||||
|
- text: Produkte
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e41] [cursor=pointer]:
|
||||||
|
- link " Firmen" [ref=e42]:
|
||||||
|
- /url: /apps/backend/account/list/index
|
||||||
|
- generic [ref=e43]:
|
||||||
|
- text: Firmen
|
||||||
|
- listitem [ref=e44] [cursor=pointer]:
|
||||||
|
- link " Kunden" [ref=e45]:
|
||||||
|
- /url: /apps/backend/contact/list/index
|
||||||
|
- generic [ref=e46]:
|
||||||
|
- text: Kunden
|
||||||
|
- listitem [ref=e47] [cursor=pointer]:
|
||||||
|
- link " CMS" [ref=e48]:
|
||||||
|
- /url: /apps/backend/cms/list
|
||||||
|
- generic [ref=e49]:
|
||||||
|
- text: CMS
|
||||||
|
- listitem [ref=e50] [cursor=pointer]:
|
||||||
|
- link " Versandarten" [ref=e51]:
|
||||||
|
- /url: /apps/backend/shipping/list/index
|
||||||
|
- generic [ref=e52]:
|
||||||
|
- text: Versandarten
|
||||||
|
- listitem [ref=e53] [cursor=pointer]:
|
||||||
|
- link " Zahlarten" [ref=e54]:
|
||||||
|
- /url: /apps/backend/payment/list/index
|
||||||
|
- generic [ref=e55]:
|
||||||
|
- text: Zahlarten
|
||||||
|
- listitem [ref=e56] [cursor=pointer]:
|
||||||
|
- link " News" [ref=e57]:
|
||||||
|
- /url: /apps/backend/news/list/index
|
||||||
|
- generic [ref=e58]:
|
||||||
|
- text: News
|
||||||
|
- listitem [ref=e59] [cursor=pointer]:
|
||||||
|
- link " Gutschein" [ref=e60]:
|
||||||
|
- /url: /apps/backend/voucher/list/index
|
||||||
|
- generic [ref=e61]:
|
||||||
|
- text: Gutschein
|
||||||
|
- listitem [ref=e62] [cursor=pointer]:
|
||||||
|
- generic [ref=e64]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- generic [ref=e66]:
|
||||||
|
- text: Tools
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e69]:
|
||||||
|
- generic [ref=e70]:
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- text: Shop Einstellungen
|
||||||
|
- text:
|
||||||
|
- listitem [ref=e72] [cursor=pointer]:
|
||||||
|
- link " Aktionen" [ref=e73]:
|
||||||
|
- /url: /apps/backend/queue/list/index
|
||||||
|
- generic [ref=e74]:
|
||||||
|
- text: Aktionen
|
||||||
|
- heading "Systemeinstellungen" [level=5] [ref=e75]
|
||||||
|
- list [ref=e76]:
|
||||||
|
- listitem [ref=e77] [cursor=pointer]:
|
||||||
|
- link " Statusverwaltung" [ref=e78]:
|
||||||
|
- /url: /apps/backend/system/settings/status/index
|
||||||
|
- generic [ref=e79]:
|
||||||
|
- text: Statusverwaltung
|
||||||
|
- listitem [ref=e80] [cursor=pointer]:
|
||||||
|
- link " Papierdatenbank" [ref=e81]:
|
||||||
|
- /url: /apps/backend/system/settings/paper/index
|
||||||
|
- generic [ref=e82]:
|
||||||
|
- text: Papierdatenbank
|
||||||
|
- listitem [ref=e83] [cursor=pointer]:
|
||||||
|
- link " Hilfetexte" [ref=e84]:
|
||||||
|
- /url: /apps/backend/system/settings/help/index
|
||||||
|
- generic [ref=e85]:
|
||||||
|
- text: Hilfetexte
|
||||||
|
- listitem [ref=e86] [cursor=pointer]:
|
||||||
|
- link " Systemeinstellung" [ref=e87]:
|
||||||
|
- /url: /apps/backend/system/settings/settings/index
|
||||||
|
- generic [ref=e88]:
|
||||||
|
- text: Systemeinstellung
|
||||||
|
- listitem [ref=e89] [cursor=pointer]:
|
||||||
|
- link " Logs" [ref=e90]:
|
||||||
|
- /url: /apps/backend/system/settings/log/index
|
||||||
|
- generic [ref=e91]:
|
||||||
|
- text: Logs
|
||||||
|
- listitem [ref=e92] [cursor=pointer]:
|
||||||
|
- link " Media" [ref=e93]:
|
||||||
|
- /url: /apps/backend/media/list/folder/show
|
||||||
|
- generic [ref=e94]:
|
||||||
|
- text: Media
|
||||||
|
- list [ref=e95]:
|
||||||
|
- listitem [ref=e96] [cursor=pointer]:
|
||||||
|
- link " Apps & App Store" [ref=e97]:
|
||||||
|
- /url: /apps/backend/plugin/list
|
||||||
|
- generic [ref=e98]:
|
||||||
|
- text: Apps & App Store
|
||||||
|
- separator [ref=e99]
|
||||||
|
- paragraph [ref=e100]: 02.06.2026 14:38:30
|
||||||
|
- main [ref=e101]:
|
||||||
|
- heading " Bestesvonhier > Smtp Einstellungen testen" [level=3] [ref=e105]:
|
||||||
|
- generic [ref=e106]:
|
||||||
|
- text: Bestesvonhier > Smtp Einstellungen testen
|
||||||
|
- generic [ref=e108]:
|
||||||
|
- generic [ref=e109]:
|
||||||
|
- heading "Smtp Einstellungen testen" [level=4] [ref=e111]
|
||||||
|
- generic [ref=e112]:
|
||||||
|
- generic [ref=e113]:
|
||||||
|
- generic [ref=e115]:
|
||||||
|
- generic [ref=e117]: Von
|
||||||
|
- textbox "Von" [ref=e119]: admin@printchampion.eu
|
||||||
|
- generic [ref=e121]:
|
||||||
|
- generic [ref=e123]: An
|
||||||
|
- textbox "An" [ref=e125]: admin@shop.de
|
||||||
|
- generic [ref=e126]:
|
||||||
|
- generic [ref=e128]:
|
||||||
|
- generic [ref=e130]: Betreff
|
||||||
|
- textbox "Betreff" [ref=e132]: Testmail
|
||||||
|
- generic [ref=e134]:
|
||||||
|
- generic [ref=e136]: Text
|
||||||
|
- textbox "Text" [ref=e138]: Test
|
||||||
|
- button "senden" [ref=e143] [cursor=pointer]
|
||||||
|
- region "Symfony Web Debug Toolbar" [ref=e144]:
|
||||||
|
- generic [ref=e147]:
|
||||||
|
- link "Symfony Loading…" [ref=e149] [cursor=pointer]:
|
||||||
|
- /url: http://type-dev-tp.local/apps/_profiler/b3c5f7?panel=request
|
||||||
|
- generic [ref=e150]:
|
||||||
|
- img "Symfony" [ref=e151]
|
||||||
|
- generic [ref=e153]: Loading…
|
||||||
|
- button [expanded] [ref=e154] [cursor=pointer]:
|
||||||
|
- generic "Close Toolbar" [ref=e155]:
|
||||||
|
- img [ref=e156]
|
||||||
@ -1,27 +1,40 @@
|
|||||||
const Order_List_Detail = ({ uuid, basketField1, customerInfo, basketField2, pos, price, product, status, allNet, reOrder, reOrderOrder, reOrderPos }, orderUuid) => `
|
const Order_List_Detail = ({ uuid, basketField1, customerInfo, basketField2, pos, price, product, status, allNet, reOrder, reOrderOrder, reOrderPos }, orderUuid) => `
|
||||||
<div style="${psc.order.get_pos_bg_color(status)}" class="row ${psc.order.get_pos_bg_color_class(status)}" id="row-${uuid}">
|
<tr style="${psc.order.get_pos_bg_color(status)}" class="border-t border-stroke ${psc.order.get_pos_bg_color_class(status)}" id="row-${uuid}">
|
||||||
<div class="col-1 p-1">${pos}</div>
|
<td class="px-2 py-3"></td>
|
||||||
<div class="col-4 p-1">
|
<td class="px-2 py-3 font-medium">${pos}</td>
|
||||||
${
|
<td class="px-2 py-3" colspan="2"></td>
|
||||||
(product => product.originalProduct ? `<a href="/apps/backend/product/edit/index/${product.originalProduct.uuid}">${product.originalProduct.title}</a>` : `<a href="/apps/backend/product/edit/index/${product.uuid}">${product.title}</a>` )(product) //call the anonymous inline with the data we care about
|
<td class="px-2 py-3" colspan="2"></td>
|
||||||
}
|
<td class="px-2 py-3"></td>
|
||||||
<br/>ArtNr intern: ${product.nrIntern}<br/>
|
<td class="px-2 py-3">
|
||||||
${psc.order.get_special_product_options(product.specialProductTypeObject)}</div>
|
${
|
||||||
<div class="col-1 p-1">Auflage: ${price.count}</div>
|
(product => product.originalProduct ? `<a href="/apps/backend/product/edit/index/${product.originalProduct.uuid}" class="text-psc-500 hover:underline">${product.originalProduct.title}</a>` : `<a href="/apps/backend/product/edit/index/${product.uuid}" class="text-psc-500 hover:underline">${product.title}</a>` )(product)
|
||||||
<div class="col-1 p-1">Kunden Info: ${customerInfo}${(reOrder? `<br/><strong>Ist eine Nachbestellung</strong>`:``)}</div>
|
}
|
||||||
<div class="col-1 p-1">${basketField1}</div>
|
<br/><span class="text-xs text-gray-600">ArtNr intern: ${product.nrIntern}</span><br/>
|
||||||
<div class="col-1 p-1">${basketField2}</div>
|
${psc.order.get_special_product_options(product.specialProductTypeObject)}
|
||||||
<div class="col-1 p-1 text-end">${new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(price.allNet/100)} <strong>(${new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(price.allGross/100)})</strong></div>
|
</td>
|
||||||
<div class="col-2 p-2 text-end"><div class="btn-group btn-group-sm w-100">
|
<td class="px-2 py-3">
|
||||||
<button type="button" class="btn btn-primary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
<span class="text-xs">Auflage: ${price.count}</span>
|
||||||
${psc.order.get_pos_status(status).internalName}
|
</td>
|
||||||
|
<td class="px-2 py-3">
|
||||||
|
<span class="text-xs">Kunden Info: ${customerInfo}${(reOrder? `<br/><strong class="text-yellow-600">Ist eine Nachbestellung</strong>`:``)}</span>
|
||||||
|
</td>
|
||||||
|
<td class="px-2 py-3 text-right whitespace-nowrap">
|
||||||
|
${new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(price.allNet/100)} <br/><strong>(${new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(price.allGross/100)})</strong>
|
||||||
|
</td>
|
||||||
|
<td class="px-2 py-3 text-right">
|
||||||
|
<div class="relative inline-block text-left">
|
||||||
|
<button type="button" class="inline-flex justify-between items-center w-full px-3 py-1.5 text-xs font-medium text-white bg-psc-500 hover:bg-psc-600 rounded-sm shadow-sm min-w-[120px]">
|
||||||
|
${psc.order.get_pos_status(status).internalName}
|
||||||
|
<svg class="w-4 h-4 ml-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
|
||||||
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
<div class="dropdown-menu">
|
<div class="hidden absolute right-0 z-10 mt-1 w-48 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5">
|
||||||
${psc.order.get_pos_status_loop(orderUuid, uuid)}
|
${psc.order.get_pos_status_loop(orderUuid, uuid)}
|
||||||
</div>
|
</div>
|
||||||
</div></div>
|
</div>
|
||||||
<div class="col-1 p-1"></div>
|
</td>
|
||||||
</div>
|
</tr>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const Order_List_Detail_Simple = ({ uuid, basketField1, customerInfo, basketField2, pos, price, product, status, allNet }, orderUuid) => `
|
const Order_List_Detail_Simple = ({ uuid, basketField1, customerInfo, basketField2, pos, price, product, status, allNet }, orderUuid) => `
|
||||||
@ -45,7 +58,7 @@ const Order_List_Detail_Simple = ({ uuid, basketField1, customerInfo, basketFiel
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
const Order_List_Pos_Status = (status, orderUuid, posUuid) => `
|
const Order_List_Pos_Status = (status, orderUuid, posUuid) => `
|
||||||
<button type="button" class="dropdown-item switch_pos" data-order-uuid="${orderUuid}" data-pos-uuid="${posUuid}" data-status="${status.code}">${status.internalName}</button>
|
<button type="button" class="block w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 switch_pos" data-order-uuid="${orderUuid}" data-pos-uuid="${posUuid}" data-status="${status.code}">${status.internalName}</button>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const Order_List_Pos_Calc_Option = (elm) => `
|
const Order_List_Pos_Calc_Option = (elm) => `
|
||||||
@ -91,25 +104,31 @@ export class order {
|
|||||||
bind_buttons() {
|
bind_buttons() {
|
||||||
$('.toogle_list_detail_view').off();
|
$('.toogle_list_detail_view').off();
|
||||||
$('.toogle_list_detail_view').on('click', function() {
|
$('.toogle_list_detail_view').on('click', function() {
|
||||||
var uuid = $(this).data().uuid;
|
var uuid = $(this).data().uuid;
|
||||||
if($('#rows-' + uuid + ' > div').length > 0) {
|
var $icon = $(this);
|
||||||
|
if($('#rows-' + uuid).children().length > 0) {
|
||||||
$('#rows-' + uuid).html('');
|
$('#rows-' + uuid).html('');
|
||||||
|
$icon.removeClass('fa-minus').addClass('fa-plus');
|
||||||
}else{
|
}else{
|
||||||
psc.order.load_detail(uuid);
|
psc.order.load_detail(uuid);
|
||||||
|
$icon.removeClass('fa-plus').addClass('fa-minus');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('.toogle_list_simple_detail_view').off();
|
$('.toogle_list_simple_detail_view').off();
|
||||||
$('.toogle_list_simple_detail_view').on('click', function() {
|
$('.toogle_list_simple_detail_view').on('click', function() {
|
||||||
var uuid = $(this).data().uuid;
|
var uuid = $(this).data().uuid;
|
||||||
if($('#rows-' + uuid + ' > tr').length > 0) {
|
var $icon = $(this);
|
||||||
|
if($('#rows-' + uuid).children().length > 0) {
|
||||||
$('#rows-' + uuid).html('');
|
$('#rows-' + uuid).html('');
|
||||||
|
$icon.removeClass('fa-minus').addClass('fa-plus');
|
||||||
}else{
|
}else{
|
||||||
psc.order.load_detail(uuid, true);
|
psc.order.load_detail(uuid, true);
|
||||||
|
$icon.removeClass('fa-plus').addClass('fa-minus');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
load_detail(orderUuid, simple = false) {
|
load_detail(orderUuid, simple = false) {
|
||||||
|
|||||||
BIN
src/new/assets/images/changelog/screen1.png
Normal file
BIN
src/new/assets/images/changelog/screen1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 36 KiB |
BIN
src/new/assets/images/changelog/screen2.png
Normal file
BIN
src/new/assets/images/changelog/screen2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 120 KiB |
@ -2,16 +2,27 @@ import "./css/backend.css"
|
|||||||
import Alpine from 'alpinejs';
|
import Alpine from 'alpinejs';
|
||||||
import persist from '@alpinejs/persist'
|
import persist from '@alpinejs/persist'
|
||||||
import $ from 'jquery'
|
import $ from 'jquery'
|
||||||
window.$ = window.jQuery = $;
|
import 'summernote/dist/summernote-lite.js'
|
||||||
|
import 'summernote/dist/summernote-lite.min.css'
|
||||||
|
import '../backend/dashboard/js/summernote/mediabundle.plugin.js'
|
||||||
import { initTabs } from 'david-ai';
|
import { initTabs } from 'david-ai';
|
||||||
|
import { registerVueControllerComponents } from '@symfony/ux-vue';
|
||||||
|
import { startStimulusApp } from '@symfony/stimulus-bundle';
|
||||||
|
import { order } from './js/order.js';
|
||||||
|
import { multiselect } from './js/multiselect.js';
|
||||||
|
|
||||||
|
window.$ = window.jQuery = $;
|
||||||
// Initialize tabs functionality
|
// Initialize tabs functionality
|
||||||
initTabs();
|
initTabs();
|
||||||
import { registerVueControllerComponents } from '@symfony/ux-vue';
|
|
||||||
registerVueControllerComponents()
|
registerVueControllerComponents()
|
||||||
import { startStimulusApp } from '@symfony/stimulus-bundle';
|
|
||||||
const app = startStimulusApp();
|
const app = startStimulusApp();
|
||||||
Alpine.plugin(persist)
|
Alpine.plugin(persist)
|
||||||
|
|
||||||
|
// Initialize PSC global object
|
||||||
|
window.psc = window.psc || {};
|
||||||
|
window.psc.order = new order();
|
||||||
|
window.psc.multiselect = new multiselect();
|
||||||
|
|
||||||
Alpine.store('theme', {
|
Alpine.store('theme', {
|
||||||
theme: Alpine.$persist("light").as('theme'),
|
theme: Alpine.$persist("light").as('theme'),
|
||||||
|
|
||||||
@ -36,3 +47,43 @@ Alpine.store('sideBar', {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
Alpine.start();
|
Alpine.start();
|
||||||
|
|
||||||
|
// Initialize PSC modules
|
||||||
|
window.psc.order.init();
|
||||||
|
window.psc.multiselect.init();
|
||||||
|
|
||||||
|
const initSummernote = () => {
|
||||||
|
if (!$.fn?.summernote) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).on('blur', '.note-codable', function () {
|
||||||
|
const codeviewHtml = $(this).val();
|
||||||
|
const $summernoteTextarea = $(this).closest('.note-editor').siblings('textarea');
|
||||||
|
$summernoteTextarea.val(codeviewHtml);
|
||||||
|
});
|
||||||
|
|
||||||
|
const toolbar = [
|
||||||
|
['style', ['style']],
|
||||||
|
['font', ['bold', 'italic', 'underline', 'clear']],
|
||||||
|
['fontsize', ['fontsize']],
|
||||||
|
['color', ['color']],
|
||||||
|
['para', ['ul', 'ol', 'paragraph']],
|
||||||
|
['height', ['height']],
|
||||||
|
['table', ['table']],
|
||||||
|
['insert', ['link', 'hr', 'image']],
|
||||||
|
['view', ['fullscreen', 'codeview']],
|
||||||
|
['help', ['help']],
|
||||||
|
];
|
||||||
|
|
||||||
|
if (typeof window.mediaBundleBrowser === 'function') {
|
||||||
|
toolbar.push(['media', ['media']]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$('.summernote').summernote({
|
||||||
|
height: 400,
|
||||||
|
toolbar,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', initSummernote);
|
||||||
|
|||||||
@ -52,15 +52,65 @@
|
|||||||
background-color: inherit !important;
|
background-color: inherit !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Restore default typography styles inside Summernote editor */
|
||||||
|
.note-editable {
|
||||||
|
@apply prose prose-sm max-w-none;
|
||||||
|
}
|
||||||
|
.note-editable h1 {
|
||||||
|
@apply text-2xl font-bold mt-4 mb-2;
|
||||||
|
}
|
||||||
|
.note-editable h2 {
|
||||||
|
@apply text-xl font-bold mt-3 mb-2;
|
||||||
|
}
|
||||||
|
.note-editable h3 {
|
||||||
|
@apply text-lg font-bold mt-3 mb-1;
|
||||||
|
}
|
||||||
|
.note-editable h4 {
|
||||||
|
@apply text-base font-bold mt-2 mb-1;
|
||||||
|
}
|
||||||
|
.note-editable h5 {
|
||||||
|
@apply text-sm font-bold mt-2 mb-1;
|
||||||
|
}
|
||||||
|
.note-editable h6 {
|
||||||
|
@apply text-xs font-bold mt-2 mb-1;
|
||||||
|
}
|
||||||
|
.note-editable ul {
|
||||||
|
@apply list-disc pl-6 my-2;
|
||||||
|
}
|
||||||
|
.note-editable ol {
|
||||||
|
@apply list-decimal pl-6 my-2;
|
||||||
|
}
|
||||||
|
.note-editable blockquote {
|
||||||
|
@apply border-l-4 border-gray-300 pl-4 italic my-2;
|
||||||
|
}
|
||||||
|
.note-editable a {
|
||||||
|
@apply text-blue-600 underline;
|
||||||
|
}
|
||||||
|
.note-editable table {
|
||||||
|
@apply border-collapse w-full my-2;
|
||||||
|
}
|
||||||
|
.note-editable td, .note-editable th {
|
||||||
|
@apply border border-gray-300 px-2 py-1;
|
||||||
|
}
|
||||||
|
.note-editable p {
|
||||||
|
@apply my-1;
|
||||||
|
}
|
||||||
|
.note-editable hr {
|
||||||
|
@apply border-t border-gray-300 my-4;
|
||||||
|
}
|
||||||
|
.note-editable img {
|
||||||
|
@apply max-w-full h-auto;
|
||||||
|
}
|
||||||
|
|
||||||
.dropdown:hover .dropdown-menu {
|
.dropdown:hover .dropdown-menu {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.badge-yes {
|
.badge-yes {
|
||||||
@apply inline-flex rounded-sm bg-lime-500 px-2 py-1 text-sm font-medium text-white hover:bg-opacity-90 justify-center shadow-xl;
|
@apply inline-flex items-center rounded-full bg-lime-500 px-2 py-1 text-xs font-medium text-white hover:bg-opacity-90 justify-center shadow-xl;
|
||||||
}
|
}
|
||||||
.badge-no {
|
.badge-no {
|
||||||
@apply inline-flex rounded-sm bg-orange-500 px-2 py-1 text-sm font-medium text-white hover:bg-opacity-90 justify-center shadow-xl;
|
@apply inline-flex items-center rounded-full bg-orange-500 px-2 py-1 text-xs font-medium text-white hover:bg-opacity-90 justify-center shadow-xl;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table-icon, .button-icon {
|
.table-icon, .button-icon {
|
||||||
@ -68,11 +118,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.psc-button-save {
|
.psc-button-save {
|
||||||
@apply inline-flex items-center justify-center py-1 gap-1 font-medium rounded-sm px-4 text-sm text-white shadow-lg bg-psc-500 hover:bg-psc-600 hover:ring-2 hover:ring-psc-500 hover:ring-offset-2 min-h-[2.25rem];
|
@apply inline-flex items-center justify-center py-1 gap-2 font-medium rounded-md px-4 text-sm text-white shadow-lg bg-psc-500 hover:bg-psc-600 hover:ring-2 hover:ring-psc-500 hover:ring-offset-2 min-h-[2.25rem];
|
||||||
}
|
}
|
||||||
|
|
||||||
.psc-button-secondary {
|
.psc-button-secondary {
|
||||||
@apply inline-flex items-center justify-center py-1 gap-1 font-medium rounded-sm px-4 text-xs text-white shadow-lg bg-psc-500 hover:bg-psc-600 hover:ring-2 hover:ring-psc-500 hover:ring-offset-2 min-h-[1.8rem];
|
@apply inline-flex items-center justify-center py-1 gap-2 font-medium rounded-md px-4 text-xs text-white shadow-lg bg-psc-500 hover:bg-psc-600 hover:ring-2 hover:ring-psc-500 hover:ring-offset-2 min-h-[1.8rem];
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-label {
|
.form-label {
|
||||||
|
|||||||
74
src/new/assets/tailwind/js/multiselect.js
Normal file
74
src/new/assets/tailwind/js/multiselect.js
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
export class multiselect {
|
||||||
|
|
||||||
|
init() {
|
||||||
|
this.bindMultiSelectButtons();
|
||||||
|
}
|
||||||
|
|
||||||
|
bindMultiSelectButtons() {
|
||||||
|
// Find all multiselect widgets
|
||||||
|
$('[data-multiselect-widget]').each(function() {
|
||||||
|
const $widget = $(this);
|
||||||
|
const $from = $widget.find('select[name$="_from"]');
|
||||||
|
const $to = $widget.find('select[name]:not([name$="_from"])');
|
||||||
|
|
||||||
|
// Get base ID (without _from or _to suffix)
|
||||||
|
const fromId = $from.attr('id');
|
||||||
|
|
||||||
|
// Right All button
|
||||||
|
$widget.find('button[id$="_rightAll"]').off('click').on('click', function() {
|
||||||
|
$from.find('option').each(function() {
|
||||||
|
const $option = $(this).clone();
|
||||||
|
$to.append($option);
|
||||||
|
});
|
||||||
|
$from.empty();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Right Selected button
|
||||||
|
$widget.find('button[id$="_rightSelected"]').off('click').on('click', function() {
|
||||||
|
$from.find('option:selected').each(function() {
|
||||||
|
const $option = $(this).clone();
|
||||||
|
$to.append($option);
|
||||||
|
$(this).remove();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Left Selected button
|
||||||
|
$widget.find('button[id$="_leftSelected"]').off('click').on('click', function() {
|
||||||
|
$to.find('option:selected').each(function() {
|
||||||
|
const $option = $(this).clone();
|
||||||
|
$from.append($option);
|
||||||
|
$(this).remove();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Left All button
|
||||||
|
$widget.find('button[id$="_leftAll"]').off('click').on('click', function() {
|
||||||
|
$to.find('option').each(function() {
|
||||||
|
const $option = $(this).clone();
|
||||||
|
$from.append($option);
|
||||||
|
});
|
||||||
|
$to.empty();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Double click to move items
|
||||||
|
$from.off('dblclick').on('dblclick', 'option', function() {
|
||||||
|
const $option = $(this).clone();
|
||||||
|
$to.append($option);
|
||||||
|
$(this).remove();
|
||||||
|
});
|
||||||
|
|
||||||
|
$to.off('dblclick').on('dblclick', 'option', function() {
|
||||||
|
const $option = $(this).clone();
|
||||||
|
$from.append($option);
|
||||||
|
$(this).remove();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Before form submit, select all options in the "to" select
|
||||||
|
$('form').on('submit', function() {
|
||||||
|
$(this).find('[data-multiselect-widget]').each(function() {
|
||||||
|
$(this).find('select[name]:not([name$="_from"]) option').prop('selected', true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
344
src/new/assets/tailwind/js/order.js
Normal file
344
src/new/assets/tailwind/js/order.js
Normal file
@ -0,0 +1,344 @@
|
|||||||
|
const Order_List_Preview = (uploadTypeObject) => {
|
||||||
|
const notAvailable = `<div class="shrink-0 w-28 h-28 rounded-md border-2 border-dashed border-gray-300 bg-white flex flex-col items-center justify-center text-gray-400">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-7 h-7 mb-1">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" />
|
||||||
|
</svg>
|
||||||
|
<span class="text-xs">not available</span>
|
||||||
|
</div>`;
|
||||||
|
|
||||||
|
if (!uploadTypeObject || !uploadTypeObject.preview || !uploadTypeObject.uploads || uploadTypeObject.uploads.length === 0) {
|
||||||
|
return notAvailable;
|
||||||
|
}
|
||||||
|
|
||||||
|
const fileIconHtml = (typ) => `<div style="display:none" class="w-28 h-28 rounded-md border border-gray-200 bg-gray-100 flex flex-col items-center justify-center text-gray-400 gap-1">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-7 h-7">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z" />
|
||||||
|
</svg>
|
||||||
|
<span class="text-xs">${typ}</span>
|
||||||
|
</div>`;
|
||||||
|
|
||||||
|
return uploadTypeObject.uploads.map(upload => {
|
||||||
|
const previewUrl = `/apps/backend/order/upload/preview?path=${encodeURIComponent(upload.path)}`;
|
||||||
|
return `<div class="shrink-0 flex flex-col items-center gap-1">
|
||||||
|
<img src="${previewUrl}"
|
||||||
|
class="w-28 h-28 object-cover rounded-md border border-gray-200 shadow-sm"
|
||||||
|
title="${upload.fileName}"
|
||||||
|
onerror="this.style.display='none'; this.nextElementSibling.style.display='flex';" />
|
||||||
|
${fileIconHtml(upload.typ)}
|
||||||
|
<span class="text-xs text-gray-500">${upload.typ}</span>
|
||||||
|
</div>`;
|
||||||
|
}).join('');
|
||||||
|
};
|
||||||
|
|
||||||
|
const Order_List_Detail = ({ uuid, basketField1, customerInfo, basketField2, pos, price, product, status, allNet, reOrder, reOrderOrder, reOrderPos, uploadTypeObject }, orderUuid) => `
|
||||||
|
<div class="px-6 py-4 bg-gray-50" style="${psc.order.get_pos_bg_color(status)}">
|
||||||
|
<div class="flex gap-4 items-start" id="row-${uuid}">
|
||||||
|
<div class="grid grid-cols-12 gap-4 flex-1">
|
||||||
|
<div class="col-span-1">
|
||||||
|
<span class="text-xs font-semibold text-gray-700">Pos:</span>
|
||||||
|
<div class="font-medium">${pos}</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-span-1">
|
||||||
|
${Order_List_Preview(uploadTypeObject)}
|
||||||
|
</div>
|
||||||
|
<div class="col-span-4">
|
||||||
|
<span class="text-xs font-semibold text-gray-700">Produkt:</span>
|
||||||
|
<div>
|
||||||
|
${(product => product.originalProduct ? `<a href="/apps/backend/product/edit/index/${product.originalProduct.uuid}" class="text-psc-500 hover:underline">${product.originalProduct.title}</a>` : `<a href="/apps/backend/product/edit/index/${product.uuid}" class="text-psc-500 hover:underline">${product.title}</a>`)(product)
|
||||||
|
}
|
||||||
|
<br/><span class="text-xs text-gray-600">ArtNr intern: ${product.nrIntern}</span><br/>
|
||||||
|
${psc.order.get_special_product_options(product.specialProductTypeObject)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-span-1">
|
||||||
|
<span class="text-xs font-semibold text-gray-700">Auflage:</span>
|
||||||
|
<div>${price.count}</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-span-2">
|
||||||
|
<span class="text-xs font-semibold text-gray-700">Kunden Info:</span>
|
||||||
|
<div class="text-sm">${customerInfo}${(reOrder ? `<br/><strong class="text-yellow-600">Ist eine Nachbestellung</strong>` : ``)}</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-span-1">
|
||||||
|
<span class="text-xs font-semibold text-gray-700">Preis:</span>
|
||||||
|
<div class="text-right whitespace-nowrap">
|
||||||
|
${new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(price.allNet / 100)}<br/>
|
||||||
|
<strong>(${new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(price.allGross / 100)})</strong>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-span-2">
|
||||||
|
<span class="text-xs font-semibold text-gray-700">Status:</span>
|
||||||
|
<div class="relative inline-block text-left w-full">
|
||||||
|
<button type="button" class="inline-flex justify-between items-center w-full px-3 py-1.5 text-xs font-medium text-white bg-psc-500 hover:bg-psc-600 rounded-sm shadow-sm">
|
||||||
|
${psc.order.get_pos_status(status).internalName}
|
||||||
|
<svg class="w-4 h-4 ml-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
<div class="hidden absolute right-0 z-10 mt-1 w-56 rounded-sm shadow-xl bg-white border border-gray-200 py-1">
|
||||||
|
${psc.order.get_pos_status_loop(orderUuid, uuid)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
const Order_List_Detail_Simple = ({ uuid, basketField1, customerInfo, basketField2, pos, price, product, status, allNet }, orderUuid) => `
|
||||||
|
<td colspan="12" class="px-6 py-4 bg-gray-50" style="${psc.order.get_pos_bg_color(status)}">
|
||||||
|
<div class="flex gap-4 w-full">
|
||||||
|
<div class="flex-none w-16">
|
||||||
|
<span class="text-xs font-semibold text-gray-700">Pos:</span>
|
||||||
|
<div class="font-medium">${pos}</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex-1">
|
||||||
|
<span class="text-xs font-semibold text-gray-700">Produkt:</span>
|
||||||
|
<div>
|
||||||
|
${(product => product.originalProduct ? `<a href="/apps/backend/product/edit/index/${product.originalProduct.uuid}" class="text-psc-500 hover:underline">${product.originalProduct.title}</a>` : `<a href="/apps/backend/product/edit/index/${product.uuid}" class="text-psc-500 hover:underline">${product.title}</a>`)(product)
|
||||||
|
}
|
||||||
|
<br/><span class="text-xs text-gray-600">ArtNr intern: ${product.nrIntern}</span><br/>
|
||||||
|
${psc.order.get_special_product_options(product.specialProductTypeObject)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex-none w-32">
|
||||||
|
<span class="text-xs font-semibold text-gray-700">Auflage:</span>
|
||||||
|
<div>${price.count}</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex-none w-48">
|
||||||
|
<span class="text-xs font-semibold text-gray-700">Kunden Info:</span>
|
||||||
|
<div class="text-sm">${customerInfo}</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex-none w-32 text-right">
|
||||||
|
<span class="text-xs font-semibold text-gray-700">Preis:</span>
|
||||||
|
<div class="whitespace-nowrap">${new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(price.allNet / 100)} <strong>(${new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(price.allGross / 100)})</strong></div>
|
||||||
|
</div>
|
||||||
|
<div class="flex-none w-24">
|
||||||
|
<span class="text-xs font-semibold text-gray-700">Status:</span>
|
||||||
|
<div>${psc.order.get_pos_status(status).internalName}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
`;
|
||||||
|
|
||||||
|
const Order_List_Pos_Status = (status, orderUuid, posUuid) => `
|
||||||
|
<button type="button" class="flex items-center w-full px-3 py-1.5 text-xs text-gray-700 hover:bg-psc-50 hover:text-psc-700 transition-colors switch_pos" data-order-uuid="${orderUuid}" data-pos-uuid="${posUuid}" data-status="${status.code}">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-3.5 h-3.5 mr-2 text-gray-400">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" d="M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
|
||||||
|
</svg>
|
||||||
|
${status.internalName}
|
||||||
|
</button>
|
||||||
|
`;
|
||||||
|
|
||||||
|
const Order_List_Pos_Calc_Option = (elm) => `
|
||||||
|
<tr><td>${elm.name}</td><td>${elm.value}</td></tr>
|
||||||
|
`;
|
||||||
|
|
||||||
|
export class order {
|
||||||
|
|
||||||
|
init() {
|
||||||
|
this.load_status();
|
||||||
|
this.bind_buttons();
|
||||||
|
this.init_dropdowns();
|
||||||
|
}
|
||||||
|
|
||||||
|
init_dropdowns() {
|
||||||
|
// Initialize all status dropdowns (both in main table and details)
|
||||||
|
$(document).off('click.orderDropdown');
|
||||||
|
$(document).on('click.orderDropdown', '.relative.inline-block button', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
var $dropdown = $(this).next('div');
|
||||||
|
|
||||||
|
// Close all other dropdowns
|
||||||
|
$('.relative.inline-block div[class*="hidden"]').addClass('hidden');
|
||||||
|
|
||||||
|
// Toggle this dropdown
|
||||||
|
$dropdown.toggleClass('hidden');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Close dropdowns when clicking outside
|
||||||
|
$(document).on('click.orderDropdown', function (e) {
|
||||||
|
if (!$(e.target).closest('.relative.inline-block').length) {
|
||||||
|
$('.relative.inline-block div[class*="absolute"]').addClass('hidden');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
get_special_product_options(specialProductTypeObject) {
|
||||||
|
if (specialProductTypeObject.typ != 6) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return '<table>' + specialProductTypeObject.options.map(elm => {
|
||||||
|
if (elm.type != 'hidden') {
|
||||||
|
return Order_List_Pos_Calc_Option(elm);
|
||||||
|
}
|
||||||
|
}).join('') + '</table>';
|
||||||
|
}
|
||||||
|
|
||||||
|
load_status() {
|
||||||
|
if (jwt_token != "") {
|
||||||
|
$.ajax({
|
||||||
|
url: "/apps/api/system/status",
|
||||||
|
contentType: "application/json",
|
||||||
|
headers: {
|
||||||
|
"Authorization": "Bearer " + jwt_token
|
||||||
|
},
|
||||||
|
method: 'GET',
|
||||||
|
success: function (result) {
|
||||||
|
psc.order.status_order = result.order;
|
||||||
|
psc.order.status_pos = result.position;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bind_buttons() {
|
||||||
|
$('.toogle_list_detail_view').off();
|
||||||
|
$('.toogle_list_detail_view').on('click', function () {
|
||||||
|
var uuid = $(this).data().uuid;
|
||||||
|
var $icon = $(this);
|
||||||
|
if ($('#rows-' + uuid + ' td').children().length > 0) {
|
||||||
|
$('#rows-' + uuid + ' td').html('');
|
||||||
|
$icon.removeClass('fa-minus').addClass('fa-plus');
|
||||||
|
} else {
|
||||||
|
psc.order.load_detail(uuid);
|
||||||
|
$icon.removeClass('fa-plus').addClass('fa-minus');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.toogle_list_simple_detail_view').off();
|
||||||
|
$('.toogle_list_simple_detail_view').on('click', function () {
|
||||||
|
var uuid = $(this).data().uuid;
|
||||||
|
var $icon = $(this);
|
||||||
|
if ($('#rows-' + uuid + ' td').children().length > 0) {
|
||||||
|
$('#rows-' + uuid + ' td').html('');
|
||||||
|
$icon.removeClass('fa-minus').addClass('fa-plus');
|
||||||
|
} else {
|
||||||
|
psc.order.load_detail(uuid, true);
|
||||||
|
$icon.removeClass('fa-plus').addClass('fa-minus');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
load_detail(orderUuid, simple = false) {
|
||||||
|
$.ajax({
|
||||||
|
url: "/apps/api/order/getonebyuuid",
|
||||||
|
contentType: "application/json",
|
||||||
|
headers: {
|
||||||
|
"Authorization": "Bearer " + jwt_token
|
||||||
|
},
|
||||||
|
method: 'POST',
|
||||||
|
data: JSON.stringify({
|
||||||
|
uuid: orderUuid
|
||||||
|
}),
|
||||||
|
success: function (result) {
|
||||||
|
psc.order.build_details(orderUuid, result, simple);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
build_details(orderUuid, result, simple = false) {
|
||||||
|
if (simple) {
|
||||||
|
$('#rows-' + result.uuid + ' td').html(result.positions.map(x => Order_List_Detail_Simple(x, orderUuid)).join(''));
|
||||||
|
} else {
|
||||||
|
$('#rows-' + result.uuid + ' td').html(result.positions.map(x => Order_List_Detail(x, orderUuid)).join(''));
|
||||||
|
result.positions.map(x => this.loadPluginDetails(x));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
this.bind_status_buttons();
|
||||||
|
}
|
||||||
|
|
||||||
|
loadPluginDetails(pos) {
|
||||||
|
$.ajax({
|
||||||
|
url: "/apps/api/position/getpluginlistdetails/" + pos.uuid,
|
||||||
|
contentType: "application/json",
|
||||||
|
headers: {
|
||||||
|
"Authorization": "Bearer " + jwt_token
|
||||||
|
},
|
||||||
|
method: 'GET',
|
||||||
|
success: function (result) {
|
||||||
|
$('#row-' + pos.uuid).append(result.html);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
bind_status_buttons() {
|
||||||
|
// Bind status change buttons for positions
|
||||||
|
$('.switch_pos').off();
|
||||||
|
$('.switch_pos').on('click', function () {
|
||||||
|
|
||||||
|
var orderUuid = $(this).data().orderUuid;
|
||||||
|
var posUuid = $(this).data().posUuid;
|
||||||
|
var status = $(this).data().status;
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: "/apps/api/position/status/change",
|
||||||
|
contentType: "application/json",
|
||||||
|
headers: {
|
||||||
|
"Authorization": "Bearer " + jwt_token
|
||||||
|
},
|
||||||
|
data: JSON.stringify({
|
||||||
|
position: posUuid,
|
||||||
|
status: status,
|
||||||
|
}),
|
||||||
|
method: 'POST',
|
||||||
|
success: function (result) {
|
||||||
|
$('#rows-' + orderUuid + ' td').html('');
|
||||||
|
psc.order.load_detail(orderUuid);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
get_pos_bg_color(status) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
{% if orderStatuse.getPosStatusColor(pos.status) != '' %}background-color: {{ orderStatuse.getPosStatusColor(pos.status) }}{% endif %}"
|
||||||
|
*/
|
||||||
|
const found = psc.order.status_pos.find(stat => stat.code == status);
|
||||||
|
|
||||||
|
if (found && found.color != "") {
|
||||||
|
return 'background-color: ' + found.color;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
get_pos_status(status) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
{% if orderStatuse.getPosStatusColor(pos.status) != '' %}background-color: {{ orderStatuse.getPosStatusColor(pos.status) }}{% endif %}"
|
||||||
|
*/
|
||||||
|
const found = psc.order.status_pos.find(stat => stat.code == status);
|
||||||
|
if (found) {
|
||||||
|
return found;
|
||||||
|
}
|
||||||
|
|
||||||
|
return { internalName: 'notFound' };
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
get_pos_bg_color_class(status) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
class="{% if pos.status == 170 %}bg-lightdark{% elseif pos.status == 200 or pos.status == 210 %}bg-lightsuccess{% else %}bg-lightdanger{% endif %}
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (status == 170) {
|
||||||
|
return 'bg-lightdark';
|
||||||
|
}
|
||||||
|
if (status == 200 || status == 210) {
|
||||||
|
return 'bg-lightsuccess';
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'bg-lightdanger';
|
||||||
|
}
|
||||||
|
|
||||||
|
get_pos_status_loop(orderUuid, posUuid) {
|
||||||
|
return psc.order.status_pos.map(x => Order_List_Pos_Status(x, orderUuid, posUuid)).join('');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
64
src/new/bin/clear-cache.php
Normal file
64
src/new/bin/clear-cache.php
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache-Clear Script ohne Symfony-Bootstrap.
|
||||||
|
*
|
||||||
|
* Macht einen atomaren Swap des Cache-Verzeichnisses:
|
||||||
|
* 1. Benennt den aktuellen Cache in ein Temp-Verzeichnis um (atomar, laufende Prozesse behalten ihre File-Handles)
|
||||||
|
* 2. Führt cache:warmup aus (erzeugt neuen Cache)
|
||||||
|
* 3. Löscht das alte Verzeichnis im Hintergrund
|
||||||
|
*/
|
||||||
|
|
||||||
|
$env = getenv('APP_ENV') ?: 'prod';
|
||||||
|
$projectDir = dirname(__DIR__);
|
||||||
|
$cacheDir = $projectDir . '/var/cache/' . $env;
|
||||||
|
|
||||||
|
if (!is_dir($cacheDir)) {
|
||||||
|
echo "Cache directory does not exist, nothing to clear.\n";
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1. Atomarer Rename des aktuellen Cache
|
||||||
|
$oldCacheDir = $cacheDir . '_old_' . uniqid();
|
||||||
|
if (!@rename($cacheDir, $oldCacheDir)) {
|
||||||
|
echo "Failed to rename cache directory.\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "Cache directory renamed to: $oldCacheDir\n";
|
||||||
|
|
||||||
|
// 2. Cache Warmup über console command (eigener Prozess)
|
||||||
|
$consolePath = $projectDir . '/bin/console';
|
||||||
|
$command = sprintf(
|
||||||
|
'%s %s cache:warmup --env=%s 2>&1',
|
||||||
|
PHP_BINARY,
|
||||||
|
escapeshellarg($consolePath),
|
||||||
|
escapeshellarg($env)
|
||||||
|
);
|
||||||
|
|
||||||
|
echo "Running cache:warmup...\n";
|
||||||
|
$output = [];
|
||||||
|
$returnCode = 0;
|
||||||
|
exec($command, $output, $returnCode);
|
||||||
|
|
||||||
|
if ($returnCode !== 0) {
|
||||||
|
echo "cache:warmup failed (exit code $returnCode):\n";
|
||||||
|
echo implode("\n", $output) . "\n";
|
||||||
|
|
||||||
|
// Rollback: alten Cache wiederherstellen
|
||||||
|
if (!is_dir($cacheDir)) {
|
||||||
|
@rename($oldCacheDir, $cacheDir);
|
||||||
|
echo "Rolled back to old cache.\n";
|
||||||
|
}
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "cache:warmup completed.\n";
|
||||||
|
|
||||||
|
// 3. Altes Cache-Verzeichnis im Hintergrund löschen
|
||||||
|
$rmCommand = sprintf('rm -rf %s &', escapeshellarg($oldCacheDir));
|
||||||
|
exec($rmCommand);
|
||||||
|
|
||||||
|
echo "Old cache cleanup started in background.\n";
|
||||||
|
echo "Cache clear completed successfully.\n";
|
||||||
@ -25,11 +25,10 @@
|
|||||||
"cocur/slugify": "v3.1",
|
"cocur/slugify": "v3.1",
|
||||||
"composer/package-versions-deprecated": "^1.8",
|
"composer/package-versions-deprecated": "^1.8",
|
||||||
"ddeboer/imap": "1.21.*",
|
"ddeboer/imap": "1.21.*",
|
||||||
"doctrine/annotations": "^2",
|
|
||||||
"doctrine/cache": "^2",
|
"doctrine/cache": "^2",
|
||||||
"doctrine/doctrine-bundle": "^2",
|
"doctrine/doctrine-bundle": "^3",
|
||||||
"doctrine/mongodb-odm-bundle": "^5",
|
"doctrine/mongodb-odm-bundle": "^5",
|
||||||
"doctrine/orm": "^2.7",
|
"doctrine/orm": "^3",
|
||||||
"gabrielbull/ups-api": "dev-master",
|
"gabrielbull/ups-api": "dev-master",
|
||||||
"gesdinet/jwt-refresh-token-bundle": "^1.5",
|
"gesdinet/jwt-refresh-token-bundle": "^1.5",
|
||||||
"gregwar/captcha-bundle": "^2.2",
|
"gregwar/captcha-bundle": "^2.2",
|
||||||
@ -37,12 +36,11 @@
|
|||||||
"horstoeko/zugferd": "^1.0",
|
"horstoeko/zugferd": "^1.0",
|
||||||
"incenteev/composer-parameter-handler": "^2.0",
|
"incenteev/composer-parameter-handler": "^2.0",
|
||||||
"jms/serializer-bundle": "5.*",
|
"jms/serializer-bundle": "5.*",
|
||||||
"knplabs/knp-gaufrette-bundle": "0.7.*",
|
"knplabs/knp-gaufrette-bundle": "0.9.*",
|
||||||
"knplabs/knp-menu-bundle": "^3",
|
"knplabs/knp-menu-bundle": "^3",
|
||||||
"knplabs/knp-paginator-bundle": "5.9.*",
|
"knplabs/knp-paginator-bundle": "6.10.*",
|
||||||
"lexik/form-filter-bundle": "^7",
|
|
||||||
"lexik/jwt-authentication-bundle": "^3",
|
"lexik/jwt-authentication-bundle": "^3",
|
||||||
"liip/imagine-bundle": "2.9.*",
|
"liip/imagine-bundle": "2.16.*",
|
||||||
"mistic100/randomcolor": "^1.1",
|
"mistic100/randomcolor": "^1.1",
|
||||||
"mobiledetect/mobiledetectlib": "^2.8",
|
"mobiledetect/mobiledetectlib": "^2.8",
|
||||||
"mpdf/mpdf": "dev-qrcode",
|
"mpdf/mpdf": "dev-qrcode",
|
||||||
@ -50,10 +48,11 @@
|
|||||||
"nelmio/api-doc-bundle": "^4",
|
"nelmio/api-doc-bundle": "^4",
|
||||||
"nelmio/cors-bundle": "^2.2",
|
"nelmio/cors-bundle": "^2.2",
|
||||||
"nicolab/php-ftp-client": "^1.4",
|
"nicolab/php-ftp-client": "^1.4",
|
||||||
"oneup/uploader-bundle": "^3",
|
"oneup/uploader-bundle": "^5",
|
||||||
"oyejorge/less.php": "~1.5",
|
"oyejorge/less.php": "~1.5",
|
||||||
"paypal/paypal-checkout-sdk": "dev-master",
|
"paypal/paypal-checkout-sdk": "^1.0",
|
||||||
"paypal/rest-api-sdk-php": "dev-master",
|
"paypal/paypal-server-sdk": "^2",
|
||||||
|
"phenx/php-font-lib": "^1.0",
|
||||||
"phpoffice/phpspreadsheet": "^1.28",
|
"phpoffice/phpspreadsheet": "^1.28",
|
||||||
"phpseclib/phpseclib": "~3.0",
|
"phpseclib/phpseclib": "~3.0",
|
||||||
"picqer/sendcloud-php-client": "v2.8.1",
|
"picqer/sendcloud-php-client": "v2.8.1",
|
||||||
@ -64,26 +63,29 @@
|
|||||||
"ramsey/uuid": "4.5.1",
|
"ramsey/uuid": "4.5.1",
|
||||||
"sauladam/shipment-tracker": "dev-master",
|
"sauladam/shipment-tracker": "dev-master",
|
||||||
"scssphp/scssphp": "v1.11.1",
|
"scssphp/scssphp": "v1.11.1",
|
||||||
"sensio/framework-extra-bundle": "^6.1",
|
"setasign/fpdi-tcpdf": "^2.3",
|
||||||
"sofort/sofortlib-php": "3.3.2",
|
"sofort/sofortlib-php": "3.3.2",
|
||||||
"spatie/array-to-xml": "^3.4",
|
"spatie/array-to-xml": "^3.4",
|
||||||
|
"spiriitlabs/form-filter-bundle": "12.0.1",
|
||||||
|
"symfony/ai-agent": "^0.5.0",
|
||||||
|
"symfony/ai-bundle": "^0.5.0",
|
||||||
"symfony/asset": "*",
|
"symfony/asset": "*",
|
||||||
"symfony/asset-mapper": "6.4.*",
|
"symfony/asset-mapper": "7.4.*",
|
||||||
"symfony/console": "*",
|
"symfony/console": "*",
|
||||||
"symfony/dotenv": "*",
|
"symfony/dotenv": "*",
|
||||||
"symfony/expression-language": "*",
|
"symfony/expression-language": "*",
|
||||||
"symfony/flex": "^1.3.1",
|
"symfony/flex": "^2",
|
||||||
"symfony/form": "*",
|
"symfony/form": "*",
|
||||||
"symfony/framework-bundle": "*",
|
"symfony/framework-bundle": "*",
|
||||||
"symfony/http-client": "*",
|
"symfony/http-client": "*",
|
||||||
"symfony/intl": "*",
|
"symfony/intl": "*",
|
||||||
"symfony/lock": "6.4.*",
|
"symfony/lock": "7.4.*",
|
||||||
"symfony/mailer": "*",
|
"symfony/mailer": "*",
|
||||||
"symfony/mime": "*",
|
"symfony/mime": "*",
|
||||||
"symfony/monolog-bundle": "^3.8",
|
"symfony/monolog-bundle": "^4",
|
||||||
"symfony/notifier": "*",
|
"symfony/notifier": "*",
|
||||||
"symfony/process": "*",
|
"symfony/process": "*",
|
||||||
"symfony/property-access": "6.4.4",
|
"symfony/property-access": "7.4.*",
|
||||||
"symfony/property-info": "*",
|
"symfony/property-info": "*",
|
||||||
"symfony/proxy-manager-bridge": "*",
|
"symfony/proxy-manager-bridge": "*",
|
||||||
"symfony/runtime": "*",
|
"symfony/runtime": "*",
|
||||||
@ -116,9 +118,8 @@
|
|||||||
"maglnet/composer-require-checker": "4.*",
|
"maglnet/composer-require-checker": "4.*",
|
||||||
"mockery/mockery": "^1.5",
|
"mockery/mockery": "^1.5",
|
||||||
"php-parallel-lint/php-parallel-lint": "dev-develop",
|
"php-parallel-lint/php-parallel-lint": "dev-develop",
|
||||||
"phpstan/phpstan": "^1",
|
"phpstan/phpstan": "^2.1",
|
||||||
"phpunit/phpunit": "^10",
|
"phpunit/phpunit": "^10",
|
||||||
"rector/rector": "0.19.2",
|
|
||||||
"squizlabs/php_codesniffer": "*",
|
"squizlabs/php_codesniffer": "*",
|
||||||
"symfony/browser-kit": "*",
|
"symfony/browser-kit": "*",
|
||||||
"symfony/css-selector": "*",
|
"symfony/css-selector": "*",
|
||||||
@ -128,7 +129,6 @@
|
|||||||
"symfony/stopwatch": "*",
|
"symfony/stopwatch": "*",
|
||||||
"symfony/web-profiler-bundle": "*",
|
"symfony/web-profiler-bundle": "*",
|
||||||
"symplify/config-transformer": "^11.1",
|
"symplify/config-transformer": "^11.1",
|
||||||
"tomasvotruba/symfony-config-generator": "^0.1.5",
|
|
||||||
"vincentlanglet/twig-cs-fixer": "^3.5"
|
"vincentlanglet/twig-cs-fixer": "^3.5"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
@ -198,7 +198,7 @@
|
|||||||
"extra": {
|
"extra": {
|
||||||
"symfony": {
|
"symfony": {
|
||||||
"allow-contrib": false,
|
"allow-contrib": false,
|
||||||
"require": "6.4.*"
|
"require": "7.4.*"
|
||||||
},
|
},
|
||||||
"public-dir": "web/"
|
"public-dir": "web/"
|
||||||
}
|
}
|
||||||
|
|||||||
6165
src/new/composer.lock
generated
6165
src/new/composer.lock
generated
File diff suppressed because it is too large
Load Diff
@ -7,13 +7,11 @@ return [
|
|||||||
Knp\Bundle\GaufretteBundle\KnpGaufretteBundle::class => ['all' => true],
|
Knp\Bundle\GaufretteBundle\KnpGaufretteBundle::class => ['all' => true],
|
||||||
Knp\Bundle\MenuBundle\KnpMenuBundle::class => ['all' => true],
|
Knp\Bundle\MenuBundle\KnpMenuBundle::class => ['all' => true],
|
||||||
Knp\Bundle\PaginatorBundle\KnpPaginatorBundle::class => ['all' => true],
|
Knp\Bundle\PaginatorBundle\KnpPaginatorBundle::class => ['all' => true],
|
||||||
Lexik\Bundle\FormFilterBundle\LexikFormFilterBundle::class => ['all' => true],
|
|
||||||
Liip\ImagineBundle\LiipImagineBundle::class => ['all' => true],
|
Liip\ImagineBundle\LiipImagineBundle::class => ['all' => true],
|
||||||
Oneup\UploaderBundle\OneupUploaderBundle::class => ['all' => true],
|
Oneup\UploaderBundle\OneupUploaderBundle::class => ['all' => true],
|
||||||
Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
|
Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
|
||||||
Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
|
Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
|
||||||
Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true],
|
Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true],
|
||||||
Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true],
|
|
||||||
Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true],
|
Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true],
|
||||||
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
|
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
|
||||||
Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true],
|
Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true],
|
||||||
@ -29,6 +27,7 @@ return [
|
|||||||
PSC\Backend\DashboardBundle\PSCBackendDashboardBundle::class => ['all' => true],
|
PSC\Backend\DashboardBundle\PSCBackendDashboardBundle::class => ['all' => true],
|
||||||
PSC\Shop\SettingsBundle\PSCShopSettingsBundle::class => ['all' => true],
|
PSC\Shop\SettingsBundle\PSCShopSettingsBundle::class => ['all' => true],
|
||||||
PSC\System\SettingsBundle\PSCSystemSettingsBundle::class => ['all' => true],
|
PSC\System\SettingsBundle\PSCSystemSettingsBundle::class => ['all' => true],
|
||||||
|
PSC\System\ContentEngineBundle\PSCSystemContentEngineBundle::class => ['all' => true],
|
||||||
PSC\Backend\ToolsBundle\PSCBackendToolsBundle::class => ['all' => true],
|
PSC\Backend\ToolsBundle\PSCBackendToolsBundle::class => ['all' => true],
|
||||||
PSC\Shop\OrderBundle\PSCShopOrderBundle::class => ['all' => true],
|
PSC\Shop\OrderBundle\PSCShopOrderBundle::class => ['all' => true],
|
||||||
PSC\Shop\ContactBundle\PSCShopContactBundle::class => ['all' => true],
|
PSC\Shop\ContactBundle\PSCShopContactBundle::class => ['all' => true],
|
||||||
@ -46,6 +45,7 @@ return [
|
|||||||
PSC\Shop\CommunicationBundle\PSCShopCommunicationBundle::class => ['all' => true],
|
PSC\Shop\CommunicationBundle\PSCShopCommunicationBundle::class => ['all' => true],
|
||||||
PSC\Component\SteplayouterBundle\PSCComponentSteplayouterBundle::class => ['all' => true],
|
PSC\Component\SteplayouterBundle\PSCComponentSteplayouterBundle::class => ['all' => true],
|
||||||
PSC\Component\ApiBundle\PSCComponentApiBundle::class => ['all' => true],
|
PSC\Component\ApiBundle\PSCComponentApiBundle::class => ['all' => true],
|
||||||
|
PSC\Component\AiBundle\PSCComponentAiBundle::class => ['all' => true],
|
||||||
PSC\Component\ConfigurationlayouterBundle\PSCComponentConfigurationlayouterBundle::class => ['all' => true],
|
PSC\Component\ConfigurationlayouterBundle\PSCComponentConfigurationlayouterBundle::class => ['all' => true],
|
||||||
Nelmio\CorsBundle\NelmioCorsBundle::class => ['all' => true],
|
Nelmio\CorsBundle\NelmioCorsBundle::class => ['all' => true],
|
||||||
Nelmio\ApiDocBundle\NelmioApiDocBundle::class => ['all' => true],
|
Nelmio\ApiDocBundle\NelmioApiDocBundle::class => ['all' => true],
|
||||||
@ -63,4 +63,6 @@ return [
|
|||||||
Symfonycasts\TailwindBundle\SymfonycastsTailwindBundle::class => ['all' => true],
|
Symfonycasts\TailwindBundle\SymfonycastsTailwindBundle::class => ['all' => true],
|
||||||
Symfonycasts\SassBundle\SymfonycastsSassBundle::class => ['all' => true],
|
Symfonycasts\SassBundle\SymfonycastsSassBundle::class => ['all' => true],
|
||||||
Symfony\UX\Vue\VueBundle::class => ['all' => true],
|
Symfony\UX\Vue\VueBundle::class => ['all' => true],
|
||||||
|
Spiriit\Bundle\FormFilterBundle\SpiriitFormFilterBundle::class => ['all' => true],
|
||||||
|
Symfony\AI\AiBundle\AiBundle::class => ['all' => true],
|
||||||
];
|
];
|
||||||
|
|||||||
27
src/new/config/packages/ai.yaml
Normal file
27
src/new/config/packages/ai.yaml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
ai:
|
||||||
|
platform:
|
||||||
|
# Inference Platform configuration
|
||||||
|
# see https://github.com/symfony/ai/tree/main/src/platform#platform-bridges
|
||||||
|
|
||||||
|
# openai:
|
||||||
|
# api_key: '%env(OPENAI_API_KEY)%'
|
||||||
|
|
||||||
|
agent:
|
||||||
|
# Agent configuration
|
||||||
|
# see https://symfony.com/doc/current/ai/bundles/ai-bundle.html
|
||||||
|
|
||||||
|
# default:
|
||||||
|
# platform: 'ai.platform.openai'
|
||||||
|
# model: 'gpt-5-mini'
|
||||||
|
# prompt: |
|
||||||
|
# You are a pirate and you write funny.
|
||||||
|
# tools:
|
||||||
|
# - 'Symfony\AI\Agent\Bridge\Clock\Clock'
|
||||||
|
|
||||||
|
store:
|
||||||
|
# Store configuration
|
||||||
|
|
||||||
|
# chromadb:
|
||||||
|
# default:
|
||||||
|
# client: 'client.service.id'
|
||||||
|
# collection: 'my_collection'
|
||||||
@ -7,23 +7,32 @@ use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigura
|
|||||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||||
$containerConfigurator->extension(
|
$containerConfigurator->extension(
|
||||||
'monolog', [
|
'monolog', [
|
||||||
|
'channels' => ['ai'],
|
||||||
'handlers' => [
|
'handlers' => [
|
||||||
|
'ai' => [
|
||||||
|
'type' => 'stream',
|
||||||
|
'path' => '%kernel.logs_dir%/ai.log',
|
||||||
|
'level' => 'debug',
|
||||||
|
'channels' => ['ai'],
|
||||||
|
],
|
||||||
'main' => [
|
'main' => [
|
||||||
'type' => 'stream',
|
'type' => 'stream',
|
||||||
'path' => '%kernel.logs_dir%/%kernel.environment%.log',
|
'path' => '%kernel.logs_dir%/%kernel.environment%.log',
|
||||||
'level' => 'debug',
|
'level' => 'debug',
|
||||||
'channels' => [
|
'channels' => [
|
||||||
'!event',
|
'!event',
|
||||||
'!php'
|
'!php',
|
||||||
|
'!ai',
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
'console' => [
|
'console' => [
|
||||||
'type' => 'console',
|
'type' => 'console',
|
||||||
'process_psr_3_messages' => false,
|
'process_psr_3_messages' => false,
|
||||||
'channels' => [
|
'channels' => [
|
||||||
'!event',
|
'!event',
|
||||||
'!doctrine',
|
'!doctrine',
|
||||||
'!console'
|
'!console',
|
||||||
|
'!ai',
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|||||||
@ -6,23 +6,21 @@ use PSC\Libraries\DoctrineBundle\ORM\Query\AST\Functions\SimpleFunction;
|
|||||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||||
|
|
||||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||||
$containerConfigurator->extension(
|
$containerConfigurator->extension('doctrine', [
|
||||||
'doctrine',
|
'dbal' => [
|
||||||
[
|
'url' => '%env(resolve:DATABASE_URL)%',
|
||||||
'dbal' => [
|
'charset' => 'utf8mb4',
|
||||||
'url' => '%env(resolve:DATABASE_URL)%',
|
'default_table_options' => ['collate' => 'utf8mb4_unicode_ci'],
|
||||||
'charset' => 'utf8mb4',
|
'server_version' => '8.0',
|
||||||
'default_table_options' => ['collate' => 'utf8mb4_unicode_ci']],
|
],
|
||||||
'orm' => [
|
'orm' => [
|
||||||
'auto_generate_proxy_classes' => true,
|
'naming_strategy' => 'doctrine.orm.naming_strategy.underscore_number_aware',
|
||||||
'naming_strategy' => 'doctrine.orm.naming_strategy.underscore_number_aware',
|
'auto_mapping' => true,
|
||||||
'auto_mapping' => true,
|
'dql' => [
|
||||||
'dql' => [
|
'numeric_functions' => [
|
||||||
'numeric_functions' => [
|
'month' => SimpleFunction::class,
|
||||||
'month' => SimpleFunction::class
|
],
|
||||||
]
|
],
|
||||||
]
|
],
|
||||||
]
|
]);
|
||||||
]
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|||||||
@ -5,7 +5,14 @@ declare(strict_types=1);
|
|||||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||||
|
|
||||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||||
$containerConfigurator->extension('doctrine', ['orm' => ['auto_generate_proxy_classes' => false, 'metadata_cache_driver' => ['type' => 'pool', 'pool' => 'doctrine.system_cache_pool'], 'query_cache_driver' => ['type' => 'pool', 'pool' => 'doctrine.system_cache_pool'], 'result_cache_driver' => ['type' => 'pool', 'pool' => 'doctrine.result_cache_pool']]]);
|
$containerConfigurator->extension('doctrine', ['orm' => [
|
||||||
|
'metadata_cache_driver' => ['type' => 'pool', 'pool' => 'doctrine.system_cache_pool'],
|
||||||
|
'query_cache_driver' => ['type' => 'pool', 'pool' => 'doctrine.system_cache_pool'],
|
||||||
|
'result_cache_driver' => ['type' => 'pool', 'pool' => 'doctrine.result_cache_pool'],
|
||||||
|
]]);
|
||||||
|
|
||||||
$containerConfigurator->extension('framework', ['cache' => ['pools' => ['doctrine.result_cache_pool' => ['adapter' => 'cache.app'], 'doctrine.system_cache_pool' => ['adapter' => 'cache.system']]]]);
|
$containerConfigurator->extension('framework', ['cache' => ['pools' => [
|
||||||
|
'doctrine.result_cache_pool' => ['adapter' => 'cache.app'],
|
||||||
|
'doctrine.system_cache_pool' => ['adapter' => 'cache.system'],
|
||||||
|
]]]);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -5,28 +5,33 @@ declare(strict_types=1);
|
|||||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||||
|
|
||||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||||
$containerConfigurator->extension('monolog',
|
$containerConfigurator->extension('monolog', [
|
||||||
['handlers' =>
|
'channels' => ['ai'],
|
||||||
['main' =>
|
'handlers' => [
|
||||||
[
|
'ai' => [
|
||||||
'type' => 'fingers_crossed',
|
'type' => 'stream',
|
||||||
'action_level' => 'error',
|
'path' => '%kernel.logs_dir%/ai.log',
|
||||||
'handler' => 'nested',
|
'level' => 'debug',
|
||||||
'excluded_http_codes' => [404, 405],
|
'channels' => ['ai'],
|
||||||
'buffer_size' => 50
|
],
|
||||||
],
|
|
||||||
'nested' =>
|
'main' => [
|
||||||
[
|
'type' => 'fingers_crossed',
|
||||||
'type' => 'stream',
|
'action_level' => 'error',
|
||||||
'path' => '%kernel.logs_dir%/%kernel.environment%.log',
|
'handler' => 'nested',
|
||||||
'level' => 'debug'
|
'excluded_http_codes' => [404, 405],
|
||||||
],
|
'buffer_size' => 50,
|
||||||
'console' =>
|
],
|
||||||
[
|
'nested' => [
|
||||||
'type' => 'console',
|
'type' => 'stream',
|
||||||
'process_psr_3_messages' => false,
|
'path' => '%kernel.logs_dir%/%kernel.environment%.log',
|
||||||
'channels' => ['!event', '!doctrine']
|
'level' => 'debug',
|
||||||
]
|
],
|
||||||
]
|
'console' => [
|
||||||
]);
|
'type' => 'console',
|
||||||
|
'process_psr_3_messages' => false,
|
||||||
|
'channels' => ['!event', '!doctrine'],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -5,11 +5,56 @@ declare(strict_types=1);
|
|||||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||||
|
|
||||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||||
$containerConfigurator->extension('psc_shop_media', ['default_context' => 'default', 'contexts' => ['default' => ['providers' => ['psc.shop.media.provider.image', 'psc.shop.media.provider.file'], 'formats' => ['small' => ['width' => 100, 'quality' => 70], 'big' => ['width' => 500, 'quality' => 70]]]], 'providers' => ['image' => ['thumbnail' => 'psc.shop.media.thumbnail.liip_imagine', 'allowed_extensions' => ['jpg', 'png', 'gif', 'jpeg'], 'allowed_mime_types' => ['image/pjpeg', 'image/jpeg', 'image/png', 'image/x-png', 'image/gif']]], 'cdn' => ['server' => ['path' => '/uploads/media']], 'filesystem' => ['local' => ['directory' => '%kernel.project_dir%/web/uploads/media', 'create' => false]]]);
|
$containerConfigurator->extension('psc_shop_media', [
|
||||||
|
'default_context' => 'default',
|
||||||
|
'contexts' => ['default' => [
|
||||||
|
'providers' => ['psc.shop.media.provider.image', 'psc.shop.media.provider.file'],
|
||||||
|
'formats' => ['small' => ['width' => 100, 'quality' => 70], 'big' => ['width' => 500, 'quality' => 70]],
|
||||||
|
]],
|
||||||
|
'providers' => ['image' => [
|
||||||
|
'thumbnail' => 'psc.shop.media.thumbnail.liip_imagine',
|
||||||
|
'allowed_extensions' => ['jpg', 'png', 'gif', 'jpeg'],
|
||||||
|
'allowed_mime_types' => ['image/pjpeg', 'image/jpeg', 'image/png', 'image/x-png', 'image/gif'],
|
||||||
|
]],
|
||||||
|
'cdn' => ['server' => ['path' => '/uploads/media']],
|
||||||
|
'filesystem' => ['local' => ['directory' => '%kernel.project_dir%/web/uploads/media', 'create' => false]],
|
||||||
|
]);
|
||||||
|
|
||||||
$containerConfigurator->extension('knp_gaufrette', ['stream_wrapper' => null, 'adapters' => ['backend_articles' => ['safe_local' => ['directory' => '%kernel.project_dir%/web/uploads/backend_articles', 'create' => true]], 'steplayouter_motiv_guest' => ['local' => ['directory' => '%kernel.project_dir%/web/uploads/steplayouter_motiv_guest', 'create' => true]], 'steplayouter_motiv' => ['local' => ['directory' => '%kernel.project_dir%/web/market/motive/', 'create' => true]]], 'filesystems' => ['backend_articles' => ['adapter' => 'backend_articles', 'alias' => 'backend_articles_filesystem'], 'steplayouter_motiv_guest' => ['adapter' => 'steplayouter_motiv_guest'], 'steplayouter_motiv' => ['adapter' => 'steplayouter_motiv']]]);
|
$containerConfigurator->extension('knp_gaufrette', [
|
||||||
|
'stream_wrapper' => null,
|
||||||
|
'adapters' => [
|
||||||
|
'backend_articles' => ['safe_local' => [
|
||||||
|
'directory' => '%kernel.project_dir%/web/uploads/backend_articles',
|
||||||
|
'create' => true,
|
||||||
|
]],
|
||||||
|
'steplayouter_motiv_guest' => ['local' => [
|
||||||
|
'directory' => '%kernel.project_dir%/web/uploads/steplayouter_motiv_guest',
|
||||||
|
'create' => true,
|
||||||
|
]],
|
||||||
|
'steplayouter_motiv' => ['local' => [
|
||||||
|
'directory' => '%kernel.project_dir%/web/market/motive/',
|
||||||
|
'create' => true,
|
||||||
|
]],
|
||||||
|
],
|
||||||
|
'filesystems' => [
|
||||||
|
'backend_articles' => ['adapter' => 'backend_articles', 'alias' => 'backend_articles_filesystem'],
|
||||||
|
'steplayouter_motiv_guest' => ['adapter' => 'steplayouter_motiv_guest'],
|
||||||
|
'steplayouter_motiv' => ['adapter' => 'steplayouter_motiv'],
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
$containerConfigurator->extension('knp_paginator', ['page_range' => 5, 'default_options' => ['page_name' => 'page', 'sort_field_name' => 'sort', 'sort_direction_name' => 'direction', 'distinct' => true], 'template' => ['pagination' => '@PSCBackendDashboard/pagination/bootstrap4.html.twig']]);
|
$containerConfigurator->extension('knp_paginator', [
|
||||||
|
'page_range' => 5,
|
||||||
|
'default_options' => [
|
||||||
|
'page_name' => 'page',
|
||||||
|
'sort_field_name' => 'sort',
|
||||||
|
'sort_direction_name' => 'direction',
|
||||||
|
'distinct' => true,
|
||||||
|
],
|
||||||
|
'template' => ['pagination' => '@PSCBackendDashboard/pagination/bootstrap4.html.twig'],
|
||||||
|
]);
|
||||||
|
|
||||||
$containerConfigurator->extension('lexik_form_filter', ['listeners' => ['doctrine_orm' => true, 'doctrine_dbal' => true, 'doctrine_mongodb' => true]]);
|
$containerConfigurator->extension('spiriit_form_filter', ['listeners' => [
|
||||||
|
'doctrine_orm' => true,
|
||||||
|
]]);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -26,10 +26,12 @@ return static function (ContainerConfigurator $containerConfigurator): void {
|
|||||||
'role_hierarchy' => [
|
'role_hierarchy' => [
|
||||||
'ROLE_SHOP' => 'ROLE_USER',
|
'ROLE_SHOP' => 'ROLE_USER',
|
||||||
'ROLE_PRODUCT_EDITOR' => ['ROLE_SHOP'],
|
'ROLE_PRODUCT_EDITOR' => ['ROLE_SHOP'],
|
||||||
|
'ROLE_ORDER_VIEW' => ['ROLE_SHOP'],
|
||||||
'ROLE_SHOP_OPERATOR' => [
|
'ROLE_SHOP_OPERATOR' => [
|
||||||
'ROLE_SHOP',
|
'ROLE_SHOP',
|
||||||
'ROLE_PRODUCTION',
|
'ROLE_PRODUCTION',
|
||||||
'ROLE_PRODUCT_EDITOR',
|
'ROLE_PRODUCT_EDITOR',
|
||||||
|
'ROLE_ORDER_VIEW',
|
||||||
],
|
],
|
||||||
'ROLE_SHOP_ADMIN' => [
|
'ROLE_SHOP_ADMIN' => [
|
||||||
'ROLE_SHOP',
|
'ROLE_SHOP',
|
||||||
@ -39,6 +41,7 @@ return static function (ContainerConfigurator $containerConfigurator): void {
|
|||||||
'ROLE_SHOP',
|
'ROLE_SHOP',
|
||||||
'ROLE_SHOP_OPERATOR',
|
'ROLE_SHOP_OPERATOR',
|
||||||
'ROLE_SHOP_ADMIN',
|
'ROLE_SHOP_ADMIN',
|
||||||
|
'ROLE_ORDER_VIEW',
|
||||||
],
|
],
|
||||||
'ROLE_WAREHOUSE' => [
|
'ROLE_WAREHOUSE' => [
|
||||||
'ROLE_USER',
|
'ROLE_USER',
|
||||||
|
|||||||
@ -1,9 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
|
||||||
|
|
||||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
|
||||||
$containerConfigurator->extension('sensio_framework_extra', ['router' => ['annotations' => false], 'request' => ['converters' => true, 'disable' => ['doctrine.orm', 'datetime']]]);
|
|
||||||
};
|
|
||||||
@ -5,5 +5,21 @@ declare(strict_types=1);
|
|||||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||||
|
|
||||||
return static function (ContainerConfigurator $containerConfigurator): void {
|
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||||
$containerConfigurator->extension('monolog', ['handlers' => ['main' => ['type' => 'stream', 'path' => '%kernel.logs_dir%/%kernel.environment%.log', 'level' => 'debug', 'channels' => ['!event']]]]);
|
$containerConfigurator->extension('monolog', [
|
||||||
|
'channels' => ['ai'],
|
||||||
|
'handlers' => [
|
||||||
|
'ai' => [
|
||||||
|
'type' => 'stream',
|
||||||
|
'path' => '%kernel.logs_dir%/ai.log',
|
||||||
|
'level' => 'debug',
|
||||||
|
'channels' => ['ai'],
|
||||||
|
],
|
||||||
|
'main' => [
|
||||||
|
'type' => 'stream',
|
||||||
|
'path' => '%kernel.logs_dir%/%kernel.environment%.log',
|
||||||
|
'level' => 'debug',
|
||||||
|
'channels' => ['!event'],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -7,6 +7,7 @@ use PSC\Shop\OrderBundle\Service\Order;
|
|||||||
use PSC\System\SettingsBundle\Service\Instance;
|
use PSC\System\SettingsBundle\Service\Instance;
|
||||||
use PSC\System\SettingsBundle\Service\Shop;
|
use PSC\System\SettingsBundle\Service\Shop;
|
||||||
use PSC\System\SettingsBundle\Service\Token;
|
use PSC\System\SettingsBundle\Service\Token;
|
||||||
|
use PSC\System\SettingsBundle\Service\Version;
|
||||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||||
|
|
||||||
use function Symfony\Component\DependencyInjection\Loader\Configurator\service;
|
use function Symfony\Component\DependencyInjection\Loader\Configurator\service;
|
||||||
@ -21,7 +22,8 @@ return static function (ContainerConfigurator $containerConfigurator): void {
|
|||||||
'shopService' => service(Shop::class),
|
'shopService' => service(Shop::class),
|
||||||
'orderService' => service(Order::class),
|
'orderService' => service(Order::class),
|
||||||
'tokenService' => service(Token::class),
|
'tokenService' => service(Token::class),
|
||||||
'mediaService' => service(MediaManager::class)
|
'mediaService' => service(MediaManager::class),
|
||||||
|
'versionService' => service(Version::class)
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|||||||
3171
src/new/config/reference.php
Normal file
3171
src/new/config/reference.php
Normal file
File diff suppressed because it is too large
Load Diff
@ -9,6 +9,8 @@ return static function (RoutingConfigurator $routingConfigurator): void {
|
|||||||
|
|
||||||
$routingConfigurator->import('@PSCComponentApiBundle/Resources/config/routing.yml');
|
$routingConfigurator->import('@PSCComponentApiBundle/Resources/config/routing.yml');
|
||||||
|
|
||||||
|
$routingConfigurator->import('@PSCComponentAiBundle/Resources/config/routing.yml');
|
||||||
|
|
||||||
$routingConfigurator->import('@PSCBackendDashboardBundle/Resources/config/routing.yml');
|
$routingConfigurator->import('@PSCBackendDashboardBundle/Resources/config/routing.yml');
|
||||||
|
|
||||||
$routingConfigurator->import('@PSCBackendDomainBundle/Resources/config/routing.yml');
|
$routingConfigurator->import('@PSCBackendDomainBundle/Resources/config/routing.yml');
|
||||||
@ -47,20 +49,22 @@ return static function (RoutingConfigurator $routingConfigurator): void {
|
|||||||
|
|
||||||
$routingConfigurator->import('@PSCSystemSettingsBundle/Resources/config/routing.yml');
|
$routingConfigurator->import('@PSCSystemSettingsBundle/Resources/config/routing.yml');
|
||||||
|
|
||||||
|
$routingConfigurator->import('@PSCSystemContentEngineBundle/Resources/config/routing.yml');
|
||||||
|
|
||||||
$routingConfigurator->import('@PSCSystemUpdateBundle/Resources/config/routing.yml');
|
$routingConfigurator->import('@PSCSystemUpdateBundle/Resources/config/routing.yml');
|
||||||
|
|
||||||
$routingConfigurator->import('@PSCShopPaymentBundle/Resources/config/routing.yml');
|
$routingConfigurator->import('@PSCShopPaymentBundle/Resources/config/routing.yml');
|
||||||
|
|
||||||
$routingConfigurator->import('@PSCShopCreateBundle/Resources/config/routing.yml');
|
$routingConfigurator->import('@PSCShopCreateBundle/Resources/config/routing.yml');
|
||||||
|
|
||||||
$routingConfigurator->import('@PSCComponentSteplayouterBundle/Controller/', 'annotation')->prefix('/');
|
$routingConfigurator->import('@PSCComponentSteplayouterBundle/Controller/', 'attribute')->prefix('/');
|
||||||
|
|
||||||
$routingConfigurator
|
$routingConfigurator
|
||||||
->import('@PSCComponentSteplayouterBundle/Controller/System', 'annotation')
|
->import('@PSCComponentSteplayouterBundle/Controller/System', 'attribute')
|
||||||
->prefix('/step/system');
|
->prefix('/step/system');
|
||||||
|
|
||||||
$routingConfigurator
|
$routingConfigurator
|
||||||
->import('@PSCComponentConfigurationlayouterBundle/Controller/', 'annotation')
|
->import('@PSCComponentConfigurationlayouterBundle/Controller/', 'attribute')
|
||||||
->prefix('/psc/component');
|
->prefix('/psc/component');
|
||||||
|
|
||||||
$routingConfigurator->import('.', 'plugin');
|
$routingConfigurator->import('.', 'plugin');
|
||||||
|
|||||||
2
src/new/config/routes/annotations.php → src/new/config/routes/attributes.php
Executable file → Normal file
2
src/new/config/routes/annotations.php → src/new/config/routes/attributes.php
Executable file → Normal file
@ -5,5 +5,5 @@ declare(strict_types=1);
|
|||||||
use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;
|
use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;
|
||||||
|
|
||||||
return static function (RoutingConfigurator $routingConfigurator): void {
|
return static function (RoutingConfigurator $routingConfigurator): void {
|
||||||
$routingConfigurator->import('../../src/PSC/Kernel.php', 'annotation');
|
$routingConfigurator->import('../../src/PSC/Kernel.php', 'attribute');
|
||||||
};
|
};
|
||||||
@ -20,11 +20,11 @@ return static function (ContainerConfigurator $containerConfigurator): void {
|
|||||||
|
|
||||||
$services = $containerConfigurator->services();
|
$services = $containerConfigurator->services();
|
||||||
|
|
||||||
$services->defaults()
|
$services->defaults()->autowire()->autoconfigure();
|
||||||
->autowire()
|
|
||||||
->autoconfigure();
|
|
||||||
|
|
||||||
$services->set('liip_imagine.data.loader.stream.steplayouter_motiv_guest', StreamLoader::class)
|
/* $services
|
||||||
->args([service('liip_imagine'), 'gaufrette://steplayouter_motiv_guest/'])
|
* ->set('liip_imagine.data.loader.stream.steplayouter_motiv_guest', StreamLoader::class)
|
||||||
->tag('liip_imagine.data.loader', ['loader' => 'stream.steplayouter_motiv_guest']);
|
* ->args([service('liip_imagine'), 'gaufrette://steplayouter_motiv_guest/'])->tag('liip_imagine.data.loader', [
|
||||||
|
* 'loader' => 'stream.steplayouter_motiv_guest',
|
||||||
|
* ]);*/
|
||||||
};
|
};
|
||||||
|
|||||||
2577
src/new/docs/design-system.md
Normal file
2577
src/new/docs/design-system.md
Normal file
File diff suppressed because it is too large
Load Diff
@ -3,4 +3,9 @@ PSC\Shop\EntityBundle\Entity\Account:
|
|||||||
title: No Account
|
title: No Account
|
||||||
|
|
||||||
account_2:
|
account_2:
|
||||||
title: Bestes von Hier - Bio BGmbH
|
title: Bestes von Hier - Bio BGmbH
|
||||||
|
|
||||||
|
account_3:
|
||||||
|
title: Admin Account
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -12,7 +12,7 @@ PSC\Shop\EntityBundle\Entity\Contact:
|
|||||||
zip: "17506"
|
zip: "17506"
|
||||||
street: "Musterstraße"
|
street: "Musterstraße"
|
||||||
house_number: "24b"
|
house_number: "24b"
|
||||||
account: '@account_1'
|
account: '@account_3'
|
||||||
|
|
||||||
contact_2:
|
contact_2:
|
||||||
username: test@shop.de
|
username: test@shop.de
|
||||||
|
|||||||
@ -9,7 +9,7 @@ PSC\Shop\EntityBundle\Entity\Product:
|
|||||||
pos: <numberBetween(1, 200)>
|
pos: <numberBetween(1, 200)>
|
||||||
notEdit: false
|
notEdit: false
|
||||||
private: false
|
private: false
|
||||||
taxClass: 19
|
mwert: 19
|
||||||
price: 0
|
price: 0
|
||||||
set_config: '{}'
|
set_config: '{}'
|
||||||
shop: '@shop_1'
|
shop: '@shop_1'
|
||||||
@ -23,7 +23,7 @@ PSC\Shop\EntityBundle\Entity\Product:
|
|||||||
notEdit: false
|
notEdit: false
|
||||||
pos: <numberBetween(1, 200)>
|
pos: <numberBetween(1, 200)>
|
||||||
private: false
|
private: false
|
||||||
taxClass: 19
|
mwert: 19
|
||||||
price: 0
|
price: 0
|
||||||
set_config: '{}'
|
set_config: '{}'
|
||||||
shop: '@shop_1'
|
shop: '@shop_1'
|
||||||
@ -37,7 +37,7 @@ PSC\Shop\EntityBundle\Entity\Product:
|
|||||||
notEdit: false
|
notEdit: false
|
||||||
pos: <numberBetween(1, 200)>
|
pos: <numberBetween(1, 200)>
|
||||||
private: false
|
private: false
|
||||||
taxClass: 19
|
mwert: 19
|
||||||
price: 0
|
price: 0
|
||||||
set_config: '\[{"article_id": "7996f00d-a5e6-4915-970d-9f7c4287cd92"}, {"article_id": "7996f00d-a5e6-4915-970d-9f7c4287cd91"} ]'
|
set_config: '\[{"article_id": "7996f00d-a5e6-4915-970d-9f7c4287cd92"}, {"article_id": "7996f00d-a5e6-4915-970d-9f7c4287cd91"} ]'
|
||||||
shop: '@shop_1'
|
shop: '@shop_1'
|
||||||
@ -51,7 +51,7 @@ PSC\Shop\EntityBundle\Entity\Product:
|
|||||||
type: 2
|
type: 2
|
||||||
pos: <numberBetween(1, 200)>
|
pos: <numberBetween(1, 200)>
|
||||||
private: false
|
private: false
|
||||||
taxClass: 19
|
mwert: 19
|
||||||
price: 20
|
price: 20
|
||||||
set_config: '{}'
|
set_config: '{}'
|
||||||
shop: '@shop_1'
|
shop: '@shop_1'
|
||||||
@ -65,7 +65,7 @@ PSC\Shop\EntityBundle\Entity\Product:
|
|||||||
pos: <numberBetween(1, 200)>
|
pos: <numberBetween(1, 200)>
|
||||||
notEdit: false
|
notEdit: false
|
||||||
private: false
|
private: false
|
||||||
taxClass: 19
|
mwert: 19
|
||||||
set_config: '{}'
|
set_config: '{}'
|
||||||
shop: '@shop_1'
|
shop: '@shop_1'
|
||||||
calcXml: >
|
calcXml: >
|
||||||
@ -116,7 +116,7 @@ PSC\Shop\EntityBundle\Entity\Product:
|
|||||||
pos: <numberBetween(1, 200)>
|
pos: <numberBetween(1, 200)>
|
||||||
notEdit: false
|
notEdit: false
|
||||||
private: false
|
private: false
|
||||||
taxClass: 19
|
mwert: 19
|
||||||
set_config: '{}'
|
set_config: '{}'
|
||||||
shop: '@shop_1'
|
shop: '@shop_1'
|
||||||
calcXml: >
|
calcXml: >
|
||||||
|
|||||||
@ -9,7 +9,7 @@ PSC\Shop\EntityBundle\Entity\Voucher:
|
|||||||
code: 5f
|
code: 5f
|
||||||
mode: 1
|
mode: 1
|
||||||
fromDate: <(new DateTime("2023-12-12"))>
|
fromDate: <(new DateTime("2023-12-12"))>
|
||||||
toDate: <(new DateTime("2025-12-12"))>
|
toDate: <(new DateTime("2026-12-12"))>
|
||||||
value: 5
|
value: 5
|
||||||
shop: '@shop_1'
|
shop: '@shop_1'
|
||||||
voucher_2:
|
voucher_2:
|
||||||
@ -22,7 +22,7 @@ PSC\Shop\EntityBundle\Entity\Voucher:
|
|||||||
code: 5p
|
code: 5p
|
||||||
mode: 1
|
mode: 1
|
||||||
fromDate: <(new DateTime("2023-12-12"))>
|
fromDate: <(new DateTime("2023-12-12"))>
|
||||||
toDate: <(new DateTime("2025-12-12"))>
|
toDate: <(new DateTime("2026-12-12"))>
|
||||||
value: 5
|
value: 5
|
||||||
shop: '@shop_1'
|
shop: '@shop_1'
|
||||||
voucher_3:
|
voucher_3:
|
||||||
@ -37,7 +37,7 @@ PSC\Shop\EntityBundle\Entity\Voucher:
|
|||||||
zeroShipping: false
|
zeroShipping: false
|
||||||
mode: 1
|
mode: 1
|
||||||
fromDate: <(new DateTime("2023-12-12"))>
|
fromDate: <(new DateTime("2023-12-12"))>
|
||||||
toDate: <(new DateTime("2025-12-12"))>
|
toDate: <(new DateTime("2026-12-12"))>
|
||||||
value: 0
|
value: 0
|
||||||
shop: '@shop_1'
|
shop: '@shop_1'
|
||||||
voucher_4:
|
voucher_4:
|
||||||
@ -52,7 +52,7 @@ PSC\Shop\EntityBundle\Entity\Voucher:
|
|||||||
zeroShipping: true
|
zeroShipping: true
|
||||||
mode: 1
|
mode: 1
|
||||||
fromDate: <(new DateTime("2023-12-12"))>
|
fromDate: <(new DateTime("2023-12-12"))>
|
||||||
toDate: <(new DateTime("2025-12-12"))>
|
toDate: <(new DateTime("2026-12-12"))>
|
||||||
value: 0
|
value: 0
|
||||||
shop: '@shop_1'
|
shop: '@shop_1'
|
||||||
|
|
||||||
|
|||||||
5
src/new/phpstan.neon
Normal file
5
src/new/phpstan.neon
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
parameters:
|
||||||
|
level: 7
|
||||||
|
paths:
|
||||||
|
- src
|
||||||
|
|
||||||
@ -1780,7 +1780,7 @@ CREATE TABLE `shop` (
|
|||||||
`smtphostname` varchar(255) NOT NULL,
|
`smtphostname` varchar(255) NOT NULL,
|
||||||
`smtpusername` varchar(255) NOT NULL,
|
`smtpusername` varchar(255) NOT NULL,
|
||||||
`smtppassword` varchar(255) NOT NULL,
|
`smtppassword` varchar(255) NOT NULL,
|
||||||
`smtpusethis` int(1) NOT NULL,
|
`smtpusethis` int(1) NULL DEFAULT 0,
|
||||||
`useemailaslogin` int(1) NOT NULL,
|
`useemailaslogin` int(1) NOT NULL,
|
||||||
`noverify` int(1) NOT NULL,
|
`noverify` int(1) NOT NULL,
|
||||||
`keywords` longtext,
|
`keywords` longtext,
|
||||||
|
|||||||
@ -17,14 +17,16 @@ use Doctrine\ORM\EntityManagerInterface;
|
|||||||
use PSC\Shop\ContactBundle\Repository\ContactRepository;
|
use PSC\Shop\ContactBundle\Repository\ContactRepository;
|
||||||
use PSC\Shop\OrderBundle\Service\Order;
|
use PSC\Shop\OrderBundle\Service\Order;
|
||||||
use PSC\Shop\QueueBundle\Service\Queue\Manager;
|
use PSC\Shop\QueueBundle\Service\Queue\Manager;
|
||||||
|
use PSC\System\SettingsBundle\Service\DiskUsage;
|
||||||
use PSC\System\SettingsBundle\Service\Instance;
|
use PSC\System\SettingsBundle\Service\Instance;
|
||||||
use PSC\System\SettingsBundle\Service\Shop;
|
use PSC\System\SettingsBundle\Service\Shop;
|
||||||
|
use PSC\System\SettingsBundle\Service\Version;
|
||||||
use PSC\System\UpdateBundle\Service\Migration;
|
use PSC\System\UpdateBundle\Service\Migration;
|
||||||
|
use Symfony\Bridge\Twig\Attribute\Template;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\Intl\NumberFormatter\NumberFormatter;
|
use Symfony\Component\Intl\NumberFormatter\NumberFormatter;
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
|
use Symfony\Component\Security\Http\Attribute\IsGranted;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
|
||||||
use Symfony\UX\Chartjs\Builder\ChartBuilderInterface;
|
use Symfony\UX\Chartjs\Builder\ChartBuilderInterface;
|
||||||
use Symfony\UX\Chartjs\Model\Chart;
|
use Symfony\UX\Chartjs\Model\Chart;
|
||||||
|
|
||||||
@ -47,24 +49,62 @@ class DashboardController extends AbstractController
|
|||||||
* @return array|View|\Symfony\Component\HttpFoundation\RedirectResponse
|
* @return array|View|\Symfony\Component\HttpFoundation\RedirectResponse
|
||||||
* @throws \Doctrine\ORM\ORMException
|
* @throws \Doctrine\ORM\ORMException
|
||||||
*/
|
*/
|
||||||
#[Security("is_granted('ROLE_SHOP')")]
|
#[IsGranted('ROLE_SHOP')]
|
||||||
#[Route(path: '/dashboard', name: 'psc_backend_dashboard_index')]
|
#[Route(path: '/dashboard', name: 'psc_backend_dashboard_index')]
|
||||||
#[Template]
|
#[Template('@PSCBackendDashboard/dashboard/index.html.twig')]
|
||||||
public function indexAction(Migration $migration, Shop $shop, EntityManagerInterface $entityManager, Manager $queueService, Instance $instanceService, ChartBuilderInterface $chartBuilder, ContactRepository $contactRepository, Order $orderService)
|
public function indexAction(
|
||||||
{
|
Migration $migration,
|
||||||
|
Shop $shop,
|
||||||
|
EntityManagerInterface $entityManager,
|
||||||
|
Manager $queueService,
|
||||||
|
Instance $instanceService,
|
||||||
|
ChartBuilderInterface $chartBuilder,
|
||||||
|
ContactRepository $contactRepository,
|
||||||
|
Order $orderService,
|
||||||
|
DiskUsage $diskUsage,
|
||||||
|
Version $version,
|
||||||
|
) {
|
||||||
|
// Muss vor dem ersten Laden des Shops geprüft werden: ausstehende
|
||||||
|
// Migrationen können Spalten ergänzen, die das Shop-Entity bereits mappt
|
||||||
|
// (z.B. SMTP-Felder). Würde der Shop vorher geladen, schlüge die Query mit
|
||||||
|
// "Unknown column" fehl, bevor zur Migration weitergeleitet werden kann.
|
||||||
|
if ($migration->checkIfMigrationMustRun()) {
|
||||||
|
return $this->redirectToRoute('psc_system_update_migration_do');
|
||||||
|
}
|
||||||
|
|
||||||
/** @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */
|
/** @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */
|
||||||
$selectedShop = $shop->getSelectedShop();
|
$selectedShop = $shop->getSelectedShop();
|
||||||
$year1 = date("Y");
|
$year1 = date('Y');
|
||||||
$year2 = date("Y") - 1;
|
$year2 = date('Y') - 1;
|
||||||
$year3 = date("Y") - 2;
|
$year3 = date('Y') - 2;
|
||||||
$tempSales1 = array_column($entityManager->getRepository('PSC\Shop\EntityBundle\Entity\Order')->getIncomeByShop($selectedShop->getUid(), $year1), 'brutto', 'monat');
|
$tempSales1 = array_column(
|
||||||
$tempSales2 = array_column($entityManager->getRepository('PSC\Shop\EntityBundle\Entity\Order')->getIncomeByShop($selectedShop->getUid(), $year2), 'brutto', 'monat');
|
$entityManager->getRepository('PSC\Shop\EntityBundle\Entity\Order')->getIncomeByShop(
|
||||||
$tempSales3 = array_column($entityManager->getRepository('PSC\Shop\EntityBundle\Entity\Order')->getIncomeByShop($selectedShop->getUid(), $year3), 'brutto', 'monat');
|
$selectedShop->getUid(),
|
||||||
|
$year1,
|
||||||
|
),
|
||||||
|
'brutto',
|
||||||
|
'monat',
|
||||||
|
);
|
||||||
|
$tempSales2 = array_column(
|
||||||
|
$entityManager->getRepository('PSC\Shop\EntityBundle\Entity\Order')->getIncomeByShop(
|
||||||
|
$selectedShop->getUid(),
|
||||||
|
$year2,
|
||||||
|
),
|
||||||
|
'brutto',
|
||||||
|
'monat',
|
||||||
|
);
|
||||||
|
$tempSales3 = array_column(
|
||||||
|
$entityManager->getRepository('PSC\Shop\EntityBundle\Entity\Order')->getIncomeByShop(
|
||||||
|
$selectedShop->getUid(),
|
||||||
|
$year3,
|
||||||
|
),
|
||||||
|
'brutto',
|
||||||
|
'monat',
|
||||||
|
);
|
||||||
$fmt = new \NumberFormatter(locale_get_default(), \NumberFormatter::CURRENCY);
|
$fmt = new \NumberFormatter(locale_get_default(), \NumberFormatter::CURRENCY);
|
||||||
$sales1 = array();
|
$sales1 = [];
|
||||||
$sales2 = array();
|
$sales2 = [];
|
||||||
$sales3 = array();
|
$sales3 = [];
|
||||||
for ($i = 1; $i <= 12; $i++) {
|
for ($i = 1; $i <= 12; $i++) {
|
||||||
if (isset($tempSales1[$i])) {
|
if (isset($tempSales1[$i])) {
|
||||||
$sales1[] = round($tempSales1[$i]);
|
$sales1[] = round($tempSales1[$i]);
|
||||||
@ -84,7 +124,20 @@ class DashboardController extends AbstractController
|
|||||||
}
|
}
|
||||||
$chart = $chartBuilder->createChart(Chart::TYPE_LINE);
|
$chart = $chartBuilder->createChart(Chart::TYPE_LINE);
|
||||||
$chart->setData([
|
$chart->setData([
|
||||||
'labels' => ['Januar', 'Februar', 'März', 'April', 'May', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],
|
'labels' => [
|
||||||
|
'Januar',
|
||||||
|
'Februar',
|
||||||
|
'März',
|
||||||
|
'April',
|
||||||
|
'May',
|
||||||
|
'Juni',
|
||||||
|
'Juli',
|
||||||
|
'August',
|
||||||
|
'September',
|
||||||
|
'Oktober',
|
||||||
|
'November',
|
||||||
|
'Dezember',
|
||||||
|
],
|
||||||
'datasets' => [
|
'datasets' => [
|
||||||
[
|
[
|
||||||
'label' => $year1,
|
'label' => $year1,
|
||||||
@ -113,19 +166,18 @@ class DashboardController extends AbstractController
|
|||||||
'maintainAspectRatio' => false,
|
'maintainAspectRatio' => false,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
return [
|
||||||
if ($migration->checkIfMigrationMustRun()) {
|
|
||||||
return $this->redirectToRoute('psc_system_update_migration_do');
|
|
||||||
}
|
|
||||||
|
|
||||||
return array(
|
|
||||||
'user' => $this->getUser(),
|
'user' => $this->getUser(),
|
||||||
'shop' => $selectedShop,
|
'shop' => $selectedShop,
|
||||||
'lastContacts' => $contactRepository->getLastCreatedContacts($selectedShop, 10),
|
'lastContacts' => $contactRepository->getLastCreatedContacts($selectedShop, 10),
|
||||||
'lastOrders' => $orderService->getLastOrders(),
|
'lastOrders' => $orderService->getLastOrders(),
|
||||||
'queueErrorCount' => $queueService->getErrorJobCount(),
|
'queueErrorCount' => $queueService->getErrorJobCount(),
|
||||||
'instance' => $instanceService->getInstance(),
|
'instance' => $instanceService->getInstance(),
|
||||||
'chart' => $chart
|
'chart' => $chart,
|
||||||
);
|
'diskUsage' => $this->isGranted('ROLE_ADMIN') ? $diskUsage->getUsage() : null,
|
||||||
|
'currentVersion' => $version->getRelease(),
|
||||||
|
'latestVersion' => $this->isGranted('ROLE_ADMIN') ? $version->getLatestRelease() : null,
|
||||||
|
'updateAvailable' => $this->isGranted('ROLE_ADMIN') ? $version->isUpdateAvailable() : false,
|
||||||
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,9 +15,9 @@ namespace PSC\Backend\DashboardBundle\Controller;
|
|||||||
|
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\Security\Core\SecurityContext;
|
use Symfony\Component\Security\Core\SecurityContext;
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
|
use Symfony\Bridge\Twig\Attribute\Template;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
use Symfony\Component\Security\Http\Attribute\IsGranted;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DefaultController fürs ProductionBundle
|
* DefaultController fürs ProductionBundle
|
||||||
@ -34,7 +34,7 @@ class DefaultController extends AbstractController
|
|||||||
* @return View
|
* @return View
|
||||||
*/
|
*/
|
||||||
#[Route(path: '/', name: 'psc_backend_default_index')]
|
#[Route(path: '/', name: 'psc_backend_default_index')]
|
||||||
#[Template]
|
#[Template('@PSCBackendDashboard/default/index.html.twig')]
|
||||||
public function indexAction()
|
public function indexAction()
|
||||||
{
|
{
|
||||||
return $this->redirect($this->generateUrl("psc_backend_dashboard_index"));
|
return $this->redirect($this->generateUrl("psc_backend_dashboard_index"));
|
||||||
|
|||||||
@ -16,16 +16,16 @@ namespace PSC\Backend\DashboardBundle\Controller;
|
|||||||
use Http\Message\Authentication;
|
use Http\Message\Authentication;
|
||||||
use PSC\System\UpdateBundle\Service\Migration;
|
use PSC\System\UpdateBundle\Service\Migration;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
|
use Symfony\Bridge\Twig\Attribute\Template;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
use Symfony\Component\Security\Http\Attribute\IsGranted;
|
||||||
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
|
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
|
||||||
|
|
||||||
class LoginController extends AbstractController
|
class LoginController extends AbstractController
|
||||||
{
|
{
|
||||||
|
|
||||||
#[Route(path: '/login', name: 'psc_backend_login')]
|
#[Route(path: '/login', name: 'psc_backend_login')]
|
||||||
#[Template]
|
#[Template('@PSCBackendDashboard/login/index.html.twig')]
|
||||||
public function indexAction(Migration $migration, AuthenticationUtils $authenticationUtils)
|
public function indexAction(Migration $migration, AuthenticationUtils $authenticationUtils)
|
||||||
{
|
{
|
||||||
if ($migration->checkIfMigrationMustRun()) {
|
if ($migration->checkIfMigrationMustRun()) {
|
||||||
|
|||||||
@ -17,103 +17,97 @@ use Doctrine\ORM\EntityManagerInterface;
|
|||||||
use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface;
|
use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface;
|
||||||
use PSC\Shop\EntityBundle\Entity\Domain;
|
use PSC\Shop\EntityBundle\Entity\Domain;
|
||||||
use PSC\System\SettingsBundle\Service\Shop;
|
use PSC\System\SettingsBundle\Service\Shop;
|
||||||
|
use Symfony\Bridge\Twig\Attribute\Template;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\RedirectResponse;
|
use Symfony\Bundle\SecurityBundle\Security;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
|
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
|
||||||
use Symfony\Component\Routing\Attribute\Route;
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
|
use Symfony\Component\Security\Http\Attribute\IsGranted;
|
||||||
|
|
||||||
/**
|
|
||||||
* ShopController fürs ProductionBundle
|
|
||||||
*
|
|
||||||
* @package PSC\Backend\Production
|
|
||||||
* @subpackage Controller
|
|
||||||
*/
|
|
||||||
class ShopController extends AbstractController
|
class ShopController extends AbstractController
|
||||||
{
|
{
|
||||||
#[Security("is_granted('ROLE_SHOP')")]
|
#[IsGranted('ROLE_SHOP')]
|
||||||
#[Template]
|
#[Template('@PSCBackendDashboard/shop/my_editable_shops.html.twig')]
|
||||||
public function myEditableShopsAction(Request $request, Shop $shop, JWTTokenManagerInterface $jwtManager, EntityManagerInterface $entityManager)
|
public function myEditableShopsAction(
|
||||||
{
|
Request $request,
|
||||||
|
Shop $shop,
|
||||||
|
JWTTokenManagerInterface $jwtManager,
|
||||||
|
EntityManagerInterface $entityManager,
|
||||||
|
) {
|
||||||
/** @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */
|
/** @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */
|
||||||
$selectedShop = $shop->getSelectedShop();
|
$selectedShop = $shop->getSelectedShop();
|
||||||
$shops = $shop->getMyEditableShops();
|
$shops = $shop->getMyEditableShops();
|
||||||
|
|
||||||
$domains = $entityManager
|
$domains = $entityManager->getRepository(Domain::class)->getAllByShopId($selectedShop);
|
||||||
->getRepository(Domain::class)->getAllByShopId($selectedShop);
|
|
||||||
if (count($domains) > 0) {
|
if (count($domains) > 0) {
|
||||||
$domain = array_pop($domains)->getHost();
|
$domain = array_pop($domains)->getHost();
|
||||||
} else {
|
} else {
|
||||||
$domain = false;
|
$domain = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return array('domain' => $domain, 'shops' => $shops, 'jwt' => $jwtManager->create($this->getUser()), 'selectedShop' => $selectedShop, 'displayDeletedShop' => $request->getSession()->get('displayDeletedShop', false));
|
return [
|
||||||
|
'domain' => $domain,
|
||||||
|
'shops' => $shops,
|
||||||
|
'jwt' => $jwtManager->create($this->getUser()),
|
||||||
|
'selectedShop' => $selectedShop,
|
||||||
|
'displayDeletedShop' => $request->getSession()->get('displayDeletedShop', false),
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
#[Security("is_granted('ROLE_SHOP')")]
|
#[IsGranted('ROLE_SHOP')]
|
||||||
#[Template]
|
#[Template('@PSCBackendDashboard/shop/my_editable_shops_tailwind.html.twig')]
|
||||||
public function myEditableShopsTailwindAction(Request $request, Shop $shop, JWTTokenManagerInterface $jwtManager, EntityManagerInterface $entityManager)
|
public function myEditableShopsTailwindAction(
|
||||||
{
|
Request $request,
|
||||||
|
Shop $shop,
|
||||||
|
JWTTokenManagerInterface $jwtManager,
|
||||||
|
EntityManagerInterface $entityManager,
|
||||||
|
) {
|
||||||
/** @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */
|
/** @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */
|
||||||
$selectedShop = $shop->getSelectedShop();
|
$selectedShop = $shop->getSelectedShop();
|
||||||
$shops = $shop->getMyEditableShops();
|
$shops = $shop->getMyEditableShops();
|
||||||
|
|
||||||
$domains = $entityManager
|
$domains = $entityManager->getRepository(Domain::class)->getAllByShopId($selectedShop);
|
||||||
->getRepository(Domain::class)->getAllByShopId($selectedShop);
|
|
||||||
if (count($domains) > 0) {
|
if (count($domains) > 0) {
|
||||||
$domain = array_pop($domains)->getHost();
|
$domain = array_pop($domains)->getHost();
|
||||||
} else {
|
} else {
|
||||||
$domain = false;
|
$domain = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return array('domain' => $domain, 'shops' => $shops, 'jwt' => $jwtManager->create($this->getUser()), 'selectedShop' => $selectedShop, 'displayDeletedShop' => $request->getSession()->get('displayDeletedShop', false));
|
return [
|
||||||
|
'domain' => $domain,
|
||||||
|
'shops' => $shops,
|
||||||
|
'jwt' => $jwtManager->create($this->getUser()),
|
||||||
|
'selectedShop' => $selectedShop,
|
||||||
|
'displayDeletedShop' => $request->getSession()->get('displayDeletedShop', false),
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[IsGranted('ROLE_SHOP')]
|
||||||
/**
|
|
||||||
* Change Shop
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @param Request $request
|
|
||||||
* @param EntityManagerInterface $em
|
|
||||||
* @param \Symfony\Component\Security\Core\Security $security
|
|
||||||
* @param $shop_uuid
|
|
||||||
* @return RedirectResponse
|
|
||||||
*/
|
|
||||||
#[Security("is_granted('ROLE_SHOP')")]
|
|
||||||
#[Route(path: '/shop/change/{shop_uuid}', name: 'psc_backend_dashboard_shop_change')]
|
#[Route(path: '/shop/change/{shop_uuid}', name: 'psc_backend_dashboard_shop_change')]
|
||||||
public function changeShopAction(Request $request, EntityManagerInterface $em, \Symfony\Component\Security\Core\Security $security, $shop_uuid)
|
public function changeShopAction(Request $request, EntityManagerInterface $em, Security $security, $shop_uuid)
|
||||||
{
|
{
|
||||||
$em
|
$em->getRepository('PSC\Shop\EntityBundle\Entity\ShopContact')->changeSelectedShop(
|
||||||
->getRepository('PSC\Shop\EntityBundle\Entity\ShopContact')
|
$security->getUser(),
|
||||||
->changeSelectedShop($security->getUser(), $shop_uuid);
|
$shop_uuid,
|
||||||
|
);
|
||||||
$request->getSession()->set('selectedShop', $shop_uuid);
|
$request->getSession()->set('selectedShop', $shop_uuid);
|
||||||
return $this->redirect($this->generateUrl('psc_backend_dashboard_index'));
|
return $this->redirect($this->generateUrl('psc_backend_dashboard_index'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
#[IsGranted('ROLE_SHOP')]
|
||||||
* Change Shop
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @param Request $request
|
|
||||||
* @param EntityManagerInterface $em
|
|
||||||
* @param \Symfony\Component\Security\Core\Security $security
|
|
||||||
* @param Shop $shopService
|
|
||||||
* @return RedirectResponse
|
|
||||||
* @throws \Doctrine\ORM\ORMException
|
|
||||||
*/
|
|
||||||
#[Security("is_granted('ROLE_SHOP')")]
|
|
||||||
#[Route(path: '/shop/deleted/toogle', name: 'psc_backend_dashboard_toogle_deleted_shop')]
|
#[Route(path: '/shop/deleted/toogle', name: 'psc_backend_dashboard_toogle_deleted_shop')]
|
||||||
public function toogleDisplayDeletedShopAction(Request $request, EntityManagerInterface $em, \Symfony\Component\Security\Core\Security $security, Shop $shopService)
|
public function toogleDisplayDeletedShopAction(
|
||||||
{
|
Request $request,
|
||||||
|
EntityManagerInterface $em,
|
||||||
|
Security $security,
|
||||||
|
Shop $shopService,
|
||||||
|
) {
|
||||||
/** @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */
|
/** @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */
|
||||||
$selectedShop = $shopService->getSelectedShop();
|
$selectedShop = $shopService->getSelectedShop();
|
||||||
if (!!$request->getSession()->get('displayDeletedShop', false) && $selectedShop->isDeleted()) {
|
if (!!$request->getSession()->get('displayDeletedShop', false) && $selectedShop->isDeleted()) {
|
||||||
$shops = $em
|
$shops = $em->getRepository(
|
||||||
->getRepository('PSC\Shop\EntityBundle\Entity\ShopContact')->myEditableShopsWithNoDeleted($security->getUser());
|
'PSC\Shop\EntityBundle\Entity\ShopContact',
|
||||||
|
)->myEditableShopsWithNoDeleted($security->getUser());
|
||||||
$request->getSession()->set('selectedShop', $shops[0]->getUid());
|
$request->getSession()->set('selectedShop', $shops[0]->getUid());
|
||||||
}
|
}
|
||||||
$request->getSession()->set('displayDeletedShop', !$request->getSession()->get('displayDeletedShop', false));
|
$request->getSession()->set('displayDeletedShop', !$request->getSession()->get('displayDeletedShop', false));
|
||||||
|
|||||||
@ -11,17 +11,17 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
|
|||||||
|
|
||||||
class IconButtonExtension extends AbstractTypeExtension
|
class IconButtonExtension extends AbstractTypeExtension
|
||||||
{
|
{
|
||||||
public function buildView(FormView $view, FormInterface $form, array $options)
|
public function buildView(FormView $view, FormInterface $form, array $options): void
|
||||||
{
|
{
|
||||||
$view->vars['icon_before'] = $options['icon_before'] ? $options['icon_before'] : '';
|
$view->vars['icon_before'] = $options['icon_before'] ? $options['icon_before'] : '';
|
||||||
$view->vars['icon_after'] = $options['icon_after'] ? $options['icon_after'] : '';
|
$view->vars['icon_after'] = $options['icon_after'] ? $options['icon_after'] : '';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function configureOptions(OptionsResolver $resolver)
|
public function configureOptions(OptionsResolver $resolver): void
|
||||||
{
|
{
|
||||||
$resolver->setDefaults([
|
$resolver->setDefaults([
|
||||||
'icon_before' => null,
|
'icon_before' => null,
|
||||||
'icon_after' => null
|
'icon_after' => null,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
psc_backend_dashboard:
|
psc_backend_dashboard:
|
||||||
resource: "@PSCBackendDashboardBundle/Controller/"
|
resource: "@PSCBackendDashboardBundle/Controller/"
|
||||||
type: annotation
|
type: attribute
|
||||||
prefix: /backend
|
prefix: /backend
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
{% block body %}
|
{% block body %}
|
||||||
<div class="grid grid-cols-1 lg:grid-cols-2 filament-widgets-container gap-4 lg:gap-8 mb-6">
|
<div class="grid grid-cols-1 lg:grid-cols-2 filament-widgets-container gap-4 lg:gap-8 mb-6">
|
||||||
{% if is_granted('ROLE_ADMIN') %}
|
{% if is_granted('ROLE_ADMIN') %}
|
||||||
|
<div class="space-y-4 lg:space-y-8">
|
||||||
<div class="rounded-sm border border bg-white px-7.5 py-6 shadow-lg dark:border-strokedark dark:bg-boxdark">
|
<div class="rounded-sm border border bg-white px-7.5 py-6 shadow-lg dark:border-strokedark dark:bg-boxdark">
|
||||||
<div class="p-2 space-y-2">
|
<div class="p-2 space-y-2">
|
||||||
<div class="flex items-center justify-between gap-8 px-4 py-2 mb-2">
|
<div class="flex items-center justify-between gap-8 px-4 py-2 mb-2">
|
||||||
@ -24,27 +25,139 @@
|
|||||||
<tr><td class="px-4 py-3">{{ 'psc_backend_dashboard.Layout'|trans }}:</td><td class="px-4 py-3">{{ shop.layout }}</td></tr>
|
<tr><td class="px-4 py-3">{{ 'psc_backend_dashboard.Layout'|trans }}:</td><td class="px-4 py-3">{{ shop.layout }}</td></tr>
|
||||||
<tr><td class="px-4 py-3">{{ 'psc_backend_dashboard.UID'|trans }}:</td><td class="px-4 py-3">{{ shop.uid }}</td></tr>
|
<tr><td class="px-4 py-3">{{ 'psc_backend_dashboard.UID'|trans }}:</td><td class="px-4 py-3">{{ shop.uid }}</td></tr>
|
||||||
<tr><td class="px-4 py-3">{{ 'psc_backend_dashboard.UUID'|trans }}:</td><td class="px-4 py-3">{{ shop.uuid }}</td></tr>
|
<tr><td class="px-4 py-3">{{ 'psc_backend_dashboard.UUID'|trans }}:</td><td class="px-4 py-3">{{ shop.uuid }}</td></tr>
|
||||||
|
<tr>
|
||||||
|
<td class="px-4 py-3">Version:</td>
|
||||||
|
<td class="px-4 py-3">
|
||||||
|
{{ currentVersion }}
|
||||||
|
{% if updateAvailable %}
|
||||||
|
<span class="ml-2 bg-yellow-500 text-yellow-800 text-xs font-medium px-2.5 py-0.5 rounded">Update verfügbar: {{ latestVersion }}</span>
|
||||||
|
{% elseif latestVersion %}
|
||||||
|
<span class="ml-2 bg-green-100 text-green-800 text-xs font-medium px-2.5 py-0.5 rounded">Aktuell</span>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="rounded-sm border border bg-white px-7.5 py-6 shadow-lg dark:border-strokedark dark:bg-boxdark">
|
<div class="rounded-sm border border bg-white px-5 py-4 shadow-lg dark:border-strokedark dark:bg-boxdark">
|
||||||
<div class="p-2 space-y-2">
|
<div class="px-2 pt-1 pb-2">
|
||||||
<div class="flex items-center justify-between gap-8 px-4 py-2 mb-2">
|
<h2 class="text-lg font-medium tracking-tight filament-card-heading mb-2">
|
||||||
<h2 class="text-xl font-medium tracking-tight filament-card-heading">
|
|
||||||
Warnhinweise
|
Warnhinweise
|
||||||
</h2>
|
</h2>
|
||||||
|
<div aria-hidden="true" class="filament-hr border-t dark:border-gray-700"></div>
|
||||||
</div>
|
</div>
|
||||||
<div aria-hidden="true" class="filament-hr border-t dark:border-gray-700"></div>
|
<table class="w-full text-start divide-y table-auto text-sm">
|
||||||
|
<tbody>
|
||||||
|
<tr><td class="px-4 py-2">Aktionen:</td><td class="px-4 py-2"><p>{% if queueErrorCount > 0 %}<span class="bg-red-100 text-red-800 text-xs font-medium mr-2 px-2.5 py-0.5 rounded">{{ queueErrorCount }}</span>{% else %}<span class="bg-green-100 text-green-800 text-xs font-medium mr-2 px-2.5 py-0.5 rounded">Alles Ok</span>{% endif %}</p></td></tr>
|
||||||
|
<tr><td class="px-4 py-2">Mailserver:</td><td class="px-4 py-2"><p>{% if not instance.isSmtpOwn %}<span class="bg-red-100 text-red-800 text-xs font-medium mr-2 px-2.5 py-0.5 rounded">Kein eigener definiert</span>{% else %}{% if instance.smtpHost == '' or instance.smtpPort == '' or instance.smtpUsername == '' or instance.smtpPassword == '' %}<span class="bg-yellow-500 text-yellow-800 text-xs font-medium mr-2 px-2.5 py-0.5 rounded">Smtp Einstellungen überprüfen</span>{% else %}<span class="bg-green-100 text-green-800 text-xs font-medium mr-2 px-2.5 py-0.5 rounded">Alles Ok</span>{% endif %}{% endif %}</p></td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<table class="w-full text-start divide-y table-auto">
|
|
||||||
<tbody>
|
|
||||||
<tr><td class="px-4 py-3">Aktionen:</td><td class="px-4 py-3"><p>{% if queueErrorCount > 0 %}<span class="bg-red-100 text-red-800 text-xs font-medium mr-2 px-2.5 py-0.5 rounded">{{ queueErrorCount }}</span>{% else %}<span class="bg-green-100 text-green-800 text-xs font-medium mr-2 px-2.5 py-0.5 rounded">Alles Ok</span>{% endif %}</p></td></tr>
|
|
||||||
<tr><td class="px-4 py-3">Mailserver:</td><td class="px-4 py-3"><p>{% if not instance.isSmtpOwn %}<span class="bg-red-100 text-red-800 text-xs font-medium mr-2 px-2.5 py-0.5 rounded">Kein eigener definiert</span>{% else %}{% if instance.smtpHost == '' or instance.smtpPort == '' or instance.smtpUsername == '' or instance.smtpPassword == '' %}<span class="bg-yellow-500 text-yellow-800 text-xs font-medium mr-2 px-2.5 py-0.5 rounded">Smtp Einstellungen überprüfen</span>{% else %}<span class="bg-green-100 text-green-800 text-xs font-medium mr-2 px-2.5 py-0.5 rounded">Alles Ok</span>{% endif %}{% endif %}</p></td></tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{% if diskUsage %}
|
||||||
|
<div class="rounded-sm border border bg-white px-5 py-4 shadow-lg dark:border-strokedark dark:bg-boxdark">
|
||||||
|
<div class="px-2 pt-1 pb-2">
|
||||||
|
<h2 class="text-lg font-medium tracking-tight filament-card-heading mb-2">
|
||||||
|
Speicherverbrauch
|
||||||
|
</h2>
|
||||||
|
<div aria-hidden="true" class="filament-hr border-t dark:border-gray-700"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{# Obere Liste wird gegen das Daten-Volume (/dev/sdb) abgeglichen.
|
||||||
|
Fallback, falls der (evtl. ältere) Cache diese Keys nicht enthält. #}
|
||||||
|
{% set dataDisk = diskUsage.dataDisk|default({ 'total': null, 'free': null, 'used': null }) %}
|
||||||
|
{% set items = [{ label: 'Datenbank', size: diskUsage.database }] %}
|
||||||
|
{% for label, size in diskUsage.directories %}
|
||||||
|
{% set items = items|merge([{ label: label, size: size }]) %}
|
||||||
|
{% endfor %}
|
||||||
|
{% set colors = ['bg-psc-500', 'bg-sky-500', 'bg-emerald-500', 'bg-amber-500', 'bg-violet-500', 'bg-rose-500'] %}
|
||||||
|
{# Übrige Belegung = belegter Speicher des Daten-Volumes außerhalb der überwachten Verzeichnisse #}
|
||||||
|
{% if dataDisk.total %}
|
||||||
|
{% set trackedSize = 0 %}
|
||||||
|
{% for item in items %}{% if item.size is not null %}{% set trackedSize = trackedSize + item.size %}{% endif %}{% endfor %}
|
||||||
|
{% set otherUsed = dataDisk.used - trackedSize %}
|
||||||
|
{% if otherUsed < 0 %}{% set otherUsed = 0 %}{% endif %}
|
||||||
|
{% set items = items|merge([{ label: 'Übrige Belegung', size: otherUsed, color: 'bg-gray-400 dark:bg-gray-500' }]) %}
|
||||||
|
{% endif %}
|
||||||
|
{% set totalSize = 0 %}
|
||||||
|
{% for item in items %}
|
||||||
|
{% if item.size is not null %}{% set totalSize = totalSize + item.size %}{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<div class="px-2 py-1 space-y-3">
|
||||||
|
{% for item in items %}
|
||||||
|
{% set percent = (totalSize > 0 and item.size is not null) ? (item.size / totalSize * 100) : 0 %}
|
||||||
|
<div>
|
||||||
|
<div class="flex items-center justify-between mb-1 text-sm">
|
||||||
|
<span class="font-medium text-gray-700 dark:text-gray-200">{{ item.label }}</span>
|
||||||
|
<span class="font-medium text-gray-900 dark:text-white">
|
||||||
|
{% if item.size is not null %}{{ item.size|readable_filesize }}<span class="ml-1 text-xs font-normal text-gray-400">({{ percent < 1 ? percent|round(2) : percent|round(1) }}%)</span>{% else %}<span class="text-gray-400">n/a</span>{% endif %}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="w-full h-2 rounded-full bg-gray-100 dark:bg-gray-700 overflow-hidden">
|
||||||
|
<div class="h-2 rounded-full {{ item.color|default(colors[loop.index0 % colors|length]) }} transition-all duration-500"
|
||||||
|
style="width: {{ percent > 0 and percent < 2 ? 2 : percent|round(1) }}%"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{# Dateisysteme: System (Overlay) und Data (Volume) jeweils mit Icon, Auslastungsbalken und Belegt/Frei/Gesamt #}
|
||||||
|
{% set systemDisk = diskUsage.systemDisk|default({ 'total': null, 'free': null, 'used': null }) %}
|
||||||
|
{% if systemDisk.total %}
|
||||||
|
<div class="pt-3 mt-1 border-t dark:border-gray-700">
|
||||||
|
<div class="flex items-center gap-3">
|
||||||
|
<div class="flex-shrink-0 flex items-center justify-center w-10 h-10 rounded-full bg-psc-50 text-psc-500 dark:bg-gray-700">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-5 h-5">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" d="M8.25 3v1.5M4.5 8.25H3m18 0h-1.5M4.5 12H3m18 0h-1.5m-15 3.75H3m18 0h-1.5M8.25 19.5V21M12 3v1.5m0 15V21m3.75-18v1.5m0 15V21m-9-1.5h10.5a2.25 2.25 0 0 0 2.25-2.25V6.75a2.25 2.25 0 0 0-2.25-2.25H6.75A2.25 2.25 0 0 0 4.5 6.75v10.5a2.25 2.25 0 0 0 2.25 2.25Zm.75-12h9v9h-9v-9Z" />
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div class="flex-1">
|
||||||
|
<div class="flex items-center justify-between mb-1 text-sm">
|
||||||
|
<span class="font-medium text-gray-700 dark:text-gray-200">System <span class="text-xs font-normal text-gray-400">(Overlay)</span></span>
|
||||||
|
<span class="text-xs text-gray-500 dark:text-gray-400">{{ systemDisk.used|readable_filesize }} / {{ systemDisk.total|readable_filesize }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="w-full h-2 rounded-full bg-gray-100 dark:bg-gray-700 overflow-hidden">
|
||||||
|
<div class="h-2 rounded-full bg-psc-500 transition-all duration-500" style="width: {{ (systemDisk.used / systemDisk.total * 100)|round(1) }}%"></div>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center justify-between mt-1 text-xs">
|
||||||
|
<span class="text-gray-500 dark:text-gray-400">Belegt <span class="font-semibold text-gray-900 dark:text-white">{{ systemDisk.used|readable_filesize }}</span> ({{ (systemDisk.used / systemDisk.total * 100)|round(1) }}%)</span>
|
||||||
|
<span class="text-gray-500 dark:text-gray-400">Frei <span class="font-semibold text-emerald-600 dark:text-emerald-400">{{ systemDisk.free|readable_filesize }}</span></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% set dataDisk = diskUsage.dataDisk|default({ 'total': null, 'free': null, 'used': null }) %}
|
||||||
|
{% if dataDisk.total %}
|
||||||
|
<div class="pt-3 mt-1 border-t dark:border-gray-700">
|
||||||
|
<div class="flex items-center gap-3">
|
||||||
|
<div class="flex-shrink-0 flex items-center justify-center w-10 h-10 rounded-full bg-psc-50 text-psc-500 dark:bg-gray-700">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-5 h-5">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" d="M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 0v3.75m-16.5-3.75v3.75m16.5 0v3.75C20.25 16.153 16.556 18 12 18s-8.25-1.847-8.25-4.125v-3.75m16.5 0c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125" />
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div class="flex-1">
|
||||||
|
<div class="flex items-center justify-between mb-1 text-sm">
|
||||||
|
<span class="font-medium text-gray-700 dark:text-gray-200">Data <span class="text-xs font-normal text-gray-400">(Volume)</span></span>
|
||||||
|
<span class="text-xs text-gray-500 dark:text-gray-400">{{ dataDisk.used|readable_filesize }} / {{ dataDisk.total|readable_filesize }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="w-full h-2 rounded-full bg-gray-100 dark:bg-gray-700 overflow-hidden">
|
||||||
|
<div class="h-2 rounded-full bg-psc-500 transition-all duration-500" style="width: {{ (dataDisk.used / dataDisk.total * 100)|round(1) }}%"></div>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center justify-between mt-1 text-xs">
|
||||||
|
<span class="text-gray-500 dark:text-gray-400">Belegt <span class="font-semibold text-gray-900 dark:text-white">{{ dataDisk.used|readable_filesize }}</span> ({{ (dataDisk.used / dataDisk.total * 100)|round(1) }}%)</span>
|
||||||
|
<span class="text-gray-500 dark:text-gray-400">Frei <span class="font-semibold text-emerald-600 dark:text-emerald-400">{{ dataDisk.free|readable_filesize }}</span></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<div class="col-span-full">
|
<div class="col-span-full">
|
||||||
<div class="rounded-sm border border bg-white px-7.5 py-6 shadow-lg dark:border-strokedark dark:bg-boxdark">
|
<div class="rounded-sm border border bg-white px-7.5 py-6 shadow-lg dark:border-strokedark dark:bg-boxdark">
|
||||||
<div class="p-2 space-y-2">
|
<div class="p-2 space-y-2">
|
||||||
@ -136,6 +249,122 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
{% if instance.aiProvider %}
|
||||||
|
<div class="col-span-full"
|
||||||
|
x-data="{
|
||||||
|
message: '',
|
||||||
|
history: [],
|
||||||
|
loading: false,
|
||||||
|
error: '',
|
||||||
|
chatUrl: '{{ path("psc_component_ai_chat") }}',
|
||||||
|
async send() {
|
||||||
|
if (!this.message.trim() || this.loading) return;
|
||||||
|
const userMsg = this.message.trim();
|
||||||
|
this.message = '';
|
||||||
|
this.error = '';
|
||||||
|
this.history.push({ role: 'user', content: userMsg });
|
||||||
|
this.loading = true;
|
||||||
|
this.$nextTick(() => {
|
||||||
|
const el = this.$refs.messages;
|
||||||
|
el.scrollTop = el.scrollHeight;
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
const res = await fetch(this.chatUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify({ message: userMsg, history: this.history.slice(0, -1) })
|
||||||
|
});
|
||||||
|
const data = await res.json();
|
||||||
|
if (data.error) {
|
||||||
|
this.error = data.error;
|
||||||
|
this.history.pop();
|
||||||
|
} else {
|
||||||
|
this.history.push({ role: 'assistant', content: data.reply });
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
this.error = 'Verbindungsfehler: ' + e.message;
|
||||||
|
this.history.pop();
|
||||||
|
} finally {
|
||||||
|
this.loading = false;
|
||||||
|
this.$nextTick(() => {
|
||||||
|
const el = this.$refs.messages;
|
||||||
|
el.scrollTop = el.scrollHeight;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}">
|
||||||
|
<div class="rounded-sm border border bg-white px-7.5 py-6 shadow-lg dark:border-strokedark dark:bg-boxdark">
|
||||||
|
<div class="p-2 space-y-2">
|
||||||
|
<div class="flex items-center justify-between gap-8 px-4 py-2 mb-2">
|
||||||
|
<h2 class="text-xl font-medium tracking-tight filament-card-heading flex items-center gap-2">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-5 h-5 text-psc-500">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" d="M9.813 15.904 9 18.75l-.813-2.846a4.5 4.5 0 0 0-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 0 0 3.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 0 0 3.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 0 0-3.09 3.09Z" />
|
||||||
|
</svg>
|
||||||
|
KI Assistent
|
||||||
|
<span class="text-xs font-normal text-gray-400">({{ instance.aiProvider }}{% if instance.aiModel %} · {{ instance.aiModel }}{% endif %})</span>
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
<div aria-hidden="true" class="filament-hr border-t dark:border-gray-700"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{# Message history #}
|
||||||
|
<div x-ref="messages" class="h-80 overflow-y-auto px-4 py-2 space-y-3">
|
||||||
|
<template x-if="history.length === 0">
|
||||||
|
<p class="text-sm text-gray-400 text-center mt-8">Stellen Sie eine Frage oder geben Sie einen Befehl ein...</p>
|
||||||
|
</template>
|
||||||
|
<template x-for="(msg, idx) in history" :key="idx">
|
||||||
|
<div :class="msg.role === 'user' ? 'flex justify-end' : 'flex justify-start'">
|
||||||
|
<div :class="msg.role === 'user'
|
||||||
|
? 'bg-psc-500 text-white rounded-2xl rounded-tr-sm px-4 py-2 max-w-[75%] text-sm'
|
||||||
|
: 'bg-gray-100 dark:bg-gray-700 text-gray-800 dark:text-gray-200 rounded-2xl rounded-tl-sm px-4 py-2 max-w-[75%] text-sm whitespace-pre-wrap'">
|
||||||
|
<span x-text="msg.content"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template x-if="loading">
|
||||||
|
<div class="flex justify-start">
|
||||||
|
<div class="bg-gray-100 dark:bg-gray-700 rounded-2xl rounded-tl-sm px-4 py-3 text-sm text-gray-500">
|
||||||
|
<span class="inline-flex gap-1">
|
||||||
|
<span class="w-1.5 h-1.5 bg-gray-400 rounded-full animate-bounce" style="animation-delay:0ms"></span>
|
||||||
|
<span class="w-1.5 h-1.5 bg-gray-400 rounded-full animate-bounce" style="animation-delay:150ms"></span>
|
||||||
|
<span class="w-1.5 h-1.5 bg-gray-400 rounded-full animate-bounce" style="animation-delay:300ms"></span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{# Error #}
|
||||||
|
<template x-if="error">
|
||||||
|
<div class="mx-4 mb-2 px-3 py-2 bg-red-50 border border-red-200 rounded-md text-sm text-red-700" x-text="error"></div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
{# Input #}
|
||||||
|
<div class="px-4 pt-2 pb-2">
|
||||||
|
<div class="flex gap-2">
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
x-model="message"
|
||||||
|
@keydown.enter.prevent="send()"
|
||||||
|
:disabled="loading"
|
||||||
|
placeholder="Nachricht eingeben..."
|
||||||
|
class="flex-1 rounded-lg border border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-white px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-psc-500 focus:border-transparent disabled:opacity-50"
|
||||||
|
>
|
||||||
|
<button
|
||||||
|
@click="send()"
|
||||||
|
:disabled="loading || !message.trim()"
|
||||||
|
class="inline-flex items-center gap-1.5 px-4 py-2 bg-psc-500 hover:bg-psc-600 disabled:opacity-50 disabled:cursor-not-allowed text-white text-sm font-medium rounded-lg transition-colors">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-4 h-4">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" d="M6 12 3.269 3.125A59.769 59.769 0 0 1 21.485 12 59.768 59.768 0 0 1 3.27 20.875L5.999 12Zm0 0h7.5" />
|
||||||
|
</svg>
|
||||||
|
Senden
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@ -12,6 +12,7 @@
|
|||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% if is_granted('ROLE_ADMIN') %}
|
||||||
<span class="hidden md:inline"><input type="checkbox" class=" border-gray-300 rounded-sm shadow-sm text-primary-600 outline-none focus:ring focus:ring-primary-200 focus:ring-opacity-50" onchange="window.location='{{ path('psc_backend_dashboard_toogle_deleted_shop') }}'" {% if displayDeletedShop %}checked="checked"{% endif %}/> Deaktive Shops zeigen</span>
|
<span class="hidden md:inline"><input type="checkbox" class=" border-gray-300 rounded-sm shadow-sm text-primary-600 outline-none focus:ring focus:ring-primary-200 focus:ring-opacity-50" onchange="window.location='{{ path('psc_backend_dashboard_toogle_deleted_shop') }}'" {% if displayDeletedShop %}checked="checked"{% endif %}/> Deaktive Shops zeigen</span>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|||||||
@ -30,9 +30,9 @@ use Symfony\Component\Form\FormError;
|
|||||||
use Symfony\Component\HttpFoundation\File\UploadedFile;
|
use Symfony\Component\HttpFoundation\File\UploadedFile;
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
use Symfony\Component\Security\Core\SecurityContext;
|
use Symfony\Component\Security\Core\SecurityContext;
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
|
use Symfony\Bridge\Twig\Attribute\Template;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
use Symfony\Component\Security\Http\Attribute\IsGranted;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
use Symfony\Component\Yaml\Yaml;
|
use Symfony\Component\Yaml\Yaml;
|
||||||
|
|
||||||
@ -65,8 +65,8 @@ class ListController extends \Symfony\Bundle\FrameworkBundle\Controller\Abstract
|
|||||||
* @throws \Doctrine\ORM\ORMException
|
* @throws \Doctrine\ORM\ORMException
|
||||||
*/
|
*/
|
||||||
#[Route(path: '/list/index', name: 'psc_backend_domain_list_index')]
|
#[Route(path: '/list/index', name: 'psc_backend_domain_list_index')]
|
||||||
#[Template]
|
#[Template('@PSCBackendDomain/backend/list/index.html.twig')]
|
||||||
#[Security("is_granted('ROLE_SHOP')")]
|
#[IsGranted('ROLE_SHOP')]
|
||||||
public function indexAction(Request $request, Shop $shopService, DocumentManager $mongoService, EntityManagerInterface $em, DomainSync $sync)
|
public function indexAction(Request $request, Shop $shopService, DocumentManager $mongoService, EntityManagerInterface $em, DomainSync $sync)
|
||||||
{
|
{
|
||||||
/** @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */
|
/** @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */
|
||||||
@ -101,7 +101,7 @@ class ListController extends \Symfony\Bundle\FrameworkBundle\Controller\Abstract
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#[Route(path: '/list/sync', name: 'psc_backend_domain_list_sync')]
|
#[Route(path: '/list/sync', name: 'psc_backend_domain_list_sync')]
|
||||||
#[Security("is_granted('ROLE_SHOP')")]
|
#[IsGranted('ROLE_SHOP')]
|
||||||
public function syncAction(DomainSync $sync)
|
public function syncAction(DomainSync $sync)
|
||||||
{
|
{
|
||||||
$sync->syncDomains();
|
$sync->syncDomains();
|
||||||
@ -120,7 +120,7 @@ class ListController extends \Symfony\Bundle\FrameworkBundle\Controller\Abstract
|
|||||||
* @throws \Doctrine\ORM\ORMException
|
* @throws \Doctrine\ORM\ORMException
|
||||||
*/
|
*/
|
||||||
#[Route(path: '/list/delete/{uid}', name: 'psc_backend_domain_list_delete')]
|
#[Route(path: '/list/delete/{uid}', name: 'psc_backend_domain_list_delete')]
|
||||||
#[Security("is_granted('ROLE_SHOP')")]
|
#[IsGranted('ROLE_SHOP')]
|
||||||
public function deleteAction(Shop $shopService, EntityManagerInterface $entityManager, DocumentManager $mongoManager, $uid)
|
public function deleteAction(Shop $shopService, EntityManagerInterface $entityManager, DocumentManager $mongoManager, $uid)
|
||||||
{
|
{
|
||||||
/** @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */
|
/** @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
psc_backend_domain:
|
psc_backend_domain:
|
||||||
resource: "@PSCBackendDomainBundle/Controller/Backend"
|
resource: "@PSCBackendDomainBundle/Controller/Backend"
|
||||||
type: annotation
|
type: attribute
|
||||||
prefix: /backend/domain
|
prefix: /backend/domain
|
||||||
|
|||||||
@ -4,9 +4,9 @@ namespace PSC\Backend\ToolsBundle\Controller\Backend;
|
|||||||
|
|
||||||
use PSC\Backend\ToolsBundle\Interfaces\ConfigurableElementInterface;
|
use PSC\Backend\ToolsBundle\Interfaces\ConfigurableElementInterface;
|
||||||
use PSC\Backend\ToolsBundle\Service\ExporterRegistry;
|
use PSC\Backend\ToolsBundle\Service\ExporterRegistry;
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
|
use Symfony\Bridge\Twig\Attribute\Template;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
use Symfony\Component\Security\Http\Attribute\IsGranted;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
|
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
@ -25,9 +25,9 @@ class ExporterController extends AbstractController
|
|||||||
* @param ExporterRegistry $registry
|
* @param ExporterRegistry $registry
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
#[Template]
|
#[Template('@PSCBackendTools/backend/exporter/list.html.twig')]
|
||||||
#[Route(path: '/list', name: 'psc_backend_tools_exporter_list_index')]
|
#[Route(path: '/list', name: 'psc_backend_tools_exporter_list_index')]
|
||||||
#[Security("is_granted('ROLE_SHOP')")]
|
#[IsGranted('ROLE_SHOP')]
|
||||||
public function listAction(ExporterRegistry $registry)
|
public function listAction(ExporterRegistry $registry)
|
||||||
{
|
{
|
||||||
return array('exporters' => $registry->all());
|
return array('exporters' => $registry->all());
|
||||||
@ -41,8 +41,8 @@ class ExporterController extends AbstractController
|
|||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
#[Route(path: '/{type}/export', name: 'psc_backend_tools_exporter_form')]
|
#[Route(path: '/{type}/export', name: 'psc_backend_tools_exporter_form')]
|
||||||
#[Security("is_granted('ROLE_SHOP')")]
|
#[IsGranted('ROLE_SHOP')]
|
||||||
#[Template]
|
#[Template('@PSCBackendTools/backend/exporter/form.html.twig')]
|
||||||
public function formAction(Request $request, ExporterRegistry $registry, $type)
|
public function formAction(Request $request, ExporterRegistry $registry, $type)
|
||||||
{
|
{
|
||||||
if (!$registry->has($type)) {
|
if (!$registry->has($type)) {
|
||||||
|
|||||||
@ -5,9 +5,9 @@ namespace PSC\Backend\ToolsBundle\Controller\Backend;
|
|||||||
use PSC\Backend\ToolsBundle\Interfaces\ConfigurableElementInterface;
|
use PSC\Backend\ToolsBundle\Interfaces\ConfigurableElementInterface;
|
||||||
use PSC\Backend\ToolsBundle\Service\ImporterRegistry;
|
use PSC\Backend\ToolsBundle\Service\ImporterRegistry;
|
||||||
use Symfony\Component\DependencyInjection\Attribute\TaggedIterator;
|
use Symfony\Component\DependencyInjection\Attribute\TaggedIterator;
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
|
use Symfony\Bridge\Twig\Attribute\Template;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
use Symfony\Component\Security\Http\Attribute\IsGranted;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
|
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
@ -23,9 +23,9 @@ class ImporterController extends AbstractController
|
|||||||
dump($importer);die();
|
dump($importer);die();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[Template]
|
#[Template('@PSCBackendTools/backend/importer/list.html.twig')]
|
||||||
#[Route(path: '/list', name: 'psc_backend_tools_importer_list_index')]
|
#[Route(path: '/list', name: 'psc_backend_tools_importer_list_index')]
|
||||||
#[Security("is_granted('ROLE_SHOP')")]
|
#[IsGranted('ROLE_SHOP')]
|
||||||
public function listAction(ImporterRegistry $registry)
|
public function listAction(ImporterRegistry $registry)
|
||||||
{
|
{
|
||||||
return array('exporters' => $registry->all());
|
return array('exporters' => $registry->all());
|
||||||
|
|||||||
@ -8,6 +8,7 @@ use LogicException;
|
|||||||
use Port\Csv\CsvWriter;
|
use Port\Csv\CsvWriter;
|
||||||
use Port\Reader\ArrayReader;
|
use Port\Reader\ArrayReader;
|
||||||
use PSC\Backend\ToolsBundle\Export\Writer\ExcelWriter;
|
use PSC\Backend\ToolsBundle\Export\Writer\ExcelWriter;
|
||||||
|
use PSC\Backend\ToolsBundle\Interfaces\ConfigurableElementInterface;
|
||||||
use PSC\Backend\ToolsBundle\Interfaces\ExporterInterface;
|
use PSC\Backend\ToolsBundle\Interfaces\ExporterInterface;
|
||||||
use PSC\Backend\ToolsBundle\Service\ExporterRegistry;
|
use PSC\Backend\ToolsBundle\Service\ExporterRegistry;
|
||||||
use PSC\Shop\EntityBundle\Entity\Contact;
|
use PSC\Shop\EntityBundle\Entity\Contact;
|
||||||
@ -22,15 +23,19 @@ use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
|
|||||||
use Symfony\Component\Validator\Constraints\Date;
|
use Symfony\Component\Validator\Constraints\Date;
|
||||||
use Symfony\Component\Validator\Constraints\DateTime;
|
use Symfony\Component\Validator\Constraints\DateTime;
|
||||||
|
|
||||||
class ContactExporter implements ExporterInterface
|
class ContactExporter implements ExporterInterface, ConfigurableElementInterface
|
||||||
{
|
{
|
||||||
private $_formFactory = null;
|
private $_formFactory = null;
|
||||||
private $_entityManager = null;
|
private $_entityManager = null;
|
||||||
private $_shopService = null;
|
private $_shopService = null;
|
||||||
/** @var Form */
|
/** @var Form */
|
||||||
private $_form = null;
|
private $_form = null;
|
||||||
public function __construct(FormFactoryInterface $formFactory, EntityManagerInterface $entityManager, Shop $shopService)
|
|
||||||
{
|
public function __construct(
|
||||||
|
FormFactoryInterface $formFactory,
|
||||||
|
EntityManagerInterface $entityManager,
|
||||||
|
Shop $shopService,
|
||||||
|
) {
|
||||||
$this->_formFactory = $formFactory;
|
$this->_formFactory = $formFactory;
|
||||||
$this->_entityManager = $entityManager;
|
$this->_entityManager = $entityManager;
|
||||||
$this->_shopService = $shopService;
|
$this->_shopService = $shopService;
|
||||||
@ -51,6 +56,11 @@ class ContactExporter implements ExporterInterface
|
|||||||
|
|
||||||
public function getForm(FormBuilderInterface $builder, $form_options)
|
public function getForm(FormBuilderInterface $builder, $form_options)
|
||||||
{
|
{
|
||||||
|
$builder->add('fotos', CheckboxType::class, ['required' => false, 'label' => 'Fotos mit exportieren?']);
|
||||||
|
$builder->add('fotosFolder', TextType::class, [
|
||||||
|
'required' => false,
|
||||||
|
'label' => 'Pfad für die Fotos z.B.: /data/www/old/data/packages/fotos/{{ media.uuid }}.{{media.extension}}',
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getGroup()
|
public function getGroup()
|
||||||
@ -68,9 +78,12 @@ class ContactExporter implements ExporterInterface
|
|||||||
*/
|
*/
|
||||||
public function export()
|
public function export()
|
||||||
{
|
{
|
||||||
$rows = $this->_entityManager->getRepository('PSC\Shop\EntityBundle\Entity\Contact')->getContactsByShop($this->_shopService->getSelectedShop());
|
$formData = $this->_form->getData();
|
||||||
$temp = array();
|
$rows = $this->_entityManager
|
||||||
$temp[] = array(
|
->getRepository('PSC\Shop\EntityBundle\Entity\Contact')
|
||||||
|
->getContactsByShop($this->_shopService->getSelectedShop());
|
||||||
|
$temp = [];
|
||||||
|
$temp[] = [
|
||||||
'id' => 'id',
|
'id' => 'id',
|
||||||
'uid' => 'uid',
|
'uid' => 'uid',
|
||||||
'account_id' => 'account_id',
|
'account_id' => 'account_id',
|
||||||
@ -108,19 +121,21 @@ class ContactExporter implements ExporterInterface
|
|||||||
'alternativAppendix' => 'alternativAppendix',
|
'alternativAppendix' => 'alternativAppendix',
|
||||||
'alternativ' => 'alternativ',
|
'alternativ' => 'alternativ',
|
||||||
'alternativType' => 'alternativType',
|
'alternativType' => 'alternativType',
|
||||||
'birthday' => 'birthday'
|
'birthday' => 'birthday',
|
||||||
);
|
'image1' => 'image1',
|
||||||
|
'image2' => 'image2',
|
||||||
|
];
|
||||||
foreach ($rows as $row) {
|
foreach ($rows as $row) {
|
||||||
/** @var Contact $contact */
|
/** @var Contact $contact */
|
||||||
$contact = $row->getContact();
|
$contact = $row->getContact();
|
||||||
$temp[] = array(
|
$temp[] = [
|
||||||
'id' => $contact->getId(),
|
'id' => $contact->getId(),
|
||||||
'uid' => $contact->getId(),
|
'uid' => $contact->getId(),
|
||||||
'account_id' => ($contact->getAccount() ? (string)$contact->getAccount()->getId() : 0),
|
'account_id' => $contact->getAccount() ? ((string) $contact->getAccount()->getId()) : 0,
|
||||||
'account_title' => ($contact->getAccount() ? (string)$contact->getAccount()->getTitle() : 0),
|
'account_title' => $contact->getAccount() ? ((string) $contact->getAccount()->getTitle()) : 0,
|
||||||
'enable' => (int)$contact->isEnable(),
|
'enable' => (int) $contact->isEnable(),
|
||||||
'locked' => (int)$contact->isLocked(),
|
'locked' => (int) $contact->isLocked(),
|
||||||
'virtual' => (int)$contact->isVirtual(),
|
'virtual' => (int) $contact->isVirtual(),
|
||||||
'username' => $contact->getUsername(),
|
'username' => $contact->getUsername(),
|
||||||
'firstname' => $contact->getFirstname(),
|
'firstname' => $contact->getFirstname(),
|
||||||
'lastname' => $contact->getLastname(),
|
'lastname' => $contact->getLastname(),
|
||||||
@ -151,15 +166,22 @@ class ContactExporter implements ExporterInterface
|
|||||||
'alternativAppendix' => $contact->getAlternativAppendix(),
|
'alternativAppendix' => $contact->getAlternativAppendix(),
|
||||||
'alternativ' => $contact->getAlternativ(),
|
'alternativ' => $contact->getAlternativ(),
|
||||||
'alternativType' => $contact->getAlternativType(),
|
'alternativType' => $contact->getAlternativType(),
|
||||||
'birthday' => $contact->getBirthday()
|
'birthday' => $contact->getBirthday(),
|
||||||
);
|
'image1' => $contact->getImage1() ?? '',
|
||||||
|
'image2' => $contact->getImage2() ?? '',
|
||||||
|
];
|
||||||
|
if ($formData['fotos'] && $contact->getImage1() != '') {
|
||||||
|
$this->mediaManager->copyMediaToFolder($contact->getImage1(), $formData['fotosFolder']);
|
||||||
|
}
|
||||||
|
if ($formData['fotos'] && $contact->getImage2() != '') {
|
||||||
|
$this->mediaManager->copyMediaToFolder($contact->getImage2(), $formData['fotosFolder']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$reader = new ArrayReader($temp);
|
$reader = new ArrayReader($temp);
|
||||||
$writer = new CsvWriter();
|
$writer = new CsvWriter();
|
||||||
$writer->setStream(fopen('php://output', 'w'));
|
$writer->setStream(fopen('php://output', 'w'));
|
||||||
$response = new StreamedResponse(function () use ($reader, $writer) {
|
$response = new StreamedResponse(function () use ($reader, $writer) {
|
||||||
|
|
||||||
foreach ($reader as $row) {
|
foreach ($reader as $row) {
|
||||||
$writer->writeItem($row);
|
$writer->writeItem($row);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,19 +4,25 @@ namespace PSC\Backend\ToolsBundle\Exporter\Excel;
|
|||||||
|
|
||||||
use Doctrine\ODM\MongoDB\DocumentManager;
|
use Doctrine\ODM\MongoDB\DocumentManager;
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
|
use MongoDB\BSON\ObjectId;
|
||||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||||
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
||||||
|
use PSC\Backend\ToolsBundle\Interfaces\ConfigurableElementInterface;
|
||||||
use PSC\Backend\ToolsBundle\Interfaces\ExporterInterface;
|
use PSC\Backend\ToolsBundle\Interfaces\ExporterInterface;
|
||||||
use PSC\Backend\ToolsBundle\Service\ExporterRegistry;
|
use PSC\Backend\ToolsBundle\Service\ExporterRegistry;
|
||||||
use PSC\Shop\EntityBundle\Document\Contact as PSCContact;
|
use PSC\Shop\EntityBundle\Document\Contact as PSCContact;
|
||||||
use PSC\Shop\EntityBundle\Entity\Contact;
|
use PSC\Shop\EntityBundle\Entity\Contact;
|
||||||
|
use PSC\Shop\MediaBundle\Document\Media;
|
||||||
|
use PSC\Shop\MediaBundle\Service\MediaManager;
|
||||||
use PSC\System\SettingsBundle\Service\Shop;
|
use PSC\System\SettingsBundle\Service\Shop;
|
||||||
|
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
|
||||||
|
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||||
use Symfony\Component\Form\Form;
|
use Symfony\Component\Form\Form;
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
use Symfony\Component\Form\FormFactoryInterface;
|
use Symfony\Component\Form\FormFactoryInterface;
|
||||||
use Symfony\Component\HttpFoundation\BinaryFileResponse;
|
use Symfony\Component\HttpFoundation\BinaryFileResponse;
|
||||||
|
|
||||||
class ContactExporter implements ExporterInterface
|
class ContactExporter implements ExporterInterface, ConfigurableElementInterface
|
||||||
{
|
{
|
||||||
/** @var Form */
|
/** @var Form */
|
||||||
private $_form = null;
|
private $_form = null;
|
||||||
@ -25,6 +31,7 @@ class ContactExporter implements ExporterInterface
|
|||||||
private FormFactoryInterface $formFactory,
|
private FormFactoryInterface $formFactory,
|
||||||
private EntityManagerInterface $entityManager,
|
private EntityManagerInterface $entityManager,
|
||||||
private DocumentManager $mongoManager,
|
private DocumentManager $mongoManager,
|
||||||
|
private MediaManager $mediaManager,
|
||||||
private Shop $shopService,
|
private Shop $shopService,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
@ -43,6 +50,11 @@ class ContactExporter implements ExporterInterface
|
|||||||
|
|
||||||
public function getForm(FormBuilderInterface $builder, $form_options)
|
public function getForm(FormBuilderInterface $builder, $form_options)
|
||||||
{
|
{
|
||||||
|
$builder->add('fotos', CheckboxType::class, ['required' => false, 'label' => 'Fotos mit exportieren?']);
|
||||||
|
$builder->add('fotosFolder', TextType::class, [
|
||||||
|
'required' => false,
|
||||||
|
'label' => 'Pfad für die Fotos z.B.: /data/www/old/data/packages/fotos/{{ media.uuid }}.{{media.extension}}',
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getGroup()
|
public function getGroup()
|
||||||
@ -60,6 +72,7 @@ class ContactExporter implements ExporterInterface
|
|||||||
*/
|
*/
|
||||||
public function export()
|
public function export()
|
||||||
{
|
{
|
||||||
|
$formData = $this->_form->getData();
|
||||||
$rows = $this->entityManager
|
$rows = $this->entityManager
|
||||||
->getRepository('PSC\Shop\EntityBundle\Entity\Contact')
|
->getRepository('PSC\Shop\EntityBundle\Entity\Contact')
|
||||||
->getContactsByShop($this->shopService->getSelectedShop());
|
->getContactsByShop($this->shopService->getSelectedShop());
|
||||||
@ -128,6 +141,8 @@ class ContactExporter implements ExporterInterface
|
|||||||
'custom22' => $shop->getCustomerFieldName22(),
|
'custom22' => $shop->getCustomerFieldName22(),
|
||||||
'custom23' => $shop->getCustomerFieldName23(),
|
'custom23' => $shop->getCustomerFieldName23(),
|
||||||
'custom24' => $shop->getCustomerFieldName24(),
|
'custom24' => $shop->getCustomerFieldName24(),
|
||||||
|
'image1' => 'image1',
|
||||||
|
'image2' => 'image2',
|
||||||
];
|
];
|
||||||
foreach ($rows as $row) {
|
foreach ($rows as $row) {
|
||||||
/** @var Contact $contact */
|
/** @var Contact $contact */
|
||||||
@ -200,9 +215,17 @@ class ContactExporter implements ExporterInterface
|
|||||||
'custom22' => $contactDoc ? $contactDoc->getCustom22() : '',
|
'custom22' => $contactDoc ? $contactDoc->getCustom22() : '',
|
||||||
'custom23' => $contactDoc ? $contactDoc->getCustom23() : '',
|
'custom23' => $contactDoc ? $contactDoc->getCustom23() : '',
|
||||||
'custom24' => $contactDoc ? $contactDoc->getCustom24() : '',
|
'custom24' => $contactDoc ? $contactDoc->getCustom24() : '',
|
||||||
|
'image1' => $contact->getImage1() ?? '',
|
||||||
|
'image2' => $contact->getImage2() ?? '',
|
||||||
];
|
];
|
||||||
}
|
|
||||||
|
|
||||||
|
if ($formData['fotos'] && $contact->getImage1() != '') {
|
||||||
|
$this->mediaManager->copyMediaToFolder($contact->getImage1(), $formData['fotosFolder']);
|
||||||
|
}
|
||||||
|
if ($formData['fotos'] && $contact->getImage2() != '') {
|
||||||
|
$this->mediaManager->copyMediaToFolder($contact->getImage2(), $formData['fotosFolder']);
|
||||||
|
}
|
||||||
|
}
|
||||||
$spreadsheet = new Spreadsheet();
|
$spreadsheet = new Spreadsheet();
|
||||||
|
|
||||||
$spreadsheet->getActiveSheet()->fromArray(
|
$spreadsheet->getActiveSheet()->fromArray(
|
||||||
|
|||||||
@ -2,15 +2,15 @@
|
|||||||
|
|
||||||
namespace PSC\Backend\ToolsBundle\Exporter\Excel;
|
namespace PSC\Backend\ToolsBundle\Exporter\Excel;
|
||||||
|
|
||||||
require_once(__DIR__ . '/../../../../Shop/EntityBundle/Lagacy/TP_Basket_Item.php');
|
require_once __DIR__ . '/../../../../Shop/EntityBundle/Lagacy/TP_Basket_Item.php';
|
||||||
use Doctrine\ODM\MongoDB\DocumentManager;
|
use Doctrine\ODM\MongoDB\DocumentManager;
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use Doctrine\ORM\EntityRepository;
|
use Doctrine\ORM\EntityRepository;
|
||||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||||
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
||||||
|
use PSC\Backend\ToolsBundle\Interfaces\ConfigurableElementInterface;
|
||||||
use PSC\Backend\ToolsBundle\Interfaces\ExporterInterface;
|
use PSC\Backend\ToolsBundle\Interfaces\ExporterInterface;
|
||||||
use PSC\Backend\ToolsBundle\Service\ExporterRegistry;
|
use PSC\Backend\ToolsBundle\Service\ExporterRegistry;
|
||||||
use PSC\Backend\ToolsBundle\Interfaces\ConfigurableElementInterface;
|
|
||||||
use PSC\Library\Calc\Engine;
|
use PSC\Library\Calc\Engine;
|
||||||
use PSC\Library\Calc\PaperContainer;
|
use PSC\Library\Calc\PaperContainer;
|
||||||
use PSC\Shop\EntityBundle\Document\Position;
|
use PSC\Shop\EntityBundle\Document\Position;
|
||||||
@ -25,24 +25,31 @@ use Symfony\Component\Form\Form;
|
|||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
use Symfony\Component\Form\FormFactoryInterface;
|
use Symfony\Component\Form\FormFactoryInterface;
|
||||||
use Symfony\Component\HttpFoundation\BinaryFileResponse;
|
use Symfony\Component\HttpFoundation\BinaryFileResponse;
|
||||||
|
|
||||||
class PositionExporter implements ExporterInterface, ConfigurableElementInterface
|
class PositionExporter implements ExporterInterface, ConfigurableElementInterface
|
||||||
{
|
{
|
||||||
private $_formFactory = null;
|
private $_formFactory = null;
|
||||||
private $_entityManager = null;
|
private $_entityManager = null;
|
||||||
private $_securityContext = null;
|
private $_securityContext = null;
|
||||||
private $_shopService = null;
|
private $_shopService = null;
|
||||||
/** @var Form */
|
/** @var Form */
|
||||||
private $_form = null;
|
private $_form = null;
|
||||||
/**
|
/**
|
||||||
* @var PaperDB
|
* @var PaperDB
|
||||||
*/
|
*/
|
||||||
private PaperDB $_paperDbService;
|
private PaperDB $_paperDbService;
|
||||||
/**
|
/**
|
||||||
* @var DocumentManager
|
* @var DocumentManager
|
||||||
*/
|
*/
|
||||||
private DocumentManager $_mongoDb;
|
private DocumentManager $_mongoDb;
|
||||||
function __construct(FormFactoryInterface $formFactory, EntityManagerInterface $entityManager, Shop $shopService, PaperDB $paperDbService, DocumentManager $mongodb)
|
|
||||||
{
|
function __construct(
|
||||||
|
FormFactoryInterface $formFactory,
|
||||||
|
EntityManagerInterface $entityManager,
|
||||||
|
Shop $shopService,
|
||||||
|
PaperDB $paperDbService,
|
||||||
|
DocumentManager $mongodb,
|
||||||
|
) {
|
||||||
$this->_formFactory = $formFactory;
|
$this->_formFactory = $formFactory;
|
||||||
$this->_entityManager = $entityManager;
|
$this->_entityManager = $entityManager;
|
||||||
$this->_shopService = $shopService;
|
$this->_shopService = $shopService;
|
||||||
@ -68,8 +75,8 @@ class PositionExporter implements ExporterInterface, ConfigurableElementInterfac
|
|||||||
$builder->add('product', EntityType::class, array(
|
$builder->add('product', EntityType::class, array(
|
||||||
'class' => Product::class,
|
'class' => Product::class,
|
||||||
'query_builder' => function (EntityRepository $er) {
|
'query_builder' => function (EntityRepository $er) {
|
||||||
|
return $er
|
||||||
return $er->createQueryBuilder('g')
|
->createQueryBuilder('g')
|
||||||
->andWhere('g.shop = :shop and g.originalProduct = 0')
|
->andWhere('g.shop = :shop and g.originalProduct = 0')
|
||||||
->setParameter('shop', $this->_shopService->getSelectedShop()->getUid())
|
->setParameter('shop', $this->_shopService->getSelectedShop()->getUid())
|
||||||
->orderBy('g.title', 'ASC');
|
->orderBy('g.title', 'ASC');
|
||||||
@ -77,11 +84,15 @@ class PositionExporter implements ExporterInterface, ConfigurableElementInterfac
|
|||||||
'choice_label' => 'title',
|
'choice_label' => 'title',
|
||||||
'required' => false,
|
'required' => false,
|
||||||
'placeholder' => 'Alle',
|
'placeholder' => 'Alle',
|
||||||
'label' => 'Vorgänger'
|
'label' => 'Vorgänger',
|
||||||
|
));
|
||||||
|
$builder->add('from', DateType::class, array('label' => 'Von', 'attr' => array('class' => 'form-element')));
|
||||||
|
$builder->add('to', DateType::class, array('label' => 'Bis', 'attr' => array('class' => 'form-element')));
|
||||||
|
$builder->add('calc_options', TextType::class, array(
|
||||||
|
'label' => 'Kalkulationsoptionen (auflage,papier)',
|
||||||
|
'required' => false,
|
||||||
|
'attr' => array('class' => 'form-element'),
|
||||||
));
|
));
|
||||||
$builder->add("from", DateType::class, array('label' => 'Von', 'attr' => array('class' => 'form-element')));
|
|
||||||
$builder->add("to", DateType::class, array('label' => 'Bis', 'attr' => array('class' => 'form-element')));
|
|
||||||
$builder->add("calc_options", TextType::class, array('label' => 'Kalkulationsoptionen (auflage,papier)', 'required' => false, 'attr' => array('class' => 'form-element')));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getGroup()
|
public function getGroup()
|
||||||
@ -102,15 +113,17 @@ class PositionExporter implements ExporterInterface, ConfigurableElementInterfac
|
|||||||
$formData = $this->_form->getData();
|
$formData = $this->_form->getData();
|
||||||
$orderRepository = $this->_entityManager->getRepository('PSC\Shop\EntityBundle\Entity\Orderpos');
|
$orderRepository = $this->_entityManager->getRepository('PSC\Shop\EntityBundle\Entity\Orderpos');
|
||||||
if ($formData['product'] === null) {
|
if ($formData['product'] === null) {
|
||||||
$qb = $orderRepository->createQueryBuilder('o')
|
$qb = $orderRepository
|
||||||
->where("o.createdDate >= :from and o.createdDate <= :to and o.shop = :shop")
|
->createQueryBuilder('o')
|
||||||
|
->where('o.createdDate >= :from and o.createdDate <= :to and o.shop = :shop')
|
||||||
->setParameter('from', $formData['from'])
|
->setParameter('from', $formData['from'])
|
||||||
->setParameter('to', $formData['to'])
|
->setParameter('to', $formData['to'])
|
||||||
->setParameter('shop', $this->_shopService->getSelectedShop()->getId())
|
->setParameter('shop', $this->_shopService->getSelectedShop()->getId())
|
||||||
->getQuery();
|
->getQuery();
|
||||||
} else {
|
} else {
|
||||||
$qb = $orderRepository->createQueryBuilder('o')
|
$qb = $orderRepository
|
||||||
->where("o.createdDate >= :from and o.createdDate <= :to and o.shop = :shop AND o.product = :product")
|
->createQueryBuilder('o')
|
||||||
|
->where('o.createdDate >= :from and o.createdDate <= :to and o.shop = :shop AND o.product = :product')
|
||||||
->setParameter('from', $formData['from'])
|
->setParameter('from', $formData['from'])
|
||||||
->setParameter('to', $formData['to'])
|
->setParameter('to', $formData['to'])
|
||||||
->setParameter('shop', $this->_shopService->getSelectedShop()->getId())
|
->setParameter('shop', $this->_shopService->getSelectedShop()->getId())
|
||||||
@ -119,7 +132,7 @@ class PositionExporter implements ExporterInterface, ConfigurableElementInterfac
|
|||||||
}
|
}
|
||||||
|
|
||||||
$rows = $qb->getResult();
|
$rows = $qb->getResult();
|
||||||
$calcOptions = explode(",", $formData['calc_options']);
|
$calcOptions = explode(',', $formData['calc_options']);
|
||||||
$data[] = array();
|
$data[] = array();
|
||||||
$temp = array(
|
$temp = array(
|
||||||
'order' => 'order',
|
'order' => 'order',
|
||||||
@ -144,7 +157,7 @@ class PositionExporter implements ExporterInterface, ConfigurableElementInterfac
|
|||||||
'productId' => 'articleId',
|
'productId' => 'articleId',
|
||||||
'productTitle' => 'articleName',
|
'productTitle' => 'articleName',
|
||||||
'weight' => 'weight',
|
'weight' => 'weight',
|
||||||
'articleName' => 'articleName'
|
'articleName' => 'articleName',
|
||||||
);
|
);
|
||||||
foreach ($calcOptions as $key) {
|
foreach ($calcOptions as $key) {
|
||||||
$temp[$key] = $key;
|
$temp[$key] = $key;
|
||||||
@ -152,26 +165,32 @@ class PositionExporter implements ExporterInterface, ConfigurableElementInterfac
|
|||||||
|
|
||||||
$data[] = $temp;
|
$data[] = $temp;
|
||||||
$paperContainer = new PaperContainer();
|
$paperContainer = new PaperContainer();
|
||||||
$paperContainer->parse(simplexml_load_string($this->_shopService->getSelectedShop()->getInstall()->getPaperContainer()));
|
$paperContainer->parse(simplexml_load_string(
|
||||||
|
$this->_shopService
|
||||||
|
->getSelectedShop()
|
||||||
|
->getInstall()
|
||||||
|
->getPaperContainer(),
|
||||||
|
));
|
||||||
$engine = new Engine();
|
$engine = new Engine();
|
||||||
$engine->setPaperRepository($this->_paperDbService);
|
$engine->setPaperRepository($this->_paperDbService);
|
||||||
$engine->setPaperContainer($paperContainer);
|
$engine->setPaperContainer($paperContainer);
|
||||||
if ($this->_shopService->getSelectedShop()->getInstall()->getCalcTemplates()) {
|
if ($this->_shopService->getSelectedShop()->getInstall()->getCalcTemplates()) {
|
||||||
$engine->setTemplates('<root>' . $this->_shopService->getSelectedShop()->getInstall()->getCalcTemplates() . '</root>');
|
$engine->setTemplates('<root>' . $this->_shopService
|
||||||
|
->getSelectedShop()
|
||||||
|
->getInstall()
|
||||||
|
->getCalcTemplates() . '</root>');
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @var Orderpos $row */
|
/** @var Orderpos $row */
|
||||||
foreach ($rows as $row) {
|
foreach ($rows as $row) {
|
||||||
/** @var Position $objDoc */
|
/** @var Position $objDoc */
|
||||||
$objDoc = $this->_mongoDb
|
$objDoc = $this->_mongoDb->getRepository(Position::class)->findOneBy(['uid' => (string) $row->getId()]);
|
||||||
->getRepository(Position::class)
|
|
||||||
->findOneBy(['uid' => (string)$row->getId()]);
|
|
||||||
$temp = array(
|
$temp = array(
|
||||||
'order' => (string)$row->getOrder()->getAlias(),
|
'order' => (string) $row->getOrder()->getAlias(),
|
||||||
'pos' => (string)$row->getPos(),
|
'pos' => (string) $row->getPos(),
|
||||||
'created' => (string)$row->getOrder()->getCreated()->format('d.m.Y H:i:s'),
|
'created' => (string) $row->getOrder()->getCreated()->format('d.m.Y H:i:s'),
|
||||||
'brutto' => (string)$row->getOrder()->getBrutto(),
|
'brutto' => (string) $row->getOrder()->getBrutto(),
|
||||||
'contact' => (string)$row->getOrder()->getContact()->getEmail(),
|
'contact' => (string) $row->getOrder()->getContact()->getEmail(),
|
||||||
'invoice_company' => $row->getOrder()->getInvoiceAddress()->getCompany(),
|
'invoice_company' => $row->getOrder()->getInvoiceAddress()->getCompany(),
|
||||||
'invoice_firstname' => $row->getOrder()->getInvoiceAddress()->getFirstname(),
|
'invoice_firstname' => $row->getOrder()->getInvoiceAddress()->getFirstname(),
|
||||||
'invoice_lastname' => $row->getOrder()->getInvoiceAddress()->getLastname(),
|
'invoice_lastname' => $row->getOrder()->getInvoiceAddress()->getLastname(),
|
||||||
@ -186,11 +205,11 @@ class PositionExporter implements ExporterInterface, ConfigurableElementInterfac
|
|||||||
'delivery_house_number' => $row->getOrder()->getDeliveryAddress()->getHouseNumber(),
|
'delivery_house_number' => $row->getOrder()->getDeliveryAddress()->getHouseNumber(),
|
||||||
'delivery_zip' => $row->getOrder()->getDeliveryAddress()->getZip(),
|
'delivery_zip' => $row->getOrder()->getDeliveryAddress()->getZip(),
|
||||||
'delivery_city' => $row->getOrder()->getDeliveryAddress()->getCity(),
|
'delivery_city' => $row->getOrder()->getDeliveryAddress()->getCity(),
|
||||||
'productId' => (string)$row->getProduct()->getId(),
|
'productId' => (string) $row->getProduct()->getId(),
|
||||||
'productTitle' => (string)$row->getProduct()->getTitle(),
|
'productTitle' => (string) $row->getProduct()->getTitle(),
|
||||||
'weight' => (string)$row->getWeight(),
|
'weight' => (string) $row->getWeight(),
|
||||||
);
|
);
|
||||||
$objPosition = unserialize(($row->getData()));
|
$objPosition = unserialize($row->getData());
|
||||||
if ($row->hasCalcXml()) {
|
if ($row->hasCalcXml()) {
|
||||||
$engine->loadString($row->getCalcXml());
|
$engine->loadString($row->getCalcXml());
|
||||||
$engine->setVariables($objPosition->getOptions());
|
$engine->setVariables($objPosition->getOptions());
|
||||||
@ -207,16 +226,16 @@ class PositionExporter implements ExporterInterface, ConfigurableElementInterfac
|
|||||||
$articleCalc = new \PSC\Library\Calc\Article($objPosition->getOptions()['kalk_artikel']);
|
$articleCalc = new \PSC\Library\Calc\Article($objPosition->getOptions()['kalk_artikel']);
|
||||||
$temp['articleName'] = $objPosition->getOptions()['kalk_artikel'];
|
$temp['articleName'] = $objPosition->getOptions()['kalk_artikel'];
|
||||||
} else {
|
} else {
|
||||||
$articleCalc = new \PSC\Library\Calc\Article("test");
|
$articleCalc = new \PSC\Library\Calc\Article('test');
|
||||||
$temp['articleName'] = '';
|
$temp['articleName'] = '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($calcOptions as $key) {
|
foreach ($calcOptions as $key) {
|
||||||
if ($articleCalc->getOptionById($key)) {
|
if ($articleCalc->getOptionById($key)) {
|
||||||
$temp[$key] = (string)$articleCalc->getOptionById($key)->getValue();
|
$temp[$key] = (string) $articleCalc->getOptionById($key)->getValue();
|
||||||
} else {
|
} else {
|
||||||
$temp[$key] = "";
|
$temp[$key] = '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -225,13 +244,12 @@ class PositionExporter implements ExporterInterface, ConfigurableElementInterfac
|
|||||||
|
|
||||||
$spreadsheet = new Spreadsheet();
|
$spreadsheet = new Spreadsheet();
|
||||||
|
|
||||||
$spreadsheet->getActiveSheet()
|
$spreadsheet->getActiveSheet()->fromArray(
|
||||||
->fromArray(
|
$data, // The data to set
|
||||||
$data, // The data to set
|
null, // Array values with this value will not be set
|
||||||
NULL, // Array values with this value will not be set
|
'A1', // Top left coordinate of the worksheet range where
|
||||||
'A1' // Top left coordinate of the worksheet range where
|
// we want to set these values (default is A1)
|
||||||
// we want to set these values (default is A1)
|
);
|
||||||
);
|
|
||||||
|
|
||||||
$writer = new Xlsx($spreadsheet);
|
$writer = new Xlsx($spreadsheet);
|
||||||
$writer->save('/tmp/test.xlsx');
|
$writer->save('/tmp/test.xlsx');
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
psc_backend_tools:
|
psc_backend_tools:
|
||||||
resource: "@PSCBackendToolsBundle/Controller/Backend"
|
resource: "@PSCBackendToolsBundle/Controller/Backend"
|
||||||
type: annotation
|
type: attribute
|
||||||
prefix: /backend/tools
|
prefix: /backend/tools
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PSC\Component\AiBundle\Controller;
|
||||||
|
|
||||||
|
use PSC\Component\AiBundle\Service\AiAgentService;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
|
use Symfony\Component\Security\Http\Attribute\IsGranted;
|
||||||
|
|
||||||
|
class AiChatController extends AbstractController
|
||||||
|
{
|
||||||
|
#[IsGranted('ROLE_SHOP')]
|
||||||
|
#[Route(path: '/ai/chat', name: 'psc_component_ai_chat', methods: ['POST'])]
|
||||||
|
public function chat(Request $request, AiAgentService $agentService): JsonResponse
|
||||||
|
{
|
||||||
|
$data = json_decode($request->getContent(), true);
|
||||||
|
$message = trim($data['message'] ?? '');
|
||||||
|
$history = $data['history'] ?? [];
|
||||||
|
|
||||||
|
if (empty($message)) {
|
||||||
|
return new JsonResponse(['error' => 'Nachricht ist leer'], Response::HTTP_BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$reply = $agentService->chat($message, $history);
|
||||||
|
return new JsonResponse(['reply' => $reply]);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
return new JsonResponse(['error' => $e->getMessage()], Response::HTTP_INTERNAL_SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PSC\Component\AiBundle\DependencyInjection;
|
||||||
|
|
||||||
|
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
|
||||||
|
use Symfony\Component\Config\Definition\ConfigurationInterface;
|
||||||
|
|
||||||
|
class Configuration implements ConfigurationInterface
|
||||||
|
{
|
||||||
|
public function getConfigTreeBuilder(): TreeBuilder
|
||||||
|
{
|
||||||
|
$treeBuilder = new TreeBuilder('psc_component_ai');
|
||||||
|
return $treeBuilder;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PSC\Component\AiBundle\DependencyInjection;
|
||||||
|
|
||||||
|
use Symfony\Component\Config\FileLocator;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
use Symfony\Component\DependencyInjection\Loader;
|
||||||
|
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
|
||||||
|
|
||||||
|
class PSCComponentAiExtension extends Extension
|
||||||
|
{
|
||||||
|
public function load(array $configs, ContainerBuilder $container)
|
||||||
|
{
|
||||||
|
$configuration = new Configuration();
|
||||||
|
$this->processConfiguration($configuration, $configs);
|
||||||
|
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
|
||||||
|
$loader->load('services.yml');
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PSC\Component\AiBundle;
|
||||||
|
|
||||||
|
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
||||||
|
|
||||||
|
class PSCComponentAiBundle extends Bundle {}
|
||||||
@ -0,0 +1,95 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PSC\Component\AiBundle\Platform\Completions;
|
||||||
|
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
use Psr\Log\NullLogger;
|
||||||
|
use Symfony\AI\Platform\Capability;
|
||||||
|
use Symfony\AI\Platform\Model;
|
||||||
|
use Symfony\AI\Platform\ModelClientInterface;
|
||||||
|
use Symfony\AI\Platform\Result\RawHttpResult;
|
||||||
|
use Symfony\AI\Platform\Result\RawResultInterface;
|
||||||
|
use Symfony\Component\HttpClient\EventSourceHttpClient;
|
||||||
|
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OpenAI-compatible chat completions client.
|
||||||
|
* Works with Ollama, OpenAI, Mistral, Azure OpenAI and any other OpenAI-compatible API.
|
||||||
|
*/
|
||||||
|
final class ModelClient implements ModelClientInterface
|
||||||
|
{
|
||||||
|
private readonly HttpClientInterface $httpClient;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
HttpClientInterface $httpClient,
|
||||||
|
private readonly string $baseUrl,
|
||||||
|
private readonly ?string $apiKey = null,
|
||||||
|
private readonly string $path = '/v1/chat/completions',
|
||||||
|
private readonly LoggerInterface $logger = new NullLogger(),
|
||||||
|
) {
|
||||||
|
$this->httpClient = $httpClient instanceof EventSourceHttpClient
|
||||||
|
? $httpClient
|
||||||
|
: new EventSourceHttpClient($httpClient);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function supports(Model $model): bool
|
||||||
|
{
|
||||||
|
return $model->supports(Capability::INPUT_MESSAGES)
|
||||||
|
|| $model->supports(Capability::TOOL_CALLING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array<string|int, mixed> $payload
|
||||||
|
* @param array<string, mixed> $options
|
||||||
|
*/
|
||||||
|
public function request(Model $model, array|string $payload, array $options = []): RawResultInterface
|
||||||
|
{
|
||||||
|
$headers = [
|
||||||
|
'Content-Type' => 'application/json',
|
||||||
|
// Lowercase 'accept' ist wichtig: EventSourceHttpClient prüft exakt $options['headers']['accept']
|
||||||
|
// mit ??= — uppercase 'Accept' würde NICHT matchen und trotzdem text/event-stream setzen.
|
||||||
|
'accept' => 'application/json',
|
||||||
|
];
|
||||||
|
if ($this->apiKey) {
|
||||||
|
$headers['Authorization'] = 'Bearer ' . $this->apiKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
$body = array_merge($payload, ['model' => $model->getName()]);
|
||||||
|
|
||||||
|
// Ollama-spezifische Optionen (z.B. num_ctx) direkt in den Body mergen
|
||||||
|
if (!empty($options['ollama_options'])) {
|
||||||
|
$body['options'] = $options['ollama_options'];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tools in OpenAI-Format bringen: {type: "function", function: {name, description, parameters}}
|
||||||
|
if (!empty($options['tools'])) {
|
||||||
|
$body['tools'] = array_map(
|
||||||
|
static function (array $tool): array {
|
||||||
|
// Contract liefert flache Objekte {name, description, parameters}
|
||||||
|
// OpenAI erwartet {type: "function", function: {...}}
|
||||||
|
if (!isset($tool['type'])) {
|
||||||
|
return ['type' => 'function', 'function' => $tool];
|
||||||
|
}
|
||||||
|
return $tool;
|
||||||
|
},
|
||||||
|
$options['tools']
|
||||||
|
);
|
||||||
|
$body['tool_choice'] = 'auto';
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->logger->debug('AI request body', [
|
||||||
|
'url' => rtrim($this->baseUrl, '/') . $this->path,
|
||||||
|
'model' => $model->getName(),
|
||||||
|
'tools' => array_column($body['tools'] ?? [], 'function'),
|
||||||
|
'messages' => count($body['messages'] ?? []),
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response = $this->httpClient->request('POST', rtrim($this->baseUrl, '/') . $this->path, [
|
||||||
|
'headers' => $headers,
|
||||||
|
'json' => $body,
|
||||||
|
'timeout' => 180,
|
||||||
|
]);
|
||||||
|
|
||||||
|
return new RawHttpResult($response);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,89 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PSC\Component\AiBundle\Platform\Completions;
|
||||||
|
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
use Psr\Log\NullLogger;
|
||||||
|
use Symfony\AI\Platform\Capability;
|
||||||
|
use Symfony\AI\Platform\Model;
|
||||||
|
use Symfony\AI\Platform\Result\RawResultInterface;
|
||||||
|
use Symfony\AI\Platform\Result\ResultInterface;
|
||||||
|
use Symfony\AI\Platform\Result\TextResult;
|
||||||
|
use Symfony\AI\Platform\Result\ToolCall;
|
||||||
|
use Symfony\AI\Platform\Result\ToolCallResult;
|
||||||
|
use Symfony\AI\Platform\ResultConverterInterface;
|
||||||
|
use Symfony\AI\Platform\TokenUsage\TokenUsageExtractorInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parses OpenAI-compatible chat completions responses into TextResult or ToolCallResult.
|
||||||
|
*/
|
||||||
|
final class ResultConverter implements ResultConverterInterface
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly LoggerInterface $logger = new NullLogger(),
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function supports(Model $model): bool
|
||||||
|
{
|
||||||
|
return $model->supports(Capability::INPUT_MESSAGES)
|
||||||
|
|| $model->supports(Capability::TOOL_CALLING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array<string, mixed> $options
|
||||||
|
*/
|
||||||
|
public function convert(RawResultInterface $result, array $options = []): ResultInterface
|
||||||
|
{
|
||||||
|
$data = $result->getData();
|
||||||
|
|
||||||
|
$choice = $data['choices'][0] ?? null;
|
||||||
|
$this->logger->debug('AI response received', [
|
||||||
|
'finish_reason' => $choice['finish_reason'] ?? null,
|
||||||
|
'has_tool_calls' => !empty($choice['message']['tool_calls']),
|
||||||
|
'content_preview' => substr((string) ($choice['message']['content'] ?? ''), 0, 150),
|
||||||
|
]);
|
||||||
|
if (!$choice) {
|
||||||
|
return new TextResult('');
|
||||||
|
}
|
||||||
|
|
||||||
|
$message = $choice['message'] ?? [];
|
||||||
|
|
||||||
|
// Tool calls zurückgeben wenn vorhanden
|
||||||
|
if (!empty($message['tool_calls'])) {
|
||||||
|
$toolCalls = [];
|
||||||
|
foreach ($message['tool_calls'] as $tc) {
|
||||||
|
$args = $tc['function']['arguments'] ?? '{}';
|
||||||
|
if (is_string($args)) {
|
||||||
|
$args = json_decode($args, true, flags: \JSON_THROW_ON_ERROR);
|
||||||
|
}
|
||||||
|
$toolCalls[] = new ToolCall(
|
||||||
|
id: $tc['id'],
|
||||||
|
name: $tc['function']['name'],
|
||||||
|
arguments: $args,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return new ToolCallResult(...$toolCalls);
|
||||||
|
}
|
||||||
|
|
||||||
|
$content = $message['content'] ?? '';
|
||||||
|
|
||||||
|
// Manche Modelle (z.B. Ollama mit reasoning) nutzen 'thinking' + 'content'
|
||||||
|
if (is_array($content)) {
|
||||||
|
$text = '';
|
||||||
|
foreach ($content as $part) {
|
||||||
|
if (($part['type'] ?? '') === 'text') {
|
||||||
|
$text .= $part['text'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$content = $text;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new TextResult((string) $content);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTokenUsageExtractor(): ?TokenUsageExtractorInterface
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PSC\Component\AiBundle\Platform;
|
||||||
|
|
||||||
|
use PSC\Component\AiBundle\Platform\Completions\ModelClient;
|
||||||
|
use PSC\Component\AiBundle\Platform\Completions\ResultConverter;
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
use Psr\Log\NullLogger;
|
||||||
|
use Symfony\AI\Platform\ModelCatalog\FallbackModelCatalog;
|
||||||
|
use Symfony\AI\Platform\Platform;
|
||||||
|
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Erstellt eine Platform-Instanz für OpenAI-kompatible APIs.
|
||||||
|
* Unterstützt: Ollama, OpenAI, Mistral, Azure OpenAI und andere.
|
||||||
|
*/
|
||||||
|
final class PlatformFactory
|
||||||
|
{
|
||||||
|
public static function create(
|
||||||
|
string $baseUrl,
|
||||||
|
?string $apiKey = null,
|
||||||
|
?HttpClientInterface $httpClient = null,
|
||||||
|
string $completionsPath = '/v1/chat/completions',
|
||||||
|
LoggerInterface $logger = new NullLogger(),
|
||||||
|
): Platform {
|
||||||
|
$modelClient = new ModelClient($httpClient, $baseUrl, $apiKey, $completionsPath, $logger);
|
||||||
|
$resultConverter = new ResultConverter($logger);
|
||||||
|
|
||||||
|
return new Platform(
|
||||||
|
modelClients: [$modelClient],
|
||||||
|
resultConverters: [$resultConverter],
|
||||||
|
modelCatalog: new FallbackModelCatalog(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
psc_component_ai:
|
||||||
|
resource: "@PSCComponentAiBundle/Controller/"
|
||||||
|
type: attribute
|
||||||
|
prefix: /backend
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
services:
|
||||||
|
_defaults:
|
||||||
|
autowire: true
|
||||||
|
autoconfigure: true
|
||||||
|
|
||||||
|
PSC\Component\AiBundle\:
|
||||||
|
resource: '../../*/*'
|
||||||
140
src/new/src/PSC/Component/AiBundle/Service/AiAgentService.php
Normal file
140
src/new/src/PSC/Component/AiBundle/Service/AiAgentService.php
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PSC\Component\AiBundle\Service;
|
||||||
|
|
||||||
|
use PSC\Component\AiBundle\Platform\PlatformFactory;
|
||||||
|
use PSC\Shop\OrderBundle\Ai\Tool\ChangeOrderStatus;
|
||||||
|
use PSC\Shop\OrderBundle\Ai\Tool\GetAvailableOrderStatuses;
|
||||||
|
use PSC\Shop\OrderBundle\Ai\Tool\GetOrder;
|
||||||
|
use PSC\Shop\OrderBundle\Ai\Tool\SearchOrders;
|
||||||
|
use PSC\System\SettingsBundle\Service\Instance;
|
||||||
|
use PSC\System\SettingsBundle\Service\Status;
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
use Symfony\AI\Agent\Agent;
|
||||||
|
use Symfony\AI\Agent\InputProcessor\SystemPromptInputProcessor;
|
||||||
|
use Symfony\AI\Agent\Toolbox\AgentProcessor;
|
||||||
|
use Symfony\AI\Agent\Toolbox\Toolbox;
|
||||||
|
use Symfony\AI\Platform\Message\Message;
|
||||||
|
use Symfony\AI\Platform\Message\MessageBag;
|
||||||
|
use Symfony\AI\Platform\PlatformInterface;
|
||||||
|
use Symfony\AI\Platform\Result\TextResult;
|
||||||
|
use Symfony\Component\DependencyInjection\Attribute\Autowire;
|
||||||
|
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||||
|
|
||||||
|
class AiAgentService
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly Instance $instanceService,
|
||||||
|
private readonly HttpClientInterface $httpClient,
|
||||||
|
private readonly GetOrder $getOrder,
|
||||||
|
private readonly SearchOrders $searchOrders,
|
||||||
|
private readonly ChangeOrderStatus $changeOrderStatus,
|
||||||
|
private readonly GetAvailableOrderStatuses $getAvailableOrderStatuses,
|
||||||
|
private readonly Status $statusService,
|
||||||
|
#[Autowire(service: 'monolog.logger.ai')]
|
||||||
|
private readonly LoggerInterface $logger,
|
||||||
|
) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array<array{role: string, content: string}> $history
|
||||||
|
*/
|
||||||
|
public function chat(string $message, array $history = []): string
|
||||||
|
{
|
||||||
|
$instance = $this->instanceService->getInstance();
|
||||||
|
$provider = $instance->getAiProvider();
|
||||||
|
|
||||||
|
if (!$provider) {
|
||||||
|
throw new \RuntimeException('Kein KI Anbieter konfiguriert.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$platform = $this->createPlatform($instance);
|
||||||
|
$model = $instance->getAiModel() ?: 'llama3.2';
|
||||||
|
|
||||||
|
$this->logger->info('AI chat request', [
|
||||||
|
'provider' => $provider,
|
||||||
|
'model' => $model,
|
||||||
|
'message' => $message,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$toolbox = new Toolbox(
|
||||||
|
tools: [
|
||||||
|
$this->getOrder,
|
||||||
|
$this->searchOrders,
|
||||||
|
$this->changeOrderStatus,
|
||||||
|
$this->getAvailableOrderStatuses,
|
||||||
|
],
|
||||||
|
logger: $this->logger,
|
||||||
|
);
|
||||||
|
|
||||||
|
$agentProcessor = new AgentProcessor($toolbox);
|
||||||
|
|
||||||
|
$systemPrompt = $this->buildSystemPrompt($instance);
|
||||||
|
$systemPromptProcessor = new SystemPromptInputProcessor($systemPrompt);
|
||||||
|
|
||||||
|
$agent = new Agent(
|
||||||
|
platform: $platform,
|
||||||
|
model: $model,
|
||||||
|
inputProcessors: [$systemPromptProcessor, $agentProcessor],
|
||||||
|
outputProcessors: [$agentProcessor],
|
||||||
|
);
|
||||||
|
|
||||||
|
$messages = new MessageBag();
|
||||||
|
foreach ($history as $h) {
|
||||||
|
if ($h['role'] === 'user') {
|
||||||
|
$messages->add(Message::ofUser($h['content']));
|
||||||
|
} elseif ($h['role'] === 'assistant') {
|
||||||
|
$messages->add(Message::ofAssistant($h['content']));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$messages->add(Message::ofUser($message));
|
||||||
|
|
||||||
|
$result = $agent->call($messages);
|
||||||
|
|
||||||
|
if ($result instanceof TextResult) {
|
||||||
|
return $result->getContent();
|
||||||
|
}
|
||||||
|
|
||||||
|
return (string) $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createPlatform($instance): PlatformInterface
|
||||||
|
{
|
||||||
|
$provider = $instance->getAiProvider();
|
||||||
|
$apiKey = $instance->getAiApiKey();
|
||||||
|
$baseUrl = $instance->getAiBaseUrl();
|
||||||
|
|
||||||
|
$baseUrl = match ($provider) {
|
||||||
|
'ollama' => rtrim($baseUrl ?: 'http://localhost:11434', '/'),
|
||||||
|
'openai' => 'https://api.openai.com',
|
||||||
|
'mistral' => 'https://api.mistral.ai',
|
||||||
|
'azure' => rtrim($baseUrl ?: '', '/'),
|
||||||
|
default => rtrim($baseUrl ?: 'http://localhost:11434', '/'),
|
||||||
|
};
|
||||||
|
return PlatformFactory::create(baseUrl: $baseUrl, apiKey: $apiKey ?: null, httpClient: $this->httpClient, logger: $this->logger);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function buildSystemPrompt($instance): string
|
||||||
|
{
|
||||||
|
$shop = $this->instanceService->getShop();
|
||||||
|
|
||||||
|
$statusLines = [];
|
||||||
|
foreach ($this->statusService->getOrderStatuse() as $status) {
|
||||||
|
$statusLines[] = sprintf(' - Code %d: %s', $status->getCode(), $status->getInternalName());
|
||||||
|
}
|
||||||
|
$statusList = implode("\n", $statusLines);
|
||||||
|
|
||||||
|
return sprintf(
|
||||||
|
'Du bist ein KI-Assistent für das PrintshopCreator Backend des Shops "%s". '
|
||||||
|
. 'Du hilfst bei der Verwaltung von Aufträgen, Kunden und Produkten. '
|
||||||
|
. 'Antworte immer auf Deutsch. '
|
||||||
|
. 'Nutze die verfügbaren Tools um Daten abzurufen oder Änderungen vorzunehmen. '
|
||||||
|
. 'Fasse alle durchgeführten Aktionen am Ende kurz zusammen. '
|
||||||
|
. 'Das heutige Datum ist: %s.' . "\n\n"
|
||||||
|
. "Verfügbare Auftragsstatus:\n%s\n"
|
||||||
|
. 'Nutze beim Statuswechsel immer den Code aus dieser Liste, auch wenn der Nutzer den Namen nur ungefähr nennt.',
|
||||||
|
$shop->getTitle(),
|
||||||
|
date('d.m.Y'),
|
||||||
|
$statusList,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -3,66 +3,65 @@
|
|||||||
namespace PSC\Component\ApiBundle\Api\Account;
|
namespace PSC\Component\ApiBundle\Api\Account;
|
||||||
|
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Model;
|
use Nelmio\ApiDocBundle\Attribute\Model;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Security;
|
use OpenApi\Attributes as OA;
|
||||||
use OpenApi\Annotations as OA;
|
use OpenApi\Attributes\JsonContent;
|
||||||
|
use OpenApi\Attributes\RequestBody;
|
||||||
|
use OpenApi\Attributes\Response;
|
||||||
|
use OpenApi\Attributes\Tag;
|
||||||
use PSC\Component\ApiBundle\Dto\Account\GetParentByTitle\Input;
|
use PSC\Component\ApiBundle\Dto\Account\GetParentByTitle\Input;
|
||||||
use PSC\Component\ApiBundle\Dto\Account\GetParentByTitle\Output;
|
use PSC\Component\ApiBundle\Dto\Account\GetParentByTitle\Output;
|
||||||
use PSC\Component\ApiBundle\Dto\Error\NotFound;
|
use PSC\Component\ApiBundle\Dto\Error\NotFound;
|
||||||
use PSC\Component\ApiBundle\Dto\Shop\Shops;
|
use PSC\Component\ApiBundle\Dto\Shop\Shops;
|
||||||
use PSC\Component\ApiBundle\Model\Shop;
|
use PSC\Component\ApiBundle\Model\Shop;
|
||||||
use PSC\Component\ApiBundle\Model\Shop\Domain;
|
use PSC\Component\ApiBundle\Model\Shop\Domain;
|
||||||
|
use PSC\Shop\EntityBundle\Entity\Account;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response as HttpResponse;
|
||||||
|
use Symfony\Component\HttpKernel\Attribute\MapRequestPayload;
|
||||||
use Symfony\Component\HttpKernel\KernelInterface;
|
use Symfony\Component\HttpKernel\KernelInterface;
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
|
use Symfony\Component\Security\Http\Attribute\IsGranted;
|
||||||
use Symfony\Component\Yaml\Yaml;
|
use Symfony\Component\Yaml\Yaml;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
|
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
|
|
||||||
|
|
||||||
class GetParentByTitle extends AbstractController
|
class GetParentByTitle extends AbstractController
|
||||||
{
|
{
|
||||||
private EntityManagerInterface $entityManager;
|
private EntityManagerInterface $entityManager;
|
||||||
private \PSC\System\SettingsBundle\Service\Shop $shopService;
|
private \PSC\System\SettingsBundle\Service\Shop $shopService;
|
||||||
|
|
||||||
public function __construct(EntityManagerInterface $entityManager, \PSC\System\SettingsBundle\Service\Shop $shopService)
|
public function __construct(
|
||||||
{
|
EntityManagerInterface $entityManager,
|
||||||
|
\PSC\System\SettingsBundle\Service\Shop $shopService,
|
||||||
|
) {
|
||||||
$this->entityManager = $entityManager;
|
$this->entityManager = $entityManager;
|
||||||
$this->shopService = $shopService;
|
$this->shopService = $shopService;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
#[Response(
|
||||||
* Check account parents by title
|
response: 200,
|
||||||
*
|
description: 'account',
|
||||||
* @OA\Response(
|
content: new JsonContent(
|
||||||
* response=200,
|
ref: new Model(type: PSC\Component\ApiBundle\Dto\Account\GetParentByTitle\Output::class),
|
||||||
* description="account",
|
),
|
||||||
* @OA\JsonContent(ref=@Model(type=\PSC\Component\ApiBundle\Dto\Account\GetParentByTitle\Output::class))
|
)]
|
||||||
* )
|
#[RequestBody(
|
||||||
* @OA\RequestBody(
|
description: 'This is a request body',
|
||||||
* description="This is a request body",
|
content: new Model(type: PSC\Component\ApiBundle\Dto\Account\GetParentByTitle\Input::class),
|
||||||
* @Model(type=\PSC\Component\ApiBundle\Dto\Account\GetParentByTitle\Input::class))
|
)]
|
||||||
* )
|
#[Tag(name: 'Account')]
|
||||||
* @OA\Tag(name="Account")
|
#[IsGranted('ROLE_API')]
|
||||||
* @IsGranted("ROLE_API")
|
#[Security(name: 'ApiKeyAuth')]
|
||||||
* @Security(name="ApiKeyAuth")
|
|
||||||
*/
|
|
||||||
#[Route(path: '/account/getparentbytitle', methods: ['POST'])]
|
#[Route(path: '/account/getparentbytitle', methods: ['POST'])]
|
||||||
#[ParamConverter('data', class: '\PSC\Component\ApiBundle\Dto\Account\GetParentByTitle\Input', converter: 'psc_rest.request_body')]
|
public function existsAction(#[MapRequestPayload] Input $data): JsonResponse
|
||||||
public function existsAction(Input $data): JsonResponse
|
|
||||||
{
|
{
|
||||||
$output = new Output();
|
$output = new Output();
|
||||||
$account = $this->entityManager
|
$account = $this->entityManager
|
||||||
->getRepository('PSC\Shop\EntityBundle\Entity\Account')
|
->getRepository('PSC\Shop\EntityBundle\Entity\Account')
|
||||||
->getAccountByTitle(
|
->getAccountByTitle($data->title);
|
||||||
$data->title
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!$account) {
|
if (!$account) {
|
||||||
$output->parent = "";
|
$output->parent = '';
|
||||||
$output->parent_id = 0;
|
$output->parent_id = 0;
|
||||||
return $this->json($output);
|
return $this->json($output);
|
||||||
}
|
}
|
||||||
@ -77,14 +76,7 @@ class GetParentByTitle extends AbstractController
|
|||||||
return $this->json($output);
|
return $this->json($output);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
protected function recursiveParent(\PSC\Shop\EntityBundle\Entity\Account $account): Account
|
||||||
* Gets the Parent Account
|
|
||||||
*
|
|
||||||
* @param \PSC\Shop\EntityBundle\Entity\Account $account
|
|
||||||
*
|
|
||||||
* @return \PSC\Shop\EntityBundle\Entity\Account
|
|
||||||
*/
|
|
||||||
protected function recursiveParent(\PSC\Shop\EntityBundle\Entity\Account $account)
|
|
||||||
{
|
{
|
||||||
if ($account->getParent()) {
|
if ($account->getParent()) {
|
||||||
$account = $this->recursiveParent($account->getParent());
|
$account = $this->recursiveParent($account->getParent());
|
||||||
|
|||||||
@ -3,9 +3,11 @@
|
|||||||
namespace PSC\Component\ApiBundle\Api\Cms;
|
namespace PSC\Component\ApiBundle\Api\Cms;
|
||||||
|
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Model;
|
use Nelmio\ApiDocBundle\Attribute\Model;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Security;
|
use OpenApi\Attributes as OA;
|
||||||
use OpenApi\Annotations as OA;
|
use OpenApi\Attributes\JsonContent;
|
||||||
|
use OpenApi\Attributes\Response;
|
||||||
|
use OpenApi\Attributes\Tag;
|
||||||
use PSC\Component\ApiBundle\Dto\Cms\Cms\Output;
|
use PSC\Component\ApiBundle\Dto\Cms\Cms\Output;
|
||||||
use PSC\Component\ApiBundle\Dto\Error\NotFound;
|
use PSC\Component\ApiBundle\Dto\Error\NotFound;
|
||||||
use PSC\Component\ApiBundle\Dto\Shop\Shops;
|
use PSC\Component\ApiBundle\Dto\Shop\Shops;
|
||||||
@ -14,11 +16,11 @@ use PSC\Component\ApiBundle\Model\Shop;
|
|||||||
use PSC\Component\ApiBundle\Model\Shop\Domain;
|
use PSC\Component\ApiBundle\Model\Shop\Domain;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response as HttpResponse;
|
||||||
use Symfony\Component\HttpKernel\KernelInterface;
|
use Symfony\Component\HttpKernel\KernelInterface;
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
|
use Symfony\Component\Security\Http\Attribute\IsGranted;
|
||||||
use Symfony\Component\Yaml\Yaml;
|
use Symfony\Component\Yaml\Yaml;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
|
|
||||||
|
|
||||||
class Get extends AbstractController
|
class Get extends AbstractController
|
||||||
{
|
{
|
||||||
@ -26,27 +28,24 @@ class Get extends AbstractController
|
|||||||
private Cms $hydrateCms;
|
private Cms $hydrateCms;
|
||||||
private \PSC\System\SettingsBundle\Service\Shop $shopService;
|
private \PSC\System\SettingsBundle\Service\Shop $shopService;
|
||||||
|
|
||||||
public function __construct(EntityManagerInterface $entityManager, \PSC\System\SettingsBundle\Service\Shop $shopService, Cms $hydrateCms)
|
public function __construct(
|
||||||
{
|
EntityManagerInterface $entityManager,
|
||||||
|
\PSC\System\SettingsBundle\Service\Shop $shopService,
|
||||||
|
Cms $hydrateCms,
|
||||||
|
) {
|
||||||
$this->entityManager = $entityManager;
|
$this->entityManager = $entityManager;
|
||||||
$this->hydrateCms = $hydrateCms;
|
$this->hydrateCms = $hydrateCms;
|
||||||
$this->shopService = $shopService;
|
$this->shopService = $shopService;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
#[Response(response: 200, description: 'cms', content: new JsonContent(ref: new Model(type: Output::class)))]
|
||||||
* Cms
|
#[Tag(name: 'Cms')]
|
||||||
*
|
|
||||||
* @OA\Response(
|
|
||||||
* response=200,
|
|
||||||
* description="cms",
|
|
||||||
* @OA\JsonContent(ref=@Model(type=\PSC\Component\ApiBundle\Dto\Cms\Cms\Output::class))
|
|
||||||
* )
|
|
||||||
* @OA\Tag(name="Cms")
|
|
||||||
*/
|
|
||||||
#[Route(path: '/cms', methods: ['GET'])]
|
#[Route(path: '/cms', methods: ['GET'])]
|
||||||
public function allAction(): JsonResponse
|
public function allAction(): JsonResponse
|
||||||
{
|
{
|
||||||
$cmss = $this->entityManager->getRepository(\PSC\Shop\EntityBundle\Entity\Cms::class)->findAllByShop($this->shopService->getShopByDomain());
|
$cmss = $this->entityManager
|
||||||
|
->getRepository(\PSC\Shop\EntityBundle\Entity\Cms::class)
|
||||||
|
->findAllByShop($this->shopService->getShopByDomain());
|
||||||
|
|
||||||
$data = [];
|
$data = [];
|
||||||
/** @var \PSC\Shop\EntityBundle\Entity\Cms $cms */
|
/** @var \PSC\Shop\EntityBundle\Entity\Cms $cms */
|
||||||
@ -57,21 +56,17 @@ class Get extends AbstractController
|
|||||||
return $this->json(new Output($data));
|
return $this->json(new Output($data));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
#[Response(
|
||||||
* Get One Cms
|
response: 200,
|
||||||
*
|
description: 'found cms',
|
||||||
* @OA\Response(
|
content: new JsonContent(ref: new Model(type: \PSC\Component\ApiBundle\Model\Cms::class)),
|
||||||
* response=200,
|
)]
|
||||||
* description="found cms",
|
#[Response(
|
||||||
* @OA\JsonContent(ref=@Model(type=\PSC\Component\ApiBundle\Model\Cms::class))
|
response: 404,
|
||||||
* )
|
description: 'not found',
|
||||||
* @OA\Response(
|
content: new JsonContent(ref: new Model(type: NotFound::class)),
|
||||||
* response=404,
|
)]
|
||||||
* description="not found",
|
#[Tag(name: 'Cms')]
|
||||||
* @OA\JsonContent(ref=@Model(type=\PSC\Component\ApiBundle\Dto\Error\NotFound::class))
|
|
||||||
* )
|
|
||||||
* @OA\Tag(name="Cms")
|
|
||||||
*/
|
|
||||||
#[Route(path: '/cms/{id}', methods: ['GET'])]
|
#[Route(path: '/cms/{id}', methods: ['GET'])]
|
||||||
public function one($id): JsonResponse
|
public function one($id): JsonResponse
|
||||||
{
|
{
|
||||||
|
|||||||
@ -4,9 +4,11 @@ namespace PSC\Component\ApiBundle\Api\Plugin;
|
|||||||
|
|
||||||
use Doctrine\ODM\MongoDB\DocumentManager;
|
use Doctrine\ODM\MongoDB\DocumentManager;
|
||||||
use MongoDB\BSON\ObjectId;
|
use MongoDB\BSON\ObjectId;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Model;
|
use Nelmio\ApiDocBundle\Attribute\Model;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Security;
|
use OpenApi\Attributes as OA;
|
||||||
use OpenApi\Annotations as OA;
|
use OpenApi\Attributes\JsonContent;
|
||||||
|
use OpenApi\Attributes\Response;
|
||||||
|
use OpenApi\Attributes\Tag;
|
||||||
use PSC\Component\ApiBundle\Dto\Error\NotFound;
|
use PSC\Component\ApiBundle\Dto\Error\NotFound;
|
||||||
use PSC\Component\ApiBundle\Dto\Shop\Shops;
|
use PSC\Component\ApiBundle\Dto\Shop\Shops;
|
||||||
use PSC\Component\ApiBundle\Model\Shop;
|
use PSC\Component\ApiBundle\Model\Shop;
|
||||||
@ -14,11 +16,11 @@ use PSC\Component\ApiBundle\Model\Shop\Domain;
|
|||||||
use PSC\System\PluginBundle\Interfaces\Plugin;
|
use PSC\System\PluginBundle\Interfaces\Plugin;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response as HttpResponse;
|
||||||
use Symfony\Component\HttpKernel\KernelInterface;
|
use Symfony\Component\HttpKernel\KernelInterface;
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
|
use Symfony\Component\Security\Http\Attribute\IsGranted;
|
||||||
use Symfony\Component\Yaml\Yaml;
|
use Symfony\Component\Yaml\Yaml;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
|
|
||||||
|
|
||||||
class Get extends AbstractController
|
class Get extends AbstractController
|
||||||
{
|
{
|
||||||
@ -29,16 +31,12 @@ class Get extends AbstractController
|
|||||||
$this->documentManager = $documentManager;
|
$this->documentManager = $documentManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
#[Response(
|
||||||
* Layouter Plugins
|
response: 200,
|
||||||
*
|
description: 'shops',
|
||||||
* @OA\Response(
|
content: new JsonContent(ref: new Model(type: PSC\Component\ApiBundle\Dto\Plugin\Plugins\Output::class)),
|
||||||
* response=200,
|
)]
|
||||||
* description="shops",
|
#[Tag(name: 'Plugin')]
|
||||||
* @OA\JsonContent(ref=@Model(type=\PSC\Component\ApiBundle\Dto\Plugin\Plugins\Output::class))
|
|
||||||
* )
|
|
||||||
* @OA\Tag(name="Plugin")
|
|
||||||
*/
|
|
||||||
#[Route(path: '/plugins/layouter', methods: ['GET'])]
|
#[Route(path: '/plugins/layouter', methods: ['GET'])]
|
||||||
public function layouterAction(): JsonResponse
|
public function layouterAction(): JsonResponse
|
||||||
{
|
{
|
||||||
@ -61,17 +59,13 @@ class Get extends AbstractController
|
|||||||
return $this->json(new Shops\Output($data));
|
return $this->json(new Shops\Output($data));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
#[Response(
|
||||||
* Plugins
|
response: 200,
|
||||||
*
|
description: 'shops',
|
||||||
* @OA\Response(
|
content: new JsonContent(ref: new Model(type: PSC\Component\ApiBundle\Dto\Plugin\Plugins\Output::class)),
|
||||||
* response=200,
|
)]
|
||||||
* description="shops",
|
#[Tag(name: 'Plugin')]
|
||||||
* @OA\JsonContent(ref=@Model(type=\PSC\Component\ApiBundle\Dto\Plugin\Plugins\Output::class))
|
#[Security(name: 'ApiKeyAuth')]
|
||||||
* )
|
|
||||||
* @OA\Tag(name="Plugin")
|
|
||||||
* @Security(name="ApiKeyAuth")
|
|
||||||
*/
|
|
||||||
#[Route(path: '/plugins', methods: ['GET'])]
|
#[Route(path: '/plugins', methods: ['GET'])]
|
||||||
#[IsGranted('ROLE_API')]
|
#[IsGranted('ROLE_API')]
|
||||||
public function allAction(): JsonResponse
|
public function allAction(): JsonResponse
|
||||||
@ -90,27 +84,25 @@ class Get extends AbstractController
|
|||||||
return $this->json(new Shops\Output($data));
|
return $this->json(new Shops\Output($data));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
#[Response(
|
||||||
* Get one plugin
|
response: 200,
|
||||||
*
|
description: 'found plugin',
|
||||||
* @OA\Response(
|
content: new JsonContent(ref: new Model(type: PSC\Component\ApiBundle\Model\Plugin::class)),
|
||||||
* response=200,
|
)]
|
||||||
* description="found plugin",
|
#[Response(
|
||||||
* @OA\JsonContent(ref=@Model(type=\PSC\Component\ApiBundle\Model\Plugin::class))
|
response: 404,
|
||||||
* )
|
description: 'not found',
|
||||||
* @OA\Response(
|
content: new JsonContent(ref: new Model(type: PSC\Component\ApiBundle\Dto\Error\NotFound::class)),
|
||||||
* response=404,
|
)]
|
||||||
* description="not found",
|
#[Tag(name: 'Plugin')]
|
||||||
* @OA\JsonContent(ref=@Model(type=\PSC\Component\ApiBundle\Dto\Error\NotFound::class))
|
#[Security(name: 'ApiKeyAuth')]
|
||||||
* )
|
|
||||||
* @OA\Tag(name="Plugin")
|
|
||||||
* @Security(name="ApiKeyAuth")
|
|
||||||
*/
|
|
||||||
#[Route(path: '/plugins/{uuid}', methods: ['GET'])]
|
#[Route(path: '/plugins/{uuid}', methods: ['GET'])]
|
||||||
#[IsGranted('ROLE_API')]
|
#[IsGranted('ROLE_API')]
|
||||||
public function one($uuid): JsonResponse
|
public function one($uuid): JsonResponse
|
||||||
{
|
{
|
||||||
$plugin = $this->documentManager->getRepository(\PSC\System\PluginBundle\Document\Plugin::class)->findOneBy(['id' => new ObjectId($uuid)]);
|
$plugin = $this->documentManager
|
||||||
|
->getRepository(\PSC\System\PluginBundle\Document\Plugin::class)
|
||||||
|
->findOneBy(['id' => new ObjectId($uuid)]);
|
||||||
if (!$plugin) {
|
if (!$plugin) {
|
||||||
return $this->json(new NotFound());
|
return $this->json(new NotFound());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,47 +3,38 @@
|
|||||||
namespace PSC\Component\ApiBundle\Api\Shop;
|
namespace PSC\Component\ApiBundle\Api\Shop;
|
||||||
|
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Model;
|
use Nelmio\ApiDocBundle\Attribute\Model;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Security;
|
use Nelmio\ApiDocBundle\Attribute\Security;
|
||||||
use OpenApi\Annotations as OA;
|
use OpenApi\Attributes\JsonContent;
|
||||||
|
use OpenApi\Attributes\Response;
|
||||||
|
use OpenApi\Attributes\Tag;
|
||||||
use PSC\Component\ApiBundle\Dto\Error\NotFound;
|
use PSC\Component\ApiBundle\Dto\Error\NotFound;
|
||||||
use PSC\Component\ApiBundle\Dto\Shop\Shops;
|
use PSC\Component\ApiBundle\Dto\Shop\Shops;
|
||||||
use PSC\Component\ApiBundle\Model\Shop;
|
use PSC\Shop\EntityBundle\Repository\ShopContactRepository;
|
||||||
use PSC\Component\ApiBundle\Model\Shop\Domain;
|
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
use Symfony\Component\HttpKernel\KernelInterface;
|
use Symfony\Component\Security\Http\Attribute\IsGranted;
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
|
||||||
use Symfony\Component\Yaml\Yaml;
|
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
|
|
||||||
|
|
||||||
class Get extends AbstractController
|
class Get extends AbstractController
|
||||||
{
|
{
|
||||||
private EntityManagerInterface $entityManager;
|
public function __construct(
|
||||||
private \PSC\Component\ApiBundle\Hydrate\Shop $hydrateShop;
|
private EntityManagerInterface $entityManager,
|
||||||
|
private \PSC\Component\ApiBundle\Hydrate\Shop $hydrateShop,
|
||||||
|
private ShopContactRepository $shopContactRepository,
|
||||||
|
) {}
|
||||||
|
|
||||||
public function __construct(EntityManagerInterface $entityManager, \PSC\Component\ApiBundle\Hydrate\Shop $hydrateShop)
|
#[Response(
|
||||||
{
|
response: 200,
|
||||||
$this->entityManager = $entityManager;
|
description: 'all shops',
|
||||||
$this->hydrateShop = $hydrateShop;
|
content: new JsonContent(ref: new Model(type: PSC\Component\ApiBundle\Dto\Shop\Shops\Output::class)),
|
||||||
}
|
)]
|
||||||
|
#[Tag(name: 'Shops')]
|
||||||
/**
|
#[Security(name: 'ApiKeyAuth')]
|
||||||
* Shops
|
#[Security(name: 'Bearer')]
|
||||||
*
|
|
||||||
* @OA\Response(
|
|
||||||
* response=200,
|
|
||||||
* description="shops",
|
|
||||||
* @OA\JsonContent(ref=@Model(type=\PSC\Component\ApiBundle\Dto\Shop\Shops\Output::class))
|
|
||||||
* )
|
|
||||||
* @OA\Tag(name="Shops")
|
|
||||||
* @Security(name="ApiKeyAuth")
|
|
||||||
* @Security(name="Bearer")
|
|
||||||
*/
|
|
||||||
#[Route(path: '/shops', methods: ['GET'])]
|
#[Route(path: '/shops', methods: ['GET'])]
|
||||||
#[IsGranted('ROLE_SHOP')]
|
#[IsGranted('ROLE_SHOP')]
|
||||||
public function allAction(): JsonResponse
|
public function allShops(): JsonResponse
|
||||||
{
|
{
|
||||||
$shops = $this->entityManager->getRepository(\PSC\Shop\EntityBundle\Entity\Shop::class)->findAll();
|
$shops = $this->entityManager->getRepository(\PSC\Shop\EntityBundle\Entity\Shop::class)->findAll();
|
||||||
|
|
||||||
@ -56,27 +47,48 @@ class Get extends AbstractController
|
|||||||
return $this->json(new Shops\Output($data));
|
return $this->json(new Shops\Output($data));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
#[Response(
|
||||||
* Get One Shop
|
response: 200,
|
||||||
*
|
description: 'my shops',
|
||||||
* @OA\Response(
|
content: new JsonContent(ref: new Model(type: PSC\Component\ApiBundle\Dto\Shop\Shops\Output::class)),
|
||||||
* response=200,
|
)]
|
||||||
* description="found shop",
|
#[Tag(name: 'Shops')]
|
||||||
* @OA\JsonContent(ref=@Model(type=\PSC\Component\ApiBundle\Model\Shop::class))
|
#[Security(name: 'ApiKeyAuth')]
|
||||||
* )
|
#[Security(name: 'Bearer')]
|
||||||
* @OA\Response(
|
#[Route(path: '/my_shops', methods: ['GET'])]
|
||||||
* response=404,
|
#[IsGranted('ROLE_SHOP')]
|
||||||
* description="not found",
|
public function myAction(): JsonResponse
|
||||||
* @OA\JsonContent(ref=@Model(type=\PSC\Component\ApiBundle\Dto\Error\NotFound::class))
|
{
|
||||||
* )
|
$shops = $this->shopContactRepository->myEditableShops($this->getUser());
|
||||||
* @OA\Tag(name="Shops")
|
|
||||||
* @Security(name="ApiKeyAuth")
|
$data = [];
|
||||||
*/
|
/** @var \PSC\Shop\EntityBundle\Entity\Shop $shop */
|
||||||
|
foreach ($shops as $shop) {
|
||||||
|
$data[] = $this->hydrateShop->hydrateToModel($shop);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->json(new Shops\Output($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[Response(
|
||||||
|
response: 200,
|
||||||
|
description: 'found shop',
|
||||||
|
content: new JsonContent(ref: new Model(type: PSC\Component\ApiBundle\Model\Shop::class)),
|
||||||
|
)]
|
||||||
|
#[Response(
|
||||||
|
response: 404,
|
||||||
|
description: 'not found',
|
||||||
|
content: new JsonContent(ref: new Model(type: PSC\Component\ApiBundle\Dto\Error\NotFound::class)),
|
||||||
|
)]
|
||||||
|
#[Tag(name: 'Shops')]
|
||||||
|
#[Security(name: 'ApiKeyAuth')]
|
||||||
#[Route(path: '/shops/{id}', methods: ['GET'])]
|
#[Route(path: '/shops/{id}', methods: ['GET'])]
|
||||||
#[IsGranted('ROLE_API')]
|
#[IsGranted('ROLE_API')]
|
||||||
public function one($id): JsonResponse
|
public function one($id): JsonResponse
|
||||||
{
|
{
|
||||||
$shop = $this->entityManager->getRepository(\PSC\Shop\EntityBundle\Entity\Shop::class)->findOneBy(['uid' => $id]);
|
$shop = $this->entityManager
|
||||||
|
->getRepository(\PSC\Shop\EntityBundle\Entity\Shop::class)
|
||||||
|
->findOneBy(['uid' => $id]);
|
||||||
|
|
||||||
if ($shop) {
|
if ($shop) {
|
||||||
return $this->json($this->hydrateShop->hydrateToModel($shop));
|
return $this->json($this->hydrateShop->hydrateToModel($shop));
|
||||||
|
|||||||
@ -3,9 +3,12 @@
|
|||||||
namespace PSC\Component\ApiBundle\Api\Stockbooking;
|
namespace PSC\Component\ApiBundle\Api\Stockbooking;
|
||||||
|
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Model;
|
use Nelmio\ApiDocBundle\Attribute\Model;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Security;
|
use OpenApi\Attributes as OA;
|
||||||
use OpenApi\Annotations as OA;
|
use OpenApi\Attributes\JsonContent;
|
||||||
|
use OpenApi\Attributes\RequestBody;
|
||||||
|
use OpenApi\Attributes\Response;
|
||||||
|
use OpenApi\Attributes\Tag;
|
||||||
use PSC\Component\ApiBundle\Dto\Error\NotFound;
|
use PSC\Component\ApiBundle\Dto\Error\NotFound;
|
||||||
use PSC\Component\ApiBundle\Dto\Error\PersistFailure;
|
use PSC\Component\ApiBundle\Dto\Error\PersistFailure;
|
||||||
use PSC\Component\ApiBundle\Dto\Shop\Shops;
|
use PSC\Component\ApiBundle\Dto\Shop\Shops;
|
||||||
@ -17,56 +20,58 @@ use PSC\Component\ApiBundle\Model\Shop\Domain;
|
|||||||
use PSC\Component\ApiBundle\Model\Stockbooking;
|
use PSC\Component\ApiBundle\Model\Stockbooking;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response as HttpResponse;
|
||||||
|
use Symfony\Component\HttpKernel\Attribute\MapRequestPayload;
|
||||||
use Symfony\Component\HttpKernel\KernelInterface;
|
use Symfony\Component\HttpKernel\KernelInterface;
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
|
use Symfony\Component\Security\Http\Attribute\IsGranted;
|
||||||
use Symfony\Component\Yaml\Yaml;
|
use Symfony\Component\Yaml\Yaml;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
|
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
|
|
||||||
|
|
||||||
class CreateByNr extends AbstractController
|
class CreateByNr extends AbstractController
|
||||||
{
|
{
|
||||||
private EntityManagerInterface $entityManager;
|
private EntityManagerInterface $entityManager;
|
||||||
private \PSC\Component\ApiBundle\Hydrate\Shop $hydrateShop;
|
private \PSC\Component\ApiBundle\Hydrate\Shop $hydrateShop;
|
||||||
|
|
||||||
public function __construct(EntityManagerInterface $entityManager, \PSC\Component\ApiBundle\Hydrate\Shop $hydrateShop)
|
public function __construct(
|
||||||
{
|
EntityManagerInterface $entityManager,
|
||||||
|
\PSC\Component\ApiBundle\Hydrate\Shop $hydrateShop,
|
||||||
|
) {
|
||||||
$this->entityManager = $entityManager;
|
$this->entityManager = $entityManager;
|
||||||
$this->hydrateShop = $hydrateShop;
|
$this->hydrateShop = $hydrateShop;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
#[Response(
|
||||||
* create by nr
|
response: 200,
|
||||||
*
|
description: 'stockbooking',
|
||||||
* @OA\Response(
|
content: new JsonContent(
|
||||||
* response=200,
|
ref: new Model(type: PSC\Component\ApiBundle\Dto\Stockbooking\CreateByNr\Output::class),
|
||||||
* description="stockbooking",
|
),
|
||||||
* @OA\JsonContent(ref=@Model(type=\PSC\Component\ApiBundle\Dto\Stockbooking\CreateByNr\Output::class))
|
)]
|
||||||
* )
|
#[RequestBody(
|
||||||
* @OA\RequestBody(
|
description: 'This is a request body',
|
||||||
* description="This is a request body",
|
content: new Model(type: PSC\Component\ApiBundle\Dto\Stockbooking\CreateByNr\Input::class),
|
||||||
* @Model(type=\PSC\Component\ApiBundle\Dto\Stockbooking\CreateByNr\Input::class))
|
)]
|
||||||
* )
|
#[Tag(name: 'Stockbooking')]
|
||||||
* @OA\Tag(name="Stockbooking")
|
#[IsGranted('ROLE_API')]
|
||||||
* @IsGranted("ROLE_API")
|
#[Security(name: 'ApiKeyAuth')]
|
||||||
* @Security(name="ApiKeyAuth")
|
|
||||||
*/
|
|
||||||
#[Route(path: '/stockbooking/createbynr', methods: ['POST'])]
|
#[Route(path: '/stockbooking/createbynr', methods: ['POST'])]
|
||||||
#[ParamConverter('data', class: '\PSC\Component\ApiBundle\Dto\Stockbooking\CreateByNr\Input', converter: 'psc_rest.request_body')]
|
public function create(#[MapRequestPayload] Input $data): JsonResponse
|
||||||
public function create(Input $data): JsonResponse
|
|
||||||
{
|
{
|
||||||
$product = $this->entityManager
|
$product = $this->entityManager
|
||||||
->getRepository('PSC\Shop\EntityBundle\Entity\Product')->createQueryBuilder('product')
|
->getRepository('PSC\Shop\EntityBundle\Entity\Product')
|
||||||
|
->createQueryBuilder('product')
|
||||||
->andWhere('product.nrIntern = :nr or product.nrExtern = :nr')
|
->andWhere('product.nrIntern = :nr or product.nrExtern = :nr')
|
||||||
->setParameter('nr', $data->product_nr)
|
->setParameter('nr', $data->product_nr)
|
||||||
->getQuery()->getOneOrNullResult();
|
->getQuery()
|
||||||
|
->getOneOrNullResult();
|
||||||
|
|
||||||
if ($product) {
|
if ($product) {
|
||||||
$contact = $this->entityManager
|
$contact = $this->entityManager
|
||||||
->getRepository('PSC\Shop\EntityBundle\Entity\Contact')->findOneBy(['uid' => $data->contact_id]);
|
->getRepository('PSC\Shop\EntityBundle\Entity\Contact')
|
||||||
|
->findOneBy(['uid' => $data->contact_id]);
|
||||||
|
|
||||||
if (!$contact) {
|
if (!$contact) {
|
||||||
return $this->json(new NotFound("Contact not found"));
|
return $this->json(new NotFound('Contact not found'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$stBooking = new \PSC\Shop\EntityBundle\Entity\Stockbooking($product);
|
$stBooking = new \PSC\Shop\EntityBundle\Entity\Stockbooking($product);
|
||||||
@ -90,6 +95,6 @@ class CreateByNr extends AbstractController
|
|||||||
return $this->json(new Output());
|
return $this->json(new Output());
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->json(new NotFound("Product not found"));
|
return $this->json(new NotFound('Product not found'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,9 +3,12 @@
|
|||||||
namespace PSC\Component\ApiBundle\Api\Stockbooking;
|
namespace PSC\Component\ApiBundle\Api\Stockbooking;
|
||||||
|
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Model;
|
use Nelmio\ApiDocBundle\Attribute\Model;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Security;
|
use OpenApi\Attributes as OA;
|
||||||
use OpenApi\Annotations as OA;
|
use OpenApi\Attributes\JsonContent;
|
||||||
|
use OpenApi\Attributes\RequestBody;
|
||||||
|
use OpenApi\Attributes\Response;
|
||||||
|
use OpenApi\Attributes\Tag;
|
||||||
use PSC\Component\ApiBundle\Dto\Error\NotFound;
|
use PSC\Component\ApiBundle\Dto\Error\NotFound;
|
||||||
use PSC\Component\ApiBundle\Dto\Shop\Shops;
|
use PSC\Component\ApiBundle\Dto\Shop\Shops;
|
||||||
use PSC\Component\ApiBundle\Dto\Stockbooking\GetByNr\Input;
|
use PSC\Component\ApiBundle\Dto\Stockbooking\GetByNr\Input;
|
||||||
@ -16,56 +19,55 @@ use PSC\Component\ApiBundle\Model\Shop\Domain;
|
|||||||
use PSC\Component\ApiBundle\Model\Stockbooking;
|
use PSC\Component\ApiBundle\Model\Stockbooking;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response as HttpResponse;
|
||||||
|
use Symfony\Component\HttpKernel\Attribute\MapRequestPayload;
|
||||||
use Symfony\Component\HttpKernel\KernelInterface;
|
use Symfony\Component\HttpKernel\KernelInterface;
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
|
use Symfony\Component\Security\Http\Attribute\IsGranted;
|
||||||
use Symfony\Component\Yaml\Yaml;
|
use Symfony\Component\Yaml\Yaml;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
|
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
|
|
||||||
|
|
||||||
class GetByNr extends AbstractController
|
class GetByNr extends AbstractController
|
||||||
{
|
{
|
||||||
private EntityManagerInterface $entityManager;
|
private EntityManagerInterface $entityManager;
|
||||||
private \PSC\Component\ApiBundle\Hydrate\Shop $hydrateShop;
|
private \PSC\Component\ApiBundle\Hydrate\Shop $hydrateShop;
|
||||||
|
|
||||||
public function __construct(EntityManagerInterface $entityManager, \PSC\Component\ApiBundle\Hydrate\Shop $hydrateShop)
|
public function __construct(
|
||||||
{
|
EntityManagerInterface $entityManager,
|
||||||
|
\PSC\Component\ApiBundle\Hydrate\Shop $hydrateShop,
|
||||||
|
) {
|
||||||
$this->entityManager = $entityManager;
|
$this->entityManager = $entityManager;
|
||||||
$this->hydrateShop = $hydrateShop;
|
$this->hydrateShop = $hydrateShop;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
#[Response(
|
||||||
* get all by nr
|
response: 200,
|
||||||
*
|
description: 'account',
|
||||||
* @OA\Response(
|
content: new JsonContent(ref: new Model(type: PSC\Component\ApiBundle\Dto\Stockbooking\GetByNr\Output::class)),
|
||||||
* response=200,
|
)]
|
||||||
* description="account",
|
#[RequestBody(
|
||||||
* @OA\JsonContent(ref=@Model(type=\PSC\Component\ApiBundle\Dto\Stockbooking\GetByNr\Output::class))
|
description: 'This is a request body',
|
||||||
* )
|
content: new Model(type: PSC\Component\ApiBundle\Dto\Stockbooking\GetByNr\Input::class),
|
||||||
* @OA\RequestBody(
|
)]
|
||||||
* description="This is a request body",
|
#[Tag(name: 'Stockbooking')]
|
||||||
* @Model(type=\PSC\Component\ApiBundle\Dto\Stockbooking\GetByNr\Input::class))
|
#[IsGranted('ROLE_API')]
|
||||||
* )
|
#[Security(name: 'ApiKeyAuth')]
|
||||||
* @OA\Tag(name="Stockbooking")
|
|
||||||
* @IsGranted("ROLE_API")
|
|
||||||
* @Security(name="ApiKeyAuth")
|
|
||||||
*/
|
|
||||||
#[Route(path: '/stockbooking/getallbynr', methods: ['POST'])]
|
#[Route(path: '/stockbooking/getallbynr', methods: ['POST'])]
|
||||||
#[ParamConverter('data', class: '\PSC\Component\ApiBundle\Dto\Stockbooking\GetByNr\Input', converter: 'psc_rest.request_body')]
|
public function allAction(#[MapRequestPayload] Input $data): JsonResponse
|
||||||
public function allAction(Input $data): JsonResponse
|
|
||||||
{
|
{
|
||||||
$product = $this->entityManager
|
$product = $this->entityManager
|
||||||
->getRepository('PSC\Shop\EntityBundle\Entity\Product')->createQueryBuilder('product')
|
->getRepository('PSC\Shop\EntityBundle\Entity\Product')
|
||||||
|
->createQueryBuilder('product')
|
||||||
->andWhere('product.nrIntern = :nr or product.nrExtern = :nr')
|
->andWhere('product.nrIntern = :nr or product.nrExtern = :nr')
|
||||||
->setParameter('nr', $data->nr)
|
->setParameter('nr', $data->nr)
|
||||||
->getQuery()->getOneOrNullResult();
|
->getQuery()
|
||||||
|
->getOneOrNullResult();
|
||||||
|
|
||||||
if ($product) {
|
if ($product) {
|
||||||
$bookings = $this->entityManager
|
$bookings = $this->entityManager
|
||||||
->getRepository('PSC\Shop\EntityBundle\Entity\Stockbooking')
|
->getRepository('PSC\Shop\EntityBundle\Entity\Stockbooking')
|
||||||
->findByProduct($product);
|
->findByProduct($product);
|
||||||
|
|
||||||
$bookingsTemp = array();
|
$bookingsTemp = [];
|
||||||
/** @var \PSC\Shop\EntityBundle\Entity\Stockbooking $booking */
|
/** @var \PSC\Shop\EntityBundle\Entity\Stockbooking $booking */
|
||||||
foreach ($bookings as $booking) {
|
foreach ($bookings as $booking) {
|
||||||
$contact = new Contact();
|
$contact = new Contact();
|
||||||
@ -86,6 +88,6 @@ class GetByNr extends AbstractController
|
|||||||
return $this->json(new Output($bookingsTemp));
|
return $this->json(new Output($bookingsTemp));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->json(new NotFound("Product not found"));
|
return $this->json(new NotFound('Product not found'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,32 +3,28 @@
|
|||||||
namespace PSC\Component\ApiBundle\Api\System;
|
namespace PSC\Component\ApiBundle\Api\System;
|
||||||
|
|
||||||
use Doctrine\ODM\MongoDB\DocumentManager;
|
use Doctrine\ODM\MongoDB\DocumentManager;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Model;
|
use Nelmio\ApiDocBundle\Attribute\Model;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Security;
|
use OpenApi\Attributes as OA;
|
||||||
use OpenApi\Annotations as OA;
|
use OpenApi\Attributes\JsonContent;
|
||||||
|
use OpenApi\Attributes\Response;
|
||||||
|
use OpenApi\Attributes\Tag;
|
||||||
use PSC\Component\ApiBundle\Model\Instance;
|
use PSC\Component\ApiBundle\Model\Instance;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response as HttpResponse;
|
||||||
use Symfony\Component\HttpKernel\KernelInterface;
|
use Symfony\Component\HttpKernel\KernelInterface;
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
|
use Symfony\Component\Security\Http\Attribute\IsGranted;
|
||||||
use Symfony\Component\Yaml\Yaml;
|
use Symfony\Component\Yaml\Yaml;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
|
|
||||||
|
|
||||||
class Info extends AbstractController
|
class Info extends AbstractController
|
||||||
{
|
{
|
||||||
/**
|
#[Tag(name: 'System')]
|
||||||
* Get system info.
|
#[Response(
|
||||||
*
|
response: 200,
|
||||||
*
|
description: 'Returns system info',
|
||||||
* @Security(name="ApiKeyAuth")
|
content: new JsonContent(ref: new Model(type: Instance::class)),
|
||||||
* @OA\Response(
|
)]
|
||||||
* response=200,
|
|
||||||
* description="Returns system info",
|
|
||||||
* @OA\JsonContent(ref=@Model(type=\PSC\Component\ApiBundle\Model\Instance::class))
|
|
||||||
* )
|
|
||||||
* @OA\Tag(name="System")
|
|
||||||
*/
|
|
||||||
#[Route(path: '/system/info', methods: ['GET'])]
|
#[Route(path: '/system/info', methods: ['GET'])]
|
||||||
#[IsGranted('ROLE_API')]
|
#[IsGranted('ROLE_API')]
|
||||||
public function infoAction(DocumentManager $documentManager): JsonResponse
|
public function infoAction(DocumentManager $documentManager): JsonResponse
|
||||||
@ -38,14 +34,13 @@ class Info extends AbstractController
|
|||||||
->getRepository(\PSC\Shop\EntityBundle\Document\Instance::class)
|
->getRepository(\PSC\Shop\EntityBundle\Document\Instance::class)
|
||||||
->findOneBy(['appId' => '1']);
|
->findOneBy(['appId' => '1']);
|
||||||
|
|
||||||
|
|
||||||
$data = new Instance();
|
$data = new Instance();
|
||||||
$data->sftpHost = getenv('ftpIp');
|
$data->sftpHost = getenv('ftpIp');
|
||||||
$data->ip = getenv('ftpIp');
|
$data->ip = getenv('ftpIp');
|
||||||
$data->sftpUserName = getenv('ftpUsername');
|
$data->sftpUserName = getenv('ftpUsername');
|
||||||
$data->sftpPassword = getenv('ftpPassword');
|
$data->sftpPassword = getenv('ftpPassword');
|
||||||
$data->sftpPort = getenv('ftpPort');
|
$data->sftpPort = getenv('ftpPort');
|
||||||
if($instance && $instance->isSmtpOwn()) {
|
if ($instance && $instance->isSmtpOwn()) {
|
||||||
$data->smtpOwn = true;
|
$data->smtpOwn = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2,14 +2,16 @@
|
|||||||
|
|
||||||
namespace PSC\Component\ApiBundle\Api\System;
|
namespace PSC\Component\ApiBundle\Api\System;
|
||||||
|
|
||||||
use Nelmio\ApiDocBundle\Annotation\Model;
|
use Nelmio\ApiDocBundle\Attribute\Model;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Security;
|
use OpenApi\Attributes as OA;
|
||||||
use OpenApi\Annotations as OA;
|
use OpenApi\Attributes\JsonContent;
|
||||||
|
use OpenApi\Attributes\Response;
|
||||||
|
use OpenApi\Attributes\Tag;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response as HttpResponse;
|
||||||
use Symfony\Component\HttpKernel\KernelInterface;
|
use Symfony\Component\HttpKernel\KernelInterface;
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
use Symfony\Component\Yaml\Yaml;
|
use Symfony\Component\Yaml\Yaml;
|
||||||
|
|
||||||
class Version extends AbstractController
|
class Version extends AbstractController
|
||||||
@ -21,17 +23,12 @@ class Version extends AbstractController
|
|||||||
$this->kernel = $kernel;
|
$this->kernel = $kernel;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
#[Response(
|
||||||
* Get Release version.
|
response: 200,
|
||||||
*
|
description: 'release version',
|
||||||
*
|
content: new JsonContent(ref: new Model(type: PSC\Component\ApiBundle\Model\Version::class)),
|
||||||
* @OA\Response(
|
)]
|
||||||
* response=200,
|
#[Tag(name: 'System')]
|
||||||
* description="release version",
|
|
||||||
* @OA\JsonContent(ref=@Model(type=\PSC\Component\ApiBundle\Model\Version::class))
|
|
||||||
* )
|
|
||||||
* @OA\Tag(name="System")
|
|
||||||
*/
|
|
||||||
#[Route(path: '/system/version', methods: ['GET'])]
|
#[Route(path: '/system/version', methods: ['GET'])]
|
||||||
public function versionAction(): JsonResponse
|
public function versionAction(): JsonResponse
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,82 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace PSC\Component\ApiBundle\Converter;
|
|
||||||
|
|
||||||
|
|
||||||
use JMS\Serializer\Exception\UnsupportedFormatException;
|
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter\ParamConverterInterface;
|
|
||||||
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
|
|
||||||
use Symfony\Component\HttpKernel\Exception\UnsupportedMediaTypeHttpException;
|
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
|
||||||
use Symfony\Component\Serializer\Annotation\Context;
|
|
||||||
use Symfony\Component\Serializer\SerializerInterface;
|
|
||||||
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
|
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
|
||||||
|
|
||||||
final class RequestBody implements ParamConverterInterface
|
|
||||||
{
|
|
||||||
private $serializer;
|
|
||||||
private $context = [];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string[]|null $groups
|
|
||||||
*/
|
|
||||||
public function __construct(
|
|
||||||
SerializerInterface $serializer,
|
|
||||||
?array $groups = null,
|
|
||||||
?string $version = null,
|
|
||||||
?string $validationErrorsArgument = null
|
|
||||||
) {
|
|
||||||
$this->serializer = $serializer;
|
|
||||||
|
|
||||||
if (!empty($groups)) {
|
|
||||||
$this->context['groups'] = (array) $groups;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($version)) {
|
|
||||||
$this->context['version'] = $version;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function apply(Request $request, ParamConverter $configuration): bool
|
|
||||||
{
|
|
||||||
$format = $request->getContentType();
|
|
||||||
if (null === $format) {
|
|
||||||
return $this->throwException(new UnsupportedMediaTypeHttpException(), $configuration);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
$object = $this->serializer->deserialize(
|
|
||||||
$request->getContent(),
|
|
||||||
$configuration->getClass(),
|
|
||||||
$format,
|
|
||||||
);
|
|
||||||
} catch (UnsupportedFormatException $e) {
|
|
||||||
return $this->throwException(new UnsupportedMediaTypeHttpException($e->getMessage(), $e), $configuration);
|
|
||||||
}
|
|
||||||
|
|
||||||
$request->attributes->set($configuration->getName(), $object);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function supports(ParamConverter $configuration): bool
|
|
||||||
{
|
|
||||||
return null !== $configuration->getClass() && 'psc_rest.request_body' === $configuration->getConverter();
|
|
||||||
}
|
|
||||||
|
|
||||||
private function throwException(\Exception $exception, ParamConverter $configuration): bool
|
|
||||||
{
|
|
||||||
if ($configuration->isOptional()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw $exception;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user