1798 lines
62 KiB
PL/PgSQL
1798 lines
62 KiB
PL/PgSQL
-- Downloaded from: https://github.com/jeffchang001/ee-midd/blob/888fbe7137741eefd67414ab9d580964282d1256/sql/schema.sql
|
|
--
|
|
-- PostgreSQL database dump
|
|
--
|
|
|
|
-- Dumped from database version 14.13
|
|
-- Dumped by pg_dump version 14.13
|
|
|
|
SET statement_timeout = 0;
|
|
SET lock_timeout = 0;
|
|
SET idle_in_transaction_session_timeout = 0;
|
|
SET client_encoding = 'UTF8';
|
|
SET standard_conforming_strings = on;
|
|
SELECT pg_catalog.set_config('search_path', '', false);
|
|
SET check_function_bodies = false;
|
|
SET xmloption = content;
|
|
SET client_min_messages = warning;
|
|
SET row_security = off;
|
|
SET search_path TO public, pg_catalog;
|
|
|
|
--
|
|
-- Name: find_approval_manager(character varying, character varying); Type: FUNCTION; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE FUNCTION public.find_approval_manager(p_employee_no character varying, p_tree_type character varying DEFAULT '2'::character varying) RETURNS TABLE(manager_employee_no character varying, manager_full_name character varying, manager_org_code character varying, manager_org_name character varying)
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
DECLARE
|
|
v_org_code VARCHAR;
|
|
v_current_org_code VARCHAR; -- 用來儲存當前檢查的組織編號
|
|
v_employee_no VARCHAR;
|
|
v_manager_employee_no VARCHAR;
|
|
v_manager_full_name VARCHAR;
|
|
v_manager_org_code VARCHAR;
|
|
v_manager_org_name VARCHAR;
|
|
BEGIN
|
|
-- Find the employee's organization code based on the tree type
|
|
SELECT
|
|
CASE
|
|
WHEN p_tree_type = '0' THEN formula_org_code
|
|
WHEN p_tree_type = '1' THEN function_org_code
|
|
WHEN p_tree_type = '2' THEN form_org_code
|
|
END
|
|
INTO v_org_code
|
|
FROM api_employee_info
|
|
WHERE employee_no = p_employee_no;
|
|
|
|
-- 儲存原始組織編號
|
|
v_current_org_code := v_org_code;
|
|
|
|
-- 使用 LOOP 持續往上尋找直到找到不同組織的主管
|
|
LOOP
|
|
-- Find the manager of the current department
|
|
SELECT aom.employee_no, aom.full_name, aom.org_code, ao.org_name
|
|
INTO v_manager_employee_no, v_manager_full_name, v_manager_org_code, v_manager_org_name
|
|
FROM api_organization_manager aom
|
|
JOIN api_organization ao ON aom.org_code = ao.org_code
|
|
WHERE aom.org_code = v_current_org_code
|
|
LIMIT 1;
|
|
|
|
-- 如果找不到主管,退出循環
|
|
IF v_manager_employee_no IS NULL THEN
|
|
EXIT;
|
|
END IF;
|
|
|
|
-- 如果找到的主管不是自己 且 組織編號與原始組織不同,退出循環
|
|
IF v_manager_employee_no != p_employee_no AND v_manager_org_code != v_org_code THEN
|
|
EXIT;
|
|
END IF;
|
|
|
|
-- 找上層組織編號
|
|
SELECT aor.parent_org_code
|
|
INTO v_current_org_code
|
|
FROM api_organization_relation aor
|
|
WHERE aor.org_code = v_current_org_code
|
|
AND aor.org_tree_type = p_tree_type;
|
|
|
|
-- 如果找不到上層組織,退出循環
|
|
IF v_current_org_code IS NULL THEN
|
|
EXIT;
|
|
END IF;
|
|
END LOOP;
|
|
|
|
-- Return the result
|
|
RETURN QUERY SELECT v_manager_employee_no, v_manager_full_name, v_manager_org_code, v_manager_org_name;
|
|
END;
|
|
$$;
|
|
|
|
|
|
ALTER FUNCTION public.find_approval_manager(p_employee_no character varying, p_tree_type character varying) OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: get_actived_org_tree(character varying); Type: FUNCTION; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE FUNCTION public.get_actived_org_tree(p_org_tree_type character varying) RETURNS TABLE(id bigint, company_code character varying, company_party_id bigint, created_date timestamp with time zone, data_created_date timestamp with time zone, data_created_user character varying, data_modified_date timestamp with time zone, data_modified_user character varying, org_code character varying, org_name character varying, org_tree_type character varying, organization_relation_id bigint, parent_org_code character varying, status character varying, tenant_id character varying)
|
|
LANGUAGE sql
|
|
AS $_$
|
|
SELECT r.*
|
|
FROM public.api_organization o
|
|
JOIN public.api_organization_relation r
|
|
ON o.org_code = r.org_code
|
|
WHERE
|
|
-- 若為空字串,則不加任何 org_tree_type 的限制
|
|
($1 = '' OR r.org_tree_type = $1);
|
|
$_$;
|
|
|
|
|
|
ALTER FUNCTION public.get_actived_org_tree(p_org_tree_type character varying) OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: get_employee_no_by_org_hierarchy(character varying, character varying); Type: FUNCTION; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE FUNCTION public.get_employee_no_by_org_hierarchy(p_employee_no character varying, p_org_tree_type character varying) RETURNS TABLE(employee_no character varying, full_name character varying, english_name character varying, email_address character varying, hire_date timestamp with time zone, job_title_name character varying, formula_org_code character varying, formula_org_name character varying, org_code character varying, org_name character varying, parent_org_code character varying, org_level integer)
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
DECLARE
|
|
v_formula_org_code VARCHAR(20);
|
|
BEGIN
|
|
-- 首先獲取員工的 formula_org_code
|
|
SELECT ei.formula_org_code INTO v_formula_org_code
|
|
FROM public.api_employee_info ei
|
|
WHERE ei.employee_no = p_employee_no;
|
|
|
|
-- 如果找不到員工,返回空結果
|
|
IF v_formula_org_code IS NULL THEN
|
|
RETURN;
|
|
END IF;
|
|
|
|
RETURN QUERY
|
|
WITH RECURSIVE org_hierarchy AS (
|
|
-- 基礎案例:從員工的 formula_org_code 開始
|
|
SELECT
|
|
ar.org_code,
|
|
ar.org_name,
|
|
ar.parent_org_code,
|
|
1 AS org_level
|
|
FROM public.api_organization_relation ar
|
|
WHERE ar.org_code = v_formula_org_code AND ar.org_tree_type = p_org_tree_type --應該是不同 org type 要參照不同個 員工欄位
|
|
|
|
UNION ALL
|
|
|
|
-- 遞迴案例:查找上層組織
|
|
SELECT
|
|
ar.org_code,
|
|
ar.org_name,
|
|
ar.parent_org_code,
|
|
oh.org_level + 1
|
|
FROM public.api_organization_relation ar
|
|
JOIN org_hierarchy oh ON ar.org_code = oh.parent_org_code
|
|
WHERE ar.org_tree_type = p_org_tree_type
|
|
)
|
|
SELECT
|
|
ei.employee_no,
|
|
ei.full_name,
|
|
ei.english_name,
|
|
ei.email_address,
|
|
ei.hire_date,
|
|
ei.job_title_name,
|
|
ei.formula_org_code,
|
|
ei.formula_org_name,
|
|
oh.org_code,
|
|
oh.org_name,
|
|
oh.parent_org_code,
|
|
oh.org_level
|
|
FROM
|
|
public.api_employee_info ei
|
|
CROSS JOIN org_hierarchy oh
|
|
WHERE
|
|
ei.employee_no = p_employee_no
|
|
ORDER BY
|
|
oh.org_level;
|
|
END;
|
|
$$;
|
|
|
|
|
|
ALTER FUNCTION public.get_employee_no_by_org_hierarchy(p_employee_no character varying, p_org_tree_type character varying) OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: get_employees_by_org_code(character varying, character varying); Type: FUNCTION; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE FUNCTION public.get_employees_by_org_code(p_org_code character varying, p_org_tree_type character varying) RETURNS TABLE(id bigint, arcidno character varying, company_code character varying, company_name character varying, company_partyid bigint, country_code character varying, created_date timestamp with time zone, data_created_date timestamp with time zone, data_created_user character varying, data_modified_date timestamp with time zone, data_modified_user character varying, date_of_birth timestamp with time zone, email_address character varying, employed_status character varying, employee_no character varying, employee_type_code character varying, employee_type_name character varying, english_name character varying, ext_no character varying, form_org_code character varying, form_org_name character varying, form_org_partyid bigint, formula_org_code character varying, formula_org_name character varying, formula_org_partyid bigint, full_name character varying, gender_code character varying, gender_name character varying, hire_date timestamp with time zone, idno character varying, job_flag character varying, job_grade_code character varying, job_grade_name character varying, job_level_code character varying, job_level_name character varying, job_title_code character varying, job_title_name character varying, mobile_phone_no character varying, office_phone character varying, party_roleid bigint, passport_no character varying, permanent_address character varying, permanent_phone_no character varying, permanent_zip_code character varying, position_code character varying, position_name character varying, present_address character varying, present_phone_no character varying, present_zip_code character varying, resignation_date timestamp with time zone, status character varying, tenantid character varying, userid character varying, function_org_code character varying, function_org_name character varying, mvpn character varying, idno_suffix character varying)
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
BEGIN
|
|
RETURN QUERY
|
|
SELECT
|
|
ei.id,
|
|
ei.arcidno,
|
|
ei.company_code,
|
|
ei.company_name,
|
|
ei.company_partyid,
|
|
ei.country_code,
|
|
ei.created_date::TIMESTAMPTZ,
|
|
ei.data_created_date::TIMESTAMPTZ,
|
|
ei.data_created_user,
|
|
ei.data_modified_date::TIMESTAMPTZ,
|
|
ei.data_modified_user,
|
|
ei.date_of_birth::TIMESTAMPTZ,
|
|
ei.email_address,
|
|
ei.employed_status,
|
|
ei.employee_no,
|
|
ei.employee_type_code,
|
|
ei.employee_type_name,
|
|
ei.english_name,
|
|
ei.ext_no,
|
|
ei.form_org_code,
|
|
ei.form_org_name,
|
|
ei.form_org_partyid,
|
|
ei.formula_org_code,
|
|
ei.formula_org_name,
|
|
ei.formula_org_partyid,
|
|
ei.full_name,
|
|
ei.gender_code,
|
|
ei.gender_name,
|
|
ei.hire_date::TIMESTAMPTZ,
|
|
ei.idno,
|
|
ei.job_flag,
|
|
ei.job_grade_code,
|
|
ei.job_grade_name,
|
|
ei.job_level_code,
|
|
ei.job_level_name,
|
|
ei.job_title_code,
|
|
ei.job_title_name,
|
|
ei.mobile_phone_no,
|
|
ei.office_phone,
|
|
ei.party_roleid,
|
|
ei.passport_no,
|
|
ei.permanent_address,
|
|
ei.permanent_phone_no,
|
|
ei.permanent_zip_code,
|
|
ei.position_code,
|
|
ei.position_name,
|
|
ei.present_address,
|
|
ei.present_phone_no,
|
|
ei.present_zip_code,
|
|
ei.resignation_date::TIMESTAMPTZ,
|
|
ei.status,
|
|
ei.tenantid,
|
|
ei.userid,
|
|
ei.function_org_code,
|
|
ei.function_org_name,
|
|
ei.mvpn,
|
|
ei.idno_suffix
|
|
FROM public.api_employee_info ei
|
|
JOIN public.api_organization_relation ar ON
|
|
CASE
|
|
WHEN p_org_tree_type = '0' THEN ei.formula_org_code = ar.org_code
|
|
WHEN p_org_tree_type = '1' THEN ei.function_org_code = ar.org_code
|
|
WHEN p_org_tree_type = '2' THEN ei.form_org_code = ar.org_code
|
|
ELSE ei.formula_org_code = ar.org_code -- 默認使用 formula_org_code
|
|
END
|
|
WHERE ar.org_code = p_org_code AND ar.org_tree_type = p_org_tree_type AND ei.employed_status = '1';
|
|
END;
|
|
$$;
|
|
|
|
|
|
ALTER FUNCTION public.get_employees_by_org_code(p_org_code character varying, p_org_tree_type character varying) OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: get_materialized_view_changes_by_date(date, character varying); Type: FUNCTION; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE FUNCTION public.get_materialized_view_changes_by_date(p_date date, p_view_name character varying DEFAULT NULL::character varying) RETURNS TABLE(view_name character varying, refreshed_at timestamp with time zone, diff_count integer, diff_details jsonb)
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
BEGIN
|
|
RETURN QUERY
|
|
SELECT
|
|
mvrl.view_name,
|
|
mvrl.refreshed_at,
|
|
mvrl.diff_count,
|
|
mvrl.diff_details
|
|
FROM
|
|
materialized_view_refresh_log mvrl
|
|
WHERE
|
|
DATE(mvrl.refreshed_at) = p_date
|
|
AND (p_view_name IS NULL OR mvrl.view_name = p_view_name)
|
|
ORDER BY
|
|
mvrl.refreshed_at;
|
|
END;
|
|
$$;
|
|
|
|
|
|
ALTER FUNCTION public.get_materialized_view_changes_by_date(p_date date, p_view_name character varying) OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: get_org_hierarchy_by_org_code(character varying, character varying); Type: FUNCTION; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE FUNCTION public.get_org_hierarchy_by_org_code(p_org_code character varying, p_org_tree_type character varying) RETURNS TABLE(org_code character varying, org_name character varying, org_tree_type character varying, parent_org_code character varying, level integer)
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
BEGIN
|
|
RETURN QUERY
|
|
WITH RECURSIVE org_hierarchy AS (
|
|
-- 基礎案例:從輸入的 org_code 開始
|
|
SELECT
|
|
ar.org_code,
|
|
ar.org_name,
|
|
ar.org_tree_type,
|
|
ar.parent_org_code,
|
|
1 AS level
|
|
FROM public.api_organization_relation ar
|
|
WHERE ar.org_code = p_org_code AND ar.org_tree_type = p_org_tree_type
|
|
|
|
UNION ALL
|
|
|
|
-- 遞迴案例:查找上層組織
|
|
SELECT
|
|
ar.org_code,
|
|
ar.org_name,
|
|
ar.org_tree_type,
|
|
ar.parent_org_code,
|
|
oh.level + 1
|
|
FROM public.api_organization_relation ar
|
|
JOIN org_hierarchy oh ON ar.org_code = oh.parent_org_code
|
|
WHERE ar.org_tree_type = p_org_tree_type
|
|
)
|
|
SELECT * FROM org_hierarchy
|
|
ORDER BY level;
|
|
END;
|
|
$$;
|
|
|
|
|
|
ALTER FUNCTION public.get_org_hierarchy_by_org_code(p_org_code character varying, p_org_tree_type character varying) OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: refresh_all_materialized_views(); Type: FUNCTION; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE FUNCTION public.refresh_all_materialized_views() RETURNS void
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
DECLARE
|
|
v_views TEXT[] := ARRAY['fse7en_org_deptgradeinfo', 'fse7en_org_deptinfo', 'fse7en_org_deptstruct',
|
|
'fse7en_org_jobtitle2grade', 'fse7en_org_memberinfo', 'fse7en_org_memberstruct'];
|
|
v_view TEXT;
|
|
BEGIN
|
|
FOREACH v_view IN ARRAY v_views
|
|
LOOP
|
|
PERFORM refresh_materialized_view_with_log(v_view);
|
|
END LOOP;
|
|
END;
|
|
$$;
|
|
|
|
|
|
ALTER FUNCTION public.refresh_all_materialized_views() OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: refresh_materialized_view_with_log(character varying); Type: FUNCTION; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE FUNCTION public.refresh_materialized_view_with_log(p_view_name character varying) RETURNS void
|
|
LANGUAGE plpgsql
|
|
AS $_$
|
|
DECLARE
|
|
v_old_data JSONB;
|
|
v_new_data JSONB;
|
|
v_diff JSONB;
|
|
v_diff_count INT;
|
|
v_snapshot_table TEXT;
|
|
v_row_identifiers TEXT[]; -- 改為陣列,支援複合主鍵
|
|
v_compare_condition TEXT;
|
|
v_key_fields TEXT;
|
|
v_key_json_old TEXT;
|
|
v_key_json_new TEXT;
|
|
i INT;
|
|
BEGIN
|
|
-- 建立臨時表存儲更新前的數據快照
|
|
v_snapshot_table := 'tmp_' || p_view_name || '_snapshot';
|
|
|
|
-- 根據視圖名稱確定主鍵或唯一識別欄位(支援複合鍵)
|
|
CASE lower(p_view_name)
|
|
WHEN 'fse7en_org_deptgradeinfo' THEN v_row_identifiers := ARRAY['grade_id'];
|
|
WHEN 'fse7en_org_deptinfo' THEN v_row_identifiers := ARRAY['org_code'];
|
|
WHEN 'fse7en_org_deptstruct' THEN v_row_identifiers := ARRAY['org_code'];
|
|
WHEN 'fse7en_org_jobtitle2grade' THEN v_row_identifiers := ARRAY['job_title_code'];
|
|
WHEN 'fse7en_org_memberinfo' THEN v_row_identifiers := ARRAY['employee_no'];
|
|
WHEN 'fse7en_org_memberstruct' THEN v_row_identifiers := ARRAY['employee_no', 'org_code']; -- 複合主鍵
|
|
ELSE v_row_identifiers := NULL;
|
|
END CASE;
|
|
|
|
-- 建立臨時表
|
|
EXECUTE format('CREATE TEMP TABLE %I ON COMMIT DROP AS SELECT * FROM %I', v_snapshot_table, p_view_name);
|
|
|
|
-- 更新實體化視圖
|
|
EXECUTE format('REFRESH MATERIALIZED VIEW %I', p_view_name);
|
|
|
|
-- 為複合主鍵構建比較條件
|
|
IF v_row_identifiers IS NOT NULL THEN
|
|
v_compare_condition := '';
|
|
v_key_fields := '';
|
|
v_key_json_old := '';
|
|
v_key_json_new := '';
|
|
|
|
FOR i IN 1..array_length(v_row_identifiers, 1) LOOP
|
|
-- 構建比較條件
|
|
IF i > 1 THEN
|
|
v_compare_condition := v_compare_condition || ' AND ';
|
|
v_key_fields := v_key_fields || ', ';
|
|
v_key_json_old := v_key_json_old || ', ';
|
|
v_key_json_new := v_key_json_new || ', ';
|
|
END IF;
|
|
|
|
v_compare_condition := v_compare_condition || format('o.%1$I = n.%1$I', v_row_identifiers[i]);
|
|
v_key_fields := v_key_fields || format('o.%1$I', v_row_identifiers[i]);
|
|
v_key_json_old := v_key_json_old || format('''%1$I'', d.old_data->>''%1$I''', v_row_identifiers[i]);
|
|
v_key_json_new := v_key_json_new || format('''%1$I'', d.new_data->>''%1$I''', v_row_identifiers[i]);
|
|
END LOOP;
|
|
END IF;
|
|
|
|
-- 計算差異
|
|
IF v_row_identifiers IS NULL THEN
|
|
-- 沒有唯一識別欄位,使用整行比較
|
|
EXECUTE format('
|
|
WITH diff_data AS (
|
|
-- 刪除的記錄
|
|
SELECT
|
|
''DELETE'' as operation,
|
|
row_to_json(o)::jsonb as old_data,
|
|
NULL::jsonb as new_data
|
|
FROM
|
|
%I o
|
|
WHERE
|
|
NOT EXISTS (
|
|
SELECT 1 FROM %I n
|
|
WHERE row_to_json(o)::jsonb = row_to_json(n)::jsonb
|
|
)
|
|
|
|
UNION ALL
|
|
|
|
-- 插入的記錄
|
|
SELECT
|
|
''INSERT'' as operation,
|
|
NULL::jsonb as old_data,
|
|
row_to_json(n)::jsonb as new_data
|
|
FROM
|
|
%I n
|
|
WHERE
|
|
NOT EXISTS (
|
|
SELECT 1 FROM %I o
|
|
WHERE row_to_json(o)::jsonb = row_to_json(n)::jsonb
|
|
)
|
|
)
|
|
SELECT
|
|
jsonb_agg(d.old_data) FILTER (WHERE d.operation = ''DELETE''),
|
|
jsonb_agg(d.new_data) FILTER (WHERE d.operation = ''INSERT''),
|
|
jsonb_agg(
|
|
CASE
|
|
WHEN d.operation = ''DELETE'' THEN jsonb_build_object(''operation'', d.operation, ''data'', d.old_data)
|
|
WHEN d.operation = ''INSERT'' THEN jsonb_build_object(''operation'', d.operation, ''data'', d.new_data)
|
|
END
|
|
),
|
|
COUNT(*)
|
|
FROM
|
|
diff_data d',
|
|
v_snapshot_table,
|
|
p_view_name,
|
|
p_view_name,
|
|
v_snapshot_table
|
|
)
|
|
INTO v_old_data, v_new_data, v_diff, v_diff_count;
|
|
ELSE
|
|
-- 使用複合鍵進行比較
|
|
EXECUTE format('
|
|
WITH diff_data AS (
|
|
-- 刪除的記錄
|
|
SELECT
|
|
''DELETE'' as operation,
|
|
row_to_json(o)::jsonb as old_data,
|
|
NULL::jsonb as new_data
|
|
FROM
|
|
%I o
|
|
WHERE
|
|
NOT EXISTS (
|
|
SELECT 1 FROM %I n
|
|
WHERE %s
|
|
)
|
|
|
|
UNION ALL
|
|
|
|
-- 插入的記錄
|
|
SELECT
|
|
''INSERT'' as operation,
|
|
NULL::jsonb as old_data,
|
|
row_to_json(n)::jsonb as new_data
|
|
FROM
|
|
%I n
|
|
WHERE
|
|
NOT EXISTS (
|
|
SELECT 1 FROM %I o
|
|
WHERE %s
|
|
)
|
|
|
|
UNION ALL
|
|
|
|
-- 更新的記錄
|
|
SELECT
|
|
''UPDATE'' as operation,
|
|
row_to_json(o)::jsonb as old_data,
|
|
row_to_json(n)::jsonb as new_data
|
|
FROM
|
|
%I o
|
|
JOIN
|
|
%I n ON %s
|
|
WHERE
|
|
row_to_json(o)::jsonb <> row_to_json(n)::jsonb
|
|
)
|
|
SELECT
|
|
jsonb_agg(d.old_data) FILTER (WHERE d.operation IN (''DELETE'', ''UPDATE'')),
|
|
jsonb_agg(d.new_data) FILTER (WHERE d.operation IN (''INSERT'', ''UPDATE'')),
|
|
jsonb_agg(
|
|
CASE
|
|
WHEN d.operation = ''DELETE'' THEN jsonb_build_object(''operation'', d.operation, ''key'', jsonb_build_object(%s), ''data'', d.old_data)
|
|
WHEN d.operation = ''INSERT'' THEN jsonb_build_object(''operation'', d.operation, ''key'', jsonb_build_object(%s), ''data'', d.new_data)
|
|
ELSE jsonb_build_object(''operation'', d.operation, ''key'', jsonb_build_object(%s), ''old'', d.old_data, ''new'', d.new_data)
|
|
END
|
|
),
|
|
COUNT(*)
|
|
FROM
|
|
diff_data d',
|
|
v_snapshot_table,
|
|
p_view_name,
|
|
v_compare_condition,
|
|
p_view_name,
|
|
v_snapshot_table,
|
|
v_compare_condition,
|
|
v_snapshot_table,
|
|
p_view_name,
|
|
v_compare_condition,
|
|
v_key_json_old,
|
|
v_key_json_new,
|
|
v_key_json_old
|
|
)
|
|
INTO v_old_data, v_new_data, v_diff, v_diff_count;
|
|
END IF;
|
|
|
|
-- 記錄變更
|
|
INSERT INTO materialized_view_refresh_log(view_name, refreshed_at, diff_count, diff_details)
|
|
VALUES (p_view_name, CURRENT_TIMESTAMP, COALESCE(v_diff_count, 0), v_diff);
|
|
|
|
END;
|
|
$_$;
|
|
|
|
|
|
ALTER FUNCTION public.refresh_materialized_view_with_log(p_view_name character varying) OWNER TO postgres;
|
|
|
|
SET default_tablespace = '';
|
|
|
|
SET default_table_access_method = heap;
|
|
|
|
--
|
|
-- Name: api_company; Type: TABLE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE TABLE public.api_company (
|
|
id bigint NOT NULL,
|
|
company_code character varying(20),
|
|
company_name character varying(50),
|
|
company_partyid bigint,
|
|
created_date timestamp with time zone,
|
|
data_created_date timestamp with time zone,
|
|
data_created_user character varying(30),
|
|
data_modified_date timestamp with time zone,
|
|
data_modified_user character varying(30),
|
|
effective_date timestamp with time zone,
|
|
status character varying(2),
|
|
tenantid character varying(20)
|
|
);
|
|
|
|
|
|
ALTER TABLE public.api_company OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_company_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE SEQUENCE public.api_company_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
ALTER TABLE public.api_company_id_seq OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_company_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER SEQUENCE public.api_company_id_seq OWNED BY public.api_company.id;
|
|
|
|
|
|
--
|
|
-- Name: api_employee_info; Type: TABLE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE TABLE public.api_employee_info (
|
|
id bigint NOT NULL,
|
|
arcidno character varying(20),
|
|
company_code character varying(20),
|
|
company_name character varying(50),
|
|
company_partyid bigint,
|
|
country_code character varying(10),
|
|
created_date timestamp with time zone,
|
|
data_created_date timestamp with time zone,
|
|
data_created_user character varying(30),
|
|
data_modified_date timestamp with time zone,
|
|
data_modified_user character varying(30),
|
|
date_of_birth timestamp with time zone,
|
|
email_address character varying(50),
|
|
employed_status character varying(2),
|
|
employee_no character varying(10),
|
|
employee_type_code character varying(10),
|
|
employee_type_name character varying(20),
|
|
english_name character varying(50),
|
|
ext_no character varying(10),
|
|
form_org_code character varying(20),
|
|
form_org_name character varying(50),
|
|
form_org_partyid bigint,
|
|
formula_org_code character varying(20),
|
|
formula_org_name character varying(50),
|
|
formula_org_partyid bigint,
|
|
full_name character varying(50),
|
|
function_org_code character varying(20),
|
|
function_org_name character varying(50),
|
|
gender_code character varying(2),
|
|
gender_name character varying(10),
|
|
hire_date timestamp with time zone,
|
|
idno character varying(20),
|
|
idno_suffix character varying(10),
|
|
job_flag character varying(2),
|
|
job_grade_code character varying(10),
|
|
job_grade_name character varying(20),
|
|
job_level_code character varying(10),
|
|
job_level_name character varying(20),
|
|
job_title_code character varying(10),
|
|
job_title_name character varying(20),
|
|
mobile_phone_no character varying(20),
|
|
mvpn character varying(20),
|
|
office_phone character varying(20),
|
|
party_roleid bigint,
|
|
passport_no character varying(30),
|
|
permanent_address character varying(50),
|
|
permanent_phone_no character varying(20),
|
|
permanent_zip_code character varying(10),
|
|
position_code character varying(10),
|
|
position_name character varying(20),
|
|
present_address character varying(50),
|
|
present_phone_no character varying(20),
|
|
present_zip_code character varying(10),
|
|
resignation_date timestamp with time zone,
|
|
status character varying(2),
|
|
tenantid character varying(10),
|
|
userid character varying(10)
|
|
);
|
|
|
|
|
|
ALTER TABLE public.api_employee_info OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_employee_info_action_log; Type: TABLE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE TABLE public.api_employee_info_action_log (
|
|
id bigint NOT NULL,
|
|
action character varying(10),
|
|
action_date timestamp with time zone,
|
|
created_date timestamp with time zone NOT NULL,
|
|
employee_no character varying(10) NOT NULL,
|
|
field_name character varying(30) NOT NULL,
|
|
new_value character varying(50),
|
|
old_value character varying(50),
|
|
party_roleid bigint
|
|
);
|
|
|
|
|
|
ALTER TABLE public.api_employee_info_action_log OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_employee_info_action_log_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE SEQUENCE public.api_employee_info_action_log_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
ALTER TABLE public.api_employee_info_action_log_id_seq OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_employee_info_action_log_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER SEQUENCE public.api_employee_info_action_log_id_seq OWNED BY public.api_employee_info_action_log.id;
|
|
|
|
|
|
--
|
|
-- Name: api_employee_info_archived; Type: TABLE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE TABLE public.api_employee_info_archived (
|
|
id bigint NOT NULL,
|
|
arcidno character varying(20),
|
|
company_code character varying(20),
|
|
company_name character varying(50),
|
|
company_partyid bigint,
|
|
country_code character varying(10),
|
|
created_date timestamp with time zone,
|
|
data_created_date timestamp with time zone,
|
|
data_created_user character varying(30),
|
|
data_modified_date timestamp with time zone,
|
|
data_modified_user character varying(30),
|
|
date_of_birth timestamp with time zone,
|
|
email_address character varying(50),
|
|
employed_status character varying(2),
|
|
employee_no character varying(10),
|
|
employee_type_code character varying(10),
|
|
employee_type_name character varying(20),
|
|
english_name character varying(50),
|
|
ext_no character varying(10),
|
|
form_org_code character varying(20),
|
|
form_org_name character varying(50),
|
|
form_org_partyid bigint,
|
|
formula_org_code character varying(20),
|
|
formula_org_name character varying(50),
|
|
formula_org_partyid bigint,
|
|
full_name character varying(20),
|
|
function_org_code character varying(20),
|
|
function_org_name character varying(50),
|
|
gender_code character varying(2),
|
|
gender_name character varying(10),
|
|
hire_date timestamp with time zone,
|
|
idno character varying(20),
|
|
idno_suffix character varying(10),
|
|
job_flag character varying(2),
|
|
job_grade_code character varying(10),
|
|
job_grade_name character varying(20),
|
|
job_level_code character varying(10),
|
|
job_level_name character varying(20),
|
|
job_title_code character varying(10),
|
|
job_title_name character varying(20),
|
|
mobile_phone_no character varying(20),
|
|
mvpn character varying(20),
|
|
office_phone character varying(20),
|
|
party_roleid bigint,
|
|
passport_no character varying(30),
|
|
permanent_address character varying(50),
|
|
permanent_phone_no character varying(20),
|
|
permanent_zip_code character varying(10),
|
|
position_code character varying(10),
|
|
position_name character varying(20),
|
|
present_address character varying(50),
|
|
present_phone_no character varying(20),
|
|
present_zip_code character varying(10),
|
|
resignation_date timestamp with time zone,
|
|
status character varying(2),
|
|
tenantid character varying(10),
|
|
userid character varying(10)
|
|
);
|
|
|
|
|
|
ALTER TABLE public.api_employee_info_archived OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_employee_info_archived_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE SEQUENCE public.api_employee_info_archived_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
ALTER TABLE public.api_employee_info_archived_id_seq OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_employee_info_archived_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER SEQUENCE public.api_employee_info_archived_id_seq OWNED BY public.api_employee_info_archived.id;
|
|
|
|
|
|
--
|
|
-- Name: api_employee_info_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE SEQUENCE public.api_employee_info_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
ALTER TABLE public.api_employee_info_id_seq OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_employee_info_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER SEQUENCE public.api_employee_info_id_seq OWNED BY public.api_employee_info.id;
|
|
|
|
|
|
--
|
|
-- Name: api_organization; Type: TABLE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE TABLE public.api_organization (
|
|
id bigint NOT NULL,
|
|
address character varying(50),
|
|
company_code character varying(20),
|
|
company_name character varying(50),
|
|
company_partyid bigint,
|
|
created_date timestamp with time zone,
|
|
data_created_date timestamp with time zone,
|
|
data_created_user character varying(30),
|
|
data_modified_date timestamp with time zone,
|
|
data_modified_user character varying(30),
|
|
email character varying(50),
|
|
end_date timestamp with time zone,
|
|
english_name character varying(50),
|
|
fax character varying(10),
|
|
layer_code character varying(5),
|
|
layer_name character varying(20),
|
|
org_code character varying(20),
|
|
org_name character varying(50),
|
|
org_property_code character varying(2),
|
|
organizationid bigint,
|
|
remark character varying(20),
|
|
sort_sequence integer,
|
|
start_date timestamp with time zone,
|
|
status character varying(2),
|
|
telephone character varying(20),
|
|
tenantid character varying(10)
|
|
);
|
|
|
|
|
|
ALTER TABLE public.api_organization OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_organization_action_log; Type: TABLE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE TABLE public.api_organization_action_log (
|
|
id bigint NOT NULL,
|
|
action character varying(10),
|
|
action_date timestamp with time zone,
|
|
created_date timestamp with time zone NOT NULL,
|
|
field_name character varying(30) NOT NULL,
|
|
new_value character varying(50),
|
|
old_value character varying(50),
|
|
org_code character varying(20) NOT NULL,
|
|
organizationid bigint
|
|
);
|
|
|
|
|
|
ALTER TABLE public.api_organization_action_log OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_organization_action_log_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE SEQUENCE public.api_organization_action_log_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
ALTER TABLE public.api_organization_action_log_id_seq OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_organization_action_log_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER SEQUENCE public.api_organization_action_log_id_seq OWNED BY public.api_organization_action_log.id;
|
|
|
|
|
|
--
|
|
-- Name: api_organization_archived; Type: TABLE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE TABLE public.api_organization_archived (
|
|
id bigint NOT NULL,
|
|
address character varying(50),
|
|
company_code character varying(20),
|
|
company_name character varying(50),
|
|
company_partyid bigint,
|
|
created_date timestamp with time zone,
|
|
data_created_date timestamp with time zone,
|
|
data_created_user character varying(30),
|
|
data_modified_date timestamp with time zone,
|
|
data_modified_user character varying(30),
|
|
email character varying(50),
|
|
end_date timestamp with time zone,
|
|
english_name character varying(50),
|
|
fax character varying(10),
|
|
layer_code character varying(5),
|
|
layer_name character varying(20),
|
|
org_code character varying(20),
|
|
org_name character varying(50),
|
|
org_property_code character varying(2),
|
|
organizationid bigint,
|
|
remark character varying(20),
|
|
sort_sequence integer,
|
|
start_date timestamp with time zone,
|
|
status character varying(2),
|
|
telephone character varying(20),
|
|
tenantid character varying(10)
|
|
);
|
|
|
|
|
|
ALTER TABLE public.api_organization_archived OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_organization_archived_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE SEQUENCE public.api_organization_archived_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
ALTER TABLE public.api_organization_archived_id_seq OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_organization_archived_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER SEQUENCE public.api_organization_archived_id_seq OWNED BY public.api_organization_archived.id;
|
|
|
|
|
|
--
|
|
-- Name: api_organization_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE SEQUENCE public.api_organization_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
ALTER TABLE public.api_organization_id_seq OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_organization_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER SEQUENCE public.api_organization_id_seq OWNED BY public.api_organization.id;
|
|
|
|
|
|
--
|
|
-- Name: api_organization_manager; Type: TABLE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE TABLE public.api_organization_manager (
|
|
id bigint NOT NULL,
|
|
company_code character varying(20),
|
|
company_partyid bigint,
|
|
created_date timestamp with time zone,
|
|
data_created_date timestamp with time zone,
|
|
data_created_user character varying(30),
|
|
data_modified_date timestamp with time zone,
|
|
data_modified_user character varying(30),
|
|
effective_date timestamp with time zone,
|
|
employee_no character varying(10),
|
|
end_date timestamp with time zone,
|
|
full_name character varying(20),
|
|
is_deputy boolean,
|
|
manager_role_type character varying(2),
|
|
org_code character varying(20),
|
|
organization_managerid bigint,
|
|
status character varying(2),
|
|
tenantid character varying(10)
|
|
);
|
|
|
|
|
|
ALTER TABLE public.api_organization_manager OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_organization_manager_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE SEQUENCE public.api_organization_manager_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
ALTER TABLE public.api_organization_manager_id_seq OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_organization_manager_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER SEQUENCE public.api_organization_manager_id_seq OWNED BY public.api_organization_manager.id;
|
|
|
|
|
|
--
|
|
-- Name: api_organization_relation; Type: TABLE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE TABLE public.api_organization_relation (
|
|
id bigint NOT NULL,
|
|
company_code character varying(20),
|
|
company_party_id bigint,
|
|
created_date timestamp with time zone,
|
|
data_created_date timestamp with time zone,
|
|
data_created_user character varying(30),
|
|
data_modified_date timestamp with time zone,
|
|
data_modified_user character varying(30),
|
|
org_code character varying(20),
|
|
org_name character varying(50),
|
|
org_tree_type character varying(2),
|
|
organization_relation_id bigint,
|
|
parent_org_code character varying(20),
|
|
status character varying(2),
|
|
tenant_id character varying(10)
|
|
);
|
|
|
|
|
|
ALTER TABLE public.api_organization_relation OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_organization_relation_action_log; Type: TABLE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE TABLE public.api_organization_relation_action_log (
|
|
id bigint NOT NULL,
|
|
action character varying(10) NOT NULL,
|
|
action_date timestamp with time zone NOT NULL,
|
|
created_date timestamp with time zone NOT NULL,
|
|
field_name character varying(30) NOT NULL,
|
|
is_sync boolean,
|
|
new_value character varying(50),
|
|
old_value character varying(50),
|
|
org_code character varying(20) NOT NULL,
|
|
organization_relation_id bigint
|
|
);
|
|
|
|
|
|
ALTER TABLE public.api_organization_relation_action_log OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_organization_relation_action_log_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE SEQUENCE public.api_organization_relation_action_log_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
ALTER TABLE public.api_organization_relation_action_log_id_seq OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_organization_relation_action_log_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER SEQUENCE public.api_organization_relation_action_log_id_seq OWNED BY public.api_organization_relation_action_log.id;
|
|
|
|
|
|
--
|
|
-- Name: api_organization_relation_archived; Type: TABLE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE TABLE public.api_organization_relation_archived (
|
|
id bigint NOT NULL,
|
|
archived_date timestamp with time zone,
|
|
company_code character varying(20),
|
|
company_party_id bigint,
|
|
created_date timestamp with time zone,
|
|
data_created_date timestamp with time zone,
|
|
data_created_user character varying(30),
|
|
data_modified_date timestamp with time zone,
|
|
data_modified_user character varying(30),
|
|
org_code character varying(20),
|
|
org_name character varying(50),
|
|
org_tree_type character varying(2),
|
|
organization_relation_id bigint,
|
|
parent_org_code character varying(20),
|
|
status character varying(2),
|
|
tenant_id character varying(10)
|
|
);
|
|
|
|
|
|
ALTER TABLE public.api_organization_relation_archived OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_organization_relation_archived_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE SEQUENCE public.api_organization_relation_archived_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
ALTER TABLE public.api_organization_relation_archived_id_seq OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_organization_relation_archived_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER SEQUENCE public.api_organization_relation_archived_id_seq OWNED BY public.api_organization_relation_archived.id;
|
|
|
|
|
|
--
|
|
-- Name: api_organization_relation_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE SEQUENCE public.api_organization_relation_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
ALTER TABLE public.api_organization_relation_id_seq OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: api_organization_relation_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER SEQUENCE public.api_organization_relation_id_seq OWNED BY public.api_organization_relation.id;
|
|
|
|
|
|
--
|
|
-- Name: fse7en_org_deptgradeinfo; Type: MATERIALIZED VIEW; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE MATERIALIZED VIEW public.fse7en_org_deptgradeinfo AS
|
|
SELECT DISTINCT ('Level'::text || ( SELECT count(*) AS count
|
|
FROM public.get_org_hierarchy_by_org_code(aor.org_code, '0'::character varying) get_org_hierarchy_by_org_code(org_code, org_name, org_tree_type, parent_org_code, level))) AS grade_id,
|
|
(('第'::text || ( SELECT count(*) AS count
|
|
FROM public.get_org_hierarchy_by_org_code(aor.org_code, '0'::character varying) get_org_hierarchy_by_org_code(org_code, org_name, org_tree_type, parent_org_code, level))) || '階'::text) AS display_name,
|
|
('-'::text || ( SELECT count(*) AS count
|
|
FROM public.get_org_hierarchy_by_org_code(aor.org_code, '0'::character varying) get_org_hierarchy_by_org_code(org_code, org_name, org_tree_type, parent_org_code, level))) AS grade_num
|
|
FROM (public.api_organization_relation aor
|
|
JOIN public.api_organization ao ON (((aor.org_code)::text = (ao.org_code)::text)))
|
|
WHERE ((aor.org_tree_type)::text = '0'::text)
|
|
ORDER BY ('Level'::text || ( SELECT count(*) AS count
|
|
FROM public.get_org_hierarchy_by_org_code(aor.org_code, '0'::character varying) get_org_hierarchy_by_org_code(org_code, org_name, org_tree_type, parent_org_code, level)))
|
|
WITH NO DATA;
|
|
|
|
|
|
ALTER TABLE public.fse7en_org_deptgradeinfo OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: fse7en_org_deptinfo; Type: MATERIALIZED VIEW; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE MATERIALIZED VIEW public.fse7en_org_deptinfo AS
|
|
SELECT ao.org_code,
|
|
ao.org_name
|
|
FROM (public.api_organization ao
|
|
JOIN public.api_organization_relation aor ON (((ao.org_code)::text = (aor.org_code)::text)))
|
|
WHERE ((aor.org_tree_type)::text = '0'::text)
|
|
ORDER BY ao.org_code
|
|
WITH NO DATA;
|
|
|
|
|
|
ALTER TABLE public.fse7en_org_deptinfo OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: fse7en_org_deptstruct; Type: MATERIALIZED VIEW; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE MATERIALIZED VIEW public.fse7en_org_deptstruct AS
|
|
SELECT aor.org_code,
|
|
aor.parent_org_code,
|
|
('Level'::text || ( SELECT count(*) AS count
|
|
FROM public.get_org_hierarchy_by_org_code(aor.org_code, '0'::character varying) get_org_hierarchy_by_org_code(org_code, org_name, org_tree_type, parent_org_code, level))) AS grade_id,
|
|
('-'::text || ( SELECT count(*) AS count
|
|
FROM public.get_org_hierarchy_by_org_code(aor.org_code, '0'::character varying) get_org_hierarchy_by_org_code(org_code, org_name, org_tree_type, parent_org_code, level))) AS grade_num,
|
|
( SELECT get_org_hierarchy_by_org_code.org_code
|
|
FROM public.get_org_hierarchy_by_org_code(aor.org_code, '0'::character varying) get_org_hierarchy_by_org_code(org_code, org_name, org_tree_type, parent_org_code, level)
|
|
WHERE (get_org_hierarchy_by_org_code.parent_org_code IS NULL)) AS top_orgtree_code
|
|
FROM (public.api_organization_relation aor
|
|
JOIN public.api_organization ao ON (((aor.org_code)::text = (ao.org_code)::text)))
|
|
WHERE ((aor.org_tree_type)::text = '0'::text)
|
|
ORDER BY aor.org_code
|
|
WITH NO DATA;
|
|
|
|
|
|
ALTER TABLE public.fse7en_org_deptstruct OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: fse7en_org_jobtitle2grade; Type: MATERIALIZED VIEW; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE MATERIALIZED VIEW public.fse7en_org_jobtitle2grade AS
|
|
SELECT DISTINCT (aei.job_title_code)::character varying AS job_title_code,
|
|
aei.job_title_name,
|
|
regexp_replace(((aei.job_title_code)::character varying)::text, '[A-Za-z]'::text, ''::text, 'g'::text) AS job_grade
|
|
FROM public.api_employee_info aei
|
|
WHERE (aei.job_title_code IS NOT NULL)
|
|
ORDER BY (aei.job_title_code)::character varying DESC
|
|
WITH NO DATA;
|
|
|
|
|
|
ALTER TABLE public.fse7en_org_jobtitle2grade OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: fse7en_org_memberinfo; Type: MATERIALIZED VIEW; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE MATERIALIZED VIEW public.fse7en_org_memberinfo AS
|
|
SELECT DISTINCT api_employee_info.employee_no,
|
|
api_employee_info.full_name,
|
|
api_employee_info.ext_no,
|
|
api_employee_info.email_address,
|
|
CASE
|
|
WHEN ((api_employee_info.employed_status)::text = '1'::text) THEN '0'::text
|
|
ELSE '1'::text
|
|
END AS isterminated,
|
|
api_employee_info.hire_date,
|
|
api_employee_info.email_address AS azureaccount,
|
|
CASE
|
|
WHEN api_employee_info.job_flag IN ('1', '4') THEN 'BU'
|
|
WHEN api_employee_info.job_flag IS NULL THEN null
|
|
ELSE 'ADM'
|
|
END as job_flag
|
|
FROM public.api_employee_info
|
|
ORDER BY
|
|
CASE
|
|
WHEN ((api_employee_info.employed_status)::text = '1'::text) THEN '0'::text
|
|
ELSE '1'::text
|
|
END, api_employee_info.employee_no
|
|
WITH NO DATA;
|
|
|
|
|
|
ALTER TABLE public.fse7en_org_memberinfo OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: fse7en_org_memberstruct; Type: MATERIALIZED VIEW; Schema: public; Owner: postgres
|
|
--
|
|
|
|
|
|
CREATE MATERIALIZED VIEW public.fse7en_org_memberstruct AS
|
|
WITH RECURSIVE employee_managers AS (
|
|
SELECT aei_1.employee_no,
|
|
aei_1.full_name,
|
|
aei_1.form_org_code,
|
|
aei_1.form_org_name,
|
|
aei_1.formula_org_code,
|
|
aei_1.formula_org_name,
|
|
aei_1.job_title_code,
|
|
aei_1.employed_status,
|
|
-- 修正:排除自己當主管的情況,並確保主管在職狀態
|
|
( SELECT aom_1.employee_no
|
|
FROM api_organization_manager aom_1
|
|
JOIN api_employee_info aei_mgr ON aom_1.employee_no = aei_mgr.employee_no
|
|
WHERE aom_1.org_code::text = aei_1.form_org_code::text
|
|
AND aom_1.employee_no::text <> aei_1.employee_no::text
|
|
AND aei_mgr.employed_status in ('1', '2') -- 主管在職狀態
|
|
ORDER BY aom_1.effective_date DESC
|
|
LIMIT 1) AS direct_manager_employee_no,
|
|
-- 找上層組織
|
|
( SELECT aor.parent_org_code
|
|
FROM api_organization_relation aor
|
|
WHERE aor.org_code::text = aei_1.form_org_code::text
|
|
AND aor.org_tree_type::text = '2'::text
|
|
LIMIT 1) AS parent_org_code
|
|
FROM api_employee_info aei_1
|
|
), org_hierarchy AS (
|
|
-- 遞迴查找組織階層,直到找到不是自己的主管
|
|
SELECT
|
|
em.employee_no,
|
|
em.form_org_code as current_org_code,
|
|
em.parent_org_code,
|
|
1 as level
|
|
FROM employee_managers em
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
oh.employee_no,
|
|
oh.parent_org_code as current_org_code,
|
|
( SELECT aor.parent_org_code
|
|
FROM api_organization_relation aor
|
|
WHERE aor.org_code::text = oh.parent_org_code::text
|
|
AND aor.org_tree_type::text = '2'::text
|
|
LIMIT 1) as parent_org_code,
|
|
oh.level + 1
|
|
FROM org_hierarchy oh
|
|
WHERE oh.parent_org_code IS NOT NULL
|
|
AND oh.level < 10 -- 防止無限遞迴
|
|
), employee_with_approve_right AS (
|
|
SELECT em.employee_no,
|
|
em.full_name,
|
|
em.form_org_code,
|
|
em.form_org_name,
|
|
em.formula_org_code,
|
|
em.formula_org_name,
|
|
em.job_title_code,
|
|
em.employed_status,
|
|
CASE
|
|
-- 先檢查是否有直屬主管(不是自己且在職)
|
|
WHEN em.direct_manager_employee_no IS NOT NULL
|
|
THEN em.direct_manager_employee_no
|
|
-- 如果沒有,則遞迴往上找組織主管(不是自己且在職)
|
|
ELSE ( SELECT aom.employee_no
|
|
FROM org_hierarchy oh
|
|
JOIN api_organization_manager aom ON aom.org_code::text = oh.current_org_code::text
|
|
JOIN api_employee_info aei_mgr ON aom.employee_no = aei_mgr.employee_no
|
|
WHERE oh.employee_no = em.employee_no
|
|
AND aom.employee_no::text <> em.employee_no::text
|
|
AND aei_mgr.employed_status in ('1', '2') -- 主管在職狀態
|
|
ORDER BY oh.level ASC, aom.effective_date DESC
|
|
LIMIT 1)
|
|
END AS approval_manager_employee_no
|
|
FROM employee_managers em
|
|
)
|
|
SELECT DISTINCT aei.employee_no,
|
|
aei.full_name,
|
|
aei.formula_org_code AS org_code,
|
|
aei.formula_org_name AS org_name,
|
|
aei.job_title_code,
|
|
regexp_replace(aei.job_title_code::character varying::text, '[A-Za-z]'::text, ''::text, 'g'::text) AS job_grade,
|
|
CASE
|
|
WHEN aom.manager_role_type IS NULL THEN '1'::text
|
|
WHEN aom.manager_role_type::text = '1'::text OR aom.manager_role_type::text = ''::text THEN '1'::text
|
|
ELSE '0'::text
|
|
END AS is_main_job,
|
|
CASE
|
|
WHEN (EXISTS ( SELECT 1
|
|
FROM employee_with_approve_right ewar
|
|
WHERE ewar.approval_manager_employee_no::text = aei.employee_no::text)) THEN '1'::text
|
|
ELSE '0'::text
|
|
END AS approve_right,
|
|
CASE
|
|
WHEN aei.employed_status::text = '1'::text THEN '1'::text
|
|
ELSE '0'::text
|
|
END AS enable,
|
|
-- 修正 instructor:主管員工編號@主管的formula_org_code,確保主管在職
|
|
( SELECT CASE
|
|
WHEN ewar.approval_manager_employee_no IS NOT NULL
|
|
THEN (ewar.approval_manager_employee_no::text || '@'::text) || a2.formula_org_code::text
|
|
ELSE NULL
|
|
END
|
|
FROM employee_with_approve_right ewar
|
|
LEFT JOIN api_employee_info a2 ON ewar.approval_manager_employee_no::text = a2.employee_no::text
|
|
WHERE ewar.employee_no::text = aei.employee_no::text
|
|
AND a2.employed_status in ('1', '2') -- 最終確認主管在職狀態
|
|
ORDER BY aom.effective_date DESC -- 按生效日期排序,取最近的
|
|
LIMIT 1) AS instructor
|
|
FROM api_employee_info aei
|
|
LEFT JOIN api_organization_manager aom ON aei.employee_no::text = aom.employee_no::text
|
|
LEFT JOIN api_organization ao ON aei.form_org_code::text = ao.org_code::text
|
|
WHERE
|
|
CASE
|
|
WHEN aom.manager_role_type IS NULL THEN '1'::text
|
|
WHEN aom.manager_role_type::text = '1'::text OR aom.manager_role_type::text = ''::text THEN '1'::text
|
|
ELSE '0'::text
|
|
END = '1'::text
|
|
ORDER BY
|
|
aei.employee_no
|
|
WITH NO DATA;
|
|
|
|
|
|
ALTER TABLE public.fse7en_org_memberstruct OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: materialized_view_refresh_log; Type: TABLE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE TABLE public.materialized_view_refresh_log (
|
|
id bigint NOT NULL,
|
|
view_name character varying(255) NOT NULL,
|
|
refreshed_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
diff_count integer,
|
|
diff_details jsonb
|
|
);
|
|
|
|
|
|
ALTER TABLE public.materialized_view_refresh_log OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: materialized_view_refresh_log_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE SEQUENCE public.materialized_view_refresh_log_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
ALTER TABLE public.materialized_view_refresh_log_id_seq OWNER TO postgres;
|
|
|
|
--
|
|
-- Name: materialized_view_refresh_log_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER SEQUENCE public.materialized_view_refresh_log_id_seq OWNED BY public.materialized_view_refresh_log.id;
|
|
|
|
|
|
--
|
|
-- Name: api_company id; Type: DEFAULT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_company ALTER COLUMN id SET DEFAULT nextval('public.api_company_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: api_employee_info id; Type: DEFAULT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_employee_info ALTER COLUMN id SET DEFAULT nextval('public.api_employee_info_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: api_employee_info_action_log id; Type: DEFAULT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_employee_info_action_log ALTER COLUMN id SET DEFAULT nextval('public.api_employee_info_action_log_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: api_employee_info_archived id; Type: DEFAULT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_employee_info_archived ALTER COLUMN id SET DEFAULT nextval('public.api_employee_info_archived_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: api_organization id; Type: DEFAULT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_organization ALTER COLUMN id SET DEFAULT nextval('public.api_organization_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: api_organization_action_log id; Type: DEFAULT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_organization_action_log ALTER COLUMN id SET DEFAULT nextval('public.api_organization_action_log_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: api_organization_archived id; Type: DEFAULT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_organization_archived ALTER COLUMN id SET DEFAULT nextval('public.api_organization_archived_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: api_organization_manager id; Type: DEFAULT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_organization_manager ALTER COLUMN id SET DEFAULT nextval('public.api_organization_manager_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: api_organization_relation id; Type: DEFAULT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_organization_relation ALTER COLUMN id SET DEFAULT nextval('public.api_organization_relation_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: api_organization_relation_action_log id; Type: DEFAULT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_organization_relation_action_log ALTER COLUMN id SET DEFAULT nextval('public.api_organization_relation_action_log_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: api_organization_relation_archived id; Type: DEFAULT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_organization_relation_archived ALTER COLUMN id SET DEFAULT nextval('public.api_organization_relation_archived_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: materialized_view_refresh_log id; Type: DEFAULT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.materialized_view_refresh_log ALTER COLUMN id SET DEFAULT nextval('public.materialized_view_refresh_log_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: api_company api_company_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_company
|
|
ADD CONSTRAINT api_company_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: api_employee_info_action_log api_employee_info_action_log_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_employee_info_action_log
|
|
ADD CONSTRAINT api_employee_info_action_log_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: api_employee_info_archived api_employee_info_archived_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_employee_info_archived
|
|
ADD CONSTRAINT api_employee_info_archived_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: api_employee_info api_employee_info_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_employee_info
|
|
ADD CONSTRAINT api_employee_info_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: api_organization_action_log api_organization_action_log_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_organization_action_log
|
|
ADD CONSTRAINT api_organization_action_log_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: api_organization_archived api_organization_archived_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_organization_archived
|
|
ADD CONSTRAINT api_organization_archived_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: api_organization_manager api_organization_manager_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_organization_manager
|
|
ADD CONSTRAINT api_organization_manager_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: api_organization api_organization_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_organization
|
|
ADD CONSTRAINT api_organization_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: api_organization_relation_action_log api_organization_relation_action_log_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_organization_relation_action_log
|
|
ADD CONSTRAINT api_organization_relation_action_log_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: api_organization_relation_archived api_organization_relation_archived_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_organization_relation_archived
|
|
ADD CONSTRAINT api_organization_relation_archived_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: api_organization_relation api_organization_relation_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_organization_relation
|
|
ADD CONSTRAINT api_organization_relation_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: materialized_view_refresh_log materialized_view_refresh_log_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.materialized_view_refresh_log
|
|
ADD CONSTRAINT materialized_view_refresh_log_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: api_organization uk_s4lkcneefc2dlhaxcbhi5a8s0; Type: CONSTRAINT; Schema: public; Owner: postgres
|
|
--
|
|
|
|
ALTER TABLE ONLY public.api_organization
|
|
ADD CONSTRAINT uk_s4lkcneefc2dlhaxcbhi5a8s0 UNIQUE (org_code);
|
|
|
|
|
|
--
|
|
-- Name: idx_fse7en_org_deptgradeinfo_grade_id; Type: INDEX; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE UNIQUE INDEX idx_fse7en_org_deptgradeinfo_grade_id ON public.fse7en_org_deptgradeinfo USING btree (grade_id);
|
|
|
|
|
|
--
|
|
-- Name: idx_fse7en_org_deptinfo_org_code; Type: INDEX; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE UNIQUE INDEX idx_fse7en_org_deptinfo_org_code ON public.fse7en_org_deptinfo USING btree (org_code);
|
|
|
|
|
|
--
|
|
-- Name: idx_fse7en_org_deptstruct_org_code; Type: INDEX; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE UNIQUE INDEX idx_fse7en_org_deptstruct_org_code ON public.fse7en_org_deptstruct USING btree (org_code);
|
|
|
|
|
|
--
|
|
-- Name: idx_fse7en_org_jobtitle2grade_code; Type: INDEX; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE UNIQUE INDEX idx_fse7en_org_jobtitle2grade_code ON public.fse7en_org_jobtitle2grade USING btree (job_title_code);
|
|
|
|
|
|
--
|
|
-- Name: idx_fse7en_org_memberinfo_employee_no; Type: INDEX; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE UNIQUE INDEX idx_fse7en_org_memberinfo_employee_no ON public.fse7en_org_memberinfo USING btree (employee_no);
|
|
|
|
|
|
--
|
|
-- Name: idx_fse7en_org_memberstruct_emp_org; Type: INDEX; Schema: public; Owner: postgres
|
|
--
|
|
|
|
CREATE UNIQUE INDEX idx_fse7en_org_memberstruct_emp_org ON public.fse7en_org_memberstruct USING btree (employee_no, org_code);
|
|
|
|
|
|
--
|
|
-- PostgreSQL database dump complete
|
|
--
|
|
|
|
|
|
CREATE TABLE public.approved_amount_for_each_layer (
|
|
layer_code character varying(10) NOT NULL,
|
|
layer_description character varying(20),
|
|
max_capital_fee NUMERIC(18, 2),
|
|
max_expense_fee NUMERIC(18, 2),
|
|
max_payment_penalty_fee NUMERIC(18, 2),
|
|
max_payment_relation_fee NUMERIC(18, 2),
|
|
max_payment_current_capital_fee NUMERIC(18, 2),
|
|
max_payment_regular_expense_fee NUMERIC(18, 2),
|
|
max_payment_other_capital_fee NUMERIC(18, 2),
|
|
max_payment_other_expense_fee NUMERIC(18, 2)
|
|
);
|
|
|
|
ALTER TABLE public.approved_amount_for_each_layer OWNER TO postgres;
|
|
|
|
insert into public.approved_amount_for_each_layer values('0', '董事長', 999999999, 999999999, 999999999, 999999999, 0, 0, 999999999, 999999999);
|
|
insert into public.approved_amount_for_each_layer values('1', '總經理', 5000000, 2500000, 2500000, 300000, 0, 0, 5000000, 2500000);
|
|
insert into public.approved_amount_for_each_layer values('2', '本部主管', 1000000, 500000, 500000, 50000, 0, 0, 1000000, 500000);
|
|
insert into public.approved_amount_for_each_layer values('3', '店內店長主管.總公司部級主管', 500000, 250000, 100000, 20000, 999999999, 999999999, 500000, 250000);
|
|
insert into public.approved_amount_for_each_layer values('4', '店內部級主管.總公司課級主管', 100000, 50000, 20000, 10000, 200000, 100000, 100000, 50000);
|
|
insert into public.approved_amount_for_each_layer values('5', '店內課級主管', 0, 10000, 0, 0, 0, 20000, 0, 10000);
|
|
|
|
|
|
CREATE OR REPLACE VIEW public.view_employee_approval_amount AS
|
|
SELECT
|
|
DISTINCT
|
|
emp.employee_no,
|
|
emp.full_name,
|
|
emp.job_title_code,
|
|
emp.job_title_name,
|
|
form_org.layer_code,
|
|
form_org.layer_name,
|
|
approvedAmount.layer_description,
|
|
formula_org.org_code AS formula_org_code,
|
|
formula_org.org_name AS formula_org_name,
|
|
form_org.org_code AS form_org_code,
|
|
form_org.org_name AS form_org_name,
|
|
approvedAmount.max_capital_fee,
|
|
approvedAmount.max_expense_fee,
|
|
approvedAmount.max_payment_penalty_fee,
|
|
approvedAmount.max_payment_relation_fee,
|
|
approvedAmount.max_payment_current_capital_fee,
|
|
approvedAmount.max_payment_regular_expense_fee,
|
|
approvedAmount.max_payment_other_capital_fee,
|
|
approvedAmount.max_payment_other_expense_fee
|
|
FROM
|
|
public.api_employee_info emp
|
|
LEFT JOIN
|
|
public.api_organization form_org ON emp.form_org_code = form_org.org_code
|
|
LEFT JOIN
|
|
public.api_organization formula_org ON emp.formula_org_code = formula_org.org_code
|
|
LEFT JOIN
|
|
public.FSe7en_Org_MemberStruct memberStruct ON emp.employee_no = memberStruct.employee_no
|
|
LEFT JOIN
|
|
public.approved_amount_for_each_layer approvedAmount ON form_org.layer_code = approvedAmount.layer_code
|
|
where emp.employed_status in ('1', '2') and memberStruct.approve_right='1'
|
|
order by layer_code;
|
|
|
|
REFRESH MATERIALIZED VIEW fse7en_org_deptgradeinfo;
|
|
REFRESH MATERIALIZED VIEW fse7en_org_deptinfo;
|
|
REFRESH MATERIALIZED VIEW fse7en_org_deptstruct;
|
|
REFRESH MATERIALIZED VIEW fse7en_org_jobtitle2grade;
|
|
REFRESH MATERIALIZED VIEW fse7en_org_memberinfo;
|
|
REFRESH MATERIALIZED VIEW fse7en_org_memberstruct;
|
|
|
|
--EHR_EMPLOYEE
|
|
CREATE OR REPLACE VIEW view_core_ehr_employee AS
|
|
SELECT
|
|
employee_no,
|
|
full_name,
|
|
formula_org_code,
|
|
job_title_code,
|
|
job_title_name,
|
|
position_code,
|
|
job_grade_code,
|
|
job_level_code,
|
|
to_char(hire_date, 'yyyy-MM-dd') as hire_date,
|
|
to_char(resignation_date, 'yyyy-MM-dd') as resignation_date,
|
|
(
|
|
SELECT
|
|
manager_employee_no
|
|
FROM
|
|
Find_approval_manager(employee_no, '0')
|
|
) AS manager_employee_no,
|
|
(
|
|
SELECT
|
|
manager_full_name
|
|
FROM
|
|
Find_approval_manager(employee_no, '0')
|
|
) AS manager_full_name,
|
|
employed_status,
|
|
email_address
|
|
FROM
|
|
api_employee_info ami;
|
|
|
|
|
|
--EHR_DEPARTMENT
|
|
CREATE OR REPLACE VIEW view_core_ehr_department AS
|
|
select
|
|
ao.org_code,
|
|
ao.org_name as org_abbr_name,
|
|
ao.org_name,
|
|
(
|
|
select
|
|
employee_no
|
|
from
|
|
api_organization_manager
|
|
where
|
|
manager_role_type is null
|
|
or manager_role_type = ''
|
|
and org_code = aor.parent_org_code
|
|
order by
|
|
effective_date desc
|
|
limit
|
|
1
|
|
) as manager_employee_no,
|
|
(
|
|
select
|
|
full_name
|
|
from
|
|
api_organization_manager
|
|
where
|
|
manager_role_type is null
|
|
or manager_role_type = ''
|
|
and org_code = aor.parent_org_code
|
|
order by
|
|
effective_date desc
|
|
limit
|
|
1
|
|
) as manager_full_name,
|
|
aor.parent_org_code as parent_org_code,
|
|
to_char(ao.start_date, 'yyyy-MM-dd') as start_date,
|
|
to_char(ao.end_date, 'yyyy-MM-dd') as end_date,
|
|
false as is_virtual
|
|
from
|
|
api_organization ao
|
|
left outer join api_organization_relation aor on ao.org_code = aor.org_code
|
|
and aor.org_tree_type = '0';
|
|
|
|
|