Completed
Push — master ( 458bae...eeda68 )
by
unknown
13s queued 11s
created

ActionsSubtotal::pdf_getlineremisepercent()   C

Complexity

Conditions 13
Paths 24

Size

Total Lines 40
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 13
eloc 21
c 1
b 0
f 1
nc 24
nop 3
dl 0
loc 40
rs 6.6166

How to fix   Complexity   

Long Method

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

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

Commonly applied refactorings include:

1
<?php
2
class ActionsSubtotal
3
{
4
	
5
	function __construct($db)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

filter:
    dependency_paths: ["lib/*"]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

filter:
    dependency_paths: ["lib/*"]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

filter:
    dependency_paths: ["lib/*"]

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

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

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

filter:
    dependency_paths: ["lib/*"]

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

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

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

filter:
    dependency_paths: ["lib/*"]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

filter:
    dependency_paths: ["lib/*"]

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

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

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

filter:
    dependency_paths: ["lib/*"]

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

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

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

filter:
    dependency_paths: ["lib/*"]

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

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

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

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

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

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

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

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

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

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

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

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

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

filter:
    dependency_paths: ["lib/*"]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1381
                    $this->resprints = /** @scrutinizer ignore-call */ price($TTotal['total_ht'] / $TTotal['total_subprice']*100, 0, '', 1, 2, 2).'%';
Loading history...
1382
                }
1383
            }
1384
		
1385
			if((float)DOL_VERSION<=3.6) {
0 ignored issues
show
Bug introduced by
The constant DOL_VERSION was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
1386
				return '';
1387
			}
1388
			else if((float)DOL_VERSION>=3.8) {
1389
				return 1;
1390
			}
1391
		}
1392
		elseif (!empty($hideprices)
1393
		        || (!empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && (!empty($object->lines[$i]->array_options['options_subtotal_nc']) || TSubtotal::hasNcTitle($object->lines[$i])) )
1394
		        )
1395
		    {
1396
		        if (!empty($hideprices) || !in_array(__FUNCTION__, explode(',', $conf->global->SUBTOTAL_TFIELD_TO_KEEP_WITH_NC)))
1397
		        {
1398
		            $this->resprints = ' ';
1399
		            return 1;
1400
		        }
1401
		    }
1402
		
1403
		return 0;
1404
	}
1405
	
1406
	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

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

1478
		    if(TSubtotal::getParentTitleOfLine($object, $i) && TSubtotal::titleHasTotalLine($object, /** @scrutinizer ignore-type */ $lineTitle, true))
Loading history...
1479
		    {
1480
		        
1481
		        $this->resprints = ' ';
1482
		        
1483
		        // currentcontext à modifier celon l'appel
1484
		        $params = array('parameters' => $parameters, 'currentmethod' => 'pdf_getlinevatrate', 'currentcontext'=>'subtotal_hideprices', 'i' => $i);
1485
		        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)
1486
		    }
1487
		}
1488
		
1489
		return 0;
1490
	}
1491
		
1492
	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

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

1581
	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

1581
	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...
1582
		
1583
		$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

1583
		$hidedetails = (int)/** @scrutinizer ignore-call */ GETPOST('hidedetails');
Loading history...
1584
		
1585
		if(empty($hidedetails)) return false;
1586
		
1587
		// TODO can't add VAT to document without lines... :-/
1588
		
1589
		return true;
1590
	}
1591
	
1592
	function beforePDFCreation($parameters=array(), &$object, &$action)
0 ignored issues
show
Unused Code introduced by
The parameter $action is not used and could be removed. ( Ignorable by Annotation )

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

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

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

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

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

Loading history...
1593
	{
1594
		/**
1595
		 * @var $pdf    TCPDF
1596
		 */
1597
		global $pdf,$conf, $langs;
1598
1599
		// var_dump($object->lines);
1600
		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

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

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

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

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

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

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

1762
	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...
1763
	{
1764
		/**
1765
		 * @var $pdf    TCPDF
1766
		 */
1767
		global $pdf,$conf;
1768
1769
		foreach($parameters as $key=>$value) {
1770
			${$key} = $value;
1771
		}
1772
		
1773
		$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

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

2013
					if($action=='editline' && /** @scrutinizer ignore-call */ GETPOST('lineid') == $line->id && TSubtotal::isModSubtotalLine($line) ) {
Loading history...
2014
2015
						$params=array('line'=>$line);
2016
						$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...
2017
						
2018
						echo '<div id="line_'.$line->id.'"></div>'; // Imitation Dolibarr
2019
						echo '<input type="hidden" value="'.$line->id.'" name="lineid">';
2020
						echo '<input id="product_type" type="hidden" value="'.$line->product_type.'" name="type">';
2021
						echo '<input id="product_id" type="hidden" value="'.$line->fk_product.'" name="type">';
2022
						echo '<input id="special_code" type="hidden" value="'.$line->special_code.'" name="type">';
2023
2024
						$isFreeText=false;
2025
						if (TSubtotal::isTitle($line))
2026
						{
2027
							$qty_displayed = $line->qty;
2028
							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

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

2160
								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...
2161
							}
2162
							else{
2163
								print '<span class="subtotal_label classfortooltip '.$titleStyleItalic.$titleStyleBold.$titleStyleUnderline.'" title="'.$line->description.'">'.$line->label.'</span>';    
2164
							}
2165
2166
						 } 
2167
						if($line->qty>90) print ' : ';
2168
						if($line->info_bits > 0) echo img_picto($langs->trans('Pagebreak'), 'pagebreak@subtotal');
2169
2170
						 
2171
2172
2173
					}
2174
			?></td>
2175
					 
2176
			<?php
2177
				if($line->qty>90) {
2178
					/* Total */
2179
					$total_line = $this->getTotalLineFromObject($object, $line, '');
2180
					echo '<td class="linecolht nowrap" 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

2180
					echo '<td class="linecolht nowrap" align="right" style="font-weight:bold;" rel="subtotal_total">'./** @scrutinizer ignore-call */ price($total_line).'</td>';
Loading history...
2181
					if (!empty($conf->multicurrency->enabled) && ((float) DOL_VERSION < 8.0 || $object->multicurrency_code != $conf->currency)) {
2182
						echo '<td class="linecoltotalht_currency">&nbsp;</td>';
2183
					}
2184
				} else {
2185
					echo '<td class="linecolht movetitleblock">&nbsp;</td>';
2186
					if (!empty($conf->multicurrency->enabled) && ((float) DOL_VERSION < 8.0 || $object->multicurrency_code != $conf->currency)) {
2187
						echo '<td class="linecoltotalht_currency">&nbsp;</td>';
2188
					}
2189
				}	
2190
			?>
2191
					
2192
			<td align="center" class="nowrap linecoledit">
2193
				<?php
2194
				if ($action != 'selectlines') {
2195
				
2196
					if($action=='editline' && GETPOST('lineid') == $line->id && TSubtotal::isModSubtotalLine($line) ) {
2197
						?>
2198
						<input id="savelinebutton" class="button" type="submit" name="save" value="<?php echo $langs->trans('Save') ?>" />
2199
						<br />
2200
						<input class="button" type="button" name="cancelEditlinetitle" value="<?php echo $langs->trans('Cancel') ?>" />
2201
						<script type="text/javascript">
2202
							$(document).ready(function() {
2203
								$('input[name=cancelEditlinetitle]').click(function () {
2204
									document.location.href="<?php echo '?'.$idvar.'='.$object->id ?>";
2205
								});
2206
							});
2207
2208
						</script>
2209
						<?php
2210
						
2211
					}
2212
					else{
2213
						if ($object->statut == 0  && $createRight && !empty($conf->global->SUBTOTAL_ALLOW_DUPLICATE_BLOCK) && $object->element !== 'invoice_supplier')
2214
						{
2215
							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>';
2216
						}
2217
2218
						if ($object->statut == 0  && $createRight && !empty($conf->global->SUBTOTAL_ALLOW_EDIT_BLOCK)) 
2219
						{
2220
							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

2220
							echo '<a href="'.$_SERVER['PHP_SELF'].'?'.$idvar.'='.$object->id.'&action=editline&lineid='.$line->id.'">'./** @scrutinizer ignore-call */ img_edit().'</a>';
Loading history...
2221
						}								
2222
					}
2223
					
2224
				}
2225
					
2226
				?>
2227
			</td>
2228
2229
			<td align="center" class="nowrap linecoldelete">	
2230
				<?php
2231
2232
				if ($action != 'editline' && $action != 'selectlines') {
2233
						if ($object->statut == 0  && $createRight && !empty($conf->global->SUBTOTAL_ALLOW_REMOVE_BLOCK))
2234
						{
2235
2236
							if ($object->situation_counter == 1 || !$object->situation_cycle_ref)
2237
							{
2238
								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

2238
								echo '<a href="'.$_SERVER['PHP_SELF'].'?'.$idvar.'='.$object->id.'&action=ask_deleteline&lineid='.$line->id.'">'./** @scrutinizer ignore-call */ img_delete().'</a>';
Loading history...
2239
							}
2240
2241
							if(TSubtotal::isTitle($line) && ($object->situation_counter == 1 || !$object->situation_cycle_ref) )
2242
							{
2243
								if ((float) DOL_VERSION >= 8.0) {
2244
									$img_delete = img_delete($langs->trans('deleteWithAllLines'), ' class="pictodelete pictodeleteallline"');
2245
								} elseif ((float) DOL_VERSION >= 3.8) {
2246
									$img_delete = img_picto($langs->trans('deleteWithAllLines'), 'delete_all.3.8@subtotal',' class="pictodelete" ');
2247
								} else {
2248
									$img_delete = img_picto($langs->trans('deleteWithAllLines'), 'delete_all@subtotal');
2249
								}
2250
2251
								echo '<a href="'.$_SERVER['PHP_SELF'].'?'.$idvar.'='.$object->id.'&action=ask_deleteallline&lineid='.$line->id.'">'.$img_delete.'</a>';
2252
2253
								/* Depuis la 8.0, les icônes "standard" utilisent FontAwesome et sont préconfigurées selon la clé de l'image
2254
								 * Impossible d'en customiser par exemple la couleur, même en utilisant img_picto() directement
2255
								 */
2256
								if((float) DOL_VERSION >= 8.0) {
2257
								?>
2258
								<script>
2259
									$(document).ready(function () {
2260
										$("#row-<?php echo $line->id; ?> td.linecoldelete span.fa.fa-trash.pictodeleteallline").css({"color": "#be3535"});
2261
									});
2262
								</script>
2263
								<?php
2264
								}
2265
							}
2266
						}
2267
					}
2268
				?>
2269
			</td>
2270
			
2271
			<?php 
2272
			if ($object->statut == 0  && $createRight && !empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && TSubtotal::isTitle($line) && $action != 'editline')
2273
			{
2274
				echo '<td class="subtotal_nc">';
2275
				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"' : '').' />';
2276
				echo '</td>';
2277
			}
2278
			
2279
			if ($num > 1 && empty($conf->browser->phone)) { ?>
2280
			<td align="center" class="linecolmove tdlineupdown">
2281
			</td>
2282
			<?php } else { ?>
2283
			<td align="center"<?php echo ((empty($conf->browser->phone) && ($object->statut == 0  && $createRight ))?' class="tdlineupdown"':''); ?>></td>
2284
			<?php } ?>
2285
2286
			<?php  if($action == 'selectlines'){ // dolibarr 8 ?>
2287
			<td class="linecolcheck" align="center"><input type="checkbox" class="linecheckbox" name="line_checkbox[<?php echo $i+1; ?>]" value="<?php echo $line->id; ?>" ></td>
2288
			<?php } ?>
2289
2290
			</tr>
2291
			<?php
2292
			
2293
			
2294
			// Affichage des extrafields à la Dolibarr (car sinon non affiché sur les titres)
2295
			if(TSubtotal::isTitle($line) && !empty($conf->global->SUBTOTAL_ALLOW_EXTRAFIELDS_ON_TITLE)) {
2296
				
2297
				require_once DOL_DOCUMENT_ROOT . '/core/class/extrafields.class.php';
2298
				
2299
				// Extrafields
2300
				$extrafieldsline = new ExtraFields($db);
2301
				$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...
2302
				
2303
				$colspan+=3; $mode = 'view';
2304
				if($action === 'editline' && $line->rowid == GETPOST('lineid')) $mode = 'edit';
2305
				
2306
				$ex_element = $line->element;
2307
				$line->element = 'tr_extrafield_title '.$line->element; // Pour pouvoir manipuler ces tr
2308
				print $line->showOptionals($extrafieldsline, $mode, array('style'=>' style="background:#eeffee;" ','colspan'=>$colspan));
2309
				$isExtraSelected = false;
2310
				foreach($line->array_options as $option) {
2311
					if(!empty($option) && $option != "-1") {
2312
						$isExtraSelected = true;
2313
						break;
2314
					}
2315
				}
2316
				
2317
				if($mode === 'edit') {
2318
					?>
2319
					<script>
2320
						$(document).ready(function(){
2321
2322
							var all_tr_extrafields = $("tr.tr_extrafield_title");
2323
							<?php 
2324
							// Si un extrafield est rempli alors on affiche directement les extrafields
2325
							if(!$isExtraSelected) {
2326
								echo 'all_tr_extrafields.hide();';
2327
								echo 'var trad = "'.$langs->trans('showExtrafields').'";';
2328
								echo 'var extra = 0;';
2329
							} else {
2330
								echo 'all_tr_extrafields.show();';
2331
								echo 'var trad = "'.$langs->trans('hideExtrafields').'";';
2332
								echo 'var extra = 1;';
2333
							}
2334
							?>
2335
							
2336
							$("div .subtotal_underline").append(
2337
									'<a id="printBlocExtrafields" onclick="return false;" href="#">' + trad + '</a>'
2338
									+ '<input type="hidden" name="showBlockExtrafields" id="showBlockExtrafields" value="'+ extra +'" />');
2339
2340
							$(document).on('click', "#printBlocExtrafields", function() {
2341
								var btnShowBlock = $("#showBlockExtrafields");
2342
								var val = btnShowBlock.val();
2343
								if(val == '0') {
2344
									btnShowBlock.val('1');
2345
									$("#printBlocExtrafields").html("<?php print $langs->trans('hideExtrafields'); ?>");
2346
									$(all_tr_extrafields).show();
2347
								} else {
2348
									btnShowBlock.val('0');
2349
									$("#printBlocExtrafields").html("<?php print $langs->trans('showExtrafields'); ?>");
2350
									$(all_tr_extrafields).hide();
2351
								}
2352
							});
2353
						});
2354
					</script>
2355
					<?php
2356
				}
2357
				$line->element = $ex_element;
2358
				
2359
			}
2360
			
2361
			return 1;	
2362
			
2363
		}
