Advertisement
aadddrr

Untitled

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