Passed
Push — master ( 95e549...842999 )
by
unknown
02:18
created

ActionsSubtotal::createDictionaryFieldlist()   B

Complexity

Conditions 9
Paths 13

Size

Total Lines 55
Code Lines 46

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 1 Features 0
Metric Value
cc 9
eloc 46
c 2
b 1
f 0
nc 13
nop 4
dl 0
loc 55
rs 7.2446

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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
	
16
	function createDictionaryFieldlist($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

16
	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...
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 $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

16
	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 $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

16
	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...
17
	{
18
		global $conf;
19
20
		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...
21
		{
22
			// Merci Dolibarr de remplacer les textarea par un input text
23
			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...
24
			{
25
				$value = '';
26
				$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

26
				$sql = 'SELECT content FROM '.MAIN_DB_PREFIX.'c_subtotal_free_text WHERE rowid = './** @scrutinizer ignore-call */ GETPOST('rowid');
Loading history...
27
				$resql = $this->db->query($sql);
28
				if ($resql && ($obj = $this->db->fetch_object($resql))) $value = $obj->content;
29
			}
30
			
31
			?>
32
			<script type="text/javascript">
33
				$(function() {
34
					
35
					<?php if ((float) DOL_VERSION >= 6.0) { ?>
36
							if ($('input[name=content]').length > 0)
37
							{
38
								$('input[name=content]').each(function(i,item) {
39
									var value = '';
40
									// Le dernier item correspond à l'édition
41
									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...
42
									$(item).replaceWith($('<textarea name="content">'+value+'</textarea>'));
43
								});
44
								
45
								<?php if (!empty($conf->fckeditor->enabled) && !empty($conf->global->FCKEDITOR_ENABLE_DETAILS)) { ?>
46
								$('textarea[name=content]').each(function(i, item) {
47
									CKEDITOR.replace(item, {
48
										toolbar: 'dolibarr_notes'
49
										,customConfig : ckeditorConfig
50
									});
51
								});
52
								<?php } ?>
53
							}
54
					<?php } else { ?>
55
						// <= 5.0
56
						// Le CKEditor est forcé sur la page dictionnaire, pas possible de mettre une valeur custom
57
						// 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
58
						<?php if (!empty($conf->fckeditor->enabled)) { ?>
59
							CKEDITOR.on('instanceReady', function(ev) {
60
								var editor = ev.editor;
61
62
								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
63
								{
64
									editor.element.show();
65
									editor.destroy();
66
								}
67
							});
68
						<?php } ?>
69
					<?php } ?>
70
				});
71
			</script>
72
			<?php
73
		}
74
	}
75
	
76
	/** Overloading the doActions function : replacing the parent's function with the one below
77
	 * @param      $parameters  array           meta datas of the hook (context, etc...)
78
	 * @param      $object      CommonObject    the object you want to process (an invoice if you are in invoice module, a propale in propale's module, etc...)
79
	 * @param      $action      string          current action (if set). Generally create or edit or null
80
	 * @param      $hookmanager HookManager     current hook manager
81
	 * @return     void
82
	 */
83
    
84
    var $module_number = 104777;
85
    
86
    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

86
    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...
87
    {
88
      	global $langs,$db,$user, $conf;
89
		
90
		$langs->load('subtotal@subtotal');
91
		
92
		$contexts = explode(':',$parameters['context']);
93
		
94
		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)) {
95
			
96
			$createRight = $user->rights->{$object->element}->creer;
97
			if($object->element == 'facturerec' )
98
			{
99
				$object->statut = 0; // hack for facture rec
100
				$createRight = $user->rights->facture->creer;
101
			} elseif($object->element == 'order_supplier' )
102
			{
103
			    $createRight = $user->rights->fournisseur->commande->creer;
104
			} elseif($object->element == 'invoice_supplier' )
105
			{
106
			    $createRight = $user->rights->fournisseur->facture->creer;
107
			}
108
			
109
			if ($object->statut == 0  && $createRight) {
110
			
111
112
				if($object->element=='facture')$idvar = 'facid';
113
				else $idvar='id';
114
				
115
				if(in_array($action, array('add_title_line', 'add_total_line', 'add_subtitle_line', 'add_subtotal_line', 'add_free_text')) )
116
				{
117
					$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

117
					$level = /** @scrutinizer ignore-call */ GETPOST('level', 'int'); //New avec SUBTOTAL_USE_NEW_FORMAT
Loading history...
118
					
119
					if($action=='add_title_line') {
120
						$title = GETPOST('title');
121
						if(empty($title)) $title = $langs->trans('title');
122
						$qty = $level<1 ? 1 : $level ;
123
					}
124
					else if($action=='add_free_text') {
125
						$title = GETPOST('title');
126
127
						if (empty($title)) {
128
							$free_text = GETPOST('free_text', 'int');
129
							if (!empty($free_text)) {
130
								$TFreeText = getTFreeText();
131
								if (!empty($TFreeText[$free_text])) {
132
									$title = $TFreeText[$free_text]->content;
133
								}
134
							}
135
						}
136
						if(empty($title)) $title = $langs->trans('subtotalAddLineDescription');
137
						$qty = 50;
138
					}
139
					else if($action=='add_subtitle_line') {
140
						$title = GETPOST('title');
141
						if(empty($title)) $title = $langs->trans('subtitle');
142
						$qty = 2;
143
					}
144
					else if($action=='add_subtotal_line') {
145
						$title = $langs->trans('SubSubTotal');
146
						$qty = 98;
147
					}
148
					else {
149
						$title = GETPOST('title') ? GETPOST('title') : $langs->trans('SubTotal');
150
						$qty = $level ? 100-$level : 99;
151
					}
152
					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

152
					/** @scrutinizer ignore-call */ 
153
     dol_include_once('/subtotal/class/subtotal.class.php');
Loading history...
153
					
154
					if (!empty($conf->global->SUBTOTAL_AUTO_ADD_SUBTOTAL_ON_ADDING_NEW_TITLE) && $qty < 10) TSubtotal::addSubtotalMissing($object, $qty);
155
					
156
	    			TSubtotal::addSubTotalLine($object, $title, $qty);
157
				}
158
				else if($action==='ask_deleteallline') {
159
						$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...
160
						
161
						$lineid = GETPOST('lineid','integer');
162
						$TIdForGroup = $this->getArrayOfLineForAGroup($object, $lineid);
163
					
164
						$nbLines = count($TIdForGroup);
165
					
166
						$formconfirm=$form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id.'&lineid='.$lineid, $langs->trans('deleteWithAllLines'), $langs->trans('ConfirmDeleteAllThisLines',$nbLines), 'confirm_delete_all_lines','',0,1);
167
						print $formconfirm;
168
				}
169
170
				if (!empty($conf->global->SUBTOTAL_ALLOW_ADD_LINE_UNDER_TITLE))
171
				{
172
					$this->showSelectTitleToAdd($object);
173
				}
174
175
				
176
				if($action!='editline') {
177
					// New format is for 3.8
178
					$this->printNewFormat($object, $conf, $langs, $idvar);
179
				}
180
			}
181
		}
182
		elseif ((!empty($parameters['currentcontext']) && $parameters['currentcontext'] == 'orderstoinvoice') || in_array('orderstoinvoice',$contexts))
183
		{
184
			?>
185
			<script type="text/javascript">
186
				$(function() {
187
					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>")
188
					$("textarea[name=note]").closest('tr').after(tr);
189
				});
190
			</script>
191
			<?php
192
			
193
		}
194
195
		return 0;
196
	}
197
     
198
	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...
199
	{
200
		if (empty($conf->global->SUBTOTAL_ALLOW_ADD_BLOCK)) return false;
201
		if (!empty($object->situation_cycle_ref) && $object->situation_counter > 1) return false; // Si facture de situation
202
		?>
203
		 	<script type="text/javascript">
204
				$(document).ready(function() {
205
					$('div.fiche div.tabsAction').append('<br />');
206
					
207
					$('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>');
208
					$('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>');
209
					$('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>');
210
211
212
					function updateAllMessageForms(){
213
				         for (instance in CKEDITOR.instances) {
214
				             CKEDITOR.instances[instance].updateElement();
215
				         }
216
				    }
217
					
218
					function promptSubTotal(action, titleDialog, label, url_to, url_ajax, params, use_textarea, show_free_text, show_under_title) {
219
					     $( "#dialog-prompt-subtotal" ).remove();
220
						 
221
						 var dialog_html = '<div id="dialog-prompt-subtotal" '+(action == 'addSubtotal' ? 'class="center"' : '')+' >';
222
						 
223
						 if (typeof show_under_title != 'undefined' && show_under_title)
224
						 {
225
							 var selectUnderTitle = <?php echo json_encode(getHtmlSelectTitle($object, true)); ?>;
226
							 dialog_html += selectUnderTitle + '<br /><br />';
227
						 }
228
						
229
						if (action == 'addTitle' || action == 'addFreeTxt')
230
						{
231
							if (typeof show_free_text != 'undefined' && show_free_text)
232
							{
233
							   var selectFreeText = <?php echo json_encode(getHtmlSelectFreeText()); ?>;
234
							   dialog_html += selectFreeText + ' <?php echo $langs->transnoentities('subtotalFreeTextOrDesc'); ?><br />';
235
							}
236
						 
237
							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...
238
							else dialog_html += '<input id="sub-total-title" size="30" value="" placeholder="'+label+'" />';
239
						}
240
						 
241
						if (action == 'addTitle' || action == 'addSubtotal')
242
						{
243
							if (action == 'addSubtotal') dialog_html += '<input id="sub-total-title" size="30" value="" placeholder="'+label+'" />';
244
							
245
							dialog_html += "&nbsp;<select name='subtotal_line_level'>";
246
							for (var i=1;i<10;i++)
247
							{
248
								dialog_html += "<option value="+i+"><?php echo $langs->trans('Level'); ?> "+i+"</option>";
249
							}
250
							dialog_html += "</select>";
251
						}
252
						 
253
						 dialog_html += '</div>';
254
					    
255
						$('body').append(dialog_html);
256
257
						<?php 
258
						$editorTool = empty($conf->global->FCKEDITOR_EDITORNAME)?'ckeditor':$conf->global->FCKEDITOR_EDITORNAME;
259
						$editorConf = empty($conf->global->FCKEDITOR_ENABLE_DETAILS)?false:$conf->global->FCKEDITOR_ENABLE_DETAILS;
260
						if($editorConf && in_array($editorTool,array('textarea','ckeditor'))){ 
261
						?>
262
						if (action == 'addTitle' || action == 'addFreeTxt')
263
						{
264
							if (typeof use_textarea != 'undefined' && use_textarea && typeof CKEDITOR == "object" && typeof CKEDITOR.instances != "undefined" )
265
							{
266
								 CKEDITOR.replace( 'sub-total-title', {toolbar: 'dolibarr_details', toolbarStartupExpanded: false} );
267
							}
268
						}
269
						<?php } ?>
270
						
271
					     $( "#dialog-prompt-subtotal" ).dialog({
272
	                        resizable: false,
273
							height: 'auto',
274
							width: 'auto',
275
	                        modal: true,
276
	                        title: titleDialog,
277
	                        buttons: {
278
	                            "Ok": function() {
279
	                            	if (typeof use_textarea != 'undefined' && use_textarea && typeof CKEDITOR == "object" && typeof CKEDITOR.instances != "undefined" ){ updateAllMessageForms(); }
280
									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());
281
									params.under_title = $(this).find('select[name=under_title]').val();
282
									params.free_text = $(this).find('select[name=free_text]').val();
283
									params.level = $(this).find('select[name=subtotal_line_level]').val();
284
									
285
									$.ajax({
286
										url: url_ajax
287
										,type: 'POST'
288
										,data: params
289
									}).done(function() {
290
										document.location.href=url_to;
291
									});
292
									
293
                                    $( this ).dialog( "close" );
294
	                            },
295
	                            "<?php echo $langs->trans('Cancel') ?>": function() {
296
	                                $( this ).dialog( "close" );
297
	                            }
298
	                        }
299
	                     });
300
					}
301
					
302
					$('a[rel=add_title_line]').click(function() 
303
					{
304
						promptSubTotal('addTitle'
305
							 , "<?php echo $langs->trans('YourTitleLabel') ?>"
306
							 , "<?php echo $langs->trans('title'); ?>"
307
							 , '?<?php echo $idvar ?>=<?php echo $object->id; ?>'
308
							 , '<?php echo $_SERVER['PHP_SELF']; ?>'
309
							 , {<?php echo $idvar; ?>: <?php echo (int) $object->id; ?>, action:'add_title_line'}
310
						);
311
					});
312
					
313
					$('a[rel=add_total_line]').click(function()
314
					{
315
						promptSubTotal('addSubtotal'
316
							, '<?php echo $langs->trans('YourSubtotalLabel') ?>'
317
							, '<?php echo $langs->trans('subtotal'); ?>'
318
							, '?<?php echo $idvar ?>=<?php echo $object->id; ?>'
319
							, '<?php echo $_SERVER['PHP_SELF']; ?>'
320
							, {<?php echo $idvar; ?>: <?php echo (int) $object->id; ?>, action:'add_total_line'}
321
							/*,false,false, <?php echo !empty($conf->global->SUBTOTAL_ALLOW_ADD_LINE_UNDER_TITLE) ? 'true' : 'false'; ?>*/
322
						);
323
					});
324
					
325
					$('a[rel=add_free_text]').click(function() 
326
					{
327
						promptSubTotal('addFreeTxt'
328
							, "<?php echo $langs->transnoentitiesnoconv('YourTextLabel') ?>"
329
							, "<?php echo $langs->trans('subtotalAddLineDescription'); ?>"
330
							, '?<?php echo $idvar ?>=<?php echo $object->id; ?>'
331
							, '<?php echo $_SERVER['PHP_SELF']; ?>'
332
							, {<?php echo $idvar; ?>: <?php echo (int) $object->id; ?>, action:'add_free_text'}
333
							, true
334
							, true
335
							, <?php echo !empty($conf->global->SUBTOTAL_ALLOW_ADD_LINE_UNDER_TITLE) ? 'true' : 'false'; ?>
336
						);
337
					});
338
				});
