Merge branch 'develop' into units

Conflicts:
	htdocs/commande/class/commande.class.php
	htdocs/compta/facture.php
	htdocs/install/mysql/migration/3.7.0-3.8.0.sql
	htdocs/product/admin/product.php
	htdocs/product/card.php
This commit is contained in:
Marcos García de La Fuente 2015-04-18 23:38:14 +02:00
commit 87f97ed545
346 changed files with 8367 additions and 6384 deletions

View File

@ -8,14 +8,10 @@ charset = utf-8
end_of_line = lf end_of_line = lf
insert_final_newline = true insert_final_newline = true
[*.php] [*.php]
indent_style = space indent_style = tab
indent_size = 4
[*.js] [*.js]
indent_style = space indent_style = tab
indent_size = 2
[*.css] [*.css]
indent_style = space indent_style = tab
indent_size = 2
[*.xml] [*.xml]
indent_style = space indent_style = tab
indent_size = 4

View File

@ -3,7 +3,10 @@ How to contribute to Dolibarr
Bug reports and feature requests Bug reports and feature requests
-------------------------------- --------------------------------
** NEW **
*Note*: Issues are not a support forum. If you need help using the software, please use [the forums](http://www.dolibarr.org/forum).
**NEW**
Issues are now managed on [GitHub](https://github.com/Dolibarr/dolibarr/Issues). Issues are now managed on [GitHub](https://github.com/Dolibarr/dolibarr/Issues).
@ -44,11 +47,11 @@ Use clear commit messages with the following structure:
<pre> <pre>
FIX|Fix #456 Short description (where #456 is number of bug fix, if it exists. In upper case to appear into ChangeLog) FIX|Fix #456 Short description (where #456 is number of bug fix, if it exists. In upper case to appear into ChangeLog)
or or
CLOSE|Close #456 Short description (where #456 is number feature request, if it exists. In upper case to appear into ChangeLog) CLOSE|Close #456 Short description (where #456 is number of feature request, if it exists. In upper case to appear into ChangeLog)
or or
NEW|New Short description (In upper case to appear into ChangeLog) NEW|New Short description (In upper case to appear into ChangeLog, use this if you add a feature not tracked, otherwise use CLOSE #456)
or or
Short description (when the commit is not introducing feature or closing a bug) Short description (when the commit is not introducing feature nor closing a bug)
Long description (Can span accross multiple lines). Long description (Can span accross multiple lines).
</pre> </pre>

View File

@ -18,6 +18,7 @@ CKEditor 4.3.3 LGPL-2.1+ Yes
FPDI 1.5.2 Apache Software License 2.0 Yes PDF templates management FPDI 1.5.2 Apache Software License 2.0 Yes PDF templates management
GeoIP 1.4 LGPL-2.1+ Yes Sample code to make geoip convert (not into deb package) GeoIP 1.4 LGPL-2.1+ Yes Sample code to make geoip convert (not into deb package)
NuSoap 0.9.5 LGPL 2.1+ Yes Library to develop SOAP Web services (not into rpm and deb package) NuSoap 0.9.5 LGPL 2.1+ Yes Library to develop SOAP Web services (not into rpm and deb package)
PEAR Mail_MIME 1.8.9 BSD Yes NuSoap dependency
odtPHP 1.0.1 GPL-2+ b Yes Library to build/edit ODT files odtPHP 1.0.1 GPL-2+ b Yes Library to build/edit ODT files
PHPExcel 1.8.0 LGPL-2.1+ Yes Read/Write XLS files, read ODS files PHPExcel 1.8.0 LGPL-2.1+ Yes Read/Write XLS files, read ODS files
php-iban 1.4.6 LGPL-3+ Yes Parse and validate IBAN (and IIBAN) bank account information in PHP php-iban 1.4.6 LGPL-3+ Yes Parse and validate IBAN (and IIBAN) bank account information in PHP

View File

@ -243,6 +243,12 @@ Dolibarr better:
- Fix: Bad SEPA xml file creation - Fix: Bad SEPA xml file creation
- Fix: [ bug #1892 ] PHP Fatal error when using USER_UPDATE_SESSION trigger and adding a supplier invoice payment - Fix: [ bug #1892 ] PHP Fatal error when using USER_UPDATE_SESSION trigger and adding a supplier invoice payment
- Fix: Showing system error if not enough stock of product into orders creation with lines - Fix: Showing system error if not enough stock of product into orders creation with lines
- Fix: [ bug #2543 ] Untranslated "Contract" origin string when creating an invoice from a contract
- Fix: [ bug #2534 ] SQL error when editing a supplier invoice line
- Fix: [ bug #2535 ] Untranslated string in "Linked objects" page of a project
- Fix: [ bug #2545 ] Missing object_margin.png in Amarok theme
- Fix: [ bug #2542 ] Contracts store localtax preferences
- Fix: Bad permission assignments for stock movements actions
***** ChangeLog for 3.6.2 compared to 3.6.1 ***** ***** ChangeLog for 3.6.2 compared to 3.6.1 *****
- Fix: fix ErrorBadValueForParamNotAString error message in price customer multiprice. - Fix: fix ErrorBadValueForParamNotAString error message in price customer multiprice.

View File

@ -3,4 +3,4 @@ dolibarr (3.8.0-3) UNRELEASED; urgency=low
[ Laurent Destailleur (eldy) ] [ Laurent Destailleur (eldy) ]
* New upstream release. * New upstream release.
-- Laurent Destailleur (eldy) <eldy@users.sourceforge.net> Tue, 3 Mar 2015 12:00:00 +0100 -- Laurent Destailleur (eldy) <eldy@users.sourceforge.net> Sun, 21 March 2015 12:00:00 +0100

View File

@ -270,28 +270,20 @@ class Skeleton_Class extends CommonObject
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); } if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); }
if (! $error) if (! $error && ! $notrigger)
{ {
if (! $notrigger) // Uncomment this and change MYOBJECT to your own tag if you
{ // want this action calls a trigger.
// Uncomment this and change MYOBJECT to your own tag if you
// want this action calls a trigger.
//// Call triggers //// Call triggers
//$result=$this->call_trigger('MYOBJECT_MODIFY',$user); //$result=$this->call_trigger('MYOBJECT_MODIFY',$user);
//if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail} //if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
//// End call triggers //// End call triggers
}
} }
// Commit or rollback // Commit or rollback
if ($error) if ($error)
{ {
foreach($this->errors as $errmsg)
{
dol_syslog(__METHOD__." ".$errmsg, LOG_ERR);
$this->error.=($this->error?', '.$errmsg:$errmsg);
}
$this->db->rollback(); $this->db->rollback();
return -1*$error; return -1*$error;
} }
@ -344,11 +336,6 @@ class Skeleton_Class extends CommonObject
// Commit or rollback // Commit or rollback
if ($error) if ($error)
{ {
foreach($this->errors as $errmsg)
{
dol_syslog(__METHOD__." ".$errmsg, LOG_ERR);
$this->error.=($this->error?', '.$errmsg:$errmsg);
}
$this->db->rollback(); $this->db->rollback();
return -1*$error; return -1*$error;
} }

View File

@ -0,0 +1,222 @@
<?php
/* Copyright (c) 2015 Tommaso Basilici <t.basilici@19.coop>
*
* 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 2 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/>.
*/
echo "<html>";
echo "<head>";
echo "<STYLE type=\"text/css\">
body {
color: #444;
font: 100%/30px 'Helvetica Neue', helvetica, arial, sans-serif;
text-shadow: 0 1px 0 #fff;
}
strong {
font-weight: bold;
}
em {
font-style: italic;
}
table {
background: #f5f5f5;
border-collapse: separate;
box-shadow: inset 0 1px 0 #fff;
font-size: 12px;
line-height: 24px;
margin: 30px auto;
text-align: left;
width: 800px;
}
th {
background-color: #777;
border-left: 1px solid #555;
border-right: 1px solid #777;
border-top: 1px solid #555;
border-bottom: 1px solid #333;
box-shadow: inset 0 1px 0 #999;
color: #fff;
font-weight: bold;
padding: 10px 15px;
position: relative;
text-shadow: 0 1px 0 #000;
}
th:after {
background: linear-gradient(rgba(255,255,255,0), rgba(255,255,255,.08));
content: '';
display: block;
height: 25%;
left: 0;
margin: 1px 0 0 0;
position: absolute;
top: 25%;
width: 100%;
}
th:first-child {
border-left: 1px solid #777;
box-shadow: inset 1px 1px 0 #999;
}
th:last-child {
box-shadow: inset -1px 1px 0 #999;
}
td {
border-right: 1px solid #fff;
border-left: 1px solid #e8e8e8;
border-top: 1px solid #fff;
border-bottom: 1px solid #e8e8e8;
padding: 10px 15px;
position: relative;
transition: all 300ms;
}
td:first-child {
box-shadow: inset 1px 0 0 #fff;
}
td:last-child {
border-right: 1px solid #e8e8e8;
box-shadow: inset -1px 0 0 #fff;
}
tr {
background-color: #f1f1f1;
}
tr:nth-child(odd) td {
background-color: #f1f1f1;
}
tr:last-of-type td {
box-shadow: inset 0 -1px 0 #fff;
}
tr:last-of-type td:first-child {
box-shadow: inset 1px -1px 0 #fff;
}
tr:last-of-type td:last-child {
box-shadow: inset -1px -1px 0 #fff;
}
tbody:hover td {
color: transparent;
text-shadow: 0 0 3px #aaa;
}
tbody:hover tr:hover td {
color: #444;
text-shadow: 0 1px 0 #fff;
} </STYLE>";
echo "<body>";
echo "<h3>If you call this file with the argument \"?unused=true\" it searches for the translation strings that exist in en_US but are never used</h3>";
echo "<h2>IMPORTANT: that can take quite a lot of time (up to 10 minutes), you need to tune the max_execution_time on your php.ini accordingly</h2>";
echo "<h3>Happy translating :)</h3>";
// directory containing the php and lang files
$htdocs = "../../htdocs/";
// directory containing the english lang files
$workdir = $htdocs."langs/en_US/";
$files = scandir($workdir);
$exludefiles = array('.','..','README');
$files = array_diff($files,$exludefiles);
$langstrings_3d = array();
$langstrings_full = array();
foreach ($files AS $file) {
$path_file = pathinfo($file);
// we're only interested in .lang files
if ($path_file['extension']=='lang') {
$content = file($workdir.$file);
foreach ($content AS $line => $row) {
// don't want comment lines
if (substr($row,0,1) !== '#') {
// don't want lines without the separator (why should those even be here, anyway...)
if (strpos($row,'=')!==false) {
$row_array = explode('=',$row);
$langstrings_3d[$path_file['basename']][$line+1]=$row_array[0];
$langstrings_full[]=$row_array[0];
$langstrings_dist[$row_array[0]]=$row_array[0];
}
}
}
}
}
foreach ($langstrings_3d AS $filename => $file) {
foreach ($file AS $linenum => $value) {
$keys = array_keys($langstrings_full, $value);
if (count($keys)>1) {
foreach ($keys AS $key) {
$dups[$value][$filename][$linenum] = '';
}
}
}
}
echo "<h2>Duplicate strings in lang files in $workdir - ".count($dups)." found</h2>";
echo "<pre>";
echo "<table border_bottom=1> ";
echo "<thead><tr><th align=\"center\">#</th><th>String</th><th>File and lines</th></thead>";
echo "<tbody>";
$count = 0;
foreach ($dups as $string => $pages) {
$count++;
echo "<tr>";
echo "<td align=\"center\">$count</td>";
echo "<td>$string</td>";
echo "<td>";
foreach ($pages AS $page => $lines ) {
echo "$page ";
foreach ($lines as $line => $nothing) {
echo "($line) ";
}
echo "<br>";
}
echo "</td></tr>";
}
echo "</tbody>";
echo "</table>";
if ($_REQUEST['unused'] == 'true') {
foreach ($langstrings_dist AS $value){
$search = '\'trans("'.$value.'")\'';
$string = 'grep -R -m 1 -F --include=*.php '.$search.' '.$htdocs.'*';
exec($string,$output);
if (empty($output)) {
$unused[$value] = true;
echo $value.'<br>';
}
}
echo "<h2>Strings in en_US that are never used</h2>";
echo "<pre>";
print_r($unused);
}
echo "</body>";
echo "</html>";
?>

View File

@ -178,7 +178,7 @@ if ($result) {
/* /*
* Action * Action
* FIXME Action must be set before any view part * FIXME Action must be set before any view part to respect MVC
*/ */
// Bookkeeping Write // Bookkeeping Write

View File

@ -164,7 +164,7 @@ print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<tr '.$bc[$var].' id="tramount"><td>'; print '<tr '.$bc[$var].' id="tramount"><td>';
print $langs->trans("DefaultAmount"); print $langs->trans("DefaultAmount");
print '</td><td align="right">'; print '</td><td align="right">';
print '<input type="text" id="MEMBER_NEWFORM_AMOUNT" name="MEMBER_NEWFORM_AMOUNT" size="5" value="'.(! empty($conf->global->MEMBER_NEWFORM_AMOUNT)?$conf->global->MEMBER_NEWFORM_AMOUNT:'').'">';; print '<input type="text" id="MEMBER_NEWFORM_AMOUNT" name="MEMBER_NEWFORM_AMOUNT" size="5" value="'.(! empty($conf->global->MEMBER_NEWFORM_AMOUNT)?$conf->global->MEMBER_NEWFORM_AMOUNT:'').'">';
print "</td></tr>\n"; print "</td></tr>\n";
// Can edit // Can edit
@ -197,7 +197,7 @@ if (! empty($conf->paybox->enabled) || ! empty($conf->paypal->enabled))
print '<tr '.$bc[$var].' id="tremail"><td>'; print '<tr '.$bc[$var].' id="tremail"><td>';
print $langs->trans("MEMBER_PAYONLINE_SENDEMAIL"); print $langs->trans("MEMBER_PAYONLINE_SENDEMAIL");
print '</td><td align="right">'; print '</td><td align="right">';
print '<input type="text" id="MEMBER_PAYONLINE_SENDEMAIL" name="MEMBER_PAYONLINE_SENDEMAIL" size="24" value="'.(! empty($conf->global->MEMBER_PAYONLINE_SENDEMAIL)?$conf->global->MEMBER_PAYONLINE_SENDEMAIL:'').'">';; print '<input type="text" id="MEMBER_PAYONLINE_SENDEMAIL" name="MEMBER_PAYONLINE_SENDEMAIL" size="24" value="'.(! empty($conf->global->MEMBER_PAYONLINE_SENDEMAIL)?$conf->global->MEMBER_PAYONLINE_SENDEMAIL:'').'">';
print "</td></tr>\n"; print "</td></tr>\n";
} }

View File

@ -249,7 +249,7 @@ if (empty($reshook))
} }
$lastname=$_POST["lastname"]; $lastname=$_POST["lastname"];
$firstname=$_POST["firstname"]; $firstname=$_POST["firstname"];
$morphy=$morphy=$_POST["morphy"];; $morphy=$morphy=$_POST["morphy"];
if ($morphy != 'mor' && empty($lastname)) { if ($morphy != 'mor' && empty($lastname)) {
$error++; $error++;
$langs->load("errors"); $langs->load("errors");

View File

@ -5,8 +5,9 @@
* Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org> * Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org>
* Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be> * Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
* Copyright (C) 2009-2012 Regis Houssin <regis.houssin@capnetworks.com> * Copyright (C) 2009-2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2014 Alexandre Spangaro <alexandre.spangaro@gmail.com> * Copyright (C) 2014-2015 Alexandre Spangaro <alexandre.spangaro@gmail.com>
* Copyright (C) 2015 Marcos García <marcosgdf@gmail.com> * Copyright (C) 2015 Marcos García <marcosgdf@gmail.com>
* Copyright (C) 2015 Frederic France <frederic.france@free.fr>
* *
* 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
@ -77,7 +78,8 @@ class Adherent extends CommonObject
var $morphy; var $morphy;
var $public; var $public;
var $note; // Private note var $note_private; // Private note
var $note_public; // Public note
var $statut; // -1:brouillon, 0:resilie, >=1:valide,paye var $statut; // -1:brouillon, 0:resilie, >=1:valide,paye
var $photo; var $photo;
@ -310,7 +312,7 @@ class Adherent extends CommonObject
$sql.= " VALUES ("; $sql.= " VALUES (";
$sql.= " '".$this->db->idate($this->datec)."'"; $sql.= " '".$this->db->idate($this->datec)."'";
$sql.= ", ".($this->login?"'".$this->db->escape($this->login)."'":"null"); $sql.= ", ".($this->login?"'".$this->db->escape($this->login)."'":"null");
$sql.= ", ".($user->id>0?$user->id:"null"); // Can be null because member can be createb by a guest or a script $sql.= ", ".($user->id>0?$user->id:"null"); // Can be null because member can be created by a guest or a script
$sql.= ", null, null, '".$this->morphy."'"; $sql.= ", null, null, '".$this->morphy."'";
$sql.= ", '".$this->typeid."'"; $sql.= ", '".$this->typeid."'";
$sql.= ", ".$conf->entity; $sql.= ", ".$conf->entity;
@ -445,9 +447,10 @@ class Adherent extends CommonObject
$sql.= ", email='".$this->email."'"; $sql.= ", email='".$this->email."'";
$sql.= ", skype='".$this->skype."'"; $sql.= ", skype='".$this->skype."'";
$sql.= ", phone=" .($this->phone?"'".$this->db->escape($this->phone)."'":"null"); $sql.= ", phone=" .($this->phone?"'".$this->db->escape($this->phone)."'":"null");
$sql.= ", phone_perso=" .($this->phone_perso?"'".$this->db->escape($this->phone_perso)."'":"null"); $sql.= ", phone_perso=" .($this->phone_perso?"'".$this->db->escape($this->phone_perso)."'":"null");
$sql.= ", phone_mobile=" .($this->phone_mobile?"'".$this->db->escape($this->phone_mobile)."'":"null"); $sql.= ", phone_mobile=" .($this->phone_mobile?"'".$this->db->escape($this->phone_mobile)."'":"null");
$sql.= ", note=" .($this->note?"'".$this->db->escape($this->note)."'":"null"); $sql.= ", note_private=" .($this->note_private?"'".$this->db->escape($this->note_private)."'":"null");
$sql.= ", note_public=" .($this->note_private?"'".$this->db->escape($this->note_public)."'":"null");
$sql.= ", photo=" .($this->photo?"'".$this->photo."'":"null"); $sql.= ", photo=" .($this->photo?"'".$this->photo."'":"null");
$sql.= ", public='".$this->public."'"; $sql.= ", public='".$this->public."'";
$sql.= ", statut=" .$this->statut; $sql.= ", statut=" .$this->statut;
@ -473,7 +476,7 @@ class Adherent extends CommonObject
$action='update'; $action='update';
// Actions on extra fields (by external module) // Actions on extra fields (by external module)
// FIXME le hook fait double emploi avec le trigger !! // TODO le hook fait double emploi avec le trigger !!
$hookmanager->initHooks(array('memberdao')); $hookmanager->initHooks(array('memberdao'));
$parameters=array('id'=>$this->id); $parameters=array('id'=>$this->id);
$action=''; $action='';
@ -1053,7 +1056,8 @@ class Adherent extends CommonObject
{ {
global $langs; global $langs;
$sql = "SELECT d.rowid, d.ref_ext, d.civility as civility_id, d.firstname, d.lastname, d.societe as company, d.fk_soc, d.statut, d.public, d.address, d.zip, d.town, d.note,"; $sql = "SELECT d.rowid, d.ref_ext, d.civility as civility_id, d.firstname, d.lastname, d.societe as company, d.fk_soc, d.statut, d.public, d.address, d.zip, d.town, d.note_private,";
$sql.= " d.note_public,";
$sql.= " d.email, d.skype, d.phone, d.phone_perso, d.phone_mobile, d.login, d.pass,"; $sql.= " d.email, d.skype, d.phone, d.phone_perso, d.phone_mobile, d.login, d.pass,";
$sql.= " d.photo, d.fk_adherent_type, d.morphy, d.entity,"; $sql.= " d.photo, d.fk_adherent_type, d.morphy, d.entity,";
$sql.= " d.datec as datec,"; $sql.= " d.datec as datec,";
@ -1134,7 +1138,8 @@ class Adherent extends CommonObject
$this->datevalid = $this->db->jdate($obj->datev); $this->datevalid = $this->db->jdate($obj->datev);
$this->birth = $this->db->jdate($obj->birthday); $this->birth = $this->db->jdate($obj->birthday);
$this->note = $obj->note; $this->note_private = $obj->note_private;
$this->note_public = $obj->note_public;
$this->morphy = $obj->morphy; $this->morphy = $obj->morphy;
$this->typeid = $obj->fk_adherent_type; $this->typeid = $obj->fk_adherent_type;
@ -1561,7 +1566,8 @@ class Adherent extends CommonObject
$result=''; $result='';
$label = '<u>' . $langs->trans("ShowMember") . '</u>'; $label = '<u>' . $langs->trans("ShowMember") . '</u>';
$label.= '<br><b>' . $langs->trans('Ref') . ':</b> ' . $this->ref; if (! empty($this->ref))
$label.= '<br><b>' . $langs->trans('Ref') . ':</b> ' . $this->ref;
if (! empty($this->firstname) || ! empty($this->lastname)) if (! empty($this->firstname) || ! empty($this->lastname))
$label.= '<br><b>' . $langs->trans('Name') . ':</b> ' . $this->getFullName($langs); $label.= '<br><b>' . $langs->trans('Name') . ':</b> ' . $this->getFullName($langs);
$linkclose = '" title="'.dol_escape_htmltag($label, 1).'" class="classfortooltip">'; $linkclose = '" title="'.dol_escape_htmltag($label, 1).'" class="classfortooltip">';
@ -1801,7 +1807,7 @@ class Adherent extends CommonObject
$this->phone = '0999999999'; $this->phone = '0999999999';
$this->phone_perso = '0999999998'; $this->phone_perso = '0999999998';
$this->phone_mobile = '0999999997'; $this->phone_mobile = '0999999997';
$this->note='No comment'; $this->note_private='No comment';
$this->birth=time(); $this->birth=time();
$this->photo=''; $this->photo='';
$this->public=1; $this->public=1;
@ -1874,7 +1880,8 @@ class Adherent extends CommonObject
if ($this->phone_perso && ! empty($conf->global->LDAP_MEMBER_FIELD_PHONE_PERSO)) $info[$conf->global->LDAP_MEMBER_FIELD_PHONE_PERSO] = $this->phone_perso; if ($this->phone_perso && ! empty($conf->global->LDAP_MEMBER_FIELD_PHONE_PERSO)) $info[$conf->global->LDAP_MEMBER_FIELD_PHONE_PERSO] = $this->phone_perso;
if ($this->phone_mobile && ! empty($conf->global->LDAP_MEMBER_FIELD_MOBILE)) $info[$conf->global->LDAP_MEMBER_FIELD_MOBILE] = $this->phone_mobile; if ($this->phone_mobile && ! empty($conf->global->LDAP_MEMBER_FIELD_MOBILE)) $info[$conf->global->LDAP_MEMBER_FIELD_MOBILE] = $this->phone_mobile;
if ($this->fax && ! empty($conf->global->LDAP_MEMBER_FIELD_FAX)) $info[$conf->global->LDAP_MEMBER_FIELD_FAX] = $this->fax; if ($this->fax && ! empty($conf->global->LDAP_MEMBER_FIELD_FAX)) $info[$conf->global->LDAP_MEMBER_FIELD_FAX] = $this->fax;
if ($this->note && ! empty($conf->global->LDAP_MEMBER_FIELD_DESCRIPTION)) $info[$conf->global->LDAP_MEMBER_FIELD_DESCRIPTION] = $this->note; if ($this->note_private && ! empty($conf->global->LDAP_MEMBER_FIELD_DESCRIPTION)) $info[$conf->global->LDAP_MEMBER_FIELD_DESCRIPTION] = $this->note_private;
if ($this->note_public && ! empty($conf->global->LDAP_MEMBER_FIELD_NOTE_PUBLIC)) $info[$conf->global->LDAP_MEMBER_FIELD_NOTE_PUBLIC] = $this->note_public;
if ($this->birth && ! empty($conf->global->LDAP_MEMBER_FIELD_BIRTHDATE)) $info[$conf->global->LDAP_MEMBER_FIELD_BIRTHDATE] = dol_print_date($this->birth,'dayhourldap'); if ($this->birth && ! empty($conf->global->LDAP_MEMBER_FIELD_BIRTHDATE)) $info[$conf->global->LDAP_MEMBER_FIELD_BIRTHDATE] = dol_print_date($this->birth,'dayhourldap');
if (isset($this->statut) && ! empty($conf->global->LDAP_FIELD_MEMBER_STATUS)) $info[$conf->global->LDAP_FIELD_MEMBER_STATUS] = $this->statut; if (isset($this->statut) && ! empty($conf->global->LDAP_FIELD_MEMBER_STATUS)) $info[$conf->global->LDAP_FIELD_MEMBER_STATUS] = $this->statut;
if ($this->datefin && ! empty($conf->global->LDAP_FIELD_MEMBER_END_LASTSUBSCRIPTION)) $info[$conf->global->LDAP_FIELD_MEMBER_END_LASTSUBSCRIPTION] = dol_print_date($this->datefin,'dayhourldap'); if ($this->datefin && ! empty($conf->global->LDAP_FIELD_MEMBER_END_LASTSUBSCRIPTION)) $info[$conf->global->LDAP_FIELD_MEMBER_END_LASTSUBSCRIPTION] = dol_print_date($this->datefin,'dayhourldap');
@ -1947,4 +1954,21 @@ class Adherent extends CommonObject
} }
} }
/**
* Function used to replace a thirdparty id with another one.
*
* @param DoliDB $db Database handler
* @param int $origin_id Old thirdparty id
* @param int $dest_id New thirdparty id
* @return bool
*/
public static function replaceThirdparty($db, $origin_id, $dest_id)
{
$tables = array(
'adherent'
);
return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables);
}
} }

View File

@ -73,7 +73,7 @@ class AdherentType extends CommonObject
{ {
global $conf; global $conf;
$this->statut=trim($this->statut); $this->statut=(int) $this->statut;
$sql = "INSERT INTO ".MAIN_DB_PREFIX."adherent_type ("; $sql = "INSERT INTO ".MAIN_DB_PREFIX."adherent_type (";
$sql.= "libelle"; $sql.= "libelle";

View File

@ -110,7 +110,7 @@ if ($sall)
if (is_numeric($sall)) $sql.= "d.rowid = ".$sall." OR "; if (is_numeric($sall)) $sql.= "d.rowid = ".$sall." OR ";
$sql.=" d.firstname LIKE '%".$db->escape($sall)."%' OR d.lastname LIKE '%".$db->escape($sall)."%' OR d.societe LIKE '%".$db->escape($sall)."%'"; $sql.=" d.firstname LIKE '%".$db->escape($sall)."%' OR d.lastname LIKE '%".$db->escape($sall)."%' OR d.societe LIKE '%".$db->escape($sall)."%'";
$sql.=" OR d.email LIKE '%".$db->escape($sall)."%' OR d.login LIKE '%".$db->escape($sall)."%' OR d.address LIKE '%".$db->escape($sall)."%'"; $sql.=" OR d.email LIKE '%".$db->escape($sall)."%' OR d.login LIKE '%".$db->escape($sall)."%' OR d.address LIKE '%".$db->escape($sall)."%'";
$sql.=" OR d.town LIKE '%".$db->escape($sall)."%' OR d.note LIKE '%".$db->escape($sall)."%')"; $sql.=" OR d.town LIKE '%".$db->escape($sall)."%' OR d.note_public LIKE '%".$db->escape($sall)."%' OR d.note_private LIKE '%".$db->escape($sall)."%')";
} }
} }
if ($type > 0) if ($type > 0)

View File

@ -1,6 +1,7 @@
<?php <?php
/* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2014 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004-2014 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2015 Frederic France <frederic.france@free.fr>
* *
* 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
@ -19,7 +20,7 @@
/** /**
* \file htdocs/adherents/note.php * \file htdocs/adherents/note.php
* \ingroup member * \ingroup member
* \brief Tabe for note of a member * \brief Tab for note of a member
*/ */
require '../main.inc.php'; require '../main.inc.php';
@ -45,26 +46,13 @@ if ($result > 0)
$result=$adht->fetch($object->typeid); $result=$adht->fetch($object->typeid);
} }
$permissionnote=$user->rights->adherent->creer; // Used by the include of actions_setnotes.inc.php
/* /*
* Actions * Actions
*/ */
if ($action == 'update' && $user->rights->adherent->creer && ! $_POST["cancel"]) include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once
{
$db->begin();
$res=$object->update_note(dol_html_entity_decode(GETPOST('note'), ENT_QUOTES));
if ($res < 0)
{
setEventMessage($object->error, 'errors');
$db->rollback();
}
else
{
$db->commit();
}
}
@ -82,7 +70,7 @@ if ($id)
dol_fiche_head($head, 'note', $langs->trans("Member"), 0, 'user'); dol_fiche_head($head, 'note', $langs->trans("Member"), 0, 'user');
print "<form method=\"post\" action=\"note.php\">"; print "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">";
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<table class="border" width="100%">'; print '<table class="border" width="100%">';
@ -129,49 +117,16 @@ if ($id)
// Status // Status
print '<tr><td>'.$langs->trans("Status").'</td><td class="valeur">'.$object->getLibStatut(4).'</td></tr>'; print '<tr><td>'.$langs->trans("Status").'</td><td class="valeur">'.$object->getLibStatut(4).'</td></tr>';
// Note
print '<tr><td valign="top">'.$langs->trans("Note").'</td>';
print '<td valign="top" colspan="3">';
if ($action == 'edit' && $user->rights->adherent->creer)
{
print "<input type=\"hidden\" name=\"action\" value=\"update\">";
print "<input type=\"hidden\" name=\"id\" value=\"".$object->id."\">";
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
$doleditor=new DolEditor('note',$object->note,'',280,'dolibarr_notes','',true,true,$conf->global->FCKEDITOR_ENABLE_SOCIETE,10,80);
$doleditor->Create();
}
else
{
print nl2br($object->note);
}
print "</td></tr>";
if ($action == 'edit')
{
print '<tr><td colspan="4" align="center">';
print '<input type="submit" class="button" name="update" value="'.$langs->trans("Save").'">';
print '&nbsp; &nbsp;';
print '<input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'">';
print '</td></tr>';
}
print "</table>"; print "</table>";
print "</form>\n"; print '<br>';
/* $colwidth='20';
* Actions $permission = $user->rights->adherent->creer; // Used by the include of notes.tpl.php
*/ include DOL_DOCUMENT_ROOT.'/core/tpl/notes.tpl.php';
print '</div>';
print '<div class="tabsAction">';
if ($user->rights->adherent->creer && $action != 'edit')
{
print '<div class="inline-block divButAction"><a class="butAction" href="note.php?id='.$object->id.'&amp;action=edit">'.$langs->trans('Modify')."</a></div>";
}
print "</div>";
dol_fiche_end();
} }

View File

@ -386,7 +386,7 @@ if ($rowid > 0)
{ {
$sql.= " AND (d.firstname LIKE '%".$sall."%' OR d.lastname LIKE '%".$sall."%' OR d.societe LIKE '%".$sall."%'"; $sql.= " AND (d.firstname LIKE '%".$sall."%' OR d.lastname LIKE '%".$sall."%' OR d.societe LIKE '%".$sall."%'";
$sql.= " OR d.email LIKE '%".$sall."%' OR d.login LIKE '%".$sall."%' OR d.address LIKE '%".$sall."%'"; $sql.= " OR d.email LIKE '%".$sall."%' OR d.login LIKE '%".$sall."%' OR d.address LIKE '%".$sall."%'";
$sql.= " OR d.town LIKE '%".$sall."%' OR d.note LIKE '%".$sall."%')"; $sql.= " OR d.town LIKE '%".$sall."%' OR d.note_public LIKE '%".$sall."%' OR d.note_private LIKE '%".$sall."%')";
} }
if ($status != '') if ($status != '')
{ {

View File

@ -319,7 +319,6 @@ foreach ($dirmodels as $reldir)
// Info // Info
$htmltooltip=''; $htmltooltip='';
$htmltooltip.=''.$langs->trans("Version").': <b>'.$module->getVersion().'</b><br>'; $htmltooltip.=''.$langs->trans("Version").': <b>'.$module->getVersion().'</b><br>';
$askpricesupplier->type=0;
$nextval=$module->getNextValue($mysoc,$askpricesupplier); $nextval=$module->getNextValue($mysoc,$askpricesupplier);
if ("$nextval" != $langs->trans("NotAvailable")) { // Keep " on nextval if ("$nextval" != $langs->trans("NotAvailable")) { // Keep " on nextval
$htmltooltip.=''.$langs->trans("NextValue").': '; $htmltooltip.=''.$langs->trans("NextValue").': ';

View File

@ -369,7 +369,7 @@ if ($action == 'edit' || $action == 'updateedit')
// Logo // Logo
$var=!$var; $var=!$var;
print '<tr'.dol_bc($var,'hideonsmartphone').'><td><label for="logo">'.$langs->trans("Logo").' (png,jpg)</label></td><td>'; print '<tr'.dol_bc($var,'hideonsmartphone').'><td><label for="logo">'.$langs->trans("Logo").' (png,jpg)</label></td><td>';
print '<table width="100%" class="nocellnopadd"><tr class="nocellnopadd"><td valign="middle" class="nocellnopadd">'; print '<table width="100%" class="nobordernopadding"><tr class="nocellnopadd"><td valign="middle" class="nocellnopadd">';
print '<input type="file" class="flat" name="logo" id="logo" size="50">'; print '<input type="file" class="flat" name="logo" id="logo" size="50">';
print '</td><td valign="middle" align="right">'; print '</td><td valign="middle" align="right">';
if (! empty($mysoc->logo_mini)) if (! empty($mysoc->logo_mini))
@ -605,8 +605,9 @@ if ($action == 'edit' || $action == 'updateedit')
} }
print '</td></tr>'; print '</td></tr>';
$opcions=array($langs->trans("CalcLocaltax1").' '.$langs->trans("CalcLocaltax1Desc"),$langs->trans("CalcLocaltax2").' - '.$langs->trans("CalcLocaltax2Desc"),$langs->trans("CalcLocaltax3").' - '.$langs->trans("CalcLocaltax3Desc"));
print '<tr><td align="left"></label for="clt1">'.$langs->trans("CalcLocaltax").'</label>: '; print '<tr><td align="left"></label for="clt1">'.$langs->trans("CalcLocaltax").'</label>: ';
$opcions=array($langs->transcountry("CalcLocaltax1",$mysoc->country_code),$langs->transcountry("CalcLocaltax2",$mysoc->country_code),$langs->transcountry("CalcLocaltax3",$mysoc->country_code));
print $form->selectarray("clt1", $opcions, $conf->global->MAIN_INFO_LOCALTAX_CALC1); print $form->selectarray("clt1", $opcions, $conf->global->MAIN_INFO_LOCALTAX_CALC1);
print '</td></tr>'; print '</td></tr>';
print "</table>"; print "</table>";
@ -649,7 +650,6 @@ if ($action == 'edit' || $action == 'updateedit')
print '</td></tr>'; print '</td></tr>';
} }
print '<tr><td align="left"><label for="clt2">'.$langs->trans("CalcLocaltax").'</label>: '; print '<tr><td align="left"><label for="clt2">'.$langs->trans("CalcLocaltax").'</label>: ';
$opcions=array($langs->transcountry("CalcLocaltax1",$mysoc->country_code),$langs->transcountry("CalcLocaltax2",$mysoc->country_code),$langs->transcountry("CalcLocaltax3",$mysoc->country_code));
print $form->selectarray("clt2", $opcions, $conf->global->MAIN_INFO_LOCALTAX_CALC2); print $form->selectarray("clt2", $opcions, $conf->global->MAIN_INFO_LOCALTAX_CALC2);
print '</td></tr>'; print '</td></tr>';
print "</table>"; print "</table>";
@ -754,7 +754,7 @@ else
$var=!$var; $var=!$var;
print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("Logo").'</td><td>'; print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("Logo").'</td><td>';
print '<table width="100%" class="nocellnopadd"><tr class="nocellnopadd"><td valign="middle" class="nocellnopadd">'; print '<table width="100%" class="nobordernopadding"><tr class="nocellnopadd"><td valign="middle" class="nocellnopadd">';
print $mysoc->logo; print $mysoc->logo;
print '</td><td valign="center" align="right">'; print '</td><td valign="center" align="right">';
@ -1061,15 +1061,15 @@ else
print '<tr><td align="left">'.$langs->trans("CalcLocaltax").': '; print '<tr><td align="left">'.$langs->trans("CalcLocaltax").': ';
if($conf->global->MAIN_INFO_LOCALTAX_CALC2==0) if($conf->global->MAIN_INFO_LOCALTAX_CALC2==0)
{ {
print $langs->transcountry("CalcLocaltax1",$mysoc->country_code); print $langs->trans("CalcLocaltax1").' - '.$langs->trans("CalcLocaltax1Desc");
} }
else if($conf->global->MAIN_INFO_LOCALTAX_CALC2==1) else if($conf->global->MAIN_INFO_LOCALTAX_CALC2==1)
{ {
print $langs->transcountry("CalcLocaltax2",$mysoc->country_code); print $langs->trans("CalcLocaltax2").' - '.$langs->trans("CalcLocaltax2Desc");
} }
else if($conf->global->MAIN_INFO_LOCALTAX_CALC2==2) else if($conf->global->MAIN_INFO_LOCALTAX_CALC2==2)
{ {
print $langs->transcountry("CalcLocaltax3",$mysoc->country_code); print $langs->trans("CalcLocaltax3").' - '.$langs->trans("CalcLocaltax3Desc");
} }
print '</td></tr>'; print '</td></tr>';

