Merge remote-tracking branch 'origin/3.4' into 3.5
Conflicts: ChangeLog htdocs/comm/propal.php htdocs/ecm/tpl/builddatabase.tpl.php htdocs/fourn/commande/liste.php htdocs/product/admin/product_tools.php
This commit is contained in:
commit
37b0780523
10
ChangeLog
10
ChangeLog
@ -128,7 +128,7 @@ parameter. All methods addline in this case were modified to remove this paramet
|
|||||||
|
|
||||||
5) Property ->tel on objects is now ->phone
|
5) Property ->tel on objects is now ->phone
|
||||||
|
|
||||||
|
|
||||||
***** ChangeLog for 3.4.2 compared to 3.4.1 *****
|
***** ChangeLog for 3.4.2 compared to 3.4.1 *****
|
||||||
Fix: field's problem into company's page (RIB)
|
Fix: field's problem into company's page (RIB)
|
||||||
Fix: Document cerfa doesn't contained firstname & lastname from donator
|
Fix: Document cerfa doesn't contained firstname & lastname from donator
|
||||||
@ -140,6 +140,13 @@ Fix: [ bug #1142 ] Set paiement on invoice (PGSql)
|
|||||||
Fix: [ bug #1145 ] Agenda button list type do not display
|
Fix: [ bug #1145 ] Agenda button list type do not display
|
||||||
Fix: [ bug #1148 ] Product consomation : supplier order bad status
|
Fix: [ bug #1148 ] Product consomation : supplier order bad status
|
||||||
Fix: [ bug #1159 ] Commercial search "other" give p.note do not exists
|
Fix: [ bug #1159 ] Commercial search "other" give p.note do not exists
|
||||||
|
Fix: [ bug #1174 ] Product translated description not good into PDF
|
||||||
|
Fix: [ bug #1163 ] SQL Error when searching for supplier orders
|
||||||
|
Fix: [ bug #1162 ] Translaction for morning and afternoon
|
||||||
|
Fix: [ bug #1161 ] Search on product label
|
||||||
|
Fix: [ bug #1075 ] POS module doesn't decrement stock of products in delayed payment mode.
|
||||||
|
Fix: [ bug #1171 ] Documents lost in interventions after validating
|
||||||
|
Fix: fix unsubscribe URL into mailing when sending manually (not by script)
|
||||||
|
|
||||||
***** ChangeLog for 3.4.1 compared to 3.4.0 *****
|
***** ChangeLog for 3.4.1 compared to 3.4.0 *****
|
||||||
Fix: Display buying price on line edit when no supplier price is defined
|
Fix: Display buying price on line edit when no supplier price is defined
|
||||||
@ -170,7 +177,6 @@ Fix: there was no escaping on filter fields in supplier product list
|
|||||||
Fix: bugs on margin reports and better margin calculation on credit notes
|
Fix: bugs on margin reports and better margin calculation on credit notes
|
||||||
Qual: Add travis-ci integration
|
Qual: Add travis-ci integration
|
||||||
|
|
||||||
|
|
||||||
***** ChangeLog for 3.4 compared to 3.3.* *****
|
***** ChangeLog for 3.4 compared to 3.3.* *****
|
||||||
For users:
|
For users:
|
||||||
- New: Can use ODS templates as document templates.
|
- New: Can use ODS templates as document templates.
|
||||||
|
|||||||
@ -978,7 +978,7 @@ else if ($action == 'updateligne' && $user->rights->propal->creer && GETPOST('sa
|
|||||||
$error++;
|
$error++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! $error)
|
if (! $error)
|
||||||
{
|
{
|
||||||
$result = $object->updateline(
|
$result = $object->updateline(
|
||||||
|
|||||||
@ -957,7 +957,17 @@ function pdf_getlinedesc($object,$i,$outputlangs,$hideref=0,$hidedesc=0,$issuppl
|
|||||||
if (! empty($conf->global->MAIN_MULTILANGS) && ($outputlangs->defaultlang != $langs->defaultlang))
|
if (! empty($conf->global->MAIN_MULTILANGS) && ($outputlangs->defaultlang != $langs->defaultlang))
|
||||||
{
|
{
|
||||||
if (! empty($prodser->multilangs[$outputlangs->defaultlang]["label"]) && $label == $prodser->label) $label=$prodser->multilangs[$outputlangs->defaultlang]["label"];
|
if (! empty($prodser->multilangs[$outputlangs->defaultlang]["label"]) && $label == $prodser->label) $label=$prodser->multilangs[$outputlangs->defaultlang]["label"];
|
||||||
if (! empty($prodser->multilangs[$outputlangs->defaultlang]["description"]) && $desc == $prodser->description) $desc=$prodser->multilangs[$outputlangs->defaultlang]["description"];
|
|
||||||
|
//Manage HTML entities description test
|
||||||
|
//Cause $prodser->description is store with htmlentities but $desc no
|
||||||
|
$needdesctranslation=false;
|
||||||
|
if (!empty($desc) && dol_textishtml($desc) && !empty($prodser->description) && dol_textishtml($prodser->description)) {
|
||||||
|
$needdesctranslation=(strpos(dol_html_entity_decode($desc,ENT_QUOTES | ENT_HTML401),dol_html_entity_decode($prodser->description,ENT_QUOTES | ENT_HTML401))!==false);
|
||||||
|
} else {
|
||||||
|
$needdesctranslation=($desc == $prodser->description);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! empty($prodser->multilangs[$outputlangs->defaultlang]["description"]) && ($needdesctranslation)) $desc=$prodser->multilangs[$outputlangs->defaultlang]["description"];
|
||||||
if (! empty($prodser->multilangs[$outputlangs->defaultlang]["note"]) && $note == $prodser->note) $note=$prodser->multilangs[$outputlangs->defaultlang]["note"];
|
if (! empty($prodser->multilangs[$outputlangs->defaultlang]["note"]) && $note == $prodser->note) $note=$prodser->multilangs[$outputlangs->defaultlang]["note"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -51,7 +51,9 @@ if (isset($action) && ! empty($action))
|
|||||||
require DOL_DOCUMENT_ROOT . '/ecm/class/ecmdirectory.class.php';
|
require DOL_DOCUMENT_ROOT . '/ecm/class/ecmdirectory.class.php';
|
||||||
|
|
||||||
$ecmdirstatic = new EcmDirectory($db);
|
$ecmdirstatic = new EcmDirectory($db);
|
||||||
|
$ecmdirtmp = new EcmDirectory($db);
|
||||||
|
|
||||||
|
// This part of code is same than into file index.php for action refreshmanual TODO Remove duplicate
|
||||||
clearstatcache();
|
clearstatcache();
|
||||||
|
|
||||||
$diroutputslash=str_replace('\\', '/', $conf->$element->dir_output);
|
$diroutputslash=str_replace('\\', '/', $conf->$element->dir_output);
|
||||||
@ -129,7 +131,6 @@ if (isset($action) && ! empty($action))
|
|||||||
|
|
||||||
if ($fk_parent >= 0)
|
if ($fk_parent >= 0)
|
||||||
{
|
{
|
||||||
$ecmdirtmp=new EcmDirectory($db);
|
|
||||||
$ecmdirtmp->ref = 'NOTUSEDYET';
|
$ecmdirtmp->ref = 'NOTUSEDYET';
|
||||||
$ecmdirtmp->label = dol_basename($dirdesc['fullname']);
|
$ecmdirtmp->label = dol_basename($dirdesc['fullname']);
|
||||||
$ecmdirtmp->description = '';
|
$ecmdirtmp->description = '';
|
||||||
@ -163,7 +164,21 @@ if (isset($action) && ! empty($action))
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Loop now on each sql tree to check if dir exists
|
||||||
|
foreach($sqltree as $dirdesc) // Loop on each sqltree to check dir is on disk
|
||||||
|
{
|
||||||
|
$dirtotest=$conf->$element->dir_output.'/'.$dirdesc['fullrelativename'];
|
||||||
|
if (! dol_is_dir($dirtotest))
|
||||||
|
{
|
||||||
|
$mesg.=$dirtotest." not found onto disk. We delete from database dir with id=".$dirdesc['id']."<br>\n";
|
||||||
|
$ecmdirtmp->id=$dirdesc['id'];
|
||||||
|
$ecmdirtmp->delete($user,'databaseonly');
|
||||||
|
//exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$sql="UPDATE ".MAIN_DB_PREFIX."ecm_directories set cachenbofdoc = -1 WHERE cachenbofdoc < 0"; // If pb into cahce counting, we set to value -1 = "unknown"
|
$sql="UPDATE ".MAIN_DB_PREFIX."ecm_directories set cachenbofdoc = -1 WHERE cachenbofdoc < 0"; // If pb into cahce counting, we set to value -1 = "unknown"
|
||||||
|
dol_syslog("sql = ".$sql);
|
||||||
$db->query($sql);
|
$db->query($sql);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -151,7 +151,7 @@ class EcmDirectory // extends CommonObject
|
|||||||
$dir=$conf->ecm->dir_output.'/'.$this->getRelativePath();
|
$dir=$conf->ecm->dir_output.'/'.$this->getRelativePath();
|
||||||
$result=dol_mkdir($dir);
|
$result=dol_mkdir($dir);
|
||||||
if ($result < 0) { $error++; $this->error="ErrorFailedToCreateDir"; }
|
if ($result < 0) { $error++; $this->error="ErrorFailedToCreateDir"; }
|
||||||
|
|
||||||
// Appel des triggers
|
// Appel des triggers
|
||||||
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
|
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
|
||||||
$interface=new Interfaces($this->db);
|
$interface=new Interfaces($this->db);
|
||||||
@ -325,21 +325,23 @@ class EcmDirectory // extends CommonObject
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete object on database and on disk
|
* Delete object on database and/or on disk
|
||||||
*
|
*
|
||||||
* @param User $user User that delete
|
* @param User $user User that delete
|
||||||
|
* @param int $mode 'all'=delete all, 'databaseonly'=only database entry, 'fileonly' (not implemented)
|
||||||
* @return int <0 if KO, >0 if OK
|
* @return int <0 if KO, >0 if OK
|
||||||
*/
|
*/
|
||||||
function delete($user)
|
function delete($user, $mode='all')
|
||||||
{
|
{
|
||||||
global $conf, $langs;
|
global $conf, $langs;
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||||
|
|
||||||
$error=0;
|
$error=0;
|
||||||
|
$result=0;
|
||||||
|
|
||||||
$relativepath=$this->getRelativePath(1); // Ex: dir1/dir2/dir3
|
if ($mode != 'databaseonly') $relativepath=$this->getRelativePath(1); // Ex: dir1/dir2/dir3
|
||||||
|
|
||||||
dol_syslog(get_class($this)."::delete remove directory ".$relativepath);
|
dol_syslog(get_class($this)."::delete remove directory id=".$this->id." mode=".$mode.(($mode == 'databaseonly')?'':' relativepath='.$relativepath));
|
||||||
|
|
||||||
$this->db->begin();
|
$this->db->begin();
|
||||||
|
|
||||||
@ -356,8 +358,11 @@ class EcmDirectory // extends CommonObject
|
|||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
|
|
||||||
$file = $conf->ecm->dir_output . "/" . $relativepath;
|
if ($mode != 'databaseonly')
|
||||||
$result=@dol_delete_dir($file);
|
{
|
||||||
|
$file = $conf->ecm->dir_output . "/" . $relativepath;
|
||||||
|
$result=@dol_delete_dir($file);
|
||||||
|
}
|
||||||
|
|
||||||
if ($result || ! @is_dir(dol_osencode($file)))
|
if ($result || ! @is_dir(dol_osencode($file)))
|
||||||
{
|
{
|
||||||
|
|||||||
@ -206,7 +206,10 @@ if ($action == 'confirm_deletesection' && GETPOST('confirm') == 'yes')
|
|||||||
// Refresh directory view
|
// Refresh directory view
|
||||||
if ($action == 'refreshmanual')
|
if ($action == 'refreshmanual')
|
||||||
{
|
{
|
||||||
clearstatcache();
|
$ecmdirtmp = new EcmDirectory($db);
|
||||||
|
|
||||||
|
// This part of code is same than into file ecm/ajax/ecmdatabase.php TODO Remove duplicate
|
||||||
|
clearstatcache();
|
||||||
|
|
||||||
$diroutputslash=str_replace('\\','/',$conf->ecm->dir_output);
|
$diroutputslash=str_replace('\\','/',$conf->ecm->dir_output);
|
||||||
$diroutputslash.='/';
|
$diroutputslash.='/';
|
||||||
@ -269,7 +272,7 @@ if ($action == 'refreshmanual')
|
|||||||
//break; // We found parent, we can stop the while loop
|
//break; // We found parent, we can stop the while loop
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
dol_syslog("No");
|
dol_syslog("No");
|
||||||
//print "No<br>\n";
|
//print "No<br>\n";
|
||||||
}
|
}
|
||||||
@ -282,7 +285,6 @@ if ($action == 'refreshmanual')
|
|||||||
|
|
||||||
if ($fk_parent >= 0)
|
if ($fk_parent >= 0)
|
||||||
{
|
{
|
||||||
$ecmdirtmp=new EcmDirectory($db);
|
|
||||||
$ecmdirtmp->ref = 'NOTUSEDYET';
|
$ecmdirtmp->ref = 'NOTUSEDYET';
|
||||||
$ecmdirtmp->label = dol_basename($dirdesc['fullname']);
|
$ecmdirtmp->label = dol_basename($dirdesc['fullname']);
|
||||||
$ecmdirtmp->description = '';
|
$ecmdirtmp->description = '';
|
||||||
@ -316,6 +318,19 @@ if ($action == 'refreshmanual')
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Loop now on each sql tree to check if dir exists
|
||||||
|
foreach($sqltree as $dirdesc) // Loop on each sqltree to check dir is on disk
|
||||||
|
{
|
||||||
|
$dirtotest=$conf->ecm->dir_output.'/'.$dirdesc['fullrelativename'];
|
||||||
|
if (! dol_is_dir($dirtotest))
|
||||||
|
{
|
||||||
|
$mesg.=$dirtotest." not found onto disk. We delete from database dir with id=".$dirdesc['id']."<br>\n";
|
||||||
|
$ecmdirtmp->id=$dirdesc['id'];
|
||||||
|
$ecmdirtmp->delete($user,'databaseonly');
|
||||||
|
//exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$sql="UPDATE ".MAIN_DB_PREFIX."ecm_directories set cachenbofdoc = -1 WHERE cachenbofdoc < 0"; // If pb into cahce counting, we set to value -1 = "unknown"
|
$sql="UPDATE ".MAIN_DB_PREFIX."ecm_directories set cachenbofdoc = -1 WHERE cachenbofdoc < 0"; // If pb into cahce counting, we set to value -1 = "unknown"
|
||||||
dol_syslog("sql = ".$sql);
|
dol_syslog("sql = ".$sql);
|
||||||
$db->query($sql);
|
$db->query($sql);
|
||||||
|
|||||||
@ -50,7 +50,15 @@ $(document).ready(function() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
$('#refreshbutton').click( function() {
|
$('#refreshbutton').click( function() {
|
||||||
ecmBuildDatabase();
|
$.pleaseBePatient("<?php echo $langs->trans('PleaseBePatient'); ?>");
|
||||||
|
$.getJSON( "<?php echo DOL_URL_ROOT . '/ecm/ajax/ecmdatabase.php'; ?>", {
|
||||||
|
action: "build",
|
||||||
|
element: "ecm"
|
||||||
|
},
|
||||||
|
function(response) {
|
||||||
|
$.unblockUI();
|
||||||
|
location.href="<?php echo $_SERVER['PHP_SELF']; ?>";
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -78,17 +86,5 @@ function loadandshowpreview(filedirname,section)
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
ecmBuildDatabase = function() {
|
|
||||||
$.pleaseBePatient("<?php echo $langs->trans('PleaseBePatient'); ?>");
|
|
||||||
$.getJSON( "<?php echo DOL_URL_ROOT . '/ecm/ajax/ecmdatabase.php'; ?>", {
|
|
||||||
action: "build",
|
|
||||||
element: "ecm"
|
|
||||||
},
|
|
||||||
function(response) {
|
|
||||||
$.unblockUI();
|
|
||||||
location.href="<?php echo $_SERVER['PHP_SELF']; ?>";
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<!-- END PHP TEMPLATE ecm/tpl/builddatabase.tpl.php -->
|
<!-- END PHP TEMPLATE ecm/tpl/builddatabase.tpl.php -->
|
||||||
|
|||||||
@ -109,16 +109,17 @@ if ($sttc)
|
|||||||
}
|
}
|
||||||
if ($sall)
|
if ($sall)
|
||||||
{
|
{
|
||||||
$sql .= natural_search(array('cf.ref', 'cf.note_public'), $sall);
|
$sql .= natural_search(array('cf.ref', 'cf.note_public', 'cf.note_private'), $sall);
|
||||||
}
|
}
|
||||||
if ($socid) $sql.= " AND s.rowid = ".$socid;
|
if ($socid) $sql.= " AND s.rowid = ".$socid;
|
||||||
|
|
||||||
if (GETPOST('statut'))
|
if (GETPOST('statut'))
|
||||||
{
|
{
|
||||||
$sql .= " AND fk_statut =".GETPOST('statut');
|
$sql .= " AND fk_statut =".GETPOST('statut','int');
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql .= " ORDER BY $sortfield $sortorder " . $db->plimit($conf->liste_limit+1, $offset);
|
$sql.= " ORDER BY $sortfield $sortorder ";
|
||||||
|
$sql.= $db->plimit($conf->liste_limit+1, $offset);
|
||||||
|
|
||||||
$resql = $db->query($sql);
|
$resql = $db->query($sql);
|
||||||
if ($resql)
|
if ($resql)
|
||||||
|
|||||||
@ -257,6 +257,8 @@ Seconds=Seconds
|
|||||||
Today=Today
|
Today=Today
|
||||||
Yesterday=Yesterday
|
Yesterday=Yesterday
|
||||||
Tomorrow=Tomorrow
|
Tomorrow=Tomorrow
|
||||||
|
Morning=Morning
|
||||||
|
Afternoon=Afternoon
|
||||||
Quadri=Quadri
|
Quadri=Quadri
|
||||||
MonthOfDay=Month of the day
|
MonthOfDay=Month of the day
|
||||||
HourShort=H
|
HourShort=H
|
||||||
|
|||||||
@ -257,6 +257,8 @@ Seconds=Secondes
|
|||||||
Today=Aujourd'hui
|
Today=Aujourd'hui
|
||||||
Yesterday=Hier
|
Yesterday=Hier
|
||||||
Tomorrow=Demain
|
Tomorrow=Demain
|
||||||
|
Morning=Matin
|
||||||
|
Afternoon=Après-midi
|
||||||
Quadri=Trimestre
|
Quadri=Trimestre
|
||||||
MonthOfDay=Mois du jour
|
MonthOfDay=Mois du jour
|
||||||
HourShort=H
|
HourShort=H
|
||||||
|
|||||||
@ -214,6 +214,7 @@ if ($month > 0) {
|
|||||||
$sql.= " AND ".$datePrint." BETWEEN '".$db->idate($start)."' AND '".$db->idate($end)."'";
|
$sql.= " AND ".$datePrint." BETWEEN '".$db->idate($start)."' AND '".$db->idate($end)."'";
|
||||||
}
|
}
|
||||||
if ($sref) $sql.= " AND ".$doc_number." LIKE '%".$sref."%'";
|
if ($sref) $sql.= " AND ".$doc_number." LIKE '%".$sref."%'";
|
||||||
|
if ($sprod_fulldescr) $sql.= " AND (d.description LIKE '%".$sprod_fulldescr."%' OR p.label LIKE '%".$sprod_fulldescr."%')";
|
||||||
$sql.= $db->order($sortfield,$sortorder);
|
$sql.= $db->order($sortfield,$sortorder);
|
||||||
$sql.= $db->plimit($limit + 1, $offset);
|
$sql.= $db->plimit($limit + 1, $offset);
|
||||||
|
|
||||||
@ -249,7 +250,7 @@ print $formother->select_month($month?$month:-1,'month',1);
|
|||||||
$formother->select_year($year?$year:-1,'year',1, 20, 1);
|
$formother->select_year($year?$year:-1,'year',1, 20, 1);
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print '<td class="liste_titre" align="left">';
|
print '<td class="liste_titre" align="left">';
|
||||||
print '<input class="flat" type="text" name="sprod_fulldescr" size="15" value="'.$sprod_fulldescr.'">';
|
print '<input class="flat" type="text" name="sprod_fulldescr" size="15" value="'.dol_escape_htmltag($sprod_fulldescr).'">';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print '<td class="liste_titre" align="right">';
|
print '<td class="liste_titre" align="right">';
|
||||||
print '<input type="image" class="liste_titre" name="button_search" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/search.png" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">';
|
print '<input type="image" class="liste_titre" name="button_search" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/search.png" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">';
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user