Export to CSV with Semester begin & end

all bugs that i found fixed.
now when user selects "export to csv" he will be prompt
to input the begining and the end of the semester.

the csv file will populate the whole semester!
just one click and you are done.

@liranbg (Liran) please check on Windows and OSX.
linux is rocking!

let me know if you need anything else.
sagi
This commit is contained in:
Sagi Dayan 2014-09-09 23:31:48 +03:00
parent eb5de02be2
commit 5c92a3f112
6 changed files with 29 additions and 436 deletions

View file

@ -11,7 +11,7 @@ void CalendarManager::setCalendar(std::string html)
}
void CalendarManager::exportCalendarCSV(CalendarDialog *calDialog)
{
if(CSV_Exporter::exportCalendar(this->caliSchedPtr))
if(CSV_Exporter::exportCalendar(this->caliSchedPtr, calDialog))
{
QMessageBox msgBox;
msgBox.setText("<center>Exported Successfuly!<br><b>HaazZaA!!");

View file

@ -346,7 +346,7 @@ void MainScreen::on_exportToCVSBtn_clicked()
if(calDialog.ok())
this->calendar->exportCalendarCSV(&calDialog);
else
showMSG("Somthig was not right with the dates you chose... try again");
showMSG("Somthig was not right with the dates you have chosen... try again");
}
}

View file

