%# BEGIN BPS TAGGED BLOCK {{{
%#
%# COPYRIGHT:
%#
%# This software is Copyright (c) 1996-2026 Best Practical Solutions, LLC
%#                                          <sales@bestpractical.com>
%#
%# (Except where explicitly superseded by other copyright notices)
%#
%#
%# LICENSE:
%#
%# This work is made available to you under the terms of Version 2 of
%# the GNU General Public License. A copy of that license should have
%# been provided with this software, but in any event can be snarfed
%# from www.gnu.org.
%#
%# This work is distributed in the hope that it will be useful, but
%# WITHOUT ANY WARRANTY; without even the implied warranty of
%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
%# General Public License for more details.
%#
%# You should have received a copy of the GNU General Public License
%# along with this program; if not, write to the Free Software
%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
%# 02110-1301 or visit their web page on the internet at
%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
%#
%#
%# CONTRIBUTION SUBMISSION POLICY:
%#
%# (The following paragraph is not intended to limit the rights granted
%# to you to modify and distribute this software under the terms of
%# the GNU General Public License and is only of importance to you if
%# you choose to contribute your changes and enhancements to the
%# community by submitting them to Best Practical Solutions, LLC.)
%#
%# By intentionally submitting any modifications, corrections or
%# derivatives to this work, or any other work intended for use with
%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
%# you are the copyright holder for those contributions and you grant
%# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
%# royalty-free, perpetual, license to use, copy, create derivative
%# works based on those contributions, and sublicense and distribute
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
% unless ($InTable) {
<div class="row">
% }
<div class="row">
<div class="col-lg">
% for my $field (@fields) {
%# Prefer input name as css class, e.g. "FinalPriority" instead of "Final_Priority"
<& /Elements/LabeledValue,
    Class => (CSSClass( $field->{args}{Name} || $field->{'name'} )),
    Label => loc($field->{'name'}),
    LabelFor => $field->{'labelfor'},
    LabelSpanClass => ( $field->{hint} ? 'prev-icon-helper' : ''),
    LabelTooltip => $field->{hint},
    RawValue => $field->{'html'},
    ReadOnly => 0,
    &>
% }
</div>
<div class="col-lg">

% my $totalTimeWorked = 0;
% if ($TicketObj && RT->Config->Get('DisplayTotalTimeWorked') && ($totalTimeWorked = $TicketObj->TotalTimeWorked)) {
  <& /Elements/LabeledValue, Class => "total time worked sum",Label => loc("Total Time Worked"), ValueSpanClass => "current-value", RawValue => $m->scomp("ShowTime", minutes => $totalTimeWorked ) &>
% }
% if ( keys %$time_worked ) {
  <&| /Elements/LabeledValue, Class => "time worked by-user",Label => loc("Time Worked By User"), ValueSpanClass => "current-value" &>
%   for my $user ( keys %$time_worked ) {
        <div>
          <span class="value"><% $user %>:</span>
          <span class="value"><& /Ticket/Elements/ShowTime, minutes => $time_worked->{$user} &></span>
        </div>
%   }
  </&>
% }

</div>
</div>
% if ( $ShowAddTimeWorked ) {
<br />
  <& /Ticket/Elements/AddToTimeWorked, %ARGS &>
% }

% if ( $TicketObj && $TicketObj->Id ) {
<div class="edit-custom-fields-container" hx-trigger="none" hx-get="<% RT->Config->Get('WebPath') %>/Views/Component/EditCustomFields?ObjectType=RT::Ticket&ObjectId=<% $TicketObj->Id %>&Grouping=Times&InTable=1" hx-swap="innerHTML">
  <& /Elements/EditCustomFields, Object => $TicketObj, Grouping => 'Times', InTable => 1 &>
</div>
% }

% $m->callback( CallbackName => 'EndOfList', TicketObj => $TicketObj, %ARGS, Fields => \@fields );
% unless ($InTable) {
</div>
% }

<%init>
if ($TicketObj) {
    $QueueObj ||= $TicketObj->QueueObj;
}

my %field_id = (
    'TimeEstimated' => 'SetTimeEstimated',
    'TimeWorked'    => 'SetTimeWorked',
    'TimeLeft'      => 'SetTimeLeft',
);
unless ( @fields ) {
    @fields = (
        # Time Estimated, Worked, and Left
        (
            map {
                (my $field = $_) =~ s/ //g;
                {
                    name => $_,
                    comp => '/Elements/EditTimeValue',
                    args => {
                        Name => $field,
                        Default => $defaults{$field} || $TicketObj->$field,
                        ReadOnly => $ReadOnly,
                    },
                    labelfor => $field_id{$field},
                }
            } ('Time Estimated', 'Time Worked', 'Time Left')
        ),
    );
}

my @role_fields;

$m->callback( CallbackName => 'MassageFields', %ARGS, TicketObj => $TicketObj, Fields => \@fields );

# Process the field list, skipping if html is provided and running the
# components otherwise
for my $field (@fields) {
    next if defined $field->{'html'};
    if ( $field->{'comp'} ) {
        $field->{'html'} = $m->scomp($field->{'comp'}, %{$field->{'args'} || {}});
    }
}

my $time_worked;

if ( $TicketObj && $TicketObj->CurrentUserCanSeeTime ) {
    if (RT->Config->Get('DisplayTotalTimeWorked')) {
        $time_worked = $TicketObj->TotalTimeWorkedPerUser;
    }
    else {
        $time_worked = $TicketObj->TimeWorkedPerUser;
    }
}
</%init>
<%args>
$TicketObj => undef
$QueueObj => undef
@fields => ()
$InTable => 0
%defaults => ()
$ReadOnly => 0
$ShowAddTimeWorked => 1
</%args>

<%attr>
directly_accessible => 1
</%attr>
