2
0
forked from Wavyzz/dolibarr

Merge remote-tracking branch 'origin/3.7' into develop

Conflicts:
	htdocs/commande/card.php
	htdocs/commande/class/commande.class.php
	htdocs/commande/list.php
	htdocs/core/class/notify.class.php
	htdocs/core/login/functions_dolibarr.php
	htdocs/exports/export.php
	htdocs/langs/en_US/admin.lang
This commit is contained in:
Laurent Destailleur
2015-04-01 16:33:39 +02:00
23 changed files with 282 additions and 210 deletions

View File

@@ -28,9 +28,6 @@ Note: Prerequisites to build autoexe DoliWamp package:
recommanded), open file build/exe/doliwamp.iss and click on button "Compile".
The .exe file will be build into directory build.
- To build a translaction package, launch the script
> perl makepack-dolibarrlang.pl
- To build a theme package, launch the script
> perl makepack-dolibarrtheme.pl

View File

@@ -2,7 +2,7 @@
#----------------------------------------------------------------------------
# \file build/makepack-dolibarr.pl
# \brief Dolibarr package builder (tgz, zip, rpm, deb, exe, aps)
# \author (c)2004-2014 Laurent Destailleur <eldy@users.sourceforge.net>
# \author (c)2004-2015 Laurent Destailleur <eldy@users.sourceforge.net>
#
# This is list of constant you can set to have generated packages moved into a specific dir:
#DESTIBETARC='/media/HDDATA1_LD/Mes Sites/Web/Dolibarr/dolibarr.org/files/lastbuild'
@@ -15,8 +15,12 @@
use Cwd;
# Change this to defined target for option 98 and 99
$PROJECT="dolibarr";
$RPMSUBVERSION="auto"; # auto use value found into BUILD
$PUBLISHSTABLE="eldy,dolibarr\@frs.sourceforge.net:/home/frs/project/dolibarr";
$PUBLISHBETARC="ldestailleur\@asso.dolibarr.org:/home/dolibarr/dolibarr.org/httpdocs/files";
@LISTETARGET=("TGZ","ZIP","RPM_GENERIC","RPM_FEDORA","RPM_MANDRIVA","RPM_OPENSUSE","DEB","APS","EXEDOLIWAMP","SNAPSHOT"); # Possible packages
%REQUIREMENTPUBLISH=(
@@ -41,6 +45,7 @@ $RPMSUBVERSION="auto"; # auto use value found into BUILD
"makensis.exe"=>"NSIS"
);
$RPMSUBVERSION="auto"; # auto use value found into BUILD
if (-d "/usr/src/redhat") { $RPMDIR="/usr/src/redhat"; } # redhat
if (-d "/usr/src/packages") { $RPMDIR="/usr/src/packages"; } # opensuse
if (-d "/usr/src/RPM") { $RPMDIR="/usr/src/RPM"; } # mandrake
@@ -59,8 +64,6 @@ $DIR||='.'; $DIR =~ s/([^\/\\])[\\\/]+$/$1/;
$SOURCE="$DIR/..";
$DESTI="$SOURCE/build";
$PUBLISHSTABLE="eldy,dolibarr\@frs.sourceforge.net:/home/frs/project/dolibarr";
$PUBLISHBETARC="ldestailleur\@asso.dolibarr.org:/home/dolibarr/dolibarr.org/files";
if (! $ENV{"DESTIBETARC"} || ! $ENV{"DESTISTABLE"})
{
print "Error: Missing environment variables.\n";
@@ -213,9 +216,9 @@ else {
printf(" %2d - %-14s (%s)\n",$cpt,$target,"Need ".$REQUIREMENTTARGET{$target});
}
$cpt=98;
printf(" %2d - %-14s (%s)\n",$cpt,"ASSO (publish)","Need ".join(",",values %REQUIREMENTPUBLISH));
printf(" %2d - %-14s (%s)\n",$cpt,"ASSO (publish)","Need ".$REQUIREMENTPUBLISH{"ASSO"});
$cpt=99;
printf(" %2d - %-14s (%s)\n",$cpt,"SF (publish)","Need ".join(",",values %REQUIREMENTPUBLISH));
printf(" %2d - %-14s (%s)\n",$cpt,"SF (publish)","Need ".$REQUIREMENTPUBLISH{"SF"});
# Ask which target to build
print "Choose one target number or several separated with space (0 - ".$cpt."): ";
@@ -1049,9 +1052,16 @@ if ($nboftargetok) {
if (! $filesize) { next; }
print "\n";
print "Publish file ".$file." to ".$filestoscan{$file}."\n";
if ($target eq 'SF') {
$destFolder="$NEWPUBLISH/$filestoscan{$file}/".$MAJOR.'.'.$MINOR.'.'.$BUILD;
print "Publish file ".$file." to $NEWPUBLISH/".$filestoscan{$file}."\n";
}
else
{
$destFolder="$NEWPUBLISH";
print "Publish file ".$file." to $NEWPUBLISH\n";
}
# mkdir
#my $ssh = Net::SSH::Perl->new("frs.sourceforge.net");

View File

@@ -8,7 +8,7 @@ This files describe steps made by Dolibarr packaging team to make a
beta version of Dolibarr, step by step.
- Check all files are commited.
- Update version/info in /ChangeLog
- Update version/info in ChangeLog. To generate a changelog, you can do "git log x.y.z..HEAD --no-merges --pretty=short --oneline | sed -e "s/^[0-9a-z]* //" | grep -e '^FIXED\|NEW'"
- Update version number with x.y.z-w in htdocs/filefunc.inc.php
- Update version number with x.y.z-w in build/debian/changelog
- Update version number with x.y.z-w in build/rpm/*.spec
@@ -17,10 +17,11 @@ beta version of Dolibarr, step by step.
- Create a branch (x.y).
- Run makepack-dolibarr.pl to generate all packages.
- Move build files into www.dolibarr.org web site
(/home/dolibarr/wwwroot/files/lastbuild).
- Post a news on dolibarr.org/dolibarr.fr
- Post a news on dolibarr.org/dolibarr.fr + social networks
- Send mail on mailings-list
@@ -35,14 +36,16 @@ complete release of Dolibarr, step by step.
- Update version number with x.y.z in build/rpm/*.spec
- Commit all changes.
- Build Dolibarr and DoliWamp packages with makepack-dolibarr.pl
- Run makepack-dolibarr.pl to generate all packages.
- Check content of built packages.
- Move build files into www.dolibarr.org web site
(/home/dolibarr/wwwroot/files/stable).
- Run makepack-dolibarr.pl again with option to publish files on
sourceforge. This will also add official tag.
- Edit symbolic links in directory "/home/dolibarr/wwwroot/files/stable/xxx"
on server to point to new files (used by some web sites).
- Post a news on dolibarr.org/dolibarr.fr + social networks
- Send mail on mailings-list
- Send news on OpenSource web sites (if major beta or release)

View File

@@ -421,7 +421,8 @@ class ActionComm extends CommonObject
$resql=$this->db->query($sql);
if ($resql)
{
if ($this->db->num_rows($resql))
$num=$this->db->num_rows($resql);
if ($num)
{
$obj = $this->db->fetch_object($resql);
@@ -477,13 +478,15 @@ class ActionComm extends CommonObject
$this->elementtype = $obj->elementtype;
}
$this->db->free($resql);
return 1;
}
else
{
$this->error=$this->db->lasterror();
return -1;
}
return $num;
}

View File

@@ -144,7 +144,7 @@ if (empty($reshook))
// Reopen a closed order
else if ($action == 'reopen' && $user->rights->commande->creer)
{
if ($object->statut == Commande::STATUS_CLOSED)
if ($object->statut == STATUS_CANCELED || $object->statut == Commande::STATUS_CLOSED)
{
$result = $object->set_reopen($user);
if ($result > 0)
@@ -1269,7 +1269,7 @@ if ($action == 'create' && $user->rights->commande->creer)
$demand_reason_id = (!empty($objectsrc->demand_reason_id)?$objectsrc->demand_reason_id:(!empty($soc->demand_reason_id)?$soc->demand_reason_id:0));
$remise_percent = (!empty($objectsrc->remise_percent)?$objectsrc->remise_percent:(!empty($soc->remise_percent)?$soc->remise_percent:0));
$remise_absolue = (!empty($objectsrc->remise_absolue)?$objectsrc->remise_absolue:(!empty($soc->remise_absolue)?$soc->remise_absolue:0));
$dateinvoice = empty($conf->global->MAIN_AUTOFILL_DATE)?-1:'';
$dateorder = empty($conf->global->MAIN_AUTOFILL_DATE_ORDER)?-1:'';
$datedelivery = (! empty($objectsrc->date_livraison) ? $objectsrc->date_livraison : '');
@@ -1290,7 +1290,7 @@ if ($action == 'create' && $user->rights->commande->creer)
$demand_reason_id = $soc->demand_reason_id;
$remise_percent = $soc->remise_percent;
$remise_absolue = 0;
$dateinvoice = empty($conf->global->MAIN_AUTOFILL_DATE)?-1:'';
$dateorder = empty($conf->global->MAIN_AUTOFILL_DATE_ORDER)?-1:'';
$projectid = 0;
}
$absolute_discount=$soc->getAvailableDiscounts();
@@ -1358,7 +1358,8 @@ if ($action == 'create' && $user->rights->commande->creer)
}
// Date
print '<tr><td class="fieldrequired">' . $langs->trans('Date') . '</td><td colspan="2">';
$form->select_date('', 're', '', '', '', "crea_commande", 1, 1);
//$form->select_date($dateorder, 're', '', '', '', "crea_commande", 1, 1);
$form->select_date('', 're', '', '', '', "crea_commande", 1, 1); // Always autofill date with current date
print '</td></tr>';
// Date de livraison
@@ -1366,7 +1367,7 @@ if ($action == 'create' && $user->rights->commande->creer)
if (empty($datedelivery))
{
if (! empty($conf->global->DATE_LIVRAISON_WEEK_DELAY)) $datedelivery = time() + ((7*$conf->global->DATE_LIVRAISON_WEEK_DELAY) * 24 * 60 * 60);
else $datedelivery=empty($conf->global->MAIN_AUTOFILL_DATE)?-1:'';
else $datedelivery=empty($conf->global->MAIN_AUTOFILL_DATE_DELIVERY)?-1:'';
}
$form->select_date($datedelivery, 'liv_', '', '', '', "crea_commande", 1, 1);
print "</td></tr>";
@@ -2209,7 +2210,7 @@ if ($action == 'create' && $user->rights->commande->creer)
}
// Reopen a closed order
if ($object->statut == Commande::STATUS_CLOSED && $user->rights->commande->creer) {
if (($object->statut == Commande::STATUS_CLOSED || $object->statut == Commande::STATUS_CANCELED) && $user->rights->commande->creer) {
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?id=' . $object->id . '&amp;action=reopen">' . $langs->trans('ReOpen') . '</a></div>';
}

View File

@@ -60,6 +60,7 @@ class Commande extends CommonOrder
var $ref_int;
var $contactid;
var $fk_project;
/**
* Status of the order. Check the following constants:
* - STATUS_CANCELED
@@ -68,7 +69,7 @@ class Commande extends CommonOrder
* - STATUS_CLOSED
* @var int
*/
var $statut;
var $statut; // -1=Canceled, 0=Draft, 1=Validated, (2=Accepted/On process not managed for customer orders), 3=Closed (Delivered=Sent/Received, billed or not)
var $facturee; // deprecated
var $billed; // billed or not
@@ -147,7 +148,6 @@ class Commande extends CommonOrder
var $nbtodo;
var $nbtodolate;
/**
* ERR Not engouch stock
*/
@@ -338,7 +338,7 @@ class Commande extends CommonOrder
// Rename directory if dir was a temporary ref
if (preg_match('/^[\(]?PROV/i', $this->ref))
{
// On renomme repertoire ($this->ref = ancienne ref, $numfa = nouvelle ref)
// On renomme repertoire ($this->ref = ancienne ref, $num = nouvelle ref)
// in order not to lose the attachments
$oldref = dol_sanitizeFileName($this->ref);
$newref = dol_sanitizeFileName($num);
@@ -477,7 +477,7 @@ class Commande extends CommonOrder
global $conf,$langs;
$error=0;
if ($this->statut != self::STATUS_CLOSED)
if ($this->statut != self::STATUS_CANCELED && $this->statut != self::STATUS_CLOSED)
{
dol_syslog(get_class($this)."::set_reopen order has not status closed", LOG_WARNING);
return 0;
@@ -501,7 +501,7 @@ class Commande extends CommonOrder
else
{
$error++;
$this->error=$this->db->error();
$this->error=$this->db->lasterror();
dol_print_error($this->db);
}

View File

@@ -7,6 +7,7 @@
* Copyright (C) 2013 Christophe Battarel <christophe.battarel@altairis.fr>
* Copyright (C) 2013 Cédric Salvador <csalvador@gpcsolutions.fr>
* Copyright (C) 2015 Frederic France <frederic.france@free.fr>
* Copyright (C) 2015 Marcos García <marcosgdf@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -44,7 +45,7 @@ $orderyear=GETPOST("orderyear","int");
$ordermonth=GETPOST("ordermonth","int");
$deliveryyear=GETPOST("deliveryyear","int");
$deliverymonth=GETPOST("deliverymonth","int");
$search_ref=GETPOST('search_ref','alpha');
$search_ref=GETPOST('search_ref','alpha')!=''?GETPOST('search_ref','alpha'):GETPOST('sref','alpha');
$search_ref_customer=GETPOST('search_ref_customer','alpha');
$search_company=GETPOST('search_company','alpha');
$sall=GETPOST('sall');
@@ -114,7 +115,7 @@ $help_url="EN:Module_Customers_Orders|FR:Module_Commandes_Clients|ES:Módulo_Ped
llxHeader('',$langs->trans("Orders"),$help_url);
$sql = 'SELECT s.nom as name, s.rowid as socid, s.client, s.code_client, c.rowid, c.ref, c.total_ht, c.tva as total_tva, c.total_ttc, c.ref_client,';
$sql.= ' c.date_valid, c.date_commande, c.note_private, c.date_livraison, c.fk_statut, c.facture as facturee';
$sql.= ' c.date_valid, c.date_commande, c.note_private, c.date_livraison as date_delivery, c.fk_statut, c.facture as facturee';
$sql.= ' FROM '.MAIN_DB_PREFIX.'societe as s';
$sql.= ', '.MAIN_DB_PREFIX.'commande as c';
// We'll need this table joined to the select in order to filter by sale
@@ -430,7 +431,7 @@ if ($resql)
// warning late icon
print '<td style="min-width: 20px" class="nobordernopadding nowrap">';
if (($objp->fk_statut > 0) && ($objp->fk_statut < 3) && max($db->jdate($objp->date_commande),$db->jdate($objp->date_livraison)) < ($now - $conf->commande->client->warning_delay))
if (($objp->fk_statut > 0) && ($objp->fk_statut < 3) && max($db->jdate($objp->date_commande),$db->jdate($objp->date_delivery)) < ($now - $conf->commande->client->warning_delay))
print img_picto($langs->trans("Late"),"warning");
if(!empty($objp->note_private))
{
@@ -482,7 +483,7 @@ if ($resql)
// Delivery date
print '<td align="center">';
print dol_print_date($db->jdate($objp->date_livraison), 'day');
print dol_print_date($db->jdate($objp->date_delivery), 'day');
print '</td>';
// Amount HT

View File

@@ -132,9 +132,9 @@ if (($action == 'send' || $action == 'relance') && ! $_POST['addfile'] && ! $_PO
$replyto = $_POST['replytoname']. ' <' . $_POST['replytomail'].'>';
$message = $_POST['message'];
$sendtobcc= GETPOST('sendtoccc');
if ($mode == 'emailfromproposal') $sendtobcc = (empty($conf->global->MAIN_MAIL_AUTOCOPY_PROPOSAL_TO)?'':$conf->global->MAIN_MAIL_AUTOCOPY_PROPOSAL_TO);
if ($mode == 'emailfromorder') $sendtobcc = (empty($conf->global->MAIN_MAIL_AUTOCOPY_ORDER_TO)?'':$conf->global->MAIN_MAIL_AUTOCOPY_ORDER_TO);
if ($mode == 'emailfrominvoice') $sendtobcc = (empty($conf->global->MAIN_MAIL_AUTOCOPY_INVOICE_TO)?'':$conf->global->MAIN_MAIL_AUTOCOPY_INVOICE_TO);
if ($mode == 'emailfromproposal') $sendtobcc .= (empty($conf->global->MAIN_MAIL_AUTOCOPY_PROPOSAL_TO) ? '' : (($sendtobcc?", ":"").$conf->global->MAIN_MAIL_AUTOCOPY_PROPOSAL_TO));
if ($mode == 'emailfromorder') $sendtobcc .= (empty($conf->global->MAIN_MAIL_AUTOCOPY_ORDER_TO) ? '' : (($sendtobcc?", ":"").$conf->global->MAIN_MAIL_AUTOCOPY_ORDER_TO));
if ($mode == 'emailfrominvoice') $sendtobcc .= (empty($conf->global->MAIN_MAIL_AUTOCOPY_INVOICE_TO) ? '' : (($sendtobcc?", ":"").$conf->global->MAIN_MAIL_AUTOCOPY_INVOICE_TO));
$deliveryreceipt = $_POST['deliveryreceipt'];

View File

@@ -805,7 +805,7 @@ class ExtraFields
$sqlwhere.= ' WHERE 1';
}
if (in_array($InfoFieldList[0],array('tablewithentity'))) $sqlwhere.= ' AND entity = '.$conf->entity; // Some tables may have field, some other not. For the moment we disable it.
//$sql.=preg_replace('/^ AND /','',$sqlwhere);
$sql.=$sqlwhere;
//print $sql;
dol_syslog(get_class($this).'::showInputField type=sellist', LOG_DEBUG);

View File

@@ -211,7 +211,10 @@ class FormActions
{
$tmpa=dol_getdate($action->datep);
$tmpb=dol_getdate($action->datef);
if ($tmpa['mday'] == $tmpb['mday'] && $tmpa['mon'] == $tmpb['mon'] && $tmpa['year'] == $tmpb['year']) print '-'.dol_print_date($action->datef,'hour');
if ($tmpa['mday'] == $tmpb['mday'] && $tmpa['mon'] == $tmpb['mon'] && $tmpa['year'] == $tmpb['year'])
{
if ($tmpa['hours'] != $tmpb['hours'] || $tmpa['minutes'] != $tmpb['minutes'] && $tmpa['seconds'] != $tmpb['seconds']) print '-'.dol_print_date($action->datef,'hour');
}
else print '-'.dol_print_date($action->datef,'dayhour');
}
print '</td>';

View File

@@ -205,6 +205,8 @@ class Notify
return 0;
}
$oldref=(empty($object->oldref)?$object->ref:$object->oldref);
$newref=(empty($object->newref)?$object->ref:$object->newref);
// Check notification per third party
$sql = "SELECT s.nom, c.email, c.rowid as cid, c.lastname, c.firstname, c.default_lang,";
@@ -249,19 +251,19 @@ class Notify
$link='/compta/facture.php?facid='.$object->id;
$dir_output = $conf->facture->dir_output;
$object_type = 'facture';
$mesg = $langs->transnoentitiesnoconv("EMailTextInvoiceValidated",$object->ref);
$mesg = $langs->transnoentitiesnoconv("EMailTextInvoiceValidated",$newref);
break;
case 'ORDER_VALIDATE':
$link='/commande/card.php?id='.$object->id;
$dir_output = $conf->commande->dir_output;
$object_type = 'order';
$mesg = $langs->transnoentitiesnoconv("EMailTextOrderValidated",$object->ref);
$mesg = $langs->transnoentitiesnoconv("EMailTextOrderValidated",$newref);
break;
case 'PROPAL_VALIDATE':
$link='/comm/propal.php?id='.$object->id;
$dir_output = $conf->propal->dir_output;
$object_type = 'propal';
$mesg = $langs->transnoentitiesnoconv("EMailTextProposalValidated",$object->ref);
$mesg = $langs->transnoentitiesnoconv("EMailTextProposalValidated",$newref);
break;
case 'FICHINTER_VALIDATE':
$link='/fichinter/card.php?id='.$object->id;
@@ -282,7 +284,7 @@ class Notify
$dir_output = $conf->fournisseur->dir_output.'/commande/';
$object_type = 'order_supplier';
$mesg = $langs->transnoentitiesnoconv("Hello").",\n\n";
$mesg.= $langs->transnoentitiesnoconv("EMailTextOrderApprovedBy",$object->ref,$user->getFullName($langs));
$mesg.= $langs->transnoentitiesnoconv("EMailTextOrderApprovedBy",$newref,$user->getFullName($langs));
$mesg.= "\n\n".$langs->transnoentitiesnoconv("Sincerely").".\n\n";
break;
case 'ORDER_SUPPLIER_REFUSE':
@@ -290,16 +292,16 @@ class Notify
$dir_output = $conf->fournisseur->dir_output.'/commande/';
$object_type = 'order_supplier';
$mesg = $langs->transnoentitiesnoconv("Hello").",\n\n";
$mesg.= $langs->transnoentitiesnoconv("EMailTextOrderRefusedBy",$object->ref,$user->getFullName($langs));
$mesg.= $langs->transnoentitiesnoconv("EMailTextOrderRefusedBy",$newref,$user->getFullName($langs));
$mesg.= "\n\n".$langs->transnoentitiesnoconv("Sincerely").".\n\n";
break;
case 'SHIPPING_VALIDATE':
$dir_output = $conf->expedition->dir_output.'/sending/';
$object_type = 'order_supplier';
$mesg = $langs->transnoentitiesnoconv("EMailTextExpeditionValidated",$object->ref);
$mesg = $langs->transnoentitiesnoconv("EMailTextExpeditionValidated",$newref);
break;
}
$ref = dol_sanitizeFileName($object->ref);
$ref = dol_sanitizeFileName($newref);
$pdf_path = $dir_output."/".$ref."/".$ref.".pdf";
if (! dol_is_file($pdf_path))
{
@@ -396,32 +398,32 @@ class Notify
$link='/compta/facture.php?facid='.$object->id;
$dir_output = $conf->facture->dir_output;
$object_type = 'facture';
$mesg = $langs->transnoentitiesnoconv("EMailTextInvoiceValidated",$object->ref);
$mesg = $langs->transnoentitiesnoconv("EMailTextInvoiceValidated",$newref);
break;
case 'ORDER_VALIDATE':
$link='/commande/card.php?id='.$object->id;
$dir_output = $conf->commande->dir_output;
$object_type = 'order';
$mesg = $langs->transnoentitiesnoconv("EMailTextOrderValidated",$object->ref);
$mesg = $langs->transnoentitiesnoconv("EMailTextOrderValidated",$newref);
break;
case 'PROPAL_VALIDATE':
$link='/comm/propal.php?id='.$object->id;
$dir_output = $conf->propal->dir_output;
$object_type = 'propal';
$mesg = $langs->transnoentitiesnoconv("EMailTextProposalValidated",$object->ref);
$mesg = $langs->transnoentitiesnoconv("EMailTextProposalValidated",$newref);
break;
case 'FICHINTER_VALIDATE':
$link='/fichinter/card.php?id='.$object->id;
$dir_output = $conf->facture->dir_output;
$object_type = 'ficheinter';
$mesg = $langs->transnoentitiesnoconv("EMailTextInterventionValidated",$object->ref);
$mesg = $langs->transnoentitiesnoconv("EMailTextInterventionValidated",$newref);
break;
case 'ORDER_SUPPLIER_VALIDATE':
$link='/fourn/commande/card.php?id='.$object->id;
$dir_output = $conf->fournisseur->dir_output.'/commande/';
$object_type = 'order_supplier';
$mesg = $langs->transnoentitiesnoconv("Hello").",\n\n";
$mesg.= $langs->transnoentitiesnoconv("EMailTextOrderValidatedBy",$object->ref,$user->getFullName($langs));
$mesg.= $langs->transnoentitiesnoconv("EMailTextOrderValidatedBy",$newref,$user->getFullName($langs));
$mesg.= "\n\n".$langs->transnoentitiesnoconv("Sincerely").".\n\n";
break;
case 'ORDER_SUPPLIER_APPROVE':
@@ -429,7 +431,15 @@ class Notify
$dir_output = $conf->fournisseur->dir_output.'/commande/';
$object_type = 'order_supplier';
$mesg = $langs->transnoentitiesnoconv("Hello").",\n\n";
$mesg.= $langs->transnoentitiesnoconv("EMailTextOrderApprovedBy",$object->ref,$user->getFullName($langs));
$mesg.= $langs->transnoentitiesnoconv("EMailTextOrderApprovedBy",$newref,$user->getFullName($langs));
$mesg.= "\n\n".$langs->transnoentitiesnoconv("Sincerely").".\n\n";
break;
case 'ORDER_SUPPLIER_APPROVE2':
$link='/fourn/commande/card.php?id='.$object->id;
$dir_output = $conf->fournisseur->dir_output.'/commande/';
$object_type = 'order_supplier';
$mesg = $langs->transnoentitiesnoconv("Hello").",\n\n";
$mesg.= $langs->transnoentitiesnoconv("EMailTextOrderApprovedBy",$newref,$user->getFullName($langs));
$mesg.= "\n\n".$langs->transnoentitiesnoconv("Sincerely").".\n\n";
break;
case 'ORDER_SUPPLIER_REFUSE':
@@ -437,16 +447,16 @@ class Notify
$dir_output = $conf->fournisseur->dir_output.'/commande/';
$object_type = 'order_supplier';
$mesg = $langs->transnoentitiesnoconv("Hello").",\n\n";
$mesg.= $langs->transnoentitiesnoconv("EMailTextOrderRefusedBy",$object->ref,$user->getFullName($langs));
$mesg.= $langs->transnoentitiesnoconv("EMailTextOrderRefusedBy",$newref,$user->getFullName($langs));
$mesg.= "\n\n".$langs->transnoentitiesnoconv("Sincerely").".\n\n";
break;
case 'SHIPPING_VALIDATE':
$dir_output = $conf->expedition->dir_output.'/sending/';
$object_type = 'order_supplier';
$mesg = $langs->transnoentitiesnoconv("EMailTextExpeditionValidated",$object->ref);
$mesg = $langs->transnoentitiesnoconv("EMailTextExpeditionValidated",$newref);
break;
}
$ref = dol_sanitizeFileName($object->ref);
$ref = dol_sanitizeFileName($newref);
$pdf_path = $dir_output."/".$ref."/".$ref.".pdf";
if (! dol_is_file($pdf_path))
{

View File

@@ -4062,9 +4062,10 @@ function dol_textishtml($msg,$option=0)
if (preg_match('/<html/i',$msg)) return true;
elseif (preg_match('/<body/i',$msg)) return true;
elseif (preg_match('/<(b|em|i)>/i',$msg)) return true;
elseif (preg_match('/<(br|div|font|img|li|span|strong|table)>/i',$msg)) return true;
elseif (preg_match('/<(br|div|font|img|li|span|strong|table)\s+[^<>\/]*>/i',$msg)) return true;
elseif (preg_match('/<(br|div|font|img|li|span|strong|table)\s+[^<>\/]*\/>/i',$msg)) return true;
elseif (preg_match('/<(br|div|font|li|span|strong|table)>/i',$msg)) return true;
elseif (preg_match('/<(br|div|font|li|span|strong|table)\s+[^<>\/]*>/i',$msg)) return true;
elseif (preg_match('/<(br|div|font|li|span|strong|table)\s+[^<>\/]*\/>/i',$msg)) return true;
elseif (preg_match('/<(img)\s+[^<>]*>/i',$msg)) return true; // must accept <img src="http://mydomain.com/aaa.png" />
elseif (preg_match('/<h[0-9]>/i',$msg)) return true;
elseif (preg_match('/&[A-Z0-9]{1,6};/i',$msg)) return true; // Html entities names (http://www.w3schools.com/tags/ref_entities.asp)
elseif (preg_match('/&#[0-9]{2,3};/i',$msg)) return true; // Html entities numbers (http://www.w3schools.com/tags/ref_entities.asp)

View File

@@ -112,18 +112,16 @@ function check_user_password_dolibarr($usertotest,$passwordtotest,$entitytotest=
}
// We must check entity
if ($passok)
if ($passok && ! empty($conf->multicompany->enabled)) // We must check entity
{
global $mc;
if (!isset($mc)) {
//Global not available, disable $conf->multicompany->enabled for safety
$conf->multicompany->enabled = false;
}
if (! empty($conf->multicompany->enabled)) {
if (! isset($mc)) $conf->multicompany->enabled = false; // Global not available, disable $conf->multicompany->enabled for safety
else
{
$ret = $mc->checkRight($obj->rowid, $entitytotest);
if ($ret < 0) {
if ($ret < 0)
{
dol_syslog("functions_dolibarr::check_user_password_dolibarr Authentification ko entity '" . $entitytotest . "' not allowed for user '" . $obj->rowid . "'");
$login = ''; // force authentication failure
}

View File

@@ -178,6 +178,39 @@ class InterfaceActionsAuto extends DolibarrTriggers
$object->actiontypecode='AC_OTH_AUTO';
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("OrderValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
$object->actionmsg=$langs->transnoentities("OrderValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
$object->actionmsg.="\n".$langs->transnoentities("Author").': '.$user->login;
$object->sendtoid=0;
}
elseif ($action == 'ORDER_CLOSE')
{
$langs->load("orders");
$object->actiontypecode='AC_OTH_AUTO';
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("OrderDeliveredInDolibarr",$object->ref);
$object->actionmsg=$langs->transnoentities("OrderDeliveredInDolibarr",$object->ref);
$object->actionmsg.="\n".$langs->transnoentities("Author").': '.$user->login;
$object->sendtoid=0;
}
elseif ($action == 'ORDER_CLASSIFY_BILLED')
{
$langs->load("orders");
$object->actiontypecode='AC_OTH_AUTO';
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("OrderBilledInDolibarr",$object->ref);
$object->actionmsg=$langs->transnoentities("OrderBilledInDolibarr",$object->ref);
$object->actionmsg.="\n".$langs->transnoentities("Author").': '.$user->login;
$object->sendtoid=0;
}
elseif ($action == 'ORDER_CANCEL')
{
$langs->load("orders");
$object->actiontypecode='AC_OTH_AUTO';
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("OrderCanceledInDolibarr",$object->ref);
$object->actionmsg=$langs->transnoentities("OrderCanceledInDolibarr",$object->ref);
$object->actionmsg.="\n".$langs->transnoentities("Author").': '.$user->login;
$object->sendtoid=0;

View File

@@ -99,7 +99,7 @@ $entitytolang = array(
'task_time' => 'TaskTimeSpent',
'action' => 'Event',
'expensereport'=> 'ExpenseReport',
'expensereport_line'=> 'ExpenseReportLine',
'expensereport_line'=> 'ExpenseReportLine'
);
$array_selected=isset($_SESSION["export_selected_fields"])?$_SESSION["export_selected_fields"]:array();

View File

@@ -32,25 +32,29 @@
-- List of all managed triggered events (used for trigger agenda and for notification)
--
delete from llx_c_action_trigger;
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_VALIDATE','Customer invoice validated','Executed when a customer invoice is approved','facture',6);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_APPROVE','Supplier order request approved','Executed when a supplier order is approved','order_supplier',12);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_REFUSE','Supplier order request refused','Executed when a supplier order is refused','order_supplier',13);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_VALIDATE','Customer order validate','Executed when a customer order is validated','commande',4);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_VALIDATE','Customer proposal validated','Executed when a commercial proposal is validated','propal',2);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('COMPANY_SENTBYMAIL','Mails sent from third party card','Executed when you send email from third party card','societe',1);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('COMPANY_CREATE','Third party created','Executed when a third party is created','societe',1);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTRACT_VALIDATE','Contract validated','Executed when a contract is validated','contrat',18);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_VALIDATE','Customer proposal validated','Executed when a commercial proposal is validated','propal',2);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_SENTBYMAIL','Commercial proposal sent by mail','Executed when a commercial proposal is sent by mail','propal',3);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_VALIDATE','Customer order validate','Executed when a customer order is validated','commande',4);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CLOSE','Customer order classify delivered','Executed when a customer order is set delivered','commande',5);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CLASSIFY_BILLED','Customer order classify billed','Executed when a customer order is set to billed','commande',5);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CANCEL','Customer order canceled','Executed when a customer order is canceled','commande',5);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SENTBYMAIL','Customer order sent by mail','Executed when a customer order is sent by mail ','commande',5);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_VALIDATE','Customer invoice validated','Executed when a customer invoice is approved','facture',6);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_PAYED','Customer invoice payed','Executed when a customer invoice is payed','facture',7);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_CANCEL','Customer invoice canceled','Executed when a customer invoice is conceled','facture',8);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SENTBYMAIL','Customer invoice sent by mail','Executed when a customer invoice is sent by mail','facture',9);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_UNVALIDATE','Customer invoice unvalidated','Executed when a customer invoice status set back to draft','facture',10);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_VALIDATE','Supplier order validated','Executed when a supplier order is validated','order_supplier',11);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_APPROVE','Supplier order request approved','Executed when a supplier order is approved','order_supplier',12);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_REFUSE','Supplier order request refused','Executed when a supplier order is refused','order_supplier',13);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_SENTBYMAIL','Supplier order sent by mail','Executed when a supplier order is sent by mail','order_supplier',14);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_VALIDATE','Supplier invoice validated','Executed when a supplier invoice is validated','invoice_supplier',15);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_PAYED','Supplier invoice payed','Executed when a supplier invoice is payed','invoice_supplier',16);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_SENTBYMAIL','Supplier invoice sent by mail','Executed when a supplier invoice is sent by mail','invoice_supplier',17);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_CANCELED','Supplier invoice cancelled','Executed when a supplier invoice is cancelled','invoice_supplier',17);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTRACT_VALIDATE','Contract validated','Executed when a contract is validated','contrat',18);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('SHIPPING_VALIDATE','Shipping validated','Executed when a shipping is validated','shipping',20);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('SHIPPING_SENTBYMAIL','Shipping sent by mail','Executed when a shipping is sent by mail','shipping',21);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_VALIDATE','Member validated','Executed when a member is validated','member',22);
@@ -58,7 +62,6 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_RESILIATE','Member resiliated','Executed when a member is resiliated','member',24);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_MODIFY','Member modified','Executed when a member is modified','member',24);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_DELETE','Member deleted','Executed when a member is deleted','member',25);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_UNVALIDATE','Customer invoice unvalidated','Executed when a customer invoice status set back to draft','facture',10);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_VALIDATE','Intervention validated','Executed when a intervention is validated','ficheinter',19);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_CLASSIFY_BILLED','Intervention set billed','Executed when a intervention is set to billed (when option FICHINTER_CLASSIFY_BILLED is set)','ficheinter',19);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_CLASSIFY_UNBILLED','Intervention set unbilled','Executed when a intervention is set to unbilled (when option FICHINTER_CLASSIFY_BILLED is set)','ficheinter',19);

View File

@@ -27,6 +27,9 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_SENTBYMAIL','Intervention sent by mail','Executed when a intervention is sent by mail','ficheinter',19);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_REOPEN','Intervention opened','Executed when a intervention is re-opened','ficheinter',19);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_CLASSIFY_BILLED','Customer proposal set billed','Executed when a customer proposal is set to billed','propal',2);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CLOSE','Customer order classify delivered','Executed when a customer order is set delivered','commande',5);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CLASSIFY_BILLED','Customer order classify billed','Executed when a customer order is set to billed','commande',5);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CANCEL','Customer order canceled','Executed when a customer order is canceled','commande',5);
-- VPGSQL8.2 ALTER TABLE llx_contrat ALTER COLUMN fk_commercial_signature DROP NOT NULL;
-- VPGSQL8.2 ALTER TABLE llx_contrat ALTER COLUMN fk_commercial_suivi DROP NOT NULL;

View File

@@ -511,8 +511,8 @@ Module1400Name=Accounting
Module1400Desc=Accounting management (double parties)
Module1520Name=Document Generation
Module1520Desc=Mass mail document generation
Module1780Name=Categories
Module1780Desc=Category management (products, suppliers and customers)
Module1780Name=Tags/Categories
Module1780Desc=Create tags/category (products, customers, suppliers, contacts or members)
Module2000Name=WYSIWYG editor
Module2000Desc=Allow to edit some text area using an advanced editor
Module2200Name=Dynamic Prices

