Mercurial > pub > buggler
comparison lib/Benzin/Bugzilla/XmlWriter.pm @ 12:52b34ea50eff default tip
sync: work time projection doesn't seem to be working anyway
| author | cin |
|---|---|
| date | Sun, 13 Sep 2015 19:37:16 +0300 |
| parents | 4eb9fdf4efa9 |
| children |
comparison
equal
deleted
inserted
replaced
| 11:4eb9fdf4efa9 | 12:52b34ea50eff |
|---|---|
| 7 'DateTime' => 'WriteTJ3DateTime', | 7 'DateTime' => 'WriteTJ3DateTime', |
| 8 -plain => 'WriteValue', | 8 -plain => 'WriteValue', |
| 9 -default => 'WriteValue' | 9 -default => 'WriteValue' |
| 10 ); | 10 ); |
| 11 | 11 |
| 12 use IMPL::lang qw(coarsen coarsen_dt is); | |
| 12 use IMPL::Const qw(:prop); | 13 use IMPL::Const qw(:prop); |
| 13 use IMPL::declare { | 14 use IMPL::declare { |
| 14 require => { | 15 require => { |
| 15 XMLWriter => 'XML::Writer', | 16 XMLWriter => 'XML::Writer', |
| 16 Bug => 'Benzin::Bugzilla::Bug', | 17 Bug => 'Benzin::Bugzilla::Bug', |
| 17 BugComment => 'Benzin::Bugzilla::BugComment', | 18 BugComment => 'Benzin::Bugzilla::BugComment', |
| 19 Duration => 'DateTime::Duration', | |
| 18 }, | 20 }, |
| 19 base => [ | 21 base => [ |
| 20 'IMPL::Transform' => sub { %Transform } | 22 'IMPL::Transform' => sub { %Transform } |
| 21 ], | 23 ], |
| 22 props => [ | 24 props => [ |
| 40 my $writer = $this->_writer; | 42 my $writer = $this->_writer; |
| 41 | 43 |
| 42 $writer->xmlDecl("UTF-8"); | 44 $writer->xmlDecl("UTF-8"); |
| 43 $writer->startTag("bugzilla"); | 45 $writer->startTag("bugzilla"); |
| 44 | 46 |
| 47 my %timesheets; | |
| 48 | |
| 45 foreach my $bug (@$bugs) { | 49 foreach my $bug (@$bugs) { |
| 46 $writer->startTag("bug"); | 50 $writer->startTag("bug"); |
| 47 $this->WriteBug($bug); | 51 $this->WriteBug($bug); |
| 52 | |
| 53 if ( $this->timereports ) { | |
| 54 my $time = $bug->GetTimeReports( $this->timeresolution ); | |
| 55 | |
| 56 my $prevReportDate = $bug->{creation_time}; | |
| 57 | |
| 58 foreach my $item ( @{ $time->{report} || [] } ) { | |
| 59 $timesheets{ $item->{who} }{bugs}{ $bug->{id} }{work} += | |
| 60 $item->{work_time}; | |
| 61 $timesheets{ $item->{who} }{bugs}{ $bug->{id} }{remaining} = | |
| 62 $time->{remaining}; | |
| 63 | |
| 64 $timesheets{ $item->{who} }{start} = $prevReportDate | |
| 65 unless $timesheets{ $item->{who} }{start} | |
| 66 and $timesheets{ $item->{who} }{start} <= $prevReportDate; | |
| 67 $timesheets{ $item->{who} }{end} = $item->{when} | |
| 68 unless $timesheets{ $item->{who} }{end} | |
| 69 and $timesheets{ $item->{who} }{end} >= $item->{when}; | |
| 70 | |
| 71 $prevReportDate = $item->{when}; | |
| 72 } | |
| 73 | |
| 74 $this->WriteElement( 'time', $time ); | |
| 75 } | |
| 76 | |
| 77 $writer->endTag(); | |
| 78 } | |
| 79 | |
| 80 while ( my ( $who, $sheet ) = each %timesheets ) { | |
| 81 | |
| 82 $writer->startTag( | |
| 83 'timesheet', | |
| 84 resource => $who, | |
| 85 start => $this->FormatTJ3DateTime( $sheet->{start} ), | |
| 86 end => $this->FormatTJ3DateTime( $sheet->{end} ) | |
| 87 ); | |
| 88 | |
| 89 while ( my ( $bug, $info ) = each %{ $sheet->{bugs} } ) { | |
| 90 $writer->startTag( 'bug', id => $bug ); | |
| 91 $this->WriteElement( 'work', $info->{work} ); | |
| 92 $this->WriteElement( 'remaining', $info->{remaining} ); | |
| 93 $writer->endTag(); | |
| 94 } | |
| 95 | |
| 48 $writer->endTag(); | 96 $writer->endTag(); |
| 49 } | 97 } |
| 50 | 98 |
| 51 $writer->endTag(); | 99 $writer->endTag(); |
| 52 | 100 |
| 59 | 107 |
| 60 foreach my $field ( @{ Bug->BUG_FIELDS } ) { | 108 foreach my $field ( @{ Bug->BUG_FIELDS } ) { |
| 61 next unless $value->{$field}; | 109 next unless $value->{$field}; |
| 62 $this->WriteElement( $field, $value->{$field} ); | 110 $this->WriteElement( $field, $value->{$field} ); |
| 63 } | 111 } |
| 64 $this->WriteElement( 'time', | |
| 65 $value->GetTimeReports( $this->timeresolution ) ) | |
| 66 if $this->timereports; | |
| 67 } | 112 } |
| 68 | 113 |
| 69 sub WriteBugComment { | 114 sub WriteBugComment { |
| 70 my SELF $this = shift; | 115 my SELF $this = shift; |
| 71 my $value = shift; | 116 my $value = shift; |
| 111 $this->_writer->characters($value) if defined $value; | 156 $this->_writer->characters($value) if defined $value; |
| 112 } | 157 } |
| 113 | 158 |
| 114 sub WriteTJ3DateTime { | 159 sub WriteTJ3DateTime { |
| 115 my SELF $this = shift; | 160 my SELF $this = shift; |
| 116 my $value = shift; | 161 my $value = shift; |
| 117 | 162 |
| 118 $this->_writer->characters($value->strftime('%F-%T')) if defined $value; | 163 $this->_writer->characters( $this->FormatTJ3DateTime($value) ) |
| 164 if defined $value; | |
| 165 } | |
| 166 | |
| 167 sub FormatTJ3DateTime { | |
| 168 my SELF $this = shift; | |
| 169 my $value = shift; | |
| 170 | |
| 171 my $duration = | |
| 172 is( $this->timeresolution, Duration ) | |
| 173 ? $this->timeresolution | |
| 174 : Duration->new( %{ $this->timeresolution } ); | |
| 175 | |
| 176 return coarsen_dt( $value, $duration )->strftime('%F-%T'); | |
| 119 } | 177 } |
| 120 | 178 |
| 121 1; | 179 1; |