2364
		
2365
		return 0;
2366
2367
	}
2368
2369
	
2370
	function addMoreActionsButtons($parameters, &$object, &$action, $hookmanager) {
0 ignored issues
show
Unused Code introduced by
The parameter $hookmanager is not used and could be removed. ( Ignorable by Annotation )

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

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

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

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

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

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

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

2370
	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...
2371
		global $conf,$langs;
2372
		 
2373
		if ($object->statut == 0 && !empty($conf->global->SUBTOTAL_MANAGE_COMPRIS_NONCOMPRIS) && $action != 'editline')
2374
		{
2375
		    
2376
		    if($object->element == 'invoice_supplier' || $object->element == 'order_supplier')
2377
		    {
2378
		        foreach ($object->lines as $line)
2379
		        {
2380
		            // fetch optionals attributes and labels
2381
		            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...
2382
		            $extrafields=new ExtraFields($this->db);
2383
		            $extralabels=$extrafields->fetch_name_optionals_label($object->table_element_line,true);
2384
		            $line->fetch_optionals($line->id,$extralabels);
2385
		        }
2386
		    }
2387
		    
2388
			$TSubNc = array();
2389
			foreach ($object->lines as &$l)
2390
			{
2391
				$TSubNc[$l->id] = (int) $l->array_options['options_subtotal_nc'];
2392
			}
2393
			
2394
			$form = new Form($db);
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $db seems to be never defined.
Loading history...
2395
			?>
2396
			<script type="text/javascript">
2397
				$(function() {
2398
					var subtotal_TSubNc = <?php echo json_encode($TSubNc); ?>;
2399
					$("#tablelines tbody > tr").each(function(i, item) {
2400
						if ($(item).children('.subtotal_nc').length == 0)
2401
						{
2402
							var id = $(item).attr('id');
2403
							
2404
							if ((typeof id != 'undefined' && id.indexOf('row-') >= 0) || $(item).hasClass('liste_titre'))
2405
							{
2406
								$(item).children('td:last-child').before('<td class="subtotal_nc"></td>');
2407
								
2408
								if ($(item).attr('rel') != 'subtotal' && typeof $(item).attr('id') != 'undefined')
2409
								{
2410
									var idSplit = $(item).attr('id').split('-');
2411
									$(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"' : '')+' />'));
2412
								}
2413
							}
2414
							else 
2415
							{
2416
								$(item).append('<td class="subtotal_nc"></td>');
2417
							}
2418
						}
2419
					});
2420
					
2421
					$('#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'))); ?>);
2422
					
2423
					function callAjaxUpdateLineNC(set, lineid, subtotal_nc)
2424
					{
2425
						$.ajax({
2426
							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

2426
							url: '<?php echo /** @scrutinizer ignore-call */ dol_buildpath('/subtotal/script/interface.php', 1); ?>'
Loading history...
2427
							,type: 'POST'
2428
							,data: {
2429
								json:1
2430
								,set: set
2431
								,element: '<?php echo $object->element; ?>'
2432
								,elementid: <?php echo (int) $object->id; ?>
2433
								,lineid: lineid
2434
								,subtotal_nc: subtotal_nc
2435
							}
2436
						}).done(function(response) {
2437
							window.location.href = window.location.pathname + '?id=<?php echo $object->id; ?>&page_y=' + window.pageYOffset;
2438
						});
2439
					}
2440
					
2441
					$(".subtotal_nc_chkbx").change(function(event) {
2442
						var lineid = $(this).data('lineid');
2443
						var subtotal_nc = 0 | $(this).is(':checked'); // Renvoi 0 ou 1 
2444
						
2445
						callAjaxUpdateLineNC('updateLineNC', lineid, subtotal_nc);
2446
					});
2447
					
2448
				});
