Merge branch 'develop' of github.com:Dolibarr/dolibarr into dev_quality_management_on_lot

This commit is contained in:
Florian HENRY 2023-08-28 12:41:46 +02:00
commit bb195694bb
530 changed files with 5685 additions and 3763 deletions

View file

@ -2,6 +2,7 @@
name: "Exakat analysis"
on:
# execute once a month, the 1st
schedule:
- cron: "0 20 1 * *"
workflow_dispatch:

30
.github/workflows/phpcs.yml vendored Normal file
View file

@ -0,0 +1,30 @@
name: "PHPCS"
on:
pull_request:
paths:
- "**.php"
- "phpcs.xml"
- ".github/workflows/phpcs.yml"
jobs:
phpcs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 50 # important!
# we may use whatever way to install phpcs, just specify the path on the next step
# however, curl seems to be the fastest
- name: Install PHP_CodeSniffer
run: |
curl -OL https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar
php phpcs.phar --version
- uses: thenabeel/action-phpcs@v8
with:
files: "**.php" # you may customize glob as needed
phpcs_path: php phpcs.phar
standard: dev/setup/codesniffer/ruleset.xml
fail_on_warnings: false

View file

@ -13,7 +13,7 @@ jobs:
# uses: ./.github/workflows/files_changed.yaml
# with:
# folder_path: .*
linter_name:
name: Run & fix PHP Code Sniffer
runs-on: ubuntu-latest

View file

