diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index ba8f32e0bd14d3c604756af273f67a031504c6af..0f536a7c746c1d5e47b484c7d6209495fe8ec74d 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -2444,6 +2444,48 @@ abstract class CommonObject /* This is to show add lines */ + /** + * Show add predefined products/services form + * TODO Edit templates to use global variables and include them directly in controller call + * But for the moment we don't know if it's possible as we keep a method available on overloaded objects. + * + * @param int $dateSelector 1=Show also date range input fields + * @param Societe $seller Object thirdparty who sell + * @param Societe $buyer Object thirdparty who buy + * @param HookManager $hookmanager Hook manager instance + * @return void + * @deprecated + */ + function formAddPredefinedProduct($dateSelector,$seller,$buyer,$hookmanager=false) + { + global $conf,$langs,$object; + global $form,$bcnd,$var; + + // Use global variables + $dateSelector + $seller and $buyer + include(DOL_DOCUMENT_ROOT.'/core/tpl/predefinedproductline_create.tpl.php'); + } + + /** + * Show add free products/services form + * TODO Edit templates to use global variables and include them directly in controller call + * But for the moment we don't know if it'st possible as we keep a method available on overloaded objects. + * + * @param int $dateSelector 1=Show also date range input fields + * @param Societe $seller Object thirdparty who sell + * @param Societe $buyer Object thirdparty who buy + * @param HookManager $hookmanager Hook manager instance + * @return void + * @deprecated + */ + function formAddFreeProduct($dateSelector,$seller,$buyer,$hookmanager=false) + { + global $conf,$langs,$object; + global $form,$bcnd,$var; + + // Use global variables + $dateSelector + $seller and $buyer + include(DOL_DOCUMENT_ROOT.'/core/tpl/freeproductline_create.tpl.php'); + } + /** * Show add free and predefined products/services form diff --git a/htdocs/core/tpl/objectline_add.tpl.php b/htdocs/core/tpl/objectline_add.tpl.php index 1f5643b8d782336b7a5928961c32cb1d17db08b4..3d80df83ba5e97b8d2ee8f5e41fa90e9e1bfa342 100644 --- a/htdocs/core/tpl/objectline_add.tpl.php +++ b/htdocs/core/tpl/objectline_add.tpl.php @@ -218,7 +218,7 @@ $(document).ready(function() { $('#service_duration_area').hide(); $('#idprod').change(function() { - if ($(this).val().length > 0) { + if ($(this).val() > 0) { if (typeof CKEDITOR == 'object' && typeof CKEDITOR.instances != 'undefined' && CKEDITOR.instances['product_desc'] != 'undefined') { // We use CKEditor CKEDITOR.instances['product_desc'].focus(); @@ -226,9 +226,46 @@ $(document).ready(function() { // We use a simple textarea $('#product_desc').focus(); } + // For compatibility with combobox + <?php if (empty($conf->global->PRODUIT_USE_SEARCH_TO_SELECT)) { ?> + $.post('<?php echo DOL_URL_ROOT; ?>/product/ajax/products.php', { + 'action': 'fetch', + 'id': $(this).val(), + 'price_level': <?php echo $buyer->price_level; ?> + }, + function(data) { + if (typeof data != 'undefined') { + $('#select_type').val(data.type).attr('disabled','disabled'); + $('#product_ref').val(data.ref); + $('#product_label').val(data.label).attr('disabled','disabled'); + $('#origin_label_cache').val(data.label); + $('#origin_desc_cache').val(data.desc); + $('#price_base_type').val(data.pricebasetype); + $('#price_ht').val(data.price_ht).attr('disabled','disabled'); + $('#origin_price_ht_cache').val(data.price_ht); + $('#update_label_area').show().trigger('show'); + $('#update_desc_area').show().trigger('show'); + $('#update_price_area').show().trigger('show'); + } + }, 'json'); + <?php } ?> } else { $('#update_desc_checkbox').removeAttr('checked').trigger('change'); $('#update_price_checkbox').removeAttr('checked').trigger('change'); + // For compatibility with combobox + <?php if (empty($conf->global->PRODUIT_USE_SEARCH_TO_SELECT)) { ?> + $('#select_type').val('').removeAttr('disabled'); + $('#product_ref').val(''); + $('#product_label').val('').removeAttr('disabled'); + $('#origin_label_cache').val(''); + $('#origin_desc_cache').val(''); + $('#price_base_type').val(''); + $('#price_ht').val('').removeAttr('disabled'); + $('#origin_price_ht_cache').val(''); + $('#update_label_area').hide().trigger('hide'); + $('#update_desc_area').hide().trigger('hide'); + $('#update_price_area').hide().trigger('hide'); + <?php } ?> } }); diff --git a/htdocs/product/ajax/products.php b/htdocs/product/ajax/products.php index 9a8f3b87f3de3f6f5578cf80c88e5dd7c825ebed..5f7c8f7506f8fd91a183732f3ffcb0900bc931a5 100644 --- a/htdocs/product/ajax/products.php +++ b/htdocs/product/ajax/products.php @@ -31,10 +31,6 @@ if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK','1'); if (empty($_GET['keysearch']) && ! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1'); require '../../main.inc.php'; -require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php'; - -$langs->load("products"); -$langs->load("main"); $htmlname=GETPOST('htmlname','alpha'); $socid=GETPOST('socid','int'); @@ -43,50 +39,105 @@ $mode=GETPOST('mode','int'); $status=((GETPOST('status','int') >= 0) ? GETPOST('status','int') : -1); $outjson=(GETPOST('outjson','int') ? GETPOST('outjson','int') : 0); $pricelevel=GETPOST('price_level','int'); +$action=GETPOST('action', 'alpha'); +$id=GETPOST('id', 'int'); /* * View */ -// Ajout directives pour resoudre bug IE -//header('Cache-Control: Public, must-revalidate'); -//header('Pragma: public'); - -//top_htmlhead("", "", 1); // Replaced with top_httphead. An ajax page does not need html header. -top_httphead(); - //print '<!-- Ajax page called with url '.$_SERVER["PHP_SELF"].'?'.$_SERVER["QUERY_STRING"].' -->'."\n"; -//print '<body class="nocellnopadd">'."\n"; - dol_syslog(join(',',$_GET)); //print_r($_GET); -if (empty($htmlname)) return; - -$match = preg_grep('/('.$htmlname.'[0-9]+)/',array_keys($_GET)); -sort($match); -$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". -$searchkey=(GETPOST($idprod)?GETPOST($idprod):(GETPOST($htmlname)?GETPOST($htmlname):'')); - -$form = new Form($db); -if (empty($mode) || $mode == 1) +if (! empty($action) && $action == 'fetch' && ! empty($id)) { - $arrayresult=$form->select_produits_do("",$htmlname,$type,"",$pricelevel,$searchkey,$status,2,$outjson); + require DOL_DOCUMENT_ROOT . '/product/class/product.class.php'; + + $outjson=array(); + + $object = new Product($db); + $ret=$object->fetch($id); + if ($ret > 0) + { + $outref=$object->ref; + $outlabel=$object->label; + $outdesc=$object->description; + $outtype=$object->type; + + $found=false; + + // Multiprice + if ($price_level >= 1) // If we need a particular price level (from 1 to 6) + { + $sql= "SELECT price, price_ttc, price_base_type "; + $sql.= "FROM ".MAIN_DB_PREFIX."product_price "; + $sql.= "WHERE fk_product='".$id."'"; + $sql.= " AND price_level=".$price_level; + $sql.= " ORDER BY date_price"; + $sql.= " DESC LIMIT 1"; + + $result = $this->db->query($sql); + if ($result) + { + $objp = $this->db->fetch_object($result); + if ($objp) + { + $found=true; + $outprice_ht=price($objp->price); + $outprice_ttc=price($objp->price_ttc); + $outpricebasetype=$objp->price_base_type; + } + } + } + + if (! $found) + { + $outprice_ht=price($object->price); + $outprice_ttc=price($object->price_ttc); + $outpricebasetype=$object->price_base_type; + } + + $outjson = array('ref'=>$outref, 'label'=>$outlabel, 'desc'=>$outdesc, 'type'=>$outtype, 'price_ht'=>$outprice_ht, 'price_ttc'=>$outprice_ttc, 'pricebasetype'=>$outpricebasetype); + } + + echo json_encode($outjson); + } -elseif ($mode == 2) +else { - $arrayresult=$form->select_produits_fournisseurs_do($socid,"",$htmlname,$type,"",$searchkey,$status,$outjson); + require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php'; + + $langs->load("products"); + $langs->load("main"); + + top_httphead(); + + if (empty($htmlname)) return; + + $match = preg_grep('/('.$htmlname.'[0-9]+)/',array_keys($_GET)); + sort($match); + $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". + $searchkey=(GETPOST($idprod)?GETPOST($idprod):(GETPOST($htmlname)?GETPOST($htmlname):'')); + + $form = new Form($db); + if (empty($mode) || $mode == 1) + { + $arrayresult=$form->select_produits_do("",$htmlname,$type,"",$pricelevel,$searchkey,$status,2,$outjson); + } + elseif ($mode == 2) + { + $arrayresult=$form->select_produits_fournisseurs_do($socid,"",$htmlname,$type,"",$searchkey,$status,$outjson); + } + + $db->close(); + + if ($outjson) print json_encode($arrayresult); } -$db->close(); - -if ($outjson) print json_encode($arrayresult); - -//print "</body>"; -//print "</html>"; ?> \ No newline at end of file