diff --git a/src/new/src/PSC/Shop/EntityBundle/Entity/Orderpos.php b/src/new/src/PSC/Shop/EntityBundle/Entity/Orderpos.php index fc12a2763..3a1102a2f 100755 --- a/src/new/src/PSC/Shop/EntityBundle/Entity/Orderpos.php +++ b/src/new/src/PSC/Shop/EntityBundle/Entity/Orderpos.php @@ -114,6 +114,12 @@ class Orderpos private $uploadFinish; #[ORM\OneToMany(targetEntity: 'Upload', mappedBy: 'orderPos')] protected $uploads; + + /** + * null = ausstehend, 1 = freigegeben, -1 = abgelehnt + */ + #[ORM\Column(name: 'external_approval_status', type: 'integer', nullable: true)] + private ?int $externalApprovalStatus = null; /** * @var Product */ @@ -1030,4 +1036,14 @@ class Orderpos { $this->uploads = $uploads; } + + public function getExternalApprovalStatus(): ?int + { + return $this->externalApprovalStatus; + } + + public function setExternalApprovalStatus(?int $status): void + { + $this->externalApprovalStatus = $status; + } } diff --git a/src/new/src/PSC/Shop/EntityBundle/Entity/Product.php b/src/new/src/PSC/Shop/EntityBundle/Entity/Product.php index d02481413..716993411 100755 --- a/src/new/src/PSC/Shop/EntityBundle/Entity/Product.php +++ b/src/new/src/PSC/Shop/EntityBundle/Entity/Product.php @@ -666,6 +666,14 @@ class Product #[ORM\Column(name: 'confirmOne', type: 'boolean')] protected $confirmOne; + /** + * Externe Freigabe erforderlich + * + * @var boolean + */ + #[ORM\Column(name: 'confirmExternal', type: 'boolean', options: ['default' => false])] + protected $confirmExternal = false; + /** * Lager aktiviert Produkt * @@ -2650,6 +2658,16 @@ class Product $this->confirm = $confirm; } + public function isConfirmExternal(): bool + { + return (bool) $this->confirmExternal; + } + + public function setConfirmExternal(bool $confirmExternal): void + { + $this->confirmExternal = $confirmExternal; + } + /** * @return int */ diff --git a/src/new/src/PSC/Shop/OrderBundle/Controller/ExternalApprovalController.php b/src/new/src/PSC/Shop/OrderBundle/Controller/ExternalApprovalController.php new file mode 100644 index 000000000..bb3c01f0d --- /dev/null +++ b/src/new/src/PSC/Shop/OrderBundle/Controller/ExternalApprovalController.php @@ -0,0 +1,75 @@ +getRepository(Orderpos::class)->findOneBy(['uuid' => $uuid]); + + if (!$orderpos) { + throw $this->createNotFoundException('Position nicht gefunden.'); + } + + if ($request->isMethod('POST')) { + $action = $request->request->get('action'); + + if ($action === 'approve') { + $orderpos->setExternalApprovalStatus(1); + } elseif ($action === 'reject') { + $orderpos->setExternalApprovalStatus(-1); + } + + $em->flush(); + + return $this->redirectToRoute('psc_shop_order_external_approval_show', ['uuid' => $uuid]); + } + + return $this->render('@PSCShopOrder/external_approval/show.html.twig', [ + 'orderpos' => $orderpos, + ]); + } + + #[Route(path: '/{uuid}/download/{uploadUuid}', name: 'psc_shop_order_external_approval_download', methods: ['GET'])] + public function download(string $uuid, string $uploadUuid, EntityManagerInterface $em): Response + { + /** @var Orderpos|null $orderpos */ + $orderpos = $em->getRepository(Orderpos::class)->findOneBy(['uuid' => $uuid]); + + if (!$orderpos) { + throw $this->createNotFoundException(); + } + + /** @var Upload|null $upload */ + $upload = $em->getRepository(Upload::class)->findOneBy(['uuid' => $uploadUuid]); + + if (!$upload || $upload->getOrderPos()->getUuid() !== $uuid) { + throw $this->createNotFoundException(); + } + + $absolutePath = $this->getParameter('kernel.project_dir') . '/../old/public/' . $upload->getPath(); + + if (!file_exists($absolutePath)) { + throw $this->createNotFoundException('Datei nicht gefunden.'); + } + + $response = new BinaryFileResponse($absolutePath); + $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $upload->getName()); + + return $response; + } +} diff --git a/src/new/src/PSC/Shop/OrderBundle/Resources/config/routing.yml b/src/new/src/PSC/Shop/OrderBundle/Resources/config/routing.yml index 7ca449f31..2ac5aa327 100755 --- a/src/new/src/PSC/Shop/OrderBundle/Resources/config/routing.yml +++ b/src/new/src/PSC/Shop/OrderBundle/Resources/config/routing.yml @@ -3,8 +3,14 @@ psc_shop_order_backend: type: attribute prefix: /backend/order +psc_shop_order: + resource: "@PSCShopOrderBundle/Controller" + type: attribute + prefix: /order + + psc_shop_order_api: resource: "@PSCShopOrderBundle/Api" prefix: /api - type: attribute \ No newline at end of file + type: attribute diff --git a/src/new/src/PSC/Shop/OrderBundle/Resources/views/external_approval/show.html.twig b/src/new/src/PSC/Shop/OrderBundle/Resources/views/external_approval/show.html.twig new file mode 100644 index 000000000..788fe3785 --- /dev/null +++ b/src/new/src/PSC/Shop/OrderBundle/Resources/views/external_approval/show.html.twig @@ -0,0 +1,161 @@ + + + + + + Freigabe — Position {{ orderpos.uuid }} + + + +
+ + {# Header #} +
+ + + +

Externe Freigabe

+

Bestellposition #{{ orderpos.uuid }}

+
+ + {# Statusanzeige #} +
+ {% if orderpos.externalApprovalStatus == 1 %} +
+ + + +
+

Freigegeben

+

Diese Position wurde freigegeben.

+
+
+ {% elseif orderpos.externalApprovalStatus == -1 %} +
+ + + +
+

Abgelehnt

+

Diese Position wurde abgelehnt.

+
+
+ {% else %} +
+ + + +
+

Ausstehend

+

Diese Position wartet auf Ihre Freigabe.

+
+
+ {% endif %} +
+ + {# Positionsdetails #} +
+
+

Positionsdetails

+
+
+
+ Produkt + {{ orderpos.product.title }} +
+
+ Menge + {{ orderpos.count }} +
+
+ Preis (netto) + {{ orderpos.priceAllNetto|number_format(2, ',', '.') }} € +
+ {% if orderpos.order %} +
+ Auftragsnummer + {{ orderpos.order.alias }} +
+ {% endif %} +
+
+ + {# Uploads #} + {% if orderpos.uploads|length > 0 %} +
+
+

Druckdaten ({{ orderpos.uploads|length }})

+
+ +
+ {% endif %} + + {# Aktionen #} + {% if orderpos.externalApprovalStatus is null %} +
+

Ihre Entscheidung

+
+
+ + +
+
+ + +
+
+
+ {% endif %} + +
+ + diff --git a/src/new/src/PSC/Shop/ProductBundle/Form/Backend/Product/PermissionType.php b/src/new/src/PSC/Shop/ProductBundle/Form/Backend/Product/PermissionType.php index 58ec4dea0..8bb45ee78 100755 --- a/src/new/src/PSC/Shop/ProductBundle/Form/Backend/Product/PermissionType.php +++ b/src/new/src/PSC/Shop/ProductBundle/Form/Backend/Product/PermissionType.php @@ -79,6 +79,7 @@ class PermissionType extends AbstractType $builder ->add('confirm', CheckboxType::class, ['required' => false, 'label' => 'Requiresapproval']) ->add('confirmOne', CheckboxType::class, ['required' => false, 'label' => 'Onlycontact']) + ->add('confirmExternal', CheckboxType::class, ['required' => false, 'label' => 'Requiresexternalapproval']) ->add('confirmAccount', EntityType::class, [ 'class' => 'PSC\Shop\EntityBundle\Entity\Account', 'choice_label' => 'title', diff --git a/src/new/src/PSC/Shop/ProductBundle/Resources/translations/core_product_permission.de.yaml b/src/new/src/PSC/Shop/ProductBundle/Resources/translations/core_product_permission.de.yaml index ce3ca5c14..c63705482 100755 --- a/src/new/src/PSC/Shop/ProductBundle/Resources/translations/core_product_permission.de.yaml +++ b/src/new/src/PSC/Shop/ProductBundle/Resources/translations/core_product_permission.de.yaml @@ -1,9 +1,10 @@ Company: Firma save: Speichern -Persons: Person/en -Onlycontact: Nur ein Kontakt muss freigeben -nothingselected: Nichts ausgewählt -Requiresapproval: Freigabebedürftig +Persons: Personen +Onlycontact: Ein Kontakt reicht zur Freigabe +nothingselected: Keine Auswahl +Requiresapproval: Freigabe erforderlich +Requiresexternalapproval: Freigabe extern erforderlich setting: Einstellungen Product: Produkt release: Freigabe diff --git a/src/new/src/PSC/Shop/ProductBundle/Resources/views/backend/product/permission/index.html.twig b/src/new/src/PSC/Shop/ProductBundle/Resources/views/backend/product/permission/index.html.twig index 444fb2b13..c5e2bf3de 100755 --- a/src/new/src/PSC/Shop/ProductBundle/Resources/views/backend/product/permission/index.html.twig +++ b/src/new/src/PSC/Shop/ProductBundle/Resources/views/backend/product/permission/index.html.twig @@ -1,67 +1,92 @@ -{% extends 'backend_base.html.twig' %} -{% import '@PSCBackendDashboard/tree/motivtheme.html.twig' as macros %} +{% extends 'backend_tailwind_base.html.twig' %} +{% form_theme form 'tailwind_formtheme.html.twig' %} {% trans_default_domain 'core_product_permission' %} -{% block body %} -
-
-
-

- - {{ 'Product'|trans }} > - {{ 'release'|trans }} - {{ 'show'|trans }} -

-
- -
+ +{% block header %} +
+

+ + + + {{ 'Product'|trans }} + / + {{ 'release'|trans }} + + {{ 'show'|trans }} + +

+ + + + + {{ 'back'|trans }} +
- -
-
-
-
-
-
{{ product.title }} - {{ 'setting'|trans }}
-
-
- {{ form_start(form, { 'attr': {'class': 'smart-form'}}) }} - {{ form_errors(form) }} - -
- -
- {{ form_widget(form.confirm) }} -
-
-
- -
- {{ form_widget(form.confirmOne) }} -
-
-
- -
- {{ form_widget(form.confirmAccount) }} -
-
-
- -
- {{ form_widget(form.confirm_contacts) }} -
-
- {{ form_end(form) }} -
-
-
-
-
- {% endblock %} +{% block body %} +
+
+

{{ product.title }} — {{ 'setting'|trans }}

+
+
+ {{ form_start(form) }} + {{ form_errors(form) }} +
+
+ {{ form_widget(form.confirm, {attr: {class: 'mt-0.5 h-4 w-4 rounded border-gray-300 text-psc-600 focus:ring-psc-500'}}) }} +
+ {{ form_label(form.confirm, null, {label_attr: {class: 'block text-sm font-medium text-gray-700 cursor-pointer'}}) }} +

Bestellungen dieses Produkts müssen von einem Verantwortlichen freigegeben werden.

+ {{ form_errors(form.confirm) }} +
+
+
+ {{ form_widget(form.confirmOne, {attr: {class: 'mt-0.5 h-4 w-4 rounded border-gray-300 text-psc-600 focus:ring-psc-500'}}) }} +
+ {{ form_label(form.confirmOne, null, {label_attr: {class: 'block text-sm font-medium text-gray-700 cursor-pointer'}}) }} +

Die Freigabe gilt als erteilt, sobald eine der ausgewählten Personen zugestimmt hat.

+ {{ form_errors(form.confirmOne) }} +
+
+ +
+ {{ form_widget(form.confirmExternal, {attr: {class: 'mt-0.5 h-4 w-4 rounded border-gray-300 text-psc-600 focus:ring-psc-500'}}) }} +
+ {{ form_label(form.confirmExternal, null, {label_attr: {class: 'block text-sm font-medium text-gray-700 cursor-pointer'}}) }} +

Bestellungen dieses Produkts müssen von einer externen Person freigegeben werden.

+ {{ form_errors(form.confirmExternal) }} +
+
+ +
+ {{ form_label(form.confirmAccount, null, {label_attr: {class: 'block text-sm font-medium text-gray-700 mb-1'}}) }} + {{ form_widget(form.confirmAccount, {attr: {class: 'w-full px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-psc-500 focus:border-transparent bg-white'}}) }} + {{ form_errors(form.confirmAccount) }} +
+ +
+ {{ form_label(form.confirm_contacts, null, {label_attr: {class: 'block text-sm font-medium text-gray-700 mb-1'}}) }} + {{ form_widget(form.confirm_contacts, {attr: {class: 'w-full px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-psc-500 focus:border-transparent bg-white', size: '8'}}) }} + {{ form_errors(form.confirm_contacts) }} +

Strg (Windows) bzw. Cmd (Mac) gedrückt halten, um mehrere Personen auszuwählen.

+
+ +
+ {% do form.save.setRendered() %} + +
+ +
+ + {{ form_end(form) }} +
+
+{% endblock %} diff --git a/src/new/src/PSC/Shop/QueueBundle/Event/Position/ApprovalExternalAccept.php b/src/new/src/PSC/Shop/QueueBundle/Event/Position/ApprovalExternalAccept.php new file mode 100644 index 000000000..ba7146a9a --- /dev/null +++ b/src/new/src/PSC/Shop/QueueBundle/Event/Position/ApprovalExternalAccept.php @@ -0,0 +1,111 @@ + $this->position, + 'message' => $this->message, + 'order' => $this->order, + 'mail' => $this->mail, + ); + } + + public function setData($data) + { + $this->mail = $data['mail']; + $this->position = $data['position']; + $this->message = $data['message']; + $this->order = $data['order']; + } + + /** + * @return string + */ + public function getPosition(): string + { + return $this->position; + } + + /** + * @param string $position + */ + public function setPosition(string $position): void + { + $this->position = $position; + } + + /** + * @return string + */ + public function getOrder(): string + { + return $this->order; + } + + /** + * @param string $order + */ + public function setOrder(string $order): void + { + $this->order = $order; + } + + /** + * @return string + */ + public function getMail(): string + { + return $this->mail; + } + + /** + * @param string $contact + */ + public function setMail(string $mail): void + { + $this->mail = $mail; + } + + /** + * @return string + */ + public function getMessage(): string + { + return $this->message; + } + + /** + * @param string $message + */ + public function setMessage(string $message): void + { + $this->message = $message; + } +} diff --git a/src/new/src/PSC/Shop/QueueBundle/Event/Position/ApprovalExternalDeclined.php b/src/new/src/PSC/Shop/QueueBundle/Event/Position/ApprovalExternalDeclined.php new file mode 100644 index 000000000..d057c050b --- /dev/null +++ b/src/new/src/PSC/Shop/QueueBundle/Event/Position/ApprovalExternalDeclined.php @@ -0,0 +1,111 @@ + $this->position, + 'message' => $this->message, + 'order' => $this->order, + 'mail' => $this->mail, + ); + } + + public function setData($data) + { + $this->mail = $data['mail']; + $this->position = $data['position']; + $this->message = $data['message']; + $this->order = $data['order']; + } + + /** + * @return string + */ + public function getPosition(): string + { + return $this->position; + } + + /** + * @param string $position + */ + public function setPosition(string $position): void + { + $this->position = $position; + } + + /** + * @return string + */ + public function getOrder(): string + { + return $this->order; + } + + /** + * @param string $order + */ + public function setOrder(string $order): void + { + $this->order = $order; + } + + /** + * @return string + */ + public function getMail(): string + { + return $this->mail; + } + + /** + * @param string $contact + */ + public function setMail(string $mail): void + { + $this->mail = $mail; + } + + /** + * @return string + */ + public function getMessage(): string + { + return $this->message; + } + + /** + * @param string $message + */ + public function setMessage(string $message): void + { + $this->message = $message; + } +} diff --git a/src/new/src/PSC/Shop/QueueBundle/Event/Position/ApprovalExternalRequest.php b/src/new/src/PSC/Shop/QueueBundle/Event/Position/ApprovalExternalRequest.php new file mode 100644 index 000000000..a5f58d79f --- /dev/null +++ b/src/new/src/PSC/Shop/QueueBundle/Event/Position/ApprovalExternalRequest.php @@ -0,0 +1,71 @@ + $this->position, + 'order' => $this->order, + ); + } + + public function setData($data) + { + $this->position = $data['position']; + $this->order = $data['order']; + } + + /** + * @return string + */ + public function getPosition(): string + { + return $this->position; + } + + /** + * @param string $position + */ + public function setPosition(string $position): void + { + $this->position = $position; + } + + /** + * @return string + */ + public function getOrder(): string + { + return $this->order; + } + + /** + * @param string $order + */ + public function setOrder(string $order): void + { + $this->order = $order; + } +} diff --git a/src/new/src/PSC/Shop/QueueBundle/Type/Mail.php b/src/new/src/PSC/Shop/QueueBundle/Type/Mail.php index 2bba90262..6450462bf 100755 --- a/src/new/src/PSC/Shop/QueueBundle/Type/Mail.php +++ b/src/new/src/PSC/Shop/QueueBundle/Type/Mail.php @@ -25,6 +25,9 @@ use PSC\Shop\QueueBundle\Event\Contact\Password\Reset\Finish; use PSC\Shop\QueueBundle\Event\Contact\Password\Reset\Start; use PSC\Shop\QueueBundle\Event\EventInterface; use PSC\Shop\QueueBundle\Event\Order\Create; +use PSC\Shop\QueueBundle\Event\Position\ApprovalExternalAccept; +use PSC\Shop\QueueBundle\Event\Position\ApprovalExternalDeclined; +use PSC\Shop\QueueBundle\Event\Position\ApprovalExternalRequest; use PSC\Shop\QueueBundle\Event\Position\Contact\Approval\Accept; use PSC\Shop\QueueBundle\Event\Position\Contact\Approval\Declined; use PSC\Shop\QueueBundle\Event\Position\Contact\Approval\Request; @@ -1167,6 +1170,120 @@ class Mail implements QueueInterface, ConfigurableElementInterface return true; } + if ($event instanceof ApprovalExternalRequest) { + $templateVars->loadOrder($event->getOrder()); + $vars = $templateVars->getPosTwigVars($event->getPosition()); + try { + $message = new Email() + ->subject($subject->render($vars)) + ->from($from->render($vars)) + ->to(trim($to->render($vars))); + if ($text) { + $message->text($text->render($vars)); + } + + if ($bcc) { + $bccArray = explode(',', $bcc->render($vars)); + foreach ($bccArray as $bc) { + if (trim($bc) != '') { + $message->addBcc(trim($bc)); + } + } + } + + if ($html) { + $message->html($html->render($vars)); + } + + if ($mailDoc->isSendInvoice()) { + $content = $printing->generateOrder($templateVars->getOrder(), Printing::INVOICE); + if ($content) { + $message->attach($content, $printing->getFileName(), 'application/pdf'); + } + } + + if ($mailDoc->isSendDelivery()) { + $content = $printing->generateOrder($templateVars->getOrder(), Printing::DELIVERY); + if ($content) { + $message->attach($content, $printing->getFileName(), 'application/pdf'); + } + } + + if ($mailDoc->isSendJobticket()) { + $content = $printing->generateOrder($templateVars->getOrder(), Printing::JOBTICKET); + if ($content) { + $message->attach($content, $printing->getFileName(), 'application/pdf'); + } + } + + if ($mailDoc->isSendLabel()) { + $content = $printing->generateOrder($templateVars->getOrder(), Printing::LABEL); + if ($content) { + $message->attach($content, $printing->getFileName(), 'application/pdf'); + } + } + + if ($mailDoc->isSendOffer()) { + $content = $printing->generateOrder($templateVars->getOrder(), Printing::OFFER); + if ($content) { + $message->attach($content, $printing->getFileName(), 'application/pdf'); + } + } + + if ($mailDoc->isSendOrder()) { + $content = $printing->generateOrder($templateVars->getOrder(), Printing::ORDER); + if ($content) { + $message->attach($content, $printing->getFileName(), 'application/pdf'); + } + } + + if ($mailDoc->isSendStorno()) { + $content = $printing->generateOrder($templateVars->getOrder(), Printing::STORNO); + if ($content) { + $message->attach($content, $printing->getFileName(), 'application/pdf'); + } + } + foreach ($mailDoc->getFiles() as $file) { + if ($file['name'] != '' && $file['content'] != '') { + $fileContent = $this->_template->createTemplate($file['content']); + $fileName = $this->_template->createTemplate($file['name']); + $message->attach($fileContent->render($vars), $fileName->render($vars)); + } + } + $this->_logService->createLogEntry( + $templateVars->getOrder()->getShop(), + new Contact(), + LogEntry::INFO, + PSCShopQueueBundle::class, + $queue->getName(), + 'Request Mail send', + [ + 'message' => $message->getTextBody(), + 'from' => $from->render($vars), + 'to' => $to->render($vars), + 'subject' => $subject->render($vars), + ], + ); + $this->_mailer->send($message); + die(); + } catch (\Exception $e) { + $this->_logService->createLogEntry( + $templateVars->getOrder()->getShop(), + new Contact(), + LogEntry::ERROR, + PSCShopQueueBundle::class, + $queue->getName(), + 'Request Mail error', + [ + 'error' => $e->getMessage(), + ], + ); + $this->_error = $e->getMessage(); + return false; + } + + return true; + } if ($event instanceof Request) { $templateVars->loadOrder($event->getOrder()); $vars = $templateVars->getPosTwigVars($event->getPosition()); @@ -1286,6 +1403,121 @@ class Mail implements QueueInterface, ConfigurableElementInterface return true; } + if ($event instanceof ApprovalExternalAccept || $event instanceof ApprovalExternalDeclined) { + $templateVars->loadOrder($event->getOrder()); + $vars = $templateVars->getPosTwigVars($event->getPosition()); + $vars['approvalMail'] = $event->getMail(); + $vars['message'] = $event->getMessage(); + try { + $message = new Email() + ->subject($subject->render($vars)) + ->from($from->render($vars)) + ->to(trim($to->render($vars))); + if ($text) { + $message->text($text->render($vars)); + } + + if ($bcc) { + $bccArray = explode(',', $bcc->render($vars)); + foreach ($bccArray as $bc) { + if (trim($bc) != '') { + $message->addBcc(trim($bc)); + } + } + } + + if ($html) { + $message->html($html->render($vars)); + } + + if ($mailDoc->isSendInvoice()) { + $content = $printing->generateOrder($templateVars->getOrder(), Printing::INVOICE); + if ($content) { + $message->attach($content, $printing->getFileName(), 'application/pdf'); + } + } + + if ($mailDoc->isSendDelivery()) { + $content = $printing->generateOrder($templateVars->getOrder(), Printing::DELIVERY); + if ($content) { + $message->attach($content, $printing->getFileName(), 'application/pdf'); + } + } + + if ($mailDoc->isSendJobticket()) { + $content = $printing->generateOrder($templateVars->getOrder(), Printing::JOBTICKET); + if ($content) { + $message->attach($content, $printing->getFileName(), 'application/pdf'); + } + } + + if ($mailDoc->isSendLabel()) { + $content = $printing->generateOrder($templateVars->getOrder(), Printing::LABEL); + if ($content) { + $message->attach($content, $printing->getFileName(), 'application/pdf'); + } + } + + if ($mailDoc->isSendOffer()) { + $content = $printing->generateOrder($templateVars->getOrder(), Printing::OFFER); + if ($content) { + $message->attach($content, $printing->getFileName(), 'application/pdf'); + } + } + + if ($mailDoc->isSendOrder()) { + $content = $printing->generateOrder($templateVars->getOrder(), Printing::ORDER); + if ($content) { + $message->attach($content, $printing->getFileName(), 'application/pdf'); + } + } + + if ($mailDoc->isSendStorno()) { + $content = $printing->generateOrder($templateVars->getOrder(), Printing::STORNO); + if ($content) { + $message->attach($content, $printing->getFileName(), 'application/pdf'); + } + } + foreach ($mailDoc->getFiles() as $file) { + if ($file['name'] != '' && $file['content'] != '') { + $fileContent = $this->_template->createTemplate($file['content']); + $fileName = $this->_template->createTemplate($file['name']); + $message->attach($fileContent->render($vars), $fileName->render($vars)); + } + } + $this->_logService->createLogEntry( + $templateVars->getOrder()->getShop(), + new Contact(), + LogEntry::INFO, + PSCShopQueueBundle::class, + $queue->getName(), + 'Accept Declined Mail send', + [ + 'message' => $message->getTextBody(), + 'from' => $from->render($vars), + 'to' => $to->render($vars), + 'subject' => $subject->render($vars), + ], + ); + $this->_mailer->send($message); + } catch (\Exception $e) { + $this->_logService->createLogEntry( + $templateVars->getOrder()->getShop(), + new Contact(), + LogEntry::ERROR, + PSCShopQueueBundle::class, + $queue->getName(), + 'Accept Declined Mail error', + [ + 'error' => $e->getMessage(), + ], + ); + $this->_error = $e->getMessage(); + return false; + } + + return true; + } if ($event instanceof Accept || $event instanceof Declined) { $templateVars->loadOrder($event->getOrder()); $vars = $templateVars->getPosTwigVars($event->getPosition()); diff --git a/src/new/src/PSC/System/UpdateBundle/Migrations/Version20260311100000.php b/src/new/src/PSC/System/UpdateBundle/Migrations/Version20260311100000.php new file mode 100644 index 000000000..4aa94975a --- /dev/null +++ b/src/new/src/PSC/System/UpdateBundle/Migrations/Version20260311100000.php @@ -0,0 +1,11 @@ +entityManager->getConnection()->executeQuery("ALTER TABLE article ADD COLUMN IF NOT EXISTS confirmExternal TINYINT(1) NOT NULL DEFAULT 0;"); + } +} diff --git a/src/new/src/PSC/System/UpdateBundle/Migrations/Version20260311100001.php b/src/new/src/PSC/System/UpdateBundle/Migrations/Version20260311100001.php new file mode 100644 index 000000000..261f983ad --- /dev/null +++ b/src/new/src/PSC/System/UpdateBundle/Migrations/Version20260311100001.php @@ -0,0 +1,11 @@ +entityManager->getConnection()->executeQuery("ALTER TABLE orderspos ADD COLUMN IF NOT EXISTS external_approval_status INT(11) NULL DEFAULT NULL;"); + } +} diff --git a/src/new/var/plugins/System/PSC/Invoice/Button/OrderListButton.php b/src/new/var/plugins/System/PSC/Invoice/Button/OrderListButton.php index c90461ffb..673f858b7 100644 --- a/src/new/var/plugins/System/PSC/Invoice/Button/OrderListButton.php +++ b/src/new/var/plugins/System/PSC/Invoice/Button/OrderListButton.php @@ -22,8 +22,6 @@ class OrderListButton return ( '' . '' diff --git a/src/new/var/tailwind/backend.built.css b/src/new/var/tailwind/backend.built.css index 6743bcc57..f618b64ea 100644 --- a/src/new/var/tailwind/backend.built.css +++ b/src/new/var/tailwind/backend.built.css @@ -1330,6 +1330,10 @@ html { width: 1.75rem; } +.w-8{ + width: 2rem; +} + .w-\[var\(--sidebar-width\)\]{ width: var(--sidebar-width); } @@ -1371,6 +1375,10 @@ html { min-width: 100%; } +.max-w-2xl{ + max-width: 42rem; +} + .max-w-7xl{ max-width: 80rem; } diff --git a/src/old/application/data/models/Article.php b/src/old/application/data/models/Article.php index f14edfde7..363f6238c 100755 --- a/src/old/application/data/models/Article.php +++ b/src/old/application/data/models/Article.php @@ -49,8 +49,8 @@ class Article extends BaseArticle protected $hintEnable = false; protected $customTabEnable = false; - protected null|string $aribaUnitOfMeasure = ''; - protected null|string $aribaUNSPSC = ''; + protected ?string $aribaUnitOfMeasure = ''; + protected ?string $aribaUNSPSC = ''; protected $custom1; protected $custom2; @@ -189,7 +189,7 @@ class Article extends BaseArticle $this->a9_price_text_line1 = str_replace(',', '.', $this->a9_price_text_line1); $this->a4_abpreis = str_replace(',', '.', $this->a4_abpreis); - $this->preis = str_replace(',', '.', $this->preis); + $this->preis = 0; $this->versandwert = str_replace(',', '.', $this->versandwert); TP_Util::clearCache(); @@ -327,8 +327,8 @@ class Article extends BaseArticle $language = $this->getLangData(); if ( - isset($language[$overwriteLang], $language[$overwriteLang]['title']) && - $language[$overwriteLang]['title'] != '' + isset($language[$overwriteLang], $language[$overwriteLang]['title']) + && $language[$overwriteLang]['title'] != '' ) { return $language[$overwriteLang]['title']; } else { @@ -345,10 +345,10 @@ class Article extends BaseArticle $language = $this->getLangData(); if ( isset( - $language[Zend_Registry::get('locale')->getLanguage()], - $language[Zend_Registry::get('locale')->getLanguage()]['title'], - ) && - $language[Zend_Registry::get('locale')->getLanguage()]['title'] != '' + $language[Zend_Registry::get('locale')->getLanguage()], + $language[Zend_Registry::get('locale')->getLanguage()]['title'], + ) + && $language[Zend_Registry::get('locale')->getLanguage()]['title'] != '' ) { return $language[Zend_Registry::get('locale')->getLanguage()]['title']; } else { @@ -369,8 +369,8 @@ class Article extends BaseArticle $language = $this->getLangData(); if ( - isset($language[$overwriteLang], $language[$overwriteLang]['info']) && - $language[$overwriteLang]['info'] != '' + isset($language[$overwriteLang], $language[$overwriteLang]['info']) + && $language[$overwriteLang]['info'] != '' ) { return $language[$overwriteLang]['info']; } else { @@ -387,10 +387,10 @@ class Article extends BaseArticle $language = $this->getLangData(); if ( isset( - $language[Zend_Registry::get('locale')->getLanguage()], - $language[Zend_Registry::get('locale')->getLanguage()]['info'], - ) && - $language[Zend_Registry::get('locale')->getLanguage()]['info'] != '' + $language[Zend_Registry::get('locale')->getLanguage()], + $language[Zend_Registry::get('locale')->getLanguage()]['info'], + ) + && $language[Zend_Registry::get('locale')->getLanguage()]['info'] != '' ) { return nl2br($language[Zend_Registry::get('locale')->getLanguage()]['info']); } else { @@ -411,8 +411,8 @@ class Article extends BaseArticle $language = $this->getLangData(); if ( - isset($language[$overwriteLang], $language[$overwriteLang]['text_art']) && - $language[$overwriteLang]['text_art'] != '' + isset($language[$overwriteLang], $language[$overwriteLang]['text_art']) + && $language[$overwriteLang]['text_art'] != '' ) { return $language[$overwriteLang]['text_art']; } else { @@ -429,10 +429,10 @@ class Article extends BaseArticle $language = $this->getLangData(); if ( isset( - $language[Zend_Registry::get('locale')->getLanguage()], - $language[Zend_Registry::get('locale')->getLanguage()]['text_art'], - ) && - $language[Zend_Registry::get('locale')->getLanguage()]['text_art'] != '' + $language[Zend_Registry::get('locale')->getLanguage()], + $language[Zend_Registry::get('locale')->getLanguage()]['text_art'], + ) + && $language[Zend_Registry::get('locale')->getLanguage()]['text_art'] != '' ) { return nl2br($language[Zend_Registry::get('locale')->getLanguage()]['text_art']); } else { @@ -464,8 +464,8 @@ class Article extends BaseArticle $language = $this->getLangData(); if ( - isset($language[$overwriteLang], $language[$overwriteLang]['einleitung']) && - $language[$overwriteLang]['einleitung'] != '' + isset($language[$overwriteLang], $language[$overwriteLang]['einleitung']) + && $language[$overwriteLang]['einleitung'] != '' ) { return $language[$overwriteLang]['einleitung']; } else { @@ -482,10 +482,10 @@ class Article extends BaseArticle $language = $this->getLangData(); if ( isset( - $language[Zend_Registry::get('locale')->getLanguage()], - $language[Zend_Registry::get('locale')->getLanguage()]['einleitung'], - ) && - $language[Zend_Registry::get('locale')->getLanguage()]['einleitung'] != '' + $language[Zend_Registry::get('locale')->getLanguage()], + $language[Zend_Registry::get('locale')->getLanguage()]['einleitung'], + ) + && $language[Zend_Registry::get('locale')->getLanguage()]['einleitung'] != '' ) { return nl2br($language[Zend_Registry::get('locale')->getLanguage()]['einleitung']); } else { @@ -594,17 +594,17 @@ class Article extends BaseArticle ); if (isset($keys[0])) { if ( - ($keys[0]['type'] == 'Radio' || $keys[0]['type'] == 'Select') && - $keys[0]['mode'] != 'papierdb' + ($keys[0]['type'] == 'Radio' || $keys[0]['type'] == 'Select') + && $keys[0]['mode'] != 'papierdb' ) { $value = $str->xpath( - "//artikel[name='" . - $opt['kalk_artikel'] . - "']/option[@id='" . - $key . - "']/opt[@id='" . - $value . - "']", + "//artikel[name='" + . $opt['kalk_artikel'] + . "']/option[@id='" + . $key + . "']/opt[@id='" + . $value + . "']", ); if (isset($value[0])) { $options[] = [ @@ -628,13 +628,13 @@ class Article extends BaseArticle $strr = []; foreach ($value as $keyys) { $val = $str->xpath( - "//artikel[name='" . - $opt['kalk_artikel'] . - "']/option[@id='" . - $key . - "']/opt[@id='" . - $keyys . - "']", + "//artikel[name='" + . $opt['kalk_artikel'] + . "']/option[@id='" + . $key + . "']/opt[@id='" + . $keyys + . "']", ); $strr[] = $val[0]['name']; } @@ -651,7 +651,7 @@ class Article extends BaseArticle if (isset($value[0])) { array_push( $options, - ((string) $keys[0]['name']) . ': ' . ((string) $value[0]['name']), + (string) $keys[0]['name'] . ': ' . (string) $value[0]['name'], ); $optionsAr[(string) $keys[0]['name']] = (string) $value[0]['name']; $optionsArId[(string) $keys[0]['id']] = (string) $value[0]['name']; @@ -667,25 +667,25 @@ class Article extends BaseArticle ->fetchOne(); array_push( $options, - ((string) $keys[0]['name']) . ': ' . $papierSingle->description_1, + (string) $keys[0]['name'] . ': ' . $papierSingle->description_1, ); $optionsAr[(string) $keys[0]['name']] = $papierSingle->description_1; $optionsArId[(string) $keys[0]['id']] = $papierSingle->description_1; } elseif ($keys[0]['type'] == 'Checkbox') { $strr = []; foreach ($value as $keyys) { - $val = $template->xpath("//option[@id='" . - $key . - "']/opt[@id='" . - $keyys . - "']"); + $val = $template->xpath("//option[@id='" + . $key + . "']/opt[@id='" + . $keyys + . "']"); $strr[] = $val[0]['name']; } $optionsAr[$keys[0]['name']] = implode(', ', $strr); $optionsArId[(string) $keys[0]['id']] = implode(', ', $strr); - array_push($options, ((string) $keys[0]['name']) . ': ' . implode(', ', $strr)); + array_push($options, (string) $keys[0]['name'] . ': ' . implode(', ', $strr)); } elseif (strtolower($keys[0]['type']) != 'hidden') { - array_push($options, ((string) $keys[0]['name']) . ': ' . $value); + array_push($options, (string) $keys[0]['name'] . ': ' . $value); $optionsAr[$keys[0]['name']] = $value; $optionsArId[(string) $keys[0]['id']] = $value; } @@ -743,7 +743,7 @@ class Article extends BaseArticle $xmldes = simplexml_load_string('' . $this->a9_sizes); foreach ($xmldes->itm as $item) { if ((int) $params['s' . $item['id']]) { - array_push($options, 'Größe ' . $item['size'] . ': ' . ((int) $params['s' . $item['id']])); + array_push($options, 'Größe ' . $item['size'] . ': ' . (int) $params['s' . $item['id']]); } } } @@ -807,25 +807,22 @@ class Article extends BaseArticle ); if (isset($keys[0])) { if ( - ($keys[0]['type'] == 'Radio' || $keys[0]['type'] == 'Select') && - $keys[0]['mode'] != 'papierdb' + ($keys[0]['type'] == 'Radio' || $keys[0]['type'] == 'Select') + && $keys[0]['mode'] != 'papierdb' ) { $value = $str->xpath( - "//artikel[name='" . - $opt['kalk_artikel'] . - "']/option[@id='" . - $key . - "']/opt[@id='" . - $value . - "']", + "//artikel[name='" + . $opt['kalk_artikel'] + . "']/option[@id='" + . $key + . "']/opt[@id='" + . $value + . "']", ); if (isset($value[0])) { $optionsAr[(string) $keys[0]['name']] = (string) $value[0]['name']; $optionsArId[(string) $keys[0]['id']] = (string) $value[0]['name']; - array_push( - $options, - ((string) $keys[0]['name']) . ': ' . ((string) $value[0]['name']), - ); + array_push($options, (string) $keys[0]['name'] . ': ' . (string) $value[0]['name']); } } elseif ($keys[0]['mode'] == 'papierdb') { $papierSingle = Doctrine_Query::create() @@ -833,24 +830,24 @@ class Article extends BaseArticle ->from('Papier p') ->andWhere('p.art_nr = ? AND p.install_id = ?', [$value, $this->Install->id]) ->fetchOne(); - array_push($options, ((string) $keys[0]['name']) . ': ' . $papierSingle->description_1); + array_push($options, (string) $keys[0]['name'] . ': ' . $papierSingle->description_1); $optionsAr[(string) $keys[0]['name']] = $papierSingle->description_1; $optionsArId[(string) $keys[0]['id']] = $papierSingle->description_1; } elseif ($keys[0]['type'] == 'Checkbox') { $strr = []; foreach ($value as $keyys) { $val = $str->xpath( - "//artikel[name='" . - $opt['kalk_artikel'] . - "']/option[@id='" . - $key . - "']/opt[@id='" . - $keyys . - "']", + "//artikel[name='" + . $opt['kalk_artikel'] + . "']/option[@id='" + . $key + . "']/opt[@id='" + . $keyys + . "']", ); $strr[] = $val[0]['name']; } - array_push($options, ((string) $keys[0]['name']) . ': ' . implode(', ', $strr)); + array_push($options, (string) $keys[0]['name'] . ': ' . implode(', ', $strr)); $optionsAr[(string) $keys[0]['name']] = implode(', ', $strr); $optionsArId[(string) $keys[0]['id']] = implode(', ', $strr); } elseif (strtolower($keys[0]['type']) == 'template') { @@ -861,7 +858,7 @@ class Article extends BaseArticle if (isset($value[0])) { array_push( $options, - ((string) $keys[0]['name']) . ': ' . ((string) $value[0]['name']), + (string) $keys[0]['name'] . ': ' . (string) $value[0]['name'], ); $optionsAr[(string) $keys[0]['name']] = (string) $value[0]['name']; $optionsArId[(string) $keys[0]['id']] = (string) $value[0]['name']; @@ -877,39 +874,39 @@ class Article extends BaseArticle ->fetchOne(); array_push( $options, - ((string) $keys[0]['name']) . ': ' . $papierSingle->description_1, + (string) $keys[0]['name'] . ': ' . $papierSingle->description_1, ); $optionsAr[(string) $keys[0]['name']] = $papierSingle->description_1; $optionsArId[(string) $keys[0]['id']] = $papierSingle->description_1; } elseif ($keys[0]['type'] == 'Checkbox') { $strr = []; foreach ($value as $keyys) { - $val = $template->xpath("//option[@id='" . - $key . - "']/opt[@id='" . - $keyys . - "']"); + $val = $template->xpath("//option[@id='" + . $key + . "']/opt[@id='" + . $keyys + . "']"); $strr[] = $val[0]['name']; } $optionsAr[$keys[0]['name']] = implode(', ', $strr); $optionsArId[(string) $keys[0]['id']] = implode(', ', $strr); - array_push($options, ((string) $keys[0]['name']) . ': ' . implode(', ', $strr)); + array_push($options, (string) $keys[0]['name'] . ': ' . implode(', ', $strr)); } elseif (strtolower($keys[0]['type']) != 'hidden') { - array_push($options, ((string) $keys[0]['name']) . ': ' . $value); + array_push($options, (string) $keys[0]['name'] . ': ' . $value); $optionsAr[(string) $keys[0]['name']] = $value; $optionsArId[(string) $keys[0]['id']] = $value; } } elseif (strtolower($keys[0]['type']) != 'hidden') { $optionsAr[(string) $keys[0]['name']] = $value; $optionsArId[(string) $keys[0]['id']] = $value; - array_push($options, ((string) $keys[0]['name']) . ': ' . $value); + array_push($options, (string) $keys[0]['name'] . ': ' . $value); } elseif (strtolower($keys[0]['type']) == 'hidden' && $key == 'papier') { $papierSingle = Doctrine_Query::create() ->select() ->from('Papier p') ->andWhere('p.art_nr = ? AND p.install_id = ?', [$value, $this->Install->id]) ->fetchOne(); - array_push($options, ((string) $keys[0]['name']) . ': ' . $papierSingle->description_1); + array_push($options, (string) $keys[0]['name'] . ': ' . $papierSingle->description_1); $optionsAr[(string) $keys[0]['name']] = $papierSingle->description_1; $optionsArId[(string) $keys[0]['id']] = $papierSingle->description_1; } @@ -930,7 +927,7 @@ class Article extends BaseArticle //array_push($options, (string) 'Upload: ' . $upload[$value]); } } else { - array_push($options, ((string) $key) . ': ' . $value); + array_push($options, (string) $key . ': ' . $value); } } } @@ -943,20 +940,20 @@ class Article extends BaseArticle if (isset($keys[0])) { if ($keys[0]['type'] == 'Select' && $keys[0]['mode'] != 'papierdb') { $value = $str->xpath("//option[@id='" . $key . "']/opt[@id='" . $value . "']"); - array_push($options, ((string) $keys[0]['name']) . ': ' . ((string) $value[0]['name'])); + array_push($options, (string) $keys[0]['name'] . ': ' . (string) $value[0]['name']); } elseif ($keys[0]['type'] == 'Select' && $keys[0]['mode'] == 'papierdb') { $papierSingle = Doctrine_Query::create() ->select() ->from('Papier p') ->andWhere('p.art_nr = ? AND p.install_id = ?', [$value, $this->Install->id]) ->fetchOne(); - array_push($options, ((string) $keys[0]['name']) . ': ' . $papierSingle->description_1); + array_push($options, (string) $keys[0]['name'] . ': ' . $papierSingle->description_1); } else { - array_push($options, ((string) $keys[0]['name']) . ': ' . $value); + array_push($options, (string) $keys[0]['name'] . ': ' . $value); } } } else { - array_push($options, ((string) $key) . ': ' . $value); + array_push($options, (string) $key . ': ' . $value); } } } @@ -1008,24 +1005,21 @@ class Article extends BaseArticle if (isset($keys[0])) { if ( - ($keys[0]['type'] == 'Radio' || $keys[0]['type'] == 'Select') && - $keys[0]['mode'] != 'papierdb' + ($keys[0]['type'] == 'Radio' || $keys[0]['type'] == 'Select') + && $keys[0]['mode'] != 'papierdb' ) { $optionsAr[$key] = $value; $value = $str->xpath( - "//artikel[name='" . - $opt['kalk_artikel'] . - "']/option[@id='" . - $key . - "']/opt[@id='" . - $value . - "']", + "//artikel[name='" + . $opt['kalk_artikel'] + . "']/option[@id='" + . $key + . "']/opt[@id='" + . $value + . "']", ); if (isset($value[0])) { - array_push( - $options, - ((string) $keys[0]['name']) . ': ' . ((string) $value[0]['name']), - ); + array_push($options, (string) $keys[0]['name'] . ': ' . (string) $value[0]['name']); } } elseif ($keys[0]['mode'] == 'papierdb') { $optionsAr[$key] = $value; @@ -1034,23 +1028,23 @@ class Article extends BaseArticle ->from('Papier p') ->andWhere('p.art_nr = ? AND p.install_id = ?', [$value, $this->Install->id]) ->fetchOne(); - array_push($options, ((string) $keys[0]['name']) . ': ' . $papierSingle->description_2); + array_push($options, (string) $keys[0]['name'] . ': ' . $papierSingle->description_2); } elseif ($keys[0]['type'] == 'Checkbox') { $optionsAr[$key] = $value; $strr = []; foreach ($value as $keyys) { $val = $str->xpath( - "//artikel[name='" . - $opt['kalk_artikel'] . - "']/option[@id='" . - $key . - "']/opt[@id='" . - $keyys . - "']", + "//artikel[name='" + . $opt['kalk_artikel'] + . "']/option[@id='" + . $key + . "']/opt[@id='" + . $keyys + . "']", ); $strr[] = $val[0]['name']; } - array_push($options, ((string) $keys[0]['name']) . ': ' . implode(', ', $strr)); + array_push($options, (string) $keys[0]['name'] . ': ' . implode(', ', $strr)); } elseif (strtolower($keys[0]['type']) == 'template') { $optionsAr[$key] = $value; $keys = $template->xpath('//option[@id="' . $keys[0]['select'] . '"]'); @@ -1060,7 +1054,7 @@ class Article extends BaseArticle if (isset($value[0])) { array_push( $options, - ((string) $keys[0]['name']) . ': ' . ((string) $value[0]['name']), + (string) $keys[0]['name'] . ': ' . (string) $value[0]['name'], ); } } elseif ($keys[0]['mode'] == 'papierdb') { @@ -1074,25 +1068,25 @@ class Article extends BaseArticle ->fetchOne(); array_push( $options, - ((string) $keys[0]['name']) . ': ' . $papierSingle->description_1, + (string) $keys[0]['name'] . ': ' . $papierSingle->description_1, ); } elseif ($keys[0]['type'] == 'Checkbox') { $strr = []; foreach ($value as $keyys) { - $val = $template->xpath("//option[@id='" . - $key . - "']/opt[@id='" . - $keyys . - "']"); + $val = $template->xpath("//option[@id='" + . $key + . "']/opt[@id='" + . $keyys + . "']"); $strr[] = $val[0]['name']; } - array_push($options, ((string) $keys[0]['name']) . ': ' . implode(', ', $strr)); + array_push($options, (string) $keys[0]['name'] . ': ' . implode(', ', $strr)); } elseif (strtolower($keys[0]['type']) != 'hidden') { - array_push($options, ((string) $keys[0]['name']) . ': ' . $value); + array_push($options, (string) $keys[0]['name'] . ': ' . $value); } } elseif (strtolower($keys[0]['type']) != 'hidden') { $optionsAr[$key] = $value; - array_push($options, ((string) $keys[0]['name']) . ': ' . $value); + array_push($options, (string) $keys[0]['name'] . ': ' . $value); } elseif (strtolower($keys[0]['type']) == 'hidden' && $key == 'papier') { $optionsAr[$key] = $value; $papierSingle = Doctrine_Query::create() @@ -1100,7 +1094,7 @@ class Article extends BaseArticle ->from('Papier p') ->andWhere('p.art_nr = ? AND p.install_id = ?', [$value, $this->Install->id]) ->fetchOne(); - array_push($options, ((string) $keys[0]['name']) . ': ' . $papierSingle->description_2); + array_push($options, (string) $keys[0]['name'] . ': ' . $papierSingle->description_2); } } elseif ($key == 'kalk_artikel') { $optionsAr[$key] = $value; @@ -1117,7 +1111,7 @@ class Article extends BaseArticle //array_push($options, (string) 'Upload: ' . $upload[$value]); } } else { - array_push($options, ((string) $key) . ': ' . $value); + array_push($options, (string) $key . ': ' . $value); } } } @@ -1130,20 +1124,20 @@ class Article extends BaseArticle if (isset($keys[0])) { if ($keys[0]['type'] == 'Select' && $keys[0]['mode'] != 'papierdb') { $value = $str->xpath("//option[@id='" . $key . "']/opt[@id='" . $value . "']"); - array_push($options, ((string) $keys[0]['name']) . ': ' . ((string) $value[0]['name'])); + array_push($options, (string) $keys[0]['name'] . ': ' . (string) $value[0]['name']); } elseif ($keys[0]['type'] == 'Select' && $keys[0]['mode'] == 'papierdb') { $papierSingle = Doctrine_Query::create() ->select() ->from('Papier p') ->andWhere('p.art_nr = ? AND p.install_id = ?', [$value, $this->Install->id]) ->fetchOne(); - array_push($options, ((string) $keys[0]['name']) . ': ' . $papierSingle->description_1); + array_push($options, (string) $keys[0]['name'] . ': ' . $papierSingle->description_1); } else { - array_push($options, ((string) $keys[0]['name']) . ': ' . $value); + array_push($options, (string) $keys[0]['name'] . ': ' . $value); } } } else { - array_push($options, ((string) $key) . ': ' . $value); + array_push($options, (string) $key . ': ' . $value); } } } @@ -1160,23 +1154,23 @@ class Article extends BaseArticle if ($mode->liveedit && $type == 'INPUT') { return ( - '' . - $this->$field . - '
' + '' + . $this->$field + . '' ); } elseif ($mode->liveedit && $type == 'RTE') { return ( - '' . - $this->$field . - '' + '' + . $this->$field + . '' ); } @@ -1300,7 +1294,7 @@ class Article extends BaseArticle foreach ($xml as $article_xml) { $up = []; foreach ($article_xml->uploads->children() as $upload) { - if (isset($upload['select']) && $params[(string) $upload['select']] != ((string) $upload['value'])) { + if (isset($upload['select']) && $params[(string) $upload['select']] != (string) $upload['value']) { continue; } $up[] = [ @@ -1812,12 +1806,8 @@ class Article extends BaseArticle copy( '/data/www/new/web/' . $obj['url'], - '/data/www/old/market/basket/' . - $pos->orders_id . - '/' . - $pos->pos . - '/' . - pathinfo('/data/www/new/web/' . $obj['url'], PATHINFO_BASENAME), + '/data/www/old/market/basket/' . $pos->orders_id . '/' . $pos->pos . '/' + . pathinfo('/data/www/new/web/' . $obj['url'], PATHINFO_BASENAME), ); } } @@ -1872,23 +1862,23 @@ class Article extends BaseArticle $this->uploadProvidedDownload = $uploadProvidedDownload; } - public function setAribaUnitOfMeasure(null|string $aribaUnitOfMeasure): void + public function setAribaUnitOfMeasure(?string $aribaUnitOfMeasure): void { $this->aribaUnitOfMeasure = $aribaUnitOfMeasure; } - public function getAribaUnitOfMeasure(): null|string + public function getAribaUnitOfMeasure(): ?string { $this->loadData(); return $this->aribaUnitOfMeasure; } - public function setAribaUNSPSC(null|string $aribaUNSPSC): void + public function setAribaUNSPSC(?string $aribaUNSPSC): void { $this->aribaUNSPSC = $aribaUNSPSC; } - public function getAribaUNSPSC(): null|string + public function getAribaUNSPSC(): ?string { $this->loadData(); return $this->aribaUNSPSC; diff --git a/src/old/application/data/models/generated/BaseArticle.php b/src/old/application/data/models/generated/BaseArticle.php index 4f6ea6a2d..b54f74356 100755 --- a/src/old/application/data/models/generated/BaseArticle.php +++ b/src/old/application/data/models/generated/BaseArticle.php @@ -92,7 +92,12 @@ abstract class BaseArticle extends Doctrine_Record public function setTableDefinition() { $this->setTableName('article'); - $this->hasColumn('id', 'integer', 8, array('primary' => true, 'autoincrement' => true, 'type' => 'integer', 'length' => '8')); + $this->hasColumn('id', 'integer', 8, array( + 'primary' => true, + 'autoincrement' => true, + 'type' => 'integer', + 'length' => '8', + )); $this->hasColumn('uuid', 'string', 40, array('type' => 'string', 'length' => '40')); $this->hasColumn('created', 'timestamp', null, array('type' => 'timestamp')); $this->hasColumn('updated', 'timestamp', null, array('type' => 'timestamp')); @@ -187,6 +192,7 @@ abstract class BaseArticle extends Doctrine_Record $this->hasColumn('rate_count', 'integer', 8); $this->hasColumn('confirm', 'boolean', 1); + $this->hasColumn('confirmExternal', 'boolean', 1); $this->hasColumn('confirmone', 'boolean', 1); $this->hasColumn('confirmaccount_id', 'integer', 8); @@ -343,9 +349,17 @@ abstract class BaseArticle extends Doctrine_Record $this->hasOne('Contact', array('local' => 'contact_id', 'foreign' => 'id')); - $this->hasMany('ArticleGroup', array('refClass' => 'ArticleGroupArticle', 'local' => 'article_id', 'foreign' => 'articlegroup_id')); + $this->hasMany('ArticleGroup', array( + 'refClass' => 'ArticleGroupArticle', + 'local' => 'article_id', + 'foreign' => 'articlegroup_id', + )); - $this->hasMany('Contact as Con', array('refClass' => 'ArticleConfirmContact', 'local' => 'article_id', 'foreign' => 'contact_id')); + $this->hasMany('Contact as Con', array( + 'refClass' => 'ArticleConfirmContact', + 'local' => 'article_id', + 'foreign' => 'contact_id', + )); $this->hasMany('ArticleGroupArticle', array('local' => 'id', 'foreign' => 'article_id')); @@ -355,11 +369,23 @@ abstract class BaseArticle extends Doctrine_Record $this->hasMany('ContactFavArticle', array('local' => 'uuid', 'foreign' => 'article_uuid')); - $this->hasMany('Article as Releated', array('refClass' => 'ArticleReleated', 'local' => 'article1', 'foreign' => 'article2')); + $this->hasMany('Article as Releated', array( + 'refClass' => 'ArticleReleated', + 'local' => 'article1', + 'foreign' => 'article2', + )); - $this->hasMany('ArticleTheme', array('refClass' => 'ArticleThemeArticle', 'local' => 'article_id', 'foreign' => 'theme_id')); + $this->hasMany('ArticleTheme', array( + 'refClass' => 'ArticleThemeArticle', + 'local' => 'article_id', + 'foreign' => 'theme_id', + )); - $this->hasMany('ArticleTheme as ArticleMarketTheme', array('refClass' => 'ArticleThemeMarketArticle', 'local' => 'article_id', 'foreign' => 'theme_id')); + $this->hasMany('ArticleTheme as ArticleMarketTheme', array( + 'refClass' => 'ArticleThemeMarketArticle', + 'local' => 'article_id', + 'foreign' => 'theme_id', + )); $this->hasMany('ArticleThemeArticle', array('local' => 'id', 'foreign' => 'article_id')); @@ -373,8 +399,10 @@ abstract class BaseArticle extends Doctrine_Record $this->hasMany('ArticleReleated', array('local' => 'id', 'foreign' => 'article2')); - $this->hasMany('Article', array('refClass' => 'ArticleReleated', 'local' => 'article2', 'foreign' => 'article1')); + $this->hasMany('Article', array( + 'refClass' => 'ArticleReleated', + 'local' => 'article2', + 'foreign' => 'article1', + )); } - } - diff --git a/src/old/application/modules/default/controllers/BasketController.php b/src/old/application/modules/default/controllers/BasketController.php index 86de7d96a..d0e88b581 100755 --- a/src/old/application/modules/default/controllers/BasketController.php +++ b/src/old/application/modules/default/controllers/BasketController.php @@ -209,9 +209,7 @@ class BasketController extends TP_Controller_Action $this->redirectSpeak('/basket/simple'); } - public function customAction() - { - } + public function customAction() {} public function simpleAction() { @@ -5243,6 +5241,21 @@ class BasketController extends TP_Controller_Action } $art->save(); } + if ($article->confirmExternal) { + $art->status = 90; + $order->status = 90; + $dbMongo = TP_Mongo::getInstance(); + $dbMongo->Job->insertOne(array( + 'shop' => $this->shop->id, + 'event' => 'position_approval_external_request', + 'data' => [ + 'position' => $art->uuid, + 'order' => $order->uuid, + ], + 'created' => new MongoDB\BSON\UTCDateTime(), + 'updated' => new MongoDB\BSON\UTCDateTime(), + )); + } if ($article->confirm) { if ($article->confirmone) { $art->status = 90;