339
		 	</script>
340
		 <?php
341
	}	 
342
	 
343
	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...
344
	{
345
		global $langs;
346
		
347
		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

347
		/** @scrutinizer ignore-call */ 
348
  dol_include_once('/subtotal/class/subtotal.class.php');
Loading history...
348
		dol_include_once('/subtotal/lib/subtotal.lib.php');
349
		$TTitle = TSubtotal::getAllTitleFromDocument($object);
0 ignored issues
show
Unused Code introduced by
The assignment to $TTitle is dead and can be removed.
Loading history...
350
		
351
		?>
352
		<script type="text/javascript">
353
			$(function() {
354
				var add_button = $("#addline");
355
				
356
				if (add_button.length > 0)
357
				{
358
					add_button.closest('tr').prev('tr.liste_titre').children('td:last').addClass('center').text("<?php echo $langs->trans('subtotal_title_to_add_under_title'); ?>");
359
					var select_title = $(<?php echo json_encode(getHtmlSelectTitle($object)); ?>);
360
					
361
					add_button.before(select_title);
362
				}
363
			});
364
		</script>
365
		<?php
366
	}
367
	
368
	
369
	function formBuilddocOptions($parameters) {
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...
370
	/* Réponse besoin client */		
371
			
372
		global $conf, $langs, $bc;
373
			
374
		$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

374
		$action = /** @scrutinizer ignore-call */ GETPOST('action');	
Loading history...
375
		$TContext = explode(':',$parameters['context']);
376
		if (
377
				in_array('invoicecard',$TContext)
378
		        || in_array('invoicesuppliercard',$TContext)
379
				|| in_array('propalcard',$TContext)
380
				|| in_array('ordercard',$TContext)
381
		        || in_array('ordersuppliercard',$TContext)
382
				|| in_array('invoicereccard',$TContext)
383
			)
384
	        {	
385
				$hideInnerLines	= isset( $_SESSION['subtotal_hideInnerLines_'.$parameters['modulepart']] ) ?  $_SESSION['subtotal_hideInnerLines_'.$parameters['modulepart']] : 0;
386
				$hidedetails	= isset( $_SESSION['subtotal_hidedetails_'.$parameters['modulepart']] ) ?  $_SESSION['subtotal_hidedetails_'.$parameters['modulepart']] : 0;
387
				$hidepricesDefaultConf = !empty($conf->global->SUBTOTAL_HIDE_PRICE_DEFAULT_CHECKED)?$conf->global->SUBTOTAL_HIDE_PRICE_DEFAULT_CHECKED:0;
388
				$hideprices= isset( $_SESSION['subtotal_hideprices_'.$parameters['modulepart']] ) ?  $_SESSION['subtotal_hideprices_'.$parameters['modulepart']] : $hidepricesDefaultConf;
389
				
390
				$var=false;
391
		     	$out.= '<tr '.$bc[$var].'>
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $out seems to be never defined.
Loading history...
392
		     			<td colspan="4" align="right">
393
		     				<label for="hideInnerLines">'.$langs->trans('HideInnerLines').'</label>
394
		     				<input type="checkbox" onclick="if($(this).is(\':checked\')) { $(\'#hidedetails\').prop(\'checked\', \'checked\')  }" id="hideInnerLines" name="hideInnerLines" value="1" '.(( $hideInnerLines ) ? 'checked="checked"' : '' ).' />
395
		     			</td>
396
		     			</tr>';
397
				
398
		     	$var=!$var;
0 ignored issues
show
introduced by
The condition $var is always false.
Loading history...
399
		     	$out.= '<tr '.$bc[$var].'>
400
		     			<td colspan="4" align="right">
401
		     				<label for="hidedetails">'.$langs->trans('SubTotalhidedetails').'</label>
402
		     				<input type="checkbox" id="hidedetails" name="hidedetails" value="1" '.(( $hidedetails ) ? 'checked="checked"' : '' ).' />
403
		     			</td>
404
		     			</tr>';
405
		     	
406
		     	$var=!$var;
0 ignored issues
show
introduced by
The condition $var is always true.
Loading history...
407
		     	$out.= '<tr '.$bc[$var].'>
408
		     			<td colspan="4" align="right">
409
		     				<label for="hidedetails">'.$langs->trans('SubTotalhidePrice').'</label>
410
		     				<input type="checkbox" id="hideprices" name="hideprices" value="1" '.(( $hideprices ) ? 'checked="checked"' : '' ).' />
411
		     			</td>
412
		     			</tr>';
413
		     	
414
		     	
415
				 
416
				if ( 
417
					(in_array('propalcard',$TContext) && !empty($conf->global->SUBTOTAL_PROPAL_ADD_RECAP))
418
					|| (in_array('ordercard',$TContext) && !empty($conf->global->SUBTOTAL_COMMANDE_ADD_RECAP))
419
				    || (in_array('ordersuppliercard',$TContext) && !empty($conf->global->SUBTOTAL_COMMANDE_ADD_RECAP))
420
					|| (in_array('invoicecard',$TContext) && !empty($conf->global->SUBTOTAL_INVOICE_ADD_RECAP))
421
				    || (in_array('invoicesuppliercard',$TContext) && !empty($conf->global->SUBTOTAL_INVOICE_ADD_RECAP))
422
					|| (in_array('invoicereccard',$TContext)  && !empty($conf->global->SUBTOTAL_INVOICE_ADD_RECAP ))
423
				)
424
				{
425
					$var=!$var;
0 ignored issues
show
introduced by
The condition $var is always false.
Loading history...
426
					$out.= '
427
						<tr '.$bc[$var].'>
428
							<td colspan="4" align="right">
429
								<label for="subtotal_add_recap">'.$langs->trans('subtotal_add_recap').'</label>
430
								<input type="checkbox" id="subtotal_add_recap" name="subtotal_add_recap" value="1" '.( GETPOST('subtotal_add_recap') ? 'checked="checked"' : '' ).' />
431
							</td>
432
						</tr>';
433
				}
434
				
435
				
436
				$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...
437
			}
438
			
439
		
440
        return 1;
441
	} 
442
	 
