Skip to content
This repository has been archived by the owner on Nov 26, 2019. It is now read-only.

Commit

Permalink
UI Upgrade, Vaadin 8.1.6, Spring Boot 1.5.2 (#110)
Browse files Browse the repository at this point in the history
* Switching to CSSLayout based layout for performance
* Center-align login view
* Moved User Edit window to a view
* Changed BaseView to be based on CssLayout, cleanup
* Changed reports to new layout
* Changed search to new layout
* Vaadin 8.1.0, Spring Boot 1.5.2 upgrade, removed Valo theme source files
* Fix queries (database schema change after Spring upgrade; column names changed)
* Fixed search - event change would trigger a loop
* View cleanup
* Fixed unit tests
* Version bump
  • Loading branch information
jashort authored Dec 29, 2017
1 parent 3cf5e73 commit d9cde93
Show file tree
Hide file tree
Showing 377 changed files with 576 additions and 30,094 deletions.
12 changes: 10 additions & 2 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
Change Log
----------------
- Version 2.0.9 (Pending)

- Version 3.0.1 (Pending)

- Version 3.0.0 (12/29/2017)
- Layout change for speed (Base on CSSLayout)
- Upgrade to Vaadin 8.1.0
- Upgrade to Spring Boot 1.5.2 (database schema changed)
- Trainingmode defaults to false
- Minor UI corrections
- Fixed bug where adding printers through UI would fail after repeated use
- _UI migration to individual views still needed_

- Version 2.0.8 (10/28/2017)
- Day badges use age range color on bottom of badge. Fixed color of font
Expand Down
2 changes: 0 additions & 2 deletions install/config/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ spring.datasource.validation-query=SELECT 1
spring.datasource.time-between-eviction-runs-millis=5000
spring.datasource.min-evictable-idle-time-millis=60000
spring.datasource.jmx-enabled=true

#spring.jpa.show-sql=true

# This must be commented out for production or the database will be deleted every time the app starts:
Expand All @@ -25,7 +24,6 @@ spring.datasource.jmx-enabled=true
# Update database table schema
spring.jpa.hibernate.ddl-auto=update


###############################################################################
# Server
#
Expand Down
32 changes: 26 additions & 6 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

<groupId>org.kumoricon</groupId>
<artifactId>KumoReg</artifactId>
<version>2.0.8</version>
<version>3.0.0</version>
<packaging>jar</packaging>

<name>kumoreg</name>
Expand All @@ -14,7 +14,7 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.1.RELEASE</version>
<version>1.5.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

Expand Down Expand Up @@ -55,6 +55,21 @@
<artifactId>vaadin-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-compatibility-server</artifactId>
<version>8.1.6</version>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-client-compiled</artifactId>
<version>8.1.6</version>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-compatibility-client-compiled</artifactId>
<version>8.1.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
Expand All @@ -63,8 +78,13 @@
<dependency>
<groupId>org.vaadin</groupId>
<artifactId>viritin</artifactId>
<version>1.61</version>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.vaadin</groupId>
<artifactId>viritin-v7-compatibility</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
Expand Down Expand Up @@ -97,14 +117,14 @@
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-bom</artifactId>
<version>7.5.5</version>
<version>8.1.6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-maven-plugin</artifactId>
<version>7.5.5</version>
<version>8.1.6</version>
</dependency>
</dependencies>
</dependencyManagement>
Expand All @@ -121,7 +141,7 @@
<plugin>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-maven-plugin</artifactId>
<version>7.5.5</version>
<version>8.1.6</version>
<configuration>
<webappDirectory>${basedir}/resources/VAADIN/widgetsets
</webappDirectory>
Expand Down
186 changes: 145 additions & 41 deletions src/main/java/org/kumoricon/KumoRegUI.java
Original file line number Diff line number Diff line change
@@ -1,31 +1,51 @@
package org.kumoricon;

import com.vaadin.annotations.Theme;
import com.vaadin.annotations.Widgetset;
import com.vaadin.navigator.Navigator;
import com.vaadin.navigator.ViewChangeListener;
import com.vaadin.server.VaadinRequest;
import com.vaadin.spring.annotation.SpringUI;
import com.vaadin.spring.navigator.SpringViewProvider;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.*;
import com.vaadin.ui.MenuBar;
import com.vaadin.ui.Panel;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.themes.ValoTheme;
import org.kumoricon.model.user.User;
import org.kumoricon.site.ErrorView;
import org.kumoricon.site.LoginView;
import org.kumoricon.site.SiteLogo;
import org.kumoricon.site.SiteMenu;
import org.kumoricon.site.*;
import org.kumoricon.site.attendee.reg.OrderListView;
import org.kumoricon.site.attendee.reg.OrderView;
import org.kumoricon.site.attendee.search.AttendeeSearchByBadgeView;
import org.kumoricon.site.attendee.search.AttendeeSearchView;
import org.kumoricon.site.badge.BadgeView;
import org.kumoricon.site.computer.ComputerView;
import org.kumoricon.site.report.attendees.AttendeeReportView;
import org.kumoricon.site.report.checkinbyhour.CheckInByHourReportView;
import org.kumoricon.site.report.checkinbyuser.CheckInByUserReportView;
import org.kumoricon.site.report.export.ExportView;
import org.kumoricon.site.report.role.RoleReportView;
import org.kumoricon.site.report.staff.StaffReportView;
import org.kumoricon.site.report.till.TillReportView;
import org.kumoricon.site.role.RoleView;
import org.kumoricon.site.tillsession.TillSessionView;
import org.kumoricon.site.user.UserListView;
import org.kumoricon.site.utility.closeouttill.CloseOutTillView;
import org.kumoricon.site.utility.importattendee.ImportAttendeeView;
import org.kumoricon.site.utility.loadbasedata.LoadBaseDataView;
import org.kumoricon.site.utility.preprint.PreprintBadgeView;
import org.kumoricon.site.utility.testbadge.TestBadgeView;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;

@Theme("kumo")
@SpringUI
@Widgetset("com.vaadin.v7.Vaadin7WidgetSet")
public class KumoRegUI extends UI {
@Autowired
private SpringViewProvider viewProvider;

private SiteMenu menu;

private Layout baseLayout;
private MenuBar menuBar;

@Value("${info.build.version}")
private String version;
Expand All @@ -36,48 +56,36 @@ public class KumoRegUI extends UI {
@Value("${kumoreg.trainingMode}")
private boolean trainingMode;

@Autowired
private SiteLogo logo;

private VerticalLayout leftPanel;

public User getLoggedInUser(){
return (User)getSession().getAttribute("user");
}

public void setLoggedInUser(User user){
getSession().setAttribute("user", user);
logo.setUser(user);
buildMenu();
}

@Override
protected void init(VaadinRequest request) {
final HorizontalLayout root = new HorizontalLayout();
root.setSizeFull();
root.setMargin(false);
root.setSpacing(false);
setContent(root);
baseLayout = new CssLayout();
baseLayout.setSizeFull();
setContent(baseLayout);

// Left hand logo and menu
leftPanel = new VerticalLayout();
leftPanel.setWidth(200, Unit.PIXELS);
leftPanel.setHeight("100%");
leftPanel.addStyleName("kumoLeftMenu");
buildMenu();

leftPanel.addComponent(logo);
baseLayout.addComponent(menuBar);

final Panel viewContainer = new Panel();
viewContainer.setSizeFull();
baseLayout.addComponent(viewContainer);

viewContainer.setStyleName(ValoTheme.PANEL_BORDERLESS);
if (trainingMode) {
addStyleName("kumoTrainingMode");
} else {
addStyleName("kumoNormalMode");
}


if (getLoggedInUser() != null) { buildMenu(); }
root.addComponent(leftPanel);

final Panel viewContainer = new Panel();
viewContainer.setSizeFull();
root.addComponent(viewContainer);
root.setExpandRatio(viewContainer, 1.0f);
Navigator navigator = new Navigator(this, viewContainer);
navigator.setErrorView(new ErrorView());

Expand All @@ -100,16 +108,112 @@ public void afterViewChange(ViewChangeEvent event) {}
navigator.addProvider(viewProvider);
}

public String getVersionString() {
return "Ver. " + version;
}


/**
* Rebuilds the menu based on the currently logged in user
*/
public void buildMenu() {
if (leftPanel.getComponentCount() == 1) {
menu = new SiteMenu(getLoggedInUser(), version, buildDate);
leftPanel.addComponent(menu);
leftPanel.setExpandRatio(menu, 1.0f);
MenuBar menu = new MenuBar();
menu.setWidth("100%");
menu.setStyleName(ValoTheme.MENUBAR_BORDERLESS);
if (getLoggedInUser() == null) {
MenuBar.MenuItem version = menu.addItem(getVersionString(), null, null);
version.setEnabled(false);
version.setDescription("Build date: " + buildDate);
version.setStyleName("menuRight");
} else {
String username = "(" + getLoggedInUser().getUsername() + ") ";
MenuBar.MenuItem logout = menu.addItem("Logout " + username, null, v -> getNavigator().navigateTo(LogoutView.VIEW_NAME));
logout.setStyleName("menuRight");
MenuBar.MenuItem version = menu.addItem(getVersionString(), null, null);
version.setDescription("Build date: " + buildDate);
version.setEnabled(false);
version.setStyleName("menuRight");
menu.addItem("Home", null, v -> getNavigator().navigateTo(HomeView.VIEW_NAME));
MenuBar.MenuItem registration = menu.addItem("Registration", null, null);

if (getLoggedInUser().hasRight("at_con_registration")) {
registration.addItem("At-Con Check In", null, v -> getNavigator().navigateTo(OrderView.VIEW_NAME));
}
if (getLoggedInUser().hasRight("attendee_search")) {
registration.addItem("Attendee Search/Check In", null, v -> getNavigator().navigateTo(AttendeeSearchView.VIEW_NAME));
registration.addItem("Search by Badge Type", null, v -> getNavigator().navigateTo(AttendeeSearchByBadgeView.VIEW_NAME));
}

MenuBar.MenuItem admin = menu.addItem("Administration", null, null);
if (getLoggedInUser().hasRight("manage_staff")) {
admin.addItem("Users", null, v -> getNavigator().navigateTo(UserListView.VIEW_NAME));
}
if (getLoggedInUser().hasRight("manage_roles")) {
admin.addItem("Roles", null, v -> getNavigator().navigateTo(RoleView.VIEW_NAME));
}
if (getLoggedInUser().hasRight("manage_pass_types")) {
admin.addItem("Badge Types", null, v -> getNavigator().navigateTo(BadgeView.VIEW_NAME));
}
if (getLoggedInUser().hasRight("manage_devices")) {
admin.addItem("Printers", null, v -> getNavigator().navigateTo(ComputerView.VIEW_NAME));
}
if (getLoggedInUser().hasRight("manage_orders")) {
admin.addItem("Orders", null, v -> getNavigator().navigateTo(OrderListView.VIEW_NAME));
}
if (getLoggedInUser().hasRight("manage_till_sessions")) {
admin.addItem("Till Sessions", null, v -> getNavigator().navigateTo(TillSessionView.VIEW_NAME));
}

if (!admin.hasChildren()) {
menu.removeItem(admin);
}

MenuBar.MenuItem reports = menu.addItem("Reports", null, null);
if (getLoggedInUser().hasRight("view_attendance_report")) {
reports.addItem("Attendance", null, v -> getNavigator().navigateTo(AttendeeReportView.VIEW_NAME));
}
if (getLoggedInUser().hasRight("view_check_in_by_hour_report")) {
reports.addItem("Check Ins by Hour", null, v -> getNavigator().navigateTo(CheckInByHourReportView.VIEW_NAME));
}
if (getLoggedInUser().hasRight("view_check_ins_by_user_report")) {
reports.addItem("Check Ins by User", null, v -> getNavigator().navigateTo(CheckInByUserReportView.VIEW_NAME));
}
if (getLoggedInUser().hasRight("view_staff_report")) {
reports.addItem("Staff", null, v -> getNavigator().navigateTo(StaffReportView.VIEW_NAME));
}
if (getLoggedInUser().hasRight("view_role_report")) {
reports.addItem("Roles", null, v -> getNavigator().navigateTo(RoleReportView.VIEW_NAME));
}
if (getLoggedInUser().hasRight("view_till_report")) {
reports.addItem("Tills", null, v -> getNavigator().navigateTo(TillReportView.VIEW_NAME));
}
if (getLoggedInUser().hasRight("view_export")) {
reports.addItem("Export", null, v -> getNavigator().navigateTo(ExportView.VIEW_NAME));
}
if (!reports.hasChildren()) {
menu.removeItem(reports);
}

MenuBar.MenuItem utility = menu.addItem("Utility", null, null);
utility.addItem("Print Test Badge", null, v -> getNavigator().navigateTo(TestBadgeView.VIEW_NAME));
if (getLoggedInUser().hasRight("at_con_registration")) {
utility.addItem("Close out Till", null, v -> getNavigator().navigateTo(CloseOutTillView.VIEW_NAME));
}
if (getLoggedInUser().hasRight("import_pre_reg_data")) {
utility.addSeparator();
utility.addItem("Load Base Data", null, v -> getNavigator().navigateTo(LoadBaseDataView.VIEW_NAME));
utility.addItem("Import Attendee Data", null, v -> getNavigator().navigateTo(ImportAttendeeView.VIEW_NAME));
}
if (getLoggedInUser().hasRight("pre_print_badges")) {
utility.addSeparator();
utility.addItem("Pre-Print Badges", null, v -> getNavigator().navigateTo(PreprintBadgeView.VIEW_NAME));
}

}
baseLayout.replaceComponent(this.menuBar, menu);
this.menuBar = menu;
}

public void removeMenu() {
leftPanel.removeComponent(menu);
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@ public interface AttendeeHistoryRepository extends JpaRepository<AttendeeHistory
@Query(value = "SELECT ah from AttendeeHistory ah where ah.attendee = ?1 ORDER BY ah.timestamp ASC")
Set<AttendeeHistory> findByAttendee(Attendee attendee);

@Query(value = "SELECT users.firstName, users.lastName, COUNT(attendeehistory.id) FROM attendeehistory JOIN users ON attendeehistory.user_id = users.id WHERE message=\"Attendee checked in\" AND timestamp >= NOW() - INTERVAL 15 MINUTE AND attendeehistory.timestamp <= NOW() GROUP BY user_id", nativeQuery = true)
@Query(value = "SELECT users.first_name, users.last_name, COUNT(attendeehistory.id) FROM attendeehistory JOIN users ON attendeehistory.user_id = users.id WHERE message=\"Attendee checked in\" AND timestamp >= NOW() - INTERVAL 15 MINUTE AND attendeehistory.timestamp <= NOW() GROUP BY user_id", nativeQuery = true)
List<Object[]> checkInCountByUsers();
}
Loading

0 comments on commit d9cde93

Please sign in to comment.