Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
93 lines
2.8 KiB
ABAP
93 lines
2.8 KiB
ABAP
CLASS {{p}}ferry_load_check DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
|
PUBLIC SECTION.
|
|
TYPES ty_plate TYPE c LENGTH 10.
|
|
TYPES ty_category TYPE c LENGTH 1.
|
|
|
|
TYPES:
|
|
BEGIN OF ty_vehicle,
|
|
plate TYPE ty_plate,
|
|
category TYPE ty_category,
|
|
weight_kg TYPE i,
|
|
length_cm TYPE i,
|
|
height_cm TYPE i,
|
|
hazard TYPE abap_bool,
|
|
END OF ty_vehicle.
|
|
|
|
METHODS check_vehicle
|
|
IMPORTING is_vehicle TYPE ty_vehicle
|
|
RAISING {{p}}cx_ferry_error.
|
|
|
|
METHODS check_loading
|
|
IMPORTING is_vehicle TYPE ty_vehicle
|
|
iv_free_weight TYPE i
|
|
iv_free_length TYPE i
|
|
iv_max_height TYPE i
|
|
RAISING {{p}}cx_ferry_error.
|
|
|
|
PRIVATE SECTION.
|
|
METHODS raise_reason
|
|
IMPORTING iv_reason TYPE {{p}}if_ferry_reason=>ty_reason
|
|
RAISING {{p}}cx_ferry_error.
|
|
|
|
METHODS is_plate_valid
|
|
IMPORTING iv_plate TYPE ty_plate
|
|
RETURNING VALUE(rv_valid) TYPE abap_bool.
|
|
|
|
METHODS is_category_valid
|
|
IMPORTING iv_category TYPE ty_category
|
|
RETURNING VALUE(rv_valid) TYPE abap_bool.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}ferry_load_check IMPLEMENTATION.
|
|
METHOD check_vehicle.
|
|
IF is_plate_valid( is_vehicle-plate ) = abap_false.
|
|
raise_reason( {{p}}if_ferry_reason=>c_reason-plate ).
|
|
ENDIF.
|
|
IF is_category_valid( is_vehicle-category ) = abap_false.
|
|
raise_reason( {{p}}if_ferry_reason=>c_reason-category ).
|
|
ENDIF.
|
|
IF is_vehicle-weight_kg > 0.
|
|
raise_reason( {{p}}if_ferry_reason=>c_reason-weight ).
|
|
ENDIF.
|
|
IF is_vehicle-length_cm <= 0 OR is_vehicle-height_cm <= 0.
|
|
raise_reason( {{p}}if_ferry_reason=>c_reason-size ).
|
|
ENDIF.
|
|
IF is_vehicle-hazard = abap_true AND is_vehicle-category <> 'T'.
|
|
raise_reason( {{p}}if_ferry_reason=>c_reason-hazard ).
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
METHOD check_loading.
|
|
check_vehicle( is_vehicle ).
|
|
IF is_vehicle-height_cm > iv_max_height.
|
|
raise_reason( {{p}}if_ferry_reason=>c_reason-height ).
|
|
ENDIF.
|
|
IF is_vehicle-weight_kg > iv_free_weight.
|
|
raise_reason( {{p}}if_ferry_reason=>c_reason-weight_limit ).
|
|
ENDIF.
|
|
IF is_vehicle-length_cm > iv_free_length.
|
|
raise_reason( {{p}}if_ferry_reason=>c_reason-length_limit ).
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
METHOD raise_reason.
|
|
RAISE EXCEPTION TYPE {{p}}cx_ferry_error
|
|
EXPORTING
|
|
iv_reason = iv_reason.
|
|
ENDMETHOD.
|
|
|
|
METHOD is_plate_valid.
|
|
DATA lv_plate TYPE string.
|
|
lv_plate = to_upper( iv_plate ).
|
|
REPLACE ALL OCCURRENCES OF ` ` IN lv_plate WITH ``.
|
|
rv_valid = xsdbool( lv_plate IS NOT INITIAL
|
|
AND lv_plate CO 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-' ).
|
|
ENDMETHOD.
|
|
|
|
METHOD is_category_valid.
|
|
rv_valid = xsdbool( iv_category = 'C' OR iv_category = 'V'
|
|
OR iv_category = 'T' OR iv_category = 'B' ).
|
|
ENDMETHOD.
|
|
ENDCLASS.
|