443
    function formEditProductOptions($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 $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

443
    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 $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

443
    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...
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

443
    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...
444
    {
445
		
446
    	if (in_array('invoicecard',explode(':',$parameters['context'])))
447
        {
448
        	
449
        }
450
		
451
        return 0;
452
    }
453
	
454
	function ODTSubstitutionLine(&$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

454
	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

454
	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...
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...
455
		global $conf;
456
		
457
		if($action === 'builddoc') {
458
			
459
			$line = &$parameters['line'];
460
			$object = &$parameters['object'];
461
			$substitutionarray = &$parameters['substitutionarray'];
462
			
463
			if($line->product_type == 9 && $line->special_code == $this->module_number) {
464
				$substitutionarray['line_modsubtotal'] = 1;	
465
				
466
				$substitutionarray['line_price_ht']
467
					 = $substitutionarray['line_price_vat'] 
468
					 = $substitutionarray['line_price_ttc']
469
					 = $substitutionarray['line_vatrate']
470
					 = $substitutionarray['line_qty']
471
					 = $substitutionarray['line_up'] 
472
					 = '';
473
				
474
				if($line->qty>90) {
475
					$substitutionarray['line_modsubtotal_total'] = true;
476
					
477
					list($total, $total_tva, $total_ttc, $TTotal_tva) = $this->getTotalLineFromObject($object, $line, '', 1);
478
					
479
					$substitutionarray['line_price_ht'] = $total;
480
					$substitutionarray['line_price_vat'] = $total_tva;
481
					$substitutionarray['line_price_ttc'] = $total_ttc;
482
				} else {
483
					$substitutionarray['line_modsubtotal_title'] = true;
484
				}
485
				
486
				
487
			}	
488
			else{
489
				$substitutionarray['line_not_modsubtotal'] = true;
490
				$substitutionarray['line_modsubtotal'] = 0;
491
			}
492
			
493
		}
494
		
495
	}
496
	
497
	function createFrom($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

497
	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...
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

497
	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...
498
	
499
		if (
500
				in_array('invoicecard',explode(':',$parameters['context']))
501
		        || in_array('invoicesuppliercard',explode(':',$parameters['context']))
502
				|| in_array('propalcard',explode(':',$parameters['context']))
503
		        || in_array('supplier_proposalcard',explode(':',$parameters['context']))
504
				|| in_array('ordercard',explode(':',$parameters['context']))
505
		        || in_array('ordersuppliercard',explode(':',$parameters['context']))
506
				|| in_array('invoicereccard',explode(':',$parameters['context']))
507
		) {
508
			
509
			global $db;
510
			
511
			$objFrom = $parameters['objFrom'];
512
			
513
			foreach($objFrom->lines as $k=> &$lineOld) {
514
				
515
					if($lineOld->product_type == 9 && $lineOld->info_bits > 0 ) {
516
							
517
							$line = & $object->lines[$k];
518
				
519
							$idLine = (int) ($line->id ? $line->id : $line->rowid); 
520
				
521
							$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...
522
							SET info_bits=".(int)$lineOld->info_bits."
523
							WHERE rowid = ".$idLine."
524
							");
525
						
526
					}
527
				
528
				
529
			}
530
			
531
			
532
		}
533
		
534
	}
535
	
536
	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

536
	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...
537
	{
538
		global $db, $conf, $langs,$user;
539
		
540
		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

540
		/** @scrutinizer ignore-call */ 
541
  dol_include_once('/subtotal/class/subtotal.class.php');
Loading history...
541
		dol_include_once('/subtotal/lib/subtotal.lib.php');
542
		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...
543
		
544
		$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

544
		$showBlockExtrafields = /** @scrutinizer ignore-call */ GETPOST('showBlockExtrafields');
Loading history...
545
		
546
		if($object->element=='facture') $idvar = 'facid';
547
		else $idvar = 'id';
548
			
549
		if ($action == 'updateligne' || $action == 'updateline')
550
		{
551
			$found = false;
552
			$lineid = GETPOST('lineid', 'int');
553
			foreach ($object->lines as &$line)
554
			{
555
				
556
				if ($line->id == $lineid && TSubtotal::isModSubtotalLine($line))
557
				{
558
					$found = true;
559
					if(TSubtotal::isTitle($line) && !empty($showBlockExtrafields)) {
560
						$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...
561
						$extralabelsline = $extrafieldsline->fetch_name_optionals_label($object->table_element_line);
562
						$extrafieldsline->setOptionalsFromPost($extralabelsline, $line);
563
					}
564
					_updateSubtotalLine($object, $line);
565
					_updateSubtotalBloc($object, $line);
566
					
567
					TSubtotal::generateDoc($object);
568
					break;
569
				}
570
			}
571
			
572
			if ($found)
573
			{
574
				header('Location: '.$_SERVER['PHP_SELF'].'?'.$idvar.'='.$object->id);
575
				exit; // Surtout ne pas laisser Dolibarr faire du traitement sur le updateligne sinon ça plante les données de la ligne
576
			}
577
		}
578
		else if($action === 'builddoc') {
579
			
580
			if (
581
				in_array('invoicecard',explode(':',$parameters['context']))
582
				|| in_array('propalcard',explode(':',$parameters['context']))
583
				|| in_array('ordercard',explode(':',$parameters['context']))
584
			    || in_array('ordersuppliercard',explode(':',$parameters['context']))
585
			    || in_array('invoicesuppliercard',explode(':',$parameters['context']))
586
			    || in_array('supplier_proposalcard',explode(':',$parameters['context']))
587
			)
588
	        {								
589
				if(in_array('invoicecard',explode(':',$parameters['context']))) {
590
					$sessname = 'subtotal_hideInnerLines_facture';	
591
					$sessname2 = 'subtotal_hidedetails_facture';
592
					$sessname3 = 'subtotal_hideprices_facture';
593
				}
594
				elseif(in_array('invoicesuppliercard',explode(':',$parameters['context']))) {
595
				    $sessname = 'subtotal_hideInnerLines_facture_fournisseur';
596
				    $sessname2 = 'subtotal_hidedetails_facture_fournisseur';
597
				    $sessname3 = 'subtotal_hideprices_facture_fournisseur';
598
				}
599
				elseif(in_array('propalcard',explode(':',$parameters['context']))) {
600
					$sessname = 'subtotal_hideInnerLines_propal';
601
					$sessname2 = 'subtotal_hidedetails_propal';	
602
					$sessname3 = 'subtotal_hideprices_propal';
603
				}
604
				elseif(in_array('supplier_proposalcard',explode(':',$parameters['context']))) {
605
				    $sessname = 'subtotal_hideInnerLines_supplier_proposal';
606
				    $sessname2 = 'subtotal_hidedetails_supplier_proposal';
607
				    $sessname3 = 'subtotal_hideprices_supplier_proposal';
608
				}
609
				elseif(in_array('ordercard',explode(':',$parameters['context']))) {
610
					$sessname = 'subtotal_hideInnerLines_commande';
611
					$sessname2 = 'subtotal_hidedetails_commande';	
612
					$sessname3 = 'subtotal_hideprices_commande';
613
				}
614
				elseif(in_array('ordersuppliercard',explode(':',$parameters['context']))) {
615
				    $sessname = 'subtotal_hideInnerLines_commande_fournisseur';
616
				    $sessname2 = 'subtotal_hidedetails_commande_fournisseur';
617
				    $sessname3 = 'subtotal_hideprices_commande_fournisseur';
618
				}
619
				else {
620
					$sessname = 'subtotal_hideInnerLines_unknown';
621
					$sessname2 = 'subtotal_hidedetails_unknown';
622
					$sessname3 = 'subtotal_hideprices_unknown';
623
				}
624
					
625
				global $hideprices;
626
				
627
				$hideInnerLines = (int)GETPOST('hideInnerLines');
628
				$_SESSION[$sessname] = $hideInnerLines;		
629
				
630
				$hidedetails= (int)GETPOST('hidedetails');
631
				$_SESSION[$sessname2] = $hidedetails;
632
				
633
				$hideprices= (int)GETPOST('hideprices');
634
				$_SESSION[$sessname3] = $hideprices;
635
				
636
				foreach($object->lines as &$line) {
637
					if ($line->product_type == 9 && $line->special_code == $this->module_number) {
638
					    
639
                        if($line->qty>=90) {
640
                            $line->modsubtotal_total = 1;
641
                        }
642
                        else{
643
                            $line->modsubtotal_title = 1;
644
                        }
645
                        
646
						$line->total_ht = $this->getTotalLineFromObject($object, $line, '');
647
					}
648
	        	}
649
	        }
650
			
651
		}
652
		else if($action === 'confirm_delete_all_lines' && GETPOST('confirm')=='yes') {
653
			
654
			$Tab = $this->getArrayOfLineForAGroup($object, GETPOST('lineid'));
655
			
656
			foreach($Tab as $idLine) {
657
				/**
658
				 * @var $object Facture
659
				 */
660
				if($object->element=='facture') $object->deleteline($idLine);
661
				/**
662
				 * @var $object Facture fournisseur
663
				 */
664
				else if($object->element=='invoice_supplier')
665
				{
666
				    $object->deleteline($idLine);
667
				}
668
				/**
669
				 * @var $object Propal
670
				 */
671
				else if($object->element=='propal') $object->deleteline($idLine);
672
				/**
673
				 * @var $object Propal Fournisseur
674
				 */
675
				else if($object->element=='supplier_proposal') $object->deleteline($idLine);
676
				/**
677
				 * @var $object Commande
678
				 */
679
				else if($object->element=='commande') 
680
				{
681
					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...
682
					else $object->deleteline($idLine);
683
				}
684
				/**
685
				 * @var $object Commande fournisseur
686
				 */
687
				else if($object->element=='order_supplier')
688
				{
689
				    $object->deleteline($idLine);
690
				}
691
				/**
692
				 * @var $object Facturerec
693
				 */
694
				else if($object->element=='facturerec') $object->deleteline($idLine);
695
			}
696
			
697
			header('location:?id='.$object->id);
698
			exit;
699
			
700
		}
701
		else if ($action == 'duplicate')
702
		{
703
			$lineid = GETPOST('lineid', 'int');
704
			$nbDuplicate = TSubtotal::duplicateLines($object, $lineid, true);
705
			
706
			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

706
			if ($nbDuplicate > 0) /** @scrutinizer ignore-call */ setEventMessage($langs->trans('subtotal_duplicate_success', $nbDuplicate));
Loading history...
707
			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...
708
			else setEventMessage($langs->trans('subtotal_duplicate_error'), 'errors');
709
			
710
			header('Location: ?id='.$object->id);
711
			exit;
712
		}
713
		
714
		return 0;
715
	}
716
	
717
	function formAddObjectLine ($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

717
	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...
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

717
	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 $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

717
	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...
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

717
	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...
718
		return 0;
719
	}
720
721
	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...
722
		$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...
723
		$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...
724
		
725
		$qty_line = 0;
726
		
727
		$found = false;
728
729
		$Tab= array();
730
		
731
		foreach($object->lines as $l) {
732
		
733
		    $lid = (!empty($l->rowid) ? $l->rowid : $l->id);
734
			if($lid == $lineid) {
735
736
				$found = true;
737
				$qty_line = $l->qty;
738
			}
739
			
740
			if($found) {
741
				
742
			    $Tab[] = (!empty($l->rowid) ? $l->rowid : $l->id);
743
				
744
				if($l->special_code==$this->module_number && (($l->qty==99 && $qty_line==1) || ($l->qty==98 && $qty_line==2))   ) {
745
					break; // end of story
746
				}
747
			}
748
			
749
			
750
		}
751
		
752
		
753
		return $Tab;
754
		
755
	}
756
757
	/**
758
	 *  TODO le calcul est faux dans certains cas,  exemple :
759
	 *	T1
760
	 *		|_ l1 => 50 €
761
	 *		|_ l2 => 40 €
762
	 *		|_ T2
763
	 *			|_l3 => 100 €
764
	 *		|_ ST2
765
	 *		|_ l4 => 23 €
766
	 *	|_ ST1
767
	 * 
768
	 * On obtiens ST2 = 100 ET ST1 = 123 €
769
	 * Alors qu'on devrais avoir ST2 = 100 ET ST1 = 213 €
770
	 * 
771
	 * @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...
772
	 */
773
	function getTotalLineFromObject(&$object, &$line, $use_level=false, $return_all=0) {
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 $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

773
	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...
774
		
775
		$rang = $line->rang;
776
		$qty_line = $line->qty;
777
		
778
		$total = 0;
779
		$total_tva = 0;
780
		$total_ttc = 0;
781
		$TTotal_tva = array();
782
		
783
		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

783
		/** @scrutinizer ignore-call */ 
784
  dol_include_once('/subtotal/class/subtotal.class.php');
Loading history...
784
		foreach($object->lines as $l) {
785
			//print $l->rang.'>='.$rang.' '.$total.'<br/>';
786
			if($l->rang>=$rang) {
787
				//echo 'return!<br>';
788
				if (!$return_all) return $total;
789
				else return array($total, $total_tva, $total_ttc, $TTotal_tva);
790
			}
791
			else if(TSubtotal::isTitle($l, 100 - $qty_line)) 
792
		  	{
793
				$total = 0;
794
				$total_tva = 0;
795
				$total_ttc = 0;
796
				$TTotal_tva = array();
797
			}
798
			elseif(!TSubtotal::isTitle($l) && !TSubtotal::isSubtotal($l)) {
799
				$total += $l->total_ht;
800
				$total_tva += $l->total_tva;
801
				$TTotal_tva[$l->tva_tx] += $l->total_tva;
802
				$total_ttc += $l->total_ttc;
803
			}
804
			
805
		}
806
		if (!$return_all) return $total;
807
		else return array($total, $total_tva, $total_ttc, $TTotal_tva);
808
	}
809
810
	/*
811
	 * Get the sum of situation invoice for last column
812
	 */
813
	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...
814
		
815
		$rang = $line->rang;
816
		$total = 0;
817
		foreach($object->lines as $l) {
818
			if($l->rang>=$rang) {
819
				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

819
				return /** @scrutinizer ignore-call */ price($total);
Loading history...
820
			}
821
                        if (TSubtotal::isSubtotal($l)){
822
                            $total = 0;
823
                        } else  if ($l->situation_percent > 0 ){
824
                           
825
        	
826
		 	$prev_progress = $l->get_prev_progress($object->id);
827
		 	$progress = ($l->situation_percent - $prev_progress) /100;
828
                        $total += ($l->total_ht/($l->situation_percent/100)) * $progress;
829
                        
830
                    }
831
                }
832
                
833
		return price($total);
834
	}
835
836
	/**
837
	 * @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...
838
	 * @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...
839
	 * @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...
840
	 * @param $label        string
841
	 * @param $description  string
842
	 * @param $posx         float               horizontal position
843
	 * @param $posy         float               vertical position
844
	 * @param $w            float               width
845
	 * @param $h            float               height
846
	 */
847
	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

847
	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...
848
		global $conf,$subtotal_last_title_posy;
849
		
850
		$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

850
		$hideInnerLines = (int)/** @scrutinizer ignore-call */ GETPOST('hideInnerLines');
Loading history...
851
		if (!empty($conf->global->SUBTOTAL_ONE_LINE_IF_HIDE_INNERLINES) && $hideInnerLines && !empty($subtotal_last_title_posy))
852
		{
853
			$posy = $subtotal_last_title_posy;
854
			$subtotal_last_title_posy = null;
855
		}
856
		
857
		$hidePriceOnSubtotalLines = (int) GETPOST('hide_price_on_subtotal_lines');
858
		
859
		$set_pagebreak_margin = false;
860
		if(method_exists('Closure','bind')) {
861
			$pageBreakOriginalValue = $pdf->AcceptPageBreak();
862
			$sweetsThief = function ($pdf) {
863
		    		return $pdf->bMargin ;
864
			};
865
			$sweetsThief = Closure::bind($sweetsThief, null, $pdf);
866
	
867
			$bMargin  = $sweetsThief($pdf);
868
	
869
			$pdf->SetAutoPageBreak( false );
870
871
			$set_pagebreak_margin = true;			
872
		}
873
		
874
			
875
		if($line->qty==99)
876
			$pdf->SetFillColor(220,220,220);
877
		elseif ($line->qty==98)
878
			$pdf->SetFillColor(230,230,230);
879
		else
880
			$pdf->SetFillColor(240,240,240);
881
		
882
		$style = 'B';
883
		if (!empty($conf->global->SUBTOTAL_SUBTOTAL_STYLE)) $style = $conf->global->SUBTOTAL_SUBTOTAL_STYLE;
884
		
885
		$pdf->SetFont('', $style, 9);
886
		
887
		$pdf->writeHTMLCell($w, $h, $posx, $posy, $label, 0, 1, false, true, 'R',true);
888
//		var_dump($bMargin);
889
		$pageAfter = $pdf->getPage();
0 ignored issues
show
Unused Code introduced by
The assignment to $pageAfter is dead and can be removed.
Loading history...
890
		
891
		//Print background
892
		$cell_height = $pdf->getStringHeight($w, $label);
893
		$pdf->SetXY($posx, $posy);
894
		$pdf->MultiCell($pdf->page_largeur - $pdf->marge_droite, $cell_height, '', 0, '', 1);
895
		
896
		if (!$hidePriceOnSubtotalLines) {
897
			$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

897
			$total_to_print = /** @scrutinizer ignore-call */ price($line->total);
Loading history...
898
			
899
			if (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS))
900
			{
901
				$TTitle = TSubtotal::getAllTitleFromLine($line);
902
				foreach ($TTitle as &$line_title)
903
				{
904
					if (!empty($line_title->array_options['options_subtotal_nc']))
905
					{
906
						$total_to_print = ''; // TODO Gestion "Compris/Non compris", voir si on affiche une annotation du genre "NC"
907
						break;
908
					}
909
				}
910
			}
911
			
