Fix: add ht and ttc fields

This commit is contained in:
Regis Houssin 2012-08-18 19:05:59 +02:00
parent d72835bb93
commit b4e324a515
4 changed files with 83 additions and 34 deletions

View File

@ -680,6 +680,24 @@ else if ($action == "addline" && $user->rights->propale->creer)
$price_base_type = $prod->price_base_type; $price_base_type = $prod->price_base_type;
} }
// Update if prices fields are defined
if (GETPOST('dp_price_ht') || GETPOST('dp_price_ttc'))
{
$price_ht=price2num(GETPOST('dp_price_ht'), 'MU');
$price_ttc=price2num(GETPOST('dp_price_ttc'), 'MU');
if ($price_base_type == 'TTC' && $price_ttc != $pu_ttc)
{
$pu_ttc = $price_ttc;
$pu_ht = price2num($price_ttc / (1 + ($prod->tva_tx / 100)),'MU');
}
else if ($price_base_type != 'TTC' && $price_ht != $pu_ht)
{
$pu_ht = $price_ht;
$pu_ttc = price2num($price_ht * (1 + ($prod->tva_tx / 100)),'MU');
}
}
// 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 ($tva_tx != $prod->tva_tx) if ($tva_tx != $prod->tva_tx)
@ -714,19 +732,23 @@ else if ($action == "addline" && $user->rights->propale->creer)
$desc = $prod->description; $desc = $prod->description;
} }
$desc.= ($desc && GETPOST('np_desc')) ? ((dol_textishtml($desc) || dol_textishtml(GETPOST('np_desc')))?"<br />\n":"\n") : ""; $desc.= ($desc && GETPOST('dp_desc')) ? ((dol_textishtml($desc) || dol_textishtml(GETPOST('dp_desc')))?"<br />\n":"\n") : "";
$desc.= GETPOST('np_desc'); $desc.= GETPOST('dp_desc');
$type = $prod->type; $type = $prod->type;
$fournprice=(GETPOST('dp_fournprice')?GETPOST('dp_fournprice'):'');
$buyingprice=(GETPOST('dp_buying_price')?GETPOST('dp_buying_price'):'');
} }
else else
{ {
$pu_ht=GETPOST('np_price'); $pu_ht=GETPOST('np_price');
$tva_tx=str_replace('*','',GETPOST('np_tva_tx')); $tva_tx=str_replace('*','',GETPOST('np_tva_tx'));
$tva_npr=preg_match('/\*/',GETPOST('np_tva_tx'))?1:0; $tva_npr=preg_match('/\*/',GETPOST('np_tva_tx'))?1:0;
$desc=GETPOST('dp_desc'); $desc=GETPOST('np_desc');
$type=GETPOST('type'); $type=GETPOST('type');
$localtax1_tx=get_localtax($tva_tx,1,$object->client); $localtax1_tx=get_localtax($tva_tx,1,$object->client);
$localtax2_tx=get_localtax($tva_tx,2,$object->client); $localtax2_tx=get_localtax($tva_tx,2,$object->client);
$fournprice=(GETPOST('np_fournprice')?GETPOST('np_fournprice'):'');
$buyingprice=(GETPOST('np_buying_price')?GETPOST('np_buying_price'):'');
} }
$info_bits=0; $info_bits=0;
@ -757,8 +779,8 @@ else if ($action == "addline" && $user->rights->propale->creer)
-1, -1,
0, 0,
GETPOST('fk_parent_line'), GETPOST('fk_parent_line'),
GETPOST('np_fournprice'), $fournprice,
GETPOST('np_buying_price') $buyingprice
); );
if ($result > 0) if ($result > 0)
@ -781,11 +803,17 @@ else if ($action == "addline" && $user->rights->propale->creer)
unset($_POST['qty']); unset($_POST['qty']);
unset($_POST['type']); unset($_POST['type']);
unset($_POST['np_price']); unset($_POST['np_price']);
unset($_POST['dp_desc']);
unset($_POST['np_tva_tx']); unset($_POST['np_tva_tx']);
unset($_POST['np_desc']); unset($_POST['np_desc']);
unset($_POST['np_fournprice']);
unset($_POST['np_buying_price']); unset($_POST['np_buying_price']);
unset($_POST['dp_desc']);
unset($_POST['dp_price']);
unset($_POST['dp_fournprice']);
unset($_POST['dp_buying_price']);
} }
else else
{ {
@ -914,8 +942,8 @@ else if ($action == 'remove_file' && $user->rights->propale->creer)
$upload_dir = $conf->propal->dir_output; $upload_dir = $conf->propal->dir_output;
$file = $upload_dir . '/' . GETPOST('file'); $file = $upload_dir . '/' . GETPOST('file');
$ret=dol_delete_file($file,0,0,0,$object); $ret=dol_delete_file($file,0,0,0,$object);
if ($ret) setEventMessage($langs->trans("FileWasRemoved", GETPOST('urlfile'))); if ($ret) setEventMessage($langs->trans("FileWasRemoved", GETPOST('file')));
else setEventMessage($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), 'errors'); else setEventMessage($langs->trans("ErrorFailToDeleteFile", GETPOST('file')), 'errors');
} }
} }

