Merge branch '15.0' of git@github.com:Dolibarr/dolibarr.git into develop

Conflicts:
	htdocs/install/mysql/migration/14.0.0-15.0.0.sql
	htdocs/langs/en_US/banks.lang
	htdocs/projet/list.php
This commit is contained in:
Laurent Destailleur 2022-02-28 20:12:28 +01:00
commit c2fb5d577c
28 changed files with 240 additions and 82 deletions

View File

@ -659,8 +659,7 @@ class Adherent extends CommonObject
$nbrowsaffected = 0;
$error = 0;
dol_syslog(get_class($this)."::update notrigger=".$notrigger.", nosyncuser=".$nosyncuser.", nosyncuserpass=".$nosyncuserpass." nosyncthirdparty=".$nosyncthirdparty.", email=".
$this->email);
dol_syslog(get_class($this)."::update notrigger=".$notrigger.", nosyncuser=".$nosyncuser.", nosyncuserpass=".$nosyncuserpass." nosyncthirdparty=".$nosyncthirdparty.", email=".$this->email);
// Clean parameters
$this->lastname = trim($this->lastname) ? trim($this->lastname) : trim($this->lastname);
@ -693,7 +692,9 @@ class Adherent extends CommonObject
$sql .= ", gender = ".($this->gender != -1 ? "'".$this->db->escape($this->gender)."'" : "null"); // 'man' or 'woman'
$sql .= ", login = ".($this->login ? "'".$this->db->escape($this->login)."'" : "null");
$sql .= ", societe = ".($this->company ? "'".$this->db->escape($this->company)."'" : ($this->societe ? "'".$this->db->escape($this->societe)."'" : "null"));
$sql .= ", fk_soc = ".($this->socid > 0 ? $this->db->escape($this->socid) : "null");
if ($this->socid) {
$sql .= ", fk_soc = ".($this->socid > 0 ? $this->db->escape($this->socid) : "null"); // Must be modified only when creating from a third-party
}
$sql .= ", address = ".($this->address ? "'".$this->db->escape($this->address)."'" : "null");
$sql .= ", zip = ".($this->zip ? "'".$this->db->escape($this->zip)."'" : "null");
$sql .= ", town = ".($this->town ? "'".$this->db->escape($this->town)."'" : "null");
@ -713,9 +714,6 @@ class Adherent extends CommonObject
$sql .= ", fk_adherent_type = ".$this->db->escape($this->typeid);
$sql .= ", morphy = '".$this->db->escape($this->morphy)."'";
$sql .= ", birth = ".($this->birth ? "'".$this->db->idate($this->birth)."'" : "null");
if ($this->socid) {
$sql .= ", fk_soc = '".$this->db->escape($this->socid)."'"; // Must be modified only when creating from a third-party
}
if ($this->datefin) {
$sql .= ", datefin = '".$this->db->idate($this->datefin)."'"; // Must be modified only when deleting a subscription
}

View File

