Qual: Uniformize error management, add transaction level

Fix: Could not reset birthday
This commit is contained in:
Laurent Destailleur
2010-11-19 21:24:48 +00:00
parent 2468ae22ab
commit df677b07b0
6 changed files with 322 additions and 237 deletions

View File

@@ -454,8 +454,8 @@ class ActionComm extends CommonObject
/**
* \brief Charge les informations d'ordre info dans l'objet facture
* \param id Id de la facture a charger
* Charge les informations d'ordre info dans l'objet facture
* @param id Id de la facture a charger
*/
function info($id)
{
@@ -502,9 +502,9 @@ class ActionComm extends CommonObject
/**
* \brief Retourne le libelle du statut de la commande
* \param mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto
* \return string Libelle
* Return label of status
* @param mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto
* @return string Libelle
*/
function getLibStatut($mode)
{
@@ -512,10 +512,10 @@ class ActionComm extends CommonObject
}
/**
* \brief Renvoi le libelle d'un statut donne
* \param percent Pourcentage avancement
* \param mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto
* \return string Libelle
* Return label of action status
* @param percent Percent
* @param mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto
* @return string Label
*/
function LibStatut($percent,$mode)
{
@@ -523,7 +523,7 @@ class ActionComm extends CommonObject
if ($mode == 0)
{
if ($percent==0) return $langs->trans('StatusActionToDo');
if ($percent==0) return $langs->trans('StatusActionToDo').' (0%)';
if ($percent > 0 && $percent < 100) return $langs->trans('StatusActionInProcess').' ('.$percent.'%)';
if ($percent >= 100) return $langs->trans('StatusActionDone').' (100%)';
}
@@ -541,9 +541,9 @@ class ActionComm extends CommonObject
}
if ($mode == 3)
{
if ($percent==0) return img_picto($langs->trans("Status").': '.$langs->trans('StatusActionToDo'),'statut1');
if ($percent==0) return img_picto($langs->trans("Status").': '.$langs->trans('StatusActionToDo').' (0%)','statut1');
if ($percent > 0 && $percent < 100) return img_picto($langs->trans("Status").': '.$langs->trans('StatusActionInProcess').' ('.$percent.'%)','statut3');
if ($percent >= 100) return img_picto($langs->trans("Status").': '.$langs->trans('StatusActionDone'),'statut6');
if ($percent >= 100) return img_picto($langs->trans("Status").': '.$langs->trans('StatusActionDone').' (100%)','statut6');
}
if ($mode == 4)
{
@@ -560,20 +560,20 @@ class ActionComm extends CommonObject
}
/**
* \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 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
* 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 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=0,$classname='',$option='')
{
global $langs;
$result='';
if ($option=='birthday') $lien = '<a '.($classname?'class="'.$classname.'" ':'').'href="'.DOL_URL_ROOT.'/contact/perso.php?id='.$this->id.'">';
if ($option=='birthday') $lien = '<a '.($classname?'class="'.$classname.'" ':'').'href="'.DOL_URL_ROOT.'/contact/perso.php?id='.$this->id.'">'.img_object('','contact').' ';
else $lien = '<a '.($classname?'class="'.$classname.'" ':'').'href="'.DOL_URL_ROOT.'/comm/action/fiche.php?id='.$this->id.'">';
$lienfin='</a>';

View File

@@ -22,7 +22,7 @@
/**
* \file htdocs/comm/action/index.php
* \ingroup agenda
* \brief Page accueil des rapports des actions
* \brief Home page of calendar events
* \version $Id$
*/
@@ -580,6 +580,7 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$action
print $action->getNomUrl(0,$nbofchartoshow,'cal_event','birthday');
}
print '</td>';
// Status - Percent
print '<td align="right" nowrap="nowrap">';
if ($action->type_code != 'BIRTHDAY') print $action->getLibStatut(3);
else print '&nbsp;';

View File

@@ -77,9 +77,9 @@ class Contact extends CommonObject
/**
* \brief Constructeur de l'objet contact
* \param DB Habler d'acces base
* \param id Id contact
* Constructor of class Contact
* @param DB Habler d'acces base
* @param id Id contact
*/
function Contact($DB, $id=0)
{
@@ -90,16 +90,19 @@ class Contact extends CommonObject
}
/**
* \brief Add a contact into database
* \param user Object user that create
* \return int <0 if KO, >0 if OK
* Add a contact into database
* @param user Object user that create
* @return int <0 if KO, >0 if OK
*/
function create($user)
{
global $conf, $langs;
$error=0;
$now=dol_now();
$this->db->begin();
// Clean parameters
$this->name=trim($this->name);
if (! $this->socid) $this->socid = 0;
@@ -122,36 +125,64 @@ class Contact extends CommonObject
{
$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."socpeople");
if (! $error)
{
$result=$this->update($this->id, $user, 1);
if ($result < 0)
{
$this->error=$this->db->error();
return -2;
$error++;
$this->error=$this->db->lasterror();
}
}
if (! $error)
{
$result=$this->update_perso($this->id, $user);
if ($result < 0)
{
$error++;
$this->error=$this->db->lasterror();
}
}
if (! $error)
{
// Appel des triggers
include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
$interface=new Interfaces($this->db);
$result=$interface->run_triggers('CONTACT_CREATE',$this,$user,$langs,$conf);
if ($result < 0) { $error++; $this->errors=$interface->errors; }
// Fin appel triggers
}
if (! $error)
{
$this->db->commit();
return $this->id;
}
else
{
$this->error=$this->db->error();
$this->db->rollback();
dol_syslog("Contact::create ".$this->error, LOG_ERR);
return -2;
}
}
else
{
$this->error=$this->db->lasterror();
$this->db->rollback();
dol_syslog("Contact::create ".$this->error, LOG_ERR);
return -1;
}
}
/**
* \brief Update informations into database
* \param id Id du contact a mettre a jour
* \param user Objet utilisateur qui effectue la mise a jour
* \param notrigger 0=non, 1=oui
* \return int <0 if KO, >0 if OK
* Update informations into database
* @param id Id du contact a mettre a jour
* @param user Objet utilisateur qui effectue la mise a jour
* @param notrigger 0=non, 1=oui
* @return int <0 if KO, >0 if OK
*/
function update($id, $user=0, $notrigger=0)
{
@@ -226,10 +257,9 @@ class Contact extends CommonObject
}
else
{
$this->db->rollback();
$this->error=$this->db->lasterror().' sql='.$sql;
dol_syslog("Contact::update Error ".$this->error,LOG_ERR);
$this->db->rollback();
return -1;
}
}
@@ -323,29 +353,20 @@ class Contact extends CommonObject
}
/*
* \brief Mise a jour des alertes
* \param id id du contact
* \param user Utilisateur qui demande l'alerte
/**
* Update field alert birthday
* @param id Id of contact
* @param user User asking to change alert or birthday
* @return int
*/
function update_perso($id, $user=0)
{
$error=0;
$result=false;
// Mis a jour contact
$sql = "UPDATE ".MAIN_DB_PREFIX."socpeople SET rowid=".$id;
if ($this->birthday) // <0 si avant 1970, >0 si apres 1970
{
if (preg_match('/^[0-9]+\-/',$this->birthday))
{
// Si date = chaine (ne devrait pas arriver)
$sql .= ", birthday='".$this->birthday."'";
}
else
{
// Si date = timestamp
$sql .= ", birthday=".$this->db->idate($this->birthday);
}
}
$sql .= ", birthday=".($this->birthday ? "'".$this->db->idate($this->birthday)."'" : "null");
if ($user) $sql .= ", fk_user_modif=".$user->id;
$sql .= " WHERE rowid=".$id;
//print "update_perso: ".$this->birthday.'-'.$this->db->idate($this->birthday);
@@ -353,7 +374,8 @@ class Contact extends CommonObject
$resql = $this->db->query($sql);
if (! $resql)
{
$this->error=$this->db->error();
$error++;
$this->error=$this->db->lasterror();
}
// Mis a jour alerte birthday
@@ -370,7 +392,8 @@ class Contact extends CommonObject
$result = $this->db->query($sql);
if (!$result)
{
$this->error='Echec sql='.$sql;
$error++;
$this->error=$this->db->lasterror();
}
}
else
@@ -385,9 +408,11 @@ class Contact extends CommonObject
$result = $this->db->query($sql);
if (! $result)
{
$this->error='Echec sql='.$sql;
$error++;
$this->error=$this->db->lasterror();
}
}
return $result;
}

