aadddrr

r_sales_summary_accounting KPS-Live

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