forked from Wavyzz/dolibarr
Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop
This commit is contained in:
10
ChangeLog
10
ChangeLog
@@ -5,6 +5,13 @@ English Dolibarr ChangeLog
|
||||
|
||||
***** ChangeLog for 3.7 compared to 3.6.* *****
|
||||
For users:
|
||||
- New: Add permissions to read all trips and expenses.
|
||||
- New: Can filter on date into tab "Referring object" of a project.
|
||||
- New: Module notification has been enhanced:
|
||||
EMail use now language of target contact.
|
||||
Can also define a fixed email for notifications.
|
||||
- New: Feature to link manually an order to an invoice does not disappear once
|
||||
link has been done.
|
||||
- New: Can set a color on user card (visible into agenda view).
|
||||
- New: extrafields for projects and tasks are exported to ODT documents.
|
||||
- New: Add number of active notification into tab title (like we do for notes and documents)
|
||||
@@ -138,6 +145,8 @@ For developers:
|
||||
WARNING: Following changes may create regression for some external modules, but was necessary to make
|
||||
Dolibarr better:
|
||||
|
||||
- If you can't see trips and expenses records, check that you have the new permission "read all
|
||||
trips and expenses".
|
||||
- Deprecated module "oscommerce" were removed.
|
||||
- Changed the way parameters are provided to scripts sync_xxx_ldap2dolibarr.php
|
||||
- Some field into database were renamed from "libelle" to "label".
|
||||
@@ -156,6 +165,7 @@ Dolibarr better:
|
||||
- Fix: box of customer and propsects were not correctly disabled.
|
||||
- Fix: right and error management #1961
|
||||
- Fix: Fix Error when trying to clone an Order #1943
|
||||
- Fix: [ bug #1618 ] PHP Error thrown when saving a barcode
|
||||
|
||||
***** ChangeLog for 3.6.1 compared to 3.6.* *****
|
||||
For users:
|
||||
|
||||
@@ -3,7 +3,7 @@ Section: web
|
||||
Priority: optional
|
||||
Maintainer: Laurent Destailleur (eldy) <eldy@users.sourceforge.net>
|
||||
# Uploaders: Laurent Destailleur (eldy) <eldy@users.sourceforge.net> # Only if differs from Maintainer
|
||||
Standards-Version: 3.9.4
|
||||
Standards-Version: 3.9.6
|
||||
Homepage: http://www.dolibarr.org
|
||||
Build-Depends: debhelper (>= 9), po-debconf
|
||||
# This package need at least debian 7 or ubuntu 13.04 or any distribution based on this version
|
||||
@@ -16,7 +16,8 @@ Depends: libapache2-mod-php5 | libapache2-mod-php5filter | php5-cgi | php5-fpm |
|
||||
php5-mysql | php5-mysqli, php5-curl, php5-gd, php5-ldap, php5-geoip,
|
||||
# Required PHP libraries
|
||||
php-pear, php-mail-mime,
|
||||
# php-tcpdf, libfpdi-php, libfpdf-tpl-php, php-fpdf,
|
||||
# php-tcpdf, libfpdi-php,
|
||||
# libfpdf-tpl-php, php-fpdf,
|
||||
# libphp-adodb,
|
||||
# libnusoap-php,
|
||||
# libphp-pclzip,
|
||||
@@ -26,9 +27,10 @@ Depends: libapache2-mod-php5 | libapache2-mod-php5filter | php5-cgi | php5-fpm |
|
||||
# fonts-dejavu-core | ttf-dejavu-core,
|
||||
xdg-utils,
|
||||
mysql-server,
|
||||
mysql-client,
|
||||
${misc:Depends},
|
||||
${perl:Depends}
|
||||
Recommends: mysql-client, apache2 | lighttpd | httpd
|
||||
Recommends: apache2 | lighttpd | httpd
|
||||
Suggests: www-browser
|
||||
Description: Web based software to manage a company or foundation
|
||||
Dolibarr ERP & CRM is an easy to use open source/free software for small
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: Dolibarr
|
||||
Upstream-Contact: Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
Source: http://sourceforge.net/projects/dolibarr/files/
|
||||
Source: http://www.dolibarr.org/files/stable/standard/
|
||||
|
||||
Files: *
|
||||
Copyright: 2002-2009, Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
|
||||
@@ -65,8 +65,9 @@ if ($action == 'add')
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."user_param";
|
||||
$sql.= " WHERE param = 'MAIN_BOXES_".$db->escape(GETPOST("pos","alpha"))."' AND value = '1'";
|
||||
$sql.= " AND entity = ".$conf->entity;
|
||||
$resql = $db->query($sql);
|
||||
|
||||
dol_syslog("boxes.php search fk_user to activate box for", LOG_DEBUG);
|
||||
$resql = $db->query($sql);
|
||||
if ($resql)
|
||||
{
|
||||
$num = $db->num_rows($resql);
|
||||
@@ -227,8 +228,8 @@ $actives = array();
|
||||
$sql = "SELECT b.rowid, b.box_id, b.position, b.box_order,";
|
||||
$sql.= " bd.rowid as boxid";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."boxes as b, ".MAIN_DB_PREFIX."boxes_def as bd";
|
||||
$sql.= " WHERE b.entity = ".$conf->entity;
|
||||
$sql.= " AND b.box_id = bd.rowid";
|
||||
$sql.= " WHERE b.box_id = bd.rowid";
|
||||
$sql.= " AND b.entity IN (0,".(! empty($conf->multicompany->enabled) && ! empty($conf->multicompany->transverse_mode)?"1,":"").$conf->entity.")";
|
||||
$sql.= " AND b.fk_user=0";
|
||||
$sql.= " ORDER by b.position, b.box_order";
|
||||
|
||||
@@ -237,6 +238,8 @@ $resql = $db->query($sql);
|
||||
if ($resql)
|
||||
{
|
||||
$num = $db->num_rows($resql);
|
||||
|
||||
// Check record to know if we must recalculate sort order
|
||||
$i = 0;
|
||||
$decalage=0;
|
||||
$var=false;
|
||||
@@ -310,7 +313,6 @@ if ($resql)
|
||||
$db->free($resql);
|
||||
}
|
||||
|
||||
|
||||
// Available boxes to activate
|
||||
$boxtoadd=InfoBox::listBoxes($db,'available',-1,null,$actives);
|
||||
|
||||
@@ -372,7 +374,7 @@ print '</table>';
|
||||
|
||||
// Activated boxes
|
||||
$boxactivated=InfoBox::listBoxes($db,'activated',-1,null);
|
||||
|
||||
//var_dump($boxactivated);
|
||||
print "<br>\n\n";
|
||||
print_titre($langs->trans("BoxesActivated"));
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ $langs->load("other");
|
||||
$langs->load("orders");
|
||||
$langs->load("propal");
|
||||
$langs->load("bills");
|
||||
$langs->load("errors");
|
||||
|
||||
// Security check
|
||||
if (!$user->admin)
|
||||
@@ -39,19 +40,32 @@ if (!$user->admin)
|
||||
|
||||
$action = GETPOST("action");
|
||||
|
||||
|
||||
/*
|
||||
* Actions
|
||||
*/
|
||||
|
||||
if ($action == 'setvalue' && $user->admin)
|
||||
{
|
||||
$result=dolibarr_set_const($db, "NOTIFICATION_EMAIL_FROM",$_POST["email_from"],'chaine',0,'',$conf->entity);
|
||||
if ($result >= 0)
|
||||
$result=dolibarr_set_const($db, "NOTIFICATION_EMAIL_FROM", $_POST["email_from"], 'chaine', 0, '', $conf->entity);
|
||||
if ($result < 0) $error++;
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
foreach($_POST as $key => $val)
|
||||
{
|
||||
if (! preg_match('/^NOTIFICATION_FIXEDEMAIL_/',$key)) continue;
|
||||
//print $key.' - '.$val.'<br>';
|
||||
$result=dolibarr_set_const($db, $key, $val, 'chaine', 0, '', $conf->entity);
|
||||
}
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
setEventMessage($langs->trans("SetupSaved"));
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
setEventMessage($langs->trans("Error"),'errors');
|
||||
}
|
||||
}
|
||||
@@ -67,7 +81,7 @@ llxHeader();
|
||||
$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>';
|
||||
print_fiche_titre($langs->trans("NotificationSetup"),$linkback,'setup');
|
||||
|
||||
print $langs->trans("NotificationsDesc").'<br><br>';
|
||||
print $langs->trans("NotificationsDesc").'<br><br>';
|
||||
|
||||
print '<form method="post" action="'.$_SERVER["PHP_SELF"].'">';
|
||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
@@ -83,19 +97,13 @@ print "</tr>\n";
|
||||
$var=!$var;
|
||||
print '<tr '.$bc[$var].'><td>';
|
||||
print $langs->trans("NotificationEMailFrom").'</td><td>';
|
||||
print '<input size="32" type="text" name="email_from" value="'.$conf->global->NOTIFICATION_EMAIL_FROM.'">';
|
||||
if (! empty($conf->global->NOTIFICATION_EMAIL_FROM) && ! isValidEmail($conf->global->NOTIFICATION_EMAIL_FROM)) print ' '.img_warning($langs->trans("BadEMail"));
|
||||
print '<input size="32" type="email" name="email_from" value="'.$conf->global->NOTIFICATION_EMAIL_FROM.'">';
|
||||
if (! empty($conf->global->NOTIFICATION_EMAIL_FROM) && ! isValidEmail($conf->global->NOTIFICATION_EMAIL_FROM)) print ' '.img_warning($langs->trans("ErrorBadEMail"));
|
||||
print '</td></tr>';
|
||||
print '</table>';
|
||||
|
||||
print '<br>';
|
||||
|
||||
print '<center><input type="submit" class="button" value="'.$langs->trans("Modify").'"></center>';
|
||||
|
||||
print '</form>';
|
||||
print '<br>';
|
||||
|
||||
|
||||
print_fiche_titre($langs->trans("ListOfAvailableNotifications"),'','');
|
||||
|
||||
print '<table class="noborder" width="100%">';
|
||||
@@ -103,6 +111,7 @@ print '<tr class="liste_titre">';
|
||||
print '<td>'.$langs->trans("Module").'</td>';
|
||||
print '<td>'.$langs->trans("Code").'</td>';
|
||||
print '<td>'.$langs->trans("Label").'</td>';
|
||||
print '<td>'.$langs->trans("FixedEmailTarget").'</td>';
|
||||
print "</tr>\n";
|
||||
|
||||
// Load array of available notifications
|
||||
@@ -123,10 +132,21 @@ foreach($listofnotifiedevents as $notifiedevent)
|
||||
print '<td>'.$elementLabel.'</td>';
|
||||
print '<td>'.$notifiedevent['code'].'</td>';
|
||||
print '<td>'.$label.'</td>';
|
||||
$param='NOTIFICATION_FIXEDEMAIL_'.$notifiedevent['code'];
|
||||
print '<td><input type="email" size="32" name="'.$param.'" value="'.dol_escape_htmltag(GETPOST($param)?GETPOST($param,'alpha'):$conf->global->$param).'">';
|
||||
if (! empty($conf->global->$param) && ! isValidEmail($conf->global->$param)) print ' '.img_warning($langs->trans("ErrorBadEMail"));
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
}
|
||||
print '</table>';
|
||||
|
||||
$db->close();
|
||||
print '<br>';
|
||||
|
||||
print '<center><input type="submit" class="button" value="'.$langs->trans("Save").'"></center>';
|
||||
|
||||
print '</form>';
|
||||
|
||||
|
||||
llxFooter();
|
||||
|
||||
$db->close();
|
||||
|
||||
@@ -43,15 +43,9 @@ else
|
||||
$obj_facturation = new Facturation();
|
||||
}
|
||||
|
||||
print '<div class="liste_articles">';
|
||||
|
||||
require ('tpl/liste_articles.tpl.php');
|
||||
|
||||
$obj_facturation->prixTotalHt($lst_total_ht);
|
||||
$obj_facturation->prixTotalTtc($lst_total_ttc);
|
||||
|
||||
print '</div>';
|
||||
|
||||
// Left area with selected articles (shopping cart)
|
||||
print '<div class="principal">';
|
||||
|
||||
$page=GETPOST('menu','alpha');
|
||||
@@ -75,4 +69,18 @@ else
|
||||
|
||||
print '</div>';
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Right area with selected articles (shopping cart)
|
||||
print '<div class="liste_articles">';
|
||||
|
||||
require ('tpl/liste_articles.tpl.php');
|
||||
$obj_facturation->prixTotalHt($lst_total_ht);
|
||||
$obj_facturation->prixTotalTtc($lst_total_ttc);
|
||||
|
||||
print '</div>';
|
||||
|
||||
|
||||
$_SESSION['serObjFacturation'] = serialize($obj_facturation);
|
||||
|
||||
@@ -30,23 +30,24 @@ p {
|
||||
.conteneur {
|
||||
background: #fff;
|
||||
text-align: left;
|
||||
width: 770px;
|
||||
max-width: 770px;
|
||||
margin: 10px auto;
|
||||
border: 2px solid #000;
|
||||
}
|
||||
|
||||
.conteneur_img_gauche {
|
||||
background: url("../img/bg_conteneur_gauche.png") top left repeat-y;
|
||||
/* background: url("../img/bg_conteneur_gauche.png") top left repeat-y; */
|
||||
}
|
||||
|
||||
.conteneur_img_droite {
|
||||
background: url("../img/bg_conteneur_droite.png") top right repeat-y;
|
||||
/* background: url("../img/bg_conteneur_droite.png") top right repeat-y; */
|
||||
}
|
||||
|
||||
/* ------------------- Header ------------------- */
|
||||
.entete {
|
||||
height: 15px;
|
||||
margin: 0;
|
||||
background: url('../img/bg_entete.png') no-repeat left top;
|
||||
/* background: url('../img/bg_entete.png') no-repeat left top; */
|
||||
}
|
||||
|
||||
.entete span {
|
||||
@@ -57,7 +58,6 @@ p {
|
||||
.menu_principal {
|
||||
margin: 0 20px 20px 15px;
|
||||
font-size: 14px;
|
||||
width: 735px;
|
||||
height: 84px;
|
||||
background: #CCCCCC;
|
||||
background-image: linear-gradient(top, rgba(255,255,255,.3) 0%, rgba(40,40,40,.3) 100%);
|
||||
@@ -80,20 +80,21 @@ p {
|
||||
|
||||
.menu li {
|
||||
float: left;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.menu_choix1,.menu_choix2 {
|
||||
font-size: 1.4em;
|
||||
text-align: left;
|
||||
width: 180px;
|
||||
}
|
||||
|
||||
.menu_choix1 a,.menu_choix2 a {
|
||||
display: block;
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
width: 100px;
|
||||
padding-top: 18px;
|
||||
padding-left: 54px;
|
||||
font-size: 14px;
|
||||
height: 48px;
|
||||
background: url('../img/new.png') top left no-repeat;
|
||||
}
|
||||
@@ -115,7 +116,6 @@ p {
|
||||
text-align: right;
|
||||
font-style: italic;
|
||||
font-weight: normal;
|
||||
width: 340px;
|
||||
display: block;
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
@@ -126,11 +126,13 @@ p {
|
||||
font-weight: normal;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
li.menu_choix0 {
|
||||
float: right;
|
||||
}
|
||||
|
||||
/* ------------------- R<>capitulatif des articles ------------------- */
|
||||
.liste_articles {
|
||||
width: 215px;
|
||||
min-width: 215px;
|
||||
float: right;
|
||||
margin-top: 8px;
|
||||
margin-right: 20px;
|
||||
@@ -219,7 +221,7 @@ p.titre {
|
||||
float: left;
|
||||
margin: 0 15px;
|
||||
padding: 0;
|
||||
width: 495px;
|
||||
max-width: 500px;
|
||||
}
|
||||
|
||||
.titre1 {
|
||||
@@ -237,7 +239,6 @@ p.titre {
|
||||
.cadre_facturation {
|
||||
border: 2px solid #ddd;
|
||||
margin-bottom: 15px;
|
||||
padding: 10px 10px;
|
||||
}
|
||||
|
||||
.principal p {
|
||||
@@ -374,7 +375,7 @@ p.titre {
|
||||
.pied {
|
||||
clear: both;
|
||||
height: 15px;
|
||||
background: url('../img/bg_pied.png') no-repeat bottom left;
|
||||
/* background: url('../img/bg_pied.png') no-repeat bottom left; */
|
||||
}
|
||||
|
||||
/* ------------------- Param<61>tres communs (messages d'erreur, informations, etc...) ------------------- */
|
||||
|
||||
@@ -158,9 +158,9 @@ $sql = "SELECT t.rowid, t.taux";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."c_tva as t";
|
||||
$sql.= ", ".MAIN_DB_PREFIX."c_country as c";
|
||||
$sql.= " WHERE t.fk_pays = c.rowid";
|
||||
$sql.= " AND c.active = 1";
|
||||
$sql.= " AND t.active = 1";
|
||||
$sql.= " AND c.code = '".$mysoc->country_code."'";
|
||||
//print $request;
|
||||
//print $sql;
|
||||
|
||||
$resql = $db->query($sql);
|
||||
if ($resql)
|
||||
|
||||
@@ -111,8 +111,9 @@ $langs->load("cashdesk");
|
||||
<td>
|
||||
<input class="texte1_off" type="text" name="txtStock" value="<?php echo $obj_facturation->stock() ?>" disabled="disabled" />
|
||||
</td>
|
||||
<!-- Affichage du prix unitaire -->
|
||||
<td><input class="texte1_off" type="text" name="txtPrixUnit" value="<?php echo price2num($obj_facturation->prix(), 'MU'); ?>" disabled="disabled" /></td>
|
||||
<!-- Show unit price -->
|
||||
<?php // TODO Remove the disabled and use this value when adding product into cart ?>
|
||||
<td><input class="texte1_off" type="text" name="txtPrixUnit" value="<?php echo price2num($obj_facturation->prix(), 'MU'); ?>" onchange="javascript: modif();" disabled="disabled" /></td>
|
||||
<td><?php echo $conf->currency; ?></td>
|
||||
<!-- Choix de la remise -->
|
||||
<td><input class="texte1" type="text" id="txtRemise" name="txtRemise" value="0" onkeyup="javascript: modif();" onfocus="javascript: this.select();"/>
|
||||
@@ -122,9 +123,9 @@ $langs->load("cashdesk");
|
||||
<td><input class="texte1_off" type="text" name="txtTotal" value="" disabled="disabled" /></td><td><?php echo $conf->currency; ?></td>
|
||||
<!-- Choix du taux de TVA -->
|
||||
<td class="select_tva">
|
||||
<?php //var_dump($tab_tva); ?>
|
||||
<select name="selTva" onchange="javascript: modif();" >
|
||||
<?php
|
||||
|
||||
$tva_tx = $obj_facturation->tva();
|
||||
$tab_tva_size=count($tab_tva);
|
||||
for($i=0;$i < $tab_tva_size;$i++) {
|
||||
@@ -132,12 +133,10 @@ $langs->load("cashdesk");
|
||||
if ( $tva_tx == $tab_tva[$i]['taux'] )
|
||||
$selected = 'selected="selected"';
|
||||
else
|
||||
$selected = '';
|
||||
$selected = '';
|
||||
|
||||
echo ('<option '.$selected.' value="'.$tab_tva[$i]['rowid'].'">'.$tab_tva[$i]['taux'].'</option>'."\n ");
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
@@ -111,10 +111,14 @@ if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'e
|
||||
include DOL_DOCUMENT_ROOT . '/core/actions_setnotes.inc.php'; // Must be include, not includ_once
|
||||
|
||||
// Action clone object
|
||||
if ($action == 'confirm_clone' && $confirm == 'yes') {
|
||||
if (1 == 0 && ! GETPOST('clone_content') && ! GETPOST('clone_receivers')) {
|
||||
if ($action == 'confirm_clone' && $confirm == 'yes')
|
||||
{
|
||||
if (1 == 0 && ! GETPOST('clone_content') && ! GETPOST('clone_receivers'))
|
||||
{
|
||||
setEventMessage($langs->trans("NoCloneOptionsSpecified"), 'errors');
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($object->id > 0) {
|
||||
$result = $object->createFromClone($socid);
|
||||
if ($result > 0) {
|
||||
@@ -129,7 +133,8 @@ if ($action == 'confirm_clone' && $confirm == 'yes') {
|
||||
}
|
||||
|
||||
// Delete proposal
|
||||
else if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->propal->supprimer) {
|
||||
else if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->propal->supprimer)
|
||||
{
|
||||
$result = $object->delete($user);
|
||||
if ($result > 0) {
|
||||
header('Location: ' . DOL_URL_ROOT . '/comm/propal/list.php');
|
||||
@@ -141,7 +146,8 @@ else if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->prop
|
||||
}
|
||||
|
||||
// Remove line
|
||||
else if ($action == 'confirm_deleteline' && $confirm == 'yes' && $user->rights->propal->creer) {
|
||||
else if ($action == 'confirm_deleteline' && $confirm == 'yes' && $user->rights->propal->creer)
|
||||
{
|
||||
$result = $object->deleteline($lineid);
|
||||
// reorder lines
|
||||
if ($result)
|
||||
@@ -164,19 +170,29 @@ else if ($action == 'confirm_deleteline' && $confirm == 'yes' && $user->rights->
|
||||
}
|
||||
|
||||
// Validation
|
||||
else if ($action == 'confirm_validate' && $confirm == 'yes' && $user->rights->propal->valider) {
|
||||
else if ($action == 'confirm_validate' && $confirm == 'yes' && $user->rights->propal->valider)
|
||||
{
|
||||
$result = $object->valid($user);
|
||||
if ($result >= 0) {
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
|
||||
// Define output language
|
||||
$outputlangs = $langs;
|
||||
if (! empty($conf->global->MAIN_MULTILANGS)) {
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$newlang = (GETPOST('lang_id') ? GETPOST('lang_id') : $object->thirdparty->default_lang);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
if ($result >= 0)
|
||||
{
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
// Define output language
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
$outputlangs = $langs;
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang = GETPOST('lang_id','alpha');
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang;
|
||||
if (! empty($newlang)) {
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
$model=$object->modelpdf;
|
||||
if (empty($model)) { $tmp=getListOfModels($db, 'propal'); $keys=array_keys($tmp); $model=$keys[0]; }
|
||||
$ret = $object->fetch($id); // Reload to get new records
|
||||
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
}
|
||||
$ret = $object->fetch($id); // Reload to get new records
|
||||
$object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
}
|
||||
} else {
|
||||
$langs->load("errors");
|
||||
@@ -185,8 +201,9 @@ else if ($action == 'confirm_validate' && $confirm == 'yes' && $user->rights->pr
|
||||
}
|
||||
}
|
||||
|
||||
else if ($action == 'setdate' && $user->rights->propal->creer) {
|
||||
$datep = dol_mktime(12, 0, 0, $_POST ['remonth'], $_POST ['reday'], $_POST ['reyear']);
|
||||
else if ($action == 'setdate' && $user->rights->propal->creer)
|
||||
{
|
||||
$datep = dol_mktime(12, 0, 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']);
|
||||
|
||||
if (empty($datep)) {
|
||||
$error ++;
|
||||
@@ -198,23 +215,29 @@ else if ($action == 'setdate' && $user->rights->propal->creer) {
|
||||
if ($result < 0)
|
||||
dol_print_error($db, $object->error);
|
||||
}
|
||||
} else if ($action == 'setecheance' && $user->rights->propal->creer) {
|
||||
$result = $object->set_echeance($user, dol_mktime(12, 0, 0, $_POST ['echmonth'], $_POST ['echday'], $_POST ['echyear']));
|
||||
}
|
||||
else if ($action == 'setecheance' && $user->rights->propal->creer)
|
||||
{
|
||||
$result = $object->set_echeance($user, dol_mktime(12, 0, 0, $_POST['echmonth'], $_POST['echday'], $_POST['echyear']));
|
||||
if ($result < 0)
|
||||
dol_print_error($db, $object->error);
|
||||
} else if ($action == 'setdate_livraison' && $user->rights->propal->creer) {
|
||||
$result = $object->set_date_livraison($user, dol_mktime(12, 0, 0, $_POST ['liv_month'], $_POST ['liv_day'], $_POST ['liv_year']));
|
||||
}
|
||||
else if ($action == 'setdate_livraison' && $user->rights->propal->creer)
|
||||
{
|
||||
$result = $object->set_date_livraison($user, dol_mktime(12, 0, 0, $_POST['liv_month'], $_POST['liv_day'], $_POST['liv_year']));
|
||||
if ($result < 0)
|
||||
dol_print_error($db, $object->error);
|
||||
}
|
||||
|
||||
// Positionne ref client
|
||||
else if ($action == 'set_ref_client' && $user->rights->propal->creer) {
|
||||
$object->set_ref_client($user, $_POST ['ref_client']);
|
||||
else if ($action == 'set_ref_client' && $user->rights->propal->creer)
|
||||
{
|
||||
$object->set_ref_client($user, $_POST['ref_client']);
|
||||
}
|
||||
|
||||
// Create proposal
|
||||
else if ($action == 'add' && $user->rights->propal->creer) {
|
||||
else if ($action == 'add' && $user->rights->propal->creer)
|
||||
{
|
||||
$object->socid = $socid;
|
||||
$object->fetch_thirdparty();
|
||||
|
||||
@@ -296,11 +319,11 @@ else if ($action == 'add' && $user->rights->propal->creer) {
|
||||
|
||||
for($i = 1; $i <= $conf->global->PRODUCT_SHOW_WHEN_CREATE; $i ++)
|
||||
{
|
||||
if ($_POST ['idprod' . $i]) {
|
||||
if ($_POST['idprod' . $i]) {
|
||||
$xid = 'idprod' . $i;
|
||||
$xqty = 'qty' . $i;
|
||||
$xremise = 'remise' . $i;
|
||||
$object->add_product($_POST [$xid], $_POST [$xqty], $_POST [$xremise]);
|
||||
$object->add_product($_POST[$xid], $_POST[$xqty], $_POST[$xremise]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -464,19 +487,26 @@ else if ($action == 'add' && $user->rights->propal->creer) {
|
||||
{
|
||||
$db->commit();
|
||||
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
// Define output language
|
||||
$outputlangs = $langs;
|
||||
if (! empty($conf->global->MAIN_MULTILANGS))
|
||||
{
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$newlang = (GETPOST('lang_id') ? GETPOST('lang_id') : $object->thirdparty->default_lang);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
$ret = $object->fetch($id); // Reload to get new records
|
||||
$object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
}
|
||||
// Define output language
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
$outputlangs = $langs;
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang = GETPOST('lang_id','alpha');
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang;
|
||||
if (! empty($newlang)) {
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
$model=$object->modelpdf;
|
||||
if (empty($model)) {
|
||||
$tmp=getListOfModels($db, 'propal'); $keys=array_keys($tmp); $model=$keys[0];
|
||||
}
|
||||
|
||||
$ret = $object->fetch($id); // Reload to get new records
|
||||
$result=$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
if ($result < 0) dol_print_error($db,$result);
|
||||
}
|
||||
|
||||
header('Location: ' . $_SERVER["PHP_SELF"] . '?id=' . $id);
|
||||
exit();
|
||||
@@ -544,7 +574,7 @@ if (GETPOST('removedfile')) {
|
||||
$upload_dir_tmp = $vardir . '/temp';
|
||||
|
||||
// TODO Delete only files that was uploaded from email form
|
||||
dol_remove_file_process($_POST ['removedfile'], 0);
|
||||
dol_remove_file_process($_POST['removedfile'], 0);
|
||||
$action = 'presend';
|
||||
}
|
||||
|
||||
@@ -555,35 +585,35 @@ if ($action == 'send' && ! GETPOST('addfile') && ! GETPOST('removedfile') && ! G
|
||||
$langs->load('mails');
|
||||
|
||||
if ($object->id > 0) {
|
||||
if ($_POST ['sendto']) {
|
||||
if ($_POST['sendto']) {
|
||||
// Le destinataire a ete fourni via le champ libre
|
||||
$sendto = $_POST ['sendto'];
|
||||
$sendto = $_POST['sendto'];
|
||||
$sendtoid = 0;
|
||||
} elseif ($_POST ['receiver'] != '-1') {
|
||||
} elseif ($_POST['receiver'] != '-1') {
|
||||
// Recipient was provided from combo list
|
||||
if ($_POST ['receiver'] == 'thirdparty') // Id of third party
|
||||
if ($_POST['receiver'] == 'thirdparty') // Id of third party
|
||||
{
|
||||
$sendto = $object->thirdparty->email;
|
||||
$sendtoid = 0;
|
||||
} else // Id du contact
|
||||
{
|
||||
$sendto = $object->thirdparty->contact_get_property($_POST ['receiver'], 'email');
|
||||
$sendtoid = $_POST ['receiver'];
|
||||
$sendto = $object->thirdparty->contact_get_property($_POST['receiver'], 'email');
|
||||
$sendtoid = $_POST['receiver'];
|
||||
}
|
||||
}
|
||||
|
||||
if (dol_strlen($sendto)) {
|
||||
$langs->load("commercial");
|
||||
|
||||
$from = $_POST ['fromname'] . ' <' . $_POST ['frommail'] . '>';
|
||||
$replyto = $_POST ['replytoname'] . ' <' . $_POST ['replytomail'] . '>';
|
||||
$message = $_POST ['message'];
|
||||
$sendtocc = $_POST ['sendtocc'];
|
||||
$from = $_POST['fromname'] . ' <' . $_POST['frommail'] . '>';
|
||||
$replyto = $_POST['replytoname'] . ' <' . $_POST['replytomail'] . '>';
|
||||
$message = $_POST['message'];
|
||||
$sendtocc = $_POST['sendtocc'];
|
||||
$sendtobcc = (empty($conf->global->MAIN_MAIL_AUTOCOPY_PROPOSAL_TO)?'':$conf->global->MAIN_MAIL_AUTOCOPY_PROPOSAL_TO);
|
||||
$deliveryreceipt = $_POST ['deliveryreceipt'];
|
||||
$deliveryreceipt = $_POST['deliveryreceipt'];
|
||||
|
||||
if (dol_strlen($_POST ['subject']))
|
||||
$subject = $_POST ['subject'];
|
||||
if (dol_strlen($_POST['subject']))
|
||||
$subject = $_POST['subject'];
|
||||
else
|
||||
$subject = $langs->transnoentities('Propal') . ' ' . $object->ref;
|
||||
$actiontypecode = 'AC_PROP';
|
||||
@@ -683,9 +713,9 @@ if ($action == 'modif' && $user->rights->propal->creer)
|
||||
}
|
||||
|
||||
else if ($action == "setabsolutediscount" && $user->rights->propal->creer) {
|
||||
if ($_POST ["remise_id"]) {
|
||||
if ($_POST["remise_id"]) {
|
||||
if ($object->id > 0) {
|
||||
$result = $object->insert_discount($_POST ["remise_id"]);
|
||||
$result = $object->insert_discount($_POST["remise_id"]);
|
||||
if ($result < 0) {
|
||||
setEventMessage($object->error, 'errors');
|
||||
}
|
||||
@@ -723,7 +753,7 @@ else if ($action == 'addline' && $user->rights->propal->creer) {
|
||||
if (is_array($extralabelsline)) {
|
||||
// Get extra fields
|
||||
foreach ($extralabelsline as $key => $value) {
|
||||
unset($_POST ["options_" . $key]);
|
||||
unset($_POST["options_" . $key]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -895,23 +925,23 @@ else if ($action == 'addline' && $user->rights->propal->creer) {
|
||||
$object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
}
|
||||
|
||||
unset($_POST ['prod_entry_mode']);
|
||||
unset($_POST['prod_entry_mode']);
|
||||
|
||||
unset($_POST ['qty']);
|
||||
unset($_POST ['type']);
|
||||
unset($_POST ['remise_percent']);
|
||||
unset($_POST ['price_ht']);
|
||||
unset($_POST ['price_ttc']);
|
||||
unset($_POST ['tva_tx']);
|
||||
unset($_POST ['product_ref']);
|
||||
unset($_POST ['product_label']);
|
||||
unset($_POST ['product_desc']);
|
||||
unset($_POST ['fournprice']);
|
||||
unset($_POST ['buying_price']);
|
||||
unset($_POST ['np_marginRate']);
|
||||
unset($_POST ['np_markRate']);
|
||||
unset($_POST ['dp_desc']);
|
||||
unset($_POST ['idprod']);
|
||||
unset($_POST['qty']);
|
||||
unset($_POST['type']);
|
||||
unset($_POST['remise_percent']);
|
||||
unset($_POST['price_ht']);
|
||||
unset($_POST['price_ttc']);
|
||||
unset($_POST['tva_tx']);
|
||||
unset($_POST['product_ref']);
|
||||
unset($_POST['product_label']);
|
||||
unset($_POST['product_desc']);
|
||||
unset($_POST['fournprice']);
|
||||
unset($_POST['buying_price']);
|
||||
unset($_POST['np_marginRate']);
|
||||
unset($_POST['np_markRate']);
|
||||
unset($_POST['dp_desc']);
|
||||
unset($_POST['idprod']);
|
||||
|
||||
unset($_POST['date_starthour']);
|
||||
unset($_POST['date_startmin']);
|
||||
@@ -966,7 +996,7 @@ else if ($action == 'updateligne' && $user->rights->propal->creer && GETPOST('sa
|
||||
if (is_array($extralabelsline)) {
|
||||
// Get extra fields
|
||||
foreach ($extralabelsline as $key => $value) {
|
||||
unset($_POST ["options_" . $key]);
|
||||
unset($_POST["options_" . $key]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1023,18 +1053,18 @@ else if ($action == 'updateligne' && $user->rights->propal->creer && GETPOST('sa
|
||||
$object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
}
|
||||
|
||||
unset($_POST ['qty']);
|
||||
unset($_POST ['type']);
|
||||
unset($_POST ['productid']);
|
||||
unset($_POST ['remise_percent']);
|
||||
unset($_POST ['price_ht']);
|
||||
unset($_POST ['price_ttc']);
|
||||
unset($_POST ['tva_tx']);
|
||||
unset($_POST ['product_ref']);
|
||||
unset($_POST ['product_label']);
|
||||
unset($_POST ['product_desc']);
|
||||
unset($_POST ['fournprice']);
|
||||
unset($_POST ['buying_price']);
|
||||
unset($_POST['qty']);
|
||||
unset($_POST['type']);
|
||||
unset($_POST['productid']);
|
||||
unset($_POST['remise_percent']);
|
||||
unset($_POST['price_ht']);
|
||||
unset($_POST['price_ttc']);
|
||||
unset($_POST['tva_tx']);
|
||||
unset($_POST['product_ref']);
|
||||
unset($_POST['product_label']);
|
||||
unset($_POST['product_desc']);
|
||||
unset($_POST['fournprice']);
|
||||
unset($_POST['buying_price']);
|
||||
} else {
|
||||
$db->rollback();
|
||||
|
||||
@@ -1091,17 +1121,17 @@ else if ($action == 'remove_file' && $user->rights->propal->creer) {
|
||||
|
||||
// Set project
|
||||
else if ($action == 'classin' && $user->rights->propal->creer) {
|
||||
$object->setProject($_POST ['projectid']);
|
||||
$object->setProject($_POST['projectid']);
|
||||
}
|
||||
|
||||
// Delai de livraison
|
||||
else if ($action == 'setavailability' && $user->rights->propal->creer) {
|
||||
$result = $object->availability($_POST ['availability_id']);
|
||||
$result = $object->availability($_POST['availability_id']);
|
||||
}
|
||||
|
||||
// Origine de la propale
|
||||
else if ($action == 'setdemandreason' && $user->rights->propal->creer) {
|
||||
$result = $object->demand_reason($_POST ['demand_reason_id']);
|
||||
$result = $object->demand_reason($_POST['demand_reason_id']);
|
||||
}
|
||||
|
||||
// Conditions de reglement
|
||||
@@ -1110,11 +1140,11 @@ else if ($action == 'setconditions' && $user->rights->propal->creer) {
|
||||
}
|
||||
|
||||
else if ($action == 'setremisepercent' && $user->rights->propal->creer) {
|
||||
$result = $object->set_remise_percent($user, $_POST ['remise_percent']);
|
||||
$result = $object->set_remise_percent($user, $_POST['remise_percent']);
|
||||
}
|
||||
|
||||
else if ($action == 'setremiseabsolue' && $user->rights->propal->creer) {
|
||||
$result = $object->set_remise_absolue($user, $_POST ['remise_absolue']);
|
||||
$result = $object->set_remise_absolue($user, $_POST['remise_absolue']);
|
||||
}
|
||||
|
||||
// Mode de reglement
|
||||
@@ -1206,7 +1236,7 @@ if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB) && $user->rights->propal->
|
||||
{
|
||||
if ($object->id > 0) {
|
||||
$contactid = (GETPOST('userid') ? GETPOST('userid') : GETPOST('contactid'));
|
||||
$result = $object->add_contact($contactid, $_POST ["type"], $_POST ["source"]);
|
||||
$result = $object->add_contact($contactid, $_POST["type"], $_POST["source"]);
|
||||
}
|
||||
|
||||
if ($result >= 0) {
|
||||
|
||||
@@ -1326,67 +1326,77 @@ class Propal extends CommonObject
|
||||
{
|
||||
$num = $this->ref;
|
||||
}
|
||||
$this->newref = $num;
|
||||
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."propal";
|
||||
$sql.= " SET ref = '".$num."',";
|
||||
$sql.= " fk_statut = 1, date_valid='".$this->db->idate($now)."', fk_user_valid=".$user->id;
|
||||
$sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0";
|
||||
|
||||
dol_syslog(get_class($this).'::valid', LOG_DEBUG);
|
||||
if ($this->db->query($sql))
|
||||
dol_syslog(get_class($this)."::valid", LOG_DEBUG);
|
||||
$resql=$this->db->query($sql);
|
||||
if (! $resql)
|
||||
{
|
||||
dol_print_error($this->db);
|
||||
$error++;
|
||||
}
|
||||
|
||||
// Trigger calls
|
||||
if (! $error && ! $notrigger)
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('PROPAL_VALIDATE',$user);
|
||||
if ($result < 0) { $error++; }
|
||||
// End call triggers
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
if (! $notrigger)
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('PROPAL_VALIDATE',$user);
|
||||
if ($result < 0) { $error++; }
|
||||
// End call triggers
|
||||
}
|
||||
$this->oldref = $this->ref;
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
// Rename directory if dir was a temporary ref
|
||||
if (preg_match('/^[\(]?PROV/i', $this->ref))
|
||||
{
|
||||
// Rename of propal directory ($this->ref = old ref, $num = new ref)
|
||||
// to not lose the linked files
|
||||
$oldref = dol_sanitizeFileName($this->ref);
|
||||
$newref = dol_sanitizeFileName($num);
|
||||
$dirsource = $conf->propal->dir_output.'/'.$oldref;
|
||||
$dirdest = $conf->propal->dir_output.'/'.$newref;
|
||||
if (file_exists($dirsource))
|
||||
{
|
||||
dol_syslog(get_class($this)."::validate rename dir ".$dirsource." into ".$dirdest);
|
||||
// Rename directory if dir was a temporary ref
|
||||
if (preg_match('/^[\(]?PROV/i', $this->ref))
|
||||
{
|
||||
// Rename of propal directory ($this->ref = old ref, $num = new ref)
|
||||
// to not lose the linked files
|
||||
$oldref = dol_sanitizeFileName($this->ref);
|
||||
$newref = dol_sanitizeFileName($num);
|
||||
$dirsource = $conf->propal->dir_output.'/'.$oldref;
|
||||
$dirdest = $conf->propal->dir_output.'/'.$newref;
|
||||
|
||||
if (@rename($dirsource, $dirdest))
|
||||
{
|
||||
if (file_exists($dirsource))
|
||||
{
|
||||
dol_syslog(get_class($this)."::validate rename dir ".$dirsource." into ".$dirdest);
|
||||
if (@rename($dirsource, $dirdest))
|
||||
{
|
||||
dol_syslog("Rename ok");
|
||||
// Rename docs starting with $oldref with $newref
|
||||
$listoffiles=dol_dir_list($conf->propal->dir_output.'/'.$newref, 'files', 1, '^'.preg_quote($oldref,'/'));
|
||||
foreach($listoffiles as $fileentry)
|
||||
{
|
||||
$dirsource=$fileentry['name'];
|
||||
$dirdest=preg_replace('/^'.preg_quote($oldref,'/').'/',$newref, $dirsource);
|
||||
$dirsource=$fileentry['path'].'/'.$dirsource;
|
||||
$dirdest=$fileentry['path'].'/'.$dirdest;
|
||||
@rename($dirsource, $dirdest);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dol_syslog("Rename ok");
|
||||
// Deleting old PDF in new rep
|
||||
dol_delete_file($conf->propal->dir_output.'/'.$newref.'/'.$oldref.'*.*');
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->ref=$num;
|
||||
$this->brouillon=0;
|
||||
$this->statut = 1;
|
||||
$this->user_valid_id=$user->id;
|
||||
$this->datev=$now;
|
||||
|
||||
$this->ref=$num;
|
||||
$this->brouillon=0;
|
||||
$this->statut = 1;
|
||||
$this->user_valid_id=$user->id;
|
||||
$this->datev=$now;
|
||||
|
||||
$this->db->commit();
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db->rollback();
|
||||
return -2;
|
||||
}
|
||||
$this->db->commit();
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db->rollback();
|
||||
return -1;
|
||||
$this->db->rollback();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/* Copyright (C) 2003-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004-2013 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2004-2014 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2005 Marc Barilley / Ocebo <marc@ocebo.com>
|
||||
* Copyright (C) 2005-2013 Regis Houssin <regis.houssin@capnetworks.com>
|
||||
* Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr>
|
||||
@@ -908,20 +908,23 @@ else if ($action == 'confirm_validate' && $confirm == 'yes' && $user->rights->co
|
||||
|
||||
if (! $error) {
|
||||
$result = $object->valid($user, $idwarehouse);
|
||||
if ($result >= 0) {
|
||||
if ($result >= 0)
|
||||
{
|
||||
// Define output language
|
||||
$outputlangs = $langs;
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id']))
|
||||
$newlang = $_REQUEST['lang_id'];
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang))
|
||||
$newlang = $object->thirdparty->default_lang;
|
||||
if (! empty($newlang)) {
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
|
||||
$object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
$outputlangs = $langs;
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang = GETPOST('lang_id','alpha');
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang;
|
||||
if (! empty($newlang)) {
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
$model=$object->modelpdf;
|
||||
if (empty($model)) { $tmp=getListOfModels($db, 'order'); $keys=array_keys($tmp); $model=$keys[0]; }
|
||||
$ret = $object->fetch($id); // Reload to get new records
|
||||
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -954,21 +957,23 @@ else if ($action == 'confirm_modif' && $user->rights->commande->creer) {
|
||||
|
||||
if (! $error) {
|
||||
$result = $object->set_draft($user, $idwarehouse);
|
||||
if ($result >= 0) {
|
||||
if ($result >= 0)
|
||||
{
|
||||
// Define output language
|
||||
$outputlangs = $langs;
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id']))
|
||||
$newlang = $_REQUEST['lang_id'];
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang))
|
||||
$newlang = $object->thirdparty->default_lang;
|
||||
if (! empty($newlang)) {
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
|
||||
$ret = $object->fetch($object->id); // Reload to get new records
|
||||
$object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
$outputlangs = $langs;
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang = GETPOST('lang_id','alpha');
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang;
|
||||
if (! empty($newlang)) {
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
$model=$object->modelpdf;
|
||||
if (empty($model)) { $tmp=getListOfModels($db, 'order'); $keys=array_keys($tmp); $model=$keys[0]; }
|
||||
$ret = $object->fetch($id); // Reload to get new records
|
||||
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1148,7 +1153,7 @@ else if ($action == 'update_extras') {
|
||||
|
||||
/*
|
||||
* Add file in email form
|
||||
*/
|
||||
*/
|
||||
if (GETPOST('addfile')) {
|
||||
require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
|
||||
|
||||
@@ -1162,7 +1167,7 @@ if (GETPOST('addfile')) {
|
||||
|
||||
/*
|
||||
* Remove file in email form
|
||||
*/
|
||||
*/
|
||||
if (GETPOST('removedfile')) {
|
||||
require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
|
||||
|
||||
@@ -1177,7 +1182,7 @@ if (GETPOST('removedfile')) {
|
||||
|
||||
/*
|
||||
* Send mail
|
||||
*/
|
||||
*/
|
||||
if ($action == 'send' && ! GETPOST('addfile') && ! GETPOST('removedfile') && ! GETPOST('cancel')) {
|
||||
$langs->load('mails');
|
||||
|
||||
|
||||
@@ -183,9 +183,10 @@ class Commande extends CommonOrder
|
||||
*
|
||||
* @param User $user User making status change
|
||||
* @param int $idwarehouse Id of warehouse to use for stock decrease
|
||||
* @param int $notrigger 1=Does not execute triggers, 0= execuete triggers
|
||||
* @return int <=0 if OK, >0 if KO
|
||||
*/
|
||||
function valid($user, $idwarehouse=0)
|
||||
function valid($user, $idwarehouse=0, $notrigger=0)
|
||||
{
|
||||
global $conf,$langs;
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
@@ -223,9 +224,10 @@ class Commande extends CommonOrder
|
||||
$num = $this->getNextNumRef($soc);
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
$num = $this->ref;
|
||||
}
|
||||
$this->newref = $num;
|
||||
|
||||
// Validate
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."commande";
|
||||
@@ -273,43 +275,49 @@ class Commande extends CommonOrder
|
||||
}
|
||||
}
|
||||
|
||||
if (! $error && ! $notrigger)
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('ORDER_VALIDATE',$user);
|
||||
if ($result < 0) $error++;
|
||||
// End call triggers
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$this->oldref='';
|
||||
$this->oldref = $this->ref;
|
||||
|
||||
// Rename directory if dir was a temporary ref
|
||||
if (preg_match('/^[\(]?PROV/i', $this->ref))
|
||||
{
|
||||
// On renomme repertoire ($this->ref = ancienne ref, $numfa = nouvelle ref)
|
||||
// On renomme repertoire ($this->ref = ancienne ref, $numfa = nouvelle ref)
|
||||
// in order not to lose the attachments
|
||||
$comref = dol_sanitizeFileName($this->ref);
|
||||
$snum = dol_sanitizeFileName($num);
|
||||
$dirsource = $conf->commande->dir_output.'/'.$comref;
|
||||
$dirdest = $conf->commande->dir_output.'/'.$snum;
|
||||
$oldref = dol_sanitizeFileName($this->ref);
|
||||
$newref = dol_sanitizeFileName($num);
|
||||
$dirsource = $conf->commande->dir_output.'/'.$oldref;
|
||||
$dirdest = $conf->commande->dir_output.'/'.$newref;
|
||||
if (file_exists($dirsource))
|
||||
{
|
||||
dol_syslog(get_class($this)."::valid() rename dir ".$dirsource." into ".$dirdest);
|
||||
|
||||
if (@rename($dirsource, $dirdest))
|
||||
{
|
||||
$this->oldref = $comref;
|
||||
|
||||
dol_syslog("Rename ok");
|
||||
// Suppression ancien fichier PDF dans nouveau rep
|
||||
dol_delete_file($conf->commande->dir_output.'/'.$snum.'/'.$comref.'*.*');
|
||||
// Rename docs starting with $oldref with $newref
|
||||
$listoffiles=dol_dir_list($conf->commande->dir_output.'/'.$newref, 'files', 1, '^'.preg_quote($oldref,'/'));
|
||||
foreach($listoffiles as $fileentry)
|
||||
{
|
||||
$dirsource=$fileentry['name'];
|
||||
$dirdest=preg_replace('/^'.preg_quote($oldref,'/').'/',$newref, $dirsource);
|
||||
$dirsource=$fileentry['path'].'/'.$dirsource;
|
||||
$dirdest=$fileentry['path'].'/'.$dirdest;
|
||||
@rename($dirsource, $dirdest);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('ORDER_VALIDATE',$user);
|
||||
if ($result < 0) $error++;
|
||||
// End call triggers
|
||||
}
|
||||
|
||||
// Set new ref and current status
|
||||
if (! $error)
|
||||
{
|
||||
@@ -323,7 +331,7 @@ class Commande extends CommonOrder
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
$this->db->rollback();
|
||||
return -1;
|
||||
}
|
||||
@@ -904,7 +912,7 @@ class Commande extends CommonOrder
|
||||
$modCommande = new $obj;
|
||||
$this->ref = $modCommande->getNextValue($objsoc,$this);
|
||||
|
||||
|
||||
|
||||
// Create clone
|
||||
$result=$this->create($user);
|
||||
if ($result < 0) $error++;
|
||||
|
||||
@@ -45,7 +45,7 @@ class DeplacementStats extends Stats
|
||||
*
|
||||
* @param DoliDB $db Database handler
|
||||
* @param int $socid Id third party
|
||||
* @param int $userid Id user for filter
|
||||
* @param mixed $userid Id user for filter or array of user ids
|
||||
* @return void
|
||||
*/
|
||||
function __construct($db, $socid=0, $userid=0)
|
||||
@@ -66,7 +66,8 @@ class DeplacementStats extends Stats
|
||||
{
|
||||
$this->where.=" AND fk_soc = ".$this->socid;
|
||||
}
|
||||
if ($this->userid > 0) $this->where.=' AND fk_user = '.$this->userid;
|
||||
if (is_array($this->userid) && count($this->userid) > 0) $this->where.=' AND fk_user IN ('.join(',',$this->userid).')';
|
||||
else if ($this->userid > 0) $this->where.=' AND fk_user = '.$this->userid;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -54,6 +54,9 @@ $limit = $conf->liste_limit;
|
||||
|
||||
$tripandexpense_static=new Deplacement($db);
|
||||
|
||||
$childids = $user->getAllChildIds();
|
||||
$childids[]=$user->id;
|
||||
|
||||
//$help_url='EN:Module_Donations|FR:Module_Dons|ES:Módulo_Donaciones';
|
||||
$help_url='';
|
||||
llxHeader('',$langs->trans("ListOfFees"),$help_url);
|
||||
@@ -64,6 +67,7 @@ $totalnb=0;
|
||||
$sql = "SELECT count(d.rowid) as nb, sum(d.km) as km, d.type";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."deplacement as d";
|
||||
$sql.= " WHERE d.entity = ".$conf->entity;
|
||||
if (empty($user->rights->deplacement->readall) && empty($user->rights->deplacement->lire_tous)) $sql.=' AND d.fk_user IN ('.join(',',$childids).')';
|
||||
$sql.= " GROUP BY d.type";
|
||||
$sql.= " ORDER BY d.type";
|
||||
|
||||
@@ -134,6 +138,7 @@ $sql.= " FROM ".MAIN_DB_PREFIX."deplacement as d, ".MAIN_DB_PREFIX."user as u";
|
||||
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."societe_commerciaux as sc";
|
||||
$sql.= " WHERE u.rowid = d.fk_user";
|
||||
$sql.= " AND d.entity = ".$conf->entity;
|
||||
if (empty($user->rights->deplacement->readall) && empty($user->rights->deplacement->lire_tous)) $sql.=' AND d.fk_user IN ('.join(',',$childids).')';
|
||||
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND d.fk_soc = s. rowid AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
|
||||
if ($socid) $sql.= " AND d.fk_soc = ".$socid;
|
||||
$sql.= $db->order("d.tms","DESC");
|
||||
|
||||
@@ -58,6 +58,9 @@ $search_ref=GETPOST('search_ref','alpha');
|
||||
$tripandexpense_static=new Deplacement($db);
|
||||
$userstatic = new User($db);
|
||||
|
||||
$childids = $user->getAllChildIds();
|
||||
$childids[]=$user->id;
|
||||
|
||||
llxHeader();
|
||||
|
||||
$sql = "SELECT s.nom, s.rowid as socid,"; // Ou
|
||||
@@ -70,6 +73,7 @@ $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON d.fk_soc = s.rowid";
|
||||
if (!$user->rights->societe->client->voir && !$socid) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON s.rowid = sc.fk_soc";
|
||||
$sql.= " WHERE d.fk_user = u.rowid";
|
||||
$sql.= " AND d.entity = ".$conf->entity;
|
||||
if (empty($user->rights->deplacement->readall) && empty($user->rights->deplacement->lire_tous)) $sql.=' AND d.fk_user IN ('.join(',',$childids).')';
|
||||
if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND sc.fk_user = " .$user->id;
|
||||
if ($socid) $sql.= " AND s.rowid = ".$socid;
|
||||
if (trim($search_ref) != '')
|
||||
@@ -167,6 +171,7 @@ else
|
||||
{
|
||||
dol_print_error($db);
|
||||
}
|
||||
$db->close();
|
||||
|
||||
llxFooter();
|
||||
|
||||
$db->close();
|
||||
|
||||
@@ -45,6 +45,18 @@ if ($user->societe_id > 0)
|
||||
if ($user->societe_id) $socid=$user->societe_id;
|
||||
$result = restrictedArea($user, 'deplacement', $id,'');
|
||||
|
||||
// Other security check
|
||||
$childids = $user->getAllChildIds();
|
||||
$childids[]=$user->id;
|
||||
if ($userid > 0)
|
||||
{
|
||||
if (empty($user->rights->deplacement->readall) && empty($user->rights->deplacement->lire_tous) && ! in_array($userid, $childids))
|
||||
{
|
||||
accessforbidden();
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
$nowyear=strftime("%Y", dol_now());
|
||||
$year = GETPOST('year')>0?GETPOST('year'):$nowyear;
|
||||
//$startyear=$year-2;
|
||||
@@ -60,6 +72,7 @@ $mode=GETPOST("mode")?GETPOST("mode"):'customer';
|
||||
|
||||
$form=new Form($db);
|
||||
|
||||
|
||||
llxHeader();
|
||||
|
||||
$title=$langs->trans("TripsAndExpensesStatistics");
|
||||
@@ -69,7 +82,14 @@ print_fiche_titre($title, $mesg);
|
||||
|
||||
dol_mkdir($dir);
|
||||
|
||||
$stats = new DeplacementStats($db, $socid, $userid);
|
||||
$useridtofilter=$userid; // Filter from parameters
|
||||
if (empty($useridtofilter))
|
||||
{
|
||||
$useridtofilter=$childids;
|
||||
if (! empty($user->rights->deplacement->readall) || ! empty($user->rights->deplacement->lire_tous)) $useridtofilter=0;
|
||||
}
|
||||
|
||||
$stats = new DeplacementStats($db, $socid, $useridtofilter);
|
||||
|
||||
|
||||
// Build graphic number of object
|
||||
@@ -220,7 +240,9 @@ print $form->select_company($socid,'socid',$filter,1,1);
|
||||
print '</td></tr>';
|
||||
// User
|
||||
print '<tr><td>'.$langs->trans("User").'</td><td>';
|
||||
print $form->select_dolusers($userid,'userid',1);
|
||||
$include='';
|
||||
if (empty($user->rights->deplacement->readall) && empty($user->rights->deplacement->lire_tous)) $include='hierarchy';
|
||||
print $form->select_dolusers($userid,'userid',1,'',0,$include);
|
||||
print '</td></tr>';
|
||||
// Year
|
||||
print '<tr><td>'.$langs->trans("Year").'</td><td>';
|
||||
|
||||
@@ -406,21 +406,25 @@ else if ($action == 'confirm_valid' && $confirm == 'yes' && $user->rights->factu
|
||||
if ($result >= 0)
|
||||
{
|
||||
// Define output language
|
||||
$outputlangs = $langs;
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id']))
|
||||
$newlang = $_REQUEST['lang_id'];
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang))
|
||||
$newlang = $object->thirdparty->default_lang;
|
||||
if (! empty($newlang)) {
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
$outputlangs = $langs;
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang = GETPOST('lang_id','alpha');
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang;
|
||||
if (! empty($newlang)) {
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
$model=$object->modelpdf;
|
||||
if (empty($model)) { $tmp=getListOfModels($db, 'invoice'); $keys=array_keys($tmp); $model=$keys[0]; }
|
||||
$ret = $object->fetch($id); // Reload to get new records
|
||||
$object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
$result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
if ($result < 0) dol_print_error($db,$result);
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (count($object->errors)) setEventMessage($object->errors, 'errors');
|
||||
else setEventMessage($object->error, 'errors');
|
||||
}
|
||||
@@ -483,20 +487,22 @@ else if ($action == 'confirm_modif' && ((empty($conf->global->MAIN_USE_ADVANCED_
|
||||
$result=$object->set_draft($user, $idwarehouse);
|
||||
if ($result<0) setEventMessage($object->error,'errors');
|
||||
|
||||
|
||||
// Define output language
|
||||
$outputlangs = $langs;
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id']))
|
||||
$newlang = $_REQUEST['lang_id'];
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang))
|
||||
$newlang = $object->thirdparty->default_lang;
|
||||
if (! empty($newlang)) {
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
$outputlangs = $langs;
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang = GETPOST('lang_id','alpha');
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang;
|
||||
if (! empty($newlang)) {
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
$model=$object->modelpdf;
|
||||
if (empty($model)) { $tmp=getListOfModels($db, 'invoice'); $keys=array_keys($tmp); $model=$keys[0]; }
|
||||
$ret = $object->fetch($id); // Reload to get new records
|
||||
$object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1158,7 +1164,11 @@ else if ($action == 'addline' && $user->rights->facture->creer)
|
||||
setEventMessage($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Description')), 'errors');
|
||||
$error ++;
|
||||
}
|
||||
|
||||
if ($qty < 0) {
|
||||
$langs->load("errors");
|
||||
setEventMessage($langs->trans('ErrorQtyForCustomerInvoiceCantBeNegative'), 'errors');
|
||||
$error ++;
|
||||
}
|
||||
if (! $error && ($qty >= 0) && (! empty($product_desc) || ! empty($idprod))) {
|
||||
$ret = $object->fetch($id);
|
||||
if ($ret < 0) {
|
||||
@@ -1304,23 +1314,26 @@ else if ($action == 'addline' && $user->rights->facture->creer)
|
||||
// Insert line
|
||||
$result = $object->addline($desc, $pu_ht, $qty, $tva_tx, $localtax1_tx, $localtax2_tx, $idprod, $remise_percent, $date_start, $date_end, 0, $info_bits, '', $price_base_type, $pu_ttc, $type, - 1, $special_code, '', 0, GETPOST('fk_parent_line'), $fournprice, $buyingprice, $label, $array_option);
|
||||
|
||||
if ($result > 0) {
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
|
||||
// Define output language
|
||||
if ($result > 0)
|
||||
{
|
||||
// Define output language
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
$outputlangs = $langs;
|
||||
$newlang = GETPOST('lang_id', 'alpha');
|
||||
if (! empty($conf->global->MAIN_MULTILANGS) && empty($newlang))
|
||||
$newlang = $object->thirdparty->default_lang;
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang = GETPOST('lang_id','alpha');
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang;
|
||||
if (! empty($newlang)) {
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
|
||||
$model=$object->modelpdf;
|
||||
if (empty($model)) { $tmp=getListOfModels($db, 'invoice'); $keys=array_keys($tmp); $model=$keys[0]; }
|
||||
$ret = $object->fetch($id); // Reload to get new records
|
||||
$object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
}
|
||||
|
||||
unset($_POST ['prod_entry_mode']);
|
||||
unset($_POST['prod_entry_mode']);
|
||||
|
||||
unset($_POST['qty']);
|
||||
unset($_POST['type']);
|
||||
@@ -1359,9 +1372,9 @@ else if ($action == 'addline' && $user->rights->facture->creer)
|
||||
}
|
||||
}
|
||||
|
||||
elseif ($action == 'updateligne' && $user->rights->facture->creer && ! GETPOST('cancel')) {
|
||||
if (! $object->fetch($id) > 0)
|
||||
dol_print_error($db);
|
||||
elseif ($action == 'updateligne' && $user->rights->facture->creer && ! GETPOST('cancel'))
|
||||
{
|
||||
if (! $object->fetch($id) > 0) dol_print_error($db);
|
||||
$object->fetch_thirdparty();
|
||||
|
||||
// Clean parameters
|
||||
@@ -1372,6 +1385,7 @@ elseif ($action == 'updateligne' && $user->rights->facture->creer && ! GETPOST('
|
||||
$description = dol_htmlcleanlastbr(GETPOST('product_desc'));
|
||||
$pu_ht = GETPOST('price_ht');
|
||||
$vat_rate = (GETPOST('tva_tx') ? GETPOST('tva_tx') : 0);
|
||||
$qty = GETPOST('qty');
|
||||
|
||||
// Define info_bits
|
||||
$info_bits = 0;
|
||||
@@ -1428,10 +1442,15 @@ elseif ($action == 'updateligne' && $user->rights->facture->creer && ! GETPOST('
|
||||
$error ++;
|
||||
}
|
||||
}
|
||||
if ($qty < 0) {
|
||||
$langs->load("errors");
|
||||
setEventMessage($langs->trans('ErrorQtyForCustomerInvoiceCantBeNegative'), 'errors');
|
||||
$error ++;
|
||||
}
|
||||
|
||||
// Update line
|
||||
if (! $error) {
|
||||
$result = $object->updateline(GETPOST('lineid'), $description, $pu_ht, GETPOST('qty'), GETPOST('remise_percent'), $date_start, $date_end, $vat_rate, $localtax1_rate, $localtax2_rate, 'HT', $info_bits, $type, GETPOST('fk_parent_line'), 0, $fournprice, $buyingprice, $label, 0, $array_option);
|
||||
$result = $object->updateline(GETPOST('lineid'), $description, $pu_ht, $qty, GETPOST('remise_percent'), $date_start, $date_end, $vat_rate, $localtax1_rate, $localtax2_rate, 'HT', $info_bits, $type, GETPOST('fk_parent_line'), 0, $fournprice, $buyingprice, $label, 0, $array_option);
|
||||
|
||||
if ($result >= 0) {
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
|
||||
@@ -1463,6 +1482,8 @@ elseif ($action == 'updateligne' && $user->rights->facture->creer && ! GETPOST('
|
||||
unset($_POST['product_desc']);
|
||||
unset($_POST['fournprice']);
|
||||
unset($_POST['buying_price']);
|
||||
unset($_POST['np_marginRate']);
|
||||
unset($_POST['np_markRate']);
|
||||
} else {
|
||||
setEventMessage($object->error, 'errors');
|
||||
}
|
||||
@@ -3579,21 +3600,24 @@ if ($action == 'create')
|
||||
// Linked object block
|
||||
$somethingshown = $object->showLinkedObjectBlock();
|
||||
|
||||
if (empty($somethingshown) && ! empty($conf->commande->enabled))
|
||||
$linktoelem='';
|
||||
|
||||
if (! empty($conf->commande->enabled))
|
||||
{
|
||||
print '<br><a href="#" id="linktoorder">' . $langs->trans('LinkedOrder') . '</a>';
|
||||
$linktoelem.=($linktoelem?' ':'').'<a href="#" id="linktoorder">' . $langs->trans('LinkedOrder') . '</a>';
|
||||
|
||||
print '
|
||||
<script type="text/javascript" language="javascript">
|
||||
jQuery(document).ready(function() {
|
||||
jQuery("#linktoorder").click(function() {
|
||||
jQuery("#commande").toggle();
|
||||
jQuery("#orderlist").toggle();
|
||||
jQuery("#linktoorder").toggle();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
';
|
||||
|
||||
print '<div id="commande" style="display:none">';
|
||||
print '<div id="orderlist" style="display:none">';
|
||||
|
||||
$sql = "SELECT s.rowid as socid, s.nom as name, s.client, c.rowid, c.ref, c.ref_client, c.total_ht";
|
||||
$sql .= " FROM " . MAIN_DB_PREFIX . "societe as s";
|
||||
@@ -3601,11 +3625,12 @@ if ($action == 'create')
|
||||
$sql .= ' WHERE c.fk_soc = s.rowid AND c.fk_soc = ' . $soc->id . '';
|
||||
|
||||
$resqlorderlist = $db->query($sql);
|
||||
if ($resqlorderlist) {
|
||||
if ($resqlorderlist)
|
||||
{
|
||||
$num = $db->num_rows($resqlorderlist);
|
||||
$i = 0;
|
||||
|
||||
print '<form action="" method="POST" name="LinkedOrder">';
|
||||
print '<br><form action="" method="POST" name="LinkedOrder">';
|
||||
print '<table class="noborder">';
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td class="nowrap"></td>';
|
||||
@@ -3614,7 +3639,8 @@ if ($action == 'create')
|
||||
print '<td align="left">' . $langs->trans("AmountHTShort") . '</td>';
|
||||
print '<td align="left">' . $langs->trans("Company") . '</td>';
|
||||
print '</tr>';
|
||||
while ($i < $num) {
|
||||
while ($i < $num)
|
||||
{
|
||||
$objp = $db->fetch_object($resqlorderlist);
|
||||
if ($objp->socid == $soc->id) {
|
||||
$var = ! $var;
|
||||
@@ -3632,7 +3658,7 @@ if ($action == 'create')
|
||||
$i ++;
|
||||
}
|
||||
print '</table>';
|
||||
print '<br><center><input type="submit" class="button" value="' . $langs->trans('ToLink') . '"></center>';
|
||||
print '<br><center><input type="submit" class="button" value="' . $langs->trans('ToLink') . '"> <input type="submit" class="button" name="cancel" value="' . $langs->trans('Cancel') . '"></center>';
|
||||
print '</form>';
|
||||
$db->free($resqlorderlist);
|
||||
} else {
|
||||
@@ -3642,6 +3668,9 @@ if ($action == 'create')
|
||||
print '</div>';
|
||||
}
|
||||
|
||||
// Show link to elements
|
||||
if ($linktoelem) print '<br>'.$linktoelem;
|
||||
|
||||
// Link for paypal payment
|
||||
if (! empty($conf->paypal->enabled) && $object->statut != 0) {
|
||||
include_once DOL_DOCUMENT_ROOT . '/paypal/lib/paypal.lib.php';
|
||||
|
||||
@@ -1589,9 +1589,10 @@ class Facture extends CommonInvoice
|
||||
* @param User $user Object user that validate
|
||||
* @param string $force_number Reference to force on invoice
|
||||
* @param int $idwarehouse Id of warehouse to use for stock decrease
|
||||
* @return int <0 if KO, >0 if OK
|
||||
* @param int $notrigger 1=Does not execute triggers, 0= execuete triggers
|
||||
* @return int <0 if KO, >0 if OK
|
||||
*/
|
||||
function validate($user, $force_number='', $idwarehouse=0)
|
||||
function validate($user, $force_number='', $idwarehouse=0, $notrigger=0)
|
||||
{
|
||||
global $conf,$langs;
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
@@ -1679,6 +1680,7 @@ class Facture extends CommonInvoice
|
||||
{
|
||||
$num = $this->ref;
|
||||
}
|
||||
$this->newref = $num;
|
||||
|
||||
if ($num)
|
||||
{
|
||||
@@ -1738,45 +1740,50 @@ class Facture extends CommonInvoice
|
||||
}
|
||||
}
|
||||
|
||||
// Trigger calls
|
||||
if (! $error && ! $notrigger)
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('BILL_VALIDATE',$user);
|
||||
if ($result < 0) $error++;
|
||||
// End call triggers
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$this->oldref = '';
|
||||
$this->oldref = $this->ref;
|
||||
|
||||
// Rename directory if dir was a temporary ref
|
||||
if (preg_match('/^[\(]?PROV/i', $this->ref))
|
||||
{
|
||||
// Rename of object directory ($this->ref = old ref, $num = new ref)
|
||||
// to not lose the linked files
|
||||
$facref = dol_sanitizeFileName($this->ref);
|
||||
$snumfa = dol_sanitizeFileName($num);
|
||||
$dirsource = $conf->facture->dir_output.'/'.$facref;
|
||||
$dirdest = $conf->facture->dir_output.'/'.$snumfa;
|
||||
$oldref = dol_sanitizeFileName($this->ref);
|
||||
$newref = dol_sanitizeFileName($num);
|
||||
$dirsource = $conf->facture->dir_output.'/'.$oldref;
|
||||
$dirdest = $conf->facture->dir_output.'/'.$newref;
|
||||
if (file_exists($dirsource))
|
||||
{
|
||||
dol_syslog(get_class($this)."::validate rename dir ".$dirsource." into ".$dirdest);
|
||||
|
||||
if (@rename($dirsource, $dirdest))
|
||||
{
|
||||
$this->oldref = $facref;
|
||||
|
||||
dol_syslog("Rename ok");
|
||||
// Suppression ancien fichier PDF dans nouveau rep
|
||||
dol_delete_file($conf->facture->dir_output.'/'.$snumfa.'/'.$facref.'*.*');
|
||||
// Rename docs starting with $oldref with $newref
|
||||
$listoffiles=dol_dir_list($conf->facture->dir_output.'/'.$newref, 'files', 1, '^'.preg_quote($oldref,'/'));
|
||||
foreach($listoffiles as $fileentry)
|
||||
{
|
||||
$dirsource=$fileentry['name'];
|
||||
$dirdest=preg_replace('/^'.preg_quote($oldref,'/').'/',$newref, $dirsource);
|
||||
$dirsource=$fileentry['path'].'/'.$dirsource;
|
||||
$dirdest=$fileentry['path'].'/'.$dirdest;
|
||||
@rename($dirsource, $dirdest);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Trigger calls
|
||||
if (! $error)
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('BILL_VALIDATE',$user);
|
||||
if ($result < 0) $error++;
|
||||
//TODO: Restoring ref, facnumber, statut, brouillon to previous value if trigger fail
|
||||
// End call triggers
|
||||
}
|
||||
|
||||
// Set new ref and define current statut
|
||||
if (! $error)
|
||||
{
|
||||
|
||||
@@ -60,6 +60,8 @@ if ($user->societe_id > 0) accessforbidden();
|
||||
$holiday = new Holiday($db);
|
||||
$holidaystatic=new Holiday($db);
|
||||
|
||||
$childids = $user->getAllChildIds();
|
||||
$childids[]=$user->id;
|
||||
|
||||
llxHeader(array(),$langs->trans('HRMArea'));
|
||||
|
||||
@@ -118,6 +120,7 @@ $sql.= " FROM ".MAIN_DB_PREFIX."deplacement as d, ".MAIN_DB_PREFIX."user as u";
|
||||
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."societe_commerciaux as sc";
|
||||
$sql.= " WHERE u.rowid = d.fk_user";
|
||||
$sql.= " AND d.entity = ".$conf->entity;
|
||||
if (empty($user->rights->deplacement->readall) && empty($user->rights->deplacement->lire_tous)) $sql.=' AND d.fk_user IN ('.join(',',$childids).')';
|
||||
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND d.fk_soc = s. rowid AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
|
||||
if (!empty($socid)) $sql.= " AND d.fk_soc = ".$socid;
|
||||
$sql.= $db->order("d.tms","DESC");
|
||||
|
||||
@@ -112,8 +112,8 @@ if ($resql)
|
||||
print '</tr>';
|
||||
|
||||
print '<form action="'.$_SERVER["PHP_SELF"].'" method="GET">';
|
||||
print '<td class="liste_titre"><input type="text" class="flat" name="search_facture" size="12" value="'.GETPOST('search_facture','alpha').'"></td>';
|
||||
print '<td class="liste_titre"><input type="text" class="flat" name="search_societe" size="18" value="'.GETPOST('search_societe','alpha').'"></td>';
|
||||
print '<td class="liste_titre"><input type="text" class="flat" name="search_facture" size="12" value="'.dol_escape_htmltag(GETPOST('search_facture','alpha')).'"></td>';
|
||||
print '<td class="liste_titre"><input type="text" class="flat" name="search_societe" size="18" value="'.dol_escape_htmltag(GETPOST('search_societe','alpha')).'"></td>';
|
||||
print '<td colspan="2" class="liste_titre" align="right"><input type="image" class="liste_titre" src="'.img_picto($langs->trans("Search"),'search.png','','',1).'" name="button_search" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'"></td>';
|
||||
print '</tr>';
|
||||
print '</form>';
|
||||
|
||||
@@ -122,11 +122,11 @@ if ($result)
|
||||
|
||||
print '<form action="list.php" method="GET">';
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td class="liste_titre"><input type="text" class="flat" name="search_ligne" value="'. $search_line.'" size="6"></td>';
|
||||
print '<td class="liste_titre"><input type="text" class="flat" name="search_bon" value="'. $search_bon.'" size="8"></td>';
|
||||
print '<td class="liste_titre"><input type="text" class="flat" name="search_ligne" value="'. dol_escape_htmltag($search_line).'" size="6"></td>';
|
||||
print '<td class="liste_titre"><input type="text" class="flat" name="search_bon" value="'. dol_escape_htmltag($search_bon).'" size="8"></td>';
|
||||
print '<td> </td>';
|
||||
print '<td class="liste_titre"><input type="text" class="flat" name="search_societe" value="'. $search_societe.'" size="12"></td>';
|
||||
print '<td class="liste_titre" align="center"><input type="text" class="flat" name="search_code" value="'. $search_code.'" size="8"></td>';
|
||||
print '<td class="liste_titre"><input type="text" class="flat" name="search_societe" value="'. dol_escape_htmltag($search_societe).'" size="12"></td>';
|
||||
print '<td class="liste_titre" align="center"><input type="text" class="flat" name="search_code" value="'. dol_escape_htmltag($search_code).'" size="8"></td>';
|
||||
print '<td class="liste_titre"> </td>';
|
||||
print '<td class="liste_titre"> </td>';
|
||||
print '<td class="liste_titre" align="right"><input type="image" class="liste_titre" src="'.img_picto($langs->trans("Search"),'search.png','','',1).'" name="button_search" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'"></td>';
|
||||
|
||||
@@ -525,23 +525,22 @@ else if ($action == 'addline' && $user->rights->contrat->creer)
|
||||
|
||||
if ($result > 0)
|
||||
{
|
||||
/*
|
||||
// Define output language
|
||||
$outputlangs = $langs;
|
||||
$newlang='';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id'];
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang;
|
||||
if (! empty($newlang))
|
||||
{
|
||||
$outputlangs = new Translate("",$conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
$ret=$object->fetch($id); // Reload to get new records
|
||||
contrat_pdf_create($db, $object->id, $object->modelpdf, $outputlangs);
|
||||
}
|
||||
*/
|
||||
// Define output language
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
$outputlangs = $langs;
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang = GETPOST('lang_id','alpha');
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang;
|
||||
if (! empty($newlang)) {
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
$model=$object->modelpdf;
|
||||
if (empty($model)) { $tmp=getListOfModels($db, 'contract'); $keys=array_keys($tmp); $model=$keys[0]; }
|
||||
$ret = $object->fetch($id); // Reload to get new records
|
||||
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
}
|
||||
|
||||
unset($_POST ['prod_entry_mode']);
|
||||
|
||||
|
||||
@@ -278,9 +278,10 @@ class Contrat extends CommonObject
|
||||
*
|
||||
* @param User $user Objet User
|
||||
* @param string $force_number Reference to force on contract (not implemented yet)
|
||||
* @param int $notrigger 1=Does not execute triggers, 0= execuete triggers
|
||||
* @return int <0 if KO, >0 if OK
|
||||
*/
|
||||
function validate($user, $force_number='')
|
||||
function validate($user, $force_number='', $notrigger=0)
|
||||
{
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
global $langs, $conf;
|
||||
@@ -307,6 +308,7 @@ class Contrat extends CommonObject
|
||||
{
|
||||
$num = $this->ref;
|
||||
}
|
||||
$this->newref = $num;
|
||||
|
||||
if ($num)
|
||||
{
|
||||
@@ -323,30 +325,45 @@ class Contrat extends CommonObject
|
||||
$this->error=$this->db->lasterror();
|
||||
}
|
||||
|
||||
// Trigger calls
|
||||
if (! $error && ! $notrigger)
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('CONTRACT_VALIDATE',$user);
|
||||
if ($result < 0) { $error++; }
|
||||
// End call triggers
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$this->oldref = '';
|
||||
$this->oldref = $this->ref;
|
||||
|
||||
// Rename directory if dir was a temporary ref
|
||||
if (preg_match('/^[\(]?PROV/i', $this->ref))
|
||||
{
|
||||
// Rename of object directory ($this->ref = old ref, $num = new ref)
|
||||
// to not lose the linked files
|
||||
$facref = dol_sanitizeFileName($this->ref);
|
||||
$snumfa = dol_sanitizeFileName($num);
|
||||
$dirsource = $conf->contract->dir_output.'/'.$facref;
|
||||
$dirdest = $conf->contract->dir_output.'/'.$snumfa;
|
||||
$oldref = dol_sanitizeFileName($this->ref);
|
||||
$newref = dol_sanitizeFileName($num);
|
||||
$dirsource = $conf->contract->dir_output.'/'.$oldref;
|
||||
$dirdest = $conf->contract->dir_output.'/'.$newref;
|
||||
if (file_exists($dirsource))
|
||||
{
|
||||
dol_syslog(get_class($this)."::validate rename dir ".$dirsource." into ".$dirdest);
|
||||
|
||||
if (@rename($dirsource, $dirdest))
|
||||
{
|
||||
$this->oldref = $facref;
|
||||
|
||||
dol_syslog("Rename ok");
|
||||
// Deleting old PDF in new rep
|
||||
dol_delete_file($conf->contract->dir_output.'/'.$snumfa.'/'.$facref.'*.*');
|
||||
// Rename docs starting with $oldref with $newref
|
||||
$listoffiles=dol_dir_list($conf->contract->dir_output.'/'.$newref, 'files', 1, '^'.preg_quote($oldref,'/'));
|
||||
foreach($listoffiles as $fileentry)
|
||||
{
|
||||
$dirsource=$fileentry['name'];
|
||||
$dirdest=preg_replace('/^'.preg_quote($oldref,'/').'/',$newref, $dirsource);
|
||||
$dirsource=$fileentry['path'].'/'.$dirsource;
|
||||
$dirdest=$fileentry['path'].'/'.$dirdest;
|
||||
@rename($dirsource, $dirdest);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -360,15 +377,6 @@ class Contrat extends CommonObject
|
||||
$this->brouillon=0;
|
||||
$this->date_validation=$now;
|
||||
}
|
||||
|
||||
// Trigger calls
|
||||
if (! $error)
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('CONTRACT_VALIDATE',$user);
|
||||
if ($result < 0) { $error++; }
|
||||
// End call triggers
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -58,22 +58,25 @@ class box_commandes extends ModeleBoxes
|
||||
include_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php';
|
||||
$commandestatic=new Commande($db);
|
||||
|
||||
$this->info_box_head = array('text' => $langs->trans("BoxTitleLastCustomerOrders",$max));
|
||||
$userstatic = new User($db);
|
||||
|
||||
$this->info_box_head = array('text' => $langs->trans("BoxTitleLast".($conf->global->MAIN_LASTBOX_ON_OBJECT_DATE?"":"Modified")."CustomerOrders",$max));
|
||||
|
||||
if ($user->rights->commande->lire)
|
||||
{
|
||||
|
||||
$sql = "SELECT s.nom as name, s.rowid as socid,";
|
||||
$sql.= " c.ref, c.tms, c.rowid,";
|
||||
$sql.= " c.fk_statut, c.facture";
|
||||
$sql.= " c.ref, c.tms, c.rowid, c.date_commande,";
|
||||
$sql.= " c.fk_statut, c.fk_user_valid, c.facture, c.total_ht";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s";
|
||||
$sql.= ", ".MAIN_DB_PREFIX."commande as c";
|
||||
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
|
||||
$sql.= " WHERE c.fk_soc = s.rowid";
|
||||
$sql.= " AND c.entity = ".$conf->entity;
|
||||
if (! empty($conf->global->ORDER_BOX_LAST_ORDERS_VALIDATED_ONLY)) $sql.=" AND c.fk_statut = 1";
|
||||
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
|
||||
if ($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id;
|
||||
$sql.= " ORDER BY c.date_commande DESC, c.ref DESC ";
|
||||
if ($conf->global->MAIN_LASTBOX_ON_OBJECT_DATE) $sql.= " ORDER BY c.date_commande DESC, c.ref DESC ";
|
||||
else $sql.= " ORDER BY c.tms DESC, c.ref DESC ";
|
||||
$sql.= $db->plimit($max, 0);
|
||||
|
||||
$result = $db->query($sql);
|
||||
@@ -86,29 +89,43 @@ class box_commandes extends ModeleBoxes
|
||||
while ($i < $num)
|
||||
{
|
||||
$objp = $db->fetch_object($result);
|
||||
$date=$db->jdate($objp->date_commande);
|
||||
$datem=$db->jdate($objp->tms);
|
||||
|
||||
$this->info_box_contents[$i][0] = array('td' => 'align="left" width="16"',
|
||||
$this->info_box_contents[$i][] = array('td' => 'align="left" width="16"',
|
||||
'logo' => $this->boximg,
|
||||
'url' => DOL_URL_ROOT."/commande/card.php?id=".$objp->rowid);
|
||||
|
||||
$this->info_box_contents[$i][1] = array('td' => 'align="left"',
|
||||
$this->info_box_contents[$i][] = array('td' => 'align="left"',
|
||||
'text' => $objp->ref,
|
||||
'url' => DOL_URL_ROOT."/commande/card.php?id=".$objp->rowid);
|
||||
|
||||
$this->info_box_contents[$i][2] = array('td' => 'align="left" width="16"',
|
||||
$this->info_box_contents[$i][] = array('td' => 'align="left" width="16"',
|
||||
'logo' => 'company',
|
||||
'url' => DOL_URL_ROOT."/comm/card.php?socid=".$objp->socid);
|
||||
|
||||
$this->info_box_contents[$i][3] = array('td' => 'align="left"',
|
||||
$this->info_box_contents[$i][] = array('td' => 'align="left"',
|
||||
'text' => $objp->name,
|
||||
'url' => DOL_URL_ROOT."/comm/card.php?socid=".$objp->socid);
|
||||
|
||||
$this->info_box_contents[$i][4] = array('td' => 'align="right"',
|
||||
'text' => dol_print_date($datem,'day'),
|
||||
$this->info_box_contents[$i][] = array('td' => 'align="right"',
|
||||
'text' => price($objp->total_ht),
|
||||
);
|
||||
|
||||
if (! empty($conf->global->ORDER_BOX_LAST_ORDERS_SHOW_VALIDATE_USER))
|
||||
{
|
||||
if ($objp->fk_user_valid > 0) $userstatic->fetch($objp->fk_user_valid);
|
||||
$this->info_box_contents[$i][] = array('td' => 'align="right"',
|
||||
'text' => (($objp->fk_user_valid > 0)?$userstatic->getNomUrl(1):''),
|
||||
'url' => (($objp->fk_user_valid > 0)?DOL_URL_ROOT.'/user/card.php?id='.$objp->fk_user_valid:'')
|
||||
);
|
||||
}
|
||||
|
||||
$this->info_box_contents[$i][] = array('td' => 'align="right"',
|
||||
'text' => dol_print_date($date,'day'),
|
||||
);
|
||||
|
||||
$this->info_box_contents[$i][5] = array('td' => 'align="right" width="18"',
|
||||
$this->info_box_contents[$i][] = array('td' => 'align="right" width="18"',
|
||||
'text' => $commandestatic->LibStatut($objp->fk_statut,$objp->facture,3));
|
||||
|
||||
$i++;
|
||||
|
||||
@@ -56,7 +56,7 @@ class box_factures extends ModeleBoxes
|
||||
include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
|
||||
$facturestatic=new Facture($db);
|
||||
|
||||
$text = $langs->trans("BoxTitleLastCustomerBills",$max);
|
||||
$text = $langs->trans("BoxTitleLast".($conf->global->MAIN_LASTBOX_ON_OBJECT_DATE?"":"Modified")."CustomerBills",$max);
|
||||
$this->info_box_head = array(
|
||||
'text' => $text,
|
||||
'limit'=> dol_strlen($text)
|
||||
@@ -64,7 +64,7 @@ class box_factures extends ModeleBoxes
|
||||
|
||||
if ($user->rights->facture->lire)
|
||||
{
|
||||
$sql = "SELECT f.rowid as facid, f.facnumber, f.type, f.amount, f.datef as df";
|
||||
$sql = "SELECT f.rowid as facid, f.facnumber, f.type, f.total as total_ht, f.datef as df";
|
||||
$sql.= ", f.paye, f.fk_statut, f.datec, f.tms";
|
||||
$sql.= ", s.nom as name, s.rowid as socid";
|
||||
$sql.= ", f.date_lim_reglement as datelimite";
|
||||
@@ -75,7 +75,8 @@ class box_factures extends ModeleBoxes
|
||||
$sql.= " AND f.entity = ".$conf->entity;
|
||||
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
|
||||
if($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id;
|
||||
$sql.= " ORDER BY f.tms DESC";
|
||||
if ($conf->global->MAIN_LASTBOX_ON_OBJECT_DATE) $sql.= " ORDER BY f.datef DESC, f.facnumber DESC ";
|
||||
else $sql.= " ORDER BY f.tms DESC, f.facnumber DESC ";
|
||||
$sql.= $db->plimit($max, 0);
|
||||
|
||||
$result = $db->query($sql);
|
||||
@@ -91,7 +92,8 @@ class box_factures extends ModeleBoxes
|
||||
{
|
||||
$objp = $db->fetch_object($result);
|
||||
$datelimite=$db->jdate($objp->datelimite);
|
||||
$datec=$db->jdate($objp->datec);
|
||||
$date=$db->jdate($objp->df);
|
||||
$datem=$db->jdate($objp->tms);
|
||||
|
||||
$picto='bill';
|
||||
if ($objp->type == 1) $picto.='r';
|
||||
@@ -118,10 +120,14 @@ class box_factures extends ModeleBoxes
|
||||
'url' => DOL_URL_ROOT."/comm/card.php?socid=".$objp->socid);
|
||||
|
||||
$this->info_box_contents[$i][4] = array('td' => 'align="right"',
|
||||
'text' => dol_print_date($datec,'day'),
|
||||
'text' => price($objp->total_ht),
|
||||
);
|
||||
|
||||
$this->info_box_contents[$i][5] = array('td' => 'align="right" width="18"',
|
||||
$this->info_box_contents[$i][5] = array('td' => 'align="right"',
|
||||
'text' => dol_print_date($date,'day'),
|
||||
);
|
||||
|
||||
$this->info_box_contents[$i][6] = array('td' => 'align="right" width="18"',
|
||||
'text' => $facturestatic->LibStatut($objp->paye,$objp->fk_statut,3));
|
||||
|
||||
$i++;
|
||||
|
||||
@@ -58,13 +58,13 @@ class box_factures_fourn extends ModeleBoxes
|
||||
$facturestatic=new FactureFournisseur($db);
|
||||
|
||||
$this->info_box_head = array(
|
||||
'text' => $langs->trans("BoxTitleLastSupplierBills",$max)
|
||||
'text' => $langs->trans("BoxTitleLast".($conf->global->MAIN_LASTBOX_ON_OBJECT_DATE?"":"Modified")."SupplierBills",$max)
|
||||
);
|
||||
|
||||
if ($user->rights->fournisseur->facture->lire)
|
||||
{
|
||||
$sql = "SELECT s.nom as name, s.rowid as socid,";
|
||||
$sql.= " f.rowid as facid, f.ref, f.ref_supplier, f.amount,";
|
||||
$sql.= " f.rowid as facid, f.ref, f.ref_supplier, f.total_ht,";
|
||||
$sql.= " f.paye, f.fk_statut,";
|
||||
$sql.= ' f.datef as df,';
|
||||
$sql.= ' f.datec as datec,';
|
||||
@@ -76,7 +76,8 @@ class box_factures_fourn extends ModeleBoxes
|
||||
$sql.= " AND f.entity = ".$conf->entity;
|
||||
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
|
||||
if($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id;
|
||||
$sql.= " ORDER BY f.tms DESC";
|
||||
if ($conf->global->MAIN_LASTBOX_ON_OBJECT_DATE) $sql.= " ORDER BY f.datef DESC, f.ref DESC ";
|
||||
else $sql.= " ORDER BY f.tms DESC, f.ref DESC ";
|
||||
$sql.= $db->plimit($max, 0);
|
||||
|
||||
$result = $db->query($sql);
|
||||
@@ -92,7 +93,8 @@ class box_factures_fourn extends ModeleBoxes
|
||||
{
|
||||
$objp = $db->fetch_object($result);
|
||||
$datelimite=$db->jdate($objp->datelimite);
|
||||
$datec=$db->jdate($objp->datec);
|
||||
$date=$db->jdate($objp->df);
|
||||
$datem=$db->jdate($objp->tms);
|
||||
|
||||
$late = '';
|
||||
if ($objp->paye == 0 && $datelimite && $datelimite < ($now - $conf->facture->fournisseur->warning_delay)) $late=img_warning(sprintf($l_due_date, dol_print_date($datelimite,'day')));
|
||||
@@ -119,7 +121,7 @@ class box_factures_fourn extends ModeleBoxes
|
||||
'url' => DOL_URL_ROOT."/fourn/card.php?socid=".$objp->socid);
|
||||
|
||||
$this->info_box_contents[$i][5] = array('td' => 'align="right"',
|
||||
'text' => dol_print_date($datec,'day'));
|
||||
'text' => dol_print_date($date,'day'));
|
||||
|
||||
$fac = new FactureFournisseur($db);
|
||||
$fac->fetch($objp->facid);
|
||||
|
||||
@@ -67,15 +67,12 @@ class box_ficheinter extends ModeleBoxes
|
||||
$sql.= " f.tms as datem,";
|
||||
$sql.= " s.nom as name, s.rowid as socid, s.client";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s";
|
||||
if (! $user->rights->societe->client->voir)
|
||||
$sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
|
||||
if (! $user->rights->societe->client->voir) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
|
||||
$sql.= ", ".MAIN_DB_PREFIX."fichinter as f";
|
||||
$sql.= " WHERE f.fk_soc = s.rowid ";
|
||||
$sql.= " AND f.entity = ".$conf->entity;
|
||||
if (! $user->rights->societe->client->voir && !$user->societe_id)
|
||||
$sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
|
||||
if (! $user->rights->societe->client->voir && !$user->societe_id) $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
|
||||
if($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id;
|
||||
|
||||
$sql.= " ORDER BY f.tms DESC";
|
||||
$sql.= $db->plimit($max, 0);
|
||||
|
||||
|
||||
@@ -56,84 +56,93 @@ class box_propales extends ModeleBoxes
|
||||
$this->max=$max;
|
||||
|
||||
include_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php';
|
||||
$propalstatic=new Propal($db);
|
||||
$propalstatic=new Propal($db);
|
||||
|
||||
$this->info_box_head = array('text' => $langs->trans("BoxTitleLastPropals",$max));
|
||||
$this->info_box_head = array('text' => $langs->trans("BoxTitleLast".($conf->global->MAIN_LASTBOX_ON_OBJECT_DATE?"":"Modified")."Propals",$max));
|
||||
|
||||
if ($user->rights->propale->lire)
|
||||
{
|
||||
$sql = "SELECT s.nom as name, s.rowid as socid,";
|
||||
$sql.= " p.rowid, p.ref, p.fk_statut, p.datep as dp, p.datec, p.fin_validite, p.date_cloture";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s";
|
||||
$sql.= ", ".MAIN_DB_PREFIX."propal as p";
|
||||
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
|
||||
$sql.= " WHERE p.fk_soc = s.rowid";
|
||||
$sql.= " AND p.entity = ".$conf->entity;
|
||||
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
|
||||
if($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id;
|
||||
$sql.= " ORDER BY p.datep DESC, p.ref DESC ";
|
||||
$sql.= $db->plimit($max, 0);
|
||||
if ($user->rights->propale->lire)
|
||||
{
|
||||
$sql = "SELECT s.nom as name, s.rowid as socid,";
|
||||
$sql.= " p.rowid, p.ref, p.fk_statut, p.datep as dp, p.datec, p.fin_validite, p.date_cloture, p.total_ht, p.tms";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s";
|
||||
$sql.= ", ".MAIN_DB_PREFIX."propal as p";
|
||||
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
|
||||
$sql.= " WHERE p.fk_soc = s.rowid";
|
||||
$sql.= " AND p.entity = ".$conf->entity;
|
||||
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
|
||||
if($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id;
|
||||
if ($conf->global->MAIN_LASTBOX_ON_OBJECT_DATE) $sql.= " ORDER BY p.datep DESC, p.ref DESC ";
|
||||
else $sql.= " ORDER BY p.tms DESC, p.ref DESC ";
|
||||
$sql.= $db->plimit($max, 0);
|
||||
|
||||
$result = $db->query($sql);
|
||||
if ($result)
|
||||
{
|
||||
$num = $db->num_rows($result);
|
||||
$now=dol_now();
|
||||
$result = $db->query($sql);
|
||||
if ($result)
|
||||
{
|
||||
$num = $db->num_rows($result);
|
||||
$now=dol_now();
|
||||
|
||||
$i = 0;
|
||||
$i = 0;
|
||||
|
||||
while ($i < $num)
|
||||
{
|
||||
$objp = $db->fetch_object($result);
|
||||
$datec=$db->jdate($objp->datec);
|
||||
$dateterm=$db->jdate($objp->fin_validite);
|
||||
$dateclose=$db->jdate($objp->date_cloture);
|
||||
while ($i < $num)
|
||||
{
|
||||
$objp = $db->fetch_object($result);
|
||||
$date=$db->jdate($objp->dp);
|
||||
$datec=$db->jdate($objp->datec);
|
||||
$datem=$db->jdate($objp->tms);
|
||||
$dateterm=$db->jdate($objp->fin_validite);
|
||||
$dateclose=$db->jdate($objp->date_cloture);
|
||||
|
||||
$late = '';
|
||||
if ($objp->fk_statut == 1 && $dateterm < ($now - $conf->propal->cloture->warning_delay)) { $late = img_warning($langs->trans("Late")); }
|
||||
$late = '';
|
||||
if ($objp->fk_statut == 1 && $dateterm < ($now - $conf->propal->cloture->warning_delay)) {
|
||||
$late = img_warning($langs->trans("Late"));
|
||||
}
|
||||
|
||||
$this->info_box_contents[$i][0] = array('td' => 'align="left" width="16"',
|
||||
'logo' => $this->boximg,
|
||||
'url' => DOL_URL_ROOT."/comm/propal.php?id=".$objp->rowid);
|
||||
$this->info_box_contents[$i][0] = array('td' => 'align="left" width="16"',
|
||||
'logo' => $this->boximg,
|
||||
'url' => DOL_URL_ROOT."/comm/propal.php?id=".$objp->rowid);
|
||||
|
||||
$this->info_box_contents[$i][1] = array('td' => 'align="left"',
|
||||
'text' => $objp->ref,
|
||||
'text2'=> $late,
|
||||
'url' => DOL_URL_ROOT."/comm/propal.php?id=".$objp->rowid);
|
||||
$this->info_box_contents[$i][1] = array('td' => 'align="left"',
|
||||
'text' => $objp->ref,
|
||||
'text2'=> $late,
|
||||
'url' => DOL_URL_ROOT."/comm/propal.php?id=".$objp->rowid);
|
||||
|
||||
$this->info_box_contents[$i][2] = array('td' => 'align="left" width="16"',
|
||||
'logo' => 'company',
|
||||
'url' => DOL_URL_ROOT."/comm/card.php?socid=".$objp->socid);
|
||||
$this->info_box_contents[$i][2] = array('td' => 'align="left" width="16"',
|
||||
'logo' => 'company',
|
||||
'url' => DOL_URL_ROOT."/comm/card.php?socid=".$objp->socid);
|
||||
|
||||
$this->info_box_contents[$i][3] = array('td' => 'align="left"',
|
||||
'text' => dol_trunc($objp->name,40),
|
||||
'url' => DOL_URL_ROOT."/comm/card.php?socid=".$objp->socid);
|
||||
$this->info_box_contents[$i][3] = array('td' => 'align="left"',
|
||||
'text' => dol_trunc($objp->name,40),
|
||||
'url' => DOL_URL_ROOT."/comm/card.php?socid=".$objp->socid);
|
||||
|
||||
$this->info_box_contents[$i][4] = array('td' => 'align="right"',
|
||||
'text' => dol_print_date($datec,'day'));
|
||||
$this->info_box_contents[$i][4] = array('td' => 'align="right"',
|
||||
'text' => price($objp->total_ht),
|
||||
);
|
||||
|
||||
$this->info_box_contents[$i][5] = array('td' => 'align="right" width="18"',
|
||||
'text' => $propalstatic->LibStatut($objp->fk_statut,3));
|
||||
$this->info_box_contents[$i][5] = array('td' => 'align="right"',
|
||||
'text' => dol_print_date($date,'day'));
|
||||
|
||||
$i++;
|
||||
}
|
||||
$this->info_box_contents[$i][6] = array('td' => 'align="right" width="18"',
|
||||
'text' => $propalstatic->LibStatut($objp->fk_statut,3));
|
||||
|
||||
if ($num==0) $this->info_box_contents[$i][0] = array('td' => 'align="center"','text'=>$langs->trans("NoRecordedProposals"));
|
||||
$i++;
|
||||
}
|
||||
|
||||
$db->free($result);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->info_box_contents[0][0] = array( 'td' => 'align="left"',
|
||||
'maxlength'=>500,
|
||||
'text' => ($db->error().' sql='.$sql));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->info_box_contents[0][0] = array('td' => 'align="left"',
|
||||
'text' => $langs->trans("ReadPermissionNotAllowed"));
|
||||
}
|
||||
if ($num==0) $this->info_box_contents[$i][0] = array('td' => 'align="center"','text'=>$langs->trans("NoRecordedProposals"));
|
||||
|
||||
$db->free($result);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->info_box_contents[0][0] = array( 'td' => 'align="left"',
|
||||
'maxlength'=>500,
|
||||
'text' => ($db->error().' sql='.$sql));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->info_box_contents[0][0] = array('td' => 'align="left"',
|
||||
'text' => $langs->trans("ReadPermissionNotAllowed"));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -58,12 +58,12 @@ class box_supplier_orders extends ModeleBoxes
|
||||
include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php';
|
||||
$supplierorderstatic=new CommandeFournisseur($db);
|
||||
|
||||
$this->info_box_head = array('text' => $langs->trans("BoxTitleLatestSupplierOrders", $max));
|
||||
$this->info_box_head = array('text' => $langs->trans("BoxTitleLatest".($conf->global->MAIN_LASTBOX_ON_OBJECT_DATE?"":"Modified")."SupplierOrders", $max));
|
||||
|
||||
if ($user->rights->fournisseur->commande->lire)
|
||||
{
|
||||
$sql = "SELECT s.nom as name, s.rowid as socid,";
|
||||
$sql.= " c.ref, c.tms, c.rowid,";
|
||||
$sql.= " c.ref, c.tms, c.rowid, c.date_commande,";
|
||||
$sql.= " c.fk_statut";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s";
|
||||
$sql.= ", ".MAIN_DB_PREFIX."commande_fournisseur as c";
|
||||
@@ -72,7 +72,8 @@ class box_supplier_orders extends ModeleBoxes
|
||||
$sql.= " AND c.entity = ".$conf->entity;
|
||||
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
|
||||
if ($user->societe_id) $sql.= " AND s.rowid = ".$user->societe_id;
|
||||
$sql.= " ORDER BY c.date_commande DESC, c.ref DESC ";
|
||||
if ($conf->global->MAIN_LASTBOX_ON_OBJECT_DATE) $sql.= " ORDER BY c.date_commande DESC, c.ref DESC ";
|
||||
else $sql.= " ORDER BY c.tms DESC, c.ref DESC ";
|
||||
$sql.= $db->plimit($max, 0);
|
||||
|
||||
$result = $db->query($sql);
|
||||
@@ -84,7 +85,8 @@ class box_supplier_orders extends ModeleBoxes
|
||||
while ($i < $num)
|
||||
{
|
||||
$objp = $db->fetch_object($result);
|
||||
$datem=$db->jdate($objp->tms);
|
||||
$date=$db->jdate($objp->date_commande);
|
||||
$datem=$db->jdate($objp->tms);
|
||||
|
||||
$urlo = DOL_URL_ROOT."/fourn/commande/card.php?id=".$objp->rowid;
|
||||
$urls = DOL_URL_ROOT."/fourn/card.php?socid=".$objp->socid;
|
||||
@@ -106,7 +108,7 @@ class box_supplier_orders extends ModeleBoxes
|
||||
'url' => $urls);
|
||||
|
||||
$this->info_box_contents[$i][4] = array('td' => 'align="right"',
|
||||
'text' => dol_print_date($datem,'day'),
|
||||
'text' => dol_print_date($date,'day'),
|
||||
);
|
||||
|
||||
$this->info_box_contents[$i][5] = array('td' => 'align="right" width="18"',
|
||||
|
||||
@@ -1145,6 +1145,9 @@ class Form
|
||||
// If no preselected user defined, we take current user
|
||||
if ((is_numeric($selected) && ($selected < -1 || empty($selected))) && empty($conf->global->SOCIETE_DISABLE_DEFAULT_SALESREPRESENTATIVE)) $selected=$user->id;
|
||||
|
||||
$excludeUsers=null;
|
||||
$includeUsers=null;
|
||||
|
||||
// Permettre l'exclusion d'utilisateurs
|
||||
if (is_array($exclude)) $excludeUsers = implode("','",$exclude);
|
||||
// Permettre l'inclusion d'utilisateurs
|
||||
|
||||
@@ -167,15 +167,15 @@ class FormProjets
|
||||
}
|
||||
|
||||
/**
|
||||
* Build Select List of element associable to a project
|
||||
* Build a HTML select list of element of same thirdparty to suggest to link them to project
|
||||
*
|
||||
* @param string $table_element Table of the element to update
|
||||
* @param int $socid socid to filter
|
||||
* @return string The HTML select list of element
|
||||
* @param string $table_element Table of the element to update
|
||||
* @param int $socid socid to filter
|
||||
* @return string The HTML select list of element
|
||||
*/
|
||||
function select_element($table_element,$socid=0)
|
||||
{
|
||||
global $conf;
|
||||
global $conf, $langs;
|
||||
|
||||
$projectkey="fk_projet";
|
||||
switch ($table_element)
|
||||
@@ -184,7 +184,10 @@ class FormProjets
|
||||
$sql = "SELECT rowid, facnumber as ref";
|
||||
break;
|
||||
case "facture_fourn":
|
||||
$sql = "SELECT rowid, ref";
|
||||
$sql = "SELECT rowid, ref, ref_supplier";
|
||||
break;
|
||||
case "commande_fourn":
|
||||
$sql = "SELECT rowid, ref, ref_supplier";
|
||||
break;
|
||||
case "facture_rec":
|
||||
$sql = "SELECT rowid, titre as ref";
|
||||
@@ -219,14 +222,22 @@ class FormProjets
|
||||
while ($i < $num)
|
||||
{
|
||||
$obj = $this->db->fetch_object($resql);
|
||||
$sellist .='<option value="'.$obj->rowid.'">'.$obj->ref.'</option>';
|
||||
$ref=$obj->ref?$obj->ref:$obj->rowid;
|
||||
if (! empty($obj->ref_supplier)) $ref.=' ('.$obj->ref_supplier.')';
|
||||
$sellist .='<option value="'.$obj->rowid.'">'.$ref.'</option>';
|
||||
$i++;
|
||||
}
|
||||
$sellist .='</select>';
|
||||
}
|
||||
return $sellist ;
|
||||
|
||||
/*else
|
||||
{
|
||||
$sellist = '<select class="flat" name="elementselect">';
|
||||
$sellist.= '<option value="0" disabled="disabled">'.$langs->trans("None").'</option>';
|
||||
$sellist.= '</select>';
|
||||
}*/
|
||||
$this->db->free($resql);
|
||||
|
||||
return $sellist ;
|
||||
}else {
|
||||
$this->error=$this->db->lasterror();
|
||||
dol_syslog(get_class($this) . "::select_element " . $this->error, LOG_ERR);
|
||||
|
||||
@@ -54,7 +54,7 @@ class InfoBox
|
||||
$boxes=array();
|
||||
|
||||
$confuserzone='MAIN_BOXES_'.$zone;
|
||||
if ($mode == 'activated')
|
||||
if ($mode == 'activated') // activated
|
||||
{
|
||||
$sql = "SELECT b.rowid, b.position, b.box_order, b.fk_user,";
|
||||
$sql.= " d.rowid as box_id, d.file, d.note, d.tms";
|
||||
@@ -66,18 +66,11 @@ class InfoBox
|
||||
else $sql.= " AND b.fk_user = 0";
|
||||
$sql.= " ORDER BY b.box_order";
|
||||
}
|
||||
else
|
||||
else // available
|
||||
{
|
||||
$sql = "SELECT d.rowid as box_id, d.file, d.note, d.tms";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."boxes_def as d";
|
||||
if (! empty($conf->multicompany->enabled) && ! empty($conf->multicompany->transverse_mode))
|
||||
{
|
||||
$sql.= " WHERE entity IN (1,".$conf->entity.")"; // TODO add method for define another master entity
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql.= " WHERE entity = ".$conf->entity;
|
||||
}
|
||||
$sql.= " WHERE d.entity IN (0,".(! empty($conf->multicompany->enabled) && ! empty($conf->multicompany->transverse_mode)?"1,":"").$conf->entity.")";
|
||||
}
|
||||
|
||||
dol_syslog(get_class()."::listBoxes get default box list for mode=".$mode." userid=".(is_object($user)?$user->id:'')."", LOG_DEBUG);
|
||||
@@ -92,6 +85,7 @@ class InfoBox
|
||||
|
||||
if (! in_array($obj->box_id, $excludelist))
|
||||
{
|
||||
|
||||
if (preg_match('/^([^@]+)@([^@]+)$/i',$obj->file,$regs))
|
||||
{
|
||||
$boxname = preg_replace('/\.php$/i','',$regs[1]);
|
||||
@@ -104,9 +98,11 @@ class InfoBox
|
||||
$relsourcefile = "/core/boxes/".$boxname.".php";
|
||||
}
|
||||
|
||||
//print $obj->box_id.'-'.$boxname.'-'.$relsourcefile.'<br>';
|
||||
|
||||
// TODO PERF Do not make "dol_include_once" here, nor "new" later. This means, we must store a 'depends' field to store modules list, then
|
||||
// the "enabled" condition for modules forbidden for external users and the depends condition can be done.
|
||||
// Goal is to avoid making a new instance for each boxes returned by select.
|
||||
// Goal is to avoid making a "new" done for each boxes returned by select.
|
||||
dol_include_once($relsourcefile);
|
||||
if (class_exists($boxname))
|
||||
{
|
||||
@@ -161,15 +157,19 @@ class InfoBox
|
||||
//print 'xx module='.$module.' enabled='.$enabled;
|
||||
if ($enabled) $boxes[]=$box;
|
||||
else unset($box);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
dol_syslog("Failed to load box '".$boxname."' into file '".$relsourcefile."'", LOG_WARNING);
|
||||
}
|
||||
}
|
||||
$j++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//dol_print_error($db);
|
||||
$error=$db->lasterror();
|
||||
{
|
||||
dol_syslog($db->lasterror(),LOG_ERR);
|
||||
return array('error'=>$db->lasterror());
|
||||
}
|
||||
|
||||
return $boxes;
|
||||
|
||||
@@ -32,6 +32,7 @@ class Notify
|
||||
var $id;
|
||||
var $db;
|
||||
var $error;
|
||||
var $errors=array();
|
||||
|
||||
var $author;
|
||||
var $ref;
|
||||
@@ -84,34 +85,50 @@ class Notify
|
||||
{
|
||||
global $conf;
|
||||
|
||||
$num=-1;
|
||||
$error=0;
|
||||
$num=0;
|
||||
|
||||
$sql = "SELECT n.rowid";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."notify_def as n,";
|
||||
$sql.= " ".MAIN_DB_PREFIX."socpeople as c,";
|
||||
$sql.= " ".MAIN_DB_PREFIX."c_action_trigger as a,";
|
||||
$sql.= " ".MAIN_DB_PREFIX."societe as s";
|
||||
$sql.= " WHERE n.fk_contact = c.rowid";
|
||||
$sql.= " AND a.rowid = n.fk_action";
|
||||
$sql.= " AND n.fk_soc = s.rowid";
|
||||
if (is_numeric($action)) $sql.= " AND n.fk_action = ".$action; // Old usage
|
||||
else $sql.= " AND a.code = '".$action."'"; // New usage
|
||||
$sql.= " AND s.entity IN (".getEntity('societe', 1).")";
|
||||
$sql.= " AND s.rowid = ".$socid;
|
||||
|
||||
dol_syslog("Notify.class::countDefinedNotifications ".$action.", ".$socid."", LOG_DEBUG);
|
||||
|
||||
$resql = $this->db->query($sql);
|
||||
if ($resql)
|
||||
if (! $error)
|
||||
{
|
||||
$num = $this->db->num_rows($resql);
|
||||
}
|
||||
else
|
||||
$sql = "SELECT n.rowid";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."notify_def as n,";
|
||||
$sql.= " ".MAIN_DB_PREFIX."socpeople as c,";
|
||||
$sql.= " ".MAIN_DB_PREFIX."c_action_trigger as a,";
|
||||
$sql.= " ".MAIN_DB_PREFIX."societe as s";
|
||||
$sql.= " WHERE n.fk_contact = c.rowid";
|
||||
$sql.= " AND a.rowid = n.fk_action";
|
||||
$sql.= " AND n.fk_soc = s.rowid";
|
||||
if (is_numeric($action)) $sql.= " AND n.fk_action = ".$action; // Old usage
|
||||
else $sql.= " AND a.code = '".$action."'"; // New usage
|
||||
$sql.= " AND s.entity IN (".getEntity('societe', 1).")";
|
||||
$sql.= " AND s.rowid = ".$socid;
|
||||
|
||||
dol_syslog(get_class($this)."::countDefinedNotifications ".$action.", ".$socid."", LOG_DEBUG);
|
||||
|
||||
$resql = $this->db->query($sql);
|
||||
if ($resql)
|
||||
{
|
||||
$num = $this->db->num_rows($resql);
|
||||
}
|
||||
else
|
||||
{
|
||||
$error++;
|
||||
$this->error=$this->db->error.' sql='.$sql;
|
||||
}
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$this->error=$this->db->error.' sql='.$sql;
|
||||
return -1;
|
||||
// List of notifications enabled for fixed email
|
||||
foreach($conf->global as $key => $val)
|
||||
{
|
||||
if (! preg_match('/^NOTIFICATION_FIXEDEMAIL_'.$action.'/', $key, $reg)) continue;
|
||||
$num++;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO return array with list of email instead of number, + type of notification (contacts or fixed email)
|
||||
if ($error) return -1;
|
||||
return $num;
|
||||
}
|
||||
|
||||
@@ -120,22 +137,42 @@ class Notify
|
||||
* If yes, send mail and save trace into llx_notify.
|
||||
*
|
||||
* @param string $action 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
|
||||
* @param string $texte Message to send
|
||||
* @param string $objet_type Type of object the notification deals on (facture, order, propal, order_supplier...). Just for log in llx_notify.
|
||||
* @param int $objet_id Id of object the notification deals on
|
||||
* @param string $file Attach a file
|
||||
* @param Object $object Object the notification deals on
|
||||
* @return int <0 if KO, or number of changes if OK
|
||||
*/
|
||||
function send($action, $socid, $texte, $objet_type, $objet_id, $file="")
|
||||
function send($action, $object)
|
||||
{
|
||||
global $conf,$langs,$mysoc,$dolibarr_main_url_root;
|
||||
|
||||
$langs->load("other");
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
|
||||
dol_syslog(get_class($this)."::send action=".$action.", socid=".$socid.", texte=".$texte.", objet_type=".$objet_type.", objet_id=".$objet_id.", file=".$file);
|
||||
dol_syslog(get_class($this)."::send action=".$action.", object=".$object->id);
|
||||
|
||||
$sql = "SELECT s.nom, c.email, c.rowid as cid, c.lastname, c.firstname,";
|
||||
$langs->load("other");
|
||||
|
||||
// Define $urlwithroot
|
||||
$urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root));
|
||||
$urlwithroot=$urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file
|
||||
//$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current
|
||||
|
||||
// Define some vars
|
||||
$application = $mysoc->name;
|
||||
//if (! empty($conf->global->MAIN_APPLICATION_TITLE)) $application = $conf->global->MAIN_APPLICATION_TITLE;
|
||||
$replyto = $conf->notification->email_from;
|
||||
$filename = basename($file);
|
||||
$mimefile = dol_mimetype($file);
|
||||
$object_type = '';
|
||||
$link = '';
|
||||
$num = 0;
|
||||
|
||||
if (! in_array($action, array('BILL_VALIDATE', 'ORDER_VALIDATE', 'PROPAL_VALIDATE', 'FICHINTER_VALIDATE', 'ORDER_SUPPLIER_APPROVE', 'ORDER_SUPPLIER_REFUSE', 'SHIPPING_VALIDATE')))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// Check notification per third party
|
||||
$sql = "SELECT s.nom, c.email, c.rowid as cid, c.lastname, c.firstname, c.default_lang,";
|
||||
$sql.= " a.rowid as adid, a.label, a.code, n.rowid";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."socpeople as c,";
|
||||
$sql.= " ".MAIN_DB_PREFIX."c_action_trigger as a,";
|
||||
@@ -145,7 +182,7 @@ class Notify
|
||||
$sql.= " AND n.fk_soc = s.rowid";
|
||||
if (is_numeric($action)) $sql.= " AND n.fk_action = ".$action; // Old usage
|
||||
else $sql.= " AND a.code = '".$action."'"; // New usage
|
||||
$sql .= " AND s.rowid = ".$socid;
|
||||
$sql .= " AND s.rowid = ".$object->socid;
|
||||
|
||||
$result = $this->db->query($sql);
|
||||
if ($result)
|
||||
@@ -155,7 +192,7 @@ class Notify
|
||||
if ($num > 0)
|
||||
{
|
||||
$i = 0;
|
||||
while ($i < $num) // For each notification couple defined (third party/actioncode)
|
||||
while ($i < $num && ! $error) // For each notification couple defined (third party/actioncode)
|
||||
{
|
||||
$obj = $this->db->fetch_object($result);
|
||||
|
||||
@@ -164,48 +201,80 @@ class Notify
|
||||
|
||||
if (dol_strlen($obj->email))
|
||||
{
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
$application=($conf->global->MAIN_APPLICATION_TITLE?$conf->global->MAIN_APPLICATION_TITLE:'Dolibarr ERP/CRM');
|
||||
// Set output language
|
||||
$outputlangs = $langs;
|
||||
if ($obj->default_lang && $obj->default_lang != $langs->defaultlang)
|
||||
{
|
||||
$outputlangs = new Translate('', $conf);
|
||||
$outputlangs->setDefaultLang($obj->default_lang);
|
||||
}
|
||||
|
||||
$subject = '['.$application.'] '.$langs->transnoentitiesnoconv("DolibarrNotification");
|
||||
switch ($action) {
|
||||
case 'BILL_VALIDATE':
|
||||
$link='/compta/facture.php?facid='.$object->id;
|
||||
$dir_output = $conf->facture->dir_output;
|
||||
$object_type = 'facture';
|
||||
$mesg = $langs->transnoentitiesnoconv("EMailTextInvoiceValidated",$object->ref);
|
||||
break;
|
||||
case 'ORDER_VALIDATE':
|
||||
$link='/commande/card.php?id='.$object->id;
|
||||
$dir_output = $conf->commande->dir_output;
|
||||
$object_type = 'order';
|
||||
$mesg = $langs->transnoentitiesnoconv("EMailTextOrderValidated",$object->ref);
|
||||
break;
|
||||
case 'PROPAL_VALIDATE':
|
||||
$link='/comm/propal.php?id='.$object->id;
|
||||
$dir_output = $conf->propal->dir_output;
|
||||
$object_type = 'propal';
|
||||
$mesg = $langs->transnoentitiesnoconv("EMailTextProposalValidated",$object->ref);
|
||||
break;
|
||||
case 'FICHINTER_VALIDATE':
|
||||
$link='/fichinter/card.php?id='.$object->id;
|
||||
$dir_output = $conf->facture->dir_output;
|
||||
$object_type = 'ficheinter';
|
||||
$mesg = $langs->transnoentitiesnoconv("EMailTextInterventionValidated",$object->ref);
|
||||
break;
|
||||
case 'ORDER_SUPPLIER_APPROVE':
|
||||
$link='/fourn/commande/card.php?id='.$object->id;
|
||||
$dir_output = $conf->fournisseur->dir_output.'/commande/';
|
||||
$object_type = 'order_supplier';
|
||||
$mesg = $langs->transnoentitiesnoconv("Hello").",\n\n";
|
||||
$mesg.= $langs->transnoentitiesnoconv("EMailTextOrderApprovedBy",$object->ref,$user->getFullName($langs));
|
||||
$mesg.= "\n\n".$langs->transnoentitiesnoconv("Sincerely").".\n\n";
|
||||
break;
|
||||
case 'ORDER_SUPPLIER_REFUSE':
|
||||
$link='/fourn/commande/card.php?id='.$object->id;
|
||||
$dir_output = $conf->fournisseur->dir_output.'/commande/';
|
||||
$object_type = 'order_supplier';
|
||||
$mesg = $langs->transnoentitiesnoconv("Hello").",\n\n";
|
||||
$mesg.= $langs->transnoentitiesnoconv("EMailTextOrderRefusedBy",$object->ref,$user->getFullName($langs));
|
||||
$mesg.= "\n\n".$langs->transnoentitiesnoconv("Sincerely").".\n\n";
|
||||
break;
|
||||
case 'SHIPPING_VALIDATE':
|
||||
$dir_output = $conf->expedition->dir_output.'/sending/';
|
||||
$object_type = 'order_supplier';
|
||||
$mesg = $langs->transnoentitiesnoconv("EMailTextExpeditionValidated",$object->ref);
|
||||
break;
|
||||
}
|
||||
$ref = dol_sanitizeFileName($object->ref);
|
||||
$pdf_path = $dir_output."/".$ref."/".$ref.".pdf";
|
||||
if (! dol_is_file($pdf_path))
|
||||
{
|
||||
// We can't add PDF as it is not generated yet.
|
||||
$filepdf = '';
|
||||
}
|
||||
else
|
||||
{
|
||||
$filepdf = $pdf_path;
|
||||
}
|
||||
|
||||
$message = $langs->transnoentities("YouReceiveMailBecauseOfNotification",$application,$mysoc->name)."\n";
|
||||
$message.= $langs->transnoentities("YouReceiveMailBecauseOfNotification2",$application,$mysoc->name)."\n";
|
||||
$subject = '['.$application.'] '.$outputlangs->transnoentitiesnoconv("DolibarrNotification");
|
||||
|
||||
$message = $outputlangs->transnoentities("YouReceiveMailBecauseOfNotification",$application,$mysoc->name)."\n";
|
||||
$message.= $outputlangs->transnoentities("YouReceiveMailBecauseOfNotification2",$application,$mysoc->name)."\n";
|
||||
$message.= "\n";
|
||||
$message.= $texte;
|
||||
// Add link
|
||||
$link='';
|
||||
switch($objet_type)
|
||||
{
|
||||
case 'ficheinter':
|
||||
$link='/fichinter/card.php?id='.$objet_id;
|
||||
break;
|
||||
case 'propal':
|
||||
$link='/comm/propal.php?id='.$objet_id;
|
||||
break;
|
||||
case 'facture':
|
||||
$link='/compta/facture.php?facid='.$objet_id;
|
||||
break;
|
||||
case 'order':
|
||||
$link='/commande/card.php?id='.$objet_id;
|
||||
break;
|
||||
case 'order_supplier':
|
||||
$link='/fourn/commande/card.php?id='.$objet_id;
|
||||
break;
|
||||
}
|
||||
// Define $urlwithroot
|
||||
$urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root));
|
||||
$urlwithroot=$urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file
|
||||
//$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current
|
||||
if ($link) $message.="\n".$urlwithroot.$link;
|
||||
|
||||
$filename = basename($file);
|
||||
|
||||
$mimefile=dol_mimetype($file);
|
||||
|
||||
$msgishtml=0;
|
||||
|
||||
$replyto = $conf->notification->email_from;
|
||||
$message.= $mesg;
|
||||
if ($link) $message=dol_concatdesc($message,$urlwithroot.$link);
|
||||
|
||||
$mailfile = new CMailFile(
|
||||
$subject,
|
||||
@@ -218,26 +287,22 @@ class Notify
|
||||
'',
|
||||
'',
|
||||
0,
|
||||
$msgishtml
|
||||
-1
|
||||
);
|
||||
|
||||
if ($mailfile->sendfile())
|
||||
{
|
||||
$now=dol_now();
|
||||
$sendto = htmlentities($sendto);
|
||||
|
||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."notify (daten, fk_action, fk_contact, objet_type, objet_id, email)";
|
||||
$sql.= " VALUES ('".$this->db->idate($now)."', ".$actiondefid.", ".$obj->cid.", '".$objet_type."', ".$objet_id.", '".$this->db->escape($obj->email)."')";
|
||||
dol_syslog("Notify::send", LOG_DEBUG);
|
||||
if (! $this->db->query($sql) )
|
||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."notify (daten, fk_action, fk_soc, fk_contact, objet_type, objet_id, email)";
|
||||
$sql.= " VALUES ('".$this->db->idate(dol_now())."', ".$actiondefid.", ".$object->socid.", ".$obj->cid.", '".$object_type."', ".$object->id.", '".$this->db->escape($obj->email)."')";
|
||||
if (! $this->db->query($sql))
|
||||
{
|
||||
dol_print_error($this->db);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error=$mailfile->error;
|
||||
//dol_syslog("Notify::send ".$this->error, LOG_ERR);
|
||||
{
|
||||
$error++;
|
||||
$this->errors[]=$mailfile->error;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -246,20 +311,133 @@ class Notify
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
return $i;
|
||||
}
|
||||
else
|
||||
{
|
||||
dol_syslog("No notification sent, nothing into notification setup for the thirdparty socid = ".$socid);
|
||||
return 0;
|
||||
dol_syslog("No notification to thirdparty sent, nothing into notification setup for the thirdparty socid = ".$object->socid);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error=$this->db->lasterror();
|
||||
$error++;
|
||||
$this->errors[]=$this->db->lasterror();
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Check notification using fixed email
|
||||
if (! $error)
|
||||
{
|
||||
$param='NOTIFICATION_FIXEDEMAIL_'.$action;
|
||||
if (! empty($conf->global->$param))
|
||||
{
|
||||
$sendto = $conf->global->$param;
|
||||
$actiondefid = dol_getIdFromCode($this->db, $action, 'c_action_trigger', 'code', 'rowid');
|
||||
if ($actiondefid <= 0) dol_print_error($this->db, 'Failed to get id from code');
|
||||
|
||||
$object_type = '';
|
||||
$link = '';
|
||||
$num++;
|
||||
|
||||
switch ($action) {
|
||||
case 'BILL_VALIDATE':
|
||||
$link='/compta/facture.php?facid='.$object->id;
|
||||
$dir_output = $conf->facture->dir_output;
|
||||
$object_type = 'facture';
|
||||
$mesg = $langs->transnoentitiesnoconv("EMailTextInvoiceValidated",$object->ref);
|
||||
break;
|
||||
case 'ORDER_VALIDATE':
|
||||
$link='/commande/card.php?id='.$object->id;
|
||||
$dir_output = $conf->commande->dir_output;
|
||||
$object_type = 'order';
|
||||
$mesg = $langs->transnoentitiesnoconv("EMailTextOrderValidated",$object->ref);
|
||||
break;
|
||||
case 'PROPAL_VALIDATE':
|
||||
$link='/comm/propal.php?id='.$object->id;
|
||||
$dir_output = $conf->propal->dir_output;
|
||||
$object_type = 'propal';
|
||||
$mesg = $langs->transnoentitiesnoconv("EMailTextProposalValidated",$object->ref);
|
||||
break;
|
||||
case 'FICHINTER_VALIDATE':
|
||||
$link='/fichinter/card.php?id='.$object->id;
|
||||
$dir_output = $conf->facture->dir_output;
|
||||
$object_type = 'ficheinter';
|
||||
$mesg = $langs->transnoentitiesnoconv("EMailTextInterventionValidated",$object->ref);
|
||||
break;
|
||||
case 'ORDER_SUPPLIER_APPROVE':
|
||||
$link='/fourn/commande/card.php?id='.$object->id;
|
||||
$dir_output = $conf->fournisseur->dir_output.'/commande/';
|
||||
$object_type = 'order_supplier';
|
||||
$mesg = $langs->transnoentitiesnoconv("Hello").",\n\n";
|
||||
$mesg.= $langs->transnoentitiesnoconv("EMailTextOrderApprovedBy",$object->ref,$user->getFullName($langs));
|
||||
$mesg.= "\n\n".$langs->transnoentitiesnoconv("Sincerely").".\n\n";
|
||||
break;
|
||||
case 'ORDER_SUPPLIER_REFUSE':
|
||||
$link='/fourn/commande/card.php?id='.$object->id;
|
||||
$dir_output = $conf->fournisseur->dir_output.'/commande/';
|
||||
$object_type = 'order_supplier';
|
||||
$mesg = $langs->transnoentitiesnoconv("Hello").",\n\n";
|
||||
$mesg.= $langs->transnoentitiesnoconv("EMailTextOrderRefusedBy",$object->ref,$user->getFullName($langs));
|
||||
$mesg.= "\n\n".$langs->transnoentitiesnoconv("Sincerely").".\n\n";
|
||||
break;
|
||||
case 'SHIPPING_VALIDATE':
|
||||
$dir_output = $conf->expedition->dir_output.'/sending/';
|
||||
$object_type = 'order_supplier';
|
||||
$mesg = $langs->transnoentitiesnoconv("EMailTextExpeditionValidated",$object->ref);
|
||||
break;
|
||||
}
|
||||
$ref = dol_sanitizeFileName($object->ref);
|
||||
$pdf_path = $dir_output."/".$ref."/".$ref.".pdf";
|
||||
if (! dol_is_file($pdf_path))
|
||||
{
|
||||
// We can't add PDF as it is not generated yet.
|
||||
$filepdf = '';
|
||||
}
|
||||
else
|
||||
{
|
||||
$filepdf = $pdf_path;
|
||||
}
|
||||
|
||||
$subject = '['.$application.'] '.$langs->transnoentitiesnoconv("DolibarrNotification");
|
||||
|
||||
$message = $langs->transnoentities("YouReceiveMailBecauseOfNotification",$application,$mysoc->name)."\n";
|
||||
$message.= $langs->transnoentities("YouReceiveMailBecauseOfNotification2",$application,$mysoc->name)."\n";
|
||||
$message.= "\n";
|
||||
$message.= $mesg;
|
||||
if ($link) $message=dol_concatdesc($message,$urlwithroot.$link);
|
||||
|
||||
$mailfile = new CMailFile(
|
||||
$subject,
|
||||
$sendto,
|
||||
$replyto,
|
||||
$message,
|
||||
array($file),
|
||||
array($mimefile),
|
||||
array($filename[count($filename)-1]),
|
||||
'',
|
||||
'',
|
||||
0,
|
||||
-1
|
||||
);
|
||||
|
||||
if ($mailfile->sendfile())
|
||||
{
|
||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."notify (daten, fk_action, fk_soc, fk_contact, objet_type, objet_id, email)";
|
||||
$sql.= " VALUES ('".$this->db->idate(dol_now())."', ".$actiondefid.", ".$object->socid.", null, '".$object_type."', ".$object->id.", '".$this->db->escape($conf->global->$param)."')";
|
||||
if (! $this->db->query($sql))
|
||||
{
|
||||
dol_print_error($this->db);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$error++;
|
||||
$this->errors[]=$mailfile->error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (! $error) return $num;
|
||||
else return -1 * $error;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -46,6 +46,10 @@ abstract class DoliDB implements Database
|
||||
public $database_name;
|
||||
//! Database username
|
||||
public $database_user;
|
||||
//! Database host
|
||||
public $database_host;
|
||||
//! Database port
|
||||
public $database_port;
|
||||
//! >=1 if a transaction is opened, 0 otherwise
|
||||
public $transaction_opened;
|
||||
//! Last successful query
|
||||
|
||||
@@ -60,6 +60,8 @@ class DoliDBMssql extends DoliDB
|
||||
global $conf,$langs;
|
||||
|
||||
$this->database_user=$user;
|
||||
$this->database_host=$host;
|
||||
$this->database_port=$port;
|
||||
$this->transaction_opened=0;
|
||||
|
||||
if (! function_exists("mssql_connect"))
|
||||
|
||||
@@ -61,6 +61,8 @@ class DoliDBMysql extends DoliDB
|
||||
if (! empty($conf->db->dolibarr_main_db_collation)) $this->forcecollate=$conf->db->dolibarr_main_db_collation;
|
||||
|
||||
$this->database_user=$user;
|
||||
$this->database_host=$host;
|
||||
$this->database_port=$port;
|
||||
|
||||
$this->transaction_opened=0;
|
||||
|
||||
|
||||
@@ -61,6 +61,8 @@ class DoliDBMysqli extends DoliDB
|
||||
if (! empty($conf->db->dolibarr_main_db_collation)) $this->forcecollate=$conf->db->dolibarr_main_db_collation;
|
||||
|
||||
$this->database_user=$user;
|
||||
$this->database_host=$host;
|
||||
$this->database_port=$port;
|
||||
|
||||
$this->transaction_opened=0;
|
||||
|
||||
|
||||
@@ -71,6 +71,8 @@ class DoliDBPgsql extends DoliDB
|
||||
if (! empty($conf->db->dolibarr_main_db_collation)) $this->forcecollate=$conf->db->dolibarr_main_db_collation;
|
||||
|
||||
$this->database_user=$user;
|
||||
$this->database_host=$host;
|
||||
$this->database_port=$port;
|
||||
|
||||
$this->transaction_opened=0;
|
||||
|
||||
|
||||
@@ -61,6 +61,8 @@ class DoliDBSqlite extends DoliDB
|
||||
if (! empty($conf->db->dolibarr_main_db_collation)) $this->forcecollate=$conf->db->dolibarr_main_db_collation;
|
||||
|
||||
$this->database_user=$user;
|
||||
$this->database_host=$host;
|
||||
$this->database_port=$port;
|
||||
|
||||
$this->transaction_opened=0;
|
||||
|
||||
|
||||
@@ -443,10 +443,11 @@ function dol_get_next_week($day, $week, $month, $year)
|
||||
* @param mixed $gm False or 0 or 'server' = Return date to compare with server TZ, True or 1 to compare with GM date.
|
||||
* Exemple: dol_get_first_day(1970,1,false) will return -3600 with TZ+1, after a dol_print_date will return 1970-01-01 00:00:00
|
||||
* Exemple: dol_get_first_day(1970,1,true) will return 0 whatever is TZ, after a dol_print_date will return 1970-01-01 00:00:00
|
||||
* @return int Date for first day
|
||||
* @return int Date for first day, '' if error
|
||||
*/
|
||||
function dol_get_first_day($year,$month=1,$gm=false)
|
||||
{
|
||||
if ($year > 9999) return '';
|
||||
return dol_mktime(0,0,0,$month,1,$year,$gm);
|
||||
}
|
||||
|
||||
@@ -456,10 +457,11 @@ function dol_get_first_day($year,$month=1,$gm=false)
|
||||
* @param int $year Year
|
||||
* @param int $month Month
|
||||
* @param boolean $gm False or 0 or 'server' = Return date to compare with server TZ, True or 1 to compare with GM date.
|
||||
* @return int Date for first day
|
||||
* @return int Date for first day, '' if error
|
||||
*/
|
||||
function dol_get_last_day($year,$month=12,$gm=false)
|
||||
{
|
||||
if ($year > 9999) return '';
|
||||
if ($month == 12)
|
||||
{
|
||||
$month = 1;
|
||||
|
||||
@@ -139,6 +139,7 @@ function dol_dir_list($path, $types="all", $recursive=0, $filter="", $excludefil
|
||||
$level1name=(isset($reg[1])?$reg[1]:'');
|
||||
$file_list[] = array(
|
||||
"name" => $file,
|
||||
"path" => $path,
|
||||
"level1name" => $level1name,
|
||||
"fullname" => $path.'/'.$file,
|
||||
"date" => $filedate,
|
||||
@@ -166,6 +167,7 @@ function dol_dir_list($path, $types="all", $recursive=0, $filter="", $excludefil
|
||||
$level1name=(isset($reg[1])?$reg[1]:'');
|
||||
$file_list[] = array(
|
||||
"name" => $file,
|
||||
"path" => $path,
|
||||
"level1name" => $level1name,
|
||||
"fullname" => $path.'/'.$file,
|
||||
"date" => $filedate,
|
||||
|
||||
@@ -175,7 +175,7 @@ function dol_shutdown()
|
||||
* @param int $method Type of method (0 = get then post, 1 = only get, 2 = only post, 3 = post then get, 4 = post then get then cookie)
|
||||
* @param int $filter Filter to apply when $check is set to custom. (See http://php.net/manual/en/filter.filters.php for détails)
|
||||
* @param mixed $options Options to pass to filter_var when $check is set to custom
|
||||
* @return string||string[] Value found, or '' if check fails
|
||||
* @return string||string[] Value found (string or array), or '' if check fails
|
||||
*/
|
||||
function GETPOST($paramname,$check='',$method=0,$filter=NULL,$options=NULL)
|
||||
{
|
||||
@@ -4559,6 +4559,8 @@ function picto_from_langcode($codelang)
|
||||
{
|
||||
global $langs;
|
||||
|
||||
if (empty($codelang)) return '';
|
||||
|
||||
if ($codelang == 'auto')
|
||||
{
|
||||
return img_picto_common($langs->trans('AutoDetectLang'), 'flags/int.png');
|
||||
|
||||
@@ -1341,6 +1341,7 @@ function getListOfModels($db,$type,$maxfilenamelength=0)
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."document_model";
|
||||
$sql.= " WHERE type = '".$type."'";
|
||||
$sql.= " AND entity IN (0,".(! empty($conf->multicompany->enabled) && ! empty($conf->multicompany->transverse_mode)?"1,":"").$conf->entity.")";
|
||||
$sql.= " ORDER BY description DESC";
|
||||
|
||||
dol_syslog('/core/lib/function2.lib.php::getListOfModels', LOG_DEBUG);
|
||||
$resql = $db->query($sql);
|
||||
|
||||
@@ -79,7 +79,7 @@ function facture_prepare_head($object)
|
||||
if(!empty($object->note_public)) $nbNote++;
|
||||
$head[$h][0] = DOL_URL_ROOT.'/compta/facture/note.php?facid='.$object->id;
|
||||
$head[$h][1] = $langs->trans('Notes');
|
||||
if ($nbNote > 0) $head[$h][1].= ' ('.$nbNote.')';
|
||||
if ($nbNote > 0) $head[$h][1].= ' <span class="badge">'.$nbNote.'</span>';
|
||||
$head[$h][2] = 'note';
|
||||
$h++;
|
||||
}
|
||||
@@ -89,7 +89,7 @@ function facture_prepare_head($object)
|
||||
$nbFiles = count(dol_dir_list($upload_dir,'files',0,'','(\.meta|_preview\.png)$'));
|
||||
$head[$h][0] = DOL_URL_ROOT.'/compta/facture/document.php?facid='.$object->id;
|
||||
$head[$h][1] = $langs->trans('Documents');
|
||||
if($nbFiles > 0) $head[$h][1].= ' ('.$nbFiles.')';
|
||||
if($nbFiles > 0) $head[$h][1].= ' <span class="badge">'.$nbFiles.'</span>';
|
||||
$head[$h][2] = 'documents';
|
||||
$h++;
|
||||
|
||||
|
||||
@@ -98,8 +98,10 @@ class modCommande extends DolibarrModules
|
||||
$this->const[$r][4] = 0;
|
||||
|
||||
// Boxes
|
||||
$this->boxes = array();
|
||||
$this->boxes = array(0=>array('file'=>'box_commandes.php','enabledbydefaulton'=>'Home'),2=>array('file'=>'box_graph_orders_permonth.php','enabledbydefaulton'=>'Home'));
|
||||
$this->boxes = array(
|
||||
0=>array('file'=>'box_commandes.php','enabledbydefaulton'=>'Home'),
|
||||
2=>array('file'=>'box_graph_orders_permonth.php','enabledbydefaulton'=>'Home')
|
||||
);
|
||||
|
||||
// Permissions
|
||||
$this->rights = array();
|
||||
|
||||
@@ -78,25 +78,31 @@ class modDeplacement extends DolibarrModules
|
||||
$this->rights_class = 'deplacement';
|
||||
|
||||
$this->rights[1][0] = 171;
|
||||
$this->rights[1][1] = 'Lire les deplacements';
|
||||
$this->rights[1][1] = 'Lire ses notes de frais et deplacements et celles de sa hierarchy';
|
||||
$this->rights[1][2] = 'r';
|
||||
$this->rights[1][3] = 1;
|
||||
$this->rights[1][4] = 'lire';
|
||||
|
||||
$this->rights[2][0] = 172;
|
||||
$this->rights[2][1] = 'Creer/modifier les deplacements';
|
||||
$this->rights[2][1] = 'Creer/modifier une note de frais et deplacements';
|
||||
$this->rights[2][2] = 'w';
|
||||
$this->rights[2][3] = 0;
|
||||
$this->rights[2][4] = 'creer';
|
||||
|
||||
$this->rights[3][0] = 173;
|
||||
$this->rights[3][1] = 'Supprimer les deplacements';
|
||||
$this->rights[3][1] = 'Supprimer les notes de frais et deplacements';
|
||||
$this->rights[3][2] = 'd';
|
||||
$this->rights[3][3] = 0;
|
||||
$this->rights[3][4] = 'supprimer';
|
||||
|
||||
$this->rights[3][0] = 174;
|
||||
$this->rights[3][1] = 'Lire toutes les notes de frais';
|
||||
$this->rights[3][2] = 'd';
|
||||
$this->rights[3][3] = 0;
|
||||
$this->rights[3][4] = 'readall';
|
||||
|
||||
$this->rights[6][0] = 178;
|
||||
$this->rights[6][1] = 'Exporter les deplacements';
|
||||
$this->rights[6][1] = 'Exporter les notes de frais et deplacements';
|
||||
$this->rights[6][2] = 'd';
|
||||
$this->rights[6][3] = 0;
|
||||
$this->rights[6][4] = 'export';
|
||||
|
||||
@@ -106,8 +106,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
|
||||
$langs->load("contracts");
|
||||
|
||||
$object->actiontypecode='AC_OTH_AUTO';
|
||||
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("ContractValidatedInDolibarr",$object->ref);
|
||||
$object->actionmsg=$langs->transnoentities("ContractValidatedInDolibarr",$object->ref);
|
||||
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("ContractValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
|
||||
$object->actionmsg=$langs->transnoentities("ContractValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
|
||||
$object->actionmsg.="\n".$langs->transnoentities("Author").': '.$user->login;
|
||||
|
||||
$object->sendtoid=0;
|
||||
@@ -117,8 +117,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
|
||||
$langs->load("propal");
|
||||
|
||||
$object->actiontypecode='AC_OTH_AUTO';
|
||||
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("PropalValidatedInDolibarr",$object->ref);
|
||||
$object->actionmsg=$langs->transnoentities("PropalValidatedInDolibarr",$object->ref);
|
||||
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("PropalValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
|
||||
$object->actionmsg=$langs->transnoentities("PropalValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
|
||||
$object->actionmsg.="\n".$langs->transnoentities("Author").': '.$user->login;
|
||||
|
||||
$object->sendtoid=0;
|
||||
@@ -165,8 +165,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
|
||||
$langs->load("orders");
|
||||
|
||||
$object->actiontypecode='AC_OTH_AUTO';
|
||||
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("OrderValidatedInDolibarr",$object->ref);
|
||||
$object->actionmsg=$langs->transnoentities("OrderValidatedInDolibarr",$object->ref);
|
||||
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("OrderValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
|
||||
$object->actionmsg=$langs->transnoentities("OrderValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
|
||||
$object->actionmsg.="\n".$langs->transnoentities("Author").': '.$user->login;
|
||||
|
||||
$object->sendtoid=0;
|
||||
@@ -192,8 +192,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
|
||||
$langs->load("bills");
|
||||
|
||||
$object->actiontypecode='AC_OTH_AUTO';
|
||||
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InvoiceValidatedInDolibarr",$object->ref);
|
||||
$object->actionmsg=$langs->transnoentities("InvoiceValidatedInDolibarr",$object->ref);
|
||||
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InvoiceValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
|
||||
$object->actionmsg=$langs->transnoentities("InvoiceValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
|
||||
$object->actionmsg.="\n".$langs->transnoentities("Author").': '.$user->login;
|
||||
|
||||
$object->sendtoid=0;
|
||||
@@ -271,8 +271,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
|
||||
$langs->load("interventions");
|
||||
|
||||
$object->actiontypecode='AC_OTH_AUTO';
|
||||
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InterventionValidatedInDolibarr",$object->ref);
|
||||
$object->actionmsg=$langs->transnoentities("InterventionValidatedInDolibarr",$object->ref);
|
||||
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InterventionValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
|
||||
$object->actionmsg=$langs->transnoentities("InterventionValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
|
||||
$object->actionmsg.="\n".$langs->transnoentities("Author").': '.$user->login;
|
||||
|
||||
$object->sendtoid=0;
|
||||
@@ -337,10 +337,10 @@ class InterfaceActionsAuto extends DolibarrTriggers
|
||||
$langs->load("sendings");
|
||||
|
||||
$object->actiontypecode='AC_OTH_AUTO';
|
||||
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("ShippingValidated",$object->ref);
|
||||
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("ShippingValidated",($object->newref?$object->newref:$object->ref));
|
||||
if (empty($object->actionmsg))
|
||||
{
|
||||
$object->actionmsg=$langs->transnoentities("ShippingValidated",$object->ref);
|
||||
$object->actionmsg=$langs->transnoentities("ShippingValidated",($object->newref?$object->newref:$object->ref));
|
||||
$object->actionmsg.="\n".$langs->transnoentities("Author").': '.$user->login;
|
||||
}
|
||||
|
||||
@@ -368,8 +368,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
|
||||
$langs->load("orders");
|
||||
|
||||
$object->actiontypecode='AC_OTH_AUTO';
|
||||
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("OrderValidatedInDolibarr",$object->ref);
|
||||
$object->actionmsg=$langs->transnoentities("OrderValidatedInDolibarr",$object->ref);
|
||||
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("OrderValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
|
||||
$object->actionmsg=$langs->transnoentities("OrderValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
|
||||
$object->actionmsg.="\n".$langs->transnoentities("Author").': '.$user->login;
|
||||
|
||||
$object->sendtoid=0;
|
||||
@@ -419,8 +419,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
|
||||
$langs->load("bills");
|
||||
|
||||
$object->actiontypecode='AC_OTH_AUTO';
|
||||
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InvoiceValidatedInDolibarr",$object->ref);
|
||||
$object->actionmsg=$langs->transnoentities("InvoiceValidatedInDolibarr",$object->ref);
|
||||
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InvoiceValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
|
||||
$object->actionmsg=$langs->transnoentities("InvoiceValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
|
||||
$object->actionmsg.="\n".$langs->transnoentities("Author").': '.$user->login;
|
||||
|
||||
$object->sendtoid=0;
|
||||
@@ -474,8 +474,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
|
||||
$langs->load("members");
|
||||
|
||||
$object->actiontypecode='AC_OTH_AUTO';
|
||||
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("MemberValidatedInDolibarr",$object->ref);
|
||||
$object->actionmsg=$langs->transnoentities("MemberValidatedInDolibarr",$object->ref);
|
||||
if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("MemberValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
|
||||
$object->actionmsg=$langs->transnoentities("MemberValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
|
||||
$object->actionmsg.="\n".$langs->transnoentities("Member").': '.$object->getFullName($langs);
|
||||
$object->actionmsg.="\n".$langs->transnoentities("Type").': '.$object->type;
|
||||
$object->actionmsg.="\n".$langs->transnoentities("Author").': '.$user->login;
|
||||
|
||||
@@ -60,70 +60,12 @@ class InterfaceNotification extends DolibarrTriggers
|
||||
{
|
||||
if (empty($conf->notification->enabled)) return 0; // Module not active, we do nothing
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT .'/core/class/notify.class.php';
|
||||
|
||||
$langs->load("other");
|
||||
|
||||
switch ($action) {
|
||||
case 'BILL_VALIDATE':
|
||||
$dir_output = $conf->facture->dir_output;
|
||||
$object_type = 'facture';
|
||||
$mesg = $langs->transnoentitiesnoconv("EMailTextInvoiceValidated",$object->ref);
|
||||
break;
|
||||
case 'ORDER_VALIDATE':
|
||||
$dir_output = $conf->commande->dir_output;
|
||||
$object_type = 'order';
|
||||
$mesg = $langs->transnoentitiesnoconv("EMailTextOrderValidated",$object->ref);
|
||||
break;
|
||||
case 'PROPAL_VALIDATE':
|
||||
$dir_output = $conf->propal->dir_output;
|
||||
$object_type = 'propal';
|
||||
$mesg = $langs->transnoentitiesnoconv("EMailTextProposalValidated",$object->ref);
|
||||
break;
|
||||
case 'FICHINTER_VALIDATE':
|
||||
$dir_output = $conf->facture->dir_output;
|
||||
$object_type = 'ficheinter';
|
||||
$mesg = $langs->transnoentitiesnoconv("EMailTextInterventionValidated",$object->ref);
|
||||
break;
|
||||
case 'ORDER_SUPPLIER_APPROVE':
|
||||
$dir_output = $conf->fournisseur->dir_output.'/commande/';
|
||||
$object_type = 'order_supplier';
|
||||
$mesg = $langs->transnoentitiesnoconv("Hello").",\n\n";
|
||||
$mesg.= $langs->transnoentitiesnoconv("EMailTextOrderApprovedBy",$object->ref,$user->getFullName($langs));
|
||||
$mesg.= "\n\n".$langs->transnoentitiesnoconv("Sincerely").".\n\n";
|
||||
break;
|
||||
case 'ORDER_SUPPLIER_REFUSE':
|
||||
$dir_output = $conf->fournisseur->dir_output.'/commande/';
|
||||
$object_type = 'order_supplier';
|
||||
$mesg = $langs->transnoentitiesnoconv("Hello").",\n\n";
|
||||
$mesg.= $langs->transnoentitiesnoconv("EMailTextOrderRefusedBy",$object->ref,$user->getFullName($langs));
|
||||
$mesg.= "\n\n".$langs->transnoentitiesnoconv("Sincerely").".\n\n";
|
||||
break;
|
||||
case 'SHIPPING_VALIDATE':
|
||||
$dir_output = $conf->expedition->dir_output.'/sending/';
|
||||
$object_type = 'order_supplier';
|
||||
$mesg = $langs->transnoentitiesnoconv("EMailTextExpeditionValidated",$object->ref);
|
||||
break;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
|
||||
|
||||
$ref = dol_sanitizeFileName($object->ref);
|
||||
$pdf_path = "$dir_output/$ref/$ref.pdf";
|
||||
|
||||
if (!file_exists($pdf_path)) {
|
||||
// We can't add PDF as it is not generated yet.
|
||||
$filepdf = '';
|
||||
} else {
|
||||
$filepdf = $pdf_path;
|
||||
}
|
||||
require_once DOL_DOCUMENT_ROOT .'/core/class/notify.class.php';
|
||||
|
||||
$notify = new Notify($this->db);
|
||||
$notify->send($action, $object->socid, $mesg, $object_type, $object->id, $filepdf);
|
||||
$notify->send($action, $object);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -250,26 +250,25 @@ else if ($action == 'confirm_valid' && $confirm == 'yes' && $user->rights->exped
|
||||
}
|
||||
else
|
||||
{
|
||||
// Define output language
|
||||
$outputlangs = $langs;
|
||||
$newlang='';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang=GETPOST('lang_id','alpha');
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang;
|
||||
if (! empty($newlang))
|
||||
{
|
||||
$outputlangs = new Translate("",$conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
$ret=$object->fetch($id); // Reload to get new records
|
||||
$result = $object->generateDocument($object->modelpdf, $outputlangs);
|
||||
}
|
||||
if ($result < 0)
|
||||
{
|
||||
dol_print_error($db,$result);
|
||||
exit;
|
||||
}
|
||||
// Define output language
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
$outputlangs = $langs;
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang = GETPOST('lang_id','alpha');
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang;
|
||||
if (! empty($newlang)) {
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
$model=$object->modelpdf;
|
||||
if (empty($model)) {
|
||||
$tmp=getListOfModels($db, 'shipping'); $keys=array_keys($tmp); $model=$keys[0];
|
||||
}
|
||||
$ret = $object->fetch($id); // Reload to get new records
|
||||
$result=$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
if ($result < 0) dol_print_error($db,$result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -503,9 +503,10 @@ class Expedition extends CommonObject
|
||||
* Validate object and update stock if option enabled
|
||||
*
|
||||
* @param User $user Object user that validate
|
||||
* @param int $notrigger 1=Does not execute triggers, 0= execuete triggers
|
||||
* @return int <0 if OK, >0 if KO
|
||||
*/
|
||||
function valid($user)
|
||||
function valid($user, $notrigger=0)
|
||||
{
|
||||
global $conf, $langs;
|
||||
|
||||
@@ -547,6 +548,7 @@ class Expedition extends CommonObject
|
||||
{
|
||||
$numref = "EXP".$this->id;
|
||||
}
|
||||
$this->newref = $numref;
|
||||
|
||||
$now=dol_now();
|
||||
|
||||
@@ -617,9 +619,17 @@ class Expedition extends CommonObject
|
||||
}
|
||||
}
|
||||
|
||||
if (! $error && ! $notrigger)
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('SHIPPING_VALIDATE',$user);
|
||||
if ($result < 0) { $error++; }
|
||||
// End call triggers
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$this->oldref='';
|
||||
$this->oldref = $this->ref;
|
||||
|
||||
// Rename directory if dir was a temporary ref
|
||||
if (preg_match('/^[\(]?PROV/i', $this->ref))
|
||||
@@ -636,11 +646,17 @@ class Expedition extends CommonObject
|
||||
|
||||
if (@rename($dirsource, $dirdest))
|
||||
{
|
||||
$this->oldref = $oldref;
|
||||
|
||||
dol_syslog("Rename ok");
|
||||
// Suppression ancien fichier PDF dans nouveau rep
|
||||
dol_delete_file($dirdest.'/'.$oldref.'*.*');
|
||||
dol_syslog("Rename ok");
|
||||
// Rename docs starting with $oldref with $newref
|
||||
$listoffiles=dol_dir_list($conf->expedition->dir_output.'/sending/'.$newref, 'files', 1, '^'.preg_quote($oldref,'/'));
|
||||
foreach($listoffiles as $fileentry)
|
||||
{
|
||||
$dirsource=$fileentry['name'];
|
||||
$dirdest=preg_replace('/^'.preg_quote($oldref,'/').'/',$newref, $dirsource);
|
||||
$dirsource=$fileentry['path'].'/'.$dirsource;
|
||||
$dirdest=$fileentry['path'].'/'.$dirdest;
|
||||
@rename($dirsource, $dirdest);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -653,14 +669,6 @@ class Expedition extends CommonObject
|
||||
$this->statut = 1;
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('SHIPPING_VALIDATE',$user);
|
||||
if ($result < 0) { $error++; }
|
||||
// End call triggers
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$this->db->commit();
|
||||
|
||||
@@ -374,9 +374,10 @@ class Fichinter extends CommonObject
|
||||
* Validate a intervention
|
||||
*
|
||||
* @param User $user User that validate
|
||||
* @return int <0 if KO, >0 if OK
|
||||
* @param int $notrigger 1=Does not execute triggers, 0= execuete triggers
|
||||
* @return int <0 if KO, >0 if OK
|
||||
*/
|
||||
function setValid($user)
|
||||
function setValid($user, $notrigger=0)
|
||||
{
|
||||
global $conf;
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
@@ -398,6 +399,7 @@ class Fichinter extends CommonObject
|
||||
{
|
||||
$num = $this->ref;
|
||||
}
|
||||
$this->newref = $num;
|
||||
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."fichinter";
|
||||
$sql.= " SET fk_statut = 1";
|
||||
@@ -416,9 +418,17 @@ class Fichinter extends CommonObject
|
||||
$error++;
|
||||
}
|
||||
|
||||
if (! $error && ! $notrigger)
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('FICHINTER_VALIDATE',$user);
|
||||
if ($result < 0) { $error++; }
|
||||
// End call triggers
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$this->oldref = '';
|
||||
$this->oldref = $this->ref;
|
||||
|
||||
// Rename directory if dir was a temporary ref
|
||||
if (preg_match('/^[\(]?PROV/i', $this->ref))
|
||||
@@ -426,20 +436,26 @@ class Fichinter extends CommonObject
|
||||
// Rename of object directory ($this->ref = old ref, $num = new ref)
|
||||
// to not lose the linked files
|
||||
$oldref = dol_sanitizeFileName($this->ref);
|
||||
$snum = dol_sanitizeFileName($num);
|
||||
$newref = dol_sanitizeFileName($num);
|
||||
$dirsource = $conf->ficheinter->dir_output.'/'.$oldref;
|
||||
$dirdest = $conf->ficheinter->dir_output.'/'.$snum;
|
||||
$dirdest = $conf->ficheinter->dir_output.'/'.$newref;
|
||||
if (file_exists($dirsource))
|
||||
{
|
||||
dol_syslog(get_class($this)."::validate rename dir ".$dirsource." into ".$dirdest);
|
||||
dol_syslog(get_class($this)."::setValid rename dir ".$dirsource." into ".$dirdest);
|
||||
|
||||
if (@rename($dirsource, $dirdest))
|
||||
{
|
||||
$this->oldref = $oldref;
|
||||
|
||||
dol_syslog("Rename ok");
|
||||
// Suppression ancien fichier PDF dans nouveau rep
|
||||
dol_delete_file($conf->ficheinter->dir_output.'/'.$snum.'/'.$oldref.'*.*');
|
||||
dol_syslog("Rename ok");
|
||||
// Rename docs starting with $oldref with $newref
|
||||
$listoffiles=dol_dir_list($conf->ficheinter->dir_output.'/'.$newref, 'files', 1, '^'.preg_quote($oldref,'/'));
|
||||
foreach($listoffiles as $fileentry)
|
||||
{
|
||||
$dirsource=$fileentry['name'];
|
||||
$dirdest=preg_replace('/^'.preg_quote($oldref,'/').'/',$newref, $dirsource);
|
||||
$dirsource=$fileentry['path'].'/'.$dirsource;
|
||||
$dirdest=$fileentry['path'].'/'.$dirdest;
|
||||
@rename($dirsource, $dirdest);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -454,14 +470,6 @@ class Fichinter extends CommonObject
|
||||
$this->date_validation=$now;
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('FICHINTER_VALIDATE',$user);
|
||||
if ($result < 0) { $error++; }
|
||||
// End call triggers
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$this->db->commit();
|
||||
|
||||
@@ -317,9 +317,10 @@ class CommandeFournisseur extends CommonOrder
|
||||
*
|
||||
* @param User $user Validator User
|
||||
* @param int $idwarehouse Id of warehouse to use for stock decrease
|
||||
* @param int $notrigger 1=Does not execute triggers, 0= execuete triggers
|
||||
* @return int <0 if KO, >0 if OK
|
||||
*/
|
||||
function valid($user,$idwarehouse=0)
|
||||
function valid($user,$idwarehouse=0,$notrigger=0)
|
||||
{
|
||||
global $langs,$conf;
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
@@ -342,12 +343,13 @@ class CommandeFournisseur extends CommonOrder
|
||||
$num = $this->getNextNumRef($soc);
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
$num = $this->ref;
|
||||
}
|
||||
$this->newref = $num;
|
||||
|
||||
$sql = 'UPDATE '.MAIN_DB_PREFIX."commande_fournisseur";
|
||||
$sql.= " SET ref='".$num."',";
|
||||
$sql.= " SET ref='".$this->db->escape($num)."',";
|
||||
$sql.= " fk_statut = 1,";
|
||||
$sql.= " date_valid='".$this->db->idate(dol_now())."',";
|
||||
$sql.= " fk_user_valid = ".$user->id;
|
||||
@@ -361,9 +363,17 @@ class CommandeFournisseur extends CommonOrder
|
||||
$error++;
|
||||
}
|
||||
|
||||
if (! $error && ! $notrigger)
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('ORDER_SUPPLIER_VALIDATE',$user);
|
||||
if ($result < 0) $error++;
|
||||
// End call triggers
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$this->oldref='';
|
||||
$this->oldref = $this->ref;
|
||||
|
||||
// Rename directory if dir was a temporary ref
|
||||
if (preg_match('/^[\(]?PROV/i', $this->ref))
|
||||
@@ -380,11 +390,17 @@ class CommandeFournisseur extends CommonOrder
|
||||
|
||||
if (@rename($dirsource, $dirdest))
|
||||
{
|
||||
$this->oldref = $oldref;
|
||||
|
||||
dol_syslog("Rename ok");
|
||||
// Suppression ancien fichier PDF dans nouveau rep
|
||||
dol_delete_file($dirdest.'/'.$oldref.'*.*');
|
||||
// Rename docs starting with $oldref with $newref
|
||||
$listoffiles=dol_dir_list($conf->fournisseur->dir_output.'/commande/'.$newref, 'files', 1, '^'.preg_quote($oldref,'/'));
|
||||
foreach($listoffiles as $fileentry)
|
||||
{
|
||||
$dirsource=$fileentry['name'];
|
||||
$dirdest=preg_replace('/^'.preg_quote($oldref,'/').'/',$newref, $dirsource);
|
||||
$dirsource=$fileentry['path'].'/'.$dirsource;
|
||||
$dirdest=$fileentry['path'].'/'.$dirdest;
|
||||
@rename($dirsource, $dirdest);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -397,18 +413,6 @@ class CommandeFournisseur extends CommonOrder
|
||||
$this->ref = $num;
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('ORDER_SUPPLIER_VALIDATE',$user);
|
||||
if ($result < 0)
|
||||
{
|
||||
$this->db->rollback();
|
||||
return -1;
|
||||
}
|
||||
// End call triggers
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$this->db->commit();
|
||||
@@ -619,9 +623,10 @@ class CommandeFournisseur extends CommonOrder
|
||||
$num = $this->getNextNumRef($soc);
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
$num = $this->ref;
|
||||
}
|
||||
$this->newref = $num;
|
||||
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur";
|
||||
$sql.= " SET ref='".$this->db->escape($num)."',";
|
||||
|
||||
@@ -257,7 +257,7 @@ class FactureFournisseur extends CommonInvoice
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('BILL_SUPPLIER_CREATE',$user);
|
||||
if ($result < 0) $error++;
|
||||
if ($result < 0) $error++;
|
||||
// End call triggers
|
||||
|
||||
if (! $error)
|
||||
@@ -413,7 +413,7 @@ class FactureFournisseur extends CommonInvoice
|
||||
|
||||
$this->socid = $obj->socid;
|
||||
$this->socnom = $obj->socnom;
|
||||
|
||||
|
||||
// Retreive all extrafield
|
||||
// fetch optionals attributes and labels
|
||||
require_once(DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php');
|
||||
@@ -611,7 +611,7 @@ class FactureFournisseur extends CommonInvoice
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('BILL_SUPPLIER_UPDATE',$user);
|
||||
if ($result < 0) $error++;
|
||||
if ($result < 0) $error++;
|
||||
// End call triggers
|
||||
}
|
||||
}
|
||||
@@ -682,9 +682,9 @@ class FactureFournisseur extends CommonInvoice
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('BILL_SUPPLIER_DELETE',$user);
|
||||
if ($result < 0)
|
||||
{
|
||||
{
|
||||
$this->db->rollback();
|
||||
return -1;
|
||||
return -1;
|
||||
}
|
||||
// Fin appel triggers
|
||||
}
|
||||
@@ -776,7 +776,7 @@ class FactureFournisseur extends CommonInvoice
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('BILL_SUPPLIER_PAYED',$user);
|
||||
if ($result < 0) $error++;
|
||||
if ($result < 0) $error++;
|
||||
// End call triggers
|
||||
}
|
||||
else
|
||||
@@ -824,7 +824,7 @@ class FactureFournisseur extends CommonInvoice
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('BILL_SUPPLIER_UNPAYED',$user);
|
||||
if ($result < 0) $error++;
|
||||
if ($result < 0) $error++;
|
||||
// End call triggers
|
||||
}
|
||||
else
|
||||
@@ -852,9 +852,10 @@ class FactureFournisseur extends CommonInvoice
|
||||
* @param User $user Object user that validate
|
||||
* @param string $force_number Reference to force on invoice
|
||||
* @param int $idwarehouse Id of warehouse for stock change
|
||||
* @param int $notrigger 1=Does not execute triggers, 0= execuete triggers
|
||||
* @return int <0 if KO, =0 if nothing to do, >0 if OK
|
||||
*/
|
||||
function validate($user, $force_number='', $idwarehouse=0)
|
||||
function validate($user, $force_number='', $idwarehouse=0, $notrigger=0)
|
||||
{
|
||||
global $conf,$langs;
|
||||
|
||||
@@ -886,9 +887,10 @@ class FactureFournisseur extends CommonInvoice
|
||||
$num = $this->getNextNumRef($this->client);
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
$num = $this->ref;
|
||||
}
|
||||
$this->newref = $num;
|
||||
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."facture_fourn";
|
||||
$sql.= " SET ref='".$num."', fk_statut = 1, fk_user_valid = ".$user->id;
|
||||
@@ -920,31 +922,46 @@ class FactureFournisseur extends CommonInvoice
|
||||
}
|
||||
}
|
||||
|
||||
// Triggers call
|
||||
if (! $error && $notrigger)
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('BILL_SUPPLIER_VALIDATE',$user);
|
||||
if ($result < 0) $error++;
|
||||
// End call triggers
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$this->oldref = '';
|
||||
$this->oldref = $this->ref;
|
||||
|
||||
// Rename directory if dir was a temporary ref
|
||||
if (preg_match('/^[\(]?PROV/i', $this->ref))
|
||||
{
|
||||
// On renomme repertoire facture ($this->ref = ancienne ref, $num = nouvelle ref)
|
||||
// in order not to lose the attached files
|
||||
$facref = dol_sanitizeFileName($this->ref);
|
||||
$snumfa = dol_sanitizeFileName($num);
|
||||
$oldref = dol_sanitizeFileName($this->ref);
|
||||
$newref = dol_sanitizeFileName($num);
|
||||
|
||||
$dirsource = $conf->fournisseur->facture->dir_output.'/'.get_exdir($this->id,2).$facref;
|
||||
$dirdest = $conf->fournisseur->facture->dir_output.'/'.get_exdir($this->id,2).$snumfa;
|
||||
$dirsource = $conf->fournisseur->facture->dir_output.'/'.get_exdir($this->id,2).$oldref;
|
||||
$dirdest = $conf->fournisseur->facture->dir_output.'/'.get_exdir($this->id,2).$newref;
|
||||
if (file_exists($dirsource))
|
||||
{
|
||||
dol_syslog(get_class($this)."::validate rename dir ".$dirsource." into ".$dirdest);
|
||||
|
||||
if (@rename($dirsource, $dirdest))
|
||||
{
|
||||
$this->oldref = $facref;
|
||||
|
||||
dol_syslog("Rename ok");
|
||||
// Suppression ancien fichier PDF dans nouveau rep
|
||||
dol_delete_file($conf->fournisseur->facture->dir_output.'/'.get_exdir($this->id,2).$snumfa.'/'.$facref.'*.*');
|
||||
// Rename docs starting with $oldref with $newref
|
||||
$listoffiles=dol_dir_list($conf->fournisseur->facture->dir_output.'/'.get_exdir($this->id,2).$newref, 'files', 1, '^'.preg_quote($oldref,'/'));
|
||||
foreach($listoffiles as $fileentry)
|
||||
{
|
||||
$dirsource=$fileentry['name'];
|
||||
$dirdest=preg_replace('/^'.preg_quote($oldref,'/').'/',$newref, $dirsource);
|
||||
$dirsource=$fileentry['path'].'/'.$dirsource;
|
||||
$dirdest=$fileentry['path'].'/'.$dirdest;
|
||||
@rename($dirsource, $dirdest);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -958,15 +975,6 @@ class FactureFournisseur extends CommonInvoice
|
||||
//$this->date_validation=$now; this is stored into log table
|
||||
}
|
||||
|
||||
// Triggers call
|
||||
if (! $error)
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('BILL_SUPPLIER_VALIDATE',$user);
|
||||
if ($result < 0) $error++;
|
||||
// End call triggers
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$this->db->commit();
|
||||
@@ -1128,8 +1136,8 @@ class FactureFournisseur extends CommonInvoice
|
||||
global $conf, $langs, $user;
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('LINEBILL_SUPPLIER_CREATE',$user);
|
||||
if ($result < 0)
|
||||
{
|
||||
if ($result < 0)
|
||||
{
|
||||
$this->db->rollback();
|
||||
return -1;
|
||||
}
|
||||
@@ -1224,7 +1232,7 @@ class FactureFournisseur extends CommonInvoice
|
||||
}
|
||||
|
||||
$this->db->begin();
|
||||
|
||||
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."facture_fourn_det SET";
|
||||
$sql.= " description ='".$this->db->escape($desc)."'";
|
||||
$sql.= ", pu_ht = ".price2num($pu_ht);
|
||||
@@ -1258,8 +1266,8 @@ class FactureFournisseur extends CommonInvoice
|
||||
global $conf, $langs, $user;
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('LINEBILL_SUPPLIER_UPDATE',$user);
|
||||
if ($result < 0)
|
||||
{
|
||||
if ($result < 0)
|
||||
{
|
||||
$this->db->rollback();
|
||||
return -1;
|
||||
}
|
||||
@@ -1270,7 +1278,7 @@ class FactureFournisseur extends CommonInvoice
|
||||
$result=$this->update_price('','auto');
|
||||
|
||||
$this->db->commit();
|
||||
|
||||
|
||||
return $result;
|
||||
}
|
||||
else
|
||||
@@ -1303,7 +1311,7 @@ class FactureFournisseur extends CommonInvoice
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('LINEBILL_SUPPLIER_DELETE',$user);
|
||||
if ($result < 0) $error++;
|
||||
if ($result < 0) $error++;
|
||||
// End call triggers
|
||||
}
|
||||
|
||||
|
||||
@@ -341,19 +341,24 @@ else if ($action == 'addline' && $user->rights->fournisseur->commande->creer)
|
||||
{
|
||||
$ret=$object->fetch($object->id); // Reload to get new records
|
||||
|
||||
// Define output language
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
// Define output language
|
||||
$outputlangs = $langs;
|
||||
$newlang=GETPOST('lang_id','alpha');
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang;
|
||||
if (! empty($newlang))
|
||||
{
|
||||
$outputlangs = new Translate("",$conf);
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang = GETPOST('lang_id','alpha');
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang;
|
||||
if (! empty($newlang)) {
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
|
||||
$object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
$model=$object->modelpdf;
|
||||
if (empty($model)) {
|
||||
$tmp=getListOfModels($db, 'order_supplier'); $keys=array_keys($tmp); $model=$keys[0];
|
||||
}
|
||||
$ret = $object->fetch($id); // Reload to get new records
|
||||
$result=$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
if ($result < 0) dol_print_error($db,$result);
|
||||
}
|
||||
|
||||
unset($_POST ['prod_entry_mode']);
|
||||
@@ -438,19 +443,28 @@ else if ($action == 'update_line' && $user->rights->fournisseur->commande->creer
|
||||
unset($_POST['date_end']);
|
||||
unset($localtax1_tx);
|
||||
unset($localtax2_tx);
|
||||
|
||||
if ($result >= 0)
|
||||
{
|
||||
$outputlangs = $langs;
|
||||
if (GETPOST('lang_id'))
|
||||
{
|
||||
$outputlangs = new Translate("",$conf);
|
||||
$outputlangs->setDefaultLang(GETPOST('lang_id'));
|
||||
}
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
$ret=$object->fetch($object->id); // Reload to get new records
|
||||
$object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
}
|
||||
// Define output language
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
$outputlangs = $langs;
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang = GETPOST('lang_id','alpha');
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang;
|
||||
if (! empty($newlang)) {
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
$model=$object->modelpdf;
|
||||
if (empty($model)) {
|
||||
$tmp=getListOfModels($db, 'order_supplier'); $keys=array_keys($tmp); $model=$keys[0];
|
||||
}
|
||||
$ret = $object->fetch($id); // Reload to get new records
|
||||
$result=$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
if ($result < 0) dol_print_error($db,$result);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -496,17 +510,25 @@ else if ($action == 'confirm_valid' && $confirm == 'yes' && $user->rights->fourn
|
||||
$result = $object->valid($user);
|
||||
if ($result >= 0)
|
||||
{
|
||||
$outputlangs = $langs;
|
||||
if (GETPOST('lang_id'))
|
||||
{
|
||||
$outputlangs = new Translate("",$conf);
|
||||
$outputlangs->setDefaultLang(GETPOST('lang_id'));
|
||||
}
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
$ret=$object->fetch($object->id); // Reload to get new records
|
||||
$object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
}
|
||||
// Define output language
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
$outputlangs = $langs;
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang = GETPOST('lang_id','alpha');
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang;
|
||||
if (! empty($newlang)) {
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
$model=$object->modelpdf;
|
||||
if (empty($model)) {
|
||||
$tmp=getListOfModels($db, 'order_supplier'); $keys=array_keys($tmp); $model=$keys[0];
|
||||
}
|
||||
$ret = $object->fetch($id); // Reload to get new records
|
||||
$result=$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
if ($result < 0) dol_print_error($db,$result);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1760,7 +1782,7 @@ elseif (! empty($object->id))
|
||||
if ($user->societe_id == 0 && $action != 'edit_line' && $action != 'delete')
|
||||
{
|
||||
print '<div class="tabsAction">';
|
||||
|
||||
|
||||
// Validate
|
||||
if ($object->statut == 0 && $num > 0)
|
||||
{
|
||||
@@ -1770,7 +1792,7 @@ elseif (! empty($object->id))
|
||||
print '>'.$langs->trans('Validate').'</a>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Modify
|
||||
if ($object->statut == 1)
|
||||
{
|
||||
@@ -1779,7 +1801,7 @@ elseif (! empty($object->id))
|
||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=reopen">'.$langs->trans("Modify").'</a>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Approve
|
||||
if ($object->statut == 1)
|
||||
{
|
||||
@@ -1794,7 +1816,7 @@ elseif (! empty($object->id))
|
||||
print '<a class="butActionRefused" href="#">'.$langs->trans("RefuseOrder").'</a>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Send
|
||||
if (in_array($object->statut, array(2, 3, 4, 5)))
|
||||
{
|
||||
@@ -1803,7 +1825,7 @@ elseif (! empty($object->id))
|
||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=presend&mode=init">'.$langs->trans('SendByMail').'</a>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Reopen
|
||||
if (in_array($object->statut, array(2, 5, 6, 7, 9)))
|
||||
{
|
||||
@@ -1812,7 +1834,7 @@ elseif (! empty($object->id))
|
||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=reopen">'.$langs->trans("ReOpen").'</a>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Create bill
|
||||
if (! empty($conf->fournisseur->enabled) && $object->statut >= 2) // 2 means accepted
|
||||
{
|
||||
@@ -1820,13 +1842,13 @@ elseif (! empty($object->id))
|
||||
{
|
||||
print '<a class="butAction" href="'.DOL_URL_ROOT.'/fourn/facture/card.php?action=create&origin='.$object->element.'&originid='.$object->id.'&socid='.$object->socid.'">'.$langs->trans("CreateBill").'</a>';
|
||||
}
|
||||
|
||||
|
||||
//if ($user->rights->fournisseur->commande->creer && $object->statut > 2)
|
||||
//{
|
||||
// print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=classifybilled">'.$langs->trans("ClassifyBilled").'</a>';
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
// Cancel
|
||||
if ($object->statut == 2)
|
||||
{
|
||||
@@ -1835,19 +1857,19 @@ elseif (! empty($object->id))
|
||||
print '<a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=cancel">'.$langs->trans("CancelOrder").'</a>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Clone
|
||||
if ($user->rights->fournisseur->commande->creer)
|
||||
{
|
||||
print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&socid='.$object->socid.'&action=clone&object=order">'.$langs->trans("ToClone").'</a>';
|
||||
}
|
||||
|
||||
|
||||
// Delete
|
||||
if ($user->rights->fournisseur->commande->supprimer)
|
||||
{
|
||||
print '<a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete">'.$langs->trans("Delete").'</a>';
|
||||
}
|
||||
|
||||
|
||||
print "</div>";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -693,24 +693,25 @@ elseif ($action == 'addline' && $user->rights->fournisseur->facture->creer)
|
||||
{
|
||||
$db->commit();
|
||||
|
||||
// Define output language
|
||||
$outputlangs = $langs;
|
||||
$newlang=GETPOST('lang_id','alpha');
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang;
|
||||
if (! empty($newlang))
|
||||
// Define output language
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
$outputlangs = new Translate("",$conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
$outputlangs = $langs;
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang = GETPOST('lang_id','alpha');
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang;
|
||||
if (! empty($newlang)) {
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
$model=$object->modelpdf;
|
||||
if (empty($model)) {
|
||||
$tmp=getListOfModels($db, 'invoice_supplier'); $keys=array_keys($tmp); $model=$keys[0];
|
||||
}
|
||||
$ret = $object->fetch($id); // Reload to get new records
|
||||
$result=$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
if ($result < 0) dol_print_error($db,$result);
|
||||
}
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
$result = $object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
if ($result <= 0)
|
||||
{
|
||||
dol_print_error($db,$result);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
unset($_POST ['prod_entry_mode']);
|
||||
|
||||
@@ -774,20 +775,25 @@ elseif ($action == 'edit' && $user->rights->fournisseur->facture->creer)
|
||||
{
|
||||
$object->set_draft($user);
|
||||
|
||||
$outputlangs = $langs;
|
||||
if (! empty($_REQUEST['lang_id']))
|
||||
{
|
||||
$outputlangs = new Translate("",$conf);
|
||||
$outputlangs->setDefaultLang($_REQUEST['lang_id']);
|
||||
}
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
|
||||
$result = $object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
if ($result <= 0)
|
||||
{
|
||||
dol_print_error($db,$result);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
// Define output language
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
$outputlangs = $langs;
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang = GETPOST('lang_id','alpha');
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang;
|
||||
if (! empty($newlang)) {
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
$model=$object->modelpdf;
|
||||
if (empty($model)) {
|
||||
$tmp=getListOfModels($db, 'invoice_supplier'); $keys=array_keys($tmp); $model=$keys[0];
|
||||
}
|
||||
$ret = $object->fetch($id); // Reload to get new records
|
||||
$result=$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
if ($result < 0) dol_print_error($db,$result);
|
||||
}
|
||||
|
||||
$action='';
|
||||
}
|
||||
@@ -2288,21 +2294,24 @@ else
|
||||
*/
|
||||
$somethingshown=$object->showLinkedObjectBlock();
|
||||
|
||||
$linktoelem='';
|
||||
|
||||
if (empty($somethingshown) && ! empty($conf->fournisseur->enabled))
|
||||
{
|
||||
print '<br><a href="#" id="linktoorder">' . $langs->trans('LinkedOrder') . '</a>';
|
||||
$linktoelem.=($linktoelem?' ':'').'<a href="#" id="linktoorder">' . $langs->trans('LinkedOrder') . '</a>';
|
||||
|
||||
print '
|
||||
<script type="text/javascript" language="javascript">
|
||||
jQuery(document).ready(function() {
|
||||
jQuery("#linktoorder").click(function() {
|
||||
jQuery("#commande").toggle();
|
||||
});
|
||||
jQuery("#orderlist").toggle();
|
||||
jQuery("#linktoorder").toggle();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
';
|
||||
|
||||
print '<div id="commande" style="display:none">';
|
||||
print '<div id="orderlist" style="display:none">';
|
||||
|
||||
$sql = "SELECT s.rowid as socid, s.nom as name, s.client, c.rowid, c.ref, c.ref_supplier, c.total_ht";
|
||||
$sql .= " FROM " . MAIN_DB_PREFIX . "societe as s";
|
||||
@@ -2314,7 +2323,7 @@ else
|
||||
$num = $db->num_rows($resqlorderlist);
|
||||
$i = 0;
|
||||
|
||||
print '<form action="" method="POST" name="LinkedOrder">';
|
||||
print '<br><form action="" method="POST" name="LinkedOrder">';
|
||||
print '<table class="noborder">';
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td class="nowrap"></td>';
|
||||
@@ -2341,7 +2350,7 @@ else
|
||||
$i ++;
|
||||
}
|
||||
print '</table>';
|
||||
print '<br><center><input type="submit" class="button" value="' . $langs->trans('ToLink') . '"></center>';
|
||||
print '<br><center><input type="submit" class="button" value="' . $langs->trans('ToLink') . '"> <input type="submit" class="button" name="cancel" value="' . $langs->trans('Cancel') . '"></center>';
|
||||
print '</form>';
|
||||
$db->free($resqlorderlist);
|
||||
} else {
|
||||
@@ -2351,6 +2360,9 @@ else
|
||||
print '</div>';
|
||||
}
|
||||
|
||||
// Show link to elements
|
||||
if ($linktoelem) print '<br>'.$linktoelem;
|
||||
|
||||
print '</div><div class="fichehalfright"><div class="ficheaddleft">';
|
||||
//print '</td><td valign="top" width="50%">';
|
||||
//print '<br>';
|
||||
|
||||
@@ -32,6 +32,7 @@ echo '<br>';
|
||||
if ($num > 1) print_titre($langs->trans("RelatedBills"));
|
||||
else print_titre($langs->trans("RelatedBill"));
|
||||
?>
|
||||
|
||||
<table class="noborder allwidth">
|
||||
<tr class="liste_titre">
|
||||
<td><?php echo $langs->trans("Ref"); ?></td>
|
||||
|
||||
@@ -257,7 +257,7 @@ print_liste_field_titre($langs->trans("Employe"),$_SERVER["PHP_SELF"],"cp.fk_use
|
||||
print_liste_field_titre($langs->trans("ValidatorCP"),$_SERVER["PHP_SELF"],"cp.fk_validator","",'','',$sortfield,$sortorder);
|
||||
print_liste_field_titre($langs->trans("DateDebCP"),$_SERVER["PHP_SELF"],"cp.date_debut","",'','align="center"',$sortfield,$sortorder);
|
||||
print_liste_field_titre($langs->trans("DateFinCP"),$_SERVER["PHP_SELF"],"cp.date_fin","",'','align="center"',$sortfield,$sortorder);
|
||||
print_liste_field_titre($langs->trans("Duration"));
|
||||
print_liste_field_titre($langs->trans("Duration"),$_SERVER["PHP_SELF"],'','','','align="right"',$sortfield,$sortorder);
|
||||
print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"cp.statut","",'','align="center"',$sortfield,$sortorder);
|
||||
print '<td></td>';
|
||||
print "</tr>\n";
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_CLASSIFYBILLED','Intervention set billed','Executed when a intervention is set to billed (when option FICHINTER_DISABLE_DETAILS is set)','ficheinter',19);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_SENTBYMAIL','Intervention sent by mail','Executed when a intervention is sent by mail','ficheinter',19);
|
||||
|
||||
ALTER TABLE llx_notify ADD COLUMN fk_soc integer NULL after fk_action;
|
||||
|
||||
ALTER TABLE llx_bank_account ADD COLUMN fk_user_author integer;
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ create table llx_notify
|
||||
tms timestamp,
|
||||
daten datetime, -- date de la notification
|
||||
fk_action integer NOT NULL,
|
||||
fk_soc integer NULL,
|
||||
fk_contact integer NULL,
|
||||
fk_user integer NULL,
|
||||
objet_type varchar(24) NOT NULL,
|
||||
|
||||
@@ -484,7 +484,7 @@ Module500Desc=Management of special expenses like taxes, social contribution, di
|
||||
Module510Name=Salaries
|
||||
Module510Desc=Management of employees salaries and payments
|
||||
Module600Name=Notifications
|
||||
Module600Desc=Send notifications by email on some Dolibarr business events to third party contacts
|
||||
Module600Desc=Send EMail notifications on some Dolibarr business events to third-party contacts (setup defined on each thirdparty)
|
||||
Module700Name=Donations
|
||||
Module700Desc=Donation management
|
||||
Module1200Name=Mantis
|
||||
@@ -611,10 +611,11 @@ Permission162=Create/modify contracts
|
||||
Permission163=Activate a service of a contract
|
||||
Permission164=Disable a service of a contract
|
||||
Permission165=Delete contracts
|
||||
Permission171=Read trips
|
||||
Permission172=Create/modify trips
|
||||
Permission173=Delete trips
|
||||
Permission178=Export trips
|
||||
Permission171=Read trips and expenses (own and his subordinates)
|
||||
Permission172=Create/modify trips and expenses
|
||||
Permission173=Delete trips and expenses
|
||||
Permission174=Read all trips and expenses
|
||||
Permission178=Export trips and expenses
|
||||
Permission180=Read suppliers
|
||||
Permission181=Read supplier orders
|
||||
Permission182=Create/modify supplier orders
|
||||
@@ -1074,7 +1075,7 @@ ModuleCompanyCodeAquarium=Return an accountancy code built by:<br>%s followed by
|
||||
ModuleCompanyCodePanicum=Return an empty accountancy code.
|
||||
ModuleCompanyCodeDigitaria=Accountancy code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
|
||||
UseNotifications=Use notifications
|
||||
NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events, to third parties (customers or suppliers) that are configured to. Choice of active notification and targets contacts is made one third party at time.
|
||||
NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:<br>* per third parties contacts (customers or suppliers), one third party at time.<br>* or by setting a global target email address on module setup page.
|
||||
ModelModules=Documents templates
|
||||
DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
|
||||
WatermarkOnDraft=Watermark on draft document
|
||||
@@ -1382,9 +1383,10 @@ MailingSetup=EMailing module setup
|
||||
MailingEMailFrom=Sender EMail (From) for emails sent by emailing module
|
||||
MailingEMailError=Return EMail (Errors-to) for emails with errors
|
||||
##### Notification #####
|
||||
NotificationSetup=Notification bu email module setup
|
||||
NotificationSetup=EMail notification module setup
|
||||
NotificationEMailFrom=Sender EMail (From) for emails sent for notifications
|
||||
ListOfAvailableNotifications=List of available notifications (This list depends on activated modules)
|
||||
ListOfAvailableNotifications=List of events you can set notification on, for each thirdparty (go into thirdparty card to setup) or by setting a fixed email (List depends on activated modules)
|
||||
FixedEmailTarget=Fixed email target
|
||||
##### Sendings #####
|
||||
SendingsSetup=Sending module setup
|
||||
SendingsReceiptModel=Sending receipt model
|
||||
|
||||
@@ -28,8 +28,8 @@ InvoiceAvoir=Credit note
|
||||
InvoiceAvoirAsk=Credit note to correct invoice
|
||||
InvoiceAvoirDesc=The <b>credit note</b> is a negative invoice used to solve fact that an invoice has an amount that differs than amount really paid (because customer paid too much by error, or will not paid completely since he returned some products for example).
|
||||
invoiceAvoirWithLines=Create Credit Note with lines from the origin invoice
|
||||
invoiceAvoirWithPaymentRestAmount=Create Credit Note with the amount of origin invoice payment's lake
|
||||
invoiceAvoirLineWithPaymentRestAmount=Credit Note amount of invoice payment's lake
|
||||
invoiceAvoirWithPaymentRestAmount=Create Credit Note with remaining unpaid of origin invoice
|
||||
invoiceAvoirLineWithPaymentRestAmount=Credit Note for remaining unpaid amount
|
||||
ReplaceInvoice=Replace invoice %s
|
||||
ReplacementInvoice=Replacement invoice
|
||||
ReplacedByInvoice=Replaced by invoice %s
|
||||
@@ -99,7 +99,7 @@ DoPaymentBack=Do payment back
|
||||
ConvertToReduc=Convert into future discount
|
||||
EnterPaymentReceivedFromCustomer=Enter payment received from customer
|
||||
EnterPaymentDueToCustomer=Make payment due to customer
|
||||
DisabledBecauseRemainderToPayIsZero=Disabled because remainder to pay is zero
|
||||
DisabledBecauseRemainderToPayIsZero=Disabled because remaining unpaid is zero
|
||||
Amount=Amount
|
||||
PriceBase=Price base
|
||||
BillStatus=Invoice status
|
||||
@@ -156,9 +156,9 @@ ConfirmCancelBill=Are you sure you want to cancel invoice <b>%s</b> ?
|
||||
ConfirmCancelBillQuestion=Why do you want to classify this invoice 'abandoned' ?
|
||||
ConfirmClassifyPaidPartially=Are you sure you want to change invoice <b>%s</b> to status paid ?
|
||||
ConfirmClassifyPaidPartiallyQuestion=This invoice has not been paid completely. What are reasons for you to close this invoice ?
|
||||
ConfirmClassifyPaidPartiallyReasonAvoir=Remainder to pay <b>(%s %s)</b> is a discount granted because payment was made before term. I regularise the VAT with a credit note.
|
||||
ConfirmClassifyPaidPartiallyReasonDiscountNoVat=Remainder to pay <b>(%s %s)</b> is a discount granted because payment was made before term. I accept to lose the VAT on this discount.
|
||||
ConfirmClassifyPaidPartiallyReasonDiscountVat=Remainder to pay <b>(%s %s)</b> is a discount granted because payment was made before term. I recover the VAT on this discount without a credit note.
|
||||
ConfirmClassifyPaidPartiallyReasonAvoir=Remaining unpaid <b>(%s %s)</b> is a discount granted because payment was made before term. I regularise the VAT with a credit note.
|
||||
ConfirmClassifyPaidPartiallyReasonDiscountNoVat=Remaining unpaid <b>(%s %s)</b> is a discount granted because payment was made before term. I accept to lose the VAT on this discount.
|
||||
ConfirmClassifyPaidPartiallyReasonDiscountVat=Remaining unpaid <b>(%s %s)</b> is a discount granted because payment was made before term. I recover the VAT on this discount without a credit note.
|
||||
ConfirmClassifyPaidPartiallyReasonBadCustomer=Bad customer
|
||||
ConfirmClassifyPaidPartiallyReasonProductReturned=Products partially returned
|
||||
ConfirmClassifyPaidPartiallyReasonOther=Amount abandoned for other reason
|
||||
@@ -191,9 +191,9 @@ AlreadyPaid=Already paid
|
||||
AlreadyPaidBack=Already paid back
|
||||
AlreadyPaidNoCreditNotesNoDeposits=Already paid (without credit notes and deposits)
|
||||
Abandoned=Abandoned
|
||||
RemainderToPay=Remainder to pay
|
||||
RemainderToTake=Remainder to take
|
||||
RemainderToPayBack=Remainder to pay back
|
||||
RemainderToPay=Remaining unpaid
|
||||
RemainderToTake=Remaining amount to take
|
||||
RemainderToPayBack=Remaining amount to pay back
|
||||
Rest=Pending
|
||||
AmountExpected=Amount claimed
|
||||
ExcessReceived=Excess received
|
||||
|
||||
@@ -12,6 +12,7 @@ BoxLastProspects=Last modified prospects
|
||||
BoxLastCustomers=Last modified customers
|
||||
BoxLastSuppliers=Last modified suppliers
|
||||
BoxLastCustomerOrders=Last customer orders
|
||||
BoxLastValidatedCustomerOrders=Last validated customer orders
|
||||
BoxLastBooks=Last books
|
||||
BoxLastActions=Last actions
|
||||
BoxLastContracts=Last contracts
|
||||
@@ -27,26 +28,29 @@ BoxTitleNbOfCustomers=Number of clients
|
||||
BoxTitleLastRssInfos=Last %s news from %s
|
||||
BoxTitleLastProducts=Last %s modified products/services
|
||||
BoxTitleProductsAlertStock=Products in stock alert
|
||||
BoxTitleLastCustomerOrders=Last %s modified customer orders
|
||||
BoxTitleLastCustomerOrders=Last %s customer orders
|
||||
BoxTitleLastModifiedCustomerOrders=Last %s modified customer orders
|
||||
BoxTitleLastSuppliers=Last %s recorded suppliers
|
||||
BoxTitleLastCustomers=Last %s recorded customers
|
||||
BoxTitleLastModifiedSuppliers=Last %s modified suppliers
|
||||
BoxTitleLastModifiedCustomers=Last %s modified customers
|
||||
BoxTitleLastCustomersOrProspects=Last %s modified customers or prospects
|
||||
BoxTitleLastPropals=Last %s recorded proposals
|
||||
BoxTitleLastCustomersOrProspects=Last %s customers or prospects
|
||||
BoxTitleLastPropals=Last %s proposals
|
||||
BoxTitleLastModifiedPropals=Last %s modified proposals
|
||||
BoxTitleLastCustomerBills=Last %s customer's invoices
|
||||
BoxTitleLastModifiedCustomerBills=Last %s modified customer invoices
|
||||
BoxTitleLastSupplierBills=Last %s supplier's invoices
|
||||
BoxTitleLastProspects=Last %s recorded prospects
|
||||
BoxTitleLastModifiedSupplierBills=Last %s modified supplier invoices
|
||||
BoxTitleLastModifiedProspects=Last %s modified prospects
|
||||
BoxTitleLastProductsInContract=Last %s products/services in a contract
|
||||
BoxTitleLastModifiedMembers=Last %s modified members
|
||||
BoxTitleLastModifiedMembers=Last %s members
|
||||
BoxTitleLastFicheInter=Last %s modified intervention
|
||||
BoxTitleOldestUnpaidCustomerBills=Oldest %s unpaid customer's invoices
|
||||
BoxTitleOldestUnpaidSupplierBills=Oldest %s unpaid supplier's invoices
|
||||
BoxTitleOldestUnpaidCustomerBills=Oldest %s unpaid customer invoices
|
||||
BoxTitleOldestUnpaidSupplierBills=Oldest %s unpaid supplier invoices
|
||||
BoxTitleCurrentAccounts=Opened account's balances
|
||||
BoxTitleSalesTurnover=Sales turnover
|
||||
BoxTitleTotalUnpaidCustomerBills=Unpaid customer's invoices
|
||||
BoxTitleTotalUnpaidSuppliersBills=Unpaid supplier's invoices
|
||||
BoxTitleTotalUnpaidCustomerBills=Unpaid customer invoices
|
||||
BoxTitleTotalUnpaidSuppliersBills=Unpaid supplier invoices
|
||||
BoxTitleLastModifiedContacts=Last %s modified contacts/addresses
|
||||
BoxMyLastBookmarks=My last %s bookmarks
|
||||
BoxOldestExpiredServices=Oldest active expired services
|
||||
@@ -76,7 +80,8 @@ NoContractedProducts=No products/services contracted
|
||||
NoRecordedContracts=No recorded contracts
|
||||
NoRecordedInterventions=No recorded interventions
|
||||
BoxLatestSupplierOrders=Latest supplier orders
|
||||
BoxTitleLatestSupplierOrders=%s latest supplier orders
|
||||
BoxTitleLatestSupplierOrders=Last %s supplier orders
|
||||
BoxTitleLatestModifiedSupplierOrders=Last %s modified supplier orders
|
||||
NoSupplierOrder=No recorded supplier order
|
||||
BoxCustomersInvoicesPerMonth=Customer invoices per month
|
||||
BoxSuppliersInvoicesPerMonth=Supplier invoices per month
|
||||
|
||||
@@ -114,6 +114,7 @@ ErrorLoginDoesNotExists=User with login <b>%s</b> could not be found.
|
||||
ErrorLoginHasNoEmail=This user has no email address. Process aborted.
|
||||
ErrorBadValueForCode=Bad value for security code. Try again with new value...
|
||||
ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative
|
||||
ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
|
||||
ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that
|
||||
ErrorNoActivatedBarcode=No barcode type activated
|
||||
ErrUnzipFails=Failed to unzip %s with ZipArchive
|
||||
|
||||
@@ -133,6 +133,6 @@ Notifications=Notifications
|
||||
NoNotificationsWillBeSent=No email notifications are planned for this event and company
|
||||
ANotificationsWillBeSent=1 notification will be sent by email
|
||||
SomeNotificationsWillBeSent=%s notifications will be sent by email
|
||||
AddNewNotification=Activate a new email notification request
|
||||
ListOfActiveNotifications=List all active email notification requests
|
||||
AddNewNotification=Activate a new email notification target
|
||||
ListOfActiveNotifications=List all active email notification targets
|
||||
ListOfNotificationsDone=List all email notifications sent
|
||||
|
||||
@@ -38,4 +38,6 @@ BuyingCost=Cost price
|
||||
UnitCharges=Unit charges
|
||||
Charges=Charges
|
||||
AgentContactType=Commercial agent contact type
|
||||
AgentContactTypeDetails=Défine what contact type (linked on invoices) will be used for margin report by commercial agents
|
||||
AgentContactTypeDetails=Define what contact type (linked on invoices) will be used for margin report per sale representative
|
||||
rateMustBeNumeric=Rate must be a numeric value
|
||||
markRateShouldBeLesserThan100=Mark rate should be lower than 100
|
||||
|
||||
@@ -47,6 +47,7 @@ Notify_PROJECT_CREATE=Project creation
|
||||
Notify_TASK_CREATE=Task created
|
||||
Notify_TASK_MODIFY=Task modified
|
||||
Notify_TASK_DELETE=Task deleted
|
||||
SeeModuleSetup=See module setup
|
||||
NbOfAttachedFiles=Number of attached files/documents
|
||||
TotalSizeOfAttachedFiles=Total size of attached files/documents
|
||||
MaxSize=Maximum size
|
||||
|
||||
@@ -14,8 +14,8 @@ WithdrawalReceiptShort=Receipt
|
||||
LastWithdrawalReceipts=Last %s withdrawal receipts
|
||||
WithdrawedBills=Withdrawn invoices
|
||||
WithdrawalsLines=Withdrawal lines
|
||||
RequestStandingOrderToTreat=Request for standing orders to treat
|
||||
RequestStandingOrderTreated=Request for standing orders treated
|
||||
RequestStandingOrderToTreat=Request for standing orders to process
|
||||
RequestStandingOrderTreated=Request for standing orders processed
|
||||
CustomersStandingOrders=Customer standing orders
|
||||
CustomerStandingOrder=Customer standing order
|
||||
NbOfInvoiceToWithdraw=Nb. of invoice with withdraw request
|
||||
|
||||
@@ -12,6 +12,7 @@ BoxLastProspects=Derniers prospects modifiés
|
||||
BoxLastCustomers=Derniers clients modifiés
|
||||
BoxLastSuppliers=Derniers fournisseurs modifiés
|
||||
BoxLastCustomerOrders=Dernières commandes
|
||||
BoxLastValidatedCustomerOrders=Dernières commandes clients validées
|
||||
BoxLastBooks=Derniers livres
|
||||
BoxLastActions=Derniers événements
|
||||
BoxLastContracts=Derniers contrats
|
||||
@@ -27,26 +28,29 @@ BoxTitleNbOfCustomers=Nombre de clients
|
||||
BoxTitleLastRssInfos=Les %s dernières informations de %s
|
||||
BoxTitleLastProducts=Les %s derniers produits/services enregistrés
|
||||
BoxTitleProductsAlertStock=Produits en alerte stock
|
||||
BoxTitleLastCustomerOrders=Les %s dernières commandes clients modifiées
|
||||
BoxTitleLastCustomerOrders=Les %s dernières commandes clients
|
||||
BoxTitleLastModifiedCustomerOrders=Les %s dernières commandes clients modifiées
|
||||
BoxTitleLastSuppliers=Les %s derniers fournisseurs enregistrés
|
||||
BoxTitleLastCustomers=Les %s derniers clients enregistrés
|
||||
BoxTitleLastModifiedSuppliers=Les %s derniers fournisseurs modifiés
|
||||
BoxTitleLastModifiedCustomers=Les %s derniers clients modifiés
|
||||
BoxTitleLastCustomersOrProspects=Les %s derniers clients ou prospects modifiés
|
||||
BoxTitleLastPropals=Les %s dernières propositions enregistrées
|
||||
BoxTitleLastCustomerBills=Les %s dernières factures clients modifiées
|
||||
BoxTitleLastSupplierBills=Les %s dernières factures fournisseurs modifiées
|
||||
BoxTitleLastProspects=Les %s derniers prospects enregistrés
|
||||
BoxTitleLastCustomersOrProspects=Les %s derniers prospects
|
||||
BoxTitleLastPropals=Les %s dernières propales
|
||||
BoxTitleLastModifiedPropals=Les %s dernières propositions commerciales modifiées
|
||||
BoxTitleLastCustomerBills=Les %s dernières factures clients
|
||||
BoxTitleLastModifiedCustomerBills=Les %s dernières factures clients modifiées
|
||||
BoxTitleLastSupplierBills=Les %s dernières factures fournisseurs
|
||||
BoxTitleLastModifiedSupplierBills=Les %s dernières factures fournisseurs modifiées
|
||||
BoxTitleLastModifiedProspects=Les %s derniers prospects modifiés
|
||||
BoxTitleLastProductsInContract=Les %s derniers produits/services contractés
|
||||
BoxTitleLastModifiedMembers=Les %s derniers adhérents modifiés
|
||||
BoxTitleLastFicheInter=Les %s dernières fiches d'intervention modifiées
|
||||
BoxTitleLastModifiedMembers=Les %s derniers adhérents
|
||||
BoxTitleLastFicheInter=Les %s dernières fiche d'intervention modifiée
|
||||
BoxTitleOldestUnpaidCustomerBills=Les %s plus anciennes factures clients impayées
|
||||
BoxTitleOldestUnpaidSupplierBills=Les %s plus anciennes factures fournisseurs impayées
|
||||
BoxTitleCurrentAccounts=Soldes des comptes ouverts
|
||||
BoxTitleSalesTurnover=Le chiffre d'affaires réalisé
|
||||
BoxTitleTotalUnpaidCustomerBills=Impayés clients
|
||||
BoxTitleTotalUnpaidSuppliersBills=Impayés fournisseurs
|
||||
BoxTitleTotalUnpaidCustomerBills=Factures clients impayées
|
||||
BoxTitleTotalUnpaidSuppliersBills=Factures fournisseurs impayées
|
||||
BoxTitleLastModifiedContacts=Les %s derniers contacts/adresses modifiés
|
||||
BoxMyLastBookmarks=Mes %s derniers marque-pages
|
||||
BoxOldestExpiredServices=Plus anciens services expirés
|
||||
@@ -76,7 +80,8 @@ NoContractedProducts=Pas de produit/service contracté
|
||||
NoRecordedContracts=Pas de contrat enregistré
|
||||
NoRecordedInterventions=Pas fiche d'intervention enregistrée
|
||||
BoxLatestSupplierOrders=Dernières commandes fournisseur
|
||||
BoxTitleLatestSupplierOrders=Les %s dernières commandes fournisseur enregistrées
|
||||
BoxTitleLatestSupplierOrders=Les %s dernières commandes fournisseurs
|
||||
BoxTitleLatestModifiedSupplierOrders=Les %s dernières commandes fournisseurs
|
||||
NoSupplierOrder=Pas de commande fournisseur enregistrée
|
||||
BoxCustomersInvoicesPerMonth=Factures clients par mois
|
||||
BoxSuppliersInvoicesPerMonth=Factures fournisseurs par mois
|
||||
|
||||
@@ -124,24 +124,23 @@ else if ($action == 'confirm_valid' && $confirm == 'yes' && $user->rights->exped
|
||||
$result = $object->valid($user);
|
||||
|
||||
// Define output language
|
||||
$outputlangs = $langs;
|
||||
$newlang='';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id'];
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang;
|
||||
if (! empty($newlang))
|
||||
{
|
||||
$outputlangs = new Translate("",$conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
|
||||
{
|
||||
$ret=$object->fetch($id); // Reload to get new records
|
||||
$result= $object->generateDocument($_REQUEST['model'],$outputlangs);
|
||||
}
|
||||
if ($result < 0)
|
||||
{
|
||||
dol_print_error($db,$result);
|
||||
exit;
|
||||
$outputlangs = $langs;
|
||||
$newlang = '';
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang = GETPOST('lang_id','alpha');
|
||||
if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang;
|
||||
if (! empty($newlang)) {
|
||||
$outputlangs = new Translate("", $conf);
|
||||
$outputlangs->setDefaultLang($newlang);
|
||||
}
|
||||
$model=$object->modelpdf;
|
||||
if (empty($model)) {
|
||||
$tmp=getListOfModels($db, 'delivery'); $keys=array_keys($tmp); $model=$keys[0];
|
||||
}
|
||||
$ret = $object->fetch($id); // Reload to get new records
|
||||
$result=$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
|
||||
if ($result < 0) dol_print_error($db,$result);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -359,18 +359,21 @@ class Livraison extends CommonObject
|
||||
$soc = new Societe($this->db);
|
||||
$soc->fetch($this->socid);
|
||||
|
||||
// on verifie si le bon de livraison est en numerotation provisoire
|
||||
$livref = substr($this->ref, 1, 4);
|
||||
if ($livref == 'PROV')
|
||||
if (preg_match('/^[\(]?PROV/i', $this->ref))
|
||||
{
|
||||
$numref = $objMod->livraison_get_num($soc,$this);
|
||||
}
|
||||
else
|
||||
{
|
||||
$numref = $objMod->livraison_get_num($soc,$this);
|
||||
}
|
||||
$numref = $this->ref;
|
||||
}
|
||||
$this->newref = $numref;
|
||||
|
||||
// Tester si non deja au statut valide. Si oui, on arrete afin d'eviter
|
||||
// de decrementer 2 fois le stock.
|
||||
$sql = "SELECT ref";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."livraison";
|
||||
$sql.= " WHERE ref = '".$numref."'";
|
||||
$sql.= " WHERE ref = '".$this->db->escape($numref)."'";
|
||||
$sql.= " AND fk_statut <> 0";
|
||||
$sql.= " AND entity = ".$conf->entity;
|
||||
|
||||
@@ -393,10 +396,24 @@ class Livraison extends CommonObject
|
||||
$sql.= " AND fk_statut = 0";
|
||||
|
||||
$resql=$this->db->query($sql);
|
||||
if ($resql)
|
||||
{
|
||||
if (! $resql)
|
||||
{
|
||||
dol_print_error($this->db);
|
||||
$this->error=$this->db->lasterror();
|
||||
$error++;
|
||||
}
|
||||
|
||||
$this->oldref='';
|
||||
if (! $error && ! $notrigger)
|
||||
{
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('DELIVERY_VALIDATE',$user);
|
||||
if ($result < 0) $error++;
|
||||
// End call triggers
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$this->oldref = $this->ref;
|
||||
|
||||
// Rename directory if dir was a temporary ref
|
||||
if (preg_match('/^[\(]?PROV/i', $this->ref))
|
||||
@@ -413,11 +430,17 @@ class Livraison extends CommonObject
|
||||
|
||||
if (@rename($dirsource, $dirdest))
|
||||
{
|
||||
$this->oldref = $oldref;
|
||||
|
||||
dol_syslog("Rename ok");
|
||||
// Suppression ancien fichier PDF dans nouveau rep
|
||||
dol_delete_file($dirdest.'/'.$oldref.'*.*');
|
||||
dol_syslog("Rename ok");
|
||||
// Rename docs starting with $oldref with $newref
|
||||
$listoffiles=dol_dir_list($conf->expedition->dir_output.'/receipt/'.$newref, 'files', 1, '^'.preg_quote($oldref,'/'));
|
||||
foreach($listoffiles as $fileentry)
|
||||
{
|
||||
$dirsource=$fileentry['name'];
|
||||
$dirdest=preg_replace('/^'.preg_quote($oldref,'/').'/',$newref, $dirsource);
|
||||
$dirsource=$fileentry['path'].'/'.$dirsource;
|
||||
$dirdest=$fileentry['path'].'/'.$dirdest;
|
||||
@rename($dirsource, $dirdest);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -431,12 +454,17 @@ class Livraison extends CommonObject
|
||||
|
||||
dol_syslog(get_class($this)."::valid ok");
|
||||
}
|
||||
else
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$this->db->commit();
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db->rollback();
|
||||
$this->error=$this->db->error()." - sql=$sql";
|
||||
return -1;
|
||||
}
|
||||
$this->db->rollback();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -446,21 +474,6 @@ class Livraison extends CommonObject
|
||||
dol_syslog(get_class($this)."::valid ".$this->error, LOG_ERR);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Call trigger
|
||||
$result=$this->call_trigger('DELIVERY_VALIDATE',$user);
|
||||
// End call triggers
|
||||
if ($result < 0)
|
||||
{
|
||||
$this->db->rollback();
|
||||
dol_syslog(get_class($this)."::valid ".$this->error, LOG_ERR);
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db->commit();
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -31,9 +31,9 @@ $langs->load("stocks");
|
||||
// Security check
|
||||
$result=restrictedArea($user,'stock');
|
||||
|
||||
$sref=GETPOST("sref");;
|
||||
$snom=GETPOST("snom");
|
||||
$sall=GETPOST("sall");
|
||||
$sref=GETPOST("sref","alpha");
|
||||
$snom=GETPOST("snom","alpha");
|
||||
$sall=GETPOST("sall","alpha");
|
||||
|
||||
$sortfield = GETPOST("sortfield");
|
||||
$sortorder = GETPOST("sortorder");
|
||||
|
||||
@@ -388,19 +388,38 @@ class Project extends CommonObject
|
||||
/**
|
||||
* Return list of elements for type linked to project
|
||||
*
|
||||
* @param string $type 'propal','order','invoice','order_supplier','invoice_supplier'
|
||||
* @param string $tablename name of table associated of the type
|
||||
* @return array List of orders linked to project, <0 if error
|
||||
* @param string $type 'propal','order','invoice','order_supplier','invoice_supplier'
|
||||
* @param string $tablename name of table associated of the type
|
||||
* @param string $datefieldname name of table associated of the type
|
||||
* @param string $dates Start date (at 00:00:00)
|
||||
* @param string $datee End date (at 23:00:00)
|
||||
* @return mixed List of orders linked to project, < 0 or string if error
|
||||
*/
|
||||
function get_element_list($type, $tablename)
|
||||
function get_element_list($type, $tablename, $datefieldname='', $dates='', $datee='')
|
||||
{
|
||||
$elements = array();
|
||||
|
||||
if ($type == 'agenda')
|
||||
{
|
||||
$sql = "SELECT id as rowid FROM " . MAIN_DB_PREFIX . "actioncomm WHERE fk_project=" . $this->id;
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql = "SELECT rowid FROM " . MAIN_DB_PREFIX . $tablename." WHERE fk_projet=" . $this->id;
|
||||
if (! $sql) return -1;
|
||||
}
|
||||
if ($dates > 0)
|
||||
{
|
||||
if (empty($datefieldname) && ! empty($this->table_element_date)) $datefieldname=$this->table_element_date;
|
||||
if (empty($datefieldname)) return 'Error this object has no date field defined';
|
||||
$sql.=" AND ".$datefieldname." >= '".$this->db->jdate($dates)."'";
|
||||
}
|
||||
if ($datee > 0)
|
||||
{
|
||||
if (empty($datefieldname) && ! empty($this->table_element_date)) $datefieldname=$this->table_element_date;
|
||||
if (empty($datefieldname)) return 'Error this object has no date field defined';
|
||||
$sql.=" AND ".$datefieldname." <= '".$this->db->jdate($datee)."'";
|
||||
}
|
||||
if (! $sql) return -1;
|
||||
|
||||
//print $sql;
|
||||
dol_syslog(get_class($this)."::get_element_list", LOG_DEBUG);
|
||||
|
||||
@@ -143,7 +143,7 @@ class Task extends CommonObject
|
||||
}
|
||||
|
||||
// Update extrafield
|
||||
if (! $error)
|
||||
if (! $error)
|
||||
{
|
||||
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
|
||||
{
|
||||
@@ -480,15 +480,16 @@ class Task extends CommonObject
|
||||
*
|
||||
* @param int $withpicto 0=Pas de picto, 1=Inclut le picto dans le lien, 2=Picto seul
|
||||
* @param int $option Sur quoi pointe le lien
|
||||
* @param int $mode Mode 'task', 'time', 'contact', 'note', document' define page to link to.
|
||||
* @return string Chaine avec URL
|
||||
*/
|
||||
function getNomUrl($withpicto=0,$option='')
|
||||
function getNomUrl($withpicto=0,$option='',$mode='task')
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$result='';
|
||||
|
||||
$lien = '<a href="'.DOL_URL_ROOT.'/projet/tasks/task.php?id='.$this->id.($option=='withproject'?'&withproject=1':'').'">';
|
||||
$lien = '<a href="'.DOL_URL_ROOT.'/projet/tasks/'.$mode.'.php?id='.$this->id.($option=='withproject'?'&withproject=1':'').'">';
|
||||
$lienfin='</a>';
|
||||
|
||||
$picto='projecttask';
|
||||
@@ -746,7 +747,7 @@ class Task extends CommonObject
|
||||
// Clean parameters
|
||||
if (isset($this->timespent_note)) $this->timespent_note = trim($this->timespent_note);
|
||||
if (empty($this->timespent_datehour)) $this->timespent_datehour = $this->timespent_date;
|
||||
|
||||
|
||||
$this->db->begin();
|
||||
|
||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."projet_task_time (";
|
||||
@@ -832,9 +833,9 @@ class Task extends CommonObject
|
||||
global $langs;
|
||||
|
||||
if (empty($id)) $id=$this->id;
|
||||
|
||||
|
||||
$result=array();
|
||||
|
||||
|
||||
$sql = "SELECT";
|
||||
$sql.= " MIN(t.task_datehour) as min_date,";
|
||||
$sql.= " MAX(t.task_datehour) as max_date,";
|
||||
@@ -925,7 +926,7 @@ class Task extends CommonObject
|
||||
// Clean parameters
|
||||
if (empty($this->timespent_datehour)) $this->timespent_datehour = $this->timespent_date;
|
||||
if (isset($this->timespent_note)) $this->timespent_note = trim($this->timespent_note);
|
||||
|
||||
|
||||
$this->db->begin();
|
||||
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."projet_task_time SET";
|
||||
|
||||
@@ -28,6 +28,7 @@ require '../main.inc.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||
if (! empty($conf->propal->enabled)) require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php';
|
||||
if (! empty($conf->facture->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
|
||||
if (! empty($conf->facture->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture-rec.class.php';
|
||||
@@ -50,7 +51,20 @@ if (! empty($conf->ficheinter->enabled)) $langs->load("interventions");
|
||||
$projectid=GETPOST('id','int');
|
||||
$ref=GETPOST('ref','alpha');
|
||||
$action=GETPOST('action','alpha');
|
||||
|
||||
$datesrfc=GETPOST('datesrfc');
|
||||
$dateerfc=GETPOST('dateerfc');
|
||||
$dates=dol_mktime(0, 0, 0, GETPOST('datesmonth'), GETPOST('datesday'), GETPOST('datesyear'));
|
||||
$datee=dol_mktime(23, 59, 59, GETPOST('dateemonth'), GETPOST('dateeday'), GETPOST('dateeyear'));
|
||||
if (empty($dates) && ! empty($datesrfc)) $dates=dol_stringtotime($datesrfc);
|
||||
if (empty($datee) && ! empty($dateerfc)) $datee=dol_stringtotime($dateerfc);
|
||||
if (! isset($_POST['datesrfc']) && ! isset($_POST['datesday']))
|
||||
{
|
||||
$new=dol_now();
|
||||
$tmp=dol_getdate($new);
|
||||
//$datee=$now
|
||||
//$dates=dol_time_plus_duree($datee, -1, 'y');
|
||||
$dates=dol_get_first_day($tmp['year'],1);
|
||||
}
|
||||
if ($projectid == '' && $ref == '')
|
||||
{
|
||||
dol_print_error('','Bad parameter');
|
||||
@@ -153,49 +167,58 @@ $listofreferent=array(
|
||||
'title'=>"ListProposalsAssociatedProject",
|
||||
'class'=>'Propal',
|
||||
'table'=>'propal',
|
||||
'datefieldname'=>'datep',
|
||||
'test'=>$conf->propal->enabled && $user->rights->propale->lire),
|
||||
'order'=>array(
|
||||
'title'=>"ListOrdersAssociatedProject",
|
||||
'class'=>'Commande',
|
||||
'table'=>'commande',
|
||||
'datefieldname'=>'date_commande',
|
||||
'test'=>$conf->commande->enabled && $user->rights->commande->lire),
|
||||
'invoice'=>array(
|
||||
'title'=>"ListInvoicesAssociatedProject",
|
||||
'class'=>'Facture',
|
||||
'margin'=>'add',
|
||||
'table'=>'facture',
|
||||
'datefieldname'=>'datef',
|
||||
'test'=>$conf->facture->enabled && $user->rights->facture->lire),
|
||||
'invoice_predefined'=>array(
|
||||
'title'=>"ListPredefinedInvoicesAssociatedProject",
|
||||
'class'=>'FactureRec',
|
||||
'table'=>'facture_rec',
|
||||
'datefieldname'=>'datec',
|
||||
'test'=>$conf->facture->enabled && $user->rights->facture->lire),
|
||||
'order_supplier'=>array(
|
||||
'title'=>"ListSupplierOrdersAssociatedProject",
|
||||
'class'=>'CommandeFournisseur',
|
||||
'table'=>'commande_fournisseur',
|
||||
'datefieldname'=>'date_commande',
|
||||
'test'=>$conf->fournisseur->enabled && $user->rights->fournisseur->commande->lire),
|
||||
'invoice_supplier'=>array(
|
||||
'title'=>"ListSupplierInvoicesAssociatedProject",
|
||||
'class'=>'FactureFournisseur',
|
||||
'margin'=>'minus',
|
||||
'table'=>'facture_fourn',
|
||||
'datefieldname'=>'datef',
|
||||
'test'=>$conf->fournisseur->enabled && $user->rights->fournisseur->facture->lire),
|
||||
'contract'=>array(
|
||||
'title'=>"ListContractAssociatedProject",
|
||||
'class'=>'Contrat',
|
||||
'table'=>'contrat',
|
||||
'datefieldname'=>'date_contrat',
|
||||
'test'=>$conf->contrat->enabled && $user->rights->contrat->lire),
|
||||
'intervention'=>array(
|
||||
'title'=>"ListFichinterAssociatedProject",
|
||||
'class'=>'Fichinter',
|
||||
'table'=>'fichinter',
|
||||
'datefieldname'=>'date_valid',
|
||||
'disableamount'=>1,
|
||||
'test'=>$conf->ficheinter->enabled && $user->rights->ficheinter->lire),
|
||||
'trip'=>array(
|
||||
'title'=>"ListTripAssociatedProject",
|
||||
'class'=>'Deplacement',
|
||||
'table'=>'deplacement',
|
||||
'datefieldname'=>'dated',
|
||||
'margin'=>'minus',
|
||||
'disableamount'=>1,
|
||||
'test'=>$conf->deplacement->enabled && $user->rights->deplacement->lire),
|
||||
@@ -203,6 +226,7 @@ $listofreferent=array(
|
||||
'title'=>"ListActionsAssociatedProject",
|
||||
'class'=>'ActionComm',
|
||||
'table'=>'actioncomm',
|
||||
'datefieldname'=>'datep',
|
||||
'disableamount'=>1,
|
||||
'test'=>$conf->agenda->enabled && $user->rights->agenda->allactions->lire)
|
||||
);
|
||||
@@ -216,25 +240,49 @@ if ($action=="addelement")
|
||||
setEventMessage($mailchimp->error,'errors');
|
||||
}
|
||||
}elseif ($action == "unlink") {
|
||||
|
||||
|
||||
$tablename = GETPOST("tablename");
|
||||
$elementselectid = GETPOST("elementselect");
|
||||
|
||||
|
||||
$result = $project->remove_element($tablename, $elementselectid);
|
||||
if ($result < 0) {
|
||||
setEventMessage($project->error, 'errors');
|
||||
}
|
||||
}
|
||||
|
||||
$showdatefilter=0;
|
||||
foreach ($listofreferent as $key => $value)
|
||||
{
|
||||
$title=$value['title'];
|
||||
$classname=$value['class'];
|
||||
$tablename=$value['table'];
|
||||
$datefieldname=$value['datefieldname'];
|
||||
$qualified=$value['test'];
|
||||
|
||||
if ($qualified)
|
||||
{
|
||||
if (! $showdatefilter)
|
||||
{
|
||||
print '<form action="'.$_SERVER["PHP_SELF"].'?id='.$projectid.'" method="post">';
|
||||
print '<input type="hidden" name="tablename" value="'.$tablename.'">';
|
||||
print '<input type="hidden" name="action" value="addelement">';
|
||||
print '<table><tr>';
|
||||
//print '<td>'.$langs->trans("Filter").':</td>';
|
||||
print '<td>'.$langs->trans("From").' ';
|
||||
print $form->select_date($dates,'dates',0,0,1);
|
||||
print '</td>';
|
||||
print '<td>'.$langs->trans("to").' ';
|
||||
print $form->select_date($datee,'datee',0,0,1);
|
||||
print '</td>';
|
||||
print '<td>';
|
||||
print '<input type="submit" name="refresh" value="'.$langs->trans("Refresh").'" class="button">';
|
||||
print '</td>';
|
||||
print '</tr></table>';
|
||||
print '</form><br>';
|
||||
|
||||
$showdatefilter++;
|
||||
}
|
||||
|
||||
print '<br>';
|
||||
|
||||
print_titre($langs->trans($title));
|
||||
@@ -247,6 +295,8 @@ foreach ($listofreferent as $key => $value)
|
||||
print '<form action="'.$_SERVER["PHP_SELF"].'?id='.$projectid.'" method="post">';
|
||||
print '<input type="hidden" name="tablename" value="'.$tablename.'">';
|
||||
print '<input type="hidden" name="action" value="addelement">';
|
||||
print '<input type="hidden" name="datesrfc" value="'.dol_print_date($dates,'dayhourrfc').'">';
|
||||
print '<input type="hidden" name="dateerfc" value="'.dol_print_date($datee,'dayhourrfc').'">';
|
||||
print '<table><tr><td>'.$langs->trans("SelectElement").'</td>';
|
||||
print '<td>'.$selectList.'</td>';
|
||||
print '<td><input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans("AddElement")).'"></td>';
|
||||
@@ -260,11 +310,13 @@ foreach ($listofreferent as $key => $value)
|
||||
print '<td width="100" align="center">'.$langs->trans("Date").'</td>';
|
||||
print '<td>'.$langs->trans("ThirdParty").'</td>';
|
||||
if (empty($value['disableamount'])) print '<td align="right" width="120">'.$langs->trans("AmountHT").'</td>';
|
||||
else print '<td width="120"></td>';
|
||||
if (empty($value['disableamount'])) print '<td align="right" width="120">'.$langs->trans("AmountTTC").'</td>';
|
||||
else print '<td width="120"></td>';
|
||||
print '<td align="right" width="200">'.$langs->trans("Status").'</td>';
|
||||
print '</tr>';
|
||||
$elementarray = $project->get_element_list($key, $tablename);
|
||||
if (count($elementarray)>0 && is_array($elementarray))
|
||||
$elementarray = $project->get_element_list($key, $tablename, $datefieldname, $dates, $datee);
|
||||
if (is_array($elementarray) && count($elementarray)>0)
|
||||
{
|
||||
$var=true;
|
||||
$total_ht = 0;
|
||||
@@ -314,6 +366,7 @@ foreach ($listofreferent as $key => $value)
|
||||
if (! $qualifiedfortotal) print '</strike>';
|
||||
print '</td>';
|
||||
}
|
||||
else print '<td></td>';
|
||||
|
||||
// Amount
|
||||
if (empty($value['disableamount']))
|
||||
@@ -324,6 +377,7 @@ foreach ($listofreferent as $key => $value)
|
||||
if (! $qualifiedfortotal) print '</strike>';
|
||||
print '</td>';
|
||||
}
|
||||
else print '<td></td>';
|
||||
|
||||
// Status
|
||||
print '<td align="right">'.$element->getLibStatut(5).'</td>';
|
||||
@@ -339,10 +393,16 @@ foreach ($listofreferent as $key => $value)
|
||||
|
||||
print '<tr class="liste_total"><td colspan="4">'.$langs->trans("Number").': '.$i.'</td>';
|
||||
if (empty($value['disableamount'])) print '<td align="right" width="100">'.$langs->trans("TotalHT").' : '.price($total_ht).'</td>';
|
||||
else print '<td></td>';
|
||||
if (empty($value['disableamount'])) print '<td align="right" width="100">'.$langs->trans("TotalTTC").' : '.price($total_ttc).'</td>';
|
||||
else print '<td></td>';
|
||||
print '<td> </td>';
|
||||
print '</tr>';
|
||||
}
|
||||
else // error
|
||||
{
|
||||
print $elementarray;
|
||||
}
|
||||
print "</table>";
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2004-2014 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2010-2012 Juanjo Menent <jmenent@2byte.es>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@@ -191,12 +191,10 @@ if ($result > 0)
|
||||
print '</td></tr>';
|
||||
print '</table>';
|
||||
|
||||
// Help
|
||||
print '<br>'.$langs->trans("NotificationsDesc").'<br>';
|
||||
|
||||
|
||||
dol_fiche_end();
|
||||
|
||||
// Help
|
||||
print $langs->trans("NotificationsDesc").'<br><br>';
|
||||
|
||||
print "\n";
|
||||
|
||||
@@ -212,7 +210,7 @@ if ($result > 0)
|
||||
// Line with titles
|
||||
print '<table width="100%" class="noborder">';
|
||||
print '<tr class="liste_titre">';
|
||||
print_liste_field_titre($langs->trans("Contact"),$_SERVER["PHP_SELF"],"c.lastname",'',$param,'"width="45%"',$sortfield,$sortorder);
|
||||
print_liste_field_titre($langs->trans("Target"),$_SERVER["PHP_SELF"],"c.lastname",'',$param,'"width="45%"',$sortfield,$sortorder);
|
||||
print_liste_field_titre($langs->trans("Action"),$_SERVER["PHP_SELF"],"a.titre",'',$param,'"width="35%"',$sortfield,$sortorder);
|
||||
print_liste_field_titre($langs->trans("Type"),$_SERVER["PHP_SELF"],"",'',$param,'"width="10%"',$sortfield,$sortorder);
|
||||
print_liste_field_titre('');
|
||||
@@ -265,13 +263,40 @@ if ($result > 0)
|
||||
// Line with titles
|
||||
print '<table width="100%" class="noborder">';
|
||||
print '<tr class="liste_titre">';
|
||||
print_liste_field_titre($langs->trans("Contact"),$_SERVER["PHP_SELF"],"c.lastname",'',$param,'"width="45%"',$sortfield,$sortorder);
|
||||
print_liste_field_titre($langs->trans("Target"),$_SERVER["PHP_SELF"],"c.lastname",'',$param,'"width="45%"',$sortfield,$sortorder);
|
||||
print_liste_field_titre($langs->trans("Action"),$_SERVER["PHP_SELF"],"a.titre",'',$param,'"width="35%"',$sortfield,$sortorder);
|
||||
print_liste_field_titre($langs->trans("Type"),$_SERVER["PHP_SELF"],"",'',$param,'"width="10%"',$sortfield,$sortorder);
|
||||
print_liste_field_titre('','','');
|
||||
print '</tr>';
|
||||
|
||||
// List of notifications for contacts
|
||||
// List of notifications enabled for fixed email
|
||||
foreach($conf->global as $key => $val)
|
||||
{
|
||||
if (! preg_match('/^NOTIFICATION_FIXEDEMAIL_(.*)/', $key, $reg)) continue;
|
||||
//print $key.' - '.$val.' - '.$reg[1].'<br>';
|
||||
print '<tr '.$bc[$var].'><td>'.$val;
|
||||
if (isValidEmail($val))
|
||||
{
|
||||
print ' <'.$val.'>';
|
||||
}
|
||||
else
|
||||
{
|
||||
$langs->load("errors");
|
||||
print ' '.img_warning().' '.$langs->trans("ErrorBadEMail",$val);
|
||||
}
|
||||
print '</td>';
|
||||
print '<td>';
|
||||
$label=($langs->trans("Notify_".$reg[1])!="Notify_".$reg[1]?$langs->trans("Notify_".$reg[1]):$reg[1]);
|
||||
print $label;
|
||||
print '</td>';
|
||||
print '<td>';
|
||||
print $langs->trans("Email");
|
||||
print '</td>';
|
||||
print '<td align="right">'.$langs->trans("SeeModuleSetup").'</td>';
|
||||
print '</tr>';
|
||||
}
|
||||
|
||||
// List of notifications enabled for contacts
|
||||
$sql = "SELECT n.rowid, n.type,";
|
||||
$sql.= " a.code, a.label,";
|
||||
$sql.= " c.rowid as contactid, c.lastname, c.firstname, c.email";
|
||||
@@ -343,21 +368,22 @@ if ($result > 0)
|
||||
// Line with titles
|
||||
print '<table width="100%" class="noborder">';
|
||||
print '<tr class="liste_titre">';
|
||||
print_liste_field_titre($langs->trans("Contact"),$_SERVER["PHP_SELF"],"c.lastname",'',$param,'',$sortfield,$sortorder);
|
||||
print_liste_field_titre($langs->trans("Target"),$_SERVER["PHP_SELF"],"c.lastname",'',$param,'',$sortfield,$sortorder);
|
||||
print_liste_field_titre($langs->trans("Action"),$_SERVER["PHP_SELF"],"a.titre",'',$param,'',$sortfield,$sortorder);
|
||||
print_liste_field_titre($langs->trans("Type"),$_SERVER["PHP_SELF"],"",'',$param,'',$sortfield,$sortorder);
|
||||
//print_liste_field_titre($langs->trans("Object"),$_SERVER["PHP_SELF"],"",'',$param,'"',$sortfield,$sortorder);
|
||||
print_liste_field_titre($langs->trans("Date"),$_SERVER["PHP_SELF"],"a.daten",'',$param,'align="right"',$sortfield,$sortorder);
|
||||
print '</tr>';
|
||||
|
||||
// List
|
||||
$sql = "SELECT n.rowid, n.daten, n.email, n.objet_type, n.objet_id,";
|
||||
$sql.= " c.rowid as id, c.lastname, c.firstname, c.email,";
|
||||
$sql = "SELECT n.rowid, n.daten, n.email, n.objet_type, n.objet_id as object_id, n.type,";
|
||||
$sql.= " c.rowid as id, c.lastname, c.firstname, c.email as contactemail,";
|
||||
$sql.= " a.code, a.label";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."c_action_trigger as a,";
|
||||
$sql.= " ".MAIN_DB_PREFIX."notify as n, ";
|
||||
$sql.= " ".MAIN_DB_PREFIX."socpeople as c";
|
||||
$sql.= " ".MAIN_DB_PREFIX."notify as n ";
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."socpeople as c ON n.fk_contact = c.rowid";
|
||||
$sql.= " WHERE a.rowid = n.fk_action";
|
||||
$sql.= " AND c.rowid = n.fk_contact";
|
||||
$sql.= " AND c.fk_soc = ".$object->id;
|
||||
$sql.= " AND n.fk_soc = ".$object->id;
|
||||
|
||||
$resql=$db->query($sql);
|
||||
if ($resql)
|
||||
@@ -373,17 +399,37 @@ if ($result > 0)
|
||||
|
||||
$obj = $db->fetch_object($resql);
|
||||
|
||||
$contactstatic->id=$obj->id;
|
||||
$contactstatic->lastname=$obj->lastname;
|
||||
$contactstatic->firstname=$obj->firstname;
|
||||
print '<tr '.$bc[$var].'><td>'.$contactstatic->getNomUrl(1);
|
||||
print $obj->email?' <'.$obj->email.'>':$langs->trans("NoMail");
|
||||
print '<tr '.$bc[$var].'><td>';
|
||||
if ($obj->id > 0)
|
||||
{
|
||||
$contactstatic->id=$obj->id;
|
||||
$contactstatic->lastname=$obj->lastname;
|
||||
$contactstatic->firstname=$obj->firstname;
|
||||
print $contactstatic->getNomUrl(1);
|
||||
print $obj->email?' <'.$obj->email.'>':$langs->trans("NoMail");
|
||||
}
|
||||
else
|
||||
{
|
||||
print $obj->email;
|
||||
}
|
||||
print '</td>';
|
||||
print '<td>';
|
||||
$label=($langs->trans("Notify_".$obj->code)!="Notify_".$obj->code?$langs->trans("Notify_".$obj->code):$obj->label);
|
||||
print $label;
|
||||
print '</td>';
|
||||
// TODO Add link to object here
|
||||
print '<td>';
|
||||
if ($obj->type == 'email') print $langs->trans("Email");
|
||||
if ($obj->type == 'sms') print $langs->trans("Sms");
|
||||
print '</td>';
|
||||
// TODO Add link to object here for other types
|
||||
/*print '<td>';
|
||||
if ($obj->object_type == 'order')
|
||||
{
|
||||
$orderstatic->id=$obj->object_id;
|
||||
$orderstatic->ref=...
|
||||
print $orderstatic->getNomUrl(1);
|
||||
}
|
||||
print '</td>';*/
|
||||
// print
|
||||
print'<td align="right">'.dol_print_date($db->jdate($obj->daten), 'dayhour').'</td>';
|
||||
print '</tr>';
|
||||
@@ -400,7 +446,7 @@ if ($result > 0)
|
||||
}
|
||||
else dol_print_error('','RecordNotFound');
|
||||
|
||||
$db->close();
|
||||
|
||||
llxFooter();
|
||||
|
||||
$db->close();
|
||||
|
||||
@@ -1004,9 +1004,9 @@ div.blockvmenupair, div.blockvmenuimpair, div.blockvmenubookmarks
|
||||
background-repeat:repeat-x;
|
||||
<?php } ?>
|
||||
border-left: 1px solid #AAA;
|
||||
border-right: 1px solid #CCC;
|
||||
border-bottom: 1px solid #CCC;
|
||||
border-top: 1px solid #CCC;
|
||||
border-right: 1px solid #BBB;
|
||||
border-bottom: 1px solid #BBB;
|
||||
border-top: 1px solid #BBB;
|
||||
border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
-moz-box-shadow: 3px 3px 4px #DDD;
|
||||
@@ -1361,10 +1361,10 @@ div.tabBar {
|
||||
-moz-border-radius:6px;
|
||||
-webkit-border-radius: 6px;
|
||||
border-radius: 6px;
|
||||
border-right: 1px solid #CCCCCC;
|
||||
border-bottom: 1px solid #CCCCCC;
|
||||
border-left: 1px solid #D0D0D0;
|
||||
border-top: 1px solid #D8D8D8;
|
||||
border-right: 1px solid #BBB;
|
||||
border-bottom: 1px solid #BBB;
|
||||
border-left: 1px solid #BBB;
|
||||
border-top: 1px solid #CCC;
|
||||
width: auto;
|
||||
<?php if ($usecss3) { ?>
|
||||
background-image: -o-linear-gradient(bottom, rgba(<?php echo $colorbacktabcard1; ?>, 0.5) 25%, rgba(<?php echo $colorbacktabcard2; ?>, 0.5) 100%);
|
||||
@@ -1420,9 +1420,9 @@ a.tab:link, a.tab:visited, a.tab:hover, a.tab#active {
|
||||
box-shadow: 0 -1px 4px rgba(0,0,0,.1);
|
||||
|
||||
border-bottom: none;
|
||||
border-right: 1px solid #CCCCCC;
|
||||
border-left: 1px solid #D0D0D0;
|
||||
border-top: 1px solid #D8D8D8;
|
||||
border-right: 1px solid #BBB;
|
||||
border-left: 1px solid #BBB;
|
||||
border-top: 1px solid #CCC;
|
||||
|
||||
<?php if ($usecss3) { ?>
|
||||
background-image: -o-linear-gradient(bottom, rgb(<?php echo $colorbackvmenu1; ?>) 35%, rgb(<?php echo $colorbackvmenu2; ?>) 100%);
|
||||
|
||||
@@ -1792,7 +1792,7 @@ class User extends CommonObject
|
||||
$result.=($lien.img_object($langs->trans("ShowUser"),'user').$lienfin);
|
||||
if ($withpicto != 2) $result.=' ';
|
||||
}
|
||||
$result.=$lien.$this->getFullName($langs).$lienfin;
|
||||
$result.=$lien.$this->getFullName($langs,'','',16).$lienfin;
|
||||
return $result;
|
||||
}
|
||||
|
||||
@@ -1941,7 +1941,7 @@ class User extends CommonObject
|
||||
if ($this->office_fax && ! empty($conf->global->LDAP_FIELD_FAX)) $info[$conf->global->LDAP_FIELD_FAX] = $this->office_fax;
|
||||
if ($this->note && ! empty($conf->global->LDAP_FIELD_DESCRIPTION)) $info[$conf->global->LDAP_FIELD_DESCRIPTION] = $this->note;
|
||||
if ($this->email && ! empty($conf->global->LDAP_FIELD_MAIL)) $info[$conf->global->LDAP_FIELD_MAIL] = $this->email;
|
||||
if ($this->skype && ! empty($conf->global->LDAP_FIELD_SKYPE)) $info[$conf->global->LDAP_FIELD_SKYPE] = $this->skype;
|
||||
if ($this->skype && ! empty($conf->global->LDAP_FIELD_SKYPE)) $info[$conf->global->LDAP_FIELD_SKYPE] = $this->skype;
|
||||
|
||||
if ($conf->global->LDAP_SERVER_TYPE == 'egroupware')
|
||||
{
|
||||
@@ -1994,7 +1994,7 @@ class User extends CommonObject
|
||||
$this->firstname='SPECIMEN';
|
||||
$this->note='This is a note';
|
||||
$this->email='email@specimen.com';
|
||||
$this->skype='tom.hanson';
|
||||
$this->skype='tom.hanson';
|
||||
$this->office_phone='0999999999';
|
||||
$this->office_fax='0999999998';
|
||||
$this->user_mobile='0999999997';
|
||||
@@ -2223,16 +2223,15 @@ class User extends CommonObject
|
||||
|
||||
/**
|
||||
* Reconstruit l'arborescence hierarchique des users sous la forme d'un tableau
|
||||
* Renvoi un tableau de tableau('id','id_parent',...) trie selon arbre et avec:
|
||||
* id = id du user
|
||||
* id_parent = id du user parent
|
||||
* id_children = tableau des id enfant
|
||||
* name = nom du user
|
||||
* Set and return this->users that is an array sorted according to tree with arrays of:
|
||||
* id = id user
|
||||
* lastname
|
||||
* firstname
|
||||
* fullname = nom avec chemin complet du user
|
||||
* fullpath = chemin complet compose des id
|
||||
* fullpath = chemin complet compose des id: "_grandparentid_parentid_id"
|
||||
*
|
||||
* @param int $deleteafterid Removed all users including the leaf $deleteafterid (and all its child) in user tree.
|
||||
* @return array Array of users. this->users and this->parentof are set.
|
||||
* @return array Array of users $this->users. Note: $this->parentof is also set.
|
||||
*/
|
||||
function get_full_tree($deleteafterid=0)
|
||||
{
|
||||
@@ -2311,6 +2310,29 @@ class User extends CommonObject
|
||||
return $this->users;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return list of all childs users in herarchy.
|
||||
*
|
||||
* @return array Array of user id lower than user. This overwrite this->users.
|
||||
*/
|
||||
function getAllChildIds()
|
||||
{
|
||||
// Init this->users
|
||||
$this->get_full_tree();
|
||||
|
||||
$idtoscan=$this->id;
|
||||
$childids=array();
|
||||
|
||||
dol_syslog("Build childid for id = ".$idtoscan);
|
||||
foreach($this->users as $id => $val)
|
||||
{
|
||||
//var_dump($val['fullpath']);
|
||||
if (preg_match('/_'.$idtoscan.'_/', $val['fullpath'])) $childids[$val['id']]=$val['id'];
|
||||
}
|
||||
|
||||
return $childids;
|
||||
}
|
||||
|
||||
/**
|
||||
* For user id_user and its childs available in this->users, define property fullpath and fullname
|
||||
*
|
||||
|
||||
@@ -62,7 +62,7 @@ print_fiche_titre($langs->trans("ListOfUsers"). ' ('.$langs->trans("HierarchicVi
|
||||
|
||||
|
||||
|
||||
// Charge tableau des categories
|
||||
// Load hierarchy of users
|
||||
$user_arbo = $userstatic->get_full_tree();
|
||||
|
||||
// Define fulltree array
|
||||
|
||||
Reference in New Issue
Block a user