Completed
Push — master ( f50dd8...4e6d28 )
by
unknown
12s queued 11s
created

ActionsSubtotal::pdf_getlineremisepercent()   B

Complexity

Conditions 7
Paths 20

Size

Total Lines 30
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 7
eloc 16
nc 20
nop 3
dl 0
loc 30
rs 8.8333
c 0
b 0
f 0
1
<?php
2
class ActionsSubtotal
3
{
4
	
5
	function __construct($db)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
6
	{
7
		global $langs;
8
		
9
		$this->db = $db;
0 ignored issues
show
Bug Best Practice introduced by
The property db does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
10
		$langs->load('subtotal@subtotal');
11
		
12
		$this->allow_move_block_lines = true;
0 ignored issues
show
Bug Best Practice introduced by
The property allow_move_block_lines does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
13
	}
14
	
15
	function printFieldListSelect($parameters, &$object, &$action, $hookmanager) {
0 ignored issues
show
Unused Code introduced by
The parameter $object is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

15
	function printFieldListSelect($parameters, /** @scrutinizer ignore-unused */ &$object, &$action, $hookmanager) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $action is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

15
	function printFieldListSelect($parameters, &$object, /** @scrutinizer ignore-unused */ &$action, $hookmanager) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
Unused Code introduced by
The parameter $hookmanager is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

15
	function printFieldListSelect($parameters, &$object, &$action, /** @scrutinizer ignore-unused */ $hookmanager) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
16
		
17
		global $type_element, $where;
18
		
19
		$contexts = explode(':',$parameters['context']);
20
		
21
		if(in_array('consumptionthirdparty',$contexts) && in_array($type_element, array('propal', 'order', 'invoice', 'supplier_order', 'supplier_invoice', 'supplier_proposal'))) {
22
			$mod_num = TSubtotal::$module_number;
23
			
24
			// Not a title (can't use TSubtotal class methods in sql)
25
			$where.= ' AND (d.special_code != '.$mod_num.' OR d.product_type != 9 OR d.qty > 9)';
26
			// Not a subtotal (can't use TSubtotal class methods in sql)
27
			$where.= ' AND (d.special_code != '.$mod_num.' OR d.product_type != 9 OR d.qty < 90)';
28
			// Not a free line text (can't use TSubtotal class methods in sql)
29
			$where.= ' AND (d.special_code != '.$mod_num.' OR d.product_type != 9 OR d.qty != 50)';
30
			
31
		}
32
		
33
	}
34
	
35
	
36
	function createDictionaryFieldlist($parameters, &$object, &$action, $hookmanager)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
Unused Code introduced by
The parameter $hookmanager is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

36
	function createDictionaryFieldlist($parameters, &$object, &$action, /** @scrutinizer ignore-unused */ $hookmanager)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $object is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

36
	function createDictionaryFieldlist($parameters, /** @scrutinizer ignore-unused */ &$object, &$action, $hookmanager)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $action is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

36
	function createDictionaryFieldlist($parameters, &$object, /** @scrutinizer ignore-unused */ &$action, $hookmanager)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
37
	{
38
		global $conf;
39
40
		if ($parameters['tabname'] == MAIN_DB_PREFIX.'c_subtotal_free_text')
0 ignored issues
show
Bug introduced by
The constant MAIN_DB_PREFIX was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
41
		{
42
			// Merci Dolibarr de remplacer les textarea par un input text
43
			if ((float) DOL_VERSION >= 6.0)
0 ignored issues
show
Bug introduced by
The constant DOL_VERSION was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
44
			{
45
				$value = '';
46
				$sql = 'SELECT content FROM '.MAIN_DB_PREFIX.'c_subtotal_free_text WHERE rowid = '.GETPOST('rowid');
0 ignored issues
show
Bug introduced by
The function GETPOST was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

46
				$sql = 'SELECT content FROM '.MAIN_DB_PREFIX.'c_subtotal_free_text WHERE rowid = './** @scrutinizer ignore-call */ GETPOST('rowid');
Loading history...
47
				$resql = $this->db->query($sql);
48
				if ($resql && ($obj = $this->db->fetch_object($resql))) $value = $obj->content;
49
			}
50
			
51
			?>
52
			<script type="text/javascript">
53
				$(function() {
54
					
55
					<?php if ((float) DOL_VERSION >= 6.0) { ?>
56
							if ($('input[name=content]').length > 0)
57
							{
58
								$('input[name=content]').each(function(i,item) {
59
									var value = '';
60
									// Le dernier item correspond à l'édition
61
									if (i == $('input[name=content]').length) value = <?php echo json_encode($value); ?>;
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $value does not seem to be defined for all execution paths leading up to this point.
Loading history...
62
									$(item).replaceWith($('<textarea name="content">'+value+'</textarea>'));
63
								});
64
								
65
								<?php if (!empty($conf->fckeditor->enabled) && !empty($conf->global->FCKEDITOR_ENABLE_DETAILS)) { ?>
66
								$('textarea[name=content]').each(function(i, item) {
67
									CKEDITOR.replace(item, {
68
										toolbar: 'dolibarr_notes'
69
										,customConfig : ckeditorConfig
70
									});
71
								});
72
								<?php } ?>
73
							}
74
					<?php } else { ?>
75
						// <= 5.0
76
						// Le CKEditor est forcé sur la page dictionnaire, pas possible de mettre une valeur custom
77
						// petit js qui supprimer le wysiwyg et affiche le textarea car avant la version 6.0 le wysiwyg sur une page de dictionnaire est inexploitable
78
						<?php if (!empty($conf->fckeditor->enabled)) { ?>
79
							CKEDITOR.on('instanceReady', function(ev) {
80
								var editor = ev.editor;
81
82
								if (editor.name == 'content') // Mon champ en bdd s'appel "content", pas le choix si je veux avoir un textarea sur une page de dictionnaire
83
								{
84
									editor.element.show();
85
									editor.destroy();
86
								}
87
							});
88
						<?php } ?>
89
					<?php } ?>
90
				});
91
			</script>
92
			<?php
93
		}
94
	}
95
	
96
	/** Overloading the doActions function : replacing the parent's function with the one below
97
	 * @param      $parameters  array           meta datas of the hook (context, etc...)
98
	 * @param      $object      CommonObject    the object you want to process (an invoice if you are in invoice module, a propale in propale's module, etc...)
99
	 * @param      $action      string          current action (if set). Generally create or edit or null
100
	 * @param      $hookmanager HookManager     current hook manager
101
	 * @return     void
102
	 */
103
    
104
    var $module_number = 104777;
105
    
106
    function formObjectOptions($parameters, &$object, &$action, $hookmanager) 
0 ignored issues
show
Unused Code introduced by
The parameter $hookmanager is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

106
    function formObjectOptions($parameters, &$object, &$action, /** @scrutinizer ignore-unused */ $hookmanager) 

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
107
    {
108
      	global $langs,$db,$user, $conf;
109
		
110
		$langs->load('subtotal@subtotal');
111
		
112
		$contexts = explode(':',$parameters['context']);
113
		
114
		if(in_array('ordercard',$contexts) || in_array('ordersuppliercard',$contexts) || in_array('propalcard',$contexts) || in_array('supplier_proposalcard',$contexts) || in_array('invoicecard',$contexts) || in_array('invoicesuppliercard',$contexts) || in_array('invoicereccard',$contexts)) {
115
			
116
			$createRight = $user->rights->{$object->element}->creer;
117
			if($object->element == 'facturerec' )
118
			{
119
				$object->statut = 0; // hack for facture rec
120
				$createRight = $user->rights->facture->creer;
121
			} elseif($object->element == 'order_supplier' )
122
			{
123
			    $createRight = $user->rights->fournisseur->commande->creer;
124
			} elseif($object->element == 'invoice_supplier' )
125
			{
126
			    $createRight = $user->rights->fournisseur->facture->creer;
127
			}
128
			
129
			if ($object->statut == 0  && $createRight) {
130
			
131
132
				if($object->element=='facture')$idvar = 'facid';
133
				else $idvar='id';
134
				
135
				if(in_array($action, array('add_title_line', 'add_total_line', 'add_subtitle_line', 'add_subtotal_line', 'add_free_text')) )
136
				{
137
					$level = GETPOST('level', 'int'); //New avec SUBTOTAL_USE_NEW_FORMAT
0 ignored issues
show
Bug introduced by
The function GETPOST was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

137
					$level = /** @scrutinizer ignore-call */ GETPOST('level', 'int'); //New avec SUBTOTAL_USE_NEW_FORMAT
Loading history...
138
					
139
					if($action=='add_title_line') {
140
						$title = GETPOST('title');
141
						if(empty($title)) $title = $langs->trans('title');
142
						$qty = $level<1 ? 1 : $level ;
143
					}
144
					else if($action=='add_free_text') {
145
						$title = GETPOST('title');
146
147
						if (empty($title)) {
148
							$free_text = GETPOST('free_text', 'int');
149
							if (!empty($free_text)) {
150
								$TFreeText = getTFreeText();
151
								if (!empty($TFreeText[$free_text])) {
152
									$title = $TFreeText[$free_text]->content;
153
								}
154
							}
155
						}
156
						if(empty($title)) $title = $langs->trans('subtotalAddLineDescription');
157
						$qty = 50;
158
					}
159
					else if($action=='add_subtitle_line') {
160
						$title = GETPOST('title');
161
						if(empty($title)) $title = $langs->trans('subtitle');
162
						$qty = 2;
163
					}
164
					else if($action=='add_subtotal_line') {
165
						$title = $langs->trans('SubSubTotal');
166
						$qty = 98;
167
					}
168
					else {
169
						$title = GETPOST('title') ? GETPOST('title') : $langs->trans('SubTotal');
170
						$qty = $level ? 100-$level : 99;
171
					}
172
					dol_include_once('/subtotal/class/subtotal.class.php');
0 ignored issues
show
Bug introduced by
The function dol_include_once was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

172
					/** @scrutinizer ignore-call */ 
173
     dol_include_once('/subtotal/class/subtotal.class.php');
Loading history...
173
					
174
					if (!empty($conf->global->SUBTOTAL_AUTO_ADD_SUBTOTAL_ON_ADDING_NEW_TITLE) && $qty < 10) TSubtotal::addSubtotalMissing($object, $qty);
175
					
176
	    			TSubtotal::addSubTotalLine($object, $title, $qty);
177
				}
178
				else if($action==='ask_deleteallline') {
179
						$form=new Form($db);
0 ignored issues
show
Bug introduced by
The type Form was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
180
						
181
						$lineid = GETPOST('lineid','integer');
182
						$TIdForGroup = $this->getArrayOfLineForAGroup($object, $lineid);
183
					
184
						$nbLines = count($TIdForGroup);
185
					
186
						$formconfirm=$form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id.'&lineid='.$lineid, $langs->trans('deleteWithAllLines'), $langs->trans('ConfirmDeleteAllThisLines',$nbLines), 'confirm_delete_all_lines','',0,1);
187
						print $formconfirm;
188
				}
189
190
				if (!empty($conf->global->SUBTOTAL_ALLOW_ADD_LINE_UNDER_TITLE))
191
				{
192
					$this->showSelectTitleToAdd($object);
193
				}
194
195
				
196
				if($action!='editline') {
197
					// New format is for 3.8
198
					$this->printNewFormat($object, $conf, $langs, $idvar);
199
				}
200
			}
201
		}
202
		elseif ((!empty($parameters['currentcontext']) && $parameters['currentcontext'] == 'orderstoinvoice') || in_array('orderstoinvoice',$contexts))
203
		{
204
			?>
205
			<script type="text/javascript">
206
				$(function() {
207
					var tr = $("<tr><td><?php echo $langs->trans('subtotal_add_title_bloc_from_orderstoinvoice'); ?></td><td><input type='checkbox' value='1' name='subtotal_add_title_bloc_from_orderstoinvoice' checked='checked' /></td></tr>")
208
					$("textarea[name=note]").closest('tr').after(tr);
209
				});
210
			</script>
211
			<?php
212
			
213
		}
214
215
		return 0;
216
	}
217
     
218
	function printNewFormat(&$object, &$conf, &$langs, $idvar)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
219
	{
220
		if (empty($conf->global->SUBTOTAL_ALLOW_ADD_BLOCK)) return false;
221
		if (!empty($object->situation_cycle_ref) && $object->situation_counter > 1) return false; // Si facture de situation
222
		?>
223
		 	<script type="text/javascript">
224
				$(document).ready(function() {
225
					$('div.fiche div.tabsAction').append('<br />');
226
					
227
					$('div.fiche div.tabsAction').append('<div class="inline-block divButAction"><a id="add_title_line" rel="add_title_line" href="javascript:;" class="butAction"><?php echo  $langs->trans('AddTitle' )?></a></div>');
228
					$('div.fiche div.tabsAction').append('<div class="inline-block divButAction"><a id="add_total_line" rel="add_total_line" href="javascript:;" class="butAction"><?php echo  $langs->trans('AddSubTotal')?></a></div>');
229
					$('div.fiche div.tabsAction').append('<div class="inline-block divButAction"><a id="add_free_text" rel="add_free_text" href="javascript:;" class="butAction"><?php echo  $langs->trans('AddFreeText')?></a></div>');
230
231
232
					function updateAllMessageForms(){
233
				         for (instance in CKEDITOR.instances) {
234
				             CKEDITOR.instances[instance].updateElement();
235
				         }
236
				    }
237
					
238
					function promptSubTotal(action, titleDialog, label, url_to, url_ajax, params, use_textarea, show_free_text, show_under_title) {
239
					     $( "#dialog-prompt-subtotal" ).remove();
240
						 
241
						 var dialog_html = '<div id="dialog-prompt-subtotal" '+(action == 'addSubtotal' ? 'class="center"' : '')+' >';
242
						 
243
						 if (typeof show_under_title != 'undefined' && show_under_title)
244
						 {
245
							 var selectUnderTitle = <?php echo json_encode(getHtmlSelectTitle($object, true)); ?>;
246
							 dialog_html += selectUnderTitle + '<br /><br />';
247
						 }
248
						
249
						if (action == 'addTitle' || action == 'addFreeTxt')
250
						{
251
							if (typeof show_free_text != 'undefined' && show_free_text)
252
							{
253
							   var selectFreeText = <?php echo json_encode(getHtmlSelectFreeText()); ?>;
254
							   dialog_html += selectFreeText + ' <?php echo $langs->transnoentities('subtotalFreeTextOrDesc'); ?><br />';
255
							}
256
						 
257
							if (typeof use_textarea != 'undefined' && use_textarea) dialog_html += '<textarea id="sub-total-title" rows="<?php echo ROWS_8; ?>" cols="80" placeholder="'+label+'"></textarea>';
0 ignored issues
show
Bug introduced by
The constant ROWS_8 was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
258
							else dialog_html += '<input id="sub-total-title" size="30" value="" placeholder="'+label+'" />';
259
						}
260
						 
261
						if (action == 'addTitle' || action == 'addSubtotal')
262
						{
263
							if (action == 'addSubtotal') dialog_html += '<input id="sub-total-title" size="30" value="" placeholder="'+label+'" />';
264
							
265
							dialog_html += "&nbsp;<select name='subtotal_line_level'>";
266
							for (var i=1;i<10;i++)
267
							{
268
								dialog_html += "<option value="+i+"><?php echo $langs->trans('Level'); ?> "+i+"</option>";
269
							}
270
							dialog_html += "</select>";
271
						}
272
						 
273
						 dialog_html += '</div>';
274
					    
275
						$('body').append(dialog_html);
276
277
						<?php 
278
						$editorTool = empty($conf->global->FCKEDITOR_EDITORNAME)?'ckeditor':$conf->global->FCKEDITOR_EDITORNAME;
279
						$editorConf = empty($conf->global->FCKEDITOR_ENABLE_DETAILS)?false:$conf->global->FCKEDITOR_ENABLE_DETAILS;
280
						if($editorConf && in_array($editorTool,array('textarea','ckeditor'))){ 
281
						?>
282
						if (action == 'addTitle' || action == 'addFreeTxt')
283
						{
284
							if (typeof use_textarea != 'undefined' && use_textarea && typeof CKEDITOR == "object" && typeof CKEDITOR.instances != "undefined" )
285
							{
286
								 CKEDITOR.replace( 'sub-total-title', {toolbar: 'dolibarr_details', toolbarStartupExpanded: false} );
287
							}
288
						}
289
						<?php } ?>
290
						
291
					     $( "#dialog-prompt-subtotal" ).dialog({
292
	                        resizable: false,
293
							height: 'auto',
294
							width: 'auto',
295
	                        modal: true,
296
	                        title: titleDialog,
297
	                        buttons: {
298
	                            "Ok": function() {
299
	                            	if (typeof use_textarea != 'undefined' && use_textarea && typeof CKEDITOR == "object" && typeof CKEDITOR.instances != "undefined" ){ updateAllMessageForms(); }
300
									params.title = params.title = (typeof CKEDITOR == "object" && typeof CKEDITOR.instances != "undefined" && "sub-total-title" in CKEDITOR.instances ? CKEDITOR.instances["sub-total-title"].getData() : $(this).find('#sub-total-title').val());
301
									params.under_title = $(this).find('select[name=under_title]').val();
302
									params.free_text = $(this).find('select[name=free_text]').val();
303
									params.level = $(this).find('select[name=subtotal_line_level]').val();
304
									
305
									$.ajax({
306
										url: url_ajax
307
										,type: 'POST'
308
										,data: params
309
									}).done(function() {
310
										document.location.href=url_to;
311
									});
312
									
313
                                    $( this ).dialog( "close" );
314
	                            },
315
	                            "<?php echo $langs->trans('Cancel') ?>": function() {
316
	                                $( this ).dialog( "close" );
317
	                            }
318
	                        }
319
	                     });
320
					}
321
					
322
					$('a[rel=add_title_line]').click(function() 
323
					{
324
						promptSubTotal('addTitle'
325
							 , "<?php echo $langs->trans('YourTitleLabel') ?>"
326
							 , "<?php echo $langs->trans('title'); ?>"
327
							 , '?<?php echo $idvar ?>=<?php echo $object->id; ?>'
328
							 , '<?php echo $_SERVER['PHP_SELF']; ?>'
329
							 , {<?php echo $idvar; ?>: <?php echo (int) $object->id; ?>, action:'add_title_line'}
330
						);
331
					});
332
					
333
					$('a[rel=add_total_line]').click(function()
334
					{
335
						promptSubTotal('addSubtotal'
336
							, '<?php echo $langs->trans('YourSubtotalLabel') ?>'
337
							, '<?php echo $langs->trans('subtotal'); ?>'
338
							, '?<?php echo $idvar ?>=<?php echo $object->id; ?>'
339
							, '<?php echo $_SERVER['PHP_SELF']; ?>'
340
							, {<?php echo $idvar; ?>: <?php echo (int) $object->id; ?>, action:'add_total_line'}
341
							/*,false,false, <?php echo !empty($conf->global->SUBTOTAL_ALLOW_ADD_LINE_UNDER_TITLE) ? 'true' : 'false'; ?>*/
342
						);
343
					});
344
					
345
					$('a[rel=add_free_text]').click(function() 
346
					{
347
						promptSubTotal('addFreeTxt'
348
							, "<?php echo $langs->transnoentitiesnoconv('YourTextLabel') ?>"
349
							, "<?php echo $langs->trans('subtotalAddLineDescription'); ?>"
350
							, '?<?php echo $idvar ?>=<?php echo $object->id; ?>'
351
							, '<?php echo $_SERVER['PHP_SELF']; ?>'
352
							, {<?php echo $idvar; ?>: <?php echo (int) $object->id; ?>, action:'add_free_text'}
353
							, true
354
							, true
355
							, <?php echo !empty($conf->global->SUBTOTAL_ALLOW_ADD_LINE_UNDER_TITLE) ? 'true' : 'false'; ?>
356
						);
357
					});
358
				});
359
		 	</script>
360
		 <?php
361
	}	 
