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:
148
tasks_gen/train/G1035/faulty/m0_photo_pricer.clas.abap
Normal file
148
tasks_gen/train/G1035/faulty/m0_photo_pricer.clas.abap
Normal file
@@ -0,0 +1,148 @@
|
||||
CLASS {{p}}photo_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_session TYPE c LENGTH 7.
|
||||
TYPES ty_reason TYPE c LENGTH 8.
|
||||
TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
TYPES: BEGIN OF ty_request,
|
||||
session TYPE ty_session,
|
||||
minutes TYPE i,
|
||||
persons TYPE i,
|
||||
photos TYPE i,
|
||||
distance_km TYPE i,
|
||||
END OF ty_request.
|
||||
|
||||
TYPES: BEGIN OF ty_quote,
|
||||
time_fee TYPE ty_amount,
|
||||
person_fee TYPE ty_amount,
|
||||
photo_fee TYPE ty_amount,
|
||||
travel_fee TYPE ty_amount,
|
||||
crew_fee TYPE ty_amount,
|
||||
total TYPE ty_amount,
|
||||
reason TYPE ty_reason,
|
||||
END OF ty_quote.
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_session,
|
||||
studio TYPE ty_session VALUE 'STUDIO',
|
||||
outdoor TYPE ty_session VALUE 'OUTDOOR',
|
||||
END OF c_session,
|
||||
BEGIN OF c_reason,
|
||||
ok TYPE ty_reason VALUE 'OK',
|
||||
session TYPE ty_reason VALUE 'SESSION',
|
||||
minutes TYPE ty_reason VALUE 'MINUTES',
|
||||
persons TYPE ty_reason VALUE 'PERSONS',
|
||||
photos TYPE ty_reason VALUE 'PHOTOS',
|
||||
distance TYPE ty_reason VALUE 'DISTANCE',
|
||||
END OF c_reason.
|
||||
|
||||
METHODS calculate
|
||||
IMPORTING is_request TYPE ty_request
|
||||
RETURNING VALUE(rs_quote) TYPE ty_quote.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_min_minutes TYPE i VALUE 30,
|
||||
c_max_minutes TYPE i VALUE 480,
|
||||
c_min_persons TYPE i VALUE 1,
|
||||
c_max_persons TYPE i VALUE 20,
|
||||
c_min_photos TYPE i VALUE 0,
|
||||
c_max_photos TYPE i VALUE 200,
|
||||
c_min_distance TYPE i VALUE 1,
|
||||
c_slot_minutes TYPE i VALUE 15,
|
||||
c_slot_fee TYPE ty_amount VALUE 20,
|
||||
c_free_persons TYPE i VALUE 2,
|
||||
c_person_fee TYPE ty_amount VALUE 10,
|
||||
c_bulk_limit TYPE i VALUE 50,
|
||||
c_photo_std TYPE ty_amount VALUE 5,
|
||||
c_photo_bulk TYPE ty_amount VALUE 4,
|
||||
c_travel_base TYPE ty_amount VALUE 15,
|
||||
c_travel_km TYPE ty_amount VALUE 2,
|
||||
c_crew_limit TYPE i VALUE 8,
|
||||
c_crew_fee TYPE ty_amount VALUE 40.
|
||||
|
||||
METHODS check_request
|
||||
IMPORTING is_request TYPE ty_request
|
||||
RETURNING VALUE(rv_reason) TYPE ty_reason.
|
||||
METHODS time_fee
|
||||
IMPORTING iv_minutes TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS person_fee
|
||||
IMPORTING iv_persons TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS photo_fee
|
||||
IMPORTING iv_photos TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS travel_fee
|
||||
IMPORTING is_request TYPE ty_request
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS crew_fee
|
||||
IMPORTING iv_persons TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}photo_pricer IMPLEMENTATION.
|
||||
METHOD calculate.
|
||||
rs_quote-reason = check_request( is_request ).
|
||||
IF rs_quote-reason <> c_reason-ok.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rs_quote-time_fee = time_fee( is_request-minutes ).
|
||||
rs_quote-person_fee = person_fee( is_request-persons ).
|
||||
rs_quote-photo_fee = photo_fee( is_request-photos ).
|
||||
rs_quote-travel_fee = travel_fee( is_request ).
|
||||
rs_quote-crew_fee = crew_fee( is_request-persons ).
|
||||
rs_quote-total = rs_quote-time_fee + rs_quote-person_fee + rs_quote-photo_fee
|
||||
+ rs_quote-travel_fee + rs_quote-crew_fee.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_request.
|
||||
IF is_request-session <> c_session-studio AND is_request-session <> c_session-outdoor.
|
||||
rv_reason = c_reason-session.
|
||||
ELSEIF is_request-minutes < c_min_minutes AND is_request-minutes > c_max_minutes.
|
||||
rv_reason = c_reason-minutes.
|
||||
ELSEIF is_request-persons < c_min_persons OR is_request-persons > c_max_persons.
|
||||
rv_reason = c_reason-persons.
|
||||
ELSEIF is_request-photos < c_min_photos OR is_request-photos > c_max_photos.
|
||||
rv_reason = c_reason-photos.
|
||||
ELSEIF is_request-session = c_session-outdoor AND is_request-distance_km < c_min_distance.
|
||||
rv_reason = c_reason-distance.
|
||||
ELSE.
|
||||
rv_reason = c_reason-ok.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD time_fee.
|
||||
DATA(lv_slots) = ( iv_minutes + c_slot_minutes - 1 ) DIV c_slot_minutes.
|
||||
rv_fee = lv_slots * c_slot_fee.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD person_fee.
|
||||
DATA(lv_extra) = iv_persons - c_free_persons.
|
||||
IF lv_extra > 0.
|
||||
rv_fee = lv_extra * c_person_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD photo_fee.
|
||||
IF iv_photos >= c_bulk_limit.
|
||||
rv_fee = iv_photos * c_photo_bulk.
|
||||
ELSE.
|
||||
rv_fee = iv_photos * c_photo_std.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD travel_fee.
|
||||
IF is_request-session <> c_session-outdoor.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rv_fee = c_travel_base + is_request-distance_km * c_travel_km.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD crew_fee.
|
||||
IF iv_persons > c_crew_limit.
|
||||
rv_fee = c_crew_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
148
tasks_gen/train/G1035/faulty/m1_photo_pricer.clas.abap
Normal file
148
tasks_gen/train/G1035/faulty/m1_photo_pricer.clas.abap
Normal file
@@ -0,0 +1,148 @@
|
||||
CLASS {{p}}photo_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_session TYPE c LENGTH 7.
|
||||
TYPES ty_reason TYPE c LENGTH 8.
|
||||
TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
TYPES: BEGIN OF ty_request,
|
||||
session TYPE ty_session,
|
||||
minutes TYPE i,
|
||||
persons TYPE i,
|
||||
photos TYPE i,
|
||||
distance_km TYPE i,
|
||||
END OF ty_request.
|
||||
|
||||
TYPES: BEGIN OF ty_quote,
|
||||
time_fee TYPE ty_amount,
|
||||
person_fee TYPE ty_amount,
|
||||
photo_fee TYPE ty_amount,
|
||||
travel_fee TYPE ty_amount,
|
||||
crew_fee TYPE ty_amount,
|
||||
total TYPE ty_amount,
|
||||
reason TYPE ty_reason,
|
||||
END OF ty_quote.
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_session,
|
||||
studio TYPE ty_session VALUE 'STUDIO',
|
||||
outdoor TYPE ty_session VALUE 'OUTDOOR',
|
||||
END OF c_session,
|
||||
BEGIN OF c_reason,
|
||||
ok TYPE ty_reason VALUE 'OK',
|
||||
session TYPE ty_reason VALUE 'SESSION',
|
||||
minutes TYPE ty_reason VALUE 'MINUTES',
|
||||
persons TYPE ty_reason VALUE 'PERSONS',
|
||||
photos TYPE ty_reason VALUE 'PHOTOS',
|
||||
distance TYPE ty_reason VALUE 'DISTANCE',
|
||||
END OF c_reason.
|
||||
|
||||
METHODS calculate
|
||||
IMPORTING is_request TYPE ty_request
|
||||
RETURNING VALUE(rs_quote) TYPE ty_quote.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_min_minutes TYPE i VALUE 30,
|
||||
c_max_minutes TYPE i VALUE 480,
|
||||
c_min_persons TYPE i VALUE 1,
|
||||
c_max_persons TYPE i VALUE 20,
|
||||
c_min_photos TYPE i VALUE 0,
|
||||
c_max_photos TYPE i VALUE 200,
|
||||
c_min_distance TYPE i VALUE 1,
|
||||
c_slot_minutes TYPE i VALUE 15,
|
||||
c_slot_fee TYPE ty_amount VALUE 20,
|
||||
c_free_persons TYPE i VALUE 2,
|
||||
c_person_fee TYPE ty_amount VALUE 10,
|
||||
c_bulk_limit TYPE i VALUE 50,
|
||||
c_photo_std TYPE ty_amount VALUE 5,
|
||||
c_photo_bulk TYPE ty_amount VALUE 4,
|
||||
c_travel_base TYPE ty_amount VALUE 15,
|
||||
c_travel_km TYPE ty_amount VALUE 2,
|
||||
c_crew_limit TYPE i VALUE 8,
|
||||
c_crew_fee TYPE ty_amount VALUE 40.
|
||||
|
||||
METHODS check_request
|
||||
IMPORTING is_request TYPE ty_request
|
||||
RETURNING VALUE(rv_reason) TYPE ty_reason.
|
||||
METHODS time_fee
|
||||
IMPORTING iv_minutes TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS person_fee
|
||||
IMPORTING iv_persons TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS photo_fee
|
||||
IMPORTING iv_photos TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS travel_fee
|
||||
IMPORTING is_request TYPE ty_request
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS crew_fee
|
||||
IMPORTING iv_persons TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}photo_pricer IMPLEMENTATION.
|
||||
METHOD calculate.
|
||||
rs_quote-reason = check_request( is_request ).
|
||||
IF rs_quote-reason <> c_reason-ok.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rs_quote-time_fee = time_fee( is_request-minutes ).
|
||||
rs_quote-person_fee = person_fee( is_request-persons ).
|
||||
rs_quote-photo_fee = photo_fee( is_request-photos ).
|
||||
rs_quote-travel_fee = travel_fee( is_request ).
|
||||
rs_quote-crew_fee = crew_fee( is_request-persons ).
|
||||
rs_quote-total = rs_quote-time_fee + rs_quote-person_fee + rs_quote-photo_fee
|
||||
+ rs_quote-travel_fee + rs_quote-crew_fee.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_request.
|
||||
IF is_request-session <> c_session-studio AND is_request-session <> c_session-outdoor.
|
||||
rv_reason = c_reason-session.
|
||||
ELSEIF is_request-minutes < c_min_minutes OR is_request-minutes > c_max_minutes.
|
||||
rv_reason = c_reason-minutes.
|
||||
ELSEIF is_request-persons < c_min_persons OR is_request-persons > c_max_persons.
|
||||
rv_reason = c_reason-persons.
|
||||
ELSEIF is_request-photos >= c_min_photos OR is_request-photos > c_max_photos.
|
||||
rv_reason = c_reason-photos.
|
||||
ELSEIF is_request-session = c_session-outdoor AND is_request-distance_km < c_min_distance.
|
||||
rv_reason = c_reason-distance.
|
||||
ELSE.
|
||||
rv_reason = c_reason-ok.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD time_fee.
|
||||
DATA(lv_slots) = ( iv_minutes + c_slot_minutes - 1 ) DIV c_slot_minutes.
|
||||
rv_fee = lv_slots * c_slot_fee.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD person_fee.
|
||||
DATA(lv_extra) = iv_persons - c_free_persons.
|
||||
IF lv_extra > 0.
|
||||
rv_fee = lv_extra * c_person_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD photo_fee.
|
||||
IF iv_photos >= c_bulk_limit.
|
||||
rv_fee = iv_photos * c_photo_bulk.
|
||||
ELSE.
|
||||
rv_fee = iv_photos * c_photo_std.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD travel_fee.
|
||||
IF is_request-session <> c_session-outdoor.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rv_fee = c_travel_base + is_request-distance_km * c_travel_km.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD crew_fee.
|
||||
IF iv_persons > c_crew_limit.
|
||||
rv_fee = c_crew_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
148
tasks_gen/train/G1035/faulty/m2_photo_pricer.clas.abap
Normal file
148
tasks_gen/train/G1035/faulty/m2_photo_pricer.clas.abap
Normal file
@@ -0,0 +1,148 @@
|
||||
CLASS {{p}}photo_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_session TYPE c LENGTH 7.
|
||||
TYPES ty_reason TYPE c LENGTH 8.
|
||||
TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
TYPES: BEGIN OF ty_request,
|
||||
session TYPE ty_session,
|
||||
minutes TYPE i,
|
||||
persons TYPE i,
|
||||
photos TYPE i,
|
||||
distance_km TYPE i,
|
||||
END OF ty_request.
|
||||
|
||||
TYPES: BEGIN OF ty_quote,
|
||||
time_fee TYPE ty_amount,
|
||||
person_fee TYPE ty_amount,
|
||||
photo_fee TYPE ty_amount,
|
||||
travel_fee TYPE ty_amount,
|
||||
crew_fee TYPE ty_amount,
|
||||
total TYPE ty_amount,
|
||||
reason TYPE ty_reason,
|
||||
END OF ty_quote.
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_session,
|
||||
studio TYPE ty_session VALUE 'STUDIO',
|
||||
outdoor TYPE ty_session VALUE 'OUTDOOR',
|
||||
END OF c_session,
|
||||
BEGIN OF c_reason,
|
||||
ok TYPE ty_reason VALUE 'OK',
|
||||
session TYPE ty_reason VALUE 'SESSION',
|
||||
minutes TYPE ty_reason VALUE 'MINUTES',
|
||||
persons TYPE ty_reason VALUE 'PERSONS',
|
||||
photos TYPE ty_reason VALUE 'PHOTOS',
|
||||
distance TYPE ty_reason VALUE 'DISTANCE',
|
||||
END OF c_reason.
|
||||
|
||||
METHODS calculate
|
||||
IMPORTING is_request TYPE ty_request
|
||||
RETURNING VALUE(rs_quote) TYPE ty_quote.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_min_minutes TYPE i VALUE 30,
|
||||
c_max_minutes TYPE i VALUE 480,
|
||||
c_min_persons TYPE i VALUE 1,
|
||||
c_max_persons TYPE i VALUE 20,
|
||||
c_min_photos TYPE i VALUE 0,
|
||||
c_max_photos TYPE i VALUE 200,
|
||||
c_min_distance TYPE i VALUE 1,
|
||||
c_slot_minutes TYPE i VALUE 15,
|
||||
c_slot_fee TYPE ty_amount VALUE 20,
|
||||
c_free_persons TYPE i VALUE 2,
|
||||
c_person_fee TYPE ty_amount VALUE 10,
|
||||
c_bulk_limit TYPE i VALUE 50,
|
||||
c_photo_std TYPE ty_amount VALUE 5,
|
||||
c_photo_bulk TYPE ty_amount VALUE 4,
|
||||
c_travel_base TYPE ty_amount VALUE 15,
|
||||
c_travel_km TYPE ty_amount VALUE 2,
|
||||
c_crew_limit TYPE i VALUE 8,
|
||||
c_crew_fee TYPE ty_amount VALUE 40.
|
||||
|
||||
METHODS check_request
|
||||
IMPORTING is_request TYPE ty_request
|
||||
RETURNING VALUE(rv_reason) TYPE ty_reason.
|
||||
METHODS time_fee
|
||||
IMPORTING iv_minutes TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS person_fee
|
||||
IMPORTING iv_persons TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS photo_fee
|
||||
IMPORTING iv_photos TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS travel_fee
|
||||
IMPORTING is_request TYPE ty_request
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS crew_fee
|
||||
IMPORTING iv_persons TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}photo_pricer IMPLEMENTATION.
|
||||
METHOD calculate.
|
||||
rs_quote-reason = check_request( is_request ).
|
||||
IF rs_quote-reason <> c_reason-ok.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rs_quote-time_fee = time_fee( is_request-minutes ).
|
||||
rs_quote-person_fee = person_fee( is_request-persons ).
|
||||
rs_quote-photo_fee = photo_fee( is_request-photos ).
|
||||
rs_quote-travel_fee = travel_fee( is_request ).
|
||||
rs_quote-crew_fee = crew_fee( is_request-persons ).
|
||||
rs_quote-total = rs_quote-time_fee + rs_quote-person_fee + rs_quote-photo_fee
|
||||
+ rs_quote-travel_fee + rs_quote-crew_fee.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_request.
|
||||
IF is_request-session <> c_session-studio AND is_request-session <> c_session-outdoor.
|
||||
rv_reason = c_reason-session.
|
||||
ELSEIF is_request-minutes < c_min_minutes OR is_request-minutes > c_max_minutes.
|
||||
rv_reason = c_reason-minutes.
|
||||
ELSEIF is_request-persons < c_min_persons OR is_request-persons > c_max_persons.
|
||||
rv_reason = c_reason-persons.
|
||||
ELSEIF is_request-photos < c_min_photos OR is_request-photos > c_max_photos.
|
||||
rv_reason = c_reason-photos.
|
||||
ELSEIF is_request-session = c_session-outdoor AND is_request-distance_km >= c_min_distance.
|
||||
rv_reason = c_reason-distance.
|
||||
ELSE.
|
||||
rv_reason = c_reason-ok.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD time_fee.
|
||||
DATA(lv_slots) = ( iv_minutes + c_slot_minutes - 1 ) DIV c_slot_minutes.
|
||||
rv_fee = lv_slots * c_slot_fee.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD person_fee.
|
||||
DATA(lv_extra) = iv_persons - c_free_persons.
|
||||
IF lv_extra > 0.
|
||||
rv_fee = lv_extra * c_person_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD photo_fee.
|
||||
IF iv_photos >= c_bulk_limit.
|
||||
rv_fee = iv_photos * c_photo_bulk.
|
||||
ELSE.
|
||||
rv_fee = iv_photos * c_photo_std.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD travel_fee.
|
||||
IF is_request-session <> c_session-outdoor.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rv_fee = c_travel_base + is_request-distance_km * c_travel_km.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD crew_fee.
|
||||
IF iv_persons > c_crew_limit.
|
||||
rv_fee = c_crew_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
148
tasks_gen/train/G1035/faulty/m3_photo_pricer.clas.abap
Normal file
148
tasks_gen/train/G1035/faulty/m3_photo_pricer.clas.abap
Normal file
@@ -0,0 +1,148 @@
|
||||
CLASS {{p}}photo_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_session TYPE c LENGTH 7.
|
||||
TYPES ty_reason TYPE c LENGTH 8.
|
||||
TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
TYPES: BEGIN OF ty_request,
|
||||
session TYPE ty_session,
|
||||
minutes TYPE i,
|
||||
persons TYPE i,
|
||||
photos TYPE i,
|
||||
distance_km TYPE i,
|
||||
END OF ty_request.
|
||||
|
||||
TYPES: BEGIN OF ty_quote,
|
||||
time_fee TYPE ty_amount,
|
||||
person_fee TYPE ty_amount,
|
||||
photo_fee TYPE ty_amount,
|
||||
travel_fee TYPE ty_amount,
|
||||
crew_fee TYPE ty_amount,
|
||||
total TYPE ty_amount,
|
||||
reason TYPE ty_reason,
|
||||
END OF ty_quote.
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_session,
|
||||
studio TYPE ty_session VALUE 'STUDIO',
|
||||
outdoor TYPE ty_session VALUE 'OUTDOOR',
|
||||
END OF c_session,
|
||||
BEGIN OF c_reason,
|
||||
ok TYPE ty_reason VALUE 'OK',
|
||||
session TYPE ty_reason VALUE 'SESSION',
|
||||
minutes TYPE ty_reason VALUE 'MINUTES',
|
||||
persons TYPE ty_reason VALUE 'PERSONS',
|
||||
photos TYPE ty_reason VALUE 'PHOTOS',
|
||||
distance TYPE ty_reason VALUE 'DISTANCE',
|
||||
END OF c_reason.
|
||||
|
||||
METHODS calculate
|
||||
IMPORTING is_request TYPE ty_request
|
||||
RETURNING VALUE(rs_quote) TYPE ty_quote.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_min_minutes TYPE i VALUE 30,
|
||||
c_max_minutes TYPE i VALUE 480,
|
||||
c_min_persons TYPE i VALUE 1,
|
||||
c_max_persons TYPE i VALUE 20,
|
||||
c_min_photos TYPE i VALUE 0,
|
||||
c_max_photos TYPE i VALUE 200,
|
||||
c_min_distance TYPE i VALUE 1,
|
||||
c_slot_minutes TYPE i VALUE 15,
|
||||
c_slot_fee TYPE ty_amount VALUE 20,
|
||||
c_free_persons TYPE i VALUE 2,
|
||||
c_person_fee TYPE ty_amount VALUE 10,
|
||||
c_bulk_limit TYPE i VALUE 50,
|
||||
c_photo_std TYPE ty_amount VALUE 5,
|
||||
c_photo_bulk TYPE ty_amount VALUE 4,
|
||||
c_travel_base TYPE ty_amount VALUE 15,
|
||||
c_travel_km TYPE ty_amount VALUE 2,
|
||||
c_crew_limit TYPE i VALUE 8,
|
||||
c_crew_fee TYPE ty_amount VALUE 40.
|
||||
|
||||
METHODS check_request
|
||||
IMPORTING is_request TYPE ty_request
|
||||
RETURNING VALUE(rv_reason) TYPE ty_reason.
|
||||
METHODS time_fee
|
||||
IMPORTING iv_minutes TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS person_fee
|
||||
IMPORTING iv_persons TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS photo_fee
|
||||
IMPORTING iv_photos TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS travel_fee
|
||||
IMPORTING is_request TYPE ty_request
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS crew_fee
|
||||
IMPORTING iv_persons TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}photo_pricer IMPLEMENTATION.
|
||||
METHOD calculate.
|
||||
rs_quote-reason = check_request( is_request ).
|
||||
IF rs_quote-reason <> c_reason-ok.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rs_quote-time_fee = time_fee( is_request-minutes ).
|
||||
rs_quote-person_fee = person_fee( is_request-persons ).
|
||||
rs_quote-photo_fee = photo_fee( is_request-photos ).
|
||||
rs_quote-travel_fee = travel_fee( is_request ).
|
||||
rs_quote-crew_fee = crew_fee( is_request-persons ).
|
||||
rs_quote-total = rs_quote-time_fee + rs_quote-person_fee + rs_quote-photo_fee
|
||||
+ rs_quote-travel_fee + rs_quote-crew_fee.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_request.
|
||||
IF is_request-session <> c_session-studio AND is_request-session <> c_session-outdoor.
|
||||
rv_reason = c_reason-session.
|
||||
ELSEIF is_request-minutes < c_min_minutes OR is_request-minutes > c_max_minutes.
|
||||
rv_reason = c_reason-minutes.
|
||||
ELSEIF is_request-persons < c_min_persons OR is_request-persons > c_max_persons.
|
||||
rv_reason = c_reason-persons.
|
||||
ELSEIF is_request-photos < c_min_photos OR is_request-photos > c_max_photos.
|
||||
rv_reason = c_reason-photos.
|
||||
ELSEIF is_request-session = c_session-outdoor AND is_request-distance_km < c_min_distance.
|
||||
rv_reason = c_reason-distance.
|
||||
ELSE.
|
||||
rv_reason = c_reason-ok.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD time_fee.
|
||||
DATA(lv_slots) = ( iv_minutes + c_slot_minutes - 1 ) DIV c_slot_minutes.
|
||||
rv_fee = lv_slots * c_slot_fee.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD person_fee.
|
||||
DATA(lv_extra) = iv_persons - c_free_persons.
|
||||
IF lv_extra > 0.
|
||||
rv_fee = lv_extra * c_person_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD photo_fee.
|
||||
IF iv_photos >= c_bulk_limit.
|
||||
rv_fee = iv_photos / c_photo_bulk.
|
||||
ELSE.
|
||||
rv_fee = iv_photos * c_photo_std.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD travel_fee.
|
||||
IF is_request-session <> c_session-outdoor.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rv_fee = c_travel_base + is_request-distance_km * c_travel_km.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD crew_fee.
|
||||
IF iv_persons > c_crew_limit.
|
||||
rv_fee = c_crew_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
148
tasks_gen/train/G1035/faulty/m4_photo_pricer.clas.abap
Normal file
148
tasks_gen/train/G1035/faulty/m4_photo_pricer.clas.abap
Normal file
@@ -0,0 +1,148 @@
|
||||
CLASS {{p}}photo_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_session TYPE c LENGTH 7.
|
||||
TYPES ty_reason TYPE c LENGTH 8.
|
||||
TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
|
||||
|
||||
TYPES: BEGIN OF ty_request,
|
||||
session TYPE ty_session,
|
||||
minutes TYPE i,
|
||||
persons TYPE i,
|
||||
photos TYPE i,
|
||||
distance_km TYPE i,
|
||||
END OF ty_request.
|
||||
|
||||
TYPES: BEGIN OF ty_quote,
|
||||
time_fee TYPE ty_amount,
|
||||
person_fee TYPE ty_amount,
|
||||
photo_fee TYPE ty_amount,
|
||||
travel_fee TYPE ty_amount,
|
||||
crew_fee TYPE ty_amount,
|
||||
total TYPE ty_amount,
|
||||
reason TYPE ty_reason,
|
||||
END OF ty_quote.
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_session,
|
||||
studio TYPE ty_session VALUE 'STUDIO',
|
||||
outdoor TYPE ty_session VALUE 'OUTDOOR',
|
||||
END OF c_session,
|
||||
BEGIN OF c_reason,
|
||||
ok TYPE ty_reason VALUE 'OK',
|
||||
session TYPE ty_reason VALUE 'SESSION',
|
||||
minutes TYPE ty_reason VALUE 'MINUTES',
|
||||
persons TYPE ty_reason VALUE 'PERSONS',
|
||||
photos TYPE ty_reason VALUE 'PHOTOS',
|
||||
distance TYPE ty_reason VALUE 'DISTANCE',
|
||||
END OF c_reason.
|
||||
|
||||
METHODS calculate
|
||||
IMPORTING is_request TYPE ty_request
|
||||
RETURNING VALUE(rs_quote) TYPE ty_quote.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS:
|
||||
c_min_minutes TYPE i VALUE 30,
|
||||
c_max_minutes TYPE i VALUE 480,
|
||||
c_min_persons TYPE i VALUE 1,
|
||||
c_max_persons TYPE i VALUE 20,
|
||||
c_min_photos TYPE i VALUE 0,
|
||||
c_max_photos TYPE i VALUE 200,
|
||||
c_min_distance TYPE i VALUE 1,
|
||||
c_slot_minutes TYPE i VALUE 15,
|
||||
c_slot_fee TYPE ty_amount VALUE 20,
|
||||
c_free_persons TYPE i VALUE 2,
|
||||
c_person_fee TYPE ty_amount VALUE 10,
|
||||
c_bulk_limit TYPE i VALUE 50,
|
||||
c_photo_std TYPE ty_amount VALUE 5,
|
||||
c_photo_bulk TYPE ty_amount VALUE 4,
|
||||
c_travel_base TYPE ty_amount VALUE 15,
|
||||
c_travel_km TYPE ty_amount VALUE 2,
|
||||
c_crew_limit TYPE i VALUE 8,
|
||||
c_crew_fee TYPE ty_amount VALUE 40.
|
||||
|
||||
METHODS check_request
|
||||
IMPORTING is_request TYPE ty_request
|
||||
RETURNING VALUE(rv_reason) TYPE ty_reason.
|
||||
METHODS time_fee
|
||||
IMPORTING iv_minutes TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS person_fee
|
||||
IMPORTING iv_persons TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS photo_fee
|
||||
IMPORTING iv_photos TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS travel_fee
|
||||
IMPORTING is_request TYPE ty_request
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
METHODS crew_fee
|
||||
IMPORTING iv_persons TYPE i
|
||||
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}photo_pricer IMPLEMENTATION.
|
||||
METHOD calculate.
|
||||
rs_quote-reason = check_request( is_request ).
|
||||
IF rs_quote-reason <> c_reason-ok.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rs_quote-time_fee = time_fee( is_request-minutes ).
|
||||
rs_quote-person_fee = person_fee( is_request-persons ).
|
||||
rs_quote-photo_fee = photo_fee( is_request-photos ).
|
||||
rs_quote-travel_fee = travel_fee( is_request ).
|
||||
rs_quote-crew_fee = crew_fee( is_request-persons ).
|
||||
rs_quote-total = rs_quote-time_fee + rs_quote-person_fee + rs_quote-photo_fee
|
||||
+ rs_quote-travel_fee + rs_quote-crew_fee.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_request.
|
||||
IF is_request-session <> c_session-studio AND is_request-session <> c_session-outdoor.
|
||||
rv_reason = c_reason-session.
|
||||
ELSEIF is_request-minutes < c_min_minutes OR is_request-minutes > c_max_minutes.
|
||||
rv_reason = c_reason-minutes.
|
||||
ELSEIF is_request-persons < c_min_persons OR is_request-persons > c_max_persons.
|
||||
rv_reason = c_reason-persons.
|
||||
ELSEIF is_request-photos < c_min_photos OR is_request-photos > c_max_photos.
|
||||
rv_reason = c_reason-photos.
|
||||
ELSEIF is_request-session = c_session-outdoor AND is_request-distance_km < c_min_distance.
|
||||
rv_reason = c_reason-distance.
|
||||
ELSE.
|
||||
rv_reason = c_reason-ok.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD time_fee.
|
||||
DATA(lv_slots) = ( iv_minutes + c_slot_minutes - 1 ) DIV c_slot_minutes.
|
||||
rv_fee = lv_slots * c_slot_fee.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD person_fee.
|
||||
DATA(lv_extra) = iv_persons - c_free_persons.
|
||||
IF lv_extra > 0.
|
||||
rv_fee = lv_extra * c_person_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD photo_fee.
|
||||
IF iv_photos >= c_bulk_limit.
|
||||
rv_fee = iv_photos * c_photo_bulk.
|
||||
ELSE.
|
||||
rv_fee = iv_photos / c_photo_std.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD travel_fee.
|
||||
IF is_request-session <> c_session-outdoor.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
rv_fee = c_travel_base + is_request-distance_km * c_travel_km.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD crew_fee.
|
||||
IF iv_persons > c_crew_limit.
|
||||
rv_fee = c_crew_fee.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user