Advertisement
aadddrr

r_sales_summary_accounting KPS-UAT

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