-- ============================================================
-- Модуль «Курьеры» — таблицы
-- Запускать в phpMyAdmin на базе dildesto_podotchet, вкладка SQL.
-- Выполнять целиком, один раз.
-- ============================================================

-- Курьеры. ext=1 — внешняя служба (Яндекс.Доставка): с неё
-- удержание не берётся, это стоимость услуги, а не зарплата.
CREATE TABLE IF NOT EXISTS ob_cour_staff (
  id         INT AUTO_INCREMENT PRIMARY KEY,
  name       VARCHAR(120) NOT NULL,
  ext        TINYINT NOT NULL DEFAULT 0,
  active     TINYINT NOT NULL DEFAULT 1,
  sort_key   INT NOT NULL DEFAULT 0,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY uq_cour_name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Виды работ. Список открытый: пустой kind = обычная клиентская
-- доставка, остальные заводятся по факту.
CREATE TABLE IF NOT EXISTS ob_cour_kinds (
  id        INT AUTO_INCREMENT PRIMARY KEY,
  name      VARCHAR(60) NOT NULL,
  label     VARCHAR(60) NOT NULL DEFAULT '',
  sort_key  INT NOT NULL DEFAULT 0,
  archived  TINYINT NOT NULL DEFAULT 0,
  UNIQUE KEY uq_kind_name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Журнал доставок: одна строка = одна поездка.
-- order_id пустой у внутренних задач (развозка, закуп и т.п.).
CREATE TABLE IF NOT EXISTS ob_cour_rows (
  id         INT AUTO_INCREMENT PRIMARY KEY,
  d          DATE NOT NULL,
  staff_id   INT NOT NULL,
  order_id   VARCHAR(40) NOT NULL DEFAULT '',
  addr       VARCHAR(255) NOT NULL DEFAULT '',
  sum        DECIMAL(12,2) NOT NULL DEFAULT 0,
  kind       VARCHAR(60) NOT NULL DEFAULT '',
  note       VARCHAR(255) NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  INDEX idx_cr_date (d),
  INDEX idx_cr_staff (staff_id, d),
  INDEX idx_cr_order (order_id),
  INDEX idx_cr_kind (kind),
  CONSTRAINT fk_cr_staff FOREIGN KEY (staff_id) REFERENCES ob_cour_staff(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Недели. Неделя = воскресенье–суббота, week_start — воскресенье.
-- hold_pct фиксируется в момент оплаты: если процент потом
-- поменяют, закрытые недели не пересчитаются задним числом.
CREATE TABLE IF NOT EXISTS ob_cour_weeks (
  week_start DATE PRIMARY KEY,
  paid       TINYINT NOT NULL DEFAULT 0,
  hold_pct   DECIMAL(5,2) NOT NULL DEFAULT 6,
  paid_on    DATE NULL,
  paid_by    VARCHAR(120) NULL,
  note       VARCHAR(255) NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Настройки модуля: процент удержания по умолчанию, шаблоны ссылок.
CREATE TABLE IF NOT EXISTS ob_cour_settings (
  k VARCHAR(40) PRIMARY KEY,
  v VARCHAR(255) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT IGNORE INTO ob_cour_settings (k, v) VALUES
('hold_pct',   '6'),
('link_bitrix','https://portal.desso-flowers.kz/crm/deal/details/{id}/'),
('link_sales', 'https://dildes.top/sales/#order={id}'),
('bx_funnels', '0,1');

-- Виды работ из прототипа. Список пополняется прямо в интерфейсе.
INSERT IGNORE INTO ob_cour_kinds (name, label, sort_key) VALUES
('маркетинг',      'Маркетинг',        1),
('развозка',       'Развозка',         2),
('спец',           'Спец-задания',     3),
('пригласительный','Пригласительные',  4),
('свитс',          'Свитс',            5),
('поставка цветов','Поставка цветов',  6),
('сьемка',         'Съёмка',           7),
('закуп',          'Закуп',            8),
('негатив',        'Негатив',          9),
('парфюм',         'Парфюм',          10),
('ваза',           'Ваза',            11),
('накладной',      'Накладной',       12);

-- Внешняя служба заводится сразу, остальные курьеры — в интерфейсе.
INSERT IGNORE INTO ob_cour_staff (name, ext, active, sort_key) VALUES
('Яндекс.Доставка', 1, 1, 100);

-- Раздел доступов «courier» и роль «logist»
ALTER TABLE ob_users  MODIFY role VARCHAR(20) NOT NULL DEFAULT 'operator';
ALTER TABLE ob_access MODIFY section VARCHAR(32) NOT NULL;

-- Проверка
SELECT 'staff' t, COUNT(*) n FROM ob_cour_staff
UNION ALL SELECT 'kinds', COUNT(*) FROM ob_cour_kinds
UNION ALL SELECT 'settings', COUNT(*) FROM ob_cour_settings;
