diff --git a/Readme.md b/Readme.md index 81b365d..53b5b72 100644 --- a/Readme.md +++ b/Readme.md @@ -184,14 +184,20 @@ Smileys can be colored or white-black (can be set in configuration) ## Command button ## Todos - * New table: YEAR + +### New features + * Custom arrival target * Split to Maven modules * Junit, Mockito, etc. * Checkstyle * Sonarlint * Sonarqube - * Add SQLite support and store times of arrivals and departures and time of activities + +### Fix these known bugs + +* Clock, square and circle are grey, if visibility mode is weakly colored. +* Decreasing real time sometimes does not work correctly. ## For Developers diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/entity/Activity.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/entity/Activity.java index f370b1f..9be1a3b 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/entity/Activity.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/entity/Activity.java @@ -14,7 +14,7 @@ import lombok.ToString; @Getter @Setter @ToString -public class Activity { +public class Activity implements Comparable { private static final String SUBJECT_FIELD_SEPARATOR = " : "; @@ -28,6 +28,7 @@ public class Activity { private int spentHours; private int spentMinutes; private String flags; + private String nextActivityId; public String createSubject() { return ticket + SUBJECT_FIELD_SEPARATOR + name; @@ -56,6 +57,28 @@ public class Activity { set.remove(flag); this.flags = set.stream().collect(Collectors.joining(":")); } - + @Override + public int compareTo(Activity o) { + + int result = Integer.valueOf(year).compareTo(Integer.valueOf(o.year)); + if(result != 0) { + return result; + } + result = Integer.valueOf(month).compareTo(Integer.valueOf(o.month)); + if(result != 0) { + return result; + } + result = Integer.valueOf(day).compareTo(Integer.valueOf(o.day)); + if(result != 0) { + return result; + } + if(this.nextActivityId != null && this.nextActivityId.equals(o.getId())) { + return -1; + } + if(o.nextActivityId != null && o.nextActivityId.equals(o.getId())) { + return 1; + } + return 0; + } } diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/persistence/api/ActivityRepositoryApi.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/persistence/api/ActivityRepositoryApi.java index 39a1125..de73e36 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/persistence/api/ActivityRepositoryApi.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/persistence/api/ActivityRepositoryApi.java @@ -1,7 +1,6 @@ package org.nanoboot.utils.timecalc.persistence.api; import org.nanoboot.utils.timecalc.entity.Activity; -import org.nanoboot.utils.timecalc.entity.WorkingDay; import java.util.List; @@ -13,11 +12,13 @@ public interface ActivityRepositoryApi { void create(Activity activity); + Activity getLastActivityForDay(int year, int month, int day); + List list(int year, int month, int day); void update(Activity activity); - WorkingDay read(String id); + Activity read(String id); void delete(String id); diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/persistence/impl/sqlite/ActivityRepositorySQLiteImpl.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/persistence/impl/sqlite/ActivityRepositorySQLiteImpl.java index 0f6af11..5d2d855 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/persistence/impl/sqlite/ActivityRepositorySQLiteImpl.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/persistence/impl/sqlite/ActivityRepositorySQLiteImpl.java @@ -4,8 +4,8 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.sql.Types; import java.util.ArrayList; -import org.nanoboot.utils.timecalc.entity.WorkingDay; import org.nanoboot.utils.timecalc.persistence.api.ActivityRepositoryApi; import java.util.List; @@ -23,17 +23,15 @@ public class ActivityRepositorySQLiteImpl implements ActivityRepositoryApi { public ActivityRepositorySQLiteImpl(SqliteConnectionFactory sqliteConnectionFactory) { this.sqliteConnectionFactory = sqliteConnectionFactory; } - - + @Override public void create(Activity activity) { - - + Activity lastActivityForDay = getLastActivityForDay(activity.getYear(), activity.getMonth(), activity.getDay()); StringBuilder sb = new StringBuilder(); sb .append("INSERT INTO ") .append(ActivityTable.TABLE_NAME) - .append(" VALUES (?,?,?,?, ?,?,?,?,?)"); + .append(" VALUES (?,?,?,?, ?,?,?,?,?,?)"); String sql = sb.toString(); @@ -52,6 +50,7 @@ public class ActivityRepositorySQLiteImpl implements ActivityRepositoryApi { stmt.setInt(++i, activity.getSpentHours()); stmt.setInt(++i, activity.getSpentMinutes()); stmt.setString(++i, activity.getFlags()); + stmt.setNull(++i, Types.VARCHAR); // stmt.execute(); @@ -64,6 +63,11 @@ public class ActivityRepositorySQLiteImpl implements ActivityRepositoryApi { throw new TimeCalcException(ex); } + if(lastActivityForDay != null) { + lastActivityForDay.setNextActivityId(activity.getId()); + update(lastActivityForDay); + } + } @Override @@ -72,7 +76,7 @@ public class ActivityRepositorySQLiteImpl implements ActivityRepositoryApi { } @Override - public WorkingDay read(String id) { + public Activity read(String id) { throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody } @@ -244,6 +248,12 @@ public class ActivityRepositorySQLiteImpl implements ActivityRepositoryApi { return result; } + + @Override + public Activity getLastActivityForDay(int year, int month, int day) { + throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody + } + @Override public List list(int year, int month, int day) { throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/persistence/impl/sqlite/ActivityTable.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/persistence/impl/sqlite/ActivityTable.java index 32e25c1..736ea71 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/persistence/impl/sqlite/ActivityTable.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/persistence/impl/sqlite/ActivityTable.java @@ -37,6 +37,7 @@ class ActivityTable { public static final String SPENT_HOURS = "SPENT_HOURS"; public static final String SPENT_MINUTES = "SPENT_MINUTES"; public static final String FLAGS = "FLAGS"; + public static final String NEXT_ACTIVITY_ID = "NEXT_ACTIVITY_ID"; private ActivityTable() { //Not meant to be instantiated. diff --git a/modules/time-calc-app/src/main/resources/db_migrations/sqlite/timecalc/V000004__alter_table_activity_add_column_next_activity_id.sql b/modules/time-calc-app/src/main/resources/db_migrations/sqlite/timecalc/V000004__alter_table_activity_add_column_next_activity_id.sql new file mode 100644 index 0000000..aadc414 --- /dev/null +++ b/modules/time-calc-app/src/main/resources/db_migrations/sqlite/timecalc/V000004__alter_table_activity_add_column_next_activity_id.sql @@ -0,0 +1 @@ +ALTER TABLE "ACTIVITY" ADD COLUMN "NEXT_ACTIVITY_ID" TEXT; diff --git a/modules/time-calc-app/src/main/resources/help/Readme.md b/modules/time-calc-app/src/main/resources/help/Readme.md index 87651d8..7d39b87 100644 --- a/modules/time-calc-app/src/main/resources/help/Readme.md +++ b/modules/time-calc-app/src/main/resources/help/Readme.md @@ -184,13 +184,20 @@ Smileys can be colored or white-black (can be set in configuration) ## Command button ## Todos -* New table: YEAR + +### New features + +* Custom arrival target * Split to Maven modules * Junit, Mockito, etc. * Checkstyle * Sonarlint * Sonarqube -* Add SQLite support and store times of arrivals and departures and time of activities + +### Fix these known bugs + +* Clock, square and circle are grey, if visibility mode is weakly colored. +* Decreasing real time sometimes does not work correctly. ## For Developers