362
	 
363
	function showSelectTitleToAdd(&$object)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
364
	{
365
		global $langs;
366
		
367
		dol_include_once('/subtotal/class/subtotal.class.php');
0 ignored issues
show
Bug introduced by
The function dol_include_once was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

367
		/** @scrutinizer ignore-call */ 
368
  dol_include_once('/subtotal/class/subtotal.class.php');
Loading history...
368
		dol_include_once('/subtotal/lib/subtotal.lib.php');
369
		$TTitle = TSubtotal::getAllTitleFromDocument($object);
0 ignored issues
show
Unused Code introduced by
The assignment to $TTitle is dead and can be removed.
Loading history...
370
		
371
		?>
372
		<script type="text/javascript">
373
			$(function() {
374
				var add_button = $("#addline");
375
				
376
				if (add_button.length > 0)
377
				{
378
					add_button.closest('tr').prev('tr.liste_titre').children('td:last').addClass('center').text("<?php echo $langs->trans('subtotal_title_to_add_under_title'); ?>");
379
					var select_title = $(<?php echo json_encode(getHtmlSelectTitle($object)); ?>);
380
					
381
					add_button.before(select_title);
382
				}
383
			});
384
		</script>
385
		<?php
386
	}
387
	
388
	
389
	function formBuilddocOptions($parameters, &$object) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
390
	/* Réponse besoin client */		
391
			
392
		global $conf, $langs, $bc;
393
			
394
		$action = GETPOST('action');	
0 ignored issues
show
Unused Code introduced by
The assignment to $action is dead and can be removed.
Loading history...
Bug introduced by
The function GETPOST was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

394
		$action = /** @scrutinizer ignore-call */ GETPOST('action');	
Loading history...
395
		$TContext = explode(':',$parameters['context']);
396
		if (
397
				in_array('invoicecard',$TContext)
398
		        || in_array('invoicesuppliercard',$TContext)
399
				|| in_array('propalcard',$TContext)
400
				|| in_array('ordercard',$TContext)
401
		        || in_array('ordersuppliercard',$TContext)
402
				|| in_array('invoicereccard',$TContext)
403
			)
404
	        {	
405
	            $hideInnerLines	= isset( $_SESSION['subtotal_hideInnerLines_'.$parameters['modulepart']][$object->id] ) ?  $_SESSION['subtotal_hideInnerLines_'.$parameters['modulepart']][$object->id] : 0;
406
	            $hidedetails	= isset( $_SESSION['subtotal_hidedetails_'.$parameters['modulepart']][$object->id] ) ?  $_SESSION['subtotal_hidedetails_'.$parameters['modulepart']][$object->id] : 0;
407
				$hidepricesDefaultConf = !empty($conf->global->SUBTOTAL_HIDE_PRICE_DEFAULT_CHECKED)?$conf->global->SUBTOTAL_HIDE_PRICE_DEFAULT_CHECKED:0;
408
				$hideprices= isset( $_SESSION['subtotal_hideprices_'.$parameters['modulepart']][$object->id] ) ?  $_SESSION['subtotal_hideprices_'.$parameters['modulepart']][$object->id] : $hidepricesDefaultConf;
409
				
410
				$var=false;
411
		     	$out.= '<tr '.$bc[$var].'>
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $out seems to be never defined.
Loading history...
412
		     			<td colspan="4" align="right">
413
		     				<label for="hideInnerLines">'.$langs->trans('HideInnerLines').'</label>
414
		     				<input type="checkbox" onclick="if($(this).is(\':checked\')) { $(\'#hidedetails\').prop(\'checked\', \'checked\')  }" id="hideInnerLines" name="hideInnerLines" value="1" '.(( $hideInnerLines ) ? 'checked="checked"' : '' ).' />
415
		     			</td>
416
		     			</tr>';
417
				
418
		     	$var=!$var;
0 ignored issues
show
introduced by
The condition $var is always false.
Loading history...
419
		     	$out.= '<tr '.$bc[$var].'>
420
		     			<td colspan="4" align="right">
421
		     				<label for="hidedetails">'.$langs->trans('SubTotalhidedetails').'</label>
422
		     				<input type="checkbox" id="hidedetails" name="hidedetails" value="1" '.(( $hidedetails ) ? 'checked="checked"' : '' ).' />
423
		     			</td>
424
		     			</tr>';
425
		     	
426
		     	$var=!$var;
0 ignored issues
show
introduced by
The condition $var is always true.
Loading history...
427
		     	$out.= '<tr '.$bc[$var].'>
428
		     			<td colspan="4" align="right">
429
		     				<label for="hideprices">'.$langs->trans('SubTotalhidePrice').'</label>
430
		     				<input type="checkbox" id="hideprices" name="hideprices" value="1" '.(( $hideprices ) ? 'checked="checked"' : '' ).' />
431
		     			</td>
432
		     			</tr>';
433
		     	
434
		     	
435
				 
436
				if ( 
437
					(in_array('propalcard',$TContext) && !empty($conf->global->SUBTOTAL_PROPAL_ADD_RECAP))
438
					|| (in_array('ordercard',$TContext) && !empty($conf->global->SUBTOTAL_COMMANDE_ADD_RECAP))
439
				    || (in_array('ordersuppliercard',$TContext) && !empty($conf->global->SUBTOTAL_COMMANDE_ADD_RECAP))
440
					|| (in_array('invoicecard',$TContext) && !empty($conf->global->SUBTOTAL_INVOICE_ADD_RECAP))
441
				    || (in_array('invoicesuppliercard',$TContext) && !empty($conf->global->SUBTOTAL_INVOICE_ADD_RECAP))
442
					|| (in_array('invoicereccard',$TContext)  && !empty($conf->global->SUBTOTAL_INVOICE_ADD_RECAP ))
443
				)
444
				{
445
					$var=!$var;
0 ignored issues
show
introduced by
The condition $var is always false.
Loading history...
446
					$out.= '
447
						<tr '.$bc[$var].'>
448
							<td colspan="4" align="right">
449
								<label for="subtotal_add_recap">'.$langs->trans('subtotal_add_recap').'</label>
450
								<input type="checkbox" id="subtotal_add_recap" name="subtotal_add_recap" value="1" '.( GETPOST('subtotal_add_recap') ? 'checked="checked"' : '' ).' />
451
							</td>
452
						</tr>';
453
				}
454
				
455
				
456
				$this->resprints = $out;	
0 ignored issues
show
Bug Best Practice introduced by
The property resprints does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
457
			}
458
			
459
		
460
        return 1;
461
	} 
462
	 
463
    function formEditProductOptions($parameters, &$object, &$action, $hookmanager) 
0 ignored issues
show
Unused Code introduced by
The parameter $object is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

463
    function formEditProductOptions($parameters, /** @scrutinizer ignore-unused */ &$object, &$action, $hookmanager) 

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
Unused Code introduced by
The parameter $action is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

463
    function formEditProductOptions($parameters, &$object, /** @scrutinizer ignore-unused */ &$action, $hookmanager) 

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $hookmanager is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

463
    function formEditProductOptions($parameters, &$object, &$action, /** @scrutinizer ignore-unused */ $hookmanager) 

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
464
    {
465
		
466
    	if (in_array('invoicecard',explode(':',$parameters['context'])))
467
        {
468
        	
469
        }
470
		
471
        return 0;
472
    }
473
	
474
	function ODTSubstitutionLine(&$parameters, &$object, $action, $hookmanager) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
Unused Code introduced by
The parameter $hookmanager is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

474
	function ODTSubstitutionLine(&$parameters, &$object, $action, /** @scrutinizer ignore-unused */ $hookmanager) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $object is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

474
	function ODTSubstitutionLine(&$parameters, /** @scrutinizer ignore-unused */ &$object, $action, $hookmanager) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
475
		global $conf;
476
		
477
		if($action === 'builddoc') {
478
			
479
			$line = &$parameters['line'];
480
			$object = &$parameters['object'];
481
			$substitutionarray = &$parameters['substitutionarray'];
482
			
483
			if($line->product_type == 9 && $line->special_code == $this->module_number) {
484
				$substitutionarray['line_modsubtotal'] = 1;	
485
				
486
				$substitutionarray['line_price_ht']
487
					 = $substitutionarray['line_price_vat'] 
488
					 = $substitutionarray['line_price_ttc']
489
					 = $substitutionarray['line_vatrate']
490
					 = $substitutionarray['line_qty']
491
					 = $substitutionarray['line_up'] 
492
					 = '';
493
				
494
				if($line->qty>90) {
495
					$substitutionarray['line_modsubtotal_total'] = true;
496
					
497
					list($total, $total_tva, $total_ttc, $TTotal_tva) = $this->getTotalLineFromObject($object, $line, '', 1);
498
					
499
					$substitutionarray['line_price_ht'] = $total;
500
					$substitutionarray['line_price_vat'] = $total_tva;
501
					$substitutionarray['line_price_ttc'] = $total_ttc;
502
				} else {
503
					$substitutionarray['line_modsubtotal_title'] = true;
504
				}
505
				
506
				
507
			}	
508
			else{
509
				$substitutionarray['line_not_modsubtotal'] = true;
510
				$substitutionarray['line_modsubtotal'] = 0;
511
			}
512
			
513
		}
514
		
515
	}
516
	
