/home/smartonegroup/www/system/system/controllers/schema-updates.php
<?php

$current_build = 1001;

$s_version = $config['s_version'];

$message = '';

$updates = [
    1 => [],
    2 => [],
];

$max = max(array_keys($updates));

if ($s_version != $max) {
    // update the schemas

    $next_key = $s_version + 1;

    foreach ($updates[$next_key] as $statement) {
        DB::statement($statement);
    }

    if ($next_key === 5) {
        $message .= 'Updating Permissions...' . PHP_EOL;
        addPermission('Purchase', 'purchase');
        addPermission('Suppliers', 'suppliers');
        addPermission('SMS', 'sms');
        addPermission('Support', 'support');
        addPermission('Knowledgebase', 'kb');
        $message .= 'Done!' . PHP_EOL;
        $message .= 'Adding SMS Templates...' . PHP_EOL;
        addSmsTemplate(
            'Quote Accepted: Admin Notification',
            'Quote - {{quote_id}} has been accepted. You can view this Quote- {{quote_url}}'
        );
        addSmsTemplate(
            'Quote Cancelled: Admin Notification',
            'Quote - {{quote_id}} has been Cancelled. You can view this Quote- {{quote_url}}'
        );
        $message .= 'Adding Drive Column...' . PHP_EOL;
        $t = new Schema('crm_accounts');
        $t->add_column();
        $t->add('drive', 'varchar', 50);
        $x = $t->save();
        if ($x === true) {
            $message .= 'Done!' . PHP_EOL;
        } else {
            $message .= 'Column already exist, skipped!' . PHP_EOL;
        }
        addOption('invoice_receipt_number', '0');
        addOption('allow_customer_registration', '1');
        addOption('fax_field', '0');
        addOption('show_business_number', '0');
        addOption('label_business_number', 'Business Number');
        addOption('sms', '1');
        addOption('sms_request_method', 'POST');
        addOption('sms_auth_header', '');
        addOption('sms_req_url', '');
        addOption('sms_notify_admin_new_deposit', '0');
        addOption('sms_notify_customer_signed_up', '0');
        addOption('sms_notify_customer_invoice_created', '0');
        addOption('sms_notify_customer_invoice_paid', '0');
        addOption('sms_notify_customer_payment_received', '0');
        addOption('sms_api_handler', 'Nexmo');
        addOption('sms_auth_username', '');
        addOption('sms_auth_password', '');
        addOption('sms_sender_name', 'CLX');
        addOption('sms_http_params', '');
        addOption('purchase_invoice_payment_status', '0');
        addOption('quote_confirmation_email', '1');
        addOption('client_drive', '0');
        addOption('s_version', '4');
        addOption('latest_file', '');
        addOption('invoice_show_watermark', '1');
        $t = new Schema('app_sms');
        $t->add('req_time', 'datetime');
        $t->add('sent_time', 'datetime');
        $t->add('sms_from');
        $t->add('sms_to');
        $t->add('sms');
        $t->add('driver');
        $t->add('resp');
        $t->add('status', 'varchar', 200);
        $t->add('stype', 'varchar', 200, 'Sent');
        $t->add('cid', 'int', 11);
        $t->add('aid', 'int', 11);
        $t->add('company_id', 'int', 11);
        $t->add('iid', 'int', 11);
        $t->add('trid', 'int', 11);
        $t->add('lid', 'int', 11);
        $t->add('oid', 'int', 11);
        $t->save();
        $t = new Schema('app_sms_drivers');
        $t->add('dname', 'varchar', 200);
        $t->add('handler', 'varchar', 200);
        $t->add('weburl', 'varchar', 200);
        $t->add('description');
        $t->add('url', 'varchar', 200);
        $t->add('incoming_url', 'varchar', 200);
        $t->add('method', 'varchar', 50);
        $t->add('username', 'varchar', 200);
        $t->add('password', 'varchar', 200);
        $t->add('api_key', 'varchar', 200);
        $t->add('api_secret', 'varchar', 200);
        $t->add('route', 'varchar', 200);
        $t->add('sender_id', 'varchar', 100);
        $t->add('balance', 'decimal', '14,2');
        $t->add('placeholder');
        $t->add('status', 'varchar', 100);
        $t->add('is_active', 'int', 1, '0');
        $t->add_primary_data(
            '(`id`, `dname`, `handler`, `weburl`, `description`, `url`, `incoming_url`, `method`, `username`, `password`, `api_key`, `api_secret`, `route`, `sender_id`, `balance`, `placeholder`, `status`, `is_active`) VALUES (NULL, \'custom\', \'custom\', \'http://www.example.com\', \'Your Custom Gateway\', \'http://api.example.com\', \'http://www.example.com/incoming/\', \'GET\', \'your_username\', \'your_password\', \'your_api_key\', \'your_api_secret\', \'1\', \'CloudOnex\', \'1.00\', \'{{url}}/send.php?username={{username}}&password={{password}}&from={{from}}&to={{to}}&message={{message}}\', \'Sandbox\', \'0\'), (NULL, \'test\', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \'0\')'
        );
        $t->save();
        $t = new Schema('app_sms_templates');
        $t->add('tpl', 'varchar', '200');
        $t->add('sms');
        $t->add('status', 'varchar', 200);
        $t->save();
        if (!db_table_exist('sys_purchases')) {
            ORM::execute('CREATE TABLE `sys_purchases` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `userid` int(10) NOT NULL,
  `supplier_id` int(10) DEFAULT NULL,
  `supplier_name` varchar(200) DEFAULT NULL,
  `account` varchar(200) NOT NULL,
  `cn` varchar(100) NOT NULL DEFAULT \'\',
  `invoicenum` text NOT NULL,
  `date` date DEFAULT NULL,
  `duedate` date DEFAULT NULL,
  `datepaid` datetime DEFAULT NULL,
  `subtotal` decimal(18,2) NOT NULL,
  `discount_type` varchar(1) NOT NULL DEFAULT \'f\',
  `discount_value` decimal(14,2) NOT NULL DEFAULT \'0.00\',
  `discount` decimal(14,2) NOT NULL DEFAULT \'0.00\',
  `credit` decimal(10,2) NOT NULL DEFAULT \'0.00\',
  `taxname` varchar(100) DEFAULT NULL,
  `tax` decimal(10,2) DEFAULT NULL,
  `tax2` decimal(10,2) DEFAULT NULL,
  `total` decimal(18,2) NOT NULL DEFAULT \'0.00\',
  `taxrate` decimal(10,2) DEFAULT NULL,
  `taxrate2` decimal(10,2) DEFAULT NULL,
  `status` varchar(200) DEFAULT NULL,
  `paymentmethod` text NOT NULL,
  `notes` text NOT NULL,
  `vtoken` varchar(20) NOT NULL,
  `ptoken` varchar(20) NOT NULL,
  `r` varchar(100) NOT NULL DEFAULT \'0\',
  `nd` date DEFAULT NULL,
  `eid` int(10) NOT NULL DEFAULT \'0\',
  `ename` varchar(200) NOT NULL DEFAULT \'\',
  `vid` int(11) NOT NULL DEFAULT \'0\',
  `currency` int(11) NOT NULL DEFAULT \'0\',
  `currency_symbol` varchar(10) DEFAULT NULL,
  `currency_prefix` varchar(10) DEFAULT NULL,
  `currency_suffix` varchar(10) DEFAULT NULL,
  `currency_rate` decimal(11,4) NOT NULL DEFAULT \'1.0000\',
  `recurring` tinyint(1) NOT NULL DEFAULT \'0\',
  `recurring_ends` date DEFAULT NULL,
  `last_recurring_date` date DEFAULT NULL,
  `source` varchar(200) DEFAULT NULL,
  `sale_agent` int(11) NOT NULL DEFAULT \'0\',
  `last_overdue_reminder` date DEFAULT NULL,
  `allowed_payment_methods` text,
  `billing_street` varchar(200) DEFAULT NULL,
  `billing_city` varchar(100) DEFAULT NULL,
  `billing_state` varchar(100) DEFAULT NULL,
  `billing_zip` varchar(50) DEFAULT NULL,
  `billing_country` varchar(100) DEFAULT NULL,
  `shipping_street` varchar(200) DEFAULT NULL,
  `shipping_city` varchar(100) DEFAULT NULL,
  `shipping_state` varchar(100) DEFAULT NULL,
  `shipping_zip` varchar(100) DEFAULT NULL,
  `shipping_country` varchar(100) DEFAULT NULL,
  `q_hide` tinyint(1) NOT NULL DEFAULT \'0\',
  `show_quantity_as` varchar(100) DEFAULT NULL,
  `pid` int(11) NOT NULL DEFAULT \'0\',
  `is_credit_invoice` int(1) NOT NULL DEFAULT \'0\',
  `aid` int(11) NOT NULL DEFAULT \'0\',
  `aname` varchar(200) DEFAULT NULL,
  `business_id` int(11) DEFAULT NULL,
  `receipt_number` varchar(200) DEFAULT NULL,
  `stage` varchar(200) DEFAULT \'Pending\',
  `subject` varchar(200) DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8');

            ORM::execute('CREATE TABLE `sys_purchaseitems` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `invoiceid` int(10) NOT NULL DEFAULT \'0\',
  `userid` int(10) NOT NULL,
  `type` text NOT NULL,
  `relid` int(10) NOT NULL,
  `itemcode` varchar(100) NOT NULL,
  `description` text NOT NULL,
  `qty` varchar(20) NOT NULL DEFAULT \'1\',
  `amount` decimal(14,2) NOT NULL DEFAULT \'0.00\',
  `taxed` int(1) NOT NULL,
  `tax_rate` decimal(16,2) DEFAULT NULL,
  `tax_name` varchar(200) DEFAULT NULL,
  `taxamount` decimal(10,2) NOT NULL DEFAULT \'0.00\',
  `total` decimal(14,2) NOT NULL DEFAULT \'0.00\',
  `duedate` date DEFAULT NULL,
  `paymentmethod` text NOT NULL,
  `notes` text NOT NULL,
  `business_id` int(11) DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8');
        }
        if (!db_table_exist('sys_status')) {
            ORM::execute('CREATE TABLE `sys_status` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `type` varchar(200) DEFAULT NULL,
  `name` varchar(200) DEFAULT NULL,
  `sorder` int(11) DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8');
        }
    }

    update_option('s_version', $next_key);

    $resp = [
        'continue' => true,
        'message' => $message . 'Updated to Schema: ' . $next_key,
    ];
} else {
    update_option('build', $current_build);

    $resp = [
        'continue' => false,
        'message' => 'No more update is available',
    ];
}

api_response($resp);