Files
abap-llm/tasks_gen/eval/G0006/seed/freight_calculator.clas.abap
Kral 5de5e2851c Generator: pilot analysis and fixes; G0002-G0021 tasks; handover notes merged
- Static bundle checks (name length, seed type, reserved words, contract test classes,
  testclasses_file), local abaplint parser check before SAP, max_tokens, robust JSON parse
- Runner: G2 for CDS views with parameters, contract_check detail in report
- G0020 and G0013 fixed by review and revalidated (oracle 100, null 0)
- Pilot results in docs/faz1-tasarim.md 11e; handover notes merged into CLAUDE.md and docs

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 05:04:23 +02:00

107 lines
2.9 KiB
ABAP

CLASS {{p}}freight_calculator DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES:
BEGIN OF ty_result,
status TYPE c LENGTH 10,
base TYPE p LENGTH 9 DECIMALS 2,
surcharge TYPE p LENGTH 9 DECIMALS 2,
total TYPE p LENGTH 9 DECIMALS 2,
END OF ty_result.
CONSTANTS:
BEGIN OF c_status,
ok TYPE c LENGTH 10 VALUE 'OK',
weight TYPE c LENGTH 10 VALUE 'WEIGHT',
zone TYPE c LENGTH 10 VALUE 'ZONE',
END OF c_status.
METHODS calculate
IMPORTING
iv_weight_kg TYPE p LENGTH 8 DECIMALS 2
iv_zone TYPE string
iv_express TYPE abap_bool DEFAULT abap_false
RETURNING
VALUE(rs_result) TYPE ty_result.
METHODS is_zone_supported
IMPORTING
iv_zone TYPE string
RETURNING
VALUE(rv_supported) TYPE abap_bool.
PRIVATE SECTION.
DATA mv_last_zone TYPE string.
CONSTANTS c_express_share TYPE p LENGTH 5 DECIMALS 2 VALUE '0.25'.
ENDCLASS.
CLASS {{p}}freight_calculator IMPLEMENTATION.
METHOD calculate.
DATA lv_zone TYPE string.
DATA lv_rate TYPE p LENGTH 6 DECIMALS 2.
DATA lv_amount TYPE p LENGTH 13 DECIMALS 4.
DATA lv_express TYPE abap_bool.
lv_zone = to_upper( replace( val = iv_zone sub = ` ` with = `` occ = 0 ) ).
mv_last_zone = lv_zone.
IF iv_weight_kg <= 0.
rs_result-status = 'WEIGHT'.
rs_result-base = 0.
rs_result-surcharge = 0.
rs_result-total = 0.
RETURN.
ENDIF.
* IF lv_zone = 'BE'.
* lv_rate = '5.60'.
* ENDIF.
IF lv_zone = 'DE'.
lv_rate = '4.50'.
ELSEIF lv_zone = 'AT'.
lv_rate = '5.20'.
ELSEIF lv_zone = 'CH'.
lv_rate = '7.80'.
ELSEIF lv_zone = 'FR'.
lv_rate = '6.40'.
ELSEIF lv_zone = 'NL'.
lv_rate = '4.90'.
ELSEIF lv_zone = 'PL'.
lv_rate = '5.10'.
ELSEIF lv_zone = 'ES'.
lv_rate = '6.90'.
ELSE.
rs_result-status = 'ZONE'.
rs_result-base = 0.
rs_result-surcharge = 0.
rs_result-total = 0.
RETURN.
ENDIF.
lv_amount = lv_rate * iv_weight_kg.
rs_result-base = round( val = lv_amount dec = 2 ).
lv_express = iv_express.
IF lv_express = abap_true.
lv_amount = rs_result-base * c_express_share.
rs_result-surcharge = round( val = lv_amount dec = 2 ).
ELSE.
rs_result-surcharge = 0.
ENDIF.
rs_result-total = rs_result-base + rs_result-surcharge.
rs_result-status = 'OK'.
ENDMETHOD.
METHOD is_zone_supported.
DATA lv_zone TYPE string.
lv_zone = to_upper( replace( val = iv_zone sub = ` ` with = `` occ = 0 ) ).
IF lv_zone = 'DE' OR lv_zone = 'AT' OR lv_zone = 'CH' OR lv_zone = 'FR'
OR lv_zone = 'NL' OR lv_zone = 'PL' OR lv_zone = 'ES'.
rv_supported = abap_true.
ELSE.
rv_supported = abap_false.
ENDIF.
ENDMETHOD.
ENDCLASS.