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:
parent
c837ab24ae
commit
512d1a2575
@ -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
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 ¶m,const QString &value) const;
|
||||
void SetRow(const QString ¶m,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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user