Nothing Special   »   [go: up one dir, main page]

Dcsea Us Auto Allocation FRM 20220928

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 48

*&---------------------------------------------------------------------*

*& Include /DCSEA/US_AUTO_ALLOCATION_FRM


*&---------------------------------------------------------------------*

FORM checkauthority .

CALL FUNCTION '/DCSEA/Z_AIS_AUTHORITY_CHECK'


EXPORTING
aut_obj = co_aut_obj
field1_object = co_field1_object
field1_value = s_werks-low
field2_object = co_field2_object
field2_value = co_field2_value
EXCEPTIONS
no_authority = 1
OTHERS = 2.

IF sy-subrc <> 0.
MESSAGE e008(/dcsea/us_msg) WITH s_werks-low.
ENDIF.

ENDFORM.

FORM validate_selscr_data.

IF s_extwg IS NOT INITIAL AND s_my IS INITIAL.


MESSAGE 'Model Year is Mandatory for Model'(009) TYPE 'E'.
ENDIF.

ENDFORM.

FORM conv_ext_mat_grp_to_mat.

IF s_extwg IS NOT INITIAL.


SELECT * FROM mara INTO TABLE @DATA(it_mt) WHERE extwg IN @s_extwg.
IF it_mt IS NOT INITIAL.
DATA(s_mt) = VALUE fiwtin_t_selopt( FOR wa_mt IN it_mt ( sign = 'I' option =
'EQ' low = wa_mt-matnr ) ).
APPEND LINES OF s_mt TO s_matnr.
ENDIF.
ENDIF.

IF p_ars IS NOT INITIAL.

SELECT * FROM cvlc04 INTO TABLE @DATA(it_cvlc04) WHERE cntrl = 'USS1' AND
aktion = 'ZADL'.
IF it_cvlc04 IS NOT INITIAL.
DATA(s_ss) = VALUE fiwtin_t_selopt( FOR wa_cvlc04 IN it_cvlc04 ( sign = 'I'
option = 'EQ' low = wa_cvlc04-statu_new ) ).
APPEND LINES OF s_ss TO s_sdsta.
ENDIF.

ENDIF.

ENDFORM.
FORM summary_rep_fetch_data_dis.

FIELD-SYMBOLS : <fs1>.