@ -4655,75 +4655,6 @@ INSERT INTO `llx_menu` VALUES (19289,'all',1,'cashdesk','top','cashdesk',0,NULL,
/*!40000 ALTER TABLE `llx_menu` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `llx_milestone`
--
DROP TABLE IF EXISTS `llx_milestone`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `llx_milestone` (
`rowid` int(11) NOT NULL AUTO_INCREMENT,
`fk_element` int(11) NOT NULL,
`elementtype` varchar(16) NOT NULL,
`label` varchar(255) NOT NULL,
`options` varchar(255) DEFAULT NULL,
`priority` int(11) DEFAULT '0',
`tms` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`fk_user_modif` int(11) DEFAULT NULL,
PRIMARY KEY (`rowid`),
UNIQUE KEY `uk_milestone_fk_element` (`fk_element`,`elementtype`),
KEY `idx_milestone_fk_user_modif` (`fk_user_modif`),
CONSTRAINT `fk_milestone_fk_user_modif` FOREIGN KEY (`fk_user_modif`) REFERENCES `llx_user` (`rowid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `llx_milestone`
--
LOCK TABLES `llx_milestone` WRITE;
/*!40000 ALTER TABLE `llx_milestone` DISABLE KEYS */;
INSERT INTO `llx_milestone` VALUES (2,779,'facture','azerty',NULL,0,'2013-03-09 12:19:30',NULL),(3,780,'facture','fsdf',NULL,0,'2013-03-09 13:01:08',NULL),(4,781,'facture','hhh',NULL,0,'2013-03-09 14:06:37',NULL);
/*!40000 ALTER TABLE `llx_milestone` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `llx_monitoring_probes`
--
DROP TABLE IF EXISTS `llx_monitoring_probes`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `llx_monitoring_probes` (
`rowid` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(64) NOT NULL,
`groupname` varchar(64) DEFAULT NULL,
`url` varchar(250) NOT NULL,
`useproxy` int(11) DEFAULT '0',
`checkkey` varchar(250) DEFAULT NULL,
`maxval` int(11) DEFAULT NULL,
`frequency` int(11) DEFAULT '60',
`active` int(11) DEFAULT '1',
`status` int(11) DEFAULT '0',
`lastreset` datetime DEFAULT NULL,
`oldesterrortext` text,
`oldesterrordate` datetime DEFAULT NULL,
PRIMARY KEY (`rowid`),
UNIQUE KEY `uk_monitoring_probes` (`title`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `llx_monitoring_probes`
--
LOCK TABLES `llx_monitoring_probes` WRITE;
/*!40000 ALTER TABLE `llx_monitoring_probes` DISABLE KEYS */;
INSERT INTO `llx_monitoring_probes` VALUES (1,'aaa',NULL,'http://www.chiensderace.com',0,'chiens',1000,10,1,1,'2011-04-20 23:46:41',NULL,NULL),(2,'ChatsDeRace',NULL,'http://www.chatsderace.com',0,'chats',1000,5,1,1,'2011-04-20 23:46:41',NULL,NULL);
/*!40000 ALTER TABLE `llx_monitoring_probes` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `llx_notify`
--

View file

@ -43,7 +43,7 @@ print '***** '.constant('PRODUCT').' - '.constant('VERSION').' *****'."\n";
if (empty($argv[1])) {
print 'You must run this tool being into the root of the project.'."\n";
print 'Usage: '.constant('PRODUCT').'.php pathto/index.html [--dir-scc=pathtoscc] [--dir-phpstan=pathtophpstan]'."\n";
print 'Example: '.constant('PRODUCT').'.php dev/tools/apstats.php documents/apstats/index.html --dir-phpstan=~/git/phpstan/htdocs/includes/bin';
print 'Example: '.constant('PRODUCT').'.php dev/tools/apstats.php documents/apstats/index.html --dir-scc=/snap/bin --dir-phpstan=~/git/phpstan/htdocs/includes/bin';
exit(0);
}
@ -63,7 +63,7 @@ $i = 0;
while ($i < $argc) {
$reg = array();
if (preg_match('/--dir-scc=(.*)$/', $argv[$i], $reg)) {
$dirphpstan = $reg[1];
$dirscc = $reg[1];
}
if (preg_match('/--dir-phpstan=(.*)$/', $argv[$i], $reg)) {
$dirphpstan = $reg[1];
@ -157,13 +157,15 @@ foreach (array('proj', 'dep') as $source) {
}
}
foreach ($arrayoflineofcode[$source] as $key => $val) {
$arrayofmetrics[$source]['Files'] += $val['Files'];
$arrayofmetrics[$source]['Lines'] += $val['Lines'];
$arrayofmetrics[$source]['Blanks'] += $val['Blanks'];
$arrayofmetrics[$source]['Comments'] += $val['Comments'];
$arrayofmetrics[$source]['Code'] += $val['Code'];
$arrayofmetrics[$source]['Complexity'] += $val['Complexity'];
if (!empty($arrayoflineofcode[$source])) {
foreach ($arrayoflineofcode[$source] as $key => $val) {
$arrayofmetrics[$source]['Files'] += $val['Files'];
$arrayofmetrics[$source]['Lines'] += $val['Lines'];
$arrayofmetrics[$source]['Blanks'] += $val['Blanks'];
$arrayofmetrics[$source]['Comments'] += $val['Comments'];
$arrayofmetrics[$source]['Code'] += $val['Code'];
$arrayofmetrics[$source]['Complexity'] += $val['Complexity'];
}
}
}
@ -267,18 +269,20 @@ foreach (array('proj', 'dep') as $source) {
$html .= '<td class="right">'.formatNumber($arrayofmetrics[$source]['Code']).'</td>';
$html .= '<td>TODO graph here...</td>';
$html .= '</tr>';
foreach ($arrayoflineofcode[$source] as $key => $val) {
$html .= '<tr class="loc hidden source'.$source.' language'.str_replace(' ', '', $key).'">';
$html .= '<td>'.$key.'</td>';
$html .= '<td class="right"></td>';
$html .= '<td class="right">'.(empty($val['Files']) ? '' : formatNumber($val['Files'])).'</td>';
$html .= '<td class="right">'.(empty($val['Lines']) ? '' : formatNumber($val['Lines'])).'</td>';
$html .= '<td class="right">'.(empty($val['Blanks']) ? '' : formatNumber($val['Blanks'])).'</td>';
$html .= '<td class="right">'.(empty($val['Comments']) ? '' : formatNumber($val['Comments'])).'</td>';
$html .= '<td class="right">'.(empty($val['Code']) ? '' : formatNumber($val['Code'])).'</td>';
//$html .= '<td class="right">'.(empty($val['Complexity']) ? '' : $val['Complexity']).'</td>';
$html .= '<td>TODO graph here...</td>';
$html .= '</tr>';
if (!empty($arrayoflineofcode[$source])) {
foreach ($arrayoflineofcode[$source] as $key => $val) {
$html .= '<tr class="loc hidden source'.$source.' language'.str_replace(' ', '', $key).'">';
$html .= '<td>'.$key.'</td>';
$html .= '<td class="right"></td>';
$html .= '<td class="right">'.(empty($val['Files']) ? '' : formatNumber($val['Files'])).'</td>';
$html .= '<td class="right">'.(empty($val['Lines']) ? '' : formatNumber($val['Lines'])).'</td>';
$html .= '<td class="right">'.(empty($val['Blanks']) ? '' : formatNumber($val['Blanks'])).'</td>';
$html .= '<td class="right">'.(empty($val['Comments']) ? '' : formatNumber($val['Comments'])).'</td>';
$html .= '<td class="right">'.(empty($val['Code']) ? '' : formatNumber($val['Code'])).'</td>';
//$html .= '<td class="right">'.(empty($val['Complexity']) ? '' : $val['Complexity']).'</td>';
$html .= '<td>TODO graph here...</td>';
$html .= '</tr>';
}
}
}
@ -299,8 +303,12 @@ $html .= '</section>';
$html .= '<section class="chapter">';
$html .= '<h2>Project value</h2><br>';
$html .= 'COCOMO (Basic organic model) value: $'.formatNumber($arraycocomo['proj']['currency'] + $arraycocomo['dep']['currency'], 2).'<br>';
$html .= 'COCOMO (Basic organic model) effort: '.formatNumber($arraycocomo['proj']['people'] * $arraycocomo['proj']['effort'] + $arraycocomo['dep']['people'] * $arraycocomo['dep']['effort']).' monthes people<br>';
$html .= 'COCOMO (Basic organic model) value: $';
$html .= formatNumber($arraycocomo['proj']['currency'] + $arraycocomo['dep']['currency'], 2);
$html .= '<br>';
$html .= 'COCOMO (Basic organic model) effort: ';
$html .= formatNumber($arraycocomo['proj']['people'] * $arraycocomo['proj']['effort'] + $arraycocomo['dep']['people'] * $arraycocomo['dep']['effort']);
$html .= ' monthes people<br>';
$html .= '</section>';
$html .= '<section class="chapter">';

View file

@ -81,10 +81,10 @@ $list_account[] = '---Others---';
$list_account[] = 'ACCOUNTING_VAT_SOLD_ACCOUNT';
$list_account[] = 'ACCOUNTING_VAT_BUY_ACCOUNT';
if ($mysoc->useRevenueStamp()) {
/*if ($mysoc->useRevenueStamp()) {
$list_account[] = 'ACCOUNTING_REVENUESTAMP_SOLD_ACCOUNT';
//$list_account[] = 'ACCOUNTING_REVENUESTAMP_BUY_ACCOUNT';
}
$list_account[] = 'ACCOUNTING_REVENUESTAMP_BUY_ACCOUNT';
}*/
$list_account[] = 'ACCOUNTING_VAT_PAY_ACCOUNT';
@ -265,8 +265,8 @@ foreach ($list_account as $key) {
print img_picto('', 'payment_vat', 'class="pictofixedwidth"');
} elseif (preg_match('/^ACCOUNTING_VAT/', $key)) {
print img_picto('', 'vat', 'class="pictofixedwidth"');
} elseif (preg_match('/^ACCOUNTING_REVENUESTAMP/', $key)) {
print img_picto('', 'vat', 'class="pictofixedwidth"');
/*} elseif (preg_match('/^ACCOUNTING_REVENUESTAMP/', $key)) {
print img_picto('', 'vat', 'class="pictofixedwidth"');*/
} elseif (preg_match('/^ACCOUNTING_ACCOUNT_CUSTOMER/', $key)) {
print img_picto('', 'bill', 'class="pictofixedwidth"');
} elseif (preg_match('/^LOAN_ACCOUNTING_ACCOUNT/', $key)) {

View file

@ -497,7 +497,7 @@ if ($action == 'create') {
// Ref document
print '<tr><td>';
print '<table class="nobordernopadding" width="100%"><tr><td>';
print '<table class="nobordernopadding centpercent"><tr><td>';
print $langs->trans('Piece');
print '</td>';
if ($action != 'editdocref') {

View file

@ -209,7 +209,7 @@ if ($result) {
}
}
$compta_revenuestamp = getDolGlobalString('ACCOUNTING_REVENUESTAMP_SOLD_ACCOUNT', 'NotDefined');
//$compta_revenuestamp = getDolGlobalString('ACCOUNTING_REVENUESTAMP_SOLD_ACCOUNT', 'NotDefined');
$vatdata = getTaxesFromId($obj->tva_tx.($obj->vat_src_code ? ' ('.$obj->vat_src_code.')' : ''), $mysoc, $mysoc, 0);
$compta_tva = (!empty($vatdata['accountancy_code_sell']) ? $vatdata['accountancy_code_sell'] : $cpttva);
@ -296,6 +296,27 @@ if ($result) {
$tablocaltax1[$obj->rowid][$compta_localtax1] += $obj->total_localtax1 * $situation_ratio;
$tablocaltax2[$obj->rowid][$compta_localtax2] += $obj->total_localtax2 * $situation_ratio;
$compta_revenuestamp = 'NotDefined';
if (!empty($revenuestamp)) {
$sqlrevenuestamp = "SELECT accountancy_code_sell FROM ".MAIN_DB_PREFIX."c_revenuestamp";
$sqlrevenuestamp .= " WHERE fk_pays = ".((int) $mysoc->country_id);
$sqlrevenuestamp .= " AND taux = ".((double) $revenuestamp);
$sqlrevenuestamp .= " AND active = 1";
$resqlrevenuestamp = $db->query($sqlrevenuestamp);
if ($resqlrevenuestamp) {
$num_rows_revenuestamp = $db->num_rows($resqlrevenuestamp);
if ($num_rows_revenuestamp > 1) {
dol_print_error($db, 'Failed 2 or more lines for the revenue stamp of your country. Check the dictionary of revenue stamp.');
} else {
$objrevenuestamp = $db->fetch_object($resqlrevenuestamp);
if ($objrevenuestamp) {
$compta_revenuestamp = $objrevenuestamp->accountancy_code_sell;
}
}
}
}
if (empty($tabrevenuestamp[$obj->rowid][$compta_revenuestamp]) && !empty($revenuestamp)) {
// The revenue stamp was never seen for this invoice id=$obj->rowid
$tabttc[$obj->rowid][$compta_soc] += $obj->revenuestamp;

View file

@ -463,10 +463,6 @@ if (empty($reshook)) {
$phone = GETPOST("phone", 'alpha');
$phone_perso = GETPOST("phone_perso", 'alpha');
$phone_mobile = GETPOST("phone_mobile", 'alpha');
// $skype=GETPOST("member_skype", 'alpha');
// $twitter=GETPOST("member_twitter", 'alpha');
// $facebook=GETPOST("member_facebook", 'alpha');
// $linkedin=GETPOST("member_linkedin", 'alpha');
$email = preg_replace('/\s+/', '', GETPOST("member_email", 'alpha'));
$url = trim(GETPOST('url', 'custom', 0, FILTER_SANITIZE_URL));
$login = GETPOST("member_login", 'alphanohtml');

View file

@ -426,7 +426,7 @@ class Adherent extends CommonObject
// Envoi mail confirmation
$from = $conf->email_from;
if (!empty(getDolGlobalString('ADHERENT_MAIL_FROM'))) {
if (getDolGlobalString('ADHERENT_MAIL_FROM')) {
$from = getDolGlobalString('ADHERENT_MAIL_FROM');
}

View file

@ -189,7 +189,7 @@ $message .= '</div>';
$message .= ajax_autoselect('webdavpublicurl');
$message .= '<br>';
if (!empty(getDolGlobalString('DAV_ALLOW_PUBLIC_DIR'))) {
if (getDolGlobalString('DAV_ALLOW_PUBLIC_DIR')) {
$urlEntity = (isModEnabled('multicompany') ? '?entity=' . $conf->entity : '');
$url = '<a href="' . $urlwithroot . '/dav/fileserver.php/public/' . $urlEntity . '" target="_blank" rel="noopener noreferrer">' . $urlwithroot . '/dav/fileserver.php/public/' . $urlEntity . '</a>';

View file

@ -82,9 +82,6 @@ if ($action == 'setvalue' && $user->admin) {
if (!dolibarr_set_const($db, 'LDAP_CONTACT_FIELD_MOBILE', GETPOST("fieldmobile"), 'chaine', 0, '', $conf->entity)) {
$error++;
}
if (!dolibarr_set_const($db, 'LDAP_CONTACT_FIELD_SKYPE', GETPOST("fieldskype"), 'chaine', 0, '', $conf->entity)) {
$error++;
}
if (!dolibarr_set_const($db, 'LDAP_CONTACT_FIELD_FAX', GETPOST("fieldfax"), 'chaine', 0, '', $conf->entity)) {
$error++;
}
@ -237,13 +234,6 @@ print '</td><td>'.$langs->trans("LDAPFieldMobileExample").'</td>';
print '<td class="right"><input type="radio" name="key" value="LDAP_CONTACT_FIELD_MOBILE"'.($conf->global->LDAP_KEY_CONTACTS && $conf->global->LDAP_KEY_CONTACTS == $conf->global->LDAP_CONTACT_FIELD_MOBILE ? ' checked' : '')."></td>";
print '</tr>';
// Skype
print '<tr class="oddeven"><td>'.$langs->trans("LDAPFieldSkype").'</td><td>';
print '<input size="25" type="text" name="fieldskype" value="'.$conf->global->LDAP_CONTACT_FIELD_SKYPE.'">';
print '</td><td>'.$langs->trans("LDAPFieldSkypeExample").'</td>';
print '<td class="right"><input type="radio" name="key" value="LDAP_CONTACT_FIELD_SKYPE"'.($conf->global->LDAP_KEY_CONTACTS && $conf->global->LDAP_KEY_CONTACTS == $conf->global->LDAP_CONTACT_FIELD_SKYPE ? ' checked' : '')."></td>";
print '</tr>';
// Fax
print '<tr class="oddeven"><td>'.$langs->trans("LDAPFieldFax").'</td><td>';
print '<input size="25" type="text" name="fieldfax" value="'.$conf->global->LDAP_CONTACT_FIELD_FAX.'">';

View file

@ -95,9 +95,6 @@ if ($action == 'setvalue' && $user->admin) {
if (!dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_MOBILE', GETPOST("fieldmobile"), 'chaine', 0, '', $conf->entity)) {
$error++;
}
if (!dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_SKYPE', GETPOST("fieldskype"), 'chaine', 0, '', $conf->entity)) {
$error++;
}
if (!dolibarr_set_const($db, 'LDAP_MEMBER_FIELD_FAX', GETPOST("fieldfax"), 'chaine', 0, '', $conf->entity)) {
$error++;
}
@ -314,13 +311,6 @@ print '</td><td>'.$langs->trans("LDAPFieldMobileExample").'</td>';
print '<td class="right">&nbsp;</td>';
print '</tr>';
// Skype
print '<tr class="oddeven"><td>'.$langs->trans("LDAPFieldSkype").'</td><td>';
print '<input size="25" type="text" name="fieldskype" value="'.$conf->global->LDAP_MEMBER_FIELD_SKYPE.'">';
print '</td><td>'.$langs->trans("LDAPFieldSkypeExample").'</td>';
print '<td class="right">&nbsp;</td>';
print '</tr>';
// Fax
print '<tr class="oddeven"><td>'.$langs->trans("LDAPFieldFax").'</td><td>';
print '<input size="25" type="text" name="fieldfax" value="'.$conf->global->LDAP_MEMBER_FIELD_FAX.'">';

View file

@ -91,9 +91,6 @@ if ($action == 'setvalue' && $user->admin) {
if (!dolibarr_set_const($db, 'LDAP_FIELD_MOBILE', GETPOST("fieldmobile"), 'chaine', 0, '', $conf->entity)) {
$error++;
}
if (!dolibarr_set_const($db, 'LDAP_FIELD_SKYPE', GETPOST("fieldskype"), 'chaine', 0, '', $conf->entity)) {
$error++;
}
if (!dolibarr_set_const($db, 'LDAP_FIELD_FAX', GETPOST("fieldfax"), 'chaine', 0, '', $conf->entity)) {
$error++;
}
@ -294,13 +291,6 @@ print '</td><td>'.$langs->trans("LDAPFieldMobileExample").'</td>';
print '<td class="right"><input type="radio" name="key" value="LDAP_FIELD_MOBILE"'.(getDolGlobalString('LDAP_KEY_USERS') == getDolGlobalString('LDAP_FIELD_MOBILE') ? ' checked' : '')."></td>";
print '</tr>';
// Skype
print '<tr class="oddeven"><td>'.$langs->trans("LDAPFieldSkype").'</td><td>';
print '<input size="25" type="text" name="fieldskype" value="'.getDolGlobalString('LDAP_FIELD_SKYPE').'">';
print '</td><td>'.$langs->trans("LDAPFieldSkypeExample").'</td>';
print '<td class="right"><input type="radio" name="key" value="LDAP_FIELD_SKYPE"'.(getDolGlobalString('LDAP_KEY_USERS') == getDolGlobalString('LDAP_FIELD_SKYPE') ? ' checked' : '')."></td>";
print '</tr>';
// Fax
print '<tr class="oddeven"><td>'.$langs->trans("LDAPFieldFax").'</td><td>';
print '<input size="25" type="text" name="fieldfax" value="'.getDolGlobalString('LDAP_FIELD_FAX').'">';

View file

@ -664,7 +664,7 @@ if ($action == 'edit') {
if (empty($conf->global->MAIN_DISABLE_ALL_MAILS)) {
// Force e-mail recipient
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_FORCE_SENDTO").'</td><td>'.getDolGlobalString('MAIN_MAIL_FORCE_SENDTO');
if (!empty(getDolGlobalString('MAIN_MAIL_FORCE_SENDTO'))) {
if (getDolGlobalString('MAIN_MAIL_FORCE_SENDTO')) {
if (!isValidEmail(getDolGlobalString('MAIN_MAIL_FORCE_SENDTO'))) {
print img_warning($langs->trans("ErrorBadEMail"));
} else {

View file

@ -185,7 +185,7 @@ if ($action == 'edit') {
// Method
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_SMS_SENDMODE").'</td><td>';
if (count($listofmethods)) {
print $form->selectarray('MAIN_SMS_SENDMODE', $listofmethods, $conf->global->MAIN_SMS_SENDMODE, 1);
print $form->selectarray('MAIN_SMS_SENDMODE', $listofmethods, getDolGlobalString('MAIN_SMS_SENDMODE'), 1);
} else {
print '<span class="error">'.$langs->trans("None").'</span>';
}
@ -224,7 +224,7 @@ if ($action == 'edit') {
// Method
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_SMS_SENDMODE").'</td><td>';
$text = empty(getDolGlobalString('MAIN_SMS_SENDMODE')) ? '' : $listofmethods[getDolGlobalString('MAIN_SMS_SENDMODE')];
$text = getDolGlobalString('MAIN_SMS_SENDMODE') ? $listofmethods[getDolGlobalString('MAIN_SMS_SENDMODE')] : '';
if (empty($text)) {
$text = $langs->trans("Undefined").' '.img_warning();
}
@ -256,19 +256,7 @@ if ($action == 'edit') {
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit">'.$langs->trans("Modify").'</a>';
/*if ($conf->global->MAIN_SMS_SENDMODE != 'mail' || ! $linuxlike)
{
if (function_exists('fsockopen') && $port && $server)
{
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=testconnect">'.$langs->trans("DoTestServerAvailability").'</a>';
}
}
else
{
print '<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("FeatureNotAvailableOnLinux").'">'.$langs->trans("DoTestServerAvailability").'</a>';
}*/
if (count($listofmethods) && !empty($conf->global->MAIN_SMS_SENDMODE)) {
if (count($listofmethods) && getDolGlobalString('MAIN_SMS_SENDMODE')) {
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=test&amp;mode=init">'.$langs->trans("DoTestSend").'</a>';
} else {
print '<a class="butActionRefused classfortooltip" href="#">'.$langs->trans("DoTestSend").'</a>';

View file

@ -318,7 +318,7 @@ if (!empty($conf->global->TICKET_ENABLE_PUBLIC_INTERFACE)) {
// Check if email exists
print '<tr class="oddeven"><td>'.$langs->trans("TicketsEmailMustExist").'</td>';
print '<td class="left">';
if (empty(getDolGlobalInt('TICKET_EMAIL_MUST_EXISTS'))) {
if (!getDolGlobalInt('TICKET_EMAIL_MUST_EXISTS')) {
print '<a href="' . $_SERVER['PHP_SELF'] . '?action=set_TICKET_EMAIL_MUST_EXISTS&token='.newToken().'">' . img_picto($langs->trans('Disabled'), 'switch_off') . '</a>';
} else {
print '<a href="' . $_SERVER['PHP_SELF'] . '?action=del_TICKET_EMAIL_MUST_EXISTS&token='.newToken().'">' . img_picto($langs->trans('Enabled'), 'switch_on') . '</a>';
@ -334,7 +334,7 @@ if (!empty($conf->global->TICKET_ENABLE_PUBLIC_INTERFACE)) {
/*
print '<tr class="oddeven"><td>'.$langs->trans("TicketCreateThirdPartyWithContactIfNotExist").'</td>';
print '<td class="left">';
if (empty(getDolGlobalInt('TICKET_CREATE_THIRD_PARTY_WITH_CONTACT_IF_NOT_EXIST'))) {
if (!getDolGlobalInt('TICKET_CREATE_THIRD_PARTY_WITH_CONTACT_IF_NOT_EXIST')) {
print '<a href="' . $_SERVER['PHP_SELF'] . '?action=set_TICKET_CREATE_THIRD_PARTY_WITH_CONTACT_IF_NOT_EXIST&token='.newToken().'">' . img_picto($langs->trans('Disabled'), 'switch_off') . '</a>';
} else {
print '<a href="' . $_SERVER['PHP_SELF'] . '?action=del_TICKET_CREATE_THIRD_PARTY_WITH_CONTACT_IF_NOT_EXIST&token='.newToken().'">' . img_picto($langs->trans('Enabled'), 'switch_on') . '</a>';
@ -397,7 +397,7 @@ if (!empty($conf->global->TICKET_ENABLE_PUBLIC_INTERFACE)) {
// Show progression
print '<tr class="oddeven"><td>'.$langs->trans("TicketsShowProgression").'</td>';
print '<td class="left">';
if (empty(getDolGlobalInt('TICKET_SHOW_PROGRESSION'))) {
if (!getDolGlobalInt('TICKET_SHOW_PROGRESSION')) {
print '<a href="' . $_SERVER['PHP_SELF'] . '?action=set_TICKET_SHOW_PROGRESSION">' . img_picto($langs->trans('Disabled'), 'switch_off') . '</a>';
} else {
print '<a href="' . $_SERVER['PHP_SELF'] . '?action=del_TICKET_SHOW_PROGRESSION">' . img_picto($langs->trans('Enabled'), 'switch_on') . '</a>';

View file

@ -187,7 +187,6 @@ $form = new Form($db);
if ($object->id > 0) {
$title = $langs->trans("Agenda");
//if (!empty(getDolGlobalString('MAIN_HTML_TITLE')) && preg_match('/thirdpartynameonly/',getDolGlobalString('MAIN_HTML_TITLE')) && $object->name) $title=$object->name." - ".$title;
$help_url = 'EN:Module_Agenda_En|DE:Modul_Terminplanung';
llxHeader('', $title, $help_url);

View file

@ -1016,11 +1016,11 @@ class Calendar extends CommonObject
global $langs, $conf;
$langs->load("bookcal@bookcal");
if (empty(getDolGlobalString('BOOKCAL_MYOBJECT_ADDON'))) {
if (getDolGlobalString('BOOKCAL_MYOBJECT_ADDON')) {
$conf->global->BOOKCAL_MYOBJECT_ADDON = 'mod_calendar_standard';
}
if (!empty(getDolGlobalString('BOOKCAL_MYOBJECT_ADDON'))) {
if (getDolGlobalString('BOOKCAL_MYOBJECT_ADDON')) {
$mybool = false;
$file = getDolGlobalString('BOOKCAL_MYOBJECT_ADDON').".php";

View file

@ -264,6 +264,20 @@ class Categorie extends CommonObject
*/
public $childs = array();
/**
* @var array multilangs
*/
public $multilangs;
/**
* @var int imgWidth
*/
public $imgWidth;
/**
* @var int imgHeight
*/
public $imgHeight;
/**
* Constructor
@ -1886,27 +1900,27 @@ class Categorie extends CommonObject
} else {
$sql2 = "INSERT INTO ".MAIN_DB_PREFIX."categorie_lang (fk_category, lang, label, description)";
$sql2 .= " VALUES(".((int) $this->id).", '".$this->db->escape($key)."', '".$this->db->escape($this->label)."'";
$sql2 .= ", '".$this->db->escape($this->multilangs["$key"]["description"])."')";
$sql2 .= ", '".$this->db->escape($this->multilangs[$key]["description"])."')";
}
dol_syslog(get_class($this).'::setMultiLangs', LOG_DEBUG);
if (!$this->db->query($sql2)) {
$this->error = $this->db->lasterror();
return -1;
}
} elseif (isset($this->multilangs["$key"])) {
} elseif (isset($this->multilangs[$key])) {
if ($this->db->num_rows($result)) { // si aucune ligne dans la base
$sql2 = "UPDATE ".MAIN_DB_PREFIX."categorie_lang";
$sql2 .= " SET label='".$this->db->escape($this->multilangs["$key"]["label"])."',";
$sql2 .= " description='".$this->db->escape($this->multilangs["$key"]["description"])."'";
$sql2 .= " SET label='".$this->db->escape($this->multilangs[$key]["label"])."',";
$sql2 .= " description='".$this->db->escape($this->multilangs[$key]["description"])."'";
$sql2 .= " WHERE fk_category=".((int) $this->id)." AND lang='".$this->db->escape($key)."'";
} else {
$sql2 = "INSERT INTO ".MAIN_DB_PREFIX."categorie_lang (fk_category, lang, label, description)";
$sql2 .= " VALUES(".((int) $this->id).", '".$this->db->escape($key)."', '".$this->db->escape($this->multilangs["$key"]["label"])."'";
$sql2 .= ",'".$this->db->escape($this->multilangs["$key"]["description"])."')";
$sql2 .= " VALUES(".((int) $this->id).", '".$this->db->escape($key)."', '".$this->db->escape($this->multilangs[$key]["label"])."'";
$sql2 .= ",'".$this->db->escape($this->multilangs[$key]["description"])."')";
}
// on ne sauvegarde pas des champs vides
if ($this->multilangs["$key"]["label"] || $this->multilangs["$key"]["description"] || $this->multilangs["$key"]["note"]) {
if ($this->multilangs[$key]["label"] || $this->multilangs[$key]["description"] || $this->multilangs[$key]["note"]) {
dol_syslog(get_class($this).'::setMultiLangs', LOG_DEBUG);
}
if (!$this->db->query($sql2)) {
@ -1950,8 +1964,8 @@ class Categorie extends CommonObject
$this->label = $obj->label;
$this->description = $obj->description;
}
$this->multilangs["$obj->lang"]["label"] = $obj->label;
$this->multilangs["$obj->lang"]["description"] = $obj->description;
$this->multilangs[$obj->lang]["label"] = $obj->label;
$this->multilangs[$obj->lang]["description"] = $obj->description;
}
return 1;
} else {

View file

@ -66,24 +66,10 @@ $ref = GETPOST('ref', 'alpha');
$action = GETPOST('action', 'aZ09');
$cancel = GETPOST('cancel', 'alpha');
$confirm = GETPOST('confirm', 'alpha');
$contextpage = 'banktransactionlist'.(empty($object->ref) ? '' : '-'.$object->id);
$contextpage = 'banktransactionlist';
$massaction = GETPOST('massaction', 'alpha');
$optioncss = GETPOST('optioncss', 'aZ09');
// Security check
$fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref : ''));
$fieldtype = (!empty($ref) ? 'ref' : 'rowid');
if ($fieldvalue) {
if ($user->socid) {
$socid = $user->socid;
}
$result = restrictedArea($user, 'banque', $fieldvalue, 'bank_account&bank_account', '', '', $fieldtype);
} else {
if ($user->socid) {
$socid = $user->socid;
}
$result = restrictedArea($user, 'banque');
}
$dateop = dol_mktime(12, 0, 0, GETPOST("opmonth", 'int'), GETPOST("opday", 'int'), GETPOST("opyear", 'int'));
$search_debit = GETPOST("search_debit", 'alpha');
@ -143,6 +129,9 @@ if ($id > 0 || !empty($ref)) {
}
}
// redefine contextpage to depend on bank account
$contextpage = 'banktransactionlist'.(empty($object->id) ? '' : '-'.$object->id);
$mode_balance_ok = false;
//if (($sortfield == 'b.datev' || $sortfield == 'b.datev,b.dateo,b.rowid')) // TODO Manage balance when account not selected
if (($sortfield == 'b.datev' || $sortfield == 'b.datev,b.dateo,b.rowid')) {
@ -183,6 +172,22 @@ include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php';
$object->fields = dol_sort_array($object->fields, 'position');
$arrayfields = dol_sort_array($arrayfields, 'position');
// Security check
$fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref : ''));
$fieldtype = (!empty($ref) ? 'ref' : 'rowid');
if ($fieldvalue) {
if ($user->socid) {
$socid = $user->socid;
}
$result = restrictedArea($user, 'banque', $fieldvalue, 'bank_account&bank_account', '', '', $fieldtype);
} else {
if ($user->socid) {
$socid = $user->socid;
}
$result = restrictedArea($user, 'banque');
}
/*
* Actions
*/
@ -266,6 +271,9 @@ if ((GETPOST('confirm_savestatement', 'alpha') || GETPOST('confirm_reconcile', '
}
}
}
if (!$error && count($rowids) > 0) {
setEventMessages($langs->trans("XNewLinesConciliated", count($rowids)), null);
}
} else {
$error++;
$langs->load("errors");
@ -278,7 +286,7 @@ if ((GETPOST('confirm_savestatement', 'alpha') || GETPOST('confirm_reconcile', '
}
if (!$error) {
$param = 'action=reconcile&contextpage=banktransactionlist&id='.((int) $id).'&search_account='.((int) $id);
$param = 'action=reconcile&contextpage=banktransactionlist&id='.((int) $object->id).'&search_account='.((int) $object->id);
if ($page) {
$param .= '&page='.urlencode($page);
}

View file

@ -2331,7 +2331,7 @@ class AccountLine extends CommonObjectLine
dol_syslog(get_class($this)."::update_conciliation", LOG_DEBUG);
$resql = $this->db->query($sql);
if ($resql) {
if (!empty($cat)) {
if (!empty($cat) && $cat > 0) {
$sql = "INSERT INTO ".MAIN_DB_PREFIX."bank_class (";
$sql .= "lineid";
$sql .= ", fk_categ";
@ -2344,6 +2344,7 @@ class AccountLine extends CommonObjectLine
$this->db->query($sql);
// No error check. Can fail if category already affected
// TODO Do no try the insert if link already exists
}
$this->rappro = 1;

View file

@ -65,12 +65,12 @@ $backtopage = GETPOST('backtopage', 'alpha');
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
$hookmanager->initHooks(array('bankaccountstatement', 'globalcard'));
if ($user->rights->banque->consolidate && $action == 'dvnext' && !empty($dvid)) {
if ($user->hasRight('banque', 'consolidate') && $action == 'dvnext' && !empty($dvid)) {
$al = new AccountLine($db);
$al->datev_next($dvid);
}
if ($user->rights->banque->consolidate && $action == 'dvprev' && !empty($dvid)) {
if ($user->hasRight('banque', 'consolidate') && $action == 'dvprev' && !empty($dvid)) {
$al = new AccountLine($db);
$al->datev_previous($dvid);
}
@ -104,11 +104,9 @@ if ($id > 0 || !empty($ref)) {
$id = $object->id; // Force the search field on id of account
}
// Initialize technical object to manage context to save list fields
$contextpage = 'banktransactionlist'.(empty($object->ref) ? '' : '-'.$object->id);
// Security check
$fieldid = (!empty($ref) ? $ref : $id);
$fieldname = (!empty($ref) ? 'ref' : 'rowid');
@ -118,60 +116,63 @@ if ($user->socid) {
$result = restrictedArea($user, 'banque', $fieldid, 'bank_account', '', '', $fieldname);
$error = 0;
// Define number of receipt to show (current, previous or next one ?)
$found = false;
if ($rel == 'prev') {
// Recherche valeur pour num = numero releve precedent
$sql = "SELECT DISTINCT(b.num_releve) as num";
$sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
$sql .= " WHERE b.num_releve < '".$db->escape($numref)."'";
$sql .= " AND b.fk_account = ".((int) $object->id);
$sql .= " AND d.entity IN (".getEntity($object->element).")";
$sql .= " ORDER BY b.num_releve DESC";
$foundprevious = '';
$foundnext = '';
// Search previous receipt number
$sql = "SELECT b.num_releve as num";
$sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
$sql .= " WHERE b.num_releve < '".$db->escape($numref)."'";
$sql .= " AND b.fk_account = ".((int) $object->id);
$sql .= " ORDER BY b.num_releve DESC";
$sql .= $db->plimit(1);
dol_syslog("htdocs/compta/bank/releve.php", LOG_DEBUG);
$resql = $db->query($sql);
if ($resql) {
$numrows = $db->num_rows($resql);
if ($numrows > 0) {
$obj = $db->fetch_object($resql);
dol_syslog("htdocs/compta/bank/releve.php", LOG_DEBUG);
$resql = $db->query($sql);
if ($resql) {
$numrows = $db->num_rows($resql);
if ($numrows > 0) {
$obj = $db->fetch_object($resql);
if ($rel == 'prev') {
$numref = $obj->num;
$found = true;
}
}
} elseif ($rel == 'next') {
// Recherche valeur pour num = numero releve precedent
$sql = "SELECT DISTINCT(b.num_releve) as num";
$sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
$sql .= " WHERE b.num_releve > '".$db->escape($numref)."'";
$sql .= " AND b.fk_account = ".((int) $object->id);
$sql .= " AND d.entity IN (".getEntity($object->element).")";
$sql .= " ORDER BY b.num_releve ASC";
dol_syslog("htdocs/compta/bank/releve.php", LOG_DEBUG);
$resql = $db->query($sql);
if ($resql) {
$numrows = $db->num_rows($resql);
if ($numrows > 0) {
$obj = $db->fetch_object($resql);
$numref = $obj->num;
$found = true;
}
$foundprevious = $obj->num;
}
} else {
// On veut le releve num
$found = true;
dol_print_error($db);
}
// Search next receipt
$sql = "SELECT b.num_releve as num";
$sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
$sql .= " WHERE b.num_releve > '".$db->escape($numref)."'";
$sql .= " AND b.fk_account = ".((int) $object->id);
$sql .= " ORDER BY b.num_releve ASC";
$sql .= $db->plimit(1);
dol_syslog("htdocs/compta/bank/releve.php", LOG_DEBUG);
$resql = $db->query($sql);
if ($resql) {
$numrows = $db->num_rows($resql);
if ($numrows > 0) {
$obj = $db->fetch_object($resql);
if ($rel == 'next') {
$numref = $obj->num;
}
$foundnext = $obj->num;
}
} else {
dol_print_error($db);
}
$sql = "SELECT b.rowid, b.dateo as do, b.datev as dv,";
$sql .= " b.amount, b.label, b.rappro, b.num_releve, b.num_chq, b.fk_type,";
$sql .= " b.fk_bordereau,";
$sql .= " bc.ref,";
$sql .= " ba.rowid as bankid, ba.ref as bankref, ba.label as banklabel";
$sql .= " FROM ".MAIN_DB_PREFIX."bank_account as ba";
$sql .= ", ".MAIN_DB_PREFIX."bank as b";
$sql .= " FROM ".MAIN_DB_PREFIX."bank_account as ba,";
$sql .= " ".MAIN_DB_PREFIX."bank as b";
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'bordereau_cheque as bc ON bc.rowid=b.fk_bordereau';
$sql .= " WHERE b.num_releve = '".$db->escape($numref)."'";
if (empty($numref)) {
@ -179,27 +180,45 @@ if (empty($numref)) {
}
$sql .= " AND b.fk_account = ".((int) $object->id);
$sql .= " AND b.fk_account = ba.rowid";
$sql .= " AND d.entity IN (".getEntity($object->element).")";
$sql .= " AND ba.entity IN (".getEntity($object->element).")";
$sql .= $db->order("b.datev, b.datec", "ASC"); // We add date of creation to have correct order when everything is done the same day
$sqlrequestforbankline = $sql;
/*
* Actions
*/
if ($action == 'confirm_editbankreceipt' && !empty($oldbankreceipt) && !empty($newbankreceipt)) {
// TODO Add a test to check newbankreceipt does not exists yet
$sqlupdate = "UPDATE ".MAIN_DB_PREFIX."bank SET num_releve = '".$db->escape($newbankreceipt)."'";
$sqlupdate .= " WHERE num_releve = '".$db->escape($oldbankreceipt)."' AND fk_account = ".((int) $id);
$sqlupdate .= " AND entity IN (".getEntity($object->element).")";
$result = $db->query($sqlupdate);
if ($result < 0) {
// Test to check newbankreceipt does not exists yet
$sqltest = "SELECT b.rowid FROM ".MAIN_DB_PREFIX."bank as b, ".MAIN_DB_PREFIX."bank_account as ba";
$sqltest .= " WHERE b.fk_account = ba.rowid AND ba.entity = ".((int) $conf->entity);
$sqltest .= " AND num_releve = '".$db->escape($newbankreceipt)."'";
$sqltest .= $db->plimit(1); // Need the first one only
$resql = $db->query($sqltest);
if ($resql) {
$obj = $db->fetch_object($resql);
if ($obj && $obj->rowid) {
setEventMessages('ErrorThisBankReceiptIsAlreadyUsed', null, 'errors');
$error++;
}
} else {
dol_print_error($db);
}
// Update bank receipt name
if (!$error) {
$sqlupdate = "UPDATE ".MAIN_DB_PREFIX."bank SET num_releve = '".$db->escape($newbankreceipt)."'";
$sqlupdate .= " WHERE num_releve = '".$db->escape($oldbankreceipt)."' AND fk_account = ".((int) $id);
$resql = $db->query($sqlupdate);
if (!$resql) {
dol_print_error($db);
}
}
$action = 'view';
}
@ -207,6 +226,7 @@ if ($action == 'confirm_editbankreceipt' && !empty($oldbankreceipt) && !empty($n
/*
* View
*/
$form = new Form($db);
$societestatic = new Societe($db);
$chargestatic = new ChargeSociales($db);
@ -294,7 +314,7 @@ if (empty($numref)) {
}
// If not cash account and can be reconciliate
if ($user->rights->banque->consolidate) {
if ($user->hasRight('banque', 'consolidate')) {
$buttonreconcile = '<a class="butAction" href="'.DOL_URL_ROOT.'/compta/bank/bankentries_list.php?action=reconcile&sortfield=b.datev,b.dateo,b.rowid&sortorder=asc,asc,asc&search_conciliated=0&search_account='.$id.$param.'">'.$titletoconciliatemanual.'</a>';
} else {
$buttonreconcile = '<a class="butActionRefused classfortooltip" title="'.$langs->trans("NotEnoughPermissions").'" href="#">'.$titletoconciliatemanual.'</a>';
@ -303,7 +323,7 @@ if (empty($numref)) {
if ($allowautomaticconciliation) {
// If not cash account and can be reconciliate
if ($user->rights->banque->consolidate) {
if ($user->hasRight('banque', 'consolidate')) {
$newparam = $param;
$newparam = preg_replace('/search_conciliated=\d+/i', '', $newparam);
$buttonreconcile .= ' <a class="butAction" style="margin-bottom: 5px !important; margin-top: 5px !important" href="'.DOL_URL_ROOT.'/compta/bank/bankentries_list.php?action=reconcile&sortfield=b.datev,b.dateo,b.rowid&sortorder=asc,asc,asc&search_conciliated=0'.$newparam.'">'.$titletoconciliateauto.'</a>';
@ -351,8 +371,8 @@ if (empty($numref)) {
} else {
print '<input type="hidden" name="oldbankreceipt" value="'.$objp->numr.'">';
print '<input type="text" name="newbankreceipt" value="'.$objp->numr.'">';
print '<input type="submit" class="button small" name="actionnewbankreceipt" value="'.$langs->trans("Rename").'">';
print '<input type="submit" class="button button-cancel small" name="cancel" value="'.$langs->trans("Cancel").'">';
print '<input type="submit" class="button smallpaddingimp" name="actionnewbankreceipt" value="'.$langs->trans("Rename").'">';
print '<input type="submit" class="button button-cancel smallpaddingimp" name="cancel" value="'.$langs->trans("Cancel").'">';
}
print '</td>';
@ -411,9 +431,13 @@ if (empty($numref)) {
$morehtmlright = '';
$morehtmlright .= '<div class="pagination"><ul>';
$morehtmlright .= '<li class="pagination"><a class="paginationnext" href="'.$_SERVER["PHP_SELF"].'?rel=prev&amp;num='.$numref.'&amp;ve='.$ve.'&amp;account='.$object->id.'"><i class="fa fa-chevron-left" title="'.dol_escape_htmltag($langs->trans("Previous")).'"></i></a></li>';
if ($foundprevious) {
$morehtmlright .= '<li class="pagination"><a class="paginationnext" href="'.$_SERVER["PHP_SELF"].'?num='.urlencode($foundprevious).'&amp;ve='.urlencode($ve).'&amp;account='.((int) $object->id).'"><i class="fa fa-chevron-left" title="'.dol_escape_htmltag($langs->trans("Previous")).'"></i></a></li>';
}
$morehtmlright .= '<li class="pagination"><span class="active">'.$langs->trans("AccountStatement")." ".$numref.'</span></li>';
$morehtmlright .= '<li class="pagination"><a class="paginationnext" href="'.$_SERVER["PHP_SELF"].'?rel=next&amp;num='.$numref.'&amp;ve='.$ve.'&amp;account='.$object->id.'"><i class="fa fa-chevron-right" title="'.dol_escape_htmltag($langs->trans("Next")).'"></i></a></li>';
if ($foundnext) {
$morehtmlright .= '<li class="pagination"><a class="paginationnext" href="'.$_SERVER["PHP_SELF"].'?num='.urlencode($foundnext).'&amp;ve='.urlencode($ve).'&amp;account='.((int) $object->id).'"><i class="fa fa-chevron-right" title="'.dol_escape_htmltag($langs->trans("Next")).'"></i></a></li>';
}
$morehtmlright .= '</ul></div>';
$title = $langs->trans("AccountStatement").' '.$numref.' - '.$langs->trans("BankAccount").' '.$object->getNomUrl(1, 'receipts');
@ -449,6 +473,8 @@ if (empty($numref)) {
$db->free($resql);
}
$totalc = $totald = 0;
// Recherche les ecritures pour le releve
$sql = $sqlrequestforbankline;
@ -667,10 +693,12 @@ if (empty($numref)) {
$i++;
}
$db->free($result);
} else {
dol_print_error($db);
}
// Line Total
print "\n".'<tr class="liste_total"><td class="right" colspan="4">'.$langs->trans("Total")." :</td><td class=\"right\">".price($totald)."</td><td class=\"right\">".price($totalc)."</td><td>&nbsp;</td><td>&nbsp;</td></tr>";
print "\n".'<tr class="liste_total"><td class="right" colspan="4">'.$langs->trans("Total").' :</td><td class="right">'.price($totald).'</td><td class="right">'.price($totalc)."</td><td>&nbsp;</td><td>&nbsp;</td></tr>";
// Line Balance
print "\n<tr>";

View file

@ -49,24 +49,24 @@ class Cpaiement
public $code;
/**
* @var int ID
* @var int ID
*/
public $id;
/**
* @var string[] array of errors messages
* @var string[] array of errors messages
*/
public $errors;
/**
* @var string
* @var string
* @deprecated
* @see $label
*/
public $libelle;
/**
* @var string
* @var string
*/
public $label;

View file

@ -383,7 +383,7 @@ if ($resql) {
print "</table>";
print '</div>';
$db->free($result);
$db->free($resql);
} else {
dol_print_error($db);
}

View file

@ -74,6 +74,10 @@ class Cchargesociales
public $module;
public $accountancy_code;
/**
* @var array array of errors
*/
public $errors = array();
/**
* Constructor

View file

@ -243,41 +243,6 @@ class Contact extends CommonObject
*/
public $socialnetworks;
/**
* Skype username
* @var string
* @deprecated
*/
public $skype;
/**
* Twitter username
* @var string
* @deprecated
*/
public $twitter;
/**
* Facebook username
* @var string
* @deprecated
*/
public $facebook;
/**
* Linkedin username
* @var string
* @deprecated
*/
public $linkedin;
/**
* Jabber username
* @var string
* @deprecated
*/
public $jabberid;
/**
* @var string filename for photo
*/
@ -1699,6 +1664,8 @@ class Contact extends CommonObject
$this->email = 'specimen@specimen.com';
$this->socialnetworks = array(
'skype' => 'tom.hanson',
'twitter' => 'tomhanson',
'linkedin' => 'tomhanson',
);
$this->phone_pro = '0909090901';
$this->phone_perso = '0909090902';

View file

@ -95,12 +95,12 @@ class CSMSFile
}
// If ending method not defined
if (empty($conf->global->MAIN_SMS_SENDMODE)) {
if (!getDolGlobalString('MAIN_SMS_SENDMODE')) {
$this->error = 'No SMS Engine defined';
throw new Exception('No SMS Engine defined');
}
dol_syslog("CSMSFile::CSMSFile: MAIN_SMS_SENDMODE=".$conf->global->MAIN_SMS_SENDMODE." charset=".$conf->file->character_set_client." from=".$from.", to=".$to.", msg length=".strlen($msg), LOG_DEBUG);
dol_syslog("CSMSFile::CSMSFile: MAIN_SMS_SENDMODE=".getDolGlobalString('MAIN_SMS_SENDMODE')." charset=".$conf->file->character_set_client." from=".$from.", to=".$to.", msg length=".strlen($msg), LOG_DEBUG);
dol_syslog("CSMSFile::CSMSFile: deferred=".$deferred." priority=".$priority." class=".$class, LOG_DEBUG);
// Action according to choosed sending method
@ -138,69 +138,51 @@ class CSMSFile
}
if (empty($conf->global->MAIN_DISABLE_ALL_SMS)) {
// Action according to choosed sending method
if (getDolGlobalString('MAIN_SMS_SENDMODE') == 'ovh') { // Backward compatibility @deprecated
dol_include_once('/ovh/class/ovhsms.class.php');
/** @phpstan-ignore-next-line */
$sms = new OvhSms($this->db);
$sms->expe = $this->addr_from;
$sms->dest = $this->addr_to;
$sms->message = $this->message;
$sms->deferred = $this->deferred;
$sms->priority = $this->priority;
$sms->class = $this->class;
$sms->nostop = $this->nostop;
$sms->socid = $this->socid;
$sms->contact_id = $this->contact_id;
$sms->member_id = $this->member_id;
$sms->project = $this->fk_project;
$res = $sms->SmsSend();
if ($res <= 0) {
$this->error = $sms->error;
dol_syslog("CSMSFile::sendfile: sms send error=".$this->error, LOG_ERR);
} else {
dol_syslog("CSMSFile::sendfile: sms send success with id=".$res, LOG_DEBUG);
//var_dump($res); // 1973128
if (!empty($conf->global->MAIN_SMS_DEBUG)) {
$this->dump_sms_result($res);
}
// Action according to the choosed sending method
if (getDolGlobalString('MAIN_SMS_SENDMODE')) {
$sendmode = getDolGlobalString('MAIN_SMS_SENDMODE'); // $conf->global->MAIN_SMS_SENDMODE looks like a value 'module'
$classmoduleofsender = getDolGlobalString('MAIN_MODULE_'.strtoupper($sendmode).'_SMS', $sendmode); // $conf->global->MAIN_MODULE_XXX_SMS looks like a value 'class@module'
if ($classmoduleofsender == 'ovh') {
$classmoduleofsender = 'ovhsms@ovh'; // For backward compatibility
}
} elseif (!empty($conf->global->MAIN_SMS_SENDMODE)) { // $conf->global->MAIN_SMS_SENDMODE looks like a value 'class@module'
$tmp = explode('@', $conf->global->MAIN_SMS_SENDMODE);
$tmp = explode('@', $classmoduleofsender);
$classfile = $tmp[0];
$module = (empty($tmp[1]) ? $tmp[0] : $tmp[1]);
dol_include_once('/'.$module.'/class/'.$classfile.'.class.php');
dol_include_once('/'.$module.'/class/'.strtolower($classfile).'.class.php');
try {
$classname = ucfirst($classfile);
$sms = new $classname($this->db);
$sms->expe = $this->addr_from;
$sms->dest = $this->addr_to;
$sms->deferred = $this->deferred;
$sms->priority = $this->priority;
$sms->class = $this->class;
$sms->message = $this->message;
$sms->nostop = $this->nostop;
if (class_exists($classname)) {
$sms = new $classname($this->db);
$sms->expe = $this->addr_from;
$sms->dest = $this->addr_to;
$sms->deferred = $this->deferred;
$sms->priority = $this->priority;
$sms->class = $this->class;
$sms->message = $this->message;
$sms->nostop = $this->nostop;
$sms->socid = $this->socid;
$sms->contact_id = $this->contact_id;
$sms->member_id = $this->member_id;
$sms->fk_project = $this->fk_project;
$sms->socid = $this->socid;
$sms->contact_id = $this->contact_id;
$sms->member_id = $this->member_id;
$sms->fk_project = $this->fk_project;
$res = $sms->SmsSend();
$res = $sms->SmsSend();
$this->error = $sms->error;
$this->errors = $sms->errors;
if ($res <= 0) {
dol_syslog("CSMSFile::sendfile: sms send error=".$this->error, LOG_ERR);
} else {
dol_syslog("CSMSFile::sendfile: sms send success with id=".$res, LOG_DEBUG);
//var_dump($res); // 1973128
if (!empty($conf->global->MAIN_SMS_DEBUG)) {
$this->dump_sms_result($res);
$this->error = $sms->error;
$this->errors = $sms->errors;
if ($res <= 0) {
dol_syslog("CSMSFile::sendfile: sms send error=".$this->error, LOG_ERR);
} else {
dol_syslog("CSMSFile::sendfile: sms send success with id=".$res, LOG_DEBUG);
//var_dump($res); // 1973128
if (!empty($conf->global->MAIN_SMS_DEBUG)) {
$this->dump_sms_result($res);
}
}
} else {
$sms = new stdClass();
$sms->error = 'The SMS manager "'.$classfile.'" defined into SMS setup MAIN_MODULE_'.strtoupper($sendmode).'_SMS is not found';
}
} catch (Exception $e) {
dol_print_error('', 'Error to get list of senders: '.$e->getMessage());

View file

@ -109,6 +109,21 @@ abstract class CommonDocGenerator
public $option_escompte;
public $option_credit_note;
/**
* @var int Tab Title Height
*/
public $tabTitleHeight;
/**
* @var array default title fields style
*/
public $defaultTitlesFieldsStyle;
/**
* @var array default content fields style
*/
public $defaultContentsFieldsStyle;
/**
* @var Societe Issuer of document
*/

View file

@ -927,7 +927,7 @@ abstract class CommonInvoice extends CommonObject
* @param string $type 'direct-debit' or 'bank-transfer'
* @param string $sourcetype Source ('facture' or 'supplier_invoice')
* @param string $service 'StripeTest', 'StripeLive', ...
* @param string $forcestripe To force another stripe env
* @param string $forcestripe To force another stripe env: 'cus_account@pk_...:sk_...'
* @return int <0 if KO, >0 if OK
*/
public function makeStripeSepaRequest($fuser, $did, $type = 'direct-debit', $sourcetype = 'facture', $service = '', $forcestripe = '')
@ -950,7 +950,7 @@ abstract class CommonInvoice extends CommonObject
$error = 0;
dol_syslog(get_class($this)."::makeStripeSepaRequest start", LOG_DEBUG);
dol_syslog(get_class($this)."::makeStripeSepaRequest start did=".$did." type=".$type." service=".$service." sourcetype=".$sourcetype." forcestripe=".$forcestripe, LOG_DEBUG);
if ($this->status > self::STATUS_DRAFT && $this->paye == 0) {
// Get the default payment mode for BAN payment of the third party
@ -993,8 +993,6 @@ abstract class CommonInvoice extends CommonObject
$companypaymentmode = new CompanyPaymentMode($this->db); // table societe_rib
$companypaymentmode->fetch($bac->id);
dol_syslog("makeStripeSepaRequest amount = ".$amount." service=" . $service . " thirdparty_id=" . $this->socid." did=".$did);
$this->stripechargedone = 0;
$this->stripechargeerror = 0;
@ -1006,7 +1004,7 @@ abstract class CommonInvoice extends CommonObject
$this->fetch_thirdparty();
dol_syslog("--- Process payment request thirdparty_id=" . $this->thirdparty->id . ", thirdparty_name=" . $this->thirdparty->name . " ban id=" . $bac->id, LOG_DEBUG);
dol_syslog("--- Process payment request amount=".$amount." thirdparty_id=" . $this->thirdparty->id . ", thirdparty_name=" . $this->thirdparty->name . " ban id=" . $bac->id, LOG_DEBUG);
//$alreadypayed = $this->getSommePaiement();
//$amount_credit_notes_included = $this->getSumCreditNotesUsed();
@ -1099,17 +1097,9 @@ abstract class CommonInvoice extends CommonObject
$tmparray = explode('@', $forcestripe);
if (! empty($tmparray[1])) {
$tmparray2 = explode(':', $tmparray[1]);
if (! empty($tmparray2[3])) {
$stripearrayofkeysbyenv = array(
0=>array(
"publishable_key" => $tmparray2[0],
"secret_key" => $tmparray2[1]
),
1=>array(
"publishable_key" => $tmparray2[2],
"secret_key" => $tmparray2[3]
)
);
if (! empty($tmparray2[1])) {
$stripearrayofkeysbyenv[$servicestatus]["publishable_key"] = $tmparray2[0];
$stripearrayofkeysbyenv[$servicestatus]["secret_key"] = $tmparray2[1];
$stripearrayofkeys = $stripearrayofkeysbyenv[$servicestatus];
\Stripe\Stripe::setApiKey($stripearrayofkeys['secret_key']);

View file

@ -3715,18 +3715,21 @@ abstract class CommonObject
$this->multicurrency_total_ttc += isset($this->revenuestamp) ? ($this->revenuestamp * $multicurrency_tx) : 0;
// Situations totals
if (!empty($this->situation_cycle_ref) && $this->situation_counter > 1 && method_exists($this, 'get_prev_sits') && $this->type != $this::TYPE_CREDIT_NOTE) {
$prev_sits = $this->get_prev_sits();
if (!empty($this->situation_cycle_ref) && !empty($this->situation_counter) && $this->situation_counter > 1 && method_exists($this, 'get_prev_sits')) {
include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
if ($this->type != Facture::TYPE_CREDIT_NOTE) {
$prev_sits = $this->get_prev_sits();
foreach ($prev_sits as $sit) { // $sit is an object Facture loaded with a fetch.
$this->total_ht -= $sit->total_ht;
$this->total_tva -= $sit->total_tva;
$this->total_localtax1 -= $sit->total_localtax1;
$this->total_localtax2 -= $sit->total_localtax2;
$this->total_ttc -= $sit->total_ttc;
$this->multicurrency_total_ht -= $sit->multicurrency_total_ht;
$this->multicurrency_total_tva -= $sit->multicurrency_total_tva;
$this->multicurrency_total_ttc -= $sit->multicurrency_total_ttc;
foreach ($prev_sits as $sit) { // $sit is an object Facture loaded with a fetch.
$this->total_ht -= $sit->total_ht;
$this->total_tva -= $sit->total_tva;
$this->total_localtax1 -= $sit->total_localtax1;
$this->total_localtax2 -= $sit->total_localtax2;
$this->total_ttc -= $sit->total_ttc;
$this->multicurrency_total_ht -= $sit->multicurrency_total_ht;
$this->multicurrency_total_tva -= $sit->multicurrency_total_tva;
$this->multicurrency_total_ttc -= $sit->multicurrency_total_ttc;
}
}
}
@ -5380,7 +5383,9 @@ abstract class CommonObject
if (isset($this->lines) && is_array($this->lines)) {
$nboflines = count($this->lines);
for ($i = 0; $i < $nboflines; $i++) {
$this->lines[$i] = clone $this->lines[$i];
if (is_object($this->lines[$i])) {
$this->lines[$i] = clone $this->lines[$i];
}
}
}
}
@ -9199,15 +9204,21 @@ abstract class CommonObject
/**
* Function to concat keys of fields
*
* @param string $alias String of alias of table for fields. For example 't'. It is recommended to use '' and set alias into fields defintion.
* @return string list of alias fields
* @param string $alias String of alias of table for fields. For example 't'. It is recommended to use '' and set alias into fields defintion.
* @param array $excludefields Array of fields to exclude
* @return string List of alias fields
*/
public function getFieldList($alias = '')
public function getFieldList($alias = '', $excludefields = array())
{
$keys = array_keys($this->fields);
if (!empty($alias)) {
$keys_with_alias = array();
foreach ($keys as $fieldname) {
if (!empty($excludefields)) {
if (in_array($fieldname, $excludefields)) { // The field is excluded and must not be in output
continue;
}
}
$keys_with_alias[] = $alias . '.' . $fieldname;
}
return implode(',', $keys_with_alias);

View file

@ -374,11 +374,9 @@ class Conf
$newvalue = '/'.$modulename.'/core/'.$partname.'/';
} elseif (in_array($partname, array('models', 'theme'))) {
$newvalue = '/'.$modulename.'/';
} elseif (in_array($partname, array('sms'))) {
$newvalue = '/'.$modulename.'/';
} elseif ($value == 1) {
$newvalue = '/'.$modulename.'/core/modules/'.$partname.'/'; // ex: partname = societe
} else {
} else { // $partname can be any other value like 'sms', ...
$newvalue = $value;
}

View file

@ -73,7 +73,6 @@
* <dol_value_customer_mail> Replaced by customer mail
* <dol_value_customer_phone> Replaced by customer phone
* <dol_value_customer_mobile> Replaced by customer mobile
* <dol_value_customer_skype> Replaced by customer skype
* <dol_value_customer_tax_number> Replaced by customer VAT number
* <dol_value_customer_account_balance> Replaced by customer account balance
* <dol_value_mysoc_name> Replaced by mysoc name
@ -232,7 +231,6 @@ class dolReceiptPrinter extends Printer
'dol_value_customer_lastname' => 'DOL_VALUE_CUSTOMER_LASTNAME',
'dol_value_customer_mail' => 'DOL_VALUE_CUSTOMER_MAIL',
'dol_value_customer_phone' => 'DOL_VALUE_CUSTOMER_PHONE',
'dol_value_customer_skype' => 'DOL_VALUE_CUSTOMER_SKYPE',
'dol_value_customer_tax_number' => 'DOL_VALUE_CUSTOMER_TAX_NUMBER',
//'dol_value_customer_account_balance' => 'DOL_VALUE_CUSTOMER_ACCOUNT_BALANCE',
//'dol_value_customer_points' => 'DOL_VALUE_CUSTOMER_POINTS',

View file

@ -553,7 +553,7 @@ class ExtraFields
*/
public function update($attrname, $label, $type, $length, $elementtype, $unique = 0, $required = 0, $pos = 0, $param = '', $alwayseditable = 0, $perms = '', $list = '', $help = '', $default = '', $computed = '', $entity = '', $langfile = '', $enabled = '1', $totalizable = 0, $printable = 0, $moreparams = array())
{
global $hookmanager;
global $action, $hookmanager;
if ($elementtype == 'thirdparty') {
$elementtype = 'societe';
@ -2077,7 +2077,7 @@ class ExtraFields
*/
public function setOptionalsFromPost($extralabels, &$object, $onlykey = '', $todefaultifmissing = 0)
{
global $_POST, $langs;
global $conf, $_POST, $langs;
$nofillrequired = 0; // For error when required field left blank
$error_field_required = array();

View file

@ -38,17 +38,17 @@
*/
/**
* \file htdocs/core/class/html.form.class.php
* \ingroup core
* \brief File of class with all html predefined components
* \file htdocs/core/class/html.form.class.php
* \ingroup core
* \brief File of class with all html predefined components
*/
/**
* Class to manage generation of HTML components
* Only common components must be here.
* Class to manage generation of HTML components
* Only common components must be here.
*
* TODO Merge all function load_cache_* and loadCache* (except load_cache_vatrates) into one generic function loadCacheTable
* TODO Merge all function load_cache_* and loadCache* (except load_cache_vatrates) into one generic function loadCacheTable
*/
class Form
{
@ -94,18 +94,18 @@ class Form
/**
* Output key field for an editable field
*
* @param string $text Text of label or key to translate
* @param string $htmlname Name of select field ('edit' prefix will be added)
* @param string $preselected Value to show/edit (not used in this function)
* @param object $object Object (on the page we show)
* @param boolean $perm Permission to allow button to edit parameter. Set it to 0 to have a not edited field.
* @param string $typeofdata Type of data ('string' by default, 'email', 'amount:99', 'numeric:99', 'text' or 'textarea:rows:cols', 'datepicker' ('day' do not work, don't know why), 'dayhour' or 'datehourpicker' 'checkbox:ckeditor:dolibarr_zzz:width:height:savemethod:1:rows:cols', 'select;xxx[:class]'...)
* @param string $moreparam More param to add on a href URL.
* @param int $fieldrequired 1 if we want to show field as mandatory using the "fieldrequired" CSS.
* @param int $notabletag 1=Do not output table tags but output a ':', 2=Do not output table tags and no ':', 3=Do not output table tags but output a ' '
* @param string $paramid Key of parameter for id ('id', 'socid')
* @param string $help Tooltip help
* @return string HTML edit field
* @param string $text Text of label or key to translate
* @param string $htmlname Name of select field ('edit' prefix will be added)
* @param string $preselected Value to show/edit (not used in this function)
* @param object $object Object (on the page we show)
* @param boolean $perm Permission to allow button to edit parameter. Set it to 0 to have a not edited field.
* @param string $typeofdata Type of data ('string' by default, 'email', 'amount:99', 'numeric:99', 'text' or 'textarea:rows:cols', 'datepicker' ('day' do not work, don't know why), 'dayhour' or 'datehourpicker' 'checkbox:ckeditor:dolibarr_zzz:width:height:savemethod:1:rows:cols', 'select;xxx[:class]'...)
* @param string $moreparam More param to add on a href URL.
* @param int $fieldrequired 1 if we want to show field as mandatory using the "fieldrequired" CSS.
* @param int $notabletag 1=Do not output table tags but output a ':', 2=Do not output table tags and no ':', 3=Do not output table tags but output a ' '
* @param string $paramid Key of parameter for id ('id', 'socid')
* @param string $help Tooltip help
* @return string HTML edit field
*/
public function editfieldkey($text, $htmlname, $preselected, $object, $perm, $typeofdata = 'string', $moreparam = '', $fieldrequired = 0, $notabletag = 0, $paramid = 'id', $help = '')
{
@ -404,13 +404,13 @@ class Form
/**
* Output edit in place form
*
* @param string $fieldname Name of the field
* @param object $object Object
* @param boolean $perm Permission to allow button to edit parameter. Set it to 0 to have a not edited field.
* @param string $typeofdata Type of data ('string' by default, 'email', 'amount:99', 'numeric:99', 'text' or 'textarea:rows:cols', 'datepicker' ('day' do not work, don't know why), 'ckeditor:dolibarr_zzz:width:height:savemethod:1:rows:cols', 'select;xxx[:class]'...)
* @param string $check Same coe than $check parameter of GETPOST()
* @param string $morecss More CSS
* @return string HTML code for the edit of alternative language
* @param string $fieldname Name of the field
* @param object $object Object
* @param boolean $perm Permission to allow button to edit parameter. Set it to 0 to have a not edited field.
* @param string $typeofdata Type of data ('string' by default, 'email', 'amount:99', 'numeric:99', 'text' or 'textarea:rows:cols', 'datepicker' ('day' do not work, don't know why), 'ckeditor:dolibarr_zzz:width:height:savemethod:1:rows:cols', 'select;xxx[:class]'...)
* @param string $check Same coe than $check parameter of GETPOST()
* @param string $morecss More CSS
* @return string HTML code for the edit of alternative language
*/
public function widgetForTranslation($fieldname, $object, $perm, $typeofdata = 'string', $check = '', $morecss = '')
{
@ -476,15 +476,15 @@ class Form
/**
* Output edit in place form
*
* @param object $object Object
* @param string $value Value to show/edit
* @param string $htmlname DIV ID (field name)
* @param int $condition Condition to edit
* @param string $inputType Type of input ('string', 'numeric', 'datepicker' ('day' do not work, don't know why), 'textarea:rows:cols', 'ckeditor:dolibarr_zzz:width:height:?:1:rows:cols', 'select:loadmethod:savemethod:buttononly')
* @param string $editvalue When in edit mode, use this value as $value instead of value
* @param object $extObject External object
* @param mixed $custommsg String or Array of custom messages : eg array('success' => 'MyMessage', 'error' => 'MyMessage')
* @return string HTML edit in place
* @param object $object Object
* @param string $value Value to show/edit
* @param string $htmlname DIV ID (field name)
* @param int $condition Condition to edit
* @param string $inputType Type of input ('string', 'numeric', 'datepicker' ('day' do not work, don't know why), 'textarea:rows:cols', 'ckeditor:dolibarr_zzz:width:height:?:1:rows:cols', 'select:loadmethod:savemethod:buttononly')
* @param string $editvalue When in edit mode, use this value as $value instead of value
* @param object $extObject External object
* @param mixed $custommsg String or Array of custom messages : eg array('success' => 'MyMessage', 'error' => 'MyMessage')
* @return string HTML edit in place
*/
protected function editInPlace($object, $value, $htmlname, $condition, $inputType = 'textarea', $editvalue = null, $extObject = null, $custommsg = null)
{
@ -917,18 +917,18 @@ class Form
/**
* Return combo list of activated countries, into language of user
*
* @param string $selected Id or Code or Label of preselected country
* @param string $htmlname Name of html select object
* @param string $htmloption More html options on select object
* @param integer $maxlength Max length for labels (0=no limit)
* @param string $morecss More css class
* @param string $usecodeaskey ''=Use id as key (default), 'code3'=Use code on 3 alpha as key, 'code2"=Use code on 2 alpha as key
* @param int|string $showempty Show empty choice
* @param int $disablefavorites 1=Disable favorites,
* @param int $addspecialentries 1=Add dedicated entries for group of countries (like 'European Economic Community', ...)
* @param array $exclude_country_code Array of country code (iso2) to exclude
* @param int $hideflags Hide flags
* @return string HTML string with select
* @param string $selected Id or Code or Label of preselected country
* @param string $htmlname Name of html select object
* @param string $htmloption More html options on select object
* @param integer $maxlength Max length for labels (0=no limit)
* @param string $morecss More css class
* @param string $usecodeaskey ''=Use id as key (default), 'code3'=Use code on 3 alpha as key, 'code2"=Use code on 2 alpha as key
* @param int|string $showempty Show empty choice
* @param int $disablefavorites 1=Disable favorites,
* @param int $addspecialentries 1=Add dedicated entries for group of countries (like 'European Economic Community', ...)
* @param array $exclude_country_code Array of country code (iso2) to exclude
* @param int $hideflags Hide flags
* @return string HTML string with select
*/
public function select_country($selected = '', $htmlname = 'country_id', $htmloption = '', $maxlength = 0, $morecss = 'minwidth300', $usecodeaskey = '', $showempty = 1, $disablefavorites = 0, $addspecialentries = 0, $exclude_country_code = array(), $hideflags = 0)
{
@ -1053,15 +1053,15 @@ class Form
/**
* Return select list of incoterms
*
* @param string $selected Id or Code of preselected incoterm
* @param string $location_incoterms Value of input location
* @param string $page Defined the form action
* @param string $htmlname Name of html select object
* @param string $htmloption Options html on select object
* @param int $forcecombo Force to load all values and output a standard combobox (with no beautification)
* @param array $events Event options to run on change. Example: array(array('method'=>'getContacts', 'url'=>dol_buildpath('/core/ajax/contacts.php',1), 'htmlname'=>'contactid', 'params'=>array('add-customer-contact'=>'disabled')))
* @param array $disableautocomplete Disable autocomplete
* @return string HTML string with select and input
* @param string $selected Id or Code of preselected incoterm
* @param string $location_incoterms Value of input location
* @param string $page Defined the form action
* @param string $htmlname Name of html select object
* @param string $htmloption Options html on select object
* @param int $forcecombo Force to load all values and output a standard combobox (with no beautification)
* @param array $events Event options to run on change. Example: array(array('method'=>'getContacts', 'url'=>dol_buildpath('/core/ajax/contacts.php',1), 'htmlname'=>'contactid', 'params'=>array('add-customer-contact'=>'disabled')))
* @param array $disableautocomplete Disable autocomplete
* @return string HTML string with select and input
*/
public function select_incoterms($selected = '', $location_incoterms = '', $page = '', $htmlname = 'incoterm_id', $htmloption = '', $forcecombo = 1, $events = array(), $disableautocomplete = 0)
{
@ -1140,20 +1140,20 @@ class Form
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
/**
* Return list of types of lines (product or service)
* Example: 0=product, 1=service, 9=other (for external module)
* Return list of types of lines (product or service)
* Example: 0=product, 1=service, 9=other (for external module)
*
* @param string $selected Preselected type
* @param string $htmlname Name of field in html form
* @param int $showempty Add an empty field
* @param int $hidetext Do not show label 'Type' before combo box (used only if there is at least 2 choices to select)
* @param integer $forceall 1=Force to show products and services in combo list, whatever are activated modules, 0=No force, 2=Force to show only Products, 3=Force to show only services, -1=Force none (and set hidden field to 'service')
* @return void
* @param string $selected Preselected type
* @param string $htmlname Name of field in html form
* @param int $showempty Add an empty field
* @param int $hidetext Do not show label 'Type' before combo box (used only if there is at least 2 choices to select)
* @param integer $forceall 1=Force to show products and services in combo list, whatever are activated modules, 0=No force, 2=Force to show only Products, 3=Force to show only services, -1=Force none (and set hidden field to 'service')
* @return void
*/
public function select_type_of_lines($selected = '', $htmlname = 'type', $showempty = 0, $hidetext = 0, $forceall = 0)
{
// phpcs:enable
global $langs, $conf;
global $langs;
// If product & services are enabled or both disabled.
if ($forceall == 1 || (empty($forceall) && isModEnabled("product") && isModEnabled("service"))
@ -1416,22 +1416,24 @@ class Form
}
}
if (preg_match('/[\(\)]/', $filter)) {
// If there is one parenthesis inside the criteria, we assume it is an Universal Filter Syntax.
$errormsg = '';
$filter = forgeSQLFromUniversalSearchCriteria($filter, $errormsg, 1);
if ($filter != '') { // If a filter was provided
if (preg_match('/[\(\)]/', $filter)) {
// If there is one parenthesis inside the criteria, we assume it is an Universal Filter Syntax.
$errormsg = '';
$filter = forgeSQLFromUniversalSearchCriteria($filter, $errormsg, 1);
// Redo clean $filter that may contains sql conditions so sql code
if (function_exists('testSqlAndScriptInject')) {
if (testSqlAndScriptInject($filter, 3) > 0) {
$filter = '';
return 'SQLInjectionTryDetected';
// Redo clean $filter that may contains sql conditions so sql code
if (function_exists('testSqlAndScriptInject')) {
if (testSqlAndScriptInject($filter, 3) > 0) {
$filter = '';
return 'SQLInjectionTryDetected';
}
}
} else {
// If not, we do nothing. We already know that there is no parenthesis
// TODO Disallow this case in a future.
dol_syslog("Warning, select_thirdparty_list was called with a filter criteria not using the Universal Search Syntax.", LOG_WARNING);
}
} else {
// If not, we do nothing. We already no that there is no parenthesis
// TODO Disallow this case in a future.
dol_syslog("Warning, select_thirdparty_list was called with a filter criteria not using the Universal Search Syntax.", LOG_WARNING);
}
// We search companies
@ -7458,21 +7460,21 @@ class Form
/**
* Return list of projects in Ajax if Ajax activated or go to selectTicketsList
*
* @param int $selected Preselected tickets
* @param string $htmlname Name of HTML select field (must be unique in page).
* @param string $filtertype To add a filter
* @param int $limit Limit on number of returned lines
* @param int $status Ticket status
* @param string $selected_input_value Value of preselected input text (for use with ajax)
* @param int $hidelabel Hide label (0=no, 1=yes, 2=show search icon (before) and placeholder, 3 search icon after)
* @param array $ajaxoptions Options for ajax_autocompleter
* @param int $socid Thirdparty Id (to get also price dedicated to this customer)
* @param string $showempty '' to not show empty line. Translation key to show an empty line. '1' show empty line with no text.
* @param int $forcecombo Force to use combo box
* @param string $morecss Add more css on select
* @param array $selected_combinations Selected combinations. Format: array([attrid] => attrval, [...])
* @param string $nooutput No print, return the output into a string
* @return string
* @param int $selected Preselected tickets
* @param string $htmlname Name of HTML select field (must be unique in page).
* @param string $filtertype To add a filter
* @param int $limit Limit on number of returned lines
* @param int $status Ticket status
* @param string $selected_input_value Value of preselected input text (for use with ajax)
* @param int $hidelabel Hide label (0=no, 1=yes, 2=show search icon (before) and placeholder, 3 search icon after)
* @param array $ajaxoptions Options for ajax_autocompleter
* @param int $socid Thirdparty Id (to get also price dedicated to this customer)
* @param string $showempty '' to not show empty line. Translation key to show an empty line. '1' show empty line with no text.
* @param int $forcecombo Force to use combo box
* @param string $morecss Add more css on select
* @param array $selected_combinations Selected combinations. Format: array([attrid] => attrval, [...])
* @param string $nooutput No print, return the output into a string
* @return string
*/
public function selectProjects($selected = '', $htmlname = 'projectid', $filtertype = '', $limit = 0, $status = 1, $selected_input_value = '', $hidelabel = 0, $ajaxoptions = array(), $socid = 0, $showempty = '1', $forcecombo = 0, $morecss = '', $selected_combinations = null, $nooutput = 0)
{
@ -7494,6 +7496,7 @@ class Form
unset($projecttmpselect);
}
$urloption = '';
$out .= ajax_autocompleter($selected, $htmlname, DOL_URL_ROOT . '/projet/ajax/projects.php', $urloption, $conf->global->PRODUIT_USE_SEARCH_TO_SELECT, 1, $ajaxoptions);
if (empty($hidelabel)) $out .= $langs->trans("RefOrLabel") . ' : ';
@ -8573,7 +8576,7 @@ class Form
}
/**
* Show a multiselect form from an array. WARNING: Use this only for short lists.
* Show a multiselect form from an array. WARNING: Use this only for short lists.
*
* @param string $htmlname Name of select
* @param array $array Array(key=>value) or Array(key=>array('id'=>key, 'label'=>value, 'color'=> , 'picto'=> , 'labelhtml'=> ))
@ -10603,11 +10606,11 @@ class Form
/**
* selectModelMail
*
* @param string $prefix Prefix
* @param string $modelType Model type
* @param int $default 1=Show also Default mail template
* @param int $addjscombo Add js combobox
* @return string HTML select string
* @param string $prefix Prefix
* @param string $modelType Model type
* @param int $default 1=Show also Default mail template
* @param int $addjscombo Add js combobox
* @return string HTML select string
*/
public function selectModelMail($prefix, $modelType = '', $default = 0, $addjscombo = 0)
{
@ -10649,13 +10652,13 @@ class Form
/**
* Output the buttons to submit a creation/edit form
*
* @param string $save_label Alternative label for save button
* @param string $cancel_label Alternative label for cancel button
* @param array $morebuttons Add additional buttons between save and cancel
* @param bool $withoutdiv Option to remove enclosing centered div
* @param string $morecss More CSS
* @param string $dol_openinpopup If the button are shown in a context of a page shown inside a popup, we put here the string name of popup.
* @return string Html code with the buttons
* @param string $save_label Alternative label for save button
* @param string $cancel_label Alternative label for cancel button
* @param array $morebuttons Add additional buttons between save and cancel
* @param bool $withoutdiv Option to remove enclosing centered div
* @param string $morecss More CSS
* @param string $dol_openinpopup If the button are shown in a context of a page shown inside a popup, we put here the string name of popup.
* @return string Html code with the buttons
*/
public function buttonsSaveCancel($save_label = 'Save', $cancel_label = 'Cancel', $morebuttons = array(), $withoutdiv = 0, $morecss = '', $dol_openinpopup = '')
{

View file

@ -396,7 +396,7 @@ class FormAccounting extends Form
$num_rows = $this->db->num_rows($resql);
if ($num_rows == 0 && (empty(getDolGlobalInt('CHARTOFACCOUNTS')) || getDolGlobalInt('CHARTOFACCOUNTS') < 0)) {
if ($num_rows == 0 && getDolGlobalInt('CHARTOFACCOUNTS') <= 0) {
$langs->load("errors");
$showempty = $langs->trans("ErrorYouMustFirstSetupYourChartOfAccount");
} else {

View file

@ -1594,7 +1594,7 @@ class FormFile
public function list_of_autoecmfiles($upload_dir, $filearray, $modulepart, $param, $forcedownload = 0, $relativepath = '', $permissiontodelete = 1, $useinecm = 0, $textifempty = '', $maxlength = 0, $url = '', $addfilterfields = 0)
{
// phpcs:enable
global $user, $conf, $langs, $hookmanager, $form;
global $conf, $langs, $hookmanager, $form;
global $sortfield, $sortorder;
global $search_doc_ref;
global $dolibarr_main_url_root;
@ -1815,7 +1815,7 @@ class FormFile
}
$found = 0;
if (!empty($this->cache_objects[$modulepart.'_'.$id.'_'.$ref])) {
if (!empty($conf->cache['modulepartobject'][$modulepart.'_'.$id.'_'.$ref])) {
$found = 1;
} else {
//print 'Fetch '.$id." - ".$ref.' class='.get_class($object_instance).'<br>';
@ -1840,24 +1840,24 @@ class FormFile
if ($result > 0) { // Save object loaded into a cache
$found = 1;
$this->cache_objects[$modulepart.'_'.$id.'_'.$ref] = clone $object_instance;
$conf->cache['modulepartobject'][$modulepart.'_'.$id.'_'.$ref] = clone $object_instance;
}
if ($result == 0) {
$found = 1;
$this->cache_objects[$modulepart.'_'.$id.'_'.$ref] = 'notfound';
$conf->cache['modulepartobject'][$modulepart.'_'.$id.'_'.$ref] = 'notfound';
unset($filearray[$key]);
}
}
if ($found <= 0 || !is_object($this->cache_objects[$modulepart.'_'.$id.'_'.$ref])) {
if ($found <= 0 || !is_object($conf->cache['modulepartobject'][$modulepart.'_'.$id.'_'.$ref])) {
continue; // We do not show orphelins files
}
print '<!-- Line list_of_autoecmfiles key='.$key.' -->'."\n";
print '<tr class="oddeven">';
print '<td>';
if ($found > 0 && is_object($this->cache_objects[$modulepart.'_'.$id.'_'.$ref])) {
$tmpobject = $this->cache_objects[$modulepart.'_'.$id.'_'.$ref];
if ($found > 0 && is_object($conf->cache['modulepartobject'][$modulepart.'_'.$id.'_'.$ref])) {
$tmpobject = $conf->cache['modulepartobject'][$modulepart.'_'.$id.'_'.$ref];
//if (! in_array($tmpobject->element, array('expensereport'))) {
print $tmpobject->getNomUrl(1, 'document');
//} else {

View file

@ -208,6 +208,7 @@ class FormMargin
public function displayMarginInfos($object, $force_price = false)
{
global $langs, $conf, $user, $hookmanager;
global $action;
if (!empty($user->socid)) {
return;

View file

@ -471,6 +471,7 @@ class FormOther
{
// phpcs:enable
global $conf, $langs, $hookmanager;
global $action;
$langs->load('users');

View file

@ -110,7 +110,7 @@ class FormSms
public function show_form($morecss = 'titlefield', $showform = 1)
{
// phpcs:enable
global $conf, $langs, $user, $form;
global $conf, $langs, $form;
if (!is_object($form)) {
$form = new Form($this->db);
@ -185,21 +185,14 @@ function limitChars(textarea, limit, infodiv)
print "</td></tr>\n";
} else {
print '<tr><td class="'.$morecss.'">'.$langs->trans("SmsFrom")."</td><td>";
//print '<input type="text" name="fromname" size="30" value="'.$this->fromsms.'">';
if ($conf->global->MAIN_SMS_SENDMODE == 'ovh') { // For backward compatibility @deprecated
dol_include_once('/ovh/class/ovhsms.class.php');
try {
$sms = new OvhSms($this->db);
if (empty($conf->global->OVHSMS_ACCOUNT)) {
$resultsender = 'ErrorOVHSMS_ACCOUNT not defined';
} else {
$resultsender = $sms->SmsSenderList();
}
} catch (Exception $e) {
dol_print_error('', 'Error to get list of senders: '.$e->getMessage());
if (getDolGlobalString('MAIN_SMS_SENDMODE')) {
$sendmode = getDolGlobalString('MAIN_SMS_SENDMODE'); // $conf->global->MAIN_SMS_SENDMODE looks like a value 'module'
$classmoduleofsender = getDolGlobalString('MAIN_MODULE_'.strtoupper($sendmode).'_SMS', $sendmode); // $conf->global->MAIN_MODULE_XXX_SMS looks like a value 'class@module'
if ($classmoduleofsender == 'ovh') {
$classmoduleofsender = 'ovhsms@ovh'; // For backward compatibility
}
} elseif (!empty($conf->global->MAIN_SMS_SENDMODE)) { // $conf->global->MAIN_SMS_SENDMODE looks like a value 'class@module'
$tmp = explode('@', $conf->global->MAIN_SMS_SENDMODE);
$tmp = explode('@', $classmoduleofsender);
$classfile = $tmp[0];
$module = (empty($tmp[1]) ? $tmp[0] : $tmp[1]);
dol_include_once('/'.$module.'/class/'.$classfile.'.class.php');
@ -210,7 +203,7 @@ function limitChars(textarea, limit, infodiv)
$resultsender = $sms->SmsSenderList();
} else {
$sms = new stdClass();
$sms->error = 'The SMS manager "'.$classfile.'" defined into SMS setup MAIN_SMS_SENDMODE is not found';
$sms->error = 'The SMS manager "'.$classfile.'" defined into SMS setup MAIN_MODULE_'.strtoupper($sendmode).'_SMS is not found';
}
} catch (Exception $e) {
dol_print_error('', 'Error to get list of senders: '.$e->getMessage());

View file

@ -53,6 +53,11 @@ class Ldap
*/
public $connectedServer;
/**
* @var int server port
*/
public $serverPort;
/**
* Base DN (e.g. "dc=foo,dc=com")
*/
@ -72,6 +77,11 @@ class Ldap
public $domainFQDN;
/**
* @var int bind
*/
public $bind;
/**
* User administrateur Ldap
* Active Directory ne supporte pas les connexions anonymes
@ -99,13 +109,74 @@ class Ldap
*/
public $ldapErrorText;
/**
* @var string
*/
public $filter;
/**
* @var string
*/
public $filtergroup;
/**
* @var string
*/
public $filtermember;
/**
* @var string attr_login
*/
public $attr_login;
/**
* @var string attr_sambalogin
*/
public $attr_sambalogin;
/**
* @var string attr_name
*/
public $attr_name;
/**
* @var string attr_firstname
*/
public $attr_firstname;
/**
* @var string attr_mail
*/
public $attr_mail;
/**
* @var string attr_phone
*/
public $attr_phone;
/**
* @var string attr_fax
*/
public $attr_fax;
/**
* @var string attr_mobile
*/
public $attr_mobile;
/**
* @var int badpwdtime
*/
public $badpwdtime;
/**
* @var string ladpUserDN
*/
public $ldapUserDN;
//Fetch user
public $name;
public $firstname;
public $login;
public $phone;
public $skype;
public $fax;
public $mail;
public $mobile;
@ -177,7 +248,6 @@ class Ldap
$this->attr_firstname = getDolGlobalString('LDAP_FIELD_FIRSTNAME');
$this->attr_mail = getDolGlobalString('LDAP_FIELD_MAIL');
$this->attr_phone = getDolGlobalString('LDAP_FIELD_PHONE');
$this->attr_skype = getDolGlobalString('LDAP_FIELD_SKYPE');
$this->attr_fax = getDolGlobalString('LDAP_FIELD_FAX');
$this->attr_mobile = getDolGlobalString('LDAP_FIELD_MOBILE');
}
@ -1389,13 +1459,13 @@ class Ldap
public function parseSAT($samtype)
{
$stypes = array(
805306368 => "NORMAL_ACCOUNT",
805306369 => "WORKSTATION_TRUST",
805306370 => "INTERDOMAIN_TRUST",
268435456 => "SECURITY_GLOBAL_GROUP",
268435457 => "DISTRIBUTION_GROUP",
536870912 => "SECURITY_LOCAL_GROUP",
536870913 => "DISTRIBUTION_LOCAL_GROUP"
805306368 => "NORMAL_ACCOUNT",
805306369 => "WORKSTATION_TRUST",
805306370 => "INTERDOMAIN_TRUST",
268435456 => "SECURITY_GLOBAL_GROUP",
268435457 => "DISTRIBUTION_GROUP",
536870912 => "SECURITY_LOCAL_GROUP",
536870913 => "DISTRIBUTION_LOCAL_GROUP"
);
$retval = "";

View file

@ -37,6 +37,11 @@ abstract class Stats
* @var string To store the FROM part of the main table of the SQL request
*/
public $from;
/**
* @var string To store the WHERE part of the main table of the SQL request
*/
public $where;
/**
* @var string To store the FROM part of the line table of the SQL request
*/
@ -54,6 +59,20 @@ abstract class Stats
*/
public $field_line;
/**
* @var string error message
*/
public $error;
/**
* @var int year
*/
public $year;
/**
* @var int month
*/
public $month;
/**
* @param int $year number

View file

@ -1357,14 +1357,14 @@ function complete_dictionary_with_modules(&$taborder, &$tabname, &$tablib, &$tab
// We discard modules according to features level (PS: if module is activated we always show it)
$const_name = 'MAIN_MODULE_'.strtoupper(preg_replace('/^mod/i', '', get_class($objMod)));
if ($objMod->version == 'development' && getDolGlobalInt('MAIN_FEATURES_LEVEL') < 2 && empty(getDolGlobalString($const_name))) {
if ($objMod->version == 'development' && getDolGlobalInt('MAIN_FEATURES_LEVEL') < 2 && !getDolGlobalString($const_name)) {
$modulequalified = 0;
}
if ($objMod->version == 'experimental' && getDolGlobalInt('MAIN_FEATURES_LEVEL') < 1 && empty(getDolGlobalString($const_name))) {
if ($objMod->version == 'experimental' && getDolGlobalInt('MAIN_FEATURES_LEVEL') < 1 && !getDolGlobalString($const_name)) {
$modulequalified = 0;
}
//If module is not activated disqualified
if (empty(getDolGlobalString($const_name))) {
// If module is not activated disqualified
if (!getDolGlobalString($const_name)) {
$modulequalified = 0;
}

View file

@ -1333,7 +1333,7 @@ function dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite, $disable
*/
function dol_delete_file($file, $disableglob = 0, $nophperrors = 0, $nohook = 0, $object = null, $allowdotdot = false, $indexdatabase = 1, $nolog = 0)
{
global $db, $conf, $user, $langs;
global $db, $user, $langs;
global $hookmanager;
// Load translation files required by the page
@ -1351,7 +1351,7 @@ function dol_delete_file($file, $disableglob = 0, $nophperrors = 0, $nohook = 0,
}
$reshook = 0;
if (empty($nohook)) {
if (empty($nohook) && !empty($hookmanager)) {
$hookmanager->initHooks(array('fileslib'));
$parameters = array(

View file

@ -3277,11 +3277,11 @@ function getArrayOfSocialNetworks()
/**
* Show social network link
*
* @param string $value Skype to show (only skype, without 'Name of recipient' before)
* @param string $value Social network ID to show (only skype, without 'Name of recipient' before)
* @param int $cid Id of contact if known
* @param int $socid Id of third party if known
* @param string $type 'skype','facebook',...
* @param array $dictsocialnetworks socialnetworks availables
* @param array $dictsocialnetworks List of socialnetworks availables
* @return string HTML Link
*/
function dol_print_socialnetworks($value, $cid, $socid, $type, $dictsocialnetworks = array())

View file

@ -621,7 +621,7 @@ function vignette($file, $maxWidth = 160, $maxHeight = 120, $extName = '_small',
}
// Before PHP8, img was a resource, With PHP8, it is a GdImage
if (!is_resource($img) && !($img instanceof GdImage)) {
if (!is_resource($img) && class_exists('GdImage') && !($img instanceof GdImage)) {
dol_syslog('Failed to detect type of image. We found infoImg[2]='.$infoImg[2], LOG_WARNING);
return 0;
}

View file

@ -229,7 +229,7 @@ function invoice_admin_prepare_head()
$head[$h][2] = 'attributeslinesrec';
$h++;
if (!empty($conf->global->INVOICE_USE_SITUATION)) { // Warning, implementation is seriously bugged and a new one not compatible is expected to become stable
if (getDolGlobalInt('INVOICE_USE_SITUATION') > 0) { // Warning, implementation with value 1 is seriously bugged and a new one not compatible is expected to become stable
$head[$h][0] = DOL_URL_ROOT.'/admin/facture_situation.php';
$head[$h][1] = $langs->trans("InvoiceSituation");
$head[$h][2] = 'situation';

View file

@ -224,7 +224,7 @@ class doc_generic_reception_odt extends ModelePdfReception
$outputlangs->loadLangs(array("main", "dict", "companies", "bills"));
if ($conf->reception->dir_output."/reception") {
if ($conf->reception->dir_output) {
// If $object is id instead of object
if (!is_object($object)) {
$id = $object;
@ -238,7 +238,7 @@ class doc_generic_reception_odt extends ModelePdfReception
$object->fetch_thirdparty();
$dir = $conf->reception->dir_output."/reception";
$dir = !empty($conf->reception->multidir_output[$object->entity]) ? $conf->reception->multidir_output[$object->entity] : $conf->reception->dir_output;
$objectref = dol_sanitizeFileName($object->ref);
if (!preg_match('/specimen/i', $objectref)) {
$dir .= "/".$objectref;

View file

@ -1,5 +1,6 @@
<?php
/* Copyright (C) 2018 Quentin Vial-Gouteyron <quentin.vial-gouteyron@atm-consulting.fr>
/* Copyright (C) 2018 Quentin Vial-Gouteyron <quentin.vial-gouteyron@atm-consulting.fr>
* Copyright (C) 2023 Frédéric France <frederic.france@netlogic.fr>
*
* 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
@ -37,6 +38,26 @@ class pdf_squille extends ModelePdfReception
*/
public $version = 'dolibarr';
/**
* @var int posx weight vol
*/
public $posxweightvol;
/**
* @var int posx qty ordered
*/
public $posxqtyordered;
/**
* @var int posx qty to ship
*/
public $posxqtytoship;
/**
* @var int posx totalht
*/
public $posxtotalht;
/**
* Constructor
@ -617,7 +638,7 @@ class pdf_squille extends ModelePdfReception
* Show total to pay
*
* @param TCPDF $pdf Object PDF
* @param Facture $object Object invoice
* @param Reception $object Object reception
* @param int $deja_regle Montant deja regle
* @param int $posy Position depart
* @param Translate $outputlangs Objet langs
@ -829,7 +850,7 @@ class pdf_squille extends ModelePdfReception
* Show top header of page.
*
* @param TCPDF $pdf Object PDF
* @param Object $object Object to show
* @param Reception $object Object to show
* @param int $showaddress 0=no, 1=yes
* @param Translate $outputlangs Object lang for output
* @return void

View file

@ -273,7 +273,7 @@ if ($action == 'presend') {
if (is_object($object) && is_object($object->thirdparty)) {
$checkRead= '<img src="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-read.php';
$checkRead.='?tag='.(!empty($object->thirdparty->tag)?urlencode($object->thirdparty->tag):"");
$checkRead.='&securitykey='.(!empty(getDolGlobalString('MAILING_EMAIL_UNSUBSCRIBE_KEY'))?urlencode(getDolGlobalString('MAILING_EMAIL_UNSUBSCRIBE_KEY')):"");
$checkRead.='&securitykey='.(getDolGlobalString('MAILING_EMAIL_UNSUBSCRIBE_KEY') ? urlencode(getDolGlobalString('MAILING_EMAIL_UNSUBSCRIBE_KEY')) : "");
$checkRead.='" width="1" height="1" style="width:1px;height:1px" border="0"/>';
$substitutionarray['__CHECK_READ__'] = $checkRead;
}

View file

@ -246,7 +246,7 @@ class InterfaceWorkflowManager extends DolibarrTriggers
if (!empty($object->linkedObjects)) {
$totalonlinkedelements = 0;
foreach ($object->linkedObjects['supplier_proposal'] as $element) {
if ($element->statut == SupplierProposal::STATUS_SIGNED || $element->statut == SupplierProposal::STATUS_BILLED) {
if ($element->statut == SupplierProposal::STATUS_SIGNED || $element->statut == SupplierProposal::STATUS_CLOSE) {
$totalonlinkedelements += $element->total_ht;
}
}

View file

@ -1077,19 +1077,16 @@ class Evaluation extends CommonObject
$return .= '<div class="info-box-content">';
$return .= '<span class="info-box-ref inline-block tdoverflowmax150 valignmiddle">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl(1) : $this->ref).'</span>';
$return .= '<input class="fright" id="cb'.$this->id.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
if (property_exists($this, 'fk_user') && !(empty($this->fk_user))) {
$return .= '<br><span class="info-box-label opacitymedium">'.$langs->trans("Employee").'</span> : ';
$return .= '<span class="info-box-label ">'.$this->fk_user.'</span>';
if (!empty($arraydata['user'])) {
$return .= '<br><span class="info-box-label ">'.$arraydata['user'].'</span>';
}
if (property_exists($this, 'fk_job') && !(empty($this->fk_job))) {
$return .= '<br><span class="info-box-label opacitymedium">'.$langs->trans("Job").'</span> : ';
$return .= '<span class="info-box-label ">'.$this->fk_job.'</span>';
if (!empty($arraydata['job'])) {
$return .= '<br><span class="info-box-label ">'.$arraydata['job'].'</span>';
}
if (method_exists($this, 'getLibStatut')) {
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
}
$return .= '</span>';
$return .= '</div>';
$return .= '</div>';
$return .= '</div>';
return $return;

View file

@ -728,7 +728,7 @@ class Job extends CommonObject
$result = '';
$label = img_picto('', $this->picto).' <u>'.$langs->trans("Job").'</u>';
$label = img_picto('', $this->picto).' <u>'.$langs->trans("JobProfile").'</u>';
if (isset($this->status)) {
$label .= ' '.$this->getLibStatut(5);
}

View file

@ -105,17 +105,17 @@ class Position extends CommonObject
public $fields=array(
'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>2, 'index'=>1, 'css'=>'left', 'comment'=>"Id"),
//'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>'1', 'position'=>20, 'notnull'=>1, 'visible'=>1, 'index'=>1, 'searchall'=>1, 'showoncombobox'=>'1', 'comment'=>"Reference of object"),
'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>'1', 'position'=>60, 'notnull'=>0, 'visible'=>3,),
'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,),
'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>-2,),
'fk_contrat' => array('type'=>'integer:Contrat:contrat/class/contrat.class.php', 'label'=>'fk_contrat', 'enabled'=>'1', 'position'=>50, 'notnull'=>0, 'visible'=>0,),
'fk_contrat' => array('type'=>'integer:Contrat:contrat/class/contrat.class.php', 'label'=>'fk_contrat', 'enabled'=>'isModEnabled("contract")', 'position'=>50, 'notnull'=>0, 'visible'=>0,),
'fk_user' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'Employee', 'enabled'=>'1', 'position'=>55, 'notnull'=>1, 'visible'=>1, 'default'=>0),
'fk_job' => array('type'=>'integer:Job:/hrm/class/job.class.php', 'label'=>'JobProfile', 'enabled'=>'1', 'position'=>56, 'notnull'=>1, 'visible'=>1,),
'date_start' => array('type'=>'date', 'label'=>'DateStart', 'enabled'=>'1', 'position'=>51, 'notnull'=>1, 'visible'=>1,),
'date_end' => array('type'=>'date', 'label'=>'DateEnd', 'enabled'=>'1', 'position'=>52, 'notnull'=>0, 'visible'=>1,),
'date_start' => array('type'=>'date', 'label'=>'DateStart', 'enabled'=>'1', 'position'=>101, 'notnull'=>1, 'visible'=>1,),
'date_end' => array('type'=>'date', 'label'=>'DateEnd', 'enabled'=>'1', 'position'=>102, 'notnull'=>0, 'visible'=>1,),
'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>'1', 'position'=>120, 'notnull'=>0, 'visible'=>3,),
'abort_comment' => array('type'=>'varchar(255)', 'label'=>'AbandonmentComment', 'enabled'=>'getDolGlobalInt("HRM_JOB_POSITON_ENDING_COMMENT")', 'position'=>502, 'notnull'=>0, 'visible'=>1,),
'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>'1', 'position'=>70, 'notnull'=>0, 'visible'=>0,),
'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>'1', 'position'=>71, 'notnull'=>0, 'visible'=>0,),
'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>'1', 'position'=>151, 'notnull'=>0, 'visible'=>0,),
'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>'1', 'position'=>152, 'notnull'=>0, 'visible'=>0,),
'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid',),
'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>'1', 'position'=>511, 'notnull'=>-1, 'visible'=>-2,),
);
@ -687,12 +687,12 @@ class Position extends CommonObject
/**
* Return a link to the object card (with optionaly the picto)
*
* @param int $withpicto Include picto in link (0=No picto, 1=Include picto into link, 2=Only picto)
* @param string $option On what the link point to ('nolink', ...)
* @param int $notooltip 1=Disable tooltip
* @param string $morecss Add more css on link
* @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking
* @return string String with URL
* @param int $withpicto Include picto in link (0=No picto, 1=Include picto into link, 2=Only picto)
* @param string $option On what the link point to ('nolink', ...)
* @param int $notooltip 1=Disable tooltip
* @param string $morecss Add more css on link
* @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking
* @return string String with URL
*/
public function getNomUrl($withpicto = 0, $option = '', $notooltip = 0, $morecss = '', $save_lastsearch_value = -1)
{
@ -1140,13 +1140,12 @@ class Position extends CommonObject
$return .= '<div class="info-box-content">';
$return .= '<span class="info-box-ref inline-block tdoverflowmax150 valignmiddle">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl(1) : $this->ref).'</span>';
$return .= '<input class="fright" id="cb'.$this->id.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
if (property_exists($this, 'fk_user') && !(empty($this->fk_user))) {
$return .= '<br><span class="info-box-label opacitymedium">'.$langs->trans("Employee").'</span> : ';
$return .= '<span class="info-box-label ">'.$this->fk_user.'</span>';
if (!empty($arraydata['user'])) {
$return .= '<br><span class="info-box-label ">'.$arraydata['user'].'</span>';
}
if (property_exists($this, 'fk_job') && !(empty($this->fk_job))) {
$return .= '<br><span class="info-box-label opacitymedium">'.$langs->trans("Job").'</span> : ';
$return .= '<span class="info-box-label ">'.$this->fk_job.'</span>';
if (!empty($arraydata['job'])) {
//$return .= '<br><span class="info-box-label opacitymedium">'.$langs->trans("JobProfile").'</span> : ';
$return .= '<br><span class="info-box-label ">'.$arraydata['job'].'</span>';
}
if (property_exists($this, 'date_start') && property_exists($this, 'date_end')) {
$return .= '<br><div class ="margintoponly"><span class="info-box-label ">'.dol_print_date($this->db->jdate($this->date_start), 'day').'</span>';

View file

@ -553,7 +553,7 @@ class Skill extends CommonObject
*/
public function validate($user, $notrigger = 0)
{
global $conf, $langs;
global $conf;
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
@ -887,6 +887,10 @@ class Skill extends CommonObject
*/
public function LibStatut($status, $mode = 0)
{
if (empty($status)) {
$status = 0;
}
// phpcs:enable
if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
global $langs;

View file

@ -472,9 +472,12 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
print '<table id="tablelines" class="noborder noshadow" width="100%">';
}
//if (!empty($object->lines)) {
$object->printObjectLines($action, $mysoc, null, GETPOST('lineid', 'int'), 1);
//}
$object->printObjectLines($action, $mysoc, null, GETPOST('lineid', 'int'), 1);
if (empty($object->lines)) {
print '<tr><td colspan="4"><span class="opacitymedium">'.img_warning().' '.$langs->trans("TheJobProfileHasNoSkillsDefinedFixBefore").'</td></tr>';
}
// Form to add new line
/*

View file

@ -467,16 +467,22 @@ if (!empty($moreforfilter)) {
}
$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields
$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields
$selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : '');
print '<div class="div-table-responsive">'; // You can use div-table-responsive-no-min if you dont need reserved height for your table
print '<table class="tagtable nobottomiftotal liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";
// Fields title search
// --------------------------------------------------------------------
print '<tr class="liste_titre">';
// Action column
if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
print '<td class="liste_titre maxwidthsearch">';
$searchpicto = $form->showFilterButtons();
print $searchpicto;
print '</td>';
}
foreach ($object->fields as $key => $val) {
$cssforfield = (empty($val['csslist']) ? (empty($val['css']) ? '' : $val['css']) : $val['csslist']);
if ($key == 'status') {
@ -515,10 +521,12 @@ $parameters = array('arrayfields'=>$arrayfields);
$reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object); // Note that $action and $object may have been modified by hook
print $hookmanager->resPrint;
// Action column
print '<td class="liste_titre maxwidthsearch">';
$searchpicto = $form->showFilterButtons();
print $searchpicto;
print '</td>';
if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
print '<td class="liste_titre maxwidthsearch">';
$searchpicto = $form->showFilterButtons();
print $searchpicto;
print '</td>';
}
print '</tr>'."\n";
$totalarray = array();
@ -527,6 +535,11 @@ $totalarray['nbfield'] = 0;
// Fields title label
// --------------------------------------------------------------------
print '<tr class="liste_titre">';
// Action column
if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
$totalarray['nbfield']++;
}
foreach ($object->fields as $key => $val) {
$cssforfield = (empty($val['csslist']) ? (empty($val['css']) ? '' : $val['css']) : $val['csslist']);
if ($key == 'status') {
@ -550,8 +563,10 @@ $parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$
$reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object); // Note that $action and $object may have been modified by hook
print $hookmanager->resPrint;
// Action column
print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
$totalarray['nbfield']++;
if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
$totalarray['nbfield']++;
}
print '</tr>'."\n";
@ -603,8 +618,8 @@ while ($i < $imaxinloop) {
if (in_array($object->id, $arrayofselected)) {
$selected = 1;
}
print $object->getKanbanView('', array('user'=>$userstatic->getNomUrl(1), 'job'=>$job->getNomUrl(1), 'selected' => in_array($object->id, $arrayofselected)));
}
print $object->getKanbanView('', array('user'=>$userstatic->getNomUrl(-1), 'job'=>$job->getNomUrl(1), 'selected' => $selected));
if ($i == ($imaxinloop - 1)) {
print '</div>';
print '</td></tr>';
@ -612,6 +627,21 @@ while ($i < $imaxinloop) {
} else {
// Show here line of result
print '<tr class="oddeven">';
// Action column
if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
print '<td class="nowrap center">';
if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
$selected = 0;
if (in_array($object->id, $arrayofselected)) {
$selected = 1;
}
print '<input id="cb'.$object->id.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$object->id.'"'.($selected ? ' checked="checked"' : '').'>';
}
print '</td>';
if (!$i) {
$totalarray['nbfield']++;
}
}
foreach ($object->fields as $key => $val) {
$cssforfield = (empty($val['csslist']) ? (empty($val['css']) ? '' : $val['css']) : $val['csslist']);
if (in_array($val['type'], array('date', 'datetime', 'timestamp'))) {
@ -665,19 +695,20 @@ while ($i < $imaxinloop) {
$reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object); // Note that $action and $object may have been modified by hook
print $hookmanager->resPrint;
// Action column
print '<td class="nowrap center">';
if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
$selected = 0;
if (in_array($object->id, $arrayofselected)) {
$selected = 1;
if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
print '<td class="nowrap center">';
if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
$selected = 0;
if (in_array($object->id, $arrayofselected)) {
$selected = 1;
}
print '<input id="cb'.$object->id.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$object->id.'"'.($selected ? ' checked="checked"' : '').'>';
}
print '</td>';
if (!$i) {
$totalarray['nbfield']++;
}
print '<input id="cb'.$object->id.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$object->id.'"'.($selected ? ' checked="checked"' : '').'>';
}
print '</td>';
if (!$i) {
$totalarray['nbfield']++;
}
print '</tr>'."\n";
}
@ -695,7 +726,7 @@ if ($num == 0) {
$colspan++;
}
}
print '<tr><td colspan="'.$colspan.'" class="opacitymedium">'.$langs->trans("NoRecordFound").'</td></tr>';
print '<tr><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
}

View file

@ -181,7 +181,7 @@ llxHeader('', $title, $help_url);
// Part to create
if ($action == 'create') {
print load_fiche_titre($langs->trans("NewObject", $langs->transnoentities('Job')), '', 'object_' . $object->picto);
print load_fiche_titre($langs->trans("NewJobProfile", $langs->transnoentities('Job')), '', 'object_' . $object->picto);
print '<form method="POST" action="' . $_SERVER["PHP_SELF"] . '">';
print '<input type="hidden" name="token" value="' . newToken() . '">';
@ -220,7 +220,7 @@ if ($action == 'create') {
// Part to edit record
if (($id || $ref) && $action == 'edit') {
print load_fiche_titre($langs->trans("Job"), '', 'object_' . $object->picto);
print load_fiche_titre($langs->trans("JobProfile"), '', 'object_' . $object->picto);
print '<form method="POST" action="' . $_SERVER["PHP_SELF"] . '">';
print '<input type="hidden" name="token" value="' . newToken() . '">';

View file

@ -46,11 +46,35 @@ function jobPrepareHead($object)
$head[$h][0] = DOL_URL_ROOT."/hrm/skill_tab.php?id=".$object->id.'&objecttype=job';
$head[$h][1] = $langs->trans("RequiredSkills");
$nbResources = 0;
$sql = "SELECT COUNT(rowid) as nb FROM ".MAIN_DB_PREFIX."hrm_skillrank WHERE objecttype = 'job' AND fk_object = ".((int) $object->id);
$resql = $db->query($sql);
if ($resql) {
$obj = $db->fetch_object($resql);
if ($obj) {
$nbResources = $obj->nb;
}
}
if ($nbResources > 0) {
$head[$h][1] .= (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER) ? '<span class="badge marginleftonlyshort">'.($nbResources).'</span>' : '');
}
$head[$h][2] = 'skill_tab';
$h++;
$head[$h][0] = DOL_URL_ROOT."/hrm/position.php?fk_job=".$object->id;
$head[$h][1] = $langs->trans("EmployeesInThisPosition");
$head[$h][1] = $langs->trans("PositionsWithThisProfile");
$nbResources = 0;
$sql = "SELECT COUNT(rowid) as nb FROM ".MAIN_DB_PREFIX."hrm_job_user WHERE fk_job = ".((int) $object->id);
$resql = $db->query($sql);
if ($resql) {
$obj = $db->fetch_object($resql);
if ($obj) {
$nbResources = $obj->nb;
}
}
if ($nbResources > 0) {
$head[$h][1] .= (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER) ? '<span class="badge marginleftonlyshort">'.($nbResources).'</span>' : '');
}
$head[$h][2] = 'position';
$h++;

View file

@ -49,8 +49,16 @@ $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button
$toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list
$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'jobpositionlist'; // To manage different context of search
$optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print')
$id = GETPOST('id', 'int');
$fk_job = GETPOST('fk_job', 'int');
$backtopage = GETPOST('backtopage', 'alpha');
$backtopageforcancel = GETPOST('backtopageforcancel', 'alpha');
$id = GETPOST('id', 'int');
$ref = GETPOST('ref', 'alpha');
$fk_job = GETPOST('fk_job', 'int');
$fk_user = GETPOST('fk_user', 'int');
//$start_date = date('Y-m-d', GETPOST('date_startyear', 'int').'-'.GETPOST('date_startmonth', 'int').'-'.GETPOST('date_startday', 'int'));
$start_date = dol_mktime(0, 0, 0, GETPOST('date_startmonth', 'int'), GETPOST('date_startday', 'int'), GETPOST('date_startyear', 'int'));
// Load variable for pagination
$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit;
@ -65,28 +73,13 @@ $offset = $limit * $page;
$pageprev = $page - 1;
$pagenext = $page + 1;
// Get parameters
$id = GETPOST('fk_job', 'int');
$ref = GETPOST('ref', 'alpha');
$fk_job = GETPOST('fk_job', 'int');
$fk_user = GETPOST('fk_user', 'int');
//$start_date = date('Y-m-d', GETPOST('date_startyear', 'int').'-'.GETPOST('date_startmonth', 'int').'-'.GETPOST('date_startday', 'int'));
$start_date = dol_mktime(0, 0, 0, GETPOST('date_startmonth', 'int'), GETPOST('date_startday', 'int'), GETPOST('date_startyear', 'int'));
$action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ...
$backtopage = GETPOST('backtopage', 'alpha');
$backtopageforcancel = GETPOST('backtopageforcancel', 'alpha');
$fk_job = GETPOST('fk_job', 'int');
// Initialize technical objects
$object = new Job($db);
$objectposition = new Position($db);
$extrafields = new ExtraFields($db);
$diroutputmassaction = $conf->hrm->dir_output . '/temp/massgeneration/' . $user->id;
$hookmanager->initHooks(array('jobpositionlist', 'globalcard')); // Note that conf->hooks_modules contains array
$hookmanager->initHooks(array('jobpositioncard', 'globalcard')); // Note that conf->hooks_modules contains array
// Fetch optionals attributes and labels
@ -163,8 +156,12 @@ $upload_dir = $conf->hrm->multidir_output[isset($object->entity) ? $object->enti
//if ($user->socid > 0) $socid = $user->socid;
//$isdraft = (($object->status == $object::STATUS_DRAFT) ? 1 : 0);
//restrictedArea($user, $object->element, $object->id, $object->table_element, '', 'fk_soc', 'rowid', $isdraft);
if (empty($conf->hrm->enabled)) accessforbidden();
if (!$permissiontoread || ($action === 'create' && !$permissiontoadd)) accessforbidden();
if (!isModEnabled('hrm')) {
accessforbidden();
}
if (!$permissiontoread || ($action === 'create' && !$permissiontoadd)) {
accessforbidden();
}
/*
@ -176,16 +173,15 @@ $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action
if ($reshook < 0) {
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
}
if (empty($reshook)) {
$error = 0;
$backurlforlist = dol_buildpath('/hrm/position_list.php', 1);
//$backtopage = dol_buildpath('/hrm/position.php', 1) . '?fk_job=' . ($fk_job > 0 ? $fk_job : '__ID__');
if (empty($backtopage) || ($cancel && $fk_job <= 0)) {
if (empty($backtopage) || ($cancel && empty($id))) {
if (empty($backtopage) || ($cancel && strpos($backtopage, '__ID__'))) {
if ($fk_job == -1 && (($action != 'add' && $action != 'create') || $cancel)) {
if (empty($id) && (($action != 'add' && $action != 'create') || $cancel)) {
$backtopage = $backurlforlist;
} else {
if ($fk_job > 0) {
@ -230,6 +226,7 @@ if (empty($reshook)) {
include DOL_DOCUMENT_ROOT . '/core/actions_massactions.inc.php';
include DOL_DOCUMENT_ROOT . '/core/actions_addupdatedelete.inc.php';
$object = $job;
}
@ -275,12 +272,7 @@ if ($action == 'create') {
print dol_get_fiche_end();
print '<div class="center">';
print '<input type="submit" class="button" name="add" value="' . dol_escape_htmltag($langs->trans("Create")) . '">';
print '&nbsp; ';
print '<input type="' . ($backtopage ? "submit" : "button") . '" class="button button-cancel" name="cancel" value="' . dol_escape_htmltag($langs->trans("Cancel")) . '"' . ($backtopage ? '' : ' onclick="history.go(-1)"') . '>'; // Cancel for create does not post form if we don't know the backtopage
print '</div>';
print $form->buttonsSaveCancel("Create");
print '</form>';
@ -742,7 +734,7 @@ if ($job->id > 0 && (empty($action) || ($action != 'edit' && $action != 'create'
$colspan++;
}
}
print '<tr><td colspan="' . $colspan . '" class="opacitymedium">' . $langs->trans("NoRecordFound") . '</td></tr>';
print '<tr><td colspan="' . $colspan . '"><span class="opacitymedium">' . $langs->trans("NoRecordFound") . '</span></td></tr>';
}
@ -1304,7 +1296,7 @@ function DisplayPositionList()
$colspan++;
}
}
print '<tr><td colspan="' . $colspan . '" class="opacitymedium">' . $langs->trans("NoRecordFound") . '</td></tr>';
print '<tr><td colspan="' . $colspan . '"><span class="opacitymedium">' . $langs->trans("NoRecordFound") . '</span></td></tr>';
}

View file

@ -32,9 +32,8 @@ require '../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
// load hrm libraries
require_once __DIR__.'/class/position.class.php';
require_once DOL_DOCUMENT_ROOT.'/hrm/class/job.class.php';
require_once DOL_DOCUMENT_ROOT.'/hrm/class/position.class.php';
// for other modules
//dol_include_once('/othermodule/class/otherobject.class.php');
@ -205,6 +204,7 @@ if (empty($reshook)) {
*/
$form = new Form($db);
$jobstatic = new Job($db);
$now = dol_now();
@ -220,9 +220,9 @@ $morecss = array();
$sql = 'SELECT ';
$sql .= $object->getFieldList('t');
$sql .= ',';
$sql .= $userstatic->getFieldList('u');
$sql .= ',u.email, u.statut';
$sql .= ',j.rowid, j.label as job_label';
$sql .= $userstatic->getFieldList('u', array('rowid'));
$sql .= ', u.email, u.statut, u.photo, u.login'; // Add more field not yet into the user->fields
$sql .= ', j.rowid as job_id, j.label as job_label';
// Add fields from extrafields
if (!empty($extrafields->attributes[$object->table_element]['label'])) {
foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) {
@ -620,7 +620,11 @@ while ($i < $imaxinloop) {
// get info needed
$object->date_start = $obj->date_start;
$object->date_end = $obj->date_end;
$object->fk_job = $obj->job_label;
$object->fk_job = $obj->job_id;
$jobstatic->id = $obj->job_id;
$jobstatic->label = $obj->job_label;
$jobstatic->status = $obj->job_status;
$userstatic->id = $obj->fk_user;
$userstatic->ref = $obj->fk_user;
@ -628,6 +632,9 @@ while ($i < $imaxinloop) {
$userstatic->lastname = $obj->lastname;
$userstatic->email = $obj->email;
$userstatic->statut = $obj->statut;
$userstatic->status = $obj->statut;
$userstatic->login = $obj->login;
$userstatic->photo = $obj->photo;
// output kanban
if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
@ -635,7 +642,7 @@ while ($i < $imaxinloop) {
if (in_array($object->id, $arrayofselected)) {
$selected = 1;
}
print $object->getKanbanView('', array('user' => $userstatic->getNomUrl(1), 'selected' => in_array($object->id, $arrayofselected)));
print $object->getKanbanView('', array('user' => $userstatic->getNomUrl(-1), 'job'=> $jobstatic->getNomUrl(1), 'selected' => in_array($object->id, $arrayofselected)));
}
if ($i == ($imaxinloop - 1)) {
print '</div>';

View file

@ -256,15 +256,14 @@ if (($id || $ref) && $action == 'edit') {
// Common attributes
include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_edit.tpl.php';
print '</table>';
// Other attributes
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_edit.tpl.php';
print '</table>';
print '<hr>';
// SKILLDET
print dol_get_fiche_head(array(), '');
$SkilldetRecords = $object->fetchLines();
if (is_array($SkilldetRecords) && count($SkilldetRecords) == 0) {
@ -814,7 +813,7 @@ if ($action != "create" && $action != "edit") {
$colspan++;
}
}
print '<tr><td colspan="' . $colspan . '" class="opacitymedium">' . $langs->trans("NoRecordFound") . '</td></tr>';
print '<tr><td colspan="' . $colspan . '"><span class="opacitymedium">' . $langs->trans("NoRecordFound") . '</span></td></tr>';
}
if (!empty($resql)) $db->free($resql);

View file

@ -42,11 +42,6 @@ require_once DOL_DOCUMENT_ROOT . '/hrm/lib/hrm_skill.lib.php';
$langs->loadLangs(array('hrm', 'other'));
// Get Parameters
$id = GETPOST('id', 'int');
$TSkillsToAdd = GETPOST('fk_skill', 'array');
$objecttype = GETPOST('objecttype', 'alpha');
$TNote = GETPOST('TNote', 'array');
$lineid = GETPOST('lineid', 'int');
$action = GETPOST('action', 'aZ09');
$confirm = GETPOST('confirm', 'alpha');
$cancel = GETPOST('cancel', 'aZ09');
@ -54,6 +49,16 @@ $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'sk
$backtopage = GETPOST('backtopage', 'alpha');
$backtopageforcancel = GETPOST('backtopageforcancel', 'alpha');
$id = GETPOST('id', 'int');
$TSkillsToAdd = GETPOST('fk_skill', 'array');
$objecttype = GETPOST('objecttype', 'alpha');
$TNote = GETPOST('TNote', 'array');
$lineid = GETPOST('lineid', 'int');
if (empty($objecttype)) {
$objecttype = 'job';
}
$TAuthorizedObjects = array('job', 'user');
$skill = new SkillRank($db);

View file

@ -167,7 +167,7 @@ insert into llx_c_forme_juridique (fk_pays, code, libelle) values (5, '506', 'KG
insert into llx_c_forme_juridique (fk_pays, code, libelle) values (5, '507', 'Ltd. - Limited Company');
insert into llx_c_forme_juridique (fk_pays, code, libelle) values (5, '508', 'OHG - Offene Handelsgesellschaft');
insert into llx_c_forme_juridique (fk_pays, code, libelle) values (5, '509', 'eG - eingetragene Genossenschaft');
insert into llx_c_forme_juridique (fk_pays, code, libelle) values (5, '510', 'e.V. - eingetragener Verein');
-- Denmark
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8001', 'Aktieselvskab A/S');
@ -179,6 +179,12 @@ INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8006', '
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8007', 'Selskab Med Begrænset Hæftelse SMBA');
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8008', 'Kommanditselskab K/S');
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8009', 'SPE-selskab');
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8010', 'Forening med begrænset ansvar (f.m.b.a.)');
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8011', 'Frivillig forening');
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8012', 'Almindelig forening');
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8013', 'Andelsboligforening');
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8014', 'Særlig forening');
-- Greece
INSERT INTO llx_c_forme_juridique (code,fk_pays,libelle,isvatexempted,active) VALUES ('10201',102,'Ατομική επιχείρηση',0,1);

View file

@ -66,5 +66,27 @@ ALTER TABLE llx_societe_rib ADD COLUMN extraparams varchar(255);
ALTER TABLE llx_c_type_container ADD COLUMN position integer DEFAULT 0;
ALTER TABLE llx_user DROP COLUMN skype;
ALTER TABLE llx_user DROP COLUMN twitter;
ALTER TABLE llx_user DROP COLUMN facebook;
ALTER TABLE llx_user DROP COLUMN instagram;
ALTER TABLE llx_user DROP COLUMN snapchat;
ALTER TABLE llx_user DROP COLUMN googleplus;
ALTER TABLE llx_user DROP COLUMN youtube;
ALTER TABLE llx_user DROP COLUMN whatsapp;
ALTER TABLE llx_adherent DROP COLUMN skype;
ALTER TABLE llx_adherent DROP COLUMN twitter;
ALTER TABLE llx_adherent DROP COLUMN facebook;
ALTER TABLE llx_adherent DROP COLUMN instagram;
ALTER TABLE llx_adherent DROP COLUMN snapchat;
ALTER TABLE llx_adherent DROP COLUMN googleplus;
ALTER TABLE llx_adherent DROP COLUMN youtube;
ALTER TABLE llx_adherent DROP COLUMN whatsapp;
ALTER TABLE llx_societe DROP COLUMN skype;
ALTER TABLE llx_prelevement_demande ADD INDEX idx_prelevement_demande_ext_payment_id (ext_payment_id);
ALTER TABLE llx_product_lot ADD COLUMN qc_frequency integer DEFAULT NULL;
ALTER TABLE llx_product_lot ADD COLUMN lifetime integer DEFAULT NULL;

View file

@ -1,5 +1,6 @@
-- ===================================================================
-- Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
-- Copyright (C) 2023 Laurent Destailleur <eldy@users.sourceforge.net>
--
-- 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
@ -19,4 +20,4 @@
ALTER TABLE llx_prelevement_demande ADD INDEX idx_prelevement_demande_fk_facture (fk_facture);
ALTER TABLE llx_prelevement_demande ADD INDEX idx_prelevement_demande_fk_facture_fourn (fk_facture_fourn);
ALTER TABLE llx_prelevement_demande ADD INDEX idx_prelevement_demande_ext_payment_id (ext_payment_id);

View file

@ -1,5 +1,6 @@
-- ===================================================================
-- Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
-- Copyright (C) 2023 Laurent Destailleur <eldy@users.sourceforge.net>
--
-- 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
@ -27,7 +28,7 @@ create table llx_prelevement_demande
sourcetype varchar(32),
amount double(24,8) NOT NULL,
date_demande datetime NOT NULL,
traite smallint DEFAULT 0,
traite smallint DEFAULT 0, -- 1 means a file for direct-debit or credit-transfer has been created and is in process or finished. Note: can be detected by fk_prelevement_bons IS NOT NULL too.
date_traite datetime,
fk_prelevement_bons integer,
fk_user_demande integer NOT NULL,

View file

@ -11,6 +11,7 @@ LastModifiedRequests=أحدث طلبات السعر المعدلة %s
RequestsOpened=طلبات عروض اسعار مفتوحة
SupplierProposalArea=منطقة عروض الموردين
SupplierProposalShort=عرض المورد
AskPrice=طلب عرض السعر
NewAskPrice=طلب عرض سعر جديد
ShowSupplierProposal=فتح عرض السعر
AddSupplierProposal=عمل طلب عرض سعر
@ -39,3 +40,4 @@ DefaultModelSupplierProposalClosed=القالب الافتراضي عند إغل
SupplierProposalsToClose=عروض موردين لإغلاق
SupplierProposalsToProcess=عروض موردين لمعالجة
AllPriceRequests=جميع الطلبات
TypeContact_supplier_proposal_external_SERVICE=الممثل المتابع للعرض

View file

@ -57,11 +57,14 @@ WarningDataDisappearsWhenDataIsExported=تحذير ، تحتوي هذه القا
VueByAccountAccounting=عرض حسب الحساب المحاسبي
VueBySubAccountAccounting=عرض حسب الحساب المحاسبة الفرعي
MainAccountForCustomersNotDefined=حساب المحاسبة الرئيسي للعملاء الغير محددين في الإعدادات
MainAccountForSuppliersNotDefined=حساب المحاسبة الرئيسي للموردين الغير محددين في الإعدادات
MainAccountForUsersNotDefined=حساب المحاسبة الرئيسي للمستخدمين الغير محددين في الإعدادات
MainAccountForVatPaymentNotDefined=حساب المحاسبة الرئيسي لدفعات (VAT) الغير محددين في الإعدادات
MainAccountForSubscriptionPaymentNotDefined=حساب المحاسبة الرئيسي للمشتركين الغير محددين في الإعدادات
MainAccountForCustomersNotDefined=Main account (from the Chart of Account) for customers not defined in setup
MainAccountForSuppliersNotDefined=Main account (from the Chart of Account) for vendors not defined in setup
MainAccountForUsersNotDefined=Main account (from the Chart of Account) for users not defined in setup
MainAccountForRevenueStampSaleNotDefined=Account (from the Chart of Account) for the revenue stamp (sales) not defined in setup
MainAccountForRevenueStampPurchaseNotDefined=Account (from the Chart of Account) for the revenue stamp (purchases) not defined in setup
MainAccountForVatPaymentNotDefined=Account (from the Chart of Account) for VAT payment not defined in setup
MainAccountForSubscriptionPaymentNotDefined=Account (from the Chart of Account) for membership payment not defined in setup
MainAccountForRetainedWarrantyNotDefined=Account (from the Chart of Account) for the retained warranty not defined in setup
UserAccountNotDefined=لم يتم تعريف حساب في الحسابات في الاعدادات
AccountancyArea=منطقة المحاسبة

View file

@ -1509,7 +1509,8 @@ WatermarkOnDraftContractCards=العلامة المائية على مسودات
MembersSetup=أعضاء وحدة الإعداد
MemberMainOptions=الخيارات الرئيسية
MemberCodeChecker=Options for automatic generation of member codes
AdherentLoginRequired= إدارة تسجيل الدخول لكل عضو
AdherentLoginRequired=Manage a login/password for each member
AdherentLoginRequiredDesc=Add a value for a login and a password on the member file. If the member is linked to a user, updating the member login and password will also update the user login and password.
AdherentMailRequired=البريد الإلكتروني مطلوب لإنشاء عضو جديد
MemberSendInformationByMailByDefault=مربع لإرسال الرسائل للأعضاء تأكيدا على افتراضي
MemberCreateAnExternalUserForSubscriptionValidated=قم بإنشاء تسجيل دخول مستخدم خارجي لكل اشتراك عضو جديد تم التحقق من صحته
@ -2076,6 +2077,10 @@ MAIN_DOCUMENTS_LOGO_HEIGHT=ارتفاع الشعار على صيغة المست
DOC_SHOW_FIRST_SALES_REP=Show first sales representative
MAIN_GENERATE_PROPOSALS_WITH_PICTURE=أضف عمودًا للصورة في سطور الاقتراح
MAIN_DOCUMENTS_WITH_PICTURE_WIDTH=عرض العمود إذا تم إضافة صورة على الخطوط
MAIN_GENERATE_DOCUMENTS_SUPPLIER_PROPOSAL_WITHOUT_UNIT_PRICE=Hide the unit price column on quotation requests
MAIN_GENERATE_DOCUMENTS_SUPPLIER_PROPOSAL_WITHOUT_TOTAL_COLUMN=Hide the total price column on quotation requests
MAIN_GENERATE_DOCUMENTS_PURCHASE_ORDER_WITHOUT_UNIT_PRICE=Hide the unit price column on purchase orders
MAIN_GENERATE_DOCUMENTS_PURCHASE_ORDER_WITHOUT_TOTAL_COLUMN=Hide the total price column on puchase orders
MAIN_PDF_NO_SENDER_FRAME=إخفاء الحدود في إطار عنوان المرسل
MAIN_PDF_NO_RECIPENT_FRAME=إخفاء الحدود على إطار عنوان المستلم
MAIN_PDF_HIDE_CUSTOMER_CODE=إخفاء رمز العميل
@ -2400,4 +2405,4 @@ OptionXShouldBeEnabledInModuleY=Option "<b>%s</b>" should be enabled into module
OptionXIsCorrectlyEnabledInModuleY=Option "<b>%s</b>" is enabled into module <b>%s</b>
AtBottomOfPage=At bottom of page
FailedAuth=failed authentications
MaxNumberOfFailedAuth=Max number of failed authentication in 24h to disable login.
MaxNumberOfFailedAuth=Max number of failed authentication in 24h to deny login.

View file

@ -1237,3 +1237,5 @@ SearchSyntaxTooltipForStringOrNum=For searching inside text fields, you can use
InProgress=قيد التنفيذ
DateOfPrinting=Date of printing
ClickFullScreenEscapeToLeave=Click here to switch in Full screen mode. Press ESCAPE to leave Full screen mode.
UserNotYetValid=Not yet valid
UserExpired=انتهى

View file

@ -42,7 +42,8 @@ SendAskRef=إرسال سعر الطلب٪ الصورة
SupplierProposalCard=طلب بطاقة
ConfirmDeleteAsk=هل تريد بالتأكيد حذف طلب السعر هذا <b> %s </b>؟
ActionsOnSupplierProposal=الأحداث على طلب السعر
DocModelAuroreDescription=نموذج طلب كامل (شعار ...)
DocModelAuroreDescription=A complete template for a vendor quotation request template (old implementation of Sponge template)
DocModelZenithDescription=A complete template for a vendor quotation request template
CommercialAsk=طلب السعر
DefaultModelSupplierProposalCreate=إنشاء نموذج افتراضي
DefaultModelSupplierProposalToBill=القالب الافتراضي عند إغلاق طلب السعر (مقبول)

View file

@ -57,11 +57,14 @@ WarningDataDisappearsWhenDataIsExported=Warning, this list contains only the acc
VueByAccountAccounting=View by accounting account
VueBySubAccountAccounting=View by accounting subaccount
MainAccountForCustomersNotDefined=Основна счетоводна сметка за клиенти, която не е дефинирана в настройката
MainAccountForSuppliersNotDefined=Основна счетоводна сметка за доставчици, която не е дефинирана в настройката
MainAccountForUsersNotDefined=Основна счетоводна сметка за потребители, която не е дефинирана в настройката
MainAccountForVatPaymentNotDefined=Основна счетоводна сметка за плащане на ДДС, която не е дефинирана в настройката
MainAccountForSubscriptionPaymentNotDefined=Основна счетоводна сметка за плащане на абонамент, която не е дефинирана в настройката
MainAccountForCustomersNotDefined=Main account (from the Chart of Account) for customers not defined in setup
MainAccountForSuppliersNotDefined=Main account (from the Chart of Account) for vendors not defined in setup
MainAccountForUsersNotDefined=Main account (from the Chart of Account) for users not defined in setup
MainAccountForRevenueStampSaleNotDefined=Account (from the Chart of Account) for the revenue stamp (sales) not defined in setup
MainAccountForRevenueStampPurchaseNotDefined=Account (from the Chart of Account) for the revenue stamp (purchases) not defined in setup
MainAccountForVatPaymentNotDefined=Account (from the Chart of Account) for VAT payment not defined in setup
MainAccountForSubscriptionPaymentNotDefined=Account (from the Chart of Account) for membership payment not defined in setup
MainAccountForRetainedWarrantyNotDefined=Account (from the Chart of Account) for the retained warranty not defined in setup
UserAccountNotDefined=Accounting account for user not defined in setup
AccountancyArea=Секция за счетоводство

View file

@ -1509,7 +1509,8 @@ WatermarkOnDraftContractCards=Воден знак върху чернови до
MembersSetup=Настройка на модула за членове
MemberMainOptions=Основни параметри
MemberCodeChecker=Options for automatic generation of member codes
AdherentLoginRequired= Управление на входни данни за всеки член
AdherentLoginRequired=Manage a login/password for each member
AdherentLoginRequiredDesc=Add a value for a login and a password on the member file. If the member is linked to a user, updating the member login and password will also update the user login and password.
AdherentMailRequired=Необходим е имейл при създаване на нов член
MemberSendInformationByMailByDefault=По подразбиране е активирано изпращането на потвърждение, чрез имейл до членове (валидиране или нов абонамент)
MemberCreateAnExternalUserForSubscriptionValidated=Create an external user login for each new member subscription validated
@ -2076,6 +2077,10 @@ MAIN_DOCUMENTS_LOGO_HEIGHT=Height for logo on PDF
DOC_SHOW_FIRST_SALES_REP=Show first sales representative
MAIN_GENERATE_PROPOSALS_WITH_PICTURE=Add column for picture on proposal lines
MAIN_DOCUMENTS_WITH_PICTURE_WIDTH=Width of the column if a picture is added on lines
MAIN_GENERATE_DOCUMENTS_SUPPLIER_PROPOSAL_WITHOUT_UNIT_PRICE=Hide the unit price column on quotation requests
MAIN_GENERATE_DOCUMENTS_SUPPLIER_PROPOSAL_WITHOUT_TOTAL_COLUMN=Hide the total price column on quotation requests
MAIN_GENERATE_DOCUMENTS_PURCHASE_ORDER_WITHOUT_UNIT_PRICE=Hide the unit price column on purchase orders
MAIN_GENERATE_DOCUMENTS_PURCHASE_ORDER_WITHOUT_TOTAL_COLUMN=Hide the total price column on puchase orders
MAIN_PDF_NO_SENDER_FRAME=Hide borders on sender address frame
MAIN_PDF_NO_RECIPENT_FRAME=Hide borders on recipent address frame
MAIN_PDF_HIDE_CUSTOMER_CODE=Hide customer code
@ -2400,4 +2405,4 @@ OptionXShouldBeEnabledInModuleY=Option "<b>%s</b>" should be enabled into module
OptionXIsCorrectlyEnabledInModuleY=Option "<b>%s</b>" is enabled into module <b>%s</b>
AtBottomOfPage=At bottom of page
FailedAuth=failed authentications
MaxNumberOfFailedAuth=Max number of failed authentication in 24h to disable login.
MaxNumberOfFailedAuth=Max number of failed authentication in 24h to deny login.

View file

@ -13,6 +13,7 @@ SupplierProposalArea=Секция със запитвания към доста
SupplierProposalShort=Запитване към доставчик
SupplierProposals=Запитвания към доставчик
SupplierProposalsShort=Запитвания към доставчик
AskPrice=Запитване за цена
NewAskPrice=Ново запитване за цена
ShowSupplierProposal=Показване на запитване за цена
AddSupplierProposal=Създаване на запитване за цена
@ -41,7 +42,8 @@ SendAskRef=Изпращане на запитване за цена %s
SupplierProposalCard=Запитване за цена
ConfirmDeleteAsk=Сигурни ли сте, че искате да изтриете това запитване за цена с № <b>%s</b>?
ActionsOnSupplierProposal=Свързани събития
DocModelAuroreDescription=Завършен шаблон на запитване (лого...)
DocModelAuroreDescription=A complete template for a vendor quotation request template (old implementation of Sponge template)
DocModelZenithDescription=A complete template for a vendor quotation request template
CommercialAsk=Запитване за цена
DefaultModelSupplierProposalCreate=Създаване на шаблон по подразбиране
DefaultModelSupplierProposalToBill=Шаблон по подразбиране, когато се затваря запитване за цена (прието)
@ -52,3 +54,6 @@ SupplierProposalsToClose=Запитвания към доставчици за
SupplierProposalsToProcess=Запитвания към доставчици за обработка
LastSupplierProposals=Запитвания за цени: %s последни
AllPriceRequests=Всички запитвания
TypeContact_supplier_proposal_external_SHIPPING=Vendor contact for delivery
TypeContact_supplier_proposal_external_BILLING=Vendor contact for billing
TypeContact_supplier_proposal_external_SERVICE=Изготвил предложение

View file

@ -1237,3 +1237,5 @@ SearchSyntaxTooltipForStringOrNum=For searching inside text fields, you can use
InProgress=U toku
DateOfPrinting=Date of printing
ClickFullScreenEscapeToLeave=Click here to switch in Full screen mode. Press ESCAPE to leave Full screen mode.
UserNotYetValid=Not yet valid
UserExpired=Istekao

View file

@ -57,11 +57,14 @@ WarningDataDisappearsWhenDataIsExported=Warning, this list contains only the acc
VueByAccountAccounting=Visualització per compte comptable
VueBySubAccountAccounting=Visualització per subcompte comptable
MainAccountForCustomersNotDefined=Compte comptable per a clients no definida en la configuració
MainAccountForSuppliersNotDefined=Compte comptable principal per a proveïdors no definit a la configuració
MainAccountForUsersNotDefined=Compte comptable per a usuaris no de definit en la configuració
MainAccountForVatPaymentNotDefined=Compte comptable per a IVA no definida en la configuració
MainAccountForSubscriptionPaymentNotDefined=Compte comptable per a IVA no definida en la configuració del mòdul
MainAccountForCustomersNotDefined=Main account (from the Chart of Account) for customers not defined in setup
MainAccountForSuppliersNotDefined=Main account (from the Chart of Account) for vendors not defined in setup
MainAccountForUsersNotDefined=Main account (from the Chart of Account) for users not defined in setup
MainAccountForRevenueStampSaleNotDefined=Account (from the Chart of Account) for the revenue stamp (sales) not defined in setup
MainAccountForRevenueStampPurchaseNotDefined=Account (from the Chart of Account) for the revenue stamp (purchases) not defined in setup
MainAccountForVatPaymentNotDefined=Account (from the Chart of Account) for VAT payment not defined in setup
MainAccountForSubscriptionPaymentNotDefined=Account (from the Chart of Account) for membership payment not defined in setup
MainAccountForRetainedWarrantyNotDefined=Account (from the Chart of Account) for the retained warranty not defined in setup
UserAccountNotDefined=Compte comptable per a l'usuari no definit a la configuració
AccountancyArea=Àrea de comptabilitat

View file

@ -366,8 +366,8 @@ GenericMaskCodes2= <b> {cccc} </b> el codi del client en n caràcters <br><b>{cc
GenericMaskCodes3=Qualsevol altre caràcter a la màscara es quedarà sense canvis. <br> No es permeten espais<br>
GenericMaskCodes3EAN=La resta de caràcters de la màscara romandran intactes (excepte * o ? En 13a posició a EAN13). <br>No es permeten espais. <br> A EAN13, l'últim caràcter després de l'últim } a la 13a posició hauria de ser * o ? . Se substituirà per la clau calculada.<br>
GenericMaskCodes4a=<u>Example on the 99th %s of the third party TheCompany, with date 2023-01-31:</u><br>
GenericMaskCodes4b=<u>Example on third party created on 2023-01-31:</u><br>
GenericMaskCodes4c=<u>Example on product created on 2023-01-31:</u><br>
GenericMaskCodes4b=<u>Exemple en un tercer creat el 31/01/2023:</u><br>
GenericMaskCodes4c=<u>Exemple de producte creat el 31/01/2023:</u><br>
GenericMaskCodes5=<b>ABC{yy}{mm}-{000000}</b> will give <b>ABC2301-000099</b><br><b>{0000+100@1}-ZZZ/{dd}/XXX</b> will give <b>0199-ZZZ/31/XXX</b><br><b>IN{yy}{mm}-{0000}-{t}</b> will give <b>IN2301-0099-A</b> if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI'
GenericNumRefModelDesc=Retorna un nombre creat d'acord amb una màscara definida.
ServerAvailableOnIPOrPort=Servidor disponible a l'adreça <b>%s</b> al port <b>%s</b>
@ -650,7 +650,7 @@ Module2300Name=Tasques programades
Module2300Desc=Gestió de tasques programades (àlies cron o taula de crons)
Module2400Name=Esdeveniments/Agenda
Module2400Desc=Seguiment d'esdeveniments. Registre d'esdeveniments automàtics per a fer el seguiment o registrar esdeveniments manuals o reunions. Aquest és el mòdul principal per a una bona gestió de la relació amb clients o proveïdors.
Module2430Name=Online Booking Calendar
Module2430Name=Calendari de reserves en línia
Module2430Desc=Proporcioneu un calendari en línia per a permetre que qualsevol persona pugui reservar una cita, segons els rangs o les disponibilitats predefinits.
Module2500Name=SGD / GCE
Module2500Desc=Sistema de gestió de documents / Gestió de continguts electrònics. Organització automàtica dels vostres documents generats o emmagatzemats. Compartiu-los quan ho necessiteu.
@ -1509,7 +1509,8 @@ WatermarkOnDraftContractCards=Marca d'aigua en contractes (en cas d'estar buit)
MembersSetup=Configuració del mòdul Socis
MemberMainOptions=Opcions principals
MemberCodeChecker=Opcions per a la generació automàtica de codis de soci
AdherentLoginRequired= Gestiona un compte d'usuari per a cada soci
AdherentLoginRequired=Gestiona un compte d'usuari/contrasenya per a cada soci
AdherentLoginRequiredDesc=Add a value for a login and a password on the member file. If the member is linked to a user, updating the member login and password will also update the user login and password.
AdherentMailRequired=Cal un correu electrònic per a crear un soci nou
MemberSendInformationByMailByDefault=La casella de selecció per a enviar una confirmació per correu electrònic als socis (validació o nova subscripció) està activada per defecte
MemberCreateAnExternalUserForSubscriptionValidated=Creeu un usuari extern per a cada subscripció nova membre validada
@ -1642,9 +1643,9 @@ LDAPFieldEndLastSubscription=Data final d'afiliació
LDAPFieldTitle=Càrrec
LDAPFieldTitleExample=Exemple:títol
LDAPFieldGroupid=Identificador de grup
LDAPFieldGroupidExample=Example : gidnumber
LDAPFieldGroupidExample=Exemple : gidnumber
LDAPFieldUserid=Identificador personal
LDAPFieldUseridExample=Example : uidnumber
LDAPFieldUseridExample=Exemple : uidnumber
LDAPFieldHomedirectory=Directori d’inici
LDAPFieldHomedirectoryExample=Exemple: directoriprincipal
LDAPFieldHomedirectoryprefix=Prefix del directori inicial
@ -2076,6 +2077,10 @@ MAIN_DOCUMENTS_LOGO_HEIGHT=Alçada del logotip en PDF
DOC_SHOW_FIRST_SALES_REP=Mostra el primer agent comercial
MAIN_GENERATE_PROPOSALS_WITH_PICTURE=Afegiu una columna per a la imatge a les línies de proposta
MAIN_DOCUMENTS_WITH_PICTURE_WIDTH=Amplada de la columna si s'afegeix una imatge a les línies
MAIN_GENERATE_DOCUMENTS_SUPPLIER_PROPOSAL_WITHOUT_UNIT_PRICE=Hide the unit price column on quotation requests
MAIN_GENERATE_DOCUMENTS_SUPPLIER_PROPOSAL_WITHOUT_TOTAL_COLUMN=Hide the total price column on quotation requests
MAIN_GENERATE_DOCUMENTS_PURCHASE_ORDER_WITHOUT_UNIT_PRICE=Hide the unit price column on purchase orders
MAIN_GENERATE_DOCUMENTS_PURCHASE_ORDER_WITHOUT_TOTAL_COLUMN=Hide the total price column on puchase orders
MAIN_PDF_NO_SENDER_FRAME=Amaga les vores del marc d’adreça del remitent
MAIN_PDF_NO_RECIPENT_FRAME=Amaga les vores del marc d’adreça destinatari
MAIN_PDF_HIDE_CUSTOMER_CODE=Amaga el codi de client
@ -2112,7 +2117,7 @@ NewEmailCollector=Col·lector nou de correus electrònics
EMailHost=Servidor IMAP de correu electrònic
EMailHostPort=Port del servidor IMAP de correu electrònic
loginPassword=Inici de sessió/Contrasenya
oauthToken=OAuth2 token
oauthToken=Testimoni OAuth2
accessType=Tipus d'accés
oauthService=Servei d'Oauth
TokenMustHaveBeenCreated=El mòdul OAuth2 ha d'estar habilitat i s'ha d'haver creat un testimoni oauth2 amb els permisos correctes (per exemple, l'àmbit "gmail_full" amb OAuth per a Gmail).
@ -2340,7 +2345,7 @@ INVOICE_ADD_ZATCA_QR_CODEMore=Alguns països àrabs necessiten aquest codi QR a
INVOICE_ADD_SWISS_QR_CODE=Mostra el codi QR-Bill suís a les factures
INVOICE_ADD_SWISS_QR_CODEMore=Switzerland's standard for invoices; make sure ZIP & City are filled and that the accounts have valid Swiss/Liechtenstein IBANs.
INVOICE_SHOW_SHIPPING_ADDRESS=Mostra l'adreça d'enviament
INVOICE_SHOW_SHIPPING_ADDRESSMore=Compulsory indication in some countries (France, ...)
INVOICE_SHOW_SHIPPING_ADDRESSMore=Indicació obligatòria en alguns països (França, ...)
UrlSocialNetworksDesc=Enllaç URL de la xarxa social. Utilitzeu {socialid} per a la part variable que conté l'identificador de la xarxa social.
IfThisCategoryIsChildOfAnother=Si aquesta categoria és fill d'una altra
DarkThemeMode=Mode de tema fosc
@ -2368,12 +2373,12 @@ DefinedAPathForAntivirusCommandIntoSetup=Definiu un camí per a un programa anti
TriggerCodes=Esdeveniments desencadenants
TriggerCodeInfo=Introduïu aquí els codis activadors que han de generar una publicació d'una sol·licitud web (només es permet l'URL extern). Podeu introduir diversos codis d'activació separats per una coma.
EditableWhenDraftOnly=Si no està marcat, el valor només es pot modificar quan l'objecte té un estat d'esborrany
CssOnEdit=CSS on edit pages
CssOnView=CSS on view pages
CssOnList=CSS on lists
HelpCssOnEditDesc=The CSS used when editing the field.<br>Example: "minwiwdth100 maxwidth500 widthcentpercentminusx"
HelpCssOnViewDesc=The CSS used when viewing the field.
HelpCssOnListDesc=The CSS used when field is inside a list table.<br>Example: "tdoverflowmax200"
CssOnEdit=CSS a les pàgines d'edició
CssOnView=CSS a les pàgines de visualització
CssOnList=CSS als llistats
HelpCssOnEditDesc=El CSS utilitzat en editar el camp.<br>Exemple: «minwiwdth100 maxwidth500 widthcentpercentminusx»
HelpCssOnViewDesc=El CSS utilitzat en visualitzar el camp.
HelpCssOnListDesc=El CSS utilitzat quan el camp es troba dins d'una taula de llista.<br>Exemple: «tdoverflowmax200»
RECEPTION_PDF_HIDE_ORDERED=Amaga la quantitat demanada als documents generats per a recepcions
MAIN_PDF_RECEPTION_DISPLAY_AMOUNT_HT=Mostra el preu als documents generats per a recepcions
WarningDisabled=Avís desactivat
@ -2399,5 +2404,5 @@ DefaultForTypeDesc=Plantilla utilitzada per defecte quan es crea un correu elect
OptionXShouldBeEnabledInModuleY=L'opció «<b>%s</b>» s'ha d'habilitar al mòdul <b>%s</b>
OptionXIsCorrectlyEnabledInModuleY=L'opció «<b>%s</b>» està habilitada al mòdul <b>%s</b>
AtBottomOfPage=A la part inferior de la pàgina
FailedAuth=failed authentications
MaxNumberOfFailedAuth=Max number of failed authentication in 24h to disable login.
FailedAuth=autenticacions fallides
MaxNumberOfFailedAuth=Nombre màxim d'autenticacions fallides en 24 hores per a denegar l'inici de sessió.

View file

@ -60,7 +60,7 @@ EditFinancialAccount=Edició compte
LabelBankCashAccount=Nom del banc o de l'efectiu
AccountType=Tipus de compte
BankType0=Compte d'estalvis
BankType1=Current, cheque or credit card account
BankType1=Compte corrent, de xec o de targeta de crèdit
BankType2=Compte caixa/efectiu
AccountsArea=Àrea comptes
AccountCard=Fitxa compte
@ -106,8 +106,8 @@ BankLineNotReconciled=No conciliat
CustomerInvoicePayment=Cobrament a client
SupplierInvoicePayment=Pagament al proveïdor
SubscriptionPayment=Pagament de quota
WithdrawalPayment=Direct Debit payment
BankTransferPayment=Credit Transfer payment
WithdrawalPayment=Pagament per domiciliació bancària
BankTransferPayment=Pagament per transferència de crèdit
SocialContributionPayment=Pagament d'impostos varis
BankTransfer=Transferència bancària
BankTransfers=Transferències bancàries

View file

@ -164,7 +164,7 @@ BillFrom=Emissor
BillTo=Enviar a
ShippingTo=L'enviament a
ActionsOnBill=Accions en la factura
ActionsOnBillRec=Actions on recurring invoice
ActionsOnBillRec=Accions sobre factura recurrent
RecurringInvoiceTemplate=Plantilla / Factura recurrent
NoQualifiedRecurringInvoiceTemplateFound=No es pot generar cap factura de plantilla periòdica.
FoundXQualifiedRecurringInvoiceTemplate=S'han trobat %s factures recurrents de plantilla qualificades per a la generació.
@ -197,7 +197,7 @@ ConfirmClassifyPaidPartiallyReasonDiscount=La resta a pagar <b>(%s %s)</b> és u
ConfirmClassifyPaidPartiallyReasonDiscountNoVat=La resta a pagar <b>(%s %s)</b> és un descompte acordat després de la facturació. Accepto perdre l'IVA d'aquest descompte
ConfirmClassifyPaidPartiallyReasonDiscountVat=La resta a pagar <b>(%s %s)</b> és un descompte atorgat perquè el pagament es va fer abans de temps. Recupero l'IVA d'aquest descompte, sense un abonament.
ConfirmClassifyPaidPartiallyReasonBadCustomer=Client morós
ConfirmClassifyPaidPartiallyReasonBadSupplier=Bad vendor
ConfirmClassifyPaidPartiallyReasonBadSupplier=Mal venedor
ConfirmClassifyPaidPartiallyReasonBankCharge=Deducció per banc (comissió bancària)
ConfirmClassifyPaidPartiallyReasonWithholdingTax=Retenció d'impostos
ConfirmClassifyPaidPartiallyReasonProductReturned=Productes retornats en part
@ -210,7 +210,7 @@ ConfirmClassifyPaidPartiallyReasonProductReturnedDesc=Aquesta elecció és possi
ConfirmClassifyPaidPartiallyReasonBankChargeDesc=L'import no pagat son <b>comissions bancàries</b>, deduïdes directament de <b>l'import correcte</b> pagat pel Client.
ConfirmClassifyPaidPartiallyReasonWithholdingTaxDesc=L'import no pagat mai es pagarà ja que es tracta d'una retenció a la font
ConfirmClassifyPaidPartiallyReasonOtherDesc=Utilitza aquesta opció si totes les altres no són adequades, per exemple, en la següent situació: <br>- el pagament no s'ha completat perquè alguns productes es van tornar a enviar<br>- la quantitat reclamada és massa important perquè s'ha oblidat un descompte <br>En tots els casos, s'ha de corregir l'import excessiu en el sistema de comptabilitat mitjançant la creació d’un abonament.
ConfirmClassifyPaidPartiallyReasonBadSupplierDesc=A <b>bad supplier</b> is a supplier we refuse to pay.
ConfirmClassifyPaidPartiallyReasonBadSupplierDesc=Un <b>mal proveïdor</b> és un proveïdor que ens neguem a pagar.
ConfirmClassifyAbandonReasonOther=Altres
ConfirmClassifyAbandonReasonOtherDesc=Aquesta elecció serà per a qualsevol altre cas. Per exemple arran de la intenció de crear una factura rectificativa.
ConfirmCustomerPayment=Confirmes aquesta entrada de pagament per a <b>%s</b> %s?

View file

@ -137,7 +137,7 @@ CountryLV=Letònia
CountryLB=Líban
CountryLS=Lesotho
CountryLR=Libèria
CountryLY=Libya
CountryLY=Líbia
CountryLI=Liechtenstein
CountryLT=Lituània
CountryLU=Luxemburg

View file

@ -318,8 +318,10 @@ ErrorTheUrlOfYourDolInstanceDoesNotMatchURLIntoOAuthSetup=Error: The URL of you
ErrorMenuExistValue=Ja existeix un menú amb aquest títol o URL
ErrorSVGFilesNotAllowedAsLinksWithout=Els fitxers SVG no es permeten com a enllaços externs sense l'opció %s
ErrorTypeMenu=Impossible afegir un altre menú per al mateix mòdul a la barra de navegació, encara no es gestiona
ErrorTableExist=Table <b>%s</b> already exist
ErrorDictionaryNotFound=Dictionary <b>%s</b> not found
ErrorTableExist=La taula <b>%s</b> ja existeix
ErrorDictionaryNotFound=No s'ha trobat el diccionari <b>%s</b>
ErrorFailedToCreateSymLinkToMedias=Failed to create the symlinks %s to point to %s
# Warnings
WarningParamUploadMaxFileSizeHigherThanPostMaxSize=El paràmetre PHP upload_max_filesize (%s) és superior al paràmetre PHP post_max_size (%s). No es tracta d’una configuració consistent.
WarningPasswordSetWithNoAccount=S'ha establert una contrasenya per a aquest soci. Tot i això, no s'ha creat cap compte d'usuari. Per tant, aquesta contrasenya s’emmagatzema però no es pot utilitzar per a iniciar la sessió a Dolibarr. Pot ser utilitzat per un mòdul/interfície extern, però si no necessiteu definir cap inici de sessió ni contrasenya per a un soci, podeu desactivar l'opció "Gestiona un inici de sessió per a cada soci" des de la configuració del mòdul Socis. Si heu de gestionar un inici de sessió però no necessiteu cap contrasenya, podeu mantenir aquest camp buit per a evitar aquesta advertència. Nota: El correu electrònic també es pot utilitzar com a inici de sessió si el soci està enllaçat amb un usuari.
@ -360,7 +362,7 @@ WarningAutoValNotPossibleWhenStockIsDecreasedOnInvoiceVal=La validació automàt
WarningModuleNeedRefrech = El mòdul <b>%s</b> s'ha desactivat. No oblideu activar-lo
WarningPermissionAlreadyExist=Permisos existents per a aquest objecte
WarningGoOnAccountancySetupToAddAccounts=If this list is empty, go into menu %s - %s - %s to load or create accounts for your chart of account.
WarningCorrectedInvoiceNotFound=Corrected invoice not found
WarningCorrectedInvoiceNotFound=No s'ha trobat la factura corregida
SwissQrOnlyVIR = SwissQR invoice can only be added on invoices set to be paid with credit transfer payments.
SwissQrCreditorAddressInvalid = L'adreça del creditor no és vàlida (s'han definit el codi postal i la ciutat? (%s)
@ -389,4 +391,4 @@ BadSetupOfField = S'ha produït un error en configurar el camp
BadSetupOfFieldClassNotFoundForValidation = Error de configuració incorrecta del camp: no s'ha trobat la classe per a la validació
BadSetupOfFieldFileNotFound = Error de configuració incorrecta del camp: no s'ha trobat el fitxer per a incloure'l
BadSetupOfFieldFetchNotCallable = Error de configuració incorrecta del camp: la recuperació no es pot trucar a la classe
ErrorTooManyAttempts= Too many attempts, please try again later
ErrorTooManyAttempts= Massa intents, torna-ho a provar més tard

View file

@ -123,6 +123,6 @@ Language_ur_PK=Urdú
Language_uz_UZ=Uzbek
Language_vi_VN=Vietnamita
Language_zh_CN=Xinès
Language_zh_TW=Chinese (Taiwan)
Language_zh_TW=Xinès (Taiwan)
Language_zh_HK=Xinès (Hong Kong)
Language_bh_MY=Malai

View file

@ -235,8 +235,8 @@ PersonalValue=Valor personalitzat
NewObject=Nou %s
NewValue=Valor nou
OldValue=Valor antic %s
FieldXModified=Field %s modified
FieldXModifiedFromYToZ=Field %s modified from %s to %s
FieldXModified=S'ha modificat el camp %s
FieldXModifiedFromYToZ=El camp %s s'ha modificat de %s a %s
CurrentValue=Valor actual
Code=Codi
Type=Tipus
@ -348,7 +348,7 @@ MonthOfDay=Mes del dia
DaysOfWeek=Dies de la setmana
HourShort=H
MinuteShort=Minut
SecondShort=sec
SecondShort=seg
Rate=Tipus
CurrencyRate=Tarifa de conversió de moneda
UseLocalTax=Inclou impostos
@ -558,7 +558,7 @@ Unknown=Desconegut
General=General
Size=Mida
OriginalSize=Mida original
RotateImage=Rotate 90°
RotateImage=Gira 90°
Received=Rebut
Paid=Pagat
Topic=Assumpte
@ -1235,5 +1235,7 @@ DropFileToAddItToObject=Deixeu anar un fitxer per a afegir-lo en aquest objecte
UploadFileDragDropSuccess=Els fitxers s'han penjat correctament
SearchSyntaxTooltipForStringOrNum=For searching inside text fields, you can use the characters ^ or $ to make a 'start or end with' search or use the ! to make a 'does not contain' test. You can use the | between two strings instead of a space for a 'OR' condition instead of 'AND'. For numeric values, you can use the operator <, >, <=, >= or != before the value, to filter using a mathematical comparison
InProgress=En progrés
DateOfPrinting=Date of printing
ClickFullScreenEscapeToLeave=Click here to switch in Full screen mode. Press ESCAPE to leave Full screen mode.
DateOfPrinting=Data d'impressió
ClickFullScreenEscapeToLeave=Feu clic aquí per a canviar al mode de pantalla completa. Premeu ESCAPE per a sortir del mode de pantalla completa.
UserNotYetValid=Encara no vàlid
UserExpired=No al dia

View file

@ -163,11 +163,11 @@ ListOfTabsEntries=Llista d'entrades de pestanyes
TabsDefDesc=Definiu aquí les pestanyes proporcionades pel vostre mòdul
TabsDefDescTooltip=Les pestanyes proporcionades pel vostre mòdul/aplicació es defineixen a la matriu <strong> $this->tabs </strong> al fitxer descriptor del mòdul. Podeu editar manualment aquest fitxer o utilitzar l'editor incrustat.
BadValueForType=Valor incorrecte per al tipus %s
DefinePropertiesFromExistingTable=Definiu propietats a partir d'una taula existent
DefinePropertiesFromExistingTable=Definiu els camps/propietats d'una taula existent
DefinePropertiesFromExistingTableDesc=Si ja existeix una taula a la base de dades (per a que l'objecte es creï), podeu utilitzar-la per a definir les propietats de l'objecte.
DefinePropertiesFromExistingTableDesc2=Manteniu-lo buit si la taula encara no existeix. El generador de codi utilitzarà diferents tipus de camps per a crear un exemple de taula que podeu editar més tard.
GeneratePermissions=Vull afegir els permisos d'aquest objecte
GeneratePermissionsHelp=generar permisos per defecte per a aquest objecte
GeneratePermissions=Vull gestionar els permisos d'aquest objecte
GeneratePermissionsHelp=Si marqueu això, s'afegirà algun codi per a gestionar els permisos per a consultar, escriure i eliminar registres dels objectes
PermissionDeletedSuccesfuly=El permís s'ha eliminat correctament
PermissionUpdatedSuccesfuly=El permís s'ha actualitzat correctament
PermissionAddedSuccesfuly=El permís s'ha afegit correctament
@ -178,5 +178,6 @@ ApiObjectDeleted=API per a l'objecte %s s'ha suprimit correctament
CRUDRead=Llegit
CRUDCreateWrite=Crea o Actualitza
FailedToAddCodeIntoDescriptor=No s'ha pogut afegir el codi al descriptor. Comproveu que la cadena de comentaris «%s» encara està present al fitxer.
DictionariesCreated=Dictionary <b>%s</b> created successfully
DictionaryDeleted=Dictionary <b>%s</b> removed successfully
DictionariesCreated=Diccionari <b>%s</b> creat correctament
DictionaryDeleted=El diccionari <b>%s</b> s'ha eliminat correctament
PropertyModuleUpdated=La propietat <b>%s</b> s'ha actualitzat correctament

View file

@ -300,6 +300,7 @@ ConfirmBtnCommonContent = Esteu segur que voleu «%s»?
ConfirmBtnCommonTitle = Confirmeu la vostra acció
CloseDialog = Tancar
Autofill = Emplenament automàtic
OrPasteAnURL=o Enganxeu un URL
# externalsite
ExternalSiteSetup=Configuració de l'enllaç a la pàgina web externa

View file

@ -321,5 +321,5 @@ BatchNotFound=No s'ha trobat lot / sèrie per a aquest producte
StockMovementWillBeRecorded=Es registrarà el moviment d'estoc
StockMovementNotYetRecorded=El moviment d'estoc no es veurà afectat per aquest pas
WarningThisWIllAlsoDeleteStock=Advertència, això també destruirà totes les quantitats en estoc al magatzem
DeleteBatch=Delete lot/serial
ConfirmDeleteBatch=Are you sure you want to delete lot/serial ?
DeleteBatch=Esborra el lot/sèrie
ConfirmDeleteBatch=Esteu segur que voleu suprimir el lot/sèrie?

View file

@ -51,7 +51,7 @@ StripeAccount=Compte de Stripe
StripeChargeList=Llista de càrregues de Stripe
StripeTransactionList=Llista de transaccions de Stripe
StripeCustomerId=ID de client de Stripe
StripePaymentId=Stripe payment id
StripePaymentId=Id de pagament de Stripe
StripePaymentModes=Formes de pagament de Stripe
LocalID=ID local
StripeID=ID de Stripe

View file

@ -42,7 +42,8 @@ SendAskRef=Enviant la petició de preu %s
SupplierProposalCard=Fitxa de petició
ConfirmDeleteAsk=Estàs segur que vols suprimir aquest preu de sol·licitud <b>%s</b>?
ActionsOnSupplierProposal=Esdeveniments en petició de preu
DocModelAuroreDescription=Model de petició completa (logo...)
DocModelAuroreDescription=A complete template for a vendor quotation request template (old implementation of Sponge template)
DocModelZenithDescription=A complete template for a vendor quotation request template
CommercialAsk=Petició de preu
DefaultModelSupplierProposalCreate=Model de creació per defecte
DefaultModelSupplierProposalToBill=Model per defecte en tancar una petició de preu (acceptada)

View file

@ -126,9 +126,9 @@ TicketParams=Paràmetres
TicketsShowModuleLogo=Mostra el logotip del mòdul a la interfície pública
TicketsShowModuleLogoHelp=Activeu aquesta opció per a ocultar el mòdul de logotip a les pàgines de la interfície pública
TicketsShowCompanyLogo=Mostra el logotip de l'empresa en la interfície pública
TicketsShowCompanyLogoHelp=Enable this option to show the logo of the main company in the pages of the public interface
TicketsShowCompanyFooter=Display the footer of the company in the public interface
TicketsShowCompanyFooterHelp=Enable this option to show the footer of the main company in the pages of the public interface
TicketsShowCompanyLogoHelp=Activeu aquesta opció per a mostrar el logotip de l'empresa principal a les pàgines de la interfície pública
TicketsShowCompanyFooter=Mostra el peu de pàgina de l'empresa a la interfície pública
TicketsShowCompanyFooterHelp=Activeu aquesta opció per a mostrar el peu de pàgina de l'empresa principal a les pàgines de la interfície pública
TicketsEmailAlsoSendToMainAddress=També envieu una notificació a l’adreça de correu electrònic principal
TicketsEmailAlsoSendToMainAddressHelp=Activeu aquesta opció per a enviar també un correu electrònic a l'adreça definida a la configuració "%s" (vegeu la pestanya "%s")
TicketsLimitViewAssignedOnly=Restringir la visualització als tiquets assignats a l'usuari actual (no és efectiu per als usuaris externs, sempre estarà limitat al tercer de qui depengui)
@ -329,8 +329,8 @@ OldUser=Usuari antic
NewUser=Usuari nou
NumberOfTicketsByMonth=Nombre d’entrades mensuals
NbOfTickets=Nombre d’entrades
ExternalContributors=External contributors
AddContributor=Add external contributor
ExternalContributors=Col·laboradors externs
AddContributor=Afegeix un col·laborador extern
# notifications
TicketCloseEmailSubjectCustomer=Tiquet tancat

View file

@ -99,7 +99,7 @@ YourRole=Els seus rols
YourQuotaOfUsersIsReached=Ha arribat a la seva quota d'usuaris actius!
NbOfUsers=Nombre d'usuaris
NbOfPermissions=Nombre de permisos
DontDowngradeSuperAdmin=Only another admin can downgrade an admin
DontDowngradeSuperAdmin=Només un altre administrador pot rebaixar el nivell d'un administrador
HierarchicalResponsible=Supervisor
HierarchicView=Vista jeràrquica
UseTypeFieldToChange=Utilitzeu el camp Tipus per a canviar

View file

@ -158,5 +158,5 @@ Reservation=Reserva
PagesViewedPreviousMonth=Pàgines vistes (mes anterior)
PagesViewedTotal=Pàgines vistes (total)
Visibility=Visibilitat
Everyone=Everyone
AssignedContacts=Assigned contacts
Everyone=Tothom
AssignedContacts=Contactes assignats

View file

@ -57,11 +57,14 @@ WarningDataDisappearsWhenDataIsExported=Warning, this list contains only the acc
VueByAccountAccounting=View by accounting account
VueBySubAccountAccounting=View by accounting subaccount
MainAccountForCustomersNotDefined=Hlavní účetní účetnictví pro zákazníky, které nejsou definovány v nastavení
MainAccountForSuppliersNotDefined=Hlavní účty účetnictví pro dodavatele, které nejsou definovány v nastavení
MainAccountForUsersNotDefined=Hlavní účetní účetnictví pro uživatele, které nejsou definovány v nastavení
MainAccountForVatPaymentNotDefined=Účet hlavního účtu pro platbu DPH není definována v nastavení
MainAccountForSubscriptionPaymentNotDefined=Účet hlavního účtu je platba předplatného, která není definována v nastavení
MainAccountForCustomersNotDefined=Main account (from the Chart of Account) for customers not defined in setup
MainAccountForSuppliersNotDefined=Main account (from the Chart of Account) for vendors not defined in setup
MainAccountForUsersNotDefined=Main account (from the Chart of Account) for users not defined in setup
MainAccountForRevenueStampSaleNotDefined=Account (from the Chart of Account) for the revenue stamp (sales) not defined in setup
MainAccountForRevenueStampPurchaseNotDefined=Account (from the Chart of Account) for the revenue stamp (purchases) not defined in setup
MainAccountForVatPaymentNotDefined=Account (from the Chart of Account) for VAT payment not defined in setup
MainAccountForSubscriptionPaymentNotDefined=Account (from the Chart of Account) for membership payment not defined in setup
MainAccountForRetainedWarrantyNotDefined=Account (from the Chart of Account) for the retained warranty not defined in setup
UserAccountNotDefined=Accounting account for user not defined in setup
AccountancyArea=Účetní oblast

View file

@ -1509,7 +1509,8 @@ WatermarkOnDraftContractCards=Vodoznak v návrhu smlouvy (žádný, je-li prázd
MembersSetup=Nastavení modulu členů
MemberMainOptions=Hlavní volby
MemberCodeChecker=Options for automatic generation of member codes
AdherentLoginRequired= Správa Přihlášení pro každého člena
AdherentLoginRequired=Manage a login/password for each member
AdherentLoginRequiredDesc=Add a value for a login and a password on the member file. If the member is linked to a user, updating the member login and password will also update the user login and password.
AdherentMailRequired=K vytvoření nového člena je třeba e-mail
MemberSendInformationByMailByDefault=Zaškrtávací políčko poslat mailem potvrzení členům (validace nebo nové předplatné) je ve výchozím nastavení
MemberCreateAnExternalUserForSubscriptionValidated=Create an external user login for each new member subscription validated
@ -2076,6 +2077,10 @@ MAIN_DOCUMENTS_LOGO_HEIGHT=Height for logo on PDF
DOC_SHOW_FIRST_SALES_REP=Show first sales representative
MAIN_GENERATE_PROPOSALS_WITH_PICTURE=Add column for picture on proposal lines
MAIN_DOCUMENTS_WITH_PICTURE_WIDTH=Width of the column if a picture is added on lines
MAIN_GENERATE_DOCUMENTS_SUPPLIER_PROPOSAL_WITHOUT_UNIT_PRICE=Hide the unit price column on quotation requests
MAIN_GENERATE_DOCUMENTS_SUPPLIER_PROPOSAL_WITHOUT_TOTAL_COLUMN=Hide the total price column on quotation requests
MAIN_GENERATE_DOCUMENTS_PURCHASE_ORDER_WITHOUT_UNIT_PRICE=Hide the unit price column on purchase orders
MAIN_GENERATE_DOCUMENTS_PURCHASE_ORDER_WITHOUT_TOTAL_COLUMN=Hide the total price column on puchase orders
MAIN_PDF_NO_SENDER_FRAME=Hide borders on sender address frame
MAIN_PDF_NO_RECIPENT_FRAME=Hide borders on recipent address frame
MAIN_PDF_HIDE_CUSTOMER_CODE=Hide customer code
@ -2400,4 +2405,4 @@ OptionXShouldBeEnabledInModuleY=Option "<b>%s</b>" should be enabled into module
OptionXIsCorrectlyEnabledInModuleY=Option "<b>%s</b>" is enabled into module <b>%s</b>
AtBottomOfPage=At bottom of page
FailedAuth=failed authentications
MaxNumberOfFailedAuth=Max number of failed authentication in 24h to disable login.
MaxNumberOfFailedAuth=Max number of failed authentication in 24h to deny login.

View file

@ -1237,3 +1237,5 @@ SearchSyntaxTooltipForStringOrNum=For searching inside text fields, you can use
InProgress=probíhá
DateOfPrinting=Date of printing
ClickFullScreenEscapeToLeave=Click here to switch in Full screen mode. Press ESCAPE to leave Full screen mode.
UserNotYetValid=Not yet valid
UserExpired=Vypršela

View file

@ -13,6 +13,7 @@ SupplierProposalArea=Oblast návrhů dodavatele
SupplierProposalShort=Návrh dodavatele
SupplierProposals=Návrhy dodavatele
SupplierProposalsShort=Návrhy dodavatele
AskPrice=Cenový požadavek
NewAskPrice=Nový cenový poožadavek
ShowSupplierProposal=Zobrazit cenový požadavek
AddSupplierProposal=Vytvoření cenového požadavku
@ -41,7 +42,8 @@ SendAskRef=Zaslání cenového požadavku %s
SupplierProposalCard=žádost o kartu
ConfirmDeleteAsk=Opravdu chcete tuto cenovou žádost <b> %s </ b> smazat?
ActionsOnSupplierProposal=Události cenových požadavků
DocModelAuroreDescription=Kompletní model, žádost (logo ...)
DocModelAuroreDescription=A complete template for a vendor quotation request template (old implementation of Sponge template)
DocModelZenithDescription=A complete template for a vendor quotation request template
CommercialAsk=Cenový požadavek
DefaultModelSupplierProposalCreate=Tvorba z výchozí šablony
DefaultModelSupplierProposalToBill=Výchozí šablona při zavírání cenového požadavku (vzat v potaz)
@ -52,3 +54,6 @@ SupplierProposalsToClose=Uzavřené návrhy dodavatele
SupplierProposalsToProcess=Návrhy dodavatele ve zpracování
LastSupplierProposals=Poslední žádosti %s cena
AllPriceRequests=Všechny žádosti
TypeContact_supplier_proposal_external_SHIPPING=Vendor contact for delivery
TypeContact_supplier_proposal_external_BILLING=Vendor contact for billing
TypeContact_supplier_proposal_external_SERVICE=Zástupce následující vypracované nabídky

View file

@ -57,11 +57,14 @@ WarningDataDisappearsWhenDataIsExported=Warning, this list contains only the acc
VueByAccountAccounting=Gweld yn ôl cyfrif cyfrifeg
VueBySubAccountAccounting=Gweld trwy isgyfrif cyfrifo
MainAccountForCustomersNotDefined=Prif gyfrif cyfrifo ar gyfer cwsmeriaid heb ei ddiffinio yn y gosodiad
MainAccountForSuppliersNotDefined=Prif gyfrif cyfrifo ar gyfer gwerthwyr heb ei ddiffinio yn y gosodiad
MainAccountForUsersNotDefined=Prif gyfrif cyfrifo ar gyfer defnyddwyr heb ei ddiffinio yn y gosodiad
MainAccountForVatPaymentNotDefined=Prif gyfrif cyfrifo ar gyfer taliad TAW heb ei ddiffinio yn y gosodiad
MainAccountForSubscriptionPaymentNotDefined=Prif gyfrif cyfrifo ar gyfer taliad tanysgrifiad heb ei ddiffinio yn y gosodiad
MainAccountForCustomersNotDefined=Main account (from the Chart of Account) for customers not defined in setup
MainAccountForSuppliersNotDefined=Main account (from the Chart of Account) for vendors not defined in setup
MainAccountForUsersNotDefined=Main account (from the Chart of Account) for users not defined in setup
MainAccountForRevenueStampSaleNotDefined=Account (from the Chart of Account) for the revenue stamp (sales) not defined in setup
MainAccountForRevenueStampPurchaseNotDefined=Account (from the Chart of Account) for the revenue stamp (purchases) not defined in setup
MainAccountForVatPaymentNotDefined=Account (from the Chart of Account) for VAT payment not defined in setup
MainAccountForSubscriptionPaymentNotDefined=Account (from the Chart of Account) for membership payment not defined in setup
MainAccountForRetainedWarrantyNotDefined=Account (from the Chart of Account) for the retained warranty not defined in setup
UserAccountNotDefined=Accounting account for user not defined in setup
AccountancyArea=Maes cyfrifo

View file

@ -1509,7 +1509,8 @@ WatermarkOnDraftContractCards=Dyfrnod ar gontractau drafft (dim os yn wag)
MembersSetup=Gosod modiwl aelodau
MemberMainOptions=Prif opsiynau
MemberCodeChecker=Options for automatic generation of member codes
AdherentLoginRequired= Rheoli Mewngofnodi ar gyfer pob aelod
AdherentLoginRequired=Manage a login/password for each member
AdherentLoginRequiredDesc=Add a value for a login and a password on the member file. If the member is linked to a user, updating the member login and password will also update the user login and password.
AdherentMailRequired=Mae angen e-bost i greu aelod newydd
MemberSendInformationByMailByDefault=Mae'r blwch ticio i anfon cadarnhad post at aelodau (dilysiad neu danysgrifiad newydd) ymlaen yn ddiofyn
MemberCreateAnExternalUserForSubscriptionValidated=Creu mewngofnod defnyddiwr allanol ar gyfer pob tanysgrifiad aelod newydd a ddilysir
@ -2076,6 +2077,10 @@ MAIN_DOCUMENTS_LOGO_HEIGHT=Uchder ar gyfer y logo ar PDF
DOC_SHOW_FIRST_SALES_REP=Show first sales representative
MAIN_GENERATE_PROPOSALS_WITH_PICTURE=Ychwanegu colofn ar gyfer llun ar linellau cynnig
MAIN_DOCUMENTS_WITH_PICTURE_WIDTH=Lled y golofn os ychwanegir llun ar linellau
MAIN_GENERATE_DOCUMENTS_SUPPLIER_PROPOSAL_WITHOUT_UNIT_PRICE=Hide the unit price column on quotation requests
MAIN_GENERATE_DOCUMENTS_SUPPLIER_PROPOSAL_WITHOUT_TOTAL_COLUMN=Hide the total price column on quotation requests
MAIN_GENERATE_DOCUMENTS_PURCHASE_ORDER_WITHOUT_UNIT_PRICE=Hide the unit price column on purchase orders
MAIN_GENERATE_DOCUMENTS_PURCHASE_ORDER_WITHOUT_TOTAL_COLUMN=Hide the total price column on puchase orders
MAIN_PDF_NO_SENDER_FRAME=Cuddio borderi ar ffrâm cyfeiriad anfonwr
MAIN_PDF_NO_RECIPENT_FRAME=Cuddio borderi ar ffrâm cyfeiriad y rysáit
MAIN_PDF_HIDE_CUSTOMER_CODE=Cuddio cod cwsmer
@ -2400,4 +2405,4 @@ OptionXShouldBeEnabledInModuleY=Option "<b>%s</b>" should be enabled into module
OptionXIsCorrectlyEnabledInModuleY=Option "<b>%s</b>" is enabled into module <b>%s</b>
AtBottomOfPage=At bottom of page
FailedAuth=failed authentications
MaxNumberOfFailedAuth=Max number of failed authentication in 24h to disable login.
MaxNumberOfFailedAuth=Max number of failed authentication in 24h to deny login.

View file

@ -42,7 +42,8 @@ SendAskRef=Anfon y cais pris %s
SupplierProposalCard=Cerdyn cais
ConfirmDeleteAsk=A ydych yn siŵr eich bod am ddileu'r cais pris hwn <b> %s </b> ?
ActionsOnSupplierProposal=Digwyddiadau ar gais pris
DocModelAuroreDescription=Model cais cyflawn (logo...)
DocModelAuroreDescription=A complete template for a vendor quotation request template (old implementation of Sponge template)
DocModelZenithDescription=A complete template for a vendor quotation request template
CommercialAsk=Cais pris
DefaultModelSupplierProposalCreate=Creu model diofyn
DefaultModelSupplierProposalToBill=Templed rhagosodedig wrth gau cais pris (derbynnir)

Some files were not shown because too many files have changed in this diff Show more