diff --git a/htdocs/actioncomm.class.php b/htdocs/actioncomm.class.php index 04bc9bbc8fd7f4c44e3790b7d77b5a5a9ea48ee8..679bb9e181fd3932800b5c05349f8f1b2ed63fc4 100644 --- a/htdocs/actioncomm.class.php +++ b/htdocs/actioncomm.class.php @@ -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�res max dans libell� + * \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 { diff --git a/htdocs/comm/action/fiche.php b/htdocs/comm/action/fiche.php index 30043f2485eadc50769bd8f6105212bca271490c..1ea40e93daefcde35843327480b3cf7faa27ca7c 100644 --- a/htdocs/comm/action/fiche.php +++ b/htdocs/comm/action/fiche.php @@ -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) { diff --git a/htdocs/comm/action/index.php b/htdocs/comm/action/index.php index ed1498ba72c00fdd419f28ffb9cd65584c6111e5..612a10270438bdf1ca60729a29c07b3feede82f1 100644 --- a/htdocs/comm/action/index.php +++ b/htdocs/comm/action/index.php @@ -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."&month=".$next_month."&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>'; diff --git a/htdocs/contact/perso.php b/htdocs/contact/perso.php index 26c35a729440dc00f135c434a30e99c61b21c3d0..b9bc079b8ead682132559bf8a58886762e8166d1 100644 --- a/htdocs/contact/perso.php +++ b/htdocs/contact/perso.php @@ -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>"; diff --git a/htdocs/langs/en_US/agenda.lang b/htdocs/langs/en_US/agenda.lang index 942d7d1a7ef41e2328fc968384b84b5680f39e14..228aa93e2c804581a8ab97b3b8ffb5734b5cca00 100644 --- a/htdocs/langs/en_US/agenda.lang +++ b/htdocs/langs/en_US/agenda.lang @@ -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 \ No newline at end of file diff --git a/htdocs/langs/en_US/companies.lang b/htdocs/langs/en_US/companies.lang index 4c0563cc86a96db9ef3167244df0bc0cb30ac2df..eee094f459b544d6dfe8d62b8bc51434dd3efee2 100644 --- a/htdocs/langs/en_US/companies.lang +++ b/htdocs/langs/en_US/companies.lang @@ -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 diff --git a/htdocs/langs/en_US/other.lang b/htdocs/langs/en_US/other.lang index feebe6554f7af6652fc4be525031ad9f4d3eb9c9..b5965660e654a996e7e0be2c117b804b9d858b69 100644 --- a/htdocs/langs/en_US/other.lang +++ b/htdocs/langs/en_US/other.lang @@ -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 diff --git a/htdocs/langs/es_ES/companies.lang b/htdocs/langs/es_ES/companies.lang index 9f6eaee3d084f1f77abb7bdde8faa2016606073c..7f8cfa739cbb28ee2beaa2156d04f36a8d04e339 100644 --- a/htdocs/langs/es_ES/companies.lang +++ b/htdocs/langs/es_ES/companies.lang @@ -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 diff --git a/htdocs/langs/es_ES/other.lang b/htdocs/langs/es_ES/other.lang index d78cff646834b13d537214d4ad849608099162a5..b1eb63390712dd4e181d084c7adb8c5811719dbb 100644 --- a/htdocs/langs/es_ES/other.lang +++ b/htdocs/langs/es_ES/other.lang @@ -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 diff --git a/htdocs/langs/fr_BE/companies.lang b/htdocs/langs/fr_BE/companies.lang index 53de95edc3bccfe0232deafc5ba0a88ec1bff215..feaa8b818d174b267c2dba0ff55642a0add3778f 100644 --- a/htdocs/langs/fr_BE/companies.lang +++ b/htdocs/langs/fr_BE/companies.lang @@ -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 diff --git a/htdocs/langs/fr_FR/agenda.lang b/htdocs/langs/fr_FR/agenda.lang index d7b6143490e56411cfadfb24b904401dcd82f014..460f4e10f93e68efa8735989a1f5d78eb258f083 100644 --- a/htdocs/langs/fr_FR/agenda.lang +++ b/htdocs/langs/fr_FR/agenda.lang @@ -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 \ No newline at end of file diff --git a/htdocs/langs/fr_FR/companies.lang b/htdocs/langs/fr_FR/companies.lang index c9b34eb6102f6c7c5452912ae5cba215525a4937..846f9d60807b32765fb24c89e8cf3bd8b662ad89 100644 --- a/htdocs/langs/fr_FR/companies.lang +++ b/htdocs/langs/fr_FR/companies.lang @@ -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 diff --git a/htdocs/langs/fr_FR/other.lang b/htdocs/langs/fr_FR/other.lang index a889b3beaef36675534ec78463a0360e9bb9b158..e0d570c2ef5b07c0b56223683b97aa1ea4339c97 100644 --- a/htdocs/langs/fr_FR/other.lang +++ b/htdocs/langs/fr_FR/other.lang @@ -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 diff --git a/htdocs/langs/nl_BE/companies.lang b/htdocs/langs/nl_BE/companies.lang index c20ea4113153cbfafb8452e0058f2d20a497107a..c12c5b309e0dcd67fdbba369445b1c74a86b1f3e 100644 --- a/htdocs/langs/nl_BE/companies.lang +++ b/htdocs/langs/nl_BE/companies.lang @@ -49,7 +49,6 @@ Fax=Fax Zip=Postcode Town=Stad Web=Website -Birthday=Verjaardag VATIsUsed=Gebruik BTW ThirdPartyEMail=%s ##### Professionnal ID #####