This commit is contained in:
Maxime Kohlhaas 2017-06-13 11:59:10 +02:00
commit c8172d2b49
80 changed files with 1077 additions and 648 deletions

View File

@ -189,7 +189,7 @@ if ($result)
$var=!$var; $var=!$var;
print '<tr '. $bc[$var].'>'; print '<tr '. $bc[$var].'>';
print '<td>'.img_object('',$picto).' '.$objMod->getName(); print '<td>'.img_object('',$picto,'class="pictoobjectwidth"').' '.$objMod->getName();
print '<a name="'.$objMod->getName().'">&nbsp;</a>'; print '<a name="'.$objMod->getName().'">&nbsp;</a>';
$perm_libelle=($conf->global->MAIN_USE_ADVANCED_PERMS && ($langs->trans("PermissionAdvanced".$obj->id)!=("PermissionAdvanced".$obj->id))?$langs->trans("PermissionAdvanced".$obj->id):(($langs->trans("Permission".$obj->id)!=("Permission".$obj->id))?$langs->trans("Permission".$obj->id):$obj->libelle)); $perm_libelle=($conf->global->MAIN_USE_ADVANCED_PERMS && ($langs->trans("PermissionAdvanced".$obj->id)!=("PermissionAdvanced".$obj->id))?$langs->trans("PermissionAdvanced".$obj->id):(($langs->trans("Permission".$obj->id)!=("Permission".$obj->id))?$langs->trans("Permission".$obj->id):$obj->libelle));

View File

@ -34,8 +34,8 @@ if ( $_GET['id'] == 'NOUV' )
// Recuperation, s'il existe, de l'objet contenant les infos de la vente en cours ... // Recuperation, s'il existe, de l'objet contenant les infos de la vente en cours ...
if (isset($_SESSION['serObjFacturation'])) if (isset($_SESSION['serObjFacturation']))
{ {
$obj_facturation = unserialize($_SESSION['serObjFacturation']); $obj_facturation = unserialize($_SESSION['serObjFacturation']);
unset($_SESSION['serObjFacturation']); unset($_SESSION['serObjFacturation']);
} }
else else
{ {
@ -43,7 +43,7 @@ else
$obj_facturation = new Facturation(); $obj_facturation = new Facturation();
} }
// $obj_facturation contains data for all invoice total + selection of current product
$obj_facturation->calculTotaux(); // Redefine prix_total_ttc, prix_total_ht et montant_tva from $_SESSION['poscart'] $obj_facturation->calculTotaux(); // Redefine prix_total_ttc, prix_total_ht et montant_tva from $_SESSION['poscart']

View File

@ -99,17 +99,25 @@ class Facturation
$product = new Product($db); $product = new Product($db);
$product->fetch($this->id); $product->fetch($this->id);
$vatrowid = $this->tva(); $vatrowid = $this->tva();
$tmp = getTaxesFromId($vatrowid); $tmp = getTaxesFromId($vatrowid);
$vat_rate = $tmp['rate']; $txtva = $tmp['rate'].(empty($tmp['code'])?'':' ('.$tmp['code'].')');
$vat_npr = $tmp['npr']; $vat_npr = $tmp['npr'];
$localtaxarray = getLocalTaxesFromRate($vatrowid, 0, $societe, $mysoc, 1); $localtaxarray = getLocalTaxesFromRate($vatrowid, 0, $societe, $mysoc, 1);
// Clean vat code
$vat_src_code='';
if (preg_match('/\((.*)\)/', $txtva, $reg))
{
$vat_src_code = $reg[1];
$txtva = preg_replace('/\s*\(.*\)/', '', $txtva); // Remove code into vatrate.
}
// Define part of HT, VAT, TTC // Define part of HT, VAT, TTC
$resultarray=calcul_price_total($this->qte, $this->prix(), $this->remisePercent(), $vat_rate, -1, -1, 0, 'HT', $use_npr, $product->type, $mysoc, $localtaxarray); $resultarray=calcul_price_total($this->qte, $this->prix(), $this->remisePercent(), $txtva, -1, -1, 0, 'HT', $use_npr, $product->type, $mysoc, $localtaxarray);
// Calcul du total ht sans remise // Calcul du total ht sans remise
$total_ht = $resultarray[0]; $total_ht = $resultarray[0];
@ -136,7 +144,7 @@ class Facturation
$newcartarray[$i]['label']=$product->label; $newcartarray[$i]['label']=$product->label;
$newcartarray[$i]['price']=$product->price; $newcartarray[$i]['price']=$product->price;
$newcartarray[$i]['price_ttc']=$product->price_ttc; $newcartarray[$i]['price_ttc']=$product->price_ttc;
if (! empty($conf->global->PRODUIT_MULTIPRICES)) if (! empty($conf->global->PRODUIT_MULTIPRICES))
{ {
if (isset($product->multiprices[$societe->price_level])) if (isset($product->multiprices[$societe->price_level]))
@ -148,7 +156,7 @@ class Facturation
$newcartarray[$i]['fk_article']=$this->id; $newcartarray[$i]['fk_article']=$this->id;
$newcartarray[$i]['qte']=$this->qte(); $newcartarray[$i]['qte']=$this->qte();
$newcartarray[$i]['fk_tva']=$this->tva(); $newcartarray[$i]['fk_tva']=$this->tva(); // Vat rowid
$newcartarray[$i]['remise_percent']=$remise_percent; $newcartarray[$i]['remise_percent']=$remise_percent;
$newcartarray[$i]['remise']=price2num($montant_remise_ht); $newcartarray[$i]['remise']=price2num($montant_remise_ht);
$newcartarray[$i]['total_ht']=price2num($total_ht,'MT'); $newcartarray[$i]['total_ht']=price2num($total_ht,'MT');
@ -220,7 +228,7 @@ class Facturation
$this->prix_total_vat = $total_vat; $this->prix_total_vat = $total_vat;
$this->prix_total_localtax1 = $total_localtax1; $this->prix_total_localtax1 = $total_localtax1;
$this->prix_total_localtax2 = $total_localtax2; $this->prix_total_localtax2 = $total_localtax2;
$this->montant_tva = $total_ttc - $total_ht; $this->montant_tva = $total_ttc - $total_ht;
//print $this->prix_total_ttc.'eeee'; exit; //print $this->prix_total_ttc.'eeee'; exit;
} }

View File

