Subversion-Projekte lars-tiefland.laravel_shop

Revision

Revision 453 | Revision 459 | Zur aktuellen Revision | 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\Item;
    use App\Models\Action;
    use App\Models\Medium;
    use App\Models\Order;
    use App\Models\OrderAddress;
    use App\Models\Price;
    use App\Models\ActionMedium;
    use App\Models\ItemMedium;
    use App\Models\DirectoryMedium;
    use App\Models\User;
    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" );
            /*$migrateDirs = true;
            if ( !$this->confirm( "Kategorien migrieren?" ) )
            {
                $migrateDirs = false;
            }
            $migrateItems = true;
            if ( !$this->confirm( "Artikel migrieren?" ) )
            {
                $migrateItems = false;
            }
            $migrateActions = true;
            if ( !$this->confirm( "Aktionen migrieren?" ) )
            {
                $migrateActions = false;
            }
            $migrateMedia = true;
            if ( !$this->confirm( "Medien migrieren?" ) )
            {
                $migrateMedia = false;
            }
            if ( $migrateActions )
            {
                $this->migrateMedia();
            }
            if ( $migrateDirs )
            {
                $this->migrateDirs();
                if ( $migrateMedia )
                {
                    $this->migrateDirMedia();
                }
            }
            if ( $migrateItems )
            {
                $this->migrateItems();
                if ( $migrateMedia )
                {
                    $this->migrateItemMedia();
                }
            }
            if ( $migrateActions )
            {
                $this->migrateActions();
                if ( $migrateMedia )
                {
                    $this->migrateActionMedia();
                }
            }*/
            $this->migrateUsers();
            $this->migrateAddresses();
            $this->migrateOrderAddresses();
            $this->migrateOrders();
            $this->migrateOrderItems();
            $this->info( date( "d.m.Y H:i:s" ) . ": Verarbeitung beendet" );
        }

        public function migrateMedia()
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Medien" );
            $sql = "
                SELECT
                    *
                FROM
                    medien
            ";
            $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();
        }

        private function migrateDirs()
        {
            $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();
            foreach ( $dirs as $row )
            {
                $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->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();
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

        public function migrateDirMedia()
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Kategorie-Bilder" );
            $sql = "SELECT
                    *
                FROM
                    directory_medien
            ";
            $media = DB::connection( 'old' )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $media ) );
            $progressbar->start();
            foreach ( $media as $row )
            {
                $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();
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

        private function migrateItems()
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Artikel" );
            $sql = '
                SELECT 
                    *
                FROM
                    artikel
                WHERE
                    father>=-1
            ';
            $dirs = DB::connection( 'old' )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $dirs ) );
            $progressbar->start();
            foreach ( $dirs as $row )
            {
                $item = new Item();
                $item->id = $row->ID;
                $item->directory_id = $row->Father;
                $item->name = $row->kurzbezeichnung;
                $item->status = $row->status;
                $item->kennung = $row->kennung;
                $item->description = $row->beschreibung;
                $item->created_at = $row->erstellt_am;
                $item->updated_at = $row->letzte_Aenderung_am;
                $ersteller = $row->erstellt_von;
                if ( !$ersteller )
                {
                    $ersteller = "WebanOS Laravel Upgrade";
                }
                $bearbeiter = $row->letzte_Aenderung_von;
                if ( !$bearbeiter )
                {
                    $bearbeiter = "WebanOS Laravel Upgrade";
                }
                $item->created_by = $ersteller;
                $item->updated_by = $bearbeiter;
                $item->save();
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Preise" );
            $sql = "
                SELECT
                    p.*
                FROM
                    preise p
                JOIN
                    artikel a
                ON
                    a.id=p.artikel_id
                WHERE
                    a.father >=-1
            ";
            $prices = DB::connection( 'old' )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $prices ) );
            $progressbar->start();
            foreach ( $prices as $price )
            {
                Price::factory()->createQuietly( [
                    "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 migrateItemMedia()
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Artikel-Bilder" );
            $sql = "SELECT
                    *
                FROM
                    artikel_medien
            ";
            $media = DB::connection( 'old' )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $media ) );
            $progressbar->start();
            foreach ( $media as $row )
            {
                $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();
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

        private function migrateActions()
        {
            $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 = new Action();
                $actionDB->id = $action->ID;
                $actionDB->headline = $action->headline;
                $actionDB->text = $action->text;
                $actionDB->rang = $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->created_by = "WebanOS Laravel Upgrade";
                $actionDB->updated_by = "WebanOS Laravel Upgrade";
                $actionDB->save();
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

        public function migrateActionMedia()
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Aktions-Bilder" );
            $sql = "SELECT
                    *
                FROM
                    aktionen_medien
            ";
            $media = DB::connection( 'old' )->select( $sql );
            $progressbar = $this->output->createProgressBar( count( $media ) );
            $progressbar->start();
            foreach ( $media as $row )
            {
                $medium = new ActionMedium();
                $medium->action_id = $row->aktionen_id;
                $medium->medium_id = $row->medien_id;
                $medium->rank = $row->rang;
                $medium->created_by = "WebanOS Laravel Upgrade";
                $medium->updated_by = "WebanOS Laravel Upgrade";
                $medium->save();
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

        private function migrateUsers()
        {
            $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 )
        {
            $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()
        {
            $this->migrateAddresses( true );
        }

        private function migrateOrders()
        {
            $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 )
            {
                $order = new Order();
                $order->id = $oldOrder->ID;
                $order->order_type_id = $oldOrder->bestellart;
                $order->save();
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

        private function migrateOrderItems()
        {
            $this->info( date( "d.m.Y H:i:s" ) . ": Migriere Artikel in Besetllungen" );
            $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 )
            {
                $progressbar->advance();
            }
            $progressbar->finish();
            $progressbar->clear();
        }

    }