dolibarr 21.0.0-alpha
assetdepreciationoptions.class.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2021 Open-Dsi <support@open-dsi.fr>
3 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <https://www.gnu.org/licenses/>.
17 */
18
25require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
26
31{
35 public $table_element = '';
36
70 public $fields = array();
71
76 public $deprecation_options_fields = array(
77 'economic' => array(
78 'label' => 'AssetDepreciationOptionEconomic',
79 'table' => 'asset_depreciation_options_economic',
80 'fields' => array(
81 'depreciation_type' => array('type' => 'smallint', 'label' => 'AssetDepreciationOptionDepreciationType', 'enabled' => '1', 'position' => 10, 'notnull' => 1, 'visible' => 1, 'default' => '0', 'arrayofkeyval' => array('0' => 'AssetDepreciationOptionDepreciationTypeLinear', '1' => 'AssetDepreciationOptionDepreciationTypeDegressive', '2' => 'AssetDepreciationOptionDepreciationTypeExceptional'), 'validate' => '1',),
82 'degressive_coefficient' => array('type' => 'double(24,8)', 'label' => 'AssetDepreciationOptionDegressiveRate', 'enabled' => '1', 'position' => 20, 'notnull' => 1, 'visible' => 1, 'default' => '0', 'isameasure' => '1', 'validate' => '1','enabled_field' => 'economic:depreciation_type:1'),
83 'duration' => array('type' => 'integer', 'label' => 'AssetDepreciationOptionDuration', 'enabled' => '1', 'position' => 30, 'notnull' => 1, 'visible' => 1, 'default' => '0', 'isameasure' => '1', 'validate' => '1',),
84 'duration_type' => array('type' => 'smallint', 'label' => 'AssetDepreciationOptionDurationType', 'enabled' => '1', 'position' => 40, 'notnull' => 1, 'visible' => 1, 'default' => '0', 'arrayofkeyval' => array('0' => 'AssetDepreciationOptionDurationTypeAnnual', '1' => 'AssetDepreciationOptionDurationTypeMonthly'/*, '2'=>'AssetDepreciationOptionDurationTypeDaily'*/), 'validate' => '1',),
85 'rate' => array('type' => 'double(24,8)', 'label' => 'AssetDepreciationOptionRate', 'enabled' => '1', 'position' => 50, 'visible' => 3, 'default' => '0', 'isameasure' => '1', 'validate' => '1', 'computed' => '$object->asset_depreciation_options->getRate("economic")',),
86 'accelerated_depreciation_option' => array('type' => 'boolean', 'label' => 'AssetDepreciationOptionAcceleratedDepreciation', 'enabled' => '1', 'position' => 60, 'column_break' => true, 'notnull' => 0, 'default' => '0', 'visible' => 1, 'validate' => '1',),
87 'amount_base_depreciation_ht' => array('type' => 'price', 'label' => 'AssetDepreciationOptionAmountBaseDepreciationHT', 'enabled' => 'isset($object)&&get_class($object)=="Asset"', 'only_on_asset' => 1, 'position' => 90, 'notnull' => 0, 'required' => 1, 'visible' => 1, 'default' => '$object->reversal_amount_ht > 0 ? $object->reversal_amount_ht : $object->acquisition_value_ht', 'isameasure' => '1', 'validate' => '1',),
88 'amount_base_deductible_ht' => array('type' => 'price', 'label' => 'AssetDepreciationOptionAmountBaseDeductibleHT', 'enabled' => 'isset($object)&&get_class($object)=="Asset"', 'only_on_asset' => 1, 'position' => 100, 'notnull' => 0, 'visible' => 1, 'default' => '0', 'isameasure' => '1', 'validate' => '1',),
89 'total_amount_last_depreciation_ht' => array('type' => 'price', 'label' => 'AssetDepreciationOptionTotalAmountLastDepreciationHT', 'enabled' => 'isset($object)&&get_class($object)=="Asset"', 'only_on_asset' => 1, 'position' => 110, 'noteditable' => 1, 'notnull' => 0, 'visible' => 1, 'default' => '0', 'isameasure' => '1', 'validate' => '1',),
90 ),
91 ),
92 'accelerated_depreciation' => array(
93 'label' => 'AssetDepreciationOptionAcceleratedDepreciation',
94 'table' => 'asset_depreciation_options_fiscal',
95 'enabled_field' => 'economic:accelerated_depreciation_option:1',
96 'fields' => array(
97 'depreciation_type' => array('type' => 'smallint', 'label' => 'AssetDepreciationOptionDepreciationType', 'enabled' => '1', 'position' => 10, 'notnull' => 1, 'visible' => 1, 'default' => '0', 'arrayofkeyval' => array('0' => 'AssetDepreciationOptionDepreciationTypeLinear', '1' => 'AssetDepreciationOptionDepreciationTypeDegressive', '2' => 'AssetDepreciationOptionDepreciationTypeExceptional'), 'validate' => '1',),
98 'degressive_coefficient' => array('type' => 'double(24,8)', 'label' => 'AssetDepreciationOptionDegressiveRate', 'enabled' => '1', 'position' => 20, 'notnull' => 1, 'visible' => 1, 'default' => '0', 'isameasure' => '1', 'validate' => '1','enabled_field' => 'accelerated_depreciation:depreciation_type:1'),
99 'duration' => array('type' => 'integer', 'label' => 'AssetDepreciationOptionDuration', 'enabled' => '1', 'position' => 30, 'notnull' => 1, 'visible' => 1, 'default' => '0', 'isameasure' => '1', 'validate' => '1',),
100 'duration_type' => array('type' => 'smallint', 'label' => 'AssetDepreciationOptionDurationType', 'enabled' => '1', 'position' => 40, 'notnull' => 1, 'visible' => 1, 'default' => '0', 'arrayofkeyval' => array('0' => 'AssetDepreciationOptionDurationTypeAnnual', '1' => 'AssetDepreciationOptionDurationTypeMonthly'/*, '2'=>'AssetDepreciationOptionDurationTypeDaily'*/), 'validate' => '1',),
101 'rate' => array('type' => 'double(24,8)', 'label' => 'AssetDepreciationOptionRate', 'enabled' => '1', 'position' => 50, 'visible' => 3, 'default' => '0', 'isameasure' => '1', 'validate' => '1', 'computed' => '$object->asset_depreciation_options->getRate("accelerated_depreciation")',),
102 'amount_base_depreciation_ht' => array('type' => 'price', 'label' => 'AssetDepreciationOptionAmountBaseDepreciationHT', 'enabled' => 'isset($object)&&get_class($object)=="Asset"', 'only_on_asset' => 1, 'position' => 80, 'column_break' => true, 'notnull' => 0, 'required' => 1, 'visible' => 1, 'default' => '$object->reversal_amount_ht > 0 ? $object->reversal_amount_ht : $object->acquisition_value_ht', 'isameasure' => '1', 'validate' => '1',),
103 'amount_base_deductible_ht' => array('type' => 'price', 'label' => 'AssetDepreciationOptionAmountBaseDeductibleHT', 'enabled' => 'isset($object)&&get_class($object)=="Asset"', 'only_on_asset' => 1, 'position' => 90, 'notnull' => 0, 'visible' => 1, 'default' => '0', 'isameasure' => '1', 'validate' => '1',),
104 'total_amount_last_depreciation_ht' => array('type' => 'price', 'label' => 'AssetDepreciationOptionTotalAmountLastDepreciationHT', 'enabled' => 'isset($object)&&get_class($object)=="Asset"', 'only_on_asset' => 1, 'position' => 100, 'noteditable' => 1, 'notnull' => 0, 'visible' => 1, 'default' => '0', 'isameasure' => '1', 'validate' => '1',),
105 ),
106 ),
107 );
108 public $fk_asset;
109 public $fk_asset_model;
110 public $fk_user_modif;
111
115 public $deprecation_options = array();
116
117 public $depreciation_type;
118 public $degressive_coefficient;
119 public $duration;
120 public $duration_type;
121 public $accelerated_depreciation_option;
122
128 public function __construct(DoliDB $db)
129 {
130 global $langs;
131 $this->db = $db;
132
133 // Translate some data of arrayofkeyval
134 if (is_object($langs)) {
135 foreach ($this->deprecation_options_fields as $mode_key => $mode_info) {
136 if (!empty($mode_info['fields']) && is_array($mode_info['fields'])) {
137 foreach ($mode_info['fields'] as $field_key => $field_info) {
138 if (!empty($field_info['arrayofkeyval']) && is_array($field_info['arrayofkeyval'])) {
139 foreach ($field_info['arrayofkeyval'] as $key => $val) {
140 $this->deprecation_options_fields[$mode_key]['fields'][$field_key]['arrayofkeyval'][$key] = $langs->trans($val);
141 }
142 }
143 }
144 }
145 }
146 }
147 }
148
157 public function setInfosForMode($mode, $class_type = 0, $all_field = false)
158 {
159 // Clean parameters
160 $mode = strtolower(trim($mode));
161
162 if (!empty($this->deprecation_options_fields[$mode])) {
163 $this->table_element = $this->deprecation_options_fields[$mode]['table'];
164 $this->fields = $this->deprecation_options_fields[$mode]['fields'];
165 foreach ($this->fields as $field_key => $field_info) {
166 if ((!empty($field_info['computed']) && !$all_field) || (!empty($field_info['only_on_asset']) && !empty($class_type))) {
167 unset($this->fields[$field_key]);
168 continue;
169 }
170
171 // Unset required option (notnull) if field disabled
172 if (!empty($field_info['enabled_field'])) {
173 $info = explode(':', $field_info['enabled_field']);
174 if (!empty($this->deprecation_options[$info[0]][$info[1]]) && $this->deprecation_options[$info[0]][$info[1]] != $info[2] && isset($this->fields[$field_key]['notnull'])) {
175 unset($this->fields[$field_key]['notnull']);
176 }
177 }
178 // Set value of the field in the object (for createCommon and setDeprecationOptionsFromPost functions)
179 $this->{$field_key} = $this->deprecation_options[$mode][$field_key] ?? null;
180 }
181
182 $this->fields['rowid'] = array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => '1', 'position' => 1, 'notnull' => 1, 'visible' => 0, 'noteditable' => '1', 'index' => 1, 'css' => 'left', 'comment' => "Id");
183 if (empty($class_type)) {
184 $this->fields['fk_asset'] = array('type' => 'integer:Asset:asset/class/asset.class.php:1:status=1 AND entity IN (__SHARED_ENTITIES__)', 'label' => 'Asset', 'enabled' => '1', 'position' => 0, 'notnull' => 0, 'visible' => 0, 'index' => 1, 'validate' => '1',);
185 } else {
186 $this->fields['fk_asset_model'] = array('type' => 'integer:AssetModel:asset/class/assetmodel.class.php:1:status=1 AND entity IN (__SHARED_ENTITIES__)', 'label' => 'AssetModel', 'enabled' => '1', 'position' => 0, 'notnull' => 0, 'visible' => 0, 'index' => 1, 'validate' => '1',);
187 }
188 $this->fields['tms'] = array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => '1', 'position' => 501, 'notnull' => 0, 'visible' => 0,);
189 $this->fields['fk_user_modif'] = array('type' => 'integer:User:user/class/user.class.php', 'label' => 'UserModif', 'enabled' => '1', 'position' => 511, 'notnull' => -1, 'visible' => 0,);
190 }
191
192 return 1;
193 }
194
201 public function setDeprecationOptionsFromPost($class_type = 0)
202 {
203 global $conf, $langs;
204
205 $error = 0;
206
207 $deprecation_options = array();
208 foreach ($this->deprecation_options_fields as $mode_key => $mode_info) {
209 $this->setInfosForMode($mode_key, $class_type);
210
211 foreach ($mode_info['fields'] as $field_key => $field_info) {
212 if (!empty($field_info['computed'])) {
213 continue;
214 }
215
216 $html_name = $mode_key . '_' . $field_key;
217 if ($field_info['type'] == 'duration') {
218 if (GETPOST($html_name . 'hour') == '' && GETPOST($html_name . 'min') == '') {
219 continue; // The field was not submitted to be saved
220 }
221 } else {
222 if (!GETPOSTISSET($html_name)) {
223 continue; // The field was not submitted to be saved
224 }
225 }
226 // Ignore special fields
227 if (in_array($field_key, array('rowid', 'entity', 'import_key'))) {
228 continue;
229 }
230 if (in_array($field_key, array('date_creation', 'tms', 'fk_user_creat', 'fk_user_modif'))) {
231 if (!in_array(abs($field_info['visible']), array(1, 3))) {
232 continue; // Only 1 and 3 that are case to create
233 }
234 }
235
236 // Set value to insert
237 if (in_array($field_info['type'], array('text', 'html'))) {
238 $value = GETPOST($html_name, 'restricthtml');
239 } elseif ($field_info['type'] == 'date') {
240 $value = dol_mktime(12, 0, 0, GETPOSTINT($html_name . 'month'), GETPOSTINT($html_name . 'day'), GETPOSTINT($html_name . 'year')); // for date without hour, we use gmt
241 } elseif ($field_info['type'] == 'datetime') {
242 $value = dol_mktime(GETPOSTINT($html_name . 'hour'), GETPOSTINT($html_name . 'min'), GETPOSTINT($html_name . 'sec'), GETPOSTINT($html_name . 'month'), GETPOSTINT($html_name . 'day'), GETPOSTINT($html_name . 'year'), 'tzuserrel');
243 } elseif ($field_info['type'] == 'duration') {
244 $value = 60 * 60 * GETPOSTINT($html_name . 'hour') + 60 * GETPOSTINT($html_name . 'min');
245 } elseif (preg_match('/^(integer|price|real|double)/', $field_info['type'])) {
246 $value = price2num(GETPOST($html_name, 'alphanohtml')); // To fix decimal separator according to lang setup
247 } elseif ($field_info['type'] == 'boolean') {
248 $value = ((GETPOST($html_name) == '1' || GETPOST($html_name) == 'on') ? 1 : 0);
249 } elseif ($field_info['type'] == 'reference') {
250 // todo to check
251 $tmparraykey = array(); //array_keys($object->param_list);
252 $value = $tmparraykey[GETPOST($html_name)] . ',' . GETPOST($html_name . '2');
253 } else {
254 if ($field_key == 'lang') {
255 $value = GETPOST($html_name, 'aZ09') ? GETPOST($html_name, 'aZ09') : "";
256 } else {
257 $value = GETPOST($html_name, 'alphanohtml');
258 }
259 }
260 if (preg_match('/^integer:/i', $field_info['type']) && $value == '-1') {
261 $value = ''; // This is an implicit foreign key field
262 }
263 if (!empty($field_info['foreignkey']) && $value == '-1') {
264 $value = ''; // This is an explicit foreign key field
265 }
266
267 //var_dump($field_key.' '.$value.' '.$field_info['type']);
268 $field_value = $value;
269 if ($field_info['notnull'] > 0 && $field_value == '' && !is_null($field_info['default']) && $field_info['default'] == '(PROV)') {
270 $field_value = '(PROV)';
271 } elseif ((!empty($field_info['required']) || $field_info['notnull'] > 0) && $field_value == '' && !empty($field_info['default'])) {
272 $field_value = $field_info['default'];
273 }
274 if ($field_info['notnull'] > 0 && $field_value == '' && is_null($field_info['default'])) {
275 $error++;
276 setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv($field_info['label'])), null, 'errors');
277 }
278 $deprecation_options[$mode_key][$field_key] = $field_value;
279
280 // Validation of fields values
281 if (getDolGlobalInt('MAIN_FEATURE_LEVEL') >= 1 || getDolGlobalString('MAIN_ACTIVATE_VALIDATION_RESULT')) {
282 if (!$error && !empty($field_info['validate']) && is_callable(array($this, 'validateField'))) {
283 if (!$this->validateField($mode_info['fields'], $field_key, $value)) {
284 $error++;
285 }
286 }
287 }
288 }
289 }
290 // Unset not enabled modes
291 foreach ($this->deprecation_options_fields as $mode_key => $mode_info) {
292 if (!empty($mode_info['enabled_field'])) {
293 $info = explode(':', $mode_info['enabled_field']);
294 if ($deprecation_options[$info[0]][$info[1]] != $info[2]) {
295 unset($deprecation_options[$info[0]][$info[1]]);
296 }
297 }
298 }
299 $this->deprecation_options = $deprecation_options;
300
301 if ($error) {
302 return -1;
303 } else {
304 return 1;
305 }
306 }
307
315 public function fetchDeprecationOptions($asset_id = 0, $asset_model_id = 0)
316 {
317 global $langs, $hookmanager;
318 dol_syslog(__METHOD__ . " asset_id=$asset_id, asset_model_id=$asset_model_id");
319
320 $error = 0;
321 $this->errors = array();
322 $this->deprecation_options = array();
323
324 // Clean parameters
325 $asset_id = $asset_id > 0 ? $asset_id : 0;
326 $asset_model_id = $asset_model_id > 0 ? $asset_model_id : 0;
327
328 $hookmanager->initHooks(array('assetdepreciationoptionsdao'));
329 $parameters = array('asset_id' => $asset_id, 'asset_model_id' => $asset_model_id);
330 $reshook = $hookmanager->executeHooks('fetchDepreciationOptions', $parameters, $this); // Note that $action and $object may have been modified by some hooks
331 if (!empty($reshook)) {
332 return $reshook;
333 }
334
335 // Check parameters
336 if (empty($asset_id) && empty($asset_model_id)) {
337 $this->errors[] = $langs->trans('AssetErrorAssetOrAssetModelIDNotProvide');
338 $error++;
339 }
340 if ($error) {
341 dol_syslog(__METHOD__ . " Error check parameters: " . $this->errorsToString(), LOG_ERR);
342 return -1;
343 }
344
345 $class_type = $asset_id > 0 ? 0 : 1;
346 $deprecation_options = array();
347 foreach ($this->deprecation_options_fields as $mode_key => $mode_info) {
348 $this->setInfosForMode($mode_key, $class_type);
349
350 $result = $this->fetchCommon(0, '', " AND " . ($asset_id > 0 ? " fk_asset = " . (int) $asset_id : " fk_asset_model = " . (int) $asset_model_id));
351 if ($result < 0) {
352 $this->errors = array_merge(array($langs->trans('AssetErrorFetchDepreciationOptionsForMode', $mode_key) . ':'), $this->errors);
353 $error++;
354 } elseif ($result > 0) {
355 foreach ($this->fields as $field_key => $field_info) {
356 if (in_array($field_key, array('rowid', 'fk_asset', 'fk_asset_model', 'tms', 'fk_user_modif'))) {
357 continue;
358 }
359 $deprecation_options[$mode_key][$field_key] = $this->{$field_key};
360 }
361 }
362 }
363 // Unset not enabled modes
364 foreach ($this->deprecation_options_fields as $mode_key => $mode_info) {
365 if (!empty($mode_info['enabled_field'])) {
366 $info = explode(':', $mode_info['enabled_field']);
367 if (isset($deprecation_options[$info[0]][$info[1]]) && $deprecation_options[$info[0]][$info[1]] != $info[2]) {
368 unset($deprecation_options[$info[0]][$info[1]]);
369 }
370 }
371 }
372
373 if ($error) {
374 dol_syslog(__METHOD__ . " Error fetch accountancy codes: " . $this->errorsToString(), LOG_ERR);
375 return -1;
376 } else {
377 $this->deprecation_options = $deprecation_options;
378 return 1;
379 }
380 }
381
389 {
390 global $hookmanager;
391 dol_syslog(__METHOD__ . " mode=$mode");
392
393 $this->errors = array();
394
395 // Clean parameters
396 $mode = strtolower(trim($mode));
397
398 $hookmanager->initHooks(array('assetdepreciationoptionsdao'));
399 $parameters = array('mode' => $mode);
400 $reshook = $hookmanager->executeHooks('getGeneralDepreciationInfoForMode', $parameters, $this); // Note that $action and $object may have been modified by some hooks
401 if ($reshook < 0) {
402 return $reshook;
403 } elseif ($reshook > 0) {
404 return $hookmanager->resArray;
405 }
406
407 $duration_type_list = $this->deprecation_options_fields[$mode]['fields']['duration_type']['arrayofkeyval'];
408
409 return array(
410 'base_depreciation_ht' => $this->deprecation_options[$mode]['amount_base_depreciation_ht'],
411 'duration' => $this->deprecation_options[$mode]['duration'],
412 'duration_type' => $duration_type_list[$this->deprecation_options[$mode]['duration_type']],
413 'rate' => $this->getRate($mode),
414 );
415 }
416
426 public function updateDeprecationOptions($user, $asset_id = 0, $asset_model_id = 0, $notrigger = 0)
427 {
428 global $langs, $hookmanager;
429 dol_syslog(__METHOD__ . " user_id=".$user->id.", asset_id=".$asset_id.", asset_model_id=".$asset_model_id.", notrigger=".$notrigger);
430
431 $error = 0;
432 $this->errors = array();
433
434 // Clean parameters
435 $asset_id = $asset_id > 0 ? $asset_id : 0;
436 $asset_model_id = $asset_model_id > 0 ? $asset_model_id : 0;
437
438 $hookmanager->initHooks(array('assetdepreciationoptionsdao'));
439 $parameters = array('user' => $user, 'asset_id' => $asset_id, 'asset_model_id' => $asset_model_id);
440 $reshook = $hookmanager->executeHooks('updateDepreciationOptions', $parameters, $this); // Note that $action and $object may have been modified by some hooks
441 if (!empty($reshook)) {
442 return $reshook;
443 }
444
445 // Check parameters
446 if (empty($asset_id) && empty($asset_model_id)) {
447 $this->errors[] = $langs->trans('AssetErrorAssetOrAssetModelIDNotProvide');
448 $error++;
449 }
450 if ($error) {
451 dol_syslog(__METHOD__ . " Error check parameters: " . $this->errorsToString(), LOG_ERR);
452 return -1;
453 }
454
455 $this->db->begin();
456
457 if ($asset_id > 0) {
458 $this->fk_asset = $asset_id;
459 $class_type = 0;
460 } else {
461 $this->fk_asset_model = $asset_model_id;
462 $class_type = 1;
463 }
464 $this->tms = dol_now();
465 $this->fk_user_modif = $user->id;
466
467 foreach ($this->deprecation_options_fields as $mode_key => $mode_info) {
468 // Delete old accountancy codes
469 $sql = "DELETE FROM " . MAIN_DB_PREFIX . $mode_info['table'];
470 $sql .= " WHERE " . ($asset_id > 0 ? " fk_asset = " . (int) $asset_id : " fk_asset_model = " . (int) $asset_model_id);
471 $resql = $this->db->query($sql);
472 if (!$resql) {
473 $this->errors[] = $langs->trans('AssetErrorDeleteDepreciationOptionsForMode', $mode_key) . ': ' . $this->db->lasterror();
474 $error++;
475 }
476
477 if (!$error && !empty($this->deprecation_options[$mode_key])) {
478 if (!empty($mode_info['enabled_field'])) {
479 $info = explode(':', $mode_info['enabled_field']);
480 if ($this->deprecation_options[$info[0]][$info[1]] != $info[2]) {
481 continue;
482 }
483 }
484
485 $this->setInfosForMode($mode_key, $class_type);
486
487 $result = $this->createCommon($user, 1);
488 if ($result < 0) {
489 $this->errors = array_merge(array($langs->trans('AssetErrorInsertDepreciationOptionsForMode', $mode_key) . ':'), $this->errors);
490 $error++;
491 }
492 }
493 }
494
495 if (!$error && $this->fk_asset > 0) {
496 // Calculation of depreciation lines (reversal and future)
497 require_once DOL_DOCUMENT_ROOT . '/asset/class/asset.class.php';
498 $asset = new Asset($this->db);
499 $result = $asset->fetch($this->fk_asset);
500 if ($result > 0) {
501 $result = $asset->calculationDepreciation();
502 }
503 if ($result < 0) {
504 $this->errors[] = $langs->trans('AssetErrorCalculationDepreciationLines');
505 $this->errors[] = $asset->errorsToString();
506 $error++;
507 }
508 }
509
510 if (!$error && !$notrigger) {
511 // Call trigger
512 $result = $this->call_trigger('ASSET_DEPRECIATION_OPTIONS_MODIFY', $user);
513 if ($result < 0) {
514 $error++;
515 }
516 // End call triggers
517 }
518
519 if ($error) {
520 $this->db->rollback();
521 return -1;
522 } else {
523 $this->db->commit();
524 return 1;
525 }
526 }
527
534 public function getRate($mode)
535 {
536 $duration = (isset($this->deprecation_options[$mode]["duration"]) && $this->deprecation_options[$mode]["duration"] > 0) ? $this->deprecation_options[$mode]["duration"] : 0;
537 $duration_type = (isset($this->deprecation_options[$mode]["duration_type"]) && $this->deprecation_options[$mode]["duration_type"] > 0) ? $this->deprecation_options[$mode]["duration_type"] : 0;
538
539 return price(price2num($duration > 0 ? (100 * ($duration_type == 1 ? 12 : 1) / $duration) : 0, 2));
540 }
541}
Class for AssetDepreciationOptions.
updateDeprecationOptions($user, $asset_id=0, $asset_model_id=0, $notrigger=0)
Update deprecation options of a asset or a asset model.
getGeneralDepreciationInfoForMode($mode)
get general depreciation info for a mode (used in depreciation card)
setDeprecationOptionsFromPost($class_type=0)
Fill deprecation_options property of object (using for data sent by forms)
setInfosForMode($mode, $class_type=0, $all_field=false)
Set object infos for a mode.
fetchDeprecationOptions($asset_id=0, $asset_model_id=0)
Load deprecation options of a asset or a asset model.
Class for Asset.
Parent class of all other business classes (invoices, contracts, proposals, orders,...
validateField($fields, $fieldKey, $fieldValue)
Return validation test result for a field.
createCommon(User $user, $notrigger=0)
Create object in the database.
errorsToString()
Method to output saved errors.
fetchCommon($id, $ref=null, $morewhere='', $noextrafields=0)
Load object in memory from the database.
call_trigger($triggerName, $user)
Call trigger based on this instance.
Class to manage Dolibarr database access.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.