Reporte de Promociones con Revenue en Opera PMS

Este reporte nos permitirá listar las reservas realizadas asociadas a una promoción y el revenue que nos deja por promoción.

El query en Oracle que recupera los datos de la base de datos es:

 
SELECT
rn.confirmation_no,
rn.GUEST_LAST_NAME||','||rn.GUEST_FIRST_NAME guest_name,
rn.begin_date arrival,
rn.end_date departure,--a
reservation_ref.get_room_category_label(e.room_category,e.resort) room_category_label,
e.room,
dn.rate_code,
reservation_ref.get_promotions(rn.resort,rn.resv_name_id) promotions,
reservation_ref.get_promotions(rn.resort,rn.resv_name_id) promotions_group,
reservation_ref.get_market_desc (e.market_code, e.resort) market_desc, --scr 95205
dn.share_amount revenue,
(TRUNC(rn.end_date,'DD')-TRUNC(rn.begin_date,'DD'))*dn.share_amount total_revenue,
reservation_ref.get_name(dn.company_id) company_name
 FROM reservation_name rn,
    name n,
    reservation_daily_elements e,
    reservation_daily_element_name dn
 WHERE rn.resort = 'MI_PROPIEDAD'
   AND (n.name_id = rn.name_id)
   AND (dn.resort = rn.resort
   AND dn.resv_name_id = rn.resv_name_id
   AND dn.reservation_date = DECODE(SIGN(rn.trunc_end_date -COALESCE(TO_DATE(SYS_CONTEXT('CLIENTCONTEXT','BUSINESS_DATE'),'RRRRMMDD'),TRUNC(SYSTIMESTAMP AT TIME ZONE COALESCE(SYS_CONTEXT('CLIENTCONTEXT','RESORT_TIME_ZONE'),DBTIMEZONE)))),
                                 1,greatest(COALESCE(TO_DATE(SYS_CONTEXT('CLIENTCONTEXT','BUSINESS_DATE'),'RRRRMMDD'),TRUNC(SYSTIMESTAMP AT TIME ZONE COALESCE(SYS_CONTEXT('CLIENTCONTEXT','RESORT_TIME_ZONE'),DBTIMEZONE))), rn.trunc_begin_date ),
                                 rn.trunc_end_date))
   AND (e.resort = dn.resort AND
     e.reservation_date = dn.reservation_date AND
     e.resv_daily_el_seq = dn.resv_daily_el_seq )
   AND (rn.event_id IS NULL OR (rn.event_id IS NOT NULL AND e.room_category NOT LIKE '-%') OR
    (rn.event_id IS NOT NULL AND e.room_category LIKE '-%' AND SYS_CONTEXT('CLIENTCONTEXT','SHOW_EVENT_PM_RESV') = 'Y'))
   AND rn.begin_date>=:FECINI
   and rn.begin_date<=:FECFIN
   and reservation_ref.get_promotions(rn.resort,rn.resv_name_id) is not null
   and e.room is not null
ORDER BY reservation_ref.get_promotions(rn.resort,rn.resv_name_id) ASC, rn.begin_date ASC,rn.confirmation_no ASC

El resultado del reporte que se debe obtener es el siguiente:

Para crear este reporte en el Diseñador “Oracle Reports Builder” es importante considerar los siguientes:

  • Seleccionar el estilo “Group Above”.
  • Seleccionar el campo “PROMOTIONS” como campo de agrupación.
  • Seleccionar el campo “CONFIRMATION_NO” con la fórmula Count() y campo TOTAL_REVENUE con la fórmula Sum()

El resultado del diseño del reporte debe quedar de la siguiente manera:

Genere el archivo .rep y registre la referencia desde Opera como lo vimos en blogs anteriores.