Advertisement
aadddrr

Untitled

Mar 7th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE TABLE tt_salesman_from_salesman_hierarchy
  2. (
  3.     session_id VARCHAR(50),
  4.     tenant_id bigint,
  5.     salesman_id bigint,
  6.     group_brand VARCHAR(20),
  7.     sales_child_id bigint,
  8.     period_from VARCHAR(8),
  9.     period_to VARCHAR(8),
  10.     flg_get_child VARCHAR(1)
  11. )
  12. WITH (
  13.   OIDS=FALSE
  14. );
  15.  
  16. --Adrian, Mar 7, 2018
  17.  
  18. CREATE OR REPLACE FUNCTION f_get_salesman_from_salesman_hierarchy(character varying, bigint, bigint, character varying)
  19.   RETURNS void AS
  20. $BODY$
  21. DECLARE
  22.     pSessionId          ALIAS FOR $1;
  23.     pTenantId           ALIAS FOR $2;
  24.     pSalesmanId         ALIAS FOR $3;
  25.     pPeriod             ALIAS FOR $4;
  26.    
  27. BEGIN
  28.    
  29.     UPDATE tt_salesman_from_salesman_hierarchy SET flg_get_child = 'Y' WHERE sales_child_id = pSalesmanId;
  30.  
  31.     INSERT INTO tt_salesman_from_salesman_hierarchy
  32.     (session_id, tenant_id,
  33.     salesman_id, group_brand, sales_child_id, period_from, period_to,
  34.     flg_get_child)
  35.     SELECT pSessionId, A.tenant_id,
  36.     A.sales_leader_id, A.group_brand, A.salesman_id, A.period_from, A.period_to,
  37.     'N'
  38.     FROM m_salesman_hierarchy A
  39.     WHERE A.tenant_id = pTenantId AND
  40.         A.sales_leader_id = pSalesmanId AND
  41.         pPeriod BETWEEN A.period_from AND A.period_to;
  42.        
  43.     INSERT INTO tt_salesman_from_salesman_hierarchy
  44.     (session_id, tenant_id,
  45.     salesman_id, group_brand, sales_child_id, period_from, period_to,
  46.     flg_get_child)
  47.     SELECT pSessionId, A.tenant_id,
  48.     A.salesman_id, A.group_brand, A.salesman_id, A.period_from, A.period_to,
  49.     'Y'
  50.     FROM m_salesman_hierarchy A
  51.     WHERE A.tenant_id = pTenantId AND
  52.         A.salesman_id = pSalesmanId AND
  53.         pPeriod BETWEEN A.period_from AND A.period_to;
  54.        
  55.     UPDATE tt_salesman_from_salesman_hierarchy Z
  56.     SET flg_get_child = 'Y'
  57.     WHERE NOT EXISTS (
  58.         SELECT 1
  59.         FROM m_salesman_hierarchy A
  60.         WHERE A.tenant_id = Z.tenant_id AND
  61.             A.sales_leader_id = Z.sales_child_id AND
  62.             A.group_brand = Z.group_brand AND
  63.             pPeriod BETWEEN A.period_from AND A.period_to
  64.     ) AND
  65.     Z.flg_get_child = 'N';
  66.  
  67.     PERFORM f_get_salesman_from_salesman_hierarchy(pSessionId, pTenantId, A.sales_child_id, pPeriod)
  68.     FROM tt_salesman_from_salesman_hierarchy A
  69.     WHERE flg_get_child = 'N';
  70.    
  71. END;
  72. $BODY$
  73.   LANGUAGE plpgsql VOLATILE
  74.   COST 200;
  75. /
  76.  
  77.  
  78. --Adrian, Mar 7, 2018
  79.  
  80. CREATE OR REPLACE FUNCTION f_get_customer_from_salesman_hierarchy(character varying, bigint, bigint, character varying)
  81.   RETURNS SETOF refcursor AS
  82. $BODY$
  83. DECLARE
  84.     pRefDetail          REFCURSOR := 'refDetail';
  85.     pSessionId          ALIAS FOR $1;
  86.     pTenantId           ALIAS FOR $2;
  87.     pSalesmanId         ALIAS FOR $3;
  88.     pPeriod             ALIAS FOR $4;
  89.    
  90. BEGIN
  91.  
  92.     DELETE FROM tt_salesman_from_salesman_hierarchy WHERE session_id = pSessionId;
  93.    
  94.     PERFORM f_get_salesman_from_salesman_hierarchy(pSessionId, pTenantId, pSalesmanId, pPeriod);
  95.    
  96.     Open pRefDetail FOR
  97.         WITH grouped_salesman AS (
  98.             SELECT A.tenant_id,
  99.                 A.sales_child_id, A.group_brand, A.period_from, A.period_to
  100.             FROM tt_salesman_from_salesman_hierarchy A
  101.             WHERE A.session_id = pSessionId AND
  102.                 A.tenant_id = pTenantId AND
  103.                 pPeriod BETWEEN A.period_from AND A.period_to
  104.             GROUP BY session_id, A.tenant_id,
  105.                 A.sales_child_id, A.group_brand, A.period_from, A.period_to
  106.         )
  107.         SELECT B.customer_id AS id, f_get_partner_code(B.customer_id) AS code, f_get_partner_name(B.customer_id) AS name
  108.         FROM grouped_salesman A
  109.         INNER JOIN m_salesman_to_customer B
  110.             ON A.tenant_id = B.tenant_id AND
  111.                 A.sales_child_id = B.salesman_id AND
  112.                 A.group_brand = B.group_brand
  113.         WHERE A.tenant_id = pTenantId AND
  114.             pPeriod BETWEEN B.period_from AND B.period_to;
  115.     RETURN NEXT pRefDetail;
  116.    
  117.     DELETE FROM tt_salesman_from_salesman_hierarchy WHERE session_id = pSessionId;
  118.    
  119. END;
  120. $BODY$
  121.   LANGUAGE plpgsql VOLATILE
  122.   COST 200;
  123. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement