1
0
mirror of https://github.com/ElvishArtisan/rivendell.git synced 2025-04-17 14:42:36 +02:00

2016-04-25 Fred Gleason <fredg@paravelsystems.com>

* Added a 'Cut Log' report in 'lib/export_cutlog.cpp'.
	* Added 'DESCRIPTION' and 'OUTCUE' fields to the '_SRT' table
	schema.
	* Incremented the database version to 255.
This commit is contained in:
Fred Gleason 2016-04-25 17:47:22 -04:00
parent c837ab24ae
commit 512d1a2575
21 changed files with 344 additions and 89 deletions

@ -15077,3 +15077,8 @@
'rlm/rlm_walltime.c'.
2016-04-25 Fred Gleason <fredg@paravelsystems.com>
* Fixed a regression in 'ripcd/btsrc16.cpp' that broke RML processing.
2016-04-25 Fred Gleason <fredg@paravelsystems.com>
* Added a 'Cut Log' report in 'lib/export_cutlog.cpp'.
* Added 'DESCRIPTION' and 'OUTCUE' fields to the '_SRT' table
schema.
* Incremented the database version to 255.

@ -22,6 +22,8 @@ CONDUCTOR char(64) From CART.CONDUCTOR
USER_DEFINED char(255) From CART.USER_DEFINED
SONG_ID char(32) From CART.SONG_ID
USAGE_CODE int From CART.USAGE_CODE
DESCRIPTION char(64) From CUTS.DESCRIPTION
OUTCUE char(64) From CUTS.OUTCUE
ISRC char(12) From CUTS.ISRC
ISCI char(32) From CUTS.ISCI
STATION_NAME char(64) From STATIONS.NAME

@ -2,9 +2,7 @@
##
## Automake.am for rivendell/lib
##
## (C) Copyright 2002-2006 Fred Gleason <fredg@paravelsystems.com>
##
## $Id: Makefile.am,v 1.132.4.15.2.3 2014/05/28 21:21:39 cvs Exp $
## (C) Copyright 2002-2016 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
@ -52,6 +50,7 @@ lib_LTLIBRARIES = librd.la
dist_librd_la_SOURCES = dbversion.h\
gpio.h\
export_bmiemr.cpp\
export_cutlog.cpp\
export_deltaflex.cpp\
export_musicclassical.cpp\
export_musicplayout.cpp\

@ -2,9 +2,7 @@
//
// The Current Database Schema Version for Rivendell
//
// (C) Copyright 2002-2008 Fred Gleason <fredg@paravelsystems.com>
//
// $Id: dbversion.h,v 1.34.4.29.2.4 2014/06/03 18:23:34 cvs Exp $
// (C) Copyright 2002-2016 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
@ -26,7 +24,7 @@
/*
* Current Database Version
*/
#define RD_VERSION_DATABASE 254
#define RD_VERSION_DATABASE 255
#endif // DBVERSION_H

136
lib/export_cutlog.cpp Normal file

