/** * Gets ID of Klarna part canceled state * * @return Array $statusArray Status */ function piKlarnaGetAllStatusIds() { $statusArray=Array( 'pending' => piKlarnaGetPendingStatusId(), 'accepted' => piKlarnaGetAcceptedStatusId(), 'declined' => piKlarnaGetDeclinedStatusId(), 'partSent' => piKlarnaGetPartReservedStatusId(), 'completeSent' => piKlarnaGetCompleteReservedStatusId(), 'partCanceled' => piKlarnaGetPartCanceledStatusId(), 'completeCanceled' => piKlarnaGetCompleteCancelStatusId(), 'partReturned' => piKlarnaGetPartReturnStatusId(), 'completeReturned' => piKlarnaGetCompleteReturnStatusId(), ); return $statusArray; }
/** * Returns articles from the order. Delivers a JSON String with article details * * @see templates/backend/plugins/PigmbhKlarnaPayment/index.php * @throws KlarnaException */ public function returnArticlesAction() { $this->View()->setTemplate(); $piKlarnaArticleNr = explode(";", $this->Request()->articlenr); $piKlarnaQuantity = explode(";", $this->Request()->anzahl); $piKlarnaInvoiceNumber = explode(";", $this->Request()->rechnungsnr); $piKlarnaOrderNumber = $this->Request()->myordernumber; $piKlarnaError = array(); $piKlarnaQuantityprorechnung = array(); $piKlarnaNewInvoiceNumber = array(); $piKlarnaArticlesQuantity = array(); $myresult = array(); if (sizeof($piKlarnaArticleNr) > 0) { $i = 0; $j = 0; for ($i = 0; $i < sizeof($piKlarnaArticleNr); $i++) { if ($i == 0) { $piKlarnaQuantityprorechnung[$j] = $piKlarnaQuantity[$i]; $piKlarnaNewInvoiceNumber[$j] = $piKlarnaInvoiceNumber[$i]; $sql = "SELECT SUM(anzahl) FROM Pi_klarna_payment_bills_articles WHERE invoice_number = ?"; $piKlarnaArticlesQuantity[$j] = Shopware()->Db()->fetchOne($sql, array($piKlarnaInvoiceNumber[$i])); } else { if ($piKlarnaInvoiceNumber[$i] == $piKlarnaNewInvoiceNumber[$j]) { $piKlarnaQuantityprorechnung[$j]+=$piKlarnaQuantity[$i]; } else { $j++; $piKlarnaNewInvoiceNumber[$j] = $piKlarnaInvoiceNumber[$i]; $piKlarnaQuantityprorechnung[$j] = $piKlarnaQuantity[$i]; $sql = "SELECT SUM(anzahl) FROM Pi_klarna_payment_bills_articles WHERE invoice_number = ?"; $piKlarnaArticlesQuantity[$j] = Shopware()->Db()->fetchOne($sql, array($piKlarnaInvoiceNumber[$i])); } } } $p = 0; $k = piKlarnaCreateKlarnaInstance($piKlarnaOrderNumber); for ($i = 0; $i < sizeof($piKlarnaNewInvoiceNumber); $i++) { if ($piKlarnaArticlesQuantity[$i] == $piKlarnaQuantityprorechnung[$i]) { try { $credNo = ''; $result = $k->creditInvoice( $piKlarnaNewInvoiceNumber[$i], $credNo = '' ); $piKlarnaError['errormessage'] = ""; $piKlarnaError['error'] = false; $myresult[$p] = $result; $p++; } catch (Exception $e) { $piKlarnaError['error'] = true; $piKlarnaError['errormessage'] = $e->getMessage() . " (#" . $e->getCode() . ")"; } } else { for ($j = 0; $j < sizeof($piKlarnaArticleNr); $j++) { if ($piKlarnaInvoiceNumber[$j] == $piKlarnaNewInvoiceNumber[$i]) { if ($piKlarnaQuantity[$j] > 0) { $qty = $piKlarnaQuantity[$j]; $artNo = $piKlarnaArticleNr[$j]; $result = array(); $credNo = ''; $k->addArtNo( $qty = $piKlarnaQuantity[$j], $artNo = $piKlarnaArticleNr[$j]); try { $result = $k->creditPart( $piKlarnaNewInvoiceNumber[$i], $credNo = '' ); $piKlarnaError['errormessage'] = ""; $piKlarnaError['error'] = false; } catch (Exception $e) { $piKlarnaError['error'] = true; $piKlarnaError['errormessage'] = $e->getMessage() . " (#" . $e->getCode() . ")"; } } } } } } if ($piKlarnaError['errormessage'] == "") { for ($i = 0; $i < sizeof($piKlarnaArticleNr); $i++) { if ($piKlarnaQuantity[$i] > 0) { $sql = "UPDATE Pi_klarna_payment_order_detail SET retourniert = retourniert + ?, geliefert = geliefert - ? WHERE ordernumber = ? AND bestell_nr = ?"; Shopware()->Db()->query($sql,array( (int)$piKlarnaQuantity[$i], (int)$piKlarnaQuantity[$i], $piKlarnaOrderNumber, $piKlarnaArticleNr[$i] )); $sql = "UPDATE Pi_klarna_payment_order_detail SET gesamtpreis = geliefert * einzelpreis WHERE ordernumber = ? AND bestell_nr = ?"; Shopware()->Db()->query($sql,array( $piKlarnaOrderNumber, $piKlarnaArticleNr[$i] )); $sql = "UPDATE s_order_details SET quantity = quantity - ? WHERE ordernumber = ? AND articleordernumber = ?"; Shopware()->Db()->query($sql,array( (int)$piKlarnaQuantity[$i], $piKlarnaOrderNumber, $piKlarnaArticleNr[$i] )); $sql = "UPDATE Pi_klarna_payment_bills_articles SET anzahl = anzahl - ? WHERE order_number = ? AND bestell_nr = ? AND invoice_number = ?"; Shopware()->Db()->query($sql,array( (int)$piKlarnaQuantity[$i], $piKlarnaOrderNumber, $piKlarnaArticleNr[$i], $piKlarnaInvoiceNumber[$i] )); $sql = "SELECT bestellt FROM Pi_klarna_payment_order_detail WHERE ordernumber = ? AND bestell_nr = ? "; $piKlarnaOrdered = Shopware()->Db()->fetchOne($sql,array($piKlarnaOrderNumber, $piKlarnaArticleNr[$i])); $sql = "SELECT retourniert FROM Pi_klarna_payment_order_detail WHERE ordernumber = ? AND bestell_nr= ? "; $piKlarnaReturned = Shopware()->Db()->fetchOne($sql,array($piKlarnaOrderNumber, $piKlarnaArticleNr[$i])); if ($piKlarnaOrdered == $piKlarnaReturned) { $piKlarnaCompleteReturnStatusId=piKlarnaGetCompleteReturnStatusId(); $sql = "UPDATE Pi_klarna_payment_order_detail SET versandstatus = ? WHERE ordernumber = ? AND bestell_nr = ?"; Shopware()->Db()->query($sql, array( (int)$piKlarnaCompleteReturnStatusId, $piKlarnaOrderNumber, $piKlarnaArticleNr[$i] )); } if ($piKlarnaArticleNr[$i] == 'versand_' . $piKlarnaOrderNumber) { $sql = "UPDATE s_order SET invoice_shipping = 0, invoice_shipping_net = 0, dispatchID = 0 WHERE ordernumber = ?"; Shopware()->Db()->query($sql, array($piKlarnaOrderNumber)); } $sql = "SELECT name FROM Pi_klarna_payment_order_detail WHERE ordernumber = ? AND bestell_nr= ?"; $piKlarnaArticlename = Shopware()->Db()->fetchOne($sql, array($piKlarnaOrderNumber, $piKlarnaArticleNr[$i])); // $piKlarnaArticlename = str_replace("'", "\'", $piKlarnaArticlename); $piKlarnaArticlename = $piKlarnaArticlename; $piKlarnaHistoryEvent = "<span class=\"red\">Artikel retourniert</span>"; $sql = "INSERT INTO Pi_klarna_payment_history ( ordernumber, event, name, bestellnr, anzahl ) VALUES ( ?, ?, ?, ?, ? )"; Shopware()->Db()->query($sql, array( $piKlarnaOrderNumber, $piKlarnaHistoryEvent, $piKlarnaArticlename, $piKlarnaArticleNr[$i], $piKlarnaQuantity[$i] )); } } } } piKlarnaCalculateNewAmount($piKlarnaOrderNumber); $sql = "SELECT invoice_amount FROM s_order WHERE ordernumber = ?"; $piKlarnaOrderAmount = Shopware()->Db()->fetchOne($sql, array($piKlarnaOrderNumber)); if ($piKlarnaOrderAmount == 0) { $piKlarnaCompleteReturnStatusId=piKlarnaGetCompleteReturnStatusId($piKlarnaOrderNumber); $sql = "UPDATE s_order SET status = ? WHERE ordernumber = ?"; Shopware()->Db()->query($sql, array((int)$piKlarnaCompleteReturnStatusId, $piKlarnaOrderNumber)); $sql = "INSERT INTO Pi_klarna_payment_history (ordernumber, event) VALUES (?, ?)"; Shopware()->Db()->query($sql, array($piKlarnaOrderNumber, '<b class=\'red\'>Bestellung vollständig retourniert</b>')); } echo json_encode(array( "items" => $piKlarnaError, "articlesquantity" => $piKlarnaArticlesQuantity, "anzahlprorechnung" => $piKlarnaQuantityprorechnung, "rechnungsnummer" => $piKlarnaNewInvoiceNumber, "rechnungsnr" => $piKlarnaInvoiceNumber )); }