Files
abap-llm/tasks_gen/train/G1083/faulty/m3_glaz_calc.clas.abap
2026-10-05 18:02:52 +02:00

55 lines
1.5 KiB
ABAP

CLASS {{p}}glaz_calc DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
METHODS calculate
IMPORTING
iv_width_mm TYPE i
iv_height_mm TYPE i
iv_glass TYPE string
iv_urgent TYPE abap_bool
RETURNING
VALUE(rv_fee) TYPE decfloat34
RAISING
cx_abap_invalid_value.
PRIVATE SECTION.
CONSTANTS c_area_divisor TYPE decfloat34 VALUE '1000000'.
CONSTANTS c_min_fee TYPE decfloat34 VALUE '35.00'.
CONSTANTS c_max_fee TYPE decfloat34 VALUE '480.00'.
CONSTANTS c_urgent_factor TYPE decfloat34 VALUE '1.5'.
ENDCLASS.
CLASS {{p}}glaz_calc IMPLEMENTATION.
METHOD calculate.
IF iv_width_mm <= 0 OR iv_height_mm <= 0.
RAISE EXCEPTION TYPE cx_abap_invalid_value.
ENDIF.
DATA lv_rate TYPE decfloat34.
CASE iv_glass.
WHEN 'SIMPLE'.
lv_rate = 45.
WHEN 'SAFETY'.
lv_rate = 90.
WHEN 'INSULATED'.
lv_rate = 140.
WHEN OTHERS.
RAISE EXCEPTION TYPE cx_abap_invalid_value.
ENDCASE.
DATA(lv_area) = CONV decfloat34( iv_width_mm ) * iv_height_mm / c_area_divisor.
DATA(lv_fee) = lv_area * lv_rate.
IF lv_fee < c_min_fee.
lv_fee = c_min_fee.
ENDIF.
IF iv_urgent = abap_true.
lv_fee = lv_fee * c_urgent_factor.
ENDIF.
IF lv_fee <= c_max_fee.
lv_fee = c_max_fee.
ENDIF.
rv_fee = round( val = lv_fee dec = 2 mode = cl_abap_math=>round_half_up ).
ENDMETHOD.
ENDCLASS.