Stage 2 summary at 50 accepted trajectories
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
137
tasks_gen/train/G1082/faulty/m0_climb_pricer.clas.abap
Normal file
137
tasks_gen/train/G1082/faulty/m0_climb_pricer.clas.abap
Normal file
@@ -0,0 +1,137 @@
|
||||
CLASS {{p}}climb_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_entry TYPE c LENGTH 1.
|
||||
TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
|
||||
TYPES:
|
||||
BEGIN OF ty_session,
|
||||
entry_type TYPE ty_entry,
|
||||
hours TYPE i,
|
||||
climbers TYPE i,
|
||||
equipment TYPE abap_bool,
|
||||
member TYPE abap_bool,
|
||||
visits TYPE i,
|
||||
END OF ty_session.
|
||||
TYPES:
|
||||
BEGIN OF ty_result,
|
||||
base TYPE ty_amount,
|
||||
surcharge TYPE ty_amount,
|
||||
discount TYPE ty_amount,
|
||||
total TYPE ty_amount,
|
||||
message TYPE string,
|
||||
END OF ty_result.
|
||||
METHODS price
|
||||
IMPORTING is_session TYPE ty_session
|
||||
RETURNING VALUE(rs_result) TYPE ty_result.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_entry,
|
||||
adult TYPE ty_entry VALUE 'A',
|
||||
youth TYPE ty_entry VALUE 'Y',
|
||||
family TYPE ty_entry VALUE 'F',
|
||||
END OF c_entry.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_message,
|
||||
unknown_entry TYPE string VALUE 'UNKNOWN ENTRY TYPE',
|
||||
invalid_hours TYPE string VALUE 'INVALID HOURS',
|
||||
invalid_climbers TYPE string VALUE 'INVALID CLIMBERS',
|
||||
END OF c_message.
|
||||
CONSTANTS:
|
||||
c_min_hours TYPE i VALUE 1,
|
||||
c_max_hours TYPE i VALUE 6,
|
||||
c_min_climbers TYPE i VALUE 1,
|
||||
c_max_climbers TYPE i VALUE 10,
|
||||
c_group_size TYPE i VALUE 6,
|
||||
c_group_fee TYPE ty_amount VALUE '15.00',
|
||||
c_equipment_fee TYPE ty_amount VALUE '4.00',
|
||||
c_top_visits TYPE i VALUE 10,
|
||||
c_mid_visits TYPE i VALUE 3,
|
||||
c_member_percent TYPE i VALUE 15,
|
||||
c_top_percent TYPE i VALUE 20,
|
||||
c_mid_percent TYPE i VALUE 5,
|
||||
c_percent TYPE i VALUE 100,
|
||||
c_rate_adult TYPE ty_amount VALUE '9.00',
|
||||
c_rate_youth TYPE ty_amount VALUE '6.00',
|
||||
c_rate_family TYPE ty_amount VALUE '7.00'.
|
||||
|
||||
METHODS check_session
|
||||
IMPORTING is_session TYPE ty_session
|
||||
RETURNING VALUE(rv_message) TYPE string.
|
||||
METHODS hourly_rate
|
||||
IMPORTING is_session TYPE ty_session
|
||||
RETURNING VALUE(rv_rate) TYPE ty_amount.
|
||||
METHODS base_price
|
||||
IMPORTING is_session TYPE ty_session
|
||||
RETURNING VALUE(rv_base) TYPE ty_amount.
|
||||
METHODS extra_charge
|
||||
IMPORTING is_session TYPE ty_session
|
||||
RETURNING VALUE(rv_surcharge) TYPE ty_amount.
|
||||
METHODS rebate
|
||||
IMPORTING iv_gross TYPE ty_amount
|
||||
is_session TYPE ty_session
|
||||
RETURNING VALUE(rv_discount) TYPE ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}climb_pricer IMPLEMENTATION.
|
||||
METHOD price.
|
||||
DATA(lv_message) = check_session( is_session ).
|
||||
IF lv_message IS NOT INITIAL.
|
||||
rs_result-message = lv_message.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
rs_result-base = base_price( is_session ).
|
||||
rs_result-surcharge = extra_charge( is_session ).
|
||||
DATA lv_gross TYPE ty_amount.
|
||||
lv_gross = rs_result-base + rs_result-surcharge.
|
||||
rs_result-discount = rebate( iv_gross = lv_gross is_session = is_session ).
|
||||
rs_result-total = lv_gross - rs_result-discount.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_session.
|
||||
IF is_session-entry_type = c_entry-adult
|
||||
AND is_session-entry_type <> c_entry-youth
|
||||
AND is_session-entry_type <> c_entry-family.
|
||||
rv_message = c_message-unknown_entry.
|
||||
ELSEIF is_session-hours < c_min_hours OR is_session-hours > c_max_hours.
|
||||
rv_message = c_message-invalid_hours.
|
||||
ELSEIF is_session-climbers < c_min_climbers OR is_session-climbers > c_max_climbers.
|
||||
rv_message = c_message-invalid_climbers.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD hourly_rate.
|
||||
CASE is_session-entry_type.
|
||||
WHEN c_entry-adult.
|
||||
rv_rate = c_rate_adult.
|
||||
WHEN c_entry-youth.
|
||||
rv_rate = c_rate_youth.
|
||||
WHEN OTHERS.
|
||||
rv_rate = c_rate_family.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD base_price.
|
||||
rv_base = is_session-hours * hourly_rate( is_session ) * is_session-climbers.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD extra_charge.
|
||||
IF is_session-equipment = abap_true.
|
||||
rv_surcharge = is_session-climbers * c_equipment_fee.
|
||||
ENDIF.
|
||||
IF is_session-climbers >= c_group_size.
|
||||
rv_surcharge = rv_surcharge + c_group_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rebate.
|
||||
IF is_session-member = abap_true.
|
||||
rv_discount = iv_gross * c_member_percent / c_percent.
|
||||
ELSEIF is_session-visits >= c_top_visits.
|
||||
rv_discount = iv_gross * c_top_percent / c_percent.
|
||||
ELSEIF is_session-visits >= c_mid_visits.
|
||||
rv_discount = iv_gross * c_mid_percent / c_percent.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user