912
			if($total_to_print) {
913
				
914
				if (GETPOST('hideInnerLines'))
915
				{
916
					// 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
917
//					$line->TTotal_tva
918
//					$line->total_ht
919
//					$line->total_tva
920
//					$line->total
921
//					$line->total_ttc
922
				}
923
				else
924
				{
925
					list($total, $total_tva, $total_ttc, $TTotal_tva) = $this->getTotalLineFromObject($object, $line, '', 1);
926
                                        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...
927
                                                $total_to_print = $this->getTotalToPrintSituation($object, $line);
928
                                        } else {
929
                                            	$total_to_print = price($total);
930
                                        }
931
                                            
932
					$line->total_ht = $total;
933
					$line->total = $total;
934
					$line->total_tva = $total_tva;
935
					$line->total_ttc = $total_ttc;
936
				}
937
			}
938
939
			$pdf->SetXY($pdf->postotalht, $posy);
940
			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...
941
			$pdf->MultiCell($pdf->page_largeur-$pdf->marge_droite-$pdf->postotalht, 3, $total_to_print, 0, 'R', 0);
942
		}
943
		else{
944
			if($set_pagebreak_margin) $pdf->SetAutoPageBreak( $pageBreakOriginalValue , $bMargin);
945
		}
946
		
947
		$posy = $posy + $cell_height;
948
		$pdf->SetXY($posx, $posy); 
949
			
950
		
951
	}
952
953
	/**
954
	 * @param $pdf          TCPDF               PDF object
955
	 * @param $object       CommonObject        dolibarr object
956
	 * @param $line         CommonObjectLine    dolibarr object line
957
	 * @param $label        string
958
	 * @param $description  string
959
	 * @param $posx         float               horizontal position
960
	 * @param $posy         float               vertical position
961
	 * @param $w            float               width
962
	 * @param $h            float               height
963
	 */
964
	function pdf_add_title(&$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 $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

964
	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...
965
		
966
		global $db,$conf,$subtotal_last_title_posy;
967
		
968
		$subtotal_last_title_posy = $posy;
969
		$pdf->SetXY ($posx, $posy);
970
		
971
		$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

971
		$hideInnerLines = (int)/** @scrutinizer ignore-call */ GETPOST('hideInnerLines');
Loading history...
972
		
973
		
974
 
975
		$style = ($line->qty==1) ? 'BU' : 'BUI';
976
		if (!empty($conf->global->SUBTOTAL_TITLE_STYLE)) $style = $conf->global->SUBTOTAL_TITLE_STYLE;
977
		
978
		if($hideInnerLines) {
979
			if($line->qty==1)$pdf->SetFont('', $style, 9);
980
			else 
981
			{
982
				if (!empty($conf->global->SUBTOTAL_STYLE_TITRES_SI_LIGNES_CACHEES)) $style = $conf->global->SUBTOTAL_STYLE_TITRES_SI_LIGNES_CACHEES;
983
				$pdf->SetFont('', $style, 9);
984
			}
985
		}
986
		else {
987
988
			if($line->qty==1)$pdf->SetFont('', $style, 9); //TODO if super utile
989
			else $pdf->SetFont('', $style, 9);
990
			
991
		}
992
		
993
		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

993
		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...
994
		else $pdf->writeHTMLCell($w, $h, $posx, $posy, $label, 0, 1, false, true, 'J',true); // et maintenant avec du HTML
995
		
996
		if($description && !$hidedesc) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $hidedesc seems to be never defined.
Loading history...
997
			$posy = $pdf->GetY();
998
			
999
			$pdf->SetFont('', '', 8);
1000
			
1001
			$pdf->writeHTMLCell($w, $h, $posx, $posy, $description, 0, 1, false, true, 'J',true);
1002
1003
		}
1004
		
1005
	}
1006
1007
	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...
1008
	// ultimate PDF hook O_o
1009
		
1010
		return $this->pdf_writelinedesc($parameters,$object,$action);
1011
		
1012
	}
1013
1014
	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...
1015
		
1016
		if(is_array($parameters)) {
1017
			$i = & $parameters['i'];	
1018
		}
1019
		else {
1020
			$i = (int)$parameters;
1021
		}
1022
		
1023
		
1024
		if($object->lines[$i]->special_code == $this->module_number && $object->lines[$i]->product_type == 9) {
1025
			return true;
1026
		}
1027
		
1028
		return false;
1029
		
1030
	}
1031
1032
	function pdf_getlineqty($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

1032
	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...
1033
		global $conf,$hideprices;
1034
		
1035
		if($this->isModSubtotalLine($parameters,$object) ){
1036
			
1037
			$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...
1038
			
1039
			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...
1040
				return '';
1041
			}
1042
			else if((float)DOL_VERSION>=3.8) {
1043
				return 1;
1044
			}
1045
			
1046
		}
1047
		elseif(!empty($hideprices)) {
1048
			$this->resprints = $object->lines[$parameters['i']]->qty;
1049
			return 1;
1050
		}
1051
		elseif (!empty($conf->global->SUBTOTAL_IF_HIDE_PRICES_SHOW_QTY))
1052
		{
1053
			$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

1053
			$hideInnerLines = (int)/** @scrutinizer ignore-call */ GETPOST('hideInnerLines');
Loading history...
1054
			$hidedetails = (int)GETPOST('hidedetails');
1055
			if (empty($hideInnerLines) && !empty($hidedetails))
1056
			{
1057
				$this->resprints = $object->lines[$parameters['i']]->qty;
1058
			}
1059
		}
1060
		
1061
		if(is_array($parameters)) $i = & $parameters['i'];
1062
		else $i = (int)$parameters;
1063
1064
		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)
1065
		
1066
		if(empty($object->lines[$i]->array_options)) $object->lines[$i]->fetch_optionals();
1067
1068
		if (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && (!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i])) )
1069
		{
1070
			if (!in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1071
			{
1072
				$this->resprints = ' ';
1073
				return 1;
1074
			}
1075
		}
1076
		
1077
		return 0;
1078
	}
1079
	
1080
	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...
1081
	    global $conf, $hideprices, $hookmanager;
1082
		
1083
		if($this->isModSubtotalLine($parameters,$object) ){
1084
			
1085
			$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...
1086
			
1087
			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...
1088
				return '';
1089
			}
1090
			else if((float)DOL_VERSION>=3.8) {
1091
				return 1;
1092
			}
1093
			
1094
		}
1095
		elseif (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS))
1096
		{
1097
			if(is_array($parameters)) $i = & $parameters['i'];
1098
			else $i = (int)$parameters;
1099
			
1100
			if (!in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1101
			{
1102
				if (!empty($object->lines[$i]->array_options['options_subtotal_nc'])) 
1103
				{
1104
					$this->resprints = ' ';
1105
					return 1;
1106
				}
1107
1108
				$TTitle = TSubtotal::getAllTitleFromLine($object->lines[$i]);
1109
				foreach ($TTitle as &$line_title)
1110
				{
1111
					if (!empty($line_title->array_options['options_subtotal_nc']))
1112
					{
1113
						$this->resprints = ' ';
1114
						return 1;
1115
					}
1116
				}
1117
			}
1118
		}
1119
		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

1119
		if ((int)/** @scrutinizer ignore-call */ GETPOST('hideInnerLines') && !empty($conf->global->SUBTOTAL_REPLACE_WITH_VAT_IF_HIDE_INNERLINES)){
Loading history...
1120
		    if(is_array($parameters)) $i = & $parameters['i'];
1121
		    else $i = (int)$parameters;
1122
		    $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

1122
		    $this->resprints = /** @scrutinizer ignore-call */ price($object->lines[$i]->total_ht);
Loading history...
1123
		}
1124
		if (!empty($hideprices)
1125
		    || (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && (!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i])) )
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $i does not seem to be defined for all execution paths leading up to this point.
Loading history...
1126
		    )
1127
		{
1128
		    if (!empty($hideprices))
1129
		    {
1130
		        
1131
		        if(is_array($parameters)) $i = & $parameters['i'];
1132
		        else $i = (int)$parameters;
1133
		        
1134
		        // Check if a title exist for this line && if the title have subtotal
1135
		        $lineTitle = TSubtotal::getParentTitleOfLine($object, $i);
1136
		        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

1136
		        if(TSubtotal::getParentTitleOfLine($object, $i) && TSubtotal::titleHasTotalLine($object, /** @scrutinizer ignore-type */ $lineTitle, true))
Loading history...
1137
		        {
1138
		            
1139
		            $this->resprints = ' ';
1140
		            
1141
		            $reshook=$hookmanager->executeHooks('subtotalHidePrices',$parameters,$object,$action);
1142
		            
1143
		            if ($reshook < 0)
1144
		            {
1145
		                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

1145
		                /** @scrutinizer ignore-call */ 
1146
                  setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
Loading history...
1146
		                return -1;
1147
		            }
1148
		            elseif (empty($reshook))
1149
		            {
1150
		                $this->resprints .= $hookmanager->resprints;
1151
		            }
1152
		            else
1153
		            {
1154
		                $this->resprints = $hookmanager->resprints;
1155
		                
1156
		                // override return (use  $this->results['overrideReturn'] or $this->resArray['overrideReturn'] in other module action_xxxx.class.php )
1157
		                if(isset($hookmanager->resArray['overrideReturn']))
1158
		                {
1159
		                    return $hookmanager->resArray['overrideReturn'];
1160
		                }
1161
		            }
1162
		            
1163
		            return 1;
1164
		            
1165
		            
1166
		        }
1167
		    }
1168
		    elseif (!in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1169
		    {
1170
		        $this->resprints = ' ';
1171
		        return 1;
1172
		    }
1173
		}
1174
        
1175
		return 0;
1176
	}
1177
	
1178
	function pdf_getlinetotalwithtax($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

1178
	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...
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...
1179
		global $conf;
1180
		
1181
		if($this->isModSubtotalLine($parameters,$object) ){
1182
			
1183
			$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...
1184
		
1185
			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...
1186
				return '';
1187
			}
1188
			else if((float)DOL_VERSION>=3.8) {
1189
				return 1;
1190
			}
1191
		}
1192
		
1193
		if(is_array($parameters)) $i = & $parameters['i'];
1194
		else $i = (int)$parameters;
1195
		
1196
		if (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && (!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i])) ) 
1197
		{
1198
			if (!in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1199
			{
1200
				$this->resprints = ' ';
1201
				return 1;
1202
			}
1203
		}
1204
		
1205
		return 0;
1206
	}
1207
	
1208
	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

1208
	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...
1209
		global $conf;
1210
		
1211
		if($this->isModSubtotalLine($parameters,$object) ){
1212
			$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...
1213
		
1214
			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...
1215
				return '';
1216
			}
1217
			else if((float)DOL_VERSION>=3.8) {
1218
				return 1;
1219
			}
1220
		}
1221
		
1222
		if(is_array($parameters)) $i = & $parameters['i'];
1223
		else $i = (int)$parameters;
1224
			
1225
		if (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && (!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i])) )
1226
		{
1227
			if (!in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1228
			{
1229
				$this->resprints = ' ';
1230
				return 1;
1231
			}
1232
		}
1233
		
1234
		return 0;
1235
	}
1236
	
1237
	function pdf_getlineupexcltax($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

1237
	function pdf_getlineupexcltax($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...
1238
		global $conf,$hideprices;
1239
1240
		if($this->isModSubtotalLine($parameters,$object) ){
1241
			$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...
1242
		
1243
			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...
1244
				return '';
1245
			}
1246
			else if((float)DOL_VERSION>=3.8) {
1247
				return 1;
1248
			}
1249
		}
1250
		if(is_array($parameters)) $i = & $parameters['i'];
1251
		else $i = (int)$parameters;
1252
		
1253
		if (!empty($hideprices) 
1254
				|| (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && (!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i])) )
1255
		)
1256
		{
1257
			if (!empty($hideprices) || !in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1258
			{
1259
				$this->resprints = ' ';
1260
				return 1;
1261
			}
1262
		}
1263
		
1264
		return 0;
1265
	}
1266
	
1267
	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

1267
	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...
1268
		global $conf,$hideprices;
1269
		
1270
		if($this->isModSubtotalLine($parameters,$object) ){
1271
			$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...
1272
			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...
1273
				return '';
1274
			}
1275
			else if((float)DOL_VERSION>=3.8) {
1276
				return 1;
1277
			}
1278
		}
1279
		
1280
		if(is_array($parameters)) $i = & $parameters['i'];
1281
		else $i = (int)$parameters;
1282
			
1283
		if (!empty($hideprices)
1284
				|| (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && (!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i])) )
1285
		)
1286
		{
1287
			if (!empty($hideprices) || !in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1288
			{
1289
				$this->resprints = ' ';
1290
				return 1;
1291
			}
1292
		}
1293
		
1294
		return 0;
1295
	}
1296
	
1297
	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...
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

1297
	function pdf_getlinevatrate($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...
1298
		global $conf;
1299
		
1300
		if($this->isModSubtotalLine($parameters,$object) ){
1301
			$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...
1302
			
1303
			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...
1304
				return '';
1305
			}
1306
			else if((float)DOL_VERSION>=3.8) {
1307
				return 1;
1308
			}
1309
		}
1310
		
