Hallo Community, folgende Herausforderung habe ich aktuell mit einem Event aus der sOrder Klasse: Shopware_Modules_Order_SaveOrder_ProcessDetails Es kommt beim Absenden der Bestellung im Frontend immer wieder die Fehlermeldung: Call to a member function getArrayCopy() on a non-object in /your/path/to/engine/Shopware/Controllers/Frontend/Checkout.php on line 245 Hintergrund aus dem Code der Checkout.php ist, dass die sOrderVariables in der Session nicht als Object bzw. als NULL-Wert hinterlegt sind. in meinem Plugin jedoch, setze ich die entsprechenden $arguments-\>getReturn();
Angaben. Ich stell euch mal die einzelne Funktion im Plugin zur Kontrolle und hoffe, Ihr könnt mir hier entsprechend helfen: $this-\>subscribeEvent( 'Shopware\_Modules\_Order\_SaveOrder\_ProcessDetails', 'onSaveOrderDetails' );
public function onSaveOrderDetails(Enlight\_Event\_EventArgs $args) { $this-\>registerMyLibrary(); $config = $this-\>Config(); if(!$config-\>get('activate\_diagnosis')) { // Wenn der Diagnosen Manager hier nicht werünscht ist return $args-\>getReturn(); } $employeeId = (int) Shopware()-\>Session()-\>offsetGet('sEmployeeId'); if(is\_null($employeeId) || empty($employeeId) || $employeeId == 0) { // Wenn die Mitarbeiternummer nicht gültig ist $this-\>sendAdminMail(\_\_METHOD\_\_ . '::' . \_\_LINE\_\_,'Given Employee ID ' . $employeeId . ' is not valid'); return $args-\>getReturn(); } /\*\* @var Shopware\CustomModels\ReaDiagnosis\Employee $employee \*/ $employee = $this-\>getEntityManager()-\>getRepository('Shopware\CustomModels\ReaDiagnosis\Employee')-\>find($employeeId); if(!$employee instanceof Shopware\CustomModels\ReaDiagnosis\Employee) { $this-\>sendAdminMail(\_\_METHOD\_\_ . '::' . \_\_LINE\_\_ . \_\_LINE\_\_,'Given Employee ' . $employeeId . ' could not be found in database'); return $args-\>getReturn(); } /\*\* @var sOrder $controller \*/ $controller = $args-\>getSubject(); $orderNumber = $controller-\>sOrderNumber; /\*\* @var array $orderDetails \*/ $orderDetails = $args-\>getDetails(); /\*\* @var Shopware\Models\Order\Status $orderState \*/ $orderState = $this-\>getEntityManager()-\>getRepository('Shopware\Models\Order\Status')-\>find((int)$config-\>get('employee\_order\_status')); if(!$orderState instanceof Shopware\Models\Order\Status) { $this-\>sendAdminMail(\_\_METHOD\_\_ . '::' . \_\_LINE\_\_,'Given OrderState ' . $config-\>get('employee\_order\_status') . ' could not be found in database'); return $args-\>getReturn(); } /\*\* @var Shopware\Models\Order\Order $order \*/ $order = $this-\>getEntityManager()-\>getRepository('Shopware\Models\Order\Order')-\>findOneBy( array('number' =\> $orderNumber) ); if(!$order instanceof Shopware\Models\Order\Order) { $this-\>sendAdminMail(\_\_METHOD\_\_ . '::' . \_\_LINE\_\_,'Given Order ' . $orderNumber . ' could not be found in database'); return $args-\>getReturn(); } $invNet = $order-\>getInvoiceAmountNet(); $shpNet = $order-\>getInvoiceShippingNet(); $invBrt = $order-\>getInvoiceAmount(); $shpBrt = $order-\>getInvoiceShipping(); $tax = 0.00; if($order-\>getNet() == 0) { $tax = (float) (($invBrt-$invNet) + ($shpBrt-$shpNet)); } $employeeOrder = new \Shopware\CustomModels\ReaDiagnosis\EmployeeOrder(); $employeeOrder-\>setEmployeeId($employeeId); $employeeOrder-\>setOrderId($order-\>getId()); $employeeOrder-\>setOrderNumber($order-\>getNumber()); $employeeOrder-\>setInvoiceAmountNet($order-\>getInvoiceAmountNet()); $employeeOrder-\>setShippingNet($order-\>getInvoiceShippingNet()); $employeeOrder-\>setInvoiceTax($tax); $employeeOrder-\>setCustomerId($order-\>getCustomer()-\>getId()); try { $this-\>getEntityManager()-\>persist($employeeOrder); $this-\>getEntityManager()-\>flush(); }catch(\Exception $e) { $this-\>sendAdminMail(\_\_METHOD\_\_ . '::' . \_\_LINE\_\_,$e-\>getMessage()); } $inEmployeeBox = (bool)Shopware()-\>Session()-\>offsetGet('sSendOnEmployee'); if($inEmployeeBox != true) { // Wenn die bestellung gar nicht ins Mitarbeiterfach soll return $args-\>getReturn(); } try { $order-\>setOrderStatus($orderState); $this-\>getEntityManager()-\>persist($order); $this-\>getEntityManager()-\>flush(); }catch(\Exception $e) { $this-\>sendAdminMail(\_\_METHOD\_\_ . '::' . \_\_LINE\_\_,$e-\>getMessage()); return $args-\>getReturn(); } $context = array( "OrderDetails" =\> $orderDetails, "Billing" =\> $controller-\>sUserData["billingaddress"] , "Shipping" =\> $controller-\>sUserData["shippingaddress"] , "ShippingCosts" =\> $controller-\>sShippingcosts , "Amount" =\> $controller-\>sAmountWithTax ? $controller-\>sAmountWithTax : $controller-\>sAmount , "Ordernumber" =\> $orderNumber , "Comment" =\> $controller-\>sComment , "Employee" =\> $this-\>getEntityManager()-\>toArray($employee) ); $mail = Shopware()-\>TemplateMail()-\>createMail( 'sNEWORDEROFFICE', $context ); $mail-\>addTo('your@mail.com','Your Name'); try { $mail-\>send(); }catch(\Exception $e) { $this-\>sendAdminMail(\_\_METHOD\_\_ . '::' . \_\_LINE\_\_,$e-\>getMessage()); return $args-\>getReturn(); } }