37if (empty($object) || !is_object($object)) {
38 print
"Error, template page can't be called as URL";
44if (isModEnabled(
'margin') && !empty($object->element) && in_array($object->element, array(
'facture',
'facturerec',
'propal',
'commande'))) {
48global $forceall, $senderissupplier, $inputalsopricewithtax, $canchangeproduct;
49if (empty($dateSelector)) {
52if (empty($forceall)) {
55if (empty($senderissupplier)) {
56 $senderissupplier = 0;
58if (empty($inputalsopricewithtax)) {
59 $inputalsopricewithtax = 0;
61if (empty($canchangeproduct)) {
62 $canchangeproduct = 0;
67if (!empty($inputalsopricewithtax)) {
70if (in_array($object->element, array(
'propal',
'supplier_proposal',
'facture',
'facturerec',
'invoice',
'commande',
'order',
'order_supplier',
'invoice_supplier',
'invoice_supplier_rec'))) {
73if (isModEnabled(
"multicurrency") && $object->multicurrency_code != $conf->currency) {
76if (isModEnabled(
'asset') && $object->element ==
'invoice_supplier') {
82print
"<!-- BEGIN PHP TEMPLATE objectline_edit.tpl.php -->\n";
86<tr
class=
"oddeven tredited">
87<?php
if (!empty($conf->global->MAIN_VIEW_LINE_NUMBER)) { ?>
88 <td
class=
"linecolnum center"><?php $coldisplay++; ?><?php echo ($i + 1); ?></td>
93 <td
class=
"linecoldesc minwidth250onall">
94 <div
id=
"line_<?php echo $line->id; ?>"></div>
96 <input
type=
"hidden" name=
"lineid" value=
"<?php echo $line->id; ?>">
97 <input
type=
"hidden" id=
"product_type" name=
"type" value=
"<?php echo $line->product_type; ?>">
98 <input
type=
"hidden" id=
"special_code" name=
"special_code" value=
"<?php echo $line->special_code; ?>">
99 <input
type=
"hidden" id=
"fk_parent_line" name=
"fk_parent_line" value=
"<?php echo $line->fk_parent_line; ?>">
101 <?php
if ($line->fk_product > 0) { ?>
103 if (empty($canchangeproduct)) {
104 if ($line->fk_parent_line > 0) {
108 <a href=
"<?php echo DOL_URL_ROOT.'/product/card.php?id='.$line->fk_product; ?>">
110 if ($line->product_type == 1) {
111 echo
img_object($langs->trans(
'ShowService'),
'service');
113 print
img_object($langs->trans(
'ShowProduct'),
'product');
119 echo
' - '.nl2br($line->product_label);
120 print
'<input type="hidden" id="product_id" name="productid" value="'.(!empty($line->fk_product) ? $line->fk_product : 0).
'">';
122 if ($senderissupplier) {
123 $form->select_produits_fournisseurs(!empty($line->fk_product) ? $line->fk_product : 0,
'productid');
125 print $form->select_produits(!empty($line->fk_product) ? $line->fk_product : 0,
'productid');
133 if (is_object($hookmanager)) {
134 $fk_parent_line = (
GETPOST(
'fk_parent_line') ?
GETPOST(
'fk_parent_line',
'int') : $line->fk_parent_line);
135 $parameters = array(
'line'=>$line,
'fk_parent_line'=>$fk_parent_line,
'var'=>$var,
'dateSelector'=>$dateSelector,
'seller'=>$seller,
'buyer'=>$buyer);
136 $reshook = $hookmanager->executeHooks(
'formEditProductOptions', $parameters, $this, $action);
139 $situationinvoicelinewithparent = 0;
140 if ($line->fk_prev_id !=
null && in_array($object->element, array(
'facture',
'facturedet'))) {
141 if ($object->type == $object::TYPE_SITUATION) {
143 $situationinvoicelinewithparent = 1;
149 if (!empty($conf->global->INVOICE_SITUATION_CAN_FORCE_UPDATE_DESCRIPTION)) {
150 $situationinvoicelinewithparent = 0;
153 if (!$situationinvoicelinewithparent) {
155 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
157 if (!empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) {
158 $nbrows = $conf->global->MAIN_INPUT_DESC_HEIGHT;
160 $enable = (isset($conf->global->FCKEDITOR_ENABLE_DETAILS) ? $conf->global->FCKEDITOR_ENABLE_DETAILS : 0);
161 $toolbarname =
'dolibarr_details';
162 if (!empty($conf->global->FCKEDITOR_ENABLE_DETAILS_FULL)) {
163 $toolbarname =
'dolibarr_notes';
165 $doleditor =
new DolEditor(
'product_desc', GETPOSTISSET(
'product_desc') ?
GETPOST(
'product_desc',
'restricthtml') : $line->
description,
'', (empty($conf->global->MAIN_DOLEDITOR_HEIGHT) ? 164 : $conf->global->MAIN_DOLEDITOR_HEIGHT), $toolbarname,
'', false, true, $enable, $nbrows,
'98%');
166 $doleditor->Create();
168 print
'<textarea id="product_desc" class="flat" name="product_desc" readonly style="width: 200px; height:80px;">';
169 print GETPOSTISSET(
'product_desc') ?
GETPOST(
'product_desc',
'restricthtml') : $line->
description;
174 if (!empty($extrafields)) {
175 $temps = $line->showOptionals($extrafields,
'edit', array(
'class'=>
'tredited'),
'',
'', 1,
'line');
176 if (!empty($temps)) {
177 print
'<div style="padding-top: 10px" id="extrafield_lines_area_edit" name="extrafield_lines_area_edit">';
184 if (isModEnabled(
"service") && $line->product_type == 1 && ($line->element ==
'facturedetrec' || $line->element ==
'invoice_supplier_det_rec')) {
185 if ($line->element ==
'invoice_supplier_det_rec') {
186 $line->date_start_fill = $line->date_start;
187 $line->date_end_fill = $line->date_end;
190 echo $langs->trans(
'AutoFillDateFrom').
' ';
191 echo $form->selectyesno(
'date_start_fill', GETPOSTISSET(
'date_start_fill') ?
GETPOST(
'date_start_fill',
'int') : $line->date_start_fill, 1);
193 echo $langs->trans(
'AutoFillDateTo').
' ';
194 echo $form->selectyesno(
'date_end_fill', GETPOSTISSET(
'date_end_fill') ?
GETPOST(
'date_end_fill',
'int') : $line->date_end_fill, 1);
201 if ($object->element ==
'supplier_proposal' || $object->element ==
'order_supplier' || $object->element ==
'invoice_supplier' || $object->element ==
'invoice_supplier_rec') {
204 <td
class=
"right linecolrefsupplier"><input
id=
"fourn_ref" name=
"fourn_ref" class=
"flat minwidth50 maxwidth100 maxwidth125onsmartphone" value=
"<?php echo GETPOSTISSET('fourn_ref') ? GETPOST('fourn_ref') : ($line->ref_supplier ? $line->ref_supplier : $line->ref_fourn); ?>"></td>
206 print
'<input type="hidden" id="fournprice" name="fournprice" class="" value="'.$line->fk_fournprice.
'">';
211 if (!$situationinvoicelinewithparent) {
212 print
'<td class="right">';
213 print $form->load_tva(
'tva_tx', GETPOSTISSET(
'tva_tx') ?
GETPOST(
'tva_tx',
'alpha') : ($line->tva_tx.($line->vat_src_code ? (
' ('.$line->vat_src_code.
')') :
'')), $seller, $buyer, 0, $line->info_bits, $line->product_type, false, 1);
216 print
'<td class="right"><input size="1" type="text" class="flat right" name="tva_tx" value="'.price($line->tva_tx).
'" readonly />%</td>';
220 print
'<td class="right"><input type="text" class="flat right" size="5" id="price_ht" name="price_ht" value="'.(GETPOSTISSET(
'price_ht') ?
GETPOST(
'price_ht',
'alpha') : (isset($line->pu_ht) ?
price($line->pu_ht, 0,
'', 0) :
price($line->subprice, 0,
'', 0))).
'"';
221 if ($situationinvoicelinewithparent) {
226 if (isModEnabled(
"multicurrency") && $object->multicurrency_code != $conf->currency) {
228 print
'<td class="right"><input rel="'.$object->multicurrency_tx.
'" type="text" class="flat right" size="5" id="multicurrency_subprice" name="multicurrency_subprice" value="'.(GETPOSTISSET(
'multicurrency_subprice') ?
GETPOST(
'multicurrency_subprice',
'alpha') :
price($line->multicurrency_subprice)).
'" /></td>';
231 if (!empty($inputalsopricewithtax) && !
getDolGlobalInt(
'MAIN_NO_INPUT_PRICE_WITH_TAX')) {
233 $upinctax = isset($line->pu_ttc) ? $line->pu_ttc :
null;
235 $upinctax =
price2num($line->total_ttc / $line->qty,
'MU');
237 print
'<td class="right"><input type="text" class="flat right" size="5" id="price_ttc" name="price_ttc" value="'.(GETPOSTISSET(
'price_ttc') ?
GETPOST(
'price_ttc') : (isset($upinctax) ?
price($upinctax, 0,
'', 0) :
'')).
'"';
238 if ($situationinvoicelinewithparent) {
246 if (($line->info_bits & 2) != 2) {
251 print
'<input size="3" type="text" class="flat right" name="qty" id="qty" value="'.(GETPOSTISSET(
'qty') ?
GETPOST(
'qty') : $line->qty).
'"';
252 if ($situationinvoicelinewithparent) {
262 if (!empty($conf->global->PRODUCT_USE_UNITS)) {
265 if (!empty($line->fk_unit) && empty($conf->global->MAIN_EDIT_LINE_ALLOW_ALL_UNIT_TYPE)) {
266 include_once DOL_DOCUMENT_ROOT.
'/core/class/cunits.class.php';
267 $cUnit =
new CUnits($line->db);
268 if ($cUnit->fetch($line->fk_unit) > 0) {
269 if (!empty($cUnit->unit_type)) {
270 $unit_type = $cUnit->unit_type;
275 print
'<td class="left">';
276 print $form->selectUnits(GETPOSTISSET(
'units') ?
GETPOST(
'units') : $line->fk_unit,
"units", 0, $unit_type);
281 <td
class=
"nowraponall right linecoldiscount">
285 if (($line->info_bits & 2) != 2) {
286 print
'<input type="text" class="flat right width40" name="remise_percent" id="remise_percent" value="'.(GETPOSTISSET(
'remise_percent') ?
GETPOST(
'remise_percent') : ($line->remise_percent ? $line->remise_percent :
'')).
'"';
287 if ($situationinvoicelinewithparent) {
290 print
'><span class="hideonsmartphone opacitymedium">%</span>';
298 if ($object->situation_cycle_ref) {
300 print
'<td class="nowrap right linecolcycleref"><input class="right" type="text" size="1" value="'.(GETPOSTISSET(
'progress') ?
GETPOST(
'progress') : $line->situation_percent).
'" name="progress">%</td>';
305 if (!empty($usemargins)) {
306 if (!empty($user->rights->margins->creer)) {
309 <td
class=
"margininfos right">
310 <!-- For predef product -->
311 <?php
if (isModEnabled(
"product") || isModEnabled(
"service")) { ?>
312 <select
id=
"fournprice_predef" name=
"fournprice_predef" class=
"flat minwidth75imp right" style=
"display: none;"></select>
314 <!-- For free product -->
315 <input
class=
"flat maxwidth75 right" type=
"text" id=
"buying_price" name=
"buying_price" class=
"hideobject" value=
"<?php echo (GETPOSTISSET('buying_price') ? GETPOST('buying_price') : price($line->pa_ht, 0, '', 0)); ?>">
319 if ($user->rights->margins->creer) {
320 if (!empty($conf->global->DISPLAY_MARGIN_RATES)) {
321 $margin_rate = (GETPOSTISSET(
"np_marginRate") ?
GETPOST(
"np_marginRate",
"alpha", 2) : (($line->pa_ht == 0) ?
'' :
price($line->marge_tx)));
323 if ($line->subprice < 0) {
324 echo
'<td class="right nowrap margininfos">'.$margin_rate.
'<span class="opacitymedium hideonsmartphone">%</span></td>';
326 echo
'<td class="right nowrap margininfos"><input class="right maxwidth40" type="text" name="np_marginRate" value="'.$margin_rate.
'"><span class="opacitymedium hideonsmartphone">%</span></td>';
330 if (!empty($conf->global->DISPLAY_MARK_RATES)) {
331 $mark_rate = (GETPOSTISSET(
"np_markRate") ?
GETPOST(
"np_markRate",
'alpha', 2) :
price($line->marque_tx));
333 if ($line->subprice < 0) {
334 echo
'<td class="right nowrap margininfos">'.$mark_rate.
'<span class="opacitymedium hideonsmartphone">%</span></td>';
336 echo
'<td class="right nowrap margininfos"><input class="right maxwidth40" type="text" name="np_markRate" value="'.$mark_rate.
'"><span class="opacitymedium hideonsmartphone">%</span></td>';
344 <!-- colspan
for this td because it replace total_ht+3 td
for buttons+... -->
345 <td
class=
"center valignmiddle" colspan=
"<?php echo $colspan; ?>"><?php $coldisplay += $colspan; ?>
346 <input
type=
"submit" class=
"reposition button buttongen marginbottomonly button-save" id=
"savelinebutton marginbottomonly" name=
"save" value=
"<?php echo $langs->trans("Save
"); ?>"><br>
347 <input
type=
"submit" class=
"reposition button buttongen marginbottomonly button-cancel" id=
"cancellinebutton" name=
"cancel" value=
"<?php echo $langs->trans("Cancel
"); ?>">
351<?php
if (isModEnabled(
"service") && $line->product_type == 1 && $dateSelector) { ?>
352<tr
id=
"service_duration_area" class=
"treditedlinefordate">
353 <?php
if (!empty($conf->global->MAIN_VIEW_LINE_NUMBER)) { ?>
354 <td
class=
"linecolnum center"></td>
356 <td colspan=
"<?php echo $coldisplay - (empty($conf->global->MAIN_VIEW_LINE_NUMBER) ? 0 : 1) ?>"><?php echo $langs->trans(
'ServiceLimitedDuration').
' '.$langs->trans(
'From').
' '; ?>
358 $hourmin = (isset($conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE) ? $conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE :
'');
359 print $form->selectDate($line->date_start,
'date_start', $hourmin, $hourmin, $line->date_start ? 0 : 1,
"updateline", 1, 0);
360 print
' '.$langs->trans(
'to').
' ';
361 print $form->selectDate($line->date_end,
'date_end', $hourmin, $hourmin, $line->date_end ? 0 : 1,
"updateline", 1, 0);
363 if (!$line->date_start) {
364 if (isset($conf->global->MAIN_DEFAULT_DATE_START_HOUR)) {
365 print
'jQuery("#date_starthour").val("'.$conf->global->MAIN_DEFAULT_DATE_START_HOUR.
'");';
369 if (isset($conf->global->MAIN_DEFAULT_DATE_START_MIN)) {
370 print
'jQuery("#date_startmin").val("'.$conf->global->MAIN_DEFAULT_DATE_START_MIN.
'");';
373 $res = $line->fetch_product();
375 if ( $line->product->isMandatoryPeriod() && $line->product->isService()) {
376 print
'jQuery("#date_start").addClass("error");';
380 if (!$line->date_end) {
381 if (isset($conf->global->MAIN_DEFAULT_DATE_END_HOUR)) {
382 print
'jQuery("#date_endhour").val("'.$conf->global->MAIN_DEFAULT_DATE_END_HOUR.
'");';
384 if (isset($conf->global->MAIN_DEFAULT_DATE_END_MIN)) {
385 print
'jQuery("#date_endmin").val("'.$conf->global->MAIN_DEFAULT_DATE_END_MIN.
'");';
388 $res = $line->fetch_product();
391 if ($line->product->isMandatoryperiod() && $line->product->isService()) {
392 print
'jQuery("#date_end").addClass("error");';
407if (!empty($usemargins) && $user->rights->margins->creer) {
410 jQuery(document).ready(
function() {
412 if (!empty($conf->global->DISPLAY_MARGIN_RATES)) {
414 $(
"input[name='np_marginRate']:first").blur(function(e) {
415 return checkFreeLine(e,
"np_marginRate");
419 if (!empty($conf->global->DISPLAY_MARK_RATES)) {
421 $(
"input[name='np_markRate']:first").blur(
function(e) {
422 return checkFreeLine(e,
"np_markRate");
430 function checkFreeLine(e, npRate)
432 var buying_price = $(
"input[name='buying_price']:first");
433 var remise = $(
"input[name='remise_percent']:first");
435 var rate = $(
"input[name='"+npRate+
"']:first");
436 if (rate.val() ==
'')
440 if (! $.isNumeric(ratejs))
442 alert(
'<?php echo dol_escape_js($langs->transnoentities("rateMustBeNumeric")); ?>');
444 setTimeout(
function () { rate.focus() }, 50);
447 if (npRate ==
"np_markRate" && rate.val() >= 100)
449 alert(
'<?php echo dol_escape_js($langs->transnoentities("markRateShouldBeLesserThan100")); ?>');
451 setTimeout(
function () { rate.focus() }, 50);
458 if (remisejs != 100) {
459 if (remisejs ==
'') {
466 if (npRate ==
"np_marginRate")
467 price = ((bpjs * (1 + ratejs / 100)) / (1 - remisejs / 100));
468 else if (npRate ==
"np_markRate")
469 price = ((bpjs / (1 - ratejs / 100)) / (1 - remisejs / 100));
471 $(
"input[name='price_ht']:first").val(
price);
479jQuery(document).ready(
function()
481 jQuery(
"#price_ht").keyup(
function(event) {
483 if (event.which != 9 && (event.which < 37 ||event.which > 40) && jQuery(
"#price_ht").val() !=
'') {
484 jQuery(
"#price_ttc").val(
'');
485 jQuery(
"#multicurrency_subprice").val(
'');
488 jQuery(
"#price_ttc").keyup(
function(event) {
490 if (event.which != 9 && (event.which < 37 || event.which > 40) && jQuery(
"#price_ttc").val() !=
'') {
491 jQuery(
"#price_ht").val(
'');
492 jQuery(
"#multicurrency_subprice").val(
'');
495 jQuery(
"#multicurrency_subprice").keyup(
function(event) {
497 if (event.which != 9 && (event.which < 37 || event.which > 40) && jQuery(
"#price_ttc").val() !=
'') {
498 jQuery(
"#price_ht").val(
'');
499 jQuery(
"#price_ttc").val(
'');
503 <?php
if (in_array($object->table_element_line, array(
'propaldet',
'commandedet',
'facturedet'))) { ?>
504 $(
"#date_start, #date_end").focusout(
function() {
505 if ( $(
this).val() ==
'' && !$(
this).hasClass(
'inputmandatory') ) {
506 $(
this).addClass(
'inputmandatory');
508 $(
this).removeClass(
'inputmandatory');
514 if (isModEnabled(
'margin')) {
517 jQuery(
"#tva_tx").click(
function() {
518 jQuery(
"input[name='np_marginRate']:first").val(
'');
519 jQuery(
"input[name='np_markRate']:first").val(
'');
521 jQuery(
"#tva_tx").keyup(
function() {
522 jQuery(
"input[name='np_marginRate']:first").val(
'');
523 jQuery(
"input[name='np_markRate']:first").val(
'');
525 jQuery(
"#price_ht").keyup(
function() {
526 jQuery(
"input[name='np_marginRate']:first").val(
'');
527 jQuery(
"input[name='np_markRate']:first").val(
'');
529 jQuery(
"#qty").keyup(
function() {
530 jQuery(
"input[name='np_marginRate']:first").val(
'');
531 jQuery(
"input[name='np_markRate']:first").val(
'');
533 jQuery(
"#remise_percent").keyup(
function() {
534 jQuery(
"input[name='np_marginRate']:first").val(
'');
535 jQuery(
"input[name='np_markRate']:first").val(
'');
537 jQuery(
"#buying_price").keyup(
function() {
538 jQuery(
"input[name='np_marginRate']:first").val(
'');
539 jQuery(
"input[name='np_markRate']:first").val(
'');
543 var token =
'<?php echo currentToken(); ?>';
544 $.post(
'<?php echo DOL_URL_ROOT; ?>/fourn/ajax/getSupplierPrices.php', {
'idprod': <?php echo $line->fk_product ? $line->fk_product : 0; ?>,
'token': token },
function(data) {
545 if (data && data.length > 0) {
548 $(data).each(
function() {
549 options +=
'<option value="'+this.
id+
'" price="'+this.price+
'"';
550 <?php
if ($line->fk_fournprice > 0) { ?>
551 if (this.id == <?php echo $line->fk_fournprice; ?>) {
552 options +=
' selected';
553 $(
"#buying_price").val(this.price);
557 options +=
'>'+this.label+
'</option>';
559 options +=
'<option value=null'+(trouve?
'':
' selected')+
'><?php echo $langs->trans("InputPrice"); ?></option>';
560 $(
"#fournprice").html(options);
562 $(
"#buying_price").hide();
563 $(
"#fournprice").show();
565 $(
"#buying_price").show();
567 $(
"#fournprice").change(
function() {
568 var selval = $(
this).find(
'option:selected').attr(
"price");
570 $(
"#buying_price").val(selval).hide();
572 $(
'#buying_price').show();
575 $(
"#fournprice").hide();
576 $(
'#buying_price').show();
585<!-- END PHP TEMPLATE objectline_edit.tpl.php -->
Class of dictionary type of thirdparty (used by imports)
Class to manage a WYSIWYG editor.
print $script_file $mode $langs defaultlang(is_numeric($duration_value) ? " delay=". $duration_value :"").(is_numeric($duration_value2) ? " after cd cd cd description as description
Only used if Module[ID]Desc translation string is not found.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
price2numjs(amount)
Function similar to PHP price2num()
if(preg_match('/crypted:/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
$conf db name
Only used if Module[ID]Name translation string is not found.