Newer
Older
TillQliro / Setup / UpgradeSchema.php
@Jonas Jonsson Jonas Jonsson on 2 Apr 2024 14 KB Initial
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

namespace Qliro\QliroOne\Setup;

use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\DB\Ddl\Table;
use Qliro\QliroOne\Model\LogRecord as LogRecordModel;
use Qliro\QliroOne\Model\ResourceModel\LogRecord;
use Qliro\QliroOne\Model\Link as LinkModel;
use Qliro\QliroOne\Model\ResourceModel\Link;
use Qliro\QliroOne\Model\OrderManagementStatus as OrderManagementStatusModel;
use Qliro\QliroOne\Model\ResourceModel\OrderManagementStatus;

class UpgradeSchema implements UpgradeSchemaInterface
{
    const TABLE_QUOTE_ADDRESS = 'quote_address';
    const TABLE_SALES_ORDER = 'sales_order';
    const TABLE_SALES_INVOICE = 'sales_invoice';
    const TABLE_SALES_CREDITMEMO = 'sales_creditmemo';

    /**
     * {@inheritdoc}
     */
    public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
    {
        $setup->startSetup();

        $connection = $setup->getConnection();
        if (version_compare($context->getVersion(), '0.1.2') < 0) {
            $connection->addColumn($setup->getTable(LogRecord::TABLE_LOG), LogRecordModel::FIELD_REFERENCE, [
                'type' => Table::TYPE_TEXT,
                25,
                'comment' => 'Merchant ID',
            ]);
            $connection->addColumn($setup->getTable(LogRecord::TABLE_LOG), LogRecordModel::FIELD_TAGS, [
                'type' => Table::TYPE_TEXT,
                256,
                'comment' => 'Comma separated list of tags',
            ]);
            $connection->dropColumn($setup->getTable(LogRecord::TABLE_LOG), 'tag');
        }

        if (version_compare($context->getVersion(), '0.1.3') < 0) {
            //Quote address tables
            $connection->addColumn($setup->getTable(self::TABLE_QUOTE_ADDRESS), 'qliroone_fee', [
                    'type' => Table::TYPE_DECIMAL,
                    '12,4',
                    'default' => 0.00,
                    'nullable' => true,
                    'comment' => 'Fee Amount',
                ]);

            $connection->addColumn($setup->getTable(self::TABLE_QUOTE_ADDRESS), 'base_qliroone_fee', [
                    'type' => Table::TYPE_DECIMAL,
                    '12,4',
                    'default' => 0.00,
                    'nullable' => true,
                    'comment' => 'Base Fee Amount',
                ]);

            //Order tables
            $connection->addColumn($setup->getTable(self::TABLE_SALES_ORDER), 'qliroone_fee', [
                    'type' => Table::TYPE_DECIMAL,
                    '12,4',
                    'default' => 0.00,
                    'nullable' => true,
                    'comment' => 'Fee Amount',
                ]);

            $connection->addColumn($setup->getTable(self::TABLE_SALES_ORDER), 'base_qliroone_fee', [
                    'type' => Table::TYPE_DECIMAL,
                    '12,4',
                    'default' => 0.00,
                    'nullable' => true,
                    'comment' => 'Base Fee Amount',
                ]);

            $connection->addColumn($setup->getTable(self::TABLE_SALES_ORDER), 'qliroone_fee_refunded', [
                    'type' => Table::TYPE_DECIMAL,
                    '12,4',
                    'default' => 0.00,
                    'nullable' => true,
                    'comment' => 'Base Fee Amount Refunded',
                ]);

            $connection->addColumn($setup->getTable(self::TABLE_SALES_ORDER), 'base_qliroone_fee_refunded', [
                    'type' => Table::TYPE_DECIMAL,
                    '12,4',
                    'default' => 0.00,
                    'nullable' => true,
                    'comment' => 'Base Fee Amount Refunded',
                ]);

            $connection->addColumn($setup->getTable(self::TABLE_SALES_ORDER), 'qliroone_fee_invoiced', [
                    'type' => Table::TYPE_DECIMAL,
                    '12,4',
                    'default' => 0.00,
                    'nullable' => true,
                    'comment' => 'Fee Amount Invoiced',
                ]);

            $connection->addColumn($setup->getTable(self::TABLE_SALES_ORDER), 'base_qliroone_fee_invoiced', [
                    'type' => Table::TYPE_DECIMAL,
                    '12,4',
                    'default' => 0.00,
                    'nullable' => true,
                    'comment' => 'Base Fee Amount Invoiced',
                ]);

            //Invoice tables
            $connection->addColumn($setup->getTable(self::TABLE_SALES_INVOICE), 'qliroone_fee', [
                    'type' => Table::TYPE_DECIMAL,
                    '12,4',
                    'default' => 0.00,
                    'nullable' => true,
                    'comment' => 'Fee Amount',
                ]);

            $connection->addColumn($setup->getTable(self::TABLE_SALES_INVOICE), 'base_qliroone_fee', [
                    'type' => Table::TYPE_DECIMAL,
                    '12,4',
                    'default' => 0.00,
                    'nullable' => true,
                    'comment' => 'Base Fee Amount',
                ]);

            //Credit memo tables
            $connection->addColumn($setup->getTable(self::TABLE_SALES_CREDITMEMO), 'qliroone_fee', [
                    'type' => Table::TYPE_DECIMAL,
                    '12,4',
                    'default' => 0.00,
                    'nullable' => true,
                    'comment' => 'Fee Amount',
                ]);

            $connection->addColumn($setup->getTable(self::TABLE_SALES_CREDITMEMO), 'base_qliroone_fee', [
                    'type' => Table::TYPE_DECIMAL,
                    '12,4',
                    'default' => 0.00,
                    'nullable' => true,
                    'comment' => 'Base Fee Amount',
                ]);
            //Quote address tables
            $connection->addColumn($setup->getTable(self::TABLE_QUOTE_ADDRESS), 'qliroone_fee_tax', [
                    'type' => Table::TYPE_DECIMAL,
                    '12,4',
                    'default' => 0.00,
                    'nullable' => true,
                    'comment' => 'Fee Tax Amount',
                ]);

            $connection->addColumn($setup->getTable(self::TABLE_QUOTE_ADDRESS), 'base_qliroone_fee_tax', [
                    'type' => Table::TYPE_DECIMAL,
                    '12,4',
                    'default' => 0.00,
                    'nullable' => true,
                    'comment' => 'Base Fee Tax Amount',
                ]);

            //Order tables
            $connection->addColumn($setup->getTable(self::TABLE_SALES_ORDER), 'qliroone_fee_tax', [
                    'type' => Table::TYPE_DECIMAL,
                    '12,4',
                    'default' => 0.00,
                    'nullable' => true,
                    'comment' => 'Fee Tax Amount',

                ]);

            $connection->addColumn($setup->getTable(self::TABLE_SALES_ORDER), 'base_qliroone_fee_tax', [
                    'type' => Table::TYPE_DECIMAL,
                    '12,4',
                    'default' => 0.00,
                    'nullable' => true,
                    'comment' => 'Base Fee Tax Amount',
                ]);

            //Invoice tables
            $connection->addColumn($setup->getTable(self::TABLE_SALES_INVOICE), 'qliroone_fee_tax', [
                    'type' => Table::TYPE_DECIMAL,
                    '12,4',
                    'default' => 0.00,
                    'nullable' => true,
                    'comment' => 'Fee Tax Amount',
                ]);

            $connection->addColumn($setup->getTable(self::TABLE_SALES_INVOICE), 'base_qliroone_fee_tax', [
                    'type' => Table::TYPE_DECIMAL,
                    '12,4',
                    'default' => 0.00,
                    'nullable' => true,
                    'comment' => 'Base Fee Tax Amount',
                ]);

            //Credit memo tables
            $connection->addColumn($setup->getTable(self::TABLE_SALES_CREDITMEMO), 'qliroone_fee_tax', [
                    'type' => Table::TYPE_DECIMAL,
                    '12,4',
                    'default' => 0.00,
                    'nullable' => true,
                    'comment' => 'Fee Tax Amount',
                ]);

            $connection->addColumn($setup->getTable(self::TABLE_SALES_CREDITMEMO), 'base_qliroone_fee_tax', [
                    'type' => Table::TYPE_DECIMAL,
                    '12,4',
                    'default' => 0.00,
                    'nullable' => true,
                    'comment' => 'Base Fee Tax Amount',
                ]);
        }

        if (version_compare($context->getVersion(), '0.1.4') < 0) {
            $connection->addColumn($setup->getTable(Link::TABLE_LINK), LinkModel::FIELD_QLIRO_ORDER_STATUS, [
                'type' => Table::TYPE_TEXT,
                32,
                'comment' => 'Qliro Order Status',
            ]);
        }

        if (version_compare($context->getVersion(), '0.1.5') < 0) {
            $connection->addColumn($setup->getTable(Link::TABLE_LINK), LinkModel::FIELD_REMOTE_IP, [
                'type' => Table::TYPE_TEXT,
                32,
                'comment' => 'Client IP when link was created',
            ]);
        }

        if (version_compare($context->getVersion(), '0.1.6') < 0) {
            if (!$setup->tableExists(OrderManagementStatus::TABLE_OM_STATUS)) {
                $table = $setup->getConnection()
                    ->newTable($setup->getTable(OrderManagementStatus::TABLE_OM_STATUS))
                    ->addColumn(
                        OrderManagementStatusModel::FIELD_ID,
                        Table::TYPE_INTEGER,
                        null,
                        ['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true],
                        'Id'
                    )
                    ->addColumn(
                        OrderManagementStatusModel::FIELD_DATE,
                        Table::TYPE_TIMESTAMP,
                        null,
                        ['nullable' => false, 'default' => Table::TIMESTAMP_INIT],
                        'Date'
                    )
                    ->addColumn(
                        OrderManagementStatusModel::FIELD_TRANSACTION_ID,
                        Table::TYPE_INTEGER,
                        null,
                        ['unsigned' => true, 'nullable' => false],
                        'Payment Transaction ID'
                    )
                    ->addColumn(
                        OrderManagementStatusModel::FIELD_RECORD_TYPE,
                        Table::TYPE_TEXT,
                        25,
                        [],
                        'Record Type'
                    )
                    ->addColumn(
                        OrderManagementStatusModel::FIELD_RECORD_ID,
                        Table::TYPE_INTEGER,
                        null,
                        ['unsigned' => true, 'nullable' => false],
                        'Record ID'
                    )
                    ->addColumn(
                        OrderManagementStatusModel::FIELD_TRANSACTION_STATUS,
                        Table::TYPE_TEXT,
                        255,
                        [],
                        'Transaction Status'
                    )
                    ->addColumn(
                        OrderManagementStatusModel::FIELD_NOTIFICATION_STATUS,
                        Table::TYPE_TEXT,
                        10,
                        [],
                        'Notification Status'
                    )
                    ->addColumn(
                        OrderManagementStatusModel::FIELD_MESSAGE,
                        Table::TYPE_TEXT,
                        null,
                        [],
                        'Possible Message'
                    )
                    ->addIndex(
                        $setup->getIdxName(OrderManagementStatus::TABLE_OM_STATUS, [OrderManagementStatusModel::FIELD_DATE]),
                        [OrderManagementStatusModel::FIELD_DATE]
                    )
                    ->addIndex(
                        $setup->getIdxName(OrderManagementStatus::TABLE_OM_STATUS, [OrderManagementStatusModel::FIELD_TRANSACTION_ID]),
                        [OrderManagementStatusModel::FIELD_TRANSACTION_ID]
                    )
                    ->addIndex(
                        $setup->getIdxName(OrderManagementStatus::TABLE_OM_STATUS, [OrderManagementStatusModel::FIELD_TRANSACTION_STATUS]),
                        [OrderManagementStatusModel::FIELD_TRANSACTION_STATUS]
                    )
                    ->addIndex(
                        $setup->getIdxName(OrderManagementStatus::TABLE_OM_STATUS, [OrderManagementStatusModel::FIELD_RECORD_ID]),
                        [OrderManagementStatusModel::FIELD_RECORD_ID]
                    )
                    ->setComment('QliroOne OM Notification Statuses');
                $setup->getConnection()->createTable($table);
            }
        }

        if (version_compare($context->getVersion(), '0.1.7') < 0) {
            $connection->addColumn($setup->getTable(OrderManagementStatus::TABLE_OM_STATUS), OrderManagementStatusModel::FIELD_QLIRO_ORDER_ID, [
                'type' => Table::TYPE_INTEGER,
                'length' => 10,
                'unsigned' => true,
                'nullable' => false,
                'comment' => 'Qliro Order Id',
            ]);
        }

        if (version_compare($context->getVersion(), '0.1.8') < 0) {
            $connection->addColumn($setup->getTable(Link::TABLE_LINK), LinkModel::FIELD_PLACED_AT, [
                'type' => Table::TYPE_TIMESTAMP,
                'nullable' => true,
                'default' => null,
                'comment' => 'When pending is opened',
            ]);
        }

        if (version_compare($context->getVersion(), '1.2.3') < 0) {
            $connection->addColumn($setup->getTable(Link::TABLE_LINK), LinkModel::FIELD_UNIFAUN_SHIPPING_AMOUNT, [
                'type' => Table::TYPE_FLOAT,
                'nullable' => true,
                'default' => null,
                'comment' => 'If unifaun is used it stores the freight amount here for the shipping method to read',
            ]);
        }

        $setup->endSetup();
    }
}