Pipeline controller: plan 2 (hard +, error +50 %), backlog throttle, 2 trajectory workers, stop rules, summaries every 50; budget reserve
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
169
tasks_gen/train/G1030/seed/skip_hire_calc.clas.abap
Normal file
169
tasks_gen/train/G1030/seed/skip_hire_calc.clas.abap
Normal file
@@ -0,0 +1,169 @@
|
||||
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.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}skip_hire_calc IMPLEMENTATION.
|
||||
|
||||
METHOD hire_charge.
|
||||
|
||||
DATA: lv_net TYPE ty_amount,
|
||||
lv_pct TYPE i,
|
||||
lv_count TYPE i,
|
||||
lv_base TYPE ty_amount,
|
||||
lv_rate TYPE ty_amount,
|
||||
lv_extra TYPE ty_amount,
|
||||
lv_days TYPE i,
|
||||
ls_container TYPE ty_container.
|
||||
|
||||
CLEAR rv_charge.
|
||||
|
||||
LOOP AT it_containers INTO ls_container.
|
||||
|
||||
CLEAR lv_base.
|
||||
CLEAR lv_rate.
|
||||
|
||||
IF ls_container-size = 'SMALL'.
|
||||
lv_base = '90.00'.
|
||||
lv_rate = '8.00'.
|
||||
ELSEIF ls_container-size = 'MEDIUM'.
|
||||
lv_base = '140.00'.
|
||||
lv_rate = '12.00'.
|
||||
ELSEIF ls_container-size = 'LARGE'.
|
||||
lv_base = '200.00'.
|
||||
lv_rate = '16.00'.
|
||||
ENDIF.
|
||||
|
||||
IF lv_base > 0 AND ls_container-days >= 1.
|
||||
|
||||
CLEAR lv_extra.
|
||||
lv_days = ls_container-days - 7.
|
||||
IF lv_days > 0.
|
||||
lv_extra = lv_rate * lv_days.
|
||||
ENDIF.
|
||||
|
||||
lv_net = lv_net + lv_base + lv_extra.
|
||||
lv_count = lv_count + 1.
|
||||
|
||||
IF ls_container-hazardous = abap_true.
|
||||
IF ls_container-size = 'SMALL'.
|
||||
lv_net = lv_net + '60.00'.
|
||||
ELSEIF ls_container-size = 'MEDIUM'.
|
||||
lv_net = lv_net + '80.00'.
|
||||
ELSE.
|
||||
lv_net = lv_net + '100.00'.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
IF ls_container-permit = abap_true.
|
||||
lv_net = lv_net + '45.00'.
|
||||
ENDIF.
|
||||
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
IF lv_net = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
IF lv_count >= 5.
|
||||
lv_pct = 10.
|
||||
ELSE.
|
||||
lv_pct = 0.
|
||||
ENDIF.
|
||||
|
||||
rv_charge = lv_net * ( 100 - lv_pct ) / 100.
|
||||
rv_charge = round( val = rv_charge dec = 2 ).
|
||||
|
||||
IF rv_charge < 120.
|
||||
rv_charge = 120.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD container_charge.
|
||||
|
||||
DATA: lv_base TYPE ty_amount,
|
||||
lv_rate TYPE ty_amount,
|
||||
lv_extra TYPE ty_amount,
|
||||
lv_days TYPE i.
|
||||
|
||||
CLEAR rv_charge.
|
||||
|
||||
IF is_container-size = 'SMALL'.
|
||||
lv_base = '90.00'.
|
||||
lv_rate = '8.00'.
|
||||
ELSEIF is_container-size = 'MEDIUM'.
|
||||
lv_base = '140.00'.
|
||||
lv_rate = '12.00'.
|
||||
ELSEIF is_container-size = 'LARGE'.
|
||||
lv_base = '200.00'.
|
||||
lv_rate = '16.00'.
|
||||
ELSE.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
IF is_container-days < 1.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
lv_days = is_container-days - 7.
|
||||
IF lv_days > 0.
|
||||
lv_extra = lv_rate * lv_days.
|
||||
ENDIF.
|
||||
|
||||
rv_charge = lv_base + lv_extra.
|
||||
|
||||
IF is_container-hazardous = abap_true.
|
||||
IF is_container-size = 'SMALL'.
|
||||
rv_charge = rv_charge + '60.00'.
|
||||
ELSEIF is_container-size = 'MEDIUM'.
|
||||
rv_charge = rv_charge + '80.00'.
|
||||
ELSE.
|
||||
rv_charge = rv_charge + '100.00'.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
IF is_container-permit = abap_true.
|
||||
rv_charge = rv_charge + '45.00'.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD bulk_discount.
|
||||
|
||||
IF iv_count >= 5.
|
||||
rv_percent = 10.
|
||||
ELSE.
|
||||
rv_percent = 0.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user