Fix: Bug divers sur des problèmes de quots.

Qual: Création des sociétés en transactions.
Qual: Meilleur gestion des erreurs sur la création des sociétés.
This commit is contained in:
Laurent Destailleur 2005-01-29 23:49:07 +00:00
parent 82494a3598
commit c36927ea5d
2 changed files with 146 additions and 105 deletions

View File

@ -47,27 +47,27 @@ $soc = new Societe($db);
if ($_POST["action"] == 'add' or $_POST["action"] == 'update') if ($_POST["action"] == 'add' or $_POST["action"] == 'update')
{ {
$soc->nom = $_POST["nom"]; $soc->nom = stripslashes($_POST["nom"]);
$soc->adresse = $_POST["adresse"]; $soc->adresse = stripslashes($_POST["adresse"]);
$soc->cp = $_POST["cp"]; $soc->cp = stripslashes($_POST["cp"]);
$soc->ville = $_POST["ville"]; $soc->ville = stripslashes($_POST["ville"]);
$soc->pays_id = $_POST["pays_id"]; $soc->pays_id = stripslashes($_POST["pays_id"]);
$soc->departement_id = $_POST["departement_id"]; $soc->departement_id = stripslashes($_POST["departement_id"]);
$soc->tel = $_POST["tel"]; $soc->tel = stripslashes($_POST["tel"]);
$soc->fax = $_POST["fax"]; $soc->fax = stripslashes($_POST["fax"]);
$soc->url = ereg_replace( "http://", "", $_POST["url"] ); $soc->url = ereg_replace( "http://", "", $_POST["url"] );
$soc->siren = $_POST["siren"]; $soc->siren = stripslashes($_POST["siren"]);
$soc->siret = $_POST["siret"]; $soc->siret = stripslashes($_POST["siret"]);
$soc->ape = $_POST["ape"]; $soc->ape = stripslashes($_POST["ape"]);
$soc->prefix_comm = $_POST["prefix_comm"]; $soc->prefix_comm = stripslashes($_POST["prefix_comm"]);
$soc->code_client = $_POST["code_client"]; $soc->code_client = stripslashes($_POST["code_client"]);
$soc->codeclient_modifiable = $_POST["codeclient_modifiable"]; $soc->codeclient_modifiable = stripslashes($_POST["codeclient_modifiable"]);
$soc->capital = $_POST["capital"]; $soc->capital = stripslashes($_POST["capital"]);
$soc->tva_intra = $_POST["tva_intra_code"] . $_POST["tva_intra_num"]; $soc->tva_intra = stripslashes($_POST["tva_intra_code"] . $_POST["tva_intra_num"]);
$soc->forme_juridique_code = $_POST["forme_juridique_code"]; $soc->forme_juridique_code = stripslashes($_POST["forme_juridique_code"]);
$soc->effectif_id = $_POST["effectif_id"]; $soc->effectif_id = stripslashes($_POST["effectif_id"]);
$soc->client = $_POST["client"]; $soc->client = stripslashes($_POST["client"]);
$soc->fournisseur = $_POST["fournisseur"]; $soc->fournisseur = stripslashes($_POST["fournisseur"]);
if ($_POST["action"] == 'update') if ($_POST["action"] == 'update')
{ {
@ -77,7 +77,7 @@ if ($_POST["action"] == 'add' or $_POST["action"] == 'update')
$soc->id = $_GET["socid"]; $soc->id = $_GET["socid"];
// doublon sur le prefix comm // doublon sur le prefix comm
$no_reload = 1; $no_reload = 1;
$mesg = $soc->error_message;//"Erreur, le prefix '".$soc->prefix_comm."' existe déjà vous devez en choisir un autre"; $mesg = $soc->error;//"Erreur, le prefix '".$soc->prefix_comm."' existe déjà vous devez en choisir un autre";
$_GET["action"]= "edit"; $_GET["action"]= "edit";
} }
else else
@ -149,10 +149,10 @@ if ($_GET["action"] == 'create')
print_titre($langs->trans("NewCompany")); print_titre($langs->trans("NewCompany"));
print "<br>\n"; print "<br>\n";
if ($soc->error_message) if ($soc->error)
{ {
print '<div class="errormessage">'; print '<div class="errormessage">';
print nl2br($soc->error_message); print nl2br($soc->error);
print '</div>'; print '</div>';
} }
@ -164,7 +164,7 @@ if ($_GET["action"] == 'create')
print '<tr><td>'.$langs->trans('Name').'</td><td colspan="3"><input type="text" name="nom" value="'.$soc->nom.'"></td></tr>'; print '<tr><td>'.$langs->trans('Name').'</td><td colspan="3"><input type="text" name="nom" value="'.$soc->nom.'"></td></tr>';
print '<tr><td>'.$langs->trans('Address').'</td><td colspan="3"><textarea name="adresse" cols="40" rows="3" wrap="soft">'; print '<tr><td>'.$langs->trans('Address').'</td><td colspan="3"><textarea name="adresse" cols="40" rows="3" wrap="soft">';
print stripslashes($soc->adresse); print $soc->adresse;
print '</textarea></td></tr>'; print '</textarea></td></tr>';
print '<tr><td>'.$langs->trans('Zip').'</td><td><input size="6" type="text" name="cp" value="'.$soc->cp.'"></td>'; print '<tr><td>'.$langs->trans('Zip').'</td><td><input size="6" type="text" name="cp" value="'.$soc->cp.'"></td>';
@ -237,10 +237,10 @@ elseif ($_GET["action"] == 'edit')
$soc->fetch($_GET["socid"]); $soc->fetch($_GET["socid"]);
} }
if ($soc->error_message) if ($soc->error)
{ {
print '<div class="errormessage">'; print '<div class="error">';
print $soc->error_message; print $soc->error;
print '</div>'; print '</div>';
} }
@ -250,7 +250,7 @@ elseif ($_GET["action"] == 'edit')
print '<table class="border" width="100%">'; print '<table class="border" width="100%">';
print '<tr><td>'.$langs->trans('Name').'</td><td><input type="text" size="40" name="nom" value="'.stripslashes($soc->nom).'"></td>'; print '<tr><td>'.$langs->trans('Name').'</td><td><input type="text" size="40" name="nom" value="'.$soc->nom.'"></td>';
print '<td>'.$langs->trans('Prefix').'</td><td><input type="text" size="5" name="prefix_comm" value="'.$soc->prefix_comm.'"></td></tr>'; print '<td>'.$langs->trans('Prefix').'</td><td><input type="text" size="5" name="prefix_comm" value="'.$soc->prefix_comm.'"></td></tr>';
print '<tr><td valign="top">'.$langs->trans('Address').'</td><td colspan="3"><textarea name="adresse" cols="40" rows="3" wrap="soft">'; print '<tr><td valign="top">'.$langs->trans('Address').'</td><td colspan="3"><textarea name="adresse" cols="40" rows="3" wrap="soft">';
@ -398,10 +398,10 @@ else
} }
if ($soc->error_message) if ($soc->error)
{ {
print '<div class="errormessage">'; print '<div class="errormessage">';
print $soc->error_message; print $soc->error;
print '</div>'; print '</div>';
} }

