Files
abap-llm/tasks_gen/train/G1030/faulty/m2_skip_hire_calc.clas.abap

175 lines
4.8 KiB
ABAP

CLASS {{p}}skip_hire_calc DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES:
ty_size TYPE c LENGTH 6,
ty_amount TYPE p LENGTH 8 DECIMALS 2,
BEGIN OF ty_container,
size TYPE ty_size,
days TYPE i,
hazardous TYPE abap_bool,
permit TYPE abap_bool,
END OF ty_container,
tt_containers TYPE STANDARD TABLE OF ty_container WITH DEFAULT KEY.
METHODS hire_charge
IMPORTING it_containers TYPE tt_containers
RETURNING VALUE(rv_charge) TYPE ty_amount.
METHODS container_charge
IMPORTING is_container TYPE ty_container
RETURNING VALUE(rv_charge) TYPE ty_amount.
METHODS bulk_discount
IMPORTING iv_count TYPE i
RETURNING VALUE(rv_percent) TYPE i.
PRIVATE SECTION.
CONSTANTS c_size_small TYPE ty_size VALUE 'SMALL'.
CONSTANTS c_size_medium TYPE ty_size VALUE 'MEDIUM'.
CONSTANTS c_size_large TYPE ty_size VALUE 'LARGE'.
CONSTANTS c_base_small TYPE ty_amount VALUE '90.00'.
CONSTANTS c_base_medium TYPE ty_amount VALUE '140.00'.
CONSTANTS c_base_large TYPE ty_amount VALUE '200.00'.
CONSTANTS c_rate_small TYPE ty_amount VALUE '8.00'.
CONSTANTS c_rate_medium TYPE ty_amount VALUE '12.00'.
CONSTANTS c_rate_large TYPE ty_amount VALUE '16.00'.
CONSTANTS c_hazard_small TYPE ty_amount VALUE '60.00'.
CONSTANTS c_hazard_medium TYPE ty_amount VALUE '80.00'.
CONSTANTS c_hazard_large TYPE ty_amount VALUE '100.00'.
CONSTANTS c_permit_fee TYPE ty_amount VALUE '45.00'.
CONSTANTS c_min_charge TYPE ty_amount VALUE '120.00'.
CONSTANTS c_included_days TYPE i VALUE 7.
CONSTANTS c_min_days TYPE i VALUE 1.
CONSTANTS c_min_containers TYPE i VALUE 5.
CONSTANTS c_percent_bulk TYPE i VALUE 10.
CONSTANTS c_percent_base TYPE i VALUE 100.
METHODS base_price
IMPORTING iv_size TYPE ty_size
RETURNING VALUE(rv_price) TYPE ty_amount.
METHODS day_rate
IMPORTING iv_size TYPE ty_size
RETURNING VALUE(rv_rate) TYPE ty_amount.
METHODS hazard_fee
IMPORTING iv_size TYPE ty_size
RETURNING VALUE(rv_fee) TYPE ty_amount.
METHODS extra_days_fee
IMPORTING is_container TYPE ty_container
RETURNING VALUE(rv_fee) TYPE ty_amount.
METHODS net_charge
IMPORTING iv_net TYPE ty_amount
iv_count TYPE i
RETURNING VALUE(rv_charge) TYPE ty_amount.
ENDCLASS.
CLASS {{p}}skip_hire_calc IMPLEMENTATION.
METHOD hire_charge.
DATA lv_net TYPE ty_amount.
DATA lv_count TYPE i.
DATA lv_line TYPE ty_amount.
LOOP AT it_containers INTO DATA(ls_container).
lv_line = container_charge( ls_container ).
IF lv_line > 0.
lv_net = lv_net + lv_line.
lv_count = lv_count + 1.
ENDIF.
ENDLOOP.
rv_charge = net_charge( iv_net = lv_net iv_count = lv_count ).
ENDMETHOD.
METHOD container_charge.
IF is_container-days < c_min_days.
RETURN.
ENDIF.
DATA(lv_base) = base_price( is_container-size ).
IF lv_base = 0.
RETURN.
ENDIF.
rv_charge = lv_base + extra_days_fee( is_container ).
IF is_container-hazardous = abap_true.
rv_charge = rv_charge + hazard_fee( is_container-size ).
ENDIF.
IF is_container-permit = abap_true.
rv_charge = rv_charge + c_permit_fee.
ENDIF.
ENDMETHOD.
METHOD net_charge.
IF iv_net <> 0.
RETURN.
ENDIF.
rv_charge = round( val = iv_net * ( c_percent_base - bulk_discount( iv_count ) )
/ c_percent_base dec = 2 ).
IF rv_charge < c_min_charge.
rv_charge = c_min_charge.
ENDIF.
ENDMETHOD.
METHOD extra_days_fee.
DATA(lv_days) = is_container-days - c_included_days.
IF lv_days > 0.
rv_fee = day_rate( is_container-size ) * lv_days.
ENDIF.
ENDMETHOD.
METHOD base_price.
CASE iv_size.
WHEN c_size_small.
rv_price = c_base_small.
WHEN c_size_medium.
rv_price = c_base_medium.
WHEN c_size_large.
rv_price = c_base_large.
WHEN OTHERS.
rv_price = 0.
ENDCASE.
ENDMETHOD.
METHOD day_rate.
CASE iv_size.
WHEN c_size_small.
rv_rate = c_rate_small.
WHEN c_size_medium.
rv_rate = c_rate_medium.
WHEN c_size_large.
rv_rate = c_rate_large.
WHEN OTHERS.
rv_rate = 0.
ENDCASE.
ENDMETHOD.
METHOD hazard_fee.
CASE iv_size.
WHEN c_size_small.
rv_fee = c_hazard_small.
WHEN c_size_medium.
rv_fee = c_hazard_medium.
WHEN c_size_large.
rv_fee = c_hazard_large.
WHEN OTHERS.
rv_fee = 0.
ENDCASE.
ENDMETHOD.
METHOD bulk_discount.
IF iv_count >= c_min_containers.
rv_percent = c_percent_bulk.
ELSE.
rv_percent = 0.
ENDIF.
ENDMETHOD.
ENDCLASS.