@ -0,0 +1,136 @@
// export_cutlog.cpp
//
// Export a Rivendell Cut Report.
//
// (C) Copyright 2002-2016 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
// published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public
// License along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
#include <stdio.h>
#include <qfile.h>
#include <qmessagebox.h>
#include <rddb.h>
#include <rdlog_line.h>
#include <rdairplay_conf.h>
#include <rdconf.h>
#include <rddatedecode.h>
#include <rdreport.h>
bool RDReport::ExportCutLog(const QDate &startdate,const QDate &enddate,
const QString &mixtable)
{
QString sql;
RDSqlQuery *q;
FILE *f;
QString cut;
QString str;
QString cart_fmt;
QString cart_num;
#ifdef WIN32
QString filename=RDDateDecode(exportPath(RDReport::Windows),startdate);
#else
QString filename=RDDateDecode(exportPath(RDReport::Linux),startdate);
#endif
QFile file(filename);
if((f=fopen((const char *)filename,"w"))==NULL) {
report_error_code=RDReport::ErrorCantOpen;
return false;
}
if(useLeadingZeros()) {
cart_fmt=QString().sprintf("%%0%uu",cartDigits());
}
else {
cart_fmt="%6u";
}
sql=QString("select ")+
"`"+mixtable+"_SRT`.LENGTH,"+ // 00
"`"+mixtable+"_SRT`.CART_NUMBER,"+ // 01
"`"+mixtable+"_SRT`.EVENT_DATETIME,"+ // 02
"`"+mixtable+"_SRT`.EVENT_TYPE,"+ // 03
"`"+mixtable+"_SRT`.EXT_START_TIME,"+ // 04
"`"+mixtable+"_SRT`.EXT_LENGTH,"+ // 05
"`"+mixtable+"_SRT`.EXT_DATA,"+ // 06
"`"+mixtable+"_SRT`.EXT_EVENT_ID,"+ // 07
"`"+mixtable+"_SRT`.TITLE,"+ // 08
"CART.FORCED_LENGTH,"+ // 09
"`"+mixtable+"_SRT`.STATION_NAME,"+ // 10
"`"+mixtable+"_SRT`.PLAY_SOURCE,"+ // 11
"`"+mixtable+"_SRT`.CUT_NUMBER,"+ // 12
"`"+mixtable+"_SRT`.DESCRIPTION "+ // 13
"from `"+mixtable+"_SRT` left join CART "+
"on `"+mixtable+"_SRT`.CART_NUMBER=CART.NUMBER "+
"order by EVENT_DATETIME";
q=new RDSqlQuery(sql);
//
// Write File Header
//
if(startdate==enddate) {
fprintf(f," Rivendell RDAirPlay Cut Report for %s\n",
(const char *)startdate.toString("MM/dd/yyyy"));
}
else {
fprintf(f," Rivendell RDAirPlay Cut Report for %s - %s\n",
(const char *)startdate.toString("MM/dd/yyyy"),
(const char *)enddate.toString("MM/dd/yyyy"));
}
str=QString().sprintf("%s -- %s\n",(const char *)name(),
(const char *)description());
for(unsigned i=0;i<(80-str.length())/2;i++) {
fprintf(f," ");
}
fprintf(f,"%s\n",(const char *)str);
fprintf(f,"--Time-- -Cart- --Title---------------- Cut --Description------- -Len-\n");
//
// Write Data Rows
//
while(q->next()) {
if(q->value(12).toInt()>0) {
cut=QString().sprintf("%03d",q->value(12).toInt());
}
else {
if((RDAirPlayConf::TrafficAction)q->value(3).toInt()==
RDAirPlayConf::TrafficMacro) {
cut="rml";
}
else {
cut=" ";
}
}
cart_num=QString().sprintf(cart_fmt,q->value(1).toUInt());
QString desc=q->value(13).toString();
if(desc.isEmpty()) {
desc=" ";
}
fprintf(f,"%8s %6s %-23s %3s %-20s %5s",
(const char *)q->value(2).toTime().toString("hh:mm:ss"),
(const char *)cart_num,
(const char *)q->value(8).toString().left(23),
(const char *)cut,
(const char *)desc.left(20),
(const char *)RDGetTimeLength(q->value(9).toInt(),true,false).
right(5));
fprintf(f,"\n");
}
delete q;
fclose(f);
report_error_code=RDReport::ErrorOk;
return true;
}

@ -427,6 +427,10 @@
<source>Spin Count</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cut Log</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAddCart</name>

@ -423,6 +423,10 @@
<source>Spin Count</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cut Log</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAddCart</name>

@ -423,6 +423,10 @@
<source>Spin Count</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cut Log</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAddCart</name>

@ -409,6 +409,10 @@
<source>Spin Count</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cut Log</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAddCart</name>

@ -423,6 +423,10 @@
<source>Spin Count</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cut Log</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAddCart</name>

@ -423,6 +423,10 @@
<source>Spin Count</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cut Log</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAddCart</name>

@ -423,6 +423,10 @@
<source>Spin Count</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cut Log</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RDAddCart</name>

@ -670,46 +670,50 @@ void RDCartSlot::LogPlayout(RDPlayDeck::State state)
length+=86400000;
datetime.setDate(datetime.date().addDays(-1));
}
QString svctablename=slot_svcname;
svctablename.replace(" ","_");
sql=QString("insert into `")+svctablename+"_SRT` set "+
QString().sprintf("LENGTH=%d,LOG_ID=%d,CART_NUMBER=%u,EVENT_TYPE=%d,\
EVENT_SOURCE=%d,EXT_LENGTH=%d,PLAY_SOURCE=%d,\
if(!slot_svcname.isEmpty()) {
QString svctablename=slot_svcname;
svctablename.replace(" ","_");
sql=QString("insert into `")+svctablename+"_SRT` set "+
QString().sprintf("LENGTH=%d,LOG_ID=%d,CART_NUMBER=%u,EVENT_TYPE=%d,\
EVENT_SOURCE=%d,EXT_LENGTH=%d,PLAY_SOURCE=%d, \
CUT_NUMBER=%d,USAGE_CODE=%d,START_SOURCE=%d,",
length,
slot_number+1,
slot_logline->cartNumber(),
action,
slot_logline->source(),
slot_logline->extLength(),
RDLogLine::CartSlot,
slot_logline->cutNumber(),
slot_logline->usageCode(),
slot_logline->startSource())+
"STATION_NAME=\""+RDEscapeString(slot_station->name())+"\","+
"EVENT_DATETIME=\""+datetime.toString("yyyy-MM-dd")+
" "+slot_logline->startTime(RDLogLine::Actual).toString("hh:mm:ss")+"\","+
"EXT_START_TIME=\""+slot_logline->extStartTime().toString("hh:mm:ss")+"\","+
"EXT_DATA=\""+RDEscapeString(slot_logline->extData())+"\","+
"EXT_EVENT_ID=\""+RDEscapeString(slot_logline->extEventId())+"\","+
"EXT_ANNC_TYPE=\""+RDEscapeString(slot_logline->extAnncType())+"\","+
"EXT_CART_NAME=\""+RDEscapeString(slot_logline->extCartName())+"\","+
"TITLE=\""+RDEscapeString(slot_logline->title())+"\","+
"ARTIST=\""+RDEscapeString(slot_logline->artist())+"\","+
"SCHEDULED_TIME=\""+slot_logline->startTime(RDLogLine::Logged).
toString("hh:mm:ss")+"\","+
"ISRC=\""+RDEscapeString(slot_logline->isrc())+"\","+
"PUBLISHER=\""+RDEscapeString(slot_logline->publisher())+"\","+
"COMPOSER=\""+RDEscapeString(slot_logline->composer())+"\","+
"ONAIR_FLAG=\""+RDYesNo(slot_ripc->onairFlag())+"\","+
"ALBUM=\""+RDEscapeString(slot_logline->album())+"\","+
"LABEL=\""+RDEscapeString(slot_logline->label())+"\","+
"CONDUCTOR=\""+RDEscapeString(slot_logline->conductor())+"\","+
"USER_DEFINED=\""+RDEscapeString(slot_logline->userDefined())+"\","+
"SONG_ID=\""+RDEscapeString(slot_logline->songId())+"\","+
"ISCI=\""+RDEscapeString(slot_logline->isci())+"\"";
q=new RDSqlQuery(sql);
delete q;
length,
slot_number+1,
slot_logline->cartNumber(),
action,
slot_logline->source(),
slot_logline->extLength(),
RDLogLine::CartSlot,
slot_logline->cutNumber(),
slot_logline->usageCode(),
slot_logline->startSource())+
"STATION_NAME=\""+RDEscapeString(slot_station->name())+"\","+
"EVENT_DATETIME=\""+datetime.toString("yyyy-MM-dd")+
" "+slot_logline->startTime(RDLogLine::Actual).toString("hh:mm:ss")+"\","+
"EXT_START_TIME=\""+slot_logline->extStartTime().toString("hh:mm:ss")+"\","+
"EXT_DATA=\""+RDEscapeString(slot_logline->extData())+"\","+
"EXT_EVENT_ID=\""+RDEscapeString(slot_logline->extEventId())+"\","+
"EXT_ANNC_TYPE=\""+RDEscapeString(slot_logline->extAnncType())+"\","+
"EXT_CART_NAME=\""+RDEscapeString(slot_logline->extCartName())+"\","+
"TITLE=\""+RDEscapeString(slot_logline->title())+"\","+
"ARTIST=\""+RDEscapeString(slot_logline->artist())+"\","+
"SCHEDULED_TIME=\""+slot_logline->startTime(RDLogLine::Logged).
toString("hh:mm:ss")+"\","+
"ISRC=\""+RDEscapeString(slot_logline->isrc())+"\","+
"PUBLISHER=\""+RDEscapeString(slot_logline->publisher())+"\","+
"COMPOSER=\""+RDEscapeString(slot_logline->composer())+"\","+
"ONAIR_FLAG=\""+RDYesNo(slot_ripc->onairFlag())+"\","+
"ALBUM=\""+RDEscapeString(slot_logline->album())+"\","+
"LABEL=\""+RDEscapeString(slot_logline->label())+"\","+
"CONDUCTOR=\""+RDEscapeString(slot_logline->conductor())+"\","+
"USER_DEFINED=\""+RDEscapeString(slot_logline->userDefined())+"\","+
"SONG_ID=\""+RDEscapeString(slot_logline->songId())+"\","+
"DESCRIPTION=\""+RDEscapeString(slot_logline->description())+"\","+
"OUTCUE=\""+RDEscapeString(slot_logline->outcue())+"\","+
"ISCI=\""+RDEscapeString(slot_logline->isci())+"\"";
q=new RDSqlQuery(sql);
delete q;
}
}
void RDCartSlot::ClearTempCart()

@ -114,6 +114,8 @@ QString RDCreateReconciliationTableSql(QString name)
"LABEL char(64),"+
"CONDUCTOR char(64),"+
"USAGE_CODE int,"+
"DESCRIPTION char(64),"+
"OUTCUE char(64),"+
"ISRC char(12),"+
"ISCI char(32),"+
"STATION_NAME char(64),"+

@ -477,35 +477,42 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate,
//
// Selected Fields
//
sql=QString().sprintf("select LENGTH,LOG_ID,CART_NUMBER,STATION_NAME,\
EVENT_DATETIME,EVENT_TYPE,EXT_START_TIME,\
EXT_LENGTH,EXT_DATA,EXT_EVENT_ID,EXT_ANNC_TYPE,\
PLAY_SOURCE,CUT_NUMBER,EVENT_SOURCE,EXT_CART_NAME,\
LOG_NAME,`%s_SRT`.TITLE,`%s_SRT`.ARTIST,\
SCHEDULED_TIME,\
START_SOURCE,`%s_SRT`.PUBLISHER,`%s_SRT`.COMPOSER,\
`%s_SRT`.ALBUM,`%s_SRT`.LABEL,\
`%s_SRT`.ISRC,`%s_SRT`.USAGE_CODE,\
`%s_SRT`.ONAIR_FLAG,`%s_SRT`.ISCI,\
`%s_SRT`.CONDUCTOR,`%s_SRT`.USER_DEFINED,\
`%s_SRT`.SONG_ID from `%s_SRT`\
left join CART on `%s_SRT`.CART_NUMBER=CART.NUMBER \
where ",
(const char *)rec_name,
(const char *)rec_name,
(const char *)rec_name,
(const char *)rec_name,
(const char *)rec_name,
(const char *)rec_name,
(const char *)rec_name,
(const char *)rec_name,
(const char *)rec_name,
(const char *)rec_name,
(const char *)rec_name,
(const char *)rec_name,
(const char *)rec_name,
(const char *)rec_name,
(const char *)rec_name);
sql=QString("select ")+
"LENGTH,"+ // 00
"LOG_ID,"+ // 01
"CART_NUMBER,"+ // 02
"STATION_NAME,"+ // 03
"EVENT_DATETIME,"+ // 04
"EVENT_TYPE,"+ // 05
"EXT_START_TIME,"+ // 06
"EXT_LENGTH,"+ // 07
"EXT_DATA,"+ // 08
"EXT_EVENT_ID,"+ // 09
"EXT_ANNC_TYPE,"+ // 10
"PLAY_SOURCE,"+ // 11
"CUT_NUMBER,"+ // 12
"EVENT_SOURCE,"+ // 13
"EXT_CART_NAME,"+ // 14
"LOG_NAME,"+ // 15
"`"+rec_name+"_SRT`.TITLE,"+ // 16
"`"+rec_name+"_SRT`.ARTIST,"+ // 17
"SCHEDULED_TIME,"+ // 18
"START_SOURCE,"+ // 19
"`"+rec_name+"_SRT`.PUBLISHER,"+ // 20
"`"+rec_name+"_SRT`.COMPOSER,"+ // 21
"`"+rec_name+"_SRT`.ALBUM,"+ // 22
"`"+rec_name+"_SRT`.LABEL,"+ // 23
"`"+rec_name+"_SRT`.ISRC,"+ // 24
"`"+rec_name+"_SRT`.USAGE_CODE,"+ // 25
"`"+rec_name+"_SRT`.ONAIR_FLAG,"+ // 26
"`"+rec_name+"_SRT`.ISCI,"+ // 27
"`"+rec_name+"_SRT`.CONDUCTOR,"+ // 28
"`"+rec_name+"_SRT`.USER_DEFINED,"+ // 29
"`"+rec_name+"_SRT`.SONG_ID,"+ // 30
"`"+rec_name+"_SRT`.DESCRIPTION,"+ // 31
"`"+rec_name+"_SRT`.OUTCUE "+ // 32
"from `"+rec_name+"_SRT` left join CART "+
"on `"+rec_name+"_SRT`.CART_NUMBER=CART.NUMBER where ";
//
// OnAir Flag Filter
@ -542,7 +549,6 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate,
}
sql=sql.left(sql.length()-2);
sql+=")";
//printf("SQL: %s\n",(const char *)sql);
q1=new RDSqlQuery(sql);
while(q1->next()) {
sql=QString("insert into `")+mixname+"_SRT` "+
@ -580,7 +586,9 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate,
"ISCI=\""+RDEscapeString(q1->value(27).toString())+"\","+
"CONDUCTOR=\""+RDEscapeString(q1->value(28).toString())+"\","+
"USER_DEFINED=\""+RDEscapeString(q1->value(29).toString())+"\","+
"SONG_ID=\""+RDEscapeString(q1->value(30).toString())+"\"";
"SONG_ID=\""+RDEscapeString(q1->value(30).toString())+"\","+
"DESCRIPTION=\""+RDEscapeString(q1->value(31).toString())+"\","+
"OUTCUE=\""+RDEscapeString(q1->value(32).toString())+"\"";
q2=new RDSqlQuery(sql);
delete q2;
}
@ -654,6 +662,10 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate,
ret=ExportTechnical(startdate,enddate,false,true,mixname);
break;
case RDReport::CutLog:
ret=ExportCutLog(startdate,enddate,mixname);
break;
default:
return false;
break;
@ -670,6 +682,7 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate,
sql=QString().sprintf("drop table `%s_SRT`",(const char *)mixname);
q=new RDSqlQuery(sql);
delete q;
return ret;
}
@ -728,6 +741,9 @@ QString RDReport::filterText(RDReport::ExportFilter filter)
case RDReport::WideOrbit:
return QObject::tr("WideOrbit Traffic Reconciliation");
case RDReport::CutLog:
return QObject::tr("Cut Log");
default:
return QObject::tr("Unknown");
}
@ -770,6 +786,7 @@ bool RDReport::multipleDaysAllowed(RDReport::ExportFilter filter)
case RDReport::NaturalLog:
case RDReport::SpinCount:
case RDReport::WideOrbit:
case RDReport::CutLog:
return false;
case RDReport::BmiEmr:
@ -799,6 +816,7 @@ bool RDReport::multipleMonthsAllowed(RDReport::ExportFilter filter)
case RDReport::MusicPlayout:
case RDReport::NaturalLog:
case RDReport::WideOrbit:
case RDReport::CutLog:
return false;
case RDReport::MusicSummary:

@ -37,8 +37,8 @@ class RDReport
SoundExchange=4,RadioTraffic=5,VisualTraffic=6,
CounterPoint=7,Music1=8,MusicSummary=9,WideOrbit=10,
NprSoundExchange=11,MusicPlayout=12,NaturalLog=13,
MusicClassical=14,MrMaster=15,SpinCount=16,
LastFilter=17};
MusicClassical=14,MrMaster=15,SpinCount=16,CutLog=17,
LastFilter=18};
enum ExportOs {Linux=0,Windows=1};
enum ExportType {Generic=0,Traffic=1,Music=2};
enum StationType {TypeOther=0,TypeAm=1,TypeFm=2,TypeLast=3};
@ -117,6 +117,8 @@ class RDReport
const QString &mixtable);
bool ExportSpinCount(const QDate &startdate,const QDate &enddate,
const QString &mixtable);
bool ExportCutLog(const QDate &startdate,const QDate &enddate,
const QString &mixtable);
QString StringField(const QString &str,const QString &null_text="") const;
void SetRow(const QString &param,const QString &value) const;
void SetRow(const QString &param,int value) const;

@ -2,9 +2,7 @@
//
// The sound panel widget for RDAirPlay
//
// (C) Copyright 2002-2004 Fred Gleason <fredg@paravelsystems.com>
//
// $Id: rdsound_panel.cpp,v 1.62.6.13.2.3 2014/05/20 22:39:35 cvs Exp $
// (C) Copyright 2002-2016 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
@ -1468,10 +1466,22 @@ void RDSoundPanel::LogTraffic(RDPanelButton *button)
RDSqlQuery *q;
QDateTime datetime(QDate::currentDate(),QTime::currentTime());
sql=QString("select CART.TITLE,CART.ARTIST,CART.PUBLISHER,")+
"CART.COMPOSER,CART.USAGE_CODE,CUTS.ISRC,"+
"CART.ALBUM,CART.LABEL,CUTS.ISCI,CART.CONDUCTOR,CART.USER_DEFINED,"
"CART.SONG_ID from CART left join CUTS "+
sql=QString("select ")+
"CART.TITLE,"+ // 00
"CART.ARTIST,"+ // 01
"CART.PUBLISHER,"+ // 02
"CART.COMPOSER,"+ // 03
"CART.USAGE_CODE,"+ // 04
"CUTS.ISRC,"+ // 05
"CART.ALBUM,"+ // 06
"CART.LABEL,"+ // 07
"CUTS.ISCI,"+ // 08
"CART.CONDUCTOR,"+ // 09
"CART.USER_DEFINED,"+ // 10
"CART.SONG_ID,"+ // 11
"CUTS.DESCRIPTION,"+ // 12
"CUTS.OUTCUE "+ // 13
"from CART left join CUTS "+
"on CART.NUMBER=CUTS.CART_NUMBER where "+
"CUTS.CUT_NAME=\""+RDEscapeString(button->cutName())+"\"";
q=new RDSqlQuery(sql);
@ -1497,6 +1507,8 @@ void RDSoundPanel::LogTraffic(RDPanelButton *button)
"ALBUM=\""+RDEscapeString(q->value(6).toString().utf8())+"\","+
"LABEL=\""+RDEscapeString(q->value(7).toString().utf8())+"\","+
"ISCI=\""+RDEscapeString(q->value(8).toString().utf8())+"\","+
"DESCRIPTION=\""+RDEscapeString(q->value(12).toString().utf8())+"\","+
"OUTCUE=\""+RDEscapeString(q->value(13).toString().utf8())+"\","+
"CONDUCTOR=\""+RDEscapeString(q->value(9).toString().utf8())+"\","+
"USER_DEFINED=\""+RDEscapeString(q->value(10).toString().utf8())+"\","+
"SONG_ID=\""+RDEscapeString(q->value(11).toString().utf8())+"\","+