View File

@ -69,8 +69,9 @@ class Societe {
function Societe($DB, $id=0) function Societe($DB, $id=0)
{ {
global $config; global $config;
$this->creation_bit = 0;
$this->db = $DB; $this->db = $DB;
$this->creation_bit = 0;
$this->id = $id; $this->id = $id;
$this->client = 0; $this->client = 0;
$this->fournisseur = 0; $this->fournisseur = 0;
@ -92,58 +93,81 @@ class Societe {
$this->mod_codeclient = new $var; $this->mod_codeclient = new $var;
$this->codeclient_modifiable = $this->mod_codeclient->modifiable; $this->codeclient_modifiable = $this->mod_codeclient->modifiable;
return 1; return 1;
} }
/** /**
* \brief Crée la societe en base * \brief Crée la societe en base
* \param user Utilisateur qui demande la création * \param user Objet utilisateur qui demande la création
* \return 0 si ok, < 0 si erreur
*/ */
function create($user='') function create($user='')
{ {
global $langs;
$this->nom=trim($this->nom);
$this->db->begin();
$result = $this->verify(); $result = $this->verify();
if ($result == 0) if ($result >= 0)
{ {
$sql = "INSERT INTO ".MAIN_DB_PREFIX."societe (nom, datec, datea, fk_user_creat) ";
$sql .= " VALUES ('".addslashes($this->nom)."', now(), now(), '".$user->id."')";
$sql = "INSERT INTO ".MAIN_DB_PREFIX."societe (nom, datec, datea, fk_user_creat) "; $result=$this->db->query($sql);
$sql .= " VALUES ('".trim($this->nom)."', now(), now(), '".$user->id."');"; if ($result)
{
$this->id = $this->db->last_insert_id();
if ($this->db->query($sql) ) $this->creation_bit = 1;
{
$this->id = $this->db->last_insert_id();
}
$this->creation_bit = 1; $result = $this->update($this->id);
$result = $this->update($this->id); $this->db->commit();
return $result;
}
else
{
if ($this->db->errno() == $this->db->ERROR_DUPLICATE)
{
$this->error=$langs->trans("ErrorCompanyNameAlreadyExists",$this->nom);
}
else {
dolibarr_syslog("Societe::Create echec insert sql=$sql");
}
$this->db->rollback();
return -2;
}
return $result; }
} else {
else $this->db->rollback();
{ dolibarr_syslog("Societe::Create echec verify sql=$sql");
return -1; return -1;
} }
} }
/** /**
* \brief Verification lors de la modification * \brief Verification lors de la modification
* \return 0 si ok, < 0 en cas d'erreur
*/ */
function verify() function verify()
{ {
$this->nom=trim($this->nom);
$result = 0; $result = 0;
$this->error_message = "";
if (strlen(trim($this->nom)) == 0) if (! $this->nom)
{ {
$this->error_message = "Le nom de la société ne peut être vide.\n"; $this->error = "Le nom de la société ne peut être vide.\n";
$result = -2; $result = -2;
} }
@ -158,44 +182,66 @@ class Societe {
{ {
if ($rescode == -1) if ($rescode == -1)
{ {
$this->error_message .= "La syntaxe du code client est incorrecte.\n"; $this->error .= "La syntaxe du code client est incorrecte.\n";
} }
if ($rescode == -2) if ($rescode == -2)
{ {
$this->error_message .= "Vous devez saisir un code client.\n"; $this->error .= "Vous devez saisir un code client.\n";
} }
if ($rescode == -3) if ($rescode == -3)
{ {
$this->error_message .= "Ce code client est déjà utilisé.\n"; $this->error .= "Ce code client est déjà utilisé.\n";
} }
$result = -3; $result = -3;
} }
}
}
return $result; return $result;
} }
/** /**
* \brief Mise a jour des paramètres de la société * \brief Mise a jour des paramètres de la société
* \param id id societe * \param id id societe
* \param user Utilisateur qui demande la mise à jour * \param user Utilisateur qui demande la mise à jour
* \return 0 si ok, < 0 si erreur
*/ */
function update($id, $user='') function update($id, $user='')
{ {
global $langs;
dolibarr_syslog("Societe::Update"); dolibarr_syslog("Societe::Update");
$this->capital=trim($this->capital);
$this->nom=trim($this->nom);
$this->adresse=trim($this->adresse);
$this->cp=trim($this->cp);
$this->ville=trim($this->ville);
$this->departement_id=trim($this->departement_id);
$this->pays_id=trim($this->pays_id);
$this->tel=trim($this->tel);
$this->fax=trim($this->fax);
$this->url=trim($this->url);
$this->siren=trim($this->siren);
$this->siret=trim($this->siret);
$this->ape=trim($this->ape);
$this->prefix_comm=trim($this->prefix_comm);
$this->tva_intra=trim($this->tva_intra);
$this->capital=trim($this->capital);
$this->effectif_id=trim($this->effectif_id);
$this->forme_juridique_code=trim($this->forme_juridique_code);
$result = $this->verify(); $result = $this->verify();
if ($result == 0) if ($result == 0)
{ {
dolibarr_syslog("Societe::Update verify ok"); dolibarr_syslog("Societe::Update verify ok");
if (strlen(trim($this->capital)) == 0) if (strlen($this->capital) == 0)
{ {
$this->capital = 0; $this->capital = 0;
} }
@ -205,17 +251,14 @@ class Societe {
$this->fax = ereg_replace(" ","",$this->fax); $this->fax = ereg_replace(" ","",$this->fax);
$this->fax = ereg_replace("\.","",$this->fax); $this->fax = ereg_replace("\.","",$this->fax);
/* /*
* \todo simpliste pour l'instant mais remplit 95% des cas à améliorer * \todo simpliste pour l'instant mais remplit 95% des cas à améliorer
*/ */
if ($this->departement_id == -1 && $this->pays_id == 1) if ($this->departement_id == -1 && $this->pays_id == 1)
{ {
if (strlen(trim($this->cp)) == 5) if (strlen($this->cp) == 5)
{ {
$depid = departement_rowid($this->db, $depid = departement_rowid($this->db, substr($this->cp,0,2), $this->pays_id);
substr(trim($this->cp),0,2),
$this->pays_id);
if ($depid > 0) if ($depid > 0)
{ {
$this->departement_id = $depid; $this->departement_id = $depid;
@ -228,44 +271,42 @@ class Societe {
* sinon il est impossible de vider les champs * sinon il est impossible de vider les champs
*/ */
$sql = "UPDATE ".MAIN_DB_PREFIX."societe "; $sql = "UPDATE ".MAIN_DB_PREFIX."societe ";
$sql .= " SET nom = '" . addslashes(trim($this->nom)) ."'"; // Champ obligatoire $sql .= " SET nom = '" . addslashes($this->nom) ."'"; // Champ obligatoire
$sql .= ",address = '" . addslashes($this->adresse) ."'";
$sql .= ",address = '" . addslashes(trim($this->adresse)) ."'"; if ($this->cp)
{ $sql .= ",cp = '" . $this->cp ."'"; }
if (trim($this->cp)) if ($this->ville)
{ $sql .= ",cp = '" . trim($this->cp) ."'"; } { $sql .= ",ville = '" . addslashes($this->ville) ."'"; }
if (trim($this->ville)) if ($this->departement_id)
{ $sql .= ",ville = '" . addslashes(trim($this->ville)) ."'"; }
if (trim($this->departement_id))
{ $sql .= ",fk_departement = '" . $this->departement_id ."'"; } { $sql .= ",fk_departement = '" . $this->departement_id ."'"; }
if (trim($this->pays_id)) if ($this->pays_id)
{ $sql .= ",fk_pays = '" . $this->pays_id ."'"; } { $sql .= ",fk_pays = '" . $this->pays_id ."'"; }
$sql .= ",tel = '" . trim($this->tel) ."'"; $sql .= ",tel = '" . $this->tel ."'";
$sql .= ",fax = '" . trim($this->fax) ."'"; $sql .= ",fax = '" . $this->fax ."'";
$sql .= ",url = '" . trim($this->url) ."'"; $sql .= ",url = '" . $this->url ."'";
$sql .= ",siren = '" . trim($this->siren) ."'"; $sql .= ",siren = '" . $this->siren ."'";
$sql .= ",siret = '" . trim($this->siret) ."'"; $sql .= ",siret = '" . $this->siret ."'";
$sql .= ",ape = '" . trim($this->ape) ."'"; $sql .= ",ape = '" . $this->ape ."'";
if (trim($this->prefix_comm)) if ($this->prefix_comm)
{ $sql .= ",prefix_comm = '" . trim($this->prefix_comm) ."'"; } { $sql .= ",prefix_comm = '" . $this->prefix_comm ."'"; }
if (trim($this->tva_intra)) if ($this->tva_intra)
{ $sql .= ",tva_intra = '" . trim($this->tva_intra) ."'"; } { $sql .= ",tva_intra = '" . $this->tva_intra ."'"; }
if (trim($this->capital)) if ($this->capital)
{ $sql .= ",capital = '" . trim($this->capital) ."'"; } { $sql .= ",capital = '" . $this->capital ."'"; }
if (trim($this->effectif_id)) if ($this->effectif_id)
{ $sql .= ",fk_effectif = '" . trim($this->effectif_id) ."'"; } { $sql .= ",fk_effectif = '" . $this->effectif_id ."'"; }
if (trim($this->forme_juridique_code)) if ($this->forme_juridique_code)
{ {
$sql .= ",fk_forme_juridique = '".trim($this->forme_juridique_code)."'"; $sql .= ",fk_forme_juridique = '".$this->forme_juridique_code."'";
} }
$sql .= ",client = " . $this->client; $sql .= ",client = " . $this->client;
@ -304,7 +345,7 @@ class Societe {
if ($this->db->errno() == $this->db->ERROR_DUPLICATE) if ($this->db->errno() == $this->db->ERROR_DUPLICATE)
{ {
// Doublon // Doublon
$this->error_message = "Erreur, le prefix '".$this->prefix_comm."' existe déjà vous devez en choisir un autre"; $this->error = $langs->trans("ErrorPrefixAlreadyExists",$this->prefix_comm);
$result = -1; $result = -1;
} }
else else
@ -467,7 +508,7 @@ class Societe {
} }
else else
{ {
$this->error_message .= "Impossible de supprimer les contacts.\n"; $this->error .= "Impossible de supprimer les contacts.\n";
dolibarr_syslog("Societe::Delete erreur -1"); dolibarr_syslog("Societe::Delete erreur -1");
} }
@ -480,7 +521,7 @@ class Societe {
} }
else else
{ {
$this->error_message .= "Impossible de supprimer le RIB.\n"; $this->error .= "Impossible de supprimer le RIB.\n";
dolibarr_syslog("Societe::Delete erreur -2"); dolibarr_syslog("Societe::Delete erreur -2");
} }
@ -493,7 +534,7 @@ class Societe {
} }
else else
{ {
$this->error_message .= "Impossible de supprimer la société.\n"; $this->error .= "Impossible de supprimer la société.\n";
dolibarr_syslog("Societe::Delete erreur -3"); dolibarr_syslog("Societe::Delete erreur -3");
} }