View File

@ -923,7 +923,7 @@ if ($id)
print "</tr>"; print "</tr>";
$colspan=count($fieldlist)+2; $colspan=count($fieldlist)+2;
if ($id == 4) $colspan++;; if ($id == 4) $colspan++;
if (! empty($alabelisused)) // Si un des champs est un libelle if (! empty($alabelisused)) // Si un des champs est un libelle
{ {

View File

@ -323,8 +323,6 @@ else // Show
$var=true; $var=true;
// Language // Language
print_fiche_titre($langs->trans("Language"),'','');
print '<br>';
print '<table class="noborder" width="100%">'; print '<table class="noborder" width="100%">';
print '<tr class="liste_titre"><td>'.$langs->trans("Parameters").'</td><td>'.$langs->trans("Value").'</td><td>&nbsp;</td></tr>'; print '<tr class="liste_titre"><td>'.$langs->trans("Parameters").'</td><td>'.$langs->trans("Value").'</td><td>&nbsp;</td></tr>';

View File

@ -100,6 +100,7 @@ print '<br>';
print '<br>'; print '<br>';
// Add hook to add information // Add hook to add information
$parameters=array();
$reshook=$hookmanager->executeHooks('addHomeSetup',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('addHomeSetup',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
print $hookmanager->resPrint; print $hookmanager->resPrint;
if (empty($reshook)) if (empty($reshook))

View File

@ -65,13 +65,14 @@ if ($action == 'setvalue' && $user->admin)
if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_PHONE',GETPOST("fieldphone"),'chaine',0,'',$conf->entity)) $error++; if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_PHONE',GETPOST("fieldphone"),'chaine',0,'',$conf->entity)) $error++;
if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_PHONE_PERSO',GETPOST("fieldphoneperso"),'chaine',0,'',$conf->entity)) $error++; if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_PHONE_PERSO',GETPOST("fieldphoneperso"),'chaine',0,'',$conf->entity)) $error++;
if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_MOBILE',GETPOST("fieldmobile"),'chaine',0,'',$conf->entity)) $error++; if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_MOBILE',GETPOST("fieldmobile"),'chaine',0,'',$conf->entity)) $error++;
if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_SKYPE',GETPOST("fieldskype"),'chaine',0,'',$conf->entity)) $error++; if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_SKYPE',GETPOST("fieldskype"),'chaine',0,'',$conf->entity)) $error++;
if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_FAX',GETPOST("fieldfax"),'chaine',0,'',$conf->entity)) $error++; if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_FAX',GETPOST("fieldfax"),'chaine',0,'',$conf->entity)) $error++;
if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_ADDRESS',GETPOST("fieldaddress"),'chaine',0,'',$conf->entity)) $error++; if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_ADDRESS',GETPOST("fieldaddress"),'chaine',0,'',$conf->entity)) $error++;
if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_ZIP',GETPOST("fieldzip"),'chaine',0,'',$conf->entity)) $error++; if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_ZIP',GETPOST("fieldzip"),'chaine',0,'',$conf->entity)) $error++;
if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_TOWN',GETPOST("fieldtown"),'chaine',0,'',$conf->entity)) $error++; if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_TOWN',GETPOST("fieldtown"),'chaine',0,'',$conf->entity)) $error++;
if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_COUNTRY',GETPOST("fieldcountry"),'chaine',0,'',$conf->entity)) $error++; if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_COUNTRY',GETPOST("fieldcountry"),'chaine',0,'',$conf->entity)) $error++;
if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_DESCRIPTION',GETPOST("fielddescription"),'chaine',0,'',$conf->entity)) $error++; if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_DESCRIPTION',GETPOST("fielddescription"),'chaine',0,'',$conf->entity)) $error++;
if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_NOTE_PUBLIC',GETPOST("fieldnotepublic"),'chaine',0,'',$conf->entity)) $error++;
if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_BIRTHDATE',GETPOST("fieldbirthdate"),'chaine',0,'',$conf->entity)) $error++; if (! dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_BIRTHDATE',GETPOST("fieldbirthdate"),'chaine',0,'',$conf->entity)) $error++;
if (! dolibarr_set_const($db, 'LDAP_FIELD_MEMBER_STATUS',GETPOST("fieldstatus"),'chaine',0,'',$conf->entity)) $error++; if (! dolibarr_set_const($db, 'LDAP_FIELD_MEMBER_STATUS',GETPOST("fieldstatus"),'chaine',0,'',$conf->entity)) $error++;
if (! dolibarr_set_const($db, 'LDAP_FIELD_MEMBER_END_LASTSUBSCRIPTION', GETPOST("fieldendlastsubscription"),'chaine',0,'',$conf->entity)) $error++; if (! dolibarr_set_const($db, 'LDAP_FIELD_MEMBER_END_LASTSUBSCRIPTION', GETPOST("fieldendlastsubscription"),'chaine',0,'',$conf->entity)) $error++;
@ -312,6 +313,14 @@ print '</td><td>'.$langs->trans("LDAPFieldDescriptionExample").'</td>';
print '<td align="right">&nbsp;</td>'; print '<td align="right">&nbsp;</td>';
print '</tr>'; print '</tr>';
// Public Note
$var=!$var;
print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFieldNotePublic").'</td><td>';
print '<input size="25" type="text" name="fieldnotepublic" value="'.$conf->global->LDAP_MEMBER_FIELD_NOTE_PUBLIC.'">';
print '</td><td>'.$langs->trans("LDAPFieldNotePublicExample").'</td>';
print '<td align="right">&nbsp;</td>';
print '</tr>';
// Birthday // Birthday
$var=!$var; $var=!$var;
print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFieldBirthdate").'</td><td>'; print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFieldBirthdate").'</td><td>';

View File

@ -174,8 +174,8 @@ if ($conf->societe->enabled)
print '<td>'.$notifiedevent['code'].'</td>'; print '<td>'.$notifiedevent['code'].'</td>';
print '<td>'.$label.'</td>'; print '<td>'.$label.'</td>';
print '<td align="right">'; print '<td align="right">';
$nb = $notify->countDefinedNotifications($notifiedevent['code'], 0); $tmparray = $notify->getNotificationsArray($notifiedevent['code'], 0);
print $nb; print count($tmparray);
print '</td>'; print '</td>';
print '</tr>'; print '</tr>';
} }

View File

@ -180,7 +180,7 @@ if (! empty($conf->global->MAIN_MODULE_NOTIFICATION))
$langs->load("mails"); $langs->load("mails");
print_titre($langs->trans("Notifications")); print_titre($langs->trans("Notifications"));
$sql = "SELECT u.rowid, u.lastname, u.firstname, u.fk_societe, u.email"; $sql = "SELECT u.rowid, u.lastname, u.firstname, u.fk_soc, u.email";
$sql.= " FROM ".MAIN_DB_PREFIX."user as u"; $sql.= " FROM ".MAIN_DB_PREFIX."user as u";
$sql.= " WHERE entity IN (0,".$conf->entity.")"; $sql.= " WHERE entity IN (0,".$conf->entity.")";
@ -194,7 +194,7 @@ if (! empty($conf->global->MAIN_MODULE_NOTIFICATION))
{ {
$obj = $db->fetch_object($resql); $obj = $db->fetch_object($resql);
$var=!$var; $var=!$var;
if (!$obj->fk_societe) if (!$obj->fk_soc)
{ {
$username=dolGetFirstLastname($obj->firstname,$obj->lastname); $username=dolGetFirstLastname($obj->firstname,$obj->lastname);
$internalusers[$obj->rowid] = $username; $internalusers[$obj->rowid] = $username;

View File

@ -182,43 +182,27 @@ else if ($action == 'set_SUPPLIER_ORDER_OTHER')
$res3=1; $res3=1;
}*/ }*/
// TODO We add/delete permission until permission can have a condition on a global var // TODO We add/delete permission here until permission can have a condition on a global var
$r_id = 1190; include_once DOL_DOCUMENT_ROOT.'/core/modules/modFournisseur.class.php';
$entity = $conf->entity; $newmodule=new modFournisseur($db);
$r_desc=$langs->trans("Permission1190"); // clear default rights array
$r_modul='fournisseur'; $newmodule->rights=array();
$r_type='w'; // add new right
$r_perms='commande'; $r=0;
$r_subperms='approve2'; $newmodule->rights[$r][0] = 1190;
$r_def=0; $newmodule->rights[$r][1] = $langs->trans("Permission1190");
$newmodule->rights[$r][2] = 'w';
$newmodule->rights[$r][3] = 0;
$newmodule->rights[$r][4] = 'commande';
$newmodule->rights[$r][5] = 'approve2';
if ($conf->global->SUPPLIER_ORDER_DOUBLE_APPROVAL) if ($conf->global->SUPPLIER_ORDER_DOUBLE_APPROVAL)
{ {
$sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def"; $newmodule->insert_permissions(1);
$sql.= " (id, entity, libelle, module, type, bydefault, perms, subperms)";
$sql.= " VALUES ";
$sql.= "(".$r_id.",".$entity.",'".$db->escape($r_desc)."','".$r_modul."','".$r_type."',".$r_def.",'".$r_perms."','".$r_subperms."')";
$resqlinsert=$db->query($sql,1);
if (! $resqlinsert)
{
if ($db->errno() != "DB_ERROR_RECORD_ALREADY_EXISTS")
{
setEventMessage($db->lasterror(),'errors');
$error++;
}
}
} }
else else
{ {
$sql = "DELETE FROM ".MAIN_DB_PREFIX."rights_def"; $newmodule->delete_permissions();
$sql.= " WHERE id = ".$r_id;
$resqldelete=$db->query($sql,1);
if (! $resqldelete)
{
setEventMessage($db->lasterror(),'errors');
$error++;
}
} }
} }

View File

@ -111,11 +111,6 @@ jQuery(document).ready(function() {
print_fiche_titre($langs->trans("Backup"),'','setup'); print_fiche_titre($langs->trans("Backup"),'','setup');
print $langs->trans("BackupDesc",DOL_DATA_ROOT).'<br><br>'; print $langs->trans("BackupDesc",DOL_DATA_ROOT).'<br><br>';
print $langs->trans("BackupDesc2",DOL_DATA_ROOT).'<br>';
print $langs->trans("BackupDescX").'<br><br>';
print $langs->trans("BackupDesc3",DOL_DATA_ROOT).'<br>';
print $langs->trans("BackupDescY").'<br><br>';
?> ?>
@ -124,9 +119,29 @@ print $langs->trans("BackupDescY").'<br><br>';
name="token" value="<?php echo $_SESSION['newtoken']; ?>" /> <input name="token" value="<?php echo $_SESSION['newtoken']; ?>" /> <input
type="hidden" name="export_type" value="server" /> type="hidden" name="export_type" value="server" />
<fieldset id="fieldsetexport"> <fieldset id="fieldsetexport"><legend style="font-size: 3em">1</legend>
<?php print '<legend>'.$langs->trans("DatabaseName").' : <b>'.$dolibarr_main_db_name.'</b></legend>'; ?>
<table> <?php
print $langs->trans("BackupDesc3",$dolibarr_main_db_name).'<br>';
//print $langs->trans("BackupDescY").'<br>';
print '<br>';
?>
<div id="backupdatabaseleft" class="fichehalfleft" >
<?php
print_titre($title?$title:$langs->trans("BackupDumpWizard"));
print '<table width="100%" class="'.($useinecm?'nobordernopadding':'liste').'">';
print '<tr class="liste_titre">';
print '<td class="liste_titre">';
print $langs->trans("DatabaseName").' : <b>'.$dolibarr_main_db_name.'</b><br>';
print '</td>';
print '</tr>';
print '<tr '.$bc[false].'><td style="padding-left: 8px">';
?>
<table class="centpercent">
<tr> <tr>
<td valign="top"> <td valign="top">
@ -182,7 +197,7 @@ print $langs->trans("BackupDescY").'<br><br>';
$fullpathofmysqldump=$conf->global->SYSTEMTOOLS_MYSQLDUMP; $fullpathofmysqldump=$conf->global->SYSTEMTOOLS_MYSQLDUMP;
} }
?><br> ?><br>
<input type="text" name="mysqldump" size="80" <input type="text" name="mysqldump" style="width: 80%"
value="<?php echo $fullpathofmysqldump; ?>" /></div> value="<?php echo $fullpathofmysqldump; ?>" /></div>
<br> <br>
@ -317,7 +332,7 @@ print $langs->trans("BackupDescY").'<br><br>';
$fullpathofpgdump=$conf->global->SYSTEMTOOLS_POSTGRESQLDUMP; $fullpathofpgdump=$conf->global->SYSTEMTOOLS_POSTGRESQLDUMP;
} }
?><br> ?><br>
<input type="text" name="postgresqldump" size="80" <input type="text" name="postgresqldump" style="width: 80%"
value="<?php echo $fullpathofpgdump; ?>" /></div> value="<?php echo $fullpathofpgdump; ?>" /></div>
@ -357,12 +372,12 @@ print $langs->trans("BackupDescY").'<br><br>';
</tr> </tr>
</table> </table>
</fieldset>
<fieldset> <!--<fieldset>
<legend><?php echo $langs->trans("Destination"); ?></legend> <legend><?php echo $langs->trans("Destination"); ?></legend> -->
<label for="filename_template"> <?php echo $langs->trans("FileNameToGenerate"); ?></label>: <br>
<input type="text" name="filename_template" size="60" <label for="filename_template"> <?php echo $langs->trans("FileNameToGenerate"); ?></label><br>
<input type="text" name="filename_template" style="width: 90%"
id="filename_template" id="filename_template"
value="<?php value="<?php
$prefix='dump'; $prefix='dump';
@ -417,7 +432,8 @@ foreach($compression as $key => $val)
print '</div>'; print '</div>';
print "\n"; print "\n";
?></fieldset> ?><!--</fieldset>--> <!-- End destination -->
<br> <br>
<div align="center"><input type="submit" class="button" <div align="center"><input type="submit" class="button"
@ -425,15 +441,38 @@ print "\n";
<br> <br>
</div> </div>
<?php
print '</td></tr></table>';
?>
</form> </div>
<div id="backupdatabaseright" class="fichehalfright" style="height:400px; overflow: auto;">
<div class="ficheaddleft">
<?php <?php
$filearray=dol_dir_list($conf->admin->dir_output.'/backup','files',0,'','',$sortfield,(strtolower($sortorder)=='asc'?SORT_ASC:SORT_DESC),1); $filearray=dol_dir_list($conf->admin->dir_output.'/backup','files',0,'','',$sortfield,(strtolower($sortorder)=='asc'?SORT_ASC:SORT_DESC),1);
$result=$formfile->list_of_documents($filearray,null,'systemtools','',1,'backup/',1,0,$langs->trans("NoBackupFileAvailable"),0,$langs->trans("PreviousDumpFiles")); $result=$formfile->list_of_documents($filearray,null,'systemtools','',1,'backup/',1,0,$langs->trans("NoBackupFileAvailable"),0,$langs->trans("PreviousDumpFiles"));
print '<br>'; print '<br>';
?>
</div>
</div>
</fieldset>
<br>
<fieldset><legend style="font-size: 3em">2</legend>
<?php
print $langs->trans("BackupDesc2",DOL_DATA_ROOT).'<br>';
print $langs->trans("BackupDescX").'<br><br>';
?>
</fieldset>
</form>
<?php
llxFooter(); llxFooter();

View File

@ -66,13 +66,24 @@ jQuery(document).ready(function() {
print_fiche_titre($langs->trans("Restore"),'','setup'); print_fiche_titre($langs->trans("Restore"),'','setup');
print $langs->trans("RestoreDesc",DOL_DATA_ROOT).'<br><br>'; print $langs->trans("RestoreDesc",DOL_DATA_ROOT).'<br><br>';
?>
<fieldset>
<legend style="font-size: 3em">1</legend>
<?php
print $langs->trans("RestoreDesc2",DOL_DATA_ROOT).'<br><br>'; print $langs->trans("RestoreDesc2",DOL_DATA_ROOT).'<br><br>';
print $langs->trans("RestoreDesc3",DOL_DATA_ROOT).'<br><br>'; ?>
</fieldset>
<br>
<fieldset>
<legend style="font-size: 3em">2</legend>
<?php
print $langs->trans("RestoreDesc3",$dolibarr_main_db_name).'<br><br>';
?> ?>
<fieldset id="fieldsetexport"> <?php print $langs->trans("DatabaseName").' : <b>'.$dolibarr_main_db_name.'</b>'; ?><br><br>
<?php print '<legend>'.$langs->trans("DatabaseName").' : <b>'.$dolibarr_main_db_name.'</b></legend>'; ?>
<table><tr><td valign="top"> <table><tr><td valign="top">
<?php if ($conf->use_javascript_ajax) { ?> <?php if ($conf->use_javascript_ajax) { ?>

View File

@ -88,10 +88,10 @@ if (!empty($MemoryLimit))
$form=new Form($db); $form=new Form($db);
$formfile = new FormFile($db); $formfile = new FormFile($db);
$help_url='EN:Backups|FR:Sauvegardes|ES:Copias_de_seguridad'; //$help_url='EN:Backups|FR:Sauvegardes|ES:Copias_de_seguridad';
llxHeader('','',$help_url); //llxHeader('','',$help_url);
print_fiche_titre($langs->trans("Backup"),'','setup'); //print_fiche_titre($langs->trans("Backup"),'','setup');
// Start with empty buffer // Start with empty buffer
@ -165,13 +165,18 @@ if ($what == 'mysql')
$paramclear.=' -p"'.str_replace(array('"','`'),array('\"','\`'),$dolibarr_main_db_pass).'"'; $paramclear.=' -p"'.str_replace(array('"','`'),array('\"','\`'),$dolibarr_main_db_pass).'"';
} }
$_SESSION["commandbackuplastdone"]=$command." ".$paramcrypted;
$_SESSION["commandbackuptorun"]="";
/*
print '<b>'.$langs->trans("RunCommandSummary").':</b><br>'."\n"; print '<b>'.$langs->trans("RunCommandSummary").':</b><br>'."\n";
print '<textarea rows="'.ROWS_2.'" cols="120">'.$command." ".$paramcrypted.'</textarea><br>'."\n"; print '<textarea rows="'.ROWS_2.'" cols="120">'.$command." ".$paramcrypted.'</textarea><br>'."\n";
print '<br>'; print '<br>';
//print $paramclear; //print $paramclear;
// Now run command and show result // Now run command and show result
print '<b>'.$langs->trans("BackupResult").':</b> '; print '<b>'.$langs->trans("BackupResult").':</b> ';
*/
$errormsg=''; $errormsg='';
@ -264,6 +269,9 @@ if ($what == 'mysqlnobin')
{ {
backup_tables($outputfile); backup_tables($outputfile);
} }
$_SESSION["commandbackuplastdone"]="";
$_SESSION["commandbackuptorun"]="";
} }
// POSTGRESQL // POSTGRESQL
@ -320,7 +328,9 @@ if ($what == 'postgresql')
$paramcrypted.=" -w ".$dolibarr_main_db_name; $paramcrypted.=" -w ".$dolibarr_main_db_name;
$paramclear.=" -w ".$dolibarr_main_db_name; $paramclear.=" -w ".$dolibarr_main_db_name;
print $langs->trans("RunCommandSummaryToLaunch").':<br>'."\n"; $_SESSION["commandbackuplastdone"]="";
$_SESSION["commandbackuptorun"]=$command." ".$paramcrypted;
/*print $langs->trans("RunCommandSummaryToLaunch").':<br>'."\n";
print '<textarea rows="'.ROWS_3.'" cols="120">'.$command." ".$paramcrypted.'</textarea><br>'."\n"; print '<textarea rows="'.ROWS_3.'" cols="120">'.$command." ".$paramcrypted.'</textarea><br>'."\n";
print '<br>'; print '<br>';
@ -330,7 +340,7 @@ if ($what == 'postgresql')
print $langs->trans("YouMustRunCommandFromCommandLineAfterLoginToUser",$dolibarr_main_db_user,$dolibarr_main_db_user); print $langs->trans("YouMustRunCommandFromCommandLineAfterLoginToUser",$dolibarr_main_db_user,$dolibarr_main_db_user);
print '<br>'; print '<br>';
print '<br>'; print '<br>';*/
$what=''; $what='';
} }
@ -339,34 +349,46 @@ if ($what == 'postgresql')
// Si on a demande une generation // Si on a demande une generation
if ($what) //if ($what)
{ //{
if ($errormsg) if ($errormsg)
{ {
setEventMessage($langs->trans("Error")." : ".$errormsg, 'errors');
/*
print '<div class="error">'.$langs->trans("Error")." : ".$errormsg.'</div>'; print '<div class="error">'.$langs->trans("Error")." : ".$errormsg.'</div>';
// print '<a href="'.DOL_URL_ROOT.$relativepatherr.'">'.$langs->trans("DownloadErrorFile").'</a><br>';
print '<br>';
print '<br>'; print '<br>';
print '<br>';*/
} }
else else
{ {
print '<div class="ok">'; if ($what)
print $langs->trans("BackupFileSuccessfullyCreated").'.<br>'; {
print $langs->trans("YouCanDownloadBackupFile"); setEventMessage($langs->trans("BackupFileSuccessfullyCreated").'.<br>'.$langs->trans("YouCanDownloadBackupFile"));
print '</div>'; /*print '<div class="ok">';
print '<br>'; print $langs->trans("BackupFileSuccessfullyCreated").'.<br>';
print $langs->trans("YouCanDownloadBackupFile");
print '</div>';
print '<br>';*/
}
else
{
setEventMessage($langs->trans("YouMustRunCommandFromCommandLineAfterLoginToUser",$dolibarr_main_db_user,$dolibarr_main_db_user));
}
} }
} //}
/*
$filearray=dol_dir_list($conf->admin->dir_output.'/backup','files',0,'','',$sortfield,(strtolower($sortorder)=='asc'?SORT_ASC:SORT_DESC),1); $filearray=dol_dir_list($conf->admin->dir_output.'/backup','files',0,'','',$sortfield,(strtolower($sortorder)=='asc'?SORT_ASC:SORT_DESC),1);
$result=$formfile->list_of_documents($filearray,null,'systemtools','',1,'backup/',1,0,($langs->trans("NoBackupFileAvailable").'<br>'.$langs->trans("ToBuildBackupFileClickHere",DOL_URL_ROOT.'/admin/tools/dolibarr_export.php')),0,$langs->trans("PreviousDumpFiles")); $result=$formfile->list_of_documents($filearray,null,'systemtools','',1,'backup/',1,0,($langs->trans("NoBackupFileAvailable").'<br>'.$langs->trans("ToBuildBackupFileClickHere",DOL_URL_ROOT.'/admin/tools/dolibarr_export.php')),0,$langs->trans("PreviousDumpFiles"));
print '<br>'; print '<br>';
*/
// Redirect t backup page
header("Location: dolibarr_export.php");
$time_end = time(); $time_end = time();
llxFooter();
$db->close(); $db->close();

View File

@ -29,6 +29,8 @@ include_once DOL_DOCUMENT_ROOT . '/core/lib/geturl.lib.php';
$langs->load("admin"); $langs->load("admin");
$langs->load("other"); $langs->load("other");
$action=GETPOST('action','alpha');
if (! $user->admin) accessforbidden(); if (! $user->admin) accessforbidden();
if (GETPOST('msg','alpha')) { if (GETPOST('msg','alpha')) {
@ -43,14 +45,18 @@ $dolibarrroot=preg_replace('/([\\/]+)$/i','',DOL_DOCUMENT_ROOT);
$dolibarrroot=preg_replace('/([^\\/]+)$/i','',$dolibarrroot); $dolibarrroot=preg_replace('/([^\\/]+)$/i','',$dolibarrroot);
$dolibarrdataroot=preg_replace('/([\\/]+)$/i','',DOL_DATA_ROOT); $dolibarrdataroot=preg_replace('/([\\/]+)$/i','',DOL_DATA_ROOT);
$dirins=DOL_DOCUMENT_ROOT.'/custom';
/* /*
* Actions * Actions
*/ */
if (GETPOST('action','alpha')=='install') if ($action=='install')
{ {
$error=0; $error=0;
// $original_file should match format module_modulename-x.y[.z].zip
$original_file=basename($_FILES["fileinstall"]["name"]); $original_file=basename($_FILES["fileinstall"]["name"]);
$newfile=$conf->admin->dir_temp.'/'.$original_file.'/'.$original_file; $newfile=$conf->admin->dir_temp.'/'.$original_file.'/'.$original_file;
@ -72,33 +78,87 @@ if (GETPOST('action','alpha')=='install')
if (! $error) if (! $error)
{ {
@dol_delete_dir_recursive($conf->admin->dir_temp.'/'.$original_file); if ($original_file)
dol_mkdir($conf->admin->dir_temp.'/'.$original_file); {
@dol_delete_dir_recursive($conf->admin->dir_temp.'/'.$original_file);
dol_mkdir($conf->admin->dir_temp.'/'.$original_file);
}
$tmpdir=preg_replace('/\.zip$/','',$original_file).'.dir';
if ($tmpdir)
{
@dol_delete_dir_recursive($conf->admin->dir_temp.'/'.$tmpdir);
dol_mkdir($conf->admin->dir_temp.'/'.$tmpdir);
}
$result=dol_move_uploaded_file($_FILES['fileinstall']['tmp_name'],$newfile,1,0,$_FILES['fileinstall']['error']); $result=dol_move_uploaded_file($_FILES['fileinstall']['tmp_name'],$newfile,1,0,$_FILES['fileinstall']['error']);
if ($result > 0) if ($result > 0)
{ {
$documentrootalt=DOL_DOCUMENT_ROOT.'/extensions'; $result=dol_uncompress($newfile,$conf->admin->dir_temp.'/'.$tmpdir);
$result=dol_uncompress($newfile,$documentrootalt);
if (! empty($result['error'])) if (! empty($result['error']))
{ {
$langs->load("errors"); $langs->load("errors");
setEventMessage($langs->trans($result['error'],$original_file), 'errors'); setEventMessage($langs->trans($result['error'],$original_file), 'errors');
$error++;
} }
else else
{ {
setEventMessage($langs->trans("SetupIsReadyForUse")); // Now we move the dir of the module
$modulename=preg_replace('/module_/', '', $original_file);
$modulename=preg_replace('/\-[\d]+\.[\d]+.*$/', '', $modulename);
// Search dir $modulename
$modulenamedir=$conf->admin->dir_temp.'/'.$tmpdir.'/'.$modulename;
//var_dump($modulenamedir);
if (! dol_is_dir($modulenamedir))
{
$modulenamedir=$conf->admin->dir_temp.'/'.$tmpdir.'/htdocs/'.$modulename;
//var_dump($modulenamedir);
if (! dol_is_dir($modulenamedir))
{
setEventMessage($langs->trans("ErrorModuleFileSeemsToHaveAWrongFormat"), 'errors');
$error++;
}
}
if (! $error)
{
//var_dump($dirins);
@dol_delete_dir_recursive($dirins.'/'.$modulename);
$result=dolCopyDir($modulenamedir, $dirins.'/'.$modulename, '0444', 1);
if ($result <= 0)
{
setEventMessage($langs->trans("ErrorFailedToCopy"), 'errors');
$error++;
}
}
} }
} }
else
{
$error++;
}
}
if (! $error)
{
setEventMessage($langs->trans("SetupIsReadyForUse"));
} }
} }
/* /*
* View * View
*/ */
$dirins=DOL_DOCUMENT_ROOT.'/extensions';
$dirins_ok=(is_dir($dirins));
// Set dir where external modules are installed
if (! dol_is_dir($dirins))
{
dol_mkdir($dirins);
}
$dirins_ok=(dol_is_dir($dirins));
$wikihelp='EN:Installation_-_Upgrade|FR:Installation_-_Mise_à_jour|ES:Instalación_-_Actualización'; $wikihelp='EN:Installation_-_Upgrade|FR:Installation_-_Mise_à_jour|ES:Instalación_-_Actualización';
llxHeader('',$langs->trans("Upgrade"),$wikihelp); llxHeader('',$langs->trans("Upgrade"),$wikihelp);
@ -143,6 +203,8 @@ else
} }
print '<br>'; print '<br>';
// Upgrade
print $langs->trans("Upgrade").'<br>'; print $langs->trans("Upgrade").'<br>';
print '<hr>'; print '<hr>';
print $langs->trans("ThisIsProcessToFollow").'<br>'; print $langs->trans("ThisIsProcessToFollow").'<br>';
@ -162,20 +224,76 @@ print $langs->trans("RestoreLock",$dolibarrdataroot.'/install.lock').'<br>';
print '<br>'; print '<br>';
print '<br>'; print '<br>';
// Install external module
$allowonlineinstall=true;
$allowfromweb=1;
if (dol_is_file($dolibarrdataroot.'/installmodules.lock')) $allowonlineinstall=false;
$fullurl='<a href="'.$urldolibarrmodules.'" target="_blank">'.$urldolibarrmodules.'</a>'; $fullurl='<a href="'.$urldolibarrmodules.'" target="_blank">'.$urldolibarrmodules.'</a>';
$message='';
if (! empty($allowonlineinstall))
{
if (! in_array('/custom',explode(',',$dolibarr_main_url_root_alt)))
{
$message=info_admin($langs->trans("ConfFileMuseContainCustom", DOL_DOCUMENT_ROOT.'/custom', DOL_DOCUMENT_ROOT));
$allowfromweb=-1;
}
else
{
if ($dirins_ok)
{
if (! is_writable(dol_osencode($dirins)))
{
$langs->load("errors");
$message=info_admin($langs->trans("ErrorFailedToWriteInDir",$dirins));
$allowfromweb=0;
}
}
else
{
$message=info_admin($langs->trans("NotExistsDirect",$dirins).$langs->trans("InfDirAlt").$langs->trans("InfDirExample"));
$allowfromweb=0;
}
}
}
else
{
$message=info_admin($langs->trans("InstallModuleFromWebHasBeenDisabledByFile",$dolibarrdataroot.'/installmodules.lock'));
$allowfromweb=0;
}
print $langs->trans("AddExtensionThemeModuleOrOther").'<br>'; print $langs->trans("AddExtensionThemeModuleOrOther").'<br>';
print '<hr>'; print '<hr>';
print $langs->trans("ThisIsProcessToFollow").'<br>';
print '<b>'.$langs->trans("StepNb",1).'</b>: '; if ($allowfromweb < 1)
print $langs->trans("FindPackageFromWebSite",$fullurl).'<br>';
print '<b>'.$langs->trans("StepNb",2).'</b>: ';
print $langs->trans("DownloadPackageFromWebSite",$fullurl).'<br>';
print '<b>'.$langs->trans("StepNb",3).'</b>: ';
print $langs->trans("UnpackPackageInDolibarrRoot",$dolibarrroot).'<br>';
if (! empty($conf->global->MAIN_ONLINE_INSTALL_MODULE))
{ {
if ($dirins_ok) print $langs->trans("SomethingMakeInstallFromWebNotPossible");
print $message;
//print $langs->trans("SomethingMakeInstallFromWebNotPossible2");
print '<br>';
}
if ($allowfromweb >= 0)
{
if ($allowfromweb == 1) print $langs->trans("ThisIsProcessToFollow").'<br>';
else print $langs->trans("ThisIsAlternativeProcessToFollow").'<br>';
print '<b>'.$langs->trans("StepNb",1).'</b>: ';
print $langs->trans("FindPackageFromWebSite",$fullurl).'<br>';
print '<b>'.$langs->trans("StepNb",2).'</b>: ';
print $langs->trans("DownloadPackageFromWebSite",$fullurl).'<br>';
print '<b>'.$langs->trans("StepNb",3).'</b>: ';
if ($allowfromweb == 1)
{ {
print $langs->trans("UnpackPackageInDolibarrRoot",$dirins).'<br>';
print '<form enctype="multipart/form-data" method="POST" class="noborder" action="'.$_SERVER["PHP_SELF"].'" name="forminstall">'; print '<form enctype="multipart/form-data" method="POST" class="noborder" action="'.$_SERVER["PHP_SELF"].'" name="forminstall">';
print '<input type="hidden" name="action" value="install">'; print '<input type="hidden" name="action" value="install">';
print $langs->trans("YouCanSubmitFile").' <input type="file" name="fileinstall"> '; print $langs->trans("YouCanSubmitFile").' <input type="file" name="fileinstall"> ';
@ -184,16 +302,12 @@ if (! empty($conf->global->MAIN_ONLINE_INSTALL_MODULE))
} }
else else
{ {
$message=info_admin($langs->trans("NotExistsDirect",$dirins).$langs->trans("InfDirAlt").$langs->trans("InfDirExample")); print $langs->trans("UnpackPackageInDolibarrRoot",$dirins).'<br>';
setEventMessage($message, 'warnings'); print '<b>'.$langs->trans("StepNb",4).'</b>: ';
print $langs->trans("SetupIsReadyForUse").'<br>';
} }
} }
else
{
print '<b>'.$langs->trans("StepNb",4).'</b>: ';
print $langs->trans("SetupIsReadyForUse").'<br>';
}
print '</form>';
if (! empty($result['return'])) if (! empty($result['return']))
{ {

View File

@ -1,5 +1,6 @@
<?php <?php
/* Copyright (C) 2005 Laurent Destailleur <eldy@users.sourceforge.net> /* Copyright (C) 2005 Laurent Destailleur <eldy@users.sourceforge.net>
* 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
@ -210,4 +211,21 @@ class Bookmark
} }
/**
* Function used to replace a thirdparty id with another one.
*
* @param DoliDB $db Database handler
* @param int $origin_id Old thirdparty id
* @param int $dest_id New thirdparty id
* @return bool
*/
public static function replaceThirdparty(DoliDB $db, $origin_id, $dest_id)
{
$tables = array(
'bookmark'
);
return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables);
}
} }

View File

@ -164,7 +164,7 @@ if (! empty($conf->service->enabled))
$var=! $var; $var=! $var;
print '<tr '.$bc[$var].'><td>'; print '<tr '.$bc[$var].'><td>';
print $langs->trans("CashdeskShowServices"); print $langs->trans("CashdeskShowServices");
print '<td colspan="2">';; print '<td colspan="2">';
print $form->selectyesno("CASHDESK_SERVICES",$conf->global->CASHDESK_SERVICES,1); print $form->selectyesno("CASHDESK_SERVICES",$conf->global->CASHDESK_SERVICES,1);
print "</td></tr>\n"; print "</td></tr>\n";
} }

View File

@ -341,7 +341,7 @@ else if ($id || $ref)
llxHeader("","",$langs->trans("CardProduct".$product->type)); llxHeader("","",$langs->trans("CardProduct".$product->type));
$head=product_prepare_head($product, $user); $head=product_prepare_head($product);
$titre=$langs->trans("CardProduct".$product->type); $titre=$langs->trans("CardProduct".$product->type);
$picto=($product->type== Product::TYPE_SERVICE?'service':'product'); $picto=($product->type== Product::TYPE_SERVICE?'service':'product');
dol_fiche_head($head, 'category', $titre,0,$picto); dol_fiche_head($head, 'category', $titre,0,$picto);

View File

