65 lines
2.3 KiB
ABAP
65 lines
2.3 KiB
ABAP
CLASS {{p}}studio_summary DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
|
PUBLIC SECTION.
|
|
TYPES:
|
|
BEGIN OF ty_attendance,
|
|
studio TYPE c LENGTH 4,
|
|
class_id TYPE c LENGTH 8,
|
|
class_type TYPE c LENGTH 10,
|
|
member_id TYPE c LENGTH 8,
|
|
fee TYPE p LENGTH 8 DECIMALS 2,
|
|
END OF ty_attendance,
|
|
tt_attendance TYPE STANDARD TABLE OF ty_attendance WITH EMPTY KEY,
|
|
BEGIN OF ty_summary,
|
|
class_type TYPE c LENGTH 10,
|
|
class_count TYPE i,
|
|
member_count TYPE i,
|
|
total_fee TYPE p LENGTH 8 DECIMALS 2,
|
|
END OF ty_summary,
|
|
tt_summary TYPE STANDARD TABLE OF ty_summary WITH EMPTY KEY.
|
|
|
|
METHODS summarize
|
|
IMPORTING it_attendance TYPE tt_attendance
|
|
RETURNING VALUE(rt_summary) TYPE tt_summary.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}studio_summary IMPLEMENTATION.
|
|
METHOD summarize.
|
|
DATA lt_seen TYPE HASHED TABLE OF ty_attendance
|
|
WITH UNIQUE KEY studio class_id member_id.
|
|
DATA lt_class TYPE HASHED TABLE OF ty_attendance
|
|
WITH UNIQUE KEY studio class_id class_type.
|
|
DATA lt_member TYPE HASHED TABLE OF ty_attendance
|
|
WITH UNIQUE KEY class_type member_id.
|
|
DATA lt_groups TYPE HASHED TABLE OF ty_summary WITH UNIQUE KEY class_type.
|
|
|
|
LOOP AT it_attendance ASSIGNING FIELD-SYMBOL(<ls_attendance>).
|
|
IF <ls_attendance>-class_type IS INITIAL OR <ls_attendance>-fee <= 0.
|
|
CONTINUE.
|
|
ENDIF.
|
|
INSERT <ls_attendance> INTO TABLE lt_seen.
|
|
IF sy-subrc <> 0.
|
|
CONTINUE.
|
|
ENDIF.
|
|
ASSIGN lt_groups[ class_type = <ls_attendance>-class_type ]
|
|
TO FIELD-SYMBOL(<ls_group>).
|
|
IF sy-subrc <> 0.
|
|
INSERT VALUE ty_summary( class_type = <ls_attendance>-class_type )
|
|
INTO TABLE lt_groups ASSIGNING <ls_group>.
|
|
ENDIF.
|
|
<ls_group>-total_fee = <ls_group>-total_fee + <ls_attendance>-fee.
|
|
INSERT <ls_attendance> INTO TABLE lt_class.
|
|
IF sy-subrc = 0.
|
|
<ls_group>-class_count = <ls_group>-class_count - 1.
|
|
ENDIF.
|
|
INSERT <ls_attendance> INTO TABLE lt_member.
|
|
IF sy-subrc = 0.
|
|
<ls_group>-member_count = <ls_group>-member_count + 1.
|
|
ENDIF.
|
|
ENDLOOP.
|
|
|
|
rt_summary = lt_groups.
|
|
SORT rt_summary BY class_type.
|
|
ENDMETHOD.
|
|
ENDCLASS.
|