From d7748173a0e01456471696823e2ef7c5e673a9f8 Mon Sep 17 00:00:00 2001 From: Thomas Peterson Date: Thu, 26 Feb 2026 18:06:56 +0100 Subject: [PATCH] Upload --- src/new/assets/tailwind/js/order.js | 10 +- src/new/config/reference.php | 4 +- .../Shop/OrderBundle/Model/Order/Position.php | 34 +++-- .../Model/Order/Position/Upload/Center.php | 24 +++ .../Position/Upload/IUploadTypeObject.php | 12 ++ .../Model/Order/Position/Upload/Mail.php | 24 +++ .../views/backend/list/index.html.twig | 2 +- .../Transformer/Order/Position.php | 19 ++- .../ApiBundle/System/VersionTest.php | 2 +- .../PSC/Shop/Order/Upload/CreateMailTest.php | 141 ++++++++++++++++++ src/new/var/tailwind/backend.built.css | 24 +++ .../basket/299/1/AF-25.02.2026-90_1.pdf | Bin 0 -> 33217 bytes 12 files changed, 275 insertions(+), 21 deletions(-) create mode 100644 src/new/src/PSC/Shop/OrderBundle/Model/Order/Position/Upload/Center.php create mode 100644 src/new/src/PSC/Shop/OrderBundle/Model/Order/Position/Upload/IUploadTypeObject.php create mode 100644 src/new/src/PSC/Shop/OrderBundle/Model/Order/Position/Upload/Mail.php create mode 100644 src/new/tests/PSC/Shop/Order/Upload/CreateMailTest.php create mode 100644 src/old/market/steplayouter/basket/299/1/AF-25.02.2026-90_1.pdf diff --git a/src/new/assets/tailwind/js/order.js b/src/new/assets/tailwind/js/order.js index 8dfcc1a39..2b66111a9 100644 --- a/src/new/assets/tailwind/js/order.js +++ b/src/new/assets/tailwind/js/order.js @@ -1,6 +1,13 @@ const Order_List_Detail = ({ uuid, basketField1, customerInfo, basketField2, pos, price, product, status, allNet, reOrder, reOrderOrder, reOrderPos }, orderUuid) => `
-
+
+
+ + + + Vorschau +
+
Pos:
${pos}
@@ -44,6 +51,7 @@ const Order_List_Detail = ({ uuid, basketField1, customerInfo, basketField2, pos
+
`; diff --git a/src/new/config/reference.php b/src/new/config/reference.php index 577739b43..1875f986e 100644 --- a/src/new/config/reference.php +++ b/src/new/config/reference.php @@ -474,7 +474,7 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator; * datetime?: array{ * default_format?: scalar|null, // Default: "Y-m-d\\TH:i:sP" * default_deserialization_formats?: list, - * default_timezone?: scalar|null, // Default: "Europe/Berlin" + * default_timezone?: scalar|null, // Default: "UTC" * cdata?: scalar|null, // Default: true * }, * array_collection?: array{ @@ -574,7 +574,7 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator; * datetime?: array{ * default_format?: scalar|null, // Default: "Y-m-d\\TH:i:sP" * default_deserialization_formats?: list, - * default_timezone?: scalar|null, // Default: "Europe/Berlin" + * default_timezone?: scalar|null, // Default: "UTC" * cdata?: scalar|null, // Default: true * }, * array_collection?: array{ diff --git a/src/new/src/PSC/Shop/OrderBundle/Model/Order/Position.php b/src/new/src/PSC/Shop/OrderBundle/Model/Order/Position.php index 7f05d670f..bc58dabaf 100755 --- a/src/new/src/PSC/Shop/OrderBundle/Model/Order/Position.php +++ b/src/new/src/PSC/Shop/OrderBundle/Model/Order/Position.php @@ -13,14 +13,15 @@ namespace PSC\Shop\OrderBundle\Model\Order; +use Nelmio\ApiDocBundle\Annotation\Model; +use OpenApi\Attributes as OA; use PSC\Shop\OrderBundle\Model\Order\Position\AdditionalInfo; use PSC\Shop\OrderBundle\Model\Order\Position\Price; use PSC\Shop\OrderBundle\Model\Order\Position\Tracking; use PSC\Shop\OrderBundle\Model\Order\Position\Upload; +use PSC\Shop\OrderBundle\Model\Order\Position\Upload\IUploadTypeObject; use PSC\Shop\ProductBundle\Model\Product; use Ramsey\Uuid\Uuid; -use Nelmio\ApiDocBundle\Annotation\Model; -use OpenApi\Attributes as OA; class Position { @@ -31,10 +32,10 @@ class Position private string $uuid; #[OA\Property(type: 'string')] - private string $customerInfo = ""; + private string $customerInfo = ''; #[OA\Property(type: 'string')] - private string $uploadMode = ""; + private string $uploadMode = ''; #[OA\Property(type: 'integer')] private int $layouterMode = 0; @@ -55,10 +56,10 @@ class Position private bool $reOrder = false; #[OA\Property(type: 'string')] - private string $reOrderOrder = ""; + private string $reOrderOrder = ''; #[OA\Property(type: 'string')] - private string $reOrderPos = ""; + private string $reOrderPos = ''; #[OA\Property(type: 'boolean')] private bool $downloadAllowed = false; @@ -81,6 +82,9 @@ class Position #[OA\Property(type: 'array', items: new OA\Items(ref: new Model(type: Upload::class)))] private array $uploads = []; + #[OA\Property(ref: new Model(type: IUploadTypeObject::class))] + private ?IUploadTypeObject $uploadTypeObject = null; + private $data; #[OA\Property(type: 'string')] @@ -93,9 +97,9 @@ class Position { $this->uuid = Uuid::uuid4()->toString(); $this->status = 30; - $this->externalOrderNumber = ""; - $this->basketField1 = ""; - $this->basketField2 = ""; + $this->externalOrderNumber = ''; + $this->basketField1 = ''; + $this->basketField2 = ''; $this->price = new Price(); } @@ -220,7 +224,7 @@ class Position public function getCustomerInfo(): string { - return (string)$this->customerInfo; + return (string) $this->customerInfo; } public function setCustomerInfo(string $var): void @@ -342,4 +346,14 @@ class Position { $this->trackings[] = $tracking; } + + public function getUploadTypeObject(): ?IUploadTypeObject + { + return $this->uploadTypeObject; + } + + public function setUploadTypeObject(IUploadTypeObject $uploadTypeObject): void + { + $this->uploadTypeObject = $uploadTypeObject; + } } diff --git a/src/new/src/PSC/Shop/OrderBundle/Model/Order/Position/Upload/Center.php b/src/new/src/PSC/Shop/OrderBundle/Model/Order/Position/Upload/Center.php new file mode 100644 index 000000000..d4d58cfb2 --- /dev/null +++ b/src/new/src/PSC/Shop/OrderBundle/Model/Order/Position/Upload/Center.php @@ -0,0 +1,24 @@ + - + {% endfor %} diff --git a/src/new/src/PSC/Shop/OrderBundle/Transformer/Order/Position.php b/src/new/src/PSC/Shop/OrderBundle/Transformer/Order/Position.php index 10aa655fa..fe7c06ad0 100755 --- a/src/new/src/PSC/Shop/OrderBundle/Transformer/Order/Position.php +++ b/src/new/src/PSC/Shop/OrderBundle/Transformer/Order/Position.php @@ -12,6 +12,7 @@ use PSC\Shop\OrderBundle\Transformer\Base; use PSC\Shop\OrderBundle\Transformer\Order\Position\Product as PSCProduct; use PSC\System\PluginBundle\Service\ProductType; use PSC\System\SettingsBundle\Service\Shop; +use Symfony\Component\DependencyInjection\Attribute\AutowireIterator; use Symfony\Component\HttpFoundation\Session\SessionInterface; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; @@ -25,16 +26,19 @@ class Position extends Base protected \PSC\Shop\ProductBundle\Service\Product $productService; private \PSC\Shop\ProductBundle\Hydrate\Product $productHydrate; private ProductType $productTypeRegistry; + private iterable $uploadObjectTypes; #[\Symfony\Contracts\Service\Attribute\Required] public function setProductService( \PSC\Shop\ProductBundle\Service\Product $productService, ProductType $productTypeRegistry, \PSC\Shop\ProductBundle\Hydrate\Product $productHydrate, + #[AutowireIterator('order.position.uploadObjectType')] iterable $uploadObjectTypes, ) { $this->productService = $productService; $this->productTypeRegistry = $productTypeRegistry; $this->productHydrate = $productHydrate; + $this->uploadObjectTypes = $uploadObjectTypes; } public function toDb( @@ -95,9 +99,7 @@ class Position extends Base /** * Plugin Special Savings */ - if ( - $this->productTypeRegistry->getProductType($position->getProduct()->getSpecialProductTypeObject()->getTyp()) - ) { + if ($this->productTypeRegistry->getProductType($position->getProduct()->getSpecialProductTypeObject()->getTyp())) { $specialProductTransformer = $this->productTypeRegistry ->getProductType($position->getProduct()->getSpecialProductTypeObject()->getTyp()) ->getPositionProductTransformer(); @@ -117,9 +119,9 @@ class Position extends Base if ($pos->getProduct()) { $position->setProduct($this->productHydrate->hydrateToModel($pos->getProduct())); $tax = new Tax(); - $tax->setName(((int) $pos->getProduct()->getMwert()) * 100); - $tax->setBasisAmount(((int) $pos->getPriceAllNetto()) * 100); - $tax->setCalculatedAmount(((int) $pos->getPriceAllSteuer()) * 100); + $tax->setName((int) $pos->getProduct()->getMwert() * 100); + $tax->setBasisAmount((int) $pos->getPriceAllNetto() * 100); + $tax->setCalculatedAmount((int) $pos->getPriceAllSteuer() * 100); $position->getPrice()->setTax($tax); } else { $tax = new Tax(); @@ -183,6 +185,11 @@ class Position extends Base $position->setAdditionalInfos($positionDoc->getAdditionalInfos()); } $position->setCustomerInfo((string) $positionDoc->getCustomerInfo()); + var_dump(count($this->uploadObjectTypes)); + var_dump($positionDoc->getUploadMode()); + + if ($positionDoc->getUploadMode() != '') { + } if ($pos->getProduct()) { if ($this->productTypeRegistry->getProductType($pos->getProduct()->getType())) { diff --git a/src/new/tests/PSC/Component/ApiBundle/System/VersionTest.php b/src/new/tests/PSC/Component/ApiBundle/System/VersionTest.php index d0311e460..fecb6ebc8 100755 --- a/src/new/tests/PSC/Component/ApiBundle/System/VersionTest.php +++ b/src/new/tests/PSC/Component/ApiBundle/System/VersionTest.php @@ -14,6 +14,6 @@ class VersionTest extends WebTestCase $this->assertResponseIsSuccessful(); $data = json_decode($client->getResponse()->getContent(), true); - $this->assertSame('2.3.2', $data['release']); + $this->assertSame('2.3.3', $data['release']); } } diff --git a/src/new/tests/PSC/Shop/Order/Upload/CreateMailTest.php b/src/new/tests/PSC/Shop/Order/Upload/CreateMailTest.php new file mode 100644 index 000000000..3e32cbc52 --- /dev/null +++ b/src/new/tests/PSC/Shop/Order/Upload/CreateMailTest.php @@ -0,0 +1,141 @@ +get(ShopRepository::class); + + /** + * @var Shop $shop + */ + $shop = $shopRepository->findOneBy(['title' => 'Printchampion']); + + $shippingRepository = static::getContainer()->get(ShippingRepository::class); + + $paymentRepository = static::getContainer()->get(PaymentRepository::class); + + $client->jsonRequest( + 'POST', + '/api/order/create', + [ + 'shop' => [ + 'uuid' => (string) $shop->getUuid(), + ], + 'type' => 2, + 'shipping' => [ + 'uid' => $shippingRepository->findOneBy(['title' => 'Deutschlandweit'])->getUid(), + ], + 'payment' => [ + 'uid' => $paymentRepository->findOneBy(['title' => 'per Rechnung'])->getUid(), + ], + 'draft' => false, + 'deliveryAddress' => [ + 'firstname' => 'Thomas', + 'lastname' => 'Peterson', + 'street' => 'Chausseestr.', + 'houseNumber' => '24', + 'zip' => '17506', + 'city' => 'Gribow', + ], + 'invoiceAddress' => [ + 'firstname' => 'Thomas', + 'lastname' => 'Peterson', + 'street' => 'Chausseestr.', + 'houseNumber' => '24', + 'zip' => '17400', + 'city' => 'Berlin', + ], + 'positions' => [ + [ + 'count' => 1, + 'product' => [ + 'title' => 'test XML', + 'specialProductTypeObject' => [ + 'typ' => 6, + 'taxClass' => 1900, + 'xml' => ' + + + Blocks A5 25blatt geleimt + kein + + + + + ', + ], + ], + 'uploadMode' => 'mail', + ], + [ + 'count' => 1, + 'product' => [ + 'title' => 'test Manual Position', + 'specialProductTypeObject' => [ + 'typ' => 1, + 'cent' => true, + 'net' => 145, + 'taxClass' => 1900, + ], + ], + ], + ], + ], + ['HTTP_apiKey' => $shop->getApiKey()], + ); + + self::assertSame(200, $client->getResponse()->getStatusCode()); + + $data = json_decode($client->getResponse()->getContent(), true); + + $client->jsonRequest( + 'POST', + '/api/order/getonebyuuid', + [ + 'uuid' => $data['uuid'], + ], + ['HTTP_apiKey' => $shop->getApiKey()], + ); + + $data = json_decode($client->getResponse()->getContent(), true); + var_dump($data['positions'][0]['uploadTypeObject']); + self::assertSame(7647, $data['gross']); + self::assertSame('SAN-' . date('Ym') . '-1', $data['alias']); + + self::assertSame('Berlin', $data['invoiceAddress']['city']); + + self::assertSame('Gribow', $data['deliveryAddress']['city']); + + self::assertSame('ShopMusterOrt', $data['senderAddress']['city']); + self::assertSame('ShopMusterIban', $data['senderAddress']['iban']); + + self::assertSame(200, $client->getResponse()->getStatusCode()); + + /** + * @var JobRepository $jobs + */ + $jobs = static::getContainer()->get(JobRepository::class); + + self::assertCount(0, $jobs->findBy(['data.order' => $data['uuid']])); + } +} diff --git a/src/new/var/tailwind/backend.built.css b/src/new/var/tailwind/backend.built.css index e6605ca10..88c0f1f08 100644 --- a/src/new/var/tailwind/backend.built.css +++ b/src/new/var/tailwind/backend.built.css @@ -1173,6 +1173,10 @@ html { height: 0.5rem; } +.h-28{ + height: 7rem; +} + .h-3{ height: 0.75rem; } @@ -1193,6 +1197,10 @@ html { height: 1.5rem; } +.h-7{ + height: 1.75rem; +} + .h-8{ height: 2rem; } @@ -1241,6 +1249,10 @@ html { width: 6rem; } +.w-28{ + width: 7rem; +} + .w-3{ width: 0.75rem; } @@ -1277,6 +1289,10 @@ html { width: 16rem; } +.w-7{ + width: 1.75rem; +} + .w-\[var\(--sidebar-width\)\]{ width: var(--sidebar-width); } @@ -1705,6 +1721,10 @@ html { border-width: 0px; } +.border-2{ + border-width: 2px; +} + .border-x-0{ border-left-width: 0px; border-right-width: 0px; @@ -1734,6 +1754,10 @@ html { border-top-width: 1px; } +.border-dashed{ + border-style: dashed; +} + .border-blue-200{ --tw-border-opacity: 1; border-color: rgb(191 219 254 / var(--tw-border-opacity)); diff --git a/src/old/market/steplayouter/basket/299/1/AF-25.02.2026-90_1.pdf b/src/old/market/steplayouter/basket/299/1/AF-25.02.2026-90_1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e6a6ea92c53d2db370736c40fb2aa24250fa33cd GIT binary patch literal 33217 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 z