Hallo zusammen,
Weiss jemand wie man ein Custom Feld erstellen bzw. dem dann als Defaultwert den akt. Monat +1 (also den Forlgemonat) setzen. Bei meinen AboRechnugen benötige ich den Leistungszeitraum.
Vielen lieben Dank für jeglichen Schubs in die richtige Richtung
In welchem Modul möchtest du das machen, ich vermute mal Rechnungen?
Ja, genau. Und lt. Infobox, sollte man sogar PHP Code eingeben können, statt nur Formeln.
Probiere mal folgendes als berechnetes Feld:
date('m', strtotime('1 month'));
Funktioniert hier mit der Version 17.0.2
Hi DG-rilling
Danke schön für den Tip. Hat zwar so nicht funktioniert, mich aber auf die Lösung gebracht.
Die Erste Fehlermeldung war:
Bad string syntax to evaluate (found chars that are not chars for a simple clean eval string): date(‚m‘, strtotime(‚1 month‘));
Also das ; (Semikolon am Ende der Zeile raus genommen.
Danach das ‚m‘ mit einem ‚F‘ ausgetauscht und schon steht der ak. Monat +1 im Feld - cooool!
date('F', strtotime('1 month'))
PS: Im Moment habe ich noch das Problem, das December, also english anzeigt wird statt Deutsch :frowning Wenn ja jemand noch eien Tip hätte?
Hallo,
wenn der Name des folgenden Monates benötigt wird hilft bei mir das folgende:
dol_print_date(date("Y-m-d h:m:s", strtotime("+1 month")),"%B")
dol_print_date(…) ist eine Dolibarr function (~/htdocs/core/lib/functions.lib.php)
Ich hatte ganz vergessen das ich die dol_eval(…) etwas modifiziert habe um diese Einschränkung
zu umgehen, daher der Fehler
Bad string syntax to evaluate (found chars that are not chars for a simple clean eval string):
bei dir…
Das funktioniert leider nciht
„Bad string syntax to evaluate (found chars that are not chars for a simple clean eval string): dol_print_date(date(Y-m-d h:m:s, strtotime(+1 month)),%B)“
aber folgendes:
date('F', strtotime('1 month'))
Nur leider nicht auf Deutsch
Info laut PHP: Die PHP-Funktion date() arbeitet unabhängig von der Lokalisierung und gibt immer englische Monatsnamen aus.
Ja, das mit Englisch ist klar.
Deshalb ja auch die Dolibarr-Funktion dol_print_date(…).
Diese Funktion benützt die in Dolibarr eingestellte Sprache.
Zum beheben des Problem mit dem Bad string syntax...
Fehlers habe ich 2 Dateien modifiziert.
- commonobject.php
- functions.lib.php.
1.) Wenn das Feld ein „computed field“ ist dann rufe ich dol_eval(…) statt
$this->array_options['options_' . $key] = dol_eval($extrafields->attributes[$this->table_element]['computed'][$key], 1, 0, '');
so auf:
$this->array_options['options_' . $key] = dol_eval($extrafields->attributes[$this->table_element]['computed'][$key], 1, 0, 3);
2.) Hier füge ich einen Test auf nicht „3“ ein
if ($onlysimplestring != '3') {
ursprünglich sah das so aus:
if (preg_match('/[^0-9]+\.[^0-9]+/', $s)) { // We refuse . if not between 2 numbers
if ($returnvalue) {
return 'Bad string syntax to evaluate (dot char is forbidden): '.$s;
} else {
dol_syslog('Bad string syntax to evaluate (dot char is forbidden): '.$s);
return '';
}
}
dann sieht das bei mir so aus:
if ($onlysimplestring != '3') {
if (preg_match('/[(a-z]+\.[)a-z]+/', $s)) { // We refuse . if not between 2 numbers
if ($returnvalue) {
return 'Bad string syntax to evaluate (dot char is forbidden): '.$s;
} else {
dol_syslog('Bad string syntax to evaluate (dot char is forbidden): '.$s);
return '';
}
}
}
Aber Vorsicht, man kann damit dann auch evtl. böse Sachen mit den computed Extrafields anstellen.
Bin da wohl zu doof zu.
Werde es mir die Tag nochmals rein ziehen danke schön!