Merge branch '3.3' of https://github.com/Dolibarr/dolibarr.git into 3.3
This commit is contained in:
commit
c8ef07a889
22
ChangeLog
22
ChangeLog
@ -7,26 +7,30 @@ English Dolibarr ChangeLog
|
||||
***** ChangeLog for 3.3.2 compared to 3.3.1 *****
|
||||
|
||||
- Fix: Dutch (nl_NL) translation
|
||||
- Fix: [ bug #790 ] Spanish localtax RE not being correctly calculated
|
||||
- Generalize fix: file with a specific mask not found, again
|
||||
- Fix: translations and BILL_SUPPLIER_BUILDDOC trigger
|
||||
- Fix: Can't reset payment due date
|
||||
- Fix: [ bug #787 ] Invoice supplier box incorrect tooltip when delay on payment
|
||||
- Fix: [ bug #794 ] Lost filter on zipcode in prospect list
|
||||
- Fix: [ bug #774 ] Bug on creating event with box "all day" crossed
|
||||
- Fix: [ bug #817 ] Purchases journal does not reflect localtaxes
|
||||
- Fix: [ bug #816 ] Sales journal does not reflect localtaxes
|
||||
- Fix: [ bug #806 ] Margins module with orders2invoice does not respect cost price
|
||||
- Fix: Orderstoinvoice didn't act as expected when no order was checked
|
||||
- Fix: Bad link to all proposals into Third party card if customer is prospect
|
||||
- Fix: [ bug #774 ] Bug on creating event with box "all day" crossed
|
||||
- Fix: [ bug #787 ] Invoice supplier box incorrect tooltip when delay on payment
|
||||
- Fix: [ bug #789 ] VAT not being calculated in POS
|
||||
- Fix: [ bug #794 ] Lost filter on zipcode in prospect list
|
||||
- Fix: [ bug #790 ] Spanish localtax RE not being correctly calculated
|
||||
- Fix: [ bug #794 ] Lost filter on zipcode in prospect list
|
||||
- Fix: [ bug #806 ] Margins module with orders2invoice does not respect cost price
|
||||
- Fix: [ bug #810 ] Cannot update ODT template path
|
||||
- Fix: [ bug #816 ] Sales journal does not reflect localtaxes
|
||||
- Fix: [ bug #817 ] Purchases journal does not reflect localtaxes
|
||||
- Fix: [ bug #824 ] MAIN_DB_PREFIX not use into dictionnary
|
||||
- Fix: [ bug #828 ] Error when code_region is not a number in llx_c_regions (with postgres)
|
||||
- Fix: [ bug #857 ] Invoice created from shipment does not have the order discount
|
||||
- Fix: [ bug #855 ] Holiday approval email in French
|
||||
- Fix: [ bug #856 ] (Holidays module) Mail error if destination user doesn't have an email
|
||||
- Fix: [ bug #857 ] Invoice created from shipment does not have the order discount
|
||||
- Fix: [ bug #861 ] Impossible to create a new event in agenda
|
||||
- Fix: [ bug #827 ] AJAX search does not respect multiprice level
|
||||
- Fix: [ bug #865 ] Dolibarr navigation array in project/task do not work
|
||||
- Fix: [ bug #866 ] Standing order from an invoice suggests invoice total amount instead of remaining to pay
|
||||
- Fix: [ bug #788 ] Date of linked interventions are not shown
|
||||
|
||||
|
||||
***** ChangeLog for 3.3.1 compared to 3.3 *****
|
||||
|
||||
@ -140,6 +140,8 @@ if ($resql)
|
||||
$num = $db->num_rows($resql);
|
||||
$i = 0;
|
||||
|
||||
$langs->load('commercial');
|
||||
|
||||
print_barre_liste($langs->trans("ListOfCustomers"), $page, $_SERVER["PHP_SELF"],"",$sortfield,$sortorder,'',$num);
|
||||
|
||||
print '<form method="GET" action="'.$_SERVER["PHP_SELF"].'">';
|
||||
|
||||
@ -2701,10 +2701,21 @@ class Facture extends CommonInvoice
|
||||
{
|
||||
$now=dol_now();
|
||||
|
||||
$totalpaye = $this->getSommePaiement();
|
||||
$totalcreditnotes = $this->getSumCreditNotesUsed();
|
||||
$totaldeposits = $this->getSumDepositsUsed();
|
||||
//print "totalpaye=".$totalpaye." totalcreditnotes=".$totalcreditnotes." totaldeposts=".$totaldeposits;
|
||||
|
||||
// We can also use bcadd to avoid pb with floating points
|
||||
// For example print 239.2 - 229.3 - 9.9; does not return 0.
|
||||
//$resteapayer=bcadd($this->total_ttc,$totalpaye,$conf->global->MAIN_MAX_DECIMALS_TOT);
|
||||
//$resteapayer=bcadd($resteapayer,$totalavoir,$conf->global->MAIN_MAX_DECIMALS_TOT);
|
||||
$resteapayer = price2num($this->total_ttc - $totalpaye - $totalcreditnotes - $totaldeposits,'MT');
|
||||
|
||||
$sql = 'INSERT INTO '.MAIN_DB_PREFIX.'prelevement_facture_demande';
|
||||
$sql .= ' (fk_facture, amount, date_demande, fk_user_demande, code_banque, code_guichet, number, cle_rib)';
|
||||
$sql .= ' VALUES ('.$this->id;
|
||||
$sql .= ",'".price2num($this->total_ttc)."'";
|
||||
$sql .= ",'".price2num($resteapayer)."'";
|
||||
$sql .= ",".$this->db->idate($now).",".$user->id;
|
||||
$sql .= ",'".$soc->bank_account->code_banque."'";
|
||||
$sql .= ",'".$soc->bank_account->code_guichet."'";
|
||||
|
||||
@ -404,6 +404,15 @@ if ($object->id > 0)
|
||||
print '<tr><td>'.$langs->trans('AmountTTC').'</td><td align="right" colspan="2" nowrap>'.price($object->total_ttc).'</td>';
|
||||
print '<td>'.$langs->trans('Currency'.$conf->currency).'</td></tr>';
|
||||
|
||||
// We can also use bcadd to avoid pb with floating points
|
||||
// For example print 239.2 - 229.3 - 9.9; does not return 0.
|
||||
//$resteapayer=bcadd($object->total_ttc,$totalpaye,$conf->global->MAIN_MAX_DECIMALS_TOT);
|
||||
//$resteapayer=bcadd($resteapayer,$totalavoir,$conf->global->MAIN_MAX_DECIMALS_TOT);
|
||||
$resteapayer = price2num($object->total_ttc - $totalpaye - $totalcreditnotes - $totaldeposits,'MT');
|
||||
|
||||
print '<tr><td>'.$langs->trans('RemainderToPay').'</td><td align="right" colspan="2" nowrap>'.price($resteapayer).'</td>';
|
||||
print '<td>'.$langs->trans('Currency'.$conf->currency).'</td></tr>';
|
||||
|
||||
// Statut
|
||||
print '<tr><td>'.$langs->trans('Status').'</td>';
|
||||
print '<td align="left" colspan="3">'.($object->getLibStatut(4,$totalpaye)).'</td></tr>';
|
||||
|
||||
@ -27,7 +27,7 @@
|
||||
require '../bank/pre.inc.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/bonprelevement.class.php';
|
||||
|
||||
$langs->load("widthdrawals");
|
||||
$langs->load("withdrawals");
|
||||
$langs->load("categories");
|
||||
|
||||
// Security check
|
||||
|
||||
@ -426,14 +426,14 @@ class BonPrelevement extends CommonObject
|
||||
$facs = array();
|
||||
$amounts = array();
|
||||
|
||||
$facs = $this->getListInvoices();
|
||||
$facs = $this->getListInvoices(1);
|
||||
|
||||
$num=count($facs);
|
||||
for ($i = 0; $i < $num; $i++)
|
||||
{
|
||||
$fac = new Facture($this->db);
|
||||
$fac->fetch($facs[$i]);
|
||||
$amounts[$fac->id] = $fac->total_ttc;
|
||||
$fac->fetch($facs[$i][0]);
|
||||
$amounts[$fac->id] = $facs[$i][1];
|
||||
$result = $fac->set_paid($user);
|
||||
}
|
||||
$paiement = new Paiement($this->db);
|
||||
@ -576,9 +576,10 @@ class BonPrelevement extends CommonObject
|
||||
/**
|
||||
* Get invoice list
|
||||
*
|
||||
* @param $amounts If you want to get the amount of the order for each invoice
|
||||
* @return array id of invoices
|
||||
*/
|
||||
private function getListInvoices()
|
||||
private function getListInvoices($amounts=0)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
@ -589,6 +590,7 @@ class BonPrelevement extends CommonObject
|
||||
* dans un bon de prelevement
|
||||
*/
|
||||
$sql = "SELECT fk_facture";
|
||||
if ($amounts) $sql .= ", SUM(pl.amount)";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."prelevement_bons as p";
|
||||
$sql.= " , ".MAIN_DB_PREFIX."prelevement_lignes as pl";
|
||||
$sql.= " , ".MAIN_DB_PREFIX."prelevement_facture as pf";
|
||||
@ -596,6 +598,7 @@ class BonPrelevement extends CommonObject
|
||||
$sql.= " AND pl.fk_prelevement_bons = p.rowid";
|
||||
$sql.= " AND p.rowid = ".$this->id;
|
||||
$sql.= " AND p.entity = ".$conf->entity;
|
||||
if ($amounts) $sql.= " GROUP BY fk_facture";
|
||||
|
||||
$resql=$this->db->query($sql);
|
||||
if ($resql)
|
||||
@ -608,7 +611,14 @@ class BonPrelevement extends CommonObject
|
||||
while ($i < $num)
|
||||
{
|
||||
$row = $this->db->fetch_row($resql);
|
||||
$arr[$i] = $row[0];
|
||||
if (!$amounts) $arr[$i] = $row[0];
|
||||
else
|
||||
{
|
||||
$arr[$i] = array(
|
||||
$row[0],
|
||||
$row[1]
|
||||
);
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -33,6 +33,7 @@ require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
|
||||
$langs->load("companies");
|
||||
$langs->load("categories");
|
||||
$langs->load('withdrawals');
|
||||
$langs->load('bills');
|
||||
|
||||
// Securite acces client
|
||||
if ($user->societe_id > 0) accessforbidden();
|
||||
|
||||
@ -32,6 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
|
||||
|
||||
$langs->load("categories");
|
||||
$langs->load('withdrawals');
|
||||
$langs->load('bills');
|
||||
|
||||
// Securite acces client
|
||||
if ($user->societe_id > 0) accessforbidden();
|
||||
|
||||
@ -33,6 +33,7 @@ if ($user->societe_id > 0) accessforbidden();
|
||||
|
||||
$langs->load("withdrawals");
|
||||
$langs->load("categories");
|
||||
$langs->load('bills');
|
||||
|
||||
// Get supervariables
|
||||
$prev_id = GETPOST('id','int');
|
||||
|
||||
@ -36,6 +36,7 @@ if ($user->societe_id > 0) accessforbidden();
|
||||
|
||||
$langs->load("categories");
|
||||
$langs->load('withdrawals');
|
||||
$langs->load('bills');
|
||||
|
||||
// Get supervariables
|
||||
$prev_id = GETPOST('id','int');
|
||||
|
||||
@ -26,6 +26,7 @@
|
||||
|
||||
require '../bank/pre.inc.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/rejetprelevement.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/ligneprelevement.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
|
||||
|
||||
$langs->load("withdrawals");
|
||||
@ -56,6 +57,7 @@ if ($sortorder == "") $sortorder="DESC";
|
||||
if ($sortfield == "") $sortfield="p.datec";
|
||||
|
||||
$rej = new RejetPrelevement($db, $user);
|
||||
$ligne = new LignePrelevement($db);
|
||||
|
||||
/*
|
||||
* Liste des factures
|
||||
@ -84,7 +86,7 @@ if ($result)
|
||||
print"\n<!-- debut table -->\n";
|
||||
print '<table class="noborder" width="100%" cellspacing="0" cellpadding="4">';
|
||||
print '<tr class="liste_titre">';
|
||||
print_liste_field_titre($langs->trans("Nb"),"rejets.php","p.ref",'',$urladd);
|
||||
print_liste_field_titre($langs->trans("Line"),"rejets.php","p.ref",'',$urladd);
|
||||
print_liste_field_titre($langs->trans("ThirdParty"),"rejets.php","s.nom",'',$urladd);
|
||||
print_liste_field_titre($langs->trans("Reason"),"rejets.php","pr.motif","",$urladd);
|
||||
print '</tr>';
|
||||
@ -98,7 +100,7 @@ if ($result)
|
||||
$obj = $db->fetch_object($result);
|
||||
|
||||
print "<tr $bc[$var]><td>";
|
||||
print '<img border="0" src="./img/statut'.$obj->statut.'.png"></a> ';
|
||||
print $ligne->LibStatut($obj->statut,2).' ';
|
||||
print '<a href="'.DOL_URL_ROOT.'/compta/prelevement/ligne.php?id='.$obj->rowid.'">';
|
||||
|
||||
print substr('000000'.$obj->rowid, -6)."</a></td>";
|
||||
|
||||
@ -246,11 +246,11 @@ class Contact extends CommonObject
|
||||
$sql .= ", poste='".$this->db->escape($this->poste)."'";
|
||||
$sql .= ", fax='".$this->db->escape($this->fax)."'";
|
||||
$sql .= ", email='".$this->db->escape($this->email)."'";
|
||||
$sql .= ", note='".$this->db->escape($this->note)."'";
|
||||
$sql .= ", phone = '".$this->db->escape($this->phone_pro)."'";
|
||||
$sql .= ", phone_perso = '".$this->db->escape($this->phone_perso)."'";
|
||||
$sql .= ", phone_mobile = '".$this->db->escape($this->phone_mobile)."'";
|
||||
$sql .= ", jabberid = '".$this->db->escape($this->jabberid)."'";
|
||||
$sql .= ", note='".(isset($this->note)?"'".$this->db->escape($this->note)."'":"null")."'";
|
||||
$sql .= ", phone = '".(isset($this->phone_pro)?"'".$this->db->escape($this->phone_pro)."'":"null")."'";
|
||||
$sql .= ", phone_perso = '".(isset($this->phone_perso)?"'".$this->db->escape($this->phone_perso)."'":"null")."'";
|
||||
$sql .= ", phone_mobile = '".(isset($this->phone_mobile)?"'".$this->db->escape($this->phone_mobile)."'":"null")."'";
|
||||
$sql .= ", jabberid = '".(isset($this->jabberid)?"'".$this->db->escape($this->jabberid)."'":"null")."'";
|
||||
$sql .= ", priv = '".$this->priv."'";
|
||||
$sql .= ", fk_user_modif=".($user->id > 0 ? "'".$user->id."'":"null");
|
||||
$sql .= ", default_lang=".($this->default_lang?"'".$this->default_lang."'":"null");
|
||||
|
||||
@ -524,20 +524,20 @@ class Contrat extends CommonObject
|
||||
$objp = $this->db->fetch_object($result);
|
||||
|
||||
$line = new ContratLigne($this->db);
|
||||
$line->id = $objp->rowid;
|
||||
$line->id = $objp->rowid;
|
||||
$line->fk_contrat = $objp->fk_contrat;
|
||||
$line->libelle = $objp->description;
|
||||
$line->desc = $objp->description;
|
||||
$line->qty = $objp->qty;
|
||||
$line->statut = $objp->statut;
|
||||
$line->ref = $objp->ref;
|
||||
$line->statut = $objp->statut;
|
||||
$line->ref = (isset($objp->ref)?$objp->ref:NULL);
|
||||
$line->tva_tx = $objp->tva_tx;
|
||||
$line->localtax1_tx = $objp->localtax1_tx;
|
||||
$line->localtax2_tx = $objp->localtax2_tx;
|
||||
$line->subprice = $objp->subprice;
|
||||
$line->remise_percent = $objp->remise_percent;
|
||||
$line->price_ht = $objp->price_ht;
|
||||
$line->price = $objp->price; // For backward compatibility
|
||||
$line->price = (isset($objp->price)?$objp->price:NULL); // For backward compatibility
|
||||
$line->total_ht = $objp->total_ht;
|
||||
$line->total_tva = $objp->total_tva;
|
||||
$line->total_localtax1= $objp->total_localtax1;
|
||||
|
||||
@ -938,7 +938,7 @@ class DoliDBMysqli
|
||||
*
|
||||
* @param string $table Name of table
|
||||
* @param string $field Optionnel : Name of field if we want description of field
|
||||
* @return resource Resource
|
||||
* @return resultset Resultset x (x->Field, x->Type, ...)
|
||||
*/
|
||||
function DDLDescTable($table,$field="")
|
||||
{
|
||||
|
||||
@ -1169,7 +1169,7 @@ class DoliDBPgsql
|
||||
*
|
||||
* @param string $table Name of table
|
||||
* @param string $field Optionnel : Name of field if we want description of field
|
||||
* @return resource Resource
|
||||
* @return resultset Resultset x (x->attname)
|
||||
*/
|
||||
function DDLDescTable($table,$field="")
|
||||
{
|
||||
|
||||
@ -751,12 +751,14 @@ function dol_delete_file($file,$disableglob=0,$nophperrors=0,$nohook=0,$object=n
|
||||
{
|
||||
$error=0;
|
||||
|
||||
//print "x".$file." ".$disableglob;
|
||||
//print "x".$file." ".$disableglob;exit;
|
||||
$ok=true;
|
||||
$file_osencoded=dol_osencode($file); // New filename encoded in OS filesystem encoding charset
|
||||
if (empty($disableglob) && ! empty($file_osencoded))
|
||||
{
|
||||
foreach (glob($file_osencoded) as $filename)
|
||||
$globencoded=str_replace('[','\[',$file_osencoded);
|
||||
$globencoded=str_replace(']','\]',$globencoded);
|
||||
foreach (glob($globencoded) as $filename)
|
||||
{
|
||||
if ($nophperrors) $ok=@unlink($filename); // The unlink encapsulated by dolibarr
|
||||
else $ok=unlink($filename); // The unlink encapsulated by dolibarr
|
||||
|
||||
@ -219,7 +219,9 @@ function restrictedArea($user, $features, $objectid=0, $dbtablename='', $feature
|
||||
{
|
||||
foreach($feature2 as $subfeature)
|
||||
{
|
||||
if (empty($user->rights->$feature->$subfeature->creer) && empty($user->rights->$feature->$subfeature->write)) $createok=0;
|
||||
if (empty($user->rights->$feature->$subfeature->creer)
|
||||
&& empty($user->rights->$feature->$subfeature->write)
|
||||
&& empty($user->rights->$feature->$subfeature->create)) $createok=0;
|
||||
else { $createok=1; break; } // For bypass the second test if the first is ok
|
||||
}
|
||||
}
|
||||
|
||||
@ -48,7 +48,7 @@ function print_eldy_menu($db,$atarget,$type_user)
|
||||
|
||||
// Home
|
||||
$classname="";
|
||||
if ($_SESSION["mainmenu"] && $_SESSION["mainmenu"] == "home")
|
||||
if (isset($_SESSION["mainmenu"]) && $_SESSION["mainmenu"] == "home")
|
||||
{
|
||||
$classname='class="tmenusel"'; $_SESSION['idmenu']='';
|
||||
}
|
||||
@ -76,7 +76,7 @@ function print_eldy_menu($db,$atarget,$type_user)
|
||||
$langs->load("suppliers");
|
||||
|
||||
$classname="";
|
||||
if ($_SESSION["mainmenu"] && $_SESSION["mainmenu"] == "companies")
|
||||
if (isset($_SESSION["mainmenu"]) && $_SESSION["mainmenu"] == "companies")
|
||||
{
|
||||
$classname='class="tmenusel"'; $_SESSION['idmenu']='';
|
||||
}
|
||||
@ -110,14 +110,14 @@ function print_eldy_menu($db,$atarget,$type_user)
|
||||
}
|
||||
|
||||
// Products-Services
|
||||
$tmpentry=array('enabled'=>($conf->product->enabled || $conf->service->enabled), 'perms'=>($user->rights->produit->lire || $user->rights->service->lire), 'module'=>'product|service');
|
||||
$showmode=dol_eldy_showmenu($type_user, $tmpentry, $listofmodulesforexternal);
|
||||
if ($showmode)
|
||||
{
|
||||
$tmpentry=array('enabled'=>($conf->product->enabled || $conf->service->enabled), 'perms'=>($user->rights->produit->lire || $user->rights->service->lire), 'module'=>'product|service');
|
||||
$showmode=dol_eldy_showmenu($type_user, $tmpentry, $listofmodulesforexternal);
|
||||
if ($showmode)
|
||||
{
|
||||
$langs->load("products");
|
||||
|
||||
$classname="";
|
||||
if ($_SESSION["mainmenu"] && $_SESSION["mainmenu"] == "products")
|
||||
if (isset($_SESSION["mainmenu"]) && $_SESSION["mainmenu"] == "products")
|
||||
{
|
||||
$classname='class="tmenusel"'; $_SESSION['idmenu']='';
|
||||
}
|
||||
@ -167,7 +167,7 @@ function print_eldy_menu($db,$atarget,$type_user)
|
||||
$langs->load("commercial");
|
||||
|
||||
$classname="";
|
||||
if ($_SESSION["mainmenu"] && $_SESSION["mainmenu"] == "commercial")
|
||||
if (isset($_SESSION["mainmenu"]) && $_SESSION["mainmenu"] == "commercial")
|
||||
{
|
||||
$classname='class="tmenusel"'; $_SESSION['idmenu']='';
|
||||
}
|
||||
@ -209,7 +209,7 @@ function print_eldy_menu($db,$atarget,$type_user)
|
||||
$langs->load("compta");
|
||||
|
||||
$classname="";
|
||||
if ($_SESSION["mainmenu"] && $_SESSION["mainmenu"] == "accountancy")
|
||||
if (isset($_SESSION["mainmenu"]) && $_SESSION["mainmenu"] == "accountancy")
|
||||
{
|
||||
$classname='class="tmenusel"'; $_SESSION['idmenu']='';
|
||||
}
|
||||
@ -252,7 +252,7 @@ function print_eldy_menu($db,$atarget,$type_user)
|
||||
$langs->load("banks");
|
||||
|
||||
$classname="";
|
||||
if ($_SESSION["mainmenu"] && $_SESSION["mainmenu"] == "bank")
|
||||
if (isset($_SESSION["mainmenu"]) && $_SESSION["mainmenu"] == "bank")
|
||||
{
|
||||
$classname='class="tmenusel"'; $_SESSION['idmenu']='';
|
||||
}
|
||||
@ -294,7 +294,7 @@ function print_eldy_menu($db,$atarget,$type_user)
|
||||
$langs->load("projects");
|
||||
|
||||
$classname="";
|
||||
if ($_SESSION["mainmenu"] && $_SESSION["mainmenu"] == "project")
|
||||
if (isset($_SESSION["mainmenu"]) && $_SESSION["mainmenu"] == "project")
|
||||
{
|
||||
$classname='class="tmenusel"'; $_SESSION['idmenu']='';
|
||||
}
|
||||
@ -336,7 +336,7 @@ function print_eldy_menu($db,$atarget,$type_user)
|
||||
$langs->load("other");
|
||||
|
||||
$classname="";
|
||||
if ($_SESSION["mainmenu"] && $_SESSION["mainmenu"] == "tools")
|
||||
if (isset($_SESSION["mainmenu"]) && $_SESSION["mainmenu"] == "tools")
|
||||
{
|
||||
$classname='class="tmenusel"'; $_SESSION['idmenu']='';
|
||||
}
|
||||
@ -378,7 +378,7 @@ function print_eldy_menu($db,$atarget,$type_user)
|
||||
$langs->load("shop");
|
||||
|
||||
$classname="";
|
||||
if ($_SESSION["mainmenu"] && $_SESSION["mainmenu"] == "shop")
|
||||
if (isset($_SESSION["mainmenu"]) && $_SESSION["mainmenu"] == "shop")
|
||||
{
|
||||
$classname='class="tmenusel"'; $_SESSION['idmenu']='';
|
||||
}
|
||||
@ -406,7 +406,7 @@ function print_eldy_menu($db,$atarget,$type_user)
|
||||
if ($showmode)
|
||||
{
|
||||
$classname="";
|
||||
if ($_SESSION["mainmenu"] && $_SESSION["mainmenu"] == "members")
|
||||
if (isset($_SESSION["mainmenu"]) && $_SESSION["mainmenu"] == "members")
|
||||
{
|
||||
$classname='class="tmenusel"'; $_SESSION['idmenu']='';
|
||||
}
|
||||
@ -451,10 +451,10 @@ function print_eldy_menu($db,$atarget,$type_user)
|
||||
{
|
||||
$idsel=(empty($newTabMenu[$i]['mainmenu'])?'none':$newTabMenu[$i]['mainmenu']);
|
||||
|
||||
$showmode=dol_eldy_showmenu($type_user,$newTabMenu[$i],$listofmodulesforexternal);
|
||||
$showmode=dol_eldy_showmenu($type_user,$newTabMenu[$i],$listofmodulesforexternal);
|
||||
|
||||
if ($showmode == 1)
|
||||
{
|
||||
if ($showmode == 1)
|
||||
{
|
||||
if (preg_match("/^(http:\/\/|https:\/\/)/i",$newTabMenu[$i]['url']))
|
||||
{
|
||||
$url = $newTabMenu[$i]['url'];
|
||||
@ -1462,36 +1462,36 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Function to test if an entry is enabled or not
|
||||
*
|
||||
* @param string $type_user 0=We need backoffice menu, 1=We need frontoffice menu
|
||||
* @param array &$menuentry Array for menu entry
|
||||
* @param array &$listofmodulesforexternal Array with list of modules allowed to external users
|
||||
* @return int 0=Hide, 1=Show, 2=Show gray
|
||||
*/
|
||||
function dol_eldy_showmenu($type_user, &$menuentry, &$listofmodulesforexternal)
|
||||
{
|
||||
//print 'type_user='.$type_user.' module='.$menuentry['module'].' enabled='.$menuentry['enabled'].' perms='.$menuentry['perms'];
|
||||
//print 'ok='.in_array($menuentry['module'], $listofmodulesforexternal);
|
||||
|
||||
if (empty($menuentry['enabled'])) return 0; // Entry disabled by condition
|
||||
if ($type_user && $menuentry['module'])
|
||||
{
|
||||
$tmploops=explode('|',$menuentry['module']);
|
||||
$found=0;
|
||||
foreach($tmploops as $tmploop)
|
||||
{
|
||||
if (in_array($tmploop, $listofmodulesforexternal)) {
|
||||
$found++; break;
|
||||
}
|
||||
}
|
||||
if (! $found) return 0; // Entry is for menus all excluded to external users
|
||||
}
|
||||
if (! $menuentry['perms'] && $type_user) return 0; // No permissions and user is external
|
||||
if (! $menuentry['perms'] && ! empty($conf->global->MAIN_MENU_HIDE_UNAUTHORIZED)) return 0; // No permissions and option to hide when not allowed, even for internal user, is on
|
||||
if (! $menuentry['perms']) return 2; // No permissions and user is external
|
||||
return 1;
|
||||
/**
|
||||
* Function to test if an entry is enabled or not
|
||||
*
|
||||
* @param string $type_user 0=We need backoffice menu, 1=We need frontoffice menu
|
||||
* @param array &$menuentry Array for menu entry
|
||||
* @param array &$listofmodulesforexternal Array with list of modules allowed to external users
|
||||
* @return int 0=Hide, 1=Show, 2=Show gray
|
||||
*/
|
||||
function dol_eldy_showmenu($type_user, &$menuentry, &$listofmodulesforexternal)
|
||||
{
|
||||
//print 'type_user='.$type_user.' module='.$menuentry['module'].' enabled='.$menuentry['enabled'].' perms='.$menuentry['perms'];
|
||||
//print 'ok='.in_array($menuentry['module'], $listofmodulesforexternal);
|
||||
|
||||
if (empty($menuentry['enabled'])) return 0; // Entry disabled by condition
|
||||
if ($type_user && $menuentry['module'])
|
||||
{
|
||||
$tmploops=explode('|',$menuentry['module']);
|
||||
$found=0;
|
||||
foreach($tmploops as $tmploop)
|
||||
{
|
||||
if (in_array($tmploop, $listofmodulesforexternal)) {
|
||||
$found++; break;
|
||||
}
|
||||
}
|
||||
if (! $found) return 0; // Entry is for menus all excluded to external users
|
||||
}
|
||||
if (! $menuentry['perms'] && $type_user) return 0; // No permissions and user is external
|
||||
if (! $menuentry['perms'] && ! empty($conf->global->MAIN_MENU_HIDE_UNAUTHORIZED)) return 0; // No permissions and option to hide when not allowed, even for internal user, is on
|
||||
if (! $menuentry['perms']) return 2; // No permissions and user is external
|
||||
return 1;
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
@ -66,8 +66,7 @@ class ImportCsv extends ModeleImports
|
||||
global $conf,$langs;
|
||||
$this->db = $db;
|
||||
|
||||
$this->separator=','; // Change also function cleansep
|
||||
if (! empty($conf->global->IMPORT_CSV_SEPARATOR_TO_USE)) $this->separator=$conf->global->IMPORT_CSV_SEPARATOR_TO_USE;
|
||||
$this->separator=(GETPOST('separator')?GETPOST('separator'):(empty($conf->global->IMPORT_CSV_SEPARATOR_TO_USE)?',':$conf->global->IMPORT_CSV_SEPARATOR_TO_USE));
|
||||
$this->enclosure='"';
|
||||
$this->escape='"';
|
||||
|
||||
@ -579,7 +578,7 @@ class ImportCsv extends ModeleImports
|
||||
//var_dump($objimport->array_import_convertvalue); exit;
|
||||
|
||||
// Build SQL request
|
||||
if (! tablewithentity($tablename))
|
||||
if (! tablewithentity($tablename))
|
||||
{
|
||||
$sql ='INSERT INTO '.$tablename.'('.$listfields.', import_key';
|
||||
if (! empty($objimport->array_import_tables_creator[0][$alias])) $sql.=', '.$objimport->array_import_tables_creator[0][$alias];
|
||||
@ -651,25 +650,16 @@ function cleansep($value)
|
||||
function tablewithentity($table)
|
||||
{
|
||||
global $db;
|
||||
$sql = "SHOW COLUMNS FROM ".$table." LIKE 'entity'";
|
||||
|
||||
$resql=$db->query($sql);
|
||||
if ($resql)
|
||||
{
|
||||
$numrows=$db->num_rows($resql);
|
||||
if ($numrows)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
|
||||
$resql=$db->DDLDescTable($table,'entity');
|
||||
if ($resql)
|
||||
{
|
||||
$i=0;
|
||||
$obj=$db->fetch_object($resql);
|
||||
if ($obj) return 1;
|
||||
else return 0;
|
||||
}
|
||||
else return -1;
|
||||
}
|
||||
|
||||
?>
|
||||
@ -355,7 +355,7 @@ class modSociete extends DolibarrModules
|
||||
$this->import_label[$r]='ImportDataset_company_2';
|
||||
$this->import_icon[$r]='contact';
|
||||
$this->import_entities_array[$r]=array('s.fk_soc'=>'company'); // We define here only fields that use another icon that the one defined into import_icon
|
||||
$this->import_tables_array[$r]=array('s'=>MAIN_DB_PREFIX.'socpeople'); // List of tables to insert into (insert done in same order)
|
||||
$this->import_tables_array[$r]=array('s'=>MAIN_DB_PREFIX.'socpeople','extra'=>MAIN_DB_PREFIX.'socpeople_extrafields'); // List of tables to insert into (insert done in same order)
|
||||
$this->import_fields_array[$r]=array('s.fk_soc'=>'ThirdPartyName*','s.civilite'=>'UserTitle','s.name'=>"Name*",'s.firstname'=>"Firstname",'s.address'=>"Address",'s.cp'=>"Zip",'s.ville'=>"Town",'s.fk_pays'=>"CountryCode",'s.birthday'=>"BirthdayDate",'s.poste'=>"Role",'s.phone'=>"Phone",'s.phone_perso'=>"PhonePerso",'s.phone_mobile'=>"PhoneMobile",'s.fax'=>"Fax",'s.email'=>"Email",'s.note'=>"Note",'s.datec'=>"DateCreation");
|
||||
// Add extra fields
|
||||
$sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'contact'";
|
||||
@ -370,7 +370,7 @@ class modSociete extends DolibarrModules
|
||||
}
|
||||
}
|
||||
// End add extra fields
|
||||
$this->import_fieldshidden_array[$r]=array('s.fk_user_creat'=>'user->id'); // aliastable.field => ('user->id' or 'lastrowid-'.tableparent)
|
||||
$this->import_fieldshidden_array[$r]=array('s.fk_user_creat'=>'user->id','extra.fk_object'=>'lastrowid-'.MAIN_DB_PREFIX.'socpeople'); // aliastable.field => ('user->id' or 'lastrowid-'.tableparent)
|
||||
$this->import_convertvalue_array[$r]=array(
|
||||
's.fk_soc'=>array('rule'=>'fetchidfromref','file'=>'/societe/class/societe.class.php','class'=>'Societe','method'=>'fetch','element'=>'ThirdParty'),
|
||||
's.fk_pays'=>array('rule'=>'fetchidfromcodeid','classfile'=>'/core/class/cpays.class.php','class'=>'Cpays','method'=>'fetch','dict'=>'DictionnaryCountry'),
|
||||
|
||||
@ -43,6 +43,7 @@ class mod_codeclient_monkey extends ModeleThirdPartyCode
|
||||
|
||||
var $prefixcustomer='CU';
|
||||
var $prefixsupplier='SU';
|
||||
var $prefixIsRequired; // Le champ prefix du tiers doit etre renseigne quand on utilise {pre}
|
||||
|
||||
|
||||
/**
|
||||
@ -57,6 +58,7 @@ class mod_codeclient_monkey extends ModeleThirdPartyCode
|
||||
$this->code_modifiable_invalide = 1;
|
||||
$this->code_modifiable_null = 1;
|
||||
$this->code_auto = 1;
|
||||
$this->prefixIsRequired = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -33,7 +33,7 @@
|
||||
else if (type == 'varchar') { size.val('255').removeAttr('disabled'); unique.removeAttr('disabled','disabled'); }
|
||||
else size.val('').attr('disabled','disabled');
|
||||
}
|
||||
init_typeoffields('');
|
||||
init_typeoffields('<?php echo GETPOST('type'); ?>');
|
||||
jQuery("#type").change(function() {
|
||||
init_typeoffields($(this).val());
|
||||
});
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
/* Copyright (C) 2011 Dimitri Mouillard <dmouillard@teclib.com>
|
||||
* Copyright (C) 2012 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2012 Regis Houssin <regis.houssin@capnetworks.com>
|
||||
* Copyright (C) 2013 Juanjo Menent <jmenent@2byte.es>
|
||||
*
|
||||
* 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
|
||||
@ -296,7 +297,7 @@ if ($action == 'confirm_send')
|
||||
// Content
|
||||
$message = $langs->transnoentitiesnoconv("Hello")." ".$destinataire->prenom.",\n";
|
||||
$message.= "\n";
|
||||
$message.= "Veuillez trouver ci-dessous une demande de congés payés à valider.\n";
|
||||
$message.= $langs->transnoentities("HolidaysToValidateBody")."\n";
|
||||
|
||||
$delayForRequest = $cp->getConfCP('delayForRequest');
|
||||
//$delayForRequest = $delayForRequest * (60*60*24);
|
||||
@ -309,7 +310,7 @@ if ($action == 'confirm_send')
|
||||
if($cp->date_debut < $nextMonth)
|
||||
{
|
||||
$message.= "\n";
|
||||
$message.= "Cette demande de congés payés à été effectué dans un délai de moins de ".$cp->getConfCP('delayForRequest')." jours avant ceux-ci.\n";
|
||||
$message.= $langs->transnoentities("HolidaysToValidateDelay",$cp->getConfCP('delayForRequest'))."\n";
|
||||
}
|
||||
}
|
||||
|
||||
@ -320,7 +321,7 @@ if ($action == 'confirm_send')
|
||||
if ($nbopenedday > $cp->getCPforUser($cp->fk_user))
|
||||
{
|
||||
$message.= "\n";
|
||||
$message.= "L'utilisateur ayant fait cette demande de congés payés n'a pas le solde requis.\n";
|
||||
$message.= $langs->transnoentities("HolidaysToValidateAlertSolde")."\n";
|
||||
}
|
||||
}
|
||||
|
||||
@ -411,7 +412,7 @@ if($action == 'confirm_valid')
|
||||
// Content
|
||||
$message = $langs->transnoentitiesnoconv("Hello")." ".$destinataire->prenom.",\n";
|
||||
$message.= "\n";
|
||||
$message.= "Votre demande de congés payés du ".dol_print_date($cp->date_debut,'day')." au ".dol_print_date($cp->date_fin,'day')." vient d'être validée!\n";
|
||||
$message.= $langs->transnoentities("HolidaysValidatedBody", dol_print_date($cp->date_debut,'day'),dol_print_date($cp->date_fin,'day'))."\n";
|
||||
$message.= "- ".$langs->transnoentitiesnoconv("ValidatedBy")." : ".$expediteur->prenom." ".$expediteur->nom."\n";
|
||||
$message.= "- ".$langs->transnoentitiesnoconv("Link")." : ".$dolibarr_main_url_root."/holiday/fiche.php?id=".$cp->rowid."\n\n";
|
||||
$message.= "\n";
|
||||
@ -485,9 +486,9 @@ if ($action == 'confirm_refuse')
|
||||
// Content
|
||||
$message = $langs->transnoentitiesnoconv("Hello")." ".$destinataire->prenom.",\n";
|
||||
$message.= "\n";
|
||||
$message.= "Votre demande de congés payés ".dol_print_date($cp->date_debut,'day')." ".$langs->transnoentitiesnoconv("To")." ".dol_print_date($cp->date_fin,'day')." vient d'être refusée pour le motif suivant :\n";
|
||||
$message.= $_POST['detail_refuse']."\n\n";
|
||||
$message.= "- ".$langs->transnoentitiesnoconv("ModifiedBy")." : ".$expediteur->prenom." ".$expediteur->nom."\n";
|
||||
$message.= $langs->transnoentities("HolidaysRefusedBody", dol_print_date($cp->date_debut,'day'), dol_print_date($cp->date_fin,'day'))."\n";
|
||||
$message.= GETPOST('detail_refuse','alpha')."\n\n";
|
||||
$message.= "- ".$langs->transnoentitiesnoconv("ModifiedBy")." : ".$expediteur->prenom." ".$expediteur->nom."\n";
|
||||
$message.= "- ".$langs->transnoentitiesnoconv("Link")." : ".$dolibarr_main_url_root."/holiday/fiche.php?id=".$cp->rowid."\n\n";
|
||||
$message.= "\n";
|
||||
|
||||
@ -562,7 +563,7 @@ if ($action == 'confirm_cancel' && $_GET['confirm'] == 'yes')
|
||||
// Content
|
||||
$message = $langs->transnoentitiesnoconv("Hello")." ".$destinataire->prenom.",\n";
|
||||
$message.= "\n";
|
||||
$message.= "Votre demande de congés ".dol_print_date($cp->date_debut,'day')." ".$langs->transnoentitiesnoconv("To")." ".dol_print_date($cp->date_fin,'day')." va été annulée.\n";
|
||||
$message.= $langs->transnoentities("HolidaysCanceledBody", dol_print_date($cp->date_debut,'day'), dol_print_date($cp->date_fin,'day'))."\n";
|
||||
$message.= "- ".$langs->transnoentitiesnoconv("ModifiedBy")." : ".$expediteur->prenom." ".$expediteur->nom."\n";
|
||||
$message.= "- ".$langs->transnoentitiesnoconv("Link")." : ".$dolibarr_main_url_root."/holiday/fiche.php?id=".$cp->rowid."\n\n";
|
||||
$message.= "\n";
|
||||
|
||||
@ -1017,7 +1017,7 @@ if ($step == 4 && $datatoimport)
|
||||
}
|
||||
else
|
||||
{
|
||||
print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans("SomeMandatoryFieldHaveNoSource")).'">'.$langs->trans("NextStep").'</a>';
|
||||
print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv("SomeMandatoryFieldHaveNoSource")).'">'.$langs->trans("NextStep").'</a>';
|
||||
}
|
||||
}
|
||||
|
||||
@ -1281,7 +1281,7 @@ if ($step == 5 && $datatoimport)
|
||||
}
|
||||
else
|
||||
{
|
||||
print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans("NotEnoughPermissions")).'">'.$langs->trans("RunSimulateImportFile").'</a>';
|
||||
print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv("NotEnoughPermissions")).'">'.$langs->trans("RunSimulateImportFile").'</a>';
|
||||
}
|
||||
print '</center>';
|
||||
}
|
||||
|
||||
@ -559,10 +559,10 @@ class PEAR
|
||||
$ec = 'PEAR_Error';
|
||||
}
|
||||
if ($skipmsg) {
|
||||
$a = &new $ec($code, $mode, $options, $userinfo);
|
||||
$a = new $ec($code, $mode, $options, $userinfo);
|
||||
return $a;
|
||||
} else {
|
||||
$a = &new $ec($message, $code, $mode, $options, $userinfo);
|
||||
$a = new $ec($message, $code, $mode, $options, $userinfo);
|
||||
return $a;
|
||||
}
|
||||
}
|
||||
|
||||
@ -307,7 +307,7 @@ class Mail_mimeDecode extends PEAR
|
||||
break;
|
||||
|
||||
case 'message/rfc822':
|
||||
$obj = &new Mail_mimeDecode($body);
|
||||
$obj = new Mail_mimeDecode($body);
|
||||
$return->parts[] = $obj->decode(array('include_bodies' => $this->_include_bodies,
|
||||
'decode_bodies' => $this->_decode_bodies,
|
||||
'decode_headers' => $this->_decode_headers));
|
||||
|
||||
154
htdocs/langs/ca_ES/holiday.lang
Normal file
154
htdocs/langs/ca_ES/holiday.lang
Normal file
@ -0,0 +1,154 @@
|
||||
# Dolibarr language file - ca_ES - holiday
|
||||
CHARSET= UTF-8
|
||||
|
||||
Holidays=Vacacions
|
||||
CPTitreMenu=Vacacions
|
||||
MenuReportMonth=Estat mensual
|
||||
MenuAddCP=Nova petició
|
||||
NotActiveModCP=Heu d'activar el mòdul Vacacions per veure aquesta pàgina.
|
||||
NotConfigModCP=Heu de configurar el mòdul Vacacions per veure aquesta pàgina. per configurar, <a href="./admin/holiday.php?leftmenu=setup&mainmenu=home" style="font-weight: normal; color: red; text-decoration: underline;">feu clic aquí</a>.
|
||||
NoCPforUser=No té peticions de vacances.
|
||||
AddCP=Crear petició de vacances
|
||||
CPErrorSQL=S'ha produït un error de SQL:
|
||||
Employe=Empleat
|
||||
DateDebCP=Data inici
|
||||
DateFinCP=Data fi
|
||||
DateCreateCP=Data de creació
|
||||
DraftCP=Esborrany
|
||||
ToValidateCP=En espera de validació
|
||||
ValidateCP=Validada
|
||||
CancelCP=Anul·lada
|
||||
RefuseCP=Rebutjada
|
||||
ValidatorCP=Validador
|
||||
ListeCP=Llista de vacances
|
||||
ValidateByCP=Serà validada per
|
||||
DescCP=Descripció
|
||||
SendRequestCP=Enviar la petició de vacances
|
||||
DelayToRequestCP=Les peticions de vacances s'han de fer almenys <b>%s dies</b> abans.
|
||||
MenuConfCP=Definir les vacances
|
||||
UpdateAllCP=Actualitzar les vacances
|
||||
SoldeCPUser=El seu saldo de vacances és de <b>%s dies</b>.
|
||||
ErrorEndDateCP=Ha d'indicar una data de fi superior a la data d'inici.
|
||||
ErrorSQLCreateCP=S'ha produït un error de SQL durant la creació:
|
||||
ErrorIDFicheCP=S'ha produït un error, aquesta sol·licitud de vacances no existeix.
|
||||
ReturnCP=Tornar a la pàgina anterior
|
||||
ErrorUserViewCP=No està autoritzat a llegir aquesta petició de vacances.
|
||||
InfosCP=Informació de la petició de vacances
|
||||
InfosWorkflowCP=Informació del workflow
|
||||
DateCreateCP=Data de creació
|
||||
RequestByCP=Comandada per
|
||||
TitreRequestCP=Fitxa vacances
|
||||
NbUseDaysCP=Nombre de dies de vacances consumits
|
||||
EditCP=Modificar
|
||||
DeleteCP=Eliminar
|
||||
ActionValidCP=Validar
|
||||
ActionRefuseCP=Rebutjar
|
||||
ActionCancelCP=Anul·lar
|
||||
StatutCP=Estat
|
||||
SendToValidationCP=Enviar validació
|
||||
TitleDeleteCP=Eliminar la petició de vacances
|
||||
ConfirmDeleteCP=Està segur de voler eliminar aquesta petició de vacances?
|
||||
ErrorCantDeleteCP=Error, no té vacances per eliminar aquesta petició de vacances.
|
||||
CantCreateCP=No té vacances per realitzar peticions de vacances.
|
||||
InvalidValidatorCP=Ha d'indicar un validador per a la seva petició de vacances.
|
||||
UpdateButtonCP=Actualitzar
|
||||
CantUpdate=No pot actualitzar aquesta petició de vacances.
|
||||
NoDateDebut=Ha d'indicar una data d'inici.
|
||||
NoDateFin=Ha d'indicar una data de fi.
|
||||
ErrorDureeCP=La seva petició de vacances no conté cap dia hàbil.
|
||||
TitleValidCP=Validar la petició de vacances
|
||||
ConfirmValidCP=Esteu segur de voler validar aquesta petició de vacances?
|
||||
DateValidCP=Data de validació
|
||||
TitleToValidCP=Enviar la petició de vacances
|
||||
ConfirmToValidCP=Esteu segur de voler enviar la petició de vacances?
|
||||
TitleRefuseCP=Rebutjar la petició de vacances
|
||||
ConfirmRefuseCP=Esteu segur de voler rebutjar la petició de vacances?
|
||||
NoMotifRefuseCP=Ha de seleccionar un motiu per rebutjar aquesta petició.
|
||||
TitleCancelCP=Anul·lar la petició de vacances
|
||||
ConfirmCancelCP=Esteu segur de voler anul·lar la petició de vacances?
|
||||
DetailRefusCP=Motiu del rebuig
|
||||
DateRefusCP=Data del rebuig
|
||||
DateCancelCP=Data de l'anul·lació
|
||||
DefineEventUserCP=Assignar permís excepcional a un usuari
|
||||
addEventToUserCP=Assignar aquest permís
|
||||
MotifCP=Motiu
|
||||
UserCP=Usuari
|
||||
ErrorAddEventToUserCP=S'ha produït un error en l'assignació del permís excepcional.
|
||||
AddEventToUserOkCP=S'ha afegit el permís excepcional.
|
||||
MenuLogCP=Veure els logs de vacances
|
||||
LogCP=Logs d'actualitzacions de vacances
|
||||
ActionByCP=Realitzat per
|
||||
UserUpdateCP=Per a l'usuari
|
||||
ActionTypeCP=Tipus
|
||||
PrevSoldeCP=Saldo anterior
|
||||
NewSoldeCP=Nou saldo
|
||||
alreadyCPexist=Ja s'ha efectuat una petició de vacances per a aquest període.
|
||||
UserName=Nom Cognoms
|
||||
Employee=Empleat
|
||||
FirstDayOfHoliday=Primer dia lliure
|
||||
LastDayOfHoliday=Últim dí lliure
|
||||
Morning=Matí
|
||||
Afternoon=Vesprada
|
||||
HolidaysMonthlyUpdate=Actualització mensual
|
||||
ManualUpdate=Actualització manual
|
||||
|
||||
## Configuration du Module ##
|
||||
ConfCP=Configuració del mòdul Vacacions
|
||||
DescOptionCP=Descripció de l'opció
|
||||
ValueOptionCP=Valor
|
||||
GroupToValidateCP=Grup amb possibilitat d'aprovar les vacances
|
||||
ConfirmConfigCP=Validar la configuració
|
||||
LastUpdateCP=Darrera actualització automàtica de vacances
|
||||
UpdateConfCPOK=Actualització efectuada correctament.
|
||||
ErrorUpdateConfCP=S'ha produït un error durant l'actualització, torne a provar.
|
||||
AddCPforUsers=Afegiu els saldos de vacances dels usuaris <a href="../define_holiday.php" style="font-weight: normal; color: red; text-decoration: underline;">fent clic aquí</a>.
|
||||
DelayForSubmitCP=Antelació mínima per sol·licitar vacances
|
||||
AlertValidatorDelayCP=Advertir a l'usuari validador si la petició no respecta el límit previst
|
||||
AlertValidorSoldeCP=Advertir a l'usuari validador si l'usuari demana vacances superiors al seu saldo
|
||||
nbUserCP=Nombre d'usuaris presos en compte en el mòdul vacances
|
||||
nbHolidayDeductedCP=Nombre de dies retribuïts a deduir per dia de vacances
|
||||
nbHolidayEveryMonthCP=Nombre de vacances afegides per mes
|
||||
Module27130Name=Gestió de les vacances
|
||||
TitleOptionMainCP=Ajustaments principals de vacances
|
||||
TitleOptionEventCP=Ajustaments de vacances enllaçats a esdeveniments
|
||||
ValidEventCP=Validar
|
||||
UpdateEventCP=Actualitzar els esdeveniments
|
||||
CreateEventCP=Crear
|
||||
NameEventCP=Nom de l'esdeveniment
|
||||
OkCreateEventCP=S'ha afegit l'esdeveniment correctament.
|
||||
ErrorCreateEventCP=Error en la creació de l'esdeveniment.
|
||||
UpdateEventOkCP=S'ha actualitzat l'esdeveniment correctament.
|
||||
ErrorUpdateEventCP=Error en l'actualització de l'esdeveniment.
|
||||
DeleteEventCP=Eliminar l'esdeveniment
|
||||
DeleteEventOkCP=S'ha eliminat l'esdeveniment.
|
||||
ErrorDeleteEventCP=Error en l'eliminació de l'esdeveniment.
|
||||
TitleDeleteEventCP=Eliminar un permís excepcional
|
||||
TitleCreateEventCP=Crear un permís excepcional
|
||||
TitleUpdateEventCP=Modificar o eliminar un permís excepcional
|
||||
DeleteEventOptionCP=Eliminar
|
||||
UpdateEventOptionCP=Actualitzar
|
||||
ErrorMailNotSend=S'ha produït un error en l'enviament del correu electrònic:
|
||||
NoCPforMonth=Sense vacances aquest mes.
|
||||
Jours=dies
|
||||
nbJours=Número de dies
|
||||
TitleAdminCP=Configuració de les vacances
|
||||
|
||||
#Messages
|
||||
Hello=Hola
|
||||
HolidaysToValidate=Dies retribuïts a validar
|
||||
HolidaysToValidateBody=A continuació trobareu una sol·licitud de dies retribuïts per validar
|
||||
HolidaysToValidateDelay=Aquesta sol·licitud de dies retribuïts tindrà lloc en un termini de menys de %s dies.
|
||||
HolidaysToValidateAlertSolde=L'usuari que ha realitzat la sol·licitud de dies retribuïts no disposa de suficients dies disponibles.
|
||||
HolidaysValidated=Dies retribuïts validats
|
||||
HolidaysValidatedBody=La seva sol·licitud de dies retribuïts des de %s al %s ha estat validada.
|
||||
HolidaysRefused=Dies retribuïts denegats
|
||||
HolidaysRefusedBody=La seva sol·licitud de dies retribuïts des de %s al %s ha estat denegada pel següent motiu:
|
||||
HolidaysCanceled=Dies retribuïts cancel·lats
|
||||
HolidaysCanceledBody=La seva sol·licitud de dies retribuïts des de %s al %s ha estat cancel·lada.
|
||||
|
||||
Permission20001=Consultar/crear/modificar les seves vacances
|
||||
Permission20002=Consultar/modificar totes les sol·licituds de permisos retribuïts
|
||||
Permission20003=Eliminar les sol·licituds de permisos retribuïts
|
||||
Permission20004=Definir els permisos retribuïts dels usuaris
|
||||
Permission20005=Consultar l'historial de modificacions de permisos retribuïts
|
||||
Permission20006=Accedir a l'informe mensual de permisos retribuïts
|
||||
@ -131,6 +131,20 @@ NoCPforMonth=No leave this month.
|
||||
Jours=days
|
||||
nbJours=Number days
|
||||
TitleAdminCP=Configuration of Holidays
|
||||
|
||||
#Messages
|
||||
Hello=Hello
|
||||
HolidaysToValidate=Validate holidays
|
||||
HolidaysToValidateBody=Below is a request for holidays to validate
|
||||
HolidaysToValidateDelay=This request for holidays will take place within a period of less than %s days.
|
||||
HolidaysToValidateAlertSolde=The user who made this request for holidays do not have enough available days.
|
||||
HolidaysValidated=Validated holidays
|
||||
HolidaysValidatedBody=Your request for holidays for %s to %s has been validated.
|
||||
HolidaysRefused=Denied holidays
|
||||
HolidaysRefusedBody=Your request for holidays for %s to %s has been denied for the following reason :
|
||||
HolidaysCanceled=Canceled holidays
|
||||
HolidaysCanceledBody=Your request for holidays for %s to %s has been canceled.
|
||||
|
||||
Permission20001=Read/create/modify their holidays
|
||||
Permission20002=Read/modify all requests of holidays
|
||||
Permission20003=Delete their holidays requests
|
||||
|
||||
@ -646,8 +646,8 @@ Permission1002=Crear/modificar stocks
|
||||
Permission1003=Eliminar stocks
|
||||
Permission1004=Consultar movimientos de stock
|
||||
Permission1005=Crear/modificar movimientos de stock
|
||||
Permission1101=Consultar ordenes de envío
|
||||
Permission1102=Crear/modificar ordenes de envío
|
||||
Permission1101=Consultar órdenes de envío
|
||||
Permission1102=Crear/modificar órdenes de envío
|
||||
Permission1104=Validar orden de envío
|
||||
Permission1109=Eliminar orden de envío
|
||||
Permission1181=Consultar proveedores
|
||||
|
||||
@ -132,6 +132,20 @@ NoCPforMonth=Sin vacaciones este mes.
|
||||
Jours=días
|
||||
nbJours=Número de días
|
||||
TitleAdminCP=Configuración de las vacaciones
|
||||
|
||||
#Messages
|
||||
Hello=Hola
|
||||
HolidaysToValidate=Días retribuidos a validar
|
||||
HolidaysToValidateBody=A continuación encontrará una solicitud de días retribuidos para validar
|
||||
HolidaysToValidateDelay=Esta solicitud de días retribuidos tendrá lugar en un plazo de menos de %s días.
|
||||
HolidaysToValidateAlertSolde=El usuario que ha realizado la solicitud de días retribuidos no dispone de suficientes días disponibles.
|
||||
HolidaysValidated=Días retribuidos validados
|
||||
HolidaysValidatedBody=Su solicitud de días retribuidos desde el %s al %s ha sido validada.
|
||||
HolidaysRefused=Días retribuidos denegados
|
||||
HolidaysRefusedBody=Su solicitud de días retribuidos desde el %s al %s ha sido denegada por el siguiente motivo :
|
||||
HolidaysCanceled=Días retribuidos cancelados
|
||||
HolidaysCanceledBody=Su solicitud de días retribuidos desde el %s al %s ha sido cancelada.
|
||||
|
||||
Permission20001=Consultar/crear/modificar sus vacaciones
|
||||
Permission20002=Consultar/modificar todas las solicitudes de permisos retribuídos
|
||||
Permission20003=Eliminar las solicitudes de permisos retribuídos
|
||||
|
||||
@ -9,7 +9,7 @@ StandingOrderToProcess=A procesar
|
||||
StandingOrderProcessed=Procesados
|
||||
Withdrawals=Reintegros
|
||||
Withdrawal=Reintegro
|
||||
WithdrawalsReceipts=Ordenes domiciliadas
|
||||
WithdrawalsReceipts=Órdenes domiciliadas
|
||||
WithdrawalReceipt=Orden domiciliación
|
||||
WithdrawalReceiptShort=Orden
|
||||
LastWithdrawalReceipts=Las %s últimas órdenes de domiciliación
|
||||
|
||||
@ -130,6 +130,20 @@ NoCPforMonth=Aucun congé ce mois-ci.
|
||||
Jours=jours
|
||||
nbJours=Nombre jours
|
||||
TitleAdminCP=Configuration des Congés
|
||||
|
||||
#Messages
|
||||
Hello=Bonjour
|
||||
HolidaysToValidate=Congés payés à valider
|
||||
HolidaysToValidateBody=Veuillez trouver ci-dessous une demande de congés payés à valider.
|
||||
HolidaysToValidateDelay=Cette demande de congés payés à été effectué dans un délai de moins de %s jours avant ceux-ci.
|
||||
HolidaysToValidateAlertSolde=L'utilisateur ayant fait cette demande de congés payés n'a pas le solde requis.
|
||||
HolidaysValidated=Congés payés validée
|
||||
HolidaysValidatedBody=Votre demande de congés payés du %s au %s vient d'être validée!
|
||||
HolidaysRefused=Congés payés refusée
|
||||
HolidaysRefusedBody=Votre demande de congés payés %s à %s vient d'être refusée pour le motif suivant :
|
||||
HolidaysCanceled=Congés payés annulée
|
||||
HolidaysCanceledBody=Votre demande de congés %s à %s va été annulée.
|
||||
|
||||
Permission20001=Lire / Créer / modifier ses congès
|
||||
Permission20002=Lire / Modifier toutes les demandes de congés payés
|
||||
Permission20003=Supprimer des demandes de congés payés
|
||||
|
||||
@ -157,7 +157,7 @@ else
|
||||
$form = new Form($db);
|
||||
if (empty($mode) || $mode == 1)
|
||||
{
|
||||
$arrayresult=$form->select_produits_do("",$htmlname,$type,"",$pricelevel,$searchkey,$status,2,$outjson);
|
||||
$arrayresult=$form->select_produits_do("",$htmlname,$type,"",$price_level,$searchkey,$status,2,$outjson);
|
||||
}
|
||||
elseif ($mode == 2)
|
||||
{
|
||||
|
||||
@ -431,7 +431,7 @@ class Product extends CommonObject
|
||||
$this->ref = dol_string_nospecial(trim($this->ref));
|
||||
$this->libelle = trim($this->libelle);
|
||||
$this->description = trim($this->description);
|
||||
$this->note = trim($this->note);
|
||||
$this->note = (isset($this->note)? trim($this->note):"null");
|
||||
$this->weight = price2num($this->weight);
|
||||
$this->weight_units = trim($this->weight_units);
|
||||
$this->length = price2num($this->length);
|
||||
|
||||
@ -35,6 +35,7 @@ class Project extends CommonObject
|
||||
public $table_element = 'projet'; //!< Name of table without prefix where object is stored
|
||||
public $table_element_line = 'projet_task';
|
||||
public $fk_element = 'fk_projet';
|
||||
protected $ismultientitymanaged = 1; // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
|
||||
|
||||
var $id;
|
||||
var $ref;
|
||||
@ -51,6 +52,7 @@ class Project extends CommonObject
|
||||
var $statuts_short;
|
||||
var $statuts;
|
||||
var $oldcopy;
|
||||
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
|
||||
@ -223,6 +223,7 @@ foreach ($listofreferent as $key => $value)
|
||||
$date=$element->date;
|
||||
if (empty($date)) $date=$element->datep;
|
||||
if (empty($date)) $date=$element->date_contrat;
|
||||
if (empty($date)) $date=$element->datev; //Fiche inter
|
||||
print '<td align="center">'.dol_print_date($date,'day').'</td>';
|
||||
|
||||
// Third party
|
||||
|
||||
@ -43,12 +43,6 @@ if ($id == '' && $ref == '' && ($action != "create" && $action != "add" && $acti
|
||||
$mine = GETPOST('mode')=='mine' ? 1 : 0;
|
||||
//if (! $user->rights->projet->all->lire) $mine=1; // Special for projects
|
||||
|
||||
|
||||
// Security check
|
||||
$socid=0;
|
||||
if ($user->societe_id > 0) $socid=$user->societe_id;
|
||||
$result = restrictedArea($user, 'projet', $id);
|
||||
|
||||
// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php';
|
||||
$hookmanager=new HookManager($db);
|
||||
@ -61,6 +55,11 @@ if ($object->id > 0)
|
||||
$object->fetch_thirdparty();
|
||||
}
|
||||
|
||||
// Security check
|
||||
$socid=0;
|
||||
if ($user->societe_id > 0) $socid=$user->societe_id;
|
||||
$result = restrictedArea($user, 'projet', $object->id);
|
||||
|
||||
$date_start=dol_mktime(0,0,0,GETPOST('projectmonth','int'),GETPOST('projectday','int'),GETPOST('projectyear','int'));
|
||||
$date_end=dol_mktime(0,0,0,GETPOST('projectendmonth','int'),GETPOST('projectendday','int'),GETPOST('projectendyear','int'));;
|
||||
|
||||
@ -720,10 +719,13 @@ else
|
||||
|
||||
print '</td><td valign="top" width="50%">';
|
||||
|
||||
// List of actions on element
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
|
||||
$formactions=new FormActions($db);
|
||||
$somethingshown=$formactions->showactions($object,'project',$socid);
|
||||
if (!empty($object->id))
|
||||
{
|
||||
// List of actions on element
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
|
||||
$formactions=new FormActions($db);
|
||||
$somethingshown=$formactions->showactions($object,'project',$socid);
|
||||
}
|
||||
|
||||
print '</td></tr></table>';
|
||||
}
|
||||
|
||||
@ -326,7 +326,7 @@ class FilesLibTest extends PHPUnit_Framework_TestCase
|
||||
// Again to test with overwriting=1
|
||||
$result=dol_copy($file, $conf->admin->dir_temp.'/file.csv',0,1);
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertGreaterThanOrEqual(1,$result); // Should be 1
|
||||
$this->assertGreaterThanOrEqual(1,$result,'copy destination already exists, overwrite'); // Should be 1
|
||||
|
||||
// Again to test with overwriting=1
|
||||
$result=dol_move($conf->admin->dir_temp.'/file.csv',$conf->admin->dir_temp.'/file2.csv',0,1);
|
||||
@ -340,7 +340,17 @@ class FilesLibTest extends PHPUnit_Framework_TestCase
|
||||
// Again to test no erreor when deleteing a non existing file
|
||||
$result=dol_delete_file($conf->admin->dir_temp.'/file2.csv');
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertTrue($result);
|
||||
$this->assertTrue($result,'delete file that does not exists');
|
||||
|
||||
// Test copy with special char / delete with blob
|
||||
$result=dol_copy($file, $conf->admin->dir_temp.'/file with [x] and é.csv',0,1);
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertGreaterThanOrEqual(1,$result,'copy file with special char, overwrite'); // Should be 1
|
||||
|
||||
// Try to delete using a glob criteria
|
||||
$result=dol_delete_file($conf->admin->dir_temp.'/file with [x]*é.csv');
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertTrue($result,'delete file using glob criteria');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -377,4 +387,4 @@ class FilesLibTest extends PHPUnit_Framework_TestCase
|
||||
$this->assertEquals(0,count($result));
|
||||
}
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user