517
	function createFrom($parameters, &$object, $action, $hookmanager) {
0 ignored issues
show
Unused Code introduced by
The parameter $action is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

517
	function createFrom($parameters, &$object, /** @scrutinizer ignore-unused */ $action, $hookmanager) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
Unused Code introduced by
The parameter $hookmanager is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

517
	function createFrom($parameters, &$object, $action, /** @scrutinizer ignore-unused */ $hookmanager) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
518
	
519
		if (
520
				in_array('invoicecard',explode(':',$parameters['context']))
521
		        || in_array('invoicesuppliercard',explode(':',$parameters['context']))
522
				|| in_array('propalcard',explode(':',$parameters['context']))
523
		        || in_array('supplier_proposalcard',explode(':',$parameters['context']))
524
				|| in_array('ordercard',explode(':',$parameters['context']))
525
		        || in_array('ordersuppliercard',explode(':',$parameters['context']))
526
				|| in_array('invoicereccard',explode(':',$parameters['context']))
527
		) {
528
			
529
			global $db;
530
			
531
			$objFrom = $parameters['objFrom'];
532
			
533
			foreach($objFrom->lines as $k=> &$lineOld) {
534
				
535
					if($lineOld->product_type == 9 && $lineOld->info_bits > 0 ) {
536
							
537
							$line = & $object->lines[$k];
538
				
539
							$idLine = (int) ($line->id ? $line->id : $line->rowid); 
540
				
541
							$db->query("UPDATE ".MAIN_DB_PREFIX.$line->table_element."
0 ignored issues
show
Bug introduced by
The constant MAIN_DB_PREFIX was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
542
							SET info_bits=".(int)$lineOld->info_bits."
543
							WHERE rowid = ".$idLine."
544
							");
545
						
546
					}
547
				
548
				
549
			}
550
			
551
			
552
		}
553
		
554
	}
555
	
556
	function doActions($parameters, &$object, $action, $hookmanager)
0 ignored issues
show
Unused Code introduced by
The parameter $hookmanager is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

556
	function doActions($parameters, &$object, $action, /** @scrutinizer ignore-unused */ $hookmanager)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
557
	{
558
		global $db, $conf, $langs,$user;
559
		
560
		dol_include_once('/subtotal/class/subtotal.class.php');
0 ignored issues
show
Bug introduced by
The function dol_include_once was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

560
		/** @scrutinizer ignore-call */ 
561
  dol_include_once('/subtotal/class/subtotal.class.php');
Loading history...
561
		dol_include_once('/subtotal/lib/subtotal.lib.php');
562
		require_once DOL_DOCUMENT_ROOT . '/core/class/extrafields.class.php';
0 ignored issues
show
Bug introduced by
The constant DOL_DOCUMENT_ROOT was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
563
		
564
		$showBlockExtrafields = GETPOST('showBlockExtrafields');
0 ignored issues
show
Bug introduced by
The function GETPOST was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

564
		$showBlockExtrafields = /** @scrutinizer ignore-call */ GETPOST('showBlockExtrafields');
Loading history...
565
		
566
		if($object->element=='facture') $idvar = 'facid';
567
		else $idvar = 'id';
568
			
569
		if ($action == 'updateligne' || $action == 'updateline')
570
		{
571
			$found = false;
572
			$lineid = GETPOST('lineid', 'int');
573
			foreach ($object->lines as &$line)
574
			{
575
				
576
				if ($line->id == $lineid && TSubtotal::isModSubtotalLine($line))
577
				{
578
					$found = true;
579
					if(TSubtotal::isTitle($line) && !empty($showBlockExtrafields)) {
580
						$extrafieldsline = new ExtraFields($db);
0 ignored issues
show
Bug introduced by
The type ExtraFields was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
581
						$extralabelsline = $extrafieldsline->fetch_name_optionals_label($object->table_element_line);
582
						$extrafieldsline->setOptionalsFromPost($extralabelsline, $line);
583
					}
584
					_updateSubtotalLine($object, $line);
585
					_updateSubtotalBloc($object, $line);
586
					
587
					TSubtotal::generateDoc($object);
588
					break;
589
				}
590
			}
591
			
592
			if ($found)
593
			{
594
				header('Location: '.$_SERVER['PHP_SELF'].'?'.$idvar.'='.$object->id);
595
				exit; // Surtout ne pas laisser Dolibarr faire du traitement sur le updateligne sinon ça plante les données de la ligne
596
			}
597
		}
598
		else if($action === 'builddoc') {
599
			
600
			if (
601
				in_array('invoicecard',explode(':',$parameters['context']))
602
				|| in_array('propalcard',explode(':',$parameters['context']))
603
				|| in_array('ordercard',explode(':',$parameters['context']))
604
			    || in_array('ordersuppliercard',explode(':',$parameters['context']))
605
			    || in_array('invoicesuppliercard',explode(':',$parameters['context']))
606
			    || in_array('supplier_proposalcard',explode(':',$parameters['context']))
607
			)
608
	        {								
609
				if(in_array('invoicecard',explode(':',$parameters['context']))) {
610
					$sessname = 'subtotal_hideInnerLines_facture';	
611
					$sessname2 = 'subtotal_hidedetails_facture';
612
					$sessname3 = 'subtotal_hideprices_facture';
613
				}
614
				elseif(in_array('invoicesuppliercard',explode(':',$parameters['context']))) {
615
				    $sessname = 'subtotal_hideInnerLines_facture_fournisseur';
616
				    $sessname2 = 'subtotal_hidedetails_facture_fournisseur';
617
				    $sessname3 = 'subtotal_hideprices_facture_fournisseur';
618
				}
619
				elseif(in_array('propalcard',explode(':',$parameters['context']))) {
620
					$sessname = 'subtotal_hideInnerLines_propal';
621
					$sessname2 = 'subtotal_hidedetails_propal';	
622
					$sessname3 = 'subtotal_hideprices_propal';
623
				}
624
				elseif(in_array('supplier_proposalcard',explode(':',$parameters['context']))) {
625
				    $sessname = 'subtotal_hideInnerLines_supplier_proposal';
626
				    $sessname2 = 'subtotal_hidedetails_supplier_proposal';
627
				    $sessname3 = 'subtotal_hideprices_supplier_proposal';
628
				}
629
				elseif(in_array('ordercard',explode(':',$parameters['context']))) {
630
					$sessname = 'subtotal_hideInnerLines_commande';
631
					$sessname2 = 'subtotal_hidedetails_commande';	
632
					$sessname3 = 'subtotal_hideprices_commande';
633
				}
634
				elseif(in_array('ordersuppliercard',explode(':',$parameters['context']))) {
635
				    $sessname = 'subtotal_hideInnerLines_commande_fournisseur';
636
				    $sessname2 = 'subtotal_hidedetails_commande_fournisseur';
637
				    $sessname3 = 'subtotal_hideprices_commande_fournisseur';
638
				}
639
				else {
640
					$sessname = 'subtotal_hideInnerLines_unknown';
641
					$sessname2 = 'subtotal_hidedetails_unknown';
642
					$sessname3 = 'subtotal_hideprices_unknown';
643
				}
644
					
645
				global $hideprices;
646
				
647
				$hideInnerLines = (int)GETPOST('hideInnerLines');
648
				if(!empty($_SESSION[$sessname]) && !is_array($_SESSION[$sessname][$object->id]) ) $_SESSION[$sessname] = array(); // prevent old system
649
				$_SESSION[$sessname][$object->id] = $hideInnerLines;		
650
				
651
				$hidedetails= (int)GETPOST('hidedetails');
652
				if(!empty($_SESSION[$sessname2]) && !is_array($_SESSION[$sessname2][$object->id]) ) $_SESSION[$sessname2] = array(); // prevent old system
653
				$_SESSION[$sessname2][$object->id] = $hidedetails;
654
				
655
				$hideprices= (int)GETPOST('hideprices');
656
				if(!empty($_SESSION[$sessname3]) && !is_array($_SESSION[$sessname3][$object->id]) ) $_SESSION[$sessname3] = array(); // prevent old system
657
				$_SESSION[$sessname3][$object->id] = $hideprices;
658
				
659
				foreach($object->lines as &$line) {
660
					if ($line->product_type == 9 && $line->special_code == $this->module_number) {
661
					    
662
                        if($line->qty>=90) {
663
                            $line->modsubtotal_total = 1;
664
                        }
665
                        else{
666
                            $line->modsubtotal_title = 1;
667
                        }
668
                        
669
						$line->total_ht = $this->getTotalLineFromObject($object, $line, '');
670
					}
671
	        	}
672
	        }
673
			
674
		}
675
		else if($action === 'confirm_delete_all_lines' && GETPOST('confirm')=='yes') {
676
			
677
			$Tab = $this->getArrayOfLineForAGroup($object, GETPOST('lineid'));
678
			
679
			foreach($Tab as $idLine) {
680
				/**
681
				 * @var $object Facture
682
				 */
683
				if($object->element=='facture') $object->deleteline($idLine);
684
				/**
685
				 * @var $object Facture fournisseur
686
				 */
687
				else if($object->element=='invoice_supplier')
688
				{
689
				    $object->deleteline($idLine);
690
				}
691
				/**
692
				 * @var $object Propal
693
				 */
694
				else if($object->element=='propal') $object->deleteline($idLine);
695
				/**
696
				 * @var $object Propal Fournisseur
697
				 */
698
				else if($object->element=='supplier_proposal') $object->deleteline($idLine);
699
				/**
700
				 * @var $object Commande
701
				 */
702
				else if($object->element=='commande') 
703
				{
704
					if ((float) DOL_VERSION >= 5.0) $object->deleteline($user, $idLine);
0 ignored issues
show
Bug introduced by
The constant DOL_VERSION was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
705
					else $object->deleteline($idLine);
706
				}
707
				/**
708
				 * @var $object Commande fournisseur
709
				 */
710
				else if($object->element=='order_supplier')
711
				{
712
				    $object->deleteline($idLine);
713
				}
714
				/**
715
				 * @var $object Facturerec
716
				 */
717
				else if($object->element=='facturerec') $object->deleteline($idLine);
718
			}
719
			
720
			header('location:?id='.$object->id);
721
			exit;
722
			
723
		}
724
		else if ($action == 'duplicate')
725
		{
726
			$lineid = GETPOST('lineid', 'int');
727
			$nbDuplicate = TSubtotal::duplicateLines($object, $lineid, true);
728
			
729
			if ($nbDuplicate > 0) setEventMessage($langs->trans('subtotal_duplicate_success', $nbDuplicate));
0 ignored issues
show
Bug introduced by
The function setEventMessage was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

729
			if ($nbDuplicate > 0) /** @scrutinizer ignore-call */ setEventMessage($langs->trans('subtotal_duplicate_success', $nbDuplicate));
Loading history...
730
			elseif ($nbDuplicate == 0) setEventMessage($langs->trans('subtotal_duplicate_lineid_not_found'), 'warnings');
0 ignored issues
show
Bug Best Practice introduced by
It seems like you are loosely comparing $nbDuplicate of type null|integer to 0; this is ambiguous as not only 0 == 0 is true, but null == 0 is true, too. Consider using a strict comparison ===.
Loading history...
731
			else setEventMessage($langs->trans('subtotal_duplicate_error'), 'errors');
732
			
733
			header('Location: ?id='.$object->id);
734
			exit;
735
		}
736
		
737
		return 0;
738
	}
739
	
740
	function formAddObjectLine ($parameters, &$object, &$action, $hookmanager) {
0 ignored issues
show
Unused Code introduced by
The parameter $object is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

740
	function formAddObjectLine ($parameters, /** @scrutinizer ignore-unused */ &$object, &$action, $hookmanager) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $hookmanager is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

740
	function formAddObjectLine ($parameters, &$object, &$action, /** @scrutinizer ignore-unused */ $hookmanager) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
Unused Code introduced by
The parameter $parameters is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

740
	function formAddObjectLine (/** @scrutinizer ignore-unused */ $parameters, &$object, &$action, $hookmanager) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $action is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

740
	function formAddObjectLine ($parameters, &$object, /** @scrutinizer ignore-unused */ &$action, $hookmanager) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
741
		return 0;
742
	}
743
	
744
	function changeRoundingMode($parameters, &$object, &$action, $hookmanager)
0 ignored issues
show
Unused Code introduced by
The parameter $action is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

744
	function changeRoundingMode($parameters, &$object, /** @scrutinizer ignore-unused */ &$action, $hookmanager)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $hookmanager is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

744
	function changeRoundingMode($parameters, &$object, &$action, /** @scrutinizer ignore-unused */ $hookmanager)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
745
	{
746
		global $conf;
747
		if (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && !empty($object->table_element_line) && in_array($object->element, array('commande', 'facture', 'propal')))
748
		{
749
			if ($object->element == 'commande')
750
				$obj = new OrderLine($object->db);
0 ignored issues
show
Bug introduced by
The type OrderLine was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
751
			if ($object->element == 'propal')
752
				$obj = new PropaleLigne($object->db);
0 ignored issues
show
Bug introduced by
The type PropaleLigne was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
753
			if ($object->element == 'facture')
754
				$obj = new FactureLigne($object->db);
0 ignored issues
show
Bug introduced by
The type FactureLigne was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
755
			if (!empty($parameters['fk_element']))
756
			{
757
				
758
				if($obj->fetch($parameters['fk_element'])){
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $obj does not seem to be defined for all execution paths leading up to this point.
Loading history...
759
					$obj->id= $obj->rowid;
760
					if (empty($obj->array_options))
761
						$obj->fetch_optionals();
762
					if (!empty($obj->array_options['options_subtotal_nc']))
763
						return 1;
764
				}
765
			}
766
		}
767
768
		return 0;
769
	}
770
771
	function getArrayOfLineForAGroup(&$object, $lineid) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
772
		$rang = $line->rang;
0 ignored issues
show
Unused Code introduced by
The assignment to $rang is dead and can be removed.
Loading history...
Comprehensibility Best Practice introduced by
The variable $line does not exist. Did you maybe mean $lineid?
Loading history...
773
		$qty_line = $line->qty;
0 ignored issues
show
Unused Code introduced by
The assignment to $qty_line is dead and can be removed.
Loading history...
774
		
775
		$qty_line = 0;
776
		
777
		$found = false;
778
779
		$Tab= array();
780
		
781
		foreach($object->lines as $l) {
782
		
783
		    $lid = (!empty($l->rowid) ? $l->rowid : $l->id);
784
			if($lid == $lineid) {
785
786
				$found = true;
787
				$qty_line = $l->qty;
788
			}
789
			
790
			if($found) {
791
				
792
			    $Tab[] = (!empty($l->rowid) ? $l->rowid : $l->id);
793
				
794
				if($l->special_code==$this->module_number && (($l->qty==99 && $qty_line==1) || ($l->qty==98 && $qty_line==2))   ) {
795
					break; // end of story
796
				}
797
			}
798
			
799
			
800
		}
801
		
802
		
803
		return $Tab;
804
		
805
	}
806
807
	/**
808
	 *  TODO le calcul est faux dans certains cas,  exemple :
809
	 *	T1
810
	 *		|_ l1 => 50 €
811
	 *		|_ l2 => 40 €
812
	 *		|_ T2
813
	 *			|_l3 => 100 €
814
	 *		|_ ST2
815
	 *		|_ l4 => 23 €
816
	 *	|_ ST1
817
	 * 
818
	 * On obtiens ST2 = 100 ET ST1 = 123 €
819
	 * Alors qu'on devrais avoir ST2 = 100 ET ST1 = 213 €
820
	 * 
821
	 * @param	$use_level		isn't used anymore
0 ignored issues
show
Documentation Bug introduced by
The doc comment isn't at position 0 could not be parsed: Unknown type name 'isn't' at position 0 in isn't.
Loading history...
822
	 */
823
	function getTotalLineFromObject(&$object, &$line, $use_level=false, $return_all=0) {
0 ignored issues
show
Unused Code introduced by
The parameter $use_level is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

823
	function getTotalLineFromObject(&$object, &$line, /** @scrutinizer ignore-unused */ $use_level=false, $return_all=0) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
824
		
825
		$rang = $line->rang;
826
		$qty_line = $line->qty;
827
		
828
		$total = 0;
829
		$total_tva = 0;
830
		$total_ttc = 0;
831
		$TTotal_tva = array();
832
		
833
		dol_include_once('/subtotal/class/subtotal.class.php');
0 ignored issues
show
Bug introduced by
The function dol_include_once was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

833
		/** @scrutinizer ignore-call */ 
834
  dol_include_once('/subtotal/class/subtotal.class.php');
Loading history...
834
		foreach($object->lines as $l) {
835
			//print $l->rang.'>='.$rang.' '.$total.'<br/>';
836
			if($l->rang>=$rang) {
837
				//echo 'return!<br>';
838
				if (!$return_all) return $total;
839
				else return array($total, $total_tva, $total_ttc, $TTotal_tva);
840
			}
841
			else if(TSubtotal::isTitle($l, 100 - $qty_line)) 
842
		  	{
843
				$total = 0;
844
				$total_tva = 0;
845
				$total_ttc = 0;
846
				$TTotal_tva = array();
847
			}
848
			elseif(!TSubtotal::isTitle($l) && !TSubtotal::isSubtotal($l)) {
849
				$total += $l->total_ht;
850
				$total_tva += $l->total_tva;
851
				$TTotal_tva[$l->tva_tx] += $l->total_tva;
852
				$total_ttc += $l->total_ttc;
853
			}
854
			
855
		}
856
		if (!$return_all) return $total;
857
		else return array($total, $total_tva, $total_ttc, $TTotal_tva);
858
	}
859
860
	/*
861
	 * Get the sum of situation invoice for last column
862
	 */
863
	function getTotalToPrintSituation(&$object, &$line) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
864
		
865
		$rang = $line->rang;
866
		$total = 0;
867
		foreach($object->lines as $l) {
868
			if($l->rang>=$rang) {
869
				return price($total);
0 ignored issues
show
Bug introduced by
The function price was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

869
				return /** @scrutinizer ignore-call */ price($total);
Loading history...
870
			}
871
                        if (TSubtotal::isSubtotal($l)){
872
                            $total = 0;
873
                        } else  if ($l->situation_percent > 0 ){
874
                           
875
        	
876
		 	$prev_progress = $l->get_prev_progress($object->id);
877
		 	$progress = ($l->situation_percent - $prev_progress) /100;
878
                        $total += ($l->total_ht/($l->situation_percent/100)) * $progress;
879
                        
880
                    }
881
                }
882
                
883
		return price($total);
884
	}
885
886
	/**
887
	 * @param $pdf          TCPDF               PDF object
0 ignored issues
show
Bug introduced by
The type TCPDF was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
888
	 * @param $object       CommonObject        dolibarr object
0 ignored issues
show
Bug introduced by
The type CommonObject was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
889
	 * @param $line         CommonObjectLine    dolibarr object line
0 ignored issues
show
Bug introduced by
The type CommonObjectLine was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
890
	 * @param $label        string
891
	 * @param $description  string
892
	 * @param $posx         float               horizontal position
893
	 * @param $posy         float               vertical position
894
	 * @param $w            float               width
895
	 * @param $h            float               height
896
	 */
897
	function pdf_add_total(&$pdf,&$object, &$line, $label, $description,$posx, $posy, $w, $h) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
Unused Code introduced by
The parameter $description is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

897
	function pdf_add_total(&$pdf,&$object, &$line, $label, /** @scrutinizer ignore-unused */ $description,$posx, $posy, $w, $h) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
898
		global $conf,$subtotal_last_title_posy;
899
900
		$hideInnerLines = (int)GETPOST('hideInnerLines');
0 ignored issues
show
Bug introduced by
The function GETPOST was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

900
		$hideInnerLines = (int)/** @scrutinizer ignore-call */ GETPOST('hideInnerLines');
Loading history...
901
		if (!empty($conf->global->SUBTOTAL_ONE_LINE_IF_HIDE_INNERLINES) && $hideInnerLines && !empty($subtotal_last_title_posy))
902
		{
903
			$posy = $subtotal_last_title_posy;
904
			$subtotal_last_title_posy = null;
905
		}
906
		
907
		$hidePriceOnSubtotalLines = (int) GETPOST('hide_price_on_subtotal_lines');
908
		
909
		$set_pagebreak_margin = false;
910
		if(method_exists('Closure','bind')) {
911
			$pageBreakOriginalValue = $pdf->AcceptPageBreak();
912
			$sweetsThief = function ($pdf) {
913
		    		return $pdf->bMargin ;
914
			};
915
			$sweetsThief = Closure::bind($sweetsThief, null, $pdf);
916
	
917
			$bMargin  = $sweetsThief($pdf);
918
	
919
			$pdf->SetAutoPageBreak( false );
920
921
			$set_pagebreak_margin = true;			
922
		}
923
		
924
			
925
		if($line->qty==99)
926
			$pdf->SetFillColor(220,220,220);
927
		elseif ($line->qty==98)
928
			$pdf->SetFillColor(230,230,230);
929
		else
930
			$pdf->SetFillColor(240,240,240);
931
		
932
		$style = 'B';
933
		if (!empty($conf->global->SUBTOTAL_SUBTOTAL_STYLE)) $style = $conf->global->SUBTOTAL_SUBTOTAL_STYLE;
934
		
935
		$pdf->SetFont('', $style, 9);
936
		
937
		$pdf->writeHTMLCell($w, $h, $posx, $posy, $label, 0, 1, false, true, 'R',true);
938
//		var_dump($bMargin);
939
		$pageAfter = $pdf->getPage();
0 ignored issues
show
Unused Code introduced by
The assignment to $pageAfter is dead and can be removed.
Loading history...
940
		
941
		//Print background
942
		$cell_height = $pdf->getStringHeight($w, $label);
943
		$pdf->SetXY($posx, $posy);
944
		$pdf->MultiCell($pdf->page_largeur - $pdf->marge_droite, $cell_height, '', 0, '', 1);
945
		
946
		if (!$hidePriceOnSubtotalLines) {
947
			$total_to_print = price($line->total);
0 ignored issues
show
Bug introduced by
The function price was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

947
			$total_to_print = /** @scrutinizer ignore-call */ price($line->total);
Loading history...
948
			
949
			if (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS))
950
			{
951
				$TTitle = TSubtotal::getAllTitleFromLine($line);
952
				foreach ($TTitle as &$line_title)
953
				{
954
					if (!empty($line_title->array_options['options_subtotal_nc']))
955
					{
956
						$total_to_print = ''; // TODO Gestion "Compris/Non compris", voir si on affiche une annotation du genre "NC"
957
						break;
958
					}
959
				}
960
			}
961
			
962
			if($total_to_print !== '') {
963
				
964
				if (GETPOST('hideInnerLines'))
965
				{
966
					// Dans le cas des lignes cachés, le calcul est déjà fait dans la méthode beforePDFCreation et les lignes de sous-totaux sont déjà renseignés
967
//					$line->TTotal_tva
968
//					$line->total_ht
969
//					$line->total_tva
970
//					$line->total
971
//					$line->total_ttc
972
				}
973
				else
974
				{
975
					list($total, $total_tva, $total_ttc, $TTotal_tva) = $this->getTotalLineFromObject($object, $line, '', 1);
976
                                        if(get_class($object) == 'Facture' && $object->type==Facture::TYPE_SITUATION){//Facture de situation
0 ignored issues
show
Bug introduced by
The type Facture was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
977
                                                $total_to_print = $this->getTotalToPrintSituation($object, $line);
978
                                        } else {
979
                                            	$total_to_print = price($total);
980
                                        }
981
                                            
982
					$line->total_ht = $total;
983
					$line->total = $total;
984
					$line->total_tva = $total_tva;
985
					$line->total_ttc = $total_ttc;
986
				}
987
			}
988
989
			$pdf->SetXY($pdf->postotalht, $posy);
990
			if($set_pagebreak_margin) $pdf->SetAutoPageBreak( $pageBreakOriginalValue , $bMargin);
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $bMargin does not seem to be defined for all execution paths leading up to this point.
Loading history...
Comprehensibility Best Practice introduced by
The variable $pageBreakOriginalValue does not seem to be defined for all execution paths leading up to this point.
Loading history...
991
			$pdf->MultiCell($pdf->page_largeur-$pdf->marge_droite-$pdf->postotalht, 3, $total_to_print, 0, 'R', 0);
992
		}
993
		else{
994
			if($set_pagebreak_margin) $pdf->SetAutoPageBreak( $pageBreakOriginalValue , $bMargin);
995
		}
