CLASS {{p}}cowork_fee DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. TYPES ty_desk TYPE c LENGTH 3. TYPES ty_amount TYPE i. METHODS constructor. METHODS calculate_fee IMPORTING iv_desk TYPE ty_desk iv_months TYPE i iv_student TYPE abap_bool iv_under_25 TYPE abap_bool RETURNING VALUE(rv_fee) TYPE ty_amount. PRIVATE SECTION. METHODS monthly_fee IMPORTING iv_desk TYPE ty_desk iv_student TYPE abap_bool iv_under_25 TYPE abap_bool RETURNING VALUE(rv_fee) TYPE ty_amount. ENDCLASS. CLASS {{p}}cowork_fee IMPLEMENTATION. METHOD constructor. ENDMETHOD. METHOD calculate_fee. IF iv_months < 1. rv_fee = 0. RETURN. ENDIF. DATA(lv_monthly) = monthly_fee( iv_desk = iv_desk iv_student = iv_student iv_under_25 = iv_under_25 ). rv_fee = lv_monthly * iv_months. ENDMETHOD. METHOD monthly_fee. " Resolve the contradiction: the student rule wins over the under-25 rule. IF iv_student = abap_true. CASE iv_desk. WHEN 'HOT'. rv_fee = 160. WHEN 'DED'. rv_fee = 280. WHEN 'PRI'. rv_fee = 480. WHEN OTHERS. rv_fee = 0. ENDCASE. ELSEIF iv_under_25 = abap_true. CASE iv_desk. WHEN 'HOT'. rv_fee = 150. WHEN 'DED'. rv_fee = 260. WHEN 'PRI'. rv_fee = 450. WHEN OTHERS. rv_fee = 0. ENDCASE. ELSE. CASE iv_desk. WHEN 'HOT'. rv_fee = 200. WHEN 'DED'. rv_fee = 350. WHEN 'PRI'. rv_fee = 600. WHEN OTHERS. rv_fee = 0. ENDCASE. ENDIF. ENDMETHOD. ENDCLASS.