1311
		if(is_array($parameters)) $i = & $parameters['i'];
1312
		else $i = (int)$parameters;
1313
		
1314
		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)
1315
1316
		$object->lines[$i]->fetch_optionals();
1317
		if (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && (!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i])) )
1318
		{
1319
			if (!in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1320
			{
1321
				$this->resprints = ' ';
1322
				return 1;
1323
			}
1324
		}
1325
		
1326
		return 0;
1327
	}
1328
		
1329
	function pdf_getlineprogress($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

1329
	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...
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...
1330
		global $conf;
1331
		
1332
		if($this->isModSubtotalLine($parameters,$object) ){
1333
			$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...
1334
			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...
1335
				return '';
1336
			}
1337
			else if((float)DOL_VERSION>=3.8) {
1338
				return 1;
1339
			}
1340
		}
1341
		
1342
		if(is_array($parameters)) $i = & $parameters['i'];
1343
		else $i = (int)$parameters;
1344
			
1345
		if (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && (!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i])) )
1346
		{
1347
			if (!in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1348
			{
1349
				$this->resprints = ' ';
1350
				return 1;
1351
			}
1352
		}
1353
		
1354
		return 0;
1355
	}
1356
	
1357
	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...
1358
		global $conf;
1359
		
1360
		if(!empty($conf->global->SUBTOTAL_USE_NUMEROTATION)) {
1361
		
1362
			$TLevelTitre = array();
0 ignored issues
show
Unused Code introduced by
The assignment to $TLevelTitre is dead and can be removed.
Loading history...
1363
			$prevlevel = 0;
0 ignored issues
show
Unused Code introduced by
The assignment to $prevlevel is dead and can be removed.
Loading history...
1364
		
1365
			foreach($object->lines as $k=>&$line) 
1366
			{
1367
				if ($line->id > 0 && $this->isModSubtotalLine($k, $object) && $line->qty <= 10)
1368
				{
1369
					$TLineTitle[] = &$line;
1370
				}
1371
			}
1372
			
1373
			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...
1374
		}
1375
		
1376
	}
1377
1378
	// TODO ne gère pas encore la numération des lignes "Totaux"
1379
	private function formatNumerotation(&$TLineTitle, $line_reference='', $level=1, $prefix_num=0)
1380
	{
1381
		$TTitle = array();
1382
		
1383
		$i=1;
1384
		$j=0;
1385
		foreach ($TLineTitle as $k => &$line)
1386
		{
1387
			if (!empty($line_reference) && $line->rang <= $line_reference->rang) continue;
1388
			if (!empty($line_reference) && $line->qty <= $line_reference->qty) break;
1389
			
1390
			if ($line->qty == $level)
1391
			{
1392
				$TTitle[$j]['numerotation'] = ($prefix_num == 0) ? $i : $prefix_num.'.'.$i;
1393
				//var_dump('Prefix == '.$prefix_num.' // '.$line->desc.' ==> numerotation == '.$TTitle[$j]['numerotation'].'   ###    '.$line->qty .'=='. $level);
1394
				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...
1395
				{
1396
					$line->label = !empty($line->desc) ? $line->desc : $line->description;
1397
					$line->desc = $line->description = '';
1398
				}
1399
				
1400
				$line->label = $TTitle[$j]['numerotation'].' '.$line->label;
1401
				$TTitle[$j]['line'] = &$line;
1402
				
1403
				$deep_level = $line->qty;
1404
				do {
1405
					$deep_level++;
1406
					$TTitle[$j]['children'] = $this->formatNumerotation($TLineTitle, $line, $deep_level, $TTitle[$j]['numerotation']);
1407
				} 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
1408
				// Rappel on peux avoir jusqu'a 10 niveau de titre
1409
				
1410
				$i++;
1411
				$j++;
1412
			}
1413
		}
1414
1415
		return $TTitle;
1416
	}
1417
	
1418
	function setDocTVA(&$pdf, &$object) {
0 ignored issues
show
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

1418
	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...
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 $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

1418
	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...
1419
		
1420
		$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

1420
		$hidedetails = (int)/** @scrutinizer ignore-call */ GETPOST('hidedetails');
Loading history...
1421
		
1422
		if(empty($hidedetails)) return false;
1423
		
1424
		// TODO can't add VAT to document without lines... :-/
1425
		
1426
		return true;
1427
	}
1428
	
1429
	function beforePDFCreation($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

1429
	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...
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...
1430
	{
1431
		/**
1432
		 * @var $pdf    TCPDF
1433
		 */
1434
		global $pdf,$conf, $langs;
1435
1436
		// var_dump($object->lines);
1437
		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

1437
		/** @scrutinizer ignore-call */ 
1438
  dol_include_once('/subtotal/class/subtotal.class.php');
Loading history...
1438
1439
		foreach($parameters as $key=>$value) {
1440
			${$key} = $value;
1441
		}
1442
		
1443
		$this->setDocTVA($pdf, $object);
1444
		
1445
		$this->add_numerotation($object);	
1446
		
1447
		
1448
		$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

1448
		$hideInnerLines = (int)/** @scrutinizer ignore-call */ GETPOST('hideInnerLines');
Loading history...
1449
		$hidedetails = (int)GETPOST('hidedetails');
1450
		
1451
		if ($hideInnerLines) { // si c une ligne de titre
1452
	    	$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...
1453
			$TLines =array();
1454
		
1455
			$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...
1456
		    $TTvas = array(); // tableau de tva
1457
		    
1458
			foreach($object->lines as $k=>&$line) 
1459
			{
1460
			    
1461
				if($line->product_type==9 && $line->rowid>0) 
1462
				{
1463
					$fk_parent_line = $line->rowid;
1464
					
1465
					// 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
1466
					if(TSubtotal::isSubtotal($line)) 
1467
					{
1468
						/*$total = $this->getTotalLineFromObject($object, $line, '');
1469
						
1470
						$line->total_ht = $total;
1471
						$line->total = $total;
1472
						*/
1473
						list($total, $total_tva, $total_ttc, $TTotal_tva) = $this->getTotalLineFromObject($object, $line, '', 1);
1474
						
1475
						if (TSubtotal::getNiveau($line) == 1) $line->TTotal_tva = $TTotal_tva;
1476
						$line->total_ht = $total;
1477
						$line->total_tva = $total_tva;
1478
						$line->total = $line->total_ht;
1479
						$line->total_ttc = $total_ttc;
1480
					} 
1481
						
1482
				} 
1483
			
1484
				if ($hideInnerLines)
1485
				{
1486
				    if(!empty($conf->global->SUBTOTAL_REPLACE_WITH_VAT_IF_HIDE_INNERLINES))
1487
				    {
1488
				        if($line->tva_tx != '0.000' && $line->product_type!=9){
1489
				            
1490
    				        // on remplit le tableau de tva pour substituer les lignes cachées
1491
    				        $TTvas[$line->tva_tx]['total_tva'] += $line->total_tva;
1492
    				        $TTvas[$line->tva_tx]['total_ht'] += $line->total_ht;
1493
    				        $TTvas[$line->tva_tx]['total_ttc'] += $line->total_ttc; 
1494
    				    }
1495
    					if($line->product_type==9 && $line->rowid>0)
1496
    					{
1497
    					    //Cas où je doit cacher les produits et afficher uniquement les sous-totaux avec les titres
1498
    					    // génère des lignes d'affichage des montants HT soumis à tva
1499
    					    $nbtva = count($TTvas);
1500
    					    if(!empty($nbtva)){
1501
    					        foreach ($TTvas as $tx =>$val){
1502
    					            $l = clone $line;
1503
    					            $l->product_type = 1;
1504
    					            $l->special_code = '';
1505
    					            $l->qty = 1;
1506
    					            $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

1506
    					            $l->desc = $langs->trans('AmountBeforeTaxesSubjectToVATX%', $langs->transnoentitiesnoconv('VAT'), /** @scrutinizer ignore-call */ price($tx));
Loading history...
1507
    					            $l->tva_tx = $tx;
1508
    					            $l->total_ht = $val['total_ht'];
1509
    					            $l->total_tva = $val['total_tva'];
1510
    					            $l->total = $line->total_ht;
1511
    					            $l->total_ttc = $val['total_ttc'];
1512
    					            $TLines[] = $l;
1513
    					            array_shift($TTvas);
1514
    					       }
1515
    					    }
1516
    					    
1517
    					    // ajoute la ligne de sous-total
1518
    					    $TLines[] = $line; 
1519
    					}
1520
				    } else {
1521
				        
1522
				        if($line->product_type==9 && $line->rowid>0)
1523
				        {
1524
				            // ajoute la ligne de sous-total
1525
				            $TLines[] = $line; 
1526
				        }
1527
				    }
1528
				    
1529
					
1530
				}
1531
				elseif ($hidedetails)
1532
				{
1533
					$TLines[] = $line; //Cas où je cache uniquement les prix des produits	
1534
				}
1535
				
1536
				if ($line->product_type != 9) { // jusqu'au prochain titre ou total
1537
					//$line->fk_parent_line = $fk_parent_line;
1538
					
1539
				}
1540
			
1541
				/*if($hideTotal) {
1542
					$line->total = 0;
1543
					$line->subprice= 0;
1544
				}*/
1545
				
1546
			}
1547
			
1548
			// cas incongru où il y aurait des produits en dessous du dernier sous-total
1549
			$nbtva = count($TTvas);
1550
			if(!empty($nbtva) && $hideInnerLines && !empty($conf->global->SUBTOTAL_REPLACE_WITH_VAT_IF_HIDE_INNERLINES))
1551
			{
1552
			    foreach ($TTvas as $tx =>$val){
1553
			        $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 1458. Are you sure the iterator is never empty, otherwise this variable is not defined?
Loading history...
1554
			        $l->product_type = 1;
1555
			        $l->special_code = '';
1556
			        $l->qty = 1;
1557
			        $l->desc = $langs->trans('AmountBeforeTaxesSubjectToVATX%', $langs->transnoentitiesnoconv('VAT'), price($tx));
1558
			        $l->tva_tx = $tx;
1559
			        $l->total_ht = $val['total_ht'];
1560
			        $l->total_tva = $val['total_tva'];
1561
			        $l->total = $line->total_ht;
1562
			        $l->total_ttc = $val['total_ttc'];
1563
			        $TLines[] = $l;
1564
			        array_shift($TTvas);
1565
			    }
1566
			}
1567
			
1568
			global $nblignes;
1569
			$nblignes=count($TLines);
1570
1571
			$object->lines = $TLines;
1572
			
1573
			if($i>count($object->lines)) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $i seems to be never defined.
Loading history...
1574
				$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...
1575
				return 0;
1576
			}
1577
	    }
1578
		
1579
		return 0;
1580
	}
