2.2 KiB
2.2 KiB
1. Goal
A vineyard cooperative collects the harvest reports of its members. The cooperative needs one evaluation of the harvest for each grape variety. A planning program calls the evaluation before it plans the transport of the grapes to the winery.
2. Open questions
None.
3. Context
- The interface {{P}}IF_HARVEST exists in package $TMP. It is active.
- The interface contains the data types for the harvest reports, for the member master data, and for the result. Read the interface before you start to work.
- A harvest report has a member, a grape variety, and a quantity in kilograms.
- The member master data has a member ID and a member name.
4. Contract
- Create the class {{P}}HARVEST_EVALUATOR in package $TMP.
- The class is public and final. It has a public constructor without parameters.
- The class has one public method: EVALUATE IMPORTING it_report TYPE {{P}}IF_HARVEST=>TT_REPORT it_member TYPE {{P}}IF_HARVEST=>TT_MEMBER RETURNING VALUE(rt_result) TYPE {{P}}IF_HARVEST=>TT_RESULT.
- Do not add other public methods.
5. Business rules
A harvest report is countable when rule 1 and rule 2 are true.
- The member_id of the report occurs in it_member. A member_id occurs at most one time in it_member.
- The quantity_kg of the report is greater than 0.
- Group the countable reports by variety. Create one result row for each variety that has at least one countable report.
- The total_kg of a result row is the sum of the quantity_kg of all countable reports of the variety.
- The member_count of a result row is the number of different member_id values in the countable reports of the variety.
- Sort the result rows by total_kg in descending order. When two rows have the same total_kg, sort these rows by variety in ascending order.
- When no report is countable, return an empty table.
6. Constraints
- Release target: 8.16.
- 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_HARVEST.
7. Acceptance
- The class is active and has no syntax error.
- The hidden tests pass.
- Write your own ABAP Unit tests for the class.