Новый отчет

Модератор: ykolesnikov

Ответить
prog5
OTRS Новобранец
Сообщения: 26
Зарегистрирован: 15 июн 2012, 09:32

Новый отчет

Сообщение prog5 » 06 дек 2013, 11:07

Добрый день. Понадобилось написать свой модуль для отчета. Подсмотрел тут viewtopic.php?f=2&t=1983&p=10413&hilit=Stats#p10413 совет. И сделал. Отчет работает. Однако в логе апача вот такие ошибки.
[Fri Dec 6 13:50:56 2013] SurveyStats.pm: Subroutine new redefined at /opt/otrs//Kernel/System/Stats/Static/SurveyStats.pm line 17.
[Fri Dec 6 13:50:56 2013] SurveyStats.pm: Subroutine Param redefined at /opt/otrs//Kernel/System/Stats/Static/SurveyStats.pm line 35.
[Fri Dec 6 13:50:56 2013] SurveyStats.pm: Subroutine Run redefined at /opt/otrs//Kernel/System/Stats/Static/SurveyStats.pm line 118.
[Fri Dec 6 13:52:10 2013] SurveyStats.pm: Subroutine new redefined at /opt/otrs//Kernel/System/Stats/Static/SurveyStats.pm line 17.
[Fri Dec 6 13:52:10 2013] SurveyStats.pm: Subroutine Param redefined at /opt/otrs//Kernel/System/Stats/Static/SurveyStats.pm line 32.
[Fri Dec 6 13:52:10 2013] SurveyStats.pm: Subroutine Run redefined at /opt/otrs//Kernel/System/Stats/Static/SurveyStats.pm line 115.
Я Perl начал изучать вчера, и поэтому скорее всего вопрос дурацкий как и код :(

Посоветуйте как исправить это предупреждение.

Код: Выделить всё

# --
# Kernel/System/Stats/Static/FAQAccess.pm.pm
# Copyright (C) 2001-2013 OTRS AG, http://otrs.com/
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (AGPL). If you
# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
# --

package Kernel::System::Stats::Static::SurveyStats;

use strict;
use warnings;
use Date::Pcalc qw(Days_in_Month);
#use Kernel::System::Survey;

sub new {
    my ( $Type, %Param ) = @_;

    # allocate new hash for object
    my $Self = {};
    bless( $Self, $Type );
    
    # check needed objects
    for (qw(ConfigObject LogObject DBObject MainObject TimeObject EncodeObject)) {
    	$Self->{$_} = $Param{$_} || die "Got no $_!";
    }
    
    return $Self;
}

sub Param {

    my $Self = shift;

    my @Params = ();

    # get current time
    my ( $s, $m, $h, $D, $M, $Y ) = $Self->{TimeObject}->SystemTime2Date(
        SystemTime => $Self->{TimeObject}->SystemTime(),
    );
    $D = sprintf( "%02d", $D );
    $M = sprintf( "%02d", $M );
    $Y = sprintf( "%02d", $Y );

    # create possible time selections
    my %Year = map { $_, $_ } ( $Y - 10 .. $Y + 1 );
    my %Month = map { sprintf( "%02d", $_ ), sprintf( "%02d", $_ ) } ( 1 .. 12 );
    my %Day   = map { sprintf( "%02d", $_ ), sprintf( "%02d", $_ ) } ( 1 .. 31 );

    push @Params, {
        Frontend   => 'Start day',
        Name       => 'StartDay',
        Multiple   => 0,
        Size       => 0,
        SelectedID => '01',
        Data       => {
            %Day,
        },
    };
    push @Params, {
        Frontend   => 'Start month',
        Name       => 'StartMonth',
        Multiple   => 0,
        Size       => 0,
        SelectedID => $M,
        Data       => {
            %Month,
        },
    };
    push @Params, {
        Frontend   => 'Start year',
        Name       => 'StartYear',
        Multiple   => 0,
        Size       => 0,
        SelectedID => $Y,
        Data       => {
            %Year,
        },
    };
 
CentOS 6, OTRS 3.3.4

prog5
OTRS Новобранец
Сообщения: 26
Зарегистрирован: 15 июн 2012, 09:32

Re: Новый отчет

Сообщение prog5 » 06 дек 2013, 11:11

не уместилось все в одно сообщение. Продолжение:

Код: Выделить всё

   push @Params, {
        Frontend   => 'End day',
        Name       => 'EndDay',
        Multiple   => 0,
        Size       => 0,
        SelectedID => $D,
        Data       => {
            %Day,
        },
    };
    push @Params, {
        Frontend   => 'End month',
        Name       => 'EndMonth',
        Multiple   => 0,
        Size       => 0,
        SelectedID => $M,
        Data       => {
            %Month,
        },
    };
    push @Params, {
        Frontend   => 'End year',
        Name       => 'EndYear',
        Multiple   => 0,
        Size       => 0,
        SelectedID => $Y,
        Data       => {
            %Year,
        },
    };

    return @Params;
}
sub Run {
    my ( $Self, %Param ) = @_;

    # check needed stuff
    for my $ParamName (qw(StartYear StartMonth StartDay EndYear EndMonth EndDay)) {
        if ( !$Param{$ParamName} ) {
            $Self->{LogObject}->Log(
                Priority => 'error',
                Message  => "Need $ParamName!",
            );
            return;
        }
    }

    # correct start day of month if entered wrong by user
    my $StartDay = sprintf( "%02d", Days_in_Month( $Param{StartYear}, $Param{StartMonth} ) );
    if ( $Param{StartDay} < $StartDay ) {
        $StartDay = $Param{StartDay};
    }

    # correct end day of month if entered wrong by user
    my $EndDay = sprintf( "%02d", Days_in_Month( $Param{EndYear}, $Param{EndMonth} ) );
    if ( $Param{EndDay} < $EndDay ) {
        $EndDay = $Param{EndDay};
    }

    # set start and end date
    my $StartDate = "$Param{StartYear}-$Param{StartMonth}-$StartDay 00:00:00";
    my $EndDate   = "$Param{EndYear}-$Param{EndMonth}-$EndDay 23:59:59";

    # set report title
    my $Title
        = "$Param{StartYear}-$Param{StartMonth}-$StartDay - $Param{EndYear}-$Param{EndMonth}-$EndDay";

    # table headlines
    my @HeadData = (
        'Время голосования',
        'ФИО исполнителя',
        '№',#заявки
 	#'Заголовок',
	'Результат?',
	'Оперативность?',
	'Вежливость?',
	'Комментарий',
    );
 my $SQL =  'select												'
	.' survey_request.vote_time										'
	.' , users.first_name											'
	.' , users.last_name											'
	.' , ticket.tn												'
	.' , ticket.title											'
	.' , (select survey_vote.vote_value 									'
	.'		from survey_vote 									'
	.'		where survey_vote.request_id=survey_request.id and survey_vote.question_id = 10) 	'
	.' , (select survey_vote.vote_value 									'
	.'		from survey_vote 									'
	.'		where survey_vote.request_id=survey_request.id and survey_vote.question_id = 11) 	'
	.' , (select survey_vote.vote_value 									'
	.'		from survey_vote 									'
	.'		where survey_vote.request_id=survey_request.id and survey_vote.question_id = 12) 	'
	.' , (select survey_vote.vote_value 									'
	.'		from survey_vote 									'
	.'		where survey_vote.request_id=survey_request.id and survey_vote.question_id = 13) 	'
	.', ticket.id 												'
	.'from 													'
	.' survey_request											'
	.' , ticket												'
	.' , users 												'
	.'where 												'
	.' survey_request.survey_id = (select survey.id from survey where survey.surveynumber=10004) 		'
	.' and ticket.id=survey_request.ticket_id and users.id = ticket.user_id					'
	.' and (survey_request.vote_time>= ?) and  (survey_request.vote_time<= ?)				'
	.' and survey_request.vote_time is not null								'
	.'order by survey_request.vote_time desc, ticket.tn							';



    $Self->{DBObject}->Prepare( SQL => $SQL, Bind => [ \$StartDate, \$EndDate ] );

    
 
CentOS 6, OTRS 3.3.4

prog5
OTRS Новобранец
Сообщения: 26
Зарегистрирован: 15 июн 2012, 09:32

Re: Новый отчет

Сообщение prog5 » 06 дек 2013, 11:15

Код: Выделить всё

   # build result table
    my @Data;

    while ( my @Row = $Self->{DBObject}->FetchrowArray() ) {

       # build table rowq
       my $Comment = $Row[8];
       if (length($Comment) > 0) {	
	       $Comment = substr $Comment, 11, 185;
       }

       push @Data, [
       		$Row[0],
		$Row[1].' '.$Row[2],
		$Row[3],
		#$Row[4],
		$Row[5],
		$Row[6],
		$Row[7],
		$Comment,		
       ];
 
    }
    
    my @Result = ( [$Title], [@HeadData], @Data );

    return @Result;
}

1;
CentOS 6, OTRS 3.3.4

Ответить