OSSP CVS Repository

ossp - Difference in ossp-pkg/as/as-gui/as_reportpanel.cpp versions 1.11 and 1.12
Not logged in
[Honeypot]  [Browse]  [Home]  [Login]  [Reports
[Search]  [Ticket]  [Timeline
  [History

ossp-pkg/as/as-gui/as_reportpanel.cpp 1.11 -> 1.12

--- as_reportpanel.cpp   2003/02/21 21:56:52     1.11
+++ as_reportpanel.cpp   2003/02/21 23:44:36     1.12
@@ -257,8 +257,9 @@
         this->writeHeader(nLastweek);
 
     // Write new contents to data window
-    for (int nIter = 0; nIter < m_nWeeks; nIter++)
-        m_pBrowser->append(this->getWeek(QDate::currentDate().addDays(nIter * -7)));
+    m_pBrowser->append(this->getWeektotals(QDate::currentDate(), m_nWeeks));
+    if (m_pReprefs->getBool(TITRAQ_PREFDETAILON, TITRAQ_DEFDETAILON))
+        m_pBrowser->append(this->getWeekdetails(QDate::currentDate(), m_nWeeks));
     this->writeFooter();
     m_pBrowser->setCursorPosition(0, 0);
     m_pBrowser->ensureCursorVisible();
@@ -309,8 +310,10 @@
         this->writeHeader(Lastmonth);
 
     // Write new contents to data window
-    for (int nIter = 0; nIter < m_nMonths; nIter++)
-        m_pBrowser->append(this->getMonth(QDate::currentDate().addMonths(nIter * -1)));
+    m_pBrowser->append(this->getMonthtotals(QDate::currentDate(), m_nMonths));
+    if (m_pReprefs->getBool(TITRAQ_PREFDETAILON, TITRAQ_DEFDETAILON)) {
+        m_pBrowser->append(this->getMonthdetails(QDate::currentDate(), m_nMonths));
+    }
     this->writeFooter();
     m_pBrowser->setCursorPosition(0, 0);
     m_pBrowser->ensureCursorVisible();
@@ -326,15 +329,8 @@
     // Set the button in case we arrived from a menu selection
     m_pWeekmonthgroup->setButton(TITRAQ_REPORTBOTH);
 
-    // Clear data window and write header out
-    m_pBrowser->setUpdatesEnabled(false);
-    m_pBrowser->clear();
-    m_pBrowser->append(trUtf8("The 'both' feature is not working yet."));
-    this->writeFooter();
-    m_pBrowser->setCursorPosition(0, 0);
-    m_pBrowser->ensureCursorVisible();
-    m_pBrowser->setUpdatesEnabled(true);
-    m_pBrowser->repaint(false);
+    // Placeholder text until we figure out what to do with this
+    m_pBrowser->setText(trUtf8("The 'both' feature is not working yet."));
 }
 
 //
@@ -354,8 +350,6 @@
     Header += QTime::currentTime().toString(Qt::ISODate);
     Header += trUtf8("\nReporting for week %1...").arg(nWeeknum);
     Header += QString("\n\n");
-    Header += QString("Date       Hours Task\n");
-    Header += QString("---------- ----- ----\n");
     m_pBrowser->setText(Header);
 }
 
@@ -376,8 +370,6 @@
     Header += QTime::currentTime().toString(Qt::ISODate);
     Header += trUtf8("\nReporting for month %1...").arg(Month);
     Header += QString("\n\n");
-    Header += QString("Date       Hours Task\n");
-    Header += QString("---------- ----- ----\n");
     m_pBrowser->setText(Header);
 }
 
@@ -398,8 +390,6 @@
     Header += QTime::currentTime().toString(Qt::ISODate);
     Header += trUtf8("\nReporting for weeks %1 through %2...").arg(nFirst).arg(nLast);
     Header += QString("\n\n");
-    Header += QString("Date       Hours Task\n");
-    Header += QString("---------- ----- ----\n");
     m_pBrowser->setText(Header);
 }
 
@@ -420,8 +410,6 @@
     Header += QTime::currentTime().toString(Qt::ISODate);
     Header += trUtf8("\nReporting months %1 through %2...").arg(First).arg(Last);
     Header += QString("\n\n");
-    Header += QString("Date       Hours Task\n");
-    Header += QString("---------- ----- ----\n");
     m_pBrowser->setText(Header);
 }
 
@@ -430,20 +418,33 @@
 //
 void Reportpanel::writeFooter(void)
 {
+    if (m_pReprefs->getBool(TITRAQ_PREFSIGNATON, TITRAQ_DEFSIGNATON)) {
+        m_pBrowser->append(trUtf8("\n\nPrint name ________________________________________\n"));
+        m_pBrowser->append(trUtf8("\n\nSignature  ________________________________________"));
+    }
 }
 
 //
-// Writes one week of data to the display window
+// Returns one week of details data
 //
