Subversion-Projekte lars-tiefland.laravel_shop

Revision

Revision 1602 | Blame | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed

<?php

    namespace App\Console\Commands;

    use App\Models\Address;
    use App\Models\Directory;
    use App\Models\DirectoryTemplate;
    use App\Models\Item;
    use App\Models\Action;
    use App\Models\Manufacturer;
    use App\Models\Medium;
    use App\Models\Order;
    use App\Models\OrderAddress;
    use App\Models\OrderType;
    use App\Models\PaymentMethod;
    use App\Models\Price;
    use App\Models\PriceAgency;
    use App\Models\ActionMedium;
    use App\Models\ItemMedium;
    use App\Models\ItemTemplate;
    use App\Models\DirectoryMedium;
    use App\Models\SalesPortal;
    use App\Models\SalesPortalItem;
    use App\Models\SalesPortalType;
    use App\Models\Shipping;
    use App\Models\ShippingCountry;
    use App\Models\ShippingGroup;
    use App\Models\ShippingPaymentMethod;
    use App\Models\Shop;
    use App\Models\Template;
    use App\Models\User;
    use App\Models\OrderItem;
    use App\Models\WebSetting;
    use Illuminate\Console\Command;
    use Illuminate\Support\Facades\DB;

    class convertDB extends Command
    {
        /**
         * The name and signature of the console command.
         *
         * @var string
         */
        protected $signature = 'command:convertDB';

        /**
         * The console command description.
         *
         * @var string
         */
        protected $description = 'Converts the old webanOS-DB to laravel';

        /**
         * Execute the console command.
         *
         * @return void
         */

        public function handle(): void
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Verarbeitung gestartet" );
            $this->migrateShops();
            $this->migrateOrderTypes();
            if ( env( 'site' ) == env( 'shop' ) )
            {
                $this->migrateWebSettings();
            }
            $this->migratePaymentMethods();
            $this->migrateShippingGroups();
            $this->migrateShippings();
            $this->migrateManufacturers();
            $this->migrateMedia();
            $this->migrateActions();
            $this->migrateDirs();
            $this->migrateItems();
            $this->migrateTemplates();
            $this->migrateSalesPortalTypes();
            $this->migrateSalesPortals();
            $this->migrateSalesPortalItems();
            if ( env( 'site' ) == env( 'shop' ) )
            {
                $this->migratePriceAgencies();
                $this->migrateUsers();
                $this->migrateAddresses();
                $this->migrateOrderAddresses();
                $this->migrateOrders();
                $this->migrateOrderItems();
            }
            $this->info( date( "d.m.Y H:i:s" ) . ": Verarbeitung beendet" );
        }

        private function migrateShops(): void
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Shops" );
            $start = 0;
            $sql = "
                SELECT
                    MAX(id) AS start
                FROM
                    shops
            ";
            $row = DB::connection( 'mysql' )->select( $sql );
            if ( $row[0]->start )
            {
                $start = $row[0]->start;
            }
            $sql = "SELECT
                    *
                FROM
                    shops
                WHERE
                    id>" . $start . "
            ";
            $shops = DB::connection( 'old' )->select( $sql );
            foreach ( $shops as $oldShop )
            {
                $shop = new Shop();
                $shop->id = $oldShop->ID;
                $shop->name = $oldShop->Name;
                $shop->short = '';
                if ( isset( $oldShop->short ) && $oldShop->short )
                {
                    $shop->short = $oldShop->short;
                }
                $shop->re_short = '';
                if ( isset( $oldShop->re_short ) && $oldShop->re_short )
                {
                    $shop->re_short = $oldShop->re_short;
                }
                if ( isset( $oldShop->preisindex_ek ) && $oldShop->preisindex_ek )
                {
                    $shop->preisindex_ek = $oldShop->preisindex_ek;
                }
                $shop->ebay = $oldShop->ebay;
                $shop->erfassung = $oldShop->erfassung;
                if ( isset( $oldShop->status ) && $oldShop->status )
                {
                    $shop->status = $oldShop->status;
                }
                if ( isset( $oldShop->rang ) && $oldShop->rang )
                {
                    $shop->rank = $oldShop->rang;
                }
                $shop->klonziel = $oldShop->klonziel;
                $shop->konroot = $oldShop->konroot;
                if ( isset( $oldShop->home ) && $oldShop->home )
                {
                    $shop->home = $oldShop->home;
                }
                $shop->database = $oldShop->database;
                $shop->domain = $oldShop->domain;
                $shop->mail_server = $oldShop->mail_server;
                $shop->mail_user = $oldShop->mail_user;
                $shop->mail_password = $oldShop->mail_passwort;
                $shop->save();
            }

        }

        private function migrateOrderTypes(): void
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Bestellarten" );
            $start = 0;
            $sql = "SELECT
                    MAX(id) AS start
                FROM
                    order_types
            ";
            $row = DB::connection( "mysql" )->select( $sql );
            if ( $row[0]->start )
            {
                $start = $row[0]->start;
            }
            $sql = "SELECT
                    *
                FROM
                    bestellart
                WHERE
                    id>" . $start . "
            ";
            $methods = DB::connection( 'old' )->select( $sql );
            foreach ( $methods as $method )
            {
                $short = '';
                if ( isset( $method->short ) && $method->short )
                {
                    $short = $method->short;
                }

                OrderType::factory()->create( [
                    "id"            => $method->id,
                    "internal_name" => $method->rufname,
                    "name"          => $method->name,
                    "short"         => $short,
                ] );
            }
        }

        private function migratePaymentMethods(): void
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Zahlungsmethoden" );
            $start = 0;
            $sql = "SELECT
                    MAX(id) AS start
                FROM
                    payment_methods
            ";
            $row = DB::connection( "mysql" )->select( $sql );
            if ( $row[0]->start )
            {
                $start = $row[0]->start;
            }
            $sql = "SELECT
                    *
                FROM
                    zahlungsarten
                WHERE
                    id>" . $start . "
            ";
            $methods = DB::connection( 'old' )->select( $sql );
            foreach ( $methods as $method )
            {
                PaymentMethod::factory()->create( [
                    "id"            => $method->id,
                    "name"          => $method->name,
                    "discount"      => $method->abschlag,
                    "internal_name" => $method->interner_name,
                    "info_in_shop"  => $method->info_im_shop,
                    "shipping_text" => $method->versandtextbaustein,
                ] );
            }
        }

        private function migrateShippingGroups(): void
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Versandgruppen" );
            $sql = "SELECT
                    *
                FROM
                    versandgruppen
            ";
            $methods = DB::connection( 'old' )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $methods ) );
            $progressbar->start();
            foreach ( $methods as $group )
            {
                $item = ShippingGroup::find( $group->id );
                if ( !isset( $item->id ) )
                {
                    ShippingGroup::factory()->create( [
                        "id"            => $group->id,
                        "name"          => $group->name,
                        "conditions"    => $group->bedingungen,
                        "icon"          => $group->icon,
                        "rank"          => $group->rang,
                        "shipping_text" => $group->versandtextbaustein,
                        "created_by"    => $group->erstellt_von,
                        "updated_by"    => $group->geaendert_von,
                        "updated_at"    => $group->geaendert_am,
                        "created_at"    => $group->erstellt_am,
                    ] );
                }
                else
                {
                    $item->name = $group->name;
                    $item->conditions = $group->bedingungen;
                    $item->icon = $group->icon;
                    $item->rank = $group->rang;
                    $item->shipping_text = $group->versandtextbaustein;
                    $item->updated_by = $group->geaendert_von;
                    $item->updated_at = $group->geaendert_am;
                    $item->save();
                }
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

        private function migrateShippings(): void
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Versandoptionen" );
            $sql = "SELECT
                    *
                FROM
                    versand
            ";
            $methods = DB::connection( 'old' )->select( $sql );
            foreach ( $methods as $group )
            {
                $item = Shipping::find( $group->id );
                if ( isset( $item->id ) )
                {
                    $item->rank = $group->rang;
                    $item->shipping_group_id = $group->versandgruppen_id;
                    $item->name = $group->name;
                    $item->info_shop = $group->info_shop;
                    $item->info_mail = $group->info_mail;
                    $item->info_internal = $group->info_intern;
                    $item->island_shipping = $group->inselversand;
                    $item->additions = $group->zusaetze;
                    $item->status = $group->status;
                    $item->price = $group->preis;
                    $item->calc_weight_from = $group->berechnung_kg_von;
                    $item->calc_weight_to = $group->berechnung_kg_bis;
                    $item->calc_price_from = $group->berechnung_preis_von;
                    $item->calc_price_to = $group->berechnung_preis_bis;
                    $item->conditions = $group->bedingungen;
                    $item->tax_rate = $group->steuersatz;
                    $item->updated_by = $group->geaendert_von;
                    $item->updated_at = $group->geaendert_am;
                    $item->save();
                }
                else
                {
                    Shipping::factory()->create( [
                        "id"                => $group->id,
                        "rank"              => $group->rang,
                        "shipping_group_id" => $group->versandgruppen_id,
                        "name"              => $group->name,
                        "info_shop"         => $group->info_shop,
                        "info_mail"         => $group->info_mail,
                        "info_internal"     => $group->info_intern,
                        "island_shipping"   => $group->inselversand,
                        "additions"         => $group->zusaetze,
                        "status"            => $group->status,
                        "price"             => $group->preis,
                        "calc_weight_from"  => $group->berechnung_kg_von,
                        "calc_weight_to"    => $group->berechnung_kg_bis,
                        "calc_price_from"   => $group->berechnung_preis_von,
                        "calc_price_to"     => $group->berechnung_preis_bis,
                        "conditions"        => $group->bedingungen,
                        "tax_rate"          => $group->steuersatz,
                        "created_by"        => $group->erstellt_von,
                        "updated_by"        => $group->geaendert_von,
                        "updated_at"        => $group->geaendert_am,
                        "created_at"        => $group->erstellt_am,
                    ] );
                }
                $sql = "SELECT
                        *
                    FROM
                        versand_to_land
                    WHERE
                        versand_id=" . $group->id . "
                ";
                $r = DB::connection( 'old' )->select( $sql );
                foreach ( $r as $row )
                {
                    $item = ShippingCountry::where( "shipping_id", "=", $row->versand_id )->where( "country_id", "=", $row->country_id )->get();
                    if ( !isset( $item[0]->id ) )
                    {
                        ShippingCountry::factory()->create( [ "shipping_id" => $row->versand_id, "country_id" => $row->country_id, ] );
                    }
                }
                $sql = "SELECT
                        *
                    FROM
                        versand_to_zahlarten
                    WHERE
                        versand_id=" . $group->id . "
                ";
                $r = DB::connection( 'old' )->select( $sql );
                foreach ( $r as $row )
                {
                    $item = ShippingPaymentMethod::where( "shipping_id", "=", $row->versand_id )->where( "payment_method_id", "=", $row->zahlart_id )->get();
                    if ( !isset( $item[0]->id ) )
                    {
                        ShippingPaymentMethod::factory()->create( [ "shipping_id" => $row->versand_id, "payment_method_id" => $row->zahlart_id, ] );
                    }
                }
            }
        }

        private function migrateActions(): void
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Aktionen" );
            $sql = "
                SELECT
                    *
                FROM
                    Aktionen
            ";
            $actions = DB::connection( 'old' )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $actions ) );
            $progressbar->start();
            foreach ( $actions as $action )
            {
                $actionDB = Action::find( $action->ID );
                if ( !isset( $actionDB->id ) )
                {
                    $actionDB = new Action();
                    $actionDB->id = $action->ID;
                    $actionDB->created_by = "WebanOS Laravel Upgrade";
                }
                $actionDB->headline = $action->headline;
                $actionDB->text = $action->text;
                $actionDB->rank = $action->rang;
                $actionDB->config = $action->config;
                $actionDB->category = $action->Kategorie;
                $actionDB->notes = $action->notizen;
                $actionDB->valid_from = $action->von;
                $actionDB->valid_to = $action->bis;
                $actionDB->updated_by = "WebanOS Laravel Upgrade";
                $actionDB->save();
                $this->migrateActionMedia( $actionDB->id );
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

        private function migrateDirs(): void
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Kategorien" );
            $sql = '
                SELECT 
                    *
                FROM
                    directory
            ';
            $dirs = DB::connection( 'old' )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $dirs ) );
            $progressbar->start();
            DB::statement( 'SET FOREIGN_KEY_CHECKS=0' );
            foreach ( $dirs as $row )
            {
                $dir = Directory::find( $row->ID );
                if ( isset( $dir->id ) )
                {
                    $progressbar->advance();
                    continue;
                }
                $ersteller = $row->erstellt_von;
                if ( !$ersteller )
                {
                    $ersteller = "WebanOS Laravel Upgrade";
                }
                $bearbeiter = $row->letzte_Aenderung_von;
                if ( !$bearbeiter )
                {
                    $bearbeiter = "WebanOS Laravel Upgrade";
                }
                $dir = new Directory();
                $dir->id = $row->ID;
                $dir->directory_id = $row->Father;
                $dir->name = $row->Name;
                $dir->articlemaster = $row->Artikelstamm;
                $dir->status = $row->status;
                $dir->kennung = $row->Kennung;
                $dir->description = $row->Beschreibung;
                $dir->description2 = $row->Beschreibung2;
                $dir->short_line_1 = $row->short_line_1;
                $dir->url = $row->url;
                $dir->created_at = $row->erstellt_am;
                $dir->created_by = $ersteller;
                $dir->updated_by = $bearbeiter;
                $dir->updated_at = $row->letzte_Aenderung_am;
                $dir->save();
                $this->migrateDirMedia( $dir->id );
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
            DB::statement( 'SET FOREIGN_KEY_CHECKS=1' );
        }

        private function migrateItems(): void
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Artikel" );
            $sql = '
                SELECT 
                    *
                FROM
                    artikel
                WHERE
                    father != -3 OR father IS NULL
            ';
            $items = DB::connection( 'old' )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $items ) );
            $progressbar->start();
            foreach ( $items as $row )
            {
                $ersteller = $row->erstellt_von;
                if ( !$ersteller )
                {
                    $ersteller = "WebanOS Laravel Upgrade";
                }
                $item = Item::find( $row->ID );
                if ( !isset( $item->id ) )
                {
                    $item = new Item();
                    $item->id = $row->ID;
                    $item->created_at = $row->erstellt_am;
                    $item->created_by = $ersteller;
                }
                $item->directory_id = $row->Father;
                $item->manufacturer_id = $row->hersteller;
                $item->name = $row->kurzbezeichnung;
                $item->status = $row->status;
                $item->shipping_group_id = $row->versandgruppen_id;
                $item->weight = $row->gewicht;
                $item->kennung = $row->kennung;
                $item->description = $row->beschreibung;
                $item->updated_at = $row->letzte_Aenderung_am;
                $bearbeiter = $row->letzte_Aenderung_von;
                if ( !$bearbeiter )
                {
                    $bearbeiter = "WebanOS Laravel Upgrade";
                }
                $item->updated_by = $bearbeiter;
                $item->save();
                $this->migrateItemMedia( $item->id );
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Preise" );
            $start = 0;
            $sql = "SELECT
                    MAX(id) AS start
                FROM
                    prices
            ";
            $row = DB::connection( "mysql" )->select( $sql );
            if ( $row[0]->start )
            {
                $start = $row[0]->start;
            }
            $sql = "
                SELECT
                    p.*
                FROM
                    preise p
                JOIN
                    artikel a
                ON
                    a.id=p.artikel_id
                WHERE
                    a.father >=-1
                AND
                    p.id>" . $start . "
            ";
            $prices = DB::connection( 'old' )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $prices ) );
            $progressbar->start();
            foreach ( $prices as $price )
            {
                Price::factory()->createQuietly( [
                    "id"          => $price->id,
                    "item_id"     => $price->artikel_id,
                    "preis_index" => $price->preis_index,
                    "preis"       => $price->preis,
                    "staffel"     => $price->staffel,
                    "created_at"  => $price->geaendert_am,
                    "created_by"  => $price->geaendert_von,
                    "updated_by"  => $price->geaendert_von,
                    "updated_at"  => $price->geaendert_am
                ] );
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

        public function migrateMedia(): void
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Medien" );
            $start = 0;
            $sql = "SELECT
                    MAX(id) AS start
                FROM
                    media
            ";
            $row = DB::connection( "mysql" )->select( $sql );
            if ( $row[0]->start )
            {
                $start = $row[0]->start;
            }
            $sql = "
                SELECT
                    *
                FROM
                    medien
                WHERE
                    id>" . $start . "
            ";
            $media = DB::connection( 'old' )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $media ) );
            $progressbar->start();
            foreach ( $media as $medium )
            {
                $mediumDB = new Medium();
                $mediumDB->id = $medium->id;
                $mediumDB->name = $medium->name;
                $mediumDB->folder = $medium->folder;
                $mediumDB->medium_type_id = $medium->typ;
                $mediumDB->description = $medium->beschreibung;
                if ( $medium->erstellt_am )
                {
                    $mediumDB->created_at = date( "Y-m-d H:i:s", $medium->erstellt_am );
                }
                $ersteller = $medium->erstellt_von;
                if ( !$ersteller )
                {
                    $ersteller = "WebanOS Laravel Upgrade";
                }
                $bearbeiter = $medium->letzte_aenderung_von;
                if ( !$bearbeiter )
                {
                    $bearbeiter = "WebanOS Laravel Upgrade";
                }
                $mediumDB->created_by = $ersteller;
                $mediumDB->updated_by = $bearbeiter;
                $mediumDB->save();
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

        public function migrateActionMedia( $aktionId ): void
        {
            $sql = "SELECT
                    *
                FROM
                    aktionen_medien
                WHERE
                    aktionen_id=" . $aktionId . "
            ";
            $media = DB::connection( 'old' )->select( $sql );
            foreach ( $media as $row )
            {
                $medium = ActionMedium::find( $row->id );
                if ( !isset( $medium->id ) )
                {
                    $medium = new ActionMedium();
                    $medium->id = $row->id;
                    $medium->created_by = "WebanOS Laravel Upgrade";
                }
                $medium->action_id = $row->aktionen_id;
                $medium->medium_id = $row->medien_id;
                $medium->rank = $row->rang;
                $medium->updated_by = "WebanOS Laravel Upgrade";
                $medium->save();
            }
        }

        public function migrateDirMedia( $dir ): void
        {
            $sql = "SELECT
                    *
                FROM
                    directory_medien
                WHERE
                    directory_id=" . $dir . "
            ";
            $media = DB::connection( 'old' )->select( $sql );
            foreach ( $media as $row )
            {
                $medium = DirectoryMedium::find( $row->medien_id );
                if ( isset( $medium->medien_id ) )
                {
                    continue;
                }
                $medium = new DirectoryMedium();
                $medium->directory_id = $row->directory_id;
                $medium->medium_id = $row->medien_id;
                $medium->rank = $row->rang;
                $medium->similar = $row->aehnlich;
                $medium->created_at = $row->zugeordnet_am;
                $medium->updated_at = $row->zugeordnet_am;
                $medium->created_by = "WebanOS Laravel Upgrade";
                $medium->updated_by = "WebanOS Laravel Upgrade";
                $medium->save();
            }
        }

        public function migrateItemMedia( $item ): void
        {
            $sql = "SELECT
                    *
                FROM
                    artikel_medien
                WHERE
                    artikel_id=" . $item . "
            ";
            $media = DB::connection( 'old' )->select( $sql );
            foreach ( $media as $row )
            {
                $medium = ItemMedium::find( $row->medien_id );
                if ( isset( $medium->medien_id ) )
                {
                    continue;
                }
                $medium = new ItemMedium();
                $medium->item_id = $row->artikel_id;
                $medium->medium_id = $row->medien_id;
                $medium->rank = $row->rang;
                $medium->similar = $row->aehnlich;
                $medium->created_at = $row->zugeordnet_am;
                $medium->updated_at = $row->zugeordnet_am;
                $medium->created_by = "WebanOS Laravel Upgrade";
                $medium->updated_by = "WebanOS Laravel Upgrade";
                $medium->save();
            }
        }

        private function migrateUsers(): void
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere User" );
            $start = 0;
            $sql = "SELECT
                    MAX(id) AS start
                FROM
                    users
            ";
            $row = DB::connection( "order" )->select( $sql );
            if ( $row[0]->start )
            {
                $start = $row[0]->start;
            }
            $sql = "SELECT
                    *
                FROM
                    Logins
                WHERE
                    id>" . $start . "
            ";
            $users = DB::connection( "oldOrder" )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $users ) );
            $progressbar->start();
            foreach ( $users as $oldUser )
            {
                $ersteller = $oldUser->erstellt_von;
                if ( !$ersteller )
                {
                    $ersteller = "WebanOS Laravel Upgrade";
                }
                $bearbeiter = $oldUser->letzte_Aenderung_von;
                if ( !$bearbeiter )
                {
                    $bearbeiter = "WebanOS Laravel Upgrade";
                }
                $user = new User();
                $user->id = $oldUser->ID;
                $user->email = $oldUser->E_Mail;
                $user->created_at = $oldUser->erstellt_am;
                $user->created_by = $ersteller;
                $user->updated_by = $bearbeiter;
                $user->updated_at = $oldUser->letzte_Aenderung_am;
                $user->save();
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

        private function migrateAddresses( bool $isOrder = false ): void
        {
            $typ = "Adressen";
            $table = "addresses";
            $oldTable = "adresse";
            if ( $isOrder === true )
            {
                $typ = "Bestelladressen";
                $table = "order_addresses";
                $oldTable = "bestelladresse";
            }
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere " . $typ );
            $start = 0;
            $sql = "SELECT
                    MAX(id) AS start
                FROM
                    " . $table . "
            ";
            $row = DB::connection( "order" )->select( $sql );
            if ( $row[0]->start )
            {
                $start = $row[0]->start;
            }
            $sql = "SELECT
                    *
                FROM
                    " . $oldTable . "
                WHERE
                    id>" . $start . "
            ";
            $addresses = DB::connection( "oldOrder" )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $addresses ) );
            $progressbar->start();
            foreach ( $addresses as $oldAddress )
            {
                $ersteller = "WebanOS Laravel Upgrade";
                $bearbeiter = "WebanOS Laravel Upgrade";
                if ( $isOrder === true )
                {
                    $address = new OrderAddress();
                }
                else
                {
                    $address = new Address();
                }
                $address->id = $oldAddress->id;
                $address->user_id = $oldAddress->logins_id;
                $address->salutation = $oldAddress->anrede;
                $address->pro_title = $oldAddress->pro_title;
                $address->name = $oldAddress->vorname;
                $address->lastname = $oldAddress->nachname;
                $address->company = $oldAddress->firma;
                $address->company2 = $oldAddress->firma2;
                $address->street = $oldAddress->strasse1;
                $address->houseno = $oldAddress->str_nr1;
                $address->street2 = $oldAddress->strasse2;
                $address->zip = $oldAddress->plz;
                $address->city = $oldAddress->ort;
                $address->country_id = $oldAddress->land;
                $address->state_id = $oldAddress->state;
                $address->phone = $oldAddress->telefon;
                $address->fax = $oldAddress->fax;
                $address->email = $oldAddress->email;
                $address->nettocalculation = $oldAddress->nettoberechnung;
                $address->hr_nr = $oldAddress->hr_nr;
                $address->vat_id = $oldAddress->vat_id;
                $address->vat_free = $oldAddress->mwst_befreiung;
                $address->legal_form = $oldAddress->legal_form;
                $address->comment = $oldAddress->comment;
                $address->created_at = $oldAddress->letzte_aenderung_am;
                $address->created_by = $ersteller;
                $address->updated_by = $bearbeiter;
                $address->updated_at = $oldAddress->letzte_aenderung_am;
                $address->save();
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

        private function migrateOrderAddresses(): void
        {
            $this->migrateAddresses( true );
        }

        private function migrateOrders(): void
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Bestellungen" );
            $start = 0;
            $sql = "SELECT
                    MAX(id) AS start
                FROM
                    orders
            ";
            $row = DB::connection( "order" )->select( $sql );
            if ( $row[0]->start )
            {
                $start = $row[0]->start;
            }
            $sql = "SELECT
                    *
                FROM
                    Bestellung
                WHERE
                    id>" . $start . "
            ";
            $orders = DB::connection( "oldOrder" )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $orders ) );
            $progressbar->start();
            foreach ( $orders as $oldOrder )
            {
                $paidAt = $oldOrder->bezahlt_am;
                if ( $paidAt == "0000-00-00 00:00:00" )
                {
                    $paidAt = null;
                }
                $order = new Order();
                $order->id = $oldOrder->ID;
                $order->shop_id = $oldOrder->shops_ID;
                $order->order_type_id = $oldOrder->bestellart_id;
                $order->payment_method_id = $oldOrder->zahlart_id;
                $order->user_id = $oldOrder->Login;
                $order->ship_addr_id = $oldOrder->ship_addr_id;
                $order->bill_addr_id = $oldOrder->bill_addr_id;
                $order->paid = $oldOrder->bezahlt;
                $order->paid_at = $paidAt;
                $order->paid_comment = $oldOrder->bezahlt_bemerkung;
                $order->foreign_id = $oldOrder->fremd_id;
                $order->foreign_payment_id = $oldOrder->bezahlt_fremdid;
                $order->status = $oldOrder->status;
                $order->total_amount_buffer = $oldOrder->gesamtsumme_buffer;
                $order->item_status_buffer = $oldOrder->artikelstatus_buffer;
                $order->invoice_status_buffer = $oldOrder->rechnungsstatus_buffer;
                $order->delivery_note_status_buffer = $oldOrder->lieferscheinStatus_buffer;
                $order->tax = $oldOrder->tax;
                $order->comment = $oldOrder->Bemerkung;
                $order->external_comment = $oldOrder->Bemerkung_extern;
                $order->note = $oldOrder->notiz;
                $order->additional_info = $oldOrder->zusatzInfo;
                $order->shipping_group_id = $oldOrder->versandgruppen_id;
                $order->kk_info = $oldOrder->kk_info;
                $order->created_by = $oldOrder->erstellt_von;
                $order->updated_by = $oldOrder->letzte_Aenderung_von;
                $order->updated_at = $oldOrder->letzte_Aenderung_am;
                $order->created_at = $oldOrder->erstellt_am;
                $order->save();
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

        private function migrateOrderItems(): void
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Artikel in Bestellungen" );
            $start = 0;
            $sql = "SELECT
                    MAX(id) AS start
                FROM
                    order_items
            ";
            $row = DB::connection( "order" )->select( $sql );
            if ( $row[0]->start )
            {
                $start = $row[0]->start;
            }
            $sql = "SELECT
                    *
                FROM
                    artikel_to_Bestellung
                WHERE
                    id>" . $start . "
            ";
            $orderItems = DB::connection( "oldOrder" )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $orderItems ) );
            $progressbar->start();
            foreach ( $orderItems as $oldOrderItem )
            {
                $exported = $oldOrderItem->exported;
                if ( $exported == "0000-00-00 00:00:00" )
                {
                    $exported = null;
                }
                $exported_invoice = $oldOrderItem->exported_rechnung;
                if ( $exported_invoice == "0000-00-00 00:00:00" )
                {
                    $exported_invoice = null;
                }
                $exported_delivery_note = $oldOrderItem->exported_lieferschein;
                if ( $exported_delivery_note == "0000-00-00 00:00:00" )
                {
                    $exported_delivery_note = null;
                }
                OrderItem::factory()->create( [
                    "id"                     => $oldOrderItem->ID,
                    "item_id"                => $oldOrderItem->artikel,
                    "order_id"               => $oldOrderItem->Bestellung,
                    "name"                   => $oldOrderItem->Bezeichnung,
                    "amount"                 => $oldOrderItem->Menge,
                    "price"                  => $oldOrderItem->Preis_pro_Stueck,
                    "father"                 => $oldOrderItem->father,
                    "status"                 => $oldOrderItem->status,
                    "delivery_status"        => $oldOrderItem->lieferstatus,
                    "invoice_status"         => $oldOrderItem->rechnungStatus,
                    "delivery_note_status"   => $oldOrderItem->lieferscheinStatus,
                    "foreign_id"             => $oldOrderItem->fremd_id,
                    "option_input"           => $oldOrderItem->option_eingabe,
                    "description"            => $oldOrderItem->beschreibung,
                    "rank"                   => $oldOrderItem->Rang,
                    "tax"                    => $oldOrderItem->mwst,
                    "orig_value"             => $oldOrderItem->orig_value,
                    "orig_currency"          => $oldOrderItem->orig_currency,
                    "hash"                   => $oldOrderItem->hash,
                    "exported"               => $exported,
                    "exported_invoice"       => $exported_invoice,
                    "exported_delivery_note" => $exported_delivery_note,

                ] );
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

        private function migrateSalesPortalTypes(): void
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Verkaufsportalarten" );
            $start = 0;
            $sql = "SELECT
                    MAX(id) start
                FROM
                    sales_portal_types
            ";
            $row = DB::connection( 'cms' )->select( $sql );
            if ( $row[0]->start )
            {
                $start = $row[0]->start;
            }
            $sql = "SELECT
                    *
                FROM
                    vportale_art
                WHERE
                    id>" . $start . "
            ";
            $portals = DB::connection( 'cms' )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $portals ) );
            $progressbar->start();
            foreach ( $portals as $portal )
            {
                SalesPortalType::factory()->create( [
                    "id"                   => $portal->id,
                    "type"                 => $portal->art,
                    "name"                 => $portal->bezeichnung,
                    "max_categories"       => $portal->max_categories,
                    "min_depth_category"   => $portal->min_depth_category,
                    "only_end_category"    => $portal->only_end_category,
                    "script"               => $portal->skript,
                    "script_folder"        => $portal->script_folder,
                    "commit_possibilities" => $portal->commit_posibilities,
                    "revokeable"           => $portal->stornierbar,
                ] );
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

        private function migrateSalesPortals(): void
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Verkaufsportale" );
            $start = 0;
            $sql = "SELECT
                    MAX(id) start
                FROM
                    sales_portals
            ";
            $row = DB::connection( 'mysql' )->select( $sql );
            if ( $row[0]->start )
            {
                $start = $row[0]->start;
            }
            $sql = "SELECT
                    *
                FROM
                    vportale
                WHERE
                    id>" . $start . "
            ";
            $portals = DB::connection( 'old' )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $portals ) );
            $progressbar->start();
            foreach ( $portals as $portal )
            {
                $max_preis = 0;
                $anrede = 1;
                if ( isset( $portal->anrede ) )
                {
                    $anrede = $portal->anrede;
                }
                if ( isset( $portal->max_preis ) )
                {
                    $max_preis = $portal->max_preis;
                }
                SalesPortal::factory()->create( [
                    "id"                   => $portal->id,
                    "name"                 => $portal->name,
                    "template"             => $portal->template,
                    "sales_portal_type_id" => $portal->art,
                    "sku_prefix"           => $portal->sku_prefix,
                    "price_number"         => $portal->preis_nummer,
                    "base_price"           => $portal->basis_preis,
                    "min_price"            => $portal->min_preis,
                    "max_price"            => $max_preis,
                    "digits"               => $portal->runden,
                    "standard_amount"      => $portal->standard_menge,
                    "item_url"             => $portal->artikel_url,
                    "currency"             => $portal->currency,
                    "shipping_state"       => $portal->lieferstatus,
                    "delivery"             => $portal->delivery,
                    "shipping_cost"        => $portal->shipping_cost,
                    "afterbuy"             => $portal->afterbuy,
                    "salutation"           => $anrede,
                    "commit_fields"        => $portal->commit_fields,
                    "zip"                  => $portal->plz,
                    "location"             => $portal->location,
                    "created_by"           => $portal->erstellt_von,
                    "updated_by"           => $portal->geaendert_von,
                    "created_at"           => $portal->erstellt_am,
                    "updated_at"           => $portal->geaendert_am,
                ] );
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

        private function migrateSalesPortalItems(): void
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Verkaufsportalartikel" );
            $start = 0;
            $sql = "SELECT
                    MAX(id) start
                FROM
                    sales_portal_items
            ";
            $row = DB::connection( 'mysql' )->select( $sql );
            if ( $row[0]->start )
            {
                $start = $row[0]->start;
            }
            $sql = "SELECT
                    *
                FROM
                    artikel_vportale
                WHERE
                    id>" . $start . "
            ";
            $items = DB::connection( 'old' )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $items ) );
            $progressbar->start();
            foreach ( $items as $item )
            {
                $pickup = 0;
                if ( isset( $item->pickup ) )
                {
                    $pickup = $item->pickup;
                }
                $start = $item->start;
                if ( $start == "0000-00-00 00:00:00" )
                {
                    $start = null;
                }
                $erstellt_am = $item->erstellt_am;
                if ( $erstellt_am == "0000-00-00 00:00:00" )
                {
                    $erstellt_am = null;
                }
                $geaendert_am = $item->geaendert_am;
                if ( $geaendert_am == "0000-00-00 00:00:00" )
                {
                    $geaendert_am = null;
                }
                SalesPortalItem::factory()->create( [
                    "id"                              => $item->id,
                    "sales_portal_id"                 => $item->vportale_id,
                    "item_id"                         => $item->artikel_id,
                    "sales_portal_template_id"        => $item->template_id,
                    "sku"                             => $item->sku,
                    "additions"                       => $item->zusaetze,
                    "foreign_item_id"                 => $item->fremdartikel_id,
                    "name"                            => $item->name,
                    "autochange_name"                 => $item->autochange_name,
                    "name_bold"                       => $item->name_fett,
                    "highlight"                       => $item->highlight,
                    "sub_name"                        => $item->sub_name,
                    "manufacturer"                    => $item->hersteller,
                    "autochange_manufacturer"         => $item->autochange_hersteller,
                    "ean"                             => $item->ean,
                    "autochange_ean"                  => $item->autochange_ean,
                    "mpn"                             => $item->mpn,
                    "autochange_mpn"                  => $item->autochange_mpn,
                    "description"                     => $item->beschreibung,
                    "autochange_description"          => $item->autochange_beschreibung,
                    "description_addition"            => $item->beschreibung_zusatz,
                    "autochange_description_addition" => $item->autochange_beschreibung_zusatz,
                    "price"                           => $item->preis,
                    "autochange_price"                => $item->autochange_preis,
                    "currency"                        => $item->currency,
                    "tax"                             => $item->tax,
                    "price_type"                      => $item->preisart,
                    "amount"                          => $item->menge,
                    "carrier"                         => $item->carrier,
                    "carrier_cost"                    => $item->carrier_cost,
                    "start"                           => $start,
                    "duration"                        => $item->dauer,
                    "category_1"                      => $item->kategorie_1,
                    "category_2"                      => $item->kategorie_2,
                    "category_3"                      => $item->kategorie_3,
                    "bp1"                             => $item->bp1,
                    "bp2"                             => $item->bp2,
                    "bp3"                             => $item->bp3,
                    "bp4"                             => $item->bp4,
                    "bp5"                             => $item->bp5,
                    "platin_search_1"                 => $item->platin_search_1,
                    "platin_search_2"                 => $item->platin_search_2,
                    "platin_search_3"                 => $item->platin_search_3,
                    "platin_search_4"                 => $item->platin_search_4,
                    "platin_search_5"                 => $item->platin_search_5,
                    "search_1"                        => $item->search_1,
                    "search_2"                        => $item->search_2,
                    "search_3"                        => $item->search_3,
                    "search_4"                        => $item->search_4,
                    "search_5"                        => $item->search_5,
                    "status"                          => $item->status,
                    "online_status"                   => $item->online_status,
                    "delivery_time"                   => $item->lieferzeit,
                    "pickup"                          => $pickup,
                    "last_feedback"                   => $item->last_feedback,
                    "created_by"                      => $item->erstellt_von,
                    "updated_by"                      => $item->geaendert_von,
                    "created_at"                      => $erstellt_am,
                    "updated_at"                      => $geaendert_am,
                ] );
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

        private function migratePriceAgencies(): void
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Preisagenturen" );
            $start = 0;
            $sql = "SELECT
                    MAX(id) start
                FROM
                    price_agencies
            ";
            $row = DB::connection( 'mysql' )->select( $sql );
            if ( $row[0]->start )
            {
                $start = $row[0]->start;
            }
            $sql = "SELECT
                    *
                FROM
                    Preisagentur
                WHERE
                    id>" . $start . "
            ";
            $agencies = DB::connection( 'old' )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $agencies ) );
            $progressbar->start();
            foreach ( $agencies as $manufacturer )
            {
                $letzter_Abruf_am = $manufacturer->letzter_Abruf_am;
                if ( $letzter_Abruf_am == "0000-00-00 00:00:00" )
                {
                    $letzter_Abruf_am = null;
                }
                $letzte_Aktualisierung_am = $manufacturer->letzte_Aktualisierung_am;
                if ( $letzte_Aktualisierung_am == "0000-00-00 00:00:00" )
                {
                    $letzte_Aktualisierung_am = null;
                }
                PriceAgency::factory()->create( [
                    "id"                   => $manufacturer->ID,
                    "shop_id"              => $manufacturer->shops_ID,
                    "name"                 => $manufacturer->Titel,
                    "logo_url"             => $manufacturer->logo_url,
                    "home_url"             => $manufacturer->home_url,
                    "csv_url"              => $manufacturer->csv_url,
                    "trigger_url"          => $manufacturer->trigger_URL,
                    "voting_url"           => $manufacturer->bewertungs_URL,
                    "records"              => $manufacturer->datensaetze,
                    "access_url"           => $manufacturer->Zugang_URL,
                    "access_user"          => $manufacturer->Zugang_Benutzer,
                    "access_password"      => $manufacturer->Zugang_Passwort,
                    "comment"              => $manufacturer->Bemerkung,
                    "locked_manufacturers" => $manufacturer->gesperrte_hersteller,
                    "config"               => $manufacturer->config,
                    "status"               => $manufacturer->status,
                    "only_deliverable"     => $manufacturer->nur_lieferbar,
                    "min_price"            => $manufacturer->min_preis,
                    "last_updated_at"      => $letzte_Aktualisierung_am,
                    "last_access_at"       => $letzter_Abruf_am,
                    "last_access_by"       => $manufacturer->letzter_Abruf_von,
                    "updated_at"           => $manufacturer->letzte_Aenderung_am,
                    "updated_by"           => $manufacturer->letzte_Aenderung_von,
                ] );
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

        private function migrateManufacturers(): void
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Hersteller" );
            $start = 0;
            $sql = "SELECT
                    MAX(id) start
                FROM
                    manufacturers
            ";
            $row = DB::connection( 'mysql' )->select( $sql );
            if ( $row[0]->start )
            {
                $start = $row[0]->start;
            }
            $sql = "SELECT
                    *
                FROM
                    Herstellerkatalog
                WHERE
                    id>" . $start . "
            ";
            $manufacturers = DB::connection( 'old' )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $manufacturers ) );
            $progressbar->start();
            foreach ( $manufacturers as $manufacturer )
            {
                Manufacturer::factory()->create( [
                    "id"          => $manufacturer->ID,
                    "name"        => $manufacturer->Name,
                    "description" => $manufacturer->Text,
                    "logo1"       => $manufacturer->Logo1,
                    "logo1_href"  => $manufacturer->Logo1_href,
                    "logo2"       => $manufacturer->Logo2,
                    "logo2_href"  => $manufacturer->Logo2_href,
                    "property_1"  => $manufacturer->Eigenschaft_1,
                    "property_2"  => $manufacturer->Eigenschaft_2,
                    "property_3"  => $manufacturer->Eigenschaft_2,
                    "calculation" => $manufacturer->abwKalkulation,
                    "created_at"  => $manufacturer->erstellt_am,
                    "created_by"  => $manufacturer->erstellt_von,
                    "updated_at"  => $manufacturer->letzte_Aenderung_am,
                    "updated_by"  => $manufacturer->letzte_Aenderung_von,
                ] );
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

        private function migrateTemplates(): void
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Templates" );
            $start = 0;
            $sql = "SELECT
                    MAX(id) start
                FROM
                    templates
            ";
            $row = DB::connection( 'mysql' )->select( $sql );
            if ( $row[0]->start )
            {
                $start = $row[0]->start;
            }
            $sql = "SELECT
                    *
                FROM
                    templates
                WHERE
                    id>" . $start . "
            ";
            $templates = DB::connection( 'old' )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $templates ) );
            $progressbar->start();
            foreach ( $templates as $template )
            {
                $typ = match ( $template->Typ )
                {
                    "Aktionen"     => "action",
                    "artikel"      => "item",
                    "directory"    => "directory",
                    "Artikelstamm" => "articlemaster",
                    default        => "",
                };
                Template::factory()->create( [
                    "id"             => $template->ID,
                    "shop_id"        => $template->shops_ID,
                    "name"           => $template->Name,
                    "description"    => $template->Beschreibung,
                    "template_key"   => $template->templateKey,
                    "template_value" => $template->templateValue,
                    "type"           => $typ,
                ] );
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
            $start = 0;
            $sql = "SELECT
                    MAX(id) start
                FROM
                    item_templates
            ";
            $row = DB::connection( 'mysql' )->select( $sql );
            if ( $row[0]->start )
            {
                $start = $row[0]->start;
            }
            $sql = "SELECT
                    *
                FROM
                    templates_to_artikel
                WHERE
                    id>" . $start . "
            ";
            $templates = DB::connection( 'old' )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $templates ) );
            $progressbar->start();
            foreach ( $templates as $template )
            {
                ItemTemplate::factory()->create( [
                    "id"          => $template->id,
                    "item_id"     => $template->artikel_ID,
                    "template_id" => $template->templates_ID,
                ] );
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
            $start = 0;
            $sql = "SELECT
                    MAX(id) start
                FROM
                    directory_templates
            ";
            $row = DB::connection( 'mysql' )->select( $sql );
            if ( $row[0]->start )
            {
                $start = $row[0]->start;
            }
            $sql = "SELECT
                    *
                FROM
                    templates_to_directory
                WHERE
                    id>" . $start . "
            ";
            $templates = DB::connection( 'old' )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $templates ) );
            $progressbar->start();
            foreach ( $templates as $template )
            {
                DirectoryTemplate::factory()->create( [
                    "id"           => $template->id,
                    "directory_id" => $template->directory_ID,
                    "template_id"  => $template->templates_ID,
                ] );
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

        private function migrateWebSettings(): void
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere WebSettings" );
            $sql = '
                SELECT 
                    *
                FROM
                    web_settings
            ';
            $webSettings = DB::connection( 'old' )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $webSettings ) );
            $progressbar->start();
            foreach ( $webSettings as $row )
            {
                $webSetting = WebSetting::find( $row->ID );
                if ( !isset( $webSetting->id ) )
                {
                    $webSetting = new WebSetting();
                    $webSetting->id = $row->ID;
                    $webSetting->created_at = time();
                    $webSetting->created_by = "";
                }
                $webSetting->shop_id = $row->shops_ID;
                if ( $webSetting->shop_id == 0 )
                {
                    $webSetting->shop_id = null;
                }
                $webSetting->order_type_id = $row->bestellart_id;
                $webSetting->updated_at = $row->letzte_Aenderung_am;
                $webSetting->updated_by = $row->letzte_Aenderung_von;
                $webSetting->rank = $row->Rang;
                $webSetting->name = $row->Name;
                $webSetting->type = $row->Typ;
                $webSetting->content = $row->Inhalt;
                $webSetting->fallback = $row->Fallback;
                $webSetting->save();
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }
    }