From 661c4edaeedd9e3bd4075679474669a796e85ebe Mon Sep 17 00:00:00 2001 From: Rodrigo Goncalves Date: Fri, 10 Jun 2016 18:21:02 -0300 Subject: [PATCH] Suporte a campos dinamicos. Envio para a fila adequada conforme unidade selecionada. --- InPersonTicket.sopm | 4 +++- Kernel/Config/Files/InPersonTicket.xml | 33 ++++++++++++++++++++++++++++++++- Kernel/Language/pt_BR_InPersonTicket.pm | 2 ++ Kernel/Modules/InPersonTicket.pm | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- Kernel/Output/HTML/Templates/Standard/InPersonTicket.tt | 13 +++++++++++++ 5 files changed, 161 insertions(+), 5 deletions(-) diff --git a/InPersonTicket.sopm b/InPersonTicket.sopm index d39d9c2..b33aacf 100755 --- a/InPersonTicket.sopm +++ b/InPersonTicket.sopm @@ -1,9 +1,11 @@ InPersonTicket - 1.1.0 + 1.3.0 First version Fixes for OTRS 5.0.x + Support for dynamic fields + Support for custom queues 5.0.x SeTIC-UFSC setic.ufsc.br diff --git a/Kernel/Config/Files/InPersonTicket.xml b/Kernel/Config/Files/InPersonTicket.xml index e9e59b2..c515976 100644 --- a/Kernel/Config/Files/InPersonTicket.xml +++ b/Kernel/Config/Files/InPersonTicket.xml @@ -21,7 +21,18 @@ - + + + Dynamic Fields IDs to Include (comma separated) - place * before fields that should use the last value for new tickets + Ticket + Frontend::Agent::InPersonTicket + + + + + + Default type ID for tickets @@ -82,4 +93,24 @@ + + When the queue comes from a field in the form, a prefix can be attached to the value while searching for the queue. A space is added between this and the queue name. + Ticket + Frontend::Agent::InPersonTicket + + Primeiro nível - + + + + + Name of the field in the form which indicates the queue to send the ticket. + Ticket + Frontend::Agent::InPersonTicket + + DF_unidade + + + \ No newline at end of file diff --git a/Kernel/Language/pt_BR_InPersonTicket.pm b/Kernel/Language/pt_BR_InPersonTicket.pm index 3d113ca..7ab72a5 100644 --- a/Kernel/Language/pt_BR_InPersonTicket.pm +++ b/Kernel/Language/pt_BR_InPersonTicket.pm @@ -20,6 +20,8 @@ sub Data { $Self->{Translation}->{'Concluded'} = 'Concluído'; $Self->{Translation}->{'In person ticket'} = 'Atendimento presencial'; $Self->{Translation}->{'The ticket has been created with number:'} = 'Chamado criado com número: '; + $Self->{Translation}->{'Dynamic Fields IDs to Include (comma separated)'} = 'IDs dos campos dinâmicos, separados por vírgula - coloque * antes de campos que não devem usar o último valor para novos tickets'; + return 1; } diff --git a/Kernel/Modules/InPersonTicket.pm b/Kernel/Modules/InPersonTicket.pm index a45d4d0..ed9647a 100644 --- a/Kernel/Modules/InPersonTicket.pm +++ b/Kernel/Modules/InPersonTicket.pm @@ -25,6 +25,9 @@ our @ObjectDependencies = ( "Kernel::Config", "Kernel::System::CustomerUser", "Kernel::System::Service", + "Kernel::System::DynamicField::Backend", + "Kernel::System::DynamicField", + "Kernel::System::User" ); sub new { @@ -45,8 +48,10 @@ sub Run { my $paramObject = $Kernel::OM->Get("Kernel::System::Web::Request"); my $dbObject = $Kernel::OM->Get("Kernel::System::DB"); my $serviceObject = $Kernel::OM->Get("Kernel::System::Service"); - + $Self->BuildServiceBlock(); + $Self->BuildDynamicFieldsFields(); + if ( $paramObject->GetParam( Param => "Subaction" ) && ($paramObject->GetParam( Param => "Subaction" ) eq "GetUserName") ) { my $content = $Self->GetUserName(UserID => $paramObject->GetParam( Param => "UserID" )); @@ -89,6 +94,50 @@ sub GetUserName { } +sub BuildDynamicFieldsFields { + my ( $Self, %Param ) = @_; + + my $DynamicFieldBackendObject = $Kernel::OM->Get('Kernel::System::DynamicField::Backend'); + my $DynamicFieldObject = $Kernel::OM->Get("Kernel::System::DynamicField"); + my $ConfigObject = $Kernel::OM->Get("Kernel::Config"); + my $config = $ConfigObject->Get("Ticket::Frontend::InPersonTicket"); + my $layoutObject = $Kernel::OM->Get("Kernel::Output::HTML::Layout"); + my $paramObject = $Kernel::OM->Get("Kernel::System::Web::Request"); + my $userObject = $Kernel::OM->Get("Kernel::System::User"); + my @dfieldList = @{ $DynamicFieldObject->DynamicFieldListGet( Valid => 1 ) }; + my @dynamicFieldsInuse = split(",", $config->{DynamicFields} || "unidade"); + my %prefs = $userObject->GetPreferences(UserID => $Self->{UserID}); + + foreach (@dfieldList) { + my $field = $_; + if ($field->{Name} ~~ @dynamicFieldsInuse || '*' . $field->{Name} ~~ @dynamicFieldsInuse) { + + my $defValue = ""; + + if ($field->{Name} ~~ @dynamicFieldsInuse) { + $defValue = $prefs{"IPT_DF_" . $field->{Name}}; + } + + my $DynamicFieldHTML = $DynamicFieldBackendObject->EditFieldRender( + DynamicFieldConfig => $field, + LayoutObject => $layoutObject, + ParamObject => $paramObject, + Value => $defValue, + ); + + $layoutObject->Block( + Name => 'DynamicField', + Data => { + Name => $field->{Name}, + Label => $DynamicFieldHTML->{Label}, + Field => $DynamicFieldHTML->{Field}, + }, + ); + } + } + +} + sub BuildServiceBlock { my ( $Self, %Param ) = @_; @@ -147,19 +196,43 @@ sub GetQueueID() { my $ParamObject = $Kernel::OM->Get("Kernel::System::Web::Request"); my $QueueObject = $Kernel::OM->Get("Kernel::System::Queue"); + my $DynamicFieldObject = $Kernel::OM->Get("Kernel::System::DynamicField"); my $ConfigObject = $Kernel::OM->Get("Kernel::Config"); + my $LayoutObject = $Kernel::OM->Get("Kernel::Output::HTML::Layout"); + my $DynamicFieldBackendObject = $Kernel::OM->Get('Kernel::System::DynamicField::Backend'); # Gets default Queue my $ConfigTicket = $ConfigObject->Get("Ticket::Frontend::CustomerTicketMessage"); my $QueueDefault = $ConfigTicket->{"QueueDefault"}; - # Checks if there is a field for the queue my %QueueListID = $QueueObject->QueueList( Valid => 1 ); my %QueueList = reverse $QueueObject->QueueList( Valid => 1 ); my $QueueID = $QueueList{$QueueDefault}; my $Queue = $QueueListID{$QueueID}; + + $Self->{ConfigModule} = $ConfigObject->Get("Ticket::Frontend::InPersonTicket"); + + # Checks if there is a field for the queue + my $QueuePrefix = $Self->{ConfigModule}->{"QueuePrefix"}; + my $QueueField = $Self->{ConfigModule}->{"QueueField"}; + + if ( $QueuePrefix && $QueueField ) { + my $dynFieldQueue = $DynamicFieldObject->DynamicFieldGet( Name => $QueueField ); + my $QueueSelected = $DynamicFieldBackendObject->EditFieldValueGet( + DynamicFieldConfig => $dynFieldQueue, + ParamObject => $ParamObject, + LayoutObject => $LayoutObject, + ); + + my $QueueName = "$QueuePrefix $QueueSelected"; + if ( $QueueList{$QueueName} ) { + $QueueID = $QueueList{$QueueName}; + $Queue = $QueueName; + } + } + return ( $Queue, $QueueID ); } @@ -174,7 +247,10 @@ sub CreateTicket { my $DynamicFieldObject = $Kernel::OM->Get("Kernel::System::DynamicField"); my $CustomerUserObject = $Kernel::OM->Get("Kernel::System::CustomerUser"); my $LayoutObject = $Kernel::OM->Get("Kernel::Output::HTML::Layout"); - + my $userObject = $Kernel::OM->Get("Kernel::System::User"); + my $DynamicFieldBackendObject = $Kernel::OM->Get('Kernel::System::DynamicField::Backend'); + + # Queue my ( $Queue, $QueueID ) = $Self->GetQueueID(%Param); $Data{QueueID} = $QueueID; @@ -198,6 +274,38 @@ sub CreateTicket { UserID => $Self->{ConfigModule}->{DefaultOwnerID}, ); + my @dfieldList = @{ $DynamicFieldObject->DynamicFieldListGet( Valid => 1 ) }; + my @dynamicFieldsInuse = split(",", $Self->{ConfigModule}->{DynamicFields} || "unidade"); + + foreach (@dfieldList) { + my $field = $_; + + if ($field->{Name} ~~ @dynamicFieldsInuse || '*' . $field->{Name} ~~ @dynamicFieldsInuse) { + my $value = $DynamicFieldBackendObject->EditFieldValueGet( + DynamicFieldConfig => $field, + ParamObject => $ParamObject, + LayoutObject => $LayoutObject, + ); + + if ($field->{Name} ~~ @dynamicFieldsInuse) { + $userObject->SetPreferences( + UserID => $Self->{UserID}, + Key => "IPT_DF_" . $field->{Name}, + Value => $value, + ); + } + + if ($value) { + $DynamicFieldBackendObject->ValueSet( + DynamicFieldConfig => $field, + ObjectID => $TicketID, + Value => $value, + UserID => $Self->{UserID}, + ); + } + } + } + my $MimeType = 'text/plain'; # Create article diff --git a/Kernel/Output/HTML/Templates/Standard/InPersonTicket.tt b/Kernel/Output/HTML/Templates/Standard/InPersonTicket.tt index f9fb057..2b951c8 100644 --- a/Kernel/Output/HTML/Templates/Standard/InPersonTicket.tt +++ b/Kernel/Output/HTML/Templates/Standard/InPersonTicket.tt @@ -50,6 +50,19 @@ [% RenderBlockEnd("selectService") %]
+ + + [% RenderBlockStart("DynamicField") %] + [% Data.Label %] +
+ [% Data.Field %] +
+
+ + + + [% RenderBlockEnd("DynamicField") %] +
-- libgit2 0.21.2