summaryrefslogtreecommitdiff
path: root/FS/FS/TicketSystem/RT_External.pm
blob: 3bb1991f5c4d4c432d32f108087631b5c39fa137 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package FS::TicketSystem::RT_External;

use strict;
use vars qw( $conf $priority_field $priority_field_queue $field );
use FS::UID;

install_callback FS::UID sub { 
  my $conf = new FS::Conf;
  $priority_field =
    $conf->config('ticket_system-custom_priority_field');
  if ( $priority_field ) {
    $priority_field_queue =
      $conf->config('ticket_system-custom_priority_field_queue');
    $field = $priority_field_queue
                  ? $priority_field_queue. '.%7B'. $priority_field. '%7D'
                  : $priority_field;
  } else {
    $priority_field_queue = '';
    $field = '';
  }
};

sub num_customer_tickets {
  my( $self, $custnum, $priority, $dbh ) = @_;

  #$dbh ||= create one from some config options

  my @param = ();
  my $priority_sql = '';
  if ( defined($priority) ) {
    if ( length($priority) ) {
      my $queue_sql = " queue = ( select id from queues where queues.name = ? )
                        or ( ? = '' and queue = 0 )";
      $priority_sql = "
        and ? = ( select content from TicketCustomFieldValues
                   where ticket = tickets.id
                     and customfield = ( select id from customfields
                                          where name = ?
                                            and ( $queue_sql )
                                       )
                )
      ";
      push @param, $priority,
                   $priority_field,
                   $priority_field_queue,
                   $priority_field_queue;
    } else {
      return '0nothandledyet0';
    }
  }

  my $sql = "
    select count(*) from tickets
                    join links on ( tickets.id = links.localbase )
       where ( status = 'new' or status = 'open' or status = 'stalled' )
         and target = 'freeside://freeside/cust_main/$custnum'
         $priority_sql
  ";

  my $sth = $dbh->prepare($sql) or die $dbh->errstr;
  $sth->execute(@param)         or die $sth->errstr;

  $sth->fetchrow_arrayref->[0];

}

sub href_customer_tickets {
  my( $self, $custnum, $priority ) = @_;

  my $href = 
    'Search/Results.html?Order=ASC&Query=%20MemberOf%20%3D%20%27freeside%3A%2F%2Ffreeside%2Fcust_main%2F'.
    $custnum.
    '%27%20%20AND%20%28%20Status%20%3D%20%27open%27%20%20OR%20Status%20%3D%20%27new%27%20%20OR%20Status%20%3D%20%27stalled%27%20%29%20'
  ;

  if ( $priority && $field && $priority_field_queue ) {
    $href .= 'AND%20Queue%20%3D%20%27'. $priority_field_queue. '%27%20';
  }
  if ( $priority && $field ) {
    $href .= '%20AND%20%27CF.'. $field. '%27%20%3D%20%27'. $priority. '%27%20';
  }

  $href .= '&Rows=100'.
           '&OrderBy=id&Page=1'.
           '&Format=%27%20%20%20%3Cb%3E%3Ca%20href%3D%22%2Ffreeside%2Frt%2FTicket%2FDisplay.html%3Fid%3D__id__%22%3E__id__%3C%2Fa%3E%3C%2Fb%3E%2FTITLE%3A%23%27%2C%20%0A%27%3Cb%3E%3Ca%20href%3D%22%2Ffreeside%2Frt%2FTicket%2FDisplay.html%3Fid%3D__id__%22%3E__Subject__%3C%2Fa%3E%3C%2Fb%3E%2FTITLE%3ASubject%27%2C%20%0A%27__Status__%27%2C%20';

  if ( $priority && $field ) {
    $href .= '%0A%27__CustomField.'. $field. '__%2FTITLE%3ASeverity%27%2C%20';
  }

  $href .= '%0A%27__QueueName__%27%2C%20%0A%27__OwnerName__%27%2C%20%0A%27__Priority__%27%2C%20%0A%27__NEWLINE__%27%2C%20%0A%27%27%2C%20%0A%27%3Csmall%3E__Requestors__%3C%2Fsmall%3E%27%2C%20%0A%27%3Csmall%3E__CreatedRelative__%3C%2Fsmall%3E%27%2C';

  if ( $priority && $field ) {
    $href .=   '%20%0A%27__-__%27%2C';
  }

  $href .= '%20%0A%27%3Csmall%3E__ToldRelative__%3C%2Fsmall%3E%27%2C%20%0A%27%3Csmall%3E__LastUpdatedRelative__%3C%2Fsmall%3E%27%2C%20%0A%27%3Csmall%3E__TimeLeft__%3C%2Fsmall%3E%27';

  $href;
}

1;