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:
- network
restart: always
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1 # alternatively, use `count: all` for all GPUs
capabilities: [gpu]
# deploy:
# resources:
# reservations:
# devices:
# - driver: nvidia
# count: 1 # alternatively, use `count: all` for all GPUs
# capabilities: [gpu]
webhook:
image: tarampampam/webhook-tester:2
restart: always

View File

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

View File

@ -8,6 +8,7 @@ use OpenApi\Attributes\Schema;
#[Schema(properties: [
new Property(property: 'code', type: 'string'),
new Property(property: 'name', type: 'string'),
new Property(property: 'preview', type: 'boolean'),
])]
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\Entity\Orderpos;
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;
class Center implements IUploadModeTransformer
{
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);
self::assertCount(2, $data['positions'][0]['uploads']);
self::assertSame('umschlag.pdf', $data['positions'][0]['uploadTypeObject']['files'][0]['fileName']);
self::assertSame('umschlag', $data['positions'][0]['uploadTypeObject']['files'][0]['typ']);
self::assertSame('inhalt.pdf', $data['positions'][0]['uploadTypeObject']['files'][1]['fileName']);
self::assertSame('inhalt', $data['positions'][0]['uploadTypeObject']['files'][1]['typ']);
var_dump($data['positions'][0]['uploadTypeObject']['uploads']);
self::assertSame('umschlag.pdf', $data['positions'][0]['uploadTypeObject']['uploads'][0]['fileName']);
self::assertSame('umschlag', $data['positions'][0]['uploadTypeObject']['uploads'][0]['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 */
$jobs = static::getContainer()->get(JobRepository::class);

View File

@ -1,5 +1,5 @@
{% 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 %}
<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>

View File

@ -922,6 +922,10 @@ html {
grid-column: span 2 / span 2;
}
.col-span-3{
grid-column: span 3 / span 3;
}
.col-span-4{
grid-column: span 4 / span 4;
}
@ -959,6 +963,11 @@ html {
margin-right: -0.75rem;
}
.mx-4{
margin-left: 1rem;
margin-right: 1rem;
}
.mx-auto{
margin-left: auto;
margin-right: auto;
@ -989,6 +998,10 @@ html {
margin-bottom: 1rem;
}
.mb-5{
margin-bottom: 1.25rem;
}
.mb-6{
margin-bottom: 1.5rem;
}
@ -1008,6 +1021,10 @@ html {
margin-inline-end: auto;
}
.ml-1{
margin-left: 0.25rem;
}
.ml-2{
margin-left: 0.5rem;
}
@ -1077,6 +1094,10 @@ html {
margin-top: 1.5rem;
}
.mt-8{
margin-top: 2rem;
}
.block{
display: block;
}
@ -1161,6 +1182,10 @@ html {
height: 0.25rem;
}
.h-1\.5{
height: 0.375rem;
}
.h-10{
height: 2.5rem;
}
@ -1205,6 +1230,10 @@ html {
height: 2rem;
}
.h-80{
height: 20rem;
}
.h-\[4rem\]{
height: 4rem;
}
@ -1229,6 +1258,10 @@ html {
width: 0.25rem;
}
.w-1\.5{
width: 0.375rem;
}
.w-1\/2{
width: 50%;
}
@ -1245,6 +1278,10 @@ html {
width: 4rem;
}
.w-2\/5{
width: 40%;
}
.w-24{
width: 6rem;
}
@ -1342,6 +1379,10 @@ html {
max-width: 20em;
}
.max-w-\[75\%\]{
max-width: 75%;
}
.max-w-md{
max-width: 28rem;
}
@ -1440,6 +1481,22 @@ html {
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;
}
@ -1456,6 +1513,14 @@ html {
resize: both;
}
.list-inside{
list-style-position: inside;
}
.list-disc{
list-style-type: disc;
}
.appearance-none{
-webkit-appearance: none;
-moz-appearance: none;
@ -1582,6 +1647,18 @@ html {
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]){
--tw-space-y-reverse: 0;
margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));
@ -1657,6 +1734,10 @@ html {
white-space: nowrap;
}
.whitespace-pre-wrap{
white-space: pre-wrap;
}
.break-all{
word-break: break-all;
}
@ -1713,6 +1794,14 @@ html {
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-width: 1px;
}
@ -1833,6 +1922,11 @@ html {
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{
--tw-bg-opacity: 1;
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));
}
.bg-gray-400{
--tw-bg-opacity: 1;
background-color: rgb(156 163 175 / var(--tw-bg-opacity));
}
.bg-gray-50{
--tw-bg-opacity: 1;
background-color: rgb(249 250 251 / var(--tw-bg-opacity));
@ -2094,6 +2193,10 @@ html {
padding-bottom: 0.25rem;
}
.pb-2{
padding-bottom: 0.5rem;
}
.pl-8{
padding-left: 2rem;
}
@ -2143,6 +2246,11 @@ html {
line-height: 2rem;
}
.text-base{
font-size: 1rem;
line-height: 1.5rem;
}
.text-lg{
font-size: 1.125rem;
line-height: 1.75rem;
@ -2171,6 +2279,10 @@ html {
font-weight: 500;
}
.font-normal{
font-weight: 400;
}
.font-semibold{
font-weight: 600;
}
@ -2296,6 +2408,11 @@ html {
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{
--tw-text-opacity: 1;
color: rgb(153 27 27 / var(--tw-text-opacity));
@ -2791,6 +2908,11 @@ html {
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{
--tw-bg-opacity: 1;
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));
}
.hover\:bg-yellow-600:hover{
--tw-bg-opacity: 1;
background-color: rgb(202 138 4 / var(--tw-bg-opacity));
}
.hover\:text-blue-600:hover{
--tw-text-opacity: 1;
color: rgb(37 99 235 / var(--tw-text-opacity));
@ -2992,6 +3119,10 @@ html {
border-color: rgb(239 68 68 / var(--tw-border-opacity));
}
.focus\:border-transparent:focus{
border-color: transparent;
}
.focus\:bg-psc-500:focus{
--tw-bg-opacity: 1;
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));
}
.disabled\:opacity-50:disabled{
opacity: 0.5;
}
.disabled\:opacity-70:disabled{
opacity: 0.7;
}
@ -3300,6 +3435,11 @@ html {
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){
--tw-text-opacity: 1;
color: rgb(209 213 219 / var(--tw-text-opacity));
@ -3669,6 +3809,10 @@ html {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.lg\:grid-cols-3{
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.lg\:gap-8{
gap: 2rem;
}