CLASS {{p}}pallet_allocator DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. TYPES ty_category TYPE c LENGTH 2. TYPES ty_weight TYPE i. TYPES ty_height TYPE i. TYPES: BEGIN OF ty_slot, aisle TYPE c LENGTH 2, rack TYPE i, temp_zone TYPE c LENGTH 2, is_valid TYPE abap_bool, END OF ty_slot. METHODS constructor. METHODS allocate IMPORTING iv_category TYPE ty_category iv_weight_kg TYPE ty_weight iv_height_cm TYPE ty_height RETURNING VALUE(rs_slot) TYPE ty_slot. ENDCLASS. CLASS {{p}}pallet_allocator IMPLEMENTATION. METHOD constructor. ENDMETHOD. METHOD allocate. DATA: lv_cat TYPE ty_category, lv_aisle TYPE c LENGTH 2, lv_zone TYPE c LENGTH 2, lv_rack TYPE i, lv_h TYPE i, lv_ok TYPE c LENGTH 1. CLEAR rs_slot. lv_cat = iv_category. TRANSLATE lv_cat TO UPPER CASE. CONDENSE lv_cat NO-GAPS. lv_ok = 'X'. IF lv_cat = 'F'. lv_aisle = 'A1'. lv_zone = 'FZ'. ELSEIF lv_cat = 'C'. lv_aisle = 'B2'. lv_zone = 'CZ'. ELSEIF lv_cat = 'D'. lv_aisle = 'D4'. lv_zone = 'DZ'. ELSE. lv_ok = ' '. ENDIF. IF iv_weight_kg < 20. lv_ok = ' '. ENDIF. IF iv_weight_kg > 800. lv_ok = ' '. ENDIF. IF iv_height_cm < 40. lv_ok = ' '. ENDIF. IF lv_ok = 'X'. lv_rack = 1. lv_h = iv_height_cm. WHILE lv_h > 120. lv_rack = lv_rack + 1. lv_h = lv_h - 40. ENDWHILE. IF lv_rack > 4. lv_ok = ' '. ENDIF. ENDIF. IF lv_ok = 'X'. rs_slot-aisle = lv_aisle. rs_slot-rack = lv_rack. rs_slot-temp_zone = lv_zone. rs_slot-is_valid = abap_true. ELSE. CLEAR rs_slot. rs_slot-is_valid = abap_false. ENDIF. ENDMETHOD. ENDCLASS.