2014-05-05 14:30:08 +02:00
< ? php
2018-10-27 14:43:12 +02:00
/* Copyright ( C ) 2010 - 2012 Regis Houssin < regis . houssin @ inodbox . com >
2014-05-05 17:59:43 +02:00
* Copyright ( C ) 2010 - 2014 Laurent Destailleur < eldy @ users . sourceforge . net >
2014-05-05 14:30:08 +02:00
* Copyright ( C ) 2012 - 2013 Christophe Battarel < christophe . battarel @ altairis . fr >
2014-11-14 16:43:49 +01:00
* Copyright ( C ) 2012 Cédric Salvador < csalvador @ gpcsolutions . fr >
2015-01-27 12:53:02 +01:00
* Copyright ( C ) 2014 Florian Henry < florian . henry @ open - concept . pro >
2014-11-14 16:43:49 +01:00
* Copyright ( C ) 2014 Raphaël Doursenaud < rdoursenaud @ gpcsolutions . fr >
2016-07-23 16:37:21 +02:00
* Copyright ( C ) 2015 - 2016 Marcos García < marcosgdf @ gmail . com >
2024-09-05 16:05:37 +02:00
* Copyright ( C ) 2018 - 2024 Frédéric France < frederic . france @ free . fr >
2024-06-18 21:24:16 +02:00
* Copyright ( C ) 2018 Ferran Marcet < fmarcet @ 2 byte . es >
* Copyright ( C ) 2019 Nicolas ZABOURI < info @ inovea - conseil . com >
* Copyright ( C ) 2022 OpenDSI < support @ open - dsi . fr >
2024-06-18 21:29:51 +02:00
* Copyright ( C ) 2022 Gauthier VERDOL < gauthier . verdol @ atm - consulting . fr >
2024-06-18 21:25:00 +02:00
* Copyright ( C ) 2024 Alexandre Spangaro < alexandre @ inovea - conseil . com >
2025-01-13 20:04:35 +01:00
* Copyright ( C ) 2025 MDW < mdeweerd @ users . noreply . github . com >
2014-05-05 14:30:08 +02:00
*
* 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
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2014-05-05 14:30:08 +02:00
*
2024-06-30 21:02:50 +02:00
* Need to have the following variables defined :
2014-05-06 18:31:39 +02:00
* $object ( invoice , order , ... )
2014-05-05 14:30:08 +02:00
* $conf
* $langs
* $dateSelector
2014-05-05 17:59:43 +02:00
* $forceall ( 0 by default , 1 for supplier invoices / orders )
2017-08-23 15:02:38 +02:00
* $senderissupplier ( 0 by default , 1 or 2 for supplier invoices / orders )
2014-05-06 18:31:39 +02:00
* $inputalsopricewithtax ( 0 by default , 1 to also show column with unit price including tax )
2014-05-05 14:30:08 +02:00
*/
2024-11-04 23:53:20 +01:00
/**
* @ var CommonObject $this
* @ var CommonObject $object
* @ var CommonObjectLine $line
2024-11-10 23:47:14 +01:00
* @ var Form $form
2024-11-04 23:53:20 +01:00
* @ var HookManager $hookmanager
* @ var Translate $langs
* @ var User $user
*/
2017-12-21 13:32:16 +01:00
// Protection to avoid direct call of template
2019-11-14 12:09:15 +01:00
if ( empty ( $object ) || ! is_object ( $object )) {
2019-11-30 12:49:31 +01:00
print " Error: this template page cannot be called directly as an URL " ;
exit ;
2017-12-21 13:32:16 +01:00
}
2023-01-10 21:46:11 +01:00
2025-01-13 20:04:35 +01:00
'
@ phan - var - force CommonObject $this
@ phan - var - force CommonObject $object
@ phan - var - force Societe $buyer
@ phan - var - force Societe $seller
@ phan - var - force int < 0 , 1 > $usehm
' ;
2024-02-21 18:14:29 +01:00
2019-11-14 12:09:15 +01:00
$usemargins = 0 ;
2022-09-25 06:03:47 +02:00
if ( isModEnabled ( 'margin' ) && ! empty ( $object -> element ) && in_array ( $object -> element , array ( 'facture' , 'facturerec' , 'propal' , 'commande' ))) {
2019-11-30 12:49:31 +01:00
$usemargins = 1 ;
2015-11-15 18:23:42 +01:00
}
2021-02-23 22:03:23 +01:00
if ( ! isset ( $dateSelector )) {
global $dateSelector ; // Take global var only if not already defined into function calling (for example formAddObjectLine)
}
2017-09-11 01:20:15 +02:00
global $forceall , $forcetoshowtitlelines , $senderissupplier , $inputalsopricewithtax ;
2023-01-10 21:46:11 +01:00
global $mysoc ;
2022-08-13 19:30:26 +02:00
2021-02-23 22:03:23 +01:00
if ( ! isset ( $dateSelector )) {
$dateSelector = 1 ; // For backward compatibility
} elseif ( empty ( $dateSelector )) {
$dateSelector = 0 ;
}
if ( empty ( $forceall )) {
$forceall = 0 ;
}
if ( empty ( $senderissupplier )) {
$senderissupplier = 0 ;
}
if ( empty ( $inputalsopricewithtax )) {
$inputalsopricewithtax = 0 ;
}
2019-05-20 14:41:47 +02:00
// Define colspan for the button 'Add'
2019-11-14 12:09:15 +01:00
$colspan = 3 ; // Columns: total ht + col edit + col delete
2022-09-03 11:24:17 +02:00
if ( isModEnabled ( " multicurrency " ) && $this -> multicurrency_code != $conf -> currency ) {
2021-02-23 22:03:23 +01:00
$colspan ++ ; //Add column for Total (currency) if required
}
2022-02-07 14:34:27 +01:00
if ( in_array ( $object -> element , array ( 'propal' , 'commande' , 'order' , 'facture' , 'facturerec' , 'invoice' , 'supplier_proposal' , 'order_supplier' , 'invoice_supplier' , 'invoice_supplier_rec' ))) {
2021-02-23 22:03:23 +01:00
$colspan ++ ; // With this, there is a column move button
}
2022-08-30 11:43:58 +02:00
if ( isModEnabled ( 'asset' ) && $object -> element == 'invoice_supplier' ) {
2022-02-14 04:52:39 +01:00
$colspan ++ ;
}
2021-07-21 08:26:41 +02:00
2015-03-06 18:51:55 +01:00
//print $object->element;
2018-03-20 10:10:21 +01:00
// Lines for extrafield
$objectline = null ;
2021-02-23 22:03:23 +01:00
if ( ! empty ( $extrafields )) {
2019-11-14 12:09:15 +01:00
if ( $this -> table_element_line == 'commandedet' ) {
2018-03-20 10:10:21 +01:00
$objectline = new OrderLine ( $this -> db );
2020-05-21 15:05:19 +02:00
} elseif ( $this -> table_element_line == 'propaldet' ) {
2018-03-20 10:10:21 +01:00
$objectline = new PropaleLigne ( $this -> db );
2020-05-21 15:05:19 +02:00
} elseif ( $this -> table_element_line == 'supplier_proposaldet' ) {
2018-03-20 10:10:21 +01:00
$objectline = new SupplierProposalLine ( $this -> db );
2020-05-21 15:05:19 +02:00
} elseif ( $this -> table_element_line == 'facturedet' ) {
2018-03-20 10:10:21 +01:00
$objectline = new FactureLigne ( $this -> db );
2020-05-21 15:05:19 +02:00
} elseif ( $this -> table_element_line == 'contratdet' ) {
2018-03-20 10:10:21 +01:00
$objectline = new ContratLigne ( $this -> db );
2020-05-21 15:05:19 +02:00
} elseif ( $this -> table_element_line == 'commande_fournisseurdet' ) {
2018-03-20 10:10:21 +01:00
$objectline = new CommandeFournisseurLigne ( $this -> db );
2020-05-21 15:05:19 +02:00
} elseif ( $this -> table_element_line == 'facture_fourn_det' ) {
2018-03-20 10:10:21 +01:00
$objectline = new SupplierInvoiceLine ( $this -> db );
2020-05-21 15:05:19 +02:00
} elseif ( $this -> table_element_line == 'facturedet_rec' ) {
2018-03-20 10:10:21 +01:00
$objectline = new FactureLigneRec ( $this -> db );
2022-02-07 14:34:27 +01:00
} elseif ( $this -> table_element_line == 'facture_fourn_det_rec' ) {
$objectline = new FactureFournisseurLigneRec ( $this -> db );
2018-03-20 10:10:21 +01:00
}
}
2019-10-27 17:01:23 +01:00
print " <!-- BEGIN PHP TEMPLATE objectline_create.tpl.php --> \n " ;
2019-12-03 11:17:29 +01:00
$nolinesbefore = ( count ( $this -> lines ) == 0 || $forcetoshowtitlelines );
2016-07-28 15:29:46 +02:00
if ( $nolinesbefore ) {
2019-10-27 17:01:23 +01:00
?>
2023-12-04 12:07:53 +01:00
< tr class = " liste_titre<?php echo(( $nolinesbefore || $object->element == 'contrat') ? '' : ' liste_titre_add_') ?> nodrag nodrop " >
2023-11-27 11:39:32 +01:00
< ? php if ( getDolGlobalString ( 'MAIN_VIEW_LINE_NUMBER' )) { ?>
2019-11-30 12:49:31 +01:00
< td class = " linecolnum center " ></ td >
< ? php } ?>
2022-11-03 16:13:35 +01:00
< td class = " linecoldescription minwidth400imp " >
2020-07-07 03:50:14 +02:00
< div id = " add " ></ div >< span class = " hideonsmartphone " >< ? php echo $langs -> trans ( 'AddNewLine' ); ?> </span>
2019-11-30 12:49:31 +01:00
</ td >
< ? php
2022-02-07 14:34:27 +01:00
if ( $object -> element == 'supplier_proposal' || $object -> element == 'order_supplier' || $object -> element == 'invoice_supplier' || $object -> element == 'invoice_supplier_rec' ) { // We must have same test in printObjectLines
2019-11-30 12:49:31 +01:00
?>
< td class = " linecolrefsupplier " >< span id = " title_fourn_ref " >< ? php echo $langs -> trans ( 'SupplierRef' ); ?> </span></td>
< ? php
2023-12-04 12:07:53 +01:00
} ?>
2019-11-30 12:49:31 +01:00
< td class = " linecolvat right " >< span id = " title_vat " >< ? php echo $langs -> trans ( 'VAT' ); ?> </span></td>
< td class = " linecoluht right " >< span id = " title_up_ht " >< ? php echo $langs -> trans ( 'PriceUHT' ); ?> </span></td>
2022-09-03 11:24:17 +02:00
< ? php if ( isModEnabled ( " multicurrency " ) && $this -> multicurrency_code != $conf -> currency ) { ?>
2019-11-30 12:49:31 +01:00
< td class = " linecoluht_currency right " >< span id = " title_up_ht_currency " >< ? php echo $langs -> trans ( 'PriceUHTCurrency' ); ?> </span></td>
< ? php } ?>
2023-03-15 13:45:53 +01:00
< ? php if ( ! empty ( $inputalsopricewithtax ) && ! getDolGlobalInt ( 'MAIN_NO_INPUT_PRICE_WITH_TAX' )) { ?>
2019-11-30 12:49:31 +01:00
< td class = " linecoluttc right " >< span id = " title_up_ttc " >< ? php echo $langs -> trans ( 'PriceUTTC' ); ?> </span></td>
< ? php } ?>
< td class = " linecolqty right " >< ? php echo $langs -> trans ( 'Qty' ); ?> </td>
2019-10-27 17:01:23 +01:00
< ? php
2022-12-30 12:55:53 +01:00
if ( getDolGlobalInt ( 'PRODUCT_USE_UNITS' )) {
2019-11-30 12:49:31 +01:00
print '<td class="linecoluseunit left">' ;
print '<span id="title_units">' ;
print $langs -> trans ( 'Unit' );
print '</span></td>' ;
2023-12-04 12:07:53 +01:00
} ?>
2019-11-30 12:49:31 +01:00
< td class = " linecoldiscount right " >< ? php echo $langs -> trans ( 'ReductionShort' ); ?> </td>
< ? php
// Fields for situation invoice
2021-06-28 20:00:10 +02:00
if ( isset ( $this -> situation_cycle_ref ) && $this -> situation_cycle_ref ) {
2019-12-03 11:17:29 +01:00
print '<td class="linecolcycleref right">' . $langs -> trans ( 'Progress' ) . '</td>' ;
2024-06-18 20:21:56 +02:00
if ( getDolGlobalInt ( 'INVOICE_USE_SITUATION' ) == 2 ) {
print '<td class="nobottom nowrap right"></td>' ;
}
2019-11-30 12:49:31 +01:00
print '<td class="linecolcycleref2 right"></td>' ;
2016-12-15 12:01:46 +01:00
}
2021-02-23 22:03:23 +01:00
if ( ! empty ( $usemargins )) {
2023-10-15 15:32:35 +02:00
if ( ! $user -> hasRight ( 'margins' , 'creer' )) {
2019-11-30 12:49:31 +01:00
$colspan ++ ;
2020-05-21 15:05:19 +02:00
} else {
2019-11-30 12:49:31 +01:00
print '<td class="margininfos linecolmargin1 right">' ;
2023-10-08 23:19:49 +02:00
if ( getDolGlobalString ( 'MARGIN_TYPE' ) == " 1 " ) {
2019-11-30 12:49:31 +01:00
echo $langs -> trans ( 'BuyingPrice' );
2021-02-23 22:03:23 +01:00
} else {
echo $langs -> trans ( 'CostPrice' );
}
2019-11-30 12:49:31 +01:00
echo '</td>' ;
2023-11-27 11:39:32 +01:00
if ( getDolGlobalString ( 'DISPLAY_MARGIN_RATES' )) {
2021-02-23 22:03:23 +01:00
echo '<td class="margininfos linecolmargin2 right"><span class="np_marginRate">' . $langs -> trans ( 'MarginRate' ) . '</span></td>' ;
}
2023-11-27 11:39:32 +01:00
if ( getDolGlobalString ( 'DISPLAY_MARK_RATES' )) {
2024-11-12 13:48:12 +01:00
echo '<td class="margininfos linecolmark1 right"><span class="np_markRate">' . $langs -> trans ( 'MarkRate' ) . '</span></td>' ;
2021-02-23 22:03:23 +01:00
}
2019-11-30 12:49:31 +01:00
}
2023-12-04 12:07:53 +01:00
} ?>
2019-11-30 12:49:31 +01:00
< td class = " linecoledit " colspan = " <?php echo $colspan ; ?> " >& nbsp ; </ td >
</ tr >
2019-10-27 17:01:23 +01:00
< ? php
2016-07-28 15:29:46 +02:00
}
?>
2019-12-03 11:17:29 +01:00
< tr class = " pair nodrag nodrop nohoverpair<?php echo ( $nolinesbefore || $object->element == 'contrat') ? '' : ' liste_titre_create'; ?> " >
2019-11-30 12:49:31 +01:00
< ? php
2019-12-03 11:17:29 +01:00
$coldisplay = 0 ;
2019-11-30 12:49:31 +01:00
// Adds a line numbering column
2023-11-27 11:39:32 +01:00
if ( getDolGlobalString ( 'MAIN_VIEW_LINE_NUMBER' )) {
2019-11-30 12:49:31 +01:00
$coldisplay ++ ;
echo '<td class="nobottom linecolnum center"></td>' ;
2019-10-27 17:01:23 +01:00
}
2019-11-30 12:49:31 +01:00
$coldisplay ++ ;
?>
2022-11-03 16:13:35 +01:00
< td class = " nobottom linecoldescription minwidth400imp " >
2019-11-30 12:49:31 +01:00
< ? php
$freelines = false ;
2023-11-27 11:39:32 +01:00
if ( ! getDolGlobalString ( 'MAIN_DISABLE_FREE_LINES' )) {
2019-11-30 12:49:31 +01:00
$freelines = true ;
2019-12-03 11:17:29 +01:00
$forceall = 1 ; // We always force all type for free lines (module product or service means we use predefined product or service)
2021-02-23 22:03:23 +01:00
if ( $object -> element == 'contrat' ) {
2023-11-27 11:39:32 +01:00
if ( ! isModEnabled ( 'product' ) && ! isModEnabled ( 'service' ) && ! getDolGlobalString ( 'CONTRACT_SUPPORT_PRODUCTS' )) {
2021-02-23 22:03:23 +01:00
$forceall = - 1 ; // With contract, by default, no choice at all, except if CONTRACT_SUPPORT_PRODUCTS is set
2023-11-27 11:39:32 +01:00
} elseif ( ! getDolGlobalString ( 'CONTRACT_SUPPORT_PRODUCTS' )) {
2021-02-23 22:03:23 +01:00
$forceall = 3 ;
}
2019-11-30 12:49:31 +01:00
}
2024-11-26 21:22:41 +01:00
2024-12-19 01:05:39 +01:00
// Select type of free line
2024-11-26 21:22:41 +01:00
$labelforempty = 1 ;
2024-12-09 21:29:15 +01:00
print '<span class="prod_entry_mode_free nowraponall">' ;
2024-11-26 21:22:41 +01:00
// Show radio for the non predefined product
2022-08-23 20:02:37 +02:00
if ( $forceall >= 0 && ( isModEnabled ( " product " ) || isModEnabled ( " service " ))) {
2024-11-26 21:22:41 +01:00
print '<label for="prod_entry_mode_free">' ;
print '<input type="radio" class="prod_entry_mode_free" name="prod_entry_mode" id="prod_entry_mode_free" value="free"' ;
2022-09-25 06:03:47 +02:00
//echo (GETPOST('prod_entry_mode')=='free' ? ' checked' : ((empty($forceall) && (!isModEnabled('product') || !isModEnabled('service')))?' checked':'') );
2024-11-26 21:22:41 +01:00
print (( GETPOST ( 'prod_entry_mode' , 'alpha' ) == 'free' || getDolGlobalString ( 'MAIN_FREE_PRODUCT_CHECKED_BY_DEFAULT' )) ? ' checked' : '' );
print '> ' ;
2019-11-30 12:49:31 +01:00
// Show type selector
2024-12-19 01:05:39 +01:00
$labelforempty = $langs -> trans ( " FreeLineOfType " ) . '...' ;
2024-11-26 21:22:41 +01:00
print '</label>' ;
2020-05-21 15:05:19 +02:00
} else {
2019-11-30 12:49:31 +01:00
echo '<input type="hidden" id="prod_entry_mode_free" name="prod_entry_mode" value="free">' ;
// Show type selector
2021-02-23 22:03:23 +01:00
if ( $forceall >= 0 ) {
2022-09-25 06:03:47 +02:00
if ( ! isModEnabled ( 'product' ) || ! isModEnabled ( 'service' )) {
2024-11-26 21:22:41 +01:00
$labelforempty = $langs -> trans ( " Type " );
2021-02-23 22:03:23 +01:00
} else {
2024-11-26 21:22:41 +01:00
$labelforempty = $langs -> trans ( " FreeLineOfType " );
2021-02-23 22:03:23 +01:00
}
2019-11-30 12:49:31 +01:00
}
}
2024-11-26 21:22:41 +01:00
2024-12-19 01:05:39 +01:00
$form -> select_type_of_lines ( GETPOSTISSET ( " type " ) ? GETPOST ( " type " , 'alpha' , 2 ) : - 1 , 'type' , $labelforempty , 1 , $forceall , 'minwidth200' , 0 );
2024-11-26 21:22:41 +01:00
print '</span>' ;
2019-11-30 12:49:31 +01:00
}
// Predefined product/service
2022-08-23 20:02:37 +02:00
if ( isModEnabled ( " product " ) || isModEnabled ( " service " )) {
2024-11-26 21:22:41 +01:00
print '<span class="nowraponall">' ;
2021-02-23 22:03:23 +01:00
if ( $forceall >= 0 && $freelines ) {
2024-11-26 21:22:41 +01:00
print '<br><span class="prod_entry_mode_predef paddingtop">' ;
2021-02-23 22:03:23 +01:00
} else {
2024-11-26 21:22:41 +01:00
print '<span class="prod_entry_mode_predef">' ;
2021-02-23 22:03:23 +01:00
}
2024-11-26 21:22:41 +01:00
print '<label for="prod_entry_mode_predef">' ;
print '<input type="radio" class="prod_entry_mode_predef" name="prod_entry_mode" id="prod_entry_mode_predef" value="predef"' . ( GETPOST ( 'prod_entry_mode' ) == 'predef' ? ' checked' : '' ) . '> ' ;
2021-02-15 14:19:05 +01:00
$labelforradio = '' ;
if ( empty ( $conf -> dol_optimize_smallscreen )) {
2024-05-06 18:50:11 +02:00
if ( isModEnabled ( " product " ) && ! isModEnabled ( 'service' )) {
$labelforradio = $langs -> trans ( 'PredefinedProducts' );
} elseif (( ! isModEnabled ( 'product' ) && isModEnabled ( 'service' )) || ( $object -> element == 'contrat' && ! getDolGlobalString ( 'CONTRACT_SUPPORT_PRODUCTS' ))) {
$labelforradio = $langs -> trans ( 'PredefinedServices' );
2021-02-15 14:19:05 +01:00
} else {
2024-05-06 18:50:11 +02:00
$labelforradio = $langs -> trans ( 'PredefinedProductsAndServices' );
2021-02-15 14:19:05 +01:00
}
2020-05-21 15:05:19 +02:00
} else {
2021-02-15 14:19:05 +01:00
$labelforradio = $langs -> trans ( 'PredefinedItem' );
2019-11-30 12:49:31 +01:00
}
2024-11-26 21:22:41 +01:00
if ( empty ( $senderissupplier )) { // TODO Move this into the placeholder
//print '<span class="textradioforitem">'.$labelforradio.'</span>';
}
print '</label>' ;
//print ' ';
2019-12-03 11:17:29 +01:00
$filtertype = '' ;
2023-11-27 11:39:32 +01:00
if ( ! empty ( $object -> element ) && $object -> element == 'contrat' && ! getDolGlobalString ( 'CONTRACT_SUPPORT_PRODUCTS' )) {
2021-02-23 22:03:23 +01:00
$filtertype = '1' ;
}
if ( empty ( $senderissupplier )) {
2019-11-30 12:49:31 +01:00
$statustoshow = 1 ;
2022-10-28 23:14:50 +02:00
$statuswarehouse = 'warehouseopen,warehouseinternal' ;
2023-12-04 12:07:53 +01:00
if ( getDolGlobalString ( 'ENTREPOT_WAREHOUSEINTERNAL_NOT_SELL' )) {
$statuswarehouse = 'warehouseopen' ;
}
2023-11-27 11:39:32 +01:00
if ( getDolGlobalString ( 'ENTREPOT_EXTRA_STATUS' )) {
2019-11-30 12:49:31 +01:00
// hide products in closed warehouse, but show products for internal transfer
2024-11-26 21:22:41 +01:00
$form -> select_produits ( GETPOST ( 'idprod' ), 'idprod' , $filtertype , getDolGlobalInt ( 'PRODUIT_LIMIT_SIZE' ), $buyer -> price_level , $statustoshow , 2 , '' , 1 , array (), $buyer -> id , $labelforradio , 0 , 'maxwidth500 widthcentpercentminusx' , 0 , $statuswarehouse , GETPOST ( 'combinations' , 'array' ));
2020-05-21 15:05:19 +02:00
} else {
2024-11-26 21:22:41 +01:00
$form -> select_produits ( GETPOST ( 'idprod' ), 'idprod' , $filtertype , getDolGlobalInt ( 'PRODUIT_LIMIT_SIZE' ), $buyer -> price_level , $statustoshow , 2 , '' , 1 , array (), $buyer -> id , $labelforradio , 0 , 'maxwidth500 widthcentpercentminusx' , 0 , '' , GETPOST ( 'combinations' , 'array' ));
2019-11-30 12:49:31 +01:00
}
2023-11-27 11:39:32 +01:00
if ( getDolGlobalString ( 'MAIN_AUTO_OPEN_SELECT2_ON_FOCUS_FOR_CUSTOMER_PRODUCTS' )) {
2019-11-30 15:22:25 +01:00
?>
2020-08-16 22:03:11 +02:00
< script >
2024-12-19 01:05:39 +01:00
$ ( document ) . ready ( function () {
2019-11-30 12:49:31 +01:00
// On first focus on a select2 combo, auto open the menu (this allow to use the keyboard only)
$ ( document ) . on ( 'focus' , '.select2-selection.select2-selection--single' , function ( e ) {
2024-12-19 01:05:39 +01:00
console . log ( " focus on a select2 because of MAIN_AUTO_OPEN_SELECT2_ON_FOCUS_FOR_CUSTOMER_PRODUCTS " );
2019-11-30 12:49:31 +01:00
if ( $ ( this ) . attr ( 'aria-labelledby' ) == 'select2-idprod-container' )
{
console . log ( 'open combo' );
$ ( '#idprod' ) . select2 ( 'open' );
}
});
});
</ script >
2019-11-30 15:22:25 +01:00
< ? php
}
2020-05-21 15:05:19 +02:00
} else {
2021-02-10 02:17:01 +01:00
// $senderissupplier=2 is the same as 1 but disables test on minimum qty, disable autofill qty with minimum and autofill unit price
2021-02-23 22:03:23 +01:00
if ( $senderissupplier != 2 ) {
2019-12-03 11:17:29 +01:00
$ajaxoptions = array (
2024-03-08 12:34:25 +01:00
'update' => array ( 'qty' => 'qty' , 'remise_percent' => 'discount' , 'idprod' => 'idprod' ), // html id tags that will be edited with each ajax json response key
2021-02-10 02:17:01 +01:00
'option_disabled' => 'idthatdoesnotexists' , // html id to disable once select is done
'warning' => $langs -> trans ( " NoPriceDefinedForThisSupplier " ) // translation of an error saved into var 'warning' (for example shown we select a disabled option into combo)
2019-11-30 15:22:25 +01:00
);
2019-12-03 11:17:29 +01:00
$alsoproductwithnosupplierprice = 0 ;
2020-05-21 15:05:19 +02:00
} else {
2019-11-30 15:22:25 +01:00
$ajaxoptions = array (
2022-10-13 14:31:08 +02:00
// Disabled: This is useless because setting discount and price_ht after a selection is already managed
2024-01-13 19:48:20 +01:00
// by this page itself with a .change on the combolist '#idprodfournprice'
2022-10-13 14:31:08 +02:00
//'update' => array('remise_percent' => 'discount', 'price_ht' => 'price_ht') // html id tags that will be edited with each ajax json response key
2019-11-30 15:22:25 +01:00
);
2019-12-03 11:17:29 +01:00
$alsoproductwithnosupplierprice = 1 ;
2019-11-30 15:22:25 +01:00
}
2024-11-26 21:22:41 +01:00
$form -> select_produits_fournisseurs ( $object -> socid , GETPOST ( 'idprodfournprice' ), 'idprodfournprice' , '' , '' , $ajaxoptions , 1 , $alsoproductwithnosupplierprice , 'minwidth100 maxwidth500 widthcentpercentminusx' , $labelforradio );
2023-11-27 11:39:32 +01:00
if ( getDolGlobalString ( 'MAIN_AUTO_OPEN_SELECT2_ON_FOCUS_FOR_SUPPLIER_PRODUCTS' )) {
2019-11-30 15:22:25 +01:00
?>
2020-08-16 22:03:11 +02:00
< script >
2019-11-30 12:49:31 +01:00
$ ( document ) . ready ( function (){
// On first focus on a select2 combo, auto open the menu (this allow to use the keyboard only)
$ ( document ) . on ( 'focus' , '.select2-selection.select2-selection--single' , function ( e ) {
2024-12-19 01:05:39 +01:00
//console.log('focus on a select2 because of MAIN_AUTO_OPEN_SELECT2_ON_FOCUS_FOR_SUPPLIER_PRODUCTS');
2019-11-30 12:49:31 +01:00
if ( $ ( this ) . attr ( 'aria-labelledby' ) == 'select2-idprodfournprice-container' )
{
$ ( '#idprodfournprice' ) . select2 ( 'open' );
}
});
});
</ script >
2019-11-30 15:22:25 +01:00
< ? php
}
2019-11-30 12:49:31 +01:00
}
2023-10-10 21:29:19 +02:00
Fix: GETPOST(...,'int') to GETPOSTINT(...) (#28448)
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: Update spelling exceptions
* Qual: Ignore Phan Notice
2024-02-27 14:05:53 +01:00
$parentId = GETPOSTINT ( 'parentId' );
2023-10-10 21:29:19 +02:00
2023-10-10 22:10:37 +02:00
$addproducton = ( isModEnabled ( 'product' ) && $user -> hasRight ( 'produit' , 'creer' ));
$addserviceon = ( isModEnabled ( 'service' ) && $user -> hasRight ( 'service' , 'creer' ));
if ( $addproducton || $addserviceon ) {
if ( $addproducton && $addserviceon ) {
echo '<div id="dropdownAddProductAndService" class="dropdown inline-block">' ;
echo '<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" id="dropdownAddProductAndServiceLink" aria-haspopup="true" aria-expanded="false">' ;
echo '<span class="fa fa-plus-circle valignmiddle paddingleft"></span>' ;
echo '</a>' ;
echo '<div class="dropdown-menu" aria-labelledby="dropdownAddProductAndServiceLink" style="top:auto; left:auto;">' ;
echo '<a class="dropdown-item" href="' . DOL_URL_ROOT . '/product/card.php?action=create&type=0&backtopage=' . urlencode ( $_SERVER [ " PHP_SELF " ] . '?id=' . $object -> id ) . '"> ' . $langs -> trans ( " NewProduct " ) . '</a>' ;
echo '<a class="dropdown-item" href="' . DOL_URL_ROOT . '/product/card.php?action=create&type=1&backtopage=' . urlencode ( $_SERVER [ " PHP_SELF " ] . '?id=' . $object -> id ) . '"> ' . $langs -> trans ( " NewService " ) . '</a>' ;
echo '</div>' ;
echo '</div>' ;
} else {
if ( $addproducton ) {
$url = '/product/card.php?leftmenu=product&action=create&type=0&backtopage=' . urlencode ( $_SERVER [ " PHP_SELF " ]);
$newbutton = '<span class="fa fa-plus-circle valignmiddle paddingleft" title="' . $langs -> trans ( " NewProduct " ) . '"></span>' ;
if ( getDolGlobalInt ( 'MAIN_FEATURES_LEVEL' ) >= 2 ) {
// @FIXME Not working yet
$tmpbacktopagejsfields = 'addproduct:id,search_id' ;
2024-03-08 12:34:25 +01:00
// @phan-suppress-next-line PhanPluginSuspiciousParamOrder
2023-10-10 22:10:37 +02:00
print dolButtonToOpenUrlInDialogPopup ( 'addproduct' , $langs -> transnoentitiesnoconv ( 'AddProduct' ), $newbutton , $url , '' , '' , $tmpbacktopagejsfields );
} else {
print '<a href="' . DOL_URL_ROOT . '/product/card.php?action=create&type=0&backtopage=' . urlencode ( $_SERVER [ " PHP_SELF " ] . '?id=' . $object -> id ) . '" title="' . dol_escape_htmltag ( $langs -> trans ( " NewProduct " )) . '"><span class="fa fa-plus-circle valignmiddle paddingleft"></span></a>' ;
}
}
if ( $addserviceon ) {
$url = '/product/card.php?leftmenu=product&action=create&type=1&backtopage=' . urlencode ( $_SERVER [ " PHP_SELF " ]);
$newbutton = '<span class="fa fa-plus-circle valignmiddle paddingleft" title="' . $langs -> trans ( " NewService " ) . '"></span>' ;
if ( getDolGlobalInt ( 'MAIN_FEATURES_LEVEL' ) >= 2 ) {
// @FIXME Not working yet
$tmpbacktopagejsfields = 'addproduct:id,search_id' ;
2024-03-08 12:34:25 +01:00
// @phan-suppress-next-line PhanPluginSuspiciousParamOrder
2023-10-10 22:10:37 +02:00
print dolButtonToOpenUrlInDialogPopup ( 'addproduct' , $langs -> transnoentitiesnoconv ( 'AddService' ), $newbutton , $url , '' , '' , $tmpbacktopagejsfields );
} else {
print '<a href="' . DOL_URL_ROOT . '/product/card.php?action=create&type=1&backtopage=' . urlencode ( $_SERVER [ " PHP_SELF " ] . '?id=' . $object -> id ) . '" title="' . dol_escape_htmltag ( $langs -> trans ( " NewService " )) . '"><span class="fa fa-plus-circle valignmiddle paddingleft"></span></a>' ;
}
}
}
2024-11-26 21:22:41 +01:00
}
print '</span>' ;
?>
2023-10-10 21:29:19 +02:00
< script >
$ ( document ) . ready ( function (){
$ ( " #dropdownAddProductAndService .dropdown-toggle " ) . on ( " click " , function ( event ) {
console . log ( " toggle addproduct dropdown " );
event . preventDefault ();
$ ( " #dropdownAddProductAndService " ) . toggleClass ( " open " );
});
});
</ script >
< ? php
2019-11-30 12:49:31 +01:00
echo '<input type="hidden" name="pbq" id="pbq" value="">' ;
echo '</span>' ;
2014-11-28 02:05:40 +01:00
}
2021-11-16 14:09:18 +01:00
2023-11-27 11:39:32 +01:00
if ( getDolGlobalString ( 'MAIN_ADD_LINE_AT_POSITION' )) {
2021-11-22 16:13:46 +01:00
echo '<br>' . $langs -> trans ( 'AddLineOnPosition' ) . ' : <input type="number" name="rank" step="1" min="0" style="width: 5em;">' ;
2021-11-16 14:09:18 +01:00
}
2021-02-23 22:03:23 +01:00
if ( is_object ( $hookmanager ) && empty ( $senderissupplier )) {
2024-03-08 12:34:25 +01:00
$parameters = array ( 'fk_parent_line' => GETPOSTINT ( 'fk_parent_line' ));
2019-12-03 11:17:29 +01:00
$reshook = $hookmanager -> executeHooks ( 'formCreateProductOptions' , $parameters , $object , $action );
2019-11-30 12:49:31 +01:00
if ( ! empty ( $hookmanager -> resPrint )) {
print $hookmanager -> resPrint ;
}
2014-05-05 17:59:43 +02:00
}
2021-02-23 22:03:23 +01:00
if ( is_object ( $hookmanager ) && ! empty ( $senderissupplier )) {
2024-03-08 12:34:25 +01:00
$parameters = array ( 'htmlname' => 'addproduct' );
2019-12-03 11:17:29 +01:00
$reshook = $hookmanager -> executeHooks ( 'formCreateProductSupplierOptions' , $parameters , $object , $action );
2019-11-30 12:49:31 +01:00
if ( ! empty ( $hookmanager -> resPrint )) {
print $hookmanager -> resPrint ;
}
2014-05-05 17:59:43 +02:00
}
2022-08-23 20:02:37 +02:00
if ( isModEnabled ( " product " ) || isModEnabled ( " service " )) {
2021-02-10 18:03:45 +01:00
echo '<br>' ;
2022-09-25 06:03:47 +02:00
if ( isModEnabled ( 'variants' )) {
2019-11-30 12:49:31 +01:00
echo '<div id="attributes_box"></div>' ;
}
}
// Editor wysiwyg
require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php' ;
2019-12-03 11:17:29 +01:00
$nbrows = ROWS_2 ;
2024-09-10 15:32:26 +02:00
$enabled = getDolGlobalString ( 'FCKEDITOR_ENABLE_DETAILS' , '0' );
2023-11-27 11:39:32 +01:00
if ( getDolGlobalString ( 'MAIN_INPUT_DESC_HEIGHT' )) {
2024-01-05 04:18:53 +01:00
$nbrows = getDolGlobalString ( 'MAIN_INPUT_DESC_HEIGHT' );
2021-02-23 22:03:23 +01:00
}
2019-12-03 11:17:29 +01:00
$toolbarname = 'dolibarr_details' ;
2023-11-27 11:39:32 +01:00
if ( getDolGlobalString ( 'FCKEDITOR_ENABLE_DETAILS_FULL' )) {
2021-02-23 22:03:23 +01:00
$toolbarname = 'dolibarr_notes' ;
}
2024-09-10 15:32:26 +02:00
$doleditor = new DolEditor ( 'dp_desc' , GETPOST ( 'dp_desc' , 'restricthtml' ), '' , getDolGlobalInt ( 'MAIN_DOLEDITOR_HEIGHT' , 100 ), $toolbarname , '' , false , true , $enabled , $nbrows , '98%' );
2019-11-30 12:49:31 +01:00
$doleditor -> Create ();
// Show autofill date for recurring invoices
2022-08-23 20:02:37 +02:00
if ( isModEnabled ( " service " ) && ( $object -> element == 'facturerec' || $object -> element == 'invoice_supplier_rec' )) {
2019-11-30 12:49:31 +01:00
echo '<div class="divlinefordates"><br>' ;
echo $langs -> trans ( 'AutoFillDateFrom' ) . ' ' ;
2023-11-27 11:39:32 +01:00
if ( getDolGlobalString ( 'INVOICE_REC_DATE_TO_YES' )) {
2022-06-21 10:06:26 +02:00
$line -> date_start_fill = 1 ;
$line -> date_end_fill = 1 ;
}
2019-11-30 12:49:31 +01:00
echo $form -> selectyesno ( 'date_start_fill' , $line -> date_start_fill , 1 );
echo ' - ' ;
echo $langs -> trans ( 'AutoFillDateTo' ) . ' ' ;
echo $form -> selectyesno ( 'date_end_fill' , $line -> date_end_fill , 1 );
echo '</div>' ;
}
2020-12-22 12:52:01 +01:00
if ( is_object ( $objectline )) {
2021-03-01 20:37:16 +01:00
$temps = $objectline -> showOptionals ( $extrafields , 'create' , array (), '' , '' , 1 , 'line' );
2022-02-25 20:36:40 +01:00
2021-01-16 14:10:37 +01:00
if ( ! empty ( $temps )) {
print '<div style="padding-top: 10px" id="extrafield_lines_area_create" name="extrafield_lines_area_create">' ;
print $temps ;
print '</div>' ;
}
2020-12-22 12:52:01 +01:00
}
2019-11-30 12:49:31 +01:00
echo '</td>' ;
2022-02-07 14:34:27 +01:00
if ( $object -> element == 'supplier_proposal' || $object -> element == 'order_supplier' || $object -> element == 'invoice_supplier' || $object -> element == 'invoice_supplier_rec' ) { // We must have same test in printObjectLines
2023-12-04 12:07:53 +01:00
$coldisplay ++ ; ?>
< td class = " nobottom linecolrefsupplier " >< input id = " fourn_ref " name = " fourn_ref " class = " flat minwidth50 maxwidth100 maxwidth125onsmartphone " value = " <?php echo(GETPOSTISSET( " fourn_ref " ) ? GETPOST( " fourn_ref " , 'alpha', 2) : ''); ?> " ></ td >
2024-03-08 12:34:25 +01:00
< ? php
2023-12-04 12:07:53 +01:00
}
2019-11-30 15:22:25 +01:00
print '<td class="nobottom linecolvat right">' ;
2019-11-30 12:49:31 +01:00
$coldisplay ++ ;
2025-01-13 20:04:35 +01:00
$type_tva = 0 ;
2023-01-10 05:00:24 +01:00
if ( $object -> element == 'propal' || $object -> element == 'commande' || $object -> element == 'facture' || $object -> element == 'facturerec' ) {
$type_tva = 1 ;
2023-01-10 05:02:08 +01:00
} elseif ( $object -> element == 'supplier_proposal' || $object -> element == 'order_supplier' || $object -> element == 'invoice_supplier' || $object -> element == 'invoice_supplier_rec' ) {
2023-01-10 05:00:24 +01:00
$type_tva = 2 ;
}
2021-02-23 22:03:23 +01:00
if ( $seller -> tva_assuj == " 0 " ) {
2024-09-05 16:05:37 +02:00
echo '<input type="hidden" name="tva_tx" id="tva_tx" value="0">' . vatrate ( '0' , true );
2021-02-23 22:03:23 +01:00
} else {
2023-01-10 05:00:24 +01:00
echo $form -> load_tva ( 'tva_tx' , ( GETPOSTISSET ( " tva_tx " ) ? GETPOST ( " tva_tx " , 'alpha' , 2 ) : - 1 ), $seller , $buyer , 0 , 0 , '' , false , 1 , $type_tva );
2021-02-23 22:03:23 +01:00
}
2019-11-30 12:49:31 +01:00
?>
2014-05-05 14:30:08 +02:00
</ td >
2019-04-30 18:11:35 +02:00
< td class = " nobottom linecoluht right " >< ? php $coldisplay ++ ; ?>
2024-04-23 00:54:44 +02:00
< input type = " text " name = " price_ht " id = " price_ht " class = " flat right width50 " value = " <?php echo(GETPOSTISSET( " price_ht " ) ? GETPOST( " price_ht " , 'alpha', 2) : ''); ?> " >
2014-05-05 14:30:08 +02:00
</ td >
2017-06-23 11:20:29 +02:00
2020-01-01 22:58:26 +01:00
< ? php
2022-09-03 11:24:17 +02:00
if ( isModEnabled ( " multicurrency " ) && $this -> multicurrency_code != $conf -> currency ) {
2023-12-04 12:07:53 +01:00
$coldisplay ++ ; ?>
2019-11-30 12:49:31 +01:00
< td class = " nobottom linecoluht_currency right " >
2024-04-23 00:54:44 +02:00
< input type = " text " name = " multicurrency_price_ht " id = " multicurrency_price_ht " class = " flat right width50 " value = " <?php echo(GETPOSTISSET( " multicurrency_price_ht " ) ? GETPOST( " multicurrency_price_ht " , 'alpha', 2) : ''); ?> " >
2019-11-30 12:49:31 +01:00
</ td >
2020-01-01 23:14:13 +01:00
< ? php
2020-01-01 22:58:26 +01:00
}
2023-03-11 19:38:39 +01:00
if ( ! empty ( $inputalsopricewithtax ) && ! getDolGlobalInt ( 'MAIN_NO_INPUT_PRICE_WITH_TAX' )) {
2023-12-04 12:07:53 +01:00
$coldisplay ++ ; ?>
2019-11-30 12:49:31 +01:00
< td class = " nobottom linecoluttc right " >
2024-04-23 00:54:44 +02:00
< input type = " text " name = " price_ttc " id = " price_ttc " class = " flat right width50 " value = " <?php echo(GETPOSTISSET( " price_ttc " ) ? GETPOST( " price_ttc " , 'alpha', 2) : ''); ?> " >
2019-11-30 12:49:31 +01:00
</ td >
2025-01-13 20:04:35 +01:00
< ? php
2020-01-01 22:58:26 +01:00
}
2019-11-30 12:49:31 +01:00
$coldisplay ++ ;
2019-04-30 18:11:35 +02:00
?>
2022-10-25 12:22:43 +02:00
< td class = " nobottom linecolqty right " >
2023-11-27 11:39:32 +01:00
< ? php $default_qty = ( ! getDolGlobalString ( 'MAIN_OBJECTLINE_CREATE_EMPTY_QTY_BY_DEFAULT' ) ? 1 : '' ); ?>
2023-12-04 12:07:53 +01:00
< input type = " text " name = " qty " id = " qty " class = " flat width40 right " value = " <?php echo(GETPOSTISSET( " qty " ) ? GETPOST( " qty " , 'alpha', 2) : $default_qty ); ?> " >
2014-05-05 14:30:08 +02:00
</ td >
2019-11-30 12:49:31 +01:00
< ? php
2022-12-30 12:55:53 +01:00
if ( getDolGlobalInt ( 'PRODUCT_USE_UNITS' )) {
2019-11-30 12:49:31 +01:00
$coldisplay ++ ;
print '<td class="nobottom linecoluseunit left">' ;
2025-02-05 12:55:10 +01:00
print $form -> selectUnits ( empty ( $line -> fk_unit ) ? getDolGlobalInt ( 'PRODUCT_USE_UNITS' ) : $line -> fk_unit , " units " );
2019-11-30 12:49:31 +01:00
print '</td>' ;
}
$remise_percent = $buyer -> remise_percent ;
2020-01-01 22:58:26 +01:00
if ( $object -> element == 'supplier_proposal' || $object -> element == 'order_supplier' || $object -> element == 'invoice_supplier' ) {
2019-11-30 12:49:31 +01:00
$remise_percent = $seller -> remise_supplier_percent ;
}
2019-10-27 17:01:23 +01:00
$coldisplay ++ ;
2019-11-30 12:49:31 +01:00
?>
2022-10-25 12:22:43 +02:00
2023-12-04 12:07:53 +01:00
< td class = " nobottom nowrap linecoldiscount right " >< input type = " text " name = " remise_percent " id = " remise_percent " class = " flat width40 right " value = " <?php echo(GETPOSTISSET( " remise_percent " ) ? GETPOST( " remise_percent " , 'alpha', 2) : ( $remise_percent ? $remise_percent : '')); ?> " >< span class = " opacitymedium hideonsmartphone " >%</ span ></ td >
2019-11-30 12:49:31 +01:00
< ? php
2021-06-28 20:00:10 +02:00
if ( isset ( $this -> situation_cycle_ref ) && $this -> situation_cycle_ref ) {
2019-11-30 12:49:31 +01:00
$coldisplay ++ ;
2024-01-13 19:48:20 +01:00
print '<td class="nobottom nowrap right"><input class="flat right" type="text" size="1" value="" name="progress"><span class="opacitymedium hideonsmartphone">%</span></td>' ;
2024-06-18 20:21:56 +02:00
if ( getDolGlobalInt ( 'INVOICE_USE_SITUATION' ) == 2 ) {
$coldisplay ++ ;
print '<td class="nobottom nowrap right"></td>' ;
}
2019-11-30 12:49:31 +01:00
$coldisplay ++ ;
print '<td></td>' ;
}
2020-01-01 22:58:26 +01:00
if ( ! empty ( $usemargins )) {
2023-10-15 15:32:35 +02:00
if ( $user -> hasRight ( 'margins' , 'creer' )) {
2023-12-04 12:07:53 +01:00
$coldisplay ++ ; ?>
2019-10-23 03:50:48 +02:00
< td class = " nobottom margininfos linecolmargin right " >
<!-- For predef product -->
2025-01-13 20:04:35 +01:00
< ? php if ( isModEnabled ( " product " ) || isModEnabled ( " service " )) { ?>
2020-12-31 15:05:17 +01:00
< select id = " fournprice_predef " name = " fournprice_predef " class = " flat minwidth75imp maxwidth150 " style = " display: none; " ></ select >
2025-01-13 20:04:35 +01:00
< ? php } ?>
2019-10-23 03:50:48 +02:00
<!-- For free product -->
2023-12-04 12:07:53 +01:00
< input type = " text " id = " buying_price " name = " buying_price " class = " flat maxwidth75 right " value = " <?php echo(GETPOSTISSET( " buying_price " ) ? GETPOST( " buying_price " , 'alpha', 2) : ''); ?> " >
2019-10-23 03:50:48 +02:00
</ td >
2025-01-13 20:04:35 +01:00
< ? php
if ( getDolGlobalString ( 'DISPLAY_MARGIN_RATES' )) {
echo '<td class="nobottom nowraponall margininfos right"><input class="flat right width40" type="text" id="np_marginRate" name="np_marginRate" value="' . ( GETPOSTISSET ( " np_marginRate " ) ? GETPOST ( " np_marginRate " , 'alpha' , 2 ) : '' ) . '"><span class="np_marginRate opacitymedium hideonsmartphone">%</span></td>' ;
$coldisplay ++ ;
}
if ( getDolGlobalString ( 'DISPLAY_MARK_RATES' )) {
echo '<td class="nobottom nowraponall margininfos right"><input class="flat right width40" type="text" id="np_markRate" name="np_markRate" value="' . ( GETPOSTISSET ( " np_markRate " ) ? GETPOST ( " np_markRate " , 'alpha' , 2 ) : '' ) . '"><span class="np_markRate opacitymedium hideonsmartphone">%</span></td>' ;
$coldisplay ++ ;
}
2014-05-05 14:30:08 +02:00
}
}
2019-12-03 11:17:29 +01:00
$coldisplay += $colspan ;
2019-11-30 12:49:31 +01:00
?>
2019-01-20 23:36:39 +01:00
< td class = " nobottom linecoledit center valignmiddle " colspan = " <?php echo $colspan ; ?> " >
2021-07-04 21:14:46 +02:00
< input type = " submit " class = " button reposition " value = " <?php echo $langs->trans ('Add'); ?> " name = " addline " id = " addline " >
2014-05-05 14:30:08 +02:00
</ td >
</ tr >
2018-03-20 10:10:21 +01:00
< ? php
2022-08-23 20:02:37 +02:00
if (( isModEnabled ( " service " ) || ( $object -> element == 'contrat' )) && $dateSelector && GETPOST ( 'type' ) != '0' ) { // We show date field if required
2024-03-08 12:34:25 +01:00
print '<tr id="trlinefordates" class="oddeven">' . " \n " ;
2023-11-27 11:39:32 +01:00
if ( getDolGlobalString ( 'MAIN_VIEW_LINE_NUMBER' )) {
2020-11-30 20:13:42 +01:00
print '<td></td>' ;
}
2024-03-08 12:34:25 +01:00
print '<td colspan="' . ( $coldisplay - ( ! getDolGlobalString ( 'MAIN_VIEW_LINE_NUMBER' ) ? 0 : 1 )) . '">' ;
2024-11-11 14:33:53 +01:00
$date_start = dol_mktime ( GETPOSTINT ( 'date_starthour' ), GETPOSTINT ( 'date_startmin' ), 0 , GETPOSTINT ( 'date_startmonth' ), GETPOSTINT ( 'date_startday' ), GETPOSTINT ( 'date_startyear' ));
$date_end = dol_mktime ( GETPOSTINT ( 'date_starthour' ), GETPOSTINT ( 'date_startmin' ), 0 , GETPOSTINT ( 'date_endmonth' ), GETPOSTINT ( 'date_endday' ), GETPOSTINT ( 'date_endyear' ));
2019-05-15 12:26:39 +02:00
2024-03-08 12:34:25 +01:00
$prefillDates = false ;
2025-01-13 20:04:35 +01:00
$date_start_prefill = 0 ;
$date_end_prefill = 0 ;
2019-05-15 12:26:39 +02:00
2023-11-27 11:39:32 +01:00
if ( getDolGlobalString ( 'MAIN_FILL_SERVICE_DATES_FROM_LAST_SERVICE_LINE' ) && ! empty ( $object -> lines )) {
2021-02-23 22:03:23 +01:00
for ( $i = count ( $object -> lines ) - 1 ; $i >= 0 ; $i -- ) {
2020-09-07 10:18:17 +02:00
$lastline = $object -> lines [ $i ];
2019-05-15 12:26:39 +02:00
2021-02-23 22:03:23 +01:00
if ( $lastline -> product_type == Product :: TYPE_SERVICE && ( ! empty ( $lastline -> date_start ) || ! empty ( $lastline -> date_end ))) {
2020-09-07 10:18:17 +02:00
$date_start_prefill = $lastline -> date_start ;
$date_end_prefill = $lastline -> date_end ;
2019-05-15 12:26:39 +02:00
2020-09-07 10:18:17 +02:00
$prefillDates = true ;
break ;
}
}
}
2019-05-15 12:26:39 +02:00
2021-02-23 22:03:23 +01:00
if ( ! empty ( $object -> element ) && $object -> element == 'contrat' ) {
2020-01-01 22:45:47 +01:00
print $langs -> trans ( " DateStartPlanned " ) . ' ' ;
print $form -> selectDate ( $date_start , " date_start " , $usehm , $usehm , 1 , " addproduct " );
print ' ' . $langs -> trans ( " DateEndPlanned " ) . ' ' ;
print $form -> selectDate ( $date_end , " date_end " , $usehm , $usehm , 1 , " addproduct " );
2020-05-21 15:05:19 +02:00
} else {
2020-01-01 22:45:47 +01:00
print $langs -> trans ( 'ServiceLimitedDuration' ) . ' ' . $langs -> trans ( 'From' ) . ' ' ;
2023-11-27 11:39:32 +01:00
print $form -> selectDate ( $date_start , 'date_start' , ! getDolGlobalString ( 'MAIN_USE_HOURMIN_IN_DATE_RANGE' ) ? 0 : 1 , ! getDolGlobalString ( 'MAIN_USE_HOURMIN_IN_DATE_RANGE' ) ? 0 : 1 , 1 , " addproduct " , 1 , 0 );
2020-01-01 22:45:47 +01:00
print ' ' . $langs -> trans ( 'to' ) . ' ' ;
2023-11-27 11:39:32 +01:00
print $form -> selectDate ( $date_end , 'date_end' , ! getDolGlobalString ( 'MAIN_USE_HOURMIN_IN_DATE_RANGE' ) ? 0 : 1 , ! getDolGlobalString ( 'MAIN_USE_HOURMIN_IN_DATE_RANGE' ) ? 0 : 1 , 1 , " addproduct " , 1 , 0 );
2022-12-30 18:43:43 +01:00
}
2019-05-15 12:26:39 +02:00
2021-02-23 22:03:23 +01:00
if ( $prefillDates ) {
2020-09-08 21:27:28 +02:00
echo ' <span class="small"><a href="#" id="prefill_service_dates">' . $langs -> trans ( 'FillWithLastServiceDates' ) . '</a></span>' ;
2020-09-07 10:18:17 +02:00
}
2019-05-15 12:26:39 +02:00
2024-03-08 12:34:25 +01:00
print '<script>' ;
2019-05-15 12:26:39 +02:00
2021-02-23 22:03:23 +01:00
if ( $prefillDates ) {
2020-08-11 12:42:27 +02:00
?>
2021-02-23 22:03:23 +01:00
function prefill_service_dates ()
{
2022-10-25 12:22:43 +02:00
$ ( '#date_start' ) . val ( " <?php echo dol_escape_js(dol_print_date( $date_start_prefill , 'day')); ?> " ) . trigger ( 'change' );
$ ( '#date_end' ) . val ( " <?php echo dol_escape_js(dol_print_date( $date_end_prefill , 'day')); ?> " ) . trigger ( 'change' );
2019-05-15 12:26:39 +02:00
2021-02-23 22:03:23 +01:00
return false ; // Prevent default link behaviour (which is go to href URL)
}
2019-05-15 12:26:39 +02:00
2021-02-23 22:03:23 +01:00
$ ( document ) . ready ( function ()
{
$ ( '#prefill_service_dates' ) . click ( prefill_service_dates );
});
2019-05-15 12:26:39 +02:00
2020-08-11 12:42:27 +02:00
< ? php
2019-05-15 12:26:39 +02:00
}
2020-01-01 22:45:47 +01:00
if ( ! $date_start ) {
if ( isset ( $conf -> global -> MAIN_DEFAULT_DATE_START_HOUR )) {
2023-10-15 15:32:35 +02:00
print 'jQuery("#date_starthour").val("' . getDolGlobalString ( 'MAIN_DEFAULT_DATE_START_HOUR' ) . '");' ;
2016-03-03 16:11:42 +01:00
}
2020-01-01 22:45:47 +01:00
if ( isset ( $conf -> global -> MAIN_DEFAULT_DATE_START_MIN )) {
2023-10-15 15:32:35 +02:00
print 'jQuery("#date_startmin").val("' . getDolGlobalString ( 'MAIN_DEFAULT_DATE_START_MIN' ) . '");' ;
2016-03-03 16:11:42 +01:00
}
2020-01-01 22:45:47 +01:00
}
if ( ! $date_end ) {
if ( isset ( $conf -> global -> MAIN_DEFAULT_DATE_END_HOUR )) {
2023-10-15 15:32:35 +02:00
print 'jQuery("#date_endhour").val("' . getDolGlobalString ( 'MAIN_DEFAULT_DATE_END_HOUR' ) . '");' ;
2016-03-03 16:11:42 +01:00
}
2020-01-01 22:45:47 +01:00
if ( isset ( $conf -> global -> MAIN_DEFAULT_DATE_END_MIN )) {
2023-10-15 15:32:35 +02:00
print 'jQuery("#date_endmin").val("' . getDolGlobalString ( 'MAIN_DEFAULT_DATE_END_MIN' ) . '");' ;
2020-01-01 22:45:47 +01:00
}
}
2024-03-08 12:34:25 +01:00
print '</script>' ;
print '</td>' ;
print '</tr>' . " \n " ;
2019-11-30 15:22:25 +01:00
}
2014-05-10 20:10:59 +02:00
2014-05-05 14:30:08 +02:00
2020-01-01 22:45:47 +01:00
print " <script> \n " ;
2024-12-19 01:05:39 +01:00
2023-10-15 15:32:35 +02:00
if ( ! empty ( $usemargins ) && $user -> hasRight ( 'margins' , 'creer' )) {
2020-01-01 22:45:47 +01:00
?>
/* Some js test when we click on button "Add" */
jQuery ( document ) . ready ( function () {
< ? php
2023-11-27 11:39:32 +01:00
if ( getDolGlobalString ( 'DISPLAY_MARGIN_RATES' )) { ?>
2020-01-01 22:58:26 +01:00
$ ( " input[name='np_marginRate']:first " ) . blur ( function ( e ) {
2024-12-19 01:05:39 +01:00
console . log ( " np_marginRate blur " );
2020-10-25 19:13:09 +01:00
return checkFreeLine ( e , " np_marginRate " );
2020-01-01 22:58:26 +01:00
});
< ? php
}
2023-11-27 11:39:32 +01:00
if ( getDolGlobalString ( 'DISPLAY_MARK_RATES' )) { ?>
2020-01-01 22:58:26 +01:00
$ ( " input[name='np_markRate']:first " ) . blur ( function ( e ) {
2024-12-19 01:05:39 +01:00
console . log ( " np_markRate blur " );
2020-10-25 19:13:09 +01:00
return checkFreeLine ( e , " np_markRate " );
2020-01-01 22:58:26 +01:00
});
< ? php
2023-12-04 12:07:53 +01:00
} ?>
2020-01-01 22:45:47 +01:00
});
2014-05-05 14:30:08 +02:00
2020-01-01 22:45:47 +01:00
/* TODO This does not work for number with thousand separator that is , */
function checkFreeLine ( e , npRate )
{
2021-02-10 02:17:01 +01:00
var buying_price = $ ( " input[name='buying_price']:first " );
var remise = $ ( " input[name='remise_percent']:first " );
2019-03-06 13:01:01 +01:00
2021-02-10 02:17:01 +01:00
var rate = $ ( " input[name=' " + npRate + " ']:first " );
if ( rate . val () == '' )
return true ;
2020-01-01 22:45:47 +01:00
2021-02-10 02:17:01 +01:00
if ( ! $ . isNumeric ( rate . val () . replace ( ',' , '.' )))
{
alert ( '<?php echo dol_escape_js($langs->trans("rateMustBeNumeric")); ?>' );
e . stopPropagation ();
setTimeout ( function () { rate . focus () }, 50 );
return false ;
}
if ( npRate == " np_markRate " && rate . val () >= 100 )
{
alert ( '<?php echo dol_escape_js($langs->trans("markRateShouldBeLesserThan100")); ?>' );
e . stopPropagation ();
setTimeout ( function () { rate . focus () }, 50 );
return false ;
}
2020-01-01 22:45:47 +01:00
2021-02-10 02:17:01 +01:00
var price = 0 ;
remisejs = price2numjs ( remise . val ());
2020-01-01 22:45:47 +01:00
2021-02-10 02:17:01 +01:00
if ( remisejs != 100 ) // If a discount not 100 or no discount
{
if ( remisejs == '' ) remisejs = 0 ;
2020-01-01 22:45:47 +01:00
2021-02-10 02:17:01 +01:00
bpjs = price2numjs ( buying_price . val ());
ratejs = price2numjs ( rate . val ());
2020-01-01 22:45:47 +01:00
2021-02-10 02:17:01 +01:00
if ( npRate == " np_marginRate " )
price = (( bpjs * ( 1 + ratejs / 100 )) / ( 1 - remisejs / 100 ));
else if ( npRate == " np_markRate " )
price = (( bpjs / ( 1 - ratejs / 100 )) / ( 1 - remisejs / 100 ));
}
2020-02-19 03:07:12 +01:00
2024-01-13 19:48:20 +01:00
$ ( " input[name='price_ht']:first " ) . val ( price ); // TODO Must use a function like php price to have here a formatted value
2020-01-01 22:45:47 +01:00
2021-02-10 02:17:01 +01:00
return true ;
2020-01-01 22:45:47 +01:00
}
< ? php
}
?>
2024-12-19 01:05:39 +01:00
/* Function to set focus on description */
function setFocusOnDescription () {
console . log ( " Set focus on description field " );
/* this focus code works on a standard textarea but not if field was replaced with CKEDITOR */
jQuery ( '#dp_desc' ) . focus ();
/* this focus code works for CKEDITOR */
if ( typeof CKEDITOR == " object " && typeof CKEDITOR . instances != " undefined " ) {
var editor = CKEDITOR . instances [ 'dp_desc' ];
if ( editor ) {
editor . focus ();
}
}
}
2020-01-01 22:45:47 +01:00
/* JQuery for product free or predefined select */
jQuery ( document ) . ready ( function () {
2020-02-19 03:07:12 +01:00
jQuery ( " #price_ht " ) . keyup ( function ( event ) {
// console.log(event.which); // discard event tag and arrows
if ( event . which != 9 && ( event . which < 37 || event . which > 40 ) && jQuery ( " #price_ht " ) . val () != '' ) {
2024-12-19 01:05:39 +01:00
jQuery ( " #price_ttc " ) . val ( '' );
jQuery ( " #multicurrency_subprice " ) . val ( '' );
jQuery ( " #multicurrency_price_ht " ) . val ( '' );
}
});
2020-01-01 22:45:47 +01:00
2024-12-19 01:05:39 +01:00
jQuery ( " #price_ttc " ) . keyup ( function ( event ) {
// console.log(event.which); // discard event tag and arrows
if ( event . which != 9 && ( event . which < 37 || event . which > 40 ) && jQuery ( " #price_ttc " ) . val () != '' ) {
jQuery ( " #price_ht " ) . val ( '' );
jQuery ( " #multicurrency_subprice " ) . val ( '' );
jQuery ( " #multicurrency_price_ht " ) . val ( '' );
2021-02-10 02:17:01 +01:00
}
2024-12-19 01:05:39 +01:00
});
jQuery ( " #multicurrency_subprice " ) . keyup ( function ( event ) {
// console.log(event.which); // discard event tag and arrows
if ( event . which != 9 && ( event . which < 37 || event . which > 40 ) && jQuery ( " #multicurrency_subprice " ) . val () != '' ) {
jQuery ( " #price_ht " ) . val ( '' );
jQuery ( " #price_ttc " ) . val ( '' );
}
});
jQuery ( " #multicurrency_price_ht " ) . keyup ( function ( event ) {
// console.log(event.which); // discard event tag and arrows
if ( event . which != 9 && ( event . which < 37 || event . which > 40 ) && jQuery ( " #multicurrency_price_ht " ) . val () != '' ) {
jQuery ( " #price_ht " ) . val ( '' );
jQuery ( " #price_ttc " ) . val ( '' );
}
});
2022-03-26 11:44:36 +01:00
2024-12-19 01:05:39 +01:00
$ ( " #select_type " ) . change ( function ()
2021-02-10 02:17:01 +01:00
{
2024-12-19 01:05:39 +01:00
setforfree ();
2020-01-01 22:45:47 +01:00
2024-12-19 01:05:39 +01:00
console . log ( " Hide/show date according to product type select_type= " + jQuery ( '#select_type' ) . val ());
if ( jQuery ( '#select_type' ) . val () == '0' )
{
jQuery ( '#trlinefordates' ) . hide ();
jQuery ( '.divlinefordates' ) . hide ();
}
else
{
jQuery ( '#trlinefordates' ) . show ();
jQuery ( '.divlinefordates' ) . show ();
}
if ( jQuery ( " #select_type " ) . val () != '-1' ) {
console . log ( " we remove class " );
jQuery ( " #select_type " ) . removeClass ( " placeholder " );
setFocusOnDescription ();
} else {
console . log ( " we add class " );
jQuery ( " #select_type " ) . addClass ( " placeholder " );
}
});
$ ( " #prod_entry_mode_free " ) . on ( " click " , function () {
setforfree ();
});
$ ( " #prod_entry_mode_predef " ) . on ( " click " , function () {
console . log ( " click prod_entry_mode_predef " );
jQuery ( " #select_type " ) . addClass ( " placeholder " );
setforpredef ();
jQuery ( '#trlinefordates' ) . show ();
});
2020-01-01 22:45:47 +01:00
< ? php
2024-12-19 01:05:39 +01:00
if ( ! $freelines ) { ?>
jQuery ( " #prod_entry_mode_predef " ) . click ();
< ? php
} else { ?>
jQuery ( " #select_type " ) . addClass ( " placeholder " );
< ? php
}
2021-07-21 08:26:41 +02:00
2024-12-19 01:05:39 +01:00
if ( in_array ( $this -> table_element_line , array ( 'propaldet' , 'commandedet' , 'facturedet' ))) { ?>
$ ( " #date_start, #date_end " ) . focusout ( function () {
console . log ( " focusout of date " );
let type = $ ( this ) . attr ( 'type' );
let mandatoryP = $ ( this ) . attr ( 'mandatoryperiod' );
if ( type == 1 && mandatoryP == 1 ) {
if ( $ ( this ) . val () == '' && ! $ ( this ) . hasClass ( 'inputmandatory' )) {
$ ( this ) . addClass ( 'inputmandatory' );
} else {
$ ( this ) . removeClass ( 'inputmandatory' );
}
2021-07-21 08:56:40 +02:00
}
2024-12-19 01:05:39 +01:00
});
2025-01-13 20:04:35 +01:00
< ? php
2024-12-19 01:05:39 +01:00
} ?>
2020-01-01 22:45:47 +01:00
2024-12-19 01:05:39 +01:00
/* When changing predefined product, we reload list of supplier prices required for margin combo */
$ ( " #idprod, #idprodfournprice " ) . change ( function ()
{
console . log ( " objectline_create.tpl Call method change() after change on #idprod or #idprodfournprice (senderissupplier=<?php echo $senderissupplier ; ?>). this.val = " + $ ( this ) . val ());
2022-12-07 12:36:37 +01:00
2024-12-19 01:05:39 +01:00
setforpredef (); // TODO Keep vat combo visible and set it to first entry into list that match result of get_default_tva(product)
2018-03-01 02:37:18 +01:00
2024-12-19 01:05:39 +01:00
jQuery ( '#trlinefordates' ) . show ();
2020-07-06 15:34:26 +02:00
2024-12-19 01:05:39 +01:00
< ? php
if ( ! getDolGlobalString ( 'MAIN_DISABLE_EDIT_PREDEF_PRICEHT' ) && empty ( $senderissupplier )) {
?>
var pbq = parseInt ( $ ( 'option:selected' , this ) . attr ( 'data-pbq' )); /* If product was selected with a HTML select */
if ( isNaN ( pbq )) { pbq = jQuery ( '#idprod' ) . attr ( 'data-pbq' ); } /* If product was selected with a HTML input with autocomplete */
2021-07-20 11:23:35 +02:00
2024-12-19 01:05:39 +01:00
if (( jQuery ( '#idprod' ) . val () > 0 || jQuery ( '#idprodfournprice' ) . val ()) && ! isNaN ( pbq ) && pbq > 0 )
{
console . log ( " objectline_create.tpl We are in a price per qty context, we do not call ajax/product, init of fields is done few lines later " );
} else {
< ? php if ( getDolGlobalString ( 'PRODUIT_CUSTOMER_PRICES_BY_QTY' ) || getDolGlobalString ( 'PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES' )) { ?>
if ( isNaN ( pbq )) { console . log ( " We use experimental option PRODUIT_CUSTOMER_PRICES_BY_QTY or PRODUIT_CUSTOMER_PRICES_BY_QTY but we could not get the id of pbq from product combo list, so load of price may be 0 if product has different prices " ); }
< ? php } ?>
// Get the price for the product and display it
console . log ( " Load unit price and set it into #price_ht or #price_ttc for product id= " + $ ( this ) . val () + " socid=<?php print $object->socid ; ?> " );
$ . post ( '<?php echo DOL_URL_ROOT; ?>/product/ajax/products.php?action=fetch' ,
{ 'id' : $ ( this ) . val (), 'socid' : < ? php print $object -> socid ; ?> , 'token': '<?php print currentToken(); ?>', 'addalsovatforthirdpartyid': 1 },
function ( data ) {
console . log ( " objectline_create.tpl Load unit price ends, we got value ht= " + data . price_ht + " ttc= " + data . price_ttc + " pricebasetype= " + data . pricebasetype );
$ ( '#date_start' ) . removeAttr ( 'type' );
$ ( '#date_end' ) . removeAttr ( 'type' );
$ ( '#date_start' ) . attr ( 'type' , data . type );
$ ( '#date_end' ) . attr ( 'type' , data . type );
$ ( '#date_start' ) . removeAttr ( 'mandatoryperiod' );
$ ( '#date_end' ) . removeAttr ( 'mandatoryperiod' );
$ ( '#date_start' ) . attr ( 'mandatoryperiod' , data . mandatory_period );
$ ( '#date_end' ) . attr ( 'mandatoryperiod' , data . mandatory_period );
// service and we set mandatory_period to true
if ( data . mandatory_period == 1 && data . type == 1 ) {
jQuery ( '#date_start' ) . addClass ( 'inputmandatory' );
jQuery ( '#date_end' ) . addClass ( 'inputmandatory' );
} else {
jQuery ( '#date_start' ) . removeClass ( 'inputmandatory' );
jQuery ( '#date_end' ) . removeClass ( 'inputmandatory' );
}
if ( < ? php echo ( int ) $inputalsopricewithtax ; ?> == 1 && data.pricebasetype == 'TTC' && <?php print getDolGlobalInt('MAIN_NO_INPUT_PRICE_WITH_TAX') ? 'false' : 'true'; ?>) {
console . log ( " objectline_create.tpl set content of price_ttc " );
jQuery ( " #price_ttc " ) . val ( data . price_ttc );
} else {
console . log ( " objectline_create.tpl set content of price_ht " );
jQuery ( " #price_ht " ) . val ( data . price_ht );
}
2022-12-07 12:36:37 +01:00
2024-12-19 01:05:39 +01:00
// Set values for any fields in the form options_SOMETHING
for ( var key in data . array_options ) {
if ( data . array_options . hasOwnProperty ( key )) {
var field = jQuery ( " # " + key );
if ( field . length > 0 ){
console . log ( " objectline_create.tpl set content of options_ " + key );
field . val ( data . array_options [ key ]);
}
2024-02-12 05:38:51 +01:00
}
}
2024-12-19 01:05:39 +01:00
var tva_tx = data . tva_tx ;
var default_vat_code = data . default_vat_code ;
// Now set the VAT
var stringforvatrateselection = tva_tx ;
if ( typeof default_vat_code != 'undefined' && default_vat_code != null && default_vat_code != '' ) {
stringforvatrateselection = stringforvatrateselection + ' (' + default_vat_code + ')' ;
2023-01-10 21:46:11 +01:00
< ? php
2024-12-19 01:05:39 +01:00
// Special case for India
if ( getDolGlobalString ( 'MAIN_SALETAX_AUTOSWITCH_I_CS_FOR_INDIA' )) {
2023-01-10 21:46:11 +01:00
?>
2024-12-19 01:05:39 +01:00
console . log ( " MAIN_SALETAX_AUTOSWITCH_I_CS_FOR_INDIA is on so we check if we need to autoswith the vat code " );
console . log ( " mysoc->country_code=<?php echo $mysoc->country_code ; ?> thirdparty->country_code=<?php echo $object->thirdparty ->country_code; ?> " );
new_default_vat_code = default_vat_code ;
2023-01-10 21:46:11 +01:00
< ? php
2024-12-19 01:05:39 +01:00
if ( $mysoc -> country_code == 'IN' && ! empty ( $object -> thirdparty ) && $object -> thirdparty -> country_code == 'IN' && $mysoc -> state_code == $object -> thirdparty -> state_code ) {
// We are in India and states are same, we revert the vat code "I-x" into "CS-x"
?>
console . log ( " Countries are both IN and states are same, so we revert I into CS in default_vat_code= " + default_vat_code );
new_default_vat_code = default_vat_code . replace ( /^ I\ -/ , 'C+S-' );
< ? php
} elseif ( $mysoc -> country_code == 'IN' && ! empty ( $object -> thirdparty ) && $object -> thirdparty -> country_code == 'IN' && $mysoc -> state_code != $object -> thirdparty -> state_code ) {
// We are in India and states differs, we revert the vat code "CS-x" into "I-x"
?>
console . log ( " Countries are both IN and states differs, so we revert CS into I in default_vat_code= " + default_vat_code );
new_default_vat_code = default_vat_code . replace ( /^ C\ + S\ -/ , 'I-' );
< ? php
} ?>
if ( new_default_vat_code != default_vat_code && jQuery ( '#tva_tx option:contains("' + new_default_vat_code + '")' ) . val ()) {
console . log ( " We found en entry into VAT with new default_vat_code, we will use it " );
stringforvatrateselection = jQuery ( '#tva_tx option:contains("' + new_default_vat_code + '")' ) . val ();
}
2023-01-10 21:46:11 +01:00
< ? php
2023-12-04 12:07:53 +01:00
} ?>
2024-12-19 01:05:39 +01:00
}
// Set vat rate if field is an input box
$ ( '#tva_tx' ) . val ( tva_tx );
// Set vat rate by selecting the combo
//$('#tva_tx option').val(tva_tx); // This is bugged, it replaces the vat key of all options
$ ( '#tva_tx option' ) . removeAttr ( 'selected' );
console . log ( " stringforvatrateselection= " + stringforvatrateselection + " -> value of option label for this key= " + $ ( '#tva_tx option[value="' + stringforvatrateselection + '"]' ) . val ());
$ ( '#tva_tx option[value="' + stringforvatrateselection + '"]' ) . prop ( 'selected' , true );
2023-01-10 21:46:11 +01:00
< ? php
2024-12-19 01:05:39 +01:00
if ( getDolGlobalInt ( 'PRODUIT_AUTOFILL_DESC' ) == 1 ) {
if ( getDolGlobalInt ( 'MAIN_MULTILANGS' ) && getDolGlobalString ( 'PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE' )) { ?>
var proddesc = data . desc_trans ;
2025-01-13 20:04:35 +01:00
< ? php
2024-12-19 01:05:39 +01:00
} else { ?>
var proddesc = data . desc ;
< ? php
} ?>
console . log ( " objectline_create.tpl Load description into text area : " + proddesc );
2024-03-08 12:34:25 +01:00
< ? php
2024-12-19 01:05:39 +01:00
if ( getDolGlobalString ( 'FCKEDITOR_ENABLE_DETAILS' )) { ?>
if ( typeof CKEDITOR == " object " && typeof CKEDITOR . instances != " undefined " )
{
var editor = CKEDITOR . instances [ 'dp_desc' ];
if ( editor ) {
editor . setData ( proddesc );
}
}
2025-01-13 20:04:35 +01:00
< ? php
2024-12-19 01:05:39 +01:00
} else { ?>
jQuery ( '#dp_desc' ) . text ( proddesc );
< ? php
} ?>
2024-03-08 12:34:25 +01:00
< ? php
} ?>
< ? php
2024-12-19 01:05:39 +01:00
if ( getDolGlobalString ( 'PRODUCT_LOAD_EXTRAFIELD_INTO_OBJECTLINES' )) { ?>
jQuery . each ( data . array_options , function ( key , value ) {
jQuery ( 'div[class*="det' + key . replace ( 'options_' , '_extras_' ) + '"] > #' + key ) . val ( value );
});
2025-01-13 20:04:35 +01:00
< ? php
2024-03-08 12:34:25 +01:00
} ?>
2024-12-19 01:05:39 +01:00
},
'json'
);
}
2025-01-13 20:04:35 +01:00
< ? php
2020-02-19 03:07:12 +01:00
}
2024-12-19 01:05:39 +01:00
if ( ! empty ( $usemargins ) && $user -> hasRight ( 'margins' , 'creer' )) {
$langs -> load ( 'stocks' ); ?>
2016-07-23 16:37:21 +02:00
2024-12-19 01:05:39 +01:00
/* Code for margin */
$ ( " #fournprice_predef " ) . find ( " option " ) . remove ();
$ ( " #fournprice_predef " ) . hide ();
$ ( " #buying_price " ) . val ( " " ) . show ();
2020-03-04 00:38:43 +01:00
2024-12-19 01:05:39 +01:00
/* Call post to load content of combo list fournprice_predef */
var token = '<?php echo currentToken(); ?>' ; // For AJAX Call we use old 'token' and not 'newtoken'
$ . post ( '<?php echo DOL_URL_ROOT; ?>/fourn/ajax/getSupplierPrices.php?bestpricefirst=1' , { 'idprod' : $ ( this ) . val (), 'token' : token }, function ( data ) {
if ( data && data . length > 0 )
{
var options = '' ; var defaultkey = '' ; var defaultprice = '' ; var bestpricefound = 0 ;
2016-07-23 16:37:21 +02:00
2024-12-19 01:05:39 +01:00
var bestpriceid = 0 ; var bestpricevalue = 0 ;
var pmppriceid = 0 ; var pmppricevalue = 0 ;
var costpriceid = 0 ; var costpricevalue = 0 ;
2019-09-07 13:12:39 +02:00
2024-12-19 01:05:39 +01:00
/* setup of margin calculation */
var defaultbuyprice = ' < ? php
if ( isset ( $conf -> global -> MARGIN_TYPE )) {
if ( getDolGlobalString ( 'MARGIN_TYPE' ) == '1' ) {
print 'bestsupplierprice' ;
}
if ( getDolGlobalString ( 'MARGIN_TYPE' ) == 'pmp' ) {
print 'pmp' ;
}
if ( getDolGlobalString ( 'MARGIN_TYPE' ) == 'costprice' ) {
print 'costprice' ;
}
} ?> ';
console . log ( " objectline_create.tpl we will set the field for margin. defaultbuyprice= " + defaultbuyprice );
2020-03-04 00:38:43 +01:00
2024-12-19 01:05:39 +01:00
var i = 0 ;
$ ( data ) . each ( function () {
/* Warning: Lines must be processed in order: best supplier price, then pmpprice line then costprice */
if ( this . id != 'pmpprice' && this . id != 'costprice' )
2020-03-04 00:38:43 +01:00
{
2024-12-19 01:05:39 +01:00
i ++ ;
this . price = parseFloat ( this . price ); // to fix when this.price >0
// If margin is calculated on best supplier price, we set it by default (but only if value is not 0)
//console.log("id="+this.id+"-price="+this.price+"-"+(this.price > 0));
if ( bestpricefound == 0 && this . price > 0 ) { defaultkey = this . id ; defaultprice = this . price ; bestpriceid = this . id ; bestpricevalue = this . price ; bestpricefound = 1 ; } // bestpricefound is used to take the first price > 0
}
if ( this . id == 'pmpprice' )
{
// If margin is calculated on PMP, we set it by default (but only if value is not 0)
console . log ( " id= " + this . id + " -price= " + this . price );
if ( 'pmp' == defaultbuyprice || 'costprice' == defaultbuyprice )
{
if ( this . price > 0 ) {
defaultkey = this . id ; defaultprice = this . price ; pmppriceid = this . id ; pmppricevalue = this . price ;
//console.log("pmppricevalue="+pmppricevalue);
}
2020-03-04 00:38:43 +01:00
}
}
2024-12-19 01:05:39 +01:00
if ( this . id == 'costprice' )
2020-03-04 00:38:43 +01:00
{
2024-12-19 01:05:39 +01:00
// If margin is calculated on Cost price, we set it by default (but only if value is not 0)
console . log ( " id= " + this . id + " -price= " + this . price + " -pmppricevalue= " + pmppricevalue );
if ( 'costprice' == defaultbuyprice )
{
if ( this . price > 0 ) { defaultkey = this . id ; defaultprice = this . price ; costpriceid = this . id ; costpricevalue = this . price ; }
else if ( pmppricevalue > 0 ) { defaultkey = 'pmpprice' ; defaultprice = pmppricevalue ; }
}
2020-03-04 00:38:43 +01:00
}
2024-12-19 01:05:39 +01:00
options += '<option value="' + this . id + '" price="' + this . price + '">' + this . label + '</option>' ;
});
options += '<option value="inputprice" price="' + defaultprice + '"><?php echo dol_escape_js($langs->trans("InputPrice").' ... '); ?></option>' ;
2019-11-30 12:49:31 +01:00
2024-12-19 01:05:39 +01:00
console . log ( " finally selected defaultkey= " + defaultkey + " defaultprice for buying price= " + defaultprice );
2019-11-30 12:49:31 +01:00
2024-12-19 01:05:39 +01:00
$ ( " #fournprice_predef " ) . html ( options ) . show ();
if ( defaultkey != '' )
{
$ ( " #fournprice_predef " ) . val ( defaultkey );
}
2019-11-30 12:49:31 +01:00
2024-12-19 01:05:39 +01:00
/* At loading, no product are yet selected, so we hide field of buying_price */
$ ( " #buying_price " ) . hide ();
2019-11-30 12:49:31 +01:00
2024-12-19 01:05:39 +01:00
/* Define default price at loading */
var defaultprice = $ ( " #fournprice_predef " ) . find ( 'option:selected' ) . attr ( " price " );
$ ( " #buying_price " ) . val ( defaultprice );
2020-01-01 22:45:47 +01:00
2024-12-19 01:05:39 +01:00
$ ( " #fournprice_predef " ) . change ( function () {
console . log ( " change on fournprice_predef " );
/* Hide field buying_price according to choice into list (if 'inputprice' or not) */
var linevalue = $ ( this ) . find ( 'option:selected' ) . val ();
var pricevalue = $ ( this ) . find ( 'option:selected' ) . attr ( " price " );
if ( linevalue != 'inputprice' && linevalue != 'pmpprice' ) {
$ ( " #buying_price " ) . val ( pricevalue ) . hide (); /* We set value then hide field */
}
if ( linevalue == 'inputprice' ) {
$ ( '#buying_price' ) . show ();
}
if ( linevalue == 'pmpprice' ) {
$ ( " #buying_price " ) . val ( pricevalue );
$ ( '#buying_price' ) . hide ();
}
});
}
},
'json' );
2019-11-30 12:49:31 +01:00
2024-12-19 01:05:39 +01:00
< ? php
}
2022-12-07 12:36:37 +01:00
?>
2020-10-26 16:32:00 +01:00
< ? php
2024-12-19 01:05:39 +01:00
if ( getDolGlobalString ( 'PRODUIT_CUSTOMER_PRICES_BY_QTY' ) || getDolGlobalString ( 'PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES' )) {
?>
/* To process customer price per quantity (PRODUIT_CUSTOMER_PRICES_BY_QTY works only if combo product is not an ajax after x key pressed) */
var pbq = parseInt ( $ ( 'option:selected' , this ) . attr ( 'data-pbq' )); // When select is done from HTML select
if ( isNaN ( pbq )) { pbq = jQuery ( '#idprod' ) . attr ( 'data-pbq' ); } // When select is done from HTML input with autocomplete
var pbqup = parseFloat ( $ ( 'option:selected' , this ) . attr ( 'data-pbqup' ));
if ( isNaN ( pbqup )) { pbqup = jQuery ( '#idprod' ) . attr ( 'data-pbqup' ); }
var pbqbase = $ ( 'option:selected' , this ) . attr ( 'data-pbqbase' );
if ( isNaN ( pbqbase )) { pbqbase = jQuery ( '#idprod' ) . attr ( 'data-pbqbase' ); }
var pbqqty = parseFloat ( $ ( 'option:selected' , this ) . attr ( 'data-pbqqty' ));
if ( isNaN ( pbqqty )) { pbqqty = jQuery ( '#idprod' ) . attr ( 'data-pbqqty' ); }
var pbqpercent = parseFloat ( $ ( 'option:selected' , this ) . attr ( 'data-pbqpercent' ));
if ( isNaN ( pbqpercent )) { pbqpercent = jQuery ( '#idprod' ) . attr ( 'data-pbqpercent' ); }
if (( jQuery ( '#idprod' ) . val () > 0 ) && ! isNaN ( pbq ) && pbq > 0 )
{
var pbqupht = pbqup ; /* TODO support of price per qty TTC not yet available */
console . log ( " We choose a price by quanty price_by_qty id = " + pbq + " price_by_qty upht = " + pbqupht + " price_by_qty qty = " + pbqqty + " price_by_qty percent = " + pbqpercent );
jQuery ( " #pbq " ) . val ( pbq );
jQuery ( " #price_ht " ) . val ( pbqupht );
if ( jQuery ( " #qty " ) . val () < pbqqty )
{
jQuery ( " #qty " ) . val ( pbqqty );
}
if ( jQuery ( " #remise_percent " ) . val () < pbqpercent )
{
jQuery ( " #remise_percent " ) . val ( pbqpercent );
}
} else { jQuery ( " #pbq " ) . val ( '' ); }
< ? php
}
?>
2022-12-07 12:36:37 +01:00
2022-12-16 12:04:37 +01:00
2024-12-19 01:05:39 +01:00
// Deal with supplier ref price (idprodfournprice = int)
if ( jQuery ( '#idprodfournprice' ) . val () > 0 )
{
console . log ( " objectline_create.tpl #idprodfournprice is an ID > 0, so we set some properties into page " );
var up = parseFloat ( $ ( 'option:selected' , this ) . attr ( 'data-up' )); // When select is done from HTML select
if ( isNaN ( up )) { up = parseFloat ( jQuery ( '#idprodfournprice' ) . attr ( 'data-up' ));} // When select is done from HTML input with ajax autocomplete
2022-10-13 14:31:08 +02:00
2024-12-19 01:05:39 +01:00
var up_locale = $ ( 'option:selected' , this ) . attr ( 'data-up-locale' ); // When select is done from HTML select
if ( typeof up_locale === 'undefined' ) { up_locale = jQuery ( '#idprodfournprice' ) . attr ( 'data-up-locale' );} // When select is done from HTML input with ajax autocomplete
2022-10-13 14:31:08 +02:00
2024-12-19 01:05:39 +01:00
var qty = parseFloat ( $ ( 'option:selected' , this ) . attr ( 'data-qty' ));
if ( isNaN ( qty )) { qty = parseFloat ( jQuery ( '#idprodfournprice' ) . attr ( 'data-qty' ));}
2020-10-26 16:31:07 +01:00
2024-12-19 01:05:39 +01:00
var discount = parseFloat ( $ ( 'option:selected' , this ) . attr ( 'data-discount' ));
if ( isNaN ( discount )) { discount = parseFloat ( jQuery ( '#idprodfournprice' ) . attr ( 'data-discount' ));}
2020-10-26 16:31:07 +01:00
2024-12-19 01:05:39 +01:00
var tva_tx = parseFloat ( $ ( 'option:selected' , this ) . attr ( 'data-tvatx' )); // When select is done from HTML select
if ( isNaN ( tva_tx )) { tva_tx = parseFloat ( jQuery ( '#idprodfournprice' ) . attr ( 'data-tvatx' ));} // When select is done from HTML input with ajax autocomplete
2020-10-26 16:31:07 +01:00
2024-12-19 01:05:39 +01:00
var default_vat_code = $ ( 'option:selected' , this ) . attr ( 'data-default-vat-code' ); // When select is done from HTML select
if ( typeof default_vat_code === 'undefined' ) { default_vat_code = jQuery ( '#idprodfournprice' ) . attr ( 'data-default-vat-code' );} // When select is done from HTML input with ajax autocomplete
2022-05-20 19:08:26 +02:00
2024-12-19 01:05:39 +01:00
var supplier_ref = $ ( 'option:selected' , this ) . attr ( 'data-supplier-ref' ); // When select is done from HTML select
if ( typeof supplier_ref === 'undefined' ) { supplier_ref = jQuery ( '#idprodfournprice' ) . attr ( 'data-supplier-ref' ); } // When select is done from HTML input with ajax autocomplete
2022-12-04 15:16:45 +01:00
2024-12-19 01:05:39 +01:00
< ? php if (( $object -> element == 'supplier_proposal' || $object -> element == 'order_supplier' || $object -> element == 'invoice_supplier' || $object -> element == 'invoice_supplier_rec' ) && ! $seller -> tva_assuj ) { ?>
if ( tva_tx != . 0 ) {
tva_tx = . 0 ;
default_vat_code = null ;
}
< ? php } ?>
2024-05-03 00:30:01 +02:00
2024-12-19 01:05:39 +01:00
var stringforvatrateselection = tva_tx ;
if ( typeof default_vat_code != 'undefined' && default_vat_code != null && default_vat_code != '' ) {
stringforvatrateselection = stringforvatrateselection + ' (' + default_vat_code + ')' ;
2024-05-03 00:30:01 +02:00
}
2024-12-19 01:05:39 +01:00
var has_multicurrency_up = false ;
< ? php
if ( isModEnabled ( 'multicurrency' ) && $object -> multicurrency_code != $conf -> currency ) {
?>
var object_multicurrency_code = '<?php print dol_escape_js($object->multicurrency_code); ?>' ;
2022-12-04 15:16:45 +01:00
2024-12-19 01:05:39 +01:00
var multicurrency_code = $ ( 'option:selected' , this ) . attr ( 'data-multicurrency-code' ); // When select is done from HTML select
if ( multicurrency_code == undefined ) { multicurrency_code = jQuery ( '#idprodfournprice' ) . attr ( 'data-multicurrency-code' ); } // When select is done from HTML input with ajax autocomplete
2020-10-26 16:31:07 +01:00
2024-12-19 01:05:39 +01:00
var multicurrency_up = parseFloat ( $ ( 'option:selected' , this ) . attr ( 'data-multicurrency-unitprice' )); // When select is done from HTML select
if ( isNaN ( multicurrency_up )) { multicurrency_up = parseFloat ( jQuery ( '#idprodfournprice' ) . attr ( 'data-multicurrency-unitprice' )); } // When select is done from HTML input with ajax autocomplete
2024-02-10 01:09:24 +01:00
2024-12-19 01:05:39 +01:00
if ( multicurrency_code == object_multicurrency_code ) {
has_multicurrency_up = true ;
jQuery ( " #multicurrency_price_ht " ) . val ( multicurrency_up );
}
2024-02-10 01:09:24 +01:00
2024-12-19 01:05:39 +01:00
console . log ( " objectline_create.tpl Multicurrency values : object_multicurrency_code = " + object_multicurrency_code + " , multicurrency_code = " + multicurrency_code + " , multicurrency_up = " + multicurrency_up );
< ? php
2024-02-10 01:09:24 +01:00
}
2024-12-19 01:05:39 +01:00
?>
2024-02-10 01:09:24 +01:00
2024-12-19 01:05:39 +01:00
console . log ( " objectline_create.tpl We find supplier price : up = " + up + " , up_locale = " + up_locale + " , has_multicurrency_up = " + has_multicurrency_up + " , supplier_ref = " + supplier_ref + " qty = " + qty + " , tva_tx = " + tva_tx + " , default_vat_code = " + default_vat_code + " , stringforvatrateselection= " + stringforvatrateselection + " , discount = " + discount + " for product supplier ref id = " + jQuery ( '#idprodfournprice' ) . val ());
2024-02-10 01:09:24 +01:00
2024-12-19 01:05:39 +01:00
if ( has_multicurrency_up === false ) {
if ( typeof up_locale === 'undefined' ) {
jQuery ( " #price_ht " ) . val ( up );
} else {
jQuery ( " #price_ht " ) . val ( up_locale );
}
2024-02-10 01:09:24 +01:00
}
2022-05-20 22:24:06 +02:00
2024-12-19 01:05:39 +01:00
// Set supplier_ref
$ ( '#fourn_ref' ) . val ( supplier_ref );
// Set vat rate if field is an input box
$ ( '#tva_tx' ) . val ( tva_tx );
// Set vat rate by selecting the combo
//$('#tva_tx option').val(tva_tx); // This is bugged, it replaces the vat key of all options
$ ( '#tva_tx option' ) . removeAttr ( 'selected' );
console . log ( " stringforvatrateselection= " + stringforvatrateselection + " -> value of option label for this key= " + $ ( '#tva_tx option[value="' + stringforvatrateselection + '"]' ) . val ());
$ ( '#tva_tx option[value="' + stringforvatrateselection + '"]' ) . prop ( 'selected' , true );
if ( jQuery ( " #qty " ) . val () < qty ) {
jQuery ( " #qty " ) . val ( qty );
}
if ( jQuery ( " #remise_percent " ) . val () < discount ) {
jQuery ( " #remise_percent " ) . val ( discount );
}
2020-10-28 16:37:41 +01:00
2020-10-28 16:38:31 +01:00
< ? php
2024-12-19 01:05:39 +01:00
if ( getDolGlobalInt ( 'PRODUIT_AUTOFILL_DESC' ) == 1 ) {
2022-12-16 12:04:37 +01:00
?>
2024-12-19 01:05:39 +01:00
var description = $ ( 'option:selected' , this ) . attr ( 'data-description' );
if ( typeof description == 'undefined' ) { description = jQuery ( '#idprodfournprice' ) . attr ( 'data-description' ); }
console . log ( " Load description into text area : " + description );
2020-10-28 16:38:31 +01:00
< ? php
2024-12-19 01:05:39 +01:00
if ( getDolGlobalString ( 'FCKEDITOR_ENABLE_DETAILS' )) {
?>
if ( typeof CKEDITOR == " object " && typeof CKEDITOR . instances != " undefined " )
{
var editor = CKEDITOR . instances [ 'dp_desc' ];
if ( editor ) {
editor . setData ( description );
}
2020-10-28 16:37:41 +01:00
}
2024-12-19 01:05:39 +01:00
< ? php
} else {
?>
jQuery ( '#dp_desc' ) . text ( description );
< ? php
}
}
?>
} else if ( jQuery ( '#idprodfournprice' ) . length > 0 ) {
console . log ( " objectline_create.tpl #idprodfournprice is not an int but is a string so we set only few properties into page " );
2022-12-16 12:04:37 +01:00
2024-12-19 01:05:39 +01:00
var tva_tx = parseFloat ( $ ( 'option:selected' , this ) . attr ( 'data-tvatx' )); // When select is done from HTML select
if ( isNaN ( tva_tx )) { tva_tx = parseFloat ( jQuery ( '#idprodfournprice' ) . attr ( 'data-tvatx' ));} // When select is done from HTML input with ajax autocomplete
2022-12-16 12:04:37 +01:00
2024-12-19 01:05:39 +01:00
var default_vat_code = $ ( 'option:selected' , this ) . attr ( 'data-default-vat-code' ); // When select is done from HTML select
if ( typeof default_vat_code === 'undefined' ) { default_vat_code = jQuery ( '#idprodfournprice' ) . attr ( 'data-default-vat-code' );} // When select is done from HTML input with ajax autocomplete
2022-12-16 12:04:37 +01:00
2024-12-19 01:05:39 +01:00
var supplier_ref = $ ( 'option:selected' , this ) . attr ( 'data-supplier-ref' ); // When select is done from HTML select
if ( typeof supplier_ref === 'undefined' ) { supplier_ref = jQuery ( '#idprodfournprice' ) . attr ( 'data-supplier-ref' ); } // When select is done from HTML input with ajax autocomplete
2024-05-03 00:30:01 +02:00
2024-12-19 01:05:39 +01:00
var stringforvatrateselection = tva_tx ;
if ( typeof default_vat_code != 'undefined' && default_vat_code != null && default_vat_code != '' ) {
stringforvatrateselection = stringforvatrateselection + ' (' + default_vat_code + ')' ;
}
2022-12-16 12:04:37 +01:00
2024-12-19 01:05:39 +01:00
console . log ( " objectline_create.tpl We find data for price : tva_tx = " + tva_tx + " , default_vat_code = " + default_vat_code + " , supplier_ref = " + supplier_ref + " , stringforvatrateselection= " + stringforvatrateselection + " for product id = " + jQuery ( '#idprodfournprice' ) . val ());
2024-05-03 00:30:01 +02:00
2024-12-19 01:05:39 +01:00
// Set supplier_ref
$ ( '#fourn_ref' ) . val ( supplier_ref );
// Set vat rate if field is an input box
$ ( '#tva_tx' ) . val ( tva_tx );
// Set vat rate by selecting the combo
//$('#tva_tx option').val(tva_tx); // This is bugged, it replaces the vat key of all options
$ ( '#tva_tx option' ) . removeAttr ( 'selected' );
console . log ( " stringforvatrateselection= " + stringforvatrateselection + " -> value of option label for this key= " + $ ( '#tva_tx option[value="' + stringforvatrateselection + '"]' ) . val ());
$ ( '#tva_tx option[value="' + stringforvatrateselection + '"]' ) . prop ( 'selected' , true );
< ? php
if ( getDolGlobalInt ( 'PRODUIT_AUTOFILL_DESC' ) == 1 ) {
if ( getDolGlobalString ( 'FCKEDITOR_ENABLE_DETAILS' )) {
?>
if ( typeof CKEDITOR == " object " && typeof CKEDITOR . instances != " undefined " )
{
var editor = CKEDITOR . instances [ 'dp_desc' ];
if ( editor ) {
editor . setData ( '' );
}
2020-10-28 16:37:41 +01:00
}
2024-12-19 01:05:39 +01:00
< ? php
} else {
?>
jQuery ( '#dp_desc' ) . text ( '' );
< ? php
}
2020-10-28 16:37:41 +01:00
}
2024-12-19 01:05:39 +01:00
?>
2022-12-16 12:04:37 +01:00
}
2020-01-01 17:15:26 +01:00
2020-10-28 16:37:41 +01:00
2024-12-19 01:05:39 +01:00
/* To set focus */
if ( jQuery ( '#idprod' ) . val () > 0 || jQuery ( '#idprodfournprice' ) . val () > 0 )
2020-01-01 17:15:26 +01:00
{
2024-12-19 01:05:39 +01:00
console . log ( " Try to set focus on desc " );
/* this focus code works on a standard textarea but not if field was replaced with CKEDITOR */
jQuery ( '#dp_desc' ) . focus ();
/* this focus code works for CKEDITOR */
if ( typeof CKEDITOR == " object " && typeof CKEDITOR . instances != " undefined " )
{
var editor = CKEDITOR . instances [ 'dp_desc' ];
if ( editor ) {
editor . focus ();
}
}
2020-01-01 17:15:26 +01:00
}
2024-12-19 01:05:39 +01:00
});
2020-01-01 22:45:47 +01:00
2023-12-04 12:07:53 +01:00
< ? php if ( GETPOST ( 'prod_entry_mode' ) == 'predef' ) { // When we submit with a predef product and it fails we must start with predef?>
2020-01-01 22:45:47 +01:00
setforpredef ();
< ? php } ?>
2024-12-19 01:05:39 +01:00
2020-01-01 22:45:47 +01:00
});
2023-01-10 21:46:11 +01:00
/* Function to set fields visibility after selecting a free product */
2020-01-01 22:45:47 +01:00
function setforfree () {
2022-10-13 14:31:08 +02:00
console . log ( " objectline_create.tpl::setforfree. We show most fields " );
2020-01-01 22:45:47 +01:00
jQuery ( " #idprodfournprice " ) . val ( '0' ); // Set cursor on not selected product
jQuery ( " #prod_entry_mode_free " ) . prop ( 'checked' , true ) . change ();
jQuery ( " #prod_entry_mode_predef " ) . prop ( 'checked' , false ) . change ();
jQuery ( " #search_idprod, #idprod, #search_idprodfournprice, #buying_price " ) . val ( '' );
2022-01-10 03:24:01 +01:00
jQuery ( " #price_ht, #multicurrency_price_ht, #price_ttc, #multicurrency_price_ttc, #fourn_ref, #tva_tx, #buying_price, #title_fourn_ref, #title_vat, #title_up_ht, #title_up_ht_currency, #title_up_ttc, #title_up_ttc_currency " ) . show ();
2020-01-01 22:45:47 +01:00
jQuery ( " #np_marginRate, #np_markRate, .np_marginRate, .np_markRate, #units, #title_units " ) . show ();
jQuery ( " #fournprice_predef " ) . hide ();
}
2021-07-20 11:23:35 +02:00
2020-01-01 22:45:47 +01:00
function setforpredef () {
2022-10-13 14:31:08 +02:00
console . log ( " objectline_create.tpl::setforpredef We hide some fields, show dates " );
2024-12-19 01:05:39 +01:00
2020-01-01 22:45:47 +01:00
jQuery ( " #select_type " ) . val ( - 1 );
2024-12-19 01:05:39 +01:00
jQuery ( " #select_type " ) . addClass ( " placeholder " );
2024-12-23 23:22:47 +01:00
/* jQuery("#select_type").trigger("change"); // Disabled. This create troubles. Never mind if the rester of combo is not done when using an ajax select_type combo. We don't use it because we are not able to call a focus on a change event of this combo. */
2024-12-19 01:05:39 +01:00
2020-01-01 22:45:47 +01:00
jQuery ( " #prod_entry_mode_free " ) . prop ( 'checked' , false ) . change ();
jQuery ( " #prod_entry_mode_predef " ) . prop ( 'checked' , true ) . change ();
2023-11-27 11:39:32 +01:00
< ? php if ( ! getDolGlobalString ( 'MAIN_DISABLE_EDIT_PREDEF_PRICEHT' )) { ?>
2020-01-01 22:45:47 +01:00
jQuery ( " #price_ht " ) . val ( '' ) . show ();
jQuery ( " #multicurrency_price_ht " ) . val ( '' ) . show ();
2020-05-03 09:15:12 +02:00
jQuery ( " #title_up_ht, #title_up_ht_currency " ) . show ();
2020-01-01 22:45:47 +01:00
< ? php } else { ?>
2022-03-26 11:22:54 +01:00
//jQuery("#price_ht").val('').hide();
2020-01-01 22:45:47 +01:00
jQuery ( " #multicurrency_price_ht " ) . val ( '' ) . hide ();
2020-05-03 09:15:12 +02:00
jQuery ( " #title_up_ht, #title_up_ht_currency " ) . hide ();
2020-01-01 22:45:47 +01:00
< ? php } ?>
2023-11-27 11:39:32 +01:00
< ? php if ( ! getDolGlobalString ( 'MAIN_DISABLE_EDIT_PREDEF_PRICETTC' )) { ?>
2022-01-10 03:24:01 +01:00
jQuery ( " #price_ttc " ) . val ( '' ) . show ();
jQuery ( " #multicurrency_price_ttc " ) . val ( '' ) . show ();
jQuery ( " #title_up_ttc, #title_up_ttc_currency " ) . show ();
2022-03-26 11:22:54 +01:00
< ? php } else { ?>
jQuery ( " #price_ttc " ) . val ( '' ) . hide ();
jQuery ( " #multicurrency_price_ttc " ) . val ( '' ) . hide ();
jQuery ( " #title_up_ttc, #title_up_ttc_currency " ) . hide ();
2022-01-10 03:24:01 +01:00
< ? php } ?>
2023-01-10 21:46:11 +01:00
/* jQuery("#tva_tx, #title_vat").hide(); */
2022-01-10 03:24:01 +01:00
/* jQuery("#title_fourn_ref").hide(); */
2024-09-10 14:54:37 +02:00
< ? php if ( ! getDolGlobalString ( 'DISPLAY_MARGIN_RATES' )) { ?>
jQuery ( " #np_marginRate, .np_marginRate " ) . hide ();
< ? php } ?>
< ? php if ( ! getDolGlobalString ( 'DISPLAY_MARK_RATES' )) { ?>
jQuery ( " #np_markRate, .np_markRate " ) . hide ();
< ? php } ?>
2024-09-20 04:42:28 +02:00
jQuery ( " #units, #title_units " ) . hide ();
2020-01-01 22:45:47 +01:00
jQuery ( " #buying_price " ) . show ();
jQuery ( '#trlinefordates, .divlinefordates' ) . show ();
}
2020-01-01 17:15:26 +01:00
< ? php
2020-01-01 22:45:47 +01:00
print '</script>' ;
2024-12-19 01:05:39 +01:00
//print '<span onclick="setFocusOnDescription();">Click</span>';
2020-01-01 17:15:26 +01:00
print " <!-- END PHP TEMPLATE objectline_create.tpl.php --> \n " ;