80 lines
2.6 KiB
ABAP
80 lines
2.6 KiB
ABAP
CLASS {{p}}watch_order_pool DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
|
PUBLIC SECTION.
|
|
INTERFACES {{p}}if_watch_order.
|
|
|
|
PRIVATE SECTION.
|
|
TYPES ty_orders TYPE SORTED TABLE OF {{p}}if_watch_order=>ty_order
|
|
WITH UNIQUE KEY order_id.
|
|
TYPES ty_totals TYPE SORTED TABLE OF {{p}}if_watch_order=>ty_customer_total
|
|
WITH UNIQUE KEY customer.
|
|
|
|
METHODS unique_orders
|
|
IMPORTING it_orders TYPE {{p}}if_watch_order=>tt_orders
|
|
RETURNING VALUE(rt_orders) TYPE ty_orders.
|
|
METHODS add_orders
|
|
IMPORTING it_orders TYPE {{p}}if_watch_order=>tt_orders
|
|
CHANGING ct_orders TYPE ty_orders.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}watch_order_pool IMPLEMENTATION.
|
|
METHOD {{p}}if_watch_order~merge_orders.
|
|
DATA(lt_merged) = unique_orders( it_intake ).
|
|
add_orders( EXPORTING it_orders = it_workshop
|
|
CHANGING ct_orders = lt_merged ).
|
|
rt_merged = lt_merged.
|
|
ENDMETHOD.
|
|
|
|
METHOD {{p}}if_watch_order~open_orders.
|
|
DATA(lt_orders) = unique_orders( it_orders ).
|
|
LOOP AT lt_orders INTO DATA(ls_order).
|
|
IF ls_order-status = {{p}}if_watch_order=>c_status-open.
|
|
APPEND ls_order TO rt_open.
|
|
ENDIF.
|
|
ENDLOOP.
|
|
ENDMETHOD.
|
|
|
|
METHOD {{p}}if_watch_order~customer_totals.
|
|
DATA(lt_orders) = unique_orders( it_orders ).
|
|
DATA lt_totals TYPE ty_totals.
|
|
LOOP AT lt_orders INTO DATA(ls_order).
|
|
IF ls_order-status = {{p}}if_watch_order=>c_status-open.
|
|
READ TABLE lt_totals ASSIGNING FIELD-SYMBOL(<ls_total>)
|
|
WITH TABLE KEY customer = ls_order-customer.
|
|
IF sy-subrc = 0.
|
|
<ls_total>-total_min = <ls_total>-total_min + ls_order-duration_min.
|
|
ELSE.
|
|
INSERT VALUE {{p}}if_watch_order=>ty_customer_total(
|
|
customer = ls_order-customer
|
|
total_min = ls_order-duration_min )
|
|
INTO TABLE lt_totals.
|
|
ENDIF.
|
|
ENDIF.
|
|
ENDLOOP.
|
|
rt_totals = lt_totals.
|
|
ENDMETHOD.
|
|
|
|
METHOD {{p}}if_watch_order~find_order.
|
|
DATA(lt_orders) = unique_orders( it_orders ).
|
|
DATA ls_found TYPE {{p}}if_watch_order=>ty_order.
|
|
READ TABLE lt_orders INTO ls_found WITH TABLE KEY order_id = iv_order_id.
|
|
rs_order = ls_found.
|
|
ENDMETHOD.
|
|
|
|
METHOD add_orders.
|
|
LOOP AT it_orders INTO DATA(ls_order).
|
|
IF line_exists( ct_orders[ order_id = ls_order-order_id ] ).
|
|
CONTINUE.
|
|
ENDIF.
|
|
INSERT ls_order INTO TABLE ct_orders.
|
|
ENDLOOP.
|
|
ENDMETHOD.
|
|
|
|
METHOD unique_orders.
|
|
DATA lt_orders TYPE ty_orders.
|
|
add_orders( EXPORTING it_orders = it_orders
|
|
CHANGING ct_orders = lt_orders ).
|
|
rt_orders = lt_orders.
|
|
ENDMETHOD.
|
|
ENDCLASS.
|