View File

@@ -110,6 +110,10 @@ else
// Creation contact
if ($_POST["action"] == 'add' && $user->rights->societe->contact->creer)
{
$error=0;
$db->begin();
$object->socid = $_POST["socid"];
$object->name = $_POST["name"];
@@ -130,8 +134,13 @@ else
$object->priv = $_POST["priv"];
$object->note = $_POST["note"];
// Note: Correct date should be completed with location to have exact GM time of birth.
$object->birthday = dol_mktime(0,0,0,$_POST["birthdaymonth"],$_POST["birthdayday"],$_POST["birthdayyear"]);
$object->birthday_alert = $_POST["birthday_alert"];
if (! $_POST["name"])
{
$error++;
array_push($errors,$langs->trans("ErrorFieldRequired",$langs->transnoentities("Lastname").' / '.$langs->transnoentities("Label")));
$_GET["action"] = $_POST["action"] = 'create';
}
@@ -139,16 +148,23 @@ else
if ($_POST["name"])
{
$id = $object->create($user);
if ($id > 0)
if ($id <= 0)
{
$error++;
$errors=array($object->error);
$_GET["action"] = $_POST["action"] = 'create';
}
}
if (! $error && $id > 0)
{
$db->commit();
Header("Location: fiche.php?id=".$id);
exit;
}
else
{
$errors=array($object->error);
$_GET["action"] = $_POST["action"] = 'create';
}
$db->rollback();
}
}
@@ -357,21 +373,21 @@ else
/*
* Onglets
*/
if ($_GET["id"] > 0)
if (GETPOST("id") > 0)
{
// Si edition contact deja existant
$contact = new Contact($db);
$return=$contact->fetch($_GET["id"], $user);
$object = new Contact($db);
$return=$object->fetch(GETPOST("id"), $user);
if ($return <= 0)
{
dol_print_error('',$contact->error);
dol_print_error('',$object->error);
$_GET["id"]=0;
}
/*
* Affichage onglets
*/
$head = contact_prepare_head($contact);
$head = contact_prepare_head($object);
dol_fiche_head($head, 'card', $langs->trans("Contact"), 0, 'contact');
}
@@ -429,8 +445,8 @@ else
print '<table class="border" width="100%">';
// Name
print '<tr><td width="15%" class="fieldrequired">'.$langs->trans("Lastname").' / '.$langs->trans("Label").'</td><td><input name="name" type="text" size="30" maxlength="80" value="'.(isset($_POST["name"])?$_POST["name"]:$object->name).'"></td>';
print '<td width="20%">'.$langs->trans("Firstname").'</td><td width="25%"><input name="firstname" type="text" size="30" maxlength="80" value="'.(isset($_POST["firstname"])?$_POST["firstname"]:$object->firstname).'"></td></tr>';
print '<tr><td width="20%" class="fieldrequired">'.$langs->trans("Lastname").' / '.$langs->trans("Label").'</td><td width="30%"><input name="name" type="text" size="30" maxlength="80" value="'.(isset($_POST["name"])?$_POST["name"]:$object->name).'"></td>';
print '<td width="20%">'.$langs->trans("Firstname").'</td><td width="30%"><input name="firstname" type="text" size="30" maxlength="80" value="'.(isset($_POST["firstname"])?$_POST["firstname"]:$object->firstname).'"></td></tr>';
// Company
if ($socid > 0)
@@ -511,9 +527,43 @@ else
// Note
print '<tr><td valign="top">'.$langs->trans("Note").'</td><td colspan="3" valign="top"><textarea name="note" cols="70" rows="'.ROWS_3.'">'.(isset($_POST["note"])?$_POST["note"]:$object->note).'</textarea></td></tr>';
print '<tr><td align="center" colspan="4"><input type="submit" class="button" value="'.$langs->trans("Add").'"></td></tr>';
print "</table><br>";
// Add personnal information
print_fiche_titre('<div class="comboperso">'.$langs->trans("PersonalInformations").'</div>','','');
print '<table class="border" width="100%">';
// Date To Birth
print '<tr><td width="20%">'.$langs->trans("DateToBirth").'</td><td width="30%">';
$html=new Form($db);
if ($object->birthday)
{
print $html->select_date($object->birthday,'birthday',0,0,0,"perso");
}
else
{
print $html->select_date('','birthday',0,0,1,"perso");
}
print '</td>';
print '<td colspan="2">'.$langs->trans("Alert").': ';
if ($object->birthday_alert)
{
print '<input type="checkbox" name="birthday_alert" checked></td>';
}
else
{
print '<input type="checkbox" name="birthday_alert"></td>';
}
print '</tr>';
print "</table><br>";
print '<center><input type="submit" class="button" value="'.$langs->trans("Add").'"></center>';
print "</form>";
}
elseif (GETPOST("action") == 'edit' && GETPOST("id"))
@@ -544,14 +594,14 @@ else
if ($conf->use_javascript_ajax)
{
print "\n".'<script type="text/javascript" language="javascript">';
print '<script type="text/javascript" language="javascript">';
print 'jQuery(document).ready(function () {
jQuery("#selectpays_id").change(function() {
document.formsoc.action.value="edit";
document.formsoc.submit();
});
})';
print '</script>'."\n";
print '</script>';
}
print '<form method="post" action="'.$_SERVER["PHP_SELF"].'?id='.GETPOST("id").'" name="formsoc">';
@@ -569,11 +619,11 @@ else
print '</td></tr>';
// Name
print '<tr><td class="fieldrequired">'.$langs->trans("Lastname").' / '.$langs->trans("Label").'</td><td><input name="name" type="text" size="20" maxlength="80" value="'.(isset($_POST["name"])?$_POST["name"]:$object->name).'"></td>';
print '<td width="20%">'.$langs->trans("Firstname").'</td><td width="25%"><input name="firstname" type="text" size="20" maxlength="80" value="'.(isset($_POST["firstname"])?$_POST["firstname"]:$object->firstname).'"></td></tr>';
print '<tr><td width="20%" class="fieldrequired">'.$langs->trans("Lastname").' / '.$langs->trans("Label").'</td><td width="30%"><input name="name" type="text" size="20" maxlength="80" value="'.(isset($_POST["name"])?$_POST["name"]:$object->name).'"></td>';
print '<td width="20%">'.$langs->trans("Firstname").'</td><td width="30%"><input name="firstname" type="text" size="20" maxlength="80" value="'.(isset($_POST["firstname"])?$_POST["firstname"]:$object->firstname).'"></td></tr>';
// Company
print '<tr><td width="20%">'.$langs->trans("Company").'</td>';
print '<tr><td>'.$langs->trans("Company").'</td>';
print '<td colspan="3">';
print $form->select_societes(isset($_POST["socid"])?$_POST["socid"]:($object->socid?$object->socid:-1),'socid','',1);
print '</td>';
@@ -680,12 +730,13 @@ else
else print $langs->trans("NoDolibarrAccess");
print '</td></tr>';
print '<tr><td colspan="4" align="center">';
print '</table><br>';
print '<center>';
print '<input type="submit" class="button" name="save" value="'.$langs->trans("Save").'">';
print ' &nbsp; ';
print '<input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'">';
print '</td></tr>';
print '</table>';
print '</center>';
print "</form>";
}
@@ -724,7 +775,7 @@ else
// Name
print '<tr><td width="20%">'.$langs->trans("Lastname").'</td><td width="30%">'.$object->name.'</td>';
print '<td width="25%">'.$langs->trans("Firstname").'</td><td width="25%">'.$object->firstname.'</td></tr>';
print '<td width="20%">'.$langs->trans("Firstname").'</td><td width="30%">'.$object->firstname.'</td></tr>';
// Company
print '<tr><td>'.$langs->trans("Company").'</td><td colspan="3">';

