} dol_fiche_end(); } // end edit or not edit } else { dol_print_error($db); } } //fin si id > 0 } /* * Barre d'actions */ print '<div class="tabsAction">'; if ($action != 'create' && $action != 'edit') { $object = new ExpenseReport($db); $object->fetch($id, $ref); /* Si l'état est "Brouillon" * ET user à droit "creer/supprimer" * ET fk_user_author == user courant * Afficher : "Enregistrer" / "Modifier" / "Supprimer" */ if ($user->rights->expensereport->creer && $object->fk_statut == 0) { if ($object->fk_user_author == $user->id) { // Modify print '<a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?action=edit&id=' . $object->id . '">' . $langs->trans('Modify') . '</a>'; // Validate if (count($object->lines) > 0 || count($object->lignes) > 0) { print '<a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?action=save&id=' . $object->id . '">' . $langs->trans('ValidateAndSubmit') . '</a>'; } if ($user->rights->expensereport->supprimer) {
/** * update * * @param User $fuser User * @return int <0 if KO, >0 if OK */ function update($fuser) { global $fuser, $langs, $conf; $error = 0; // Clean parameters $this->comments = trim($this->comments); $this->vatrate = price2num($this->vatrate); $this->db->begin(); // Mise a jour ligne en base $sql = "UPDATE " . MAIN_DB_PREFIX . "expensereport_det SET"; $sql .= " comments='" . $this->db->escape($this->comments) . "'"; $sql .= ",value_unit=" . $this->value_unit . ""; $sql .= ",qty=" . $this->qty . ""; $sql .= ",date='" . $this->db->idate($this->date) . "'"; $sql .= ",total_ht=" . $this->total_ht . ""; $sql .= ",total_tva=" . $this->total_tva . ""; $sql .= ",total_ttc=" . $this->total_ttc . ""; $sql .= ",tva_tx=" . $this->vatrate; if ($this->fk_c_type_fees) { $sql .= ",fk_c_type_fees=" . $this->fk_c_type_fees; } else { $sql .= ",fk_c_type_fees=null"; } if ($this->fk_projet) { $sql .= ",fk_projet=" . $this->fk_projet; } else { $sql .= ",fk_projet=null"; } $sql .= " WHERE rowid = " . $this->rowid; dol_syslog("ExpenseReportLine::update sql=" . $sql); $resql = $this->db->query($sql); if ($resql) { $tmpparent = new ExpenseReport($this->db); $result = $tmpparent->fetch($this->fk_expensereport); if ($result > 0) { $result = $tmpparent->update_price(); if ($result < 0) { $error++; $this->error = $tmpparent->error; $this->errors = $tmpparent->errors; } } else { $error++; $this->error = $tmpparent->error; $this->errors = $tmpparent->errors; } } else { $error++; dol_print_error($this->db); } if (!$error) { $this->db->commit(); return 1; } else { $this->error = $this->db->lasterror(); dol_syslog("ExpenseReportLine::update Error " . $this->error, LOG_ERR); $this->db->rollback(); return -2; } }
// Amount with all taxes print '<td class="liste_titre" align="right"><input class="flat" type="text" size="6" name="search_amount_ttc" value="' . $search_amount_ttc . '"></td>'; // Status print '<td class="liste_titre" align="right">'; select_expensereport_statut($search_status, 'search_status'); print '</td>'; print '<td class="liste_titre" align="right">'; print '<input type="image" class="liste_titre" name="button_search" src="' . img_picto($langs->trans("Search"), 'search.png', '', '', 1) . '" value="' . dol_escape_htmltag($langs->trans("Search")) . '" title="' . dol_escape_htmltag($langs->trans("Search")) . '">'; print '<input type="image" class="liste_titre" name="button_removefilter" src="' . img_picto($langs->trans("Search"), 'searchclear.png', '', '', 1) . '" value="' . dol_escape_htmltag($langs->trans("RemoveFilter")) . '" title="' . dol_escape_htmltag($langs->trans("RemoveFilter")) . '">'; print '</td>'; print "</tr>\n"; $var = true; $total_total_ht = 0; $total_total_ttc = 0; $total_total_tva = 0; $expensereportstatic = new ExpenseReport($db); if ($num > 0) { while ($i < min($num, $limit)) { $objp = $db->fetch_object($resql); $expensereportstatic->id = $objp->rowid; $expensereportstatic->ref = $objp->ref; $var = !$var; print "<tr " . $bc[$var] . ">"; print '<td>' . $expensereportstatic->getNomUrl(1) . '</td>'; print '<td align="center">' . ($objp->date_debut > 0 ? dol_print_date($objp->date_debut, 'day') : '') . '</td>'; print '<td align="center">' . ($objp->date_fin > 0 ? dol_print_date($objp->date_fin, 'day') : '') . '</td>'; print '<td align="left"><a href="' . DOL_URL_ROOT . '/user/card.php?id=' . $objp->id_user . '">' . img_object($langs->trans("ShowUser"), "user") . ' ' . dolGetFirstLastname($objp->firstname, $objp->lastname) . '</a></td>'; print '<td align="right">' . price($objp->total_ht) . '</td>'; print '<td align="right">' . price($objp->total_tva) . '</td>'; print '<td align="right">' . price($objp->total_ttc) . '</td>'; $expensereporttmp->status = $objp->status;
// Number of cheque to send if (!empty($conf->banque->enabled) && $user->rights->banque->lire && !$user->societe_id) { include_once DOL_DOCUMENT_ROOT . '/compta/paiement/cheque/class/remisecheque.class.php'; $board = new RemiseCheque($db); $dashboardlines[] = $board->load_board($user); } // Number of foundation members if (!empty($conf->adherent->enabled) && $user->rights->adherent->lire && !$user->societe_id) { include_once DOL_DOCUMENT_ROOT . '/adherents/class/adherent.class.php'; $board = new Adherent($db); $dashboardlines[] = $board->load_board($user); } // Number of expense reports to pay if (!empty($conf->expensereport->enabled) && $user->rights->expensereport->lire) { include_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php'; $board = new ExpenseReport($db); $dashboardlines[] = $board->load_board($user); } // Calculate total nb of late $totallate = 0; $var = true; //Remove any invalid response //load_board can return an integer if failed or WorkboardResponse if OK $valid_dashboardlines = array(); foreach ($dashboardlines as $tmp) { if ($tmp instanceof WorkboardResponse) { $valid_dashboardlines[] = $tmp; } } $rowspan = count($valid_dashboardlines); foreach ($valid_dashboardlines as $board) {
static function Submit() { $data = Main::GetData(); if (isset($data['food_quantity'], $data['hotel_quantity'], $data['stop_over_quantity'], $data['kilometers_quantity'])) { if (Database::Check((int) $data['food_quantity'], 'SMALLINT') && Database::Check((int) $data['hotel_quantity'], 'SMALLINT') && Database::Check((int) $data['stop_over_quantity'], 'SMALLINT') && Database::Check((int) $data['kilometers_quantity'], 'SMALLINT') && !Session::Get('accountant')) { $now = new DateTime(); $now = $now->format('Y-m-d'); $report = ExpenseReport::GetReport($now, Session::Get('id')); $query = 'UPDATE package_entry ' . 'SET quantity=:quantity ' . 'WHERE fk_expense_report=:fk_expense_report ' . 'AND fk_expense_package=:fk_expense_package'; Database::Exec($query, ['quantity' => (int) $data['food_quantity'], 'fk_expense_report' => (int) $report->getId(), 'fk_expense_package' => 4]); Database::Exec($query, ['quantity' => (int) $data['hotel_quantity'], 'fk_expense_report' => (int) $report->getId(), 'fk_expense_package' => 3]); Database::Exec($query, ['quantity' => (int) $data['stop_over_quantity'], 'fk_expense_report' => (int) $report->getId(), 'fk_expense_package' => 1]); Database::Exec($query, ['quantity' => (int) $data['kilometers_quantity'], 'fk_expense_report' => (int) $report->getId(), 'fk_expense_package' => 2]); $query = 'UPDATE expense_report ' . 'SET update_date=:update_date ' . 'WHERE id=:id'; $now = new DateTime(); $now = $now->format('Y-m-d'); Database::Exec($query, ['update_date' => $now, 'id' => $report->getId()]); } } elseif (isset($data['non_package_date'], $data['non_package_label'], $data['non_package_amount']) && !Session::Get('accountant')) { if (Database::Check($data['non_package_label'], 'VARCHAR') && Database::Check((int) $data['non_package_amount'], 'MEDIUMINT')) { $query = 'INSERT INTO non_package_entry(label, entry_date, amount, fk_expense_status, fk_expense_report) ' . 'VALUES(:label, :entry_date, :amount, 1, :fk_expense_report)'; $entry_date = new DateTime($data['non_package_date']); $entry_date = $entry_date->format('Y-m-d'); $now = new DateTime(); $now = $now->format('Y-m-d'); $report = ExpenseReport::GetReport($now, Session::Get('id')); Database::Exec($query, ['label' => $data['non_package_label'], 'entry_date' => $entry_date, 'amount' => $data['non_package_amount'], 'fk_expense_report' => $report->getId()]); $query = 'UPDATE expense_report ' . 'SET update_date=:update_date ' . 'WHERE id=:id'; $now = new DateTime(); $now = $now->format('Y-m-d'); Database::Exec($query, ['update_date' => $now, 'id' => $report->getId()]); } } elseif (isset($data['status_change'], $data['report_id']) && Session::Get('accountant')) { $query = ' UPDATE expense_report SET fk_report_status=:status_change WHERE id=:id '; Database::Exec($query, ['status_change' => $data['status_change'], 'id' => $data['report_id']]); $query = 'UPDATE expense_report ' . 'SET update_date=:update_date ' . 'WHERE id=:id'; $now = new DateTime(); $now = $now->format('Y-m-d'); Database::Exec($query, ['update_date' => $now, 'id' => $data['report_id']]); } elseif (isset($data['report_id']) && Session::Get('accountant')) { throw new Exception('Impossible de récupérer les données de formulaire.'); header('refresh:10; url=/home/display'); } if (Session::Get('accountant')) { header('Location: /report/validate'); } else { header('Location: /report/edit'); } }
/** * expensereport_pdf_create * * @param DoliDB $db Database handler * @param ExpenseReport $object Object order * @param string $message Message * @param string $modele Force le modele a utiliser ('' to not force) * @param Translate $outputlangs objet lang a utiliser pour traduction * @param int $hidedetails Hide details of lines * @param int $hidedesc Hide description * @param int $hideref Hide ref * @return int 0 if KO, 1 if OK */ function expensereport_pdf_create(DoliDB $db, ExpenseReport $object, $message, $modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0) { return $object->generateDocument($modele, $outputlangs, $hidedetails, $hidedesc, $hideref); }
$dashboardlines[] = $board->load_board($user); } // Number of expense reports to approve if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->approve) { include_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; $board=new ExpenseReport($db); $dashboardlines[] = $board->load_board($user,'toapprove'); } // Number of expense reports to pay if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->to_paid) { include_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; $board=new ExpenseReport($db); $dashboardlines[] = $board->load_board($user,'topay'); } // Calculate total nb of late $totallate=0; $var=true; //Remove any invalid response //load_board can return an integer if failed or WorkboardResponse if OK $valid_dashboardlines=array(); foreach($dashboardlines as $tmp) { if ($tmp instanceof WorkboardResponse) $valid_dashboardlines[] = $tmp; } $rowspan = count($valid_dashboardlines);
$result = $db->query($sql); if ($result) { $var = false; $num = $db->num_rows($result); $i = 0; print '<table class="noborder" width="100%">'; print '<tr class="liste_titre">'; print '<td colspan="2">' . $langs->trans("BoxTitleLastModifiedExpenses", min($max, $num)) . '</td>'; print '<td align="right">' . $langs->trans("AmountHT") . '</td>'; print '<td align="right">' . $langs->trans("AmountTTC") . '</td>'; print '<td align="right">' . $langs->trans("DateModificationShort") . '</td>'; print '<td> </td>'; print '</tr>'; if ($num) { $total_ttc = $totalam = $total = 0; $expensereportstatic = new ExpenseReport($db); $userstatic = new User($db); while ($i < $num && $i < $max) { $obj = $db->fetch_object($result); $expensereportstatic->id = $obj->rowid; $expensereportstatic->ref = $obj->ref; $userstatic->id = $obj->uid; $userstatic->lastname = $obj->lastname; $userstatic->firstname = $obj->firstname; print '<tr ' . $bc[$var] . '>'; print '<td>' . $expensereportstatic->getNomUrl(1) . '</td>'; print '<td>' . $userstatic->getNomUrl(1) . '</td>'; print '<td align="right">' . price($obj->total_ht) . '</td>'; print '<td align="right">' . price($obj->total_ttc) . '</td>'; print '<td align="right">' . dol_print_date($db->jdate($obj->dm), 'day') . '</td>'; print '<td align="right">';
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) { $fac->generateDocument($fac->modelpdf, $outputlangs); } } header('Location: card.php?id=' . $payment->id); exit; } else { setEventMessages($payment->error, $payment->errors, 'errors'); $db->rollback(); } } /* * View */ llxHeader(); $expensereport = new ExpenseReport($db); $form = new Form($db); $h = 0; $head[$h][0] = DOL_URL_ROOT . '/expensereport/payment/card.php?id=' . $id; $head[$h][1] = $langs->trans("Card"); $hselected = $h; $h++; dol_fiche_head($head, $hselected, $langs->trans("ExpenseReportPayment"), 0, 'payment'); /* * Confirm deleting of the payment */ if ($action == 'delete') { print $form->formconfirm('card.php?id=' . $payment->id, $langs->trans("DeletePayment"), $langs->trans("ConfirmDeletePayment"), 'confirm_delete', '', 0, 2); } /* * Confirm validation of the payment
for ($i = 0; $i < $num; $i++) { $tmp=explode('_',$elementarray[$i]); $idofelement=$tmp[0]; $idofelementuser=$tmp[1]; $element->fetch($idofelement); if ($idofelementuser) $elementuser->fetch($idofelementuser); if ($tablename != 'expensereport_det') { $element->fetch_thirdparty(); } else { $expensereport=new ExpenseReport($db); $expensereport->fetch($element->fk_expensereport); } //print 'xxx'.$tablename; //print $classname; if ($breakline && $saved_third_id != $element->thirdparty->id) { print $breakline; $var = true; $saved_third_id = $element->thirdparty->id; $breakline = ''; $total_ht_by_third=0;
$maskvalue = GETPOST('maskvalue', 'alpha'); if ($maskconst) { $res = dolibarr_set_const($db, $maskconst, $maskvalue, 'chaine', 0, '', $conf->entity); } if (!$res > 0) { $error++; } if (!$error) { setEventMessages($langs->trans("SetupSaved"), null, 'mesgs'); } else { setEventMessages($langs->trans("Error"), null, 'errors'); } } else { if ($action == 'specimen') { $modele = GETPOST('module', 'alpha'); $inter = new ExpenseReport($db); $inter->initAsSpecimen(); // Search template files $file = ''; $classname = ''; $filefound = 0; $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); foreach ($dirmodels as $reldir) { $file = dol_buildpath($reldir . "core/modules/expensereport/doc/pdf_" . $modele . ".modules.php", 0); if (file_exists($file)) { $filefound = 1; $classname = "pdf_" . $modele; break; } } if ($filefound) {
$sql .= " SET integration_compta = 1, fk_bank_account = {$idAccount}"; $sql .= " WHERE rowid = {$idTrip}"; $resql = $db->query($sql); if ($result) { Header("Location: " . $_SERVER["PHP_SELF"] . "?account=" . $idAccount); exit; } else { dol_print_error($db); } } else { dol_print_error($db, $acct->error); } } if ($_GET["action"] == 'confirm_account_to_ndf' && $_GET["confirm"] == "yes") { $idTrip = $_GET['idTrip']; $expensereport = new ExpenseReport($db); $expensereport->fetch($idTrip, $user); $sql = "DELETE FROM " . MAIN_DB_PREFIX . "bank"; $sql .= " WHERE label LIKE '%" . $expensereport->ref . "%'"; $resql = $db->query($sql); if ($resql > 0) { $sql = " UPDATE " . MAIN_DB_PREFIX . "expensereport as d"; $sql .= " SET integration_compta = 0, fk_bank_account = 0"; $sql .= " WHERE rowid = {$idTrip}"; $resql = $db->query($sql); if ($result) { Header("Location: " . $_SERVER["PHP_SELF"] . "?account=" . $idAccount); exit; } else { dol_print_error($db); }
exit; } else { $db->rollback(); } } } $_GET["action"] = 'create'; } /* * View */ llxHeader(); $form = new Form($db); // Form to create expense report payment if (GETPOST("action") == 'create') { $expensereport = new ExpenseReport($db); $expensereport->fetch($chid); $total = $expensereport->total_ttc; print load_fiche_titre($langs->trans("DoPayment")); if ($mesg) { print "<div class=\"error\">{$mesg}</div>"; } print '<form name="add_payment" action="' . $_SERVER['PHP_SELF'] . '" method="post">'; print '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">'; print '<input type="hidden" name="id" value="' . $chid . '">'; print '<input type="hidden" name="chid" value="' . $chid . '">'; print '<input type="hidden" name="action" value="add_payment">'; dol_fiche_head(); print '<table cellspacing="0" class="border" width="100%" cellpadding="2">'; print '<tr class="liste_titre"><td colspan="3">' . $langs->trans("ExpenseReport") . '</td>'; print '<tr><td>' . $langs->trans("Ref") . '</td><td colspan="2"><a href="' . DOL_URL_ROOT . '/expensereport/card.php?id=' . $chid . '">' . $expensereport->ref . '</a></td></tr>';
$sortfield = GETPOST('sortfield', 'alpha'); $sortorder = GETPOST('sortorder', 'alpha'); $page = GETPOST('page', 'int'); if ($page == -1) { $page = 0; } $offset = $conf->liste_limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; if (!$sortorder) { $sortorder = "ASC"; } if (!$sortfield) { $sortfield = "name"; } $object = new ExpenseReport($db); $object->fetch($id, $ref); $upload_dir = $conf->expensereport->dir_output . '/' . dol_sanitizeFileName($object->ref); $modulepart = 'trip'; /* * Actions */ include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_pre_headers.tpl.php'; /* * View */ $form = new Form($db); llxHeader("", "", $langs->trans("TripCard")); if ($object->id) { $object->fetch_thirdparty(); $head = expensereport_prepare_head($object);
* \ingroup expensereport * \brief Page to show a trip information */ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/expensereport.lib.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/functions2.lib.php'; require_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php'; $langs->load("trips"); // Security check $id = GETPOST('id', 'int'); if ($user->societe_id) { $socid = $user->societe_id; } $result = restrictedArea($user, 'expensereport', $id, ''); /* * View */ llxHeader(); if ($id) { $object = new ExpenseReport($db); $object->fetch($id); $object->info($id); $head = expensereport_prepare_head($object); dol_fiche_head($head, 'info', $langs->trans("TripCard"), 0, 'trip'); print '<table width="100%"><tr><td>'; dol_print_object_info($object); print '</td></tr></table>'; print '</div>'; } llxFooter(); $db->close();