/** * 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; }
/** * Sends articles and creates invoice. Delivers a JSON String with article details * * @see templates/backend/plugins/PigmbhKlarnaPayment/index.php * @throws KlarnaException */ public function sendArticlesAction() { $piKlarnaFlag = true; $piKlarnaArticleCounter = 0; //send a part of the order $this->View()->setTemplate(); $piKlarnaArticleNr = explode(";", $this->Request()->articlenr); $piKlarnaQuantity = explode(";", $this->Request()->anzahl); $piKlarnaOrderNumber = $this->Request()->myordernumber; $piKlarnaNewOpen = array(); $piKlarnaNewDelivered = array(); $piKlarnaArticle = array(); $piKlarnaReturn = array(); $myklarnaarticles = array(); $piKlarnaCheckVoucher = false; $k = piKlarnaCreateKlarnaInstance($piKlarnaOrderNumber); $sql = "SELECT Count(*) FROM Pi_klarna_payment_order_detail WHERE ordernumber = ? AND offen > 0"; $piKlarnaQuantityartikel = Shopware()->Db()->fetchOne($sql, array($piKlarnaOrderNumber)); $sql = "SELECT Count(*) FROM Pi_klarna_payment_order_detail WHERE ordernumber = ?"; $piKlarnaQuantityartikelall = Shopware()->Db()->fetchOne($sql, array($piKlarnaOrderNumber)); for ($i = 0; $i < sizeof($piKlarnaQuantity); $i++) { $sql = "SELECT name,bestellt,bestell_nr,geliefert,offen,einzelpreis FROM Pi_klarna_payment_order_detail WHERE ordernumber = ? AND bestell_nr = ?"; $piKlarnaArticle[$i] = Shopware()->Db()->fetchRow($sql, array($piKlarnaOrderNumber, $piKlarnaArticleNr[$i])); $piKlarnaNewOpen[$i] = $piKlarnaArticle[$i]['offen'] - $piKlarnaQuantity[$i]; $piKlarnaNewDelivered[$i] = $piKlarnaArticle[$i]['geliefert'] + $piKlarnaQuantity[$i]; if ($piKlarnaNewOpen[$i] != 0 || sizeof($piKlarnaQuantity) != $piKlarnaQuantityartikelall) $piKlarnaFlag = false; if ($piKlarnaArticle[$i]['name'] == 'Versandkosten') $piKlarnaFlags = KlarnaFlags::INC_VAT + KlarnaFlags::IS_SHIPMENT; // elseif (htmlentities($piKlarnaArticle[$i]['name'], ENT_COMPAT | ENT_HTML401,'UTF-8') == 'Zuschlag für Zahlungsart') elseif (preg_match('/Zuschlag.f/', $piKlarnaArticle[$i]['name'])) $piKlarnaFlags = KlarnaFlags::INC_VAT + KlarnaFlags::IS_HANDLING; else $piKlarnaFlags = KlarnaFlags::INC_VAT; $sql = "SELECT ordercode FROM s_emarketing_vouchers"; $piKlarnaVoucherOrderCode=Shopware()->Db()->fetchAll($sql); for ($j = 0; $j < count($piKlarnaVoucherOrderCode); $j++) { if( $piKlarnaVoucherOrderCode[$j]['ordercode']==$piKlarnaArticleNr[$i]){ $piKlarnaCheckVoucher = true; } } $piKlarnaTaxid = 0; if($piKlarnaCheckVoucher){ $sql = "SELECT taxconfig FROM s_emarketing_vouchers WHERE ordercode = ?"; $piKlarnaTaxid=Shopware()->Db()->fetchOne($sql, array($piKlarnaArticleNr[$i])); if(!$piKlarnaTaxid){ $piKlarnaTaxid=0; } } else{ $sql = "SELECT taxID FROM s_order_details WHERE ordernumber = ? AND articleordernumber = ?"; $piKlarnaTaxid = Shopware()->Db()->fetchOne($sql, array($piKlarnaOrderNumber, $piKlarnaArticleNr[$i])); } if ($piKlarnaArticle[$i]['name'] == 'Versandkosten') { $sql = "SELECT dispatchID FROM s_order WHERE ordernumber = ?"; $piKlarnaDispatchId = Shopware()->Db()->fetchOne($sql, array($piKlarnaOrderNumber)); $sql = "SELECT tax_calculation FROM s_premium_dispatch WHERE id = ?"; $piKlarnaTaxid = Shopware()->Db()->fetchOne($sql, array($piKlarnaDispatchId)); if ($piKlarnaTaxid == 0) { $sql = "SELECT id FROM s_core_tax WHERE tax = (SELECT MAX(tax) FROM s_core_tax)"; $piKlarnaTaxid = Shopware()->Db()->fetchOne($sql); } } $sql = "SELECT tax FROM s_core_tax WHERE id = ?"; $piKlarnaTax = Shopware()->Db()->fetchOne($sql, array($piKlarnaTaxid)); if (!$piKlarnaTax) $piKlarnaTax = 0; if ($piKlarnaQuantity[$i] > 0) { $myklarnaarticles[$piKlarnaArticleCounter]['bestell_nr'] = $piKlarnaArticleNr[$i]; $myklarnaarticles[$piKlarnaArticleCounter]['anzahl'] = $piKlarnaQuantity[$i]; $myklarnaarticles[$piKlarnaArticleCounter]['einzelpreis'] = $piKlarnaArticle[$i]['einzelpreis']; $myklarnaarticles[$piKlarnaArticleCounter]['name'] = $piKlarnaArticle[$i]['name']; $piKlarnaArticleCounter++; $piKlarnaArticle[$i]['name'] = strip_tags($piKlarnaArticle[$i]['name']); $qty = ""; $artNo = ""; $title = ""; $price = ""; $vat = ""; $discount = ""; $flags = ""; $k->addArticle( $qty = $piKlarnaQuantity[$i], $artNo = $piKlarnaArticleNr[$i], $title = utf8_decode(htmlspecialchars_decode($piKlarnaArticle[$i]['name'])), $price = $piKlarnaArticle[$i]['einzelpreis'], $vat = str_replace(",", ".", $piKlarnaTax), $discount = 0, $flags = $piKlarnaFlags ); } } if ($piKlarnaFlag == true) { $piKlarnaReturn = piKlarnaActivateReservation($k, $piKlarnaOrderNumber, 'complete', $myklarnaarticles); } elseif ($piKlarnaQuantityartikel == $piKlarnaArticleCounter) { $piKlarnaReturn = piKlarnaActivateReservation($k, $piKlarnaOrderNumber, 'last', $myklarnaarticles); } else { $piKlarnaReturn = piKlarnaActivateReservation($k, $piKlarnaOrderNumber, 'part', $myklarnaarticles); } if ($piKlarnaReturn['error'] == false) { for ($i = 0; $i < sizeof($piKlarnaQuantity); $i++) { $sql = "UPDATE Pi_klarna_payment_order_detail SET offen = ?, geliefert = ? WHERE ordernumber = ? AND bestell_nr = ?"; Shopware()->Db()->query($sql, array((int)$piKlarnaNewOpen[$i],(int)$piKlarnaNewDelivered[$i], $piKlarnaOrderNumber, $piKlarnaArticleNr[$i])); if ($piKlarnaQuantity[$i] > 0) { //$piKlarnaArticlename = str_replace("'", "\'", $piKlarnaArticle[$i]['name']); $piKlarnaArticlename = $piKlarnaArticle[$i]['name']; $piKlarnaHistoryEvent = "<span>Artikel versendet</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])); if ($piKlarnaNewOpen[$i] == 0) { $piKlarnaCompleteReservedStatusId=piKlarnaGetCompleteReservedStatusId(); $sql = "UPDATE Pi_klarna_payment_order_detail SET bezahlstatus = ?, versandstatus = 7 WHERE ordernumber = ? AND bestell_nr = ?"; Shopware()->Db()->query($sql, array((int)$piKlarnaCompleteReservedStatusId, $piKlarnaOrderNumber, $piKlarnaArticleNr[$i])); } elseif ($piKlarnaNewOpen[$i] > 0) { $piKlarnaPartReservedStatusId=piKlarnaGetPartReservedStatusId(); $sql = "UPDATE Pi_klarna_payment_order_detail SET bezahlstatus = ?, versandstatus = 6 WHERE ordernumber = ? AND bestell_nr = ?"; Shopware()->Db()->query($sql, array((int)$piKlarnaPartReservedStatusId, $piKlarnaOrderNumber, $piKlarnaArticleNr[$i])); } } } if ($piKlarnaFlag == true) { $piKlarnaGetAcceptedStatusId=piKlarnaGetAcceptedStatusId(); $sql = "UPDATE s_order SET status = 7, cleared = ? WHERE ordernumber = ?"; Shopware()->Db()->query($sql, array($piKlarnaGetAcceptedStatusId, $piKlarnaOrderNumber)); $piKlarnaCompleteReservedStatusId=piKlarnaGetCompleteReservedStatusId(); $sql = "UPDATE Pi_klarna_payment_order_detail SET versandstatus = 7, bezahlstatus = ? WHERE ordernumber = ?"; Shopware()->Db()->query($sql, array((int)$piKlarnaCompleteReservedStatusId, $piKlarnaOrderNumber)); $piKlarnaHistoryEvent = "<b class=\"green\">Bestellung vollständig versendet</b>"; $sql = $sql = "INSERT INTO Pi_klarna_payment_history (ordernumber, event) VALUES (?, ?)"; Shopware()->Db()->query($sql, array($piKlarnaOrderNumber, $piKlarnaHistoryEvent )); } else { $piKlarnaOpenFlag = true; $sql = "SELECT offen FROM Pi_klarna_payment_order_detail WHERE ordernumber = ?"; $piKlarnaTotalOpen = Shopware()->Db()->fetchAll($sql, array($piKlarnaOrderNumber)); for ($i = 0; $i < sizeof($piKlarnaTotalOpen); $i++) { if ($piKlarnaTotalOpen[$i]['offen'] != 0) { $piKlarnaOpenFlag = false; } } if ($piKlarnaOpenFlag == true) { $sql = "UPDATE s_order SET status = 7 WHERE ordernumber = ?"; Shopware()->Db()->query($sql, array($piKlarnaOrderNumber)); } else { $sql = "UPDATE s_order SET status = 6 WHERE ordernumber = ?"; Shopware()->Db()->query($sql, array($piKlarnaOrderNumber)); } } } ob_clean(); $retValue = json_encode(array( 'articlename' => $piKlarnaArticle, 'k_return' => $piKlarnaReturn, '$piKlarnaArticle' => $piKlarnaNewOpen, 'myflag' => $piKlarnaFlag )); echo $retValue; }