void Control::initTime() { QSqlQuery query; QDateTime start_date_time; query.exec("select min(DATE),min(TIME) from DATAS"); if(query.next()){ int min_date = query.value(0).toInt(); int min_time = query.value(1).toInt(); int year = min_date / 10000; int month = min_date % 10000 / 100; int day = min_date % 100; int h = min_time / 10000; QTime start_time(h,0); QDate start_date(2000 +year,month,day); start_date_time = QDateTime(start_date,start_time); } query.exec("select max(DATE),max(TIME) from DATAS"); QDateTime end_date_time; if(query.next()){ int max_date = query.value(0).toInt(); int max_time = query.value(1).toInt(); int year = max_date / 10000; int month = max_date % 10000 / 100; int day = max_date % 100; int h = max_time / 10000; QTime end_time(h,0); QDate end_date(2000 +year,month,day); end_date_time = QDateTime(end_date,end_time); } ui->startDateTimeEdit->setDisplayFormat("yyyy-M-d HH"); ui->endDateTimeEdit->setDisplayFormat("yyyy-M-d HH"); ui->startDateTimeEdit->setMinimumDateTime(start_date_time); ui->startDateTimeEdit->setMaximumDateTime(end_date_time); ui->endDateTimeEdit->setMinimumDateTime(start_date_time); ui->endDateTimeEdit->setMaximumDateTime(end_date_time); ui->startDateTimeEdit_2->setDisplayFormat("yyyy-M-d HH"); ui->endDateTimeEdit_2->setDisplayFormat("yyyy-M-d HH"); ui->startDateTimeEdit_2->setMinimumDateTime(start_date_time); ui->startDateTimeEdit_2->setMaximumDateTime(end_date_time); ui->endDateTimeEdit_2->setMinimumDateTime(start_date_time); ui->endDateTimeEdit_2->setMaximumDateTime(end_date_time); ui->startDateTimeEdit_3->setDisplayFormat("yyyy-M-d HH"); ui->endDateTimeEdit_3->setDisplayFormat("yyyy-M-d HH"); ui->startDateTimeEdit_3->setMinimumDateTime(start_date_time); ui->startDateTimeEdit_3->setMaximumDateTime(end_date_time); ui->endDateTimeEdit_3->setMinimumDateTime(start_date_time); ui->endDateTimeEdit_3->setMaximumDateTime(end_date_time); ui->startDateTimeEdit_4->setDisplayFormat("yyyy-M-d HH"); ui->endDateTimeEdit_4->setDisplayFormat("yyyy-M-d HH"); ui->startDateTimeEdit_4->setMinimumDateTime(start_date_time); ui->startDateTimeEdit_4->setMaximumDateTime(end_date_time); ui->endDateTimeEdit_4->setMinimumDateTime(start_date_time); ui->endDateTimeEdit_4->setMaximumDateTime(end_date_time); }
//------------------------------------------------------------------------------ int main(int argc, char * const argv[]) { Options opt = GetOptions(argc, argv); // Log in SpreadsheetService service(opt.user, opt.password, "xeckollc-thirteen-" + VERSION); // Get the spreadsheet we are interested in Spreadsheet spreadsheet; if(opt.spreadsheet_id.size()) { spreadsheet = service.GetSpreadsheet(opt.spreadsheet_id); } else { vector<Spreadsheet> sheets = service.GetSpreadsheets(); int report_index = -1; for (int i=0; i < sheets.size(); ++i) { if(sheets[i].GetTitle() == opt.spreadsheet_name) { report_index = i; break; } } if(report_index < 0) { cerr << format("No spreadsheet named [%1%] found") % opt.spreadsheet_name << endl; return 1; } spreadsheet = sheets[report_index]; } // Get the worksheet we are interested in. If we didn't specify one, // use the first one in the spreadsheet Worksheet worksheet; if(opt.worksheet_id.size()) { worksheet = spreadsheet.GetWorksheet(opt.worksheet_id); } else { vector<Worksheet> sheets = spreadsheet.GetWorksheets(); if(opt.worksheet_name.size()) { int report_index = -1; for (int i=0; i < sheets.size(); ++i) { if(sheets[i].GetTitle() == opt.worksheet_name) { report_index = i; break; } } if(report_index < 0) { cerr << format("No worksheet named [%1%] found") % opt.worksheet_name << endl; return 1; } worksheet = sheets[report_index]; } else { worksheet = sheets[0]; } } // Get 2 columns of Cells from selected worksheet CellRange cells = worksheet.GetColumns(1, 2); // Parse the cells for the data map<string, int> on_air, off_air; State state = NONE; for (int row=cells.GetFirstRow(); row <= cells.GetLastRow(); ++row) { Cell *label_cell = cells.GetCell(row, 1); if(label_cell == NULL) { state = NONE; continue; } string label = label_cell->GetContent(); if(!label.size()) { state = NONE; continue; } if(label == ON_AIR_HEADER) { state = ONAIR; continue; } if(label == OFF_AIR_HEADER) { state = OFFAIR; continue; } Cell *value_cell = cells.GetCell(row, 2); if(value_cell == NULL) { continue; } string value = value_cell->GetContent(); int ivalue; try { ivalue = lexical_cast<int>(value.c_str()); } catch(bad_lexical_cast &) { ivalue = 0; } switch (state) { case ONAIR: if(ivalue) { on_air[label] = ivalue; } break; case OFFAIR: if(ivalue) { off_air[label] = ivalue; } break; case NONE: break; } } // Figure the start and stop dates from the worksheet name string name = worksheet.GetTitle(); re::sregex rex = re::sregex::compile("(.+) +(.+)"); re::smatch matches; if(!re::regex_match(name, matches, rex)) { cerr << format("Worksheet name [%1%] does not look like a month and year") % name << endl; return 1; } string mon, yr; int month, year; mon = matches[1]; yr = matches[2]; year = lexical_cast<int>(yr.c_str()); if(year < 2000) { year += 2000; } month = 0; string months[] = { "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec" }; for (int i=0; i<12; ++i) { if (iequals(mon, months[i])) { month=i+1; break; } } if(month < 1) { cerr << format("Worksheet name [%1%] does not contain a valid month") % name << endl; return 1; } date start_date(year, month, 1); date stop_date = start_date.end_of_month(); stringstream start, stop; date_facet *facet = new date_facet("%d %b"); start.imbue(locale(cout.getloc(), facet)); start << start_date; opt.start_date = to_upper_copy(start.str()); facet = new date_facet("%d %b %Y"); stop.imbue(locale(cout.getloc(), facet)); stop << stop_date; opt.stop_date = to_upper_copy(stop.str()); // Print the report PrintReport(cout, opt, on_air, off_air); return 0; }
int Chain::Chain_Data::first_day_weekday() const { return start_date().dayOfWeek(); }
int Chain::Chain_Data::weekdays_before_start() const { // QDate week days are 1 = Mon ... 7 = Sun return start_date().dayOfWeek() - 1; }
QDate Chain::Chain_Data::link_date(int week, int weekday) const { return start_date().addDays(index_from(week, weekday)); }
QDate Chain::Chain_Data::link_date(int index) const { return start_date().addDays(index); }