Advertisement
aadddrr

r_sales_summary

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