Commit 823f1edd by Tuukka Kivilahti

something nice, I atleast hope so, cannot remember

1 parent 0fc83f6c
...@@ -194,7 +194,7 @@ public class BootstrapBean implements BootstrapBeanLocal { ...@@ -194,7 +194,7 @@ public class BootstrapBean implements BootstrapBeanLocal {
dbUpdates.add(new String[] {"CREATE TABLE lecture_groups (id SERIAL NOT NULL, event_id integer NOT NULL, description TEXT, name TEXT, select_count INTEGER, meta json, PRIMARY KEY (id))", dbUpdates.add(new String[] {"CREATE TABLE lecture_groups (id SERIAL NOT NULL, event_id integer NOT NULL, description TEXT, name TEXT, select_count INTEGER, meta json, PRIMARY KEY (id))",
"CREATE TABLE lectures (id SERIAL NOT NULL, description TEXT, end_time TIMESTAMPTZ, max_participants_count INTEGER, name TEXT, start_time TIMESTAMPTZ, lecture_group_id INTEGER, meta json, PRIMARY KEY (id))", "CREATE TABLE lectures (id SERIAL NOT NULL, description TEXT, hours numeric(10,2), max_participants_count INTEGER, name TEXT, start_time TIMESTAMPTZ, lecture_group_id INTEGER, meta json, PRIMARY KEY (id))",
"CREATE TABLE lecture_roles (role_id INTEGER NOT NULL, lecture_id INTEGER NOT NULL, PRIMARY KEY (role_id, lecture_id))", "CREATE TABLE lecture_roles (role_id INTEGER NOT NULL, lecture_id INTEGER NOT NULL, PRIMARY KEY (role_id, lecture_id))",
"CREATE TABLE lecture_participants (eventuser_id INTEGER NOT NULL, lecture_id INTEGER NOT NULL, PRIMARY KEY (eventuser_id, lecture_id))", "CREATE TABLE lecture_participants (eventuser_id INTEGER NOT NULL, lecture_id INTEGER NOT NULL, PRIMARY KEY (eventuser_id, lecture_id))",
"ALTER TABLE lectures ADD CONSTRAINT FK_lectures_lecture_group_id FOREIGN KEY (lecture_group_id) REFERENCES lecture_groups (id)", "ALTER TABLE lectures ADD CONSTRAINT FK_lectures_lecture_group_id FOREIGN KEY (lecture_group_id) REFERENCES lecture_groups (id)",
......
...@@ -17,5 +17,7 @@ public interface LectureBeanLocal { ...@@ -17,5 +17,7 @@ public interface LectureBeanLocal {
public LectureGroup findLectureGroup(Integer id); public LectureGroup findLectureGroup(Integer id);
public Lecture saveLecture(Lecture lecture);
} }
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
*/ */
package fi.codecrew.moya.model; package fi.codecrew.moya.model;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.List; import java.util.List;
...@@ -67,15 +69,20 @@ public class Lecture extends GenericEntity { ...@@ -67,15 +69,20 @@ public class Lecture extends GenericEntity {
@Column(name = "start_time") @Column(name = "start_time")
private Calendar startTime; private Calendar startTime;
@Temporal(TemporalType.TIMESTAMP) @Column(name = "hours", precision = 10, scale = 2)
@Column(name = "end_time") private BigDecimal hours;
private Calendar endTime;
public Lecture() { public Lecture() {
super(); super();
} }
public Lecture(LectureGroup group) {
this();
setLectureGroup(group);
}
public String getName() { public String getName() {
return name; return name;
} }
...@@ -112,6 +119,10 @@ public class Lecture extends GenericEntity { ...@@ -112,6 +119,10 @@ public class Lecture extends GenericEntity {
} }
public List<Role> getOpenForRoles() { public List<Role> getOpenForRoles() {
if(openForRoles == null)
openForRoles = new ArrayList<Role>();
return openForRoles; return openForRoles;
} }
...@@ -136,16 +147,68 @@ public class Lecture extends GenericEntity { ...@@ -136,16 +147,68 @@ public class Lecture extends GenericEntity {
} }
public Calendar getEndTime() { public Calendar getEndTime() {
if(getStartTime() == null || getHours() == null)
return getStartTime();
Calendar endTime = (Calendar) getStartTime().clone();
endTime.add(Calendar.MINUTE, getHours().multiply(new BigDecimal(60)).intValue());
return endTime; return endTime;
} }
public void setEndTime(Calendar endTime) { public void setEndTime(Calendar endTime) {
this.endTime = endTime;
if(endTime == null || getStartTime() == null) {
hours = BigDecimal.ZERO;
}
setHours(new BigDecimal((int) endTime.compareTo(getStartTime()) / 1000 / 60 / 60));
} }
public boolean isFull() { public boolean isFull() {
return (getParticipants().size() >= maxParticipantsCount); return (getParticipants().size() >= maxParticipantsCount);
} }
public BigDecimal getHours() {
return hours;
}
public void setHours(BigDecimal hours) {
this.hours = hours;
}
/**
* Clones lecture -object withoud database id and partisipants
*/
@Override
public Object clone() {
Lecture newLecture = new Lecture(this.getLectureGroup());
newLecture.setDescription(getDescription());
newLecture.setName(getName());
newLecture.setHours(getHours());
newLecture.setMaxParticipantsCount(getMaxParticipantsCount());
newLecture.setStartTime(getStartTime());
newLecture.setOpenForRoles(getOpenForRoles());
return newLecture;
}
} }
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
<ui:define name="content"> <ui:define name="content">
<h:form> <h:form id="managelecturegroups">
<p:dataTable id="lecturegroups" var="lectureGroup" value="#{lectureGroupView.lectureGroups}"> <p:dataTable id="lecturegroups" var="lectureGroup" value="#{lectureGroupView.lectureGroups}">
<p:column headerText="#{i18n['lectureGroup.name']}"> <p:column headerText="#{i18n['lectureGroup.name']}">
...@@ -26,12 +26,23 @@ ...@@ -26,12 +26,23 @@
<h:outputText value="#{lectureGroup.description}" /> <h:outputText value="#{lectureGroup.description}" />
</p:column> </p:column>
<p:column> <p:column>
<p:commandButton value="#{i18n['edit']}" actionListener="#{lectureGroupView.editCurrent}" update="editcreate" /> <p:commandButton value="#{i18n['edit']}" actionListener="#{lectureGroupView.editCurrent}" update=":managelecturegroups:editcreate" />
</p:column>
<p:column>
<p:commandButton value="#{i18n['lectureGroup.manageLectures']}" actionListener="#{lectureGroupView.editCurrent}" update=":managelecturegroups:editcreate" />
</p:column>
<p:column>
<h:link outcome="/lectureadmin/manageLectures" value="#{i18n['lectureGroup.manageLectures']}">
<f:param name="lecturegroupid" value="#{lectureGroup.id}" />
</h:link>
</p:column> </p:column>
</p:dataTable> </p:dataTable>
<p:commandButton value="#{i18n['lectureGroup.createNew']}" actionListener="#{lectureGroupView.createNew}" update="editcreate" />
<br /><br /><br /> <p:commandButton value="#{i18n['lectureGroup.createNew']}" actionListener="#{lectureGroupView.createNew}" update=":managelecturegroups:editcreate" />
<br />
<br />
<br />
<p:fieldset legend="#{lectureGroupView.editPanelTitle}" id="editcreate"> <p:fieldset legend="#{lectureGroupView.editPanelTitle}" id="editcreate">
<p:panelGrid columns="2"> <p:panelGrid columns="2">
<p:outputLabel value="#{i18n['lectureGroup.name']}" /> <p:outputLabel value="#{i18n['lectureGroup.name']}" />
...@@ -43,8 +54,8 @@ ...@@ -43,8 +54,8 @@
<p:outputLabel value="#{i18n['lectureGroup.description']}" /> <p:outputLabel value="#{i18n['lectureGroup.description']}" />
<p:inputTextarea value="#{lectureGroupView.currentLectureGroup.description}" /> <p:inputTextarea value="#{lectureGroupView.currentLectureGroup.description}" />
<p:commandButton rendered="#{!lectureGroupView.creatingLectureGroup}" actionListener="#{lectureGroupView.saveLectureGroup}" value="#{i18n['save']}" update="lecturegroups" /> <p:commandButton rendered="#{!lectureGroupView.creatingLectureGroup}" actionListener="#{lectureGroupView.saveLectureGroup}" value="#{i18n['save']}" update=":managelecturegroups:lecturegroups" />
<p:commandButton rendered="#{lectureGroupView.creatingLectureGroup}" actionListener="#{lectureGroupView.saveLectureGroup}" value="#{i18n['create']}" update="lecturegroups" /> <p:commandButton rendered="#{lectureGroupView.creatingLectureGroup}" actionListener="#{lectureGroupView.saveLectureGroup}" value="#{i18n['create']}" update=":managelecturegroups:lecturegroups" />
</p:panelGrid> </p:panelGrid>
</p:fieldset> </p:fieldset>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<h:body> <h:body>
<ui:composition template="#{sessionHandler.template}"> <ui:composition template="#{sessionHandler.template}">
<f:metadata> <f:metadata>
<f:viewParam name="lecturegroupid" value="#{lectureView.lectureGroupId}" />
<f:event type="preRenderView" listener="#{lectureGroupView.initView()}" /> <f:event type="preRenderView" listener="#{lectureGroupView.initView()}" />
</f:metadata> </f:metadata>
...@@ -13,48 +13,60 @@ ...@@ -13,48 +13,60 @@
<ui:define name="content"> <ui:define name="content">
<h:form> <h:form id="managelectures">
<p:fieldset legend="#{lectureView.currentLectureGroup.name}" id="lectures"> <p:fieldset legend="#{lectureView.currentLectureGroup.name}" id="lectures">
<p:dataTable var="lecture" value="#{lectureView.lectures}"> <p:dataTable var="lecture" value="#{lectureView.lectures}">
<p:column headerText="#{i18n['lecture.name']}"> <p:column headerText="#{i18n['lecture.name']}">
<h:outputText value="#{lecture.name}" /> <h:outputText value="#{lecture.name}" />
</p:column> </p:column>
<p:column headerText="#{i18n['lecture.']}"> <p:column headerText="#{i18n['lecture.description']}">
<h:outputText value="#{lecture.}" /> <h:outputText value="#{lecture.description}" />
</p:column> </p:column>
<p:column headerText="#{i18n['lecture.']}"> <p:column headerText="#{i18n['lecture.maxParticipantsCount}']}">
<h:outputText value="#{lecture.}" /> <h:outputText value="#{lecture.maxParticipantsCount}}" />
</p:column> </p:column>
<p:column headerText="#{i18n['lecture.']}"> <p:column headerText="#{i18n['lecture.hours']}">
<h:outputText value="#{lecture.}" /> <h:outputText value="#{lecture.hours}" />
</p:column> </p:column>
<p:column headerText="#{i18n['lecture.startTime']}">
<h:outputText value="#{lecture.startTime}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
</p:column>
<p:column> <p:column>
<p:commandButton value="#{i18n['edit']}" actionListener="#{lectureGroupView.editCurrent}" update="editcreate" /> <p:commandButton value="#{i18n['edit']}" actionListener="#{lectureGroupView.editCurrent}" update=":managelectures:editcreate" />
</p:column> </p:column>
</p:dataTable> </p:dataTable>
</p:fieldset> </p:fieldset>
<p:commandButton value="#{i18n['lectureGroup.createNew']}" actionListener="#{lectureGroupView.createNew}" update="editcreate" /> <p:commandButton value="#{i18n['lecture.createNew']}" actionListener="#{lectureView.createNew}" update=":managelectures:editcreate" />
<br /> <br />
<br /> <br />
<br /> <br />
<p:fieldset legend="#{lectureGroupView.editPanelTitle}" id="editcreate"> <p:fieldset legend="#{lectureView.editPanelTitle}" id="editcreate">
<p:panelGrid columns="2"> <p:panelGrid columns="2">
<p:outputLabel value="#{i18n['lectureGroup.name']}" /> <p:outputLabel value="#{i18n['lecture.name']}" />
<p:inputText value="#{lectureGroupView.currentLectureGroup.name}" /> <p:inputText value="#{lectureView.currentLecture.name}" />
<p:outputLabel value="#{i18n['lecture.description']}" />
<p:inputTextarea value="#{lectureView.currentLecture.description}" />
<p:outputLabel value="#{i18n['lecture.maxParticipantsCount}']}" />
<p:inputText value="#{lectureView.currentLecture.maxParticipantsCount}" />
<p:outputLabel value="#{i18n['lectureGroup.selectCount']}" /> <p:outputLabel value="#{i18n['lecture.startTime}']}" />
<p:inputText value="#{lectureGroupView.currentLectureGroup.selectCount}" /> <p:calendar value="#{lectureView.currentLecture.startTime}" pattern="#{sessionHandler.datetimeFormat}" showOn="button" />
<p:outputLabel value="#{i18n['lectureGroup.description']}" /> <p:outputLabel value="#{i18n['lecture.roles}']}" />
<p:inputTextarea value="#{lectureGroupView.currentLectureGroup.description}" /> <h:selectManyCheckbox converter="#{roleConverter}" layout="pageDirection" id="roles" value="#{lectureView.currentLecture.openForRoles}">
<f:selectItems var="roleitem" itemLabel="#{roleitem.name}" value="#{roleDataView.roles}" />
</h:selectManyCheckbox>
<p:commandButton rendered="#{!lectureGroupView.creatingLectureGroup}" actionListener="#{lectureGroupView.saveLectureGroup}" value="#{i18n['save']}" update="lecturegroups" /> <p:commandButton rendered="#{!lectureView.creatingLecture}" actionListener="#{lectureView.saveLecture}" value="#{i18n['save']}" update=":managelectures:lectures" />
<p:commandButton rendered="#{lectureGroupView.creatingLectureGroup}" actionListener="#{lectureGroupView.saveLectureGroup}" value="#{i18n['create']}" update="lecturegroups" /> <p:commandButton rendered="#{lectureView.creatingLecture}" actionListener="#{lectureView.saveLecture}" value="#{i18n['create']}" update=":managelectures:lectures" />
</p:panelGrid> </p:panelGrid>
</p:fieldset> </p:fieldset>
......
...@@ -2,6 +2,8 @@ package fi.codecrew.moya.web.cdiview.lecture; ...@@ -2,6 +2,8 @@ package fi.codecrew.moya.web.cdiview.lecture;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped; import javax.enterprise.context.ConversationScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.ListDataModel; import javax.faces.model.ListDataModel;
import javax.inject.Named; import javax.inject.Named;
...@@ -9,6 +11,7 @@ import fi.codecrew.moya.beans.EventBeanLocal; ...@@ -9,6 +11,7 @@ import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.beans.LectureBeanLocal; import fi.codecrew.moya.beans.LectureBeanLocal;
import fi.codecrew.moya.model.Lecture; import fi.codecrew.moya.model.Lecture;
import fi.codecrew.moya.model.LectureGroup; import fi.codecrew.moya.model.LectureGroup;
import fi.codecrew.moya.utilities.I18n;
import fi.codecrew.moya.web.cdiview.GenericCDIView; import fi.codecrew.moya.web.cdiview.GenericCDIView;
@Named @Named
...@@ -25,9 +28,12 @@ public class LectureView extends GenericCDIView { ...@@ -25,9 +28,12 @@ public class LectureView extends GenericCDIView {
private LectureGroup currentLectureGroup; private LectureGroup currentLectureGroup;
private Lecture currentLecture;
private boolean creatingLecture = true; private boolean creatingLecture = true;
private boolean multicreate = false;
private ListDataModel<Lecture> lectures; private ListDataModel<Lecture> lectures;
...@@ -38,6 +44,44 @@ public class LectureView extends GenericCDIView { ...@@ -38,6 +44,44 @@ public class LectureView extends GenericCDIView {
} }
public void saveLecture() {
FacesContext context = FacesContext.getCurrentInstance();
if(currentLecture == null) {
// this should never happen, so no internatiolazion here.
context.addMessage(null, new FacesMessage(I18n.get("error"), "There was some internal error when saving lecture group, basicly there was no lecturegroup to save.") );
return ;
}
currentLecture= lectureBean.saveLecture(currentLecture);
if(creatingLecture)
context.addMessage(null, new FacesMessage(I18n.get("success"), I18n.get("lecturegroup.create.success")) );
else
context.addMessage(null, new FacesMessage(I18n.get("success"), I18n.get("lecturegroup.save.success")) );
this.creatingLecture = false;
lectures = null;
if(isMulticreate()) {
currentLecture = (Lecture) currentLecture.clone();
currentLecture.setName("");
currentLecture.setDescription("");
}
}
public void editCurrent() {
if(lectures != null && lectures.isRowAvailable()) {
this.creatingLecture = false;
currentLecture = lectures.getRowData();
}
}
public Integer getLectureGroupId() { public Integer getLectureGroupId() {
...@@ -74,4 +118,48 @@ public class LectureView extends GenericCDIView { ...@@ -74,4 +118,48 @@ public class LectureView extends GenericCDIView {
public boolean isMulticreate() {
return multicreate;
}
public void setMulticreate(boolean multicreate) {
this.multicreate = multicreate;
}
public Lecture getCurrentLecture() {
return currentLecture;
}
public void setCurrentLecture(Lecture currentLecture) {
this.currentLecture = currentLecture;
}
public LectureGroup getCurrentLectureGroup() {
return currentLectureGroup;
}
public String getEditPanelTitle() {
if(isCreatingLecture()) {
return I18n.get("lecture.createLecture");
} else {
return I18n.get("lecture.saveLecture");
}
}
public boolean isCreatingLecture() {
return creatingLecture;
}
} }
...@@ -191,6 +191,8 @@ public class UserView extends GenericCDIView { ...@@ -191,6 +191,8 @@ public class UserView extends GenericCDIView {
} }
public String crop() public String crop()
{ {
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!