Merge branch '12.0' of git@github.com:Dolibarr/dolibarr.git into develop
Conflicts: htdocs/compta/facture/class/facture.class.php
This commit is contained in:
commit
90d4458aab
@ -91,14 +91,15 @@ See the [ChangeLog](https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog)
|
|||||||
- Products and/or Services catalog
|
- Products and/or Services catalog
|
||||||
- Commercial proposals management
|
- Commercial proposals management
|
||||||
- Customer & Supplier Orders management
|
- Customer & Supplier Orders management
|
||||||
|
- Invoices and payment management
|
||||||
- Shipping management
|
- Shipping management
|
||||||
- Warehouse/Stock management
|
- Warehouse/Stock management
|
||||||
- Invoices and payment management
|
- Manufacturing Orders
|
||||||
- Standing orders management (European SEPA)
|
|
||||||
- Bank accounts management
|
- Bank accounts management
|
||||||
|
- Direct debit orders management (European SEPA)
|
||||||
- Accounting management
|
- Accounting management
|
||||||
- Shared calendar/agenda (with ical and vcal export for third party tools integration)
|
- Shared calendar/agenda (with ical and vcal export for third party tools integration)
|
||||||
- Opportunities and/or project management
|
- Opportunities or Leads management
|
||||||
- Projects & Tasks management
|
- Projects & Tasks management
|
||||||
- Contracts management
|
- Contracts management
|
||||||
- Interventions management
|
- Interventions management
|
||||||
|
|||||||
@ -5,7 +5,7 @@ File added into doxygen generated documentation
|
|||||||
|
|
||||||
|
|
||||||
<hr class="footer" />
|
<hr class="footer" />
|
||||||
<address class="footer"><small>Generated on $datetime for <a href="https://www.dolibarr.org">$projectname</a> by Doxygen $doxygenversion </small></address>
|
<address class="footer"><small>Generated on $datetime for <a href="https://www.dolibarr.org" title="ERP and CRM open source software">$projectname</a> by Doxygen $doxygenversion </small></address>
|
||||||
|
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
@ -22,31 +22,5 @@ File added into doxygen generated documentation
|
|||||||
gtag('config', 'UA-9049390-16');
|
gtag('config', 'UA-9049390-16');
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
<!-- Facebook Pixel Code -->
|
|
||||||
<script>
|
|
||||||
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
|
|
||||||
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
|
|
||||||
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
|
|
||||||
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
|
|
||||||
document,'script','//connect.facebook.net/en_US/fbevents.js');
|
|
||||||
|
|
||||||
fbq('init', '1998533953704960');
|
|
||||||
fbq('track', "PageView");</script>
|
|
||||||
<noscript><img height="1" width="1" style="display:none"
|
|
||||||
src="https://www.facebook.com/tr?id=1998533953704960&ev=PageView&noscript=1"
|
|
||||||
/></noscript>
|
|
||||||
<!-- End Facebook Pixel Code -->
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Twitter ad collector -->
|
|
||||||
<script src="//static.ads-twitter.com/oct.js" type="text/javascript"></script>
|
|
||||||
<script type="text/javascript">twttr.conversion.trackPid('ntm4n', { tw_sale_amount: 0, tw_order_quantity: 0 });</script>
|
|
||||||
<noscript>
|
|
||||||
<img height="1" width="1" style="display:none;" alt="" src="https://analytics.twitter.com/i/adsct?txn_id=ntm4n&p_id=Twitter&tw_sale_amount=0&tw_order_quantity=0" />
|
|
||||||
<img height="1" width="1" style="display:none;" alt="" src="//t.co/i/adsct?txn_id=ntm4n&p_id=Twitter&tw_sale_amount=0&tw_order_quantity=0" />
|
|
||||||
</noscript>
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -12,21 +12,6 @@
|
|||||||
<link href="tabs.css" rel="stylesheet" type="text/css" />
|
<link href="tabs.css" rel="stylesheet" type="text/css" />
|
||||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
<!-- End from dolibarr.org -->
|
<!-- End from dolibarr.org -->
|
||||||
|
|
||||||
<!-- Facebook Pixel Code -->
|
|
||||||
<script>
|
|
||||||
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
|
|
||||||
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
|
|
||||||
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
|
|
||||||
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
|
|
||||||
document,'script','//connect.facebook.net/en_US/fbevents.js');
|
|
||||||
|
|
||||||
fbq('init', '1998533953704960');
|
|
||||||
fbq('track', "PageView");</script>
|
|
||||||
<noscript><img height="1" width="1" style="display:none"
|
|
||||||
src="https://www.facebook.com/tr?id=1998533953704960&ev=PageView&noscript=1"
|
|
||||||
/></noscript>
|
|
||||||
<!-- End Facebook Pixel Code -->
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@ -48,15 +33,6 @@ src="https://www.facebook.com/tr?id=1998533953704960&ev=PageView&noscript=1"
|
|||||||
<div class="bannergroupmybanner">
|
<div class="bannergroupmybanner">
|
||||||
|
|
||||||
<div class="banneritemmybanner">
|
<div class="banneritemmybanner">
|
||||||
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
|
|
||||||
<!-- BAN_728x90_DOXYGEN -->
|
|
||||||
<ins class="adsbygoogle"
|
|
||||||
style="display:inline-block;width:728px;height:90px"
|
|
||||||
data-ad-client="ca-pub-1465985984238664"
|
|
||||||
data-ad-slot="4297390217"></ins>
|
|
||||||
<script>
|
|
||||||
(adsbygoogle = window.adsbygoogle || []).push({});
|
|
||||||
</script>
|
|
||||||
<div class="clr"></div>
|
<div class="clr"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -792,6 +792,7 @@ if ($action == 'create')
|
|||||||
}
|
}
|
||||||
setdatefields();
|
setdatefields();
|
||||||
$("#fullday").change(function() {
|
$("#fullday").change(function() {
|
||||||
|
console.log("setdatefields");
|
||||||
setdatefields();
|
setdatefields();
|
||||||
});
|
});
|
||||||
$("#selectcomplete").change(function() {
|
$("#selectcomplete").change(function() {
|
||||||
@ -846,9 +847,7 @@ if ($action == 'create')
|
|||||||
if (GETPOST('datep', 'int', 1)) $datep = dol_stringtotime(GETPOST('datep', 'int', 1), 0);
|
if (GETPOST('datep', 'int', 1)) $datep = dol_stringtotime(GETPOST('datep', 'int', 1), 0);
|
||||||
print '<tr><td class="nowrap"><span class="fieldrequired">'.$langs->trans("DateActionStart").'</span></td><td>';
|
print '<tr><td class="nowrap"><span class="fieldrequired">'.$langs->trans("DateActionStart").'</span></td><td>';
|
||||||
if (GETPOST("afaire") == 1) {
|
if (GETPOST("afaire") == 1) {
|
||||||
print $form->selectDate($datep, 'ap', 1, 1, 0, "action", 1, 2, 0, 'fulldayend');
|
print $form->selectDate($datep, 'ap', 1, 1, 0, "action", 1, 2, 0, 'fulldaystart'); // Empty value not allowed for start date and hours if "todo"
|
||||||
} elseif (GETPOST("afaire") == 2) {
|
|
||||||
print $form->selectDate($datep, 'ap', 1, 1, 1, "action", 1, 2, 0, 'fulldayend');
|
|
||||||
} else {
|
} else {
|
||||||
print $form->selectDate($datep, 'ap', 1, 1, 1, "action", 1, 2, 0, 'fulldaystart');
|
print $form->selectDate($datep, 'ap', 1, 1, 1, "action", 1, 2, 0, 'fulldaystart');
|
||||||
}
|
}
|
||||||
@ -863,11 +862,9 @@ if ($action == 'create')
|
|||||||
}
|
}
|
||||||
print '<tr><td><span id="dateend"'.(GETPOST("actioncode", 'aZ09') == 'AC_RDV' ? ' class="fieldrequired"' : '').'>'.$langs->trans("DateActionEnd").'</span></td><td>';
|
print '<tr><td><span id="dateend"'.(GETPOST("actioncode", 'aZ09') == 'AC_RDV' ? ' class="fieldrequired"' : '').'>'.$langs->trans("DateActionEnd").'</span></td><td>';
|
||||||
if (GETPOST("afaire") == 1) {
|
if (GETPOST("afaire") == 1) {
|
||||||
print $form->selectDate($datef, 'p2', 1, 1, 1, "action", 1, 1, 0, 'fulldayend');
|
print $form->selectDate($datef, 'p2', 1, 1, 1, "action", 1, 2, 0, 'fulldayend');
|
||||||
} elseif (GETPOST("afaire") == 2) {
|
|
||||||
print $form->selectDate($datef, 'p2', 1, 1, 1, "action", 1, 1, 0, 'fulldayend');
|
|
||||||
} else {
|
} else {
|
||||||
print $form->selectDate($datef, 'p2', 1, 1, 1, "action", 1, 1, 0, 'fulldayend');
|
print $form->selectDate($datef, 'p2', 1, 1, 1, "action", 1, 2, 0, 'fulldayend');
|
||||||
}
|
}
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
|
|
||||||
|
|||||||
@ -1356,6 +1356,8 @@ class Account extends CommonObject
|
|||||||
$label = '<u>'.$langs->trans("BankAccount").'</u>';
|
$label = '<u>'.$langs->trans("BankAccount").'</u>';
|
||||||
$label .= '<br><b>'.$langs->trans('Label').':</b> '.$this->label;
|
$label .= '<br><b>'.$langs->trans('Label').':</b> '.$this->label;
|
||||||
$label .= '<br><b>'.$langs->trans('AccountNumber').':</b> '.$this->number;
|
$label .= '<br><b>'.$langs->trans('AccountNumber').':</b> '.$this->number;
|
||||||
|
$label .= '<br><b>'.$langs->trans('IBAN').':</b> '.$this->iban;
|
||||||
|
$label .= '<br><b>'.$langs->trans('BIC').':</b> '.$this->bic;
|
||||||
$label .= '<br><b>'.$langs->trans("AccountCurrency").':</b> '.$this->currency_code;
|
$label .= '<br><b>'.$langs->trans("AccountCurrency").':</b> '.$this->currency_code;
|
||||||
|
|
||||||
if (empty($user->rights->banque->lire) || !empty($user->socid))
|
if (empty($user->rights->banque->lire) || !empty($user->socid))
|
||||||
|
|||||||
@ -3979,151 +3979,6 @@ class Facture extends CommonInvoice
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
|
||||||
/**
|
|
||||||
* Create a withdrawal request for a direct debit order or a credit transfer order.
|
|
||||||
* Use the remain to pay excluding all existing open direct debit requests.
|
|
||||||
*
|
|
||||||
* @param User $fuser User asking the direct debit transfer
|
|
||||||
* @param float $amount Amount we request direct debit for
|
|
||||||
* @param string $type 'direct-debit' or 'bank-transfer'
|
|
||||||
* @param string $sourcetype Source ('facture' or 'supplier_invoice')
|
|
||||||
* @return int <0 if KO, >0 if OK
|
|
||||||
*/
|
|
||||||
public function demande_prelevement($fuser, $amount = 0, $type = 'direct-debit', $sourcetype = 'facture')
|
|
||||||
{
|
|
||||||
// phpcs:enable
|
|
||||||
global $conf;
|
|
||||||
|
|
||||||
$error = 0;
|
|
||||||
|
|
||||||
dol_syslog(get_class($this)."::demande_prelevement", LOG_DEBUG);
|
|
||||||
|
|
||||||
if ($this->statut > self::STATUS_DRAFT && $this->paye == 0)
|
|
||||||
{
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/societe/class/companybankaccount.class.php';
|
|
||||||
$bac = new CompanyBankAccount($this->db);
|
|
||||||
$bac->fetch(0, $this->socid);
|
|
||||||
|
|
||||||
$sql = 'SELECT count(*)';
|
|
||||||
$sql .= ' FROM '.MAIN_DB_PREFIX.'prelevement_facture_demande';
|
|
||||||
if ($type == 'bank-transfer') {
|
|
||||||
$sql .= ' WHERE fk_facture_fourn = '.$this->id;
|
|
||||||
} else {
|
|
||||||
$sql .= ' WHERE fk_facture = '.$this->id;
|
|
||||||
}
|
|
||||||
$sql .= ' AND ext_payment_id IS NULL'; // To exclude record done for some online payments
|
|
||||||
$sql .= ' AND traite = 0';
|
|
||||||
|
|
||||||
dol_syslog(get_class($this)."::demande_prelevement", LOG_DEBUG);
|
|
||||||
$resql = $this->db->query($sql);
|
|
||||||
if ($resql)
|
|
||||||
{
|
|
||||||
$row = $this->db->fetch_row($resql);
|
|
||||||
if ($row[0] == 0)
|
|
||||||
{
|
|
||||||
$now = dol_now();
|
|
||||||
|
|
||||||
$totalpaye = $this->getSommePaiement();
|
|
||||||
$totalcreditnotes = $this->getSumCreditNotesUsed();
|
|
||||||
$totaldeposits = $this->getSumDepositsUsed();
|
|
||||||
//print "totalpaye=".$totalpaye." totalcreditnotes=".$totalcreditnotes." totaldeposts=".$totaldeposits;
|
|
||||||
|
|
||||||
// We can also use bcadd to avoid pb with floating points
|
|
||||||
// For example print 239.2 - 229.3 - 9.9; does not return 0.
|
|
||||||
//$resteapayer=bcadd($this->total_ttc,$totalpaye,$conf->global->MAIN_MAX_DECIMALS_TOT);
|
|
||||||
//$resteapayer=bcadd($resteapayer,$totalavoir,$conf->global->MAIN_MAX_DECIMALS_TOT);
|
|
||||||
if (empty($amount)) $amount = price2num($this->total_ttc - $totalpaye - $totalcreditnotes - $totaldeposits, 'MT');
|
|
||||||
|
|
||||||
if (is_numeric($amount) && $amount != 0)
|
|
||||||
{
|
|
||||||
$sql = 'INSERT INTO '.MAIN_DB_PREFIX.'prelevement_facture_demande(';
|
|
||||||
if ($type == 'bank-transfer') {
|
|
||||||
$sql .= 'fk_facture_fourn, ';
|
|
||||||
} else {
|
|
||||||
$sql .= 'fk_facture, ';
|
|
||||||
}
|
|
||||||
$sql .= ' amount, date_demande, fk_user_demande, code_banque, code_guichet, number, cle_rib, sourcetype, entity)';
|
|
||||||
$sql .= ' VALUES ('.$this->id;
|
|
||||||
$sql .= ",'".price2num($amount)."'";
|
|
||||||
$sql .= ",'".$this->db->idate($now)."'";
|
|
||||||
$sql .= ",".$fuser->id;
|
|
||||||
$sql .= ",'".$this->db->escape($bac->code_banque)."'";
|
|
||||||
$sql .= ",'".$this->db->escape($bac->code_guichet)."'";
|
|
||||||
$sql .= ",'".$this->db->escape($bac->number)."'";
|
|
||||||
$sql .= ",'".$this->db->escape($bac->cle_rib)."'";
|
|
||||||
$sql .= ",'".$this->db->escape($sourcetype)."'";
|
|
||||||
$sql .= ",".$conf->entity;
|
|
||||||
$sql .= ")";
|
|
||||||
|
|
||||||
dol_syslog(get_class($this)."::demande_prelevement", LOG_DEBUG);
|
|
||||||
$resql = $this->db->query($sql);
|
|
||||||
if (!$resql)
|
|
||||||
{
|
|
||||||
$this->error = $this->db->lasterror();
|
|
||||||
dol_syslog(get_class($this).'::demandeprelevement Erreur');
|
|
||||||
$error++;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$this->error = 'WithdrawRequestErrorNilAmount';
|
|
||||||
dol_syslog(get_class($this).'::demandeprelevement WithdrawRequestErrorNilAmount');
|
|
||||||
$error++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$error)
|
|
||||||
{
|
|
||||||
// Force payment mode of invoice to withdraw
|
|
||||||
$payment_mode_id = dol_getIdFromCode($this->db, 'PRE', 'c_paiement', 'code', 'id', 1);
|
|
||||||
if ($payment_mode_id > 0)
|
|
||||||
{
|
|
||||||
$result = $this->setPaymentMethods($payment_mode_id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($error) return -1;
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
$this->error = "A request already exists";
|
|
||||||
dol_syslog(get_class($this).'::demandeprelevement Impossible de creer une demande, demande deja en cours');
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$this->error = $this->db->error();
|
|
||||||
dol_syslog(get_class($this).'::demandeprelevement Erreur -2');
|
|
||||||
return -2;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$this->error = "Status of invoice does not allow this";
|
|
||||||
dol_syslog(get_class($this)."::demandeprelevement ".$this->error." $this->statut, $this->paye, $this->mode_reglement_id");
|
|
||||||
return -3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
|
||||||
/**
|
|
||||||
* Supprime une demande de prelevement
|
|
||||||
*
|
|
||||||
* @param User $fuser User making delete
|
|
||||||
* @param int $did id de la demande a supprimer
|
|
||||||
* @return int <0 if OK, >0 if KO
|
|
||||||
*/
|
|
||||||
public function demande_prelevement_delete($fuser, $did)
|
|
||||||
{
|
|
||||||
// phpcs:enable
|
|
||||||
$sql = 'DELETE FROM '.MAIN_DB_PREFIX.'prelevement_facture_demande';
|
|
||||||
$sql .= ' WHERE rowid = '.$did;
|
|
||||||
$sql .= ' AND traite = 0';
|
|
||||||
if ($this->db->query($sql))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
$this->error = $this->db->lasterror();
|
|
||||||
dol_syslog(get_class($this).'::demande_prelevement_delete Error '.$this->error);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||||
/**
|
/**
|
||||||
* Load indicators for dashboard (this->nbtodo and this->nbtodolate)
|
* Load indicators for dashboard (this->nbtodo and this->nbtodolate)
|
||||||
|
|||||||
@ -112,12 +112,12 @@ if (empty($reshook))
|
|||||||
|
|
||||||
if ($action == "delete")
|
if ($action == "delete")
|
||||||
{
|
{
|
||||||
if ($object->id > 0)
|
if ($object->id > 0)
|
||||||
{
|
{
|
||||||
$result = $object->demande_prelevement_delete($user, GETPOST('did', 'int'));
|
$result = $object->demande_prelevement_delete($user, GETPOST('did', 'int'));
|
||||||
if ($result == 0)
|
if ($result == 0)
|
||||||
{
|
{
|
||||||
header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
|
header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id.'&mode='.$mode);
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -469,13 +469,21 @@ if ($object->id > 0)
|
|||||||
print "</td>";
|
print "</td>";
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|
||||||
print '<tr><td>'.$langs->trans("RIB").'</td><td colspan="3">';
|
$title = 'CustomerIBAN';
|
||||||
|
if ($mode == 'bank-transfer') {
|
||||||
|
$title = 'SupplierIBAN';
|
||||||
|
}
|
||||||
|
print '<tr><td>'.$langs->trans($title).'</td><td colspan="3">';
|
||||||
|
|
||||||
$bac = new CompanyBankAccount($db);
|
$bac = new CompanyBankAccount($db);
|
||||||
$bac->fetch(0, $object->thirdparty->id);
|
$bac->fetch(0, $object->thirdparty->id);
|
||||||
|
|
||||||
print $bac->iban.(($bac->iban && $bac->bic) ? ' / ' : '').$bac->bic;
|
print $bac->iban.(($bac->iban && $bac->bic) ? ' / ' : '').$bac->bic;
|
||||||
if ($bac->verif() <= 0) print img_warning('Error on default bank number for IBAN : '.$bac->error_message);
|
if (!empty($bac->iban)) {
|
||||||
|
if ($bac->verif() <= 0) print img_warning('Error on default bank number for IBAN : '.$bac->error_message);
|
||||||
|
} else {
|
||||||
|
print img_warning($langs->trans("NoDefaultIBANFound"));
|
||||||
|
}
|
||||||
|
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
|
|
||||||
@ -714,7 +722,7 @@ if ($object->id > 0)
|
|||||||
$obj = $db->fetch_object($result_sql);
|
$obj = $db->fetch_object($result_sql);
|
||||||
|
|
||||||
print '<tr class="oddeven">';
|
print '<tr class="oddeven">';
|
||||||
print '<td class="left">'.dol_print_date($db->jdate($obj->date_demande), 'day')."</td>\n";
|
print '<td class="left">'.dol_print_date($db->jdate($obj->date_demande), 'dayhour')."</td>\n";
|
||||||
print '<td align="center"><a href="'.DOL_URL_ROOT.'/user/card.php?id='.$obj->user_id.'">'.img_object($langs->trans("ShowUser"), 'user').' '.$obj->login.'</a></td>';
|
print '<td align="center"><a href="'.DOL_URL_ROOT.'/user/card.php?id='.$obj->user_id.'">'.img_object($langs->trans("ShowUser"), 'user').' '.$obj->login.'</a></td>';
|
||||||
print '<td class="center">'.price($obj->amount).'</td>';
|
print '<td class="center">'.price($obj->amount).'</td>';
|
||||||
print '<td align="center">-</td>';
|
print '<td align="center">-</td>';
|
||||||
@ -723,7 +731,7 @@ if ($object->id > 0)
|
|||||||
print '<td class="center">'.$langs->trans("OrderWaiting").'</td>';
|
print '<td class="center">'.$langs->trans("OrderWaiting").'</td>';
|
||||||
|
|
||||||
print '<td class="right">';
|
print '<td class="right">';
|
||||||
print '<a href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=delete&did='.$obj->rowid.'">';
|
print '<a href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=delete&did='.$obj->rowid.'&mode='.$mode.'">';
|
||||||
print img_delete();
|
print img_delete();
|
||||||
print '</a></td>';
|
print '</a></td>';
|
||||||
|
|
||||||
|
|||||||
@ -652,6 +652,160 @@ abstract class CommonInvoice extends CommonObject
|
|||||||
|
|
||||||
return $datelim;
|
return $datelim;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||||
|
/**
|
||||||
|
* Create a withdrawal request for a direct debit order or a credit transfer order.
|
||||||
|
* Use the remain to pay excluding all existing open direct debit requests.
|
||||||
|
*
|
||||||
|
* @param User $fuser User asking the direct debit transfer
|
||||||
|
* @param float $amount Amount we request direct debit for
|
||||||
|
* @param string $type 'direct-debit' or 'bank-transfer'
|
||||||
|
* @param string $sourcetype Source ('facture' or 'supplier_invoice')
|
||||||
|
* @return int <0 if KO, >0 if OK
|
||||||
|
*/
|
||||||
|
public function demande_prelevement($fuser, $amount = 0, $type = 'direct-debit', $sourcetype = 'facture')
|
||||||
|
{
|
||||||
|
// phpcs:enable
|
||||||
|
global $conf;
|
||||||
|
|
||||||
|
$error = 0;
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::demande_prelevement", LOG_DEBUG);
|
||||||
|
|
||||||
|
if ($this->statut > self::STATUS_DRAFT && $this->paye == 0)
|
||||||
|
{
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/societe/class/companybankaccount.class.php';
|
||||||
|
$bac = new CompanyBankAccount($this->db);
|
||||||
|
$bac->fetch(0, $this->socid);
|
||||||
|
|
||||||
|
$sql = 'SELECT count(*)';
|
||||||
|
$sql .= ' FROM '.MAIN_DB_PREFIX.'prelevement_facture_demande';
|
||||||
|
if ($type == 'bank-transfer') {
|
||||||
|
$sql .= ' WHERE fk_facture_fourn = '.$this->id;
|
||||||
|
} else {
|
||||||
|
$sql .= ' WHERE fk_facture = '.$this->id;
|
||||||
|
}
|
||||||
|
$sql .= ' AND ext_payment_id IS NULL'; // To exclude record done for some online payments
|
||||||
|
$sql .= ' AND traite = 0';
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::demande_prelevement", LOG_DEBUG);
|
||||||
|
$resql = $this->db->query($sql);
|
||||||
|
if ($resql)
|
||||||
|
{
|
||||||
|
$row = $this->db->fetch_row($resql);
|
||||||
|
if ($row[0] == 0)
|
||||||
|
{
|
||||||
|
$now = dol_now();
|
||||||
|
|
||||||
|
$totalpaye = $this->getSommePaiement();
|
||||||
|
$totalcreditnotes = $this->getSumCreditNotesUsed();
|
||||||
|
$totaldeposits = $this->getSumDepositsUsed();
|
||||||
|
//print "totalpaye=".$totalpaye." totalcreditnotes=".$totalcreditnotes." totaldeposts=".$totaldeposits;
|
||||||
|
|
||||||
|
// We can also use bcadd to avoid pb with floating points
|
||||||
|
// For example print 239.2 - 229.3 - 9.9; does not return 0.
|
||||||
|
//$resteapayer=bcadd($this->total_ttc,$totalpaye,$conf->global->MAIN_MAX_DECIMALS_TOT);
|
||||||
|
//$resteapayer=bcadd($resteapayer,$totalavoir,$conf->global->MAIN_MAX_DECIMALS_TOT);
|
||||||
|
if (empty($amount)) $amount = price2num($this->total_ttc - $totalpaye - $totalcreditnotes - $totaldeposits, 'MT');
|
||||||
|
|
||||||
|
if (is_numeric($amount) && $amount != 0)
|
||||||
|
{
|
||||||
|
$sql = 'INSERT INTO '.MAIN_DB_PREFIX.'prelevement_facture_demande(';
|
||||||
|
if ($type == 'bank-transfer') {
|
||||||
|
$sql .= 'fk_facture_fourn, ';
|
||||||
|
} else {
|
||||||
|
$sql .= 'fk_facture, ';
|
||||||
|
}
|
||||||
|
$sql .= ' amount, date_demande, fk_user_demande, code_banque, code_guichet, number, cle_rib, sourcetype, entity)';
|
||||||
|
$sql .= ' VALUES ('.$this->id;
|
||||||
|
$sql .= ",'".price2num($amount)."'";
|
||||||
|
$sql .= ",'".$this->db->idate($now)."'";
|
||||||
|
$sql .= ",".$fuser->id;
|
||||||
|
$sql .= ",'".$this->db->escape($bac->code_banque)."'";
|
||||||
|
$sql .= ",'".$this->db->escape($bac->code_guichet)."'";
|
||||||
|
$sql .= ",'".$this->db->escape($bac->number)."'";
|
||||||
|
$sql .= ",'".$this->db->escape($bac->cle_rib)."'";
|
||||||
|
$sql .= ",'".$this->db->escape($sourcetype)."'";
|
||||||
|
$sql .= ",".$conf->entity;
|
||||||
|
$sql .= ")";
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::demande_prelevement", LOG_DEBUG);
|
||||||
|
$resql = $this->db->query($sql);
|
||||||
|
if (!$resql)
|
||||||
|
{
|
||||||
|
$this->error = $this->db->lasterror();
|
||||||
|
dol_syslog(get_class($this).'::demandeprelevement Erreur');
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->error = 'WithdrawRequestErrorNilAmount';
|
||||||
|
dol_syslog(get_class($this).'::demandeprelevement WithdrawRequestErrorNilAmount');
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$error)
|
||||||
|
{
|
||||||
|
// Force payment mode of invoice to withdraw
|
||||||
|
$payment_mode_id = dol_getIdFromCode($this->db, 'PRE', 'c_paiement', 'code', 'id', 1);
|
||||||
|
if ($payment_mode_id > 0)
|
||||||
|
{
|
||||||
|
$result = $this->setPaymentMethods($payment_mode_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($error) return -1;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->error = "A request already exists";
|
||||||
|
dol_syslog(get_class($this).'::demandeprelevement Impossible de creer une demande, demande deja en cours');
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->error = $this->db->error();
|
||||||
|
dol_syslog(get_class($this).'::demandeprelevement Erreur -2');
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->error = "Status of invoice does not allow this";
|
||||||
|
dol_syslog(get_class($this)."::demandeprelevement ".$this->error." $this->statut, $this->paye, $this->mode_reglement_id");
|
||||||
|
return -3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||||
|
/**
|
||||||
|
* Remove a direct debit request or a credit transfer request
|
||||||
|
*
|
||||||
|
* @param User $fuser User making delete
|
||||||
|
* @param int $did ID of request to delete
|
||||||
|
* @return int <0 if OK, >0 if KO
|
||||||
|
*/
|
||||||
|
public function demande_prelevement_delete($fuser, $did)
|
||||||
|
{
|
||||||
|
// phpcs:enable
|
||||||
|
$sql = 'DELETE FROM '.MAIN_DB_PREFIX.'prelevement_facture_demande';
|
||||||
|
$sql .= ' WHERE rowid = '.$did;
|
||||||
|
$sql .= ' AND traite = 0';
|
||||||
|
if ($this->db->query($sql))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->error = $this->db->lasterror();
|
||||||
|
dol_syslog(get_class($this).'::demande_prelevement_delete Error '.$this->error);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1127,7 +1127,7 @@ class DolGraph
|
|||||||
foreach ($legends as $val) // Loop on each serie
|
foreach ($legends as $val) // Loop on each serie
|
||||||
{
|
{
|
||||||
if ($i > 0) $this->stringtoshow .= ', ';
|
if ($i > 0) $this->stringtoshow .= ', ';
|
||||||
$this->stringtoshow .= "'".$val."'";
|
$this->stringtoshow .= "'".dol_escape_js(dol_trunc($val,32))."'";
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1189,7 +1189,7 @@ class DolGraph
|
|||||||
foreach ($legends as $val) // Loop on each serie
|
foreach ($legends as $val) // Loop on each serie
|
||||||
{
|
{
|
||||||
if ($i > 0) $this->stringtoshow .= ', ';
|
if ($i > 0) $this->stringtoshow .= ', ';
|
||||||
$this->stringtoshow .= "'".$val."'";
|
$this->stringtoshow .= "'".dol_escape_js(dol_trunc($val,32))."'";
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -5545,10 +5545,17 @@ class Form
|
|||||||
$reset_scripts .= 'jQuery(\'#'.$prefix.'year\').val(\''.dol_print_date(dol_now(), '%Y', 'tzuser').'\');';
|
$reset_scripts .= 'jQuery(\'#'.$prefix.'year\').val(\''.dol_print_date(dol_now(), '%Y', 'tzuser').'\');';
|
||||||
} elseif ($addnowlink == 2)
|
} elseif ($addnowlink == 2)
|
||||||
{
|
{
|
||||||
|
/* Disabled because the output does not use the string format defined by FormatDateShort key to forge the value into #prefix.
|
||||||
|
* This break application for foreign languages.
|
||||||
$reset_scripts .= 'jQuery(\'#'.$prefix.'\').val(d.toLocaleDateString(\''.str_replace('_', '-', $langs->defaultlang).'\'));';
|
$reset_scripts .= 'jQuery(\'#'.$prefix.'\').val(d.toLocaleDateString(\''.str_replace('_', '-', $langs->defaultlang).'\'));';
|
||||||
$reset_scripts .= 'jQuery(\'#'.$prefix.'day\').val(d.getDate().pad());';
|
$reset_scripts .= 'jQuery(\'#'.$prefix.'day\').val(d.getDate().pad());';
|
||||||
$reset_scripts .= 'jQuery(\'#'.$prefix.'month\').val(parseInt(d.getMonth().pad()) + 1);';
|
$reset_scripts .= 'jQuery(\'#'.$prefix.'month\').val(parseInt(d.getMonth().pad()) + 1);';
|
||||||
$reset_scripts .= 'jQuery(\'#'.$prefix.'year\').val(d.getFullYear());';
|
$reset_scripts .= 'jQuery(\'#'.$prefix.'year\').val(d.getFullYear());';
|
||||||
|
*/
|
||||||
|
$reset_scripts .= 'jQuery(\'#'.$prefix.'\').val(\''.dol_print_date(dol_now(), 'day', 'tzuser').'\');';
|
||||||
|
$reset_scripts .= 'jQuery(\'#'.$prefix.'day\').val(\''.dol_print_date(dol_now(), '%d', 'tzuser').'\');';
|
||||||
|
$reset_scripts .= 'jQuery(\'#'.$prefix.'month\').val(\''.dol_print_date(dol_now(), '%m', 'tzuser').'\');';
|
||||||
|
$reset_scripts .= 'jQuery(\'#'.$prefix.'year\').val(\''.dol_print_date(dol_now(), '%Y', 'tzuser').'\');';
|
||||||
}
|
}
|
||||||
/*if ($usecalendar == "eldy")
|
/*if ($usecalendar == "eldy")
|
||||||
{
|
{
|
||||||
|
|||||||
@ -543,7 +543,7 @@ Module54Desc=Správa smluv (služby nebo opakované předplatné)
|
|||||||
Module55Name=Čárové kódy
|
Module55Name=Čárové kódy
|
||||||
Module55Desc=Správa čárových kódů
|
Module55Desc=Správa čárových kódů
|
||||||
Module56Name=Platba převodem
|
Module56Name=Platba převodem
|
||||||
Module56Desc=Správa plateb prostřednictvím příkazů k úhradě. Zahrnuje vytvoření souboru SEPA pro evropské země.
|
Module56Desc=Management of payment of suppliers by credit transfer orders. It includes generation of SEPA file for European countries.
|
||||||
Module57Name=Bank Direct Debit platby
|
Module57Name=Bank Direct Debit platby
|
||||||
Module57Desc=Správa platebních příkazů inkasních příkazů. Zahrnuje generování souboru SEPA pro evropské země.
|
Module57Desc=Správa platebních příkazů inkasních příkazů. Zahrnuje generování souboru SEPA pro evropské země.
|
||||||
Module58Name=ClickToDial
|
Module58Name=ClickToDial
|
||||||
@ -1983,7 +1983,7 @@ SmallerThan=Menší než
|
|||||||
LargerThan=Větší než
|
LargerThan=Větší než
|
||||||
IfTrackingIDFoundEventWillBeLinked=Všimněte si, že je-li ID ID nalezeno v příchozím e-mailu, bude událost automaticky propojena s příslušnými objekty.
|
IfTrackingIDFoundEventWillBeLinked=Všimněte si, že je-li ID ID nalezeno v příchozím e-mailu, bude událost automaticky propojena s příslušnými objekty.
|
||||||
WithGMailYouCanCreateADedicatedPassword=Pokud jste s účtem GMail povolili ověření ve 2 - dvou krocích, doporučuje se pro aplikaci vytvořit vyhrazené druhé heslo namísto použití hesla pro vlastní účet z adresy https://myaccount.google.com/.
|
WithGMailYouCanCreateADedicatedPassword=Pokud jste s účtem GMail povolili ověření ve 2 - dvou krocích, doporučuje se pro aplikaci vytvořit vyhrazené druhé heslo namísto použití hesla pro vlastní účet z adresy https://myaccount.google.com/.
|
||||||
EmailCollectorTargetDir=Po úspěšném zpracování může být žádoucí chování při přesunu e-mailu do jiné značky / adresáře. Chcete-li tuto funkci použít, nastavte zde hodnotu. Musíte také použít přihlašovací účet pro čtení a zápis.
|
EmailCollectorTargetDir=It may be a desired behaviour to move the email into another tag/directory when it was processed successfully. Just set name of directory here to use this feature (Do NOT use special characters in name). Note that you must also use a read/write login account.
|
||||||
EmailCollectorLoadThirdPartyHelp=Pomocí této akce můžete pomocí obsahu e-mailu najít a načíst existující třetí stranu ve vaší databázi. Nalezená (nebo vytvořená) třetí strana bude použita pro následující akce, které ji potřebují. V poli parametrů můžete použít například 'EXTRACT: BODY: Name: \\ s ([^ \\ s] *)', pokud chcete extrahovat jméno třetí strany z řetězce 'Name: name to find' nalezeného do tělo.
|
EmailCollectorLoadThirdPartyHelp=Pomocí této akce můžete pomocí obsahu e-mailu najít a načíst existující třetí stranu ve vaší databázi. Nalezená (nebo vytvořená) třetí strana bude použita pro následující akce, které ji potřebují. V poli parametrů můžete použít například 'EXTRACT: BODY: Name: \\ s ([^ \\ s] *)', pokud chcete extrahovat jméno třetí strany z řetězce 'Name: name to find' nalezeného do tělo.
|
||||||
EndPointFor=Koncový bod pro %s: %s
|
EndPointFor=Koncový bod pro %s: %s
|
||||||
DeleteEmailCollector=Smazat sběratele e-mailu
|
DeleteEmailCollector=Smazat sběratele e-mailu
|
||||||
|
|||||||
@ -63,6 +63,7 @@ ShipmentClassifyClosedInDolibarr=Zásilka %s klasifikováno účtoval
|
|||||||
ShipmentUnClassifyCloseddInDolibarr=Zásilka %s byla znovu otevřena
|
ShipmentUnClassifyCloseddInDolibarr=Zásilka %s byla znovu otevřena
|
||||||
ShipmentBackToDraftInDolibarr=Doprava %s se vrátí zpět na stav konceptu
|
ShipmentBackToDraftInDolibarr=Doprava %s se vrátí zpět na stav konceptu
|
||||||
ShipmentDeletedInDolibarr=Doprava %s odstraněna
|
ShipmentDeletedInDolibarr=Doprava %s odstraněna
|
||||||
|
ReceptionValidatedInDolibarr=Reception %s validated
|
||||||
OrderCreatedInDolibarr=Objednat %s vytvořil
|
OrderCreatedInDolibarr=Objednat %s vytvořil
|
||||||
OrderValidatedInDolibarr=Objednávka %s ověřena
|
OrderValidatedInDolibarr=Objednávka %s ověřena
|
||||||
OrderDeliveredInDolibarr=Objednávka %s označena jako dodaná
|
OrderDeliveredInDolibarr=Objednávka %s označena jako dodaná
|
||||||
|
|||||||
@ -8,21 +8,21 @@ FONTFORPDF=helvetica
|
|||||||
FONTSIZEFORPDF=10
|
FONTSIZEFORPDF=10
|
||||||
SeparatorDecimal=,
|
SeparatorDecimal=,
|
||||||
SeparatorThousand=Space
|
SeparatorThousand=Space
|
||||||
FormatDateShort=%m/%d/%Y
|
FormatDateShort=%d.%m.%Y
|
||||||
FormatDateShortInput=%m/%d/%Yr
|
FormatDateShortInput=%d.%m.%Y
|
||||||
FormatDateShortJava=MM/dd/yyyy
|
FormatDateShortJava=dd.MM.yyyy
|
||||||
FormatDateShortJavaInput=MM/dd/yyyy
|
FormatDateShortJavaInput=dd.MM.yyyy
|
||||||
FormatDateShortJQuery=mm/dd/yy
|
FormatDateShortJQuery=dd.mm.yy
|
||||||
FormatDateShortJQueryInput=mm/dd/yy
|
FormatDateShortJQueryInput=dd.mm.yy
|
||||||
FormatHourShortJQuery=HH:MI
|
FormatHourShortJQuery=HH:MI
|
||||||
FormatHourShort=%I:%M %p
|
FormatHourShort=%H:%M
|
||||||
FormatHourShortDuration=%H:%M
|
FormatHourShortDuration=%H:%M
|
||||||
FormatDateTextShort=%b %d, %Y
|
FormatDateTextShort=%b %d, %Y
|
||||||
FormatDateText=%B %d, %Y
|
FormatDateText=%B %d, %Y
|
||||||
FormatDateHourShort=%m/%d/%Y %I:%M %p
|
FormatDateHourShort=%d.%m.%Y %H.%M
|
||||||
FormatDateHourSecShort=%m/%d/%Y %I:%M:%S %p
|
FormatDateHourSecShort=%d.%m.%Y %H.%M.%S
|
||||||
FormatDateHourTextShort=%b %d, %Y, %I:%M %p
|
FormatDateHourTextShort=%b %d, %Y, %H.%M
|
||||||
FormatDateHourText=%B %d, %Y, %I:%M %p
|
FormatDateHourText=%B %d, %Y, %H.%M
|
||||||
DatabaseConnection=Připojení k databázi
|
DatabaseConnection=Připojení k databázi
|
||||||
NoTemplateDefined=Pro tento typ e-mailu není k dispozici žádná šablona
|
NoTemplateDefined=Pro tento typ e-mailu není k dispozici žádná šablona
|
||||||
AvailableVariables=K dispozici substituční proměnné
|
AvailableVariables=K dispozici substituční proměnné
|
||||||
|
|||||||
@ -441,6 +441,8 @@ BankAccountNumberKey=Checksum
|
|||||||
Residence=Address
|
Residence=Address
|
||||||
IBANNumber=IBAN account number
|
IBANNumber=IBAN account number
|
||||||
IBAN=IBAN
|
IBAN=IBAN
|
||||||
|
CustomerIBAN=IBAN of customer
|
||||||
|
SupplierIBAN=IBAN of vendor
|
||||||
BIC=BIC/SWIFT
|
BIC=BIC/SWIFT
|
||||||
BICNumber=BIC/SWIFT code
|
BICNumber=BIC/SWIFT code
|
||||||
ExtraInfos=Extra infos
|
ExtraInfos=Extra infos
|
||||||
|
|||||||
@ -131,7 +131,7 @@ ICS=Creditor Identifier CI
|
|||||||
END_TO_END="EndToEndId" SEPA XML tag - Unique id assigned per transaction
|
END_TO_END="EndToEndId" SEPA XML tag - Unique id assigned per transaction
|
||||||
USTRD="Unstructured" SEPA XML tag
|
USTRD="Unstructured" SEPA XML tag
|
||||||
ADDDAYS=Add days to Execution Date
|
ADDDAYS=Add days to Execution Date
|
||||||
|
NoDefaultIBANFound=No default IBAN found for this third party
|
||||||
### Notifications
|
### Notifications
|
||||||
InfoCreditSubject=Payment of direct debit payment order %s by the bank
|
InfoCreditSubject=Payment of direct debit payment order %s by the bank
|
||||||
InfoCreditMessage=The direct debit payment order %s has been paid by the bank<br>Data of payment: %s
|
InfoCreditMessage=The direct debit payment order %s has been paid by the bank<br>Data of payment: %s
|
||||||
|
|||||||
@ -166,17 +166,16 @@ if ((!empty($conf->product->enabled) || !empty($conf->service->enabled)) && ($us
|
|||||||
$dataseries = array();
|
$dataseries = array();
|
||||||
if (!empty($conf->product->enabled))
|
if (!empty($conf->product->enabled))
|
||||||
{
|
{
|
||||||
$dataseries[] = array($langs->trans("ProductsOnSale"), round($SommeA));
|
$dataseries[] = array($langs->transnoentitiesnoconv("ProductsOnSale"), round($SommeA));
|
||||||
$dataseries[] = array($langs->trans("ProductsOnPurchase"), round($SommeB));
|
$dataseries[] = array($langs->transnoentitiesnoconv("ProductsOnPurchase"), round($SommeB));
|
||||||
$dataseries[] = array($langs->trans("ProductsNotOnSell"), round($SommeC));
|
$dataseries[] = array($langs->transnoentitiesnoconv("ProductsNotOnSell"), round($SommeC));
|
||||||
}
|
}
|
||||||
if (!empty($conf->service->enabled))
|
if (!empty($conf->service->enabled))
|
||||||
{
|
{
|
||||||
$dataseries[] = array($langs->trans("ServicesOnSale"), round($SommeD));
|
$dataseries[] = array($langs->transnoentitiesnoconv("ServicesOnSale"), round($SommeD));
|
||||||
$dataseries[] = array($langs->trans("ServicesOnPurchase"), round($SommeE));
|
$dataseries[] = array($langs->transnoentitiesnoconv("ServicesOnPurchase"), round($SommeE));
|
||||||
$dataseries[] = array(dol_trunc($langs->trans("ServicesNotOnSell"), 24), round($SommeF));
|
$dataseries[] = array($langs->transnoentitiesnoconv("ServicesNotOnSell"), round($SommeF));
|
||||||
}
|
}
|
||||||
|
|
||||||
include_once DOL_DOCUMENT_ROOT.'/core/class/dolgraph.class.php';
|
include_once DOL_DOCUMENT_ROOT.'/core/class/dolgraph.class.php';
|
||||||
$dolgraph = new DolGraph();
|
$dolgraph = new DolGraph();
|
||||||
$dolgraph->SetData($dataseries);
|
$dolgraph->SetData($dataseries);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user