View File

@ -1080,15 +1080,16 @@ class Form
* @param int $finished 2=all, 1=finished, 0=raw material * @param int $finished 2=all, 1=finished, 0=raw material
* @param string $selected_input_value Value of preselected input text (with ajax) * @param string $selected_input_value Value of preselected input text (with ajax)
* @param int $hidelabel Hide label * @param int $hidelabel Hide label
* @param array $ajaxoptions Options for ajax_autocompleter
* @return void * @return void
*/ */
function select_produits($selected='',$htmlname='productid',$filtertype='',$limit=20,$price_level=0,$status=1,$finished=2,$selected_input_value='',$hidelabel=0) function select_produits($selected='', $htmlname='productid', $filtertype='', $limit=20, $price_level=0, $status=1, $finished=2, $selected_input_value='', $hidelabel=0, $ajaxoptions=array())
{ {
global $langs,$conf; global $langs,$conf;
$price_level = (! empty($price_level) ? $price_level : 0); $price_level = (! empty($price_level) ? $price_level : 0);
if ($conf->global->PRODUIT_USE_SEARCH_TO_SELECT) if (! empty($conf->use_javascript_ajax) && ! empty($conf->global->PRODUIT_USE_SEARCH_TO_SELECT))
{ {
if ($selected && empty($selected_input_value)) if ($selected && empty($selected_input_value))
{ {
@ -1098,7 +1099,8 @@ class Form
$selected_input_value=$product->ref; $selected_input_value=$product->ref;
} }
// mode=1 means customers products // mode=1 means customers products
print ajax_autocompleter($selected, $htmlname, DOL_URL_ROOT.'/product/ajax/products.php', 'htmlname='.$htmlname.'&outjson=1&price_level='.$price_level.'&type='.$filtertype.'&mode=1&status='.$status.'&finished='.$finished, $conf->global->PRODUIT_USE_SEARCH_TO_SELECT); $urloption='htmlname='.$htmlname.'&outjson=1&price_level='.$price_level.'&type='.$filtertype.'&mode=1&status='.$status.'&finished='.$finished;
print ajax_autocompleter($selected, $htmlname, DOL_URL_ROOT.'/product/ajax/products.php', $urloption, $conf->global->PRODUIT_USE_SEARCH_TO_SELECT, 0, $ajaxoptions);
if (! $hidelabel) print $langs->trans("RefOrLabel").' : '; if (! $hidelabel) print $langs->trans("RefOrLabel").' : ';
print '<input type="text" size="20" name="search_'.$htmlname.'" id="search_'.$htmlname.'" value="'.$selected_input_value.'" />'; print '<input type="text" size="20" name="search_'.$htmlname.'" id="search_'.$htmlname.'" value="'.$selected_input_value.'" />';
} }
@ -1131,13 +1133,13 @@ class Form
$sql = "SELECT "; $sql = "SELECT ";
$sql.= " p.rowid, p.label, p.ref, p.fk_product_type, p.price, p.price_ttc, p.price_base_type, p.duration, p.stock"; $sql.= " p.rowid, p.label, p.ref, p.fk_product_type, p.price, p.price_ttc, p.price_base_type, p.duration, p.stock";
// Multilang : we add translation // Multilang : we add translation
if ($conf->global->MAIN_MULTILANGS) if (! empty($conf->global->MAIN_MULTILANGS))
{ {
$sql.= ", pl.label as label_translated"; $sql.= ", pl.label as label_translated";
} }
$sql.= " FROM ".MAIN_DB_PREFIX."product as p"; $sql.= " FROM ".MAIN_DB_PREFIX."product as p";
// Multilang : we add translation // Multilang : we add translation
if ($conf->global->MAIN_MULTILANGS) if (! empty($conf->global->MAIN_MULTILANGS))
{ {
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_lang as pl ON pl.fk_product = p.rowid AND pl.lang='". $langs->getDefaultLang() ."'"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_lang as pl ON pl.fk_product = p.rowid AND pl.lang='". $langs->getDefaultLang() ."'";
} }
@ -1162,13 +1164,13 @@ class Form
if (! empty($conf->global->PRODUCT_DONOTSEARCH_ANYWHERE)) // Can use index if (! empty($conf->global->PRODUCT_DONOTSEARCH_ANYWHERE)) // Can use index
{ {
$sql.=" AND (p.ref LIKE '".$filterkey."%' OR p.label LIKE '".$filterkey."%'"; $sql.=" AND (p.ref LIKE '".$filterkey."%' OR p.label LIKE '".$filterkey."%'";
if ($conf->global->MAIN_MULTILANGS) $sql.=" OR pl.label LIKE '".$filterkey."%'"; if (! empty($conf->global->MAIN_MULTILANGS)) $sql.=" OR pl.label LIKE '".$filterkey."%'";
$sql.=")"; $sql.=")";
} }
else else
{ {
$sql.=" AND (p.ref LIKE '%".$filterkey."%' OR p.label LIKE '%".$filterkey."%'"; $sql.=" AND (p.ref LIKE '%".$filterkey."%' OR p.label LIKE '%".$filterkey."%'";
if ($conf->global->MAIN_MULTILANGS) $sql.=" OR pl.label LIKE '%".$filterkey."%'"; if (! empty($conf->global->MAIN_MULTILANGS)) $sql.=" OR pl.label LIKE '%".$filterkey."%'";
$sql.=")"; $sql.=")";
} }
} }
@ -1194,6 +1196,9 @@ class Form
$outkey=''; $outkey='';
$outval=''; $outval='';
$outref=''; $outref='';
$outprice_ht='';
$outprice_ttc='';
$outpricebasetype='';
$objp = $this->db->fetch_object($result); $objp = $this->db->fetch_object($result);
@ -1206,7 +1211,7 @@ class Form
$opt = '<option value="'.$objp->rowid.'"'; $opt = '<option value="'.$objp->rowid.'"';
$opt.= ($objp->rowid == $selected)?' selected="selected"':''; $opt.= ($objp->rowid == $selected)?' selected="selected"':'';
if ($conf->stock->enabled && $objp->fk_product_type == 0 && isset($objp->stock)) if (! empty($conf->stock->enabled) && $objp->fk_product_type == 0 && isset($objp->stock))
{ {
if ($objp->stock > 0) if ($objp->stock > 0)
{ {
@ -1258,6 +1263,9 @@ class Form
$opt.= price($objp2->price_ttc,1).' '.$currencytext.' '.$langs->trans("TTC"); $opt.= price($objp2->price_ttc,1).' '.$currencytext.' '.$langs->trans("TTC");
$outval.= price($objp2->price_ttc,1).' '.$currencytextnoent.' '.$langs->transnoentities("TTC"); $outval.= price($objp2->price_ttc,1).' '.$currencytextnoent.' '.$langs->transnoentities("TTC");
} }
$outprice_ht=price($objp2->price);
$outprice_ttc=price($objp2->price_ttc);
$outpricebasetype=$objp2->price_base_type;
} }
} }
else else
@ -1279,9 +1287,12 @@ class Form
$opt.= price($objp->price_ttc,1).' '.$currencytext.' '.$langs->trans("TTC"); $opt.= price($objp->price_ttc,1).' '.$currencytext.' '.$langs->trans("TTC");
$outval.= price($objp->price_ttc,1).' '.$currencytextnoent.' '.$langs->transnoentities("TTC"); $outval.= price($objp->price_ttc,1).' '.$currencytextnoent.' '.$langs->transnoentities("TTC");
} }
$outprice_ht=price($objp->price);
$outprice_ttc=price($objp->price_ttc);
$outpricebasetype=$objp->price_base_type;
} }
if ($conf->stock->enabled && isset($objp->stock) && $objp->fk_product_type == 0) if (! empty($conf->stock->enabled) && isset($objp->stock) && $objp->fk_product_type == 0)
{ {
$opt.= ' - '.$langs->trans("Stock").':'.$objp->stock; $opt.= ' - '.$langs->trans("Stock").':'.$objp->stock;
$outval.=' - '.$langs->transnoentities("Stock").':'.$objp->stock; $outval.=' - '.$langs->transnoentities("Stock").':'.$objp->stock;
@ -1309,7 +1320,7 @@ class Form
// "key" value of json key array is used by jQuery automatically as selected value // "key" value of json key array is used by jQuery automatically as selected value
// "label" value of json key array is used by jQuery automatically as text for combo box // "label" value of json key array is used by jQuery automatically as text for combo box
$outselect.=$opt; $outselect.=$opt;
array_push($outjson,array('key'=>$outkey,'value'=>$outref,'label'=>$outval)); array_push($outjson, array('key'=>$outkey, 'value'=>$outref, 'label'=>$outval, 'price_ht'=>$outprice_ht, 'price_ttc'=>$outprice_ttc, 'pricebasetype'=>$outpricebasetype));
$i++; $i++;
} }
@ -1343,7 +1354,7 @@ class Form
global $langs,$conf; global $langs,$conf;
global $price_level, $status, $finished; global $price_level, $status, $finished;
if ($conf->global->PRODUIT_USE_SEARCH_TO_SELECT) if (! empty($conf->use_javascript_ajax) && ! empty($conf->global->PRODUIT_USE_SEARCH_TO_SELECT))
{ {
// mode=2 means suppliers products // mode=2 means suppliers products
$urloption=($socid > 0?'socid='.$socid.'&':'').'htmlname='.$htmlname.'&outjson=1&price_level='.$price_level.'&type='.$filtertype.'&mode=2&status='.$status.'&finished='.$finished; $urloption=($socid > 0?'socid='.$socid.'&':'').'htmlname='.$htmlname.'&outjson=1&price_level='.$price_level.'&type='.$filtertype.'&mode=2&status='.$status.'&finished='.$finished;
@ -2055,7 +2066,7 @@ class Form
print '<select id="select'.$htmlname.'" class="flat selectbankaccount" name="'.$htmlname.'"'.($moreattrib?' '.$moreattrib:'').'>'; print '<select id="select'.$htmlname.'" class="flat selectbankaccount" name="'.$htmlname.'"'.($moreattrib?' '.$moreattrib:'').'>';
if ($useempty == 1 || ($useempty == 2 && $num > 1)) if ($useempty == 1 || ($useempty == 2 && $num > 1))
{ {
print '<option value="'.$obj->rowid.'">&nbsp;</option>'; print '<option value="-1">&nbsp;</option>';
} }
while ($i < $num) while ($i < $num)

View File

@ -69,7 +69,7 @@ if (! empty($conf->margin->enabled)) {
require_once(DOL_DOCUMENT_ROOT."/core/class/doleditor.class.php"); require_once(DOL_DOCUMENT_ROOT."/core/class/doleditor.class.php");
$nbrows=ROWS_2; $nbrows=ROWS_2;
if (! empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) $nbrows=$conf->global->MAIN_INPUT_DESC_HEIGHT; if (! empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) $nbrows=$conf->global->MAIN_INPUT_DESC_HEIGHT;
$doleditor=new DolEditor('dp_desc',$_POST["dp_desc"],'',100,'dolibarr_details','',false,true,$conf->global->FCKEDITOR_ENABLE_DETAILS,$nbrows,70); $doleditor=new DolEditor('np_desc',$_POST["np_desc"],'',100,'dolibarr_details','',false,true,$conf->global->FCKEDITOR_ENABLE_DETAILS,$nbrows,70);
$doleditor->Create(); $doleditor->Create();
?> ?>
</td> </td>

View File

@ -29,7 +29,7 @@
<!-- BEGIN PHP TEMPLATE predefinedproductline_create.tpl.php --> <!-- BEGIN PHP TEMPLATE predefinedproductline_create.tpl.php -->
<tr class="liste_titre nodrag nodrop"> <tr class="liste_titre nodrag nodrop">
<td<?php echo (! empty($conf->global->MAIN_VIEW_LINE_NUMBER) ? ' colspan="4"' : ' colspan="3"'); ?>> <td<?php echo (! empty($conf->global->MAIN_VIEW_LINE_NUMBER) ? ' colspan="3"' : ' colspan="2"'); ?>>
<?php <?php
echo $langs->trans("AddNewLine").' - '; echo $langs->trans("AddNewLine").' - ';
if ($conf->service->enabled) if ($conf->service->enabled)
@ -38,6 +38,8 @@
echo $langs->trans('RecordedProducts'); echo $langs->trans('RecordedProducts');
?> ?>
</td> </td>
<td align="right"><?php echo $langs->trans('PriceUHT'); ?></td>
<td align="right"><?php echo $langs->trans('PriceUTTC'); ?></td>
<td align="right"><?php echo $langs->trans('Qty'); ?></td> <td align="right"><?php echo $langs->trans('Qty'); ?></td>
<td align="right"><?php echo $langs->trans('ReductionShort'); ?></td> <td align="right"><?php echo $langs->trans('ReductionShort'); ?></td>
<?php <?php
@ -63,16 +65,22 @@ if (! empty($conf->margin->enabled)) {
<script type="text/javascript"> <script type="text/javascript">
jQuery(document).ready(function() { jQuery(document).ready(function() {
jQuery('#idprod').change(function() { jQuery('#idprod').change(function() {
jQuery('#np_desc').focus(); jQuery('#dp_desc').focus();
}); });
}); });
</script> </script>
<tr <?php echo $bcnd[$var]; ?>> <tr <?php echo $bcnd[$var]; ?>>
<td<?php echo (! empty($conf->global->MAIN_VIEW_LINE_NUMBER) ? ' colspan="4"' : ' colspan="3"'); ?>> <td<?php echo (! empty($conf->global->MAIN_VIEW_LINE_NUMBER) ? ' colspan="3"' : ' colspan="2"'); ?>>
<?php <?php
$form->select_produits('','idprod','',$conf->product->limit_size,$buyer->price_level); $ajaxoptions=array(
'update' => array(
'dp_price_ht' => 'price_ht',
'dp_price_ttc' => 'price_ttc'
)
);
$form->select_produits('', 'idprod', '', $conf->product->limit_size, $buyer->price_level, 1, 2, '', 0, $ajaxoptions);
if (is_object($hookmanager)) if (is_object($hookmanager))
{ {
@ -84,19 +92,21 @@ jQuery(document).ready(function() {
require_once(DOL_DOCUMENT_ROOT."/core/class/doleditor.class.php"); require_once(DOL_DOCUMENT_ROOT."/core/class/doleditor.class.php");
$nbrows=ROWS_2; $nbrows=ROWS_2;
if (! empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) $nbrows=$conf->global->MAIN_INPUT_DESC_HEIGHT; if (! empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) $nbrows=$conf->global->MAIN_INPUT_DESC_HEIGHT;
$doleditor=new DolEditor('np_desc',$_POST["np_desc"],'',100,'dolibarr_details','',false,true,$conf->global->FCKEDITOR_ENABLE_DETAILS,$nbrows,70); $doleditor=new DolEditor('dp_desc',$_POST["dp_desc"],'',100,'dolibarr_details','',false,true,$conf->global->FCKEDITOR_ENABLE_DETAILS,$nbrows,70);
$doleditor->Create(); $doleditor->Create();
?> ?>
</td> </td>
<td align="right"><input type="text" size="6" id="dp_price_ht" name="dp_price_ht" value="<?php echo (isset($_POST["dp_price_ht"])?$_POST["dp_price_ht"]:''); ?>"></td>
<td align="right"><input type="text" size="6" id="dp_price_ttc" name="dp_price_ttc" value="<?php echo (isset($_POST["dp_price_ttc"])?$_POST["dp_price_ttc"]:''); ?>"></td>
<td align="right"><input type="text" size="2" name="qty" value="1"></td> <td align="right"><input type="text" size="2" name="qty" value="1"></td>
<td align="right" nowrap><input type="text" size="1" name="remise_percent" value="<?php echo $buyer->remise_client; ?>">%</td> <td align="right" nowrap="nowrap"><input type="text" size="1" name="remise_percent" value="<?php echo $buyer->remise_client; ?>">%</td>
<?php <?php
$colspan = 4; $colspan = 4;
if (! empty($conf->margin->enabled)) { if (! empty($conf->margin->enabled)) {
?> ?>
<td align="right"> <td align="right">
<select id="np_fournprice" name="np_fournprice" style="display: none;"></select> <select id="dp_fournprice" name="dp_fournprice" style="display: none;"></select>
<input type="text" size="5" id="np_buying_price" name="np_buying_price" value="<?php echo (isset($_POST["np_buying_price"])?$_POST["np_buying_price"]:''); ?>"> <input type="text" size="5" id="dp_buying_price" name="dp_buying_price" value="<?php echo (isset($_POST["dp_buying_price"])?$_POST["dp_buying_price"]:''); ?>">
</td> </td>
<?php <?php
if($conf->global->DISPLAY_MARGIN_RATES) if($conf->global->DISPLAY_MARGIN_RATES)