Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop
This commit is contained in:
commit
bfdf88ca6c
@ -162,7 +162,7 @@ class box_actions extends ModeleBoxes
|
||||
|
||||
$this->info_box_contents[$line][2] = array(
|
||||
'td' => 'class="center nowraponall"',
|
||||
'text' => dol_print_date($datelimite, "dayhour", 'tzuserrel'),
|
||||
'text' => $datelimite ? dol_print_date($datelimite, "dayhour", 'tzuserrel') : '',
|
||||
'asis' => 1
|
||||
);
|
||||
|
||||
|
||||
@ -85,7 +85,7 @@ class box_graph_nb_ticket_last_x_days extends ModeleBoxes
|
||||
|
||||
|
||||
$param_day = 'DOLUSERCOOKIE_ticket_last_days';
|
||||
if ($_POST[$param_day]) {
|
||||
if (!empty($_POST[$param_day])) {
|
||||
if ($_POST[$param_day] >= 15) {
|
||||
$days = 14;
|
||||
} else {
|
||||
|
||||
@ -161,7 +161,7 @@ class box_supplier_orders_awaiting_reception extends ModeleBoxes
|
||||
|
||||
$this->info_box_contents[$line][] = array(
|
||||
'td' => 'class="right"',
|
||||
'text' => $delayIcon.'<span class="classfortooltip" title="'.$langs->trans('DateDeliveryPlanned').'"><i class="fa fa-dolly" ></i> '.dol_print_date($delivery_date, 'day', 'tzuserrel').'</span>',
|
||||
'text' => $delayIcon.'<span class="classfortooltip" title="'.$langs->trans('DateDeliveryPlanned').'"><i class="fa fa-dolly" ></i> '.($delivery_date ? dol_print_date($delivery_date, 'day', 'tzuserrel') : '').'</span>',
|
||||
'asis' => 1
|
||||
);
|
||||
|
||||
|
||||
@ -1384,7 +1384,7 @@ class DolGraph
|
||||
|
||||
$textoflegend = $arrayofgroupslegend[$i]['legendwithgroup'];
|
||||
} else {
|
||||
$textoflegend = $this->Legend[$i];
|
||||
$textoflegend = !empty($this->Legend[$i]) ? $this->Legend[$i] : '';
|
||||
}
|
||||
|
||||
if ($usecolorvariantforgroupby) {
|
||||
|
||||
@ -99,7 +99,7 @@ function bankline_prepare_head($id)
|
||||
*/
|
||||
function payment_supplier_prepare_head(Paiement $object)
|
||||
{
|
||||
global $langs, $conf;
|
||||
global $db, $langs, $conf;
|
||||
|
||||
$h = 0;
|
||||
$head = array();
|
||||
@ -120,6 +120,19 @@ function payment_supplier_prepare_head(Paiement $object)
|
||||
$head[$h][2] = 'info';
|
||||
$h++;
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php';
|
||||
$upload_dir = $conf->fournisseur->payment->dir_output.'/'.$object->ref;
|
||||
$nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$'));
|
||||
$nbLinks = Link::count($db, $object->element, $object->id);
|
||||
$head[$h][0] = DOL_URL_ROOT.'/fourn/paiement/document.php?id='.$object->id;
|
||||
$head[$h][1] = $langs->trans('Documents');
|
||||
if (($nbFiles + $nbLinks) > 0) {
|
||||
$head[$h][1] .= '<span class="badge marginleftonlyshort">'.($nbFiles + $nbLinks).'</span>';
|
||||
}
|
||||
$head[$h][2] = 'documents';
|
||||
$h++;
|
||||
|
||||
complete_head_from_modules($conf, $langs, $object, $head, $h, 'payment_supplier', 'remove');
|
||||
|
||||
return $head;
|
||||
|
||||
@ -812,6 +812,25 @@ class pdf_standard extends ModelePDFSuppliersPayments
|
||||
$pdf->SetFont('', '', $default_font_size - 1);
|
||||
$pdf->SetXY($posx + 2, $posy);
|
||||
$pdf->MultiCell($widthrecbox, 4, $carac_client, 0, 'L');
|
||||
|
||||
// Show default IBAN account
|
||||
$sql = "SELECT iban_prefix";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."societe_rib as rib";
|
||||
$sql .= " WHERE fk_soc = ".($object->thirdparty->id);
|
||||
$sql .= " AND rib.default_rib = 1";
|
||||
$sql .= " AND rib.type = 'ban'";
|
||||
$sql .= " LIMIT 1";
|
||||
$resql = $this->db->query($sql);
|
||||
if ($resql) {
|
||||
$obj = $this->db->fetch_object($resql);
|
||||
$iban = $obj->iban_prefix;
|
||||
}
|
||||
|
||||
if (!empty($iban)) {
|
||||
$pdf->SetFont('', '', $default_font_size - 1);
|
||||
$pdf->SetXY($posx + 2, $posy + 15);
|
||||
$pdf->MultiCell($widthrecbox, 4, $langs->trans("IBAN").': '.$iban, 0, 'L');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -135,6 +135,13 @@ $upload_dir = $conf->fournisseur->payment->dir_output;
|
||||
$permissiontoadd = true;
|
||||
include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
|
||||
|
||||
// Actions to send emails
|
||||
$triggersendname = 'PAYMENTRECEIPT_SENTBYMAIL';
|
||||
$paramname = 'id';
|
||||
$autocopy = 'MAIN_MAIL_AUTOCOPY_SUPPLIER_INVOICE_TO';
|
||||
$trackid = 'pre'.$object->id;
|
||||
include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php';
|
||||
|
||||
|
||||
/*
|
||||
* View
|
||||
@ -334,6 +341,18 @@ if ($result > 0) {
|
||||
*/
|
||||
|
||||
print '<div class="tabsAction">';
|
||||
|
||||
// Send by mail
|
||||
if ($user->socid == 0 && $action == '') {
|
||||
$usercansend = (empty($conf->global->MAIN_USE_ADVANCED_PERMS));
|
||||
if ($usercansend) {
|
||||
print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=presend&mode=init#formmailbeforetitle">'.$langs->trans('SendMail').'</a>';
|
||||
} else {
|
||||
print '<span class="butActionRefused classfortooltip">'.$langs->trans('SendMail').'</span>';
|
||||
}
|
||||
}
|
||||
|
||||
// Payment validation
|
||||
if (!empty($conf->global->BILL_ADD_PAYMENT_VALIDATION)) {
|
||||
if ($user->socid == 0 && $object->statut == 0 && $action == '') {
|
||||
if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && (!empty($user->rights->fournisseur->facture->creer) || !empty($user->rights->supplier_invoice->creer)))
|
||||
@ -342,6 +361,8 @@ if ($result > 0) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Delete payment
|
||||
if ($user->socid == 0 && $action == '') {
|
||||
if ($user->rights->fournisseur->facture->supprimer) {
|
||||
if ($allow_delete) {
|
||||
@ -381,6 +402,15 @@ if ($result > 0) {
|
||||
*/
|
||||
|
||||
print '</div></div></div>';
|
||||
|
||||
// Presend form
|
||||
$modelmail = ''; //TODO: Add new 'payment receipt' model in email models
|
||||
$defaulttopic = 'SendPaymentReceipt';
|
||||
$diroutput = $conf->fournisseur->payment->dir_output;
|
||||
$autocopy = 'MAIN_MAIL_AUTOCOPY_SUPPLIER_INVOICE_TO';
|
||||
$trackid = 'pre'.$object->id;
|
||||
|
||||
include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php';
|
||||
} else {
|
||||
$langs->load("errors");
|
||||
print $langs->trans("ErrorRecordNotFound");
|
||||
|
||||
177
htdocs/fourn/paiement/document.php
Normal file
177
htdocs/fourn/paiement/document.php
Normal file
@ -0,0 +1,177 @@
|
||||
<?php
|
||||
/* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004-2016 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2005 Marc Barilley / Ocebo <marc@ocebo.com>
|
||||
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2012 Marcos García <marcosgdf@gmail.com>
|
||||
* Copyright (C) 2013 Cédric Salvador <csalvador@gpcsolutions.fr>
|
||||
* Copyright (C) 2017 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2021 Jesus Jerez <jesusballesteros@protonmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/fourn/paiement/document.php
|
||||
* \ingroup facture, fournisseur
|
||||
* \brief Management page of attached documents to a payment
|
||||
*/
|
||||
|
||||
require '../../main.inc.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/fourn/class/paiementfourn.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/fourn.lib.php';
|
||||
if (!empty($conf->projet->enabled)) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
||||
}
|
||||
|
||||
// Load translation files required by the page
|
||||
$langs->loadLangs(array('bills', 'banks', 'companies', 'suppliers', 'other'));
|
||||
|
||||
$id = GETPOST('id', 'int');
|
||||
$ref = GETPOST('ref', 'alpha');
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$confirm = GETPOST('confirm', 'alpha');
|
||||
|
||||
// Security check
|
||||
if ($user->socid) {
|
||||
$socid = $user->socid;
|
||||
}
|
||||
$result = restrictedArea($user, $object->element, $object->id, 'paiementfourn', '');
|
||||
|
||||
// Get parameters
|
||||
$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit;
|
||||
$sortfield = GETPOST("sortfield", 'alpha');
|
||||
$sortorder = GETPOST("sortorder", 'alpha');
|
||||
$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');
|
||||
if (empty($page) || $page == -1) {
|
||||
$page = 0;
|
||||
} // If $page is not defined, or '' or -1
|
||||
$offset = $limit * $page;
|
||||
$pageprev = $page - 1;
|
||||
$pagenext = $page + 1;
|
||||
if (!$sortorder) {
|
||||
$sortorder = "ASC";
|
||||
}
|
||||
if (!$sortfield) {
|
||||
$sortfield = "name";
|
||||
}
|
||||
|
||||
// Load object
|
||||
$object = new PaiementFourn($db);
|
||||
if ($object->fetch($id, $ref)) {
|
||||
$object->fetch_thirdparty();
|
||||
$ref = dol_sanitizeFileName($object->ref);
|
||||
$upload_dir = $conf->fournisseur->payment->dir_output.'/'.dol_sanitizeFileName($object->ref);
|
||||
}
|
||||
|
||||
/*
|
||||
* Actions
|
||||
*/
|
||||
|
||||
include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php';
|
||||
|
||||
|
||||
/*
|
||||
* View
|
||||
*/
|
||||
|
||||
$form = new Form($db);
|
||||
|
||||
$title = $langs->trans('Payment')." - ".$langs->trans('Documents');
|
||||
llxHeader('', $title);
|
||||
|
||||
if ($object->id > 0) {
|
||||
$head = payment_supplier_prepare_head($object);
|
||||
print dol_get_fiche_head($head, 'documents', $langs->trans("SupplierPayment"), -1, 'payment');
|
||||
|
||||
// Supplier order card
|
||||
$linkback = '<a href="'.DOL_URL_ROOT.'/fourn/paiement/list.php'.(!empty($socid) ? '?socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
|
||||
|
||||
$morehtmlref = '<div class="refidno">';
|
||||
|
||||
// Date of payment
|
||||
$morehtmlref .= $form->editfieldkey("Date", 'datep', $object->date, $object, $object->statut == 0 && ($user->rights->fournisseur->facture->creer || $user->rights->supplier_invoice->creer), 'datehourpicker', '', null, 3).': ';
|
||||
$morehtmlref .= $form->editfieldval("Date", 'datep', $object->date, $object, $object->statut == 0 && ($user->rights->fournisseur->facture->creer || $user->rights->supplier_invoice->creer), 'datehourpicker', '', null, $langs->trans('PaymentDateUpdateSucceeded'));
|
||||
|
||||
// Payment mode
|
||||
$morehtmlref .= '<br>'.$langs->trans('PaymentMode').' : ';
|
||||
$morehtmlref .= $langs->trans("PaymentType".$object->type_code) != ("PaymentType".$object->type_code) ? $langs->trans("PaymentType".$object->type_code) : $object->type_label;
|
||||
$morehtmlref .= $object->num_payment ? ' - '.$object->num_payment : '';
|
||||
|
||||
// Thirdparty
|
||||
$morehtmlref .= '<br>'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1);
|
||||
|
||||
// Amount
|
||||
$morehtmlref .= '<br>'.$langs->trans('Amount').' : '. price($object->amount, '', $langs, 0, 0, -1, $conf->currency);
|
||||
|
||||
$allow_delete = 1;
|
||||
// Bank account
|
||||
if (!empty($conf->banque->enabled)) {
|
||||
if ($object->fk_account) {
|
||||
$bankline = new AccountLine($db);
|
||||
$bankline->fetch($object->bank_line);
|
||||
if ($bankline->rappro) {
|
||||
$allow_delete = 0;
|
||||
$title_button = dol_escape_htmltag($langs->transnoentitiesnoconv("CantRemoveConciliatedPayment"));
|
||||
}
|
||||
|
||||
$morehtmlref .= '<br>'.$langs->trans('BankAccount').' : ';
|
||||
$accountstatic = new Account($db);
|
||||
$accountstatic->fetch($bankline->fk_account);
|
||||
$morehtmlref .= $accountstatic->getNomUrl(1);
|
||||
|
||||
$morehtmlref .= '<br>'.$langs->trans('BankTransactionLine').' : ';
|
||||
$morehtmlref .= $bankline->getNomUrl(1, 0, 'showconciliated');
|
||||
}
|
||||
}
|
||||
|
||||
dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);
|
||||
|
||||
// Build file list
|
||||
$filearray = dol_dir_list($upload_dir, "files", 0, '', '(\.meta|_preview.*\.png)$', $sortfield, (strtolower($sortorder) == 'desc' ?SORT_DESC:SORT_ASC), 1);
|
||||
$totalsize = 0;
|
||||
foreach ($filearray as $key => $file) {
|
||||
$totalsize += $file['size'];
|
||||
}
|
||||
|
||||
print '<div class="fichecenter">';
|
||||
print '<div class="underbanner clearboth"></div>';
|
||||
|
||||
print '<table class="border tableforfield centpercent">';
|
||||
print '<tr><td class="titlefield">'.$langs->trans("NbOfAttachedFiles").'</td><td colspan="3">'.count($filearray).'</td></tr>';
|
||||
print '<tr><td>'.$langs->trans("TotalSizeOfAttachedFiles").'</td><td colspan="3">'.dol_print_size($totalsize, 1, 1).'</td></tr>';
|
||||
print "</table>\n";
|
||||
|
||||
print "</div>\n";
|
||||
|
||||
print dol_get_fiche_end();
|
||||
|
||||
$modulepart = 'supplier_payment';
|
||||
// TODO: get the appropriate permission
|
||||
$permissiontoadd = true;
|
||||
$permtoedit = true;
|
||||
$param = '&id='.$object->id;
|
||||
include DOL_DOCUMENT_ROOT.'/core/tpl/document_actions_post_headers.tpl.php';
|
||||
} else {
|
||||
header('Location: index.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// End of page
|
||||
llxFooter();
|
||||
$db->close();
|
||||
@ -116,7 +116,7 @@ class Evaluation extends CommonObject
|
||||
'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid',),
|
||||
'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>'1', 'position'=>511, 'notnull'=>-1, 'visible'=>-2,),
|
||||
'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>'1', 'position'=>1000, 'notnull'=>-1, 'visible'=>-2,),
|
||||
'status' => array('type'=>'smallint', 'label'=>'Status', 'enabled'=>'1', 'position'=>1000, 'notnull'=>1, 'default'=>0, 'visible'=>5, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Brouillon', '1'=>'Validé'),),
|
||||
'status' => array('type'=>'smallint', 'label'=>'Status', 'enabled'=>'1', 'position'=>1000, 'notnull'=>1, 'default'=>0, 'visible'=>5, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Draft', '1'=>'Validated', '6' => 'Closed'),),
|
||||
'date_eval' => array('type'=>'date', 'label'=>'DateEval', 'enabled'=>'1', 'position'=>502, 'notnull'=>1, 'visible'=>1,),
|
||||
'fk_user' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'User', 'enabled'=>'1', 'position'=>504, 'notnull'=>1, 'visible'=>1,),
|
||||
'fk_job' => array('type'=>'integer:Job:/hrm/class/job.class.php', 'label'=>'Job', 'enabled'=>'1', 'position'=>505, 'notnull'=>1, 'visible'=>1,),
|
||||
|
||||
@ -296,7 +296,7 @@ foreach ($search as $key => $val) {
|
||||
}
|
||||
$mode_search = (($object->isInt($object->fields[$key]) || $object->isFloat($object->fields[$key])) ? 1 : 0);
|
||||
if ((strpos($object->fields[$key]['type'], 'integer:') === 0) || (strpos($object->fields[$key]['type'], 'sellist:') === 0) || !empty($object->fields[$key]['arrayofkeyval'])) {
|
||||
if ($search[$key] == '-1' || $search[$key] === '0') {
|
||||
if ($search[$key] == '-1' || ($search[$key] === '0' && (empty($object->fields[$key]['arrayofkeyval']) || !array_key_exists('0', $object->fields[$key]['arrayofkeyval'])))) {
|
||||
$search[$key] = '';
|
||||
}
|
||||
$mode_search = 2;
|
||||
|
||||
@ -296,7 +296,7 @@ foreach ($search as $key => $val) {
|
||||
}
|
||||
$mode_search = (($object->isInt($object->fields[$key]) || $object->isFloat($object->fields[$key])) ? 1 : 0);
|
||||
if ((strpos($object->fields[$key]['type'], 'integer:') === 0) || (strpos($object->fields[$key]['type'], 'sellist:') === 0) || !empty($object->fields[$key]['arrayofkeyval'])) {
|
||||
if ($search[$key] == '-1' || $search[$key] === '0') {
|
||||
if ($search[$key] == '-1' || ($search[$key] === '0' && (empty($object->fields[$key]['arrayofkeyval']) || !array_key_exists('0', $object->fields[$key]['arrayofkeyval'])))) {
|
||||
$search[$key] = '';
|
||||
}
|
||||
$mode_search = 2;
|
||||
|
||||
@ -296,7 +296,7 @@ foreach ($search as $key => $val) {
|
||||
}
|
||||
$mode_search = (($object->isInt($object->fields[$key]) || $object->isFloat($object->fields[$key])) ? 1 : 0);
|
||||
if ((strpos($object->fields[$key]['type'], 'integer:') === 0) || (strpos($object->fields[$key]['type'], 'sellist:') === 0) || !empty($object->fields[$key]['arrayofkeyval'])) {
|
||||
if ($search[$key] == '-1' || $search[$key] === '0') {
|
||||
if ($search[$key] == '-1' || ($search[$key] === '0' && (empty($object->fields[$key]['arrayofkeyval']) || !array_key_exists('0', $object->fields[$key]['arrayofkeyval'])))) {
|
||||
$search[$key] = '';
|
||||
}
|
||||
$mode_search = 2;
|
||||
|
||||
@ -249,6 +249,7 @@ EscompteOffered=Discount offered (payment before term)
|
||||
EscompteOfferedShort=Discount
|
||||
SendBillRef=Submission of invoice %s
|
||||
SendReminderBillRef=Submission of invoice %s (reminder)
|
||||
SendPaymentReceipt=Submission of payment receipt %s
|
||||
NoDraftBills=No draft invoices
|
||||
NoOtherDraftBills=No other draft invoices
|
||||
NoDraftInvoices=No draft invoices
|
||||
|
||||
@ -244,6 +244,7 @@ EscompteOffered=Descuento (Pronto pago)
|
||||
EscompteOfferedShort=Descuento
|
||||
SendBillRef=Envío de la factura %s
|
||||
SendReminderBillRef=Envío de la factura %s (recordatorio)
|
||||
SendPaymentReceipt=Envío del recibo de pago %s
|
||||
NoDraftBills=Ninguna factura borrador
|
||||
NoOtherDraftBills=Ninguna otra factura borrador
|
||||
NoDraftInvoices=Sin facturas borrador
|
||||
|
||||
Loading…
Reference in New Issue
Block a user