Advertisement
aadddrr

r_sales_summary ORIGINAL

Apr 18th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION r_sales_summary(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.     pRefDetail2         REFCURSOR := 'refDetail2';
  8.     pRefSummary         REFCURSOR := 'refSummary';
  9.     pRefSummaryDetail   REFCURSOR := 'refSummaryDetail';
  10.    
  11.     pSessionId          ALIAS FOR $1;
  12.     pTenantId           ALIAS FOR $2;
  13.     pUserId             ALIAS FOR $3;
  14.     pRoleId             ALIAS FOR $4;
  15.     pDatetime           ALIAS FOR $5;
  16.     pOuId               ALIAS FOR $6;
  17.     pStartDate          ALIAS FOR $7;
  18.     pEndDate            ALIAS FOR $8;
  19.     pPartnerId          ALIAS FOR $9;
  20.     pDocType            ALIAS FOR $10;
  21.  
  22.     vVoid           character varying := 'V';
  23.     vEmptyId            bigint := -99;
  24.     vEmptyString        character varying := '';
  25.     vEmptyNumeric       numeric := 0;
  26.     vReleaseDoc         character varying := 'R';
  27.     vStock              character varying := 'Y';
  28.     vFilterPartner      text := '';
  29.     vReceiveGoodsManualDocTypeId bigint := 114;
  30.     vDocTypeDo          bigint := 311;
  31.     vDocTypeDoReceipt   bigint := 526;
  32.     vDocTypeReturnNote  bigint := 502;
  33.     vDocTypePosShop     bigint := 401;
  34.     vDocTypePosShopInShop       bigint := 403;
  35.     vDocTypeVoidPosShop     bigint := 405;
  36.     vDocTypeVoidPosShopInShop       bigint := 406;
  37.     vYes                character varying := 'Y';
  38.     vNo             character varying := 'N';
  39.     vDoc                character varying := '';
  40.     vPOS                character varying := 'POS';
  41.     vFilterDocType      text := '';
  42.     vSubTotal       numeric := 0;
  43.     vDPP            numeric := 0;
  44.     vPPN            numeric := 0;
  45.    
  46. BEGIN
  47.    
  48.     DELETE FROM tr_report_sales_supplier WHERE session_id = pSessionId;
  49.                  
  50.     IF (pRoleId = -2) THEN
  51.  
  52.         SELECT partner_id INTO pPartnerId
  53.         FROM m_partner_user WHERE user_id = pUserId;
  54.  
  55.         vFilterPartner := ' AND C.supplier_id =  ' || pPartnerId;
  56.     ELSE
  57.        IF (pPartnerId <> vEmptyId) THEN
  58.         vFilterPartner := ' AND C.supplier_id = ' || pPartnerId;
  59.        END IF
  60.     END IF;
  61.    
  62.     IF (pDocType = vPOS) THEN
  63.             vDoc := 'POS';
  64.            
  65.             /*
  66.              * insert data into table tr_report_sales_supplier for POS Shop & POS Shop In Shop from in_log_product_balance_stock
  67.              */
  68.             EXECUTE '
  69.             INSERT INTO tr_report_sales_supplier(
  70.                     session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_no,
  71.                     doc_date, payment_method, product_id, product_code, supplier_product_code,
  72.                     product_name, product_style, color, psize, normal_price, sold_price,
  73.                     discount, margin_supp, sold_price_after_margin, qty_so)
  74.             SELECT $1, $2, $3, C.supplier_id, $10, f_get_doc_desc(A.doc_type_id), A.doc_no,
  75.                    A.doc_date, $4, A.product_id, f_get_product_code(A.product_id), C.supplier_product_code,
  76.                    f_get_product_name(A.product_id), B.style_product, B.color, B.size, F.normal_price_correction, F.sold_price_used,
  77.                    F.discount, F.margin_supp_correction, F.sold_price_after_margin, SUM(A.qty) * -1
  78.             FROM in_log_product_balance_stock A
  79.             INNER JOIN m_product_custom B ON A.product_id = B.product_id
  80.             INNER JOIN m_product_consignment_supp_info C ON A.product_id = C.product_id
  81.             INNER JOIN i_trx_pos D ON A.ref_id = D.trx_pos_id AND A.doc_type_id = D.doc_type_id
  82.             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
  83.             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
  84.                 AND E.process_no = F.pos_process_no AND E.trx_pos_item_id = F.trx_pos_item_id
  85.             WHERE A.tenant_id = $2
  86.                 AND A.doc_date BETWEEN $5 AND $6
  87.                 AND A.ou_id = $3
  88.                 AND B.flg_buy_konsinyasi = $7
  89.                 AND A.doc_type_id IN ($8, $9) ' || 
  90.                 vFilterPartner || '
  91.                 AND F.from_manual = $11
  92.             GROUP BY C.supplier_id, A.doc_type_id, A.doc_no, A.doc_date, A.product_id, C.
  93. supplier_product_code, B.style_product, B.color, B.size,
  94.             F.normal_price_correction, F.sold_price_used, F.discount, F.margin_supp_correction, F.sold_price_after_margin
  95.             ' USING pSessionId, pTenantId, pOuId, vEmptyString, pStartDate, pEndDate, vYes, vDocTypePosShop, vDocTypePosShopInShop, vEmptyId, vNo;
  96.            
  97.             /*
  98.              * insert data into table tr_report_sales_supplier for Void POS Shop & Void POS Shop In Shop from in_log_product_balance_stock
  99.              */
  100.             EXECUTE '
  101.             INSERT INTO tr_report_sales_supplier(
  102.                     session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_no,
  103.                     doc_date, payment_method, product_id, product_code, supplier_product_code,
  104.                     product_name, product_style, color, psize, normal_price, sold_price,
  105.                     discount, margin_supp, sold_price_after_margin, qty_so)
  106.             SELECT $1, $2, $3, C.supplier_id, $10, f_get_doc_desc(A.doc_type_id), A.doc_no,
  107.                    SUBSTRING(A.update_datetime, 1, 8) AS doc_date, $4, A.product_id, f_get_product_code(A.product_id), C.supplier_product_code,
  108.                    f_get_product_name(A.product_id), B.style_product, B.color, B.size, F.normal_price_correction, F.sold_price_used,
  109.                    F.discount, F.margin_supp_correction, F.sold_price_after_margin, SUM(A.qty) * -1
  110.             FROM in_log_product_balance_stock A
  111.             INNER JOIN m_product_custom B ON A.product_id = B.product_id
  112.             INNER JOIN m_product_consignment_supp_info C ON A.product_id = C.product_id
  113.             INNER JOIN i_trx_pos D ON A.ref_id = D.trx_pos_id AND A.doc_type_id = D.doc_type_id
  114.             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
  115.             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
  116.                 AND E.process_no = F.pos_process_no AND E.trx_pos_item_id = F.trx_pos_item_id
  117.             WHERE A.tenant_id = $2
  118.                 AND SUBSTRING(A.update_datetime, 1, 8) BETWEEN $5 AND $6
  119.                 AND A.ou_id = $3
  120.                 AND B.flg_buy_konsinyasi = $7
  121.                 AND A.doc_type_id IN ($8, $9) ' || 
  122.                 vFilterPartner || '
  123.                 AND F.from_manual = $11
  124.             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,
  125.             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)
  126.             ' USING pSessionId, pTenantId, pOuId, vEmptyString, pStartDate, pEndDate, vYes, vDocTypeVoidPosShop, vDocTypeVoidPosShopInShop, vEmptyId, vNo;
  127.            
  128.                
  129.         ELSE
  130.             vDoc := 'ALL';
  131.            
  132.             /*
  133.              * insert data into table tr_report_sales_supplier for DO from in_log_product_balance_stock
  134.              */
  135.             EXECUTE '
  136.             INSERT INTO tr_report_sales_supplier(
  137.  
  138.                     session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_no,
  139.                     doc_date, payment_method, product_id, product_code, supplier_product_code,
  140.                     product_name, product_style, color, psize, normal_price, sold_price,
  141.                     discount, margin_supp, sold_price_after_margin, qty_so)
  142.             SELECT $1, $2, $3, C.supplier_id, E.ref_id, f_get_doc_desc(A.doc_type_id), A.doc_no,
  143.                    A.doc_date, $4, A.product_id, f_get_product_code(A.product_id), C.supplier_product_code,
  144.                    f_get_product_name(A.product_id), B.style_product, B.color, B.size, F.normal_price_correction, F.sold_price_used,
  145.                    F.discount, F.margin_supp_correction, F.sold_price_after_margin, SUM(A.qty) * -1
  146.             FROM in_log_product_balance_stock A
  147.             INNER JOIN m_product_custom B ON A.product_id = B.product_id
  148.             INNER JOIN m_product_consignment_supp_info C ON A.product_id = C.product_id
  149.             INNER JOIN sl_do D ON A.ref_id = D.do_id
  150.             INNER JOIN sl_do_item E ON D.do_id = E.do_id AND A.product_id = E.product_id
  151.             INNER JOIN pu_po_balance_item_consignment_sold F ON E.ref_id = F.so_item_id AND C.supplier_id = F.supplier_id
  152.             WHERE A.tenant_id = $2
  153.                 AND A.doc_date BETWEEN $5 AND $6
  154.                 AND A.ou_id = $3
  155.                 AND B.flg_buy_konsinyasi = $7
  156.                 AND A.doc_type_id = $8 ' ||
  157.                 vFilterPartner || '
  158.                 AND F.from_manual = $9
  159.             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,
  160.             F.normal_price_correction, F.sold_price_used, F.discount, F.margin_supp_correction, F.sold_price_after_margin
  161.             ' USING pSessionId, pTenantId, pOuId, vEmptyString, pStartDate, pEndDate, vYes, vDocTypeDo, vNo;
  162.            
  163.             -- insert data into table tr_report_sales_supplier for GR Manual Consignment
  164.            
  165.             EXECUTE '
  166.             INSERT INTO tr_report_sales_supplier(
  167.                     session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_no,
  168.                     doc_date, payment_method, product_id, product_code, supplier_product_code,
  169.                     product_name, product_style, color, psize, normal_price, sold_price,
  170.                     discount, margin_supp, sold_price_after_margin, qty_so)
  171.             SELECT $1, $2, $3, C.supplier_id,A.so_item_id, f_get_doc_desc($10),
  172.                     B.doc_no,
  173.                     B.doc_date, $4,
  174.                    C.product_id, f_get_product_code(C.product_id), C.supplier_product_code,
  175.                     f_get_product_name(C.product_id), E.style_product, E.color, E.size,
  176.                     A.normal_price_correction, A.sold_price_used,
  177.                     A.discount, A.margin_supp_correction, A.sold_price_after_margin, SUM(D.qty_rcv_po)
  178.             FROM pu_po_balance_item_consignment_sold A
  179.             INNER JOIN pu_receive_goods B ON A.receive_goods_id = B.receive_goods_id
  180.             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
  181.             INNER JOIN m_product_consignment_supp_info C ON C.product_id = D.product_id
  182.             INNER JOIN m_product_custom E ON E.product_id = C.product_id
  183.             WHERE B.tenant_id = $2
  184.                 AND B.doc_date BETWEEN $5 AND $6
  185.                 AND B.ou_id = $3
  186.                 AND E.flg_buy_konsinyasi = $7
  187.                 AND B.doc_type_id = $8 ' || vFilterPartner || '
  188.                 AND A.from_manual = $7
  189.             GROUP BY C.supplier_id, A.so_item_id, B.doc_type_id, B.doc_no, B.doc_date, C.product_id,
  190.                      C.supplier_product_code, E.style_product, E.color, E.size,
  191.             A.normal_price_correction, A.sold_price_used, A.discount, A.margin_supp_correction, A.sold_price_after_margin
  192.             ' USING pSessionId, pTenantId, pOuId, vEmptyString, pStartDate, pEndDate, vYes, vReceiveGoodsManualDocTypeId, vYes, vDocTypeDo;
  193.  
  194.            
  195.             /*
  196.              * insert data into table tr_report_sales_supplier for DO from in_log_product_consignment_balance_stock
  197.              */
  198.             EXECUTE '
  199.             INSERT INTO tr_report_sales_supplier(
  200.                     session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_no,
  201.                     doc_date, payment_method, product_id, product_code, supplier_product_code,
  202.                     product_name, product_style, color, psize, normal_price, sold_price,
  203.                     discount, margin_supp, sold_price_after_margin, qty_so)
  204.             SELECT $1, $2, $3, C.supplier_id, E.ref_id, f_get_doc_desc(A.doc_type_id), A.doc_no,
  205.                    A.doc_date, $4, A.product_id, f_get_product_code(A.product_id), C.supplier_product_code,
  206.                    f_get_product_name(A.product_id), B.style_product, B.color, B.size, F.normal_price_correction, F.sold_price_used,
  207.                    F.discount, F.margin_supp_correction, F.sold_price_after_margin, SUM(A.qty) * -1
  208.             FROM in_log_product_consignment_balance_stock A
  209.             INNER JOIN m_product_custom B ON A.product_id = B.product_id
  210.             INNER JOIN m_product_consignment_supp_info C ON A.product_id = C.product_id
  211.             INNER JOIN sl_do D ON A.ref_id = D.do_id
  212.             INNER JOIN sl_do_item E ON D.do_id = E.do_id AND A.product_id = E.product_id
  213.             INNER JOIN pu_po_balance_item_consignment_sold F ON E.ref_id = F.so_item_id AND C.supplier_id = F.supplier_id
  214.             WHERE A.tenant_id = $2
  215.                 AND A.doc_date BETWEEN $5 AND $6
  216.                 AND A.ou_id = $3
  217.                 AND B.flg_buy_konsinyasi = $7
  218.                 AND A.doc_type_id = $8 ' ||
  219.                 vFilterPartner || '
  220.                 AND F.from_manual = $9
  221.             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,
  222.             F.normal_price_correction, F.sold_price_used, F.discount, F.margin_supp_correction, F.sold_price_after_margin
  223.             ' USING pSessionId, pTenantId, pOuId, vEmptyString, pStartDate, pEndDate, vYes, vDocTypeDo, vNo;
  224.        
  225.             /*
  226.              * insert data into table tr_report_sales_supplier for POS Shop & POS Shop In Shop from in_log_product_balance_stock
  227.              */
  228.             EXECUTE '
  229.             INSERT INTO tr_report_sales_supplier(
  230.                     session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_no,
  231.                     doc_date, payment_method, product_id, product_code, supplier_product_code,
  232.                     product_name, product_style, color, psize, normal_price, sold_price,
  233.                     discount, margin_supp, sold_price_after_margin, qty_so)
  234.             SELECT $1, $2, $3, C.supplier_id, $10, f_get_doc_desc(A.doc_type_id), A.doc_no,
  235.                    A.doc_date, $4, A.product_id, f_get_product_code(A.product_id), C.supplier_product_code,
  236.                    f_get_product_name(A.product_id), B.style_product, B.color, B.size, F.normal_price_correction, F.sold_price_used,
  237.                    F.discount, F.margin_supp_correction, F.sold_price_after_margin, SUM(A.qty) * -1
  238.             FROM in_log_product_balance_stock A
  239.             INNER JOIN m_product_custom B ON A.product_id = B.product_id
  240.             INNER JOIN m_product_consignment_supp_info C ON A.product_id = C.product_id
  241.             INNER JOIN i_trx_pos D ON A.ref_id = D.trx_pos_id AND A.doc_type_id = D.doc_type_id
  242.             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
  243.             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
  244.                 AND E.process_no = F.pos_process_no AND E.trx_pos_item_id = F.trx_pos_item_id
  245.             WHERE A.tenant_id = $2
  246.                 AND A.doc_date BETWEEN $5 AND $6
  247.                 AND A.ou_id = $3
  248.                 AND B.flg_buy_konsinyasi = $7
  249.                 AND A.doc_type_id IN ($8, $9) ' || 
  250.                 vFilterPartner || '
  251.                 AND F.from_manual = $11
  252.             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,
  253.             F.normal_price_correction, F.sold_price_used, F.discount, F.margin_supp_correction, F.sold_price_after_margin
  254.             ' USING pSessionId, pTenantId, pOuId, vEmptyString, pStartDate, pEndDate, vYes, vDocTypePosShop, vDocTypePosShopInShop, vEmptyId, vNo;
  255.                
  256.                 /*
  257.              * insert data into table tr_report_sales_supplier for Void POS Shop & Void POS Shop In Shop from in_log_product_balance_stock
  258.              */
  259.             EXECUTE '
  260.             INSERT INTO tr_report_sales_supplier(
  261.                     session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_no,
  262.                     doc_date, payment_method, product_id, product_code, supplier_product_code,
  263.                     product_name, product_style, color, psize, normal_price, sold_price,
  264.                     discount, margin_supp, sold_price_after_margin, qty_so)
  265.             SELECT $1, $2, $3, C.supplier_id, $10, f_get_doc_desc(A.doc_type_id), A.doc_no,
  266.                    SUBSTRING(A.update_datetime, 1, 8) AS doc_date, $4, A.product_id, f_get_product_code(A.product_id), C.supplier_product_code,
  267.                    f_get_product_name(A.product_id), B.style_product, B.color, B.size, F.normal_price_correction, F.sold_price_used,
  268.                    F.discount, F.margin_supp_correction, F.sold_price_after_margin, SUM(A.qty) * -1
  269.             FROM in_log_product_balance_stock A
  270.             INNER JOIN m_product_custom B ON A.product_id = B.product_id
  271.             INNER JOIN m_product_consignment_supp_info C ON A.product_id = C.product_id
  272.             INNER JOIN i_trx_pos D ON A.ref_id = D.trx_pos_id AND A.doc_type_id = D.doc_type_id
  273.             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
  274.             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
  275.                 AND E.process_no = F.pos_process_no AND E.trx_pos_item_id = F.trx_pos_item_id
  276.             WHERE A.tenant_id = $2
  277.                 AND SUBSTRING(A.update_datetime, 1, 8) BETWEEN $5 AND $6
  278.                 AND A.ou_id = $3
  279.                 AND B.flg_buy_konsinyasi = $7
  280.                 AND A.doc_type_id IN ($8, $9) ' || 
  281.                 vFilterPartner || '
  282.                 AND F.from_manual = $11
  283.             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,
  284.             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)
  285.             ' USING pSessionId, pTenantId, pOuId, vEmptyString, pStartDate, pEndDate, vYes, vDocTypeVoidPosShop, vDocTypeVoidPosShopInShop, vEmptyId, vNo;
  286.                         /*
  287.      * insert data into table tr_report_sales_supplier for Return Note from in_log_product_balance_stock
  288.      */
  289.     EXECUTE '
  290.     INSERT INTO tr_report_sales_supplier(
  291.            session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_no,
  292.            doc_date, payment_method, product_id, product_code, supplier_product_code,
  293.            product_name, product_style, color, psize, normal_price, sold_price,
  294.            discount, margin_supp, sold_price_after_margin, qty_so)
  295.     SELECT $1, $2, $3, C.supplier_id, E.ref_id, f_get_doc_desc(A.doc_type_id), A.doc_no,
  296.            A.doc_date, $4, A.product_id, f_get_product_code(A.product_id), C.supplier_product_code,
  297.            f_get_product_name(A.product_id), B.style_product, B.color, B.size, F.normal_price_correction, F.sold_price_used,
  298.            F.discount, F.margin_supp_correction, F.sold_price_after_margin, SUM(A.qty) * -1
  299.     FROM in_log_product_balance_stock A
  300.     INNER JOIN m_product_custom B ON A.product_id = B.product_id
  301.     INNER JOIN m_product_consignment_supp_info C ON A.product_id = C.product_id
  302.     INNER JOIN in_inventory D ON A.ref_id = D.inventory_id
  303.     INNER JOIN in_inventory_item G ON D.inventory_id = G.inventory_id AND A.product_id = G.product_id
  304.     INNER JOIN sl_do_item E ON G.ref_item_id = E.do_item_id AND G.product_id = E.product_id
  305.     INNER JOIN pu_po_balance_item_consignment_sold F ON E.ref_id = F.so_item_id AND C.supplier_id = F.supplier_id
  306.     WHERE A.tenant_id = $2
  307.         AND A.doc_date BETWEEN $5 AND $6
  308.         AND A.ou_id = $3
  309.         AND B.flg_buy_konsinyasi = $7
  310.         AND A.doc_type_id IN ($9) ' || 
  311.         vFilterPartner || '
  312.         AND F.from_manual = $10
  313.     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,
  314.     F.normal_price_correction, F.sold_price_used, F.discount, F.margin_supp_correction, F.sold_price_after_margin
  315.     ' USING pSessionId, pTenantId, pOuId, vEmptyString, pStartDate, pEndDate, vYes, vDocTypeDoReceipt, vDocTypeReturnNote, vNo;
  316.    
  317.    
  318.     /*
  319.      * insert data into table tr_report_sales_supplier for DO Receipt from in_log_product_balance_stock
  320.      */
  321.     EXECUTE '
  322.     INSERT INTO tr_report_sales_supplier(
  323.            session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_no,
  324.            doc_date, payment_method, product_id, product_code, supplier_product_code,
  325.            product_name, product_style, color, psize, normal_price, sold_price,
  326.            discount, margin_supp, sold_price_after_margin, qty_so)
  327.     SELECT $1, $2, $3, C.supplier_id, E.ref_id, f_get_doc_desc(A.doc_type_id), A.doc_no,
  328.            A.doc_date, $4, A.product_id, f_get_product_code(A.product_id), C.supplier_product_code,
  329.            f_get_product_name(A.product_id), B.style_product, B.color, B.size, F.normal_price_correction, F.sold_price_used,
  330.            F.discount, F.margin_supp_correction, F.sold_price_after_margin, SUM(A.qty) * -1
  331.     FROM in_log_product_balance_stock A
  332.     INNER JOIN m_product_custom B ON A.product_id = B.product_id
  333.     INNER JOIN m_product_consignment_supp_info C ON A.product_id = C.product_id
  334.     INNER JOIN in_do_receipt D ON A.ref_id = D.do_receipt_id
  335.     INNER JOIN in_do_receipt_item G ON D.do_receipt_id = G.do_receipt_id AND A.product_id = G.product_id
  336.     INNER JOIN sl_do_item E ON G.ref_id = E.do_item_id AND G.product_id = E.product_id
  337.     INNER JOIN pu_po_balance_item_consignment_sold F ON E.ref_id = F.so_item_id AND C.supplier_id = F.supplier_id
  338.     WHERE A.tenant_id = $2
  339.         AND A.doc_date BETWEEN $5 AND $6
  340.         AND A.ou_id = $3
  341.         AND B.flg_buy_konsinyasi = $7
  342.         AND A.doc_type_id IN ($8) ' || 
  343.         vFilterPartner || '
  344.         AND F.from_manual = $10
  345.     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,
  346.     F.normal_price_correction, F.sold_price_used, F.discount, F.margin_supp_correction, F.sold_price_after_margin
  347.     ' USING pSessionId, pTenantId, pOuId, vEmptyString, pStartDate, pEndDate, vYes, vDocTypeDoReceipt, vDocTypeReturnNote, vNo;
  348.    
  349.     /*
  350.      * insert data into table tr_report_sales_supplier for Return Note from in_log_product_consignment_balance_stock
  351.      */
  352.     EXECUTE '
  353.     INSERT INTO tr_report_sales_supplier(
  354.            session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_no,
  355.            doc_date, payment_method, product_id, product_code, supplier_product_code,
  356.            product_name, product_style, color, psize, normal_price, sold_price,
  357.            discount, margin_supp, sold_price_after_margin, qty_so)
  358.     SELECT $1, $2, $3, C.supplier_id, E.ref_id, f_get_doc_desc(A.doc_type_id), A.doc_no,
  359.            A.doc_date, $4, A.product_id, f_get_product_code(A.product_id), C.supplier_product_code,
  360.            f_get_product_name(A.product_id), B.style_product, B.color, B.size, F.normal_price_correction, F.sold_price_used,
  361.            F.discount, F.margin_supp_correction, F.sold_price_after_margin, SUM(A.qty) * -1
  362.     FROM in_log_product_consignment_balance_stock A
  363.     INNER JOIN m_product_custom B ON A.product_id = B.product_id
  364.     INNER JOIN m_product_consignment_supp_info C ON A.product_id = C.product_id
  365.     INNER JOIN in_inventory D ON A.ref_id = D.inventory_id
  366.     INNER JOIN in_inventory_item G ON D.inventory_id = G.inventory_id AND A.product_id = G.product_id
  367.     INNER JOIN sl_do_item E ON G.ref_item_id = E.do_item_id AND G.product_id = E.product_id
  368.     INNER JOIN pu_po_balance_item_consignment_sold F ON E.ref_id = F.so_item_id AND C.supplier_id = F.supplier_id
  369.     WHERE A.tenant_id = $2
  370.         AND A.doc_date BETWEEN $5 AND $6
  371.         AND A.ou_id = $3
  372.         AND B.flg_buy_konsinyasi = $7
  373.         AND A.doc_type_id IN ($9) ' || 
  374.         vFilterPartner || '
  375.         AND F.from_manual = $10
  376.     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,
  377.     F.normal_price_correction, F.sold_price_used, F.discount, F.margin_supp_correction, F.sold_price_after_margin
  378.     ' USING pSessionId, pTenantId, pOuId, vEmptyString, pStartDate, pEndDate, vYes, vDocTypeDoReceipt, vDocTypeReturnNote, vNo;
  379.    
  380.  
  381.     /*
  382.      * insert data into table tr_report_sales_supplier for DO Receipt from in_log_product_consignment_balance_stock
  383.      */
  384.     EXECUTE '
  385.     INSERT INTO tr_report_sales_supplier(
  386.            session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_no,
  387.            doc_date, payment_method, product_id, product_code, supplier_product_code,
  388.            product_name, product_style, color, psize, normal_price, sold_price,
  389.            discount, margin_supp, sold_price_after_margin, qty_so)
  390.     SELECT $1, $2, $3, C.supplier_id, E.ref_id, f_get_doc_desc(A.doc_type_id), A.doc_no,
  391.            A.doc_date, $4, A.product_id, f_get_product_code(A.product_id), C.supplier_product_code,
  392.            f_get_product_name(A.product_id), B.style_product, B.color, B.size, F.normal_price_correction, F.sold_price_used,
  393.            F.discount, F.margin_supp_correction, F.sold_price_after_margin, SUM(A.qty) * -1
  394.     FROM in_log_product_consignment_balance_stock A
  395.     INNER JOIN m_product_custom B ON A.product_id = B.product_id
  396.     INNER JOIN m_product_consignment_supp_info C ON A.product_id = C.product_id
  397.     INNER JOIN in_do_receipt D ON A.ref_id = D.do_receipt_id
  398.     INNER JOIN in_do_receipt_item G ON D.do_receipt_id = G.do_receipt_id AND A.product_id = G.product_id
  399.     INNER JOIN sl_do_item E ON G.ref_id = E.do_item_id AND G.product_id = E.product_id
  400.     INNER JOIN pu_po_balance_item_consignment_sold F ON E.ref_id = F.so_item_id AND C.supplier_id = F.supplier_id
  401.     WHERE A.tenant_id = $2
  402.         AND A.doc_date BETWEEN $5 AND $6
  403.         AND A.ou_id = $3
  404.         AND B.flg_buy_konsinyasi = $7
  405.         AND A.doc_type_id IN ($8) ' || 
  406.         vFilterPartner || '
  407.         AND F.from_manual = $10
  408.         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,
  409.     F.normal_price_correction, F.sold_price_used, F.discount, F.margin_supp_correction, F.sold_price_after_margin
  410.     ' USING pSessionId, pTenantId, pOuId, vEmptyString, pStartDate, pEndDate, vYes, vDocTypeDoReceipt, vDocTypeReturnNote, vNo;
  411.    
  412.     END IF;
  413.  
  414.    
  415.     SELECT SUM(sub_total) INTO vSubTotal FROM (
  416.     SELECT (sold_price_after_margin * SUM(qty_so)) AS sub_total
  417.         FROM tr_report_sales_supplier
  418.         WHERE session_id = pSessionId
  419.             AND tenant_id = pTenantId
  420.         GROUP BY transaction_type, doc_no, doc_date, payment_method, product_code,
  421.            supplier_product_code, product_name, product_style, color, psize, normal_price,
  422.            sold_price, discount, margin_supp, sold_price_after_margin, partner_id ) Z;
  423.  
  424.     vDPP = vSubTotal / 1.1;
  425.    
  426.     vPPN =  vSubTotal - vDPP;
  427.        
  428.     Open pRefHeader FOR
  429.     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,   
  430.         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,
  431.         ROUND(COALESCE(vDPP, 0.0), 0) AS dpp, ROUND(COALESCE(vPPN, 0.0), 0) AS ppn;
  432.     RETURN NEXT pRefHeader;
  433.  
  434.    
  435.     Open pRefDetail FOR
  436.         SELECT A.transaction_type, A.doc_no, A.doc_date, A.payment_method, A.product_code,
  437.            A.supplier_product_code, A.product_name, A.product_style, A.color, A.psize, A.normal_price,
  438.            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,
  439.            f_get_partner_name(A.partner_id) AS supplier_name, f_get_partner_code(A.partner_id) AS supplier_code ,B.flg_pkp,
  440.            (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,
  441.            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,
  442.            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
  443.         FROM tr_report_sales_supplier A
  444.         INNER JOIN m_partner_npwp B ON A.partner_id = B.partner_id
  445.         WHERE A.session_id = pSessionId
  446.             AND A.tenant_id = pTenantId
  447.         GROUP BY A.transaction_type, A.doc_no, A.doc_date, A.payment_method, A.product_code,
  448.            A.supplier_product_code, A.product_name, A.product_style, A.color, A.psize, A.normal_price,
  449.            A.sold_price, A.discount, A.margin_supp, A.sold_price_after_margin, A.partner_id,B.flg_pkp
  450.         ORDER BY supplier_name, doc_date, doc_no;
  451.     RETURN NEXT pRefDetail ;
  452.    
  453.     Open pRefSummary FOR
  454.         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
  455.         FROM tr_report_sales_supplier A
  456.         INNER JOIN m_partner_npwp B ON A.partner_id = B.partner_id
  457.         WHERE A.session_id = pSessionId
  458.             AND A.tenant_id = pTenantId
  459.         GROUP BY A.partner_id
  460.         ORDER BY supplier_name;
  461.     RETURN NEXT pRefSummary;
  462.    
  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.  
  467.     IF (pRoleId = -2) THEN
  468.  
  469.         SELECT partner_id INTO pPartnerId
  470.         FROM m_partner_user WHERE user_id = pUserId;
  471.  
  472.         vFilterPartner := ' AND C.supplier_id =  ' || pPartnerId;
  473.     ELSE
  474.        IF (pPartnerId <> vEmptyId) THEN
  475.         vFilterPartner := ' AND C.supplier_id = ' || pPartnerId;
  476.        END IF
  477.     END IF;
  478.    
  479.    
  480.     IF (pDocType = vPOS) THEN
  481.             vDoc := 'POS';
  482.            
  483.             /*
  484.              * insert data into table tr_report_sales_supplier for POS Shop & POS Shop In Shop from in_log_product_balance_stock
  485.              */
  486.             EXECUTE '
  487.             INSERT INTO tr_report_sales_supplier_for_sales_summary(
  488.                     session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_type_id, doc_id , doc_no,
  489.                     doc_date, payment_method, product_id, product_code, supplier_product_code,
  490.                     product_name, product_style, color, psize, normal_price, sold_price,
  491.                     discount, margin_supp, sold_price_after_margin, qty_so)
  492.             SELECT $1, $2, $3, C.supplier_id, $10, f_get_doc_desc(A.doc_type_id), A.doc_type_id , A.ref_id, A.doc_no
  493.                    A.doc_date, $4, A.product_id, f_get_product_code(A.product_id), C.supplier_product_code,
  494.                    f_get_product_name(A.product_id), B.style_product, B.color, B.size, E.gross_sell_price, E.nett_sell_price,
  495.                    E.discount_percentage, $5, $5, SUM(A.qty)
  496.             FROM in_log_product_balance_stock A
  497.             INNER JOIN m_product_custom B ON A.product_id = B.product_id
  498.             INNER JOIN m_product_consignment_supp_info C ON A.product_id = C.product_id
  499.             INNER JOIN i_trx_pos D ON A.ref_id = D.trx_pos_id AND A.doc_type_id = D.doc_type_id
  500.             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
  501.             WHERE A.tenant_id = $2
  502.                 AND A.doc_date BETWEEN $6 AND $7
  503.                 AND A.ou_id = $3
  504.                 AND B.flg_buy_konsinyasi = $8
  505.                 AND A.doc_type_id IN ($9, $10) ' ||
  506.                 vFilterPartner || '
  507.             GROUP BY C.supplier_id, E.trx_pos_item_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.product_id, C.supplier_product_code, B.style_product, B.color, B.size,
  508.             E.gross_sell_price, E.nett_sell_price, E.discount_percentage
  509.             ' USING pSessionId, pTenantId, pOuId, vEmptyString, vEmptyNumeric, pStartDate, pEndDate, vNo, vDocTypePosShop, vDocTypePosShopInShop, vEmptyId;
  510.            
  511.             /*
  512.              * insert data into table tr_report_sales_supplier for Void POS Shop & Void POS Shop In Shop from in_log_product_balance_stock
  513.              */
  514.             EXECUTE '
  515.             INSERT INTO tr_report_sales_supplier_for_sales_summary(
  516.                     session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_type_id, doc_id, doc_no,
  517.                     doc_date, payment_method, product_id, product_code, supplier_product_code,
  518.                     product_name, product_style, color, psize, normal_price, sold_price,
  519.                     discount, margin_supp, sold_price_after_margin, qty_so)
  520.             SELECT $1, $2, $3, C.supplier_id, $11, f_get_doc_desc(A.doc_type_id), A.doc_type_id , A.ref_id, A.doc_no,
  521.                    SUBSTRING(A.update_datetime, 1, 8) AS doc_date, $4, A.product_id, f_get_product_code(A.product_id), C.supplier_product_code,
  522.                    f_get_product_name(A.product_id), B.style_product, B.color, B.size, E.gross_sell_price, E.nett_sell_price,
  523.                    E.discount_percentage, $5, $5, SUM(A.qty)
  524.             FROM in_log_product_balance_stock A
  525.             INNER JOIN m_product_custom B ON A.product_id = B.product_id
  526.             INNER JOIN m_product_consignment_supp_info C ON A.product_id = C.product_id
  527.             INNER JOIN i_trx_pos D ON A.ref_id = D.trx_pos_id AND A.doc_no = D.doc_no AND A.doc_date = D.doc_date AND D.status = $12
  528.             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
  529.             WHERE A.tenant_id = $2
  530.                 AND SUBSTRING(A.update_datetime, 1, 8) BETWEEN $6 AND $7
  531.                 AND A.ou_id = $3
  532.                 AND B.flg_buy_konsinyasi = $8
  533.                 AND A.doc_type_id IN ($9, $10) ' ||
  534.                 vFilterPartner || '
  535.             GROUP BY C.supplier_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.product_id, C.supplier_product_code, B.style_product, B.color, B.size,
  536.             E.gross_sell_price, E.nett_sell_price, E.discount_percentage, SUBSTRING(A.update_datetime, 1, 8)
  537.             ' USING pSessionId, pTenantId, pOuId, vEmptyString, vEmptyNumeric, pStartDate, pEndDate, vNo, vDocTypeVoidPosShop, vDocTypeVoidPosShopInShop, vEmptyId, vVoid;
  538.     ELSE
  539.             vDoc := 'ALL';
  540.            
  541.             /*
  542.      * insert data into table tr_report_sales_supplier for DO from in_log_product_balance_stock
  543.      */
  544.     EXECUTE '
  545.     INSERT INTO tr_report_sales_supplier_for_sales_summary(
  546.            session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_type_id, doc_id, doc_no,
  547.            doc_date, payment_method, product_id, product_code, supplier_product_code,
  548.            product_name, product_style, color, psize, normal_price, sold_price,
  549.            discount, margin_supp, sold_price_after_margin, qty_so)
  550.     SELECT $1, $2, $3, C.supplier_id, E.ref_id, f_get_doc_desc(A.doc_type_id), A.doc_type_id, A.ref_id , A.doc_no,
  551.            A.doc_date, $4, A.product_id, f_get_product_code(A.product_id), C.supplier_product_code,
  552.            f_get_product_name(A.product_id), B.style_product, B.color, B.size, G.gross_sell_price, G.nett_sell_price,
  553.            (((G.gross_sell_price - G.nett_sell_price)/100) * 100), $5, $5, SUM(A.qty) * -1
  554.     FROM in_log_product_balance_stock A
  555.     INNER JOIN m_product_custom B ON A.product_id = B.product_id
  556.     INNER JOIN m_product_consignment_supp_info C ON A.product_id = C.product_id
  557.     INNER JOIN sl_do D ON A.ref_id = D.do_id
  558.     INNER JOIN sl_do_item E ON D.do_id = E.do_id AND A.product_id = E.product_id
  559.     INNER JOIN sl_so_balance_invoice F ON D.do_id = F.ref_id AND D.ref_id = so_id AND E.do_item_id = F.ref_item_id
  560.         AND F.do_receipt_item_id = -99
  561.         AND F.ref_doc_type_id = D.doc_type_id
  562.     INNER JOIN sl_so_item G ON E.ref_id = G.so_item_id AND F.so_id = G.so_id AND E.product_id = G.product_id
  563.     WHERE A.tenant_id = $2
  564.         AND A.doc_date BETWEEN $6 AND $7
  565.         AND A.ou_id = $3
  566.         AND B.flg_buy_konsinyasi = $8
  567.         AND A.doc_type_id = $9 ' ||
  568.         vFilterPartner || '
  569.     GROUP BY C.supplier_id, E.ref_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.product_id, C.supplier_product_code, B.style_product, B.color, B.size,
  570.     G.gross_sell_price, G.nett_sell_price
  571.     ' USING pSessionId, pTenantId, pOuId, vEmptyString, vEmptyNumeric, pStartDate, pEndDate, vNo, vDocTypeDo;
  572.    
  573.     /*
  574.      * insert data into table tr_report_sales_supplier for DO from in_log_product_consignment_balance_stock
  575.      */
  576.     EXECUTE '
  577.     INSERT INTO tr_report_sales_supplier_for_sales_summary(
  578.            session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_type_id, doc_id , doc_no,
  579.            doc_date, payment_method, product_id, product_code, supplier_product_code,
  580.            product_name, product_style, color, psize, normal_price, sold_price,
  581.            discount, margin_supp, sold_price_after_margin, qty_so)
  582.     SELECT $1, $2, $3, C.supplier_id, E.ref_id, f_get_doc_desc(A.doc_type_id), A.doc_type_id, A.ref_id , A.doc_no,
  583.            A.doc_date, $4, A.product_id, f_get_product_code(A.product_id), C.supplier_product_code,
  584.            f_get_product_name(A.product_id), B.style_product, B.color, B.size, G.gross_sell_price, G.nett_sell_price,
  585.            (((G.gross_sell_price - G.nett_sell_price)/100) * 100), $5, $5, SUM(A.qty) * -1
  586.     FROM in_log_product_consignment_balance_stock A
  587.     INNER JOIN m_product_custom B ON A.product_id = B.product_id
  588.     INNER JOIN m_product_consignment_supp_info C ON A.product_id = C.product_id
  589.     INNER JOIN sl_do D ON A.ref_id = D.do_id
  590.     INNER JOIN sl_do_item E ON D.do_id = E.do_id AND A.product_id = E.product_id
  591.     INNER JOIN sl_so_balance_invoice F ON D.do_id = F.ref_id AND D.ref_id = so_id AND E.do_item_id = F.ref_item_id
  592.         AND F.do_receipt_item_id = -99
  593.         AND F.ref_doc_type_id = D.doc_type_id
  594.     INNER JOIN sl_so_item G ON E.ref_id = G.so_item_id AND F.so_id = G.so_id AND E.product_id = G.product_id
  595.     WHERE A.tenant_id = $2
  596.         AND A.doc_date BETWEEN $6 AND $7
  597.         AND A.ou_id = $3
  598.         AND B.flg_buy_konsinyasi = $8
  599.         AND A.doc_type_id = $9 ' ||
  600.         vFilterPartner || '
  601.     GROUP BY C.supplier_id, E.ref_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.product_id, C.supplier_product_code, B.style_product, B.color, B.size,
  602.     G.gross_sell_price, G.nett_sell_price
  603.     ' USING pSessionId, pTenantId, pOuId, vEmptyString, vEmptyNumeric, pStartDate, pEndDate, vNo, vDocTypeDo;
  604.    
  605.     /*
  606.      * insert data into table tr_report_sales_supplier for POS Shop & POS Shop In Shop from in_log_product_balance_stock
  607.      */
  608.     EXECUTE '
  609.     INSERT INTO tr_report_sales_supplier_for_sales_summary(
  610.            session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_type_id , doc_id, doc_no,
  611.            doc_date, payment_method, product_id, product_code, supplier_product_code,
  612.            product_name, product_style, color, psize, normal_price, sold_price,
  613.            discount, margin_supp, sold_price_after_margin, qty_so)
  614.     SELECT $1, $2, $3, C.supplier_id, $10, f_get_doc_desc(A.doc_type_id), A.doc_type_id, A.ref_id , A.doc_no,
  615.            A.doc_date, $4, A.product_id, f_get_product_code(A.product_id), C.supplier_product_code,
  616.            f_get_product_name(A.product_id), B.style_product, B.color, B.size, E.gross_sell_price, E.nett_sell_price,
  617.            E.discount_percentage, $5, $5, SUM(A.qty)
  618.     FROM in_log_product_balance_stock A
  619.     INNER JOIN m_product_custom B ON A.product_id = B.product_id
  620.     INNER JOIN m_product_consignment_supp_info C ON A.product_id = C.product_id
  621.     INNER JOIN i_trx_pos D ON A.ref_id = D.trx_pos_id AND A.doc_type_id = D.doc_type_id
  622.     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
  623.     WHERE A.tenant_id = $2
  624.         AND A.doc_date BETWEEN $6 AND $7
  625.         AND A.ou_id = $3
  626.         AND B.flg_buy_konsinyasi = $8
  627.         AND A.doc_type_id IN ($9, $10) ' ||
  628.         vFilterPartner || '
  629.     GROUP BY C.supplier_id, E.trx_pos_item_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.product_id, C.supplier_product_code, B.style_product, B.color, B.size,
  630.     E.gross_sell_price, E.nett_sell_price, E.discount_percentage
  631.     ' USING pSessionId, pTenantId, pOuId, vEmptyString, vEmptyNumeric, pStartDate, pEndDate, vNo, vDocTypePosShop, vDocTypePosShopInShop, vEmptyId;
  632.    
  633.     /*
  634.      * insert data into table tr_report_sales_supplier for Void POS Shop & Void POS Shop In Shop from in_log_product_balance_stock
  635.      */
  636.     EXECUTE '
  637.     INSERT INTO tr_report_sales_supplier_for_sales_summary(
  638.            session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_type_id, doc_id , doc_no,
  639.            doc_date, payment_method, product_id, product_code, supplier_product_code,
  640.            product_name, product_style, color, psize, normal_price, sold_price,
  641.            discount, margin_supp, sold_price_after_margin, qty_so)
  642.     SELECT $1, $2, $3, C.supplier_id, $11, f_get_doc_desc(A.doc_type_id), A.doc_type_id, A.ref_id , A.doc_no,
  643.            SUBSTRING(A.update_datetime, 1, 8) AS doc_date, $4, A.product_id, f_get_product_code(A.product_id), C.supplier_product_code,
  644.            f_get_product_name(A.product_id), B.style_product, B.color, B.size, E.gross_sell_price, E.nett_sell_price,
  645.            E.discount_percentage, $5, $5, SUM(A.qty)
  646.     FROM in_log_product_balance_stock A
  647.     INNER JOIN m_product_custom B ON A.product_id = B.product_id
  648.     INNER JOIN m_product_consignment_supp_info C ON A.product_id = C.product_id
  649.     INNER JOIN i_trx_pos D ON A.ref_id = D.trx_pos_id AND A.doc_no = D.doc_no AND A.doc_date = D.doc_date AND D.status = $12
  650.     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
  651.     WHERE A.tenant_id = $2
  652.         AND SUBSTRING(A.update_datetime, 1, 8) BETWEEN $6 AND $7
  653.         AND A.ou_id = $3
  654.         AND B.flg_buy_konsinyasi = $8
  655.         AND A.doc_type_id IN ($9, $10) ' ||
  656.         vFilterPartner || '
  657.     GROUP BY C.supplier_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.product_id, C.supplier_product_code, B.style_product, B.color, B.size,
  658.     E.gross_sell_price, E.nett_sell_price, E.discount_percentage, SUBSTRING(A.update_datetime, 1, 8)
  659.     ' USING pSessionId, pTenantId, pOuId, vEmptyString, vEmptyNumeric, pStartDate, pEndDate, vNo, vDocTypeVoidPosShop, vDocTypeVoidPosShopInShop, vEmptyId, vVoid;
  660.    
  661.    
  662.     /*
  663.      * insert data into table tr_report_sales_supplier for Return Note from in_log_product_balance_stock
  664.      */
  665.     EXECUTE '
  666.     INSERT INTO tr_report_sales_supplier_for_sales_summary(
  667.            session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_type_id, doc_id , doc_no,
  668.            doc_date, payment_method, product_id, product_code, supplier_product_code,
  669.            product_name, product_style, color, psize, normal_price, sold_price,
  670.            discount, margin_supp, sold_price_after_margin, qty_so)
  671.     SELECT $1, $2, $3, C.supplier_id, E.ref_id, f_get_doc_desc(A.doc_type_id), A.doc_type_id, A.ref_id , A.doc_no,
  672.            A.doc_date, $4, A.product_id, f_get_product_code(A.product_id), C.supplier_product_code,
  673.            f_get_product_name(A.product_id), B.style_product, B.color, B.size, I.gross_sell_price, I.nett_sell_price,
  674.            (((I.gross_sell_price - I.nett_sell_price)/100) * 100), $5, $5, SUM(A.qty) * -1
  675.     FROM in_log_product_balance_stock A
  676.     INNER JOIN m_product_custom B ON A.product_id = B.product_id
  677.     INNER JOIN m_product_consignment_supp_info C ON A.product_id = C.product_id
  678.     INNER JOIN in_inventory D ON A.ref_id = D.inventory_id
  679.     INNER JOIN in_inventory_item G ON D.inventory_id = G.inventory_id AND A.product_id = G.product_id
  680.     INNER JOIN sl_do_item E ON G.ref_item_id = E.do_item_id AND G.product_id = E.product_id
  681.     INNER JOIN sl_do H ON E.do_id = H.do_id
  682.     INNER JOIN sl_so_balance_invoice F ON
  683.           F.ref_doc_type_id = D.doc_type_id
  684.           AND D.inventory_id = F.ref_id
  685.           AND H.ref_id = F.so_id
  686.           AND E.do_item_id = F.ref_item_id
  687.     INNER JOIN sl_so_item I ON E.ref_id = I.so_item_id AND F.so_id = I.so_id AND E.product_id = I.product_id
  688.     WHERE A.tenant_id = $2
  689.         AND A.doc_date BETWEEN $6 AND $7
  690.         AND A.ou_id = $3
  691.         AND B.flg_buy_konsinyasi = $8
  692.         AND A.doc_type_id IN ($10) ' ||
  693.         vFilterPartner || '
  694.     GROUP BY C.supplier_id, E.ref_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.product_id, C.supplier_product_code, B.style_product, B.color, B.size,
  695.     I.gross_sell_price, I.nett_sell_price
  696.     ' USING pSessionId, pTenantId, pOuId, vEmptyString, vEmptyNumeric, pStartDate, pEndDate, vNo, vDocTypeDoReceipt, vDocTypeReturnNote;
  697.  
  698.     --
  699.     /*
  700.      * insert data into table tr_report_sales_supplier for DO Receipt from in_log_product_balance_stock
  701.      */
  702.     EXECUTE '
  703.     INSERT INTO tr_report_sales_supplier_for_sales_summary(
  704.            session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_type_id, doc_id, doc_no,
  705.            doc_date, payment_method, product_id, product_code, supplier_product_code,
  706.            product_name, product_style, color, psize, normal_price, sold_price,
  707.            discount, margin_supp, sold_price_after_margin, qty_so)
  708.     SELECT $1, $2, $3, C.supplier_id, E.ref_id, f_get_doc_desc(A.doc_type_id), A.doc_type_id, A.ref_id , A.doc_no,
  709.            A.doc_date, $4, A.product_id, f_get_product_code(A.product_id), C.supplier_product_code,
  710.            f_get_product_name(A.product_id), B.style_product, B.color, B.size, I.gross_sell_price, I.nett_sell_price,
  711.            (((I.gross_sell_price - I.nett_sell_price)/100) * 100), $5, $5, SUM(A.qty) * -1
  712.     FROM in_log_product_balance_stock A
  713.     INNER JOIN m_product_custom B ON A.product_id = B.product_id
  714.     INNER JOIN m_product_consignment_supp_info C ON A.product_id = C.product_id
  715.     INNER JOIN in_do_receipt D ON A.ref_id = D.do_receipt_id
  716.     INNER JOIN in_do_receipt_item G ON D.do_receipt_id = G.do_receipt_id AND A.product_id = G.product_id
  717.     INNER JOIN sl_do_item E ON G.ref_id = E.do_item_id AND G.product_id = E.product_id
  718.     INNER JOIN sl_do H ON E.do_id = H.do_id
  719.     INNER JOIN sl_so_balance_invoice F ON H.do_id = F.ref_id AND H.ref_id = F.so_id AND E.do_item_id = F.ref_item_id
  720.         AND G.do_receipt_item_id = F.do_receipt_item_id
  721.         AND F.ref_doc_type_id = $11
  722.     INNER JOIN sl_so_item I ON E.ref_id = I.so_item_id AND F.so_id = I.so_id AND E.product_id = I.product_id
  723.     WHERE A.tenant_id = $2
  724.         AND A.doc_date BETWEEN $6 AND $7
  725.         AND A.ou_id = $3
  726.         AND B.flg_buy_konsinyasi = $8
  727.         AND A.doc_type_id IN ($9) ' || 
  728.         vFilterPartner || '
  729.     GROUP BY C.supplier_id, E.ref_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.product_id, C.supplier_product_code, B.style_product, B.color, B.size,
  730.     I.gross_sell_price, I.nett_sell_price
  731.     ' USING pSessionId, pTenantId, pOuId, vEmptyString, vEmptyNumeric, pStartDate, pEndDate, vNo, vDocTypeDoReceipt, vDocTypeReturnNote, vDocTypeDo;
  732.    
  733.     /*
  734.      * insert data into table tr_report_sales_supplier for Return Note from in_log_product_consignment_balance_stock
  735.      */
  736.     EXECUTE '
  737.     INSERT INTO tr_report_sales_supplier_for_sales_summary(
  738.            session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_type_id , doc_id, doc_no,
  739.            doc_date, payment_method, product_id, product_code, supplier_product_code,
  740.            product_name, product_style, color, psize, normal_price, sold_price,
  741.            discount, margin_supp, sold_price_after_margin, qty_so)
  742.     SELECT $1, $2, $3, C.supplier_id, E.ref_id, f_get_doc_desc(A.doc_type_id), A.doc_type_id, A.ref_id , A.doc_no,
  743.            A.doc_date, $4, A.product_id, f_get_product_code(A.product_id), C.supplier_product_code,
  744.            f_get_product_name(A.product_id), B.style_product, B.color, B.size, I.gross_sell_price, I.nett_sell_price,
  745.            (((I.gross_sell_price - I.nett_sell_price)/100) * 100), $5, $5, SUM(A.qty) * -1
  746.     FROM in_log_product_consignment_balance_stock A
  747.     INNER JOIN m_product_custom B ON A.product_id = B.product_id
  748.     INNER JOIN m_product_consignment_supp_info C ON A.product_id = C.product_id
  749.     INNER JOIN in_inventory D ON A.ref_id = D.inventory_id
  750.     INNER JOIN in_inventory_item G ON D.inventory_id = G.inventory_id AND A.product_id = G.product_id
  751.     INNER JOIN sl_do_item E ON G.ref_item_id = E.do_item_id AND G.product_id = E.product_id
  752.     INNER JOIN sl_do H ON E.do_id = H.do_id
  753.     INNER JOIN sl_so_balance_invoice F ON
  754.           F.ref_doc_type_id = D.doc_type_id
  755.              AND D.inventory_id = F.ref_id
  756.              AND H.ref_id = F.so_id
  757.              AND E.do_item_id = F.ref_item_id
  758.     INNER JOIN sl_so_item I ON E.ref_id = I.so_item_id AND F.so_id = I.so_id AND E.product_id = I.product_id
  759.     WHERE A.tenant_id = $2
  760.         AND A.doc_date BETWEEN $6 AND $7
  761.         AND A.ou_id = $3
  762.         AND B.flg_buy_konsinyasi = $8
  763.         AND A.doc_type_id IN ($10) ' ||
  764.         vFilterPartner || '
  765.     GROUP BY C.supplier_id, E.ref_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.product_id, C.supplier_product_code, B.style_product, B.color, B.size,
  766.     I.gross_sell_price, I.nett_sell_price
  767.     ' USING pSessionId, pTenantId, pOuId, vEmptyString, vEmptyNumeric, pStartDate, pEndDate, vNo, vDocTypeDoReceipt, vDocTypeReturnNote;
  768.    
  769.     --
  770.     /*
  771.      * insert data into table tr_report_sales_supplier for DO Receipt from in_log_product_consignment_balance_stock
  772.      */
  773.     EXECUTE '
  774.     INSERT INTO tr_report_sales_supplier_for_sales_summary(
  775.            session_id, tenant_id, ou_id, partner_id, so_item_id, transaction_type, doc_type_id, doc_id , doc_no,
  776.            doc_date, payment_method, product_id, product_code, supplier_product_code,
  777.            product_name, product_style, color, psize, normal_price, sold_price,
  778.            discount, margin_supp, sold_price_after_margin, qty_so)
  779.     SELECT $1, $2, $3, C.supplier_id, E.ref_id, f_get_doc_desc(A.doc_type_id), A.doc_type_id, A.ref_id , A.doc_no,
  780.            A.doc_date, $4, A.product_id, f_get_product_code(A.product_id), C.supplier_product_code,
  781.            f_get_product_name(A.product_id), B.style_product, B.color, B.size, I.gross_sell_price, I.nett_sell_price,
  782.            (((I.gross_sell_price - I.nett_sell_price)/100) * 100), $5, $5, SUM(A.qty) * -1
  783.     FROM in_log_product_consignment_balance_stock A
  784.     INNER JOIN m_product_custom B ON A.product_id = B.product_id
  785.     INNER JOIN m_product_consignment_supp_info C ON A.product_id = C.product_id
  786.     INNER JOIN in_do_receipt D ON A.ref_id = D.do_receipt_id
  787.     INNER JOIN in_do_receipt_item G ON D.do_receipt_id = G.do_receipt_id AND A.product_id = G.product_id
  788.     INNER JOIN sl_do_item E ON G.ref_id = E.do_item_id AND G.product_id = E.product_id
  789.     INNER JOIN sl_do H ON E.do_id = H.do_id
  790.     INNER JOIN sl_so_balance_invoice F ON H.do_id = F.ref_id AND H.ref_id = F.so_id AND E.do_item_id = F.ref_item_id
  791.       AND G.do_receipt_item_id = F.do_receipt_item_id
  792.       AND F.ref_doc_type_id = $11
  793.     INNER JOIN sl_so_item I ON E.ref_id = I.so_item_id AND F.so_id = I.so_id AND E.product_id = I.product_id
  794.     WHERE A.tenant_id = $2
  795.         AND A.doc_date BETWEEN $6 AND $7
  796.         AND A.ou_id = $3
  797.         AND B.flg_buy_konsinyasi = $8
  798.         AND A.doc_type_id IN ($9) ' || 
  799.         vFilterPartner || '
  800.     GROUP BY C.supplier_id, E.ref_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.product_id, C.supplier_product_code, B.style_product, B.color, B.size,
  801.     I.gross_sell_price, I.nett_sell_price
  802.     ' USING pSessionId, pTenantId, pOuId, vEmptyString, vEmptyNumeric, pStartDate, pEndDate, vNo, vDocTypeDoReceipt, vDocTypeReturnNote, vDocTypeDo;
  803.     END IF;
  804.            
  805.  
  806.  
  807.     -- TODO
  808.     UPDATE tr_report_sales_supplier_for_sales_summary Z
  809.        SET sold_price_after_margin = 0
  810.        WHERE Z.session_id = pSessionId;
  811.        
  812.     UPDATE tr_report_sales_supplier_for_sales_summary Z
  813.        SET sold_price_after_margin = B.gl_amount / B.qty
  814.        FROM in_summary_monthly_amount B
  815.        WHERE Z.doc_type_id = B.doc_type_id
  816.        AND Z.product_id = B.product_id
  817.        AND SUBSTRING(Z.doc_date,1,6) = B.date_year_month
  818.        AND Z.session_id = pSessionId
  819.        AND B.qty <> 0;
  820.  
  821.    
  822.     UPDATE tr_report_sales_supplier_for_sales_summary A
  823.     SET margin_supp = (A.sold_price_after_margin / A.sold_price) * 100
  824.     WHERE A.session_id = pSessionId
  825.       AND A.sold_price <> 0;
  826.      
  827.     UPDATE tr_report_sales_supplier_for_sales_summary A
  828.     SET margin_supp = 0
  829.     WHERE A.session_id = pSessionId
  830.       AND A.sold_price = 0;  
  831.      
  832.  
  833.     Open pRefDetail2 FOR
  834.         SELECT transaction_type, doc_no, doc_date, payment_method, product_code,
  835.            supplier_product_code, product_name, product_style, color, psize, normal_price,
  836.            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,
  837.            f_get_partner_name(partner_id) AS supplier_name, f_get_partner_code(partner_id) AS supplier_code, 'N' AS flg_pkp ,
  838.            (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  
  839.         FROM tr_report_sales_supplier_for_sales_summary
  840.         WHERE session_id = pSessionId
  841.             AND tenant_id = pTenantId
  842.         GROUP BY transaction_type, doc_no, doc_date, payment_method, product_code,
  843.            supplier_product_code, product_name, product_style, color, psize, normal_price,
  844.            sold_price, discount, margin_supp, sold_price_after_margin, partner_id
  845.         ORDER BY supplier_name, doc_date, doc_no;
  846.     RETURN NEXT pRefDetail2;
  847.    
  848.     Open pRefSummaryDetail FOR
  849.         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
  850.         FROM tr_report_sales_supplier_for_sales_summary
  851.         WHERE session_id = pSessionId
  852.             AND tenant_id = pTenantId
  853.         GROUP BY partner_id
  854.         ORDER BY supplier_name;
  855.     RETURN NEXT pRefSummaryDetail;
  856.    
  857.     DELETE FROM tr_report_sales_supplier WHERE session_id = pSessionId;
  858.     DELETE FROM tr_report_sales_supplier_for_sales_summary WHERE session_id = pSessionId;
  859. END;
  860. $BODY$
  861.   LANGUAGE plpgsql VOLATILE
  862.   COST 100
  863.   ROWS 1000;
  864. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement