Changeset 1748 for trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases
- Timestamp:
- 04/12/16 23:46:21 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/User.pm
r1734 r1748 233 233 label => l('End of employment'), 234 234 }, 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 }, 235 252 _endStrictEmployment => { 236 253 formtype => 'DATETIME', … … 334 351 label => l('Start of employment'), 335 352 }, 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 }, 336 370 _startStrictEmployment => { 337 371 formtype => 'DATETIME', … … 1408 1442 endEmployment endStrictEmployment endCurrentEmployment endLastEmployment 1409 1443 startEmployment startStrictEmployment startCurrentEmployment startFirstEmployment 1444 arrival departure 1410 1445 ); 1411 1446 foreach (@employmentDate) { … … 1437 1472 1438 1473 if ($expireOn ne 'never') { 1439 my $endemploy ;1474 my $endemploy = ''; 1440 1475 if ($self->_get_attributes("_$end2start{$expireOn}")) { 1441 1476 $endemploy = $self->_get_attributes("_$expireOn"); 1442 1477 } elsif (($self->base->config('unemployed_expire') ||'') eq 'no') { 1443 $endemploy = undef;1478 $endemploy = ''; 1444 1479 } else { 1445 1480 # due to time zone, 0 is never 0 … … 1471 1506 1472 1507 sub _computeStartEmployment { 1473 my ($self, $delay ) = @_;1508 my ($self, $delay, $any) = @_; 1474 1509 1475 1510 $delay ||= 0; … … 1482 1517 $list_empl->execute($self->id); 1483 1518 my $start; 1484 while (my $res = $list_empl->fetchrow_hashref) { 1519 my $res; 1520 while ($res = $list_empl->fetchrow_hashref) { 1485 1521 if ($start) { 1486 1522 my $prevend = DateTime->from_epoch(epoch => str2time($res->{lastday})); … … 1491 1527 last; 1492 1528 } 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; 1510 1531 } 1511 1532 $start = DateTime->from_epoch(epoch => str2time($res->{firstday})); … … 1514 1535 $list_empl->finish; 1515 1536 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 1516 1556 return $start ? $start->iso8601 : undef 1517 1557 } 1518 1558 1519 1559 sub _computeEndEmployment { 1520 my ($self, $delay ) = @_;1560 my ($self, $delay, $any) = @_; 1521 1561 1522 1562 $delay ||= 0; … … 1529 1569 $list_empl->execute($self->id); 1530 1570 my $end; 1531 while (my $res = $list_empl->fetchrow_hashref) { 1571 my $res; 1572 while ($res = $list_empl->fetchrow_hashref) { 1532 1573 if (!$res->{lastday}) { 1533 1574 # Ultimate employment. … … 1543 1584 last; 1544 1585 } 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; 1562 1588 } 1563 1589 $end = DateTime->from_epoch(epoch => str2time($res->{lastday})); … … 1566 1592 } 1567 1593 $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 } 1568 1615 1569 1616 return $end ? $end->iso8601 : undef
Note: See TracChangeset
for help on using the changeset viewer.