113 lines
4.8 KiB
SQL
113 lines
4.8 KiB
SQL
|
|
-- V115: 지급대상건 구성·수정 (P12 §2)
|
||
|
|
-- payment_batch / payment_batch_item 테이블
|
||
|
|
-- 메뉴 PAYMENT_TARGET (GRP_SETTLE 하위, sort_order 120)
|
||
|
|
-- 권한 READ/CREATE/UPDATE/EXECUTE + 역할부여 (V113 패턴 동일)
|
||
|
|
-- 공통코드 PAYMENT_BATCH_STATUS (V96/V111 패턴, ON CONFLICT DO NOTHING 멱등)
|
||
|
|
|
||
|
|
-- ============================================================
|
||
|
|
-- 1. payment_batch (지급대상 배치)
|
||
|
|
-- ============================================================
|
||
|
|
|
||
|
|
CREATE TABLE payment_batch (
|
||
|
|
batch_id BIGSERIAL PRIMARY KEY,
|
||
|
|
settle_month CHAR(6) NOT NULL,
|
||
|
|
batch_name VARCHAR(100) NOT NULL,
|
||
|
|
status VARCHAR(20) NOT NULL DEFAULT 'DRAFT',
|
||
|
|
total_count INT NOT NULL DEFAULT 0,
|
||
|
|
total_payable NUMERIC(15,2) NOT NULL DEFAULT 0,
|
||
|
|
created_at TIMESTAMP NOT NULL DEFAULT now(),
|
||
|
|
created_by BIGINT,
|
||
|
|
finalized_at TIMESTAMP,
|
||
|
|
finalized_by BIGINT,
|
||
|
|
updated_at TIMESTAMP,
|
||
|
|
CONSTRAINT chk_payment_batch_status CHECK (status IN ('DRAFT', 'FINALIZED', 'CANCELLED'))
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX idx_payment_batch_month_status ON payment_batch (settle_month, status);
|
||
|
|
|
||
|
|
-- ============================================================
|
||
|
|
-- 2. payment_batch_item (지급대상건)
|
||
|
|
-- ============================================================
|
||
|
|
|
||
|
|
CREATE TABLE payment_batch_item (
|
||
|
|
item_id BIGSERIAL PRIMARY KEY,
|
||
|
|
batch_id BIGINT NOT NULL REFERENCES payment_batch(batch_id),
|
||
|
|
settle_id BIGINT NOT NULL REFERENCES settle_master(settle_id),
|
||
|
|
agent_id BIGINT NOT NULL REFERENCES agent(agent_id),
|
||
|
|
payable_amount NUMERIC(15,2) NOT NULL,
|
||
|
|
included BOOLEAN NOT NULL DEFAULT true,
|
||
|
|
exclude_reason VARCHAR(300),
|
||
|
|
created_at TIMESTAMP NOT NULL DEFAULT now(),
|
||
|
|
CONSTRAINT uq_payment_batch_item UNIQUE (batch_id, settle_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX idx_payment_batch_item_batch ON payment_batch_item (batch_id);
|
||
|
|
|
||
|
|
-- ============================================================
|
||
|
|
-- 3. 메뉴 INSERT: PAYMENT_TARGET (GRP_SETTLE 하위 PAGE)
|
||
|
|
-- ============================================================
|
||
|
|
|
||
|
|
INSERT INTO menu (parent_menu_id, menu_code, menu_name, menu_type, menu_path, component_path, menu_level, sort_order)
|
||
|
|
SELECT p.menu_id, x.code, x.name, 'PAGE', x.path, x.cmpt, 2, x.sort
|
||
|
|
FROM menu p
|
||
|
|
JOIN (VALUES
|
||
|
|
('PAYMENT_TARGET', '지급대상관리', '/settle/payment-target', 'settle/PaymentTarget', 120)
|
||
|
|
) AS x(code, name, path, cmpt, sort)
|
||
|
|
ON p.menu_code = 'GRP_SETTLE'
|
||
|
|
WHERE NOT EXISTS (SELECT 1 FROM menu WHERE menu_code = x.code);
|
||
|
|
|
||
|
|
-- ============================================================
|
||
|
|
-- 4. 메뉴 권한 항목 등록 (READ / CREATE / UPDATE / EXECUTE)
|
||
|
|
-- ============================================================
|
||
|
|
|
||
|
|
INSERT INTO menu_permission (menu_id, perm_code, perm_name, sort_order)
|
||
|
|
SELECT m.menu_id, p.code, p.name, p.sort
|
||
|
|
FROM menu m
|
||
|
|
CROSS JOIN (VALUES
|
||
|
|
('READ', '조회', 10),
|
||
|
|
('CREATE', '등록', 20),
|
||
|
|
('UPDATE', '수정', 30),
|
||
|
|
('EXECUTE', '확정', 40)
|
||
|
|
) AS p(code, name, sort)
|
||
|
|
WHERE m.menu_code = 'PAYMENT_TARGET'
|
||
|
|
ON CONFLICT (menu_id, perm_code) DO NOTHING;
|
||
|
|
|
||
|
|
-- ============================================================
|
||
|
|
-- 5. 역할별 권한 부여
|
||
|
|
-- ============================================================
|
||
|
|
|
||
|
|
-- SUPER_ADMIN / ADMIN — 전체 권한 (READ / CREATE / UPDATE / EXECUTE)
|
||
|
|
INSERT INTO role_menu_permission (role_id, menu_id, perm_code, is_granted)
|
||
|
|
SELECT r.role_id, mp.menu_id, mp.perm_code, 'Y'
|
||
|
|
FROM role r
|
||
|
|
CROSS JOIN menu_permission mp
|
||
|
|
JOIN menu m ON m.menu_id = mp.menu_id
|
||
|
|
WHERE r.role_code IN ('SUPER_ADMIN', 'ADMIN')
|
||
|
|
AND m.menu_code = 'PAYMENT_TARGET'
|
||
|
|
ON CONFLICT (role_id, menu_id, perm_code) DO NOTHING;
|
||
|
|
|
||
|
|
-- MANAGER — READ 만
|
||
|
|
INSERT INTO role_menu_permission (role_id, menu_id, perm_code, is_granted)
|
||
|
|
SELECT r.role_id, mp.menu_id, mp.perm_code, 'Y'
|
||
|
|
FROM role r
|
||
|
|
CROSS JOIN menu_permission mp
|
||
|
|
JOIN menu m ON m.menu_id = mp.menu_id
|
||
|
|
WHERE r.role_code = 'MANAGER'
|
||
|
|
AND mp.perm_code = 'READ'
|
||
|
|
AND m.menu_code = 'PAYMENT_TARGET'
|
||
|
|
ON CONFLICT (role_id, menu_id, perm_code) DO NOTHING;
|
||
|
|
|
||
|
|
-- ============================================================
|
||
|
|
-- 6. 공통코드: PAYMENT_BATCH_STATUS
|
||
|
|
-- ============================================================
|
||
|
|
|
||
|
|
INSERT INTO common_code_group (group_code, group_name, description, is_system, sort_order) VALUES
|
||
|
|
('PAYMENT_BATCH_STATUS', '지급배치상태', 'DRAFT=작성중/FINALIZED=확정/CANCELLED=취소', 'Y', 450)
|
||
|
|
ON CONFLICT (group_code) DO NOTHING;
|
||
|
|
|
||
|
|
INSERT INTO common_code (group_code, code, code_name, sort_order) VALUES
|
||
|
|
('PAYMENT_BATCH_STATUS', 'DRAFT', '작성중', 10),
|
||
|
|
('PAYMENT_BATCH_STATUS', 'FINALIZED', '확정', 20),
|
||
|
|
('PAYMENT_BATCH_STATUS', 'CANCELLED', '취소', 30)
|
||
|
|
ON CONFLICT (group_code, code) DO NOTHING;
|