mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-04-19 07:30:34 +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:
parent
c837ab24ae
commit
512d1a2575
@ -15077,3 +15077,8 @@
|
|||||||
'rlm/rlm_walltime.c'.
|
'rlm/rlm_walltime.c'.
|
||||||
2016-04-25 Fred Gleason <fredg@paravelsystems.com>
|
2016-04-25 Fred Gleason <fredg@paravelsystems.com>
|
||||||
* Fixed a regression in 'ripcd/btsrc16.cpp' that broke RML processing.
|
* 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
|
USER_DEFINED char(255) From CART.USER_DEFINED
|
||||||
SONG_ID char(32) From CART.SONG_ID
|
SONG_ID char(32) From CART.SONG_ID
|
||||||
USAGE_CODE int From CART.USAGE_CODE
|
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
|
ISRC char(12) From CUTS.ISRC
|
||||||
ISCI char(32) From CUTS.ISCI
|
ISCI char(32) From CUTS.ISCI
|
||||||
STATION_NAME char(64) From STATIONS.NAME
|
STATION_NAME char(64) From STATIONS.NAME
|
||||||
|
@ -2,9 +2,7 @@
|
|||||||
##
|
##
|
||||||
## Automake.am for rivendell/lib
|
## Automake.am for rivendell/lib
|
||||||
##
|
##
|
||||||
## (C) Copyright 2002-2006 Fred Gleason <fredg@paravelsystems.com>
|
## (C) Copyright 2002-2016 Fred Gleason <fredg@paravelsystems.com>
|
||||||
##
|
|
||||||
## $Id: Makefile.am,v 1.132.4.15.2.3 2014/05/28 21:21:39 cvs Exp $
|
|
||||||
##
|
##
|
||||||
## This program is free software; you can redistribute it and/or modify
|
## 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
|
## 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\
|
dist_librd_la_SOURCES = dbversion.h\
|
||||||
gpio.h\
|
gpio.h\
|
||||||
export_bmiemr.cpp\
|
export_bmiemr.cpp\
|
||||||
|
export_cutlog.cpp\
|
||||||
export_deltaflex.cpp\
|
export_deltaflex.cpp\
|
||||||
export_musicclassical.cpp\
|
export_musicclassical.cpp\
|
||||||
export_musicplayout.cpp\
|
export_musicplayout.cpp\
|
||||||
|
@ -2,9 +2,7 @@
|
|||||||
//
|
//
|
||||||
// The Current Database Schema Version for Rivendell
|
// The Current Database Schema Version for Rivendell
|
||||||
//
|
//
|
||||||
// (C) Copyright 2002-2008 Fred Gleason <fredg@paravelsystems.com>
|
// (C) Copyright 2002-2016 Fred Gleason <fredg@paravelsystems.com>
|
||||||
//
|
|
||||||
// $Id: dbversion.h,v 1.34.4.29.2.4 2014/06/03 18:23:34 cvs Exp $
|
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify
|
// 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
|
// it under the terms of the GNU General Public License version 2 as
|
||||||
@ -26,7 +24,7 @@
|
|||||||
/*
|
/*
|
||||||
* Current Database Version
|
* Current Database Version
|
||||||
*/
|
*/
|
||||||
#define RD_VERSION_DATABASE 254
|
#define RD_VERSION_DATABASE 255
|
||||||
|
|
||||||
|
|
||||||
#endif // DBVERSION_H
|
#endif // DBVERSION_H
|
||||||
|
136
lib/export_cutlog.cpp
Normal file
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>
|
<source>Spin Count</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Cut Log</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>RDAddCart</name>
|
<name>RDAddCart</name>
|
||||||
|
@ -423,6 +423,10 @@
|
|||||||
<source>Spin Count</source>
|
<source>Spin Count</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Cut Log</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>RDAddCart</name>
|
<name>RDAddCart</name>
|
||||||
|
@ -423,6 +423,10 @@
|
|||||||
<source>Spin Count</source>
|
<source>Spin Count</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Cut Log</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>RDAddCart</name>
|
<name>RDAddCart</name>
|
||||||
|
@ -409,6 +409,10 @@
|
|||||||
<source>Spin Count</source>
|
<source>Spin Count</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Cut Log</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>RDAddCart</name>
|
<name>RDAddCart</name>
|
||||||
|
@ -423,6 +423,10 @@
|
|||||||
<source>Spin Count</source>
|
<source>Spin Count</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Cut Log</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>RDAddCart</name>
|
<name>RDAddCart</name>
|
||||||
|
@ -423,6 +423,10 @@
|
|||||||
<source>Spin Count</source>
|
<source>Spin Count</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Cut Log</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>RDAddCart</name>
|
<name>RDAddCart</name>
|
||||||
|
@ -423,6 +423,10 @@
|
|||||||
<source>Spin Count</source>
|
<source>Spin Count</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Cut Log</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>RDAddCart</name>
|
<name>RDAddCart</name>
|
||||||
|
@ -670,46 +670,50 @@ void RDCartSlot::LogPlayout(RDPlayDeck::State state)
|
|||||||
length+=86400000;
|
length+=86400000;
|
||||||
datetime.setDate(datetime.date().addDays(-1));
|
datetime.setDate(datetime.date().addDays(-1));
|
||||||
}
|
}
|
||||||
QString svctablename=slot_svcname;
|
if(!slot_svcname.isEmpty()) {
|
||||||
svctablename.replace(" ","_");
|
QString svctablename=slot_svcname;
|
||||||
sql=QString("insert into `")+svctablename+"_SRT` set "+
|
svctablename.replace(" ","_");
|
||||||
QString().sprintf("LENGTH=%d,LOG_ID=%d,CART_NUMBER=%u,EVENT_TYPE=%d,\
|
sql=QString("insert into `")+svctablename+"_SRT` set "+
|
||||||
EVENT_SOURCE=%d,EXT_LENGTH=%d,PLAY_SOURCE=%d,\
|
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,",
|
CUT_NUMBER=%d,USAGE_CODE=%d,START_SOURCE=%d,",
|
||||||
length,
|
length,
|
||||||
slot_number+1,
|
slot_number+1,
|
||||||
slot_logline->cartNumber(),
|
slot_logline->cartNumber(),
|
||||||
action,
|
action,
|
||||||
slot_logline->source(),
|
slot_logline->source(),
|
||||||
slot_logline->extLength(),
|
slot_logline->extLength(),
|
||||||
RDLogLine::CartSlot,
|
RDLogLine::CartSlot,
|
||||||
slot_logline->cutNumber(),
|
slot_logline->cutNumber(),
|
||||||
slot_logline->usageCode(),
|
slot_logline->usageCode(),
|
||||||
slot_logline->startSource())+
|
slot_logline->startSource())+
|
||||||
"STATION_NAME=\""+RDEscapeString(slot_station->name())+"\","+
|
"STATION_NAME=\""+RDEscapeString(slot_station->name())+"\","+
|
||||||
"EVENT_DATETIME=\""+datetime.toString("yyyy-MM-dd")+
|
"EVENT_DATETIME=\""+datetime.toString("yyyy-MM-dd")+
|
||||||
" "+slot_logline->startTime(RDLogLine::Actual).toString("hh:mm:ss")+"\","+
|
" "+slot_logline->startTime(RDLogLine::Actual).toString("hh:mm:ss")+"\","+
|
||||||
"EXT_START_TIME=\""+slot_logline->extStartTime().toString("hh:mm:ss")+"\","+
|
"EXT_START_TIME=\""+slot_logline->extStartTime().toString("hh:mm:ss")+"\","+
|
||||||
"EXT_DATA=\""+RDEscapeString(slot_logline->extData())+"\","+
|
"EXT_DATA=\""+RDEscapeString(slot_logline->extData())+"\","+
|
||||||
"EXT_EVENT_ID=\""+RDEscapeString(slot_logline->extEventId())+"\","+
|
"EXT_EVENT_ID=\""+RDEscapeString(slot_logline->extEventId())+"\","+
|
||||||
"EXT_ANNC_TYPE=\""+RDEscapeString(slot_logline->extAnncType())+"\","+
|
"EXT_ANNC_TYPE=\""+RDEscapeString(slot_logline->extAnncType())+"\","+
|
||||||
"EXT_CART_NAME=\""+RDEscapeString(slot_logline->extCartName())+"\","+
|
"EXT_CART_NAME=\""+RDEscapeString(slot_logline->extCartName())+"\","+
|
||||||
"TITLE=\""+RDEscapeString(slot_logline->title())+"\","+
|
"TITLE=\""+RDEscapeString(slot_logline->title())+"\","+
|
||||||
"ARTIST=\""+RDEscapeString(slot_logline->artist())+"\","+
|
"ARTIST=\""+RDEscapeString(slot_logline->artist())+"\","+
|
||||||
"SCHEDULED_TIME=\""+slot_logline->startTime(RDLogLine::Logged).
|
"SCHEDULED_TIME=\""+slot_logline->startTime(RDLogLine::Logged).
|
||||||
toString("hh:mm:ss")+"\","+
|
toString("hh:mm:ss")+"\","+
|
||||||
"ISRC=\""+RDEscapeString(slot_logline->isrc())+"\","+
|
"ISRC=\""+RDEscapeString(slot_logline->isrc())+"\","+
|
||||||
"PUBLISHER=\""+RDEscapeString(slot_logline->publisher())+"\","+
|
"PUBLISHER=\""+RDEscapeString(slot_logline->publisher())+"\","+
|
||||||
"COMPOSER=\""+RDEscapeString(slot_logline->composer())+"\","+
|
"COMPOSER=\""+RDEscapeString(slot_logline->composer())+"\","+
|
||||||
"ONAIR_FLAG=\""+RDYesNo(slot_ripc->onairFlag())+"\","+
|
"ONAIR_FLAG=\""+RDYesNo(slot_ripc->onairFlag())+"\","+
|
||||||
"ALBUM=\""+RDEscapeString(slot_logline->album())+"\","+
|
"ALBUM=\""+RDEscapeString(slot_logline->album())+"\","+
|
||||||
"LABEL=\""+RDEscapeString(slot_logline->label())+"\","+
|
"LABEL=\""+RDEscapeString(slot_logline->label())+"\","+
|
||||||
"CONDUCTOR=\""+RDEscapeString(slot_logline->conductor())+"\","+
|
"CONDUCTOR=\""+RDEscapeString(slot_logline->conductor())+"\","+
|
||||||
"USER_DEFINED=\""+RDEscapeString(slot_logline->userDefined())+"\","+
|
"USER_DEFINED=\""+RDEscapeString(slot_logline->userDefined())+"\","+
|
||||||
"SONG_ID=\""+RDEscapeString(slot_logline->songId())+"\","+
|
"SONG_ID=\""+RDEscapeString(slot_logline->songId())+"\","+
|
||||||
"ISCI=\""+RDEscapeString(slot_logline->isci())+"\"";
|
"DESCRIPTION=\""+RDEscapeString(slot_logline->description())+"\","+
|
||||||
q=new RDSqlQuery(sql);
|
"OUTCUE=\""+RDEscapeString(slot_logline->outcue())+"\","+
|
||||||
delete q;
|
"ISCI=\""+RDEscapeString(slot_logline->isci())+"\"";
|
||||||
|
q=new RDSqlQuery(sql);
|
||||||
|
delete q;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RDCartSlot::ClearTempCart()
|
void RDCartSlot::ClearTempCart()
|
||||||
|
@ -114,6 +114,8 @@ QString RDCreateReconciliationTableSql(QString name)
|
|||||||
"LABEL char(64),"+
|
"LABEL char(64),"+
|
||||||
"CONDUCTOR char(64),"+
|
"CONDUCTOR char(64),"+
|
||||||
"USAGE_CODE int,"+
|
"USAGE_CODE int,"+
|
||||||
|
"DESCRIPTION char(64),"+
|
||||||
|
"OUTCUE char(64),"+
|
||||||
"ISRC char(12),"+
|
"ISRC char(12),"+
|
||||||
"ISCI char(32),"+
|
"ISCI char(32),"+
|
||||||
"STATION_NAME char(64),"+
|
"STATION_NAME char(64),"+
|
||||||
|
@ -477,35 +477,42 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate,
|
|||||||
//
|
//
|
||||||
// Selected Fields
|
// Selected Fields
|
||||||
//
|
//
|
||||||
sql=QString().sprintf("select LENGTH,LOG_ID,CART_NUMBER,STATION_NAME,\
|
sql=QString("select ")+
|
||||||
EVENT_DATETIME,EVENT_TYPE,EXT_START_TIME,\
|
"LENGTH,"+ // 00
|
||||||
EXT_LENGTH,EXT_DATA,EXT_EVENT_ID,EXT_ANNC_TYPE,\
|
"LOG_ID,"+ // 01
|
||||||
PLAY_SOURCE,CUT_NUMBER,EVENT_SOURCE,EXT_CART_NAME,\
|
"CART_NUMBER,"+ // 02
|
||||||
LOG_NAME,`%s_SRT`.TITLE,`%s_SRT`.ARTIST,\
|
"STATION_NAME,"+ // 03
|
||||||
SCHEDULED_TIME,\
|
"EVENT_DATETIME,"+ // 04
|
||||||
START_SOURCE,`%s_SRT`.PUBLISHER,`%s_SRT`.COMPOSER,\
|
"EVENT_TYPE,"+ // 05
|
||||||
`%s_SRT`.ALBUM,`%s_SRT`.LABEL,\
|
"EXT_START_TIME,"+ // 06
|
||||||
`%s_SRT`.ISRC,`%s_SRT`.USAGE_CODE,\
|
"EXT_LENGTH,"+ // 07
|
||||||
`%s_SRT`.ONAIR_FLAG,`%s_SRT`.ISCI,\
|
"EXT_DATA,"+ // 08
|
||||||
`%s_SRT`.CONDUCTOR,`%s_SRT`.USER_DEFINED,\
|
"EXT_EVENT_ID,"+ // 09
|
||||||
`%s_SRT`.SONG_ID from `%s_SRT`\
|
"EXT_ANNC_TYPE,"+ // 10
|
||||||
left join CART on `%s_SRT`.CART_NUMBER=CART.NUMBER \
|
"PLAY_SOURCE,"+ // 11
|
||||||
where ",
|
"CUT_NUMBER,"+ // 12
|
||||||
(const char *)rec_name,
|
"EVENT_SOURCE,"+ // 13
|
||||||
(const char *)rec_name,
|
"EXT_CART_NAME,"+ // 14
|
||||||
(const char *)rec_name,
|
"LOG_NAME,"+ // 15
|
||||||
(const char *)rec_name,
|
"`"+rec_name+"_SRT`.TITLE,"+ // 16
|
||||||
(const char *)rec_name,
|
"`"+rec_name+"_SRT`.ARTIST,"+ // 17
|
||||||
(const char *)rec_name,
|
"SCHEDULED_TIME,"+ // 18
|
||||||
(const char *)rec_name,
|
"START_SOURCE,"+ // 19
|
||||||
(const char *)rec_name,
|
"`"+rec_name+"_SRT`.PUBLISHER,"+ // 20
|
||||||
(const char *)rec_name,
|
"`"+rec_name+"_SRT`.COMPOSER,"+ // 21
|
||||||
(const char *)rec_name,
|
"`"+rec_name+"_SRT`.ALBUM,"+ // 22
|
||||||
(const char *)rec_name,
|
"`"+rec_name+"_SRT`.LABEL,"+ // 23
|
||||||
(const char *)rec_name,
|
"`"+rec_name+"_SRT`.ISRC,"+ // 24
|
||||||
(const char *)rec_name,
|
"`"+rec_name+"_SRT`.USAGE_CODE,"+ // 25
|
||||||
(const char *)rec_name,
|
"`"+rec_name+"_SRT`.ONAIR_FLAG,"+ // 26
|
||||||
(const char *)rec_name);
|
"`"+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
|
// OnAir Flag Filter
|
||||||
@ -542,7 +549,6 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate,
|
|||||||
}
|
}
|
||||||
sql=sql.left(sql.length()-2);
|
sql=sql.left(sql.length()-2);
|
||||||
sql+=")";
|
sql+=")";
|
||||||
//printf("SQL: %s\n",(const char *)sql);
|
|
||||||
q1=new RDSqlQuery(sql);
|
q1=new RDSqlQuery(sql);
|
||||||
while(q1->next()) {
|
while(q1->next()) {
|
||||||
sql=QString("insert into `")+mixname+"_SRT` "+
|
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())+"\","+
|
"ISCI=\""+RDEscapeString(q1->value(27).toString())+"\","+
|
||||||
"CONDUCTOR=\""+RDEscapeString(q1->value(28).toString())+"\","+
|
"CONDUCTOR=\""+RDEscapeString(q1->value(28).toString())+"\","+
|
||||||
"USER_DEFINED=\""+RDEscapeString(q1->value(29).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);
|
q2=new RDSqlQuery(sql);
|
||||||
delete q2;
|
delete q2;
|
||||||
}
|
}
|
||||||
@ -654,6 +662,10 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate,
|
|||||||
ret=ExportTechnical(startdate,enddate,false,true,mixname);
|
ret=ExportTechnical(startdate,enddate,false,true,mixname);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case RDReport::CutLog:
|
||||||
|
ret=ExportCutLog(startdate,enddate,mixname);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
@ -670,6 +682,7 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate,
|
|||||||
sql=QString().sprintf("drop table `%s_SRT`",(const char *)mixname);
|
sql=QString().sprintf("drop table `%s_SRT`",(const char *)mixname);
|
||||||
q=new RDSqlQuery(sql);
|
q=new RDSqlQuery(sql);
|
||||||
delete q;
|
delete q;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -728,6 +741,9 @@ QString RDReport::filterText(RDReport::ExportFilter filter)
|
|||||||
case RDReport::WideOrbit:
|
case RDReport::WideOrbit:
|
||||||
return QObject::tr("WideOrbit Traffic Reconciliation");
|
return QObject::tr("WideOrbit Traffic Reconciliation");
|
||||||
|
|
||||||
|
case RDReport::CutLog:
|
||||||
|
return QObject::tr("Cut Log");
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return QObject::tr("Unknown");
|
return QObject::tr("Unknown");
|
||||||
}
|
}
|
||||||
@ -770,6 +786,7 @@ bool RDReport::multipleDaysAllowed(RDReport::ExportFilter filter)
|
|||||||
case RDReport::NaturalLog:
|
case RDReport::NaturalLog:
|
||||||
case RDReport::SpinCount:
|
case RDReport::SpinCount:
|
||||||
case RDReport::WideOrbit:
|
case RDReport::WideOrbit:
|
||||||
|
case RDReport::CutLog:
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
case RDReport::BmiEmr:
|
case RDReport::BmiEmr:
|
||||||
@ -799,6 +816,7 @@ bool RDReport::multipleMonthsAllowed(RDReport::ExportFilter filter)
|
|||||||
case RDReport::MusicPlayout:
|
case RDReport::MusicPlayout:
|
||||||
case RDReport::NaturalLog:
|
case RDReport::NaturalLog:
|
||||||
case RDReport::WideOrbit:
|
case RDReport::WideOrbit:
|
||||||
|
case RDReport::CutLog:
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
case RDReport::MusicSummary:
|
case RDReport::MusicSummary:
|
||||||
|
@ -37,8 +37,8 @@ class RDReport
|
|||||||
SoundExchange=4,RadioTraffic=5,VisualTraffic=6,
|
SoundExchange=4,RadioTraffic=5,VisualTraffic=6,
|
||||||
CounterPoint=7,Music1=8,MusicSummary=9,WideOrbit=10,
|
CounterPoint=7,Music1=8,MusicSummary=9,WideOrbit=10,
|
||||||
NprSoundExchange=11,MusicPlayout=12,NaturalLog=13,
|
NprSoundExchange=11,MusicPlayout=12,NaturalLog=13,
|
||||||
MusicClassical=14,MrMaster=15,SpinCount=16,
|
MusicClassical=14,MrMaster=15,SpinCount=16,CutLog=17,
|
||||||
LastFilter=17};
|
LastFilter=18};
|
||||||
enum ExportOs {Linux=0,Windows=1};
|
enum ExportOs {Linux=0,Windows=1};
|
||||||
enum ExportType {Generic=0,Traffic=1,Music=2};
|
enum ExportType {Generic=0,Traffic=1,Music=2};
|
||||||
enum StationType {TypeOther=0,TypeAm=1,TypeFm=2,TypeLast=3};
|
enum StationType {TypeOther=0,TypeAm=1,TypeFm=2,TypeLast=3};
|
||||||
@ -117,6 +117,8 @@ class RDReport
|
|||||||
const QString &mixtable);
|
const QString &mixtable);
|
||||||
bool ExportSpinCount(const QDate &startdate,const QDate &enddate,
|
bool ExportSpinCount(const QDate &startdate,const QDate &enddate,
|
||||||
const QString &mixtable);
|
const QString &mixtable);
|
||||||
|
bool ExportCutLog(const QDate &startdate,const QDate &enddate,
|
||||||
|
const QString &mixtable);
|
||||||
QString StringField(const QString &str,const QString &null_text="") const;
|
QString StringField(const QString &str,const QString &null_text="") const;
|
||||||
void SetRow(const QString ¶m,const QString &value) const;
|
void SetRow(const QString ¶m,const QString &value) const;
|
||||||
void SetRow(const QString ¶m,int value) const;
|
void SetRow(const QString ¶m,int value) const;
|
||||||
|
@ -2,9 +2,7 @@
|
|||||||
//
|
//
|
||||||
// The sound panel widget for RDAirPlay
|
// The sound panel widget for RDAirPlay
|
||||||
//
|
//
|
||||||
// (C) Copyright 2002-2004 Fred Gleason <fredg@paravelsystems.com>
|
// (C) Copyright 2002-2016 Fred Gleason <fredg@paravelsystems.com>
|
||||||
//
|
|
||||||
// $Id: rdsound_panel.cpp,v 1.62.6.13.2.3 2014/05/20 22:39:35 cvs Exp $
|
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify
|
// 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
|
// it under the terms of the GNU General Public License version 2 as
|
||||||
@ -1468,10 +1466,22 @@ void RDSoundPanel::LogTraffic(RDPanelButton *button)
|
|||||||
RDSqlQuery *q;
|
RDSqlQuery *q;
|
||||||
QDateTime datetime(QDate::currentDate(),QTime::currentTime());
|
QDateTime datetime(QDate::currentDate(),QTime::currentTime());
|
||||||
|
|
||||||
sql=QString("select CART.TITLE,CART.ARTIST,CART.PUBLISHER,")+
|
sql=QString("select ")+
|
||||||
"CART.COMPOSER,CART.USAGE_CODE,CUTS.ISRC,"+
|
"CART.TITLE,"+ // 00
|
||||||
"CART.ALBUM,CART.LABEL,CUTS.ISCI,CART.CONDUCTOR,CART.USER_DEFINED,"
|
"CART.ARTIST,"+ // 01
|
||||||
"CART.SONG_ID from CART left join CUTS "+
|
"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 "+
|
"on CART.NUMBER=CUTS.CART_NUMBER where "+
|
||||||
"CUTS.CUT_NAME=\""+RDEscapeString(button->cutName())+"\"";
|
"CUTS.CUT_NAME=\""+RDEscapeString(button->cutName())+"\"";
|
||||||
q=new RDSqlQuery(sql);
|
q=new RDSqlQuery(sql);
|
||||||
@ -1497,6 +1507,8 @@ void RDSoundPanel::LogTraffic(RDPanelButton *button)
|
|||||||
"ALBUM=\""+RDEscapeString(q->value(6).toString().utf8())+"\","+
|
"ALBUM=\""+RDEscapeString(q->value(6).toString().utf8())+"\","+
|
||||||
"LABEL=\""+RDEscapeString(q->value(7).toString().utf8())+"\","+
|
"LABEL=\""+RDEscapeString(q->value(7).toString().utf8())+"\","+
|
||||||
"ISCI=\""+RDEscapeString(q->value(8).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())+"\","+
|
"CONDUCTOR=\""+RDEscapeString(q->value(9).toString().utf8())+"\","+
|
||||||
"USER_DEFINED=\""+RDEscapeString(q->value(10).toString().utf8())+"\","+
|
"USER_DEFINED=\""+RDEscapeString(q->value(10).toString().utf8())+"\","+
|
||||||
"SONG_ID=\""+RDEscapeString(q->value(11).toString().utf8())+"\","+
|
"SONG_ID=\""+RDEscapeString(q->value(11).toString().utf8())+"\","+
|
||||||
|
@ -8132,6 +8132,24 @@ int UpdateDb(int ver)
|
|||||||
delete q;
|
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 ****
|
// **** End of version updates ****
|
||||||
|
|
||||||
|
@ -2,9 +2,7 @@
|
|||||||
//
|
//
|
||||||
// Add an entry to the reconciliation table.
|
// Add an entry to the reconciliation table.
|
||||||
//
|
//
|
||||||
// (C) Copyright 2002-2005 Fred Gleason <fredg@paravelsystems.com>
|
// (C) Copyright 2002-2016 Fred Gleason <fredg@paravelsystems.com>
|
||||||
//
|
|
||||||
// $Id: log_traffic.cpp,v 1.20.8.2.2.3 2014/06/24 18:27:05 cvs Exp $
|
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify
|
// 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
|
// 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())+"\","+
|
"USER_DEFINED=\""+RDEscapeString(logline->userDefined().utf8())+"\","+
|
||||||
"CONDUCTOR=\""+RDEscapeString(logline->conductor().utf8())+"\","+
|
"CONDUCTOR=\""+RDEscapeString(logline->conductor().utf8())+"\","+
|
||||||
"SONG_ID=\""+RDEscapeString(logline->songId().utf8())+"\","+
|
"SONG_ID=\""+RDEscapeString(logline->songId().utf8())+"\","+
|
||||||
|
"DESCRIPTION=\""+RDEscapeString(logline->description().utf8())+"\","+
|
||||||
|
"OUTCUE=\""+RDEscapeString(logline->outcue().utf8())+"\","+
|
||||||
"ISCI=\""+RDEscapeString(logline->isci().utf8())+"\"";
|
"ISCI=\""+RDEscapeString(logline->isci().utf8())+"\"";
|
||||||
|
|
||||||
q=new RDSqlQuery(sql);
|
q=new RDSqlQuery(sql);
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
#include <rdcreate_log.h>
|
#include <rdcreate_log.h>
|
||||||
#include <rdescape_string.h>
|
#include <rdescape_string.h>
|
||||||
#include <rdevent.h>
|
#include <rdevent.h>
|
||||||
|
#include <rdsvc.h>
|
||||||
|
|
||||||
#include "rdrevert.h"
|
#include "rdrevert.h"
|
||||||
|
|
||||||
@ -162,6 +163,10 @@ void MainObject::Revert(int schema) const
|
|||||||
case 254:
|
case 254:
|
||||||
Revert254();
|
Revert254();
|
||||||
break;
|
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
|
int MainObject::GetVersion() const
|
||||||
{
|
{
|
||||||
QString sql;
|
QString sql;
|
||||||
|
@ -50,6 +50,7 @@ class MainObject : public QObject
|
|||||||
void Revert252() const;
|
void Revert252() const;
|
||||||
void Revert253() const;
|
void Revert253() const;
|
||||||
void Revert254() const;
|
void Revert254() const;
|
||||||
|
void Revert255() const;
|
||||||
int GetVersion() const;
|
int GetVersion() const;
|
||||||
void SetVersion(int schema) const;
|
void SetVersion(int schema) const;
|
||||||
int MapSchema(const QString &ver);
|
int MapSchema(const QString &ver);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user