-QString Reportpanel::getWeek(QDate Dayref)
+QString Reportpanel::getWeekdetails(QDate Dayref, int nWeeks)
 {
     QString Data, Tempstring; // Output string
     int nRows      = m_pReptable->numRows();
     int nIter      = nRows - 1;
     int nFirstrow  = 0;
     int nLastrow   = 0;
-    QDate Firstday = Dayref.addDays(Dayref.dayOfWeek() * -1 + 1);   // Do negate
-    QDate Lastday  = Firstday.addDays(7);                           // Add week
+
+    Q_ASSERT(nWeeks > 0);
+    QDate Firstday;
+    QDate Lastday;
+    Firstday = Dayref.addDays(Dayref.dayOfWeek() * -1 + 1);
+    Firstday = Firstday.addDays((nWeeks - 1) * -7);
+    Lastday  = Firstday.addDays(7 * nWeeks);
+
+    // Write some quick header text to the outgoing string
+    Data  = trUtf8("\nDate       Hours Account details\n");
+    Data += QString("---------- ----- ----------------------------------------\n");
 
     // Find data starting the week in question
     while (QDate::fromString(m_pReptable->text(nIter, TITRAQ_IDXDATE), Qt::ISODate) >= Firstday)
@@ -466,25 +467,103 @@
         Tempstring = m_pReptable->text(nIter, TITRAQ_IDXTASK);
         if (!Tempstring.isEmpty())
             Data += QString(TITRAQ_SEPARATORTOK) + Tempstring;
-        Data += trUtf8("\n"); // Finish off line
+        Data += QString("\n"); // Finish off line
     }
 
     return Data;
 }
 
 //
-// Writes one month of data to the display window
+// Returns one week of totals data
+//
+QString Reportpanel::getWeektotals(QDate Dayref, int nWeeks)
+{
+    using namespace std;                    // Needed for hash tables with hmap
+    map<string, string> Hashtasks;          // Hashtable for storing tasks
+    map<string, string> Hashhours;          // Hashtable for storing hours
+    map<string, string>::iterator Taskiter; // The hashtable task iterator
+    map<string, string>::iterator Houriter; // The hashtable hour iterator
+
+    QString Totals;                         // Data totals to return for writing
+    QString Tempstring;                     // Temporary processing string
+    int nRows      = m_pReptable->numRows();
+    int nIter      = nRows - 1;
+    int nFirstrow  = 0;
+    int nLastrow   = 0;
+
+    Q_ASSERT(nWeeks > 0);
+    QDate Firstday;
+    QDate Lastday;
+    Firstday = Dayref.addDays(Dayref.dayOfWeek() * -1 + 1);
+    Firstday = Firstday.addDays((nWeeks - 1) * -7);
+    Lastday  = Firstday.addDays(7 * nWeeks);
+
+    // Find data starting the week in question
+    while (QDate::fromString(m_pReptable->text(nIter, TITRAQ_IDXDATE), Qt::ISODate) >= Firstday)
+        nIter--;
+    nFirstrow = ++nIter; // The first row to operate on
+
+    // Find data ending the week in question
+    while (nIter < nRows && QDate::fromString(m_pReptable->text(nIter, TITRAQ_IDXDATE), Qt::ISODate) <  Lastday)
+        nIter++;
+    nLastrow = nIter - 1; // The last row to operate on
+
+    // Parse the table for interesting values
+    for (nIter = nLastrow; nIter >= nFirstrow; nIter--) {
+        Tempstring = m_pReptable->text(nIter, TITRAQ_IDXTASK);
+        if (!Tempstring.isEmpty()) {
+            string Convstring = Tempstring;         // Convert to string (can't cast?)
+            QTime Intable = QTime::fromString(m_pReptable->text(nIter, TITRAQ_IDXAMOUNT), Qt::ISODate);
+            int nTothours = QString(Hashtasks[Convstring]).section(':', 0, 0).toInt() + Intable.hour();
+            int nTotminut = QString(Hashtasks[Convstring]).section(':', 1, 1).toInt() + Intable.minute();
+            nTothours += nTotminut / 60;
+            nTotminut %= 60;
+            QString Hours = QString::number(nTothours).rightJustify(3, ' ');
+            QString Mins  = QString::number(nTotminut).rightJustify(2, '0');
+            string Timestring = Hours + ':' + Mins; // Convert to string (can't cast?)
+            Hashtasks[Convstring] = Timestring;     // Finally store in hashtable
+        }
+    }
+
+    // Reverse copy the tasks hashtable to both sort and index by amount key
+    for (Taskiter = Hashtasks.begin(); Taskiter != Hashtasks.end(); Taskiter++)
+        Hashhours[Taskiter->second] = Taskiter->first;
+
+    // Write the actual data totals to the outgoing string in reverse order
+    for (Houriter = Hashhours.begin(); Houriter != Hashhours.end(); Houriter++)
+        Totals = Houriter->first + ' ' + Houriter->second + '\n' + Totals;
+
+    // Write some quick header text to the outgoing string in reverse order
+    Totals = QString("------ ----------------------------------------\n") + Totals;
+    Totals = trUtf8("Total  Account summary\n") + Totals;
+
+    return Totals; // The outgoing string... its finally gone, let's go to bed
+}
+
+//
+// Returns one month of details data
 //
