@ -29,7 +29,7 @@
\version $Id $
*/
// Pour compatibilit é lors de l'upgrade
// Pour compatibilit <EFBFBD> lors de l'upgrade
if ( ! defined ( 'DOL_DOCUMENT_ROOT' )) define ( 'DOL_DOCUMENT_ROOT' , '..' );
if ( ! defined ( 'ADODB_DATE_VERSION' )) include_once ( DOL_DOCUMENT_ROOT . " /includes/adodbtime/adodb-time.inc.php " );
@ -56,7 +56,7 @@ function ValidEmail($address)
}
/**
\brief Renvoi vrai si l ' email a un nom de domaine qui r é soud via dns
\brief Renvoi vrai si l ' email a un nom de domaine qui r <EFBFBD> soud via dns
\param mail adresse email ( Ex : " toto@titi.com " , " John Do <johndo@titi.com> " )
\return boolean true si email valide , false sinon
*/
@ -114,17 +114,31 @@ function sanitize_string($str)
}
/**
* \brief Returns text escaped for inclusion in javascript code
* \param $stringtoescape String to escape
* \return string Escaped string
*/
function dol_escape_js ( $stringtoescape )
{
// escape quotes and backslashes, newlines, etc.
return strtr ( $stringtoescape , array ( '\\' => '\\\\' , " ' " => " \\ ' " , '"' => '\\"' , " \r " => '\\r' , " \n " => '\\n' , '</' => '<\/' ));
}
/**
\brief Envoi des messages dolibarr dans un fichier ou dans syslog
Pour fichier : fichier défini par SYSLOG_FILE
Pour syslog : facility défini par SYSLOG_FACILITY
Pour fichier : fichier d e fini par SYSLOG_FILE
Pour syslog : facility d e fini par SYSLOG_FACILITY
\param message Message a tracer . Ne doit pas etre traduit si level = LOG_ERR
\param level Niveau de l ' erreur
\remarks Cette fonction n ' a un effet que si le module syslog est activé .
Warning , les fonctions syslog sont buggués sous Windows et générent des
fautes de protection mémoire . Pour résoudre , utiliser le loggage fichier ,
\remarks Cette fonction n ' a un effet que si le module syslog est activ <EFBFBD> .
Warning , les fonctions syslog sont buggu <EFBFBD> s sous Windows et g<EFBFBD> n<EFBFBD> rent des
fautes de protection m <EFBFBD> moire. Pour r<EFBFBD> soudre, utiliser le loggage fichier ,
au lieu du loggage syslog ( configuration du module ) .
Si SYSLOG_FILE_NO_ERROR défini , on ne gére pas erreur ecriture log
Si SYSLOG_FILE_NO_ERROR d <EFBFBD> fini, on ne g<EFBFBD> re pas erreur ecriture log
\remarks On Windows LOG_ERR = 4 , LOG_WARNING = 5 , LOG_NOTICE = LOG_INFO = LOG_DEBUG = 6
On Linux LOG_ERR = 3 , LOG_WARNING = 4 , LOG_INFO = 6 , LOG_DEBUG = 7
*/
@ -185,7 +199,7 @@ function dolibarr_syslog($message, $level=LOG_INFO)
}
else
{
//define_syslog_variables(); d éja dé finit dans master.inc.php
//define_syslog_variables(); d <EFBFBD> ja d<> finit dans master.inc.php
if ( defined ( " MAIN_SYSLOG_FACILITY " ) && MAIN_SYSLOG_FACILITY )
{
$facility = MAIN_SYSLOG_FACILITY ;
@ -269,11 +283,11 @@ function dolibarr_fiche_head($links, $active='0', $title='', $notab=0)
/**
\brief Sauvegarde parametrage personnel
\param db Handler d ' acc é s base
\param db Handler d ' acc <EFBFBD> s base
\param user Objet utilisateur
\param url Si defini , on sauve parametre du tableau tab dont cl é = ( url avec sortfield , sortorder , begin et page )
\param url Si defini , on sauve parametre du tableau tab dont cl <EFBFBD> = ( url avec sortfield , sortorder , begin et page )
Si non defini on sauve tous parametres du tableau tab
\param tab Tableau ( cl é=> valeur ) des paramé tres a sauvegarder
\param tab Tableau ( cl <EFBFBD> => valeur ) des param<EFBFBD> tres a sauvegarder
\return int < 0 si ko , > 0 si ok
*/
function dolibarr_set_user_page_param ( $db , & $user , $url = '' , $tab )
@ -283,7 +297,7 @@ function dolibarr_set_user_page_param($db, &$user, $url='', $tab)
$db -> begin ();
// On efface anciens param étres pour toutes les clé dans $tab
// On efface anciens param <EFBFBD> tres pour toutes les cl<63> dans $tab
$sql = " DELETE FROM " . MAIN_DB_PREFIX . " user_param " ;
$sql .= " WHERE fk_user = " . $user -> id ;
if ( $url ) $sql .= " AND page=' " . $url . " ' " ;
@ -309,7 +323,7 @@ function dolibarr_set_user_page_param($db, &$user, $url='', $tab)
foreach ( $tab as $key => $value )
{
// On positionne nouveaux param é tres
// On positionne nouveaux param <EFBFBD> tres
if ( $value && ( ! $url || in_array ( $key , array ( 'sortfield' , 'sortorder' , 'begin' , 'page' ))))
{
$sql = " INSERT INTO " . MAIN_DB_PREFIX . " user_param(fk_user,page,param,value) " ;
@ -339,7 +353,7 @@ function dolibarr_set_user_page_param($db, &$user, $url='', $tab)
/**
\brief Formattage des nombres
\param ca valeur a formater
\return int valeur format é e
\return int valeur format <EFBFBD> e
*/
function dolibarr_print_ca ( $ca )
{
@ -367,10 +381,10 @@ function dolibarr_print_ca($ca)
/**
\brief Effectue un d écalage de date par rapport a une duré e
\brief Effectue un d <EFBFBD> calage de date par rapport a une dur<EFBFBD> e
\param time Date timestamp ou au format YYYY - MM - DD
\param duration_value Valeur de la dur é e a ajouter
\param duration_unit Unit é de la duré e a ajouter ( d , m , y )
\param duration_value Valeur de la dur <EFBFBD> e a ajouter
\param duration_unit Unit <EFBFBD> de la dur<EFBFBD> e a ajouter ( d , m , y )
\return int Nouveau timestamp
*/
function dolibarr_time_plus_duree ( $time , $duration_value , $duration_unit )
@ -393,13 +407,13 @@ function dolibarr_time_plus_duree($time,$duration_value,$duration_unit)
" %d/%m/%Y %H:%M " ,
" %d/%m/%Y %H:%M:%S " ,
" day " , " daytext " , " dayhour " , " dayhourldap " , " dayhourtext "
\return string Date format é e ou '' si time null
\return string Date format <EFBFBD> e ou '' si time null
*/
function dolibarr_print_date ( $time , $format = '' )
{
global $conf ;
// Si format non d é fini, on prend $conf->format_date_text_short sinon %Y-%m-%d %H:%M:%S
// Si format non d <EFBFBD> fini, on prend $conf->format_date_text_short sinon %Y-%m-%d %H:%M:%S
if ( ! $format ) $format = ( isset ( $conf -> format_date_text_short ) ? $conf -> format_date_text_short : '%Y-%m-%d %H:%M:%S' );
if ( $format == 'day' ) $format = $conf -> format_date_short ;
@ -435,8 +449,8 @@ function dolibarr_print_date($time,$format='')
/**
\brief Retourne une date fabriqu é e depuis une chaine
\param string Date format é e en chaine
\brief Retourne une date fabriqu <EFBFBD> e depuis une chaine
\param string Date format <EFBFBD> e en chaine
YYYYMMDD
YYYYMMDDHHMMSS
DD / MM / YY ou DD / MM / YYYY
@ -515,14 +529,14 @@ function dolibarr_getdate($timestamp,$fast=false)
}
/**
\brief Retourne une date fabriqu é e depuis infos .
Remplace la fonction mktime non impl émentée sous Windows si anné e < 1970
\brief Retourne une date fabriqu <EFBFBD> e depuis infos .
Remplace la fonction mktime non impl <EFBFBD> ment<EFBFBD> e sous Windows si ann<EFBFBD> e < 1970
\param hour Heure
\param minute Minute
\param second Seconde
\param month Mois
\param day Jour
\param year Ann é e
\param year Ann <EFBFBD> e
\param gm Time gm
\param check No check on parameters ( Can use day 32 , etc ... )
\return timestamp Date en timestamp , '' if error
@ -551,7 +565,7 @@ function dolibarr_mktime($hour,$minute,$second,$month,$day,$year,$gm=0,$check=1)
{
/*
// On peut utiliser strtotime pour obtenir la traduction.
// strtotime is ok for range: Vendredi 13 D é cembre 1901 20:45:54 GMT au Mardi 19 Janvier 2038 03:14:07 GMT.
// strtotime is ok for range: Vendredi 13 D <EFBFBD> cembre 1901 20:45:54 GMT au Mardi 19 Janvier 2038 03:14:07 GMT.
$montharray = array ( 1 => 'january' , 2 => 'february' , 3 => 'march' , 4 => 'april' , 5 => 'may' , 6 => 'june' ,
7 => 'july' , 8 => 'august' , 9 => 'september' , 10 => 'october' , 11 => 'november' , 12 => 'december' );
$string = $day . " " . $montharray [ 0 + $month ] . " " . $year . " " . $hour . " : " . $minute . " : " . $second . " GMT " ;
@ -636,10 +650,10 @@ function dolibarr_print_object_info($object)
}
/**
\brief Formatage des num é ros de telephone en fonction du format d ' un pays
\param phone Num é ro de telephone a formater
\brief Formatage des num <EFBFBD> ros de telephone en fonction du format d ' un pays
\param phone Num <EFBFBD> ro de telephone a formater
\param country Pays selon lequel formatter
\return string Num éro de téléphone formaté
\return string Num <EFBFBD> ro de t<EFBFBD> l<EFBFBD> phone format<EFBFBD>
*/
function dolibarr_print_phone ( $phone , $country = " FR " )
{
@ -712,7 +726,7 @@ function dol_phone_link($phone,$option=0)
}
/**
\brief Tronque une chaine a une taille donn é e en ajoutant les points de suspension si cela d é passe
\brief Tronque une chaine a une taille donn <EFBFBD> e en ajoutant les points de suspension si cela d <EFBFBD> passe
\param string String to truncate
\param size Max string size . 0 for no limit .
\param trunc Where to trunc : right , left , middle
@ -758,12 +772,12 @@ function dolibarr_trunc($string,$size=40,$trunc='right')
}
/**
\brief Compl éte une chaine a une taille donné e par des espaces
\param string Chaine a compl é ter
\brief Compl <EFBFBD> te une chaine a une taille donn<EFBFBD> e par des espaces
\param string Chaine a compl <EFBFBD> ter
\param size Longueur de la chaine .
\param side 0 = Compl étion a droite , 1 = Complé tion a gauche
\param char Chaine de compl é tion
\return string Chaine compl été e
\param side 0 = Compl <EFBFBD> tion a droite , 1 = Compl<EFBFBD> tion a gauche
\param char Chaine de compl <EFBFBD> tion
\return string Chaine compl <EFBFBD> t<EFBFBD> e
*/
function dolibarr_pad ( $string , $size , $side , $char = ' ' )
{
@ -779,7 +793,7 @@ function dolibarr_pad($string,$size,$side,$char=' ')
}
/**
\brief Affiche picto propre a une notion / module ( fonction g éné rique)
\brief Affiche picto propre a une notion / module ( fonction g <EFBFBD> n<EFBFBD> rique)
\param alt Texte sur le alt de l ' image
\param object Objet pour lequel il faut afficher le logo ( exemple : user , group , action , bill , contract , propal , product , ... )
\return string Retourne tag img
@ -791,10 +805,10 @@ function img_object($alt, $object)
}
/**
\brief Affiche picto ( fonction g éné rique)
\brief Affiche picto ( fonction g <EFBFBD> n<EFBFBD> rique)
\param alt Texte sur le alt de l ' image
\param picto Nom de l 'image a afficher (Si pas d' extension , on met '.png' )
\param options Attribut suppl é mentaire a la balise img
\param options Attribut suppl <EFBFBD> mentaire a la balise img
\param pictoisfullpath If 1 , image path is a full path
\return string Retourne tag img
*/
@ -952,7 +966,7 @@ function img_delete($alt = "default")
}
/**
\brief Affiche logo d é sactiver
\brief Affiche logo d <EFBFBD> sactiver
\param alt Texte sur le alt de l ' image
\return string Retourne tag img
*/
@ -1055,7 +1069,7 @@ function img_alerte($alt = "default")
}
/**
\brief Affiche logo t élé phone
\brief Affiche logo t <EFBFBD> l<EFBFBD> phone
\param alt Texte sur le alt de l ' image
\param option Choose of logo
\return string Retourne tag img
@ -1086,7 +1100,7 @@ function img_next($alt = "default")
}
/**
\brief Affiche logo pr écé dent
\brief Affiche logo pr <EFBFBD> c<EFBFBD> dent
\param alt Texte sur le alt de l ' image
\return string Retourne tag img
*/
@ -1365,7 +1379,7 @@ function restrictedArea($user, $feature='societe', $objectid=0, $dbtablename='',
}
else
{
if ( ! $dbtablename ) $dbtablename = $feature ; // Si dbtable non d é fini, meme nom que le module
if ( ! $dbtablename ) $dbtablename = $feature ; // Si dbtable non d <EFBFBD> fini, meme nom que le module
$sql = " SELECT dbt.fk_soc " ;
$sql .= " FROM " . MAIN_DB_PREFIX . $dbtablename . " as dbt " ;
@ -1384,7 +1398,7 @@ function restrictedArea($user, $feature='societe', $objectid=0, $dbtablename='',
}
else
{
if ( ! $dbtablename ) $dbtablename = $feature ; // Si dbtable non d é fini, meme nom que le module
if ( ! $dbtablename ) $dbtablename = $feature ; // Si dbtable non d <EFBFBD> fini, meme nom que le module
$sql = " SELECT sc.fk_soc " ;
$sql .= " FROM " . MAIN_DB_PREFIX . $dbtablename . " as dbt " ;
@ -1451,12 +1465,12 @@ function accessforbidden($message='',$printheader=1)
/**
\brief Affiche message erreur system avec toutes les informations pour faciliter le diagnostic et la remont é e des bugs .
On doit appeler cette fonction quand une erreur technique bloquante est rencontr é e.
\brief Affiche message erreur system avec toutes les informations pour faciliter le diagnostic et la remont <EFBFBD> e des bugs .
On doit appeler cette fonction quand une erreur technique bloquante est rencontr <EFBFBD> e.
Toutefois , il faut essayer de ne l 'appeler qu' au sein de pages php , les classes devant
renvoyer leur erreur par l ' interm édiaire de leur propriété " error " .
\param db Handler de base utilis é
\param error Chaine erreur ou tableau de chaines erreur compl é mentaires a afficher
renvoyer leur erreur par l ' interm <EFBFBD> diaire de leur propri<EFBFBD> t<EFBFBD> " error " .
\param db Handler de base utilis <EFBFBD>
\param error Chaine erreur ou tableau de chaines erreur compl <EFBFBD> mentaires a afficher
*/
function dolibarr_print_error ( $db = '' , $error = '' )
{
@ -1539,7 +1553,7 @@ function dolibarr_print_error($db='',$error='')
/**
* \brief Deplacer les fichiers telecharg é s, apres quelques controles divers
* \brief Deplacer les fichiers telecharg <EFBFBD> s, apres quelques controles divers
* \param src_file Source filename
* \param dest_file Target filename
* \param allowoverwrite Overwrite if exists
@ -1568,7 +1582,7 @@ function dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite)
}
// Security:
// On interdit les remont é es de repertoire ainsi que les pipes dans
// On interdit les remont <EFBFBD> es de repertoire ainsi que les pipes dans
// les noms de fichiers.
if ( eregi ( '\.\.' , $src_file ) || eregi ( '[<>|]' , $src_file ))
{
@ -1577,7 +1591,7 @@ function dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite)
}
// Security:
// On interdit les remont é es de repertoire ainsi que les pipe dans
// On interdit les remont <EFBFBD> es de repertoire ainsi que les pipe dans
// les noms de fichiers.
if ( eregi ( '\.\.' , $dest_file ) || eregi ( '[<>|]' , $dest_file ))
{
@ -1618,7 +1632,7 @@ function dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite)
\param begin ( " " par defaut )
\param options ( " " par defaut )
\param td options de l ' attribut td ( " " par defaut )
\param sortfield nom du champ sur lequel est effectu é le tri du tableau
\param sortfield nom du champ sur lequel est effectu <EFBFBD> le tri du tableau
\param sortorder ordre du tri
*/
function print_liste_field_titre ( $name , $file , $field , $begin = " " , $options = " " , $td = " " , $sortfield = " " , $sortorder = " " )
@ -1626,7 +1640,7 @@ function print_liste_field_titre($name, $file, $field, $begin="", $options="", $
global $conf ;
//print "$name, $file, $field, $begin, $options, $td, $sortfield, $sortorder<br>\n";
// Le champ de tri est mis en é vidence.
// Le champ de tri est mis en <EFBFBD> vidence.
// Exemple si (sortfield,field)=("nom","xxx.nom") ou (sortfield,field)=("nom","nom")
if ( $sortfield == $field || $sortfield == ereg_replace ( " ^[^ \ .]+ \ . " , " " , $field ))
{
@ -1681,9 +1695,9 @@ function print_titre($titre)
}
/**
\brief Affichage d 'un titre d' une fiche , align é a gauche
\brief Affichage d 'un titre d' une fiche , align <EFBFBD> a gauche
\param titre Le titre a afficher
\param mesg Message supl é mentaire a afficher a droite
\param mesg Message supl <EFBFBD> mentaire a afficher a droite
\param picto Picto pour ligne de titre
\param pictoisfullpath 1 = Picto is a full absolute url of image
*/
@ -1720,8 +1734,8 @@ function dol_delete_file($file)
}
/**
\brief Effacement d ' un r é pertoire
\param file R é pertoire a effacer
\brief Effacement d ' un r <EFBFBD> pertoire
\param file R <EFBFBD> pertoire a effacer
*/
function dol_delete_dir ( $dir )
{
@ -1729,10 +1743,10 @@ function dol_delete_dir($dir)
}
/**
\brief Effacement d ' un r é pertoire $dir et de son arborescence
\param file R é pertoire a effacer
\param count Compteur pour comptage nb elements supprim é s
\return int Nombre de fichier + rep értoires supprimé s
\brief Effacement d ' un r <EFBFBD> pertoire $dir et de son arborescence
\param file R <EFBFBD> pertoire a effacer
\param count Compteur pour comptage nb elements supprim <EFBFBD> s
\return int Nombre de fichier + rep <EFBFBD> rtoires supprim<EFBFBD> s
*/
function dol_delete_dir_recursive ( $dir , $count = 0 )
{
@ -1767,7 +1781,7 @@ function dol_delete_dir_recursive($dir,$count=0)
/**
\brief Scan les fichiers avec un anti - virus
\param file Fichier a scanner
\return malware Nom du virus si infect é sinon retourne " null "
\return malware Nom du virus si infect <EFBFBD> sinon retourne " null "
*/
function dol_avscan_file ( $file )
{
@ -1792,7 +1806,7 @@ function dol_avscan_file($file)
/**
\brief Fonction print_barre_liste
\param titre Titre de la page
\param page num é ro de la page
\param page num <EFBFBD> ro de la page
\param file lien
\param options parametres complementaires lien ( '' par defaut )
\param sortfield champ de tri ( '' par defaut )
@ -1887,7 +1901,7 @@ function print_barre_liste($titre, $page, $file, $options='', $sortfield='', $so
/**
\brief Fonction servant a afficher les fleches de navigation dans les pages de listes
\param page Num é ro de la page
\param page Num <EFBFBD> ro de la page
\param file Lien
\param options Autres parametres d ' url a propager dans les liens ( " " par defaut )
\param nextpage Faut - il une page suivante
@ -1909,12 +1923,12 @@ function print_fleche_navigation($page,$file,$options='',$nextpage,$betweenarrow
/**
* \brief Fonction qui retourne un taux de tva format é pour visualisation
* \remarks Fonction utilis é e dans les pdf et les pages html
* \brief Fonction qui retourne un taux de tva format <EFBFBD> pour visualisation
* \remarks Fonction utilis <EFBFBD> e dans les pdf et les pages html
* \param rate Rate value to format ( 19.6 19 , 6 19.6 % 19 , 6 % , ... )
* \param foundpercent Add a percent % sign in output
* \param info_bits Miscellanous information on vat
* \return string Chaine avec montant format é ( 19 , 6 ou 19 , 6 % ou 8.5 % * )
* \return string Chaine avec montant format <EFBFBD> ( 19 , 6 ou 19 , 6 % ou 8.5 % * )
*/
function vatrate ( $rate , $addpercent = false , $info_bits = 0 )
{
@ -1937,14 +1951,14 @@ function vatrate($rate,$addpercent=false,$info_bits=0)
/**
* \brief Fonction qui retourne un montant mon étaire formaté pour visualisation
* \remarks Fonction utilis é e dans les pdf et les pages html
* \brief Fonction qui retourne un montant mon <EFBFBD> taire format<EFBFBD> pour visualisation
* \remarks Fonction utilis <EFBFBD> e dans les pdf et les pages html
* \param amount Montant a formater
* \param html Formatage html ou pas ( 0 par defaut )
* \param outlangs Objet langs pour formatage text
* \param trunc 1 = Tronque affichage si trop de d é cimales, 0 = Force le non troncage
* \param trunc 1 = Tronque affichage si trop de d <EFBFBD> cimales, 0 = Force le non troncage
* \param nbdecimal Nbre decimals minimum .
* \return string Chaine avec montant format é
* \return string Chaine avec montant format <EFBFBD>
* \seealso price2num Fonction inverse de price
*/
function price ( $amount , $html = 0 , $outlangs = '' , $trunc = 1 , $nbdecimal = 2 )
@ -1966,11 +1980,11 @@ function price($amount, $html=0, $outlangs='', $trunc=1, $nbdecimal=2)
//print $amount."-";
$datas = split ( '\.' , $amount );
$decpart = $datas [ 1 ];
$decpart = eregi_replace ( '0+$' , '' , $decpart ); // Supprime les 0 de fin de partie d é cimale
$decpart = eregi_replace ( '0+$' , '' , $decpart ); // Supprime les 0 de fin de partie d <EFBFBD> cimale
//print "decpart=".$decpart."<br>";
$end = '' ;
// On augmente au besoin si il y a plus de 2 d é cimales
// On augmente au besoin si il y a plus de 2 d <EFBFBD> cimales
if ( strlen ( $decpart ) > $nbdecimal ) $nbdecimal = strlen ( $decpart );
// Si on depasse max
if ( $trunc && $nbdecimal > $conf -> global -> MAIN_MAX_DECIMALS_SHOWN )
@ -1978,7 +1992,7 @@ function price($amount, $html=0, $outlangs='', $trunc=1, $nbdecimal=2)
$nbdecimal = $conf -> global -> MAIN_MAX_DECIMALS_SHOWN ;
if ( eregi ( '\.\.\.' , $conf -> global -> MAIN_MAX_DECIMALS_SHOWN ))
{
// Si un affichage est tronqu é , on montre des ...
// Si un affichage est tronqu <EFBFBD> , on montre des ...
$end = '...' ;
}
}
@ -1998,7 +2012,7 @@ function price($amount, $html=0, $outlangs='', $trunc=1, $nbdecimal=2)
}
/**
\brief Fonction qui retourne un num é rique conforme PHP et SQL , depuis un montant au
\brief Fonction qui retourne un num <EFBFBD> rique conforme PHP et SQL , depuis un montant au
format utilisateur .
\remarks Fonction a appeler sur montants saisis avant un insert en base
\param amount Montant a formater
@ -2006,7 +2020,7 @@ function price($amount, $html=0, $outlangs='', $trunc=1, $nbdecimal=2)
'MT' = Round to Max with Tax ( MAIN_MAX_DECIMALS_TOT )
'MS' = Round to Max Shown ( MAIN_MAX_DECIMALS_SHOWN )
'' = No rounding
\return string Montant au format num é rique PHP et SQL ( Exemple : '99.99999' )
\return string Montant au format num <EFBFBD> rique PHP et SQL ( Exemple : '99.99999' )
\seealso price Fonction inverse de price2num
*/
function price2num ( $amount , $rounding = '' )
@ -2049,17 +2063,17 @@ function get_product_vat_for_country($idprod, $countrycode)
/**
\brief Fonction qui renvoie la tva d ' une ligne ( en fonction du vendeur , acheteur et taux du produit )
\remarks Si vendeur non assujeti a TVA , TVA par d éfaut= 0. Fin de ré gle.
Si le ( pays vendeur = pays acheteur ) alors TVA par d é faut= TVA du produit vendu . Fin de r é gle.
Si ( vendeur et acheteur dans Communaut é europé enne) et ( bien vendu = moyen de transports neuf comme auto , bateau , avion ) alors TVA par d éfaut= 0 ( La TVA doit étre payé par acheteur au centre d ' impots de son pays et non au vendeur ) . Fin de r é gle.
Si ( vendeur et acheteur dans Communaut é europé enne) et ( acheteur = particulier ou entreprise sans num TVA intra ) alors TVA par d é faut= TVA du produit vendu . Fin de r é gle.
Si ( vendeur et acheteur dans Communaut é europé enne) et ( acheteur = entreprise avec num TVA ) intra alors TVA par d éfaut= 0. Fin de ré gle.
Sinon TVA propos ée par défaut = 0. Fin de ré gle.
\param societe_vendeuse Objet soci été vendeuse
\param societe_acheteuse Objet soci été acheteuse
\remarks Si vendeur non assujeti a TVA , TVA par d <EFBFBD> faut= 0. Fin de r<EFBFBD> gle.
Si le ( pays vendeur = pays acheteur ) alors TVA par d <EFBFBD> faut= TVA du produit vendu . Fin de r <EFBFBD> gle.
Si ( vendeur et acheteur dans Communaut <EFBFBD> europ<EFBFBD> enne) et ( bien vendu = moyen de transports neuf comme auto , bateau , avion ) alors TVA par d <EFBFBD> faut= 0 ( La TVA doit <EFBFBD> tre pay<EFBFBD> par acheteur au centre d ' impots de son pays et non au vendeur ) . Fin de r <EFBFBD> gle.
Si ( vendeur et acheteur dans Communaut <EFBFBD> europ<EFBFBD> enne) et ( acheteur = particulier ou entreprise sans num TVA intra ) alors TVA par d <EFBFBD> faut= TVA du produit vendu . Fin de r <EFBFBD> gle.
Si ( vendeur et acheteur dans Communaut <EFBFBD> europ<EFBFBD> enne) et ( acheteur = entreprise avec num TVA ) intra alors TVA par d <EFBFBD> faut= 0. Fin de r<EFBFBD> gle.
Sinon TVA propos <EFBFBD> e par d<EFBFBD> faut = 0. Fin de r<EFBFBD> gle.
\param societe_vendeuse Objet soci <EFBFBD> t<EFBFBD> vendeuse
\param societe_acheteuse Objet soci <EFBFBD> t<EFBFBD> acheteuse
\param taux_produit Taux par defaut du produit vendu ( old way to get product vat rate )
\param idprod Id product ( new way to get product vat rate )
\return float Taux de tva a appliquer , - 1 si ne peut etre d éterminé
\return float Taux de tva a appliquer , - 1 si ne peut etre d <EFBFBD> termin<EFBFBD>
*/
function get_default_tva ( $societe_vendeuse , $societe_acheteuse , $taux_produit , $idprod = 0 )
{
@ -2072,49 +2086,49 @@ function get_default_tva($societe_vendeuse, $societe_acheteuse, $taux_produit, $
if ( is_numeric ( $societe_vendeuse -> tva_assuj ) && ! $societe_vendeuse -> tva_assuj ) return 0 ;
if ( ! is_numeric ( $societe_vendeuse -> tva_assuj ) && $societe_vendeuse -> tva_assuj == 'franchise' ) return 0 ;
// Si le (pays vendeur = pays acheteur) alors la TVA par d éfaut=TVA du produit vendu. Fin de ré gle.
// Si le (pays vendeur = pays acheteur) alors la TVA par d <EFBFBD> faut=TVA du produit vendu. Fin de r<> gle.
//if (is_object($societe_acheteuse) && ($societe_vendeuse->pays_id == $societe_acheteuse->pays_id) && ($societe_acheteuse->tva_assuj == 1 || $societe_acheteuse->tva_assuj == 'reel'))
// Le test ci-dessus ne devrait pas etre necessaire. Me signaler l'exemple du cas juridique concercn é si le test suivant n'est pas suffisant.
// Le test ci-dessus ne devrait pas etre necessaire. Me signaler l'exemple du cas juridique concercn <EFBFBD> si le test suivant n'est pas suffisant.
if ( $societe_vendeuse -> pays_id == $societe_acheteuse -> pays_id )
{
if ( $idprod ) return get_product_vat_for_country ( $idprod , $societe_vendeuse -> pays_code );
if ( strlen ( $taux_produit ) == 0 ) return - 1 ; // Si taux produit = '', on ne peut d é terminer taux tva
if ( strlen ( $taux_produit ) == 0 ) return - 1 ; // Si taux produit = '', on ne peut d <EFBFBD> terminer taux tva
return $taux_produit ;
}
// Si (vendeur et acheteur dans Communaut é européenne) et (bien vendu = moyen de transports neuf comme auto, bateau, avion) alors TVA par défaut=0 (La TVA doit étre payé par l'acheteur au centre d'impots de son pays et non au vendeur). Fin de ré gle.
// Non g éré
// Si (vendeur et acheteur dans Communaut <EFBFBD> europ<6F> enne) et (bien vendu = moyen de transports neuf comme auto, bateau, avion) alors TVA par d<> faut=0 (La TVA doit <20> tre pay<61> par l'acheteur au centre d'impots de son pays et non au vendeur). Fin de r<> gle.
// Non g <EFBFBD> r<EFBFBD>
// Si (vendeur et acheteur dans Communaut é européenne) et (acheteur = particulier ou entreprise sans num TVA intra) alors TVA par défaut=TVA du produit vendu. Fin de ré gle.
// Si (vendeur et acheteur dans Communaut <EFBFBD> europ<6F> enne) et (acheteur = particulier ou entreprise sans num TVA intra) alors TVA par d<> faut=TVA du produit vendu. Fin de r<> gle.
if (( $societe_vendeuse -> isInEEC () && $societe_acheteuse -> isInEEC ()) && ! $societe_acheteuse -> tva_intra )
{
if ( $idprod ) return get_product_vat_for_country ( $idprod , $societe_vendeuse -> pays_code );
if ( strlen ( $taux_produit ) == 0 ) return - 1 ; // Si taux produit = '', on ne peut d é terminer taux tva
if ( strlen ( $taux_produit ) == 0 ) return - 1 ; // Si taux produit = '', on ne peut d <EFBFBD> terminer taux tva
return $taux_produit ;
}
// Si (vendeur et acheteur dans Communaut é européenne) et (acheteur = entreprise avec num TVA intra) alors TVA par défaut=0. Fin de ré gle.
// Si (vendeur et acheteur dans Communaut <EFBFBD> europ<6F> enne) et (acheteur = entreprise avec num TVA intra) alors TVA par d<> faut=0. Fin de r<> gle.
if (( $societe_vendeuse -> isInEEC () && $societe_acheteuse -> isInEEC ()) && $societe_acheteuse -> tva_intra )
{
return 0 ;
}
// Sinon la TVA propos ée par défaut=0. Fin de ré gle.
// Rem: Cela signifie qu'au moins un des 2 est hors Communaut é européenne et que le pays diffé re
// Sinon la TVA propos <EFBFBD> e par d<> faut=0. Fin de r<> gle.
// Rem: Cela signifie qu'au moins un des 2 est hors Communaut <EFBFBD> europ<6F> enne et que le pays diff<66> re
return 0 ;
}
/**
\brief Fonction qui renvoie si tva doit etre tva percue r écupé rable
\remarks Si vendeur non assujeti a TVA , TVA par d éfaut= 0. Fin de ré gle.
Si le ( pays vendeur = pays acheteur ) alors TVA par d é faut= TVA du produit vendu . Fin de r é gle.
Si ( vendeur et acheteur dans Communaut é europé enne) et ( bien vendu = moyen de transports neuf comme auto , bateau , avion ) alors TVA par d éfaut= 0 ( La TVA doit étre payé par acheteur au centre d ' impots de son pays et non au vendeur ) . Fin de r é gle.
Si ( vendeur et acheteur dans Communaut é europé enne) et ( acheteur = particulier ou entreprise sans num TVA intra ) alors TVA par d é faut= TVA du produit vendu . Fin de r é gle.
Si ( vendeur et acheteur dans Communaut é europé enne) et ( acheteur = entreprise avec num TVA ) intra alors TVA par d éfaut= 0. Fin de ré gle.
Sinon TVA propos ée par défaut = 0. Fin de ré gle.
\param societe_vendeuse Objet soci été vendeuse
\param societe_acheteuse Objet soci été acheteuse
\brief Fonction qui renvoie si tva doit etre tva percue r <EFBFBD> cup<EFBFBD> rable
\remarks Si vendeur non assujeti a TVA , TVA par d <EFBFBD> faut= 0. Fin de r<EFBFBD> gle.
Si le ( pays vendeur = pays acheteur ) alors TVA par d <EFBFBD> faut= TVA du produit vendu . Fin de r <EFBFBD> gle.
Si ( vendeur et acheteur dans Communaut <EFBFBD> europ<EFBFBD> enne) et ( bien vendu = moyen de transports neuf comme auto , bateau , avion ) alors TVA par d <EFBFBD> faut= 0 ( La TVA doit <EFBFBD> tre pay<EFBFBD> par acheteur au centre d ' impots de son pays et non au vendeur ) . Fin de r <EFBFBD> gle.
Si ( vendeur et acheteur dans Communaut <EFBFBD> europ<EFBFBD> enne) et ( acheteur = particulier ou entreprise sans num TVA intra ) alors TVA par d <EFBFBD> faut= TVA du produit vendu . Fin de r <EFBFBD> gle.
Si ( vendeur et acheteur dans Communaut <EFBFBD> europ<EFBFBD> enne) et ( acheteur = entreprise avec num TVA ) intra alors TVA par d <EFBFBD> faut= 0. Fin de r<EFBFBD> gle.
Sinon TVA propos <EFBFBD> e par d<EFBFBD> faut = 0. Fin de r<EFBFBD> gle.
\param societe_vendeuse Objet soci <EFBFBD> t<EFBFBD> vendeuse
\param societe_acheteuse Objet soci <EFBFBD> t<EFBFBD> acheteuse
\param taux_produit Taux par defaut du produit vendu
\return float 0 or 1
*/
@ -2152,8 +2166,8 @@ function yn($yesno, $case=1, $color=0)
/**
\brief Fonction pour qui retourne le rowid d ' un departement par son code
\param db handler d ' acc é s base
\param code Code r é gion
\param db handler d ' acc <EFBFBD> s base
\param code Code r <EFBFBD> gion
\param pays_id Id du pays
*/
function departement_rowid ( $db , $code , $pays_id )
@ -2184,9 +2198,9 @@ function departement_rowid($db,$code, $pays_id)
}
/**
\brief Renvoi un chemin de classement r é pertoire en fonction d ' un id
\brief Renvoi un chemin de classement r <EFBFBD> pertoire en fonction d ' un id
\remarks Examples : 1 -> " 0/0/1/ " , 15 -> " 0/1/5/ "
\param $num Id a d é composer
\param $num Id a d <EFBFBD> composer
\param $level Niveau de decoupage ( 1 , 2 ou 3 niveaux )
*/
function get_exdir ( $num , $level = 3 )
@ -2200,9 +2214,9 @@ function get_exdir($num,$level=3)
}
/**
\brief Cr éation de ré pertoire recursive
\param $dir R épertoire a cré er
\return int < 0 si erreur , >= 0 si succ é s
\brief Cr <EFBFBD> ation de r<EFBFBD> pertoire recursive
\param $dir R <EFBFBD> pertoire a cr<EFBFBD> er
\return int < 0 si erreur , >= 0 si succ <EFBFBD> s
*/
function create_exdir ( $dir )
{
@ -2221,7 +2235,7 @@ function create_exdir($dir)
else $ccdir = $cdir [ $i ];
if ( eregi ( " ^.: $ " , $ccdir , $regs )) continue ; // Si chemin Windows incomplet, on poursuit par rep suivant
// Attention, le is_dir() peut é chouer bien que le rep existe.
// Attention, le is_dir() peut <EFBFBD> chouer bien que le rep existe.
// (ex selon config de open_basedir)
if ( $ccdir )
{
@ -2232,20 +2246,20 @@ function create_exdir($dir)
umask ( 0 );
if ( ! @ mkdir ( $ccdir , 0755 ))
{
// Si le is_dir a renvoy é une fausse info, alors on passe ici.
// Si le is_dir a renvoy <EFBFBD> une fausse info, alors on passe ici.
dolibarr_syslog ( " functions.lib.php::create_exdir: Fails to create directory ' " . $ccdir . " ' or directory already exists. " , LOG_WARNING );
$nberr ++ ;
}
else
{
dolibarr_syslog ( " functions.lib.php::create_exdir: Directory ' " . $ccdir . " ' created " , LOG_DEBUG );
$nberr = 0 ; // On remet a z éro car si on arrive ici, cela veut dire que les échecs précédents peuvent etre ignoré s
$nberr = 0 ; // On remet a z <EFBFBD> ro car si on arrive ici, cela veut dire que les <20> checs pr<70> c<EFBFBD> dents peuvent etre ignor<6F> s
$nbcreated ++ ;
}
}
else
{
$nberr = 0 ; // On remet a z éro car si on arrive ici, cela veut dire que les échecs précédents peuvent etre ignoré s
$nberr = 0 ; // On remet a z <EFBFBD> ro car si on arrive ici, cela veut dire que les <20> checs pr<70> c<EFBFBD> dents peuvent etre ignor<6F> s
}
}
}
@ -2256,9 +2270,9 @@ function create_exdir($dir)
/**
\brief Retourne le num é ro de la semaine par rapport a une date
\brief Retourne le num <EFBFBD> ro de la semaine par rapport a une date
\param time Date au format 'timestamp'
\return int Num é ro de semaine
\return int Num <EFBFBD> ro de semaine
*/
function numero_semaine ( $time )
{
@ -2274,12 +2288,12 @@ function numero_semaine($time)
/*
* Norme ISO - 8601 :
* - La semaine 1 de toute ann é e est celle qui contient le 4 janvier ou que la semaine 1 de toute ann é e est celle qui contient le 1 er jeudi de janvier .
* - La majorit é des années ont 52 semaines mais les années qui commence un jeudi et les années bissextiles commenéant un mercredi en possé de 53.
* - La semaine 1 de toute ann <EFBFBD> e est celle qui contient le 4 janvier ou que la semaine 1 de toute ann <EFBFBD> e est celle qui contient le 1 er jeudi de janvier .
* - La majorit <EFBFBD> des ann<EFBFBD> es ont 52 semaines mais les ann<EFBFBD> es qui commence un jeudi et les ann<EFBFBD> es bissextiles commen<EFBFBD> ant un mercredi en poss<EFBFBD> de 53.
* - Le 1 er jour de la semaine est le Lundi
*/
// D é finition du Jeudi de la semaine
// D <EFBFBD> finition du Jeudi de la semaine
if ( date ( " w " , mktime ( 12 , 0 , 0 , $mois , $jour , $annee )) == 0 ) // Dimanche
$jeudiSemaine = mktime ( 12 , 0 , 0 , $mois , $jour , $annee ) - 3 * 24 * 60 * 60 ;
else if ( date ( " w " , mktime ( 12 , 0 , 0 , $mois , $jour , $annee )) < 4 ) // du Lundi au Mercredi
@ -2289,7 +2303,7 @@ function numero_semaine($time)
else // Jeudi
$jeudiSemaine = mktime ( 12 , 0 , 0 , $mois , $jour , $annee );
// D éfinition du premier Jeudi de l'anné e
// D <EFBFBD> finition du premier Jeudi de l'ann<6E> e
if ( date ( " w " , mktime ( 12 , 0 , 0 , 1 , 1 , date ( " Y " , $jeudiSemaine ))) == 0 ) // Dimanche
{
$premierJeudiAnnee = mktime ( 12 , 0 , 0 , 1 , 1 , date ( " Y " , $jeudiSemaine )) + 4 * 24 * 60 * 60 ;
@ -2307,7 +2321,7 @@ function numero_semaine($time)
$premierJeudiAnnee = mktime ( 12 , 0 , 0 , 1 , 1 , date ( " Y " , $jeudiSemaine ));
}
// D éfinition du numéro de semaine: nb de jours entre "premier Jeudi de l'anné e" et "Jeudi de la semaine";
// D <EFBFBD> finition du num<75> ro de semaine: nb de jours entre "premier Jeudi de l'ann<6E> e" et "Jeudi de la semaine";
$numeroSemaine = (
(
date ( " z " , mktime ( 12 , 0 , 0 , date ( " m " , $jeudiSemaine ), date ( " d " , $jeudiSemaine ), date ( " Y " , $jeudiSemaine )))
@ -2319,7 +2333,7 @@ function numero_semaine($time)
// Cas particulier de la semaine 53
if ( $numeroSemaine == 53 )
{
// Les ann ées qui commence un Jeudi et les années bissextiles commenéant un Mercredi en possé de 53
// Les ann <EFBFBD> es qui commence un Jeudi et les ann<6E> es bissextiles commen<65> ant un Mercredi en poss<73> de 53
if ( date ( " w " , mktime ( 12 , 0 , 0 , 1 , 1 , date ( " Y " , $jeudiSemaine ))) == 4 || ( date ( " w " , mktime ( 12 , 0 , 0 , 1 , 1 , date ( " Y " , $jeudiSemaine ))) == 3 && date ( " z " , mktime ( 12 , 0 , 0 , 12 , 31 , date ( " Y " , $jeudiSemaine ))) == 365 ))
{
$numeroSemaine = 53 ;
@ -2382,13 +2396,13 @@ function weight_convert($weight,&$from_unit,$to_unit)
\param int Unit
\param measuring_style Le style de mesure : weight , volume , ...
\return string Unite
\todo gerer les autres unit é s de mesure comme la livre , le gallon , le litre , ...
\todo gerer les autres unit <EFBFBD> s de mesure comme la livre , le gallon , le litre , ...
*/
function measuring_units_string ( $unit , $measuring_style = '' )
{
/* Note Rodo aux dev : )
* Ne pas ins érer dans la base de donné es ces valeurs
* cela surchagerait inutilement d ' une requete suppl é mentaire
* Ne pas ins <EFBFBD> rer dans la base de donn<EFBFBD> es ces valeurs
* cela surchagerait inutilement d ' une requete suppl <EFBFBD> mentaire
* pour quelque chose qui est somme toute peu variable
*/
@ -2488,7 +2502,7 @@ function binhex($bin, $pad=false, $upper=false){
}
/**
\brief Convertir de l ' h éxadé cimal en binaire
\brief Convertir de l ' h <EFBFBD> xad<EFBFBD> cimal en binaire
\param string hexa
\return string bin
*/
@ -2707,7 +2721,7 @@ function num_public_holiday($timestampStart, $timestampEnd, $countrycode='FR')
/**
\brief Fonction retournant le nombre de jour entre deux dates
\param timestampStart Timestamp de d é but
\param timestampStart Timestamp de d <EFBFBD> but
\param timestampEnd Timestamp de fin
\param lastday On prend en compte le dernier jour , 0 : non , 1 : oui
\return nbjours Nombre de jours
@ -2730,8 +2744,8 @@ function num_between_day($timestampStart, $timestampEnd, $lastday=0)
}
/**
\brief Fonction retournant le nombre de jour entre deux dates sans les jours f ériés ( jours ouvré s)
\param timestampStart Timestamp de d é but
\brief Fonction retournant le nombre de jour entre deux dates sans les jours f <EFBFBD> ri<EFBFBD> s ( jours ouvr<EFBFBD> s)
\param timestampStart Timestamp de d <EFBFBD> but
\param timestampEnd Timestamp de fin
\param inhour 0 : sort le nombre de jour , 1 : sort le nombre d ' heure ( 72 max )
\param lastday On prend en compte le dernier jour , 0 : non , 1 : oui
@ -2757,7 +2771,7 @@ function num_open_day($timestampStart, $timestampEnd,$inhour=0,$lastday=0)
}
/**
\brief Fonction retournant le nombre de lignes dans un texte format é
\brief Fonction retournant le nombre de lignes dans un texte format <EFBFBD>
\param texte Texte
\return nblines Nombre de lignes
*/
@ -2815,10 +2829,10 @@ function dol_textishtml($msg,$option=0)
}
/*
* \brief Effectue les substitutions des mots cl és par les donné es en fonction du tableau
* \brief Effectue les substitutions des mots cl <EFBFBD> s par les donn<EFBFBD> es en fonction du tableau
* \param chaine Chaine dans laquelle faire les substitutions
* \param substitutionarray Tableau cl é substitution => valeur a mettre
* \return string Chaine avec les substitutions effectu é es
* \param substitutionarray Tableau cl <EFBFBD> substitution => valeur a mettre
* \return string Chaine avec les substitutions effectu <EFBFBD> es
*/
function make_substitutions ( $chaine , $substitutionarray )
{
@ -2831,8 +2845,8 @@ function make_substitutions($chaine,$substitutionarray)
/*
* \brief Formate l ' affichage de date de d é but et de fin
* \param date_start date de d é but
* \brief Formate l ' affichage de date de d <EFBFBD> but et de fin
* \param date_start date de d <EFBFBD> but
* \param date_end date de fin
*/
function print_date_range ( $date_start , $date_end )
@ -2873,8 +2887,8 @@ function make_alpha_from_numbers($number)
/**
\brief Retourne un tableau des mois ou le mois s électionné
\param selected Mois à sé lectionner ou - 1
\brief Retourne un tableau des mois ou le mois s <EFBFBD> lectionn<EFBFBD>
\param selected Mois <EFBFBD> s<EFBFBD> lectionner ou - 1
\return string or array Month string or array if selected < 0
*/
function monthArrayOrSelected ( $selected = 0 )