From 538736bedb8d4ff5baf42e0775e4cf55c6af6b06 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 22 Oct 2009 00:36:21 +0000 Subject: [PATCH] A lot of fix on point of sale module --- htdocs/master.inc.php | 51 ++++++-- htdocs/paiement.class.php | 240 +++++++++++++++++++------------------- 2 files changed, 159 insertions(+), 132 deletions(-) diff --git a/htdocs/master.inc.php b/htdocs/master.inc.php index dcf941d7e65..3ba6a515d67 100644 --- a/htdocs/master.inc.php +++ b/htdocs/master.inc.php @@ -54,6 +54,15 @@ else define('LOG_INFO',6); define('LOG_DEBUG',7); } +// Definition of missing functions +if (! function_exists("preg_replace")) +{ + function preg_replace($a,$b,$c) + { + + } +} + // Forcage du parametrage PHP error_reporting (Dolibarr non utilisable en mode error E_ALL) error_reporting(E_ALL ^ E_NOTICE); @@ -80,15 +89,16 @@ if (empty($dolibarr_main_data_root)) $dolibarr_main_data_root=str_replace("/htdocs","",$dolibarr_main_document_root); $dolibarr_main_data_root.="/documents"; } + // Define some constants define('DOL_DOCUMENT_ROOT', $dolibarr_main_document_root); // Filesystem pages php (htdocs) define('DOL_DATA_ROOT', $dolibarr_main_data_root); // Filesystem donnes (documents) if ($dolibarr_main_url_root == 'auto' && ! empty($_SERVER["SCRIPT_URL"]) && ! empty($_SERVER["SCRIPT_URI"])) { - $dolibarr_main_url_root=preg_replace('/'.$_SERVER["SCRIPT_URL"].'$/i','',$_SERVER["SCRIPT_URI"]); + $dolibarr_main_url_root=str_replace($_SERVER["SCRIPT_URL"],'',$_SERVER["SCRIPT_URI"]); } define('DOL_MAIN_URL_ROOT', $dolibarr_main_url_root); // URL relative root -$uri=preg_replace('/^http(s?):\/\//i','',$dolibarr_main_url_root); // $suburi contains url without http* +$uri=preg_replace('/^http(s?):\/\//i','',$dolibarr_main_url_root); // $uri contains url without http* $suburi = strstr ($uri, '/'); // $suburi contains url without domain if ($suburi == '/') $suburi = ''; // If $suburi is /, it is now '' define('DOL_URL_ROOT', $suburi); // URL relative root ('/', '/dolibarr', ...) @@ -96,8 +106,9 @@ if (! empty($dolibarr_main_url_root_static)) define('DOL_URL_ROOT_FULL_STATIC', /* - * Controle validite fichier conf + * Include functions */ + if (! file_exists(DOL_DOCUMENT_ROOT ."/lib/functions.lib.php")) { print "Error: Dolibarr config file content seems to be not correctly defined.
\n"; @@ -105,13 +116,9 @@ if (! file_exists(DOL_DOCUMENT_ROOT ."/lib/functions.lib.php")) exit; } - -/* - * Create $conf object - */ - require_once(DOL_DOCUMENT_ROOT ."/lib/functions.lib.php"); // Need 970ko memory (1.1 in 2.2) + // If password is encoded, we decode it if (preg_match('/crypted:/i',$dolibarr_main_db_pass) || ! empty($dolibarr_main_db_encrypted_pass)) { @@ -126,6 +133,11 @@ if (preg_match('/crypted:/i',$dolibarr_main_db_pass) || ! empty($dolibarr_main_d } //print memory_get_usage(); + +/* + * Create $conf object + */ + require_once(DOL_DOCUMENT_ROOT."/core/conf.class.php"); $conf = new Conf(); @@ -284,10 +296,10 @@ if (! defined('NOREQUIREDB')) if (! empty($conf->global->MAIN_ONLY_LOGIN_ALLOWED)) { /*print '$_SERVER["GATEWAY_INTERFACE"]='.$_SERVER["GATEWAY_INTERFACE"].'
'; - print 'session_id()='.session_id().'
'; - print '$_SESSION["dol_login"]='.$_SESSION["dol_login"].'
'; - print '$conf->global->MAIN_ONLY_LOGIN_ALLOWED='.$conf->global->MAIN_ONLY_LOGIN_ALLOWED.'
'; - exit;*/ + print 'session_id()='.session_id().'
'; + print '$_SESSION["dol_login"]='.$_SESSION["dol_login"].'
'; + print '$conf->global->MAIN_ONLY_LOGIN_ALLOWED='.$conf->global->MAIN_ONLY_LOGIN_ALLOWED.'
'; + exit;*/ $ok=0; if ((! session_id() || ! isset($_SESSION["dol_login"])) && ! isset($_POST["username"]) && ! empty($_SERVER["GATEWAY_INTERFACE"])) $ok=1; // We let working pages if not logged and inside a web browser (login form, to allow login by admin) elseif (isset($_POST["username"]) && $_POST["username"] == $conf->global->MAIN_ONLY_LOGIN_ALLOWED) $ok=1; // We let working pages that is a login submission (login submit, to allow login by admin) @@ -408,4 +420,19 @@ if (! defined('MAGPIE_CACHE_DIR')) { define('MAGPIE_CACHE_DIR', $conf->exte if (! defined('MAIN_LABEL_MENTION_NPR') ) define('MAIN_LABEL_MENTION_NPR','NPR'); + + +/** + * Convert a string into a regex + * + * @param unknown_type $s string to convert + */ +function dol_regify($s) +{ + $news=str_replace('/','\/',$s); + $news=str_replace('.','\.',$news); + $news=str_replace('*','\*',$news); + return $news; +} + ?> diff --git a/htdocs/paiement.class.php b/htdocs/paiement.class.php index 98d16daecf7..9748d1a2ae9 100644 --- a/htdocs/paiement.class.php +++ b/htdocs/paiement.class.php @@ -19,17 +19,17 @@ */ /** - \file htdocs/paiement.class.php - \ingroup facture - \brief Fichier de la classe des paiement de factures clients - \remarks Cette classe est presque identique a paiementfourn.class.php - \version $Id$ -*/ + \file htdocs/paiement.class.php + \ingroup facture + \brief Fichier de la classe des paiement de factures clients + \remarks Cette classe est presque identique a paiementfourn.class.php + \version $Id$ + */ /** \class Paiement - \brief Classe permettant la gestion des paiements des factures clients -*/ + \brief Classe permettant la gestion des paiements des factures clients + */ class Paiement { @@ -41,8 +41,8 @@ class Paiement var $total; var $author; var $paiementid; // Type de paiement. Stocke dans fk_paiement - // de llx_paiement qui est lie aux types de - //paiement de llx_c_paiement + // de llx_paiement qui est lie aux types de + //paiement de llx_c_paiement var $num_paiement; // Numero du CHQ, VIR, etc... var $bank_account; // Id compte bancaire du paiement var $bank_line; // Id de la ligne d'ecriture bancaire @@ -62,12 +62,12 @@ class Paiement $this->db = $DB ; } - /** - * \brief Recupere l'objet paiement - * \param id id du paiement a recuperer - * \return int <0 si ko, 0 si non trouve, >0 si ok - */ - function fetch($id) + /** + * \brief Recupere l'objet paiement + * \param id id du paiement a recuperer + * \return int <0 si ko, 0 si non trouve, >0 si ok + */ + function fetch($id) { $sql = 'SELECT p.rowid,'.$this->db->pdate('p.datep').' as dp, p.amount, p.statut, p.fk_bank'; $sql.= ', c.code as type_code, c.libelle as type_libelle'; @@ -88,6 +88,7 @@ class Paiement $this->id = $obj->rowid; $this->ref = $obj->rowid; $this->date = $obj->dp; + $this->datepaye = $obj->dp; $this->numero = $obj->num_paiement; $this->bank_account = $obj->fk_account; $this->bank_line = $obj->fk_bank; @@ -114,9 +115,9 @@ class Paiement } /** - * \brief Creation du paiement en base - * \param user object utilisateur qui cree - * \return int id du paiement cree, < 0 si erreur + * \brief Create payment in database + * \param user object user + * \return int id of created payment, < 0 if error */ function create($user) { @@ -124,14 +125,13 @@ class Paiement $error = 0; - // Nettoyage parametres + // Clean parameters $this->total = 0; - foreach ($this->amounts as $key => $value) + foreach ($this->amounts as $key => $value) // How payment is dispatch { - $value = price2num($value); - $val = round($value, 2); - $this->amounts[$key] = $val; - $this->total += $val; + $value = price2num($value,'MT'); + $this->amounts[$key] = $value; + $this->total += $value; } $this->total = price2num($this->total); @@ -157,7 +157,7 @@ class Paiement { $amount = price2num($amount); $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'paiement_facture (fk_facture, fk_paiement, amount)'; - $sql .= ' VALUES ('.$facid.','. $this->id.',\''.$amount.'\')'; + $sql .= ' VALUES ('.$facid.', '. $this->id.', \''.$amount.'\')'; dol_syslog("Paiement::Create insert paiement_facture sql=".$sql); $resql=$this->db->query($sql); @@ -170,18 +170,18 @@ class Paiement } else { - dol_syslog('Paiement::Create Montant non numérique'); + dol_syslog('Paiement::Create Montant non numerique'); } } if (! $error) { - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PAYMENT_CUSTOMER_CREATE',$this,$user,$langs,$conf); + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('PAYMENT_CUSTOMER_CREATE',$this,$user,$langs,$conf); if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers + // Fin appel triggers } } else @@ -205,51 +205,51 @@ class Paiement } - /** - * \brief Supprime un paiement ainsi que les lignes qu'il a genere dans comptes - * Si le paiement porte sur un ecriture compte qui est rapprochee, on refuse - * Si le paiement porte sur au moins une facture a "payee", on refuse - * \return int <0 si ko, >0 si ok - */ + /** + * \brief Supprime un paiement ainsi que les lignes qu'il a genere dans comptes + * Si le paiement porte sur un ecriture compte qui est rapprochee, on refuse + * Si le paiement porte sur au moins une facture a "payee", on refuse + * \return int <0 si ko, >0 si ok + */ function delete() { - $bank_line_id = $this->bank_line; + $bank_line_id = $this->bank_line; $this->db->begin(); - // Verifier si paiement porte pas sur une facture classee - // Si c'est le cas, on refuse la suppression - $billsarray=$this->getBillsArray('fk_statut > 1'); - if (is_array($billsarray)) - { - if (sizeof($billsarray)) - { - $this->error="Impossible de supprimer un paiement portant sur au moins une facture fermee"; - $this->db->rollback(); - return -1; - } - } - else - { - $this->db->rollback(); - return -2; - } + // Verifier si paiement porte pas sur une facture classee + // Si c'est le cas, on refuse la suppression + $billsarray=$this->getBillsArray('fk_statut > 1'); + if (is_array($billsarray)) + { + if (sizeof($billsarray)) + { + $this->error="Impossible de supprimer un paiement portant sur au moins une facture fermee"; + $this->db->rollback(); + return -1; + } + } + else + { + $this->db->rollback(); + return -2; + } - // Verifier si paiement ne porte pas sur ecriture bancaire rapprochee - // Si c'est le cas, on refuse le paiement + // Verifier si paiement ne porte pas sur ecriture bancaire rapprochee + // Si c'est le cas, on refuse le paiement if ($bank_line_id) { $accline = new AccountLine($this->db,$bank_line_id); - $accline->fetch($bank_line_id); - if ($accline->rappro) - { - $this->error="Impossible de supprimer un paiement qui a genere une ecriture qui a ete rapprochee"; - $this->db->rollback(); - return -3; - } - } + $accline->fetch($bank_line_id); + if ($accline->rappro) + { + $this->error="Impossible de supprimer un paiement qui a genere une ecriture qui a ete rapprochee"; + $this->db->rollback(); + return -3; + } + } - // Efface la ligne de paiement (dans paiement_facture et paiement) + // Efface la ligne de paiement (dans paiement_facture et paiement) $sql = 'DELETE FROM '.MAIN_DB_PREFIX.'paiement_facture'; $sql.= ' WHERE fk_paiement = '.$this->id; $result = $this->db->query($sql); @@ -258,29 +258,29 @@ class Paiement $sql = 'DELETE FROM '.MAIN_DB_PREFIX.'paiement'; $sql.= ' WHERE rowid = '.$this->id; $result = $this->db->query($sql); - if (! $result) - { - $this->error=$this->db->error(); - $this->db->rollback(); - return -3; - } + if (! $result) + { + $this->error=$this->db->error(); + $this->db->rollback(); + return -3; + } - // Supprimer l'ecriture bancaire si paiement lie a ecriture - if ($bank_line_id) - { - $accline = new AccountLine($this->db); - $accline->fetch($bank_line_id); + // Supprimer l'ecriture bancaire si paiement lie a ecriture + if ($bank_line_id) + { + $accline = new AccountLine($this->db); + $accline->fetch($bank_line_id); $result=$accline->delete(); - if ($result < 0) - { - $this->error=$accline->error; - $this->db->rollback(); - return -4; - } - } + if ($result < 0) + { + $this->error=$accline->error; + $this->db->rollback(); + return -4; + } + } - $this->db->commit(); - return 1; + $this->db->commit(); + return 1; } else { @@ -290,10 +290,10 @@ class Paiement } } - /** - * \brief Mise a jour du lien entre le paiement et la ligne generee dans llx_bank - * \param id_bank Id compte bancaire - */ + /** + * \brief Mise a jour du lien entre le paiement et la ligne generee dans llx_bank + * \param id_bank Id compte bancaire + */ function update_fk_bank($id_bank) { $sql = 'UPDATE llx_paiement set fk_bank = '.$id_bank; @@ -310,10 +310,10 @@ class Paiement } } - /** - * \brief Valide le paiement - * \return int <0 si ko, >0 si ok - */ + /** + * \brief Valide le paiement + * \return int <0 si ko, >0 si ok + */ function valide() { $sql = 'UPDATE '.MAIN_DB_PREFIX.'paiement SET statut = 1 WHERE rowid = '.$this->id; @@ -331,11 +331,11 @@ class Paiement } } - /* - * \brief Information sur l'objet - * \param id id du paiement dont il faut afficher les infos - */ - function info($id) + /* + * \brief Information sur l'objet + * \param id id du paiement dont il faut afficher les infos + */ + function info($id) { $sql = 'SELECT c.rowid, '.$this->db->pdate('datec').' as datec, fk_user_creat, fk_user_modif'; $sql .= ', '.$this->db->pdate('tms').' as tms'; @@ -374,11 +374,11 @@ class Paiement } } - /** - * \brief Retourne la liste des factures sur lesquels porte le paiement - * \param filter Critere de filtre - * \return array Tableau des id de factures - */ + /** + * \brief Retourne la liste des factures sur lesquels porte le paiement + * \param filter Critere de filtre + * \return array Tableau des id de factures + */ function getBillsArray($filter='') { $sql = 'SELECT fk_facture'; @@ -388,22 +388,22 @@ class Paiement $resql = $this->db->query($sql); if ($resql) { - $i=0; + $i=0; $num=$this->db->num_rows($resql); - $billsarray=array(); + $billsarray=array(); while ($i < $num) { $obj = $this->db->fetch_object($resql); - $billsarray[$i]=$obj->fk_facture; - $i++; - } + $billsarray[$i]=$obj->fk_facture; + $i++; + } return $billsarray; } else { - $this->error=$this->db->error(); + $this->error=$this->db->error(); dol_syslog('Paiement::getBillsArray Error '.$this->error.' - sql='.$sql); return -1; } @@ -432,21 +432,21 @@ class Paiement } /** - * \brief Retourne le libelle du statut d'une facture (brouillon, validee, abandonnee, payee) - * \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 - */ + * \brief Retourne le libelle du statut d'une facture (brouillon, validee, abandonnee, payee) + * \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=0) { return $this->LibStatut($this->statut,$mode); } /** - * \brief Renvoi le libelle d'un statut donne - * \param status Statut - * \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 du statut - */ + * \brief Renvoi le libelle d'un statut donne + * \param status Statut + * \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 du statut + */ function LibStatut($status,$mode=0) { global $langs; // TODO Renvoyer le libelle anglais et faire traduction a affichage