Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop
This commit is contained in:
commit
bfc8ccd761
16
.dockerignore
Normal file
16
.dockerignore
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
build
|
||||||
|
build.xml
|
||||||
|
ChangeLog
|
||||||
|
composer.json
|
||||||
|
CONTRIBUTING.md
|
||||||
|
COPYING
|
||||||
|
COPYRIGHT
|
||||||
|
dev
|
||||||
|
doc
|
||||||
|
Dockerfile
|
||||||
|
INSTALL
|
||||||
|
README-FR.md
|
||||||
|
README.md
|
||||||
|
robots.txt
|
||||||
|
scripts
|
||||||
|
test
|
||||||
@ -47,6 +47,7 @@ jQuery TableDnD 0.6 GPL and MIT License Yes
|
|||||||
jQuery Timepicker 1.1.0 GPL and MIT License Yes JS library Timepicker addon for Datepicker
|
jQuery Timepicker 1.1.0 GPL and MIT License Yes JS library Timepicker addon for Datepicker
|
||||||
jQuery Tiptip 1.3 GPL and MIT License Yes JS library for tooltips
|
jQuery Tiptip 1.3 GPL and MIT License Yes JS library for tooltips
|
||||||
jsGantt 1.2 BSD License Yes JS library (to build Gantt reports)
|
jsGantt 1.2 BSD License Yes JS library (to build Gantt reports)
|
||||||
|
JsTimezoneDetect 1.0.4 MIT Licence Yes JS library to detect user timezone
|
||||||
|
|
||||||
For licenses compatibility informations:
|
For licenses compatibility informations:
|
||||||
http://www.fsf.org/licensing/licenses/index_html
|
http://www.fsf.org/licensing/licenses/index_html
|
||||||
|
|||||||
@ -25,6 +25,7 @@ For users:
|
|||||||
- [ task #1793 ] Create new permission to restrict commercial agent margin to logged user.
|
- [ task #1793 ] Create new permission to restrict commercial agent margin to logged user.
|
||||||
- Add experimental module ask supplier price to request supplier quotation.
|
- Add experimental module ask supplier price to request supplier quotation.
|
||||||
- Add experimental module batch management.
|
- Add experimental module batch management.
|
||||||
|
- Fix: Corrected user timezone detection
|
||||||
|
|
||||||
For translators:
|
For translators:
|
||||||
- Update language files.
|
- Update language files.
|
||||||
|
|||||||
14
Dockerfile
Normal file
14
Dockerfile
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
FROM php:5.6-apache
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install -y libpng12-dev libjpeg-dev \
|
||||||
|
&& rm -rf /var/lib/apt/lists/* \
|
||||||
|
&& docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \
|
||||||
|
&& docker-php-ext-install gd
|
||||||
|
|
||||||
|
RUN docker-php-ext-install mysqli
|
||||||
|
|
||||||
|
COPY htdocs/ /var/www/html/
|
||||||
|
|
||||||
|
RUN chown -hR www-data:www-data /var/www/html
|
||||||
|
|
||||||
|
EXPOSE 80
|
||||||
@ -39,6 +39,7 @@ require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
|
|||||||
require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/loan/class/loan.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/loan/class/loan.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/fourn/class/paiementfourn.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/fourn/class/paiementfourn.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
|
||||||
@ -50,6 +51,7 @@ $langs->load("companies");
|
|||||||
$langs->load("salaries");
|
$langs->load("salaries");
|
||||||
$langs->load("loan");
|
$langs->load("loan");
|
||||||
$langs->load("donations");
|
$langs->load("donations");
|
||||||
|
$langs->load("trips");
|
||||||
|
|
||||||
$id = (GETPOST('id','int') ? GETPOST('id','int') : GETPOST('account','int'));
|
$id = (GETPOST('id','int') ? GETPOST('id','int') : GETPOST('account','int'));
|
||||||
$ref = GETPOST('ref','alpha');
|
$ref = GETPOST('ref','alpha');
|
||||||
@ -188,6 +190,7 @@ $paymentsupplierstatic=new PaiementFourn($db);
|
|||||||
$paymentvatstatic=new TVA($db);
|
$paymentvatstatic=new TVA($db);
|
||||||
$paymentsalstatic=new PaymentSalary($db);
|
$paymentsalstatic=new PaymentSalary($db);
|
||||||
$donstatic=new Don($db);
|
$donstatic=new Don($db);
|
||||||
|
$expensereportstatic=new ExpenseReport($db);
|
||||||
$bankstatic=new Account($db);
|
$bankstatic=new Account($db);
|
||||||
$banklinestatic=new AccountLine($db);
|
$banklinestatic=new AccountLine($db);
|
||||||
|
|
||||||
@ -732,6 +735,12 @@ if ($id > 0 || ! empty($ref))
|
|||||||
print ' '.img_object($langs->trans('ShowPayment'),'payment').' ';
|
print ' '.img_object($langs->trans('ShowPayment'),'payment').' ';
|
||||||
print '</a>';
|
print '</a>';
|
||||||
}
|
}
|
||||||
|
elseif ($links[$key]['type']=='payment_expensereport')
|
||||||
|
{
|
||||||
|
print '<a href="'.DOL_URL_ROOT.'/expensereport/payment/card.php?id='.$links[$key]['url_id'].'">';
|
||||||
|
print ' '.img_object($langs->trans('ShowPayment'),'payment').' ';
|
||||||
|
print '</a>';
|
||||||
|
}
|
||||||
elseif ($links[$key]['type']=='banktransfert')
|
elseif ($links[$key]['type']=='banktransfert')
|
||||||
{
|
{
|
||||||
// Do not show link to transfer since there is no transfer card (avoid confusion). Can already be accessed from transaction detail.
|
// Do not show link to transfer since there is no transfer card (avoid confusion). Can already be accessed from transaction detail.
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
// Copyright (C) 2011-2014 Laurent Destailleur <eldy@users.sourceforge.net>
|
// Copyright (C) 2011-2014 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
// Copyright (C) 2011-2012 Regis Houssin <regis.houssin@capnetworks.com>
|
// Copyright (C) 2011-2012 Regis Houssin <regis.houssin@capnetworks.com>
|
||||||
|
// Copyright (C) 2015 Marcos García <marcosgdf@gmail.com>
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify
|
// 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
|
// it under the terms of the GNU General Public License as published by
|
||||||
@ -23,7 +24,10 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
// Detect and save TZ and DST
|
|
||||||
|
var timezone = jstz.determine();
|
||||||
|
|
||||||
|
// Detect and save TZ and DST
|
||||||
var rightNow = new Date();
|
var rightNow = new Date();
|
||||||
var jan1 = new Date(rightNow.getFullYear(), 0, 1, 0, 0, 0, 0);
|
var jan1 = new Date(rightNow.getFullYear(), 0, 1, 0, 0, 0, 0);
|
||||||
var temp = jan1.toGMTString();
|
var temp = jan1.toGMTString();
|
||||||
@ -40,16 +44,12 @@ $(document).ready(function () {
|
|||||||
dst = "1"; // daylight savings time is observed
|
dst = "1"; // daylight savings time is observed
|
||||||
}
|
}
|
||||||
var now=new Date();
|
var now=new Date();
|
||||||
var tz=now.toTimeString().match(/\(.*\)/); // now.toTimeString may return "12:39:59 GMT+0200 (CEST)"
|
|
||||||
//alert('date=' + now + ' string=' + now.toTimeString());
|
//alert('date=' + now + ' string=' + now.toTimeString());
|
||||||
var dst_first=DisplayDstSwitchDates('first');
|
var dst_first=DisplayDstSwitchDates('first');
|
||||||
var dst_second=DisplayDstSwitchDates('second');
|
var dst_second=DisplayDstSwitchDates('second');
|
||||||
//alert(dst);
|
//alert(dst);
|
||||||
$('#tz').val(std_time_offset); // returns TZ
|
$('#tz').val(std_time_offset); // returns TZ
|
||||||
// tz is null with IE
|
$('#tz_string').val(timezone.name()); // returns TZ string
|
||||||
if (tz != null) {
|
|
||||||
$('#tz_string').val(tz[0].replace('(','').replace(')','')); // returns TZ string
|
|
||||||
}
|
|
||||||
$('#dst_observed').val(dst); // returns if DST is observed on summer
|
$('#dst_observed').val(dst); // returns if DST is observed on summer
|
||||||
$('#dst_first').val(dst_first); // returns DST first switch in year
|
$('#dst_first').val(dst_first); // returns DST first switch in year
|
||||||
$('#dst_second').val(dst_second); // returns DST second switch in year
|
$('#dst_second').val(dst_second); // returns DST second switch in year
|
||||||
|
|||||||
@ -153,7 +153,7 @@ function ordersupplier_prepare_head($object)
|
|||||||
$head[$h][1] = $langs->trans("OrderFollow");
|
$head[$h][1] = $langs->trans("OrderFollow");
|
||||||
$head[$h][2] = 'info';
|
$head[$h][2] = 'info';
|
||||||
$h++;
|
$h++;
|
||||||
|
complete_head_from_modules($conf,$langs,$object,$head,$h,'supplier_order', 'remove');
|
||||||
return $head;
|
return $head;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -28,7 +28,11 @@ if (GETPOST('dol_use_jmobile')) $conf->dol_use_jmobile=1;
|
|||||||
// If we force to use jmobile, then we reenable javascript
|
// If we force to use jmobile, then we reenable javascript
|
||||||
if (! empty($conf->dol_use_jmobile)) $conf->use_javascript_ajax=1;
|
if (! empty($conf->dol_use_jmobile)) $conf->use_javascript_ajax=1;
|
||||||
|
|
||||||
$arrayofjs=array('/core/js/dst.js'.(empty($conf->dol_use_jmobile)?'':'?version='.urlencode(DOL_VERSION))); // Javascript code on logon page only to detect user tz, dst_observed, dst_first, dst_second
|
// Javascript code on logon page only to detect user tz, dst_observed, dst_first, dst_second
|
||||||
|
$arrayofjs=array(
|
||||||
|
'/includes/jstz/jstz.min.js'.(empty($conf->dol_use_jmobile)?'':'?version='.urlencode(DOL_VERSION)),
|
||||||
|
'/core/js/dst.js'.(empty($conf->dol_use_jmobile)?'':'?version='.urlencode(DOL_VERSION))
|
||||||
|
);
|
||||||
$titleofloginpage=$langs->trans('Login').' @ '.$title; // title is defined by dol_loginfunction in security2.lib.php. We must keep the @, some tools use it to know it is login page.
|
$titleofloginpage=$langs->trans('Login').' @ '.$title; // title is defined by dol_loginfunction in security2.lib.php. We must keep the @, some tools use it to know it is login page.
|
||||||
|
|
||||||
print top_htmlhead('',$titleofloginpage,0,0,$arrayofjs);
|
print top_htmlhead('',$titleofloginpage,0,0,$arrayofjs);
|
||||||
|
|||||||
@ -42,7 +42,7 @@ class PaymentDonation extends CommonObject
|
|||||||
var $datep='';
|
var $datep='';
|
||||||
var $amount; // Total amount of payment
|
var $amount; // Total amount of payment
|
||||||
var $amounts=array(); // Array of amounts
|
var $amounts=array(); // Array of amounts
|
||||||
var $fk_typepayment;
|
var $typepayment;
|
||||||
var $num_payment;
|
var $num_payment;
|
||||||
var $note;
|
var $note;
|
||||||
var $fk_bank;
|
var $fk_bank;
|
||||||
@ -90,7 +90,7 @@ class PaymentDonation extends CommonObject
|
|||||||
// Clean parameters
|
// Clean parameters
|
||||||
if (isset($this->fk_donation)) $this->fk_donation=trim($this->fk_donation);
|
if (isset($this->fk_donation)) $this->fk_donation=trim($this->fk_donation);
|
||||||
if (isset($this->amount)) $this->amount=trim($this->amount);
|
if (isset($this->amount)) $this->amount=trim($this->amount);
|
||||||
if (isset($this->fk_typepayment)) $this->fk_typepayment=trim($this->fk_typepayment);
|
if (isset($this->typepayment)) $this->typepayment=trim($this->typepayment);
|
||||||
if (isset($this->num_payment)) $this->num_payment=trim($this->num_payment);
|
if (isset($this->num_payment)) $this->num_payment=trim($this->num_payment);
|
||||||
if (isset($this->note)) $this->note=trim($this->note);
|
if (isset($this->note)) $this->note=trim($this->note);
|
||||||
if (isset($this->fk_bank)) $this->fk_bank=trim($this->fk_bank);
|
if (isset($this->fk_bank)) $this->fk_bank=trim($this->fk_bank);
|
||||||
|
|||||||
@ -36,9 +36,11 @@ require_once DOL_DOCUMENT_ROOT . '/core/lib/expensereport.lib.php';
|
|||||||
require_once DOL_DOCUMENT_ROOT . '/core/lib/price.lib.php';
|
require_once DOL_DOCUMENT_ROOT . '/core/lib/price.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT . '/core/modules/expensereport/modules_expensereport.php';
|
require_once DOL_DOCUMENT_ROOT . '/core/modules/expensereport/modules_expensereport.php';
|
||||||
require_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php';
|
require_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php';
|
require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php';
|
||||||
|
|
||||||
$langs->load("trips");
|
$langs->load("trips");
|
||||||
|
$langs->load("bills");
|
||||||
$langs->load("mails");
|
$langs->load("mails");
|
||||||
|
|
||||||
$action=GETPOST('action');
|
$action=GETPOST('action');
|
||||||
@ -825,6 +827,18 @@ if ($action == "confirm_brouillonner" && GETPOST('confirm')=="yes" && $id > 0 &&
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($action == 'set_paid')
|
||||||
|
{
|
||||||
|
if ($object->set_paid($id) >= 0)
|
||||||
|
{
|
||||||
|
header("Location: ".$_SERVER['PHP_SELF']."?id=".$id);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
setEventMessage($object->error, 'errors');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($action == "addline")
|
if ($action == "addline")
|
||||||
{
|
{
|
||||||
$error = 0;
|
$error = 0;
|
||||||
@ -1387,18 +1401,18 @@ else
|
|||||||
if ($ret == 'html') print '<br>';
|
if ($ret == 'html') print '<br>';
|
||||||
}
|
}
|
||||||
|
|
||||||
print '<table class="border centpercent">';
|
print '<table class="border" width="100%">';
|
||||||
|
|
||||||
$linkback = '<a href="'.DOL_URL_ROOT.'/expensereport/list.php'.(! empty($socid)?'?socid='.$socid:'').'">'.$langs->trans("BackToList").'</a>';
|
$linkback = '<a href="'.DOL_URL_ROOT.'/expensereport/list.php'.(! empty($socid)?'?socid='.$socid:'').'">'.$langs->trans("BackToList").'</a>';
|
||||||
|
|
||||||
// Ref
|
// Ref
|
||||||
print '<tr><td width="25%">'.$langs->trans("Ref").'</td><td>';
|
print '<tr><td width="25%">'.$langs->trans("Ref").'</td><td colspan="2">';
|
||||||
print $form->showrefnav($object, 'ref', $linkback, 1, 'ref', 'ref', '');
|
print $form->showrefnav($object, 'ref', $linkback, 1, 'ref', 'ref', '');
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
|
|
||||||
print '<tr>';
|
print '<tr>';
|
||||||
print '<td>'.$langs->trans("Period").'</td>';
|
print '<td>'.$langs->trans("Period").'</td>';
|
||||||
print '<td>';
|
print '<td colspan="2">';
|
||||||
print get_date_range($object->date_debut,$object->date_fin,'',$langs,0);
|
print get_date_range($object->date_debut,$object->date_fin,'',$langs,0);
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
@ -1406,25 +1420,90 @@ else
|
|||||||
{
|
{
|
||||||
print '<tr>';
|
print '<tr>';
|
||||||
print '<td>'.$langs->trans("ModePaiement").'</td>';
|
print '<td>'.$langs->trans("ModePaiement").'</td>';
|
||||||
print '<td>'.$object->libelle_paiement.'</td>';
|
print '<td colspan="2">'.$object->libelle_paiement.'</td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
}
|
}
|
||||||
// Status
|
// Status
|
||||||
print '<tr>';
|
print '<tr>';
|
||||||
print '<td>'.$langs->trans("Statut").'</td>';
|
print '<td>'.$langs->trans("Statut").'</td>';
|
||||||
print '<td>'.$object->getLibStatut(4).'</td>';
|
print '<td colspan="2">'.$object->getLibStatut(4).'</td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
print '<tr>';
|
print '<tr>';
|
||||||
print '<td>'.$langs->trans("NotePublic").'</td>';
|
print '<td>'.$langs->trans("NotePublic").'</td>';
|
||||||
print '<td>'.$object->note_public.'</td>';
|
print '<td colspan="2">'.$object->note_public.'</td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
print '<tr>';
|
print '<tr>';
|
||||||
print '<td>'.$langs->trans("NotePrivate").'</td>';
|
print '<td>'.$langs->trans("NotePrivate").'</td>';
|
||||||
print '<td>'.$object->note_private.'</td>';
|
print '<td colspan="2">'.$object->note_private.'</td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
print '<tr>';
|
print '<tr>';
|
||||||
print '<td>'.$langs->trans("AmountHT").'</td>';
|
print '<td>'.$langs->trans("AmountHT").'</td>';
|
||||||
print '<td>'.price($object->total_ht).'</td>';
|
print '<td>'.price($object->total_ht).'</td>';
|
||||||
|
print '<td rowspan="7" valign="top">';
|
||||||
|
/*
|
||||||
|
* Payments
|
||||||
|
*/
|
||||||
|
$sql = "SELECT p.rowid, p.num_payment, p.datep as dp, p.amount,";
|
||||||
|
$sql.= "c.code as type_code,c.libelle as payment_type";
|
||||||
|
$sql.= " FROM ".MAIN_DB_PREFIX."payment_expensereport as p";
|
||||||
|
$sql.= ", ".MAIN_DB_PREFIX."c_paiement as c ";
|
||||||
|
$sql.= ", ".MAIN_DB_PREFIX."expensereport as e";
|
||||||
|
$sql.= " WHERE e.rowid = '".$id."'";
|
||||||
|
$sql.= " AND p.fk_expensereport = e.rowid";
|
||||||
|
$sql.= " AND e.entity = ".$conf->entity;
|
||||||
|
$sql.= " AND p.fk_typepayment = c.id";
|
||||||
|
$sql.= " ORDER BY dp";
|
||||||
|
|
||||||
|
//print $sql;
|
||||||
|
$resql = $db->query($sql);
|
||||||
|
if ($resql)
|
||||||
|
{
|
||||||
|
$num = $db->num_rows($resql);
|
||||||
|
$i = 0; $total = 0;
|
||||||
|
print '<table class="nobordernopadding" width="100%">';
|
||||||
|
print '<tr class="liste_titre">';
|
||||||
|
print '<td>'.$langs->trans("RefPayment").'</td>';
|
||||||
|
print '<td>'.$langs->trans("Date").'</td>';
|
||||||
|
print '<td>'.$langs->trans("Type").'</td>';
|
||||||
|
print '<td align="right">'.$langs->trans("Amount").'</td>';
|
||||||
|
print '<td> </td>';
|
||||||
|
print '</tr>';
|
||||||
|
|
||||||
|
$var=True;
|
||||||
|
while ($i < $num)
|
||||||
|
{
|
||||||
|
$objp = $db->fetch_object($resql);
|
||||||
|
$var=!$var;
|
||||||
|
print "<tr ".$bc[$var]."><td>";
|
||||||
|
print '<a href="'.DOL_URL_ROOT.'/expensereport/payment/card.php?id='.$objp->rowid.'">'.img_object($langs->trans("Payment"),"payment").' '.$objp->rowid.'</a></td>';
|
||||||
|
print '<td>'.dol_print_date($db->jdate($objp->dp),'day')."</td>\n";
|
||||||
|
$labeltype=$langs->trans("PaymentType".$object->type_code)!=("PaymentType".$object->type_code)?$langs->trans("PaymentType".$object->type_code):$object->fk_typepayment;
|
||||||
|
print "<td>".$labeltype.' '.$object->num_payment."</td>\n";
|
||||||
|
print '<td align="right">'.price($objp->amount)."</td><td> ".$langs->trans("Currency".$conf->currency)."</td>\n";
|
||||||
|
print "</tr>";
|
||||||
|
$totalpaid += $objp->amount;
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($object->paid == 0)
|
||||||
|
{
|
||||||
|
print "<tr><td colspan=\"2\" align=\"right\">".$langs->trans("AlreadyPaid")." :</td><td align=\"right\"><b>".price($totalpaid)."</b></td><td> ".$langs->trans("Currency".$conf->currency)."</td></tr>\n";
|
||||||
|
print "<tr><td colspan=\"2\" align=\"right\">".$langs->trans("AmountExpected")." :</td><td align=\"right\" bgcolor=\"#d0d0d0\">".price($object->total_ttc)."</td><td bgcolor=\"#d0d0d0\"> ".$langs->trans("Currency".$conf->currency)."</td></tr>\n";
|
||||||
|
|
||||||
|
$remaintopay = $object->total_ttc - $totalpaid;
|
||||||
|
|
||||||
|
print "<tr><td colspan=\"2\" align=\"right\">".$langs->trans("RemainderToPay")." :</td>";
|
||||||
|
print "<td align=\"right\" bgcolor=\"#f0f0f0\"><b>".price($remaintopay)."</b></td><td bgcolor=\"#f0f0f0\"> ".$langs->trans("Currency".$conf->currency)."</td></tr>\n";
|
||||||
|
}
|
||||||
|
print "</table>";
|
||||||
|
$db->free($resql);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
print "</td>";
|
||||||
|
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
print '<tr>';
|
print '<tr>';
|
||||||
print '<td>'.$langs->trans("AmountVAT").'</td>';
|
print '<td>'.$langs->trans("AmountVAT").'</td>';
|
||||||
@ -1644,7 +1723,7 @@ else
|
|||||||
{
|
{
|
||||||
//modif ligne!!!!!
|
//modif ligne!!!!!
|
||||||
print '<tr '.$bc[$var].'>';
|
print '<tr '.$bc[$var].'>';
|
||||||
// Sélection date
|
// Select date
|
||||||
print '<td style="text-align:center;">';
|
print '<td style="text-align:center;">';
|
||||||
$form->select_date($objp->date,'date');
|
$form->select_date($objp->date,'date');
|
||||||
print '</td>';
|
print '</td>';
|
||||||
@ -1797,8 +1876,6 @@ else
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Barre d'actions
|
* Barre d'actions
|
||||||
*/
|
*/
|
||||||
@ -1873,9 +1950,9 @@ if ($action != 'create' && $action != 'edit')
|
|||||||
|
|
||||||
/* Si l'état est "En attente d'approbation"
|
/* Si l'état est "En attente d'approbation"
|
||||||
* ET user à droit de "approve"
|
* ET user à droit de "approve"
|
||||||
* ET fk_user_validator == user courant
|
* ET fk_user_validator == user courant
|
||||||
* Afficher : "Valider" / "Refuser" / "Supprimer"
|
* Afficher : "Valider" / "Refuser" / "Supprimer"
|
||||||
*/
|
*/
|
||||||
if ($object->fk_statut == 2)
|
if ($object->fk_statut == 2)
|
||||||
{
|
{
|
||||||
if ($object->fk_user_author == $user->id)
|
if ($object->fk_user_author == $user->id)
|
||||||
@ -1907,34 +1984,46 @@ if ($action != 'create' && $action != 'edit')
|
|||||||
print '<a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?action=delete&id='.$object->id.'">'.$langs->trans('Delete').'</a>';
|
print '<a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?action=delete&id='.$object->id.'">'.$langs->trans('Delete').'</a>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Si l'état est "A payer"
|
/* Si l'état est "A payer"
|
||||||
* ET user à droit de "to_paid"
|
* ET user à droit de "to_paid"
|
||||||
* Afficher : "Annuler" / "Payer" / "Supprimer"
|
* Afficher : "Annuler" / "Payer" / "Supprimer"
|
||||||
*/
|
*/
|
||||||
if ($user->rights->expensereport->to_paid && $object->fk_statut == 5)
|
if ($user->rights->expensereport->to_paid && $object->fk_statut == 5)
|
||||||
{
|
{
|
||||||
// Pay
|
// Pay
|
||||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=paid&id='.$object->id.'">'.$langs->trans('TO_PAID').'</a>';
|
if ($remaintopay == 0)
|
||||||
|
{
|
||||||
|
print '<div class="inline-block divButAction"><span class="butActionRefused" title="' . $langs->trans("DisabledBecauseRemainderToPayIsZero") . '">' . $langs->trans('DoPayment') . '</span></div>';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/expensereport/payment/payment.php?id=' . $object->id . '&action=create">' . $langs->trans('DoPayment') . '</a></div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($object->statut == 1 && round($remaintopay) == 0 && $object->paid == 0 && $user->rights->don->creer)
|
||||||
|
{
|
||||||
|
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?rowid='.$object->id.'&action=set_paid">'.$langs->trans("ClassifyPaid")."</a></div>";
|
||||||
|
}
|
||||||
|
|
||||||
// Cancel
|
// Cancel
|
||||||
if ($user->id == $object->fk_user_author || $user->id == $object->fk_user_valid)
|
if ($user->id == $object->fk_user_author || $user->id == $object->fk_user_valid)
|
||||||
{
|
{
|
||||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=cancel&id='.$object->id.'">'.$langs->trans('Cancel').'</a>';
|
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=cancel&id='.$object->id.'">'.$langs->trans('Cancel').'</a>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Delete
|
||||||
if($user->rights->expensereport->supprimer)
|
if($user->rights->expensereport->supprimer)
|
||||||
{
|
{
|
||||||
// Delete
|
|
||||||
print '<a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?action=delete&id='.$object->id.'">'.$langs->trans('Delete').'</a>';
|
print '<a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?action=delete&id='.$object->id.'">'.$langs->trans('Delete').'</a>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Si l'état est "Payée"
|
/* Si l'état est "Payée"
|
||||||
* ET user à droit "approve"
|
* ET user à droit "approve"
|
||||||
* ET user à droit "to_paid"
|
* ET user à droit "to_paid"
|
||||||
* Afficher : "Annuler"
|
* Afficher : "Annuler"
|
||||||
*/
|
*/
|
||||||
if ($user->rights->expensereport->approve && $user->rights->expensereport->to_paid && $object->fk_statut==6)
|
if ($user->rights->expensereport->approve && $user->rights->expensereport->to_paid && $object->fk_statut==6)
|
||||||
{
|
{
|
||||||
// Cancel
|
// Cancel
|
||||||
|
|||||||
@ -50,12 +50,13 @@ class ExpenseReport extends CommonObject
|
|||||||
var $status;
|
var $status;
|
||||||
var $fk_statut; // -- 1=draft, 2=validated (attente approb), 4=canceled, 5=approved, 6=payed, 99=denied
|
var $fk_statut; // -- 1=draft, 2=validated (attente approb), 4=canceled, 5=approved, 6=payed, 99=denied
|
||||||
var $fk_c_paiement;
|
var $fk_c_paiement;
|
||||||
|
var $paid;
|
||||||
|
|
||||||
var $user_author_infos;
|
var $user_author_infos;
|
||||||
var $user_validator_infos;
|
var $user_validator_infos;
|
||||||
|
|
||||||
var $libelle_paiement;
|
var $modepayment;
|
||||||
var $libelle_statut;
|
var $modepaymentid;
|
||||||
var $code_paiement;
|
var $code_paiement;
|
||||||
var $code_statut;
|
var $code_statut;
|
||||||
|
|
||||||
@ -107,6 +108,7 @@ class ExpenseReport extends CommonObject
|
|||||||
$this->total_ht = 0;
|
$this->total_ht = 0;
|
||||||
$this->total_ttc = 0;
|
$this->total_ttc = 0;
|
||||||
$this->total_tva = 0;
|
$this->total_tva = 0;
|
||||||
|
$this->modepaymentid = 0;
|
||||||
|
|
||||||
// List of language codes for status
|
// List of language codes for status
|
||||||
$this->statuts_short = array(0 => 'Draft', 2 => 'Validated', 4 => 'Canceled', 5 => 'Approved', 6 => 'Paid', 99 => 'Refused');
|
$this->statuts_short = array(0 => 'Draft', 2 => 'Validated', 4 => 'Canceled', 5 => 'Approved', 6 => 'Paid', 99 => 'Refused');
|
||||||
@ -142,6 +144,7 @@ class ExpenseReport extends CommonObject
|
|||||||
$sql.= ",fk_user_validator";
|
$sql.= ",fk_user_validator";
|
||||||
$sql.= ",fk_statut";
|
$sql.= ",fk_statut";
|
||||||
$sql.= ",fk_c_paiement";
|
$sql.= ",fk_c_paiement";
|
||||||
|
$sql.= ",paid";
|
||||||
$sql.= ",note_public";
|
$sql.= ",note_public";
|
||||||
$sql.= ",note_private";
|
$sql.= ",note_private";
|
||||||
$sql.= ") VALUES(";
|
$sql.= ") VALUES(";
|
||||||
@ -155,7 +158,8 @@ class ExpenseReport extends CommonObject
|
|||||||
$sql.= ", ".($user->id > 0 ? $user->id:"null");
|
$sql.= ", ".($user->id > 0 ? $user->id:"null");
|
||||||
$sql.= ", ".($this->fk_user_validator > 0 ? $this->fk_user_validator:"null");
|
$sql.= ", ".($this->fk_user_validator > 0 ? $this->fk_user_validator:"null");
|
||||||
$sql.= ", ".($this->fk_statut > 1 ? $this->fk_statut:0);
|
$sql.= ", ".($this->fk_statut > 1 ? $this->fk_statut:0);
|
||||||
$sql.= ", ".($this->fk_c_paiement > 0 ? $this->fk_c_paiement:"null");
|
$sql.= ", ".($this->modepaymentid?$this->modepaymentid:"null");
|
||||||
|
$sql.= ", 0";
|
||||||
$sql.= ", ".($this->note_public?"'".$this->db->escape($this->note_public)."'":"null");
|
$sql.= ", ".($this->note_public?"'".$this->db->escape($this->note_public)."'":"null");
|
||||||
$sql.= ", ".($this->note_private?"'".$this->db->escape($this->note_private)."'":"null");
|
$sql.= ", ".($this->note_private?"'".$this->db->escape($this->note_private)."'":"null");
|
||||||
$sql.= ")";
|
$sql.= ")";
|
||||||
@ -325,9 +329,10 @@ class ExpenseReport extends CommonObject
|
|||||||
if ($this->fk_user_validator > 0) $user_approver->fetch($this->fk_user_validator);
|
if ($this->fk_user_validator > 0) $user_approver->fetch($this->fk_user_validator);
|
||||||
$this->user_validator_infos = dolGetFirstLastname($user_approver->firstname, $user_approver->lastname);
|
$this->user_validator_infos = dolGetFirstLastname($user_approver->firstname, $user_approver->lastname);
|
||||||
|
|
||||||
$this->fk_statut = $obj->status;
|
$this->fk_statut = $obj->status;
|
||||||
$this->status = $obj->status;
|
$this->status = $obj->status;
|
||||||
$this->fk_c_paiement = $obj->fk_c_paiement;
|
$this->fk_c_paiement = $obj->fk_c_paiement;
|
||||||
|
$this->paid = $obj->paid;
|
||||||
|
|
||||||
if ($this->fk_statut==5 || $this->fk_statut==6)
|
if ($this->fk_statut==5 || $this->fk_statut==6)
|
||||||
{
|
{
|
||||||
@ -367,6 +372,35 @@ class ExpenseReport extends CommonObject
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Classify the expense report as paid
|
||||||
|
*
|
||||||
|
* @param int $id id of expense report
|
||||||
|
* @return int <0 if KO, >0 if OK
|
||||||
|
*/
|
||||||
|
function set_paid($id)
|
||||||
|
{
|
||||||
|
$sql = "UPDATE ".MAIN_DB_PREFIX."expensereport SET fk_statut = 6";
|
||||||
|
$sql.= " WHERE rowid = $id AND fk_statut = 5";
|
||||||
|
|
||||||
|
$resql=$this->db->query($sql);
|
||||||
|
if ($resql)
|
||||||
|
{
|
||||||
|
if ($this->db->affected_rows($resql))
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dol_print_error($this->db);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the label status
|
* Returns the label status
|
||||||
|
|||||||
592
htdocs/expensereport/class/paymentexpensereport.class.php
Normal file
592
htdocs/expensereport/class/paymentexpensereport.class.php
Normal file
@ -0,0 +1,592 @@
|
|||||||
|
<?php
|
||||||
|
/* Copyright (C) 2015 Alexandre Spangaro <alexandre.spangaro@gmail.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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file htdocs/expensereport/class/paymentexpensereport.class.php
|
||||||
|
* \ingroup Expense Report
|
||||||
|
* \brief File of class to manage payment of expense report
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
|
||||||
|
|
||||||
|
|
||||||
|
/** \class PaymentExpenseReport
|
||||||
|
* \brief Class to manage payments of expense report
|
||||||
|
*/
|
||||||
|
class PaymentExpenseReport extends CommonObject
|
||||||
|
{
|
||||||
|
public $element='payment_expensereport'; //!< Id that identify managed objects
|
||||||
|
public $table_element='payment_expensereport'; //!< Name of table without prefix where object is stored
|
||||||
|
|
||||||
|
var $id;
|
||||||
|
var $rowid;
|
||||||
|
var $ref;
|
||||||
|
|
||||||
|
var $fk_expensereport;
|
||||||
|
var $datec='';
|
||||||
|
var $tms='';
|
||||||
|
var $datep='';
|
||||||
|
var $amount; // Total amount of payment
|
||||||
|
var $amounts=array(); // Array of amounts
|
||||||
|
var $fk_typepayment;
|
||||||
|
var $num_payment;
|
||||||
|
var $note;
|
||||||
|
var $fk_bank;
|
||||||
|
var $fk_user_creat;
|
||||||
|
var $fk_user_modif;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param DoliDB $db Database handler
|
||||||
|
*/
|
||||||
|
function __construct($db)
|
||||||
|
{
|
||||||
|
$this->db = $db;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create payment of expense report into database.
|
||||||
|
* Use this->amounts to have list of lines for the payment
|
||||||
|
*
|
||||||
|
* @param User $user User making payment
|
||||||
|
* @return int <0 if KO, id of payment if OK
|
||||||
|
*/
|
||||||
|
function create($user)
|
||||||
|
{
|
||||||
|
global $conf, $langs;
|
||||||
|
|
||||||
|
$error=0;
|
||||||
|
|
||||||
|
$now=dol_now();
|
||||||
|
|
||||||
|
// Validate parameters
|
||||||
|
if (! $this->datepaid)
|
||||||
|
{
|
||||||
|
$this->error='ErrorBadValueForParameterCreatePaymentExpenseReport';
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clean parameters
|
||||||
|
if (isset($this->fk_expensereport)) $this->fk_expensereport=trim($this->fk_expensereport);
|
||||||
|
if (isset($this->amount)) $this->amount=trim($this->amount);
|
||||||
|
if (isset($this->fk_typepayment)) $this->fk_typepayment=trim($this->fk_typepayment);
|
||||||
|
if (isset($this->num_payment)) $this->num_payment=trim($this->num_payment);
|
||||||
|
if (isset($this->note)) $this->note=trim($this->note);
|
||||||
|
if (isset($this->fk_bank)) $this->fk_bank=trim($this->fk_bank);
|
||||||
|
if (isset($this->fk_user_creat)) $this->fk_user_creat=trim($this->fk_user_creat);
|
||||||
|
if (isset($this->fk_user_modif)) $this->fk_user_modif=trim($this->fk_user_modif);
|
||||||
|
|
||||||
|
$totalamount = 0;
|
||||||
|
foreach ($this->amounts as $key => $value) // How payment is dispatch
|
||||||
|
{
|
||||||
|
$newvalue = price2num($value,'MT');
|
||||||
|
$this->amounts[$key] = $newvalue;
|
||||||
|
$totalamount += $newvalue;
|
||||||
|
}
|
||||||
|
$totalamount = price2num($totalamount);
|
||||||
|
|
||||||
|
// Check parameters
|
||||||
|
if ($totalamount == 0) return -1; // On accepte les montants negatifs pour les rejets de prelevement mais pas null
|
||||||
|
|
||||||
|
|
||||||
|
$this->db->begin();
|
||||||
|
|
||||||
|
if ($totalamount != 0)
|
||||||
|
{
|
||||||
|
$sql = "INSERT INTO ".MAIN_DB_PREFIX."payment_expensereport (fk_expensereport, datec, datep, amount,";
|
||||||
|
$sql.= " fk_typepayment, num_payment, note, fk_user_creat, fk_bank)";
|
||||||
|
$sql.= " VALUES ($this->chid, '".$this->db->idate($now)."',";
|
||||||
|
$sql.= " '".$this->db->idate($this->datepaid)."',";
|
||||||
|
$sql.= " ".$totalamount.",";
|
||||||
|
$sql.= " ".$this->fk_typepayment.", '".$this->db->escape($this->num_payment)."', '".$this->db->escape($this->note)."', ".$user->id.",";
|
||||||
|
$sql.= " 0)";
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::create", LOG_DEBUG);
|
||||||
|
$resql=$this->db->query($sql);
|
||||||
|
if ($resql)
|
||||||
|
{
|
||||||
|
$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."payment_expensereport");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($totalamount != 0 && ! $error)
|
||||||
|
{
|
||||||
|
$this->amount=$totalamount;
|
||||||
|
$this->db->commit();
|
||||||
|
return $this->id;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->error=$this->db->error();
|
||||||
|
$this->db->rollback();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load object in memory from database
|
||||||
|
*
|
||||||
|
* @param int $id Id object
|
||||||
|
* @return int <0 if KO, >0 if OK
|
||||||
|
*/
|
||||||
|
function fetch($id)
|
||||||
|
{
|
||||||
|
global $langs;
|
||||||
|
$sql = "SELECT";
|
||||||
|
$sql.= " t.rowid,";
|
||||||
|
$sql.= " t.fk_expensereport,";
|
||||||
|
$sql.= " t.datec,";
|
||||||
|
$sql.= " t.tms,";
|
||||||
|
$sql.= " t.datep,";
|
||||||
|
$sql.= " t.amount,";
|
||||||
|
$sql.= " t.fk_typepayment,";
|
||||||
|
$sql.= " t.num_payment,";
|
||||||
|
$sql.= " t.note,";
|
||||||
|
$sql.= " t.fk_bank,";
|
||||||
|
$sql.= " t.fk_user_creat,";
|
||||||
|
$sql.= " t.fk_user_modif,";
|
||||||
|
$sql.= " pt.code as type_code, pt.libelle as type_libelle,";
|
||||||
|
$sql.= ' b.fk_account';
|
||||||
|
$sql.= " FROM (".MAIN_DB_PREFIX."c_paiement as pt, ".MAIN_DB_PREFIX."payment_expensereport as t)";
|
||||||
|
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'bank as b ON t.fk_bank = b.rowid';
|
||||||
|
$sql.= " WHERE t.rowid = ".$id." AND t.fk_typepayment = pt.id";
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::fetch", LOG_DEBUG);
|
||||||
|
$resql=$this->db->query($sql);
|
||||||
|
if ($resql)
|
||||||
|
{
|
||||||
|
if ($this->db->num_rows($resql))
|
||||||
|
{
|
||||||
|
$obj = $this->db->fetch_object($resql);
|
||||||
|
|
||||||
|
$this->id = $obj->rowid;
|
||||||
|
$this->ref = $obj->rowid;
|
||||||
|
|
||||||
|
$this->fk_expensereport = $obj->fk_expensereport;
|
||||||
|
$this->datec = $this->db->jdate($obj->datec);
|
||||||
|
$this->tms = $this->db->jdate($obj->tms);
|
||||||
|
$this->datep = $this->db->jdate($obj->datep);
|
||||||
|
$this->amount = $obj->amount;
|
||||||
|
$this->fk_typepayment = $obj->fk_typepayment;
|
||||||
|
$this->num_payment = $obj->num_payment;
|
||||||
|
$this->note = $obj->note;
|
||||||
|
$this->fk_bank = $obj->fk_bank;
|
||||||
|
$this->fk_user_creat = $obj->fk_user_creat;
|
||||||
|
$this->fk_user_modif = $obj->fk_user_modif;
|
||||||
|
|
||||||
|
$this->type_code = $obj->type_code;
|
||||||
|
$this->type_libelle = $obj->type_libelle;
|
||||||
|
|
||||||
|
$this->bank_account = $obj->fk_account;
|
||||||
|
$this->bank_line = $obj->fk_bank;
|
||||||
|
}
|
||||||
|
$this->db->free($resql);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->error="Error ".$this->db->lasterror();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update database
|
||||||
|
*
|
||||||
|
* @param User $user User that modify
|
||||||
|
* @param int $notrigger 0=launch triggers after, 1=disable triggers
|
||||||
|
* @return int <0 if KO, >0 if OK
|
||||||
|
*/
|
||||||
|
function update($user=null, $notrigger=0)
|
||||||
|
{
|
||||||
|
global $conf, $langs;
|
||||||
|
$error=0;
|
||||||
|
|
||||||
|
// Clean parameters
|
||||||
|
|
||||||
|
if (isset($this->fk_expensereport)) $this->fk_expensereport=trim($this->fk_expensereport);
|
||||||
|
if (isset($this->amount)) $this->amount=trim($this->amount);
|
||||||
|
if (isset($this->fk_typepayment)) $this->fk_typepayment=trim($this->fk_typepayment);
|
||||||
|
if (isset($this->num_payment)) $this->num_payment=trim($this->num_payment);
|
||||||
|
if (isset($this->note)) $this->note=trim($this->note);
|
||||||
|
if (isset($this->fk_bank)) $this->fk_bank=trim($this->fk_bank);
|
||||||
|
if (isset($this->fk_user_creat)) $this->fk_user_creat=trim($this->fk_user_creat);
|
||||||
|
if (isset($this->fk_user_modif)) $this->fk_user_modif=trim($this->fk_user_modif);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Check parameters
|
||||||
|
// Put here code to add control on parameters values
|
||||||
|
|
||||||
|
// Update request
|
||||||
|
$sql = "UPDATE ".MAIN_DB_PREFIX."payment_expensereport SET";
|
||||||
|
|
||||||
|
$sql.= " fk_expensereport=".(isset($this->fk_expensereport)?$this->fk_expensereport:"null").",";
|
||||||
|
$sql.= " datec=".(dol_strlen($this->datec)!=0 ? "'".$this->db->idate($this->datec)."'" : 'null').",";
|
||||||
|
$sql.= " tms=".(dol_strlen($this->tms)!=0 ? "'".$this->db->idate($this->tms)."'" : 'null').",";
|
||||||
|
$sql.= " datep=".(dol_strlen($this->datep)!=0 ? "'".$this->db->idate($this->datep)."'" : 'null').",";
|
||||||
|
$sql.= " amount=".(isset($this->amount)?$this->amount:"null").",";
|
||||||
|
$sql.= " fk_typepayment=".(isset($this->fk_typepayment)?$this->fk_typepayment:"null").",";
|
||||||
|
$sql.= " num_payment=".(isset($this->num_payment)?"'".$this->db->escape($this->num_payment)."'":"null").",";
|
||||||
|
$sql.= " note=".(isset($this->note)?"'".$this->db->escape($this->note)."'":"null").",";
|
||||||
|
$sql.= " fk_bank=".(isset($this->fk_bank)?$this->fk_bank:"null").",";
|
||||||
|
$sql.= " fk_user_creat=".(isset($this->fk_user_creat)?$this->fk_user_creat:"null").",";
|
||||||
|
$sql.= " fk_user_modif=".(isset($this->fk_user_modif)?$this->fk_user_modif:"null")."";
|
||||||
|
|
||||||
|
|
||||||
|
$sql.= " WHERE rowid=".$this->id;
|
||||||
|
|
||||||
|
$this->db->begin();
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::update", LOG_DEBUG);
|
||||||
|
$resql = $this->db->query($sql);
|
||||||
|
if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); }
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
if (! $notrigger)
|
||||||
|
{
|
||||||
|
// Uncomment this and change MYOBJECT to your own tag if you
|
||||||
|
// want this action call a trigger.
|
||||||
|
|
||||||
|
//// Call triggers
|
||||||
|
//include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
|
||||||
|
//$interface=new Interfaces($this->db);
|
||||||
|
//$result=$interface->run_triggers('MYOBJECT_MODIFY',$this,$user,$langs,$conf);
|
||||||
|
//if ($result < 0) { $error++; $this->errors=$interface->errors; }
|
||||||
|
//// End call triggers
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Commit or rollback
|
||||||
|
if ($error)
|
||||||
|
{
|
||||||
|
foreach($this->errors as $errmsg)
|
||||||
|
{
|
||||||
|
dol_syslog(get_class($this)."::update ".$errmsg, LOG_ERR);
|
||||||
|
$this->error.=($this->error?', '.$errmsg:$errmsg);
|
||||||
|
}
|
||||||
|
$this->db->rollback();
|
||||||
|
return -1*$error;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->db->commit();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete object in database
|
||||||
|
*
|
||||||
|
* @param User $user User that delete
|
||||||
|
* @param int $notrigger 0=launch triggers after, 1=disable triggers
|
||||||
|
* @return int <0 if KO, >0 if OK
|
||||||
|
*/
|
||||||
|
function delete($user, $notrigger=0)
|
||||||
|
{
|
||||||
|
global $conf, $langs;
|
||||||
|
$error=0;
|
||||||
|
|
||||||
|
$this->db->begin();
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
$sql = "DELETE FROM ".MAIN_DB_PREFIX."bank_url";
|
||||||
|
$sql.= " WHERE type='payment_expensereport' AND url_id=".$this->id;
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::delete", LOG_DEBUG);
|
||||||
|
$resql = $this->db->query($sql);
|
||||||
|
if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
$sql = "DELETE FROM ".MAIN_DB_PREFIX."payment_expensereport";
|
||||||
|
$sql.= " WHERE rowid=".$this->id;
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::delete", LOG_DEBUG);
|
||||||
|
$resql = $this->db->query($sql);
|
||||||
|
if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
if (! $notrigger)
|
||||||
|
{
|
||||||
|
// Uncomment this and change MYOBJECT to your own tag if you
|
||||||
|
// want this action call a trigger.
|
||||||
|
|
||||||
|
//// Call triggers
|
||||||
|
//include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
|
||||||
|
//$interface=new Interfaces($this->db);
|
||||||
|
//$result=$interface->run_triggers('MYOBJECT_DELETE',$this,$user,$langs,$conf);
|
||||||
|
//if ($result < 0) { $error++; $this->errors=$interface->errors; }
|
||||||
|
//// End call triggers
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Commit or rollback
|
||||||
|
if ($error)
|
||||||
|
{
|
||||||
|
foreach($this->errors as $errmsg)
|
||||||
|
{
|
||||||
|
dol_syslog(get_class($this)."::delete ".$errmsg, LOG_ERR);
|
||||||
|
$this->error.=($this->error?', '.$errmsg:$errmsg);
|
||||||
|
}
|
||||||
|
$this->db->rollback();
|
||||||
|
return -1*$error;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->db->commit();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load an object from its id and create a new one in database
|
||||||
|
*
|
||||||
|
* @param int $fromid Id of object to clone
|
||||||
|
* @return int New id of clone
|
||||||
|
*/
|
||||||
|
function createFromClone($fromid)
|
||||||
|
{
|
||||||
|
global $user,$langs;
|
||||||
|
|
||||||
|
$error=0;
|
||||||
|
|
||||||
|
$object=new PaymentExpenseReport($this->db);
|
||||||
|
|
||||||
|
$object->context['createfromclone'] = 'createfromclone';
|
||||||
|
|
||||||
|
$this->db->begin();
|
||||||
|
|
||||||
|
// Load source object
|
||||||
|
$object->fetch($fromid);
|
||||||
|
$object->id=0;
|
||||||
|
$object->statut=0;
|
||||||
|
|
||||||
|
// Clear fields
|
||||||
|
// ...
|
||||||
|
|
||||||
|
// Create clone
|
||||||
|
$result=$object->create($user);
|
||||||
|
|
||||||
|
// Other options
|
||||||
|
if ($result < 0)
|
||||||
|
{
|
||||||
|
$this->error=$object->error;
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($this->context['createfromclone']);
|
||||||
|
|
||||||
|
// End
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
$this->db->commit();
|
||||||
|
return $object->id;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->db->rollback();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialise an instance with random values.
|
||||||
|
* Used to build previews or test instances.
|
||||||
|
* id must be 0 if object instance is a specimen.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function initAsSpecimen()
|
||||||
|
{
|
||||||
|
$this->id=0;
|
||||||
|
|
||||||
|
$this->fk_expensereport='';
|
||||||
|
$this->datec='';
|
||||||
|
$this->tms='';
|
||||||
|
$this->datep='';
|
||||||
|
$this->amount='';
|
||||||
|
$this->fk_typepayment='';
|
||||||
|
$this->num_payment='';
|
||||||
|
$this->note='';
|
||||||
|
$this->fk_bank='';
|
||||||
|
$this->fk_user_creat='';
|
||||||
|
$this->fk_user_modif='';
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add record into bank for payment with links between this bank record and invoices of payment.
|
||||||
|
* All payment properties must have been set first like after a call to create().
|
||||||
|
*
|
||||||
|
* @param User $user Object of user making payment
|
||||||
|
* @param string $mode 'payment_expensereport'
|
||||||
|
* @param string $label Label to use in bank record
|
||||||
|
* @param int $accountid Id of bank account to do link with
|
||||||
|
* @param string $emetteur_nom Name of transmitter
|
||||||
|
* @param string $emetteur_banque Name of bank
|
||||||
|
* @return int <0 if KO, >0 if OK
|
||||||
|
*/
|
||||||
|
function addPaymentToBank($user,$mode,$label,$accountid,$emetteur_nom,$emetteur_banque)
|
||||||
|
{
|
||||||
|
global $conf;
|
||||||
|
|
||||||
|
$error=0;
|
||||||
|
|
||||||
|
if (! empty($conf->banque->enabled))
|
||||||
|
{
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
|
||||||
|
|
||||||
|
$acc = new Account($this->db);
|
||||||
|
$acc->fetch($accountid);
|
||||||
|
|
||||||
|
$total=$this->total;
|
||||||
|
if ($mode == 'payment_expensereport') $amount=$total;
|
||||||
|
|
||||||
|
// Insert payment into llx_bank
|
||||||
|
$bank_line_id = $acc->addline(
|
||||||
|
$this->datepaid,
|
||||||
|
$this->fk_typepayment, // Payment mode id or code ("CHQ or VIR for example")
|
||||||
|
$label,
|
||||||
|
$amount,
|
||||||
|
$this->num_payment,
|
||||||
|
'',
|
||||||
|
$user,
|
||||||
|
$emetteur_nom,
|
||||||
|
$emetteur_banque
|
||||||
|
);
|
||||||
|
|
||||||
|
// Update fk_bank in llx_paiement.
|
||||||
|
// On connait ainsi le paiement qui a genere l'ecriture bancaire
|
||||||
|
if ($bank_line_id > 0)
|
||||||
|
{
|
||||||
|
$result=$this->update_fk_bank($bank_line_id);
|
||||||
|
if ($result <= 0)
|
||||||
|
{
|
||||||
|
$error++;
|
||||||
|
dol_print_error($this->db);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add link 'payment', 'payment_supplier', 'payment_expensereport' in bank_url between payment and bank transaction
|
||||||
|
$url='';
|
||||||
|
if ($mode == 'payment_expensereport') $url=DOL_URL_ROOT.'/expensereport/payment/card.php?rowid=';
|
||||||
|
if ($url)
|
||||||
|
{
|
||||||
|
$result=$acc->add_url_line($bank_line_id, $this->id, $url, '(paiement)', $mode);
|
||||||
|
if ($result <= 0)
|
||||||
|
{
|
||||||
|
$error++;
|
||||||
|
dol_print_error($this->db);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->error=$acc->error;
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update link between the expense report payment and the generated line in llx_bank
|
||||||
|
*
|
||||||
|
* @param int $id_bank Id if bank
|
||||||
|
* @return int >0 if OK, <=0 if KO
|
||||||
|
*/
|
||||||
|
function update_fk_bank($id_bank)
|
||||||
|
{
|
||||||
|
$sql = "UPDATE ".MAIN_DB_PREFIX."payment_expensereport SET fk_bank = ".$id_bank." WHERE rowid = ".$this->id;
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::update_fk_bank", LOG_DEBUG);
|
||||||
|
$result = $this->db->query($sql);
|
||||||
|
if ($result)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->error=$this->db->error();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return clicable name (with picto eventually)
|
||||||
|
*
|
||||||
|
* @param int $withpicto 0=No picto, 1=Include picto into link, 2=Only picto
|
||||||
|
* @param int $maxlen Longueur max libelle
|
||||||
|
* @return string Chaine avec URL
|
||||||
|
*/
|
||||||
|
function getNomUrl($withpicto=0,$maxlen=0)
|
||||||
|
{
|
||||||
|
global $langs;
|
||||||
|
|
||||||
|
$result='';
|
||||||
|
|
||||||
|
if (empty($this->ref)) $this->ref=$this->lib;
|
||||||
|
$label = $langs->trans("ShowPayment").': '.$this->ref;
|
||||||
|
|
||||||
|
if (!empty($this->id))
|
||||||
|
{
|
||||||
|
$link = '<a href="'.DOL_URL_ROOT.'/expensereport/payment/card.php?id='.$this->id.'" title="'.dol_escape_htmltag($label, 1).'" class="classfortooltip">';
|
||||||
|
$linkend='</a>';
|
||||||
|
|
||||||
|
if ($withpicto) $result.=($link.img_object($label, 'payment', 'class="classfortooltip"').$linkend.' ');
|
||||||
|
if ($withpicto && $withpicto != 2) $result.=' ';
|
||||||
|
if ($withpicto != 2) $result.=$link.($maxlen?dol_trunc($this->ref,$maxlen):$this->ref).$linkend;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
}
|
||||||
303
htdocs/expensereport/payment/card.php
Normal file
303
htdocs/expensereport/payment/card.php
Normal file
@ -0,0 +1,303 @@
|
|||||||
|
<?php
|
||||||
|
/* Copyright (C) 2015 Alexandre Spangaro <alexandre.spangaro@gmail.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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file htdocs/expensereport/payment/card.php
|
||||||
|
* \ingroup Expense Report
|
||||||
|
* \brief Tab payment of an expense report
|
||||||
|
*/
|
||||||
|
|
||||||
|
require '../../main.inc.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/expensereport/class/paymentexpensereport.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/modules/facture/modules_facture.php';
|
||||||
|
if (! empty($conf->banque->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
|
||||||
|
|
||||||
|
$langs->load('bills');
|
||||||
|
$langs->load('banks');
|
||||||
|
$langs->load('companies');
|
||||||
|
|
||||||
|
// Security check
|
||||||
|
$id=GETPOST('rowid')?GETPOST('rowid','int'):GETPOST('id','int');
|
||||||
|
$action=GETPOST("action");
|
||||||
|
$confirm=GETPOST('confirm');
|
||||||
|
if ($user->societe_id) $socid=$user->societe_id;
|
||||||
|
// TODO Add rule to restrict access payment
|
||||||
|
//$result = restrictedArea($user, 'facture', $id,'');
|
||||||
|
|
||||||
|
$payment = new PaymentExpenseReport($db);
|
||||||
|
if ($id > 0)
|
||||||
|
{
|
||||||
|
$result=$payment->fetch($id);
|
||||||
|
if (! $result) dol_print_error($db,'Failed to get payment id '.$id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Actions
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Delete payment
|
||||||
|
if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->expensereport->supprimer)
|
||||||
|
{
|
||||||
|
$db->begin();
|
||||||
|
|
||||||
|
$result = $payment->delete($user);
|
||||||
|
if ($result > 0)
|
||||||
|
{
|
||||||
|
$db->commit();
|
||||||
|
header("Location: ".DOL_URL_ROOT."/expensereport/index.php");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setEventMessage($payment->error, 'errors');
|
||||||
|
$db->rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create payment
|
||||||
|
if ($action == 'confirm_valide' && $confirm == 'yes' && $user->rights->expensereport->creer)
|
||||||
|
{
|
||||||
|
$db->begin();
|
||||||
|
|
||||||
|
$result=$payment->valide();
|
||||||
|
|
||||||
|
if ($result > 0)
|
||||||
|
{
|
||||||
|
$db->commit();
|
||||||
|
|
||||||
|
$factures=array(); // TODO Get all id of invoices linked to this payment
|
||||||
|
foreach($factures as $id)
|
||||||
|
{
|
||||||
|
$fac = new Facture($db);
|
||||||
|
$fac->fetch($id);
|
||||||
|
|
||||||
|
$outputlangs = $langs;
|
||||||
|
if (! empty($_REQUEST['lang_id']))
|
||||||
|
{
|
||||||
|
$outputlangs = new Translate("",$conf);
|
||||||
|
$outputlangs->setDefaultLang($_REQUEST['lang_id']);
|
||||||
|
}
|
||||||
|
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
|
||||||
|
$fac->generateDocument($fac->modelpdf, $outputlangs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
header('Location: card.php?id='.$payment->id);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setEventMessage($payment->error);
|
||||||
|
$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
|
||||||
|
*/
|
||||||
|
if ($action == 'valide')
|
||||||
|
{
|
||||||
|
$facid = $_GET['facid'];
|
||||||
|
print $form->formconfirm('card.php?id='.$payment->id.'&facid='.$facid, $langs->trans("ValidatePayment"), $langs->trans("ConfirmValidatePayment"), 'confirm_valide','',0,2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
print '<table class="border" width="100%">';
|
||||||
|
|
||||||
|
// Ref
|
||||||
|
print '<tr><td valign="top" width="20%">'.$langs->trans('Ref').'</td>';
|
||||||
|
print '<td colspan="3">';
|
||||||
|
print $form->showrefnav($payment,'id','',1,'rowid','id');
|
||||||
|
print '</td></tr>';
|
||||||
|
|
||||||
|
// Date
|
||||||
|
print '<tr><td valign="top">'.$langs->trans('Date').'</td><td colspan="3">'.dol_print_date($payment->datep,'day').'</td></tr>';
|
||||||
|
|
||||||
|
// Mode
|
||||||
|
print '<tr><td valign="top">'.$langs->trans('Mode').'</td><td colspan="3">'.$langs->trans("PaymentType".$payment->type_code).'</td></tr>';
|
||||||
|
|
||||||
|
// Number
|
||||||
|
print '<tr><td valign="top">'.$langs->trans('Number').'</td><td colspan="3">'.$payment->num_payment.'</td></tr>';
|
||||||
|
|
||||||
|
// Amount
|
||||||
|
print '<tr><td valign="top">'.$langs->trans('Amount').'</td><td colspan="3">'.price($payment->amount, 0, $outputlangs, 1, -1, -1, $conf->currency).'</td></tr>';
|
||||||
|
|
||||||
|
// Note
|
||||||
|
print '<tr><td valign="top">'.$langs->trans('Note').'</td><td colspan="3">'.nl2br($payment->note).'</td></tr>';
|
||||||
|
|
||||||
|
// Bank account
|
||||||
|
if (! empty($conf->banque->enabled))
|
||||||
|
{
|
||||||
|
if ($payment->bank_account)
|
||||||
|
{
|
||||||
|
$bankline=new AccountLine($db);
|
||||||
|
$bankline->fetch($payment->bank_line);
|
||||||
|
|
||||||
|
print '<tr>';
|
||||||
|
print '<td>'.$langs->trans('BankTransactionLine').'</td>';
|
||||||
|
print '<td colspan="3">';
|
||||||
|
print $bankline->getNomUrl(1,0,'showall');
|
||||||
|
print '</td>';
|
||||||
|
print '</tr>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
print '</table>';
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* List of donations paid
|
||||||
|
*/
|
||||||
|
|
||||||
|
$disable_delete = 0;
|
||||||
|
$sql = 'SELECT er.rowid as did, er.paid, er.total_ttc, per.amount';
|
||||||
|
$sql.= ' FROM '.MAIN_DB_PREFIX.'payment_expensereport as per,'.MAIN_DB_PREFIX.'expensereport as er';
|
||||||
|
$sql.= ' WHERE per.fk_expensereport = er.rowid';
|
||||||
|
$sql.= ' AND er.entity = '.$conf->entity;
|
||||||
|
$sql.= ' AND per.rowid = '.$id;
|
||||||
|
|
||||||
|
dol_syslog("expensereport/payment/card.php", LOG_DEBUG);
|
||||||
|
$resql=$db->query($sql);
|
||||||
|
if ($resql)
|
||||||
|
{
|
||||||
|
$num = $db->num_rows($resql);
|
||||||
|
|
||||||
|
$i = 0;
|
||||||
|
$total = 0;
|
||||||
|
print '<br><table class="noborder" width="100%">';
|
||||||
|
print '<tr class="liste_titre">';
|
||||||
|
print '<td>'.$langs->trans('ExpenseReport').'</td>';
|
||||||
|
print '<td align="right">'.$langs->trans('ExpectedToPay').'</td>';
|
||||||
|
print '<td align="center">'.$langs->trans('Status').'</td>';
|
||||||
|
print '<td align="right">'.$langs->trans('PayedByThisPayment').'</td>';
|
||||||
|
print "</tr>\n";
|
||||||
|
|
||||||
|
if ($num > 0)
|
||||||
|
{
|
||||||
|
$var=True;
|
||||||
|
|
||||||
|
while ($i < $num)
|
||||||
|
{
|
||||||
|
$objp = $db->fetch_object($resql);
|
||||||
|
|
||||||
|
$var=!$var;
|
||||||
|
print '<tr '.$bc[$var].'>';
|
||||||
|
// Ref
|
||||||
|
print '<td>';
|
||||||
|
$expensereport->fetch($objp->did);
|
||||||
|
print $expensereport->getNomUrl(1);
|
||||||
|
print "</td>\n";
|
||||||
|
// Expected to pay
|
||||||
|
print '<td align="right">'.price($objp->total_ttc).'</td>';
|
||||||
|
// Status
|
||||||
|
print '<td align="center">'.$expensereport->getLibStatut(4,$objp->amount).'</td>';
|
||||||
|
// Amount paid
|
||||||
|
print '<td align="right">'.price($objp->amount).'</td>';
|
||||||
|
print "</tr>\n";
|
||||||
|
if ($objp->paid == 1) // If at least one invoice is paid, disable delete
|
||||||
|
{
|
||||||
|
$disable_delete = 1;
|
||||||
|
}
|
||||||
|
$total = $total + $objp->amount;
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$var=!$var;
|
||||||
|
|
||||||
|
print "</table>\n";
|
||||||
|
$db->free($resql);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
|
||||||
|
print '</div>';
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Actions buttons
|
||||||
|
*/
|
||||||
|
print '<div class="tabsAction">';
|
||||||
|
|
||||||
|
/*
|
||||||
|
if (! empty($conf->global->BILL_ADD_PAYMENT_VALIDATION))
|
||||||
|
{
|
||||||
|
if ($user->societe_id == 0 && $payment->statut == 0 && $_GET['action'] == '')
|
||||||
|
{
|
||||||
|
if ($user->rights->facture->paiement)
|
||||||
|
{
|
||||||
|
print '<a class="butAction" href="card.php?id='.$_GET['id'].'&facid='.$objp->facid.'&action=valide">'.$langs->trans('Valid').'</a>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ($_GET['action'] == '')
|
||||||
|
{
|
||||||
|
if ($user->rights->expensereport->supprimer)
|
||||||
|
{
|
||||||
|
if (! $disable_delete)
|
||||||
|
{
|
||||||
|
print '<a class="butActionDelete" href="card.php?id='.$_GET['id'].'&action=delete">'.$langs->trans('Delete').'</a>';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans("CantRemovePaymentWithOneInvoicePaid")).'">'.$langs->trans('Delete').'</a>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
print '</div>';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
llxFooter();
|
||||||
|
|
||||||
|
$db->close();
|
||||||
0
htdocs/expensereport/payment/index.html
Normal file
0
htdocs/expensereport/payment/index.html
Normal file
314
htdocs/expensereport/payment/payment.php
Normal file
314
htdocs/expensereport/payment/payment.php
Normal file
@ -0,0 +1,314 @@
|
|||||||
|
<?php
|
||||||
|
/* Copyright (C) 2015 Alexandre Spangaro <alexandre.spangaro@gmail.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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file htdocs/expensereport/payment/payment.php
|
||||||
|
* \ingroup Expense Report
|
||||||
|
* \brief Page to add payment of an expense report
|
||||||
|
*/
|
||||||
|
|
||||||
|
require '../../main.inc.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/expensereport/class/paymentexpensereport.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
|
||||||
|
|
||||||
|
$langs->load("bills");
|
||||||
|
|
||||||
|
$chid=GETPOST("id");
|
||||||
|
$action=GETPOST('action');
|
||||||
|
$amounts = array();
|
||||||
|
|
||||||
|
// Security check
|
||||||
|
$socid=0;
|
||||||
|
if ($user->societe_id > 0)
|
||||||
|
{
|
||||||
|
$socid = $user->societe_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Actions
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ($action == 'add_payment')
|
||||||
|
{
|
||||||
|
$error=0;
|
||||||
|
|
||||||
|
if ($_POST["cancel"])
|
||||||
|
{
|
||||||
|
$loc = DOL_URL_ROOT.'/expensereport/card.php?id='.$chid;
|
||||||
|
header("Location: ".$loc);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
$datepaid = dol_mktime(12, 0, 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]);
|
||||||
|
|
||||||
|
if (! $_POST["fk_typepayment"] > 0)
|
||||||
|
{
|
||||||
|
$mesg = $langs->trans("ErrorFieldRequired",$langs->transnoentities("PaymentMode"));
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
|
if ($datepaid == '')
|
||||||
|
{
|
||||||
|
$mesg = $langs->trans("ErrorFieldRequired",$langs->transnoentities("Date"));
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
|
if (! empty($conf->banque->enabled) && ! $_POST["accountid"] > 0)
|
||||||
|
{
|
||||||
|
$mesg = $langs->trans("ErrorFieldRequired",$langs->transnoentities("AccountToCredit"));
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
$paymentid = 0;
|
||||||
|
|
||||||
|
// Read possible payments
|
||||||
|
foreach ($_POST as $key => $value)
|
||||||
|
{
|
||||||
|
if (substr($key,0,7) == 'amount_')
|
||||||
|
{
|
||||||
|
$other_chid = substr($key,7);
|
||||||
|
$amounts[$other_chid] = price2num($_POST[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count($amounts) <= 0)
|
||||||
|
{
|
||||||
|
$error++;
|
||||||
|
$errmsg='ErrorNoPaymentDefined';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
$db->begin();
|
||||||
|
|
||||||
|
// Create a line of payments
|
||||||
|
$payment = new PaymentExpenseReport($db);
|
||||||
|
$payment->chid = $chid;
|
||||||
|
$payment->datepaid = $datepaid;
|
||||||
|
$payment->amounts = $amounts; // Tableau de montant
|
||||||
|
$payment->fk_typepayment = $_POST["fk_typepayment"];
|
||||||
|
$payment->num_payment = $_POST["num_payment"];
|
||||||
|
$payment->note = $_POST["note"];
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
$paymentid = $payment->create($user);
|
||||||
|
if ($paymentid < 0)
|
||||||
|
{
|
||||||
|
$errmsg=$payment->error;
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
$result=$payment->addPaymentToBank($user,'payment_expensereport','(ExpenseReportPayment)',$_POST['accountid'],'','');
|
||||||
|
if (! $result > 0)
|
||||||
|
{
|
||||||
|
$errmsg=$payment->error;
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
$db->commit();
|
||||||
|
$loc = DOL_URL_ROOT.'/expensereport/card.php?id='.$chid;
|
||||||
|
header('Location: '.$loc);
|
||||||
|
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_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>';
|
||||||
|
print '<tr><td>'.$langs->trans("Period").'</td><td colspan="2">'.get_date_range($expensereport->date_debut,$expensereport->date_fin,"",$langs,0).'</td></tr>';
|
||||||
|
print '<tr><td>'.$langs->trans("Amount").'</td><td colspan="2">'.price($expensereport->total_ttc,0,$outputlangs,1,-1,-1,$conf->currency).'</td></tr>';
|
||||||
|
|
||||||
|
$sql = "SELECT sum(p.amount) as total";
|
||||||
|
$sql.= " FROM ".MAIN_DB_PREFIX."payment_expensereport as p";
|
||||||
|
$sql.= " WHERE p.fk_expensereport = ".$chid;
|
||||||
|
$resql = $db->query($sql);
|
||||||
|
if ($resql)
|
||||||
|
{
|
||||||
|
$obj=$db->fetch_object($resql);
|
||||||
|
$sumpaid = $obj->total;
|
||||||
|
$db->free();
|
||||||
|
}
|
||||||
|
print '<tr><td>'.$langs->trans("AlreadyPaid").'</td><td colspan="2">'.price($sumpaid,0,$outputlangs,1,-1,-1,$conf->currency).'</td></tr>';
|
||||||
|
print '<tr><td valign="top">'.$langs->trans("RemainderToPay").'</td><td colspan="2">'.price($total-$sumpaid,0,$outputlangs,1,-1,-1,$conf->currency).'</td></tr>';
|
||||||
|
|
||||||
|
print '<tr class="liste_titre">';
|
||||||
|
print "<td colspan=\"3\">".$langs->trans("Payment").'</td>';
|
||||||
|
print '</tr>';
|
||||||
|
|
||||||
|
print '<tr><td class="fieldrequired">'.$langs->trans("Date").'</td><td colspan="2">';
|
||||||
|
$datepaid = dol_mktime(12, 0, 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]);
|
||||||
|
$datepayment=empty($conf->global->MAIN_AUTOFILL_DATE)?(empty($_POST["remonth"])?-1:$datepaid):0;
|
||||||
|
$form->select_date($datepayment,'','','','',"add_payment",1,1);
|
||||||
|
print "</td>";
|
||||||
|
print '</tr>';
|
||||||
|
|
||||||
|
print '<tr><td class="fieldrequired">'.$langs->trans("PaymentMode").'</td><td colspan="2">';
|
||||||
|
$form->select_types_paiements(isset($_POST["fk_typepayment"])?$_POST["fk_typepayment"]:$expensereport->fk_typepayment, "fk_typepayment");
|
||||||
|
print "</td>\n";
|
||||||
|
print '</tr>';
|
||||||
|
|
||||||
|
print '<tr>';
|
||||||
|
print '<td class="fieldrequired">'.$langs->trans('AccountToDebit').'</td>';
|
||||||
|
print '<td colspan="2">';
|
||||||
|
$form->select_comptes(isset($_POST["accountid"])?$_POST["accountid"]:$expensereport->accountid, "accountid", 0, '',1); // Show open bank account list
|
||||||
|
print '</td></tr>';
|
||||||
|
|
||||||
|
// Number
|
||||||
|
print '<tr><td>'.$langs->trans('Numero');
|
||||||
|
print ' <em>('.$langs->trans("ChequeOrTransferNumber").')</em>';
|
||||||
|
print '</td>';
|
||||||
|
print '<td colspan="2"><input name="num_payment" type="text" value="'.GETPOST('num_payment').'"></td></tr>'."\n";
|
||||||
|
|
||||||
|
print '<tr>';
|
||||||
|
print '<td valign="top">'.$langs->trans("Comments").'</td>';
|
||||||
|
print '<td valign="top" colspan="2"><textarea name="note" wrap="soft" cols="60" rows="'.ROWS_3.'"></textarea></td>';
|
||||||
|
print '</tr>';
|
||||||
|
|
||||||
|
print '</table>';
|
||||||
|
|
||||||
|
dol_fiche_end();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Autres charges impayees
|
||||||
|
*/
|
||||||
|
$num = 1;
|
||||||
|
$i = 0;
|
||||||
|
|
||||||
|
print '<table class="noborder" width="100%">';
|
||||||
|
print '<tr class="liste_titre">';
|
||||||
|
print '<td align="right">'.$langs->trans("Amount").'</td>';
|
||||||
|
print '<td align="right">'.$langs->trans("AlreadyPaid").'</td>';
|
||||||
|
print '<td align="right">'.$langs->trans("RemainderToPay").'</td>';
|
||||||
|
print '<td align="center">'.$langs->trans("Amount").'</td>';
|
||||||
|
print "</tr>\n";
|
||||||
|
|
||||||
|
$var=true;
|
||||||
|
$total=0;
|
||||||
|
$totalrecu=0;
|
||||||
|
|
||||||
|
while ($i < $num)
|
||||||
|
{
|
||||||
|
$objp = $expensereport;
|
||||||
|
|
||||||
|
$var=!$var;
|
||||||
|
|
||||||
|
print "<tr ".$bc[$var].">";
|
||||||
|
|
||||||
|
print '<td align="right">'.price($objp->total_ttc)."</td>";
|
||||||
|
|
||||||
|
print '<td align="right">'.price($sumpaid)."</td>";
|
||||||
|
|
||||||
|
print '<td align="right">'.price($objp->total_ttc - $sumpaid)."</td>";
|
||||||
|
|
||||||
|
print '<td align="center">';
|
||||||
|
if ($sumpaid < $objp->total_ttc)
|
||||||
|
{
|
||||||
|
$namef = "amount_".$objp->id;
|
||||||
|
print '<input type="text" size="8" name="'.$namef.'">';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print '-';
|
||||||
|
}
|
||||||
|
print "</td>";
|
||||||
|
|
||||||
|
print "</tr>\n";
|
||||||
|
$total+=$objp->total;
|
||||||
|
$total_ttc+=$objp->total_ttc;
|
||||||
|
$totalrecu+=$objp->am;
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
if ($i > 1)
|
||||||
|
{
|
||||||
|
// Print total
|
||||||
|
print "<tr ".$bc[!$var].">";
|
||||||
|
print '<td colspan="2" align="left">'.$langs->trans("Total").':</td>';
|
||||||
|
print "<td align=\"right\"><b>".price($total_ttc)."</b></td>";
|
||||||
|
print "<td align=\"right\"><b>".price($totalrecu)."</b></td>";
|
||||||
|
print "<td align=\"right\"><b>".price($total_ttc - $totalrecu)."</b></td>";
|
||||||
|
print '<td align="center"> </td>';
|
||||||
|
print "</tr>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
print "</table>";
|
||||||
|
|
||||||
|
print '<br><div class="center">';
|
||||||
|
print '<input type="submit" class="button" name="save" value="'.$langs->trans("Save").'">';
|
||||||
|
print ' ';
|
||||||
|
print '<input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'">';
|
||||||
|
print '</div>';
|
||||||
|
|
||||||
|
print "</form>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$db->close();
|
||||||
|
|
||||||
|
llxFooter();
|
||||||
@ -154,7 +154,7 @@ if ($action == 'dispatch' && $user->rights->fournisseur->commande->receptionner)
|
|||||||
|
|
||||||
if (! $error)
|
if (! $error)
|
||||||
{
|
{
|
||||||
$result = $commande->DispatchProduct($user, GETPOST($prod,'int'), GETPOST($qty), GETPOST($ent,'int'), GETPOST($pu), GETPOST("comment"), '', '', '', GETPOST($fk_commandefourndet, 'int'), $notrigger);
|
$result = $commande->DispatchProduct($user, GETPOST($prod,'int'), GETPOST($qty), GETPOST($ent,'int'), GETPOST($pu), GETPOST('comment'), '', '', '', GETPOST($fk_commandefourndet, 'int'), $notrigger);
|
||||||
if ($result < 0)
|
if ($result < 0)
|
||||||
{
|
{
|
||||||
setEventMessages($commande->error, $commande->errors, 'errors');
|
setEventMessages($commande->error, $commande->errors, 'errors');
|
||||||
@ -170,16 +170,17 @@ if ($action == 'dispatch' && $user->rights->fournisseur->commande->receptionner)
|
|||||||
//eat-by date dispatch
|
//eat-by date dispatch
|
||||||
//$numline=$reg[2] + 1; // line of product
|
//$numline=$reg[2] + 1; // line of product
|
||||||
$numline=$pos;
|
$numline=$pos;
|
||||||
$prod = "product_".$reg[1]."_".$reg[2];
|
$prod = 'product_'.$reg[1].'_'.$reg[2];
|
||||||
$qty = "qty_".$reg[1]."_".$reg[2];
|
$qty = 'qty_'.$reg[1].'_'.$reg[2];
|
||||||
$ent = "entrepot_".$reg[1]."_".$reg[2];
|
$ent = 'entrepot_'.$reg[1].'_'.$reg[2];
|
||||||
$pu = "pu_".$reg[1]."_".$reg[2];
|
$pu = 'pu_'.$reg[1].'_'.$reg[2];
|
||||||
$fk_commandefourndet = "fk_commandefourndet_".$reg[1]."_".$reg[2];
|
$fk_commandefourndet = 'fk_commandefourndet_'.$reg[1].'_'.$reg[2];
|
||||||
$lot = "lot_number_".$reg[1]."_".$reg[2];
|
$lot = 'lot_number_'.$reg[1].'_'.$reg[2];
|
||||||
$dDLUO = dol_mktime(12, 0, 0, $_POST['dluo_'.$reg[1]."_".$reg[2].'month'], $_POST['dluo_'.$reg[1]."_".$reg[2].'day'], $_POST['dluo_'.$reg[1]."_".$reg[2].'year']);
|
$dDLUO = dol_mktime(12, 0, 0, $_POST['dluo_'.$reg[1].'_'.$reg[2].'month'], $_POST['dluo_'.$reg[1].'_'.$reg[2].'day'], $_POST['dluo_'.$reg[1].'_'.$reg[2].'year']);
|
||||||
$dDLC = dol_mktime(12, 0, 0, $_POST['dlc_'.$reg[1]."_".$reg[2].'month'], $_POST['dlc_'.$reg[1]."_".$reg[2].'day'], $_POST['dlc_'.$reg[1]."_".$reg[2].'year']);
|
$dDLC = dol_mktime(12, 0, 0, $_POST['dlc_'.$reg[1].'_'.$reg[2].'month'], $_POST['dlc_'.$reg[1].'_'.$reg[2].'day'], $_POST['dlc_'.$reg[1].'_'.$reg[2].'year']);
|
||||||
|
|
||||||
$fk_commandefourndet = "fk_commandefourndet_".$reg[1]."_".$reg[2];
|
$fk_commandefourndet = 'fk_commandefourndet_'.$reg[1].'_'.$reg[2];
|
||||||
|
|
||||||
if (GETPOST($qty) > 0) // We ask to move a qty
|
if (GETPOST($qty) > 0) // We ask to move a qty
|
||||||
{
|
{
|
||||||
if (! (GETPOST($ent,'int') > 0))
|
if (! (GETPOST($ent,'int') > 0))
|
||||||
@ -200,7 +201,7 @@ if ($action == 'dispatch' && $user->rights->fournisseur->commande->receptionner)
|
|||||||
|
|
||||||
if (! $error)
|
if (! $error)
|
||||||
{
|
{
|
||||||
$result = $commande->dispatchProduct($user, GETPOST($prod,'int'), GETPOST($qty), GETPOST($ent,'int'), GETPOST($pu), GETPOST("comment"), $dDLC, $dDLUO, GETPOST($lot, 'alpha'), GETPOST($fk_commandefourndet, 'int'), $notrigger);
|
$result = $commande->dispatchProduct($user, GETPOST($prod,'int'), GETPOST($qty), GETPOST($ent,'int'), GETPOST($pu), GETPOST('comment'), $dDLC, $dDLUO, GETPOST($lot, 'alpha'), GETPOST($fk_commandefourndet, 'int'), $notrigger);
|
||||||
if ($result < 0)
|
if ($result < 0)
|
||||||
{
|
{
|
||||||
setEventMessages($commande->error, $commande->errors, 'errors');
|
setEventMessages($commande->error, $commande->errors, 'errors');
|
||||||
@ -225,7 +226,7 @@ if ($action == 'dispatch' && $user->rights->fournisseur->commande->receptionner)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($result > 0 && ! $error)
|
if ($result >= 0 && ! $error)
|
||||||
{
|
{
|
||||||
$db->commit();
|
$db->commit();
|
||||||
|
|
||||||
|
|||||||
2
htdocs/includes/jstz/jstz.min.js
vendored
Normal file
2
htdocs/includes/jstz/jstz.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -243,6 +243,7 @@ CREATE TABLE llx_expensereport (
|
|||||||
fk_user_paid integer DEFAULT NULL,
|
fk_user_paid integer DEFAULT NULL,
|
||||||
fk_statut integer NOT NULL, -- 1=brouillon, 2=validé (attente approb), 4=annulé, 5=approuvé, 6=payed, 99=refusé
|
fk_statut integer NOT NULL, -- 1=brouillon, 2=validé (attente approb), 4=annulé, 5=approuvé, 6=payed, 99=refusé
|
||||||
fk_c_paiement integer DEFAULT NULL,
|
fk_c_paiement integer DEFAULT NULL,
|
||||||
|
paid smallint default 0 NOT NULL,
|
||||||
note_public text,
|
note_public text,
|
||||||
note_private text,
|
note_private text,
|
||||||
detail_refuse varchar(255) DEFAULT NULL,
|
detail_refuse varchar(255) DEFAULT NULL,
|
||||||
@ -285,6 +286,22 @@ CREATE TABLE llx_expensereport_det
|
|||||||
ALTER TABLE llx_expensereport_det MODIFY COLUMN fk_projet integer NULL;
|
ALTER TABLE llx_expensereport_det MODIFY COLUMN fk_projet integer NULL;
|
||||||
ALTER TABLE llx_expensereport_det MODIFY COLUMN fk_c_tva integer NULL;
|
ALTER TABLE llx_expensereport_det MODIFY COLUMN fk_c_tva integer NULL;
|
||||||
|
|
||||||
|
create table llx_payment_expensereport
|
||||||
|
(
|
||||||
|
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
fk_expensereport integer,
|
||||||
|
datec datetime, -- date de creation
|
||||||
|
tms timestamp,
|
||||||
|
datep datetime, -- payment date
|
||||||
|
amount real DEFAULT 0,
|
||||||
|
fk_typepayment integer NOT NULL,
|
||||||
|
num_payment varchar(50),
|
||||||
|
note text,
|
||||||
|
fk_bank integer NOT NULL,
|
||||||
|
fk_user_creat integer, -- creation user
|
||||||
|
fk_user_modif integer -- last modification user
|
||||||
|
)ENGINE=innodb;
|
||||||
|
|
||||||
|
|
||||||
ALTER TABLE llx_projet ADD COLUMN budget_amount double(24,8);
|
ALTER TABLE llx_projet ADD COLUMN budget_amount double(24,8);
|
||||||
-- Alias names (commercial, trademark or alias names)
|
-- Alias names (commercial, trademark or alias names)
|
||||||
|
|||||||
@ -46,6 +46,7 @@ CREATE TABLE llx_expensereport (
|
|||||||
fk_user_paid integer DEFAULT NULL,
|
fk_user_paid integer DEFAULT NULL,
|
||||||
fk_statut integer NOT NULL, -- 1=brouillon, 2=validé (attente approb), 4=annulé, 5=approuvé, 6=payed, 99=refusé
|
fk_statut integer NOT NULL, -- 1=brouillon, 2=validé (attente approb), 4=annulé, 5=approuvé, 6=payed, 99=refusé
|
||||||
fk_c_paiement integer DEFAULT NULL,
|
fk_c_paiement integer DEFAULT NULL,
|
||||||
|
paid smallint default 0 NOT NULL,
|
||||||
note_public text,
|
note_public text,
|
||||||
note_private text,
|
note_private text,
|
||||||
detail_refuse varchar(255) DEFAULT NULL,
|
detail_refuse varchar(255) DEFAULT NULL,
|
||||||
|
|||||||
33
htdocs/install/mysql/tables/llx_payment_expensereport.sql
Normal file
33
htdocs/install/mysql/tables/llx_payment_expensereport.sql
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
-- ===================================================================
|
||||||
|
-- Copyright (C) 2015 Alexandre Spangaro <alexandre.spangaro@gmail.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 <http://www.gnu.org/licenses/>.
|
||||||
|
--
|
||||||
|
-- ===================================================================
|
||||||
|
|
||||||
|
create table llx_payment_expensereport
|
||||||
|
(
|
||||||
|
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
fk_expensereport integer,
|
||||||
|
datec datetime, -- date de creation
|
||||||
|
tms timestamp,
|
||||||
|
datep datetime, -- payment date
|
||||||
|
amount real DEFAULT 0,
|
||||||
|
fk_typepayment integer NOT NULL,
|
||||||
|
num_payment varchar(50),
|
||||||
|
note text,
|
||||||
|
fk_bank integer NOT NULL,
|
||||||
|
fk_user_creat integer, -- creation user
|
||||||
|
fk_user_modif integer -- last modification user
|
||||||
|
)ENGINE=innodb;
|
||||||
Loading…
Reference in New Issue
Block a user