Merge branch 'develop' of https://github.com/Dolibarr/dolibarr.git into develop
This commit is contained in:
commit
673c701ebc
@ -39,9 +39,9 @@ if (! empty($conf->margin->enabled) && ! empty($object->element) && in_array($ob
|
||||
<input type="hidden" name="id" value="<?php echo $this->id; ?>">
|
||||
|
||||
<tr class="liste_titre nodrag nodrop">
|
||||
<td
|
||||
<?php echo (! empty($conf->global->MAIN_VIEW_LINE_NUMBER) ? ' colspan="2"' : ''); ?>><div
|
||||
id="add"></div> <span class="hideonsmartphone"><?php echo $langs->trans('AddNewLine').' - ' ?></span><?php echo $langs->trans("FreeZone"); ?>
|
||||
<td<?php echo (! empty($conf->global->MAIN_VIEW_LINE_NUMBER) ? ' colspan="2"' : ''); ?>>
|
||||
<div id="add"></div>
|
||||
<span class="hideonsmartphone"><?php echo $langs->trans('AddNewLine').' - ' ?></span><?php echo $langs->trans("FreeZone"); ?>
|
||||
</td>
|
||||
<td align="right"><?php echo $langs->trans('VAT'); ?></td>
|
||||
<td align="right"><?php echo $langs->trans('PriceUHT'); ?></td>
|
||||
@ -83,36 +83,36 @@ if (! empty($conf->margin->enabled) && ! empty($object->element) && in_array($ob
|
||||
</tr>
|
||||
|
||||
<tr <?php echo $bcnd[$var]; ?>>
|
||||
<?php
|
||||
if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER)) {
|
||||
$coldisplay=2; }
|
||||
else {
|
||||
$coldisplay=0; }
|
||||
?>
|
||||
<?php
|
||||
if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER)) {
|
||||
$coldisplay=2; }
|
||||
else {
|
||||
$coldisplay=0; }
|
||||
?>
|
||||
|
||||
<td<?php echo (! empty($conf->global->MAIN_VIEW_LINE_NUMBER) ? ' colspan="2"' : ''); ?>>
|
||||
<?php
|
||||
<?php
|
||||
|
||||
echo '<span>';
|
||||
echo $form->select_type_of_lines(isset($_POST["type"])?$_POST["type"]:-1,'type',1);
|
||||
echo '</span>';
|
||||
echo '<span>';
|
||||
echo $form->select_type_of_lines(isset($_POST["type"])?$_POST["type"]:-1,'type',1);
|
||||
echo '</span>';
|
||||
|
||||
if (is_object($hookmanager))
|
||||
{
|
||||
$parameters=array();
|
||||
$reshook=$hookmanager->executeHooks('formCreateProductOptions',$parameters,$object,$action);
|
||||
}
|
||||
if (is_object($hookmanager))
|
||||
{
|
||||
$parameters=array('fk_parent_line'=>GETPOST('fk_parent_line','int'));
|
||||
$reshook=$hookmanager->executeHooks('formCreateProductOptions',$parameters,$object,$action);
|
||||
}
|
||||
|
||||
if ((! empty($conf->product->enabled) && ! empty($conf->service->enabled)) || (empty($conf->product->enabled) && empty($conf->service->enabled))) echo '<br>';
|
||||
if ((! empty($conf->product->enabled) && ! empty($conf->service->enabled)) || (empty($conf->product->enabled) && empty($conf->service->enabled))) echo '<br>';
|
||||
|
||||
// Editor wysiwyg
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
|
||||
$nbrows=ROWS_2;
|
||||
$enabled=(! empty($conf->global->FCKEDITOR_ENABLE_DETAILS)?$conf->global->FCKEDITOR_ENABLE_DETAILS:0);
|
||||
if (! empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) $nbrows=$conf->global->MAIN_INPUT_DESC_HEIGHT;
|
||||
$doleditor=new DolEditor('dp_desc',GETPOST('dp_desc'),'',100,'dolibarr_details','',false,true,$enabled,$nbrows,70);
|
||||
$doleditor->Create();
|
||||
?>
|
||||
// Editor wysiwyg
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
|
||||
$nbrows=ROWS_2;
|
||||
$enabled=(! empty($conf->global->FCKEDITOR_ENABLE_DETAILS)?$conf->global->FCKEDITOR_ENABLE_DETAILS:0);
|
||||
if (! empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) $nbrows=$conf->global->MAIN_INPUT_DESC_HEIGHT;
|
||||
$doleditor=new DolEditor('dp_desc',GETPOST('dp_desc'),'',100,'dolibarr_details','',false,true,$enabled,$nbrows,70);
|
||||
$doleditor->Create();
|
||||
?>
|
||||
</td>
|
||||
|
||||
<td align="right"><?php
|
||||
@ -120,8 +120,7 @@ if (! empty($conf->margin->enabled) && ! empty($object->element) && in_array($ob
|
||||
else echo $form->load_tva('tva_tx', (isset($_POST["tva_tx"])?$_POST["tva_tx"]:-1), $seller, $buyer);
|
||||
?>
|
||||
</td>
|
||||
<td align="right"><input type="text" size="5" name="price_ht" class="flat" value="<?php echo (isset($_POST["price_ht"])?$_POST["price_ht"]:''); ?>">
|
||||
</td>
|
||||
<td align="right"><input type="text" size="5" name="price_ht" class="flat" value="<?php echo (isset($_POST["price_ht"])?$_POST["price_ht"]:''); ?>"></td>
|
||||
<td align="right"><input type="text" size="2" name="qty" class="flat" value="<?php echo (isset($_POST["qty"])?$_POST["qty"]:1); ?>"></td>
|
||||
<td align="right" class="nowrap"><input type="text" size="1" class="flat" value="<?php echo (isset($_POST["remise_percent"])?$_POST["remise_percent"]:$buyer->remise_client); ?>" name="remise_percent"><span class="hideonsmartphone">%</span></td>
|
||||
<?php
|
||||
@ -129,8 +128,8 @@ if (! empty($conf->margin->enabled) && ! empty($object->element) && in_array($ob
|
||||
if (! empty($usemargins))
|
||||
{
|
||||
?>
|
||||
<td align="right"><input type="text" size="5" name="buying_price" class="flat"
|
||||
value="<?php echo (isset($_POST["buying_price"])?$_POST["buying_price"]:''); ?>">
|
||||
<td align="right">
|
||||
<input type="text" size="5" name="buying_price" class="flat" value="<?php echo (isset($_POST["buying_price"])?$_POST["buying_price"]:''); ?>">
|
||||
</td>
|
||||
<?php
|
||||
if ($user->rights->margins->creer)
|
||||
@ -155,21 +154,25 @@ if (! empty($conf->margin->enabled) && ! empty($object->element) && in_array($ob
|
||||
}
|
||||
}
|
||||
?>
|
||||
<td align="center" valign="middle" colspan="<?php echo $colspan; ?>"><input type="submit" class="button" value="<?php echo $langs->trans('Add'); ?>" name="addline"></td>
|
||||
<?php
|
||||
//Line extrafield
|
||||
if (!empty($extrafieldsline)) {
|
||||
if ($this->table_element_line=='commandedet') {
|
||||
$newline = new OrderLine($this->db);
|
||||
}elseif ($this->table_element_line=='propaldet') {
|
||||
$newline = new PropaleLigne($this->db);
|
||||
}elseif ($this->table_element_line=='facturedet') {
|
||||
$newline = new FactureLigne($this->db);
|
||||
}
|
||||
if (is_object($newline)) {
|
||||
print $newline->showOptionals($extrafieldsline,'edit',array('style'=>$bcnd[$var],'colspan'=>$coldisplay+8));
|
||||
}
|
||||
<td align="center" valign="middle" colspan="<?php echo $colspan; ?>">
|
||||
<input type="submit" class="button" value="<?php echo $langs->trans('Add'); ?>" name="addline_libre">
|
||||
</td>
|
||||
<?php
|
||||
//Line extrafield
|
||||
if (!empty($extrafieldsline)) {
|
||||
if ($this->table_element_line=='commandedet') {
|
||||
$newline = new OrderLine($this->db);
|
||||
}
|
||||
elseif ($this->table_element_line=='propaldet') {
|
||||
$newline = new PropaleLigne($this->db);
|
||||
}
|
||||
elseif ($this->table_element_line=='facturedet') {
|
||||
$newline = new FactureLigne($this->db);
|
||||
}
|
||||
if (is_object($newline)) {
|
||||
print $newline->showOptionals($extrafieldsline,'edit',array('style'=>$bcnd[$var],'colspan'=>$coldisplay+8));
|
||||
}
|
||||
}
|
||||
?>
|
||||
</tr>
|
||||
|
||||
@ -182,13 +185,14 @@ if (! empty($conf->service->enabled) && $dateSelector)
|
||||
if (! empty($usemargins))
|
||||
{
|
||||
$colspan++; // For the buying price
|
||||
if($conf->global->DISPLAY_MARGIN_RATES) $colspan++;
|
||||
if($conf->global->DISPLAY_MARK_RATES) $colspan++;
|
||||
if (! empty($conf->global->DISPLAY_MARGIN_RATES)) $colspan++;
|
||||
if (! empty($conf->global->DISPLAY_MARK_RATES)) $colspan++;
|
||||
}
|
||||
?>
|
||||
|
||||
<tr <?php echo $bcnd[$var]; ?>>
|
||||
<td colspan="<?php echo $colspan; ?>"><?php
|
||||
<td colspan="<?php echo $colspan; ?>">
|
||||
<?php
|
||||
if (! empty($object->element) && $object->element == 'contrat')
|
||||
{
|
||||
print $langs->trans("DateStartPlanned").' ';
|
||||
@ -212,101 +216,108 @@ if (! empty($conf->service->enabled) && $dateSelector)
|
||||
|
||||
</form>
|
||||
|
||||
<?php if ($conf->margin->enabled && $user->rights->margins->creer)
|
||||
{
|
||||
?>
|
||||
<script type="text/javascript">
|
||||
var npRate = null;
|
||||
<?php
|
||||
if (! empty($conf->global->DISPLAY_MARGIN_RATES)) { ?>
|
||||
npRate = "np_marginRate";
|
||||
<?php }
|
||||
elseif (! empty($conf->global->DISPLAY_MARK_RATES)) { ?>
|
||||
npRate = "np_markRate";
|
||||
<?php }
|
||||
?>
|
||||
|
||||
$("form#addproduct").submit(function(e) {
|
||||
if (npRate) return checkFreeLine(e, npRate);
|
||||
else return true;
|
||||
});
|
||||
if (npRate == 'np_marginRate') {
|
||||
$("input[name='np_marginRate']:first").blur(function(e) {
|
||||
return checkFreeLine(e, npRate);
|
||||
});
|
||||
}
|
||||
else {
|
||||
if (npRate == 'np_markRate') {
|
||||
$("input[name='np_markRate']:first").blur(function(e) {
|
||||
return checkFreeLine(e, npRate);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function checkFreeLine(e, npRate)
|
||||
if (! empty($usemargins) && $user->rights->margins->creer)
|
||||
{
|
||||
var buying_price = $("input[name='buying_price']:first");
|
||||
var remise = $("input[name='remise_percent']:first");
|
||||
?>
|
||||
<script type="text/javascript">
|
||||
|
||||
var rate = $("input[name='"+npRate+"']:first");
|
||||
if (rate.val() == '')
|
||||
return true;
|
||||
if (! $.isNumeric(rate.val().replace(',','.')))
|
||||
{
|
||||
alert('<?php echo $langs->trans("rateMustBeNumeric"); ?>');
|
||||
e.stopPropagation();
|
||||
setTimeout(function () { rate.focus() }, 50);
|
||||
return false;
|
||||
}
|
||||
if (npRate == "np_markRate" && rate.val() >= 100)
|
||||
{
|
||||
alert('<?php echo $langs->trans("markRateShouldBeLesserThan100"); ?>');
|
||||
e.stopPropagation();
|
||||
setTimeout(function () { rate.focus() }, 50);
|
||||
return false;
|
||||
}
|
||||
jQuery(document).ready(function() {
|
||||
var npRate = null;
|
||||
<?php
|
||||
if (! empty($conf->global->DISPLAY_MARGIN_RATES)) { ?>
|
||||
npRate = "np_marginRate";
|
||||
<?php }
|
||||
elseif (! empty($conf->global->DISPLAY_MARK_RATES)) { ?>
|
||||
npRate = "np_markRate";
|
||||
<?php }
|
||||
?>
|
||||
|
||||
var np_price = 0;
|
||||
if (remise.val().replace(',','.') != 100)
|
||||
{
|
||||
if (npRate == "np_marginRate")
|
||||
np_price = ((buying_price.val().replace(',','.') * (1 + rate.val().replace(',','.') / 100)) / (1 - remise.val().replace(',','.') / 100));
|
||||
else {
|
||||
if (npRate == "np_markRate")
|
||||
np_price = ((buying_price.val().replace(',','.') / (1 - rate.val().replace(',','.') / 100)) / (1 - remise.val().replace(',','.') / 100));
|
||||
$("form#addproduct").submit(function(e) {
|
||||
if (npRate) return checkFreeLine(e, npRate);
|
||||
else return true;
|
||||
});
|
||||
if (npRate == 'np_marginRate') {
|
||||
$("input[name='np_marginRate']:first").blur(function(e) {
|
||||
return checkFreeLine(e, npRate);
|
||||
});
|
||||
}
|
||||
else {
|
||||
if (npRate == 'np_markRate') {
|
||||
$("input[name='np_markRate']:first").blur(function(e) {
|
||||
return checkFreeLine(e, npRate);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function checkFreeLine(e, npRate)
|
||||
{
|
||||
var buying_price = $("input[name='buying_price']:first");
|
||||
var remise = $("input[name='remise_percent']:first");
|
||||
|
||||
var rate = $("input[name='"+npRate+"']:first");
|
||||
if (rate.val() == '')
|
||||
return true;
|
||||
if (! $.isNumeric(rate.val().replace(',','.')))
|
||||
{
|
||||
alert('<?php echo $langs->trans("rateMustBeNumeric"); ?>');
|
||||
e.stopPropagation();
|
||||
setTimeout(function () { rate.focus() }, 50);
|
||||
return false;
|
||||
}
|
||||
if (npRate == "np_markRate" && rate.val() >= 100)
|
||||
{
|
||||
alert('<?php echo $langs->trans("markRateShouldBeLesserThan100"); ?>');
|
||||
e.stopPropagation();
|
||||
setTimeout(function () { rate.focus() }, 50);
|
||||
return false;
|
||||
}
|
||||
|
||||
var np_price = 0;
|
||||
if (remise.val().replace(',','.') != 100)
|
||||
{
|
||||
if (npRate == "np_marginRate")
|
||||
np_price = ((buying_price.val().replace(',','.') * (1 + rate.val().replace(',','.') / 100)) / (1 - remise.val().replace(',','.') / 100));
|
||||
else {
|
||||
if (npRate == "np_markRate")
|
||||
np_price = ((buying_price.val().replace(',','.') / (1 - rate.val().replace(',','.') / 100)) / (1 - remise.val().replace(',','.') / 100));
|
||||
}
|
||||
}
|
||||
$("input[name='price_ht']:first").val(formatFloat(np_price));
|
||||
|
||||
return true;
|
||||
}
|
||||
$("input[name='price_ht']:first").val(formatFloat(np_price));
|
||||
|
||||
return true;
|
||||
function roundFloat(num) {
|
||||
var main_max_dec_shown = <?php echo $conf->global->MAIN_MAX_DECIMALS_SHOWN; ?>;
|
||||
var main_rounding = <?php echo min($conf->global->MAIN_MAX_DECIMALS_UNIT,$conf->global->MAIN_MAX_DECIMALS_TOT); ?>;
|
||||
|
||||
var amount = num.toString().replace(',','.'); // should be useless
|
||||
var nbdec = 0;
|
||||
var rounding = main_rounding;
|
||||
var pos = amount.indexOf('.');
|
||||
var decpart = '';
|
||||
if (pos >= 0)
|
||||
decpart = amount.substr(pos+1).replace('/0+$/i',''); // Supprime les 0 de fin de partie decimale
|
||||
nbdec = decpart.length;
|
||||
if (nbdec > rounding)
|
||||
rounding = nbdec;
|
||||
// Si on depasse max
|
||||
if (rounding > main_max_dec_shown)
|
||||
{
|
||||
rounding = main_max_dec_shown;
|
||||
}
|
||||
//amount = parseFloat(amount) + (1 / Math.pow(100, rounding)); // to avoid floating-point errors
|
||||
return parseFloat(amount).toFixed(rounding);
|
||||
}
|
||||
|
||||
function formatFloat(num) {
|
||||
return roundFloat(num).replace('.', ',');
|
||||
}
|
||||
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
function roundFloat(num) {
|
||||
var main_max_dec_shown = <?php echo $conf->global->MAIN_MAX_DECIMALS_SHOWN; ?>;
|
||||
var main_rounding = <?php echo min($conf->global->MAIN_MAX_DECIMALS_UNIT,$conf->global->MAIN_MAX_DECIMALS_TOT); ?>;
|
||||
|
||||
var amount = num.toString().replace(',','.'); // should be useless
|
||||
var nbdec = 0;
|
||||
var rounding = main_rounding;
|
||||
var pos = amount.indexOf('.');
|
||||
var decpart = '';
|
||||
if (pos >= 0)
|
||||
decpart = amount.substr(pos+1).replace('/0+$/i',''); // Supprime les 0 de fin de partie decimale
|
||||
nbdec = decpart.length;
|
||||
if (nbdec > rounding)
|
||||
rounding = nbdec;
|
||||
// Si on depasse max
|
||||
if (rounding > main_max_dec_shown)
|
||||
{
|
||||
rounding = main_max_dec_shown;
|
||||
}
|
||||
//amount = parseFloat(amount) + (1 / Math.pow(100, rounding)); // to avoid floating-point errors
|
||||
return parseFloat(amount).toFixed(rounding);
|
||||
}
|
||||
|
||||
function formatFloat(num) {
|
||||
return roundFloat(num).replace('.', ',');
|
||||
}
|
||||
|
||||
</script>
|
||||
<?php } ?>
|
||||
?>
|
||||
<!-- END PHP TEMPLATE freeproductline_create.tpl.php -->
|
||||
|
||||
@ -117,7 +117,7 @@ if (! empty($hookmanager->resArray['options'])) {
|
||||
if (! empty($conf->dol_no_mouse_hover)) $moreparam.=(strpos($moreparam,'?')===false?'?':'&').'dol_no_mouse_hover='.$conf->dol_no_mouse_hover;
|
||||
if (! empty($conf->dol_use_jmobile)) $moreparam.=(strpos($moreparam,'?')===false?'?':'&').'dol_use_jmobile='.$conf->dol_use_jmobile;
|
||||
|
||||
print '<a style="color: #888888; font-size: 10px" href="'.$dol_url_root.'/index.php'.$moreparam.'">('.$langs->trans('BackToLoginPage').')</a>';
|
||||
print '<a class="alogin" href="'.$dol_url_root.'/index.php'.$moreparam.'">('.$langs->trans('BackToLoginPage').')</a>';
|
||||
?>
|
||||
</div>
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/* Copyright (C) 2010-2012 Regis Houssin <regis.houssin@capnetworks.com>
|
||||
* Copyright (C) 2010-2012 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2010-2013 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2012-2013 Christophe Battarel <christophe.battarel@altairis.fr>
|
||||
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
|
||||
*
|
||||
@ -17,7 +17,6 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*
|
||||
* Need to have following variables defined:
|
||||
* $conf
|
||||
* $langs
|
||||
@ -39,15 +38,6 @@ if (! empty($conf->margin->enabled) && ! empty($object->element) && in_array($ob
|
||||
<input type="hidden" name="mode" value="predefined">
|
||||
<input type="hidden" name="id" value="<?php echo $this->id; ?>">
|
||||
|
||||
<script type="text/javascript">
|
||||
jQuery(document).ready(function() {
|
||||
jQuery('#idprod').change(function() {
|
||||
if (jQuery('#idprod').val() > 0) jQuery('#np_desc').focus();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
<tr class="liste_titre nodrag nodrop">
|
||||
<td<?php echo (! empty($conf->global->MAIN_VIEW_LINE_NUMBER) ? ' colspan="4"' : ' colspan="3"'); ?>>
|
||||
<?php
|
||||
@ -59,50 +49,59 @@ jQuery(document).ready(function() {
|
||||
</td>
|
||||
<td align="right"><?php echo $langs->trans('Qty'); ?></td>
|
||||
<td align="right"><?php echo $langs->trans('ReductionShort'); ?></td>
|
||||
<?php
|
||||
$colspan = 4;
|
||||
if (! empty($usemargins))
|
||||
{
|
||||
?>
|
||||
<td align="right">
|
||||
<?php
|
||||
if ($conf->global->MARGIN_TYPE == "1")
|
||||
echo $langs->trans('BuyingPrice');
|
||||
else
|
||||
echo $langs->trans('CostPrice');
|
||||
|
||||
if ($user->rights->margins->creer)
|
||||
$colspan = 4;
|
||||
if (! empty($usemargins))
|
||||
{
|
||||
if(! empty($conf->global->DISPLAY_MARGIN_RATES))
|
||||
?>
|
||||
<td align="right">
|
||||
<?php
|
||||
if ($conf->global->MARGIN_TYPE == "1")
|
||||
echo $langs->trans('BuyingPrice');
|
||||
else
|
||||
echo $langs->trans('CostPrice');
|
||||
?>
|
||||
</td>
|
||||
<?php
|
||||
if ($user->rights->margins->creer)
|
||||
{
|
||||
echo '<td align="right">'.$langs->trans('MarginRate').'</td>';
|
||||
if(! empty($conf->global->DISPLAY_MARGIN_RATES))
|
||||
{
|
||||
echo '<td align="right">'.$langs->trans('MarginRate').'</td>';
|
||||
}
|
||||
if(! empty($conf->global->DISPLAY_MARK_RATES))
|
||||
{
|
||||
echo '<td align="right">'.$langs->trans('MarkRate').'</td>';
|
||||
}
|
||||
}
|
||||
if(! empty($conf->global->DISPLAY_MARK_RATES))
|
||||
else
|
||||
{
|
||||
echo '<td align="right">'.$langs->trans('MarkRate').'</td>';
|
||||
if (! empty($conf->global->DISPLAY_MARGIN_RATES)) $colspan++;
|
||||
if (! empty($conf->global->DISPLAY_MARK_RATES)) $colspan++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (! empty($conf->global->DISPLAY_MARGIN_RATES)) $colspan++;
|
||||
if (! empty($conf->global->DISPLAY_MARK_RATES)) $colspan++;
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<td colspan="<?php echo $colspan; ?>"> </td>
|
||||
</tr>
|
||||
|
||||
<tr <?php echo $bcnd[$var]; ?>>
|
||||
<?php
|
||||
if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER)) {
|
||||
$coldisplay=4; }
|
||||
$coldisplay=4; }
|
||||
else {
|
||||
$coldisplay=3; }
|
||||
$coldisplay=3; }
|
||||
?>
|
||||
|
||||
<td<?php echo (! empty($conf->global->MAIN_VIEW_LINE_NUMBER) ? ' colspan="4"' : ' colspan="3"'); ?>>
|
||||
|
||||
<script type="text/javascript">
|
||||
jQuery(document).ready(function() {
|
||||
jQuery('#idprod').change(function() {
|
||||
if (jQuery('#idprod').val() > 0) jQuery('#np_desc').focus();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<?php
|
||||
|
||||
echo '<span>';
|
||||
@ -128,8 +127,9 @@ else {
|
||||
$doleditor->Create();
|
||||
?>
|
||||
</td>
|
||||
|
||||
<td align="right"><input type="hidden" name="price_ht"><input type="text" size="2" name="qty" class="flat" value="1"></td>
|
||||
<td align="right" nowrap><input type="text" size="1" class="flat" name="remise_percent" value="<?php echo $buyer->remise_percent; ?>"><span class="hideonsmartphone">%</span></td>
|
||||
<td align="right" class="nowrap"><input type="text" size="1" class="flat" name="remise_percent" value="<?php echo $buyer->remise_percent; ?>"><span class="hideonsmartphone">%</span></td>
|
||||
<?php
|
||||
$colspan = 4;
|
||||
if (! empty($usemargins))
|
||||
@ -163,14 +163,15 @@ else {
|
||||
}
|
||||
?>
|
||||
<td align="center" valign="middle" colspan="<?php echo $colspan; ?>">
|
||||
<input type="submit" class="button" value="<?php echo $langs->trans("Add"); ?>" name="addline">
|
||||
<input type="submit" class="button" value="<?php echo $langs->trans('Add'); ?>" name="addline_predefined">
|
||||
</td>
|
||||
<?php
|
||||
//Line extrafield
|
||||
if (!empty($extrafieldsline)) {
|
||||
if ($this->table_element_line=='commandedet') {
|
||||
$newline = new OrderLine($this->db);
|
||||
}elseif ($this->table_element_line=='propaldet') {
|
||||
}
|
||||
elseif ($this->table_element_line=='propaldet') {
|
||||
$newline = new PropaleLigne($this->db);
|
||||
}
|
||||
elseif ($this->table_element_line=='facturedet') {
|
||||
@ -209,9 +210,9 @@ if (! empty($conf->service->enabled) && $dateSelector)
|
||||
else
|
||||
{
|
||||
echo $langs->trans('ServiceLimitedDuration').' '.$langs->trans('From').' ';
|
||||
echo $form->select_date('','date_start_predef',$conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE,$conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE,1,"addpredefinedproduct");
|
||||
echo $form->select_date('','date_start_predef',empty($conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE)?0:1,empty($conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE)?0:1,1,"addpredefinedproduct");
|
||||
echo ' '.$langs->trans('to').' ';
|
||||
echo $form->select_date('','date_end_predef',$conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE,$conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE,1,"addpredefinedproduct");
|
||||
echo $form->select_date('','date_end_predef',empty($conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE)?0:1,empty($conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE)?0:1,1,"addpredefinedproduct");
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
@ -223,40 +224,39 @@ if (! empty($conf->service->enabled) && $dateSelector)
|
||||
</form>
|
||||
|
||||
<?php
|
||||
if (! empty($usemargins))
|
||||
if (! empty($usemargins) && $user->rights->margins->creer)
|
||||
{
|
||||
?>
|
||||
<script type="text/javascript">
|
||||
<?php
|
||||
if ($user->rights->margins->creer)
|
||||
{
|
||||
?>
|
||||
var npRate = null;
|
||||
<?php
|
||||
if (! empty($conf->global->DISPLAY_MARGIN_RATES)) { ?>
|
||||
npRate = "np_marginRate";
|
||||
<?php }
|
||||
elseif (! empty($conf->global->DISPLAY_MARK_RATES)) { ?>
|
||||
npRate = "np_markRate";
|
||||
<?php }
|
||||
?>
|
||||
|
||||
$("form#addpredefinedproduct").submit(function(e) {
|
||||
if (npRate) return checkLine(e, npRate);
|
||||
else return true;
|
||||
});
|
||||
if (npRate == 'np_marginRate') {
|
||||
$("input[name='np_marginRate']:last").blur(function(e) {
|
||||
return checkLine(e, npRate);
|
||||
jQuery(document).ready(function() {
|
||||
var npRate = null;
|
||||
<?php
|
||||
if (! empty($conf->global->DISPLAY_MARGIN_RATES)) { ?>
|
||||
npRate = "np_marginRate";
|
||||
<?php }
|
||||
elseif (! empty($conf->global->DISPLAY_MARK_RATES)) { ?>
|
||||
npRate = "np_markRate";
|
||||
<?php }
|
||||
?>
|
||||
|
||||
$("form#addpredefinedproduct").submit(function(e) {
|
||||
if (npRate) return checkLine(e, npRate);
|
||||
else return true;
|
||||
});
|
||||
}
|
||||
else {
|
||||
if (npRate == 'np_markRate') {
|
||||
$("input[name='np_markRate']:last").blur(function(e) {
|
||||
if (npRate == 'np_marginRate') {
|
||||
$("input[name='np_marginRate']:last").blur(function(e) {
|
||||
return checkLine(e, npRate);
|
||||
});
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (npRate == 'np_markRate') {
|
||||
$("input[name='np_markRate']:last").blur(function(e) {
|
||||
return checkLine(e, npRate);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function checkLine(e, npRate)
|
||||
{
|
||||
@ -295,6 +295,7 @@ if (! empty($usemargins))
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function roundFloat(num) {
|
||||
var main_max_dec_shown = <?php echo $conf->global->MAIN_MAX_DECIMALS_SHOWN; ?>;
|
||||
var main_rounding = <?php echo min($conf->global->MAIN_MAX_DECIMALS_UNIT,$conf->global->MAIN_MAX_DECIMALS_TOT); ?>;
|
||||
@ -321,40 +322,43 @@ if (! empty($usemargins))
|
||||
function formatFloat(num) {
|
||||
return roundFloat(num).replace('.', ',');
|
||||
}
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
$("#idprod").change(function() {
|
||||
$("#fournprice options").remove();
|
||||
$("#fournprice").hide();
|
||||
$("#buying_price").val("").show();
|
||||
$.post('<?php echo DOL_URL_ROOT; ?>/fourn/ajax/getSupplierPrices.php', {'idprod': $(this).val()}, function(data) {
|
||||
if (data && data.length > 0) {
|
||||
var options = '';
|
||||
var i = 0;
|
||||
$(data).each(function() {
|
||||
i++;
|
||||
options += '<option value="'+this.id+'" price="'+this.price+'"';
|
||||
if (i == 1) {
|
||||
options += ' selected';
|
||||
$("#buying_price").val(this.price);
|
||||
}
|
||||
options += '>'+this.label+'</option>';
|
||||
});
|
||||
options += '<option value=""><?php echo $langs->trans("InputPrice"); ?></option>';
|
||||
$("#buying_price").hide();
|
||||
$("#fournprice").html(options).show();
|
||||
$("#fournprice").change(function() {
|
||||
var selval = $(this).find('option:selected').attr("price");
|
||||
if (selval)
|
||||
$("#buying_price").val(selval).hide();
|
||||
else
|
||||
$('#buying_price').show();
|
||||
});
|
||||
}
|
||||
},
|
||||
'json');
|
||||
|
||||
jQuery(document).ready(function() {
|
||||
$("#idprod").change(function()
|
||||
{
|
||||
$("#fournprice options").remove();
|
||||
$("#fournprice").hide();
|
||||
$("#buying_price").val("").show();
|
||||
$.post('<?php echo DOL_URL_ROOT; ?>/fourn/ajax/getSupplierPrices.php', { 'idprod': $(this).val() }, function(data) {
|
||||
if (data && data.length > 0)
|
||||
{
|
||||
var options = '';
|
||||
var i = 0;
|
||||
$(data).each(function() {
|
||||
i++;
|
||||
options += '<option value="'+this.id+'" price="'+this.price+'"';
|
||||
if (i == 1) {
|
||||
options += ' selected';
|
||||
$("#buying_price").val(this.price);
|
||||
}
|
||||
options += '>'+this.label+'</option>';
|
||||
});
|
||||
options += '<option value=""><?php echo $langs->trans("InputPrice"); ?></option>';
|
||||
$("#buying_price").hide();
|
||||
$("#fournprice").html(options).show();
|
||||
$("#fournprice").change(function() {
|
||||
var selval = $(this).find('option:selected').attr("price");
|
||||
if (selval)
|
||||
$("#buying_price").val(selval).hide();
|
||||
else
|
||||
$('#buying_price').show();
|
||||
});
|
||||
}
|
||||
},
|
||||
'json');
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -419,9 +419,10 @@ class ProductFournisseur extends Product
|
||||
* Load properties for minimum price
|
||||
*
|
||||
* @param int $prodid Product id
|
||||
* @param int $qty Minimum quantity
|
||||
* @return int <0 if KO, >0 if OK
|
||||
*/
|
||||
function find_min_price_product_fournisseur($prodid)
|
||||
function find_min_price_product_fournisseur($prodid, $qty=0)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
@ -444,6 +445,7 @@ class ProductFournisseur extends Product
|
||||
$sql.= " WHERE s.entity IN (".getEntity('societe', 1).")";
|
||||
$sql.= " AND pfp.fk_product = ".$prodid;
|
||||
$sql.= " AND pfp.fk_soc = s.rowid";
|
||||
if ($qty > 0) $sql.= " AND pfp.quantity <= ".$qty;
|
||||
$sql.= " ORDER BY pfp.unitprice";
|
||||
$sql.= $this->db->plimit(1);
|
||||
|
||||
@ -496,16 +498,18 @@ class ProductFournisseur extends Product
|
||||
/**
|
||||
* Display price of product
|
||||
*
|
||||
* @return string String with supplier price
|
||||
* @param int $showunitprice Show "Unit price" into output string
|
||||
* @param int $showsuptitle Show "Supplier" into output string
|
||||
* @return string String with supplier price
|
||||
*/
|
||||
function display_price_product_fournisseur()
|
||||
function display_price_product_fournisseur($showunitprice=1,$showsuptitle=1)
|
||||
{
|
||||
global $langs;
|
||||
$langs->load("suppliers");
|
||||
$out=price($this->fourn_unitprice).' '.$langs->trans("HT").' ('.$langs->trans("Supplier").': '.$this->getSocNomUrl(1).' / '.$langs->trans("SupplierRef").': '.$this->fourn_ref.')';
|
||||
$out=($showunitprice?price($this->fourn_unitprice).' '.$langs->trans("HT").' (':'').($showsuptitle?$langs->trans("Supplier").': ':'').$this->getSocNomUrl(1).' / '.$langs->trans("SupplierRef").': '.$this->fourn_ref.($showunitprice?')':'');
|
||||
return $out;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
?>
|
||||
@ -81,6 +81,8 @@ if ($_POST["action"] == 'dispatch' && $user->rights->fournisseur->commande->rece
|
||||
else
|
||||
{
|
||||
dol_syslog('No dispatch for line '.$key.' as no warehouse choosed');
|
||||
$text = $langs->transnoentities('Warehouse').', '.$langs->transnoentities('Line').'' .($reg[1]-1);
|
||||
setEventMessage($langs->trans('ErrorFieldRequired',$text), 'errors');
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -190,8 +192,8 @@ if ($id > 0 || ! empty($ref))
|
||||
|
||||
print "</table>";
|
||||
|
||||
if ($mesg) print $mesg;
|
||||
else print '<br>';
|
||||
//if ($mesg) print $mesg;
|
||||
print '<br>';
|
||||
|
||||
|
||||
$disabled=1;
|
||||
@ -271,41 +273,47 @@ if ($id > 0 || ! empty($ref))
|
||||
}
|
||||
else
|
||||
{
|
||||
$nbproduct++;
|
||||
|
||||
$remaintodispatch=($objp->qty - $products_dispatched[$objp->fk_product]); // Calculation of dispatched
|
||||
if ($remaintodispatch < 0) $remaintodispatch=0;
|
||||
|
||||
$var=!$var;
|
||||
print "<tr ".$bc[$var].">";
|
||||
print '<td>';
|
||||
print '<a href="'.DOL_URL_ROOT.'/product/fournisseurs.php?id='.$objp->fk_product.'">'.img_object($langs->trans("ShowProduct"),'product').' '.$objp->ref.'</a>';
|
||||
print ' - '.$objp->label;
|
||||
// To show detail cref and description value, we must make calculation by cref
|
||||
//print ($objp->cref?' ('.$objp->cref.')':'');
|
||||
//if ($objp->description) print '<br>'.nl2br($objp->description);
|
||||
print '<input name="product_'.$i.'" type="hidden" value="'.$objp->fk_product.'">';
|
||||
print '<input name="pu_'.$i.'" type="hidden" value="'.$objp->subprice.'">';
|
||||
print "</td>\n";
|
||||
|
||||
print '<td align="right">'.$objp->qty.'</td>';
|
||||
print '<td align="right">'.$products_dispatched[$objp->fk_product].'</td>';
|
||||
|
||||
// Dispatch
|
||||
print '<td align="right"><input name="qty_'.$i.'" type="text" size="8" value="'.($remaintodispatch).'"></td>';
|
||||
|
||||
// Warehouse
|
||||
print '<td align="right">';
|
||||
if (count($listwarehouses))
|
||||
if ($remaintodispatch)
|
||||
{
|
||||
print $form->selectarray("entrepot_".$i, $listwarehouses, '', $disabled, 0, 0, '', 0, 0, $disabled);
|
||||
$nbproduct++;
|
||||
|
||||
$var=!$var;
|
||||
print "<tr ".$bc[$var].">";
|
||||
print '<td>';
|
||||
print '<a href="'.DOL_URL_ROOT.'/product/fournisseurs.php?id='.$objp->fk_product.'">'.img_object($langs->trans("ShowProduct"),'product').' '.$objp->ref.'</a>';
|
||||
print ' - '.$objp->label;
|
||||
// To show detail cref and description value, we must make calculation by cref
|
||||
//print ($objp->cref?' ('.$objp->cref.')':'');
|
||||
//if ($objp->description) print '<br>'.nl2br($objp->description);
|
||||
print '<input name="product_'.$i.'" type="hidden" value="'.$objp->fk_product.'">';
|
||||
print '<input name="pu_'.$i.'" type="hidden" value="'.$objp->subprice.'">';
|
||||
print "</td>\n";
|
||||
|
||||
print '<td align="right">'.$objp->qty.'</td>';
|
||||
print '<td align="right">'.$products_dispatched[$objp->fk_product].'</td>';
|
||||
|
||||
// Dispatch
|
||||
print '<td align="right"><input name="qty_'.$i.'" type="text" size="8" value="'.($remaintodispatch).'"></td>';
|
||||
|
||||
// Warehouse
|
||||
print '<td align="right">';
|
||||
if (count($listwarehouses)>1)
|
||||
{
|
||||
print $form->selectarray("entrepot_".$i, $listwarehouses, '', 1, 0, 0, '', 0, 0, $disabled);
|
||||
}
|
||||
elseif (count($listwarehouses)==1)
|
||||
{
|
||||
print $form->selectarray("entrepot_".$i, $listwarehouses, '', 0, 0, 0, '', 0, 0, $disabled);
|
||||
}
|
||||
else
|
||||
{
|
||||
print $langs->trans("NoWarehouseDefined");
|
||||
}
|
||||
print "</td>\n";
|
||||
print "</tr>\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
print $langs->trans("NoWarehouseDefined");
|
||||
}
|
||||
print "</td>\n";
|
||||
print "</tr>\n";
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
@ -338,6 +346,8 @@ if ($id > 0 || ! empty($ref))
|
||||
|
||||
print '</form>';
|
||||
}
|
||||
|
||||
dol_fiche_end();
|
||||
|
||||
// List of already dispatching
|
||||
$sql = "SELECT p.ref, p.label,";
|
||||
@ -359,7 +369,9 @@ if ($id > 0 || ! empty($ref))
|
||||
if ($num > 0)
|
||||
{
|
||||
print "<br/>\n";
|
||||
|
||||
|
||||
print_titre($langs->trans("ReceivingForSameOrder"));
|
||||
|
||||
print '<table class="noborder" width="100%">';
|
||||
|
||||
print '<tr class="liste_titre">';
|
||||
@ -399,19 +411,6 @@ if ($id > 0 || ! empty($ref))
|
||||
{
|
||||
dol_print_error($db);
|
||||
}
|
||||
|
||||
dol_fiche_end();
|
||||
|
||||
|
||||
/**
|
||||
* Boutons actions
|
||||
*/
|
||||
if ($user->societe_id == 0 && $commande->statut < 3 && ($_GET["action"] <> 'valid' || $_GET['action'] == 'builddoc'))
|
||||
{
|
||||
//print '<div class="tabsAction">';
|
||||
|
||||
//print "</div>";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -108,4 +108,5 @@ NbOfProductBeforePeriod=Quantity of product %s in stock before selected period (
|
||||
NbOfProductAfterPeriod=Quantity of product %s in stock after selected period (> %s)
|
||||
MassStockMovement=Mass stock movement
|
||||
SelectProductInAndOutWareHouse=Select a product, a quantity, a source warehouse and a target warehouse, then click "%s". Once this is done for all required movements, click onto "%s".
|
||||
RecordMovement=Record transfert
|
||||
RecordMovement=Record transfert
|
||||
ReceivingForSameOrder=Receivings for this order
|
||||
@ -47,7 +47,7 @@ PMPValue=Valor (PMP)
|
||||
PMPValueShort=PMP
|
||||
EnhancedValueOfWarehouses=Valor de stocks
|
||||
UserWarehouseAutoCreate=Crear automáticamente existencias/almacén propio del usuario en la creación del usuario
|
||||
QtyDispatched=Cantidad desglosada
|
||||
QtyDispatched=Cantidad recibida
|
||||
OrderDispatch=Recepción de stocks
|
||||
RuleForStockManagementDecrease=Regla de gestión de decrementos de stock
|
||||
RuleForStockManagementIncrease=Regla de gestión de incrementos de stock
|
||||
@ -61,7 +61,7 @@ ReStockOnDeleteInvoice=Incrementa los stocks físicos en la eliminación de fact
|
||||
OrderStatusNotReadyToDispatch=El pedido aún no está o no tiene un estado que permita un desglose de stock.
|
||||
StockDiffPhysicTeoric=Motivo de la diferencia entre valores físicos y teóricos
|
||||
NoPredefinedProductToDispatch=No hay productos predefinidos en este objeto. Por lo tanto no se puede realizar un desglose de stock.
|
||||
DispatchVerb=Desglosar
|
||||
DispatchVerb=Validar recepción
|
||||
StockLimitShort=Límite
|
||||
StockLimit=Stock límite para alertas
|
||||
PhysicalStock=Stock físico
|
||||
@ -96,16 +96,17 @@ Replenishment=Reaprovisionamiento
|
||||
ReplenishmentOrders=Ordenes de reaprovisionamiento
|
||||
UseVirtualStock=Usar stock virtual en lugar de stock físico
|
||||
RuleForStockReplenishment=Regla para el reaprovisionamiento de stock
|
||||
SelectProductWithNotNullQty=Seleccione al menos un proveedor y un producto con una cantidad válida
|
||||
AlertOnly= Sólo alertas
|
||||
WarehouseForStockDecrease=El almacén <b>%s</b> será utilizado para el decremento de stock
|
||||
WarehouseForStockIncrease=El almacén <b>%s</b> será utilizado para el incremento de stock
|
||||
SelectProductWithNotNullQty=Seleccie al menos un producto con una cantidad distinta de cero y un proveedor
|
||||
AlertOnly=Sólo alertas
|
||||
WarehouseForStockDecrease=Para el decremento de stock se usará el almacén <b>%s</b>
|
||||
WarehouseForStockIncrease=Para el incremento de stock se usará el almacén <b>%s</b>
|
||||
ForThisWarehouse=Para este almacén
|
||||
ReplenishmentStatusDesc=Esta es la lista de todos los productos con un stock físico menor que el stock deseado (o un valor de alerta si el checkbox "sólo alertas" está marcado) y que sugiere crear pedidos de proveedor para rellenar la diferencia.
|
||||
ReplenishmentOrdersDesc=Esta es la lista de todos los pedidos de proveedor abiertos
|
||||
Replenishments=Reaprovisionamientos
|
||||
NbOfProductBeforePeriod=Cantidad de producto %s en stock antes del periodo seleccionado (< %s)
|
||||
NbOfProductAfterPeriod=Cantidad de producto %s en stock después del periodo seleccionado (< %s)
|
||||
MassStockMovement=Movimiento de stock masivo
|
||||
SelectProductInAndOutWareHouse=Seleccione un producto, una cantidad, un almacén de origen y un almacén de destino, después pulse "%s". Una vez esto sea realizado para todos los movimientos requeridos, pulse en "%s".
|
||||
ReplenishmentStatusDesc=Este listado le permite ver productos con un stock inferior a la cantidad mínima deseada (o valor de alerta si el checkbok "Sólo alertas" está activado) y le sugiere crear los pedidos a proveedores para completar la diferencia.
|
||||
ReplenishmentOrdersDesc=Este es el listado de pedidos a proveedores en curso
|
||||
Replenishments=Reaprovisionamiento
|
||||
NbOfProductBeforePeriod=Cantidad del producto %s en stock antes del periodo seleccionado (< %s)
|
||||
NbOfProductAfterPeriod=Cantidad del producto %s en stock después del periodo seleccionado (> %s)
|
||||
MassStockMovement=Movimientos de stock en masa
|
||||
SelectProductInAndOutWareHouse=Selecccione un producto, una cantidad, un almacén origen y un almacén destino, seguidamente haga clic "%s". Una vez seleccionados todos los movimientos, haga clic en "%s".
|
||||
RecordMovement=Registrar transferencias
|
||||
ReceivingForSameOrder=Recepciones de este pedido
|
||||
@ -109,3 +109,4 @@ NbOfProductAfterPeriod=Quantité du produit <b>%s</b> en stock après la périod
|
||||
MassStockMovement=Mouvement de stock en masse
|
||||
SelectProductInAndOutWareHouse=Sélectionner un produit, une quantité à transférer, un entrepôt source et destination et cliquer sur "%s". Une fois tous les mouvements choisis, cliquer sur "%s".
|
||||
RecordMovement=Enregistrer transferts
|
||||
ReceivingForSameOrder=Réceptions pour cette commande
|
||||
@ -2194,9 +2194,9 @@ class Product extends CommonObject
|
||||
|
||||
$product = new Product($this->db);
|
||||
//var_dump($prod);
|
||||
foreach($prod as $id_product => $desc_pere) // nom_pere is 0 or id of sub_product
|
||||
foreach($prod as $id_product => $desc_pere) // $id_product is 0 (there is no mode sub_product) or an id of a sub_product
|
||||
{
|
||||
if (is_array($desc_pere)) // If this parent desc is an array, this is an array of childs
|
||||
if (is_array($desc_pere)) // If desc_pere is an array, this means it's a child
|
||||
{
|
||||
$id=(! empty($desc_pere[0]) ? $desc_pere[0] :'');
|
||||
$nb=(! empty($desc_pere[1]) ? $desc_pere[1] :'');
|
||||
@ -2205,20 +2205,23 @@ class Product extends CommonObject
|
||||
if ($multiply < 1) $multiply=1;
|
||||
|
||||
//print "XXX We add id=".$id." - label=".$label." - nb=".$nb." - multiply=".$multiply." fullpath=".$compl_path.$label."\n";
|
||||
$this->fetch($id);
|
||||
$this->load_stock();
|
||||
$this->fetch($id); // Load product
|
||||
$this->load_stock(); // Load stock
|
||||
$this->res[]= array(
|
||||
'id'=>$id, // Id product
|
||||
'ref'=>$this->ref, // Ref product
|
||||
'nb'=>$nb, // Nb of units that compose parent product
|
||||
'nb_total'=>$nb*$multiply, // Nb of units for all nb of product
|
||||
'stock'=>$this->stock_warehouse[1]->real, // Stock
|
||||
'stock'=>$this->stock_reel, // Stock
|
||||
'stock_alert'=>$this->seuil_stock_alerte, // Stock alert
|
||||
'fullpath' => $compl_path.$label, // Label
|
||||
'label'=>$label,
|
||||
'fullpath'=>$compl_path.$label, // Label
|
||||
'type'=>$type, // Nb of units that compose parent product
|
||||
'desiredstock' => $this->desiredstock
|
||||
'desiredstock'=>$this->desiredstock,
|
||||
'level'=>$level
|
||||
);
|
||||
|
||||
// Recursive call if child is an array
|
||||
// Recursive call if there is childs to child
|
||||
if (is_array($desc_pere['childs']))
|
||||
{
|
||||
//print 'YYY We go down for '.$desc_pere[3]." -> \n";
|
||||
|
||||
@ -53,10 +53,11 @@ $mesg = '';
|
||||
|
||||
$product = new Product($db);
|
||||
$productid=0;
|
||||
if ($id || $ref)
|
||||
if ($id > 0 || ! empty($ref))
|
||||
{
|
||||
$result = $product->fetch($id,$ref);
|
||||
$productid=$product->id;
|
||||
$id=$product->id;
|
||||
}
|
||||
|
||||
|
||||
@ -119,6 +120,10 @@ if ($cancel == $langs->trans("Cancel"))
|
||||
* View
|
||||
*/
|
||||
|
||||
$product_fourn = new ProductFournisseur($db);
|
||||
$productstatic = new Product($db);
|
||||
$form = new Form($db);
|
||||
|
||||
// action recherche des produits par mot-cle et/ou par categorie
|
||||
if ($action == 'search')
|
||||
{
|
||||
@ -153,8 +158,6 @@ if ($action == 'search')
|
||||
}
|
||||
//print $sql;
|
||||
|
||||
$productstatic = new Product($db);
|
||||
$form = new Form($db);
|
||||
|
||||
llxHeader("","",$langs->trans("CardProduct".$product->type));
|
||||
|
||||
@ -285,9 +288,36 @@ if ($id > 0 || ! empty($ref))
|
||||
print '<tr><td>'.$langs->trans("Label").'</td><td>'.$product->libelle.'</td>';
|
||||
print '</tr>';
|
||||
|
||||
if (empty($conf->global->PRODUIT_MULTIPRICES))
|
||||
{
|
||||
// Price
|
||||
print '<tr><td>'.$langs->trans("SellingPrice").'</td><td>';
|
||||
if ($object->price_base_type == 'TTC')
|
||||
{
|
||||
print price($object->price_ttc).' '.$langs->trans($object->price_base_type);
|
||||
}
|
||||
else
|
||||
{
|
||||
print price($object->price).' '.$langs->trans($object->price_base_type);
|
||||
}
|
||||
print '</td></tr>';
|
||||
|
||||
// Price minimum
|
||||
print '<tr><td>'.$langs->trans("MinPrice").'</td><td>';
|
||||
if ($object->price_base_type == 'TTC')
|
||||
{
|
||||
print price($object->price_min_ttc).' '.$langs->trans($object->price_base_type);
|
||||
}
|
||||
else
|
||||
{
|
||||
print price($object->price_min).' '.$langs->trans($object->price_base_type);
|
||||
}
|
||||
print '</td></tr>';
|
||||
}
|
||||
|
||||
// Number of subproducts
|
||||
$prodsfather = $product->getFather(); //Parent Products
|
||||
$product->get_sousproduits_arbo();
|
||||
$product->get_sousproduits_arbo(); // Defined $product->sousprod
|
||||
$prods_arbo=$product->get_arbo_each_prod();
|
||||
$nbofsubproducts=count($prods_arbo);
|
||||
print '<tr><td>'.$langs->trans("AssociatedProductsNumber").'</td><td>';
|
||||
@ -296,26 +326,55 @@ if ($id > 0 || ! empty($ref))
|
||||
print '</tr>';
|
||||
|
||||
// List of subproducts
|
||||
if(count($prods_arbo) > 0)
|
||||
if (count($prods_arbo) > 0)
|
||||
{
|
||||
print '<tr><td colspan="2">';
|
||||
print '<b>'.$langs->trans("ProductAssociationList").'</b><br>';
|
||||
print '<table class="nobordernopadding">';
|
||||
print $langs->trans("ProductAssociationList").'<br>';
|
||||
print '<table class="nobordernopadding centpercent">';
|
||||
foreach($prods_arbo as $value)
|
||||
{
|
||||
$productstatic->id=$value['id'];
|
||||
$productstatic->type=$value['type'];
|
||||
$productstatic->ref=$value['fullpath'];
|
||||
if (! empty($conf->stock->enabled)) $productstatic->load_stock();
|
||||
//var_dump($value);
|
||||
//print '<pre>'.$productstatic->ref.'</pre>';
|
||||
//print $productstatic->getNomUrl(1).'<br>';
|
||||
//print $value[0]; // This contains a tr line.
|
||||
//var_dump($value);
|
||||
print '<tr>';
|
||||
print '<td>'.$productstatic->getNomUrl(1,'composition').' ('.$value['nb'].')    </td>';
|
||||
if (! empty($conf->stock->enabled)) print '<td>'.$langs->trans("Stock").' : <b>'.$productstatic->stock_reel.'</b></td>';
|
||||
if ($value['level'] <= 1)
|
||||
{
|
||||
$productstatic->ref=$value['fullpath'];
|
||||
print '<td>'.$productstatic->getNomUrl(1,'composition').' ('.$value['nb'].') </td>';
|
||||
print '<td align="right">';
|
||||
if ($product_fourn->find_min_price_product_fournisseur($productstatic->id, $value['nb']) > 0)
|
||||
{
|
||||
print $langs->trans("BuyingPriceMinShort").': ';
|
||||
if ($product_fourn->product_fourn_price_id > 0) print $product_fourn->display_price_product_fournisseur(0,0);
|
||||
else print $langs->trans("NotDefined");
|
||||
}
|
||||
print '</td>';
|
||||
$totalline=price2num($value['nb'] * $product_fourn->fourn_unitprice, 'MT');
|
||||
$total+=$totalline;
|
||||
print '<td align="right">'.price($totalline,'','',0,0,-1,$conf->currency).'</td>';
|
||||
if (! empty($conf->stock->enabled)) print '<td align="right">'.$langs->trans("Stock").': '.$value['stock'].'</td>'; // Real stock
|
||||
}
|
||||
else {
|
||||
$productstatic->ref=$value['label'];
|
||||
print '<td>';
|
||||
for ($i=0; $i < $value['level']; $i++)
|
||||
{
|
||||
print ' ';
|
||||
}
|
||||
print $productstatic->getNomUrl(1,'composition').' ('.$value['nb'].') </td>';
|
||||
print '<td><td>';
|
||||
print '<td><td>';
|
||||
if (! empty($conf->stock->enabled)) print '<td align="right"></td>'; // Real stock
|
||||
}
|
||||
print '</tr>';
|
||||
}
|
||||
print '<tr>';
|
||||
print '<td>'.$langs->trans("BuyingPriceMin").': '.price($total,'','',0,0,-1,$conf->currency).'</td>';
|
||||
print '<td></td>';
|
||||
if (! empty($conf->stock->enabled)) print '<td class="liste_total" align="right"> </td>';
|
||||
print '</tr>';
|
||||
print '</table>';
|
||||
print '</td></tr>';
|
||||
}
|
||||
@ -328,7 +387,7 @@ if ($id > 0 || ! empty($ref))
|
||||
if (count($prodsfather) > 0)
|
||||
{
|
||||
print '<tr><td colspan="2">';
|
||||
print '<b>'.$langs->trans("ProductParentList").'</b><br>';
|
||||
print $langs->trans("ProductParentList").'<br>';
|
||||
print '<table class="nobordernopadding">';
|
||||
foreach($prodsfather as $value)
|
||||
{
|
||||
@ -393,7 +452,7 @@ if ($id > 0 || ! empty($ref))
|
||||
print '<th class="liste_titre">'.$langs->trans("Ref").'</td>';
|
||||
print '<th class="liste_titre">'.$langs->trans("Label").'</td>';
|
||||
print '<th class="liste_titre" align="center">'.$langs->trans("AddDel").'</td>';
|
||||
print '<th class="liste_titre" align="right">'.$langs->trans("Quantity").'</td>';
|
||||
print '<th class="liste_titre" align="right">'.$langs->trans("Qty").'</td>';
|
||||
print '</tr>';
|
||||
if ($resql)
|
||||
{
|
||||
@ -457,7 +516,7 @@ if ($id > 0 || ! empty($ref))
|
||||
}
|
||||
print '<td align="center"><input type="hidden" name="prod_id_'.$i.'" value="'.$objp->rowid.'">';
|
||||
print '<input type="checkbox" '.$addchecked.'name="prod_id_chk'.$i.'" value="'.$objp->rowid.'"></td>';
|
||||
print '<td align="right"><input type="text" size="3" name="prod_qty_'.$i.'" value="'.$qty.'"></td>';
|
||||
print '<td align="right"><input type="text" size="2" name="prod_qty_'.$i.'" value="'.$qty.'"></td>';
|
||||
print '</tr>';
|
||||
}
|
||||
$i++;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user