Commit 7d4faae0 by Tuukka Kivilahti

event date stuff and eventCalendar

1 parent 65fee7e9
......@@ -207,7 +207,11 @@ public class BootstrapBean implements BootstrapBeanLocal {
"ALTER TABLE group_memberships ADD COLUMN place_product INTEGER",
"ALTER TABLE group_memberships ADD CONSTRAINT FK_group_memberships_place_product FOREIGN KEY (place_product) REFERENCES products (id)"
});
}
dbUpdates.add(new String[] {
"ALTER TABLE events ADD COLUMN ticket_sales_begin timestamp without time zone DEFAULT null;",
});
} // start_time timestamp without time zone,
@EJB
private DBModelFacade dbModelFacade;
......
......@@ -292,4 +292,28 @@ public class EventBean implements EventBeanLocal {
return event;
}
@Override
@RolesAllowed(EventPermission.S_MANAGE_EVENT)
public List<LanEvent> findAllEvents() {
return eventFacade.findAll();
}
}
package fi.codecrew.moya.facade;
import java.util.List;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.codecrew.moya.model.LanEvent_;
import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.LanEvent_;
@Stateless
@LocalBean
......@@ -46,4 +49,14 @@ public class EventFacade extends IntegerPkGenericFacade<LanEvent> {
}
public List<LanEvent> findAll() {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<LanEvent> cq = cb.createQuery(getEntityClass());
cq.select(cq.from(getEntityClass()));
TypedQuery<LanEvent> q = getEm().createQuery(cq);
return q.getResultList();
}
}
......@@ -43,5 +43,7 @@ public interface EventBeanLocal {
LanEvent deleteProperty(LanEventProperty property);
LanEvent deletePrivateProperty(LanEventPrivateProperty property);
List<LanEvent> findAllEvents();
}
package fi.codecrew.moya.model;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
......@@ -33,12 +33,16 @@ public class LanEvent extends GenericEntity {
@Column(name = "start_time")
@Temporal(TemporalType.TIMESTAMP)
private Calendar startTime;
private Date startTime;
@Column(name = "end_time")
@Temporal(TemporalType.TIMESTAMP)
private Calendar endTime;
private Date endTime;
@Column(name = "ticket_sales_begin")
@Temporal(TemporalType.TIMESTAMP)
private Date ticketSalesBegin;
@Column(name = "name", nullable = false, unique = true)
private String name;
......@@ -107,19 +111,19 @@ public class LanEvent extends GenericEntity {
}
public Calendar getStartTime() {
public Date getStartTime() {
return startTime;
}
public void setStartTime(Calendar startTime) {
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Calendar getEndTime() {
public Date getEndTime() {
return endTime;
}
public void setEndTime(Calendar endTime) {
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
......@@ -291,4 +295,12 @@ public class LanEvent extends GenericEntity {
this.games = games;
}
public Date getTicketSalesBegin() {
return ticketSalesBegin;
}
public void setTicketSalesBegin(Date ticketSalesBegin) {
this.ticketSalesBegin = ticketSalesBegin;
}
}
......@@ -9,11 +9,24 @@
<f:viewParam name="eventid" value="#{eventorgView.eventid}" />
<f:event type="preRenderView" listener="#{eventorgView.initEditEvent}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['lecturegroup.list.title']}</h1>
</ui:define>
<ui:define name="content">
<h:form id="notifyForm">
<p:outputPanel rendered="#{eventorgView.showDatesError}">
<p class="error"><b>#{i18n['event.nodates.title']}</b></p>
<p class="error">#{i18n['event.nodates.message']}</p>
</p:outputPanel>
</h:form>
<h:form id="orgform">
<h:panelGrid columns="3">
<h:outputLabel for="id" value="#{i18n['event.id']}:" />
<h:inputText id="id" value="#{eventorgView.event.name}" />
<h:outputLabel id="id" value="#{eventorgView.event.id}" />
<h:message for="id" />
<h:outputLabel for="name" value="#{i18n['event.name']}:" />
......@@ -28,17 +41,19 @@
<h:inputText id="nextbillnr" value="#{eventorgView.event.nextBillNumber}" />
<h:message for="nextbillnr" />
<h:outputLabel for="salesBegin" value="#{i18n['event.ticketSalesBegin']}:" />
<p:calendar id="salesBegin" value="#{eventorgView.event.ticketSalesBegin}" pattern="#{sessionHandler.dateFormat}" timeZone="#{sessionHandler.timezone}" showOn="button" />
<h:message for="salesBegin" />
<h:outputLabel for="starttime" value="#{i18n['event.startTime']}:" />
<h:inputText id="starttime" value="#{eventorgView.event.startTime}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:inputText>
<p:calendar id="starttime" value="#{eventorgView.event.startTime}" pattern="#{sessionHandler.dateFormat}" timeZone="#{sessionHandler.timezone}" showOn="button" />
<h:message for="starttime" />
<h:outputLabel for="endTime" value="#{i18n['event.endTime']}:" />
<h:inputText id="endTime" value="#{eventorgView.event.endTime}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:inputText>
<p:calendar id="endTime" value="#{eventorgView.event.endTime}" pattern="#{sessionHandler.dateFormat}" timeZone="#{sessionHandler.timezone}" showOn="button" />
<h:message for="endTime" />
<h:outputLabel for="defaultrole" value="#{i18n['event.defaultRole']}:" />
<h:selectOneMenu id="defaultrole" converter="#{roleConverter}" value="#{eventorgView.event.defaultRole}">
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
<h:body>
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
<f:event type="preRenderView" listener="#{eventorgView.initEditEvent}" />
</f:metadata>
<ui:define name="content">
<h:form>
<p:fieldset legend="#{i18n['event.calendar.title']}">
<p:schedule id="schedule" value="#{eventorgView.eventsCalendar}" rightHeaderTemplate="month" axisFormat="H:mm" timeFormat="H:mm" timeZone="#{sessionHandler.timezone}" locale="#{sessionHandler.locale}" tooltip="true" draggable="false" resizable="false" view="month" allDaySlot="true" />
</p:fieldset>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -106,51 +106,6 @@
</p:tabView>
</h:form>
<script type="text/javascript">
PrimeFaces.locales['fi'] = {
closeText : 'Sulje',
prevText : 'Edellinen',
nextText : 'Seuraava',
currentText : 'Tänään',
monthNames : [ 'Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu','Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu', 'Joulukuu' ],
monthNamesShort : [ 'Tammikuu', 'Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu','Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'],
dayNames : [ 'Sunnuntai','Maanantai','Tiistain','Keskiviikko','Torstai','Perjantai','Lauantai' ],
dayNamesShort : [ 'Su','Ma','Ti','Ke','To','Pe','La' ],
dayNamesMin : [ 'Su','Ma','Ti','Ke','To','Pe','La' ],
weekHeader : 'vk',
firstDay : 1,
isRTL : false,
showMonthAfterYear : false,
yearSuffix : '',
month : 'Kuukausi',
week : 'Viikko',
day : 'Päivä',
allDayText : 'Koko päivä'
};
PrimeFaces.locales['und'] = {
closeText : 'Sulje',
prevText : 'Edellinen',
nextText : 'Seuraava',
currentText : 'Tänään',
monthNames : [ 'Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu','Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu', 'Joulukuu' ],
monthNamesShort : [ 'Tammikuu', 'Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu','Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'],
dayNames : [ 'Sunnuntai','Maanantai','Tiistain','Keskiviikko','Torstai','Perjantai','Lauantai' ],
dayNamesShort : [ 'Su','Ma','Ti','Ke','To','Pe','La' ],
dayNamesMin : [ 'Su','Ma','Ti','Ke','To','Pe','La' ],
weekHeader : 'vk',
firstDay : 1,
isRTL : false,
showMonthAfterYear : false,
yearSuffix : '',
month : 'Kuukausi',
week : 'Viikko',
day : 'Päivä',
allDayText : 'Koko päivä'
};
</script>
</ui:define>
......
......@@ -113,18 +113,28 @@
color: #006600;
}
.error {
color: red;
}
.success {
color: #006600;
}
.lectureCalendar,
.lectureCalendarParticipating,
.lectureCalendarDisabled {
.lectureCalendarDisabled,
.eventRunningCalendar,
.calendarEventStyle {
border: 1px solid black;
padding: 3px;
font-size: 11px;
}
.eventRunningCalendar {
background-color: #CC0000;
}
.lectureCalendarParticipating {
background-color: green;
}
......@@ -143,3 +153,8 @@
margin: 0;
padding-left: 40px !important;
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<html class="no-js" xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:tools="http://java.sun.com/jsf/composite/cditools"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
<html class="no-js" xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:tools="http://java.sun.com/jsf/composite/cditools" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
<f:view contentType="text/html" locale="#{sessionHandler.locale}">
......@@ -14,13 +13,14 @@
<meta name="author" content="CodeCrew ry" />
<meta name="viewport" content="width=device-width" />
<meta http-equiv="Content-Language" content="#{sessionHandler.locale}" />
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/templates/custom_components.css" />
<link rel="icon" href="#{request.contextPath}/favicon.ico" type="image/x-icon" />
<link rel="stylesheet" href="#{request.contextPath}/resources/templates/template1/css/normalize.min.css" />
<link rel="stylesheet" href="#{request.contextPath}/resources/templates/template1/css//main.css" />
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/templates/template1/css/style.css" />
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/templates/template1/css/general.css" />
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/templates/template1/css/print.css" />
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/templates/custom_components.css" />
<script src="#{request.contextPath}/resources/templates/template1/js/modernizr-2.6.2.min.js"></script>
......@@ -192,6 +192,61 @@
<footer class="bgColor1"> </footer>
<script type="text/javascript">
PrimeFaces.locales['fi'] = {
closeText : 'Sulje',
prevText : 'Edellinen',
nextText : 'Seuraava',
currentText : 'Tänään',
monthNames : [ 'Tammikuu', 'Helmikuu', 'Maaliskuu', 'Huhtikuu',
'Toukokuu', 'Kesäkuu', 'Heinäkuu', 'Elokuu', 'Syyskuu',
'Lokakuu', 'Marraskuu', 'Joulukuu' ],
monthNamesShort : [ 'Tammikuu', 'Helmikuu', 'Maaliskuu',
'Huhtikuu', 'Toukokuu', 'Kesäkuu', 'Heinäkuu',
'Elokuu', 'Syyskuu', 'Lokakuu', 'Marraskuu', 'Joulukuu' ],
dayNames : [ 'Sunnuntai', 'Maanantai', 'Tiistain',
'Keskiviikko', 'Torstai', 'Perjantai', 'Lauantai' ],
dayNamesShort : [ 'Su', 'Ma', 'Ti', 'Ke', 'To', 'Pe', 'La' ],
dayNamesMin : [ 'Su', 'Ma', 'Ti', 'Ke', 'To', 'Pe', 'La' ],
weekHeader : 'vk',
firstDay : 1,
isRTL : false,
showMonthAfterYear : false,
yearSuffix : '',
month : 'Kuukausi',
week : 'Viikko',
day : 'Päivä',
allDayText : 'Koko päivä'
};
PrimeFaces.locales['und'] = {
closeText : 'Sulje',
prevText : 'Edellinen',
nextText : 'Seuraava',
currentText : 'Tänään',
monthNames : [ 'Tammikuu', 'Helmikuu', 'Maaliskuu', 'Huhtikuu',
'Toukokuu', 'Kesäkuu', 'Heinäkuu', 'Elokuu', 'Syyskuu',
'Lokakuu', 'Marraskuu', 'Joulukuu' ],
monthNamesShort : [ 'Tammikuu', 'Helmikuu', 'Maaliskuu',
'Huhtikuu', 'Toukokuu', 'Kesäkuu', 'Heinäkuu',
'Elokuu', 'Syyskuu', 'Lokakuu', 'Marraskuu', 'Joulukuu' ],
dayNames : [ 'Sunnuntai', 'Maanantai', 'Tiistain',
'Keskiviikko', 'Torstai', 'Perjantai', 'Lauantai' ],
dayNamesShort : [ 'Su', 'Ma', 'Ti', 'Ke', 'To', 'Pe', 'La' ],
dayNamesMin : [ 'Su', 'Ma', 'Ti', 'Ke', 'To', 'Pe', 'La' ],
weekHeader : 'vk',
firstDay : 1,
isRTL : false,
showMonthAfterYear : false,
yearSuffix : '',
month : 'Kuukausi',
week : 'Viikko',
day : 'Päivä',
allDayText : 'Koko päivä'
};
</script>
</h:body>
</f:view>
......
......@@ -127,17 +127,23 @@ error = Virhe
error.contact = If this happens again, contact Info with the following code:
error.error = You have encountered an error.
event.domains.title = Domain
event.edit = Edit
event.endTime = End time
event.id = Event ID
event.name = Event name
event.calendar.title = Tapahtumakalenteri
event.domains.title = Domain
event.edit = Edit
event.endTime = End time
event.id = Event ID
event.name = Event name
event.nextBillNumber = Initial bill number
event.nodates.message = Lis\u00E4\u00E4 tapahtumaan v\u00E4hint\u00E4\u00E4n aloitusp\u00E4iv\u00E4, lopetusp\u00E4iv\u00E4 sek\u00E4 lipunmyynnin aloitusp\u00E4iv\u00E4.
event.nodates.title = P\u00E4iv\u00E4m\u00E4\u00E4ri\u00E4 puuttuu!
event.privateProperties.title = Private Properties
event.properties.title = Properties
event.referenceNumberBase = Reference number base
event.save = Save
event.startTime = Start time
event.running = K\u00E4ynniss\u00E4
event.save = Save
event.startTime = Start time
event.ticketSale = Lipunmyynti
event.ticketSalesBegin = Lipunmyynti alkaa
eventdomain.add = Add event domain
eventdomain.domainname = Domain
......
......@@ -341,18 +341,24 @@ error = Error
error.contact = If this happens again, contact Info with the following code:
error.error = You have encountered an error.
event.defaultRole = Default user role
event.domains.title = Domain
event.edit = Edit
event.endTime = End time
event.id = Event ID
event.name = Event name
event.calendar.title = Event calendar
event.defaultRole = Default user role
event.domains.title = Domain
event.edit = Edit
event.endTime = End time
event.id = Event ID
event.name = Event name
event.nextBillNumber = Initial bill number
event.nodates.message = Remember to add event start-date, end-date and ticket's sales start-date.
event.nodates.title = Dates missing!
event.privateProperties.title = Private Properties
event.properties.title = Properties
event.referenceNumberBase = Reference number base
event.save = Save
event.startTime = Start time
event.running = Running
event.save = Save
event.startTime = Start time
event.ticketSale = Tickets sale
event.ticketSalesBegin = Ticket sales begin
eventdomain.add = Add event domain
eventdomain.domainname = Domain
......
......@@ -342,18 +342,24 @@ error = Virhe
error.contact = Jos t\u00E4m\u00E4 toistuu, ota seuraava koodi talteen ja ota yhteys Infoon:
error.error = Olet kohdannut virheen.
event.defaultRole = K\u00E4ytt\u00E4jien oletusrooli
event.domains.title = Verkkotunnus
event.edit = Muokkaa
event.endTime = Lopetusp\u00E4iv\u00E4
event.id = Eventin id
event.name = Tapahtuman nimi
event.calendar.title = Tapahtumakalenteri
event.defaultRole = K\u00E4ytt\u00E4jien oletusrooli
event.domains.title = Verkkotunnus
event.edit = Muokkaa
event.endTime = Lopetusp\u00E4iv\u00E4
event.id = Eventin id
event.name = Tapahtuman nimi
event.nextBillNumber = Seuraavan laskun numero
event.nodates.message = Lis\u00E4\u00E4 tapahtumaan v\u00E4hint\u00E4\u00E4n aloitusp\u00E4iv\u00E4, lopetusp\u00E4iv\u00E4 sek\u00E4 lipunmyynnin aloitusp\u00E4iv\u00E4.
event.nodates.title = P\u00E4iv\u00E4m\u00E4\u00E4ri\u00E4 puuttuu!
event.privateProperties.title = Yksityiset ominaisuudet
event.properties.title = Ominaisuudet
event.referenceNumberBase = Viitenumeron pohja
event.save = Tallenna
event.startTime = Aloitusp\u00E4iv\u00E4
event.running = K\u00E4ynniss\u00E4
event.save = Tallenna
event.startTime = Aloitusp\u00E4iv\u00E4
event.ticketSale = Lipunmyynti
event.ticketSalesBegin = Lipunmyynti alkaa
eventdomain.add = Lis\u00E4\u00E4 verkkotunnus tapahtumalle
eventdomain.domainname = Verkkotunnus
......
......@@ -9,6 +9,12 @@ import javax.faces.model.ListDataModel;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.model.DefaultScheduleEvent;
import org.primefaces.model.DefaultScheduleModel;
import org.primefaces.model.ScheduleModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.beans.EventOrganiserBeanLocal;
import fi.codecrew.moya.enums.apps.EventPermission;
......@@ -16,6 +22,7 @@ import fi.codecrew.moya.model.EventOrganiser;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.LanEventDomain;
import fi.codecrew.moya.utilities.I18n;
import fi.codecrew.moya.web.annotations.LoggedIn;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
......@@ -29,6 +36,8 @@ public class EventOrgView extends GenericCDIView {
private transient EventOrganiserBeanLocal eventorgbean;
@EJB
private transient EventBeanLocal eventbean;
private static final Logger logger = LoggerFactory.getLogger(EventOrgView.class);
@LoggedIn
@Inject
......@@ -49,6 +58,8 @@ public class EventOrgView extends GenericCDIView {
private transient ListDataModel<LanEventDomain> eventdomains;
ScheduleModel eventsCalendar = null;
public void initCreate()
{
if (super.requirePermissions(user.getUser().isSuperadmin())) {
......@@ -226,4 +237,39 @@ public class EventOrgView extends GenericCDIView {
this.eventdomains = eventdomains;
}
public boolean isShowDatesError() {
return (getEvent().getStartTime() == null || getEvent().getEndTime() == null || getEvent().getTicketSalesBegin() == null);
}
public ScheduleModel getEventsCalendar() {
if (eventsCalendar == null) {
eventsCalendar = new DefaultScheduleModel();
for (LanEvent lanEvent : eventbean.findAllEvents()) {
if (lanEvent.getStartTime() != null && lanEvent.getEndTime() != null && lanEvent.getTicketSalesBegin() != null) {
DefaultScheduleEvent event = new DefaultScheduleEvent("<"+lanEvent.getId() + "> " + lanEvent.getName() + ": " + I18n.get("event.ticketSale"), lanEvent.getTicketSalesBegin(), lanEvent.getEndTime());
event.setAllDay(true);
eventsCalendar.addEvent(event);
event.setStyleClass("calendarEventStyle");
event = new DefaultScheduleEvent( "<"+lanEvent.getId() + "> " + lanEvent.getName() + ": " + I18n.get("event.running"), lanEvent.getStartTime(), lanEvent.getEndTime());
event.setAllDay(true);
event.setStyleClass("eventRunningCalendar");
eventsCalendar.addEvent(event);
}
}
}
return eventsCalendar;
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!