91 lines
2.9 KiB
ABAP
91 lines
2.9 KiB
ABAP
CLASS {{p}}feed_stock DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
|
PUBLIC SECTION.
|
|
INTERFACES {{p}}if_feed_stock.
|
|
|
|
PRIVATE SECTION.
|
|
TYPES tt_sum TYPE HASHED TABLE OF {{p}}if_feed_stock=>ty_stock
|
|
WITH UNIQUE KEY feed_type.
|
|
|
|
METHODS sum_deliveries
|
|
IMPORTING it_supplier_a TYPE {{p}}if_feed_stock=>tt_delivery
|
|
it_supplier_b TYPE {{p}}if_feed_stock=>tt_delivery
|
|
RETURNING VALUE(rt_sum) TYPE tt_sum.
|
|
|
|
METHODS add_delivery
|
|
IMPORTING is_delivery TYPE {{p}}if_feed_stock=>ty_delivery
|
|
CHANGING ct_sum TYPE tt_sum.
|
|
|
|
METHODS is_counted
|
|
IMPORTING is_delivery TYPE {{p}}if_feed_stock=>ty_delivery
|
|
RETURNING VALUE(rv_counted) TYPE abap_bool.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}feed_stock IMPLEMENTATION.
|
|
METHOD {{p}}if_feed_stock~consolidate.
|
|
DATA(lt_sum) = sum_deliveries( it_supplier_a = it_supplier_a
|
|
it_supplier_b = it_supplier_b ).
|
|
LOOP AT lt_sum ASSIGNING FIELD-SYMBOL(<ls_sum>).
|
|
IF <ls_sum>-quantity IS INITIAL.
|
|
CONTINUE.
|
|
ENDIF.
|
|
APPEND <ls_sum> TO rt_stock.
|
|
ENDLOOP.
|
|
SORT rt_stock BY feed_type.
|
|
ENDMETHOD.
|
|
|
|
METHOD {{p}}if_feed_stock~quantity_of.
|
|
DATA lt_stock TYPE {{p}}if_feed_stock=>tt_stock.
|
|
lt_stock = it_stock.
|
|
SORT lt_stock BY feed_type.
|
|
READ TABLE lt_stock ASSIGNING FIELD-SYMBOL(<ls_stock>)
|
|
WITH KEY feed_type = iv_feed_type BINARY SEARCH.
|
|
IF sy-subrc = 0.
|
|
rv_quantity = <ls_stock>-quantity.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
METHOD {{p}}if_feed_stock~top_feed.
|
|
IF it_stock IS INITIAL.
|
|
RETURN.
|
|
ENDIF.
|
|
DATA(lt_ranked) = it_stock.
|
|
SORT lt_ranked BY quantity DESCENDING feed_type ASCENDING.
|
|
rv_feed_type = lt_ranked[ 1 ]-feed_type.
|
|
ENDMETHOD.
|
|
|
|
METHOD sum_deliveries.
|
|
DATA lt_all TYPE {{p}}if_feed_stock=>tt_delivery.
|
|
DATA lt_sum TYPE tt_sum.
|
|
APPEND LINES OF it_supplier_a TO lt_all.
|
|
APPEND LINES OF it_supplier_b TO lt_all.
|
|
LOOP AT lt_all ASSIGNING FIELD-SYMBOL(<ls_delivery>).
|
|
IF is_counted( <ls_delivery> ) = abap_false.
|
|
CONTINUE.
|
|
ENDIF.
|
|
add_delivery( EXPORTING is_delivery = <ls_delivery>
|
|
CHANGING ct_sum = lt_sum ).
|
|
ENDLOOP.
|
|
rt_sum = lt_sum.
|
|
ENDMETHOD.
|
|
|
|
METHOD add_delivery.
|
|
ASSIGN ct_sum[ feed_type = is_delivery-feed_type ] TO FIELD-SYMBOL(<ls_sum>).
|
|
IF sy-subrc <> 0.
|
|
INSERT VALUE #( feed_type = is_delivery-feed_type
|
|
unit = is_delivery-unit
|
|
quantity = is_delivery-quantity
|
|
deliveries = 1 )
|
|
INTO TABLE ct_sum ASSIGNING <ls_sum>.
|
|
RETURN.
|
|
ENDIF.
|
|
<ls_sum>-quantity = <ls_sum>-quantity + is_delivery-quantity.
|
|
<ls_sum>-deliveries = <ls_sum>-deliveries + 1.
|
|
ENDMETHOD.
|
|
|
|
METHOD is_counted.
|
|
rv_counted = xsdbool( is_delivery-feed_type IS NOT INITIAL
|
|
AND is_delivery-quantity IS NOT INITIAL ).
|
|
ENDMETHOD.
|
|
ENDCLASS.
|