task #8608 : Add checkbox to show birthdays in calendar view

This commit is contained in:
Laurent Destailleur 2008-09-28 03:39:39 +00:00
parent 047ec077cc
commit 73846513e3
14 changed files with 147 additions and 55 deletions

View File

@ -513,23 +513,25 @@ class ActionComm
/**
* \brief Renvoie nom clicable (avec eventuellement le picto)
* \param withpicto 0=Pas de picto, 1=Inclut le picto dans le lien, 2=Picto seul
* \param maxlength Nombre de caract<EFBFBD>res max dans libell<EFBFBD>
* \param maxlength Nombre de caracteres max dans libelle
* \param class Force style class on a link
* \param option ''=Link to action,'birthday'=Link to contact
* \return string Chaine avec URL
* \remarks Utilise $this->id, $this->code et $this->libelle
*/
function getNomUrl($withpicto=0,$maxlength,$class='')
function getNomUrl($withpicto=0,$maxlength,$class='',$option='')
{
global $langs;
$result='';
$lien = '<a '.($class?'class="'.$class.'" ':'').'href="'.DOL_URL_ROOT.'/comm/action/fiche.php?id='.$this->id.'">';
if ($option=='birthday') $lien = '<a '.($class?'class="'.$class.'" ':'').'href="'.DOL_URL_ROOT.'/contact/perso.php?id='.$this->id.'">';
else $lien = '<a '.($class?'class="'.$class.'" ':'').'href="'.DOL_URL_ROOT.'/comm/action/fiche.php?id='.$this->id.'">';
$lienfin='</a>';
if ($langs->trans("Action".$this->code) != "Action".$this->code || ! $this->libelle)
if ($langs->trans("Action".$this->type_code) != "Action".$this->type_code || ! $this->libelle)
{
$libelle=$langs->trans("Action".$this->code);
$libelleshort=$langs->trans("Action".$this->code,'','','','',$maxlength);
$libelle=$langs->trans("Action".$this->type_code);
$libelleshort=$langs->trans("Action".$this->type_code,'','','','',$maxlength);
}
else
{

View File

@ -580,7 +580,8 @@ if ($_GET["id"])
$act = new ActionComm($db);
$result=$act->fetch($_GET["id"]);
if ($result < 0) dolibarr_print_error($db,$act->error);
$societe = new Societe($db);
if ($act->societe->id)
{

View File

@ -34,6 +34,7 @@ require_once(DOL_DOCUMENT_ROOT."/lib/date.lib.php");
$filtera = isset($_REQUEST["userasked"])?$_REQUEST["userasked"]:(isset($_REQUEST["filtera"])?$_REQUEST["filtera"]:'');
$filtert = isset($_REQUEST["usertodo"])?$_REQUEST["usertodo"]:(isset($_REQUEST["filtert"])?$_REQUEST["filtert"]:'');
$filterd = isset($_REQUEST["userdone"])?$_REQUEST["userdone"]:(isset($_REQUEST["filterd"])?$_REQUEST["filterd"]:'');
$showbirthday = isset($_REQUEST["showbirthday"])?$_REQUEST["showbirthday"]:0;
$page = $_GET["page"];
$sortfield=$_GET["sortfield"];
@ -64,6 +65,8 @@ if (! $user->rights->agenda->allactions->read || $_GET["filter"]=='mine')
$year=isset($_REQUEST["year"])?$_REQUEST["year"]:date("Y");
$month=isset($_REQUEST["month"])?$_REQUEST["month"]:date("m");
$langs->load("other");
/*
* Actions
@ -136,6 +139,7 @@ if ($filtert) $param.="&filtert=".$filtert;
if ($filterd) $param.="&filterd=".$filterd;
if ($time) $param.="&time=".$_REQUEST["time"];
if ($socid) $param.="&socid=".$_REQUEST["socid"];
if ($showbirthday) $param.="&showbirthday=1";
if ($_GET["type"]) $param.="&type=".$_REQUEST["type"];
// Show navigation bar
@ -145,6 +149,9 @@ $nav.=" ".$year;
$nav.=" </span>\n";
$nav.="<a href=\"?year=".$next_year."&amp;month=".$next_month."&amp;region=".$region.$param."\">".img_next($langs->trans("Next"))."</a>\n";
// Must be after the nav definition
$param.='&year='.$year.'&month='.$month;
print_fiche_titre($title,$nav,"");
// Filters
@ -155,6 +162,7 @@ if ($canedit)
print '<input type="hidden" name="time" value="'.$_REQUEST["time"].'">';
print '<input type="hidden" name="year" value="'.$year.'">';
print '<input type="hidden" name="month" value="'.$month.'">';
print '<input type="hidden" name="showbirthday" value="'.$showbirthday.'">';
print '<table class="border" width="100%">';
print '<tr>';
print '<td nowrap="nowrap">';
@ -167,7 +175,7 @@ if ($canedit)
print img_picto($langs->trans("ViewList"),'object_list').' <input type="submit" class="button" name="viewlist" value="'.$langs->trans("ViewList").'">';
print '<br>';
print '<br>';
print img_picto($langs->trans("ViewCal"),'object_calendar').' <input type="submit" class="button" name="viewcal" value="'.$langs->trans("ViewCal").'" disabled="true">';
print img_picto($langs->trans("ViewCal"),'object_calendar').' <input type="submit" class="button" name="viewcal" value="'.$langs->trans("ViewCal").'">';
print '</td>';
print '</tr>';
@ -193,15 +201,18 @@ if ($canedit)
// Get event in an array
$actionarray=array();
$sql = 'SELECT a.id,a.label,';
$sql.= ' '.$db->pdate('a.datep').' as datep,';
$sql.= ' '.$db->pdate('a.datep2').' as datep2,';
$sql.= ' '.$db->pdate('a.datea').' as datea,';
$sql.= ' '.$db->pdate('a.datea2').' as datea2,';
$sql.= ' a.percent,';
$sql.= ' a.fk_user_author,a.fk_user_action,a.fk_user_done';
$sql.= ' FROM '.MAIN_DB_PREFIX.'actioncomm as a';
$sql.= ' WHERE 1=1';
$sql.= ' a.fk_user_author,a.fk_user_action,a.fk_user_done,';
$sql.= ' ca.code';
$sql.= ' FROM '.MAIN_DB_PREFIX.'actioncomm as a, '.MAIN_DB_PREFIX.'c_actioncomm as ca';
$sql.= ' WHERE a.fk_action = ca.id';
if ($_GET["action"] == 'show_day')
{
$sql.= ' AND datep BETWEEN '.$db->idate(dolibarr_mktime(0,0,0,$month,$_GET["day"],$year));
@ -217,15 +228,15 @@ if ($filtera > 0 || $filtert > 0 || $filterd > 0)
}
if ($status == 'done') { $sql.= " AND a.percent = 100"; }
if ($status == 'todo') { $sql.= " AND a.percent < 100"; }
// \TODO Limit select on dates
$sql .= ' ORDER BY datep';
// \TODO Add filters on dates
//print $sql;
$actionarray=array();
$resql=$db->query($sql);
if ($resql)
{
$num = $db->num_rows($resql);
$i=0;
while ($i < $num)
{
$obj = $db->fetch_object($resql);
@ -233,8 +244,7 @@ if ($resql)
$action->id=$obj->id;
$action->datep=$obj->datep;
$action->datef=$obj->datep2;
//$action->date=$obj->datea;
//$action->dateend=$obj->datea2;
$action->type_code=$obj->code;
$action->libelle=$obj->label;
$action->percentage=$obj->percent;
$action->author->id=$obj->fk_user_author;
@ -285,6 +295,66 @@ else
dolibarr_print_error($db);
}
if ($showbirthday)
{
// Add events in array
$sql = 'SELECT sp.rowid, sp.name, sp.firstname,';
$sql.= ' '.$db->pdate('sp.birthday').' as birthday';
$sql.= ' FROM '.MAIN_DB_PREFIX.'socpeople as sp';
$sql.= ' WHERE (priv=0 OR (priv=1 AND fk_user_creat='.$user->id.'))';
if ($_GET["action"] == 'show_day')
{
$sql.= ' AND birthday BETWEEN '.$db->idate(dolibarr_mktime(0,0,0,$month,$_GET["day"],$year));
$sql.= ' AND '.$db->idate(dolibarr_mktime(23,59,59,$month,$_GET["day"],$year));
}
// \TODO Limit select on dates
$sql .= ' ORDER BY birthday';
//print $sql;
$resql=$db->query($sql);
if ($resql)
{
$num = $db->num_rows($resql);
$i=0;
while ($i < $num)
{
$obj = $db->fetch_object($resql);
$action=new ActionComm($db);
$action->id=$obj->rowid; // We put contact id in action id for birthdays events
$action->datep=$obj->birthday;
$action->datef=$obj->birthday;
$action->type_code='BIRTHDAY';
$action->libelle=$langs->trans("Birthday").' '.$obj->firstname.' '.$obj->name;
$action->percentage=100;
$action->date_start_in_calendar=$action->datep;
$action->date_end_in_calendar=$action->datef;
$action->ponctuel=0;
// Add an entry in actionarray for each day
$daycursor=$action->date_start_in_calendar;
$annee = date('Y',$daycursor);
$mois = date('m',$daycursor);
$jour = date('d',$daycursor);
$loop=true;
$daykey=dolibarr_mktime(0,0,0,$mois,$jour,$annee);
do
{
$actionarray[$daykey][]=$action;
$daykey+=60*60*24;
if ($daykey > $action->date_end_in_calendar) $loop=false;
}
while ($loop);
$i++;
}
}
else
{
dolibarr_print_error($db);
}
}
// Define theme_datacolor array
$color_file = DOL_DOCUMENT_ROOT."/theme/".$conf->theme."/graph-color.php";
if (is_readable($color_file))
@ -293,6 +363,16 @@ if (is_readable($color_file))
}
if (! is_array($theme_datacolor)) $theme_datacolor=array(array(120,130,150), array(200,160,180), array(190,190,220));
$link='<a href="'.$_SERVER['PHP_SELF'];
$newparam=eregi_replace('showbirthday=[0-1]','showbirthday='.(empty($showbirthday)?1:0),$param);
if (! eregi('showbirthday=',$newparam)) $newparam.='&showbirthday=1';
$link.='?'.$newparam;
$link.='">';
if (empty($showbirthday)) $link.=$langs->trans("AgendaShowBirthdayEvents");
else $link.=$langs->trans("AgendaHideBirthdayEvents");
$link.='</a>';
print_fiche_titre('',$link);
if ($_GET["action"] != 'show_day')
{
echo '<table width="100%" class="nocellnopadd">';
@ -426,43 +506,51 @@ function show_day_events($db, $day, $month, $year, $style, $actionarray, $maxPri
// Show rect of event
$colorindex=0;
if ($action->author->id == $user->id || $action->usertodo->id == $user->id || $action->userdone->id == $user->id) $colorindex=1;
if ($action->type_code == 'BIRTHDAY') $colorindex=2;
$color=sprintf("%02x%02x%02x",$theme_datacolor[$colorindex][0],$theme_datacolor[$colorindex][1],$theme_datacolor[$colorindex][2]);
//print "x".$color;
print '<table class="cal_event" style="background: #'.$color.'; -moz-border-radius:4px; " width="100%"><tr>';
print '<td nowrap="nowrap">';
$tmpyearstart = date('Y',$action->date_start_in_calendar);
$tmpmonthstart = date('m',$action->date_start_in_calendar);
$tmpdaystart = date('d',$action->date_start_in_calendar);
$tmpyearend = date('Y',$action->date_end_in_calendar);
$tmpmonthend = date('m',$action->date_end_in_calendar);
$tmpdayend = date('d',$action->date_end_in_calendar);
// Hour start
if ($tmpyearstart == $annee && $tmpmonthstart == $mois && $tmpdaystart == $jour)
if ($action->type_code != 'BIRTHDAY')
{
print dolibarr_print_date($action->date_start_in_calendar,'%H:%M');
$tmpyearstart = date('Y',$action->date_start_in_calendar);
$tmpmonthstart = date('m',$action->date_start_in_calendar);
$tmpdaystart = date('d',$action->date_start_in_calendar);
$tmpyearend = date('Y',$action->date_end_in_calendar);
$tmpmonthend = date('m',$action->date_end_in_calendar);
$tmpdayend = date('d',$action->date_end_in_calendar);
// Hour start
if ($tmpyearstart == $annee && $tmpmonthstart == $mois && $tmpdaystart == $jour)
{
print dolibarr_print_date($action->date_start_in_calendar,'%H:%M');
if ($action->date_end_in_calendar && $action->date_start_in_calendar != $action->date_end_in_calendar)
{
if ($tmpyearstart == $tmpyearend && $tmpmonthstart == $tmpmonthend && $tmpdaystart == $tmpdayend)
print '-';
//else
//print '...';
}
}
if ($action->date_end_in_calendar && $action->date_start_in_calendar != $action->date_end_in_calendar)
{
if ($tmpyearstart == $tmpyearend && $tmpmonthstart == $tmpmonthend && $tmpdaystart == $tmpdayend)
print '-';
//else
//print '...';
if ($tmpyearstart != $tmpyearend || $tmpmonthstart != $tmpmonthend || $tmpdaystart != $tmpdayend)
{
print '...';
}
}
}
if ($action->date_end_in_calendar && $action->date_start_in_calendar != $action->date_end_in_calendar)
{
if ($tmpyearstart != $tmpyearend || $tmpmonthstart != $tmpmonthend || $tmpdaystart != $tmpdayend)
// Hour end
if ($action->date_end_in_calendar && $action->date_start_in_calendar != $action->date_end_in_calendar)
{
print '...';
if ($tmpyearend == $annee && $tmpmonthend == $mois && $tmpdayend == $jour)
print dolibarr_print_date($action->date_end_in_calendar,'%H:%M');
}
print '<br>';
print $action->getNomUrl(0,14,'cal_event');
}
// Hour end
if ($action->date_end_in_calendar && $action->date_start_in_calendar != $action->date_end_in_calendar)
else // It's a birthday
{
if ($tmpyearend == $annee && $tmpmonthend == $mois && $tmpdayend == $jour)
print dolibarr_print_date($action->date_end_in_calendar,'%H:%M');
print $action->getNomUrl(0,14,'cal_event','birthday');
}
print '<br>';
print $action->getNomUrl(0,14,'cal_event');
print '</td>';
print '<td align="right" nowrap="nowrap">'.$action->getLibStatut(3);
print '</td></tr></table>';

View File

@ -126,8 +126,8 @@ if ($_GET["action"] == 'edit')
print $contact->getCivilityLabel();
print '</td></tr>';
// Birthday
print '<tr><td>'.$langs->trans("BirthdayDate").'</td><td>';
// Date To Birth
print '<tr><td>'.$langs->trans("DateToBirth").'</td><td>';
$html=new Form($db);
if ($contact->birthday)
{
@ -135,7 +135,7 @@ if ($_GET["action"] == 'edit')
}
else
{
print $html->select_date(0,'birthday',0,0,1,"perso");
print $html->select_date('','birthday',0,0,1,"perso");
}
print '</td>';
@ -192,19 +192,18 @@ else
print $contact->getCivilityLabel();
print '</td></tr>';
// Birthday
// Date To Birth
if ($contact->birthday)
{
print '<tr><td>'.$langs->trans("BirthdayDate").'</td><td colspan="3">'.dolibarr_print_date($contact->birthday,"day");
if ($contact->birthday_alert)
print ' (alerte anniversaire active)</td>';
else
print ' (alerte anniversaire inactive)</td>';
print '<tr><td>'.$langs->trans("DateToBirth").'</td><td colspan="3">'.dolibarr_print_date($contact->birthday,"day");
print ' (';
if ($contact->birthday_alert) print 'alerte anniversaire active';
else print 'alerte anniversaire inactive';
print ')</td>';
}
else
{
print '<tr><td>'.$langs->trans("Birthday").'</td><td colspan="3">'.$langs->trans("Unknown")."</td>";
print '<tr><td>'.$langs->trans("DateToBirth").'</td><td colspan="3">'.$langs->trans("Unknown")."</td>";
}
print "</tr>";

View File

@ -42,3 +42,5 @@ AgendaUrlOptions2=<b>login=%s</b> to restrict output to actions created by, affe
AgendaUrlOptions3=<b>logina=%s</b> to restrict output to actions created by user <b>%s</b>.
AgendaUrlOptions4=<b>logint=%s</b> to restrict output to actions affected to user <b>%s</b>.
AgendaUrlOptions5=<b>logind=%s</b> to restrict output to actions done by user <b>%s</b>.
AgendaShowBirthdayEvents=Show birthday's contacts
AgendaHideBirthdayEvents=Hide birthday's contacts

View File

@ -62,7 +62,6 @@ Fax=Fax
Zip=Zip Code
Town=Town
Web=Web
Birthday=Birthday
VATIsUsed=VAT is used
VATIsNotUsed=VAT is not used
ThirdPartyEMail=%s

View File

@ -22,6 +22,7 @@ AddTrip=Add trip
Tools=Tools
Birthday=Birthday
BirthdayDate=Birthday
DateToBirth=Date to birth
Notify_NOTIFY_VAL_FICHINTER=Validate intervention
Notify_NOTIFY_VAL_FAC=Validate bill
NbOfAttachedFiles=Number of attached files/documents

View File

@ -60,7 +60,6 @@ Fax=Fax
Zip=Código postal
Town=Población
Web=Web
Birthday=Fecha de nacimiento
VATIsUsed=Sujeto a IVA
VATIsNotUsed=No sujeto a IVA
ThirdPartyEMail=%s

View File

@ -23,6 +23,7 @@ AddTrip=Crear desplazamiento
Tools=Utilidades
Birthday=Aniversario
BirthdayDate=Fecha aniversario
DateToBirth=Fecha de nacimiento
Notify_NOTIFY_VAL_FICHINTER=Validación ficha intervención
Notify_NOTIFY_VAL_FAC=Validación factura
NbOfAttachedFiles=Número archivos/documentos adjuntos

View File

@ -46,7 +46,6 @@ Fax=Fax
Zip=Code postal
Town=Ville
Web=Web
Birthday=Anniversaire
VATIsUsed=Utilise la TVA
##### Professionnal ID #####
ProfId1Short=Id prof. 1

View File

@ -42,3 +42,5 @@ AgendaUrlOptions2=<b>login=%s</b> pour limiter l'export aux actions cr
AgendaUrlOptions3=<b>logina=%s</b> pour limiter l'export aux actions crées par l'utilisateur <b>%s</b>.
AgendaUrlOptions4=<b>logint=%s</b> pour limiter l'export aux actions affectées à l'utilisateur <b>%s</b>.
AgendaUrlOptions5=<b>logind=%s</b> pour limiter l'export aux actions réalisées par l'utilisateur <b>%s</b>.
AgendaShowBirthdayEvents=Afficher anniversaires contacts
AgendaHideBirthdayEvents=Cacher anniversaires contacts

View File

@ -62,7 +62,6 @@ Fax=Fax
Zip=Code postal
Town=Ville
Web=Web
Birthday=Date de naissance
VATIsUsed=Assujetti à TVA
VATIsNotUsed=Non assujetti à TVA
ThirdPartyEMail=%s

View File

@ -22,6 +22,7 @@ AddTrip=Cr
Tools=Outils
Birthday=Anniversaire
BirthdayDate=Date anniversaire
DateToBirth=Date de naissance
Notify_NOTIFY_VAL_FICHINTER=Validation fiche intervention
Notify_NOTIFY_VAL_FAC=Validation facture
NbOfAttachedFiles=Nombre de fichiers/documents liés

View File

@ -49,7 +49,6 @@ Fax=Fax
Zip=Postcode
Town=Stad
Web=Website
Birthday=Verjaardag
VATIsUsed=Gebruik BTW
ThirdPartyEMail=%s
##### Professionnal ID #####