@ -7,6 +7,7 @@
* Copyright (C) 2007 Patrick Raguin <patrick.raguin@gmail.com> * Copyright (C) 2007 Patrick Raguin <patrick.raguin@gmail.com>
* Copyright (C) 2013 Juanjo Menent <jmenent@2byte.es> * Copyright (C) 2013 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2013 Philippe Grand <philippe.grand@atoo-net.com> * Copyright (C) 2013 Philippe Grand <philippe.grand@atoo-net.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
@ -201,7 +202,7 @@ class Categorie extends CommonObject
$action='create'; $action='create';
// Actions on extra fields (by external module or standard code) // Actions on extra fields (by external module or standard code)
// FIXME le hook fait double emploi avec le trigger !! // TODO le hook fait double emploi avec le trigger !!
$hookmanager->initHooks(array('HookModuleNamedao')); $hookmanager->initHooks(array('HookModuleNamedao'));
$parameters=array('socid'=>$this->id); $parameters=array('socid'=>$this->id);
$reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks
@ -294,7 +295,7 @@ class Categorie extends CommonObject
$action='update'; $action='update';
// Actions on extra fields (by external module or standard code) // Actions on extra fields (by external module or standard code)
// FIXME le hook fait double emploi avec le trigger !! // TODO le hook fait double emploi avec le trigger !!
$hookmanager->initHooks(array('HookCategorydao')); $hookmanager->initHooks(array('HookCategorydao'));
$parameters=array(); $parameters=array();
$reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks
@ -1164,10 +1165,10 @@ class Categorie extends CommonObject
{ {
$cats = array(); $cats = array();
$typeid=-1; $table='';; $typeid=-1; $table='';
if ($type == '0' || $type == 'product') { $typeid=0; $table='product'; $type='product'; } if ($type == '0' || $type == 'product') { $typeid=0; $table='product'; $type='product'; }
else if ($type == '1' || $type == 'supplier') { $typeid=1; $table='societe'; $type='fournisseur'; } else if ($type == '1' || $type == 'supplier') { $typeid=1; $table='soc'; $type='fournisseur'; }
else if ($type == '2' || $type == 'customer') { $typeid=2; $table='societe'; $type='societe'; } else if ($type == '2' || $type == 'customer') { $typeid=2; $table='soc'; $type='societe'; }
else if ($type == '3' || $type == 'member') { $typeid=3; $table='member'; $type='member'; } else if ($type == '3' || $type == 'member') { $typeid=3; $table='member'; $type='member'; }
else if ($type == '4' || $type == 'contact') { $typeid=4; $table='socpeople'; $type='contact'; } else if ($type == '4' || $type == 'contact') { $typeid=4; $table='socpeople'; $type='contact'; }
@ -1551,4 +1552,21 @@ class Categorie extends CommonObject
$this->socid = 1; $this->socid = 1;
$this->type = 0; $this->type = 0;
} }
/**
* Function used to replace a thirdparty id with another one.
*
* @param DoliDB $db Database handler
* @param int $origin_id Old thirdparty id
* @param int $dest_id New thirdparty id
* @return bool
*/
public static function replaceThirdparty(DoliDB $db, $origin_id, $dest_id)
{
$tables = array(
'categorie_societe'
);
return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables);
}
} }

View File

@ -333,7 +333,7 @@ class ActionComm extends CommonObject
$action='create'; $action='create';
// Actions on extra fields (by external module or standard code) // Actions on extra fields (by external module or standard code)
// FIXME le hook fait double emploi avec le trigger !! // TODO le hook fait double emploi avec le trigger !!
$hookmanager->initHooks(array('actioncommdao')); $hookmanager->initHooks(array('actioncommdao'));
$parameters=array('actcomm'=>$this->id); $parameters=array('actcomm'=>$this->id);
$reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks
@ -657,7 +657,7 @@ class ActionComm extends CommonObject
$action='update'; $action='update';
// Actions on extra fields (by external module or standard code) // Actions on extra fields (by external module or standard code)
// FIXME le hook fait double emploi avec le trigger !! // TODO le hook fait double emploi avec le trigger !!
$hookmanager->initHooks(array('actioncommdao')); $hookmanager->initHooks(array('actioncommdao'));
$parameters=array('actcomm'=>$this->id); $parameters=array('actcomm'=>$this->id);
$reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks
@ -1263,5 +1263,22 @@ class ActionComm extends CommonObject
$this->userassigned[$user->id]=array('id'=>$user->id, 'transparency'=> 1); $this->userassigned[$user->id]=array('id'=>$user->id, 'transparency'=> 1);
} }
/**
* Function used to replace a thirdparty id with another one.
*
* @param DoliDB $db Database handler
* @param int $origin_id Old thirdparty id
* @param int $dest_id New thirdparty id
* @return bool
*/
public static function replaceThirdparty(DoliDB $db, $origin_id, $dest_id)
{
$tables = array(
'actioncomm'
);
return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables);
}
} }

View File