@ -35,7 +35,7 @@
$form=new Form($db); $form=new Form($db);
// Get list of articles (in warehouse '$conf_fkentrepot' if defined and stock module enabled) // Get list of articles (in warehouse '$conf_fkentrepot' if defined and stock module enabled)
if ( GETPOST('filtre') ) { if ( GETPOST('filtre','alpha') ) {
// Avec filtre // Avec filtre
$ret=array(); $i=0; $ret=array(); $i=0;
@ -47,22 +47,23 @@ if ( GETPOST('filtre') ) {
$sql.= " WHERE p.entity IN (".getEntity('product', 1).")"; $sql.= " WHERE p.entity IN (".getEntity('product', 1).")";
$sql.= " AND p.tosell = 1"; $sql.= " AND p.tosell = 1";
if(!$conf->global->CASHDESK_SERVICES) $sql.= " AND p.fk_product_type = 0"; if(!$conf->global->CASHDESK_SERVICES) $sql.= " AND p.fk_product_type = 0";
$sql.= " AND (p.ref LIKE '%".$db->escape(GETPOST('filtre'))."%' OR p.label LIKE '%".$db->escape(GETPOST('filtre'))."%'"; $sql.= " AND (";
if (! empty($conf->barcode->enabled)) { $sql.= "p.ref LIKE '%".$db->escape(GETPOST('filtre'))."%' OR p.label LIKE '%".$db->escape(GETPOST('filtre'))."%'";
if (! empty($conf->barcode->enabled))
$filtre = GETPOST('filtre'); {
$filtre = GETPOST('filtre','alpha');
//If the barcode looks like an EAN13 format and the last digit is included in it, //If the barcode looks like an EAN13 format and the last digit is included in it,
//then whe look for the 12-digit too //then whe look for the 12-digit too
//As the twelve-digit string will also hit the 13-digit code, we only look for this one //As the twelve-digit string will also hit the 13-digit code, we only look for this one
if (strlen($filtre) == 13) { if (strlen($filtre) == 13) {
$crit_12digit = substr($filtre, 0, 12); $crit_12digit = substr($filtre, 0, 12);
$sql .= " OR p.barcode LIKE '%".$db->escape($crit_12digit)."%')"; $sql .= " OR p.barcode LIKE '%".$db->escape($crit_12digit)."%'";
} else { } else {
$sql.= " OR p.barcode LIKE '%".$db->escape($filtre)."%')"; $sql.= " OR p.barcode LIKE '%".$db->escape($filtre)."%'";
} }
} }
else $sql.= ")"; $sql.= ")";
$sql.= " ORDER BY label"; $sql.= " ORDER BY label";
dol_syslog("facturation.php", LOG_DEBUG); dol_syslog("facturation.php", LOG_DEBUG);
@ -154,34 +155,6 @@ global $mysoc;
$ret=array(); $ret=array();
$i=0; $i=0;
$sql = "SELECT t.rowid, t.taux";
$sql.= " FROM ".MAIN_DB_PREFIX."c_tva as t";
$sql.= ", ".MAIN_DB_PREFIX."c_country as c";
$sql.= " WHERE t.fk_pays = c.rowid";
$sql.= " AND t.active = 1";
$sql.= " AND c.code = '".$mysoc->country_code."'";
//print $sql;
$resql = $db->query($sql);
if ($resql)
{
while ( $tab = $db->fetch_array($resql) )
{
foreach ( $tab as $cle => $valeur )
{
$ret[$i][$cle] = $valeur;
}
$i++;
}
$db->free($resql);
}
else
{
dol_print_error($db);
}
$tab_tva = $ret;
// Reinitialisation du mode de paiement, en cas de retour aux achats apres validation // Reinitialisation du mode de paiement, en cas de retour aux achats apres validation
$obj_facturation->getSetPaymentMode('RESET'); $obj_facturation->getSetPaymentMode('RESET');
$obj_facturation->montantEncaisse('RESET'); $obj_facturation->montantEncaisse('RESET');

View File

@ -32,12 +32,12 @@ $obj_facturation = unserialize($_SESSION['serObjFacturation']);
unset ($_SESSION['serObjFacturation']); unset ($_SESSION['serObjFacturation']);
switch ( $_GET['action'] ) switch (GETPOST('action','alpha'))
{ {
default: default:
if ( $_POST['hdnSource'] != 'NULL' ) if ( $_POST['hdnSource'] != 'NULL' )
{ {
$sql = "SELECT p.rowid, p.ref, p.price, p.tva_tx, p.recuperableonly"; $sql = "SELECT p.rowid, p.ref, p.price, p.tva_tx, p.default_vat_code, p.recuperableonly";
if (! empty($conf->stock->enabled) && !empty($conf_fkentrepot)) $sql.= ", ps.reel"; if (! empty($conf->stock->enabled) && !empty($conf_fkentrepot)) $sql.= ", ps.reel";
$sql.= " FROM ".MAIN_DB_PREFIX."product as p"; $sql.= " FROM ".MAIN_DB_PREFIX."product as p";
if (! empty($conf->stock->enabled) && !empty($conf_fkentrepot)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_stock as ps ON p.rowid = ps.fk_product AND ps.fk_entrepot = ".$conf_fkentrepot; if (! empty($conf->stock->enabled) && !empty($conf_fkentrepot)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_stock as ps ON p.rowid = ps.fk_product AND ps.fk_entrepot = ".$conf_fkentrepot;
@ -54,7 +54,6 @@ switch ( $_GET['action'] )
} }
$result = $db->query($sql); $result = $db->query($sql);
if ($result) if ($result)
{ {
// ... et enregistrement dans l'objet // ... et enregistrement dans l'objet
@ -67,62 +66,90 @@ switch ( $_GET['action'] )
$ret[$key] = $value; $ret[$key] = $value;
} }
// Here $ret['tva_tx'] is vat rate of product but we want to not use the one into table but found by function // Here $ret['tva_tx'] is vat rate of product but we want to not use the one into table but found by function
$productid = $ret['rowid']; $productid = $ret['rowid'];
$product = new Product($db); $product = new Product($db);
$product->fetch($productid); $product->fetch($productid);
$prod = $product;
$thirdpartyid = $_SESSION['CASHDESK_ID_THIRDPARTY']; $thirdpartyid = $_SESSION['CASHDESK_ID_THIRDPARTY'];
$societe = new Societe($db); $societe = new Societe($db);
$societe->fetch($thirdpartyid); $societe->fetch($thirdpartyid);
$tva_tx = get_default_tva($mysoc,$societe,$productid); // Update if prices fields are defined
$tva_npr = get_default_npr($mysoc,$societe,$productid); $tva_tx = get_default_tva($mysoc, $societe, $product->id);
$tva_npr = get_default_npr($mysoc, $societe, $product->id);
if (empty($tva_tx)) $tva_npr=0; if (empty($tva_tx)) $tva_npr=0;
dol_syslog('tva_tx='.$tva_tx.'-tva_npr='.$tva_npr);
$pu_ht = $prod->price;
$pu_ttc = $prod->price_ttc;
$price_min = $prod->price_min;
$price_base_type = $prod->price_base_type;
// multiprix
if (! empty($conf->global->PRODUIT_MULTIPRICES) && ! empty($societe->price_level)) if (! empty($conf->global->PRODUIT_MULTIPRICES) && ! empty($societe->price_level))
{ {
if(isset($product->multiprices[$societe->price_level])) $pu_ht = $prod->multiprices[$societe->price_level];
{ $pu_ttc = $prod->multiprices_ttc[$societe->price_level];
$ret['price'] = $product->multiprices[$societe->price_level]; $price_min = $prod->multiprices_min[$societe->price_level];
$ret['price_ttc'] = $product->multiprices_ttc[$societe->price_level]; $price_base_type = $prod->multiprices_base_type[$societe->price_level];
// $product->multiprices_min[$societe->price_level]; if (! empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) // using this option is a bug. kept for backward compatibility
// $product->multiprices_min_ttc[$societe->price_level]; {
// $product->multiprices_base_type[$societe->price_level]; if (isset($prod->multiprices_tva_tx[$societe->price_level])) $tva_tx=$prod->multiprices_tva_tx[$societe->price_level];
if (! empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) // using this option is a bug. kept for backward compatibility if (isset($prod->multiprices_recuperableonly[$societe->price_level])) $tva_npr=$prod->multiprices_recuperableonly[$societe->price_level];
{ }
if (isset($prod->multiprices_tva_tx[$societe->price_level])) $tva_tx=$prod->multiprices_tva_tx[$societe->price_level]; }
if (isset($prod->multiprices_recuperableonly[$societe->price_level])) $tva_npr=$prod->multiprices_recuperableonly[$societe->price_level]; elseif (! empty($conf->global->PRODUIT_CUSTOMER_PRICES))
if (empty($tva_tx)) $tva_npr=0; {
} require_once DOL_DOCUMENT_ROOT . '/product/class/productcustomerprice.class.php';
}
$prodcustprice = new Productcustomerprice($db);
$filter = array('t.fk_product' => $prod->id,'t.fk_soc' => $societe->id);
$result = $prodcustprice->fetch_all('', '', 0, 0, $filter);
if ($result >= 0)
{
if (count($prodcustprice->lines) > 0)
{
$pu_ht = price($prodcustprice->lines [0]->price);
$pu_ttc = price($prodcustprice->lines [0]->price_ttc);
$price_base_type = $prodcustprice->lines [0]->price_base_type;
$tva_tx = $prodcustprice->lines [0]->tva_tx;
}
}
else
{
setEventMessages($prodcustprice->error, $prodcustprice->errors, 'errors');
}
}
$tmpvat = price2num(preg_replace('/\s*\(.*\)/', '', $tva_tx));
$tmpprodvat = price2num(preg_replace('/\s*\(.*\)/', '', $prod->tva_tx));
// if price ht is forced (ie: calculated by margin rate and cost price). TODO Why this ?
if (! empty($price_ht)) {
$pu_ht = price2num($price_ht, 'MU');
$pu_ttc = price2num($pu_ht * (1 + ($tmpvat / 100)), 'MU');
}
// On reevalue prix selon taux tva car taux tva transaction peut etre different
// de ceux du produit par defaut (par exemple si pays different entre vendeur et acheteur).
elseif ($tmpvat != $tmpprodvat) {
if ($price_base_type != 'HT') {
$pu_ht = price2num($pu_ttc / (1 + ($tmpvat / 100)), 'MU');
} else {
$pu_ttc = price2num($pu_ht * (1 + ($tmpvat / 100)), 'MU');
}
} }
$ret['tva_tx'] = $tva_tx;
$ret['tva_npr'] = $tva_npr;
//var_dump('tva_tx='.$ret['tva_tx'].'-tva_npr='.$ret['tva_npr'].'-'.$conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL);exit;
$obj_facturation->id($ret['rowid']); $obj_facturation->id($ret['rowid']);
$obj_facturation->ref($ret['ref']); $obj_facturation->ref($ret['ref']);
$obj_facturation->stock($ret['reel']); $obj_facturation->stock($ret['reel']);
$obj_facturation->prix($ret['price']); $obj_facturation->prix($ret['price']);
// Use $ret['tva_tx'] / ret['tva_npr'] to find vat id
$vatrowid = null; $vatrate = $tva_tx;
$sqlfindvatid = 'SELECT rowid FROM '.MAIN_DB_PREFIX.'c_tva'; $obj_facturation->vatrate = $vatrate; // Save vat rate (full text vat with code)
$sqlfindvatid.= ' WHERE taux = '.$ret['tva_tx'].' AND recuperableonly = '.(int) $ret['tva_npr'];
$sqlfindvatid.= ' AND fk_pays = '.$mysoc->country_id;
$resqlfindvatid=$db->query($sqlfindvatid);
if ($resqlfindvatid)
{
$obj = $db->fetch_object($resqlfindvatid);
if ($obj) $vatrowid = $obj->rowid;
}
else dol_print_error($db);
dol_syslog("save vatrowid=".$vatrowid);
$obj_facturation->tva($vatrowid); // Save vat it for next use
// Definition du filtre pour n'afficher que le produit concerne // Definition du filtre pour n'afficher que le produit concerne
if ( $_POST['hdnSource'] == 'LISTE' ) if ( $_POST['hdnSource'] == 'LISTE' )
@ -168,11 +195,11 @@ switch ( $_GET['action'] )
{ {
dol_syslog("facturation_verif save vat ".$_POST['selTva']); dol_syslog("facturation_verif save vat ".$_POST['selTva']);
$obj_facturation->qte($_POST['txtQte']); $obj_facturation->qte($_POST['txtQte']);
$obj_facturation->tva($_POST['selTva']); // Save VAT selected so we can use it for next product $obj_facturation->tva($_POST['selTva']); // id of vat. Saved so we can use it for next product
$obj_facturation->remisePercent($_POST['txtRemise']); $obj_facturation->remisePercent($_POST['txtRemise']);
$obj_facturation->ajoutArticle(); // This add an entry into $_SESSION['poscart'] $obj_facturation->ajoutArticle(); // This add an entry into $_SESSION['poscart']
// We update prixTotalTtc // We update prixTotalTtc
} }
$redirection = DOL_URL_ROOT.'/cashdesk/affIndex.php?menutpl=facturation'; $redirection = DOL_URL_ROOT.'/cashdesk/affIndex.php?menutpl=facturation';

View File

@ -125,12 +125,12 @@ $langs->load("cashdesk");
<td><input class="texte1_off maxwidth50onsmartphone" type="text" name="txtTotal" value="" disabled /></td><td></td> <td><input class="texte1_off maxwidth50onsmartphone" type="text" name="txtTotal" value="" disabled /></td><td></td>
<!-- Choix du taux de TVA --> <!-- Choix du taux de TVA -->
<td class="select_tva"> <td class="select_tva">
<?php //var_dump($tab_tva); <?php
$tva_tx = $obj_facturation->tva(); // Try to get a previously entered VAT rowid. First time, this will return empty. $vatrate = $obj_facturation->vatrate; // To get vat rate we just have selected
$buyer = new Societe($db); $buyer = new Societe($db);
if ($_SESSION["CASHDESK_ID_THIRDPARTY"] > 0) $buyer->fetch($_SESSION["CASHDESK_ID_THIRDPARTY"]); if ($_SESSION["CASHDESK_ID_THIRDPARTY"] > 0) $buyer->fetch($_SESSION["CASHDESK_ID_THIRDPARTY"]);
echo $form->load_tva('selTva', (isset($_POST["selTva"])?GETPOST("selTva",'alpha',2):$vatrate), $mysoc, $buyer, 0, 0, '', false, -1);
echo $form->load_tva('selTva', (isset($_POST["selTva"])?GETPOST("selTva",'alpha',2):-1), $mysoc, $buyer, 0, 0, '', false, -1);
?> ?>
</td> </td>
</tr> </tr>

View File

@ -165,6 +165,7 @@ switch ($action)
$tmp = getTaxesFromId($tab_liste[$i]['fk_tva']); $tmp = getTaxesFromId($tab_liste[$i]['fk_tva']);
$vat_rate = $tmp['rate']; $vat_rate = $tmp['rate'];
$vat_npr = $tmp['npr']; $vat_npr = $tmp['npr'];
$vat_src_code = $tmp['code'];
$invoiceline=new FactureLigne($db); $invoiceline=new FactureLigne($db);
$invoiceline->fk_product=$tab_liste[$i]['fk_article']; $invoiceline->fk_product=$tab_liste[$i]['fk_article'];
@ -173,15 +174,17 @@ switch ($action)
$invoiceline->remise_percent=$tab_liste[$i]['remise_percent']; $invoiceline->remise_percent=$tab_liste[$i]['remise_percent'];
$invoiceline->price=$tab_liste[$i]['price']; $invoiceline->price=$tab_liste[$i]['price'];
$invoiceline->subprice=$tab_liste[$i]['price']; $invoiceline->subprice=$tab_liste[$i]['price'];
$invoiceline->tva_tx=empty($vat_rate)?0:$vat_rate; // works even if vat_rate is '' $invoiceline->tva_tx=empty($vat_rate)?0:$vat_rate; // works even if vat_rate is ''
$invoiceline->info_bits=empty($vat_npr)?0:$vat_npr; $invoiceline->info_bits=empty($vat_npr)?0:$vat_npr;
$invoiceline->vat_src_code=$vat_src_code;
$invoiceline->total_ht=$tab_liste[$i]['total_ht']; $invoiceline->total_ht=$tab_liste[$i]['total_ht'];
$invoiceline->total_ttc=$tab_liste[$i]['total_ttc']; $invoiceline->total_ttc=$tab_liste[$i]['total_ttc'];
$invoiceline->total_tva=$tab_liste[$i]['total_vat']; $invoiceline->total_tva=$tab_liste[$i]['total_vat'];
$invoiceline->total_localtax1=$tab_liste[$i]['total_localtax1']; $invoiceline->total_localtax1=$tab_liste[$i]['total_localtax1'];
$invoiceline->total_localtax2=$tab_liste[$i]['total_localtax2']; $invoiceline->total_localtax2=$tab_liste[$i]['total_localtax2'];
$invoice->lines[]=$invoiceline; $invoice->lines[]=$invoiceline;
} }
@ -205,7 +208,7 @@ switch ($action)
{ {
$warehouseidtodecrease=(isset($_SESSION["CASHDESK_ID_WAREHOUSE"])?$_SESSION["CASHDESK_ID_WAREHOUSE"]:0); $warehouseidtodecrease=(isset($_SESSION["CASHDESK_ID_WAREHOUSE"])?$_SESSION["CASHDESK_ID_WAREHOUSE"]:0);
if (! empty($conf->global->CASHDESK_NO_DECREASE_STOCK)) $warehouseidtodecrease=0; // If a particular stock is defined, we disable choice if (! empty($conf->global->CASHDESK_NO_DECREASE_STOCK)) $warehouseidtodecrease=0; // If a particular stock is defined, we disable choice
$resultvalid=$invoice->validate($user, $obj_facturation->numInvoice(), 0); $resultvalid=$invoice->validate($user, $obj_facturation->numInvoice(), 0);
if ($warehouseidtodecrease > 0) if ($warehouseidtodecrease > 0)
@ -245,7 +248,7 @@ switch ($action)
{ {
$warehouseidtodecrease=(isset($_SESSION["CASHDESK_ID_WAREHOUSE"])?$_SESSION["CASHDESK_ID_WAREHOUSE"]:0); $warehouseidtodecrease=(isset($_SESSION["CASHDESK_ID_WAREHOUSE"])?$_SESSION["CASHDESK_ID_WAREHOUSE"]:0);
if (! empty($conf->global->CASHDESK_NO_DECREASE_STOCK)) $warehouseidtodecrease=0; // If a particular stock is defined, we disable choice if (! empty($conf->global->CASHDESK_NO_DECREASE_STOCK)) $warehouseidtodecrease=0; // If a particular stock is defined, we disable choice
$resultvalid=$invoice->validate($user, $obj_facturation->numInvoice(), 0); $resultvalid=$invoice->validate($user, $obj_facturation->numInvoice(), 0);
if ($warehouseidtodecrease > 0) if ($warehouseidtodecrease > 0)

View File

@ -1868,7 +1868,7 @@ class Propal extends CommonObject
{ {
$this->oldcopy= clone $this; $this->oldcopy= clone $this;
$this->fk_availability = $id; $this->fk_availability = $id;
$this->availability_id = $availability_id; $this->availability_id = $id;
} }
if (! $notrigger && empty($error)) if (! $notrigger && empty($error))

View File

@ -3938,6 +3938,9 @@ else if ($id > 0 || ! empty($ref))
} }
} }
$discount = new DiscountAbsolute($db);
$result = $discount->fetch(0, $object->id);
// Reopen a standard paid invoice // Reopen a standard paid invoice
if ((($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_REPLACEMENT) if ((($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_REPLACEMENT)
|| ($object->type == Facture::TYPE_CREDIT_NOTE && empty($discount->id)) || ($object->type == Facture::TYPE_CREDIT_NOTE && empty($discount->id))

View File

@ -519,9 +519,12 @@ class Facture extends CommonInvoice
{ {
$newinvoiceline=$this->lines[$i]; $newinvoiceline=$this->lines[$i];
$newinvoiceline->fk_facture=$this->id; $newinvoiceline->fk_facture=$this->id;
$newinvoiceline->origin = $this->element; // TODO This seems not used. Here we but origin 'facture' but after
$newinvoiceline->origin_id = $this->lines[$i]->id; // we put an id of object ! // TODO This seems not used. Here we put origin 'facture' but after, we put an id of object !
if ($result >= 0 && ($newinvoiceline->info_bits & 0x01) == 0) // We keep only lines with first bit = 0 $newinvoiceline->origin = $this->element;
$newinvoiceline->origin_id = $this->lines[$i]->id;
if ($result >= 0)
{ {
// Reset fk_parent_line for no child products and special product // Reset fk_parent_line for no child products and special product
if (($newinvoiceline->product_type != 9 && empty($newinvoiceline->fk_parent_line)) || $newinvoiceline->product_type == 9) { if (($newinvoiceline->product_type != 9 && empty($newinvoiceline->fk_parent_line)) || $newinvoiceline->product_type == 9) {
@ -558,7 +561,7 @@ class Facture extends CommonInvoice
//if (! is_object($line)) $line=json_decode(json_encode($line), FALSE); // convert recursively array into object. //if (! is_object($line)) $line=json_decode(json_encode($line), FALSE); // convert recursively array into object.
if (! is_object($line)) $line = (object) $line; if (! is_object($line)) $line = (object) $line;
if (($line->info_bits & 0x01) == 0) // We keep only lines with first bit = 0 if ($result >= 0)
{ {
// Reset fk_parent_line for no child products and special product // Reset fk_parent_line for no child products and special product
if (($line->product_type != 9 && empty($line->fk_parent_line)) || $line->product_type == 9) { if (($line->product_type != 9 && empty($line->fk_parent_line)) || $line->product_type == 9) {

View File

@ -44,6 +44,21 @@ class box_actions extends ModeleBoxes
var $info_box_contents = array(); var $info_box_contents = array();
/**
* Constructor
*
* @param DoliDB $db Database handler
* @param string $param More parameters
*/
function __construct($db,$param='')
{
global $user;
$this->db = $db;
$this->hidden = ! ($user->rights->agenda->myactions->read);
}
/** /**
* Load data for box to show them later * Load data for box to show them later
* *
@ -173,8 +188,8 @@ class box_actions extends ModeleBoxes
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
global $langs, $conf; global $langs, $conf;
parent::showBox($this->info_box_head, $this->info_box_contents); $out = parent::showBox($this->info_box_head, $this->info_box_contents);
$out='';
if (! empty($conf->global->SHOW_DIALOG_HOMEPAGE)) if (! empty($conf->global->SHOW_DIALOG_HOMEPAGE))
{ {
$actioncejour=false; $actioncejour=false;

View File

@ -51,11 +51,17 @@ class box_activity extends ModeleBoxes
*/ */
function __construct($db,$param) function __construct($db,$param)
{ {
global $conf; global $conf, $user;
$this->db=$db; $this->db=$db;
// FIXME: Pb into some status // FIXME: Pb into some status
$this->enabled=$conf->global->MAIN_FEATURES_LEVEL; // Not enabled by default due to bugs (see previous comments) $this->enabled=($conf->global->MAIN_FEATURES_LEVEL); // Not enabled by default due to bugs (see previous comments)
$this->hidden= ! ((! empty($conf->facture->enabled) && $user->rights->facture->lire)
|| (! empty($conf->commande->enabled) && $user->rights->commande->lire)
|| (! empty($conf->propal->enabled) && $user->rights->propale->lire)
);
} }
/** /**
@ -352,7 +358,7 @@ class box_activity extends ModeleBoxes
} }
// list the summary of the propals // list the summary of the propals
if (! empty($conf->propal->enabled) && $user->rights->propal->lire) if (! empty($conf->propal->enabled) && $user->rights->propale->lire)
{ {
include_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; include_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php';
$propalstatic=new Propal($db); $propalstatic=new Propal($db);
@ -456,10 +462,10 @@ class box_activity extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -40,6 +40,21 @@ class box_bookmarks extends ModeleBoxes
var $info_box_contents = array(); var $info_box_contents = array();
/**
* Constructor
*
* @param DoliDB $db Database handler
* @param string $param More parameters
*/
function __construct($db,$param)
{
global $user;
$this->db=$db;
$this->hidden=! ($user->rights->bookmark->lire);
}
/** /**
* Load data for box to show them later * Load data for box to show them later
* *
@ -136,11 +151,11 @@ class box_bookmarks extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -58,6 +58,8 @@ class box_clients extends ModeleBoxes
// disable box for such cases // disable box for such cases
if (! empty($conf->global->SOCIETE_DISABLE_CUSTOMERS)) $this->enabled=0; // disabled by this option if (! empty($conf->global->SOCIETE_DISABLE_CUSTOMERS)) $this->enabled=0; // disabled by this option
$this->hidden = ! ($user->rights->societe->lire && empty($user->socid));
} }
/** /**
@ -158,11 +160,11 @@ class box_clients extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -44,6 +44,21 @@ class box_commandes extends ModeleBoxes
var $info_box_contents = array(); var $info_box_contents = array();
/**
* Constructor
*
* @param DoliDB $db Database handler
* @param string $param More parameters
*/
function __construct($db,$param)
{
global $user;
$this->db=$db;
$this->hidden=! ($user->rights->commande->lire);
}
/** /**
* Load data for box to show them later * Load data for box to show them later
* *
@ -177,11 +192,11 @@ class box_commandes extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -61,6 +61,8 @@ class box_comptes extends ModeleBoxes
// disable module for such cases // disable module for such cases
$listofmodulesforexternal=explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL); $listofmodulesforexternal=explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL);
if (! in_array('banque',$listofmodulesforexternal) && ! empty($user->societe_id)) $this->enabled=0; // disabled for external users if (! in_array('banque',$listofmodulesforexternal) && ! empty($user->societe_id)) $this->enabled=0; // disabled for external users
$this->hidden = ! ($user->rights->banque->lire);
} }
/** /**
@ -171,11 +173,11 @@ class box_comptes extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -45,6 +45,21 @@ class box_contacts extends ModeleBoxes
var $info_box_contents = array(); var $info_box_contents = array();
/**
* Constructor
*
* @param DoliDB $db Database handler
* @param string $param More parameters
*/
function __construct($db,$param)
{
global $user;
$this->db=$db;
$this->hidden=! ($user->rights->societe->lire);
}
/** /**
* Load data into info_box_contents array to show array later. * Load data into info_box_contents array to show array later.
* *
@ -164,11 +179,11 @@ class box_contacts extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -43,6 +43,21 @@ class box_contracts extends ModeleBoxes
var $info_box_contents = array(); var $info_box_contents = array();
/**
* Constructor
*
* @param DoliDB $db Database handler
* @param string $param More parameters
*/
function __construct($db,$param)
{
global $user;
$this->db=$db;
$this->hidden=! ($user->rights->contrat->lire);
}
/** /**
* Load data for box to show them later * Load data for box to show them later
* *
@ -160,11 +175,11 @@ class box_contracts extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -185,11 +185,11 @@ class box_external_rss extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -42,6 +42,21 @@ class box_factures extends ModeleBoxes
var $info_box_contents = array(); var $info_box_contents = array();
/**
* Constructor
*
* @param DoliDB $db Database handler
* @param string $param More parameters
*/
function __construct($db,$param)
{
global $user;
$this->db=$db;
$this->hidden=! ($user->rights->facture->lire);
}
/** /**
* Load data into info_box_contents array to show array later. * Load data into info_box_contents array to show array later.
* *
@ -181,11 +196,11 @@ class box_factures extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -43,6 +43,21 @@ class box_factures_fourn extends ModeleBoxes
var $info_box_contents = array(); var $info_box_contents = array();
/**
* Constructor
*
* @param DoliDB $db Database handler
* @param string $param More parameters
*/
function __construct($db,$param)
{
global $user;
$this->db=$db;
$this->hidden=! ($user->rights->fournisseur->facture->lire);
}
/** /**
* Load data into info_box_contents array to show array later. * Load data into info_box_contents array to show array later.
* *
@ -190,11 +205,11 @@ class box_factures_fourn extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -42,6 +42,21 @@ class box_factures_fourn_imp extends ModeleBoxes
var $info_box_contents = array(); var $info_box_contents = array();
/**
* Constructor
*
* @param DoliDB $db Database handler
* @param string $param More parameters
*/
function __construct($db,$param)
{
global $user;
$this->db=$db;
$this->hidden=! ($user->rights->fournisseur->facture->lire);
}
/** /**
* Load data into info_box_contents array to show array later. * Load data into info_box_contents array to show array later.
* *
@ -181,11 +196,11 @@ class box_factures_fourn_imp extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -45,6 +45,21 @@ class box_factures_imp extends ModeleBoxes
var $info_box_contents = array(); var $info_box_contents = array();
/**
* Constructor
*
* @param DoliDB $db Database handler
* @param string $param More parameters
*/
function __construct($db,$param)
{
global $user;
$this->db=$db;
$this->hidden=! ($user->rights->facture->lire);
}
/** /**
* Load data into info_box_contents array to show array later. * Load data into info_box_contents array to show array later.
* *
@ -184,11 +199,11 @@ class box_factures_imp extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -43,6 +43,21 @@ class box_ficheinter extends ModeleBoxes
var $info_box_contents = array(); var $info_box_contents = array();
/**
* Constructor
*
* @param DoliDB $db Database handler
* @param string $param More parameters
*/
function __construct($db,$param)
{
global $user;
$this->db=$db;
$this->hidden=! ($user->rights->ficheinter->lire);
}
/** /**
* Load data for box to show them later * Load data for box to show them later
* *
@ -145,11 +160,11 @@ class box_ficheinter extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -43,6 +43,21 @@ class box_fournisseurs extends ModeleBoxes
var $info_box_contents = array(); var $info_box_contents = array();
/**
* Constructor
*
* @param DoliDB $db Database handler
* @param string $param More parameters
*/
function __construct($db,$param)
{
global $user;
$this->db=$db;
$this->hidden=! ($user->rights->societe->lire && empty($user->socid));
}
/** /**
* Load data into info_box_contents array to show array later. * Load data into info_box_contents array to show array later.
* *
@ -140,11 +155,11 @@ class box_fournisseurs extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -59,7 +59,9 @@ class box_goodcustomers extends ModeleBoxes
// disable box for such cases // disable box for such cases
if (! empty($conf->global->SOCIETE_DISABLE_CUSTOMERS)) $this->enabled=0; // disabled by this option if (! empty($conf->global->SOCIETE_DISABLE_CUSTOMERS)) $this->enabled=0; // disabled by this option
if (empty($conf->global->MAIN_BOX_ENABLE_BEST_CUSTOMERS)) $this->enabled=0; // not enabled by default. Very slow on large database if (empty($conf->global->MAIN_BOX_ENABLE_BEST_CUSTOMERS)) $this->enabled=0; // not enabled by default. Very slow on large database
$this->hidden = ! ($user->rights->societe->lire);
} }
/** /**
@ -160,11 +162,11 @@ class box_goodcustomers extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -47,9 +47,11 @@ class box_graph_invoices_permonth extends ModeleBoxes
*/ */
function __construct($db,$param) function __construct($db,$param)
{ {
global $conf; global $user;
$this->db=$db; $this->db=$db;
$this->hidden = ! ($user->rights->facture->lire);
} }
/** /**
@ -133,7 +135,7 @@ class box_graph_invoices_permonth extends ModeleBoxes
if (! $mesg) if (! $mesg)
{ {
$langs->load("bills"); $langs->load("bills");
$px1->SetData($data1); $px1->SetData($data1);
unset($data1); unset($data1);
$px1->SetPrecisionY(0); $px1->SetPrecisionY(0);
@ -266,11 +268,11 @@ class box_graph_invoices_permonth extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -47,9 +47,11 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes
*/ */
function __construct($db,$param) function __construct($db,$param)
{ {
global $conf; global $user;
$this->db=$db; $this->db=$db;
$this->hidden = ! ($user->rights->fournisseur->facture->lire);
} }
/** /**
@ -263,11 +265,11 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -47,9 +47,11 @@ class box_graph_orders_permonth extends ModeleBoxes
*/ */
function __construct($db,$param) function __construct($db,$param)
{ {
global $conf; global $user;
$this->db=$db; $this->db=$db;
$this->hidden = ! ($user->rights->commande->lire);
} }
/** /**
@ -264,11 +266,11 @@ class box_graph_orders_permonth extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -47,9 +47,11 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes
*/ */
function __construct($db,$param) function __construct($db,$param)
{ {
global $conf; global $user;
$this->db=$db; $this->db=$db;
$this->hidden = ! ($user->rights->fournisseur->commande->lire);
} }
/** /**
@ -263,11 +265,11 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -48,9 +48,15 @@ class box_graph_product_distribution extends ModeleBoxes
*/ */
function __construct($db,$param) function __construct($db,$param)
{ {
global $conf; global $user, $conf;
$this->db=$db; $this->db=$db;
$this->hidden = ! (
(! empty($conf->facture->enabled) && ! empty($user->rights->facture->lire))
|| (! empty($conf->commande->enabled) && ! empty($user->rights->commande->lire))
|| (! empty($conf->propal->enabled) && ! empty($user->rights->propale->lire))
);
} }
/** /**
@ -93,7 +99,7 @@ class box_graph_product_distribution extends ModeleBoxes
} }
if (empty($showinvoicenb) && empty($showpropalnb) && empty($showordernb)) { $showpropalnb=1; $showinvoicenb=1; $showordernb=1; } if (empty($showinvoicenb) && empty($showpropalnb) && empty($showordernb)) { $showpropalnb=1; $showinvoicenb=1; $showordernb=1; }
if (empty($conf->facture->enabled) || empty($user->rights->facture->lire)) $showinvoicenb=0; if (empty($conf->facture->enabled) || empty($user->rights->facture->lire)) $showinvoicenb=0;
if (empty($conf->propal->enabled) || empty($user->rights->propal->lire)) $showpropalnb=0; if (empty($conf->propal->enabled) || empty($user->rights->propale->lire)) $showpropalnb=0;
if (empty($conf->commande->enabled) || empty($user->rights->commande->lire)) $showordernb=0; if (empty($conf->commande->enabled) || empty($user->rights->commande->lire)) $showordernb=0;
$nowarray=dol_getdate(dol_now(),true); $nowarray=dol_getdate(dol_now(),true);
@ -188,7 +194,7 @@ class box_graph_product_distribution extends ModeleBoxes
} }
} }
if (! empty($conf->propal->enabled) && ! empty($user->rights->propal->lire)) if (! empty($conf->propal->enabled) && ! empty($user->rights->propale->lire))
{ {
// Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...)
if ($showpropalnb) if ($showpropalnb)
@ -250,7 +256,7 @@ class box_graph_product_distribution extends ModeleBoxes
if (! empty($conf->commande->enabled) && ! empty($user->rights->commande->lire)) if (! empty($conf->commande->enabled) && ! empty($user->rights->commande->lire))
{ {
$langs->load("orders"); $langs->load("orders");
// Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...)
if ($showordernb) if ($showordernb)
{ {
@ -334,7 +340,7 @@ class box_graph_product_distribution extends ModeleBoxes
$stringtoshow.='<input type="checkbox" name="'.$param_showinvoicenb.'"'.($showinvoicenb?' checked':'').'> '.$langs->trans("ForCustomersInvoices"); $stringtoshow.='<input type="checkbox" name="'.$param_showinvoicenb.'"'.($showinvoicenb?' checked':'').'> '.$langs->trans("ForCustomersInvoices");
$stringtoshow.=' &nbsp; '; $stringtoshow.=' &nbsp; ';
} }
if (! empty($conf->propal->enabled) || ! empty($user->rights->propal->lire)) if (! empty($conf->propal->enabled) || ! empty($user->rights->propale->lire))
{ {
$stringtoshow.='<input type="checkbox" name="'.$param_showpropalnb.'"'.($showpropalnb?' checked':'').'> '.$langs->trans("ForProposals"); $stringtoshow.='<input type="checkbox" name="'.$param_showpropalnb.'"'.($showpropalnb?' checked':'').'> '.$langs->trans("ForProposals");
$stringtoshow.='&nbsp;'; $stringtoshow.='&nbsp;';
@ -393,11 +399,11 @@ class box_graph_product_distribution extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -47,9 +47,11 @@ class box_graph_propales_permonth extends ModeleBoxes
*/ */
function __construct($db,$param) function __construct($db,$param)
{ {
global $conf; global $user;
$this->db=$db; $this->db=$db;
$this->hidden=! ($user->rights->propale->lire);
} }
/** /**
@ -87,7 +89,7 @@ class box_graph_propales_permonth extends ModeleBoxes
if ($user->societe_id) $socid=$user->societe_id; if ($user->societe_id) $socid=$user->societe_id;
if (! $user->rights->societe->client->voir || $socid) $prefix.='private-'.$user->id.'-'; // If user has no permission to see all, output dir is specific to user if (! $user->rights->societe->client->voir || $socid) $prefix.='private-'.$user->id.'-'; // If user has no permission to see all, output dir is specific to user
if ($user->rights->propal->lire) if ($user->rights->propale->lire)
{ {
$param_year='DOLUSERCOOKIE_box_'.$this->boxcode.'_year'; $param_year='DOLUSERCOOKIE_box_'.$this->boxcode.'_year';
$param_shownb='DOLUSERCOOKIE_box_'.$this->boxcode.'_shownb'; $param_shownb='DOLUSERCOOKIE_box_'.$this->boxcode.'_shownb';
@ -265,11 +267,11 @@ class box_graph_propales_permonth extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -60,6 +60,8 @@ class box_members extends ModeleBoxes
// disable module for such cases // disable module for such cases
$listofmodulesforexternal=explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL); $listofmodulesforexternal=explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL);
if (! in_array('adherent',$listofmodulesforexternal) && ! empty($user->societe_id)) $this->enabled=0; // disabled for external users if (! in_array('adherent',$listofmodulesforexternal) && ! empty($user->societe_id)) $this->enabled=0; // disabled for external users
$this->hidden=! ($user->rights->adherent->lire);
} }
/** /**
@ -170,11 +172,11 @@ class box_members extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -45,6 +45,21 @@ class box_produits extends ModeleBoxes
var $info_box_contents = array(); var $info_box_contents = array();
/**
* Constructor
*
* @param DoliDB $db Database handler
* @param string $param More parameters
*/
function __construct($db,$param)
{
global $user;
$this->db=$db;
$this->hidden=! ($user->rights->produit->lire || $user->rights->service->lire);
}
/** /**
* Load data into info_box_contents array to show array later. * Load data into info_box_contents array to show array later.
* *
@ -72,7 +87,7 @@ class box_produits extends ModeleBoxes
// Add where from hooks // Add where from hooks
if (is_object($hookmanager)) if (is_object($hookmanager))
{ {
$parameters=array(); $parameters=array('boxproductlist'=>1);
$reshook=$hookmanager->executeHooks('printFieldListWhere',$parameters); // Note that $action and $object may have been modified by hook $reshook=$hookmanager->executeHooks('printFieldListWhere',$parameters); // Note that $action and $object may have been modified by hook
$sql.=$hookmanager->resPrint; $sql.=$hookmanager->resPrint;
} }
@ -162,12 +177,14 @@ class box_produits extends ModeleBoxes
$this->info_box_contents[$line][] = array( $this->info_box_contents[$line][] = array(
'td' => 'align="right" width="18"', 'td' => 'align="right" width="18"',
'text' => $productstatic->LibStatut($objp->tosell,3,0), 'text' => '<span class="statusrefsell">'.$productstatic->LibStatut($objp->tosell,3,0).'<span>',
'asis' => 1
); );
$this->info_box_contents[$line][] = array( $this->info_box_contents[$line][] = array(
'td' => 'align="right" width="18"', 'td' => 'align="right" width="18"',
'text' => $productstatic->LibStatut($objp->tobuy,3,1), 'text' => '<span class="statusrefbuy">'.$productstatic->LibStatut($objp->tobuy,3,1).'</span>',
'asis' => 1
); );
$line++; $line++;
@ -200,11 +217,11 @@ class box_produits extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -47,6 +47,21 @@ class box_produits_alerte_stock extends ModeleBoxes
var $info_box_contents = array(); var $info_box_contents = array();
/**
* Constructor
*
* @param DoliDB $db Database handler
* @param string $param More parameters
*/
function __construct($db,$param='')
{
global $user;
$this->db = $db;
$this->hidden = ! (($user->rights->produit->lire || $user->rights->service->lire) && $user->rights->stock->lire);
}
/** /**
* Load data into info_box_contents array to show array later. * Load data into info_box_contents array to show array later.
* *
@ -64,7 +79,7 @@ class box_produits_alerte_stock extends ModeleBoxes
$this->info_box_head = array('text' => $langs->trans("BoxTitleProductsAlertStock",$max)); $this->info_box_head = array('text' => $langs->trans("BoxTitleProductsAlertStock",$max));
if ($user->rights->produit->lire || $user->rights->service->lire) if (($user->rights->produit->lire || $user->rights->service->lire) && $user->rights->stock->lire)
{ {
$sql = "SELECT p.rowid, p.label, p.price, p.ref, p.price_base_type, p.price_ttc, p.fk_product_type, p.tms, p.tosell, p.tobuy, p.seuil_stock_alerte, p.entity,"; $sql = "SELECT p.rowid, p.label, p.price, p.ref, p.price_base_type, p.price_ttc, p.fk_product_type, p.tms, p.tosell, p.tobuy, p.seuil_stock_alerte, p.entity,";
$sql.= " SUM(".$db->ifsql("s.reel IS NULL","0","s.reel").") as total_stock"; $sql.= " SUM(".$db->ifsql("s.reel IS NULL","0","s.reel").") as total_stock";
@ -77,7 +92,7 @@ class box_produits_alerte_stock extends ModeleBoxes
// Add where from hooks // Add where from hooks
if (is_object($hookmanager)) if (is_object($hookmanager))
{ {
$parameters=array(); $parameters=array('boxproductalertstocklist'=>1);
$reshook=$hookmanager->executeHooks('printFieldListWhere',$parameters); // Note that $action and $object may have been modified by hook $reshook=$hookmanager->executeHooks('printFieldListWhere',$parameters); // Note that $action and $object may have been modified by hook
$sql.=$hookmanager->resPrint; $sql.=$hookmanager->resPrint;
} }
@ -164,15 +179,22 @@ class box_produits_alerte_stock extends ModeleBoxes
'text' => $price_base_type, 'text' => $price_base_type,
); );
$this->info_box_contents[$line][] = array('td' => 'align="center"', $this->info_box_contents[$line][] = array(
'td' => 'align="center"',
'text' => $objp->total_stock . ' / '.$objp->seuil_stock_alerte, 'text' => $objp->total_stock . ' / '.$objp->seuil_stock_alerte,
'text2'=>img_warning($langs->transnoentitiesnoconv("StockLowerThanLimit"))); 'text2'=>img_warning($langs->transnoentitiesnoconv("StockLowerThanLimit")));
$this->info_box_contents[$line][] = array('td' => 'align="right" width="18"', $this->info_box_contents[$line][] = array(
'text' => $productstatic->LibStatut($objp->tosell,3,0)); 'td' => 'align="right" width="18"',
'text' => '<span class="statusrefsell">'.$productstatic->LibStatut($objp->tosell,3,0).'<span>',
'asis' => 1
);
$this->info_box_contents[$line][] = array('td' => 'align="right" width="18"', $this->info_box_contents[$line][] = array(
'text' => $productstatic->LibStatut($objp->tobuy,3,1)); 'td' => 'align="right" width="18"',
'text' => '<span class="statusrefbuy">'.$productstatic->LibStatut($objp->tobuy,3,0).'<span>',
'asis' => 1
);
$line++; $line++;
} }
@ -207,11 +229,11 @@ class box_produits_alerte_stock extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -48,12 +48,14 @@ class box_project extends ModeleBoxes
*/ */
function __construct($db,$param='') function __construct($db,$param='')
{ {
global $langs; global $user, $langs;
$langs->load("boxes"); $langs->load("boxes");
$langs->load("projects"); $langs->load("projects");
$this->db = $db; $this->db = $db;
$this->boxlabel="Projects"; $this->boxlabel="Projects";
$this->hidden=! ($user->rights->projet->lire);
} }
/** /**
@ -77,16 +79,16 @@ class box_project extends ModeleBoxes
// list the summary of the orders // list the summary of the orders
if ($user->rights->projet->lire) { if ($user->rights->projet->lire) {
include_once(DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'); include_once(DOL_DOCUMENT_ROOT.'/projet/class/project.class.php');
$projectstatic = new Project($this->db); $projectstatic = new Project($this->db);
$socid=$user->societe_id; $socid=$user->societe_id;
// Get list of project id allowed to user (in a string list separated by coma) // Get list of project id allowed to user (in a string list separated by coma)
$projectsListId=''; $projectsListId='';
if (! $user->rights->projet->all->lire) $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,0,1,$socid); if (! $user->rights->projet->all->lire) $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,0,1,$socid);
$sql = "SELECT p.rowid, p.ref, p.title, p.fk_statut, p.public"; $sql = "SELECT p.rowid, p.ref, p.title, p.fk_statut, p.public";
$sql.= " FROM ".MAIN_DB_PREFIX."projet as p"; $sql.= " FROM ".MAIN_DB_PREFIX."projet as p";
if($user->socid) $sql.= " INNER JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid=p.fk_soc"; if($user->socid) $sql.= " INNER JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid=p.fk_soc";
@ -96,7 +98,7 @@ class box_project extends ModeleBoxes
$sql.= " AND p.fk_statut = 1"; // Seulement les projets ouverts $sql.= " AND p.fk_statut = 1"; // Seulement les projets ouverts
if ($socid) $sql.= " AND (p.fk_soc IS NULL OR p.fk_soc = 0 OR p.fk_soc = ".$socid.")"; if ($socid) $sql.= " AND (p.fk_soc IS NULL OR p.fk_soc = 0 OR p.fk_soc = ".$socid.")";
if (! $user->rights->societe->client->voir && ! $socid) $sql.= " AND ((s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id.") OR (s.rowid IS NULL))"; if (! $user->rights->societe->client->voir && ! $socid) $sql.= " AND ((s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id.") OR (s.rowid IS NULL))";
$sql.= " ORDER BY p.datec DESC"; $sql.= " ORDER BY p.datec DESC";
//$sql.= $db->plimit($max, 0); //$sql.= $db->plimit($max, 0);
@ -156,7 +158,7 @@ class box_project extends ModeleBoxes
} }
if ($max < $num) if ($max < $num)
{ {
$this->info_box_contents[$i][0] = array('td' => 'colspan="5"', 'text' => '...'); $this->info_box_contents[$i][0] = array('td' => 'colspan="5"', 'text' => '...');
$i++; $i++;
} }
} }
@ -195,11 +197,11 @@ class box_project extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -44,6 +44,21 @@ class box_propales extends ModeleBoxes
var $info_box_contents = array(); var $info_box_contents = array();
/**
* Constructor
*
* @param DoliDB $db Database handler
* @param string $param More parameters
*/
function __construct($db,$param)
{
global $user;
$this->db=$db;
$this->hidden=! ($user->rights->propale->lire);
}
/** /**
* Load data into info_box_contents array to show array later. * Load data into info_box_contents array to show array later.
* *
@ -167,11 +182,11 @@ class box_propales extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -60,6 +60,8 @@ class box_prospect extends ModeleBoxes
// disable box for such cases // disable box for such cases
if (! empty($conf->global->SOCIETE_DISABLE_PROSPECTS)) $this->enabled=0; // disabled by this option if (! empty($conf->global->SOCIETE_DISABLE_PROSPECTS)) $this->enabled=0; // disabled by this option
$this->hidden=! ($user->rights->societe->lire && empty($user->socid));
} }
/** /**
@ -168,11 +170,11 @@ class box_prospect extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -43,6 +43,21 @@ class box_services_contracts extends ModeleBoxes
var $info_box_contents = array(); var $info_box_contents = array();
/**
* Constructor
*
* @param DoliDB $db Database handler
* @param string $param More parameters
*/
function __construct($db,$param)
{
global $user;
$this->db=$db;
$this->hidden=! ($user->rights->service->lire && $user->rights->contrat->lire);
}
/** /**
* Load data into info_box_contents array to show array later. * Load data into info_box_contents array to show array later.
* *
@ -173,11 +188,11 @@ class box_services_contracts extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -42,6 +42,21 @@ class box_services_expired extends ModeleBoxes
var $info_box_contents = array(); var $info_box_contents = array();
/**
* Constructor
*
* @param DoliDB $db Database handler
* @param string $param More parameters
*/
function __construct($db,$param)
{
global $user;
$this->db=$db;
$this->hidden=! ($user->rights->contrat->lire);
}
/** /**
* Load data for box to show them later * Load data for box to show them later
* *
@ -84,7 +99,7 @@ class box_services_expired extends ModeleBoxes
$i = 0; $i = 0;
$thirdpartytmp = new Societe($this->db); $thirdpartytmp = new Societe($this->db);
while ($i < $num) while ($i < $num)
{ {
$late=''; $late='';
@ -151,11 +166,11 @@ class box_services_expired extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -43,6 +43,21 @@ class box_supplier_orders extends ModeleBoxes
var $info_box_contents = array(); var $info_box_contents = array();
/**
* Constructor
*
* @param DoliDB $db Database handler
* @param string $param More parameters
*/
function __construct($db,$param)
{
global $user;
$this->db=$db;
$this->hidden=! ($user->rights->fournisseur->commande->lire);
}
/** /**
* Load data into info_box_contents array to show array later. * Load data into info_box_contents array to show array later.
* *
@ -172,11 +187,11 @@ class box_supplier_orders extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -42,6 +42,7 @@ class box_task extends ModeleBoxes
var $info_box_head = array(); var $info_box_head = array();
var $info_box_contents = array(); var $info_box_contents = array();
/** /**
* Constructor * Constructor
* *
@ -50,11 +51,13 @@ class box_task extends ModeleBoxes
*/ */
function __construct($db,$param='') function __construct($db,$param='')
{ {
global $langs; global $user, $langs;
$langs->load("boxes"); $langs->load("boxes");
$langs->load("projects"); $langs->load("projects");
$this->boxlabel="Tasks"; $this->boxlabel="Tasks";
$this->db = $db; $this->db = $db;
$this->hidden = ! ($user->rights->projet->lire);
} }
/** /**
@ -138,10 +141,10 @@ class box_task extends ModeleBoxes
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* @param int $nooutput No print, only return string * @param int $nooutput No print, only return string
* @return void * @return string
*/ */
function showBox($head = null, $contents = null, $nooutput=0) function showBox($head = null, $contents = null, $nooutput=0)
{ {
parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput); return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
} }
} }

View File

@ -49,10 +49,15 @@ class ModeleBoxes // Can't be abtract as it is instantiated to build "empty"
public $max = 5; public $max = 5;
/** /**
* @var int Status * @var int Condition to have widget enabled
*/ */
public $enabled=1; public $enabled=1;
/**
* @var int Condition to have widget visible (in most cases, permissions)
*/
public $hidden=0;
/** /**
* @var int Box definition database ID * @var int Box definition database ID
*/ */
@ -168,29 +173,29 @@ class ModeleBoxes // Can't be abtract as it is instantiated to build "empty"
} }
} }
/** /**
* Standard method to get content of a box * Standard method to get content of a box
* *
* @param array $head Array with properties of box title * @param array $head Array with properties of box title
* @param array $contents Array with properties of box lines * @param array $contents Array with properties of box lines
* *
* @return string * @return string
*/ */
function outputBox($head = null, $contents = null) function outputBox($head = null, $contents = null)
{ {
global $langs, $user, $conf; global $langs, $user, $conf;
// Trick to get result into a var from a function that makes print instead of return // Trick to get result into a var from a function that makes print instead of return
// TODO Replace ob_start with param nooutput=1 into showBox // TODO Replace ob_start with param nooutput=1 into showBox
ob_start(); ob_start();
$result = $this->showBox($head, $contents); $result = $this->showBox($head, $contents);
$output = ob_get_contents(); $output = ob_get_contents();
ob_end_clean(); ob_end_clean();
return $output; return $output;
} }
/** /**
* Standard method to show a box (usage by boxes not mandatory, a box can still use its own showBox function) * Standard method to show a box (usage by boxes not mandatory, a box can still use its own showBox function)
* *
@ -203,6 +208,8 @@ class ModeleBoxes // Can't be abtract as it is instantiated to build "empty"
{ {
global $langs, $user, $conf; global $langs, $user, $conf;
if (! empty($this->hidden)) return '\n<!-- Box ".get_class($this)." hidden -->\n'; // Nothing done if hidden (for example when user has no permission)
require_once DOL_DOCUMENT_ROOT .'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT .'/core/lib/files.lib.php';
$MAXLENGTHBOX=60; // Mettre 0 pour pas de limite $MAXLENGTHBOX=60; // Mettre 0 pour pas de limite
@ -365,13 +372,13 @@ class ModeleBoxes // Can't be abtract as it is instantiated to build "empty"
$out = "<!-- Box ".get_class($this)." from cache -->"; $out = "<!-- Box ".get_class($this)." from cache -->";
$out.= dol_readcachefile($cachedir, $filename); $out.= dol_readcachefile($cachedir, $filename);
} }
if ($nooutput) return $out; if ($nooutput) return $out;
else print $out; else print $out;
return ''; return '';
} }
} }

View File

@ -1335,7 +1335,11 @@ abstract class CommonObject
if (empty($this->isnolinkedbythird) && !$user->rights->societe->client->voir) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$alias.".rowid = sc.fk_soc"; if (empty($this->isnolinkedbythird) && !$user->rights->societe->client->voir) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON ".$alias.".rowid = sc.fk_soc";
$sql.= " WHERE te.".$fieldid." > '".$this->db->escape($this->ref)."'"; // ->ref must always be defined (set to id if field does not exists) $sql.= " WHERE te.".$fieldid." > '".$this->db->escape($this->ref)."'"; // ->ref must always be defined (set to id if field does not exists)
if (empty($this->isnolinkedbythird) && !$user->rights->societe->client->voir) $sql.= " AND sc.fk_user = " .$user->id; if (empty($this->isnolinkedbythird) && !$user->rights->societe->client->voir) $sql.= " AND sc.fk_user = " .$user->id;
if (! empty($filter)) $sql.=" AND ".$filter; if (! empty($filter))
{
if (! preg_match('/^\s*AND/i', $filter)) $sql.=" AND "; // For backward compatibility
$sql.=$filter;
}
if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2 || ($this->element != 'societe' && empty($this->isnolinkedbythird) && !$user->rights->societe->client->voir)) $sql.= ' AND te.fk_soc = s.rowid'; // If we need to link to societe to limit select to entity if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 2 || ($this->element != 'societe' && empty($this->isnolinkedbythird) && !$user->rights->societe->client->voir)) $sql.= ' AND te.fk_soc = s.rowid'; // If we need to link to societe to limit select to entity
if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) $sql.= ' AND te.entity IN ('.getEntity($this->element, 1).')'; if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) $sql.= ' AND te.entity IN ('.getEntity($this->element, 1).')';
// Rem: Bug in some mysql version: SELECT MIN(rowid) FROM llx_socpeople WHERE rowid > 1 when one row in database with rowid=1, returns 1 instead of null // Rem: Bug in some mysql version: SELECT MIN(rowid) FROM llx_socpeople WHERE rowid > 1 when one row in database with rowid=1, returns 1 instead of null

View File

@ -320,7 +320,7 @@ class FormOther
{ {
dol_syslog(__METHOD__ . ': using numeric value for parameter type is deprecated. Use string code instead.', LOG_WARNING); dol_syslog(__METHOD__ . ': using numeric value for parameter type is deprecated. Use string code instead.', LOG_WARNING);
} }
// Load list of "categories" // Load list of "categories"
$static_categs = new Categorie($this->db); $static_categs = new Categorie($this->db);
$tab_categs = $static_categs->get_full_arbo($type); $tab_categs = $static_categs->get_full_arbo($type);
@ -409,7 +409,7 @@ class FormOther
$sql_usr.= " WHERE u2.entity IN (0,".$conf->entity.")"; $sql_usr.= " WHERE u2.entity IN (0,".$conf->entity.")";
$sql_usr.= " AND u2.rowid = sc.fk_user AND sc.fk_soc=".$user->societe_id; $sql_usr.= " AND u2.rowid = sc.fk_user AND sc.fk_soc=".$user->societe_id;
} }
$sql_usr.= " ORDER BY u.statut DESC, lastname ASC"; $sql_usr.= " ORDER BY statut DESC, lastname ASC"; // Do not use 'ORDER BY u.statut' here, not compatible with the UNION.
//print $sql_usr;exit; //print $sql_usr;exit;
$resql_usr = $this->db->query($sql_usr); $resql_usr = $this->db->query($sql_usr);
@ -621,12 +621,12 @@ class FormOther
$b = hexdec($hexb); $b = hexdec($hexb);
} }
$bright = (max($r, $g, $b) + min($r, $g, $b)) / 510.0; // HSL algorithm $bright = (max($r, $g, $b) + min($r, $g, $b)) / 510.0; // HSL algorithm
if ($bright > 0.6) $textcolor='000'; if ($bright > 0.6) $textcolor='000';
} }
include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
$color = colorArrayToHex(colorStringToArray($color,array()),''); $color = colorArrayToHex(colorStringToArray($color,array()),'');
if ($color) print '<input type="text" class="colorthumb" disabled style="padding: 1px; margin-top: 0; margin-bottom: 0; color: #'.$textcolor.'; background-color: #'.$color.'" value="'.$color.'">'; if ($color) print '<input type="text" class="colorthumb" disabled style="padding: 1px; margin-top: 0; margin-bottom: 0; color: #'.$textcolor.'; background-color: #'.$color.'" value="'.$color.'">';
else print $textifnotdefined; else print $textifnotdefined;
} }
@ -989,7 +989,7 @@ class FormOther
* Class 'Form' must be known. * Class 'Form' must be known.
* *
* @param User $user Object User * @param User $user Object User
* @param String $areacode Code of area for pages (0=value for Home page) * @param string $areacode Code of area for pages ('0'=value for Home page)
* @return array array('selectboxlist'=>, 'boxactivated'=>, 'boxlist'=>) * @return array array('selectboxlist'=>, 'boxactivated'=>, 'boxlist'=>)
*/ */
static function getBoxesArea($user,$areacode) static function getBoxesArea($user,$areacode)
@ -1002,16 +1002,16 @@ class FormOther
// $boxactivated will be array of boxes enabled into global setup // $boxactivated will be array of boxes enabled into global setup
// $boxidactivatedforuser will be array of boxes choosed by user // $boxidactivatedforuser will be array of boxes choosed by user
$selectboxlist=''; $selectboxlist='';
$boxactivated=InfoBox::listBoxes($db,'activated',$areacode,(empty($user->conf->$confuserzone)?null:$user)); // Search boxes of common+user (or common only if user has no specific setup) $boxactivated=InfoBox::listBoxes($db, 'activated', $areacode, (empty($user->conf->$confuserzone)?null:$user), array(), 0); // Search boxes of common+user (or common only if user has no specific setup)
$boxidactivatedforuser=array(); $boxidactivatedforuser=array();
foreach($boxactivated as $box) foreach($boxactivated as $box)
{ {
if (empty($user->conf->$confuserzone) || $box->fk_user == $user->id) $boxidactivatedforuser[$box->id]=$box->id; // We keep only boxes to show for user if (empty($user->conf->$confuserzone) || $box->fk_user == $user->id) $boxidactivatedforuser[$box->id]=$box->id; // We keep only boxes to show for user
} }
// Define selectboxlist // Define selectboxlist
$arrayboxtoactivatelabel=array(); $arrayboxtoactivatelabel=array();
if (! empty($user->conf->$confuserzone)) if (! empty($user->conf->$confuserzone))

View File

@ -45,9 +45,10 @@ class InfoBox
* @param string $zone Name or area (-1 for all, 0 for Homepage, 1 for xxx, ...) * @param string $zone Name or area (-1 for all, 0 for Homepage, 1 for xxx, ...)
* @param User|null $user Object user to filter * @param User|null $user Object user to filter
* @param array $excludelist Array of box id (box.box_id = boxes_def.rowid) to exclude * @param array $excludelist Array of box id (box.box_id = boxes_def.rowid) to exclude
* @param int $includehidden Include also hidden boxes
* @return array Array of boxes * @return array Array of boxes
*/ */
static function listBoxes($db, $mode, $zone, $user=null, $excludelist=array()) static function listBoxes($db, $mode, $zone, $user=null, $excludelist=array(), $includehidden=1)
{ {
global $conf; global $conf;
@ -72,7 +73,7 @@ class InfoBox
$sql.= " FROM ".MAIN_DB_PREFIX."boxes_def as d"; $sql.= " FROM ".MAIN_DB_PREFIX."boxes_def as d";
$sql.= " WHERE d.entity IN (0,".(! empty($conf->multicompany->enabled) && ! empty($conf->multicompany->transverse_mode)?"1,":"").$conf->entity.")"; $sql.= " WHERE d.entity IN (0,".(! empty($conf->multicompany->enabled) && ! empty($conf->multicompany->transverse_mode)?"1,":"").$conf->entity.")";
} }
dol_syslog(get_class()."::listBoxes get default box list for mode=".$mode." userid=".(is_object($user)?$user->id:'')."", LOG_DEBUG); dol_syslog(get_class()."::listBoxes get default box list for mode=".$mode." userid=".(is_object($user)?$user->id:'')."", LOG_DEBUG);
$resql = $db->query($sql); $resql = $db->query($sql);
if ($resql) if ($resql)
@ -155,7 +156,7 @@ class InfoBox
//print '=>'.$boxname.'-enabled='.$enabled.'<br>'; //print '=>'.$boxname.'-enabled='.$enabled.'<br>';
//print 'xx module='.$module.' enabled='.$enabled; //print 'xx module='.$module.' enabled='.$enabled;
if ($enabled) $boxes[]=$box; if ($enabled && ($includehidden || empty($box->hidden))) $boxes[]=$box;
else unset($box); else unset($box);
} }
else else

View File

@ -1361,11 +1361,12 @@ function dol_uncompress($inputfile,$outputdir)
* @param string $regexfilter Regex filter to restrict list. This regex value must be escaped for '/', since this char is used for preg_match function * @param string $regexfilter Regex filter to restrict list. This regex value must be escaped for '/', since this char is used for preg_match function
* @param array $excludefilter Array of Regex for exclude filter (example: array('(\.meta|_preview\.png)$','^\.')). This regex value must be escaped for '/', since this char is used for preg_match function * @param array $excludefilter Array of Regex for exclude filter (example: array('(\.meta|_preview\.png)$','^\.')). This regex value must be escaped for '/', since this char is used for preg_match function
* @param int $nohook Disable all hooks * @param int $nohook Disable all hooks
* @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 string Full path to most recent file * @return string Full path to most recent file
*/ */
function dol_most_recent_file($dir,$regexfilter='',$excludefilter=array('(\.meta|_preview\.png)$','^\.'),$nohook=false) function dol_most_recent_file($dir,$regexfilter='',$excludefilter=array('(\.meta|_preview\.png)$','^\.'),$nohook=false,$mode='')
{ {
$tmparray=dol_dir_list($dir,'files',0,$regexfilter,$excludefilter,'date',SORT_DESC,'',$nohook); $tmparray=dol_dir_list($dir,'files',0,$regexfilter,$excludefilter,'date',SORT_DESC,$mode,$nohook);
return $tmparray[0]; return $tmparray[0];
} }

View File

@ -1069,14 +1069,14 @@ function dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='r
if (! empty($conf->use_javascript_ajax) && $user->rights->produit->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) { if (! empty($conf->use_javascript_ajax) && $user->rights->produit->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) {
$morehtmlstatus.=ajax_object_onoff($object, 'status', 'tosell', 'ProductStatusOnSell', 'ProductStatusNotOnSell'); $morehtmlstatus.=ajax_object_onoff($object, 'status', 'tosell', 'ProductStatusOnSell', 'ProductStatusNotOnSell');
} else { } else {
$morehtmlstatus.=$object->getLibStatut(5,0); $morehtmlstatus.='<span class="statusrefsell">'.$object->getLibStatut(5,0).'</span>';
} }
$morehtmlstatus.=' &nbsp; '; $morehtmlstatus.=' &nbsp; ';
//$morehtmlstatus.=$langs->trans("Status").' ('.$langs->trans("Buy").') '; //$morehtmlstatus.=$langs->trans("Status").' ('.$langs->trans("Buy").') ';
if (! empty($conf->use_javascript_ajax) && $user->rights->produit->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) { if (! empty($conf->use_javascript_ajax) && $user->rights->produit->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) {
$morehtmlstatus.=ajax_object_onoff($object, 'status_buy', 'tobuy', 'ProductStatusOnBuy', 'ProductStatusNotOnBuy'); $morehtmlstatus.=ajax_object_onoff($object, 'status_buy', 'tobuy', 'ProductStatusOnBuy', 'ProductStatusNotOnBuy');
} else { } else {
$morehtmlstatus.=$object->getLibStatut(5,1); $morehtmlstatus.='<span class="statusrefbuy">'.$object->getLibStatut(5,1).'</span>';
} }
} }
elseif ($object->element == 'facture' || $object->element == 'invoice' || $object->element == 'invoice_supplier') elseif ($object->element == 'facture' || $object->element == 'invoice' || $object->element == 'invoice_supplier')

View File

@ -146,7 +146,9 @@ function restrictedArea($user, $features, $objectid=0, $tableandshare='', $featu
$readok=1; $nbko=0; $readok=1; $nbko=0;
foreach ($featuresarray as $feature) // first we check nb of test ko foreach ($featuresarray as $feature) // first we check nb of test ko
{ {
if (! empty($user->societe_id) && ! empty($conf->global->MAIN_MODULES_FOR_EXTERNAL) && ! in_array($feature,$listofmodules)) // If limits on modules for external users, module must be into list of modules for external users $featureforlistofmodule=$feature;
if ($featureforlistofmodule == 'produit') $featureforlistofmodule='product';
if (! empty($user->societe_id) && ! empty($conf->global->MAIN_MODULES_FOR_EXTERNAL) && ! in_array($featureforlistofmodule,$listofmodules)) // If limits on modules for external users, module must be into list of modules for external users
{ {
$readok=0; $nbko++; $readok=0; $nbko++;
continue; continue;

View File

@ -52,7 +52,7 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu,$noout=0,$mode
if (empty($noout)) print_start_menu_array(); if (empty($noout)) print_start_menu_array();
$usemenuhider = (GETPOST('testmenuhider') || ! empty($conf->global->MAIN_TESTMENUHIDER)); $usemenuhider = (GETPOST('testmenuhider') || ! empty($conf->global->MAIN_TESTMENUHIDER));
// Show/Hide vertical menu // Show/Hide vertical menu
if ($mode != 'jmobile' && $mode != 'topnb' && $usemenuhider && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) if ($mode != 'jmobile' && $mode != 'topnb' && $usemenuhider && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))
{ {
@ -437,7 +437,7 @@ function print_end_menu_array()
/** /**
* Core function to output left menu eldy * Core function to output left menu eldy
* Fill &$menu (example with $forcemainmenu='home' $forceleftmenu='all', return left menu tree of Home) * Fill &$menu (example with $forcemainmenu='home' $forceleftmenu='all', return left menu tree of Home)
* *
* @param DoliDB $db Database handler * @param DoliDB $db Database handler
* @param array $menu_array_before Table of menu entries to show before entries of menu handler (menu->liste filled with menu->add) * @param array $menu_array_before Table of menu entries to show before entries of menu handler (menu->liste filled with menu->add)
* @param array $menu_array_after Table of menu entries to show after entries of menu handler (menu->liste filled with menu->add) * @param array $menu_array_after Table of menu entries to show after entries of menu handler (menu->liste filled with menu->add)
@ -445,7 +445,7 @@ function print_end_menu_array()
* @param Menu $menu Object Menu to return back list of menu entries * @param Menu $menu Object Menu to return back list of menu entries
* @param int $noout Disable output (Initialise &$menu only). * @param int $noout Disable output (Initialise &$menu only).
* @param string $forcemainmenu 'x'=Force mainmenu to mainmenu='x' * @param string $forcemainmenu 'x'=Force mainmenu to mainmenu='x'
* @param string $forceleftmenu 'all'=Force leftmenu to '' (= all). If value come being '', we change it to value in session and 'none' if not efined in session. * @param string $forceleftmenu 'all'=Force leftmenu to '' (= all). If value come being '', we change it to value in session and 'none' if not efined in session.
* @param array $moredata An array with more data to output * @param array $moredata An array with more data to output
* @return int nb of menu entries * @return int nb of menu entries
*/ */
@ -459,7 +459,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
$leftmenu=($forceleftmenu?'':(empty($_SESSION["leftmenu"])?'none':$_SESSION["leftmenu"])); $leftmenu=($forceleftmenu?'':(empty($_SESSION["leftmenu"])?'none':$_SESSION["leftmenu"]));
$usemenuhider = (GETPOST('testmenuhider') || ! empty($conf->global->MAIN_TESTMENUHIDER)); $usemenuhider = (GETPOST('testmenuhider') || ! empty($conf->global->MAIN_TESTMENUHIDER));
// Show logo company // Show logo company
if (empty($conf->global->MAIN_MENU_INVERT) && empty($noout) && ! empty($conf->global->MAIN_SHOW_LOGO) && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) if (empty($conf->global->MAIN_MENU_INVERT) && empty($noout) && ! empty($conf->global->MAIN_SHOW_LOGO) && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))
{ {
@ -596,7 +596,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
$newmenu->add("/user/group/index.php?leftmenu=users", $langs->trans("ListOfGroups"), 2, ($conf->global->MAIN_USE_ADVANCED_PERMS?$user->rights->user->group_advance->read:$user->rights->user->user->lire) || $user->admin); $newmenu->add("/user/group/index.php?leftmenu=users", $langs->trans("ListOfGroups"), 2, ($conf->global->MAIN_USE_ADVANCED_PERMS?$user->rights->user->group_advance->read:$user->rights->user->user->lire) || $user->admin);
} }
} }
} }
@ -802,7 +802,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
$newmenu->add("/compta/facture/list.php?leftmenu=customers_bills_paid&amp;search_status=2",$langs->trans("BillShortStatusPaid"),2,$user->rights->facture->lire); $newmenu->add("/compta/facture/list.php?leftmenu=customers_bills_paid&amp;search_status=2",$langs->trans("BillShortStatusPaid"),2,$user->rights->facture->lire);
$newmenu->add("/compta/facture/list.php?leftmenu=customers_bills_canceled&amp;search_status=3",$langs->trans("BillShortStatusCanceled"),2,$user->rights->facture->lire); $newmenu->add("/compta/facture/list.php?leftmenu=customers_bills_canceled&amp;search_status=3",$langs->trans("BillShortStatusCanceled"),2,$user->rights->facture->lire);
} }
$newmenu->add("/compta/facture/fiche-rec.php",$langs->trans("ListOfTemplates"),1,$user->rights->facture->lire); $newmenu->add("/compta/facture/fiche-rec.php",$langs->trans("ListOfTemplates"),1,$user->rights->facture->creer); // No need to see recurring invoices, if user has no permission to create invoice.
$newmenu->add("/compta/paiement/list.php",$langs->trans("Payments"),1,$user->rights->facture->lire); $newmenu->add("/compta/paiement/list.php",$langs->trans("Payments"),1,$user->rights->facture->lire);
@ -945,29 +945,29 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/accountancy/admin/account.php?mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("Chartofaccounts"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_chart', 20); if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/accountancy/admin/account.php?mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("Chartofaccounts"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_chart', 20);
if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/accountancy/admin/categories_list.php?id=32&search_country_id=".$mysoc->country_id."&mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("AccountingCategory"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_chart', 22); if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/accountancy/admin/categories_list.php?id=32&search_country_id=".$mysoc->country_id."&mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("AccountingCategory"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_chart', 22);
if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/accountancy/admin/defaultaccounts.php?mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("MenuDefaultAccounts"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_default', 40); if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/accountancy/admin/defaultaccounts.php?mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("MenuDefaultAccounts"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_default', 40);
if (! empty($conf->facture->enabled) || ! empty($conf->fournisseur->enabled)) if (! empty($conf->facture->enabled) || ! empty($conf->fournisseur->enabled))
{ {
if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/admin/dict.php?id=10&from=accountancy&search_country_id=".$mysoc->country_id."&mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("MenuVatAccounts"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_default', 30); if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/admin/dict.php?id=10&from=accountancy&search_country_id=".$mysoc->country_id."&mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("MenuVatAccounts"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_default', 30);
} }
if (! empty($conf->tax->enabled)) if (! empty($conf->tax->enabled))
{ {
if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/admin/dict.php?id=7&from=accountancy&search_country_id=".$mysoc->country_id."&mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("MenuTaxAccounts"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_default', 30); if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/admin/dict.php?id=7&from=accountancy&search_country_id=".$mysoc->country_id."&mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("MenuTaxAccounts"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_default', 30);
} }
if (! empty($conf->expensereport->enabled)) if (! empty($conf->expensereport->enabled))
{ {
if (preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/admin/dict.php?id=17&from=accountancy&mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("MenuExpenseReportAccounts"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_default', 30); if (preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/admin/dict.php?id=17&from=accountancy&mainmenu=accountancy&leftmenu=accountancy_admin", $langs->trans("MenuExpenseReportAccounts"),2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_default', 30);
} }
/* not required yet, already supported by default account /* not required yet, already supported by default account
if (! empty($conf->loan->enabled)) if (! empty($conf->loan->enabled))
{ {
if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/admin/loan.php?mainmenu=accountancy&amp;leftmenu=accountancy_admin", $langs->trans("MenuLoanAccounts"), 2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_loan', 45); if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/admin/loan.php?mainmenu=accountancy&amp;leftmenu=accountancy_admin", $langs->trans("MenuLoanAccounts"), 2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_loan', 45);
} }
if (! empty($conf->don->enabled)) if (! empty($conf->don->enabled))
{ {
if (preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/don/admin/donation.php?from=accountancy&mainmenu=accountancy&amp;leftmenu=accountancy_admin", $langs->trans("MenuDonationAccounts"), 2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_donation', 47); if (preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/don/admin/donation.php?from=accountancy&mainmenu=accountancy&amp;leftmenu=accountancy_admin", $langs->trans("MenuDonationAccounts"), 2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_donation', 47);
}*/ }*/
if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/accountancy/admin/productaccount.php?mainmenu=accountancy&amp;leftmenu=accountancy_admin", $langs->trans("MenuProductsAccounts"), 2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_product', 50); if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_admin/',$leftmenu)) $newmenu->add("/accountancy/admin/productaccount.php?mainmenu=accountancy&amp;leftmenu=accountancy_admin", $langs->trans("MenuProductsAccounts"), 2, $user->rights->accounting->chartofaccount, '', $mainmenu, 'accountancy_admin_product', 50);
// Binding // Binding
if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy/',$leftmenu)) $newmenu->add("/accountancy/customer/index.php?leftmenu=accountancy_dispatch_customer&amp;mainmenu=accountancy",$langs->trans("CustomersVentilation"),1,$user->rights->accounting->bind->write, '', $mainmenu, 'dispatch_customer'); if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy/',$leftmenu)) $newmenu->add("/accountancy/customer/index.php?leftmenu=accountancy_dispatch_customer&amp;mainmenu=accountancy",$langs->trans("CustomersVentilation"),1,$user->rights->accounting->bind->write, '', $mainmenu, 'dispatch_customer');
if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_dispatch_customer/',$leftmenu)) $newmenu->add("/accountancy/customer/list.php?mainmenu=accountancy&amp;leftmenu=accountancy_dispatch_customer",$langs->trans("ToBind"),2,$user->rights->accounting->bind->write); if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_dispatch_customer/',$leftmenu)) $newmenu->add("/accountancy/customer/list.php?mainmenu=accountancy&amp;leftmenu=accountancy_dispatch_customer",$langs->trans("ToBind"),2,$user->rights->accounting->bind->write);
@ -1366,7 +1366,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
$newmenu->add("/adherents/stats/index.php?leftmenu=members",$langs->trans("MenuMembersStats"),1,$user->rights->adherent->lire); $newmenu->add("/adherents/stats/index.php?leftmenu=members",$langs->trans("MenuMembersStats"),1,$user->rights->adherent->lire);
if (! empty($conf->global->MEMBER_LINK_TO_HTPASSWDFILE) && ($usemenuhider || empty($leftmenu) || $leftmenu=="export")) $newmenu->add("/adherents/htpasswd.php?leftmenu=export",$langs->trans("Filehtpasswd"),1,$user->rights->adherent->export); if (! empty($conf->global->MEMBER_LINK_TO_HTPASSWDFILE) && ($usemenuhider || empty($leftmenu) || $leftmenu=="export")) $newmenu->add("/adherents/htpasswd.php?leftmenu=export",$langs->trans("Filehtpasswd"),1,$user->rights->adherent->export);
if ($usemenuhider || empty($leftmenu) || $leftmenu=="export") $newmenu->add("/adherents/cartes/carte.php?leftmenu=export",$langs->trans("MembersCards"),1,$user->rights->adherent->export); if ($usemenuhider || empty($leftmenu) || $leftmenu=="export") $newmenu->add("/adherents/cartes/carte.php?leftmenu=export",$langs->trans("MembersCards"),1,$user->rights->adherent->export);
$newmenu->add("/adherents/index.php?leftmenu=members&amp;mainmenu=members",$langs->trans("Subscriptions"),0,$user->rights->adherent->cotisation->lire); $newmenu->add("/adherents/index.php?leftmenu=members&amp;mainmenu=members",$langs->trans("Subscriptions"),0,$user->rights->adherent->cotisation->lire);
$newmenu->add("/adherents/list.php?leftmenu=members&amp;statut=-1,1&amp;mainmenu=members",$langs->trans("NewSubscription"),1,$user->rights->adherent->cotisation->creer); $newmenu->add("/adherents/list.php?leftmenu=members&amp;statut=-1,1&amp;mainmenu=members",$langs->trans("NewSubscription"),1,$user->rights->adherent->cotisation->creer);
$newmenu->add("/adherents/subscription/list.php?leftmenu=members",$langs->trans("List"),1,$user->rights->adherent->cotisation->lire); $newmenu->add("/adherents/subscription/list.php?leftmenu=members",$langs->trans("List"),1,$user->rights->adherent->cotisation->lire);

View File

@ -167,9 +167,17 @@ class pdf_aurore extends ModelePDFSupplierProposal
$objphoto = new Product($this->db); $objphoto = new Product($this->db);
$objphoto->fetch($object->lines[$i]->fk_product); $objphoto->fetch($object->lines[$i]->fk_product);
$pdir = get_exdir($object->lines[$i]->fk_product,2,0,0,$objphoto,'product') . $object->lines[$i]->fk_product ."/photos/"; if (! empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO))
$dir = $conf->product->dir_output.'/'.$pdir; {
$pdir = get_exdir($object->lines[$i]->fk_product,2,0,0,$objphoto,'product') . $object->lines[$i]->fk_product ."/photos/";
$dir = $conf->product->dir_output.'/'.$pdir;
}
else
{
$pdir = get_exdir(0,2,0,0,$objphoto,'product') . dol_sanitizeFileName($objphoto->ref).'/';
$dir = $conf->product->dir_output.'/'.$pdir;
}
$realpath=''; $realpath='';
foreach ($objphoto->liste_photos($dir,1) as $key => $obj) foreach ($objphoto->liste_photos($dir,1) as $key => $obj)
{ {

View File

@ -73,7 +73,12 @@ $ref=GETPOST('ref','alpha');
// Security check // Security check
$socid=''; $socid='';
if ($user->societe_id) $socid=$user->societe_id; if ($user->societe_id) $socid=$user->societe_id;
$result=restrictedArea($user, $origin, $origin_id);
if ($origin == 'expedition') $result=restrictedArea($user, $origin, $id);
else {
$result=restrictedArea($user, 'expedition');
if (empty($user->rights->{$origin}->lire) && empty($user->rights->{$origin}->read)) accessforbidden();
}
$action = GETPOST('action','alpha'); $action = GETPOST('action','alpha');
$confirm = GETPOST('confirm','alpha'); $confirm = GETPOST('confirm','alpha');

View File

@ -300,7 +300,7 @@ if (! defined('NOTOKENRENEWAL'))
{ {
// roulement des jetons car cree a chaque appel // roulement des jetons car cree a chaque appel
if (isset($_SESSION['newtoken'])) $_SESSION['token'] = $_SESSION['newtoken']; if (isset($_SESSION['newtoken'])) $_SESSION['token'] = $_SESSION['newtoken'];
// Save in $_SESSION['newtoken'] what will be next token. Into forms, we will add param token = $_SESSION['newtoken'] // Save in $_SESSION['newtoken'] what will be next token. Into forms, we will add param token = $_SESSION['newtoken']
$token = dol_hash(uniqid(mt_rand(),TRUE)); // Generates a hash of a random number $token = dol_hash(uniqid(mt_rand(),TRUE)); // Generates a hash of a random number
$_SESSION['newtoken'] = $token; $_SESSION['newtoken'] = $token;
@ -586,7 +586,7 @@ if (! defined('NOLOGIN'))
// We are already into an authenticated session // We are already into an authenticated session
$login=$_SESSION["dol_login"]; $login=$_SESSION["dol_login"];
$entity=$_SESSION["dol_entity"]; $entity=$_SESSION["dol_entity"];
dol_syslog("This is an already logged session. _SESSION['dol_login']=".$login." _SESSION['dol_entity']=".$entity, LOG_DEBUG); dol_syslog("- This is an already logged session. _SESSION['dol_login']=".$login." _SESSION['dol_entity']=".$entity, LOG_DEBUG);
$resultFetchUser=$user->fetch('',$login,'',1,($entity > 0 ? $entity : -1)); $resultFetchUser=$user->fetch('',$login,'',1,($entity > 0 ? $entity : -1));
if ($resultFetchUser <= 0) if ($resultFetchUser <= 0)
@ -1051,7 +1051,7 @@ function top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs
$ext='version='.urlencode(DOL_VERSION); $ext='version='.urlencode(DOL_VERSION);
if (GETPOST('version')) $ext='version='.GETPOST('version','int'); // usefull to force no cache on css/js if (GETPOST('version')) $ext='version='.GETPOST('version','int'); // usefull to force no cache on css/js
if (GETPOST('testmenuhider') || ! empty($conf->global->MAIN_TESTMENUHIDER)) $ext='testmenuhider='.GETPOST('testmenuhider','int'); if (GETPOST('testmenuhider') || ! empty($conf->global->MAIN_TESTMENUHIDER)) $ext='testmenuhider='.GETPOST('testmenuhider','int');
$themeparam='?lang='.$langs->defaultlang.'&amp;theme='.$conf->theme.(GETPOST('optioncss')?'&amp;optioncss='.GETPOST('optioncss','alpha',1):'').'&amp;userid='.$user->id.'&amp;entity='.$conf->entity; $themeparam='?lang='.$langs->defaultlang.'&amp;theme='.$conf->theme.(GETPOST('optioncss')?'&amp;optioncss='.GETPOST('optioncss','alpha',1):'').'&amp;userid='.$user->id.'&amp;entity='.$conf->entity;
$themeparam.=($ext?'&amp;'.$ext:''); $themeparam.=($ext?'&amp;'.$ext:'');
if (! empty($_SESSION['dol_resetcache'])) $themeparam.='&amp;dol_resetcache='.$_SESSION['dol_resetcache']; if (! empty($_SESSION['dol_resetcache'])) $themeparam.='&amp;dol_resetcache='.$_SESSION['dol_resetcache'];
@ -1060,7 +1060,7 @@ function top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs
if (GETPOST('dol_optimize_smallscreen')) { $themeparam.='&amp;dol_optimize_smallscreen='.GETPOST('dol_optimize_smallscreen','int'); } if (GETPOST('dol_optimize_smallscreen')) { $themeparam.='&amp;dol_optimize_smallscreen='.GETPOST('dol_optimize_smallscreen','int'); }
if (GETPOST('dol_no_mouse_hover')) { $themeparam.='&amp;dol_no_mouse_hover='.GETPOST('dol_no_mouse_hover','int'); } if (GETPOST('dol_no_mouse_hover')) { $themeparam.='&amp;dol_no_mouse_hover='.GETPOST('dol_no_mouse_hover','int'); }
if (GETPOST('dol_use_jmobile')) { $themeparam.='&amp;dol_use_jmobile='.GETPOST('dol_use_jmobile','int'); $conf->dol_use_jmobile=GETPOST('dol_use_jmobile','int'); } if (GETPOST('dol_use_jmobile')) { $themeparam.='&amp;dol_use_jmobile='.GETPOST('dol_use_jmobile','int'); $conf->dol_use_jmobile=GETPOST('dol_use_jmobile','int'); }
if (! defined('DISABLE_JQUERY') && ! $disablejs && $conf->use_javascript_ajax) if (! defined('DISABLE_JQUERY') && ! $disablejs && $conf->use_javascript_ajax)
{ {
print '<!-- Includes CSS for JQuery (Ajax library) -->'."\n"; print '<!-- Includes CSS for JQuery (Ajax library) -->'."\n";
@ -1929,7 +1929,7 @@ if (! function_exists("llxFooter"))
}); });
</script>' . "\n"; </script>' . "\n";
} }
// Wrapper to manage dropdown // Wrapper to manage dropdown
if ($conf->use_javascript_ajax) if ($conf->use_javascript_ajax)
{ {
@ -1960,7 +1960,7 @@ if (! function_exists("llxFooter"))
console.log("Link has class dropdowncloseonclick, so we close/hide the popup ul"); console.log("Link has class dropdowncloseonclick, so we close/hide the popup ul");
$(this).parent().parent().hide(); $(this).parent().parent().hide();
}); });
$(document).bind(\'click\', function (e) { $(document).bind(\'click\', function (e) {
var $clicked = $(e.target); var $clicked = $(e.target);
if (!$clicked.parents().hasClass("dropdown")) $(".dropdown dd ul").hide(); if (!$clicked.parents().hasClass("dropdown")) $(".dropdown dd ul").hide();
@ -1968,7 +1968,7 @@ if (! function_exists("llxFooter"))
}); });
</script>'; </script>';
} }
// A div for the address popup // A div for the address popup
print "\n<!-- A div to allow dialog popup -->\n"; print "\n<!-- A div to allow dialog popup -->\n";
print '<div id="dialogforpopup" style="display: none;"></div>'."\n"; print '<div id="dialogforpopup" style="display: none;"></div>'."\n";