@ -307,7 +307,7 @@ $memberstatic = new Adherent($db);
$now = dol_now();
if (!empty($search_categ) || !empty($catid)) {
if ((!empty($search_categ) && $search_categ > 0) || !empty($catid)) {
$sql = "SELECT DISTINCT";
} else {
$sql = "SELECT";
@ -336,7 +336,7 @@ $sql .= " FROM ".MAIN_DB_PREFIX."adherent as d";
if (!empty($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) {
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (d.rowid = ef.fk_object)";
}
if (!empty($search_categ) || !empty($catid)) {
if ((!empty($search_categ) && $search_categ > 0) || !empty($catid)) {
// We need this table joined to the select in order to filter by categ
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_member as cm ON d.rowid = cm.fk_member";
}
@ -540,7 +540,7 @@ if ($search_login) {
if ($search_email) {
$param .= "&search_email=".urlencode($search_email);
}
if ($search_categ) {
if ($search_categ > 0 || $search_categ == -2) {
$param .= "&search_categ=".urlencode($search_categ);
}
if ($search_company) {
@ -573,7 +573,7 @@ if ($search_phone_mobile != '') {
if ($search_filter && $search_filter != '-1') {
$param .= "&search_filter=".urlencode($search_filter);
}
if ($search_status != "" && $search_status != Adherent::STATUS_DRAFT) {
if ($search_status != "" && $search_status != -3) {
$param .= "&search_status=".urlencode($search_status);
}
if ($search_type > 0) {

View File

@ -743,7 +743,7 @@ if (empty($reshook)) {
}
if (!$error) {
// On verifie si la facture a des paiements
// We check if invoice has payments
$sql = 'SELECT pf.amount';
$sql .= ' FROM '.MAIN_DB_PREFIX.'paiement_facture as pf';
$sql .= ' WHERE pf.fk_facture = '.((int) $object->id);
@ -993,7 +993,7 @@ if (empty($reshook)) {
$db->rollback();
}
}
} elseif ($action == 'confirm_delete_paiement' && $confirm == 'yes' && $usercancreate) {
} elseif ($action == 'confirm_delete_paiement' && $confirm == 'yes' && $usercanissuepayment) {
// Delete payment
$object->fetch($id);
if ($object->statut == Facture::STATUS_VALIDATED && $object->paye == 0) {

View File

@ -75,6 +75,12 @@ $hookmanager->initHooks(array('paiementcard', 'globalcard'));
$formquestion = array();
$usercanissuepayment = !empty($user->rights->facture->paiement);
$fieldid = 'rowid';
$isdraft = (($object->statut == Facture::STATUS_DRAFT) ? 1 : 0);
$result = restrictedArea($user, 'facture', $object->id, '', '', 'fk_soc', $fieldid, $isdraft);
/*
* Actions
@ -87,7 +93,7 @@ if ($reshook < 0) {
}
if (empty($reshook)) {
if ($action == 'add_paiement' || ($action == 'confirm_paiement' && $confirm == 'yes')) {
if (($action == 'add_paiement' || ($action == 'confirm_paiement' && $confirm == 'yes')) && $usercanissuepayment) {
$error = 0;
$datepaye = dol_mktime(12, 0, 0, GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int'));
@ -202,7 +208,7 @@ if (empty($reshook)) {
/*
* Action confirm_paiement
*/
if ($action == 'confirm_paiement' && $confirm == 'yes') {
if ($action == 'confirm_paiement' && $confirm == 'yes' && $usercanissuepayment) {
$error = 0;
$datepaye = dol_mktime(12, 0, 0, GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int'));
@ -486,7 +492,7 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
print '<td><span class="fieldrequired">'.$langs->trans('AccountToDebit').'</span></td>';
}
print '<td>';
$form->select_comptes($accountid, 'accountid', 0, '', 2);
print $form->select_comptes($accountid, 'accountid', 0, '', 2, '', 0, '', 1);
print '</td>';
} else {
print '<td>&nbsp;</td>';

View File

@ -64,6 +64,8 @@ if ($socid && $socid != $object->thirdparty->id) {
accessforbidden();
}
$error = 0;
/*
* Actions
@ -191,6 +193,39 @@ if ($action == 'setdatep' && GETPOST('datepday')) {
setEventMessages($langs->trans('PaymentDateUpdateFailed'), null, 'errors');
}
}
if ($action == 'createbankpayment' && !empty($user->rights->facture->paiement)) {
$db->begin();
// Create the record into bank for the amount of payment $object
if (!$error) {
$label = '(CustomerInvoicePayment)';
if (GETPOST('type') == Facture::TYPE_CREDIT_NOTE) {
$label = '(CustomerInvoicePaymentBack)'; // Refund of a credit note
}
$bankaccountid = GETPOST('accountid', 'int');
if ($bankaccountid > 0) {
$object->paiementcode = $object->type_code;
$object->amounts = $object->getAmountsArray();
$result = $object->addPaymentToBank($user, 'payment', $label, $bankaccountid, '', '');
if ($result < 0) {
setEventMessages($object->error, $object->errors, 'errors');
$error++;
}
} else {
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("BankAccount")), null, 'errors');
$error++;
}
}
if (!$error) {
$db->commit();
} else {
$db->rollback();
}
}
/*
@ -315,7 +350,37 @@ if (!empty($conf->banque->enabled)) {
print $bankline->getNomUrl(1, 0, 'showconciliatedandaccounted');
} else {
$langs->load("admin");
print '<span class="opacitymedium">'.$langs->trans("NoRecordFoundIBankcAccount", $langs->transnoentitiesnoconv("Module85Name")).'</span>';
print '<span class="opacitymedium">';
print $langs->trans("NoRecordFoundIBankcAccount", $langs->transnoentitiesnoconv("Module85Name"));
print '</span>';
if (!empty($user->rights->facture->paiement)) {
// Try to guess $bankaccountidofinvoices that is ID of bank account defined on invoice.
// Return null if not found, return 0 if it has different value for at least 2 invoices, return the value if same on all invoices where a bank is defined.
$amountofpayments = $object->getAmountsArray();
$bankaccountidofinvoices = null;
foreach ($amountofpayments as $idinvoice => $amountofpayment) {
$tmpinvoice = new Facture($db);
$tmpinvoice->fetch($idinvoice);
if ($tmpinvoice->fk_account > 0 && $bankaccountidofinvoices !== 0) {
if (is_null($bankaccountidofinvoices)) {
$bankaccountidofinvoices = $tmpinvoice->fk_account;
} elseif ($bankaccountidofinvoices != $tmpinvoice->fk_account) {
$bankaccountidofinvoices = 0;
}
}
}
print '<form method="POST" name="createbankpayment">';
print '<input type="hidden" name="token" value="'.newToken().'">';
print '<input type="hidden" name="action" value="createbankpayment">';
print '<input type="hidden" name="id" value="'.$object->id.'">';
print ' '.$langs->trans("ToCreateRelatedRecordIntoBank").': ';
print $form->select_comptes($bankaccountidofinvoices, 'accountid', 0, '', 2, '', 0, '', 1);
//print '<span class="opacitymedium">';
print '<input type="submit" class="button small smallpaddingimp" name="createbankpayment" value="'.$langs->trans("ClickHere").'">';
//print '</span>';
print '</form>';
}
}
print '</td>';
print '</tr>';

View File

@ -954,6 +954,7 @@ class Paiement extends CommonObject
*
* @param string $filter Filter
* @return int|array <0 if KO or array of invoice id
* @see getAmountsArray()
*/
public function getBillsArray($filter = '')
{
@ -987,6 +988,7 @@ class Paiement extends CommonObject
* Return list of amounts of payments.
*
* @return int|array Array of amount of payments
* @see getBillsArray()
*/
public function getAmountsArray()
{

View File

@ -7717,7 +7717,7 @@ abstract class CommonObject
if (empty($reshook)) {
if (key_exists('label', $extrafields->attributes[$this->table_element]) && is_array($extrafields->attributes[$this->table_element]['label']) && count($extrafields->attributes[$this->table_element]['label']) > 0) {
$out .= "\n";
$out .= '<!-- showOptionals --> ';
$out .= '<!-- commonobject:showOptionals --> ';
$out .= "\n";
$extrafields_collapse_num = '';

View File

@ -225,7 +225,14 @@ function getURLContent($url, $postorget = 'GET', $param = '', $followlocation =
}
// Common check on ip (local and external)
$arrayofmetadataserver = array('100.100.100.200' => 'Alibaba', '192.0.0.192'=> 'Oracle', '192.80.8.124'=>'Packet');
// See list on https://tagmerge.com/gist/a7b9d57ff8ec11d63642f8778609a0b8
// Not evasive url that ar enot IP are excluded by test on IP v4/v6 validity.
$arrayofmetadataserver = array(
'100.100.100.200' => 'Alibaba',
'192.0.0.192' => 'Oracle',
'192.80.8.124' => 'Packet',
'100.88.222.5' => 'Tencent cloud',
);
foreach ($arrayofmetadataserver as $ipofmetadataserver => $nameofmetadataserver) {
if ($iptocheck == $ipofmetadataserver) {
$info['http_code'] = 400;

View File

@ -356,7 +356,7 @@ if ($nolinesbefore) {
}
if (is_object($objectline)) {
$temps = $objectline->showOptionals($extrafields, 'create', array(), '', '', 1, 'line');
;
if (!empty($temps)) {
print '<div style="padding-top: 10px" id="extrafield_lines_area_create" name="extrafield_lines_area_create">';
print $temps;

View File

@ -1342,6 +1342,23 @@ if ($action == 'create') {
print '<a name="'.$objp->rowid.'"></a>'; // ancre pour retourner sur la ligne
print dol_htmlentitiesbr($objp->description);
$objectline = new FichinterLigne($db);
$objectline->fetch($objp->rowid);
$objectline->fetch_optionals();
$extrafields->fetch_name_optionals_label($objectline->table_element);
if (!empty($extrafields)) {
$temps = $objectline->showOptionals($extrafields, 'view', array(), '', '', 1, 'line');
if (!empty($temps)) {
print '<div style="padding-top: 10px" id="extrafield_lines_area_'.$line->id.'" name="extrafield_lines_area_'.$line->id.'">';
print $temps;
print '</div>';
}
}
print '</td>';
// Date
print '<td class="center" width="150">'.(empty($conf->global->FICHINTER_DATE_WITHOUT_HOUR) ?dol_print_date($db->jdate($objp->date_intervention), 'dayhour') : dol_print_date($db->jdate($objp->date_intervention), 'day')).'</td>';
@ -1378,15 +1395,6 @@ if ($action == 'create') {
}
print '</tr>';
$line = new FichinterLigne($db);
$line->fetch($objp->rowid);
$extrafields->fetch_name_optionals_label($line->table_element);
$line->fetch_optionals();
print $line->showOptionals($extrafields, 'view', array('colspan'=>5));
}
// Line in update mode
@ -1405,6 +1413,22 @@ if ($action == 'create') {
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
$doleditor = new DolEditor('np_desc', $objp->description, '', 164, 'dolibarr_details', '', false, true, $conf->global->FCKEDITOR_ENABLE_DETAILS, ROWS_2, '90%');
$doleditor->Create();
$objectline = new FichinterLigne($db);
$objectline->fetch($objp->rowid);
$objectline->fetch_optionals();
$extrafields->fetch_name_optionals_label($objectline->table_element);
if (!empty($extrafields)) {
$temps = $objectline->showOptionals($extrafields, 'edit', array(), '', '', 1, 'line');
if (!empty($temps)) {
print '<div style="padding-top: 10px" id="extrafield_lines_area_'.$line->id.'" name="extrafield_lines_area_'.$line->id.'">';
print $temps;
print '</div>';
}
}
print '</td>';
// Date d'intervention
@ -1431,14 +1455,6 @@ if ($action == 'create') {
print '<input type="submit" class="button buttongen marginbottomonly button-save" name="save" value="'.$langs->trans("Save").'">';
print '<input type="submit" class="button buttongen marginbottomonly button-cancel" name="cancel" value="'.$langs->trans("Cancel").'"></td>';
print '</tr>'."\n";
$line = new FichinterLigne($db);
$line->fetch($objp->rowid);
$extrafields->fetch_name_optionals_label($line->table_element);
$line->fetch_optionals();
print $line->showOptionals($extrafields, 'edit', array('colspan'=>5));
}
$i++;
@ -1481,6 +1497,20 @@ if ($action == 'create') {
$doleditor = new DolEditor('np_desc', GETPOST('np_desc', 'restricthtml'), '', 100, 'dolibarr_details', '', false, true, $conf->global->FCKEDITOR_ENABLE_DETAILS, ROWS_2, '90%');
$doleditor->Create();
}
$objectline = new FichinterLigne($db);
$extrafields->fetch_name_optionals_label($objectline->table_element);
if (is_object($objectline)) {
$temps = $objectline->showOptionals($extrafields, 'create', array(), '', '', 1, 'line');
if (!empty($temps)) {
print '<div style="padding-top: 10px" id="extrafield_lines_area_create" name="extrafield_lines_area_create">';
print $temps;
print '</div>';
}
}
print '</td>';
// Date intervention
@ -1513,14 +1543,6 @@ if ($action == 'create') {
print '<td class="center" valign="middle" colspan="3"><input type="submit" class="button button-add" value="'.$langs->trans('Add').'" name="addline"></td>';
print '</tr>';
//Line extrafield
$lineadd = new FichinterLigne($db);
$extrafields->fetch_name_optionals_label($lineadd->table_element);
print $lineadd->showOptionals($extrafields, 'edit', array('colspan'=>5));
if (!$num) {
print '</table>';
}

View File

@ -0,0 +1,27 @@
-- Copyright (C) 2020 florian HENRY florian.henry@scopen.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
-- the Free Software Foundation; either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see <https://www.gnu.org/licenses/>.
--
--
--
-- Do not place a comment at the end of the line, this file is parsed when
-- from the install and all '--' are removed.
--
-- Ne pas placer de commentaire en fin de ligne, ce fichier est parsé lors
-- de l'install et tous les sigles '--' sont supprimés.
--
INSERT INTO llx_c_partnership_type (code, label, active) VALUES ('DEFAULT', 'Default', 1);

View File

@ -507,6 +507,7 @@ INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) value
INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_CANCEL','Holiday canceled','Executed when a holiday is canceled','holiday',802);
INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_DELETE','Holiday deleted','Executed when a holiday is deleted','holiday',804);
-- We do not delete old mexican legal forms because they may have been used. User will have to insert the new one manually not inserted because of conflict if he need them.
--DELETE FROM llx_c_forme_juridique WHERE code IN ('15401', '15402', '15403', '15404', '15405', '15406');
@ -529,3 +530,7 @@ INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154,
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15417', '624 - Coordinados', 1);
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15418', '625 - Régimen de las Actividades Empresariales con ingresos a través de Plataformas Tecnológicas', 1);
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15419', '626 - Régimen Simplificado de Confianza', 1);
-- VMYSQL4.3 ALTER TABLE llx_user MODIFY COLUMN fk_soc integer NULL;
-- VPGSQL8.2 ALTER TABLE llx_user ALTER COLUMN fk_soc DROP NOT NULL;

View File

@ -69,6 +69,26 @@ ALTER TABLE llx_c_typent MODIFY COLUMN libelle varchar(128);
UPDATE llx_rights_def SET perms = 'writeall' WHERE perms = 'writeall_advance' AND module = 'holiday';
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15401', '601 - General de Ley Personas Morales', 1);
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15402', '603 - Personas Morales con Fines no Lucrativos', 1);
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15403', '605 - Sueldos y Salarios e Ingresos Asimilados a Salarios', 1);
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15404', '606 - Arrendamiento', 1);
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15405', '607 - Régimen de Enajenación o Adquisición de Bienes', 1);
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15406', '608 - Demás ingresos', 1);
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15407', '610 - Residentes en el Extranjero sin Establecimiento Permanente en México', 1);
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15408', '611 - Ingresos por Dividendos (socios y accionistas)', 1);
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15409', '612 - Personas Físicas con Actividades Empresariales y Profesionales', 1);
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15410', '614 - Ingresos por intereses', 1);
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15411', '615 - Régimen de los ingresos por obtención de premios', 1);
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15412', '616 - Sin obligaciones fiscales', 1);
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15413', '620 - Sociedades Cooperativas de Producción que optan por diferir sus ingresos', 1);
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15414', '621 - Incorporación Fiscal', 1);
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15415', '622 - Actividades Agrícolas, Ganaderas, Silvícolas y Pesqueras', 1);
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15416', '623 - Opcional para Grupos de Sociedades', 1);
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15417', '624 - Coordinados', 1);
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15418', '625 - Régimen de las Actividades Empresariales con ingresos a través de Plataformas Tecnológicas', 1);
INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (154, '15419', '626 - Régimen Simplificado de Confianza', 1);
-- v16

View File

@ -21,7 +21,7 @@
ALTER TABLE llx_user ADD UNIQUE INDEX uk_user_login (login, entity);
ALTER TABLE llx_user ADD INDEX idx_user_fk_societe (fk_soc);
ALTER TABLE llx_user ADD INDEX idx_user_fk_societe (fk_soc);
ALTER TABLE llx_user ADD UNIQUE INDEX uk_user_fk_socpeople (fk_socpeople);
ALTER TABLE llx_user ADD UNIQUE INDEX uk_user_fk_member (fk_member);

View File

@ -64,12 +64,12 @@ create table llx_user
--module_comm smallint DEFAULT 1,
--module_compta smallint DEFAULT 1,
fk_soc integer, -- id thirdparty if user linked to a company (external user)
fk_socpeople integer, -- id contact origin if user linked to a contact
fk_member integer, -- if member if suer linked to a member
fk_user integer, -- Supervisor, hierarchic parent
fk_user_expense_validator integer,
fk_user_holiday_validator integer,
fk_soc integer NULL, -- id thirdparty if user linked to a company (external user)
fk_socpeople integer NULL, -- id contact origin if user linked to a contact
fk_member integer NULL, -- if member if suer linked to a member
fk_user integer NULL, -- Supervisor, hierarchic parent
fk_user_expense_validator integer NULL,
fk_user_holiday_validator integer NULL,
idpers1 varchar(128),
idpers2 varchar(128),

View File

@ -183,4 +183,5 @@ NoBankAccountDefined=No bank account defined
NoRecordFoundIBankcAccount=No record found in bank account. Commonly, this occurs when a record has been deleted manually from the list of transaction in the bank account (for example during a reconciliation of the bank account). Another reason is that the payment was recorded when the module "%s" was disabled.
AlreadyOneBankAccount=Already one bank account defined
SEPAXMLPlacePaymentTypeInformationInCreditTransfertransactionInformation=SEPA transfer: 'Payment Type' at 'Credit Transfer' level
SEPAXMLPlacePaymentTypeInformationInCreditTransfertransactionInformationHelp=SEPA XML: PaymentTypeInformation is mandatory and can now be placed at CreditTransferTransactionInformation level (instead of Payment level). We strongly recommend to place PaymentTypeInformation at Payment level, as all banks will not necessarily accept it at CreditTransferTransactionInformation level. Contact your bank before placing PaymentTypeInformation at CreditTransferTransactionInformation level.
SEPAXMLPlacePaymentTypeInformationInCreditTransfertransactionInformationHelp=SEPA XML: PaymentTypeInformation is mandatory and can now be placed at CreditTransferTransactionInformation level (instead of Payment level). We strongly recommend to place PaymentTypeInformation at Payment level, as all banks will not necessarily accept it at CreditTransferTransactionInformation level. Contact your bank before placing PaymentTypeInformation at CreditTransferTransactionInformation level.
ToCreateRelatedRecordIntoBank=To create missing related bank record

View File

@ -67,7 +67,7 @@ ErrorDestinationAlreadyExists=Another file with the name <b>%s</b> already exist
ErrorPartialFile=File not received completely by server.
ErrorNoTmpDir=Temporary directy %s does not exists.
ErrorUploadBlockedByAddon=Upload blocked by a PHP/Apache plugin.
ErrorFileSizeTooLarge=File size is too large.
ErrorFileSizeTooLarge=File size is too large or file not provided.
ErrorFieldTooLong=Field %s is too long.
ErrorSizeTooLongForIntType=Size too long for int type (%s digits maximum)
ErrorSizeTooLongForVarcharType=Size too long for string type (%s chars maximum)

View File

@ -1165,3 +1165,5 @@ NotClosedYet=Not yet closed
ClearSignature=Reset signature
CanceledHidden=Canceled hidden
CanceledShown=Canceled shown
Terminate=Terminate
Terminated=Terminated

View File

@ -503,7 +503,7 @@ if ((!defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && getDolGlobalInt(
// If token is not provided or empty, error (we are in case it is mandatory)
if (!GETPOST('token', 'alpha') || GETPOST('token', 'alpha') == 'notrequired') {
if (GETPOST('uploadform', 'int')) {
dol_syslog("--- Access to ".(empty($_SERVER["REQUEST_METHOD"]) ? '' : $_SERVER["REQUEST_METHOD"].' ').$_SERVER["PHP_SELF"]." refused. File size too large.");
dol_syslog("--- Access to ".(empty($_SERVER["REQUEST_METHOD"]) ? '' : $_SERVER["REQUEST_METHOD"].' ').$_SERVER["PHP_SELF"]." refused. File size too large or not provided.");
$langs->loadLangs(array("errors", "install"));
print $langs->trans("ErrorFileSizeTooLarge").' ';
print $langs->trans("ErrorGoBackAndCorrectParameters");

View File

@ -118,7 +118,7 @@ class Partnership extends CommonObject
'model_pdf' => array('type'=>'varchar(255)', 'label'=>'Model pdf', 'enabled'=>'1', 'position'=>1010, 'notnull'=>-1, 'visible'=>0,),
'date_partnership_start' => array('type'=>'date', 'label'=>'DatePartnershipStart', 'enabled'=>'1', 'position'=>52, 'notnull'=>1, 'visible'=>1,),
'date_partnership_end' => array('type'=>'date', 'label'=>'DatePartnershipEnd', 'enabled'=>'1', 'position'=>53, 'notnull'=>0, 'visible'=>1,),
'status' => array('type'=>'smallint', 'label'=>'Status', 'enabled'=>'1', 'position'=>54, 'notnull'=>0, 'visible'=>2, 'index'=>1, 'arrayofkeyval'=>array('-1'=>'','0'=>'Draft', '1'=>'Accepted', '2'=>'Refused', '9'=>'Canceled'),),
'status' => array('type'=>'smallint', 'label'=>'Status', 'enabled'=>'1', 'position'=>54, 'notnull'=>0, 'visible'=>2, 'index'=>1, 'arrayofkeyval'=>array('-1'=>'','0'=>'Draft', '1'=>'Accepted', '2'=>'Refused', '9'=>'Terminated'),),
'count_last_url_check_error' => array('type'=>'integer', 'label'=>'CountLastUrlCheckError', 'enabled'=>'1', 'position'=>63, 'notnull'=>0, 'visible'=>-2, 'default'=>'0',),
'last_check_backlink' => array('type'=>'datetime', 'label'=>'LastCheckBacklink', 'enabled'=>'1', 'position'=>65, 'notnull'=>0, 'visible'=>-2,),
'reason_decline_or_cancel' => array('type'=>'text', 'label'=>'ReasonDeclineOrCancel', 'enabled'=>'1', 'position'=>64, 'notnull'=>0, 'visible'=>-2,),
@ -1085,12 +1085,12 @@ class Partnership extends CommonObject
$this->labelStatus[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv('Validated');
$this->labelStatus[self::STATUS_APPROVED] = $langs->transnoentitiesnoconv('Approved');
$this->labelStatus[self::STATUS_REFUSED] = $langs->transnoentitiesnoconv('Refused');
$this->labelStatus[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv('Canceled');
$this->labelStatus[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv('Terminated');
$this->labelStatusShort[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv('Draft');
$this->labelStatusShort[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv('Validated');
$this->labelStatusShort[self::STATUS_APPROVED] = $langs->transnoentitiesnoconv('Approved');
$this->labelStatusShort[self::STATUS_REFUSED] = $langs->transnoentitiesnoconv('Refused');
$this->labelStatusShort[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv('Canceled');
$this->labelStatusShort[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv('Terminated');
}
$statusType = 'status'.$status;

View File

@ -64,7 +64,7 @@ class PartnershipUtils
{
global $conf, $langs, $user;
$managedfor = $conf->global->PARTNERSHIP_IS_MANAGED_FOR;
$managedfor = empty($conf->global->PARTNERSHIP_IS_MANAGED_FOR) ? 'thirdparty' : $conf->global->PARTNERSHIP_IS_MANAGED_FOR;
if ($managedfor != 'member') {
return 0; // If option 'PARTNERSHIP_IS_MANAGED_FOR' = 'thirdparty', this cron job does nothing.

View File

@ -79,13 +79,14 @@ $permissiontodelete = $user->rights->partnership->delete || ($permissiontoadd &
$permissionnote = $user->rights->partnership->write; // Used by the include of actions_setnotes.inc.php
$permissiondellink = $user->rights->partnership->write; // Used by the include of actions_dellink.inc.php
$upload_dir = $conf->partnership->multidir_output[isset($object->entity) ? $object->entity : 1];
$managedfor = $conf->global->PARTNERSHIP_IS_MANAGED_FOR;
$managedfor = empty($conf->global->PARTNERSHIP_IS_MANAGED_FOR) ? 'thirdparty' : $conf->global->PARTNERSHIP_IS_MANAGED_FOR;
if (empty($conf->partnership->enabled)) accessforbidden();
if (empty($permissiontoread)) accessforbidden();
if ($object->id > 0 && $object->fk_member > 0 && $managedfor != 'member') accessforbidden();
if ($object->id > 0 && $object->fk_soc > 0 && $managedfor != 'thirdparty') accessforbidden();
/*
* Actions
*/
@ -578,7 +579,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
// Approve
if ($object->status == $object::STATUS_VALIDATED) {
if (empty($object->table_element_line) || (is_array($object->lines) && count($object->lines) > 0)) {
print dolGetButtonAction($langs->trans('Approved'), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=confirm_accept&confirm=yes&token='.newToken(), '', $permissiontoadd);
print dolGetButtonAction($langs->trans('Approve'), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=confirm_accept&confirm=yes&token='.newToken(), '', $permissiontoadd);
} else {
$langs->load("errors");
print dolGetButtonAction($langs->trans("ErrorAddAtLeastOneLineFirst"), $langs->trans("Approved"), 'default', '#', '', 0);
@ -588,7 +589,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
// Cancel
if ($permissiontoadd) {
if ($object->status == $object::STATUS_APPROVED) {
print dolGetButtonAction($langs->trans('Cancel'), '', 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=close&token='.newToken(), '', $permissiontoadd);
print dolGetButtonAction($langs->trans('Resiliate'), '', 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=close&token='.newToken(), '', $permissiontoadd);
} elseif ($object->status > $object::STATUS_APPROVED) {
// print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=reopen&token='.newToken().'">'.$langs->trans("Re-Open").'</a>'."\n";
print dolGetButtonAction($langs->trans('Re-Open'), '', 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=confirm_reopen&confirm=yes&token='.newToken(), '', $permissiontoadd);

View File

@ -74,7 +74,7 @@ $extrafields->fetch_name_optionals_label($object->table_element);
$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
$managedfor = $conf->global->PARTNERSHIP_IS_MANAGED_FOR;
$managedfor = empty($conf->global->PARTNERSHIP_IS_MANAGED_FOR) ? 'thirdparty' : $conf->global->PARTNERSHIP_IS_MANAGED_FOR;
if ($managedfor != 'member' && $sortfield == 'd.datefin') $sortfield = '';

View File

@ -699,7 +699,7 @@ if ($search_opp_percent != '') {
if ($search_public != '') {
$param .= '&search_public='.urlencode($search_public);
}
if ($search_project_user != '') {
if ($search_project_user > 0) {
$param .= '&search_project_user='.urlencode($search_project_user);
}
if ($search_project_contact != '') {

View File

@ -41,6 +41,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/commonincoterm.class.php';
require_once DOL_DOCUMENT_ROOT.'/multicurrency/class/multicurrency.class.php';
/**
* Class to manage third parties objects (customers, suppliers, prospects...)
*/
@ -2573,7 +2574,7 @@ class Societe extends CommonObject
$name .= ' ('.$this->name_alias.')';
}
$result = ''; $label = '';
$result = ''; $label = ''; $label2 = '';
$linkstart = ''; $linkend = '';
if (!empty($this->logo) && class_exists('Form')) {
@ -2641,47 +2642,48 @@ class Societe extends CommonObject
}
$label .= '<br>'.implode('&nbsp;', $phonelist);
}
if (!empty($this->address)) {
$label .= '<br><b>'.$langs->trans("Address").':</b> '.dol_format_address($this, 1, ' ', $langs); // Address + country
$label2 .= '<br><b>'.$langs->trans("Address").':</b> '.dol_format_address($this, 1, ' ', $langs); // Address + country
} elseif (!empty($this->country_code)) {
$label .= '<br><b>'.$langs->trans('Country').':</b> '.$this->country_code;
$label2 .= '<br><b>'.$langs->trans('Country').':</b> '.$this->country_code;
}
if (!empty($this->tva_intra) || (!empty($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP) && strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP, 'vatnumber') !== false)) {
$label .= '<br><b>'.$langs->trans('VATIntra').':</b> '.dol_escape_htmltag($this->tva_intra);
$label2 .= '<br><b>'.$langs->trans('VATIntra').':</b> '.dol_escape_htmltag($this->tva_intra);
}
if (!empty($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP)) {
if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP, 'profid1') !== false) {
$label .= '<br><b>'.$langs->trans('ProfId1'.$this->country_code).':</b> '.$this->idprof1;
$label2 .= '<br><b>'.$langs->trans('ProfId1'.$this->country_code).':</b> '.$this->idprof1;
}
if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP, 'profid2') !== false) {
$label .= '<br><b>'.$langs->trans('ProfId2'.$this->country_code).':</b> '.$this->idprof2;
$label2 .= '<br><b>'.$langs->trans('ProfId2'.$this->country_code).':</b> '.$this->idprof2;
}
if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP, 'profid3') !== false) {
$label .= '<br><b>'.$langs->trans('ProfId3'.$this->country_code).':</b> '.$this->idprof3;
$label2 .= '<br><b>'.$langs->trans('ProfId3'.$this->country_code).':</b> '.$this->idprof3;
}
if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP, 'profid4') !== false) {
$label .= '<br><b>'.$langs->trans('ProfId4'.$this->country_code).':</b> '.$this->idprof4;
$label2 .= '<br><b>'.$langs->trans('ProfId4'.$this->country_code).':</b> '.$this->idprof4;
}
if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP, 'profid5') !== false) {
$label .= '<br><b>'.$langs->trans('ProfId5'.$this->country_code).':</b> '.$this->idprof5;
$label2 .= '<br><b>'.$langs->trans('ProfId5'.$this->country_code).':</b> '.$this->idprof5;
}
if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP, 'profid6') !== false) {
$label .= '<br><b>'.$langs->trans('ProfId6'.$this->country_code).':</b> '.$this->idprof6;
$label2 .= '<br><b>'.$langs->trans('ProfId6'.$this->country_code).':</b> '.$this->idprof6;
}
}
if (!empty($this->code_client) && ($this->client == 1 || $this->client == 3)) {
$label .= '<br><b>'.$langs->trans('CustomerCode').':</b> '.$this->code_client;
$label2 .= '<br><b>'.$langs->trans('CustomerCode').':</b> '.$this->code_client;
}
if (!empty($this->code_fournisseur) && $this->fournisseur) {
$label .= '<br><b>'.$langs->trans('SupplierCode').':</b> '.$this->code_fournisseur;
$label2 .= '<br><b>'.$langs->trans('SupplierCode').':</b> '.$this->code_fournisseur;
}
if (!empty($conf->accounting->enabled) && ($this->client == 1 || $this->client == 3)) {
$label .= '<br><b>'.$langs->trans('CustomerAccountancyCode').':</b> '.($this->code_compta ? $this->code_compta : $this->code_compta_client);
$label2 .= '<br><b>'.$langs->trans('CustomerAccountancyCode').':</b> '.($this->code_compta ? $this->code_compta : $this->code_compta_client);
}
if (!empty($conf->accounting->enabled) && $this->fournisseur) {
$label .= '<br><b>'.$langs->trans('SupplierAccountancyCode').':</b> '.$this->code_compta_fournisseur;
$label2 .= '<br><b>'.$langs->trans('SupplierAccountancyCode').':</b> '.$this->code_compta_fournisseur;
}
$label .= '</div>';
$label .= ($label2 ? '<br>'.$label2 : '').'</div>';
// Add type of canvas
$linkstart .= (!empty($this->canvas) ? '&canvas='.$this->canvas : '');

View File

@ -5246,7 +5246,7 @@ td.cal_other_month {
/* ============================================================================== */
/* CSS for treeview */
.treeview ul { background-color: transparent !important; margin-bottom: 4px !important; margin-top: 0 !important; padding-top: 8px !important; }
.treeview ul { background-color: transparent !important; margin-bottom: 4px !important; margin-top: 0 !important; padding-top: 2px !important; }
.treeview li { background-color: transparent !important; padding: 0 0 0 16px !important; min-height: 30px; }
.treeview .hover { color: var(--colortextlink) !important; text-decoration: underline !important; }
.treeview .hitarea { margin-top: 3px; }
@ -6266,7 +6266,7 @@ span.noborderoncategories a, li.noborderoncategories a {
/* vertical-align: top; */
}
span.noborderoncategories {
padding: 4px 5px 0px 5px;
padding: 3px 5px 3px 5px;
display: inline-block;
}
.categtextwhite, .treeview .categtextwhite.hover {

View File

@ -6145,7 +6145,7 @@ span.noborderoncategories a, li.noborderoncategories a {
line-height: normal;
}
span.noborderoncategories {
padding: 3px 5px 0px 5px;
padding: 3px 5px 3px 5px;
}
.categtextwhite, .treeview .categtextwhite.hover {
color: #fff !important;

View File

@ -917,7 +917,7 @@ if ($action == 'create' || $action == 'adduserldap') {
$defaultemployee = '1';
print '<tr>';
print '<td>'.$langs->trans('Employee').'</td><td>';
print '<input type="checkbox" name="employee" value="1"'.(GETPOST('employee') == '1' ? ' checked="checked"' : ($defaultemployee ? ' checked="checked"' : '')).'>';
print '<input type="checkbox" name="employee" value="1"'.(GETPOST('employee') == '1' ? ' checked="checked"' : (($defaultemployee && !GETPOSTISSET('login')) ? ' checked="checked"' : '')).'>';
//print $form->selectyesno("employee", (GETPOST('employee') != '' ?GETPOST('employee') : $defaultemployee), 1);
print '</td></tr>';