1581
1582
	function pdf_writelinedesc($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 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...
1583
	{
1584
		/**
1585
		 * @var $pdf    TCPDF
1586
		 */
1587
		global $pdf,$conf;
1588
1589
		foreach($parameters as $key=>$value) {
1590
			${$key} = $value;
1591
		}
1592
		
1593
		$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

1593
		$hideInnerLines = (int)/** @scrutinizer ignore-call */ GETPOST('hideInnerLines');
Loading history...
1594
		$hidedetails = (int)GETPOST('hidedetails');
0 ignored issues
show
Unused Code introduced by
The assignment to $hidedetails is dead and can be removed.
Loading history...
1595
		
1596
		if($this->isModSubtotalLine($parameters,$object) ){			
1597
		
1598
				global $hideprices;
1599
				
1600
				if(!empty($hideprices)) {
1601
					foreach($object->lines as &$line) {
1602
						if($line->fk_product_type!=9) $line->fk_parent_line = -1;	
1603
					}
1604
				}
1605
			
1606
				$line = &$object->lines[$i];
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $i seems to be never defined.
Loading history...
1607
				
1608
				if($line->info_bits>0) { // PAGE BREAK
1609
					$pdf->addPage();
1610
					$posy = $pdf->GetY();
1611
				}
1612
				
1613
				$label = $line->label;
1614
				$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...
1615
				
1616
				if(empty($label)) {
1617
					$label = $description;
1618
					$description='';
1619
				}
1620
				
1621
				if($line->qty>90) {
1622
					
1623
					if ($conf->global->SUBTOTAL_USE_NEW_FORMAT)	$label .= ' '.$this->getTitle($object, $line);
1624
					
1625
					$pageBefore = $pdf->getPage();
1626
					$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 $w 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 $posy does not seem to be defined for all execution paths leading up to this point.
Loading history...
1627
					$pageAfter = $pdf->getPage();	
1628
1629
					if($pageAfter>$pageBefore) {
1630
						//print "ST $pageAfter>$pageBefore<br>";
1631
						$pdf->rollbackTransaction(true);	
1632
						$pdf->addPage('','', true);
1633
						$posy = $pdf->GetY();
1634
						$this->pdf_add_total($pdf,$object, $line, $label, $description,$posx, $posy, $w, $h);
1635
						$posy = $pdf->GetY();
0 ignored issues
show
Unused Code introduced by
The assignment to $posy is dead and can be removed.
Loading history...
1636
						//print 'add ST'.$pdf->getPage().'<br />';
1637
					}
1638
				
1639
					$posy = $pdf->GetY();
1640
					return 1;
1641
				}	
1642
				else if ($line->qty < 10) {
1643
					$pageBefore = $pdf->getPage();
0 ignored issues
show
Unused Code introduced by
The assignment to $pageBefore is dead and can be removed.
Loading history...
1644
1645
					$this->pdf_add_title($pdf,$object, $line, $label, $description,$posx, $posy, $w, $h); 
1646
					$pageAfter = $pdf->getPage();	
0 ignored issues
show
Unused Code introduced by
The assignment to $pageAfter is dead and can be removed.
Loading history...
1647
1648
					
1649
					/*if($pageAfter>$pageBefore) {
1650
						print "T $pageAfter>$pageBefore<br>";
1651
						$pdf->rollbackTransaction(true);
1652
						$pdf->addPage('','', true);
1653
						print 'add T'.$pdf->getPage().' '.$line->rowid.' '.$pdf->GetY().' '.$posy.'<br />';
1654
						
1655
						$posy = $pdf->GetY();
1656
						$this->pdf_add_title($pdf,$object, $line, $label, $description,$posx, $posy, $w, $h);
1657
						$posy = $pdf->GetY();
1658
					}
1659
				*/
1660
					$posy = $pdf->GetY();
1661
					return 1;
1662
				}
1663
//	if($line->rowid==47) exit;
1664
			
1665
			return 0;
1666
		}
1667
		elseif (empty($object->lines[$parameters['i']]))
1668
		{
1669
			$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...
1670
		}
1671
1672
		/* TODO je desactive parce que je comprends pas PH Style, mais à test
1673
		else {
1674
			
1675
			if($hideInnerLines) {
1676
				$pdf->rollbackTransaction(true);
1677
			}
1678
			else {
1679
				$labelproductservice=pdf_getlinedesc($object, $i, $outputlangs, $hideref, $hidedesc, $issupplierline);
1680
				$pdf->writeHTMLCell($w, $h, $posx, $posy, $outputlangs->convToOutputCharset($labelproductservice), 0, 1);
1681
			}
1682
			
1683
		}*/
1684
1685
1686
		
1687
	}
1688
1689
	/**
1690
	 * Permet de récupérer le titre lié au sous-total
1691
	 * 
1692
	 * @return string
1693
	 */
1694
	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...
1695
	{
1696
		$res = '';
1697
		
1698
		foreach ($object->lines as $line)
1699
		{
1700
			if ($line->id == $currentLine->id) break;
1701
			
1702
			$qty_search = 100 - $currentLine->qty;
1703
			
1704
			if ($line->product_type == 9 && $line->special_code == $this->module_number && $line->qty == $qty_search) 
1705
			{
1706
				$res = ($line->label) ? $line->label : (($line->description) ? $line->description : $line->desc);
1707
			}
1708
		}
1709
		
1710
		return $res;
1711
	}
1712
	
1713
	/**
1714
	 * @param $parameters   array
1715
	 * @param $object       CommonObject
1716
	 * @param $action       string
1717
	 * @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...
1718
	 * @return int
1719
	 */
1720
	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...
1721
		
1722
		global $conf,$langs,$user,$db,$bc;
1723
		
1724
		$num = &$parameters['num'];
1725
		$line = &$parameters['line'];
1726
		$i = &$parameters['i'];
1727
		
1728
		$var = &$parameters['var'];
1729
1730
		$contexts = explode(':',$parameters['context']);
1731
1732
		$createRight = $user->rights->{$object->element}->creer;
1733
		if($object->element == 'facturerec' )
1734
		{
1735
			$object->statut = 0; // hack for facture rec
1736
			$createRight = $user->rights->facture->creer;
1737
		}
1738
		elseif($object->element == 'order_supplier' )
1739
		{
1740
		    $createRight = $user->rights->fournisseur->commande->creer;
1741
		}
1742
		elseif($object->element == 'invoice_supplier' )
1743
		{
1744
		    $createRight = $user->rights->fournisseur->facture->creer;
1745
		}
1746
		
1747
		if($line->special_code!=$this->module_number || $line->product_type!=9) {
1748
			null;
1749
		}	
1750
		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)) 
1751
        {
1752
			if($object->element=='facture')$idvar = 'facid';
1753
			else $idvar='id';
1754
			
1755
			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...
1756
			{
1757
				?>
1758
				<script type="text/javascript">
1759
					$(document).ready(function() {
1760
						$('#tablelines tr[rel=subtotal]').mouseleave(function() {
1761
1762
							id_line =$(this).attr('id');
1763
1764
							$(this).find('td[rel=subtotal_total]').each(function() {
1765
								$.get(document.location.href, function(data) {
1766
									var total = $(data).find('#tablelines tr#'+id_line+' td[rel=subtotal_total]').html();
1767
1768
									$('#tablelines tr#'+id_line+' td[rel=subtotal_total]').html(total);
1769
1770
								});
1771
							});
1772
						});
1773
					});
1774
1775
				</script>
1776
				<?php
1777
			}
1778
			
1779
			if(empty($line->description)) $line->description = $line->desc;
1780
			
1781
			$colspan = 5;
1782
			if($object->element == 'facturerec' ) $colspan = 3;
1783
			if($object->element == 'order_supplier') $colspan = 3;
1784
			if($object->element == 'invoice_supplier') $colspan = 4;
1785
			if($object->element == 'supplier_proposal') $colspan = 4;
1786
			if(!empty($conf->multicurrency->enabled)) $colspan+=2;
1787
			if($object->element == 'commande' && $object->statut < 3 && !empty($conf->shippableorder->enabled)) $colspan++;
1788
			if(!empty($conf->margin->enabled)) $colspan++;
1789
			if(!empty($conf->global->DISPLAY_MARGIN_RATES)) $colspan++;
1790
			if(!empty($conf->global->DISPLAY_MARK_RATES)) $colspan++;
1791
			if($object->element == 'facture' && !empty($conf->global->INVOICE_USE_SITUATION) && $object->type == Facture::TYPE_SITUATION) $colspan++;
1792
			if(!empty($conf->global->PRODUCT_USE_UNITS)) $colspan++;
1793
					
1794
			/* Titre */
1795
			//var_dump($line);
1796
            
1797
			// HTML 5 data for js
1798
            $data = $this->_getHtmlData($parameters, $object, $action, $hookmanager);
1799
            
1800
			
1801
			?>
1802
			<tr <?php echo $bc[$var]; $var=!$var; echo $data; ?> rel="subtotal" id="row-<?php echo $line->id ?>" style="<?php
1803
					if (!empty($conf->global->SUBTOTAL_USE_NEW_FORMAT))
1804
					{
1805
						if($line->qty==99) print 'background:#adadcf';
1806
						else if($line->qty==98) print 'background:#ddddff;';
1807
						else if($line->qty<=97 && $line->qty>=91) print 'background:#eeeeff;';
1808
						else if($line->qty==1) print 'background:#adadcf;';
1809
						else if($line->qty==2) print 'background:#ddddff;';
1810
						else if($line->qty==50) print '';
1811
						else print 'background:#eeeeff;';
1812
1813
						//A compléter si on veux plus de nuances de couleurs avec les niveau 4,5,6,7,8 et 9
1814
					}
1815
					else 
1816
					{
1817
						if($line->qty==99) print 'background:#ddffdd';
1818
						else if($line->qty==98) print 'background:#ddddff;';
1819
						else if($line->qty==2) print 'background:#eeeeff; ';
1820
						else if($line->qty==50) print '';
1821
						else print 'background:#eeffee;' ;
1822
					}
1823
1824
			?>;">
1825
			
1826
				<td colspan="<?php echo $colspan; ?>" style="<?php TSubtotal::isFreeText($line) ? '' : 'font-weight:bold;'; ?>  <?php echo ($line->qty>90)?'text-align:right':'' ?> "><?php
1827
					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

1827
					if($action=='editline' && /** @scrutinizer ignore-call */ GETPOST('lineid') == $line->id && TSubtotal::isModSubtotalLine($line) ) {
Loading history...
1828
1829
						$params=array('line'=>$line);
1830
						$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...
1831
						
1832
						echo '<div id="line_'.$line->id.'"></div>'; // Imitation Dolibarr
1833
						echo '<input type="hidden" value="'.$line->id.'" name="lineid">';
1834
						echo '<input id="product_type" type="hidden" value="'.$line->product_type.'" name="type">';
1835
						echo '<input id="product_id" type="hidden" value="'.$line->fk_product.'" name="type">';
1836
						echo '<input id="special_code" type="hidden" value="'.$line->special_code.'" name="type">';
1837
1838
						$isFreeText=false;
1839
						if (TSubtotal::isTitle($line))
1840
						{
1841
							$qty_displayed = $line->qty;
1842
							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

1842
							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...
1843
							
1844
						}
1845
						else if (TSubtotal::isSubtotal($line))
1846
						{
1847
							$qty_displayed = 100 - $line->qty;
1848
							print img_picto('', 'subsubtotal2@subtotal').'<span style="font-size:9px;margin-left:-1px;color:#0075DE;">'.$qty_displayed.'</span>&nbsp;&nbsp;';
1849
						}
1850
						else
1851
						{
1852
							$isFreeText = true;
1853
						}
1854
						
1855
						if ($object->element == 'order_supplier' || $object->element == 'invoice_supplier') {
1856
						    $line->label = !empty($line->description) ? $line->description : $line->desc;
1857
						    $line->description = '';
1858
						}
1859
						$newlabel = $line->label;
1860
						if($line->label=='' && !$isFreeText) {
1861
							if(TSubtotal::isSubtotal($line)) {
1862
								$newlabel = $line->description.' '.$this->getTitle($object, $line);
1863
								$line->description='';
1864
							} elseif( (float)DOL_VERSION < 6 ) {
1865
								$newlabel= $line->description;
1866
								$line->description='';
1867
							}
1868
						}
1869
1870
						$readonlyForSituation = '';
1871
						if (!empty($object->situation_cycle_ref) && $object->situation_counter > 1) $readonlyForSituation = 'readonly';
1872
						
1873
						if (!$isFreeText) echo '<input type="text" name="line-title" id-line="'.$line->id.'" value="'.$newlabel.'" size="80" '.$readonlyForSituation.'/>&nbsp;';
1874
						
1875
						if (!empty($conf->global->SUBTOTAL_USE_NEW_FORMAT) && (TSubtotal::isTitle($line) || TSubtotal::isSubtotal($line)) )
1876
						{
1877
							$select = '<select name="subtotal_level">';
1878
							for ($j=1; $j<10; $j++)
1879
							{
1880
								if (!empty($readonlyForSituation)) {
1881
									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...
1882
								} else $select .= '<option '.($qty_displayed == $j ? 'selected="selected"' : '').' value="'.$j.'">'.$langs->trans('Level').' '.$j.'</option>';
1883
							}
1884
							$select .= '</select>&nbsp;';
1885
1886
							echo $select;
1887
						}
1888
						
1889
1890
						echo '<div class="subtotal_underline" style="margin-left:24px;">';
1891
							echo '<label for="subtotal-pagebreak">'.$langs->trans('AddBreakPageBefore').'</label> <input style="vertical-align:sub;"  type="checkbox" name="line-pagebreak" id="subtotal-pagebreak" value="8" '.(($line->info_bits > 0) ? 'checked="checked"' : '') .' />&nbsp;&nbsp;';
1892
1893
							if (TSubtotal::isTitle($line))
1894
							{
1895
								$form = new Form($db);
1896
								echo '<label for="subtotal_tva_tx">'.$form->textwithpicto($langs->trans('subtotal_apply_default_tva'), $langs->trans('subtotal_apply_default_tva_help')).'</label>';
1897
								echo '<select id="subtotal_tva_tx" name="subtotal_tva_tx" class="flat"><option selected="selected" value="">-</option>';
1898
								if (empty($readonlyForSituation)) echo str_replace('selected', '', $form->load_tva('subtotal_tva_tx', '', $parameters['seller'], $parameters['buyer'], 0, 0, '', true));
1899
								echo '</select>&nbsp;&nbsp;';
1900
								
1901
								if (!empty($conf->global->INVOICE_USE_SITUATION) && $object->element == 'facture' && $object->type == Facture::TYPE_SITUATION)
1902
								{
1903
									echo '<label for="subtotal_progress">'.$langs->trans('subtotal_apply_progress').'</label> <input id="subtotal_progress" name="subtotal_progress" value="" size="1" />%';
1904
								}
1905
							}
1906
							else if ($isFreeText) echo TSubtotal::getFreeTextHtml($line, (bool) $readonlyForSituation);
1907
						echo '</div>';
1908
1909
						if($line->qty<10) {
1910
							// WYSIWYG editor
1911
							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...
1912
							$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...
1913
							$cked_enabled = (!empty($conf->global->FCKEDITOR_ENABLE_DETAILS) ? $conf->global->FCKEDITOR_ENABLE_DETAILS : 0);
1914
							if (!empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) {
1915
								$nbrows = $conf->global->MAIN_INPUT_DESC_HEIGHT;
1916
							}
1917
							$toolbarname = 'dolibarr_details';
1918
							if (!empty($conf->global->FCKEDITOR_ENABLE_DETAILS_FULL)) {
1919
								$toolbarname = 'dolibarr_notes';
1920
							}
1921
							$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...
1922
								false, true, $cked_enabled, $nbrows, '98%', (bool) $readonlyForSituation);
1923
							$doleditor->Create();
1924
						}
1925
						
1926
					}
