2022-02-12 Fred Gleason <fredg@paravelsystems.com>

* Added CSV generation routines in 'lib/rdcsv.[cpp|h]'.
	* Added a 'Log Listing (CSV)' report to rdlogedit(1).

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason
2022-02-12 11:54:28 -05:00
parent b778114266
commit 1fd581a442
7 changed files with 237 additions and 6 deletions

View File

@@ -2,7 +2,7 @@
//
// List and Generate Log Reports
//
// (C) Copyright 2002-2021 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2022 Fred Gleason <fredg@paravelsystems.com>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
@@ -22,6 +22,7 @@
#include <QPushButton>
#include <rdconf.h>
#include <rdcsv.h>
#include <rddatedialog.h>
#include <rdreport.h>
#include <rdtextfile.h>
@@ -57,7 +58,8 @@ ListReports::ListReports(const QString &logname,const QString &description,
list_reports_box=new QComboBox(this);
list_reports_box->setGeometry(50,10,sizeHint().width()-60,19);
list_reports_box->insertItem(0,tr("Log Listing"));
list_reports_box->insertItem(1,tr("Log Exception Report"));
list_reports_box->insertItem(1,tr("Log Listing (CSV)"));
list_reports_box->insertItem(2,tr("Log Exception Report"));
QLabel *list_reports_label=new QLabel(tr("Type:"),this);
list_reports_label->setGeometry(10,10,35,19);
list_reports_label->setFont(labelFont());
@@ -138,7 +140,11 @@ void ListReports::generateData()
GenerateLogReport(&report);
break;
case 1: // XLoad Report
case 1: // Event Report
GenerateLogCsvReport(&report);
break;
case 2: // XLoad Report
GenerateExceptionReport(&report,list_date_edit->date());
break;
@@ -288,6 +294,143 @@ void ListReports::GenerateLogReport(QString *report)
}
void ListReports::GenerateLogCsvReport(QString *report)
{
RDLogLine *logline;
//
// Column Names
//
*report+=RDCsvField("TYPE");
*report+=RDCsvField("START_TIME");
*report+=RDCsvField("TIME_TYPE");
*report+=RDCsvField("TRANS_TYPE");
*report+=RDCsvField("CART_NUMBER");
*report+=RDCsvField("GROUP_NAME");
*report+=RDCsvField("LENGTH");
*report+=RDCsvField("TITLE");
*report+=RDCsvField("ARTIST");
*report+=RDCsvField("CLIENT");
*report+=RDCsvField("AGENCY");
*report+=RDCsvField("ALBUM");
*report+=RDCsvField("LABEL");
*report+=RDCsvField("CONDUCTOR");
*report+=RDCsvField("COMPOSER");
*report+=RDCsvField("PUBLISHER");
*report+=RDCsvField("USER_DEFINED");
*report+=RDCsvField("SONG_ID");
*report+=RDCsvField("USAGE_CODE");
*report+=RDCsvField("SOURCE");
*report+=RDCsvField("EXT_DATA");
*report+=RDCsvField("EXT_EVENT_ID");
*report+=RDCsvField("EXT_ANNC_TYPE");
*report+=RDCsvField("LINE_ID");
*report+=RDCsvField("LINE",true);
for(int i=0;i<list_model->lineCount();i++) {
logline=list_model->logLine(i);
//
// Event Type
//
*report+=RDCsvField(RDLogLine::typeText(logline->type()));
//
// Time
//
if(logline->startTime(RDLogLine::Imported).isNull()||
(logline->startTime(RDLogLine::Imported)==QTime(0,0,0,0))) {
*report+=RDCsvField();
}
else {
*report+=RDCsvField(logline->startTime(RDLogLine::Imported).
toString("hh:mm:ss"));
}
if(logline->timeType()==RDLogLine::Hard) {
*report+=RDCsvField("Hard");
}
else {
*report+=RDCsvField("Relative");
}
//
// Transition Type
//
*report+=RDCsvField(RDLogLine::transText(logline->transType()));
switch(logline->type()) {
case RDLogLine::Cart:
case RDLogLine::Macro:
*report+=RDCsvField(logline->cartNumber());
*report+=RDCsvField(logline->groupName());
*report+=RDCsvField(RDGetTimeLength(logline->forcedLength(),false,false));
*report+=RDCsvField(logline->title());
*report+=RDCsvField(logline->artist());
break;
case RDLogLine::Marker:
case RDLogLine::Track:
*report+=RDCsvField();
*report+=RDCsvField();
*report+=RDCsvField(":00");
*report+=RDCsvField(logline->markerComment());
*report+=RDCsvField();
break;
case RDLogLine::TrafficLink:
*report+=RDCsvField();
*report+=RDCsvField();
*report+=RDCsvField(":00");
*report+=RDCsvField(tr("Traffic Import"));
*report+=RDCsvField();
break;
case RDLogLine::MusicLink:
*report+=RDCsvField();
*report+=RDCsvField();
*report+=RDCsvField(":00");
*report+=RDCsvField(tr("Music Import"));
*report+=RDCsvField();
break;
case RDLogLine::Chain:
*report+=RDCsvField();
*report+=RDCsvField();
*report+=RDCsvField();
*report+=RDCsvField(logline->markerLabel());
*report+=RDCsvField();
break;
case RDLogLine::OpenBracket:
case RDLogLine::CloseBracket:
case RDLogLine::UnknownType:
*report+=RDCsvField();
*report+=RDCsvField();
*report+=RDCsvField();
*report+=RDCsvField();
*report+=RDCsvField();
break;
}
*report+=RDCsvField(logline->client());
*report+=RDCsvField(logline->agency());
*report+=RDCsvField(logline->album());
*report+=RDCsvField(logline->label());
*report+=RDCsvField(logline->conductor());
*report+=RDCsvField(logline->composer());
*report+=RDCsvField(logline->publisher());
*report+=RDCsvField(logline->userDefined());
*report+=RDCsvField(logline->songId());
*report+=RDCsvField(RDCart::usageText(logline->usageCode()));
*report+=RDCsvField(RDLogLine::sourceText(logline->source()));
*report+=RDCsvField(logline->extData());
*report+=RDCsvField(logline->extEventId());
*report+=RDCsvField(logline->extAnncType());
*report+=RDCsvField(logline->id());
*report+=RDCsvField(i,true);
}
}
void ListReports::GenerateExceptionReport(QString *report,const QDate &date)
{
int errs=list_model->validate(report,date);

View File

@@ -2,7 +2,7 @@
//
// List and Generate Log Reports
//
// (C) Copyright 2002-2021 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2022 Fred Gleason <fredg@paravelsystems.com>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
@@ -47,6 +47,7 @@ class ListReports : public RDDialog
private:
void GenerateLogReport(QString *report);
void GenerateLogCsvReport(QString *report);
void GenerateExceptionReport(QString *report,const QDate &date);
QComboBox *list_reports_box;
QString list_log_name;