Ignore:
Timestamp:
04/12/16 23:46:21 (8 years ago)
Author:
nanardon
Message:

Add arrival and departure date: important date according current user status

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/User.pm

    r1734 r1748  
    233233                label => l('End of employment'), 
    234234            }, 
     235            _departure => { 
     236                formtype => 'DATETIME', 
     237                managed => 1, 
     238                ro => 1, 
     239                hide => 1, 
     240                get => sub { 
     241                    my ($attr) = @_; 
     242                    my $self = $attr->object; 
     243                    $self->_computeEndEmployment($self->base->config('employment_delay') || 0, 1); 
     244                }, 
     245                label => l('Start of employment'), 
     246            }, 
     247            departure => { 
     248                formtype => 'DATETIME', 
     249                ro => 1, 
     250                label => l('Arrival'), 
     251            }, 
    235252            _endStrictEmployment => { 
    236253                formtype => 'DATETIME', 
     
    334351                label => l('Start of employment'), 
    335352            }, 
     353            _arrival => { 
     354                formtype => 'DATETIME', 
     355                managed => 1, 
     356                ro => 1, 
     357                hide => 1, 
     358                get => sub { 
     359                    my ($attr) = @_; 
     360                    my $self = $attr->object; 
     361                    $self->_computeStartEmployment($self->base->config('employment_delay') || 0, 1); 
     362                }, 
     363                label => l('Start of employment'), 
     364            }, 
     365            arrival => { 
     366                formtype => 'DATETIME', 
     367                ro => 1, 
     368                label => l('Arrival'), 
     369            },             
    336370            _startStrictEmployment => { 
    337371                formtype => 'DATETIME', 
     
    14081442        endEmployment   endStrictEmployment   endCurrentEmployment   endLastEmployment 
    14091443        startEmployment startStrictEmployment startCurrentEmployment startFirstEmployment 
     1444        arrival departure 
    14101445    ); 
    14111446    foreach (@employmentDate) { 
     
    14371472 
    14381473    if ($expireOn ne 'never') { 
    1439         my $endemploy; 
     1474        my $endemploy = ''; 
    14401475        if ($self->_get_attributes("_$end2start{$expireOn}")) { 
    14411476            $endemploy = $self->_get_attributes("_$expireOn"); 
    14421477        } elsif (($self->base->config('unemployed_expire') ||'') eq 'no') { 
    1443             $endemploy = undef; 
     1478            $endemploy = ''; 
    14441479        } else { 
    14451480            # due to time zone, 0 is never 0 
     
    14711506 
    14721507sub _computeStartEmployment { 
    1473     my ($self, $delay) = @_; 
     1508    my ($self, $delay, $any) = @_; 
    14741509 
    14751510    $delay ||= 0; 
     
    14821517    $list_empl->execute($self->id); 
    14831518    my $start; 
    1484     while (my $res = $list_empl->fetchrow_hashref) { 
     1519    my $res; 
     1520    while ($res = $list_empl->fetchrow_hashref) { 
    14851521        if ($start) { 
    14861522            my $prevend = DateTime->from_epoch(epoch => str2time($res->{lastday})); 
     
    14911527                last; 
    14921528            } 
    1493         } else { 
    1494             if (!$res->{current}) { 
    1495                 if (my $next = $self->_get_attributes('nextEmployment')) { 
    1496                     my $onext = $self->base->get_object('employment', $next); 
    1497                     my $prevend = DateTime->from_epoch(epoch => str2time($res->{lastday})); 
    1498                     $prevend->set_time_zone( DateTime::TimeZone->new( name => 'local' ) ); 
    1499                     my $tstart = DateTime->from_epoch(epoch => str2time($onext->_get_attributes('firstday'))); 
    1500                     $tstart->set_time_zone( DateTime::TimeZone->new( name => 'local' ) ); 
    1501                     $tstart->subtract(days => $delay + 1); 
    1502                     if ($tstart->ymd gt $prevend->ymd) { 
    1503                         last; 
    1504                     } else { 
    1505                     } 
    1506                 } else { 
    1507                     last; 
    1508                 } 
    1509             } 
     1529        } elsif(!$res->{current}) { 
     1530            last; 
    15101531        } 
    15111532        $start = DateTime->from_epoch(epoch => str2time($res->{firstday})); 
     
    15141535    $list_empl->finish; 
    15151536 
     1537    if ($any && !$start) { 
     1538        if (my $next = $self->_get_attributes('nextEmployment')) { 
     1539            my $onext = $self->base->get_object('employment', $next); 
     1540            my $tstart = DateTime->from_epoch(epoch => str2time($onext->_get_attributes('firstday'))); 
     1541            $tstart->set_time_zone( DateTime::TimeZone->new( name => 'local' ) ); 
     1542            $tstart->subtract(days => $delay + 1); 
     1543            if ($res) { 
     1544                my $prevend = DateTime->from_epoch(epoch => str2time($res->{lastday})); 
     1545                $prevend->set_time_zone( DateTime::TimeZone->new( name => 'local' ) ); 
     1546                if ($tstart->ymd gt $prevend->ymd) { 
     1547                } else { 
     1548                    $start = $tstart; 
     1549                } 
     1550            } else { 
     1551                $start = $tstart; 
     1552            } 
     1553        } 
     1554    } 
     1555 
    15161556    return $start ? $start->iso8601 : undef 
    15171557} 
    15181558 
    15191559sub _computeEndEmployment { 
    1520     my ($self, $delay) = @_; 
     1560    my ($self, $delay, $any) = @_; 
    15211561 
    15221562    $delay ||= 0; 
     
    15291569    $list_empl->execute($self->id); 
    15301570    my $end; 
    1531     while (my $res = $list_empl->fetchrow_hashref) { 
     1571    my $res; 
     1572    while ($res = $list_empl->fetchrow_hashref) { 
    15321573        if (!$res->{lastday}) { 
    15331574            # Ultimate employment. 
     
    15431584                last; 
    15441585            } 
    1545         } else { 
    1546             if (!$res->{current}) { 
    1547                 if (my $prev = $self->_get_attributes('prevEmployment')) { 
    1548                     my $oprev = $self->base->get_object('employment', $prev); 
    1549                     my $nextstart = DateTime->from_epoch(epoch => str2time($res->{firstday})); 
    1550                     $nextstart->set_time_zone( DateTime::TimeZone->new( name => 'local' ) ); 
    1551                     my $tend = DateTime->from_epoch(epoch => str2time($oprev->_get_attributes('lastday'))); 
    1552                     $tend->set_time_zone( DateTime::TimeZone->new( name => 'local' ) ); 
    1553                     $tend->add(days => $delay + 1); 
    1554                     if ($tend->ymd lt $nextstart->ymd) { 
    1555                         last; 
    1556                     } else { 
    1557                     } 
    1558                 } else { 
    1559                     last; 
    1560                 } 
    1561             } 
     1586        } elsif (!$res->{current}) { 
     1587            last; 
    15621588        } 
    15631589        $end = DateTime->from_epoch(epoch => str2time($res->{lastday})); 
     
    15661592    } 
    15671593    $list_empl->finish; 
     1594 
     1595    if ($any && !$end) { 
     1596        if (my $prev = $self->_get_attributes('prevEmployment')) { 
     1597            my $oprev = $self->base->get_object('employment', $prev); 
     1598            my $tend = DateTime->from_epoch(epoch => str2time($oprev->_get_attributes('lastday'))); 
     1599            $tend->set_time_zone( DateTime::TimeZone->new( name => 'local' ) ); 
     1600            $tend->add(days => $delay + 1); 
     1601 
     1602            if ($res) { 
     1603                my $nextstart = DateTime->from_epoch(epoch => str2time($res->{firstday})); 
     1604                $nextstart->set_time_zone( DateTime::TimeZone->new( name => 'local' ) ); 
     1605 
     1606                if ($tend->ymd lt $nextstart->ymd) { 
     1607                } else { 
     1608                    $end = $tend; 
     1609                } 
     1610            } else { 
     1611                $end = $tend; 
     1612            } 
     1613        } 
     1614    } 
    15681615 
    15691616    return $end ? $end->iso8601 : undef 
Note: See TracChangeset for help on using the changeset viewer.