This commit is contained in:
Thomas Peterson 2026-03-03 13:40:54 +01:00
parent a18f74b3df
commit c27e6c3c7f
8 changed files with 774 additions and 628 deletions

View File

@ -46,13 +46,13 @@ services:
networks: networks:
- network - network
restart: always restart: always
deploy: # deploy:
resources: # resources:
reservations: # reservations:
devices: # devices:
- driver: nvidia # - driver: nvidia
count: 1 # alternatively, use `count: all` for all GPUs # count: 1 # alternatively, use `count: all` for all GPUs
capabilities: [gpu] # capabilities: [gpu]
webhook: webhook:
image: tarampampam/webhook-tester:2 image: tarampampam/webhook-tester:2
restart: always restart: always

View File

@ -4,6 +4,8 @@ namespace PSC\Shop\OrderBundle\Model\Order\Position\Upload;
class Center implements IUploadTypeObject class Center implements IUploadTypeObject
{ {
public array $uploads = [];
public function getCode(): string public function getCode(): string
{ {
return 'center'; return 'center';
@ -18,4 +20,9 @@ class Center implements IUploadTypeObject
{ {
return false; return false;
} }
public function addUpload(array $upload): void
{
$this->uploads[] = $upload;
}
} }

View File

@ -8,6 +8,7 @@ use OpenApi\Attributes\Schema;
#[Schema(properties: [ #[Schema(properties: [
new Property(property: 'code', type: 'string'), new Property(property: 'code', type: 'string'),
new Property(property: 'name', type: 'string'), new Property(property: 'name', type: 'string'),
new Property(property: 'preview', type: 'boolean'),
])] ])]
interface IUploadTypeObject interface IUploadTypeObject
{ {

View File

@ -5,15 +5,21 @@ namespace PSC\Shop\OrderBundle\Transformer\Order\Position\Upload;
use PSC\Shop\EntityBundle\Document\Position as PosDoc; use PSC\Shop\EntityBundle\Document\Position as PosDoc;
use PSC\Shop\EntityBundle\Entity\Orderpos; use PSC\Shop\EntityBundle\Entity\Orderpos;
use PSC\Shop\OrderBundle\Model\Order\Position; use PSC\Shop\OrderBundle\Model\Order\Position;
use PSC\Shop\OrderBundle\Model\Order\Position\Upload\Center as PSCCenter;
use PSC\Shop\OrderBundle\Transformer\Order\Position\IUploadModeTransformer; use PSC\Shop\OrderBundle\Transformer\Order\Position\IUploadModeTransformer;
class Center implements IUploadModeTransformer class Center implements IUploadModeTransformer
{ {
public function fromDb(Position $position, Orderpos $posEntity, PosDoc $posDoc): void public function fromDb(Position $position, Orderpos $posEntity, PosDoc $posDoc): void
{ {
$center = new PSCCenter();
foreach ($posEntity->getUploads() as $upload) {
var_dump($upload->getName());
var_dump($upload->getPath());
}
$center->addUpload(['fileName' => 'test', 'name' => 'test', 'type' => 'umschlag']);
$position->setUploadTypeObject($center);
} }
public function toDb(Position $position, Orderpos $posEntity, PosDoc $posDoc): void public function toDb(Position $position, Orderpos $posEntity, PosDoc $posDoc): void {}
{
}
} }

View File

@ -139,10 +139,11 @@ class CreateCenterTest extends WebTestCase
$data = json_decode($client->getResponse()->getContent(), true); $data = json_decode($client->getResponse()->getContent(), true);
self::assertCount(2, $data['positions'][0]['uploads']); self::assertCount(2, $data['positions'][0]['uploads']);
self::assertSame('umschlag.pdf', $data['positions'][0]['uploadTypeObject']['files'][0]['fileName']); var_dump($data['positions'][0]['uploadTypeObject']['uploads']);
self::assertSame('umschlag', $data['positions'][0]['uploadTypeObject']['files'][0]['typ']); self::assertSame('umschlag.pdf', $data['positions'][0]['uploadTypeObject']['uploads'][0]['fileName']);
self::assertSame('inhalt.pdf', $data['positions'][0]['uploadTypeObject']['files'][1]['fileName']); self::assertSame('umschlag', $data['positions'][0]['uploadTypeObject']['uploads'][0]['typ']);
self::assertSame('inhalt', $data['positions'][0]['uploadTypeObject']['files'][1]['typ']); self::assertSame('inhalt.pdf', $data['positions'][0]['uploadTypeObject']['uploads'][1]['fileName']);
self::assertSame('inhalt', $data['positions'][0]['uploadTypeObject']['uploads'][1]['typ']);
/** @var JobRepository $jobs */ /** @var JobRepository $jobs */
$jobs = static::getContainer()->get(JobRepository::class); $jobs = static::getContainer()->get(JobRepository::class);

View File

@ -1,5 +1,5 @@
{% if uuid %} {% if uuid %}
<a href="/apps/backend/component/invoice/index/create#/{{ uuid }}" target="_blank" class="btn btn-warning btn-sm">Auftrag bearbeiten (BETA)</a> <a href="/apps/backend/component/invoice/index/create#/{{ uuid }}" target="_blank" class="inline-flex items-center justify-center py-1 gap-1 font-medium rounded-sm px-4 text-sm text-white shadow-lg bg-indigo-500 hover:bg-indigo-600 hover:ring-2 hover:ring-indigo-500 hover:ring-offset-2 min-h-[2.25rem]">Auftrag bearbeiten (BETA)</a>
{% else %} {% else %}
<div class="panel"> <div class="panel">
<div class="body"><a href="/apps/backend/component/invoice/index/create" target="_blank" class="inline-flex items-center justify-center py-1 gap-1 font-medium rounded-sm px-4 text-sm text-white shadow-lg bg-indigo-500 hover:bg-indigo-600 hover:ring-2 hover:ring-indigo-500 hover:ring-offset-2 min-h-[2.25rem]">Auftrag anlegen (BETA)</a></div> <div class="body"><a href="/apps/backend/component/invoice/index/create" target="_blank" class="inline-flex items-center justify-center py-1 gap-1 font-medium rounded-sm px-4 text-sm text-white shadow-lg bg-indigo-500 hover:bg-indigo-600 hover:ring-2 hover:ring-indigo-500 hover:ring-offset-2 min-h-[2.25rem]">Auftrag anlegen (BETA)</a></div>

View File

@ -922,6 +922,10 @@ html {
grid-column: span 2 / span 2; grid-column: span 2 / span 2;
} }
.col-span-3{
grid-column: span 3 / span 3;
}
.col-span-4{ .col-span-4{
grid-column: span 4 / span 4; grid-column: span 4 / span 4;
} }
@ -959,6 +963,11 @@ html {
margin-right: -0.75rem; margin-right: -0.75rem;
} }
.mx-4{
margin-left: 1rem;
margin-right: 1rem;
}
.mx-auto{ .mx-auto{
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
@ -989,6 +998,10 @@ html {
margin-bottom: 1rem; margin-bottom: 1rem;
} }
.mb-5{
margin-bottom: 1.25rem;
}
.mb-6{ .mb-6{
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
} }
@ -1008,6 +1021,10 @@ html {
margin-inline-end: auto; margin-inline-end: auto;
} }
.ml-1{
margin-left: 0.25rem;
}
.ml-2{ .ml-2{
margin-left: 0.5rem; margin-left: 0.5rem;
} }
@ -1077,6 +1094,10 @@ html {
margin-top: 1.5rem; margin-top: 1.5rem;
} }
.mt-8{
margin-top: 2rem;
}
.block{ .block{
display: block; display: block;
} }
@ -1161,6 +1182,10 @@ html {
height: 0.25rem; height: 0.25rem;
} }
.h-1\.5{
height: 0.375rem;
}
.h-10{ .h-10{
height: 2.5rem; height: 2.5rem;
} }
@ -1205,6 +1230,10 @@ html {
height: 2rem; height: 2rem;
} }
.h-80{
height: 20rem;
}
.h-\[4rem\]{ .h-\[4rem\]{
height: 4rem; height: 4rem;
} }
@ -1229,6 +1258,10 @@ html {
width: 0.25rem; width: 0.25rem;
} }
.w-1\.5{
width: 0.375rem;
}
.w-1\/2{ .w-1\/2{
width: 50%; width: 50%;
} }
@ -1245,6 +1278,10 @@ html {
width: 4rem; width: 4rem;
} }
.w-2\/5{
width: 40%;
}
.w-24{ .w-24{
width: 6rem; width: 6rem;
} }
@ -1342,6 +1379,10 @@ html {
max-width: 20em; max-width: 20em;
} }
.max-w-\[75\%\]{
max-width: 75%;
}
.max-w-md{ .max-w-md{
max-width: 28rem; max-width: 28rem;
} }
@ -1440,6 +1481,22 @@ html {
transform: none; transform: none;
} }
@keyframes bounce{
0%, 100%{
transform: translateY(-25%);
animation-timing-function: cubic-bezier(0.8,0,1,1);
}
50%{
transform: none;
animation-timing-function: cubic-bezier(0,0,0.2,1);
}
}
.animate-bounce{
animation: bounce 1s infinite;
}
.cursor-default{ .cursor-default{
cursor: default; cursor: default;
} }
@ -1456,6 +1513,14 @@ html {
resize: both; resize: both;
} }
.list-inside{
list-style-position: inside;
}
.list-disc{
list-style-type: disc;
}
.appearance-none{ .appearance-none{
-webkit-appearance: none; -webkit-appearance: none;
-moz-appearance: none; -moz-appearance: none;
@ -1582,6 +1647,18 @@ html {
margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse))); margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
} }
.space-y-0 > :not([hidden]) ~ :not([hidden]){
--tw-space-y-reverse: 0;
margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
margin-bottom: calc(0px * var(--tw-space-y-reverse));
}
.space-y-0\.5 > :not([hidden]) ~ :not([hidden]){
--tw-space-y-reverse: 0;
margin-top: calc(0.125rem * calc(1 - var(--tw-space-y-reverse)));
margin-bottom: calc(0.125rem * var(--tw-space-y-reverse));
}
.space-y-1 > :not([hidden]) ~ :not([hidden]){ .space-y-1 > :not([hidden]) ~ :not([hidden]){
--tw-space-y-reverse: 0; --tw-space-y-reverse: 0;
margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse))); margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));
@ -1657,6 +1734,10 @@ html {
white-space: nowrap; white-space: nowrap;
} }
.whitespace-pre-wrap{
white-space: pre-wrap;
}
.break-all{ .break-all{
word-break: break-all; word-break: break-all;
} }
@ -1713,6 +1794,14 @@ html {
border-bottom-right-radius: 0.375rem; border-bottom-right-radius: 0.375rem;
} }
.rounded-tl-sm{
border-top-left-radius: 0.125rem;
}
.rounded-tr-sm{
border-top-right-radius: 0.125rem;
}
.border{ .border{
border-width: 1px; border-width: 1px;
} }
@ -1833,6 +1922,11 @@ html {
background-color: rgb(239 246 255 / var(--tw-bg-opacity)); background-color: rgb(239 246 255 / var(--tw-bg-opacity));
} }
.bg-blue-500{
--tw-bg-opacity: 1;
background-color: rgb(59 130 246 / var(--tw-bg-opacity));
}
.bg-blue-600{ .bg-blue-600{
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(37 99 235 / var(--tw-bg-opacity)); background-color: rgb(37 99 235 / var(--tw-bg-opacity));
@ -1853,6 +1947,11 @@ html {
background-color: rgb(229 231 235 / var(--tw-bg-opacity)); background-color: rgb(229 231 235 / var(--tw-bg-opacity));
} }
.bg-gray-400{
--tw-bg-opacity: 1;
background-color: rgb(156 163 175 / var(--tw-bg-opacity));
}
.bg-gray-50{ .bg-gray-50{
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(249 250 251 / var(--tw-bg-opacity)); background-color: rgb(249 250 251 / var(--tw-bg-opacity));
@ -2094,6 +2193,10 @@ html {
padding-bottom: 0.25rem; padding-bottom: 0.25rem;
} }
.pb-2{
padding-bottom: 0.5rem;
}
.pl-8{ .pl-8{
padding-left: 2rem; padding-left: 2rem;
} }
@ -2143,6 +2246,11 @@ html {
line-height: 2rem; line-height: 2rem;
} }
.text-base{
font-size: 1rem;
line-height: 1.5rem;
}
.text-lg{ .text-lg{
font-size: 1.125rem; font-size: 1.125rem;
line-height: 1.75rem; line-height: 1.75rem;
@ -2171,6 +2279,10 @@ html {
font-weight: 500; font-weight: 500;
} }
.font-normal{
font-weight: 400;
}
.font-semibold{ .font-semibold{
font-weight: 600; font-weight: 600;
} }
@ -2296,6 +2408,11 @@ html {
color: rgb(220 38 38 / var(--tw-text-opacity)); color: rgb(220 38 38 / var(--tw-text-opacity));
} }
.text-red-700{
--tw-text-opacity: 1;
color: rgb(185 28 28 / var(--tw-text-opacity));
}
.text-red-800{ .text-red-800{
--tw-text-opacity: 1; --tw-text-opacity: 1;
color: rgb(153 27 27 / var(--tw-text-opacity)); color: rgb(153 27 27 / var(--tw-text-opacity));
@ -2791,6 +2908,11 @@ html {
border-color: rgb(234 100 27 / var(--tw-border-opacity)); border-color: rgb(234 100 27 / var(--tw-border-opacity));
} }
.hover\:bg-blue-600:hover{
--tw-bg-opacity: 1;
background-color: rgb(37 99 235 / var(--tw-bg-opacity));
}
.hover\:bg-blue-700:hover{ .hover\:bg-blue-700:hover{
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(29 78 216 / var(--tw-bg-opacity)); background-color: rgb(29 78 216 / var(--tw-bg-opacity));
@ -2869,6 +2991,11 @@ html {
background-color: rgb(255 255 255 / var(--tw-bg-opacity)); background-color: rgb(255 255 255 / var(--tw-bg-opacity));
} }
.hover\:bg-yellow-600:hover{
--tw-bg-opacity: 1;
background-color: rgb(202 138 4 / var(--tw-bg-opacity));
}
.hover\:text-blue-600:hover{ .hover\:text-blue-600:hover{
--tw-text-opacity: 1; --tw-text-opacity: 1;
color: rgb(37 99 235 / var(--tw-text-opacity)); color: rgb(37 99 235 / var(--tw-text-opacity));
@ -2992,6 +3119,10 @@ html {
border-color: rgb(239 68 68 / var(--tw-border-opacity)); border-color: rgb(239 68 68 / var(--tw-border-opacity));
} }
.focus\:border-transparent:focus{
border-color: transparent;
}
.focus\:bg-psc-500:focus{ .focus\:bg-psc-500:focus{
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(234 100 27 / var(--tw-bg-opacity)); background-color: rgb(234 100 27 / var(--tw-bg-opacity));
@ -3092,6 +3223,10 @@ html {
background-color: rgb(243 244 246 / var(--tw-bg-opacity)); background-color: rgb(243 244 246 / var(--tw-bg-opacity));
} }
.disabled\:opacity-50:disabled{
opacity: 0.5;
}
.disabled\:opacity-70:disabled{ .disabled\:opacity-70:disabled{
opacity: 0.7; opacity: 0.7;
} }
@ -3300,6 +3435,11 @@ html {
color: rgb(243 244 246 / var(--tw-text-opacity)); color: rgb(243 244 246 / var(--tw-text-opacity));
} }
:is(.dark .dark\:text-gray-200){
--tw-text-opacity: 1;
color: rgb(229 231 235 / var(--tw-text-opacity));
}
:is(.dark .dark\:text-gray-300){ :is(.dark .dark\:text-gray-300){
--tw-text-opacity: 1; --tw-text-opacity: 1;
color: rgb(209 213 219 / var(--tw-text-opacity)); color: rgb(209 213 219 / var(--tw-text-opacity));
@ -3669,6 +3809,10 @@ html {
grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-columns: repeat(2, minmax(0, 1fr));
} }
.lg\:grid-cols-3{
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.lg\:gap-8{ .lg\:gap-8{
gap: 2rem; gap: 2rem;
} }