97 lines
1.9 KiB
ABAP
97 lines
1.9 KiB
ABAP
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.
|