996
		
997
		$posy = $posy + $cell_height;
998
		$pdf->SetXY($posx, $posy); 
999
			
1000
		
1001
	}
1002
1003
	/**
1004
	 * @param $pdf          TCPDF               PDF object
1005
	 * @param $object       CommonObject        dolibarr object
1006
	 * @param $line         CommonObjectLine    dolibarr object line
1007
	 * @param $label        string
1008
	 * @param $description  string
1009
	 * @param $posx         float               horizontal position
1010
	 * @param $posy         float               vertical position
1011
	 * @param $w            float               width
1012
	 * @param $h            float               height
1013
	 */
1014
	function pdf_add_title(&$pdf,&$object, &$line, $label, $description,$posx, $posy, $w, $h) {
0 ignored issues
show
Unused Code introduced by
The parameter $object is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

1014
	function pdf_add_title(&$pdf,/** @scrutinizer ignore-unused */ &$object, &$line, $label, $description,$posx, $posy, $w, $h) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
1015
		
1016
		global $db,$conf,$subtotal_last_title_posy;
1017
		
1018
		$subtotal_last_title_posy = $posy;
1019
		$pdf->SetXY ($posx, $posy);
1020
		
1021
		$hideInnerLines = (int)GETPOST('hideInnerLines');
0 ignored issues
show
Bug introduced by
The function GETPOST was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

1021
		$hideInnerLines = (int)/** @scrutinizer ignore-call */ GETPOST('hideInnerLines');
Loading history...
1022
		
1023
		
1024
 
1025
		$style = ($line->qty==1) ? 'BU' : 'BUI';
1026
		if (!empty($conf->global->SUBTOTAL_TITLE_STYLE)) $style = $conf->global->SUBTOTAL_TITLE_STYLE;
1027
		
1028
		if($hideInnerLines) {
1029
			if($line->qty==1)$pdf->SetFont('', $style, 9);
1030
			else 
1031
			{
1032
				if (!empty($conf->global->SUBTOTAL_STYLE_TITRES_SI_LIGNES_CACHEES)) $style = $conf->global->SUBTOTAL_STYLE_TITRES_SI_LIGNES_CACHEES;
1033
				$pdf->SetFont('', $style, 9);
1034
			}
1035
		}
1036
		else {
1037
1038
			if($line->qty==1)$pdf->SetFont('', $style, 9); //TODO if super utile
1039
			else $pdf->SetFont('', $style, 9);
1040
			
1041
		}
1042
		
1043
		if ($label === strip_tags($label) && $label === dol_html_entity_decode($label, ENT_QUOTES)) $pdf->MultiCell($w, $h, $label, 0, 'L'); // Pas de HTML dans la chaine
0 ignored issues
show
Bug introduced by
The function dol_html_entity_decode was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

1043
		if ($label === strip_tags($label) && $label === /** @scrutinizer ignore-call */ dol_html_entity_decode($label, ENT_QUOTES)) $pdf->MultiCell($w, $h, $label, 0, 'L'); // Pas de HTML dans la chaine
Loading history...
1044
		else $pdf->writeHTMLCell($w, $h, $posx, $posy, $label, 0, 1, false, true, 'J',true); // et maintenant avec du HTML
1045
		
1046
		if($description && !$hidedesc) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $hidedesc seems to be never defined.
Loading history...
1047
			$posy = $pdf->GetY();
1048
			
1049
			$pdf->SetFont('', '', 8);
1050
			
1051
			$pdf->writeHTMLCell($w, $h, $posx, $posy, $description, 0, 1, false, true, 'J',true);
1052
1053
		}
1054
		
1055
	}
1056
1057
	function pdf_writelinedesc_ref($parameters=array(), &$object, &$action='') {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
1058
	// ultimate PDF hook O_o
1059
		
1060
		return $this->pdf_writelinedesc($parameters,$object,$action);
1061
		
1062
	}
1063
1064
	function isModSubtotalLine(&$parameters, &$object) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
1065
		
1066
		if(is_array($parameters)) {
1067
			$i = & $parameters['i'];	
1068
		}
1069
		else {
1070
			$i = (int)$parameters;
1071
		}
1072
		
1073
		
1074
		if($object->lines[$i]->special_code == $this->module_number && $object->lines[$i]->product_type == 9) {
1075
			return true;
1076
		}
1077
		
1078
		return false;
1079
		
1080
	}
1081
1082
	function pdf_getlineqty($parameters=array(), &$object, &$action='') {
0 ignored issues
show
Unused Code introduced by
The parameter $action is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

1082
	function pdf_getlineqty($parameters=array(), &$object, /** @scrutinizer ignore-unused */ &$action='') {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
1083
		global $conf,$hideprices;
1084
		
1085
		if($this->isModSubtotalLine($parameters,$object) ){
1086
			
1087
			$this->resprints = ' ';
0 ignored issues
show
Bug Best Practice introduced by
The property resprints does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
1088
			
1089
			if((float)DOL_VERSION<=3.6) {
0 ignored issues
show
Bug introduced by
The constant DOL_VERSION was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
1090
				return '';
1091
			}
1092
			else if((float)DOL_VERSION>=3.8) {
1093
				return 1;
1094
			}
1095
			
1096
		}
1097
		elseif(!empty($hideprices)) {
1098
			$this->resprints = $object->lines[$parameters['i']]->qty;
1099
			return 1;
1100
		}
1101
		elseif (!empty($conf->global->SUBTOTAL_IF_HIDE_PRICES_SHOW_QTY))
1102
		{
1103
			$hideInnerLines = (int)GETPOST('hideInnerLines');
0 ignored issues
show
Bug introduced by
The function GETPOST was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

1103
			$hideInnerLines = (int)/** @scrutinizer ignore-call */ GETPOST('hideInnerLines');
Loading history...
1104
			$hidedetails = (int)GETPOST('hidedetails');
1105
			if (empty($hideInnerLines) && !empty($hidedetails))
1106
			{
1107
				$this->resprints = $object->lines[$parameters['i']]->qty;
1108
			}
1109
		}
1110
		
1111
		if(is_array($parameters)) $i = & $parameters['i'];
1112
		else $i = (int)$parameters;
1113
1114
		if (empty($object->lines[$i])) return 0; // hideInnerLines => override $object->lines et Dolibarr ne nous permet pas de mettre à jour la variable qui conditionne la boucle sur les lignes (PR faite pour 6.0)
1115
		
1116
		if(empty($object->lines[$i]->array_options)) $object->lines[$i]->fetch_optionals();
1117
1118
		if (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && (!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i])) )
1119
		{
1120
			if (!in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1121
			{
1122
				$this->resprints = ' ';
1123
				return 1;
1124
			}
1125
		}
1126
		
1127
		return 0;
1128
	}
1129
	
1130
	function pdf_getlinetotalexcltax($parameters=array(), &$object, &$action='') {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
1131
	    global $conf, $hideprices, $hookmanager;
1132
		
1133
		if(is_array($parameters)) $i = & $parameters['i'];
1134
		else $i = (int)$parameters;
1135
			
1136
		if($this->isModSubtotalLine($parameters,$object) ){
1137
			
1138
			$this->resprints = ' ';
0 ignored issues
show
Bug Best Practice introduced by
The property resprints does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
1139
			
1140
			if((float)DOL_VERSION<=3.6) {
0 ignored issues
show
Bug introduced by
The constant DOL_VERSION was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
1141
				return '';
1142
			}
1143
			else if((float)DOL_VERSION>=3.8) {
1144
				return 1;
1145
			}
1146
			
1147
		}
1148
		elseif (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS))
1149
		{
1150
			if (!in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1151
			{
1152
				if (!empty($object->lines[$i]->array_options['options_subtotal_nc'])) 
1153
				{
1154
					$this->resprints = ' ';
1155
					return 1;
1156
				}
1157
1158
				$TTitle = TSubtotal::getAllTitleFromLine($object->lines[$i]);
1159
				foreach ($TTitle as &$line_title)
1160
				{
1161
					if (!empty($line_title->array_options['options_subtotal_nc']))
1162
					{
1163
						$this->resprints = ' ';
1164
						return 1;
1165
					}
1166
				}
1167
			}
1168
		}
1169
		if ((int)GETPOST('hideInnerLines') && !empty($conf->global->SUBTOTAL_REPLACE_WITH_VAT_IF_HIDE_INNERLINES)){
0 ignored issues
show
Bug introduced by
The function GETPOST was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

1169
		if ((int)/** @scrutinizer ignore-call */ GETPOST('hideInnerLines') && !empty($conf->global->SUBTOTAL_REPLACE_WITH_VAT_IF_HIDE_INNERLINES)){
Loading history...
1170
		    $this->resprints = price($object->lines[$i]->total_ht);
0 ignored issues
show
Bug introduced by
The function price was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

1170
		    $this->resprints = /** @scrutinizer ignore-call */ price($object->lines[$i]->total_ht);
Loading history...
1171
		}
1172
		
1173
		// Si la gestion C/NC est active et que je suis sur un ligne dont l'extrafield est coché
1174
		if ( 
1175
			!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && 
1176
			(!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i])) 
1177
		)
1178
		{
1179
			// alors je dois vérifier si la méthode fait partie de la conf qui l'exclue
1180
			if (!in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1181
			{
1182
				$this->resprints = ' ';
1183
				
1184
				// currentcontext à modifier celon l'appel
1185
				$params = array('parameters' => $parameters, 'currentmethod' => 'pdf_getlinetotalexcltax', 'currentcontext'=>'subtotal_hide_nc', 'i' => $i);
1186
				return $this->callHook($object, $hookmanager, $action, $params); // return 1 (qui est la valeur par défaut) OU -1 si erreur OU overrideReturn (contient -1 ou 0 ou 1)
1187
			}
1188
		}
1189
		// Cache le prix pour les lignes standards dolibarr qui sont dans un ensemble
1190
		else if (!empty($hideprices))
1191
		{
1192
			// Check if a title exist for this line && if the title have subtotal
1193
			$lineTitle = TSubtotal::getParentTitleOfLine($object, $i);
1194
			if(TSubtotal::getParentTitleOfLine($object, $i) && TSubtotal::titleHasTotalLine($object, $lineTitle, true))
0 ignored issues
show
Bug introduced by
It seems like $lineTitle can also be of type false; however, parameter $title_line of TSubtotal::titleHasTotalLine() does only seem to accept OrderLine|PropaleLigne|FactureLigne, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1194
			if(TSubtotal::getParentTitleOfLine($object, $i) && TSubtotal::titleHasTotalLine($object, /** @scrutinizer ignore-type */ $lineTitle, true))
Loading history...
1195
			{
1196
1197
				$this->resprints = ' ';
1198
				
1199
				// currentcontext à modifier celon l'appel
1200
				$params = array('parameters' => $parameters, 'currentmethod' => 'pdf_getlinetotalexcltax', 'currentcontext'=>'subtotal_hideprices', 'i' => $i);
1201
				return $this->callHook($object, $hookmanager, $action, $params); // return 1 (qui est la valeur par défaut) OU -1 si erreur OU overrideReturn (contient -1 ou 0 ou 1)
1202
			}
1203
		}
1204
        
1205
		return 0;
1206
	}
1207
	
1208
	/**
1209
	 * Remplace le retour de la méthode qui l'appelle par un standard 1 ou autre chose celon le hook
1210
	 * @return int 1, 0, -1
1211
	 */
1212
	private function callHook(&$object, &$hookmanager, $action, $params, $defaultReturn = 1)
1213
	{
1214
		$reshook=$hookmanager->executeHooks('subtotalHidePrices',$params, $object, $action);
1215
		if ($reshook < 0)
1216
		{
1217
			$this->error = $hookmanager->error;
0 ignored issues
show
Bug Best Practice introduced by
The property error does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
1218
			$this->errors = $hookmanager->errors;
0 ignored issues
show
Bug Best Practice introduced by
The property errors does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
1219
			return -1;
1220
		}
1221
		elseif (empty($reshook))
1222
		{
1223
			$this->resprints .= $hookmanager->resprints;
1224
		}
1225
		else
1226
		{
1227
			$this->resprints = $hookmanager->resprints;
0 ignored issues
show
Bug Best Practice introduced by
The property resprints does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
1228
1229
			// override return (use  $this->results['overrideReturn'] or $this->resArray['overrideReturn'] in other module action_xxxx.class.php )
1230
			if(isset($hookmanager->resArray['overrideReturn']))
1231
			{
1232
				return $hookmanager->resArray['overrideReturn'];
1233
			}
1234
		}
1235
1236
		return $defaultReturn;
1237
	}
1238
	
1239
	function pdf_getlinetotalwithtax($parameters=array(), &$object, &$action='') {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
Unused Code introduced by
The parameter $action is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

1239
	function pdf_getlinetotalwithtax($parameters=array(), &$object, /** @scrutinizer ignore-unused */ &$action='') {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
1240
		global $conf;
1241
		
1242
		if($this->isModSubtotalLine($parameters,$object) ){
1243
			
1244
			$this->resprints = ' ';
0 ignored issues
show
Bug Best Practice introduced by
The property resprints does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
1245
		
1246
			if((float)DOL_VERSION<=3.6) {
0 ignored issues
show
Bug introduced by
The constant DOL_VERSION was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
1247
				return '';
1248
			}
1249
			else if((float)DOL_VERSION>=3.8) {
1250
				return 1;
1251
			}
1252
		}
1253
		
1254
		if(is_array($parameters)) $i = & $parameters['i'];
1255
		else $i = (int)$parameters;
1256
		
1257
		if (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && (!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i])) ) 
1258
		{
1259
			if (!in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1260
			{
1261
				$this->resprints = ' ';
1262
				return 1;
1263
			}
1264
		}
1265
		
1266
		return 0;
1267
	}
1268
	
1269
	function pdf_getlineunit($parameters=array(), &$object, &$action='') {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
Unused Code introduced by
The parameter $action is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

1269
	function pdf_getlineunit($parameters=array(), &$object, /** @scrutinizer ignore-unused */ &$action='') {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
1270
		global $conf;
1271
		
1272
		if($this->isModSubtotalLine($parameters,$object) ){
1273
			$this->resprints = ' ';
0 ignored issues
show
Bug Best Practice introduced by
The property resprints does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
1274
		
1275
			if((float)DOL_VERSION<=3.6) {
0 ignored issues
show
Bug introduced by
The constant DOL_VERSION was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
1276
				return '';
1277
			}
1278
			else if((float)DOL_VERSION>=3.8) {
1279
				return 1;
1280
			}
1281
		}
1282
		
1283
		if(is_array($parameters)) $i = & $parameters['i'];
1284
		else $i = (int)$parameters;
1285
			
1286
		if (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && (!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i])) )
1287
		{
1288
			if (!in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1289
			{
1290
				$this->resprints = ' ';
1291
				return 1;
1292
			}
1293
		}
1294
		
1295
		return 0;
1296
	}
1297
	
1298
	function pdf_getlineupexcltax($parameters=array(), &$object, &$action='') {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
1299
	    global $conf,$hideprices,$hookmanager;
1300
1301
		if(is_array($parameters)) $i = & $parameters['i'];
1302
		else $i = (int)$parameters;
1303
1304
		if($this->isModSubtotalLine($parameters,$object) ) {
1305
			$this->resprints = ' ';
0 ignored issues
show
Bug Best Practice introduced by
The property resprints does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
1306
1307
            $line = $object->lines[$i];
1308
1309
            // On récupère les montants du bloc pour les afficher dans la ligne de sous-total
1310
            if(TSubtotal::isSubtotal($line)) {
1311
                $parentTitle = TSubtotal::getParentTitleOfLine($object, $i);
1312
1313
                if(! empty($parentTitle->array_options['options_show_total_ht'])) {
1314
                    $TTotal = TSubtotal::getTotalBlockFromTitle($object, $parentTitle);
1315
                    $this->resprints = price($TTotal['total_subprice']);
0 ignored issues
show
Bug introduced by
The function price was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

1315
                    $this->resprints = /** @scrutinizer ignore-call */ price($TTotal['total_subprice']);
Loading history...
1316
                }
1317
            }
1318
		
1319
			if((float)DOL_VERSION<=3.6) {
0 ignored issues
show
Bug introduced by
The constant DOL_VERSION was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
1320
				return '';
1321
			}
1322
			else if((float)DOL_VERSION>=3.8) {
1323
				return 1;
1324
			}
1325
		}
1326
		
1327
		// Si la gestion C/NC est active et que je suis sur un ligne dont l'extrafield est coché
1328
		if (
1329
		!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) &&
1330
		(!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i]))
1331
		)
1332
		{
1333
		    // alors je dois vérifier si la méthode fait partie de la conf qui l'exclue
1334
		    if (!in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1335
		    {
1336
		        $this->resprints = ' ';
1337
		        
1338
		        // currentcontext à modifier celon l'appel
1339
		        $params = array('parameters' => $parameters, 'currentmethod' => 'pdf_getlineupexcltax', 'currentcontext'=>'subtotal_hide_nc', 'i' => $i);
1340
		        return $this->callHook($object, $hookmanager, $action, $params); // return 1 (qui est la valeur par défaut) OU -1 si erreur OU overrideReturn (contient -1 ou 0 ou 1)
1341
		        
1342
		    }
1343
		}
1344
		// Cache le prix pour les lignes standards dolibarr qui sont dans un ensemble
1345
		else if (!empty($hideprices))
1346
		{
1347
		    
1348
		    // Check if a title exist for this line && if the title have subtotal
1349
		    $lineTitle = TSubtotal::getParentTitleOfLine($object, $i);
1350
		    if(TSubtotal::getParentTitleOfLine($object, $i) && TSubtotal::titleHasTotalLine($object, $lineTitle, true))
0 ignored issues
show
Bug introduced by
It seems like $lineTitle can also be of type false; however, parameter $title_line of TSubtotal::titleHasTotalLine() does only seem to accept OrderLine|PropaleLigne|FactureLigne, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1350
		    if(TSubtotal::getParentTitleOfLine($object, $i) && TSubtotal::titleHasTotalLine($object, /** @scrutinizer ignore-type */ $lineTitle, true))
Loading history...
1351
		    {
1352
		        
1353
		        $this->resprints = ' ';
1354
		        
1355
		        // currentcontext à modifier celon l'appel
1356
		        $params = array('parameters' => $parameters, 'currentmethod' => 'pdf_getlineupexcltax', 'currentcontext'=>'subtotal_hideprices', 'i' => $i);
1357
		        return $this->callHook($object, $hookmanager, $action, $params); // return 1 (qui est la valeur par défaut) OU -1 si erreur OU overrideReturn (contient -1 ou 0 ou 1)
1358
		    }
1359
		}
1360
		
1361
		return 0;
1362
	}
