Files
abap-llm/tasks_gen/train/G1055/faulty/m2_garden_rent.clas.abap

95 lines
2.7 KiB
ABAP

CLASS {{p}}garden_rent DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES ty_plot_type TYPE c LENGTH 4.
TYPES ty_reason TYPE c LENGTH 10.
TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
TYPES:
BEGIN OF ty_result,
reason TYPE ty_reason,
rent TYPE ty_amount,
END OF ty_result.
CONSTANTS:
BEGIN OF c_reason,
ok TYPE ty_reason VALUE 'OK',
plot TYPE ty_reason VALUE 'PLOT',
area TYPE ty_reason VALUE 'AREA',
END OF c_reason.
METHODS calculate
IMPORTING iv_plot_type TYPE ty_plot_type
iv_area TYPE i
iv_water TYPE abap_bool
iv_member TYPE abap_bool
RETURNING VALUE(rs_result) TYPE ty_result.
PRIVATE SECTION.
CONSTANTS:
c_min_area TYPE i VALUE 10,
c_max_area TYPE i VALUE 500,
c_water_units TYPE i VALUE 120000,
c_member_percent TYPE i VALUE 85,
c_scale TYPE i VALUE 100,
c_half_cent TYPE i VALUE 50,
c_min_rent_cents TYPE i VALUE 1000,
c_cent_factor TYPE ty_amount VALUE '0.01'.
METHODS is_valid_plot_type
IMPORTING iv_plot_type TYPE ty_plot_type
RETURNING VALUE(rv_valid) TYPE abap_bool.
METHODS rate_units
IMPORTING iv_plot_type TYPE ty_plot_type
RETURNING VALUE(rv_units) TYPE i.
METHODS to_amount
IMPORTING iv_cents TYPE i
RETURNING VALUE(rv_rent) TYPE ty_amount.
ENDCLASS.
CLASS {{p}}garden_rent IMPLEMENTATION.
METHOD calculate.
IF is_valid_plot_type( iv_plot_type ) = abap_false.
rs_result-reason = c_reason-plot.
RETURN.
ENDIF.
IF iv_area < c_min_area OR iv_area > c_max_area.
rs_result-reason = c_reason-area.
RETURN.
ENDIF.
DATA(lv_units) = iv_area * rate_units( iv_plot_type ).
IF iv_water = abap_true.
lv_units = lv_units + c_water_units.
ENDIF.
IF iv_member = abap_false.
lv_units = ( lv_units * c_member_percent ) DIV c_scale.
ENDIF.
DATA(lv_cents) = ( lv_units + c_half_cent ) DIV c_scale.
IF lv_cents < c_min_rent_cents.
lv_cents = c_min_rent_cents.
ENDIF.
rs_result-rent = to_amount( lv_cents ).
rs_result-reason = c_reason-ok.
ENDMETHOD.
METHOD is_valid_plot_type.
CASE to_upper( iv_plot_type ).
WHEN 'STD' OR 'PREM' OR 'BED'.
rv_valid = abap_true.
ENDCASE.
ENDMETHOD.
METHOD rate_units.
CASE to_upper( iv_plot_type ).
WHEN 'STD'.
rv_units = 3500.
WHEN 'PREM'.
rv_units = 6000.
WHEN 'BED'.
rv_units = 9000.
ENDCASE.
ENDMETHOD.
METHOD to_amount.
DATA(lv_cents) = CONV ty_amount( iv_cents ).
rv_rent = lv_cents * c_cent_factor.
ENDMETHOD.
ENDCLASS.