@ -1,394 +0,0 @@
#include "mainscreen.h"
#include "ui_mainscreen.h"
MainScreen::MainScreen(QWidget *parent) :QMainWindow(parent), ui(new Ui::MainScreen)
{
ui->setupUi(this);
//this->setFixedSize(this->size()); //main not resizeable
//Login Tab
ui->pswdLineEdit->setEchoMode((QLineEdit::Password));
//Status Bar
ui->actionEnglish->setChecked(true);
ui->statusBar->setStyleSheet("QStatusBar::item { border: 0px solid black };");
ButtomStatusLabel = new QLabel(this);
statusLabel = new QLabel(this);
ui->statusBar->setMaximumSize(this->geometry().width(),StatusIconHeight);
ui->statusBar->addPermanentWidget(ButtomStatusLabel,0);
ui->statusBar->addPermanentWidget(statusLabel,1);
setLabelConnectionStatus(jceLogin::jceStatus::JCE_NOT_CONNECTED);
//Course, Setting, Calendar Tab
calendarSchedule * calendarSchedulePtr = new calendarSchedule();
ui->calendarGridLayoutMain->addWidget(calendarSchedulePtr);
ui->CoursesTab->setDisabled(true);
ui->avgLCD->setPalette(QPalette(QPalette::WindowText,Qt::blue));
//Pointer allocating
this->userLoginSetting = new user("","");
this->courseTableMgr = new coursesTableManager(ui->coursesTable,userLoginSetting);
this->loginHandel = new loginHandler(userLoginSetting);
this->calendar = new CalendarManager(calendarSchedulePtr);
this->data = new SaveData();
//check login File
//SaveData::init(); --> No need. constructor dose everything.
if (data->isSaved())
{
ui->usrnmLineEdit->setText(data->getUsername());
ui->pswdLineEdit->setText(data->getPassword());
ui->keepLogin->setChecked(true);
}
//Local Check and ui setting.
if(data->getLocal() == "en")
{
ui->actionHebrew->setChecked(false);
ui->actionOS_Default->setChecked(false);
ui->actionEnglish->setChecked(true);
}else if(data->getLocal() == "he"){
ui->actionHebrew->setChecked(true);
ui->actionOS_Default->setChecked(false);
ui->actionEnglish->setChecked(false);
}else{
ui->actionHebrew->setChecked(false);
ui->actionOS_Default->setChecked(true);
ui->actionEnglish->setChecked(false);
}
}
MainScreen::~MainScreen()
{
delete userLoginSetting;
delete loginHandel;
delete ui;
//Delete save data
delete data;
}
void MainScreen::on_loginButton_clicked()
{
if (loginHandel->isLoggedInFlag())
uiSetDisconnectMode();
else
uiSetConnectMode();
}
void MainScreen::on_getCalendarBtn_clicked()
{
int status = 0;
if (loginHandel->isLoggedInFlag())
{
if ((status = loginHandel->makeCalendarRequest(ui->spinBoxYear->value(),ui->spinBoxSemester->value())) == jceLogin::JCE_GRADE_PAGE_PASSED)
{
//Use it for debug. add plain text and change the object name to 'plainTextEdit' so you will get the html request
//ui->plainTextEdit->setPlainText(loginHandel->getCurrentPageContect());
calendar->resetTable();
calendar->setCalendar(loginHandel->getCurrentPageContect().toStdString());
}
else if (status == jceLogin::JCE_NOT_CONNECTED)
{
QMessageBox::critical(this,tr("Error"),tr("Not Connected"));
}
}
}
void MainScreen::on_ratesButton_clicked()
{
std::string pageString;
int status = 0;
if (loginHandel->isLoggedInFlag())
{
if ((status = loginHandel->makeGradeRequest(ui->spinBoxCoursesFromYear->value(),ui->spinBoxCoursesToYear->value(),ui->spinBoxCoursesFromSemester->value(),ui->spinBoxCoursesToSemester->value())) == jceLogin::JCE_GRADE_PAGE_PASSED)
{
pageString = loginHandel->getCurrentPageContect().toStdString();
courseTableMgr->setCoursesList(pageString);
courseTableMgr->insertJceCoursesIntoTable();
}
else if (status == jceLogin::JCE_NOT_CONNECTED)
{
QMessageBox::critical(this,tr("Error"),tr("Not Connected"));
}
}
}
void MainScreen::on_checkBoxCoursesInfluence_toggled(bool checked)
{
this->userLoginSetting->setInfluenceCourseOnly(checked);
this->courseTableMgr->influnceCourseChanged(checked);
}
void MainScreen::on_spinBoxCoursesFromYear_editingFinished()
{
if (ui->spinBoxCoursesFromYear->value() > ui->spinBoxCoursesToYear->value())
{
ui->spinBoxCoursesFromYear->setValue(ui->spinBoxCoursesToYear->value());
ui->spinBoxCoursesFromYear->setFocus();
}
}
void MainScreen::on_spinBoxCoursesToYear_editingFinished()
{
if (ui->spinBoxCoursesFromYear->value() > ui->spinBoxCoursesToYear->value())
{
ui->spinBoxCoursesToYear->setValue(ui->spinBoxCoursesFromYear->value());
ui->spinBoxCoursesToYear->setFocus();
}
}
void MainScreen::on_spinBoxCoursesFromSemester_editingFinished()
{
if (ui->spinBoxCoursesFromYear->value() == ui->spinBoxCoursesToYear->value())
{
if (ui->spinBoxCoursesFromSemester->value() > ui->spinBoxCoursesToSemester->value())
{
ui->spinBoxCoursesFromSemester->setValue(ui->spinBoxCoursesToSemester->value());
ui->spinBoxCoursesFromSemester->setFocus();
}
}
}
void MainScreen::on_spinBoxCoursesToSemester_editingFinished()
{
if (ui->spinBoxCoursesFromYear->value() == ui->spinBoxCoursesToYear->value())
{
if (ui->spinBoxCoursesFromSemester->value() > ui->spinBoxCoursesToSemester->value())
{
ui->spinBoxCoursesToSemester->setValue(ui->spinBoxCoursesFromSemester->value());
ui->spinBoxCoursesToSemester->setFocus();
}
}
}
void MainScreen::on_coursesTable_itemChanged(QTableWidgetItem *item)
{
if (this->courseTableMgr->changes(item->text(),item->row(),item->column()))
ui->avgLCD->display(courseTableMgr->getAvg());
else
QMessageBox::critical(this,"Error","Missmatching data");
}
void MainScreen::on_usrnmLineEdit_editingFinished()
{
ui->usrnmLineEdit->setText(ui->usrnmLineEdit->text().toLower());
}
void MainScreen::uiSetDisconnectMode()
{
setLabelConnectionStatus(jceLogin::jceStatus::JCE_NOT_CONNECTED);
ui->usrnmLineEdit->setText("");
ui->pswdLineEdit->setText("");
ui->usrnmLineEdit->setEnabled(true);
ui->pswdLineEdit->setEnabled(true);
loginHandel->makeDisconnectionRequest();
ui->loginButton->setText("&Login");
ui->getCalendarBtn->setDisabled(true);
ui->exportToCVSBtn->setDisabled(true);
ui->ratesButton->setDisabled(true);
return;
}
void MainScreen::uiSetConnectMode() //fix before distrbute
{
string username;
string password;
if ((ui->usrnmLineEdit->text().isEmpty()) || (ui->pswdLineEdit->text().isEmpty()))
{
//add icon near to username and password to mark it
return;
}
setLabelConnectionStatus(jceLogin::jceStatus::JCE_START_VALIDATING_PROGRESS);
username = ui->usrnmLineEdit->text().toStdString();
password = ui->pswdLineEdit->text().toStdString();
ui->usrnmLineEdit->setDisabled(true);
ui->pswdLineEdit->setDisabled(true);
userLoginSetting->setUsername(username);
userLoginSetting->setPassword(password);
this->loginHandel->setPointers(statusLabel,ui->pswdLineEdit,ui->usrnmLineEdit);
if (loginHandel->makeConnection() == true)
{
setLabelConnectionStatus(jceLogin::jceStatus::JCE_YOU_ARE_IN);
ui->loginButton->setText("&Logout");
ui->ratesButton->setEnabled(true);
ui->CoursesTab->setEnabled(true);
ui->exportToCVSBtn->setEnabled(true);
ui->getCalendarBtn->setEnabled(true);
}
else
{
uiSetDisconnectMode();
}
}
void MainScreen::setLabelConnectionStatus(jceLogin::jceStatus statusDescription)
{
QPixmap iconPix;
switch (statusDescription)
{
case jceLogin::jceStatus::JCE_START_VALIDATING_PROGRESS:
iconPix.load(":/icons/blueStatusIcon.png");
statusLabel->setText(tr("Connecting"));
break;
case jceLogin::jceStatus::JCE_YOU_ARE_IN:
iconPix.load(":/icons/greenStatusIcon.png");
statusLabel->setText(tr("Connected"));
break;
default:
iconPix.load(":/icons/redStatusIcon.png");
statusLabel->setText(tr("Disconnected"));
break;
}
ButtomStatusLabel->setPixmap(iconPix);
this->repaint();
}
void MainScreen::showMSG(QString msg)
{
QMessageBox msgBox;
msgBox.setText(msg);
msgBox.exec();
}
void MainScreen::on_actionCredits_triggered()
{
QMessageBox::about(this, "About", tr("CREDITS-ROOL-UP1") + " v1.0<br><br>"
+ tr("CREDITS-ROOL-UP2")+"<br>GNU LESSER GENERAL PUBLIC LICENSE V2<br>"
+ tr("CREDITS-ROOL-UP3")+"<br>"
"<a href='https://github.com/liranbg/jceAverageCalculator'>jceAverageCalculator Repository</a>"
"<br><br>"+tr("CREDITS-ROOL-UP4")+"<a href='https://github.com/liranbg/jceConnection'> Jce Connection</a><br><br>"
+tr("DevBy")+":"
"<ul>"
"<li><a href='mailto:liranbg@gmail.com'>"+tr("Liran")+"</a></li>"
"<li><a href='mailto:sagidayan@gmail.com'>"+tr("Sagi")+"</a></li>"
"</ul>");
}
void MainScreen::on_clearTableButton_clicked()
{
courseTableMgr->clearTable();
ui->avgLCD->display(courseTableMgr->getAvg());
}
void MainScreen::on_actionExit_triggered()
{
exit(0);
}
void MainScreen::on_keepLogin_clicked()
{
if (ui->keepLogin->isChecked())
{
data->setUsername(ui->usrnmLineEdit->text());
data->setPassword(ui->pswdLineEdit->text());
}
else
data->reset();
}
void MainScreen::on_actionHow_To_triggered()
{
QMessageBox::information(this,"How To",
"<b>How To..</b>"
"<ul>"
"<br><li>"+tr("HELP1")+"</li>"
"<br><li>"+tr("HELP2")+"</li>"
"<br><li>"+tr("HELP3")+"</li>"
"<br><li>"+tr("HELP4")+"</li>"
"<br><li>"+tr("HELP5")+"</li>"
"<br><br>"+tr("HELP6")+
"</ul>");
}
//void MainScreen::on_pushButton_2_clicked()
//{
// if(CSV_Exporter::exportCalendar(this->calendar->getSch()))
// {
// QMessageBox msgBox;
// msgBox.setText("<center>Exported Successfuly!<br><b>HaazZaA!!");
// msgBox.exec();
// }else
// {
// QMessageBox msgBox;
// msgBox.setIcon(QMessageBox::Critical);
// msgBox.setText("<center>Something went wrong...<br></center>Maybe: <ul><li>You Canceled</li><li>Unable to save the File - try again</li></ul><br><br>"
// "<b><center>In case of a serious problem, please file a bug report.<br>thank you. OpenJCE teem");
// msgBox.exec();
// }
//}
void MainScreen::on_exportToCVSBtn_clicked()
{
if (loginHandel->isLoggedInFlag())
{
CalendarDialog calDialog;
int buttonClicked = calDialog.exec();
if(buttonClicked == 0)
return;
//calDialog.getStartDate(),calDialog.getEndDate()
if(calDialog.ok())
this->calendar->exportCalendarCSV(&calDialog);
else
showMSG("Somthig was not right with the dates you have chosen... try again");
}
}
void MainScreen::on_actionHebrew_triggered()
{
if (ui->actionEnglish->isChecked() || ui->actionOS_Default->isChecked())
{
ui->actionEnglish->setChecked(false);
ui->actionOS_Default->setChecked(false);
qDebug() << "Changed Language to hebrew";
data->setLocal("he");
showMSG("ההגדרות שלך יכנסו לתוקף בהפעלה הבאה של התוכנית");
}
else
ui->actionHebrew->setChecked(true);
}
void MainScreen::on_actionEnglish_triggered()
{
if (ui->actionHebrew->isChecked() || ui->actionOS_Default->isChecked())
{
ui->actionHebrew->setChecked(false);
ui->actionOS_Default->setChecked(false);
qDebug() << "Changed Language to English";
data->setLocal("en");
showMSG("Your settings will take effect next time you start the program");
}
else
ui->actionEnglish->setChecked(true);
}
void MainScreen::on_actionOS_Default_triggered()
{
if (ui->actionHebrew->isChecked() || ui->actionEnglish->isChecked())
{
ui->actionHebrew->setChecked(false);
ui->actionEnglish->setChecked(false);
qDebug() << "Changed Language to OS Default";
data->setLocal("default");
showMSG("Your settings will take effect next time you start the program");
}
else
ui->actionOS_Default->setChecked(true);
}