1363
	
1364
	function pdf_getlineremisepercent($parameters=array(), &$object, &$action='') {
0 ignored issues
show
Unused Code introduced by
The parameter $action is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

1364
	function pdf_getlineremisepercent($parameters=array(), &$object, /** @scrutinizer ignore-unused */ &$action='') {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
1365
	    global $conf,$hideprices,$hookmanager;
1366
1367
        if(is_array($parameters)) $i = & $parameters['i'];
1368
        else $i = (int) $parameters;
1369
1370
		if($this->isModSubtotalLine($parameters,$object) ) {
1371
			$this->resprints = ' ';
0 ignored issues
show
Bug Best Practice introduced by
The property resprints does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
1372
1373
            $line = $object->lines[$i];
1374
1375
            // Affichage de la remise 
1376
            if(TSubtotal::isSubtotal($line)) {
1377
                $parentTitle = TSubtotal::getParentTitleOfLine($object, $i);
1378
1379
                if(! empty($parentTitle->array_options['options_show_reduc'])) {
1380
                    $TTotal = TSubtotal::getTotalBlockFromTitle($object, $parentTitle);
1381
                    $this->resprints = price($TTotal['total_ht'] / $TTotal['total_subprice']*100, 0, '', 1, 2, 2).'%';
0 ignored issues
show
Bug introduced by
The function price was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

1381
                    $this->resprints = /** @scrutinizer ignore-call */ price($TTotal['total_ht'] / $TTotal['total_subprice']*100, 0, '', 1, 2, 2).'%';
Loading history...
1382
                }
1383
            }
1384
		
1385
			if((float)DOL_VERSION<=3.6) {
0 ignored issues
show
Bug introduced by
The constant DOL_VERSION was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
1386
				return '';
1387
			}
1388
			else if((float)DOL_VERSION>=3.8) {
1389
				return 1;
1390
			}
1391
		}
1392
		
1393
		return 0;
1394
	}
1395
	
1396
	function pdf_getlineupwithtax($parameters=array(), &$object, &$action='') {
0 ignored issues
show
Unused Code introduced by
The parameter $action is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

1396
	function pdf_getlineupwithtax($parameters=array(), &$object, /** @scrutinizer ignore-unused */ &$action='') {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
1397
		global $conf,$hideprices;
1398
		
1399
		if($this->isModSubtotalLine($parameters,$object) ){
1400
			$this->resprints = ' ';
0 ignored issues
show
Bug Best Practice introduced by
The property resprints does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
1401
			if((float)DOL_VERSION<=3.6) {
0 ignored issues
show
Bug introduced by
The constant DOL_VERSION was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
1402
				return '';
1403
			}
1404
			else if((float)DOL_VERSION>=3.8) {
1405
				return 1;
1406
			}
1407
		}
1408
		
1409
		if(is_array($parameters)) $i = & $parameters['i'];
1410
		else $i = (int)$parameters;
1411
			
1412
		if (!empty($hideprices)
1413
				|| (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && (!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i])) )
1414
		)
1415
		{
1416
			if (!empty($hideprices) || !in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1417
			{
1418
				$this->resprints = ' ';
1419
				return 1;
1420
			}
1421
		}
1422
		
1423
		return 0;
1424
	}
1425
	
1426
	function pdf_getlinevatrate($parameters=array(), &$object, &$action='') {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
1427
	    global $conf,$hideprices,$hookmanager;
1428
	    
1429
		if($this->isModSubtotalLine($parameters,$object) ){
1430
			$this->resprints = ' ';
0 ignored issues
show
Bug Best Practice introduced by
The property resprints does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
1431
			
1432
			if((float)DOL_VERSION<=3.6) {
0 ignored issues
show
Bug introduced by
The constant DOL_VERSION was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
1433
				return '';
1434
			}
1435
			else if((float)DOL_VERSION>=3.8) {
1436
				return 1;
1437
			}
1438
		}
1439
		
1440
		if(is_array($parameters)) $i = & $parameters['i'];
1441
		else $i = (int)$parameters;
1442
		
1443
		if (empty($object->lines[$i])) return 0; // hideInnerLines => override $object->lines et Dolibarr ne nous permet pas de mettre à jour la variable qui conditionne la boucle sur les lignes (PR faite pour 6.0)
1444
1445
		$object->lines[$i]->fetch_optionals();
1446
		// Si la gestion C/NC est active et que je suis sur un ligne dont l'extrafield est coché
1447
		if (
1448
		!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) &&
1449
		(!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i]))
1450
		)
1451
		{
1452
		    // alors je dois vérifier si la méthode fait partie de la conf qui l'exclue
1453
		    if (!in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1454
		    {
1455
		        $this->resprints = ' ';
1456
		        
1457
		        // currentcontext à modifier celon l'appel
1458
		        $params = array('parameters' => $parameters, 'currentmethod' => 'pdf_getlinevatrate', 'currentcontext'=>'subtotal_hide_nc', 'i' => $i);
1459
		        return $this->callHook($object, $hookmanager, $action, $params); // return 1 (qui est la valeur par défaut) OU -1 si erreur OU overrideReturn (contient -1 ou 0 ou 1)
1460
		    }
1461
		}
1462
		// Cache le prix pour les lignes standards dolibarr qui sont dans un ensemble
1463
		else if (!empty($hideprices))
1464
		{
1465
		    
1466
		    // Check if a title exist for this line && if the title have subtotal
1467
		    $lineTitle = TSubtotal::getParentTitleOfLine($object, $i);
1468
		    if(TSubtotal::getParentTitleOfLine($object, $i) && TSubtotal::titleHasTotalLine($object, $lineTitle, true))
0 ignored issues
show
Bug introduced by
It seems like $lineTitle can also be of type false; however, parameter $title_line of TSubtotal::titleHasTotalLine() does only seem to accept OrderLine|PropaleLigne|FactureLigne, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1468
		    if(TSubtotal::getParentTitleOfLine($object, $i) && TSubtotal::titleHasTotalLine($object, /** @scrutinizer ignore-type */ $lineTitle, true))
Loading history...
1469
		    {
1470
		        
1471
		        $this->resprints = ' ';
1472
		        
1473
		        // currentcontext à modifier celon l'appel
1474
		        $params = array('parameters' => $parameters, 'currentmethod' => 'pdf_getlinevatrate', 'currentcontext'=>'subtotal_hideprices', 'i' => $i);
1475
		        return $this->callHook($object, $hookmanager, $action, $params); // return 1 (qui est la valeur par défaut) OU -1 si erreur OU overrideReturn (contient -1 ou 0 ou 1)
1476
		    }
1477
		}
1478
		
1479
		return 0;
1480
	}
1481
		
1482
	function pdf_getlineprogress($parameters=array(), &$object, &$action) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
Unused Code introduced by
The parameter $action is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

1482
	function pdf_getlineprogress($parameters=array(), &$object, /** @scrutinizer ignore-unused */ &$action) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
1483
		global $conf;
1484
		
1485
		if($this->isModSubtotalLine($parameters,$object) ){
1486
			$this->resprints = ' ';
0 ignored issues
show
Bug Best Practice introduced by
The property resprints does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
1487
			if((float)DOL_VERSION<=3.6) {
0 ignored issues
show
Bug introduced by
The constant DOL_VERSION was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
1488
				return '';
1489
			}
1490
			else if((float)DOL_VERSION>=3.8) {
1491
				return 1;
1492
			}
1493
		}
1494
		
1495
		if(is_array($parameters)) $i = & $parameters['i'];
1496
		else $i = (int)$parameters;
1497
			
1498
		if (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && (!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i])) )
1499
		{
1500
			if (!in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1501
			{
1502
				$this->resprints = ' ';
1503
				return 1;
1504
			}
1505
		}
1506
		
1507
		return 0;
1508
	}
1509
	
1510
	function add_numerotation(&$object) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
1511
		global $conf;
1512
		
1513
		if(!empty($conf->global->SUBTOTAL_USE_NUMEROTATION)) {
1514
		
1515
			$TLevelTitre = array();
0 ignored issues
show
Unused Code introduced by
The assignment to $TLevelTitre is dead and can be removed.
Loading history...
1516
			$prevlevel = 0;
0 ignored issues
show
Unused Code introduced by
The assignment to $prevlevel is dead and can be removed.
Loading history...
1517
		
1518
			foreach($object->lines as $k=>&$line) 
1519
			{
1520
				if ($line->id > 0 && $this->isModSubtotalLine($k, $object) && $line->qty <= 10)
1521
				{
1522
					$TLineTitle[] = &$line;
1523
				}
1524
			}
1525
			
1526
			if (!empty($TLineTitle)) $TTitleNumeroted = $this->formatNumerotation($TLineTitle);
0 ignored issues
show
Unused Code introduced by
The assignment to $TTitleNumeroted is dead and can be removed.
Loading history...
1527
		}
1528
		
1529
	}
1530
1531
	// TODO ne gère pas encore la numération des lignes "Totaux"
1532
	private function formatNumerotation(&$TLineTitle, $line_reference='', $level=1, $prefix_num=0)
1533
	{
1534
		$TTitle = array();
1535
		
1536
		$i=1;
1537
		$j=0;
1538
		foreach ($TLineTitle as $k => &$line)
1539
		{
1540
			if (!empty($line_reference) && $line->rang <= $line_reference->rang) continue;
1541
			if (!empty($line_reference) && $line->qty <= $line_reference->qty) break;
1542
			
1543
			if ($line->qty == $level)
1544
			{
1545
				$TTitle[$j]['numerotation'] = ($prefix_num == 0) ? $i : $prefix_num.'.'.$i;
1546
				//var_dump('Prefix == '.$prefix_num.' // '.$line->desc.' ==> numerotation == '.$TTitle[$j]['numerotation'].'   ###    '.$line->qty .'=='. $level);
1547
				if (empty($line->label) && (float)DOL_VERSION < 6)
0 ignored issues
show
Bug introduced by
The constant DOL_VERSION was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
1548
				{
1549
					$line->label = !empty($line->desc) ? $line->desc : $line->description;
1550
					$line->desc = $line->description = '';
1551
				}
1552
				
1553
				$line->label = $TTitle[$j]['numerotation'].' '.$line->label;
1554
				$TTitle[$j]['line'] = &$line;
1555
				
1556
				$deep_level = $line->qty;
1557
				do {
1558
					$deep_level++;
1559
					$TTitle[$j]['children'] = $this->formatNumerotation($TLineTitle, $line, $deep_level, $TTitle[$j]['numerotation']);
1560
				} while (empty($TTitle[$j]['children']) && $deep_level <= 10); // Exemple si un bloc Titre lvl 1 contient pas de sous lvl 2 mais directement un sous lvl 5
1561
				// Rappel on peux avoir jusqu'a 10 niveau de titre
1562
				
1563
				$i++;
1564
				$j++;
1565
			}
1566
		}
1567
1568
		return $TTitle;
1569
	}
1570
	
1571
	function setDocTVA(&$pdf, &$object) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
Unused Code introduced by
The parameter $pdf is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

1571
	function setDocTVA(/** @scrutinizer ignore-unused */ &$pdf, &$object) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $object is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

1571
	function setDocTVA(&$pdf, /** @scrutinizer ignore-unused */ &$object) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
1572
		
1573
		$hidedetails = (int)GETPOST('hidedetails');
0 ignored issues
show
Bug introduced by
The function GETPOST was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

1573
		$hidedetails = (int)/** @scrutinizer ignore-call */ GETPOST('hidedetails');
Loading history...
1574
		
1575
		if(empty($hidedetails)) return false;
1576
		
1577
		// TODO can't add VAT to document without lines... :-/
1578
		
1579
		return true;
1580
	}
1581
	
1582
	function beforePDFCreation($parameters=array(), &$object, &$action)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
Unused Code introduced by
The parameter $action is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

1582
	function beforePDFCreation($parameters=array(), &$object, /** @scrutinizer ignore-unused */ &$action)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
1583
	{
1584
		/**
1585
		 * @var $pdf    TCPDF
1586
		 */
1587
		global $pdf,$conf, $langs;
1588
1589
		// var_dump($object->lines);
1590
		dol_include_once('/subtotal/class/subtotal.class.php');
0 ignored issues
show
Bug introduced by
The function dol_include_once was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

1590
		/** @scrutinizer ignore-call */ 
1591
  dol_include_once('/subtotal/class/subtotal.class.php');
Loading history...
1591
1592
		foreach($parameters as $key=>$value) {
1593
			${$key} = $value;
1594
		}
1595
		
1596
		$this->setDocTVA($pdf, $object);
1597
		
1598
		$this->add_numerotation($object);	
1599
		
1600
        foreach($object->lines as $k => &$l) {
1601
            if(TSubtotal::isSubtotal($l)) {
1602
                $parentTitle = TSubtotal::getParentTitleOfLine($object, $k);
1603
                if(! empty($parentTitle->id) && ! empty($parentTitle->array_options['options_show_total_ht'])) {
1604
                    $l->remise_percent = 100;    // Affichage de la réduction sur la ligne de sous-total
1605
                }
1606
            }
1607
        }
1608
1609
		$hideInnerLines = (int)GETPOST('hideInnerLines');
0 ignored issues
show
Bug introduced by
The function GETPOST was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

1609
		$hideInnerLines = (int)/** @scrutinizer ignore-call */ GETPOST('hideInnerLines');
Loading history...
1610
		$hidedetails = (int)GETPOST('hidedetails');
1611
1612
		if ($hideInnerLines) { // si c une ligne de titre
1613
	    	$fk_parent_line=0;
0 ignored issues
show
Unused Code introduced by
The assignment to $fk_parent_line is dead and can be removed.
Loading history...
1614
			$TLines =array();
1615
		
1616
			$original_count=count($object->lines);
0 ignored issues
show
Unused Code introduced by
The assignment to $original_count is dead and can be removed.
Loading history...
1617
		    $TTvas = array(); // tableau de tva
1618
		    
1619
			foreach($object->lines as $k=>&$line) 
1620
			{
1621
			    
1622
				if($line->product_type==9 && $line->rowid>0) 
1623
				{
1624
					$fk_parent_line = $line->rowid;
1625
					
1626
					// Fix tk7201 - si on cache le détail, la TVA est renseigné au niveau du sous-total, l'erreur c'est s'il y a plusieurs sous-totaux pour les même lignes, ça va faire la somme
1627
					if(TSubtotal::isSubtotal($line)) 
1628
					{
1629
						/*$total = $this->getTotalLineFromObject($object, $line, '');
1630
						
1631
						$line->total_ht = $total;
1632
						$line->total = $total;
1633
						*/
1634
						list($total, $total_tva, $total_ttc, $TTotal_tva) = $this->getTotalLineFromObject($object, $line, '', 1);
1635
						
1636
						if (TSubtotal::getNiveau($line) == 1) $line->TTotal_tva = $TTotal_tva;
1637
						$line->total_ht = $total;
1638
						$line->total_tva = $total_tva;
1639
						$line->total = $line->total_ht;
1640
						$line->total_ttc = $total_ttc;
1641
1642
//                        $TTitle = TSubtotal::getParentTitleOfLine($object, $k);
1643
//                        $parentTitle = array_shift($TTitle);
1644
//                        if(! empty($parentTitle->id) && ! empty($parentTitle->array_option['options_show_total_ht'])) {
1645
//                            exit('la?');
1646
//                            $line->remise_percent = 100;    // Affichage de la réduction sur la ligne de sous-total
1647
//                            $line->update();
1648
//                        }
1649
					} 
1650
//                    if(TSub)
1651
						
1652
				} 
1653
			
1654
				if ($hideInnerLines)
1655
				{
1656
				    if(!empty($conf->global->SUBTOTAL_REPLACE_WITH_VAT_IF_HIDE_INNERLINES))
1657
				    {
1658
				        if($line->tva_tx != '0.000' && $line->product_type!=9){
1659
				            
1660
    				        // on remplit le tableau de tva pour substituer les lignes cachées
1661
    				        $TTvas[$line->tva_tx]['total_tva'] += $line->total_tva;
1662
    				        $TTvas[$line->tva_tx]['total_ht'] += $line->total_ht;
1663
    				        $TTvas[$line->tva_tx]['total_ttc'] += $line->total_ttc; 
1664
    				    }
1665
    					if($line->product_type==9 && $line->rowid>0)
1666
    					{
1667
    					    //Cas où je doit cacher les produits et afficher uniquement les sous-totaux avec les titres
1668
    					    // génère des lignes d'affichage des montants HT soumis à tva
1669
    					    $nbtva = count($TTvas);
1670
    					    if(!empty($nbtva)){
1671
    					        foreach ($TTvas as $tx =>$val){
1672
    					            $l = clone $line;
1673
    					            $l->product_type = 1;
1674
    					            $l->special_code = '';
1675
    					            $l->qty = 1;
1676
    					            $l->desc = $langs->trans('AmountBeforeTaxesSubjectToVATX%', $langs->transnoentitiesnoconv('VAT'), price($tx));
0 ignored issues
show
Bug introduced by
The function price was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

1676
    					            $l->desc = $langs->trans('AmountBeforeTaxesSubjectToVATX%', $langs->transnoentitiesnoconv('VAT'), /** @scrutinizer ignore-call */ price($tx));
Loading history...
1677
    					            $l->tva_tx = $tx;
1678
    					            $l->total_ht = $val['total_ht'];
1679
    					            $l->total_tva = $val['total_tva'];
1680
    					            $l->total = $line->total_ht;
1681
    					            $l->total_ttc = $val['total_ttc'];
1682
    					            $TLines[] = $l;
1683
    					            array_shift($TTvas);
1684
    					       }
1685
    					    }
1686
    					    
1687
    					    // ajoute la ligne de sous-total
1688
    					    $TLines[] = $line; 
1689
    					}
1690
				    } else {
1691
				        
1692
				        if($line->product_type==9 && $line->rowid>0)
1693
				        {
1694
				            // ajoute la ligne de sous-total
1695
				            $TLines[] = $line; 
1696
				        }
1697
				    }
1698
				    
1699
					
1700
				}
1701
				elseif ($hidedetails)
1702
				{
1703
					$TLines[] = $line; //Cas où je cache uniquement les prix des produits	
1704
				}
1705
				
1706
				if ($line->product_type != 9) { // jusqu'au prochain titre ou total
1707
					//$line->fk_parent_line = $fk_parent_line;
1708
					
1709
				}
1710
			
1711
				/*if($hideTotal) {
1712
					$line->total = 0;
1713
					$line->subprice= 0;
1714
				}*/
1715
				
1716
			}
1717
			
1718
			// cas incongru où il y aurait des produits en dessous du dernier sous-total
1719
			$nbtva = count($TTvas);
1720
			if(!empty($nbtva) && $hideInnerLines && !empty($conf->global->SUBTOTAL_REPLACE_WITH_VAT_IF_HIDE_INNERLINES))
1721
			{
1722
			    foreach ($TTvas as $tx =>$val){
1723
			        $l = clone $line;
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $line seems to be defined by a foreach iteration on line 1619. Are you sure the iterator is never empty, otherwise this variable is not defined?
Loading history...
1724
			        $l->product_type = 1;
1725
			        $l->special_code = '';
1726
			        $l->qty = 1;
1727
			        $l->desc = $langs->trans('AmountBeforeTaxesSubjectToVATX%', $langs->transnoentitiesnoconv('VAT'), price($tx));
1728
			        $l->tva_tx = $tx;
1729
			        $l->total_ht = $val['total_ht'];
1730
			        $l->total_tva = $val['total_tva'];
1731
			        $l->total = $line->total_ht;
1732
			        $l->total_ttc = $val['total_ttc'];
1733
			        $TLines[] = $l;
1734
			        array_shift($TTvas);
1735
			    }
1736
			}
1737
			
1738
			global $nblignes;
1739
			$nblignes=count($TLines);
1740
1741
			$object->lines = $TLines;
1742
			
1743
			if($i>count($object->lines)) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $i seems to be never defined.
Loading history...
1744
				$this->resprints = '';
0 ignored issues
show
Bug Best Practice introduced by
The property resprints does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
1745
				return 0;
1746
			}
1747
	    }
