CLASS {{p}}scrap_payout DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES {{p}}if_scrap_payout. PRIVATE SECTION. TYPES ty_mat_code TYPE c LENGTH 4. TYPES ty_weight TYPE p LENGTH 8 DECIMALS 3. TYPES ty_price TYPE p LENGTH 8 DECIMALS 2. TYPES ty_quantity TYPE p LENGTH 15 DECIMALS 5. METHODS payable_weight IMPORTING iv_weight_kg TYPE ty_weight iv_contamination TYPE i RETURNING VALUE(rv_weight) TYPE ty_quantity. ENDCLASS. CLASS {{p}}scrap_payout IMPLEMENTATION. METHOD {{p}}if_scrap_payout~calculate. DATA lv_mat_code TYPE ty_mat_code. lv_mat_code = to_upper( iv_material ). DATA lv_price TYPE ty_price. CASE lv_mat_code. WHEN {{p}}if_scrap_payout=>c_material-copper. lv_price = '4.20'. WHEN {{p}}if_scrap_payout=>c_material-aluminium. lv_price = '1.10'. WHEN {{p}}if_scrap_payout=>c_material-steel. lv_price = '0.30'. WHEN {{p}}if_scrap_payout=>c_material-brass. lv_price = '3.00'. WHEN OTHERS. rs_payout = VALUE #( amount = 0 reason = {{p}}if_scrap_payout=>c_reason-material ). RETURN. ENDCASE. IF iv_weight_kg <= 0. rs_payout = VALUE #( amount = 0 reason = {{p}}if_scrap_payout=>c_reason-weight ). RETURN. ENDIF. IF iv_contamination < 0 OR iv_contamination > 100. rs_payout = VALUE #( amount = 0 reason = {{p}}if_scrap_payout=>c_reason-dirty ). RETURN. ENDIF. DATA lv_payable TYPE ty_quantity. lv_payable = payable_weight( iv_weight_kg = iv_weight_kg iv_contamination = iv_contamination ). DATA lv_gross TYPE ty_quantity. lv_gross = lv_payable * lv_price. rs_payout = VALUE #( amount = round( val = lv_gross dec = 2 ) reason = {{p}}if_scrap_payout=>c_reason-ok ). ENDMETHOD. METHOD payable_weight. DATA lv_remaining TYPE i. lv_remaining = 100 - iv_contamination. rv_weight = iv_weight_kg / lv_remaining / 100. ENDMETHOD. ENDCLASS.