Passed
Pull Request — master (#124)
by
unknown
02:59
created

ActionsSubtotal::pdf_getlineremisepercent()   B

Complexity

Conditions 7
Paths 20

Size

Total Lines 29
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

filter:
    dependency_paths: ["lib/*"]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

filter:
    dependency_paths: ["lib/*"]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

filter:
    dependency_paths: ["lib/*"]

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

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

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

filter:
    dependency_paths: ["lib/*"]

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

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

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

filter:
    dependency_paths: ["lib/*"]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

filter:
    dependency_paths: ["lib/*"]

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

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

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

filter:
    dependency_paths: ["lib/*"]

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

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

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

filter:
    dependency_paths: ["lib/*"]

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

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

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

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

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

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

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

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

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

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

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

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

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

filter:
    dependency_paths: ["lib/*"]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1319
                $this->resprints = /** @scrutinizer ignore-call */ price($TTotal['total_subprice']);
Loading history...
1320
                $TTotal = array();
1321
                $show_reduc = 0;
1322
            }
1323
		
1324
			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...
1325
				return '';
1326
			}
1327
			else if((float)DOL_VERSION>=3.8) {
1328
				return 1;
1329
			}
1330
		}
1331
		
1332
		// Si la gestion C/NC est active et que je suis sur un ligne dont l'extrafield est coché
1333
		if (
1334
		!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) &&
1335
		(!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i]))
1336
		)
1337
		{
1338
		    // alors je dois vérifier si la méthode fait partie de la conf qui l'exclue
1339
		    if (!in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1340
		    {
1341
		        $this->resprints = ' ';
1342
		        
1343
		        // currentcontext à modifier celon l'appel
1344
		        $params = array('parameters' => $parameters, 'currentmethod' => 'pdf_getlineupexcltax', 'currentcontext'=>'subtotal_hide_nc', 'i' => $i);
1345
		        return $this->callHook($object, $hookmanager, $action, $params); // return 1 (qui est la valeur par défaut) OU -1 si erreur OU overrideReturn (contient -1 ou 0 ou 1)
1346
		        
1347
		    }
1348
		}
1349
		// Cache le prix pour les lignes standards dolibarr qui sont dans un ensemble
1350
		else if (!empty($hideprices))
1351
		{
1352
		    
1353
		    // Check if a title exist for this line && if the title have subtotal
1354
		    $lineTitle = TSubtotal::getParentTitleOfLine($object, $i);
1355
		    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

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

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

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

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

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

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

Loading history...
1370
	    global $conf,$hideprices,$hookmanager, $TTotal;
1371
1372
        if(is_array($parameters)) $i = & $parameters['i'];
1373
        else $i = (int) $parameters;
1374
1375
		if($this->isModSubtotalLine($parameters,$object) ) {
1376
			$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...
1377
1378
            $line = $object->lines[$i];
1379
1380
            // Affichage de la remise 
1381
            if(TSubtotal::isSubtotal($line)) {
1382
                $parentTitle = TSubtotal::getParentTitleOfLine($object, $i);
1383
                $TTotal = TSubtotal::getTotalBlockFromTitle($object, $parentTitle);
1384
1385
                if(! empty($parentTitle->array_options['options_show_reduc'])) $this->resprints = price($TTotal['total_ht'] / $TTotal['total_subprice']*100, 0, '', 1, 2, 2).'%';
0 ignored issues
show
Bug introduced by
The function price was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

1385
                if(! empty($parentTitle->array_options['options_show_reduc'])) $this->resprints = /** @scrutinizer ignore-call */ price($TTotal['total_ht'] / $TTotal['total_subprice']*100, 0, '', 1, 2, 2).'%';
Loading history...
1386
                $TTotal = array();
1387
            }
1388
		
1389
			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...
1390
				return '';
1391
			}
1392
			else if((float)DOL_VERSION>=3.8) {
1393
				return 1;
1394
			}
1395
		}
1396
		
1397
		return 0;
1398
	}
1399
	
1400
	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

1400
	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...
1401
		global $conf,$hideprices;
1402
		
1403
		if($this->isModSubtotalLine($parameters,$object) ){
1404
			$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...
1405
			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...
1406
				return '';
1407
			}
1408
			else if((float)DOL_VERSION>=3.8) {
1409
				return 1;
1410
			}
1411
		}
1412
		
1413
		if(is_array($parameters)) $i = & $parameters['i'];
1414
		else $i = (int)$parameters;
1415
			
1416
		if (!empty($hideprices)
1417
				|| (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && (!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i])) )
1418
		)
1419
		{
1420
			if (!empty($hideprices) || !in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1421
			{
1422
				$this->resprints = ' ';
1423
				return 1;
1424
			}
1425
		}
1426
		
1427
		return 0;
1428
	}
1429
	
1430
	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...
1431
	    global $conf,$hideprices,$hookmanager;
1432
	    
1433
		if($this->isModSubtotalLine($parameters,$object) ){
1434
			$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...
1435
			
1436
			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...
1437
				return '';
1438
			}
1439
			else if((float)DOL_VERSION>=3.8) {
1440
				return 1;
1441
			}
1442
		}
1443
		
1444
		if(is_array($parameters)) $i = & $parameters['i'];
1445
		else $i = (int)$parameters;
1446
		
1447
		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)
1448
1449
		$object->lines[$i]->fetch_optionals();
1450
		// Si la gestion C/NC est active et que je suis sur un ligne dont l'extrafield est coché
1451
		if (
1452
		!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) &&
1453
		(!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i]))
1454
		)
