You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
302 lines
6.3 KiB
C++
302 lines
6.3 KiB
C++
#include "czeitnachweis.h"
|
|
|
|
#include <QDebug>
|
|
|
|
|
|
cEntry::cEntry(entry type) :
|
|
m_type(type),
|
|
m_day(-1),
|
|
m_von(QTime()),
|
|
m_bis(QTime()),
|
|
m_urlaub(false)
|
|
{
|
|
}
|
|
|
|
void cEntry::setDay(const int& day)
|
|
{
|
|
m_day = day;
|
|
}
|
|
|
|
int cEntry::day()
|
|
{
|
|
return(m_day);
|
|
}
|
|
|
|
void cEntry::setVon(const QTime& time)
|
|
{
|
|
m_von = time;
|
|
}
|
|
|
|
QTime cEntry::von()
|
|
{
|
|
return(m_von);
|
|
}
|
|
|
|
void cEntry::setBis(const QTime& time)
|
|
{
|
|
m_bis = time;
|
|
}
|
|
|
|
QTime cEntry::bis()
|
|
{
|
|
return(m_bis);
|
|
}
|
|
|
|
void cEntry::setUrlaub(bool u)
|
|
{
|
|
m_urlaub = u;
|
|
}
|
|
|
|
bool cEntry::urlaub()
|
|
{
|
|
return(m_urlaub);
|
|
}
|
|
|
|
cEntry* cEntryList::add(cEntry::entry type)
|
|
{
|
|
cEntry* lpNew = new cEntry(type);
|
|
append(lpNew);
|
|
return(lpNew);
|
|
}
|
|
|
|
cZeitnachweis::cZeitnachweis(const QString& fileName, QObject *parent) :
|
|
QObject(parent),
|
|
m_gedrucktAm(QDate()),
|
|
m_mitarbeiterNummer(""),
|
|
m_mitarbeiterName(""),
|
|
m_azpRegel(""),
|
|
m_personalbereich(""),
|
|
m_kostenstelle(""),
|
|
m_von(QDate()),
|
|
m_bis(QDate()),
|
|
m_glzSaldoVorperiode(0),
|
|
m_glzSaldoAktPeriode(0),
|
|
m_uestLtDurchrechnungsz(0),
|
|
m_glzSaldoGesamt(0),
|
|
m_resturlaubstage(0),
|
|
m_angeordneteUest(0),
|
|
m_ersatzruhe(0),
|
|
m_monatssummeAnger(0),
|
|
m_reisezeiten(0)
|
|
{
|
|
loadFile(fileName);
|
|
}
|
|
|
|
cZeitnachweis::cZeitnachweis(const QByteArray& buffer, QObject *parent) :
|
|
QObject(parent),
|
|
m_gedrucktAm(QDate()),
|
|
m_mitarbeiterNummer(""),
|
|
m_mitarbeiterName(""),
|
|
m_azpRegel(""),
|
|
m_personalbereich(""),
|
|
m_kostenstelle(""),
|
|
m_von(QDate()),
|
|
m_bis(QDate()),
|
|
m_glzSaldoVorperiode(0),
|
|
m_glzSaldoAktPeriode(0),
|
|
m_uestLtDurchrechnungsz(0),
|
|
m_glzSaldoGesamt(0),
|
|
m_resturlaubstage(0),
|
|
m_angeordneteUest(0),
|
|
m_ersatzruhe(0),
|
|
m_monatssummeAnger(0),
|
|
m_reisezeiten(0)
|
|
{
|
|
loadBuffer(buffer);
|
|
}
|
|
|
|
|
|
void cZeitnachweis::setValues(const QDate& /*von*/, const QDate& /*bis*/, const int& day)
|
|
{
|
|
cEntry* lpEntry = m_entryList.add(cEntry::entry_normal);
|
|
lpEntry->setDay(day);
|
|
lpEntry->setUrlaub(true);
|
|
}
|
|
|
|
void cZeitnachweis::setValues(const QDate& /*von*/, const QDate& /*bis*/, const int& day, const QTime& start, const QTime& end)
|
|
{
|
|
cEntry* lpEntry = m_entryList.add(cEntry::entry_normal);
|
|
lpEntry->setDay(day);
|
|
lpEntry->setVon(start);
|
|
lpEntry->setBis(end);
|
|
}
|
|
|
|
bool cZeitnachweis::loadFile(const QString &fileName)
|
|
{
|
|
PdfMemDocument pdf(fileName.toStdWString().c_str());
|
|
if(!pdf.IsLoaded())
|
|
return(false);
|
|
|
|
return(loadPDF(pdf));
|
|
}
|
|
|
|
bool cZeitnachweis::loadBuffer(const QByteArray& buffer)
|
|
{
|
|
PdfMemDocument pdf;
|
|
|
|
pdf.LoadFromBuffer(buffer.data(), buffer.length());
|
|
|
|
if(!pdf.IsLoaded())
|
|
return(false);
|
|
|
|
return(loadPDF(pdf));
|
|
}
|
|
|
|
bool cZeitnachweis::loadPDF(const PdfMemDocument& pdfDocument)
|
|
{
|
|
qreal xPos = 0.0;
|
|
qreal yPos = 0.0;
|
|
qreal oldYPos = -1.0;
|
|
QStringList lines;
|
|
|
|
for(int pn = 0; pn < pdfDocument.GetPageCount();pn++)
|
|
{
|
|
PdfPage* page = pdfDocument.GetPage(pn);
|
|
|
|
PdfContentsTokenizer tok(page);
|
|
const char* token = nullptr;
|
|
PoDoFo::PdfVariant var;
|
|
PoDoFo::EPdfContentsType type;
|
|
|
|
while(tok.ReadNext(type, token, var))
|
|
{
|
|
if(token)
|
|
{
|
|
if(strstr(token, "BT"))
|
|
{
|
|
tok.ReadNext(type, token, var);
|
|
xPos = atof(token);
|
|
tok.ReadNext(type, token, var);
|
|
yPos = atof(token);
|
|
}
|
|
else if(strstr(token, "Tj") || strstr(token, "TJ"))
|
|
{
|
|
PdfString str = var.GetString();
|
|
QString str1;
|
|
|
|
str1 = QString::fromStdWString(str.GetStringW());
|
|
|
|
if(oldYPos != yPos)
|
|
{
|
|
oldYPos = yPos;
|
|
lines.append(str1);
|
|
}
|
|
else
|
|
lines.last().append(str1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
for(int x = 0;x < lines.count();x++)
|
|
qDebug() << lines[x];
|
|
|
|
if(!lines[0].contains("Zeitnachweisliste"))
|
|
return(false);
|
|
|
|
QString tmp;
|
|
|
|
m_gedrucktAm = QDate::fromString(lines[1].mid(13, 10), "dd.MM.yyyy");
|
|
|
|
tmp = lines[2].mid(17);
|
|
m_mitarbeiterNummer = tmp.left(tmp.indexOf(" "));
|
|
m_mitarbeiterName = tmp.mid(tmp.indexOf(" ")+1).simplified();
|
|
|
|
m_azpRegel = lines[3].mid(lines[3].indexOf("AZPRegel")+12).simplified();
|
|
|
|
m_personalbereich = lines[4].mid(16).simplified();
|
|
|
|
m_kostenstelle = lines[5].mid(17).simplified();
|
|
|
|
tmp = lines[6].mid(lines[6].indexOf("Zeitraum")+16);
|
|
m_von = QDate::fromString(tmp.left(10), "dd.MM.yyyy");
|
|
m_bis = QDate::fromString(tmp.mid(tmp.indexOf(" bis")+5, 10), "dd.MM.yyyy");
|
|
|
|
int day = -1;
|
|
QTime start;
|
|
QTime end;
|
|
bool urlaub = false;
|
|
bool feiertag = false;
|
|
int i;
|
|
|
|
for(i = 10;i < lines.count();i++)
|
|
{
|
|
QString line = lines[i];
|
|
|
|
if(line.startsWith("***************"))
|
|
continue;
|
|
|
|
if(line.contains("Summenübersicht"))
|
|
break;
|
|
|
|
if(!line.startsWith(" "))
|
|
{
|
|
if(day != -1)
|
|
{
|
|
if(urlaub)
|
|
{
|
|
urlaub = false;
|
|
setValues(m_von, m_bis, day);
|
|
}
|
|
else if(feiertag)
|
|
feiertag = false;
|
|
else
|
|
setValues(m_von, m_bis, day, start, end);
|
|
}
|
|
|
|
day = line.left(2).toInt();
|
|
|
|
if(line.contains("Gebührenurla"))
|
|
urlaub = true;
|
|
else if(line.mid(17, 5) == " ")
|
|
feiertag = true;
|
|
else
|
|
{
|
|
start = QTime::fromString(line.mid(17, 5), "hh:mm");
|
|
end = QTime::fromString(line.mid(23, 5), "hh:mm");
|
|
}
|
|
}
|
|
else if(line.contains("Dienstgang"))
|
|
end = QTime::fromString(line.mid(23, 5), "hh:mm");
|
|
else if(line.startsWith(" "))
|
|
{
|
|
QTime t = QTime::fromString(line.mid(17, 5), "hh:mm");
|
|
|
|
if(t != end)
|
|
{
|
|
setValues(m_von, m_bis, day, start, end);
|
|
start = t;
|
|
}
|
|
end = QTime::fromString(line.mid(23, 5), "hh:mm");
|
|
}
|
|
}
|
|
setValues(m_von, m_bis, day, start, end);
|
|
|
|
for(;i < lines.count();i++)
|
|
{
|
|
QString line = lines[i];
|
|
|
|
if(line.contains("GLZ-Saldo Vorperiode"))
|
|
m_glzSaldoVorperiode = line.mid(25, 13).simplified().toDouble();
|
|
else if(line.contains("GLZ-Saldo akt. Periode"))
|
|
m_glzSaldoAktPeriode = line.mid(25, 13).simplified().toDouble();
|
|
else if(line.contains("Üst lt. Durchrechnungsz."))
|
|
m_uestLtDurchrechnungsz = line.mid(25, 13).simplified().toDouble();
|
|
else if(line.contains("GLZ-Saldo gesamt"))
|
|
m_glzSaldoGesamt = line.mid(25, 13).simplified().toDouble();
|
|
|
|
if(line.contains("Resturlaubstage"))
|
|
m_resturlaubstage = line.mid(63).simplified().toDouble();
|
|
else if(line.contains("angeordnete ÜST"))
|
|
m_angeordneteUest = line.mid(63).simplified().toDouble();
|
|
else if(line.contains("Ersatzruhe"))
|
|
m_ersatzruhe = line.mid(63).simplified().toDouble();
|
|
else if(line.contains("Monatssumme anger."))
|
|
m_monatssummeAnger = line.mid(63).simplified().toDouble();
|
|
else if(line.contains("davon Reisezeiten"))
|
|
m_reisezeiten = line.mid(63).simplified().toDouble();
|
|
}
|
|
|
|
return(true);
|
|
}
|