comparison lib/Benzin/Bugzilla/Bug.pm @ 10:14a966369278

working version of exporting bugs from bugzilla in tj3 format (without bookings)
author cin
date Mon, 07 Sep 2015 01:37:11 +0300
parents cc7244ab1b9f
children 4eb9fdf4efa9
comparison
equal deleted inserted replaced
9:cc7244ab1b9f 10:14a966369278
44 } 44 }
45 45
46 use constant { BUG_FIELDS => \@fields }; 46 use constant { BUG_FIELDS => \@fields };
47 47
48 use IMPL::declare { 48 use IMPL::declare {
49 require => { 49 base => [ 'IMPL::Object::Fields' => undef ]
50 Strptime => 'DateTime::Format::Strptime'
51 },
52 base => [
53 'IMPL::Object::Fields' => undef
54 ]
55 }; 50 };
56
57 use fields @fields; 51 use fields @fields;
58
59 my $dtparser = Strptime->new(
60 pattern => '%Y%m%dT%H:%M:%S',
61 time_zone => 'UTC',
62 on_error => 'croak'
63 );
64 52
65 sub CTOR { 53 sub CTOR {
66 my SELF $this = shift; 54 my SELF $this = shift;
67 my $data = shift; 55 my $data = shift;
68 $this->{$_} = $data->{$_} 56 $this->{$_} = $data->{$_}
69 foreach grep exists $data->{$_}, @{ SELF->BUG_FIELDS }; 57 foreach grep exists $data->{$_}, @{ SELF->BUG_FIELDS };
70 } 58 }
71 59
72 # returns { 60 # returns {
73 # reports => [ 61 # reports => [
74 # { who => email:string, when => report-date-time:DateTime, work_time => hours:double } 62 # { who => email:string, start => work-start-date-time:DateTime, end => report-date-time:DateTime, work_time => hours:double }
75 # ], 63 # ],
76 # actual => hours 64 # actual => hours
77 # remaining => hours 65 # remaining => hours
78 # } 66 # }
79 sub GetTimeReports { 67 sub GetTimeReports {
80 my SELF $this = shift; 68 my SELF $this = shift;
81 my $resolution = shift || 0.25; 69 my $resolution = shift || 0.25;
82
83 warn "Processing: $this->{id}";
84 70
85 my @bookings; 71 my @bookings;
86 my $actual = 0; 72 my $actual = 0;
87 73
88 for my $history ( @{ $this->{history} || [] } ) { 74 for my $history ( @{ $this->{history} || [] } ) {
89 my $who = $history->{who}; 75 my $who = $history->{who};
90 warn $history->{when}; 76 my $when = $history->{when};
91 my $when = $dtparser->parse_datetime( $history->{when} );
92 my $changes = $history->{changes}; 77 my $changes = $history->{changes};
93 78
94 for my $change ( @{ $changes || [] } ) { 79 for my $change ( @{ $changes || [] } ) {
95 if ( $change->{field_name} eq 'work_time' ) { 80 if ( $change->{field_name} eq 'work_time' ) {
96 my $prev = $change->{removed} || 0; 81 my $prev = $change->{removed} || 0;
99 my $dt = coarsen( $value - $prev, $resolution ); 84 my $dt = coarsen( $value - $prev, $resolution );
100 85
101 if ($dt) { 86 if ($dt) {
102 push @bookings, 87 push @bookings,
103 { 88 {
104 who => $who, 89 end => $who,
105 when => $when->iso8601(), 90 when => $when->iso8601(),
106 work_time => $dt, 91 work_time => $dt,
107 start => $when->clone()->subtract( hours => $dt )->iso8601() 92 start => $when->clone()->subtract( hours => $dt )
93 ->iso8601()
108 }; 94 };
109 $actual += $dt; 95 $actual += $dt;
110 } 96 }
111 } 97 }
112 } 98 }