Advertisement
Ahmed_Ait_Lahcen

Untitled

Aug 1st, 2023
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 56.58 KB | None | 0 0
  1.   METHOD if_swf_flex_ifs_condition_eval~evaluate_condition.
  2. *&**********************************************************************
  3. *OBJECT ID             : ZCL_MM_SWF_WF_COND_EVAL                       *
  4. *TITLE                 : Purchase Order Pre-Condition check            *
  5. *AUTHOR                : Shiva Krishna                                 *
  6. *DATE                  : 17/02/2021                                    *
  7. *DEVELOPMENT ID        : W-PR-0001                                     *
  8. *Rev-Trac              : 326,129,918                                   *
  9. *REQUESTED BY          : Rachel McCutcheon                             *
  10. *TRANSPORT NO.         : SD1K904020,SD1K904127,SD1K905223,SD1K905376   *
  11. *                        SD1K905390,SD1K905461,SD1K905543,SD1K905550   *
  12. *DESCRIPTION           : Purchase Order Pre-Condition check            *
  13. * To check the preconditions for the workflow to get trigger           *
  14. *&**********************************************************************
  15. *&                      CHANGE HISTORY LOG                             *
  16. *&---------------------------------------------------------------------*
  17. * DATE(MM/DD/YYYY)|    DEVELOPER     |   REQUESTOR    |   TRANSPORT #  *
  18. * 07/29/2021      |   Shiva Krishna  |     Eswar      | TR# SD1K906194 *
  19. *                                                           SD1K906232 *
  20. *                                                           SD1K906248 *
  21. *                                                           SD1K906254 *
  22. * DESCRIPTION : Added new logic to determine the PR workflow agents    *
  23. *11/17/2021       | Venkatesh        |    Eswar       I TR #SD1K907675 *
  24. *                                                           SD1K907863 *
  25. * DESCRIPTION : Added new logic for procurement manager                *
  26. *12/02/2021       | Venkatesh        |    Eswar       I TR #SD1K907936 *
  27. *  RT #1505                                                            *
  28. * DESCRIPTION : Added new approval step for cost center owner for PO   *
  29. *01/25/2022     |   Hoda Jebari  | Venkat Chirumamella | TR #SD1K908555*
  30. *  RT #1731                                                            *
  31. * DESCRIPTION : Fixing dump in PO workflow net price calculation       *
  32. *02/04/2022     | Shiva Krishna       |       Eswar   | TR #SD1K908725 *
  33. * DESCRIPTION : Added for the LT dump                                  *
  34. *03/07/2022     | Karim Ait Alla      |  Hamza Asrar  | TR #SD1K909104 *
  35. *                                                           SD1K909115 *
  36. * DESCRIPTION : Added for checking PR N° & PR item are numeric         *
  37. *&---------------------------------------------------------------------&
  38. * 01/10/2023    | Ahmed Ait Lahcen    | Hamza Asrar   | TR# SD1K911104 *
  39. * DESCRIPTION : Suppress WF approval for some contract change scenarios*
  40. *&---------------------------------------------------------------------&
  41. * 02/20/2023    | Ahmed Ait Lahcen    | Hamza Asrar   | TR# SD1K911356 *
  42. * DESCRIPTION : Suppress WF approval for PO / Contract                 *
  43. *&---------------------------------------------------------------------&
  44. * 05/09/2023    | Ahmed Ait Lahcen    | Hamza Asrar   | TR# SD1K911783 *
  45. * DESCRIPTION :  INC1804574: Adding Price Unit to total PR value for   *
  46. *                PR approvals                                          *
  47. *&---------------------------------------------------------------------&
  48.  
  49. *&--- Read the condition values for the Paramater
  50. *&--- When the condition is satisifed workflow will get trigger
  51.  
  52. *&--- Local Type Declarations
  53.     TYPES : BEGIN OF ty_jobcode,
  54.               zzjob_code TYPE pa0001-zzjob_code,
  55.             END OF ty_jobcode,
  56.             ty_bsart TYPE RANGE OF bsart.                                       "Added for RT# 2781 TR SD1K911104
  57. *&--- Local Variable Declarations
  58.     DATA : lt_jobcode               TYPE TABLE OF ty_jobcode,
  59.            lr_jobcode               TYPE RANGE OF zzjob_code,
  60.            ls_job                   LIKE LINE OF lr_jobcode,
  61.            lv_plans                 TYPE pa0001-plans,
  62.            lv_sobid                 TYPE hrp1001-sobid,
  63.            lv_level                 TYPE char1,
  64.            lv_htype_1               TYPE datatype_d,                            "Added for RT# 1968 TR SD1K909115
  65.            lv_htype_2               TYPE datatype_d,                            "Added for RT# 1968 TR SD1K909115
  66.            lv_old_po_value          TYPE effwr,                                 "Added for RT# 2876 TR SD1K911356
  67.            lv_new_po_value          TYPE effwr,                                 "Added for RT# 2876 TR SD1K911356
  68. *&--- Begin of code for RT# 2781 TR# SD1K911104
  69.            lo_ref_ca_sfly_utilities TYPE REF TO zcl_ca_sfly_utilities,
  70.            lt_tvarvc2               TYPE zcl_ca_sfly_utilities=>tt_tvarvc,
  71.            lr_value_bsart           TYPE ty_bsart,
  72.            lr_qty_bsart             TYPE ty_bsart.
  73. *&--- End of code for RT# 2781 TR# SD1K911104
  74.     CONSTANTS: lc_s                TYPE rsscr_kind VALUE 'S',
  75. *&--- Begin of code for RT# 2781 TR# SD1K911104
  76.                lc_zmm_wf_contracts TYPE tabname    VALUE 'ZMM_WF_CONTRACTS',
  77.                lc_value_contract   TYPE rvari_vnam VALUE 'ZMM_CON_VALUE',
  78.                lc_qty_contract     TYPE rvari_vnam VALUE 'ZMM_CON_QTY'.
  79. *&--- End of code for RT# 2781 TR# SD1K911104
  80.  
  81. *&---- Begin of code for RT#1731  TR#SD1K908555
  82.     DATA lv_netwr TYPE ktwrt.
  83. *&---- End of code for RT#1731  TR#SD1K908555
  84.  
  85. *&--- Default Not trigger level or workflow
  86.     cv_is_true = abap_false.
  87.  
  88.     IF is_sap_object_node_type-sont_key_part_1 IS NOT INITIAL.
  89. *&--- Validate for Purchase Order and Contracts
  90.       CASE is_sap_object_node_type-sont.
  91.         WHEN 'PurchaseOrder' OR 'PurchaseContract'.
  92. *&--- Get the PO Header Details
  93.           SELECT SINGLE ebeln,
  94.                         bukrs,
  95.                         bstyp,
  96.                         bsart,
  97.                         ernam,
  98.                         waers,
  99.                         ktwrt
  100.                    FROM ekko
  101.             INTO @DATA(ls_ekko)
  102.             WHERE ebeln = @is_sap_object_node_type-sont_key_part_1.
  103. *&--- Get the PO Item Details
  104.           SELECT ebeln,
  105.                  ebelp,
  106.                  netwr,
  107.                  konnr,
  108.                  zwert FROM ekpo
  109.                  INTO TABLE @DATA(lt_ekpo)
  110.                  WHERE ebeln = @is_sap_object_node_type-sont_key_part_1.
  111. *&--- Validate for the Contract Reference
  112.           IF line_exists( it_parameter_value[ name = 'EKPO-KONNR' ] ).
  113.             LOOP AT lt_ekpo ASSIGNING FIELD-SYMBOL(<fs_ekpo>).
  114.               IF <fs_ekpo>-konnr IS NOT INITIAL.
  115.                 cv_is_true = abap_false.        "Not to trigger the workflow
  116.                 EXIT.
  117.               ELSE.
  118.                 cv_is_true = abap_true.         "To trigger the workflow
  119.               ENDIF.
  120.             ENDLOOP.
  121.           ENDIF.
  122.  
  123.           DATA(lv_condition_id) = is_condition-condition_id.
  124.           CONDENSE lv_condition_id NO-GAPS.
  125.  
  126.           DATA(lv_execution) = is_condition-execution_context.
  127.           CONDENSE lv_execution NO-GAPS.
  128.  
  129. *&--- Trigger Workflow whenever
  130. *&--- Total net value of all line items in Quantity Contract greater than
  131.           IF is_sap_object_node_type-sont = 'PurchaseContract'.
  132.             IF lv_condition_id = '3' AND
  133.                lv_execution = 'start'.
  134.               IF line_exists( it_parameter_value[ name = 'EKPO-ZWERT' ] ).
  135. *&---- Begin of commented code for RT#1731  TR#SD1K908555
  136. *                DATA(lv_netwr) = REDUCE ekpo-zwert( INIT x = 0 FOR ls_ekpo IN lt_ekpo
  137. *                                                    NEXT x = x + ls_ekpo-zwert ).
  138. *&---- End of commented code for RT#1731  TR#SD1K908555
  139. *&---- Begin of added code for RT#1731  TR#SD1K908555
  140.                 lv_netwr = REDUCE ekko-ktwrt( INIT x = VALUE ekko-ktwrt( ) FOR ls_ekpo IN lt_ekpo
  141.                                                     NEXT x = x + ls_ekpo-zwert ).
  142. *&---- End of added code for RT#1731  TR#SD1K908555
  143.                 DATA(ls_param) = it_parameter_value[ name = 'EKPO-ZWERT' ].
  144.                 DATA(ls_currency) = it_parameter_value[ name = 'Currency' ].
  145.                 IF lv_netwr GT ls_param-value  AND
  146.                    ls_currency-value = ls_ekko-waers.
  147.                   cv_is_true = abap_true.
  148.                 ENDIF.
  149.               ENDIF.
  150.             ENDIF.
  151.           ENDIF.
  152.  
  153. *&--- Trigger Workflow whenever for Job Code at header
  154.           IF lv_condition_id = '6' AND
  155.              lv_execution = 'start'.
  156.  
  157.             IF line_exists( it_parameter_value[ name = 'PA0001-ZZJOB_CODE' ] ).
  158.               DATA(ls_param_value) = it_parameter_value[ name = 'PA0001-ZZJOB_CODE' ].
  159. *&--- Get the Personal Number for the User ID
  160.               SELECT SINGLE pernr
  161.                        FROM pa0105
  162.                        INTO @DATA(lv_pernr)
  163.                       WHERE subty = @gc_0001
  164.                         AND endda GE @sy-datum
  165.                         AND begda LE @sy-datum
  166.                         AND usrid = @ls_ekko-ernam.
  167.               IF lv_pernr IS NOT INITIAL.
  168. *&--- Get the Org.unit and Position for the Personal Number
  169. *&--- When the Job code match with the input value, trigger workflow
  170.                 SELECT SINGLE pernr,
  171.                               werks,
  172.                               orgeh,
  173.                               plans,
  174.                               stell,
  175.                               mstbr,
  176.                               zzjob_code
  177.                          FROM pa0001
  178.                    INTO @DATA(ls_pa0001_po)
  179.                    WHERE pernr = @lv_pernr
  180.                      AND endda GE @sy-datum
  181.                      AND begda LE @sy-datum.
  182.                 IF ls_pa0001_po-zzjob_code = ls_param_value-value.
  183.                   cv_is_true = abap_true.                         "Trigger Workflow
  184.                 ENDIF.
  185.               ENDIF.
  186.             ENDIF.
  187.           ENDIF.
  188.  
  189. *&--- Get the Condition value for workflow start/step
  190.           lv_condition_id = is_condition-condition_id.
  191.           CONDENSE lv_condition_id.
  192.           lv_execution = is_condition-execution_context.
  193.           CONDENSE lv_execution.
  194.  
  195. *&--- Trigger Workflow whenever for Job Code at level
  196. *&--- Get the Netprice value
  197.           IF lv_condition_id = '6' AND
  198.              lv_execution = 'step'.
  199.  
  200.             IF line_exists( it_parameter_value[ name = 'PA0001-ZZJOB_CODE' ] ).
  201.  
  202.               IF is_sap_object_node_type-sont = 'PurchaseOrder'.
  203. *&---- Begin of commented code for RT#1731  TR#SD1K908555
  204. *                lv_netwr = REDUCE ekpo-netwr( INIT x = 0 FOR ls_ekpo IN lt_ekpo
  205. *                                           NEXT x = x + ls_ekpo-netwr ).
  206. *&---- End of commented code for RT#1731  TR#SD1K908555
  207. *&---- Begin of added code for RT#1731  TR#SD1K908555
  208.                 lv_netwr = REDUCE ekko-ktwrt( INIT x = VALUE ekko-ktwrt( ) FOR ls_ekpo IN lt_ekpo
  209.                                            NEXT x = x + ls_ekpo-netwr ).
  210. *&---- End of added code for RT#1731  TR#SD1K908555
  211.               ELSEIF is_sap_object_node_type-sont = 'PurchaseContract'.
  212.  
  213.                 IF ls_ekko-ktwrt IS NOT INITIAL.
  214.                   lv_netwr = ls_ekko-ktwrt.
  215.                 ELSE.
  216. *&---- Begin of commented code for RT#1731  TR#SD1K908555
  217. *                  lv_netwr = REDUCE ekpo-zwert( INIT x = 0 FOR ls_ekpo IN lt_ekpo
  218. *                                            NEXT x = x + ls_ekpo-zwert ).
  219. *&---- End of commented code for RT#1731  TR#SD1K908555
  220. *&---- Begin of added code for RT#1731  TR#SD1K908555
  221.                   lv_netwr = REDUCE ekko-ktwrt( INIT x = VALUE ekko-ktwrt( ) FOR ls_ekpo IN lt_ekpo
  222.                                             NEXT x = x + ls_ekpo-zwert ).
  223. *&---- End of added code for RT#1731  TR#SD1K908555
  224.                 ENDIF.
  225.               ENDIF.
  226.  
  227. *&--- Get the Personal Number for the User ID
  228.               SELECT SINGLE pernr
  229.                        FROM pa0105
  230.                        INTO lv_pernr
  231.                       WHERE subty = gc_0001
  232.                         AND endda GE sy-datum
  233.                         AND begda LE sy-datum
  234.                         AND usrid = ls_ekko-ernam.
  235.  
  236. *&--- Do to get the Manager for the Approval
  237.               DO 10 TIMES.
  238.                 IF lv_pernr IS NOT INITIAL.
  239. *&--- Get the Org.unit and Position for the Personal Number
  240.                   SELECT SINGLE pernr
  241.                                 werks
  242.                                 orgeh
  243.                                 plans
  244.                                 stell
  245.                                 mstbr
  246.                                 zzjob_code
  247.                            FROM pa0001
  248.                            INTO ls_pa0001_po
  249.                      WHERE pernr = lv_pernr
  250.                        AND endda GE sy-datum
  251.                        AND begda LE sy-datum.
  252.                   IF sy-subrc NE 0.
  253.                     EXIT.
  254.                   ELSE.
  255. *&--- Get the job code for the Personal Number to match with the level
  256.                     DATA(lv_jobcode) = ls_pa0001_po-zzjob_code.
  257.                     APPEND lv_jobcode TO lt_jobcode.
  258.                     ls_param_value = it_parameter_value[ name = 'PA0001-ZZJOB_CODE' ].
  259.                     IF ls_param_value-value = ls_pa0001_po-zzjob_code.
  260. *&--- Validate Job code in the table and approval limit with the netprice
  261.                       IF is_sap_object_node_type-sont = 'PurchaseOrder'.
  262.                         SELECT SINGLE * FROM zmm_wfagent_po INTO @DATA(ls_agent_po) WHERE zzjob_code = @ls_param_value-value.
  263.                       ELSE.
  264.                         SELECT SINGLE * FROM zmm_wfagent_con INTO ls_agent_po WHERE zzjob_code = ls_param_value-value.
  265.                       ENDIF.
  266.                       IF sy-subrc EQ 0.
  267.                         IF lv_netwr GT ls_agent_po-aprvl_limit.
  268. *&--- Fill the static variable for the Agent determination in the class ZCL_MM_PUR_WF_AGENT.
  269.                           zcl_mm_swf_wf_cond_eval=>gc_jobcode = ls_param_value-value.
  270.                           zcl_mm_swf_wf_cond_eval=>gc_netwr   = lv_netwr.
  271.                           zcl_mm_swf_wf_cond_eval=>gc_pernr   = lv_pernr.
  272.                           cv_is_true = abap_true.
  273.                           EXIT.
  274.                         ELSE.
  275. *&--- Whenever the Jobcode condition with custom table fails validate with the netprice.
  276.                           IF is_sap_object_node_type-sont = 'PurchaseOrder'.
  277.                             SELECT  * FROM zmm_wfagent_po INTO TABLE @DATA(lt_agent_po) WHERE aprvl_limit GE @lv_netwr.
  278.                           ELSE.
  279.                             SELECT  * FROM zmm_wfagent_con INTO TABLE lt_agent_po WHERE aprvl_limit GE lv_netwr.
  280.                           ENDIF.
  281.                           IF sy-subrc EQ 0.
  282.                             SORT lt_agent_po BY aprvl_limit.
  283. *&--- Always read the 1st record and validate it with the job code
  284. *&--- Fill the static variable for the Agent determination in the class ZCL_MM_PUR_WF_AGENT
  285.                             READ TABLE lt_agent_po INTO ls_agent_po INDEX 1.
  286.                             IF ls_param_value-value = ls_agent_po-zzjob_code.
  287.                               zcl_mm_swf_wf_cond_eval=>gc_jobcode = ls_param_value-value.
  288.                               zcl_mm_swf_wf_cond_eval=>gc_netwr   = lv_netwr.
  289.                               zcl_mm_swf_wf_cond_eval=>gc_pernr   = lv_pernr.
  290.                               cv_is_true = abap_true.
  291.                               EXIT.
  292.                             ELSE.
  293. *&--- If both the validation with the Job code and Approval limit fails
  294. *&--- Get the all the Job code for the creator and validate them
  295. *&--- Fill the static variable for the Agent determination in the class ZCL_MM_PUR_WF_AGENT
  296.                               LOOP AT lt_jobcode INTO DATA(ls_jobcode).
  297.                                 ls_job-sign   = 'I'.
  298.                                 ls_job-option = 'EQ'.
  299.                                 ls_job-low = ls_jobcode-zzjob_code.
  300.                                 APPEND ls_job TO lr_jobcode.
  301.                                 CLEAR : ls_job.
  302.                               ENDLOOP.
  303.                               DELETE lt_agent_po WHERE zzjob_code NOT IN lr_jobcode.
  304.                               SORT lt_agent_po BY aprvl_limit.
  305.                               READ TABLE lt_agent_po INTO ls_agent_po INDEX 1.
  306.                               IF ls_param_value-value = ls_agent_po-zzjob_code.
  307.                                 zcl_mm_swf_wf_cond_eval=>gc_jobcode = ls_param_value-value.
  308.                                 zcl_mm_swf_wf_cond_eval=>gc_netwr   = lv_netwr.
  309.                                 zcl_mm_swf_wf_cond_eval=>gc_pernr   = lv_pernr.
  310.                                 cv_is_true = abap_true.
  311.                                 EXIT.
  312.                               ENDIF.
  313.                             ENDIF.
  314.                           ENDIF.
  315.                         ENDIF.
  316.                       ENDIF.
  317.                     ENDIF.
  318.                     IF ls_pa0001_po-mstbr IS NOT INITIAL.
  319.                       lv_pernr = ls_pa0001_po-mstbr.
  320.                     ELSE.
  321.                       EXIT.
  322.                     ENDIF.
  323.                   ENDIF.
  324.                 ENDIF.
  325.               ENDDO.
  326.             ENDIF.
  327.           ENDIF.
  328.           CLEAR : lt_jobcode.
  329.  
  330. *&--- Begin of changes RT #1505 TR#SD1K907936
  331. *&---cost center owner
  332.           IF lv_condition_id = '7' AND
  333.              lv_execution    = 'step'.
  334. *&--- Get the condition id details for the PO cost center owner
  335.             IF line_exists( it_parameter_value[ name = 'M/O' ] ).
  336.               ls_param_value = it_parameter_value[ name = 'M/O' ].
  337.               CASE ls_param_value-value.
  338.                 WHEN 'O'.
  339.                   SELECT * FROM tvarvc INTO TABLE @DATA(lt_tvarvc) WHERE name = @gc_lt_workflow_po
  340.                                                                      AND type = @lc_s    .
  341.                   IF sy-subrc IS INITIAL.
  342.                     DATA(lv_tvarvc) = VALUE #( lt_tvarvc[ low = ls_ekko-bsart ]-high OPTIONAL ).
  343.                   ENDIF.
  344.                   IF lv_tvarvc = 3.
  345.                     SELECT SINGLE aufnr INTO @DATA(lv_aufnr) FROM ekkn WHERE ebeln = @ls_ekko-ebeln.
  346.                     IF sy-subrc IS INITIAL.
  347.                       SELECT SINGLE kostv FROM aufk INTO @DATA(lv_kostv) WHERE aufnr = @lv_aufnr.
  348.                       IF sy-subrc IS INITIAL.
  349.                         SELECT SINGLE verak_user FROM csks INTO @DATA(lv_user) WHERE kostl = @lv_kostv.
  350.                         IF sy-subrc IS INITIAL.
  351.                           SELECT SINGLE pernr FROM pa0105 INTO lv_pernr WHERE usrid = lv_user
  352.                                                                         AND begda LE sy-datum
  353.                                                                         AND endda GE sy-datum.
  354.                           IF sy-subrc IS INITIAL.
  355.                             zcl_mm_swf_wf_cond_eval=>gc_pernr   = lv_pernr.
  356.                             cv_is_true = abap_true.
  357.                           ENDIF.
  358.                         ENDIF.
  359.                       ENDIF.
  360.                     ENDIF.
  361.                   ELSEIF lv_tvarvc = 2.
  362.  
  363.                     SELECT SINGLE kostl INTO @DATA(lv_ccenter) FROM ekkn WHERE ebeln = @ls_ekko-ebeln.
  364.                     IF sy-subrc IS INITIAL.
  365.                       SELECT SINGLE verak_user FROM csks INTO lv_user WHERE kostl = lv_ccenter.
  366.                       IF sy-subrc IS INITIAL.
  367.                         SELECT SINGLE pernr FROM pa0105 INTO lv_pernr WHERE usrid = lv_user
  368.                                                                       AND begda LE sy-datum
  369.                                                                       AND endda GE sy-datum.
  370.                         IF sy-subrc IS INITIAL.
  371.                           zcl_mm_swf_wf_cond_eval=>gc_pernr   = lv_pernr.
  372.                           cv_is_true = abap_true.
  373.                         ENDIF.
  374.                       ENDIF.
  375.                     ENDIF.
  376.                   ENDIF.
  377.                 WHEN OTHERS.
  378.                   "Do Nothing
  379.               ENDCASE.
  380.             ENDIF.
  381.           ENDIF.
  382. *&--- End of changes RT #1505 TR#SD1K907936
  383. *&--- Begin of code for RT# 2781 TR# SD1K911104
  384.           IF lv_condition_id = '12' AND
  385.              lv_execution    = 'start'.
  386.  
  387.             IF line_exists( it_parameter_value[ name = 'Contract change' ] ).
  388.  
  389.               SELECT k~mandt,
  390.                      k~ebeln,
  391.                      p~ebelp,
  392.                      k~bsart,
  393.                      k~kdatb,                   " Added for RT# 2876 TR# SD1K911356
  394.                      k~kdate,                   " Added for RT# 2876 TR# SD1K911356
  395.                      k~ktwrt,
  396.                      p~loekz,
  397.                      p~ktmng,
  398.                      p~effwr                    " Added for RT# 2876 TR# SD1K911356
  399.                 FROM ekko AS k
  400.                 INNER JOIN ekpo AS p
  401.                 ON k~ebeln EQ p~ebeln
  402.                 INTO TABLE @DATA(lt_podata)
  403.                 WHERE k~ebeln EQ @is_sap_object_node_type-sont_key_part_1.
  404.               IF sy-subrc IS INITIAL.
  405.  
  406.                 SORT lt_podata BY ebeln ebelp.
  407.  
  408.                 SELECT ebeln,
  409.                        ebelp,
  410.                        bsart,
  411.                        kdatb,                   " Added for RT# 2876 TR# SD1K911356
  412.                        kdate,                   " Added for RT# 2876 TR# SD1K911356
  413.                        ktwrt,
  414.                        loekz,
  415.                        ktmng,
  416.                        effwr                    " Added for RT# 2876 TR# SD1K911356
  417.                   FROM zmm_wf_contracts
  418.                   INTO TABLE @DATA(lt_zmm_wf_contracts)
  419.                   FOR ALL ENTRIES IN @lt_podata
  420.                   WHERE ebeln EQ @lt_podata-ebeln.
  421.                 IF sy-subrc IS INITIAL.
  422.  
  423.                   SORT lt_zmm_wf_contracts BY ebeln ebelp.
  424.  
  425.                 ENDIF.
  426.  
  427.               ENDIF.
  428.  
  429. *&--- Commented for RT# 2876 TR# SD1K911356
  430. *              DATA(lv_old_entries) = lines( lt_zmm_wf_contracts ).
  431. *              DATA(lv_new_entries) = lines( lt_podata ).
  432. *
  433. *              IF lv_old_entries EQ lv_new_entries.
  434.  
  435.               CREATE OBJECT lo_ref_ca_sfly_utilities.
  436.  
  437.               TRY.
  438.  
  439.                   IF lo_ref_ca_sfly_utilities IS BOUND.
  440.  
  441.                     CLEAR lt_tvarvc2[].
  442.  
  443.                     CALL METHOD lo_ref_ca_sfly_utilities->get_tvarvc_read
  444.                       EXPORTING
  445.                         iv_name   = lc_value_contract
  446.                         iv_type   = lc_s
  447.                       IMPORTING
  448.                         et_tvarvc = lt_tvarvc2.
  449.  
  450.                     IF lt_tvarvc2[] IS NOT INITIAL.
  451.  
  452.                       lr_value_bsart = VALUE #( FOR lfs_bsart IN lt_tvarvc2 (
  453.                                                 sign = lfs_bsart-sign
  454.                                                 option = lfs_bsart-opti
  455.                                                 low = lfs_bsart-low
  456.                                                 high = lfs_bsart-high ) ).
  457.  
  458.                     ENDIF.
  459.  
  460.                     CLEAR lt_tvarvc2[].
  461.  
  462.                     CALL METHOD lo_ref_ca_sfly_utilities->get_tvarvc_read
  463.                       EXPORTING
  464.                         iv_name   = lc_qty_contract
  465.                         iv_type   = lc_s
  466.                       IMPORTING
  467.                         et_tvarvc = lt_tvarvc2.
  468.  
  469.                     IF lt_tvarvc2[] IS NOT INITIAL.
  470.  
  471.                       lr_qty_bsart = VALUE #( FOR lfs_bsart IN lt_tvarvc2 (
  472.                                               sign = lfs_bsart-sign
  473.                                               option = lfs_bsart-opti
  474.                                               low = lfs_bsart-low
  475.                                               high = lfs_bsart-high ) ).
  476.  
  477.                     ENDIF.
  478.  
  479.                   ENDIF.
  480.  
  481.                 CATCH zcx_no_variant_variable.
  482.  
  483.               ENDTRY.
  484.  
  485.               LOOP AT lt_podata ASSIGNING FIELD-SYMBOL(<lfs_podata>).
  486.  
  487.                 READ TABLE lt_zmm_wf_contracts ASSIGNING FIELD-SYMBOL(<lfs_zmm_wf_contracts>)
  488.                 WITH KEY ebeln = <lfs_podata>-ebeln
  489.                          ebelp = <lfs_podata>-ebelp
  490.                          BINARY SEARCH.
  491.                 IF sy-subrc IS INITIAL.
  492.  
  493.                   IF <lfs_podata>-bsart IN lr_value_bsart.
  494.  
  495.                     IF <lfs_podata>-ktwrt GT <lfs_zmm_wf_contracts>-ktwrt.                                  " Target Value increased
  496.  
  497.                       cv_is_true = abap_false.
  498.                       EXIT.
  499.  
  500.                     ELSEIF <lfs_podata>-ktwrt LT <lfs_zmm_wf_contracts>-ktwrt.                              " Target Value decreased
  501.  
  502.                       cv_is_true = abap_true.
  503.                       EXIT.
  504.  
  505. *&--- Begin of changes for RT# 2876 TR# SD1K911356
  506.  
  507.                     ELSEIF <lfs_podata>-kdatb NE <lfs_zmm_wf_contracts>-kdatb.                              " Start of Validity Period changed
  508.  
  509.                       cv_is_true = abap_true.
  510.                       EXIT.
  511.  
  512.                     ELSEIF <lfs_podata>-kdate NE <lfs_zmm_wf_contracts>-kdate.                              " End of Validity Period changed
  513.  
  514.                       cv_is_true = abap_true.
  515.                       EXIT.
  516.  
  517. *&--- End of changes for RT# 2876 TR# SD1K911356
  518.                     ENDIF.
  519.  
  520.                   ELSEIF <lfs_podata>-bsart IN lr_qty_bsart.
  521. *&--- Commented for RT# 2876 TR# SD1K911356
  522. *                      IF <lfs_podata>-ktmng GT <lfs_zmm_wf_contracts>-ktmng.                                   " Target Quantity increased
  523. *
  524. *                        cv_is_true = abap_false.
  525. *                        EXIT.
  526. *
  527. *                      ELSEIF <lfs_podata>-effwr LT <lfs_zmm_wf_contracts>-effwr.                               " Item Value decreased
  528. *
  529. *                        cv_is_true = abap_true.
  530. *
  531. *                      ELSEIF <lfs_podata>-ktmng LT <lfs_zmm_wf_contracts>-ktmng.                               " Target Quantity decreased
  532. *
  533. *                        cv_is_true = abap_true.
  534. *
  535. *                      ELSEIF <lfs_podata>-loekz NE <lfs_zmm_wf_contracts>-loekz AND <lfs_podata>-loekz EQ 'L'. " Deletion Flag
  536. *
  537. *                        cv_is_true = abap_true.
  538.  
  539. *&--- Begin of changes for RT# 2876 TR# SD1K911356
  540.                     lv_old_po_value = REDUCE #( INIT i TYPE effwr FOR wa_zmm_wf_contracts IN lt_zmm_wf_contracts
  541.                                                 WHERE ( loekz NE 'L' )
  542.                                                 NEXT i = i + wa_zmm_wf_contracts-effwr ).
  543.  
  544.                     lv_new_po_value = REDUCE #( INIT i TYPE effwr FOR wa_podata IN lt_podata
  545.                                                 WHERE ( loekz NE 'L' )
  546.                                                 NEXT i = i + wa_podata-effwr ).
  547.  
  548.                     IF lv_new_po_value GT lv_old_po_value.                                                   " Total effective values increased
  549.  
  550.                       cv_is_true = abap_false.
  551.                       EXIT.
  552.  
  553.                     ELSEIF lv_new_po_value LT lv_old_po_value.                                               " Total effective values decreased
  554.  
  555.                       cv_is_true = abap_true.
  556.                       EXIT.
  557.  
  558.                     ELSEIF <lfs_podata>-kdatb NE <lfs_zmm_wf_contracts>-kdatb.                               " Start of Validity Period changed
  559.  
  560.                       cv_is_true = abap_true.
  561.                       EXIT.
  562.  
  563.                     ELSEIF <lfs_podata>-kdate NE <lfs_zmm_wf_contracts>-kdate.                               " End of Validity Period changed
  564.  
  565.                       cv_is_true = abap_true.
  566.                       EXIT.
  567. *&--- End of changes for RT# 2876 TR# SD1K911356
  568.  
  569.                     ENDIF.
  570.  
  571.                   ENDIF.
  572.  
  573.                 ENDIF.
  574.  
  575.               ENDLOOP.
  576.  
  577. *              ENDIF.      " Commented for RT# 2876 TR# SD1K911356
  578.  
  579.               IF lt_podata[] IS NOT INITIAL.
  580.  
  581.                 DO 10 TIMES.
  582.  
  583.                   CALL FUNCTION 'ENQUEUE_E_TABLE'
  584.                     EXPORTING
  585.                       tabname        = lc_zmm_wf_contracts
  586.                     EXCEPTIONS
  587.                       foreign_lock   = 1
  588.                       system_failure = 2
  589.                       OTHERS         = 3.
  590.                   IF sy-subrc IS INITIAL.
  591.  
  592.                     EXIT.
  593.  
  594.                   ENDIF.
  595.  
  596.                 ENDDO.
  597.  
  598.                 MODIFY zmm_wf_contracts FROM TABLE lt_podata.
  599.  
  600.                 IF sy-subrc IS INITIAL.
  601.  
  602.                   CALL FUNCTION 'DEQUEUE_E_TABLE'
  603.                     EXPORTING
  604.                       tabname = lc_zmm_wf_contracts.
  605.  
  606. *&--- Commented for RT# 2876 TR# SD1K911356
  607. *                  CLEAR: lt_podata[],
  608. *                         lt_zmm_wf_contracts[].
  609.  
  610.                 ENDIF.
  611.  
  612.               ENDIF.
  613.  
  614. *&--- Begin of changes for RT# 2876 TR# SD1K911356
  615.               CLEAR: lt_podata[],
  616.                      lt_zmm_wf_contracts[],
  617.                      lv_old_po_value,
  618.                      lv_new_po_value.
  619. *&--- End of changes for RT# 2876 TR# SD1K911356
  620.  
  621.             ENDIF.
  622.  
  623.           ENDIF.
  624. *&--- Begin of code for RT# 2876 TR# SD1K911356
  625.           IF lv_condition_id = '13' AND
  626.              lv_execution    = 'start'.
  627.  
  628.             IF line_exists( it_parameter_value[ name = 'PO change' ] ).
  629.  
  630.               SELECT k~mandt,
  631.                      k~ebeln,
  632.                      p~ebelp,
  633.                      k~bsart,
  634.                      k~kdatb,
  635.                      k~kdate,
  636.                      k~ktwrt,
  637.                      p~loekz,
  638.                      p~ktmng,
  639.                      p~effwr
  640.                 FROM ekko AS k
  641.                 INNER JOIN ekpo AS p
  642.                 ON k~ebeln EQ p~ebeln
  643.                 INTO TABLE @DATA(lt_podata2)
  644.                 WHERE k~ebeln EQ @is_sap_object_node_type-sont_key_part_1.
  645.               IF sy-subrc IS INITIAL.
  646.  
  647.                 SORT lt_podata2 BY ebeln ebelp.
  648.  
  649.                 SELECT ebeln,
  650.                        ebelp,
  651.                        bsart,
  652.                        kdatb,
  653.                        kdate,
  654.                        ktwrt,
  655.                        loekz,
  656.                        ktmng,
  657.                        effwr
  658.                   FROM zmm_wf_contracts
  659.                   INTO TABLE @DATA(lt_zmm_wf_contracts2)
  660.                   FOR ALL ENTRIES IN @lt_podata
  661.                   WHERE ebeln EQ @lt_podata-ebeln.
  662.                 IF sy-subrc IS INITIAL.
  663.  
  664.                   SORT lt_zmm_wf_contracts2 BY ebeln ebelp.
  665.  
  666.                 ENDIF.
  667.  
  668.               ENDIF.
  669.  
  670.               lv_old_po_value = REDUCE #( INIT i TYPE effwr FOR wa_zmm_wf_contracts2 IN lt_zmm_wf_contracts2
  671.                                           WHERE ( loekz NE 'L' )
  672.                                           NEXT i = i + wa_zmm_wf_contracts2-effwr ).
  673.  
  674.               lv_new_po_value = REDUCE #( INIT i TYPE effwr FOR wa_podata2 IN lt_podata2
  675.                                           WHERE ( loekz NE 'L' )
  676.                                           NEXT i = i + wa_podata2-effwr ).
  677.  
  678.               IF lv_new_po_value LT lv_old_po_value.                                " PO Value decreased
  679.  
  680.                 cv_is_true = abap_true.
  681.  
  682.               ENDIF.
  683.  
  684.               IF lt_podata2[] IS NOT INITIAL.
  685.  
  686.                 DO 10 TIMES.
  687.  
  688.                   CALL FUNCTION 'ENQUEUE_E_TABLE'
  689.                     EXPORTING
  690.                       tabname        = lc_zmm_wf_contracts
  691.                     EXCEPTIONS
  692.                       foreign_lock   = 1
  693.                       system_failure = 2
  694.                       OTHERS         = 3.
  695.                   IF sy-subrc IS INITIAL.
  696.  
  697.                     EXIT.
  698.  
  699.                   ENDIF.
  700.  
  701.                 ENDDO.
  702.  
  703.                 MODIFY zmm_wf_contracts FROM TABLE lt_podata2.
  704.  
  705.                 IF sy-subrc IS INITIAL.
  706.  
  707.                   CALL FUNCTION 'DEQUEUE_E_TABLE'
  708.                     EXPORTING
  709.                       tabname = lc_zmm_wf_contracts.
  710.  
  711.                 ENDIF.
  712.  
  713.               ENDIF.
  714.  
  715.               CLEAR: lt_podata2[],
  716.                      lt_zmm_wf_contracts2[],
  717.                      lv_old_po_value,
  718.                      lv_new_po_value.
  719.  
  720.             ENDIF.
  721.  
  722.           ENDIF.
  723. *&--- End of code for RT# 2876 TR# SD1K911356
  724.  
  725. *&--- Trigger the workflow for the Purchasae Requisition Item
  726.         WHEN 'PurchaseRequisitionItem'.
  727.  
  728. *&--- Get the Condition value for workflow start/step
  729.           lv_condition_id = is_condition-condition_id.
  730.           CONDENSE lv_condition_id.
  731.           lv_execution = is_condition-execution_context.
  732.           CONDENSE lv_execution.
  733.  
  734. *&--- Begin of changes RT #1968 TR# SD1K909115
  735.  
  736.           CALL FUNCTION 'NUMERIC_CHECK'
  737.             EXPORTING
  738.               string_in = is_sap_object_node_type-sont_key_part_1
  739.             IMPORTING
  740.               htype     = lv_htype_1.
  741.  
  742.           CALL FUNCTION 'NUMERIC_CHECK'
  743.             EXPORTING
  744.               string_in = is_sap_object_node_type-sont_key_part_2
  745.             IMPORTING
  746.               htype     = lv_htype_2.
  747.  
  748. *&--- End of changes RT #1968 TR# SD1K909115
  749.  
  750.           IF lv_htype_1 EQ 'NUMC' AND lv_htype_2 EQ 'NUMC'. "Added for RT# 1968 TR SD1K909115
  751.  
  752.             SELECT SINGLE banfn,
  753.                           bnfpo,
  754.                           ekgrp, "Added for RT# 1412 TR SD1K907675
  755.                           ernam,
  756.                           afnam,
  757.                           menge,
  758.                           preis,
  759.                           peinh, "Added for RT# 3049 TR SD1K911783
  760.                           knttp,
  761.                           kostl
  762.                      FROM eban
  763.                      INTO @DATA(ls_eban)
  764.                     WHERE banfn EQ @is_sap_object_node_type-sont_key_part_1
  765.                       AND bnfpo EQ @is_sap_object_node_type-sont_key_part_2.
  766.  
  767. *&--- Validate the Requisitoner
  768.             IF ls_eban-afnam IS NOT INITIAL.
  769.  
  770. *&---Begin of changes for RT# 1412 TR SD1K907675
  771. *&--- Trigger Workflow Procurement Manager
  772.               IF lv_condition_id = '10' AND
  773.               lv_execution = 'step'.
  774. *&--- Get the condition id details for the procurement manager
  775.                 IF line_exists( it_parameter_value[ name = 'P' ] ).
  776.                   SELECT SINGLE pernr FROM zmm_wfagent_pm INTO @DATA(lv_perno) WHERE ekgrp = @ls_eban-ekgrp
  777.                                                             AND knttp = @ls_eban-knttp.
  778.                   IF sy-subrc IS INITIAL.
  779.                     CLEAR zcl_mm_swf_wf_cond_eval=>gc_pernr.
  780.                     zcl_mm_swf_wf_cond_eval=>gc_con-ekgrp = ls_eban-ekgrp.
  781.                     zcl_mm_swf_wf_cond_eval=>gc_con-knttp = ls_eban-knttp.
  782.                     zcl_mm_swf_wf_cond_eval=>gc_con-flag = abap_true.
  783.                     cv_is_true = abap_true.                         "Trigger Workflow
  784.                     EXIT.
  785.                   ENDIF.
  786.                 ENDIF.
  787.               ENDIF.
  788. *&--- Trigger Workflow Purchasing group 903
  789.               IF lv_condition_id = '11' AND
  790.               lv_execution = 'step'.
  791.                 IF line_exists( it_parameter_value[ name = '1/2/3' ] ).
  792.                   ls_param_value = it_parameter_value[ name = '1/2/3' ].
  793.                   lv_level = ls_param_value-value.
  794.                   zcl_mm_swf_wf_cond_eval=>gc_con-level = lv_level.
  795.                   zcl_mm_swf_wf_cond_eval=>gc_con-ekgrp = ls_eban-ekgrp.
  796.                   zcl_mm_swf_wf_cond_eval=>gc_con-knttp = ls_eban-knttp.
  797.                   zcl_mm_swf_wf_cond_eval=>gc_con-flag = abap_true.
  798.                   cv_is_true = abap_true.                         "Trigger Workflow
  799.                   EXIT.
  800.                 ENDIF.
  801.               ENDIF.
  802. *&---End Of changes RT# 1412 TR SD1K907675
  803.  
  804. *&--- Trigger Workflow whenever for Job Code at header
  805.               IF lv_condition_id = '6' AND
  806.                  lv_execution = 'start'.
  807.  
  808.                 IF line_exists( it_parameter_value[ name = 'PA0001-ZZJOB_CODE' ] ).
  809.                   ls_param_value = it_parameter_value[ name = 'PA0001-ZZJOB_CODE' ].
  810.  
  811. *&--- Get the Org.unit and Position for the Personal Number
  812. *&--- When the Job code match with the input value, trigger workflow
  813.                   SELECT SINGLE pernr,
  814.                                 werks,
  815.                                 orgeh,
  816.                                 plans,
  817.                                 stell,
  818.                                 mstbr,
  819.                                 zzjob_code
  820.                            FROM pa0001
  821.                      INTO @DATA(ls_pa0001_pr)
  822.                      WHERE pernr = @ls_eban-afnam
  823.                        AND endda GE @sy-datum
  824.                        AND begda LE @sy-datum.
  825.  
  826.                   IF ls_pa0001_pr-zzjob_code = ls_param_value-value.
  827.                     cv_is_true = abap_true.                         "Trigger Workflow
  828.                     EXIT.
  829.                   ENDIF.
  830.                 ENDIF.
  831.               ENDIF.
  832.  
  833.  
  834.               IF line_exists( it_parameter_value[ name = 'EBAN-KNTTP' ] ).
  835.                 ls_param_value = it_parameter_value[ name = 'EBAN-KNTTP' ].
  836.                 IF ls_eban-knttp = ls_param_value-value.
  837.                   cv_is_true = abap_true.       "Trigger Workflow
  838.                   EXIT.
  839.                 ENDIF.
  840.               ENDIF.
  841.  
  842.               IF lv_condition_id = '7' AND
  843.                  lv_execution    = 'step'.
  844. *&--- Get the condition id details for the PR initator manager/cost center owner
  845.                 IF line_exists( it_parameter_value[ name = 'M/O' ] ).
  846.                   ls_param_value = it_parameter_value[ name = 'M/O' ].
  847.                   CASE ls_param_value-value.
  848.                     WHEN 'M'.
  849. *&--- Get the Manager for the PR creator
  850. *&--- Get the Personal number for the PR creator
  851.                       CLEAR : lv_pernr.
  852.                       SELECT SINGLE pernr
  853.                                FROM pa0105
  854.                                INTO lv_pernr
  855.                               WHERE subty = gc_0001
  856.                                 AND endda GE sy-datum
  857.                                 AND begda LE sy-datum
  858.                                 AND pernr = ls_eban-afnam.
  859.                       IF lv_pernr IS NOT INITIAL.
  860. *&--- Get the Supervisor
  861.                         CLEAR ls_pa0001_pr.
  862.                         SELECT SINGLE pernr
  863.                                      werks
  864.                                      orgeh
  865.                                      plans
  866.                                      stell
  867.                                      mstbr
  868.                                      zzjob_code
  869.                                 FROM pa0001
  870.                              INTO ls_pa0001_pr
  871.                           WHERE pernr = lv_pernr
  872.                             AND endda GE sy-datum
  873.                             AND begda LE sy-datum.
  874.  
  875.                         IF ls_pa0001_pr-plans IS NOT INITIAL.
  876. *&--- Get the Personal Number from Position ID(Supervisor)
  877.                           CLEAR : lv_sobid.
  878.                           SELECT SINGLE sobid FROM hrp1001 INTO lv_sobid WHERE otype = gc_otype
  879.                                                                            AND objid = ls_pa0001_pr-plans
  880.                                                                            AND plvar = gc_plvar
  881.                                                                            AND rsign = gc_rsign
  882.                                                                            AND relat = gc_relat
  883.                                                                            AND istat = gc_istat
  884.                                                                            AND begda LE sy-datum
  885.                                                                            AND endda GE sy-datum.
  886.                         ENDIF.
  887.  
  888.                         IF lv_sobid IS NOT INITIAL.
  889.                           CLEAR : lv_pernr.
  890. *&--- Get the Pernsonal Number for the Position ID.
  891.                           SELECT SINGLE pernr FROM pa0001 INTO lv_pernr WHERE endda GE sy-datum
  892.                                                                           AND begda LE sy-datum
  893.                                                                           AND plans = lv_sobid.
  894.  
  895.                           IF lv_pernr IS NOT INITIAL.
  896.                             zcl_mm_swf_wf_cond_eval=>gc_pernr   = lv_pernr.
  897.                             cv_is_true = abap_true.
  898.                             EXIT.
  899.                           ENDIF.
  900.                         ENDIF.
  901.                       ENDIF.
  902.                     WHEN 'O'.
  903.  
  904. *&--- Get the cost center
  905.                       SELECT SINGLE kostl FROM ebkn
  906.                                           INTO @DATA(lv_kostl)
  907.                                           WHERE banfn EQ @is_sap_object_node_type-sont_key_part_1
  908.                                             AND bnfpo EQ @is_sap_object_node_type-sont_key_part_2.
  909.  
  910.                       IF lv_kostl IS NOT INITIAL.
  911. *&--- Get the cost center owner
  912.                         SELECT SINGLE verak_user FROM csks
  913.                                                  INTO @DATA(lv_verak)
  914.                                                  WHERE kostl = @lv_kostl
  915.                                                    AND datbi GE @sy-datum.
  916.                         IF sy-subrc EQ 0.
  917.                           CLEAR : lv_pernr.
  918.                           SELECT SINGLE pernr
  919.                                    FROM pa0105
  920.                                    INTO lv_pernr
  921.                                   WHERE subty = gc_0001
  922.                                     AND endda GE sy-datum
  923.                                     AND begda LE sy-datum
  924.                                     AND usrid = lv_verak.
  925.  
  926.                           IF lv_pernr IS NOT INITIAL.
  927.                             zcl_mm_swf_wf_cond_eval=>gc_pernr   = lv_pernr.
  928.                             cv_is_true = abap_true.
  929.                             EXIT.
  930.                           ENDIF.
  931.                         ENDIF.
  932.                       ENDIF.
  933.                     WHEN OTHERS.
  934.                       "Do Nothing
  935.                   ENDCASE.
  936.                 ENDIF.
  937.               ENDIF.
  938.  
  939. *&--- Trigger for the PR initator manager's manager level
  940.               IF ( lv_condition_id = '8' OR
  941.                    lv_condition_id = '9' ) AND
  942.                  lv_execution    = 'step'.
  943.                 IF line_exists( it_parameter_value[ name = 'PA0001-ZZJOB_CODE' ] ).
  944.                   ls_param_value = it_parameter_value[ name = 'PA0001-ZZJOB_CODE' ].
  945.  
  946. *&--- Total Value
  947. *                  lv_netwr = ls_eban-menge * ls_eban-preis.      "Commented for RT# 3049 TR SD1K911783
  948. *&--Begin of code for RT# 3049 TR SD1K911783
  949.               IF ls_eban-peinh IS NOT INITIAL.
  950.                 lv_netwr = ( ls_eban-menge * ls_eban-preis ) / ls_eban-peinh.
  951.               ENDIF.
  952. *&--End of code for RT# 3049 TR SD1K911783
  953.  
  954. *&--- Get the Manager's Hiearchary
  955.                   CLEAR : lv_pernr.
  956.                   IF lv_condition_id = '8'.
  957.                     SELECT SINGLE pernr
  958.                              FROM pa0105
  959.                              INTO lv_pernr
  960.                             WHERE subty = gc_0001
  961.                               AND endda GE sy-datum
  962.                               AND begda LE sy-datum
  963.                               AND pernr = ls_eban-afnam.
  964.  
  965.                   ELSEIF lv_condition_id = '9'.
  966.  
  967. *&--- Get the cost center
  968.                     CLEAR : lv_kostl.
  969.                     SELECT SINGLE kostl FROM ebkn
  970.                                         INTO lv_kostl
  971.                                         WHERE banfn EQ is_sap_object_node_type-sont_key_part_1
  972.                                           AND bnfpo EQ is_sap_object_node_type-sont_key_part_2.
  973.  
  974.                     IF lv_kostl IS NOT INITIAL.
  975. *&--- Get the cost center owner
  976.                       SELECT SINGLE verak_user FROM csks
  977.                                                INTO lv_verak
  978.                                                WHERE kostl = lv_kostl
  979.                                                  AND datbi GE sy-datum.
  980.                     ENDIF.
  981.                     IF lv_verak IS NOT INITIAL.
  982. *&--- Get the cost center user id
  983.                       SELECT SINGLE pernr
  984.                               FROM pa0105
  985.                               INTO lv_pernr
  986.                              WHERE subty = gc_0001
  987.                                AND endda GE sy-datum
  988.                                AND begda LE sy-datum
  989.                                AND usrid = lv_verak.
  990.                     ENDIF.
  991.                   ENDIF.
  992.  
  993.  
  994.                   DO 15 TIMES.
  995.                     IF lv_pernr IS NOT INITIAL.
  996. *&--- Get the Supervisor
  997.                       SELECT SINGLE pernr
  998.                                     werks
  999.                                     orgeh
  1000.                                     plans
  1001.                                     stell
  1002.                                     mstbr
  1003.                                     zzjob_code
  1004.                                FROM pa0001
  1005.                             INTO ls_pa0001_pr
  1006.                          WHERE pernr = lv_pernr
  1007.                            AND endda GE sy-datum
  1008.                            AND begda LE sy-datum.
  1009.  
  1010.                       IF ls_pa0001_pr-plans IS NOT INITIAL.
  1011. *&--- Get the Personal Number from Position ID(Supervisor)
  1012.                         CLEAR : lv_sobid.
  1013.                         SELECT SINGLE sobid FROM hrp1001 INTO lv_sobid WHERE otype = gc_otype
  1014.                                                                          AND objid = ls_pa0001_pr-plans
  1015.                                                                          AND plvar = gc_plvar
  1016.                                                                          AND rsign = gc_rsign
  1017.                                                                          AND relat = gc_relat
  1018.                                                                          AND istat = gc_istat
  1019.                                                                          AND begda LE sy-datum
  1020.                                                                          AND endda GE sy-datum.
  1021.                       ENDIF.
  1022.  
  1023.                       IF lv_sobid IS NOT INITIAL.
  1024.                         CLEAR : lv_pernr,
  1025.                                 ls_pa0001_pr.
  1026. *&--- Get the Pernsonal Number for the Position ID.
  1027.                         SELECT SINGLE pernr
  1028.                                       werks
  1029.                                       orgeh
  1030.                                       plans
  1031.                                       stell
  1032.                                       mstbr
  1033.                                       zzjob_code
  1034.                                  FROM pa0001
  1035.                               INTO ls_pa0001_pr
  1036.                            WHERE plans = lv_sobid
  1037.                              AND endda GE sy-datum
  1038.                              AND begda LE sy-datum.
  1039.                         lv_pernr = ls_pa0001_pr-pernr.
  1040.                       ENDIF.
  1041.                       IF sy-subrc NE 0.
  1042.                         EXIT.
  1043.                       ELSE.
  1044. *&--- Get the job code for the Personal Number to match with the level
  1045.                         CLEAR : lv_jobcode.
  1046.                         lv_jobcode = ls_pa0001_pr-zzjob_code.
  1047.                         APPEND lv_jobcode TO lt_jobcode.
  1048.                         ls_param_value = it_parameter_value[ name = 'PA0001-ZZJOB_CODE' ].
  1049.                         IF ls_param_value-value = ls_pa0001_pr-zzjob_code.
  1050. *&--- Validate Job code in the table and approval limit with total amount
  1051.                           IF lv_condition_id = '8'.
  1052.                             SELECT SINGLE * FROM zmm_wfagent_pr INTO @DATA(ls_agent_pr) WHERE zzjob_code = @ls_param_value-value.
  1053.                           ELSEIF lv_condition_id = '9'.
  1054.                             SELECT SINGLE * FROM zmm_wfagent_cc INTO ls_agent_pr WHERE zzjob_code = ls_param_value-value.
  1055.                           ENDIF.
  1056.                           IF sy-subrc EQ 0.
  1057.                             IF lv_netwr GT ls_agent_pr-aprvl_limit.
  1058. *&--- Fill the static variable for the Agent determination in the class ZCL_MM_PUR_WF_AGENT.
  1059.                               zcl_mm_swf_wf_cond_eval=>gc_jobcode = ls_param_value-value.
  1060.                               zcl_mm_swf_wf_cond_eval=>gc_netwr   = lv_netwr.
  1061.                               zcl_mm_swf_wf_cond_eval=>gc_pernr   = lv_pernr.
  1062.  
  1063.                               me->check_duplicate_approve(
  1064.                                 EXPORTING
  1065.                                   im_banfn     = is_sap_object_node_type-sont_key_part_1                 " Purchase Requisition Number
  1066.                                   im_bnfpo     = is_sap_object_node_type-sont_key_part_2                 " Item number of purchase requisition
  1067.                                   im_condition = lv_condition_id                                         " Character Field of Length 1
  1068.                                 IMPORTING
  1069.                                   ex_pernr     = DATA(lv_pernr_dup)                                          " Personnel number
  1070.                                   ex_netwr     = DATA(lv_netwr_dup) ).                                       " Net Value
  1071.  
  1072.  
  1073.                               IF lv_pernr = lv_pernr_dup.
  1074.                                 cv_is_true = abap_false.
  1075.                               ELSE.
  1076.                                 cv_is_true = abap_true.
  1077.  
  1078.                                 IF lv_condition_id = '9' AND
  1079.                                    lv_netwr LT lv_netwr_dup .
  1080.                                   CLEAR : cv_is_true.
  1081.                                 ENDIF.
  1082.  
  1083.                               ENDIF.
  1084.                               EXIT.
  1085.                             ELSE.
  1086. *&--- Whenever the Jobcode condition with custom table fails validate with total amount
  1087.                               IF lv_condition_id = '8'.
  1088.                                 SELECT * FROM zmm_wfagent_pr INTO TABLE @DATA(lt_agent_pr) WHERE aprvl_limit GE @lv_netwr.
  1089.                               ELSEIF lv_condition_id = '9'.
  1090.                                 SELECT * FROM zmm_wfagent_cc INTO TABLE lt_agent_pr WHERE aprvl_limit GE lv_netwr.
  1091.                               ENDIF.
  1092.                               IF sy-subrc EQ 0.
  1093.                                 SORT lt_agent_pr BY aprvl_limit.
  1094. *&--- Always read the 1st record and validate it with the job code
  1095. *&--- Fill the static variable for the Agent determination in the class ZCL_MM_PUR_WF_AGENT
  1096.                                 READ TABLE lt_agent_pr INTO ls_agent_pr INDEX 1.
  1097.                                 IF ls_param_value-value = ls_agent_pr-zzjob_code.
  1098.                                   zcl_mm_swf_wf_cond_eval=>gc_jobcode = ls_param_value-value.
  1099.                                   zcl_mm_swf_wf_cond_eval=>gc_netwr   = lv_netwr.
  1100.                                   zcl_mm_swf_wf_cond_eval=>gc_pernr   = lv_pernr.
  1101.                                   me->check_duplicate_approve(
  1102.                                     EXPORTING
  1103.                                       im_banfn     = is_sap_object_node_type-sont_key_part_1                 " Purchase Requisition Number
  1104.                                       im_bnfpo     = is_sap_object_node_type-sont_key_part_2                 " Item number of purchase requisition
  1105.                                       im_condition = lv_condition_id                                         " Character Field of Length 1
  1106.                                     IMPORTING
  1107.                                       ex_pernr     = lv_pernr_dup                                            " Personnel number
  1108.                                       ex_netwr     = lv_netwr_dup ).                                         " Net Value
  1109.  
  1110.                                   IF lv_pernr = lv_pernr_dup.
  1111.                                     cv_is_true = abap_false.
  1112.                                   ELSE.
  1113.                                     cv_is_true = abap_true.
  1114.  
  1115.                                     IF lv_condition_id = '9' AND
  1116.                                        lv_netwr LT lv_netwr_dup .
  1117.                                       CLEAR : cv_is_true.
  1118.                                     ENDIF.
  1119.  
  1120.                                   ENDIF.
  1121.                                   EXIT.
  1122.                                 ELSE.
  1123. *&--- If both the validation with the Job code and Approval limit fails
  1124. *&--- Get the all the Job code for the creator and validate them
  1125. *&--- Fill the static variable for the Agent determination in the class ZCL_MM_PUR_WF_AGENT
  1126.                                   LOOP AT lt_jobcode INTO ls_jobcode.
  1127.                                     ls_job-sign   = 'I'.
  1128.                                     ls_job-option = 'EQ'.
  1129.                                     ls_job-low = ls_jobcode-zzjob_code.
  1130.                                     APPEND ls_job TO lr_jobcode.
  1131.                                     CLEAR : ls_job.
  1132.                                   ENDLOOP.
  1133.                                   DELETE lt_agent_pr WHERE zzjob_code NOT IN lr_jobcode.
  1134.                                   SORT lt_agent_pr BY aprvl_limit.
  1135.                                   READ TABLE lt_agent_pr INTO ls_agent_pr INDEX 1.
  1136.                                   IF ls_param_value-value = ls_agent_pr-zzjob_code.
  1137.                                     zcl_mm_swf_wf_cond_eval=>gc_jobcode = ls_param_value-value.
  1138.                                     zcl_mm_swf_wf_cond_eval=>gc_netwr   = lv_netwr.
  1139.                                     zcl_mm_swf_wf_cond_eval=>gc_pernr   = lv_pernr.
  1140.                                     me->check_duplicate_approve(
  1141.                                       EXPORTING
  1142.                                         im_banfn     = is_sap_object_node_type-sont_key_part_1                 " Purchase Requisition Number
  1143.                                         im_bnfpo     = is_sap_object_node_type-sont_key_part_2                 " Item number of purchase requisition
  1144.                                         im_condition = lv_condition_id                                         " Character Field of Length 1
  1145.                                       IMPORTING
  1146.                                         ex_pernr     = lv_pernr_dup                                            " Personnel number
  1147.                                          ex_netwr    = lv_netwr_dup ).                                         " Net Value
  1148.  
  1149.                                     IF lv_pernr = lv_pernr_dup.
  1150.                                       cv_is_true = abap_false.
  1151.                                     ELSE.
  1152.                                       cv_is_true = abap_true.
  1153.  
  1154.                                       IF lv_condition_id = '9' AND
  1155.                                          lv_netwr LT lv_netwr_dup .
  1156.                                         CLEAR : cv_is_true.
  1157.                                       ENDIF.
  1158.  
  1159.                                     ENDIF.
  1160.                                     EXIT.
  1161.                                   ENDIF.
  1162.                                 ENDIF.
  1163.                               ENDIF.
  1164.                             ENDIF.
  1165.                           ENDIF.
  1166.                         ENDIF.
  1167.                         IF ls_pa0001_pr-pernr IS NOT INITIAL.
  1168.                           lv_pernr = ls_pa0001_pr-pernr.
  1169.                         ELSE.
  1170.                           EXIT.
  1171.                         ENDIF.
  1172.                       ENDIF.
  1173.                     ENDIF.
  1174.                   ENDDO.
  1175.                 ENDIF.
  1176.               ENDIF.
  1177.  
  1178.               IF lv_condition_id = '6' AND
  1179.                  lv_execution    = 'start'.
  1180.                 IF line_exists( it_parameter_value[ name = 'PA0001-ZZJOB_CODE' ] ).
  1181.                   ls_param_value = it_parameter_value[ name = 'PA0001-ZZJOB_CODE' ].
  1182.  
  1183.                   IF ls_param_value-value = 'E0'.
  1184. *&--- Validate the total amount
  1185.                     SELECT SINGLE * FROM zmm_wfagent_pr INTO ls_agent_pr WHERE zzjob_code  =  ls_param_value-value
  1186.                                                                            AND aprvl_limit GE lv_netwr.
  1187.  
  1188.                     IF sy-subrc EQ 0.
  1189. *&--- Get the CEO Personal Number
  1190.                       SELECT SINGLE pernr
  1191.                                FROM pa0001
  1192.                                INTO lv_pernr
  1193.                               WHERE subty = gc_0001
  1194.                                 AND endda GE sy-datum
  1195.                                 AND begda LE sy-datum
  1196.                                 AND zzjob_code = 'E0'.
  1197.                       zcl_mm_swf_wf_cond_eval=>gc_pernr   = lv_pernr.
  1198.                       cv_is_true = abap_true.
  1199.                       EXIT.
  1200.                     ENDIF.
  1201.                   ENDIF.
  1202.                 ENDIF.
  1203.               ENDIF.
  1204.             ELSE.
  1205.               RAISE EXCEPTION TYPE cx_ble_runtime_error.
  1206.             ENDIF.
  1207.           ENDIF.  "Added for RT# 1968 TR SD1K909115
  1208.       ENDCASE.
  1209.     ENDIF.
  1210.   ENDMETHOD.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement