X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Flib%2FRT%2FTicket_Vendor.pm;h=4a7883888bd435f5fb48ff13a08d2882d1f93498;hb=a6f303fd9f14570f6d1654a175dbeadf00f4bd18;hp=2039f3e2d7d13ca2093a51f866b0800d5108ef64;hpb=e02e5448d8fdad322dbe5562f92d9623e5d6f0dd;p=freeside.git diff --git a/rt/lib/RT/Ticket_Vendor.pm b/rt/lib/RT/Ticket_Vendor.pm index 2039f3e2d..4a7883888 100644 --- a/rt/lib/RT/Ticket_Vendor.pm +++ b/rt/lib/RT/Ticket_Vendor.pm @@ -13,6 +13,37 @@ sub SetPriority { $Ticket->SUPER::SetPriority($value); } +=head2 Touch + +Creates a Touch transaction (a null transaction). Like Comment and +Correspond but without any content. + +=cut + +sub Touch { + my $self = shift; + my %args = ( + TimeTaken => 0, + ActivateScrips => 1, + CommitScrips => 1, + CustomFields => {}, + @_ + ); + unless ( $self->CurrentUserHasRight('ModifyTicket') + or $self->CurrentUserHasRight('CommentOnTicket') + or $self->CurrentUserHasRight('ReplyToTicket')) { + return ( 0, $self->loc("Permission Denied")); + } + $self->_NewTransaction( + Type => 'Touch', + TimeTaken => $args{'TimeTaken'}, + ActivateScrips => $args{'ActivateScrips'}, + CommitScrips => $args{'CommitScrips'}, + CustomFields => $args{'CustomFields'}, + ); +} + + =head2 MissingRequiredFields { Return all custom fields with the Required flag set for which this object @@ -33,4 +64,56 @@ sub MissingRequiredFields { return @results; } +# Declare the 'WillResolve' field +sub _VendorAccessible { + { + WillResolve => + {read => 1, write => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, + }, +}; + +sub WillResolveObj { + my $self = shift; + + my $time = new RT::Date( $self->CurrentUser ); + + if ( my $willresolve = $self->WillResolve ) { + $time->Set( Format => 'sql', Value => $willresolve ); + } + else { + $time->Set( Format => 'unix', Value => -1 ); + } + + return $time; +} + +sub WillResolveAsString { + my $self = shift; + return $self->WillResolveObj->AsString(); +} + +=head2 IsUnreplied + +Returns true if there's a Correspond or Create transaction more recent than +the Told date of this ticket (or the ticket has no Told date) and the ticket +is not rejected or resolved. + +=cut + +sub IsUnreplied { + my $self = shift; + return 0 if $self->Status eq 'resolved' + or $self->Status eq 'rejected'; + + my $Told = $self->Told || '1970-01-01'; + my $Txns = $self->Transactions; + $Txns->Limit(FIELD => 'Type', + OPERATOR => 'IN', + VALUE => [ 'Correspond', 'Create' ]); + $Txns->Limit(FIELD => 'Created', + OPERATOR => '>', + VALUE => $Told); + $Txns->Count ? 1 : 0; +} + 1;