@ -220,8 +220,8 @@ class ICal
} }
if (($key == "DTSTAMP") or ($key == "LAST-MODIFIED") or ($key == "CREATED")) $value = $this->ical_date_to_unix($value); if (($key == "DTSTAMP") or ($key == "LAST-MODIFIED") or ($key == "CREATED")) $value = $this->ical_date_to_unix($value);
if ($key == "RRULE" ) $value = $this->ical_rrule($value); //if ($key == "RRULE" ) $value = $this->ical_rrule($value);
if (stristr($key,"DTSTART") or stristr($key,"DTEND") or stristr($key,"DTSTART;VALUE=DATE") or stristr($key,"DTEND;VALUE=DATE")) if (stristr($key,"DTSTART") or stristr($key,"DTEND") or stristr($key,"DTSTART;VALUE=DATE") or stristr($key,"DTEND;VALUE=DATE"))
{ {
if (stristr($key,"DTSTART;VALUE=DATE") or stristr($key,"DTEND;VALUE=DATE")) if (stristr($key,"DTSTART;VALUE=DATE") or stristr($key,"DTEND;VALUE=DATE"))

View File

@ -1730,6 +1730,9 @@ if ($action == 'create')
/* /*
* Action presend * Action presend
*/ */
if (GETPOST('modelselected')) {
$action = 'presend';
}
if ($action == 'presend') if ($action == 'presend')
{ {
$object->fetch_projet(); $object->fetch_projet();
@ -1802,6 +1805,7 @@ if ($action == 'create')
// Tableau des parametres complementaires // Tableau des parametres complementaires
$formmail->param['action'] = 'send'; $formmail->param['action'] = 'send';
$formmail->param['models'] = 'askpricesupplier_send'; $formmail->param['models'] = 'askpricesupplier_send';
$formmail->param['models_id']=GETPOST('modelmailselected','int');
$formmail->param['id'] = $object->id; $formmail->param['id'] = $object->id;
$formmail->param['returnurl'] = $_SERVER["PHP_SELF"] . '?id=' . $object->id; $formmail->param['returnurl'] = $_SERVER["PHP_SELF"] . '?id=' . $object->id;
// Init list of files // Init list of files

View File

@ -155,7 +155,7 @@ if (empty($reshook))
if ($action == 'setoutstanding_limit') if ($action == 'setoutstanding_limit')
{ {
$object->fetch($id); $object->fetch($id);
$object->outstanding_limit=GETPOST('setoutstanding_limit'); $object->outstanding_limit=GETPOST('outstanding_limit');
$result=$object->set_OutstandingBill($user); $result=$object->set_OutstandingBill($user);
if ($result < 0) setEventMessage($object->error,'errors'); if ($result < 0) setEventMessage($object->error,'errors');
} }
@ -406,9 +406,15 @@ if ($id > 0)
$limit_field_type = (! empty($conf->global->MAIN_USE_JQUERY_JEDITABLE)) ? 'numeric' : 'amount'; $limit_field_type = (! empty($conf->global->MAIN_USE_JQUERY_JEDITABLE)) ? 'numeric' : 'amount';
print $form->editfieldval("OutstandingBill",'outstanding_limit',$object->outstanding_limit,$object,$user->rights->societe->creer,$limit_field_type,($object->outstanding_limit != '' ? price($object->outstanding_limit) : '')); print $form->editfieldval("OutstandingBill",'outstanding_limit',$object->outstanding_limit,$object,$user->rights->societe->creer,$limit_field_type,($object->outstanding_limit != '' ? price($object->outstanding_limit) : ''));
// display amount and link to unpaid bill // display amount and link to unpaid bill
$outstandigBills = $object->get_OutstandingBill(); $outstandingBills = $object->get_OutstandingBill();
if ($outstandigBills != 0) if ($outstandingBills != 0) {
print " (".$langs->trans("CurrentOutstandingBill")." <a href='".DOL_URL_ROOT."/compta/facture/list.php?socid=".$object->id."&search_status=1'>".price($outstandigBills, '', $langs, 0, 0, -1, $conf->currency).'</a>)'; print ' ('.$langs->trans("CurrentOutstandingBill");
print ' <a href="'.DOL_URL_ROOT.'/compta/facture/list.php?socid='.$object->id.'&search_status=1">';
print price($outstandingBills, '', $langs, 0, -1, -1, $conf->currency);
print '</a>';
if ($outstandingBills > $object->outstanding_limit) print img_warning($langs->trans("OutstandingBillReached"));
print ')';
}
print '</td>'; print '</td>';
print '</tr>'; print '</tr>';
} }
@ -627,7 +633,7 @@ if ($id > 0)
print '<table class="noborder" width="100%">'; print '<table class="noborder" width="100%">';
print '<tr class="liste_titre">'; print '<tr class="liste_titre">';
print '<td colspan="4"><table width="100%" class="nobordernopadding"><tr><td>'.$langs->trans("LastOrders",($num<=$MAXLIST?"":$MAXLIST)).'</td><td align="right"><a href="'.DOL_URL_ROOT.'/commande/list.php?socid='.$object->id.'">'.$langs->trans("AllOrders").' <span class="badge">'.$num.'</span></a></td>'; print '<td colspan="4"><table width="100%" class="nobordernopadding"><tr><td>'.$langs->trans("LastCustomerOrders",($num<=$MAXLIST?"":$MAXLIST)).'</td><td align="right"><a href="'.DOL_URL_ROOT.'/commande/list.php?socid='.$object->id.'">'.$langs->trans("AllOrders").' <span class="badge">'.$num.'</span></a></td>';
print '<td width="20px" align="right"><a href="'.DOL_URL_ROOT.'/commande/stats/index.php?socid='.$object->id.'">'.img_picto($langs->trans("Statistics"),'stats').'</a></td>'; print '<td width="20px" align="right"><a href="'.DOL_URL_ROOT.'/commande/stats/index.php?socid='.$object->id.'">'.img_picto($langs->trans("Statistics"),'stats').'</a></td>';
//if($num2 > 0) print '<td width="20px" align="right"><a href="'.DOL_URL_ROOT.'/commande/orderstoinvoice.php?socid='.$object->id.'">'.img_picto($langs->trans("CreateInvoiceForThisCustomer"),'object_bill').'</a></td>'; //if($num2 > 0) print '<td width="20px" align="right"><a href="'.DOL_URL_ROOT.'/commande/orderstoinvoice.php?socid='.$object->id.'">'.img_picto($langs->trans("CreateInvoiceForThisCustomer"),'object_bill').'</a></td>';
//else print '<td width="20px" align="right"><a href="#">'.img_picto($langs->trans("NoOrdersToInvoice"),'object_bill').'</a></td>'; //else print '<td width="20px" align="right"><a href="#">'.img_picto($langs->trans("NoOrdersToInvoice"),'object_bill').'</a></td>';
@ -854,7 +860,7 @@ if ($id > 0)
$facturestatic = new Facture($db); $facturestatic = new Facture($db);
$sql = 'SELECT f.rowid as facid, f.facnumber, f.type, f.amount'; $sql = 'SELECT f.rowid as facid, f.facnumber, f.type, f.amount';
$sql.= ', f.total'; $sql.= ', f.total as total_ht';
$sql.= ', f.tva as total_tva'; $sql.= ', f.tva as total_tva';
$sql.= ', f.total_ttc'; $sql.= ', f.total_ttc';
$sql.= ', f.datef as df, f.datec as dc, f.paye as paye, f.fk_statut as statut'; $sql.= ', f.datef as df, f.datec as dc, f.paye as paye, f.fk_statut as statut';
@ -896,7 +902,7 @@ if ($id > 0)
$facturestatic->id = $objp->facid; $facturestatic->id = $objp->facid;
$facturestatic->ref = $objp->facnumber; $facturestatic->ref = $objp->facnumber;
$facturestatic->type = $objp->type; $facturestatic->type = $objp->type;
$facturestatic->total_ht = $objp->total; $facturestatic->total_ht = $objp->total_ht;
$facturestatic->total_tva = $objp->total_tva; $facturestatic->total_tva = $objp->total_tva;
$facturestatic->total_ttc = $objp->total_ttc; $facturestatic->total_ttc = $objp->total_ttc;
print $facturestatic->getNomUrl(1); print $facturestatic->getNomUrl(1);
@ -909,7 +915,7 @@ if ($id > 0)
{ {
print '<td align="right"><b>!!!</b></td>'; print '<td align="right"><b>!!!</b></td>';
} }
print '<td align="right" width="120">'.price($objp->total_ttc).'</td>'; print '<td align="right" width="120">'.price($objp->total_ht).'</td>';
print '<td align="right" class="nowrap" width="100" >'.($facturestatic->LibStatut($objp->paye,$objp->statut,5,$objp->am)).'</td>'; print '<td align="right" class="nowrap" width="100" >'.($facturestatic->LibStatut($objp->paye,$objp->statut,5,$objp->am)).'</td>';
print "</tr>\n"; print "</tr>\n";

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2013 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004-2015 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com> * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.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
@ -67,7 +67,7 @@ if (! empty($conf->commande->enabled)) $orderstatic=new Commande($db);
llxHeader(); llxHeader();
print_fiche_titre($langs->trans("CustomerArea")); print_fiche_titre($langs->trans("CommercialArea"));
print '<div class="fichecenter"><div class="fichethirdleft">'; print '<div class="fichecenter"><div class="fichethirdleft">';
@ -579,6 +579,103 @@ if (! empty($conf->propal->enabled) && $user->rights->propal->lire)
} }
} }
/*
* Opened Order
*/
if (! empty($conf->commande->enabled) && $user->rights->commande->lire)
{
$langs->load("order");
$sql = "SELECT s.nom as name, s.rowid, c.rowid as commandeid, c.total as total_ttc, c.total_ht, c.tva as total_tva, c.ref, c.ref_client, c.fk_statut, c.date_valid as dv ";
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s";
$sql.= ", ".MAIN_DB_PREFIX."commande as c";
if (! $user->rights->societe->client->voir && ! $socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
$sql.= " WHERE c.fk_soc = s.rowid";
$sql.= " AND c.entity = ".$conf->entity;
$sql.= " AND c.fk_statut = 1";
if (! $user->rights->societe->client->voir && ! $socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
if ($socid) $sql.= " AND s.rowid = ".$socid;
$sql.= " ORDER BY c.rowid DESC";
$result=$db->query($sql);
if ($result)
{
$total = 0;
$num = $db->num_rows($result);
$i = 0;
if ($num > 0)
{
$var=true;
print '<table class="noborder" width="100%">';
print '<tr class="liste_titre"><td colspan="5">'.$langs->trans("OrdersOpened").' <a href="'.DOL_URL_ROOT.'/commande/list.php?viewstatut=1"><span class="badge">'.$num.'</span></td></tr>';
$nbofloop=min($num, (empty($conf->global->MAIN_MAXLIST_OVERLOAD)?500:$conf->global->MAIN_MAXLIST_OVERLOAD));
while ($i < $nbofloop)
{
$obj = $db->fetch_object($result);
$var=!$var;
print '<tr '.$bc[$var].'>';
// Ref
print '<td class="nowrap" width="140">';
$orderstatic->id=$obj->commandeid;
$orderstatic->ref=$obj->ref;
$orderstatic->ref_client=$obj->ref_client;
$orderstatic->total_ht = $obj->total_ht;
$orderstatic->total_tva = $obj->total_tva;
$orderstatic->total_ttc = $obj->total_ttc;
print '<table class="nobordernopadding"><tr class="nocellnopadd">';
print '<td class="nobordernopadding nowrap">';
print $orderstatic->getNomUrl(1);
print '</td>';
print '<td width="18" class="nobordernopadding nowrap">';
//if ($db->jdate($obj->dfv) < ($now - $conf->propal->cloture->warning_delay)) print img_warning($langs->trans("Late"));
print '</td>';
print '<td width="16" align="center" class="nobordernopadding">';
$filename=dol_sanitizeFileName($obj->ref);
$filedir=$conf->commande->dir_output . '/' . dol_sanitizeFileName($obj->ref);
$urlsource=$_SERVER['PHP_SELF'].'?id='.$obj->propalid;
print $formfile->getDocumentsLink($orderstatic->element, $filename, $filedir);
print '</td></tr></table>';
print "</td>";
print '<td class="nowrap">';
$companystatic->id=$obj->rowid;
$companystatic->name=$obj->name;
$companystatic->client=$obj->client;
$companystatic->canvas=$obj->canvas;
print $companystatic->getNomUrl(1, 'company', 44);
print '</td>';
print '<td align="right">';
print dol_print_date($db->jdate($obj->dp),'day').'</td>'."\n";
print '<td align="right">'.price($obj->total_ttc).'</td>';
print '<td align="center" width="14">'.$orderstatic->LibStatut($obj->fk_statut,3).'</td>'."\n";
print '</tr>'."\n";
$i++;
$total += $obj->total_ttc;
}
if ($num > $nbofloop)
{
print '<tr class="liste_total"><td colspan="5">'.$langs->trans("XMoreLines", ($num - $nbofloop))."</td></tr>";
}
else if ($total>0)
{
print '<tr class="liste_total"><td colspan="3">'.$langs->trans("Total")."</td><td align=\"right\">".price($total)."</td><td>&nbsp;</td></tr>";
}
print "</table><br>";
}
}
else
{
dol_print_error($db);
}
}
print '</div></div></div>'; print '</div></div></div>';

View File

@ -105,7 +105,7 @@ $sql = "SELECT s.rowid, s.nom as name, s.client, s.zip, s.town, st.libelle as st
$sql.= " s.datec, s.canvas"; $sql.= " s.datec, s.canvas";
if ((!$user->rights->societe->client->voir && !$socid) || $search_sale > 0) $sql .= ", sc.fk_soc, sc.fk_user"; // We need these fields in order to filter by sale (including the case where the user can only see his prospects) if ((!$user->rights->societe->client->voir && !$socid) || $search_sale > 0) $sql .= ", sc.fk_soc, sc.fk_user"; // We need these fields in order to filter by sale (including the case where the user can only see his prospects)
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s";
if (! empty($search_categ) || ! empty($catid)) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_societe as cs ON s.rowid = cs.fk_societe"; // We need this table joined to the select in order to filter by categ if (! empty($search_categ) || ! empty($catid)) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_societe as cs ON s.rowid = cs.fk_soc"; // We need this table joined to the select in order to filter by categ
if ((!$user->rights->societe->client->voir && !$socid) || $search_sale > 0) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; // We need this table joined to the select in order to filter by sale if ((!$user->rights->societe->client->voir && !$socid) || $search_sale > 0) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; // We need this table joined to the select in order to filter by sale
$sql.= ", ".MAIN_DB_PREFIX."c_stcomm as st"; $sql.= ", ".MAIN_DB_PREFIX."c_stcomm as st";
$sql.= " WHERE s.fk_stcomm = st.id"; $sql.= " WHERE s.fk_stcomm = st.id";

View File

@ -303,7 +303,7 @@ if (empty($reshook))
$object->modelpdf = GETPOST('model'); $object->modelpdf = GETPOST('model');
$object->author = $user->id; // deprecated $object->author = $user->id; // deprecated
$object->note = GETPOST('note'); $object->note = GETPOST('note');
$object->statut = 0; $object->statut = Propal::STATUS_DRAFT;
$object->fk_incoterms = GETPOST('incoterm_id', 'int'); $object->fk_incoterms = GETPOST('incoterm_id', 'int');
$object->location_incoterms = GETPOST('location_incoterms', 'alpha'); $object->location_incoterms = GETPOST('location_incoterms', 'alpha');
@ -543,52 +543,80 @@ if (empty($reshook))
} }
// Classify billed // Classify billed
else if ($action == 'classifybilled' && $user->rights->propal->cloturer) { else if ($action == 'classifybilled' && $user->rights->propal->cloturer)
$object->cloture($user, 4, ''); {
$result=$object->cloture($user, 4, '');
if ($result < 0)
{
setEventMessages($object->error, $object->errors, 'errors');
$error++;
}
} }
// Reopen proposal // Reopen proposal
else if ($action == 'confirm_reopen' && $user->rights->propal->cloturer && ! GETPOST('cancel')) { else if ($action == 'confirm_reopen' && $user->rights->propal->cloturer && ! GETPOST('cancel'))
{
// prevent browser refresh from reopening proposal several times // prevent browser refresh from reopening proposal several times
if ($object->statut == 2 || $object->statut == 3 || $object->statut == 4) { if ($object->statut == Propal::STATUS_SIGNED || $object->statut == Propal::STATUS_NOTSIGNED || $object->statut == Propal::STATUS_BILLED) {
$object->reopen($user, 1); $object->reopen($user, 1);
} }
} }
// Close proposal // Close proposal
else if ($action == 'setstatut' && $user->rights->propal->cloturer && ! GETPOST('cancel')) { else if ($action == 'setstatut' && $user->rights->propal->cloturer && ! GETPOST('cancel'))
{
if (! GETPOST('statut')) { if (! GETPOST('statut')) {
setEventMessage($langs->trans("ErrorFieldRequired", $langs->transnoentities("CloseAs")), 'errors'); setEventMessage($langs->trans("ErrorFieldRequired", $langs->transnoentities("CloseAs")), 'errors');
$action = 'statut'; $action = 'statut';
} else { } else {
// prevent browser refresh from closing proposal several times // prevent browser refresh from closing proposal several times
if ($object->statut == 1) { if ($object->statut == Propal::STATUS_VALIDATED)
$object->cloture($user, GETPOST('statut'), GETPOST('note')); {
$result=$object->cloture($user, GETPOST('statut'), GETPOST('note'));
if ($result < 0)
{
setEventMessages($object->error, $object->errors, 'errors');
$error++;
}
} }
} }
} }
// Classify billed // Classify billed
else if ($action == 'classifybilled' && $user->rights->propal->cloturer) { else if ($action == 'classifybilled' && $user->rights->propal->cloturer)
$object->cloture($user, 4, ''); {
$result=$object->cloture($user, 4, '');
if ($result < 0)
{
setEventMessages($object->error, $object->errors, 'errors');
$error++;
}
} }
// Reopen proposal // Reopen proposal
else if ($action == 'confirm_reopen' && $user->rights->propal->cloturer && ! GETPOST('cancel')) { else if ($action == 'confirm_reopen' && $user->rights->propal->cloturer && ! GETPOST('cancel'))
{
// prevent browser refresh from reopening proposal several times // prevent browser refresh from reopening proposal several times
if ($object->statut == 2 || $object->statut == 3 || $object->statut == 4) { if ($object->statut == Propal::STATUS_SIGNED || $object->statut == Propal::STATUS_NOTSIGNED || $object->statut == Propal::STATUS_BILLED)
$object->reopen($user, 1); {
$result=$object->reopen($user, 1);
if ($result < 0)
{
setEventMessages($object->error, $object->errors, 'errors');
$error++;
}
} }
} }
// Close proposal // Close proposal
else if ($action == 'setstatut' && $user->rights->propal->cloturer && ! GETPOST('cancel')) { else if ($action == 'setstatut' && $user->rights->propal->cloturer && ! GETPOST('cancel'))
{
if (! GETPOST('statut')) { if (! GETPOST('statut')) {
setEventMessage($langs->trans("ErrorFieldRequired", $langs->transnoentities("CloseAs")), 'errors'); setEventMessage($langs->trans("ErrorFieldRequired", $langs->transnoentities("CloseAs")), 'errors');
$action = 'statut'; $action = 'statut';
} else { } else {
// prevent browser refresh from closing proposal several times // prevent browser refresh from closing proposal several times
if ($object->statut == 1) { if ($object->statut == Propal::STATUS_VALIDATED) {
$object->cloture($user, GETPOST('statut'), GETPOST('note')); $object->cloture($user, GETPOST('statut'), GETPOST('note'));
} }
} }
@ -1154,7 +1182,7 @@ if (empty($reshook))
if (! $error) if (! $error)
{ {
// Actions on extra fields (by external module or standard code) // Actions on extra fields (by external module or standard code)
// FIXME le hook fait double emploi avec le trigger !! // TODO le hook fait double emploi avec le trigger !!
$hookmanager->initHooks(array('propaldao')); $hookmanager->initHooks(array('propaldao'));
$parameters = array('id' => $object->id); $parameters = array('id' => $object->id);
$reshook = $hookmanager->executeHooks('insertExtraFields', $parameters, $object, $action); // Note that $action and $object may have been $reshook = $hookmanager->executeHooks('insertExtraFields', $parameters, $object, $action); // Note that $action and $object may have been
@ -1745,7 +1773,7 @@ if ($action == 'create')
$absolute_discount = price2num($absolute_discount, 'MT'); $absolute_discount = price2num($absolute_discount, 'MT');
$absolute_creditnote = price2num($absolute_creditnote, 'MT'); $absolute_creditnote = price2num($absolute_creditnote, 'MT');
if ($absolute_discount) { if ($absolute_discount) {
if ($object->statut > 0) { if ($object->statut > Propal::STATUS_DRAFT) {
print $langs->trans("CompanyHasAbsoluteDiscount", price($absolute_discount, 0, $langs, 0, 0, -1, $conf->currency)); print $langs->trans("CompanyHasAbsoluteDiscount", price($absolute_discount, 0, $langs, 0, 0, -1, $conf->currency));
} else { } else {
// Remise dispo de type non avoir // Remise dispo de type non avoir
@ -1807,7 +1835,7 @@ if ($action == 'create')
} else { } else {
if (! empty($object->fin_validite)) { if (! empty($object->fin_validite)) {
print dol_print_date($object->fin_validite, 'daytext'); print dol_print_date($object->fin_validite, 'daytext');
if ($object->statut == 1 && $object->fin_validite < ($now - $conf->propal->cloture->warning_delay)) if ($object->statut == Propal::STATUS_VALIDATED && $object->fin_validite < ($now - $conf->propal->cloture->warning_delay))
print img_warning($langs->trans("Late")); print img_warning($langs->trans("Late"));
} else { } else {
print '&nbsp;'; print '&nbsp;';
@ -2091,7 +2119,7 @@ if ($action == 'create')
<input type="hidden" name="id" value="' . $object->id . '"> <input type="hidden" name="id" value="' . $object->id . '">
'; ';
if (! empty($conf->use_javascript_ajax) && $object->statut == 0) { if (! empty($conf->use_javascript_ajax) && $object->statut == Propal::STATUS_DRAFT) {
include DOL_DOCUMENT_ROOT . '/core/tpl/ajaxrow.tpl.php'; include DOL_DOCUMENT_ROOT . '/core/tpl/ajaxrow.tpl.php';
} }
@ -2101,7 +2129,7 @@ if ($action == 'create')
$ret = $object->printObjectLines($action, $mysoc, $soc, $lineid, 1); $ret = $object->printObjectLines($action, $mysoc, $soc, $lineid, 1);
// Form to add new line // Form to add new line
if ($object->statut == 0 && $user->rights->propal->creer) if ($object->statut == Propal::STATUS_DRAFT && $user->rights->propal->creer)
{ {
if ($action != 'editline') if ($action != 'editline')
{ {
@ -2164,7 +2192,7 @@ if ($action == 'create')
if ($action != 'statut' && $action != 'editline') if ($action != 'statut' && $action != 'editline')
{ {
// Validate // Validate
if ($object->statut == 0 && $object->total_ttc >= 0 && count($object->lines) > 0 && if ($object->statut == Propal::STATUS_DRAFT && $object->total_ttc >= 0 && count($object->lines) > 0 &&
((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->propal->creer)) ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->propal->creer))
|| (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->propal->propal_advance->validate))) || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->propal->propal_advance->validate)))
) { ) {
@ -2178,18 +2206,18 @@ if ($action == 'create')
print '<a class="butAction" href="' . DOL_URL_ROOT . '/comm/action/card.php?action=create&amp;origin=' . $object->element . '&amp;originid=' . $object->id . '&amp;socid=' . $object->socid . '">' . $langs->trans("AddAction") . '</a>'; print '<a class="butAction" href="' . DOL_URL_ROOT . '/comm/action/card.php?action=create&amp;origin=' . $object->element . '&amp;originid=' . $object->id . '&amp;socid=' . $object->socid . '">' . $langs->trans("AddAction") . '</a>';
} }
// Edit // Edit
if ($object->statut == 1 && $user->rights->propal->creer) { if ($object->statut == Propal::STATUS_VALIDATED && $user->rights->propal->creer) {
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&amp;action=modif">' . $langs->trans('Modify') . '</a></div>'; print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&amp;action=modif">' . $langs->trans('Modify') . '</a></div>';
} }
// ReOpen // ReOpen
if (($object->statut == 2 || $object->statut == 3 || $object->statut == 4) && $user->rights->propal->cloturer) { if (($object->statut == Propal::STATUS_SIGNED || $object->statut == Propal::STATUS_NOTSIGNED || $object->statut == Propal::STATUS_BILLED) && $user->rights->propal->cloturer) {
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&amp;action=reopen' . (empty($conf->global->MAIN_JUMP_TAG) ? '' : '#reopen') . '"'; print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&amp;action=reopen' . (empty($conf->global->MAIN_JUMP_TAG) ? '' : '#reopen') . '"';
print '>' . $langs->trans('ReOpen') . '</a></div>'; print '>' . $langs->trans('ReOpen') . '</a></div>';
} }
// Send // Send
if ($object->statut == 1 || $object->statut == 2) { if ($object->statut == Propal::STATUS_VALIDATED || $object->statut == Propal::STATUS_SIGNED) {
if (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->propal->propal_advance->send) { if (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->propal->propal_advance->send) {
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&amp;action=presend&amp;mode=init">' . $langs->trans('SendByMail') . '</a></div>'; print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&amp;action=presend&amp;mode=init">' . $langs->trans('SendByMail') . '</a></div>';
} else } else
@ -2197,14 +2225,14 @@ if ($action == 'create')
} }
// Create an order // Create an order
if (! empty($conf->commande->enabled) && $object->statut == 2) { if (! empty($conf->commande->enabled) && $object->statut == Propal::STATUS_SIGNED) {
if ($user->rights->commande->creer) { if ($user->rights->commande->creer) {
print '<div class="inline-block divButAction"><a class="butAction" href="' . DOL_URL_ROOT . '/commande/card.php?action=create&amp;origin=' . $object->element . '&amp;originid=' . $object->id . '&amp;socid=' . $object->socid . '">' . $langs->trans("AddOrder") . '</a></div>'; print '<div class="inline-block divButAction"><a class="butAction" href="' . DOL_URL_ROOT . '/commande/card.php?action=create&amp;origin=' . $object->element . '&amp;originid=' . $object->id . '&amp;socid=' . $object->socid . '">' . $langs->trans("AddOrder") . '</a></div>';
} }
} }
// Create contract // Create contract
if ($conf->contrat->enabled && $object->statut == 2) { if ($conf->contrat->enabled && $object->statut == Propal::STATUS_SIGNED) {
$langs->load("contracts"); $langs->load("contracts");
if ($user->rights->contrat->creer) { if ($user->rights->contrat->creer) {
@ -2213,7 +2241,8 @@ if ($action == 'create')
} }
// Create an invoice and classify billed // Create an invoice and classify billed
if ($object->statut == 2) { if ($object->statut == Propal::STATUS_SIGNED)
{
if (! empty($conf->facture->enabled) && $user->rights->facture->creer) if (! empty($conf->facture->enabled) && $user->rights->facture->creer)
{ {
print '<div class="inline-block divButAction"><a class="butAction" href="' . DOL_URL_ROOT . '/compta/facture.php?action=create&amp;origin=' . $object->element . '&amp;originid=' . $object->id . '&amp;socid=' . $object->socid . '">' . $langs->trans("AddBill") . '</a></div>'; print '<div class="inline-block divButAction"><a class="butAction" href="' . DOL_URL_ROOT . '/compta/facture.php?action=create&amp;origin=' . $object->element . '&amp;originid=' . $object->id . '&amp;socid=' . $object->socid . '">' . $langs->trans("AddBill") . '</a></div>';
@ -2227,7 +2256,7 @@ if ($action == 'create')
} }
// Close // Close
if ($object->statut == 1 && $user->rights->propal->cloturer) { if ($object->statut == Propal::STATUS_VALIDATED && $user->rights->propal->cloturer) {
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&amp;action=statut' . (empty($conf->global->MAIN_JUMP_TAG) ? '' : '#close') . '"'; print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&amp;action=statut' . (empty($conf->global->MAIN_JUMP_TAG) ? '' : '#close') . '"';
print '>' . $langs->trans('Close') . '</a></div>'; print '>' . $langs->trans('Close') . '</a></div>';
} }
@ -2288,6 +2317,10 @@ if ($action == 'create')
/* /*
* Action presend * Action presend
*/ */
//Select mail models is same action as presend
if (GETPOST('modelselected')) {
$action = 'presend';
}
if ($action == 'presend') if ($action == 'presend')
{ {
$object->fetch_projet(); $object->fetch_projet();
@ -2382,6 +2415,7 @@ if ($action == 'create')
// Tableau des parametres complementaires // Tableau des parametres complementaires
$formmail->param['action'] = 'send'; $formmail->param['action'] = 'send';
$formmail->param['models'] = 'propal_send'; $formmail->param['models'] = 'propal_send';
$formmail->param['models_id']=GETPOST('modelmailselected','int');
$formmail->param['id'] = $object->id; $formmail->param['id'] = $object->id;
$formmail->param['returnurl'] = $_SERVER["PHP_SELF"] . '?id=' . $object->id; $formmail->param['returnurl'] = $_SERVER["PHP_SELF"] . '?id=' . $object->id;
// Init list of files // Init list of files

View File

@ -56,19 +56,56 @@ class Propal extends CommonObject
var $id; var $id;
var $socid; // Id client /**
var $client; // Objet societe client (a charger par fetch_client) * ID of the client
* @var int
*/
var $socid;
/**
* Client (loaded by fetch_client)
* @var Societe
*/
var $client;
var $contactid; var $contactid;
var $fk_project; var $fk_project;
var $author; var $author;
var $ref; var $ref;
var $ref_client; var $ref_client;
var $statut; // 0 (draft), 1 (validated), 2 (signed), 3 (not signed), 4 (billed)
var $datec; // Date of creation /**
var $datev; // Date of validation * Status of the quote
var $date; // Date of proposal * Check the following constants:
var $datep; // Same than date * - STATUS_DRAFT
* - STATUS_VALIDATED
* - STATUS_SIGNED
* - STATUS_NOTSIGNED
* - STATUS_BILLED
* @var int
*/
var $statut;
/**
* Date of creation
* @var
*/
var $datec;
/**
* Date of validation
* @var
*/
var $datev;
/**
* Date of the quote
* @var
*/
var $date;
/**
* Same than date ¿?
* @var
*/
var $datep;
var $date_livraison; var $date_livraison;
var $fin_validite; var $fin_validite;
@ -81,9 +118,19 @@ class Propal extends CommonObject
var $total_localtax1; // Total Local Taxes 1 var $total_localtax1; // Total Local Taxes 1
var $total_localtax2; // Total Local Taxes 2 var $total_localtax2; // Total Local Taxes 2
var $total_ttc; // Total with tax var $total_ttc; // Total with tax
var $price; // deprecated (for compatibility)
var $tva; // deprecated (for compatibility) /**
var $total; // deprecated (for compatibility) * @deprecated
*/
var $price;
/**
* @deprecated
*/
var $tva;
/**
* @deprecated
*/
var $total;
var $cond_reglement_id; var $cond_reglement_id;
var $cond_reglement_code; var $cond_reglement_code;
@ -93,10 +140,16 @@ class Propal extends CommonObject
var $remise; var $remise;
var $remise_percent; var $remise_percent;
var $remise_absolue; var $remise_absolue;
var $note; // deprecated (for compatibility) /**
* @deprecated
*/
var $note;
var $note_private; var $note_private;
var $note_public; var $note_public;
var $fk_delivery_address; // deprecated (for compatibility) /**
* @deprecated
*/
var $fk_delivery_address;
var $fk_address; var $fk_address;
var $address_type; var $address_type;
var $address; var $address;
@ -122,12 +175,32 @@ class Propal extends CommonObject
var $labelstatut_short=array(); var $labelstatut_short=array();
var $specimen; var $specimen;
//Incorterms //Incorterms
var $fk_incoterms; var $fk_incoterms;
var $location_incoterms; var $location_incoterms;
var $libelle_incoterms; //Used into tooltip var $libelle_incoterms; //Used into tooltip
/**
* Draft status
*/
const STATUS_DRAFT = 0;
/**
* Validated status
*/
const STATUS_VALIDATED = 1;
/**
* Signed quote
*/
const STATUS_SIGNED = 2;
/**
* Not signed quote
*/
const STATUS_NOTSIGNED = 3;
/**
* Billed quote
*/
const STATUS_BILLED = 4;
/** /**
* Constructor * Constructor
@ -365,7 +438,7 @@ class Propal extends CommonObject
// Check parameters // Check parameters
if ($type < 0) return -1; if ($type < 0) return -1;
if ($this->statut == 0) if ($this->statut == self::STATUS_DRAFT)
{ {
$this->db->begin(); $this->db->begin();
@ -531,7 +604,7 @@ class Propal extends CommonObject
if (empty($qty) && empty($special_code)) $special_code=3; // Set option tag if (empty($qty) && empty($special_code)) $special_code=3; // Set option tag
if (! empty($qty) && $special_code == 3) $special_code=0; // Remove option tag if (! empty($qty) && $special_code == 3) $special_code=0; // Remove option tag
if ($this->statut == 0) if ($this->statut == self::STATUS_DRAFT)
{ {
$this->db->begin(); $this->db->begin();
@ -657,7 +730,7 @@ class Propal extends CommonObject
*/ */
function deleteline($lineid) function deleteline($lineid)
{ {
if ($this->statut == 0) if ($this->statut == self::STATUS_DRAFT)
{ {
$line=new PropaleLigne($this->db); $line=new PropaleLigne($this->db);
@ -893,7 +966,7 @@ class Propal extends CommonObject
$action='update'; $action='update';
// Actions on extra fields (by external module or standard code) // Actions on extra fields (by external module or standard code)
// FIXME le hook fait double emploi avec le trigger !! // TODO le hook fait double emploi avec le trigger !!
$hookmanager->initHooks(array('propaldao')); $hookmanager->initHooks(array('propaldao'));
$parameters=array('socid'=>$this->id); $parameters=array('socid'=>$this->id);
$reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks
@ -1015,7 +1088,7 @@ class Propal extends CommonObject
} }
$this->id=0; $this->id=0;
$this->statut=0; $this->statut=self::STATUS_DRAFT;
if (empty($conf->global->PROPALE_ADDON) || ! is_readable(DOL_DOCUMENT_ROOT ."/core/modules/propale/".$conf->global->PROPALE_ADDON.".php")) if (empty($conf->global->PROPALE_ADDON) || ! is_readable(DOL_DOCUMENT_ROOT ."/core/modules/propale/".$conf->global->PROPALE_ADDON.".php"))
{ {
@ -1197,10 +1270,10 @@ class Propal extends CommonObject
//Incoterms //Incoterms
$this->fk_incoterms = $obj->fk_incoterms; $this->fk_incoterms = $obj->fk_incoterms;
$this->location_incoterms = $obj->location_incoterms; $this->location_incoterms = $obj->location_incoterms;
$this->libelle_incoterms = $obj->libelle_incoterms; $this->libelle_incoterms = $obj->libelle_incoterms;
if ($obj->fk_statut == 0) if ($obj->fk_statut == self::STATUS_DRAFT)
{ {
$this->brouillon = 1; $this->brouillon = 1;
} }
@ -1236,7 +1309,7 @@ class Propal extends CommonObject
$extrafieldsline=new ExtraFields($this->db); $extrafieldsline=new ExtraFields($this->db);
$line = new PropaleLigne($this->db); $line = new PropaleLigne($this->db);
$extralabelsline=$extrafieldsline->fetch_name_optionals_label($line->table_element,true); $extralabelsline=$extrafieldsline->fetch_name_optionals_label($line->table_element,true);
$num = $this->db->num_rows($result); $num = $this->db->num_rows($result);
$i = 0; $i = 0;
@ -1290,7 +1363,7 @@ class Propal extends CommonObject
$line->date_end = $objp->date_end; $line->date_end = $objp->date_end;
$line->fetch_optionals($line->id,$extralabelsline); $line->fetch_optionals($line->id,$extralabelsline);
$this->lines[$i] = $line; $this->lines[$i] = $line;
//dol_syslog("1 ".$line->fk_product); //dol_syslog("1 ".$line->fk_product);
//print "xx $i ".$this->lines[$i]->fk_product; //print "xx $i ".$this->lines[$i]->fk_product;
@ -1329,7 +1402,7 @@ class Propal extends CommonObject
$action='update'; $action='update';
// Actions on extra fields (by external module or standard code) // Actions on extra fields (by external module or standard code)
// FIXME le hook fait double emploi avec le trigger !! // TODO le hook fait double emploi avec le trigger !!
$hookmanager->initHooks(array('propaldao')); $hookmanager->initHooks(array('propaldao'));
$parameters=array('id'=>$this->id); $parameters=array('id'=>$this->id);
$reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks
@ -1395,8 +1468,8 @@ class Propal extends CommonObject
$sql = "UPDATE ".MAIN_DB_PREFIX."propal"; $sql = "UPDATE ".MAIN_DB_PREFIX."propal";
$sql.= " SET ref = '".$num."',"; $sql.= " SET ref = '".$num."',";
$sql.= " fk_statut = 1, date_valid='".$this->db->idate($now)."', fk_user_valid=".$user->id; $sql.= " fk_statut = ".self::STATUS_VALIDATED.", date_valid='".$this->db->idate($now)."', fk_user_valid=".$user->id;
$sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0"; $sql.= " WHERE rowid = ".$this->id." AND fk_statut = ".self::STATUS_DRAFT;
dol_syslog(get_class($this)."::valid", LOG_DEBUG); dol_syslog(get_class($this)."::valid", LOG_DEBUG);
$resql=$this->db->query($sql); $resql=$this->db->query($sql);
@ -1451,7 +1524,7 @@ class Propal extends CommonObject
$this->ref=$num; $this->ref=$num;
$this->brouillon=0; $this->brouillon=0;
$this->statut = 1; $this->statut = self::STATUS_VALIDATED;
$this->user_valid_id=$user->id; $this->user_valid_id=$user->id;
$this->datev=$now; $this->datev=$now;
@ -1486,7 +1559,7 @@ class Propal extends CommonObject
if (! empty($user->rights->propal->creer)) if (! empty($user->rights->propal->creer))
{ {
$sql = "UPDATE ".MAIN_DB_PREFIX."propal SET datep = '".$this->db->idate($date)."'"; $sql = "UPDATE ".MAIN_DB_PREFIX."propal SET datep = '".$this->db->idate($date)."'";
$sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0"; $sql.= " WHERE rowid = ".$this->id." AND fk_statut = ".self::STATUS_DRAFT;
dol_syslog(get_class($this)."::set_date", LOG_DEBUG); dol_syslog(get_class($this)."::set_date", LOG_DEBUG);
if ($this->db->query($sql) ) if ($this->db->query($sql) )
@ -1515,7 +1588,7 @@ class Propal extends CommonObject
if (! empty($user->rights->propal->creer)) if (! empty($user->rights->propal->creer))
{ {
$sql = "UPDATE ".MAIN_DB_PREFIX."propal SET fin_validite = ".($date_fin_validite!=''?"'".$this->db->idate($date_fin_validite)."'":'null'); $sql = "UPDATE ".MAIN_DB_PREFIX."propal SET fin_validite = ".($date_fin_validite!=''?"'".$this->db->idate($date_fin_validite)."'":'null');
$sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0"; $sql.= " WHERE rowid = ".$this->id." AND fk_statut = ".self::STATUS_DRAFT;
if ($this->db->query($sql) ) if ($this->db->query($sql) )
{ {
$this->fin_validite = $date_fin_validite; $this->fin_validite = $date_fin_validite;
@ -1665,7 +1738,7 @@ class Propal extends CommonObject
$remise = price2num($remise); $remise = price2num($remise);
$sql = "UPDATE ".MAIN_DB_PREFIX."propal SET remise_percent = ".$remise; $sql = "UPDATE ".MAIN_DB_PREFIX."propal SET remise_percent = ".$remise;
$sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0"; $sql.= " WHERE rowid = ".$this->id." AND fk_statut = ".self::STATUS_DRAFT;
if ($this->db->query($sql) ) if ($this->db->query($sql) )
{ {
@ -1699,7 +1772,7 @@ class Propal extends CommonObject
$sql = "UPDATE ".MAIN_DB_PREFIX."propal "; $sql = "UPDATE ".MAIN_DB_PREFIX."propal ";
$sql.= " SET remise_absolue = ".$remise; $sql.= " SET remise_absolue = ".$remise;
$sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0"; $sql.= " WHERE rowid = ".$this->id." AND fk_statut = ".self::STATUS_DRAFT;
if ($this->db->query($sql) ) if ($this->db->query($sql) )
{ {
@ -1791,7 +1864,6 @@ class Propal extends CommonObject
{ {
global $langs,$conf; global $langs,$conf;
$this->statut = $statut;
$error=0; $error=0;
$now=dol_now(); $now=dol_now();
@ -1807,7 +1879,7 @@ class Propal extends CommonObject
$modelpdf=$conf->global->PROPALE_ADDON_PDF_ODT_CLOSED?$conf->global->PROPALE_ADDON_PDF_ODT_CLOSED:$this->modelpdf; $modelpdf=$conf->global->PROPALE_ADDON_PDF_ODT_CLOSED?$conf->global->PROPALE_ADDON_PDF_ODT_CLOSED:$this->modelpdf;
$trigger_name='PROPAL_CLOSE_REFUSED'; $trigger_name='PROPAL_CLOSE_REFUSED';
if ($statut == 2) if ($statut == self::STATUS_SIGNED)
{ {
$trigger_name='PROPAL_CLOSE_SIGNED'; $trigger_name='PROPAL_CLOSE_SIGNED';
$modelpdf=$conf->global->PROPALE_ADDON_PDF_ODT_TOBILL?$conf->global->PROPALE_ADDON_PDF_ODT_TOBILL:$this->modelpdf; $modelpdf=$conf->global->PROPALE_ADDON_PDF_ODT_TOBILL?$conf->global->PROPALE_ADDON_PDF_ODT_TOBILL:$this->modelpdf;
@ -1819,12 +1891,12 @@ class Propal extends CommonObject
if ($result < 0) if ($result < 0)
{ {
$this->error=$this->db->error(); $this->error=$this->db->lasterror();
$this->db->rollback(); $this->db->rollback();
return -2; return -2;
} }
} }
if ($statut == 4) if ($statut == self::STATUS_BILLED)
{ {
$trigger_name='PROPAL_CLASSIFY_BILLED'; $trigger_name='PROPAL_CLASSIFY_BILLED';
} }
@ -1850,7 +1922,9 @@ class Propal extends CommonObject
if ( ! $error ) if ( ! $error )
{ {
$this->db->commit(); $this->statut = $statut;
$this->db->commit();
return 1; return 1;
} }
else else
@ -1861,7 +1935,7 @@ class Propal extends CommonObject
} }
else else
{ {
$this->error=$this->db->error(); $this->error=$this->db->lasterror();
$this->db->rollback(); $this->db->rollback();
return -1; return -1;
} }
@ -1874,11 +1948,11 @@ class Propal extends CommonObject
*/ */
function classifyBilled() function classifyBilled()
{ {
$sql = 'UPDATE '.MAIN_DB_PREFIX.'propal SET fk_statut = 4'; $sql = 'UPDATE '.MAIN_DB_PREFIX.'propal SET fk_statut = '.self::STATUS_BILLED;
$sql .= ' WHERE rowid = '.$this->id.' AND fk_statut > 0 ;'; $sql .= ' WHERE rowid = '.$this->id.' AND fk_statut > '.self::STATUS_DRAFT.' ;';
if ($this->db->query($sql) ) if ($this->db->query($sql) )
{ {
$this->statut=4; $this->statut=self::STATUS_BILLED;
return 1; return 1;
} }
else else
@ -1906,12 +1980,12 @@ class Propal extends CommonObject
*/ */
function set_draft($user) function set_draft($user)
{ {
$sql = "UPDATE ".MAIN_DB_PREFIX."propal SET fk_statut = 0"; $sql = "UPDATE ".MAIN_DB_PREFIX."propal SET fk_statut = ".self::STATUS_DRAFT;
$sql.= " WHERE rowid = ".$this->id; $sql.= " WHERE rowid = ".$this->id;
if ($this->db->query($sql)) if ($this->db->query($sql))
{ {
$this->statut = 0; $this->statut = self::STATUS_DRAFT;
$this->brouillon = 1; $this->brouillon = 1;
return 1; return 1;
} }
@ -1955,7 +2029,7 @@ class Propal extends CommonObject
$sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
} }
if ($socid) $sql.= " AND s.rowid = ".$socid; if ($socid) $sql.= " AND s.rowid = ".$socid;
if ($draft) $sql.= " AND p.fk_statut = 0"; if ($draft) $sql.= " AND p.fk_statut = ".self::STATUS_DRAFT;
if ($notcurrentuser > 0) $sql.= " AND p.fk_user_author <> ".$user->id; if ($notcurrentuser > 0) $sql.= " AND p.fk_user_author <> ".$user->id;
$sql.= $this->db->order($sortfield,$sortorder); $sql.= $this->db->order($sortfield,$sortorder);
$sql.= $this->db->plimit($limit,$offset); $sql.= $this->db->plimit($limit,$offset);
@ -2225,7 +2299,7 @@ class Propal extends CommonObject
function availability($availability_id) function availability($availability_id)
{ {
dol_syslog('Propale::availability('.$availability_id.')'); dol_syslog('Propale::availability('.$availability_id.')');
if ($this->statut >= 0) if ($this->statut >= self::STATUS_DRAFT)
{ {
$sql = 'UPDATE '.MAIN_DB_PREFIX.'propal'; $sql = 'UPDATE '.MAIN_DB_PREFIX.'propal';
$sql .= ' SET fk_availability = '.$availability_id; $sql .= ' SET fk_availability = '.$availability_id;
@ -2259,7 +2333,7 @@ class Propal extends CommonObject
function demand_reason($demand_reason_id) function demand_reason($demand_reason_id)
{ {
dol_syslog('Propale::demand_reason('.$demand_reason_id.')'); dol_syslog('Propale::demand_reason('.$demand_reason_id.')');
if ($this->statut >= 0) if ($this->statut >= self::STATUS_DRAFT)
{ {
$sql = 'UPDATE '.MAIN_DB_PREFIX.'propal'; $sql = 'UPDATE '.MAIN_DB_PREFIX.'propal';
$sql .= ' SET fk_input_reason = '.$demand_reason_id; $sql .= ' SET fk_input_reason = '.$demand_reason_id;
@ -2366,11 +2440,11 @@ class Propal extends CommonObject
global $langs; global $langs;
$langs->load("propal"); $langs->load("propal");
if ($statut==0) $statuttrans='statut0'; if ($statut==self::STATUS_DRAFT) $statuttrans='statut0';
if ($statut==1) $statuttrans='statut1'; if ($statut==self::STATUS_VALIDATED) $statuttrans='statut1';
if ($statut==2) $statuttrans='statut3'; if ($statut==self::STATUS_SIGNED) $statuttrans='statut3';
if ($statut==3) $statuttrans='statut5'; if ($statut==self::STATUS_NOTSIGNED) $statuttrans='statut5';
if ($statut==4) $statuttrans='statut6'; if ($statut==self::STATUS_BILLED) $statuttrans='statut6';
if ($mode == 0) return $this->labelstatut[$statut]; if ($mode == 0) return $this->labelstatut[$statut];
if ($mode == 1) return $this->labelstatut_short[$statut]; if ($mode == 1) return $this->labelstatut_short[$statut];
@ -2403,8 +2477,8 @@ class Propal extends CommonObject
$clause = " AND"; $clause = " AND";
} }
$sql.= $clause." p.entity = ".$conf->entity; $sql.= $clause." p.entity = ".$conf->entity;
if ($mode == 'opened') $sql.= " AND p.fk_statut = 1"; if ($mode == 'opened') $sql.= " AND p.fk_statut = ".self::STATUS_VALIDATED;
if ($mode == 'signed') $sql.= " AND p.fk_statut = 2"; if ($mode == 'signed') $sql.= " AND p.fk_statut = ".self::STATUS_SIGNED;
if ($user->societe_id) $sql.= " AND p.fk_soc = ".$user->societe_id; if ($user->societe_id) $sql.= " AND p.fk_soc = ".$user->societe_id;
$resql=$this->db->query($sql); $resql=$this->db->query($sql);
@ -2415,12 +2489,12 @@ class Propal extends CommonObject
if ($mode == 'opened') { if ($mode == 'opened') {
$delay_warning=$conf->propal->cloture->warning_delay; $delay_warning=$conf->propal->cloture->warning_delay;
$statut = 1; $statut = self::STATUS_VALIDATED;
$label = $langs->trans("PropalsToClose"); $label = $langs->trans("PropalsToClose");
} }
if ($mode == 'signed') { if ($mode == 'signed') {
$delay_warning=$conf->propal->facturation->warning_delay; $delay_warning=$conf->propal->facturation->warning_delay;
$statut = 2; $statut = self::STATUS_SIGNED;
$label = $langs->trans("PropalsToBill"); $label = $langs->trans("PropalsToBill");
} }
@ -2806,7 +2880,22 @@ class Propal extends CommonObject
return $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref); return $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref);
} }
/**
* Function used to replace a thirdparty id with another one.
*
* @param DoliDB $db Database handler
* @param int $origin_id Old thirdparty id
* @param int $dest_id New thirdparty id
* @return bool
*/
public static function replaceThirdparty(DoliDB $db, $origin_id, $dest_id)
{
$tables = array(
'propal'
);
return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables);
}
} }
@ -2827,7 +2916,14 @@ class PropaleLigne extends CommonObjectLine
var $fk_parent_line; var $fk_parent_line;
var $desc; // Description ligne var $desc; // Description ligne
var $fk_product; // Id produit predefini var $fk_product; // Id produit predefini
var $product_type = 0; // Type 0 = product, 1 = Service /**
* Product type.
* Use the following constants:
* - Product::TYPE_PRODUCT
* - Product::TYPE_SERVICE
* @var int
*/
var $product_type = Product::TYPE_PRODUCT;
var $qty; var $qty;
var $tva_tx; var $tva_tx;

View File

@ -126,7 +126,7 @@ if ($id > 0 || ! empty($ref))
if ($object->fin_validite) if ($object->fin_validite)
{ {
print dol_print_date($object->fin_validite,'daytext'); print dol_print_date($object->fin_validite,'daytext');
if ($object->statut == 1 && $object->fin_validite < ($now - $conf->propal->cloture->warning_delay)) print img_warning($langs->trans("Late")); if ($object->statut == Propal::STATUS_VALIDATED && $object->fin_validite < ($now - $conf->propal->cloture->warning_delay)) print img_warning($langs->trans("Late"));
} }
else else
{ {

View File

@ -201,7 +201,7 @@ if ((!$user->rights->societe->client->voir && !$socid) || $search_sale > 0) $sql
$sql .= " FROM ".MAIN_DB_PREFIX."c_stcomm as st"; $sql .= " FROM ".MAIN_DB_PREFIX."c_stcomm as st";
$sql.= ", ".MAIN_DB_PREFIX."societe as s"; $sql.= ", ".MAIN_DB_PREFIX."societe as s";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as d on (d.rowid = s.fk_departement)"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as d on (d.rowid = s.fk_departement)";
if (! empty($search_categ) || ! empty($catid)) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_societe as cs ON s.rowid = cs.fk_societe"; // We need this table joined to the select in order to filter by categ if (! empty($search_categ) || ! empty($catid)) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_societe as cs ON s.rowid = cs.fk_soc"; // We need this table joined to the select in order to filter by categ
if ((!$user->rights->societe->client->voir && !$socid) || $search_sale > 0) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; // We need this table joined to the select in order to filter by sale if ((!$user->rights->societe->client->voir && !$socid) || $search_sale > 0) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; // We need this table joined to the select in order to filter by sale
$sql.= " WHERE s.fk_stcomm = st.id"; $sql.= " WHERE s.fk_stcomm = st.id";
$sql.= " AND s.client IN (2, 3)"; $sql.= " AND s.client IN (2, 3)";

View File

@ -1125,7 +1125,7 @@ if (empty($reshook))
if (! $error) if (! $error)
{ {
// Actions on extra fields (by external module or standard code) // Actions on extra fields (by external module or standard code)
// FIXME le hook fait double emploi avec le trigger !! // TODO le hook fait double emploi avec le trigger !!
$hookmanager->initHooks(array('orderdao')); $hookmanager->initHooks(array('orderdao'));
$parameters = array('id' => $object->id); $parameters = array('id' => $object->id);
$reshook = $hookmanager->executeHooks('insertExtraFields', $parameters, $object, $action); // Note that $action and $object may have been modified by $reshook = $hookmanager->executeHooks('insertExtraFields', $parameters, $object, $action); // Note that $action and $object may have been modified by
@ -2404,6 +2404,7 @@ if ($action == 'create' && $user->rights->commande->creer)
// Tableau des parametres complementaires // Tableau des parametres complementaires
$formmail->param['action'] = 'send'; $formmail->param['action'] = 'send';
$formmail->param['models'] = 'order_send'; $formmail->param['models'] = 'order_send';
$formmail->param['models_id']=GETPOST('modelmailselected','int');
$formmail->param['orderid'] = $object->id; $formmail->param['orderid'] = $object->id;
$formmail->param['returnurl'] = $_SERVER["PHP_SELF"] . '?id=' . $object->id; $formmail->param['returnurl'] = $_SERVER["PHP_SELF"] . '?id=' . $object->id;

View File

@ -53,8 +53,17 @@ class Commande extends CommonOrder
var $id; var $id;
var $socid; // Id client /**
var $client; // Objet societe client (a charger par fetch_client) * Client ID
* @var int
*/
var $socid;
/**
* Client (loaded by fetch_client)
* @var Societe
*/
var $client;
var $ref; var $ref;
var $ref_client; var $ref_client;
@ -71,31 +80,13 @@ class Commande extends CommonOrder
* - STATUS_CLOSED * - STATUS_CLOSED
* @var int * @var int
*/ */
var $statut; // -1=Canceled, 0=Draft, 1=Validated, (2=Accepted/On process not managed for customer orders), 3=Closed (Delivered=Sent/Received, billed or not) var $statut;
/**
* @deprecated
*/
var $facturee; // deprecated var $facturee; // deprecated
var $billed; // billed or not var $billed; // billed or not
/**
* Canceled status
*/
const STATUS_CANCELED = -1;
/**
* Draft status
*/
const STATUS_DRAFT = 0;
/**
* Validated status
*/
const STATUS_VALIDATED = 1;
/**
* Accepted/On process not managed for customer orders
*/
const STATUS_ACCEPTED = 2;
/**
* Closed (Sent/Received, billed or not)
*/
const STATUS_CLOSED = 3;
var $brouillon; var $brouillon;
var $cond_reglement_id; var $cond_reglement_id;
var $cond_reglement_code; var $cond_reglement_code;
@ -155,6 +146,27 @@ class Commande extends CommonOrder
*/ */
const STOCK_NOT_ENOUGH_FOR_ORDER = -3; const STOCK_NOT_ENOUGH_FOR_ORDER = -3;
/**
* Canceled status
*/
const STATUS_CANCELED = -1;
/**
* Draft status
*/
const STATUS_DRAFT = 0;
/**
* Validated status
*/
const STATUS_VALIDATED = 1;
/**
* Accepted/On process not managed for customer orders
*/
const STATUS_ACCEPTED = 2;
/**
* Closed (Sent/Received, billed or not)
*/
const STATUS_CLOSED = 3;
/** /**
* Constructor * Constructor
@ -792,7 +804,7 @@ class Commande extends CommonOrder
$this->lines[$i]->fk_fournprice, $this->lines[$i]->fk_fournprice,
$this->lines[$i]->pa_ht, $this->lines[$i]->pa_ht,
$this->lines[$i]->label, $this->lines[$i]->label,
$this->lines[$i]->array_options, $this->lines[$i]->array_options,
$this->lines[$i]->fk_unit $this->lines[$i]->fk_unit
); );
if ($result < 0) if ($result < 0)
@ -865,28 +877,25 @@ class Commande extends CommonOrder
if (! $error) if (! $error)
{ {
$action='create'; //$action='create';
// Actions on extra fields (by external module or standard code) // Actions on extra fields (by external module or standard code)
// FIXME le hook fait double emploi avec le trigger !! // TODO le hook fait double emploi avec le trigger !!
$hookmanager->initHooks(array('orderdao')); /*$hookmanager->initHooks(array('orderdao'));
$parameters=array('socid'=>$this->id); $parameters=array('socid'=>$this->id);
$reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks
if (empty($reshook)) if (empty($reshook))
{ {
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
{ {*/
$result=$this->insertExtraFields(); $result=$this->insertExtraFields();
if ($result < 0) if ($result < 0) $error++;
{ /* }
$error++;
}
}
} }
else if ($reshook < 0) $error++; else if ($reshook < 0) $error++;*/
} }
if (! $notrigger) if (! $error && ! $notrigger)
{ {
// Call trigger // Call trigger
$result=$this->call_trigger('ORDER_CREATE',$user); $result=$this->call_trigger('ORDER_CREATE',$user);
@ -894,29 +903,27 @@ class Commande extends CommonOrder
// End call triggers // End call triggers
} }
if (!$error) { if (! $error)
{
$this->db->commit(); $this->db->commit();
return $this->id; return $this->id;
} }
else
foreach($this->errors as $errmsg) {
{ $this->db->rollback();
dol_syslog(get_class($this)."::create ".$errmsg, LOG_ERR); return -1*$error;
$this->error.=($this->error?', '.$errmsg:$errmsg); }
}
$this->db->rollback();
return -1*$error;
} }
else else
{ {
$this->error=$this->db->lasterror();
$this->db->rollback(); $this->db->rollback();
return -1; return -1;
} }
} }
} }
else else
{ {
dol_print_error($this->db); dol_print_error($this->db);
$this->db->rollback(); $this->db->rollback();
return -1; return -1;
@ -2668,7 +2675,7 @@ class Commande extends CommonOrder
$action='create'; $action='create';
// Actions on extra fields (by external module or standard code) // Actions on extra fields (by external module or standard code)
// FIXME le hook fait double emploi avec le trigger !! // TODO le hook fait double emploi avec le trigger !!
$hookmanager->initHooks(array('orderdao')); $hookmanager->initHooks(array('orderdao'));
$parameters=array('id'=>$this->id); $parameters=array('id'=>$this->id);
$reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks
@ -3299,6 +3306,23 @@ class Commande extends CommonOrder
return $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref); return $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref);
} }
/**
* Function used to replace a thirdparty id with another one.
*
* @param DoliDB $db Database handler
* @param int $origin_id Old thirdparty id
* @param int $dest_id New thirdparty id
* @return bool
*/
public static function replaceThirdparty(DoliDB $db, $origin_id, $dest_id)
{
$tables = array(
'commande'
);
return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables);
}
} }

View File

@ -403,7 +403,7 @@ if ($id > 0 || ! empty($ref))
print '<input name="label" class="flat" type="text" size="24" value="'.GETPOST("label").'">'; print '<input name="label" class="flat" type="text" size="24" value="'.GETPOST("label").'">';
if ($nbcategories) if ($nbcategories)
{ {
print '<br>'.$langs->trans("Category").': <select class="flat" name="cat1">'.$options.'</select>'; print '<br>'.$langs->trans("Rubrique").': <select class="flat" name="cat1">'.$options.'</select>';
} }
print '</td>'; print '</td>';
print '<td align=right><input name="debit" class="flat" type="text" size="4" value="'.GETPOST("debit").'"></td>'; print '<td align=right><input name="debit" class="flat" type="text" size="4" value="'.GETPOST("debit").'"></td>';

View File

@ -781,8 +781,8 @@ class Account extends CommonObject
$result=$this->deleteExtraFields(); $result=$this->deleteExtraFields();
if ($result < 0) if ($result < 0)
{ {
return -1;
dol_syslog(get_class($this)."::delete error -4 ".$this->error, LOG_ERR); dol_syslog(get_class($this)."::delete error -4 ".$this->error, LOG_ERR);
return -1;
} }
} }

View File

@ -133,7 +133,7 @@ if (! $found) print '<tr '.$bc[$var].'><td colspan="6">'.$langs->trans("None").'
// Total // Total
foreach ($total as $key=>$solde) foreach ($total as $key=>$solde)
{ {
print '<tr class="liste_total"><td colspan="5" class="liste_total">'.$langs->trans("Total ").$key.'</td><td align="right" class="liste_total">'.price($solde, 0, $langs, 0, 0, -1, $key).'</td></tr>'; print '<tr class="liste_total"><td colspan="5" class="liste_total">'.$langs->trans("Total").' '.$key.'</td><td align="right" class="liste_total">'.price($solde, 0, $langs, 0, 0, -1, $key).'</td></tr>';
} }
print '</table>'; print '</table>';
@ -186,7 +186,7 @@ if (! $found)
// Total // Total
foreach ($total as $key=>$solde) foreach ($total as $key=>$solde)
{ {
print '<tr class="liste_total"><td colspan="5" class="liste_total">'.$langs->trans("Total ").$key.'</td><td align="right" class="liste_total">'.price($solde, 0, $langs, 0, 0, -1, $key).'</td></tr>'; print '<tr class="liste_total"><td colspan="5" class="liste_total">'.$langs->trans("Total").' '.$key.'</td><td align="right" class="liste_total">'.price($solde, 0, $langs, 0, 0, -1, $key).'</td></tr>';
} }
print '</table>'; print '</table>';
@ -253,7 +253,7 @@ if (! $found)
// Total // Total
foreach ($total as $key=>$solde) foreach ($total as $key=>$solde)
{ {
print '<tr class="liste_total"><td colspan="5" class="liste_total">'.$langs->trans("Total ").$key.'</td><td align="right" class="liste_total">'.price($solde, 0, $langs, 0, 0, -1, $key).'</td></tr>'; print '<tr class="liste_total"><td colspan="5" class="liste_total">'.$langs->trans("Total").' '.$key.'</td><td align="right" class="liste_total">'.price($solde, 0, $langs, 0, 0, -1, $key).'</td></tr>';
} }
print "</table>"; print "</table>";

View File

@ -379,7 +379,7 @@ else
elseif ($links[$key]['type']=='payment_supplier') elseif ($links[$key]['type']=='payment_supplier')
{ {
$paymentsupplierstatic->id=$links[$key]['url_id']; $paymentsupplierstatic->id=$links[$key]['url_id'];
$paymentsupplierstatic->ref=$langs->trans("Payment");; $paymentsupplierstatic->ref=$langs->trans("Payment");
print ' '.$paymentsupplierstatic->getNomUrl(1); print ' '.$paymentsupplierstatic->getNomUrl(1);
$newline=0; $newline=0;
} }

View File

@ -178,9 +178,10 @@ if ($resql)
print '<form method="post" action="search.php" name="search_form">'."\n"; print '<form method="post" action="search.php" name="search_form">'."\n";
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'."\n"; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'."\n";
$moreforfilter .= $langs->trans('Period') . ' ' . $langs->trans('StartDate') . ': '; $moreforfilter .= $langs->trans('Period') . ' ('.$langs->trans('DateOperationShort').') : ' . $langs->trans('StartDate') . ' ';
$moreforfilter .= $form->select_date($search_dt_start, 'search_start_dt', 0, 0, 1, "search_form", 1, 1, 1); $moreforfilter .= $form->select_date($search_dt_start, 'search_start_dt', 0, 0, 1, "search_form", 1, 0, 1);
$moreforfilter .= $langs->trans('EndDate') . ':' . $form->select_date($search_dt_end, 'search_end_dt', 0, 0, 1, "search_form", 1, 1, 1); $moreforfilter .= ' - ';
$moreforfilter .= $langs->trans('EndDate') . ' ' . $form->select_date($search_dt_end, 'search_end_dt', 0, 0, 1, "search_form", 1, 0, 1);
if ($moreforfilter) { if ($moreforfilter) {

View File

@ -329,8 +329,8 @@ if ($_REQUEST["account"] || $_REQUEST["ref"])
// Solde actuel // Solde actuel
$var=!$var; $var=!$var;
print '<tr class="liste_total">'; print '<tr class="liste_total">';
print '<td align="left" colspan="5">'.$langs->trans("FutureBalance").'</td>'; print '<td align="left" colspan="5">'.$langs->trans("FutureBalance").' ('.$acct->currency_code.')</td>';
print '<td align="right" nowrap>'.price($solde).'</td>'; print '<td align="right" nowrap>'.price($solde, 0, $langs, 0, 0, -1, $acct->currency_code).'</td>';
print '</tr>'; print '</tr>';
print "</table>"; print "</table>";

View File

@ -79,7 +79,7 @@ if ($action == 'add')
$accountto=new Account($db); $accountto=new Account($db);
$accountto->fetch(GETPOST('account_to','int')); $accountto->fetch(GETPOST('account_to','int'));
if ($accountto->id != $accountfrom->id) if (($accountto->id != $accountfrom->id) && ($accountto->currency_code == $accountfrom->currency_code))
{ {
$db->begin(); $db->begin();

View File

@ -5,13 +5,15 @@
* Copyright (C) 2005 Marc Barilley / Ocebo <marc@ocebo.com> * Copyright (C) 2005 Marc Barilley / Ocebo <marc@ocebo.com>
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com> * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr> * Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr>
* Copyright (C) 2010-2013 Juanjo Menent <jmenent@2byte.es> * Copyright (C) 2010-2015 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2012-2013 Christophe Battarel <christophe.battarel@altairis.fr> * Copyright (C) 2012-2013 Christophe Battarel <christophe.battarel@altairis.fr>
* Copyright (C) 2012-2013 Cédric Salvador <csalvador@gpcsolutions.fr> * Copyright (C) 2012-2013 Cédric Salvador <csalvador@gpcsolutions.fr>
* Copyright (C) 2012-2014 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr> * Copyright (C) 2012-2014 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
* Copyright (C) 2013 Jean-Francois FERRY <jfefe@aternatik.fr> * Copyright (C) 2013 Jean-Francois FERRY <jfefe@aternatik.fr>
* Copyright (C) 2013-2014 Florian Henry <florian.henry@open-concept.pro> * Copyright (C) 2013-2014 Florian Henry <florian.henry@open-concept.pro>
* Copyright (C) 2014 Ferran Marcet <fmarcet@2byte.es> * Copyright (C) 2013 Cédric Salvador <csalvador@gpcsolutions.fr>
* Copyright (C) 2014 Ferran Marcet <fmarcet@2byte.es>
* 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
@ -1077,7 +1079,11 @@ if (empty($reshook))
$array_options = $lines[$i]->array_options; $array_options = $lines[$i]->array_options;
} }
$result = $object->addline($desc, $lines[$i]->subprice, $lines[$i]->qty, $lines[$i]->tva_tx, $lines[$i]->localtax1_tx, $lines[$i]->localtax2_tx, $lines[$i]->fk_product, $lines[$i]->remise_percent, $date_start, $date_end, 0, $lines[$i]->info_bits, $lines[$i]->fk_remise_except, 'HT', 0, $product_type, $lines[$i]->rang, $lines[$i]->special_code, $object->origin, $lines[$i]->rowid, $fk_parent_line, $lines[$i]->fk_fournprice, $lines[$i]->pa_ht, $label, $array_options, $lines[$i]->situation_percent, $lines[$i]->fk_prev_id, $lines[$i]->fk_unit); // View third's localtaxes for now
$localtax1_tx = get_localtax($lines[$i]->tva_tx, 1, $object->client);
$localtax2_tx = get_localtax($lines[$i]->tva_tx, 2, $object->client);
$result = $object->addline($desc, $lines[$i]->subprice, $lines[$i]->qty, $lines[$i]->tva_tx, $localtax1_tx, $localtax2_tx, $lines[$i]->fk_product, $lines[$i]->remise_percent, $date_start, $date_end, 0, $lines[$i]->info_bits, $lines[$i]->fk_remise_except, 'HT', 0, $product_type, $lines[$i]->rang, $lines[$i]->special_code, $object->origin, $lines[$i]->rowid, $fk_parent_line, $lines[$i]->fk_fournprice, $lines[$i]->pa_ht, $label, $array_options, $lines[$i]->situation_percent, $lines[$i]->fk_prev_id, $lines[$i]->fk_unit);
if ($result > 0) { if ($result > 0) {
$lineid = $result; $lineid = $result;
@ -1817,7 +1823,7 @@ if (empty($reshook))
if (! $error) { if (! $error) {
// Actions on extra fields (by external module or standard code) // Actions on extra fields (by external module or standard code)
// FIXME le hook fait double emploi avec le trigger !! // TODO le hook fait double emploi avec le trigger !!
$hookmanager->initHooks(array('invoicedao')); $hookmanager->initHooks(array('invoicedao'));
$parameters = array('id' => $object->id); $parameters = array('id' => $object->id);
$reshook = $hookmanager->executeHooks('insertExtraFields', $parameters, $object, $action); // Note that $action and $object may have been modified by $reshook = $hookmanager->executeHooks('insertExtraFields', $parameters, $object, $action); // Note that $action and $object may have been modified by
@ -1972,12 +1978,12 @@ if ($action == 'create')
print $soc->getNomUrl(1); print $soc->getNomUrl(1);
print '<input type="hidden" name="socid" value="' . $soc->id . '">'; print '<input type="hidden" name="socid" value="' . $soc->id . '">';
// Outstanding Bill // Outstanding Bill
$outstandigBills = $soc->get_OutstandingBill(); $outstandingBills = $soc->get_OutstandingBill();
print ' (' . $langs->trans('CurrentOutstandingBill') . ': '; print ' (' . $langs->trans('CurrentOutstandingBill') . ': ';
print price($outstandigBills, '', $langs, 0, 0, -1, $conf->currency); print price($outstandingBills, '', $langs, 0, 0, -1, $conf->currency);
if ($soc->outstanding_limit != '') if ($soc->outstanding_limit != '')
{ {
if ($outstandigBills > $soc->outstanding_limit) print img_warning($langs->trans("OutstandingBillReached")); if ($outstandingBills > $soc->outstanding_limit) print img_warning($langs->trans("OutstandingBillReached"));
print ' / ' . price($soc->outstanding_limit, '', $langs, 0, 0, -1, $conf->currency); print ' / ' . price($soc->outstanding_limit, '', $langs, 0, 0, -1, $conf->currency);
} }
print ')'; print ')';
@ -2366,15 +2372,25 @@ if ($action == 'create')
print '<input type="hidden" name="origin" value="' . $objectsrc->element . '">'; print '<input type="hidden" name="origin" value="' . $objectsrc->element . '">';
print '<input type="hidden" name="originid" value="' . $objectsrc->id . '">'; print '<input type="hidden" name="originid" value="' . $objectsrc->id . '">';
$newclassname = $classname; switch ($classname) {
if ($newclassname == 'Propal') case 'Propal':
$newclassname = 'CommercialProposal'; $newclassname = 'CommercialProposal';
elseif ($newclassname == 'Commande') break;
$newclassname = 'Order'; case 'Commande':
elseif ($newclassname == 'Expedition') $newclassname = 'Order';
$newclassname = 'Sending'; break;
elseif ($newclassname == 'Fichinter') case 'Expedition':
$newclassname = 'Intervention'; $newclassname = 'Sending';
break;
case 'Contrat':
$newclassname = 'Contract';
break;
case 'Fichinter':
$newclassname = 'Intervention';
break;
default:
$newclassname = $classname;
}
print '<tr><td>' . $langs->trans($newclassname) . '</td><td colspan="2">' . $objectsrc->getNomUrl(1); print '<tr><td>' . $langs->trans($newclassname) . '</td><td colspan="2">' . $objectsrc->getNomUrl(1);
//We check if Origin document has already an invoice attached to it //We check if Origin document has already an invoice attached to it
@ -2828,11 +2844,11 @@ if ($action == 'create')
print ' &nbsp; '; print ' &nbsp; ';
print '(<a href="' . DOL_URL_ROOT . '/compta/facture/list.php?socid=' . $object->socid . '">' . $langs->trans('OtherBills') . '</a>'; print '(<a href="' . DOL_URL_ROOT . '/compta/facture/list.php?socid=' . $object->socid . '">' . $langs->trans('OtherBills') . '</a>';
// Outstanding Bill // Outstanding Bill
$outstandigBills = $soc->get_OutstandingBill(); $outstandingBills = $soc->get_OutstandingBill();
print ' - ' . $langs->trans('CurrentOutstandingBill') . ': '; print ' - ' . $langs->trans('CurrentOutstandingBill') . ': ';
print price($outstandigBills, '', $langs, 0, 0, - 1, $conf->currency); print price($outstandingBills, '', $langs, 0, 0, - 1, $conf->currency);
if ($soc->outstanding_limit != '') { if ($soc->outstanding_limit != '') {
if ($outstandigBills > $soc->outstanding_limit) if ($outstandingBills > $soc->outstanding_limit)
print img_warning($langs->trans("OutstandingBillReached")); print img_warning($langs->trans("OutstandingBillReached"));
print ' / ' . price($soc->outstanding_limit); print ' / ' . price($soc->outstanding_limit);
} }
@ -3729,6 +3745,10 @@ if ($action == 'create')
} }
print '<br>'; print '<br>';
//Select mail models is same action as presend
if (GETPOST('modelselected')) {
$action = 'presend';
}
if ($action != 'prerelance' && $action != 'presend') if ($action != 'prerelance' && $action != 'presend')
{ {
print '<div class="fichecenter"><div class="fichehalfleft">'; print '<div class="fichecenter"><div class="fichehalfleft">';
@ -3949,6 +3969,7 @@ if ($action == 'create')
// Tableau des parametres complementaires du post // Tableau des parametres complementaires du post
$formmail->param['action'] = $action; $formmail->param['action'] = $action;
$formmail->param['models'] = $modelmail; $formmail->param['models'] = $modelmail;
$formmail->param['models_id']=GETPOST('modelmailselected','int');
$formmail->param['facid'] = $object->id; $formmail->param['facid'] = $object->id;
$formmail->param['returnurl'] = $_SERVER["PHP_SELF"] . '?id=' . $object->id; $formmail->param['returnurl'] = $_SERVER["PHP_SELF"] . '?id=' . $object->id;

View File

@ -5,6 +5,7 @@
* Copyright (C) 2010-2011 Juanjo Menent <jmenent@2byte.es> * Copyright (C) 2010-2011 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2012 Cedric Salvador <csalvador@gpcsolutions.fr> * Copyright (C) 2012 Cedric Salvador <csalvador@gpcsolutions.fr>
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro> * Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
* 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
@ -599,5 +600,21 @@ class FactureRec extends Facture
$this->usenewprice = 1; $this->usenewprice = 1;
} }
/**
* Function used to replace a thirdparty id with another one.
*
* @param DoliDB $db Database handler
* @param int $origin_id Old thirdparty id
* @param int $dest_id New thirdparty id
* @return bool
*/
public static function replaceThirdparty(DoliDB $db, $origin_id, $dest_id)
{
$tables = array(
'facture_rec'
);
return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables);
}
} }

View File

@ -137,7 +137,7 @@ class Facture extends CommonInvoice
var $specimen; var $specimen;
var $fac_rec; var $fac_rec;
//Incoterms //Incoterms
var $fk_incoterms; var $fk_incoterms;
var $location_incoterms; var $location_incoterms;
@ -563,7 +563,7 @@ class Facture extends CommonInvoice
$action='create'; $action='create';
// Actions on extra fields (by external module or standard code) // Actions on extra fields (by external module or standard code)
// FIXME le hook fait double emploi avec le trigger !! // TODO le hook fait double emploi avec le trigger !!
$hookmanager->initHooks(array('invoicedao')); $hookmanager->initHooks(array('invoicedao'));
$parameters=array('invoiceid'=>$this->id); $parameters=array('invoiceid'=>$this->id);
$reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks
@ -1045,9 +1045,9 @@ class Facture extends CommonInvoice
//Incoterms //Incoterms
$this->fk_incoterms = $obj->fk_incoterms; $this->fk_incoterms = $obj->fk_incoterms;
$this->location_incoterms = $obj->location_incoterms; $this->location_incoterms = $obj->location_incoterms;
$this->libelle_incoterms = $obj->libelle_incoterms; $this->libelle_incoterms = $obj->libelle_incoterms;
if ($this->statut == self::STATUS_DRAFT) $this->brouillon = 1; if ($this->statut == self::STATUS_DRAFT) $this->brouillon = 1;
// Retreive all extrafield for invoice // Retreive all extrafield for invoice
@ -3618,7 +3618,7 @@ class Facture extends CommonInvoice
$this->db->commit(); $this->db->commit();
return 1; return 1;
} else { } else {
$this->error = $this->db->error(); $this->error = $this->db->lasterror();
dol_syslog(get_class($this) . "::update Error setFinal " . $sql, LOG_ERR); dol_syslog(get_class($this) . "::update Error setFinal " . $sql, LOG_ERR);
$this->db->rollback(); $this->db->rollback();
return -1; return -1;
@ -3641,12 +3641,29 @@ class Facture extends CommonInvoice
$last = $res['max(situation_counter)']; $last = $res['max(situation_counter)'];
return ($last == $this->situation_counter); return ($last == $this->situation_counter);
} else { } else {
$this->error = $this->db->error(); $this->error = $this->db->lasterror();
dol_syslog(get_class($this) . "::select Error " . $this->error, LOG_ERR); dol_syslog(get_class($this) . "::select Error " . $this->error, LOG_ERR);
$this->db->rollback(); $this->db->rollback();
return -1; return -1;
} }
} }
/**
* Function used to replace a thirdparty id with another one.
*
* @param DoliDB $db Database handler
* @param int $origin_id Old thirdparty id
* @param int $dest_id New thirdparty id
* @return bool
*/
public static function replaceThirdparty(DoliDB $db, $origin_id, $dest_id)
{
$tables = array(
'facture'
);
return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables);
}
} }
/** /**

View File

@ -1,7 +1,7 @@
<?php <?php
/* Copyright (C) 2002-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2002-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com> * Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
* Copyright (C) 2004-2014 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004-2015 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com> * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2012 Cédric Salvador <csalvador@gpcsolutions.fr> * Copyright (C) 2012 Cédric Salvador <csalvador@gpcsolutions.fr>
* Copyright (C) 2014 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr> * Copyright (C) 2014 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
@ -24,17 +24,19 @@
*/ */
/** /**
* \file htdocs/compta/facture/impayees.php * \file htdocs/compta/facture/mergepdftool.php
* \ingroup facture * \ingroup facture
* \brief Page to list and build liste of unpaid invoices * \brief Page to list and build doc of selected invoices
*/ */
require '../../main.inc.php'; require '../../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
$langs->load("mails"); $langs->load("mails");
$langs->load("bills"); $langs->load("bills");
@ -44,6 +46,18 @@ $action = GETPOST('action','alpha');
$option = GETPOST('option'); $option = GETPOST('option');
$mode=GETPOST('mode'); $mode=GETPOST('mode');
$builddoc_generatebutton=GETPOST('builddoc_generatebutton'); $builddoc_generatebutton=GETPOST('builddoc_generatebutton');
$month = GETPOST("month","int");
$year = GETPOST("year","int");
$filter = GETPOST("filtre");
if (GETPOST('button_search'))
{
$filter=GETPOST('filtre',2);
if ($filter != 'payed:0') $option='';
}
if ($option == 'late') $filter = 'paye:0';
if ($option == 'unpaidall') $filter = 'paye:0';
if ($mode == 'sendremind' && $filter == '') $filter = 'paye:0';
if ($filter == '') $filter = 'paye:0';
// Security check // Security check
if ($user->societe_id) $socid=$user->societe_id; if ($user->societe_id) $socid=$user->societe_id;
@ -54,6 +68,20 @@ if (! $user->rights->societe->client->voir || $socid) $diroutputpdf.='/private/'
$resultmasssend=''; $resultmasssend='';
if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both test must be present to be compatible with all browsers
{
$search_ref="";
$search_ref_supplier="";
$search_label="";
$search_company="";
$search_amount_no_tax="";
$search_amount_all_tax="";
$year="";
$month="";
$filter="";
}
/* /*
* Action * Action
@ -297,8 +325,14 @@ if ($action == "builddoc" && $user->rights->facture->lire && ! GETPOST('button_s
dol_mkdir($diroutputpdf); dol_mkdir($diroutputpdf);
// Save merged file // Save merged file
$filename=strtolower(dol_sanitizeFileName($langs->transnoentities("Unpaid"))); $filename=strtolower(dol_sanitizeFileName($langs->transnoentities("Invoices")));
if ($option=='late') $filename.='_'.strtolower(dol_sanitizeFileName($langs->transnoentities("Late"))); if ($filter=='paye:0')
{
if ($option=='late') $filename.='_'.strtolower(dol_sanitizeFileName($langs->transnoentities("Unpaid"))).'_'.strtolower(dol_sanitizeFileName($langs->transnoentities("Late")));
else $filename.='_'.strtolower(dol_sanitizeFileName($langs->transnoentities("Unpaid")));
}
if ($year) $filename.='_'.$year;
if ($month) $filename.='_'.$month;
if ($pagecount) if ($pagecount)
{ {
$now=dol_now(); $now=dol_now();
@ -306,6 +340,9 @@ if ($action == "builddoc" && $user->rights->facture->lire && ! GETPOST('button_s
$pdf->Output($file,'F'); $pdf->Output($file,'F');
if (! empty($conf->global->MAIN_UMASK)) if (! empty($conf->global->MAIN_UMASK))
@chmod($file, octdec($conf->global->MAIN_UMASK)); @chmod($file, octdec($conf->global->MAIN_UMASK));
$langs->load("exports");
setEventMessage($langs->trans('FileSuccessfullyBuilt',$filename.'_'.dol_print_date($now,'dayhourlog')));
} }
else else
{ {
@ -340,9 +377,9 @@ if ($action == 'remove_file')
$form = new Form($db); $form = new Form($db);
$formfile = new FormFile($db); $formfile = new FormFile($db);
$formother = new FormOther($db);
$title=$langs->trans("BillsCustomersUnpaid"); $title=$langs->trans("MergingPDFTool");
if ($option=='late') $title=$langs->trans("BillsCustomersUnpaid");
llxHeader('',$title); llxHeader('',$title);
@ -410,14 +447,15 @@ $sql.= ",".MAIN_DB_PREFIX."facture as f";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON f.rowid=pf.fk_facture "; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON f.rowid=pf.fk_facture ";
$sql.= " WHERE f.fk_soc = s.rowid"; $sql.= " WHERE f.fk_soc = s.rowid";
$sql.= " AND f.entity = ".$conf->entity; $sql.= " AND f.entity = ".$conf->entity;
$sql.= " AND f.type IN (0,1,3,5) AND f.fk_statut = 1"; $sql.= " AND f.type IN (0,1,3,5)";
$sql.= " AND f.paye = 0"; if ($filter == 'paye:0') $sql.= " AND f.fk_statut = 1";
//$sql.= " AND f.paye = 0";
if ($option == 'late') $sql.=" AND f.date_lim_reglement < '".$db->idate(dol_now() - $conf->facture->client->warning_delay)."'"; if ($option == 'late') $sql.=" AND f.date_lim_reglement < '".$db->idate(dol_now() - $conf->facture->client->warning_delay)."'";
if (! $user->rights->societe->client->voir && ! $socid) $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; if (! $user->rights->societe->client->voir && ! $socid) $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
if (! empty($socid)) $sql .= " AND s.rowid = ".$socid; if (! empty($socid)) $sql .= " AND s.rowid = ".$socid;
if (GETPOST('filtre')) if ($filter && $filter != -1) // GETPOST('filtre') may be a string
{ {
$filtrearr = explode(",", GETPOST('filtre')); $filtrearr = explode(",", $filter);
foreach ($filtrearr as $fil) foreach ($filtrearr as $fil)
{ {
$filt = explode(":", $fil); $filt = explode(":", $fil);
@ -427,10 +465,21 @@ if (GETPOST('filtre'))
if ($search_ref) $sql .= " AND f.facnumber LIKE '%".$db->escape($search_ref)."%'"; if ($search_ref) $sql .= " AND f.facnumber LIKE '%".$db->escape($search_ref)."%'";
if ($search_refcustomer) $sql .= " AND f.ref_client LIKE '%".$db->escape($search_refcustomer)."%'"; if ($search_refcustomer) $sql .= " AND f.ref_client LIKE '%".$db->escape($search_refcustomer)."%'";
if ($search_societe) $sql .= " AND s.nom LIKE '%".$db->escape($search_societe)."%'"; if ($search_societe) $sql .= " AND s.nom LIKE '%".$db->escape($search_societe)."%'";
if ($search_paymentmode) $sql .= " AND f.fk_mode_reglement = ".$search_paymentmode.""; if ($search_paymentmode) $sql .= " AND f.fk_mode_reglement = ".$search_paymentmode."";
if ($search_montant_ht) $sql .= " AND f.total = '".$db->escape($search_montant_ht)."'"; if ($search_montant_ht) $sql .= " AND f.total = '".$db->escape($search_montant_ht)."'";
if ($search_montant_ttc) $sql .= " AND f.total_ttc = '".$db->escape($search_montant_ttc)."'"; if ($search_montant_ttc) $sql .= " AND f.total_ttc = '".$db->escape($search_montant_ttc)."'";
if (GETPOST('sf_ref')) $sql .= " AND f.facnumber LIKE '%".$db->escape(GETPOST('sf_ref'))."%'"; if (GETPOST('sf_ref')) $sql .= " AND f.facnumber LIKE '%".$db->escape(GETPOST('sf_ref'))."%'";
if ($month > 0)
{
if ($year > 0)
$sql.= " AND f.datef BETWEEN '".$db->idate(dol_get_first_day($year,$month,false))."' AND '".$db->idate(dol_get_last_day($year,$month,false))."'";
else
$sql.= " AND date_format(f.datef, '%m') = '$month'";
}
else if ($year > 0)
{
$sql.= " AND f.datef BETWEEN '".$db->idate(dol_get_first_day($year,1,false))."' AND '".$db->idate(dol_get_last_day($year,12,false))."'";
}
$sql.= " GROUP BY s.nom, s.rowid, s.email, f.rowid, f.facnumber, f.ref_client, f.increment, f.total, f.tva, f.total_ttc, f.localtax1, f.localtax2, f.revenuestamp,"; $sql.= " GROUP BY s.nom, s.rowid, s.email, f.rowid, f.facnumber, f.ref_client, f.increment, f.total, f.tva, f.total_ttc, f.localtax1, f.localtax2, f.revenuestamp,";
$sql.= " f.datef, f.date_lim_reglement, f.paye, f.fk_statut, f.type, fk_mode_reglement"; $sql.= " f.datef, f.date_lim_reglement, f.paye, f.fk_statut, f.type, fk_mode_reglement";
if (! $user->rights->societe->client->voir && ! $socid) $sql .= ", sc.fk_soc, sc.fk_user "; if (! $user->rights->societe->client->voir && ! $socid) $sql .= ", sc.fk_soc, sc.fk_user ";
@ -438,7 +487,7 @@ $sql.= " ORDER BY ";
$listfield=explode(',',$sortfield); $listfield=explode(',',$sortfield);
foreach ($listfield as $key => $value) $sql.=$listfield[$key]." ".$sortorder.","; foreach ($listfield as $key => $value) $sql.=$listfield[$key]." ".$sortorder.",";
$sql.= " f.facnumber DESC"; $sql.= " f.facnumber DESC";
//print $sql;
//$sql .= $db->plimit($limit+1,$offset); //$sql .= $db->plimit($limit+1,$offset);
$resql = $db->query($sql); $resql = $db->query($sql);
@ -454,30 +503,36 @@ if ($resql)
$param=""; $param="";
$param.=(! empty($socid)?"&amp;socid=".$socid:""); $param.=(! empty($socid)?"&amp;socid=".$socid:"");
$param.=(! empty($option)?"&amp;option=".$option:"");
if ($search_ref) $param.='&amp;search_ref='.urlencode($search_ref); if ($search_ref) $param.='&amp;search_ref='.urlencode($search_ref);
if ($search_refcustomer) $param.='&amp;search_ref='.urlencode($search_refcustomer); if ($search_refcustomer) $param.='&amp;search_ref='.urlencode($search_refcustomer);
if ($search_societe) $param.='&amp;search_societe='.urlencode($search_societe); if ($search_societe) $param.='&amp;search_societe='.urlencode($search_societe);
if ($search_societe) $param.='&amp;search_paymentmode='.urlencode($search_paymentmode); if ($search_societe) $param.='&amp;search_paymentmode='.urlencode($search_paymentmode);
if ($search_montant_ht) $param.='&amp;search_montant_ht='.urlencode($search_montant_ht); if ($search_montant_ht) $param.='&amp;search_montant_ht='.urlencode($search_montant_ht);
if ($search_montant_ttc) $param.='&amp;search_montant_ttc='.urlencode($search_montant_ttc); if ($search_montant_ttc) $param.='&amp;search_montant_ttc='.urlencode($search_montant_ttc);
if ($late) $param.='&amp;late='.urlencode($late); if ($late) $param.='&amp;late='.urlencode($late);
if ($mode) $param.='&amp;mode='.urlencode($mode);
$urlsource=$_SERVER['PHP_SELF'].'?sortfield='.$sortfield.'&sortorder='.$sortorder; $urlsource=$_SERVER['PHP_SELF'].'?sortfield='.$sortfield.'&sortorder='.$sortorder;
$urlsource.=str_replace('&amp;','&',$param); $urlsource.=str_replace('&amp;','&',$param);
$titre=(! empty($socid)?$langs->trans("BillsCustomersUnpaidForCompany",$soc->name):$langs->trans("BillsCustomersUnpaid")); //$titre=(! empty($socid)?$langs->trans("BillsCustomersUnpaidForCompany",$soc->name):$langs->trans("BillsCustomersUnpaid"));
$titre=(! empty($socid)?$langs->trans("BillsCustomersForCompany",$soc->name):$langs->trans("BillsCustomers"));
if ($option == 'late') $titre.=' ('.$langs->trans("Late").')'; if ($option == 'late') $titre.=' ('.$langs->trans("Late").')';
else $titre.=' ('.$langs->trans("All").')'; //else $titre.=' ('.$langs->trans("All").')';
$link=''; $link='';
if (empty($option)) $link='<a href="'.$_SERVER["PHP_SELF"].'?option=late">'.$langs->trans("ShowUnpaidLateOnly").'</a>'; if (empty($option) || $option == 'late') $link.=($link?' - ':'').'<a href="'.$_SERVER["PHP_SELF"].'?option=unpaidall'.$param.'">'.$langs->trans("ShowUnpaidAll").'</a>';
elseif ($option == 'late') $link='<a href="'.$_SERVER["PHP_SELF"].'">'.$langs->trans("ShowUnpaidAll").'</a>'; if (empty($option) || $option == 'unpaidall') $link.=($link?' - ':'').'<a href="'.$_SERVER["PHP_SELF"].'?option=late'.$param.'">'.$langs->trans("ShowUnpaidLateOnly").'</a>';
$param.=(! empty($option)?"&amp;option=".$option:"");
print_fiche_titre($titre,$link); print_fiche_titre($titre,$link);
//print_barre_liste($titre,$page,$_SERVER["PHP_SELF"],$param,$sortfield,$sortorder,'',0); // We don't want pagination on this page //print_barre_liste($titre,$page,$_SERVER["PHP_SELF"],$param,$sortfield,$sortorder,'',0); // We don't want pagination on this page
print '<form id="form_unpaid" method="POST" action="'.$_SERVER["PHP_SELF"].'?sortfield='. $sortfield .'&sortorder='. $sortorder .'">'; print '<form id="form_unpaid" method="POST" action="'.$_SERVER["PHP_SELF"].'?sortfield='. $sortfield .'&sortorder='. $sortorder .'">';
if (GETPOST('modelselected')) {
$action = 'presend';
}
if (! empty($mode) && $action == 'presend') if (! empty($mode) && $action == 'presend')
{ {
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'; include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
@ -520,6 +575,7 @@ if ($resql)
// Tableau des parametres complementaires du post // Tableau des parametres complementaires du post
$formmail->param['action']=$action; $formmail->param['action']=$action;
$formmail->param['models']=$modelmail; $formmail->param['models']=$modelmail;
$formmail->param['models_id']=GETPOST('modelmailselected','int');
$formmail->param['facid']=$object->id; $formmail->param['facid']=$object->id;
$formmail->param['returnurl']=$_SERVER["PHP_SELF"].'?id='.$object->id; $formmail->param['returnurl']=$_SERVER["PHP_SELF"].'?id='.$object->id;
@ -574,7 +630,11 @@ if ($resql)
print '<td class="liste_titre">'; print '<td class="liste_titre">';
print '<input class="flat" size="6" type="text" name="search_refcustomer" value="'.$search_refcustomer.'">'; print '<input class="flat" size="6" type="text" name="search_refcustomer" value="'.$search_refcustomer.'">';
print '</td>'; print '</td>';
print '<td class="liste_titre">&nbsp;</td>'; print '<td class="liste_titre" align="center">';
print '<input class="flat" type="text" size="1" maxlength="2" name="month" value="'.$month.'">';
$syear = $year;
$formother->select_year($syear?$syear:-1,'year',1, 20, 5);
print '</td>';
print '<td class="liste_titre">&nbsp;</td>'; print '<td class="liste_titre">&nbsp;</td>';
print '<td class="liste_titre" align="left"><input class="flat" type="text" size="10" name="search_societe" value="'.dol_escape_htmltag($search_societe).'"></td>'; print '<td class="liste_titre" align="left"><input class="flat" type="text" size="10" name="search_societe" value="'.dol_escape_htmltag($search_societe).'"></td>';
print '<td class="liste_titre" align="left">'; print '<td class="liste_titre" align="left">';
@ -586,21 +646,22 @@ if ($resql)
print '<td class="liste_titre">&nbsp;</td>'; print '<td class="liste_titre">&nbsp;</td>';
print '<td class="liste_titre">&nbsp;</td>'; print '<td class="liste_titre">&nbsp;</td>';
print '<td class="liste_titre" align="right">'; print '<td class="liste_titre" align="right">';
$liststatus=array('paye:0'=>$langs->trans("Unpaid"), 'paye:1'=>$langs->trans("Paid"));
print $form->selectarray('filtre', $liststatus, $filter, 1);
print '</td>';
print '<td class="liste_titre" align="center">';
print '<input type="image" class="liste_titre" name="button_search" src="'.img_picto($langs->trans("Search"),'search.png','','',1).'" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">'; print '<input type="image" class="liste_titre" name="button_search" src="'.img_picto($langs->trans("Search"),'search.png','','',1).'" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">';
print '<input type="image" class="liste_titre" name="button_removefilter" src="'.img_picto($langs->trans("Search"),'searchclear.png','','',1).'" value="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'" title="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'">'; print '<input type="image" class="liste_titre" name="button_removefilter" src="'.img_picto($langs->trans("Search"),'searchclear.png','','',1).'" value="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'" title="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'">';
print '</td>'; print '<br>';
if (empty($mode)) if (empty($mode))
{ {
print '<td class="liste_titre" align="center">';
if ($conf->use_javascript_ajax) print '<a href="#" id="checkall">'.$langs->trans("All").'</a> / <a href="#" id="checknone">'.$langs->trans("None").'</a>'; if ($conf->use_javascript_ajax) print '<a href="#" id="checkall">'.$langs->trans("All").'</a> / <a href="#" id="checknone">'.$langs->trans("None").'</a>';
print '</td>';
} }
else else
{ {
print '<td class="liste_titre" align="center">';
if ($conf->use_javascript_ajax) print '<a href="#" id="checkallsend">'.$langs->trans("All").'</a> / <a href="#" id="checknonesend">'.$langs->trans("None").'</a>'; if ($conf->use_javascript_ajax) print '<a href="#" id="checkallsend">'.$langs->trans("All").'</a> / <a href="#" id="checknonesend">'.$langs->trans("None").'</a>';
print '</td>';
} }
print '</td>';
print "</tr>\n"; print "</tr>\n";
if ($num > 0) if ($num > 0)

View File

@ -2,6 +2,7 @@
/* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2013 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004-2013 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com> * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2015 Juanjo Menent <jmenent@2byte.es>
* *
* 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
@ -321,7 +322,7 @@ if (! empty($conf->facture->enabled) && $user->rights->facture->lire)
$sql.= " AND f.entity = ".$conf->entity; $sql.= " AND f.entity = ".$conf->entity;
if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
if ($socid) $sql.= " AND f.fk_soc = ".$socid; if ($socid) $sql.= " AND f.fk_soc = ".$socid;
$sql.= " GROUP BY f.rowid, f.facnumber, f.fk_statut, f.type, f.total, f.total_ttc, f.paye, f.tms, f.date_lim_reglement, s.nom, s.rowid"; $sql.= " GROUP BY f.rowid, f.facnumber, f.fk_statut, f.type, f.total, f.tva, f.total_ttc, f.paye, f.tms, f.date_lim_reglement, s.nom, s.rowid, s.code_client";
$sql.= " ORDER BY f.tms DESC "; $sql.= " ORDER BY f.tms DESC ";
$sql.= $db->plimit($max, 0); $sql.= $db->plimit($max, 0);
@ -426,7 +427,7 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture-
$sql.= " AND ff.entity = ".$conf->entity; $sql.= " AND ff.entity = ".$conf->entity;
if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".$user->id; if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".$user->id;
if ($socid) $sql.= " AND ff.fk_soc = ".$socid; if ($socid) $sql.= " AND ff.fk_soc = ".$socid;
$sql.= " GROUP BY ff.rowid, ff.ref, ff.fk_statut, ff.libelle, ff.total_ht, ff.tva, ff.total_ttc, ff.tms, ff.paye, s.nom, s.rowid"; $sql.= " GROUP BY ff.rowid, ff.ref, ff.fk_statut, ff.libelle, ff.total_ht, ff.tva, ff.total_tva, ff.total_ttc, ff.tms, ff.paye, s.nom, s.rowid, s.code_fournisseur";
$sql.= " ORDER BY ff.tms DESC "; $sql.= " ORDER BY ff.tms DESC ";
$sql.= $db->plimit($max, 0); $sql.= $db->plimit($max, 0);
@ -658,7 +659,7 @@ if (! empty($conf->facture->enabled) && ! empty($conf->commande->enabled) && $us
if ($socid) $sql.= " AND c.fk_soc = ".$socid; if ($socid) $sql.= " AND c.fk_soc = ".$socid;
$sql.= " AND c.fk_statut = 3"; $sql.= " AND c.fk_statut = 3";
$sql.= " AND c.facture = 0"; $sql.= " AND c.facture = 0";
$sql.= " GROUP BY s.nom, s.rowid, c.rowid, c.ref, c.facture, c.fk_statut, c.total_ht, c.total_ttc"; $sql.= " GROUP BY s.nom, s.rowid, s.code_client, c.rowid, c.ref, c.facture, c.fk_statut, c.tva, c.total_ht, c.total_ttc";
$resql = $db->query($sql); $resql = $db->query($sql);
if ( $resql ) if ( $resql )
@ -762,7 +763,7 @@ if (! empty($conf->facture->enabled) && $user->rights->facture->lire)
$sql.= " AND f.entity = ".$conf->entity; $sql.= " AND f.entity = ".$conf->entity;
if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
if ($socid) $sql.= " AND f.fk_soc = ".$socid; if ($socid) $sql.= " AND f.fk_soc = ".$socid;
$sql.= " GROUP BY f.rowid, f.facnumber, f.fk_statut, f.datef, f.type, f.total, f.total_ttc, f.paye, f.tms, f.date_lim_reglement, s.nom, s.rowid"; $sql.= " GROUP BY f.rowid, f.facnumber, f.fk_statut, f.datef, f.type, f.total, f.tva, f.total_ttc, f.paye, f.tms, f.date_lim_reglement, s.nom, s.rowid, s.code_client";
$sql.= " ORDER BY f.datef ASC, f.facnumber ASC"; $sql.= " ORDER BY f.datef ASC, f.facnumber ASC";
$resql = $db->query($sql); $resql = $db->query($sql);
@ -876,8 +877,8 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture-
$sql.= " AND ff.fk_statut = 1"; $sql.= " AND ff.fk_statut = 1";
if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".$user->id; if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".$user->id;
if ($socid) $sql.= " AND ff.fk_soc = ".$socid; if ($socid) $sql.= " AND ff.fk_soc = ".$socid;
$sql.= " GROUP BY ff.rowid, ff.ref, ff.fk_statut, ff.libelle, ff.total_ht, ff.tva, ff.total_ttc, ff.paye,"; $sql.= " GROUP BY ff.rowid, ff.ref, ff.fk_statut, ff.libelle, ff.total_ht, ff.tva, ff.total_tva, ff.total_ttc, ff.paye,";
$sql.= " s.nom, s.rowid"; $sql.= " s.nom, s.rowid, s.code_client, s.code_fournisseur";
$resql=$db->query($sql); $resql=$db->query($sql);
if ($resql) if ($resql)

View File

@ -109,13 +109,21 @@ class Localtax extends CommonObject
if ($result < 0) $error++; if ($result < 0) $error++;
// End call triggers // End call triggers
//FIXME: Add rollback if trigger fail if (! $error)
{
return $this->id; $this->db->commit();
return $this->id;
}
else
{
$this->db->rollback();
return -1;
}
} }
else else
{ {
$this->error="Error ".$this->db->lasterror(); $this->error="Error ".$this->db->lasterror();
$this->db->rollback();
return -1; return -1;
} }
} }
@ -141,7 +149,9 @@ class Localtax extends CommonObject
$this->fk_user_creat=trim($this->fk_user_creat); $this->fk_user_creat=trim($this->fk_user_creat);
$this->fk_user_modif=trim($this->fk_user_modif); $this->fk_user_modif=trim($this->fk_user_modif);
// Update request $this->db->begin();
// Update request
$sql = "UPDATE ".MAIN_DB_PREFIX."localtax SET"; $sql = "UPDATE ".MAIN_DB_PREFIX."localtax SET";
$sql.= " localtaxtype=".$this->ltt.","; $sql.= " localtaxtype=".$this->ltt.",";
$sql.= " tms=".$this->db->idate($this->tms).","; $sql.= " tms=".$this->db->idate($this->tms).",";
@ -160,20 +170,27 @@ class Localtax extends CommonObject
if (! $resql) if (! $resql)
{ {
$this->error="Error ".$this->db->lasterror(); $this->error="Error ".$this->db->lasterror();
return -1; $error++;
} }
if (! $notrigger) if (! $error && ! $notrigger)
{ {
// Call trigger // Call trigger
$result=$this->call_trigger('LOCALTAX_MODIFY',$user); $result=$this->call_trigger('LOCALTAX_MODIFY',$user);
if ($result < 0) $error++; if ($result < 0) $error++;
// End call triggers // End call triggers
//FIXME: Add rollback if trigger fail
} }
return 1; if (! $error)
{
$this->db->commit();
return 1;
}
else
{
$this->db->rollback();
return -1;
}
} }

View File

@ -70,9 +70,10 @@ class Paiement extends CommonObject
* Load payment from database * Load payment from database
* *
* @param int $id Id of payment to get * @param int $id Id of payment to get
* @param int $ref Ref of payment to get (same as $id)
* @return int <0 if KO, 0 if not found, >0 if OK * @return int <0 if KO, 0 if not found, >0 if OK
*/ */
function fetch($id) function fetch($id, $ref='')
{ {
$sql = 'SELECT p.rowid, p.datep as dp, p.amount, p.statut, p.fk_bank,'; $sql = 'SELECT p.rowid, p.datep as dp, p.amount, p.statut, p.fk_bank,';
$sql.= ' c.code as type_code, c.libelle as type_libelle,'; $sql.= ' c.code as type_code, c.libelle as type_libelle,';
@ -81,7 +82,10 @@ class Paiement extends CommonObject
$sql.= ' FROM '.MAIN_DB_PREFIX.'c_paiement as c, '.MAIN_DB_PREFIX.'paiement as p'; $sql.= ' FROM '.MAIN_DB_PREFIX.'c_paiement as c, '.MAIN_DB_PREFIX.'paiement as p';
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'bank as b ON p.fk_bank = b.rowid '; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'bank as b ON p.fk_bank = b.rowid ';
$sql.= ' WHERE p.fk_paiement = c.id'; $sql.= ' WHERE p.fk_paiement = c.id';
$sql.= ' AND p.rowid = '.$id; if ($ref)
$sql.= ' AND p.rowid = '.$ref;
else
$sql.= ' AND p.rowid = '.$id;
dol_syslog(get_class($this)."::fetch", LOG_DEBUG); dol_syslog(get_class($this)."::fetch", LOG_DEBUG);
$result = $this->db->query($sql); $result = $this->db->query($sql);

View File

@ -2,6 +2,7 @@
/* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2005-2009 Regis Houssin <regis.houssin@capnetworks.com> * Copyright (C) 2005-2009 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2010-2011 Juanjo Menent <jmenent@2byte.es> * Copyright (C) 2010-2011 Juanjo Menent <jmenent@2byte.es>
* 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
@ -61,7 +62,7 @@ class LignePrelevement
* Recupere l'objet prelevement * Recupere l'objet prelevement
* *
* @param int $rowid id de la facture a recuperer * @param int $rowid id de la facture a recuperer
* @return void|int * @return integer
*/ */
function fetch($rowid) function fetch($rowid)
{ {
@ -156,5 +157,22 @@ class LignePrelevement
if ($statut==3) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]),'statut8'); if ($statut==3) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]),'statut8');
} }
} }
/**
* Function used to replace a thirdparty id with another one.
*
* @param DoliDB $db Database handler
* @param int $origin_id Old thirdparty id
* @param int $dest_id New thirdparty id
* @return bool
*/
public static function replaceThirdparty(DoliDB $db, $origin_id, $dest_id)
{
$tables = array(
'prelevement_lignes'
);
return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables);
}
} }

View File

@ -95,6 +95,8 @@ class PaymentSalary extends CommonObject
return -1; return -1;
} }
$this->db->begin();
// Update request // Update request
$sql = "UPDATE ".MAIN_DB_PREFIX."payment_salary SET"; $sql = "UPDATE ".MAIN_DB_PREFIX."payment_salary SET";
@ -129,11 +131,18 @@ class PaymentSalary extends CommonObject
$result=$this->call_trigger('PAYMENT_SALARY_MODIFY',$user); $result=$this->call_trigger('PAYMENT_SALARY_MODIFY',$user);
if ($result < 0) $error++; if ($result < 0) $error++;
// End call triggers // End call triggers
//FIXME: Add rollback if trigger fail
} }
return 1; if (! $error)
{
$this->db->commit();
return 1;
}
else
{
$this->db->rollback();
return -1;
}
} }

