Files
wms-app/install.sql
T
2026-05-12 13:55:39 +07:00

591 lines
28 KiB
SQL

-- MN3 WMS — Production Install Script
-- Generated: 2026-05-12
-- Apply with: mysql -uroot -p<password> < 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;