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">
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) {
107 <a href=
"<?php echo DOL_URL_ROOT.'/product/card.php?id='.$line->fk_product; ?>">
109 if ($line->product_type == 1) {
110 echo
img_object($langs->trans(
'ShowService'),
'service');
112 print
img_object($langs->trans(
'ShowProduct'),
'product');
114 echo
' '.$line->ref; ?>
117 echo
' - '.nl2br($line->product_label);
118 print
'<input type="hidden" id="product_id" name="productid" value="'.(!empty($line->fk_product) ? $line->fk_product : 0).
'">';
120 if ($senderissupplier) {
121 $form->select_produits_fournisseurs(!empty($line->fk_product) ? $line->fk_product : 0,
'productid');
123 print $form->select_produits(!empty($line->fk_product) ? $line->fk_product : 0,
'productid');
131 if (is_object($hookmanager)) {
132 $fk_parent_line = (
GETPOST(
'fk_parent_line') ?
GETPOST(
'fk_parent_line',
'int') : $line->fk_parent_line);
133 $parameters = array(
'line'=>$line,
'fk_parent_line'=>$fk_parent_line,
'var'=>$var,
'dateSelector'=>$dateSelector,
'seller'=>$seller,
'buyer'=>$buyer);
134 $reshook = $hookmanager->executeHooks(
'formEditProductOptions', $parameters, $this, $action);
137 $situationinvoicelinewithparent = 0;
138 if ($line->fk_prev_id !=
null && in_array($object->element, array(
'facture',
'facturedet'))) {
139 if ($object->type == $object::TYPE_SITUATION) {
141 $situationinvoicelinewithparent = 1;
148 $situationinvoicelinewithparent = 0;
151 if (!$situationinvoicelinewithparent) {
153 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
156 $nbrows = $conf->global->MAIN_INPUT_DESC_HEIGHT;
158 $enable = (isset($conf->global->FCKEDITOR_ENABLE_DETAILS) ? $conf->global->FCKEDITOR_ENABLE_DETAILS : 0);
159 $toolbarname =
'dolibarr_details';
161 $toolbarname =
'dolibarr_notes';
163 $doleditor =
new DolEditor(
'product_desc', GETPOSTISSET(
'product_desc') ?
GETPOST(
'product_desc',
'restricthtml') : $line->
description,
'', (!
getDolGlobalString(
'MAIN_DOLEDITOR_HEIGHT') ? 164 : $conf->global->MAIN_DOLEDITOR_HEIGHT), $toolbarname,
'', false, true, $enable, $nbrows,
'98%');
164 $doleditor->Create();
166 print
'<textarea id="product_desc" class="flat" name="product_desc" readonly style="width: 200px; height:80px;">';
167 print GETPOSTISSET(
'product_desc') ?
GETPOST(
'product_desc',
'restricthtml') : $line->
description;
172 if (!empty($extrafields)) {
173 $temps = $line->showOptionals($extrafields,
'edit', array(
'class'=>
'tredited'),
'',
'', 1,
'line');
174 if (!empty($temps)) {
175 print
'<div style="padding-top: 10px" id="extrafield_lines_area_edit" name="extrafield_lines_area_edit">';
182 if (isModEnabled(
"service") && $line->product_type == 1 && ($line->element ==
'facturedetrec' || $line->element ==
'invoice_supplier_det_rec')) {
183 if ($line->element ==
'invoice_supplier_det_rec') {
184 $line->date_start_fill = $line->date_start;
185 $line->date_end_fill = $line->date_end;
188 echo $langs->trans(
'AutoFillDateFrom').
' ';
189 echo $form->selectyesno(
'date_start_fill', GETPOSTISSET(
'date_start_fill') ?
GETPOST(
'date_start_fill',
'int') : $line->date_start_fill, 1);
191 echo $langs->trans(
'AutoFillDateTo').
' ';
192 echo $form->selectyesno(
'date_end_fill', GETPOSTISSET(
'date_end_fill') ?
GETPOST(
'date_end_fill',
'int') : $line->date_end_fill, 1);
199 if ($object->element ==
'supplier_proposal' || $object->element ==
'order_supplier' || $object->element ==
'invoice_supplier' || $object->element ==
'invoice_supplier_rec') {
201 <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>
203 print
'<input type="hidden" id="fournprice" name="fournprice" class="" value="'.$line->fk_fournprice.
'">';
208 if (!$situationinvoicelinewithparent) {
209 print
'<td class="right">';
210 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);
213 print
'<td class="right"><input size="1" type="text" class="flat right" name="tva_tx" value="'.price($line->tva_tx).
'" readonly />%</td>';
217 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))).
'"';
218 if ($situationinvoicelinewithparent) {
223 if (isModEnabled(
"multicurrency") && $object->multicurrency_code != $conf->currency) {
225 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>';
228 if (!empty($inputalsopricewithtax) && !
getDolGlobalInt(
'MAIN_NO_INPUT_PRICE_WITH_TAX')) {
230 $upinctax = isset($line->pu_ttc) ? $line->pu_ttc :
null;
232 $upinctax =
price2num($line->total_ttc / $line->qty,
'MU');
234 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) :
'')).
'"';
235 if ($situationinvoicelinewithparent) {
243 if (($line->info_bits & 2) != 2) {
248 print
'<input size="3" type="text" class="flat right" name="qty" id="qty" value="'.(GETPOSTISSET(
'qty') ?
GETPOST(
'qty') : $line->qty).
'"';
249 if ($situationinvoicelinewithparent) {
262 if (!empty($line->fk_unit) && !
getDolGlobalString(
'MAIN_EDIT_LINE_ALLOW_ALL_UNIT_TYPE')) {
263 include_once DOL_DOCUMENT_ROOT.
'/core/class/cunits.class.php';
264 $cUnit =
new CUnits($line->db);
265 if ($cUnit->fetch($line->fk_unit) > 0) {
266 if (!empty($cUnit->unit_type)) {
267 $unit_type = $cUnit->unit_type;
272 print
'<td class="left">';
273 print $form->selectUnits(GETPOSTISSET(
'units') ?
GETPOST(
'units') : $line->fk_unit,
"units", 0, $unit_type);
278 <td
class=
"nowraponall right linecoldiscount">
282 if (($line->info_bits & 2) != 2) {
283 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 :
'')).
'"';
284 if ($situationinvoicelinewithparent) {
287 print
'><span class="hideonsmartphone opacitymedium">%</span>';
295 if ($object->situation_cycle_ref) {
297 print
'<td class="nowrap right linecolcycleref"><input class="right" type="text" size="1" value="'.(GETPOSTISSET(
'progress') ?
GETPOST(
'progress') : $line->situation_percent).
'" name="progress">%</td>';
302 if (!empty($usemargins)) {
303 if ($user->hasRight(
'margins',
'creer')) {
305 <td
class=
"margininfos right">
306 <!-- For predef product -->
307 <?php
if (isModEnabled(
"product") || isModEnabled(
"service")) { ?>
308 <select
id=
"fournprice_predef" name=
"fournprice_predef" class=
"flat minwidth75imp right" style=
"display: none;"></select>
310 <!-- For free product -->
311 <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)); ?>">
316 if ($user->hasRight(
'margins',
'creer')) {
318 $margin_rate = (GETPOSTISSET(
"np_marginRate") ?
GETPOST(
"np_marginRate",
"alpha", 2) : (($line->pa_ht == 0) ?
'' :
price($line->marge_tx)));
320 if ($line->subprice < 0) {
321 echo
'<td class="right nowrap margininfos">'.$margin_rate.
'<span class="opacitymedium hideonsmartphone">%</span></td>';
323 echo
'<td class="right nowrap margininfos"><input class="right maxwidth40" type="text" name="np_marginRate" value="'.$margin_rate.
'"><span class="opacitymedium hideonsmartphone">%</span></td>';
328 $mark_rate = (GETPOSTISSET(
"np_markRate") ?
GETPOST(
"np_markRate",
'alpha', 2) :
price($line->marque_tx));
330 if ($line->subprice < 0) {
331 echo
'<td class="right nowrap margininfos">'.$mark_rate.
'<span class="opacitymedium hideonsmartphone">%</span></td>';
333 echo
'<td class="right nowrap margininfos"><input class="right maxwidth40" type="text" name="np_markRate" value="'.$mark_rate.
'"><span class="opacitymedium hideonsmartphone">%</span></td>';
341 <!-- colspan
for this td because it replace total_ht+3 td
for buttons+... -->
342 <td
class=
"center valignmiddle" colspan=
"<?php echo $colspan; ?>"><?php $coldisplay += $colspan; ?>
343 <input
type=
"submit" class=
"reposition button buttongen marginbottomonly button-save" id=
"savelinebutton marginbottomonly" name=
"save" value=
"<?php echo $langs->trans("Save
"); ?>"><br>
344 <input
type=
"submit" class=
"reposition button buttongen marginbottomonly button-cancel" id=
"cancellinebutton" name=
"cancel" value=
"<?php echo $langs->trans("Cancel
"); ?>">
348<?php
if (isModEnabled(
"service") && $line->product_type == 1 && $dateSelector) { ?>
349<tr
id=
"service_duration_area" class=
"treditedlinefordate">
351 <td
class=
"linecolnum center"></td>
353 <td colspan=
"<?php echo $coldisplay - (!getDolGlobalString('MAIN_VIEW_LINE_NUMBER') ? 0 : 1) ?>"><?php echo $langs->trans(
'ServiceLimitedDuration').
' '.$langs->trans(
'From').
' '; ?>
355 $hourmin = (isset($conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE) ? $conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE :
'');
356 print $form->selectDate($line->date_start,
'date_start', $hourmin, $hourmin, $line->date_start ? 0 : 1,
"updateline", 1, 0);
357 print
' '.$langs->trans(
'to').
' ';
358 print $form->selectDate($line->date_end,
'date_end', $hourmin, $hourmin, $line->date_end ? 0 : 1,
"updateline", 1, 0);
360 if (!$line->date_start) {
361 if (isset($conf->global->MAIN_DEFAULT_DATE_START_HOUR)) {
362 print
'jQuery("#date_starthour").val("' .
getDolGlobalString(
'MAIN_DEFAULT_DATE_START_HOUR').
'");';
366 if (isset($conf->global->MAIN_DEFAULT_DATE_START_MIN)) {
367 print
'jQuery("#date_startmin").val("' .
getDolGlobalString(
'MAIN_DEFAULT_DATE_START_MIN').
'");';
370 $res = $line->fetch_product();
372 if ($line->product->isMandatoryPeriod() && $line->product->isService()) {
373 print
'jQuery("#date_start").addClass("error");';
377 if (!$line->date_end) {
378 if (isset($conf->global->MAIN_DEFAULT_DATE_END_HOUR)) {
379 print
'jQuery("#date_endhour").val("' .
getDolGlobalString(
'MAIN_DEFAULT_DATE_END_HOUR').
'");';
381 if (isset($conf->global->MAIN_DEFAULT_DATE_END_MIN)) {
382 print
'jQuery("#date_endmin").val("' .
getDolGlobalString(
'MAIN_DEFAULT_DATE_END_MIN').
'");';
385 $res = $line->fetch_product();
388 if ($line->product->isMandatoryperiod() && $line->product->isService()) {
389 print
'jQuery("#date_end").addClass("error");';
404if (!empty($usemargins) && $user->hasRight(
'margins',
'creer')) {
407 jQuery(document).ready(
function() {
411 $(
"input[name='np_marginRate']:first").blur(
function(e) {
412 return checkFreeLine(e,
"np_marginRate");
418 $(
"input[name='np_markRate']:first").blur(
function(e) {
419 return checkFreeLine(e,
"np_markRate");
426 function checkFreeLine(e, npRate)
428 var buying_price = $(
"input[name='buying_price']:first");
429 var remise = $(
"input[name='remise_percent']:first");
431 var rate = $(
"input[name='"+npRate+
"']:first");
432 if (rate.val() ==
'')
436 if (! $.isNumeric(ratejs))
438 alert(
'<?php echo dol_escape_js($langs->transnoentities("rateMustBeNumeric")); ?>');
440 setTimeout(
function () { rate.focus() }, 50);
443 if (npRate ==
"np_markRate" && rate.val() >= 100)
445 alert(
'<?php echo dol_escape_js($langs->transnoentities("markRateShouldBeLesserThan100")); ?>');
447 setTimeout(
function () { rate.focus() }, 50);
454 if (remisejs != 100) {
455 if (remisejs ==
'') {
462 if (npRate ==
"np_marginRate")
463 price = ((bpjs * (1 + ratejs / 100)) / (1 - remisejs / 100));
464 else if (npRate ==
"np_markRate")
465 price = ((bpjs / (1 - ratejs / 100)) / (1 - remisejs / 100));
467 $(
"input[name='price_ht']:first").val(
price);
475jQuery(document).ready(
function()
477 jQuery(
"#price_ht").keyup(
function(event) {
479 if (event.which != 9 && (event.which < 37 ||event.which > 40) && jQuery(
"#price_ht").val() !=
'') {
480 jQuery(
"#price_ttc").val(
'');
481 jQuery(
"#multicurrency_subprice").val(
'');
484 jQuery(
"#price_ttc").keyup(
function(event) {
486 if (event.which != 9 && (event.which < 37 || event.which > 40) && jQuery(
"#price_ttc").val() !=
'') {
487 jQuery(
"#price_ht").val(
'');
488 jQuery(
"#multicurrency_subprice").val(
'');
491 jQuery(
"#multicurrency_subprice").keyup(
function(event) {
493 if (event.which != 9 && (event.which < 37 || event.which > 40) && jQuery(
"#price_ttc").val() !=
'') {
494 jQuery(
"#price_ht").val(
'');
495 jQuery(
"#price_ttc").val(
'');
499 <?php
if (in_array($object->table_element_line, array(
'propaldet',
'commandedet',
'facturedet'))) { ?>
500 $(
"#date_start, #date_end").focusout(
function() {
501 if ( $(
this).val() ==
'' && !$(
this).hasClass(
'inputmandatory') ) {
502 $(
this).addClass(
'inputmandatory');
504 $(
this).removeClass(
'inputmandatory');
510 if (isModEnabled(
'margin')) {
513 jQuery(
"#tva_tx").click(
function() {
514 jQuery(
"input[name='np_marginRate']:first").val(
'');
515 jQuery(
"input[name='np_markRate']:first").val(
'');
517 jQuery(
"#tva_tx").keyup(
function() {
518 jQuery(
"input[name='np_marginRate']:first").val(
'');
519 jQuery(
"input[name='np_markRate']:first").val(
'');
521 jQuery(
"#price_ht").keyup(
function() {
522 jQuery(
"input[name='np_marginRate']:first").val(
'');
523 jQuery(
"input[name='np_markRate']:first").val(
'');
525 jQuery(
"#qty").keyup(
function() {
526 jQuery(
"input[name='np_marginRate']:first").val(
'');
527 jQuery(
"input[name='np_markRate']:first").val(
'');
529 jQuery(
"#remise_percent").keyup(
function() {
530 jQuery(
"input[name='np_marginRate']:first").val(
'');
531 jQuery(
"input[name='np_markRate']:first").val(
'');
533 jQuery(
"#buying_price").keyup(
function() {
534 jQuery(
"input[name='np_marginRate']:first").val(
'');
535 jQuery(
"input[name='np_markRate']:first").val(
'');
539 var token =
'<?php echo currentToken(); ?>';
540 $.post(
'<?php echo DOL_URL_ROOT; ?>/fourn/ajax/getSupplierPrices.php', {
'idprod': <?php echo $line->fk_product ? $line->fk_product : 0; ?>,
'token': token },
function(data) {
541 if (data && data.length > 0) {
544 $(data).each(
function() {
545 options +=
'<option value="'+this.
id+
'" price="'+this.price+
'"';
546 <?php
if ($line->fk_fournprice > 0) { ?>
547 if (this.id == <?php echo $line->fk_fournprice; ?>) {
548 options +=
' selected';
549 $(
"#buying_price").val(this.price);
553 options +=
'>'+this.label+
'</option>';
555 options +=
'<option value=null'+(trouve?
'':
' selected')+
'><?php echo $langs->trans("InputPrice"); ?></option>';
556 $(
"#fournprice").html(options);
558 $(
"#buying_price").hide();
559 $(
"#fournprice").show();
561 $(
"#buying_price").show();
563 $(
"#fournprice").change(
function() {
564 var selval = $(
this).find(
'option:selected').attr(
"price");
566 $(
"#buying_price").val(selval).hide();
568 $(
'#buying_price').show();
571 $(
"#fournprice").hide();
572 $(
'#buying_price').show();
581<!-- 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 a 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.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
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.