View File

@ -83,7 +83,7 @@ $form = new Form($db);
$salstatic = new PaymentSalary($db); $salstatic = new PaymentSalary($db);
$userstatic = new User($db); $userstatic = new User($db);
$sql = "SELECT u.rowid as uid, u.lastname, u.firstname, u.login, u.email, u.admin, u.salary as current_salary, u.fk_societe as fk_soc,"; $sql = "SELECT u.rowid as uid, u.lastname, u.firstname, u.login, u.email, u.admin, u.salary as current_salary, u.fk_soc as fk_soc,";
$sql.= " s.rowid, s.fk_user, s.amount, s.salary, s.label, s.datev as dm, s.fk_typepayment as type, s.num_payment,"; $sql.= " s.rowid, s.fk_user, s.amount, s.salary, s.label, s.datev as dm, s.fk_typepayment as type, s.num_payment,";
$sql.= " pst.code as payment_code"; $sql.= " pst.code as payment_code";
$sql.= " FROM ".MAIN_DB_PREFIX."payment_salary as s"; $sql.= " FROM ".MAIN_DB_PREFIX."payment_salary as s";

View File

@ -88,8 +88,8 @@ llxHeader("",$langs->trans("SocialContribution"),$help_url);
if ($object->id) if ($object->id)
{ {
$alreadypayed=$object->getSommePaiement(); $alreadypayed=$object->getSommePaiement();
$head=tax_prepare_head($object, $user); $head=tax_prepare_head($object);
dol_fiche_head($head, 'documents', $langs->trans("SocialContribution"), 0, 'bill'); dol_fiche_head($head, 'documents', $langs->trans("SocialContribution"), 0, 'bill');

View File

@ -183,7 +183,7 @@ if ($modecompta == 'CREANCES-DETTES') {
$sql.= " FROM ".MAIN_DB_PREFIX."facture as f, ".MAIN_DB_PREFIX."societe as s"; $sql.= " FROM ".MAIN_DB_PREFIX."facture as f, ".MAIN_DB_PREFIX."societe as s";
if ($selected_cat === -2) // Without any category if ($selected_cat === -2) // Without any category
{ {
$sql.= " LEFT OUTER JOIN ".MAIN_DB_PREFIX."categorie_societe as cs ON s.rowid = cs.fk_societe"; $sql.= " LEFT OUTER JOIN ".MAIN_DB_PREFIX."categorie_societe as cs ON s.rowid = cs.fk_soc";
} }
else if ($selected_cat) // Into a specific category else if ($selected_cat) // Into a specific category
{ {
@ -201,13 +201,13 @@ if ($modecompta == 'CREANCES-DETTES') {
} }
if ($selected_cat === -2) // Without any category if ($selected_cat === -2) // Without any category
{ {
$sql.=" AND cs.fk_societe is null"; $sql.=" AND cs.fk_soc is null";
} }
else if ($selected_cat) { // Into a specific category else if ($selected_cat) { // Into a specific category
$sql.= " AND (c.rowid = ".$selected_cat; $sql.= " AND (c.rowid = ".$selected_cat;
if ($subcat) $sql.=" OR c.fk_parent = " . $selected_cat; if ($subcat) $sql.=" OR c.fk_parent = " . $selected_cat;
$sql.= ")"; $sql.= ")";
$sql.= " AND cs.fk_categorie = c.rowid AND cs.fk_societe = s.rowid"; $sql.= " AND cs.fk_categorie = c.rowid AND cs.fk_soc = s.rowid";
} }
} else { } else {
/* /*
@ -221,7 +221,7 @@ if ($modecompta == 'CREANCES-DETTES') {
$sql.= ", ".MAIN_DB_PREFIX."societe as s"; $sql.= ", ".MAIN_DB_PREFIX."societe as s";
if ($selected_cat === -2) // Without any category if ($selected_cat === -2) // Without any category
{ {
$sql.= " LEFT OUTER JOIN ".MAIN_DB_PREFIX."categorie_societe as cs ON s.rowid = cs.fk_societe"; $sql.= " LEFT OUTER JOIN ".MAIN_DB_PREFIX."categorie_societe as cs ON s.rowid = cs.fk_soc";
} }
else if ($selected_cat) // Into a specific category else if ($selected_cat) // Into a specific category
{ {
@ -235,13 +235,13 @@ if ($modecompta == 'CREANCES-DETTES') {
} }
if ($selected_cat === -2) // Without any category if ($selected_cat === -2) // Without any category
{ {
$sql.=" AND cs.fk_societe is null"; $sql.=" AND cs.fk_soc is null";
} }
else if ($selected_cat) { // Into a specific category else if ($selected_cat) { // Into a specific category
$sql.= " AND (c.rowid = ".$selected_cat; $sql.= " AND (c.rowid = ".$selected_cat;
if ($subcat) $sql.=" OR c.fk_parent = " . $selected_cat; if ($subcat) $sql.=" OR c.fk_parent = " . $selected_cat;
$sql.= ")"; $sql.= ")";
$sql.= " AND cs.fk_categorie = c.rowid AND cs.fk_societe = s.rowid"; $sql.= " AND cs.fk_categorie = c.rowid AND cs.fk_soc = s.rowid";
} }
} }
$sql.= " AND f.entity = ".$conf->entity; $sql.= " AND f.entity = ".$conf->entity;

View File

@ -298,7 +298,7 @@ for ($mois = 1+$nb_mois_decalage ; $mois <= 12+$nb_mois_decalage ; $mois++)
if ($annee_decalage != $year_end) print '<td width="15">&nbsp;</td>'; if ($annee_decalage != $year_end) print '<td width="15">&nbsp;</td>';
} }
$total_ht[$annee]+=!empty($cum_ht[$case]) ? $cum_ht[$case] : 0;; $total_ht[$annee]+=!empty($cum_ht[$case]) ? $cum_ht[$case] : 0;
$total[$annee]+=$cum[$case]; $total[$annee]+=$cum[$case];
} }

View File

@ -89,7 +89,9 @@ class Tva extends CommonObject
// Check parameters // Check parameters
// Put here code to add control on parameters values // Put here code to add control on parameters values
// Insert request $this->db->begin();
// Insert request
$sql = "INSERT INTO ".MAIN_DB_PREFIX."tva("; $sql = "INSERT INTO ".MAIN_DB_PREFIX."tva(";
$sql.= "tms,"; $sql.= "tms,";
$sql.= "datep,"; $sql.= "datep,";
@ -126,13 +128,22 @@ class Tva extends CommonObject
if ($result < 0) $error++; if ($result < 0) $error++;
// End call triggers // End call triggers
//FIXME: Add rollback if trigger fail if (! $error)
return $this->id; {
$this->db->commit();
return $this->id;
}
else
{
$this->db->rollback();
return -1;
}
} }
else else
{ {
$this->error="Error ".$this->db->lasterror(); $this->error="Error ".$this->db->lasterror();
return -1; $this->db->rollback();
return -1;
} }
} }
@ -160,7 +171,9 @@ class Tva extends CommonObject
// Check parameters // Check parameters
// Put here code to add control on parameters values // Put here code to add control on parameters values
// Update request $this->db->begin();
// Update request
$sql = "UPDATE ".MAIN_DB_PREFIX."tva SET"; $sql = "UPDATE ".MAIN_DB_PREFIX."tva SET";
$sql.= " tms=".$this->db->idate($this->tms).","; $sql.= " tms=".$this->db->idate($this->tms).",";
@ -181,20 +194,27 @@ class Tva extends CommonObject
if (! $resql) if (! $resql)
{ {
$this->error="Error ".$this->db->lasterror(); $this->error="Error ".$this->db->lasterror();
return -1; $error++;
} }
if (! $notrigger) if (! $error && ! $notrigger)
{ {
// Call trigger // Call trigger
$result=$this->call_trigger('TVA_MODIFY',$user); $result=$this->call_trigger('TVA_MODIFY',$user);
if ($result < 0) $error++; if ($result < 0) $error++;
// End call triggers // End call triggers
//FIXME: Add rollback if trigger fail
} }
return 1; if (! $error)
{
$this->db->commit();
return 1;
}
else
{
$this->db->rollback();
return -1;
}
} }

View File

@ -255,7 +255,7 @@ if (empty($reshook))
} }
else else
{ {
setEventMessage($object->error,$object->errors,'errors'); setEventMessages($object->error,$object->errors,'errors');
} }
} }

View File

@ -8,6 +8,7 @@
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro> * Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
* Copyright (C) 2013 Alexandre Spangaro <alexandre.spangaro@gmail.com> * Copyright (C) 2013 Alexandre Spangaro <alexandre.spangaro@gmail.com>
* Copyright (C) 2013 Juanjo Menent <jmenent@2byte.es> * Copyright (C) 2013 Juanjo Menent <jmenent@2byte.es>
* 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
@ -1084,4 +1085,20 @@ class Contact extends CommonObject
} }
} }
} /**
* Function used to replace a thirdparty id with another one.
*
* @param DoliDB $db Database handler
* @param int $origin_id Old thirdparty id
* @param int $dest_id New thirdparty id
* @return bool
*/
public static function replaceThirdparty(DoliDB $db, $origin_id, $dest_id)
{
$tables = array(
'socpeople'
);
return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables);
}
}

View File

@ -79,7 +79,7 @@ llxHeader("",$langs->trans("Contact"), $helpurl);
if ($object->id) if ($object->id)
{ {
$head = contact_prepare_head($object, $user); $head = contact_prepare_head($object);
dol_fiche_head($head, 'documents', $langs->trans("Contact"), 0, 'contact'); dol_fiche_head($head, 'documents', $langs->trans("Contact"), 0, 'contact');

View File

@ -973,6 +973,8 @@ if ($action == 'create')
print '<input type="hidden" name="socid" value="'.$soc->id.'">'."\n"; print '<input type="hidden" name="socid" value="'.$soc->id.'">'."\n";
print '<input type="hidden" name="remise_percent" value="0">'; print '<input type="hidden" name="remise_percent" value="0">';
dol_fiche_head();
print '<table class="border" width="100%">'; print '<table class="border" width="100%">';
// Ref // Ref
@ -1068,7 +1070,9 @@ if ($action == 'create')
print "</table>\n"; print "</table>\n";
print '<br><div align="center"><input type="submit" class="button" value="'.$langs->trans("Create").'"></div>'; dol_fiche_end();
print '<div align="center"><input type="submit" class="button" value="'.$langs->trans("Create").'"></div>';
if (is_object($objectsrc)) if (is_object($objectsrc))
{ {
@ -1080,10 +1084,8 @@ if ($action == 'create')
print '<br>'.$langs->trans("Note").': '.$langs->trans("OnlyLinesWithTypeServiceAreUsed"); print '<br>'.$langs->trans("Note").': '.$langs->trans("OnlyLinesWithTypeServiceAreUsed");
} }
} }
print "</form>\n"; print "</form>\n";
dol_fiche_end();
} }
else else
/* *************************************************************************** */ /* *************************************************************************** */
@ -1285,7 +1287,9 @@ else
$usemargins=0; $usemargins=0;
if (! empty($conf->margin->enabled) && ! empty($object->element) && in_array($object->element,array('facture','propal','commande'))) $usemargins=1; if (! empty($conf->margin->enabled) && ! empty($object->element) && in_array($object->element,array('facture','propal','commande'))) $usemargins=1;
// Title line for service $var=false;
// Title line for service
$cursorline=1; $cursorline=1;
while ($cursorline <= $nbofservices) while ($cursorline <= $nbofservices)
{ {
@ -1326,8 +1330,6 @@ else
print '<td width="30">&nbsp;</td>'; print '<td width="30">&nbsp;</td>';
print "</tr>\n"; print "</tr>\n";
$var=true;
$objp = $db->fetch_object($result); $objp = $db->fetch_object($result);
$var=!$var; $var=!$var;
@ -1355,12 +1357,12 @@ else
} }
else else
{ {
print "<td>".dol_htmlentitiesbr($objp->description)."</td>\n"; print '<td>'.dol_htmlentitiesbr($objp->description)."</td>\n";
} }
// TVA // TVA
print '<td align="center">'.vatrate($objp->tva_tx,'%',$objp->info_bits).'</td>'; print '<td align="center">'.vatrate($objp->tva_tx,'%',$objp->info_bits).'</td>';
// Prix // Prix
print '<td align="right">'.price($objp->subprice)."</td>\n"; print '<td align="right">'.($objp->subprice != '' ? price($objp->subprice) : '')."</td>\n";
// Quantite // Quantite
print '<td align="center">'.$objp->qty.'</td>'; print '<td align="center">'.$objp->qty.'</td>';
//Unit //Unit
@ -1368,7 +1370,7 @@ else
// Remise // Remise
if ($objp->remise_percent > 0) if ($objp->remise_percent > 0)
{ {
print '<td align="right">'.$objp->remise_percent."%</td>\n"; print '<td align="right" '.$bc[$var].'>'.$objp->remise_percent."%</td>\n";
} }
else else
{ {
@ -1515,7 +1517,7 @@ else
print '<td colspan="'.$colspan.'">'; print '<td colspan="'.$colspan.'">';
print $langs->trans("DateStartPlanned").' '; print $langs->trans("DateStartPlanned").' ';
$form->select_date($db->jdate($objp->date_debut),"date_start_update",$usehm,$usehm,($db->jdate($objp->date_debut)>0?0:1),"update"); $form->select_date($db->jdate($objp->date_debut),"date_start_update",$usehm,$usehm,($db->jdate($objp->date_debut)>0?0:1),"update");
print '<br>'.$langs->trans("DateEndPlanned").' '; print ' &nbsp;&nbsp;'.$langs->trans("DateEndPlanned").' ';
$form->select_date($db->jdate($objp->date_fin),"date_end_update",$usehm,$usehm,($db->jdate($objp->date_fin)>0?0:1),"update"); $form->select_date($db->jdate($objp->date_fin),"date_end_update",$usehm,$usehm,($db->jdate($objp->date_fin)>0?0:1),"update");
print '</td>'; print '</td>';
@ -1539,7 +1541,7 @@ else
if ($object->statut > 0) if ($object->statut > 0)
{ {
print '<tr '.$bc[false].'>'; print '<tr '.$bc[$var].'>';
print '<td colspan="'.($conf->margin->enabled?7:6).'"><hr></td>'; print '<td colspan="'.($conf->margin->enabled?7:6).'"><hr></td>';
print "</tr>\n"; print "</tr>\n";
} }
@ -1555,7 +1557,7 @@ else
if ($action == 'deleteline' && ! $_REQUEST["cancel"] && $user->rights->contrat->creer && $object->lines[$cursorline-1]->id == GETPOST('rowid')) if ($action == 'deleteline' && ! $_REQUEST["cancel"] && $user->rights->contrat->creer && $object->lines[$cursorline-1]->id == GETPOST('rowid'))
{ {
print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id."&lineid=".GETPOST('rowid'),$langs->trans("DeleteContractLine"),$langs->trans("ConfirmDeleteContractLine"),"confirm_deleteline",'',0,1); print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id."&lineid=".GETPOST('rowid'),$langs->trans("DeleteContractLine"),$langs->trans("ConfirmDeleteContractLine"),"confirm_deleteline",'',0,1);
if ($ret == 'html') print '<table class="notopnoleftnoright" width="100%"><tr '.$bc[false].' height="6"><td></td></tr></table>'; if ($ret == 'html') print '<table class="notopnoleftnoright" width="100%"><tr '.$bc[$var].' height="6"><td></td></tr></table>';
} }
/* /*
@ -1575,7 +1577,7 @@ else
array('type' => 'select', 'name' => 'newcid', 'values' => $arraycontractid)); array('type' => 'select', 'name' => 'newcid', 'values' => $arraycontractid));
$form->form_confirm($_SERVER["PHP_SELF"]."?id=".$object->id."&lineid=".GETPOST('rowid'),$langs->trans("MoveToAnotherContract"),$langs->trans("ConfirmMoveToAnotherContract"),"confirm_move",$formquestion); $form->form_confirm($_SERVER["PHP_SELF"]."?id=".$object->id."&lineid=".GETPOST('rowid'),$langs->trans("MoveToAnotherContract"),$langs->trans("ConfirmMoveToAnotherContract"),"confirm_move",$formquestion);
print '<table class="notopnoleftnoright" width="100%"><tr '.$bc[false].' height="6"><td></td></tr></table>'; print '<table class="notopnoleftnoright" width="100%"><tr '.$bc[$var].' height="6"><td></td></tr></table>';
} }
/* /*
@ -1587,7 +1589,7 @@ else
$dateactend = dol_mktime(12, 0, 0, GETPOST('endmonth'), GETPOST('endday'), GETPOST('endyear')); $dateactend = dol_mktime(12, 0, 0, GETPOST('endmonth'), GETPOST('endday'), GETPOST('endyear'));
$comment = GETPOST('comment'); $comment = GETPOST('comment');
$form->form_confirm($_SERVER["PHP_SELF"]."?id=".$object->id."&ligne=".GETPOST('ligne')."&date=".$dateactstart."&dateend=".$dateactend."&comment=".urlencode($comment),$langs->trans("ActivateService"),$langs->trans("ConfirmActivateService",dol_print_date($dateactstart,"%A %d %B %Y")),"confirm_active", '', 0, 1); $form->form_confirm($_SERVER["PHP_SELF"]."?id=".$object->id."&ligne=".GETPOST('ligne')."&date=".$dateactstart."&dateend=".$dateactend."&comment=".urlencode($comment),$langs->trans("ActivateService"),$langs->trans("ConfirmActivateService",dol_print_date($dateactstart,"%A %d %B %Y")),"confirm_active", '', 0, 1);
print '<table class="notopnoleftnoright" width="100%"><tr '.$bc[false].' height="6"><td></td></tr></table>'; print '<table class="notopnoleftnoright" width="100%"><tr '.$bc[$var].' height="6"><td></td></tr></table>';
} }
/* /*
@ -1599,7 +1601,7 @@ else
$dateactend = dol_mktime(12, 0, 0, GETPOST('endmonth'), GETPOST('endday'), GETPOST('endyear')); $dateactend = dol_mktime(12, 0, 0, GETPOST('endmonth'), GETPOST('endday'), GETPOST('endyear'));
$comment = GETPOST('comment'); $comment = GETPOST('comment');
$form->form_confirm($_SERVER["PHP_SELF"]."?id=".$object->id."&ligne=".GETPOST('ligne')."&date=".$dateactstart."&dateend=".$dateactend."&comment=".urlencode($comment), $langs->trans("CloseService"), $langs->trans("ConfirmCloseService",dol_print_date($dateactend,"%A %d %B %Y")), "confirm_closeline", '', 0, 1); $form->form_confirm($_SERVER["PHP_SELF"]."?id=".$object->id."&ligne=".GETPOST('ligne')."&date=".$dateactstart."&dateend=".$dateactend."&comment=".urlencode($comment), $langs->trans("CloseService"), $langs->trans("ConfirmCloseService",dol_print_date($dateactend,"%A %d %B %Y")), "confirm_closeline", '', 0, 1);
print '<table class="notopnoleftnoright" width="100%"><tr '.$bc[false].' height="6"><td></td></tr></table>'; print '<table class="notopnoleftnoright" width="100%"><tr '.$bc[$var].' height="6"><td></td></tr></table>';
} }
@ -1608,7 +1610,7 @@ else
{ {
print '<table class="notopnoleftnoright tableforservicepart2" width="100%">'; print '<table class="notopnoleftnoright tableforservicepart2" width="100%">';
print '<tr '.$bc[false].'>'; print '<tr '.$bc[$var].'>';
print '<td>'.$langs->trans("ServiceStatus").': '.$object->lines[$cursorline-1]->getLibStatut(4).'</td>'; print '<td>'.$langs->trans("ServiceStatus").': '.$object->lines[$cursorline-1]->getLibStatut(4).'</td>';
print '<td width="30" align="right">'; print '<td width="30" align="right">';
if ($user->societe_id == 0) if ($user->societe_id == 0)
@ -1625,7 +1627,7 @@ else
print '</td>'; print '</td>';
print "</tr>\n"; print "</tr>\n";
print '<tr '.$bc[false].'>'; print '<tr '.$bc[$var].'>';
print '<td>'; print '<td>';
// Si pas encore active // Si pas encore active
@ -1664,7 +1666,7 @@ else
print '<form name="active" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;ligne='.GETPOST('ligne').'&amp;action=active" method="post">'; print '<form name="active" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;ligne='.GETPOST('ligne').'&amp;action=active" method="post">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<table class="notopnoleftnoright" width="100%">'; print '<table class="notopnoleftnoright tableforservicepart2" width="100%">';
// Definie date debut et fin par defaut // Definie date debut et fin par defaut
$dateactstart = $objp->date_debut; $dateactstart = $objp->date_debut;
@ -1714,7 +1716,7 @@ else
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<table class="noborder" width="100%">'; print '<table class="noborder tableforservicepart2" width="100%">';
// Definie date debut et fin par defaut // Definie date debut et fin par defaut
$dateactstart = $objp->date_debut_reelle; $dateactstart = $objp->date_debut_reelle;

View File

@ -1136,7 +1136,7 @@ class Contrat extends CommonObject
if (isset($this->ref_supplier)) $this->ref_supplier=trim($this->ref_supplier); if (isset($this->ref_supplier)) $this->ref_supplier=trim($this->ref_supplier);
if (isset($this->ref_ext)) $this->ref_ext=trim($this->ref_ext); if (isset($this->ref_ext)) $this->ref_ext=trim($this->ref_ext);
if (isset($this->entity)) $this->entity=trim($this->entity); if (isset($this->entity)) $this->entity=trim($this->entity);
if (isset($this->statut)) $this->statut=trim($this->statut); if (isset($this->statut)) $this->statut=(int) $this->statut;
if (isset($this->fk_soc)) $this->fk_soc=trim($this->fk_soc); if (isset($this->fk_soc)) $this->fk_soc=trim($this->fk_soc);
if (isset($this->fk_projet)) $this->fk_projet=trim($this->fk_projet); if (isset($this->fk_projet)) $this->fk_projet=trim($this->fk_projet);
if (isset($this->fk_commercial_signature)) $this->fk_commercial_signature=trim($this->fk_commercial_signature); if (isset($this->fk_commercial_signature)) $this->fk_commercial_signature=trim($this->fk_commercial_signature);
@ -2123,6 +2123,23 @@ class Contrat extends CommonObject
return $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref); return $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref);
} }
/**
* Function used to replace a thirdparty id with another one.
*
* @param DoliDB $db Database handler
* @param int $origin_id Old thirdparty id
* @param int $dest_id New thirdparty id
* @return bool
*/
public static function replaceThirdparty(DoliDB $db, $origin_id, $dest_id)
{
$tables = array(
'contrat'
);
return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables);
}
} }
@ -2430,7 +2447,7 @@ class ContratLigne extends CommonObjectLine
// Clean parameters // Clean parameters
$this->fk_contrat=trim($this->fk_contrat); $this->fk_contrat=trim($this->fk_contrat);
$this->fk_product=trim($this->fk_product); $this->fk_product=trim($this->fk_product);
$this->statut=trim($this->statut); $this->statut=(int) $this->statut;
$this->label=trim($this->label); $this->label=trim($this->label);
$this->description=trim($this->description); $this->description=trim($this->description);
$this->tva_tx=trim($this->tva_tx); $this->tva_tx=trim($this->tva_tx);
@ -2452,7 +2469,12 @@ class ContratLigne extends CommonObjectLine
$this->fk_user_ouverture=trim($this->fk_user_ouverture); $this->fk_user_ouverture=trim($this->fk_user_ouverture);
$this->fk_user_cloture=trim($this->fk_user_cloture); $this->fk_user_cloture=trim($this->fk_user_cloture);
$this->commentaire=trim($this->commentaire); $this->commentaire=trim($this->commentaire);
//if (empty($this->subprice)) $this->subprice = 0;
if (empty($this->price_ht)) $this->price_ht = 0;
if (empty($this->total_ht)) $this->total_ht = 0;
if (empty($this->total_tva)) $this->total_tva = 0;
if (empty($this->total_ttc)) $this->total_ttc = 0;
// Check parameters // Check parameters
// Put here code to add control on parameters values // Put here code to add control on parameters values
@ -2496,8 +2518,8 @@ class ContratLigne extends CommonObjectLine
$sql.= " remise_percent='".$this->remise_percent."',"; $sql.= " remise_percent='".$this->remise_percent."',";
$sql.= " remise=".($this->remise?"'".$this->remise."'":"null").","; $sql.= " remise=".($this->remise?"'".$this->remise."'":"null").",";
$sql.= " fk_remise_except=".($this->fk_remise_except?"'".$this->fk_remise_except."'":"null").","; $sql.= " fk_remise_except=".($this->fk_remise_except?"'".$this->fk_remise_except."'":"null").",";
$sql.= " subprice='".$this->subprice."',"; $sql.= " subprice=".($this->subprice != '' ? $this->subprice : "null").",";
$sql.= " price_ht='".$this->price_ht."',"; $sql.= " price_ht=".($this->price_ht != '' ? $this->price_ht : "null").",";
$sql.= " total_ht='".$this->total_ht."',"; $sql.= " total_ht='".$this->total_ht."',";
$sql.= " total_tva='".$this->total_tva."',"; $sql.= " total_tva='".$this->total_tva."',";
$sql.= " total_localtax1='".$this->total_localtax1."',"; $sql.= " total_localtax1='".$this->total_localtax1."',";

