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

153 lines
4.3 KiB
ABAP

CLASS {{p}}shred_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES ty_size TYPE i.
TYPES ty_service TYPE c LENGTH 1.
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
CONSTANTS:
BEGIN OF c_size,
small TYPE ty_size VALUE 60,
large TYPE ty_size VALUE 240,
END OF c_size.
CONSTANTS:
BEGIN OF c_service,
plant TYPE ty_service VALUE 'P',
onsite TYPE ty_service VALUE 'O',
END OF c_service.
METHODS calculate_price
IMPORTING iv_boxes TYPE i
iv_size TYPE ty_size
iv_service TYPE ty_service
iv_express TYPE abap_bool
iv_contract TYPE abap_bool
RETURNING VALUE(rv_price) TYPE ty_price.
PRIVATE SECTION.
CONSTANTS:
c_price_small TYPE ty_price VALUE '8.00',
c_price_medium TYPE ty_price VALUE '12.00',
c_price_large TYPE ty_price VALUE '18.00',
c_onsite_surcharge TYPE ty_price VALUE '3.50',
c_express_factor TYPE ty_price VALUE '1.20',
c_contract_factor TYPE ty_price VALUE '0.90',
c_high_volume_factor TYPE ty_price VALUE '0.90',
c_mid_volume_factor TYPE ty_price VALUE '0.95',
c_mid_volume_limit TYPE i VALUE 10,
c_high_volume_limit TYPE i VALUE 25,
c_onsite_minimum TYPE ty_price VALUE '60.00',
c_plant_minimum TYPE ty_price VALUE '35.00'.
METHODS box_price
IMPORTING iv_size TYPE ty_size
iv_service TYPE ty_service
RETURNING VALUE(rv_price) TYPE ty_price.
METHODS apply_volume_discount
IMPORTING iv_boxes TYPE i
iv_total TYPE ty_price
RETURNING VALUE(rv_total) TYPE ty_price.
METHODS apply_contract_discount
IMPORTING iv_contract TYPE abap_bool
iv_total TYPE ty_price
RETURNING VALUE(rv_total) TYPE ty_price.
METHODS apply_express_surcharge
IMPORTING iv_express TYPE abap_bool
iv_total TYPE ty_price
RETURNING VALUE(rv_total) TYPE ty_price.
METHODS apply_minimum
IMPORTING iv_service TYPE ty_service
iv_total TYPE ty_price
RETURNING VALUE(rv_total) TYPE ty_price.
ENDCLASS.
CLASS {{p}}shred_pricer IMPLEMENTATION.
METHOD calculate_price.
DATA lv_total TYPE ty_price.
IF iv_boxes <= 0.
RETURN.
ENDIF.
lv_total = iv_boxes * box_price( iv_size = iv_size
iv_service = iv_service ).
lv_total = apply_volume_discount( iv_boxes = iv_boxes
iv_total = lv_total ).
lv_total = apply_contract_discount( iv_contract = iv_contract
iv_total = lv_total ).
lv_total = apply_express_surcharge( iv_express = iv_express
iv_total = lv_total ).
rv_price = apply_minimum( iv_service = iv_service
iv_total = lv_total ).
ENDMETHOD.
METHOD box_price.
CASE iv_size.
WHEN c_size-small.
rv_price = c_price_small.
WHEN c_size-large.
rv_price = c_price_large.
WHEN OTHERS.
rv_price = c_price_medium.
ENDCASE.
IF iv_service = c_service-onsite.
rv_price = rv_price + c_onsite_surcharge.
ENDIF.
ENDMETHOD.
METHOD apply_volume_discount.
IF iv_boxes >= c_high_volume_limit.
rv_total = iv_total * c_high_volume_factor.
ELSEIF iv_boxes >= c_mid_volume_limit.
rv_total = iv_total * c_mid_volume_factor.
ELSE.
rv_total = iv_total.
ENDIF.
ENDMETHOD.
METHOD apply_contract_discount.
IF iv_contract = abap_true.
rv_total = iv_total * c_contract_factor.
ELSE.
rv_total = iv_total.
ENDIF.
ENDMETHOD.
METHOD apply_express_surcharge.
IF iv_express = abap_false.
rv_total = iv_total * c_express_factor.
ELSE.
rv_total = iv_total.
ENDIF.
ENDMETHOD.
METHOD apply_minimum.
DATA lv_minimum TYPE ty_price.
CASE iv_service.
WHEN c_service-onsite.
lv_minimum = c_onsite_minimum.
WHEN OTHERS.
lv_minimum = c_plant_minimum.
ENDCASE.
IF iv_total < lv_minimum.
rv_total = lv_minimum.
ELSE.
rv_total = iv_total.
ENDIF.
ENDMETHOD.
ENDCLASS.