Merge remote-tracking branch 'Upstream/3.9' into 3.9-p13
This commit is contained in:
commit
7233adcede
@ -148,9 +148,9 @@ $FILENAMEEXEDOLIWAMP = "DoliWamp-$MAJOR.$MINOR.$BUILD";
|
||||
$ARCH='noarch';
|
||||
$newbuild = $BUILD;
|
||||
$newbuild =~ s/(dev|alpha)/0.1.a/gi; # dev (fedora)
|
||||
$newbuild =~ s/beta/0.2.beta1/gi; # beta (fedora)
|
||||
$newbuild =~ s/rc./0.3.rc1/gi; # rc (fedora)
|
||||
if ($newbuild !~ /-/) { $newbuild.='-0.3'; } # finale (fedora)
|
||||
$newbuild =~ s/beta(.?)/0.2.beta/gi; # beta (fedora) (we want beta1, beta2, betax to be same package name)
|
||||
$newbuild =~ s/rc(.?)/0.3.rc/gi; # rc (fedora) (we want rc1, rc2, rcx to be same package name)
|
||||
if ($newbuild !~ /-/) { $newbuild.='-0.4'; } # finale (fedora)
|
||||
#$newbuild =~ s/(dev|alpha)/0/gi; # dev
|
||||
#$newbuild =~ s/beta/1/gi; # beta
|
||||
#$newbuild =~ s/rc./2/gi; # rc
|
||||
@ -162,10 +162,10 @@ $FILENAMERPM=$FILENAMETGZ2."-".$RPMSUBVERSION.".".$ARCH.".rpm";
|
||||
# For Deb
|
||||
$newbuild = $BUILD;
|
||||
$newbuild =~ s/(dev|alpha)/1/gi; # dev
|
||||
$newbuild =~ s/beta/2/gi; # beta
|
||||
$newbuild =~ s/rc./3/gi; # rc
|
||||
if ($newbuild !~ /-/) { $newbuild.='-3'; } # finale is same than rc.
|
||||
# now newbuild is 0-1 or 0-3 for example. Note that for native package (see debian/source/format), we should not use a dash part but to get a better version management
|
||||
$newbuild =~ s/beta(.?)/2/gi; # beta (we want beta1, beta2, betax to be same package name)
|
||||
$newbuild =~ s/rc(.?)/3/gi; # rc (we want rc1, rc2, rcx to be same package name)
|
||||
if ($newbuild !~ /-/) { $newbuild.='-4'; } # finale is same than rc.
|
||||
# now newbuild is 0-1 or 0-4 for example. Note that for native package (see debian/source/format), we should not use a dash part but to get a better version management
|
||||
$build = $newbuild;
|
||||
$build =~ s/-.*$//g;
|
||||
# now build is 0 for example
|
||||
|
||||
@ -448,7 +448,7 @@ $facturestatic=new Facture($db);
|
||||
|
||||
$sql = 'SELECT';
|
||||
if ($sall || $search_product_category > 0) $sql = 'SELECT DISTINCT';
|
||||
$sql.= ' f.rowid as facid, f.facnumber, f.ref_client, f.type, f.note_private, f.increment, f.fk_mode_reglement, f.total as total_ht, f.tva as total_tva, f.total_ttc,';
|
||||
$sql.= ' f.rowid as facid, f.facnumber, f.ref_client, f.type, f.note_private, f.note_public, f.increment, f.fk_mode_reglement, f.total as total_ht, f.tva as total_tva, f.total_ttc,';
|
||||
$sql.= ' f.datef as df, f.date_lim_reglement as datelimite,';
|
||||
$sql.= ' f.paye as paye, f.fk_statut,';
|
||||
$sql.= ' s.nom as name, s.rowid as socid, s.code_client, s.client ';
|
||||
@ -527,7 +527,7 @@ if ($search_user > 0)
|
||||
}
|
||||
if (! $sall)
|
||||
{
|
||||
$sql.= ' GROUP BY f.rowid, f.facnumber, ref_client, f.type, f.note_private, f.increment, f.total, f.tva, f.total_ttc,';
|
||||
$sql.= ' GROUP BY f.rowid, f.facnumber, ref_client, f.type, f.note_private, f.note_public, f.increment, f.total, f.tva, f.total_ttc,';
|
||||
$sql.= ' f.datef, f.date_lim_reglement,';
|
||||
$sql.= ' f.paye, f.fk_statut,';
|
||||
$sql.= ' s.nom, s.rowid, s.code_client, s.client';
|
||||
@ -810,7 +810,7 @@ if ($resql)
|
||||
$facturestatic->type=$objp->type;
|
||||
$facturestatic->statut=$objp->fk_statut;
|
||||
$facturestatic->date_lim_reglement=$db->jdate($objp->datelimite);
|
||||
$notetoshow=dol_string_nohtmltag(($user->societe_id>0?$objp->note_public:$objp->note),1);
|
||||
$notetoshow=dol_string_nohtmltag(($user->societe_id>0?$objp->note_public:$objp->note_private),1);
|
||||
$paiement = $facturestatic->getSommePaiement();
|
||||
|
||||
print '<table class="nobordernopadding"><tr class="nocellnopadd">';
|
||||
|
||||
@ -628,7 +628,7 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire)
|
||||
/*
|
||||
* Customers orders to be billed
|
||||
*/
|
||||
if (! empty($conf->facture->enabled) && ! empty($conf->commande->enabled) && $user->rights->commande->lire)
|
||||
if (! empty($conf->facture->enabled) && ! empty($conf->commande->enabled) && $user->rights->commande->lire && empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER))
|
||||
{
|
||||
$commandestatic=new Commande($db);
|
||||
$langs->load("orders");
|
||||
|
||||
@ -768,9 +768,10 @@ abstract class CommonObject
|
||||
* @param int $statut Status of links to get (-1=all)
|
||||
* @param string $source Source of contact: external or thirdparty (llx_socpeople) or internal (llx_user)
|
||||
* @param int $list 0:Return array contains all properties, 1:Return array contains just id
|
||||
* @param string $code Filter on this code of contact type ('SHIPPING', 'BILLING', ...)
|
||||
* @return array Array of contacts
|
||||
*/
|
||||
function liste_contact($statut=-1,$source='external',$list=0)
|
||||
function liste_contact($statut=-1,$source='external',$list=0,$code='')
|
||||
{
|
||||
global $langs;
|
||||
|
||||
@ -788,6 +789,7 @@ abstract class CommonObject
|
||||
$sql.= " WHERE ec.element_id =".$this->id;
|
||||
$sql.= " AND ec.fk_c_type_contact=tc.rowid";
|
||||
$sql.= " AND tc.element='".$this->element."'";
|
||||
if ($code) $sql.= " AND tc.code = '".$this->db->escape($code)."'";
|
||||
if ($source == 'internal') $sql.= " AND tc.source = 'internal'";
|
||||
if ($source == 'external' || $source == 'thirdparty') $sql.= " AND tc.source = 'external'";
|
||||
$sql.= " AND tc.active=1";
|
||||
@ -825,7 +827,7 @@ abstract class CommonObject
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error=$this->db->error();
|
||||
$this->error=$this->db->lasterror();
|
||||
dol_print_error($this->db);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1834,14 +1834,15 @@ class Form
|
||||
/**
|
||||
* constructProductListOption
|
||||
*
|
||||
* @param resultset $objp Resultset of fetch
|
||||
* @param string $opt Option
|
||||
* @param string $optJson Option
|
||||
* @param int $price_level Price level
|
||||
* @param string $selected Preselected value
|
||||
* @param resultset $objp Resultset of fetch
|
||||
* @param string $opt Option (var used for returned value in string option format)
|
||||
* @param string $optJson Option (var used for returned value in json format)
|
||||
* @param int $price_level Price level
|
||||
* @param string $selected Preselected value
|
||||
* @param int $hidepriceinlabel Hide price in label
|
||||
* @return void
|
||||
*/
|
||||
private function constructProductListOption(&$objp, &$opt, &$optJson, $price_level, $selected)
|
||||
private function constructProductListOption(&$objp, &$opt, &$optJson, $price_level, $selected, $hidepriceinlabel=0)
|
||||
{
|
||||
global $langs,$conf,$user,$db;
|
||||
|
||||
@ -1888,7 +1889,7 @@ class Form
|
||||
$found=0;
|
||||
|
||||
// Multiprice
|
||||
if ($price_level >= 1 && $conf->global->PRODUIT_MULTIPRICES) // If we need a particular price level (from 1 to 6)
|
||||
if (empty($hidepriceinlabel) && $price_level >= 1 && $conf->global->PRODUIT_MULTIPRICES) // If we need a particular price level (from 1 to 6)
|
||||
{
|
||||
$sql = "SELECT price, price_ttc, price_base_type, tva_tx";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_price";
|
||||
@ -1929,7 +1930,7 @@ class Form
|
||||
}
|
||||
|
||||
// Price by quantity
|
||||
if (!empty($objp->quantity) && $objp->quantity >= 1 && ! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY))
|
||||
if (empty($hidepriceinlabel) && !empty($objp->quantity) && $objp->quantity >= 1 && ! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY))
|
||||
{
|
||||
$found = 1;
|
||||
$outqty=$objp->quantity;
|
||||
@ -1954,20 +1955,22 @@ class Form
|
||||
$outpricebasetype=$objp->price_base_type;
|
||||
$outtva_tx=$objp->tva_tx;
|
||||
}
|
||||
if (!empty($objp->quantity) && $objp->quantity >= 1)
|
||||
if (empty($hidepriceinlabel) && !empty($objp->quantity) && $objp->quantity >= 1)
|
||||
{
|
||||
$opt.=" (".price($objp->unitprice,1,$langs,0,0,-1,$conf->currency)."/".$langs->trans("Unit").")"; // Do not use strtolower because it breaks utf8 encoding
|
||||
$outval.=" (".price($objp->unitprice,0,$langs,0,0,-1,$conf->currency)."/".$langs->transnoentities("Unit").")"; // Do not use strtolower because it breaks utf8 encoding
|
||||
}
|
||||
if (!empty($objp->remise_percent) && $objp->remise_percent >= 1)
|
||||
if (empty($hidepriceinlabel) && !empty($objp->remise_percent) && $objp->remise_percent >= 1)
|
||||
{
|
||||
$opt.=" - ".$langs->trans("Discount")." : ".vatrate($objp->remise_percent).' %';
|
||||
$outval.=" - ".$langs->transnoentities("Discount")." : ".vatrate($objp->remise_percent).' %';
|
||||
}
|
||||
|
||||
//Price by customer
|
||||
if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
|
||||
if (!empty($objp->idprodcustprice)) {
|
||||
// Price by customer
|
||||
if (empty($hidepriceinlabel) && !empty($conf->global->PRODUIT_CUSTOMER_PRICES))
|
||||
{
|
||||
if (!empty($objp->idprodcustprice))
|
||||
{
|
||||
$found = 1;
|
||||
|
||||
if ($objp->custprice_base_type == 'HT')
|
||||
@ -1989,7 +1992,7 @@ class Form
|
||||
}
|
||||
|
||||
// If level no defined or multiprice not found, we used the default price
|
||||
if (! $found)
|
||||
if (empty($hidepriceinlabel) && ! $found)
|
||||
{
|
||||
if ($objp->price_base_type == 'HT')
|
||||
{
|
||||
|
||||
@ -1881,28 +1881,31 @@ function pdf_getLinkedObjects($object,$outputlangs)
|
||||
$outputlangs->load('sendings');
|
||||
foreach($objects as $x => $elementobject)
|
||||
{
|
||||
$elementobject->fetchObjectLinked();
|
||||
|
||||
$order = reset($elementobject->linkedObjects['commande']);
|
||||
|
||||
// We concat this record info into fields xxx_value. title is overwrote.
|
||||
if (! empty($object->linkedObjects['commande']) || $object->element == 'commande') // There is already a link to order or object is the order, so we show only info of shipment
|
||||
{
|
||||
$linkedobjects[$objecttype]['ref_title'] = $outputlangs->transnoentities("RefSending");
|
||||
if (! empty($linkedobjects[$objecttype]['ref_value'])) $linkedobjects[$objecttype]['ref_value'].=' / ';
|
||||
$linkedobjects[$objecttype]['ref_value'].= $outputlangs->transnoentities($elementobject->ref);
|
||||
$linkedobjects[$objecttype]['date_title'] = $outputlangs->transnoentities("DateSending");
|
||||
$linkedobjects[$objecttype]['date_value'].= dol_print_date($elementobject->date_delivery,'day','',$outputlangs);
|
||||
}
|
||||
else // We show both info of order and shipment.
|
||||
{
|
||||
$linkedobjects[$objecttype]['ref_title'] = $outputlangs->transnoentities("RefOrder") . ' / ' . $outputlangs->transnoentities("RefSending");
|
||||
if (empty($linkedobjects[$objecttype]['ref_value'])) $linkedobjects[$objecttype]['ref_value'] = $outputlangs->convToOutputCharset($order->ref) . ($order->ref_client ? ' ('.$order->ref_client.')' : '');
|
||||
$linkedobjects[$objecttype]['ref_value'].= ' / ' . $outputlangs->transnoentities($elementobject->ref);
|
||||
$linkedobjects[$objecttype]['date_title'] = $outputlangs->transnoentities("OrderDate") . ($elementobject->date_delivery ? ' / ' . $outputlangs->transnoentities("DateSending") : '');
|
||||
if (empty($linkedobjects[$objecttype]['date_value'])) $linkedobjects[$objecttype]['date_value'] = dol_print_date($order->date,'day','',$outputlangs);
|
||||
$linkedobjects[$objecttype]['date_value'].= ($elementobject->date_delivery ? ' / ' . dol_print_date($elementobject->date_delivery,'day','',$outputlangs) : '');
|
||||
}
|
||||
$order=null;
|
||||
// We concat this record info into fields xxx_value. title is overwrote.
|
||||
if (empty($object->linkedObjects['commande']) && $object->element != 'commande') // There is not already a link to order and object is not the order, so we show also info with order
|
||||
{
|
||||
$elementobject->fetchObjectLinked();
|
||||
if (! empty($elementobject->linkedObjects['commande'])) $order = reset($elementobject->linkedObjects['commande']);
|
||||
}
|
||||
if (! is_object($order))
|
||||
{
|
||||
$linkedobjects[$objecttype]['ref_title'] = $outputlangs->transnoentities("RefSending");
|
||||
if (! empty($linkedobjects[$objecttype]['ref_value'])) $linkedobjects[$objecttype]['ref_value'].=' / ';
|
||||
$linkedobjects[$objecttype]['ref_value'].= $outputlangs->transnoentities($elementobject->ref);
|
||||
//$linkedobjects[$objecttype]['date_title'] = $outputlangs->transnoentities("DateSending");
|
||||
//if (! empty($linkedobjects[$objecttype]['date_value'])) $linkedobjects[$objecttype]['date_value'].=' / ';
|
||||
//$linkedobjects[$objecttype]['date_value'].= dol_print_date($elementobject->date_delivery,'day','',$outputlangs);
|
||||
}
|
||||
else
|
||||
{
|
||||
$linkedobjects[$objecttype]['ref_title'] = $outputlangs->transnoentities("RefOrder") . ' / ' . $outputlangs->transnoentities("RefSending");
|
||||
if (empty($linkedobjects[$objecttype]['ref_value'])) $linkedobjects[$objecttype]['ref_value'] = $outputlangs->convToOutputCharset($order->ref) . ($order->ref_client ? ' ('.$order->ref_client.')' : '');
|
||||
$linkedobjects[$objecttype]['ref_value'].= ' / ' . $outputlangs->transnoentities($elementobject->ref);
|
||||
//$linkedobjects[$objecttype]['date_title'] = $outputlangs->transnoentities("OrderDate") . ($elementobject->date_delivery ? ' / ' . $outputlangs->transnoentities("DateSending") : '');
|
||||
//if (empty($linkedobjects[$objecttype]['date_value'])) $linkedobjects[$objecttype]['date_value'] = dol_print_date($order->date,'day','',$outputlangs);
|
||||
//$linkedobjects[$objecttype]['date_value'].= ($elementobject->date_delivery ? ' / ' . dol_print_date($elementobject->date_delivery,'day','',$outputlangs) : '');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
*/
|
||||
|
||||
if (! defined('DOL_APPLICATION_TITLE')) define('DOL_APPLICATION_TITLE','Dolibarr');
|
||||
if (! defined('DOL_VERSION')) define('DOL_VERSION','3.9.0-rc');
|
||||
if (! defined('DOL_VERSION')) define('DOL_VERSION','3.9.0-rc2');
|
||||
|
||||
if (! defined('EURO')) define('EURO',chr(128));
|
||||
|
||||
|
||||
@ -192,3 +192,4 @@ OppStatusNEGO=Negociation
|
||||
OppStatusPENDING=Pending
|
||||
OppStatusWIN=Won
|
||||
OppStatusLOST=Lost
|
||||
Budget=Budget
|
||||
@ -1091,7 +1091,7 @@ SendmailOptionMayHurtBuggedMTA=La funcionalidad de enviar correo electrónico a
|
||||
TranslationSetup=Configuración traducción
|
||||
TranslationDesc=La elección del idioma mostrado en pantalla se modifica:<br>* A nivel global desde el menú <strong>Inicio - Configuración - Entorno</strong><br>* De manera específica al usuario desde la pestaña <strong>Interfaz usuario</strong> de su ficha de usuario (hacer clic en su login en la parte superior izquierda de la pantalla).
|
||||
TranslationOverwriteDesc=También puede sobreescribir algún valor completando/editando la tabla siguiente. Debe utilizar "%s" para el código de idioma, "%s" para la clave que encuentra en el archivo langs/xx_XX/somefile.lang y "%s" para el nuevo valor que desea utilizar como nueva traducción.
|
||||
TotalNumberOfActivatedModules=Total number of activated feature modules: <b>%s</b> / <b>%s</b>
|
||||
TotalNumberOfActivatedModules=Número total de módulos activados: <b>%s</b> / <b>%s</b>
|
||||
YouMustEnableOneModule=Debe activar al menos un módulo.
|
||||
ClassNotFoundIntoPathWarning=No se ha encontrado la clase %s en su path PHP
|
||||
YesInSummer=Sí en verano
|
||||
|
||||
@ -45,13 +45,13 @@ BoxTitleLastModifiedProspects=Los %s últimos clientes potenciales modificados
|
||||
BoxTitleLastProductsInContract=Los %s últimos productos/servicios contratados
|
||||
BoxTitleLastModifiedMembers=Últimos %s miembros
|
||||
BoxTitleLastFicheInter=Las %s últimas intervenciones modificadas
|
||||
BoxTitleOldestUnpaidCustomerBills=%s facturas a clientes más antiguras pendientes de cobro
|
||||
BoxTitleOldestUnpaidSupplierBills=%s facturas de proveedores más antiguas pendientes de pago
|
||||
BoxTitleOldestUnpaidCustomerBills=Las %s facturas a clientes más antiguras pendientes de cobro
|
||||
BoxTitleOldestUnpaidSupplierBills=Las %s facturas de proveedores más antiguas pendientes de pago
|
||||
BoxTitleCurrentAccounts=Balance de cuentas abiertas
|
||||
BoxTitleSalesTurnover=Volumen de ventas realizado
|
||||
BoxTitleTotalUnpaidCustomerBills=Facturas a clientes pendientes de cobro
|
||||
BoxTitleTotalUnpaidSuppliersBills=Facturas de proveedores pendientes de pago
|
||||
BoxTitleLastModifiedContacts=Los %s últimos contactos/direcciones modificadas
|
||||
BoxTitleLastModifiedContacts=Los %s últimos contactos/direcciones modificados
|
||||
BoxMyLastBookmarks=Mis %s últimos marcadores
|
||||
BoxOldestExpiredServices=Servicios antiguos expirados
|
||||
BoxLastExpiredServices=Los %s contratos más antiguos con servicios activos expirados
|
||||
|
||||
@ -266,8 +266,8 @@ CustomerRelativeDiscountShort=Descuento relativo
|
||||
CustomerAbsoluteDiscountShort=Descuento fijo
|
||||
CompanyHasRelativeDiscount=Este cliente tiene un descuento por defecto de <b>%s%%</b>
|
||||
CompanyHasNoRelativeDiscount=Este cliente no tiene descuentos relativos por defecto
|
||||
CompanyHasAbsoluteDiscount=Este cliente tiene <b>%s %s</b> descuentos disponibles (descuentos, anticipos...)
|
||||
CompanyHasCreditNote=Este cliente tiene <b>%s %s</b> anticipos disponibles
|
||||
CompanyHasAbsoluteDiscount=Este cliente tiene <b>%s %s</b> en descuentos o anticipos disponibles
|
||||
CompanyHasCreditNote=Este cliente tiene <b>%s %s</b> en anticipos disponibles
|
||||
CompanyHasNoAbsoluteDiscount=Este cliente no tiene más descuentos fijos disponibles
|
||||
CustomerAbsoluteDiscountAllUsers=Descuentos fijos en curso (acordado por todos los usuarios)
|
||||
CustomerAbsoluteDiscountMy=Descuentos fijos en curso (acordados personalmente)
|
||||
|
||||
@ -40,8 +40,8 @@ CronNone=Ninguna
|
||||
CronDtStart=No antes de
|
||||
CronDtEnd=No después de
|
||||
CronDtNextLaunch=Sig. ejec.
|
||||
CronDtLastLaunch=Start date of last execution
|
||||
CronDtLastResult=End date of last execution
|
||||
CronDtLastLaunch=Fecha inicio última ejec.
|
||||
CronDtLastResult=Fecha finalización última ejec.
|
||||
CronFrequency=Frecuencia
|
||||
CronClass=Clase
|
||||
CronMethod=Metodo
|
||||
|
||||
@ -198,3 +198,4 @@ OppStatusNEGO=Negociación
|
||||
OppStatusPENDING=Pendiente
|
||||
OppStatusWIN=Ganado
|
||||
OppStatusLOST=Perdido
|
||||
Budget=Presupuesto
|
||||
|
||||
@ -198,3 +198,4 @@ OppStatusNEGO=Négociation
|
||||
OppStatusPENDING=En attente
|
||||
OppStatusWIN=Gagné
|
||||
OppStatusLOST=Perdu
|
||||
Budget=Budget
|
||||
Loading…
Reference in New Issue
Block a user