@ -8132,6 +8132,24 @@ int UpdateDb(int ver)
delete q;
}
if(ver<255) {
sql=QString("select NAME from SERVICES");
q=new QSqlQuery(sql);
while(q->next()) {
sql=QString("alter table `")+RDSvc::svcTableName(q->value(0).toString())+
"` add column DESCRIPTION char(64) after USAGE_CODE";
q1=new QSqlQuery(sql);
delete q1;
sql=QString("alter table `")+RDSvc::svcTableName(q->value(0).toString())+
"` add column OUTCUE char(64) after DESCRIPTION";
q1=new QSqlQuery(sql);
delete q1;
}
delete q;
}
// **** End of version updates ****

@ -2,9 +2,7 @@
//
// Add an entry to the reconciliation table.
//
// (C) Copyright 2002-2005 Fred Gleason <fredg@paravelsystems.com>
//
// $Id: log_traffic.cpp,v 1.20.8.2.2.3 2014/06/24 18:27:05 cvs Exp $
// (C) Copyright 2002-2016 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
@ -80,6 +78,8 @@ void LogTraffic(const QString &svcname,const QString &logname,
"USER_DEFINED=\""+RDEscapeString(logline->userDefined().utf8())+"\","+
"CONDUCTOR=\""+RDEscapeString(logline->conductor().utf8())+"\","+
"SONG_ID=\""+RDEscapeString(logline->songId().utf8())+"\","+
"DESCRIPTION=\""+RDEscapeString(logline->description().utf8())+"\","+
"OUTCUE=\""+RDEscapeString(logline->outcue().utf8())+"\","+
"ISCI=\""+RDEscapeString(logline->isci().utf8())+"\"";
q=new RDSqlQuery(sql);

@ -31,6 +31,7 @@
#include <rdcreate_log.h>
#include <rdescape_string.h>
#include <rdevent.h>
#include <rdsvc.h>
#include "rdrevert.h"
@ -162,6 +163,10 @@ void MainObject::Revert(int schema) const
case 254:
Revert254();
break;
case 255:
Revert255();
break;
}
}
@ -376,6 +381,31 @@ void MainObject::Revert254() const
}
void MainObject::Revert255() const
{
QString sql;
QSqlQuery *q;
QSqlQuery *q1;
sql=QString("select NAME from SERVICES");
q=new QSqlQuery(sql);
while(q->next()) {
sql=QString("alter table `")+RDSvc::svcTableName(q->value(0).toString())+
"` drop column DESCRIPTION";
q1=new QSqlQuery(sql);
delete q1;
sql=QString("alter table `")+RDSvc::svcTableName(q->value(0).toString())+
"` drop column OUTCUE";
q1=new QSqlQuery(sql);
delete q1;
}
delete q;
SetVersion(254);
}
int MainObject::GetVersion() const
{
QString sql;

@ -50,6 +50,7 @@ class MainObject : public QObject
void Revert252() const;
void Revert253() const;
void Revert254() const;
void Revert255() const;
int GetVersion() const;
void SetVersion(int schema) const;
int MapSchema(const QString &ver);