View File

@ -63,7 +63,7 @@ if (! empty($_POST['removedfile']))
/* /*
* Send mail * Send mail
*/ */
if (($action == 'send' || $action == 'relance') && ! $_POST['addfile'] && ! $_POST['removedfile'] && ! $_POST['cancel']) if (($action == 'send' || $action == 'relance') && ! $_POST['addfile'] && ! $_POST['removedfile'] && ! $_POST['cancel'] && !$_POST['modelselected'])
{ {
$langs->load('mails'); $langs->load('mails');

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2012 Charles-François BENKE <charles.fr@benke.fr> /* Copyright (C) 2012 Charles-François BENKE <charles.fr@benke.fr>
* Copyright (C) 2005-2013 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2005-2015 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2014-2015 Frederic France <frederic.france@free.fr> * Copyright (C) 2014-2015 Frederic France <frederic.france@free.fr>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@ -80,7 +80,7 @@ class box_activity extends ModeleBoxes
$nbofyears=2; $nbofyears=2;
if (! empty($conf->global->MAIN_BOX_ACTIVITY_DURATION)) $nbofyears=$conf->global->MAIN_BOX_ACTIVITY_DURATION; if (! empty($conf->global->MAIN_BOX_ACTIVITY_DURATION)) $nbofyears=$conf->global->MAIN_BOX_ACTIVITY_DURATION;
$textHead = $langs->trans("Activity").' <span class="badge">'.$nbofyears.' '.$langs->trans("DurationYears").'</span>'; $textHead = $langs->trans("Activity").' - '.$langs->trans("LastXMonthRolling", $nbofyears*12);
$this->info_box_head = array( $this->info_box_head = array(
'text' => $textHead, 'text' => $textHead,
'limit'=> dol_strlen($textHead), 'limit'=> dol_strlen($textHead),
@ -102,7 +102,8 @@ class box_activity extends ModeleBoxes
$refresh = dol_cache_refresh($cachedir, $filename, $cachetime); $refresh = dol_cache_refresh($cachedir, $filename, $cachetime);
$data = array(); $data = array();
if ($refresh) { if ($refresh)
{
$sql = "SELECT f.fk_statut, SUM(f.total_ttc) as Mnttot, COUNT(*) as nb"; $sql = "SELECT f.fk_statut, SUM(f.total_ttc) as Mnttot, COUNT(*) as nb";
$sql.= " FROM (".MAIN_DB_PREFIX."societe as s,".MAIN_DB_PREFIX."facture as f"; $sql.= " FROM (".MAIN_DB_PREFIX."societe as s,".MAIN_DB_PREFIX."facture as f";
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";

View File

@ -1,5 +1,5 @@
<?php <?php
/* Copyright (C) 2013 Laurent Destailleur <eldy@users.sourceforge.net> /* Copyright (C) 2013-2015 Laurent Destailleur <eldy@users.sourceforge.net>
* *
* 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
@ -70,18 +70,6 @@ class box_graph_product_distribution extends ModeleBoxes
include_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; include_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php';
include_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; include_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php';
$text = $langs->trans("BoxProductDistribution",$max);
$this->info_box_head = array(
'text' => $text,
'limit'=> dol_strlen($text),
'graph'=> 1,
'sublink'=>'',
'subtext'=>$langs->trans("Filter"),
'subpicto'=>'filter.png',
'subclass'=>'linkobject',
'target'=>'none' // Set '' to get target="_blank"
);
$param_year='DOLUSERCOOKIE_box_'.$this->boxcode.'_year'; $param_year='DOLUSERCOOKIE_box_'.$this->boxcode.'_year';
$param_showinvoicenb='DOLUSERCOOKIE_box_'.$this->boxcode.'_showinvoicenb'; $param_showinvoicenb='DOLUSERCOOKIE_box_'.$this->boxcode.'_showinvoicenb';
$param_showpropalnb='DOLUSERCOOKIE_box_'.$this->boxcode.'_showpropalnb'; $param_showpropalnb='DOLUSERCOOKIE_box_'.$this->boxcode.'_showpropalnb';
@ -110,6 +98,20 @@ class box_graph_product_distribution extends ModeleBoxes
$nowarray=dol_getdate(dol_now(),true); $nowarray=dol_getdate(dol_now(),true);
if (empty($year)) $year=$nowarray['year']; if (empty($year)) $year=$nowarray['year'];
$text = $langs->trans("BoxProductDistribution",$max).' - '.$langs->trans("Year").': '.$year;
$this->info_box_head = array(
'text' => $text,
'limit'=> dol_strlen($text),
'graph'=> 1,
'sublink'=>'',
'subtext'=>$langs->trans("Filter"),
'subpicto'=>'filter.png',
'subclass'=>'linkobject',
'target'=>'none' // Set '' to get target="_blank"
);
$nbofgraph=0; $nbofgraph=0;
if ($showinvoicenb) $nbofgraph++; if ($showinvoicenb) $nbofgraph++;
if ($showpropalnb) $nbofgraph++; if ($showpropalnb) $nbofgraph++;

View File

@ -4,6 +4,7 @@
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com> * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2005-2012 Maxime Kohlhaas <mko@atm-consulting.fr> * Copyright (C) 2005-2012 Maxime Kohlhaas <mko@atm-consulting.fr>
* Copyright (C) 2015 Frederic France <frederic.france@free.fr> * Copyright (C) 2015 Frederic France <frederic.france@free.fr>
* Copyright (C) 2015 Juanjo Menent <jmenent@2byte.es>
* *
* 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
@ -73,7 +74,7 @@ class box_produits_alerte_stock extends ModeleBoxes
$sql.= " AND p.tosell = 1 AND p.seuil_stock_alerte > 0"; $sql.= " AND p.tosell = 1 AND p.seuil_stock_alerte > 0";
if (empty($user->rights->produit->lire)) $sql.=' AND p.fk_product_type != 0'; if (empty($user->rights->produit->lire)) $sql.=' AND p.fk_product_type != 0';
if (empty($user->rights->service->lire)) $sql.=' AND p.fk_product_type != 1'; if (empty($user->rights->service->lire)) $sql.=' AND p.fk_product_type != 1';
$sql.= " GROUP BY p.rowid, p.label, p.price, p.price_base_type, p.price_ttc, p.fk_product_type, p.tms, p.tosell, p.tobuy, p.seuil_stock_alerte"; $sql.= " GROUP BY p.rowid, p.ref, p.label, p.price, p.price_base_type, p.price_ttc, p.fk_product_type, p.tms, p.tosell, p.tobuy, p.seuil_stock_alerte";
$sql.= " HAVING SUM(".$db->ifsql("s.reel IS NULL","0","s.reel").") < p.seuil_stock_alerte"; $sql.= " HAVING SUM(".$db->ifsql("s.reel IS NULL","0","s.reel").") < p.seuil_stock_alerte";
$sql.= $db->order('p.seuil_stock_alerte', 'DESC'); $sql.= $db->order('p.seuil_stock_alerte', 'DESC');
$sql.= $db->plimit($max, 0); $sql.= $db->plimit($max, 0);

View File

@ -514,8 +514,12 @@ class CMailFile
return $res; return $res;
} }
/**
// Encode subject according to RFC 2822 - http://en.wikipedia.org/wiki/MIME#Encoded-Word * Encode subject according to RFC 2822 - http://en.wikipedia.org/wiki/MIME#Encoded-Word
*
* @param string $stringtoencode String to encode
* @return string string encoded
*/
function encodetorfc2822($stringtoencode) function encodetorfc2822($stringtoencode)
{ {
global $conf; global $conf;
@ -639,7 +643,7 @@ class CMailFile
/** /**
* Create SMTP headers (mode = 'mail') * Create SMTP headers (mode = 'mail')
* *
* @return smtp headers * @return string headers
*/ */
function write_smtpheaders() function write_smtpheaders()
{ {
@ -690,7 +694,7 @@ class CMailFile
* *
* @param array $filename_list Array of filenames * @param array $filename_list Array of filenames
* @param array $mimefilename_list Array of mime types * @param array $mimefilename_list Array of mime types
* @return array mime headers * @return string mime headers
*/ */
function write_mimeheaders($filename_list, $mimefilename_list) function write_mimeheaders($filename_list, $mimefilename_list)
{ {

View File

@ -60,6 +60,34 @@ abstract class CommonInvoice extends CommonObject
*/ */
const TYPE_SITUATION = 5; const TYPE_SITUATION = 5;
/**
* Draft
*/
const STATUS_DRAFT = 0;
/**
* Validated (need to be paid)
*/
const STATUS_VALIDATED = 1;
/**
* Classified paid.
* If paid partially, $this->close_code can be:
* - CLOSECODE_DISCOUNTVAT
* - CLOSECODE_BADDEBT
* If paid completelly, this->close_code will be null
*/
const STATUS_CLOSED = 2;
/**
* Classified abandoned and no payment done.
* $this->close_code can be:
* - CLOSECODE_BADDEBT
* - CLOSECODE_ABANDONED
* - CLOSECODE_REPLACED
*/
const STATUS_ABANDONED = 3;
/** /**
* Return amount of payments already done * Return amount of payments already done
* *
@ -188,7 +216,7 @@ abstract class CommonInvoice extends CommonObject
* Return label of object status * Return label of object status
* *
* @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=short label + picto * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=short label + picto
* @param double $alreadypaid 0=No payment already done, >0=Some payments were already done (we recommand to put here amount payed if you have it, 1 otherwise) * @param integer $alreadypaid 0=No payment already done, >0=Some payments were already done (we recommand to put here amount payed if you have it, 1 otherwise)
* @return string Label * @return string Label
*/ */
function getLibStatut($mode=0,$alreadypaid=-1) function getLibStatut($mode=0,$alreadypaid=-1)
@ -202,7 +230,7 @@ abstract class CommonInvoice extends CommonObject
* @param int $paye Status field paye * @param int $paye Status field paye
* @param int $status Id status * @param int $status Id status
* @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=short label + picto * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=short label + picto
* @param double $alreadypaid 0=No payment already done, >0=Some payments were already done (we recommand to put here amount payed if you have it, 1 otherwise) * @param integer $alreadypaid 0=No payment already done, >0=Some payments were already done (we recommand to put here amount payed if you have it, 1 otherwise)
* @param int $type Type facture * @param int $type Type facture
* @return string Libelle du statut * @return string Libelle du statut
*/ */
@ -326,7 +354,7 @@ abstract class CommonInvoice extends CommonObject
* Renvoi une date limite de reglement de facture en fonction des * Renvoi une date limite de reglement de facture en fonction des
* conditions de reglements de la facture et date de facturation * conditions de reglements de la facture et date de facturation
* *
* @param string $cond_reglement Condition of payment (code or id) to use. If 0, we use current condition. * @param integer $cond_reglement Condition of payment (code or id) to use. If 0, we use current condition.
* @return date Date limite de reglement si ok, <0 si ko * @return date Date limite de reglement si ok, <0 si ko
*/ */
function calculate_date_lim_reglement($cond_reglement=0) function calculate_date_lim_reglement($cond_reglement=0)

View File

@ -6,7 +6,7 @@
* Copyright (C) 2010-2014 Juanjo Menent <jmenent@2byte.es> * Copyright (C) 2010-2014 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2012-2013 Christophe Battarel <christophe.battarel@altairis.fr> * Copyright (C) 2012-2013 Christophe Battarel <christophe.battarel@altairis.fr>
* Copyright (C) 2011-2014 Philippe Grand <philippe.grand@atoo-net.com> * Copyright (C) 2011-2014 Philippe Grand <philippe.grand@atoo-net.com>
* Copyright (C) 2012-2014 Marcos García <marcosgdf@gmail.com> * Copyright (C) 2012-2015 Marcos García <marcosgdf@gmail.com>
* Copyright (C) 2012-2014 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr> * Copyright (C) 2012-2014 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
* Copyright (C) 2012 Cedric Salvador <csalvador@gpcsolutions.fr> * Copyright (C) 2012 Cedric Salvador <csalvador@gpcsolutions.fr>
* *
@ -1612,7 +1612,7 @@ abstract class CommonObject
} }
if (! in_array($suffix,array('','_public','_private'))) if (! in_array($suffix,array('','_public','_private')))
{ {
dol_syslog(get_class($this)."::upate_note Parameter suffix must be empty, '_private' or '_public'", LOG_ERR); dol_syslog(get_class($this)."::update_note Parameter suffix must be empty, '_private' or '_public'", LOG_ERR);
return -2; return -2;
} }
@ -1888,10 +1888,11 @@ abstract class CommonObject
* @param int $targetid Object target id * @param int $targetid Object target id
* @param string $targettype Object target type * @param string $targettype Object target type
* @param string $clause 'OR' or 'AND' clause used when both source id and target id are provided * @param string $clause 'OR' or 'AND' clause used when both source id and target id are provided
* @param int $alsosametype 0=Return only links to different object than source. 1=Include also link to objects of same type.
* @return void * @return void
* @see add_object_linked, updateObjectLinked, deleteObjectLinked * @see add_object_linked, updateObjectLinked, deleteObjectLinked
*/ */
function fetchObjectLinked($sourceid='',$sourcetype='',$targetid='',$targettype='',$clause='OR') function fetchObjectLinked($sourceid='',$sourcetype='',$targetid='',$targettype='',$clause='OR',$alsosametype=1)
{ {
global $conf; global $conf;
@ -1925,7 +1926,7 @@ abstract class CommonObject
return -1; return -1;
} }
// Links beetween objects are stored in this table // Links between objects are stored in table element_element
$sql = 'SELECT fk_source, sourcetype, fk_target, targettype'; $sql = 'SELECT fk_source, sourcetype, fk_target, targettype';
$sql.= ' FROM '.MAIN_DB_PREFIX.'element_element'; $sql.= ' FROM '.MAIN_DB_PREFIX.'element_element';
$sql.= " WHERE "; $sql.= " WHERE ";
@ -1984,7 +1985,7 @@ abstract class CommonObject
$classpath = $element.'/class'; $classpath = $element.'/class';
// To work with non standard path // To work with non standard classpath or module name
if ($objecttype == 'facture') { if ($objecttype == 'facture') {
$classpath = 'compta/facture/class'; $classpath = 'compta/facture/class';
} }
@ -2020,7 +2021,7 @@ abstract class CommonObject
$classfile = 'fournisseur.commande'; $classname = 'CommandeFournisseur'; $classfile = 'fournisseur.commande'; $classname = 'CommandeFournisseur';
} }
if ($conf->$module->enabled && $element != $this->element) if ($conf->$module->enabled && (($element != $this->element) || $alsosametype))
{ {
dol_include_once('/'.$classpath.'/'.$classfile.'.class.php'); dol_include_once('/'.$classpath.'/'.$classfile.'.class.php');
@ -3225,7 +3226,7 @@ abstract class CommonObject
$marginInfo = $this->getMarginInfos($force_price); $marginInfo = $this->getMarginInfos($force_price);
if (! empty($conf->global->MARGIN_ADD_SHOWHIDE_BUTTON)) // FIXME Warning this feature rely on an external js file that may be removed. Using native js function document.cookie should be better if (! empty($conf->global->MARGIN_ADD_SHOWHIDE_BUTTON)) // TODO Warning this feature rely on an external js file that may be removed. Using native js function document.cookie should be better
{ {
print $langs->trans('ShowMarginInfos').' : '; print $langs->trans('ShowMarginInfos').' : ';
$hidemargininfos = $_COOKIE['DOLUSER_MARGININFO_HIDE_SHOW']; $hidemargininfos = $_COOKIE['DOLUSER_MARGININFO_HIDE_SHOW'];
@ -3360,25 +3361,26 @@ abstract class CommonObject
$this->db->begin(); $this->db->begin();
$sql = "DELETE FROM ".MAIN_DB_PREFIX."element_resources"; $sql = "DELETE FROM ".MAIN_DB_PREFIX."element_resources";
$sql.= " WHERE rowid =".$rowid; $sql.= " WHERE rowid=".$rowid;
dol_syslog(get_class($this)."::delete_resource", LOG_DEBUG); dol_syslog(get_class($this)."::delete_resource", LOG_DEBUG);
if ($this->db->query($sql)) $resql=$this->db->query($sql);
{ if (! $resql)
if (! $notrigger) {
$this->error=$this->db->lasterror();
$this->db->rollback();
return -1;
}
else
{
if (! $notrigger)
{ {
$result=$this->call_trigger(strtoupper($element).'_DELETE_RESOURCE', $user); $result=$this->call_trigger(strtoupper($element).'_DELETE_RESOURCE', $user);
if ($result < 0) { $this->db->rollback(); return -1; } if ($result < 0) { $this->db->rollback(); return -1; }
} }
$this->db->commit();
return 1; return 1;
} }
else
{
$this->error=$this->db->lasterror();
$this->db->rollback();
return -1;
}
} }
@ -3905,5 +3907,27 @@ abstract class CommonObject
return $user->rights->{$this->element}; return $user->rights->{$this->element};
} }
/**
* Function used to replace a thirdparty id with another one.
* This function is meant to be called from replaceThirdparty with the appropiate tables
* Column name fk_soc MUST be used to identify thirdparties
*
* @param DoliDB $db Database handler
* @param int $origin_id Old thirdparty id
* @param int $dest_id New thirdparty id
* @param array $tables Tables that need to be changed
* @return bool
*/
public static function commonReplaceThirdparty(DoliDB $db, $origin_id, $dest_id, array $tables)
{
foreach ($tables as $table) {
$sql = 'UPDATE '.MAIN_DB_PREFIX.$table.' SET fk_soc = '.$dest_id.' WHERE fk_soc = '.$origin_id;
if (!$db->query($sql)) {
return false;
}
}
return true;
}
} }

View File

@ -115,7 +115,7 @@ class DolGraph
* Set Y precision * Set Y precision
* *
* @param float $which_prec Precision * @param float $which_prec Precision
* @return string * @return boolean
*/ */
function SetPrecisionY($which_prec) function SetPrecisionY($which_prec)
{ {
@ -187,7 +187,7 @@ class DolGraph
* Set y label * Set y label
* *
* @param string $label Y label * @param string $label Y label
* @return boolean True * @return boolean|null True
*/ */
function SetYLabel($label) function SetYLabel($label)
{ {
@ -198,7 +198,7 @@ class DolGraph
* Set width * Set width
* *
* @param int $w Width * @param int $w Width
* @return boolean True * @return boolean|null True
*/ */
function SetWidth($w) function SetWidth($w)
{ {
@ -554,7 +554,7 @@ class DolGraph
/** /**
* Return min value of all data * Return min value of all data
* *
* @return int Max value of all data * @return double Max value of all data
*/ */
function GetFloorMinValue() function GetFloorMinValue()
{ {
@ -578,7 +578,7 @@ class DolGraph
* *
* @param string $file Image file name to use to save onto disk (also used as javascript unique id) * @param string $file Image file name to use to save onto disk (also used as javascript unique id)
* @param string $fileurl Url path to show image if saved onto disk * @param string $fileurl Url path to show image if saved onto disk
* @return void * @return integer|null
*/ */
function draw($file,$fileurl='') function draw($file,$fileurl='')
{ {

View File

@ -18,7 +18,7 @@
/** /**
* \file htdocs/core/class/dolprintipp.class.php * \file htdocs/core/class/dolprintipp.class.php
* \brief A set of functions for using printIPP * \brief List jobs printed with driver printipp
*/ */
/** /**
@ -57,78 +57,6 @@ class dolprintIPP
} }
/**
* Return list of available printers
*
* @return array list of printers
*/
function getlist_available_printers()
{
global $conf,$db;
include_once DOL_DOCUMENT_ROOT.'/includes/printipp/CupsPrintIPP.php';
$ipp = new CupsPrintIPP();
$ipp->setLog(DOL_DATA_ROOT.'/printipp.log','file',3); // logging very verbose
$ipp->setHost($this->host);
$ipp->setPort($this->port);
$ipp->setUserName($this->userid);
if (! empty($this->user)) $ipp->setAuthentication($this->user,$this->password);
$ipp->getPrinters();
return $ipp->available_printers;
}
/**
* Print selected file
*
* @param string $file file
* @param string $module module
*
* @return string '' if OK, Error message if KO
*/
function print_file($file, $module)
{
global $conf,$db;
include_once DOL_DOCUMENT_ROOT.'/includes/printipp/CupsPrintIPP.php';
$ipp = new CupsPrintIPP();
$ipp->setLog(DOL_DATA_ROOT.'/dolibarr_printipp.log','file',3); // logging very verbose
$ipp->setHost($this->host);
$ipp->setPort($this->port);
$ipp->setJobName($file,true);
$ipp->setUserName($this->userid);
if (! empty($this->user)) $ipp->setAuthentication($this->user,$this->password);
// select printer uri for module order, propal,...
$sql = 'SELECT rowid,printer_uri,copy FROM '.MAIN_DB_PREFIX.'printer_ipp WHERE module="'.$module.'"';
$result = $this->db->query($sql);
if ($result)
{
$obj = $this->db->fetch_object($result);
if ($obj)
{
$ipp->setPrinterURI($obj->printer_uri);
}
else
{
if (! empty($conf->global->PRINTIPP_URI_DEFAULT))
{
$ipp->setPrinterURI($conf->global->PRINTIPP_URI_DEFAULT);
}
else
{
return 'NoDefaultPrinterDefined';
}
}
}
// Set number of copy
$ipp->setCopies($obj->copy);
$ipp->setData(DOL_DATA_ROOT.'/'.$module.'/'.$file);
$ipp->printJob();
return '';
}
/** /**
* List jobs print * List jobs print
* *
@ -191,25 +119,4 @@ class dolprintIPP
print "</table>"; print "</table>";
} }
/**
* Get printer detail
*
* @param string $uri URI
* @return array List of attributes
*/
function get_printer_detail($uri)
{
global $conf,$db;
include_once DOL_DOCUMENT_ROOT.'/includes/printipp/CupsPrintIPP.php';
$ipp = new CupsPrintIPP();
$ipp->setLog(DOL_DATA_ROOT.'/printipp.log','file',3); // logging very verbose
$ipp->setHost($this->host);
$ipp->setPort($this->port);
$ipp->setUserName($this->userid);
if (! empty($this->user)) $ipp->setAuthentication($this->user,$this->password);
$ipp->setPrinterURI($uri);
$ipp->getPrinterAttributes();
return $ipp->printer_attributes;
}
} }

View File

@ -31,7 +31,6 @@
/** /**
* Events class * Events class
* Initialy built by build_class_from_table on 2008-02-28 17:25
*/ */
class Events // extends CommonObject class Events // extends CommonObject
{ {
@ -41,6 +40,8 @@ class Events // extends CommonObject
var $id; var $id;
var $db; var $db;
var $error;
var $tms; var $tms;
var $type; var $type;
var $entity; var $entity;

View File

@ -568,11 +568,11 @@ class ExtraFields
global $conf; global $conf;
if ( empty($elementtype) ) return array(); if ( empty($elementtype) ) return array();
if ($elementtype == 'thirdparty') $elementtype='societe'; if ($elementtype == 'thirdparty') $elementtype='societe';
$array_name_label=array(); $array_name_label=array();
// For avoid conflicts with external modules // For avoid conflicts with external modules
if (!$forceload && !empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) return $array_name_label; if (!$forceload && !empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) return $array_name_label;
@ -602,7 +602,7 @@ class ExtraFields
$this->attribute_elementtype[$tab->name]=$tab->elementtype; $this->attribute_elementtype[$tab->name]=$tab->elementtype;
$this->attribute_unique[$tab->name]=$tab->fieldunique; $this->attribute_unique[$tab->name]=$tab->fieldunique;
$this->attribute_required[$tab->name]=$tab->fieldrequired; $this->attribute_required[$tab->name]=$tab->fieldrequired;
$this->attribute_param[$tab->name]=unserialize($tab->param); $this->attribute_param[$tab->name]=($tab->param ? unserialize($tab->param) : '');
$this->attribute_pos[$tab->name]=$tab->pos; $this->attribute_pos[$tab->name]=$tab->pos;
$this->attribute_alwayseditable[$tab->name]=$tab->alwayseditable; $this->attribute_alwayseditable[$tab->name]=$tab->alwayseditable;
$this->attribute_perms[$tab->name]=$tab->perms; $this->attribute_perms[$tab->name]=$tab->perms;
@ -1056,7 +1056,7 @@ class ExtraFields
elseif ($type == 'link') elseif ($type == 'link')
{ {
$out=''; $out='';
$param_list=array_keys($param['options']); $param_list=array_keys($param['options']);
// 0 : ObjectName // 0 : ObjectName
// 1 : classPath // 1 : classPath

View File

@ -192,7 +192,7 @@ class HookManager
dol_syslog("Error on hook module=".$module.", method ".$method.", class ".get_class($actionclassinstance).", hooktype=".$hooktype.(empty($this->error)?'':" ".$this->error).(empty($this->errors)?'':" ".join(",",$this->errors)), LOG_ERR); dol_syslog("Error on hook module=".$module.", method ".$method.", class ".get_class($actionclassinstance).", hooktype=".$hooktype.(empty($this->error)?'':" ".$this->error).(empty($this->errors)?'':" ".join(",",$this->errors)), LOG_ERR);
} }
if (is_array($actionclassinstance->results)) $this->resArray =array_merge($this->resArray, $actionclassinstance->results); if (isset($actionclassinstance->results) && is_array($actionclassinstance->results)) $this->resArray =array_merge($this->resArray, $actionclassinstance->results);
if (! empty($actionclassinstance->resprints)) $this->resPrint.=$actionclassinstance->resprints; if (! empty($actionclassinstance->resprints)) $this->resPrint.=$actionclassinstance->resprints;
} }
// Generic hooks that return a string or array (printSearchForm, printLeftBlock, formAddObjectLine, formBuilddocOptions, ...) // Generic hooks that return a string or array (printSearchForm, printLeftBlock, formAddObjectLine, formBuilddocOptions, ...)

View File

@ -868,7 +868,7 @@ class Form
* *
* @param string $selected Preselected type * @param string $selected Preselected type
* @param string $htmlname Name of field in form * @param string $htmlname Name of field in form
* @param string $filter optional filters criteras (example: 's.rowid <> x') * @param string $filter optional filters criteras (example: 's.rowid <> x', 's.client in (1,3)')
* @param int $showempty Add an empty field * @param int $showempty Add an empty field
* @param int $showtype Show third party type in combolist (customer, prospect or supplier) * @param int $showtype Show third party type in combolist (customer, prospect or supplier)
* @param int $forcecombo Force to use combo box * @param int $forcecombo Force to use combo box
@ -1306,7 +1306,7 @@ class Form
$sql.= " WHERE u.entity IN (0,".$conf->entity.")"; $sql.= " WHERE u.entity IN (0,".$conf->entity.")";
} }
} }
if (! empty($user->societe_id)) $sql.= " AND u.fk_societe = ".$user->societe_id; if (! empty($user->societe_id)) $sql.= " AND u.fk_soc = ".$user->societe_id;
if (is_array($exclude) && $excludeUsers) $sql.= " AND u.rowid NOT IN ('".$excludeUsers."')"; if (is_array($exclude) && $excludeUsers) $sql.= " AND u.rowid NOT IN ('".$excludeUsers."')";
if (is_array($include) && $includeUsers) $sql.= " AND u.rowid IN ('".$includeUsers."')"; if (is_array($include) && $includeUsers) $sql.= " AND u.rowid IN ('".$includeUsers."')";
if (! empty($conf->global->USER_HIDE_INACTIVE_IN_COMBOBOX)) $sql.= " AND u.statut <> 0"; if (! empty($conf->global->USER_HIDE_INACTIVE_IN_COMBOBOX)) $sql.= " AND u.statut <> 0";
@ -1529,7 +1529,7 @@ class Form
print img_picto($langs->trans("Search"), 'search'); print img_picto($langs->trans("Search"), 'search');
} }
} }
print '<input type="text" size="20" name="search_'.$htmlname.'" id="search_'.$htmlname.'" value="'.$selected_input_value.'"'.$placeholder.' />'; print '<input type="text" size="20" name="search_'.$htmlname.'" id="search_'.$htmlname.'" value="'.$selected_input_value.'"'.$placeholder.' autofocus />';
if ($hidelabel == 3) { if ($hidelabel == 3) {
print img_picto($langs->trans("Search"), 'search'); print img_picto($langs->trans("Search"), 'search');
} }
@ -1646,7 +1646,7 @@ class Form
require_once DOL_DOCUMENT_ROOT.'/product/dynamic_price/class/price_parser.class.php'; require_once DOL_DOCUMENT_ROOT.'/product/dynamic_price/class/price_parser.class.php';
$num = $this->db->num_rows($result); $num = $this->db->num_rows($result);
$out.='<select class="flat" name="'.$htmlname.'" id="'.$htmlname.'">'; $out.='<select class="flat" name="'.$htmlname.'" id="'.$htmlname.'" autofocus>';
$out.='<option value="0" selected="selected">&nbsp;</option>'; $out.='<option value="0" selected="selected">&nbsp;</option>';
$i = 0; $i = 0;
@ -2919,7 +2919,7 @@ class Form
{ {
print '<option value="'.$obj->rowid.'">'; print '<option value="'.$obj->rowid.'">';
} }
print $obj->label; print trim($obj->label);
if ($statut == 2 && $obj->status == 1) print ' ('.$langs->trans("Closed").')'; if ($statut == 2 && $obj->status == 1) print ' ('.$langs->trans("Closed").')';
print '</option>'; print '</option>';
$i++; $i++;
@ -2978,10 +2978,11 @@ class Form
* @param string $htmlname HTML field name * @param string $htmlname HTML field name
* @param int $maxlength Maximum length for labels * @param int $maxlength Maximum length for labels
* @param int $excludeafterid Exclude all categories after this leaf in category tree. * @param int $excludeafterid Exclude all categories after this leaf in category tree.
* @param int $outputmode 0=HTML select string, 1=Array
* @return string * @return string
* @see select_categories * @see select_categories
*/ */
function select_all_categories($type, $selected='', $htmlname="parent", $maxlength=64, $excludeafterid=0) function select_all_categories($type, $selected='', $htmlname="parent", $maxlength=64, $excludeafterid=0, $outputmode=0)
{ {
global $langs; global $langs;
$langs->load("categories"); $langs->load("categories");
@ -2990,6 +2991,7 @@ class Form
$cate_arbo = $cat->get_full_arbo($type,$excludeafterid); $cate_arbo = $cat->get_full_arbo($type,$excludeafterid);
$output = '<select class="flat" name="'.$htmlname.'">'; $output = '<select class="flat" name="'.$htmlname.'">';
$outarray=array();
if (is_array($cate_arbo)) if (is_array($cate_arbo))
{ {
if (! count($cate_arbo)) $output.= '<option value="-1" disabled="disabled">'.$langs->trans("NoCategoriesDefined").'</option>'; if (! count($cate_arbo)) $output.= '<option value="-1" disabled="disabled">'.$langs->trans("NoCategoriesDefined").'</option>';
@ -3007,12 +3009,16 @@ class Form
$add = ''; $add = '';
} }
$output.= '<option '.$add.'value="'.$cate_arbo[$key]['id'].'">'.dol_trunc($cate_arbo[$key]['fulllabel'],$maxlength,'middle').'</option>'; $output.= '<option '.$add.'value="'.$cate_arbo[$key]['id'].'">'.dol_trunc($cate_arbo[$key]['fulllabel'],$maxlength,'middle').'</option>';
$outarray[$cate_arbo[$key]['id']] = $cate_arbo[$key]['fulllabel'];
} }
} }
} }
$output.= '</select>'; $output.= '</select>';
$output.= "\n"; $output.= "\n";
return $output;
if ($outputmode) return $outarray;
return $output;
} }
/** /**

View File

@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/html.form.class.php';
* $formmail->proprietes=1 ou chaine ou tableau de valeurs * $formmail->proprietes=1 ou chaine ou tableau de valeurs
* $formmail->show_form() affiche le formulaire * $formmail->show_form() affiche le formulaire
*/ */
class FormMail class FormMail extends Form
{ {
var $db; var $db;
@ -71,6 +71,8 @@ class FormMail
var $error; var $error;
public $lines_model;
/** /**
* Constructor * Constructor
@ -242,7 +244,7 @@ class FormMail
else else
{ {
$out=''; $out='';
// Define list of attached files // Define list of attached files
$listofpaths=array(); $listofpaths=array();
$listofnames=array(); $listofnames=array();
@ -263,8 +265,11 @@ class FormMail
} }
// Get message template // Get message template
$arraydefaultmessage=$this->getEMailTemplate($this->db, $this->param["models"], $user, $outputlangs); $model_id=0;
if (array_key_exists('models_id',$this->param)) {
$model_id=$this->param["models_id"];
}
$arraydefaultmessage=$this->getEMailTemplate($this->db, $this->param["models"], $user, $outputlangs, $model_id);
$out.= "\n<!-- Debut form mail -->\n"; $out.= "\n<!-- Debut form mail -->\n";
if ($this->withform == 1) if ($this->withform == 1)
@ -277,6 +282,28 @@ class FormMail
{ {
$out.= '<input type="hidden" id="'.$key.'" name="'.$key.'" value="'.$value.'" />'."\n"; $out.= '<input type="hidden" id="'.$key.'" name="'.$key.'" value="'.$value.'" />'."\n";
} }
$result = $this->fetchAllEMailTemplate($this->param["models"], $user, $outputlangs);
if ($result<0) {
setEventMessage($this->error,'errors');
}
$modelmail_array=array();
foreach($this->lines_model as $line) {
$modelmail_array[$line->id]=$line->label;
}
if (count($modelmail_array)>0) {
$out.= '<table class="nobordernopadding" width="100%"><tr><td width="20%">'."\n";
$out.= $langs->trans('SelectMailModel').':'.$this->selectarray('modelmailselected', $modelmail_array,$model_id);
$out.= '</td>';
$out.= '<td width="5px">';
if ($user->admin) $out.= info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"),1);
$out.= '</td>';
$out.= '<td><input class="flat" type="submit" value="'.$langs->trans('Valid').'" name="modelselected" id="modelselected"></td>';
$out.= '</tr></table>';
}
$out.= '<table class="border" width="100%">'."\n"; $out.= '<table class="border" width="100%">'."\n";
// Substitution array // Substitution array
@ -617,8 +644,8 @@ class FormMail
$defaultmessage = dol_nl2br($defaultmessage); $defaultmessage = dol_nl2br($defaultmessage);
} }
if (isset($_POST["message"])) $defaultmessage=$_POST["message"]; if (isset($_POST["message"]) && ! $_POST['modelselected']) $defaultmessage=$_POST["message"];
else else
{ {
$defaultmessage=make_substitutions($defaultmessage,$this->substit); $defaultmessage=make_substitutions($defaultmessage,$this->substit);
@ -690,9 +717,10 @@ class FormMail
* @param string $type_template Get message for key module * @param string $type_template Get message for key module
* @param string $user Use template public or limited to this user * @param string $user Use template public or limited to this user
* @param Translate $outputlangs Output lang object * @param Translate $outputlangs Output lang object
* @param int $id Id template to find
* @return array array('topic'=>,'content'=>,..) * @return array array('topic'=>,'content'=>,..)
*/ */
private function getEMailTemplate($db, $type_template, $user, $outputlangs) private function getEMailTemplate($db, $type_template, $user, $outputlangs,$id=0)
{ {
$ret=array(); $ret=array();
@ -702,6 +730,7 @@ class FormMail
$sql.= " AND entity IN (".getEntity("c_email_templates").")"; $sql.= " AND entity IN (".getEntity("c_email_templates").")";
$sql.= " AND (fk_user is NULL or fk_user = 0 or fk_user = ".$user->id.")"; $sql.= " AND (fk_user is NULL or fk_user = 0 or fk_user = ".$user->id.")";
if (is_object($outputlangs)) $sql.= " AND (lang = '".$outputlangs->defaultlang."' OR lang IS NULL OR lang = '')"; if (is_object($outputlangs)) $sql.= " AND (lang = '".$outputlangs->defaultlang."' OR lang IS NULL OR lang = '')";
if (!empty($id)) $sql.= " AND rowid=".$id;
$sql.= $db->order("lang,label","ASC"); $sql.= $db->order("lang,label","ASC");
//print $sql; //print $sql;
@ -745,5 +774,98 @@ class FormMail
return -1; return -1;
} }
} }
/**
* Find if template exists
* Search into table c_email_templates
*
* @param string $type_template Get message for key module
* @param string $user Use template public or limited to this user
* @param Translate $outputlangs Output lang object
* @return int <0 if KO,
*/
public function isEMailTemplate($type_template, $user, $outputlangs)
{
$ret=array();
$sql = "SELECT label, topic, content, lang";
$sql.= " FROM ".MAIN_DB_PREFIX.'c_email_templates';
$sql.= " WHERE type_template='".$this->db->escape($type_template)."'";
$sql.= " AND entity IN (".getEntity("c_email_templates").")";
$sql.= " AND (fk_user is NULL or fk_user = 0 or fk_user = ".$user->id.")";
if (is_object($outputlangs)) $sql.= " AND (lang = '".$outputlangs->defaultlang."' OR lang IS NULL OR lang = '')";
$sql.= $this->db->order("lang,label","ASC");
//print $sql;
$resql = $this->db->query($sql);
if ($resql)
{
$num= $this->db->num_rows($resql);
$this->db->free($resql);
return $num;
}
else
{
$this->error=get_class($this).' '.__METHOD__.' ERROR:'.$this->db->lasterror();
return -1;
}
}
/**
* Find if template exists
* Search into table c_email_templates
*
* @param string $type_template Get message for key module
* @param string $user Use template public or limited to this user
* @param Translate $outputlangs Output lang object
* @return int <0 if KO,
*/
public function fetchAllEMailTemplate($type_template, $user, $outputlangs)
{
$ret=array();
$sql = "SELECT rowid, label, topic, content, lang";
$sql.= " FROM ".MAIN_DB_PREFIX.'c_email_templates';
$sql.= " WHERE type_template='".$this->db->escape($type_template)."'";
$sql.= " AND entity IN (".getEntity("c_email_templates").")";
$sql.= " AND (fk_user is NULL or fk_user = 0 or fk_user = ".$user->id.")";
if (is_object($outputlangs)) $sql.= " AND (lang = '".$outputlangs->defaultlang."' OR lang IS NULL OR lang = '')";
$sql.= $this->db->order("lang,label","ASC");
//print $sql;
$resql = $this->db->query($sql);
if ($resql)
{
$this->lines_model=array();
while ($obj = $this->db->fetch_object($resql))
{
$line = new ModelMail();
$line->id=$obj->rowid;
$line->label=$obj->label;
$line->topic=$obj->topic;
$line->content=$obj->lacontentbel;
$line->lang=$obj->lang;
$this->lines_model[]=$line;
}
$this->db->free($resql);
return $num;
}
else
{
$this->error=get_class($this).' '.__METHOD__.' ERROR:'.$this->db->lasterror();
return -1;
}
}
} }
/**
* ModelMail
*/
class ModelMail
{
public $id;
public $label;
public $topic;
public $content;
public $lang;
}