View File

@@ -49,6 +49,9 @@ InvoiceValidatedInDolibarrFromPos=Invoice %s validated from POS
InvoiceBackToDraftInDolibarr=Invoice %s go back to draft status
InvoiceDeleteDolibarr=Invoice %s deleted
OrderValidatedInDolibarr=Order %s validated
OrderDeliveredInDolibarr=Order %s classified delivered
OrderCanceledInDolibarr=Order %s canceled
OrderBilledInDolibarr=Order %s classified billed
OrderApprovedInDolibarr=Order %s approved
OrderRefusedInDolibarr=Order %s refused
OrderBackToDraftInDolibarr=Order %s go back to draft status

View File

@@ -1,64 +1,62 @@
# Dolibarr language file - Source file is en_US - categories
Category=Category
Categories=Categories
Rubrique=Category
Rubriques=Categories
categories=categories
TheCategorie=The category
NoCategoryYet=No category of this type created
Rubrique=Tag/Category
Rubriques=Tags/Categories
categories=tags/categories
TheCategorie=The tag/category
NoCategoryYet=No tag/category of this type created
In=In
AddIn=Add in
modify=modify
Classify=Classify
CategoriesArea=Categories area
ProductsCategoriesArea=Products/Services categories area
SuppliersCategoriesArea=Suppliers categories area
CustomersCategoriesArea=Customers categories area
ThirdPartyCategoriesArea=Third parties categories area
MembersCategoriesArea=Members categories area
ContactsCategoriesArea=Contacts categories area
MainCats=Main categories
CategoriesArea=Tags/Categories area
ProductsCategoriesArea=Products/Services tags/categories area
SuppliersCategoriesArea=Suppliers tags/categories area
CustomersCategoriesArea=Customers tags/categories area
ThirdPartyCategoriesArea=Third parties tags/categories area
MembersCategoriesArea=Members tags/categories area
ContactsCategoriesArea=Contacts tags/categories area
MainCats=Main tags/categories
SubCats=Subcategories
CatStatistics=Statistics
CatList=List of categories
AllCats=All categories
ViewCat=View category
NewCat=Add category
NewCategory=New category
ModifCat=Modify category
CatCreated=Category created
CreateCat=Create category
CreateThisCat=Create this category
CatList=List of tags/categories
AllCats=All tags/categories
ViewCat=View tag/category
NewCat=Add tag/category
NewCategory=New tag/category
ModifCat=Modify tag/category
CatCreated=Tag/category created
CreateCat=Create tag/category
CreateThisCat=Create this tag/category
ValidateFields=Validate the fields
NoSubCat=No subcategory.
SubCatOf=Subcategory
FoundCats=Found categories
FoundCatsForName=Categories found for the name :
FoundSubCatsIn=Subcategories found in the category
ErrSameCatSelected=You selected the same category several times
ErrForgotCat=You forgot to choose the category
FoundCats=Found tags/categories
FoundCatsForName=Tags/categories found for the name :
FoundSubCatsIn=Subcategories found in the tag/category
ErrSameCatSelected=You selected the same tag/category several times
ErrForgotCat=You forgot to choose the tag/category
ErrForgotField=You forgot to inform the fields
ErrCatAlreadyExists=This name is already used
AddProductToCat=Add this product to a category?
ImpossibleAddCat=Impossible to add the category
ImpossibleAssociateCategory=Impossible to associate the category to
AddProductToCat=Add this product to a tag/category?
ImpossibleAddCat=Impossible to add the tag/category
ImpossibleAssociateCategory=Impossible to associate the tag/category to
WasAddedSuccessfully=<b>%s</b> was added successfully.
ObjectAlreadyLinkedToCategory=Element is already linked to this category.
CategorySuccessfullyCreated=This category %s has been added with success.
ProductIsInCategories=Product/service owns to following categories
SupplierIsInCategories=Third party owns to following suppliers categories
CompanyIsInCustomersCategories=This third party owns to following customers/prospects categories
CompanyIsInSuppliersCategories=This third party owns to following suppliers categories
MemberIsInCategories=This member owns to following members categories
ContactIsInCategories=This contact owns to following contacts categories
ProductHasNoCategory=This product/service is not in any categories
SupplierHasNoCategory=This supplier is not in any categories
CompanyHasNoCategory=This company is not in any categories
MemberHasNoCategory=This member is not in any categories
ContactHasNoCategory=This contact is not in any categories
ClassifyInCategory=Classify in category
ObjectAlreadyLinkedToCategory=Element is already linked to this tag/category.
CategorySuccessfullyCreated=This tag/category %s has been added with success.
ProductIsInCategories=Product/service owns to following tags/categories
SupplierIsInCategories=Third party owns to following suppliers tags/categories
CompanyIsInCustomersCategories=This third party owns to following customers/prospects tags/categories
CompanyIsInSuppliersCategories=This third party owns to following suppliers tags/categories
MemberIsInCategories=This member owns to following members tags/categories
ContactIsInCategories=This contact owns to following contacts tags/categories
ProductHasNoCategory=This product/service is not in any tags/categories
SupplierHasNoCategory=This supplier is not in any tags/categories
CompanyHasNoCategory=This company is not in any tags/categories
MemberHasNoCategory=This member is not in any tags/categories
ContactHasNoCategory=This contact is not in any tags/categories
ClassifyInCategory=Classify in tag/category
NoneCategory=None
NotCategorized=Without category
NotCategorized=Without tag/category
CategoryExistsAtSameLevel=This category already exists with this ref
ReturnInProduct=Back to product/service card
ReturnInSupplier=Back to supplier card
@@ -66,22 +64,22 @@ ReturnInCompany=Back to customer/prospect card
ContentsVisibleByAll=The contents will be visible by all
ContentsVisibleByAllShort=Contents visible by all
ContentsNotVisibleByAllShort=Contents not visible by all
CategoriesTree=Categories tree
DeleteCategory=Delete category
ConfirmDeleteCategory=Are you sure you want to delete this category ?
RemoveFromCategory=Remove link with categorie
RemoveFromCategoryConfirm=Are you sure you want to remove link between the transaction and the category ?
NoCategoriesDefined=No category defined
SuppliersCategoryShort=Suppliers category
CustomersCategoryShort=Customers category
ProductsCategoryShort=Products category
MembersCategoryShort=Members category
SuppliersCategoriesShort=Suppliers categories
CustomersCategoriesShort=Customers categories
CategoriesTree=Tags/categories tree
DeleteCategory=Delete tag/category
ConfirmDeleteCategory=Are you sure you want to delete this tag/category ?
RemoveFromCategory=Remove link with tag/categorie
RemoveFromCategoryConfirm=Are you sure you want to remove link between the transaction and the tag/category ?
NoCategoriesDefined=No tag/category defined
SuppliersCategoryShort=Suppliers tags/category
CustomersCategoryShort=Customers tags/category
ProductsCategoryShort=Products tags/category
MembersCategoryShort=Members tags/category
SuppliersCategoriesShort=Suppliers tags/categories
CustomersCategoriesShort=Customers tags/categories
CustomersProspectsCategoriesShort=Custo./Prosp. categories
ProductsCategoriesShort=Products categories
MembersCategoriesShort=Members categories
ContactCategoriesShort=Contacts categories
ProductsCategoriesShort=Products tags/categories
MembersCategoriesShort=Members tags/categories
ContactCategoriesShort=Contacts tags/categories
ThisCategoryHasNoProduct=This category does not contain any product.
ThisCategoryHasNoSupplier=This category does not contain any supplier.
ThisCategoryHasNoCustomer=This category does not contain any customer.
@@ -90,23 +88,23 @@ ThisCategoryHasNoContact=This category does not contain any contact.
AssignedToCustomer=Assigned to a customer
AssignedToTheCustomer=Assigned to the customer
InternalCategory=Internal category
CategoryContents=Category contents
CategId=Category id
CatSupList=List of supplier categories
CatCusList=List of customer/prospect categories
CatProdList=List of products categories
CatMemberList=List of members categories
CatContactList=List of contact categories and contact
CatSupLinks=Links between suppliers and categories
CatCusLinks=Links between customers/prospects and categories
CatProdLinks=Links between products/services and categories
CatMemberLinks=Links between members and categories
DeleteFromCat=Remove from category
CategoryContents=Tag/category contents
CategId=Tag/category id
CatSupList=List of supplier tags/categories
CatCusList=List of customer/prospect tags/categories
CatProdList=List of products tags/categories
CatMemberList=List of members tags/categories
CatContactList=List of contact tags/categories and contact
CatSupLinks=Links between suppliers and tags/categories
CatCusLinks=Links between customers/prospects and tags/categories
CatProdLinks=Links between products/services and tags/categories
CatMemberLinks=Links between members and tags/categories
DeleteFromCat=Remove from tags/category
DeletePicture=Picture delete
ConfirmDeletePicture=Confirm picture deletion?
ExtraFieldsCategories=Complementary attributes
CategoriesSetup=Categories setup
CategorieRecursiv=Link with parent category automatically
CategoriesSetup=Tags/categories setup
CategorieRecursiv=Link with parent tag/category automatically
CategorieRecursivHelp=If activated, product will also linked to parent category when adding into a subcategory
AddProductServiceIntoCategory=Add the following product/service
ShowCategory=Show category
ShowCategory=Show tag/category

