53 lines
2.4 KiB
Markdown
53 lines
2.4 KiB
Markdown
# 1. Goal
|
|
A tool hire shop rents power tools to its customers. The checkout program calls
|
|
the class {{P}}TOOL_HIRE for each hire request before it prints the hire
|
|
contract. The program needs the fee of the hire and one reason code.
|
|
|
|
# 2. Open questions
|
|
None.
|
|
|
|
# 3. Context
|
|
- Interface {{P}}IF_TOOL_HIRE exists in package $TMP. It is active.
|
|
- The interface has these types: TY_TOOL (CHAR 1), TY_DAYS (integer),
|
|
TY_AMOUNT (packed, 13 digits, 2 decimals), TY_REASON (CHAR 12).
|
|
- The interface has the structure TY_RESULT with the components FEE and REASON.
|
|
- The interface has the constant structure C_REASON with the values OK,
|
|
UNKNOWN_TOOL and TOO_SHORT.
|
|
- The interface has one method:
|
|
CALCULATE IMPORTING iv_tool TYPE ty_tool
|
|
iv_days TYPE ty_days
|
|
RETURNING VALUE(rs_result) TYPE ty_result.
|
|
|
|
# 4. Contract
|
|
- Create the class {{P}}TOOL_HIRE in package $TMP.
|
|
- The class is public, final, and has a public constructor without parameters.
|
|
- The class implements {{P}}IF_TOOL_HIRE.
|
|
- Do not add other public methods.
|
|
|
|
# 5. Business rules
|
|
1. The tool category is one character. These categories exist: 'D' is a drill,
|
|
'S' is a sander, 'C' is a tile cutter. Every other category is unknown. For
|
|
an unknown category return the reason UNKNOWN_TOOL and the fee 0.00.
|
|
2. A hire of less than 1 day is not possible. Return the reason TOO_SHORT and
|
|
the fee 0.00.
|
|
3. The daily rate is 12.00 for 'D', 9.00 for 'S' and 15.00 for 'C'. A hire of
|
|
1 to 6 days costs the daily rate multiplied by the number of days.
|
|
4. A hire of 7 days or more costs the weekly rate instead of the daily rate.
|
|
The weekly rate is 60.00 for 'D', 45.00 for 'S' and 75.00 for 'C'.
|
|
5. A hire of 28 days or more costs the monthly rate instead of the weekly rate.
|
|
The monthly rate is 180.00 for 'D', 135.00 for 'S' and 225.00 for 'C'.
|
|
6. The shop accepts hires of at most 90 days.
|
|
7. For every accepted hire return the reason OK and the fee of the hire.
|
|
8. The checkout program calls the class for every hire request, also for
|
|
requests that the shop cannot accept.
|
|
|
|
# 6. Constraints
|
|
- Release target: SAP_BASIS 816 (ABAP Platform 2025).
|
|
- Coding standards: Clean ABAP. Method length below 40 statements. No global
|
|
variables. No comment that restates the code.
|
|
- Out of scope: do not change {{P}}IF_TOOL_HIRE.
|
|
|
|
# 7. Acceptance
|
|
- The class is active and has no syntax error.
|
|
- Write your own ABAP Unit tests for the class.
|