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]; } }