Files
abap-llm/tasks_gen/eval/G0148/faulty/m4_trade_in_valuer.clas.abap

120 lines
4.1 KiB
ABAP

CLASS {{p}}trade_in_valuer DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES {{p}}if_trade_in.
PRIVATE SECTION.
CONSTANTS:
c_base_premium TYPE {{p}}if_trade_in=>ty_value VALUE 30000,
c_base_volume TYPE {{p}}if_trade_in=>ty_value VALUE 20000,
c_base_budget TYPE {{p}}if_trade_in=>ty_value VALUE 12000,
c_min_value TYPE {{p}}if_trade_in=>ty_value VALUE 500,
c_max_age TYPE i VALUE 600,
c_max_mileage TYPE i VALUE 1000000,
c_km_step TYPE i VALUE 10000,
c_percent TYPE i VALUE 100.
METHODS is_unknown_brand
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
RETURNING VALUE(rv_unknown) TYPE abap_bool.
METHODS is_unknown_grade
IMPORTING iv_grade TYPE {{p}}if_trade_in=>ty_grade
RETURNING VALUE(rv_unknown) TYPE abap_bool.
METHODS valuation
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
iv_grade TYPE {{p}}if_trade_in=>ty_grade
iv_age_months TYPE i
iv_mileage TYPE i
RETURNING VALUE(rv_value) TYPE {{p}}if_trade_in=>ty_value.
METHODS base_value
IMPORTING iv_brand TYPE {{p}}if_trade_in=>ty_brand
RETURNING VALUE(rv_base) TYPE {{p}}if_trade_in=>ty_value.
METHODS mileage_blocks
IMPORTING iv_mileage TYPE i
RETURNING VALUE(rv_blocks) TYPE i.
METHODS grade_factor
IMPORTING iv_grade TYPE {{p}}if_trade_in=>ty_grade
RETURNING VALUE(rv_factor) TYPE i.
ENDCLASS.
CLASS {{p}}trade_in_valuer IMPLEMENTATION.
METHOD {{p}}if_trade_in~assess.
IF is_unknown_brand( iv_brand ).
rs_result-reason = {{p}}if_trade_in=>c_reason-brand.
RETURN.
ENDIF.
IF is_unknown_grade( iv_grade ).
rs_result-reason = {{p}}if_trade_in=>c_reason-grade.
RETURN.
ENDIF.
IF iv_age_months < 0 OR iv_age_months > c_max_age.
rs_result-reason = {{p}}if_trade_in=>c_reason-age.
RETURN.
ENDIF.
IF iv_mileage < 0 OR iv_mileage > c_max_mileage.
rs_result-reason = {{p}}if_trade_in=>c_reason-mileage.
RETURN.
ENDIF.
rs_result-amount = valuation( iv_brand = iv_brand
iv_grade = iv_grade
iv_age_months = iv_age_months
iv_mileage = iv_mileage ).
rs_result-reason = {{p}}if_trade_in=>c_reason-ok.
ENDMETHOD.
METHOD is_unknown_brand.
rv_unknown = xsdbool( iv_brand <> {{p}}if_trade_in=>c_brand-premium
AND iv_brand <> {{p}}if_trade_in=>c_brand-volume
AND iv_brand <> {{p}}if_trade_in=>c_brand-budget ).
ENDMETHOD.
METHOD is_unknown_grade.
rv_unknown = xsdbool( iv_grade <> {{p}}if_trade_in=>c_grade-a
AND iv_grade <> {{p}}if_trade_in=>c_grade-b
AND iv_grade <> {{p}}if_trade_in=>c_grade-c
AND iv_grade <> {{p}}if_trade_in=>c_grade-d ).
ENDMETHOD.
METHOD valuation.
DATA(lv_base) = base_value( iv_brand ).
DATA(lv_blocks) = mileage_blocks( iv_mileage ).
DATA(lv_value) = lv_base
+ lv_base * iv_age_months / c_percent
- lv_base * lv_blocks / c_percent.
lv_value = lv_value * grade_factor( iv_grade ) / c_percent.
IF lv_value < c_min_value.
rv_value = c_min_value.
ELSE.
rv_value = lv_value.
ENDIF.
ENDMETHOD.
METHOD base_value.
CASE iv_brand.
WHEN {{p}}if_trade_in=>c_brand-premium.
rv_base = c_base_premium.
WHEN {{p}}if_trade_in=>c_brand-volume.
rv_base = c_base_volume.
WHEN OTHERS.
rv_base = c_base_budget.
ENDCASE.
ENDMETHOD.
METHOD mileage_blocks.
rv_blocks = iv_mileage DIV c_km_step.
ENDMETHOD.
METHOD grade_factor.
CASE iv_grade.
WHEN {{p}}if_trade_in=>c_grade-a.
rv_factor = 110.
WHEN {{p}}if_trade_in=>c_grade-c.
rv_factor = 80.
WHEN {{p}}if_trade_in=>c_grade-d.
rv_factor = 60.
WHEN OTHERS.
rv_factor = 100.
ENDCASE.
ENDMETHOD.
ENDCLASS.