View File

@ -160,7 +160,7 @@ if (! empty($action) && $action == 'fetch' && ! empty($id))
} }
echo json_encode($outjson); echo json_encode($outjson);
} }
else else
{ {
require_once DOL_DOCUMENT_ROOT . '/core/class/html.form.class.php'; require_once DOL_DOCUMENT_ROOT . '/core/class/html.form.class.php';
@ -171,17 +171,23 @@ else
top_httphead(); top_httphead();
if (empty($htmlname)) if (empty($htmlname))
return; {
print json_encode(array());
return;
}
$match = preg_grep('/(' . $htmlname . '[0-9]+)/', array_keys($_GET)); $match = preg_grep('/(' . $htmlname . '[0-9]+)/', array_keys($_GET));
sort($match); sort($match);
$idprod = (! empty($match[0]) ? $match[0] : ''); $idprod = (! empty($match[0]) ? $match[0] : '');
if (! GETPOST($htmlname) && ! GETPOST($idprod))
return;
// When used from jQuery, the search term is added as GET param "term". if (GETPOST($htmlname) == '' && ! GETPOST($idprod))
{
print json_encode(array());
return;
}
// When used from jQuery, the search term is added as GET param "term".
$searchkey = (GETPOST($idprod) ? GETPOST($idprod) : (GETPOST($htmlname) ? GETPOST($htmlname) : '')); $searchkey = (GETPOST($idprod) ? GETPOST($idprod) : (GETPOST($htmlname) ? GETPOST($htmlname) : ''));
$form = new Form($db); $form = new Form($db);

View File

@ -165,7 +165,7 @@ if (empty($reshook))
exit; exit;
} }
} }
// Barcode type // Barcode type
if ($action == 'setfk_barcode_type' && $createbarcode) if ($action == 'setfk_barcode_type' && $createbarcode)
{ {
@ -221,7 +221,7 @@ if (empty($reshook))
$action = "create"; $action = "create";
$error++; $error++;
} }
if (! $error) if (! $error)
{ {
$units = GETPOST('units', 'int'); $units = GETPOST('units', 'int');
@ -289,7 +289,7 @@ if (empty($reshook))
$object->volume_units = GETPOST('volume_units'); $object->volume_units = GETPOST('volume_units');
$object->finished = GETPOST('finished'); $object->finished = GETPOST('finished');
$object->fk_unit = GETPOST('units'); $object->fk_unit = GETPOST('units');
$accountancy_code_sell = GETPOST('accountancy_code_sell'); $accountancy_code_sell = GETPOST('accountancy_code_sell');
$accountancy_code_buy = GETPOST('accountancy_code_buy'); $accountancy_code_buy = GETPOST('accountancy_code_buy');
@ -413,7 +413,7 @@ if (empty($reshook))
$accountancy_code_sell = GETPOST('accountancy_code_sell'); $accountancy_code_sell = GETPOST('accountancy_code_sell');
$accountancy_code_buy = GETPOST('accountancy_code_buy'); $accountancy_code_buy = GETPOST('accountancy_code_buy');
if ($accountancy_code_sell <= 0) { $object->accountancy_code_sell = ''; } else { $object->accountancy_code_sell = $accountancy_code_sell; } if ($accountancy_code_sell <= 0) { $object->accountancy_code_sell = ''; } else { $object->accountancy_code_sell = $accountancy_code_sell; }
if ($accountancy_code_buy <= 0) { $object->accountancy_code_buy = ''; } else { $object->accountancy_code_buy = $accountancy_code_buy; } if ($accountancy_code_buy <= 0) { $object->accountancy_code_buy = ''; } else { $object->accountancy_code_buy = $accountancy_code_buy; }
@ -643,7 +643,7 @@ if (empty($reshook))
$tmpvat = price2num(preg_replace('/\s*\(.*\)/', '', $tva_tx)); $tmpvat = price2num(preg_replace('/\s*\(.*\)/', '', $tva_tx));
$tmpprodvat = price2num(preg_replace('/\s*\(.*\)/', '', $prod->tva_tx)); $tmpprodvat = price2num(preg_replace('/\s*\(.*\)/', '', $prod->tva_tx));
// On reevalue prix selon taux tva car taux tva transaction peut etre different // On reevalue prix selon taux tva car taux tva transaction peut etre different
// de ceux du produit par defaut (par exemple si pays different entre vendeur et acheteur). // de ceux du produit par defaut (par exemple si pays different entre vendeur et acheteur).
if ($tmpvat != $tmpprodvat) { if ($tmpvat != $tmpprodvat) {
@ -653,7 +653,7 @@ if (empty($reshook))
$pu_ttc = price2num($pu_ht * (1 + ($tmpvat / 100)), 'MU'); $pu_ttc = price2num($pu_ht * (1 + ($tmpvat / 100)), 'MU');
} }
} }
if (GETPOST('propalid') > 0) { if (GETPOST('propalid') > 0) {
// Define cost price for margin calculation // Define cost price for margin calculation
$buyprice=0; $buyprice=0;
@ -666,7 +666,7 @@ if (empty($reshook))
{ {
$buyprice = $result; $buyprice = $result;
} }
$result = $propal->addline( $result = $propal->addline(
$desc, $desc,
$pu_ht, $pu_ht,
@ -709,7 +709,7 @@ if (empty($reshook))
{ {
$buyprice = $result; $buyprice = $result;
} }
$result = $commande->addline( $result = $commande->addline(
$desc, $desc,
$pu_ht, $pu_ht,
@ -895,7 +895,7 @@ else
dol_fiche_head(''); dol_fiche_head('');
print '<table class="border centpercent">'; print '<table class="border centpercent">';
print '<tr>'; print '<tr>';
$tmpcode=''; $tmpcode='';
if (! empty($modCodeProduct->code_auto)) $tmpcode=$modCodeProduct->getNextValue($object,$type); if (! empty($modCodeProduct->code_auto)) $tmpcode=$modCodeProduct->getNextValue($object,$type);
@ -1067,14 +1067,14 @@ else
//if (! empty($conf->global->MAIN_DISABLE_NOTES_TAB)) available in create mode //if (! empty($conf->global->MAIN_DISABLE_NOTES_TAB)) available in create mode
//{ //{
print '<tr><td class="tdtop">'.$langs->trans("NoteNotVisibleOnBill").'</td><td colspan="3">'; print '<tr><td class="tdtop">'.$langs->trans("NoteNotVisibleOnBill").'</td><td colspan="3">';
// We use dolibarr_details as type of DolEditor here, because we must not accept images as description is included into PDF and not accepted by TCPDF. // We use dolibarr_details as type of DolEditor here, because we must not accept images as description is included into PDF and not accepted by TCPDF.
$doleditor = new DolEditor('note_private', GETPOST('note_private'), '', 140, 'dolibarr_details', '', false, true, $conf->global->FCKEDITOR_ENABLE_PRODUCTDESC, ROWS_8, '90%'); $doleditor = new DolEditor('note_private', GETPOST('note_private'), '', 140, 'dolibarr_details', '', false, true, $conf->global->FCKEDITOR_ENABLE_PRODUCTDESC, ROWS_8, '90%');
$doleditor->Create(); $doleditor->Create();
print "</td></tr>"; print "</td></tr>";
//} //}
if($conf->categorie->enabled) { if($conf->categorie->enabled) {
// Categories // Categories
print '<tr><td>'.$langs->trans("Categories").'</td><td colspan="3">'; print '<tr><td>'.$langs->trans("Categories").'</td><td colspan="3">';
@ -1119,7 +1119,7 @@ else
// Accountancy codes // Accountancy codes
print '<table class="border" width="100%">'; print '<table class="border" width="100%">';
if (! empty($conf->accounting->enabled)) if (! empty($conf->accounting->enabled))
{ {
// Accountancy_code_sell // Accountancy_code_sell
@ -1133,8 +1133,8 @@ else
print '<td>'; print '<td>';
print $formaccountancy->select_account(GETPOST('accountancy_code_buy'), 'accountancy_code_buy', 1, null, 1, 1, ''); print $formaccountancy->select_account(GETPOST('accountancy_code_buy'), 'accountancy_code_buy', 1, null, 1, 1, '');
print '</td></tr>'; print '</td></tr>';
} }
else // For external software else // For external software
{ {
// Accountancy_code_sell // Accountancy_code_sell
print '<tr><td class="titlefieldcreate">'.$langs->trans("ProductAccountancySellCode").'</td>'; print '<tr><td class="titlefieldcreate">'.$langs->trans("ProductAccountancySellCode").'</td>';
@ -1378,7 +1378,7 @@ else
} }
// Tags-Categories // Tags-Categories
if ($conf->categorie->enabled) if ($conf->categorie->enabled)
{ {
print '<tr><td class="tdtop">'.$langs->trans("Categories").'</td><td colspan="3">'; print '<tr><td class="tdtop">'.$langs->trans("Categories").'</td><td colspan="3">';
$cate_arbo = $form->select_all_categories(Categorie::TYPE_PRODUCT, '', 'parent', 64, 0, 1); $cate_arbo = $form->select_all_categories(Categorie::TYPE_PRODUCT, '', 'parent', 64, 0, 1);
@ -1395,13 +1395,13 @@ else
if (! empty($conf->global->MAIN_DISABLE_NOTES_TAB)) if (! empty($conf->global->MAIN_DISABLE_NOTES_TAB))
{ {
print '<tr><td class="tdtop">'.$langs->trans("NoteNotVisibleOnBill").'</td><td colspan="3">'; print '<tr><td class="tdtop">'.$langs->trans("NoteNotVisibleOnBill").'</td><td colspan="3">';
$doleditor = new DolEditor('note_private', $object->note_private, '', 140, 'dolibarr_notes', '', false, true, $conf->global->FCKEDITOR_ENABLE_PRODUCTDESC, ROWS_4, '90%'); $doleditor = new DolEditor('note_private', $object->note_private, '', 140, 'dolibarr_notes', '', false, true, $conf->global->FCKEDITOR_ENABLE_PRODUCTDESC, ROWS_4, '90%');
$doleditor->Create(); $doleditor->Create();
print "</td></tr>"; print "</td></tr>";
} }
print '</table>'; print '</table>';
print '<br>'; print '<br>';
@ -1421,8 +1421,8 @@ else
print '<td>'; print '<td>';
print $formaccountancy->select_account($object->accountancy_code_buy, 'accountancy_code_buy', 1, '', 1, 1); print $formaccountancy->select_account($object->accountancy_code_buy, 'accountancy_code_buy', 1, '', 1, 1);
print '</td></tr>'; print '</td></tr>';
} }
else // For external software else // For external software
{ {
// Accountancy_code_sell // Accountancy_code_sell
print '<tr><td class="titlefield">'.$langs->trans("ProductAccountancySellCode").'</td>'; print '<tr><td class="titlefield">'.$langs->trans("ProductAccountancySellCode").'</td>';
@ -1460,15 +1460,18 @@ else
$linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php?type='.$object->type.'">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php?type='.$object->type.'">'.$langs->trans("BackToList").'</a>';
$object->next_prev_filter=" fk_product_type = ".$object->type; $object->next_prev_filter=" fk_product_type = ".$object->type;
dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref'); $shownav = 1;
if ($user->societe_id && ! in_array('product', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref');
print '<div class="fichecenter">'; print '<div class="fichecenter">';
print '<div class="fichehalfleft">'; print '<div class="fichehalfleft">';
print '<div class="underbanner clearboth"></div>'; print '<div class="underbanner clearboth"></div>';
print '<table class="border tableforfield" width="100%">'; print '<table class="border tableforfield" width="100%">';
// Type // Type
if (! empty($conf->produit->enabled) && ! empty($conf->service->enabled)) if (! empty($conf->produit->enabled) && ! empty($conf->service->enabled))
{ {
@ -1574,7 +1577,7 @@ else
} }
print '</td></tr>'; print '</td></tr>';
*/ */
// Batch number management (to batch) // Batch number management (to batch)
if (! empty($conf->productbatch->enabled)) { if (! empty($conf->productbatch->enabled)) {
print '<tr><td>'.$langs->trans("ManageLotSerial").'</td><td colspan="2">'; print '<tr><td>'.$langs->trans("ManageLotSerial").'</td><td colspan="2">';
@ -1597,10 +1600,10 @@ else
print '</table>'; print '</table>';
print '</div>'; print '</div>';
print '<div class="fichehalfright"><div class="ficheaddleft">'; print '<div class="fichehalfright"><div class="ficheaddleft">';
print '<div class="underbanner clearboth"></div>'; print '<div class="underbanner clearboth"></div>';
print '<table class="border tableforfield" width="100%">'; print '<table class="border tableforfield" width="100%">';
// Nature // Nature
if($object->type!= Product::TYPE_SERVICE) if($object->type!= Product::TYPE_SERVICE)
{ {
@ -1722,13 +1725,13 @@ else
print '<tr><td class="tdtop">'.$langs->trans("NotePrivate").'</td><td colspan="'.(2+(($showphoto||$showbarcode)?1:0)).'">'.(dol_textishtml($object->note_private)?$object->note_private:dol_nl2br($object->note_private,1,true)).'</td></tr>'."\n"; print '<tr><td class="tdtop">'.$langs->trans("NotePrivate").'</td><td colspan="'.(2+(($showphoto||$showbarcode)?1:0)).'">'.(dol_textishtml($object->note_private)?$object->note_private:dol_nl2br($object->note_private,1,true)).'</td></tr>'."\n";
print '<!-- End show Note --> '."\n"; print '<!-- End show Note --> '."\n";
} }
print "</table>\n"; print "</table>\n";
print '</div>'; print '</div>';
print '</div></div>'; print '</div></div>';
print '<div style="clear:both"></div>'; print '<div style="clear:both"></div>';
dol_fiche_end(); dol_fiche_end();
} }
@ -1795,7 +1798,7 @@ if (empty($reshook))
{ {
if ($action == '' || $action == 'view') if ($action == '' || $action == 'view')
{ {
if (($object->type == Product::TYPE_PRODUCT && $user->rights->produit->creer ) || if (($object->type == Product::TYPE_PRODUCT && $user->rights->produit->creer ) ||
($object->type == Product::TYPE_SERVICE && $user->rights->service->creer)) ($object->type == Product::TYPE_SERVICE && $user->rights->service->creer))
{ {
if (! isset($object->no_button_edit) || $object->no_button_edit <> 1) print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit&amp;id='.$object->id.'">'.$langs->trans("Modify").'</a></div>'; if (! isset($object->no_button_edit) || $object->no_button_edit <> 1) print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit&amp;id='.$object->id.'">'.$langs->trans("Modify").'</a></div>';
@ -1940,7 +1943,7 @@ if (! empty($conf->global->PRODUCT_ADD_FORM_ADD_TO) && $object->id && ($action =
print '<input type="hidden" name="action" value="addin">'; print '<input type="hidden" name="action" value="addin">';
print load_fiche_titre($langs->trans("AddToDraft"),'',''); print load_fiche_titre($langs->trans("AddToDraft"),'','');
dol_fiche_head(''); dol_fiche_head('');
$html .= '<tr><td class="nowrap">'.$langs->trans("Quantity").' '; $html .= '<tr><td class="nowrap">'.$langs->trans("Quantity").' ';
@ -1952,7 +1955,7 @@ if (! empty($conf->global->PRODUCT_ADD_FORM_ADD_TO) && $object->id && ($action =
print '<table width="100%" class="border">'; print '<table width="100%" class="border">';
print $html; print $html;
print '</table>'; print '</table>';
print '<div class="center">'; print '<div class="center">';
print '<input type="submit" class="button" value="'.$langs->trans("Add").'">'; print '<input type="submit" class="button" value="'.$langs->trans("Add").'">';
print '</div>'; print '</div>';
@ -1979,10 +1982,10 @@ if ($action == '' || $action == 'view')
$delallowed=$user->rights->produit->supprimer; $delallowed=$user->rights->produit->supprimer;
$var=true; $var=true;
print $formfile->showdocuments($modulepart,$object->ref,$filedir,$urlsource,$genallowed,$delallowed,'',0,0,0,28,0,'',0,'',$object->default_lang, '', $object); print $formfile->showdocuments($modulepart,$object->ref,$filedir,$urlsource,$genallowed,$delallowed,'',0,0,0,28,0,'',0,'',$object->default_lang, '', $object);
$somethingshown=$formfile->numoffiles; $somethingshown=$formfile->numoffiles;
print '</div><div class="fichehalfright"><div class="ficheaddleft">'; print '</div><div class="fichehalfright"><div class="ficheaddleft">';
print '</div></div></div>'; print '</div></div></div>';

View File

@ -86,8 +86,8 @@ if ($action == 'add_prod' && ($user->rights->produit->creer || $user->rights->se
$action = 're-edit'; $action = 're-edit';
if ($object->error == "isFatherOfThis") { if ($object->error == "isFatherOfThis") {
setEventMessages($langs->trans("ErrorAssociationIsFatherOfThis"), null, 'errors'); setEventMessages($langs->trans("ErrorAssociationIsFatherOfThis"), null, 'errors');
} }
else else
{ {
setEventMessages($object->error, $object->errors, 'errors'); setEventMessages($object->error, $object->errors, 'errors');
} }
@ -204,15 +204,18 @@ if ($id > 0 || ! empty($ref))
if ($user->rights->produit->lire || $user->rights->service->lire) if ($user->rights->produit->lire || $user->rights->service->lire)
{ {
$linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>';
dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref', '', '', '', 0, '', '', 1); $shownav = 1;
if ($user->societe_id && ! in_array('product', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref', '', '', '', 0, '', '', 1);
if ($object->type!=Product::TYPE_SERVICE || empty($conf->global->PRODUIT_MULTIPRICES)) if ($object->type!=Product::TYPE_SERVICE || empty($conf->global->PRODUIT_MULTIPRICES))
{ {
print '<div class="underbanner clearboth"></div>'; print '<div class="underbanner clearboth"></div>';
print '<table class="border tableforfield" width="100%">'; print '<table class="border tableforfield" width="100%">';
} }
// Nature // Nature
if ($object->type!=Product::TYPE_SERVICE) if ($object->type!=Product::TYPE_SERVICE)
{ {
@ -256,11 +259,11 @@ if ($id > 0 || ! empty($ref))
dol_fiche_end(); dol_fiche_end();
print '<br>'; print '<br>';
$prodsfather = $object->getFather(); // Parent Products $prodsfather = $object->getFather(); // Parent Products
$object->get_sousproduits_arbo(); // Load $object->sousprods $object->get_sousproduits_arbo(); // Load $object->sousprods
$prods_arbo=$object->get_arbo_each_prod(); $prods_arbo=$object->get_arbo_each_prod();
$nbofsubsubproducts=count($prods_arbo); // This include sub sub product into nb $nbofsubsubproducts=count($prods_arbo); // This include sub sub product into nb
$prodschild = $object->getChildsArbo($id,1); $prodschild = $object->getChildsArbo($id,1);
$nbofsubproducts=count($prodschild); // This include only first level of childs $nbofsubproducts=count($prodschild); // This include only first level of childs
@ -369,7 +372,7 @@ if ($id > 0 || ! empty($ref))
$totalline=price2num($value['nb'] * ($product_fourn->fourn_unitprice * (1 - $product_fourn->fourn_remise_percent/100) + $product_fourn->fourn_unitcharges - $product_fourn->fourn_remise), 'MT'); $totalline=price2num($value['nb'] * ($product_fourn->fourn_unitprice * (1 - $product_fourn->fourn_remise_percent/100) + $product_fourn->fourn_unitcharges - $product_fourn->fourn_remise), 'MT');
$total+=$totalline; $total+=$totalline;
print '<td align="right">'; print '<td align="right">';
print ($notdefined?'':($value['nb']> 1 ? $value['nb'].'x' : '').price($product_fourn->fourn_unitprice,'','',0,0,-1,$conf->currency)); print ($notdefined?'':($value['nb']> 1 ? $value['nb'].'x' : '').price($product_fourn->fourn_unitprice,'','',0,0,-1,$conf->currency));
print '</td>'; print '</td>';
@ -385,7 +388,7 @@ if ($id > 0 || ! empty($ref))
print '<td align="right" colspan="2">'; print '<td align="right" colspan="2">';
print ($notdefined?'':($value['nb']> 1 ? $value['nb'].'x' : '').price($pricesell,'','',0,0,-1,$conf->currency)); print ($notdefined?'':($value['nb']> 1 ? $value['nb'].'x' : '').price($pricesell,'','',0,0,-1,$conf->currency));
print '</td>'; print '</td>';
// Stock // Stock
if (! empty($conf->stock->enabled)) print '<td align="right">'.$value['stock'].'</td>'; // Real stock if (! empty($conf->stock->enabled)) print '<td align="right">'.$value['stock'].'</td>'; // Real stock
@ -424,7 +427,7 @@ if ($id > 0 || ! empty($ref))
// Best selling price // Best selling price
print '<td>&nbsp;</td>'; print '<td>&nbsp;</td>';
print '<td>&nbsp;</td>'; print '<td>&nbsp;</td>';
if (! empty($conf->stock->enabled)) print '<td></td>'; // Real stock if (! empty($conf->stock->enabled)) print '<td></td>'; // Real stock
print '<td align="center">'.$value['nb'].'</td>'; print '<td align="center">'.$value['nb'].'</td>';
print '<td>&nbsp;</td>'; print '<td>&nbsp;</td>';
@ -456,7 +459,7 @@ if ($id > 0 || ! empty($ref))
if ($atleastonenotdefined) print $langs->trans("Unknown").' ('.$langs->trans("SomeSubProductHaveNoPrices").')'; if ($atleastonenotdefined) print $langs->trans("Unknown").' ('.$langs->trans("SomeSubProductHaveNoPrices").')';
print ($atleastonenotdefined?'':price($totalsell,'','',0,0,-1,$conf->currency)); print ($atleastonenotdefined?'':price($totalsell,'','',0,0,-1,$conf->currency));
print '</td>'; print '</td>';
// Stock // Stock
if (! empty($conf->stock->enabled)) print '<td class="liste_total" align="right">&nbsp;</td>'; if (! empty($conf->stock->enabled)) print '<td class="liste_total" align="right">&nbsp;</td>';

View File

@ -72,7 +72,7 @@ if ($id > 0 || ! empty($ref))
if (! empty($conf->product->enabled)) $upload_dir = $conf->product->multidir_output[$object->entity].'/'.get_exdir(0, 0, 0, 0, $object, 'product').dol_sanitizeFileName($object->ref); if (! empty($conf->product->enabled)) $upload_dir = $conf->product->multidir_output[$object->entity].'/'.get_exdir(0, 0, 0, 0, $object, 'product').dol_sanitizeFileName($object->ref);
elseif (! empty($conf->service->enabled)) $upload_dir = $conf->service->multidir_output[$object->entity].'/'.get_exdir(0, 0, 0, 0, $object, 'product').dol_sanitizeFileName($object->ref); elseif (! empty($conf->service->enabled)) $upload_dir = $conf->service->multidir_output[$object->entity].'/'.get_exdir(0, 0, 0, 0, $object, 'product').dol_sanitizeFileName($object->ref);
if (! empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) // For backward compatiblity, we scan also old dirs if (! empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) // For backward compatiblity, we scan also old dirs
{ {
if (! empty($conf->product->enabled)) $upload_dirold = $conf->product->multidir_output[$object->entity].'/'.substr(substr("000".$object->id, -2),1,1).'/'.substr(substr("000".$object->id, -2),0,1).'/'.$object->id."/photos"; if (! empty($conf->product->enabled)) $upload_dirold = $conf->product->multidir_output[$object->entity].'/'.substr(substr("000".$object->id, -2),1,1).'/'.substr(substr("000".$object->id, -2),0,1).'/'.$object->id."/photos";
@ -210,11 +210,14 @@ if ($object->id)
$linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>';
dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref'); $shownav = 1;
if ($user->societe_id && ! in_array('product', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref');
print '<div class="fichecenter">'; print '<div class="fichecenter">';
print '<div class="underbanner clearboth"></div>'; print '<div class="underbanner clearboth"></div>';
print '<table class="border tableforfield" width="100%">'; print '<table class="border tableforfield" width="100%">';
@ -224,14 +227,14 @@ if ($object->id)
print '</div>'; print '</div>';
print '<div style="clear:both"></div>'; print '<div style="clear:both"></div>';
dol_fiche_end(); dol_fiche_end();
$permission = (($object->type == Product::TYPE_PRODUCT && $user->rights->produit->creer) || ($object->type == Product::TYPE_SERVICE && $user->rights->service->creer)); $permission = (($object->type == Product::TYPE_PRODUCT && $user->rights->produit->creer) || ($object->type == Product::TYPE_SERVICE && $user->rights->service->creer));
$param = '&id=' . $object->id; $param = '&id=' . $object->id;
include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_post_headers.tpl.php'; include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_post_headers.tpl.php';
// Merge propal PDF document PDF files // Merge propal PDF document PDF files
if (!empty($conf->global->PRODUIT_PDF_MERGE_PROPAL)) if (!empty($conf->global->PRODUIT_PDF_MERGE_PROPAL))
{ {
@ -307,17 +310,17 @@ if ($object->id)
$checked = ''; $checked = '';
$filename = $filetoadd['name']; $filename = $filetoadd['name'];
if ($conf->global->MAIN_MULTILANGS) if ($conf->global->MAIN_MULTILANGS)
{ {
if (array_key_exists($filetoadd['name'] . '_' . $delauft_lang, $filetomerge->lines)) if (array_key_exists($filetoadd['name'] . '_' . $delauft_lang, $filetomerge->lines))
{ {
$filename = $filetoadd['name'] . ' - ' . $langs->trans('Language_' . $delauft_lang); $filename = $filetoadd['name'] . ' - ' . $langs->trans('Language_' . $delauft_lang);
$checked = ' checked '; $checked = ' checked ';
} }
} }
else else
{ {
if (array_key_exists($filetoadd['name'], $filetomerge->lines)) if (array_key_exists($filetoadd['name'], $filetomerge->lines))
{ {
$checked = ' checked '; $checked = ' checked ';
} }

View File

@ -98,7 +98,7 @@ if (empty($reshook))
if ($id) if ($id)
{ {
$result=$object->fetch($id); $result=$object->fetch($id);
$object->cost_price = price2num($cost_price); $object->cost_price = price2num($cost_price);
$result=$object->update($object->id, $user); $result=$object->update($object->id, $user);
if ($result > 0) if ($result > 0)
{ {
@ -112,7 +112,7 @@ if (empty($reshook))
} }
} }
} }
if ($action == 'confirm_remove_pf') if ($action == 'confirm_remove_pf')
{ {
if ($rowid) // id of product supplier price to remove if ($rowid) // id of product supplier price to remove
@ -299,20 +299,23 @@ if ($id > 0 || $ref)
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $id . '&rowid=' . $rowid, $langs->trans('DeleteProductBuyPrice'), $langs->trans('ConfirmDeleteProductBuyPrice'), 'confirm_remove_pf', '', 0, 1); $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $id . '&rowid=' . $rowid, $langs->trans('DeleteProductBuyPrice'), $langs->trans('ConfirmDeleteProductBuyPrice'), 'confirm_remove_pf', '', 0, 1);
echo $formconfirm; echo $formconfirm;
} }
if ($action <> 'edit' && $action <> 're-edit') if ($action <> 'edit' && $action <> 're-edit')
{ {
$head=product_prepare_head($object); $head=product_prepare_head($object);
$titre=$langs->trans("CardProduct".$object->type); $titre=$langs->trans("CardProduct".$object->type);
$picto=($object->type== Product::TYPE_SERVICE?'service':'product'); $picto=($object->type== Product::TYPE_SERVICE?'service':'product');
dol_fiche_head($head, 'suppliers', $titre, 0, $picto); dol_fiche_head($head, 'suppliers', $titre, 0, $picto);
$linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>';
dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref'); $shownav = 1;
if ($user->societe_id && ! in_array('product', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref');
print '<div class="fichecenter">'; print '<div class="fichecenter">';
print '<div class="underbanner clearboth"></div>'; print '<div class="underbanner clearboth"></div>';
print '<table class="border tableforfield" width="100%">'; print '<table class="border tableforfield" width="100%">';
@ -337,14 +340,14 @@ if ($id > 0 || $ref)
print '</td><td colspan="2">'; print '</td><td colspan="2">';
print $form->editfieldval($text,'cost_price',$object->cost_price,$object,$user->rights->produit->creer||$user->rights->service->creer,'amount:6'); print $form->editfieldval($text,'cost_price',$object->cost_price,$object,$user->rights->produit->creer||$user->rights->service->creer,'amount:6');
print '</td></tr>'; print '</td></tr>';
print '</table>'; print '</table>';
print '</div>'; print '</div>';
print '<div style="clear:both"></div>'; print '<div style="clear:both"></div>';
dol_fiche_end(); dol_fiche_end();
// Form to add or update a price // Form to add or update a price
if (($action == 'add_price' || $action == 'updateprice' ) && ($user->rights->produit->creer || $user->rights->service->creer)) if (($action == 'add_price' || $action == 'updateprice' ) && ($user->rights->produit->creer || $user->rights->service->creer))
@ -364,7 +367,7 @@ if ($id > 0 || $ref)
print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'" method="POST">'; print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'" method="POST">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="updateprice">'; print '<input type="hidden" name="action" value="updateprice">';
dol_fiche_head(); dol_fiche_head();
print '<table class="border" width="100%">'; print '<table class="border" width="100%">';
@ -449,11 +452,11 @@ if ($id > 0 || $ref)
$default_vat=get_default_tva($mysoc2, $mysoc, $object->id, 0); $default_vat=get_default_tva($mysoc2, $mysoc, $object->id, 0);
$default_npr=get_default_npr($mysoc2, $mysoc, $object->id, 0); $default_npr=get_default_npr($mysoc2, $mysoc, $object->id, 0);
if (empty($default_vat)) $default_npr=$default_vat; if (empty($default_vat)) $default_npr=$default_vat;
print '<tr><td class="fieldrequired">'.$langs->trans("VATRateForSupplierProduct").'</td>'; print '<tr><td class="fieldrequired">'.$langs->trans("VATRateForSupplierProduct").'</td>';
print '<td>'; print '<td>';
//print $form->load_tva('tva_tx',$object->tva_tx,$supplier,$mysoc); // Do not use list here as it may be any vat rates for any country //print $form->load_tva('tva_tx',$object->tva_tx,$supplier,$mysoc); // Do not use list here as it may be any vat rates for any country
if (! empty($rowid)) // If we have a supplier, it is an update, we must show the vat of current supplier price if (! empty($rowid)) // If we have a supplier, it is an update, we must show the vat of current supplier price
{ {
$tmpproductsupplier=new ProductFournisseur($db); $tmpproductsupplier=new ProductFournisseur($db);
$tmpproductsupplier->fetch_product_fournisseur_price($rowid, 1); $tmpproductsupplier->fetch_product_fournisseur_price($rowid, 1);
@ -462,7 +465,7 @@ if ($id > 0 || $ref)
} }
else else
{ {
if (empty($default_vat)) if (empty($default_vat))
{ {
$default_vat=$object->tva_tx; $default_vat=$object->tva_tx;
} }
@ -588,7 +591,7 @@ if ($id > 0 || $ref)
$product_fourn_list = $product_fourn->list_product_fournisseur_price($object->id, $sortfield, $sortorder); $product_fourn_list = $product_fourn->list_product_fournisseur_price($object->id, $sortfield, $sortorder);
$nbtotalofrecords = count($product_fourn_list); $nbtotalofrecords = count($product_fourn_list);
print_barre_liste($langs->trans('SupplierPrices'), $page, $_SERVEUR ['PHP_SELF'], $option, $sortfield, $sortorder, '', count($product_fourn_list), $nbtotalofrecords, 'title_accountancy.png'); print_barre_liste($langs->trans('SupplierPrices'), $page, $_SERVEUR ['PHP_SELF'], $option, $sortfield, $sortorder, '', count($product_fourn_list), $nbtotalofrecords, 'title_accountancy.png');
// Suppliers list title // Suppliers list title
print '<div class="div-table-responsive">'; print '<div class="div-table-responsive">';
print '<table class="noborder" width="100%">'; print '<table class="noborder" width="100%">';
@ -607,7 +610,7 @@ if ($id > 0 || $ref)
print_liste_field_titre($langs->trans("DiscountQtyMin"),$_SERVER["PHP_SELF"],'','',$param,'align="right"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("DiscountQtyMin"),$_SERVER["PHP_SELF"],'','',$param,'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("NbDaysToDelivery"),$_SERVER["PHP_SELF"],"pfp.delivery_time_days","",$param,'align="right"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("NbDaysToDelivery"),$_SERVER["PHP_SELF"],"pfp.delivery_time_days","",$param,'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("ReputationForThisProduct"),$_SERVER["PHP_SELF"],"pfp.supplier_reputation","",$param,'align="center"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("ReputationForThisProduct"),$_SERVER["PHP_SELF"],"pfp.supplier_reputation","",$param,'align="center"',$sortfield,$sortorder);
// Charges ???? // Charges ????
if ($conf->global->PRODUCT_CHARGES) if ($conf->global->PRODUCT_CHARGES)
{ {
@ -628,7 +631,7 @@ if ($id > 0 || $ref)
// Supplier // Supplier
print '<td>'.$productfourn->getSocNomUrl(1,'supplier').'</td>'; print '<td>'.$productfourn->getSocNomUrl(1,'supplier').'</td>';
// Supplier // Supplier
print '<td align="left">'.$productfourn->fourn_ref.'</td>'; print '<td align="left">'.$productfourn->fourn_ref.'</td>';
@ -674,8 +677,8 @@ if ($id > 0 || $ref)
// Reputation // Reputation
print '<td align="center">'; print '<td align="center">';
if (!empty($productfourn->supplier_reputation) && !empty($object->reputations[$productfourn->supplier_reputation])) { if (!empty($productfourn->supplier_reputation) && !empty($object->reputations[$productfourn->supplier_reputation])) {
print $object->reputations[$productfourn->supplier_reputation]; print $object->reputations[$productfourn->supplier_reputation];
} }
print'</td>'; print'</td>';
// Charges ???? // Charges ????

View File

@ -335,12 +335,12 @@ if ($result)
else print price($objp->price).' '.$langs->trans("HT"); else print price($objp->price).' '.$langs->trans("HT");
print '</td>'; print '</td>';
} }
print '<td align="right" class="nowrap">'; print '<td align="right" class="nowrap"><span class="statusrefsell">';
print $product_static->LibStatut($objp->tosell,5,0); print $product_static->LibStatut($objp->tosell,5,0);
print "</td>"; print "</span></td>";
print '<td align="right" class="nowrap">'; print '<td align="right" class="nowrap"><span class="statusrefbuy">';
print $product_static->LibStatut($objp->tobuy,5,1); print $product_static->LibStatut($objp->tobuy,5,1);
print "</td>"; print "</span></td>";
print "</tr>\n"; print "</tr>\n";
$i++; $i++;
} }

View File

@ -87,7 +87,7 @@ if ($id > 0 || $ref)
exit; exit;
} }
$head=product_prepare_head($object); $head=product_prepare_head($object);
$titre=$langs->trans("CardProduct".$object->type); $titre=$langs->trans("CardProduct".$object->type);
$picto=($object->type== Product::TYPE_SERVICE?'service':'product'); $picto=($object->type== Product::TYPE_SERVICE?'service':'product');
@ -95,8 +95,11 @@ if ($id > 0 || $ref)
$linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>';
dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref'); $shownav = 1;
if ($user->societe_id && ! in_array('product', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref');
$object->info($object->id); $object->info($object->id);
print '<div class="fichecenter">'; print '<div class="fichecenter">';
@ -104,11 +107,11 @@ if ($id > 0 || $ref)
print '<div class="underbanner clearboth"></div>'; print '<div class="underbanner clearboth"></div>';
print '<br>'; print '<br>';
dol_print_object_info($object); dol_print_object_info($object);
print '</div>'; print '</div>';
dol_fiche_end(); dol_fiche_end();
} }

View File

@ -158,7 +158,7 @@ $arrayfields=array(
'p.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500), 'p.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500),
'p.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500), 'p.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500),
'p.tosell'=>array('label'=>$langs->trans("Status").' ('.$langs->trans("Sell").')', 'checked'=>1, 'position'=>1000), 'p.tosell'=>array('label'=>$langs->trans("Status").' ('.$langs->trans("Sell").')', 'checked'=>1, 'position'=>1000),
'p.tobuy'=>array('label'=>$langs->trans("Status").' ('.$langs->trans("Purchases").')', 'checked'=>1, 'position'=>1000) 'p.tobuy'=>array('label'=>$langs->trans("Status").' ('.$langs->trans("Buy").')', 'checked'=>1, 'position'=>1000)
); );
// Extra fields // Extra fields
if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
@ -473,8 +473,8 @@ else
print $hookmanager->resPrint; print $hookmanager->resPrint;
if (! empty($arrayfields['p.datec']['checked'])) print_liste_field_titre($arrayfields['p.datec']['label'],$_SERVER["PHP_SELF"],"p.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder); if (! empty($arrayfields['p.datec']['checked'])) print_liste_field_titre($arrayfields['p.datec']['label'],$_SERVER["PHP_SELF"],"p.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
if (! empty($arrayfields['p.tms']['checked'])) print_liste_field_titre($arrayfields['p.tms']['label'],$_SERVER["PHP_SELF"],"p.tms","",$param,'align="center" class="nowrap"',$sortfield,$sortorder); if (! empty($arrayfields['p.tms']['checked'])) print_liste_field_titre($arrayfields['p.tms']['label'],$_SERVER["PHP_SELF"],"p.tms","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
if (! empty($arrayfields['p.tosell']['checked'])) print_liste_field_titre($langs->trans("Status").' ('.$langs->trans("Sell").')',$_SERVER["PHP_SELF"],"p.tosell","",$param,'align="right"',$sortfield,$sortorder); if (! empty($arrayfields['p.tosell']['checked'])) print_liste_field_titre($arrayfields['p.tosell']['label'],$_SERVER["PHP_SELF"],"p.tosell","",$param,'align="right"',$sortfield,$sortorder);
if (! empty($arrayfields['p.tobuy']['checked'])) print_liste_field_titre($langs->trans("Status").' ('.$langs->trans("Buy").')',$_SERVER["PHP_SELF"],"p.tobuy","",$param,'align="right"',$sortfield,$sortorder); if (! empty($arrayfields['p.tobuy']['checked'])) print_liste_field_titre($arrayfields['p.tobuy']['label'],$_SERVER["PHP_SELF"],"p.tobuy","",$param,'align="right"',$sortfield,$sortorder);
print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch '); print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch ');
print "</tr>\n"; print "</tr>\n";
@ -628,9 +628,9 @@ else
$product_static->status = $objp->tosell; $product_static->status = $objp->tosell;
$product_static->entity = $objp->entity; $product_static->entity = $objp->entity;
if (! empty($conf->stock->enabled) && $user->rights->stock->lire && $type != 1) // To optimize call of load_stock if ((! empty($conf->stock->enabled) && $user->rights->stock->lire && $type != 1) || ! empty($conf->global->STOCK_DISABLE_OPTIM_LOAD)) // To optimize call of load_stock
{ {
if ($objp->fk_product_type != 1) // Not a service if ($objp->fk_product_type != 1 || ! empty($conf->global->STOCK_SUPPORTS_SERVICES)) // Not a service
{ {
$product_static->load_stock('nobatch'); // Load stock_reel + stock_warehouse. This also call load_virtual_stock() $product_static->load_stock('nobatch'); // Load stock_reel + stock_warehouse. This also call load_virtual_stock()
} }

View File

@ -90,21 +90,24 @@ if ($id > 0 || ! empty($ref))
$head = product_prepare_head($object); $head = product_prepare_head($object);
$titre=$langs->trans("CardProduct".$object->type); $titre=$langs->trans("CardProduct".$object->type);
$picto=($object->type==Product::TYPE_SERVICE?'service':'product'); $picto=($object->type==Product::TYPE_SERVICE?'service':'product');
dol_fiche_head($head, 'note', $titre, 0, $picto); dol_fiche_head($head, 'note', $titre, 0, $picto);
$linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>';
dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref'); $shownav = 1;
if ($user->societe_id && ! in_array('product', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref');
$cssclass='titlefield'; $cssclass='titlefield';
//if ($action == 'editnote_public') $cssclass='titlefieldcreate'; //if ($action == 'editnote_public') $cssclass='titlefieldcreate';
//if ($action == 'editnote_private') $cssclass='titlefieldcreate'; //if ($action == 'editnote_private') $cssclass='titlefieldcreate';
//print '<div class="fichecenter">'; //print '<div class="fichecenter">';
print '<div class="underbanner clearboth"></div>'; print '<div class="underbanner clearboth"></div>';
include DOL_DOCUMENT_ROOT.'/core/tpl/notes.tpl.php'; include DOL_DOCUMENT_ROOT.'/core/tpl/notes.tpl.php';
dol_fiche_end(); dol_fiche_end();

View File

@ -90,9 +90,9 @@ if (empty($reshook))
{ {
if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") || GETPOST("button_removefilter")) // All tests are required to be compatible with all browsers if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") || GETPOST("button_removefilter")) // All tests are required to be compatible with all browsers
{ {
$search_soc = ''; $search_soc = '';
} }
if ($action == 'setlabelsellingprice' && $user->admin) if ($action == 'setlabelsellingprice' && $user->admin)
{ {
require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php';
@ -100,7 +100,7 @@ if (empty($reshook))
dolibarr_set_const($db, $keyforlabel, GETPOST('labelsellingprice','alpha'), 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, $keyforlabel, GETPOST('labelsellingprice','alpha'), 'chaine', 0, '', $conf->entity);
$action = ''; $action = '';
} }
if (($action == 'update_vat') && !$cancel && ($user->rights->produit->creer || $user->rights->service->creer)) if (($action == 'update_vat') && !$cancel && ($user->rights->produit->creer || $user->rights->service->creer))
{ {
$tva_tx_txt = GETPOST('tva_tx', 'alpha'); // tva_tx can be '8.5' or '8.5*' or '8.5 (XXX)' or '8.5* (XXX)' $tva_tx_txt = GETPOST('tva_tx', 'alpha'); // tva_tx can be '8.5' or '8.5*' or '8.5 (XXX)' or '8.5* (XXX)'
@ -149,14 +149,14 @@ if (empty($reshook))
$error++; $error++;
setEventMessages($object->error, $object->errors, 'errors'); setEventMessages($object->error, $object->errors, 'errors');
} }
if ($error) if ($error)
{ {
//$localtaxarray=array('0'=>$localtax1_type,'1'=>$localtax1,'2'=>$localtax2_type,'3'=>$localtax2); //$localtaxarray=array('0'=>$localtax1_type,'1'=>$localtax1,'2'=>$localtax2_type,'3'=>$localtax2);
$localtaxarray=array(); // We do not store localtaxes into product, we will use instead the "vat code" to retreive them. $localtaxarray=array(); // We do not store localtaxes into product, we will use instead the "vat code" to retreive them.
$object->updatePrice(0, $object->price_base_type, $user, $tva_tx, '', 0, $npr, 0, 0, $localtaxarray, $vatratecode); $object->updatePrice(0, $object->price_base_type, $user, $tva_tx, '', 0, $npr, 0, 0, $localtaxarray, $vatratecode);
} }
if (! $error) if (! $error)
{ {
$db->commit(); $db->commit();
@ -165,10 +165,10 @@ if (empty($reshook))
{ {
$db->rollback(); $db->rollback();
} }
$action=''; $action='';
} }
if (($action == 'update_price') && !$cancel && $object->getRights()->creer) if (($action == 'update_price') && !$cancel && $object->getRights()->creer)
{ {
$error = 0; $error = 0;
@ -208,14 +208,14 @@ if (empty($reshook))
//Shall we generate prices using price rules? //Shall we generate prices using price rules?
$object->price_autogen = GETPOST('usePriceRules') == 'on'; $object->price_autogen = GETPOST('usePriceRules') == 'on';
for ($i = 1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i ++) for ($i = 1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i ++)
{ {
if (!isset($newprice[$i])) { if (!isset($newprice[$i])) {
continue; continue;
} }
$tva_tx_txt = $newvattx[$i]; $tva_tx_txt = $newvattx[$i];
$vatratecode = ''; $vatratecode = '';
$tva_tx = preg_replace('/[^0-9\.].*$/', '', $tva_tx_txt); // keep remove all after the numbers and dot $tva_tx = preg_replace('/[^0-9\.].*$/', '', $tva_tx_txt); // keep remove all after the numbers and dot
$npr = preg_match('/\*/', $tva_tx_txt) ? 1 : 0; $npr = preg_match('/\*/', $tva_tx_txt) ? 1 : 0;
@ -242,7 +242,7 @@ if (empty($reshook))
$localtax2 = $obj->localtax2; $localtax2 = $obj->localtax2;
$localtax1_type = $obj->localtax1_type; $localtax1_type = $obj->localtax1_type;
$localtax2_type = $obj->localtax2_type; $localtax2_type = $obj->localtax2_type;
} }
} }
$pricestoupdate[$i] = array( $pricestoupdate[$i] = array(
@ -469,7 +469,7 @@ if (empty($reshook))
$prodcustprice->price_base_type = GETPOST("price_base_type", 'alpha'); $prodcustprice->price_base_type = GETPOST("price_base_type", 'alpha');
$tva_tx_txt = GETPOST("tva_tx"); $tva_tx_txt = GETPOST("tva_tx");
$vatratecode = ''; $vatratecode = '';
// We must define tva_tx, npr and local taxes // We must define tva_tx, npr and local taxes
$tva_tx = preg_replace('/[^0-9\.].*$/', '', $tva_tx_txt); // keep remove all after the numbers and dot $tva_tx = preg_replace('/[^0-9\.].*$/', '', $tva_tx_txt); // keep remove all after the numbers and dot
@ -496,8 +496,8 @@ if (empty($reshook))
$localtax1_type = $obj->localtax1_type; $localtax1_type = $obj->localtax1_type;
$localtax2_type = $obj->localtax2_type; $localtax2_type = $obj->localtax2_type;
} }
} }
$prodcustprice->default_vat_code = $vatratecode; $prodcustprice->default_vat_code = $vatratecode;
$prodcustprice->tva_tx = $tva_tx; $prodcustprice->tva_tx = $tva_tx;
$prodcustprice->recuperableonly = $npr; $prodcustprice->recuperableonly = $npr;
@ -505,7 +505,7 @@ if (empty($reshook))
$prodcustprice->localtax2_tx = $localtax2; $prodcustprice->localtax2_tx = $localtax2;
$prodcustprice->localtax1_type = $localtax1_type; $prodcustprice->localtax1_type = $localtax1_type;
$prodcustprice->localtax2_type = $localtax2_type; $prodcustprice->localtax2_type = $localtax2_type;
if (! ($prodcustprice->fk_soc > 0)) if (! ($prodcustprice->fk_soc > 0))
{ {
$langs->load("errors"); $langs->load("errors");
@ -591,7 +591,7 @@ if (empty($reshook))
$localtax2_type = $obj->localtax2_type; $localtax2_type = $obj->localtax2_type;
} }
} }
$prodcustprice->default_vat_code = $vatratecode; $prodcustprice->default_vat_code = $vatratecode;
$prodcustprice->tva_tx = $tva_tx; $prodcustprice->tva_tx = $tva_tx;
$prodcustprice->recuperableonly = $npr; $prodcustprice->recuperableonly = $npr;
@ -599,7 +599,7 @@ if (empty($reshook))
$prodcustprice->localtax2_tx = $localtax2; $prodcustprice->localtax2_tx = $localtax2;
$prodcustprice->localtax1_type = $localtax1_type; $prodcustprice->localtax1_type = $localtax1_type;
$prodcustprice->localtax2_type = $localtax2_type; $prodcustprice->localtax2_type = $localtax2_type;
if ($prodcustprice->price_min < $maxpricesupplier && !empty($conf->global->PRODUCT_MINIMUM_RECOMMENDED_PRICE)) if ($prodcustprice->price_min < $maxpricesupplier && !empty($conf->global->PRODUCT_MINIMUM_RECOMMENDED_PRICE))
{ {
setEventMessages($langs->trans("MinimumPriceLimit",price($maxpricesupplier,0,'',1,-1,-1,'auto')), null, 'errors'); setEventMessages($langs->trans("MinimumPriceLimit",price($maxpricesupplier,0,'',1,-1,-1,'auto')), null, 'errors');
@ -658,7 +658,10 @@ dol_fiche_head($head, 'price', $titre, 0, $picto);
$linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>';
dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref'); $shownav = 1;
if ($user->societe_id && ! in_array('product', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref');
print '<div class="fichecenter">'; print '<div class="fichecenter">';
@ -702,7 +705,7 @@ if (! empty($conf->global->PRODUIT_MULTIPRICES))
print price($object->multiprices_min[$soc->price_level]) . ' ' . $langs->trans(empty($object->multiprices_base_type[$soc->price_level])?'HT':$object->multiprices_base_type[$soc->price_level]); print price($object->multiprices_min[$soc->price_level]) . ' ' . $langs->trans(empty($object->multiprices_base_type[$soc->price_level])?'HT':$object->multiprices_base_type[$soc->price_level]);
} }
print '</td></tr>'; print '</td></tr>';
if (! empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) // using this option is a bug. kept for backward compatibility if (! empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) // using this option is a bug. kept for backward compatibility
{ {
// TVA // TVA
@ -719,7 +722,7 @@ if (! empty($conf->global->PRODUIT_MULTIPRICES))
else print vatrate($object->tva_tx . ($object->tva_npr ? '*' : ''), true); else print vatrate($object->tva_tx . ($object->tva_npr ? '*' : ''), true);
print '</td></tr>'; print '</td></tr>';
} }
} }
else else
{ {
@ -742,9 +745,9 @@ if (! empty($conf->global->PRODUIT_MULTIPRICES))
print '</td></tr>'; print '</td></tr>';
} }
print '</table>'; print '</table>';
print '<br>'; print '<br>';
print '<table class="noborder tableforfield" width="100%">'; print '<table class="noborder tableforfield" width="100%">';
print '<tr class="liste_titre"><td>'; print '<tr class="liste_titre"><td>';
print $langs->trans("PriceLevel"); print $langs->trans("PriceLevel");
@ -755,11 +758,11 @@ if (! empty($conf->global->PRODUIT_MULTIPRICES))
print '</tr>'; print '</tr>';
$var=True; $var=True;
for($i = 1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i++) for($i = 1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i++)
{ {
$var = ! $var; $var = ! $var;
print '<tr '.$bc[$var].'>'; print '<tr '.$bc[$var].'>';
// Label of price // Label of price
@ -824,7 +827,7 @@ if (! empty($conf->global->PRODUIT_MULTIPRICES))
print '<td align="right">' . $langs->trans("Discount") . '</td>'; print '<td align="right">' . $langs->trans("Discount") . '</td>';
print '<td>&nbsp;</td>'; print '<td>&nbsp;</td>';
print '</tr>'; print '</tr>';
foreach ($object->prices_by_qty_list[$i] as $ii => $prices) foreach ($object->prices_by_qty_list[$i] as $ii => $prices)
{ {
if ($action == 'edit_price_by_qty' && $rowid == $prices['rowid'] && ($user->rights->produit->creer || $user->rights->service->creer)) { if ($action == 'edit_price_by_qty' && $rowid == $prices['rowid'] && ($user->rights->produit->creer || $user->rights->service->creer)) {
print '<form action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '" method="POST">'; print '<form action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '" method="POST">';
@ -882,15 +885,15 @@ if (! empty($conf->global->PRODUIT_MULTIPRICES))
} }
} }
} }
} }
else else
{ {
// TVA // TVA
print '<tr><td class="titlefield">' . $langs->trans("VATRate") . '</td><td>'; print '<tr><td class="titlefield">' . $langs->trans("VATRate") . '</td><td>';
if ($object->default_vat_code) if ($object->default_vat_code)
{ {
print vatrate($object->tva_tx, true) . ' ('.$object->default_vat_code.')'; print vatrate($object->tva_tx, true) . ' ('.$object->default_vat_code.')';
} }
else print vatrate($object->tva_tx, true, $object->tva_npr, true); else print vatrate($object->tva_tx, true, $object->tva_npr, true);
print '</td></tr>'; print '</td></tr>';
@ -1021,18 +1024,18 @@ if (! $action || $action == 'delete' || $action == 'showlog_customer_price' || $
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?action=add_customer_price&amp;id=' . $object->id . '">' . $langs->trans("AddCustomerPrice") . '</a></div>'; print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?action=add_customer_price&amp;id=' . $object->id . '">' . $langs->trans("AddCustomerPrice") . '</a></div>';
} }
} }
if (! empty($conf->global->PRODUIT_MULTIPRICES)) if (! empty($conf->global->PRODUIT_MULTIPRICES))
{ {
if ($user->rights->produit->creer || $user->rights->service->creer) { if ($user->rights->produit->creer || $user->rights->service->creer) {
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?action=edit_vat&amp;id=' . $object->id . '">' . $langs->trans("UpdateVAT") . '</a></div>'; print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?action=edit_vat&amp;id=' . $object->id . '">' . $langs->trans("UpdateVAT") . '</a></div>';
} }
if ($user->rights->produit->creer || $user->rights->service->creer) { if ($user->rights->produit->creer || $user->rights->service->creer) {
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?action=edit_price&amp;id=' . $object->id . '">' . $langs->trans("UpdateLevelPrices") . '</a></div>'; print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?action=edit_price&amp;id=' . $object->id . '">' . $langs->trans("UpdateLevelPrices") . '</a></div>';
} }
} }
print "\n</div>\n"; print "\n</div>\n";
} }
@ -1041,7 +1044,7 @@ if (! $action || $action == 'delete' || $action == 'showlog_customer_price' || $
/* /*
* Edit price area * Edit price area
*/ */
if ($action == 'edit_vat' && ($user->rights->produit->creer || $user->rights->service->creer)) if ($action == 'edit_vat' && ($user->rights->produit->creer || $user->rights->service->creer))
{ {
print load_fiche_titre($langs->trans("UpdateVAT"), ''); print load_fiche_titre($langs->trans("UpdateVAT"), '');
@ -1052,9 +1055,9 @@ if ($action == 'edit_vat' && ($user->rights->produit->creer || $user->rights->se
print '<input type="hidden" name="id" value="' . $object->id . '">'; print '<input type="hidden" name="id" value="' . $object->id . '">';
dol_fiche_head(''); dol_fiche_head('');
print '<table class="border" width="100%">'; print '<table class="border" width="100%">';
// VAT // VAT
print '<tr><td>' . $langs->trans("VATRate") . '</td><td>'; print '<tr><td>' . $langs->trans("VATRate") . '</td><td>';
print $form->load_tva("tva_tx", $object->default_vat_code ? $object->tva_tx.' ('.$object->default_vat_code.')' : $object->tva_tx, $mysoc, '', $object->id, $object->tva_npr, $object->type, false, 1); print $form->load_tva("tva_tx", $object->default_vat_code ? $object->tva_tx.' ('.$object->default_vat_code.')' : $object->tva_tx, $mysoc, '', $object->id, $object->tva_npr, $object->type, false, 1);
@ -1072,7 +1075,7 @@ if ($action == 'edit_vat' && ($user->rights->produit->creer || $user->rights->se
print '<br></form><br>'; print '<br></form><br>';
} }
if ($action == 'edit_price' && $object->getRights()->creer) if ($action == 'edit_price' && $object->getRights()->creer)
{ {
print load_fiche_titre($langs->trans("NewPrice"), ''); print load_fiche_titre($langs->trans("NewPrice"), '');
@ -1085,7 +1088,7 @@ if ($action == 'edit_price' && $object->getRights()->creer)
print '<input type="hidden" name="id" value="' . $object->id . '">'; print '<input type="hidden" name="id" value="' . $object->id . '">';
dol_fiche_head(''); dol_fiche_head('');
print '<table class="border" width="100%">'; print '<table class="border" width="100%">';
// VAT // VAT
@ -1168,7 +1171,7 @@ if ($action == 'edit_price' && $object->getRights()->creer)
} }
print '</td>'; print '</td>';
print '</tr>'; print '</tr>';
print '</table>'; print '</table>';
dol_fiche_end(); dol_fiche_end();
@ -1213,21 +1216,21 @@ if ($action == 'edit_price' && $object->getRights()->creer)
print '<input type="hidden" name="id" value="' . $object->id . '">'; print '<input type="hidden" name="id" value="' . $object->id . '">';
dol_fiche_head(''); dol_fiche_head('');
if (! empty($conf->global->PRODUIT_MULTIPRICES) && ! empty($conf->global->PRODUIT_MULTIPRICES_ALLOW_AUTOCALC_PRICELEVEL)) { if (! empty($conf->global->PRODUIT_MULTIPRICES) && ! empty($conf->global->PRODUIT_MULTIPRICES_ALLOW_AUTOCALC_PRICELEVEL)) {
print $langs->trans('UseMultipriceRules'). ' <input type="checkbox" id="usePriceRules" name="usePriceRules" '.($object->price_autogen ? 'checked' : '').'><br><br>'; print $langs->trans('UseMultipriceRules'). ' <input type="checkbox" id="usePriceRules" name="usePriceRules" '.($object->price_autogen ? 'checked' : '').'><br><br>';
} }
print '<table class="noborder">'; print '<table class="noborder">';
print '<thead><tr class="liste_titre">'; print '<thead><tr class="liste_titre">';
print '<td>'.$langs->trans("PriceLevel").'</td>'; print '<td>'.$langs->trans("PriceLevel").'</td>';
if (!empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) print '<td style="text-align: center">'.$langs->trans("VATRate").'</td>'; if (!empty($conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL)) print '<td style="text-align: center">'.$langs->trans("VATRate").'</td>';
else print '<td></td>'; else print '<td></td>';
print '<td class="center">'.$langs->trans("SellingPrice").'</td>'; print '<td class="center">'.$langs->trans("SellingPrice").'</td>';
print '<td class="center">'.$langs->trans("MinPrice").'</td>'; print '<td class="center">'.$langs->trans("MinPrice").'</td>';
if (!empty($conf->global->PRODUCT_MINIMUM_RECOMMENDED_PRICE)) { if (!empty($conf->global->PRODUCT_MINIMUM_RECOMMENDED_PRICE)) {
@ -1236,9 +1239,9 @@ if ($action == 'edit_price' && $object->getRights()->creer)
print '</tr></thead>'; print '</tr></thead>';
print '<tbody>'; print '<tbody>';
$var = false; $var = false;
for ($i = 1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i ++) for ($i = 1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i ++)
{ {
$var = !$var; $var = !$var;
@ -1291,11 +1294,11 @@ if ($action == 'edit_price' && $object->getRights()->creer)
} }
print '</tbody>'; print '</tbody>';
print '</table>'; print '</table>';
dol_fiche_end(); dol_fiche_end();
print '<div style="text-align: center">'; print '<div style="text-align: center">';
print '<input type="submit" class="button" value="' . $langs->trans("Save") . '">'; print '<input type="submit" class="button" value="' . $langs->trans("Save") . '">';
print '&nbsp;&nbsp;&nbsp;'; print '&nbsp;&nbsp;&nbsp;';
@ -1321,48 +1324,50 @@ if ((empty($conf->global->PRODUIT_CUSTOMER_PRICES) || $action=='showlog_default_
if (! empty($socid) && ! empty($conf->global->PRODUIT_MULTIPRICES)) $sql .= " AND p.price_level = " . $soc->price_level; if (! empty($socid) && ! empty($conf->global->PRODUIT_MULTIPRICES)) $sql .= " AND p.price_level = " . $soc->price_level;
$sql .= " ORDER BY p.date_price DESC, p.rowid DESC, p.price_level ASC"; $sql .= " ORDER BY p.date_price DESC, p.rowid DESC, p.price_level ASC";
// $sql .= $db->plimit(); // $sql .= $db->plimit();
$result = $db->query($sql); $result = $db->query($sql);
if ($result) if ($result)
{ {
$num = $db->num_rows($result); print '<div class="divlogofpreviouscustomerprice">';
$num = $db->num_rows($result);
if (! $num) if (! $num)
{ {
$db->free($result); $db->free($result);
// Il doit au moins y avoir la ligne de prix initial. // Il doit au moins y avoir la ligne de prix initial.
// On l'ajoute donc pour remettre a niveau (pb vieilles versions) // On l'ajoute donc pour remettre a niveau (pb vieilles versions)
$object->updatePrice($object->price, $object->price_base_type, $user, $newprice_min); $object->updatePrice($object->price, $object->price_base_type, $user, $newprice_min);
$result = $db->query($sql); $result = $db->query($sql);
$num = $db->num_rows($result); $num = $db->num_rows($result);
} }
if ($num > 0) if ($num > 0)
{ {
// Default prices or // Default prices or
// Log of previous customer prices // Log of previous customer prices
$backbutton='<a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '">' . $langs->trans("Back") . '</a>'; $backbutton='<a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '">' . $langs->trans("Back") . '</a>';
if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) print_barre_liste($langs->trans("DefaultPrice"), 0, $_SERVER["PHP_SELF"], '', '', '', $backbutton, $num, $num, 'title_accountancy.png'); if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) print_barre_liste($langs->trans("DefaultPrice"), 0, $_SERVER["PHP_SELF"], '', '', '', $backbutton, $num, $num, 'title_accountancy.png');
else print_barre_liste($langs->trans("PriceByCustomerLog"), 0, $_SERVER["PHP_SELF"], '', '', '', '', $num, $num, 'title_accountancy.png'); else print_barre_liste($langs->trans("PriceByCustomerLog"), 0, $_SERVER["PHP_SELF"], '', '', '', '', $num, $num, 'title_accountancy.png');
//if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) print_barre_liste($langs->trans("DefaultPrice"),'','','','','',$backbutton, 0, 0, 'title_accountancy.png'); //if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) print_barre_liste($langs->trans("DefaultPrice"),'','','','','',$backbutton, 0, 0, 'title_accountancy.png');
//else print_barre_liste($langs->trans("PriceByCustomerLog"),'','','','','','', 0, 0, 'title_accountancy.png'); //else print_barre_liste($langs->trans("PriceByCustomerLog"),'','','','','','', 0, 0, 'title_accountancy.png');
print '<div class="div-table-responsive">'; print '<div class="div-table-responsive">';
print '<table class="noborder" width="100%">'; print '<table class="noborder" width="100%">';
print '<tr class="liste_titre">'; print '<tr class="liste_titre">';
print '<td>' . $langs->trans("AppliedPricesFrom") . '</td>'; print '<td>' . $langs->trans("AppliedPricesFrom") . '</td>';
if (! empty($conf->global->PRODUIT_MULTIPRICES)) { if (! empty($conf->global->PRODUIT_MULTIPRICES)) {
print '<td align="center">' . $langs->trans("PriceLevel") . '</td>'; print '<td align="center">' . $langs->trans("PriceLevel") . '</td>';
} }
if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY)) { if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY)) {
print '<td align="center">' . $langs->trans("Type") . '</td>'; print '<td align="center">' . $langs->trans("Type") . '</td>';
} }
print '<td align="center">' . $langs->trans("PriceBase") . '</td>'; print '<td align="center">' . $langs->trans("PriceBase") . '</td>';
print $conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL; print $conf->global->PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL;
if (empty($conf->global->PRODUIT_MULTIPRICES)) print '<td align="right">' . $langs->trans("VATRate") . '</td>'; if (empty($conf->global->PRODUIT_MULTIPRICES)) print '<td align="right">' . $langs->trans("VATRate") . '</td>';
@ -1377,9 +1382,9 @@ if ((empty($conf->global->PRODUIT_CUSTOMER_PRICES) || $action=='showlog_default_
if ($user->rights->produit->supprimer) if ($user->rights->produit->supprimer)
print '<td align="right">&nbsp;</td>'; print '<td align="right">&nbsp;</td>';
print '</tr>'; print '</tr>';
$notfirstlineforlevel=array(); $notfirstlineforlevel=array();
$var = True; $var = True;
$i = 0; $i = 0;
while ($i < $num) while ($i < $num)
@ -1389,7 +1394,7 @@ if ((empty($conf->global->PRODUIT_CUSTOMER_PRICES) || $action=='showlog_default_
print '<tr '. $bc[$var].'>'; print '<tr '. $bc[$var].'>';
// Date // Date
print "<td>" . dol_print_date($db->jdate($objp->dp), "dayhour") . "</td>"; print "<td>" . dol_print_date($db->jdate($objp->dp), "dayhour") . "</td>";
// Price level // Price level
if (! empty($conf->global->PRODUIT_MULTIPRICES)) { if (! empty($conf->global->PRODUIT_MULTIPRICES)) {
print '<td align="center">' . $objp->price_level . "</td>"; print '<td align="center">' . $objp->price_level . "</td>";
@ -1400,9 +1405,9 @@ if ((empty($conf->global->PRODUIT_CUSTOMER_PRICES) || $action=='showlog_default_
$type = ($objp->price_by_qty == 1) ? 'PriceByQuantity' : 'Standard'; $type = ($objp->price_by_qty == 1) ? 'PriceByQuantity' : 'Standard';
print '<td align="center">' . $langs->trans($type) . "</td>"; print '<td align="center">' . $langs->trans($type) . "</td>";
} }
print '<td align="center">' . $langs->trans($objp->price_base_type) . "</td>"; print '<td align="center">' . $langs->trans($objp->price_base_type) . "</td>";
if (empty($conf->global->PRODUIT_MULTIPRICES)) if (empty($conf->global->PRODUIT_MULTIPRICES))
{ {
print '<td align="right">'; print '<td align="right">';
if ($objp->default_vat_code) if ($objp->default_vat_code)
@ -1412,7 +1417,7 @@ if ((empty($conf->global->PRODUIT_CUSTOMER_PRICES) || $action=='showlog_default_
else print vatrate($objp->tva_tx, true, $objp->recuperableonly); else print vatrate($objp->tva_tx, true, $objp->recuperableonly);
print "</td>"; print "</td>";
} }
// Price // Price
if (! empty($objp->fk_price_expression) && ! empty($conf->dynamicprices->enabled)) if (! empty($objp->fk_price_expression) && ! empty($conf->dynamicprices->enabled))
{ {
@ -1433,23 +1438,23 @@ if ((empty($conf->global->PRODUIT_CUSTOMER_PRICES) || $action=='showlog_default_
} }
print '<td align="right">' . ($objp->price_base_type != 'TTC' ? price($objp->price_min) : '') . '</td>'; print '<td align="right">' . ($objp->price_base_type != 'TTC' ? price($objp->price_min) : '') . '</td>';
print '<td align="right">' . ($objp->price_base_type == 'TTC' ? price($objp->price_min_ttc) : '') . '</td>'; print '<td align="right">' . ($objp->price_base_type == 'TTC' ? price($objp->price_min_ttc) : '') . '</td>';
// User // User
print '<td align="right"><a href="' . DOL_URL_ROOT . '/user/card.php?id=' . $objp->user_id . '">' . img_object($langs->trans("ShowUser"), 'user') . ' ' . $objp->login . '</a></td>'; print '<td align="right"><a href="' . DOL_URL_ROOT . '/user/card.php?id=' . $objp->user_id . '">' . img_object($langs->trans("ShowUser"), 'user') . ' ' . $objp->login . '</a></td>';
// Action // Action
if ($user->rights->produit->supprimer) if ($user->rights->produit->supprimer)
{ {
$candelete=0; $candelete=0;
if (! empty($conf->global->PRODUIT_MULTIPRICES)) if (! empty($conf->global->PRODUIT_MULTIPRICES))
{ {
if (empty($notfirstlineforlevel[$objp->price_level])) $notfirstlineforlevel[$objp->price_level]=1; if (empty($notfirstlineforlevel[$objp->price_level])) $notfirstlineforlevel[$objp->price_level]=1;
else $candelete=1; else $candelete=1;
} }
elseif ($i > 0) $candelete=1; elseif ($i > 0) $candelete=1;
print '<td align="right">'; print '<td align="right">';
if ($candelete) if ($candelete)
{ {
print '<a href="' . $_SERVER["PHP_SELF"] . '?action=delete&amp;id=' . $object->id . '&amp;lineid=' . $objp->rowid . '">'; print '<a href="' . $_SERVER["PHP_SELF"] . '?action=delete&amp;id=' . $object->id . '&amp;lineid=' . $objp->rowid . '">';
print img_delete(); print img_delete();
@ -1458,16 +1463,18 @@ if ((empty($conf->global->PRODUIT_CUSTOMER_PRICES) || $action=='showlog_default_
print '&nbsp;'; // Can not delete last price (it's current price) print '&nbsp;'; // Can not delete last price (it's current price)
print '</td>'; print '</td>';
} }
print "</tr>\n"; print "</tr>\n";
$i++; $i++;
} }
$db->free($result); $db->free($result);
print "</table>"; print "</table>";
print '</div>'; print '</div>';
print "<br>"; print "<br>";
} }
print '</div>';
} else { } else {
dol_print_error($db); dol_print_error($db);
} }
@ -1511,9 +1518,9 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES))
print '<input type="hidden" name="token" value="' . $_SESSION ['newtoken'] . '">'; print '<input type="hidden" name="token" value="' . $_SESSION ['newtoken'] . '">';
print '<input type="hidden" name="action" value="add_customer_price_confirm">'; print '<input type="hidden" name="action" value="add_customer_price_confirm">';
print '<input type="hidden" name="id" value="' . $object->id . '">'; print '<input type="hidden" name="id" value="' . $object->id . '">';
dol_fiche_head(); dol_fiche_head();
print '<table class="border" width="100%">'; print '<table class="border" width="100%">';
print '<tr>'; print '<tr>';
print '<td class="fieldrequired">' . $langs->trans('ThirdParty') . '</td>'; print '<td class="fieldrequired">' . $langs->trans('ThirdParty') . '</td>';
@ -1575,7 +1582,7 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES))
print '</table>'; print '</table>';
dol_fiche_end(); dol_fiche_end();
print '<div class="center">'; print '<div class="center">';
print '<input type="submit" class="button" value="' . $langs->trans("Save") . '">'; print '<input type="submit" class="button" value="' . $langs->trans("Save") . '">';
print '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'; print '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
@ -1612,7 +1619,7 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES))
print '<tr><td>' . $langs->trans("VATRate") . '</td><td colspan="2">'; print '<tr><td>' . $langs->trans("VATRate") . '</td><td colspan="2">';
print $form->load_tva("tva_tx", $prodcustprice->default_vat_code ? $prodcustprice->tva_tx.' ('.$prodcustprice->default_vat_code.')' : $prodcustprice->tva_tx, $mysoc, '', $object->id, $prodcustprice->recuperableonly, $object->type, false, 1); print $form->load_tva("tva_tx", $prodcustprice->default_vat_code ? $prodcustprice->tva_tx.' ('.$prodcustprice->default_vat_code.')' : $prodcustprice->tva_tx, $mysoc, '', $object->id, $prodcustprice->recuperableonly, $object->type, false, 1);
print '</td></tr>'; print '</td></tr>';
// Price base // Price base
print '<tr><td width="15%">'; print '<tr><td width="15%">';
print $langs->trans('PriceBase'); print $langs->trans('PriceBase');
@ -1689,12 +1696,12 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES))
$staticsoc = new Societe($db); $staticsoc = new Societe($db);
$staticsoc->fetch(GETPOST('socid', 'int')); $staticsoc->fetch(GETPOST('socid', 'int'));
$title=$langs->trans('PriceByCustomerLog'); $title=$langs->trans('PriceByCustomerLog');
$title.=' - '.$staticsoc->getNomUrl(1); $title.=' - '.$staticsoc->getNomUrl(1);
$backbutton='<a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '">' . $langs->trans("Back") . '</a>'; $backbutton='<a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '">' . $langs->trans("Back") . '</a>';
print_barre_liste($title, $page, $_SERVEUR['PHP_SELF'], $option, $sortfield, $sortorder, $backbutton, count($prodcustprice->lines), $nbtotalofrecords, 'title_accountancy.png'); print_barre_liste($title, $page, $_SERVEUR['PHP_SELF'], $option, $sortfield, $sortorder, $backbutton, count($prodcustprice->lines), $nbtotalofrecords, 'title_accountancy.png');
if (count($prodcustprice->lines) > 0) if (count($prodcustprice->lines) > 0)
@ -1732,7 +1739,7 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES))
print "<td>" . dol_print_date($line->datec, "dayhour") . "</td>"; print "<td>" . dol_print_date($line->datec, "dayhour") . "</td>";
$tva_tx = $line->default_vat_code ? $line->tva_tx.' ('.$line->default_vat_code.')' : $line->tva_tx; $tva_tx = $line->default_vat_code ? $line->tva_tx.' ('.$line->default_vat_code.')' : $line->tva_tx;
print '<td align="center">' . $langs->trans($line->price_base_type) . "</td>"; print '<td align="center">' . $langs->trans($line->price_base_type) . "</td>";
print '<td align="right">' . vatrate($tva_tx, true, $line->recuperableonly) . "</td>"; print '<td align="right">' . vatrate($tva_tx, true, $line->recuperableonly) . "</td>";
print '<td align="right">' . price($line->price) . "</td>"; print '<td align="right">' . price($line->price) . "</td>";
@ -1756,7 +1763,7 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES))
{ {
// List of all prices by customers // List of all prices by customers
print '<!-- list of prices per customer -->'."\n"; print '<!-- list of prices per customer -->'."\n";
// Count total nb of records // Count total nb of records
$nbtotalofrecords = ''; $nbtotalofrecords = '';
if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) {
@ -1802,15 +1809,15 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES))
print '</td>'; print '</td>';
print '</tr>'; print '</tr>';
} }
$var = False; $var = False;
// Line for default price // Line for default price
print "<tr ".$bc[$var].">"; print "<tr ".$bc[$var].">";
print "<td>" . $langs->trans("Default") . "</td>"; print "<td>" . $langs->trans("Default") . "</td>";
print "<td>" . "</td>"; print "<td>" . "</td>";
print '<td align="center">' . $langs->trans($object->price_base_type) . "</td>"; print '<td align="center">' . $langs->trans($object->price_base_type) . "</td>";
print '<td align="right">' . vatrate($object->tva_tx, true, $object->recuperableonly) . "</td>"; print '<td align="right">' . vatrate($object->tva_tx, true, $object->recuperableonly) . "</td>";
print '<td align="right">' . price($object->price) . "</td>"; print '<td align="right">' . price($object->price) . "</td>";
@ -1834,21 +1841,21 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES))
} }
print "</tr>\n"; print "</tr>\n";
if (count($prodcustprice->lines) > 0) if (count($prodcustprice->lines) > 0)
{ {
$var = false; $var = false;
foreach ($prodcustprice->lines as $line) foreach ($prodcustprice->lines as $line)
{ {
$var = ! $var; $var = ! $var;
print "<tr ".$bc[$var].">"; print "<tr ".$bc[$var].">";
// Date // Date
$staticsoc = new Societe($db); $staticsoc = new Societe($db);
$staticsoc->fetch($line->fk_soc); $staticsoc->fetch($line->fk_soc);
$tva_tx = $line->default_vat_code ? $line->tva_tx.' ('.$line->default_vat_code.')' : $line->tva_tx; $tva_tx = $line->default_vat_code ? $line->tva_tx.' ('.$line->default_vat_code.')' : $line->tva_tx;
print "<td>" . $staticsoc->getNomUrl(1) . "</td>"; print "<td>" . $staticsoc->getNomUrl(1) . "</td>";
print "<td>" . dol_print_date($line->datec, "dayhour") . "</td>"; print "<td>" . dol_print_date($line->datec, "dayhour") . "</td>";

View File

@ -124,8 +124,11 @@ if (! empty($id) || ! empty($ref) || GETPOST('id') == 'all')
dol_fiche_head($head, 'stats', $titre, 0, $picto); dol_fiche_head($head, 'stats', $titre, 0, $picto);
$linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>';
dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref', '', '', '', 0, '', '', 1); $shownav = 1;
if ($user->societe_id && ! in_array('product', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref', '', '', '', 0, '', '', 1);
dol_fiche_end(); dol_fiche_end();
} }
@ -323,15 +326,15 @@ if (! empty($id) || ! empty($ref) || GETPOST('id') == 'all')
foreach($graphfiles as $key => $val) foreach($graphfiles as $key => $val)
{ {
if (! $graphfiles[$key]['file']) continue; if (! $graphfiles[$key]['file']) continue;
if ($graphfiles == 'propal' && ! $user->rights->propale->lire) continue; if ($graphfiles == 'propal' && ! $user->rights->propale->lire) continue;
if ($graphfiles == 'order' && ! $user->rights->commande->lire) continue; if ($graphfiles == 'order' && ! $user->rights->commande->lire) continue;
if ($graphfiles == 'invoices' && ! $user->rights->facture->lire) continue; if ($graphfiles == 'invoices' && ! $user->rights->facture->lire) continue;
if ($graphfiles == 'proposals_suppliers' && ! $user->rights->supplier_proposal->lire) continue; if ($graphfiles == 'proposals_suppliers' && ! $user->rights->supplier_proposal->lire) continue;
if ($graphfiles == 'invoices_suppliers' && ! $user->rights->fournisseur->facture->lire) continue; if ($graphfiles == 'invoices_suppliers' && ! $user->rights->fournisseur->facture->lire) continue;
if ($graphfiles == 'orders_suppliers' && ! $user->rights->fournisseur->commande->lire) continue; if ($graphfiles == 'orders_suppliers' && ! $user->rights->fournisseur->commande->lire) continue;
if ($i % 2 == 0) if ($i % 2 == 0)
{ {
print "\n".'<div class="fichecenter"><div class="fichehalfleft">'."\n"; print "\n".'<div class="fichecenter"><div class="fichehalfleft">'."\n";
@ -340,7 +343,7 @@ if (! empty($id) || ! empty($ref) || GETPOST('id') == 'all')
{ {
print "\n".'<div class="fichehalfright"><div class="ficheaddleft">'."\n"; print "\n".'<div class="fichehalfright"><div class="ficheaddleft">'."\n";
} }
// Date generation // Date generation
if ($graphfiles[$key]['output'] && ! $px->isGraphKo()) if ($graphfiles[$key]['output'] && ! $px->isGraphKo())
{ {
@ -352,7 +355,7 @@ if (! empty($id) || ! empty($ref) || GETPOST('id') == 'all')
print $dategenerated=($mesg?'<font class="error">'.$mesg.'</font>':$langs->trans("ChartNotGenerated")); print $dategenerated=($mesg?'<font class="error">'.$mesg.'</font>':$langs->trans("ChartNotGenerated"));
} }
$linktoregenerate='<a href="'.$_SERVER["PHP_SELF"].'?id='.(GETPOST('id')?GETPOST('id'):$object->id).((string) $type != ''?'&amp;type='.$type:'').'&amp;action=recalcul&amp;mode='.$mode.'">'.img_picto($langs->trans("ReCalculate").' ('.$dategenerated.')','refresh').'</a>'; $linktoregenerate='<a href="'.$_SERVER["PHP_SELF"].'?id='.(GETPOST('id')?GETPOST('id'):$object->id).((string) $type != ''?'&amp;type='.$type:'').'&amp;action=recalcul&amp;mode='.$mode.'">'.img_picto($langs->trans("ReCalculate").' ('.$dategenerated.')','refresh').'</a>';
// Show graph // Show graph
print '<table class="noborder" width="100%">'; print '<table class="noborder" width="100%">';
// Label // Label
@ -366,7 +369,7 @@ if (! empty($id) || ! empty($ref) || GETPOST('id') == 'all')
print $graphfiles[$key]['output']; print $graphfiles[$key]['output'];
print '</td></tr>'; print '</td></tr>';
print '</table>'; print '</table>';
if ($i % 2 == 0) if ($i % 2 == 0)
{ {
print "\n".'</div>'."\n"; print "\n".'</div>'."\n";
@ -376,7 +379,7 @@ if (! empty($id) || ! empty($ref) || GETPOST('id') == 'all')
print "\n".'</div></div></div>'; print "\n".'</div></div></div>';
print '<div class="clear"><div class="fichecenter"><br></div></div>'."\n"; print '<div class="clear"><div class="fichecenter"><br></div></div>'."\n";
} }
$i++; $i++;
} }
} }

View File

@ -82,7 +82,7 @@ if ($id > 0 || ! empty($ref))
$result = $product->fetch($id, $ref); $result = $product->fetch($id, $ref);
$object = $product; $object = $product;
$parameters=array('id'=>$id); $parameters=array('id'=>$id);
$reshook=$hookmanager->executeHooks('doActions',$parameters,$product,$action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('doActions',$parameters,$product,$action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
@ -100,11 +100,14 @@ if ($id > 0 || ! empty($ref))
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
$linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>';
dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref'); $shownav = 1;
if ($user->societe_id && ! in_array('product', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref');
print '<div class="fichecenter">'; print '<div class="fichecenter">';
print '<div class="underbanner clearboth"></div>'; print '<div class="underbanner clearboth"></div>';
print '<table class="border tableforfield" width="100%">'; print '<table class="border tableforfield" width="100%">';
@ -114,9 +117,9 @@ if ($id > 0 || ! empty($ref))
print '</div>'; print '</div>';
print '<div style="clear:both"></div>'; print '<div style="clear:both"></div>';
dol_fiche_end(); dol_fiche_end();
if ($user->rights->commande->lire) if ($user->rights->commande->lire)
{ {

View File

@ -88,7 +88,7 @@ if ($id > 0 || ! empty($ref)) {
$result = $product->fetch($id, $ref); $result = $product->fetch($id, $ref);
$object = $product; $object = $product;
$parameters = array ('id' => $id); $parameters = array ('id' => $id);
$reshook = $hookmanager->executeHooks('doActions', $parameters, $product, $action); // Note that $action and $object may have been modified by some hooks $reshook = $hookmanager->executeHooks('doActions', $parameters, $product, $action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) if ($reshook < 0)
@ -96,7 +96,7 @@ if ($id > 0 || ! empty($ref)) {
llxHeader("", "", $langs->trans("CardProduct" . $product->type)); llxHeader("", "", $langs->trans("CardProduct" . $product->type));
if ($result > 0) if ($result > 0)
{ {
$head = product_prepare_head($product); $head = product_prepare_head($product);
$titre = $langs->trans("CardProduct" . $product->type); $titre = $langs->trans("CardProduct" . $product->type);
@ -108,11 +108,14 @@ if ($id > 0 || ! empty($ref)) {
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
$linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>';
dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref'); $shownav = 1;
if ($user->societe_id && ! in_array('product', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref');
print '<div class="fichecenter">'; print '<div class="fichecenter">';
print '<div class="underbanner clearboth"></div>'; print '<div class="underbanner clearboth"></div>';
print '<table class="border tableforfield" width="100%">'; print '<table class="border tableforfield" width="100%">';
@ -122,9 +125,9 @@ if ($id > 0 || ! empty($ref)) {
print '</div>'; print '</div>';
print '<div style="clear:both"></div>'; print '<div style="clear:both"></div>';
dol_fiche_end(); dol_fiche_end();
if ($user->rights->fournisseur->commande->lire) if ($user->rights->fournisseur->commande->lire)
{ {

View File

@ -72,7 +72,7 @@ if ($id > 0 || ! empty($ref))
$result = $product->fetch($id, $ref); $result = $product->fetch($id, $ref);
$object = $product; $object = $product;
$parameters=array('id'=>$id); $parameters=array('id'=>$id);
$reshook=$hookmanager->executeHooks('doActions',$parameters,$product,$action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('doActions',$parameters,$product,$action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
@ -90,11 +90,14 @@ if ($id > 0 || ! empty($ref))
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
$linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>';
dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref'); $shownav = 1;
if ($user->societe_id && ! in_array('product', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref');
print '<div class="fichecenter">'; print '<div class="fichecenter">';
print '<div class="underbanner clearboth"></div>'; print '<div class="underbanner clearboth"></div>';
print '<table class="border tableforfield" width="100%">'; print '<table class="border tableforfield" width="100%">';
@ -104,9 +107,9 @@ if ($id > 0 || ! empty($ref))
print '</div>'; print '</div>';
print '<div style="clear:both"></div>'; print '<div style="clear:both"></div>';
dol_fiche_end(); dol_fiche_end();
$now=dol_now(); $now=dol_now();
@ -141,7 +144,7 @@ if ($id > 0 || ! empty($ref))
$option .= '&amp;search_month=' . $search_month; $option .= '&amp;search_month=' . $search_month;
if (! empty($search_year)) if (! empty($search_year))
$option .= '&amp;search_year=' . $search_year; $option .= '&amp;search_year=' . $search_year;
print '<form method="post" action="' . $_SERVER['PHP_SELF'] . '?id=' . $product->id . '" name="search_form">' . "\n"; print '<form method="post" action="' . $_SERVER['PHP_SELF'] . '?id=' . $product->id . '" name="search_form">' . "\n";
if (! empty($sortfield)) if (! empty($sortfield))
print '<input type="hidden" name="sortfield" value="' . $sortfield . '"/>'; print '<input type="hidden" name="sortfield" value="' . $sortfield . '"/>';
@ -151,7 +154,7 @@ if ($id > 0 || ! empty($ref))
print '<input type="hidden" name="page" value="' . $page . '"/>'; print '<input type="hidden" name="page" value="' . $page . '"/>';
$option .= '&amp;page=' . $page; $option .= '&amp;page=' . $page;
} }
print_barre_liste($langs->trans("Contrats"),$page,$_SERVER["PHP_SELF"],"&amp;id=$product->id",$sortfield,$sortorder,'',$num,0,''); print_barre_liste($langs->trans("Contrats"),$page,$_SERVER["PHP_SELF"],"&amp;id=$product->id",$sortfield,$sortorder,'',$num,0,'');
$i = 0; $i = 0;
@ -197,7 +200,7 @@ if ($id > 0 || ! empty($ref))
$i++; $i++;
} }
} }
print '</table>'; print '</table>';
print '</div>'; print '</div>';
print '</form>'; print '</form>';

View File

@ -83,9 +83,9 @@ if ($id > 0 || ! empty($ref))
{ {
$product = new Product($db); $product = new Product($db);
$result = $product->fetch($id, $ref); $result = $product->fetch($id, $ref);
$object = $product; $object = $product;
$parameters=array('id'=>$id); $parameters=array('id'=>$id);
$reshook=$hookmanager->executeHooks('doActions',$parameters,$product,$action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('doActions',$parameters,$product,$action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
@ -117,11 +117,14 @@ if ($id > 0 || ! empty($ref))
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
$linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>';
dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref'); $shownav = 1;
if ($user->societe_id && ! in_array('product', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref');
print '<div class="fichecenter">'; print '<div class="fichecenter">';
print '<div class="underbanner clearboth"></div>'; print '<div class="underbanner clearboth"></div>';
print '<table class="border tableforfield" width="100%">'; print '<table class="border tableforfield" width="100%">';
@ -131,14 +134,14 @@ if ($id > 0 || ! empty($ref))
print '</div>'; print '</div>';
print '<div style="clear:both"></div>'; print '<div style="clear:both"></div>';
dol_fiche_end(); dol_fiche_end();
if ($showmessage && $nboflines > 1) if ($showmessage && $nboflines > 1)
{ {
print $langs->trans("ClinkOnALinkOfColumn", $langs->transnoentitiesnoconv("Referers")); print $langs->trans("ClinkOnALinkOfColumn", $langs->transnoentitiesnoconv("Referers"));
} }
elseif ($user->rights->facture->lire) elseif ($user->rights->facture->lire)
{ {
$sql = "SELECT DISTINCT s.nom as name, s.rowid as socid, s.code_client,"; $sql = "SELECT DISTINCT s.nom as name, s.rowid as socid, s.code_client,";
$sql.= " f.facnumber, f.datef, f.paye, f.fk_statut as statut, f.rowid as facid,"; $sql.= " f.facnumber, f.datef, f.paye, f.fk_statut as statut, f.rowid as facid,";
@ -164,13 +167,13 @@ if ($id > 0 || ! empty($ref))
$total_ht=0; $total_ht=0;
$total_qty=0; $total_qty=0;
$totalrecords=0; $totalrecords=0;
if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
{ {
$result = $db->query($sql); $result = $db->query($sql);
if ($result) if ($result)
{ {
$totalrecords = $db->num_rows($result); $totalrecords = $db->num_rows($result);
while ($objp = $db->fetch_object($result)) while ($objp = $db->fetch_object($result))
{ {
$total_ht+=$objp->total_ht; $total_ht+=$objp->total_ht;
$total_qty+=$objp->qty; $total_qty+=$objp->qty;

View File

@ -84,7 +84,7 @@ if ($id > 0 || ! empty($ref))
$result = $product->fetch($id, $ref); $result = $product->fetch($id, $ref);
$object = $product; $object = $product;
$parameters = array('id' => $id); $parameters = array('id' => $id);
$reshook = $hookmanager->executeHooks('doActions', $parameters, $product, $action); // Note that $action and $object may have been modified by some hooks $reshook = $hookmanager->executeHooks('doActions', $parameters, $product, $action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
@ -102,11 +102,14 @@ if ($id > 0 || ! empty($ref))
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
$linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>';
dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref'); $shownav = 1;
if ($user->societe_id && ! in_array('product', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref');
print '<div class="fichecenter">'; print '<div class="fichecenter">';
print '<div class="underbanner clearboth"></div>'; print '<div class="underbanner clearboth"></div>';
print '<table class="border tableforfield" width="100%">'; print '<table class="border tableforfield" width="100%">';
@ -116,9 +119,9 @@ if ($id > 0 || ! empty($ref))
print '</div>'; print '</div>';
print '<div style="clear:both"></div>'; print '<div style="clear:both"></div>';
dol_fiche_end(); dol_fiche_end();
if ($user->rights->fournisseur->facture->lire) if ($user->rights->fournisseur->facture->lire)
{ {

View File

@ -82,7 +82,7 @@ if ($id > 0 || ! empty($ref))
$result = $product->fetch($id, $ref); $result = $product->fetch($id, $ref);
$object = $product; $object = $product;
$parameters = array ('id' => $id); $parameters = array ('id' => $id);
$reshook = $hookmanager->executeHooks('doActions', $parameters, $product, $action); // Note that $action and $object may have been modified by some hooks $reshook = $hookmanager->executeHooks('doActions', $parameters, $product, $action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
@ -100,11 +100,14 @@ if ($id > 0 || ! empty($ref))
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
$linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>';
dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref'); $shownav = 1;
if ($user->societe_id && ! in_array('product', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref');
print '<div class="fichecenter">'; print '<div class="fichecenter">';
print '<div class="underbanner clearboth"></div>'; print '<div class="underbanner clearboth"></div>';
print '<table class="border tableforfield" width="100%">'; print '<table class="border tableforfield" width="100%">';
@ -114,11 +117,11 @@ if ($id > 0 || ! empty($ref))
print '</div>'; print '</div>';
print '<div style="clear:both"></div>'; print '<div style="clear:both"></div>';
dol_fiche_end();
if ($user->rights->propale->lire) dol_fiche_end();
if ($user->rights->propale->lire)
{ {
$sql = "SELECT DISTINCT s.nom as name, s.rowid as socid, p.rowid as propalid, p.ref, d.total_ht as amount,"; $sql = "SELECT DISTINCT s.nom as name, s.rowid as socid, p.rowid as propalid, p.ref, d.total_ht as amount,";
$sql .= " p.ref_client,"; $sql .= " p.ref_client,";
@ -239,7 +242,7 @@ if ($id > 0 || ! empty($ref))
} }
} }
} }
print '<tr class="liste_total">'; print '<tr class="liste_total">';
print '<td>' . $langs->trans('Total') . '</td>'; print '<td>' . $langs->trans('Total') . '</td>';
print '<td colspan="2"></td>'; print '<td colspan="2"></td>';

View File

@ -100,7 +100,7 @@ if ($action == 'add' && $user->rights->stock->creer)
setEventMessages($object->error, $object->errors, 'errors'); setEventMessages($object->error, $object->errors, 'errors');
} }
} }
else else
{ {
setEventMessages($langs->trans("ErrorWarehouseRefRequired"), null, 'errors'); setEventMessages($langs->trans("ErrorWarehouseRefRequired"), null, 'errors');
$action="create"; // Force retour sur page creation $action="create"; // Force retour sur page creation
@ -194,7 +194,7 @@ if ($action == 'create')
print '<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans("Ref").'</td><td><input name="libelle" size="20" value=""></td></tr>'; print '<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans("Ref").'</td><td><input name="libelle" size="20" value=""></td></tr>';
print '<tr><td>'.$langs->trans("LocationSummary").'</td><td><input name="lieu" size="40" value="'.(!empty($object->lieu)?$object->lieu:'').'"></td></tr>'; print '<tr><td>'.$langs->trans("LocationSummary").'</td><td><input name="lieu" size="40" value="'.(!empty($object->lieu)?$object->lieu:'').'"></td></tr>';
// Parent entrepot // Parent entrepot
print '<tr><td>'.$langs->trans("AddIn").'</td><td>'; print '<tr><td>'.$langs->trans("AddIn").'</td><td>';
print $formproduct->selectWarehouses('', 'fk_parent', '', 1); print $formproduct->selectWarehouses('', 'fk_parent', '', 1);
@ -276,7 +276,7 @@ else
dol_fiche_head($head, 'card', $langs->trans("Warehouse"), 0, 'stock'); dol_fiche_head($head, 'card', $langs->trans("Warehouse"), 0, 'stock');
$formconfirm = ''; $formconfirm = '';
// Confirm delete third party // Confirm delete third party
if ($action == 'delete') if ($action == 'delete')
{ {
@ -300,7 +300,10 @@ else
$morehtmlref.=$langs->trans("LocationSummary").' : '.$object->lieu; $morehtmlref.=$langs->trans("LocationSummary").' : '.$object->lieu;
$morehtmlref.='</div>'; $morehtmlref.='</div>';
dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'libelle', $morehtmlref); $shownav = 1;
if ($user->societe_id && ! in_array('stock', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
dol_banner_tab($object, 'id', $linkback, $shownav, 'rowid', 'libelle', $morehtmlref);
print '<div class="fichecenter">'; print '<div class="fichecenter">';
print '<div class="fichehalfleft">'; print '<div class="fichehalfleft">';
@ -315,7 +318,7 @@ else
print '<tr><td>'.$langs->trans("ParentWarehouse").'</td><td>'; print '<tr><td>'.$langs->trans("ParentWarehouse").'</td><td>';
print $e->getNomUrl(3); print $e->getNomUrl(3);
print '</td></tr>'; print '</td></tr>';
} }
// Description // Description

View File

@ -54,9 +54,12 @@ $morehtmlref='<div class="refidno">';
$morehtmlref.=$langs->trans("LocationSummary").' : '.$object->lieu; $morehtmlref.=$langs->trans("LocationSummary").' : '.$object->lieu;
$morehtmlref.='</div>'; $morehtmlref.='</div>';
dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'libelle', $morehtmlref); $shownav = 1;
if ($user->societe_id && ! in_array('stock', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
dol_banner_tab($object, 'id', $linkback, $shownav, 'rowid', 'libelle', $morehtmlref);
print '<div class="fichecenter">'; print '<div class="fichecenter">';
print '<div class="underbanner clearboth"></div>'; print '<div class="underbanner clearboth"></div>';

View File

@ -99,7 +99,7 @@ $arrayfields=array(
//'m.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500) //'m.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500)
); );
$object = new MouvementStock($db); // To be passed as parameter of executeHooks that need $object = new MouvementStock($db); // To be passed as parameter of executeHooks that need
/* /*
@ -164,7 +164,7 @@ if ($action == "correct_stock")
//$sellby=GETPOST('sellby'); //$sellby=GETPOST('sellby');
$eatby=dol_mktime(0, 0, 0, GETPOST('eatbymonth'), GETPOST('eatbyday'), GETPOST('eatbyyear')); $eatby=dol_mktime(0, 0, 0, GETPOST('eatbymonth'), GETPOST('eatbyday'), GETPOST('eatbyyear'));
$sellby=dol_mktime(0, 0, 0, GETPOST('sellbymonth'), GETPOST('sellbyday'), GETPOST('sellbyyear')); $sellby=dol_mktime(0, 0, 0, GETPOST('sellbymonth'), GETPOST('sellbyday'), GETPOST('sellbyyear'));
$result=$product->correct_stock_batch( $result=$product->correct_stock_batch(
$user, $user,
$id, $id,
@ -210,7 +210,7 @@ if ($action == "transfert_stock" && ! $cancel)
{ {
$product = new Product($db); $product = new Product($db);
if (! empty($product_id)) $result=$product->fetch($product_id); if (! empty($product_id)) $result=$product->fetch($product_id);
if (! (GETPOST("id_entrepot_destination",'int') > 0)) if (! (GETPOST("id_entrepot_destination",'int') > 0))
{ {
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Warehouse")), null, 'errors'); setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Warehouse")), null, 'errors');
@ -264,7 +264,7 @@ if ($action == "transfert_stock" && ! $cancel)
$pricesrc=0; $pricesrc=0;
if (isset($product->pmp)) $pricesrc=$product->pmp; if (isset($product->pmp)) $pricesrc=$product->pmp;
$pricedest=$pricesrc; $pricedest=$pricesrc;
if ($product->hasbatch()) if ($product->hasbatch())
{ {
$pdluo = new Productbatch($db); $pdluo = new Productbatch($db);
@ -488,8 +488,8 @@ if ($resql)
$num = $db->num_rows($resql); $num = $db->num_rows($resql);
$arrayofselected=is_array($toselect)?$toselect:array(); $arrayofselected=is_array($toselect)?$toselect:array();
$i = 0; $i = 0;
$help_url='EN:Module_Stocks_En|FR:Module_Stock|ES:M&oacute;dulo_Stocks'; $help_url='EN:Module_Stocks_En|FR:Module_Stock|ES:M&oacute;dulo_Stocks';
$texte = $langs->trans("ListOfStockMovements"); $texte = $langs->trans("ListOfStockMovements");
@ -505,20 +505,23 @@ if ($resql)
dol_fiche_head($head, 'movements', $langs->trans("Warehouse"), 0, 'stock'); dol_fiche_head($head, 'movements', $langs->trans("Warehouse"), 0, 'stock');
$linkback = '<a href="'.DOL_URL_ROOT.'/product/stock/list.php">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/product/stock/list.php">'.$langs->trans("BackToList").'</a>';
$morehtmlref='<div class="refidno">'; $morehtmlref='<div class="refidno">';
$morehtmlref.=$langs->trans("LocationSummary").' : '.$object->lieu; $morehtmlref.=$langs->trans("LocationSummary").' : '.$object->lieu;
$morehtmlref.='</div>'; $morehtmlref.='</div>';
dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'libelle', $morehtmlref); $shownav = 1;
if ($user->societe_id && ! in_array('stock', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
dol_banner_tab($object, 'id', $linkback, $shownav, 'rowid', 'libelle', $morehtmlref);
print '<div class="fichecenter">'; print '<div class="fichecenter">';
print '<div class="fichehalfleft">'; print '<div class="fichehalfleft">';
print '<div class="underbanner clearboth"></div>'; print '<div class="underbanner clearboth"></div>';
print '<table class="border" width="100%">'; print '<table class="border" width="100%">';
// Description // Description
@ -539,14 +542,14 @@ if ($resql)
print "</td></tr>"; print "</td></tr>";
print '</table>'; print '</table>';
print '</div>'; print '</div>';
print '<div class="fichehalfright">'; print '<div class="fichehalfright">';
print '<div class="ficheaddleft">'; print '<div class="ficheaddleft">';
print '<div class="underbanner clearboth"></div>'; print '<div class="underbanner clearboth"></div>';
print '<table class="border centpercent">'; print '<table class="border centpercent">';
// Value // Value
print '<tr><td class="titlefield">'.$langs->trans("EstimatedStockValueShort").'</td><td>'; print '<tr><td class="titlefield">'.$langs->trans("EstimatedStockValueShort").'</td><td>';
print price((empty($calcproducts['qty'])?'0':price2num($calcproducts['qty'],'MT')), 0, $langs, 0, -1, -1, $conf->currency); print price((empty($calcproducts['qty'])?'0':price2num($calcproducts['qty'],'MT')), 0, $langs, 0, -1, -1, $conf->currency);
@ -583,9 +586,9 @@ if ($resql)
print '</div>'; print '</div>';
print '</div>'; print '</div>';
print '</div>'; print '</div>';
print '<div class="clearboth"></div>'; print '<div class="clearboth"></div>';
dol_fiche_end(); dol_fiche_end();
} }
@ -628,10 +631,10 @@ if ($resql)
{ {
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$id.'&action=transfert">'.$langs->trans("StockTransfer").'</a>'; print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$id.'&action=transfert">'.$langs->trans("StockTransfer").'</a>';
} }
print '</div><br>'; print '</div><br>';
} }
$param=''; $param='';
if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage; if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit; if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
@ -662,7 +665,7 @@ if ($resql)
//if ($user->rights->stock->supprimer) $arrayofmassactions['delete']=$langs->trans("Delete"); //if ($user->rights->stock->supprimer) $arrayofmassactions['delete']=$langs->trans("Delete");
if ($massaction == 'presend') $arrayofmassactions=array(); if ($massaction == 'presend') $arrayofmassactions=array();
$massactionbutton=$form->selectMassAction('', $arrayofmassactions); $massactionbutton=$form->selectMassAction('', $arrayofmassactions);
print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">'; print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">'; if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
@ -673,23 +676,23 @@ if ($resql)
print '<input type="hidden" name="type" value="'.$type.'">'; print '<input type="hidden" name="type" value="'.$type.'">';
print '<input type="hidden" name="contextpage" value="'.$contextpage.'">'; print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
if ($id > 0) print '<input type="hidden" name="id" value="'.$id.'">'; if ($id > 0) print '<input type="hidden" name="id" value="'.$id.'">';
if ($id > 0) print_barre_liste($texte, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder,$massactionbutton,$num, $nbtotalofrecords, '', 0, '', '', $limit); if ($id > 0) print_barre_liste($texte, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder,$massactionbutton,$num, $nbtotalofrecords, '', 0, '', '', $limit);
else print_barre_liste($texte, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder,$massactionbutton,$num, $nbtotalofrecords, 'title_generic', 0, '', '', $limit); else print_barre_liste($texte, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder,$massactionbutton,$num, $nbtotalofrecords, 'title_generic', 0, '', '', $limit);
if ($sall) if ($sall)
{ {
foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val); foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
print $langs->trans("FilterOnInto", $sall) . join(', ',$fieldstosearchall); print $langs->trans("FilterOnInto", $sall) . join(', ',$fieldstosearchall);
} }
$moreforfilter=''; $moreforfilter='';
$parameters=array(); $parameters=array();
$reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook
if (empty($reshook)) $moreforfilter .= $hookmanager->resPrint; if (empty($reshook)) $moreforfilter .= $hookmanager->resPrint;
else $moreforfilter = $hookmanager->resPrint; else $moreforfilter = $hookmanager->resPrint;
if (! empty($moreforfilter)) if (! empty($moreforfilter))
{ {
print '<div class="liste_titre liste_titre_bydiv centpercent">'; print '<div class="liste_titre liste_titre_bydiv centpercent">';
@ -699,10 +702,10 @@ if ($resql)
$varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage; $varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage;
$selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields $selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields
print '<div class="div-table-responsive">'; print '<div class="div-table-responsive">';
print '<table class="tagtable liste'.($moreforfilter?" listwithfilterbefore":"").'">'."\n"; print '<table class="tagtable liste'.($moreforfilter?" listwithfilterbefore":"").'">'."\n";
print "<tr class=\"liste_titre\">"; print "<tr class=\"liste_titre\">";
if (! empty($arrayfields['m.rowid']['checked'])) print_liste_field_titre($arrayfields['m.rowid']['label'],$_SERVER["PHP_SELF"],'m.rowid','',$param,'',$sortfield,$sortorder); if (! empty($arrayfields['m.rowid']['checked'])) print_liste_field_titre($arrayfields['m.rowid']['label'],$_SERVER["PHP_SELF"],'m.rowid','',$param,'',$sortfield,$sortorder);
if (! empty($arrayfields['m.datem']['checked'])) print_liste_field_titre($arrayfields['m.datem']['label'],$_SERVER["PHP_SELF"],'m.datem','',$param,'',$sortfield,$sortorder); if (! empty($arrayfields['m.datem']['checked'])) print_liste_field_titre($arrayfields['m.datem']['label'],$_SERVER["PHP_SELF"],'m.datem','',$param,'',$sortfield,$sortorder);
@ -720,9 +723,9 @@ if ($resql)
// Extra fields // Extra fields
if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
{ {
foreach($extrafields->attribute_label as $key => $val) foreach($extrafields->attribute_label as $key => $val)
{ {
if (! empty($arrayfields["ef.".$key]['checked'])) if (! empty($arrayfields["ef.".$key]['checked']))
{ {
$align=$extrafields->getAlignFlag($key); $align=$extrafields->getAlignFlag($key);
print_liste_field_titre($extralabels[$key],$_SERVER["PHP_SELF"],"ef.".$key,"",$param,($align?'align="'.$align.'"':''),$sortfield,$sortorder); print_liste_field_titre($extralabels[$key],$_SERVER["PHP_SELF"],"ef.".$key,"",$param,($align?'align="'.$align.'"':''),$sortfield,$sortorder);
@ -740,14 +743,14 @@ if ($resql)
// Lignes des champs de filtre // Lignes des champs de filtre
print '<tr class="liste_titre">'; print '<tr class="liste_titre">';
if (! empty($arrayfields['m.rowid']['checked'])) if (! empty($arrayfields['m.rowid']['checked']))
{ {
// Ref // Ref
print '<td class="liste_titre" align="left">'; print '<td class="liste_titre" align="left">';
print '<input class="flat maxwidth25" type="text" name="search_ref" value="'.dol_escape_htmltag($search_ref).'">'; print '<input class="flat maxwidth25" type="text" name="search_ref" value="'.dol_escape_htmltag($search_ref).'">';
print '</td>'; print '</td>';
} }
if (! empty($arrayfields['m.datem']['checked'])) if (! empty($arrayfields['m.datem']['checked']))
{ {
print '<td class="liste_titre" valign="right">'; print '<td class="liste_titre" valign="right">';
print '<input class="flat" type="text" size="2" maxlength="2" placeholder="'.dol_escape_htmltag($langs->trans("Month")).'" name="month" value="'.$month.'">'; print '<input class="flat" type="text" size="2" maxlength="2" placeholder="'.dol_escape_htmltag($langs->trans("Month")).'" name="month" value="'.$month.'">';
@ -758,14 +761,14 @@ if ($resql)
//print $formother->selectyear($syear,'year',1, 20, 5); //print $formother->selectyear($syear,'year',1, 20, 5);
print '</td>'; print '</td>';
} }
if (! empty($arrayfields['p.ref']['checked'])) if (! empty($arrayfields['p.ref']['checked']))
{ {
// Product Ref // Product Ref
print '<td class="liste_titre" align="left">'; print '<td class="liste_titre" align="left">';
print '<input class="flat" type="text" size="6" name="search_product_ref" value="'.dol_escape_htmltag($idproduct?$product->ref:$search_product_ref).'">'; print '<input class="flat" type="text" size="6" name="search_product_ref" value="'.dol_escape_htmltag($idproduct?$product->ref:$search_product_ref).'">';
print '</td>'; print '</td>';
} }
if (! empty($arrayfields['p.label']['checked'])) if (! empty($arrayfields['p.label']['checked']))
{ {
// Product label // Product label
print '<td class="liste_titre" align="left">'; print '<td class="liste_titre" align="left">';
@ -773,14 +776,14 @@ if ($resql)
print '</td>'; print '</td>';
} }
// Batch // Batch
if (! empty($arrayfields['m.batch']['checked'])) if (! empty($arrayfields['m.batch']['checked']))
{ {
print '<td class="liste_titre" align="center"><input class="flat" type="text" size="5" name="search_batch" value="'.dol_escape_htmltag($search_batch).'"></td>'; print '<td class="liste_titre" align="center"><input class="flat" type="text" size="5" name="search_batch" value="'.dol_escape_htmltag($search_batch).'"></td>';
} }
if (! empty($arrayfields['pl.eatby']['checked'])) if (! empty($arrayfields['pl.eatby']['checked']))
{ {
print '<td class="liste_titre" align="left">'; print '<td class="liste_titre" align="left">';
print '</td>'; print '</td>';
} }
if (! empty($arrayfields['pl.sellby']['checked'])) if (! empty($arrayfields['pl.sellby']['checked']))
{ {
@ -788,42 +791,42 @@ if ($resql)
print '</td>'; print '</td>';
} }
// Warehouse // Warehouse
if (! empty($arrayfields['e.label']['checked'])) if (! empty($arrayfields['e.label']['checked']))
{ {
print '<td class="liste_titre maxwidthonsmartphone" align="left">'; print '<td class="liste_titre maxwidthonsmartphone" align="left">';
//print '<input class="flat" type="text" size="8" name="search_warehouse" value="'.($search_warehouse).'">'; //print '<input class="flat" type="text" size="8" name="search_warehouse" value="'.($search_warehouse).'">';
print $formproduct->selectWarehouses($search_warehouse, 'search_warehouse', 'warehouseopen,warehouseinternal', 1, 0, 0, '', 0, 0, null, 'maxwidth200'); print $formproduct->selectWarehouses($search_warehouse, 'search_warehouse', 'warehouseopen,warehouseinternal', 1, 0, 0, '', 0, 0, null, 'maxwidth200');
print '</td>'; print '</td>';
} }
if (! empty($arrayfields['m.fk_user_author']['checked'])) if (! empty($arrayfields['m.fk_user_author']['checked']))
{ {
// Author // Author
print '<td class="liste_titre" align="left">'; print '<td class="liste_titre" align="left">';
print '<input class="flat" type="text" size="6" name="search_user" value="'.dol_escape_htmltag($search_user).'">'; print '<input class="flat" type="text" size="6" name="search_user" value="'.dol_escape_htmltag($search_user).'">';
print '</td>'; print '</td>';
} }
if (! empty($arrayfields['m.inventorycode']['checked'])) if (! empty($arrayfields['m.inventorycode']['checked']))
{ {
// Inventory code // Inventory code
print '<td class="liste_titre" align="left">'; print '<td class="liste_titre" align="left">';
print '<input class="flat" type="text" size="4" name="search_inventorycode" value="'.dol_escape_htmltag($search_inventorycode).'">'; print '<input class="flat" type="text" size="4" name="search_inventorycode" value="'.dol_escape_htmltag($search_inventorycode).'">';
print '</td>'; print '</td>';
} }
if (! empty($arrayfields['m.label']['checked'])) if (! empty($arrayfields['m.label']['checked']))
{ {
// Label of movement // Label of movement
print '<td class="liste_titre" align="left">'; print '<td class="liste_titre" align="left">';
print '<input class="flat" type="text" size="8" name="search_movement" value="'.dol_escape_htmltag($search_movement).'">'; print '<input class="flat" type="text" size="8" name="search_movement" value="'.dol_escape_htmltag($search_movement).'">';
print '</td>'; print '</td>';
} }
if (! empty($arrayfields['origin']['checked'])) if (! empty($arrayfields['origin']['checked']))
{ {
// Origin of movement // Origin of movement
print '<td class="liste_titre" align="left">'; print '<td class="liste_titre" align="left">';
print '&nbsp; '; print '&nbsp; ';
print '</td>'; print '</td>';
} }
if (! empty($arrayfields['m.value']['checked'])) if (! empty($arrayfields['m.value']['checked']))
{ {
// Qty // Qty
print '<td class="liste_titre" align="right">'; print '<td class="liste_titre" align="right">';
@ -869,7 +872,7 @@ if ($resql)
print '<td class="liste_titre">'; print '<td class="liste_titre">';
print '</td>'; print '</td>';
} }
// Actions // Actions
print '<td class="liste_titre" align="right">'; print '<td class="liste_titre" align="right">';
$searchpitco=$form->showFilterAndCheckAddButtons(0); $searchpitco=$form->showFilterAndCheckAddButtons(0);
print $searchpitco; print $searchpitco;
@ -892,11 +895,11 @@ if ($resql)
$productlot->batch= $objp->batch; $productlot->batch= $objp->batch;
$productlot->eatby= $objp->eatby; $productlot->eatby= $objp->eatby;
$productlot->sellby= $objp->sellby; $productlot->sellby= $objp->sellby;
$warehousestatic->id=$objp->entrepot_id; $warehousestatic->id=$objp->entrepot_id;
$warehousestatic->libelle=$objp->stock; $warehousestatic->libelle=$objp->stock;
$warehousestatic->lieu=$objp->lieu; $warehousestatic->lieu=$objp->lieu;
$arrayofuniqueproduct[$objp->rowid]=$objp->produit; $arrayofuniqueproduct[$objp->rowid]=$objp->produit;
if(!empty($objp->fk_origin)) { if(!empty($objp->fk_origin)) {
$origin = $movement->get_origin($objp->fk_origin, $objp->origintype); $origin = $movement->get_origin($objp->fk_origin, $objp->origintype);
@ -998,7 +1001,7 @@ if ($resql)
} }
print '</td>'; print '</td>';
if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['nbfield']++;
print "</tr>\n"; print "</tr>\n";
$i++; $i++;
} }
@ -1012,7 +1015,7 @@ if ($resql)
if (count($arrayofuniqueproduct) == 1 && is_numeric($year)) if (count($arrayofuniqueproduct) == 1 && is_numeric($year))
{ {
print "<br>"; print "<br>";
$productidselected=0; $productidselected=0;
foreach ($arrayofuniqueproduct as $key => $val) foreach ($arrayofuniqueproduct as $key => $val)
{ {

View File

@ -106,10 +106,10 @@ $reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action);
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
if($action == 'addlimitstockwarehouse') { if($action == 'addlimitstockwarehouse') {
$seuil_stock_alerte = GETPOST('seuil_stock_alerte'); $seuil_stock_alerte = GETPOST('seuil_stock_alerte');
$desiredstock = GETPOST('desiredstock'); $desiredstock = GETPOST('desiredstock');
$maj_ok = true; $maj_ok = true;
if($seuil_stock_alerte == '') { if($seuil_stock_alerte == '') {
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("StockLimit")), null, 'errors'); setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("StockLimit")), null, 'errors');
@ -119,44 +119,44 @@ if($action == 'addlimitstockwarehouse') {
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("DesiredStock")), null, 'errors'); setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("DesiredStock")), null, 'errors');
$maj_ok = false; $maj_ok = false;
} }
if($maj_ok) { if($maj_ok) {
$pse = new ProductStockEntrepot($db); $pse = new ProductStockEntrepot($db);
if($pse->fetch('', GETPOST('id'), GETPOST('fk_entrepot')) > 0) { if($pse->fetch('', GETPOST('id'), GETPOST('fk_entrepot')) > 0) {
// Update // Update
$pse->seuil_stock_alerte = $seuil_stock_alerte; $pse->seuil_stock_alerte = $seuil_stock_alerte;
$pse->desiredstock = $desiredstock; $pse->desiredstock = $desiredstock;
if($pse->update($user) > 0) setEventMessage($langs->trans('ProductStockWarehouseUpdated')); if($pse->update($user) > 0) setEventMessage($langs->trans('ProductStockWarehouseUpdated'));
} else { } else {
// Create // Create
$pse->fk_entrepot = GETPOST('fk_entrepot'); $pse->fk_entrepot = GETPOST('fk_entrepot');
$pse->fk_product = GETPOST('id'); $pse->fk_product = GETPOST('id');
$pse->seuil_stock_alerte = GETPOST('seuil_stock_alerte'); $pse->seuil_stock_alerte = GETPOST('seuil_stock_alerte');
$pse->desiredstock = GETPOST('desiredstock'); $pse->desiredstock = GETPOST('desiredstock');
if($pse->create($user) > 0) setEventMessage($langs->trans('ProductStockWarehouseCreated')); if($pse->create($user) > 0) setEventMessage($langs->trans('ProductStockWarehouseCreated'));
} }
} }
header("Location: ".$_SERVER["PHP_SELF"]."?id=".GETPOST('id')); header("Location: ".$_SERVER["PHP_SELF"]."?id=".GETPOST('id'));
exit; exit;
} }
if($action == 'delete_productstockwarehouse') if($action == 'delete_productstockwarehouse')
{ {
$pse = new ProductStockEntrepot($db); $pse = new ProductStockEntrepot($db);
$pse->fetch(GETPOST('fk_productstockwarehouse')); $pse->fetch(GETPOST('fk_productstockwarehouse'));
if($pse->delete($user) > 0) setEventMessage($langs->trans('ProductStockWarehouseDeleted')); if($pse->delete($user) > 0) setEventMessage($langs->trans('ProductStockWarehouseDeleted'));
$action = ''; $action = '';
} }
// Set stock limit // Set stock limit
@ -299,7 +299,7 @@ if ($action == "transfert_stock" && ! $cancel)
{ {
$object = new Product($db); $object = new Product($db);
$result=$object->fetch($id); $result=$object->fetch($id);
if ($object->hasbatch() && ! $batchnumber) if ($object->hasbatch() && ! $batchnumber)
{ {
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("batch_number")), null, 'errors'); setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("batch_number")), null, 'errors');
@ -307,7 +307,7 @@ if ($action == "transfert_stock" && ! $cancel)
$action='transfert'; $action='transfert';
} }
} }
if (! $error) if (! $error)
{ {
if ($id) if ($id)
@ -323,7 +323,7 @@ if ($action == "transfert_stock" && ! $cancel)
$pricesrc=0; $pricesrc=0;
if (isset($object->pmp)) $pricesrc=$object->pmp; if (isset($object->pmp)) $pricesrc=$object->pmp;
$pricedest=$pricesrc; $pricedest=$pricesrc;
if ($object->hasbatch()) if ($object->hasbatch())
{ {
$pdluo = new Productbatch($db); $pdluo = new Productbatch($db);
@ -496,7 +496,7 @@ if ($id > 0 || $ref)
{ {
$object = new Product($db); $object = new Product($db);
$result = $object->fetch($id,$ref); $result = $object->fetch($id,$ref);
$object->load_stock(); $object->load_stock();
$title = $langs->trans('ProductServiceCard'); $title = $langs->trans('ProductServiceCard');
@ -525,15 +525,18 @@ if ($id > 0 || $ref)
dol_htmloutput_events(); dol_htmloutput_events();
$linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>';
dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref'); $shownav = 1;
if ($user->societe_id && ! in_array('stock', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref');
print '<div class="fichecenter">'; print '<div class="fichecenter">';
print '<div class="underbanner clearboth"></div>'; print '<div class="underbanner clearboth"></div>';
print '<table class="border tableforfield" width="100%">'; print '<table class="border tableforfield" width="100%">';
if ($conf->productbatch->enabled) if ($conf->productbatch->enabled)
{ {
print '<tr><td class="titlefield">'.$langs->trans("ManageLotSerial").'</td><td>'; print '<tr><td class="titlefield">'.$langs->trans("ManageLotSerial").'</td><td>';
print $object->getLibStatut(0,2); print $object->getLibStatut(0,2);
@ -595,11 +598,11 @@ if ($id > 0 || $ref)
print '<tr><td>'.$form->editfieldkey("StockLimit",'seuil_stock_alerte',$object->seuil_stock_alerte,$object,$user->rights->produit->creer).'</td><td colspan="2">'; print '<tr><td>'.$form->editfieldkey("StockLimit",'seuil_stock_alerte',$object->seuil_stock_alerte,$object,$user->rights->produit->creer).'</td><td colspan="2">';
print $form->editfieldval("StockLimit",'seuil_stock_alerte',$object->seuil_stock_alerte,$object,$user->rights->produit->creer,'string'); print $form->editfieldval("StockLimit",'seuil_stock_alerte',$object->seuil_stock_alerte,$object,$user->rights->produit->creer,'string');
print '</td></tr>'; print '</td></tr>';
// Hook formObject // Hook formObject
$parameters=array('colspan' => 3); $parameters=array('colspan' => 3);
$reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook $reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook
// Desired stock // Desired stock
print '<tr><td>'.$form->editfieldkey($form->textwithpicto($langs->trans("DesiredStock"), $langs->trans("DesiredStockDesc"), 1),'desiredstock',$object->desiredstock,$object,$user->rights->produit->creer); print '<tr><td>'.$form->editfieldkey($form->textwithpicto($langs->trans("DesiredStock"), $langs->trans("DesiredStockDesc"), 1),'desiredstock',$object->desiredstock,$object,$user->rights->produit->creer);
print '</td><td colspan="2">'; print '</td><td colspan="2">';
@ -623,7 +626,7 @@ if ($id > 0 || $ref)
print '</tr>'; print '</tr>';
$stocktheo = price2num($object->stock_theorique, 'MS'); $stocktheo = price2num($object->stock_theorique, 'MS');
// Calculating a theorical value // Calculating a theorical value
print '<tr><td>'.$langs->trans("VirtualStock").'</td>'; print '<tr><td>'.$langs->trans("VirtualStock").'</td>';
print "<td>".(empty($stocktheo)?0:$stocktheo); print "<td>".(empty($stocktheo)?0:$stocktheo);
@ -705,7 +708,7 @@ if ($id > 0 || $ref)
print '</div>'; print '</div>';
print '<div style="clear:both"></div>'; print '<div style="clear:both"></div>';
dol_fiche_end(); dol_fiche_end();
} }
@ -744,18 +747,18 @@ if (empty($reshook))
if (empty($action) && $object->id) if (empty($action) && $object->id)
{ {
print "<div class=\"tabsAction\">\n"; print "<div class=\"tabsAction\">\n";
if ($user->rights->stock->mouvement->creer) if ($user->rights->stock->mouvement->creer)
{ {
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=correction">'.$langs->trans("StockCorrection").'</a>'; print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=correction">'.$langs->trans("StockCorrection").'</a>';
} }
//if (($user->rights->stock->mouvement->creer) && ! $object->hasbatch()) //if (($user->rights->stock->mouvement->creer) && ! $object->hasbatch())
if ($user->rights->stock->mouvement->creer) if ($user->rights->stock->mouvement->creer)
{ {
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=transfert">'.$langs->trans("StockTransfer").'</a>'; print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=transfert">'.$langs->trans("StockTransfer").'</a>';
} }
print '</div>'; print '</div>';
} }
@ -907,30 +910,30 @@ print "</table>";
print '</div>'; print '</div>';
if(!empty($conf->global->STOCK_ALLOW_ADD_LIMIT_STOCK_BY_WAREHOUSE)) { if(!empty($conf->global->STOCK_ALLOW_ADD_LIMIT_STOCK_BY_WAREHOUSE)) {
print '<br><br>'; print '<br><br>';
print_titre($langs->trans('AddNewProductStockWarehouse')); print_titre($langs->trans('AddNewProductStockWarehouse'));
//print '<br />'; //print '<br />';
print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">'; print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
print '<input type="hidden" name="action" value="addlimitstockwarehouse">'; print '<input type="hidden" name="action" value="addlimitstockwarehouse">';
print '<input type="hidden" name="id" value="'.GETPOST('id').'">'; print '<input type="hidden" name="id" value="'.GETPOST('id').'">';
print '<table class="noborder" width="100%">'; print '<table class="noborder" width="100%">';
print '<tr class="liste_titre"><td width="40%" colspan="4">'.$formproduct->selectWarehouses('', 'fk_entrepot').'</td>'; print '<tr class="liste_titre"><td width="40%" colspan="4">'.$formproduct->selectWarehouses('', 'fk_entrepot').'</td>';
print '<td align="right"><input name="seuil_stock_alerte" type="text" placeholder="'.$langs->trans("StockLimit").'" /></td>'; print '<td align="right"><input name="seuil_stock_alerte" type="text" placeholder="'.$langs->trans("StockLimit").'" /></td>';
print '<td align="right"><input name="desiredstock" type="text" placeholder="'.$langs->trans("DesiredStock").'" /></td>'; print '<td align="right"><input name="desiredstock" type="text" placeholder="'.$langs->trans("DesiredStock").'" /></td>';
print '<td align="right"><input type="submit" value="'.$langs->trans('Save').'" class="button" /></td>'; print '<td align="right"><input type="submit" value="'.$langs->trans('Save').'" class="button" /></td>';
print '</tr>'; print '</tr>';
$pse = new ProductStockEntrepot($db); $pse = new ProductStockEntrepot($db);
$lines = $pse->fetchAll(GETPOST('id')); $lines = $pse->fetchAll(GETPOST('id'));
if(!empty($lines)) { if(!empty($lines)) {
$var=false; $var=false;
foreach($lines as $line) { foreach($lines as $line) {
$ent = new Entrepot($db); $ent = new Entrepot($db);
$ent->fetch($line['fk_entrepot']); $ent->fetch($line['fk_entrepot']);
print '<tr '.$bc[$var].'><td width="40%" colspan="4">'.$ent->getNomUrl(3).'</td>'; print '<tr '.$bc[$var].'><td width="40%" colspan="4">'.$ent->getNomUrl(3).'</td>';
@ -939,15 +942,15 @@ if(!empty($conf->global->STOCK_ALLOW_ADD_LIMIT_STOCK_BY_WAREHOUSE)) {
print '<td align="right"><a href="?id='.GETPOST('id').'&fk_productstockwarehouse='.$line['id'].'&action=delete_productstockwarehouse">'.img_delete().'</a></td>'; print '<td align="right"><a href="?id='.GETPOST('id').'&fk_productstockwarehouse='.$line['id'].'&action=delete_productstockwarehouse">'.img_delete().'</a></td>';
print '</tr>'; print '</tr>';
$var=!$var; $var=!$var;
} }
} }
print "</table>"; print "</table>";
print '</form>'; print '</form>';
} }
llxFooter(); llxFooter();

View File

@ -112,21 +112,21 @@ if (empty($reshook))
$result = $object->setValueFrom('eatby', $newvalue, '', null, 'date', '', $user, 'PRODUCTLOT_MODIFY'); $result = $object->setValueFrom('eatby', $newvalue, '', null, 'date', '', $user, 'PRODUCTLOT_MODIFY');
if ($result < 0) dol_print_error($db, $object->error); if ($result < 0) dol_print_error($db, $object->error);
} }
if ($action == 'setsellby' && $user->rights->stock->creer) if ($action == 'setsellby' && $user->rights->stock->creer)
{ {
$newvalue=dol_mktime(12, 0, 0, $_POST['sellbymonth'], $_POST['sellbyday'], $_POST['sellbyyear']); $newvalue=dol_mktime(12, 0, 0, $_POST['sellbymonth'], $_POST['sellbyday'], $_POST['sellbyyear']);
$result = $object->setValueFrom('sellby', $newvalue, '', null, 'date', '', $user, 'PRODUCTLOT_MODIFY'); $result = $object->setValueFrom('sellby', $newvalue, '', null, 'date', '', $user, 'PRODUCTLOT_MODIFY');
if ($result < 0) dol_print_error($db, $object->error); if ($result < 0) dol_print_error($db, $object->error);
} }
if ($action == 'update_extras') if ($action == 'update_extras')
{ {
// Fill array 'array_options' with data from update form // Fill array 'array_options' with data from update form
$extralabels = $extrafields->fetch_name_optionals_label($object->table_element); $extralabels = $extrafields->fetch_name_optionals_label($object->table_element);
$ret = $extrafields->setOptionalsFromPost($extralabels, $object, GETPOST('attribute')); $ret = $extrafields->setOptionalsFromPost($extralabels, $object, GETPOST('attribute'));
if ($ret < 0) $error++; if ($ret < 0) $error++;
if (! $error) if (! $error)
{ {
// Actions on extra fields (by external module or standard code) // Actions on extra fields (by external module or standard code)
@ -142,11 +142,11 @@ if (empty($reshook))
} else if ($reshook < 0) } else if ($reshook < 0)
$error++; $error++;
} }
if ($error) if ($error)
$action = 'edit_extras'; $action = 'edit_extras';
} }
// Action to add record // Action to add record
if ($action == 'add') if ($action == 'add')
{ {
@ -160,7 +160,7 @@ if (empty($reshook))
$error=0; $error=0;
/* object_prop_getpost_prop */ /* object_prop_getpost_prop */
$object->entity=GETPOST('entity','int'); $object->entity=GETPOST('entity','int');
$object->fk_product=GETPOST('fk_product','int'); $object->fk_product=GETPOST('fk_product','int');
$object->batch=GETPOST('batch','alpha'); $object->batch=GETPOST('batch','alpha');
@ -204,7 +204,7 @@ if (empty($reshook))
if ($action == 'update' && ! GETPOST('cancel')) if ($action == 'update' && ! GETPOST('cancel'))
{ {
$error=0; $error=0;
$object->entity=GETPOST('entity','int'); $object->entity=GETPOST('entity','int');
$object->fk_product=GETPOST('fk_product','int'); $object->fk_product=GETPOST('fk_product','int');
$object->batch=GETPOST('batch','alpha'); $object->batch=GETPOST('batch','alpha');
@ -283,7 +283,7 @@ if ($action == 'create')
print '<table class="border centpercent">'."\n"; print '<table class="border centpercent">'."\n";
// print '<tr><td class="fieldrequired">'.$langs->trans("Label").'</td><td><input class="flat" type="text" size="36" name="label" value="'.$label.'"></td></tr>'; // print '<tr><td class="fieldrequired">'.$langs->trans("Label").'</td><td><input class="flat" type="text" size="36" name="label" value="'.$label.'"></td></tr>';
// //
print '<tr><td class="fieldrequired">'.$langs->trans("Fieldentity").'</td><td><input class="flat" type="text" name="entity" value="'.GETPOST('entity').'"></td></tr>'; print '<tr><td class="fieldrequired">'.$langs->trans("Fieldentity").'</td><td><input class="flat" type="text" name="entity" value="'.GETPOST('entity').'"></td></tr>';
print '<tr><td class="fieldrequired">'.$langs->trans("Fieldfk_product").'</td><td><input class="flat" type="text" name="fk_product" value="'.GETPOST('fk_product').'"></td></tr>'; print '<tr><td class="fieldrequired">'.$langs->trans("Fieldfk_product").'</td><td><input class="flat" type="text" name="fk_product" value="'.GETPOST('fk_product').'"></td></tr>';
print '<tr><td class="fieldrequired">'.$langs->trans("Fieldbatch").'</td><td><input class="flat" type="text" name="batch" value="'.GETPOST('batch').'"></td></tr>'; print '<tr><td class="fieldrequired">'.$langs->trans("Fieldbatch").'</td><td><input class="flat" type="text" name="batch" value="'.GETPOST('batch').'"></td></tr>';
@ -305,28 +305,31 @@ if ($action == 'create')
if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'create'))) if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'create')))
{ {
$res = $object->fetch_optionals($object->id, $extralabels); $res = $object->fetch_optionals($object->id, $extralabels);
//print load_fiche_titre($langs->trans("Batch")); //print load_fiche_titre($langs->trans("Batch"));
$head = productlot_prepare_head($object); $head = productlot_prepare_head($object);
dol_fiche_head($head, 'card', $langs->trans("Batch"), 0, 'barcode'); dol_fiche_head($head, 'card', $langs->trans("Batch"), 0, 'barcode');
if ($action == 'delete') { if ($action == 'delete') {
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('DeleteBatch'), $langs->trans('ConfirmDeleteBatch'), 'confirm_delete', '', 0, 1); $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('DeleteBatch'), $langs->trans('ConfirmDeleteBatch'), 'confirm_delete', '', 0, 1);
print $formconfirm; print $formconfirm;
} }
$linkback = '<a href="' . DOL_URL_ROOT . '/product/stock/productlot_list.php' . '">' . $langs->trans("BackToList") . '</a>'; $linkback = '<a href="' . DOL_URL_ROOT . '/product/stock/productlot_list.php' . '">' . $langs->trans("BackToList") . '</a>';
dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'batch'); $shownav = 1;
if ($user->societe_id && ! in_array('batch', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
dol_banner_tab($object, 'id', $linkback, $shownav, 'rowid', 'batch');
print '<div class="fichecenter">'; print '<div class="fichecenter">';
print '<div class="underbanner clearboth"></div>'; print '<div class="underbanner clearboth"></div>';
print '<table class="border centpercent">'."\n"; print '<table class="border centpercent">'."\n";
// Product // Product
print '<tr><td class="titlefield">'.$langs->trans("Product").'</td><td>'; print '<tr><td class="titlefield">'.$langs->trans("Product").'</td><td>';
$producttmp = new Product($db); $producttmp = new Product($db);
@ -341,7 +344,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
print $form->editfieldval($langs->trans('Eatby'), 'eatby', $object->eatby, $object, $user->rights->stock->creer, 'datepicker'); print $form->editfieldval($langs->trans('Eatby'), 'eatby', $object->eatby, $object, $user->rights->stock->creer, 'datepicker');
print '</td>'; print '</td>';
print '</tr>'; print '</tr>';
// Sell by // Sell by
print '<tr><td>'; print '<tr><td>';
print $form->editfieldkey($langs->trans('Sellby'), 'sellby', $object->sellby, $object, $user->rights->stock->creer, 'datepicker'); print $form->editfieldkey($langs->trans('Sellby'), 'sellby', $object->sellby, $object, $user->rights->stock->creer, 'datepicker');
@ -349,15 +352,15 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
print $form->editfieldval($langs->trans('Sellby'), 'sellby', $object->sellby, $object, $user->rights->stock->creer, 'datepicker'); print $form->editfieldval($langs->trans('Sellby'), 'sellby', $object->sellby, $object, $user->rights->stock->creer, 'datepicker');
print '</td>'; print '</td>';
print '</tr>'; print '</tr>';
// Other attributes // Other attributes
$cols = 2; $cols = 2;
include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php';
print '</table>'; print '</table>';
print '</div>'; print '</div>';
dol_fiche_end(); dol_fiche_end();
@ -381,8 +384,8 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
*/ */
} }
print '</div>'."\n"; print '</div>'."\n";
print '<a href="'.DOL_URL_ROOT.'/product/reassortlot.php?sref='.urlencode($producttmp->ref).'&search_batch='.urlencode($object->batch).'">'.$langs->trans("ShowCurrentStockOfLot").'</a><br>'; print '<a href="'.DOL_URL_ROOT.'/product/reassortlot.php?sref='.urlencode($producttmp->ref).'&search_batch='.urlencode($object->batch).'">'.$langs->trans("ShowCurrentStockOfLot").'</a><br>';
print '<br>'; print '<br>';
print '<a href="'.DOL_URL_ROOT.'/product/stock/mouvement.php?search_product_ref='.urlencode($producttmp->ref).'&search_batch='.urlencode($object->batch).'">'.$langs->trans("ShowLogOfMovementIfLot").'</a><br>'; print '<a href="'.DOL_URL_ROOT.'/product/stock/mouvement.php?search_product_ref='.urlencode($producttmp->ref).'&search_batch='.urlencode($object->batch).'">'.$langs->trans("ShowLogOfMovementIfLot").'</a><br>';

View File

@ -202,7 +202,10 @@ dol_fiche_head($head, 'translation', $titre, 0, $picto);
$linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php">'.$langs->trans("BackToList").'</a>';
dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref', 'ref', '', '', 0, '', '', 1); $shownav = 1;
if ($user->societe_id && ! in_array('product', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
dol_banner_tab($object, 'ref', $linkback, shownav, 'ref');
dol_fiche_end(); dol_fiche_end();
@ -245,7 +248,7 @@ if ($action == 'edit')
{ {
$s=picto_from_langcode($key); $s=picto_from_langcode($key);
print "<br>".($s?$s.' ':'')." <b>".$langs->trans('Language_'.$key).":</b> ".'<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&langtodelete='.$key.'">'.img_delete('', '')."</a><br>"; print "<br>".($s?$s.' ':'')." <b>".$langs->trans('Language_'.$key).":</b> ".'<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&langtodelete='.$key.'">'.img_delete('', '')."</a><br>";
print '<table class="border" width="100%">'; print '<table class="border" width="100%">';
print '<tr><td class="tdtop titlefieldcreate fieldrequired">'.$langs->trans('Label').'</td><td><input name="libelle-'.$key.'" size="40" value="'.$object->multilangs[$key]["label"].'"></td></tr>'; print '<tr><td class="tdtop titlefieldcreate fieldrequired">'.$langs->trans('Label').'</td><td><input name="libelle-'.$key.'" size="40" value="'.$object->multilangs[$key]["label"].'"></td></tr>';
print '<tr><td class="tdtop">'.$langs->trans('Description').'</td><td>'; print '<tr><td class="tdtop">'.$langs->trans('Description').'</td><td>';
@ -275,7 +278,7 @@ if ($action == 'edit')
else if ($action != 'add') else if ($action != 'add')
{ {
if ($cnt_trans) print '<div class="underbanner clearboth"></div>'; if ($cnt_trans) print '<div class="underbanner clearboth"></div>';
if (! empty($object->multilangs)) if (! empty($object->multilangs))
{ {
foreach ($object->multilangs as $key => $value) foreach ($object->multilangs as $key => $value)

View File

@ -300,20 +300,27 @@ if ($action == 'add')
{ {
if ($conf->global->MEMBER_NEWFORM_PAYONLINE == 'paybox') if ($conf->global->MEMBER_NEWFORM_PAYONLINE == 'paybox')
{ {
$urlback=DOL_MAIN_URL_ROOT.'/public/paybox/newpayment.php?from=membernewform&source=membersubscription&ref='.$adh->ref; $urlback=DOL_MAIN_URL_ROOT.'/public/paybox/newpayment.php?from=membernewform&source=membersubscription&ref='.urlencode($adh->ref);
if (price2num(GETPOST('amount'))) $urlback.='&amount='.price2num(GETPOST('amount')); if (price2num(GETPOST('amount'))) $urlback.='&amount='.price2num(GETPOST('amount'));
if (GETPOST('email')) $urlback.='&email='.urlencode(GETPOST('email')); if (GETPOST('email')) $urlback.='&email='.urlencode(GETPOST('email'));
} }
else if ($conf->global->MEMBER_NEWFORM_PAYONLINE == 'paypal') else if ($conf->global->MEMBER_NEWFORM_PAYONLINE == 'paypal')
{ {
$urlback=DOL_MAIN_URL_ROOT.'/public/paypal/newpayment.php?from=membernewform&source=membersubscription&ref='.$adh->ref; $urlback=DOL_MAIN_URL_ROOT.'/public/paypal/newpayment.php?from=membernewform&source=membersubscription&ref='.urlencode($adh->ref);
if (price2num(GETPOST('amount'))) $urlback.='&amount='.price2num(GETPOST('amount')); if (price2num(GETPOST('amount'))) $urlback.='&amount='.price2num(GETPOST('amount'));
if (GETPOST('email')) $urlback.='&email='.urlencode(GETPOST('email')); if (GETPOST('email')) $urlback.='&email='.urlencode(GETPOST('email'));
if (! empty($conf->global->PAYPAL_SECURITY_TOKEN) && ! empty($conf->global->PAYPAL_SECURITY_TOKEN_UNIQUE)) if (! empty($conf->global->PAYPAL_SECURITY_TOKEN))
{ {
$urlback.='&securekey='.dol_hash($conf->global->PAYPAL_SECURITY_TOKEN . 'membersubscription' . $adh->ref, 2); if (! empty($conf->global->PAYPAL_SECURITY_TOKEN_UNIQUE))
{
$urlback.='&securekey='.urlencode(dol_hash($conf->global->PAYPAL_SECURITY_TOKEN . 'membersubscription' . $adh->ref, 2));
}
else
{
$urlback.='&securekey='.urlencode($conf->global->PAYPAL_SECURITY_TOKEN);
}
} }
} }
else else
{ {

View File

@ -986,6 +986,9 @@ div.nopadding {
margin-<?php echo $right; ?>: 8px; margin-<?php echo $right; ?>: 8px;
margin-bottom: 4px; margin-bottom: 4px;
} }
.pictoobjectwidth {
width: 14px;
}
.pictosubstatus { .pictosubstatus {
padding-left: 2px; padding-left: 2px;
padding-right: 2px; padding-right: 2px;
@ -2972,16 +2975,16 @@ div.tabBar .noborder {
border: 1px solid #CCC; border: 1px solid #CCC;
text-align: center; text-align: center;
border-radius: 2px; border-radius: 2px;
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
width: 115px; width: 115px;
} }
@media only screen and (max-width: 767px) @media only screen and (max-width: 767px)
{ {
.boxstats { .boxstats {
width: 100px; width: 100px;
} }
} }

View File

@ -756,10 +756,10 @@ div.fiche>form>div.div-table-responsive {
width: 20px; width: 20px;
object-fit: contain; object-fit: contain;
} }
div.statusref { div.statusref {
padding-right: 10px; padding-right: 10px;
} }
} }
.linkobject { cursor: pointer; } .linkobject { cursor: pointer; }
<?php if (GETPOST("optioncss") == 'print') { ?> <?php if (GETPOST("optioncss") == 'print') { ?>
@ -1010,6 +1010,9 @@ table.noborder tr.liste_titre td {
margin-<?php echo $right; ?>: 8px; margin-<?php echo $right; ?>: 8px;
margin-bottom: 4px; margin-bottom: 4px;
} }
.pictoobjectwidth {
width: 14px;
}
.pictosubstatus { .pictosubstatus {
padding-left: 2px; padding-left: 2px;
padding-right: 2px; padding-right: 2px;
@ -2854,16 +2857,16 @@ div .tdtop {
text-align: center; text-align: center;
border-radius: 2px; border-radius: 2px;
min-height: 38px; min-height: 38px;
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
width: 115px; width: 115px;
} }
@media only screen and (max-width: 767px) @media only screen and (max-width: 767px)
{ {
.boxstats { .boxstats {
width: 100px; width: 100px;
} }
} }
.boxstats:hover { .boxstats:hover {

View File

@ -333,7 +333,7 @@ if ($result)
{ {
// On affiche ligne pour modifier droits // On affiche ligne pour modifier droits
print '<tr '. $bc[$var].'>'; print '<tr '. $bc[$var].'>';
print '<td class="maxwidthonsmartphone tdoverflowonsmartphone">'.img_object('',$picto).' '.$objMod->getName(); print '<td class="maxwidthonsmartphone tdoverflowonsmartphone">'.img_object('',$picto,'class="pictoobjectwidth"').' '.$objMod->getName();
print '<a name="'.$objMod->getName().'"></a></td>'; print '<a name="'.$objMod->getName().'"></a></td>';
print '<td align="center" class="nowrap">'; print '<td align="center" class="nowrap">';
print '<a class="reposition" title="'.dol_escape_htmltag($langs->trans("All")).'" alt="'.dol_escape_htmltag($langs->trans("All")).'" href="perms.php?id='.$object->id.'&amp;action=addrights&amp;entity='.$entity.'&amp;module='.$obj->module.'">'.$langs->trans("All")."</a>"; print '<a class="reposition" title="'.dol_escape_htmltag($langs->trans("All")).'" alt="'.dol_escape_htmltag($langs->trans("All")).'" href="perms.php?id='.$object->id.'&amp;action=addrights&amp;entity='.$entity.'&amp;module='.$obj->module.'">'.$langs->trans("All")."</a>";
@ -348,7 +348,7 @@ if ($result)
print '<tr '. $bc[$var].'>'; print '<tr '. $bc[$var].'>';
// Picto and label of permission // Picto and label of permission
print '<td class="maxwidthonsmartphone tdoverflowonsmartphone">'.img_object('',$picto).' '.$objMod->getName().'</td>'; print '<td class="maxwidthonsmartphone tdoverflowonsmartphone">'.img_object('',$picto,'class="pictoobjectwidth"').' '.$objMod->getName().'</td>';
// Permission and tick // Permission and tick
if (! empty($object->admin) && ! empty($objMod->rights_admin_allowed)) // Permission own because admin if (! empty($object->admin) && ! empty($objMod->rights_admin_allowed)) // Permission own because admin