CLASS {{p}}harvest_evaluator DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. METHODS 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. PRIVATE SECTION. TYPES tt_member_key TYPE HASHED TABLE OF {{p}}if_harvest=>ty_member WITH UNIQUE KEY member_id. TYPES tt_member_id TYPE SORTED TABLE OF {{p}}if_harvest=>ty_member_id WITH UNIQUE KEY table_line. TYPES tt_report_key TYPE SORTED TABLE OF {{p}}if_harvest=>ty_report WITH NON-UNIQUE KEY variety member_id. METHODS countable_reports IMPORTING it_report TYPE {{p}}if_harvest=>tt_report it_member TYPE tt_member_key RETURNING VALUE(rt_report) TYPE tt_report_key. METHODS is_countable IMPORTING is_report TYPE {{p}}if_harvest=>ty_report it_member TYPE tt_member_key RETURNING VALUE(rv_count) TYPE abap_bool. ENDCLASS. CLASS {{p}}harvest_evaluator IMPLEMENTATION. METHOD evaluate. DATA lt_member TYPE tt_member_key. lt_member = it_member. DATA(lt_report) = countable_reports( it_report = it_report it_member = lt_member ). DATA lt_result TYPE {{p}}if_harvest=>tt_result. DATA lt_member_id TYPE tt_member_id. LOOP AT lt_report ASSIGNING FIELD-SYMBOL() GROUP BY -variety. DATA(lv_variety) = -variety. DATA(lv_total) = 0. CLEAR lt_member_id. LOOP AT GROUP ASSIGNING FIELD-SYMBOL(). lv_total = lv_total + -quantity_kg. INSERT -member_id INTO TABLE lt_member_id. ENDLOOP. APPEND VALUE {{p}}if_harvest=>ty_result( variety = lv_variety total_kg = lv_total member_count = lines( lt_member_id ) ) TO lt_result. ENDLOOP. SORT lt_result BY total_kg DESCENDING variety ASCENDING. rt_result = lt_result. ENDMETHOD. METHOD countable_reports. LOOP AT it_report INTO DATA(ls_report). IF is_countable( is_report = ls_report it_member = it_member ) = abap_false. CONTINUE. ENDIF. INSERT ls_report INTO TABLE rt_report. ENDLOOP. ENDMETHOD. METHOD is_countable. IF is_report-quantity_kg <= 0. RETURN. ENDIF. rv_count = xsdbool( line_exists( it_member[ member_id = is_report-member_id ] ) ). ENDMETHOD. ENDCLASS.