Kwards

Untitled

Mar 29th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Function: sl_so_mlm_add_item_from_cart_use_voucher(bigint, character varying, bigint, character varying, bigint)
  2.  
  3. -- DROP FUNCTION sl_so_mlm_add_item_from_cart_use_voucher(bigint, character varying, bigint, character varying, bigint);
  4.  
  5. CREATE OR REPLACE FUNCTION sl_so_mlm_add_item_from_cart_use_voucher_for_member(bigint, character varying, bigint, character varying, bigint, character varying)
  6.   RETURNS SETOF refcursor AS
  7. $BODY$
  8.     DECLARE
  9.         pTenantId               alias for $1;
  10.         pDateTime               alias for $2;              
  11.         pUserId                 alias for $3;
  12.         pMemberCode             alias for $4;
  13.         pSlCartId               alias for $5;
  14.         pPaymentMethod          alias for $6;
  15.        
  16.         vYearMonth              character varying(6);
  17.         vOuId                   bigint;
  18.         vStatusDraft            character varying(1);
  19.         vStatusRelease          character varying(1);
  20.         vStatusCancel           character varying(1);
  21.         vSoMlmId                bigint;
  22.         vSoMlmItemId            bigint;
  23.         vSoMlmDocTypeId         bigint;
  24.         vSoMlmDocNo             character varying(30);
  25.         vSoMlmDocScheme         character varying(10);
  26.         vStateDraft             character varying(10);
  27.         vProductId              bigint;
  28.         vQtySo                  bigint;
  29.         vQtyBackOrder           bigint;
  30.         vQtyAfterRsv            bigint;
  31.         vQtyForReserved         bigint;
  32.        
  33.         vPartnerId              bigint;
  34.         vPartnerShipToId        bigint;
  35.         vPartnerShipAddressId   bigint;
  36.         vPartnerCpId            bigint;
  37.         vPartnerRelBillingId    bigint;
  38.         vPartnerCpName          character varying(100);
  39.         vPhone1                 character varying(100);
  40.         vMobilePhone1           character varying(50);
  41.        
  42.         vRoundingMode           character varying;
  43.         vDecimalRounding        integer;
  44.         vTaxId                  bigint;
  45.         vTaxPercentage          numeric;
  46.         vTaxPrice               numeric;
  47.         vGrossPrice             numeric;
  48.         vDiscMemberPercent      numeric;
  49.         vDiscMemberAmount       numeric;
  50.         vDiscPromoPercent       numeric;
  51.         vDiscPromoAmount        numeric;
  52.         vMaxLineNo              numeric;
  53.  
  54.         vSubTotalPriceAfterDisc numeric;
  55.         vDsCommission           numeric(5,2);
  56.        
  57.         vDefaultRoleId          bigint;
  58.         vDefaultUomId           bigint;
  59.         vFlowSoMlmId            bigint;
  60.         vFlagYes                character varying(1);
  61.         vFlagNo                 character varying(1);
  62.         vSpaceValue             character varying(6);
  63.         vFlagRole               character varying(1);
  64.         vReqId                  character varying(50);
  65.         vUserWebDS              bigint;
  66.         vDocTypeCartId          bigint;
  67.         vUserSms                bigint;
  68.         vUserMobile             bigint;
  69.        
  70.         vDocNo1                 character varying(10);
  71.         vDocNo2                 character varying(10);
  72.         vDocNoSo                character varying(10);
  73.         vDocNoPo                character varying(10);
  74.         vSessionId              character varying(50);
  75.         vEventLogCreate         character varying(50);
  76.         vEventLogAddItem        character varying(50);
  77.         vOrigin                 character varying(50);
  78.         vRemarkCreate           character varying(50);
  79.         vRemarkAddItem          character varying(50);
  80.        
  81.         -- SW, 21 Maret 2017
  82.         vFlgManageStock         character varying(1);
  83.         --/SW
  84.        
  85.         pRefHeader              REFCURSOR := 'refHeader';
  86.  
  87.         vTtTempCartSo           tt_temp_cart_so%ROWTYPE;
  88.         vBulk                   bigint;
  89.         vReceived               bigint;
  90.         vDisplay                bigint;
  91.  
  92.         vQtyPakaiTemp           numeric;
  93.         vQtyBalanceTemp         numeric;
  94.         vQtyReservedTemp        numeric;
  95.  
  96.     vCurrentStatusDoc   character varying(1);
  97.     --vCartPartnerId        bigint;
  98.     vCartMemberId       bigint;
  99.     vMemberId           bigint;
  100.     BEGIN
  101.         vUserWebDS              := -3;
  102.         vUserSms                := -2;
  103.         vUserMobile             := -4;
  104.        
  105.         vDecimalRounding        := 0;
  106.         vSubTotalPriceAfterDisc := 0;
  107.         vSoMlmDocTypeId         := 306;
  108.         vSoMlmDocScheme         := 'FA06';
  109.         vStatusDraft            := 'D';
  110.         vStatusRelease          := 'R';
  111.         vStatusCancel           := 'C';
  112.         vStateDraft             := 'DRAFT';
  113.         vFlagRole               := 'R';
  114.         vRoundingMode           := 'RD';
  115.         vFlagYes                := 'Y';
  116.         vFlagNo                 := 'N';
  117.         vSpaceValue             := ' ';
  118.         vYearMonth              := ' ';
  119.         vDocTypeCartId          := 396;
  120.         vBulk                   := 13;
  121.         vReceived               := 14;
  122.         vDisplay                := 12;
  123.         vMaxLineNo              := 0;
  124.         vEventLogCreate         :='SO.CREATE';
  125.         vEventLogAddItem        :='SO.ADDITEM';
  126.         vRemarkCreate           :='SO dibuat dari ';
  127.         vRemarkAddItem          :='Ditambahkan produk ';
  128.        
  129.    
  130.     IF(pUserId = vUserSms )THEN
  131.         vOrigin :='SMS';
  132.     ELSIF (pUserId = vUserMobile ) THEN
  133.         vOrigin :='MOBILE';
  134.     END IF;
  135.        
  136.  
  137.     -- Validate sl_cart cannot status_doc = 'R'
  138.     -- Validate sl_cart member code is exact partner_id
  139.     SELECT status_doc INTO vCurrentStatusDoc FROM sl_cart WHERE sl_cart_id = pSlCartId;
  140.     --SELECT partner_id INTO vCartPartnerId FROM sl_cart WHERE sl_cart_id = pSlCartId;
  141.     SELECT member_id INTO vCartMemberId FROM sl_cart WHERE sl_cart_id = pSlCartId ;
  142.     SELECT member_id INTO vMemberId FROM mlm_member WHERE member_code = pMemberCode ;
  143.    
  144.     -- cari partner_id
  145.     SELECT A.partner_id INTO vPartnerId
  146.     FROM mlm_ds A  
  147.     JOIN sl_cart B ON A.member_id = B.stock_point_id
  148.     WHERE B.sl_cart_id = pSlCartId;
  149.    
  150.  
  151.     IF vCurrentStatusDoc <> 'I' THEN
  152.         RAISE EXCEPTION 'Cart is not being checked out';
  153.     END IF;
  154.    
  155. --  akan diganti validasi member_id
  156. --  IF vCartPartnerId <> vPartnerId THEN
  157. --      RAISE EXCEPTION 'Cart partner ID is not match';
  158. --  END IF;
  159.  
  160.     IF vCartMemberId <> vMemberId THEN
  161.         RAISE EXCEPTION 'Cart member ID is not match'
  162.     END IF;
  163.  
  164.         --Session Id
  165.         SELECT pSlCartId::character varying||'_'||pDateTime INTO vSessionId;
  166.    
  167.         --Ou Id
  168.         SELECT f_get_value_system_config_by_param_code(pTenantId, 'DEFAULT.OU.ID') INTO vOuId;
  169.        
  170.         --tax Id
  171.         SELECT f_get_default_tax_id(pTenantId) INTO vTaxId;
  172.    
  173.         -- default UOM
  174.         SELECT f_get_default_uom_id(pTenantId) INTO vDefaultUomId;
  175.        
  176.  
  177.             -- default Partner Ship Address Id
  178.         SELECT partner_address_id INTO vPartnerShipAddressId
  179.         FROM m_partner_address WHERE partner_id = vPartnerId AND flg_ship = vFlagYes ORDER BY partner_address_id LIMIT 1;
  180.  
  181.        
  182.         -- Untuk di isi ke sl_so_mlm
  183.         SELECT partner_cp_id INTO vPartnerCpId FROM m_partner_cp WHERE partner_id = vPartnerId ORDER BY partner_cp_id LIMIT 1;
  184.         SELECT relation_id INTO vPartnerRelBillingId
  185.             FROM m_partner_rel WHERE partner_id = vPartnerId AND flg_bill = vFlagYes ORDER BY partner_rel_id LIMIT 1;
  186.         SELECT cp_name INTO vPartnerCpName FROM m_partner_cp WHERE partner_id = vPartnerId ORDER BY partner_cp_id LIMIT 1;
  187.         SELECT phone1 INTO vPhone1 FROM m_partner_cp WHERE partner_id = vPartnerId ORDER BY partner_cp_id LIMIT 1;
  188.         SELECT mobile_phone1 INTO vMobilePhone1 FROM m_partner_cp WHERE partner_id = vPartnerId ORDER BY partner_cp_id LIMIT 1;
  189.        
  190.         --bisa jadi ada perubahan,karena komisi ds yang didapat dari member itu berbeda
  191.         SELECT f_get_value_system_config_by_param_code(pTenantId, 'dsCommision')::numeric INTO vDsCommission;
  192.        
  193.         -- cari partner ship to id
  194.         SELECT relation_id INTO vPartnerShipToId
  195.             FROM m_partner_rel WHERE partner_id = vPartnerId AND flg_shipp = vFlagYes ORDER BY partner_rel_id LIMIT 1;
  196.  
  197.    
  198.         -- calculate untuk qty_reserved
  199.         INSERT INTO tt_temp_cart_so(
  200.             session_id,sl_cart_item_id,product_catalog_id,product_id,product_catalog_code,
  201.             qty_cart,qty_backorder,flg_out_of_stock)
  202.         SELECT vSessionId,A.sl_cart_item_id,A.product_catalog_id,B.product_id,B.product_catalog_code,
  203.             A.qty,0,vFlagYes
  204.         FROM sl_cart_item A
  205.         JOIN m_product_catalog B ON A.product_catalog_id = B.product_catalog_id
  206.         WHERE A.sl_cart_id = pSlCartId;
  207.  
  208.  
  209.         INSERT INTO tt_temp_calculate_cart_so(
  210.             session_id,product_id,qty_balance,qty_reserved,qty_pakai)
  211.         SELECT A.session_id,A.product_id,0,0,0
  212.         FROM tt_temp_cart_so A
  213.         WHERE A.session_id = vSessionId
  214.         GROUP BY A.product_id,A.session_id;
  215.  
  216.         -- UPDATE qty_balance
  217.         WITH stock_in_warehouse AS(
  218.             SELECT A.product_id,SUM(A.qty) as Qty
  219.             FROM in_product_balance_stock A
  220.             JOIN tt_temp_calculate_cart_so B ON A.product_id =B.product_id
  221.             AND A.warehouse_id IN (vBulk,vReceived,vDisplay)
  222.             AND B.session_id = vSessionId
  223.             GROUP BY A.product_id
  224.         )
  225.         UPDATE tt_temp_calculate_cart_so Z
  226.         SET qty_balance = A.qty
  227.         FROM stock_in_warehouse A
  228.         WHERE A.product_id = Z.product_id
  229.         AND Z.session_id = vSessionId;
  230.  
  231.         -- UPDATE qty_reserved
  232.           WITH reserved_qty AS(
  233.             SELECT COALESCE(SUM(qty),0) AS reserved_qty,product_id
  234.             FROM in_product_balance_stock_reserved
  235.             WHERE tenant_id = pTenantId
  236.             AND ou_id = vOuId
  237.             GROUP BY product_id
  238.         )
  239.         UPDATE tt_temp_calculate_cart_so Z
  240.         SET qty_reserved = A.reserved_qty
  241.         FROM reserved_qty A
  242.         WHERE A.product_id = Z.product_id
  243.         AND Z.session_id = vSessionId;
  244.  
  245.         FOR vTtTempCartSo IN
  246.             SELECT *
  247.             FROM tt_temp_cart_so
  248.             WHERE session_id = vSessionId
  249.             ORDER BY sl_cart_item_id
  250.         LOOP
  251.        
  252.             SELECT A.qty_pakai,A.qty_balance,A.qty_reserved INTO vQtyPakaiTemp,vQtyBalanceTemp,vQtyReservedTemp
  253.             FROM tt_temp_calculate_cart_so A
  254.             WHERE A.product_id = vTtTempCartSo.product_id
  255.             AND A.session_id = vSessionId;    
  256.        
  257.             -- SW, 21 Maret 2017
  258.             SELECT flg_manage_stock INTO vFlgManageStock
  259.             FROM m_product_custom
  260.             WHERE product_id = vTtTempCartSo.product_id;
  261.  
  262.             IF vFlgManageStock = vFlagNo THEN
  263.                
  264.                 --update untuk product yang tidak flg_out_of_stock
  265.                 UPDATE tt_temp_cart_so Z
  266.                 SET flg_out_of_stock = vFlagNo
  267.                 WHERE Z.sl_cart_item_id = vTtTempCartSo.sl_cart_item_id
  268.                 AND Z.session_id = vSessionId;            
  269.                
  270.                 --product_id qty_cart
  271.                 UPDATE tt_temp_calculate_cart_so Z
  272.                 SET qty_pakai = vTtTempCartSo.qty_cart
  273.                 WHERE Z.product_id = vTtTempCartSo.product_id
  274.                 AND Z.session_id = vSessionId;
  275.                
  276.             ELSE IF vQtyBalanceTemp-vQtyReservedTemp-vQtyPakaiTemp > 0 THEN
  277.             -- /SW
  278.                
  279.                 --update untuk product yang tidak flg_out_of_stock
  280.                 UPDATE tt_temp_cart_so Z
  281.                 SET flg_out_of_stock = vFlagNo
  282.                 WHERE Z.sl_cart_item_id = vTtTempCartSo.sl_cart_item_id
  283.                 AND Z.session_id = vSessionId;            
  284.                
  285.                 IF vQtyBalanceTemp-vQtyReservedTemp-vQtyPakaiTemp - vTtTempCartSo.qty_cart > 0 THEN
  286.                     --product_id qty_cart
  287.                     UPDATE tt_temp_calculate_cart_so Z
  288.                     SET qty_pakai = vTtTempCartSo.qty_cart
  289.                     WHERE Z.product_id = vTtTempCartSo.product_id
  290.                     AND Z.session_id = vSessionId;
  291.                    
  292.                 ELSE
  293.                     --product_id qty_cart
  294.                     UPDATE tt_temp_calculate_cart_so Z
  295.                     SET qty_pakai = COALESCE(vQtyBalanceTemp-vQtyReservedTemp-vQtyPakaiTemp,0)
  296.                     WHERE Z.product_id = vTtTempCartSo.product_id
  297.                     AND Z.session_id = vSessionId;
  298.                
  299.                     vQtyBackOrder := vTtTempCartSo.qty_cart - (vQtyBalanceTemp-vQtyReservedTemp) - vQtyPakaiTemp;
  300.                    
  301.                 END IF;
  302.  
  303.             ELSE      
  304.                
  305.                 vQtyBackOrder := vTtTempCartSo.qty_cart;
  306.                
  307.             END IF;
  308.            
  309.            
  310.             UPDATE tt_temp_cart_so Z
  311.             SET qty_backorder = COALESCE(vQtyBackOrder,0)
  312.             WHERE Z.sl_cart_item_id = vTtTempCartSo.sl_cart_item_id
  313.             AND Z.product_id = vTtTempCartSo.product_id
  314.             AND Z.session_id = vSessionId;
  315.            
  316.             vQtyBackOrder := 0;
  317.  
  318.         END LOOP;
  319.  
  320.  
  321.            
  322.         IF(
  323.             SELECT COUNT(1) > 0
  324.             FROM tt_temp_cart_so
  325.             WHERE session_id =vSessionId
  326.             AND flg_out_of_stock = vFlagNo
  327.            )THEN
  328.               -- Check apakah ada SO MLM yang masih DRAFT untuk vPartnerId bersangkutan dan flg_special = 'N' (Bukan BKT / Catalog)
  329.             IF EXISTS( SELECT 1 FROM sl_so_mlm WHERE status_doc = vStatusDraft AND partner_id = vPartnerId
  330.                                  AND doc_type_id = vSoMlmDocTypeId AND flg_special = vFlagNo AND flg_tutup_so = vFlagNo
  331.                                  AND create_user_id IN (vUserWebDS, vUserSms, vUserMobile)
  332.                                  LIMIT 1)
  333.             THEN
  334.                     -- ada yang draft, ambil SO MLM id nya
  335.                     SELECT so_mlm_id INTO vSoMlmId FROM sl_so_mlm
  336.                     WHERE status_doc = vStatusDraft AND partner_id = vPartnerId
  337.                         AND doc_type_id = vSoMlmDocTypeId AND flg_special = vFlagNo AND flg_tutup_so = vFlagNo
  338.                         AND create_user_id IN (vUserWebDS, vUserSms, vUserMobile)
  339.                     ORDER BY so_mlm_id DESC
  340.                     LIMIT 1;
  341.                        
  342.                     -- UPDATE sl_so_mlm SET update_user_id, update_datetime, version
  343.                     UPDATE sl_so_mlm SET update_user_id = pUserId, update_datetime = pDateTime, version = version + 1 WHERE so_mlm_id = vSoMlmId;
  344.            
  345.             ELSE    
  346.             vSoMlmId := nextval('sl_so_mlm_seq');
  347.                    
  348.                     SELECT f_get_value_system_config_by_param_code(11, 'DOC.NO.SO.PALOMAWEB') INTO vDocNoSo;
  349.                     SELECT f_get_value_system_config_by_param_code(11, 'DOC.NO.PO.PALOMAWEB') INTO vDocNoPo;
  350.                     SELECT substring(current_date::text from 3 for 2)||substring(current_date::text from 6 for 2)||'/' INTO vDocNo1;
  351.                     SELECT lpad(nextval('sl_so_mlm_from_web_seq')::text, 6, '0') INTO vDocNo2;
  352.                    
  353.                        -- Tidak ada yang draft, buat header
  354.                     INSERT INTO sl_so_mlm(
  355.                         so_mlm_id, tenant_id, doc_type_id,
  356.                         doc_no,
  357.                         doc_date, ou_id,
  358.                         ext_doc_no,
  359.                         ext_doc_date, ref_doc_type_id, ref_id, remark, partner_id,
  360.                         partner_cp_id, partner_bill_to_id, partner_ship_to_id, partner_ship_address_id,
  361.                         due_date, salesman_id, flg_delivery, curr_code, add_discount_percentage,
  362.                         add_discount_amount, status_doc, workflow_status, version, create_datetime,
  363.                         create_user_id, update_datetime, update_user_id, partner_ship_cp_id,
  364.                         partner_ship_cp_name, partner_ship_cp_phone1, member_mobile_phone,  
  365.                         flg_show_inv_tax, commission_percentage, commission_amount, flg_special)
  366.                     SELECT  
  367.                         vSoMlmId, pTenantId, vSoMlmDocTypeId,
  368.                         vDocNoSo||vDocNo1||vDocNo2 AS doc_no, -- 'SOMLM/'|| A.partner_code || '/' || vSoMlmId,
  369.                         substring(pDateTime,1,8) as doc_date, vOuId,
  370.                         vDocNoPo||vDocNo1||vDocNo2 AS ext_doc_no,  -- 'PO/'|| A.partner_code || '/' || vSoMlmId
  371.                         substring(pDateTime,1,8) AS ext_doc_date,
  372.                         -99, -99, '', vPartnerId,
  373.                         vPartnerCpId, vPartnerRelBillingId, vPartnerShipToId, vPartnerShipAddressId,
  374.                         substring(pDateTime,1,8) AS due_date, -99, vFlagYes, 'IDR', 0,
  375.                         0, vStatusDraft, vStateDraft, 0, pDateTime,
  376.                         pUserId, pDateTime, pUserId, vPartnerCpId,
  377.                         vPartnerCpName, vPhone1, vMobilePhone1,
  378.                         vFlagYes, vDsCommission, 0, vFlagNo
  379.                     FROM m_partner A
  380.                     WHERE A.partner_id = vPartnerId;
  381.                    
  382.                      --[update 6 februari] init add so approved status
  383.                     INSERT INTO sl_so_approved_status (so_mlm_id, last_ss_approve_user, last_ss_approve_time, last_fin_approve_user,
  384.                                 last_fin_approve_time, last_auto_approve_user, last_auto_approve_time,
  385.                                 last_print_picking_user, last_print_picking_time, last_scan_picking_user,
  386.                                 last_scan_picking_time, version, create_datetime, update_datetime,
  387.                                 create_user_id, update_user_id)
  388.                     SELECT vSoMlmId, '', '',  '' ,
  389.                          '', '', '',
  390.                          '', '', '',
  391.                         '', 0, pDateTime, pDateTime,
  392.                         pUserId, pUserId;
  393.        
  394.                 /**
  395.                    Bagian ini untuk melengkapi data awe
  396.                    Harus dipastikan sudah:
  397.                      1. di setting system config ROLE.ASM.ID -> diisi dengan Role ID Area Sales Manager
  398.                      2. sudah set approval flow untuk SO MLM FA06, dan hanya 1
  399.                 **/
  400.  
  401.                 -- Mendapatkan default role yang dipakai dari sysconfig
  402.                 SELECT f_get_value_system_config_by_param_code(11, 'ROLE.ASM.ID') INTO vDefaultRoleId;
  403.        
  404.                 -- Mendapatkan default approval flow ID yang dipakai dari sysconfig
  405.                 SELECT awe_flow_id INTO vFlowSoMlmId
  406.                 FROM awe_flow WHERE scheme = vSoMlmDocScheme AND flg_validate= vFlagYes LIMIT 1;
  407.        
  408.                 -- Generate unique Request ID
  409.                 SELECT f_make_uid() INTO vReqId;
  410.  
  411.                 -- Generate data awe_currdoc_status
  412.                 INSERT INTO awe_currdoc_status(
  413.                             req_id, tenant_id, scheme, doc_id, doc_no, doc_date, current_state,
  414.                             remark, current_user_id, current_role_id, flg_user_role, label,
  415.                             data, flow_id, create_datetime, create_user_id, create_role_id,
  416.                             update_datetime, update_user_id, update_role_id, version)
  417.                     SELECT vReqId, pTenantId,   vSoMlmDocScheme, so_mlm_id, doc_no, doc_date, vStateDraft,
  418.                            ' ', -99, vDefaultRoleId, vFlagRole, 'SALES ORDER MLM'||doc_no,
  419.                            '{}', vFlowSoMlmId, pDateTime, pUserId, vDefaultRoleId, pDateTime,pUserId, vDefaultRoleId, 0
  420.                     FROM sl_so_mlm WHERE so_mlm_id = vSoMlmId;
  421.        
  422.                 -- Generate data awe_worklist
  423.                 INSERT INTO awe_worklist(
  424.                         req_id, user_id, role_id, no_item, tenant_id, scheme, doc_id,
  425.                         doc_no, doc_date, status, remark, flg_user_role, flg_to_do, create_datetime,
  426.                         create_user_id, update_datetime, update_user_id, version)
  427.                     SELECT vReqId, -99, vDefaultRoleId, 1, pTenantId, vSoMlmDocScheme, so_mlm_id,
  428.                         doc_no, doc_date, vStateDraft, ' ', vFlagRole, vFlagYes, pDateTime,
  429.                         pUserId, pDateTime, pUserId, 0
  430.                     FROM sl_so_mlm WHERE so_mlm_id = vSoMlmId;
  431.        
  432.                 -- Generate data awe_historydoc
  433.                 INSERT INTO awe_historydoc(
  434.                         tenant_id, req_id, doc_id, scheme, user_id, role_id,
  435.                         activity, previous_state, next_state, remark, next_user_id, next_role_id,
  436.                         flg_user_role, activity_datetime, version)
  437.                     SELECT pTenantId, vReqId, so_mlm_id, vSoMlmDocScheme, -99, vDefaultRoleId,
  438.                         'CREATE', '', vStateDraft, '', -99, -99,
  439.                         'U', pDateTime, 0
  440.                     FROM sl_so_mlm WHERE so_mlm_id = vSoMlmId;
  441.        
  442.                 -- insert into sl_so_mlm_log event SO.CREATE
  443.                 INSERT INTO sl_so_mlm_log(
  444.                     so_mlm_log_id, so_mlm_id, so_mlm_item_id, event, remark,
  445.                     origin, create_datetime, create_user_id, update_datetime, update_user_id,
  446.                     version)
  447.                 SELECT nextval('sl_so_mlm_log_seq'),vSoMlmId,-99,vEventLogCreate,vRemarkCreate||vOrigin,
  448.                     vOrigin,pDateTime, pUserId, pDateTime, pUserId,
  449.                     0;
  450.                    
  451.             END IF;
  452.                        
  453.             -- insert ke table temp tt_cart_to_so
  454.             INSERT INTO tt_cart_to_so(
  455.                     session_id,so_mlm_item_id,tenant_id,so_mlm_id,cart_item_id,cart_id,discount_member_percentage,discount_member_amount,
  456.                     discount_promo_percentage,discount_promo_amount,qty,gross_sell_price,
  457.                     price_after_disc,product_catalog_id,product_id,tax_percentage,
  458.                     tax_price,line_no)
  459.             SELECT vSessionId,nextval('sl_so_mlm_item_seq'),pTenantId,vSoMlmId,B.sl_cart_item_id,pSlCartId,B.discount_member,B.discount_member_amount,
  460.                     B.discount_promo,B.discount_promo_amount,(C.qty_cart - C.qty_backorder),B.catalog_price,
  461.                     B.price_after_discount,B.product_catalog_id,f_get_product_by_product_catalog_id(B.product_catalog_id),
  462.                     f_get_product_tax_value (f_get_product_by_product_catalog_id(B.product_catalog_id)),
  463.                     f_calc_tax_price_from_gross_price(B.catalog_price,B.discount_member, B.discount_promo, vDecimalRounding, vRoundingMode, vFlagYes, vTaxId, f_get_product_tax_value (f_get_product_by_product_catalog_id(B.product_catalog_id))),
  464.                     ROW_NUMBER() OVER (PARTITION BY session_id ORDER BY session_id)
  465.             FROM sl_cart A
  466.             JOIN sl_cart_item B ON B.sl_cart_id = A.sl_cart_id
  467.             JOIN tt_temp_cart_so C ON B.sl_cart_item_id = C.sl_cart_item_id
  468.             WHERE A.sl_cart_id = pSlCartId
  469.             AND (C.qty_cart - C.qty_backorder) > 0
  470.             AND C.session_id = vSessionId;
  471.  
  472.         -- Get Max Line Number
  473.         SELECT COALESCE(MAX(line_no),0) into vMaxLineNo
  474.         FROM sl_so_mlm_item WHERE so_mlm_id = vSoMlmId;
  475.            
  476.             -- insert ke sl_so_mlm_item
  477.             INSERT INTO sl_so_mlm_item(
  478.                     so_mlm_item_id,
  479.                     tenant_id,
  480.                     so_mlm_id,
  481.                     line_no,
  482.                     ref_doc_type_id,
  483.                     ref_id,
  484.                     partner_ship_to_id,
  485.                     partner_ship_address_id,
  486.                     product_catalog_id,
  487.                     qty_so,
  488.                     so_uom_id,
  489.                     qty_int,
  490.                     base_uom_id,
  491.                     curr_code,
  492.                     gross_sell_price,
  493.                     flg_tax_amount,
  494.                     tax_id,
  495.                     tax_percentage,
  496.                     tax_price,
  497.                     promo_code,
  498.                     discount_member_percentage, discount_member_amount,
  499.                     discount_promo_percentage, discount_promo_amount,
  500.                     price_after_disc,
  501.                     nett_sell_price, tax_amount, nett_item_amount,
  502.                     tolerance_dlv_qty, remark, version, create_datetime, create_user_id,
  503.                     update_datetime, update_user_id)
  504.             SELECT A.so_mlm_item_id,
  505.                     A.tenant_id,
  506.                     A.so_mlm_id,
  507.                     vMaxLineNo+A.line_no,
  508.                     -99,
  509.                     -99,
  510.                     vPartnerShipToId, -- partner ship to id
  511.                     vPartnerShipAddressId, -- partner ship address id
  512.                     A.product_catalog_id,
  513.                     A.qty,
  514.                     vDefaultUomId,
  515.                     A.qty,
  516.                     vDefaultUomId,
  517.                     'IDR',
  518.                     A.gross_sell_price, -- gross_sell_price (harus sesuai dengan harga katalok)
  519.                     vFlagYes,
  520.                     vTaxId, -- nilainya berdasarkan taxCode PPn (tax id)
  521.                     A.tax_percentage, -- tax percentage
  522.                     A.tax_price, -- tax price
  523.                     '', -- promo_code
  524.                     A.discount_member_percentage,A.discount_member_amount,
  525.                     A.discount_promo_percentage,A.discount_promo_amount,
  526.                     A.price_after_disc, -- price_after_disc
  527.                     0, --nett_sell_price
  528.                     0, -- tax_amount,
  529.                     0, -- nett_item_amount,
  530.                     0, -- tolerance_dlv_qty
  531.                     '', -- remark
  532.                     0, pDateTime, pUserId, pDateTime, pUserId
  533.             FROM tt_cart_to_so A
  534.             WHERE A.session_id = vSessionId;
  535.            
  536.             -- insert ke sl_so_mlm_item_ext
  537.             INSERT INTO sl_so_mlm_item_ext(
  538.                     so_mlm_item_id,member_id,flg_payment_method,flg_paid,ref_item_id,ref_id,level_price,
  539.                     flg_direct_order,create_datetime,create_user_id,update_datetime,update_user_id,version,flg_cancel,commission_percentage)
  540.             SELECT A.so_mlm_item_id,D.member_id,pPaymentMethod,vFlagNo,A.cart_item_id,A.cart_id,C.zone,
  541.                     vFlagYes,pDateTime, pUserId, pDateTime, pUserId,0,'NONE',vDsCommission
  542.             FROM tt_cart_to_so A
  543.             JOIN sl_cart B ON A.cart_id = B.sl_cart_id
  544.             JOIN mlm_ds C ON B.stock_point_id = C.member_id
  545.             JOIN mlm_member D ON B.member_id = D.member_id
  546.             WHERE A.session_id = vSessionId;
  547.            
  548.             -- insert into sl_so_mlm_log event SO.ADDITEM
  549.             INSERT INTO sl_so_mlm_log(
  550.                 so_mlm_log_id, so_mlm_id, so_mlm_item_id, event, remark,
  551.                 origin, create_datetime, create_user_id, update_datetime, update_user_id,
  552.                 version)
  553.             SELECT nextval('sl_so_mlm_log_seq'),vSoMlmId,A.so_mlm_item_id,vEventLogAddItem,vRemarkAddItem||B.product_catalog_code||' dengan qty '||A.qty||' dari '||vOrigin,
  554.                 vOrigin,pDateTime, pUserId, pDateTime, pUserId,
  555.                 0
  556.             FROM tt_cart_to_so A
  557.             INNER JOIN m_product_catalog B ON A.product_catalog_id = B.product_catalog_id
  558.             WHERE A.session_id = vSessionId;
  559.                
  560.             -- seharusnya berubah
  561.             -- Update nilai commission_amount di so_mlm
  562.             UPDATE sl_so_mlm SET commission_amount = f_get_commission_amount_by_so_mlm_id(pTenantId, vSoMlmId, vDecimalRounding, vRoundingMode)
  563.             WHERE so_mlm_id = vSoMlmId;
  564.  
  565.             -- Update nilai nett sell price
  566.             UPDATE sl_so_mlm_item Z
  567.             SET nett_sell_price = Z.price_after_disc - Z.tax_price
  568.             FROM tt_cart_to_so A
  569.             WHERE A.so_mlm_id = vSoMlmId
  570.             AND A.so_mlm_id = Z.so_mlm_id
  571.             AND A.so_mlm_item_id = Z.so_mlm_item_id
  572.             AND A.cart_id =pSlCartId
  573.             AND A.session_id = vSessionId;
  574.  
  575.             -- Update nilai tax_amount and nett_item_amount (dikalikan dengan qty)  
  576.             UPDATE sl_so_mlm_item Z
  577.             SET tax_amount = Z.qty_so * Z.tax_price,
  578.                 nett_item_amount =Z.qty_so * Z.nett_sell_price
  579.             FROM tt_cart_to_so A
  580.             WHERE A.so_mlm_id = vSoMlmId
  581.             AND A.so_mlm_id = Z.so_mlm_id
  582.             AND A.so_mlm_item_id = Z.so_mlm_item_id
  583.             AND A.cart_id =pSlCartId
  584.             AND A.session_id = vSessionId;
  585.            
  586.             --seharusnya ada, karena mau catat voucher ini punya member siapa
  587.             -- update sl_so_mlm_item_voucher terlebih dahulu dari pada insert sl_so_mlm_item_voucher
  588.             -- karena apabila condition update tidak di temukan, update akan langsung di skip
  589.             UPDATE sl_so_mlm_item_voucher_per_member B  
  590.             SET qty = qty + A.promo_qty,
  591.                 update_datetime = pDateTime,
  592.                 update_user_id = pUserId,
  593.                 version = B.version + 1
  594.             FROM sl_cart_item_voucher A
  595.             WHERE A.sl_cart_id = pSlCartId AND
  596.                   B.so_mlm_id = vSoMlmId AND
  597.                   B.promo_id = A.promo_id;
  598.            
  599.             --seharusnya ada, karena mau catat voucher ini punya member siapa
  600.             -- insert into sl_so_mlm_item_voucher
  601.             INSERT INTO sl_so_mlm_item_voucher_per_member(so_mlm_id,promo_id,qty,member_id,create_datetime,create_user_id,update_datetime,update_user_id,version)
  602.             SELECT vSoMlmId,A.promo_id,A.promo_qty,B.member_id,pDateTime,pUserId,pDateTime,pUserId,0
  603.             FROM sl_cart_item_voucher A
  604.             JOIN sl_cart B ON A.sl_cart_id = B.sl_cart_id
  605.             WHERE A.sl_cart_id = pSlCartId AND NOT EXISTS (
  606.                 SELECT 1 FROM sl_so_mlm_item_voucher_per_member B WHERE B.so_mlm_id = vSoMlmId AND B.promo_id = A.promo_id
  607.             );
  608.            
  609.             --tidak ada perubahan, tapi ada penamabahan, saldo voucher yang dimiliki member
  610.             UPDATE sl_partner_promo_balance Z
  611.             SET qty = Z.qty - A.promo_qty,
  612.                 update_user_id = pUserId,
  613.                 update_datetime = pDateTime,
  614.                 version = Z.version + 1
  615.             FROM sl_cart_item_voucher A,sl_cart B
  616.             WHERE A.sl_cart_id = B.sl_cart_id
  617.             AND B.partner_id = Z.partner_id
  618.             AND Z.promo_id = A.promo_id
  619.             AND A.sl_cart_id = pSlCartId;
  620.    
  621.             INSERT INTO sl_log_partner_promo_balance (
  622.                 tenant_id,partner_id,promo_id,qty_usage_so,
  623.                 create_datetime,create_user_id, update_datetime,update_user_id,
  624.                 version,qty_cancel,qty_usage_do,ref_doc_type_id,ref_doc_no,ref_doc_date,
  625.                 remark,ref_id)
  626.             SELECT A.tenant_id,A.partner_id,B.promo_id,B.promo_qty,
  627.                    pDateTime,pUserId,pDateTime,pUserId,
  628.                    0,0,0,396,A.doc_no,A.doc_date,'CHECK OUT',A.sl_cart_id
  629.             FROM sl_cart A
  630.             JOIN sl_cart_item_voucher B ON A.sl_cart_id = B.sl_cart_id
  631.             AND B.sl_cart_id = pSlCartId;
  632.            
  633.         END IF;
  634.  
  635.                 -- insert ke backorder
  636.         INSERT INTO sl_so_backorder(
  637.             tenant_id, ou_id, partner_id, product_id,
  638.             ref_doc_type_id, ref_doc_no, ref_doc_date, base_uom_id, flg_followup,
  639.             qty_backorder, qty_order, version, create_datetime, create_user_id,
  640.             update_datetime, update_user_id, product_catalog_id, ref_item_id)
  641.         SELECT pTenantId,vOuId,vPartnerId,A.product_id,
  642.             vDocTypeCartId, C.doc_no,C.doc_date,vDefaultUomId,vFlagNo,
  643.             A.qty_backorder,B.qty,0,pDateTime,pUserId,
  644.             pDateTime,pUserId,B.product_catalog_id,B.sl_cart_item_id
  645.         FROM tt_temp_cart_so A
  646.         JOIN sl_cart_item B ON A.sl_cart_item_id = B.sl_cart_item_id
  647.         JOIN sl_cart C ON C.sl_cart_id = B.sl_cart_id
  648.         WHERE A.session_id = vSessionId
  649.         AND C.sl_cart_id = pSlCartId
  650.         AND A.qty_backorder > 0;
  651.  
  652.        
  653.         INSERT INTO sl_cart_item_log(
  654.             sl_cart_item_log_id, sl_cart_item_id, qty, event,
  655.             remark, version, create_user_id, create_datetime, update_user_id, update_datetime
  656.         )
  657.         SELECT nextval('sl_cart_item_log_seq'), B.sl_cart_item_id, A.qty_backorder, 'BACK.ORDER',
  658.         'Produk ' || D.product_catalog_code || ' backorder sebanyak ' || A.qty_backorder :: varchar || '.', 0 AS version, pUserId, pDateTime, pUserId, pDateTime
  659.         FROM tt_temp_cart_so A
  660.         JOIN sl_cart_item B ON A.sl_cart_item_id = B.sl_cart_item_id
  661.         JOIN sl_cart C ON C.sl_cart_id = B.sl_cart_id
  662.         JOIN m_product_catalog D ON B.product_catalog_id = D.product_catalog_id
  663.         WHERE A.session_id = vSessionId
  664.         AND C.sl_cart_id = pSlCartId
  665.         AND A.qty_backorder > 0;
  666.        
  667.        
  668.        IF(
  669.             SELECT COUNT(1) > 0
  670.             FROM tt_temp_cart_so
  671.             WHERE session_id =vSessionId
  672.             AND flg_out_of_stock = vFlagNo
  673.        )THEN
  674.        
  675.             -- Update sl_cart status R
  676.             UPDATE sl_cart
  677.             SET status_doc = vStatusRelease,
  678.                 status_remark = 'Menunggu Konfirmasi',             
  679.                 update_datetime = pDateTime
  680.             WHERE sl_cart_id = pSlCartId;
  681.        
  682.         ELSE
  683.  
  684.             -- Update sl_cart status C
  685.             UPDATE sl_cart
  686.             SET status_doc = vStatusCancel,
  687.                 status_remark = 'Cancel',
  688.                 update_datetime = pDateTime
  689.             WHERE sl_cart_id = pSlCartId;
  690.                    
  691.         END IF;
  692.        
  693.         -- Update sl_cart_item
  694.         UPDATE sl_cart_item Z
  695.         SET so_mlm_id = vSoMlmId,
  696.             so_mlm_item_id = A.so_mlm_item_id
  697.         FROM tt_cart_to_so A
  698.         WHERE Z.sl_cart_id = A.cart_id
  699.         AND Z.sl_cart_item_id = A.cart_item_id
  700.         AND A.session_id =vSessionId
  701.         AND A.cart_id = pSlCartId;
  702.         -- RAISE NOTICE 'balikan data';
  703.         Open pRefHeader FOR
  704.         SELECT sl_cart_item_id,product_catalog_id,product_id,product_catalog_code,qty_cart,qty_backorder,flg_out_of_stock
  705.         FROM tt_temp_cart_so
  706.         WHERE session_id =vSessionId;
  707.        
  708.         -- insert ke reserved
  709.         INSERT INTO in_product_balance_stock_reserved(
  710.             tenant_id,ou_id,product_id,base_uom_id,product_status,qty,version,
  711.             create_datetime,create_user_id,update_datetime,update_user_id, ref_doc_type_id,
  712.             ref_id, ref_item_id, ref_doc_no, ref_doc_date, qty_original, partner_id
  713.         )
  714.         SELECT A.tenant_id,A.ou_id,C.product_id,vDefaultUomId,'GOOD',B.qty_so,0,
  715.             A.create_datetime,A.create_user_id,A.create_datetime,A.create_user_id,A.doc_type_id,A.
  716.             so_mlm_id, B.so_mlm_item_id,A.doc_no, A.doc_date, B.qty_so,A.partner_id
  717.         FROM sl_so_mlm A
  718.         JOIN sl_so_mlm_item B ON A.so_mlm_id = B.so_mlm_id
  719.         JOIN m_product_catalog C ON C.product_catalog_id =B.product_catalog_id
  720.         JOIN sl_so_mlm_item_ext D ON B.so_mlm_item_id = D.so_mlm_item_id
  721.         JOIN tt_cart_to_so E ON D.ref_item_id = E.cart_item_id
  722.         WHERE A.so_mlm_id = vSoMlmId
  723.         AND A.tenant_id = pTenantId
  724.         AND A.ou_id = vOuId
  725.         AND E.session_id = vSessionId;
  726.        
  727.         RETURN NEXT pRefHeader;
  728.        
  729.        
  730.     END;
  731.     $BODY$
  732.   LANGUAGE plpgsql VOLATILE
  733.   COST 100
  734.   ROWS 1000;
  735. /
Add Comment
Please, Sign In to add comment