New: Automtic list of documents in ECM module is ok for customers,

suppliers invoice, orders, customers orders, proposals and social
contributions.
This commit is contained in:
Laurent Destailleur 2012-02-06 14:34:58 +01:00
parent 4d80b47bc6
commit 5974cde154
8 changed files with 147 additions and 47 deletions

View File

@ -46,6 +46,8 @@ For users:
- New: Install process is now two times faster.
- New: Extra fields support int type.
- New: Add brazilian states.
- New: Automtic list of documents in ECM module is ok for customers,
suppliers invoice, orders, customers orders, proposals and social contributions.
- Fix: Can use POS module with several concurrent users.
For developers:

View File

@ -26,9 +26,6 @@
/**
* \file htdocs/comm/propal/class/propal.class.php
* \brief Fichier de la classe des propales
* \author Rodolphe Qiedeville
* \author Eric Seigne
* \author Laurent Destailleur
*/
require_once(DOL_DOCUMENT_ROOT ."/core/class/commonobject.class.php");
@ -2370,7 +2367,7 @@ class Propal extends CommonObject
* Return clicable link of object (with eventually picto)
*
* @param int $withpicto Add picto into link
* @param string $option Where point the link
* @param string $option Where point the link ('compta', 'expedition', 'document', ...)
* @param string $get_params Parametres added to url
* @return string String with URL
*/
@ -2379,18 +2376,22 @@ class Propal extends CommonObject
global $langs;
$result='';
if($option == '')
if ($option == '')
{
$lien = '<a href="'.DOL_URL_ROOT.'/comm/propal.php?id='.$this->id. $get_params .'">';
}
if($option == 'compta') // deprecated
if ($option == 'compta') // deprecated
{
$lien = '<a href="'.DOL_URL_ROOT.'/comm/propal.php?id='.$this->id. $get_params .'">';
}
if($option == 'expedition')
if ($option == 'expedition')
{
$lien = '<a href="'.DOL_URL_ROOT.'/expedition/propal.php?id='.$this->id. $get_params .'">';
}
if ($option == 'document')
{
$lien = '<a href="'.DOL_URL_ROOT.'/comm/propal/document.php?id='.$this->id. $get_params .'">';
}
$lienfin='</a>';
$picto='propal';

View File

