Subversion-Projekte lars-tiefland.webanos.faltradxxs.de

Revision

Revision 34 | Revision 44 | Zur aktuellen Revision | Blame | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed

<?php

    namespace App\Http\Controllers;

    use App\Console\Commands\dump;
    use App\Models\Shipping;
    use Illuminate\Contracts\Foundation\Application;
    use Illuminate\Contracts\View\Factory;
    use Illuminate\Contracts\View\View;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\DB;

    class ShippingController extends Controller
    {

        public function index(): Factory|View|Application
        {
            $shipping = Shipping::with("group")->get();
            return View( "shipping", [ "shipping" => $shipping ] );
        }

        public function getShippingOptions(): array|bool
        {
            $Land = 47;
            if ( isset( $_GET["Land"] ) )
            {
                $Land = $_GET["Land"];
            }
            $buffer = array();
            $rufnamen = array();
            $sql = "SELECT
                    z.id,
                    z.internal_name
                FROM
                    payment_methods z
                JOIN
                    shipping_payment_methods vz
                ON
                    vz.payment_method_id=z.id  
            ";
            $r = DB::connection( 'mysql' )->select( $sql );
            $rufnamen[] = "- Bezahlarten -";
            foreach ( $r as $row )
            {
                $ini_name = $row->internal_name;
                if ( $row->internal_name == "sofortueberweisung" )
                {
                    $ini_name = "ueberweisung";
                }
                if ( !isset( $_SESSION["zahlarten"][$ini_name] ) )
                {
                    $_SESSION["zahlarten"][$ini_name] = true;
                }
                if ( ( isset( $GLOBALS["INI"][$ini_name]["aktiv"] ) && $GLOBALS["INI"][$ini_name]["aktiv"] == 1 && $_SESSION["zahlarten"][$ini_name] !== false ) || !in_array( $row->internal_name, $GLOBALS["zahlsysteme"] ) )
                {
                    $rufnamen[$row->id] = $row->internal_name;
                }
            }
            if ( $_SESSION["SHOP"]["BASKET"]->items )
            {
                $vgruppen = array();
                $preis = $_SESSION["SHOP"]["BASKET"]->paymentInfo["Total"];
                $gewicht = $_SESSION["SHOP"]["BASKET"]->weight;
                foreach ( $_SESSION["SHOP"]["BASKET"]->items as $artikel )
                {
                    if ( $artikel->spedId )
                    {
                        $vgruppen[] = $artikel->spedId;
                    }
                    elseif ( $artikel->shipping_group_id )
                    {
                        $vgruppen[] = $artikel->shipping_group_id;
                    }
                }
                $vgruppen = array_unique( $vgruppen );
                $sql = "SELECT
                        MAX(rank) AS rank
                    FROM
                        shipping_groups
                    WHERE
                        id IN(" . implode( ",", $vgruppen ) . ")
                ";
                $r = DB::select( $sql );
                $row = $r[0];
                $rang = $row->rank;
                $sql = "SELECT
                        id,
                        name,
                        conditions,
                        shipping_text AS versandtextbaustein
                        -- zahlart_index
                    FROM
                        shipping_groups vg
                    WHERE
                        rank=" . $rang . "
                ";
                $r = DB::select( $sql );
                $row = $r[0];
                $vgId = $row->id;
                $bedingungen = explode( ";", $row->conditions );
                $sqlCondArr = array();
                if ( in_array( "preis", $bedingungen ) )
                {
                    $sqlCondArr[] = "((" . $preis . " >= calc_price_from AND " . $preis . " <= calc_price_to) OR (calc_price_from=calc_price_to))";
                }
                if ( in_array( "gewicht", $bedingungen ) )
                {
                    $sqlCondArr[] = "((" . $gewicht . " >= calc_weight_from AND " . $gewicht . " <= calc_weight_to)
                            OR (calc_weight_from = calc_weight_to))";
                }
                $sql = "SELECT
                        v.*
                    FROM
                        shippings v
                    JOIN
                        shipping_countries vl
                    ON
                        vl.shipping_id=v.id
                    WHERE
                        shipping_group_id=" . $vgId . "
                    AND
                        status = 0
                    AND
                        country_id=" . $Land . "
                ";
                if ( isset( $_SESSION["SHOP"]["vIsland"] ) && $_SESSION["SHOP"]["vIsland"] )
                {
                    //Insel ausgewählt ==> Versandoption darf NICHT auf "kein Inselversand" (Wert: 1) stehen!
                    $sqlCondArr [] = " island_shipping IN (0,2) ";
                }
                else
                {
                    $sqlCondArr [] = " island_shipping IN (0,1) ";
                }
                if ( $sqlCondArr )
                {
                    $sqlCond = implode( " AND ", $sqlCondArr );
                    $sql .= "
                        AND
                            " . $sqlCond . "
                    ";
                }
                $vR = DB::select( $sql );
                if ( !count( $vR ) )
                {
                    $_SESSION["versandFehler"] = "Wir versenden NICHT an diese Adresse! Bitte geben Sie eine andere Adresse ein!";
                }
                $shippingIds = array();
                foreach ( $vR as $vRow )
                {
                    $shippingIds[] = $vRow->id;
                    if ( $vRow->additions )
                    {
                        $vRow->additions = unserialize( $vRow->additions );
                    }

                    if ( isset( $_GET["param"] ) && $_GET["param"] == "single" )
                    {
                        if ( $vRow->name && $_SESSION['SHOP']['BASKET']->paymentInfo["Total"] )
                        {
                            $summeInklVersand = $vRow->price + $_SESSION['SHOP']['BASKET']->paymentInfo["Total"];
                            $vkSummeLaender['price'] = $vRow->price;
                            $vkSummeLaender['name'] = $vRow->name;
                            $fmt = new \NumberFormatter( "de_DE.UTF-8", \NumberFormatter::CURRENCY );
                            $vkSummeLaender['price_formatted'] = $fmt->formatCurrency( $vRow->price, "EUR" );
                            $vkSummeLaender['summe_formatted'] = $fmt->formatCurrency( $summeInklVersand, "EUR" );
                            echo view( "vkSummeLaender", [ "vkSummeLaender" => $vkSummeLaender, ] );
                        }
                        else
                        {
                            echo "<div class=''>Fehler: Keine Versandart gefunden!</div>\n";
                        }


                        return true;
                    }

                    $sql = "SELECT
                            z.id,
                            z.name,
                            z.internal_name,
                            z.discount,
                            z.shipping_text AS versandtextbaustein,
                            z.info_in_shop
                        FROM
                            shipping_payment_methods vz
                        JOIN
                            payment_methods z
                        ON
                            z.id=vz.payment_method_id
                        WHERE
                            shipping_id =" . $vRow->id . "
                    ";
                    if ( isset( $_GET['vRufname'] ) && is_numeric( $_GET['vRufname'] ) )
                    {
                        $sql .= " AND z.id = " . $_GET['vRufname'];
                    }
                    $zR = DB::select( $sql );
                    foreach ( $zR as $zRow )
                    {
                        if ( $zRow->internal_name != "nicht_belegt" )
                        {
                            $ini_name = $zRow->internal_name;
                            if ( $ini_name == "sofortueberweisung" )
                            {
                                $ini_name = "ueberweisung";
                            }
                            if ( $GLOBALS["INI"]["PayPalPlus"]["aktiv"] != 1 )
                            {
                                $row->name = ( str_replace( "\r\n", "<br>", $row->name ) );
                            }
                            if ( ( isset( $GLOBALS["INI"][$ini_name]["aktiv"] ) && $GLOBALS["INI"][$ini_name]["aktiv"] == 1 && $_SESSION["zahlarten"][$ini_name] !== false ) || !in_array( $zRow->internal_name, $GLOBALS["zahlsysteme"] ) )
                            {
                                $preis = $vRow->price;
                                $name = $vRow->name . " - " . $zRow->name;
                                if ( isset( $_SESSION["SHOP"]["Lieferadresse"] ) && $_SESSION["SHOP"]["Lieferadresse"] == "abholung" )
                                {
                                    $name = "Abholung - " . $zRow->name;
                                    $preis = 0;
                                }
                                $beschreibung = $zRow->info_in_shop;
                                if ( $beschreibung && $vRow->info_shop )
                                {
                                    $beschreibung .= "<br/><br/>";
                                }
                                if ( $vRow->info_shop )
                                {
                                    $beschreibung .= $vRow->info_shop;
                                }
                                $beschreibung2 = $zRow->versandtextbaustein;
                                if ( $beschreibung2 && $row->versandtextbaustein )
                                {
                                    $beschreibung2 .= "<br><br/>";
                                }
                                if ( $row->versandtextbaustein )
                                {
                                    $beschreibung2 .= $row->versandtextbaustein;
                                }
                                if ( $beschreibung2 && $vRow->info_mail )
                                {
                                    $beschreibung2 .= "<br/><br/>";
                                }
                                if ( $vRow->info_mail )
                                {
                                    $beschreibung2 .= $vRow->info_mail;
                                }
                                $buffer[$zRow->internal_name . "_" . $vRow->id] = array(
                                    "additions"        => $vRow->additions,
                                    "ID"               => $zRow->internal_name . "_" . $vRow->id,
                                    "beschreibung"     => $beschreibung,
                                    "beschreibung2"    => $beschreibung2,
                                    "kurz"             => $name,
                                    "ultrakurz"        => $zRow->name,
                                    "preis"            => $preis,
                                    "gesamt"           => $preis,
                                    "rufname"          => $zRow->internal_name,
                                    "versand_abschlag" => $zRow->discount,
                                    "versandgruppe"    => $vgId,
                                    //"zahlart_index"    => $row->zahlart_index,
                                );

                            }
                        }

                    }
                }
                if ( is_countable( $vRow->additions ) )
                {
                    $zusaetze = array();
                    foreach ( $vRow->additions as $zId => $zusatz )
                    {
                        $sql = "SELECT
                                    beschreibung
                                FROM
                                    artikel
                                WHERE
                                    id=" . $zId . "
                            ";
                        $res = DB::select( $sql );
                        $row = $res[0];
                        $zusaetze[$zId] = $row->beschreibung;
                    }
                }
            }
            else
            {
                $sql = "
                    SELECT
                        v.*
                    FROM
                        shippings v
                    JOIN
                        shipping_countries vl
                    ON
                        vl.shipping_id=v.id    
                    WHERE
                        country_id=" . $Land . "
                ";
                $res = DB::select( $sql );
                foreach ( $res as $vRow )
                {
                    $vgId = $vRow->shipping_group_id;
                    $sql = "SELECT
                            z.name,
                            z.internal_name,
                            z.info_in_shop,
                            z.discount,
                            z.shipping_text AS versand_textbaustein
                        FROM
                            payment_methods z
                        JOIN
                            shipping_payment_methods vz
                        ON
                            vz.payment_method_id=z.id
                        WHERE
                            vz.shipping_id=" . $vRow->id . "
                    ";
                    if ( isset( $_GET['vRufname'] ) && is_numeric( $_GET['vRufname'] ) )
                    {
                        $sql .= " AND z.id = " . $_GET['vRufname'];
                    }
                    $resZ = DB::select( $sql );
                    foreach ( $resZ as $vzRow )
                    {
                        if ( $vzRow->internal_name != "nicht_belegt" )
                        {
                            $ini_name = $vzRow->internal_name;
                            if ( $ini_name == "sofortueberweisung" )
                            {
                                $ini_name = "ueberweisung";
                            }
                            if ( $GLOBALS["INI"]["PayPalPlus"]["aktiv"] != 1 )
                            {
                                //$row->description = ( str_replace( "\r\n", "<br>", $row->description ) );
                            }
                            if ( ( isset( $GLOBALS["INI"][$ini_name]["aktiv"] ) && $GLOBALS["INI"][$ini_name]["aktiv"] == 1 && $_SESSION["zahlarten"][$ini_name] !== false ) || !in_array( $vzRow->internal_name, $GLOBALS["zahlsysteme"] ) )
                            {
                                $preis = $vRow->price;
                                $name = $vRow->name . " - " . $vzRow->name;
                                if ( isset( $_SESSION["SHOP"]["Lieferadresse"] ) && $_SESSION["SHOP"]["Lieferadresse"] == "abholung" )
                                {
                                    $name = "Abholung - " . $vzRow->name;
                                    $preis = 0;
                                }
                                $beschreibung = $vzRow->info_in_shop;
                                if ( $beschreibung && $vRow->info_in_shop )
                                {
                                    $beschreibung .= "<br/><br/>";
                                }
                                if ( $vRow->info_shop )
                                {
                                    $beschreibung .= $vRow->info_shop;
                                }
                                /*$beschreibung2 = $vzRow->versandtextbaustein;
                                if ( $beschreibung2 && $vRow->versandtextbaustein )
                                {
                                    $beschreibung2 .= "<br><br/>";
                                }
                                if ( $vRow->versandtextbaustein )
                                {
                                    $beschreibung2 .= $vRow->versandtextbaustein;
                                }
                                if ( $beschreibung2 && $vRow->info_mail )
                                {
                                    $beschreibung2 .= "<br/><br/>";
                                }*/
                                /*if ( $vRow->info_mail )
                                {
                                    $beschreibung2 .= $vRow->info_mail;
                                }*/
                                $buffer[$vzRow->internal_name . "_" . $vRow->id] = array(
                                    "additions"            => $vRow->additions,
                                    "ID"                   => $vzRow->internal_name . "_" . $vRow->id,
                                    "beschreibung"         => $beschreibung,
                                    //"beschreibung2"        => $beschreibung2,
                                    "kurz"                 => $name,
                                    "ultrakurz"            => $vzRow->name,
                                    "preis"                => $preis,
                                    "gesamt"               => $preis,
                                    "rufname"              => $vzRow->internal_name,
                                    "versand_abschlag"     => $vzRow->discount,
                                    "versandgruppe"        => $vgId,
                                    //"zahlart_index"        => $vRow->zahlart_index,
                                    "berechnung_preis_von" => $vRow->calc_price_from,
                                    "berechnung_preis_bis" => $vRow->calc_price_to,
                                    "berechnung_kg_von"    => $vRow->calc_weight_from,
                                    "berechnung_kg_bis"    => $vRow->calc_weight_to,
                                );
                            }
                        }
                    }
                }
                ksort( $buffer );
            }
            return $buffer;
        }

        public function updateShipping()
        {
            if ( isset( $_GET["param"] ) && $_GET['param'] == "single" )
            {
                $_SESSION['versand_laenderauswahl'] = $_GET['Land'];
            }

            if ( $_GET["Land"] )
            {
                if ( isset( $_SESSION["SHOP"]["Lieferadresse"] ) && $_SESSION["SHOP"]["Lieferadresse"] !== "false" )
                {
                    $_SESSION['SHOP']['buy']['Persdata']['liefer_Land'] = $_GET["Land"];
                }
                else
                {
                    $_SESSION['SHOP']['buy']['Persdata']['Land'] = $_GET["Land"];
                }
            }
            /*trigger_error( $_GET["Land"] );
            trigger_error( $_SESSION['SHOP']['buy']['Persdata']['liefer_Land'] );
            trigger_error( $_SESSION['SHOP']['buy']['Persdata']['Land'] );*/

            if ( isset( $_GET["packstation"] ) && $_GET["packstation"] == 1 )
            {
                $_SESSION['SHOP']['buy']['Persdata']['liefer_Land'] = 47;
            }
            $pppVersand = "";
            if ( isset( $_SESSION["SHOP"]["BASKET"]->items ) )
            {
                $versandOptionen = $this->getShippingOptions();
                $v_opt = array();
                $wunschzustellung = 0;
                if ( is_countable( $versandOptionen ) )
                {
                    $oId = 0;
                    foreach ( $versandOptionen as $o_id => $opt )
                    {
                        if ( $opt["rufname"] == "amazon" || $opt["rufname"] == "PayPalExpress" || $opt["rufname"] == "klarna" )
                        {
                            continue;
                        }
                        elseif ( isset( $_GET["packstation"] ) && $_GET["packstation"] == 1 && !stristr( $opt["kurz"], "DHL" ) )
                        {
                            continue;
                        }
                        /*if ( $_GET["kurier"] == 1 && ( $opt->express != 1 || stristr( $opt->kurz, "selbstabholung" ) ) )
                        {
                            continue;
                        }*/
                        if ( !key_exists( "beschr", $opt ) )
                        {
                            $opt["beschr"] = $opt["beschreibung"];
                        }
                        $opt['beschr'] = str_replace( "\r\n", "<br>", $opt['beschr'] );

                        if ( ( isset( $_SESSION["SHOP"]["buy"]["Versand_selected"] ) && $_SESSION["SHOP"]["buy"]["Versand_selected"] == $opt["ID"] ) || ( !isset( $_SESSION["SHOP"]["buy"]["Versand_selected"] ) && $oId == 0 ) )
                        {
                            $opt["checked"] = 'checked="checked"';
                        }
                        $wunschzustellung = 0;
                        if ( $GLOBALS["INI"]["modules"]["versandgruppen"] == 1 && isset( $GLOBALS["INI"]["wunschzustellung"]["aktiv"] ) && $GLOBALS["INI"]["wunschzustellung"]["aktiv"] == 1 )
                        {
                            $wzVersandGruppen = array();
                            if ( isset( $GLOBALS["INI"]["wunschzustellung"]["versandgruppen"] ) && $GLOBALS["INI"]["wunschzustellung"]["versandgruppen"] )
                            {
                                $wzVersandGruppen = explode( ",", $GLOBALS["INI"]["wunschzustellung"]["versandgruppen"] );
                            }
                            if ( in_array( $opt["versandgruppe"], $wzVersandGruppen ) || !$wzVersandGruppen )
                            {
                                $wunschzustellung = 1;
                            }
                        }
                        $v_opt[] = $opt;
                        $oId++;
                    }
                    /*$GLOBALS["ui"]->assign( "wunschzustellung", $wunschzustellung );
                    $GLOBALS["ui"]->assign( "versandOptionen", $v_opt );*/
                    \View::share( "wunschzustellung", $wunschzustellung );
                    \View::share( "versandOptionen", $v_opt );
                }
                if ( $GLOBALS["INI"]["PayPalPlus"]["aktiv"] != 1 && $GLOBALS["INI"]["PayPalCheckout"]["aktiv"] != 1 )
                {
                    echo view( "update_versand" );
                }
                elseif ( isset( $GLOBALS["INI"]["weban_vk"]["aktiv"] ) && $GLOBALS["INI"]["weban_vk"]["aktiv"] == 1 && $_SESSION["is_b2b"] == 1 )
                {
                    if ( is_array( $versandOptionen ) )
                    {
                        foreach ( $versandOptionen as $o_id => $opt )
                        {
                            if ( strtolower( $opt["rufname"] ) == "paypalplus" || strtolower( $opt["rufname"] ) == "klarna" || strtolower( $opt["rufname"] ) == "paypalcheckout" )
                            {
                                $pppVersand = $opt["ID"];
                                break;
                            }
                        }
                        if ( $_GET["Land"] || $_GET["liefer"] )
                        {
                            echo $pppVersand;
                        }
                        else
                        {
                            \View::share( "ppplusVersand", $pppVersand );
                        }
                    }
                }
                else
                {
                    if ( isset( $_SESSION["SHOP"]["hash"] ) && $_SESSION["SHOP"]["hash"] )
                    {
                        $thirdPartyMethods = array();
                        $customMethods = array(
                            "vorkasse",
                            "selbstabholung",
                            "ratenzahlung",
                            "nachnahme",
                            "sofortueberweisung",
                        );
                        $buy_link_base = $GLOBALS["INI"]["absoluteURL"];
                        $buy_link_base = str_replace( "http:", "https:", $buy_link_base );
                        $url = $buy_link_base . "/bestellen_seite_2.html";
                        $methodNameField = "kurz";
                        if ( $GLOBALS["INI"]["PayPalPlus"]["methodNameField"] )
                        {
                            $methodNameField = $GLOBALS["INI"]["PayPalPlus"]["methodNameField"];
                        }
                        foreach ( $versandOptionen as $o_id => $opt )
                        {
                            $rufname = strtolower( $opt["rufname"] );
                            $opt["beschr"] = $opt["beschreibung"];
                            if ( in_array( $rufname, $customMethods ) )
                            {
                                if ( $methodNameField == "rufname" )
                                {
                                    $methodName = $GLOBALS["rufnamen"][$opt[$methodNameField]];
                                }
                                else
                                {
                                    $methodName = $opt["kurz"];
                                }
                                $method = array(
                                    "redirectUrl" => $url,
                                    "methodName"  => $methodName,
                                    "description" => $opt["beschr"],
                                );
                                $imgBase = "/images/webelemente/versand_";
                                $imgName = $imgBase . $rufname . ".jpg";
                                $imgUrl = "https://" . $_SERVER["SERVER_NAME"] . $imgName;
                                $imgNameFull = $_SERVER["DOCUMENT_ROOT"] . $imgName;
                                if ( $GLOBALS["INI"]["ssl_buy"] == 1 )
                                {
                                    if ( file_exists( $imgNameFull ) )
                                    {
                                        $method["imageUrl"] = $imgUrl;
                                    }
                                }
                                $thirdPartyMethods[] = $method;
                            }
                        }
                        $payPal3rdParty = json_encode( $thirdPartyMethods );
                        require_once "module/creditcard/paypalPlus.php";
                        $c = new paypalPlus();
                        $apporvalUrl = $c->getCreditcardStatus( null );

                        $GLOBALS["ui"]->assign( "paymentMethods", $payPal3rdParty );
                        $GLOBALS["ui"]->assign( "approvalUrl", $apporvalUrl );
                        if ( $_GET['account'] )
                        {
                            $GLOBALS["ui"]->assign( "account", "?account=" . $_GET['account'] );
                        }


                    }
                    if ( is_array( $versandOptionen ) )
                    {
                        foreach ( $versandOptionen as $o_id => $opt )
                        {
                            if ( strtolower( $opt["rufname"] ) == "paypalplus" || strtolower( $opt["rufname"] ) == "klarna" || strtolower( $opt["rufname"] ) == "paypalcheckout" )
                            {
                                $pppVersand = $opt["ID"];
                                break;
                            }
                        }
                        if ( $_GET["Land"] || $_GET["liefer"] )
                        {
                            return $pppVersand;
                        }
                        else
                        {
                            \View::share( "ppplusVersand", $pppVersand );
                            return view( "update_versand" );
                        }
                    }
                }
            }
        }
    }