Merge remote-tracking branch 'Upstream/develop' into develop-bank
This commit is contained in:
commit
c30728326e
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||||
* Copyright (C) 2004-2012 Laurent Destailleur <eldy@users.sourceforge.net>
|
* Copyright (C) 2004-2015 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
|
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
@ -46,7 +46,7 @@ class modMyModule extends DolibarrModules
|
|||||||
|
|
||||||
// Id for module (must be unique).
|
// Id for module (must be unique).
|
||||||
// Use here a free id (See in Home -> System information -> Dolibarr for list of used modules id).
|
// Use here a free id (See in Home -> System information -> Dolibarr for list of used modules id).
|
||||||
$this->numero = 100000;
|
$this->numero = 500000; // TODO Go on page http://wiki.dolibarr.org/index.php/List_of_modules_id to reserve id number for your module
|
||||||
// Key text used to identify module (for permissions, menus, etc...)
|
// Key text used to identify module (for permissions, menus, etc...)
|
||||||
$this->rights_class = 'mymodule';
|
$this->rights_class = 'mymodule';
|
||||||
|
|
||||||
|
|||||||
@ -113,11 +113,11 @@ print '</tr>';
|
|||||||
|
|
||||||
print "</table>\n";
|
print "</table>\n";
|
||||||
|
|
||||||
print '</form>';
|
|
||||||
|
|
||||||
dol_fiche_end();
|
dol_fiche_end();
|
||||||
|
|
||||||
print '<div style="text-align:center"><input type="submit" class="button" value="'.$langs->trans('Modify').'" name="button"></div>';
|
print '<div style="text-align:center"><input type="submit" class="button" value="'.$langs->trans('Modify').'" name="button"></div>';
|
||||||
|
|
||||||
|
print '</form>';
|
||||||
|
|
||||||
llxFooter();
|
llxFooter();
|
||||||
$db->close();
|
$db->close();
|
||||||
|
|||||||
@ -59,39 +59,39 @@ $result = getURLContent('http://sourceforge.net/projects/dolibarr/rss');
|
|||||||
$sfurl = simplexml_load_string($result['content']);
|
$sfurl = simplexml_load_string($result['content']);
|
||||||
if ($sfurl)
|
if ($sfurl)
|
||||||
{
|
{
|
||||||
$title=$sfurl->channel[0]->item[0]->title;
|
$i=0;
|
||||||
|
$version='0.0';
|
||||||
|
while (! empty($sfurl->channel[0]->item[$i]->title) && $i < 10000)
|
||||||
|
{
|
||||||
|
$title=$sfurl->channel[0]->item[$i]->title;
|
||||||
|
if (preg_match('/([0-9]+\.([0-9\.]+))/', $title, $reg))
|
||||||
|
{
|
||||||
|
$newversion=$reg[1];
|
||||||
|
$newversionarray=explode('.',$newversion);
|
||||||
|
$versionarray=explode('.',$version);
|
||||||
|
//var_dump($newversionarray);var_dump($versionarray);
|
||||||
|
if (versioncompare($newversionarray, $versionarray) > 0) $version=$newversion;
|
||||||
|
}
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
function word_limiter($text, $limit = 30, $chars = '0123456789.')
|
// Show version
|
||||||
{
|
if ($version != '0.0')
|
||||||
if (strlen( $text ) > $limit)
|
{
|
||||||
{
|
print ' ('.$langs->trans("LastStableVersion").': <b>'.$version.'</b>';
|
||||||
$words = str_word_count($text, 2, $chars);
|
if (DOL_VERSION == $version)
|
||||||
$words = array_reverse($words, TRUE);
|
{
|
||||||
foreach($words as $length => $word) {
|
$youuselaststable=1;
|
||||||
if ($length + strlen( $word ) >= $limit)
|
print $langs->trans("YouUseLastStableVersion");
|
||||||
{
|
}
|
||||||
array_shift($words);
|
print ')';
|
||||||
} else {
|
}
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$words = array_reverse($words);
|
|
||||||
$text = implode(" ", $words) . '';
|
|
||||||
}
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
$str = word_limiter($title);
|
|
||||||
$str = preg_replace('/[^0-9\.]/', '', $str);
|
|
||||||
print ' ('.$langs->trans("LastStableVersion").': <b>'.$str.'</b>';
|
|
||||||
if (DOL_VERSION == $str)
|
|
||||||
{
|
|
||||||
$youuselaststable=1;
|
|
||||||
print $langs->trans("YouUseLastStableVersion");
|
|
||||||
}
|
|
||||||
print ')';
|
|
||||||
print ' / <a href="http://www.gnu.org/copyleft/gpl.html">GNU-GPL v3+</a></li>';
|
print ' / <a href="http://www.gnu.org/copyleft/gpl.html">GNU-GPL v3+</a></li>';
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print $langs->trans("LastStableVersion").' : <b>' .$langs->trans("UpdateServerOffline").'</b><br>';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
print '</ul>';
|
print '</ul>';
|
||||||
|
|||||||
@ -23,6 +23,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
|
include_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php';
|
||||||
include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
|
include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
|
||||||
include_once DOL_DOCUMENT_ROOT . '/core/lib/geturl.lib.php';
|
include_once DOL_DOCUMENT_ROOT . '/core/lib/geturl.lib.php';
|
||||||
|
|
||||||
@ -172,30 +173,24 @@ $result = getURLContent('http://sourceforge.net/projects/dolibarr/rss');
|
|||||||
$sfurl = simplexml_load_string($result['content']);
|
$sfurl = simplexml_load_string($result['content']);
|
||||||
if ($sfurl)
|
if ($sfurl)
|
||||||
{
|
{
|
||||||
$title=$sfurl->channel[0]->item[0]->title;
|
$i=0;
|
||||||
|
$version='0.0';
|
||||||
function word_limiter($text, $limit = 30, $chars = '0123456789.')
|
while (! empty($sfurl->channel[0]->item[$i]->title) && $i < 10000)
|
||||||
{
|
{
|
||||||
if (strlen( $text ) > $limit)
|
$title=$sfurl->channel[0]->item[$i]->title;
|
||||||
{
|
if (preg_match('/([0-9]+\.([0-9\.]+))/', $title, $reg))
|
||||||
$words = str_word_count($text, 2, $chars);
|
{
|
||||||
$words = array_reverse($words, TRUE);
|
$newversion=$reg[1];
|
||||||
foreach($words as $length => $word) {
|
$newversionarray=explode('.',$newversion);
|
||||||
if ($length + strlen( $word ) >= $limit)
|
$versionarray=explode('.',$version);
|
||||||
{
|
//var_dump($newversionarray);var_dump($versionarray);
|
||||||
array_shift($words);
|
if (versioncompare($newversionarray, $versionarray) > 0) $version=$newversion;
|
||||||
} else {
|
}
|
||||||
break;
|
$i++;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
$words = array_reverse($words);
|
// Show version
|
||||||
$text = implode(" ", $words) . '';
|
print $langs->trans("LastStableVersion").' : <b>'. (($version != '0.0')?$version:$langs->trans("Unknown")) .'</b><br>';
|
||||||
}
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
$str = $title;
|
|
||||||
print $langs->trans("LastStableVersion").' : <b>'. word_limiter( $str ).'</b><br>';
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@ -3886,9 +3886,9 @@ else if ($id > 0 || ! empty($ref))
|
|||||||
$formmail->withtocc = $liste; // List suggested for CC
|
$formmail->withtocc = $liste; // List suggested for CC
|
||||||
$formmail->withtoccc = $conf->global->MAIN_EMAIL_USECCC;
|
$formmail->withtoccc = $conf->global->MAIN_EMAIL_USECCC;
|
||||||
if (empty($object->ref_client)) {
|
if (empty($object->ref_client)) {
|
||||||
$formmail->withtopic = $outputlangs->transnoentities($topicmail, '__FACREF__');
|
$formmail->withtopic = $outputlangs->transnoentities($topicmail, '__REF__');
|
||||||
} else if (! empty($object->ref_client)) {
|
} else if (! empty($object->ref_client)) {
|
||||||
$formmail->withtopic = $outputlangs->transnoentities($topicmail, '__FACREF__ (__REFCLIENT__)');
|
$formmail->withtopic = $outputlangs->transnoentities($topicmail, '__REF__ (__REFCLIENT__)');
|
||||||
}
|
}
|
||||||
|
|
||||||
$formmail->withfile = 2;
|
$formmail->withfile = 2;
|
||||||
@ -3896,7 +3896,7 @@ else if ($id > 0 || ! empty($ref))
|
|||||||
$formmail->withdeliveryreceipt = 1;
|
$formmail->withdeliveryreceipt = 1;
|
||||||
$formmail->withcancel = 1;
|
$formmail->withcancel = 1;
|
||||||
// Tableau des substitutions
|
// Tableau des substitutions
|
||||||
$formmail->substit['__FACREF__'] = $object->ref;
|
$formmail->substit['__REF__'] = $object->ref;
|
||||||
$formmail->substit['__SIGNATURE__'] = $user->signature;
|
$formmail->substit['__SIGNATURE__'] = $user->signature;
|
||||||
$formmail->substit['__REFCLIENT__'] = $object->ref_client;
|
$formmail->substit['__REFCLIENT__'] = $object->ref_client;
|
||||||
$formmail->substit['__THIRDPARTY_NAME__'] = $object->thirdparty->name;
|
$formmail->substit['__THIRDPARTY_NAME__'] = $object->thirdparty->name;
|
||||||
|
|||||||
@ -3687,11 +3687,9 @@ class Facture extends CommonInvoice
|
|||||||
|
|
||||||
$now = dol_now();
|
$now = dol_now();
|
||||||
|
|
||||||
//Paid invoices have status STATUS_CLOSED
|
// Paid invoices have status STATUS_CLOSED
|
||||||
if (!$this->statut != Facture::STATUS_VALIDATED) {
|
if ($this->statut != Facture::STATUS_VALIDATED) return false;
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->date_lim_reglement < ($now - $conf->facture->client->warning_delay);
|
return $this->date_lim_reglement < ($now - $conf->facture->client->warning_delay);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -60,6 +60,7 @@ $id=(GETPOST('id','int')?GETPOST('id','int'):GETPOST('facid','int')); // For ba
|
|||||||
$ref=GETPOST('ref','alpha');
|
$ref=GETPOST('ref','alpha');
|
||||||
$socid=GETPOST('socid','int');
|
$socid=GETPOST('socid','int');
|
||||||
$action=GETPOST('action','alpha');
|
$action=GETPOST('action','alpha');
|
||||||
|
$massaction=GETPOST('massaction','alpha');
|
||||||
$confirm=GETPOST('confirm','alpha');
|
$confirm=GETPOST('confirm','alpha');
|
||||||
$lineid=GETPOST('lineid','int');
|
$lineid=GETPOST('lineid','int');
|
||||||
$userid=GETPOST('userid','int');
|
$userid=GETPOST('userid','int');
|
||||||
@ -70,6 +71,9 @@ $search_societe=GETPOST('search_societe','alpha');
|
|||||||
$search_montant_ht=GETPOST('search_montant_ht','alpha');
|
$search_montant_ht=GETPOST('search_montant_ht','alpha');
|
||||||
$search_montant_ttc=GETPOST('search_montant_ttc','alpha');
|
$search_montant_ttc=GETPOST('search_montant_ttc','alpha');
|
||||||
$search_status=GETPOST('search_status','int');
|
$search_status=GETPOST('search_status','int');
|
||||||
|
$search_paymentmode=GETPOST('search_paymentmode','int');
|
||||||
|
$option = GETPOST('option');
|
||||||
|
if ($option == 'late') $filter = 'paye:0';
|
||||||
|
|
||||||
$sortfield = GETPOST("sortfield",'alpha');
|
$sortfield = GETPOST("sortfield",'alpha');
|
||||||
$sortorder = GETPOST("sortorder",'alpha');
|
$sortorder = GETPOST("sortorder",'alpha');
|
||||||
@ -94,6 +98,7 @@ $day_lim = GETPOST('day_lim','int');
|
|||||||
$month_lim = GETPOST('month_lim','int');
|
$month_lim = GETPOST('month_lim','int');
|
||||||
$year_lim = GETPOST('year_lim','int');
|
$year_lim = GETPOST('year_lim','int');
|
||||||
$filtre = GETPOST('filtre');
|
$filtre = GETPOST('filtre');
|
||||||
|
$toselect = GETPOST('toselect', 'array');
|
||||||
|
|
||||||
// Security check
|
// Security check
|
||||||
$fieldid = (! empty($ref)?'facnumber':'rowid');
|
$fieldid = (! empty($ref)?'facnumber':'rowid');
|
||||||
@ -122,9 +127,290 @@ if (empty($user->socid)) $fieldstosearchall["f.note_private"]="NotePrivate";
|
|||||||
* Actions
|
* Actions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if (GETPOST('cancel')) { $action='list'; $massaction=''; }
|
||||||
|
|
||||||
$parameters=array('socid'=>$socid);
|
$parameters=array('socid'=>$socid);
|
||||||
$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
|
$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
|
||||||
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
||||||
|
if (empty($reshook))
|
||||||
|
{
|
||||||
|
// Mass actions
|
||||||
|
if (! empty($massaction) && count($toselect) < 1)
|
||||||
|
{
|
||||||
|
$error++;
|
||||||
|
setEventMessage("NoLineChecked","warnings");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $error && $massaction == 'confirm_presend')
|
||||||
|
{
|
||||||
|
$resaction = '';
|
||||||
|
$nbsent = 0;
|
||||||
|
$nbignored = 0;
|
||||||
|
$langs->load("mails");
|
||||||
|
include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||||
|
|
||||||
|
if (!isset($user->email))
|
||||||
|
{
|
||||||
|
$error++;
|
||||||
|
setEventMessages($langs->trans("NoSenderEmailDefined"), null, 'warnings');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
$thirdparty=new Societe($db);
|
||||||
|
$objecttmp=new Facture($db);
|
||||||
|
$listofobjectid=array();
|
||||||
|
$listofobjectthirdparties=array();
|
||||||
|
$listofobjectref=array();
|
||||||
|
foreach($toselect as $toselectid)
|
||||||
|
{
|
||||||
|
$objecttmp=new Facture($db); // must create new instance because instance is saved into $listofobjectref array for future use
|
||||||
|
$result=$objecttmp->fetch($toselectid);
|
||||||
|
if ($result > 0)
|
||||||
|
{
|
||||||
|
$listoinvoicesid[$toselectid]=$toselectid;
|
||||||
|
$thirdpartyid=$objecttmp->fk_soc?$objecttmp->fk_soc:$objecttmp->socid;
|
||||||
|
$listofobjectthirdparties[$thirdpartyid]=$thirdpartyid;
|
||||||
|
$listofobjectref[$thirdpartyid][$toselectid]=$objecttmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//var_dump($listofobjectthirdparties);exit;
|
||||||
|
|
||||||
|
foreach ($listofobjectthirdparties as $thirdpartyid)
|
||||||
|
{
|
||||||
|
$result = $thirdparty->fetch($thirdpartyid);
|
||||||
|
if ($result < 0)
|
||||||
|
{
|
||||||
|
dol_print_error($db);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Define recipient $sendto and $sendtocc
|
||||||
|
if (trim($_POST['sendto']))
|
||||||
|
{
|
||||||
|
// Recipient is provided into free text
|
||||||
|
$sendto = trim($_POST['sendto']);
|
||||||
|
$sendtoid = 0;
|
||||||
|
}
|
||||||
|
elseif ($_POST['receiver'] != '-1')
|
||||||
|
{
|
||||||
|
// Recipient was provided from combo list
|
||||||
|
if ($_POST['receiver'] == 'thirdparty') // Id of third party
|
||||||
|
{
|
||||||
|
$sendto = $thirdparty->email;
|
||||||
|
$sendtoid = 0;
|
||||||
|
}
|
||||||
|
else // Id du contact
|
||||||
|
{
|
||||||
|
$sendto = $thirdparty->contact_get_property((int) $_POST['receiver'],'email');
|
||||||
|
$sendtoid = $_POST['receiver'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (trim($_POST['sendtocc']))
|
||||||
|
{
|
||||||
|
$sendtocc = trim($_POST['sendtocc']);
|
||||||
|
}
|
||||||
|
elseif ($_POST['receivercc'] != '-1')
|
||||||
|
{
|
||||||
|
// Recipient was provided from combo list
|
||||||
|
if ($_POST['receivercc'] == 'thirdparty') // Id of third party
|
||||||
|
{
|
||||||
|
$sendtocc = $thirdparty->email;
|
||||||
|
}
|
||||||
|
else // Id du contact
|
||||||
|
{
|
||||||
|
$sendtocc = $thirdparty->contact_get_property((int) $_POST['receivercc'],'email');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//var_dump($listofobjectref[$thirdpartyid]); // Array of invoice for this thirdparty
|
||||||
|
|
||||||
|
$attachedfiles=array('paths'=>array(), 'names'=>array(), 'mimes'=>array());
|
||||||
|
$listofqualifiedinvoice=array();
|
||||||
|
$listofqualifiedref=array();
|
||||||
|
foreach($listofobjectref[$thirdpartyid] as $objectid => $object)
|
||||||
|
{
|
||||||
|
//var_dump($object);
|
||||||
|
//var_dump($thirdpartyid.' - '.$objectid.' - '.$object->statut);
|
||||||
|
|
||||||
|
if ($object->statut != Facture::STATUS_VALIDATED)
|
||||||
|
{
|
||||||
|
$nbignored++;
|
||||||
|
continue; // Payment done or started or canceled
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read document
|
||||||
|
// TODO Use future field $object->fullpathdoc to know where is stored default file
|
||||||
|
// TODO If not defined, use $object->modelpdf (or defaut invoice config) to know what is template to use to regenerate doc.
|
||||||
|
$filename=dol_sanitizeFileName($object->ref).'.pdf';
|
||||||
|
$filedir=$conf->facture->dir_output . '/' . dol_sanitizeFileName($object->ref);
|
||||||
|
$file = $filedir . '/' . $filename;
|
||||||
|
$mime = dol_mimetype($file);
|
||||||
|
|
||||||
|
if (dol_is_file($file))
|
||||||
|
{
|
||||||
|
if (empty($sendto)) // For the case, no recipient were set (multi thirdparties send)
|
||||||
|
{
|
||||||
|
$object->fetch_thirdparty();
|
||||||
|
$sendto = $object->thirdparty->email;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($sendto))
|
||||||
|
{
|
||||||
|
//print "No recipient for thirdparty ".$object->thirdparty->name;
|
||||||
|
$nbignored++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dol_strlen($sendto))
|
||||||
|
{
|
||||||
|
// Create form object
|
||||||
|
$attachedfiles=array(
|
||||||
|
'paths'=>array_merge($attachedfiles['paths'],array($file)),
|
||||||
|
'names'=>array_merge($attachedfiles['names'],array($filename)),
|
||||||
|
'mimes'=>array_merge($attachedfiles['mimes'],array($mime))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$listofqualifiedinvoice[$objectid]=$object;
|
||||||
|
$listofqualifiedref[$objectid]=$object->ref;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$nbignored++;
|
||||||
|
$langs->load("other");
|
||||||
|
$resaction.='<div class="error">'.$langs->trans('ErrorCantReadFile',$file).'</div>';
|
||||||
|
dol_syslog('Failed to read file: '.$file, LOG_WARNING);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//var_dump($listofqualifiedref);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count($listofqualifiedinvoice) > 0)
|
||||||
|
{
|
||||||
|
$langs->load("commercial");
|
||||||
|
$from = $user->getFullName($langs) . ' <' . $user->email .'>';
|
||||||
|
$replyto = $from;
|
||||||
|
$subject = GETPOST('subject');
|
||||||
|
$message = GETPOST('message');
|
||||||
|
$sendtocc = GETPOST('sentocc');
|
||||||
|
$sendtobcc = (empty($conf->global->MAIN_MAIL_AUTOCOPY_INVOICE_TO)?'':$conf->global->MAIN_MAIL_AUTOCOPY_INVOICE_TO);
|
||||||
|
|
||||||
|
$substitutionarray=array(
|
||||||
|
'__ID__' => join(', ',array_keys($listofqualifiedinvoice)),
|
||||||
|
'__EMAIL__' => $thirdparty->email,
|
||||||
|
'__CHECK_READ__' => '<img src="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-read.php?tag='.$thirdparty->tag.'&securitykey='.urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY).'" width="1" height="1" style="width:1px;height:1px" border="0"/>',
|
||||||
|
//'__LASTNAME__' => $obj2->lastname,
|
||||||
|
//'__FIRSTNAME__' => $obj2->firstname,
|
||||||
|
'__FACREF__' => join(', ',$listofqualifiedref), // For backward compatibility
|
||||||
|
'__REF__' => join(', ',$listofqualifiedref),
|
||||||
|
'__REFCLIENT__' => $thirdparty->name
|
||||||
|
);
|
||||||
|
|
||||||
|
$subject=make_substitutions($subject, $substitutionarray);
|
||||||
|
$message=make_substitutions($message, $substitutionarray);
|
||||||
|
|
||||||
|
$filepath = $attachedfiles['paths'];
|
||||||
|
$filename = $attachedfiles['names'];
|
||||||
|
$mimetype = $attachedfiles['mimes'];
|
||||||
|
|
||||||
|
//var_dump($filepath);
|
||||||
|
|
||||||
|
// Send mail
|
||||||
|
require_once(DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php');
|
||||||
|
$mailfile = new CMailFile($subject,$sendto,$from,$message,$filepath,$mimetype,$filename,$sendtocc,$sendtobcc,$deliveryreceipt,-1);
|
||||||
|
if ($mailfile->error)
|
||||||
|
{
|
||||||
|
$resaction.='<div class="error">'.$mailfile->error.'</div>';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$result=$mailfile->sendfile();
|
||||||
|
if ($result)
|
||||||
|
{
|
||||||
|
$resaction.=$langs->trans('MailSuccessfulySent',$mailfile->getValidAddress($from,2),$mailfile->getValidAddress($sendto,2)); // Must not contain "
|
||||||
|
|
||||||
|
$error=0;
|
||||||
|
|
||||||
|
foreach($listofqualifiedinvoice as $invid => $object)
|
||||||
|
{
|
||||||
|
$actiontypecode='AC_FAC';
|
||||||
|
$actionmsg=$langs->transnoentities('MailSentBy').' '.$from.' '.$langs->transnoentities('To').' '.$sendto;
|
||||||
|
if ($message)
|
||||||
|
{
|
||||||
|
if ($sendtocc) $actionmsg = dol_concatdesc($actionmsg, $langs->transnoentities('Bcc') . ": " . $sendtocc);
|
||||||
|
$actionmsg = dol_concatdesc($actionmsg, $langs->transnoentities('MailTopic') . ": " . $subject);
|
||||||
|
$actionmsg = dol_concatdesc($actionmsg, $langs->transnoentities('TextUsedInTheMessageBody') . ":");
|
||||||
|
$actionmsg = dol_concatdesc($actionmsg, $message);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialisation donnees
|
||||||
|
$object->sendtoid = 0;
|
||||||
|
$object->actiontypecode = $actiontypecode;
|
||||||
|
$object->actionmsg = $actionmsg; // Long text
|
||||||
|
$object->actionmsg2 = $actionmsg2; // Short text
|
||||||
|
$object->fk_element = $invid;
|
||||||
|
$object->elementtype = $object->element;
|
||||||
|
|
||||||
|
// Appel des triggers
|
||||||
|
include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
|
||||||
|
$interface=new Interfaces($db);
|
||||||
|
$result=$interface->run_triggers('BILL_SENTBYMAIL',$object,$user,$langs,$conf);
|
||||||
|
if ($result < 0) { $error++; $this->errors=$interface->errors; }
|
||||||
|
// Fin appel triggers
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
$resaction.=$langs->trans("MailSent").': '.$sendto."<br>\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
$nbsent++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$langs->load("other");
|
||||||
|
if ($mailfile->error)
|
||||||
|
{
|
||||||
|
$resaction.=$langs->trans('ErrorFailedToSendMail',$from,$sendto);
|
||||||
|
$resaction.='<br><div class="error">'.$mailfile->error.'</div>';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$resaction.='<div class="warning">No mail sent. Feature is disabled by option MAIN_DISABLE_ALL_MAILS</div>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$resaction.=($resaction?'<br>':$resaction);
|
||||||
|
$resaction.='<strong>'.$langs->trans("ResultOfMailSending").':</strong><br>'."\n";
|
||||||
|
$resaction.=$langs->trans("NbSelected").': '.count($toselect)."\n<br>";
|
||||||
|
$resaction.=$langs->trans("NbIgnored").': '.($nbignored?$nbignored:0)."\n<br>";
|
||||||
|
$resaction.=$langs->trans("NbSent").': '.($nbsent?$nbsent:0)."\n<br>";
|
||||||
|
|
||||||
|
if ($nbsent)
|
||||||
|
{
|
||||||
|
$action=''; // Do not show form post if there was at least one successfull sent
|
||||||
|
setEventMessages($langs->trans("EMailSentToNRecipients", $nbsent.'/'.count($toselect)), null, 'mesgs');
|
||||||
|
setEventMessages($resaction, null, 'mesgs');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//setEventMessages($langs->trans("EMailSentToNRecipients", 0), null, 'warnings'); // May be object has no generated PDF file
|
||||||
|
setEventMessages($resaction, null, 'warnings');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$action='list';
|
||||||
|
$massaction='';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Do we click on purge search criteria ?
|
// Do we click on purge search criteria ?
|
||||||
if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers
|
if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers
|
||||||
@ -139,9 +425,13 @@ if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both
|
|||||||
$search_montant_ht='';
|
$search_montant_ht='';
|
||||||
$search_montant_ttc='';
|
$search_montant_ttc='';
|
||||||
$search_status='';
|
$search_status='';
|
||||||
|
$search_paymentmode='';
|
||||||
$day='';
|
$day='';
|
||||||
$year='';
|
$year='';
|
||||||
$month='';
|
$month='';
|
||||||
|
$toselect='';
|
||||||
|
$option='';
|
||||||
|
$filter='';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -160,7 +450,7 @@ $facturestatic=new Facture($db);
|
|||||||
|
|
||||||
$sql = 'SELECT';
|
$sql = 'SELECT';
|
||||||
if ($sall || $search_product_category > 0) $sql = 'SELECT DISTINCT';
|
if ($sall || $search_product_category > 0) $sql = 'SELECT DISTINCT';
|
||||||
$sql.= ' f.rowid as facid, f.facnumber, f.ref_client, f.type, f.note_private, f.increment, f.total as total_ht, f.tva as total_tva, f.total_ttc,';
|
$sql.= ' f.rowid as facid, f.facnumber, f.ref_client, f.type, f.note_private, f.increment, f.fk_mode_reglement, f.total as total_ht, f.tva as total_tva, f.total_ttc,';
|
||||||
$sql.= ' f.datef as df, f.date_lim_reglement as datelimite,';
|
$sql.= ' f.datef as df, f.date_lim_reglement as datelimite,';
|
||||||
$sql.= ' f.paye as paye, f.fk_statut,';
|
$sql.= ' f.paye as paye, f.fk_statut,';
|
||||||
$sql.= ' s.nom as name, s.rowid as socid, s.code_client, s.client ';
|
$sql.= ' s.nom as name, s.rowid as socid, s.code_client, s.client ';
|
||||||
@ -203,6 +493,7 @@ if ($search_societe) $sql .= natural_search('s.nom', $search_societe);
|
|||||||
if ($search_montant_ht != '') $sql.= natural_search('f.total', $search_montant_ht, 1);
|
if ($search_montant_ht != '') $sql.= natural_search('f.total', $search_montant_ht, 1);
|
||||||
if ($search_montant_ttc != '') $sql.= natural_search('f.total_ttc', $search_montant_ttc, 1);
|
if ($search_montant_ttc != '') $sql.= natural_search('f.total_ttc', $search_montant_ttc, 1);
|
||||||
if ($search_status != '' && $search_status >= 0) $sql.= " AND f.fk_statut = ".$db->escape($search_status);
|
if ($search_status != '' && $search_status >= 0) $sql.= " AND f.fk_statut = ".$db->escape($search_status);
|
||||||
|
if ($search_paymentmode > 0) $sql .= " AND f.fk_mode_reglement = ".$search_paymentmode."";
|
||||||
if ($month > 0)
|
if ($month > 0)
|
||||||
{
|
{
|
||||||
if ($year > 0 && empty($day))
|
if ($year > 0 && empty($day))
|
||||||
@ -229,6 +520,8 @@ else if ($year_lim > 0)
|
|||||||
{
|
{
|
||||||
$sql.= " AND f.date_lim_reglement BETWEEN '".$db->idate(dol_get_first_day($year_lim,1,false))."' AND '".$db->idate(dol_get_last_day($year_lim,12,false))."'";
|
$sql.= " AND f.date_lim_reglement BETWEEN '".$db->idate(dol_get_first_day($year_lim,1,false))."' AND '".$db->idate(dol_get_last_day($year_lim,12,false))."'";
|
||||||
}
|
}
|
||||||
|
if ($option == 'late') $sql.=" AND f.date_lim_reglement < '".$db->idate(dol_now() - $conf->facture->client->warning_delay)."'";
|
||||||
|
if ($filter == 'paye:0') $sql.= " AND f.fk_statut = 1";
|
||||||
if ($search_sale > 0) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$search_sale;
|
if ($search_sale > 0) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$search_sale;
|
||||||
if ($search_user > 0)
|
if ($search_user > 0)
|
||||||
{
|
{
|
||||||
@ -265,6 +558,8 @@ if ($resql)
|
|||||||
{
|
{
|
||||||
$num = $db->num_rows($resql);
|
$num = $db->num_rows($resql);
|
||||||
|
|
||||||
|
$arrayofselected=is_array($toselect)?$toselect:array();
|
||||||
|
|
||||||
if ($socid)
|
if ($socid)
|
||||||
{
|
{
|
||||||
$soc = new Societe($db);
|
$soc = new Societe($db);
|
||||||
@ -282,10 +577,113 @@ if ($resql)
|
|||||||
if ($search_montant_ht != '') $param.='&search_montant_ht='.$search_montant_ht;
|
if ($search_montant_ht != '') $param.='&search_montant_ht='.$search_montant_ht;
|
||||||
if ($search_montant_ttc != '') $param.='&search_montant_ttc='.$search_montant_ttc;
|
if ($search_montant_ttc != '') $param.='&search_montant_ttc='.$search_montant_ttc;
|
||||||
if ($search_status != '') $param.='&search_status='.$search_status;
|
if ($search_status != '') $param.='&search_status='.$search_status;
|
||||||
print_barre_liste($langs->trans('BillsCustomers').' '.($socid?' '.$soc->name:''),$page,$_SERVER["PHP_SELF"],$param,$sortfield,$sortorder,'',$num,$nbtotalofrecords,'title_accountancy.png');
|
if ($search_paymentmode > 0) $param.='search_paymentmode='.$search_paymentmode;
|
||||||
|
$param.=(! empty($option)?"&option=".$option:"");
|
||||||
|
|
||||||
|
$massactionbutton=$form->selectMassAction('', $massaction ? array() : array('presend'=>$langs->trans("SendByMail")));
|
||||||
|
|
||||||
$i = 0;
|
$i = 0;
|
||||||
print '<form method="GET" action="'.$_SERVER["PHP_SELF"].'">'."\n";
|
print '<form method="POST" name="searchFormList" action="'.$_SERVER["PHP_SELF"].'">'."\n";
|
||||||
|
|
||||||
|
print_barre_liste($langs->trans('BillsCustomers').' '.($socid?' '.$soc->name:''),$page,$_SERVER["PHP_SELF"],$param,$sortfield,$sortorder,$massactionbutton,$num,$nbtotalofrecords,'title_accountancy.png');
|
||||||
|
|
||||||
|
if ($massaction == 'presend')
|
||||||
|
{
|
||||||
|
$langs->load("mails");
|
||||||
|
|
||||||
|
if (! GETPOST('cancel'))
|
||||||
|
{
|
||||||
|
$objecttmp=new Facture($db);
|
||||||
|
$listofselectedid=array();
|
||||||
|
$listofselectedthirdparties=array();
|
||||||
|
$listofselectedref=array();
|
||||||
|
foreach($arrayofselected as $toselectid)
|
||||||
|
{
|
||||||
|
$result=$objecttmp->fetch($toselectid);
|
||||||
|
if ($result > 0)
|
||||||
|
{
|
||||||
|
$listofselectedid[$toselectid]=$toselectid;
|
||||||
|
$thirdpartyid=$objecttmp->fk_soc?$objecttmp->fk_soc:$objecttmp->socid;
|
||||||
|
$listofselectedthirdparties[$thirdpartyid]=$thirdpartyid;
|
||||||
|
$listofselectedref[$thirdpartyid][$toselectid]=$objecttmp->ref;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
print '<input type="hidden" name="massaction" value="confirm_presend">';
|
||||||
|
|
||||||
|
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
|
||||||
|
$formmail = new FormMail($db);
|
||||||
|
|
||||||
|
dol_fiche_head(null, '', $langs->trans("SendByMail"));
|
||||||
|
|
||||||
|
$topicmail="SendBillRef";
|
||||||
|
$modelmail="facture_send";
|
||||||
|
|
||||||
|
// Cree l'objet formulaire mail
|
||||||
|
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
|
||||||
|
$formmail = new FormMail($db);
|
||||||
|
$formmail->withform=-1;
|
||||||
|
$formmail->fromtype = 'user';
|
||||||
|
$formmail->fromid = $user->id;
|
||||||
|
$formmail->fromname = $user->getFullName($langs);
|
||||||
|
$formmail->frommail = $user->email;
|
||||||
|
if (! empty($conf->global->MAIN_EMAIL_ADD_TRACK_ID) && ($conf->global->MAIN_EMAIL_ADD_TRACK_ID & 1)) // If bit 1 is set
|
||||||
|
{
|
||||||
|
$formmail->trackid='inv'.$object->id;
|
||||||
|
}
|
||||||
|
if (! empty($conf->global->MAIN_EMAIL_ADD_TRACK_ID) && ($conf->global->MAIN_EMAIL_ADD_TRACK_ID & 2)) // If bit 2 is set
|
||||||
|
{
|
||||||
|
include DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
|
||||||
|
$formmail->frommail=dolAddEmailTrackId($formmail->frommail, 'inv'.$object->id);
|
||||||
|
}
|
||||||
|
$formmail->withfrom=1;
|
||||||
|
$liste=$langs->trans("AllRecipientSelected");
|
||||||
|
if (count($listofselectedthirdparties) == 1)
|
||||||
|
{
|
||||||
|
$liste=array();
|
||||||
|
$thirdpartyid=array_shift($listofselectedthirdparties);
|
||||||
|
$soc=new Societe($db);
|
||||||
|
$soc->fetch($thirdpartyid);
|
||||||
|
foreach ($soc->thirdparty_and_contact_email_array(1) as $key=>$value)
|
||||||
|
{
|
||||||
|
$liste[$key]=$value;
|
||||||
|
}
|
||||||
|
$formmail->withtoreadonly=0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$formmail->withtoreadonly=1;
|
||||||
|
}
|
||||||
|
$formmail->withto=$liste;
|
||||||
|
$formmail->withtofree=0;
|
||||||
|
$formmail->withtocc=1;
|
||||||
|
$formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC;
|
||||||
|
$formmail->withtopic=$langs->transnoentities($topicmail, '__REF__', '__REFCLIENT__');
|
||||||
|
$formmail->withfile=$langs->trans("EachInvoiceWillBeAttachedToEmail");
|
||||||
|
$formmail->withbody=1;
|
||||||
|
$formmail->withdeliveryreceipt=1;
|
||||||
|
$formmail->withcancel=1;
|
||||||
|
// Tableau des substitutions
|
||||||
|
$formmail->substit['__REF__']='__REF__'; // We want to keep the tag
|
||||||
|
$formmail->substit['__SIGNATURE__']=$user->signature;
|
||||||
|
$formmail->substit['__REFCLIENT__']='__REFCLIENT__'; // We want to keep the tag
|
||||||
|
$formmail->substit['__PERSONALIZED__']='';
|
||||||
|
$formmail->substit['__CONTACTCIVNAME__']='';
|
||||||
|
|
||||||
|
// Tableau des parametres complementaires du post
|
||||||
|
$formmail->param['action']=$action;
|
||||||
|
$formmail->param['models']=$modelmail;
|
||||||
|
$formmail->param['models_id']=GETPOST('modelmailselected','int');
|
||||||
|
$formmail->param['facid']=join(',',$arrayofselected);
|
||||||
|
//$formmail->param['returnurl']=$_SERVER["PHP_SELF"].'?id='.$object->id;
|
||||||
|
|
||||||
|
print $formmail->get_form();
|
||||||
|
|
||||||
|
dol_fiche_end();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||||
print '<input type="hidden" name="action" value="list">';
|
print '<input type="hidden" name="action" value="list">';
|
||||||
@ -347,8 +745,9 @@ if ($resql)
|
|||||||
print_liste_field_titre($langs->trans('Date'),$_SERVER['PHP_SELF'],'f.datef','',$param,'align="center"',$sortfield,$sortorder);
|
print_liste_field_titre($langs->trans('Date'),$_SERVER['PHP_SELF'],'f.datef','',$param,'align="center"',$sortfield,$sortorder);
|
||||||
print_liste_field_titre($langs->trans("DateDue"),$_SERVER['PHP_SELF'],"f.date_lim_reglement",'',$param,'align="center"',$sortfield,$sortorder);
|
print_liste_field_titre($langs->trans("DateDue"),$_SERVER['PHP_SELF'],"f.date_lim_reglement",'',$param,'align="center"',$sortfield,$sortorder);
|
||||||
print_liste_field_titre($langs->trans('ThirdParty'),$_SERVER['PHP_SELF'],'s.nom','',$param,'',$sortfield,$sortorder);
|
print_liste_field_titre($langs->trans('ThirdParty'),$_SERVER['PHP_SELF'],'s.nom','',$param,'',$sortfield,$sortorder);
|
||||||
|
print_liste_field_titre($langs->trans("PaymentModeShort"),$_SERVER["PHP_SELF"],"f.fk_reglement_mode","",$param,"",$sortfield,$sortorder);
|
||||||
print_liste_field_titre($langs->trans('AmountHT'),$_SERVER['PHP_SELF'],'f.total','',$param,'align="right"',$sortfield,$sortorder);
|
print_liste_field_titre($langs->trans('AmountHT'),$_SERVER['PHP_SELF'],'f.total','',$param,'align="right"',$sortfield,$sortorder);
|
||||||
print_liste_field_titre($langs->trans('AmountVAT'),$_SERVER['PHP_SELF'],'f.tva','',$param,'align="right"',$sortfield,$sortorder);
|
print_liste_field_titre($langs->trans('Taxes'),$_SERVER['PHP_SELF'],'f.tva','',$param,'align="right"',$sortfield,$sortorder);
|
||||||
print_liste_field_titre($langs->trans('AmountTTC'),$_SERVER['PHP_SELF'],'f.total_ttc','',$param,'align="right"',$sortfield,$sortorder);
|
print_liste_field_titre($langs->trans('AmountTTC'),$_SERVER['PHP_SELF'],'f.total_ttc','',$param,'align="right"',$sortfield,$sortorder);
|
||||||
print_liste_field_titre($langs->trans('Received'),$_SERVER['PHP_SELF'],'am','',$param,'align="right"',$sortfield,$sortorder);
|
print_liste_field_titre($langs->trans('Received'),$_SERVER['PHP_SELF'],'am','',$param,'align="right"',$sortfield,$sortorder);
|
||||||
print_liste_field_titre($langs->trans('Status'),$_SERVER['PHP_SELF'],'fk_statut,paye,am','',$param,'align="right"',$sortfield,$sortorder);
|
print_liste_field_titre($langs->trans('Status'),$_SERVER['PHP_SELF'],'fk_statut,paye,am','',$param,'align="right"',$sortfield,$sortorder);
|
||||||
@ -372,8 +771,12 @@ if ($resql)
|
|||||||
if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print '<input class="flat" type="text" size="1" maxlength="2" name="day_lim" value="'.$day_lim.'">';
|
if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print '<input class="flat" type="text" size="1" maxlength="2" name="day_lim" value="'.$day_lim.'">';
|
||||||
print '<input class="flat" type="text" size="1" maxlength="2" name="month_lim" value="'.$month_lim.'">';
|
print '<input class="flat" type="text" size="1" maxlength="2" name="month_lim" value="'.$month_lim.'">';
|
||||||
$formother->select_year($year_lim?$year_lim:-1,'year_lim',1, 20, 5);
|
$formother->select_year($year_lim?$year_lim:-1,'year_lim',1, 20, 5);
|
||||||
|
print '<br><input type="checkbox" name="option" value="late"'.($option == 'late'?' checked':'').'> '.$langs->trans("Late");
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print '<td class="liste_titre" align="left"><input class="flat" type="text" size="8" name="search_societe" value="'.$search_societe.'"></td>';
|
print '<td class="liste_titre" align="left"><input class="flat" type="text" size="8" name="search_societe" value="'.$search_societe.'"></td>';
|
||||||
|
print '<td class="liste_titre" align="left">';
|
||||||
|
$form->select_types_paiements($search_paymentmode, 'search_paymentmode', '', 0, 0, 1, 10);
|
||||||
|
print '</td>';
|
||||||
print '<td class="liste_titre" align="right"><input class="flat" type="text" size="6" name="search_montant_ht" value="'.$search_montant_ht.'"></td>';
|
print '<td class="liste_titre" align="right"><input class="flat" type="text" size="6" name="search_montant_ht" value="'.$search_montant_ht.'"></td>';
|
||||||
print '<td class="liste_titre"></td>';
|
print '<td class="liste_titre"></td>';
|
||||||
print '<td class="liste_titre" align="right"><input class="flat" type="text" size="6" name="search_montant_ttc" value="'.$search_montant_ttc.'"></td>';
|
print '<td class="liste_titre" align="right"><input class="flat" type="text" size="6" name="search_montant_ttc" value="'.$search_montant_ttc.'"></td>';
|
||||||
@ -407,8 +810,8 @@ if ($resql)
|
|||||||
$facturestatic->id=$objp->facid;
|
$facturestatic->id=$objp->facid;
|
||||||
$facturestatic->ref=$objp->facnumber;
|
$facturestatic->ref=$objp->facnumber;
|
||||||
$facturestatic->type=$objp->type;
|
$facturestatic->type=$objp->type;
|
||||||
$facturestatic->statut = $objp->fk_statut;
|
$facturestatic->statut=$objp->fk_statut;
|
||||||
$facturestatic->date_lim_reglement = $db->jdate($objp->datelimite);
|
$facturestatic->date_lim_reglement=$db->jdate($objp->datelimite);
|
||||||
$notetoshow=dol_string_nohtmltag(($user->societe_id>0?$objp->note_public:$objp->note),1);
|
$notetoshow=dol_string_nohtmltag(($user->societe_id>0?$objp->note_public:$objp->note),1);
|
||||||
$paiement = $facturestatic->getSommePaiement();
|
$paiement = $facturestatic->getSommePaiement();
|
||||||
|
|
||||||
@ -463,6 +866,11 @@ if ($resql)
|
|||||||
print $thirdparty->getNomUrl(1,'customer');
|
print $thirdparty->getNomUrl(1,'customer');
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
|
// Payment mode
|
||||||
|
print '<td>';
|
||||||
|
$form->form_modes_reglement($_SERVER['PHP_SELF'], $objp->fk_mode_reglement, 'none');
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
print '<td align="right">'.price($objp->total_ht,0,$langs).'</td>';
|
print '<td align="right">'.price($objp->total_ht,0,$langs).'</td>';
|
||||||
|
|
||||||
print '<td align="right">'.price($objp->total_tva,0,$langs).'</td>';
|
print '<td align="right">'.price($objp->total_tva,0,$langs).'</td>';
|
||||||
@ -471,12 +879,17 @@ if ($resql)
|
|||||||
|
|
||||||
print '<td align="right">'.(! empty($paiement)?price($paiement,0,$langs):' ').'</td>';
|
print '<td align="right">'.(! empty($paiement)?price($paiement,0,$langs):' ').'</td>';
|
||||||
|
|
||||||
// Affiche statut de la facture
|
// Status
|
||||||
print '<td align="right" class="nowrap">';
|
print '<td align="right" class="nowrap">';
|
||||||
print $facturestatic->LibStatut($objp->paye,$objp->fk_statut,5,$paiement,$objp->type);
|
print $facturestatic->LibStatut($objp->paye,$objp->fk_statut,5,$paiement,$objp->type);
|
||||||
print "</td>";
|
print "</td>";
|
||||||
|
|
||||||
print "<td></td>";
|
// Checkbox
|
||||||
|
print '<td class="nowrap" align="center">';
|
||||||
|
$selected=0;
|
||||||
|
if (in_array($objp->facid, $arrayofselected)) $selected=1;
|
||||||
|
print '<input id="cb'.$objp->facid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$objp->facid.'"'.($selected?' checked="checked"':'').'>';
|
||||||
|
print '</td>' ;
|
||||||
|
|
||||||
print "</tr>\n";
|
print "</tr>\n";
|
||||||
$total_ht+=$objp->total_ht;
|
$total_ht+=$objp->total_ht;
|
||||||
@ -490,7 +903,7 @@ if ($resql)
|
|||||||
{
|
{
|
||||||
// Print total
|
// Print total
|
||||||
print '<tr class="liste_total">';
|
print '<tr class="liste_total">';
|
||||||
print '<td class="liste_total" colspan="5" align="left">'.$langs->trans('Total').'</td>';
|
print '<td class="liste_total" colspan="6" align="left">'.$langs->trans('Total').'</td>';
|
||||||
print '<td class="liste_total" align="right">'.price($total_ht,0,$langs).'</td>';
|
print '<td class="liste_total" align="right">'.price($total_ht,0,$langs).'</td>';
|
||||||
print '<td class="liste_total" align="right">'.price($total_tva,0,$langs).'</td>';
|
print '<td class="liste_total" align="right">'.price($total_tva,0,$langs).'</td>';
|
||||||
print '<td class="liste_total" align="right">'.price($total_ttc,0,$langs).'</td>';
|
print '<td class="liste_total" align="right">'.price($total_ttc,0,$langs).'</td>';
|
||||||
|
|||||||
@ -590,13 +590,13 @@ if ($resql)
|
|||||||
$formmail->withtoreadonly=1;
|
$formmail->withtoreadonly=1;
|
||||||
$formmail->withtocc=1;
|
$formmail->withtocc=1;
|
||||||
$formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC;
|
$formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC;
|
||||||
$formmail->withtopic=$langs->transnoentities($topicmail, '__FACREF__', '__REFCLIENT__');
|
$formmail->withtopic=$langs->transnoentities($topicmail, '__REF__', '__REFCLIENT__');
|
||||||
$formmail->withfile=$langs->trans("EachInvoiceWillBeAttachedToEmail");
|
$formmail->withfile=$langs->trans("EachInvoiceWillBeAttachedToEmail");
|
||||||
$formmail->withbody=1;
|
$formmail->withbody=1;
|
||||||
$formmail->withdeliveryreceipt=1;
|
$formmail->withdeliveryreceipt=1;
|
||||||
$formmail->withcancel=1;
|
$formmail->withcancel=1;
|
||||||
// Tableau des substitutions
|
// Tableau des substitutions
|
||||||
//$formmail->substit['__FACREF__']='';
|
//$formmail->substit['__REF__']='';
|
||||||
$formmail->substit['__SIGNATURE__']=$user->signature;
|
$formmail->substit['__SIGNATURE__']=$user->signature;
|
||||||
//$formmail->substit['__REFCLIENT__']='';
|
//$formmail->substit['__REFCLIENT__']='';
|
||||||
$formmail->substit['__PERSONALIZED__']='';
|
$formmail->substit['__PERSONALIZED__']='';
|
||||||
|
|||||||
@ -830,7 +830,7 @@ if (empty($reshook))
|
|||||||
setEventMessages($object->error, $object->errors, 'errors');
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = $object->setValueFrom('ref',GETPOST('ref','alpha'));;
|
$result = $object->setValueFrom('ref',GETPOST('ref','alpha'));
|
||||||
if ($result < 0) {
|
if ($result < 0) {
|
||||||
setEventMessages($object->error, $object->errors, 'errors');
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
$action = 'editref';
|
$action = 'editref';
|
||||||
@ -843,6 +843,30 @@ if (empty($reshook))
|
|||||||
header("Location: " . $_SERVER['PHP_SELF'] . "?id=" . $id);
|
header("Location: " . $_SERVER['PHP_SELF'] . "?id=" . $id);
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
elseif ($action=='setdate_contrat')
|
||||||
|
{
|
||||||
|
$cancelbutton = GETPOST('cancel');
|
||||||
|
|
||||||
|
if (!$cancelbutton) {
|
||||||
|
$result = $object->fetch($id);
|
||||||
|
if ($result < 0) {
|
||||||
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
|
}
|
||||||
|
$datacontrat=dol_mktime(GETPOST('date_contrathour'), GETPOST('date_contratmin'), 0, GETPOST('date_contratmonth'), GETPOST('date_contratday'), GETPOST('date_contratyear'));
|
||||||
|
$result = $object->setValueFrom('date_contrat',$datacontrat,'',null,'date');
|
||||||
|
if ($result < 0) {
|
||||||
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
|
$action = 'editdate_contrat';
|
||||||
|
} else {
|
||||||
|
header("Location: " . $_SERVER['PHP_SELF'] . "?id=" . $object->id);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
header("Location: " . $_SERVER['PHP_SELF'] . "?id=" . $id);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generation doc (depuis lien ou depuis cartouche doc)
|
// Generation doc (depuis lien ou depuis cartouche doc)
|
||||||
@ -1278,8 +1302,15 @@ else
|
|||||||
print "</td></tr>";
|
print "</td></tr>";
|
||||||
|
|
||||||
// Date
|
// Date
|
||||||
print '<tr><td>'.$langs->trans("Date").'</td>';
|
print '<tr>';
|
||||||
print '<td colspan="3">'.dol_print_date($object->date_contrat,"dayhour")."</td></tr>\n";
|
print '<td width="20%">';
|
||||||
|
print $form->editfieldkey("Date",'date_contrat',$object->date_contrat,$object,$user->rights->contrat->creer);
|
||||||
|
print '</td><td>';
|
||||||
|
print $form->editfieldval("Date",'date_contrat',$object->date_contrat,$object,$user->rights->contrat->creer,'datehourpicker');
|
||||||
|
print '</td>';
|
||||||
|
print '</tr>';
|
||||||
|
/* print '<tr><td>'.$langs->trans("Date").'</td>';
|
||||||
|
print '<td colspan="3">'.dol_print_date($object->date_contrat,"dayhour")."</td></tr>\n";*/
|
||||||
|
|
||||||
// Projet
|
// Projet
|
||||||
if (! empty($conf->projet->enabled))
|
if (! empty($conf->projet->enabled))
|
||||||
|
|||||||
@ -1552,7 +1552,7 @@ class ExtraFields
|
|||||||
{
|
{
|
||||||
$value_arr=GETPOST($keysuffix."options_".$key.$keyprefix);
|
$value_arr=GETPOST($keysuffix."options_".$key.$keyprefix);
|
||||||
// Make sure we get an array even if there's only one checkbox
|
// Make sure we get an array even if there's only one checkbox
|
||||||
$value_arr=(array)$value_arr
|
$value_arr=(array) $value_arr;
|
||||||
$value_key=implode(',', $value_arr);
|
$value_key=implode(',', $value_arr);
|
||||||
}
|
}
|
||||||
else if (in_array($key_type,array('price','double')))
|
else if (in_array($key_type,array('price','double')))
|
||||||
|
|||||||
@ -77,7 +77,7 @@ class Form
|
|||||||
* @param string $preselected Name of Value to show/edit (not used in this function)
|
* @param string $preselected Name of Value to show/edit (not used in this function)
|
||||||
* @param object $object Object
|
* @param object $object Object
|
||||||
* @param boolean $perm Permission to allow button to edit parameter. Set it to 0 to have a not edited field.
|
* @param boolean $perm Permission to allow button to edit parameter. Set it to 0 to have a not edited field.
|
||||||
* @param string $typeofdata Type of data ('string' by default, 'email', 'numeric:99', 'text' or 'textarea:rows:cols', 'day' or 'datepicker', 'ckeditor:dolibarr_zzz:width:height:savemethod:1:rows:cols', 'select;xxx[:class]'...)
|
* @param string $typeofdata Type of data ('string' by default, 'email', 'amount:99', 'numeric:99', 'text' or 'textarea:rows:cols', 'day' or 'datepicker', 'ckeditor:dolibarr_zzz:width:height:savemethod:1:rows:cols', 'select;xxx[:class]'...)
|
||||||
* @param string $moreparam More param to add on a href URL
|
* @param string $moreparam More param to add on a href URL
|
||||||
* @return string HTML edit field
|
* @return string HTML edit field
|
||||||
*/
|
*/
|
||||||
@ -122,7 +122,7 @@ class Form
|
|||||||
* @param string $value Value to show/edit
|
* @param string $value Value to show/edit
|
||||||
* @param object $object Object
|
* @param object $object Object
|
||||||
* @param boolean $perm Permission to allow button to edit parameter
|
* @param boolean $perm Permission to allow button to edit parameter
|
||||||
* @param string $typeofdata Type of data ('string' by default, 'amount', 'email', 'numeric:99', 'text' or 'textarea:rows:cols', 'day' or 'datepicker', 'ckeditor:dolibarr_zzz:width:height:savemethod:toolbarstartexpanded:rows:cols', 'select:xxx'...)
|
* @param string $typeofdata Type of data ('string' by default, 'email', 'amount:99', 'numeric:99', 'text' or 'textarea:rows:cols', 'day' or 'datepicker', 'ckeditor:dolibarr_zzz:width:height:savemethod:toolbarstartexpanded:rows:cols', 'select:xxx'...)
|
||||||
* @param string $editvalue When in edit mode, use this value as $value instead of value (for example, you can provide here a formated price instead of value). Use '' to use same than $value
|
* @param string $editvalue When in edit mode, use this value as $value instead of value (for example, you can provide here a formated price instead of value). Use '' to use same than $value
|
||||||
* @param object $extObject External object
|
* @param object $extObject External object
|
||||||
* @param mixed $custommsg String or Array of custom messages : eg array('success' => 'MyMessage', 'error' => 'MyMessage')
|
* @param mixed $custommsg String or Array of custom messages : eg array('success' => 'MyMessage', 'error' => 'MyMessage')
|
||||||
@ -154,11 +154,16 @@ class Form
|
|||||||
$ret.='<input type="hidden" name="id" value="'.$object->id.'">';
|
$ret.='<input type="hidden" name="id" value="'.$object->id.'">';
|
||||||
$ret.='<table class="nobordernopadding" cellpadding="0" cellspacing="0">';
|
$ret.='<table class="nobordernopadding" cellpadding="0" cellspacing="0">';
|
||||||
$ret.='<tr><td>';
|
$ret.='<tr><td>';
|
||||||
if (preg_match('/^(string|email|numeric|amount)/',$typeofdata))
|
if (preg_match('/^(string|email)/',$typeofdata))
|
||||||
{
|
{
|
||||||
$tmp=explode(':',$typeofdata);
|
$tmp=explode(':',$typeofdata);
|
||||||
$ret.='<input type="text" id="'.$htmlname.'" name="'.$htmlname.'" value="'.($editvalue?$editvalue:$value).'"'.($tmp[1]?' size="'.$tmp[1].'"':'').'>';
|
$ret.='<input type="text" id="'.$htmlname.'" name="'.$htmlname.'" value="'.($editvalue?$editvalue:$value).'"'.($tmp[1]?' size="'.$tmp[1].'"':'').'>';
|
||||||
}
|
}
|
||||||
|
else if (preg_match('/^(numeric|amount)/',$typeofdata))
|
||||||
|
{
|
||||||
|
$tmp=explode(':',$typeofdata);
|
||||||
|
$ret.='<input type="text" id="'.$htmlname.'" name="'.$htmlname.'" value="'.price(price2num($editvalue?$editvalue:$value)).'"'.($tmp[1]?' size="'.$tmp[1].'"':'').'>';
|
||||||
|
}
|
||||||
else if (preg_match('/^text/',$typeofdata) || preg_match('/^note/',$typeofdata))
|
else if (preg_match('/^text/',$typeofdata) || preg_match('/^note/',$typeofdata))
|
||||||
{
|
{
|
||||||
$tmp=explode(':',$typeofdata);
|
$tmp=explode(':',$typeofdata);
|
||||||
@ -203,8 +208,8 @@ class Form
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ($typeofdata == 'email') $ret.=dol_print_email($value,0,0,0,0,1);
|
if (preg_match('/^(email)/',$typeofdata)) $ret.=dol_print_email($value,0,0,0,0,1);
|
||||||
elseif ($typeofdata == 'amount') $ret.=($value != '' ? price($value,'',$langs,0,-1,-1,$conf->currency) : '');
|
elseif (preg_match('/^(amount|numeric)/',$typeofdata)) $ret.=($value != '' ? price($value,'',$langs,0,-1,-1,$conf->currency) : '');
|
||||||
elseif (preg_match('/^text/',$typeofdata) || preg_match('/^note/',$typeofdata)) $ret.=dol_htmlentitiesbr($value);
|
elseif (preg_match('/^text/',$typeofdata) || preg_match('/^note/',$typeofdata)) $ret.=dol_htmlentitiesbr($value);
|
||||||
elseif ($typeofdata == 'day' || $typeofdata == 'datepicker') $ret.=dol_print_date($value,'day');
|
elseif ($typeofdata == 'day' || $typeofdata == 'datepicker') $ret.=dol_print_date($value,'day');
|
||||||
elseif ($typeofdata == 'dayhour' || $typeofdata == 'datehourpicker') $ret.=dol_print_date($value,'dayhour');
|
elseif ($typeofdata == 'dayhour' || $typeofdata == 'datehourpicker') $ret.=dol_print_date($value,'dayhour');
|
||||||
@ -477,6 +482,72 @@ class Form
|
|||||||
return $this->textwithtooltip($text, $htmltext, 2, $direction, $img, $extracss, $notabs, '', $noencodehtmltext);
|
return $this->textwithtooltip($text, $htmltext, 2, $direction, $img, $extracss, $notabs, '', $noencodehtmltext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate select HTML to choose massaction
|
||||||
|
*
|
||||||
|
* @param string $selected Selected value
|
||||||
|
* @param int $arrayofaction array('code'=>'label', ...)
|
||||||
|
* @return string Select list
|
||||||
|
*/
|
||||||
|
function selectMassAction($selected, $arrayofaction)
|
||||||
|
{
|
||||||
|
global $conf,$langs,$hookmanager;
|
||||||
|
|
||||||
|
if (count($arrayofaction) == 0) return;
|
||||||
|
|
||||||
|
$disabled=0;
|
||||||
|
$ret='<div class="centpercent center"><select class="flat hideobject massaction massactionselect" name="massaction"'.($disabled?' disabled="disabled"':'').'>';
|
||||||
|
$ret.='<option value="0"'.($disabled?' disabled="disabled"':'').'>-- '.$langs->trans("SelectAction").' --</option>';
|
||||||
|
foreach($arrayofaction as $code => $label)
|
||||||
|
{
|
||||||
|
$ret.='<option value="'.$code.'"'.($disabled?' disabled="disabled"':'').'>'.$label.'</option>';
|
||||||
|
}
|
||||||
|
$ret.='</select>';
|
||||||
|
$ret.='<input type="submit" name="confirmmassaction" disabled="disabled" class="button hideobject massaction massactionconfirmed" value="'.dol_escape_htmltag($langs->trans("Confirm")).'">';
|
||||||
|
$ret.='</div>';
|
||||||
|
|
||||||
|
$ret.='<!-- JS CODE TO ENABLE mass action select -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(document).ready(function () {
|
||||||
|
function initCheckForSelect()
|
||||||
|
{
|
||||||
|
atleastoneselected=0;
|
||||||
|
jQuery(".checkforselect").each(function( index ) {
|
||||||
|
/* console.log( index + ": " + $( this ).text() ); */
|
||||||
|
if ($(this).is(\':checked\')) atleastoneselected++;
|
||||||
|
});
|
||||||
|
console.log(atleastoneselected);
|
||||||
|
if (atleastoneselected)
|
||||||
|
{
|
||||||
|
jQuery(".massaction").show();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
jQuery(".massaction").hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
initCheckForSelect();
|
||||||
|
jQuery(".checkforselect").click(function() {
|
||||||
|
initCheckForSelect();
|
||||||
|
});
|
||||||
|
jQuery(".massactionselect").change(function() {
|
||||||
|
console.log( $( this ).val() );
|
||||||
|
if ($(this).val() != \'0\')
|
||||||
|
{
|
||||||
|
jQuery(".massactionconfirmed").prop(\'disabled\', false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
jQuery(".massactionconfirmed").prop(\'disabled\', true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
';
|
||||||
|
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return combo list of activated countries, into language of user
|
* Return combo list of activated countries, into language of user
|
||||||
*
|
*
|
||||||
@ -1261,10 +1332,11 @@ class Form
|
|||||||
* @param string $show_every 0=default list, 1=add also a value "Everybody" at beginning of list
|
* @param string $show_every 0=default list, 1=add also a value "Everybody" at beginning of list
|
||||||
* @param string $enableonlytext If option $enableonly is set, we use this text to explain into label why record is disabled. Not used if enableonly is empty.
|
* @param string $enableonlytext If option $enableonly is set, we use this text to explain into label why record is disabled. Not used if enableonly is empty.
|
||||||
* @param string $morecss More css
|
* @param string $morecss More css
|
||||||
|
* @param int $noactive Show only active users (this will also happened whatever is this option if USER_HIDE_INACTIVE_IN_COMBOBOX is on).
|
||||||
* @return string HTML select string
|
* @return string HTML select string
|
||||||
* @see select_dolgroups
|
* @see select_dolgroups
|
||||||
*/
|
*/
|
||||||
function select_dolusers($selected='', $htmlname='userid', $show_empty=0, $exclude='', $disabled=0, $include='', $enableonly='', $force_entity=0, $maxlength=0, $showstatus=0, $morefilter='', $show_every=0, $enableonlytext='', $morecss='')
|
function select_dolusers($selected='', $htmlname='userid', $show_empty=0, $exclude='', $disabled=0, $include='', $enableonly='', $force_entity=0, $maxlength=0, $showstatus=0, $morefilter='', $show_every=0, $enableonlytext='', $morecss='', $noactive=0)
|
||||||
{
|
{
|
||||||
global $conf,$user,$langs;
|
global $conf,$user,$langs;
|
||||||
|
|
||||||
@ -1324,7 +1396,7 @@ class Form
|
|||||||
if (! empty($user->societe_id)) $sql.= " AND u.fk_soc = ".$user->societe_id;
|
if (! empty($user->societe_id)) $sql.= " AND u.fk_soc = ".$user->societe_id;
|
||||||
if (is_array($exclude) && $excludeUsers) $sql.= " AND u.rowid NOT IN ('".$excludeUsers."')";
|
if (is_array($exclude) && $excludeUsers) $sql.= " AND u.rowid NOT IN ('".$excludeUsers."')";
|
||||||
if (is_array($include) && $includeUsers) $sql.= " AND u.rowid IN ('".$includeUsers."')";
|
if (is_array($include) && $includeUsers) $sql.= " AND u.rowid IN ('".$includeUsers."')";
|
||||||
if (! empty($conf->global->USER_HIDE_INACTIVE_IN_COMBOBOX)) $sql.= " AND u.statut <> 0";
|
if (! empty($conf->global->USER_HIDE_INACTIVE_IN_COMBOBOX) || $noactive) $sql.= " AND u.statut <> 0";
|
||||||
if (! empty($morefilter)) $sql.=" ".$morefilter;
|
if (! empty($morefilter)) $sql.=" ".$morefilter;
|
||||||
$sql.= " ORDER BY u.lastname ASC";
|
$sql.= " ORDER BY u.lastname ASC";
|
||||||
|
|
||||||
@ -2643,7 +2715,7 @@ class Form
|
|||||||
* @param int $maxlength Max length of label
|
* @param int $maxlength Max length of label
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
function select_types_paiements($selected='',$htmlname='paiementtype',$filtertype='',$format=0, $empty=0, $noadmininfo=0,$maxlength=0)
|
function select_types_paiements($selected='', $htmlname='paiementtype', $filtertype='', $format=0, $empty=0, $noadmininfo=0, $maxlength=0)
|
||||||
{
|
{
|
||||||
global $langs,$user;
|
global $langs,$user;
|
||||||
|
|
||||||
|
|||||||
@ -648,7 +648,7 @@ class FormMail extends Form
|
|||||||
}
|
}
|
||||||
if ($this->param["models"]=='facture_send')
|
if ($this->param["models"]=='facture_send')
|
||||||
{
|
{
|
||||||
$url=getPaypalPaymentUrl(0,'invoice',$this->substit['__FACREF__']);
|
$url=getPaypalPaymentUrl(0,'invoice',$this->substit['__REF__']);
|
||||||
$this->substit['__PERSONALIZED__']=str_replace('\n',"\n",$langs->transnoentitiesnoconv("PredefinedMailContentLink",$url));
|
$this->substit['__PERSONALIZED__']=str_replace('\n',"\n",$langs->transnoentitiesnoconv("PredefinedMailContentLink",$url));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -692,7 +692,7 @@ class FormMail extends Form
|
|||||||
else $this->withfckeditor=0;
|
else $this->withfckeditor=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
$doleditor=new DolEditor('message',$defaultmessage,'',280,$this->ckeditortoolbar,'In',true,true,$this->withfckeditor,8,72);
|
$doleditor=new DolEditor('message',$defaultmessage,'',280,$this->ckeditortoolbar,'In',true,true,$this->withfckeditor,8,'95%');
|
||||||
$out.= $doleditor->Create(1);
|
$out.= $doleditor->Create(1);
|
||||||
}
|
}
|
||||||
$out.= "</td></tr>\n";
|
$out.= "</td></tr>\n";
|
||||||
|
|||||||
@ -148,7 +148,7 @@ class FormProjets
|
|||||||
if (! empty($conf->use_javascript_ajax))
|
if (! empty($conf->use_javascript_ajax))
|
||||||
{
|
{
|
||||||
include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
|
include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
|
||||||
$comboenhancement = ajax_combobox($htmlname, '', 0, $forcefocus);
|
$comboenhancement = ajax_combobox($htmlname, array(), 0, $forcefocus);
|
||||||
$out.=$comboenhancement;
|
$out.=$comboenhancement;
|
||||||
$nodatarole=($comboenhancement?' data-role="none"':'');
|
$nodatarole=($comboenhancement?' data-role="none"':'');
|
||||||
$minmax='minwidth100 maxwidth300';
|
$minmax='minwidth100 maxwidth300';
|
||||||
|
|||||||
@ -221,7 +221,7 @@ abstract class DoliDB implements Database
|
|||||||
* Define sort criteria of request
|
* Define sort criteria of request
|
||||||
*
|
*
|
||||||
* @param string $sortfield List of sort fields, separated by comma. Example: 't1.fielda, t2.fieldb'
|
* @param string $sortfield List of sort fields, separated by comma. Example: 't1.fielda, t2.fieldb'
|
||||||
* @param string $sortorder Sort order
|
* @param 'ASC'|'DESC' $sortorder Sort order
|
||||||
* @return string String to provide syntax of a sort sql string
|
* @return string String to provide syntax of a sort sql string
|
||||||
*/
|
*/
|
||||||
function order($sortfield=null,$sortorder=null)
|
function order($sortfield=null,$sortorder=null)
|
||||||
@ -236,9 +236,11 @@ abstract class DoliDB implements Database
|
|||||||
else $return.=',';
|
else $return.=',';
|
||||||
|
|
||||||
$return.=preg_replace('/[^0-9a-z_\.]/i','',$val);
|
$return.=preg_replace('/[^0-9a-z_\.]/i','',$val);
|
||||||
if (! empty($sortorder))
|
// Only ASC and DESC values are valid SQL
|
||||||
{
|
if ($sortorder === 'ASC') {
|
||||||
$return.=' '.preg_replace('/[^0-9a-z]/i','',$sortorder);
|
$return .= ' ASC';
|
||||||
|
} elseif ($sortorder === 'DESC') {
|
||||||
|
$return .= ' DESC';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
|
|||||||
@ -864,8 +864,8 @@ function confirmConstantAction(action, url, code, input, box, entity, yesButton,
|
|||||||
.addClass( "ui-widget ui-widget-content ui-corner-left dolibarrcombobox" );
|
.addClass( "ui-widget ui-widget-content ui-corner-left dolibarrcombobox" );
|
||||||
|
|
||||||
input.data("ui-autocomplete")._renderItem = function( ul, item ) {
|
input.data("ui-autocomplete")._renderItem = function( ul, item ) {
|
||||||
return $("<li></li>")
|
return $("<li>")
|
||||||
.data( "item.autocomplete", item )
|
.data( "ui-autocomplete-item", item ) // jQuery UI > 1.10.0
|
||||||
.append( "<a>" + item.label + "</a>" )
|
.append( "<a>" + item.label + "</a>" )
|
||||||
.appendTo( ul );
|
.appendTo( ul );
|
||||||
};
|
};
|
||||||
|
|||||||
@ -170,8 +170,8 @@ function ajax_autocompleter($selected, $htmlname, $url, $urloption='', $minLengt
|
|||||||
}
|
}
|
||||||
,delay: 500
|
,delay: 500
|
||||||
}).data("ui-autocomplete")._renderItem = function( ul, item ) {
|
}).data("ui-autocomplete")._renderItem = function( ul, item ) {
|
||||||
return $("<li></li>")
|
return $("<li>")
|
||||||
.data( "item.autocomplete", item )
|
.data( "ui-autocomplete-item", item ) // jQuery UI > 1.10.0
|
||||||
.append( \'<a><span class="tag">\' + item.label + "</span></a>" )
|
.append( \'<a><span class="tag">\' + item.label + "</span></a>" )
|
||||||
.appendTo(ul);
|
.appendTo(ul);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2006-2008 Laurent Destailleur <eldy@users.sourceforge.net>
|
/* Copyright (C) 2006-2015 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
* Copyright (C) 2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
* Copyright (C) 2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||||
* Copyright (C) 2009-2010 Regis Houssin <regis.houssin@capnetworks.com>
|
* Copyright (C) 2009-2010 Regis Houssin <regis.houssin@capnetworks.com>
|
||||||
* Copyright (C) 2015 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
|
* Copyright (C) 2015 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
|
||||||
@ -46,14 +46,16 @@ function product_prepare_head($object)
|
|||||||
$h++;
|
$h++;
|
||||||
|
|
||||||
$head[$h][0] = DOL_URL_ROOT."/product/price.php?id=".$object->id;
|
$head[$h][0] = DOL_URL_ROOT."/product/price.php?id=".$object->id;
|
||||||
$head[$h][1] = $langs->trans("CustomerPrices");
|
$head[$h][1] = $langs->trans("SellingPrices");
|
||||||
$head[$h][2] = 'price';
|
$head[$h][2] = 'price';
|
||||||
$h++;
|
$h++;
|
||||||
|
|
||||||
if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->lire)
|
if ((! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->lire)
|
||||||
|
|| (! empty($conf->margin->enabled) && $user->rights->margin->liretous)
|
||||||
|
)
|
||||||
{
|
{
|
||||||
$head[$h][0] = DOL_URL_ROOT."/product/fournisseurs.php?id=".$object->id;
|
$head[$h][0] = DOL_URL_ROOT."/product/fournisseurs.php?id=".$object->id;
|
||||||
$head[$h][1] = $langs->trans("SuppliersPrices");
|
$head[$h][1] = $langs->trans("BuyingPrices");
|
||||||
$head[$h][2] = 'suppliers';
|
$head[$h][2] = 'suppliers';
|
||||||
$h++;
|
$h++;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -874,11 +874,11 @@ function searchTaskInChild(&$inc, $parent, &$lines, &$taskrole)
|
|||||||
* @param DoliDB $db Database handler
|
* @param DoliDB $db Database handler
|
||||||
* @param Form $form Object form
|
* @param Form $form Object form
|
||||||
* @param int $socid Id thirdparty
|
* @param int $socid Id thirdparty
|
||||||
* @param int $projectsListId Id of project i have permission on
|
* @param int $projectsListId Id of project I have permission on
|
||||||
* @param int $mytasks Limited to task i am contact to
|
* @param int $mytasks Limited to task I am contact to
|
||||||
* @param int $statut -1=No filter on statut, 0 or 1 = Filter on status
|
* @param int $statut -1=No filter on statut, 0 or 1 = Filter on status
|
||||||
* @param array $listofoppstatus List of opportunity status
|
* @param array $listofoppstatus List of opportunity status
|
||||||
* @param array $hiddenfields List of fields to not show
|
* @param array $hiddenfields List of info to not show ('projectlabel', 'declaredprogress', '...', )
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
function print_projecttasks_array($db, $form, $socid, $projectsListId, $mytasks=0, $statut=-1, $listofoppstatus=array(),$hiddenfields=array())
|
function print_projecttasks_array($db, $form, $socid, $projectsListId, $mytasks=0, $statut=-1, $listofoppstatus=array(),$hiddenfields=array())
|
||||||
@ -993,7 +993,7 @@ function print_projecttasks_array($db, $form, $socid, $projectsListId, $mytasks=
|
|||||||
if (empty($conf->global->PROJECT_HIDE_TASKS))
|
if (empty($conf->global->PROJECT_HIDE_TASKS))
|
||||||
{
|
{
|
||||||
print_liste_field_titre($langs->trans("Tasks"),"","","","",'align="right"',$sortfield,$sortorder);
|
print_liste_field_titre($langs->trans("Tasks"),"","","","",'align="right"',$sortfield,$sortorder);
|
||||||
print_liste_field_titre($langs->trans("PlannedWorkload"),"","","","",'align="right"',$sortfield,$sortorder);
|
if (! in_array('plannedworkload', $hiddenfields)) print_liste_field_titre($langs->trans("PlannedWorkload"),"","","","",'align="right"',$sortfield,$sortorder);
|
||||||
if (! in_array('declaredprogress', $hiddenfields)) print_liste_field_titre($langs->trans("ProgressDeclared"),"","","","",'align="right"',$sortfield,$sortorder);
|
if (! in_array('declaredprogress', $hiddenfields)) print_liste_field_titre($langs->trans("ProgressDeclared"),"","","","",'align="right"',$sortfield,$sortorder);
|
||||||
}
|
}
|
||||||
print_liste_field_titre($langs->trans("Status"),"","","","",'align="right"',$sortfield,$sortorder);
|
print_liste_field_titre($langs->trans("Status"),"","","","",'align="right"',$sortfield,$sortorder);
|
||||||
@ -1016,7 +1016,7 @@ function print_projecttasks_array($db, $form, $socid, $projectsListId, $mytasks=
|
|||||||
print '<td>';
|
print '<td>';
|
||||||
$projectstatic->ref=$objp->ref;
|
$projectstatic->ref=$objp->ref;
|
||||||
print $projectstatic->getNomUrl(1);
|
print $projectstatic->getNomUrl(1);
|
||||||
print ' - '.dol_trunc($objp->title,24);
|
if (! in_array('projectlabel', $hiddenfields)) print ' - '.dol_trunc($objp->title,24);
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print '<td>';
|
print '<td>';
|
||||||
if ($objp->fk_soc > 0)
|
if ($objp->fk_soc > 0)
|
||||||
@ -1044,8 +1044,10 @@ function print_projecttasks_array($db, $form, $socid, $projectsListId, $mytasks=
|
|||||||
|
|
||||||
$plannedworkload=$objp->planned_workload;
|
$plannedworkload=$objp->planned_workload;
|
||||||
$total_plannedworkload+=$plannedworkload;
|
$total_plannedworkload+=$plannedworkload;
|
||||||
print '<td align="right">'.($plannedworkload?convertSecondToTime($plannedworkload):'').'</td>';
|
if (! in_array('plannedworkload', $hiddenfields))
|
||||||
|
{
|
||||||
|
print '<td align="right">'.($plannedworkload?convertSecondToTime($plannedworkload):'').'</td>';
|
||||||
|
}
|
||||||
if (! in_array('declaredprogress', $hiddenfields))
|
if (! in_array('declaredprogress', $hiddenfields))
|
||||||
{
|
{
|
||||||
$declaredprogressworkload=$objp->declared_progess_workload;
|
$declaredprogressworkload=$objp->declared_progess_workload;
|
||||||
@ -1073,12 +1075,12 @@ function print_projecttasks_array($db, $form, $socid, $projectsListId, $mytasks=
|
|||||||
if (! empty($conf->global->PROJECT_USE_OPPORTUNITIES))
|
if (! empty($conf->global->PROJECT_USE_OPPORTUNITIES))
|
||||||
{
|
{
|
||||||
print '<td class="liste_total" align="right">'.price($total_opp_amount, 0, '', 1, -1, -1, $conf->currency).'</td>';
|
print '<td class="liste_total" align="right">'.price($total_opp_amount, 0, '', 1, -1, -1, $conf->currency).'</td>';
|
||||||
print '<td class="liste_total" align="right">'.$form->textwithpicto(price($ponderated_opp_amount, 0, '', 1, -1, -1, $conf->currency), $langs->trans("OpportunityPonderatedAmount"), 1).'</td>';
|
print '<td class="liste_total" align="right">'.$form->textwithpicto(price($ponderated_opp_amount, 0, '', 1, -1, -1, $conf->currency), $langs->trans("OpportunityPonderatedAmountDesc"), 1).'</td>';
|
||||||
}
|
}
|
||||||
if (empty($conf->global->PROJECT_HIDE_TASKS))
|
if (empty($conf->global->PROJECT_HIDE_TASKS))
|
||||||
{
|
{
|
||||||
print '<td class="liste_total" align="right">'.$total_task.'</td>';
|
print '<td class="liste_total" align="right">'.$total_task.'</td>';
|
||||||
print '<td class="liste_total" align="right">'.($total_plannedworkload?convertSecondToTime($total_plannedworkload):'').'</td>';
|
if (! in_array('plannedworkload', $hiddenfields)) print '<td class="liste_total" align="right">'.($total_plannedworkload?convertSecondToTime($total_plannedworkload):'').'</td>';
|
||||||
if (! in_array('declaredprogress', $hiddenfields)) print '<td class="liste_total" align="right">'.($total_plannedworkload?round(100*$total_declaredprogressworkload/$total_plannedworkload,0).'%':'').'</td>';
|
if (! in_array('declaredprogress', $hiddenfields)) print '<td class="liste_total" align="right">'.($total_plannedworkload?round(100*$total_declaredprogressworkload/$total_plannedworkload,0).'%':'').'</td>';
|
||||||
}
|
}
|
||||||
print '<td class="liste_total"></td>';
|
print '<td class="liste_total"></td>';
|
||||||
|
|||||||
@ -304,11 +304,13 @@ insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, left
|
|||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->hrm->enabled', __HANDLER__, 'left', 4601__+MAX_llx_menu__, 'hrm', '', 4600__+MAX_llx_menu__, '/user/card.php?&action=create', 'NewEmployee', 1, 'hrm', '$user->rights->hrm->employee->write', '', 0, 1, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->hrm->enabled', __HANDLER__, 'left', 4601__+MAX_llx_menu__, 'hrm', '', 4600__+MAX_llx_menu__, '/user/card.php?&action=create', 'NewEmployee', 1, 'hrm', '$user->rights->hrm->employee->write', '', 0, 1, __ENTITY__);
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->hrm->enabled', __HANDLER__, 'left', 4602__+MAX_llx_menu__, 'hrm', '', 4600__+MAX_llx_menu__, '/user/index.php?$leftmenu=hrm&mode=employee', 'List', 1, 'hrm', '$user->rights->hrm->employee->read', '', 0, 2, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->hrm->enabled', __HANDLER__, 'left', 4602__+MAX_llx_menu__, 'hrm', '', 4600__+MAX_llx_menu__, '/user/index.php?$leftmenu=hrm&mode=employee', 'List', 1, 'hrm', '$user->rights->hrm->employee->read', '', 0, 2, __ENTITY__);
|
||||||
-- HRM - Holiday
|
-- HRM - Holiday
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->holiday->enabled', __HANDLER__, 'left', 5000__+MAX_llx_menu__, 'hrm', 'hrm', 15__+MAX_llx_menu__, '/holiday/list.php?&leftmenu=hrm', 'CPTitreMenu', 0, 'holiday', '$user->rights->holiday->write', '', 0, 1, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->holiday->enabled', __HANDLER__, 'left', 5000__+MAX_llx_menu__, 'hrm', 'hrm', 15__+MAX_llx_menu__, '/holiday/list.php?&leftmenu=hrm', 'CPTitreMenu', 0, 'holiday', '$user->rights->holiday->read', '', 0, 1, __ENTITY__);
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->holiday->enabled', __HANDLER__, 'left', 5001__+MAX_llx_menu__, 'hrm', '', 5000__+MAX_llx_menu__, '/holiday/card.php?&action=request', 'MenuAddCP', 1, 'holiday', '$user->rights->holiday->write', '', 0, 1, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->holiday->enabled', __HANDLER__, 'left', 5001__+MAX_llx_menu__, 'hrm', '', 5000__+MAX_llx_menu__, '/holiday/card.php?&action=request', 'MenuAddCP', 1, 'holiday', '$user->rights->holiday->write', '', 0, 1, __ENTITY__);
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->holiday->enabled', __HANDLER__, 'left', 5002__+MAX_llx_menu__, 'hrm', '', 5000__+MAX_llx_menu__, '/holiday/define_holiday.php?&action=request', 'MenuConfCP', 1, 'holiday', '$user->rights->holiday->define_holiday', '', 0, 2, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->holiday->enabled', __HANDLER__, 'left', 5002__+MAX_llx_menu__, 'hrm', '', 5000__+MAX_llx_menu__, '/holiday/list.php?&leftmenu=hrm', 'List', 1, 'holiday', '$user->rights->holiday->read', '', 0, 1, __ENTITY__);
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->holiday->enabled', __HANDLER__, 'left', 5003__+MAX_llx_menu__, 'hrm', '', 5000__+MAX_llx_menu__, '/holiday/view_log.php?&action=request', 'MenuLogCP', 1, 'holiday', '$user->rights->holiday->view_log', '', 0, 3, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->holiday->enabled', __HANDLER__, 'left', 5003__+MAX_llx_menu__, 'hrm', '', 5002__+MAX_llx_menu__, '/holiday/list.php?select_statut=2&leftmenu=hrm', 'ListToApprove', 2, 'trips', '$user->rights->holiday->read', '', 0, 1, __ENTITY__);
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->holiday->enabled', __HANDLER__, 'left', 5004__+MAX_llx_menu__, 'hrm', '', 5000__+MAX_llx_menu__, '/holiday/month_report.php?&action=request', 'MenuReportMonth', 1, 'holiday', '$user->rights->holiday->month_report', '', 0, 4, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->holiday->enabled', __HANDLER__, 'left', 5004__+MAX_llx_menu__, 'hrm', '', 5000__+MAX_llx_menu__, '/holiday/define_holiday.php?&action=request', 'MenuConfCP', 1, 'holiday', '$user->rights->holiday->define_holiday', '', 0, 2, __ENTITY__);
|
||||||
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->holiday->enabled', __HANDLER__, 'left', 5005__+MAX_llx_menu__, 'hrm', '', 5000__+MAX_llx_menu__, '/holiday/view_log.php?&action=request', 'MenuLogCP', 1, 'holiday', '$user->rights->holiday->define_holiday', '', 0, 3, __ENTITY__);
|
||||||
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->holiday->enabled', __HANDLER__, 'left', 5006__+MAX_llx_menu__, 'hrm', '', 5000__+MAX_llx_menu__, '/holiday/month_report.php?&action=request', 'MenuReportMonth', 1, 'holiday', '$user->rights->holiday->define_holiday', '', 0, 4, __ENTITY__);
|
||||||
-- HRM - Expense reports
|
-- HRM - Expense reports
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->deplacement->enabled', __HANDLER__, 'left', 2100__+MAX_llx_menu__, 'accountancy', 'tripsandexpenses', 15__+MAX_llx_menu__, '/compta/deplacement/index.php?leftmenu=tripsandexpenses', 'TripsAndExpenses', 0, 'trips', '$user->rights->deplacement->lire', '', 0, 5, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->deplacement->enabled', __HANDLER__, 'left', 2100__+MAX_llx_menu__, 'accountancy', 'tripsandexpenses', 15__+MAX_llx_menu__, '/compta/deplacement/index.php?leftmenu=tripsandexpenses', 'TripsAndExpenses', 0, 'trips', '$user->rights->deplacement->lire', '', 0, 5, __ENTITY__);
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->deplacement->enabled', __HANDLER__, 'left', 2101__+MAX_llx_menu__, 'accountancy', '', 2100__+MAX_llx_menu__, '/compta/deplacement/card.php?action=create&leftmenu=tripsandexpenses', 'New', 1, 'trips', '$user->rights->deplacement->creer', '', 0, 1, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->deplacement->enabled', __HANDLER__, 'left', 2101__+MAX_llx_menu__, 'accountancy', '', 2100__+MAX_llx_menu__, '/compta/deplacement/card.php?action=create&leftmenu=tripsandexpenses', 'New', 1, 'trips', '$user->rights->deplacement->creer', '', 0, 1, __ENTITY__);
|
||||||
|
|||||||
@ -28,16 +28,16 @@ include_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class to generate target according to rule Fraise
|
* Class to generate target according to rule Fraise
|
||||||
*/
|
*/
|
||||||
class mailing_fraise extends MailingTargets
|
class mailing_fraise extends MailingTargets
|
||||||
{
|
{
|
||||||
// CHANGE THIS: Put here a name not already used
|
// CHANGE THIS: Put here a name not already used
|
||||||
var $name='FundationMembers'; // Identifiant du module mailing
|
var $name='FundationMembers'; // Identifiant du module mailing
|
||||||
// CHANGE THIS: Put here a description of your selector module.
|
// CHANGE THIS: Put here a description of your selector module.
|
||||||
// This label is used if no translation found for key MailingModuleDescXXX where XXX=name is found
|
// This label is used if no translation found for key MailingModuleDescXXX where XXX=name is found
|
||||||
var $desc='Foundation members with emails (by status)';
|
var $desc='Foundation members with emails (by status)';
|
||||||
// CHANGE THIS: Set to 1 if selector is available for admin users only
|
// CHANGE THIS: Set to 1 if selector is available for admin users only
|
||||||
var $require_admin=0;
|
var $require_admin=0;
|
||||||
|
|
||||||
var $require_module=array('adherent');
|
var $require_module=array('adherent');
|
||||||
@ -46,11 +46,11 @@ class mailing_fraise extends MailingTargets
|
|||||||
var $db;
|
var $db;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*
|
*
|
||||||
* @param DoliDB $db Database handler
|
* @param DoliDB $db Database handler
|
||||||
*/
|
*/
|
||||||
function __construct($db)
|
function __construct($db)
|
||||||
{
|
{
|
||||||
$this->db=$db;
|
$this->db=$db;
|
||||||
@ -58,37 +58,37 @@ class mailing_fraise extends MailingTargets
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* On the main mailing area, there is a box with statistics.
|
* On the main mailing area, there is a box with statistics.
|
||||||
* If you want to add a line in this report you must provide an
|
* If you want to add a line in this report you must provide an
|
||||||
* array of SQL request that returns two field:
|
* array of SQL request that returns two field:
|
||||||
* One called "label", One called "nb".
|
* One called "label", One called "nb".
|
||||||
*
|
*
|
||||||
* @return string[] Array with SQL requests
|
* @return array Array with SQL requests
|
||||||
*/
|
*/
|
||||||
function getSqlArrayForStats()
|
function getSqlArrayForStats()
|
||||||
{
|
{
|
||||||
global $langs;
|
global $langs;
|
||||||
|
|
||||||
$langs->load("members");
|
$langs->load("members");
|
||||||
|
|
||||||
// Array for requests for statistics board
|
// Array for requests for statistics board
|
||||||
$statssql=array();
|
$statssql=array();
|
||||||
|
|
||||||
$statssql[0] ="SELECT '".$this->db->escape($langs->trans("FundationMembers"))."' as label, count(*) as nb";
|
$statssql[0] ="SELECT '".$this->db->escape($langs->trans("FundationMembers"))."' as label, count(*) as nb";
|
||||||
$statssql[0].=" FROM ".MAIN_DB_PREFIX."adherent where statut = 1";
|
$statssql[0].=" FROM ".MAIN_DB_PREFIX."adherent where statut = 1";
|
||||||
|
|
||||||
return $statssql;
|
return $statssql;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return here number of distinct emails returned by your selector.
|
* Return here number of distinct emails returned by your selector.
|
||||||
* For example if this selector is used to extract 500 different
|
* For example if this selector is used to extract 500 different
|
||||||
* emails from a text file, this function must return 500.
|
* emails from a text file, this function must return 500.
|
||||||
*
|
*
|
||||||
* @param string $sql Requete sql de comptage
|
* @param string $sql Requete sql de comptage
|
||||||
* @return int Nb of recipients
|
* @return int Nb of recipients
|
||||||
*/
|
*/
|
||||||
function getNbOfRecipients($sql='')
|
function getNbOfRecipients($sql='')
|
||||||
{
|
{
|
||||||
$sql = "SELECT count(distinct(a.email)) as nb";
|
$sql = "SELECT count(distinct(a.email)) as nb";
|
||||||
@ -108,7 +108,7 @@ class mailing_fraise extends MailingTargets
|
|||||||
*/
|
*/
|
||||||
function formFilter()
|
function formFilter()
|
||||||
{
|
{
|
||||||
global $langs;
|
global $conf, $langs;
|
||||||
$langs->load("members");
|
$langs->load("members");
|
||||||
|
|
||||||
$form=new Form($this->db);
|
$form=new Form($this->db);
|
||||||
@ -121,6 +121,36 @@ class mailing_fraise extends MailingTargets
|
|||||||
$s.='<option value="1a">'.$langs->trans("MemberStatusActiveShort").' ('.$langs->trans("MemberStatusPaidShort").')</option>';
|
$s.='<option value="1a">'.$langs->trans("MemberStatusActiveShort").' ('.$langs->trans("MemberStatusPaidShort").')</option>';
|
||||||
$s.='<option value="1b">'.$langs->trans("MemberStatusActiveShort").' ('.$langs->trans("MemberStatusActiveLateShort").')</option>';
|
$s.='<option value="1b">'.$langs->trans("MemberStatusActiveShort").' ('.$langs->trans("MemberStatusActiveLateShort").')</option>';
|
||||||
$s.='<option value="0">'.$langs->trans("MemberStatusResiliatedShort").'</option>';
|
$s.='<option value="0">'.$langs->trans("MemberStatusResiliatedShort").'</option>';
|
||||||
|
$s.='</select> ';
|
||||||
|
$s.=$langs->trans("Type").': ';
|
||||||
|
$s.='<select name="filter" class="flat">';
|
||||||
|
$sql = "SELECT rowid, libelle, statut";
|
||||||
|
$sql.= " FROM ".MAIN_DB_PREFIX."adherent_type";
|
||||||
|
$sql.= " WHERE entity = ".$conf->entity;
|
||||||
|
$sql.= " ORDER BY rowid";
|
||||||
|
$resql = $this->db->query($sql);
|
||||||
|
if ($resql)
|
||||||
|
{
|
||||||
|
$num = $this->db->num_rows($resql);
|
||||||
|
|
||||||
|
$s.='<option value="0"> </option>';
|
||||||
|
if (! $num) $s.='<option value="0" disabled="disabled">'.$langs->trans("NoCategoriesDefined").'</option>';
|
||||||
|
|
||||||
|
$i = 0;
|
||||||
|
while ($i < $num)
|
||||||
|
{
|
||||||
|
$obj = $this->db->fetch_object($resql);
|
||||||
|
|
||||||
|
$s.='<option value="'.$obj->rowid.'">'.dol_trunc($obj->libelle,38,'middle');
|
||||||
|
$s.='</option>';
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dol_print_error($this->db);
|
||||||
|
}
|
||||||
|
|
||||||
$s.='</select>';
|
$s.='</select>';
|
||||||
$s.='<br>';
|
$s.='<br>';
|
||||||
$s.=$langs->trans("DateEndSubscription").': ';
|
$s.=$langs->trans("DateEndSubscription").': ';
|
||||||
@ -135,7 +165,7 @@ class mailing_fraise extends MailingTargets
|
|||||||
/**
|
/**
|
||||||
* Renvoie url lien vers fiche de la source du destinataire du mailing
|
* Renvoie url lien vers fiche de la source du destinataire du mailing
|
||||||
*
|
*
|
||||||
* @param int $id ID
|
* @param int $id ID
|
||||||
* @return string Url lien
|
* @return string Url lien
|
||||||
*/
|
*/
|
||||||
function url($id)
|
function url($id)
|
||||||
@ -147,9 +177,9 @@ class mailing_fraise extends MailingTargets
|
|||||||
/**
|
/**
|
||||||
* Ajoute destinataires dans table des cibles
|
* Ajoute destinataires dans table des cibles
|
||||||
*
|
*
|
||||||
* @param int $mailing_id Id of emailing
|
* @param int $mailing_id Id of emailing
|
||||||
* @param array $filtersarray Param to filter sql request. Deprecated. Should use $_POST instead.
|
* @param array $filtersarray Param to filter sql request. Deprecated. Should use $_POST instead.
|
||||||
* @return int < 0 si erreur, nb ajout si ok
|
* @return int < 0 si erreur, nb ajout si ok
|
||||||
*/
|
*/
|
||||||
function add_to_target($mailing_id,$filtersarray=array())
|
function add_to_target($mailing_id,$filtersarray=array())
|
||||||
{
|
{
|
||||||
@ -162,7 +192,7 @@ class mailing_fraise extends MailingTargets
|
|||||||
$langs->load("members");
|
$langs->load("members");
|
||||||
$langs->load("companies");
|
$langs->load("companies");
|
||||||
|
|
||||||
$cibles = array();
|
$cibles = array();
|
||||||
$now=dol_now();
|
$now=dol_now();
|
||||||
|
|
||||||
$dateendsubscriptionafter=dol_mktime($_POST['subscriptionafterhour'],$_POST['subscriptionaftermin'],$_POST['subscriptionaftersec'],$_POST['subscriptionaftermonth'],$_POST['subscriptionafterday'],$_POST['subscriptionafteryear']);
|
$dateendsubscriptionafter=dol_mktime($_POST['subscriptionafterhour'],$_POST['subscriptionaftermin'],$_POST['subscriptionaftersec'],$_POST['subscriptionaftermonth'],$_POST['subscriptionafterday'],$_POST['subscriptionafteryear']);
|
||||||
@ -171,8 +201,8 @@ class mailing_fraise extends MailingTargets
|
|||||||
// La requete doit retourner: id, email, fk_contact, name, firstname
|
// La requete doit retourner: id, email, fk_contact, name, firstname
|
||||||
$sql = "SELECT a.rowid as id, a.email as email, null as fk_contact, ";
|
$sql = "SELECT a.rowid as id, a.email as email, null as fk_contact, ";
|
||||||
$sql.= " a.lastname, a.firstname,";
|
$sql.= " a.lastname, a.firstname,";
|
||||||
$sql.= " a.datefin, a.civility as civility_id, a.login, a.societe"; // Other fields
|
$sql.= " a.datefin, a.civility as civility_id, a.login, a.societe"; // Other fields
|
||||||
$sql.= " FROM ".MAIN_DB_PREFIX."adherent as a";
|
$sql.= " FROM ".MAIN_DB_PREFIX."adherent as a, ".MAIN_DB_PREFIX."adherent_type as ta";
|
||||||
$sql.= " WHERE a.email <> ''"; // Note that null != '' is false
|
$sql.= " WHERE a.email <> ''"; // Note that null != '' is false
|
||||||
$sql.= " AND a.email NOT IN (SELECT email FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE fk_mailing=".$mailing_id.")";
|
$sql.= " AND a.email NOT IN (SELECT email FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE fk_mailing=".$mailing_id.")";
|
||||||
if (isset($_POST["filter"]) && $_POST["filter"] == '-1') $sql.= " AND a.statut=-1";
|
if (isset($_POST["filter"]) && $_POST["filter"] == '-1') $sql.= " AND a.statut=-1";
|
||||||
@ -181,6 +211,8 @@ class mailing_fraise extends MailingTargets
|
|||||||
if (isset($_POST["filter"]) && $_POST["filter"] == '0') $sql.= " AND a.statut=0";
|
if (isset($_POST["filter"]) && $_POST["filter"] == '0') $sql.= " AND a.statut=0";
|
||||||
if ($dateendsubscriptionafter > 0) $sql.=" AND datefin > '".$this->db->idate($dateendsubscriptionafter)."'";
|
if ($dateendsubscriptionafter > 0) $sql.=" AND datefin > '".$this->db->idate($dateendsubscriptionafter)."'";
|
||||||
if ($dateendsubscriptionbefore > 0) $sql.=" AND datefin < '".$this->db->idate($dateendsubscriptionbefore)."'";
|
if ($dateendsubscriptionbefore > 0) $sql.=" AND datefin < '".$this->db->idate($dateendsubscriptionbefore)."'";
|
||||||
|
$sql.= " AND a.fk_adherent_type = ta.rowid";
|
||||||
|
if ($_POST['filter']) $sql.= " AND ta.rowid='".$_POST['filter']."'";
|
||||||
$sql.= " ORDER BY a.email";
|
$sql.= " ORDER BY a.email";
|
||||||
//print $sql;
|
//print $sql;
|
||||||
|
|
||||||
@ -202,11 +234,11 @@ class mailing_fraise extends MailingTargets
|
|||||||
if ($old <> $obj->email)
|
if ($old <> $obj->email)
|
||||||
{
|
{
|
||||||
$cibles[$j] = array(
|
$cibles[$j] = array(
|
||||||
'email' => $obj->email,
|
'email' => $obj->email,
|
||||||
'fk_contact' => $obj->fk_contact,
|
'fk_contact' => $obj->fk_contact,
|
||||||
'lastname' => $obj->lastname,
|
'lastname' => $obj->lastname,
|
||||||
'firstname' => $obj->firstname,
|
'firstname' => $obj->firstname,
|
||||||
'other' =>
|
'other' =>
|
||||||
($langs->transnoentities("Login").'='.$obj->login).';'.
|
($langs->transnoentities("Login").'='.$obj->login).';'.
|
||||||
($langs->transnoentities("UserTitle").'='.($obj->civility_id?$langs->transnoentities("Civility".$obj->civility_id):'')).';'.
|
($langs->transnoentities("UserTitle").'='.($obj->civility_id?$langs->transnoentities("Civility".$obj->civility_id):'')).';'.
|
||||||
($langs->transnoentities("DateEnd").'='.dol_print_date($this->db->jdate($obj->datefin),'day')).';'.
|
($langs->transnoentities("DateEnd").'='.dol_print_date($this->db->jdate($obj->datefin),'day')).';'.
|
||||||
@ -214,7 +246,7 @@ class mailing_fraise extends MailingTargets
|
|||||||
'source_url' => $this->url($obj->id),
|
'source_url' => $this->url($obj->id),
|
||||||
'source_id' => $obj->id,
|
'source_id' => $obj->id,
|
||||||
'source_type' => 'member'
|
'source_type' => 'member'
|
||||||
);
|
);
|
||||||
$old = $obj->email;
|
$old = $obj->email;
|
||||||
$j++;
|
$j++;
|
||||||
}
|
}
|
||||||
@ -230,7 +262,6 @@ class mailing_fraise extends MailingTargets
|
|||||||
}
|
}
|
||||||
|
|
||||||
return parent::add_to_target($mailing_id, $cibles);
|
return parent::add_to_target($mailing_id, $cibles);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
|
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
|
||||||
* Copyright (C) 2014-2015 Ferran Marcet <fmarcet@2byte.es>
|
* Copyright (C) 2014-2015 Ferran Marcet <fmarcet@2byte.es>
|
||||||
* Copyright (C) 201 Charlie Benke <charlies@patas-monkey.com>
|
* Copyright (C) 201 Charlie Benke <charlies@patas-monkey.com>
|
||||||
|
* Copyright (C) 2015 Abbes Bahfir <bafbes@gmail.com>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -466,8 +467,8 @@ if (empty($reshook))
|
|||||||
// Add line
|
// Add line
|
||||||
else if ($action == "addline" && $user->rights->ficheinter->creer)
|
else if ($action == "addline" && $user->rights->ficheinter->creer)
|
||||||
{
|
{
|
||||||
if (!GETPOST('np_desc'))
|
if (!GETPOST('np_desc') && empty($conf->global->FICHINTER_EMPTY_LINE_DESC) )
|
||||||
{
|
{
|
||||||
$mesg='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Description")).'</div>';
|
$mesg='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Description")).'</div>';
|
||||||
$error++;
|
$error++;
|
||||||
}
|
}
|
||||||
@ -1566,16 +1567,18 @@ else if ($id > 0 || ! empty($ref))
|
|||||||
|
|
||||||
$var=true;
|
$var=true;
|
||||||
|
|
||||||
print '<tr '.$bcnd[$var].">\n";
|
print '<tr '.$bcnd[$var] . ">\n";
|
||||||
print '<td>';
|
print '<td>';
|
||||||
// editeur wysiwyg
|
// editeur wysiwyg
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
|
if (empty($conf->global->FICHINTER_EMPTY_LINE_DESC)) {
|
||||||
$doleditor=new DolEditor('np_desc',GETPOST('np_desc','alpha'),'',100,'dolibarr_details','',false,true,$conf->global->FCKEDITOR_ENABLE_DETAILS,ROWS_2,70);
|
require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php';
|
||||||
$doleditor->Create();
|
$doleditor = new DolEditor('np_desc', GETPOST('np_desc', 'alpha'), '', 100, 'dolibarr_details', '', false, true, $conf->global->FCKEDITOR_ENABLE_DETAILS, ROWS_2, 70);
|
||||||
print '</td>';
|
$doleditor->Create();
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
// Date intervention
|
// Date intervention
|
||||||
print '<td align="center" class="nowrap">';
|
print '<td align="center" class="nowrap">';
|
||||||
$now=dol_now();
|
$now=dol_now();
|
||||||
$timearray=dol_getdate($now);
|
$timearray=dol_getdate($now);
|
||||||
if (! GETPOST('diday','int')) $timewithnohour=dol_mktime(0,0,0,$timearray['mon'],$timearray['mday'],$timearray['year']);
|
if (! GETPOST('diday','int')) $timewithnohour=dol_mktime(0,0,0,$timearray['mon'],$timearray['mday'],$timearray['year']);
|
||||||
|
|||||||
@ -353,7 +353,7 @@ class ProductFournisseur extends Product
|
|||||||
function fetch_product_fournisseur_price($rowid, $ignore_expression = 0)
|
function fetch_product_fournisseur_price($rowid, $ignore_expression = 0)
|
||||||
{
|
{
|
||||||
$sql = "SELECT pfp.rowid, pfp.price, pfp.quantity, pfp.unitprice, pfp.remise_percent, pfp.remise, pfp.tva_tx, pfp.fk_availability,";
|
$sql = "SELECT pfp.rowid, pfp.price, pfp.quantity, pfp.unitprice, pfp.remise_percent, pfp.remise, pfp.tva_tx, pfp.fk_availability,";
|
||||||
$sql.= " pfp.fk_soc, pfp.ref_fourn, pfp.fk_product, pfp.charges, pfp.unitcharges, pfp.fk_supplier_price_expression, pfp.delivery_time_days"; // , pfp.recuperableonly as fourn_tva_npr"; FIXME this field not exist in llx_product_fournisseur_price
|
$sql.= " pfp.fk_soc, pfp.ref_fourn, pfp.fk_product, pfp.charges, pfp.cost_price, pfp.unitcharges, pfp.fk_supplier_price_expression, pfp.delivery_time_days"; // , pfp.recuperableonly as fourn_tva_npr"; FIXME this field not exist in llx_product_fournisseur_price
|
||||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
|
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
|
||||||
$sql.= " WHERE pfp.rowid = ".$rowid;
|
$sql.= " WHERE pfp.rowid = ".$rowid;
|
||||||
|
|
||||||
@ -368,12 +368,12 @@ class ProductFournisseur extends Product
|
|||||||
$this->fourn_ref = $obj->ref_fourn; // deprecated
|
$this->fourn_ref = $obj->ref_fourn; // deprecated
|
||||||
$this->ref_supplier = $obj->ref_fourn;
|
$this->ref_supplier = $obj->ref_fourn;
|
||||||
$this->fourn_price = $obj->price;
|
$this->fourn_price = $obj->price;
|
||||||
$this->fourn_charges = $obj->charges;
|
$this->fourn_charges = $obj->charges; // deprecated
|
||||||
$this->fourn_qty = $obj->quantity;
|
$this->fourn_qty = $obj->quantity;
|
||||||
$this->fourn_remise_percent = $obj->remise_percent;
|
$this->fourn_remise_percent = $obj->remise_percent;
|
||||||
$this->fourn_remise = $obj->remise;
|
$this->fourn_remise = $obj->remise;
|
||||||
$this->fourn_unitprice = $obj->unitprice;
|
$this->fourn_unitprice = $obj->unitprice;
|
||||||
$this->fourn_unitcharges = $obj->unitcharges;
|
$this->fourn_unitcharges = $obj->unitcharges; // deprecated
|
||||||
$this->fourn_tva_tx = $obj->tva_tx;
|
$this->fourn_tva_tx = $obj->tva_tx;
|
||||||
$this->product_id = $obj->fk_product; // deprecated
|
$this->product_id = $obj->fk_product; // deprecated
|
||||||
$this->fk_product = $obj->fk_product;
|
$this->fk_product = $obj->fk_product;
|
||||||
@ -456,9 +456,9 @@ class ProductFournisseur extends Product
|
|||||||
$prodfourn->fourn_qty = $record["quantity"];
|
$prodfourn->fourn_qty = $record["quantity"];
|
||||||
$prodfourn->fourn_remise_percent = $record["remise_percent"];
|
$prodfourn->fourn_remise_percent = $record["remise_percent"];
|
||||||
$prodfourn->fourn_remise = $record["remise"];
|
$prodfourn->fourn_remise = $record["remise"];
|
||||||
$prodfourn->fourn_unitprice = $record["unitprice"];
|
$prodfourn->fourn_unitprice = $record["unitprice"];
|
||||||
$prodfourn->fourn_charges = $record["charges"];
|
$prodfourn->fourn_charges = $record["charges"]; // deprecated
|
||||||
$prodfourn->fourn_unitcharges = $record["unitcharges"];
|
$prodfourn->fourn_unitcharges = $record["unitcharges"]; // deprecated
|
||||||
$prodfourn->fourn_tva_tx = $record["tva_tx"];
|
$prodfourn->fourn_tva_tx = $record["tva_tx"];
|
||||||
$prodfourn->fourn_id = $record["fourn_id"];
|
$prodfourn->fourn_id = $record["fourn_id"];
|
||||||
$prodfourn->fourn_name = $record["supplier_name"];
|
$prodfourn->fourn_name = $record["supplier_name"];
|
||||||
@ -591,8 +591,8 @@ class ProductFournisseur extends Product
|
|||||||
$this->fourn_remise_percent = $record["remise_percent"];
|
$this->fourn_remise_percent = $record["remise_percent"];
|
||||||
$this->fourn_remise = $record["remise"];
|
$this->fourn_remise = $record["remise"];
|
||||||
$this->fourn_unitprice = $fourn_unitprice;
|
$this->fourn_unitprice = $fourn_unitprice;
|
||||||
$this->fourn_charges = $record["charges"];
|
$this->fourn_charges = $record["charges"]; // deprecated
|
||||||
$this->fourn_unitcharges = $record["unitcharges"];
|
$this->fourn_unitcharges = $record["unitcharges"]; // deprecated
|
||||||
$this->fourn_tva_tx = $record["tva_tx"];
|
$this->fourn_tva_tx = $record["tva_tx"];
|
||||||
$this->fourn_id = $record["fourn_id"];
|
$this->fourn_id = $record["fourn_id"];
|
||||||
$this->fourn_name = $record["supplier_name"];
|
$this->fourn_name = $record["supplier_name"];
|
||||||
|
|||||||
@ -2338,13 +2338,13 @@ else
|
|||||||
$formmail->withto=GETPOST("sendto")?GETPOST("sendto"):$liste;
|
$formmail->withto=GETPOST("sendto")?GETPOST("sendto"):$liste;
|
||||||
$formmail->withtocc=$liste;
|
$formmail->withtocc=$liste;
|
||||||
$formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC;
|
$formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC;
|
||||||
$formmail->withtopic=$outputlangs->trans('SendBillRef','__FACREF__');
|
$formmail->withtopic=$outputlangs->trans('SendBillRef','__REF__');
|
||||||
$formmail->withfile=2;
|
$formmail->withfile=2;
|
||||||
$formmail->withbody=1;
|
$formmail->withbody=1;
|
||||||
$formmail->withdeliveryreceipt=1;
|
$formmail->withdeliveryreceipt=1;
|
||||||
$formmail->withcancel=1;
|
$formmail->withcancel=1;
|
||||||
// Tableau des substitutions
|
// Tableau des substitutions
|
||||||
$formmail->substit['__FACREF__']=$object->ref;
|
$formmail->substit['__REF__']=$object->ref;
|
||||||
$formmail->substit['__SIGNATURE__']=$user->signature;
|
$formmail->substit['__SIGNATURE__']=$user->signature;
|
||||||
$formmail->substit['__PERSONALIZED__']='';
|
$formmail->substit['__PERSONALIZED__']='';
|
||||||
$formmail->substit['__CONTACTCIVNAME__']='';
|
$formmail->substit['__CONTACTCIVNAME__']='';
|
||||||
|
|||||||
@ -130,12 +130,18 @@ if ($action == 'create')
|
|||||||
// If no validator designated
|
// If no validator designated
|
||||||
if ($valideur < 1)
|
if ($valideur < 1)
|
||||||
{
|
{
|
||||||
header('Location: card.php?action=request&error=Valideur');
|
setEventMessage($langs->transnoentitiesnoconv('InvalidValidatorCP'), 'errors');
|
||||||
exit;
|
$error++;
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = 0;
|
$result = 0;
|
||||||
|
|
||||||
|
if ($type < 1)
|
||||||
|
{
|
||||||
|
setEventMessage($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv("Type")), 'errors');
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
|
|
||||||
if (! $error)
|
if (! $error)
|
||||||
{
|
{
|
||||||
$cp->fk_user = $userid;
|
$cp->fk_user = $userid;
|
||||||
@ -150,7 +156,7 @@ if ($action == 'create')
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If no SQL error we redirect to the request card
|
// If no SQL error we redirect to the request card
|
||||||
if ($result > 0)
|
if (! $error && $result > 0)
|
||||||
{
|
{
|
||||||
$db->commit();
|
$db->commit();
|
||||||
|
|
||||||
@ -160,10 +166,6 @@ if ($action == 'create')
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
$db->rollback();
|
$db->rollback();
|
||||||
|
|
||||||
// Otherwise we display the request form with the SQL error message
|
|
||||||
header('Location: card.php?action=request');
|
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -813,6 +815,7 @@ if (empty($id) || $action == 'add' || $action == 'request' || $action == 'create
|
|||||||
$arraytypeleaves[$val['rowid']]=$labeltoshow;
|
$arraytypeleaves[$val['rowid']]=$labeltoshow;
|
||||||
}
|
}
|
||||||
print $form->selectarray('type', $arraytypeleaves, (GETPOST('type')?GETPOST('type'):''), 1);
|
print $form->selectarray('type', $arraytypeleaves, (GETPOST('type')?GETPOST('type'):''), 1);
|
||||||
|
if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"),1);
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|
||||||
@ -821,10 +824,10 @@ if (empty($id) || $action == 'add' || $action == 'request' || $action == 'create
|
|||||||
print '<td class="fieldrequired">'.$langs->trans("DateDebCP").' ('.$langs->trans("FirstDayOfHoliday").')</td>';
|
print '<td class="fieldrequired">'.$langs->trans("DateDebCP").' ('.$langs->trans("FirstDayOfHoliday").')</td>';
|
||||||
print '<td>';
|
print '<td>';
|
||||||
// Si la demande ne vient pas de l'agenda
|
// Si la demande ne vient pas de l'agenda
|
||||||
if(!isset($_GET['datep'])) {
|
if (! GETPOST('date_debut_')) {
|
||||||
$form->select_date(-1,'date_debut_');
|
$form->select_date(-1,'date_debut_');
|
||||||
} else {
|
} else {
|
||||||
$tmpdate = dol_mktime(0, 0, 0, GETPOST('datepmonth'), GETPOST('datepday'), GETPOST('datepyear'));
|
$tmpdate = dol_mktime(0, 0, 0, GETPOST('date_debut_month'), GETPOST('date_debut_day'), GETPOST('date_debut_year'));
|
||||||
$form->select_date($tmpdate,'date_debut_');
|
$form->select_date($tmpdate,'date_debut_');
|
||||||
}
|
}
|
||||||
print ' ';
|
print ' ';
|
||||||
@ -837,10 +840,10 @@ if (empty($id) || $action == 'add' || $action == 'request' || $action == 'create
|
|||||||
print '<td class="fieldrequired">'.$langs->trans("DateFinCP").' ('.$langs->trans("LastDayOfHoliday").')</td>';
|
print '<td class="fieldrequired">'.$langs->trans("DateFinCP").' ('.$langs->trans("LastDayOfHoliday").')</td>';
|
||||||
print '<td>';
|
print '<td>';
|
||||||
// Si la demande ne vient pas de l'agenda
|
// Si la demande ne vient pas de l'agenda
|
||||||
if(!isset($_GET['datep'])) {
|
if (! GETPOST('date_fin_')) {
|
||||||
$form->select_date(-1,'date_fin_');
|
$form->select_date(-1,'date_fin_');
|
||||||
} else {
|
} else {
|
||||||
$tmpdate = dol_mktime(0, 0, 0, GETPOST('datefmonth'), GETPOST('datefday'), GETPOST('datefyear'));
|
$tmpdate = dol_mktime(0, 0, 0, GETPOST('date_fin_month'), GETPOST('date_fin_day'), GETPOST('date_fin_year'));
|
||||||
$form->select_date($tmpdate,'date_fin_');
|
$form->select_date($tmpdate,'date_fin_');
|
||||||
}
|
}
|
||||||
print ' ';
|
print ' ';
|
||||||
@ -857,7 +860,7 @@ if (empty($id) || $action == 'add' || $action == 'request' || $action == 'create
|
|||||||
$valideurarray = array();
|
$valideurarray = array();
|
||||||
foreach($valideurobjects as $val) $valideurarray[$val->id]=$val->id;
|
foreach($valideurobjects as $val) $valideurarray[$val->id]=$val->id;
|
||||||
print '<td>';
|
print '<td>';
|
||||||
print $form->select_dolusers($user->fk_user, "valideur", 1, "", 0, $valideurarray); // By default, hierarchical parent
|
print $form->select_dolusers((GETPOST('valideur')>0?GETPOST('valideur'):$user->fk_user), "valideur", 1, "", 0, $valideurarray, 0, 0, 0, 0, '', 0, '', '', 1); // By default, hierarchical parent
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|
||||||
@ -984,7 +987,6 @@ else
|
|||||||
|
|
||||||
$head=holiday_prepare_head($cp);
|
$head=holiday_prepare_head($cp);
|
||||||
|
|
||||||
dol_fiche_head($head,'card',$langs->trans("CPTitreMenu"),0,'holiday');
|
|
||||||
|
|
||||||
if ($action == 'edit' && $cp->statut == 1)
|
if ($action == 'edit' && $cp->statut == 1)
|
||||||
{
|
{
|
||||||
@ -994,6 +996,8 @@ else
|
|||||||
print '<input type="hidden" name="holiday_id" value="'.$id.'" />'."\n";
|
print '<input type="hidden" name="holiday_id" value="'.$id.'" />'."\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dol_fiche_head($head,'card',$langs->trans("CPTitreMenu"),0,'holiday');
|
||||||
|
|
||||||
print '<table class="border" width="100%">';
|
print '<table class="border" width="100%">';
|
||||||
print '<tbody>';
|
print '<tbody>';
|
||||||
|
|
||||||
@ -1168,19 +1172,20 @@ else
|
|||||||
print '</tbody>';
|
print '</tbody>';
|
||||||
print '</table>';
|
print '</table>';
|
||||||
|
|
||||||
|
dol_fiche_end();
|
||||||
|
|
||||||
if ($action == 'edit' && $cp->statut == 1)
|
if ($action == 'edit' && $cp->statut == 1)
|
||||||
{
|
{
|
||||||
print '<br><div align="center">';
|
print '<div align="center">';
|
||||||
if ($canedit && $cp->statut == 1)
|
if ($canedit && $cp->statut == 1)
|
||||||
{
|
{
|
||||||
print '<input type="submit" value="'.$langs->trans("UpdateButtonCP").'" class="button">';
|
print '<input type="submit" value="'.$langs->trans("Save").'" class="button">';
|
||||||
}
|
}
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
}
|
}
|
||||||
|
|
||||||
dol_fiche_end();
|
|
||||||
|
|
||||||
if (! $edit)
|
if (! $edit)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -419,7 +419,7 @@ if (! empty($holiday->holiday))
|
|||||||
if($holiday_payes == '2')
|
if($holiday_payes == '2')
|
||||||
{
|
{
|
||||||
print '<tr>';
|
print '<tr>';
|
||||||
print '<td colspan="9" '.$bc[false].'">'.$langs->trans('None').'</td>';
|
print '<td colspan="10" '.$bc[false].'">'.$langs->trans('None').'</td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -101,6 +101,8 @@ ALTER TABLE llx_commande ADD COLUMN fk_warehouse integer DEFAULT NULL AFTER fk_s
|
|||||||
ALTER TABLE llx_commande_fournisseur ADD COLUMN billed smallint DEFAULT 0 AFTER fk_statut;
|
ALTER TABLE llx_commande_fournisseur ADD COLUMN billed smallint DEFAULT 0 AFTER fk_statut;
|
||||||
ALTER TABLE llx_commande_fournisseur ADD INDEX billed (billed);
|
ALTER TABLE llx_commande_fournisseur ADD INDEX billed (billed);
|
||||||
|
|
||||||
|
ALTER TABLE llx_product ADD COLUMN cost_price double(24,8) DEFAULT NULL;
|
||||||
|
|
||||||
ALTER TABLE llx_ecm_directories MODIFY COLUMN fullpath varchar(750);
|
ALTER TABLE llx_ecm_directories MODIFY COLUMN fullpath varchar(750);
|
||||||
ALTER TABLE llx_ecm_directories DROP INDEX idx_ecm_directories;
|
ALTER TABLE llx_ecm_directories DROP INDEX idx_ecm_directories;
|
||||||
ALTER TABLE llx_ecm_directories ADD UNIQUE INDEX uk_ecm_directories (label, fk_parent, entity);
|
ALTER TABLE llx_ecm_directories ADD UNIQUE INDEX uk_ecm_directories (label, fk_parent, entity);
|
||||||
|
|||||||
@ -31,7 +31,6 @@ create table llx_product
|
|||||||
|
|
||||||
datec datetime,
|
datec datetime,
|
||||||
tms timestamp,
|
tms timestamp,
|
||||||
virtual tinyint DEFAULT 0 NOT NULL, -- Not used. Used by external modules. Value 0 for physical product, 1 for virtual product
|
|
||||||
fk_parent integer DEFAULT 0, -- Not used. Used by external modules. Virtual product id
|
fk_parent integer DEFAULT 0, -- Not used. Used by external modules. Virtual product id
|
||||||
|
|
||||||
label varchar(255) NOT NULL,
|
label varchar(255) NOT NULL,
|
||||||
@ -44,8 +43,9 @@ create table llx_product
|
|||||||
price_min double(24,8) DEFAULT 0,
|
price_min double(24,8) DEFAULT 0,
|
||||||
price_min_ttc double(24,8) DEFAULT 0,
|
price_min_ttc double(24,8) DEFAULT 0,
|
||||||
price_base_type varchar(3) DEFAULT 'HT',
|
price_base_type varchar(3) DEFAULT 'HT',
|
||||||
tva_tx double(6,3), -- Default VAT rate of product
|
cost_price double(24,8) DEFAULT NULL, -- Cost price without tax. Can be used for margin calculation.
|
||||||
recuperableonly integer NOT NULL DEFAULT '0', -- French NPR VAT
|
tva_tx double(6,3), -- Default VAT rate of product
|
||||||
|
recuperableonly integer NOT NULL DEFAULT '0', -- French NPR VAT
|
||||||
localtax1_tx double(6,3) DEFAULT 0, -- Spanish local VAT 1
|
localtax1_tx double(6,3) DEFAULT 0, -- Spanish local VAT 1
|
||||||
localtax2_tx double(6,3) DEFAULT 0, -- Spanish local VAT 2
|
localtax2_tx double(6,3) DEFAULT 0, -- Spanish local VAT 2
|
||||||
fk_user_author integer DEFAULT NULL, -- user making creation
|
fk_user_author integer DEFAULT NULL, -- user making creation
|
||||||
@ -76,7 +76,7 @@ create table llx_product
|
|||||||
fifo double(24,8), -- To store valuation of stock calculated using fifo method, for this product
|
fifo double(24,8), -- To store valuation of stock calculated using fifo method, for this product
|
||||||
lifo double(24,8), -- To store valuation of stock calculated using lifo method, for this product
|
lifo double(24,8), -- To store valuation of stock calculated using lifo method, for this product
|
||||||
canvas varchar(32) DEFAULT NULL,
|
canvas varchar(32) DEFAULT NULL,
|
||||||
finished tinyint DEFAULT NULL,
|
finished tinyint DEFAULT NULL, -- 1=manufactured product, 0=matiere premiere
|
||||||
hidden tinyint DEFAULT 0, -- Not used. Deprecated.
|
hidden tinyint DEFAULT 0, -- Not used. Deprecated.
|
||||||
import_key varchar(14), -- Import key
|
import_key varchar(14), -- Import key
|
||||||
fk_price_expression integer, -- Link to the rule for dynamic price calculation
|
fk_price_expression integer, -- Link to the rule for dynamic price calculation
|
||||||
|
|||||||
@ -34,12 +34,12 @@ create table llx_product_fournisseur_price
|
|||||||
remise_percent double NOT NULL DEFAULT 0,
|
remise_percent double NOT NULL DEFAULT 0,
|
||||||
remise double NOT NULL DEFAULT 0,
|
remise double NOT NULL DEFAULT 0,
|
||||||
unitprice double(24,8) DEFAULT 0,
|
unitprice double(24,8) DEFAULT 0,
|
||||||
charges double(24,8) DEFAULT 0,
|
charges double(24,8) DEFAULT 0, -- to store transport cost. Constant PRODUCT_CHARGES must be set to see it.
|
||||||
unitcharges double(24,8) DEFAULT 0,
|
unitcharges double(24,8) DEFAULT 0, -- deprecated
|
||||||
tva_tx double(6,3) NOT NULL,
|
tva_tx double(6,3) NOT NULL,
|
||||||
info_bits integer NOT NULL DEFAULT 0,
|
info_bits integer NOT NULL DEFAULT 0,
|
||||||
fk_user integer,
|
fk_user integer,
|
||||||
fk_supplier_price_expression integer, -- Link to the rule for dynamic price calculation
|
fk_supplier_price_expression integer, -- Link to the rule for dynamic price calculation
|
||||||
import_key varchar(14), -- Import key
|
import_key varchar(14), -- Import key
|
||||||
delivery_time_days integer
|
delivery_time_days integer
|
||||||
)ENGINE=innodb;
|
)ENGINE=innodb;
|
||||||
|
|||||||
@ -74,6 +74,7 @@ PaymentsAlreadyDone=Payments already done
|
|||||||
PaymentsBackAlreadyDone=Payments back already done
|
PaymentsBackAlreadyDone=Payments back already done
|
||||||
PaymentRule=Payment rule
|
PaymentRule=Payment rule
|
||||||
PaymentMode=Payment type
|
PaymentMode=Payment type
|
||||||
|
PaymentModeShort=Payment type
|
||||||
PaymentTerm=Payment term
|
PaymentTerm=Payment term
|
||||||
PaymentConditions=Payment terms
|
PaymentConditions=Payment terms
|
||||||
PaymentConditionsShort=Payment terms
|
PaymentConditionsShort=Payment terms
|
||||||
|
|||||||
@ -84,9 +84,12 @@ EachInvoiceWillBeAttachedToEmail=A document using default invoice document templ
|
|||||||
MailTopicSendRemindUnpaidInvoices=Reminder of invoice %s (%s)
|
MailTopicSendRemindUnpaidInvoices=Reminder of invoice %s (%s)
|
||||||
SendRemind=Send reminder by EMails
|
SendRemind=Send reminder by EMails
|
||||||
RemindSent=%s reminder(s) sent
|
RemindSent=%s reminder(s) sent
|
||||||
AllRecipientSelectedForRemind=All thirdparties selected and if an email is set (note that one mail per invoice will be sent)
|
AllRecipientSelected=All thirdparties selected and if an email is set.
|
||||||
NoRemindSent=No EMail reminder sent
|
NoRemindSent=No EMail reminder sent
|
||||||
ResultOfMassSending=Result of mass EMail reminders sending
|
ResultOfMailSending=Result of mass EMail sending
|
||||||
|
NbSelected=Nb selected
|
||||||
|
NbIgnored=Nb ignored
|
||||||
|
NbSent=Nb sent
|
||||||
|
|
||||||
# Libelle des modules de liste de destinataires mailing
|
# Libelle des modules de liste de destinataires mailing
|
||||||
MailingModuleDescContactCompanies=Contacts/addresses of all third parties (customer, prospect, supplier, ...)
|
MailingModuleDescContactCompanies=Contacts/addresses of all third parties (customer, prospect, supplier, ...)
|
||||||
|
|||||||
@ -698,6 +698,7 @@ Deductible=Deductible
|
|||||||
from=from
|
from=from
|
||||||
toward=toward
|
toward=toward
|
||||||
Access=Access
|
Access=Access
|
||||||
|
SelectAction=Select action
|
||||||
HelpCopyToClipboard=Use Ctrl+C to copy to clipboard
|
HelpCopyToClipboard=Use Ctrl+C to copy to clipboard
|
||||||
SaveUploadedFileWithMask=Save file on server with name "<strong>%s</strong>" (otherwise "%s")
|
SaveUploadedFileWithMask=Save file on server with name "<strong>%s</strong>" (otherwise "%s")
|
||||||
OriginFileName=Original filename
|
OriginFileName=Original filename
|
||||||
|
|||||||
@ -58,13 +58,13 @@ Miscellaneous=Miscellaneous
|
|||||||
NbOfActiveNotifications=Number of notifications (nb of recipient emails)
|
NbOfActiveNotifications=Number of notifications (nb of recipient emails)
|
||||||
PredefinedMailTest=This is a test mail.\nThe two lines are separated by a carriage return.\n\n__SIGNATURE__
|
PredefinedMailTest=This is a test mail.\nThe two lines are separated by a carriage return.\n\n__SIGNATURE__
|
||||||
PredefinedMailTestHtml=This is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__SIGNATURE__
|
PredefinedMailTestHtml=This is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__SIGNATURE__
|
||||||
PredefinedMailContentSendInvoice=__CONTACTCIVNAME__\n\nYou will find here the invoice __FACREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
|
PredefinedMailContentSendInvoice=__CONTACTCIVNAME__\n\nYou will find here the invoice __REF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
|
||||||
PredefinedMailContentSendInvoiceReminder=__CONTACTCIVNAME__\n\nWe would like to warn you that the invoice __FACREF__ seems to not being payed. So this is the invoice in attachment again, as a reminder.\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
|
PredefinedMailContentSendInvoiceReminder=__CONTACTCIVNAME__\n\nWe would like to warn you that the invoice __REF__ seems to not being payed. So this is the invoice in attachment again, as a reminder.\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
|
||||||
PredefinedMailContentSendProposal=__CONTACTCIVNAME__\n\nYou will find here the commercial proposal __PROPREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
|
PredefinedMailContentSendProposal=__CONTACTCIVNAME__\n\nYou will find here the commercial proposal __PROPREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
|
||||||
PredefinedMailContentSendSupplierProposal=__CONTACTCIVNAME__\n\nYou will find here the price request __ASKREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
|
PredefinedMailContentSendSupplierProposal=__CONTACTCIVNAME__\n\nYou will find here the price request __ASKREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
|
||||||
PredefinedMailContentSendOrder=__CONTACTCIVNAME__\n\nYou will find here the order __ORDERREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
|
PredefinedMailContentSendOrder=__CONTACTCIVNAME__\n\nYou will find here the order __ORDERREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
|
||||||
PredefinedMailContentSendSupplierOrder=__CONTACTCIVNAME__\n\nYou will find here our order __ORDERREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
|
PredefinedMailContentSendSupplierOrder=__CONTACTCIVNAME__\n\nYou will find here our order __ORDERREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
|
||||||
PredefinedMailContentSendSupplierInvoice=__CONTACTCIVNAME__\n\nYou will find here the invoice __FACREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
|
PredefinedMailContentSendSupplierInvoice=__CONTACTCIVNAME__\n\nYou will find here the invoice __REF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
|
||||||
PredefinedMailContentSendShipping=__CONTACTCIVNAME__\n\nYou will find here the shipping __SHIPPINGREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
|
PredefinedMailContentSendShipping=__CONTACTCIVNAME__\n\nYou will find here the shipping __SHIPPINGREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
|
||||||
PredefinedMailContentSendFichInter=__CONTACTCIVNAME__\n\nYou will find here the intervention __FICHINTERREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
|
PredefinedMailContentSendFichInter=__CONTACTCIVNAME__\n\nYou will find here the intervention __FICHINTERREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
|
||||||
PredefinedMailContentThirdparty=__CONTACTCIVNAME__\n\n__PERSONALIZED__\n\n__SIGNATURE__
|
PredefinedMailContentThirdparty=__CONTACTCIVNAME__\n\n__PERSONALIZED__\n\n__SIGNATURE__
|
||||||
|
|||||||
@ -76,6 +76,8 @@ SellingPriceHT=Selling price (net of tax)
|
|||||||
SellingPriceTTC=Selling price (inc. tax)
|
SellingPriceTTC=Selling price (inc. tax)
|
||||||
PublicPrice=Public price
|
PublicPrice=Public price
|
||||||
CurrentPrice=Current price
|
CurrentPrice=Current price
|
||||||
|
CostPriceDescription=This price (net of tax) can be used to store the average amount this product cost to your company. It may be any price you calculate yourself, for example from the average buying price plus average production and distribution cost.
|
||||||
|
CostPriceUsage=In a future version, this value could be used for margin calculation.
|
||||||
NewPrice=New price
|
NewPrice=New price
|
||||||
MinPrice=Min. selling price
|
MinPrice=Min. selling price
|
||||||
MinPriceHT=Min. selling price (net of tax)
|
MinPriceHT=Min. selling price (net of tax)
|
||||||
@ -190,6 +192,8 @@ ClonePricesProduct=Clone main informations and prices
|
|||||||
CloneCompositionProduct=Clone packaged product/service
|
CloneCompositionProduct=Clone packaged product/service
|
||||||
ProductIsUsed=This product is used
|
ProductIsUsed=This product is used
|
||||||
NewRefForClone=Ref. of new product/service
|
NewRefForClone=Ref. of new product/service
|
||||||
|
SellingPrices=Selling prices
|
||||||
|
BuyingPrices=Buying prices
|
||||||
CustomerPrices=Customer prices
|
CustomerPrices=Customer prices
|
||||||
SuppliersPrices=Supplier prices
|
SuppliersPrices=Supplier prices
|
||||||
SuppliersPricesOfProductsOrServices=Supplier prices (of products or services)
|
SuppliersPricesOfProductsOrServices=Supplier prices (of products or services)
|
||||||
@ -309,3 +313,4 @@ PropalMergePdfProductChooseFile=Select PDF files
|
|||||||
IncludingProductWithTag=Including product/service with tag
|
IncludingProductWithTag=Including product/service with tag
|
||||||
DefaultPriceRealPriceMayDependOnCustomer=Default price, real price may depend on customer
|
DefaultPriceRealPriceMayDependOnCustomer=Default price, real price may depend on customer
|
||||||
WarningSelectOneDocument=Please select at least one document
|
WarningSelectOneDocument=Please select at least one document
|
||||||
|
DefaultUnitToShow=Units
|
||||||
|
|||||||
@ -297,3 +297,4 @@ PropalMergePdfProductChooseFile=Sélectionnez les fichiers PDF
|
|||||||
IncludingProductWithTag=Incluant un produit ayant le tag/catégorie
|
IncludingProductWithTag=Incluant un produit ayant le tag/catégorie
|
||||||
DefaultPriceRealPriceMayDependOnCustomer=Prix par défaut, le prix réel peut dépendre du client
|
DefaultPriceRealPriceMayDependOnCustomer=Prix par défaut, le prix réel peut dépendre du client
|
||||||
WarningSelectOneDocument=Sélectionnez au moins un document
|
WarningSelectOneDocument=Sélectionnez au moins un document
|
||||||
|
DefaultUnitToShow=Unités
|
||||||
|
|||||||
@ -178,6 +178,7 @@ TaskAssignedToEnterTime=Tâche assignée. La saisie de temps sur cette tâche de
|
|||||||
OpenedProjectsByThirdparties=Projets ouverts par tiers
|
OpenedProjectsByThirdparties=Projets ouverts par tiers
|
||||||
OpportunityTotalAmount=Montant total des opportunités
|
OpportunityTotalAmount=Montant total des opportunités
|
||||||
OpportunityPonderatedAmount=Montant pondéré des opportunités
|
OpportunityPonderatedAmount=Montant pondéré des opportunités
|
||||||
|
OpportunityPonderatedAmountDesc=Montant pondéré par la probabilité (dépendante du statut) des opportunités
|
||||||
OppStatusPROSP=Prospection
|
OppStatusPROSP=Prospection
|
||||||
OppStatusQUAL=Qualification
|
OppStatusQUAL=Qualification
|
||||||
OppStatusPROPO=Proposition
|
OppStatusPROPO=Proposition
|
||||||
|
|||||||
@ -1749,9 +1749,9 @@ function left_menu($menu_array_before, $helppagename='', $notused='', $menu_arra
|
|||||||
$bugbaseurl.= urlencode("- **URL**: " . $_SERVER["REQUEST_URI"] . "\n");
|
$bugbaseurl.= urlencode("- **URL**: " . $_SERVER["REQUEST_URI"] . "\n");
|
||||||
$bugbaseurl.= urlencode("\n");
|
$bugbaseurl.= urlencode("\n");
|
||||||
$bugbaseurl.= urlencode("# Report\n");
|
$bugbaseurl.= urlencode("# Report\n");
|
||||||
print '<p id="blockvmenuhelpbugreport" class="blockvmenuhelp">';
|
print '<div id="blockvmenuhelpbugreport" class="blockvmenuhelp">';
|
||||||
print '<a class="help" target="_blank" href="'.$bugbaseurl.'">'.$langs->trans("FindBug").'</a>';
|
print '<a class="help" target="_blank" href="'.$bugbaseurl.'">'.$langs->trans("FindBug").'</a>';
|
||||||
print '</p>';
|
print '</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
print "</div>\n";
|
print "</div>\n";
|
||||||
|
|||||||
@ -1563,7 +1563,7 @@ class Product extends CommonObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
$sql = "SELECT rowid, ref, ref_ext, label, description, url, note, customcode, fk_country, price, price_ttc,";
|
$sql = "SELECT rowid, ref, ref_ext, label, description, url, note, customcode, fk_country, price, price_ttc,";
|
||||||
$sql.= " price_min, price_min_ttc, price_base_type, tva_tx, recuperableonly as tva_npr, localtax1_tx, localtax2_tx, tosell,";
|
$sql.= " price_min, price_min_ttc, price_base_type, cost_price, tva_tx, recuperableonly as tva_npr, localtax1_tx, localtax2_tx, tosell,";
|
||||||
$sql.= " tobuy, fk_product_type, duration, seuil_stock_alerte, canvas,";
|
$sql.= " tobuy, fk_product_type, duration, seuil_stock_alerte, canvas,";
|
||||||
$sql.= " weight, weight_units, length, length_units, surface, surface_units, volume, volume_units, barcode, fk_barcode_type, finished,";
|
$sql.= " weight, weight_units, length, length_units, surface, surface_units, volume, volume_units, barcode, fk_barcode_type, finished,";
|
||||||
$sql.= " accountancy_code_buy, accountancy_code_sell, stock, pmp,";
|
$sql.= " accountancy_code_buy, accountancy_code_sell, stock, pmp,";
|
||||||
@ -1606,6 +1606,7 @@ class Product extends CommonObject
|
|||||||
$this->price_min = $obj->price_min;
|
$this->price_min = $obj->price_min;
|
||||||
$this->price_min_ttc = $obj->price_min_ttc;
|
$this->price_min_ttc = $obj->price_min_ttc;
|
||||||
$this->price_base_type = $obj->price_base_type;
|
$this->price_base_type = $obj->price_base_type;
|
||||||
|
$this->cost_price = $obj->cost_price;
|
||||||
$this->tva_tx = $obj->tva_tx;
|
$this->tva_tx = $obj->tva_tx;
|
||||||
//! French VAT NPR
|
//! French VAT NPR
|
||||||
$this->tva_npr = $obj->tva_npr;
|
$this->tva_npr = $obj->tva_npr;
|
||||||
|
|||||||
@ -46,6 +46,7 @@ $rowid=GETPOST('rowid','int');
|
|||||||
$action=GETPOST('action', 'alpha');
|
$action=GETPOST('action', 'alpha');
|
||||||
$cancel=GETPOST('cancel', 'alpha');
|
$cancel=GETPOST('cancel', 'alpha');
|
||||||
$socid=GETPOST('socid', 'int');
|
$socid=GETPOST('socid', 'int');
|
||||||
|
$cost_price=GETPOST('cost_price', 'int');
|
||||||
$backtopage=GETPOST('backtopage','alpha');
|
$backtopage=GETPOST('backtopage','alpha');
|
||||||
$error=0;
|
$error=0;
|
||||||
|
|
||||||
@ -91,17 +92,37 @@ if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'e
|
|||||||
|
|
||||||
if (empty($reshook))
|
if (empty($reshook))
|
||||||
{
|
{
|
||||||
|
if ($action == 'setcost_price')
|
||||||
|
{
|
||||||
|
if ($id)
|
||||||
|
{
|
||||||
|
$result=$object->fetch($id);
|
||||||
|
$result=$object->setValueFrom('cost_price', price2num($cost_price));
|
||||||
|
if ($result > 0)
|
||||||
|
{
|
||||||
|
$object->cost_price = price2num($cost_price);
|
||||||
|
setEventMessage($langs->trans("RecordSaved"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$error++;
|
||||||
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$action='';
|
||||||
|
}
|
||||||
|
|
||||||
if ($action == 'remove_pf')
|
if ($action == 'remove_pf')
|
||||||
{
|
{
|
||||||
if ($rowid)
|
if ($rowid) // id of product supplier price to remove
|
||||||
{
|
{
|
||||||
$action = '';
|
$action = '';
|
||||||
$result=$product->remove_product_fournisseur_price($rowid);
|
$result=$object->remove_product_fournisseur_price($rowid);
|
||||||
if($result > 0){
|
if($result > 0){
|
||||||
setEventMessage($langs->trans("PriceRemoved"));
|
setEventMessage($langs->trans("PriceRemoved"));
|
||||||
}else{
|
}else{
|
||||||
$error++;
|
$error++;
|
||||||
setEventMessages($product->error, $product->errors, 'errors');
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -282,6 +303,17 @@ if ($id > 0 || $ref)
|
|||||||
}
|
}
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
|
|
||||||
|
// Cost price. Can be used for margin module for option "calculate margin on explicit cost price
|
||||||
|
// Accountancy sell code
|
||||||
|
print '<tr><td>';
|
||||||
|
$textdesc =$langs->trans("CostPriceDescription");
|
||||||
|
$textdesc.="<br>".$langs->trans("CostPriceUsage");
|
||||||
|
$text=$form->textwithpicto($langs->trans("CostPrice"), $textdesc, 1, 'help', '');
|
||||||
|
print $form->editfieldkey($text,'cost_price',$object->cost_price,$object,$user->rights->produit->creer||$user->rights->service->creer,'amount:6');
|
||||||
|
print '</td><td colspan="2">';
|
||||||
|
print $form->editfieldval($text,'cost_price',$object->cost_price,$object,$user->rights->produit->creer||$user->rights->service->creer,'amount:6');
|
||||||
|
print '</td></tr>';
|
||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
|
|
||||||
print '</div>';
|
print '</div>';
|
||||||
@ -463,7 +495,7 @@ if ($id > 0 || $ref)
|
|||||||
print '<td><input class="flat" name="delivery_time_days" size="4" value="'.($rowid ? $object->delivery_time_days : '').'"> '.$langs->trans('days').'</td>';
|
print '<td><input class="flat" name="delivery_time_days" size="4" value="'.($rowid ? $object->delivery_time_days : '').'"> '.$langs->trans('days').'</td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|
||||||
// Charges ????
|
// Option to define a transport cost on supplier price
|
||||||
if ($conf->global->PRODUCT_CHARGES)
|
if ($conf->global->PRODUCT_CHARGES)
|
||||||
{
|
{
|
||||||
if (! empty($conf->margin->enabled))
|
if (! empty($conf->margin->enabled))
|
||||||
|
|||||||
@ -132,7 +132,7 @@ include DOL_DOCUMENT_ROOT.'/projet/graph_opportunities.inc.php';
|
|||||||
|
|
||||||
|
|
||||||
// List of draft projects
|
// List of draft projects
|
||||||
print_projecttasks_array($db,$form,$socid,$projectsListId,0,0,$listofoppstatus,array('declaredprogress'));
|
print_projecttasks_array($db, $form, $socid, $projectsListId, 0, 0, $listofoppstatus, array('projectlabel', 'plannedworkload', 'declaredprogress'));
|
||||||
|
|
||||||
|
|
||||||
print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
|
print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
|
||||||
|
|||||||
@ -84,8 +84,58 @@ $syear = GETPOST('syear','int');
|
|||||||
|
|
||||||
if ($search_status == '') $search_status=-1; // -1 or 1
|
if ($search_status == '') $search_status=-1; // -1 or 1
|
||||||
|
|
||||||
// Purge criteria
|
// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
|
||||||
if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers
|
$contextpage='projectlist';
|
||||||
|
|
||||||
|
// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
|
||||||
|
$hookmanager->initHooks(array($contextpage));
|
||||||
|
$extrafields = new ExtraFields($db);
|
||||||
|
|
||||||
|
// fetch optionals attributes and labels
|
||||||
|
$extralabels = $extrafields->fetch_name_optionals_label('project');
|
||||||
|
$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
|
||||||
|
|
||||||
|
// List of fields to search into when doing a "search in all"
|
||||||
|
$fieldstosearchall = array(
|
||||||
|
'p.ref'=>"Ref",
|
||||||
|
'p.title'=>"Label",
|
||||||
|
's.nom'=>"ThirdPartyName",
|
||||||
|
"p.note_public"=>"NotePublic"
|
||||||
|
);
|
||||||
|
if (empty($user->socid)) $fieldstosearchall["p.note_private"]="NotePrivate";
|
||||||
|
|
||||||
|
$arrayfields=array(
|
||||||
|
'p.ref'=>array('label'=>$langs->trans("Ref"), 'checked'=>1),
|
||||||
|
'p.label'=>array('label'=>$langs->trans("Label"), 'checked'=>1),
|
||||||
|
's.nom'=>array('label'=>$langs->trans("ThirdParty"), 'checked'=>1),
|
||||||
|
'commerical'=>array('label'=>$langs->trans("SaleRepresentative"), 'checked'=>1),
|
||||||
|
'p.date_start'=>array('label'=>$langs->trans("DateStart"), 'checked'=>1, 'position'=>100),
|
||||||
|
'p.date_end'=>array('label'=>$langs->trans("DateEnd"), 'checked'=>1, 'position'=>101),
|
||||||
|
'p.visibility'=>array('label'=>$langs->trans("Visibility"), 'checked'=>1, 'position'=>102),
|
||||||
|
'p.opportunity_amount'=>array('label'=>$langs->trans("OpportunityAmount"), 'checked'=>1, 'enabled'=>$conf->global->PROJECT_USE_OPPORTUNITIES, 'position'=>103),
|
||||||
|
'p.opportunity_status'=>array('label'=>$langs->trans("OpportunityStatus"), 'checked'=>1, 'enabled'=>$conf->global->PROJECT_USE_OPPORTUNITIES, 'position'=>104),
|
||||||
|
'p.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500),
|
||||||
|
'p.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500),
|
||||||
|
'p.status'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000),
|
||||||
|
);
|
||||||
|
// Extra fields
|
||||||
|
if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
|
||||||
|
{
|
||||||
|
foreach($extrafields->attribute_label as $key => $val)
|
||||||
|
{
|
||||||
|
$arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>$extrafields->attribute_list[$key], 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>$extrafields->attribute_perms[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Actions
|
||||||
|
*/
|
||||||
|
|
||||||
|
include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
|
||||||
|
|
||||||
|
// Do we click on purge search criteria ?
|
||||||
|
if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers
|
||||||
{
|
{
|
||||||
$search_all='';
|
$search_all='';
|
||||||
$search_ref="";
|
$search_ref="";
|
||||||
@ -103,20 +153,9 @@ if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both
|
|||||||
$sday="";
|
$sday="";
|
||||||
$smonth="";
|
$smonth="";
|
||||||
$syear="";
|
$syear="";
|
||||||
|
$search_array_options=array();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
|
|
||||||
$hookmanager->initHooks(array('projectlist'));
|
|
||||||
$extrafields = new ExtraFields($db);
|
|
||||||
|
|
||||||
// List of fields to search into when doing a "search in all"
|
|
||||||
$fieldstosearchall = array(
|
|
||||||
'p.ref'=>"Ref",
|
|
||||||
'p.title'=>"Label",
|
|
||||||
's.nom'=>"ThirdPartyName",
|
|
||||||
"p.note_public"=>"NotePublic"
|
|
||||||
);
|
|
||||||
if (empty($user->socid)) $fieldstosearchall["p.note_private"]="NotePrivate";
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -22,7 +22,6 @@
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Put here all includes required by your class file
|
|
||||||
require_once DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php";
|
require_once DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php";
|
||||||
require_once DOL_DOCUMENT_ROOT."/core/lib/functions2.lib.php";
|
require_once DOL_DOCUMENT_ROOT."/core/lib/functions2.lib.php";
|
||||||
|
|
||||||
@ -396,7 +395,13 @@ class Resource extends CommonObject
|
|||||||
}
|
}
|
||||||
$sql.= " GROUP BY t.rowid";
|
$sql.= " GROUP BY t.rowid";
|
||||||
$sql.= $this->db->order($sortfield,$sortorder);
|
$sql.= $this->db->order($sortfield,$sortorder);
|
||||||
if ($limit) $sql.= $this->db->plimit($limit+1,$offset);
|
$this->num_all = 0;
|
||||||
|
if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
|
||||||
|
{
|
||||||
|
$result = $this->db->query($sql);
|
||||||
|
$this->num_all = $this->db->num_rows($result);
|
||||||
|
}
|
||||||
|
if ($limit) $sql.= $this->db->plimit($limit, $offset);
|
||||||
dol_syslog(get_class($this)."::fetch_all", LOG_DEBUG);
|
dol_syslog(get_class($this)."::fetch_all", LOG_DEBUG);
|
||||||
|
|
||||||
$resql=$this->db->query($sql);
|
$resql=$this->db->query($sql);
|
||||||
|
|||||||
@ -22,15 +22,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
// Change this following line to use the correct relative path (../, ../../, etc)
|
require '../main.inc.php';
|
||||||
$res=0;
|
require_once DOL_DOCUMENT_ROOT.'/resource/class/resource.class.php';
|
||||||
$res=@include("../main.inc.php"); // For root directory
|
|
||||||
if (! $res) $res=@include("../../main.inc.php"); // For "custom" directory
|
|
||||||
if (! $res) die("Include of main fails");
|
|
||||||
|
|
||||||
require 'class/resource.class.php';
|
// Load translations files requiredby by page
|
||||||
|
|
||||||
// Load traductions files requiredby by page
|
|
||||||
$langs->load("resource");
|
$langs->load("resource");
|
||||||
$langs->load("companies");
|
$langs->load("companies");
|
||||||
$langs->load("other");
|
$langs->load("other");
|
||||||
@ -52,7 +47,7 @@ $object = new Resource($db);
|
|||||||
|
|
||||||
$hookmanager->initHooks(array('resource_list'));
|
$hookmanager->initHooks(array('resource_list'));
|
||||||
|
|
||||||
if (empty($sortorder)) $sortorder="DESC";
|
if (empty($sortorder)) $sortorder="ASC";
|
||||||
if (empty($sortfield)) $sortfield="t.rowid";
|
if (empty($sortfield)) $sortfield="t.rowid";
|
||||||
if (empty($arch)) $arch = 0;
|
if (empty($arch)) $arch = 0;
|
||||||
|
|
||||||
@ -82,13 +77,12 @@ if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'e
|
|||||||
/*
|
/*
|
||||||
* View
|
* View
|
||||||
*/
|
*/
|
||||||
$pagetitle=$langs->trans('ResourcePageIndex');
|
|
||||||
llxHeader('',$pagetitle,'');
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$form=new Form($db);
|
$form=new Form($db);
|
||||||
|
|
||||||
|
$pagetitle=$langs->trans('ResourcePageIndex');
|
||||||
|
llxHeader('',$pagetitle,'');
|
||||||
|
|
||||||
print load_fiche_titre($pagetitle,'','title_generic');
|
print load_fiche_titre($pagetitle,'','title_generic');
|
||||||
|
|
||||||
// Confirmation suppression resource line
|
// Confirmation suppression resource line
|
||||||
@ -102,6 +96,8 @@ $ret = $object->fetch_all($sortorder, $sortfield, $limit, $offset);
|
|||||||
if($ret == -1) {
|
if($ret == -1) {
|
||||||
dol_print_error($db,$object->error);
|
dol_print_error($db,$object->error);
|
||||||
exit;
|
exit;
|
||||||
|
} else {
|
||||||
|
print_barre_liste($pagetitle, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $ret+1, $object->num_all,'title_generic.png');
|
||||||
}
|
}
|
||||||
if(!$ret) {
|
if(!$ret) {
|
||||||
print '<div class="warning">'.$langs->trans('NoResourceInDatabase').'</div>';
|
print '<div class="warning">'.$langs->trans('NoResourceInDatabase').'</div>';
|
||||||
|
|||||||
@ -634,14 +634,14 @@ if ($resql)
|
|||||||
if (! empty($arrayfields['s.town']['checked']))
|
if (! empty($arrayfields['s.town']['checked']))
|
||||||
{
|
{
|
||||||
print '<td class="liste_titre">';
|
print '<td class="liste_titre">';
|
||||||
print '<input class="flat" size="8" type="text" name="search_town" value="'.dol_escape_htmltag($search_town).'">';
|
print '<input class="flat" size="6" type="text" name="search_town" value="'.dol_escape_htmltag($search_town).'">';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
// Zip
|
// Zip
|
||||||
if (! empty($arrayfields['s.zip']['checked']))
|
if (! empty($arrayfields['s.zip']['checked']))
|
||||||
{
|
{
|
||||||
print '<td class="liste_titre">';
|
print '<td class="liste_titre">';
|
||||||
print '<input class="flat" size="8" type="text" name="search_zip" value="'.dol_escape_htmltag($search_zip).'">';
|
print '<input class="flat" size="4" type="text" name="search_zip" value="'.dol_escape_htmltag($search_zip).'">';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
// Country
|
// Country
|
||||||
@ -966,21 +966,21 @@ if ($resql)
|
|||||||
// Date creation
|
// Date creation
|
||||||
if (! empty($arrayfields['s.datec']['checked']))
|
if (! empty($arrayfields['s.datec']['checked']))
|
||||||
{
|
{
|
||||||
print '<td align="center">';
|
print '<td align="center" class="nowrap">';
|
||||||
print dol_print_date($db->jdate($obj->date_creation), 'dayhour');
|
print dol_print_date($db->jdate($obj->date_creation), 'dayhour');
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
// Date modification
|
// Date modification
|
||||||
if (! empty($arrayfields['s.tms']['checked']))
|
if (! empty($arrayfields['s.tms']['checked']))
|
||||||
{
|
{
|
||||||
print '<td align="center">';
|
print '<td align="center" class="nowrap">';
|
||||||
print dol_print_date($db->jdate($obj->date_update), 'dayhour');
|
print dol_print_date($db->jdate($obj->date_update), 'dayhour');
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
// Status
|
// Status
|
||||||
if (! empty($arrayfields['s.status']['checked']))
|
if (! empty($arrayfields['s.status']['checked']))
|
||||||
{
|
{
|
||||||
print '<td align="center">'.$companystatic->getLibStatut(3).'</td>';
|
print '<td align="center" class="nowrap">'.$companystatic->getLibStatut(3).'</td>';
|
||||||
}
|
}
|
||||||
// Action column
|
// Action column
|
||||||
print '<td></td>';
|
print '<td></td>';
|
||||||
|
|||||||
@ -190,6 +190,10 @@ $colortexttitle=join(',',colorStringToArray($colortexttitle));
|
|||||||
$colortext=join(',',colorStringToArray($colortext));
|
$colortext=join(',',colorStringToArray($colortext));
|
||||||
$colortextlink=join(',',colorStringToArray($colortextlink));
|
$colortextlink=join(',',colorStringToArray($colortextlink));
|
||||||
|
|
||||||
|
if (! empty($conf->dol_optimize_smallscreen)) $fontsize=11;
|
||||||
|
|
||||||
|
$nbtopmenuentries=$menumanager->showmenu('topnb');
|
||||||
|
|
||||||
print '/*'."\n";
|
print '/*'."\n";
|
||||||
print 'colorbackbody='.$colorbackbody."\n";
|
print 'colorbackbody='.$colorbackbody."\n";
|
||||||
print 'colorbackvmenu1='.$colorbackvmenu1."\n";
|
print 'colorbackvmenu1='.$colorbackvmenu1."\n";
|
||||||
@ -211,14 +215,9 @@ print 'dol_use_jmobile='.$dol_use_jmobile."\n";
|
|||||||
print 'dol_screenwidth='.$_SESSION['dol_screenwidth']."\n";
|
print 'dol_screenwidth='.$_SESSION['dol_screenwidth']."\n";
|
||||||
print 'dol_screenheight='.$_SESSION['dol_screenheight']."\n";
|
print 'dol_screenheight='.$_SESSION['dol_screenheight']."\n";
|
||||||
print 'fontsize='.$fontsize."\n";
|
print 'fontsize='.$fontsize."\n";
|
||||||
|
print 'nbtopmenuentries='.$nbtopmenuentries."\n";
|
||||||
print '*/'."\n";
|
print '*/'."\n";
|
||||||
|
|
||||||
if (! empty($conf->dol_optimize_smallscreen)) $fontsize=11;
|
|
||||||
|
|
||||||
|
|
||||||
$nbtopmenuentries=$menumanager->showmenu('topnb');
|
|
||||||
//print $nb;
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
/* ============================================================================== */
|
/* ============================================================================== */
|
||||||
@ -2455,7 +2454,7 @@ input.liste_titre {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.noborder tr.liste_total, .noborder tr.liste_total td, tr.liste_total, form.liste_total {
|
.noborder tr.liste_total, .noborder tr.liste_total td, tr.liste_total, form.liste_total {
|
||||||
background: #F0F0F0;
|
/* background: #F0F0F0; */
|
||||||
}
|
}
|
||||||
.noborder tr.liste_total td, tr.liste_total td, form.liste_total div {
|
.noborder tr.liste_total td, tr.liste_total td, form.liste_total div {
|
||||||
color: #552266;
|
color: #552266;
|
||||||
@ -3044,7 +3043,7 @@ li.cal_event { border: none; list-style-type: none; }
|
|||||||
/* CSS for treeview */
|
/* CSS for treeview */
|
||||||
.treeview ul { background-color: transparent !important; margin-top: 0; }
|
.treeview ul { background-color: transparent !important; margin-top: 0; }
|
||||||
.treeview li { background-color: transparent !important; padding: 0 0 0 16px !important; min-height: 20px; }
|
.treeview li { background-color: transparent !important; padding: 0 0 0 16px !important; min-height: 20px; }
|
||||||
.treeview .hover { color: black !important; }
|
.treeview .hover { color: rgb(<?php print $colortextlink; ?>) !important; text-decoration: underline !important; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet;
|
global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet;
|
||||||
$theme_bordercolor = array(235,235,224);
|
$theme_bordercolor = array(235,235,224);
|
||||||
$theme_datacolor = array(array(190,190,220), array(200,160,180), array(125,135,150), array(170,140,190), array(190,190,170), array(190,170,190), array(170,190,190), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150));
|
$theme_datacolor = array(array(140,140,220), array(190,120,120), array(0,160,140), array(190,190,100), array(115,125,150), array(100,170,20), array(250,190,30), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150));
|
||||||
$theme_bgcolor = array(hexdec('F4'),hexdec('F4'),hexdec('F4'));
|
$theme_bgcolor = array(hexdec('F4'),hexdec('F4'),hexdec('F4'));
|
||||||
$theme_bgcoloronglet = array(hexdec('DE'),hexdec('E7'),hexdec('EC'));
|
$theme_bgcoloronglet = array(hexdec('DE'),hexdec('E7'),hexdec('EC'));
|
||||||
|
|
||||||
|
|||||||
@ -185,6 +185,10 @@ $colortexttitle=join(',',colorStringToArray($colortexttitle));
|
|||||||
$colortext=join(',',colorStringToArray($colortext));
|
$colortext=join(',',colorStringToArray($colortext));
|
||||||
$colortextlink=join(',',colorStringToArray($colortextlink));
|
$colortextlink=join(',',colorStringToArray($colortextlink));
|
||||||
|
|
||||||
|
if (! empty($conf->dol_optimize_smallscreen)) $fontsize=11;
|
||||||
|
|
||||||
|
$nbtopmenuentries=$menumanager->showmenu('topnb');
|
||||||
|
|
||||||
print '/*'."\n";
|
print '/*'."\n";
|
||||||
print 'colorbackbody='.$colorbackbody."\n";
|
print 'colorbackbody='.$colorbackbody."\n";
|
||||||
print 'colorbackvmenu1='.$colorbackvmenu1."\n";
|
print 'colorbackvmenu1='.$colorbackvmenu1."\n";
|
||||||
@ -205,12 +209,9 @@ print 'dol_no_mouse_hover='.$dol_no_mouse_hover."\n";
|
|||||||
print 'dol_use_jmobile='.$dol_use_jmobile."\n";
|
print 'dol_use_jmobile='.$dol_use_jmobile."\n";
|
||||||
print 'dol_screenwidth='.$_SESSION['dol_screenwidth']."\n";
|
print 'dol_screenwidth='.$_SESSION['dol_screenwidth']."\n";
|
||||||
print 'dol_screenheight='.$_SESSION['dol_screenheight']."\n";
|
print 'dol_screenheight='.$_SESSION['dol_screenheight']."\n";
|
||||||
|
print 'nbtopmenuentries='.$nbtopmenuentries."\n";
|
||||||
print '*/'."\n";
|
print '*/'."\n";
|
||||||
|
|
||||||
if (! empty($conf->dol_optimize_smallscreen)) $fontsize=11;
|
|
||||||
|
|
||||||
$nbtopmenuentries=$menumanager->showmenu('topnb');
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
/* ============================================================================== */
|
/* ============================================================================== */
|
||||||
@ -1933,11 +1934,11 @@ table.liste, table.noborder, table.formdoc, div.noborder {
|
|||||||
border-style: solid;
|
border-style: solid;
|
||||||
|
|
||||||
margin: 0px 0px 2px 0px;
|
margin: 0px 0px 2px 0px;
|
||||||
|
/*
|
||||||
-moz-box-shadow: 2px 2px 4px #CCC;
|
-moz-box-shadow: 2px 2px 4px #CCC;
|
||||||
-webkit-box-shadow: 2px 2px 4px #CCC;
|
-webkit-box-shadow: 2px 2px 4px #CCC;
|
||||||
box-shadow: 2px 2px 4px #CCC;
|
box-shadow: 2px 2px 4px #CCC;
|
||||||
|
*/
|
||||||
-moz-border-radius: 0.1em;
|
-moz-border-radius: 0.1em;
|
||||||
-webkit-border-radius: 0.1em;
|
-webkit-border-radius: 0.1em;
|
||||||
border-radius: 0.1em;
|
border-radius: 0.1em;
|
||||||
@ -1953,14 +1954,14 @@ table.noborder tr, div.noborder form {
|
|||||||
border-left-width: 1px;
|
border-left-width: 1px;
|
||||||
border-left-color: #BBBBBB;
|
border-left-color: #BBBBBB;
|
||||||
border-left-style: solid;
|
border-left-style: solid;
|
||||||
height: 26px;
|
min-height: 26px;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.liste th, table.noborder th {
|
table.liste th, table.noborder th {
|
||||||
padding: 5px 2px 5px 3px; /* t r b l */
|
padding: 5px 2px 5px 3px; /* t r b l */
|
||||||
}
|
}
|
||||||
table.noborder th, table.noborder td, div.noborder form, div.noborder form div {
|
table.noborder th, table.noborder td, div.noborder form, div.noborder form div {
|
||||||
padding: 1px 2px 1px 3px; /* t r b l */
|
padding: 4px 2px 4px 3px; /* t r b l */
|
||||||
}
|
}
|
||||||
|
|
||||||
table.nobordernopadding {
|
table.nobordernopadding {
|
||||||
@ -2211,7 +2212,10 @@ table.dataTable td {
|
|||||||
}
|
}
|
||||||
tr.even td, tr.pair td, tr.odd td, tr.impair td, form.odd div.tagtd, form.impair div.tagtd, form.pair div.tagtd, div.impair div.tagtd, div.pair div.tagtd, div.liste_titre div.tagtd {
|
tr.even td, tr.pair td, tr.odd td, tr.impair td, form.odd div.tagtd, form.impair div.tagtd, form.pair div.tagtd, div.impair div.tagtd, div.pair div.tagtd, div.liste_titre div.tagtd {
|
||||||
padding: 5px 2px 5px 3px;
|
padding: 5px 2px 5px 3px;
|
||||||
border-bottom: 1px solid #f4f4f4;
|
border-bottom: 1px solid #eee;
|
||||||
|
}
|
||||||
|
tr.even:last-child td, tr.pair:last-child td, tr.odd:last-child td, tr.impair:last-child td {
|
||||||
|
border-bottom: 0px !important;
|
||||||
}
|
}
|
||||||
tr.even td .nobordernopadding tr td, tr.pair td .nobordernopadding tr td, tr.impair td .nobordernopadding tr td, tr.odd td .nobordernopadding tr td {
|
tr.even td .nobordernopadding tr td, tr.pair td .nobordernopadding tr td, tr.impair td .nobordernopadding tr td, tr.odd td .nobordernopadding tr td {
|
||||||
border-bottom: 0px !important;
|
border-bottom: 0px !important;
|
||||||
@ -2309,14 +2313,15 @@ input.liste_titre {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.noborder tr.liste_total, .noborder tr.liste_total td, tr.liste_total, form.liste_total {
|
.noborder tr.liste_total, .noborder tr.liste_total td, tr.liste_total, form.liste_total {
|
||||||
background: #F0F0F0;
|
/* background: #F0F0F0; */
|
||||||
}
|
}
|
||||||
.noborder tr.liste_total td, tr.liste_total td, form.liste_total div {
|
.noborder tr.liste_total td, tr.liste_total td, form.liste_total div {
|
||||||
border-top: 1px solid #f4f4f4;
|
/* border-top: 1px solid #f4f4f4; */
|
||||||
color: #332266;
|
color: #332266;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
|
height: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2908,7 +2913,7 @@ li.cal_event { border: none; list-style-type: none; }
|
|||||||
/* CSS for treeview */
|
/* CSS for treeview */
|
||||||
.treeview ul { background-color: transparent !important; margin-top: 0; }
|
.treeview ul { background-color: transparent !important; margin-top: 0; }
|
||||||
.treeview li { background-color: transparent !important; padding: 0 0 0 16px !important; min-height: 20px; }
|
.treeview li { background-color: transparent !important; padding: 0 0 0 16px !important; min-height: 20px; }
|
||||||
.treeview .hover { color: black !important; }
|
.treeview .hover { color: rgb(<?php print $colortextlink; ?>) !important; text-decoration: underline !important; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -3734,7 +3739,23 @@ border-top-right-radius: 6px;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* CSS style used for small screen */
|
::-webkit-scrollbar {
|
||||||
|
width: 10px;
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-button {
|
||||||
|
background: #aaa
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-track-piece {
|
||||||
|
background: #fff
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-thumb {
|
||||||
|
background: #ddd
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/***** CSS style used for small screen *****/
|
||||||
|
|
||||||
.imgopensurveywizard
|
.imgopensurveywizard
|
||||||
{
|
{
|
||||||
@ -3750,7 +3771,7 @@ border-top-right-radius: 6px;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media only screen and (max-width: <?php echo ($nbtopmenuentries * 85) + 200; ?>px)
|
@media only screen and (max-width: <?php echo round($nbtopmenuentries * $fontsize * 7, 0) + 200; ?>px)
|
||||||
{
|
{
|
||||||
.mainmenuaspan {
|
.mainmenuaspan {
|
||||||
display: none;
|
display: none;
|
||||||
|
|||||||
@ -1016,14 +1016,20 @@ if (($action == 'create') || ($action == 'adduserldap'))
|
|||||||
$langs->load("salaries");
|
$langs->load("salaries");
|
||||||
|
|
||||||
// THM
|
// THM
|
||||||
print '<tr><td>'.$langs->trans("THM").'</td>';
|
print '<tr><td>';
|
||||||
|
$text=$langs->trans("THM");
|
||||||
|
print $form->textwithpicto($text, $langs->trans("THMDescription"), 1, 'help', 'classthm');
|
||||||
|
print '</td>';
|
||||||
print '<td>';
|
print '<td>';
|
||||||
print '<input size="8" type="text" name="thm" value="'.GETPOST('thm').'">';
|
print '<input size="8" type="text" name="thm" value="'.GETPOST('thm').'">';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print "</tr>\n";
|
print "</tr>\n";
|
||||||
|
|
||||||
// TJM
|
// TJM
|
||||||
print '<tr><td>'.$langs->trans("TJM").'</td>';
|
print '<tr><td>';
|
||||||
|
$text=$langs->trans("TJM");
|
||||||
|
print $form->textwithpicto($text, $langs->trans("TJMDescription"), 1, 'help', 'classtjm');
|
||||||
|
print '</td>';
|
||||||
print '<td>';
|
print '<td>';
|
||||||
print '<input size="8" type="text" name="tjm" value="'.GETPOST('tjm').'">';
|
print '<input size="8" type="text" name="tjm" value="'.GETPOST('tjm').'">';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user