@ -645,22 +645,50 @@ class FormFile
$url=$_SERVER["PHP_SELF"];
print '<table width="100%" class="nobordernopadding">';
print '<tr class="liste_titre">';
print_liste_field_titre($langs->trans("Ref"),$_SERVER["PHP_SELF"],"","",$param,'align="left"',$sortfield,$sortorder);
$sortref="fullname";
if ($modulepart == 'invoice_supplier') $sortref=''; // No sort for supplier invoices as path name is not
print_liste_field_titre($langs->trans("Ref"),$_SERVER["PHP_SELF"],$sortref,"",$param,'align="left"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Documents2"),$_SERVER["PHP_SELF"],"name","",$param,'align="left"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Size"),$_SERVER["PHP_SELF"],"size","",$param,'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Date"),$_SERVER["PHP_SELF"],"date","",$param,'align="center"',$sortfield,$sortorder);
print_liste_field_titre('','','');
print '</tr>';
// To show ref or specific information according to view to show (defined by $module)
if ($modulepart == 'invoice')
{
include_once(DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php');
$object_static=new Facture($this->db);
$object_instance=new Facture($this->db);
}
if ($modulepart == 'invoice_supplier')
else if ($modulepart == 'invoice_supplier')
{
include_once(DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php');
$object_static=new FactureFournisseur($this->db);
$object_instance=new FactureFournisseur($this->db);
}
else if ($modulepart == 'propal')
{
include_once(DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php');
$object_instance=new Propal($this->db);
}
else if ($modulepart == 'order')
{
include_once(DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php');
$object_instance=new Commande($this->db);
}
else if ($modulepart == 'order_supplier')
{
include_once(DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php');
$object_instance=new CommandeFournisseur($this->db);
}
else if ($modulepart == 'contract')
{
include_once(DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php');
$object_instance=new Contrat($this->db);
}
else if ($modulepart == 'tax')
{
include_once(DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php');
$object_instance=new ChargeSociales($this->db);
}
$var=true;
@ -674,28 +702,32 @@ class FormFile
{
// Define relative path used to store the file
$relativefile=preg_replace('/'.preg_quote($upload_dir.'/','/').'/','',$file['fullname']);
//print 'eeee'.$relativefile;
//var_dump($file);
$id=0; $ref=''; $object_instance->id=0; $object_instance->ref=''; $label='';
// To show ref or specific information according to view to show (defined by $module)
if ($modulepart == 'invoice') { preg_match('/(.*)\/[^\/]+$/',$relativefile,$reg); $ref=$reg[1]; }
if ($modulepart == 'invoice_supplier') { preg_match('/(\d+)\/[^\/]+$/',$relativefile,$reg); $id=$reg[1]; }
if ($modulepart == 'propal') { preg_match('/(.*)\/[^\/]+$/',$relativefile,$reg); $ref=$reg[1]; }
if ($modulepart == 'order') { preg_match('/(.*)\/[^\/]+$/',$relativefile,$reg); $ref=$reg[1]; }
if ($modulepart == 'order_supplier') { preg_match('/(.*)\/[^\/]+$/',$relativefile,$reg); $ref=$reg[1]; }
if ($modulepart == 'contract') { preg_match('/(.*)\/[^\/]+$/',$relativefile,$reg); $ref=$reg[1]; }
if ($modulepart == 'tax') { preg_match('/(\d+)\/[^\/]+$/',$relativefile,$reg); $id=$reg[1]; }
if (is_object($this->cache_objects[$modulepart.'_'.$id.'_'.$ref])) $object_instance=$this->cache_objects[$modulepart.'_'.$id.'_'.$ref];
else
{
//print 'Fetch '.$idorref.'<br>';
$result=$object_instance->fetch($id,$ref);
if ($result > 0) $this->cache_objects[$modulepart.'_'.$id.'_'.$ref]=dol_clone($object_instance); // Save object into a cache
}
$var=!$var;
print '<tr '.$bc[$var].'>';
print '<td>';
$id='';$ref='';
if ($modulepart == 'invoice')
{
preg_match('/(.*)\/[^\/]+$/',$relativefile,$reg);
$ref=$reg[1];
$object_static->fetch('',$ref);
//print $relativefile.'rr'.$id;
print $object_static->getNomUrl(1,'document');
}
if ($modulepart == 'invoice_supplier')
{
preg_match('/(\d+)\/[^\/]+$/',$relativefile,$reg);
$id=$reg[1];
$object_static->fetch($id);
//print $relativefile.'rr'.$id;
print $object_static->getNomUrl(1,'document');
}
if ($object_instance->id) print $object_instance->getNomUrl(1,'document');
else print $langs->trans("ObjectDeleted",($id?$id:$ref));
print '</td>';
print '<td>';
//print "XX".$file['name']; //$file['name'] must be utf8

View File

@ -44,7 +44,7 @@ function dol_getwebuser($mode)
* @param int $recursive Determines whether subdirectories are searched
* @param string $filter Regex for include filter
* @param string $excludefilter Array of Regex for exclude filter (example: array('\.meta$','^\.')
* @param string $sortcriteria Sort criteria ("","name","date","size")
* @param string $sortcriteria Sort criteria ("","fullname","name","date","size")
* @param string $sortorder Sort order (SORT_ASC, SORT_DESC)
* @param int $mode 0=Return array minimum keys loaded (faster), 1=Force all keys like date and size to be loaded (slower), 2=Force load of date only, 3=Force load of size only
* @return array Array of array('name'=>'xxx','fullname'=>'/abc/xxx','date'=>'yyy','size'=>99,'type'=>'dir|file')

View File

@ -1,6 +1,6 @@
<?php
/* Copyright (C) 2004-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2010 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2004-2012 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005 Simon Tosser <simon@kornog-computing.com>
* Copyright (C) 2005-2011 Regis Houssin <regis@dolibarr.fr>
* Copyright (C) 2010 Pierre Morin <pierre.morin@auguria.net>
@ -135,7 +135,7 @@ if ($modulepart)
}
// Wrapping for invoices
else if ($modulepart == 'facture')
else if ($modulepart == 'facture' || $modulepart == 'invoice')
{
if ($user->rights->facture->lire || preg_match('/^specimen/i',$original_file))
{
@ -188,7 +188,7 @@ if ($modulepart)
}
// Wrapping pour les commandes
else if ($modulepart == 'commande')
else if ($modulepart == 'commande' || $modulepart == 'order')
{
if ($user->rights->commande->lire || preg_match('/^specimen/i',$original_file))
{
@ -210,7 +210,7 @@ if ($modulepart)
}
// Wrapping pour les commandes fournisseurs
else if ($modulepart == 'commande_fournisseur')
else if ($modulepart == 'commande_fournisseur' || $modulepart == 'order_supplier')
{
if ($user->rights->fournisseur->commande->lire || preg_match('/^specimen/i',$original_file))
{

View File

@ -1,5 +1,5 @@
<?php
/* Copyright (C) 2008-2011 Laurent Destailleur <eldy@users.sourceforge.net>
/* Copyright (C) 2008-2012 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2008-2010 Regis Houssin <regis@dolibarr.fr>
*
* This program is free software; you can redistribute it and/or modify
@ -66,7 +66,7 @@ $offset = $conf->liste_limit * $page;
$pageprev = $page - 1;
$pagenext = $page + 1;
if (! $sortorder) $sortorder="ASC";
if (! $sortfield) $sortfield="label";
if (! $sortfield) $sortfield="fullname";
$ecmdir = new EcmDirectory($db);
if (GETPOST("section"))
@ -352,9 +352,10 @@ if ($conf->societe->enabled) { $rowspan++; $sectionauto[]=array('level'=>1,
if ($conf->propal->enabled) { $rowspan++; $sectionauto[]=array('level'=>1, 'module'=>'propal', 'test'=>$conf->propal->enabled, 'label'=>$langs->trans("Prop"), 'desc'=>$langs->trans("ECMDocsByProposals")); }
if ($conf->contrat->enabled) { $rowspan++; $sectionauto[]=array('level'=>1, 'module'=>'contract','test'=>$conf->contrat->enabled, 'label'=>$langs->trans("Contracts"), 'desc'=>$langs->trans("ECMDocsByContracts")); }
if ($conf->commande->enabled) { $rowspan++; $sectionauto[]=array('level'=>1, 'module'=>'order', 'test'=>$conf->commande->enabled,'label'=>$langs->trans("CustomersOrders"), 'desc'=>$langs->trans("ECMDocsByOrders")); }
if ($conf->fournisseur->enabled) { $rowspan++; $sectionauto[]=array('level'=>1, 'module'=>'order_supplier', 'test'=>$conf->fournisseur->enabled, 'label'=>$langs->trans("SuppliersOrders"), 'desc'=>$langs->trans("ECMDocsByOrders")); }
if ($conf->facture->enabled) { $rowspan++; $sectionauto[]=array('level'=>1, 'module'=>'invoice', 'test'=>$conf->facture->enabled, 'label'=>$langs->trans("CustomersInvoices"), 'desc'=>$langs->trans("ECMDocsByInvoices")); }
if ($conf->fournisseur->enabled) { $rowspan++; $sectionauto[]=array('level'=>1, 'module'=>'invoice_supplier', 'test'=>$conf->fournisseur->enabled, 'label'=>$langs->trans("SuppliersInvoices"), 'desc'=>$langs->trans("ECMDocsByInvoices")); }
if ($conf->fournisseur->enabled) { $rowspan++; $sectionauto[]=array('level'=>1, 'module'=>'order_supplier', 'test'=>$conf->fournisseur->enabled, 'label'=>$langs->trans("SuppliersOrders"), 'desc'=>$langs->trans("ECMDocsByOrders")); }
if ($conf->fournisseur->enabled) { $rowspan++; $sectionauto[]=array('level'=>1, 'module'=>'invoice_supplier', 'test'=>$conf->fournisseur->enabled, 'label'=>$langs->trans("SuppliersInvoices"), 'desc'=>$langs->trans("ECMDocsByInvoices")); }
if ($conf->tax->enabled) { $rowspan++; $sectionauto[]=array('level'=>1, 'module'=>'tax', 'test'=>$conf->tax->enabled, 'label'=>$langs->trans("SocialContributions"), 'desc'=>$langs->trans("ECMDocsBySocialContributions")); }
//***********************
@ -802,39 +803,101 @@ else
$formfile=new FormFile($db);
$param=($sortfield?'&sortfield='.$sortfield:'').($sortorder?'&sortorder='.$sortorder:'');
$maxlengthname=40;
// Right area
if ($module == 'invoice_supplier') // Auto area for suppliers invoices
if ($module == 'company') // Auto area for suppliers invoices
{
$relativepath='facture';
$upload_dir = $conf->fournisseur->dir_output.'/'.$relativepath;
$filearray=dol_dir_list($upload_dir,"files",1,'',array('^SPECIMEN\.pdf$','^\.','\.meta$','^temp$','^CVS$'),$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
$upload_dir = $conf->societe->dir_output;
$filearray=dol_dir_list($upload_dir,"files",1,'',array('^SPECIMEN\.pdf$','^\.','\.meta$','^temp$','^payments$','^CVS$','^thumbs$'),$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
$param.='&module='.$module;
$textifempty=($section?$langs->trans("NoFileFound"):($showonrightsize=='featurenotyetavailable'?$langs->trans("FeatureNotYetAvailable"):$langs->trans("ECMSelectASection")));
$formfile->list_of_autoecmfiles($upload_dir,$filearray,$module,$param,1,'',$user->rights->ecm->upload,1,$textifempty,40);
$formfile->list_of_autoecmfiles($upload_dir,$filearray,$module,$param,1,'',$user->rights->ecm->upload,1,$textifempty,$maxlengthname);
}
else if ($module == 'invoice') // Auto area for suppliers invoices
{
$upload_dir = $conf->facture->dir_output;
$filearray=dol_dir_list($upload_dir,"files",1,'',array('^SPECIMEN\.pdf$','^\.','\.meta$','^temp$','^payments$','^CVS$'),$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
$filearray=dol_dir_list($upload_dir,"files",1,'',array('^SPECIMEN\.pdf$','^\.','\.meta$','^temp$','^payments$','^CVS$','^thumbs$'),$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
$param.='&module='.$module;
$textifempty=($section?$langs->trans("NoFileFound"):($showonrightsize=='featurenotyetavailable'?$langs->trans("FeatureNotYetAvailable"):$langs->trans("ECMSelectASection")));
$formfile->list_of_autoecmfiles($upload_dir,$filearray,$module,$param,1,'',$user->rights->ecm->upload,1,$textifempty,40);
$formfile->list_of_autoecmfiles($upload_dir,$filearray,$module,$param,1,'',$user->rights->ecm->upload,1,$textifempty,$maxlengthname);
}
else if ($module == 'invoice_supplier') // Auto area for suppliers invoices
{
$relativepath='facture';
$upload_dir = $conf->fournisseur->dir_output.'/'.$relativepath;
$filearray=dol_dir_list($upload_dir,"files",1,'',array('^SPECIMEN\.pdf$','^\.','\.meta$','^temp$','^CVS$','^thumbs$'),$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
$param.='&module='.$module;
$textifempty=($section?$langs->trans("NoFileFound"):($showonrightsize=='featurenotyetavailable'?$langs->trans("FeatureNotYetAvailable"):$langs->trans("ECMSelectASection")));
$formfile->list_of_autoecmfiles($upload_dir,$filearray,$module,$param,1,'',$user->rights->ecm->upload,1,$textifempty,$maxlengthname);
}
else if ($module == 'propal') // Auto area for customers orders
{
$upload_dir = $conf->propale->dir_output;
$filearray=dol_dir_list($upload_dir,"files",1,'',array('^SPECIMEN\.pdf$','^\.','\.meta$','^temp$','^payments$','^CVS$','^thumbs$'),$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
$param.='&module='.$module;
$textifempty=($section?$langs->trans("NoFileFound"):($showonrightsize=='featurenotyetavailable'?$langs->trans("FeatureNotYetAvailable"):$langs->trans("ECMSelectASection")));
$formfile->list_of_autoecmfiles($upload_dir,$filearray,$module,$param,1,'',$user->rights->ecm->upload,1,$textifempty,$maxlengthname);
}
else if ($module == 'order') // Auto area for customers orders
{
$upload_dir = $conf->commande->dir_output;
$filearray=dol_dir_list($upload_dir,"files",1,'',array('^SPECIMEN\.pdf$','^\.','\.meta$','^temp$','^payments$','^CVS$','^thumbs$'),$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
$param.='&module='.$module;
$textifempty=($section?$langs->trans("NoFileFound"):($showonrightsize=='featurenotyetavailable'?$langs->trans("FeatureNotYetAvailable"):$langs->trans("ECMSelectASection")));
$formfile->list_of_autoecmfiles($upload_dir,$filearray,$module,$param,1,'',$user->rights->ecm->upload,1,$textifempty,$maxlengthname);
}
else if ($module == 'order_supplier') // Auto area for suppliers orders
{
$relativepath='commande';
$upload_dir = $conf->fournisseur->dir_output.'/'.$relativepath;
$filearray=dol_dir_list($upload_dir,"files",1,'',array('^SPECIMEN\.pdf$','^\.','\.meta$','^temp$','^payments$','^CVS$','^thumbs$'),$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
$param.='&module='.$module;
$textifempty=($section?$langs->trans("NoFileFound"):($showonrightsize=='featurenotyetavailable'?$langs->trans("FeatureNotYetAvailable"):$langs->trans("ECMSelectASection")));
$formfile->list_of_autoecmfiles($upload_dir,$filearray,$module,$param,1,'',$user->rights->ecm->upload,1,$textifempty,$maxlengthname);
}
else if ($module == 'contract') // Auto area for suppliers invoices
{
$upload_dir = $conf->contrat->dir_output;
$filearray=dol_dir_list($upload_dir,"files",1,'',array('^SPECIMEN\.pdf$','^\.','\.meta$','^temp$','^CVS$','^thumbs$'),$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
$param.='&module='.$module;
$textifempty=($section?$langs->trans("NoFileFound"):($showonrightsize=='featurenotyetavailable'?$langs->trans("FeatureNotYetAvailable"):$langs->trans("ECMSelectASection")));
$formfile->list_of_autoecmfiles($upload_dir,$filearray,$module,$param,1,'',$user->rights->ecm->upload,1,$textifempty,$maxlengthname);
}
else if ($module == 'tax') // Auto area for suppliers invoices
{
$upload_dir = $conf->tax->dir_output;
$filearray=dol_dir_list($upload_dir,"files",1,'',array('^SPECIMEN\.pdf$','^\.','\.meta$','^temp$','^CVS$','^thumbs$'),$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
$param.='&module='.$module;
$textifempty=($section?$langs->trans("NoFileFound"):($showonrightsize=='featurenotyetavailable'?$langs->trans("FeatureNotYetAvailable"):$langs->trans("ECMSelectASection")));
$formfile->list_of_autoecmfiles($upload_dir,$filearray,$module,$param,1,'',$user->rights->ecm->upload,1,$textifempty,$maxlengthname);
}
else // Manual area
{
$relativepath=$ecmdir->getRelativePath();
$upload_dir = $conf->ecm->dir_output.'/'.$relativepath;
$filearray=dol_dir_list($upload_dir,"files",0,'',array('^\.','\.meta$'),$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
$filearray=dol_dir_list($upload_dir,"files",0,'',array('^\.','\.meta$','^temp$','^CVS$'),$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
$param.='&section='.$section;
$textifempty=($section?$langs->trans("NoFileFound"):($showonrightsize=='featurenotyetavailable'?$langs->trans("FeatureNotYetAvailable"):$langs->trans("ECMSelectASection")));
$formfile->list_of_documents($filearray,'','ecm',$param,1,$relativepath,$user->rights->ecm->upload,1,$textifempty,40);
$formfile->list_of_documents($filearray,'','ecm',$param,1,$relativepath,$user->rights->ecm->upload,1,$textifempty,$maxlengthname);
}
// print '<table width="100%" class="border">';

View File

@ -605,6 +605,7 @@ URLPhoto=Url of photo/logo
SetLinkToThirdParty=Link to another third party
CreateDraft=Create draft
ClickToEdit=Click to edit
ObjectDeleted=Object %s deleted
# Week day
Monday=Monday

View File

@ -607,6 +607,7 @@ URLPhoto=Url vers photo/logo
SetLinkToThirdParty=Lier vers un autre tiers
CreateDraft=Créer brouillon
ClickToEdit=Cliquer ici pour éditer
ObjectDeleted=Objet %s supprimé
# Week day
Monday=Lundi