aadddrr

r_sales_summary KPS-Live

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