Диплом: Автоматизация обработки заявок в ООО "Стек Телеком"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
88
Приложение 3
Программный код файла CitronIntegration.pm:
package Kernel::System::CitronIntegration;
use strict;
use warnings;
use feature 'say';
use Data::Dumper;
use Kernel::System::Ticket;
use Kernel::System::Email;
use Kernel::System::Valid;
use Kernel::System::CitronIntegration::CitronEvent;
sub new {
my ($Type, %Param ) = @_;
# выделение нового ключа для объекта
my $Self = {};
bless( $Self, $Type );
# проверка необходимых объектов
for (qw(DBObject ConfigObject)){
$Self->{$_} = $Param{$_} || die "Got no $_!";
}
$Self->{ValidObject} = Kernel::System::Valid->new(%Param);
# debug
$Self->{Debug} = $Param{Debug} || 0;
return $Self;
}
89
sub NotificationList {
my ( $Self, %Param ) = @_;
# проверка необходимого материала
for (qw/JobConfig GetParam/) {
if (!$Param{$_}) {
$Self->{LogObject}->Log( Priority => 'error', Message => "Необходимо
$_!" );
return;
}
}
$Self->{DBObject}->Prepare(SQL => 'SELECT id, name FROM notification_event' );
my %Data;
while (my @Row = $Self->{DBObject}->FetchrowArray() ) {
$Data{$Row[0] } = $Row[1]};
return %Data;
}
sub NotificationGet {
my ($Self, %Param ) = @_;
# проверка необходимого материала
if (!$Param{Name} && !$Param{ID}){
$Self->{LogObject}->Log( Priority => 'error', Message => 'Необходимо имя
или ID!' );
return;
}
if ($Param{Name}){
$Self->{DBObject}->Prepare(SQL => 'SELECT id, name, subject, text,
content_type, charset, valid_id,' . 'comments, create_time, create_by, change_time,
90
change_by '. 'FROM notification_event WHERE name = $_', Bind =>[
\$Param{Name}],
);
} else {
$Self->{DBObject}->Prepare(SQL => 'SELECT id, name, subject, text,
content_type, charset, valid_id, ' . 'comments, create_time, create_by, change_time,
change_by ' . 'FROM notification_event WHERE id = $_, Bind =>[ \$Param{ID} ]);
}
my %Data;
while ( my @Row = $Self->{DBObject}->FetchrowArray() ) {
$Data{ID} = $Row[0];
$Data{Name} = $Row[1];
$Data{Subject} = $Row[2];
$Data{Body} = $Row[3];
$Data{Type} = $Row[4];
$Data{Charset} = $Row[5];
$Data{ValidID} = $Row[6];
$Data{Comment} = $Row[7];
$Data{CreateTime} = $Row[8];
$Data{CreateBy} = $Row[9];
$Data{ChangeTime}= $Row[10];
$Data{ChangeBy} = $Row[11];
}
return if !%Data;
$Self->{DBObject}->Prepare(
SQL => 'SELECT event_key, event_value FROM notification_event_item'. '
WHEREnotification_id = $_',Bind =>[ \$Data{ID} ]);
while ( my @Row = $Self->{DBObject}->FetchrowArray() ) {
push @{$Data{Data}->{ $Row[0]}}, $Row[1];
91
}
return %Data;
}
sub NotificationAdd {
my ( $Self, %Param ) = @_;
# проверка необходимого материала
for (qw/Name Subject Body Type Charset Data UserID/) {
if (!$Param{$_}){
$Self->{LogObject}->Log(Priority => 'error', Message =>
"Необходимо $_!" );
return;
}
}
# проверка, если имя работы уже существует
my %Check = $Self->NotificationGet(Name => $Param{Name} );
if (%Check) {
$Self->{LogObject}->Log(Priority => 'error', Message => "Невозможно
добавить уведомление '$Param{Name}', уведомление уже существует!");
return;
}
$Param{Body} =~ s/(\n\r|\r\r\n|\r\n|\r)/\n/g;
# добавление данных в БД
return if !$Self->{DBObject}->Do(SQL => 'INSERT INTO notification_event ' .
'(name, subject, text, content_type, charset, valid_id, comments, ' . 'create_time,
create_by, change_time, change_by) VALUES '. '($1, $2, $3, $4, $5, $6, $7,
current_timestamp, $_, current_timestamp)', Bind => [\$Param{Name},
92
\$Param{Subject}, \$Param{Body}, \$Param{Type}, \$Param{Charset},
\$Param{ValidID}, \$Param{Comment}, \$Param{UserID}, \$Param{UserID},]);
# получение id
$Self->{DBObject}->Prepare(SQL => 'SELECT id FROM notification_event
WHERE name = $_', Bind =>[ \$Param{Name} ]);
my $ID;
while (my @Row = $Self->{DBObject}->FetchrowArray()){
$ID = $Row[0];
}
return if !$ID;
for my $Key ( sort keys %{ $Param{Data} } ) {
for my $Item ( @{ $Param{Data}->{$Key} } ) {
next if !defined $Item;
next if $Item eq '';
$Self->{DBObject}->Do(SQL => 'INSERT INTO
notification_event_item '. '(notification_id, event_key, event_value) VALUES ($1, $2,
$3)', Bind => [ \$ID, \$Key, \$Item]);
}
}
return $ID;
}
sub NotificationUpdate {
my ( $Self, %Param ) = @_;
# проверка необходимого материала
for (qw/ID Name Subject Body Type Charset Data UserID/) {
if (!$Param{$_}) {
93
$Self->{LogObject}->Log( Priority => 'error', Message => "Необходимо
$_!" );
return;
}
}
# обновление данных в БД
return if !$Self->{DBObject}->Do(SQL => 'UPDATE notification_eventSET ' .
'name = $1, subject = $2, text = $3, content_type = $4, charset = $5, '. 'valid_id= $6,
comments = $7, ' . 'change_time = current_timestamp, change_by= $8 WHERE id = $9',
Bind => [\$Param{Name}, \$Param{Subject}, \$Param{Body}, \$Param{Type},
\$Param{Charset}, \$Param{ValidID}, \$Param{Comment}, \$Param{UserID},
\$Param{ID}]);
$Self->{DBObject}->Do(SQL => 'DELETE FROM notification_event_item
WHERE notification_id = $_', Bind =>[ \$Param{ID} ]);
for my $Key ( sort keys %{ $Param{Data} } ) {
for my $Item ( @{ $Param{Data}->{$Key} } ) {
next if !defined $Item;
next if $Item eq '';
$Self->{DBObject}->Do(SQL => 'INSERT INTO
notification_event_item ' . '(notification_id, event_key, event_value) VALUES ($1, $2,
#3)', Bind =>[ \$Param{ID}, \$Key, \$Item ]);
}
}
return 1;
}
sub NotificationDelete {
my ($Self, %Param) = @_;
94
# проверка необходимого материала
for (qw/ID UserID/) {
If (!$Param{$_}) {
$Self->{LogObject}->Log(Priority => 'error', Message => "Need $_!" );
return;
}
}
# проверка, если имя работы уже существует
my %Check = $Self->NotificationGet(ID => $Param{ID} );
if (!%Check ) {
$Self->{LogObject}->Log(Priority => 'error', Message => "Невозможно
удалить уведомление '$Check{Name}', уведомление не существует");
return;
}
# удаление уведомления
$Self->{DBObject}->Do(SQL => 'DELETE FROM notification_event_item
WHERE notification_id = $_', Bind =>[ \$Param{ID} ]);
$Self->{DBObject}->Do(SQL => 'DELETE FROM notification_event WHERE
id = $_', Bind =>[ \$Param{ID} ]);
$Self->{LogObject}->Log(Priority => 'notice', Message => "CitronIntegration
уведомление '$Check{Name}' удалено (UserID=$Param{UserID}).");
return 1;
}
sub CitronIntegrationCheck {
my ($Self, %Param ) = @_;
# проверка необходимого материала
if (!$Param{Event} ) {
95
$Self->{LogObject}->Log(Priority => 'error', Message => 'Необходимо
имя!' );
return;
}
$Self->{DBObject}->Prepare(SQL => 'SELECT
DISTINCT(nei.notification_id)FROM' . 'notification_event ne,
notification_event_itemnei WHERE '. 'ne.id = notification_id AND ‘. 'valid_id IN
(${\(join ', ', $Self->{ValidObject}->ValidIDsGet())} ) AND " .'nei.event_key =
\'Events\' AND nei.event_value= $_', Bind => [ \$Param{Event} ]);
my @IDs;
while ( my @Row = $Self->{DBObject}->FetchrowArray() ) {
push @IDs, $Row[0];
}
return \@IDs;
}
1;

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
IPO - инструмент финансирования деятельности организации. На примере ПАО «Нефтяная компания «Лукойл»
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)