Ejemplo n.º 1
0
/**
* 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;
}
Ejemplo n.º 2
0
    /**
     * 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&uuml;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&auml;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;
    }