Advertisement
aadddrr

r_sales_summary KPS-UAT

Apr 27th, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Function: r_sales_summary(character varying, bigint, bigint, bigint, character varying, bigint, character varying, character varying, bigint)
  2.  
  3. -- DROP FUNCTION r_sales_summary(character varying, bigint, bigint, bigint, character varying, bigint, character varying, character varying, bigint);
  4.  
  5. CREATE OR REPLACE FUNCTION r_sales_summary(character varying, bigint, bigint, bigint, character varying, bigint, character varying, character varying, bigint)
  6.   RETURNS SETOF refcursor AS
  7. $BODY$
  8. DECLARE
  9.     pRefHeader          REFCURSOR := 'refHeader';
  10.     pRefDetail          REFCURSOR := 'refDetail';
  11.     pRefDetail2         REFCURSOR := 'refDetail2';
  12.     pRefSummary         REFCURSOR := 'refSummary';
  13.     pRefSummaryDetail   REFCURSOR := 'refSummaryDetail';
  14.    
  15.     pSessionId          ALIAS FOR $1;
  16.     pTenantId           ALIAS FOR $2;
  17.     pUserId             ALIAS FOR $3;
  18.     pRoleId             ALIAS FOR $4;
  19.     pDatetime           ALIAS FOR $5;
  20.     pOuId               ALIAS FOR $6;
  21.     pStartDate          ALIAS FOR $7;
  22.     pEndDate            ALIAS FOR $8;
  23.     pPartnerId          ALIAS FOR $9;
  24.  
  25.     vEmptyId            bigint := -99;
  26.     vEmptyString        character varying := '';
  27.     vEmptyNumeric       numeric := 0;
  28.     vFilterPartner      text := '';
  29.     vReceiveGoodsManualDocTypeId bigint := 114;
  30.     vDocTypeDo          bigint := 311;
  31.     vDocTypeDoReceipt   bigint := 526;
  32.     vDocTypeReturnNote  bigint := 502;
  33.     vYes                character varying := 'Y';
  34.     vNo                 character varying := 'N';
  35.     vSubTotal           numeric := 0;
  36.     vDPP                numeric := 0;
  37.     vPPN                numeric := 0;
  38.    
  39. BEGIN
  40.    
  41.     DELETE FROM tr_report_sales_supplier WHERE session_id = pSessionId;
  42.                  
  43.     IF (pRoleId = -2) THEN
  44.  
  45.         SELECT partner_id INTO pPartnerId
  46.         FROM m_partner_user WHERE user_id = pUserId;
  47.  
  48.         vFilterPartner := ' AND C.supplier_id =  ' || pPartnerId;
  49.     ELSE
  50.        IF (pPartnerId <> vEmptyId) THEN
  51.         vFilterPartner := ' AND C.supplier_id = ' || pPartnerId;
  52.        END IF
  53.     END IF;
  54.    
  55.     /*
  56.      * insert data into table tr_report_sales_supplier for DO konsiyansi
  57.      */
  58.     EXECUTE '
  59.     INSERT INTO tr_report_sales_supplier(
  60.  
  61.            session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_no,
  62.            doc_date, payment_method, product_id, product_code, supplier_product_code,
  63.            product_name, product_style, color, psize, normal_price, sold_price,
  64.            discount, margin_supp, sold_price_after_margin, qty_so)
  65.     SELECT $1, $2, $3, C.supplier_id, E.ref_id, f_get_doc_desc(D.doc_type_id), D.doc_no,
  66.            D.doc_date, $4, E.product_id, f_get_product_code(E.product_id), C.supplier_product_code,
  67.            f_get_product_name(E.product_id), B.style_product, B.color, B.size, F.normal_price_correction, F.sold_price_used,
  68.            F.discount, F.margin_supp_correction, F.sold_price_after_margin, SUM(E.qty_dlv_int)
  69.     FROM sl_so_balance_invoice A
  70.     INNER JOIN sl_do D ON A.ref_id = D.do_id AND D.doc_type_id = A.ref_doc_type_id AND D.ref_id = A.so_id
  71.     INNER JOIN sl_do_item E ON D.do_id = E.do_id AND A.ref_item_id = E.do_item_id
  72.     INNER JOIN m_product_custom B ON E.product_id = B.product_id
  73.     INNER JOIN m_product_consignment_supp_info C ON E.product_id = C.product_id
  74.     INNER JOIN pu_po_balance_item_consignment_sold F ON E.ref_id = F.so_item_id AND C.supplier_id = F.supplier_id
  75.     WHERE A.tenant_id = $2
  76.         AND D.doc_date BETWEEN $5 AND $6
  77.         AND A.ou_id = $3
  78.         AND B.flg_buy_konsinyasi = $7
  79.         AND A.ref_doc_type_id = $8
  80.         AND A.do_receipt_item_id = -99 ' ||
  81.         vFilterPartner || '
  82.         AND F.from_manual = $9
  83.     GROUP BY C.supplier_id, E.ref_id, D.doc_type_id, D.doc_no, D.doc_date, E.product_id, C.supplier_product_code, B.style_product, B.color, B.size,
  84.     F.normal_price_correction, F.sold_price_used, F.discount, F.margin_supp_correction, F.sold_price_after_margin
  85.     ' USING pSessionId, pTenantId, pOuId, vEmptyString, pStartDate, pEndDate, vYes, vDocTypeDo, vNo;
  86.    
  87.     -- insert data into table tr_report_sales_supplier for GR Manual Consignment
  88.    
  89.     EXECUTE '
  90.     INSERT INTO tr_report_sales_supplier(
  91.            session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_no,
  92.            doc_date, payment_method, product_id, product_code, supplier_product_code,
  93.            product_name, product_style, color, psize, normal_price, sold_price,
  94.            discount, margin_supp, sold_price_after_margin, qty_so)
  95.     SELECT $1, $2, $3, C.supplier_id,A.so_item_id, f_get_doc_desc($9),
  96.             B.doc_no,
  97.             B.doc_date, $4,
  98.            C.product_id, f_get_product_code(C.product_id), C.supplier_product_code,
  99.             f_get_product_name(C.product_id), E.style_product, E.color, E.size,
  100.             A.normal_price_correction, A.sold_price_used,
  101.             A.discount, A.margin_supp_correction, A.sold_price_after_margin, SUM(D.qty_rcv_po)
  102.     FROM pu_po_balance_item_consignment_sold A
  103.     INNER JOIN pu_receive_goods B ON A.receive_goods_id = B.receive_goods_id
  104.     INNER JOIN pu_receive_goods_item D ON B.receive_goods_id = D.receive_goods_id AND A.receive_goods_item_id = D.receive_goods_item_id
  105.     INNER JOIN m_product_consignment_supp_info C ON C.product_id = D.product_id
  106.     INNER JOIN m_product_custom E ON E.product_id = C.product_id
  107.     WHERE B.tenant_id = $2
  108.         AND B.doc_date BETWEEN $5 AND $6
  109.         AND B.ou_id = $3
  110.         AND E.flg_buy_konsinyasi = $7
  111.         AND B.doc_type_id = $8 ' || vFilterPartner || '
  112.         AND A.from_manual = $7
  113.     GROUP BY C.supplier_id, A.so_item_id, B.doc_type_id, B.doc_no, B.doc_date, C.product_id,
  114.              C.supplier_product_code, E.style_product, E.color, E.size,
  115.     A.normal_price_correction, A.sold_price_used, A.discount, A.margin_supp_correction, A.sold_price_after_margin
  116.     ' USING pSessionId, pTenantId, pOuId, vEmptyString, pStartDate, pEndDate, vYes, vReceiveGoodsManualDocTypeId, vDocTypeDo;
  117.                
  118.     /*
  119.      * insert data into table tr_report_sales_supplier for Return Note konsiyansi
  120.      */
  121.     EXECUTE '
  122.     INSERT INTO tr_report_sales_supplier(
  123.            session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_no,
  124.            doc_date, payment_method, product_id, product_code, supplier_product_code,
  125.            product_name, product_style, color, psize, normal_price, sold_price,
  126.            discount, margin_supp, sold_price_after_margin, qty_so)
  127.     SELECT $1, $2, $3, C.supplier_id, E.ref_id, f_get_doc_desc(D.doc_type_id), D.doc_no,
  128.            D.doc_date, $4, E.product_id, f_get_product_code(E.product_id), C.supplier_product_code,
  129.            f_get_product_name(E.product_id), B.style_product, B.color, B.size, F.normal_price_correction, F.sold_price_used,
  130.            F.discount, F.margin_supp_correction, F.sold_price_after_margin, SUM(G.qty_realization) * -1
  131.     FROM sl_so_balance_invoice A
  132.     INNER JOIN in_inventory D ON A.ref_id = D.inventory_id
  133.     INNER JOIN in_inventory_item G ON D.inventory_id = G.inventory_id AND A.ref_item_id = G.ref_item_id
  134.     INNER JOIN sl_do_item E ON G.ref_item_id = E.do_item_id AND G.product_id = E.product_id
  135.     INNER JOIN m_product_custom B ON E.product_id = B.product_id
  136.     INNER JOIN m_product_consignment_supp_info C ON E.product_id = C.product_id
  137.     INNER JOIN pu_po_balance_item_consignment_sold F ON E.ref_id = F.so_item_id AND C.supplier_id = F.supplier_id
  138.     WHERE A.tenant_id = $2
  139.         AND D.doc_date BETWEEN $5 AND $6
  140.         AND A.ou_id = $3
  141.         AND B.flg_buy_konsinyasi = $7
  142.         AND A.ref_doc_type_id IN ($8) ' || 
  143.         vFilterPartner || '
  144.         AND F.from_manual = $9
  145.     GROUP BY C.supplier_id, E.ref_id, D.doc_type_id, D.doc_no, D.doc_date, E.product_id, C.supplier_product_code, B.style_product, B.color, B.size,
  146.     F.normal_price_correction, F.sold_price_used, F.discount, F.margin_supp_correction, F.sold_price_after_margin
  147.     ' USING pSessionId, pTenantId, pOuId, vEmptyString, pStartDate, pEndDate, vYes, vDocTypeReturnNote, vNo;
  148.    
  149.    
  150.     /*
  151.      * insert data into table tr_report_sales_supplier for DO Receipt konsiyansi
  152.      */
  153.     EXECUTE '
  154.     INSERT INTO tr_report_sales_supplier(
  155.            session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_no,
  156.            doc_date, payment_method, product_id, product_code, supplier_product_code,
  157.            product_name, product_style, color, psize, normal_price, sold_price,
  158.            discount, margin_supp, sold_price_after_margin, qty_so)
  159.     SELECT $1, $2, $3, C.supplier_id, E.ref_id, f_get_doc_desc(D.doc_type_id), D.doc_no,
  160.            D.doc_date, $4, E.product_id, f_get_product_code(E.product_id), C.supplier_product_code,
  161.            f_get_product_name(E.product_id), B.style_product, B.color, B.size, F.normal_price_correction, F.sold_price_used,
  162.            F.discount, F.margin_supp_correction, F.sold_price_after_margin, SUM(G.qty_return) * -1
  163.     FROM sl_so_balance_invoice A
  164.     INNER JOIN in_do_receipt D ON A.ref_id = D.ref_id
  165.     INNER JOIN in_do_receipt_item G ON D.do_receipt_id = G.do_receipt_id AND A.ref_item_id = G.ref_id AND G.do_receipt_item_id = A.do_receipt_item_id
  166.     INNER JOIN sl_do_item E ON G.ref_id = E.do_item_id AND G.product_id = E.product_id AND E.do_item_id = A.ref_item_id
  167.     INNER JOIN m_product_custom B ON E.product_id = B.product_id
  168.     INNER JOIN m_product_consignment_supp_info C ON E.product_id = C.product_id
  169.     INNER JOIN pu_po_balance_item_consignment_sold F ON E.ref_id = F.so_item_id AND C.supplier_id = F.supplier_id
  170.     WHERE A.tenant_id = $2
  171.         AND D.doc_date BETWEEN $5 AND $6
  172.         AND A.ou_id = $3
  173.         AND B.flg_buy_konsinyasi = $7
  174.         AND A.ref_doc_type_id IN ($9) ' || 
  175.         vFilterPartner || '
  176.         AND F.from_manual = $8
  177.     GROUP BY C.supplier_id, E.ref_id, D.doc_type_id, D.doc_no, D.doc_date, E.product_id, C.supplier_product_code, B.style_product, B.color, B.size,
  178.     F.normal_price_correction, F.sold_price_used, F.discount, F.margin_supp_correction, F.sold_price_after_margin
  179.     ' USING pSessionId, pTenantId, pOuId, vEmptyString, pStartDate, pEndDate, vYes, vNo, vDocTypeDo;
  180.        
  181.  
  182.    
  183.     SELECT SUM(sub_total) INTO vSubTotal FROM (
  184.     SELECT (sold_price_after_margin * SUM(qty_so)) AS sub_total
  185.         FROM tr_report_sales_supplier
  186.         WHERE session_id = pSessionId
  187.             AND tenant_id = pTenantId
  188.         GROUP BY transaction_type, doc_no, doc_date, payment_method, product_code,
  189.            supplier_product_code, product_name, product_style, color, psize, normal_price,
  190.            sold_price, discount, margin_supp, sold_price_after_margin, partner_id ) Z;
  191.  
  192.     vDPP = vSubTotal / 1.1;
  193.    
  194.     vPPN =  vSubTotal - vDPP;
  195.        
  196.     Open pRefHeader FOR
  197.     SELECT pPartnerId AS partner_id, CASE WHEN pPartnerId = vEmptyId THEN '(All)' ELSE f_get_partner_name(pPartnerId) END AS partner_name, pStartDate AS start_date,   
  198.         pEndDate AS end_date, pDatetime AS print_datetime, pOuId AS ou_id, f_get_ou_name(pOuId) AS ou_name,
  199.         ROUND(COALESCE(vDPP, 0.0), 0) AS dpp, ROUND(COALESCE(vPPN, 0.0), 0) AS ppn;
  200.     RETURN NEXT pRefHeader;
  201.  
  202.    
  203.     Open pRefDetail FOR
  204.         SELECT A.transaction_type, A.doc_no, A.doc_date, A.payment_method, A.product_code,
  205.            A.supplier_product_code, A.product_name, A.product_style, A.color, A.psize, A.normal_price,
  206.            A.sold_price, A.discount, A.margin_supp, A.sold_price_after_margin, SUM(A.qty_so) AS qty_so, (A.sold_price_after_margin * SUM(A.qty_so)) AS sold_price_after_margin_multiply_quantity,
  207.            f_get_partner_name(A.partner_id) AS supplier_name, f_get_partner_code(A.partner_id) AS supplier_code ,B.flg_pkp,
  208.            (A.sold_price * SUM(A.qty_so)) AS sub_total , ROUND(COALESCE(A.sold_price_after_margin * SUM(A.qty_so) / (1.1),0.0),0) AS dpp,
  209.            ROUND(COALESCE(A.sold_price_after_margin * SUM(A.qty_so) - A.sold_price_after_margin * SUM(A.qty_so) / (1.1),0.0),0) AS ppn,
  210.            ROUND((A.sold_price * SUM(A.qty_so))/1.1) as dpp_terjual, ((A.sold_price * SUM(A.qty_so))-ROUND((A.sold_price * SUM(A.qty_so))/1.1)) as ppn_terjual,
  211.            ROUND(A.sold_price/1.1) AS sold_price_dpp
  212.         FROM tr_report_sales_supplier A
  213.         INNER JOIN m_partner_npwp B ON A.partner_id = B.partner_id
  214.         WHERE A.session_id = pSessionId
  215.             AND A.tenant_id = pTenantId
  216.         GROUP BY A.transaction_type, A.doc_no, A.doc_date, A.payment_method, A.product_code,
  217.            A.supplier_product_code, A.product_name, A.product_style, A.color, A.psize, A.normal_price,
  218.            A.sold_price, A.discount, A.margin_supp, A.sold_price_after_margin, A.partner_id,B.flg_pkp
  219.         ORDER BY supplier_name, doc_date, doc_no;
  220.     RETURN NEXT pRefDetail ;
  221.    
  222.     Open pRefSummary FOR
  223.         SELECT f_get_partner_name(A.partner_id) AS supplier_name, SUM(A.sold_price * A.qty_so) AS sub_total, SUM(A.sold_price_after_margin * A.qty_so) AS sold_price_after_margin_multiply_quantity,
  224.             ROUND(SUM(A.sold_price * A.qty_so)/1.1) AS sub_total_dpp
  225.         FROM tr_report_sales_supplier A
  226.         INNER JOIN m_partner_npwp B ON A.partner_id = B.partner_id
  227.         WHERE A.session_id = pSessionId
  228.             AND A.tenant_id = pTenantId
  229.         GROUP BY A.partner_id
  230.         ORDER BY supplier_name;
  231.     RETURN NEXT pRefSummary;
  232.    
  233.    
  234.     DELETE FROM tr_report_sales_supplier WHERE session_id = pSessionId;
  235.     DELETE FROM tr_report_sales_supplier_for_sales_summary WHERE session_id = pSessionId;
  236.  
  237.     IF (pRoleId = -2) THEN
  238.  
  239.         SELECT partner_id INTO pPartnerId
  240.         FROM m_partner_user WHERE user_id = pUserId;
  241.  
  242.         vFilterPartner := ' AND C.supplier_id =  ' || pPartnerId;
  243.     ELSE
  244.        IF (pPartnerId <> vEmptyId) THEN
  245.         vFilterPartner := ' AND C.supplier_id = ' || pPartnerId;
  246.        END IF
  247.     END IF;
  248.    
  249.     /*
  250.      * insert data into table tr_report_sales_supplier for DO non konsiyansi
  251.      */
  252.     EXECUTE '
  253.     INSERT INTO tr_report_sales_supplier_for_sales_summary(
  254.            session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_type_id, doc_id, doc_no,
  255.            doc_date, payment_method, product_id, product_code, supplier_product_code,
  256.            product_name, product_style, color, psize, normal_price, sold_price,
  257.            discount, margin_supp, sold_price_after_margin, qty_so)
  258.     SELECT $1, $2, $3, C.supplier_id, E.ref_id, f_get_doc_desc(D.doc_type_id), D.doc_type_id, D.do_id, D.doc_no,
  259.            D.doc_date, $4, E.product_id, f_get_product_code(E.product_id), C.supplier_product_code,
  260.            f_get_product_name(E.product_id), B.style_product, B.color, B.size, G.gross_sell_price, G.nett_sell_price,
  261.            (((G.gross_sell_price - G.nett_sell_price)/100) * 100), $5, $5, SUM(E.qty_dlv_int)
  262.     FROM sl_so_balance_invoice A
  263.     INNER JOIN sl_do D ON A.ref_id = D.do_id AND D.doc_type_id = A.ref_doc_type_id AND D.ref_id = A.so_id
  264.     INNER JOIN sl_do_item E ON D.do_id = E.do_id AND A.ref_item_id = E.do_item_id
  265.     INNER JOIN m_product_custom B ON E.product_id = B.product_id
  266.     INNER JOIN m_product_consignment_supp_info C ON E.product_id = C.product_id  
  267.     INNER JOIN sl_so_item G ON E.ref_id = G.so_item_id AND A.so_id = G.so_id AND E.product_id = G.product_id
  268.     WHERE A.tenant_id = $2
  269.         AND D.doc_date BETWEEN $6 AND $7
  270.         AND A.ou_id = $3
  271.         AND B.flg_buy_konsinyasi = $8
  272.         AND A.ref_doc_type_id = $9
  273.         AND A.do_receipt_item_id = -99 ' ||
  274.         vFilterPartner || '
  275.     GROUP BY C.supplier_id, E.ref_id, D.doc_type_id, D.do_id, D.doc_no, D.doc_date, E.product_id, C.supplier_product_code, B.style_product, B.color, B.size,
  276.     G.gross_sell_price, G.nett_sell_price
  277.     ' USING pSessionId, pTenantId, pOuId, vEmptyString, vEmptyNumeric, pStartDate, pEndDate, vNo, vDocTypeDo;
  278.    
  279.     /*
  280.      * insert data into table tr_report_sales_supplier for Return Note non konsiyansi
  281.      */
  282.     EXECUTE '
  283.     INSERT INTO tr_report_sales_supplier_for_sales_summary(
  284.            session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_type_id, doc_id , doc_no,
  285.            doc_date, payment_method, product_id, product_code, supplier_product_code,
  286.            product_name, product_style, color, psize, normal_price, sold_price,
  287.            discount, margin_supp, sold_price_after_margin, qty_so)
  288.     SELECT $1, $2, $3, C.supplier_id, E.ref_id, f_get_doc_desc(D.doc_type_id), D.doc_type_id, D.inventory_id, D.doc_no,
  289.            D.doc_date, $4, E.product_id, f_get_product_code(E.product_id), C.supplier_product_code,
  290.            f_get_product_name(E.product_id), B.style_product, B.color, B.size, I.gross_sell_price, I.nett_sell_price,
  291.            (((I.gross_sell_price - I.nett_sell_price)/100) * 100), $5, $5, SUM(G.qty_realization) * -1
  292.     FROM sl_so_balance_invoice A
  293.     INNER JOIN in_inventory D ON A.ref_id = D.inventory_id AND A.ref_doc_type_id = D.doc_type_id
  294.     INNER JOIN in_inventory_item G ON D.inventory_id = G.inventory_id AND A.ref_item_id = G.ref_item_id
  295.     INNER JOIN sl_do_item E ON G.ref_item_id = E.do_item_id AND G.product_id = E.product_id AND E.do_item_id = A.ref_item_id
  296.     INNER JOIN sl_do H ON E.do_id = H.do_id AND H.ref_id = A.so_id
  297.     INNER JOIN sl_so_item I ON E.ref_id = I.so_item_id AND A.so_id = I.so_id AND E.product_id = I.product_id
  298.     INNER JOIN m_product_custom B ON E.product_id = B.product_id
  299.     INNER JOIN m_product_consignment_supp_info C ON E.product_id = C.product_id
  300.     WHERE A.tenant_id = $2
  301.         AND D.doc_date BETWEEN $6 AND $7
  302.         AND A.ou_id = $3
  303.         AND B.flg_buy_konsinyasi = $8
  304.         AND A.ref_doc_type_id IN ($9) ' || 
  305.         vFilterPartner || '
  306.     GROUP BY C.supplier_id, E.ref_id, D.doc_type_id, D.inventory_id, D.doc_no, D.doc_date, E.product_id, C.supplier_product_code, B.style_product, B.color, B.size,
  307.     I.gross_sell_price, I.nett_sell_price
  308.     ' USING pSessionId, pTenantId, pOuId, vEmptyString, vEmptyNumeric, pStartDate, pEndDate, vNo, vDocTypeReturnNote;
  309.  
  310.     --
  311.     /*
  312.      * insert data into table tr_report_sales_supplier for DO Receipt non konsiyansi
  313.      */
  314.     EXECUTE '
  315.     INSERT INTO tr_report_sales_supplier_for_sales_summary(
  316.            session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_type_id, doc_id, doc_no,
  317.            doc_date, payment_method, product_id, product_code, supplier_product_code,
  318.            product_name, product_style, color, psize, normal_price, sold_price,
  319.            discount, margin_supp, sold_price_after_margin, qty_so)
  320.     SELECT $1, $2, $3, C.supplier_id, E.ref_id, f_get_doc_desc(D.doc_type_id), D.doc_type_id, D.do_receipt_id, D.doc_no,
  321.            D.doc_date, $4, E.product_id, f_get_product_code(E.product_id), C.supplier_product_code,
  322.            f_get_product_name(E.product_id), B.style_product, B.color, B.size, I.gross_sell_price, I.nett_sell_price,
  323.            (((I.gross_sell_price - I.nett_sell_price)/100) * 100), $5, $5, SUM(G.qty_return) * -1
  324.     FROM sl_so_balance_invoice A
  325.     INNER JOIN in_do_receipt D ON A.ref_id = D.ref_id
  326.     INNER JOIN in_do_receipt_item G ON D.do_receipt_id = G.do_receipt_id AND A.ref_item_id = G.ref_id AND G.do_receipt_item_id = A.do_receipt_item_id
  327.     INNER JOIN sl_do_item E ON G.ref_id = E.do_item_id AND G.product_id = E.product_id AND E.do_item_id = A.ref_item_id
  328.     INNER JOIN sl_do H ON E.do_id = H.do_id AND H.do_id = A.ref_id AND H.ref_id = A.so_id
  329.     INNER JOIN sl_so_item I ON E.ref_id = I.so_item_id AND A.so_id = I.so_id AND E.product_id = I.product_id
  330.     INNER JOIN m_product_custom B ON E.product_id = B.product_id
  331.     INNER JOIN m_product_consignment_supp_info C ON E.product_id = C.product_id
  332.     WHERE A.tenant_id = $2
  333.         AND D.doc_date BETWEEN $6 AND $7
  334.         AND A.ou_id = $3
  335.         AND B.flg_buy_konsinyasi = $8
  336.         AND A.ref_doc_type_id IN ($9) ' || 
  337.         vFilterPartner || '
  338.     GROUP BY C.supplier_id, E.ref_id, D.doc_type_id, D.do_receipt_id, D.doc_no, D.doc_date, E.product_id, C.supplier_product_code, B.style_product, B.color, B.size,
  339.     I.gross_sell_price, I.nett_sell_price
  340.     ' USING pSessionId, pTenantId, pOuId, vEmptyString, vEmptyNumeric, pStartDate, pEndDate, vNo, vDocTypeDo;
  341.    
  342.  
  343.    
  344.     -- TODO
  345.     UPDATE tr_report_sales_supplier_for_sales_summary Z
  346.        SET sold_price_after_margin = 0
  347.        WHERE Z.session_id = pSessionId;
  348.        
  349.     UPDATE tr_report_sales_supplier_for_sales_summary Z
  350.        SET sold_price_after_margin = B.gl_amount / B.qty
  351.        FROM in_summary_monthly_amount B
  352.        WHERE Z.doc_type_id = B.doc_type_id
  353.        AND Z.product_id = B.product_id
  354.        AND SUBSTRING(Z.doc_date,1,6) = B.date_year_month
  355.        AND Z.session_id = pSessionId
  356.        AND B.qty <> 0;
  357.  
  358.    
  359.     UPDATE tr_report_sales_supplier_for_sales_summary A
  360.     SET margin_supp = (A.sold_price_after_margin / A.sold_price) * 100
  361.     WHERE A.session_id = pSessionId
  362.       AND A.sold_price <> 0;
  363.      
  364.     UPDATE tr_report_sales_supplier_for_sales_summary A
  365.     SET margin_supp = 0
  366.     WHERE A.session_id = pSessionId
  367.       AND A.sold_price = 0;  
  368.      
  369.  
  370.     Open pRefDetail2 FOR
  371.         SELECT transaction_type, doc_no, doc_date, payment_method, product_code,
  372.            supplier_product_code, product_name, product_style, color, psize, normal_price,
  373.            sold_price, discount, margin_supp, sold_price_after_margin, SUM(qty_so) AS qty_so, (sold_price_after_margin * SUM(qty_so)) AS sold_price_after_margin_multiply_quantity,
  374.            f_get_partner_name(partner_id) AS supplier_name, f_get_partner_code(partner_id) AS supplier_code, 'N' AS flg_pkp ,
  375.            (sold_price * SUM(qty_so)) AS sub_total,ROUND((sold_price * SUM(qty_so))/1.1) as dpp_terjual, ((sold_price * SUM(qty_so))-ROUND((sold_price * SUM(qty_so))/1.1)) as ppn_terjual,
  376.            ROUND(sold_price/1.1) AS sold_price_dpp
  377.         FROM tr_report_sales_supplier_for_sales_summary
  378.         WHERE session_id = pSessionId
  379.             AND tenant_id = pTenantId
  380.         GROUP BY transaction_type, doc_no, doc_date, payment_method, product_code,
  381.            supplier_product_code, product_name, product_style, color, psize, normal_price,
  382.            sold_price, discount, margin_supp, sold_price_after_margin, partner_id
  383.         ORDER BY supplier_name, doc_date, doc_no;
  384.     RETURN NEXT pRefDetail2;
  385.    
  386.     Open pRefSummaryDetail FOR
  387.         SELECT f_get_partner_name(partner_id) AS supplier_name, SUM(sold_price * qty_so) AS sub_total, SUM(sold_price_after_margin * qty_so) AS sold_price_after_margin_multiply_quantity,
  388.             ROUND(SUM(sold_price * qty_so)/1.1) AS sub_total_dpp
  389.         FROM tr_report_sales_supplier_for_sales_summary
  390.         WHERE session_id = pSessionId
  391.             AND tenant_id = pTenantId
  392.         GROUP BY partner_id
  393.         ORDER BY supplier_name;
  394.     RETURN NEXT pRefSummaryDetail;
  395.    
  396.     DELETE FROM tr_report_sales_supplier WHERE session_id = pSessionId;
  397.     DELETE FROM tr_report_sales_supplier_for_sales_summary WHERE session_id = pSessionId;
  398. END;
  399. $BODY$
  400.   LANGUAGE plpgsql VOLATILE
  401.   COST 100
  402.   ROWS 1000;
  403. ALTER FUNCTION r_sales_summary(character varying, bigint, bigint, bigint, character varying, bigint, character varying, character varying, bigint)
  404.   OWNER TO sts;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement