0% found this document useful (0 votes)
46 views25 pages

Method IF IF Data

This method checks purchase order items for a custom compliance table entry to determine if the order should be put on hold. It gets the source and destination countries, custom broker and importer of record partner functions and checks against the compliance table based on these values and document type.

Uploaded by

Souju Bonthu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
46 views25 pages

Method IF IF Data

This method checks purchase order items for a custom compliance table entry to determine if the order should be put on hold. It gets the source and destination countries, custom broker and importer of record partner functions and checks against the compliance table based on these values and document type.

Uploaded by

Souju Bonthu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 25

METHOD if_ex_me_process_po_cust~process_item.

IF sy-uname = 'APRIYA'.
IF gv_post = abap_true.
DATA(ls_item) = im_item->get_data( ).
ls_item-bednr = 'TEST_2023'.
im_item->set_data( ls_item ).
CLEAR gv_post.
ENDIF.
ENDIF.
RETURN.
ENDMETHOD.

METHOD if_ex_me_process_po_cust~check.
* IF sy-uname = 'APRIYA'.
* IF sy-ucomm = 'MESAVE'.
*
* DATA: lt_orders TYPE zaif_ptm_i043_order_detials,
* ls_orders TYPE zsptm_i043_key_data.
*
* DATA(ls_header) = im_header->get_data( ).
* DATA(lt_items) = im_header->get_items( ).
* LOOP AT lt_items ASSIGNING FIELD-SYMBOL(<lfs_item>).
* DATA(ls_item) = <lfs_item>-item->get_data( ).
* lt_orders-order_data = VALUE #( BASE lt_orders-order_data[]
( vbeln = ls_item-ebeln posnr = ls_item-ebelp werks = ls_item-werks ) ).
* ENDLOOP.
*
* zcl_stp_i042_sto_replic_kiwi=>get_instance( )->send_data_call_off(
* EXPORTING
* it_orders = lt_orders ).
*
* ENDIF.
* ENDIF.
ENDMETHOD.

METHOD if_ex_me_process_po_cust~post.
* IF sy-uname = 'APRIYA'
*
* OR sy-uname = 'PKARNATI'.
*
* DATA: lt_lines TYPE TABLE OF ekpo,
** ls_item TYPE mepoitem,
* ls_test TYPE REF TO if_purchase_order_item_mm,
* lv_identifier TYPE char1.
*
*
* DATA(ls_header) = im_header->get_data( ).
* DATA(lt_items) = im_header->get_items( ).
*
* CONSTANTS: lc_pot TYPE char16 VALUE '(SAPLMEPO)POT[]'.
*
* ASSIGN (lc_pot) TO FIELD-SYMBOL(<lfs_pot>).
*
** "calling call off class
* DATA(go_sto_replication) = zcl_stp_i042_sto_replic_kiwi=>get_instance(
).
*
* LOOP AT lt_items ASSIGNING FIELD-SYMBOL(<lfs_item>).
* DATA(ls_item) = <lfs_item>-item->get_data( ).
* ls_item-bednr = 'TEST_I042'.
* <lfs_item>-item->set_data( ls_item ).
* gv_post = abap_true.
*
** APPEND ls_item TO lt_lines.
** im_header->set_conditions( ls_item ).
** im_header->set_data( ls_item ).
*
** im_header->SET_CONDITIONS( ls_item ).
* ls_test = <lfs_item>-item.
* me->if_ex_me_process_po_cust~process_item( ls_test ).
* ENDLOOP.
*
*
**--> Filter1
** lt_lines = lt_items[].
**
** CALL METHOD zcl_stp_po_sto_outbound=>determine_sheet_or_box
** EXPORTING
** it_ekpo = lt_lines[]
** CHANGING
** cv_identifier = lv_identifier.
*
* ENDIF.
RETURN.
ENDMETHOD. METHOD hold_sto_order.
*&---------------------------------------------------------------------*
* Class Name : ZCL_OTC_E001_STO_HOLD
* Method name : HOLD_STO_ORDER
* Author : Shefna Muhammed
* Date : 09/26/2023
* Transport # : DS4K912518
*----------------------------------------------------------------------*
* Description: : Method used to put hold STO export order based
* custom compliance table entry
*----------------------------------------------------------------------*
* MODIFICATION HISTORY
*----------------------------------------------------------------------*
* Transport | Charm No | Author ID | Date | Description *
*
************************************************************************
INCLUDE mm_messages_mac.
DATA: lt_items TYPE STANDARD TABLE OF mepoitem,
lt_poitem_kunnr TYPE STANDARD TABLE OF gty_kunnr,
lv_custombroker TYPE kunn2,
lv_importerofrecord TYPE kunn2,
lv_destin_country TYPE char2,
lv_fromcountry TYPE land1.

CLEAR : lt_items ,
lv_destin_country ,
lv_fromcountry .

DATA(lv_doctype) = is_header->get_data( )-bsart. "document type


DATA(lv_supplying_plant) = is_header->get_data( )-reswk. "supplying plant
DATA(lv_incoterm) = is_header->get_data( )-inco1. "incoterm
DATA(lt_purchaseorderitem) = is_header->get_items( ). "Purchaseorder item

"check the doc type is ZIC and shipping condition is ocean

IF lv_doctype = VALUE #( gt_cbo_data[ name = gc_doctyp_zic ]-low OPTIONAL


) .

"get the destination country


IF lv_supplying_plant IS NOT INITIAL.

SELECT plant,
country FROM zz1_otc_e001_plant_country
WHERE plant = @lv_supplying_plant
INTO TABLE @DATA(lt_country).
IF sy-subrc <> 0.
MESSAGE e001(zotc_msg). "No Plant country found
ELSE.
lv_destin_country = VALUE #( lt_country[ plant =
lv_supplying_plant ]-country OPTIONAL ).
ENDIF.

"get the custom table entries


IF lv_incoterm IS NOT INITIAL.
SELECT incoterm,
shipfromplantcountry,
shiptocountry,
importerofrecord,
custombroker,
alloworderentry
FROM zz1_otc_e001_custom_check
INTO TABLE @DATA(lt_compliance)
WHERE incoterm = @lv_incoterm AND
shiptocountry = @lv_destin_country.
IF sy-subrc <> 0.
CLEAR lt_compliance.
ENDIF.
ENDIF.

ENDIF.
"Get the source country
IF lt_purchaseorderitem IS NOT INITIAL.

LOOP AT lt_purchaseorderitem ASSIGNING FIELD-SYMBOL(<lfs_item>).


DATA(ls_item) = <lfs_item>-item->get_data( ).
APPEND <lfs_item>-item->get_shipping_data( )-kunnr TO
lt_poitem_kunnr.
APPEND ls_item TO lt_items.
ENDLOOP.
SORT lt_poitem_kunnr BY kunnr.
DELETE ADJACENT DUPLICATES FROM lt_poitem_kunnr COMPARING kunnr .
"Get PF for custom broker and importer of record.
get_partner_function(
EXPORTING
it_kunnr = lt_poitem_kunnr
IMPORTING
et_partner = DATA(lt_partner) )
.
"Get the source countries of all PO lines
DATA(lt_poitem_new) = lt_items.
SORT lt_poitem_new BY werks.
DELETE ADJACENT DUPLICATES FROM lt_poitem_new COMPARING werks.

SELECT plant,
country
FROM zz1_otc_e001_plant_country
FOR ALL ENTRIES IN @lt_poitem_new
WHERE plant = @lt_poitem_new-werks
INTO TABLE @DATA(lt_fromcountry).
IF sy-subrc <> 0.
MESSAGE e001(zotc_msg). "No Plant country found
ENDIF.
ENDIF.
ENDIF.

LOOP AT lt_purchaseorderitem ASSIGNING FIELD-SYMBOL(<lfs_poitem>).


"Checking shipping condition OC
IF <lfs_poitem>-item->get_shipping_data( )-vsbed = VALUE #(
gt_cbo_data[ name = gc_ship_con_oc ]-low OPTIONAL ).
DATA(ls_poitem) = <lfs_poitem>-item->get_data( ).
lv_fromcountry = VALUE #( lt_fromcountry[ plant = ls_poitem-
werks ]-country OPTIONAL ).
"Get custom broker Partner and importer of record partner
lv_custombroker = VALUE #( lt_partner[ kunnr = <lfs_poitem>-item-
>get_shipping_data( )-kunnr
parvw = VALUE #(
gt_cbo_data[ name = gc_custombroker ]-low OPTIONAL ) ]-kunn2 OPTIONAL ).
lv_importerofrecord = VALUE #( lt_partner[ kunnr = <lfs_poitem>-item-
>get_shipping_data( )-kunnr
parvw = VALUE #(
gt_cbo_data[ name = gc_importerofrecord ]-low OPTIONAL ) ]-kunn2 OPTIONAL ).
IF lv_fromcountry <> lv_destin_country.
IF line_exists( gt_cbo_data[ name = gc_shipto_list low =
lv_destin_country ] ).
"read data from custom table based on below input
ASSIGN lt_compliance[ incoterm = lv_incoterm
shipfromplantcountry = lv_fromcountry
shiptocountry = lv_destin_country
custombroker = lv_custombroker
importerofrecord = lv_importerofrecord
] TO FIELD-SYMBOL(<lfs_compliance>).
IF <lfs_compliance> IS ASSIGNED AND
<lfs_compliance>-alloworderentry = VALUE #( gt_cbo_data[ name =
gc_allowed_entry counter = gc_no_2 ]-low(1) OPTIONAL ) ."'N'..
mmpur_context 921.
mmpur_business_obj_id ls_poitem-id.
mmpur_message_forced gc_error_e gc_msg_class gc_msg_no TEXT-001
TEXT-002 TEXT-007 '' .
cv_hold = abap_true.

ELSEIF ( <lfs_compliance> IS ASSIGNED AND


<lfs_compliance>-alloworderentry = abap_false ) OR
sy-subrc <> 0.
mmpur_context 921.
mmpur_business_obj_id ls_poitem-id.
mmpur_message_forced gc_error_e gc_msg_class gc_msg_no TEXT-003
TEXT-004 TEXT-005 TEXT-006 .
cv_hold = abap_true.
ELSE.
cv_hold = abap_false.
ENDIF.
ENDIF.

ENDIF.
ENDIF.
ENDLOOP.
ENDMETHOD.

METHOD get_partner_function.
*&---------------------------------------------------------------------*
* Class Name : ZCL_OTC_E001_STO_HOLD
* Method name : GET_PARTNER_FUNCTION
* Author : Shefna Muhammed
* Date : 09/26/2023
* Transport # : DS4K912518
*----------------------------------------------------------------------*
* Description: : Method used to put get custom PF details
*----------------------------------------------------------------------*
* MODIFICATION HISTORY
*----------------------------------------------------------------------*
* Transport | Charm No | Author ID | Date | Description *
*
************************************************************************
DATA : lr_partnerfun TYPE RANGE OF parvw.

CLEAR : et_partner,
lr_partnerfun.
IF it_kunnr IS NOT INITIAL.

lr_partnerfun = VALUE #( ( sign = gc_include


option = gc_equal
low = VALUE #( gt_cbo_data[ name =
gc_importerofrecord ]-low OPTIONAL )
)
( sign = gc_include
option = gc_equal
low = VALUE #( gt_cbo_data[ name =
gc_custombroker ]-low OPTIONAL )
)
).

SELECT customer,
partnerfunction,
bpcustomernumber
FROM i_custsalespartnerfunc_2
INTO TABLE @et_partner
FOR ALL ENTRIES IN @it_kunnr
WHERE customer = @it_kunnr-kunnr AND
partnerfunction IN @lr_partnerfun.
IF sy-subrc <> 0.
CLEAR et_partner.
ENDIF.
ENDIF.

ENDMETHOD.
METHOD if_ex_me_process_po_cust~process_header.
* RETURN.
*----------------------------------------------------------------------*
* Class : ZCL_STP_E030_DOC_TYP
* Method : PROCESS_HEADER
* RICEFW ID/Defect : STP_E030
* Author : Glberto Cuevas / Anupam /Prashanth
* Date : 20/09/2023
* SAP Transport Req.# : DS4K912237
* Release : D1
*----------------------------------------------------------------------*
* Description : Post
*----------------------------------------------------------------------*
CONSTANTS:
lc_sign TYPE char01 VALUE 'I',
lc_option TYPE char02 VALUE 'EQ',
lc_spare_parts TYPE mtart VALUE 'ERSA',
lc_maintenance TYPE mtart VALUE 'IBAU',
lc_sto TYPE bsart VALUE 'UB',
lc_intra TYPE bsart VALUE 'ZSR',
lc_isto TYPE bsart VALUE 'ZIC',
lc_inter TYPE bsart VALUE 'ZSRI',
lc_interim TYPE bsart VALUE 'ZINT',
lc_standard TYPE bsart VALUE 'NB',
lc_inter_intra_acc_group TYPE ktokk VALUE 'ZWIC',
lc_zstr TYPE bsart VALUE 'ZSTR',
lc_mat_type TYPE c LENGTH 20 VALUE 'ZSTP_E030_MAT_TYPE'.

DATA: lt_materials TYPE RANGE OF matnr,


lt_plant TYPE TABLE OF werks,
lv_pr_no TYPE banfn,
lt_po_item TYPE mmpur_t_mepoitem,
lr_material_type TYPE RANGE OF mtart.

IF gv_is_active = abap_false.
RETURN.
ENDIF.

DATA(ls_header) = im_header->get_data( ).
DATA(lt_items) = im_header->get_items( ).

LOOP AT lt_items ASSIGNING FIELD-SYMBOL(<lfs_item>).


DATA(ls_item) = <lfs_item>-item->get_data( ).
APPEND ls_item TO lt_po_item.
APPEND ls_item-werks TO lt_plant.

lv_pr_no = ls_item-banfn.

*" To avoid duplicates


IF ls_item-matnr IS NOT INITIAL
AND NOT line_exists( lt_materials[ low = ls_item-matnr ] ).

APPEND VALUE #( sign = lc_sign


option = lc_option
low = ls_item-matnr ) TO lt_materials.

ENDIF.
ENDLOOP.

"Fetch the doctype P. Org of PR


SELECT SINGLE bsart,
ekorg,
reswk
FROM zcds_pr_data AS a
INTO @DATA(ls_pr_details)
WHERE a~banfn = @lv_pr_no.
IF sy-subrc <> 0.
CLEAR ls_pr_details.
ENDIF.
IF ls_pr_details-bsart EQ lc_standard
OR ls_pr_details-bsart EQ lc_zstr.

lr_material_type = VALUE #( FOR ls_constant IN gt_constants WHERE ( name


= lc_mat_type )
( sign
= ls_constant-sign

option = ls_constant-opti
low
= ls_constant-low ) ).
*" Header details
IF ls_header-lifnr IS NOT INITIAL.
SELECT SINGLE ktokk
FROM zcds_stp_e030_vendor
INTO @DATA(lv_vendor_account)
WHERE lifnr = @ls_header-lifnr.
IF sy-subrc <> 0.
CLEAR lv_vendor_account.
ENDIF.
ENDIF.

IF lt_materials IS NOT INITIAL.


SELECT material, "matnr,
materialtype "mtart
FROM i_material
INTO TABLE @DATA(lt_material_types)
WHERE material IN @lt_materials.
IF sy-subrc <> 0.
CLEAR lt_material_types.
ENDIF.
ENDIF.

IF ls_pr_details-reswk IS NOT INITIAL. " Supplying plant


APPEND ls_pr_details-reswk TO lt_plant.
ENDIF.

"Fetching the value of company code with respect to plant


IF lt_plant IS NOT INITIAL.
SELECT bwkey,
bukrs
FROM zcds_stp_e030_t001k
FOR ALL ENTRIES IN @lt_plant
WHERE bwkey = @lt_plant-werks
INTO TABLE @DATA(lt_company_code_plant_mapping).
IF sy-subrc = 0
AND ls_pr_details-reswk IS NOT INITIAL.
DATA(lv_supplying_company_code) = VALUE #(
lt_company_code_plant_mapping[ bwkey = ls_pr_details-reswk ]-bukrs OPTIONAL ).
ENDIF.
ENDIF.
LOOP AT lt_po_item ASSIGNING FIELD-SYMBOL(<lfs_po_item>).

DATA(lv_material_type) = VALUE #( lt_material_types[ material =


<lfs_po_item>-matnr ]-materialtype OPTIONAL ).

IF ls_pr_details-reswk IS NOT INITIAL. " Supplying plant


DATA(lv_receiving_company_code) = VALUE #(
lt_company_code_plant_mapping[ bwkey = <lfs_po_item>-werks ]-bukrs OPTIONAL ).
" Receiving plant

IF lv_supplying_company_code = lv_receiving_company_code.
* "Same company code (INTRACOMPANY)
DATA(lv_po_document_type) = COND #( WHEN lv_material_type IN
lr_material_type
AND lr_material_type IS NOT
INITIAL
THEN lc_intra "ZSR
ELSE lc_sto "UB
).
ELSE.
"Different company code (INTERCOMPANY)
lv_po_document_type = COND #( WHEN lv_material_type IN
lr_material_type
AND lr_material_type IS NOT INITIAL
THEN lc_inter "ZSRI
ELSE lc_isto "ZIC
).
ENDIF.

IF lv_po_document_type IS NOT INITIAL.


ls_header-bsart = lv_po_document_type.
change_purch_org( CHANGING cv_purch_org = ls_header-ekorg ).
im_header->set_data( ls_header ).
ENDIF.
ELSE.
"Issuing plant is empty
lv_po_document_type = COND #( WHEN lv_vendor_account =
lc_inter_intra_acc_group
THEN lc_interim
ELSE lc_standard ).
IF lv_po_document_type IS NOT INITIAL.
ls_header-bsart = lv_po_document_type.
ls_header-ekorg = ls_pr_details-ekorg.
im_header->set_data( ls_header ).
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDMETHOD.
METHOD validate_sto.
*----------------------------------------------------------------------*
* Class : ZCL_STP_E025_STO_CHECK
* Method : CHECK_PO
* RICEFW ID/Defect : STP_E025
* Author : Glberto Cuevas
* Date : 7/06/2023
* SAP Transport Req.# : DS4K906378
* Release : D1
*----------------------------------------------------------------------*
* Description : Check if enhancement should trigger
*----------------------------------------------------------------------*

* Check switch framework, user and document type


IF check_framework( ) = abap_false
OR check_process( iv_header->get_data( )-bsart ) = abap_false.
RETURN.
ENDIF.

* Validate against embargo and preference tables


check_po(
EXPORTING
is_purchaseorder = iv_header->get_data( )
it_purchaseorderitems = iv_header->get_items( )
CHANGING
cv_failed = cv_failed ).
ENDMETHOD.
METHOD check_framework.
*----------------------------------------------------------------------*
* Class : ZCL_STP_E025_STO_CHECK
* Method : CHECK_FRAMEWORK
* RICEFW ID/Defect : STP_E025
* Author : Glberto Cuevas
* Date : 7/06/2023
* SAP Transport Req.# : DS4K906378
* Release : D1
*----------------------------------------------------------------------*
* Description : Get Switchframe work details for On/Off
*----------------------------------------------------------------------*
"Constant Declaration
CONSTANTS: lc_program_name(40) TYPE c VALUE 'STO_CHECK',
lc_switch_name(30) TYPE c VALUE 'Z_STP_E025',
lc_evaluation(50) TYPE c VALUE 'VALIDATE_STO_CUST'.

r_enabled = abap_false.
"Get Switchframe work details for On/Off
zcl_util_switch_framework=>get_enhancements(
EXPORTING
iv_prog_name = lc_program_name
iv_switch_name = lc_switch_name
IMPORTING
et_enhancements = DATA(lt_enhancement) ).

IF line_exists( lt_enhancement[ method = lc_evaluation ] ).


r_enabled = abap_true.
ENDIF.
ENDMETHOD.

METHOD check_po.
*----------------------------------------------------------------------*
* Class : ZCL_STP_E025_STO_CHECK
* Method : CHECK_PO
* RICEFW ID/Defect : STP_E025
* Author : Glberto Cuevas
* Date : 7/06/2023
* SAP Transport Req.# : DS4K906378
* Release : D1
*----------------------------------------------------------------------*
* Description : Get data and determine if STO is valid
*----------------------------------------------------------------------*
CONSTANTS:
lc_sign TYPE char01 VALUE 'I',
lc_option TYPE char02 VALUE 'EQ',
lc_machine_id TYPE atnam VALUE 'MACHINE_ID',
lc_max_roll_width TYPE atnam VALUE 'MAX_ROLL_WIDTH',
lc_min_roll_width TYPE atnam VALUE 'MIN_ROLL_WIDTH',
lc_paper_grade TYPE atnam VALUE 'GRADE_CODE', "Change by GCUEVAS4
lc_form TYPE atnam VALUE 'FORM',
lc_roll TYPE atwrt VALUE 'R'.

DATA:
lt_input_plants TYPE RANGE OF werks_d,
lt_objky TYPE RANGE OF ibobjkey,
lt_stp TYPE RANGE OF kunnr,
lt_config TYPE ibco2_instance_tab2,
lt_chara TYPE STANDARD TABLE OF gty_characteristics,
lv_material TYPE matnr,
lt_purchase_order_item TYPE tab_mepoitem.

DATA(lv_machine_id) = get_internal_atnam( lc_machine_id ).


DATA(lv_max_roll_width) = get_internal_atnam( lc_max_roll_width ).
DATA(lv_min_roll_width) = get_internal_atnam( lc_min_roll_width ).
DATA(lv_paper_grade_desc) = get_internal_atnam( lc_paper_grade
)."Change by GCUEVAS4
DATA(lv_characterstics) = get_internal_atnam( lc_form ).

"Create range of item materials, plant anf objkey, used to extract


characteristics
LOOP AT it_purchaseorderitems ASSIGNING FIELD-SYMBOL(<lfs_items>).
DATA(ls_item) = <lfs_items>-item->get_data( ).
APPEND ls_item TO lt_purchase_order_item.

*" Get Plant


IF ls_item-werks IS NOT INITIAL.
APPEND INITIAL LINE TO lt_input_plants ASSIGNING FIELD-
SYMBOL(<lfs_plant>).
<lfs_plant>-sign = lc_sign.
<lfs_plant>-option = lc_option.
<lfs_plant>-low = ls_item-werks.
ENDIF.

*" Get Material Config details


CALL FUNCTION 'CUCB_GET_CONFIGURATION'
EXPORTING
instance = ls_item-cuobj
IMPORTING
configuration = lt_config
EXCEPTIONS
invalid_input = 1
invalid_instance = 2
instance_is_a_classification = 3
OTHERS = 4.
IF sy-subrc = 0.
DATA(lt_values) = VALUE #( lt_config[ instance = ls_item-cuobj ]-
values OPTIONAL ).
IF lt_values IS NOT INITIAL.
*" Append Characteristics data
APPEND INITIAL LINE TO lt_chara ASSIGNING FIELD-SYMBOL(<lfs_chara>).
<lfs_chara>-ebelp = ls_item-ebelp.
<lfs_chara>-machine = VALUE #( lt_values[ atinn =
lv_machine_id ]-atwrt OPTIONAL ).
<lfs_chara>-max_width = VALUE #( lt_values[ atinn =
lv_max_roll_width ]-atflv OPTIONAL ).
<lfs_chara>-min_width = VALUE #( lt_values[ atinn =
lv_min_roll_width ]-atflv OPTIONAL ).
<lfs_chara>-paper_grade = VALUE #( lt_values[ atinn =
lv_paper_grade_desc ]-atwrt OPTIONAL ).
<lfs_chara>-form_char = VALUE #( lt_values[ atinn =
lv_characterstics ]-atwrt OPTIONAL ).
ENDIF.
ENDIF.
ENDLOOP.

* Extract STP plant


SELECT plant, "WERKS
plantcustomer "KUNNR
FROM i_plant
INTO TABLE @DATA(lt_plants)
WHERE plant IN @lt_input_plants.
IF sy-subrc = 0.
lt_stp = VALUE #( FOR ls_plant IN lt_plants
( sign = lc_sign
option = lc_option
low = ls_plant-plantcustomer ) ).
ENDIF.
* ++BOC | ATHAKUR4 | DS4K913767 | CR001
* Extract embargo values
SELECT shiptoparty,
papergrade,
mill,
machineid,
effectivedt
FROM zz1_stp_e025_embargo
INTO TABLE @DATA(lt_embargo)
WHERE shiptoparty IN @lt_stp
AND mill = @is_purchaseorder-reswk
AND effectivedt GE @sy-datum.
* ++EOC | ATHAKUR4 | DS4K913767 | CR001
IF sy-subrc = 0.
CLEAR ls_item.
LOOP AT lt_purchase_order_item ASSIGNING FIELD-SYMBOL(<lfs_item>).

DATA(lv_plant_customer) = VALUE #( lt_plants[ plant = <lfs_item>-


werks ]-plantcustomer OPTIONAL ).
DATA(lv_machine) = VALUE #( lt_chara[ ebelp = <lfs_item>-
ebelp ]-machine OPTIONAL ).
DATA(lv_paper_grade) = VALUE #( lt_chara[ ebelp = <lfs_item>-
ebelp ]-paper_grade OPTIONAL ). "Change by GCUEVAS4
DATA(lv_form) = VALUE #( lt_chara[ ebelp = <lfs_item>-
ebelp ]-form_char OPTIONAL ).
IF lv_form NE lc_roll.
CONTINUE.
ENDIF.
* Add error message if the entry exists in embargo
IF line_exists( lt_embargo[ shiptoparty = lv_plant_customer
* material = ls_item-matnr
"CHANGES MADE BY ATHAKUR4
mill = is_purchaseorder-reswk
machineid = lv_machine
papergrade = lv_paper_grade ] ) .
"Change by GCUEVAS4
cv_failed = abap_true.

ENDIF.
ENDLOOP.

IF cv_failed = abap_true.
MESSAGE e022(zstp_msg).
ENDIF.
ENDIF.

* Extract preference values


SELECT shiptoparty,
papergrade,
mill,
machine_id,
min_roll_width,
max_roll_width,
transportationmode,
start_date,
end_date
FROM zz1_stp_e025_preference
INTO TABLE @DATA(lt_preference)
WHERE shiptoparty IN @lt_stp
AND mill = @is_purchaseorder-reswk.
IF sy-subrc = 0.
CLEAR ls_item.
LOOP AT it_purchaseorderitems ASSIGNING <lfs_items>.
IF sy-tabix = 1.
"Get delivery date from the first line
DATA(lt_schedules) = <lfs_items>-item->get_schedules( ).
DATA(lo_delivery) = VALUE #( lt_schedules[ 1 ]-schedule OPTIONAL ).
DATA(lv_delivery_date) = lo_delivery->get_data( )-eindt.
ENDIF.
ls_item = <lfs_items>-item->get_data( ).
lv_plant_customer = VALUE #( lt_plants[ plant = ls_item-werks ]-
plantcustomer OPTIONAL ).

lv_form = VALUE #( lt_chara[ ebelp = ls_item-ebelp ]-form_char


OPTIONAL ).
IF lv_form NE lc_roll.
CONTINUE.
ENDIF.

DATA(ls_chara) = VALUE #( lt_chara[ ebelp = ls_item-ebelp ] OPTIONAL


).
lv_machine = ls_chara-machine.
DATA(lv_width_min) = ls_chara-min_width.
DATA(lv_width_max) = ls_chara-max_width.
lv_paper_grade = ls_chara-paper_grade.
"Change by GCUEVAS4

* Add message if the combination of fields doesn't exist in the preference


table
cv_failed = abap_true.
IF line_exists( lt_preference[ shiptoparty = lv_plant_customer
papergrade = lv_paper_grade
"Change by GCUEVAS4
mill = is_purchaseorder-reswk
machine_id = lv_machine
transportationmode = ls_item-
zz1_stp_e026_transpor_pdi ] ). "Change by GCUEVAS4
* min_roll_width = lv_width_min
"(+)MAC-68710 | ATHAKUR4 | 01/04/2024 | DS4K920017
* max_roll_width = lv_width_max ] ).
"(+)MAC-68710| ATHAKUR4 | 01/04/2024 | DS4K920017
cv_failed = abap_false.

ENDIF.
IF cv_failed = abap_false.
* If the entry exists, check if the widths or the delivery date are outside
of the ranges in table
LOOP AT lt_preference ASSIGNING FIELD-SYMBOL(<lfs_preference>)
WHERE shiptoparty = lv_plant_customer
AND papergrade = lv_paper_grade
"Change by GCUEVAS4
AND mill = is_purchaseorder-reswk
AND machine_id = lv_machine
AND transportationmode = ls_item-zz1_stp_e026_transpor_pdi.
"Change by GCUEVAS4

* If the roll width os not within range or date


IF <lfs_preference>-min_roll_width > lv_width_min
OR <lfs_preference>-max_roll_width < lv_width_max
OR lv_delivery_date < <lfs_preference>-start_date
OR lv_delivery_date > <lfs_preference>-end_date.
MESSAGE e023(zstp_msg).
cv_failed = abap_true.
ENDIF.
ENDLOOP.
ELSE.
MESSAGE e023(zstp_msg).
ENDIF.
ENDLOOP.
ELSE.
* If no entries are found for the data
MESSAGE e023(zstp_msg).
cv_failed = abap_true.
ENDIF.
ENDMETHOD. METHOD check_po.
*----------------------------------------------------------------------*
* Class : ZCL_STP_E025_STO_CHECK
* Method : CHECK_PO
* RICEFW ID/Defect : STP_E025
* Author : Glberto Cuevas
* Date : 7/06/2023
* SAP Transport Req.# : DS4K906378
* Release : D1
*----------------------------------------------------------------------*
* Description : Get data and determine if STO is valid
*----------------------------------------------------------------------*
CONSTANTS:
lc_sign TYPE char01 VALUE 'I',
lc_option TYPE char02 VALUE 'EQ',
lc_machine_id TYPE atnam VALUE 'MACHINE_ID',
lc_max_roll_width TYPE atnam VALUE 'MAX_ROLL_WIDTH',
lc_min_roll_width TYPE atnam VALUE 'MIN_ROLL_WIDTH',
lc_paper_grade TYPE atnam VALUE 'GRADE_CODE', "Change by GCUEVAS4
lc_form TYPE atnam VALUE 'FORM',
lc_roll TYPE atwrt VALUE 'R'.

DATA:
lt_input_plants TYPE RANGE OF werks_d,
lt_objky TYPE RANGE OF ibobjkey,
lt_stp TYPE RANGE OF kunnr,
lt_config TYPE ibco2_instance_tab2,
lt_chara TYPE STANDARD TABLE OF gty_characteristics,
lv_material TYPE matnr,
lt_purchase_order_item TYPE tab_mepoitem.

DATA(lv_machine_id) = get_internal_atnam( lc_machine_id ).


DATA(lv_max_roll_width) = get_internal_atnam( lc_max_roll_width ).
DATA(lv_min_roll_width) = get_internal_atnam( lc_min_roll_width ).
DATA(lv_paper_grade_desc) = get_internal_atnam( lc_paper_grade
)."Change by GCUEVAS4
DATA(lv_characterstics) = get_internal_atnam( lc_form ).

"Create range of item materials, plant anf objkey, used to extract


characteristics
LOOP AT it_purchaseorderitems ASSIGNING FIELD-SYMBOL(<lfs_items>).
DATA(ls_item) = <lfs_items>-item->get_data( ).
APPEND ls_item TO lt_purchase_order_item.

*" Get Plant


IF ls_item-werks IS NOT INITIAL.
APPEND INITIAL LINE TO lt_input_plants ASSIGNING FIELD-
SYMBOL(<lfs_plant>).
<lfs_plant>-sign = lc_sign.
<lfs_plant>-option = lc_option.
<lfs_plant>-low = ls_item-werks.
ENDIF.

*" Get Material Config details


CALL FUNCTION 'CUCB_GET_CONFIGURATION'
EXPORTING
instance = ls_item-cuobj
IMPORTING
configuration = lt_config
EXCEPTIONS
invalid_input = 1
invalid_instance = 2
instance_is_a_classification = 3
OTHERS = 4.
IF sy-subrc = 0.
DATA(lt_values) = VALUE #( lt_config[ instance = ls_item-cuobj ]-
values OPTIONAL ).
IF lt_values IS NOT INITIAL.
*" Append Characteristics data
APPEND INITIAL LINE TO lt_chara ASSIGNING FIELD-SYMBOL(<lfs_chara>).
<lfs_chara>-ebelp = ls_item-ebelp.
<lfs_chara>-machine = VALUE #( lt_values[ atinn =
lv_machine_id ]-atwrt OPTIONAL ).
<lfs_chara>-max_width = VALUE #( lt_values[ atinn =
lv_max_roll_width ]-atflv OPTIONAL ).
<lfs_chara>-min_width = VALUE #( lt_values[ atinn =
lv_min_roll_width ]-atflv OPTIONAL ).
<lfs_chara>-paper_grade = VALUE #( lt_values[ atinn =
lv_paper_grade_desc ]-atwrt OPTIONAL ).
<lfs_chara>-form_char = VALUE #( lt_values[ atinn =
lv_characterstics ]-atwrt OPTIONAL ).
ENDIF.
ENDIF.
ENDLOOP.

* Extract STP plant


SELECT plant, "WERKS
plantcustomer "KUNNR
FROM i_plant
INTO TABLE @DATA(lt_plants)
WHERE plant IN @lt_input_plants.
IF sy-subrc = 0.
lt_stp = VALUE #( FOR ls_plant IN lt_plants
( sign = lc_sign
option = lc_option
low = ls_plant-plantcustomer ) ).
ENDIF.
* ++BOC | ATHAKUR4 | DS4K913767 | CR001
* Extract embargo values
SELECT shiptoparty,
papergrade,
mill,
machineid,
effectivedt
FROM zz1_stp_e025_embargo
INTO TABLE @DATA(lt_embargo)
WHERE shiptoparty IN @lt_stp
AND mill = @is_purchaseorder-reswk
AND effectivedt GE @sy-datum.
* ++EOC | ATHAKUR4 | DS4K913767 | CR001
IF sy-subrc = 0.
CLEAR ls_item.
LOOP AT lt_purchase_order_item ASSIGNING FIELD-SYMBOL(<lfs_item>).

DATA(lv_plant_customer) = VALUE #( lt_plants[ plant = <lfs_item>-


werks ]-plantcustomer OPTIONAL ).
DATA(lv_machine) = VALUE #( lt_chara[ ebelp = <lfs_item>-
ebelp ]-machine OPTIONAL ).
DATA(lv_paper_grade) = VALUE #( lt_chara[ ebelp = <lfs_item>-
ebelp ]-paper_grade OPTIONAL ). "Change by GCUEVAS4
DATA(lv_form) = VALUE #( lt_chara[ ebelp = <lfs_item>-
ebelp ]-form_char OPTIONAL ).

IF lv_form NE lc_roll.
CONTINUE.
ENDIF.
* Add error message if the entry exists in embargo
IF line_exists( lt_embargo[ shiptoparty = lv_plant_customer
* material = ls_item-matnr
"CHANGES MADE BY ATHAKUR4
mill = is_purchaseorder-reswk
machineid = lv_machine
papergrade = lv_paper_grade ] ) .
"Change by GCUEVAS4
cv_failed = abap_true.

ENDIF.
ENDLOOP.

IF cv_failed = abap_true.
MESSAGE e022(zstp_msg).
ENDIF.
ENDIF.

* Extract preference values


SELECT shiptoparty,
papergrade,
mill,
machine_id,
min_roll_width,
max_roll_width,
transportationmode,
start_date,
end_date
FROM zz1_stp_e025_preference
INTO TABLE @DATA(lt_preference)
WHERE shiptoparty IN @lt_stp
AND mill = @is_purchaseorder-reswk.
IF sy-subrc = 0.
CLEAR ls_item.
LOOP AT it_purchaseorderitems ASSIGNING <lfs_items>.
IF sy-tabix = 1.
"Get delivery date from the first line
DATA(lt_schedules) = <lfs_items>-item->get_schedules( ).
DATA(lo_delivery) = VALUE #( lt_schedules[ 1 ]-schedule OPTIONAL ).
DATA(lv_delivery_date) = lo_delivery->get_data( )-eindt.
ENDIF.
ls_item = <lfs_items>-item->get_data( ).
lv_plant_customer = VALUE #( lt_plants[ plant = ls_item-werks ]-
plantcustomer OPTIONAL ).

lv_form = VALUE #( lt_chara[ ebelp = ls_item-ebelp ]-form_char


OPTIONAL ).
IF lv_form NE lc_roll.
CONTINUE.
ENDIF.