1455
		{
1456
		    // alors je dois vérifier si la méthode fait partie de la conf qui l'exclue
1457
		    if (!in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1458
		    {
1459
		        $this->resprints = ' ';
1460
		        
1461
		        // currentcontext à modifier celon l'appel
1462
		        $params = array('parameters' => $parameters, 'currentmethod' => 'pdf_getlinevatrate', 'currentcontext'=>'subtotal_hide_nc', 'i' => $i);
1463
		        return $this->callHook($object, $hookmanager, $action, $params); // return 1 (qui est la valeur par défaut) OU -1 si erreur OU overrideReturn (contient -1 ou 0 ou 1)
1464
		    }
1465
		}
1466
		// Cache le prix pour les lignes standards dolibarr qui sont dans un ensemble
1467
		else if (!empty($hideprices))
1468
		{
1469
		    
1470
		    // Check if a title exist for this line && if the title have subtotal
1471
		    $lineTitle = TSubtotal::getParentTitleOfLine($object, $i);
1472
		    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

1472
		    if(TSubtotal::getParentTitleOfLine($object, $i) && TSubtotal::titleHasTotalLine($object, /** @scrutinizer ignore-type */ $lineTitle, true))
Loading history...
1473
		    {
1474
		        
1475
		        $this->resprints = ' ';
1476
		        
1477
		        // currentcontext à modifier celon l'appel
1478
		        $params = array('parameters' => $parameters, 'currentmethod' => 'pdf_getlinevatrate', 'currentcontext'=>'subtotal_hideprices', 'i' => $i);
1479
		        return $this->callHook($object, $hookmanager, $action, $params); // return 1 (qui est la valeur par défaut) OU -1 si erreur OU overrideReturn (contient -1 ou 0 ou 1)
1480
		    }
1481
		}
1482
		
1483
		return 0;
1484
	}
1485
		
1486
	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

1486
	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...
1487
		global $conf;
1488
		
1489
		if($this->isModSubtotalLine($parameters,$object) ){
1490
			$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...
1491
			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...
1492
				return '';
1493
			}
1494
			else if((float)DOL_VERSION>=3.8) {
1495
				return 1;
1496
			}
1497
		}
1498
		
1499
		if(is_array($parameters)) $i = & $parameters['i'];
1500
		else $i = (int)$parameters;
1501
			
1502
		if (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && (!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i])) )
1503
		{
1504
			if (!in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1505
			{
1506
				$this->resprints = ' ';
1507
				return 1;
1508
			}
1509
		}
1510
		
1511
		return 0;
1512
	}
1513
	
1514
	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...
1515
		global $conf;
1516
		
1517
		if(!empty($conf->global->SUBTOTAL_USE_NUMEROTATION)) {
1518
		
1519
			$TLevelTitre = array();
0 ignored issues
show
Unused Code introduced by
The assignment to $TLevelTitre is dead and can be removed.
Loading history...
1520
			$prevlevel = 0;
0 ignored issues
show
Unused Code introduced by
The assignment to $prevlevel is dead and can be removed.
Loading history...
1521
		
1522
			foreach($object->lines as $k=>&$line) 
1523
			{
1524
				if ($line->id > 0 && $this->isModSubtotalLine($k, $object) && $line->qty <= 10)
1525
				{
1526
					$TLineTitle[] = &$line;
1527
				}
1528
			}
1529
			
1530
			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...
1531
		}
1532
		
1533
	}
1534
1535
	// TODO ne gère pas encore la numération des lignes "Totaux"
1536
	private function formatNumerotation(&$TLineTitle, $line_reference='', $level=1, $prefix_num=0)
1537
	{
1538
		$TTitle = array();
1539
		
1540
		$i=1;
1541
		$j=0;
1542
		foreach ($TLineTitle as $k => &$line)
1543
		{
1544
			if (!empty($line_reference) && $line->rang <= $line_reference->rang) continue;
1545
			if (!empty($line_reference) && $line->qty <= $line_reference->qty) break;
1546
			
1547
			if ($line->qty == $level)
1548
			{
1549
				$TTitle[$j]['numerotation'] = ($prefix_num == 0) ? $i : $prefix_num.'.'.$i;
1550
				//var_dump('Prefix == '.$prefix_num.' // '.$line->desc.' ==> numerotation == '.$TTitle[$j]['numerotation'].'   ###    '.$line->qty .'=='. $level);
1551
				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...
1552
				{
1553
					$line->label = !empty($line->desc) ? $line->desc : $line->description;
1554
					$line->desc = $line->description = '';
1555
				}
1556
				
1557
				$line->label = $TTitle[$j]['numerotation'].' '.$line->label;
1558
				$TTitle[$j]['line'] = &$line;
1559
				
1560
				$deep_level = $line->qty;
1561
				do {
1562
					$deep_level++;
1563
					$TTitle[$j]['children'] = $this->formatNumerotation($TLineTitle, $line, $deep_level, $TTitle[$j]['numerotation']);
1564
				} 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
1565
				// Rappel on peux avoir jusqu'a 10 niveau de titre
1566
				
1567
				$i++;
1568
				$j++;
1569
			}
1570
		}
1571
1572
		return $TTitle;
1573
	}
1574
	
