Merge remote-tracking branch 'upstream/develop' into zapier
This commit is contained in:
commit
850b9fd52a
@ -127,6 +127,15 @@ print '</td>';
|
|||||||
print '<td></td>';
|
print '<td></td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|
||||||
|
|
||||||
|
print '<tr class="oddeven">';
|
||||||
|
print '<td>'.$langs->trans('EnableResourceUsedInEventCheck').'</td>';
|
||||||
|
print '<td>';
|
||||||
|
echo ajax_constantonoff('RESOURCE_USED_IN_EVENT_CHECK');
|
||||||
|
print '</td>';
|
||||||
|
print '<td></td>';
|
||||||
|
print '</tr>';
|
||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
|
|||||||
@ -512,6 +512,65 @@ if ($action == 'update')
|
|||||||
$ret = $extrafields->setOptionalsFromPost($extralabels, $object);
|
$ret = $extrafields->setOptionalsFromPost($extralabels, $object);
|
||||||
if ($ret < 0) $error++;
|
if ($ret < 0) $error++;
|
||||||
|
|
||||||
|
if (!$error) {
|
||||||
|
// check if an event resource is already in use
|
||||||
|
if (!empty($conf->global->RESOURCE_USED_IN_EVENT_CHECK) && $object->element == 'action') {
|
||||||
|
$eventDateStart = $object->datep;
|
||||||
|
$eventDateEnd = $object->datef;
|
||||||
|
|
||||||
|
$sql = "SELECT er.rowid, r.ref as r_ref, ac.id as ac_id, ac.label as ac_label";
|
||||||
|
$sql .= " FROM " . MAIN_DB_PREFIX . "element_resources as er";
|
||||||
|
$sql .= " INNER JOIN " . MAIN_DB_PREFIX . "resource as r ON r.rowid = er.resource_id AND er.resource_type = 'dolresource'";
|
||||||
|
$sql .= " INNER JOIN " . MAIN_DB_PREFIX . "actioncomm as ac ON ac.id = er.element_id AND er.element_type = '" . $db->escape($object->element) . "'";
|
||||||
|
$sql .= " WHERE ac.id != " . $object->id;
|
||||||
|
$sql .= " AND er.resource_id IN (";
|
||||||
|
$sql .= " SELECT resource_id FROM " . MAIN_DB_PREFIX . "element_resources";
|
||||||
|
$sql .= " WHERE element_id = " . $object->id;
|
||||||
|
$sql .= " AND element_type = '" . $db->escape($object->element) . "'";
|
||||||
|
$sql .= " AND busy = 1";
|
||||||
|
$sql .= ")";
|
||||||
|
$sql .= " AND er.busy = 1";
|
||||||
|
$sql .= " AND (";
|
||||||
|
|
||||||
|
// event date start between ac.datep and ac.datep2 (if datep2 is null we consider there is no end)
|
||||||
|
$sql .= " (ac.datep <= '" . $db->idate($eventDateStart) . "' AND (ac.datep2 IS NULL OR ac.datep2 >= '" . $db->idate($eventDateStart) . "'))";
|
||||||
|
// event date end between ac.datep and ac.datep2
|
||||||
|
if (!empty($eventDateEnd)) {
|
||||||
|
$sql .= " OR (ac.datep <= '" . $db->idate($eventDateEnd) . "' AND (ac.datep2 >= '" . $db->idate($eventDateEnd) . "'))";
|
||||||
|
}
|
||||||
|
// event date start before ac.datep and event date end after ac.datep2
|
||||||
|
$sql .= " OR (";
|
||||||
|
$sql .= "ac.datep >= '" . $db->idate($eventDateStart) . "'";
|
||||||
|
if (!empty($eventDateEnd)) {
|
||||||
|
$sql .= " AND (ac.datep2 IS NOT NULL AND ac.datep2 <= '" . $db->idate($eventDateEnd) . "')";
|
||||||
|
}
|
||||||
|
$sql .= ")";
|
||||||
|
|
||||||
|
$sql .= ")";
|
||||||
|
$resql = $db->query($sql);
|
||||||
|
if (!$resql) {
|
||||||
|
$error++;
|
||||||
|
$object->error = $db->lasterror();
|
||||||
|
$object->errors[] = $object->error;
|
||||||
|
} else {
|
||||||
|
if ($db->num_rows($resql) > 0) {
|
||||||
|
// already in use
|
||||||
|
$error++;
|
||||||
|
$object->error = $langs->trans('ErrorResourcesAlreadyInUse') . ' : ';
|
||||||
|
while ($obj = $db->fetch_object($resql)) {
|
||||||
|
$object->error .= '<br> - ' . $langs->trans('ErrorResourceUseInEvent', $obj->r_ref, $obj->ac_label . ' [' . $obj->ac_id . ']');
|
||||||
|
}
|
||||||
|
$object->errors[] = $object->error;
|
||||||
|
}
|
||||||
|
$db->free($resql);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($error) {
|
||||||
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (! $error)
|
if (! $error)
|
||||||
{
|
{
|
||||||
$db->begin();
|
$db->begin();
|
||||||
|
|||||||
@ -607,9 +607,7 @@ if ($resql)
|
|||||||
$event->fk_element=$obj->fk_element;
|
$event->fk_element=$obj->fk_element;
|
||||||
$event->elementtype=$obj->elementtype;
|
$event->elementtype=$obj->elementtype;
|
||||||
|
|
||||||
$event->societe->id=$obj->fk_soc;
|
|
||||||
$event->thirdparty_id=$obj->fk_soc;
|
$event->thirdparty_id=$obj->fk_soc;
|
||||||
$event->contact->id=$obj->fk_contact;
|
|
||||||
$event->contact_id=$obj->fk_contact;
|
$event->contact_id=$obj->fk_contact;
|
||||||
|
|
||||||
// Defined date_start_in_calendar and date_end_in_calendar property
|
// Defined date_start_in_calendar and date_end_in_calendar property
|
||||||
@ -1569,28 +1567,31 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa
|
|||||||
|
|
||||||
if ($event->type_code == 'ICALEVENT') print '<br>('.dol_trunc($event->icalname, $maxnbofchar).')';
|
if ($event->type_code == 'ICALEVENT') print '<br>('.dol_trunc($event->icalname, $maxnbofchar).')';
|
||||||
|
|
||||||
|
$thirdparty_id = ($event->thirdparty_id > 0 ? $event->thirdparty_id : ((is_object($event->societe) && $event->societe->id > 0) ? $event->societe->id : 0));
|
||||||
|
$contact_id = ($event->contact_id > 0 ? $event->contact_id : ((is_object($event->contact) && $event->cotact->id > 0) ? $event->contact->id : 0));
|
||||||
|
|
||||||
// If action related to company / contact
|
// If action related to company / contact
|
||||||
$linerelatedto='';
|
$linerelatedto='';
|
||||||
if (! empty($event->societe->id) && $event->societe->id > 0)
|
if ($thirdparty_id > 0)
|
||||||
{
|
{
|
||||||
if (! isset($cachethirdparties[$event->societe->id]) || ! is_object($cachethirdparties[$event->societe->id]))
|
if (! isset($cachethirdparties[$thirdparty_id]) || ! is_object($cachethirdparties[$thirdparty_id]))
|
||||||
{
|
{
|
||||||
$thirdparty=new Societe($db);
|
$thirdparty=new Societe($db);
|
||||||
$thirdparty->fetch($event->societe->id);
|
$thirdparty->fetch($thirdparty_id);
|
||||||
$cachethirdparties[$event->societe->id]=$thirdparty;
|
$cachethirdparties[$thirdparty_id]=$thirdparty;
|
||||||
}
|
}
|
||||||
else $thirdparty=$cachethirdparties[$event->societe->id];
|
else $thirdparty=$cachethirdparties[$thirdparty_id];
|
||||||
if (! empty($thirdparty->id)) $linerelatedto.=$thirdparty->getNomUrl(1, '', 0);
|
if (! empty($thirdparty->id)) $linerelatedto.=$thirdparty->getNomUrl(1, '', 0);
|
||||||
}
|
}
|
||||||
if (! empty($event->contact->id) && $event->contact->id > 0)
|
if (! empty($contact_id) && $contact_id > 0)
|
||||||
{
|
{
|
||||||
if (! is_object($cachecontacts[$event->contact->id]))
|
if (! is_object($cachecontacts[$contact_id]))
|
||||||
{
|
{
|
||||||
$contact=new Contact($db);
|
$contact=new Contact($db);
|
||||||
$contact->fetch($event->contact->id);
|
$contact->fetch($contact_id);
|
||||||
$cachecontacts[$event->contact->id]=$contact;
|
$cachecontacts[$contact_id]=$contact;
|
||||||
}
|
}
|
||||||
else $contact=$cachecontacts[$event->contact->id];
|
else $contact=$cachecontacts[$contact_id];
|
||||||
if ($linerelatedto) $linerelatedto.=' ';
|
if ($linerelatedto) $linerelatedto.=' ';
|
||||||
if (! empty($contact->id)) $linerelatedto.=$contact->getNomUrl(1, '', 0);
|
if (! empty($contact->id)) $linerelatedto.=$contact->getNomUrl(1, '', 0);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1376,7 +1376,7 @@ if ($resql)
|
|||||||
// Debit
|
// Debit
|
||||||
if (! empty($arrayfields['b.debit']['checked']))
|
if (! empty($arrayfields['b.debit']['checked']))
|
||||||
{
|
{
|
||||||
print '<td class="right">';
|
print '<td class="nowrap right">';
|
||||||
if ($objp->amount < 0)
|
if ($objp->amount < 0)
|
||||||
{
|
{
|
||||||
print price($objp->amount * -1);
|
print price($objp->amount * -1);
|
||||||
@ -1390,7 +1390,7 @@ if ($resql)
|
|||||||
// Credit
|
// Credit
|
||||||
if (! empty($arrayfields['b.credit']['checked']))
|
if (! empty($arrayfields['b.credit']['checked']))
|
||||||
{
|
{
|
||||||
print '<td class="right">';
|
print '<td class="nowrap right">';
|
||||||
if ($objp->amount > 0)
|
if ($objp->amount > 0)
|
||||||
{
|
{
|
||||||
print price($objp->amount);
|
print price($objp->amount);
|
||||||
|
|||||||
@ -7624,18 +7624,20 @@ abstract class CommonObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Delete cascade first
|
// Delete cascade first
|
||||||
foreach($this->childtablesoncascade as $table)
|
if (! empty($this->childtablesoncascade)) {
|
||||||
{
|
foreach($this->childtablesoncascade as $table)
|
||||||
$sql = 'DELETE FROM '.MAIN_DB_PREFIX.$table.' WHERE '.$this->fk_element.' = '.$this->id;
|
{
|
||||||
$resql = $this->db->query($sql);
|
$sql = 'DELETE FROM '.MAIN_DB_PREFIX.$table.' WHERE '.$this->fk_element.' = '.$this->id;
|
||||||
if (! $resql)
|
$resql = $this->db->query($sql);
|
||||||
{
|
if (! $resql)
|
||||||
$this->error=$this->db->lasterror();
|
{
|
||||||
$this->errors[]=$this->error;
|
$this->error=$this->db->lasterror();
|
||||||
$this->db->rollback();
|
$this->errors[]=$this->error;
|
||||||
return -1;
|
$this->db->rollback();
|
||||||
}
|
return -1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (! $error) {
|
if (! $error) {
|
||||||
if (! $notrigger) {
|
if (! $notrigger) {
|
||||||
@ -7809,4 +7811,35 @@ abstract class CommonObject
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* copy related categories to another object
|
||||||
|
*
|
||||||
|
* @param int $fromId Id object source
|
||||||
|
* @param int $toId Id object cible
|
||||||
|
* @param string $type Type of category ('product', ...)
|
||||||
|
* @return int < 0 si erreur, > 0 si ok
|
||||||
|
*/
|
||||||
|
public function cloneCategories($fromId, $toId, $type = '')
|
||||||
|
{
|
||||||
|
$this->db->begin();
|
||||||
|
|
||||||
|
if (empty($type)) $type = $this->table_element;
|
||||||
|
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
|
||||||
|
$categorystatic = new Categorie($this->db);
|
||||||
|
|
||||||
|
$sql = "INSERT INTO ".MAIN_DB_PREFIX."categorie_" . $categorystatic->MAP_CAT_TABLE[$type] . " (fk_categorie, fk_product)";
|
||||||
|
$sql.= " SELECT fk_categorie, $toId FROM ".MAIN_DB_PREFIX."categorie_" . $categorystatic->MAP_CAT_TABLE[$type];
|
||||||
|
$sql.= " WHERE fk_product = '".$fromId."'";
|
||||||
|
|
||||||
|
if (! $this->db->query($sql))
|
||||||
|
{
|
||||||
|
$this->db->rollback();die($sql);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->db->commit();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7265,7 +7265,7 @@ function printCommonFooter($zone = 'private')
|
|||||||
{
|
{
|
||||||
print "\n";
|
print "\n";
|
||||||
print '/* JS CODE TO ENABLE to manage handler to switch left menu page (menuhider) */'."\n";
|
print '/* JS CODE TO ENABLE to manage handler to switch left menu page (menuhider) */'."\n";
|
||||||
print 'jQuery(".menuhider").click(function(event) {';
|
print 'jQuery("li.menuhider").click(function(event) {';
|
||||||
print ' if (!$( "body" ).hasClass( "sidebar-collapse" )){ event.preventDefault(); }'."\n";
|
print ' if (!$( "body" ).hasClass( "sidebar-collapse" )){ event.preventDefault(); }'."\n";
|
||||||
print ' console.log("We click on .menuhider");'."\n";
|
print ' console.log("We click on .menuhider");'."\n";
|
||||||
print ' $("body").toggleClass("sidebar-collapse")'."\n";
|
print ' $("body").toggleClass("sidebar-collapse")'."\n";
|
||||||
|
|||||||
@ -55,22 +55,23 @@ function print_eldy_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout =
|
|||||||
|
|
||||||
$usemenuhider = 1;
|
$usemenuhider = 1;
|
||||||
|
|
||||||
// Show/Hide vertical menu
|
// Show/Hide vertical menu. The hamburger icon for .menuhider action.
|
||||||
if ($mode != 'jmobile' && $mode != 'topnb' && $usemenuhider && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))
|
if ($mode != 'jmobile' && $mode != 'topnb' && $usemenuhider && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))
|
||||||
{
|
{
|
||||||
$showmode=1;
|
$showmode=1;
|
||||||
$classname = 'class="tmenu menuhider"';
|
$classname = 'class="tmenu menuhider"';
|
||||||
$idsel='menu';
|
$idsel='menu';
|
||||||
|
|
||||||
$menu->add('#', '', 0, $showmode, $atarget, "xxx", '', 0, $id, $idsel, $classname);
|
$menu->add('#', (! empty($conf->global->THEME_TOPMENU_DISABLE_IMAGE) ? '<span class="fa fa-bars"></span>' : ''), 0, $showmode, $atarget, "xxx", '', 0, $id, $idsel, $classname);
|
||||||
}
|
}
|
||||||
|
|
||||||
$menu_arr = array();
|
$menu_arr = array();
|
||||||
|
|
||||||
// Home
|
// Home
|
||||||
$menu_arr[] = array(
|
$menu_arr[] = array(
|
||||||
'name' => 'Home',
|
'name' => 'Home',
|
||||||
'link' => '/index.php?mainmenu=home&leftmenu=home',
|
'link' => '/index.php?mainmenu=home&leftmenu=home',
|
||||||
'title' => (! empty($conf->global->THEME_TOPMENU_DISABLE_IMAGE)? ' <span class="fa fa-home"></span> ' : "Home") ,
|
'title' => (! empty($conf->global->THEME_TOPMENU_DISABLE_IMAGE) ? '<span class="fa fa-home"></span>' : "Home") ,
|
||||||
'level' => 0,
|
'level' => 0,
|
||||||
'enabled' => $showmode = 1,
|
'enabled' => $showmode = 1,
|
||||||
'target' => $atarget,
|
'target' => $atarget,
|
||||||
@ -473,8 +474,35 @@ function print_eldy_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout =
|
|||||||
$menu->liste = dol_sort_array($menu->liste, 'position');
|
$menu->liste = dol_sort_array($menu->liste, 'position');
|
||||||
|
|
||||||
// Output menu entries
|
// Output menu entries
|
||||||
|
// Show logo company
|
||||||
|
if (empty($conf->global->MAIN_MENU_INVERT) && empty($noout) && ! empty($conf->global->MAIN_SHOW_LOGO) && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))
|
||||||
|
{
|
||||||
|
$mysoc->logo_mini=$conf->global->MAIN_INFO_SOCIETE_LOGO_MINI;
|
||||||
|
$mysoc->logo_squarred_mini=$conf->global->MAIN_INFO_SOCIETE_LOGO_SQUARRED_MINI;
|
||||||
|
if (! empty($mysoc->logo_squarred_mini) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_squarred_mini))
|
||||||
|
{
|
||||||
|
$urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode('logos/thumbs/'.$mysoc->logo_squarred_mini);
|
||||||
|
}
|
||||||
|
elseif (! empty($mysoc->logo_mini) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_mini))
|
||||||
|
{
|
||||||
|
$urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode('logos/thumbs/'.$mysoc->logo_mini);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$urllogo=DOL_URL_ROOT.'/theme/dolibarr_logo_squarred.png';
|
||||||
|
}
|
||||||
|
$title=$langs->trans("GoIntoSetupToChangeLogo");
|
||||||
|
|
||||||
|
print "\n".'<!-- Show logo on menu -->'."\n";
|
||||||
|
print_start_menu_entry('companylogo', 'class="tmenu tmenucompanylogo"', 1);
|
||||||
|
|
||||||
|
print '<div class="center backgroundforcompanylogo"><img class="mycompany" title="'.dol_escape_htmltag($title).'" alt="" src="'.$urllogo.'" style="max-width: 100px"></div>'."\n";
|
||||||
|
|
||||||
|
print_end_menu_entry(4);
|
||||||
|
}
|
||||||
|
|
||||||
if (empty($noout)) {
|
if (empty($noout)) {
|
||||||
foreach($menu->liste as $menkey => $menuval) {
|
foreach($menu->liste as $menuval) {
|
||||||
print_start_menu_entry($menuval['idsel'], $menuval['classname'], $menuval['enabled']);
|
print_start_menu_entry($menuval['idsel'], $menuval['classname'], $menuval['enabled']);
|
||||||
print_text_menu_entry($menuval['titre'], $menuval['enabled'], (($menuval['url']!='#' && !preg_match('/^(http:\/\/|https:\/\/)/i', $menuval['url'])) ? DOL_URL_ROOT:'').$menuval['url'], $menuval['id'], $menuval['idsel'], $menuval['classname'], ($menuval['target']?$menuval['target']:$atarget));
|
print_text_menu_entry($menuval['titre'], $menuval['enabled'], (($menuval['url']!='#' && !preg_match('/^(http:\/\/|https:\/\/)/i', $menuval['url'])) ? DOL_URL_ROOT:'').$menuval['url'], $menuval['id'], $menuval['idsel'], $menuval['classname'], ($menuval['target']?$menuval['target']:$atarget));
|
||||||
print_end_menu_entry($menuval['enabled']);
|
print_end_menu_entry($menuval['enabled']);
|
||||||
@ -615,30 +643,6 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM
|
|||||||
|
|
||||||
$usemenuhider = 0;
|
$usemenuhider = 0;
|
||||||
|
|
||||||
// Show logo company
|
|
||||||
if (empty($conf->global->MAIN_MENU_INVERT) && empty($noout) && ! empty($conf->global->MAIN_SHOW_LOGO) && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))
|
|
||||||
{
|
|
||||||
$mysoc->logo_mini=$conf->global->MAIN_INFO_SOCIETE_LOGO_MINI;
|
|
||||||
if (! empty($mysoc->logo_mini) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_mini))
|
|
||||||
{
|
|
||||||
$urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode('logos/thumbs/'.$mysoc->logo_mini);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$urllogo=DOL_URL_ROOT.'/theme/dolibarr_logo.png';
|
|
||||||
}
|
|
||||||
$title=$langs->trans("GoIntoSetupToChangeLogo");
|
|
||||||
print "\n".'<!-- Show logo on menu -->'."\n";
|
|
||||||
print '<div class="blockvmenuimpair blockvmenulogo">'."\n";
|
|
||||||
print '<div class="menu_titre" id="menu_titre_logo"></div>';
|
|
||||||
print '<div class="menu_top" id="menu_top_logo"></div>';
|
|
||||||
print '<div class="menu_contenu" id="menu_contenu_logo">';
|
|
||||||
print '<div class="center"><img class="mycompany" title="'.dol_escape_htmltag($title).'" alt="" src="'.$urllogo.'" style="max-width: 70%"></div>'."\n";
|
|
||||||
print '</div>';
|
|
||||||
print '<div class="menu_end" id="menu_end_logo"></div>';
|
|
||||||
print '</div>'."\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_array($moredata) && ! empty($moredata['searchform'])) // searchform can contains select2 code or link to show old search form or link to switch on search page
|
if (is_array($moredata) && ! empty($moredata['searchform'])) // searchform can contains select2 code or link to show old search form or link to switch on search page
|
||||||
{
|
{
|
||||||
print "\n";
|
print "\n";
|
||||||
|
|||||||
@ -316,17 +316,21 @@ class modStock extends DolibarrModules
|
|||||||
$this->import_fields_array[$r]=array('e.ref'=>"LocationSummary*",
|
$this->import_fields_array[$r]=array('e.ref'=>"LocationSummary*",
|
||||||
'e.description'=>"DescWareHouse",'e.lieu'=>"LieuWareHouse",
|
'e.description'=>"DescWareHouse",'e.lieu'=>"LieuWareHouse",
|
||||||
'e.address'=>"Address",'e.zip'=>'Zip','e.fk_pays'=>'CountryCode',
|
'e.address'=>"Address",'e.zip'=>'Zip','e.fk_pays'=>'CountryCode',
|
||||||
'e.statut'=>'Status'
|
'e.statut'=>'Status',
|
||||||
|
'e.fk_parent'=>'ParentWarehouse'
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->import_convertvalue_array[$r]=array(
|
$this->import_convertvalue_array[$r]=array(
|
||||||
'e.fk_pays'=>array('rule'=>'fetchidfromcodeid','classfile'=>'/core/class/ccountry.class.php','class'=>'Ccountry','method'=>'fetch','dict'=>'DictionaryCountry')
|
'e.fk_pays'=>array('rule'=>'fetchidfromcodeid','classfile'=>'/core/class/ccountry.class.php','class'=>'Ccountry','method'=>'fetch','dict'=>'DictionaryCountry'),
|
||||||
|
'e.fk_parent'=>array('rule'=>'fetchidfromref','classfile'=>'/product/stock/class/entrepot.class.php','class'=>'Entrepot','method'=>'fetch','element'=>'ref')
|
||||||
);
|
);
|
||||||
$this->import_regex_array[$r]=array('e.statut'=>'^[0|1]');
|
$this->import_regex_array[$r]=array('e.statut'=>'^[0|1]');
|
||||||
$this->import_examplevalues_array[$r]=array('e.ref'=>"ALM001",
|
$this->import_examplevalues_array[$r]=array('e.ref'=>"ALM001",
|
||||||
'e.description'=>"Central Warehouse",'e.lieu'=>"Central",
|
'e.description'=>"Central Warehouse",'e.lieu'=>"Central",
|
||||||
'e.address'=>"Route 66",'e.zip'=>'28080','e.fk_pays'=>'US',
|
'e.address'=>"Route 66",'e.zip'=>'28080','e.fk_pays'=>'US',
|
||||||
'e.statut'=>'1');
|
'e.statut'=>'1',
|
||||||
|
'e.fk_parent'=>''
|
||||||
|
);
|
||||||
|
|
||||||
// Import stocks
|
// Import stocks
|
||||||
$r++;
|
$r++;
|
||||||
|
|||||||
@ -70,7 +70,7 @@ INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, m
|
|||||||
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-KONEGIE', 0, 41, '', 0, 6, 1, 1);
|
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-KONEGIE', 0, 41, '', 0, 6, 1, 1);
|
||||||
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-26OKT', 0, 41, '', 0, 10, 26, 1);
|
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-26OKT', 0, 41, '', 0, 10, 26, 1);
|
||||||
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-TOUSSAINT', 0, 41, '', 0, 11, 1, 1);
|
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-TOUSSAINT', 0, 41, '', 0, 11, 1, 1);
|
||||||
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-IMMACULE', 0, 41, '', 0, 12 8, 1);
|
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-IMMACULE', 0, 41, '', 0, 12, 8, 1);
|
||||||
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-24DEC', 0, 41, '', 0, 12, 24, 1);
|
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-24DEC', 0, 41, '', 0, 12, 24, 1);
|
||||||
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-SAINTSTEFAN', 0, 41, '', 0, 12, 26, 1);
|
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-SAINTSTEFAN', 0, 41, '', 0, 12, 26, 1);
|
||||||
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-Silvester', 0, 41, '', 0, 12, 31, 1);
|
INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-Silvester', 0, 41, '', 0, 12, 31, 1);
|
||||||
|
|||||||
@ -1907,6 +1907,7 @@ ResourceSetup=Configuration of Resource module
|
|||||||
UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
|
UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
|
||||||
DisabledResourceLinkUser=Disable feature to link a resource to users
|
DisabledResourceLinkUser=Disable feature to link a resource to users
|
||||||
DisabledResourceLinkContact=Disable feature to link a resource to contacts
|
DisabledResourceLinkContact=Disable feature to link a resource to contacts
|
||||||
|
EnableResourceUsedInEventCheck=Enable feature to check if a resource is in use in an event
|
||||||
ConfirmUnactivation=Confirm module reset
|
ConfirmUnactivation=Confirm module reset
|
||||||
OnMobileOnly=On small screen (smartphone) only
|
OnMobileOnly=On small screen (smartphone) only
|
||||||
DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
|
DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
|
||||||
|
|||||||
@ -153,6 +153,7 @@ RowMaterial=Raw Material
|
|||||||
ConfirmCloneProduct=Are you sure you want to clone product or service <b>%s</b>?
|
ConfirmCloneProduct=Are you sure you want to clone product or service <b>%s</b>?
|
||||||
CloneContentProduct=Clone all main information of product/service
|
CloneContentProduct=Clone all main information of product/service
|
||||||
ClonePricesProduct=Clone prices
|
ClonePricesProduct=Clone prices
|
||||||
|
CloneCategoriesProduct=Clone tags/categories linked
|
||||||
CloneCompositionProduct=Clone virtual product/service
|
CloneCompositionProduct=Clone virtual product/service
|
||||||
CloneCombinationsProduct=Clone product variants
|
CloneCombinationsProduct=Clone product variants
|
||||||
ProductIsUsed=This product is used
|
ProductIsUsed=This product is used
|
||||||
|
|||||||
@ -34,3 +34,6 @@ IdResource=Id resource
|
|||||||
AssetNumber=Serial number
|
AssetNumber=Serial number
|
||||||
ResourceTypeCode=Resource type code
|
ResourceTypeCode=Resource type code
|
||||||
ImportDataset_resource_1=Resources
|
ImportDataset_resource_1=Resources
|
||||||
|
|
||||||
|
ErrorResourcesAlreadyInUse=Some resources are in use
|
||||||
|
ErrorResourceUseInEvent=%s use in %s event
|
||||||
@ -1907,6 +1907,7 @@ ResourceSetup=Configuration du module Ressource
|
|||||||
UseSearchToSelectResource=Utilisez un champ avec auto-complétion pour choisir les ressources (plutôt qu'une liste déroulante).
|
UseSearchToSelectResource=Utilisez un champ avec auto-complétion pour choisir les ressources (plutôt qu'une liste déroulante).
|
||||||
DisabledResourceLinkUser=Désactiver la fonctionnalité pour lier une ressource aux utilisateurs
|
DisabledResourceLinkUser=Désactiver la fonctionnalité pour lier une ressource aux utilisateurs
|
||||||
DisabledResourceLinkContact=Désactiver la fonctionnalité pour lier une ressource aux contacts/adresses
|
DisabledResourceLinkContact=Désactiver la fonctionnalité pour lier une ressource aux contacts/adresses
|
||||||
|
EnableResourceUsedInEventCheck=Activer la fonctionnalité de vérification d'une ressource déjà réservée lors d'un évènement
|
||||||
ConfirmUnactivation=Confirmer réinitialisation du module
|
ConfirmUnactivation=Confirmer réinitialisation du module
|
||||||
OnMobileOnly=Sur petit écran (smartphone) uniquement
|
OnMobileOnly=Sur petit écran (smartphone) uniquement
|
||||||
DisableProspectCustomerType=Désactiver le type de tiers "Prospect + Client" (le tiers doit donc être un client potentiel ou un client, mais ne peut pas être les deux)
|
DisableProspectCustomerType=Désactiver le type de tiers "Prospect + Client" (le tiers doit donc être un client potentiel ou un client, mais ne peut pas être les deux)
|
||||||
|
|||||||
@ -153,6 +153,8 @@ RowMaterial=Matière première
|
|||||||
ConfirmCloneProduct=Êtes-vous sûr de vouloir cloner le produit ou service <b>%s</b> ?
|
ConfirmCloneProduct=Êtes-vous sûr de vouloir cloner le produit ou service <b>%s</b> ?
|
||||||
CloneContentProduct=Cloner les informations générales du produit/service
|
CloneContentProduct=Cloner les informations générales du produit/service
|
||||||
ClonePricesProduct=Cloner les prix
|
ClonePricesProduct=Cloner les prix
|
||||||
|
CloneCategoriesProduct=Cloner les catégories associées
|
||||||
|
CloneCompositionProduct=Cloner le produits packagés
|
||||||
CloneCompositionProduct=Cloner les produits virtuels
|
CloneCompositionProduct=Cloner les produits virtuels
|
||||||
CloneCombinationsProduct=Cloner les variantes
|
CloneCombinationsProduct=Cloner les variantes
|
||||||
ProductIsUsed=Ce produit est utilisé
|
ProductIsUsed=Ce produit est utilisé
|
||||||
|
|||||||
@ -34,3 +34,6 @@ IdResource=id ressource
|
|||||||
AssetNumber=Numéro de série
|
AssetNumber=Numéro de série
|
||||||
ResourceTypeCode=Code de type de ressource
|
ResourceTypeCode=Code de type de ressource
|
||||||
ImportDataset_resource_1=Ressources
|
ImportDataset_resource_1=Ressources
|
||||||
|
|
||||||
|
ErrorResourcesAlreadyInUse=Des ressources sont déjà occupées
|
||||||
|
ErrorResourceUseInEvent=%s occupée dans l'événement %s
|
||||||
@ -522,6 +522,19 @@ if (empty($reshook))
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (GETPOST('clone_categories'))
|
||||||
|
{
|
||||||
|
$result = $object->cloneCategories($originalId, $id);
|
||||||
|
|
||||||
|
if ($result < 1)
|
||||||
|
{
|
||||||
|
$db->rollback();
|
||||||
|
setEventMessage($langs->trans('ErrorProductClone'), null, 'errors');
|
||||||
|
header("Location: ".$_SERVER["PHP_SELF"]."?id=".$originalId);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// $object->clone_fournisseurs($originalId, $id);
|
// $object->clone_fournisseurs($originalId, $id);
|
||||||
|
|
||||||
$db->commit();
|
$db->commit();
|
||||||
@ -1951,6 +1964,7 @@ $formquestionclone=array(
|
|||||||
'text' => $langs->trans("ConfirmClone"),
|
'text' => $langs->trans("ConfirmClone"),
|
||||||
array('type' => 'text', 'name' => 'clone_ref','label' => $langs->trans("NewRefForClone"), 'value' => empty($tmpcode) ? $langs->trans("CopyOf").' '.$object->ref : $tmpcode, 'size'=>24),
|
array('type' => 'text', 'name' => 'clone_ref','label' => $langs->trans("NewRefForClone"), 'value' => empty($tmpcode) ? $langs->trans("CopyOf").' '.$object->ref : $tmpcode, 'size'=>24),
|
||||||
array('type' => 'checkbox', 'name' => 'clone_content','label' => $langs->trans("CloneContentProduct"), 'value' => 1),
|
array('type' => 'checkbox', 'name' => 'clone_content','label' => $langs->trans("CloneContentProduct"), 'value' => 1),
|
||||||
|
array('type' => 'checkbox', 'name' => 'clone_categories', 'label' => $langs->trans("CloneCategoriesProduct"), 'value' => 1),
|
||||||
array('type' => 'checkbox', 'name' => 'clone_prices', 'label' => $langs->trans("ClonePricesProduct").' ('.$langs->trans("FeatureNotYetAvailable").')', 'value' => 0, 'disabled' => true),
|
array('type' => 'checkbox', 'name' => 'clone_prices', 'label' => $langs->trans("ClonePricesProduct").' ('.$langs->trans("FeatureNotYetAvailable").')', 'value' => 0, 'disabled' => true),
|
||||||
);
|
);
|
||||||
if (! empty($conf->global->PRODUIT_SOUSPRODUITS))
|
if (! empty($conf->global->PRODUIT_SOUSPRODUITS))
|
||||||
|
|||||||
@ -467,6 +467,94 @@ class Products extends DolibarrApi
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List purchase prices
|
||||||
|
*
|
||||||
|
* Get a list of all purchase prices of products
|
||||||
|
*
|
||||||
|
* @param string $sortfield Sort field
|
||||||
|
* @param string $sortorder Sort order
|
||||||
|
* @param int $limit Limit for list
|
||||||
|
* @param int $page Page number
|
||||||
|
* @param int $mode Use this param to filter list (0 for all, 1 for only product, 2 for only service)
|
||||||
|
* @param int $category Use this param to filter list by category of product
|
||||||
|
* @param int $supplier Use this param to filter list by supplier
|
||||||
|
* @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.tobuy:=:0) and (t.tosell:=:1)"
|
||||||
|
* @return array Array of product objects
|
||||||
|
*
|
||||||
|
* @url GET purchase_prices
|
||||||
|
*/
|
||||||
|
public function getSupplierProducts($sortfield = "t.ref", $sortorder = 'ASC', $limit = 100, $page = 0, $mode = 0, $category = 0, $supplier = 0, $sqlfilters = '')
|
||||||
|
{
|
||||||
|
global $db, $conf;
|
||||||
|
$obj_ret = array();
|
||||||
|
$socid = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : '';
|
||||||
|
$sql = "SELECT t.rowid, t.ref, t.ref_ext";
|
||||||
|
$sql.= " FROM ".MAIN_DB_PREFIX."product as t";
|
||||||
|
if ($category > 0) {
|
||||||
|
$sql.= ", ".MAIN_DB_PREFIX."categorie_product as c";
|
||||||
|
}
|
||||||
|
$sql.= ", ".MAIN_DB_PREFIX."product_fournisseur_price as s";
|
||||||
|
|
||||||
|
$sql.= ' WHERE t.entity IN ('.getEntity('product').')';
|
||||||
|
|
||||||
|
if ($supplier > 0) {
|
||||||
|
$sql.= " AND s.fk_soc = ".$db->escape($supplier);
|
||||||
|
}
|
||||||
|
$sql.= " AND s.fk_product = t.rowid ";
|
||||||
|
// Select products of given category
|
||||||
|
if ($category > 0) {
|
||||||
|
$sql.= " AND c.fk_categorie = ".$db->escape($category);
|
||||||
|
$sql.= " AND c.fk_product = t.rowid ";
|
||||||
|
}
|
||||||
|
if ($mode == 1) {
|
||||||
|
// Show only products
|
||||||
|
$sql.= " AND t.fk_product_type = 0";
|
||||||
|
} elseif ($mode == 2) {
|
||||||
|
// Show only services
|
||||||
|
$sql.= " AND t.fk_product_type = 1";
|
||||||
|
}
|
||||||
|
// Add sql filters
|
||||||
|
if ($sqlfilters) {
|
||||||
|
if (! DolibarrApi::_checkFilters($sqlfilters)) {
|
||||||
|
throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters);
|
||||||
|
}
|
||||||
|
$regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)';
|
||||||
|
$sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")";
|
||||||
|
}
|
||||||
|
$sql.= $db->order($sortfield, $sortorder);
|
||||||
|
if ($limit) {
|
||||||
|
if ($page < 0) {
|
||||||
|
$page = 0;
|
||||||
|
}
|
||||||
|
$offset = $limit * $page;
|
||||||
|
$sql.= $db->plimit($limit + 1, $offset);
|
||||||
|
}
|
||||||
|
$result = $db->query($sql);
|
||||||
|
if ($result) {
|
||||||
|
$num = $db->num_rows($result);
|
||||||
|
$min = min($num, ($limit <= 0 ? $num : $limit));
|
||||||
|
$i = 0;
|
||||||
|
while ($i < $min)
|
||||||
|
{
|
||||||
|
$obj = $db->fetch_object($result);
|
||||||
|
$product_static = new Product($db);
|
||||||
|
if($product_static->fetch($obj->rowid)) {
|
||||||
|
$obj_ret[] = $this->_cleanObjectDatas($product_static);
|
||||||
|
}
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw new RestException(503, 'Error when retrieve product list : '.$db->lasterror());
|
||||||
|
}
|
||||||
|
if(! count($obj_ret)) {
|
||||||
|
throw new RestException(404, 'No product found');
|
||||||
|
}
|
||||||
|
return $obj_ret;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get purchase prices for a product
|
* Get purchase prices for a product
|
||||||
*
|
*
|
||||||
@ -515,7 +603,7 @@ class Products extends DolibarrApi
|
|||||||
if($result) {
|
if($result) {
|
||||||
$this->product = new ProductFournisseur($this->db);
|
$this->product = new ProductFournisseur($this->db);
|
||||||
$this->product->fetch($id, $ref);
|
$this->product->fetch($id, $ref);
|
||||||
$this->product->list_product_fournisseur_price($id, $sortfield, $sortorder, 0, 0);
|
$this->product->list_product_fournisseur_price($id, '', '', 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->_cleanObjectDatas($this->product);
|
return $this->_cleanObjectDatas($this->product);
|
||||||
|
|||||||
@ -87,6 +87,8 @@ if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'e
|
|||||||
|
|
||||||
if (empty($reshook))
|
if (empty($reshook))
|
||||||
{
|
{
|
||||||
|
$error = 0;
|
||||||
|
|
||||||
if ($action == 'add_element_resource' && ! $cancel)
|
if ($action == 'add_element_resource' && ! $cancel)
|
||||||
{
|
{
|
||||||
$res = 0;
|
$res = 0;
|
||||||
@ -100,8 +102,68 @@ if (empty($reshook))
|
|||||||
{
|
{
|
||||||
$objstat = fetchObjectByElement($element_id, $element, $element_ref);
|
$objstat = fetchObjectByElement($element_id, $element, $element_ref);
|
||||||
$objstat->element = $element; // For externals module, we need to keep @xx
|
$objstat->element = $element; // For externals module, we need to keep @xx
|
||||||
$res = $objstat->add_element_resource($resource_id, $resource_type, $busy, $mandatory);
|
|
||||||
|
// TODO : add this check at update_linked_resource and when modifying event start or end date
|
||||||
|
// check if an event resource is already in use
|
||||||
|
if (!empty($conf->global->RESOURCE_USED_IN_EVENT_CHECK) && $objstat->element=='action' && $resource_type=='dolresource' && intval($busy)==1) {
|
||||||
|
$eventDateStart = $objstat->datep;
|
||||||
|
$eventDateEnd = $objstat->datef;
|
||||||
|
$isFullDayEvent = intval($objstat->fulldayevent);
|
||||||
|
if (empty($eventDateEnd)) {
|
||||||
|
if ($isFullDayEvent) {
|
||||||
|
$eventDateStartArr = dol_getdate($eventDateStart);
|
||||||
|
$eventDateStart = dol_mktime(0, 0, 0, $eventDateStartArr['mon'], $eventDateStartArr['mday'], $eventDateStartArr['year']);
|
||||||
|
$eventDateEnd = dol_mktime(23, 59, 59, $eventDateStartArr['mon'], $eventDateStartArr['mday'], $eventDateStartArr['year']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = "SELECT er.rowid, r.ref as r_ref, ac.id as ac_id, ac.label as ac_label";
|
||||||
|
$sql .= " FROM " . MAIN_DB_PREFIX . "element_resources as er";
|
||||||
|
$sql .= " INNER JOIN " . MAIN_DB_PREFIX . "resource as r ON r.rowid = er.resource_id AND er.resource_type = '" . $db->escape($resource_type) . "'";
|
||||||
|
$sql .= " INNER JOIN " . MAIN_DB_PREFIX . "actioncomm as ac ON ac.id = er.element_id AND er.element_type = '" . $db->escape($objstat->element) . "'";
|
||||||
|
$sql .= " WHERE er.resource_id = " . $resource_id;
|
||||||
|
$sql .= " AND er.busy = 1";
|
||||||
|
$sql .= " AND (";
|
||||||
|
|
||||||
|
// event date start between ac.datep and ac.datep2 (if datep2 is null we consider there is no end)
|
||||||
|
$sql .= " (ac.datep <= '" . $db->idate($eventDateStart) . "' AND (ac.datep2 IS NULL OR ac.datep2 >= '" . $db->idate($eventDateStart) . "'))";
|
||||||
|
// event date end between ac.datep and ac.datep2
|
||||||
|
if (!empty($eventDateEnd)) {
|
||||||
|
$sql .= " OR (ac.datep <= '" . $db->idate($eventDateEnd) . "' AND (ac.datep2 >= '" . $db->idate($eventDateEnd) . "'))";
|
||||||
|
}
|
||||||
|
// event date start before ac.datep and event date end after ac.datep2
|
||||||
|
$sql .= " OR (";
|
||||||
|
$sql .= "ac.datep >= '" . $db->idate($eventDateStart) . "'";
|
||||||
|
if (!empty($eventDateEnd)) {
|
||||||
|
$sql .= " AND (ac.datep2 IS NOT NULL AND ac.datep2 <= '" . $db->idate($eventDateEnd) . "')";
|
||||||
|
}
|
||||||
|
$sql .= ")";
|
||||||
|
|
||||||
|
$sql .= ")";
|
||||||
|
$resql = $db->query($sql);
|
||||||
|
if (!$resql) {
|
||||||
|
$error++;
|
||||||
|
$objstat->error = $db->lasterror();
|
||||||
|
$objstat->errors[] = $objstat->error;
|
||||||
|
} else {
|
||||||
|
if ($db->num_rows($resql)>0) {
|
||||||
|
// already in use
|
||||||
|
$error++;
|
||||||
|
$objstat->error = $langs->trans('ErrorResourcesAlreadyInUse') . ' : ';
|
||||||
|
while ($obj = $db->fetch_object($resql)) {
|
||||||
|
$objstat->error .= '<br> - ' . $langs->trans('ErrorResourceUseInEvent', $obj->r_ref, $obj->ac_label . ' [' . $obj->ac_id . ']');
|
||||||
|
}
|
||||||
|
$objstat->errors[] = $objstat->error;
|
||||||
|
}
|
||||||
|
$db->free($resql);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$error) {
|
||||||
|
$res = $objstat->add_element_resource($resource_id, $resource_type, $busy, $mandatory);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! $error && $res > 0)
|
if (! $error && $res > 0)
|
||||||
{
|
{
|
||||||
setEventMessages($langs->trans('ResourceLinkedWithSuccess'), null, 'mesgs');
|
setEventMessages($langs->trans('ResourceLinkedWithSuccess'), null, 'mesgs');
|
||||||
@ -123,18 +185,73 @@ if (empty($reshook))
|
|||||||
$object->busy = $busy;
|
$object->busy = $busy;
|
||||||
$object->mandatory = $mandatory;
|
$object->mandatory = $mandatory;
|
||||||
|
|
||||||
$result = $object->update_element_resource($user);
|
if (!empty($conf->global->RESOURCE_USED_IN_EVENT_CHECK) && $object->element_type=='action' && $object->resource_type=='dolresource' && intval($object->busy)==1) {
|
||||||
|
$eventDateStart = $object->objelement->datep;
|
||||||
|
$eventDateEnd = $object->objelement->datef;
|
||||||
|
$isFullDayEvent = intval($objstat->fulldayevent);
|
||||||
|
if (empty($eventDateEnd)) {
|
||||||
|
if ($isFullDayEvent) {
|
||||||
|
$eventDateStartArr = dol_getdate($eventDateStart);
|
||||||
|
$eventDateStart = dol_mktime(0, 0, 0, $eventDateStartArr['mon'], $eventDateStartArr['mday'], $eventDateStartArr['year']);
|
||||||
|
$eventDateEnd = dol_mktime(23, 59, 59, $eventDateStartArr['mon'], $eventDateStartArr['mday'], $eventDateStartArr['year']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($result >= 0)
|
$sql = "SELECT er.rowid, r.ref as r_ref, ac.id as ac_id, ac.label as ac_label";
|
||||||
{
|
$sql .= " FROM " . MAIN_DB_PREFIX . "element_resources as er";
|
||||||
|
$sql .= " INNER JOIN " . MAIN_DB_PREFIX . "resource as r ON r.rowid = er.resource_id AND er.resource_type = '" . $db->escape($object->resource_type) . "'";
|
||||||
|
$sql .= " INNER JOIN " . MAIN_DB_PREFIX . "actioncomm as ac ON ac.id = er.element_id AND er.element_type = '" . $db->escape($object->element_type) . "'";
|
||||||
|
$sql .= " WHERE er.resource_id = " . $object->resource_id;
|
||||||
|
$sql .= " AND ac.id != " . $object->element_id;
|
||||||
|
$sql .= " AND er.busy = 1";
|
||||||
|
$sql .= " AND (";
|
||||||
|
|
||||||
|
// event date start between ac.datep and ac.datep2 (if datep2 is null we consider there is no end)
|
||||||
|
$sql .= " (ac.datep <= '" . $db->idate($eventDateStart) . "' AND (ac.datep2 IS NULL OR ac.datep2 >= '" . $db->idate($eventDateStart) . "'))";
|
||||||
|
// event date end between ac.datep and ac.datep2
|
||||||
|
if (!empty($eventDateEnd)) {
|
||||||
|
$sql .= " OR (ac.datep <= '" . $db->idate($eventDateEnd) . "' AND (ac.datep2 IS NULL OR ac.datep2 >= '" . $db->idate($eventDateEnd) . "'))";
|
||||||
|
}
|
||||||
|
// event date start before ac.datep and event date end after ac.datep2
|
||||||
|
$sql .= " OR (";
|
||||||
|
$sql .= "ac.datep >= '" . $db->idate($eventDateStart) . "'";
|
||||||
|
if (!empty($eventDateEnd)) {
|
||||||
|
$sql .= " AND (ac.datep2 IS NOT NULL AND ac.datep2 <= '" . $db->idate($eventDateEnd) . "')";
|
||||||
|
}
|
||||||
|
$sql .= ")";
|
||||||
|
|
||||||
|
$sql .= ")";
|
||||||
|
$resql = $db->query($sql);
|
||||||
|
if (!$resql) {
|
||||||
|
$error++;
|
||||||
|
$object->error = $db->lasterror();
|
||||||
|
$object->errors[] = $object->error;
|
||||||
|
} else {
|
||||||
|
if ($db->num_rows($resql)>0) {
|
||||||
|
// already in use
|
||||||
|
$error++;
|
||||||
|
$object->error = $langs->trans('ErrorResourcesAlreadyInUse') . ' : ';
|
||||||
|
while ($obj = $db->fetch_object($resql)) {
|
||||||
|
$object->error .= '<br> - ' . $langs->trans('ErrorResourceUseInEvent', $obj->r_ref, $obj->ac_label . ' [' . $obj->ac_id . ']');
|
||||||
|
}
|
||||||
|
$object->errors[] = $objstat->error;
|
||||||
|
}
|
||||||
|
$db->free($resql);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$error) {
|
||||||
|
$result = $object->update_element_resource($user);
|
||||||
|
if ($result < 0) $error++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($error) {
|
||||||
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
|
} else {
|
||||||
setEventMessages($langs->trans('RessourceLineSuccessfullyUpdated'), null, 'mesgs');
|
setEventMessages($langs->trans('RessourceLineSuccessfullyUpdated'), null, 'mesgs');
|
||||||
header("Location: ".$_SERVER['PHP_SELF']."?element=".$element."&element_id=".$element_id);
|
header("Location: ".$_SERVER['PHP_SELF']."?element=".$element."&element_id=".$element_id);
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
setEventMessages($object->error, $object->errors, 'errors');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3915,17 +3915,17 @@ class Societe extends CommonObject
|
|||||||
while($obj=$this->db->fetch_object($resql)) {
|
while($obj=$this->db->fetch_object($resql)) {
|
||||||
$tmpobject->id=$obj->rowid;
|
$tmpobject->id=$obj->rowid;
|
||||||
|
|
||||||
if ($obj->fk_statut != Facture::STATUS_DRAFT // Not a draft
|
if ($obj->fk_statut != $tmpobject::STATUS_DRAFT // Not a draft
|
||||||
&& ! ($obj->fk_statut == Facture::STATUS_ABANDONED && $obj->close_code == 'replaced') // Not a replaced invoice
|
&& ! ($obj->fk_statut == $tmpobject::STATUS_ABANDONED && $obj->close_code == 'replaced') // Not a replaced invoice
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
$outstandingTotal+= $obj->total_ht;
|
$outstandingTotal+= $obj->total_ht;
|
||||||
$outstandingTotalIncTax+= $obj->total_ttc;
|
$outstandingTotalIncTax+= $obj->total_ttc;
|
||||||
}
|
}
|
||||||
if ($obj->paye == 0
|
if ($obj->paye == 0
|
||||||
&& $obj->fk_statut != Facture::STATUS_DRAFT // Not a draft
|
&& $obj->fk_statut != $tmpobject::STATUS_DRAFT // Not a draft
|
||||||
&& $obj->fk_statut != Facture::STATUS_ABANDONED // Not abandonned
|
&& $obj->fk_statut != $tmpobject::STATUS_ABANDONED // Not abandonned
|
||||||
&& $obj->fk_statut != Facture::STATUS_CLOSED) // Not classified as paid
|
&& $obj->fk_statut != $tmpobject::STATUS_CLOSED) // Not classified as paid
|
||||||
//$sql .= " AND (fk_statut <> 3 OR close_code <> 'abandon')"; // Not abandonned for undefined reason
|
//$sql .= " AND (fk_statut <> 3 OR close_code <> 'abandon')"; // Not abandonned for undefined reason
|
||||||
{
|
{
|
||||||
$paiement = $tmpobject->getSommePaiement();
|
$paiement = $tmpobject->getSommePaiement();
|
||||||
@ -3936,7 +3936,11 @@ class Societe extends CommonObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
//if credit note is converted but not used
|
//if credit note is converted but not used
|
||||||
if($mode == 'supplier' && $obj->type == FactureFournisseur::TYPE_CREDIT_NOTE && $tmpobject->isCreditNoteUsed())$outstandingOpened-=$tmpobject->getSumFromThisCreditNotesNotUsed();
|
// TODO Do this also for customer ?
|
||||||
|
if($mode == 'supplier' && $obj->type == FactureFournisseur::TYPE_CREDIT_NOTE && $tmpobject->isCreditNoteUsed())
|
||||||
|
{
|
||||||
|
$outstandingOpened-=$tmpobject->getSumFromThisCreditNotesNotUsed();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return array('opened'=>$outstandingOpened, 'total_ht'=>$outstandingTotal, 'total_ttc'=>$outstandingTotalIncTax); // 'opened' is 'incl taxes'
|
return array('opened'=>$outstandingOpened, 'total_ht'=>$outstandingTotal, 'total_ttc'=>$outstandingTotalIncTax); // 'opened' is 'incl taxes'
|
||||||
}
|
}
|
||||||
|
|||||||
@ -221,7 +221,7 @@ if (empty($conf->stripeconnect->enabled))
|
|||||||
$endpoint = \Stripe\WebhookEndpoint::retrieve($conf->global->STRIPE_TEST_WEBHOOK_ID);
|
$endpoint = \Stripe\WebhookEndpoint::retrieve($conf->global->STRIPE_TEST_WEBHOOK_ID);
|
||||||
$endpoint->enabled_events = $stripearrayofwebhookevents;
|
$endpoint->enabled_events = $stripearrayofwebhookevents;
|
||||||
if (GETPOST('webhook', 'alpha') == $conf->global->STRIPE_TEST_WEBHOOK_ID) {
|
if (GETPOST('webhook', 'alpha') == $conf->global->STRIPE_TEST_WEBHOOK_ID) {
|
||||||
if (empty(GETPOST('status', 'alpha'))) {
|
if (! GETPOST('status', 'alpha')) {
|
||||||
$endpoint->disabled = true;
|
$endpoint->disabled = true;
|
||||||
} else {
|
} else {
|
||||||
$endpoint->disabled = false;
|
$endpoint->disabled = false;
|
||||||
|
|||||||
BIN
htdocs/theme/dolibarr_logo_squarred.png
Normal file
BIN
htdocs/theme/dolibarr_logo_squarred.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.3 KiB |
@ -1058,6 +1058,41 @@ div.blockvmenulogo
|
|||||||
{
|
{
|
||||||
border-bottom: 0 !important;
|
border-bottom: 0 !important;
|
||||||
}
|
}
|
||||||
|
.backgroundforcompanylogo {
|
||||||
|
margin: <?php echo $disableimages?'0':'6'; ?>px;
|
||||||
|
margin-left: 8px;
|
||||||
|
margin-right: 8px;
|
||||||
|
background-color: rgba(255,255,255,0.7);
|
||||||
|
padding: 0;
|
||||||
|
border-radius: 5px;
|
||||||
|
height: <?php echo $disableimages?'20':'32'; ?>px;
|
||||||
|
/* width: 100px; */
|
||||||
|
max-width: 100px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.backgroundforcompanylogo img.mycompany {
|
||||||
|
object-fit: contain;
|
||||||
|
width: inherit;
|
||||||
|
height: inherit;
|
||||||
|
}
|
||||||
|
#mainmenutd_companylogo::after, #mainmenutd_menu::after {
|
||||||
|
content: unset !important;
|
||||||
|
}
|
||||||
|
li#mainmenutd_companylogo .tmenucenter {
|
||||||
|
width: unset;
|
||||||
|
}
|
||||||
|
li#mainmenutd_companylogo {
|
||||||
|
min-width: unset !important;
|
||||||
|
}
|
||||||
|
<?php if ($disableimages) { ?>
|
||||||
|
li#mainmenutd_home {
|
||||||
|
min-width: unset !important;
|
||||||
|
}
|
||||||
|
li#mainmenutd_home .tmenucenter {
|
||||||
|
width: unset;
|
||||||
|
}
|
||||||
|
<?php } ?>
|
||||||
|
|
||||||
div.blockvmenupair, div.blockvmenuimpair {
|
div.blockvmenupair, div.blockvmenuimpair {
|
||||||
border-top: none !important;
|
border-top: none !important;
|
||||||
border-left: none !important;
|
border-left: none !important;
|
||||||
@ -1504,9 +1539,6 @@ li.tmenu, li.tmenusel {
|
|||||||
li.menuhider:hover {
|
li.menuhider:hover {
|
||||||
background-image: none !important;
|
background-image: none !important;
|
||||||
}
|
}
|
||||||
li.tmenusel, li.tmenu:hover {
|
|
||||||
/* background: rgba(0, 0, 0, 0.1); */
|
|
||||||
}
|
|
||||||
|
|
||||||
li.tmenusel::after, li.tmenu:hover::after{
|
li.tmenusel::after, li.tmenu:hover::after{
|
||||||
content: "";
|
content: "";
|
||||||
@ -1559,7 +1591,7 @@ div.tmenucenter
|
|||||||
padding-top: 2px;
|
padding-top: 2px;
|
||||||
height: <?php print $heightmenu; ?>px;
|
height: <?php print $heightmenu; ?>px;
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
width: 100%;
|
/* width: 100%; */
|
||||||
}
|
}
|
||||||
#menu_titre_logo {
|
#menu_titre_logo {
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
@ -1965,8 +1997,8 @@ div.login_block_other { padding-top: 0; text-align: right; margin-right: 8px; }
|
|||||||
float: right;
|
float: right;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
padding: 0px 3px 0px 4px !important;
|
padding: 0px 3px 0px 4px !important;
|
||||||
line-height: 50px;
|
line-height: <?php echo $disableimages?'25':'50'; ?>px;
|
||||||
height: 50px;
|
height: <?php echo $disableimages?'25':'50'; ?>px;
|
||||||
}
|
}
|
||||||
.atoplogin, .atoplogin:hover {
|
.atoplogin, .atoplogin:hover {
|
||||||
color: #<?php echo $colortextbackhmenu; ?> !important;
|
color: #<?php echo $colortextbackhmenu; ?> !important;
|
||||||
@ -2003,8 +2035,8 @@ img.login, img.printer, img.entity {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
.userimg.atoplogin img.userphoto, .userimgatoplogin img.userphoto { /* size for user photo in login bar */
|
.userimg.atoplogin img.userphoto, .userimgatoplogin img.userphoto { /* size for user photo in login bar */
|
||||||
width: 32px;
|
width: <?php echo $disableimages?'26':'32'; ?>px;
|
||||||
height: 32px;
|
height: <?php echo $disableimages?'26':'32'; ?>px;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
background-size: contain;
|
background-size: contain;
|
||||||
background-size: contain;
|
background-size: contain;
|
||||||
@ -2618,7 +2650,7 @@ table.liste th, table.noborder th, table.noborder tr.liste_titre td, table.nobor
|
|||||||
}
|
}
|
||||||
table.liste td, table.noborder td, div.noborder form div, table.tableforservicepart1 td, table.tableforservicepart2 td {
|
table.liste td, table.noborder td, div.noborder form div, table.tableforservicepart1 td, table.tableforservicepart2 td {
|
||||||
padding: 7px 8px 7px 8px; /* t r b l */
|
padding: 7px 8px 7px 8px; /* t r b l */
|
||||||
line-height: 22px;
|
/* line-height: 22px; This create trouble on cell login on list of last events of a contract*/
|
||||||
height: 22px;
|
height: 22px;
|
||||||
}
|
}
|
||||||
div.liste_titre_bydiv .divsearchfield {
|
div.liste_titre_bydiv .divsearchfield {
|
||||||
@ -5641,7 +5673,7 @@ div.tabsElem a.tab {
|
|||||||
|
|
||||||
/* nboftopmenuentries = <?php echo $nbtopmenuentries ?>, fontsize=<?php echo is_numeric($fontsize)?$fontsize.'px':$fontsize ?> */
|
/* nboftopmenuentries = <?php echo $nbtopmenuentries ?>, fontsize=<?php echo is_numeric($fontsize)?$fontsize.'px':$fontsize ?> */
|
||||||
/* rule to reduce top menu - 1st reduction: Reduce width of top menu icons */
|
/* rule to reduce top menu - 1st reduction: Reduce width of top menu icons */
|
||||||
@media only screen and (max-width: <?php echo empty($conf->global->THEME_ELDY_WITDHOFFSET_FOR_REDUC1) ? round($nbtopmenuentries * 90, 0) + 240 : $conf->global->THEME_ELDY_WITDHOFFSET_FOR_REDUC1; ?>px) /* reduction 1 */
|
@media only screen and (max-width: <?php echo empty($conf->global->THEME_ELDY_WITDHOFFSET_FOR_REDUC1) ? round($nbtopmenuentries * 90, 0) + 340 : $conf->global->THEME_ELDY_WITDHOFFSET_FOR_REDUC1; ?>px) /* reduction 1 */
|
||||||
{
|
{
|
||||||
div.tmenucenter {
|
div.tmenucenter {
|
||||||
width: <?php echo round(52); ?>px; /* size of viewport */
|
width: <?php echo round(52); ?>px; /* size of viewport */
|
||||||
@ -5674,8 +5706,11 @@ div.tabsElem a.tab {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* rule to reduce top menu - 2nd reduction: Reduce width of top menu icons again */
|
/* rule to reduce top menu - 2nd reduction: Reduce width of top menu icons again */
|
||||||
@media only screen and (max-width: <?php echo empty($conf->global->THEME_ELDY_WITDHOFFSET_FOR_REDUC2) ? round($nbtopmenuentries * 69, 0) + 40 : $conf->global->THEME_ELDY_WITDHOFFSET_FOR_REDUC2; ?>px) /* reduction 2 */
|
@media only screen and (max-width: <?php echo empty($conf->global->THEME_ELDY_WITDHOFFSET_FOR_REDUC2) ? round($nbtopmenuentries * 69, 0) + 140 : $conf->global->THEME_ELDY_WITDHOFFSET_FOR_REDUC2; ?>px) /* reduction 2 */
|
||||||
{
|
{
|
||||||
|
li.tmenucompanylogo {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
div.mainmenu {
|
div.mainmenu {
|
||||||
height: 23px;
|
height: 23px;
|
||||||
}
|
}
|
||||||
@ -5698,7 +5733,7 @@ div.tabsElem a.tab {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* rule to reduce top menu - 3rd reduction: The menu for user is on left */
|
/* rule to reduce top menu - 3rd reduction: The menu for user is on left */
|
||||||
@media only screen and (max-width: <?php echo empty($conf->global->THEME_ELDY_WITDHOFFSET_FOR_REDUC3) ? round($nbtopmenuentries * 47, 0) + 40 : $conf->global->THEME_ELDY_WITDHOFFSET_FOR_REDUC3; ?>px) /* reduction 3 */
|
@media only screen and (max-width: <?php echo empty($conf->global->THEME_ELDY_WITDHOFFSET_FOR_REDUC3) ? round($nbtopmenuentries * 47, 0) + 140 : $conf->global->THEME_ELDY_WITDHOFFSET_FOR_REDUC3; ?>px) /* reduction 3 */
|
||||||
{
|
{
|
||||||
.side-nav {
|
.side-nav {
|
||||||
z-index: 200;
|
z-index: 200;
|
||||||
|
|||||||
@ -1948,6 +1948,11 @@ foreach($mainmenuusedarray as $val)
|
|||||||
display: none;
|
display: none;
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
}
|
}
|
||||||
|
.topmenuimage {
|
||||||
|
<?php if ($disableimages) { ?>
|
||||||
|
display: none;
|
||||||
|
<?php } ?>
|
||||||
|
}
|
||||||
a.tmenuimage {
|
a.tmenuimage {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
@ -2232,6 +2237,41 @@ div.blockvmenulogo
|
|||||||
{
|
{
|
||||||
border-bottom: 0 !important;
|
border-bottom: 0 !important;
|
||||||
}
|
}
|
||||||
|
.backgroundforcompanylogo {
|
||||||
|
margin: <?php echo $disableimages?'0':'6'; ?>px;
|
||||||
|
margin-left: 12px;
|
||||||
|
margin-right: 6px;
|
||||||
|
background-color: rgba(255,255,255,0.7);
|
||||||
|
padding: 0;
|
||||||
|
border-radius: 5px;
|
||||||
|
height: <?php echo $disableimages?'20':'32'; ?>px;
|
||||||
|
/* width: 100px; */
|
||||||
|
max-width: 100px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.backgroundforcompanylogo img.mycompany {
|
||||||
|
object-fit: contain;
|
||||||
|
width: inherit;
|
||||||
|
height: inherit;
|
||||||
|
}
|
||||||
|
#mainmenutd_companylogo::after {
|
||||||
|
content: unset;
|
||||||
|
}
|
||||||
|
li#mainmenutd_companylogo .tmenucenter {
|
||||||
|
width: unset;
|
||||||
|
}
|
||||||
|
li#mainmenutd_companylogo {
|
||||||
|
min-width: unset !important;
|
||||||
|
}
|
||||||
|
<?php if ($disableimages) { ?>
|
||||||
|
li#mainmenutd_home {
|
||||||
|
min-width: unset !important;
|
||||||
|
}
|
||||||
|
li#mainmenutd_home .tmenucenter {
|
||||||
|
width: unset;
|
||||||
|
}
|
||||||
|
<?php } ?>
|
||||||
|
|
||||||
div.blockvmenupair, div.blockvmenuimpair
|
div.blockvmenupair, div.blockvmenuimpair
|
||||||
{
|
{
|
||||||
font-family: <?php print $fontlist ?>;
|
font-family: <?php print $fontlist ?>;
|
||||||
@ -5624,13 +5664,13 @@ border-top-right-radius: 6px;
|
|||||||
}
|
}
|
||||||
|
|
||||||
.menuhider {
|
.menuhider {
|
||||||
width: 40px;
|
width: <?php echo $disableimages ? 'auto' : '40'; ?>px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nboftopmenuentries = <?php echo $nbtopmenuentries ?>, fontsize=<?php echo $fontsize ?> */
|
/* nboftopmenuentries = <?php echo $nbtopmenuentries ?>, fontsize=<?php echo $fontsize ?> */
|
||||||
/* disableimages = <?php echo $disableimages; ?> */
|
/* disableimages = <?php echo $disableimages; ?> */
|
||||||
/* rule to reduce top menu - 1st reduction */
|
/* rule to reduce top menu - 1st reduction */
|
||||||
@media only screen and (max-width: <?php echo round($nbtopmenuentries * $fontsize * 7, 0) + 200; ?>px)
|
@media only screen and (max-width: <?php echo round($nbtopmenuentries * $fontsize * 7, 0) + 300; ?>px)
|
||||||
{
|
{
|
||||||
div.tmenucenter {
|
div.tmenucenter {
|
||||||
max-width: <?php echo round($fontsize * 4); ?>px; /* size of viewport */
|
max-width: <?php echo round($fontsize * 4); ?>px; /* size of viewport */
|
||||||
@ -5657,8 +5697,12 @@ border-top-right-radius: 6px;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* rule to reduce top menu - 2nd reduction */
|
/* rule to reduce top menu - 2nd reduction */
|
||||||
@media only screen and (max-width: <?php echo round($nbtopmenuentries * $fontsize * 4.5, 0) + 200; ?>px)
|
@media only screen and (max-width: <?php echo round($nbtopmenuentries * $fontsize * 4.5, 0) + 300; ?>px)
|
||||||
{
|
{
|
||||||
|
li.tmenucompanylogo {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
div.tmenucenter {
|
div.tmenucenter {
|
||||||
max-width: <?php echo round($fontsize * 2); ?>px; /* size of viewport */
|
max-width: <?php echo round($fontsize * 2); ?>px; /* size of viewport */
|
||||||
text-overflow: clip;
|
text-overflow: clip;
|
||||||
|
|||||||
@ -58,7 +58,8 @@ if (! empty($conf->global->MAIN_USE_ADVANCED_PERMS))
|
|||||||
$socid=0;
|
$socid=0;
|
||||||
if (isset($user->societe_id) && $user->societe_id > 0) $socid = $user->societe_id;
|
if (isset($user->societe_id) && $user->societe_id > 0) $socid = $user->societe_id;
|
||||||
$feature2 = (($socid && $user->rights->user->self->creer)?'':'user');
|
$feature2 = (($socid && $user->rights->user->self->creer)?'':'user');
|
||||||
if ($user->id == $id && (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->user->self_advance->readperms))) // A user can always read its own card if not advanced perms enabled, or if he has advanced perms
|
// A user can always read its own card if not advanced perms enabled, or if he has advanced perms, except for admin
|
||||||
|
if ($user->id == $id && (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->user->self_advance->readperms) && empty($user->admin)))
|
||||||
{
|
{
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3308,7 +3308,7 @@ if ($action == 'replacesite' || $action == 'replacesiteconfirm')
|
|||||||
print '<tr>';
|
print '<tr>';
|
||||||
print '<td>'.$langs->trans("Container").'</td>';
|
print '<td>'.$langs->trans("Container").'</td>';
|
||||||
print '<td>';
|
print '<td>';
|
||||||
print '<a href="'.$_SERVER["PHP_SELF"].'?website='.$website->ref.'&pageid='.$answerrecord->id.'">'.$answerrecord->title.'</a>';
|
print '<a href="'.$_SERVER["PHP_SELF"].'?website='.$website->ref.'&pageid='.$answerrecord->id.'">'.($answerrecord->title ? $answerrecord->title : $langs->trans("NoTitle")).'</a>';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print '<td class="tdoverflow100">'.$answerrecord->description;
|
print '<td class="tdoverflow100">'.$answerrecord->description;
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user