Stage 2 summary at 50 accepted trajectories

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Kral
2026-10-05 18:02:52 +02:00
parent 332fb4601d
commit 5bcd1bf9cd
1230 changed files with 77563 additions and 33 deletions

View File

@@ -0,0 +1,132 @@
CLASS {{p}}job_planner DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES:
BEGIN OF ty_job,
job_id TYPE c LENGTH 10,
calc_mode TYPE c LENGTH 1,
work_hours TYPE p LENGTH 5 DECIMALS 2,
part_count TYPE i,
mat_group TYPE c LENGTH 4,
due_date TYPE d,
net_value TYPE p LENGTH 11 DECIMALS 2,
END OF ty_job.
TYPES ty_cost TYPE p LENGTH 11 DECIMALS 2.
METHODS validate
IMPORTING is_job TYPE ty_job
RAISING {{p}}cx_job_error.
METHODS calculate_cost
IMPORTING is_job TYPE ty_job
RETURNING VALUE(rv_cost) TYPE ty_cost
RAISING {{p}}cx_job_error.
PRIVATE SECTION.
TYPES ty_mode TYPE c LENGTH 1.
TYPES ty_group TYPE c LENGTH 4.
METHODS fail_with
IMPORTING iv_reason TYPE {{p}}cx_job_error=>ty_reason
RAISING {{p}}cx_job_error.
METHODS is_mode_valid
IMPORTING iv_mode TYPE ty_mode
RETURNING VALUE(rv_valid) TYPE abap_bool.
METHODS is_hours_valid
IMPORTING iv_hours TYPE ty_job-work_hours
RETURNING VALUE(rv_valid) TYPE abap_bool.
METHODS is_group_valid
IMPORTING iv_group TYPE ty_group
RETURNING VALUE(rv_valid) TYPE abap_bool.
METHODS hour_rate
IMPORTING iv_mode TYPE ty_mode
RETURNING VALUE(rv_rate) TYPE ty_cost.
METHODS part_rate
IMPORTING iv_group TYPE ty_group
RETURNING VALUE(rv_rate) TYPE ty_cost.
ENDCLASS.
CLASS {{p}}job_planner IMPLEMENTATION.
METHOD validate.
IF is_job-job_id IS INITIAL.
fail_with( {{p}}cx_job_error=>c_reason-no_job_id ).
ENDIF.
IF is_mode_valid( is_job-calc_mode ) = abap_false.
fail_with( {{p}}cx_job_error=>c_reason-bad_mode ).
ENDIF.
IF is_hours_valid( is_job-work_hours ) = abap_false.
fail_with( {{p}}cx_job_error=>c_reason-bad_hours ).
ENDIF.
IF is_job-part_count <= 0.
fail_with( {{p}}cx_job_error=>c_reason-bad_count ).
ENDIF.
IF is_group_valid( is_job-mat_group ) = abap_false.
fail_with( {{p}}cx_job_error=>c_reason-bad_group ).
ENDIF.
IF is_job-due_date IS INITIAL.
fail_with( {{p}}cx_job_error=>c_reason-bad_date ).
ENDIF.
IF is_job-net_value < 0.
fail_with( {{p}}cx_job_error=>c_reason-bad_value ).
ENDIF.
ENDMETHOD.
METHOD calculate_cost.
validate( is_job ).
rv_cost = is_job-work_hours * hour_rate( is_job-calc_mode )
+ is_job-part_count * part_rate( is_job-mat_group )
+ is_job-net_value.
ENDMETHOD.
METHOD fail_with.
RAISE EXCEPTION TYPE {{p}}cx_job_error
EXPORTING
iv_reason = iv_reason.
ENDMETHOD.
METHOD is_mode_valid.
rv_valid = xsdbool( iv_mode = 'S' OR iv_mode = 'E' OR iv_mode = 'P' ).
ENDMETHOD.
METHOD is_hours_valid.
rv_valid = xsdbool( iv_hours > 0 AND iv_hours <= 100 ).
ENDMETHOD.
METHOD is_group_valid.
rv_valid = xsdbool( iv_group = 'ST' OR iv_group = 'AL'
OR iv_group = 'PL' OR iv_group = 'WD' ).
ENDMETHOD.
METHOD hour_rate.
CASE iv_mode.
WHEN 'S'.
rv_rate = '60.00'.
WHEN 'E'.
rv_rate = '90.00'.
WHEN 'P'.
rv_rate = '75.00'.
WHEN OTHERS.
rv_rate = 0.
ENDCASE.
ENDMETHOD.
METHOD part_rate.
CASE iv_group.
WHEN 'ST'.
rv_rate = '12.50'.
WHEN 'AL'.
rv_rate = '8.00'.
WHEN 'PL'.
rv_rate = '3.50'.
WHEN 'WD'.
rv_rate = '5.00'.
WHEN OTHERS.
rv_rate = 0.
ENDCASE.
ENDMETHOD.
ENDCLASS.