DATA(ls_chara) = VALUE #( lt_chara[ ebelp = ls_item-ebelp ] OPTIONAL


).
lv_machine = ls_chara-machine.
DATA(lv_width_min) = ls_chara-min_width.
DATA(lv_width_max) = ls_chara-max_width.
lv_paper_grade = ls_chara-paper_grade.
"Change by GCUEVAS4

* Add message if the combination of fields doesn't exist in the preference


table
cv_failed = abap_true.
IF line_exists( lt_preference[ shiptoparty = lv_plant_customer
papergrade = lv_paper_grade
"Change by GCUEVAS4
mill = is_purchaseorder-reswk
machine_id = lv_machine
transportationmode = ls_item-
zz1_stp_e026_transpor_pdi ] ). "Change by GCUEVAS4
* min_roll_width = lv_width_min
"(+)MAC-68710 | ATHAKUR4 | 01/04/2024 | DS4K920017
* max_roll_width = lv_width_max ] ).
"(+)MAC-68710| ATHAKUR4 | 01/04/2024 | DS4K920017
cv_failed = abap_false.

ENDIF.
IF cv_failed = abap_false.
* If the entry exists, check if the widths or the delivery date are outside
of the ranges in table
LOOP AT lt_preference ASSIGNING FIELD-SYMBOL(<lfs_preference>)
WHERE shiptoparty = lv_plant_customer
AND papergrade = lv_paper_grade
"Change by GCUEVAS4
AND mill = is_purchaseorder-reswk
AND machine_id = lv_machine
AND transportationmode = ls_item-zz1_stp_e026_transpor_pdi.
"Change by GCUEVAS4

* If the roll width os not within range or date


IF <lfs_preference>-min_roll_width > lv_width_min
OR <lfs_preference>-max_roll_width < lv_width_max
OR lv_delivery_date < <lfs_preference>-start_date
OR lv_delivery_date > <lfs_preference>-end_date.
MESSAGE e023(zstp_msg).
cv_failed = abap_true.
ENDIF.
ENDLOOP.
ELSE.
MESSAGE e023(zstp_msg).
ENDIF.
ENDLOOP.
ELSE.
* If no entries are found for the data
MESSAGE e023(zstp_msg).
cv_failed = abap_true.
ENDIF.
ENDMETHOD. METHOD check_process.
*----------------------------------------------------------------------*
* Class : ZCL_STP_E025_STO_CHECK
* Method : CHECK_PROCESS
* RICEFW ID/Defect : STP_E025
* Author : Glberto Cuevas
* Date : 7/06/2023
* SAP Transport Req.# : DS4K906378
* Release : D1
*----------------------------------------------------------------------*
* Description : Check if the STO should be processed
*----------------------------------------------------------------------*
"Constant Declaration
CONSTANTS:
lc_dialog_user TYPE xuustyp VALUE 'A',
lc_stp TYPE char4 VALUE 'STP',
lc_allowed_docty TYPE cbo_text20 VALUE 'ZSTP_E025_DOC_TYPES',
lc_allowed_tcode TYPE cbo_text20 VALUE 'ZSTP_E025_TCODES'.
DATA:
lt_allowed_doctypes TYPE RANGE OF esart,
lt_allowed_tcodes TYPE RANGE OF sy-tcode.
"Get constants, for allowed document types
DATA(lo_cbo_data) = NEW zcl_util_cbo_data( iv_name = lc_stp ).
DATA(lt_cbo_constants) = VALUE ztt_cbo_const_names( ( name =
lc_allowed_docty )
( name =
lc_allowed_tcode ) ).
lo_cbo_data->fetch_constants( EXPORTING it_name = lt_cbo_constants
IMPORTING et_constant =
DATA(lt_constants) ).
"Build ranges from the values in constant table
lt_allowed_doctypes = VALUE #( FOR ls_doctype IN lt_constants
WHERE ( name = lc_allowed_docty )
( sign = ls_doctype-sign
option = ls_doctype-opti
low = ls_doctype-low
high = ls_doctype-high ) ).

lt_allowed_tcodes = VALUE #( FOR ls_doctype IN lt_constants


WHERE ( name = lc_allowed_tcode )
( sign = ls_doctype-sign
option = ls_doctype-opti
low = ls_doctype-low
high = ls_doctype-high ) ).
"By default, stop process
r_process = abap_false.

"Get user types for dialog


SELECT SINGLE bname
FROM p_usr02
INTO @DATA(lv_user)
WHERE bname = @sy-uname
AND ustyp = @lc_dialog_user.
IF sy-subrc <> 0.
r_process = abap_false.
ENDIF.

"Check if the ordertype is allowed and the processing user is dialog type
IF iv_doctype IN lt_allowed_doctypes
AND sy-tcode IN lt_allowed_tcodes
AND lv_user = sy-uname.
r_process = abap_true.
ENDIF.

ENDMETHOD.

METHOD get_internal_atnam.
*----------------------------------------------------------------------*
* Class : ZCL_STP_E025_STO_CHECK
* Method : GET_INTERNAL_ATNAM
* RICEFW ID/Defect : STP_E025
* Author : Glberto Cuevas
* Date : 7/06/2023
* SAP Transport Req.# : DS4K906378
* Release : D1
*----------------------------------------------------------------------*
* Description : Get internal number for characteristic name
*----------------------------------------------------------------------*
CALL FUNCTION 'CONVERSION_EXIT_ATINN_INPUT'
EXPORTING
input = iv_chara_name
IMPORTING
output = r_atinn.
ENDMETHOD.

You might also like