1575
	function setDocTVA(&$pdf, &$object) {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

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

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

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

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

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

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

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

1575
	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...
1576
		
1577
		$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

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

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

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

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

1586
	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...
1587
	{
1588
		/**
1589
		 * @var $pdf    TCPDF
1590
		 */
1591
		global $pdf,$conf, $langs;
1592
1593
		// var_dump($object->lines);
1594
		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

1594
		/** @scrutinizer ignore-call */ 
1595
  dol_include_once('/subtotal/class/subtotal.class.php');
Loading history...
1595
1596
		foreach($parameters as $key=>$value) {
1597
			${$key} = $value;
1598
		}
1599
		
1600
		$this->setDocTVA($pdf, $object);
1601
		
1602
		$this->add_numerotation($object);	
1603
		
1604
        foreach($object->lines as $k => &$l) {
1605
            if(TSubtotal::isSubtotal($l)) {
1606
                $parentTitle = TSubtotal::getParentTitleOfLine($object, $k);
1607
                if(! empty($parentTitle->id) && ! empty($parentTitle->array_options['options_show_total_ht'])) {
1608
                    $l->remise_percent = 100;    // Affichage de la réduction sur la ligne de sous-total
1609
                }
1610
            }
1611
        }
1612
1613
		$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

1613
		$hideInnerLines = (int)/** @scrutinizer ignore-call */ GETPOST('hideInnerLines');
Loading history...
1614
		$hidedetails = (int)GETPOST('hidedetails');
1615
1616
		if ($hideInnerLines) { // si c une ligne de titre
1617
	    	$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...
1618
			$TLines =array();
1619
		
1620
			$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...
1621
		    $TTvas = array(); // tableau de tva
1622
		    
1623
			foreach($object->lines as $k=>&$line) 
1624
			{
1625
			    
1626
				if($line->product_type==9 && $line->rowid>0) 
1627
				{
1628
					$fk_parent_line = $line->rowid;
1629
					
1630
					// 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
1631
					if(TSubtotal::isSubtotal($line)) 
1632
					{
1633
						/*$total = $this->getTotalLineFromObject($object, $line, '');
1634
						
1635
						$line->total_ht = $total;
1636
						$line->total = $total;
1637
						*/
1638
						list($total, $total_tva, $total_ttc, $TTotal_tva) = $this->getTotalLineFromObject($object, $line, '', 1);
1639
						
1640
						if (TSubtotal::getNiveau($line) == 1) $line->TTotal_tva = $TTotal_tva;
1641
						$line->total_ht = $total;
1642
						$line->total_tva = $total_tva;
1643
						$line->total = $line->total_ht;
1644
						$line->total_ttc = $total_ttc;
1645
1646
//                        $TTitle = TSubtotal::getParentTitleOfLine($object, $k);
1647
//                        $parentTitle = array_shift($TTitle);
1648
//                        if(! empty($parentTitle->id) && ! empty($parentTitle->array_option['options_show_total_ht'])) {
1649
//                            exit('la?');
1650
//                            $line->remise_percent = 100;    // Affichage de la réduction sur la ligne de sous-total
1651
//                            $line->update();
1652
//                        }
1653
					} 
1654
//                    if(TSub)
1655
						
1656
				} 
1657
			
1658
				if ($hideInnerLines)
1659
				{
1660
				    if(!empty($conf->global->SUBTOTAL_REPLACE_WITH_VAT_IF_HIDE_INNERLINES))
1661
				    {
1662
				        if($line->tva_tx != '0.000' && $line->product_type!=9){
1663
				            
1664
    				        // on remplit le tableau de tva pour substituer les lignes cachées
1665
    				        $TTvas[$line->tva_tx]['total_tva'] += $line->total_tva;
1666
    				        $TTvas[$line->tva_tx]['total_ht'] += $line->total_ht;
1667
    				        $TTvas[$line->tva_tx]['total_ttc'] += $line->total_ttc; 
1668
    				    }
1669
    					if($line->product_type==9 && $line->rowid>0)
1670
    					{
1671
    					    //Cas où je doit cacher les produits et afficher uniquement les sous-totaux avec les titres
1672
    					    // génère des lignes d'affichage des montants HT soumis à tva
1673
    					    $nbtva = count($TTvas);
1674
    					    if(!empty($nbtva)){
1675
    					        foreach ($TTvas as $tx =>$val){
1676
    					            $l = clone $line;
1677
    					            $l->product_type = 1;
1678
    					            $l->special_code = '';
1679
    					            $l->qty = 1;
1680
    					            $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

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

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

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

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

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

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

Loading history...
1757
	{
1758
		/**
1759
		 * @var $pdf    TCPDF
1760
		 */
1761
		global $pdf,$conf;
1762
1763
		foreach($parameters as $key=>$value) {
1764
			${$key} = $value;
1765
		}
1766
		
1767
		$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

1767
		$hideInnerLines = (int)/** @scrutinizer ignore-call */ GETPOST('hideInnerLines');
Loading history...
1768
		$hidedetails = (int)GETPOST('hidedetails');
0 ignored issues
show
Unused Code introduced by
The assignment to $hidedetails is dead and can be removed.
Loading history...
1769
		
1770
		if($this->isModSubtotalLine($parameters,$object) ){			
1771
		
1772
				global $hideprices;
1773
				
1774
				if(!empty($hideprices)) {
1775
					foreach($object->lines as &$line) {
1776
						if($line->fk_product_type!=9) $line->fk_parent_line = -1;	
1777
					}
1778
				}
1779
			
1780
				$line = &$object->lines[$i];
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $i seems to be never defined.
Loading history...
1781
				
1782
				if($line->info_bits>0) { // PAGE BREAK
1783
					$pdf->addPage();
1784
					$posy = $pdf->GetY();
1785
				}
1786
				
1787
				$label = $line->label;
1788
				$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...
1789
				
1790
				if(empty($label)) {
1791
					$label = $description;
1792
					$description='';
1793
				}
1794
				
1795
				if($line->qty>90) {
1796
					
1797
					if ($conf->global->SUBTOTAL_USE_NEW_FORMAT)	$label .= ' '.$this->getTitle($object, $line);
1798
					
1799
					$pageBefore = $pdf->getPage();
1800
					$this->pdf_add_total($pdf,$object, $line, $label, $description,$posx, $posy, $w, $h);
0 ignored issues
show
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...
Comprehensibility Best Practice introduced by
The variable $h seems to be never defined.
Loading history...
1801
					$pageAfter = $pdf->getPage();	
1802
1803
					if($pageAfter>$pageBefore) {
1804
						//print "ST $pageAfter>$pageBefore<br>";
1805
						$pdf->rollbackTransaction(true);	
1806
						$pdf->addPage('','', true);
1807
						$posy = $pdf->GetY();
1808
						$this->pdf_add_total($pdf,$object, $line, $label, $description,$posx, $posy, $w, $h);
1809
						$posy = $pdf->GetY();
0 ignored issues
show
Unused Code introduced by
The assignment to $posy is dead and can be removed.
Loading history...
1810
						//print 'add ST'.$pdf->getPage().'<br />';
1811
					}
1812
				
1813
					$posy = $pdf->GetY();
1814
					return 1;
1815
				}	
1816
				else if ($line->qty < 10) {
1817
					$pageBefore = $pdf->getPage();
0 ignored issues
show
Unused Code introduced by
The assignment to $pageBefore is dead and can be removed.
Loading history...
1818
1819
					$this->pdf_add_title($pdf,$object, $line, $label, $description,$posx, $posy, $w, $h); 
1820
					$pageAfter = $pdf->getPage();	
0 ignored issues
show
Unused Code introduced by
The assignment to $pageAfter is dead and can be removed.
Loading history...
1821
1822
					
1823
					/*if($pageAfter>$pageBefore) {
1824
						print "T $pageAfter>$pageBefore<br>";
1825
						$pdf->rollbackTransaction(true);
1826
						$pdf->addPage('','', true);
1827
						print 'add T'.$pdf->getPage().' '.$line->rowid.' '.$pdf->GetY().' '.$posy.'<br />';
1828
						
1829
						$posy = $pdf->GetY();
1830
						$this->pdf_add_title($pdf,$object, $line, $label, $description,$posx, $posy, $w, $h);
1831
						$posy = $pdf->GetY();
1832
					}
1833
				*/
1834
					$posy = $pdf->GetY();
1835
					return 1;
1836
				}
1837
//	if($line->rowid==47) exit;
1838
			
1839
			return 0;
1840
		}
1841
		elseif (empty($object->lines[$parameters['i']]))
1842
		{
1843
			$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...
1844
		}
1845
1846
		/* TODO je desactive parce que je comprends pas PH Style, mais à test
1847
		else {
1848
			
1849
			if($hideInnerLines) {
1850
				$pdf->rollbackTransaction(true);
1851
			}
1852
			else {
1853
				$labelproductservice=pdf_getlinedesc($object, $i, $outputlangs, $hideref, $hidedesc, $issupplierline);
1854
				$pdf->writeHTMLCell($w, $h, $posx, $posy, $outputlangs->convToOutputCharset($labelproductservice), 0, 1);
1855
			}
1856
			
1857
		}*/
1858
1859
1860
		
1861
	}
1862
1863
	/**
1864
	 * Permet de récupérer le titre lié au sous-total
1865
	 * 
1866
	 * @return string
1867
	 */
1868
	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...
1869
	{
1870
		$res = '';
1871
		
1872
		foreach ($object->lines as $line)
1873
		{
1874
			if ($line->id == $currentLine->id) break;
1875
			
1876
			$qty_search = 100 - $currentLine->qty;
1877
			
1878
			if ($line->product_type == 9 && $line->special_code == $this->module_number && $line->qty == $qty_search) 
1879
			{
1880
				$res = ($line->label) ? $line->label : (($line->description) ? $line->description : $line->desc);
1881
			}
1882
		}
1883
		
1884
		return $res;
1885
	}
1886
	
1887
	/**
1888
	 * @param $parameters   array
1889
	 * @param $object       CommonObject
1890
	 * @param $action       string
1891
	 * @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...
1892
	 * @return int
1893
	 */
1894
	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...
1895
		
1896
		global $conf,$langs,$user,$db,$bc;
1897
		
1898
		$num = &$parameters['num'];
1899
		$line = &$parameters['line'];
1900
		$i = &$parameters['i'];
1901
		
1902
		$var = &$parameters['var'];
1903
1904
		$contexts = explode(':',$parameters['context']);
1905
1906
		$createRight = $user->rights->{$object->element}->creer;
1907
		if($object->element == 'facturerec' )
1908
		{
1909
			$object->statut = 0; // hack for facture rec
1910
			$createRight = $user->rights->facture->creer;
1911
		}
1912
		elseif($object->element == 'order_supplier' )
1913
		{
1914
		    $createRight = $user->rights->fournisseur->commande->creer;
1915
		}
1916
		elseif($object->element == 'invoice_supplier' )
1917
		{
1918
		    $createRight = $user->rights->fournisseur->facture->creer;
1919
		}
1920
		
1921
		if($line->special_code!=$this->module_number || $line->product_type!=9) {
1922
			null;
1923
		}	
1924
		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)) 
1925
        {
1926
			if($object->element=='facture')$idvar = 'facid';
1927
			else $idvar='id';
1928
			
1929
			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...
1930
			{
1931
				?>
1932
				<script type="text/javascript">
1933
					$(document).ready(function() {
1934
						$('#tablelines tr[rel=subtotal]').mouseleave(function() {
1935
1936
							id_line =$(this).attr('id');
1937
1938
							$(this).find('td[rel=subtotal_total]').each(function() {
1939
								$.get(document.location.href, function(data) {
1940
									var total = $(data).find('#tablelines tr#'+id_line+' td[rel=subtotal_total]').html();
1941
1942
									$('#tablelines tr#'+id_line+' td[rel=subtotal_total]').html(total);
1943
1944
								});
1945
							});
1946
						});
1947
					});
1948
1949
				</script>
1950
				<?php
1951
			}
1952
			
1953
			if(empty($line->description)) $line->description = $line->desc;
1954
			
1955
			$colspan = 5;
1956
			if($object->element == 'facturerec' ) $colspan = 3;
1957
			if($object->element == 'order_supplier') $colspan = 3;
1958
			if($object->element == 'invoice_supplier') $colspan = 4;
1959
			if($object->element == 'supplier_proposal') $colspan = 4;
1960
			if(!empty($conf->multicurrency->enabled)) $colspan+=2;
1961
			if($object->element == 'commande' && $object->statut < 3 && !empty($conf->shippableorder->enabled)) $colspan++;
1962
			if(!empty($conf->margin->enabled)) $colspan++;
1963
			if(!empty($conf->global->DISPLAY_MARGIN_RATES)) $colspan++;
1964
			if(!empty($conf->global->DISPLAY_MARK_RATES)) $colspan++;
1965
			if($object->element == 'facture' && !empty($conf->global->INVOICE_USE_SITUATION) && $object->type == Facture::TYPE_SITUATION) $colspan++;
1966
			if(!empty($conf->global->PRODUCT_USE_UNITS)) $colspan++;
1967
					
1968
			/* Titre */
1969
			//var_dump($line);
1970
            
1971
			// HTML 5 data for js
1972
            $data = $this->_getHtmlData($parameters, $object, $action, $hookmanager);
1973
            
1974
			
1975
			?>
1976
			<tr <?php echo $bc[$var]; $var=!$var; echo $data; ?> rel="subtotal" id="row-<?php echo $line->id ?>" style="<?php
1977
					if (!empty($conf->global->SUBTOTAL_USE_NEW_FORMAT))
1978
					{
1979
						if($line->qty==99) print 'background:#adadcf';
1980
						else if($line->qty==98) print 'background:#ddddff;';
1981
						else if($line->qty<=97 && $line->qty>=91) print 'background:#eeeeff;';
1982
						else if($line->qty==1) print 'background:#adadcf;';
1983
						else if($line->qty==2) print 'background:#ddddff;';
1984
						else if($line->qty==50) print '';
1985
						else print 'background:#eeeeff;';
1986
1987
						//A compléter si on veux plus de nuances de couleurs avec les niveau 4,5,6,7,8 et 9
1988
					}
1989
					else 
1990
					{
1991
						if($line->qty==99) print 'background:#ddffdd';
1992
						else if($line->qty==98) print 'background:#ddddff;';
1993
						else if($line->qty==2) print 'background:#eeeeff; ';
1994
						else if($line->qty==50) print '';
1995
						else print 'background:#eeffee;' ;
1996
					}
1997
1998
			?>;">
1999
			
2000
				<td colspan="<?php echo $colspan; ?>" style="<?php TSubtotal::isFreeText($line) ? '' : 'font-weight:bold;'; ?>  <?php echo ($line->qty>90)?'text-align:right':'' ?> "><?php
2001
					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

2001
					if($action=='editline' && /** @scrutinizer ignore-call */ GETPOST('lineid') == $line->id && TSubtotal::isModSubtotalLine($line) ) {
Loading history...
2002
2003
						$params=array('line'=>$line);
2004
						$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...
2005
						
2006
						echo '<div id="line_'.$line->id.'"></div>'; // Imitation Dolibarr
2007
						echo '<input type="hidden" value="'.$line->id.'" name="lineid">';
2008
						echo '<input id="product_type" type="hidden" value="'.$line->product_type.'" name="type">';
2009
						echo '<input id="product_id" type="hidden" value="'.$line->fk_product.'" name="type">';
2010
						echo '<input id="special_code" type="hidden" value="'.$line->special_code.'" name="type">';
2011
2012
						$isFreeText=false;
2013
						if (TSubtotal::isTitle($line))
2014
						{
2015
							$qty_displayed = $line->qty;
2016
							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

2016
							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...
2017
							
2018
						}
2019
						else if (TSubtotal::isSubtotal($line))
2020
						{
2021
							$qty_displayed = 100 - $line->qty;
2022
							print img_picto('', 'subsubtotal2@subtotal').'<span style="font-size:9px;margin-left:-1px;color:#0075DE;">'.$qty_displayed.'</span>&nbsp;&nbsp;';
2023
						}
2024
						else
2025
						{
2026
							$isFreeText = true;
2027
						}
2028
						
2029
						if ($object->element == 'order_supplier' || $object->element == 'invoice_supplier') {
2030
						    $line->label = !empty($line->description) ? $line->description : $line->desc;
2031
						    $line->description = '';
2032
						}
2033
						$newlabel = $line->label;
2034
						if($line->label=='' && !$isFreeText) {
2035
							if(TSubtotal::isSubtotal($line)) {
2036
								$newlabel = $line->description.' '.$this->getTitle($object, $line);
2037
								$line->description='';
2038
							} elseif( (float)DOL_VERSION < 6 ) {
2039
								$newlabel= $line->description;
2040
								$line->description='';
2041
							}
2042
						}
2043
2044
						$readonlyForSituation = '';
2045
						if (!empty($object->situation_cycle_ref) && $object->situation_counter > 1) $readonlyForSituation = 'readonly';
2046
						
2047
						if (!$isFreeText) echo '<input type="text" name="line-title" id-line="'.$line->id.'" value="'.$newlabel.'" size="80" '.$readonlyForSituation.'/>&nbsp;';
2048
						
2049
						if (!empty($conf->global->SUBTOTAL_USE_NEW_FORMAT) && (TSubtotal::isTitle($line) || TSubtotal::isSubtotal($line)) )
2050
						{
2051
							$select = '<select name="subtotal_level">';
2052
							for ($j=1; $j<10; $j++)
2053
							{
2054
								if (!empty($readonlyForSituation)) {
2055
									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...
2056
								} else $select .= '<option '.($qty_displayed == $j ? 'selected="selected"' : '').' value="'.$j.'">'.$langs->trans('Level').' '.$j.'</option>';
2057
							}
2058
							$select .= '</select>&nbsp;';
2059
2060
							echo $select;
2061
						}
2062
						
2063
2064
						echo '<div class="subtotal_underline" style="margin-left:24px; line-height: 25px;">';
2065
                        echo '<div>';
2066
                        echo '<input style="vertical-align:sub;"  type="checkbox" name="line-pagebreak" id="subtotal-pagebreak" value="8" '.(($line->info_bits > 0) ? 'checked="checked"' : '') .' />&nbsp;';
2067
                        echo '<label for="subtotal-pagebreak">'.$langs->trans('AddBreakPageBefore').'</label>';
2068
                        echo '</div>';
2069
2070
                        if (TSubtotal::isTitle($line))
2071
                        {
2072
                            $form = new Form($db);
2073
                            echo '<div>';
2074
                            echo '<label for="subtotal_tva_tx">'.$form->textwithpicto($langs->trans('subtotal_apply_default_tva'), $langs->trans('subtotal_apply_default_tva_help')).'</label>';
2075
                            echo '<select id="subtotal_tva_tx" name="subtotal_tva_tx" class="flat"><option selected="selected" value="">-</option>';
2076
                            if (empty($readonlyForSituation)) echo str_replace('selected', '', $form->load_tva('subtotal_tva_tx', '', $parameters['seller'], $parameters['buyer'], 0, 0, '', true));
2077
                            echo '</select>';
2078
                            echo '</div>';
2079
2080
                            if (!empty($conf->global->INVOICE_USE_SITUATION) && $object->element == 'facture' && $object->type == Facture::TYPE_SITUATION)
2081
                            {
2082
                                echo '<div>';
2083
                                echo '<label for="subtotal_progress">'.$langs->trans('subtotal_apply_progress').'</label> <input id="subtotal_progress" name="subtotal_progress" value="" size="1" />%';
2084
                                echo '</div>';
2085
                            }
2086
                            echo '<div>';
2087
                            echo '<input style="vertical-align:sub;"  type="checkbox" name="line-showTotalHT" id="subtotal-showTotalHT" value="9" '.(($line->array_options['options_show_total_ht'] > 0) ? 'checked="checked"' : '') .' />&nbsp;';
2088
                            echo '<label for="subtotal-showTotalHT">'.$langs->trans('ShowTotalHTOnSubtotalBlock').'</label>';
2089
                            echo '</div>';
2090
2091
                            echo '<div>';
2092
                            echo '<input style="vertical-align:sub;"  type="checkbox" name="line-showReduc" id="subtotal-showReduc" value="1" '.(($line->array_options['options_show_reduc'] > 0) ? 'checked="checked"' : '') .' />&nbsp;';
2093
                            echo '<label for="subtotal-showReduc">'.$langs->trans('ShowReducOnSubtotalBlock').'</label>';
2094
                            echo '</div>';
2095
                        }
2096
                        else if ($isFreeText) echo TSubtotal::getFreeTextHtml($line, (bool) $readonlyForSituation);
2097
						echo '</div>';
2098
2099
						if($line->qty<10) {
2100
							// WYSIWYG editor
2101
							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...
2102
							$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...
2103
							$cked_enabled = (!empty($conf->global->FCKEDITOR_ENABLE_DETAILS) ? $conf->global->FCKEDITOR_ENABLE_DETAILS : 0);
2104
							if (!empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) {
2105
								$nbrows = $conf->global->MAIN_INPUT_DESC_HEIGHT;
2106
							}
2107
							$toolbarname = 'dolibarr_details';
2108
							if (!empty($conf->global->FCKEDITOR_ENABLE_DETAILS_FULL)) {
2109
								$toolbarname = 'dolibarr_notes';
2110
							}
2111
							$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...
2112
								false, true, $cked_enabled, $nbrows, '98%', (bool) $readonlyForSituation);
2113
							$doleditor->Create();
2114
						}
2115
						
2116
					}
2117
					else {
2118
2119
						 if ($conf->global->SUBTOTAL_USE_NEW_FORMAT)
2120
						 {
2121
							if(TSubtotal::isTitle($line) || TSubtotal::isSubtotal($line)) 
2122
							{
2123
								echo str_repeat('&nbsp;&nbsp;&nbsp;', $line->qty-1);
2124
								
2125
								if (TSubtotal::isTitle($line)) print img_picto('', 'subtotal@subtotal').'<span style="font-size:9px;margin-left:-3px;">'.$line->qty.'</span>&nbsp;&nbsp;';
2126
								else print img_picto('', 'subtotal2@subtotal').'<span style="font-size:9px;margin-left:-1px;">'.(100-$line->qty).'</span>&nbsp;&nbsp;';
2127
							}
2128
						 }
2129
						 else 
2130
						 {
2131
							if($line->qty<=1) print img_picto('', 'subtotal@subtotal');
2132
							else if($line->qty==2) print img_picto('', 'subsubtotal@subtotal').'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'; 
2133
						 }
2134
						 
2135
						 
2136
						 // Get display styles and apply them
2137
						 $titleStyleItalic = strpos($conf->global->SUBTOTAL_TITLE_STYLE, 'I') === false ? '' : ' font-style: italic;';
2138
						 $titleStyleBold =  strpos($conf->global->SUBTOTAL_TITLE_STYLE, 'B') === false ? '' : ' font-weight:bold;';
2139
						 $titleStyleUnderline =  strpos($conf->global->SUBTOTAL_TITLE_STYLE, 'U') === false ? '' : ' text-decoration: underline;';
2140
						 
2141
						 if (empty($line->label)) {
2142
							if ($line->qty >= 91 && $line->qty <= 99 && $conf->global->SUBTOTAL_USE_NEW_FORMAT) print  $line->description.' '.$this->getTitle($object, $line);
2143
							else print  $line->description;
2144
						 } 
2145
						 else {
2146
2147
							if (! empty($conf->global->PRODUIT_DESC_IN_FORM) && !empty($line->description)) {
2148
								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

2148
								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...
2149
							}
2150
							else{
2151
								print '<span class="subtotal_label classfortooltip '.$titleStyleItalic.$titleStyleBold.$titleStyleUnderline.'" title="'.$line->description.'">'.$line->label.'</span>';    
2152
							}
2153
2154
						 } 
2155
						if($line->qty>90) print ' : ';
2156
						if($line->info_bits > 0) echo img_picto($langs->trans('Pagebreak'), 'pagebreak@subtotal');
2157
2158
						 
2159
2160
2161
					}
2162
			?></td>
2163
					 
2164
			<?php
2165
				if($line->qty>90) {
2166
					/* Total */
2167
					$total_line = $this->getTotalLineFromObject($object, $line, '');
2168
					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

2168
					echo '<td class="nowrap liencolht" align="right" style="font-weight:bold;" rel="subtotal_total">'./** @scrutinizer ignore-call */ price($total_line).'</td>';
Loading history...
2169
				} else {
2170
					echo '<td class="liencolht movetitleblock" >&nbsp;</td>';
2171
				}	
2172
			?>
2173
					
2174
			<td align="center" class="nowrap linecoledit">
2175
				<?php
2176
				if ($action != 'selectlines') {
2177
				
2178
					if($action=='editline' && GETPOST('lineid') == $line->id && TSubtotal::isModSubtotalLine($line) ) {
2179
						?>
2180
						<input id="savelinebutton" class="button" type="submit" name="save" value="<?php echo $langs->trans('Save') ?>" />
2181
						<br />
2182
						<input class="button" type="button" name="cancelEditlinetitle" value="<?php echo $langs->trans('Cancel') ?>" />
2183
						<script type="text/javascript">
2184
							$(document).ready(function() {
2185
								$('input[name=cancelEditlinetitle]').click(function () {
2186
									document.location.href="<?php echo '?'.$idvar.'='.$object->id ?>";
2187
								});
2188
							});
2189
2190
						</script>
2191
						<?php
2192
						
2193
					}
2194
					else{
2195
						if ($object->statut == 0  && $createRight && !empty($conf->global->SUBTOTAL_ALLOW_DUPLICATE_BLOCK) && $object->element !== 'invoice_supplier')
2196
						{
2197
							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>';
2198
						}
2199
2200
						if ($object->statut == 0  && $createRight && !empty($conf->global->SUBTOTAL_ALLOW_EDIT_BLOCK)) 
2201
						{
2202
							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

2202
							echo '<a href="'.$_SERVER['PHP_SELF'].'?'.$idvar.'='.$object->id.'&action=editline&lineid='.$line->id.'">'./** @scrutinizer ignore-call */ img_edit().'</a>';
Loading history...
2203
						}								
2204
					}
2205
					
2206
				}
2207
					
2208
				?>
2209
			</td>
2210
2211
			<td align="center" nowrap="nowrap" class="linecoldelete">	
2212
				<?php
2213
2214
				if ($action != 'editline' && $action != 'selectlines') {
2215
						if ($object->statut == 0  && $createRight && !empty($conf->global->SUBTOTAL_ALLOW_REMOVE_BLOCK))
2216
						{
2217
2218
							if ($object->situation_counter == 1 || !$object->situation_cycle_ref)
2219
							{
2220
								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

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

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

2332
	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...
2333
		global $conf,$langs;
2334
		 
2335
		if ($object->statut == 0 && !empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && $action != 'editline')
2336
		{
2337
		    
2338
		    if($object->element == 'invoice_supplier' || $object->element == 'order_supplier')
2339
		    {
2340
		        foreach ($object->lines as $line)
2341
		        {
2342
		            // fetch optionals attributes and labels
2343
		            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...
2344
		            $extrafields=new ExtraFields($this->db);
2345
		            $extralabels=$extrafields->fetch_name_optionals_label($object->table_element_line,true);
2346
		            $line->fetch_optionals($line->id,$extralabels);
2347
		        }
2348
		    }
2349
		    
2350
			$TSubNc = array();
2351
			foreach ($object->lines as &$l)
2352
			{
2353
				$TSubNc[$l->id] = (int) $l->array_options['options_subtotal_nc'];
2354
			}
2355
			
2356
			$form = new Form($db);
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $db seems to be never defined.
Loading history...
2357
			?>
2358
			<script type="text/javascript">
2359
				$(function() {
2360
					var subtotal_TSubNc = <?php echo json_encode($TSubNc); ?>;
2361
					$("#tablelines tbody > tr").each(function(i, item) {
2362
						if ($(item).children('.subtotal_nc').length == 0)
2363
						{
2364
							var id = $(item).attr('id');
2365
							
2366
							if ((typeof id != 'undefined' && id.indexOf('row-') >= 0) || $(item).hasClass('liste_titre'))
2367
							{
2368
								$(item).children('td:last-child').before('<td class="subtotal_nc"></td>');
2369
								
2370
								if ($(item).attr('rel') != 'subtotal' && typeof $(item).attr('id') != 'undefined')
2371
								{
2372
									var idSplit = $(item).attr('id').split('-');
2373
									$(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"' : '')+' />'));
2374
								}
2375
							}
2376
							else 
2377
							{
2378
								$(item).append('<td class="subtotal_nc"></td>');
2379
							}
2380
						}
2381
					});
2382
					
2383
					$('#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'))); ?>);
2384
					
2385
					function callAjaxUpdateLineNC(set, lineid, subtotal_nc)
2386
					{
2387
						$.ajax({
2388
							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

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

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

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

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

2419
	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

2419
	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...
2420
	{
2421
		global $conf;
2422
		
2423
		$object = $parameters['object'];
2424
		
2425
		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'))
2426
		{
2427
			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

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

2428
				/** @scrutinizer ignore-call */ 
2429
    dol_include_once('/subtotal/class/subtotal.class.php');
Loading history...
2429
				TSubtotal::addRecapPage($parameters, $pdf);
2430
			}
2431
		}
2432
	}
2433
	
2434
	// HTML 5 data for js
2435
	private function _getHtmlData($parameters, &$object, &$action, $hookmanager)
2436
	{
2437
		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

2437
		/** @scrutinizer ignore-call */ 
2438
  dol_include_once('/subtotal/class/subtotal.class.php');
Loading history...
2438
2439
	    $line = &$parameters['line'];
2440
	    
2441
	    $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...
2442
	    $ThtmlData['data-product_type'] = $line->product_type;
2443
	    $ThtmlData['data-qty']          = 0; //$line->qty;
2444
	    $ThtmlData['data-level']        = TSubtotal::getNiveau($line);
2445
	    
2446
	    if(TSubtotal::isTitle($line)){
2447
	        $ThtmlData['data-issubtotal'] = 'title';
2448
	    }elseif(TSubtotal::isSubtotal($line)){
2449
	        $ThtmlData['data-issubtotal'] = 'subtotal';
2450
	    }
2451
	    else{
2452
	        $ThtmlData['data-issubtotal'] = 'freetext';
2453
	    }
2454
	    
2455
	    
2456
	    // Change or add data  from hooks
2457
	    $parameters = array_replace($parameters , array(  'ThtmlData' => $ThtmlData )  );
2458
	    
2459
	    // hook 
2460
	    $reshook = $hookmanager->executeHooks('subtotalLineHtmlData',$parameters,$object,$action); // Note that $action and $object may have been modified by hook
2461
	    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

2461
	    if ($reshook < 0) /** @scrutinizer ignore-call */ setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
Loading history...
2462
	    if ($reshook>0)
2463
	    {
2464
	        $ThtmlData = $hookmanager->resArray;
2465
	    }
2466
2467
	    return $this->implodeHtmlData($ThtmlData);
2468
	
2469
	}
2470
	
2471
	
2472
	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...
2473
	{
2474
	    $data = '';
2475
	    foreach($ThtmlData as $k => $h )
2476
	    {
2477
	        if(is_array($h))
2478
	        {
2479
	            $h = json_encode($h);
2480
	        }
2481
	        
2482
	        $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

2482
	        $data .= $k . '="'./** @scrutinizer ignore-call */ dol_htmlentities($h, ENT_QUOTES).'" ';
Loading history...
2483
	    }
2484
	    
2485
	    return $data;
2486
	}
2487
	
2488
	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...
2489
	{
2490
	    global $conf,$tagidfortablednd,$filepath,$langs;
2491
	    
2492
	    /*
2493
	     * this part of js is base on dolibarr htdocs/core/tpl/ajaxrow.tpl.php 
2494
	     * for compatibility reasons we don't use tableDnD but jquery sortable
2495
	     */
2496
	    
2497
	    $id=$object->id;
0 ignored issues
show
Unused Code introduced by
The assignment to $id is dead and can be removed.
Loading history...
2498
	    $nboflines=(isset($object->lines)?count($object->lines):0);
2499
	    $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...
2500
	    
2501
	    $id=$object->id;
2502
	    $fk_element=$object->fk_element;
2503
	    $table_element_line=$object->table_element_line;
2504
	    $nboflines=(isset($object->lines)?count($object->lines):(empty($nboflines)?0:$nboflines));
2505
	    $tagidfortablednd=(empty($tagidfortablednd)?'tablelines':$tagidfortablednd);
2506
	    $filepath=(empty($filepath)?'':$filepath);
2507
	    
2508
	    
2509
	    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

2509
	    if (/** @scrutinizer ignore-call */ GETPOST('action','aZ09') != 'editline' && $nboflines > 1)
Loading history...
2510
	    {
2511
	        
2512
	        ?>
2513
		
2514
		
2515
			<script type="text/javascript">
2516
			$(document).ready(function(){
2517
2518
				// target some elements
2519
				var titleRow = $('tr[data-issubtotal="title"]');
2520
				var lastTitleCol = titleRow.find('td:last-child');
2521
				var moveBlockCol= titleRow.find('td.liencolht');
2522
2523
				
2524
				moveBlockCol.disableSelection(); // prevent selection
2525
<?php if ($object->statut == 0) { ?>
2526
				// apply some graphical stuff
2527
				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

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