--- C:\Logiciels\EasyPHP1-8\www\dolibarr-2.0.1\XI\contribution\ancien\mysql\tables\llx_cond_reglement.sql	Tue Oct 04 02:04:02 2005
+++ C:\Logiciels\EasyPHP1-8\www\dolibarr-2.0.1\XI\contribution\nouveau\mysql\tables\llx_cond_reglement.sql	Mon Apr 10 09:49:23 2006
@@ -29,5 +29,6 @@
   libelle         varchar(255),
   libelle_facture text,
   fdm             tinyint,    -- reglement fin de mois
-  nbjour          smallint
+  nbjour          smallint,
+  decalage		  smallint
 )type=innodb;
--- C:\Logiciels\EasyPHP1-8\www\dolibarr-2.0.1\XI\contribution\ancien\mysql\migration\2.0.0-2.1.0.sql	Sun Apr 09 05:00:16 2006
+++ C:\Logiciels\EasyPHP1-8\www\dolibarr-2.0.1\XI\contribution\nouveau\mysql\migration\2.0.0-2.1.0.sql	Mon Apr 10 10:00:33 2006
@@ -35,6 +35,8 @@
 
 insert into llx_cond_reglement(rowid, code, sortorder, active, libelle, libelle_facture, fdm, nbjour) values (6,'PROFORMA',    6,1, 'Proforma','Réglement avant livraison',0,0);
 
+alter table llx_cond_reglement add (decalage smallint(6) default 0);
+
 alter table llx_commande add fk_cond_reglement int(11) DEFAULT NULL;
 alter table llx_commande add fk_mode_reglement int(11) DEFAULT NULL;
 
--- C:\Logiciels\EasyPHP1-8\www\dolibarr-2.0.1\XI\contribution\ancien\pgsql\tables\llx_cond_reglement.sql	Sat Dec 17 16:31:40 2005
+++ C:\Logiciels\EasyPHP1-8\www\dolibarr-2.0.1\XI\contribution\nouveau\pgsql\tables\llx_cond_reglement.sql	Mon Apr 10 10:02:03 2006
@@ -33,5 +33,6 @@
   "libelle"         varchar(255),
   "libelle_facture" text,
   "fdm"             smallint,    -- reglement fin de mois
-  "nbjour"          smallint
+  "nbjour"          smallint,
+  "decalage"		smallint
 );
--- C:\Logiciels\EasyPHP1-8\www\dolibarr-2.0.1\XI\contribution\ancien\htdocs\admin\dict.php	Thu Mar 16 11:13:58 2006
+++ C:\Logiciels\EasyPHP1-8\www\dolibarr-2.0.1\XI\contribution\nouveau\htdocs\admin\dict.php	Mon Apr 10 10:07:06 2006
@@ -95,7 +95,7 @@
 $tabsql[9] = "SELECT code, code_iso, label as libelle, active FROM ".MAIN_DB_PREFIX."c_currencies";
 $tabsql[10]= "SELECT t.rowid, t.taux, p.libelle as pays, t.recuperableonly, t.note, t.active FROM ".MAIN_DB_PREFIX."c_tva as t, llx_c_pays as p WHERE t.fk_pays=p.rowid";
 $tabsql[11]= "SELECT t.rowid as rowid, element, source, code, libelle, active FROM ".MAIN_DB_PREFIX."c_type_contact AS t";
-$tabsql[12]= "SELECT rowid   as rowid, code, sortorder, c.libelle, c.libelle_facture, nbjour, fdm, active FROM ".MAIN_DB_PREFIX."cond_reglement AS c";
+$tabsql[12]= "SELECT rowid   as rowid, code, sortorder, c.libelle, c.libelle_facture, nbjour, fdm, decalage, active FROM ".MAIN_DB_PREFIX."cond_reglement AS c";
 $tabsql[13]= "SELECT id      as rowid, code, c.libelle, type, active FROM ".MAIN_DB_PREFIX."c_paiement AS c";
 
 // Tri par defaut
@@ -125,7 +125,7 @@
 $tabfield[9] = "code,code_iso,libelle";
 $tabfield[10]= "pays,taux,recuperableonly,note";
 $tabfield[11]= "element,source,code,libelle";
-$tabfield[12]= "code,libelle,libelle_facture,nbjour,fdm";
+$tabfield[12]= "code,libelle,libelle_facture,nbjour,fdm,decalage";
 $tabfield[13]= "code,libelle,type";
 
 // Nom des champs dans la table pour insertion d'un enregistrement
@@ -140,7 +140,7 @@
 $tabfieldinsert[9] = "code_iso,label";
 $tabfieldinsert[10]= "fk_pays,taux,recuperableonly,note";
 $tabfieldinsert[11]= "element,source,code,libelle";
-$tabfieldinsert[12]= "code,libelle,libelle_facture,nbjour,fdm";
+$tabfieldinsert[12]= "code,libelle,libelle_facture,nbjour,fdm,decalage";
 $tabfieldinsert[13]= "code,libelle,type";
 
 // Nom du rowid si le champ n'est pas de type autoincrément
@@ -359,6 +359,7 @@
             if ($fieldlist[$field]=='recuperableonly') $valuetoshow=MENTION_NPR;
             if ($fieldlist[$field]=='nbjour')          $valuetoshow=$langs->trans("NbOfDays");
             if ($fieldlist[$field]=='fdm')             $valuetoshow=$langs->trans("AtEndOfMonth");
+            if ($fieldlist[$field]=='decalage')        $valuetoshow=$langs->trans("Offset");
             print '<td>';
             print $valuetoshow;
             print '</td>';
@@ -427,6 +428,9 @@
             elseif ($fieldlist[$field] == 'nbjour') {
                 print '<td><input type="text" class="flat" value="" size="3" name="'.$fieldlist[$field].'"></td>';
             }
+            elseif ($fieldlist[$field] == 'decalage') {
+                print '<td><input type="text" class="flat" value="" size="3" name="'.$fieldlist[$field].'"></td>';
+            }
             elseif ($fieldlist[$field] == 'fdm') {
                 print '<td>';
                 $html->selectyesno('fdm','',1);
@@ -472,6 +476,7 @@
                 if ($fieldlist[$field]=='recuperableonly') $valuetoshow=MENTION_NPR;
                 if ($fieldlist[$field]=='nbjour')          $valuetoshow=$langs->trans("NbOfDays");
                 if ($fieldlist[$field]=='fdm')             $valuetoshow=$langs->trans("AtEndOfMonth");
+                if ($fieldlist[$field]=='decalage')        $valuetoshow=$langs->trans("Offset");
                 // Affiche nom du champ
                 print_liste_field_titre($valuetoshow,"dict.php",$fieldlist[$field],"&id=".$_GET["id"],"","",$sortfield);
             }
--- C:\Logiciels\EasyPHP1-8\www\dolibarr-2.0.1\XI\contribution\ancien\htdocs\facture.class.php	Sun Apr 09 05:00:12 2006
+++ C:\Logiciels\EasyPHP1-8\www\dolibarr-2.0.1\XI\contribution\nouveau\htdocs\facture.class.php	Mon Apr 10 10:49:07 2006
@@ -567,7 +567,7 @@
 	{
 		if (! $cond_reglement_id)
 			$cond_reglement_id=$this->cond_reglement_id;
-		$sqltemp = 'SELECT c.fdm,c.nbjour';
+		$sqltemp = 'SELECT c.fdm,c.nbjour,c.decalage';
 		$sqltemp.= ' FROM '.MAIN_DB_PREFIX.'cond_reglement as c';
 		$sqltemp.= ' WHERE c.rowid='.$cond_reglement_id;
 		$resqltemp=$this->db->query($sqltemp);
@@ -578,6 +578,7 @@
 				$obj = $this->db->fetch_object($resqltemp);
 				$cdr_nbjour = $obj->nbjour;
 				$cdr_fdm = $obj->fdm;
+				$cdr_decalage = $obj->decalage;
 			}
 		}
 		else