View File

@ -374,9 +374,13 @@ class FormOther
if ($conf->use_javascript_ajax) if ($conf->use_javascript_ajax)
{ {
include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php'; include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
$comboenhancement = ajax_combobox($htmlname); $comboenhancement = ajax_combobox($htmlname);
$out.=$comboenhancement; if ($comboenhancement)
$nodatarole=($comboenhancement?' data-role="none"':''); {
$out.=$comboenhancement;
$nodatarole=($comboenhancement?' data-role="none"':'');
}
} }
// Select each sales and print them in a select input // Select each sales and print them in a select input
$out.='<select class="flat" id="'.$htmlname.'" name="'.$htmlname.'"'.$nodatarole.'>'; $out.='<select class="flat" id="'.$htmlname.'" name="'.$htmlname.'"'.$nodatarole.'>';
@ -387,7 +391,7 @@ class FormOther
$sql_usr.= " FROM ".MAIN_DB_PREFIX."user as u"; $sql_usr.= " FROM ".MAIN_DB_PREFIX."user as u";
$sql_usr.= " WHERE u.entity IN (0,".$conf->entity.")"; $sql_usr.= " WHERE u.entity IN (0,".$conf->entity.")";
if (empty($user->rights->user->user->lire)) $sql_usr.=" AND u.rowid = ".$user->id; if (empty($user->rights->user->user->lire)) $sql_usr.=" AND u.rowid = ".$user->id;
if (! empty($user->societe_id)) $sql_usr.=" AND u.fk_societe = ".$user->societe_id; if (! empty($user->societe_id)) $sql_usr.=" AND u.fk_soc = ".$user->societe_id;
// Add existing sales representatives of thirdparty of external user // Add existing sales representatives of thirdparty of external user
if (empty($user->rights->user->user->lire) && $user->societe_id) if (empty($user->rights->user->user->lire) && $user->societe_id)
{ {

View File

@ -30,7 +30,7 @@ class InfoBox
/** /**
* Name of positions 0=Home, 1=... * Name of positions 0=Home, 1=...
* *
* @return array Array with list of zones * @return string[] Array with list of zones
*/ */
static function getListOfPagesForBoxes() static function getListOfPagesForBoxes()
{ {

View File

@ -349,7 +349,7 @@ class Ldap
/** /**
* Change ldap protocol version to use. * Change ldap protocol version to use.
* *
* @return string version * @return boolean version
*/ */
function setVersion() { function setVersion() {
// LDAP_OPT_PROTOCOL_VERSION est une constante qui vaut 17 // LDAP_OPT_PROTOCOL_VERSION est une constante qui vaut 17
@ -360,7 +360,7 @@ class Ldap
/** /**
* changement du referrals. * changement du referrals.
* *
* @return string referrals * @return boolean referrals
*/ */
function setReferrals() { function setReferrals() {
// LDAP_OPT_REFERRALS est une constante qui vaut ? // LDAP_OPT_REFERRALS est une constante qui vaut ?
@ -1314,7 +1314,7 @@ class Ldap
* Convertit le temps ActiveDirectory en Unix timestamp * Convertit le temps ActiveDirectory en Unix timestamp
* *
* @param string $value AD time to convert * @param string $value AD time to convert
* @return string Unix timestamp * @return integer Unix timestamp
*/ */
function convert_time($value) function convert_time($value)
{ {

View File

@ -56,8 +56,8 @@ class Notify
/** /**
* Return message that say how many notification will occurs on requested event. * Return message that say how many notification (and to which email) will occurs on requested event.
* This is to show confirmation messages before event is done. * This is to show confirmation messages before event is recorded.
* *
* @param string $action Id of action in llx_c_action_trigger * @param string $action Id of action in llx_c_action_trigger
* @param int $socid Id of third party * @param int $socid Id of third party
@ -69,10 +69,23 @@ class Notify
global $langs; global $langs;
$langs->load("mails"); $langs->load("mails");
$nb=$this->countDefinedNotifications($action,$socid,$object); $listofnotiftodo=$this->getNotificationsArray($action,$socid,$object);
$nb=count($listofnotiftodo);
if ($nb <= 0) $texte=img_object($langs->trans("Notifications"),'email').' '.$langs->trans("NoNotificationsWillBeSent"); if ($nb <= 0) $texte=img_object($langs->trans("Notifications"),'email').' '.$langs->trans("NoNotificationsWillBeSent");
if ($nb == 1) $texte=img_object($langs->trans("Notifications"),'email').' '.$langs->trans("ANotificationsWillBeSent"); if ($nb == 1) $texte=img_object($langs->trans("Notifications"),'email').' '.$langs->trans("ANotificationsWillBeSent");
if ($nb >= 2) $texte=img_object($langs->trans("Notifications"),'email').' '.$langs->trans("SomeNotificationsWillBeSent",$nb); if ($nb >= 2) $texte=img_object($langs->trans("Notifications"),'email').' '.$langs->trans("SomeNotificationsWillBeSent",$nb);
$i=0;
foreach ($listofnotiftodo as $key => $val)
{
if ($i) $texte.=', ';
else $texte.=' (';
if ($val['isemailvalid']) $texte.=$val['email'];
else $texte.=$val['emaildesc'];
$i++;
}
if ($i) $texte.=')';
return $texte; return $texte;
} }
@ -81,22 +94,22 @@ class Notify
* *
* @param string $notifcode Code of action in llx_c_action_trigger (new usage) or Id of action in llx_c_action_trigger (old usage) * @param string $notifcode Code of action in llx_c_action_trigger (new usage) or Id of action in llx_c_action_trigger (old usage)
* @param int $socid Id of third party or 0 for all thirdparties * @param int $socid Id of third party or 0 for all thirdparties
* @param Object $object Object the notification is about * @param Object $object Object the notification is about (need it to check threshold value of some notifications)
* @return int <0 if KO, nb of notifications sent if OK * @return array|int <0 if KO, array of notifications to send if OK
*/ */
function countDefinedNotifications($notifcode,$socid,$object=null) function getNotificationsArray($notifcode,$socid,$object=null)
{ {
global $conf; global $conf, $user;
$error=0; $error=0;
$num=0; $resarray=array();
$valueforthreshold = 0; $valueforthreshold = 0;
if (is_object($object)) $valueforthreshold = $object->total_ht; if (is_object($object)) $valueforthreshold = $object->total_ht;
if (! $error) if (! $error)
{ {
$sql = "SELECT COUNT(n.rowid) as nb"; $sql = "SELECT a.code, c.email, c.rowid";
$sql.= " FROM ".MAIN_DB_PREFIX."notify_def as n,"; $sql.= " FROM ".MAIN_DB_PREFIX."notify_def as n,";
$sql.= " ".MAIN_DB_PREFIX."socpeople as c,"; $sql.= " ".MAIN_DB_PREFIX."socpeople as c,";
$sql.= " ".MAIN_DB_PREFIX."c_action_trigger as a,"; $sql.= " ".MAIN_DB_PREFIX."c_action_trigger as a,";
@ -112,13 +125,23 @@ class Notify
$sql.= " AND s.entity IN (".getEntity('societe', 1).")"; $sql.= " AND s.entity IN (".getEntity('societe', 1).")";
if ($socid > 0) $sql.= " AND s.rowid = ".$socid; if ($socid > 0) $sql.= " AND s.rowid = ".$socid;
dol_syslog(get_class($this)."::countDefinedNotifications ".$notifcode.", ".$socid."", LOG_DEBUG); dol_syslog(__METHOD__." ".$notifcode.", ".$socid."", LOG_DEBUG);
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
if ($resql) if ($resql)
{ {
$obj = $this->db->fetch_object($resql); $num = $this->db->num_rows($resql);
if ($obj) $num = $obj->nb; $i=0;
while ($i < $num)
{
$obj = $this->db->fetch_object($resql);
if ($obj)
{
$isvalid=isValidEmail($newval2);
$resarray[] = array('type'=> 'tocontact', 'code'=>trim($obj->code), 'emaildesc'=>'Contact id '.$obj->rowid, 'email'=>trim($obj->email), 'contactid'=>$obj->rowid, 'isemailvalid'=>$isvalid);
}
$i++;
}
} }
else else
{ {
@ -129,7 +152,6 @@ class Notify
if (! $error) if (! $error)
{ {
// List of notifications enabled for fixed email // List of notifications enabled for fixed email
foreach($conf->global as $key => $val) foreach($conf->global as $key => $val)
{ {
@ -146,12 +168,33 @@ class Notify
if ($valueforthreshold < $threshold) continue; if ($valueforthreshold < $threshold) continue;
$tmpemail=explode(',',$val); $tmpemail=explode(',',$val);
$num+=count($tmpemail); foreach($tmpemail as $key2 => $val2)
{
$newval2=trim($val2);
if ($newval2 == '__SUPERVISOREMAIL__')
{
if ($user->fk_user > 0)
{
$tmpuser=new User($this->db);
$tmpuser->fetch($user->fk_user);
if ($tmpuser->email) $newval2=$tmpuser->email;
else $newval2='';
}
else $newval2='';
}
if ($newval2)
{
$isvalid=isValidEmail($newval2, 0);
$resarray[]=array('type'=> 'tofixedemail', 'code'=>trim($key), 'emaildesc'=>trim($val2), 'email'=>trim($newval2), 'isemailvalid'=>$isvalid);
}
}
} }
} }
if ($error) return -1; if ($error) return -1;
return $num;
//var_dump($resarray);
return $resarray;
} }
/** /**

View File

@ -31,7 +31,7 @@ abstract class Stats
{ {
protected $db; protected $db;
var $_lastfetchdate=array(); // Dates of cache file read by methods var $_lastfetchdate=array(); // Dates of cache file read by methods
var $cachefilesuffix=''; // Suffix to add to name of cache file (to avoid file name conflicts) var $cachefilesuffix=''; // Suffix to add to name of cache file (to avoid file name conflicts)
/** /**
* Return nb of elements by month for several years * Return nb of elements by month for several years
@ -76,7 +76,7 @@ abstract class Stats
dol_syslog(get_class($this).'::'.__FUNCTION__." cache file ".$newpathofdestfile." is not found or older than now - cachedelay (".$nowgmt." - ".$cachedelay.") so we can't use it."); dol_syslog(get_class($this).'::'.__FUNCTION__." cache file ".$newpathofdestfile." is not found or older than now - cachedelay (".$nowgmt." - ".$cachedelay.") so we can't use it.");
} }
} }
// Load file into $data // Load file into $data
if ($foundintocache) // Cache file found and is not too old if ($foundintocache) // Cache file found and is not too old
{ {
@ -203,11 +203,14 @@ abstract class Stats
dol_syslog(get_class($this).'::'.__FUNCTION__." save cache file ".$newpathofdestfile." onto disk."); dol_syslog(get_class($this).'::'.__FUNCTION__." save cache file ".$newpathofdestfile." onto disk.");
if (! dol_is_dir($conf->user->dir_temp)) dol_mkdir($conf->user->dir_temp); if (! dol_is_dir($conf->user->dir_temp)) dol_mkdir($conf->user->dir_temp);
$fp = fopen($newpathofdestfile, 'w'); $fp = fopen($newpathofdestfile, 'w');
fwrite($fp, json_encode($data)); if ($fp)
fclose($fp); {
if (! empty($conf->global->MAIN_UMASK)) $newmask=$conf->global->MAIN_UMASK; fwrite($fp, json_encode($data));
@chmod($newpathofdestfile, octdec($newmask)); fclose($fp);
if (! empty($conf->global->MAIN_UMASK)) $newmask=$conf->global->MAIN_UMASK;
@chmod($newpathofdestfile, octdec($newmask));
}
else dol_syslog("Failed to write cache file", LOG_ERR);
$this->_lastfetchdate[get_class($this).'_'.__FUNCTION__]=$nowgmt; $this->_lastfetchdate[get_class($this).'_'.__FUNCTION__]=$nowgmt;
} }
@ -309,21 +312,23 @@ abstract class Stats
dol_syslog(get_class($this).'::'.__FUNCTION__." save cache file ".$newpathofdestfile." onto disk."); dol_syslog(get_class($this).'::'.__FUNCTION__." save cache file ".$newpathofdestfile." onto disk.");
if (! dol_is_dir($conf->user->dir_temp)) dol_mkdir($conf->user->dir_temp); if (! dol_is_dir($conf->user->dir_temp)) dol_mkdir($conf->user->dir_temp);
$fp = fopen($newpathofdestfile, 'w'); $fp = fopen($newpathofdestfile, 'w');
fwrite($fp, json_encode($data)); if ($fp)
fclose($fp); {
if (! empty($conf->global->MAIN_UMASK)) $newmask=$conf->global->MAIN_UMASK; fwrite($fp, json_encode($data));
@chmod($newpathofdestfile, octdec($newmask)); fclose($fp);
if (! empty($conf->global->MAIN_UMASK)) $newmask=$conf->global->MAIN_UMASK;
@chmod($newpathofdestfile, octdec($newmask));
}
$this->_lastfetchdate[get_class($this).'_'.__FUNCTION__]=$nowgmt; $this->_lastfetchdate[get_class($this).'_'.__FUNCTION__]=$nowgmt;
} }
return $data; return $data;
} }
// Here we have low level of shared code called by XxxStats.class.php // Here we have low level of shared code called by XxxStats.class.php
/** /**
* Return nb of elements by year * Return nb of elements by year
* *
@ -532,8 +537,8 @@ abstract class Stats
return $data; return $data;
} }
/** /**
* Return number or total of product refs * Return number or total of product refs
* *
@ -544,7 +549,7 @@ abstract class Stats
function _getAllByProduct($sql, $limit=10) function _getAllByProduct($sql, $limit=10)
{ {
global $langs; global $langs;
$result=array(); $result=array();
$res=array(); $res=array();
@ -567,6 +572,6 @@ abstract class Stats
else dol_print_error($this->db); else dol_print_error($this->db);
return $result; return $result;
} }
} }

View File

@ -26,95 +26,95 @@
interface Database interface Database
{ {
/** /**
* Format a SQL IF * Format a SQL IF
* *
* @param string $test Test string (example: 'cd.statut=0', 'field IS NULL') * @param string $test Test string (example: 'cd.statut=0', 'field IS NULL')
* @param string $resok resultat si test egal * @param string $resok resultat si test egal
* @param string $resko resultat si test non egal * @param string $resko resultat si test non egal
* @return string SQL string * @return string SQL string
*/ */
function ifsql($test, $resok, $resko); function ifsql($test, $resok, $resko);
/** /**
* Return datas as an array * Return datas as an array
* *
* @param resource $resultset Resultset of request * @param resource $resultset Resultset of request
* @return array Array * @return array Array
*/ */
function fetch_row($resultset); function fetch_row($resultset);
/** /**
* Convert (by PHP) a GM Timestamp date into a string date with PHP server TZ to insert into a date field. * Convert (by PHP) a GM Timestamp date into a string date with PHP server TZ to insert into a date field.
* Function to use to build INSERT, UPDATE or WHERE predica * Function to use to build INSERT, UPDATE or WHERE predica
* *
* @param string $param Date TMS to convert * @param int $param Date TMS to convert
* @return string Date in a string YYYYMMDDHHMMSS * @return string Date in a string YYYYMMDDHHMMSS
*/ */
function idate($param); function idate($param);
/** /**
* Return last error code * Return last error code
* *
* @return string lasterrno * @return string lasterrno
*/ */
function lasterrno(); function lasterrno();
/** /**
* Start transaction * Start transaction
* *
* @return int 1 if transaction successfuly opened or already opened, 0 if error * @return int 1 if transaction successfuly opened or already opened, 0 if error
*/ */
function begin(); function begin();
/** /**
* Create a new database * Create a new database
* Do not use function xxx_create_db (xxx=mysql, ...) as they are deprecated * Do not use function xxx_create_db (xxx=mysql, ...) as they are deprecated
* We force to create database with charset this->forcecharset and collate this->forcecollate * We force to create database with charset this->forcecharset and collate this->forcecollate
* *
* @param string $database Database name to create * @param string $database Database name to create
* @param string $charset Charset used to store data * @param string $charset Charset used to store data
* @param string $collation Charset used to sort data * @param string $collation Charset used to sort data
* @param string $owner Username of database owner * @param string $owner Username of database owner
* @return resource resource defined if OK, null if KO * @return resource resource defined if OK, null if KO
*/ */
function DDLCreateDb($database, $charset = '', $collation = '', $owner = ''); function DDLCreateDb($database, $charset = '', $collation = '', $owner = '');
/** /**
* Return version of database server into an array * Return version of database server into an array
* *
* @return array Version array * @return array Version array
*/ */
function getVersionArray(); function getVersionArray();
/** /**
* Convert a SQL request in Mysql syntax to native syntax * Convert a SQL request in Mysql syntax to native syntax
* *
* @param string $line SQL request line to convert * @param string $line SQL request line to convert
* @param string $type Type of SQL order ('ddl' for insert, update, select, delete or 'dml' for create, alter...) * @param string $type Type of SQL order ('ddl' for insert, update, select, delete or 'dml' for create, alter...)
* @return string SQL request line converted * @return string SQL request line converted
*/ */
static function convertSQLFromMysql($line, $type = 'ddl'); static function convertSQLFromMysql($line, $type = 'ddl');
/** /**
* Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE * Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE
* *
* @param resource $resultset Curseur de la requete voulue * @param resource $resultset Curseur de la requete voulue
* @return int Nombre de lignes * @return int Nombre de lignes
* @see num_rows * @see num_rows
*/ */
function affected_rows($resultset); function affected_rows($resultset);
/** /**
* Return description of last error * Return description of last error
* *
* @return string Error text * @return string Error text
*/ */
function error(); function error();
/** /**
* Return label of manager * Return label of manager
* *
* @return string Label * @return string Label
*/ */
function getLabel(); function getLabel();
@ -128,58 +128,58 @@ interface Database
function DDLListTables($database, $table = ''); function DDLListTables($database, $table = '');
/** /**
* Return last request executed with query() * Return last request executed with query()
* *
* @return string Last query * @return string Last query
*/ */
function lastquery(); function lastquery();
/** /**
* Define sort criteria of request * Define sort criteria of request
* *
* @param string $sortfield List of sort fields * @param string $sortfield List of sort fields
* @param string $sortorder Sort order * @param string $sortorder Sort order
* @return string String to provide syntax of a sort sql string * @return string String to provide syntax of a sort sql string
*/ */
function order($sortfield = 0, $sortorder = 0); function order($sortfield = 0, $sortorder = 0);
/** /**
* Decrypt sensitive data in database * Decrypt sensitive data in database
* *
* @param string $value Value to decrypt * @param string $value Value to decrypt
* @return string Decrypted value if used * @return string Decrypted value if used
*/ */
function decrypt($value); function decrypt($value);
/** /**
* Return datas as an array * Return datas as an array
* *
* @param resource $resultset Resultset of request * @param resource $resultset Resultset of request
* @return array Array * @return array Array
*/ */
function fetch_array($resultset); function fetch_array($resultset);
/** /**
* Return last error label * Return last error label
* *
* @return string lasterror * @return string lasterror
*/ */
function lasterror(); function lasterror();
/** /**
* Escape a string to insert data * Escape a string to insert data
* *
* @param string $stringtoencode String to escape * @param string $stringtoencode String to escape
* @return string String escaped * @return string String escaped
*/ */
function escape($stringtoencode); function escape($stringtoencode);
/** /**
* Get last ID after an insert INSERT * Get last ID after an insert INSERT
* *
* @param string $tab Table name concerned by insert. Ne sert pas sous MySql mais requis pour compatibilite avec Postgresql * @param string $tab Table name concerned by insert. Ne sert pas sous MySql mais requis pour compatibilite avec Postgresql
* @param string $fieldid Field name * @param string $fieldid Field name
* @return int Id of row * @return int Id of row
*/ */
function last_insert_id($tab, $fieldid = 'rowid'); function last_insert_id($tab, $fieldid = 'rowid');
@ -193,186 +193,186 @@ interface Database
/** /**
* Annulation d'une transaction et retour aux anciennes valeurs * Annulation d'une transaction et retour aux anciennes valeurs
* *
* @param string $log Add more log to default log line * @param string $log Add more log to default log line
* @return int 1 si annulation ok ou transaction non ouverte, 0 en cas d'erreur * @return int 1 si annulation ok ou transaction non ouverte, 0 en cas d'erreur
*/ */
function rollback($log = ''); function rollback($log = '');
/** /**
* Execute a SQL request and return the resultset * Execute a SQL request and return the resultset
* *
* @param string $query SQL query string * @param string $query SQL query string
* @param int $usesavepoint 0=Default mode, 1=Run a savepoint before and a rollbock to savepoint if error (this allow to have some request with errors inside global transactions). * @param int $usesavepoint 0=Default mode, 1=Run a savepoint before and a rollbock to savepoint if error (this allow to have some request with errors inside global transactions).
* Note that with Mysql, this parameter is not used as Myssql can already commit a transaction even if one request is in error, without using savepoints. * Note that with Mysql, this parameter is not used as Myssql can already commit a transaction even if one request is in error, without using savepoints.
* @param string $type Type of SQL order ('ddl' for insert, update, select, delete or 'dml' for create, alter...) * @param string $type Type of SQL order ('ddl' for insert, update, select, delete or 'dml' for create, alter...)
* @return resource Resultset of answer * @return resource Resultset of answer
*/ */
function query($query, $usesavepoint = 0, $type = 'auto'); function query($query, $usesavepoint = 0, $type = 'auto');
/** /**
* Connexion to server * Connexion to server
* *
* @param string $host database server host * @param string $host database server host
* @param string $login login * @param string $login login
* @param string $passwd password * @param string $passwd password
* @param string $name name of database (not used for mysql, used for pgsql) * @param string $name name of database (not used for mysql, used for pgsql)
* @param string $port Port of database server * @param string $port Port of database server
* @return resource Database access handler * @return resource Database access handler
* @see close * @see close
*/ */
function connect($host, $login, $passwd, $name, $port = 0); function connect($host, $login, $passwd, $name, $port = 0);
/** /**
* Define limits and offset of request * Define limits and offset of request
* *
* @param int $limit Maximum number of lines returned (-1=conf->liste_limit, 0=no limit) * @param int $limit Maximum number of lines returned (-1=conf->liste_limit, 0=no limit)
* @param int $offset Numero of line from where starting fetch * @param int $offset Numero of line from where starting fetch
* @return string String with SQL syntax to add a limit and offset * @return string String with SQL syntax to add a limit and offset
*/ */
function plimit($limit = 0, $offset = 0); function plimit($limit = 0, $offset = 0);
/** /**
* Return value of server parameters * Return value of server parameters
* *
* @param string $filter Filter list on a particular value * @param string $filter Filter list on a particular value
* @return array Array of key-values (key=>value) * @return array Array of key-values (key=>value)
*/ */
function getServerParametersValues($filter = ''); function getServerParametersValues($filter = '');
/** /**
* Return value of server status * Return value of server status
* *
* @param string $filter Filter list on a particular value * @param string $filter Filter list on a particular value
* @return array Array of key-values (key=>value) * @return array Array of key-values (key=>value)
*/ */
function getServerStatusValues($filter = ''); function getServerStatusValues($filter = '');
/** /**
* Return collation used in database * Return collation used in database
* *
* @return string Collation value * @return string Collation value
*/ */
function getDefaultCollationDatabase(); function getDefaultCollationDatabase();
/** /**
* Return number of lines for result of a SELECT * Return number of lines for result of a SELECT
* *
* @param resource $resultset Resulset of requests * @param resource $resultset Resulset of requests
* @return int Nb of lines * @return int Nb of lines
* @see affected_rows * @see affected_rows
*/ */
function num_rows($resultset); function num_rows($resultset);
/** /**
* Return full path of dump program * Return full path of dump program
* *
* @return string Full path of dump program * @return string Full path of dump program
*/ */
function getPathOfDump(); function getPathOfDump();
/** /**
* Return version of database client driver * Return version of database client driver
* *
* @return string Version string * @return string Version string
*/ */
function getDriverInfo(); function getDriverInfo();
/** /**
* Return generic error code of last operation. * Return generic error code of last operation.
* *
* @return string Error code (Exemples: DB_ERROR_TABLE_ALREADY_EXISTS, DB_ERROR_RECORD_ALREADY_EXISTS...) * @return string Error code (Exemples: DB_ERROR_TABLE_ALREADY_EXISTS, DB_ERROR_RECORD_ALREADY_EXISTS...)
*/ */
function errno(); function errno();
/** /**
* Create a table into database * Create a table into database
* *
* @param string $table Nom de la table * @param string $table Nom de la table
* @param array $fields Tableau associatif [nom champ][tableau des descriptions] * @param array $fields Tableau associatif [nom champ][tableau des descriptions]
* @param string $primary_key Nom du champ qui sera la clef primaire * @param string $primary_key Nom du champ qui sera la clef primaire
* @param string $type Type de la table * @param string $type Type de la table
* @param array $unique_keys Tableau associatifs Nom de champs qui seront clef unique => valeur * @param array $unique_keys Tableau associatifs Nom de champs qui seront clef unique => valeur
* @param array $fulltext_keys Tableau des Nom de champs qui seront indexes en fulltext * @param array $fulltext_keys Tableau des Nom de champs qui seront indexes en fulltext
* @param string $keys Tableau des champs cles noms => valeur * @param string $keys Tableau des champs cles noms => valeur
* @return int <0 if KO, >=0 if OK * @return int <0 if KO, >=0 if OK
*/ */
function DDLCreateTable($table, $fields, $primary_key, $type, $unique_keys = "", $fulltext_keys = "", $keys = ""); function DDLCreateTable($table, $fields, $primary_key, $type, $unique_keys = "", $fulltext_keys = "", $keys = "");
/** /**
* Return list of available charset that can be used to store data in database * Return list of available charset that can be used to store data in database
* *
* @return array List of Charset * @return array List of Charset
*/ */
function getListOfCharacterSet(); function getListOfCharacterSet();
/** /**
* Create a new field into table * Create a new field into table
* *
* @param string $table Name of table * @param string $table Name of table
* @param string $field_name Name of field to add * @param string $field_name Name of field to add
* @param string $field_desc Tableau associatif de description du champ a inserer[nom du parametre][valeur du parametre] * @param string $field_desc Tableau associatif de description du champ a inserer[nom du parametre][valeur du parametre]
* @param string $field_position Optionnel ex.: "after champtruc" * @param string $field_position Optionnel ex.: "after champtruc"
* @return int <0 if KO, >0 if OK * @return int <0 if KO, >0 if OK
*/ */
function DDLAddField($table, $field_name, $field_desc, $field_position = ""); function DDLAddField($table, $field_name, $field_desc, $field_position = "");
/** /**
* Drop a field from table * Drop a field from table
* *
* @param string $table Name of table * @param string $table Name of table
* @param string $field_name Name of field to drop * @param string $field_name Name of field to drop
* @return int <0 if KO, >0 if OK * @return int <0 if KO, >0 if OK
*/ */
function DDLDropField($table, $field_name); function DDLDropField($table, $field_name);
/** /**
* Update format of a field into a table * Update format of a field into a table
* *
* @param string $table Name of table * @param string $table Name of table
* @param string $field_name Name of field to modify * @param string $field_name Name of field to modify
* @param string $field_desc Array with description of field format * @param string $field_desc Array with description of field format
* @return int <0 if KO, >0 if OK * @return int <0 if KO, >0 if OK
*/ */
function DDLUpdateField($table, $field_name, $field_desc); function DDLUpdateField($table, $field_name, $field_desc);
/** /**
* Return list of available collation that can be used for database * Return list of available collation that can be used for database
* *
* @return array List of Collation * @return array List of Collation
*/ */
function getListOfCollation(); function getListOfCollation();
/** /**
* Return a pointer of line with description of a table or field * Return a pointer of line with description of a table or field
* *
* @param string $table Name of table * @param string $table Name of table
* @param string $field Optionnel : Name of field if we want description of field * @param string $field Optionnel : Name of field if we want description of field
* @return resource Resource * @return resource Resource
*/ */
function DDLDescTable($table, $field = ""); function DDLDescTable($table, $field = "");
/** /**
* Return version of database server * Return version of database server
* *
* @return string Version string * @return string Version string
*/ */
function getVersion(); function getVersion();
/** /**
* Return charset used to store data in database * Return charset used to store data in database
* *
* @return string Charset * @return string Charset
*/ */
function getDefaultCharacterSetDatabase(); function getDefaultCharacterSetDatabase();
/** /**
* Create a user and privileges to connect to database (even if database does not exists yet) * Create a user and privileges to connect to database (even if database does not exists yet)
* *
* @param string $dolibarr_main_db_host Ip serveur * @param string $dolibarr_main_db_host Ip serveur
* @param string $dolibarr_main_db_user Nom user a creer * @param string $dolibarr_main_db_user Nom user a creer
* @param string $dolibarr_main_db_pass Mot de passe user a creer * @param string $dolibarr_main_db_pass Mot de passe user a creer
* @param string $dolibarr_main_db_name Database name where user must be granted * @param string $dolibarr_main_db_name Database name where user must be granted
* @return int <0 if KO, >=0 if OK * @return int <0 if KO, >=0 if OK
*/ */
function DDLCreateUser( function DDLCreateUser(
$dolibarr_main_db_host, $dolibarr_main_db_host,
@ -382,85 +382,85 @@ interface Database
); );
/** /**
* Convert (by PHP) a PHP server TZ string date into a Timestamps date (GMT if gm=true) * Convert (by PHP) a PHP server TZ string date into a Timestamps date (GMT if gm=true)
* 19700101020000 -> 3600 with TZ+1 and gmt=0 * 19700101020000 -> 3600 with TZ+1 and gmt=0
* 19700101020000 -> 7200 whaterver is TZ if gmt=1 * 19700101020000 -> 7200 whaterver is TZ if gmt=1
* *
* @param string $string Date in a string (YYYYMMDDHHMMSS, YYYYMMDD, YYYY-MM-DD HH:MM:SS) * @param string $string Date in a string (YYYYMMDDHHMMSS, YYYYMMDD, YYYY-MM-DD HH:MM:SS)
* @param int $gm 1=Input informations are GMT values, otherwise local to server TZ * @param int $gm 1=Input informations are GMT values, otherwise local to server TZ
* @return timestamp|string Date TMS * @return int|string Date TMS or ''
*/ */
function jdate($string, $gm=false); function jdate($string, $gm=false);
/** /**
* Encrypt sensitive data in database * Encrypt sensitive data in database
* Warning: This function includes the escape, so it must use direct value * Warning: This function includes the escape, so it must use direct value
* *
* @param string $fieldorvalue Field name or value to encrypt * @param string $fieldorvalue Field name or value to encrypt
* @param int $withQuotes Return string with quotes * @param int $withQuotes Return string with quotes
* @return string XXX(field) or XXX('value') or field or 'value' * @return string XXX(field) or XXX('value') or field or 'value'
*/ */
function encrypt($fieldorvalue, $withQuotes = 0); function encrypt($fieldorvalue, $withQuotes = 0);
/** /**
* Validate a database transaction * Validate a database transaction
* *
* @param string $log Add more log to default log line * @param string $log Add more log to default log line
* @return int 1 if validation is OK or transaction level no started, 0 if ERROR * @return int 1 if validation is OK or transaction level no started, 0 if ERROR
*/ */
function commit($log = ''); function commit($log = '');
/** /**
* List information of columns into a table. * List information of columns into a table.
* *
* @param string $table Name of table * @param string $table Name of table
* @return array Tableau des informations des champs de la table * @return array Array with inforation on table
*/ */
function DDLInfoTable($table); function DDLInfoTable($table);
/** /**
* Free last resultset used. * Free last resultset used.
* *
* @param resource $resultset Curseur de la requete voulue * @param resource $resultset Fre cursor
* @return void * @return void
*/ */
function free($resultset = 0); function free($resultset = 0);
/** /**
* Close database connexion * Close database connexion
* *
* @return boolean True if disconnect successfull, false otherwise * @return boolean True if disconnect successfull, false otherwise
* @see connect * @see connect
*/ */
function close(); function close();
/** /**
* Return last query in error * Return last query in error
* *
* @return string lastqueryerror * @return string lastqueryerror
*/ */
function lastqueryerror(); function lastqueryerror();
/** /**
* Return connexion ID * Return connexion ID
* *
* @return string Id connexion * @return string Id connexion
*/ */
function DDLGetConnectId(); function DDLGetConnectId();
/** /**
* Renvoie la ligne courante (comme un objet) pour le curseur resultset * Renvoie la ligne courante (comme un objet) pour le curseur resultset
* *
* @param resource $resultset Curseur de la requete voulue * @param resource $resultset Curseur de la requete voulue
* @return Object Object result line or false if KO or end of cursor * @return Object Object result line or false if KO or end of cursor
*/ */
function fetch_object($resultset); function fetch_object($resultset);
/** /**
* Select a database * Select a database
* *
* @param string $database Name of database * @param string $database Name of database
* @return boolean true if OK, false if KO * @return boolean true if OK, false if KO
*/ */
function select_db($database); function select_db($database);

View File

@ -82,7 +82,7 @@ abstract class DoliDB implements Database
* Convert (by PHP) a GM Timestamp date into a string date with PHP server TZ to insert into a date field. * Convert (by PHP) a GM Timestamp date into a string date with PHP server TZ to insert into a date field.
* Function to use to build INSERT, UPDATE or WHERE predica * Function to use to build INSERT, UPDATE or WHERE predica
* *
* @param string $param Date TMS to convert * @param int $param Date TMS to convert
* @return string Date in a string YYYYMMDDHHMMSS * @return string Date in a string YYYYMMDDHHMMSS
*/ */
function idate($param) function idate($param)
@ -271,7 +271,7 @@ abstract class DoliDB implements Database
* *
* @param string $string Date in a string (YYYYMMDDHHMMSS, YYYYMMDD, YYYY-MM-DD HH:MM:SS) * @param string $string Date in a string (YYYYMMDDHHMMSS, YYYYMMDD, YYYY-MM-DD HH:MM:SS)
* @param int $gm 1=Input informations are GMT values, otherwise local to server TZ * @param int $gm 1=Input informations are GMT values, otherwise local to server TZ
* @return int|string Date TMS * @return int|string Date TMS or ''
*/ */
function jdate($string, $gm=false) function jdate($string, $gm=false)
{ {

View File

@ -437,10 +437,7 @@ class DoliDBPgsql extends DoliDB
*/ */
function getDriverInfo() function getDriverInfo()
{ {
// FIXME: Dummy method return 'pgsql php driver';
// TODO: Implement
return '';
} }
/** /**

View File

@ -296,7 +296,7 @@ class DoliDBSqlite extends DoliDB
* @param string $login login * @param string $login login
* @param string $passwd password * @param string $passwd password
* @param string $name name of database (not used for mysql, used for pgsql) * @param string $name name of database (not used for mysql, used for pgsql)
* @param string $port Port of database server * @param integer $port Port of database server
* @return resource Database access handler * @return resource Database access handler
* @see close * @see close
*/ */
@ -345,10 +345,7 @@ class DoliDBSqlite extends DoliDB
*/ */
function getDriverInfo() function getDriverInfo()
{ {
// FIXME: Dummy method return 'sqlite php driver';
// TODO: Implement
return '';
} }
@ -459,7 +456,7 @@ class DoliDBSqlite extends DoliDB
/** /**
* Return datas as an array * Return datas as an array
* *
* @param Resultset $resultset Resultset of request * @param resource $resultset Resultset of request
* @return array Array * @return array Array
*/ */
function fetch_row($resultset) function fetch_row($resultset)
@ -511,7 +508,7 @@ class DoliDBSqlite extends DoliDB
/** /**
* Free last resultset used. * Free last resultset used.
* *
* @param resultset $resultset Curseur de la requete voulue * @param integer $resultset Curseur de la requete voulue
* @return void * @return void
*/ */
function free($resultset=0) function free($resultset=0)
@ -629,7 +626,7 @@ class DoliDBSqlite extends DoliDB
* *
* @param string $fieldorvalue Field name or value to encrypt * @param string $fieldorvalue Field name or value to encrypt
* @param int $withQuotes Return string with quotes * @param int $withQuotes Return string with quotes
* @return return XXX(field) or XXX('value') or field or 'value' * @return string XXX(field) or XXX('value') or field or 'value'
*/ */
function encrypt($fieldorvalue, $withQuotes=0) function encrypt($fieldorvalue, $withQuotes=0)
{ {

View File

@ -365,10 +365,7 @@ class DoliDBSqlite3 extends DoliDB
*/ */
function getDriverInfo() function getDriverInfo()
{ {
// FIXME: Dummy method return 'sqlite3 php driver';
// TODO: Implement
return '';
} }

View File

@ -22,7 +22,14 @@
* This is the File Manager Connector for PHP. * This is the File Manager Connector for PHP.
*/ */
function GetFolders( $resourceType, $currentFolder ) /**
* GetFolders
*
* @param string $resourceType Resource type
* @param string $currentFolder Current folder
* @return void
*/
function GetFolders($resourceType, $currentFolder)
{ {
// Map the virtual path to the local server path. // Map the virtual path to the local server path.
$sServerDir = ServerMapFolder($resourceType, $currentFolder, 'GetFolders'); $sServerDir = ServerMapFolder($resourceType, $currentFolder, 'GetFolders');
@ -178,6 +185,15 @@ function CreateFolder( $resourceType, $currentFolder )
// DOL_CHANGE // DOL_CHANGE
//function FileUpload( $resourceType, $currentFolder, $sCommand ) //function FileUpload( $resourceType, $currentFolder, $sCommand )
/**
* FileUpload
*
* @param string $resourceType Resource type
* @param string $currentFolder Current folder
* @param string $sCommand Command
* @param string $CKEcallback Callback
* @return null
*/
function FileUpload($resourceType, $currentFolder, $sCommand, $CKEcallback = '') function FileUpload($resourceType, $currentFolder, $sCommand, $CKEcallback = '')
{ {
if (!isset($_FILES)) { if (!isset($_FILES)) {

View File

@ -1,4 +1,3 @@
//FIXME total not working
/* Copyright (C) 2014 delcroip <delcroip@gmail.com> /* Copyright (C) 2014 delcroip <delcroip@gmail.com>
* Laurent Destailleur 2015 <eldy@users.sourceforge.net> * Laurent Destailleur 2015 <eldy@users.sourceforge.net>
* *

View File

@ -315,7 +315,7 @@ function ajax_dialog($title,$message,$w=350,$h=150)
* @param array $events More events option. Example: array(array('method'=>'getContacts', 'url'=>dol_buildpath('/core/ajax/contacts.php',1), 'htmlname'=>'contactid', 'params'=>array('add-customer-contact'=>'disabled'))) * @param array $events More events option. Example: array(array('method'=>'getContacts', 'url'=>dol_buildpath('/core/ajax/contacts.php',1), 'htmlname'=>'contactid', 'params'=>array('add-customer-contact'=>'disabled')))
* @param int $minLengthToAutocomplete Minimum length of input string to start autocomplete * @param int $minLengthToAutocomplete Minimum length of input string to start autocomplete
* @param int $forcefocus Force focus on field * @param int $forcefocus Force focus on field
* @return string Return html string to convert a select field into a combo * @return string Return html string to convert a select field into a combo, or '' if feature has been disabled for some reason.
*/ */
function ajax_combobox($htmlname, $events=array(), $minLengthToAutocomplete=0, $forcefocus=0) function ajax_combobox($htmlname, $events=array(), $minLengthToAutocomplete=0, $forcefocus=0)
{ {

View File

@ -84,7 +84,7 @@ function bank_prepare_head(Account $object)
} }
/** /**
* Prepare array with list of tabs * Prepare array with list of tabs
* *
* @param Object $object Object related to tabs * @param Object $object Object related to tabs
* @return array Array of tabs to shoc * @return array Array of tabs to shoc
*/ */
@ -99,13 +99,13 @@ function bank_admin_prepare_head($object)
$head[$h][2] = 'general'; $head[$h][2] = 'general';
$h++; $h++;
// Show more tabs from modules // Show more tabs from modules
// Entries must be declared in modules descriptor with line // Entries must be declared in modules descriptor with line
// $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab
// $this->tabs = array('entity:-tabname); to remove a tab // $this->tabs = array('entity:-tabname); to remove a tab
complete_head_from_modules($conf, $langs, $object, $head, $h, 'bank_admin'); complete_head_from_modules($conf, $langs, $object, $head, $h, 'bank_admin');
$head[$h][0] = DOL_URL_ROOT.'/admin/bank_extrafields.php'; $head[$h][0] = DOL_URL_ROOT.'/admin/bank_extrafields.php';
$head[$h][1] = $langs->trans("ExtraFields"); $head[$h][1] = $langs->trans("ExtraFields");
$head[$h][2] = 'attributes'; $head[$h][2] = 'attributes';
@ -120,12 +120,12 @@ function bank_admin_prepare_head($object)
* Check SWIFT informations for a bank account * Check SWIFT informations for a bank account
* *
* @param Account $account A bank account * @param Account $account A bank account
* @return boolean True if informations are valid, false otherwise * @return boolean True if informations are valid, false otherwise
*/ */
function checkSwiftForAccount($account) function checkSwiftForAccount($account)
{ {
$swift = $account->bic; $swift = $account->bic;
if (eregi("^([a-zA-Z]){4}([a-zA-Z]){2}([0-9a-zA-Z]){2}([0-9a-zA-Z]{3})?$", $swift)) { if (preg_march("/^([a-zA-Z]){4}([a-zA-Z]){2}([0-9a-zA-Z]){2}([0-9a-zA-Z]{3})?$/", $swift)) {
return true; return true;
} else { } else {
return false; return false;

View File

@ -61,7 +61,7 @@ else $genbarcode_loc = $conf->global->GENBARCODE_LOCATION;
* *
* @param string $code Code * @param string $code Code
* @param string $encoding Encoding * @param string $encoding Encoding
* @param string $scale Scale * @param integer $scale Scale
* @param string $mode 'png' or 'jpg' ... * @param string $mode 'png' or 'jpg' ...
* *
* *
@ -159,7 +159,7 @@ function barcode_encode($code,$encoding)
* Calculate EAN sum * Calculate EAN sum
* *
* @param string $ean EAN to encode * @param string $ean EAN to encode
* @return string Sum * @return integer Sum
*/ */
function barcode_gen_ean_sum($ean) function barcode_gen_ean_sum($ean)
{ {
@ -299,7 +299,7 @@ function barcode_encode_genbarcode($code,$encoding)
* @param string $mode png,gif,jpg (default='png') * @param string $mode png,gif,jpg (default='png')
* @param int $total_y the total height of the image ( default: scale * 60 ) * @param int $total_y the total height of the image ( default: scale * 60 )
* @param array $space default: $space[top] = 2 * $scale; $space[bottom]= 2 * $scale; $space[left] = 2 * $scale; $space[right] = 2 * $scale; * @param array $space default: $space[top] = 2 * $scale; $space[bottom]= 2 * $scale; $space[left] = 2 * $scale; $space[right] = 2 * $scale;
* @return void * @return string|null
*/ */
function barcode_outimage($text, $bars, $scale = 1, $mode = "png", $total_y = 0, $space = '') function barcode_outimage($text, $bars, $scale = 1, $mode = "png", $total_y = 0, $space = '')
{ {

View File

@ -94,7 +94,7 @@ function contact_prepare_head(Contact $object)
$head[$tab][2] = 'category'; $head[$tab][2] = 'category';
$tab++; $tab++;
} }
// Info // Info
$head[$tab][0] = DOL_URL_ROOT.'/contact/info.php?id='.$object->id; $head[$tab][0] = DOL_URL_ROOT.'/contact/info.php?id='.$object->id;
$head[$tab][1] = $langs->trans("Info"); $head[$tab][1] = $langs->trans("Info");

Some files were not shown because too many files have changed in this diff Show More