1748
		
1749
		return 0;
1750
	}
1751
1752
	function pdf_writelinedesc($parameters=array(), &$object, &$action)
0 ignored issues
show
Unused Code introduced by
The parameter $action is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

1752
	function pdf_writelinedesc($parameters=array(), &$object, /** @scrutinizer ignore-unused */ &$action)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
1753
	{
1754
		/**
1755
		 * @var $pdf    TCPDF
1756
		 */
1757
		global $pdf,$conf;
1758
1759
		foreach($parameters as $key=>$value) {
1760
			${$key} = $value;
1761
		}
1762
		
1763
		$hideInnerLines = (int)GETPOST('hideInnerLines');
0 ignored issues
show
Unused Code introduced by
The assignment to $hideInnerLines is dead and can be removed.
Loading history...
Bug introduced by
The function GETPOST was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

1763
		$hideInnerLines = (int)/** @scrutinizer ignore-call */ GETPOST('hideInnerLines');
Loading history...
1764
		$hidedetails = (int)GETPOST('hidedetails');
0 ignored issues
show
Unused Code introduced by
The assignment to $hidedetails is dead and can be removed.
Loading history...
1765
		
1766
		if($this->isModSubtotalLine($parameters,$object) ){			
1767
		
1768
				global $hideprices;
1769
				
1770
				if(!empty($hideprices)) {
1771
					foreach($object->lines as &$line) {
1772
						if($line->fk_product_type!=9) $line->fk_parent_line = -1;	
1773
					}
1774
				}
1775
			
1776
				$line = &$object->lines[$i];
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $i seems to be never defined.
Loading history...
1777
				
1778
				if($line->info_bits>0) { // PAGE BREAK
1779
					$pdf->addPage();
1780
					$posy = $pdf->GetY();
1781
				}
1782
				
1783
				$label = $line->label;
1784
				$description= !empty($line->desc) ? $outputlangs->convToOutputCharset($line->desc) : $outputlangs->convToOutputCharset($line->description);
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $outputlangs seems to be never defined.
Loading history...
1785
				
1786
				if(empty($label)) {
1787
					$label = $description;
1788
					$description='';
1789
				}
1790
				
1791
				if($line->qty>90) {
1792
					
1793
					if ($conf->global->SUBTOTAL_USE_NEW_FORMAT)	$label .= ' '.$this->getTitle($object, $line);
1794
					
1795
					$pageBefore = $pdf->getPage();
1796
					$this->pdf_add_total($pdf,$object, $line, $label, $description,$posx, $posy, $w, $h);
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $h seems to be never defined.
Loading history...
Comprehensibility Best Practice introduced by
The variable $posx seems to be never defined.
Loading history...
Comprehensibility Best Practice introduced by
The variable $w seems to be never defined.
Loading history...
Comprehensibility Best Practice introduced by
The variable $posy does not seem to be defined for all execution paths leading up to this point.
Loading history...
1797
					$pageAfter = $pdf->getPage();	
1798
1799
					if($pageAfter>$pageBefore) {
1800
						//print "ST $pageAfter>$pageBefore<br>";
1801
						$pdf->rollbackTransaction(true);	
1802
						$pdf->addPage('','', true);
1803
						$posy = $pdf->GetY();
1804
						$this->pdf_add_total($pdf,$object, $line, $label, $description,$posx, $posy, $w, $h);
1805
						$posy = $pdf->GetY();
0 ignored issues
show
Unused Code introduced by
The assignment to $posy is dead and can be removed.
Loading history...
1806
						//print 'add ST'.$pdf->getPage().'<br />';
1807
					}
1808
				
1809
					$posy = $pdf->GetY();
1810
					return 1;
1811
				}	
1812
				else if ($line->qty < 10) {
1813
					$pageBefore = $pdf->getPage();
0 ignored issues
show
Unused Code introduced by
The assignment to $pageBefore is dead and can be removed.
Loading history...
1814
1815
					$this->pdf_add_title($pdf,$object, $line, $label, $description,$posx, $posy, $w, $h); 
1816
					$pageAfter = $pdf->getPage();	
0 ignored issues
show
Unused Code introduced by
The assignment to $pageAfter is dead and can be removed.
Loading history...
1817
1818
					
1819
					/*if($pageAfter>$pageBefore) {
1820
						print "T $pageAfter>$pageBefore<br>";
1821
						$pdf->rollbackTransaction(true);
1822
						$pdf->addPage('','', true);
1823
						print 'add T'.$pdf->getPage().' '.$line->rowid.' '.$pdf->GetY().' '.$posy.'<br />';
1824
						
1825
						$posy = $pdf->GetY();
1826
						$this->pdf_add_title($pdf,$object, $line, $label, $description,$posx, $posy, $w, $h);
1827
						$posy = $pdf->GetY();
1828
					}
1829
				*/
1830
					$posy = $pdf->GetY();
1831
					return 1;
1832
				}
1833
//	if($line->rowid==47) exit;
1834
			
1835
			return 0;
1836
		}
1837
		elseif (empty($object->lines[$parameters['i']]))
1838
		{
1839
			$this->resprints = -1;
0 ignored issues
show
Bug Best Practice introduced by
The property resprints does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
1840
		}
1841
1842
		/* TODO je desactive parce que je comprends pas PH Style, mais à test
1843
		else {
1844
			
1845
			if($hideInnerLines) {
1846
				$pdf->rollbackTransaction(true);
1847
			}
1848
			else {
1849
				$labelproductservice=pdf_getlinedesc($object, $i, $outputlangs, $hideref, $hidedesc, $issupplierline);
1850
				$pdf->writeHTMLCell($w, $h, $posx, $posy, $outputlangs->convToOutputCharset($labelproductservice), 0, 1);
1851
			}
1852
			
1853
		}*/
1854
1855
1856
		
1857
	}
1858
1859
	/**
1860
	 * Permet de récupérer le titre lié au sous-total
1861
	 * 
1862
	 * @return string
1863
	 */
1864
	function getTitle(&$object, &$currentLine)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
1865
	{
1866
		$res = '';
1867
		
1868
		foreach ($object->lines as $line)
1869
		{
1870
			if ($line->id == $currentLine->id) break;
1871
			
1872
			$qty_search = 100 - $currentLine->qty;
1873
			
1874
			if ($line->product_type == 9 && $line->special_code == $this->module_number && $line->qty == $qty_search) 
1875
			{
1876
				$res = ($line->label) ? $line->label : (($line->description) ? $line->description : $line->desc);
1877
			}
1878
		}
1879
		
1880
		return $res;
1881
	}
1882
	
1883
	/**
1884
	 * @param $parameters   array
1885
	 * @param $object       CommonObject
1886
	 * @param $action       string
1887
	 * @param $hookmanager  HookManager
0 ignored issues
show
Bug introduced by
The type HookManager was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
1888
	 * @return int
1889
	 */