@@ -586,15 +587,34 @@
 			return -1;
 		}
 		$this->db->free($resqltemp);
-		// Definition de la date limite
+		
+		/* Definition de la date limite */
+		
+		// 1 : ajout du nombre de jours
 		$datelim = $this->date + ( $cdr_nbjour * 3600 * 24 );
+		
+		// 2 : application de la règle "fin de mois"
 		if ($cdr_fdm)
 		{
 			$mois=date('m', $datelim);
 			$annee=date('Y', $datelim);
-			$fins=array(31,28,31,30,31,30,31,31,30,31,30,31);
-			$datelim=mktime(12,0,0,$mois,$fins[$mois-1],$annee);
+			if ($mois == 12)
+			{
+				$mois = 1;
+				$annee += 1;
+			}
+			else
+			{
+				$mois += 1;
+			}
+			// On se déplace au début du mois suivant, et on retire un jour
+			$datelim=mktime(12,0,0,$mois,1,$annee);
+			$datelim -= (3600 * 24);
 		}
+		
+		// 3 : application du décalage
+		$datelim += ( $cdr_decalage * 3600 * 24);
+		
 		return $datelim;
 	}
 
--- C:\Logiciels\EasyPHP1-8\www\dolibarr-2.0.1\XI\contribution\ancien\htdocs\langs\en_US\admin.lang	Sun Apr 09 05:00:14 2006
+++ C:\Logiciels\EasyPHP1-8\www\dolibarr-2.0.1\XI\contribution\nouveau\htdocs\langs\en_US\admin.lang	Mon Apr 10 10:09:23 2006
@@ -264,6 +264,7 @@
 LabelOnDocuments=Label on documents
 NbOfDays=Nb of days
 AtEndOfMonth=At end of month
+Offset=Offset
 AlwaysActive=Always active
 UpdateRequired=Your system need to be updated. For this click on <a href="%s">Update now</a>.
 WebServer=Web server
--- C:\Logiciels\EasyPHP1-8\www\dolibarr-2.0.1\XI\contribution\ancien\htdocs\langs\fr_BE\admin.lang	Sun Jan 16 19:17:36 2005
+++ C:\Logiciels\EasyPHP1-8\www\dolibarr-2.0.1\XI\contribution\nouveau\htdocs\langs\fr_BE\admin.lang	Mon Apr 10 10:09:44 2006
@@ -67,4 +67,5 @@
 MaxSizeList=Longueur maximum des listes
 TopMenuManager=Gestionnaire du menu du haut
 MessageOfDay=Message du jour
-DefaultLanguage=Langue à utiliser par défaut
\ No newline at end of file
+DefaultLanguage=Langue à utiliser par défaut
+Offset=Décalage
--- C:\Logiciels\EasyPHP1-8\www\dolibarr-2.0.1\XI\contribution\ancien\htdocs\langs\fr_FR\admin.lang	Sun Apr 09 05:00:14 2006
+++ C:\Logiciels\EasyPHP1-8\www\dolibarr-2.0.1\XI\contribution\nouveau\htdocs\langs\fr_FR\admin.lang	Mon Apr 10 10:09:52 2006
@@ -264,6 +264,7 @@
 LabelOnDocuments=Libellé sur documents
 NbOfDays=Nbre de jours
 AtEndOfMonth=En fin de mois
+Offset=Décalage
 AlwaysActive=Toujours actif
 UpdateRequired=Votre système nécessite une mise à jour. Pour cela cliquez sur <a href="%s">Mettre à jour</a>.
 WebServer=Serveur Web
