mirror of
https://github.com/robertvokac/time-calc.git
synced 2025-03-25 07:27:49 +01:00
Added several improvements, changes and bug fixes
This commit is contained in:
parent
95b4888ba9
commit
8787ba9551
@ -162,6 +162,7 @@ Smileys can be colored or white-black (can be set in configuration)
|
|||||||
* L - hide or show progress circle
|
* L - hide or show progress circle
|
||||||
* M - hide or show walking human
|
* M - hide or show walking human
|
||||||
* Y - hide or show smileys
|
* Y - hide or show smileys
|
||||||
|
* Z - set forget overtime
|
||||||
* LEFT - switch to previous profile
|
* LEFT - switch to previous profile
|
||||||
* RIGHT - switch to next profile
|
* RIGHT - switch to next profile
|
||||||
* K - hide or show clock
|
* K - hide or show clock
|
||||||
|
@ -10,6 +10,7 @@ import org.nanoboot.utils.timecalc.utils.common.TTime;
|
|||||||
import org.nanoboot.utils.timecalc.utils.common.Utils;
|
import org.nanoboot.utils.timecalc.utils.common.Utils;
|
||||||
import org.nanoboot.utils.timecalc.utils.property.IntegerProperty;
|
import org.nanoboot.utils.timecalc.utils.property.IntegerProperty;
|
||||||
|
|
||||||
|
import javax.swing.JOptionPane;
|
||||||
import java.awt.event.KeyAdapter;
|
import java.awt.event.KeyAdapter;
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
@ -567,6 +568,36 @@ public class TimeCalcKeyAdapter extends KeyAdapter {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case KeyEvent.VK_Z: {
|
||||||
|
String newForgetOvertime = (String) JOptionPane.showInputDialog(
|
||||||
|
null,
|
||||||
|
"Set new forget overtime. Current value is: " + mainWindow.getForgetOvertime(),
|
||||||
|
"New forget overtime",
|
||||||
|
JOptionPane.PLAIN_MESSAGE,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
mainWindow.getForgetOvertime()
|
||||||
|
);
|
||||||
|
int newForgetOvertimeInt = -1;
|
||||||
|
if(newForgetOvertime != null) {
|
||||||
|
if(newForgetOvertime.contains(":")) {
|
||||||
|
newForgetOvertimeInt = new TTime(newForgetOvertime).toTotalMilliseconds() / 1000 / 60;
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
newForgetOvertimeInt =
|
||||||
|
Integer.parseInt(newForgetOvertime);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Utils.showNotification(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(newForgetOvertimeInt >= 0) {
|
||||||
|
mainWindow.setForgetOvertime(newForgetOvertimeInt);
|
||||||
|
} else {
|
||||||
|
Utils.showNotification("Error:Forget overtime must not be less than zero.");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
if (!numberKeyWasPressed) {
|
if (!numberKeyWasPressed) {
|
||||||
Utils.showNotification(
|
Utils.showNotification(
|
||||||
|
@ -41,6 +41,7 @@ public class WorkingDay {
|
|||||||
private int pauseTimeInMinutes;
|
private int pauseTimeInMinutes;
|
||||||
private String note;
|
private String note;
|
||||||
private boolean timeOff;
|
private boolean timeOff;
|
||||||
|
private int forgetOvertime;
|
||||||
|
|
||||||
public boolean isThisDayTimeOff() {
|
public boolean isThisDayTimeOff() {
|
||||||
return timeOff || this.note.equals(NODATA);
|
return timeOff || this.note.equals(NODATA);
|
||||||
|
@ -198,28 +198,29 @@ public class WorkingDayForStats extends WorkingDay {
|
|||||||
return acd;
|
return acd;
|
||||||
}
|
}
|
||||||
|
|
||||||
public WorkingDayForStats(WorkingDay workingDay) {
|
public WorkingDayForStats(WorkingDay wd) {
|
||||||
this(workingDay.getId(),
|
this(wd.getId(),
|
||||||
workingDay.getYear(),
|
wd.getYear(),
|
||||||
workingDay.getMonth(),
|
wd.getMonth(),
|
||||||
workingDay.getDay(),
|
wd.getDay(),
|
||||||
workingDay.getArrivalHour(),
|
wd.getArrivalHour(),
|
||||||
workingDay.getArrivalMinute(),
|
wd.getArrivalMinute(),
|
||||||
workingDay.getOvertimeHour(),
|
wd.getOvertimeHour(),
|
||||||
workingDay.getOvertimeMinute(),
|
wd.getOvertimeMinute(),
|
||||||
workingDay.getWorkingTimeInMinutes(),
|
wd.getWorkingTimeInMinutes(),
|
||||||
workingDay.getPauseTimeInMinutes(),
|
wd.getPauseTimeInMinutes(),
|
||||||
workingDay.getNote(),
|
wd.getNote(),
|
||||||
workingDay.isTimeOff());
|
wd.isTimeOff(),
|
||||||
|
wd.getForgetOvertime());
|
||||||
}
|
}
|
||||||
|
|
||||||
public WorkingDayForStats(String id, int year, int month, int day,
|
public WorkingDayForStats(String id, int year, int month, int day,
|
||||||
int arrivalHour, int arrivalMinute, int overtimeHour,
|
int arrivalHour, int arrivalMinute, int overtimeHour,
|
||||||
int overtimeMinute, int workingTimeInMinutes,
|
int overtimeMinute, int workingTimeInMinutes,
|
||||||
int pauseTimeInMinutes, String note, boolean timeOff) {
|
int pauseTimeInMinutes, String note, boolean timeOff, int forgetOvertime) {
|
||||||
super(id, year, month, day, arrivalHour, arrivalMinute, overtimeHour,
|
super(id, year, month, day, arrivalHour, arrivalMinute, overtimeHour,
|
||||||
overtimeMinute, workingTimeInMinutes, pauseTimeInMinutes, note,
|
overtimeMinute, workingTimeInMinutes, pauseTimeInMinutes, note,
|
||||||
timeOff);
|
timeOff, forgetOvertime);
|
||||||
this.arrival = this.isThisDayTimeOff() ? null :
|
this.arrival = this.isThisDayTimeOff() ? null :
|
||||||
new TTime(arrivalHour, arrivalMinute);
|
new TTime(arrivalHour, arrivalMinute);
|
||||||
this.overtime = this.isThisDayTimeOff() ? null :
|
this.overtime = this.isThisDayTimeOff() ? null :
|
||||||
|
@ -35,7 +35,7 @@ public class WorkingDayRepositorySQLiteImpl implements WorkingDayRepositoryApi {
|
|||||||
sb
|
sb
|
||||||
.append("INSERT INTO ")
|
.append("INSERT INTO ")
|
||||||
.append(WorkingDayTable.TABLE_NAME)
|
.append(WorkingDayTable.TABLE_NAME)
|
||||||
.append(" VALUES (?,?,?,?, ?,?,?,?, ?,?,?,?)");
|
.append(" VALUES (?,?,?,?, ?,?,?,?, ?,?,?,?,?)");
|
||||||
|
|
||||||
String sql = sb.toString();
|
String sql = sb.toString();
|
||||||
|
|
||||||
@ -57,6 +57,7 @@ public class WorkingDayRepositorySQLiteImpl implements WorkingDayRepositoryApi {
|
|||||||
stmt.setInt(++i, workingDay.getPauseTimeInMinutes());
|
stmt.setInt(++i, workingDay.getPauseTimeInMinutes());
|
||||||
stmt.setString(++i, workingDay.getNote());
|
stmt.setString(++i, workingDay.getNote());
|
||||||
stmt.setInt(++i, workingDay.isTimeOff() ? 1 : 0);
|
stmt.setInt(++i, workingDay.isTimeOff() ? 1 : 0);
|
||||||
|
stmt.setInt(++i, workingDay.getForgetOvertime());
|
||||||
|
|
||||||
//
|
//
|
||||||
stmt.execute();
|
stmt.execute();
|
||||||
@ -154,7 +155,8 @@ public class WorkingDayRepositorySQLiteImpl implements WorkingDayRepositoryApi {
|
|||||||
.append(WorkingDayTable.WORKING_TIME_IN_MINUTES).append("=?, ")
|
.append(WorkingDayTable.WORKING_TIME_IN_MINUTES).append("=?, ")
|
||||||
.append(WorkingDayTable.PAUSE_TIME_IN_MINUTES).append("=?, ")
|
.append(WorkingDayTable.PAUSE_TIME_IN_MINUTES).append("=?, ")
|
||||||
.append(WorkingDayTable.NOTE).append("=?, ")
|
.append(WorkingDayTable.NOTE).append("=?, ")
|
||||||
.append(WorkingDayTable.TIME_OFF).append("=? ")
|
.append(WorkingDayTable.TIME_OFF).append("=?, ")
|
||||||
|
.append(WorkingDayTable.FORGET_OVERTIME).append("=? ")
|
||||||
.append(" WHERE ").append(
|
.append(" WHERE ").append(
|
||||||
WorkingDayTable.ID).append("=?");
|
WorkingDayTable.ID).append("=?");
|
||||||
|
|
||||||
@ -171,6 +173,7 @@ public class WorkingDayRepositorySQLiteImpl implements WorkingDayRepositoryApi {
|
|||||||
stmt.setInt(++i, workingDay.getPauseTimeInMinutes());
|
stmt.setInt(++i, workingDay.getPauseTimeInMinutes());
|
||||||
stmt.setString(++i, workingDay.getNote());
|
stmt.setString(++i, workingDay.getNote());
|
||||||
stmt.setInt(++i, workingDay.isTimeOff() ? 1 : 0);
|
stmt.setInt(++i, workingDay.isTimeOff() ? 1 : 0);
|
||||||
|
stmt.setInt(++i, workingDay.getForgetOvertime());
|
||||||
|
|
||||||
stmt.setString(++i, workingDay.getId());
|
stmt.setString(++i, workingDay.getId());
|
||||||
|
|
||||||
@ -204,7 +207,8 @@ public class WorkingDayRepositorySQLiteImpl implements WorkingDayRepositoryApi {
|
|||||||
rs.getInt(WorkingDayTable.WORKING_TIME_IN_MINUTES),
|
rs.getInt(WorkingDayTable.WORKING_TIME_IN_MINUTES),
|
||||||
rs.getInt(WorkingDayTable.PAUSE_TIME_IN_MINUTES),
|
rs.getInt(WorkingDayTable.PAUSE_TIME_IN_MINUTES),
|
||||||
rs.getString(WorkingDayTable.NOTE),
|
rs.getString(WorkingDayTable.NOTE),
|
||||||
rs.getInt(WorkingDayTable.TIME_OFF) != 0
|
rs.getInt(WorkingDayTable.TIME_OFF) != 0,
|
||||||
|
rs.getInt(WorkingDayTable.FORGET_OVERTIME)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -285,7 +289,7 @@ public class WorkingDayRepositorySQLiteImpl implements WorkingDayRepositoryApi {
|
|||||||
System.out.println("#"+year+month+day);
|
System.out.println("#"+year+month+day);
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb
|
sb
|
||||||
.append("SELECT (sum(OVERTIME_HOUR)*60 + sum(OVERTIME_MINUTE)) as total_overtime FROM ")
|
.append("SELECT (sum(OVERTIME_HOUR)*60 + sum(OVERTIME_MINUTE) - sum(FORGET_OVERTIME)) as total_overtime FROM ")
|
||||||
.append(WorkingDayTable.TABLE_NAME)
|
.append(WorkingDayTable.TABLE_NAME)
|
||||||
.append(" WHERE ")
|
.append(" WHERE ")
|
||||||
.append(WorkingDayTable.YEAR).append(" * 10000 + ")
|
.append(WorkingDayTable.YEAR).append(" * 10000 + ")
|
||||||
|
@ -39,6 +39,7 @@ public class WorkingDayTable {
|
|||||||
public static final String PAUSE_TIME_IN_MINUTES = "PAUSE_TIME_IN_MINUTES";
|
public static final String PAUSE_TIME_IN_MINUTES = "PAUSE_TIME_IN_MINUTES";
|
||||||
public static final String NOTE = "NOTE";
|
public static final String NOTE = "NOTE";
|
||||||
public static final String TIME_OFF = "TIME_OFF";
|
public static final String TIME_OFF = "TIME_OFF";
|
||||||
|
public static final String FORGET_OVERTIME = "FORGET_OVERTIME";
|
||||||
|
|
||||||
private WorkingDayTable() {
|
private WorkingDayTable() {
|
||||||
//Not meant to be instantiated.
|
//Not meant to be instantiated.
|
||||||
|
@ -23,7 +23,7 @@ public class ActivitiesWindow extends TWindow {
|
|||||||
private final Map<String, YearPanel> years;
|
private final Map<String, YearPanel> years;
|
||||||
|
|
||||||
public ActivitiesWindow(ActivityRepositoryApi activityRepositoryApiIn, Time time) {
|
public ActivitiesWindow(ActivityRepositoryApi activityRepositoryApiIn, Time time) {
|
||||||
setSize(1200, 800);
|
setSize(1600, 800);
|
||||||
setTitle("Activities");
|
setTitle("Activities");
|
||||||
this.activityRepository = activityRepositoryApiIn;
|
this.activityRepository = activityRepositoryApiIn;
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ public class ActivitiesWindow extends TWindow {
|
|||||||
add(exitButton);
|
add(exitButton);
|
||||||
exitButton.addActionListener(e -> activitiesWindow.setVisible(false));
|
exitButton.addActionListener(e -> activitiesWindow.setVisible(false));
|
||||||
|
|
||||||
tp.setBounds(addYearButton.getX(), addYearButton.getY() + addYearButton.getHeight() + SwingUtils.MARGIN, 1180, 600);
|
tp.setBounds(addYearButton.getX(), addYearButton.getY() + addYearButton.getHeight() + SwingUtils.MARGIN, 1500, 750);
|
||||||
yearsList.forEach(y -> {
|
yearsList.forEach(y -> {
|
||||||
final YearPanel yearPanel = new YearPanel(y, activityRepository);
|
final YearPanel yearPanel = new YearPanel(y, activityRepository);
|
||||||
tp.add(y, yearPanel);
|
tp.add(y, yearPanel);
|
||||||
|
@ -0,0 +1,95 @@
|
|||||||
|
package org.nanoboot.utils.timecalc.swing.common;
|
||||||
|
|
||||||
|
import org.nanoboot.utils.timecalc.entity.Activity;
|
||||||
|
import org.nanoboot.utils.timecalc.persistence.api.ActivityRepositoryApi;
|
||||||
|
|
||||||
|
import javax.swing.BorderFactory;
|
||||||
|
import javax.swing.JOptionPane;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Dimension;
|
||||||
|
import java.awt.FlowLayout;
|
||||||
|
import java.awt.Font;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.awt.event.MouseListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert
|
||||||
|
* @since 13.03.2024
|
||||||
|
*/
|
||||||
|
public class ActivityHeader extends JPanel {
|
||||||
|
private static final Font FONT = new Font("sans", Font.BOLD, 12);
|
||||||
|
private TTextField name = new TTextField("Name");
|
||||||
|
private TTextField comment = new TTextField("Comment");
|
||||||
|
private TTextField ticket = new TTextField("Ticket");
|
||||||
|
private TTextField spentTime = new TTextField("Spent time");
|
||||||
|
|
||||||
|
private TTextField flags = new TTextField("Flags");
|
||||||
|
private TTextField subject = new TTextField("Subject");
|
||||||
|
private TTextField totalComment = new TTextField("Total comment");
|
||||||
|
private TTextField today = new TTextField("Today");
|
||||||
|
private TTextField remains = new TTextField("Remains");
|
||||||
|
|
||||||
|
public ActivityHeader() {
|
||||||
|
this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
|
||||||
|
|
||||||
|
add(name);
|
||||||
|
add(comment);
|
||||||
|
add(ticket);
|
||||||
|
add(spentTime);
|
||||||
|
|
||||||
|
add(flags);
|
||||||
|
add(subject);
|
||||||
|
add(totalComment);
|
||||||
|
add(today);
|
||||||
|
add(remains);
|
||||||
|
|
||||||
|
name.setPreferredSize(new Dimension(200, 40));
|
||||||
|
comment.setPreferredSize(new Dimension(200, 40));
|
||||||
|
ticket.setPreferredSize(new Dimension(80, 40));
|
||||||
|
spentTime.setPreferredSize(new Dimension(80, 40));
|
||||||
|
|
||||||
|
flags.setPreferredSize(new Dimension(100, 40));
|
||||||
|
subject.setPreferredSize(new Dimension(100, 40));
|
||||||
|
totalComment.setPreferredSize(new Dimension(100, 40));
|
||||||
|
today.setPreferredSize(new Dimension(80, 40));
|
||||||
|
remains.setPreferredSize(new Dimension(80, 40));
|
||||||
|
|
||||||
|
name.setEditable(false);
|
||||||
|
comment.setEditable(false);
|
||||||
|
ticket.setEditable(false);
|
||||||
|
spentTime.setEditable(false);
|
||||||
|
|
||||||
|
flags.setEditable(false);
|
||||||
|
subject.setEditable(false);
|
||||||
|
totalComment.setEditable(false);
|
||||||
|
today.setEditable(false);
|
||||||
|
remains.setEditable(false);
|
||||||
|
|
||||||
|
name.setFont(FONT);
|
||||||
|
comment.setFont(FONT);
|
||||||
|
ticket.setFont(FONT);
|
||||||
|
spentTime.setFont(FONT);
|
||||||
|
|
||||||
|
flags.setFont(FONT);
|
||||||
|
subject.setFont(FONT);
|
||||||
|
totalComment.setFont(FONT);
|
||||||
|
today.setFont(FONT);
|
||||||
|
remains.setFont(FONT);
|
||||||
|
|
||||||
|
name.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||||
|
comment.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||||
|
ticket.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||||
|
spentTime.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||||
|
|
||||||
|
flags.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||||
|
subject.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||||
|
totalComment.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||||
|
today.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||||
|
remains.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||||
|
|
||||||
|
//this.setBorder(BorderFactory.createLineBorder(Color.ORANGE, 1));
|
||||||
|
setAlignmentX(LEFT_ALIGNMENT);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -17,45 +17,70 @@ import java.awt.event.MouseListener;
|
|||||||
* @since 13.03.2024
|
* @since 13.03.2024
|
||||||
*/
|
*/
|
||||||
public class ActivityPanel extends JPanel {
|
public class ActivityPanel extends JPanel {
|
||||||
|
|
||||||
private final ActivityRepositoryApi activityRepository;
|
private final ActivityRepositoryApi activityRepository;
|
||||||
private final Activity activity;
|
private final Activity activity;
|
||||||
private TTextField name = new TTextField("");
|
private TTextField name = new TTextField("");
|
||||||
private TTextField comment = new TTextField("");
|
private TTextField comment = new TTextField("");
|
||||||
private TTextField ticket = new TTextField("");
|
private TTextField ticket = new TTextField("");
|
||||||
private TTextField spentHours = new TTextField("");
|
private TTextField spentTime = new TTextField("00:00");
|
||||||
private TTextField spentMinutes = new TTextField("");
|
|
||||||
private TTextField flags = new TTextField("");
|
|
||||||
private String nextActivityId;
|
|
||||||
|
|
||||||
public ActivityPanel(ActivityRepositoryApi activityRepository, Activity activity) {
|
private TTextField flags = new TTextField("Flags");
|
||||||
|
private TTextField subject = new TTextField("");
|
||||||
|
private TTextField totalComment = new TTextField("");
|
||||||
|
private TTextField today = new TTextField("00:00");
|
||||||
|
private TTextField remains = new TTextField("00:00");
|
||||||
|
|
||||||
|
public ActivityPanel(ActivityRepositoryApi activityRepository,
|
||||||
|
Activity activity) {
|
||||||
this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
|
this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
|
||||||
this.activity = activity;
|
this.activity = activity;
|
||||||
|
|
||||||
add(name);
|
add(name);
|
||||||
add(comment);
|
add(comment);
|
||||||
add(ticket);
|
add(ticket);
|
||||||
add(spentHours);
|
add(spentTime);
|
||||||
add(spentMinutes);
|
|
||||||
add(flags);
|
add(flags);
|
||||||
name.setPreferredSize(new Dimension(400, 40));
|
add(subject);
|
||||||
comment.setPreferredSize(new Dimension(400, 40));
|
add(totalComment);
|
||||||
|
add(today);
|
||||||
|
add(remains);
|
||||||
|
|
||||||
|
name.setPreferredSize(new Dimension(200, 40));
|
||||||
|
comment.setPreferredSize(new Dimension(200, 40));
|
||||||
ticket.setPreferredSize(new Dimension(80, 40));
|
ticket.setPreferredSize(new Dimension(80, 40));
|
||||||
spentHours.setPreferredSize(new Dimension(25, 40));
|
spentTime.setPreferredSize(new Dimension(80, 40));
|
||||||
spentMinutes.setPreferredSize(new Dimension(25, 40));
|
|
||||||
flags.setPreferredSize(new Dimension(100, 40));
|
flags.setPreferredSize(new Dimension(100, 40));
|
||||||
this.setPreferredSize(new Dimension(getWidth(), 40));
|
subject.setPreferredSize(new Dimension(100, 40));
|
||||||
|
totalComment.setPreferredSize(new Dimension(100, 40));
|
||||||
|
today.setPreferredSize(new Dimension(80, 40));
|
||||||
|
remains.setPreferredSize(new Dimension(80, 40));
|
||||||
|
|
||||||
|
this.setPreferredSize(new Dimension(getWidth(), 40));
|
||||||
|
|
||||||
name.setEditable(false);
|
name.setEditable(false);
|
||||||
comment.setEditable(false);
|
comment.setEditable(false);
|
||||||
ticket.setEditable(false);
|
ticket.setEditable(false);
|
||||||
spentHours.setEditable(false);
|
spentTime.setEditable(false);
|
||||||
spentMinutes.setEditable(false);
|
|
||||||
flags.setEditable(false);
|
flags.setEditable(false);
|
||||||
|
subject.setEditable(false);
|
||||||
|
totalComment.setEditable(false);
|
||||||
|
today.setEditable(false);
|
||||||
|
remains.setEditable(false);
|
||||||
|
|
||||||
name.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
name.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||||
comment.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
comment.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||||
ticket.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
ticket.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||||
spentHours.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
spentTime.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||||
spentMinutes.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
|
||||||
flags.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
flags.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||||
|
subject.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||||
|
totalComment.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||||
|
today.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||||
|
remains.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
|
||||||
|
|
||||||
name.addMouseListener(new MouseListener() {
|
name.addMouseListener(new MouseListener() {
|
||||||
@Override
|
@Override
|
||||||
@ -69,7 +94,7 @@ this.setPreferredSize(new Dimension(getWidth(), 40));
|
|||||||
null,
|
null,
|
||||||
name.getText()
|
name.getText()
|
||||||
);
|
);
|
||||||
if(result != null) {
|
if (result != null) {
|
||||||
activity.setName(result);
|
activity.setName(result);
|
||||||
activityRepository.update(activity);
|
activityRepository.update(activity);
|
||||||
name.setText(result);
|
name.setText(result);
|
||||||
@ -99,11 +124,12 @@ this.setPreferredSize(new Dimension(getWidth(), 40));
|
|||||||
name.setText(activity.getName());
|
name.setText(activity.getName());
|
||||||
comment.setText(activity.getComment());
|
comment.setText(activity.getComment());
|
||||||
ticket.setText(activity.getTicket());
|
ticket.setText(activity.getTicket());
|
||||||
spentHours.setText(String.valueOf(activity.getSpentHours()));
|
spentTime.setText((activity.getSpentHours() < 10 ? "0" : "") + activity
|
||||||
spentMinutes.setText(String.valueOf(activity.getSpentMinutes()));
|
.getSpentHours() + ":" + (activity.getSpentMinutes() < 10 ? "0" :
|
||||||
|
"") + activity.getSpentMinutes());
|
||||||
flags.setText(activity.getFlags());
|
flags.setText(activity.getFlags());
|
||||||
this.activityRepository = activityRepository;
|
this.activityRepository = activityRepository;
|
||||||
this.setBorder(BorderFactory.createLineBorder(Color.ORANGE, 1));
|
//this.setBorder(BorderFactory.createLineBorder(Color.ORANGE, 1));
|
||||||
setAlignmentX(LEFT_ALIGNMENT);
|
setAlignmentX(LEFT_ALIGNMENT);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,11 +3,9 @@ package org.nanoboot.utils.timecalc.swing.common;
|
|||||||
import org.nanoboot.utils.timecalc.entity.Activity;
|
import org.nanoboot.utils.timecalc.entity.Activity;
|
||||||
import org.nanoboot.utils.timecalc.persistence.api.ActivityRepositoryApi;
|
import org.nanoboot.utils.timecalc.persistence.api.ActivityRepositoryApi;
|
||||||
|
|
||||||
import javax.swing.BorderFactory;
|
|
||||||
import javax.swing.BoxLayout;
|
import javax.swing.BoxLayout;
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import java.awt.Color;
|
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.FlowLayout;
|
import java.awt.FlowLayout;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -35,7 +33,7 @@ public class DayPanel extends JPanel {
|
|||||||
this.month = monthIn;
|
this.month = monthIn;
|
||||||
this.day = dayIn;
|
this.day = dayIn;
|
||||||
this.activityRepository = activityRepository;
|
this.activityRepository = activityRepository;
|
||||||
setSize(1050, 600);
|
setSize(1350, 600);
|
||||||
|
|
||||||
this.setLayout(null);
|
this.setLayout(null);
|
||||||
this.loadButton = new JButton("Load");
|
this.loadButton = new JButton("Load");
|
||||||
@ -64,7 +62,7 @@ public class DayPanel extends JPanel {
|
|||||||
this.setLayout(boxLayout);
|
this.setLayout(boxLayout);
|
||||||
|
|
||||||
JPanel buttons = new JPanel();
|
JPanel buttons = new JPanel();
|
||||||
buttons.setBorder(BorderFactory.createLineBorder(Color.BLUE, 1));
|
//buttons.setBorder(BorderFactory.createLineBorder(Color.BLUE, 1));
|
||||||
buttons.setLayout(new FlowLayout(FlowLayout.LEFT));
|
buttons.setLayout(new FlowLayout(FlowLayout.LEFT));
|
||||||
buttons.setAlignmentX(LEFT_ALIGNMENT);
|
buttons.setAlignmentX(LEFT_ALIGNMENT);
|
||||||
JButton newButton = new JButton("New");
|
JButton newButton = new JButton("New");
|
||||||
@ -72,15 +70,30 @@ public class DayPanel extends JPanel {
|
|||||||
buttons.add(newButton);
|
buttons.add(newButton);
|
||||||
buttons.add(pasteButton);
|
buttons.add(pasteButton);
|
||||||
add(buttons);
|
add(buttons);
|
||||||
|
ActivityHeader activityHeader = new ActivityHeader();
|
||||||
|
add(activityHeader);
|
||||||
|
activityHeader.setMaximumSize(new Dimension(1200, 40));
|
||||||
buttons.setMaximumSize(new Dimension(1000, 40));
|
buttons.setMaximumSize(new Dimension(1000, 40));
|
||||||
|
for (Activity a : activityRepository.list(
|
||||||
|
Integer.valueOf(year),
|
||||||
|
Integer.valueOf(month),
|
||||||
|
Integer.valueOf(day))) {
|
||||||
|
|
||||||
|
ActivityPanel comp =
|
||||||
|
new ActivityPanel(activityRepository, a);
|
||||||
|
comp.setMaximumSize(new Dimension(1200, 40));
|
||||||
|
add(comp);
|
||||||
|
|
||||||
|
}
|
||||||
|
revalidate();
|
||||||
newButton.addActionListener(e-> {
|
newButton.addActionListener(e-> {
|
||||||
Activity newActivity = new Activity(UUID.randomUUID().toString(), Integer.valueOf(year), Integer.valueOf(month), Integer.valueOf(day), "", "", "", 0, 0, "", null);
|
Activity newActivity = new Activity(UUID.randomUUID().toString(), Integer.valueOf(year), Integer.valueOf(month), Integer.valueOf(day), "", "", "", 0, 0, "", null);
|
||||||
ActivityPanel comp =
|
ActivityPanel comp =
|
||||||
new ActivityPanel(activityRepository, newActivity);
|
new ActivityPanel(activityRepository, newActivity);
|
||||||
comp.setMaximumSize(new Dimension(1000, 40));
|
comp.setMaximumSize(new Dimension(1200, 40));
|
||||||
add(comp);
|
add(comp);
|
||||||
activityRepository.create(newActivity);
|
activityRepository.create(newActivity);
|
||||||
repaint();
|
revalidate();
|
||||||
});
|
});
|
||||||
// for (int i = 0; i < 10; i++) {
|
// for (int i = 0; i < 10; i++) {
|
||||||
// add(new ActivityPanel(activityRepository,
|
// add(new ActivityPanel(activityRepository,
|
||||||
|
@ -46,6 +46,7 @@ import org.nanoboot.utils.timecalc.entity.WorkingDay;
|
|||||||
import org.nanoboot.utils.timecalc.persistence.api.ActivityRepositoryApi;
|
import org.nanoboot.utils.timecalc.persistence.api.ActivityRepositoryApi;
|
||||||
import org.nanoboot.utils.timecalc.persistence.impl.sqlite.ActivityRepositorySQLiteImpl;
|
import org.nanoboot.utils.timecalc.persistence.impl.sqlite.ActivityRepositorySQLiteImpl;
|
||||||
import org.nanoboot.utils.timecalc.persistence.impl.sqlite.WorkingDayRepositorySQLiteImpl;
|
import org.nanoboot.utils.timecalc.persistence.impl.sqlite.WorkingDayRepositorySQLiteImpl;
|
||||||
|
import org.nanoboot.utils.timecalc.utils.property.IntegerProperty;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Robert Vokac
|
* @author Robert Vokac
|
||||||
@ -87,6 +88,8 @@ public class MainWindow extends TWindow {
|
|||||||
private boolean stopBeforeEnd = false;
|
private boolean stopBeforeEnd = false;
|
||||||
private final WorkingDayRepositorySQLiteImpl workingDayRepository;
|
private final WorkingDayRepositorySQLiteImpl workingDayRepository;
|
||||||
private final ActivityRepositoryApi activityRepository;
|
private final ActivityRepositoryApi activityRepository;
|
||||||
|
|
||||||
|
private final IntegerProperty forgetOvertimeProperty = new IntegerProperty("forgetOvertimeProperty", 0);
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -660,6 +663,7 @@ public class MainWindow extends TWindow {
|
|||||||
workingDay.setPauseTimeInMinutes(pause_.toTotalMilliseconds() / 1000 / 60);
|
workingDay.setPauseTimeInMinutes(pause_.toTotalMilliseconds() / 1000 / 60);
|
||||||
workingDay.setNote(noteTextField.getText());
|
workingDay.setNote(noteTextField.getText());
|
||||||
workingDay.setTimeOff(timeOffCheckBox.isSelected());
|
workingDay.setTimeOff(timeOffCheckBox.isSelected());
|
||||||
|
workingDay.setForgetOvertime(forgetOvertimeProperty.getValue());
|
||||||
workingDayRepository.update(workingDay);
|
workingDayRepository.update(workingDay);
|
||||||
|
|
||||||
if(workingDaysWindow != null) {
|
if(workingDaysWindow != null) {
|
||||||
@ -674,6 +678,7 @@ public class MainWindow extends TWindow {
|
|||||||
pauseTimeTextField.valueProperty.setValue(TTime.ofMilliseconds(wd.getPauseTimeInMinutes() * 60 * 1000).toString().substring(0, 5));
|
pauseTimeTextField.valueProperty.setValue(TTime.ofMilliseconds(wd.getPauseTimeInMinutes() * 60 * 1000).toString().substring(0, 5));
|
||||||
noteTextField.valueProperty.setValue(wd.getNote());
|
noteTextField.valueProperty.setValue(wd.getNote());
|
||||||
timeOffCheckBox.setSelected(wd.isTimeOff());
|
timeOffCheckBox.setSelected(wd.isTimeOff());
|
||||||
|
forgetOvertimeProperty.setValue(wd.getForgetOvertime());
|
||||||
} else {
|
} else {
|
||||||
Calendar cal = time.asCalendar();
|
Calendar cal = time.asCalendar();
|
||||||
int year = cal.get(Calendar.YEAR);
|
int year = cal.get(Calendar.YEAR);
|
||||||
@ -1058,4 +1063,6 @@ public class MainWindow extends TWindow {
|
|||||||
public void doSaveButtonClick(){
|
public void doSaveButtonClick(){
|
||||||
this.saveButton.doClick();
|
this.saveButton.doClick();
|
||||||
}
|
}
|
||||||
|
public int getForgetOvertime() {return this.forgetOvertimeProperty.getValue();}
|
||||||
|
public void setForgetOvertime(int minutes) {this.forgetOvertimeProperty.setValue(minutes);}
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ public class MonthPanel extends JPanel {
|
|||||||
setLayout(null);
|
setLayout(null);
|
||||||
this.tp = new TTabbedPane();
|
this.tp = new TTabbedPane();
|
||||||
add(tp);
|
add(tp);
|
||||||
tp.setBounds(0, 0, 1100, 650);
|
tp.setBounds(0, 0, 1350, 650);
|
||||||
|
|
||||||
ChangeListener changeListener = new ChangeListener() {
|
ChangeListener changeListener = new ChangeListener() {
|
||||||
private boolean secondOrLaterChange = false;
|
private boolean secondOrLaterChange = false;
|
||||||
|
@ -334,7 +334,7 @@ public class WorkingDaysWindow extends TWindow {
|
|||||||
if (wd == null) {
|
if (wd == null) {
|
||||||
wd = new WorkingDay(WorkingDay.createId(year, month, day),
|
wd = new WorkingDay(WorkingDay.createId(year, month, day),
|
||||||
year, month, day, -1, -1, -1, -1, -1, -1,
|
year, month, day, -1, -1, -1, -1, -1, -1,
|
||||||
"Fictive day", true);
|
"Fictive day", true,0);
|
||||||
}
|
}
|
||||||
workingDaysList.add(wd);
|
workingDaysList.add(wd);
|
||||||
|
|
||||||
@ -389,15 +389,17 @@ public class WorkingDaysWindow extends TWindow {
|
|||||||
.substring(0, overtime.isNegative() ? 6 : 5));
|
.substring(0, overtime.isNegative() ? 6 : 5));
|
||||||
list2.add(TTime.ofMinutes(wdfs.getWorkingTimeInMinutes())
|
list2.add(TTime.ofMinutes(wdfs.getWorkingTimeInMinutes())
|
||||||
.toString().substring(0, 5));
|
.toString().substring(0, 5));
|
||||||
totalOvertime = totalOvertime + wdfs.getOvertimeHour() * 60 + wdfs.getOvertimeMinute();
|
totalOvertime = totalOvertime + wdfs.getOvertimeHour() * 60 + wdfs.getOvertimeMinute() - wdfs.getForgetOvertime();
|
||||||
list2.add(
|
list2.add(
|
||||||
TTime.ofMinutes(wdfs.getPauseTimeInMinutes()).toString()
|
TTime.ofMinutes(wdfs.getPauseTimeInMinutes()).toString()
|
||||||
.substring(0, 5));
|
.substring(0, 5));
|
||||||
}
|
}
|
||||||
list2.add(wdfs.getNote());
|
list2.add(wdfs.getNote());
|
||||||
list2.add(wdfs.isTimeOff() ? YES : NO);
|
list2.add(wdfs.isTimeOff() ? YES : NO);
|
||||||
|
TTime forgetOvertime = TTime.ofMinutes(wdfs.getForgetOvertime());
|
||||||
|
list2.add(forgetOvertime.toString().substring(0,5));
|
||||||
TTime totalOvertimeTTime = TTime.ofMinutes(totalOvertime);
|
TTime totalOvertimeTTime = TTime.ofMinutes(totalOvertime);
|
||||||
list2.add((totalOvertimeTTime.getHour() < 10 ? "0" : "") + totalOvertimeTTime.getHour() + ":" + (totalOvertimeTTime.getMinute() < 10 ? "0" : "") + totalOvertimeTTime.getMinute());
|
list2.add((totalOvertimeTTime.isNegative() ? "-" : "") + (totalOvertimeTTime.getHour() < 10 ? "0" : "") + totalOvertimeTTime.getHour() + ":" + (totalOvertimeTTime.getMinute() < 10 ? "0" : "") + totalOvertimeTTime.getMinute());
|
||||||
list2.add(TTime.ofMilliseconds(
|
list2.add(TTime.ofMilliseconds(
|
||||||
(int) (wdfs.getArrivalTimeMovingAverage7Days() * 60d * 60d * 1000d)).toString().substring(0, 8));
|
(int) (wdfs.getArrivalTimeMovingAverage7Days() * 60d * 60d * 1000d)).toString().substring(0, 8));
|
||||||
list2.add(TTime.ofMilliseconds(
|
list2.add(TTime.ofMilliseconds(
|
||||||
@ -421,7 +423,7 @@ public class WorkingDaysWindow extends TWindow {
|
|||||||
String[] columns =
|
String[] columns =
|
||||||
new String[] {"Day of Week", "Weekend", "Date", "Arrival",
|
new String[] {"Day of Week", "Weekend", "Date", "Arrival",
|
||||||
"Departure", "Overtime", "Working time", "Pause time",
|
"Departure", "Overtime", "Working time", "Pause time",
|
||||||
"Note", "Time off", "Total overtime", "Arrival MA7",
|
"Note", "Time off", "Forget overtime", "Total overtime", "Arrival MA7",
|
||||||
"Arrival MA14", "Arrival MA28", "Arrival MA56"};
|
"Arrival MA14", "Arrival MA28", "Arrival MA56"};
|
||||||
|
|
||||||
if (table != null) {
|
if (table != null) {
|
||||||
|
@ -26,7 +26,7 @@ public class YearPanel extends JPanel {
|
|||||||
setLayout(null);
|
setLayout(null);
|
||||||
this.tp = new TTabbedPane();
|
this.tp = new TTabbedPane();
|
||||||
add(tp);
|
add(tp);
|
||||||
tp.setBounds(0, 0, 1150, 700);
|
tp.setBounds(0, 0, 1350, 700);
|
||||||
|
|
||||||
ChangeListener changeListener = new ChangeListener() {
|
ChangeListener changeListener = new ChangeListener() {
|
||||||
private boolean secondOrLaterChange = false;
|
private boolean secondOrLaterChange = false;
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
ALTER TABLE "WORKING_DAY" ADD COLUMN "FORGET_OVERTIME" TEXT DEFAULT 0 NOT NULL;
|
@ -162,6 +162,7 @@ Smileys can be colored or white-black (can be set in configuration)
|
|||||||
* L - hide or show progress circle
|
* L - hide or show progress circle
|
||||||
* M - hide or show walking human
|
* M - hide or show walking human
|
||||||
* Y - hide or show smileys
|
* Y - hide or show smileys
|
||||||
|
* Z - set forget overtime
|
||||||
* LEFT - switch to previous profile
|
* LEFT - switch to previous profile
|
||||||
* RIGHT - switch to next profile
|
* RIGHT - switch to next profile
|
||||||
* K - hide or show clock
|
* K - hide or show clock
|
||||||
|
Loading…
x
Reference in New Issue
Block a user