calendar colors
This commit is contained in:
		| @@ -129,7 +129,8 @@ public class DoneGateway extends JooqGateway { | ||||
| 	/** | ||||
| 	 * get all from t_done of the given day | ||||
| 	 *  | ||||
| 	 * @param day the day; if null, the current date is used | ||||
| 	 * @param day | ||||
| 	 *          the day; if null, the current date is used | ||||
| 	 *  | ||||
| 	 * @return a list of found times, an empty one at least | ||||
| 	 */ | ||||
| @@ -224,7 +225,8 @@ public class DoneGateway extends JooqGateway { | ||||
| 	/** | ||||
| 	 * get day summary | ||||
| 	 *  | ||||
| 	 * @param day the day | ||||
| 	 * @param day | ||||
| 	 *          the day | ||||
| 	 * @return the day summary if found, an empty map otherwise | ||||
| 	 */ | ||||
| 	public WholeDaySummaryBean getDaySummary(Date day) { | ||||
| @@ -262,7 +264,8 @@ public class DoneGateway extends JooqGateway { | ||||
| 	/** | ||||
| 	 * get all jobs of day | ||||
| 	 *  | ||||
| 	 * @param day the day | ||||
| 	 * @param day | ||||
| 	 *          the day | ||||
| 	 * @return list of found jobs; an empty list at least | ||||
| 	 */ | ||||
| 	public List<DailySummaryBean> getAllJobs(Date day) { | ||||
| @@ -297,10 +300,10 @@ public class DoneGateway extends JooqGateway { | ||||
| 		SelectConditionStep<Record5<Timestamp, Timestamp, String, String, String>> sql = getJooq() | ||||
| 		// @formatter:off | ||||
| 			.select(T_DONE.TIME_FROM, | ||||
| 					T_DONE.TIME_UNTIL, | ||||
| 					T_PROJECT.NAME, | ||||
| 					T_MODULE.NAME, | ||||
| 					T_JOB.NAME) | ||||
| 							T_DONE.TIME_UNTIL, | ||||
| 							T_PROJECT.NAME, | ||||
| 							T_MODULE.NAME, | ||||
| 							T_JOB.NAME) | ||||
| 			.from(T_DONE) | ||||
| 			.leftJoin(T_PROJECT).on(T_PROJECT.PK.eq(T_DONE.FK_PROJECT)) | ||||
| 			.leftJoin(T_MODULE).on(T_MODULE.PK.eq(T_DONE.FK_MODULE)) | ||||
| @@ -324,17 +327,16 @@ public class DoneGateway extends JooqGateway { | ||||
| 			buf.append(jobName); | ||||
|  | ||||
| 			FullCalendarEventBean bean = new FullCalendarEventBean(buf.toString(), timeFrom) { | ||||
| 				private static final long serialVersionUID = 1L; | ||||
|  | ||||
| 				@Override | ||||
| 				public void addExtendedFields(StringBuilder buf) { | ||||
| 				} | ||||
| 			}; | ||||
| 			bean.setEnd(timeUntil); | ||||
| 			bean.setColor("#444444"); // TODO: colors by project name, maybe find a way to determine color by project | ||||
| 										// name | ||||
|  | ||||
| 			bean.setColor(new RgbColor().determineRgbColor(projectName, moduleName, jobName)); | ||||
| 			list.getList().add(bean); | ||||
| 		} | ||||
|  | ||||
| 		return list.toJson(); | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -176,6 +176,10 @@ public class DoneModel implements Model, Serializable { | ||||
| 		return buf.toString(); | ||||
| 	} | ||||
| 	 | ||||
| 	public String getDayIso8601() { | ||||
| 		return day == null ? "" : new SimpleDateFormat("yyyy-MM-dd").format(day); | ||||
| 	} | ||||
| 	 | ||||
| 	public void setBean(DoneBean bean) { | ||||
| 		this.bean = bean; | ||||
| 	} | ||||
|   | ||||
| @@ -0,0 +1,44 @@ | ||||
| package de.jottyfan.timetrack.modules.done; | ||||
|  | ||||
| import java.awt.Color; | ||||
|  | ||||
| /** | ||||
|  *  | ||||
|  * @author henkej | ||||
|  * | ||||
|  */ | ||||
| public class RgbColor { | ||||
|  | ||||
| 	/** | ||||
| 	 * find a rgb color code for the combination of the given params | ||||
| 	 *  | ||||
| 	 * @param bigInfluence | ||||
| 	 * @param mediumInfluence | ||||
| 	 * @param littleInfluence | ||||
| 	 * @return the hex color code | ||||
| 	 */ | ||||
| 	public String determineRgbColor(String bigInfluence, String mediumInfluence, String littleInfluence) { | ||||
| 		int big = bigInfluence == null ? 0 : bigInfluence.hashCode(); | ||||
| 		int med = mediumInfluence == null ? 0 : mediumInfluence.hashCode(); | ||||
| 		int lit = littleInfluence == null ? 0 : littleInfluence.hashCode(); | ||||
| 		 | ||||
| 		float bI = (1f / String.valueOf(big).length()); | ||||
| 		float mI = (0.5f / String.valueOf(med).length()); | ||||
| 		float lI = (0.25f / String.valueOf(lit).length()); | ||||
| 		 | ||||
| 		float r = 0.0f + bI + mI + lI; // + makes it brighter | ||||
| 		float g = 0.5f - bI - mI - lI; // - makes it darker | ||||
| 		float b = 0.5f - bI - mI - lI; | ||||
| 		 | ||||
| 		r = r < 0 ? r * -1 : r; | ||||
| 		r = r > 1.0f ? 1 / r : r; | ||||
| 		g = g < 0 ? g * -1 : g; | ||||
| 		g = g > 1.0f ? 1 / g : g; | ||||
| 		b = b < 0 ? b * -1 : b; | ||||
| 		b = b > 1.0f ? 1 / b : b; | ||||
| 		 | ||||
| 		Color c = new Color(r, g, b); | ||||
| 		return new StringBuilder("rgb(").append(c.getRed()).append(",").append(c.getGreen()).append(",").append(c.getBlue()) | ||||
| 				.append(")").toString(); | ||||
| 	} | ||||
| } | ||||
| @@ -1,104 +1,107 @@ | ||||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | ||||
|         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.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:my="http://xmlns.jcp.org/jsf/composite/my" xmlns:b="http://bootsfaces.net/ui"> | ||||
|   xmlns:f="http://java.sun.com/jsf/core" xmlns:my="http://xmlns.jcp.org/jsf/composite/my" xmlns:b="http://bootsfaces.net/ui"> | ||||
| <h:head> | ||||
| 	<title>Arbeitszeit</title> | ||||
|   <title>Arbeitszeit</title> | ||||
| </h:head> | ||||
| <h:body> | ||||
| 	<ui:composition template="/pages/template.xhtml"> | ||||
| 		<ui:define name="top"></ui:define> | ||||
| 		<ui:define name="main"> | ||||
| 			<b:panel title="Arbeitszeit" look="primary"> | ||||
| 				<b:form> | ||||
| 					<h:panelGrid columns="3"> | ||||
| 						<h:outputText value="für den Tag" /> | ||||
| 						<b:dateTimePicker value="#{doneModel.day}" showTime="false" style="padding-left: 4px" /> | ||||
| 						<b:commandButton action="#{doneControl.toList}" value="neu laden" look="default" iconAwesome="refresh" | ||||
| 							style="padding-left: 4px" /> | ||||
| 					</h:panelGrid> | ||||
| 					<b:tabView> | ||||
| 						<b:tab title="Liste"> | ||||
| 							<b:dataTable value="#{doneModel.beans}" var="b" border="false" info="false" paginated="false" searching="false" | ||||
| 								styleClass="doneoverview"> | ||||
| 								<b:dataTableColumn label="" orderable="false"> | ||||
| 									<b:commandButton action="#{doneControl.toDelete(b)}" value="Entfernen" look="danger" iconAwesome="trash" /> | ||||
| 								</b:dataTableColumn> | ||||
| 								<b:dataTableColumn label="" value="#{b.timeSummary}" contentStyleClass="doneoverviewtext" orderable="false" /> | ||||
| 								<b:dataTableColumn label="" value="#{b.projectName}" contentStyleClass="doneoverviewtextemph" orderable="false" /> | ||||
| 								<b:dataTableColumn label="" value="#{b.timeDiff}" contentStyleClass="doneoverviewtextemph" orderable="false" /> | ||||
| 								<b:dataTableColumn label="" orderable="false"> | ||||
| 									<b:commandButton action="#{doneControl.toEdit(b)}" value="Editieren" look="warning" iconAwesome="pencil" /> | ||||
| 								</b:dataTableColumn> | ||||
| 								<b:dataTableColumn label="" value="#{b.moduleName}" contentStyleClass="doneoverviewtext" orderable="false" /> | ||||
| 								<b:dataTableColumn label="" value="#{b.jobName}" contentStyleClass="doneoverviewtext" orderable="false" /> | ||||
| 							</b:dataTable> | ||||
| 							<b:row rendered="#{doneModel.daySummary != null}"> | ||||
| 								<b:column colXs="4"> | ||||
| 									<b:well styleClass="dangerWell">Pause | ||||
|   <ui:composition template="/pages/template.xhtml"> | ||||
|     <ui:define name="top"></ui:define> | ||||
|     <ui:define name="main"> | ||||
|       <b:panel title="Arbeitszeit" look="primary"> | ||||
|         <b:form> | ||||
|           <h:panelGrid columns="3"> | ||||
|             <h:outputText value="für den Tag" /> | ||||
|             <b:dateTimePicker value="#{doneModel.day}" showTime="false" style="padding-left: 4px" /> | ||||
|             <b:commandButton action="#{doneControl.toList}" value="neu laden" look="default" iconAwesome="refresh" | ||||
|               style="padding-left: 4px" /> | ||||
|           </h:panelGrid> | ||||
|           <b:tabView> | ||||
|             <b:tab title="Liste"> | ||||
|               <b:dataTable value="#{doneModel.beans}" var="b" border="false" info="false" paginated="false" searching="false" | ||||
|                 styleClass="doneoverview"> | ||||
|                 <b:dataTableColumn label="" orderable="false"> | ||||
|                   <b:commandButton action="#{doneControl.toDelete(b)}" value="Entfernen" look="danger" iconAwesome="trash" /> | ||||
|                 </b:dataTableColumn> | ||||
|                 <b:dataTableColumn label="" value="#{b.timeSummary}" contentStyleClass="doneoverviewtext" orderable="false" /> | ||||
|                 <b:dataTableColumn label="" value="#{b.projectName}" contentStyleClass="doneoverviewtextemph" orderable="false" /> | ||||
|                 <b:dataTableColumn label="" value="#{b.timeDiff}" contentStyleClass="doneoverviewtextemph" orderable="false" /> | ||||
|                 <b:dataTableColumn label="" orderable="false"> | ||||
|                   <b:commandButton action="#{doneControl.toEdit(b)}" value="Editieren" look="warning" iconAwesome="pencil" /> | ||||
|                 </b:dataTableColumn> | ||||
|                 <b:dataTableColumn label="" value="#{b.moduleName}" contentStyleClass="doneoverviewtext" orderable="false" /> | ||||
|                 <b:dataTableColumn label="" value="#{b.jobName}" contentStyleClass="doneoverviewtext" orderable="false" /> | ||||
|               </b:dataTable> | ||||
|               <b:row rendered="#{doneModel.daySummary != null}"> | ||||
|                 <b:column colXs="4"> | ||||
|                   <b:well styleClass="dangerWell">Pause | ||||
|                     <h3> | ||||
| 											<h:outputText value="#{doneModel.daySummary.breakTime}" /> | ||||
| 										</h3> | ||||
| 									</b:well> | ||||
| 								</b:column> | ||||
| 								<b:column colXs="4"> | ||||
| 									<b:well>Startzeit | ||||
|                       <h:outputText value="#{doneModel.daySummary.breakTime}" /> | ||||
|                     </h3> | ||||
|                   </b:well> | ||||
|                 </b:column> | ||||
|                 <b:column colXs="4"> | ||||
|                   <b:well>Startzeit | ||||
|                     <h3> | ||||
| 											<h:outputText value="#{doneModel.daySummary.startTime}" /> | ||||
| 										</h3> | ||||
| 									</b:well> | ||||
| 								</b:column> | ||||
| 								<b:column colXs="4"> | ||||
| 									<b:well>Überstunden | ||||
|                       <h:outputText value="#{doneModel.daySummary.startTime}" /> | ||||
|                     </h3> | ||||
|                   </b:well> | ||||
|                 </b:column> | ||||
|                 <b:column colXs="4"> | ||||
|                   <b:well>Überstunden | ||||
|                     <h3> | ||||
| 											<h:outputText value="#{doneModel.daySummary.overtime}" /> | ||||
| 										</h3> | ||||
| 									</b:well> | ||||
| 								</b:column> | ||||
| 								<b:column colXs="4"> | ||||
| 									<b:well styleClass="successWell">Arbeitszeit | ||||
|                       <h:outputText value="#{doneModel.daySummary.overtime}" /> | ||||
|                     </h3> | ||||
|                   </b:well> | ||||
|                 </b:column> | ||||
|                 <b:column colXs="4"> | ||||
|                   <b:well styleClass="successWell">Arbeitszeit | ||||
|                     <h3> | ||||
| 											<h:outputText value="#{doneModel.daySummary.workTime}" /> | ||||
| 										</h3> | ||||
| 									</b:well> | ||||
| 								</b:column> | ||||
| 								<b:column colXs="4"> | ||||
| 									<b:well>Endzeit | ||||
|                       <h:outputText value="#{doneModel.daySummary.workTime}" /> | ||||
|                     </h3> | ||||
|                   </b:well> | ||||
|                 </b:column> | ||||
|                 <b:column colXs="4"> | ||||
|                   <b:well>Endzeit | ||||
|                     <h3> | ||||
| 											<h:outputText value="#{doneModel.daySummary.endTime}" /> | ||||
| 										</h3> | ||||
| 									</b:well> | ||||
| 								</b:column> | ||||
| 							</b:row> | ||||
| 						</b:tab> | ||||
| 						<b:tab title="Zusammenfassung"> | ||||
| 							<b:dataTable value="#{doneModel.allJobs}" var="col" border="false" info="false" paginated="false" searching="false"> | ||||
| 								<b:dataTableColumn label="" value="#{col.projectName}" contentStyle="font-size: 120%" orderable="false" /> | ||||
| 								<b:dataTableColumn label="" value="#{col.moduleName}" contentStyle="font-size: 120%" orderable="false" /> | ||||
| 								<b:dataTableColumn label="" value="#{col.jobName}" contentStyle="font-size: 120%" orderable="false" /> | ||||
| 								<b:dataTableColumn label="" value="#{col.duration}" contentStyle="font-size: 120%" orderable="false" /> | ||||
| 							</b:dataTable> | ||||
| 						</b:tab> | ||||
| 						<b:tab title="Anhang"> | ||||
| 							<p> | ||||
| 								<b:inputTextarea value="#{doneModel.attach}" readonly="true" /> | ||||
| 							</p> | ||||
| 						</b:tab> | ||||
| 						<b:tab title="Kalender"> | ||||
| 							<b:fullCalendar editable="false" events="#{doneModel.calendarEvents}" height="400" defaultDate="#{doneModel.day}" /> | ||||
| 						</b:tab> | ||||
| 					</b:tabView> | ||||
| 				</b:form> | ||||
| 			</b:panel> | ||||
| 		</ui:define> | ||||
| 		<ui:define name="navigation"> | ||||
| 			<b:form> | ||||
| 				<b:buttonGroup> | ||||
| 					<b:commandButton action="#{doneControl.toStart}" value="zurück" look="primary" iconAwesome="arrow-left" /> | ||||
| 					<b:commandButton action="#{doneControl.toAdd}" value="Neuer Eintrag" look="success" iconAwesome="plus" /> | ||||
| 				</b:buttonGroup> | ||||
| 			</b:form> | ||||
| 		</ui:define> | ||||
| 	</ui:composition> | ||||
|                       <h:outputText value="#{doneModel.daySummary.endTime}" /> | ||||
|                     </h3> | ||||
|                   </b:well> | ||||
|                 </b:column> | ||||
|               </b:row> | ||||
|             </b:tab> | ||||
|             <b:tab title="Zusammenfassung"> | ||||
|               <b:dataTable value="#{doneModel.allJobs}" var="col" border="false" info="false" paginated="false" | ||||
|                 searching="false"> | ||||
|                 <b:dataTableColumn label="" value="#{col.projectName}" contentStyle="font-size: 120%" orderable="false" /> | ||||
|                 <b:dataTableColumn label="" value="#{col.moduleName}" contentStyle="font-size: 120%" orderable="false" /> | ||||
|                 <b:dataTableColumn label="" value="#{col.jobName}" contentStyle="font-size: 120%" orderable="false" /> | ||||
|                 <b:dataTableColumn label="" value="#{col.duration}" contentStyle="font-size: 120%" orderable="false" /> | ||||
|               </b:dataTable> | ||||
|             </b:tab> | ||||
|             <b:tab title="Anhang"> | ||||
|               <p> | ||||
|                 <b:inputTextarea value="#{doneModel.attach}" readonly="true" /> | ||||
|               </p> | ||||
|             </b:tab> | ||||
|             <b:tab title="Kalender"> | ||||
|               <b:fullCalendar editable="false" events="#{doneModel.calendarEvents}" height="600" | ||||
|                 defaultDate="#{doneModel.dayIso8601}" defaultView="agendaDay" hidden="xs" scrollTime="08:00:00" | ||||
|                 slotDuration="00:15:00" span="half" allDaySlot="false" lang="de" /> | ||||
|             </b:tab> | ||||
|           </b:tabView> | ||||
|         </b:form> | ||||
|       </b:panel> | ||||
|     </ui:define> | ||||
|     <ui:define name="navigation"> | ||||
|       <b:form> | ||||
|         <b:buttonGroup> | ||||
|           <b:commandButton action="#{doneControl.toStart}" value="zurück" look="primary" iconAwesome="arrow-left" /> | ||||
|           <b:commandButton action="#{doneControl.toAdd}" value="Neuer Eintrag" look="success" iconAwesome="plus" /> | ||||
|         </b:buttonGroup> | ||||
|       </b:form> | ||||
|     </ui:define> | ||||
|   </ui:composition> | ||||
| </h:body> | ||||
| </html> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user