2449
2450
			</script>
2451
			<?php
2452
		}
2453
		
2454
		$this->_ajax_block_order_js($object);
2455
	}
2456
	
2457
	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

2457
	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

2457
	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...
2458
	{
2459
		global $conf;
2460
		
2461
		$object = $parameters['object'];
2462
		
2463
		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'))
2464
		{
2465
			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

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

2466
				/** @scrutinizer ignore-call */ 
2467
    dol_include_once('/subtotal/class/subtotal.class.php');
Loading history...
2467
				TSubtotal::addRecapPage($parameters, $pdf);
2468
			}
2469
		}
2470
	}
2471
	
2472
	// HTML 5 data for js
2473
	private function _getHtmlData($parameters, &$object, &$action, $hookmanager)
2474
	{
2475
		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

2475
		/** @scrutinizer ignore-call */ 
2476
  dol_include_once('/subtotal/class/subtotal.class.php');
Loading history...
2476
2477
	    $line = &$parameters['line'];
2478
	    
2479
	    $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...
2480
	    $ThtmlData['data-product_type'] = $line->product_type;
2481
	    $ThtmlData['data-qty']          = 0; //$line->qty;
2482
	    $ThtmlData['data-level']        = TSubtotal::getNiveau($line);
2483
	    
2484
	    if(TSubtotal::isTitle($line)){
2485
	        $ThtmlData['data-issubtotal'] = 'title';
2486
	    }elseif(TSubtotal::isSubtotal($line)){
2487
	        $ThtmlData['data-issubtotal'] = 'subtotal';
2488
	    }
2489
	    else{
2490
	        $ThtmlData['data-issubtotal'] = 'freetext';
2491
	    }
2492
	    
2493
	    
2494
	    // Change or add data  from hooks
2495
	    $parameters = array_replace($parameters , array(  'ThtmlData' => $ThtmlData )  );
2496
	    
2497
	    // hook 
2498
	    $reshook = $hookmanager->executeHooks('subtotalLineHtmlData',$parameters,$object,$action); // Note that $action and $object may have been modified by hook
2499
	    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

2499
	    if ($reshook < 0) /** @scrutinizer ignore-call */ setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
Loading history...
2500
	    if ($reshook>0)
2501
	    {
2502
	        $ThtmlData = $hookmanager->resArray;
2503
	    }
2504
2505
	    return $this->implodeHtmlData($ThtmlData);
2506
	
2507
	}
