File: Timesheet.cpp

package info (click to toggle)
charmtimetracker 1.12.0-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 3,340 kB
  • sloc: cpp: 19,176; xml: 284; python: 120; makefile: 14
file content (120 lines) | stat: -rw-r--r-- 3,481 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
  Timesheet.cpp

  This file is part of Charm, a task-based time tracking application.

  Copyright (C) 2014-2018 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com

  Author: Frank Osterfeld <frank.osterfeld@kdab.com>

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 2 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "Timesheet.h"

#include <QFileDialog>
#include <QMessageBox>
#include <QSettings>

#include "ViewHelpers.h"

#include "CharmCMake.h"

TimeSheetReport::TimeSheetReport(QWidget *parent)
    : ReportPreviewWindow(parent)
{
}

TimeSheetReport::~TimeSheetReport()
{
}

void TimeSheetReport::setReportProperties(
    const QDate &start, const QDate &end, TaskId rootTask, bool activeTasksOnly)
{
    m_start = start;
    m_end = end;
    m_rootTask = rootTask;
    m_activeTasksOnly = activeTasksOnly;
    update();
}

void TimeSheetReport::slotUpdate()
{
    update();
}

void TimeSheetReport::slotSaveToXml()
{
    // first, ask for a file name:
    QString filename = getFileName(tr("Charm reports (*.charmreport)"));
    if (filename.isEmpty())
        return;

    QFileInfo fileinfo(filename);
    if (fileinfo.suffix().isEmpty())
        filename += QLatin1String(".charmreport");

    QByteArray payload = saveToXml(IncludeTaskList);
    if (payload.isEmpty())
        return; // Error should have been already displayed by saveToXml()

    QFile file(filename);
    if (file.open(QIODevice::WriteOnly)) {
        file.write(payload);
    } else {
        QMessageBox::critical(this, tr("Error saving report"),
                              tr("Cannot write to selected location:\n%1").arg(file.errorString()));
    }
}

void TimeSheetReport::slotSaveToText()
{
    // first, ask for a file name:
    const QString filename = getFileName(QStringLiteral("Text files (*.txt)"));
    if (filename.isEmpty())
        return;

    QFile file(filename);
    if (!file.open(QIODevice::WriteOnly)) {
        QMessageBox::critical(this, tr("Error saving report"),
                              tr("Cannot write to selected location:\n%1")
                              .arg(file.errorString()));
        return;
    }
    file.write(saveToText());
    file.close();
}

QString TimeSheetReport::getFileName(const QString &filter)
{
    QSettings settings;
    QString path;
    if (settings.contains(MetaKey_ReportsRecentSavePath)) {
        path = settings.value(MetaKey_ReportsRecentSavePath).toString();
        QDir dir(path);
        if (!dir.exists()) path = QString();
    }
    // suggest file name:
    path += QDir::separator() + suggestedFileName();
    // ask:
    QString filename = QFileDialog::getSaveFileName(this, tr("Enter File Name"), path, filter);
    if (filename.isEmpty())
        return QString();
    QFileInfo fileinfo(filename);
    path = fileinfo.absolutePath();
    if (!path.isEmpty())
        settings.setValue(MetaKey_ReportsRecentSavePath, path);
    return filename;
}