=head1 NAME Dam::Components::Controls::DateRange =head1 SYNOPSIS my ($ini, $end) = Component__Get(CONTROL_DATERANGE, ['range']); =head1 DESCRIPTION Control para obtener un rango de fechas. =head1 ARGUMENTS ( TYPE => 'DateRange', ID => 'range' (default), INFO => 1 (show info in header; default) or 0 (don't show), LABEL => 'Date range' (default), LABEL_INFO => Same as LABEL (default), REQUIRED => 1 (control required; default) or 0 (not required) MAXDAYS => 1095 (default) or maximum number of days for range ) =cut use strict; use warnings; use utf8; package Dam::Components::Controls::DateRange; use Exporter qw(import); our @EXPORT = qw( Control__html Control__js Get ); use Date::Calc qw(Today Add_Delta_YM Days_in_Month); use Dam::Util; use Dam::DamLogic; use Dam::Var; my $ID_DEFAULT = 'range'; sub __arguments { my $arg_ref = shift; $$arg_ref{LABEL} = _t('Date range') if is_empty($$arg_ref{LABEL}); $$arg_ref{LABEL_INFO} = $$arg_ref{LABEL} if is_empty($$arg_ref{LABEL_INFO}); check_arguments($arg_ref, TYPE => [ ARG_REQUIRED ], ID => [ ARG_DEFAULT, $ID_DEFAULT ], INFO => [ ARG_DEFAULT, 1, 0 ], LABEL => [ ARG_REQUIRED ], LABEL_INFO => [ ARG_REQUIRED ], REQUIRED => [ ARG_DEFAULT, 1, 0 ], MAXDAYS => [ ARG_DEFAULT, 1095 ] ); } sub Control__html { my ($self, $arg_ref, $info_ref) = @_; __arguments($arg_ref); my $ini_value = cgiapp_param($$arg_ref{ID}); my $end_value = cgiapp_param(strval($$arg_ref{ID}, '_end')); if (!is_report()) { my @previous = Add_Delta_YM(Today(), 0, -1); $ini_value = strval('01/', sprintf("%02d", $previous[1]), '/', $previous[0]); $end_value = strval(Days_in_Month($previous[0], $previous[1]), '/', sprintf("%02d", $previous[1]), '/', $previous[0]); } my @ini = split(/\//, $ini_value); my @end = split(/\//, $end_value); my $range = strval($ini_value, ' al ', $end_value); if (($ini[0] == 1) && ($ini[2] == $end[2])) { if (($end[0] == Days_in_Month($ini[2],$ini[1])) && ($ini[1] == $end[1])) { $range = strval($range, ' (', uc(_t('MONTHS', $ini[1])), ' ', $ini[2], ')'); } elsif (($ini[1] == 1) && ($end[0] == 31) && ($end[1] == 12)) { $range = strval($range, ' (', _t('YEAR'), ' ', $ini[2], ')'); } elsif (($ini[1] == 1) && ($end[0] == 30) && ($end[1] == 6)) { $range = strval($range, ' (', _t('FIRST SEMESTER'), ' ', $ini[2], ')'); } elsif (($ini[1] == 7) && ($end[0] == 31) && ($end[1] == 12)) { $range = strval($range, ' (', _t('SECOND SEMESTER'), ' ', $ini[2], ')'); } elsif (($ini[1] == 1) && ($end[0] == 30) && ($end[1] == 4)) { $range = strval($range, ' (', _t('FIRST QUARTER'), ' ', $ini[2], ')'); } elsif (($ini[1] == 5) && ($end[0] == 31) && ($end[1] == 8)) { $range = strval($range, ' (', _t('SECOND QUARTER'), ' ', $ini[2], ')'); } elsif (($ini[1] == 9) && ($end[0] == 31) && ($end[1] == 12)) { $range = strval($range, ' (', _t('THIRD QUARTER'), ' ', $ini[2], ')'); } elsif (($ini[1] == 1) && ($end[0] == 31) && ($end[1] == 3)) { $range = strval($range, ' (', _t('FIRST TRIMESTER'), ' ', $ini[2], ')'); } elsif (($ini[1] == 4) && ($end[0] == 30) && ($end[1] == 6)) { $range = strval($range, ' (', _t('SECOND TRIMESTER'), ' ', $ini[2], ')'); } elsif (($ini[1] == 7) && ($end[0] == 30) && ($end[1] == 9)) { $range = strval($range, ' (', _t('THIRD TRIMESTER'), ' ', $ini[2], ')'); } elsif (($ini[1] == 10) && ($end[0] == 31) && ($end[1] == 12)) { $range = strval($range, ' (', _t('FOURTH TRIMESTER'), ' ', $ini[2], ')'); } } push(@{$info_ref}, { DATA => $$arg_ref{LABEL_INFO}, VALUE => $range }) if $$arg_ref{INFO}; # Required stylesheets: Component__Header(ADD => 'CSS', RESOURCE => PACK_DATEPICKER); return strval('