2508
	
2509
	
2510
	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...
2511
	{
2512
	    $data = '';
2513
	    foreach($ThtmlData as $k => $h )
2514
	    {
2515
	        if(is_array($h))
2516
	        {
2517
	            $h = json_encode($h);
2518
	        }
2519
	        
2520
	        $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

2520
	        $data .= $k . '="'./** @scrutinizer ignore-call */ dol_htmlentities($h, ENT_QUOTES).'" ';
Loading history...
2521
	    }
2522
	    
2523
	    return $data;
2524
	}
2525
	
2526
	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...
2527
	{
2528
	    global $conf,$tagidfortablednd,$filepath,$langs;
2529
	    
2530
	    /*
2531
	     * this part of js is base on dolibarr htdocs/core/tpl/ajaxrow.tpl.php 
2532
	     * for compatibility reasons we don't use tableDnD but jquery sortable
2533
	     */
2534
	    
2535
	    $id=$object->id;
0 ignored issues
show
Unused Code introduced by
The assignment to $id is dead and can be removed.
Loading history...
2536
	    $nboflines=(isset($object->lines)?count($object->lines):0);
2537
	    $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...
2538
	    
2539
	    $id=$object->id;
2540
	    $fk_element=$object->fk_element;
2541
	    $table_element_line=$object->table_element_line;
2542
	    $nboflines=(isset($object->lines)?count($object->lines):(empty($nboflines)?0:$nboflines));
2543
	    $tagidfortablednd=(empty($tagidfortablednd)?'tablelines':$tagidfortablednd);
2544
	    $filepath=(empty($filepath)?'':$filepath);
2545
	    
2546
	    
2547
	    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

2547
	    if (/** @scrutinizer ignore-call */ GETPOST('action','aZ09') != 'editline' && $nboflines > 1)
Loading history...
2548
	    {
2549
	        
2550
	        ?>
2551
		
2552
		
2553
			<script type="text/javascript">
2554
			$(document).ready(function(){
2555
2556
				// target some elements
2557
				var titleRow = $('tr[data-issubtotal="title"]');
2558
				var lastTitleCol = titleRow.find('td:last-child');
2559
				var moveBlockCol= titleRow.find('td.linecolht');
2560
2561
				
2562
				moveBlockCol.disableSelection(); // prevent selection
2563
<?php if ($object->statut == 0) { ?>
2564
				// apply some graphical stuff
2565
				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

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