MyMoneySplit::MyMoneySplit(const QDomElement& node) : MyMoneyObject(node, false), MyMoneyKeyValueContainer(node.elementsByTagName("KEYVALUEPAIRS").item(0).toElement()) { if ("SPLIT" != node.tagName()) throw MYMONEYEXCEPTION("Node was not SPLIT"); clearId(); m_payee = QStringEmpty(node.attribute("payee")); QDomNodeList nodeList = node.elementsByTagName("TAG"); for (int i = 0; i < nodeList.count(); i++) m_tagList << QStringEmpty(nodeList.item(i).toElement().attribute("id")); m_reconcileDate = stringToDate(QStringEmpty(node.attribute("reconciledate"))); m_action = QStringEmpty(node.attribute("action")); m_reconcileFlag = static_cast<MyMoneySplit::reconcileFlagE>(node.attribute("reconcileflag").toInt()); m_memo = QStringEmpty(node.attribute("memo")); m_value = MyMoneyMoney(QStringEmpty(node.attribute("value"))); m_shares = MyMoneyMoney(QStringEmpty(node.attribute("shares"))); m_price = MyMoneyMoney(QStringEmpty(node.attribute("price"))); m_account = QStringEmpty(node.attribute("account")); m_number = QStringEmpty(node.attribute("number")); m_bankID = QStringEmpty(node.attribute("bankid")); }
bool MyMoneyStorageXML::readFileInformation(const QDomElement& fileInfo) { signalProgress(0, 3, i18n("Loading file information...")); bool rc = true; QDomElement temp = findChildElement("CREATION_DATE", fileInfo); if (temp == QDomElement()) { rc = false; } QString strDate = QStringEmpty(temp.attribute("date")); m_storage->setCreationDate(stringToDate(strDate)); signalProgress(1, 0); temp = findChildElement("LAST_MODIFIED_DATE", fileInfo); if (temp == QDomElement()) { rc = false; } strDate = QStringEmpty(temp.attribute("date")); m_storage->setLastModificationDate(stringToDate(strDate)); signalProgress(2, 0); temp = findChildElement("VERSION", fileInfo); if (temp == QDomElement()) { rc = false; } QString strVersion = QStringEmpty(temp.attribute("id")); fileVersionRead = strVersion.toUInt(0, 16); temp = findChildElement("FIXVERSION", fileInfo); if (temp != QDomElement()) { QString strFixVersion = QStringEmpty(temp.attribute("id")); m_storage->setFileFixVersion(strFixVersion.toUInt()); // skip KMyMoneyView::fixFile_2() if (m_storage->fileFixVersion() == 2) { m_storage->setFileFixVersion(3); } } // FIXME The old version stuff used this rather odd number // We now use increments if (fileVersionRead == VERSION_0_60_XML) fileVersionRead = 1; signalProgress(3, 0); return rc; }
QVariant MyModel::data(const QModelIndex & index, int role) const { if (role == Qt::BackgroundRole) { int row = index.row(); QVariant value = this->record(row).value(6); QString str = value.toString(); QDate dead_line = stringToDate(str); if (dead_line.isValid()) { QDate today = QDate::currentDate(); if (dead_line <= today) { QBrush bg(Qt::lightGray); return bg; } } } return QSqlRelationalTableModel::data(index, role); }
vector<Shift> ShiftRepo::getWeeklyShifts(string start_date, string end_date, int type_selected) { db.open(); stringstream sqlQuery; sqlQuery << "SELECT * FROM Shifts WHERE (date BETWEEN '" << start_date << "'"; sqlQuery << " AND '" << end_date << "') AND (shiftID BETWEEN 1 AND 13) AND type = " << type_selected; sqlQuery << " ORDER BY date ASC"; QSqlQuery query(db); bool success = query.exec(QString::fromStdString(sqlQuery.str())); qDebug() << query.lastQuery(); if(!success) { qDebug() << "Error in getting weekly shifts"; qDebug() << query.lastError().text(); } vector<Shift> shifts; while(query.next()) { QString raw_date = query.value("date").toString(); QDate date = stringToDate(raw_date); int id = query.value("shiftID").toInt(); bool type = query.value("type").toBool(); QString name = query.value("name").toString(); double hours = query.value("hours").toDouble(); double wages = query.value("wages").toDouble(); Shift shift(date, id, type, name, hours, wages); shifts.push_back(shift); } return shifts; }
int addTransactionWizard(char* wallet) { Transaction tx; tx.date.year = getCurrentYear(); tx.date.month = getCurrentMonth(); tx.date.day = getCurrentDay(); tx.time.hour = getCurrentHour(); tx.time.minute = getCurrentMinute(); tx.time.second = getCurrentSecond(); strcpy(tx.description, (char*)""); int curstep = 0; while(1) { SetBackGround(0x0A); drawScreenTitle("Add transaction"); // < (first label), SELECT of on date step, and Next or Finish (last label) drawFkeyLabels(curstep>0 ? 0x036F : -1, curstep == 2 ? 0x000F : 0, 0, 0, 0, curstep==4 ? 0x04A4 : 0x04A3); if(curstep == 0) { MenuItem menuitems[5]; menuitems[0].text = (char*)"Debit"; menuitems[1].text = (char*)"Credit"; Menu menu; menu.items=menuitems; menu.type=MENUTYPE_FKEYS; menu.numitems=2; menu.height=2; menu.startY=3; menu.pBaRtR=1; int inloop=1; while(inloop) { // this must be here, inside this loop: SetBackGround(0x0A); drawScreenTitle("Add transaction", "Select type:"); drawFkeyLabels(-1, -1, -1, -1, -1, 0x04A3); int res = doMenu(&menu); if(res == MENU_RETURN_EXIT) return 0; else if(res == KEY_CTRL_F6 || res == MENU_RETURN_SELECTION) { tx.credit = menu.selection == 2; curstep++; break; } } } else if(curstep == 1) { drawScreenTitle(NULL, "Amount:"); char samount[20] = ""; if(tx.amount.val) { currencyToString(samount, &tx.amount); } textInput input; input.charlimit=12; input.acceptF6=1; input.symbols = 0; // allow the decimal separator input.forcetext = 1; input.buffer = (char*)samount; input.type = INPUTTYPE_NUMERIC; while(1) { input.key=0; int res = doTextInput(&input); if (res==INPUT_RETURN_EXIT) return 0; // user aborted else if (res==INPUT_RETURN_CONFIRM) { if(!stringToCurrency(&tx.amount, samount)) { if(!tx.amount.val) { AUX_DisplayErrorMessage(0x4B); } else { curstep++; } break; } else AUX_DisplayErrorMessage(0x43); } else if (res==INPUT_RETURN_KEYCODE && input.key == KEY_CTRL_F1) { curstep--; break; } } } else if(curstep == 2) { drawScreenTitle(NULL, "Date:"); mPrintXY(7, 4, getInputDateFormatHint(), TEXT_MODE_TRANSPARENT_BACKGROUND, TEXT_COLOR_BLACK); textInput input; input.x=7; input.width=8; input.charlimit=8; input.acceptF6=1; input.type=INPUTTYPE_DATE; char datebuffer[15]; fillInputDate(&tx.date, datebuffer); input.buffer = (char*)datebuffer; while(1) { input.key=0; int res = doTextInput(&input); if (res==INPUT_RETURN_EXIT) return 0; // user aborted else if (res==INPUT_RETURN_CONFIRM) { int len = strlen(datebuffer); if(len == input.charlimit) { int yr,m,d; stringToDate(datebuffer, &yr, &m, &d); if(isDateValid(yr, m, d)) { tx.date.year = yr; tx.date.month = m; tx.date.day = d; curstep++; break; // continue to next step } else invalidFieldMsg(0); } else invalidFieldMsg(0); } else if (res==INPUT_RETURN_KEYCODE) { if(input.key==KEY_CTRL_F1) { curstep=curstep-1; break; } else if(input.key==KEY_CTRL_F2) { int ey=0, em=0, ed=0; if(!selectDateScreen(&ey, &em, &ed, (char*)"Select transaction date:", NULL, 1)) { tx.date.year = ey; tx.date.month = em; tx.date.day = ed; curstep++; break; // continue to next step } break; //redraw } } } } else if(curstep == 3) { drawScreenTitle(NULL, "Time:"); mPrintXY(8, 4, "HHMMSS", TEXT_MODE_TRANSPARENT_BACKGROUND, TEXT_COLOR_BLACK); textInput input; input.x=8; input.width=6; input.charlimit=6; input.acceptF6=1; input.type=INPUTTYPE_TIME; char tbuffer[15]; fillInputTime(&tx.time, tbuffer); input.buffer = (char*)tbuffer; while(1) { input.key=0; int res = doTextInput(&input); if (res==INPUT_RETURN_EXIT) return 0; // user aborted else if (res==INPUT_RETURN_CONFIRM) { if((int)strlen(tbuffer) == input.charlimit) { int h, m, s; stringToTime(tbuffer, &h, &m, &s); if(isTimeValid(h, m, s)) { tx.time.hour = h; tx.time.minute = m; tx.time.second = s; curstep++; break; // continue to next step } else invalidFieldMsg(1); } else invalidFieldMsg(1); } else if (res==INPUT_RETURN_KEYCODE && input.key==KEY_CTRL_F1) { curstep--; break; } } } else if(curstep == 4) { drawScreenTitle(NULL, "Description:"); textInput input; input.charlimit=128; input.acceptF6=1; input.buffer = (char*)tx.description; int inloop = 1; while(inloop) { input.key=0; int res = doTextInput(&input); if (res==INPUT_RETURN_EXIT) return 0; // user aborted else if (res==INPUT_RETURN_CONFIRM) inloop = 0; // all fields complete, continue with transaction adding else if (res==INPUT_RETURN_KEYCODE && input.key == KEY_CTRL_F1) { curstep--; break; } } if(!inloop) break; } } addTransaction(&tx, wallet); return 1; }
QString read_item( const Outlook::_AppointmentItemPtr &item, QXmlStreamReader &reader, bool dump_exception ) { TRACE(OutlookSyncPlugin) << "OutlookDatebookSync::read_item"; Outlook::UserPropertiesPtr props = item->GetUserProperties(); Q_ASSERT(props); // We need to clear the recurrence pattern now or we will fail to update recurring events if ( !dump_exception ) item->ClearRecurrencePattern(); enum State { Idle, When, Alarm, Repeat, Exception, Categories }; State state = Idle; Outlook::RecurrencePatternPtr recpat = 0; QString key; QXmlStreamAttributes attributes; QString value; QStringList categories; bool utc = false; bool allday = false; while (!reader.atEnd()) { bool loop = true; switch(reader.readNext()) { case QXmlStreamReader::StartElement: key = reader.qualifiedName().toString(); value = QString(); attributes = reader.attributes(); if ( key == "When" ) state = When; if ( state == When && key == "StartDate" ) { allday = true; } if ( state == When && key == "Start" ) { allday = false; } if ( key == "Alarm" ) { state = Alarm; LOG() << "item->PutReminderSet" << false; item->PutReminderSet( false ); } if ( state == Alarm && key == "Type" || key == "Delay" ) { // Outlook only wants to see alarms set on events in the future // If we sync an event in the past with an alarm it will go off // immediately, something that can be annoying when you do an // initial sync with lots of events with alarms. if ( date_to_qdatetime(item->GetStart()) > QDateTime::currentDateTime() ) { LOG() << "item->PutReminderSet" << true; item->PutReminderSet( true ); } } if ( !dump_exception ) { if ( key == "Repeat" ) { state = Repeat; } if ( state == Repeat && key == "Type" ) { recpat = item->GetRecurrencePattern(); recpat->PutPatternStartDate( item->GetStart() ); } if ( state == Repeat && key == "Exception" ) { state = Exception; } } if ( key == "Categories" ) state = Categories; break; case QXmlStreamReader::Characters: value += reader.text().toString(); break; case QXmlStreamReader::EndElement: key = reader.qualifiedName().toString(); //LOG() << "key" << key << "value" << value; READ_STRING(Description,Subject); READ_STRING(Location,Location); if ( key == "TimeZone" ) { utc = ( !value.isEmpty() ); } if ( state == When ) { if ( allday ) { item->PutAllDayEvent( true ); READ_DATE(StartDate,Start); // We can't just read the end date because Outlook does it differently to Qtopia. // Qtopia gives us something like "starts 7/10/08, ends 7/10/08" but Outlook // expects "starts 7/10/08 00:00:00, ends 8/10/08 00:00:00". // Simply add one day to the end date to get something Outlook won't barf over. if ( key == "EndDate" ) { QDate dt = stringToDate(value); QDateTime actual( dt.addDays(1), QTime(0,0,0) ); LOG() << "item->PutEnd" << actual; item->PutEnd( qdatetime_to_date(actual) ); } } else { item->PutAllDayEvent( false ); if ( key == "Start" ) { QDateTime dt = stringToDateTime(value, utc); if ( utc ) { dt.setTimeSpec( Qt::UTC ); dt = dt.toLocalTime(); } LOG() << "item->PutStart" << dt; item->PutStart( qdatetime_to_date(dt) ); } if ( key == "End" ) { QDateTime dt = stringToDateTime(value, utc); if ( utc ) { dt.setTimeSpec( Qt::UTC ); dt = dt.toLocalTime(); } LOG() << "item->PutEnd" << dt; item->PutEnd( qdatetime_to_date(dt) ); } } if ( key == "When" ) state = Idle; } if ( state == Alarm ) { READ_ENUM(Type,ReminderPlaySound,true,Audible); READ_ENUM(Type,ReminderPlaySound,false,Visible); READ_INT(Delay,ReminderMinutesBeforeStart); if ( key == "Alarm" ) state = Idle; } if ( dump_exception == false && state == Repeat ) { READ_ENUM_ITEM(Type,RecurrenceType,Outlook::olRecursDaily,Daily,recpat); READ_ENUM_ITEM(Type,RecurrenceType,Outlook::olRecursWeekly,Weekly,recpat); READ_ENUM_ITEM(Type,RecurrenceType,Outlook::olRecursMonthly,MonthlyDate,recpat); READ_ENUM_ITEM(Type,RecurrenceType,Outlook::olRecursMonthNth,MonthlyDay,recpat); READ_ENUM_ITEM(Type,RecurrenceType,Outlook::olRecursMonthNth,MonthlyEndDay,recpat); READ_ENUM_ITEM(Type,RecurrenceType,Outlook::olRecursYearly,Yearly,recpat); if ( key == "Type" ) { if ( value == "MonthlyEndDay" ) { LOG() << "recpat->PutInstance" << 5; recpat->PutInstance( 5 ); } } if ( key == "Frequency" ) { int interval = QVariant(value).toInt(); if ( interval >= 12 && interval % 12 == 0 ) { // since interval is bigger than 12 yet divisible by 12 this is more // likely to be a YearNth which Qtopia Sync Agent sends down as a // MonthNth with interval *= 12 recpat->PutRecurrenceType( Outlook::olRecursYearNth ); } LOG() << "recpat->PutInterval" << interval; recpat->PutInterval( interval ); } if ( key == "Until" ) { if ( value.isEmpty() ) { LOG() << "recpat->PutNoEndDate" << true; recpat->PutNoEndDate( true ); } else { LOG() << "recpat->PutPatternEndDate" << QDateTime( stringToDate(value), QTime(0,0,0) ); recpat->PutPatternEndDate( qdatetime_to_date(QDateTime( stringToDate(value), QTime(0,0,0) )) ); } } // Outlook doesn't seem to support Nearest == false (so ignore it) if ( key == "WeekMask" ) { int mask = 0; foreach( const QString &v, value.split(" ") ) { if ( v == "Monday" ) mask |= Outlook::olMonday; else if ( v == "Tuesday" ) mask |= Outlook::olTuesday; else if ( v == "Wednesday" ) mask |= Outlook::olWednesday; else if ( v == "Thursday" ) mask |= Outlook::olThursday; else if ( v == "Friday" ) mask |= Outlook::olFriday; else if ( v == "Saturday" ) mask |= Outlook::olSaturday; else if ( v == "Sunday" ) mask |= Outlook::olSunday; } LOG() << "recpat->PutDayOfWeekMask" << mask; recpat->PutDayOfWeekMask( (Outlook::OlDaysOfWeek)mask ); } if ( key == "Repeat" ) state = Idle; } if ( dump_exception == false && state == Exception ) { if ( key == "OriginalDate" ) { QDate exceptionDate = stringToDate(value); Outlook::_AppointmentItemPtr eitem = recpat->GetOccurrence( qdatetime_to_date(QDateTime( exceptionDate, QTime(0,0,0) )) ); QString entryid = read_item( eitem, reader, true ); if ( entryid.isEmpty() ) state = Repeat; // the delete case eats the closing Exception tag } if ( key == "Exception" ) { state = Repeat; } } READ_STRING(Notes,Body); if ( state == Categories ) { if ( key == "Category" ) categories << value; if ( key == "Categories" ) { LOG() << "item->PutCategories" << categories; item->PutCategories( qstring_to_bstr(categories.join(", ")) ); state = Idle; } } READ_CUSTOM(TimeZone,Qtopia Timezone); if ( dump_exception && key == "Appointment" ) loop = false; if ( dump_exception && key == "Exception" ) { // Oops... no Appointment tag in an Exception tag // That means we need to delete the existing exception item->Delete(); return QString(); } }