-QString Reportpanel::getMonth(QDate Dayref)
+QString Reportpanel::getMonthdetails(QDate Dayref, int nMonths)
 {
     QString Data, Tempstring; // Output string
     int nRows      = m_pReptable->numRows();
     int nIter      = nRows - 1;
     int nFirstrow  = 0;
     int nLastrow   = 0;
-    QDate Firstday = QDate(Dayref.year(), Dayref.month(), 1);
+
+    // Find range boundaries
+    Q_ASSERT(nMonths > 0);
+    int nYear = Dayref.year();
+    int nMonth = (Dayref.addMonths(nMonths * -1).month() + 12) % 12 + 1;
+    if (nMonth > Dayref.month())
+        nYear--;
+    QDate Firstday = QDate(nYear, nMonth, 1);
     QDate Lastday  = QDate(Dayref.year(), Dayref.month(), Dayref.daysInMonth());
 
+    // Write some quick header text to the outgoing string
+    Data  = trUtf8("\nDate       Hours Account details\n");
+    Data += QString("---------- ----- ----------------------------------------\n");
+
     // Find data starting the week in question
     while (QDate::fromString(m_pReptable->text(nIter, TITRAQ_IDXDATE), Qt::ISODate) >= Firstday)
         nIter--;
@@ -513,6 +592,75 @@
 }
 
 //
+// Returns one month of totals data
+//
+QString Reportpanel::getMonthtotals(QDate Dayref, int nMonths)
+{
+    using namespace std;                    // Needed for hash tables with hmap
+    map<string, string> Hashtasks;          // Hashtable for storing tasks
+    map<string, string> Hashhours;          // Hashtable for storing hours
+    map<string, string>::iterator Taskiter; // The hashtable task iterator
+    map<string, string>::iterator Houriter; // The hashtable hour iterator
+
+    QString Totals;                         // Data totals to return for writing
+    QString Tempstring;                     // Temporary processing string
+    int nRows      = m_pReptable->numRows();
+    int nIter      = nRows - 1;
+    int nFirstrow  = 0;
+    int nLastrow   = 0;
+
+    // Find range boundaries
+    Q_ASSERT(nMonths > 0);
+    int nYear = Dayref.year();
+    int nMonth = (Dayref.addMonths(nMonths * -1).month() + 12) % 12 + 1;
+    if (nMonth > Dayref.month())
+        nYear--;
+    QDate Firstday = QDate(nYear, nMonth, 1);
+    QDate Lastday  = QDate(Dayref.year(), Dayref.month(), Dayref.daysInMonth());
+
+    // Find data starting the week in question
+    while (QDate::fromString(m_pReptable->text(nIter, TITRAQ_IDXDATE), Qt::ISODate) >= Firstday)
+        nIter--;
+    nFirstrow = ++nIter; // The first row to operate on
+
+    // Find data ending the week in question
+    while (nIter < nRows && QDate::fromString(m_pReptable->text(nIter, TITRAQ_IDXDATE), Qt::ISODate) <  Lastday)
+        nIter++;
+    nLastrow = nIter - 1; // The last row to operate on
+
+    // Parse the table for interesting values
+    for (nIter = nLastrow; nIter >= nFirstrow; nIter--) {
+        Tempstring = m_pReptable->text(nIter, TITRAQ_IDXTASK);
+        if (!Tempstring.isEmpty()) {
+            string Convstring = Tempstring;         // Convert to string (can't cast?)
+            QTime Intable = QTime::fromString(m_pReptable->text(nIter, TITRAQ_IDXAMOUNT), Qt::ISODate);
+            int nTothours = QString(Hashtasks[Convstring]).section(':', 0, 0).toInt() + Intable.hour();
+            int nTotminut = QString(Hashtasks[Convstring]).section(':', 1, 1).toInt() + Intable.minute();
+            nTothours += nTotminut / 60;
+            nTotminut %= 60;
+            QString Hours = QString::number(nTothours).rightJustify(3, ' ');
+            QString Mins  = QString::number(nTotminut).rightJustify(2, '0');
+            string Timestring = Hours + ':' + Mins; // Convert to string (can't cast?)
+            Hashtasks[Convstring] = Timestring;     // Finally store in hashtable
+        }
+    }
+
+    // Reverse copy the tasks hashtable to both sort and index by amount key
+    for (Taskiter = Hashtasks.begin(); Taskiter != Hashtasks.end(); Taskiter++)
+        Hashhours[Taskiter->second] = Taskiter->first;
+
+    // Write the actual data totals to the outgoing string in reverse order
+    for (Houriter = Hashhours.begin(); Houriter != Hashhours.end(); Houriter++)
+        Totals = Houriter->first + ' ' + Houriter->second + '\n' + Totals;
+
+    // Write some quick header text to the outgoing string in reverse order
+    Totals = QString("------ ----------------------------------------\n") + Totals;
+    Totals = trUtf8("Total  Account summary\n") + Totals;
+
+    return Totals; // The outgoing string... its finally gone, let's go to bed
+}
+
+//
 // Saves the currently displayed local report
 //
 void Reportpanel::saveReport(void)

CVSTrac 2.0.1