View File

@@ -395,8 +395,8 @@ Available=Available
NotYetAvailable=Not yet available
NotAvailable=Not available
Popularity=Popularity
Categories=Categories
Category=Category
Categories=Tags/categories
Category=Tag/category
By=By
From=From
to=to

View File

@@ -541,7 +541,8 @@ if ($id > 0 || $ref)
}
// Number of supplier order running
if (! empty($conf->fournisseur->enabled)) {
if (! empty($conf->fournisseur->enabled))
{
if ($found) print '<br>'; else $found=1;
$result=$product->load_stats_commande_fournisseur(0,'3,4');
print $langs->trans("ProductQtyInSuppliersOrdersRunning").': '.$product->stats_commande_fournisseur['qty'];
@@ -551,7 +552,8 @@ if ($id > 0 || $ref)
}
// Number of product from supplier order already received (partial receipt)
if (! empty($conf->fournisseur->enabled)) {
if (! empty($conf->fournisseur->enabled))
{
if ($found) print '<br>'; else $found=1;
print $langs->trans("ProductQtyInSuppliersShipmentAlreadyRecevied").': '.$product->stats_reception['qty'];
}

View File

@@ -233,6 +233,9 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase
$input='<h2>abc</h2>';
$after=dol_textishtml($input);
$this->assertTrue($after);
$input='<img src="https://xxx.com/aaa/image.png" />';
$after=dol_textishtml($input);
$this->assertTrue($after,'Failure on test of img tag');
// False
$input='xxx < br>';