Projects:Resources And Reservation Management/Technical Documentation
Module Definition
- Name: Resource and Reservation Management
- Java Package: org.openbravo.module.resources
- Description: Adds support for resources and reservations management
- Help: A Resource is a new entity that represents anything that can be reserved, like assets, products or services. This module provides a system to easily register resource's bookings according to reservation calendars with different granularity (hourly, daily, etc.). This reservations can be associated to different documents, like sales orders or contracts.
- Translation Required: Yes
- Module Language: English (USA)
- License: Openbravo Commercial License
- IsCommercial: Yes
- Has reference data: Yes
- Reference Data Description: Adds access to Reservation Calendar and Orders with Reservation Info widgets to the Member Portal User and Admin roles
- URL: http://forge.openbravo.com/projects/obresources
- DB Prefix: OBRE
- Module Dependencies:
- Core 3.0MP23
- Member Portal Roles
- Query/List Widget
Database Code
Tables
OBRE_CALENDAR
- It stores the resource's calendar information
- Associated with the Reservation Calendar window
Column | Datatype | Nullable |
OBRE_CALENDAR_ID | VARCHAR2(32 BYTE) | No |
AD_CLIENT_ID | VARCHAR2(32 BYTE) | No |
AD_ORG_ID | VARCHAR2(32 BYTE) | No |
ISACTIVE | CHAR(1 BYTE) | No |
CREATED | DATE | No |
CREATEDBY | VARCHAR2(32 BYTE) | No |
UPDATED | DATE | No |
UPDATEDBY | VARCHAR2(32 BYTE) | No |
NAME | NVARCHAR2(60 CHAR) | No |
DESCRIPTION | NVARCHAR2(255 CHAR) | Yes |
RESERVATION_UOM | VARCHAR2(60 BYTE) | No |
ISSHOWWEEKEND | CHAR(1 BYTE) | No |
OBRE_CALEN_UNAVAILABILITY
- It stores the calendar's unavailability configuration
- Associated with the Reservation Calendar | Unavailabilities tab
Column | Datatype | Nullable |
OBRE_CALEN_UNAVAILABILITY_ID | VARCHAR2(32 BYTE) | No |
AD_CLIENT_ID | VARCHAR2(32 BYTE) | No |
AD_ORG_ID | VARCHAR2(32 BYTE) | No |
ISACTIVE | CHAR(1 BYTE) | No |
CREATED | DATE | No |
CREATEDBY | VARCHAR2(32 BYTE) | No |
UPDATED | DATE | No |
UPDATEDBY | VARCHAR2(32 BYTE) | No |
OBRE_CALENDAR_ID | VARCHAR2(32 BYTE) | No |
NAME | NVARCHAR2(60 CHAR) | No |
ISMONDAY | CHAR(1 BYTE) | No |
ISTUESDAY | CHAR(1 BYTE) | No |
ISWEDNESDAY | CHAR(1 BYTE) | No |
ISTHURSDAY | CHAR(1 BYTE) | No |
ISFRIDAY | CHAR(1 BYTE) | No |
ISSATURDAY | CHAR(1 BYTE) | No |
ISSUNDAY | CHAR(1 BYTE) | No |
ISALLDAYS | CHAR(1 BYTE) | No |
START_DATE | DATE | Yes |
END_DATE | DATE | Yes |
ISFULLDAY | CHAR(1 BYTE) | No |
START_TIME | DATE | Yes |
END_TIME | DATE | Yes |
OBRE_RESERVATION
- It stores the reservations logged in the system
- It is associated with two tabs:
- Sales Order | Lines | Reservation
- Resource | Reservation log
Column | Datatype | Nullable |
OBRE_RESERVATION_ID | VARCHAR2(32 BYTE) | No |
AD_CLIENT_ID | VARCHAR2(32 BYTE) | No |
AD_ORG_ID | VARCHAR2(32 BYTE) | No |
ISACTIVE | CHAR(1 BYTE) | No |
CREATED | DATE | No |
CREATEDBY | VARCHAR2(32 BYTE) | No |
UPDATED | DATE | No |
UPDATEDBY | VARCHAR2(32 BYTE) | No |
C_PROJECT_ID | VARCHAR2(32 BYTE) | Yes |
OBRE_RESOURCE_ID | VARCHAR2(32 BYTE) | No |
NAME | NVARCHAR2(60 CHAR) | Yes |
DESCRIPTION | NVARCHAR2(255 CHAR) | Yes |
START_TIME | DATE | No |
END_TIME | DATE | Yes |
C_BPARTNER_ID | VARCHAR2(32 BYTE) | No |
AD_USER_ID | VARCHAR2(32 BYTE) | Yes |
C_ORDERLINE_ID | VARCHAR2(32 BYTE) | Yes |
ISALLDAY | CHAR(1 BYTE) | No |
AUXILIARY | VARCHAR2(2000 BYTE) | Yes |
LINKED_TO_RESERVATION | VARCHAR2(32 BYTE) | Yes |
OBRE_RESERVATION_EXTRA_I
- Table where particular 'extras' for a particular reservation are stored
Column | Datatype | Nullable |
OBRE_RESERVATION_EXTRA_I_ID | VARCHAR2(32 BYTE) | No |
AD_CLIENT_ID | VARCHAR2(32 BYTE) | No |
AD_ORG_ID | VARCHAR2(32 BYTE) | No |
ISACTIVE | CHAR(1 BYTE) | No |
CREATED | DATE | No |
CREATEDBY | VARCHAR2(32 BYTE) | No |
UPDATED | DATE | No |
UPDATEDBY | VARCHAR2(32 BYTE) | No |
OBRE_RESERVATION_ID | VARCHAR2(32 BYTE) | No |
OBRE_RES_EXTRA_ID | VARCHAR2(32 BYTE) | No |
OBRE_RESERVATION_TEMPLATE
- Stores Freemaker email templates configurable per organization to be sent when saving/updating/cancelling a reservation
- Associated with the Reservation Email Template
Column | Datatype | Nullable |
OBRE_RESERVATION_TEMPLATE_ID | VARCHAR2(32 BYTE) | No |
AD_CLIENT_ID | VARCHAR2(32 BYTE) | No |
AD_ORG_ID | VARCHAR2(32 BYTE) | No |
ISACTIVE | CHAR(1 BYTE) | No |
CREATED | DATE | No |
CREATEDBY | VARCHAR2(32 BYTE) | No |
UPDATED | DATE | No |
UPDATEDBY | VARCHAR2(32 BYTE) | No |
TEMPLATE | NVARCHAR2(2000 CHAR) | No |
OBRE_RES_EXTRA
- Represents 'extras' that can be added while doing a reservation
- Associated with the Reservation Extra window
Column | Datatype | Nullable |
OBRE_RES_EXTRA_ID | VARCHAR2(32 BYTE) | No |
AD_CLIENT_ID | VARCHAR2(32 BYTE) | No |
AD_ORG_ID | VARCHAR2(32 BYTE) | No |
ISACTIVE | CHAR(1 BYTE) | No |
CREATED | DATE | No |
CREATEDBY | VARCHAR2(32 BYTE) | No |
UPDATED | DATE | No |
UPDATEDBY | VARCHAR2(32 BYTE) | No |
NAME | NVARCHAR2(60 CHAR) | No |
M_PRODUCT_ID | VARCHAR2(32 BYTE) | No |
CHARGE_TYPE | VARCHAR2(60 BYTE) | No |
QUANTITY | NUMBER | No |
OBRE_RES_EXTRA_GROUP
- Represents 'extra' groups that can be set in a Resource. The 'extras' inside a group will be available while doing a reservation
- Associated with the Reservation Extra Group window
Column | Datatype | Nullable |
OBRE_RES_EXTRA_GROUP_ID | VARCHAR2(32 BYTE) | No |
AD_CLIENT_ID | VARCHAR2(32 BYTE) | No |
AD_ORG_ID | VARCHAR2(32 BYTE) | No |
ISACTIVE | CHAR(1 BYTE) | No |
CREATED | DATE | No |
CREATEDBY | VARCHAR2(32 BYTE) | No |
UPDATED | DATE | No |
UPDATEDBY | VARCHAR2(32 BYTE) | No |
NAME | NVARCHAR2(60 CHAR) | No |
OBRE_RES_EXTRAGROUP_LINK
- Table to match reservation group with the reservation 'extras' that belongs to it
- Associated with the Reservation Extra Group window
Column | Datatype | Nullable |
OBRE_RES_EXTRAGROUP_LINK_ID | VARCHAR2(32 BYTE) | No |
AD_CLIENT_ID | VARCHAR2(32 BYTE) | No |
AD_ORG_ID | VARCHAR2(32 BYTE) | No |
ISACTIVE | CHAR(1 BYTE) | No |
CREATED | DATE | No |
CREATEDBY | VARCHAR2(32 BYTE) | No |
UPDATED | DATE | No |
UPDATEDBY | VARCHAR2(32 BYTE) | No |
OBRE_RES_EXTRA_GROUP_ID | VARCHAR2(32 BYTE) | No |
OBRE_RES_EXTRA_ID | VARCHAR2(32 BYTE) | No |
SEQNO | NUMBER(10,0) | No |
OBRE_RESOURCE
- Table to store resource, which represents anything that can be reserved, like assets, products or services
- Associated with the Resource window
Column | Datatype | Nullable |
OBRE_RESOURCE_ID | VARCHAR2(32 BYTE) | No |
AD_CLIENT_ID | VARCHAR2(32 BYTE) | No |
AD_ORG_ID | VARCHAR2(32 BYTE) | No |
ISACTIVE | CHAR(1 BYTE) | No |
CREATED | DATE | No |
CREATEDBY | VARCHAR2(32 BYTE) | No |
UPDATED | DATE | No |
UPDATEDBY | VARCHAR2(32 BYTE) | No |
VALUE | NVARCHAR2(40 CHAR) | No |
NAME | NVARCHAR2(60 CHAR) | No |
DESCRIPTION | NVARCHAR2(255 CHAR) | Yes |
RESOURCE_TYPE | VARCHAR2(60 BYTE) | No |
OBRE_RESOURCE_CATEGORY_ID | VARCHAR2(32 BYTE) | No |
C_LOCATION_ID | VARCHAR2(32 BYTE) | Yes |
C_BPARTNER_ID | VARCHAR2(32 BYTE) | Yes |
M_PRODUCT_CATEGORY_ID | VARCHAR2(32 BYTE) | No |
HASCAPACITY | CHAR(1 BYTE) | No |
C_UOM_ID | VARCHAR2(32 BYTE) | Yes |
CAPACITY_DEFAULT | NUMBER(10,0) | Yes |
CAPACITY_MAX | NUMBER(10,0) | Yes |
ISOVERLAPALLOWED | CHAR(1 BYTE) | No |
IMAGE | VARCHAR2(32 BYTE) | Yes |
A_ASSET_ID | VARCHAR2(32 BYTE) | Yes |
OBRE_CALENDAR_ID | VARCHAR2(32 BYTE) | No |
RESERVATIONCONTROLLER | VARCHAR2(60 BYTE) | Yes |
M_PRODUCT_ID | VARCHAR2(32 BYTE) | Yes |
ISBOOKABLEONLINE | CHAR(1 BYTE) | No |
ISBOOKABLEBYALLUSERS | CHAR(1 BYTE) | No |
ISBACKDATEDRESERVATIONS | CHAR(1 BYTE) | No |
ISRESERVATIONCHANGES | CHAR(1 BYTE) | No |
TIME_AHEAD_BEFORE_CHANGES | NUMBER | No |
OBRE_RESOURCE_GROUP_ID | VARCHAR2(32 BYTE) | Yes |
MIN_RESERVATION_DURATION | NUMBER | Yes |
MAX_RESERVATION_DURATION | NUMBER | Yes |
MULTIPLE_RESERVATION_DURATION | NUMBER | Yes |
OBRE_RES_EXTRA_GROUP_ID | VARCHAR2(32 BYTE) | Yes |
ISRESOURCEPACK | CHAR(1 BYTE) | No |
ISMUTUALLYEXCLUDEDPACKMEMBERS | CHAR(1 BYTE) | No |
OBRE_RES_DISCOUNT_ID | VARCHAR2(32 BYTE) | Yes |
OBRE_RESOURCE_AUTHUSERS
- Table to store the users that can make reservations to a resource. Only used when the resource is not "bookable by all users"
- Associated with the Resource window
Column | Datatype | Nullable |
OBRE_RESOURCE_AUTHUSERS_ID | VARCHAR2(32 BYTE) | No |
AD_CLIENT_ID | VARCHAR2(32 BYTE) | No |
AD_ORG_ID | VARCHAR2(32 BYTE) | No |
ISACTIVE | CHAR(1 BYTE) | No |
CREATED | DATE | No |
CREATEDBY | VARCHAR2(32 BYTE) | No |
UPDATED | DATE | No |
UPDATEDBY | VARCHAR2(32 BYTE) | No |
OBRE_RESOURCE_ID | VARCHAR2(32 BYTE) | No |
AD_USER_ID | VARCHAR2(32 BYTE) | No |
OBRE_RESOURCE_CATEGORY
- Table to store categories for resources
- Associated with the Resource Category window
Column | Datatype | Nullable |
OBRE_RESOURCE_CATEGORY_ID | VARCHAR2(32 BYTE) | No |
AD_CLIENT_ID | VARCHAR2(32 BYTE) | No |
AD_ORG_ID | VARCHAR2(32 BYTE) | No |
ISACTIVE | CHAR(1 BYTE) | No |
CREATED | DATE | No |
CREATEDBY | VARCHAR2(32 BYTE) | No |
UPDATED | DATE | No |
UPDATEDBY | VARCHAR2(32 BYTE) | No |
NAME | NVARCHAR2(60 CHAR) | No |
DESCRIPTION | NVARCHAR2(255 CHAR) | Yes |
ISSUMMARY | CHAR(1 BYTE) | No |
OBRE_RESOURCE_GROUP
- Table to store groups for online reservations
- Associated with the Resource Group window
Column | Datatype | Nullable |
OBRE_RESOURCE_GROUP_ID | VARCHAR2(32 BYTE) | No |
AD_CLIENT_ID | VARCHAR2(32 BYTE) | No |
AD_ORG_ID | VARCHAR2(32 BYTE) | No |
ISACTIVE | CHAR(1 BYTE) | No |
CREATED | DATE | No |
CREATEDBY | VARCHAR2(32 BYTE) | No |
UPDATED | DATE | No |
UPDATEDBY | VARCHAR2(32 BYTE) | No |
SEQNO | NUMBER(10,0) | No |
NAME | NVARCHAR2(60 CHAR) | No |
DESCRIPTION | NVARCHAR2(255 CHAR) | Yes |
OBRE_RESOURCE_PACKMEMBERS
- Stores the resources that are members of the parent resource pack
- Associated with the Resource window
Column | Datatype | Nullable |
OBRE_RESOURCE_PACKMEMBERS_ID | VARCHAR2(32 BYTE) | No |
AD_CLIENT_ID | VARCHAR2(32 BYTE) | No |
AD_ORG_ID | VARCHAR2(32 BYTE) | No |
ISACTIVE | CHAR(1 BYTE) | No |
CREATED | DATE | No |
CREATEDBY | VARCHAR2(32 BYTE) | No |
UPDATED | DATE | No |
UPDATEDBY | VARCHAR2(32 BYTE) | No |
OBRE_RESOURCE_ID | VARCHAR2(32 BYTE) | No |
PACKMEMBER_ID | VARCHAR2(32 BYTE) | No |
OBRE_RES_DISCOUNT
- Stores the Reservation Discount
- Associated with the Reservation Discount window
Column | Datatype | Nullable |
OBRE_RES_DISCOUNT_ID | VARCHAR2(32 BYTE) | No |
AD_CLIENT_ID | VARCHAR2(32 BYTE) | No |
AD_ORG_ID | VARCHAR2(32 BYTE) | No |
ISACTIVE | CHAR(1 BYTE) | No |
CREATED | DATE | No |
CREATEDBY | VARCHAR2(32 BYTE) | No |
UPDATED | DATE | No |
UPDATEDBY | VARCHAR2(32 BYTE) | No |
NAME | NVARCHAR2(60 CHAR) | No |
OBRE_RES_DISCOUNT_RULES
- Stores the rules to apply discount
- Associated with the Reservation Discount window
Column | Datatype | Nullable |
OBRE_RES_DISCOUNT_RULES_ID | VARCHAR2(32 BYTE) | No |
AD_CLIENT_ID | VARCHAR2(32 BYTE) | No |
AD_ORG_ID | VARCHAR2(32 BYTE) | No |
ISACTIVE | CHAR(1 BYTE) | No |
CREATED | DATE | No |
CREATEDBY | VARCHAR2(32 BYTE) | No |
UPDATED | DATE | No |
UPDATEDBY | VARCHAR2(32 BYTE) | No |
OBRE_RES_DISCOUNT_ID | VARCHAR2(32 BYTE) | No |
NAME | NVARCHAR2(60 CHAR) | No |
DISCOUNT | NUMBER | Yes |
PRIORITY | NUMBER(10,0) | No |
ISMONDAY | CHAR(1 BYTE) | No |
ISTUESDAY | CHAR(1 BYTE) | No |
ISWEDNESDAY | CHAR(1 BYTE) | No |
ISTHURSDAY | CHAR(1 BYTE) | No |
ISFRIDAY | CHAR(1 BYTE) | No |
ISSATURDAY | CHAR(1 BYTE) | No |
ISSUNDAY | CHAR(1 BYTE) | No |
ISALLDAYS | CHAR(1 BYTE) | No |
START_DATE | DATE | Yes |
END_DATE | DATE | Yes |
ISFULLDAY | CHAR(1 BYTE) | No |
START_TIME | DATE | Yes |
END_TIME | DATE | Yes |
Functions
OBRE_GETRESERVATIONDURATION
- Receives a reservation ID and returns its duration
OBRE_GETRESERVATIONS
- Receives a sales order ID (c_order_id) and returns a text that concatenates the resource that has been reserved with the starting and ending time
Triggers
OBRE_RESOURCE_CATEGORY_TRG
- This trigger is used for managing the resource category trees
Java Code
The module's java code is divided into the following packages and classes:
org.openbravo.module.resources.calendar
org.openbravo.module.resources.calendar.ReservationController
Abstract class that must be implemented by the ReservationControllers. ReservationControllers are invoked when a resource is created/updated, they are in charge of doing additional stuff needed for the resource, such as creating Order for it. Different resources can have different controllers, matching between controllers and resources is done based on the Qualifier the ReservationController has. In case no ReservationController is found, the BasicReservationController is used.
It defines the following abstract methods: abstract public void doPreInsert(Map<String, String> parameters, JSONObject toInsert);
abstract public void doPreUpdate(Map<String, String> parameters, JSONObject toUpdate); abstract public void doPreRemove(Map<String, String> parameters, JSONObject toRemove); abstract public void doPostFetch(Map<String, String> parameters, JSONObject fetched); abstract public void doPostInsert(Map<String, String> parameters, JSONObject inserted, String originalToInsert); abstract public void doPostUpdate(Map<String, String> parameters, JSONObject updated, String originalToUpdate); abstract public void doPostRemove(Map<String, String> parameters, JSONObject removed);
org.openbravo.module.resources.calendar.BasicReservationController
BasicReservationController is the Default ReservationController which is used in case there is no controller for the given resource. It creates a sales order for the reservation
org.openbravo.module.resources.calendar.ReservationAvailabilityUtilities
Java implementation of the Javascript code in /web/org.openbravo.modules.resources/js/calendar/ob-datetimeavailability-functions.js
Contains a list of utilities methods used for working with the Calendar widget.
org.openbravo.module.resources.calendar.ReservationUtilities
List of utilities methods used mainly by the BasicReservationController to create the Sales Order associated to the reservation
org.openbravo.module.resources.calendar.ResourcesCalendarActionHandler
ActionHandler associated to the Calendar widget that manages the reservations
org.openbravo.module.resources.calendar.ResourcesCalendarDataSource
DataSource associated with the OBRE_Reservation class (that represents the reservations).
org.openbravo.module.resources.calendar.email
org.openbravo.module.resources.calendar.email.ReservationEmailBody
Class that extends PortalEmailBody, which is in charge of providing the necessary data to fill the email Freemaker template sent when creating/updating/cancelling a reservation.
The email template can be either defined by organization (stored in the OBRE_Reservation_Template table). In case no template is defined for the organization, the default reservation-body.ftl is used instead.
The class contains methods for getting: the Sales Order object, the user that created the reservation, the starting or ending time for the reservation, etc.
When customizing the template, the available non-static texts (i.e., the text that dynamically changes in the template, like the order no., reservation's starting date, etc.) are associated with those methods. For example, the ${data.orderDocNo} variable in the template is associated with the getOrderDocNo() method.
This basically means that the dynamic text is restricted, and you can only include into the template the info provided by them (which are usually enough for the reservation email purpose).
org.openbravo.module.resources.calendar.email.ReservationEmailGenerator
Class implementing the EmailEventContentGenerator interface. It is in charge of generating the reservation email. The getAttachments() method generates an iCalendar file with the reservation info that is attached to the email.
org.openbravo.module.resources.callout
Contains module's callouts
org.openbravo.module.resources.callout.UpdateAllDay
Callout that sets the Is All Day field (Reservation info) to Yes in case the associated reservation calendar is set to Daily
org.openbravo.module.resources.constants
Define constants
org.openbravo.module.resources.constants.OBRE_Constant
Defines a few public static constants referenced by other classes in the module
org.openbravo.module.resources.event
Contain classes that extend from EntityPersistenceEventObserver
org.openbravo.module.resources.event.ReservationEventObserver
Class that extends EntityPersistenceEventObserver and it's in charge of the backend validations before saving/updating/deleting a reservation. For example, it checks there is no reservation overlap for the same resource, that the reservation respects the resource's minimum and maximum duration, etc. It's also a way to ensure no hacks are done by the user in the frontend.
org.openbravo.module.resources.event.ResourceEventObserver
Class that extends EntityPersistenceEventObserver and it's in charge of the backend validations before saving/updating/deleting a resource.
org.openbravo.module.resources.initializer
Implementations of ApplicationInitializer
org.openbravo.module.resources.initializer.ResourcesInitializer
Class that implements the ApplicationInitializer interface. It registers the following SQL functions in order to be used by DAL:
- obre_getreservations
- obre_getreservationduration
org.openbravo.module.resources.util
Contains Utility classes
org.openbravo.module.resources.util.CloneRecordActionHandler
Class that extends the BaseActionHandler, which manages the process of cloning a resource available as an icon at the Resource window toolbar
org.openbravo.module.resources.util.GenericDateUtils
Contains utility methods for working with dates, like getYear(), getMinute(), getMinDate, getLastDateOfMonth(), etc.
org.openbravo.module.resources.util.Utility
Contains general utility methods for the module
org.openbravo.module.resources.widget
org.openbravo.module.resources.widget.OBREWidgetComponentProvider
Class that extends BaseComponentProvider which defines the JS scripts implemented by the module
Javascript Code
web/org.openbravo.module.resources/js/calendar
ob-datetimeavailability-functions.js
Contains a list of functions used for handling time availabilities
ob-myorderswithreservationinfo-widget.js
OBGridLink extension to provide a link to direct reservation edition
ob-resourcescalendar-widget.js
It contains the custom code in charge of build the reservation multicalendar. It has two parts:
- OBRE_ResourcesCalendarEventEditor:
- It extends OBPopup widget
- Is in charge of provide an interface to allow the user add/edit/delete events
- OB.OBRE.ResourcesCalendar:
- It contains all the attributes that will be added to the OBCalendar widget
- Since OBCalendar extends isc.Calendar, the attributes could be anything inside this API
ob-toolbar-customizations.js
It registers the clone button for the needed windows. Related to org.openbravo.module.resources.util.CloneRecordActionHandler