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:
189
tasks_gen/train/G1014/faulty/m1_frame_pricer.clas.abap
Normal file
189
tasks_gen/train/G1014/faulty/m1_frame_pricer.clas.abap
Normal file
@@ -0,0 +1,189 @@
|
||||
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:
|
||||
BEGIN OF c_moulding,
|
||||
standard TYPE ty_moulding VALUE 'S',
|
||||
premium TYPE ty_moulding VALUE 'P',
|
||||
gold TYPE ty_moulding VALUE 'G',
|
||||
END OF c_moulding,
|
||||
BEGIN OF c_glass,
|
||||
none TYPE ty_glass VALUE 'N',
|
||||
standard TYPE ty_glass VALUE 'S',
|
||||
anti_reflex TYPE ty_glass VALUE 'A',
|
||||
END OF c_glass,
|
||||
BEGIN OF c_moulding_rate,
|
||||
standard TYPE ty_amount VALUE '0.08',
|
||||
premium TYPE ty_amount VALUE '0.15',
|
||||
gold TYPE ty_amount VALUE '0.28',
|
||||
END OF c_moulding_rate,
|
||||
BEGIN OF c_glass_price,
|
||||
none TYPE ty_amount VALUE '0.00',
|
||||
standard TYPE ty_amount VALUE '18.00',
|
||||
anti_reflex TYPE ty_amount VALUE '34.00',
|
||||
END OF c_glass_price,
|
||||
c_factor TYPE ty_amount VALUE '2.00',
|
||||
c_backing TYPE ty_amount VALUE '3.00',
|
||||
c_labour TYPE ty_amount VALUE '12.00',
|
||||
c_small_frame TYPE ty_amount VALUE '4.00',
|
||||
c_small_limit_cm TYPE ty_amount VALUE '50.00',
|
||||
c_oversized TYPE ty_amount VALUE '25.00',
|
||||
c_oversize_limit TYPE ty_amount VALUE '20000.00',
|
||||
c_setup_fee TYPE ty_amount VALUE '15.00',
|
||||
c_setup_limit TYPE i VALUE 5.
|
||||
|
||||
METHODS is_valid
|
||||
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_valid) TYPE abap_bool.
|
||||
METHODS perimeter
|
||||
IMPORTING iv_width_cm TYPE i
|
||||
iv_height_cm TYPE i
|
||||
RETURNING VALUE(rv_perimeter) TYPE ty_amount.
|
||||
METHODS area
|
||||
IMPORTING iv_width_cm TYPE i
|
||||
iv_height_cm TYPE i
|
||||
RETURNING VALUE(rv_area) TYPE ty_amount.
|
||||
METHODS quantity_amount
|
||||
IMPORTING iv_quantity TYPE i
|
||||
RETURNING VALUE(rv_amount) TYPE ty_amount.
|
||||
METHODS moulding_price
|
||||
IMPORTING iv_moulding TYPE ty_moulding
|
||||
iv_perimeter TYPE ty_amount
|
||||
RETURNING VALUE(rv_price) TYPE ty_amount.
|
||||
METHODS glass_price
|
||||
IMPORTING iv_glass TYPE ty_glass
|
||||
RETURNING VALUE(rv_price) TYPE ty_amount.
|
||||
METHODS extras
|
||||
IMPORTING iv_perimeter TYPE ty_amount
|
||||
iv_area TYPE ty_amount
|
||||
RETURNING VALUE(rv_price) TYPE ty_amount.
|
||||
METHODS setup_fee
|
||||
IMPORTING iv_quantity TYPE i
|
||||
RETURNING VALUE(rv_price) TYPE ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}frame_pricer IMPLEMENTATION.
|
||||
|
||||
METHOD calculate_price.
|
||||
IF is_valid( iv_width_cm = iv_width_cm
|
||||
iv_height_cm = iv_height_cm
|
||||
iv_moulding = iv_moulding
|
||||
iv_glass = iv_glass
|
||||
iv_quantity = iv_quantity ) = abap_false.
|
||||
rv_price = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
DATA lv_perimeter TYPE ty_amount.
|
||||
lv_perimeter = perimeter( iv_width_cm = iv_width_cm iv_height_cm = iv_height_cm ).
|
||||
DATA lv_area TYPE ty_amount.
|
||||
lv_area = area( iv_width_cm = iv_width_cm iv_height_cm = iv_height_cm ).
|
||||
|
||||
DATA lv_per_frame TYPE ty_amount.
|
||||
lv_per_frame = moulding_price( iv_moulding = iv_moulding
|
||||
iv_perimeter = lv_perimeter ).
|
||||
DATA lv_glass TYPE ty_amount.
|
||||
lv_glass = glass_price( iv_glass = iv_glass ).
|
||||
lv_per_frame = lv_per_frame + lv_glass.
|
||||
DATA lv_extra TYPE ty_amount.
|
||||
lv_extra = extras( iv_perimeter = lv_perimeter iv_area = lv_area ).
|
||||
lv_per_frame = lv_per_frame + lv_extra.
|
||||
|
||||
DATA lv_quantity TYPE ty_amount.
|
||||
lv_quantity = quantity_amount( iv_quantity = iv_quantity ).
|
||||
DATA lv_total TYPE ty_amount.
|
||||
lv_total = lv_per_frame * lv_quantity.
|
||||
|
||||
DATA lv_fee TYPE ty_amount.
|
||||
lv_fee = setup_fee( iv_quantity = iv_quantity ).
|
||||
rv_price = lv_total + lv_fee.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_valid.
|
||||
rv_valid = xsdbool( iv_width_cm >= 1
|
||||
AND iv_height_cm < 1
|
||||
AND iv_quantity >= 1
|
||||
AND ( iv_moulding = c_moulding-standard
|
||||
OR iv_moulding = c_moulding-premium
|
||||
OR iv_moulding = c_moulding-gold )
|
||||
AND ( iv_glass = c_glass-none
|
||||
OR iv_glass = c_glass-standard
|
||||
OR iv_glass = c_glass-anti_reflex ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD perimeter.
|
||||
DATA lv_width TYPE ty_amount.
|
||||
lv_width = iv_width_cm.
|
||||
DATA lv_height TYPE ty_amount.
|
||||
lv_height = iv_height_cm.
|
||||
rv_perimeter = ( lv_width + lv_height ) * c_factor.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD area.
|
||||
DATA lv_width TYPE ty_amount.
|
||||
lv_width = iv_width_cm.
|
||||
DATA lv_height TYPE ty_amount.
|
||||
lv_height = iv_height_cm.
|
||||
rv_area = lv_width * lv_height.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD quantity_amount.
|
||||
rv_amount = iv_quantity.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD moulding_price.
|
||||
CASE iv_moulding.
|
||||
WHEN c_moulding-standard.
|
||||
rv_price = iv_perimeter * c_moulding_rate-standard.
|
||||
WHEN c_moulding-premium.
|
||||
rv_price = iv_perimeter * c_moulding_rate-premium.
|
||||
WHEN OTHERS.
|
||||
rv_price = iv_perimeter * c_moulding_rate-gold.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD glass_price.
|
||||
CASE iv_glass.
|
||||
WHEN c_glass-none.
|
||||
rv_price = c_glass_price-none.
|
||||
WHEN c_glass-standard.
|
||||
rv_price = c_glass_price-standard.
|
||||
WHEN OTHERS.
|
||||
rv_price = c_glass_price-anti_reflex.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD extras.
|
||||
rv_price = c_backing + c_labour.
|
||||
IF iv_perimeter < c_small_limit_cm.
|
||||
rv_price = rv_price + c_small_frame.
|
||||
ENDIF.
|
||||
IF iv_area > c_oversize_limit.
|
||||
rv_price = rv_price + c_oversized.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD setup_fee.
|
||||
IF iv_quantity < c_setup_limit.
|
||||
rv_price = c_setup_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user