591 lines
28 KiB
SQL
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;
|