widana

r_supplier_sales (Baru)

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