1927
					else {
1928
1929
						 if ($conf->global->SUBTOTAL_USE_NEW_FORMAT)
1930
						 {
1931
							if(TSubtotal::isTitle($line) || TSubtotal::isSubtotal($line)) 
1932
							{
1933
								echo str_repeat('&nbsp;&nbsp;&nbsp;', $line->qty-1);
1934
								
1935
								if (TSubtotal::isTitle($line)) print img_picto('', 'subtotal@subtotal').'<span style="font-size:9px;margin-left:-3px;">'.$line->qty.'</span>&nbsp;&nbsp;';
1936
								else print img_picto('', 'subtotal2@subtotal').'<span style="font-size:9px;margin-left:-1px;">'.(100-$line->qty).'</span>&nbsp;&nbsp;';
1937
							}
1938
						 }
1939
						 else 
1940
						 {
1941
							if($line->qty<=1) print img_picto('', 'subtotal@subtotal');
1942
							else if($line->qty==2) print img_picto('', 'subsubtotal@subtotal').'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'; 
1943
						 }
1944
						 
1945
						 
1946
						 // Get display styles and apply them
1947
						 $titleStyleItalic = strpos($conf->global->SUBTOTAL_TITLE_STYLE, 'I') === false ? '' : ' font-style: italic;';
1948
						 $titleStyleBold =  strpos($conf->global->SUBTOTAL_TITLE_STYLE, 'B') === false ? '' : ' font-weight:bold;';
1949
						 $titleStyleUnderline =  strpos($conf->global->SUBTOTAL_TITLE_STYLE, 'U') === false ? '' : ' text-decoration: underline;';
1950
						 
1951
						 if (empty($line->label)) {
1952
							if ($line->qty >= 91 && $line->qty <= 99 && $conf->global->SUBTOTAL_USE_NEW_FORMAT) print  $line->description.' '.$this->getTitle($object, $line);
1953
							else print  $line->description;
1954
						 } 
1955
						 else {
1956
1957
							if (! empty($conf->global->PRODUIT_DESC_IN_FORM) && !empty($line->description)) {
1958
								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

1958
								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...
1959
							}
1960
							else{
1961
								print '<span class="subtotal_label classfortooltip '.$titleStyleItalic.$titleStyleBold.$titleStyleUnderline.'" title="'.$line->description.'">'.$line->label.'</span>';    
1962
							}
1963
1964
						 } 
1965
						if($line->qty>90) print ' : ';
1966
						if($line->info_bits > 0) echo img_picto($langs->trans('Pagebreak'), 'pagebreak@subtotal');
1967
1968
						 
1969
1970
1971
					}
1972
			?></td>
1973
					 
1974
			<?php
1975
				if($line->qty>90) {
1976
					/* Total */
1977
					$total_line = $this->getTotalLineFromObject($object, $line, '');
1978
					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

1978
					echo '<td class="nowrap liencolht" align="right" style="font-weight:bold;" rel="subtotal_total">'./** @scrutinizer ignore-call */ price($total_line).'</td>';
Loading history...
1979
				} else {
1980
					echo '<td class="liencolht movetitleblock" >&nbsp;</td>';
1981
				}	
1982
			?>
1983
					
1984
			<td align="center" class="nowrap linecoledit">
1985
				<?php
1986
				if ($action != 'selectlines') {
1987
				
1988
					if($action=='editline' && GETPOST('lineid') == $line->id && TSubtotal::isModSubtotalLine($line) ) {
1989
						?>
1990
						<input id="savelinebutton" class="button" type="submit" name="save" value="<?php echo $langs->trans('Save') ?>" />
1991
						<br />
1992
						<input class="button" type="button" name="cancelEditlinetitle" value="<?php echo $langs->trans('Cancel') ?>" />
1993
						<script type="text/javascript">
1994
							$(document).ready(function() {
1995
								$('input[name=cancelEditlinetitle]').click(function () {
1996
									document.location.href="<?php echo '?'.$idvar.'='.$object->id ?>";
1997
								});
1998
							});
1999
2000
						</script>
2001
						<?php
2002
						
2003
					}
2004
					else{
2005
						if ($object->statut == 0  && $createRight && !empty($conf->global->SUBTOTAL_ALLOW_DUPLICATE_BLOCK) && $object->element !== 'invoice_supplier')
2006
						{
2007
							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>';
2008
						}
2009
2010
						if ($object->statut == 0  && $createRight && !empty($conf->global->SUBTOTAL_ALLOW_EDIT_BLOCK)) 
2011
						{
2012
							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

2012
							echo '<a href="'.$_SERVER['PHP_SELF'].'?'.$idvar.'='.$object->id.'&action=editline&lineid='.$line->id.'">'./** @scrutinizer ignore-call */ img_edit().'</a>';
Loading history...
2013
						}								
2014
					}
2015
					
2016
				}
2017
					
2018
				?>
2019
			</td>
2020
2021
			<td align="center" nowrap="nowrap" class="linecoldelete">	
2022
				<?php
2023
2024
				if ($action != 'editline' && $action != 'selectlines') {
2025
						if ($object->statut == 0  && $createRight && !empty($conf->global->SUBTOTAL_ALLOW_REMOVE_BLOCK))
2026
						{
2027
2028
							if ($object->situation_counter == 1 || !$object->situation_cycle_ref)
2029
							{
2030
								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

2030
								echo '<a href="'.$_SERVER['PHP_SELF'].'?'.$idvar.'='.$object->id.'&action=ask_deleteline&lineid='.$line->id.'">'./** @scrutinizer ignore-call */ img_delete().'</a>';
Loading history...
2031
							}
2032
2033
							if(TSubtotal::isTitle($line) && ($object->situation_counter == 1 || !$object->situation_cycle_ref) )
2034
							{
2035
								$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');
2036
								echo '<a href="'.$_SERVER['PHP_SELF'].'?'.$idvar.'='.$object->id.'&action=ask_deleteallline&lineid='.$line->id.'">'.$img_delete.'</a>';
2037
							}
2038
						}
2039
					}
2040
				?>
2041
			</td>
2042
			
2043
			<?php 
2044
			if ($object->statut == 0  && $createRight && !empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && TSubtotal::isTitle($line) && $action != 'editline')
2045
			{
2046
				echo '<td class="subtotal_nc">';
2047
				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"' : '').' />';
2048
				echo '</td>';
2049
			}
2050
			
2051
			if ($num > 1 && empty($conf->browser->phone)) { ?>
2052
			<td align="center" class="tdlineupdown">
2053
			</td>
2054
			<?php } else { ?>
2055
			<td align="center"<?php echo ((empty($conf->browser->phone) && ($object->statut == 0  && $createRight ))?' class="tdlineupdown"':''); ?>></td>
2056
			<?php } ?>
2057
2058
			<?php  if($action == 'selectlines'){ // dolibarr 8 ?>
2059
			<td class="linecolcheck" align="center"><input type="checkbox" class="linecheckbox" name="line_checkbox[<?php echo $i+1; ?>]" value="<?php echo $line->id; ?>" ></td>
2060
			<?php } ?>
2061
2062
			</tr>
2063
			<?php
2064
			
2065
			
2066
			// Affichage des extrafields à la Dolibarr (car sinon non affiché sur les titres)
2067
			if(TSubtotal::isTitle($line) && !empty($conf->global->SUBTOTAL_ALLOW_EXTRAFIELDS_ON_TITLE)) {
2068
				
2069
				require_once DOL_DOCUMENT_ROOT . '/core/class/extrafields.class.php';
2070
				
2071
				// Extrafields
2072
				$extrafieldsline = new ExtraFields($db);
2073
				$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...
2074
				
2075
				$colspan+=3; $mode = 'view';
2076
				if($action === 'editline' && $line->rowid == GETPOST('lineid')) $mode = 'edit';
2077
				
2078
				$ex_element = $line->element;
2079
				$line->element = 'tr_extrafield_title '.$line->element; // Pour pouvoir manipuler ces tr
2080
				print $line->showOptionals($extrafieldsline, $mode, array('style'=>' style="background:#eeffee;" ','colspan'=>$colspan));
2081
				$isExtraSelected = false;
2082
				foreach($line->array_options as $option) {
2083
					if(!empty($option) && $option != "-1") {
2084
						$isExtraSelected = true;
2085
						break;
2086
					}
2087
				}
2088
				
2089
				if($mode === 'edit') {
2090
					?>
2091
					<script>
2092
						$(document).ready(function(){
2093
2094
							var all_tr_extrafields = $("tr.tr_extrafield_title");
2095
							<?php 
2096
							// Si un extrafield est rempli alors on affiche directement les extrafields
2097
							if(!$isExtraSelected) {
2098
								echo 'all_tr_extrafields.hide();';
2099
								echo 'var trad = "'.$langs->trans('showExtrafields').'";';
2100
								echo 'var extra = 0;';
2101
							} else {
2102
								echo 'all_tr_extrafields.show();';
2103
								echo 'var trad = "'.$langs->trans('hideExtrafields').'";';
2104
								echo 'var extra = 1;';
2105
							}
2106
							?>
2107
							
2108
							$("div .subtotal_underline").append(
2109
									'<a id="printBlocExtrafields" onclick="return false;" href="#">' + trad + '</a>'
2110
									+ '<input type="hidden" name="showBlockExtrafields" id="showBlockExtrafields" value="'+ extra +'" />');
2111
2112
							$(document).on('click', "#printBlocExtrafields", function() {
2113
								var btnShowBlock = $("#showBlockExtrafields");
2114
								var val = btnShowBlock.val();
2115
								if(val == '0') {
2116
									btnShowBlock.val('1');
2117
									$("#printBlocExtrafields").html("<?php print $langs->trans('hideExtrafields'); ?>");
2118
									$(all_tr_extrafields).show();
2119
								} else {
2120
									btnShowBlock.val('0');
2121
									$("#printBlocExtrafields").html("<?php print $langs->trans('showExtrafields'); ?>");
2122
									$(all_tr_extrafields).hide();
2123
								}
2124
							});
2125
						});
2126
					</script>
2127
					<?php
2128
				}
2129
				$line->element = $ex_element;
2130
				
2131
			}
2132
			
2133
			return 1;	
2134
			
2135
		}
2136
		
2137
		return 0;
2138
2139
	}
2140
2141
	
