Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop
This commit is contained in:
commit
2f02919c70
@ -29,8 +29,7 @@ matrix:
|
||||
- php: 7.0
|
||||
|
||||
env:
|
||||
# - DB=mysql PHPCS_VERSION=">=1.5.1,<2.0"
|
||||
- DB=mysql PHPCS_VERSION=">=2.0"
|
||||
- DB=mysql
|
||||
# - DB=postgres
|
||||
|
||||
before_script:
|
||||
@ -48,10 +47,9 @@ before_script:
|
||||
- cp composer.json composer.json.old
|
||||
- cp composer.json.phpcs composer.json
|
||||
- composer self-update
|
||||
- composer require squizlabs/php_codesniffer:${PHPCS_VERSION}
|
||||
- composer require squizlabs/php_codesniffer:"^2.0.0"
|
||||
- composer install
|
||||
- phpenv rehash
|
||||
- ln -s `pwd` htdocs/includes/squizlabs/php_codesniffer/CodeSniffer/Standards/PHPCompatibility
|
||||
- htdocs/includes/squizlabs/php_codesniffer/scripts/phpcs --version
|
||||
# - which phpcs
|
||||
# - phpcs --version
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/* 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>
|
||||
*
|
||||
* 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).
|
||||
// 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...)
|
||||
$this->rights_class = 'mymodule';
|
||||
|
||||
|
||||
@ -3886,9 +3886,9 @@ else if ($id > 0 || ! empty($ref))
|
||||
$formmail->withtocc = $liste; // List suggested for CC
|
||||
$formmail->withtoccc = $conf->global->MAIN_EMAIL_USECCC;
|
||||
if (empty($object->ref_client)) {
|
||||
$formmail->withtopic = $outputlangs->transnoentities($topicmail, '__FACREF__');
|
||||
$formmail->withtopic = $outputlangs->transnoentities($topicmail, '__REF__');
|
||||
} else if (! empty($object->ref_client)) {
|
||||
$formmail->withtopic = $outputlangs->transnoentities($topicmail, '__FACREF__ (__REFCLIENT__)');
|
||||
$formmail->withtopic = $outputlangs->transnoentities($topicmail, '__REF__ (__REFCLIENT__)');
|
||||
}
|
||||
|
||||
$formmail->withfile = 2;
|
||||
@ -3896,7 +3896,7 @@ else if ($id > 0 || ! empty($ref))
|
||||
$formmail->withdeliveryreceipt = 1;
|
||||
$formmail->withcancel = 1;
|
||||
// Tableau des substitutions
|
||||
$formmail->substit['__FACREF__'] = $object->ref;
|
||||
$formmail->substit['__REF__'] = $object->ref;
|
||||
$formmail->substit['__SIGNATURE__'] = $user->signature;
|
||||
$formmail->substit['__REFCLIENT__'] = $object->ref_client;
|
||||
$formmail->substit['__THIRDPARTY_NAME__'] = $object->thirdparty->name;
|
||||
|
||||
@ -3687,11 +3687,9 @@ class Facture extends CommonInvoice
|
||||
|
||||
$now = dol_now();
|
||||
|
||||
//Paid invoices have status STATUS_CLOSED
|
||||
if (!$this->statut != Facture::STATUS_VALIDATED) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Paid invoices have status STATUS_CLOSED
|
||||
if ($this->statut != Facture::STATUS_VALIDATED) return false;
|
||||
|
||||
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');
|
||||
$socid=GETPOST('socid','int');
|
||||
$action=GETPOST('action','alpha');
|
||||
$massaction=GETPOST('massaction','alpha');
|
||||
$confirm=GETPOST('confirm','alpha');
|
||||
$lineid=GETPOST('lineid','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_ttc=GETPOST('search_montant_ttc','alpha');
|
||||
$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');
|
||||
$sortorder = GETPOST("sortorder",'alpha');
|
||||
@ -94,6 +98,7 @@ $day_lim = GETPOST('day_lim','int');
|
||||
$month_lim = GETPOST('month_lim','int');
|
||||
$year_lim = GETPOST('year_lim','int');
|
||||
$filtre = GETPOST('filtre');
|
||||
$toselect = GETPOST('toselect', 'array');
|
||||
|
||||
// Security check
|
||||
$fieldid = (! empty($ref)?'facnumber':'rowid');
|
||||
@ -122,9 +127,290 @@ if (empty($user->socid)) $fieldstosearchall["f.note_private"]="NotePrivate";
|
||||
* Actions
|
||||
*/
|
||||
|
||||
if (GETPOST('cancel')) { $action='list'; $massaction=''; }
|
||||
|
||||
$parameters=array('socid'=>$socid);
|
||||
$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 (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 ?
|
||||
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_ttc='';
|
||||
$search_status='';
|
||||
$search_paymentmode='';
|
||||
$day='';
|
||||
$year='';
|
||||
$month='';
|
||||
$toselect='';
|
||||
$option='';
|
||||
$filter='';
|
||||
}
|
||||
|
||||
|
||||
@ -160,7 +450,7 @@ $facturestatic=new Facture($db);
|
||||
|
||||
$sql = 'SELECT';
|
||||
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.paye as paye, f.fk_statut,';
|
||||
$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_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_paymentmode > 0) $sql .= " AND f.fk_mode_reglement = ".$search_paymentmode."";
|
||||
if ($month > 0)
|
||||
{
|
||||
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))."'";
|
||||
}
|
||||
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_user > 0)
|
||||
{
|
||||
@ -265,6 +558,8 @@ if ($resql)
|
||||
{
|
||||
$num = $db->num_rows($resql);
|
||||
|
||||
$arrayofselected=is_array($toselect)?$toselect:array();
|
||||
|
||||
if ($socid)
|
||||
{
|
||||
$soc = new Societe($db);
|
||||
@ -282,10 +577,113 @@ if ($resql)
|
||||
if ($search_montant_ht != '') $param.='&search_montant_ht='.$search_montant_ht;
|
||||
if ($search_montant_ttc != '') $param.='&search_montant_ttc='.$search_montant_ttc;
|
||||
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;
|
||||
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.'">';
|
||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
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("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("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('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('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);
|
||||
@ -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.'">';
|
||||
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);
|
||||
print '<br><input type="checkbox" name="option" value="late"'.($option == 'late'?' checked':'').'> '.$langs->trans("Late");
|
||||
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">';
|
||||
$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"></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->ref=$objp->facnumber;
|
||||
$facturestatic->type=$objp->type;
|
||||
$facturestatic->statut = $objp->fk_statut;
|
||||
$facturestatic->date_lim_reglement = $db->jdate($objp->datelimite);
|
||||
$facturestatic->statut=$objp->fk_statut;
|
||||
$facturestatic->date_lim_reglement=$db->jdate($objp->datelimite);
|
||||
$notetoshow=dol_string_nohtmltag(($user->societe_id>0?$objp->note_public:$objp->note),1);
|
||||
$paiement = $facturestatic->getSommePaiement();
|
||||
|
||||
@ -463,6 +866,11 @@ if ($resql)
|
||||
print $thirdparty->getNomUrl(1,'customer');
|
||||
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_tva,0,$langs).'</td>';
|
||||
@ -471,12 +879,17 @@ if ($resql)
|
||||
|
||||
print '<td align="right">'.(! empty($paiement)?price($paiement,0,$langs):' ').'</td>';
|
||||
|
||||
// Affiche statut de la facture
|
||||
// Status
|
||||
print '<td align="right" class="nowrap">';
|
||||
print $facturestatic->LibStatut($objp->paye,$objp->fk_statut,5,$paiement,$objp->type);
|
||||
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";
|
||||
$total_ht+=$objp->total_ht;
|
||||
@ -490,7 +903,7 @@ if ($resql)
|
||||
{
|
||||
// Print 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_tva,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->withtocc=1;
|
||||
$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->withbody=1;
|
||||
$formmail->withdeliveryreceipt=1;
|
||||
$formmail->withcancel=1;
|
||||
// Tableau des substitutions
|
||||
//$formmail->substit['__FACREF__']='';
|
||||
//$formmail->substit['__REF__']='';
|
||||
$formmail->substit['__SIGNATURE__']=$user->signature;
|
||||
//$formmail->substit['__REFCLIENT__']='';
|
||||
$formmail->substit['__PERSONALIZED__']='';
|
||||
|
||||
@ -1551,6 +1551,8 @@ class ExtraFields
|
||||
else if (in_array($key_type,array('checkbox')))
|
||||
{
|
||||
$value_arr=GETPOST($keysuffix."options_".$key.$keyprefix);
|
||||
// Make sure we get an array even if there's only one checkbox
|
||||
$value_arr=(array)$value_arr
|
||||
$value_key=implode(',', $value_arr);
|
||||
}
|
||||
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 object $object Object
|
||||
* @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
|
||||
* @return string HTML edit field
|
||||
*/
|
||||
@ -122,7 +122,7 @@ class Form
|
||||
* @param string $value Value to show/edit
|
||||
* @param object $object Object
|
||||
* @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 object $extObject External object
|
||||
* @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.='<table class="nobordernopadding" cellpadding="0" cellspacing="0">';
|
||||
$ret.='<tr><td>';
|
||||
if (preg_match('/^(string|email|numeric|amount)/',$typeofdata))
|
||||
if (preg_match('/^(string|email)/',$typeofdata))
|
||||
{
|
||||
$tmp=explode(':',$typeofdata);
|
||||
$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))
|
||||
{
|
||||
$tmp=explode(':',$typeofdata);
|
||||
@ -203,8 +208,8 @@ class Form
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($typeofdata == 'email') $ret.=dol_print_email($value,0,0,0,0,1);
|
||||
elseif ($typeofdata == 'amount') $ret.=($value != '' ? price($value,'',$langs,0,-1,-1,$conf->currency) : '');
|
||||
if (preg_match('/^(email)/',$typeofdata)) $ret.=dol_print_email($value,0,0,0,0,1);
|
||||
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 ($typeofdata == 'day' || $typeofdata == 'datepicker') $ret.=dol_print_date($value,'day');
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate select HTML to choose massaction
|
||||
*
|
||||
* @parama string $selected Selected value
|
||||
* @param int $arrayofaction array('code'=>'label', ...)
|
||||
* @param 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
|
||||
*
|
||||
@ -2643,7 +2714,7 @@ class Form
|
||||
* @param int $maxlength Max length of label
|
||||
* @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;
|
||||
|
||||
@ -4231,7 +4302,7 @@ class Form
|
||||
$retstring.='<option value="'.$hour.'"'.(($hour == $shour)?' selected':'').'>'.$hour.(empty($conf->dol_optimize_smallscreen)?'':'H').'</option>';
|
||||
}
|
||||
$retstring.='</select>';
|
||||
if (empty($conf->dol_optimize_smallscreen)) $retstring.=":";
|
||||
if ($m && empty($conf->dol_optimize_smallscreen)) $retstring.=":";
|
||||
}
|
||||
|
||||
if ($m)
|
||||
|
||||
@ -648,7 +648,7 @@ class FormMail extends Form
|
||||
}
|
||||
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));
|
||||
}
|
||||
}
|
||||
@ -692,7 +692,7 @@ class FormMail extends Form
|
||||
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.= "</td></tr>\n";
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<?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) 2009-2010 Regis Houssin <regis.houssin@capnetworks.com>
|
||||
* Copyright (C) 2015 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
|
||||
@ -46,14 +46,16 @@ function product_prepare_head($object)
|
||||
$h++;
|
||||
|
||||
$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';
|
||||
$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][1] = $langs->trans("SuppliersPrices");
|
||||
$head[$h][1] = $langs->trans("BuyingPrices");
|
||||
$head[$h][2] = 'suppliers';
|
||||
$h++;
|
||||
}
|
||||
|
||||
@ -79,7 +79,7 @@ class pdf_baleine extends ModelePDFProjects
|
||||
$this->posxref=$this->marge_gauche+1;
|
||||
$this->posxlabel=$this->marge_gauche+25;
|
||||
$this->posxworkload=$this->marge_gauche+100;
|
||||
$this->posxprogress=$this->marge_gauche+140;
|
||||
$this->posxprogress=$this->marge_gauche+130;
|
||||
$this->posxdatestart=$this->marge_gauche+150;
|
||||
$this->posxdateend=$this->marge_gauche+170;
|
||||
}
|
||||
|
||||
@ -353,7 +353,7 @@ class ProductFournisseur extends Product
|
||||
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.= " 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.= " WHERE pfp.rowid = ".$rowid;
|
||||
|
||||
@ -368,12 +368,12 @@ class ProductFournisseur extends Product
|
||||
$this->fourn_ref = $obj->ref_fourn; // deprecated
|
||||
$this->ref_supplier = $obj->ref_fourn;
|
||||
$this->fourn_price = $obj->price;
|
||||
$this->fourn_charges = $obj->charges;
|
||||
$this->fourn_charges = $obj->charges; // deprecated
|
||||
$this->fourn_qty = $obj->quantity;
|
||||
$this->fourn_remise_percent = $obj->remise_percent;
|
||||
$this->fourn_remise = $obj->remise;
|
||||
$this->fourn_unitprice = $obj->unitprice;
|
||||
$this->fourn_unitcharges = $obj->unitcharges;
|
||||
$this->fourn_unitcharges = $obj->unitcharges; // deprecated
|
||||
$this->fourn_tva_tx = $obj->tva_tx;
|
||||
$this->product_id = $obj->fk_product; // deprecated
|
||||
$this->fk_product = $obj->fk_product;
|
||||
@ -456,9 +456,9 @@ class ProductFournisseur extends Product
|
||||
$prodfourn->fourn_qty = $record["quantity"];
|
||||
$prodfourn->fourn_remise_percent = $record["remise_percent"];
|
||||
$prodfourn->fourn_remise = $record["remise"];
|
||||
$prodfourn->fourn_unitprice = $record["unitprice"];
|
||||
$prodfourn->fourn_charges = $record["charges"];
|
||||
$prodfourn->fourn_unitcharges = $record["unitcharges"];
|
||||
$prodfourn->fourn_unitprice = $record["unitprice"];
|
||||
$prodfourn->fourn_charges = $record["charges"]; // deprecated
|
||||
$prodfourn->fourn_unitcharges = $record["unitcharges"]; // deprecated
|
||||
$prodfourn->fourn_tva_tx = $record["tva_tx"];
|
||||
$prodfourn->fourn_id = $record["fourn_id"];
|
||||
$prodfourn->fourn_name = $record["supplier_name"];
|
||||
@ -591,8 +591,8 @@ class ProductFournisseur extends Product
|
||||
$this->fourn_remise_percent = $record["remise_percent"];
|
||||
$this->fourn_remise = $record["remise"];
|
||||
$this->fourn_unitprice = $fourn_unitprice;
|
||||
$this->fourn_charges = $record["charges"];
|
||||
$this->fourn_unitcharges = $record["unitcharges"];
|
||||
$this->fourn_charges = $record["charges"]; // deprecated
|
||||
$this->fourn_unitcharges = $record["unitcharges"]; // deprecated
|
||||
$this->fourn_tva_tx = $record["tva_tx"];
|
||||
$this->fourn_id = $record["fourn_id"];
|
||||
$this->fourn_name = $record["supplier_name"];
|
||||
|
||||
@ -2338,13 +2338,13 @@ else
|
||||
$formmail->withto=GETPOST("sendto")?GETPOST("sendto"):$liste;
|
||||
$formmail->withtocc=$liste;
|
||||
$formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC;
|
||||
$formmail->withtopic=$outputlangs->trans('SendBillRef','__FACREF__');
|
||||
$formmail->withtopic=$outputlangs->trans('SendBillRef','__REF__');
|
||||
$formmail->withfile=2;
|
||||
$formmail->withbody=1;
|
||||
$formmail->withdeliveryreceipt=1;
|
||||
$formmail->withcancel=1;
|
||||
// Tableau des substitutions
|
||||
$formmail->substit['__FACREF__']=$object->ref;
|
||||
$formmail->substit['__REF__']=$object->ref;
|
||||
$formmail->substit['__SIGNATURE__']=$user->signature;
|
||||
$formmail->substit['__PERSONALIZED__']='';
|
||||
$formmail->substit['__CONTACTCIVNAME__']='';
|
||||
|
||||
@ -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 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 DROP INDEX idx_ecm_directories;
|
||||
ALTER TABLE llx_ecm_directories ADD UNIQUE INDEX uk_ecm_directories (label, fk_parent, entity);
|
||||
|
||||
@ -43,8 +43,9 @@ create table llx_product
|
||||
price_min double(24,8) DEFAULT 0,
|
||||
price_min_ttc double(24,8) DEFAULT 0,
|
||||
price_base_type varchar(3) DEFAULT 'HT',
|
||||
tva_tx double(6,3), -- Default VAT rate of product
|
||||
recuperableonly integer NOT NULL DEFAULT '0', -- French NPR VAT
|
||||
cost_price double(24,8) DEFAULT NULL, -- Cost price without tax. Can be used for margin calculation.
|
||||
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
|
||||
localtax2_tx double(6,3) DEFAULT 0, -- Spanish local VAT 2
|
||||
fk_user_author integer DEFAULT NULL, -- user making creation
|
||||
|
||||
@ -34,12 +34,12 @@ create table llx_product_fournisseur_price
|
||||
remise_percent double NOT NULL DEFAULT 0,
|
||||
remise double NOT NULL DEFAULT 0,
|
||||
unitprice double(24,8) DEFAULT 0,
|
||||
charges double(24,8) DEFAULT 0,
|
||||
unitcharges 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, -- deprecated
|
||||
tva_tx double(6,3) NOT NULL,
|
||||
info_bits integer NOT NULL DEFAULT 0,
|
||||
fk_user integer,
|
||||
fk_supplier_price_expression integer, -- Link to the rule for dynamic price calculation
|
||||
import_key varchar(14), -- Import key
|
||||
fk_supplier_price_expression integer, -- Link to the rule for dynamic price calculation
|
||||
import_key varchar(14), -- Import key
|
||||
delivery_time_days integer
|
||||
)ENGINE=innodb;
|
||||
|
||||
@ -74,6 +74,7 @@ PaymentsAlreadyDone=Payments already done
|
||||
PaymentsBackAlreadyDone=Payments back already done
|
||||
PaymentRule=Payment rule
|
||||
PaymentMode=Payment type
|
||||
PaymentModeShort=Payment type
|
||||
PaymentTerm=Payment term
|
||||
PaymentConditions=Payment terms
|
||||
PaymentConditionsShort=Payment terms
|
||||
|
||||
@ -84,9 +84,12 @@ EachInvoiceWillBeAttachedToEmail=A document using default invoice document templ
|
||||
MailTopicSendRemindUnpaidInvoices=Reminder of invoice %s (%s)
|
||||
SendRemind=Send reminder by EMails
|
||||
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
|
||||
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
|
||||
MailingModuleDescContactCompanies=Contacts/addresses of all third parties (customer, prospect, supplier, ...)
|
||||
|
||||
@ -698,6 +698,7 @@ Deductible=Deductible
|
||||
from=from
|
||||
toward=toward
|
||||
Access=Access
|
||||
SelectAction=Select action
|
||||
HelpCopyToClipboard=Use Ctrl+C to copy to clipboard
|
||||
SaveUploadedFileWithMask=Save file on server with name "<strong>%s</strong>" (otherwise "%s")
|
||||
OriginFileName=Original filename
|
||||
|
||||
@ -58,13 +58,13 @@ Miscellaneous=Miscellaneous
|
||||
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__
|
||||
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__
|
||||
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__
|
||||
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 __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__
|
||||
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__
|
||||
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__
|
||||
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__
|
||||
|
||||
@ -76,6 +76,8 @@ SellingPriceHT=Selling price (net of tax)
|
||||
SellingPriceTTC=Selling price (inc. tax)
|
||||
PublicPrice=Public 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
|
||||
MinPrice=Min. selling price
|
||||
MinPriceHT=Min. selling price (net of tax)
|
||||
@ -190,6 +192,8 @@ ClonePricesProduct=Clone main informations and prices
|
||||
CloneCompositionProduct=Clone packaged product/service
|
||||
ProductIsUsed=This product is used
|
||||
NewRefForClone=Ref. of new product/service
|
||||
SellingPrices=Selling prices
|
||||
BuyingPrices=Buying prices
|
||||
CustomerPrices=Customer prices
|
||||
SuppliersPrices=Supplier prices
|
||||
SuppliersPricesOfProductsOrServices=Supplier prices (of products or services)
|
||||
|
||||
@ -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.= " 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.= " 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,";
|
||||
@ -1606,6 +1606,7 @@ class Product extends CommonObject
|
||||
$this->price_min = $obj->price_min;
|
||||
$this->price_min_ttc = $obj->price_min_ttc;
|
||||
$this->price_base_type = $obj->price_base_type;
|
||||
$this->cost_price = $obj->cost_price;
|
||||
$this->tva_tx = $obj->tva_tx;
|
||||
//! French VAT NPR
|
||||
$this->tva_npr = $obj->tva_npr;
|
||||
|
||||
@ -46,6 +46,7 @@ $rowid=GETPOST('rowid','int');
|
||||
$action=GETPOST('action', 'alpha');
|
||||
$cancel=GETPOST('cancel', 'alpha');
|
||||
$socid=GETPOST('socid', 'int');
|
||||
$cost_price=GETPOST('cost_price', 'int');
|
||||
$backtopage=GETPOST('backtopage','alpha');
|
||||
$error=0;
|
||||
|
||||
@ -91,17 +92,37 @@ if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'e
|
||||
|
||||
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 ($rowid)
|
||||
if ($rowid) // id of product supplier price to remove
|
||||
{
|
||||
$action = '';
|
||||
$result=$product->remove_product_fournisseur_price($rowid);
|
||||
$result=$object->remove_product_fournisseur_price($rowid);
|
||||
if($result > 0){
|
||||
setEventMessage($langs->trans("PriceRemoved"));
|
||||
}else{
|
||||
$error++;
|
||||
setEventMessages($product->error, $product->errors, 'errors');
|
||||
setEventMessages($object->error, $object->errors, 'errors');
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -282,6 +303,17 @@ if ($id > 0 || $ref)
|
||||
}
|
||||
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 '</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 '</tr>';
|
||||
|
||||
// Charges ????
|
||||
// Option to define a transport cost on supplier price
|
||||
if ($conf->global->PRODUCT_CHARGES)
|
||||
{
|
||||
if (! empty($conf->margin->enabled))
|
||||
|
||||
@ -84,8 +84,58 @@ $syear = GETPOST('syear','int');
|
||||
|
||||
if ($search_status == '') $search_status=-1; // -1 or 1
|
||||
|
||||
// Purge criteria
|
||||
if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers
|
||||
// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
|
||||
$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_ref="";
|
||||
@ -103,20 +153,9 @@ if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both
|
||||
$sday="";
|
||||
$smonth="";
|
||||
$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";
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@ -634,14 +634,14 @@ if ($resql)
|
||||
if (! empty($arrayfields['s.town']['checked']))
|
||||
{
|
||||
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>';
|
||||
}
|
||||
// Zip
|
||||
if (! empty($arrayfields['s.zip']['checked']))
|
||||
{
|
||||
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>';
|
||||
}
|
||||
// Country
|
||||
@ -966,21 +966,21 @@ if ($resql)
|
||||
// Date creation
|
||||
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 '</td>';
|
||||
}
|
||||
// Date modification
|
||||
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 '</td>';
|
||||
}
|
||||
// Status
|
||||
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
|
||||
print '<td></td>';
|
||||
|
||||
@ -323,7 +323,7 @@ legend { margin-bottom: 8px; }
|
||||
fieldset { border: 1px solid #AAAAAA !important; box-shadow: 2px 2px 3px #DDD; }
|
||||
|
||||
|
||||
.button, sbmtConnexion {
|
||||
.button, input[name="sbmtConnexion"] {
|
||||
font-family: <?php print $fontlist ?>;
|
||||
border-color: #c5c5c5;
|
||||
border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25);
|
||||
@ -847,7 +847,7 @@ div.mainmenu {
|
||||
|
||||
div.mainmenu.home{
|
||||
background-image: url(<?php echo dol_buildpath($path.'/theme/'.$theme.'/img/menus/home.png',1) ?>);
|
||||
background-position-x: middle;
|
||||
background-position-x: center;
|
||||
}
|
||||
|
||||
div.mainmenu.accountancy {
|
||||
@ -1017,7 +1017,7 @@ form#login {
|
||||
border-radius: 5px;
|
||||
border:solid 1px rgba(80,80,80,.4);
|
||||
|
||||
border-top:solid 1px f8f8f8;
|
||||
border-top:solid 1px #f8f8f8;
|
||||
}
|
||||
.login_main_message {
|
||||
text-align: center;
|
||||
@ -1472,7 +1472,7 @@ img.toolbarbutton {
|
||||
}
|
||||
|
||||
/* hide the toggler-button when the pane is 'slid open' */
|
||||
.ui-layout-resizer-sliding ui-layout-toggler {
|
||||
.ui-layout-resizer-sliding .ui-layout-toggler {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@ -1645,7 +1645,7 @@ a.tab:link, a.tab:visited, a.tab:hover, a.tab#active {
|
||||
-moz-box-shadow: 0 -1px 4px rgba(0,0,0,.1);
|
||||
-webkit-box-shadow: 0 -1px 4px rgba(0,0,0,.1);
|
||||
box-shadow: 0 -1px 4px rgba(0,0,0,.1);
|
||||
margin-bottom: 0 0.2em 0 0.2em !important;
|
||||
margin: 0 0.2em 0 0.2em !important;
|
||||
|
||||
border-right: 1px solid #AAA !important;
|
||||
border-left: 1px solid #AAA !important;
|
||||
@ -1976,7 +1976,7 @@ tr.nocellnopadd td.nobordernopadding, tr.nocellnopadd td.nocellnopadd
|
||||
padding-<?php print $left; ?>: 0px;
|
||||
padding-<?php print $right; ?>: 16px;
|
||||
padding-bottom: 4px;
|
||||
margin-right: 0px 0px;
|
||||
margin-right: 0px;
|
||||
}
|
||||
.notopnoleftnoright {
|
||||
border-collapse: collapse;
|
||||
@ -3044,7 +3044,7 @@ li.cal_event { border: none; list-style-type: none; }
|
||||
/* CSS for treeview */
|
||||
.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 .hover { color: black !important; }
|
||||
.treeview .hover { color: rgb(<?php print $colortextlink; ?>) !important; text-decoration: underline !important; }
|
||||
|
||||
|
||||
|
||||
@ -3333,7 +3333,7 @@ ul.filedirelem li {
|
||||
border: solid 1px #DDDDDD;
|
||||
}
|
||||
|
||||
ui-layout-north {
|
||||
.ui-layout-north {
|
||||
|
||||
}
|
||||
|
||||
@ -3430,7 +3430,7 @@ div.dolEventError h1, div.dolEventError h2 {
|
||||
/* Maps */
|
||||
/* ============================================================================== */
|
||||
|
||||
.divmap, #google-visualization-geomap-embed-0, #google-visualization-geomap-embed-1, google-visualization-geomap-embed-2 {
|
||||
.divmap, #google-visualization-geomap-embed-0, #google-visualization-geomap-embed-1, #google-visualization-geomap-embed-2 {
|
||||
-moz-box-shadow: 0px 0px 10px #AAA;
|
||||
-webkit-box-shadow: 0px 0px 10px #AAA;
|
||||
box-shadow: 0px 0px 10px #AAA;
|
||||
@ -3755,7 +3755,7 @@ a.ui-link {
|
||||
{
|
||||
white-space: normal;
|
||||
overflow: hidden;
|
||||
text-overflow: hidden;
|
||||
text-overflow: clip; /* "hidden" : do not exists as a text-overflow value (https://developer.mozilla.org/fr/docs/Web/CSS/text-overflow) */
|
||||
}
|
||||
|
||||
/* Warning: setting this may make screen not beeing refreshed after a combo selection */
|
||||
|
||||
@ -2908,7 +2908,7 @@ li.cal_event { border: none; list-style-type: none; }
|
||||
/* CSS for treeview */
|
||||
.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 .hover { color: black !important; }
|
||||
.treeview .hover { color: rgb(<?php print $colortextlink; ?>) !important; text-decoration: underline !important; }
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1016,14 +1016,20 @@ if (($action == 'create') || ($action == 'adduserldap'))
|
||||
$langs->load("salaries");
|
||||
|
||||
// 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 '<input size="8" type="text" name="thm" value="'.GETPOST('thm').'">';
|
||||
print '</td>';
|
||||
print "</tr>\n";
|
||||
|
||||
// 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 '<input size="8" type="text" name="tjm" value="'.GETPOST('tjm').'">';
|
||||
print '</td>';
|
||||
|
||||
Loading…
Reference in New Issue
Block a user