diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/timetracker/zoom/DetailItem.java b/ganttzk/src/main/java/org/zkoss/ganttz/timetracker/zoom/DetailItem.java index edae81347..281f574eb 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/timetracker/zoom/DetailItem.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/timetracker/zoom/DetailItem.java @@ -3,7 +3,7 @@ * * Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e * Desenvolvemento Tecnolóxico de Galicia - * Copyright (C) 2010-2011 Igalia, S.L. + * Copyright (C) 2010-2012 Igalia, S.L. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by @@ -50,6 +50,9 @@ public final class DetailItem { private boolean currentPeriod; private int currentDayOffset; + private boolean projectStart = false; + private int projectStartOffset = 0; + private boolean deadlinePeriod; private int deadlineOffset; @@ -103,6 +106,17 @@ public final class DetailItem { } } + public void markProjectStart(DateTime projectStart) { + if (!this.startDate.isAfter(projectStart) + && projectStart.isBefore(endDate)) { + int offsetInPx = Math.round((((float) Days.daysBetween( + this.startDate, projectStart).getDays()) / ((float) Days + .daysBetween(this.startDate, this.endDate).getDays())) + * this.size); + this.markprojectStart(Math.min(this.size - 1, offsetInPx)); + } + } + public void markDeadlineDay(DateTime deadline) { if (!this.startDate.isAfter(deadline) && deadline.isBefore(endDate)) { int offsetInPx = Math.round((((float) Days.daysBetween( @@ -144,6 +158,11 @@ public final class DetailItem { this.deadlineOffset = offset; } + public void markprojectStart(int offset) { + this.projectStart = true; + this.projectStartOffset = offset; + } + public boolean isEven() { return even; } @@ -164,6 +183,14 @@ public final class DetailItem { return currentDayOffset; } + public boolean isProjectStart() { + return projectStart; + } + + public int getProjectStartOffset() { + return projectStartOffset; + } + public boolean isDeadlinePeriod() { return deadlinePeriod; } diff --git a/ganttzk/src/main/resources/web/ganttz/zul/timetracker/timetrackersecondlevel.zul b/ganttzk/src/main/resources/web/ganttz/zul/timetracker/timetrackersecondlevel.zul index c8db8f08a..0291f5143 100644 --- a/ganttzk/src/main/resources/web/ganttz/zul/timetracker/timetrackersecondlevel.zul +++ b/ganttzk/src/main/resources/web/ganttz/zul/timetracker/timetrackersecondlevel.zul @@ -3,7 +3,7 @@ Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e Desenvolvemento Tecnolóxico de Galicia - Copyright (C) 2010-2011 Igalia, S.L. + Copyright (C) 2010-2012 Igalia, S.L. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by @@ -32,6 +32,7 @@ + diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningModel.java index 42d1fe578..b0bfe2aa1 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningModel.java @@ -151,6 +151,7 @@ import org.zkoss.zul.Vbox; /** * @author Óscar González Fernández * @author Manuel Rego Casasnovas + * @author Lorenzo Tilve Álvaro */ @Component @Scope(BeanDefinition.SCOPE_PROTOTYPE) @@ -709,24 +710,26 @@ public class OrderPlanningModel implements IOrderPlanningModel { configuration.setSecondLevelModificators(SeveralModificators .create(BankHolidaysMarker.create(orderReloaded .getCalendar()), - createDeadlineShower(orderReloaded.getDeadline()))); + createStartAndDeadlineMarker(orderReloaded))); } else { configuration.setSecondLevelModificators(BankHolidaysMarker.create(orderReloaded.getCalendar())); } } - private IDetailItemModificator createDeadlineShower(Date orderDeadline) { - final DateTime deadline = new DateTime(orderDeadline); - IDetailItemModificator deadlineMarker = new IDetailItemModificator() { + private IDetailItemModificator createStartAndDeadlineMarker(Order order) { + final DateTime deadline = new DateTime(order.getDeadline()); + final DateTime projectStart = new DateTime(order.getInitDate()); + IDetailItemModificator startAndDeadlineMarker = new IDetailItemModificator() { @Override public DetailItem applyModificationsTo(DetailItem item, ZoomLevel zoomlevel) { item.markDeadlineDay(deadline); + item.markProjectStart(projectStart); return item; } }; - return deadlineMarker; + return startAndDeadlineMarker; } private void selectTab(String tabName) { diff --git a/libreplan-webapp/src/main/webapp/planner/css/ganttzk.css b/libreplan-webapp/src/main/webapp/planner/css/ganttzk.css index 059d12e74..0b7713e16 100644 --- a/libreplan-webapp/src/main/webapp/planner/css/ganttzk.css +++ b/libreplan-webapp/src/main/webapp/planner/css/ganttzk.css @@ -424,6 +424,15 @@ div.box.limiting-unassigned { background-repeat: repeat-y; } +#watermark .timetracker_column_start { + background-image: url("../img/watermark_start.png"); + background-repeat: repeat-y; + width: 100%; + height: 100%; + float: left; +} + + #watermark .timetracker_column_deadline { background-image: url("../../zkau/web/ganttz/img/pixel.gif"); diff --git a/libreplan-webapp/src/main/webapp/planner/img/watermark_start.png b/libreplan-webapp/src/main/webapp/planner/img/watermark_start.png new file mode 100644 index 000000000..5932a216a Binary files /dev/null and b/libreplan-webapp/src/main/webapp/planner/img/watermark_start.png differ