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 000000000..e6a6ea92c Binary files /dev/null and b/src/old/market/steplayouter/basket/299/1/AF-25.02.2026-90_1.pdf differ