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:
127
tasks_gen/train/G1316/seed/frame_pricer.clas.abap
Normal file
127
tasks_gen/train/G1316/seed/frame_pricer.clas.abap
Normal file
@@ -0,0 +1,127 @@
|
||||
CLASS {{p}}frame_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_moulding TYPE c LENGTH 1.
|
||||
TYPES ty_glass TYPE c LENGTH 1.
|
||||
TYPES ty_amount TYPE p LENGTH 9 DECIMALS 2.
|
||||
|
||||
METHODS calculate_price
|
||||
IMPORTING iv_width_cm TYPE i
|
||||
iv_height_cm TYPE i
|
||||
iv_moulding TYPE ty_moulding
|
||||
iv_glass TYPE ty_glass
|
||||
iv_quantity TYPE i
|
||||
RETURNING VALUE(rv_price) TYPE ty_amount.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_rate_standard TYPE ty_amount VALUE '0.08',
|
||||
c_rate_premium TYPE ty_amount VALUE '0.15',
|
||||
c_rate_gold TYPE ty_amount VALUE '0.28'.
|
||||
|
||||
DATA gv_width TYPE ty_amount.
|
||||
DATA gv_height TYPE ty_amount.
|
||||
DATA gv_perimeter TYPE ty_amount.
|
||||
DATA gv_area TYPE ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}frame_pricer IMPLEMENTATION.
|
||||
|
||||
METHOD calculate_price.
|
||||
DATA lv_frame TYPE ty_amount.
|
||||
DATA lv_glass TYPE ty_amount.
|
||||
DATA lv_extra TYPE ty_amount.
|
||||
DATA lv_sum TYPE ty_amount.
|
||||
DATA lv_qty TYPE ty_amount.
|
||||
DATA lv_factor TYPE ty_amount.
|
||||
DATA lv_base TYPE ty_amount.
|
||||
DATA lv_labour TYPE ty_amount.
|
||||
DATA lv_small TYPE ty_amount.
|
||||
DATA lv_big TYPE ty_amount.
|
||||
DATA lv_setup TYPE ty_amount.
|
||||
DATA lv_limit_s TYPE ty_amount.
|
||||
DATA lv_limit_b TYPE ty_amount.
|
||||
|
||||
CLEAR rv_price.
|
||||
|
||||
* check the input data
|
||||
IF iv_width_cm LT 1 OR iv_height_cm LT 1.
|
||||
rv_price = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
IF iv_quantity LT 1.
|
||||
rv_price = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
IF iv_moulding NE 'S' AND iv_moulding NE 'P' AND iv_moulding NE 'G'.
|
||||
rv_price = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
IF iv_glass NE 'N' AND iv_glass NE 'S' AND iv_glass NE 'A'.
|
||||
rv_price = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
MOVE iv_width_cm TO gv_width.
|
||||
MOVE iv_height_cm TO gv_height.
|
||||
MOVE 2 TO lv_factor.
|
||||
COMPUTE gv_perimeter = ( gv_width + gv_height ) * lv_factor.
|
||||
COMPUTE gv_area = gv_width * gv_height.
|
||||
|
||||
* the price of the moulding
|
||||
IF iv_moulding = 'S'.
|
||||
COMPUTE lv_frame = gv_perimeter * c_rate_standard.
|
||||
ELSE.
|
||||
IF iv_moulding = 'P'.
|
||||
COMPUTE lv_frame = gv_perimeter * c_rate_premium.
|
||||
ELSE.
|
||||
COMPUTE lv_frame = gv_perimeter * c_rate_gold.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
* the price of the glass
|
||||
IF iv_glass = 'N'.
|
||||
MOVE 0 TO lv_glass.
|
||||
ELSE.
|
||||
IF iv_glass = 'S'.
|
||||
MOVE 18 TO lv_glass.
|
||||
ELSE.
|
||||
MOVE 34 TO lv_glass.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
* the extras
|
||||
MOVE 3 TO lv_base.
|
||||
MOVE 12 TO lv_labour.
|
||||
MOVE 4 TO lv_small.
|
||||
MOVE 25 TO lv_big.
|
||||
MOVE 50 TO lv_limit_s.
|
||||
MOVE 20000 TO lv_limit_b.
|
||||
|
||||
COMPUTE lv_extra = lv_base + lv_labour.
|
||||
|
||||
IF gv_perimeter LT lv_limit_s.
|
||||
COMPUTE lv_extra = lv_extra + lv_small.
|
||||
ENDIF.
|
||||
|
||||
IF gv_area GT lv_limit_b.
|
||||
COMPUTE lv_extra = lv_extra + lv_big.
|
||||
ENDIF.
|
||||
|
||||
COMPUTE lv_sum = lv_frame + lv_glass + lv_extra.
|
||||
|
||||
MOVE iv_quantity TO lv_qty.
|
||||
COMPUTE lv_sum = lv_sum * lv_qty.
|
||||
|
||||
MOVE 15 TO lv_setup.
|
||||
IF iv_quantity LT 5.
|
||||
COMPUTE lv_sum = lv_sum + lv_setup.
|
||||
ENDIF.
|
||||
|
||||
rv_price = lv_sum.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user