Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop
This commit is contained in:
commit
0602986588
@ -1863,9 +1863,9 @@ class Commande extends CommonOrder
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Load array this->expeditions of lines of shipments with nb of products sent for each order line
|
* Load array this->expeditions of lines of shipments with nb of products sent for each order line
|
||||||
* Note: For a dedicated shipment, the fetch_lines load the qty_asked and qty_shipped. This function return qty_shipped cuulated for order
|
* Note: For a dedicated shipment, the fetch_lines can be used to load the qty_asked and qty_shipped. This function is use to return qty_shipped cumulated for the order
|
||||||
*
|
*
|
||||||
* @param int $filtre_statut Filter on status
|
* @param int $filtre_statut Filter on shipment status
|
||||||
* @return int <0 if KO, Nb of lines found if OK
|
* @return int <0 if KO, Nb of lines found if OK
|
||||||
*/
|
*/
|
||||||
function loadExpeditions($filtre_statut=-1)
|
function loadExpeditions($filtre_statut=-1)
|
||||||
@ -1934,21 +1934,6 @@ class Commande extends CommonOrder
|
|||||||
else dol_print_error($this->db);
|
else dol_print_error($this->db);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Return a array with sendings by line
|
|
||||||
*
|
|
||||||
* @param int $filtre_statut Filtre sur statut
|
|
||||||
* @return int 0 si OK, <0 si KO
|
|
||||||
*
|
|
||||||
* TODO deprecate, move to Shipping class
|
|
||||||
*/
|
|
||||||
function livraison_array($filtre_statut=self::STATUS_CANCELED)
|
|
||||||
{
|
|
||||||
$delivery = new Livraison($this->db);
|
|
||||||
$deliveryArray = $delivery->livraison_array($filtre_statut);
|
|
||||||
return $deliveryArray;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a array with the pending stock by product
|
* Return a array with the pending stock by product
|
||||||
*
|
*
|
||||||
|
|||||||
@ -69,7 +69,7 @@ else
|
|||||||
$typeid=$_REQUEST['typeid'];
|
$typeid=$_REQUEST['typeid'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers
|
if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") || GETPOST("button_removefilter")) // All test are required to be compatible with all browsers
|
||||||
{
|
{
|
||||||
$search_ref="";
|
$search_ref="";
|
||||||
$search_label="";
|
$search_label="";
|
||||||
@ -211,6 +211,8 @@ if ($resql)
|
|||||||
print '</td>';
|
print '</td>';
|
||||||
print "</tr>\n";
|
print "</tr>\n";
|
||||||
|
|
||||||
|
$i=0;
|
||||||
|
$totalarray=array();
|
||||||
while ($i < min($num,$limit))
|
while ($i < min($num,$limit))
|
||||||
{
|
{
|
||||||
$obj = $db->fetch_object($resql);
|
$obj = $db->fetch_object($resql);
|
||||||
@ -244,8 +246,12 @@ if ($resql)
|
|||||||
}
|
}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
|
// Amount
|
||||||
print '<td align="right" width="100">'.price($obj->amount).'</td>';
|
print '<td align="right" width="100">'.price($obj->amount).'</td>';
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
if (! $i) $totalarray['totalttcfield']=$totalarray['nbfield'];
|
||||||
|
$totalarray['totalttc'] += $obj->amount;
|
||||||
|
|
||||||
// Due date
|
// Due date
|
||||||
print '<td width="110" align="center">'.dol_print_date($db->jdate($obj->date_ech), 'day').'</td>';
|
print '<td width="110" align="center">'.dol_print_date($db->jdate($obj->date_ech), 'day').'</td>';
|
||||||
|
|
||||||
@ -257,6 +263,22 @@ if ($resql)
|
|||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Show total line
|
||||||
|
if (isset($totalarray['totalttcfield']))
|
||||||
|
{
|
||||||
|
print '<tr class="liste_total">';
|
||||||
|
if ($num < $limit) print '<td align="left">'.$langs->trans("Total").'</td>';
|
||||||
|
else print '<td align="left">'.$langs->trans("Totalforthispage").'</td>';
|
||||||
|
print '<td></td>';
|
||||||
|
print '<td></td>';
|
||||||
|
print '<td></td>';
|
||||||
|
print '<td align="right">'.price($totalarray['totalttc']).'</td>';
|
||||||
|
print '<td></td>';
|
||||||
|
print '<td></td>';
|
||||||
|
print '<td></td>';
|
||||||
|
print '</tr>';
|
||||||
|
}
|
||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
}
|
}
|
||||||
print '</form>';
|
print '</form>';
|
||||||
|
|||||||
@ -93,6 +93,13 @@ class Expedition extends CommonObject
|
|||||||
var $meths;
|
var $meths;
|
||||||
var $listmeths; // List of carriers
|
var $listmeths; // List of carriers
|
||||||
|
|
||||||
|
|
||||||
|
const STATUS_DRAFT = 0;
|
||||||
|
const STATUS_VALIDATED = 1;
|
||||||
|
const STATUS_CLOSED = 2;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*
|
*
|
||||||
@ -1794,9 +1801,9 @@ class Expedition extends CommonObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Classify the shipping as closed
|
* Classify the shipping as closed.
|
||||||
*
|
*
|
||||||
* @return int <0 if ko, >0 if ok
|
* @return int <0 if KO, >0 if OK
|
||||||
*/
|
*/
|
||||||
function setClosed()
|
function setClosed()
|
||||||
{
|
{
|
||||||
@ -1806,15 +1813,43 @@ class Expedition extends CommonObject
|
|||||||
|
|
||||||
$this->db->begin();
|
$this->db->begin();
|
||||||
|
|
||||||
$sql = 'UPDATE '.MAIN_DB_PREFIX.'expedition SET fk_statut=2';
|
$sql = 'UPDATE '.MAIN_DB_PREFIX.'expedition SET fk_statut='.self::STATUS_CLOSED;
|
||||||
$sql .= ' WHERE rowid = '.$this->id.' AND fk_statut > 0';
|
$sql .= ' WHERE rowid = '.$this->id.' AND fk_statut > 0';
|
||||||
|
|
||||||
$resql=$this->db->query($sql);
|
$resql=$this->db->query($sql);
|
||||||
if ($resql)
|
if ($resql)
|
||||||
{
|
{
|
||||||
// TODO: Add option/checkbox to set order billed if 100% of order is shipped
|
// Set order billed if 100% of order is shipped (qty in shipment lines match qty in order lines)
|
||||||
$this->statut=2;
|
if ($this->origin == 'commande' && $this->origin_id > 0)
|
||||||
|
{
|
||||||
|
$order = new Commande($this->db);
|
||||||
|
$order->fetch($this->origin_id);
|
||||||
|
|
||||||
|
$order->loadExpeditions(self::STATUS_CLOSED); // Fill $order->expeditions = array(orderlineid => qty)
|
||||||
|
|
||||||
|
$shipments_match_order = 1;
|
||||||
|
foreach($order->lines as $line)
|
||||||
|
{
|
||||||
|
$lineid = $line->id;
|
||||||
|
$qty = $line->qty;
|
||||||
|
if (($type == 0 || ! empty($conf->global->STOCK_SUPPORTS_SERVICES)) && $order->expeditions[$lineid] != $qty)
|
||||||
|
{
|
||||||
|
$shipments_match_order = 0;
|
||||||
|
$text='Qty for order line id '.$lineid.' is '.$qty.' but in shipments with status Expedition::STATUS_CLOSED='.self::STATUS_CLOSED.', we have '.$order->expeditions[$lineid].' so we can t close order';
|
||||||
|
dol_syslog($text);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($shipments_match_order)
|
||||||
|
{
|
||||||
|
dol_syslog("Qty for the ".count($order->lines)." lines of order have same value for shipments with status Expedition::STATUS_CLOSED=".self::STATUS_CLOSED.', so we close order');
|
||||||
|
$order->cloture($user);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->statut=self::STATUS_CLOSED;
|
||||||
|
|
||||||
|
|
||||||
// If stock increment is done on closing
|
// If stock increment is done on closing
|
||||||
if (! $error && ! empty($conf->stock->enabled) && ! empty($conf->global->STOCK_CALCULATE_ON_SHIPMENT_CLOSE))
|
if (! $error && ! empty($conf->stock->enabled) && ! empty($conf->global->STOCK_CALCULATE_ON_SHIPMENT_CLOSE))
|
||||||
{
|
{
|
||||||
@ -1823,7 +1858,7 @@ class Expedition extends CommonObject
|
|||||||
$langs->load("agenda");
|
$langs->load("agenda");
|
||||||
|
|
||||||
// Loop on each product line to add a stock movement
|
// Loop on each product line to add a stock movement
|
||||||
// TODO possibilite d'expedier a partir d'une propale ou autre origine
|
// TODO possibilite d'expedier a partir d'une propale ou autre origine ?
|
||||||
$sql = "SELECT cd.fk_product, cd.subprice,";
|
$sql = "SELECT cd.fk_product, cd.subprice,";
|
||||||
$sql.= " ed.rowid, ed.qty, ed.fk_entrepot,";
|
$sql.= " ed.rowid, ed.qty, ed.fk_entrepot,";
|
||||||
$sql.= " edb.rowid as edbrowid, edb.eatby, edb.sellby, edb.batch, edb.qty as edbqty, edb.fk_origin_stock";
|
$sql.= " edb.rowid as edbrowid, edb.eatby, edb.sellby, edb.batch, edb.qty as edbqty, edb.fk_origin_stock";
|
||||||
|
|||||||
@ -1,27 +0,0 @@
|
|||||||
-- ============================================================================
|
|
||||||
-- Copyright (C) 2011 Regis Houssin <regis.houssin@capnetworks.com>
|
|
||||||
--
|
|
||||||
-- This program is free software; you can redistribute it and/or modify
|
|
||||||
-- it under the terms of the GNU General Public License as published by
|
|
||||||
-- the Free Software Foundation; either version 3 of the License, or
|
|
||||||
-- (at your option) any later version.
|
|
||||||
--
|
|
||||||
-- This program is distributed in the hope that it will be useful,
|
|
||||||
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
-- GNU General Public License for more details.
|
|
||||||
--
|
|
||||||
-- You should have received a copy of the GNU General Public License
|
|
||||||
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
--
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
create table llx_element_lock
|
|
||||||
(
|
|
||||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
|
||||||
fk_element integer NOT NULL,
|
|
||||||
elementtype varchar(32) NOT NULL,
|
|
||||||
datel datetime, -- date of lock
|
|
||||||
datem datetime, -- date of unlock/modif
|
|
||||||
sessionid varchar(255)
|
|
||||||
)ENGINE=innodb;
|
|
||||||
@ -72,6 +72,7 @@ ProductQtyInSuppliersShipmentAlreadyRecevied=Product quantity from opened suppli
|
|||||||
NoProductToShipFoundIntoStock=No product to ship found into warehouse <b>%s</b>. Correct stock or go back to choose another warehouse.
|
NoProductToShipFoundIntoStock=No product to ship found into warehouse <b>%s</b>. Correct stock or go back to choose another warehouse.
|
||||||
WeightVolShort=Weight/Vol.
|
WeightVolShort=Weight/Vol.
|
||||||
ValidateOrderFirstBeforeShipment=You must first validate the order before being able to make shipments.
|
ValidateOrderFirstBeforeShipment=You must first validate the order before being able to make shipments.
|
||||||
|
CloseShippeOrdersAutomatically=Classify the order "Delivered" if entirely shipped.
|
||||||
|
|
||||||
# Sending methods
|
# Sending methods
|
||||||
SendingMethodCATCH=Catch by customer
|
SendingMethodCATCH=Catch by customer
|
||||||
|
|||||||
@ -300,213 +300,7 @@ $formfile = new FormFile($db);
|
|||||||
if ($action == 'create') // Seems to no be used
|
if ($action == 'create') // Seems to no be used
|
||||||
{
|
{
|
||||||
|
|
||||||
print load_fiche_titre($langs->trans("CreateADeliveryOrder"));
|
|
||||||
|
|
||||||
if ($mesg)
|
|
||||||
{
|
|
||||||
print $mesg.'<br>';
|
|
||||||
}
|
|
||||||
|
|
||||||
$commande = new Commande($db);
|
|
||||||
$commande->livraison_array();
|
|
||||||
|
|
||||||
if ($commande->fetch(GETPOST("commande_id")))
|
|
||||||
{
|
|
||||||
$soc = new Societe($db);
|
|
||||||
$soc->fetch($commande->socid);
|
|
||||||
$author = new User($db);
|
|
||||||
$author->fetch($commande->user_author_id);
|
|
||||||
|
|
||||||
if (!$conf->expedition_bon->enabled && ! empty($conf->stock->enabled))
|
|
||||||
{
|
|
||||||
$entrepot = new Entrepot($db);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Commande
|
|
||||||
*/
|
|
||||||
print '<form action="'.$_SERVER['PHP_SELF'].'" method="post">';
|
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
|
||||||
print '<input type="hidden" name="action" value="add">';
|
|
||||||
print '<input type="hidden" name="commande_id" value="'.$commande->id.'">';
|
|
||||||
if (!$conf->expedition_bon->enabled && ! empty($conf->stock->enabled))
|
|
||||||
{
|
|
||||||
print '<input type="hidden" name="entrepot_id" value="'.$_GET["entrepot_id"].'">';
|
|
||||||
}
|
|
||||||
print '<table class="border" width="100%">';
|
|
||||||
print '<tr><td width="20%">'.$langs->trans("Customer").'</td>';
|
|
||||||
print '<td width="30%"><b><a href="'.DOL_URL_ROOT.'/comm/card.php?socid='.$soc->id.'">'.$soc->name.'</a></b></td>';
|
|
||||||
|
|
||||||
print '<td width="50%" colspan="2">';
|
|
||||||
|
|
||||||
print "</td></tr>";
|
|
||||||
|
|
||||||
print "<tr><td>".$langs->trans("Date")."</td>";
|
|
||||||
print "<td>".dol_print_date($commande->date,'dayhourtext')."</td>\n";
|
|
||||||
|
|
||||||
print '<td>'.$langs->trans("Order").'</td><td><a href="'.DOL_URL_ROOT.'/commande/card.php?id='.$commande->id.'">'.img_object($langs->trans("ShowOrder"),'order').' '.$commande->ref.'</a>';
|
|
||||||
print "</td></tr>\n";
|
|
||||||
|
|
||||||
print '<tr>';
|
|
||||||
|
|
||||||
if (!$conf->expedition_bon->enabled && ! empty($conf->stock->enabled))
|
|
||||||
{
|
|
||||||
print '<td>'.$langs->trans("Warehouse").'</td>';
|
|
||||||
print '<td>';
|
|
||||||
$ents = $entrepot->list_array();
|
|
||||||
print '<a href="'.DOL_URL_ROOT.'/product/stock/card.php?id='.$_GET["entrepot_id"].'">'.img_object($langs->trans("ShowWarehouse"),'stock').' '.$ents[$_GET["entrepot_id"]].'</a>';
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
|
|
||||||
print "<td>".$langs->trans("Author")."</td><td>".$author->getFullName($langs)."</td>\n";
|
|
||||||
|
|
||||||
if ($commande->note)
|
|
||||||
{
|
|
||||||
print '<tr><td colspan="3">Note : '.nl2br($commande->note)."</td></tr>";
|
|
||||||
}
|
|
||||||
print "</table>";
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Lignes de commandes
|
|
||||||
*/
|
|
||||||
print '<br><table class="noborder" width="100%">';
|
|
||||||
|
|
||||||
$commande->fetch_lines(1);
|
|
||||||
$lines = $commande->lines;
|
|
||||||
|
|
||||||
// Lecture des livraisons deja effectuees
|
|
||||||
$commande->livraison_array();
|
|
||||||
|
|
||||||
$num = count($commande->lines);
|
|
||||||
$i = 0;
|
|
||||||
|
|
||||||
if ($num)
|
|
||||||
{
|
|
||||||
print '<tr class="liste_titre">';
|
|
||||||
print '<td width="54%">'.$langs->trans("Description").'</td>';
|
|
||||||
print '<td align="center">'.$langs->trans("QtyOrdered").'</td>';
|
|
||||||
print '<td align="center">'.$langs->trans("QtyReceived").'</td>';
|
|
||||||
print '<td align="center">'.$langs->trans("QtyToShip").'</td>';
|
|
||||||
if (! empty($conf->stock->enabled))
|
|
||||||
{
|
|
||||||
print '<td width="12%" align="center">'.$langs->trans("Stock").'</td>';
|
|
||||||
}
|
|
||||||
print "</tr>\n";
|
|
||||||
}
|
|
||||||
$var=true;
|
|
||||||
while ($i < $num)
|
|
||||||
{
|
|
||||||
$product = new Product($db);
|
|
||||||
|
|
||||||
$line = $commande->lines[$i];
|
|
||||||
$var=!$var;
|
|
||||||
print "<tr ".$bc[$var].">\n";
|
|
||||||
if ($line->fk_product > 0)
|
|
||||||
{
|
|
||||||
$product->fetch($line->fk_product);
|
|
||||||
$product->load_stock();
|
|
||||||
|
|
||||||
// Define output language
|
|
||||||
if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE))
|
|
||||||
{
|
|
||||||
$commande->fetch_thirdparty();
|
|
||||||
$outputlangs = $langs;
|
|
||||||
$newlang='';
|
|
||||||
if (empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id'];
|
|
||||||
if (empty($newlang)) $newlang=$commande->thirdparty->default_lang;
|
|
||||||
if (! empty($newlang))
|
|
||||||
{
|
|
||||||
$outputlangs = new Translate("",$conf);
|
|
||||||
$outputlangs->setDefaultLang($newlang);
|
|
||||||
}
|
|
||||||
|
|
||||||
$label = (! empty($product->multilangs[$outputlangs->defaultlang]["label"])) ? $product->multilangs[$outputlangs->defaultlang]["label"] : $product->label;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
$label = (! empty($line->label)?$line->label:$product->label);
|
|
||||||
|
|
||||||
print '<td>';
|
|
||||||
print '<a href="'.DOL_URL_ROOT.'/product/card.php?id='.$line->fk_product.'">'.img_object($langs->trans("ShowProduct"),"product").' '.$product->ref.'</a> - '.$label;
|
|
||||||
if ($line->description) print nl2br($line->description);
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print "<td>";
|
|
||||||
if ($line->fk_product_type==1) $text = img_object($langs->trans('Service'),'service');
|
|
||||||
else $text = img_object($langs->trans('Product'),'product');
|
|
||||||
|
|
||||||
if (! empty($line->label)) {
|
|
||||||
$text.= ' <strong>'.$line->label.'</strong>';
|
|
||||||
print $form->textwithtooltip($text,$line->description,3,'','',$i);
|
|
||||||
} else {
|
|
||||||
print $text.' '.nl2br($line->description);
|
|
||||||
}
|
|
||||||
|
|
||||||
print_date_range($lines[$i]->date_start,$lines[$i]->date_end);
|
|
||||||
print "</td>\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
print '<td align="center">'.$line->qty.'</td>';
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
print '<td align="center">';
|
|
||||||
$quantite_livree = $commande->livraisons[$line->id];
|
|
||||||
print $quantite_livree;
|
|
||||||
print '</td>';
|
|
||||||
|
|
||||||
$quantite_commandee = $line->qty;
|
|
||||||
$quantite_a_livrer = $quantite_commandee - $quantite_livree;
|
|
||||||
|
|
||||||
if (! empty($conf->stock->enabled))
|
|
||||||
{
|
|
||||||
$stock = $product->stock_warehouse[$_GET["entrepot_id"]]->real;
|
|
||||||
$stock+=0; // Convertit en numerique
|
|
||||||
|
|
||||||
// Quantite a livrer
|
|
||||||
print '<td align="center">';
|
|
||||||
print '<input name="idl'.$i.'" type="hidden" value="'.$line->id.'">';
|
|
||||||
print '<input name="qtyl'.$i.'" type="text" size="6" value="'.min($quantite_a_livrer, $stock).'">';
|
|
||||||
print '</td>';
|
|
||||||
|
|
||||||
// Stock
|
|
||||||
if ($stock < $quantite_a_livrer)
|
|
||||||
{
|
|
||||||
print '<td align="center">'.$stock.' '.img_warning().'</td>';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print '<td align="center">'.$stock.'</td>';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Quantite a livrer
|
|
||||||
print '<td align="center">';
|
|
||||||
print '<input name="idl'.$i.'" type="hidden" value="'.$line->id.'">';
|
|
||||||
print '<input name="qtyl'.$i.'" type="text" size="6" value="'.$quantite_a_livrer.'">';
|
|
||||||
print '</td>';
|
|
||||||
}
|
|
||||||
|
|
||||||
print "</tr>\n";
|
|
||||||
|
|
||||||
$i++;
|
|
||||||
$var=!$var;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
print '<tr><td align="center" colspan="4"><br><input type="submit" class="button" value="'.$langs->trans("Create").'"></td></tr>';
|
|
||||||
print "</table>";
|
|
||||||
print '</form>';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
dol_print_error($db);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
/* *************************************************************************** */
|
/* *************************************************************************** */
|
||||||
|
|||||||
@ -116,13 +116,14 @@ if ($action == 'add_prod' && ($user->rights->produit->creer || $user->rights->se
|
|||||||
else if($action==='save_composed_product')
|
else if($action==='save_composed_product')
|
||||||
{
|
{
|
||||||
$TProduct = GETPOST('TProduct', 'array');
|
$TProduct = GETPOST('TProduct', 'array');
|
||||||
if(!empty($TProduct))
|
if (!empty($TProduct))
|
||||||
{
|
{
|
||||||
foreach ($TProduct as $id_product => $row)
|
foreach ($TProduct as $id_product => $row)
|
||||||
{
|
{
|
||||||
if ($row['qty'] > 0) $object->update_sousproduit($id, $id_product, $row['qty'], isset($row['incdec']) ? 1 : 0 );
|
if ($row['qty'] > 0) $object->update_sousproduit($id, $id_product, $row['qty'], isset($row['incdec']) ? 1 : 0 );
|
||||||
else $object->del_sousproduit($id, $id_product);
|
else $object->del_sousproduit($id, $id_product);
|
||||||
}
|
}
|
||||||
|
setEventMessages('RecordSaved', null);
|
||||||
}
|
}
|
||||||
$action='';
|
$action='';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -664,10 +664,11 @@ if ($resql)
|
|||||||
else print $langs->trans('PrivateProject');
|
else print $langs->trans('PrivateProject');
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
|
// Amount
|
||||||
if (! empty($arrayfields['p.opp_amount']['checked']))
|
if (! empty($arrayfields['p.opp_amount']['checked']))
|
||||||
{
|
{
|
||||||
print '<td align="right">';
|
print '<td align="right">';
|
||||||
if ($obj->opp_status_code) print price($obj->opp_amount, 1, '', 1, -1, -1, $conf->currency);
|
if ($obj->opp_status_code) print price($obj->opp_amount, 1, '', 1, -1, -1, '');
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
if (! empty($arrayfields['p.fk_opp_status']['checked']))
|
if (! empty($arrayfields['p.fk_opp_status']['checked']))
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user