View File

@@ -36,6 +36,7 @@ $contactid = isset($_GET["id"])?$_GET["id"]:'';
if ($user->societe_id) $socid=$user->societe_id;
$result = restrictedArea($user, 'contact', $contactid, 'socpeople');
/*
* Action
*/
@@ -102,8 +103,8 @@ if ($_GET["action"] == 'edit')
print '</td></tr>';
// Name
print '<tr><td>'.$langs->trans("Lastname").'</td><td>'.$contact->nom.'</td>';
print '<td>'.$langs->trans("Firstname").'</td><td width="25%">'.$contact->prenom.'</td>';
print '<tr><td width="20%">'.$langs->trans("Lastname").'</td><td width="30%">'.$contact->nom.'</td>';
print '<td width="20%">'.$langs->trans("Firstname").'</td><td width="30%">'.$contact->prenom.'</td>';
// Company
if ($contact->socid > 0)
@@ -128,20 +129,13 @@ if ($_GET["action"] == 'edit')
// Date To Birth
print '<tr><td>'.$langs->trans("DateToBirth").'</td><td>';
$html=new Form($db);
if ($contact->birthday)
{
print $html->select_date($contact->birthday,'birthday',0,0,0,"perso");
}
else
{
print $html->select_date('','birthday',0,0,1,"perso");
}
print $html->select_date($contact->birthday,'birthday',0,0,1,"perso");
print '</td>';
print '<td colspan="2">'.$langs->trans("Alert").': ';
if ($contact->birthday_alert)
{
print '<input type="checkbox" name="birthday_alert" checked></td>';
print '<input type="checkbox" name="birthday_alert" checked="true"></td>';
}
else
{
@@ -149,8 +143,13 @@ if ($_GET["action"] == 'edit')
}
print '</tr>';
print '<tr><td colspan="4" align="center"><input class="button" type="submit" value="'.$langs->trans("Save").'"></td></tr>';
print "</table>";
print "</table><br>";
print '<center>';
print '<input type="submit" class="button" name="save" value="'.$langs->trans("Save").'">';
print ' &nbsp; ';
print '<input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'">';
print '</center>';
print "</form>";
}
@@ -167,8 +166,8 @@ else
print '</td></tr>';
// Name
print '<tr><td>'.$langs->trans("Lastname").'</td><td>'.$contact->name.'</td>';
print '<td>'.$langs->trans("Firstname").'</td><td width="25%">'.$contact->firstname.'</td></tr>';
print '<tr><td width="20%">'.$langs->trans("Lastname").'</td><td width="30%">'.$contact->name.'</td>';
print '<td width="20%">'.$langs->trans("Firstname").'</td><td width="30%">'.$contact->firstname.'</td></tr>';
// Company
if ($contact->socid > 0)