DATA(lv_where) = cl_shdb_seltab=>combine_seltabs(
it_named_seltabs = VALUE #(
( name = 'WERKS' dref = REF #( s_werks[] ) )
( name = 'SDSTA' dref = REF #( s_sdsta[] ) )
( name = 'MMSTA' dref = REF #( s_mmsta[] ) )
( name = 'VHUSG' dref = REF #( s_vhusg[] ) )
( name = 'MATNR' dref = REF #( s_matnr[] ) )
( name = 'ZZ_ADDL_FIELD5' dref = REF #( s_my[] ) )
( name = 'ZZ_ORDER_CYCLE' dref = REF #( s_oc[] ) )
( name = 'AVAIL' dref = REF #( s_avail[] ) )
( name = 'KUNNR' dref = REF #( s_kunnr[] ) )
( name = 'ZZ_ALLOC_TYPE' dref = REF #( s_at[] ) )
( name = 'ZZ_VPCSTATUS' dref = REF #( s_vps[] ) )
( name = 'ZZ_PORT_OF_DEST' dref = REF #( s_pofd[] ) )
( name = 'ZZ_REGION' dref = REF #( s_region[] ) )
( name = 'ZZ_MARKET' dref = REF #( s_market[] ) )
) ).

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""
"""""""""""""""""""""""""""""""" First ALV
""""""""""""""""""""""""""""""""""""""""""

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""
"Regional Summary
APPEND VALUE #( fieldname = 'MODEL' scrtext_l = 'Model' scrtext_m =
'Model' scrtext_s = 'Model' col_opt = 'X') TO it_fcat1.
APPEND VALUE #( fieldname = 'MODEL_YEAR' scrtext_l = 'Model Year' scrtext_m =
'Model Year' scrtext_s = 'Model Year' col_opt = 'X' ) TO it_fcat1.
SELECT * FROM /dcsea/us_regiot INTO TABLE @DATA(it_regio) WHERE spras = @sy-langu
AND werks IN @s_werks.
IF it_regio IS NOT INITIAL .
LOOP AT it_regio INTO DATA(wa_regio).
APPEND VALUE #( fieldname = wa_regio-region scrtext_l = wa_regio-vtext
scrtext_m = wa_regio-vtext scrtext_s = wa_regio-vtext col_opt = 'X' ) TO
it_fcat1.
ENDLOOP.
ENDIF.

"Create dynamic internal table and assign to FS


CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fcat1
IMPORTING
ep_table = DATA(it_newtable1).

* Create dynamic Internal table and assign to FS


ASSIGN it_newtable1->* TO <t_dyntable1>.

* Create dynamic work area and assign to FS


CREATE DATA it_newline1 LIKE LINE OF <t_dyntable1>.
ASSIGN it_newline1->* TO <w_dyntable1>.
* select matnr as matnr from @it_vlcvehicle as ALV1 into table @data(it_alv1).

NEW /dcsea/us_auto_allocation( )->get_regional_summary(


EXPORTING
iv_filter = lv_where
IMPORTING
et_regional_summary = gt_regional_summary
).

DATA(it_regional_summary) = gt_regional_summary.
DELETE it_regional_summary WHERE indicator <> '120'.
DATA(it_rs_trim) = it_regional_summary.
SORT it_rs_trim BY modelname modelyear.
DELETE ADJACENT DUPLICATES FROM it_rs_trim COMPARING modelname modelyear.

LOOP AT it_rs_trim INTO DATA(wa_rs_trim).

ASSIGN COMPONENT 'MODEL' OF STRUCTURE <w_dyntable1> TO <fs1>.


<fs1> = wa_rs_trim-modelname.
UNASSIGN <fs1>.

ASSIGN COMPONENT 'MODEL_YEAR' OF STRUCTURE <w_dyntable1> TO <fs1>.


<fs1> = wa_rs_trim-modelyear.
UNASSIGN <fs1>.

LOOP AT it_regional_summary INTO DATA(wa_regional_summary) WHERE modelname =


wa_rs_trim-modelname AND modelyear = wa_rs_trim-modelyear.
IF line_exists( it_fcat1[ fieldname = wa_regional_summary-region ] ).
ASSIGN COMPONENT wa_regional_summary-region OF STRUCTURE <w_dyntable1> TO
<fs1>.
<fs1> = wa_regional_summary-count.
UNASSIGN <fs1>.
ENDIF.
ENDLOOP.

APPEND <w_dyntable1> TO <t_dyntable1>.


CLEAR: <w_dyntable1>.

ENDLOOP.

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""
"""""""""""""""""""""""""""""""" Second ALV
"""""""""""""""""""""""""""""""""""""""""

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""
"Market Summary
APPEND VALUE #( fieldname = 'MODEL' scrtext_l = 'Model' scrtext_m =
'Model' scrtext_s = 'Model' col_opt = 'X' ) TO it_fcat2.
APPEND VALUE #( fieldname = 'MODEL_YEAR' scrtext_l = 'Model Year' scrtext_m =
'Model Year' scrtext_s = 'Model Year' col_opt = 'X' ) TO it_fcat2.
APPEND VALUE #( fieldname = 'REGION' scrtext_l = 'Region Code' scrtext_m =
'Region Code' scrtext_s = 'Region Code' col_opt = 'X' ) TO it_fcat2.

SELECT * FROM /dcsea/us_mrktt INTO TABLE @DATA(it_mrktt) WHERE spras = @sy-langu


AND werks IN @s_werks.
IF it_mrktt IS NOT INITIAL .
SORT it_mrktt BY market.
DELETE ADJACENT DUPLICATES FROM it_mrktt COMPARING market.
LOOP AT it_mrktt INTO DATA(wa_mrktt).
* append value #( fieldname = wa_mrktt-market scrtext_l = wa_mrktt-vtext
scrtext_m = wa_mrktt-vtext scrtext_s = wa_mrktt-vtext col_opt = 'X' ) to
it_fcat2.
APPEND VALUE #( fieldname = wa_mrktt-market scrtext_l = wa_mrktt-market
scrtext_m = wa_mrktt-market scrtext_s = wa_mrktt-market col_opt = 'X' ) TO
it_fcat2.
ENDLOOP.
ENDIF.

"Create dynamic internal table and assign to FS


CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fcat2
IMPORTING
ep_table = DATA(it_newtable2).

* Create dynamic Internal table and assign to FS


ASSIGN it_newtable2->* TO <t_dyntable2>.

* Create dynamic work area and assign to FS


CREATE DATA it_newline2 LIKE LINE OF <t_dyntable2>.
ASSIGN it_newline2->* TO <w_dyntable2>.

NEW /dcsea/us_auto_allocation( )->get_market_summary(


EXPORTING
iv_filter = lv_where
IMPORTING
et_market_summary = gt_market_summary
).

DATA(it_market_summary) = gt_market_summary.
DELETE it_market_summary WHERE indicator <> '240'.
DELETE it_market_summary WHERE region EQ ''.
DELETE it_market_summary WHERE market EQ ''.
DELETE it_market_summary WHERE modelyear EQ '0000'.
DELETE it_market_summary WHERE modelyear EQ ''.

DATA(it_ms_trim) = it_market_summary.
SORT it_ms_trim BY modelname modelyear region.
DELETE ADJACENT DUPLICATES FROM it_ms_trim COMPARING modelname modelyear region.

LOOP AT it_ms_trim INTO DATA(wa_ms_trim).

ASSIGN COMPONENT 'MODEL' OF STRUCTURE <w_dyntable2> TO <fs1>.


<fs1> = wa_ms_trim-modelname.
UNASSIGN <fs1>.

ASSIGN COMPONENT 'MODEL_YEAR' OF STRUCTURE <w_dyntable2> TO <fs1>.


<fs1> = wa_ms_trim-modelyear.
UNASSIGN <fs1>.

ASSIGN COMPONENT 'REGION' OF STRUCTURE <w_dyntable2> TO <fs1>.


<fs1> = wa_ms_trim-region.
UNASSIGN <fs1>.

LOOP AT it_market_summary INTO DATA(wa_market_summary) WHERE modelname =


wa_ms_trim-modelname AND
modelyear =
wa_ms_trim-modelyear AND
region =
wa_ms_trim-region.
IF line_exists( it_fcat2[ fieldname = wa_market_summary-market ] ).
ASSIGN COMPONENT wa_market_summary-market OF STRUCTURE <w_dyntable2> TO
<fs1>.
<fs1> = wa_market_summary-count.
UNASSIGN <fs1>.
ENDIF.
ENDLOOP.

APPEND <w_dyntable2> TO <t_dyntable2>.


CLEAR: <w_dyntable2>.

ENDLOOP.

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""
"""""""""""""""""""""""""""""""" Third ALV
""""""""""""""""""""""""""""""""""""""""""

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""
"Allocation Type Summary
APPEND VALUE #( fieldname = 'MODEL' scrtext_l = 'Model' scrtext_m =
'Model' scrtext_s = 'Model' col_opt = 'X' ) TO it_fcat3.
APPEND VALUE #( fieldname = 'MODEL_YEAR' scrtext_l = 'Model Year' scrtext_m =
'Model Year' scrtext_s = 'Model Year' col_opt = 'X' ) TO it_fcat3.

SELECT * FROM /dcsea/zais_alty INTO TABLE @DATA(it_alty) WHERE langu = @sy-langu


AND werks IN @s_werks.
IF it_alty IS NOT INITIAL .
SORT it_alty BY alloc_no.
DELETE ADJACENT DUPLICATES FROM it_alty COMPARING alloc_no.
LOOP AT it_alty INTO DATA(wa_alty).
APPEND VALUE #( fieldname = wa_alty-alloc_no scrtext_l = wa_alty-alloc_type
scrtext_m = wa_alty-alloc_type scrtext_s = wa_alty-alloc_type col_opt = 'X' ) TO
it_fcat3.
ENDLOOP.
ENDIF.

"Create dynamic internal table and assign to FS


CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fcat3
IMPORTING
ep_table = DATA(it_newtable3).

* Create dynamic Internal table and assign to FS


ASSIGN it_newtable3->* TO <t_dyntable3>.

* Create dynamic work area and assign to FS


CREATE DATA it_newline3 LIKE LINE OF <t_dyntable3>.
ASSIGN it_newline3->* TO <w_dyntable3>.

NEW /dcsea/us_auto_allocation( )->get_allocation_type(


EXPORTING
iv_filter = lv_where
IMPORTING
et_allocation_type = gt_allocation_type
).

DATA(it_allocation_type) = gt_allocation_type.
DELETE it_allocation_type WHERE indicator <> '120'.
DELETE it_allocation_type WHERE alloc_type EQ ''.
DELETE it_allocation_type WHERE modelyear EQ '0000'.
DELETE it_allocation_type WHERE modelyear EQ ''.

DATA(it_at_trim) = it_allocation_type.
SORT it_at_trim BY modelname modelyear.
DELETE ADJACENT DUPLICATES FROM it_at_trim COMPARING modelname modelyear.

LOOP AT it_at_trim INTO DATA(wa_at_trim).

ASSIGN COMPONENT 'MODEL' OF STRUCTURE <w_dyntable3> TO <fs1>.


<fs1> = wa_at_trim-modelname.
UNASSIGN <fs1>.

ASSIGN COMPONENT 'MODEL_YEAR' OF STRUCTURE <w_dyntable3> TO <fs1>.


<fs1> = wa_at_trim-modelyear.
UNASSIGN <fs1>.

LOOP AT it_allocation_type INTO DATA(wa_allocation_type) WHERE modelname =


wa_at_trim-modelname AND modelyear = wa_at_trim-modelyear.
IF line_exists( it_fcat3[ fieldname = wa_allocation_type-alloc_type ] ).
ASSIGN COMPONENT wa_allocation_type-alloc_type OF STRUCTURE <w_dyntable3>
TO <fs1>.
<fs1> = wa_allocation_type-count.
UNASSIGN <fs1>.
ENDIF.
ENDLOOP.

APPEND <w_dyntable3> TO <t_dyntable3>.


CLEAR: <w_dyntable3>.

ENDLOOP.

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""
"""""""""""""""""""""""""""""""" Fourth ALV
""""""""""""""""""""""""""""""""""""""""""

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""
"Market Summary
APPEND VALUE #( fieldname = 'MODEL' scrtext_l = 'Model' scrtext_m =
'Model' scrtext_s = 'Model' col_opt = 'X' ) TO it_fcat4.
APPEND VALUE #( fieldname = 'MODEL_YEAR' scrtext_l = 'Model Year' scrtext_m =
'Model Year' scrtext_s = 'Model Year' col_opt = 'X' ) TO it_fcat4.
SELECT * FROM /dcsea/us_vpcst INTO TABLE @DATA(it_vpcst) WHERE spras = @sy-langu
AND werks IN @s_werks.
IF it_vpcst IS NOT INITIAL .
SORT it_vpcst BY vpcs.
DELETE ADJACENT DUPLICATES FROM it_vpcst COMPARING vpcs.
LOOP AT it_vpcst INTO DATA(wa_vpcst).
APPEND VALUE #( fieldname = wa_vpcst-vpcs scrtext_l = wa_vpcst-vtext
scrtext_m = wa_vpcst-vtext scrtext_s = wa_vpcst-vtext col_opt = 'X' ) TO
it_fcat4.
ENDLOOP.
ENDIF.

"Create dynamic internal table and assign to FS


CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fcat4
IMPORTING
ep_table = DATA(it_newtable4).

* Create dynamic Internal table and assign to FS


ASSIGN it_newtable4->* TO <t_dyntable4>.

* Create dynamic work area and assign to FS


CREATE DATA it_newline4 LIKE LINE OF <t_dyntable4>.
ASSIGN it_newline4->* TO <w_dyntable4>.

NEW /dcsea/us_auto_allocation( )->get_port_of_destination(


EXPORTING
iv_filter = lv_where
IMPORTING
et_port_of_destination = gt_port_of_destination
).

DATA(it_port_of_destination) = gt_port_of_destination.
DELETE it_port_of_destination WHERE indicator <> '120'.
DELETE it_port_of_destination WHERE vpcs EQ ''.
DELETE it_port_of_destination WHERE modelyear EQ '0000'.
DELETE it_port_of_destination WHERE modelyear EQ ''.

DATA(it_pod_trim) = it_port_of_destination.
SORT it_pod_trim BY modelname modelyear.
DELETE ADJACENT DUPLICATES FROM it_pod_trim COMPARING modelname modelyear.

LOOP AT it_pod_trim INTO DATA(wa_pod_trim).

ASSIGN COMPONENT 'MODEL' OF STRUCTURE <w_dyntable4> TO <fs1>.


<fs1> = wa_pod_trim-modelname.
UNASSIGN <fs1>.

ASSIGN COMPONENT 'MODEL_YEAR' OF STRUCTURE <w_dyntable4> TO <fs1>.


<fs1> = wa_pod_trim-modelyear.
UNASSIGN <fs1>.

LOOP AT it_port_of_destination INTO DATA(wa_port_of_destination)


WHERE modelname = wa_pod_trim-modelname AND modelyear = wa_pod_trim-
modelyear.
IF line_exists( it_fcat4[ fieldname = wa_port_of_destination-vpcs ] ).
ASSIGN COMPONENT wa_port_of_destination-vpcs OF STRUCTURE <w_dyntable4> TO
<fs1>.
<fs1> = wa_port_of_destination-count.
UNASSIGN <fs1>.
ENDIF.
ENDLOOP.

APPEND <w_dyntable4> TO <t_dyntable4>.


CLEAR: <w_dyntable4>.

ENDLOOP.

CALL SCREEN 9001.

ENDFORM.

MODULE status_9000 OUTPUT.


DATA: lt_fcode1 TYPE STANDARD TABLE OF sy-ucomm.
CONSTANTS:co_prog1 TYPE progname VALUE '/DCSEA/US_AUTOMATED_ALLOCATION'.
IF p_d IS NOT INITIAL.
REFRESH:lt_fcode1[].
APPEND '&AUPPM' TO lt_fcode1.
CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
EXPORTING
p_status = 'ALV1'
p_program = co_prog1
TABLES
p_exclude = lt_fcode1.
SET PF-STATUS 'ALV1' EXCLUDING lt_fcode1.
ELSE.
SET PF-STATUS 'ALV1'.
ENDIF.
SET TITLEBAR 'ZDETAILED'.
ENDMODULE.

MODULE user_command_9000 INPUT.


CASE sy-ucomm.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'ESC' OR 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.

FORM detailed_rep_fetch_data_dis.

IF s_extwg IS NOT INITIAL.


SELECT matnr,extwg FROM mara INTO TABLE @DATA(lt_mara) WHERE extwg IN @s_extwg
ORDER BY PRIMARY KEY.
IF lt_mara IS NOT INITIAL.
DATA(s_mt) = VALUE fiwtin_t_selopt( FOR lw_mara IN lt_mara ( sign = 'I'
option = 'EQ' low = lw_mara-matnr ) ).
APPEND LINES OF s_mt TO s_matnr.
ENDIF.
ENDIF.
SELECT * FROM vlcvehicle INTO TABLE it_vlcvehicle WHERE
werks IN s_werks AND
sdsta IN s_sdsta AND
mmsta IN s_mmsta AND
vhusg IN s_vhusg AND
matnr IN s_matnr AND
zz_addl_field5 IN s_my AND
zz_order_cycle IN s_oc AND
avail IN s_avail AND
kunnr IN s_kunnr AND
zz_alloc_type IN s_at AND
zz_vpcstatus IN s_vps AND
zz_port_of_dest IN s_pofd AND
zz_region IN s_region AND
zz_market IN s_market.

IF it_vlcvehicle IS NOT INITIAL.


IF lt_mara IS INITIAL.
SELECT matnr,extwg FROM mara INTO TABLE @DATA(it_mara) FOR ALL ENTRIES IN
@it_vlcvehicle
WHERE matnr = @it_vlcvehicle-matnr ORDER BY PRIMARY KEY.
ELSE.
it_mara[] = lt_mara[].
ENDIF.
it_final = VALUE #( FOR wa_vlcvehicle IN it_vlcvehicle
(
matnr = VALUE #( it_mara[ matnr =
wa_vlcvehicle-matnr ]-extwg OPTIONAL )
chrysler_year = wa_vlcvehicle-zz_addl_field5
sdsta = wa_vlcvehicle-sdsta
mmsta = wa_vlcvehicle-mmsta
commnos = wa_vlcvehicle-zz_commnos
avail = wa_vlcvehicle-avail
kunnr = wa_vlcvehicle-kunnr
alloc_type = wa_vlcvehicle-zz_alloc_type
vpcstatus = wa_vlcvehicle-zz_vpcstatus
region = wa_vlcvehicle-zz_region
market = wa_vlcvehicle-zz_market
vhusg = wa_vlcvehicle-vhusg
order_cycle = wa_vlcvehicle-zz_order_cycle

)
).

CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'


EXPORTING
i_buffer_active = space
i_structure_name = '/DCSEA/US_AUTOMATED_ALLOCATION'
i_bypassing_buffer = 'X'
CHANGING
ct_fieldcat = it_fcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.

LOOP AT it_fcat ASSIGNING FIELD-SYMBOL(<fs>).


<fs>-col_opt = 'X'.
ENDLOOP.

grid = NEW cl_gui_alv_grid( i_parent = NEW


cl_gui_custom_container( container_name = 'CC' ) ).

grid->set_table_for_first_display(
EXPORTING
is_layout = VALUE #( zebra = abap_true cwidth_opt =
abap_true )
CHANGING
it_fieldcatalog = it_fcat
it_outtab = it_final
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4
).
IF sy-subrc EQ 0.
CALL SCREEN 9000.
ENDIF.

ELSE.
MESSAGE 'No Data Found of given input'(008) TYPE 'E'.
ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_9001 OUTPUT.

SET PF-STATUS 'ALV1'.


SET TITLEBAR 'ZSUMMARY'.

tab-activetab = g_tab_appl-pressed_tab.

IF tab-activetab = 'TAB1'.
g_tab_appl-subscreen = '9002'.
ELSEIF tab-activetab = 'TAB2'.
g_tab_appl-subscreen = '9003'.
ELSEIF tab-activetab = 'TAB3'.
g_tab_appl-subscreen = '9004'.
ELSEIF tab-activetab = 'TAB4'.
g_tab_appl-subscreen = '9005'.
ENDIF.

ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_9001 INPUT.

CASE sy-ucomm.
WHEN 'TAB1'.
tab-activetab = 'TAB1'.
g_tab_appl-pressed_tab = 'TAB1'.
WHEN 'TAB2'.
tab-activetab = 'TAB2'.
g_tab_appl-pressed_tab = 'TAB2'.
WHEN 'TAB3'.
tab-activetab = 'TAB3'.
g_tab_appl-pressed_tab = 'TAB3'.
WHEN 'TAB4'.
tab-activetab = 'TAB4'.
g_tab_appl-pressed_tab = 'TAB4'.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'ESC' OR 'EXIT'.
LEAVE PROGRAM.
WHEN '&AUPPM'.

DATA : it_rs_index TYPE lvc_t_row,


it_ms_index TYPE lvc_t_row,
it_at_index TYPE lvc_t_row,
it_pd_index TYPE lvc_t_row.

IF sy-ucomm = '&AUPPM'.
IF p_ars IS INITIAL.
MESSAGE 'Please check ''Allocation Relevant Status'' before
proceeding'(019) TYPE 'E'.
LEAVE TO SCREEN 0.
EXIT.
ENDIF.
ENDIF.

IF grid2 IS BOUND.
grid2->get_selected_rows( IMPORTING et_index_rows = it_rs_index ).
LOOP AT it_rs_index INTO DATA(wa_rs_index).
READ TABLE <t_dyntable1> ASSIGNING FIELD-SYMBOL(<wa_dyntable1>) INDEX
wa_rs_index-index.
IF sy-subrc EQ 0.
LOOP AT it_fcat1 INTO DATA(wa_fcat1).

IF wa_fcat1-fieldname EQ 'MODEL'.
ASSIGN COMPONENT wa_fcat1-fieldname OF STRUCTURE <wa_dyntable1> TO
FIELD-SYMBOL(<fs_m>).
IF <fs_m> IS ASSIGNED.
/dcsea/us_allocation_inf_popup-model = <fs_m> .
ENDIF.
ENDIF.

IF wa_fcat1-fieldname EQ 'MODEL_YEAR'.
ASSIGN COMPONENT wa_fcat1-fieldname OF STRUCTURE <wa_dyntable1> TO
FIELD-SYMBOL(<fs_my>).
IF <fs_my> IS ASSIGNED.
/dcsea/us_allocation_inf_popup-model_year = <fs_my> .
ENDIF.
ENDIF.
IF wa_fcat1-fieldname NE 'MODEL' AND wa_fcat1-fieldname NE
'MODEL_YEAR'.
ASSIGN COMPONENT wa_fcat1-fieldname OF STRUCTURE <wa_dyntable1> TO
FIELD-SYMBOL(<fs_vc>).
IF <fs_vc> IS ASSIGNED.
gv_vc = gv_vc + <fs_vc> .
ENDIF.
ENDIF.

ENDLOOP.

* /dcsea/us_allocation_inf_popup-no_of_vehicles = gv_vc.
* condense : /dcsea/us_allocation_inf_popup-no_of_vehicles.
*Begin of change rammane
/dcsea/us_allocation_inf_popup-vehusg = '01'.
/dcsea/us_allocation_inf_popup-reason_code = '01'.
*End of change rammane

CALL SCREEN 9006 STARTING AT 30 05


ENDING AT 150 18.
ENDIF.
ENDLOOP.

ENDIF.

IF grid3 IS BOUND.
grid3->get_selected_rows( IMPORTING et_index_rows = it_ms_index ).
LOOP AT it_ms_index INTO DATA(wa_ms_index).
READ TABLE <t_dyntable2> ASSIGNING FIELD-SYMBOL(<wa_dyntable2>) INDEX
wa_ms_index-index.
IF sy-subrc EQ 0.

CALL SCREEN 9006 STARTING AT 30 05


ENDING AT 150 18.
ENDIF.
ENDLOOP.
ENDIF.

IF grid4 IS BOUND.
grid4->get_selected_rows( IMPORTING et_index_rows = it_at_index ).
LOOP AT it_at_index INTO DATA(wa_at_index).
READ TABLE <t_dyntable3> ASSIGNING FIELD-SYMBOL(<wa_dyntable3>) INDEX
wa_at_index-index.
IF sy-subrc EQ 0.

CALL SCREEN 9006 STARTING AT 30 05


ENDING AT 150 18.
ENDIF.
ENDLOOP.

ENDIF.

IF grid5 IS BOUND.
grid5->get_selected_rows( IMPORTING et_index_rows = it_pd_index ).
LOOP AT it_pd_index INTO DATA(wa_pd_index).
READ TABLE <t_dyntable4> ASSIGNING FIELD-SYMBOL(<wa_dyntable4>) INDEX
wa_pd_index-index.
IF sy-subrc EQ 0.
CALL SCREEN 9006 STARTING AT 30 05
ENDING AT 150 18.
ENDIF.
ENDLOOP.
ENDIF.

ENDCASE.

ENDMODULE.

"Regional Summary
MODULE status_9002 OUTPUT.

DATA : gs_stable_vh TYPE lvc_s_stbl.

IF grid2 IS NOT BOUND.


grid2 = NEW cl_gui_alv_grid( i_parent = NEW
cl_gui_custom_container( container_name = 'C2' ) ).

grid2->set_table_for_first_display(
EXPORTING
is_layout = VALUE #( zebra = abap_true cwidth_opt =
abap_true sel_mode = 'A' )
CHANGING
it_fieldcatalog = it_fcat1
it_outtab = <t_dyntable1>
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4
).
ELSE.
CALL METHOD grid2->refresh_table_display.
ENDIF.

ENDMODULE.

"Market Summary
MODULE status_9003 OUTPUT.

IF grid3 IS NOT BOUND.


grid3 = NEW cl_gui_alv_grid( i_parent = NEW
cl_gui_custom_container( container_name = 'C3' ) ).
grid3->set_table_for_first_display(
EXPORTING
is_layout = VALUE #( zebra = abap_true cwidth_opt =
abap_true sel_mode = 'A' )
CHANGING
it_fieldcatalog = it_fcat2
it_outtab = <t_dyntable2>
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4
).
ELSE.
CALL METHOD grid3->refresh_table_display.
ENDIF.

ENDMODULE.

"Allocation Type Summary


MODULE status_9004 OUTPUT.

IF grid4 IS NOT BOUND.


grid4 = NEW cl_gui_alv_grid( i_parent = NEW
cl_gui_custom_container( container_name = 'C4' ) ).
grid4->set_table_for_first_display(
EXPORTING
is_layout = VALUE #( zebra = abap_true cwidth_opt =
abap_true sel_mode = 'A' )
CHANGING
it_fieldcatalog = it_fcat3
it_outtab = <t_dyntable3>
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4
).

ELSE.
CALL METHOD grid4->refresh_table_display.
ENDIF.

ENDMODULE.

"Port Of Destination Summary


MODULE status_9005 OUTPUT.

IF grid5 IS NOT BOUND.


grid5 = NEW cl_gui_alv_grid( i_parent = NEW
cl_gui_custom_container( container_name = 'C5' ) ).
grid5->set_table_for_first_display(
EXPORTING
is_layout = VALUE #( zebra = abap_true cwidth_opt =
abap_true sel_mode = 'A' )
CHANGING
it_fieldcatalog = it_fcat4
it_outtab = <t_dyntable4>
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4
).

ELSE.
CALL METHOD grid5->refresh_table_display.
ENDIF.

ENDMODULE.
MODULE status_9006 OUTPUT.
SET PF-STATUS 'POPUP'.
IF sy-ucomm = 'ABORT' OR sy-ucomm = 'ABOORT'.
CLEAR : /dcsea/us_allocation_inf_popup.
LEAVE TO SCREEN 0.
SET SCREEN 9005.
sy-ucomm = 'ABORT'.

ENDIF.

LOOP AT SCREEN .
IF screen-name = 'R1' OR
screen-name = 'R2' OR
screen-name = 'R3'.

screen-invisible = 1.
MODIFY SCREEN .
ENDIF.

ENDLOOP.
ENDMODULE.

MODULE user_command_9006 INPUT.

CASE sy-ucomm.
WHEN 'CANCEL'.
LEAVE TO SCREEN 0.
LEAVE PROGRAM.

WHEN 'GVC'.
REFRESH : lt_error_log.
IF /dcsea/us_allocation_inf_popup-kunnr IS INITIAL.
wa_error_log-msgid = 'E4'.
wa_error_log-msgty = 'E'.
wa_error_log-msgv1 = 'Enter From Home Office Dealer Code'.
wa_error_log-lineno = wa_error_log-lineno + 1.
APPEND wa_error_log TO lt_error_log.
ENDIF.

SELECT * FROM mara INTO TABLE @DATA(it_marac) WHERE extwg =


@/dcsea/us_allocation_inf_popup-model.
IF it_marac IS INITIAL.
wa_error_log-msgid = 'E4'.
wa_error_log-msgty = 'E'.
wa_error_log-msgv1 = 'Enter Correct Model No'.
wa_error_log-lineno = wa_error_log-lineno + 1.
APPEND wa_error_log TO lt_error_log.
ELSE.
LOOP AT it_marac INTO DATA(wa_mara).

CALL METHOD /dcsea/us_cl_vms_utilities=>get_model_year


EXPORTING
iv_matnr = wa_mara-matnr
IMPORTING
ev_myear = DATA(lv_my).

IF lv_my = /dcsea/us_allocation_inf_popup-model_year.
DATA(lv_matnrc) = wa_mara-matnr.
ENDIF.

ENDLOOP.
ENDIF.

REFRESH : it_marac.

DATA(it_matnrc) = VALUE fiwtin_t_selopt( ( sign = 'I' option = 'EQ' low =


lv_matnrc ) ).
DATA(it_myc) = VALUE fiwtin_t_selopt( ( sign = 'I' option = 'EQ' low
= /dcsea/us_allocation_inf_popup-model_year ) ).
DATA(it_kunnrc) = VALUE fiwtin_t_selopt( ( sign = 'I' option = 'EQ' low
= /dcsea/us_allocation_inf_popup-kunnr ) ).

DATA(lv_where_aic) = cl_shdb_seltab=>combine_seltabs(
it_named_seltabs = VALUE #(
( name = 'WERKS' dref = REF #( s_werks[] ) )
( name = 'SDSTA' dref = REF #( s_sdsta[] ) )
( name = 'MMSTA' dref = REF #( s_mmsta[] ) )
( name = 'VHUSG' dref = REF #( s_vhusg[] ) )
( name = 'MATNR' dref = REF #( it_matnrc[] ) )
( name = 'ZZ_ADDL_FIELD5' dref = REF #( it_myc[] ) )
( name = 'ZZ_ORDER_CYCLE' dref = REF #( s_oc[] ) )
( name = 'AVAIL' dref = REF #( s_avail[] ) )
( name = 'KUNNR' dref = REF #( it_kunnrc[] ) )
( name = 'ZZ_ALLOC_TYPE' dref = REF #( s_at[] ) )
( name = 'ZZ_VPCSTATUS' dref = REF #( s_vps[] ) )
( name = 'ZZ_PORT_OF_DEST' dref = REF #( s_pofd[] ) )
( name = 'ZZ_REGION' dref = REF #( s_region[] ) )
( name = 'ZZ_MARKET' dref = REF #( s_market[] ) )
) ).

NEW /dcsea/us_auto_allocation( )->vehicle_count(


EXPORTING
iv_filter = lv_where_aic
IMPORTING
e_count = DATA(e_countc)
).

DATA(lv_rowcnt) = lines( e_countc ).

/dcsea/us_allocation_inf_popup-no_of_vehicles = lv_rowcnt.

CONDENSE : /dcsea/us_allocation_inf_popup-no_of_vehicles.

IF lt_error_log IS NOT INITIAL.


CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
TABLES
i_message_tab = lt_error_log.
ENDIF.

WHEN 'ENTER'.

REFRESH : lt_error_log.

IF /dcsea/us_allocation_inf_popup-model IS INITIAL.
wa_error_log-msgid = 'E4'.
wa_error_log-msgty = 'E'.
wa_error_log-msgv1 = 'Enter Vehicle Model'.
wa_error_log-lineno = 1.
APPEND wa_error_log TO lt_error_log.
ENDIF.

IF /dcsea/us_allocation_inf_popup-model_year IS INITIAL.
wa_error_log-msgid = 'E4'.
wa_error_log-msgty = 'E'.
wa_error_log-msgv1 = 'Enter Vehicle Model Year'.
wa_error_log-lineno = wa_error_log-lineno + 1.
APPEND wa_error_log TO lt_error_log.
ENDIF.

IF /dcsea/us_allocation_inf_popup-kunnr IS INITIAL.
wa_error_log-msgid = 'E4'.
wa_error_log-msgty = 'E'.
wa_error_log-msgv1 = 'Enter From Home Office Dealer Code'.
wa_error_log-lineno = wa_error_log-lineno + 1.
APPEND wa_error_log TO lt_error_log.
ENDIF.

IF /dcsea/us_allocation_inf_popup-allocation_to IS INITIAL.
wa_error_log-msgid = 'E4'.
wa_error_log-msgty = 'E'.
wa_error_log-msgv1 = 'Enter Allocation To'.
wa_error_log-lineno = wa_error_log-lineno + 1.
APPEND wa_error_log TO lt_error_log.
ENDIF.

IF /dcsea/us_allocation_inf_popup-allocation_to = '1'.
IF /dcsea/us_allocation_inf_popup-vehusg IS INITIAL.
wa_error_log-msgid = 'E4'.
wa_error_log-msgty = 'E'.
wa_error_log-msgv1 = 'Enter To region Inventory Type'.
wa_error_log-lineno = wa_error_log-lineno + 1.
APPEND wa_error_log TO lt_error_log.
ENDIF.
ENDIF.

IF /dcsea/us_allocation_inf_popup-no_of_vehicles IS INITIAL.
wa_error_log-msgty = 'E'.
wa_error_log-msgv1 = 'Enter Number Of vehicles to be Allocated'.
wa_error_log-lineno = wa_error_log-lineno + 1.
APPEND wa_error_log TO lt_error_log.
ENDIF.

SELECT * FROM mara INTO TABLE @DATA(it_mara) WHERE extwg =


@/dcsea/us_allocation_inf_popup-model.
IF it_mara IS INITIAL.
wa_error_log-msgid = 'E4'.
wa_error_log-msgty = 'E'.
wa_error_log-msgv1 = 'Enter Correct Model No'.
wa_error_log-lineno = wa_error_log-lineno + 1.
APPEND wa_error_log TO lt_error_log.
ELSE.
LOOP AT it_mara INTO wa_mara.

CALL METHOD /dcsea/us_cl_vms_utilities=>get_model_year


EXPORTING
iv_matnr = wa_mara-matnr
IMPORTING
ev_myear = lv_my.

IF lv_my = /dcsea/us_allocation_inf_popup-model_year.
DATA(lv_matnr) = wa_mara-matnr.
ENDIF.

ENDLOOP.
ENDIF.

REFRESH : it_mara.

SELECT SINGLE * FROM kna1 INTO @DATA(wa_kna1) WHERE kunnr =


@/dcsea/us_allocation_inf_popup-kunnr.
IF sy-subrc NE 0.
wa_error_log-msgid = 'E4'.
wa_error_log-msgty = 'E'.
wa_error_log-msgv1 = 'Enter Correct Customer No '.
wa_error_log-lineno = wa_error_log-lineno + 1.
APPEND wa_error_log TO lt_error_log.
ELSE.

DATA(it_matnr) = VALUE fiwtin_t_selopt( ( sign = 'I' option = 'EQ' low =


lv_matnr ) ).
DATA(it_my) = VALUE fiwtin_t_selopt( ( sign = 'I' option = 'EQ' low
= /dcsea/us_allocation_inf_popup-model_year ) ).
DATA(it_kunnr) = VALUE fiwtin_t_selopt( ( sign = 'I' option = 'EQ' low
= /dcsea/us_allocation_inf_popup-kunnr ) ).

DATA(lv_where_ai) = cl_shdb_seltab=>combine_seltabs(
it_named_seltabs = VALUE #(
( name = 'WERKS' dref = REF #( s_werks[] ) )
( name = 'SDSTA' dref = REF #( s_sdsta[] ) )
( name = 'MMSTA' dref = REF #( s_mmsta[] ) )
( name = 'VHUSG' dref = REF #( s_vhusg[] ) )
( name = 'MATNR' dref = REF #( it_matnr[] ) )
( name = 'ZZ_ADDL_FIELD5' dref = REF #( it_my[] ) )
( name = 'ZZ_ORDER_CYCLE' dref = REF #( s_oc[] ) )
( name = 'AVAIL' dref = REF #( s_avail[] ) )
( name = 'KUNNR' dref = REF #( it_kunnr[] ) )
( name = 'ZZ_ALLOC_TYPE' dref = REF #( s_at[] ) )
( name = 'ZZ_VPCSTATUS' dref = REF #( s_vps[] ) )
( name = 'ZZ_PORT_OF_DEST' dref = REF #( s_pofd[] ) )
( name = 'ZZ_REGION' dref = REF #( s_region[] ) )
( name = 'ZZ_MARKET' dref = REF #( s_market[] ) )
) ).

NEW /dcsea/us_auto_allocation( )->vehicle_count(


EXPORTING
iv_filter = lv_where_ai
IMPORTING
e_count = DATA(e_count)
).

lv_rowcnt = lines( e_count ).

IF /dcsea/us_allocation_inf_popup-no_of_vehicles > lv_rowcnt .


DATA : lv_row_cnt TYPE string.
lv_row_cnt = lv_rowcnt.
wa_error_log-msgid = 'E4'.
wa_error_log-msgty = 'E'.
CONCATENATE 'Dealer Code' /dcsea/us_allocation_inf_popup-kunnr 'has only'
lv_row_cnt 'vehicles.'
INTO wa_error_log-msgv1 SEPARATED BY space.
wa_error_log-lineno = wa_error_log-lineno + 1.
APPEND wa_error_log TO lt_error_log.
CLEAR : lv_row_cnt.
ENDIF.
ENDIF.

CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'


TABLES
i_message_tab = lt_error_log.

IF lt_error_log IS INITIAL.

REFRESH : it_matnr,it_my,it_kunnr.
CLEAR : lv_where_ai.

it_matnr = VALUE fiwtin_t_selopt( ( sign = 'I' option = 'EQ' low =


lv_matnr ) ).
it_my = VALUE fiwtin_t_selopt( ( sign = 'I' option = 'EQ' low =
/dcsea/us_allocation_inf_popup-model_year ) ).
it_kunnr = VALUE fiwtin_t_selopt( ( sign = 'I' option = 'EQ' low =
/dcsea/us_allocation_inf_popup-kunnr ) ).

lv_where_ai = cl_shdb_seltab=>combine_seltabs(
it_named_seltabs = VALUE #(
( name = 'WERKS' dref = REF #( s_werks[] ) )
( name = 'SDSTA' dref = REF #( s_sdsta[] ) )
( name = 'MMSTA' dref = REF #( s_mmsta[] ) )
( name = 'VHUSG' dref = REF #( s_vhusg[] ) )
( name = 'MATNR' dref = REF #( it_matnr[] ) )
( name = 'ZZ_ADDL_FIELD5' dref = REF #( it_my[] ) )
( name = 'ZZ_ORDER_CYCLE' dref = REF #( s_oc[] ) )
( name = 'AVAIL' dref = REF #( s_avail[] ) )
( name = 'KUNNR' dref = REF #( it_kunnr[] ) )
( name = 'ZZ_ALLOC_TYPE' dref = REF #( s_at[] ) )
( name = 'ZZ_VPCSTATUS' dref = REF #( s_vps[] ) )
( name = 'ZZ_PORT_OF_DEST' dref = REF #( s_pofd[] ) )
( name = 'ZZ_REGION' dref = REF #( s_region[] ) )
( name = 'ZZ_MARKET' dref = REF #( s_market[] ) )
) ).

DATA(lv_where_calqty) = cl_shdb_seltab=>combine_seltabs(
it_named_seltabs = VALUE #(
( name = 'WERKS' dref = REF #( s_werks[] ) )
( name = 'MODEL' dref = REF #( it_matnr[] ) )
( name = 'MODEL_YEAR' dref = REF #( it_my[] ) )
) ).

REFRESH : et_vlcvehicle,et_tim_calqty,et_calqty_values,et_dealer_vpcs.

lv_no_of_veh = /dcsea/us_allocation_inf_popup-no_of_vehicles.

NEW /dcsea/us_auto_allocation( )->allocation_for_dealers(


EXPORTING
iv_filter = lv_where_ai
iv_filter_calqty = lv_where_calqty
iv_available_vehicles = lv_no_of_veh
IMPORTING
et_vlcvehicle = et_vlcvehicle
et_tim_calqty = et_tim_calqty
et_dealer_vpcs = et_dealer_vpcs
et_output = et_output
).

BREAK mmaddil.

REFRESH : it_popupalv1,it_popupalv2,it_popupalv3.
DATA : it_configuration TYPE TABLE OF conf_out.
*Begin of change market (03) for the region
IF /dcsea/us_allocation_inf_popup-allocation_to = '1'. " REGION
DATA(lt_output_mkt) = et_output[].
SORT lt_output_mkt BY werks model_year region market.
DELETE ADJACENT DUPLICATES FROM lt_output_mkt COMPARING werks model_year
region market.

DELETE lt_output_mkt WHERE region NE '03'.

IF NOT lt_output_mkt[] IS INITIAL.


READ TABLE et_tim_calqty INTO DATA(lw_calqty) WITH KEY region = '03'.
SELECT werks,division,region,market,default_dealer FROM
/dcsea/zais_alty
FOR ALL ENTRIES IN @lt_output_mkt
WHERE langu = @sy-langu
AND werks = @lt_output_mkt-werks
AND division = @lw_calqty-division
AND alloc_no = 'RH'
AND region = '03' INTO TABLE @DATA(lt_zaisalty) .

SORT lt_zaisalty BY werks division region.


ENDIF.
LOOP AT lt_output_mkt ASSIGNING FIELD-SYMBOL(<lw_output_mkt>).
READ TABLE lt_zaisalty INTO DATA(lw_zaisalty) WITH KEY werks =
<lw_output_mkt>-werks
division = lw_calqty-
division
region =
<lw_output_mkt>-region
market =
<lw_output_mkt>-market.
IF sy-subrc = 0.
<lw_output_mkt>-dealer = lw_zaisalty-default_dealer.
ENDIF.
ENDLOOP.
DELETE lt_output_mkt WHERE market_total_cars = '0'.
DATA(lt_mkttemp) = lt_output_mkt[].
ENDIF.
* End of change market distibution againest fegion

SELECT * FROM /dcsea/us_aa_act INTO TABLE @DATA(it_aa_act) WHERE werks IN


@s_werks AND cntrl = 'USS1' .
IF it_aa_act IS NOT INITIAL.
DATA(it_ps) = VALUE fiwtin_t_selopt( FOR wa_aa_act IN it_aa_act ( sign =
'I' option = 'EQ' low = wa_aa_act-statu_new ) ).
ENDIF.
*a. Where vehicles port of destination can�t be changed.
DATA(lt_vlcvehicle) = et_vlcvehicle[].
SORT lt_vlcvehicle BY matnr werks.
DELETE ADJACENT DUPLICATES FROM lt_vlcvehicle COMPARING matnr werks.
IF lt_vlcvehicle[] IS NOT INITIAL.
SELECT matnr,werks,mmcntrl FROM vlcfindcntrl
FOR ALL ENTRIES IN @lt_vlcvehicle
WHERE matnr = @lt_vlcvehicle-matnr
AND werks = @lt_vlcvehicle-werks
INTO TABLE @DATA(lt_vlcfindcntrl).

SORT lt_vlcfindcntrl BY matnr werks.


IF lt_vlcfindcntrl[] IS NOT INITIAL.
SELECT cntrl,statu_old,statu_new FROM cvlc04
INTO TABLE @DATA(lt_cvlc04)
FOR ALL ENTRIES IN @lt_vlcfindcntrl
WHERE cntrl = @lt_vlcfindcntrl-mmcntrl
AND aktion = 'ZPOD'.
SORT lt_cvlc04 BY cntrl statu_old.

ENDIF.
ENDIF.

DELETE et_dealer_vpcs WHERE port_of_dest = ''.


DATA(it_calqty_values) = et_tim_calqty[].

IF /dcsea/us_allocation_inf_popup-allocation_to = '1'.
DELETE et_output WHERE region_total_cars = '0'.
SORT et_output BY region.
DELETE ADJACENT DUPLICATES FROM et_output COMPARING region.
ELSEIF /dcsea/us_allocation_inf_popup-allocation_to = '2'.
DELETE et_output WHERE dealer_total_cars = '0'.
* delete et_output WHERE port_of_dest is INITIAL.
* delete adjacent duplicates from et_output comparing market dealer.
ENDIF.

TYPES:BEGIN OF ty_vechtemp.
INCLUDE STRUCTURE vlcvehicle.
TYPES:region TYPE char15,
case TYPE char1,
count TYPE int2,
flag TYPE char1,
dealer TYPE /dcsea/us_dealerno,
END OF ty_vechtemp,
tt_vechtemp TYPE STANDARD TABLE OF ty_vechtemp.

DATA:lt_vechtemp TYPE tt_vechtemp,


lw_vechtemp TYPE ty_vechtemp,
lt_vlcvehicle_temp TYPE /dcsea/us_net_vlcvehicle_tt,
lv_flag TYPE char1,
lt_et_vlcvehicle TYPE /dcsea/us_net_vlcvehicle_tt,
lt_output_temp TYPE TABLE OF /dcsea/us_allocat_for_dealers,
lw_region_temp TYPE /dcsea/us_allocat_for_dealers.
REFRESH:lt_vechtemp[],lt_vlcvehicle_temp[],
lt_et_vlcvehicle[],
it_r1_data[],it_r2_data[],
lt_output_temp[],
gt_output_temp[].
lt_et_vlcvehicle[] = et_vlcvehicle[].
lt_output_temp[] = et_output[].

DATA:wa_output TYPE /dcsea/us_allocat_for_dealers,


lv_spart TYPE spart.

* CASE /dcsea/us_allocation_inf_popup-allocation_to.
* WHEN '1'.
* lv_spart = '01'.
* WHEN '2'.
* lv_spart = '02'.
* ENDCASE.

CASE /dcsea/us_allocation_inf_popup-allocation_to.
WHEN '1'.
lv_spart = 'RH'.
WHEN '2'.
lv_spart = '01'.
ENDCASE.

IF lt_output_temp[] IS NOT INITIAL AND /dcsea/us_allocation_inf_popup-


allocation_to = '1'.
SELECT werks,division,alloc_no,region,default_dealer
FROM /dcsea/zais_alty
INTO TABLE @DATA(lt_zais_alty) FOR ALL ENTRIES IN @lt_output_temp
WHERE langu = @sy-langu AND werks = @lt_output_temp-werks
AND division = @wa_mara-spart
AND alloc_no = @lv_spart "@/dcsea/us_allocation_inf_popup-vehusg
AND region = @lt_output_temp-region+(02) .
SORT lt_zais_alty BY werks region.

SORT lt_zais_alty BY werks region.


IF NOT lt_zais_alty[] IS INITIAL.
SELECT werks,dealer,spart,region,vpc FROM /dcsea/us_dealer
INTO TABLE @DATA(lt_dealer)
FOR ALL ENTRIES IN @lt_zais_alty
WHERE werks = @lt_zais_alty-werks
AND dealer = @lt_zais_alty-default_dealer
AND spart = @wa_mara-spart
AND region = @lt_zais_alty-region .
SORT lt_dealer BY dealer region.
IF NOT lt_dealer[] IS INITIAL.
SELECT werks,vpcs,division,port_of_dest FROM /dcsea/us_vpcs
INTO TABLE @DATA(lt_vpcs)
FOR ALL ENTRIES IN @lt_dealer
WHERE werks = @lt_dealer-werks
AND vpcs = @lt_dealer-vpc
AND division = @lt_dealer-spart.
ENDIF.
ENDIF.

LOOP AT lt_output_temp ASSIGNING FIELD-SYMBOL(<lw_output_temp>).


READ TABLE lt_zais_alty INTO DATA(lw_zais_alt) WITH KEY werks =
<lw_output_temp>-werks
region =
<lw_output_temp>-region
BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE lt_dealer INTO DATA(lw_dealer) WITH KEY dealer =
lw_zais_alt-default_dealer
region =
<lw_output_temp>-region
BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE lt_vpcs INTO DATA(lw_vpcs1) WITH KEY werks = lw_dealer-
werks
vpcs = lw_dealer-
vpc
BINARY SEARCH.
IF sy-subrc = 0.
<lw_output_temp>-dealer = lw_zais_alt-default_dealer.
<lw_output_temp>-vpc = lw_vpcs1-vpcs.
<lw_output_temp>-port_of_dest = lw_vpcs1-port_of_dest.
ENDIF.
ENDIF.
ENDIF.
CLEAR:lw_vpcs1,lw_dealer,lw_zais_alt.
ENDLOOP.
gt_output_temp[] = lt_output_temp[].

ENDIF.

DATA:lv_count1 TYPE char15,


lv_reg_totcars TYPE char15,
lv_mkt_totcars TYPE char15,
lv_total_allocated TYPE char15.
CLEAR:lv_total_allocated,lv_count1.
lt_vechtemp[] = lt_et_vlcvehicle[].
********************************************************
*** Assignment Local vehicles /Domestiv Sceario*********
********************************************************
CLEAR:gv_local,lv_mkt_totcars.
SELECT COUNT(*) INTO @DATA(lv_lcount) FROM vlcadddata
FOR ALL ENTRIES IN @lt_vechtemp
WHERE vguid = @lt_vechtemp-vguid
AND aqual = 'ZUVS'
AND qausp = 'Local'.
IF sy-subrc = 0 AND lv_lcount GE 1. " Domestic vehicle found
gv_local = 'X'.
ENDIF.
IF gv_local = 'X'.
LOOP AT lt_output_temp ASSIGNING FIELD-SYMBOL(<lw_locregion>).
DATA(lv_index2) = sy-tabix.
lv_reg_totcars = <lw_locregion>-region_total_cars.
*****Begin of chagne for VRM5584 Market level
Allocation***************************************************
READ TABLE lt_output_mkt INTO DATA(lw_mkt) WITH KEY region =
<lw_locregion>-region.
IF sy-subrc = 0 AND /dcsea/us_allocation_inf_popup-allocation_to = '1'.
" Makrket level distibution
LOOP AT lt_output_mkt ASSIGNING FIELD-SYMBOL(<lw_mkt1>) WHERE region
= <lw_locregion>-region.
DATA(lv_index3) = sy-tabix.
lv_mkt_totcars = <lw_mkt1>-market_total_cars.
LOOP AT lt_vechtemp ASSIGNING FIELD-SYMBOL(<lw_locvechtemp1>) WHERE
flag IS INITIAL.
IF lv_count1 NE lv_mkt_totcars.
lv_count1 = lv_count1 + 1.
CONDENSE:lv_count1.
<lw_locvechtemp1>-flag = 'X'.
<lw_locvechtemp1>-case = 'L'. " Local Scenario/Domestic veicle
case
<lw_locvechtemp1>-region = <lw_locregion>-region.
<lw_locvechtemp1>-count = lv_count1.
<lw_locvechtemp1>-dealer = <lw_mkt1>-dealer.
<lw_locvechtemp1>-zz_market = <lw_mkt1>-market.
lv_total_allocated = lv_total_allocated + 1.
* Reduce the count after allocation
<lw_locregion>-region_total_cars = <lw_locregion>-
region_total_cars - 1.
<lw_locregion>-dealer_total_cars = <lw_locregion>-
dealer_total_cars - 1.
<lw_locregion>-market_total_cars = <lw_locregion>-
market_total_cars - 1.
<lw_mkt1>-market_total_cars = <lw_mkt1>-market_total_cars
- 1.
CONDENSE: <lw_locregion>-region_total_cars,
<lw_locregion>-dealer_total_cars,
<lw_locregion>-market_total_cars,
<lw_mkt1>-market_total_cars.

ENDIF.
* Reduce ompleately allocated vehicles for perform next step
* Region input check
IF ( ( ( lv_count1 = lv_mkt_totcars OR <lw_mkt1>-
market_total_cars EQ 0 ) ) AND
( /dcsea/us_allocation_inf_popup-allocation_to =
'1' ) ).
IF <lw_locregion>-region_total_cars IS ASSIGNED.
IF <lw_locregion>-region_total_cars EQ 0.
DELETE lt_output_temp INDEX lv_index2.
ENDIF.
ENDIF.
IF <lw_mkt1>-market_total_cars EQ 0 .
DELETE lt_output_mkt INDEX lv_index3.
EXIT.
ENDIF.
ENDIF.
ENDLOOP.
CLEAR:lv_count1,lv_mkt_totcars,lv_reg_totcars.
ENDLOOP.
*****End of chagne for VRM5584 Market level
Allocation***************************************************
ELSE. " No Market scenario ..there will be no market under region to
assign
LOOP AT lt_vechtemp ASSIGNING FIELD-SYMBOL(<lw_locvechtemp>) WHERE
flag IS INITIAL.
IF lv_count1 NE lv_reg_totcars.
lv_count1 = lv_count1 + 1.
CONDENSE:lv_count1.
<lw_locvechtemp>-flag = 'X'.
<lw_locvechtemp>-case = 'L'. " Local Scenario/Domestic veicle
case
<lw_locvechtemp>-region = <lw_locregion>-region.
<lw_locvechtemp>-count = lv_count1.
<lw_locvechtemp>-dealer = <lw_locregion>-dealer.
<lw_locvechtemp>-zz_market = <lw_locregion>-market.
lv_total_allocated = lv_total_allocated + 1.
* Reduce the count after allocation
<lw_locregion>-region_total_cars = <lw_locregion>-
region_total_cars - 1.
<lw_locregion>-dealer_total_cars = <lw_locregion>-
dealer_total_cars - 1.
CONDENSE: <lw_locregion>-region_total_cars,
<lw_locregion>-dealer_total_cars.

ENDIF.
* Reduce ompleately allocated vehicles for perform next step
* Region input check
IF ( ( ( lv_count1 EQ lv_reg_totcars ) OR ( <lw_locregion>-
region_total_cars EQ 0 ) ) AND
( /dcsea/us_allocation_inf_popup-allocation_to = '1' ) ).
DELETE lt_output_temp INDEX lv_index2.
EXIT.
ENDIF.
* Dealer input check
IF ( ( ( lv_count1 EQ lv_reg_totcars ) OR ( <lw_locregion>-
dealer_total_cars EQ 0 ) ) AND
( /dcsea/us_allocation_inf_popup-allocation_to = '2' ) ).
DELETE lt_output_temp WHERE dealer = <lw_locregion>-dealer.
EXIT.
ENDIF.

ENDLOOP.
ENDIF.
CLEAR:lv_reg_totcars,lv_count1.
ENDLOOP.
ENDIF.
*************************************************************************
********************************************************
*** Assignment of A and B Scenarios
*A. Where vehicles port of destination can�t be changed*
********************************************************

IF gv_local IS INITIAL . " Non Deomstic scenario


*a. Where vehicles port of destination can�t be changed
LOOP AT lt_output_temp ASSIGNING FIELD-SYMBOL(<lw_region>).
DATA(lv_index1) = sy-tabix.
lv_reg_totcars = <lw_region>-region_total_cars.
*****Begin of chagne for VRM5584 Market level
Allocation***************************************************
READ TABLE lt_output_mkt INTO lw_mkt WITH KEY region = <lw_region>-
region.
IF sy-subrc = 0 AND /dcsea/us_allocation_inf_popup-allocation_to = '1'.
" Makrket level distibution
LOOP AT lt_output_mkt ASSIGNING FIELD-SYMBOL(<lw_mkt2>) WHERE region
= <lw_region>-region.
lv_index3 = sy-tabix.
lv_mkt_totcars = <lw_mkt2>-market_total_cars.
LOOP AT lt_vechtemp ASSIGNING FIELD-SYMBOL(<lw_vechtemp2>) WHERE
flag IS INITIAL.
READ TABLE lt_vlcfindcntrl INTO DATA(lw_vlcfindcntr2) WITH KEY
matnr = <lw_vechtemp2>-matnr

werks = <lw_vechtemp2>-werks.
IF sy-subrc = 0.
READ TABLE lt_cvlc04 INTO DATA(lw_cvlc04m) WITH KEY cntrl =
lw_vlcfindcntr2-mmcntrl
statu_old =
<lw_vechtemp2>-mmsta.
IF sy-subrc NE 0 AND <lw_mkt2>-port_of_dest = <lw_vechtemp2>-
zz_port_of_dest. "A case
IF lv_count1 NE lv_mkt_totcars.
lv_count1 = lv_count1 + 1.
CONDENSE:lv_count1.
<lw_vechtemp2>-flag = 'X'.
<lw_vechtemp2>-case = 'A'. " Scenarion A
<lw_vechtemp2>-region = <lw_region>-region.
<lw_vechtemp2>-count = lv_count1.
<lw_vechtemp2>-dealer = <lw_mkt2>-dealer.
<lw_vechtemp2>-zz_market = <lw_mkt2>-market.
lv_total_allocated = lv_total_allocated + 1.
* Reduce the count after allocation
<lw_region>-region_total_cars = <lw_region>-
region_total_cars - 1.
<lw_region>-dealer_total_cars = <lw_region>-
dealer_total_cars - 1.
<lw_mkt2>-market_total_cars = <lw_mkt2>-market_total_cars
- 1.
CONDENSE: <lw_region>-region_total_cars,
<lw_region>-dealer_total_cars,
<lw_mkt2>-market_total_cars.

ENDIF.
* Reduce ompleately allocated vehicles for perform next step
* Region input check
IF ( ( ( lv_count1 = lv_mkt_totcars OR <lw_mkt2>-
market_total_cars EQ 0 ) ) AND
( /dcsea/us_allocation_inf_popup-allocation_to = '1'
) ).
IF <lw_region>-region_total_cars EQ 0.
DELETE lt_output_temp INDEX lv_index1.
ENDIF.
IF <lw_mkt2>-market_total_cars EQ 0.
DELETE lt_output_mkt INDEX lv_index3.
EXIT.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
CLEAR:lv_reg_totcars,lv_count1,lv_mkt_totcars.
ENDLOOP.
*****End of chagne for VRM5584 Market level
Allocation***************************************************
ELSE.
LOOP AT lt_vechtemp ASSIGNING FIELD-SYMBOL(<lw_vechtemp>) WHERE flag
IS INITIAL.
READ TABLE lt_vlcfindcntrl INTO DATA(lw_vlcfindcntrl) WITH KEY
matnr = <lw_vechtemp>-matnr

werks = <lw_vechtemp>-werks.
IF sy-subrc = 0.
READ TABLE lt_cvlc04 INTO DATA(lw_cvlc04) WITH KEY cntrl =
lw_vlcfindcntrl-mmcntrl
statu_old =
<lw_vechtemp>-mmsta.
IF sy-subrc NE 0 AND <lw_region>-port_of_dest = <lw_vechtemp>-
zz_port_of_dest. "A case
IF lv_count1 NE lv_reg_totcars.
lv_count1 = lv_count1 + 1.
CONDENSE:lv_count1.
<lw_vechtemp>-flag = 'X'.
<lw_vechtemp>-case = 'A'. " Scenarion A
<lw_vechtemp>-region = <lw_region>-region.
<lw_vechtemp>-count = lv_count1.
<lw_vechtemp>-dealer = <lw_region>-dealer.
<lw_vechtemp>-zz_market = <lw_region>-market.
lv_total_allocated = lv_total_allocated + 1.
* Reduce the count after allocation
<lw_region>-region_total_cars = <lw_region>-region_total_cars
- 1.
<lw_region>-dealer_total_cars = <lw_region>-dealer_total_cars
- 1.
CONDENSE: <lw_region>-region_total_cars,
<lw_region>-dealer_total_cars.

ENDIF.
* Reduce ompleately allocated vehicles for perform next step
* Region input check
IF ( ( ( lv_count1 EQ lv_reg_totcars ) OR ( <lw_region>-
region_total_cars EQ 0 ) ) AND
( /dcsea/us_allocation_inf_popup-allocation_to = '1' )
).
DELETE lt_output_temp INDEX lv_index1.
EXIT.
ENDIF.
* Dealer input check
IF ( ( ( lv_count1 EQ lv_reg_totcars ) OR ( <lw_region>-
dealer_total_cars EQ 0 ) ) AND
( /dcsea/us_allocation_inf_popup-allocation_to = '2' )
).
DELETE lt_output_temp WHERE dealer = <lw_region>-dealer.
EXIT.
ENDIF.

ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
CLEAR:lv_reg_totcars,lv_count1.
* UNASSIGN <lw_region>.
ENDLOOP.
* ***************************************************************
* Assignment of B Scenarios
*Where vehicles port of destination (VLCVEHICLE-ZZ_PORT_OF_DEST)*
* is matching with customers Port of destination******
****************************************************************
*b. Where vehicles port of destination (VLCVEHICLE-ZZ_PORT_OF_DEST) is matching
with customers Port of destination
LOOP AT lt_output_temp ASSIGNING <lw_region>. ""
lv_index1 = sy-tabix. ""
lv_reg_totcars = <lw_region>-region_total_cars. ""
*****Begin of chagne for VRM5584 Market level
Allocation***************************************************
READ TABLE lt_output_mkt INTO lw_mkt WITH KEY region = <lw_region>-
region.
IF sy-subrc = 0 AND /dcsea/us_allocation_inf_popup-allocation_to = '1'.
" Makrket level distibution
LOOP AT lt_output_mkt ASSIGNING FIELD-SYMBOL(<lw_mkt3>) WHERE region
= <lw_region>-region.
lv_index3 = sy-tabix.
lv_mkt_totcars = <lw_mkt3>-market_total_cars.
LOOP AT lt_vechtemp ASSIGNING <lw_vechtemp> WHERE flag IS INITIAL
AND zz_port_of_dest = <lw_mkt3>-
port_of_dest. " B Case
IF lv_count1 NE lv_mkt_totcars.
lv_count1 = lv_count1 + 1.
CONDENSE:lv_count1.
<lw_vechtemp>-count = lv_count1.
<lw_vechtemp>-flag = 'X'.
<lw_vechtemp>-case = 'B'. " Scenarion B
<lw_vechtemp>-region = <lw_region>-region.
<lw_vechtemp>-dealer = <lw_mkt3>-dealer.
<lw_vechtemp>-zz_market = <lw_mkt3>-market.

* Reduce the count after allocation


<lw_region>-region_total_cars = <lw_region>-region_total_cars -
1.
<lw_region>-dealer_total_cars = <lw_region>-dealer_total_cars -
1.
<lw_region>-market_total_cars = <lw_region>-market_total_cars -
1.
<lw_mkt3>-market_total_cars = <lw_mkt3>-market_total_cars -
1.
CONDENSE :<lw_region>-region_total_cars,
<lw_region>-dealer_total_cars,
<lw_mkt3>-market_total_cars.
lv_total_allocated = lv_total_allocated + 1.
ENDIF.
* Reduce compleately allocated vehicles for perform next steps

* Region input check


IF ( ( ( lv_count1 = lv_mkt_totcars OR <lw_mkt3>-
market_total_cars EQ 0 ) ) AND
( /dcsea/us_allocation_inf_popup-allocation_to = '1' ) ).
IF <lw_region>-region_total_cars EQ 0.
DELETE lt_output_temp INDEX lv_index1.
ENDIF.
IF <lw_mkt3>-market_total_cars EQ 0.
DELETE lt_output_mkt INDEX lv_index3.
EXIT.
ENDIF.
ENDIF.
ENDLOOP.
CLEAR:lv_reg_totcars,lv_count1,lv_mkt_totcars.
ENDLOOP.
*****End of chagne for VRM5584 Market level
Allocation***************************************************
ELSE.
LOOP AT lt_vechtemp ASSIGNING <lw_vechtemp> WHERE flag IS INITIAL
AND zz_port_of_dest =
<lw_region>-port_of_dest. " B Case
IF lv_count1 NE lv_reg_totcars.
lv_count1 = lv_count1 + 1.
CONDENSE:lv_count1.
<lw_vechtemp>-count = lv_count1.
<lw_vechtemp>-flag = 'X'.
<lw_vechtemp>-case = 'B'. " Scenarion B
<lw_vechtemp>-region = <lw_region>-region.
<lw_vechtemp>-dealer = <lw_region>-dealer.
<lw_vechtemp>-zz_market = <lw_region>-market.

* Reduce the count after allocation


<lw_region>-region_total_cars = <lw_region>-region_total_cars -
1.
<lw_region>-dealer_total_cars = <lw_region>-dealer_total_cars -
1.
CONDENSE :<lw_region>-region_total_cars,
<lw_region>-dealer_total_cars.
lv_total_allocated = lv_total_allocated + 1.
ENDIF.
* Reduce compleately allocated vehicles for perform next steps

* Region input check


IF ( ( ( lv_count1 EQ lv_reg_totcars ) OR ( <lw_region>-
region_total_cars EQ 0 ) ) AND
( /dcsea/us_allocation_inf_popup-allocation_to = '1' ) ).
DELETE lt_output_temp INDEX lv_index1.
EXIT.
ENDIF.
* Dealer input check
IF ( ( ( lv_count1 EQ lv_reg_totcars ) OR ( <lw_region>-
dealer_total_cars EQ 0 ) ) AND
( /dcsea/us_allocation_inf_popup-allocation_to = '2' ) ).
DELETE lt_output_temp WHERE dealer = <lw_region>-dealer.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
CLEAR:lv_reg_totcars,lv_count1.
* UNASSIGN <lw_region>.
ENDLOOP. ""
****************************************************
******Assignment C in round robin passion **********
*c.Port of Destination can be changed on a vehicle**
****************************************************
*Findig left over vehicles to allocate as per the Scenario C
*Allocate in round robin for each region
CONDENSE lv_total_allocated.
CLEAR:lv_count1,lv_reg_totcars.
IF lv_total_allocated < lv_no_of_veh.
DATA(lv_lines) = lv_no_of_veh - lv_total_allocated.
ENDIF.
IF /dcsea/us_allocation_inf_popup-allocation_to = '1'. " Region
DO lv_lines TIMES.
LOOP AT lt_output_temp ASSIGNING <lw_region>.
lv_index1 = sy-tabix.
*****Begin of chagne for VRM5584 Market level
Allocation***************************************************
READ TABLE lt_output_mkt ASSIGNING FIELD-SYMBOL(<lw_mkt4>) WITH KEY
region = <lw_region>-region.
IF sy-subrc = 0 AND <lw_mkt4> IS ASSIGNED.
DATA(lv_mktflag) = 'X'.
ENDIF.
*****End of chagne for VRM5584 Market level
Allocation***************************************************
READ TABLE lt_vechtemp ASSIGNING <lw_vechtemp> WITH KEY flag =
space.
IF sy-subrc = 0.
READ TABLE lt_vlcfindcntrl INTO lw_vlcfindcntrl WITH KEY matnr =
<lw_vechtemp>-matnr
werks =
<lw_vechtemp>-werks. " C Case
IF sy-subrc = 0.
READ TABLE lt_cvlc04 INTO lw_cvlc04 WITH KEY cntrl =
lw_vlcfindcntrl-mmcntrl
statu_old =
<lw_vechtemp>-mmsta.
IF sy-subrc = 0.
<lw_vechtemp>-case = 'C'. " Scenarion C
<lw_vechtemp>-flag = 'X'.
<lw_vechtemp>-region = <lw_region>-region.
IF lv_mktflag IS INITIAL .
<lw_vechtemp>-dealer = <lw_region>-dealer.
<lw_vechtemp>-zz_market = <lw_region>-market.
*****Begin of chagne for VRM5584 Market level
Allocation***************************************************
ELSE.
IF <lw_mkt4> IS ASSIGNED .
<lw_vechtemp>-dealer = <lw_mkt4>-dealer.
<lw_vechtemp>-zz_market = <lw_mkt4>-market.
<lw_mkt4>-market_total_cars = <lw_mkt4>-market_total_cars
- 1.
ENDIF.
ENDIF.
*****End of chagne for VRM5584 Market level
Allocation***************************************************
lv_count1 = lv_count1 + 1.
CONDENSE:lv_count1.
<lw_vechtemp>-count = lv_count1.
* Reduce the count after allocation
<lw_region>-region_total_cars = <lw_region>-region_total_cars
- 1.
lv_total_allocated = lv_total_allocated + 1.
CONDENSE:<lw_region>-region_total_cars,
lv_total_allocated,<lw_region>-dealer_total_cars.
IF <lw_mkt4>-market_total_cars IS ASSIGNED .
CONDENSE <lw_mkt4>-market_total_cars.
ENDIF.

** Reduce compleately allocated vehicles


* Region Count
IF <lw_region>-region_total_cars EQ 0 AND
/dcsea/us_allocation_inf_popup-allocation_to = '1'.
DELETE lt_output_temp WHERE region = <lw_region>-region.
ENDIF.
IF <lw_mkt4>-market_total_cars IS ASSIGNED.
IF <lw_mkt4>-market_total_cars EQ 0.
DELETE lt_output_mkt WHERE region = <lw_mkt4>-region
AND market = <lw_mkt4>-market.
ENDIF.
ENDIF.
ELSE.
<lw_vechtemp>-flag = 'F'. " Failed to assign
ENDIF.
ENDIF.
ENDIF.
CLEAR:lv_mktflag.
ENDLOOP.

IF lv_count1 = lv_lines OR
lv_total_allocated EQ lv_no_of_veh OR
lt_output_temp[] IS INITIAL.
EXIT.
ENDIF.
ENDDO.
ELSEIF /dcsea/us_allocation_inf_popup-allocation_to = '2'. " Dealer
DO lv_lines TIMES.
LOOP AT lt_output_temp ASSIGNING <lw_region>.
lv_index1 = sy-tabix.
* Possibility to assign multiple vehicles based up on the dealer total cars
DO <lw_region>-dealer_total_cars TIMES.
READ TABLE lt_vechtemp ASSIGNING <lw_vechtemp> WITH KEY flag =
space .
IF sy-subrc = 0.
READ TABLE lt_vlcfindcntrl INTO lw_vlcfindcntrl WITH KEY matnr
= <lw_vechtemp>-matnr
werks
= <lw_vechtemp>-werks. " C Case
IF sy-subrc = 0.
READ TABLE lt_cvlc04 INTO lw_cvlc04 WITH KEY cntrl =
lw_vlcfindcntrl-mmcntrl
statu_old =
<lw_vechtemp>-mmsta.
IF sy-subrc = 0.
<lw_vechtemp>-case = 'C'. " Scenarion C
<lw_vechtemp>-flag = 'X'.
<lw_vechtemp>-region = <lw_region>-region.
<lw_vechtemp>-dealer = <lw_region>-dealer.
<lw_vechtemp>-zz_market = <lw_region>-market.
lv_count1 = lv_count1 + 1.
CONDENSE:lv_count1.
<lw_vechtemp>-count = lv_count1.
* Reduce the count after allocation
<lw_region>-region_total_cars = <lw_region>-
region_total_cars - 1.
<lw_region>-dealer_total_cars = <lw_region>-
dealer_total_cars - 1.
lv_total_allocated = lv_total_allocated + 1.
CONDENSE:<lw_region>-region_total_cars,
lv_total_allocated,<lw_region>-dealer_total_cars.
* * Reduce compleately allocated vehicles
* Dealer Count
IF <lw_region>-dealer_total_cars EQ 0 AND
/dcsea/us_allocation_inf_popup-allocation_to = '2'.
DELETE lt_output_temp INDEX lv_index1.
EXIT.
ENDIF.
ELSE.
<lw_vechtemp>-flag = 'F'. " Failed to assign
ENDIF.
ENDIF.
ELSE.
EXIT. " NO vehicle to allocate
ENDIF.
ENDDO.
ENDLOOP.

IF lv_count1 = lv_lines OR
lv_total_allocated EQ lv_no_of_veh OR
lt_output_temp[] IS INITIAL.
EXIT.
ENDIF.
ENDDO.
ENDIF.
ENDIF.
CLEAR:lv_count1,gv_rcount,
lv_lines, lv_index1.
* CLEAR:lv_total_allocated.
****Begin of un assigned vehicles Region ,Dealre and Market ****************
CONDENSE lv_total_allocated.
CLEAR:lv_count1,lv_reg_totcars.
IF lv_total_allocated < lv_no_of_veh.
lv_lines = lv_no_of_veh - lv_total_allocated.
ENDIF.
CLEAR:lv_mktflag.
DATA(lt_vechtemp_un) = lt_vechtemp[].
DO lv_lines TIMES.
LOOP AT lt_output_temp ASSIGNING <lw_region>.
lv_index1 = sy-index.
IF /dcsea/us_allocation_inf_popup-allocation_to = '1'. " Region
Scenarion
READ TABLE lt_output_mkt ASSIGNING FIELD-SYMBOL(<lw_mkt9>) WITH KEY
region = <lw_region>-region.
IF sy-subrc = 0 AND <lw_mkt9> IS ASSIGNED.
lv_mktflag = 'X'.
<lw_mkt9>-market_total_cars = <lw_mkt9>-market_total_cars - 1.
ENDIF.
ENDIF.
READ TABLE lt_vechtemp_un ASSIGNING <lw_vechtemp> WITH KEY flag = 'F'.
IF <lw_vechtemp> IS ASSIGNED.
<lw_region>-region_total_cars = <lw_region>-region_total_cars - 1.
<lw_region>-dealer_total_cars = <lw_region>-dealer_total_cars - 1.
<lw_vechtemp>-flag = 'M'. " Mapped Dealer ,Markter and Region
lv_count1 = lv_count1 + 1.
CONDENSE:lv_count1.
<lw_vechtemp>-count = lv_count1.
lv_total_allocated = lv_total_allocated + 1.
CONDENSE:<lw_region>-region_total_cars,<lw_region>-dealer_total_cars,
lv_total_allocated,lv_count1.
ENDIF.
<lw_vechtemp>-region = <lw_region>-region.
IF lv_mktflag IS INITIAL .
<lw_vechtemp>-dealer = <lw_region>-dealer.
<lw_vechtemp>-zz_market = <lw_region>-market.
ELSE.
IF <lw_mkt9> IS ASSIGNED .
<lw_vechtemp>-dealer = <lw_mkt9>-dealer.
<lw_vechtemp>-zz_market = <lw_mkt9>-market.
ENDIF.
ENDIF.
IF <lw_region>-region_total_cars EQ 0 AND
/dcsea/us_allocation_inf_popup-allocation_to = '1'.
DELETE lt_output_temp INDEX lv_index1.
ENDIF.
IF /dcsea/us_allocation_inf_popup-allocation_to = '1'.
IF <lw_mkt9>-market_total_cars IS ASSIGNED.
IF <lw_mkt9>-market_total_cars EQ 0.
DELETE lt_output_mkt WHERE region = <lw_mkt9>-region
AND market = <lw_mkt9>-market.
ENDIF.
ENDIF.
ENDIF.
IF <lw_region>-dealer_total_cars EQ 0 AND
/dcsea/us_allocation_inf_popup-allocation_to = '2'.
DELETE lt_output_temp INDEX lv_index1.
ENDIF.
CLEAR:lv_mktflag.
ENDLOOP.
IF lv_count1 = lv_lines OR
lv_total_allocated EQ lv_no_of_veh OR
lt_output_temp[] IS INITIAL.
EXIT.
ENDIF.
ENDDO.
****End of un assigned vehicles Region ,Dealre and Market ****************

DATA(lt_vechtemp1) = lt_vechtemp[].

IF lv_no_of_veh < lv_rowcnt.


SORT lt_vechtemp1 BY flag DESCENDING.
ENDIF.
* LOOP AT et_vlcvehicle INTO DATA(wa_vlcvehicle)." FROM 1 TO lv_no_of_veh.
* READ TABLE lt_vechtemp1 INTO lw_vechtemp WITH KEY vhcle = wa_vlcvehicle-
vhcle.
LOOP AT lt_vechtemp1 INTO lw_vechtemp FROM 1 TO lv_no_of_veh.
READ TABLE et_vlcvehicle INTO DATA(wa_vlcvehicle) WITH KEY vhcle =
lw_vechtemp-vhcle.
CHECK sy-subrc = 0.
wa_popupalv-vhcle = wa_vlcvehicle-vhcle.
wa_popupalv-commnos = wa_vlcvehicle-zz_commnos.
" Commission
wa_popupalv-model = /dcsea/us_allocation_inf_popup-model.
" Model
wa_popupalv-model_year = /dcsea/us_allocation_inf_popup-model_year.
" Model year
wa_popupalv-reason_code = /dcsea/us_allocation_inf_popup-reason_code.
" Allocation reason
wa_popupalv-market = lw_vechtemp-zz_market. " Market
wa_popupalv-case = lw_vechtemp-case. " Case
wa_popupalv-current_vpc = wa_vlcvehicle-zz_vpcstatus. " Curretn VPC
wa_popupalv-primary_status = wa_vlcvehicle-mmsta. " Primary statu
wa_popupalv-secondry_status = wa_vlcvehicle-sdsta. " Secondary
Status

* Populate the current port code


wa_popupalv-offsite_shipto = wa_vlcvehicle-zz_port_of_dest.

CALL FUNCTION 'VELO03_GET_VEHICLE_CONFIG'


EXPORTING
vguid_iv = wa_vlcvehicle-vguid
cuobj_iv = wa_vlcvehicle-cuobj
TABLES
configuration_et = it_configuration
EXCEPTIONS
config_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* * Implement suitable error handling here
MESSAGE 'Config.Date Icomplete.'(010) TYPE 'S'.
ENDIF.

wa_popupalv-colour = VALUE #( it_configuration[ atnam+0(5) = 'COLOUR' ]-


atwtb OPTIONAL ).
wa_popupalv-trim = VALUE #( it_configuration[ atbez = 'Trim' ]-atwtb
OPTIONAL ).
IF lw_vechtemp-flag = 'X'.
wa_popupalv-region = lw_vechtemp-region. " Dealer Region code
wa_popupalv-status = 'Assignment Possible'(005).
gv_rcount = gv_rcount + 1.
ELSE." Not assinged vechicle
wa_popupalv-status = 'Assignment not Possible'(004).
ENDIF.
wa_popupalv-dealer = lw_vechtemp-dealer. " Assigned Dealer
IF /dcsea/us_allocation_inf_popup-allocation_to = '2'.
READ TABLE et_dealer_vpcs INTO DATA(lw_vpcs) WITH KEY werks =
wa_vlcvehicle-werks
dealer =
lw_vechtemp-dealer.
IF sy-subrc = 0.
wa_popupalv-target_vpc = lw_vpcs-vpc. " Target VPC
wa_popupalv-port_of_dest = lw_vpcs-port_of_dest. " Targer port
code
ENDIF.
ELSEIF /dcsea/us_allocation_inf_popup-allocation_to = '1'.
IF lw_vechtemp-region = '03'. " Market distibution for the market 03
READ TABLE lt_mkttemp INTO DATA(lw_mkttemp) WITH KEY dealer =
lw_vechtemp-dealer
region =
lw_vechtemp-region
market =
lw_vechtemp-zz_market.
IF sy-subrc = 0.
wa_popupalv-target_vpc = lw_mkttemp-vpc. " Target
VPC
wa_popupalv-port_of_dest = lw_mkttemp-port_of_dest. " Targer
port code
ENDIF.
ELSE.
READ TABLE gt_output_temp INTO DATA(lw_output) WITH KEY dealer =
lw_vechtemp-dealer
region =
lw_vechtemp-region.
IF sy-subrc = 0.
wa_popupalv-target_vpc = lw_output-vpc. " Target VPC
wa_popupalv-port_of_dest = lw_output-port_of_dest. " Targer
port code
ENDIF.
ENDIF.
ENDIF.

wa_popupalv-case = lw_vechtemp-case.
IF lw_vechtemp-flag = 'X'.
IF lw_vechtemp-case = 'A' OR lw_vechtemp-case = 'B'.
MOVE-CORRESPONDING wa_vlcvehicle TO wa_r1_data.
APPEND wa_r1_data TO it_r1_data.
ELSEIF lw_vechtemp-case = 'C'.
MOVE-CORRESPONDING wa_vlcvehicle TO wa_r2_data.
wa_r2_data-zz_port_of_dest = wa_popupalv-port_of_dest.
APPEND wa_r2_data TO it_r2_data.
ELSEIF lw_vechtemp-case = 'L'. " Local Vehicles
* Domestic vehicles target and source VPC same
wa_popupalv-target_vpc = wa_vlcvehicle-zz_vpcstatus.
MOVE-CORRESPONDING wa_vlcvehicle TO wa_r1_data.
APPEND wa_r1_data TO it_r1_data.
ENDIF.
ENDIF.

*Begin of chagne Un assigned Vehicels region ,Dealer adn Market data .


IF lw_vechtemp-flag = 'F'. " Failed Assign Vehicles
READ TABLE lt_vechtemp_un INTO DATA(lw_un) WITH KEY vhcle =
wa_vlcvehicle-vhcle
flag = 'M'.
IF sy-subrc = 0.
wa_popupalv-region = lw_un-region.
wa_popupalv-dealer = lw_un-dealer.
wa_popupalv-market = lw_un-zz_market.
ENDIF.
ENDIF.
*End of chagne Un assigned Vehicels region ,Dealer adn Market data .
APPEND wa_popupalv TO it_popupalv1.

CLEAR : wa_r1_data,wa_popupalv,
wa_r2_data,lw_vpcs1,lw_output,
wa_vlcvehicle,lw_dealer.
REFRESH : it_configuration.
CLEAR:lv_flag,lw_vechtemp.
ENDLOOP.
REFRESH:lt_zais_alty[],lt_dealer[],
lt_vechtemp1[],lt_mkttemp[],
lt_output_mkt[],lt_vechtemp_un[].

DATA : lv_reg_from(5) TYPE c,


lv_reg_to(5) TYPE c.
CALL SCREEN 9007 STARTING AT 30 05
ENDING AT 150 25.

ENDIF.

ENDCASE.

ENDMODULE.

MODULE status_9007 OUTPUT.

DATA: lt_fcode TYPE STANDARD TABLE OF sy-ucomm.

REFRESH : it_popupalv.
* set titlebar 'TITLEA'.
APPEND LINES OF it_popupalv1 TO it_popupalv.

* Begin of change rammane


CONSTANTS:co_prog_name TYPE progname VALUE '/DCSEA/US_AUTOMATED_ALLOCATION',
co_sname TYPE typename VALUE '/DCSEA/US_AUTO_ALLOC_DEALER'.
DATA :lt_fieldcat TYPE lvc_t_fcat. " SLIS_T_FIELDCAT_ALV.

REFRESH:lt_fcode[].
APPEND 'CONTINUE' TO lt_fcode.
APPEND 'ABORT' TO lt_fcode.
CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
EXPORTING
p_status = 'POPUPALV'
p_program = co_prog_name
TABLES
p_exclude = lt_fcode.

REFRESH:lt_fieldcat[].
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = co_sname
CHANGING
ct_fieldcat = lt_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

LOOP AT lt_fieldcat ASSIGNING FIELD-SYMBOL(<fs_fcat>).


IF <fs_fcat>-fieldname EQ 'MODEL'. " Model
<fs_fcat>-scrtext_l = 'Model'(011).
<fs_fcat>-scrtext_m = 'Model'(011).
<fs_fcat>-scrtext_s = 'Model'(011).
ELSEIF <fs_fcat>-fieldname EQ 'OFFSITE_SHIPTO'. " Model
<fs_fcat>-coltext = 'Current Port Code'(013).
<fs_fcat>-scrtext_l = 'Curr.PortCode'(012).
<fs_fcat>-scrtext_m = 'CurrentPortCode'(013).
<fs_fcat>-scrtext_s = 'CurrentPortCode'(013).
<fs_fcat>-tooltip = TEXT-013.
ELSEIF <fs_fcat>-fieldname EQ 'PORT_OF_DEST'.
<fs_fcat>-coltext = 'Target Port Code'(014).
<fs_fcat>-scrtext_l = 'Targ.PortCode'(015).
<fs_fcat>-scrtext_m = 'Target Port Code'(014).
<fs_fcat>-scrtext_s = 'Target Port Code'(014).
<fs_fcat>-tooltip = TEXT-014.
ELSEIF <fs_fcat>-fieldname EQ 'STATUS'.
<fs_fcat>-coltext = 'Status'(017).
<fs_fcat>-scrtext_l = 'Status'(017).
<fs_fcat>-scrtext_m = 'Status'(017).
<fs_fcat>-scrtext_s = 'Status'(017).
<fs_fcat>-tooltip = TEXT-017.

ENDIF.
ENDLOOP.

DELETE lt_fieldcat WHERE fieldname EQ 'CASE'.


DELETE lt_fieldcat WHERE fieldname EQ 'VHCLE'.
IF /dcsea/us_allocation_inf_popup-allocation_to = '1'. " Region
DELETE lt_fieldcat WHERE fieldname EQ 'MARKET'.
* DELETE lt_fieldcat WHERE fieldname EQ 'DEALER'.
ELSEIF /dcsea/us_allocation_inf_popup-allocation_to = '2'. "Dealer
DELETE lt_fieldcat WHERE fieldname EQ 'OFFSITE_SHIPTO'. " Current Port code
DELETE lt_fieldcat WHERE fieldname EQ 'PORT_OF_DEST'. " Port of destination
ENDIF.
IF gv_pf IS INITIAL .
SET PF-STATUS 'POPUPALV'.
ELSEIF gv_pf = 'X'.
SET PF-STATUS 'POPUPALV' EXCLUDING lt_fcode.
ENDIF.

IF popupalv IS NOT BOUND.


popupalv = NEW cl_gui_alv_grid( i_parent = NEW
cl_gui_custom_container( container_name = 'POPALV' ) ).
ELSE.
CALL METHOD popupalv->refresh_table_display.
CALL METHOD cl_gui_cfw=>flush.
ENDIF.
popupalv->set_table_for_first_display(
EXPORTING
* i_structure_name = '/DCSEA/US_AUTO_ALLOC_DEALER'
is_layout = VALUE #( zebra = abap_true cwidth_opt =
abap_true sel_mode = 'A' )
* excp_fname = 'ICON' )
CHANGING
it_outtab = it_popupalv
it_fieldcatalog = lt_fieldcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4 ).

ENDMODULE.
MODULE user_command_9007 INPUT.

DATA:lv_message TYPE char100,


lw_list TYPE /dcsea/us_auto_alloc_dealer.
DATA:lv_timestamp TYPE string,
lv_werks TYPE werks_d,
timestamp TYPE rstimestmp.

DATA:lv_jobname LIKE tbtcjob-jobname,


lv_jobcount LIKE tbtcjob-jobcount,
lv_repetition_minutes TYPE btcpmin,
lv_immediate TYPE xfeld VALUE 'X',
lv_variant TYPE raldb-variant,
lw_print_parameters TYPE pri_params,
lv_servername TYPE btctgtsrvr-srvname,
lt_servers TYPE STANDARD TABLE OF msxxlist.
DATA:lv_vguid TYPE vlc_guid,
lw_messages TYPE LINE OF vlch_mssg_pt.
DATA: wf_garg TYPE seqg3-garg,
wf_subrc TYPE sy-subrc,
tb_enq TYPE STANDARD TABLE OF seqg3.

CONSTANTS: co_2 TYPE char1 VALUE '2'.

FIELD-SYMBOLS:<lw_output> TYPE /dcsea/us_auto_alloc_dealer.


REFRESH :lt_servers[].
CLEAR:lv_servername.
CALL FUNCTION 'TH_SERVER_LIST'
TABLES
list = lt_servers
* LIST_IPV6 =
EXCEPTIONS
no_server_list = 1
OTHERS = 2.
IF sy-subrc = 0.
READ TABLE lt_servers INTO DATA(lw_server) INDEX 1.
lv_servername = lw_server-name.
ENDIF.

CASE sy-ucomm.
WHEN 'ABORT' OR 'CANCEL'.
CLEAR:lv_reg_from,lv_reg_to. " RAMMANE
LEAVE TO SCREEN 0.
LEAVE TO LIST-PROCESSING.
CLEAR:gv_pf.

WHEN 'CONTINUE'.
CLEAR:gv_pf.
DELETE gt_output_temp WHERE region_total_cars = '0'.
SORT gt_output_temp BY region.
DELETE ADJACENT DUPLICATES FROM gt_output_temp COMPARING region.

CASE /dcsea/us_allocation_inf_popup-allocation_to.
WHEN '1'.
lv_spart = 'RH'.
WHEN '2'.
lv_spart = '01'.
ENDCASE.
IF gv_local IS NOT INITIAL." Domestic vehicle found
REFRESH :it_r2_data[].
ENDIF.
*Submit batch if the records are more than 50 to perform action
IF gv_rcount GT 50.
lv_werks = s_werks-low.
EXPORT et_vlcvehicle TO DATABASE indx(zk) ID 'VEC'.
EXPORT it_popupalv TO DATABASE indx(zl) ID 'OUTPUT'.
EXPORT it_r1_data TO DATABASE indx(zm) ID 'R1'.
EXPORT it_r2_data TO DATABASE indx(zn) ID 'R2'.
EXPORT /dcsea/us_allocation_inf_popup TO DATABASE indx(zp) ID 'POP'.
EXPORT lv_werks TO DATABASE indx(zo) ID 'WRK'.
WAIT UP TO 5 SECONDS .
CONCATENATE sy-datlo sy-timlo+0(4) INTO lv_timestamp.
CONDENSE lv_timestamp. .

CONSTANTS:co_bg_program TYPE progname VALUE '/DCSEA/US_AUTOALLOC_JOB'.


CONCATENATE sy-uname '_' 'MASS_ALLOC_' lv_timestamp INTO lv_jobname.
CLEAR:lv_jobcount.

** create a job
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = lv_jobname
IMPORTING
jobcount = lv_jobcount
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.

IF sy-subrc <> 0.
MESSAGE e121(smi_general)."Error creating job
EXIT.
ENDIF.
*
CALL FUNCTION 'JOB_SUBMIT'
EXPORTING
authcknam = sy-uname
jobcount = lv_jobcount
jobname = lv_jobname
report = co_bg_program
variant = lv_variant
EXCEPTIONS
bad_priparams = 1
bad_xpgflags = 2
invalid_jobdata = 3
jobname_missing = 4
job_notex = 5
job_submit_failed = 6
lock_failed = 7
program_missing = 8
prog_abap_and_extpg_set = 9
OTHERS = 10.
IF sy-subrc <> 0.
MESSAGE e122(smi_general)."Error on job submission
ENDIF.
*
**lv_repetition_minutes = fdelay. "re-run every fdelay minutes
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = lv_jobcount
jobname = lv_jobname
prdmins = lv_repetition_minutes
strtimmed = lv_immediate
targetserver = lv_servername
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
invalid_target = 8
OTHERS = 9.
IF sy-subrc <> 0.
MESSAGE e123(smi_general)."Error closing job
ENDIF.
IF sy-subrc = 0.
MESSAGE s601(/dcsea/us_msg) WITH lv_jobname."success message
* DELETE FROM DATABASE indx(zk) ID 'VEC'.
* DELETE FROM DATABASE indx(zl) ID 'OUTPUT'.
* DELETE FROM DATABASE indx(zm) ID 'R1'.
* DELETE FROM DATABASE indx(zn) ID 'R2'.
* DELETE FROM DATABASE indx(zp) ID 'POP'.
* DELETE FROM DATABASE indx(zo) ID 'WRK'.
SET SCREEN 9006.
sy-ucomm = 'ABORT'.
ENDIF.

CLEAR:lv_timestamp ,lv_jobname,lv_jobcount.
ELSE.
************************************************************

IF it_r1_data[] IS NOT INITIAL.

LOOP AT it_r1_data INTO wa_r1_data.


CLEAR : ls_vlcactdata,ls_vlcdiavehi.
REFRESH : lt_vlcdiavehi,lt_messages.
ls_vlcactdata = CORRESPONDING #( wa_r1_data ).
ls_vlcdiavehi = CORRESPONDING #( wa_r1_data ).

ls_vlcdiavehi-zz_uname = sy-uname."RAMMANE
APPEND ls_vlcdiavehi TO lt_vlcdiavehi.
CLEAR : ls_vlcdiavehi.
CLEAR: ls_vlcactdata-ernam.

CALL FUNCTION 'VELO09_SET_ACTION'


EXPORTING
incoming_action_iv = 'ZDAL'
commit_iv = co_s
TABLES
vlcdiavehi_ct = lt_vlcdiavehi
vlch_mssg_et = lt_messages[]
CHANGING
vlcactdata_cs = ls_vlcactdata
EXCEPTIONS
action_not_defined = 1
no_authority = 2
interlinked_action_error = 3
crea_prepare_failed = 4
action_not_performed = 5
action_not_compl_performed = 6
OTHERS = 7.

"Dequeue vehicle
CALL FUNCTION 'VELO09_VEHICLE_DEQUEUE'
TABLES
vlcdiavehi_it = lt_vlcdiavehi[].

READ TABLE lt_messages INTO DATA(wa_messages) WITH KEY msgty = 'E'.


IF sy-subrc NE 0 .
COMMIT WORK.
REFRESH : lt_messages.

READ TABLE it_popupalv1 INTO DATA(wa_region) WITH KEY vhcle =


wa_r1_data-vhcle.
IF sy-subrc EQ 0 .
ls_vlcactdata-kunnr = wa_region-dealer.
ENDIF.

ls_vlcactdata-zz_vehusg = /dcsea/us_allocation_inf_popup-
vehusg.
* ls_vlcactdata-zz_alloc_type = lv_spart.
ls_vlcactdata-zz_reason_code = /dcsea/us_allocation_inf_popup-
reason_code.
ls_vlcactdata-zz_uname = sy-uname.
CLEAR: ls_vlcactdata-ernam.

CALL FUNCTION 'VELO09_SET_ACTION'


EXPORTING
incoming_action_iv = 'ZADL'
commit_iv = co_s
TABLES
vlcdiavehi_ct = lt_vlcdiavehi
vlch_mssg_et = lt_messages[]
CHANGING
vlcactdata_cs = ls_vlcactdata
EXCEPTIONS
action_not_defined = 1
no_authority = 2
interlinked_action_error = 3
crea_prepare_failed = 4
action_not_performed = 5
action_not_compl_performed = 6
OTHERS = 7.

"Dequeue vehicle
CALL FUNCTION 'VELO09_VEHICLE_DEQUEUE'
TABLES
vlcdiavehi_it = lt_vlcdiavehi[].
READ TABLE lt_messages INTO wa_messages WITH KEY msgty = 'E'.
IF sy-subrc NE 0 .
READ TABLE it_popupalv1 ASSIGNING <lw_output> WITH KEY vhcle =
wa_r1_data-vhcle.
<lw_output>-status = 'Assignment Success'(016).
COMMIT WORK.
ELSE.
PERFORM output_msg_prepare USING wa_messages
CHANGING lv_message.
READ TABLE it_popupalv1 ASSIGNING <lw_output> WITH KEY vhcle =
wa_r1_data-vhcle.
IF sy-subrc = 0.
<lw_output>-status = lv_message.
ENDIF.
REFRESH : lt_messages.
ENDIF..
ELSE.

PERFORM output_msg_prepare USING wa_messages


CHANGING lv_message.
READ TABLE it_popupalv1 ASSIGNING <lw_output> WITH KEY vhcle =
wa_r1_data-vhcle.
IF sy-subrc = 0.
<lw_output>-status = lv_message.
ENDIF.
REFRESH:lt_messages.
ENDIF..
CLEAR:lv_message.
ENDLOOP.
ENDIF.
IF it_r2_data[] IS NOT INITIAL.
LOOP AT it_r2_data INTO wa_r2_data.
CLEAR : ls_vlcactdata,ls_vlcdiavehi.
REFRESH : lt_vlcdiavehi,lt_messages.
READ TABLE et_vlcvehicle INTO DATA(lw_vehicle) WITH KEY vhcex =
wa_r2_data-vhcex.
ls_vlcactdata = CORRESPONDING #( lw_vehicle ).
ls_vlcactdata-zz_port_of_dest = wa_r2_data-zz_port_of_dest.
ls_vlcdiavehi = CORRESPONDING #( lw_vehicle ).
ls_vlcactdata-zz_uname = sy-uname.
APPEND ls_vlcdiavehi TO lt_vlcdiavehi.
CLEAR : ls_vlcdiavehi.
CLEAR: ls_vlcactdata-ernam.
* Begin of change for handling locking issue
lv_vguid = wa_r2_data-vguid.
IF lv_vguid IS NOT INITIAL.
CALL FUNCTION 'ENQUEUE_E_VLCVEHICLE'
EXPORTING
mode_vlcvehicle = 'E'
mandt = sy-mandt
vguid = lv_vguid
_scope = co_2
_wait = abap_true
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
lw_messages-msgty = 'E'.
lw_messages-msgid = sy-msgid.
lw_messages-msgno = sy-msgno.
lw_messages-msgv1 = sy-msgv1.
lw_messages-msgv2 = sy-msgv2.
lw_messages-msgv3 = sy-msgv3.
lw_messages-msgv4 = sy-msgv4.
PERFORM fr_output_msg_prepare USING lw_messages
CHANGING lv_message.
READ TABLE it_popupalv1 ASSIGNING <lw_output> WITH KEY vhcle =
wa_r1_data-vhcle.
IF sy-subrc = 0.
<lw_output>-status = lv_message.
ENDIF.
CLEAR:lw_messages.
CONTINUE.
ENDIF.
ENDIF.
* End of change for handling locking issue
CALL FUNCTION 'VELO09_SET_ACTION'
EXPORTING
incoming_action_iv = 'ZPOD'
commit_iv = co_s
TABLES
vlcdiavehi_ct = lt_vlcdiavehi
vlch_mssg_et = lt_messages[]
CHANGING
vlcactdata_cs = ls_vlcactdata
EXCEPTIONS
action_not_defined = 1
no_authority = 2
interlinked_action_error = 3
crea_prepare_failed = 4
action_not_performed = 5
action_not_compl_performed = 6
OTHERS = 7.

"Dequeue vehicle
CALL FUNCTION 'VELO09_VEHICLE_DEQUEUE'
TABLES
vlcdiavehi_it = lt_vlcdiavehi[].

READ TABLE lt_messages INTO wa_messages WITH KEY msgty = 'E'.


IF sy-subrc NE 0 .
REFRESH:lt_messages[].
COMMIT WORK.
* ZDAL****
READ TABLE it_popupalv1 INTO DATA(lw_popupalv1) WITH KEY vhcle =
wa_r2_data-vhcle.
IF sy-subrc EQ 0 .
ls_vlcactdata-zz_vehusg = /dcsea/us_allocation_inf_popup-
vehusg.
* ls_vlcactdata-zz_alloc_type = lv_spart.
ls_vlcactdata-zz_reason_code = /dcsea/us_allocation_inf_popup-
reason_code.
ls_vlcactdata-zz_uname = sy-uname.
CLEAR: ls_vlcactdata-ernam.
ENDIF.
* Begin of change for handling locking issue
lv_vguid = wa_r2_data-vguid.
CLEAR:wf_garg,wf_subrc.
REFRESH:tb_enq[].
CONCATENATE sy-mandt lv_vguid INTO wf_garg.
DO.
CALL FUNCTION 'ENQUEUE_READ'
EXPORTING
gname = 'VLCVEHICLE'
garg = wf_garg
guname = '*'
IMPORTING
subrc = wf_subrc
TABLES
enq = tb_enq
EXCEPTIONS
communication_failure = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc <> 0 OR wf_subrc NE 0.
WAIT UP TO 2 SECONDS.
ELSEIF sy-subrc = 0 OR wf_subrc = 0.
EXIT.
ENDIF.
ENDDO.

IF lv_vguid IS NOT INITIAL.


CALL FUNCTION 'ENQUEUE_E_VLCVEHICLE'
EXPORTING
mode_vlcvehicle = 'E'
mandt = sy-mandt
vguid = lv_vguid
_scope = co_2
_wait = abap_true
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
lw_messages-msgty = 'E'.
lw_messages-msgid = sy-msgid.
lw_messages-msgno = sy-msgno.
lw_messages-msgv1 = sy-msgv1.
lw_messages-msgv2 = sy-msgv2.
lw_messages-msgv3 = sy-msgv3.
lw_messages-msgv4 = sy-msgv4.
PERFORM fr_output_msg_prepare USING lw_messages
CHANGING lv_message.
READ TABLE it_popupalv1 ASSIGNING <lw_output> WITH KEY vhcle =
wa_r1_data-vhcle.
IF sy-subrc = 0.
<lw_output>-status = lv_message.
ENDIF.
CLEAR:lw_messages.
CONTINUE.
ENDIF.
ENDIF.
REFRESH:lt_vlcdiavehi[].
PERFORM fr_vehicle_details USING lv_vguid
CHANGING lt_vlcdiavehi.
* End of change for handling locking issue
CALL FUNCTION 'VELO09_SET_ACTION'
EXPORTING
incoming_action_iv = 'ZDAL'
commit_iv = co_s
TABLES
vlcdiavehi_ct = lt_vlcdiavehi
vlch_mssg_et = lt_messages[]
CHANGING
vlcactdata_cs = ls_vlcactdata
EXCEPTIONS
action_not_defined = 1
no_authority = 2
interlinked_action_error = 3
crea_prepare_failed = 4
action_not_performed = 5
action_not_compl_performed = 6
OTHERS = 7.
"Dequeue vehicle
CALL FUNCTION 'VELO09_VEHICLE_DEQUEUE'
TABLES
vlcdiavehi_it = lt_vlcdiavehi[].
READ TABLE lt_messages INTO wa_messages WITH KEY msgty = 'E'.
IF sy-subrc NE 0 .
COMMIT WORK.
REFRESH : lt_messages.
READ TABLE it_popupalv1 INTO lw_popupalv1 WITH KEY vhcle =
wa_r2_data-vhcle.
IF sy-subrc EQ 0 .
ls_vlcactdata-kunnr = lw_popupalv1-dealer.
* ls_vlcactdata-zz_alloc_type = lv_spart.
ls_vlcactdata-zz_vehusg = /dcsea/us_allocation_inf_popup-
vehusg.
ENDIF.
ls_vlcactdata-zz_reason_code = /dcsea/us_allocation_inf_popup-
reason_code.
ls_vlcactdata-zz_uname = sy-uname.
CLEAR: ls_vlcactdata-ernam.
*ZADL****
CALL FUNCTION 'VELO09_SET_ACTION'
EXPORTING
incoming_action_iv = 'ZADL'
commit_iv = co_s
TABLES
vlcdiavehi_ct = lt_vlcdiavehi
vlch_mssg_et = lt_messages[]
CHANGING
vlcactdata_cs = ls_vlcactdata
EXCEPTIONS
action_not_defined = 1
no_authority = 2
interlinked_action_error = 3
crea_prepare_failed = 4
action_not_performed = 5
action_not_compl_performed = 6
OTHERS = 7.

"Dequeue vehicle
CALL FUNCTION 'VELO09_VEHICLE_DEQUEUE'
TABLES
vlcdiavehi_it = lt_vlcdiavehi[].

READ TABLE lt_messages INTO wa_messages WITH KEY msgty = 'E'.


IF sy-subrc NE 0 .
READ TABLE it_popupalv1 ASSIGNING <lw_output> WITH KEY vhcle =
wa_r2_data-vhcle.
IF sy-subrc = 0.
<lw_output>-status = 'Assignment Success'(016).
ENDIF.
REFRESH:lt_messages[].
COMMIT WORK.
ELSE.
PERFORM output_msg_prepare USING wa_messages
CHANGING lv_message.
READ TABLE it_popupalv1 ASSIGNING <lw_output> WITH KEY vhcle =
wa_r2_data-vhcle.
IF sy-subrc = 0.
<lw_output>-status = lv_message.
ENDIF.
REFRESH:lt_messages[].
ENDIF.
ELSE. "
PERFORM output_msg_prepare USING wa_messages
CHANGING lv_message.
READ TABLE it_popupalv1 ASSIGNING <lw_output> WITH KEY vhcle =
wa_r2_data-vhcle.
IF sy-subrc = 0.
<lw_output>-status = lv_message.
ENDIF.
ENDIF. "
ELSE.
PERFORM output_msg_prepare USING wa_messages
CHANGING lv_message.
READ TABLE it_popupalv1 ASSIGNING <lw_output> WITH KEY vhcle =
wa_r2_data-vhcle.
IF sy-subrc = 0.
<lw_output>-status = lv_message.
ENDIF.
REFRESH:lt_messages[].
ENDIF.
CLEAR:lv_message,lw_vehicle.
ENDLOOP.
ENDIF.
gv_pf = 'X'.
ENDIF.

WHEN OTHERS.
CLEAR:lv_reg_from,lv_reg_to.
CLEAR:gv_pf.
LEAVE TO SCREEN 0.
LEAVE TO LIST-PROCESSING.

ENDCASE.

ENDMODULE.
*&---------------------------------------------------------------------*
*& Form OUTPUT_MSG_PREPARE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WA_MESSAGE text
* <--P_LV_MESSAGE text
*----------------------------------------------------------------------*
FORM output_msg_prepare USING uw_message TYPE vlch_mssg_ps
CHANGING cv_message TYPE char100.

DATA:lv_msg_id TYPE t100-arbgb,


lv_msgno TYPE t100-msgnr,
lv_msg1 TYPE mssg_ret-msgv1,
lv_msg2 TYPE mssg_ret-msgv2,
lv_msg3 TYPE mssg_ret-msgv3,
lv_msg4 TYPE mssg_ret-msgv4.

lv_msg_id = uw_message-msgid.
lv_msgno = uw_message-msgno.
lv_msg1 = uw_message-msgv1.
lv_msg2 = uw_message-msgv2.
lv_msg3 = uw_message-msgv3.
lv_msg4 = uw_message-msgv4.

CALL FUNCTION 'MESSAGE_PREPARE'


EXPORTING
language = sy-langu
msg_id = lv_msg_id
msg_no = lv_msgno
msg_var1 = lv_msg1
msg_var2 = lv_msg2
msg_var3 = lv_msg3
msg_var4 = lv_msg4
IMPORTING
msg_text = cv_message
EXCEPTIONS
function_not_completed = 1
message_not_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FR_OUTPUT_MSG_PREPARE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WA_MESSAGES text
* <--P_LV_MESSAGE text
*----------------------------------------------------------------------*
FORM fr_output_msg_prepare USING uw_message TYPE vlch_mssg_ps
CHANGING cv_message TYPE char100.
DATA:lv_msg_id TYPE t100-arbgb,
lv_msgno TYPE t100-msgnr,
lv_msg1 TYPE mssg_ret-msgv1,
lv_msg2 TYPE mssg_ret-msgv2,
lv_msg3 TYPE mssg_ret-msgv3,
lv_msg4 TYPE mssg_ret-msgv4.
lv_msg_id = uw_message-msgid.
lv_msgno = uw_message-msgno.
lv_msg1 = uw_message-msgv1.
lv_msg2 = uw_message-msgv2.
lv_msg3 = uw_message-msgv3.
lv_msg4 = uw_message-msgv4.

CALL FUNCTION 'MESSAGE_PREPARE'


EXPORTING
language = sy-langu
msg_id = lv_msg_id
msg_no = lv_msgno
msg_var1 = lv_msg1
msg_var2 = lv_msg2
msg_var3 = lv_msg3
msg_var4 = lv_msg4
IMPORTING
msg_text = cv_message
EXCEPTIONS
function_not_completed = 1
message_not_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FR_VEHICLE_DETAILS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LV_VGUID text
* <--P_LT_VLCDIAVEHI text
*----------------------------------------------------------------------*
FORM fr_vehicle_details USING uv_vguid TYPE vlc_guid
CHANGING ct_vlcdiavehi TYPE tt_vlcdiavehi.
DATA:lw_vlcvehicle TYPE vlcvehicle,
lw_vlcdiavehi TYPE ty_vlcdiavehi.
CLEAR:lw_vlcvehicle.
* Fetch Data from VLCVEHICLE
SELECT * FROM vlcvehicle UP TO 1 ROWS INTO lw_vlcvehicle
WHERE vguid = uv_vguid.
ENDSELECT.
* Move data to relevant structure
MOVE-CORRESPONDING lw_vlcvehicle TO lw_vlcdiavehi.
APPEND lw_vlcdiavehi TO ct_vlcdiavehi.
CLEAR : lw_vlcdiavehi.
ENDFORM.

You might also like