2142
	function addMoreActionsButtons($parameters, &$object, &$action, $hookmanager) {
0 ignored issues
show
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

2142
	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...
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

2142
	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...
2143
		global $conf,$langs;
2144
		 
2145
		if ($object->statut == 0 && !empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && $action != 'editline')
2146
		{
2147
		    
2148
		    if($object->element == 'invoice_supplier' || $object->element == 'order_supplier')
2149
		    {
2150
		        foreach ($object->lines as $line)
2151
		        {
2152
		            // fetch optionals attributes and labels
2153
		            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...
2154
		            $extrafields=new ExtraFields($this->db);
2155
		            $extralabels=$extrafields->fetch_name_optionals_label($object->table_element_line,true);
2156
		            $line->fetch_optionals($line->id,$extralabels);
2157
		        }
2158
		    }
2159
		    
2160
			$TSubNc = array();
2161
			foreach ($object->lines as &$l)
2162
			{
2163
				$TSubNc[$l->id] = (int) $l->array_options['options_subtotal_nc'];
2164
			}
2165
			
2166
			$form = new Form($db);
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $db seems to be never defined.
Loading history...
2167
			?>
2168
			<script type="text/javascript">
2169
				$(function() {
2170
					var subtotal_TSubNc = <?php echo json_encode($TSubNc); ?>;
2171
					$("#tablelines tbody > tr").each(function(i, item) {
2172
						if ($(item).children('.subtotal_nc').length == 0)
2173
						{
2174
							var id = $(item).attr('id');
2175
							
2176
							if ((typeof id != 'undefined' && id.indexOf('row-') >= 0) || $(item).hasClass('liste_titre'))
2177
							{
2178
								$(item).children('td:last-child').before('<td class="subtotal_nc"></td>');
2179
								
2180
								if ($(item).attr('rel') != 'subtotal' && typeof $(item).attr('id') != 'undefined')
2181
								{
2182
									var idSplit = $(item).attr('id').split('-');
2183
									$(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"' : '')+' />'));
2184
								}
2185
							}
2186
							else 
2187
							{
2188
								$(item).append('<td class="subtotal_nc"></td>');
2189
							}
2190
						}
2191
					});
2192
					
2193
					$('#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'))); ?>);
2194
					
2195
					function callAjaxUpdateLineNC(set, lineid, subtotal_nc)
2196
					{
2197
						$.ajax({
2198
							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

2198
							url: '<?php echo /** @scrutinizer ignore-call */ dol_buildpath('/subtotal/script/interface.php', 1); ?>'
Loading history...
2199
							,type: 'POST'
2200
							,data: {
2201
								json:1
2202
								,set: set
2203
								,element: '<?php echo $object->element; ?>'
2204
								,elementid: <?php echo (int) $object->id; ?>
2205
								,lineid: lineid
2206
								,subtotal_nc: subtotal_nc
2207
							}
2208
						}).done(function(response) {
2209
							window.location.href = window.location.pathname + '?id=<?php echo $object->id; ?>&page_y=' + window.pageYOffset;
2210
						});
2211
					}
2212
					
2213
					$(".subtotal_nc_chkbx").change(function(event) {
2214
						var lineid = $(this).data('lineid');
2215
						var subtotal_nc = 0 | $(this).is(':checked'); // Renvoi 0 ou 1 
2216
						
2217
						callAjaxUpdateLineNC('updateLineNC', lineid, subtotal_nc);
2218
					});
2219
					
2220
				});
2221
2222
			</script>
2223
			<?php
2224
		}
2225
		
2226
		$this->_ajax_block_order_js($object);
2227
	}
2228
	
2229
	function afterPDFCreation($parameters, &$pdf, &$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

2229
	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

2229
	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...
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...
2230
	{
2231
		global $conf;
2232
		
2233
		$object = $parameters['object'];
2234
		
2235
		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'))
2236
		{
2237
			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

2237
			if (/** @scrutinizer ignore-call */ GETPOST('subtotal_add_recap')) {
Loading history...
2238
				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

2238
				/** @scrutinizer ignore-call */ 
2239
    dol_include_once('/subtotal/class/subtotal.class.php');
Loading history...
2239
				TSubtotal::addRecapPage($parameters, $pdf);
2240
			}
2241
		}
2242
	}
2243
	
2244
	// HTML 5 data for js
2245
	private function _getHtmlData($parameters, &$object, &$action, $hookmanager)
2246
	{
2247
		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

2247
		/** @scrutinizer ignore-call */ 
2248
  dol_include_once('/subtotal/class/subtotal.class.php');
Loading history...
2248
2249
	    $line = &$parameters['line'];
2250
	    
2251
	    $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...
2252
	    $ThtmlData['data-product_type'] = $line->product_type;
2253
	    $ThtmlData['data-qty']          = 0; //$line->qty;
2254
	    $ThtmlData['data-level']        = TSubtotal::getNiveau($line);
2255
	    
2256
	    if(TSubtotal::isTitle($line)){
2257
	        $ThtmlData['data-issubtotal'] = 'title';
2258
	    }elseif(TSubtotal::isSubtotal($line)){
2259
	        $ThtmlData['data-issubtotal'] = 'subtotal';
2260
	    }
2261
	    else{
2262
	        $ThtmlData['data-issubtotal'] = 'freetext';
2263
	    }
2264
	    
2265
	    
2266
	    // Change or add data  from hooks
2267
	    $parameters = array_replace($parameters , array(  'ThtmlData' => $ThtmlData )  );
2268
	    
2269
	    // hook 
2270
	    $reshook = $hookmanager->executeHooks('subtotalLineHtmlData',$parameters,$object,$action); // Note that $action and $object may have been modified by hook
2271
	    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

2271
	    if ($reshook < 0) /** @scrutinizer ignore-call */ setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
Loading history...
2272
	    if ($reshook>0)
2273
	    {
2274
	        $ThtmlData = $hookmanager->resArray;
2275
	    }
2276
2277
	    return $this->implodeHtmlData($ThtmlData);
2278
	
2279
	}
2280
	
2281
	
2282
	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...
2283
	{
2284
	    $data = '';
2285
	    foreach($ThtmlData as $k => $h )
2286
	    {
2287
	        if(is_array($h))
2288
	        {
2289
	            $h = json_encode($h);
2290
	        }
2291
	        
2292
	        $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

2292
	        $data .= $k . '="'./** @scrutinizer ignore-call */ dol_htmlentities($h, ENT_QUOTES).'" ';
Loading history...
2293
	    }
2294
	    
2295
	    return $data;
2296
	}
2297
	
2298
	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...
2299
	{
2300
	    global $conf,$tagidfortablednd,$filepath,$langs;
2301
	    
2302
	    /*
2303
	     * this part of js is base on dolibarr htdocs/core/tpl/ajaxrow.tpl.php 
2304
	     * for compatibility reasons we don't use tableDnD but jquery sortable
2305
	     */
2306
	    
2307
	    $id=$object->id;
0 ignored issues
show
Unused Code introduced by
The assignment to $id is dead and can be removed.
Loading history...
2308
	    $nboflines=(isset($object->lines)?count($object->lines):0);
2309
	    $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...
2310
	    
2311
	    $id=$object->id;
2312
	    $fk_element=$object->fk_element;
2313
	    $table_element_line=$object->table_element_line;
2314
	    $nboflines=(isset($object->lines)?count($object->lines):(empty($nboflines)?0:$nboflines));
2315
	    $tagidfortablednd=(empty($tagidfortablednd)?'tablelines':$tagidfortablednd);
2316
	    $filepath=(empty($filepath)?'':$filepath);
2317
	    
2318
	    
2319
	    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

2319
	    if (/** @scrutinizer ignore-call */ GETPOST('action','aZ09') != 'editline' && $nboflines > 1)
Loading history...
2320
	    {
2321
	        
2322
	        ?>
2323
		
2324
		
2325
			<script type="text/javascript">
2326
			$(document).ready(function(){
2327
2328
				// target some elements
2329
				var titleRow = $('tr[data-issubtotal="title"]');
2330
				var lastTitleCol = titleRow.find('td:last-child');
2331
				var moveBlockCol= titleRow.find('td.liencolht');
2332
2333
				
2334
				moveBlockCol.disableSelection(); // prevent selection
2335
<?php if ($object->statut == 0) { ?>
2336
				// apply some graphical stuff
2337
				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

2337
				moveBlockCol.css("background-image",'url(<?php echo /** @scrutinizer ignore-call */ dol_buildpath('subtotal/img/grip_all.png',2);  ?>)');
Loading history...
2338
				moveBlockCol.css("background-repeat","no-repeat");
2339
				moveBlockCol.css("background-position","center center");
2340
				moveBlockCol.css("cursor","move");
2341
				titleRow.attr('title', '<?php echo html_entity_decode($langs->trans('MoveTitleBlock')); ?>');
2342
			
2343
2344
 				$( "#<?php echo $tagidfortablednd; ?>" ).sortable({
2345
			    	  cursor: "move",
2346
			    	  handle: ".movetitleblock",
2347
			    	  items: 'tr:not(.nodrag,.nodrop,.noblockdrop)',
2348
			    	  delay: 150, //Needed to prevent accidental drag when trying to select
2349
			    	  opacity: 0.8,
2350
			    	  axis: "y", // limit y axis
2351
			    	  placeholder: "ui-state-highlight",
2352
			    	  start: function( event, ui ) {
2353
			    	      //console.log('X:' + e.screenX, 'Y:' + e.screenY);
2354
			    		  //console.log(ui.item);
2355
			    		  var colCount = ui.item.children().length;
2356
   						  ui.placeholder.html('<td colspan="'+colCount+'">&nbsp;</td>');
2357
   		
2358
			    		  var TcurrentChilds = getSubtotalTitleChilds(ui.item);
2359
			    		  ui.item.data('childrens',TcurrentChilds); // store data
2360
				    		
2361
			    		  for (var key in TcurrentChilds) {
2362
			    			  $('#'+ TcurrentChilds[key]).addClass('noblockdrop');//'#row-'+ 
2363
			    			  $('#'+ TcurrentChilds[key]).fadeOut();//'#row-'+ 
2364
			    		  }
2365
2366
			    		  $(this).sortable("refresh");	// "refresh" of source sortable is required to make "disable" work!
2367
			    	      
2368
			    	    },
2369
				    	stop: function (event, ui) {
2370
							// call we element is droped
2371
				    	  	$('.noblockdrop').removeClass('noblockdrop');
2372
2373
				    	  	var TcurrentChilds = ui.item.data('childrens'); // reload child list from data and not attr to prevent load error
2374
2375
							for (var i =TcurrentChilds.length ; i >= 0; i--) {
2376
				    			  $('#'+ TcurrentChilds[i]).insertAfter(ui.item); //'#row-'+ 
2377
				    			  $('#'+ TcurrentChilds[i]).fadeIn(); //'#row-'+ 
2378
							}
2379
							console.log('onstop');
2380
							console.log(cleanSerialize($(this).sortable('serialize')));
2381
							
2382
							$.ajax({
2383
			    	            data: {
2384
									objet_id: <?php print $object->id; ?>,
2385
							    	roworder: cleanSerialize($(this).sortable('serialize')),
2386
									table_element_line: "<?php echo $table_element_line; ?>",
2387
									fk_element: "<?php echo $fk_element; ?>",
2388
									element_id: "<?php echo $id; ?>",
2389
									filepath: "<?php echo urlencode($filepath); ?>"
2390
								},
2391
			    	            type: 'POST',
2392
			    	            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...
2393
			    	            success: function(data) {
2394
			    	                console.log(data);
2395
			    	            },
2396
			    	        });
2397
			    	        
2398
			    	  },
2399
			    	  update: function (event, ui) {
2400
				    	  
2401
			    	        // POST to server using $.post or $.ajax
2402
				    	  	$('.noblockdrop').removeClass('noblockdrop');
2403
							//console.log('onupdate');
2404
			    	        //console.log(cleanSerialize($(this).sortable('serialize')));
2405
			    	    }
2406
			    });
2407
 				<?php } ?>
2408
2409
				function getSubtotalTitleChilds(item)
2410
				{
2411
		    		var TcurrentChilds = []; // = JSON.parse(item.attr('data-childrens'));
2412
		    		var level = item.data('level');
2413
2414
		    		var indexOfFirstSubtotal = -1;
2415
		    		var indexOfFirstTitle = -1;
2416
		    		
2417
		    		item.nextAll('[id^="row-"]').each(function(index){
2418
2419
						var dataLevel = $(this).attr('data-level');
2420
						var dataIsSubtotal = $(this).attr('data-issubtotal');
2421
						
2422
						if(dataIsSubtotal != 'undefined' && dataLevel != 'undefined' )
2423
						{
2424
2425
							if(dataLevel <=  level && indexOfFirstSubtotal < 0 && dataIsSubtotal == 'subtotal' )
2426
							{
2427
								indexOfFirstSubtotal = index;
2428
								if(indexOfFirstTitle < 0)
2429
								{
2430
									TcurrentChilds.push($(this).attr('id'));
2431
								}
2432
							}
2433
							
2434
							if(dataLevel <=  level && indexOfFirstSubtotal < 0 && indexOfFirstTitle < 0 && dataIsSubtotal == 'title' )
2435
							{
2436
								indexOfFirstTitle = index;
2437
							}
2438
						}
2439
2440
						if(indexOfFirstTitle < 0 && indexOfFirstSubtotal < 0)
2441
						{
2442
							TcurrentChilds.push($(this).attr('id'));
2443
2444
							// Add extraffield support for dolibarr > 7
2445
							var thisId = $(this).attr('data-id');
2446
							var thisElement = $(this).attr('data-element');
2447
							if(thisId != undefined && thisElement != undefined )
2448
							{
2449
								$('[data-targetid="' + thisId + '"][data-element="extrafield"][data-targetelement="'+ thisElement +'"]').each(function(index){
2450
									TcurrentChilds.push($(this).attr('id'));
2451
								});
2452
							}
2453
							
2454
						}
2455
2456
		    		});
2457
		    		return TcurrentChilds;
2458
				}
2459
				
2460
			});
2461
			</script>
2462
			<style type="text/css" >
2463
         
2464
            tr.ui-state-highlight td{
2465
            	border: 1px solid #dad55e;
2466
            	background: #fffa90;
2467
            	color: #777620;
2468
            }
2469
            </style>
2470
		<?php
2471
		
2472
		} 
2473
	
2474
		
2475
		
2476
	}
2477
	
2478
}
2479