View File

@@ -379,11 +379,18 @@ function formatDate(date,format)
* getDateFromFormat(date_string, format_string) Purpose: This function takes a
* date string and a format string. It parses the date string with format and it
* returns the date as a javascript Date() object. If date does not match
* format, it returns 0. The format string can use the following tags: Field |
* Tags -------------+------------------------------- Year | yyyy (4 digits), yy
* (2 digits) Month | MM (2 digits) Day of Month | dd (2 digits) Hour (1-12) |
* hh (2 digits) Hour (0-23) | HH (2 digits) Minute | mm (2 digits) Second | ss
* (2 digits) Author: Laurent Destailleur Licence: GPL
* format, it returns 0. The format string can use the following tags:
* Field | Tags
* -------------+-----------------------------------
* Year | yyyy (4 digits), yy (2 digits)
* Month | MM (2 digits)
* Day of Month | dd (2 digits)
* Hour (1-12) | hh (2 digits)
* Hour (0-23) | HH (2 digits)
* Minute | mm (2 digits)
* Second | ss (2 digits)
* Author: Laurent Destailleur
* Licence: GPL
* ==================================================================
*/
function getDateFromFormat(val,format)
@@ -394,6 +401,8 @@ function getDateFromFormat(val,format)
val=val+"";
format=format+"";
if (val == '') return 0;
var now=new Date();
var year=now.getYear(); if (year.length < 4) { year=""+(year-0+1900); }
var month=now.getMonth()+1;