77 lines
4.0 KiB
Markdown
77 lines
4.0 KiB
Markdown
# 1. Goal
|
|
Define the interface {{P}}IF_COBBLER in package $TMP. A cobbler's workshop
|
|
repairs shoes. The order desk takes the repair orders and the pricing engine
|
|
prices them. The interface is the contract between the order desk and the
|
|
pricing engine. The interface carries the service codes, the reason codes,
|
|
the price parameters and the two methods CHECK and PRICE.
|
|
|
|
# 2. Open questions
|
|
None.
|
|
|
|
# 3. Context
|
|
- The interface {{P}}IF_COBBLER does not exist yet. Create it in package $TMP.
|
|
- One repair order covers one service and one number of pairs of shoes.
|
|
- The method CHECK tells the order desk whether an order can be priced. It
|
|
returns C_REASON-SERVICE if the service of the order is not one of the four
|
|
codes of C_SERVICE. It returns C_REASON-PAIRS if the number of pairs is less
|
|
than 1 or greater than C_RULE-MAX_PAIRS. Else it returns C_REASON-OK.
|
|
- The method PRICE calculates the price of an order in euro. It multiplies the
|
|
base price of the service with the number of pairs, adds
|
|
C_RULE-EXPRESS_PERCENT percent if EXPRESS is true, subtracts
|
|
C_RULE-MEMBER_PERCENT percent if MEMBER is true, rounds the result to full
|
|
10 cents (5 cents round up) and never returns less than C_RULE-MIN_ORDER.
|
|
- The workshop keeps the service codes and the price parameters in the
|
|
interface, so that the order desk and the pricing engine use the same values.
|
|
- The pricing engine that implements the interface is not part of this task.
|
|
- No database table, no CDS view, no function module and no report is needed.
|
|
|
|
# 4. Contract
|
|
- Create the interface {{P}}IF_COBBLER in package $TMP.
|
|
- The interface is public.
|
|
- The interface has the types, the constants and the methods of section 5 and
|
|
nothing else.
|
|
|
|
# 5. Business rules
|
|
1. The interface has exactly two methods: CHECK and PRICE.
|
|
2. TY_REASON is a text field of length 10.
|
|
3. TY_SERVICE is a text field of length 4.
|
|
4. TY_AMOUNT is a packed number of length 8 with 2 decimal places.
|
|
5. TY_ORDER is a structure with exactly four components in this order: SERVICE
|
|
of type TY_SERVICE, PAIRS of type i, EXPRESS of type abap_bool and MEMBER
|
|
of type abap_bool.
|
|
6. C_SERVICE holds the four service codes of the workshop. The components, the
|
|
types and the values are: HEEL of type TY_SERVICE = 'HEEL' (heel
|
|
replacement), SOLE of type TY_SERVICE = 'SOLE' (full sole), SEAM of type
|
|
TY_SERVICE = 'SEAM' (seam repair) and POLISH of type TY_SERVICE = 'POLI'
|
|
(clean and polish).
|
|
7. C_REASON holds the three reason codes of the check. The components, the
|
|
types and the values are: OK of type TY_REASON = 'OK', SERVICE of type
|
|
TY_REASON = 'SERVICE' and PAIRS of type TY_REASON = 'PAIRS'.
|
|
8. C_RULE holds the price parameters. The components, the types and the values
|
|
are: MAX_PAIRS of type i = 12, EXPRESS_PERCENT of type i = 40,
|
|
MEMBER_PERCENT of type i = 10 and MIN_ORDER of type TY_AMOUNT = 8.00.
|
|
9. C_BASE_PRICE holds the price of one pair of shoes for each service. The
|
|
components, the types and the values are: HEEL of type TY_AMOUNT = 12.50,
|
|
SOLE of type TY_AMOUNT = 25.00, SEAM of type TY_AMOUNT = 8.00 and POLISH of
|
|
type TY_AMOUNT = 6.50.
|
|
10. The method CHECK has the importing parameter IS_ORDER of type TY_ORDER and
|
|
the returning parameter RV_REASON of type TY_REASON.
|
|
11. The method PRICE has the importing parameter IS_ORDER of type TY_ORDER and
|
|
the returning parameter RV_PRICE of type TY_AMOUNT.
|
|
|
|
# 6. Constraints
|
|
- Release target: SAP_BASIS 816 (ABAP Platform 2025).
|
|
- Coding standards: Clean ABAP. Names as in section 5. No obsolete syntax.
|
|
- Out of scope: a class that implements the interface, a database table, a CDS
|
|
view, a function module and a report.
|
|
|
|
# 7. Acceptance
|
|
- The interface is active and has no syntax error.
|
|
- The interface has exactly the types, the constants and the methods of
|
|
section 5.
|
|
- Write your own ABAP Unit tests in the global test class {{P}}COBBLER_TEST in
|
|
package $TMP. The class is public, final and it is a test class
|
|
(FOR TESTING DURATION SHORT RISK LEVEL HARMLESS). Test the constants, the
|
|
type lengths and the method signatures of {{P}}IF_COBBLER.
|
|
- The hidden tests pass.
|