1890
	function printObjectLine ($parameters, &$object, &$action, $hookmanager){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
1891
		
1892
		global $conf,$langs,$user,$db,$bc;
1893
		
1894
		$num = &$parameters['num'];
1895
		$line = &$parameters['line'];
1896
		$i = &$parameters['i'];
1897
		
1898
		$var = &$parameters['var'];
1899
1900
		$contexts = explode(':',$parameters['context']);
1901
1902
		$createRight = $user->rights->{$object->element}->creer;
1903
		if($object->element == 'facturerec' )
1904
		{
1905
			$object->statut = 0; // hack for facture rec
1906
			$createRight = $user->rights->facture->creer;
1907
		}
1908
		elseif($object->element == 'order_supplier' )
1909
		{
1910
		    $createRight = $user->rights->fournisseur->commande->creer;
1911
		}
1912
		elseif($object->element == 'invoice_supplier' )
1913
		{
1914
		    $createRight = $user->rights->fournisseur->facture->creer;
1915
		}
1916
		
1917
		if($line->special_code!=$this->module_number || $line->product_type!=9) {
1918
			null;
1919
		}	
1920
		else if (in_array('invoicecard',$contexts) || in_array('invoicesuppliercard',$contexts) || in_array('propalcard',$contexts) || in_array('supplier_proposalcard',$contexts) || in_array('ordercard',$contexts) || in_array('ordersuppliercard',$contexts) || in_array('invoicereccard',$contexts)) 
1921
        {
1922
			if($object->element=='facture')$idvar = 'facid';
1923
			else $idvar='id';
1924
			
1925
			if((float)DOL_VERSION <= 3.4)
0 ignored issues
show
Bug introduced by
The constant DOL_VERSION was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
1926
			{
1927
				?>
1928
				<script type="text/javascript">
1929
					$(document).ready(function() {
1930
						$('#tablelines tr[rel=subtotal]').mouseleave(function() {
1931
1932
							id_line =$(this).attr('id');
1933
1934
							$(this).find('td[rel=subtotal_total]').each(function() {
1935
								$.get(document.location.href, function(data) {
1936
									var total = $(data).find('#tablelines tr#'+id_line+' td[rel=subtotal_total]').html();
1937
1938
									$('#tablelines tr#'+id_line+' td[rel=subtotal_total]').html(total);
1939
1940
								});
1941
							});
1942
						});
1943
					});
1944
1945
				</script>
1946
				<?php
1947
			}
1948
			
1949
			if(empty($line->description)) $line->description = $line->desc;
1950
			
1951
			$colspan = 5;
1952
			if($object->element == 'facturerec' ) $colspan = 3;
1953
			if($object->element == 'order_supplier') $colspan = 3;
1954
			if($object->element == 'invoice_supplier') $colspan = 4;
1955
			if($object->element == 'supplier_proposal') $colspan = 4;
1956
			if(!empty($conf->multicurrency->enabled)) $colspan+=2;
1957
			if($object->element == 'commande' && $object->statut < 3 && !empty($conf->shippableorder->enabled)) $colspan++;
1958
			if(!empty($conf->margin->enabled)) $colspan++;
1959
			if(!empty($conf->global->DISPLAY_MARGIN_RATES)) $colspan++;
1960
			if(!empty($conf->global->DISPLAY_MARK_RATES)) $colspan++;
1961
			if($object->element == 'facture' && !empty($conf->global->INVOICE_USE_SITUATION) && $object->type == Facture::TYPE_SITUATION) $colspan++;
1962
			if(!empty($conf->global->PRODUCT_USE_UNITS)) $colspan++;
1963
					
1964
			/* Titre */
1965
			//var_dump($line);
1966
            
1967
			// HTML 5 data for js
1968
            $data = $this->_getHtmlData($parameters, $object, $action, $hookmanager);
1969
            
1970
			
1971
			?>
1972
			<tr <?php echo $bc[$var]; $var=!$var; echo $data; ?> rel="subtotal" id="row-<?php echo $line->id ?>" style="<?php
1973
					if (!empty($conf->global->SUBTOTAL_USE_NEW_FORMAT))
1974
					{
1975
						if($line->qty==99) print 'background:#adadcf';
1976
						else if($line->qty==98) print 'background:#ddddff;';
1977
						else if($line->qty<=97 && $line->qty>=91) print 'background:#eeeeff;';
1978
						else if($line->qty==1) print 'background:#adadcf;';
1979
						else if($line->qty==2) print 'background:#ddddff;';
1980
						else if($line->qty==50) print '';
1981
						else print 'background:#eeeeff;';
1982
1983
						//A compléter si on veux plus de nuances de couleurs avec les niveau 4,5,6,7,8 et 9
1984
					}
1985
					else 
1986
					{
1987
						if($line->qty==99) print 'background:#ddffdd';
1988
						else if($line->qty==98) print 'background:#ddddff;';
1989
						else if($line->qty==2) print 'background:#eeeeff; ';
1990
						else if($line->qty==50) print '';
1991
						else print 'background:#eeffee;' ;
1992
					}
1993
1994
			?>;">
1995
			
1996
				<td colspan="<?php echo $colspan; ?>" style="<?php TSubtotal::isFreeText($line) ? '' : 'font-weight:bold;'; ?>  <?php echo ($line->qty>90)?'text-align:right':'' ?> "><?php
1997
					if($action=='editline' && GETPOST('lineid') == $line->id && TSubtotal::isModSubtotalLine($line) ) {
0 ignored issues
show
Bug introduced by
The function GETPOST was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

1997
					if($action=='editline' && /** @scrutinizer ignore-call */ GETPOST('lineid') == $line->id && TSubtotal::isModSubtotalLine($line) ) {
Loading history...
1998
1999
						$params=array('line'=>$line);
2000
						$reshook=$hookmanager->executeHooks('formEditProductOptions',$params,$object,$action);
0 ignored issues
show
Unused Code introduced by
The assignment to $reshook is dead and can be removed.
Loading history...
2001
						
2002
						echo '<div id="line_'.$line->id.'"></div>'; // Imitation Dolibarr
2003
						echo '<input type="hidden" value="'.$line->id.'" name="lineid">';
2004
						echo '<input id="product_type" type="hidden" value="'.$line->product_type.'" name="type">';
2005
						echo '<input id="product_id" type="hidden" value="'.$line->fk_product.'" name="type">';
2006
						echo '<input id="special_code" type="hidden" value="'.$line->special_code.'" name="type">';
2007
2008
						$isFreeText=false;
2009
						if (TSubtotal::isTitle($line))
2010
						{
2011
							$qty_displayed = $line->qty;
2012
							print img_picto('', 'subsubtotal@subtotal').'<span style="font-size:9px;margin-left:-3px;color:#0075DE;">'.$qty_displayed.'</span>&nbsp;&nbsp;';
0 ignored issues
show
Bug introduced by
The function img_picto was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

2012
							print /** @scrutinizer ignore-call */ img_picto('', 'subsubtotal@subtotal').'<span style="font-size:9px;margin-left:-3px;color:#0075DE;">'.$qty_displayed.'</span>&nbsp;&nbsp;';
Loading history...
2013
							
2014
						}
2015
						else if (TSubtotal::isSubtotal($line))
2016
						{
2017
							$qty_displayed = 100 - $line->qty;
2018
							print img_picto('', 'subsubtotal2@subtotal').'<span style="font-size:9px;margin-left:-1px;color:#0075DE;">'.$qty_displayed.'</span>&nbsp;&nbsp;';
2019
						}
2020
						else
2021
						{
2022
							$isFreeText = true;
2023
						}
2024
						
2025
						if ($object->element == 'order_supplier' || $object->element == 'invoice_supplier') {
2026
						    $line->label = !empty($line->description) ? $line->description : $line->desc;
2027
						    $line->description = '';
2028
						}
2029
						$newlabel = $line->label;
2030
						if($line->label=='' && !$isFreeText) {
2031
							if(TSubtotal::isSubtotal($line)) {
2032
								$newlabel = $line->description.' '.$this->getTitle($object, $line);
2033
								$line->description='';
2034
							} elseif( (float)DOL_VERSION < 6 ) {
2035
								$newlabel= $line->description;
2036
								$line->description='';
2037
							}
2038
						}
2039
2040
						$readonlyForSituation = '';
2041
						if (!empty($object->situation_cycle_ref) && $object->situation_counter > 1) $readonlyForSituation = 'readonly';
2042
						
2043
						if (!$isFreeText) echo '<input type="text" name="line-title" id-line="'.$line->id.'" value="'.$newlabel.'" size="80" '.$readonlyForSituation.'/>&nbsp;';
2044
						
2045
						if (!empty($conf->global->SUBTOTAL_USE_NEW_FORMAT) && (TSubtotal::isTitle($line) || TSubtotal::isSubtotal($line)) )
2046
						{
2047
							$select = '<select name="subtotal_level">';
2048
							for ($j=1; $j<10; $j++)
2049
							{
2050
								if (!empty($readonlyForSituation)) {
2051
									if ($qty_displayed == $j) $select .= '<option selected="selected" value="'.$j.'">'.$langs->trans('Level').' '.$j.'</option>';
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $qty_displayed does not seem to be defined for all execution paths leading up to this point.
Loading history...
2052
								} else $select .= '<option '.($qty_displayed == $j ? 'selected="selected"' : '').' value="'.$j.'">'.$langs->trans('Level').' '.$j.'</option>';
2053
							}
2054
							$select .= '</select>&nbsp;';
2055
2056
							echo $select;
2057
						}
2058
						
2059
2060
						echo '<div class="subtotal_underline" style="margin-left:24px; line-height: 25px;">';
2061
                        echo '<div>';
2062
                        echo '<input style="vertical-align:sub;"  type="checkbox" name="line-pagebreak" id="subtotal-pagebreak" value="8" '.(($line->info_bits > 0) ? 'checked="checked"' : '') .' />&nbsp;';
2063
                        echo '<label for="subtotal-pagebreak">'.$langs->trans('AddBreakPageBefore').'</label>';
2064
                        echo '</div>';
2065
2066
                        if (TSubtotal::isTitle($line))
2067
                        {
2068
                            $form = new Form($db);
2069
                            echo '<div>';
2070
                            echo '<label for="subtotal_tva_tx">'.$form->textwithpicto($langs->trans('subtotal_apply_default_tva'), $langs->trans('subtotal_apply_default_tva_help')).'</label>';
2071
                            echo '<select id="subtotal_tva_tx" name="subtotal_tva_tx" class="flat"><option selected="selected" value="">-</option>';
2072
                            if (empty($readonlyForSituation)) echo str_replace('selected', '', $form->load_tva('subtotal_tva_tx', '', $parameters['seller'], $parameters['buyer'], 0, 0, '', true));
2073
                            echo '</select>';
2074
                            echo '</div>';
2075
2076
                            if (!empty($conf->global->INVOICE_USE_SITUATION) && $object->element == 'facture' && $object->type == Facture::TYPE_SITUATION)
2077
                            {
2078
                                echo '<div>';
2079
                                echo '<label for="subtotal_progress">'.$langs->trans('subtotal_apply_progress').'</label> <input id="subtotal_progress" name="subtotal_progress" value="" size="1" />%';
2080
                                echo '</div>';
2081
                            }
2082
                            echo '<div>';
2083
                            echo '<input style="vertical-align:sub;"  type="checkbox" name="line-showTotalHT" id="subtotal-showTotalHT" value="9" '.(($line->array_options['options_show_total_ht'] > 0) ? 'checked="checked"' : '') .' />&nbsp;';
2084
                            echo '<label for="subtotal-showTotalHT">'.$langs->trans('ShowTotalHTOnSubtotalBlock').'</label>';
2085
                            echo '</div>';
2086
2087
                            echo '<div>';
2088
                            echo '<input style="vertical-align:sub;"  type="checkbox" name="line-showReduc" id="subtotal-showReduc" value="1" '.(($line->array_options['options_show_reduc'] > 0) ? 'checked="checked"' : '') .' />&nbsp;';
2089
                            echo '<label for="subtotal-showReduc">'.$langs->trans('ShowReducOnSubtotalBlock').'</label>';
2090
                            echo '</div>';
2091
                        }
2092
                        else if ($isFreeText) echo TSubtotal::getFreeTextHtml($line, (bool) $readonlyForSituation);
2093
						echo '</div>';
2094
2095
						if($line->qty<10) {
2096
							// WYSIWYG editor
2097
							require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php';
0 ignored issues
show
Bug introduced by
The constant DOL_DOCUMENT_ROOT was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
2098
							$nbrows = ROWS_2;
0 ignored issues
show
Bug introduced by
The constant ROWS_2 was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
2099
							$cked_enabled = (!empty($conf->global->FCKEDITOR_ENABLE_DETAILS) ? $conf->global->FCKEDITOR_ENABLE_DETAILS : 0);
2100
							if (!empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) {
2101
								$nbrows = $conf->global->MAIN_INPUT_DESC_HEIGHT;
2102
							}
2103
							$toolbarname = 'dolibarr_details';
2104
							if (!empty($conf->global->FCKEDITOR_ENABLE_DETAILS_FULL)) {
2105
								$toolbarname = 'dolibarr_notes';
2106
							}
2107
							$doleditor = new DolEditor('line-description', $line->description, '', 100, $toolbarname, '',
0 ignored issues
show
Bug introduced by
The type DolEditor was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
2108
								false, true, $cked_enabled, $nbrows, '98%', (bool) $readonlyForSituation);
2109
							$doleditor->Create();
2110
						}
2111
						
2112
					}
2113
					else {
2114
2115
						 if ($conf->global->SUBTOTAL_USE_NEW_FORMAT)
2116
						 {
2117
							if(TSubtotal::isTitle($line) || TSubtotal::isSubtotal($line)) 
2118
							{
2119
								echo str_repeat('&nbsp;&nbsp;&nbsp;', $line->qty-1);
2120
								
2121
								if (TSubtotal::isTitle($line)) print img_picto('', 'subtotal@subtotal').'<span style="font-size:9px;margin-left:-3px;">'.$line->qty.'</span>&nbsp;&nbsp;';
2122
								else print img_picto('', 'subtotal2@subtotal').'<span style="font-size:9px;margin-left:-1px;">'.(100-$line->qty).'</span>&nbsp;&nbsp;';
2123
							}
2124
						 }
2125
						 else 
2126
						 {
2127
							if($line->qty<=1) print img_picto('', 'subtotal@subtotal');
2128
							else if($line->qty==2) print img_picto('', 'subsubtotal@subtotal').'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'; 
2129
						 }
2130
						 
2131
						 
2132
						 // Get display styles and apply them
2133
						 $titleStyleItalic = strpos($conf->global->SUBTOTAL_TITLE_STYLE, 'I') === false ? '' : ' font-style: italic;';
2134
						 $titleStyleBold =  strpos($conf->global->SUBTOTAL_TITLE_STYLE, 'B') === false ? '' : ' font-weight:bold;';
2135
						 $titleStyleUnderline =  strpos($conf->global->SUBTOTAL_TITLE_STYLE, 'U') === false ? '' : ' text-decoration: underline;';
2136
						 
2137
						 if (empty($line->label)) {
2138
							if ($line->qty >= 91 && $line->qty <= 99 && $conf->global->SUBTOTAL_USE_NEW_FORMAT) print  $line->description.' '.$this->getTitle($object, $line);
2139
							else print  $line->description;
2140
						 } 
2141
						 else {
2142
2143
							if (! empty($conf->global->PRODUIT_DESC_IN_FORM) && !empty($line->description)) {
2144
								print '<span class="subtotal_label" style="'.$titleStyleItalic.$titleStyleBold.$titleStyleUnderline.'" >'.$line->label.'</span><br><div class="subtotal_desc">'.dol_htmlentitiesbr($line->description).'</div>';
0 ignored issues
show
Bug introduced by
The function dol_htmlentitiesbr was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

2144
								print '<span class="subtotal_label" style="'.$titleStyleItalic.$titleStyleBold.$titleStyleUnderline.'" >'.$line->label.'</span><br><div class="subtotal_desc">'./** @scrutinizer ignore-call */ dol_htmlentitiesbr($line->description).'</div>';
Loading history...
2145
							}
2146
							else{
2147
								print '<span class="subtotal_label classfortooltip '.$titleStyleItalic.$titleStyleBold.$titleStyleUnderline.'" title="'.$line->description.'">'.$line->label.'</span>';    
2148
							}
2149
2150
						 } 
2151
						if($line->qty>90) print ' : ';
2152
						if($line->info_bits > 0) echo img_picto($langs->trans('Pagebreak'), 'pagebreak@subtotal');
2153
2154
						 
2155
2156
2157
					}
2158
			?></td>
2159
					 
2160
			<?php
2161
				if($line->qty>90) {
2162
					/* Total */
2163
					$total_line = $this->getTotalLineFromObject($object, $line, '');
2164
					echo '<td class="nowrap liencolht" align="right" style="font-weight:bold;" rel="subtotal_total">'.price($total_line).'</td>';
0 ignored issues
show
Bug introduced by
The function price was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

2164
					echo '<td class="nowrap liencolht" align="right" style="font-weight:bold;" rel="subtotal_total">'./** @scrutinizer ignore-call */ price($total_line).'</td>';
Loading history...
2165
				} else {
2166
					echo '<td class="liencolht movetitleblock" >&nbsp;</td>';
2167
				}	
2168
			?>
2169
					
2170
			<td align="center" class="nowrap linecoledit">
2171
				<?php
2172
				if ($action != 'selectlines') {
2173
				
2174
					if($action=='editline' && GETPOST('lineid') == $line->id && TSubtotal::isModSubtotalLine($line) ) {
2175
						?>
2176
						<input id="savelinebutton" class="button" type="submit" name="save" value="<?php echo $langs->trans('Save') ?>" />
2177
						<br />
2178
						<input class="button" type="button" name="cancelEditlinetitle" value="<?php echo $langs->trans('Cancel') ?>" />
2179
						<script type="text/javascript">
2180
							$(document).ready(function() {
2181
								$('input[name=cancelEditlinetitle]').click(function () {
2182
									document.location.href="<?php echo '?'.$idvar.'='.$object->id ?>";
2183
								});
2184
							});
2185
2186
						</script>
2187
						<?php
2188
						
2189
					}
2190
					else{
2191
						if ($object->statut == 0  && $createRight && !empty($conf->global->SUBTOTAL_ALLOW_DUPLICATE_BLOCK) && $object->element !== 'invoice_supplier')
2192
						{
2193
							if(TSubtotal::isTitle($line) && ($object->situation_counter == 1 || !$object->situation_cycle_ref) ) echo '<a href="'.$_SERVER['PHP_SELF'].'?'.$idvar.'='.$object->id.'&action=duplicate&lineid='.$line->id.'">'. img_picto($langs->trans('Duplicate'), 'duplicate@subtotal').'</a>';
2194
						}
2195
2196
						if ($object->statut == 0  && $createRight && !empty($conf->global->SUBTOTAL_ALLOW_EDIT_BLOCK)) 
2197
						{
2198
							echo '<a href="'.$_SERVER['PHP_SELF'].'?'.$idvar.'='.$object->id.'&action=editline&lineid='.$line->id.'">'.img_edit().'</a>';
0 ignored issues
show
Bug introduced by
The function img_edit was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

2198
							echo '<a href="'.$_SERVER['PHP_SELF'].'?'.$idvar.'='.$object->id.'&action=editline&lineid='.$line->id.'">'./** @scrutinizer ignore-call */ img_edit().'</a>';
Loading history...
2199
						}								
2200
					}
2201
					
2202
				}
2203
					
2204
				?>
2205
			</td>
2206
2207
			<td align="center" nowrap="nowrap" class="linecoldelete">	
2208
				<?php
2209
2210
				if ($action != 'editline' && $action != 'selectlines') {
2211
						if ($object->statut == 0  && $createRight && !empty($conf->global->SUBTOTAL_ALLOW_REMOVE_BLOCK))
2212
						{
2213
2214
							if ($object->situation_counter == 1 || !$object->situation_cycle_ref)
2215
							{
2216
								echo '<a href="'.$_SERVER['PHP_SELF'].'?'.$idvar.'='.$object->id.'&action=ask_deleteline&lineid='.$line->id.'">'.img_delete().'</a>';
0 ignored issues
show
Bug introduced by
The function img_delete was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

2216
								echo '<a href="'.$_SERVER['PHP_SELF'].'?'.$idvar.'='.$object->id.'&action=ask_deleteline&lineid='.$line->id.'">'./** @scrutinizer ignore-call */ img_delete().'</a>';
Loading history...
2217
							}
2218
2219
							if(TSubtotal::isTitle($line) && ($object->situation_counter == 1 || !$object->situation_cycle_ref) )
2220
							{
2221
								$img_delete = ((float) DOL_VERSION >= 3.8) ? img_picto($langs->trans('deleteWithAllLines'), 'delete_all.3.8@subtotal') : img_picto($langs->trans('deleteWithAllLines'), 'delete_all@subtotal');
2222
								echo '<a href="'.$_SERVER['PHP_SELF'].'?'.$idvar.'='.$object->id.'&action=ask_deleteallline&lineid='.$line->id.'">'.$img_delete.'</a>';
2223
							}
2224
						}
2225
					}
2226
				?>
2227
			</td>
2228
			
2229
			<?php 
2230
			if ($object->statut == 0  && $createRight && !empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && TSubtotal::isTitle($line) && $action != 'editline')
2231
			{
2232
				echo '<td class="subtotal_nc">';
2233
				echo '<input id="subtotal_nc-'.$line->id.'" class="subtotal_nc_chkbx" data-lineid="'.$line->id.'" type="checkbox" name="subtotal_nc" value="1" '.(!empty($line->array_options['options_subtotal_nc']) ? 'checked="checked"' : '').' />';
2234
				echo '</td>';
2235
			}
2236
			
2237
			if ($num > 1 && empty($conf->browser->phone)) { ?>
2238
			<td align="center" class="tdlineupdown">
2239
			</td>
2240
			<?php } else { ?>
2241
			<td align="center"<?php echo ((empty($conf->browser->phone) && ($object->statut == 0  && $createRight ))?' class="tdlineupdown"':''); ?>></td>
2242
			<?php } ?>
2243
2244
			<?php  if($action == 'selectlines'){ // dolibarr 8 ?>
2245
			<td class="linecolcheck" align="center"><input type="checkbox" class="linecheckbox" name="line_checkbox[<?php echo $i+1; ?>]" value="<?php echo $line->id; ?>" ></td>
2246
			<?php } ?>
2247
2248
			</tr>
2249
			<?php
2250
			
2251
			
2252
			// Affichage des extrafields à la Dolibarr (car sinon non affiché sur les titres)
2253
			if(TSubtotal::isTitle($line) && !empty($conf->global->SUBTOTAL_ALLOW_EXTRAFIELDS_ON_TITLE)) {
2254
				
2255
				require_once DOL_DOCUMENT_ROOT . '/core/class/extrafields.class.php';
2256
				
2257
				// Extrafields
2258
				$extrafieldsline = new ExtraFields($db);
2259
				$extralabelsline = $extrafieldsline->fetch_name_optionals_label($object->table_element_line);
0 ignored issues
show
Unused Code introduced by
The assignment to $extralabelsline is dead and can be removed.
Loading history...
2260
				
2261
				$colspan+=3; $mode = 'view';
2262
				if($action === 'editline' && $line->rowid == GETPOST('lineid')) $mode = 'edit';
2263
				
2264
				$ex_element = $line->element;
2265
				$line->element = 'tr_extrafield_title '.$line->element; // Pour pouvoir manipuler ces tr
2266
				print $line->showOptionals($extrafieldsline, $mode, array('style'=>' style="background:#eeffee;" ','colspan'=>$colspan));
2267
				$isExtraSelected = false;
2268
				foreach($line->array_options as $option) {
2269
					if(!empty($option) && $option != "-1") {
2270
						$isExtraSelected = true;
2271
						break;
2272
					}
2273
				}
2274
				
2275
				if($mode === 'edit') {
2276
					?>
2277
					<script>
2278
						$(document).ready(function(){
2279
2280
							var all_tr_extrafields = $("tr.tr_extrafield_title");
2281
							<?php 
2282
							// Si un extrafield est rempli alors on affiche directement les extrafields
2283
							if(!$isExtraSelected) {
2284
								echo 'all_tr_extrafields.hide();';
2285
								echo 'var trad = "'.$langs->trans('showExtrafields').'";';
2286
								echo 'var extra = 0;';
2287
							} else {
2288
								echo 'all_tr_extrafields.show();';
2289
								echo 'var trad = "'.$langs->trans('hideExtrafields').'";';
2290
								echo 'var extra = 1;';
2291
							}
2292
							?>
2293
							
2294
							$("div .subtotal_underline").append(
2295
									'<a id="printBlocExtrafields" onclick="return false;" href="#">' + trad + '</a>'
2296
									+ '<input type="hidden" name="showBlockExtrafields" id="showBlockExtrafields" value="'+ extra +'" />');
2297
2298
							$(document).on('click', "#printBlocExtrafields", function() {
2299
								var btnShowBlock = $("#showBlockExtrafields");
2300
								var val = btnShowBlock.val();
2301
								if(val == '0') {
2302
									btnShowBlock.val('1');
2303
									$("#printBlocExtrafields").html("<?php print $langs->trans('hideExtrafields'); ?>");
2304
									$(all_tr_extrafields).show();
2305
								} else {
2306
									btnShowBlock.val('0');
2307
									$("#printBlocExtrafields").html("<?php print $langs->trans('showExtrafields'); ?>");
2308
									$(all_tr_extrafields).hide();
2309
								}
2310
							});
2311
						});
2312
					</script>
2313
					<?php
2314
				}
2315
				$line->element = $ex_element;
2316
				
2317
			}
2318
			
2319
			return 1;	
2320
			
2321
		}
2322
		
2323
		return 0;
2324
2325
	}
2326
2327
	
2328
	function addMoreActionsButtons($parameters, &$object, &$action, $hookmanager) {
0 ignored issues
show
Unused Code introduced by
The parameter $hookmanager is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

2328
	function addMoreActionsButtons($parameters, &$object, &$action, /** @scrutinizer ignore-unused */ $hookmanager) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
Unused Code introduced by
The parameter $parameters is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

2328
	function addMoreActionsButtons(/** @scrutinizer ignore-unused */ $parameters, &$object, &$action, $hookmanager) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
2329
		global $conf,$langs;
2330
		 
2331
		if ($object->statut == 0 && !empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && $action != 'editline')
2332
		{
2333
		    
2334
		    if($object->element == 'invoice_supplier' || $object->element == 'order_supplier')
2335
		    {
2336
		        foreach ($object->lines as $line)
2337
		        {
2338
		            // fetch optionals attributes and labels
2339
		            require_once(DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php');
0 ignored issues
show
Bug introduced by
The constant DOL_DOCUMENT_ROOT was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
2340
		            $extrafields=new ExtraFields($this->db);
2341
		            $extralabels=$extrafields->fetch_name_optionals_label($object->table_element_line,true);
2342
		            $line->fetch_optionals($line->id,$extralabels);
2343
		        }
2344
		    }
2345
		    
2346
			$TSubNc = array();
2347
			foreach ($object->lines as &$l)
2348
			{
2349
				$TSubNc[$l->id] = (int) $l->array_options['options_subtotal_nc'];
2350
			}
2351
			
2352
			$form = new Form($db);
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $db seems to be never defined.
Loading history...
2353
			?>
2354
			<script type="text/javascript">
2355
				$(function() {
2356
					var subtotal_TSubNc = <?php echo json_encode($TSubNc); ?>;
2357
					$("#tablelines tbody > tr").each(function(i, item) {
2358
						if ($(item).children('.subtotal_nc').length == 0)
2359
						{
2360
							var id = $(item).attr('id');
2361
							
2362
							if ((typeof id != 'undefined' && id.indexOf('row-') >= 0) || $(item).hasClass('liste_titre'))
2363
							{
2364
								$(item).children('td:last-child').before('<td class="subtotal_nc"></td>');
2365
								
2366
								if ($(item).attr('rel') != 'subtotal' && typeof $(item).attr('id') != 'undefined')
2367
								{
2368
									var idSplit = $(item).attr('id').split('-');
2369
									$(item).children('td.subtotal_nc').append($('<input type="checkbox" id="subtotal_nc-'+idSplit[1]+'" class="subtotal_nc_chkbx" data-lineid="'+idSplit[1]+'" value="1" '+(typeof subtotal_TSubNc[idSplit[1]] != 'undefined' && subtotal_TSubNc[idSplit[1]] == 1 ? 'checked="checked"' : '')+' />'));
2370
								}
2371
							}
2372
							else 
2373
							{
2374
								$(item).append('<td class="subtotal_nc"></td>');
2375
							}
2376
						}
2377
					});
2378
					
2379
					$('#tablelines tbody tr.liste_titre:first .subtotal_nc').html(<?php echo json_encode($form->textwithtooltip($langs->trans('subtotal_nc_title'), $langs->trans('subtotal_nc_title_help'))); ?>);
2380
					
2381
					function callAjaxUpdateLineNC(set, lineid, subtotal_nc)
2382
					{
2383
						$.ajax({
2384
							url: '<?php echo dol_buildpath('/subtotal/script/interface.php', 1); ?>'
0 ignored issues
show
Bug introduced by
The function dol_buildpath was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

2384
							url: '<?php echo /** @scrutinizer ignore-call */ dol_buildpath('/subtotal/script/interface.php', 1); ?>'
Loading history...
2385
							,type: 'POST'
2386
							,data: {
2387
								json:1
2388
								,set: set
2389
								,element: '<?php echo $object->element; ?>'
2390
								,elementid: <?php echo (int) $object->id; ?>
2391
								,lineid: lineid
2392
								,subtotal_nc: subtotal_nc
2393
							}
2394
						}).done(function(response) {
2395
							window.location.href = window.location.pathname + '?id=<?php echo $object->id; ?>&page_y=' + window.pageYOffset;
2396
						});
2397
					}
2398
					
2399
					$(".subtotal_nc_chkbx").change(function(event) {
2400
						var lineid = $(this).data('lineid');
2401
						var subtotal_nc = 0 | $(this).is(':checked'); // Renvoi 0 ou 1 
2402
						
2403
						callAjaxUpdateLineNC('updateLineNC', lineid, subtotal_nc);
2404
					});
2405
					
2406
				});
2407
2408
			</script>
2409
			<?php
2410
		}
2411
		
2412
		$this->_ajax_block_order_js($object);
2413
	}
2414
	
2415
	function afterPDFCreation($parameters, &$pdf, &$action, $hookmanager)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
Unused Code introduced by
The parameter $hookmanager is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

2415
	function afterPDFCreation($parameters, &$pdf, &$action, /** @scrutinizer ignore-unused */ $hookmanager)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $action is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

2415
	function afterPDFCreation($parameters, &$pdf, /** @scrutinizer ignore-unused */ &$action, $hookmanager)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
2416
	{
2417
		global $conf;
2418
		
2419
		$object = $parameters['object'];
2420
		
2421
		if ((!empty($conf->global->SUBTOTAL_PROPAL_ADD_RECAP) && $object->element == 'propal') || (!empty($conf->global->SUBTOTAL_COMMANDE_ADD_RECAP) && $object->element == 'commande') || (!empty($conf->global->SUBTOTAL_INVOICE_ADD_RECAP) && $object->element == 'facture'))
2422
		{
2423
			if (GETPOST('subtotal_add_recap')) {
0 ignored issues
show
Bug introduced by
The function GETPOST was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

2423
			if (/** @scrutinizer ignore-call */ GETPOST('subtotal_add_recap')) {
Loading history...
2424
				dol_include_once('/subtotal/class/subtotal.class.php');
0 ignored issues
show
Bug introduced by
The function dol_include_once was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

2424
				/** @scrutinizer ignore-call */ 
2425
    dol_include_once('/subtotal/class/subtotal.class.php');
Loading history...
2425
				TSubtotal::addRecapPage($parameters, $pdf);
2426
			}
2427
		}
2428
	}
2429
	
2430
	// HTML 5 data for js
2431
	private function _getHtmlData($parameters, &$object, &$action, $hookmanager)
2432
	{
2433
		dol_include_once('/subtotal/class/subtotal.class.php');
0 ignored issues
show
Bug introduced by
The function dol_include_once was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

2433
		/** @scrutinizer ignore-call */ 
2434
  dol_include_once('/subtotal/class/subtotal.class.php');
Loading history...
2434
2435
	    $line = &$parameters['line'];
2436
	    
2437
	    $ThtmlData['data-id']           = $line->id;
0 ignored issues
show
Comprehensibility Best Practice introduced by
$ThtmlData was never initialized. Although not strictly required by PHP, it is generally a good practice to add $ThtmlData = array(); before regardless.
Loading history...
2438
	    $ThtmlData['data-product_type'] = $line->product_type;
2439
	    $ThtmlData['data-qty']          = 0; //$line->qty;
2440
	    $ThtmlData['data-level']        = TSubtotal::getNiveau($line);
2441
	    
2442
	    if(TSubtotal::isTitle($line)){
2443
	        $ThtmlData['data-issubtotal'] = 'title';
2444
	    }elseif(TSubtotal::isSubtotal($line)){
2445
	        $ThtmlData['data-issubtotal'] = 'subtotal';
2446
	    }
2447
	    else{
2448
	        $ThtmlData['data-issubtotal'] = 'freetext';
2449
	    }
2450
	    
2451
	    
2452
	    // Change or add data  from hooks
2453
	    $parameters = array_replace($parameters , array(  'ThtmlData' => $ThtmlData )  );
2454
	    
2455
	    // hook 
2456
	    $reshook = $hookmanager->executeHooks('subtotalLineHtmlData',$parameters,$object,$action); // Note that $action and $object may have been modified by hook
2457
	    if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
0 ignored issues
show
Bug introduced by
The function setEventMessages was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

2457
	    if ($reshook < 0) /** @scrutinizer ignore-call */ setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
Loading history...
2458
	    if ($reshook>0)
2459
	    {
2460
	        $ThtmlData = $hookmanager->resArray;
2461
	    }
2462
2463
	    return $this->implodeHtmlData($ThtmlData);
2464
	
2465
	}
2466
	
2467
	
2468
	function implodeHtmlData($ThtmlData = array())
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
2469
	{
2470
	    $data = '';
2471
	    foreach($ThtmlData as $k => $h )
2472
	    {
2473
	        if(is_array($h))
2474
	        {
2475
	            $h = json_encode($h);
2476
	        }
2477
	        
2478
	        $data .= $k . '="'.dol_htmlentities($h, ENT_QUOTES).'" ';
0 ignored issues
show
Bug introduced by
The function dol_htmlentities was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

2478
	        $data .= $k . '="'./** @scrutinizer ignore-call */ dol_htmlentities($h, ENT_QUOTES).'" ';
Loading history...
2479
	    }
2480
	    
2481
	    return $data;
2482
	}
2483
	
2484
	function _ajax_block_order_js($object)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
2485
	{
2486
	    global $conf,$tagidfortablednd,$filepath,$langs;
2487
	    
2488
	    /*
2489
	     * this part of js is base on dolibarr htdocs/core/tpl/ajaxrow.tpl.php 
2490
	     * for compatibility reasons we don't use tableDnD but jquery sortable
2491
	     */
2492
	    
2493
	    $id=$object->id;
0 ignored issues
show
Unused Code introduced by
The assignment to $id is dead and can be removed.
Loading history...
2494
	    $nboflines=(isset($object->lines)?count($object->lines):0);
2495
	    $forcereloadpage=empty($conf->global->MAIN_FORCE_RELOAD_PAGE)?0:1;
0 ignored issues
show
Unused Code introduced by
The assignment to $forcereloadpage is dead and can be removed.
Loading history...
2496
	    
2497
	    $id=$object->id;
2498
	    $fk_element=$object->fk_element;
2499
	    $table_element_line=$object->table_element_line;
2500
	    $nboflines=(isset($object->lines)?count($object->lines):(empty($nboflines)?0:$nboflines));
2501
	    $tagidfortablednd=(empty($tagidfortablednd)?'tablelines':$tagidfortablednd);
2502
	    $filepath=(empty($filepath)?'':$filepath);
2503
	    
2504
	    
2505
	    if (GETPOST('action','aZ09') != 'editline' && $nboflines > 1)
0 ignored issues
show
Bug introduced by
The function GETPOST was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

2505
	    if (/** @scrutinizer ignore-call */ GETPOST('action','aZ09') != 'editline' && $nboflines > 1)
Loading history...
2506
	    {
2507
	        
2508
	        ?>
2509
		
2510
		
2511
			<script type="text/javascript">
2512
			$(document).ready(function(){
2513
2514
				// target some elements
2515
				var titleRow = $('tr[data-issubtotal="title"]');
2516
				var lastTitleCol = titleRow.find('td:last-child');
2517
				var moveBlockCol= titleRow.find('td.liencolht');
2518
2519
				
2520
				moveBlockCol.disableSelection(); // prevent selection
2521
<?php if ($object->statut == 0) { ?>
2522
				// apply some graphical stuff
2523
				moveBlockCol.css("background-image",'url(<?php echo dol_buildpath('subtotal/img/grip_all.png',2);  ?>)');
0 ignored issues
show
Bug introduced by
The function dol_buildpath was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

2523
				moveBlockCol.css("background-image",'url(<?php echo /** @scrutinizer ignore-call */ dol_buildpath('subtotal/img/grip_all.png',2);  ?>)');
Loading history...
2524
				moveBlockCol.css("background-repeat","no-repeat");
2525
				moveBlockCol.css("background-position","center center");
2526
				moveBlockCol.css("cursor","move");
2527
				titleRow.attr('title', '<?php echo html_entity_decode($langs->trans('MoveTitleBlock')); ?>');
2528
			
2529
2530
 				$( "#<?php echo $tagidfortablednd; ?>" ).sortable({
2531
			    	  cursor: "move",
2532
			    	  handle: ".movetitleblock",
2533
			    	  items: 'tr:not(.nodrag,.nodrop,.noblockdrop)',
2534
			    	  delay: 150, //Needed to prevent accidental drag when trying to select
2535
			    	  opacity: 0.8,
2536
			    	  axis: "y", // limit y axis
2537
			    	  placeholder: "ui-state-highlight",
2538
			    	  start: function( event, ui ) {
2539
			    	      //console.log('X:' + e.screenX, 'Y:' + e.screenY);
2540
			    		  //console.log(ui.item);
2541
			    		  var colCount = ui.item.children().length;
2542
   						  ui.placeholder.html('<td colspan="'+colCount+'">&nbsp;</td>');
2543
   		
2544
			    		  var TcurrentChilds = getSubtotalTitleChilds(ui.item);
2545
			    		  ui.item.data('childrens',TcurrentChilds); // store data
2546
				    		
2547
			    		  for (var key in TcurrentChilds) {
2548
			    			  $('#'+ TcurrentChilds[key]).addClass('noblockdrop');//'#row-'+ 
2549
			    			  $('#'+ TcurrentChilds[key]).fadeOut();//'#row-'+ 
2550
			    		  }
2551
2552
			    		  $(this).sortable("refresh");	// "refresh" of source sortable is required to make "disable" work!
2553
			    	      
2554
			    	    },
2555
				    	stop: function (event, ui) {
2556
							// call we element is droped
2557
				    	  	$('.noblockdrop').removeClass('noblockdrop');
2558
2559
				    	  	var TcurrentChilds = ui.item.data('childrens'); // reload child list from data and not attr to prevent load error
2560
2561
							for (var i =TcurrentChilds.length ; i >= 0; i--) {
2562
				    			  $('#'+ TcurrentChilds[i]).insertAfter(ui.item); //'#row-'+ 
2563
				    			  $('#'+ TcurrentChilds[i]).fadeIn(); //'#row-'+ 
2564
							}
2565
							console.log('onstop');
2566
							console.log(cleanSerialize($(this).sortable('serialize')));
2567
							
2568
							$.ajax({
2569
			    	            data: {
2570
									objet_id: <?php print $object->id; ?>,
2571
							    	roworder: cleanSerialize($(this).sortable('serialize')),
2572
									table_element_line: "<?php echo $table_element_line; ?>",
2573
									fk_element: "<?php echo $fk_element; ?>",
2574
									element_id: "<?php echo $id; ?>",
2575
									filepath: "<?php echo urlencode($filepath); ?>"
2576
								},
2577
			    	            type: 'POST',
2578
			    	            url: '<?php echo DOL_URL_ROOT; ?>/core/ajax/row.php',
0 ignored issues
show
Bug introduced by
The constant DOL_URL_ROOT was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
2579
			    	            success: function(data) {
2580
			    	                console.log(data);
2581
			    	            },
2582
			    	        });
2583
			    	        
2584
			    	  },
2585
			    	  update: function (event, ui) {
2586
				    	  
2587
			    	        // POST to server using $.post or $.ajax
2588
				    	  	$('.noblockdrop').removeClass('noblockdrop');
2589
							//console.log('onupdate');
2590
			    	        //console.log(cleanSerialize($(this).sortable('serialize')));
2591
			    	    }
2592
			    });
2593
 				<?php } ?>
2594
2595
				function getSubtotalTitleChilds(item)
2596
				{
2597
		    		var TcurrentChilds = []; // = JSON.parse(item.attr('data-childrens'));
2598
		    		var level = item.data('level');
2599
2600
		    		var indexOfFirstSubtotal = -1;
2601
		    		var indexOfFirstTitle = -1;
2602
		    		
2603
		    		item.nextAll('[id^="row-"]').each(function(index){
2604
2605
						var dataLevel = $(this).attr('data-level');
2606
						var dataIsSubtotal = $(this).attr('data-issubtotal');
2607
						
2608
						if(dataIsSubtotal != 'undefined' && dataLevel != 'undefined' )
2609
						{
2610
2611
							if(dataLevel <=  level && indexOfFirstSubtotal < 0 && dataIsSubtotal == 'subtotal' )
2612
							{
2613
								indexOfFirstSubtotal = index;
2614
								if(indexOfFirstTitle < 0)
2615
								{
2616
									TcurrentChilds.push($(this).attr('id'));
2617
								}
2618
							}
2619
							
2620
							if(dataLevel <=  level && indexOfFirstSubtotal < 0 && indexOfFirstTitle < 0 && dataIsSubtotal == 'title' )
2621
							{
2622
								indexOfFirstTitle = index;
2623
							}
2624
						}
2625
2626
						if(indexOfFirstTitle < 0 && indexOfFirstSubtotal < 0)
2627
						{
2628
							TcurrentChilds.push($(this).attr('id'));
2629
2630
							// Add extraffield support for dolibarr > 7
2631
							var thisId = $(this).attr('data-id');
2632
							var thisElement = $(this).attr('data-element');
2633
							if(thisId != undefined && thisElement != undefined )
2634
							{
2635
								$('[data-targetid="' + thisId + '"][data-element="extrafield"][data-targetelement="'+ thisElement +'"]').each(function(index){
2636
									TcurrentChilds.push($(this).attr('id'));
2637
								});
2638
							}
2639
							
2640
						}
2641
2642
		    		});
2643
		    		return TcurrentChilds;
2644
				}
2645
				
2646
			});
2647
			</script>
2648
			<style type="text/css" >
2649
         
2650
            tr.ui-state-highlight td{
2651
            	border: 1px solid #dad55e;
2652
            	background: #fffa90;
2653
            	color: #777620;
2654
            }
2655
            </style>
2656
		<?php
2657
		
2658
		} 
2659
	
2660
		
2661
		
2662
	}
2663
	
2664
}
2665