-- MN3 WMS — Production Install Script -- Generated: 2026-05-12 -- Apply with: mysql -uroot -p < install.sql -- -- Creates both databases from scratch (safe to re-run on an empty server). -- If the databases already exist this script will DROP and recreate every table, -- so do NOT run against a live database that has data. SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS = 0; SET SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO'; -- ============================================================ -- DATABASE: wms (system / multi-tenant) -- ============================================================ CREATE DATABASE IF NOT EXISTS `wms` CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci; USE `wms`; -- -------------------------------------------------------- -- schema_migrations (migration tracker) -- -------------------------------------------------------- DROP TABLE IF EXISTS `schema_migrations`; CREATE TABLE `schema_migrations` ( `version` varchar(64) NOT NULL, `applied_at` datetime NOT NULL DEFAULT current_timestamp(), PRIMARY KEY (`version`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; -- -------------------------------------------------------- -- company_list -- -------------------------------------------------------- DROP TABLE IF EXISTS `company_list`; CREATE TABLE `company_list` ( `company_id` int(11) NOT NULL AUTO_INCREMENT, `channel_name` varchar(100) NOT NULL DEFAULT '' COMMENT 'Unique slug used for login routing', `company_name` varchar(255) NOT NULL DEFAULT '', `company_name2` varchar(255) NOT NULL DEFAULT '' COMMENT 'Secondary name / English name', `company_logo` varchar(255) NOT NULL DEFAULT '' COMMENT 'Uploaded logo filename', `company_seal` varchar(255) NOT NULL DEFAULT '' COMMENT 'Uploaded seal/stamp filename', `branch` varchar(255) NOT NULL DEFAULT 'สำนักงานใหญ่', `branch_no` varchar(50) NOT NULL DEFAULT '', `fiscal_year` varchar(10) NOT NULL DEFAULT '', `fx` varchar(10) NOT NULL DEFAULT 'thb' COMMENT 'Default currency', `address` text NOT NULL DEFAULT '', `address2` text NOT NULL DEFAULT '', `tax_id` varchar(50) NOT NULL DEFAULT '', `prompt_pay` varchar(50) NOT NULL DEFAULT '', `entrepreneur` varchar(100) NOT NULL DEFAULT '', `email` varchar(255) NOT NULL DEFAULT '', `phone` varchar(50) NOT NULL DEFAULT '', `fax` varchar(50) NOT NULL DEFAULT '', `website` varchar(255) NOT NULL DEFAULT '', `facebook_page` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`company_id`), UNIQUE KEY `channel_name` (`channel_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; -- -------------------------------------------------------- -- company_map_user -- -------------------------------------------------------- DROP TABLE IF EXISTS `company_map_user`; CREATE TABLE `company_map_user` ( `map_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `company_id` int(11) DEFAULT NULL, `user_id` int(11) DEFAULT NULL, `role` varchar(15) NOT NULL DEFAULT 'user' COMMENT '9=creator/admin, 0=user', `not_allow` text NOT NULL, `start` varchar(50) NOT NULL, `visibility` varchar(1) NOT NULL DEFAULT '0' COMMENT '0=all, 1=own-only', `no_access_contact` text NOT NULL, `cost` int(1) NOT NULL DEFAULT 1 COMMENT '1=see cost, 0=hide cost', `lock_price` varchar(1024) NOT NULL DEFAULT '', `invite_token` varchar(64) DEFAULT NULL, `created_at` datetime DEFAULT NULL, PRIMARY KEY (`map_id`), KEY `user_id` (`user_id`), KEY `company_id` (`company_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; -- -------------------------------------------------------- -- company_setting -- -------------------------------------------------------- DROP TABLE IF EXISTS `company_setting`; CREATE TABLE `company_setting` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `company_id` int(11) NOT NULL, `setting_key` varchar(64) NOT NULL, `value` varchar(255) NOT NULL DEFAULT '', `updated_at` datetime DEFAULT NULL, `log` mediumtext DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `company_key` (`company_id`, `setting_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; -- -------------------------------------------------------- -- company_smtp -- -------------------------------------------------------- DROP TABLE IF EXISTS `company_smtp`; CREATE TABLE `company_smtp` ( `smtp_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `company_id` int(10) unsigned NOT NULL, `server` varchar(255) NOT NULL, `port` varchar(10) NOT NULL DEFAULT '587', `username` varchar(255) NOT NULL, `password` text NOT NULL, `from_name` varchar(255) NOT NULL DEFAULT '', `from_email` varchar(255) NOT NULL DEFAULT '', `encryption` enum('tls','ssl','none') NOT NULL DEFAULT 'tls', `updated_at` datetime DEFAULT NULL, PRIMARY KEY (`smtp_id`), UNIQUE KEY `uq_company_smtp` (`company_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -------------------------------------------------------- -- user -- -------------------------------------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `user_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, `status` varchar(40) NOT NULL DEFAULT 'not activated', `name` tinytext NOT NULL, `surname` tinytext NOT NULL, `address` tinytext DEFAULT NULL, `country` varchar(50) NOT NULL DEFAULT '', `profile_picture` tinytext NOT NULL, `default_company` int(11) DEFAULT 0, `language` varchar(3) NOT NULL DEFAULT 'th', `regis_date` timestamp NOT NULL DEFAULT current_timestamp(), `license` enum('owner','user') NOT NULL DEFAULT 'owner', `active` varchar(255) NOT NULL DEFAULT 'yes', `phone` varchar(50) NOT NULL DEFAULT '', `verify_token` varchar(64) DEFAULT NULL, `verify_expires_at` datetime DEFAULT NULL, `login_attempts` int(11) NOT NULL DEFAULT 0, `locked_until` datetime DEFAULT NULL, PRIMARY KEY (`user_id`), UNIQUE KEY `username` (`username`), UNIQUE KEY `email` (`email`), KEY `idx_user_verify_token` (`verify_token`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; -- -------------------------------------------------------- -- whitelist -- -------------------------------------------------------- DROP TABLE IF EXISTS `whitelist`; CREATE TABLE `whitelist` ( `list_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `cookie` varchar(32) NOT NULL, `status` int(11) NOT NULL DEFAULT 1 COMMENT '0=block, 1=wait, 2=allow', `ip` varchar(20) NOT NULL, `dt` timestamp NOT NULL DEFAULT current_timestamp(), PRIMARY KEY (`list_id`), UNIQUE KEY `cookie` (`cookie`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; -- ============================================================ -- DATABASE: wms2 (operational WMS data) -- ============================================================ CREATE DATABASE IF NOT EXISTS `wms2` CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci; USE `wms2`; -- -------------------------------------------------------- -- md_barcode -- -------------------------------------------------------- DROP TABLE IF EXISTS `md_barcode`; CREATE TABLE `md_barcode` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `company_id` int(10) unsigned NOT NULL, `barcode_type` varchar(20) NOT NULL, `barcode` varchar(320) NOT NULL, `product_sku` varchar(100) DEFAULT NULL, `lot_number` varchar(100) DEFAULT NULL, `serial_number` varchar(100) DEFAULT NULL, `warehouse_id` int(10) unsigned DEFAULT NULL, `zone` varchar(100) DEFAULT NULL, `aisle` varchar(100) DEFAULT NULL, `rack` varchar(100) DEFAULT NULL, `print_count` int(10) unsigned NOT NULL DEFAULT 0, `last_printed_dt` datetime DEFAULT NULL, `created_dt` datetime NOT NULL DEFAULT current_timestamp(), `status` tinyint(4) NOT NULL DEFAULT 1, PRIMARY KEY (`id`), UNIQUE KEY `company_id_barcode` (`company_id`, `barcode`), KEY `company_id_type` (`company_id`, `barcode_type`), KEY `company_id_product_lot` (`company_id`, `product_sku`, `lot_number`), KEY `company_id_location` (`company_id`, `warehouse_id`, `zone`, `aisle`, `rack`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; -- -------------------------------------------------------- -- md_contact -- -------------------------------------------------------- DROP TABLE IF EXISTS `md_contact`; CREATE TABLE `md_contact` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `company_id` int(11) NOT NULL DEFAULT 0, `contact_name` varchar(255) NOT NULL, `tax_id` varchar(255) NOT NULL, `organization` varchar(255) NOT NULL, `branch` varchar(255) NOT NULL, `contact_type` int(11) unsigned NOT NULL, `billing_address` text NOT NULL, `shipping_location` varchar(255) NOT NULL, `shipping_address` text NOT NULL, `remark` text NOT NULL, `contact_image` mediumtext NOT NULL, `status` int(1) unsigned NOT NULL DEFAULT 1 COMMENT '0=inactive, 1=active', `log` mediumtext NOT NULL DEFAULT '{}', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; -- -------------------------------------------------------- -- md_contact_type -- -------------------------------------------------------- DROP TABLE IF EXISTS `md_contact_type`; CREATE TABLE `md_contact_type` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `company_id` int(11) NOT NULL DEFAULT 0, `contact_type` varchar(255) NOT NULL DEFAULT '', `description` text NOT NULL DEFAULT '', `status` int(1) NOT NULL DEFAULT 1 COMMENT '0=inactive, 1=active', `log` mediumtext NOT NULL DEFAULT '{}', PRIMARY KEY (`id`), UNIQUE KEY `company_id_product_id` (`company_id`, `contact_type`), KEY `company_id` (`company_id`), KEY `product_id` (`contact_type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; -- -------------------------------------------------------- -- md_lot -- -------------------------------------------------------- DROP TABLE IF EXISTS `md_lot`; CREATE TABLE `md_lot` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `company_id` int(10) unsigned NOT NULL, `product_sku` varchar(100) NOT NULL, `lot_number` varchar(100) NOT NULL, `expiry_date` date NOT NULL, `description` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `company_id_product_sku_lot_number` (`company_id`, `product_sku`, `lot_number`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; -- -------------------------------------------------------- -- md_product -- -------------------------------------------------------- DROP TABLE IF EXISTS `md_product`; CREATE TABLE `md_product` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `company_id` int(11) NOT NULL DEFAULT 0, `product_name` varchar(255) NOT NULL DEFAULT '', `sku` varchar(255) NOT NULL DEFAULT '', `barcode` varchar(64) DEFAULT NULL, `price` decimal(18,4) NOT NULL DEFAULT 0.0000, `cost_price` decimal(15,2) NOT NULL DEFAULT 0.00, `uom` varchar(20) NOT NULL DEFAULT 'pcs', `min_stock` decimal(18,4) NOT NULL DEFAULT 0.0000, `reorder_point` decimal(18,4) NOT NULL DEFAULT 0.0000, `category` int(11) NOT NULL DEFAULT 0, `product_image` text NOT NULL DEFAULT '', `description` text NOT NULL DEFAULT '', `status` int(1) NOT NULL DEFAULT 1 COMMENT '0=inactive, 1=active', `log` mediumtext NOT NULL DEFAULT '{}', PRIMARY KEY (`id`), UNIQUE KEY `company_id_product_id` (`company_id`, `product_name`), KEY `company_id` (`company_id`), KEY `product_id` (`product_name`), KEY `idx_product_barcode` (`company_id`, `barcode`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; -- -------------------------------------------------------- -- md_product_category -- -------------------------------------------------------- DROP TABLE IF EXISTS `md_product_category`; CREATE TABLE `md_product_category` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `company_id` int(11) NOT NULL DEFAULT 0, `category` varchar(255) NOT NULL DEFAULT '', `slug` varchar(255) NOT NULL DEFAULT '', `description` text NOT NULL DEFAULT '', `status` int(1) NOT NULL DEFAULT 1 COMMENT '0=inactive, 1=active', `log` mediumtext NOT NULL DEFAULT '{}', PRIMARY KEY (`id`), UNIQUE KEY `company_id_product_id` (`company_id`, `category`), KEY `company_id` (`company_id`), KEY `product_id` (`category`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; -- -------------------------------------------------------- -- md_rack -- -------------------------------------------------------- DROP TABLE IF EXISTS `md_rack`; CREATE TABLE `md_rack` ( `id` int(11) NOT NULL AUTO_INCREMENT, `company_id` int(11) NOT NULL, `td_stock_id` int(11) NOT NULL, `warehouse` int(11) NOT NULL, `storage_id` int(11) NOT NULL, `zone` varchar(10) NOT NULL, `aisle` varchar(10) NOT NULL, `rack` varchar(10) NOT NULL, `product_sku` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_rack_location` (`company_id`, `warehouse`, `zone`, `aisle`, `rack`), KEY `idx_storage` (`storage_id`), KEY `idx_sku` (`company_id`, `product_sku`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -- -------------------------------------------------------- -- md_rack_log -- -------------------------------------------------------- DROP TABLE IF EXISTS `md_rack_log`; CREATE TABLE `md_rack_log` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `company_id` int(10) NOT NULL, `md_rack_id` int(10) unsigned NOT NULL, `user_id` int(10) unsigned DEFAULT NULL, `dt` datetime NOT NULL DEFAULT current_timestamp(), `login` datetime DEFAULT NULL, `action` enum('occupy','release','transfer_in','transfer_out') NOT NULL, `product_sku` varchar(100) DEFAULT NULL, `td_stock_id` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_rack` (`company_id`, `md_rack_id`), KEY `idx_user` (`company_id`, `user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -- -------------------------------------------------------- -- md_sku_barcode_label -- -------------------------------------------------------- DROP TABLE IF EXISTS `md_sku_barcode_label`; CREATE TABLE `md_sku_barcode_label` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `company_id` int(10) unsigned NOT NULL, `product_sku` varchar(100) NOT NULL, `lot_number` varchar(100) NOT NULL, `serial_number` varchar(100) NOT NULL, `barcode` varchar(320) NOT NULL, `created_dt` datetime NOT NULL DEFAULT current_timestamp(), PRIMARY KEY (`id`), UNIQUE KEY `company_id_barcode` (`company_id`, `barcode`), KEY `company_id_product_lot` (`company_id`, `product_sku`, `lot_number`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; -- -------------------------------------------------------- -- md_storage -- -------------------------------------------------------- DROP TABLE IF EXISTS `md_storage`; CREATE TABLE `md_storage` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `company_id` int(11) NOT NULL DEFAULT 0, `warehouse` varchar(255) NOT NULL DEFAULT '', `zone` text NOT NULL DEFAULT '', `aisle_from` varchar(255) NOT NULL DEFAULT '', `aisle_to` varchar(255) NOT NULL DEFAULT '', `rack_from` varchar(255) NOT NULL DEFAULT '', `rack_to` varchar(255) NOT NULL DEFAULT '', `description` text NOT NULL DEFAULT '', `status` int(1) NOT NULL DEFAULT 1 COMMENT '0=inactive, 1=active', `log` mediumtext NOT NULL DEFAULT '{}', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; -- -------------------------------------------------------- -- md_warehouse -- -------------------------------------------------------- DROP TABLE IF EXISTS `md_warehouse`; CREATE TABLE `md_warehouse` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `company_id` int(11) NOT NULL DEFAULT 0, `warehouse_name` varchar(255) NOT NULL DEFAULT '', `location` text NOT NULL DEFAULT '', `manager` int(11) NOT NULL DEFAULT 0, `description` text NOT NULL DEFAULT '', `status` int(1) NOT NULL DEFAULT 1 COMMENT '0=inactive, 1=active', `log` mediumtext NOT NULL DEFAULT '{}', PRIMARY KEY (`id`), UNIQUE KEY `company_id_warehouse_name` (`company_id`, `warehouse_name`), KEY `company_id` (`company_id`), KEY `product_id` (`warehouse_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; -- -------------------------------------------------------- -- td_invoice -- -------------------------------------------------------- DROP TABLE IF EXISTS `td_invoice`; CREATE TABLE `td_invoice` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `company_id` int(11) NOT NULL DEFAULT 0, `uuid` varchar(32) NOT NULL DEFAULT '', `doc_type` varchar(20) NOT NULL DEFAULT 'invoice' COMMENT 'invoice|credit_note|debit_note', `invoice_number` varchar(50) NOT NULL DEFAULT '' COMMENT 'INV-YYYYMMDD-XXXX / CN-... / DN-...', `ref_invoice_id` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '0 for original invoices', `order_id` int(11) unsigned NOT NULL DEFAULT 0, `contact_id` int(11) NOT NULL DEFAULT 0, `issued_date` date DEFAULT NULL, `due_date` date DEFAULT NULL, `subtotal` decimal(18,4) NOT NULL DEFAULT 0.0000, `discount` decimal(18,4) NOT NULL DEFAULT 0.0000, `tax` decimal(18,4) NOT NULL DEFAULT 0.0000, `shipping_fee` decimal(18,4) NOT NULL DEFAULT 0.0000, `grand_total` decimal(18,4) NOT NULL DEFAULT 0.0000, `items` mediumtext NOT NULL DEFAULT '[]', `status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0=draft 1=issued 2=paid 3=overdue 4=void', `notes` text NOT NULL DEFAULT '', `log` mediumtext NOT NULL DEFAULT '{}', PRIMARY KEY (`id`), KEY `company_id` (`company_id`), KEY `order_id` (`order_id`), KEY `contact_id` (`contact_id`), KEY `invoice_number` (`invoice_number`), KEY `ref_invoice_id` (`ref_invoice_id`), KEY `doc_type` (`doc_type`), KEY `status` (`status`), KEY `due_date` (`due_date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; -- -------------------------------------------------------- -- td_order -- -------------------------------------------------------- DROP TABLE IF EXISTS `td_order`; CREATE TABLE `td_order` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `company_id` int(11) NOT NULL DEFAULT 0, `uuid` varchar(32) NOT NULL DEFAULT '', `order_number` varchar(50) NOT NULL DEFAULT '' COMMENT 'ORD-YYYYMMDD-XXXX', `contact_id` int(11) NOT NULL DEFAULT 0, `order_date` date DEFAULT NULL, `status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '-1=cancelled 0=draft 1=confirmed 2=processing 3=completed', `payment_status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0=unpaid 1=paid 2=partial 3=refunded', `subtotal` decimal(18,4) NOT NULL DEFAULT 0.0000, `discount` decimal(18,4) NOT NULL DEFAULT 0.0000, `tax` decimal(18,4) NOT NULL DEFAULT 0.0000, `shipping_fee` decimal(18,4) NOT NULL DEFAULT 0.0000, `shipping_tracking_number` varchar(100) DEFAULT NULL, `grand_total` decimal(18,4) NOT NULL DEFAULT 0.0000, `items` mediumtext NOT NULL DEFAULT '[]', `notes` text NOT NULL DEFAULT '', `log` mediumtext NOT NULL DEFAULT '{}', `created_at` datetime DEFAULT NULL, PRIMARY KEY (`id`), KEY `company_id` (`company_id`), KEY `contact_id` (`contact_id`), KEY `order_number` (`order_number`), KEY `status` (`status`), KEY `order_date` (`order_date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; -- -------------------------------------------------------- -- td_purchase_order -- -------------------------------------------------------- DROP TABLE IF EXISTS `td_purchase_order`; CREATE TABLE `td_purchase_order` ( `id` int(11) NOT NULL AUTO_INCREMENT, `company_id` int(11) NOT NULL, `uuid` varchar(64) NOT NULL, `po_number` varchar(32) NOT NULL, `contact_id` int(11) DEFAULT NULL, `po_date` date NOT NULL, `expected_date` date DEFAULT NULL, `warehouse_id` int(11) NOT NULL, `status` tinyint(4) NOT NULL DEFAULT 0, `payment_status` tinyint(4) NOT NULL DEFAULT 0, `items` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL CHECK (json_valid(`items`)), `subtotal` decimal(15,2) NOT NULL DEFAULT 0.00, `discount` decimal(15,2) NOT NULL DEFAULT 0.00, `tax` decimal(15,2) NOT NULL DEFAULT 0.00, `shipping_fee` decimal(15,2) NOT NULL DEFAULT 0.00, `grand_total` decimal(15,2) NOT NULL DEFAULT 0.00, `notes` text DEFAULT NULL, `log` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`log`)), `created_at` datetime NOT NULL, PRIMARY KEY (`id`), KEY `idx_po_company` (`company_id`), KEY `idx_po_status` (`company_id`, `status`), KEY `idx_po_contact` (`company_id`, `contact_id`), KEY `idx_po_date` (`company_id`, `po_date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -------------------------------------------------------- -- td_return -- -------------------------------------------------------- DROP TABLE IF EXISTS `td_return`; CREATE TABLE `td_return` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `company_id` int(11) NOT NULL DEFAULT 0, `uuid` varchar(32) NOT NULL DEFAULT '', `return_number` varchar(50) NOT NULL DEFAULT '' COMMENT 'RET-YYYYMMDD-XXXX', `order_id` int(11) unsigned NOT NULL DEFAULT 0, `invoice_id` int(11) unsigned NOT NULL DEFAULT 0, `contact_id` int(11) NOT NULL DEFAULT 0, `return_date` date DEFAULT NULL, `status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '-1=cancelled 0=draft 1=confirmed', `reason` text NOT NULL DEFAULT '', `refund_amount` decimal(18,4) NOT NULL DEFAULT 0.0000, `items` mediumtext NOT NULL DEFAULT '[]', `notes` text NOT NULL DEFAULT '', `log` mediumtext NOT NULL DEFAULT '{}', PRIMARY KEY (`id`), KEY `company_id` (`company_id`), KEY `order_id` (`order_id`), KEY `invoice_id` (`invoice_id`), KEY `contact_id` (`contact_id`), KEY `return_number` (`return_number`), KEY `status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; -- -------------------------------------------------------- -- td_stock (generic / fallback; warehouse tables below) -- -------------------------------------------------------- DROP TABLE IF EXISTS `td_stock`; CREATE TABLE `td_stock` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `ref_id` int(11) unsigned NOT NULL, `company_id` int(11) NOT NULL DEFAULT 0, `uuid` varchar(20) NOT NULL, `type` varchar(20) NOT NULL, `ref_warehouse` varchar(20) NOT NULL COMMENT 'related warehouse table', `date` datetime DEFAULT NULL, `product_sku` varchar(255) NOT NULL DEFAULT '0', `lot_number` varchar(255) NOT NULL, `serial_number` varchar(255) NOT NULL, `source` varchar(255) NOT NULL, `source_id` int(11) NOT NULL DEFAULT 0, `in` decimal(18,4) NOT NULL DEFAULT 0.0000, `out` decimal(18,4) NOT NULL DEFAULT 0.0000, `price` decimal(18,4) NOT NULL DEFAULT 0.0000, `zone` varchar(255) NOT NULL DEFAULT '', `aisle` varchar(255) NOT NULL DEFAULT '', `rack` varchar(255) NOT NULL DEFAULT '', `contact_id` int(11) NOT NULL DEFAULT 0, `description` text NOT NULL DEFAULT '', `status` int(3) NOT NULL DEFAULT 0 COMMENT '0=draft, 1=approved', `log` mediumtext NOT NULL DEFAULT '{}', PRIMARY KEY (`id`), KEY `company_id` (`company_id`), KEY `product_id` (`product_sku`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; -- -------------------------------------------------------- -- td_stock_1 (warehouse 1) -- -------------------------------------------------------- DROP TABLE IF EXISTS `td_stock_1`; CREATE TABLE `td_stock_1` LIKE `td_stock`; -- -------------------------------------------------------- -- td_stock_2 (warehouse 2) -- -------------------------------------------------------- DROP TABLE IF EXISTS `td_stock_2`; CREATE TABLE `td_stock_2` LIKE `td_stock`; -- -------------------------------------------------------- -- td_stock_3 (warehouse 3) -- -------------------------------------------------------- DROP TABLE IF EXISTS `td_stock_3`; CREATE TABLE `td_stock_3` LIKE `td_stock`; -- -------------------------------------------------------- -- warehouse_balance -- -------------------------------------------------------- DROP TABLE IF EXISTS `warehouse_balance`; CREATE TABLE `warehouse_balance` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `company_id` int(11) unsigned NOT NULL DEFAULT 0, `warehouse_id` int(11) unsigned NOT NULL DEFAULT 0, `product_sku` varchar(255) NOT NULL DEFAULT '', `month` varchar(10) NOT NULL, `total_in` decimal(18,4) NOT NULL DEFAULT 0.0000, `total_out` decimal(18,4) NOT NULL DEFAULT 0.0000, PRIMARY KEY (`id`), UNIQUE KEY `company_id_warehouse_id_product_sku_month` (`company_id`, `warehouse_id`, `product_sku`, `month`), KEY `company_id` (`company_id`), KEY `product_id` (`warehouse_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; SET FOREIGN_KEY_CHECKS = 1; SET UNIQUE_CHECKS = 1;