From eb526afc3a74f16d8433a9270d3d628234cbbc3d Mon Sep 17 00:00:00 2001 From: jpb Date: Mon, 23 May 2022 16:41:05 +0200 Subject: [PATCH 01/21] add coef on input ht line expenseReport --- htdocs/expensereport/ajax/ajaxik.php | 44 ++++++-- htdocs/expensereport/card.php | 51 ++++++++- .../class/expensereport.class.php | 102 +++++++++++++++++- .../class/expensereport_ik.class.php | 7 +- 4 files changed, 187 insertions(+), 17 deletions(-) diff --git a/htdocs/expensereport/ajax/ajaxik.php b/htdocs/expensereport/ajax/ajaxik.php index 6cd8c05fe5b..a02e7dd6c73 100644 --- a/htdocs/expensereport/ajax/ajaxik.php +++ b/htdocs/expensereport/ajax/ajaxik.php @@ -51,6 +51,8 @@ $langs->loadlangs(array('errors', 'trips')); $fk_expense = GETPOST('fk_expense', 'int'); $fk_c_exp_tax_cat = GETPOST('fk_c_exp_tax_cat', 'int'); +$vatrate = GETPOST('vatrate', 'int'); +$qty = GETPOST('qty', 'int'); // Security check $result = restrictedArea($user, 'expensereport', $fk_expense, 'expensereport'); @@ -61,30 +63,52 @@ $result = restrictedArea($user, 'expensereport', $fk_expense, 'expensereport'); */ top_httphead(); +$rep = new stdClass(); +$rep->response_status = 0; +$rep->data = null; +$rep->error = '';//@todo deprecated use error_message instead +$rep->errorMessage = ''; + if (empty($fk_expense) || $fk_expense < 0) { - echo json_encode(array('error' => $langs->transnoentitiesnoconv('ErrorBadValueForParameter', $fk_expense, 'fk_expense'))); + $rep->errorMessage = json_encode(array('error' => $langs->transnoentitiesnoconv('ErrorBadValueForParameter', $fk_expense, 'fk_expense'))); } elseif (empty($fk_c_exp_tax_cat) || $fk_c_exp_tax_cat < 0) { - echo json_encode(array('error' => $langs->transnoentitiesnoconv('ErrorBadValueForParameter', $fk_c_exp_tax_cat, 'fk_c_exp_tax_cat'))); + $rep->errorMessage = json_encode(array('error' => $langs->transnoentitiesnoconv('ErrorBadValueForParameter', $fk_c_exp_tax_cat, 'fk_c_exp_tax_cat'))); + + $rep->response_status = 'error'; } else { // @see ndfp.class.php:3576 (method: compute_total_km) $expense = new ExpenseReport($db); if ($expense->fetch($fk_expense) <= 0) { - echo json_encode(array('error' => $langs->transnoentitiesnoconv('ErrorRecordNotFound'), 'fk_expense' => $fk_expense)); + $rep->errorMessage = json_encode(array('error' => $langs->transnoentitiesnoconv('ErrorRecordNotFound'), 'fk_expense' => $fk_expense)); + $rep->response_status = 'error'; } else { $userauthor = new User($db); if ($userauthor->fetch($expense->fk_user_author) <= 0) { - echo json_encode(array('error' => $langs->transnoentitiesnoconv('ErrorRecordNotFound'), 'fk_user_author' => $expense->fk_user_author)); + $rep->errorMessage = json_encode(array('error' => $langs->transnoentitiesnoconv('ErrorRecordNotFound'), 'fk_user_author' => $expense->fk_user_author)); + $rep->response_status = 'error'; } else { - $expenseik = new ExpenseReportIk($db); - $range = $expenseik->getRangeByUser($userauthor, $fk_c_exp_tax_cat); - if (empty($range)) { - echo json_encode(array('error' => $langs->transnoentitiesnoconv('ErrorRecordNotFound'), 'range' => $range)); + $expense = new ExpenseReport($db); + $result = $expense->computeTotalKm($fk_c_exp_tax_cat,$qty,$vatrate); + if ($result < 0){ + $rep->error = $result; + $rep->errorMessage = $langs->trans('errorComputeTtcOnMileageExpense'); + $rep->response_status = 'error'; + }else{ + $rep->data = $result; + $rep->response_status = 'success'; + } + + /*if (empty($range)) { + $rep->errorMessage = json_encode(array('error' => $langs->transnoentitiesnoconv('ErrorRecordNotFound'), 'range' => $range)); + $rep->response_status = 'error'; } else { $ikoffset = price($range->ikoffset, 0, $langs, 1, -1, -1, $conf->currency); - echo json_encode(array('up' => $range->coef, 'ikoffset' => $range->ikoffset, 'title' => $langs->transnoentitiesnoconv('ExpenseRangeOffset', $ikoffset), 'comment' => 'offset should be applied on addline or updateline')); - } + $rep->errorMessage = json_encode(array('up' => $range->coef, 'ikoffset' => $range->ikoffset, 'title' => $langs->transnoentitiesnoconv('ExpenseRangeOffset', $ikoffset), 'comment' => 'offset should be applied on addline or updateline')); + $rep->response_status = 'error'; + }*/ } } } +echo json_encode($rep); diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index c1aebe67534..c14edaa68da 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -2377,7 +2377,7 @@ if ($action == 'create') { // Quantity print ''; - print ''; // We must be able to enter decimal qty + print ''; // We must be able to enter decimal qty print ''; //print ''.$langs->trans('AmountHT').''; @@ -2559,7 +2559,7 @@ if ($action == 'create') { // Quantity print ''; - print ''; // We must be able to enter decimal qty + print ''; // We must be able to enter decimal qty print ''; // Picture @@ -2579,7 +2579,7 @@ if ($action == 'create') { print ''; print ''; - + //var_dump($object); print ''; diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 9a69784adce..1d054eeb466 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -398,7 +398,6 @@ class ExpenseReport extends CommonObject } } - /** * Load an object from its id and create a new one in database * @@ -2559,6 +2558,105 @@ class ExpenseReport extends CommonObject return -1; } } + + /** + * \brief Compute the cost of the kilometers expense based on the number of kilometers and the vehicule category + * + * @param fk_cat Category of the vehicule used + * @param qty Number of kilometers + * @param tva VAT rate + * @return int <0 if KO, total ttc if OK + */ + function computeTotalKm($fk_cat, $qty, $tva) + { + global $langs,$user,$db,$conf; + + $total_ttc = 0; + $ranges = array(); + $coef = 0; + $offset = 0; + + if ($fk_cat < 0){ + $this->error = $langs->trans('ErrorBadParameterCat'); + return -1; + } + + if ($qty <= 0){ + $this->error = $langs->trans('ErrorBadParameterQty'); + return -1; + } + + $currentUser = new User($db); + $currentUser->fetch($this->fk_user); + $currentUser->getrights('expensereport'); + //Clean + $qty = price2num($qty); + + $sql = " SELECT r.range_ik, t.offset, t.coef"; + $sql .= " FROM ".MAIN_DB_PREFIX."c_exp_tax t"; + $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_exp_tax_range r ON r.rowid = t.fk_range"; + $sql .= " WHERE t.fk_cat = ".$fk_cat; + $sql .= " ORDER BY r.range_ik ASC"; + dol_syslog("expenseReport::computeTotalkm sql=".$sql, LOG_DEBUG); + + $result = $this->db->query($sql); + + if ($result) + { + $num = $this->db->num_rows($result); + + if ($num) + { + for ($i = 0; $i < $num; $i++) + { + $obj = $this->db->fetch_object($result); + + $ranges[$i] = $obj; + } + + + for ($i = 0; $i < $num; $i++) + { + if ($i < ($num - 1)) + { + if ($qty > $ranges[$i]->range && $qty < $ranges[$i+1]->range) + { + $coef = $ranges[$i]->coef; + $offset = $ranges[$i]->offset; + } + } + else + { + if ($qty > $ranges[$i]->range) + { + $coef = $ranges[$i]->coef; + $offset = $ranges[$i]->offset; + } + } + } + + $total_ht = $coef; + //$total_ttc = price2num($total_ht + ( $total_ht * $tva / 100),'MT'); + return $total_ht; + } + else + { + $this->error = $langs->trans('TaxUndefinedForThisCategory'); + + return -1; + } + + } + else + { + $this->error = $this->db->error()." sql=".$sql; + + return -1; + } + } + + + } @@ -2941,4 +3039,6 @@ class ExpenseReportLine extends CommonObjectLine return -2; } } + + // ajouter ici comput_ ... } diff --git a/htdocs/expensereport/class/expensereport_ik.class.php b/htdocs/expensereport/class/expensereport_ik.class.php index 49ac0af9857..0d374f1c722 100644 --- a/htdocs/expensereport/class/expensereport_ik.class.php +++ b/htdocs/expensereport/class/expensereport_ik.class.php @@ -197,12 +197,13 @@ class ExpenseReportIk extends CommonObject { $default_range = (int) $userauthor->default_range; // if not defined, then 0 $ranges = $this->getRangesByCategory($fk_c_exp_tax_cat); - + // prevent out of range -1 indice + $indice = $default_range > 0 ? $default_range - 1 : 0; // substract 1 because array start from 0 - if (empty($ranges) || !isset($ranges[$default_range - 1])) { + if (empty($ranges) || !isset($ranges[$indice])) { return false; } else { - return $ranges[$default_range - 1]; + return $ranges[$indice]; } } From d47715d9f58177a2d8c6109c2fd0400c641cfcb2 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Mon, 23 May 2022 14:55:40 +0000 Subject: [PATCH 02/21] Fixing style errors. --- htdocs/expensereport/ajax/ajaxik.php | 7 ++- .../class/expensereport.class.php | 51 +++++++------------ 2 files changed, 20 insertions(+), 38 deletions(-) diff --git a/htdocs/expensereport/ajax/ajaxik.php b/htdocs/expensereport/ajax/ajaxik.php index a02e7dd6c73..397245af94e 100644 --- a/htdocs/expensereport/ajax/ajaxik.php +++ b/htdocs/expensereport/ajax/ajaxik.php @@ -88,14 +88,13 @@ if (empty($fk_expense) || $fk_expense < 0) { $rep->errorMessage = json_encode(array('error' => $langs->transnoentitiesnoconv('ErrorRecordNotFound'), 'fk_user_author' => $expense->fk_user_author)); $rep->response_status = 'error'; } else { - $expense = new ExpenseReport($db); - $result = $expense->computeTotalKm($fk_c_exp_tax_cat,$qty,$vatrate); - if ($result < 0){ + $result = $expense->computeTotalKm($fk_c_exp_tax_cat, $qty, $vatrate); + if ($result < 0) { $rep->error = $result; $rep->errorMessage = $langs->trans('errorComputeTtcOnMileageExpense'); $rep->response_status = 'error'; - }else{ + } else { $rep->data = $result; $rep->response_status = 'success'; } diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 1d054eeb466..f7010ae8cb4 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2576,12 +2576,12 @@ class ExpenseReport extends CommonObject $coef = 0; $offset = 0; - if ($fk_cat < 0){ + if ($fk_cat < 0) { $this->error = $langs->trans('ErrorBadParameterCat'); return -1; } - if ($qty <= 0){ + if ($qty <= 0) { $this->error = $langs->trans('ErrorBadParameterQty'); return -1; } @@ -2601,62 +2601,45 @@ class ExpenseReport extends CommonObject $result = $this->db->query($sql); - if ($result) - { + if ($result) { $num = $this->db->num_rows($result); - if ($num) - { - for ($i = 0; $i < $num; $i++) - { + if ($num) { + for ($i = 0; $i < $num; $i++) { $obj = $this->db->fetch_object($result); $ranges[$i] = $obj; } - for ($i = 0; $i < $num; $i++) - { - if ($i < ($num - 1)) - { - if ($qty > $ranges[$i]->range && $qty < $ranges[$i+1]->range) - { - $coef = $ranges[$i]->coef; - $offset = $ranges[$i]->offset; - } + for ($i = 0; $i < $num; $i++) { + if ($i < ($num - 1)) { + if ($qty > $ranges[$i]->range && $qty < $ranges[$i+1]->range) { + $coef = $ranges[$i]->coef; + $offset = $ranges[$i]->offset; } - else - { - if ($qty > $ranges[$i]->range) - { - $coef = $ranges[$i]->coef; - $offset = $ranges[$i]->offset; - } + } else { + if ($qty > $ranges[$i]->range) { + $coef = $ranges[$i]->coef; + $offset = $ranges[$i]->offset; } } + } $total_ht = $coef; //$total_ttc = price2num($total_ht + ( $total_ht * $tva / 100),'MT'); return $total_ht; - } - else - { + } else { $this->error = $langs->trans('TaxUndefinedForThisCategory'); return -1; } - - } - else - { + } else { $this->error = $this->db->error()." sql=".$sql; return -1; } } - - - } From 381e063123294c9eccdb7fc91756be2ad68f9087 Mon Sep 17 00:00:00 2001 From: jpb Date: Mon, 23 May 2022 16:57:25 +0200 Subject: [PATCH 03/21] fix cast in sql --- htdocs/expensereport/class/expensereport.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 1d054eeb466..1268aad331e 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2595,7 +2595,7 @@ class ExpenseReport extends CommonObject $sql = " SELECT r.range_ik, t.offset, t.coef"; $sql .= " FROM ".MAIN_DB_PREFIX."c_exp_tax t"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_exp_tax_range r ON r.rowid = t.fk_range"; - $sql .= " WHERE t.fk_cat = ".$fk_cat; + $sql .= " WHERE t.fk_cat = ".(int) $fk_cat; $sql .= " ORDER BY r.range_ik ASC"; dol_syslog("expenseReport::computeTotalkm sql=".$sql, LOG_DEBUG); From 68148c008c4f7c30662a4a9232a5ceb43979e6e9 Mon Sep 17 00:00:00 2001 From: jpb Date: Mon, 23 May 2022 19:59:54 +0200 Subject: [PATCH 04/21] stickler fix --- htdocs/expensereport/card.php | 5 +++-- htdocs/expensereport/class/expensereport.class.php | 9 ++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index c14edaa68da..7c32fefc61e 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -2597,13 +2597,14 @@ if ($action == 'create') { } }); - /* price calculation */ + /* unit price coéf calculation */ jQuery("#input_qty, #fk_c_type_fees, #select_fk_c_exp_tax_cat, #vatrate ").change(function(event) { let type_fee = jQuery("#fk_c_type_fees").find(":selected").val(); let tax_cat = jQuery("#select_fk_c_exp_tax_cat").find(":selected").val(); let tva = jQuery("#vatrate").find(":selected").val(); let qty = jQuery("#input_qty").val(); + console.log(qty); let path = "'.dol_buildpath("/expensereport/ajax/ajaxik.php", 1) .'"; @@ -2623,7 +2624,7 @@ if ($action == 'create') { jQuery("#value_unit_ht").val(response.data); }else{ - console.log(response.errorMessage) + /* console.log(response.errorMessage) */ } }, diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 4b8fc325f8e..5a08b8c18df 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2562,15 +2562,16 @@ class ExpenseReport extends CommonObject /** * \brief Compute the cost of the kilometers expense based on the number of kilometers and the vehicule category * - * @param fk_cat Category of the vehicule used - * @param qty Number of kilometers - * @param tva VAT rate + * @param $fk_cat Category of the vehicule used + * @param $qty Number of kilometers + * @param $tva VAT rate * @return int <0 if KO, total ttc if OK */ function computeTotalKm($fk_cat, $qty, $tva) { global $langs,$user,$db,$conf; + $total_ttc = 0; $ranges = array(); $coef = 0; @@ -2597,6 +2598,7 @@ class ExpenseReport extends CommonObject $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_exp_tax_range r ON r.rowid = t.fk_range"; $sql .= " WHERE t.fk_cat = ".(int) $fk_cat; $sql .= " ORDER BY r.range_ik ASC"; + var_dump($sql); dol_syslog("expenseReport::computeTotalkm sql=".$sql, LOG_DEBUG); $result = $this->db->query($sql); @@ -2614,6 +2616,7 @@ class ExpenseReport extends CommonObject for ($i = 0; $i < $num; $i++) { if ($i < ($num - 1)) { + if ($qty > $ranges[$i]->range && $qty < $ranges[$i+1]->range) { $coef = $ranges[$i]->coef; $offset = $ranges[$i]->offset; From dd5650025f099aa8915ee0ee53e605741e0ab66d Mon Sep 17 00:00:00 2001 From: jpb Date: Mon, 23 May 2022 20:01:19 +0200 Subject: [PATCH 05/21] fix stickler --- htdocs/expensereport/class/expensereport.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 5a08b8c18df..bb3ce0b3b8c 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2567,7 +2567,7 @@ class ExpenseReport extends CommonObject * @param $tva VAT rate * @return int <0 if KO, total ttc if OK */ - function computeTotalKm($fk_cat, $qty, $tva) + public function computeTotalKm($fk_cat, $qty, $tva) { global $langs,$user,$db,$conf; From 6f0047cc77ae7adde086c503dc8b7690a948e528 Mon Sep 17 00:00:00 2001 From: jpb Date: Mon, 23 May 2022 20:03:08 +0200 Subject: [PATCH 06/21] stickler fix --- htdocs/expensereport/class/expensereport.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index bb3ce0b3b8c..e6e07f7f304 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2598,7 +2598,7 @@ class ExpenseReport extends CommonObject $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_exp_tax_range r ON r.rowid = t.fk_range"; $sql .= " WHERE t.fk_cat = ".(int) $fk_cat; $sql .= " ORDER BY r.range_ik ASC"; - var_dump($sql); + dol_syslog("expenseReport::computeTotalkm sql=".$sql, LOG_DEBUG); $result = $this->db->query($sql); From c2277a644b1a8c08ef02e7b93630feb8c624b2a6 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Mon, 23 May 2022 18:08:49 +0000 Subject: [PATCH 07/21] Fixing style errors. --- htdocs/expensereport/class/expensereport.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index e6e07f7f304..42f40c8e302 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2616,7 +2616,6 @@ class ExpenseReport extends CommonObject for ($i = 0; $i < $num; $i++) { if ($i < ($num - 1)) { - if ($qty > $ranges[$i]->range && $qty < $ranges[$i+1]->range) { $coef = $ranges[$i]->coef; $offset = $ranges[$i]->offset; From 23cd63963a4d49a22904a91c9cd88db6ce176db3 Mon Sep 17 00:00:00 2001 From: jpb Date: Tue, 24 May 2022 08:15:28 +0200 Subject: [PATCH 08/21] add the annual accumulation of mileage costs for the selection of the coefficient --- htdocs/expensereport/ajax/ajaxik.php | 27 ++++++++---------- htdocs/expensereport/card.php | 7 ++--- .../class/expensereport.class.php | 28 ++++++++++++++++--- 3 files changed, 37 insertions(+), 25 deletions(-) diff --git a/htdocs/expensereport/ajax/ajaxik.php b/htdocs/expensereport/ajax/ajaxik.php index 397245af94e..a4b6b3216eb 100644 --- a/htdocs/expensereport/ajax/ajaxik.php +++ b/htdocs/expensereport/ajax/ajaxik.php @@ -89,24 +89,19 @@ if (empty($fk_expense) || $fk_expense < 0) { $rep->response_status = 'error'; } else { $expense = new ExpenseReport($db); - $result = $expense->computeTotalKm($fk_c_exp_tax_cat, $qty, $vatrate); - if ($result < 0) { - $rep->error = $result; - $rep->errorMessage = $langs->trans('errorComputeTtcOnMileageExpense'); - $rep->response_status = 'error'; - } else { - $rep->data = $result; - $rep->response_status = 'success'; + $result = $expense->fetch($fk_expense); + if ($result){ + $result = $expense->computeTotalKm($fk_c_exp_tax_cat, $qty, $vatrate); + if ($result < 0) { + $rep->error = $result; + $rep->errorMessage = $langs->trans('errorComputeTtcOnMileageExpense'); + $rep->response_status = 'error'; + } else { + $rep->data = $result; + $rep->response_status = 'success'; + } } - /*if (empty($range)) { - $rep->errorMessage = json_encode(array('error' => $langs->transnoentitiesnoconv('ErrorRecordNotFound'), 'range' => $range)); - $rep->response_status = 'error'; - } else { - $ikoffset = price($range->ikoffset, 0, $langs, 1, -1, -1, $conf->currency); - $rep->errorMessage = json_encode(array('up' => $range->coef, 'ikoffset' => $range->ikoffset, 'title' => $langs->transnoentitiesnoconv('ExpenseRangeOffset', $ikoffset), 'comment' => 'offset should be applied on addline or updateline')); - $rep->response_status = 'error'; - }*/ } } } diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index 7c32fefc61e..cd8d1365561 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -2604,7 +2604,7 @@ if ($action == 'create') { let tax_cat = jQuery("#select_fk_c_exp_tax_cat").find(":selected").val(); let tva = jQuery("#vatrate").find(":selected").val(); let qty = jQuery("#input_qty").val(); - console.log(qty); + let path = "'.dol_buildpath("/expensereport/ajax/ajaxik.php", 1) .'"; @@ -2621,12 +2621,9 @@ if ($action == 'create') { ,dataType:"json" ,success:function(response) { if (response.response_status == "success"){ - jQuery("#value_unit_ht").val(response.data); - }else{ - /* console.log(response.errorMessage) */ + jQuery("#value_unit").val(""); } - }, }); diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index e6e07f7f304..56b2414c04d 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2572,10 +2572,10 @@ class ExpenseReport extends CommonObject global $langs,$user,$db,$conf; - $total_ttc = 0; + $cumulYearQty = 0; $ranges = array(); $coef = 0; - $offset = 0; + if ($fk_cat < 0) { $this->error = $langs->trans('ErrorBadParameterCat'); @@ -2604,6 +2604,26 @@ class ExpenseReport extends CommonObject $result = $this->db->query($sql); if ($result) { + + if ($conf->global->EXPENSEREPORT_CALCULATE_MILEAGE_EXPENSE_COEFFICIENT_ON_CURRENT_YEAR){ + + $arrayDate = dol_getdate(dol_now()); + $sql = " SELECT count(n.qty) as cumul FROM ".MAIN_DB_PREFIX."expensereport_det n"; + $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."expensereport e ON e.rowid = n.fk_expensereport"; + $sql.= " WHERE e.fk_user_author = ".(int) $this->fk_user_author; + $sql.= " AND YEAR(n.date) = ".(int) $arrayDate['year'] ; + $sql.= " AND n.fk_c_type_fees = 4"; + $sql.= " AND e.fk_statut = ".(int) ExpenseReport::STATUS_VALIDATED; + $resql = $this->db->query($sql); + + if ($resql){ + $obj = $this->db->fetch_object($resql); + $cumulYearQty = $obj->cumul; + } + $qty = $cumulYearQty + $qty; + + } + $num = $this->db->num_rows($result); if ($num) { @@ -2617,12 +2637,12 @@ class ExpenseReport extends CommonObject for ($i = 0; $i < $num; $i++) { if ($i < ($num - 1)) { - if ($qty > $ranges[$i]->range && $qty < $ranges[$i+1]->range) { + if ($qty > $ranges[$i]->range_ik && $qty < $ranges[$i+1]->range_ik) { $coef = $ranges[$i]->coef; $offset = $ranges[$i]->offset; } } else { - if ($qty > $ranges[$i]->range) { + if ($qty > $ranges[$i]->range_ik) { $coef = $ranges[$i]->coef; $offset = $ranges[$i]->offset; } From d425e14d0d6500c4d288629515229d0706abf58a Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Tue, 24 May 2022 06:26:08 +0000 Subject: [PATCH 09/21] Fixing style errors. --- htdocs/expensereport/ajax/ajaxik.php | 3 +-- htdocs/expensereport/class/expensereport.class.php | 8 ++------ 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/htdocs/expensereport/ajax/ajaxik.php b/htdocs/expensereport/ajax/ajaxik.php index a4b6b3216eb..a23c8490a36 100644 --- a/htdocs/expensereport/ajax/ajaxik.php +++ b/htdocs/expensereport/ajax/ajaxik.php @@ -90,7 +90,7 @@ if (empty($fk_expense) || $fk_expense < 0) { } else { $expense = new ExpenseReport($db); $result = $expense->fetch($fk_expense); - if ($result){ + if ($result) { $result = $expense->computeTotalKm($fk_c_exp_tax_cat, $qty, $vatrate); if ($result < 0) { $rep->error = $result; @@ -101,7 +101,6 @@ if (empty($fk_expense) || $fk_expense < 0) { $rep->response_status = 'success'; } } - } } } diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 56b2414c04d..65e04569026 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2604,9 +2604,7 @@ class ExpenseReport extends CommonObject $result = $this->db->query($sql); if ($result) { - - if ($conf->global->EXPENSEREPORT_CALCULATE_MILEAGE_EXPENSE_COEFFICIENT_ON_CURRENT_YEAR){ - + if ($conf->global->EXPENSEREPORT_CALCULATE_MILEAGE_EXPENSE_COEFFICIENT_ON_CURRENT_YEAR) { $arrayDate = dol_getdate(dol_now()); $sql = " SELECT count(n.qty) as cumul FROM ".MAIN_DB_PREFIX."expensereport_det n"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."expensereport e ON e.rowid = n.fk_expensereport"; @@ -2616,12 +2614,11 @@ class ExpenseReport extends CommonObject $sql.= " AND e.fk_statut = ".(int) ExpenseReport::STATUS_VALIDATED; $resql = $this->db->query($sql); - if ($resql){ + if ($resql) { $obj = $this->db->fetch_object($resql); $cumulYearQty = $obj->cumul; } $qty = $cumulYearQty + $qty; - } $num = $this->db->num_rows($result); @@ -2636,7 +2633,6 @@ class ExpenseReport extends CommonObject for ($i = 0; $i < $num; $i++) { if ($i < ($num - 1)) { - if ($qty > $ranges[$i]->range_ik && $qty < $ranges[$i+1]->range_ik) { $coef = $ranges[$i]->coef; $offset = $ranges[$i]->offset; From 851b9e6cdddbd15394ff334fef8516d8555b977b Mon Sep 17 00:00:00 2001 From: jpb Date: Tue, 24 May 2022 09:06:57 +0200 Subject: [PATCH 10/21] revamp sql --- htdocs/expensereport/class/expensereport.class.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 56b2414c04d..d63188938ea 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2610,10 +2610,12 @@ class ExpenseReport extends CommonObject $arrayDate = dol_getdate(dol_now()); $sql = " SELECT count(n.qty) as cumul FROM ".MAIN_DB_PREFIX."expensereport_det n"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."expensereport e ON e.rowid = n.fk_expensereport"; + $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_type_fees tf ON tf.id = n.fk_c_type_fees"; $sql.= " WHERE e.fk_user_author = ".(int) $this->fk_user_author; $sql.= " AND YEAR(n.date) = ".(int) $arrayDate['year'] ; - $sql.= " AND n.fk_c_type_fees = 4"; + $sql.= " AND tf.code = 'EX_KME' "; $sql.= " AND e.fk_statut = ".(int) ExpenseReport::STATUS_VALIDATED; + $resql = $this->db->query($sql); if ($resql){ From faca7e057efe09e3cf9c5c5b7a9667ac27b6b0ef Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 29 May 2022 11:22:32 +0200 Subject: [PATCH 11/21] Update expensereport.class.php --- htdocs/expensereport/class/expensereport.class.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 6b3e8b67399..f62f8542c5b 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2562,10 +2562,10 @@ class ExpenseReport extends CommonObject /** * \brief Compute the cost of the kilometers expense based on the number of kilometers and the vehicule category * - * @param $fk_cat Category of the vehicule used - * @param $qty Number of kilometers - * @param $tva VAT rate - * @return int <0 if KO, total ttc if OK + * @param int $fk_cat Category of the vehicule used + * @param real $qty Number of kilometers + * @param real $tva VAT rate + * @return int <0 if KO, total ttc if OK */ public function computeTotalKm($fk_cat, $qty, $tva) { From cf0887cfdf485c75647a58eb55dfc6ab1c73bc1f Mon Sep 17 00:00:00 2001 From: jpb Date: Mon, 30 May 2022 15:46:21 +0200 Subject: [PATCH 12/21] swith table --- htdocs/expensereport/class/expensereport.class.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 6b3e8b67399..9f7f42c2659 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2593,10 +2593,10 @@ class ExpenseReport extends CommonObject //Clean $qty = price2num($qty); - $sql = " SELECT r.range_ik, t.offset, t.coef"; - $sql .= " FROM ".MAIN_DB_PREFIX."c_exp_tax t"; + $sql = " SELECT r.range_ik, t.ikoffset as offset, t.coef"; + $sql .= " FROM ".MAIN_DB_PREFIX."expensereport_ik t"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_exp_tax_range r ON r.rowid = t.fk_range"; - $sql .= " WHERE t.fk_cat = ".(int) $fk_cat; + $sql .= " WHERE t.fk_c_exp_tax_cat = ".(int) $fk_cat; $sql .= " ORDER BY r.range_ik ASC"; dol_syslog("expenseReport::computeTotalkm sql=".$sql, LOG_DEBUG); From cbbe225705a494bc50e1a2ca4bf4480551288ff6 Mon Sep 17 00:00:00 2001 From: jpb Date: Mon, 30 May 2022 15:53:37 +0200 Subject: [PATCH 13/21] return 0 --- htdocs/expensereport/class/expensereport.class.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 82b23f27e39..607a2035ed7 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2646,14 +2646,11 @@ class ExpenseReport extends CommonObject } } } - $total_ht = $coef; - //$total_ttc = price2num($total_ht + ( $total_ht * $tva / 100),'MT'); return $total_ht; } else { $this->error = $langs->trans('TaxUndefinedForThisCategory'); - - return -1; + return 0; } } else { $this->error = $this->db->error()." sql=".$sql; From dbd0c6d7d102625207bbfc10ac91bf9b6f4f0eb3 Mon Sep 17 00:00:00 2001 From: jpb Date: Mon, 30 May 2022 15:57:07 +0200 Subject: [PATCH 14/21] rr --- htdocs/expensereport/ajax/ajaxik.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/expensereport/ajax/ajaxik.php b/htdocs/expensereport/ajax/ajaxik.php index a23c8490a36..9abd767e1f9 100644 --- a/htdocs/expensereport/ajax/ajaxik.php +++ b/htdocs/expensereport/ajax/ajaxik.php @@ -71,21 +71,21 @@ $rep->errorMessage = ''; if (empty($fk_expense) || $fk_expense < 0) { - $rep->errorMessage = json_encode(array('error' => $langs->transnoentitiesnoconv('ErrorBadValueForParameter', $fk_expense, 'fk_expense'))); + $rep->errorMessage = $langs->transnoentitiesnoconv('ErrorBadValueForParameter', $fk_expense, 'fk_expense'); } elseif (empty($fk_c_exp_tax_cat) || $fk_c_exp_tax_cat < 0) { - $rep->errorMessage = json_encode(array('error' => $langs->transnoentitiesnoconv('ErrorBadValueForParameter', $fk_c_exp_tax_cat, 'fk_c_exp_tax_cat'))); + $rep->errorMessage = $langs->transnoentitiesnoconv('ErrorBadValueForParameter', $fk_c_exp_tax_cat, 'fk_c_exp_tax_cat'); $rep->response_status = 'error'; } else { // @see ndfp.class.php:3576 (method: compute_total_km) $expense = new ExpenseReport($db); if ($expense->fetch($fk_expense) <= 0) { - $rep->errorMessage = json_encode(array('error' => $langs->transnoentitiesnoconv('ErrorRecordNotFound'), 'fk_expense' => $fk_expense)); + $rep->errorMessage = $langs->transnoentitiesnoconv('ErrorRecordNotFound'); $rep->response_status = 'error'; } else { $userauthor = new User($db); if ($userauthor->fetch($expense->fk_user_author) <= 0) { - $rep->errorMessage = json_encode(array('error' => $langs->transnoentitiesnoconv('ErrorRecordNotFound'), 'fk_user_author' => $expense->fk_user_author)); + $rep->errorMessage = $langs->transnoentitiesnoconv('ErrorRecordNotFound'); $rep->response_status = 'error'; } else { $expense = new ExpenseReport($db); From a549e922a911d2b4207c7ed695a8846c287d8b1b Mon Sep 17 00:00:00 2001 From: jpb Date: Mon, 30 May 2022 16:08:04 +0200 Subject: [PATCH 15/21] add return on tax_rat <= 0 --- htdocs/expensereport/card.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index cd8d1365561..faa71b6f39e 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -2615,6 +2615,10 @@ if ($action == 'create') { if (type_fee == 4) { // frais_kilométriques + if (tax_cat == "" || parseInt(tax_cat) <= 0){ + return ; + } + jQuery.ajax({ url: path ,async:false From 0b0f3af6c0d055f8776c7bd66571e1be07d1fe5d Mon Sep 17 00:00:00 2001 From: jpb Date: Mon, 30 May 2022 16:13:56 +0200 Subject: [PATCH 16/21] add trigger on js --- htdocs/expensereport/ajax/ajaxik.php | 1 + htdocs/expensereport/card.php | 1 + htdocs/expensereport/class/expensereport.class.php | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/expensereport/ajax/ajaxik.php b/htdocs/expensereport/ajax/ajaxik.php index 9abd767e1f9..89275498b6d 100644 --- a/htdocs/expensereport/ajax/ajaxik.php +++ b/htdocs/expensereport/ajax/ajaxik.php @@ -76,6 +76,7 @@ if (empty($fk_expense) || $fk_expense < 0) { $rep->errorMessage = $langs->transnoentitiesnoconv('ErrorBadValueForParameter', $fk_c_exp_tax_cat, 'fk_c_exp_tax_cat'); $rep->response_status = 'error'; + } else { // @see ndfp.class.php:3576 (method: compute_total_km) $expense = new ExpenseReport($db); diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index faa71b6f39e..729b95bc2c2 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -2626,6 +2626,7 @@ if ($action == 'create') { ,success:function(response) { if (response.response_status == "success"){ jQuery("#value_unit_ht").val(response.data); + jQuery("#value_unit_ht").trigger("change"); jQuery("#value_unit").val(""); } }, diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 607a2035ed7..da93c26ceaa 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2610,7 +2610,7 @@ class ExpenseReport extends CommonObject $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."expensereport e ON e.rowid = n.fk_expensereport"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_type_fees tf ON tf.id = n.fk_c_type_fees"; $sql.= " WHERE e.fk_user_author = ".(int) $this->fk_user_author; - $sql.= " AND YEAR(n.date) = ".(int) $arrayDate['year'] ; + $sql.= " AND YEAR(n.date) = ".(int) $arrayDate['year']; $sql.= " AND tf.code = 'EX_KME' "; $sql.= " AND e.fk_statut = ".(int) ExpenseReport::STATUS_VALIDATED; From 2526afa5b984b13149949ac608110d60d965df80 Mon Sep 17 00:00:00 2001 From: jpb Date: Mon, 30 May 2022 16:15:25 +0200 Subject: [PATCH 17/21] remove console.log --- htdocs/expensereport/card.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index 729b95bc2c2..12bb21b6c9b 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -2632,10 +2632,6 @@ if ($action == 'create') { }, }); - - - }else{ - console.log("not a type concerned"); } /*console.log(event.which); // discard event tag and arrows From 263a8af0e6ed6a4cbd061a5e96162281808831af Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Mon, 30 May 2022 14:21:11 +0000 Subject: [PATCH 18/21] Fixing style errors. --- htdocs/expensereport/ajax/ajaxik.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/expensereport/ajax/ajaxik.php b/htdocs/expensereport/ajax/ajaxik.php index 89275498b6d..9abd767e1f9 100644 --- a/htdocs/expensereport/ajax/ajaxik.php +++ b/htdocs/expensereport/ajax/ajaxik.php @@ -76,7 +76,6 @@ if (empty($fk_expense) || $fk_expense < 0) { $rep->errorMessage = $langs->transnoentitiesnoconv('ErrorBadValueForParameter', $fk_c_exp_tax_cat, 'fk_c_exp_tax_cat'); $rep->response_status = 'error'; - } else { // @see ndfp.class.php:3576 (method: compute_total_km) $expense = new ExpenseReport($db); From 90140940948344298db33ee71fbdef8ad0c96368 Mon Sep 17 00:00:00 2001 From: jpb Date: Mon, 30 May 2022 16:22:35 +0200 Subject: [PATCH 19/21] add trans --- htdocs/langs/en_US/expensereports.lang | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/htdocs/langs/en_US/expensereports.lang b/htdocs/langs/en_US/expensereports.lang index 624a278b393..6a305e43ad7 100644 --- a/htdocs/langs/en_US/expensereports.lang +++ b/htdocs/langs/en_US/expensereports.lang @@ -1 +1,9 @@ ExpenseReportPayments=Expense report payments +# +# error +# + +TaxUndefinedForThisCategory = Taxe undefined for this category +ErrorRecordNotFound=Record not found +errorComputeTtcOnMileageExpense=Error on computing mileage expense +ErrorBadValueForParameter=Error bad value for parameter %s From b95ad9d8479b00fb11e834a39a7f148e27b34ee6 Mon Sep 17 00:00:00 2001 From: jpb Date: Mon, 30 May 2022 16:38:09 +0200 Subject: [PATCH 20/21] add jsnotify on error --- htdocs/expensereport/card.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index 12bb21b6c9b..dd34123e188 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -2628,6 +2628,8 @@ if ($action == 'create') { jQuery("#value_unit_ht").val(response.data); jQuery("#value_unit_ht").trigger("change"); jQuery("#value_unit").val(""); + } else if(response.response_status == "error" && response.errorMessage != undefined && response.errorMessage.length > 0 ){ + $.jnotify(response.errorMessage, "error", {timeout: 0, type: "error"},{ remove: function (){} } ); } }, From bc925d8fb4eb46fb020b2be8574113c1ad89263d Mon Sep 17 00:00:00 2001 From: jpb Date: Mon, 6 Jun 2022 18:03:41 +0200 Subject: [PATCH 21/21] change id to class name on input qty --- htdocs/expensereport/card.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index dd34123e188..818b3d564a6 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -2377,7 +2377,7 @@ if ($action == 'create') { // Quantity print ''; - print ''; // We must be able to enter decimal qty + print ''; // We must be able to enter decimal qty print ''; //print ''.$langs->trans('AmountHT').''; @@ -2559,7 +2559,7 @@ if ($action == 'create') { // Quantity print ''; - print ''; // We must be able to enter decimal qty + print ''; // We must be able to enter decimal qty print ''; // Picture @@ -2598,12 +2598,12 @@ if ($action == 'create') { }); /* unit price coéf calculation */ - jQuery("#input_qty, #fk_c_type_fees, #select_fk_c_exp_tax_cat, #vatrate ").change(function(event) { + jQuery(".input_qty, #fk_c_type_fees, #select_fk_c_exp_tax_cat, #vatrate ").change(function(event) { let type_fee = jQuery("#fk_c_type_fees").find(":selected").val(); let tax_cat = jQuery("#select_fk_c_exp_tax_cat").find(":selected").val(); let tva = jQuery("#vatrate").find(":selected").val(); - let qty = jQuery("#input_qty").val(); + let qty = jQuery(".input_qty").val();