Está en la página 1de 3

*&---------------------------------------------------------------------*

*& Include ZFLIGTHS_POO3_CLS1


*&---------------------------------------------------------------------*

"ZRFSFLIGHT
CLASS cls_vuelo DEFINITION.
PUBLIC SECTION.
TYPES: BEGIN OF gty_sflight,
carrid TYPE sflight-carrid, "Compañia aerea
connid TYPE sflight-connid, "Numero de vuelo
fldate TYPE sflight-fldate, "Fecha de vuelo
price TYPE sflight-price, "Precio de vuelo
currency TYPE sflight-currency, "Tipo de moneda
seatsmax TYPE sflight-seatsmax, "Capacidad Maxima clase
econimica
seatsocc TYPE sflight-seatsocc, "Asientos ocupados clase
economica
seatsmax_b TYPE sflight-seatsmax_b, "Capacidad Maxima clase business
seatsocc_b TYPE sflight-seatsocc_b, "Asientos ocupados clase
business
seatsmax_f TYPE sflight-seatsmax_f, "Capacidad Maxima primera clase
seatsocc_f TYPE sflight-seatsocc_f, "Asientos ocupados primera clase
END OF gty_sflight.

TYPES: tty_sflight TYPE STANDARD TABLE OF gty_sflight WITH DEFAULT KEY,


tty_alv TYPE STANDARD TABLE OF zrfsflight WITH DEFAULT KEY.

DATA: lti_sflight TYPE tty_sflight.


*Declaro tipo global los campos para el catalogo y funcion del ALV
TYPE-POOLS: slis.
DATA: g_fieldcat TYPE slis_t_fieldcat_alv ##NEEDED.
*----------------------------------------------------------------------*
* CONSTANTS
*----------------------------------------------------------------------*
CONSTANTS: lcte_60 TYPE i VALUE 60,
"Constantes para el porcentaje 60 y 80
lcte_80 TYPE i VALUE 80.
*----------------------------------------------------------------------*
* VARIABLES
*----------------------------------------------------------------------*
DATA: lv_prom TYPE i,
"Variables para el calculo del promedio
lv_cap TYPE i,
lv_ocup TYPE i.

*----------------------------------------------------------------------*
* WORK AREAS
*----------------------------------------------------------------------*
DATA: lwa_alv TYPE gty_sflight, "Work
area para ir guardando cada dato del tipo de la tabla ty_sflight
lwa_salida TYPE zrfsflight.

METHODS: start_of_selection. "Metodo para aceder a los metodos privados de la


clase

PRIVATE SECTION.
METHODS: getdata RETURNING VALUE(re_ti_vuelo) TYPE tty_sflight, """""""El
parametro re_ti_vuelos
"lo
lleno en el metodo getdato
calcular_ocupacion IMPORTING im_ti_vuelo TYPE tty_sflight """"""""Importo
el parametro im_ti_vuelo y

"retorno el parametro re_ti-ocupa


RETURNING VALUE(re_ti_ocupa) TYPE tty_alv, "en
lti_vuelos con los datos para imprimir el alv

show_alv CHANGING ch_alv TYPE tty_alv. """"""""Envio el


paamewtro changing para imprimir el ALV

ENDCLASS.
CLASS cls_vuelo IMPLEMENTATION.
METHOD start_of_selection.
*METODO PARA BUSCAR DATOS lti_vuelo retorna los datos del parametro re_ti_vuelo.
DATA(lti_vuelo) = getdata( ).
IF lti_vuelo IS INITIAL.
""""""Valido si se consiguen datos
MESSAGE s000(z_semillero) DISPLAY LIKE 'E'.
ELSE.

DATA(lti_vuelos) = calcular_ocupacion( im_ti_vuelo = lti_vuelo ). """""""El


parametro importe es el que voy a recorrer para calcular ocupacion
"lo envio dentro del parametro calcular ocupacion haciendolo = lti_vuelos
"lti_vuelos trae los datos del parametro returning re_ti_ocupa
show_alv( CHANGING ch_alv = lti_vuelos ). """""""" El
metodo show_alv en su parametro CH_ALV recibe
ENDIF. "los
datos de lti_vuelos haciendo el igual en el llamado del metodo