View file

@ -61,7 +61,7 @@ background: qlineargradient(spread:pad, x1:0.496, y1:0, x2:0.508, y2:1, stop:0 r
<enum>QTabWidget::Rounded</enum>
</property>
<property name="currentIndex">
<number>2</number>
<number>0</number>
</property>
<property name="documentMode">
<bool>false</bool>

View file

@ -5,7 +5,7 @@ CSV_Exporter::CSV_Exporter()
}
bool CSV_Exporter::exportCalendar(calendarSchedule *calSched)
bool CSV_Exporter::exportCalendar(calendarSchedule *calSched, CalendarDialog *cal)
{
qDebug() << "Getting path for csv file from user...";
QString filePath = getFileFath();
@ -39,22 +39,29 @@ bool CSV_Exporter::exportCalendar(calendarSchedule *calSched)
QString name = QString(coursePtr->getName().c_str());
QString room = QString(coursePtr->getRoom().c_str());
QString line = makeLine(name, day, startH, startM, endH, endM, lecturer, room, type);
QDate currentDate = cal->getStartDate();
currentDate = currentDate.addDays(day-1);
for(;currentDate <= cal->getEndDate(); currentDate = currentDate.addDays(7))
{
QString line = makeLine(name, &currentDate, startH, startM, endH, endM, lecturer, room, type);
#ifdef Q_OS_LINUX || Q_OS_UNIX
if(line != NULL)
out << line << char(0x0A);
if(line != NULL)
out << line << char(0x0A);
#endif
#ifdef Q_OS_OSX
if(line != NULL)
out << line << char(0x0A);
if(line != NULL)
out << line << char(0x0A);
#endif
#ifdef Q_OS_WIN
if(line != NULL)
out << line << char(0x0D) << char(0x0A);
if(line != NULL)
out << line << char(0x0D) << char(0x0A);
#endif
}
}
here:
out.flush();
@ -74,10 +81,9 @@ QString CSV_Exporter::getFileFath()
return fileName;
}
QString CSV_Exporter::makeLine(QString name, int day, int startH, int startM, int endH, int endM, QString lecturer, QString room, QString type)
QString CSV_Exporter::makeLine(QString name, QDate *date, int startH, int startM, int endH, int endM, QString lecturer, QString room, QString type)
{
//Creating a CSV text line for Google Calendar/iCal/Outlook
// First day for semester 10/26/2014
QString CSV_line = "";
QString subject = "\"";
@ -86,30 +92,9 @@ QString CSV_Exporter::makeLine(QString name, int day, int startH, int startM, in
subject.append(type);
subject.append("\"");
QString date;
switch (day) {
case 1:
date = "10/26/2014";
break;
case 2:
date = "10/27/2014";
break;
case 3:
date = "10/28/2014";
break;
case 4:
date = "10/29/2014";
break;
case 5:
date = "10/30/2014";
break;
case 6:
date = "10/31/2014";
break;
default:
return NULL;
break;
}
QString dateStr = date->toString("MM/dd/yyyy");
QString start;
start.append(QString::number(startH));
@ -135,13 +120,13 @@ QString CSV_Exporter::makeLine(QString name, int day, int startH, int startM, in
CSV_line.append(subject);
CSV_line.append(",");
CSV_line.append(date);
CSV_line.append(dateStr);
CSV_line.append(",");
CSV_line.append(start);
CSV_line.append(",");
CSV_line.append(date);
CSV_line.append(dateStr);
CSV_line.append(",");
CSV_line.append(end);

View file

@ -8,6 +8,8 @@
#include <QDebug>
#include "../Calendar/calendarSchedule.h"
#include "../Calendar/calendardialog.h"
#define CSV_CALENDAR_HEADER "Subject,Start Date,Start Time,End Date,End Time,Description,Location"
@ -15,12 +17,12 @@ class CSV_Exporter
{
public:
CSV_Exporter();
static bool exportCalendar(calendarSchedule* calSched);
static bool exportCalendar(calendarSchedule* calSched, CalendarDialog *cal);
private:
static QString getFileFath();
static QString makeLine(QString name,int day,int startH,int startM,int endH,int endM,QString lecturer,QString room,QString type);
static QString makeLine(QString name,QDate *date,int startH,int startM,int endH,int endM,QString lecturer,QString room,QString type);
};
#endif // CSV_EXPORTER_H