ENDMETHOD.
METHOD getdata.
SELECT carrid connid fldate price currency seatsmax
seatsocc seatsmax_b seatsocc_b seatsmax_f seatsocc_f
FROM sflight
INTO TABLE re_ti_vuelo "LLeno el parametro enviado desde el returnin
de getdato
WHERE carrid EQ p_aerel
AND connid IN s_vuelo
AND fldate IN s_fecha.

ENDMETHOD.
METHOD calcular_ocupacion.
* LOOP AT im_ti_vuelo INTO lwa_alv.
"Extraigo datos de la tabla interna para la tabla de salida del ALV
* MOVE-CORRESPONDING lwa_alv TO lwa_salida.
* lv_cap = lwa_alv-seatsmax + lwa_alv-seatsmax_b + lwa_alv-seatsmax_f.
* lv_ocup = lwa_alv-seatsocc + lwa_alv-seatsocc_b + lwa_alv-seatsocc_f.
*
* IF lv_cap IS NOT INITIAL.
"Verifico que exista valor y calculo el promedio
* lv_prom = ( lv_ocup * 100 ) / lv_cap.
* ENDIF.
* IF lv_prom < lcte_60.
* lwa_salida-ocupa = text-002.
"Ocupación BAJA
* ELSEIF lv_prom >= lcte_60 AND lv_prom < lcte_80.
"Detalle para el porcentaje = 60%
* lwa_salida-ocupa = text-003.
"Ocupación MEDIA
* ELSEIF lv_prom >= lcte_80. "Detalle
para el porcentaje = 80%
* lwa_salida-ocupa = text-004.
* ENDIF.
* APPEND lwa_salida TO re_ti_ocupa.
* CLEAR lwa_salida.
* ENDLOOP.
* FIELD-SYMBOLS:<fs_vuelo> TYPE gty_sflight,
* <fs_vuelos> TYPE tty_alv.
data lti_aux TYPE tty_alv .
lti_aux = im_ti_vuelo .

LOOP AT lti_aux ASSIGNING FIELD-SYMBOL(<fs_vuelos>).


lv_cap = <fs_vuelos>-seatsmax + <fs_vuelos>-seatsmax_b + <fs_vuelos>-
seatsmax_f.
lv_ocup = <fs_vuelos>-seatsocc + <fs_vuelos>-seatsocc_b + <fs_vuelos>-
seatsocc_f..

IF lv_cap IS NOT INITIAL.


lv_prom = ( lv_ocup * 100 ) / lv_cap.
ENDIF.
IF lv_prom < lcte_60.
<fs_vuelos>-ocupa = text-002.
ELSEIF lv_prom >= lcte_60 AND lv_prom < lcte_80.
<fs_vuelos>-ocupa = text-003.
ELSEIF lv_prom >= lcte_80.
<fs_vuelos>-ocupa = text-004.
* re_ti_ocupa = lti_aux .

ENDIF.
APPEND <fs_vuelos> to re_ti_ocupa.
ENDLOOP.

ENDMETHOD.
METHOD show_alv.
"---------------- ALV objetos----------------------------
DATA: lr_content TYPE REF TO cl_salv_form_element,
DATA: lr_content TYPE REF TO cl_salv_form_element,
* gr_table TYPE REF TO cl_salv_table, "Objeto del factory
lr_selections TYPE REF TO cl_salv_selections.

"METODO FACTORY PARA SALV


cl_salv_table=>factory(
IMPORTING
r_salv_table = DATA(gr_table) "manera de declarar el objeto sin
crearlo previamente
CHANGING
t_table = ch_alv ).

lr_selections = gr_table->get_selections( ).
lr_selections->set_selection_mode( if_salv_c_selection_mode=>row_column ).
gr_table->display( ).

ENDMETHOD.
ENDCLASS.

También podría gustarte