Neu Lieferdatum statt Lieferzeit

  • Temporäre Senkung der Mehrwertsteuer Hier findet ihr gesammelt alle Informationen, Videos und Fragen inkl. Antworten: https://forum.jtl-software.de/threads/mehrwertsteuer-senkung-vom-01-07-31-12-2020-offizieller-diskussionthread-video.129542/

3jojojo

Gut bekanntes Mitglied
20. Januar 2016
627
14
Hallo Leute
Kann mir jemand helfen wie ich statt der Lieferzeit 2-3 Tage das Datum angezeigt bekomme??? Nicht beim eigenen Lagerbestand sondern nur dann wenn die Lieferzeit vom Lieferanten genommen wird???

Habe schon in der Stock.tpl geschaut aber da ist das Datum ja schon fertig und wird nur ausgegeben.

THX Jo
 

3jojojo

Gut bekanntes Mitglied
20. Januar 2016
627
14
mit {$smarty.now|date_format:'%d.%m.%y'+2} bekomme ich schon fast was ich will nur habe ich das Problem das die Jahreszahl fehlt :( Kann mir jemand sagen wieso?
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
4.599
741
Berlin
wie in einem echten date() muss das y groß sein "Y" aber mit dem kleinen hättest du die Jahreszahl zweistellig sehen müssen.
Ich weiß ja jetzt nicht wer dir sagte das du da eine +2 einfügen musst?

probier das hier:

die 2 sind die tage, die 86400 die Sekunden je Tag.

Code:
{assign var=lieferdatum value=date("d-m-Y",time()+ (2*86400))}
{$lieferdatum}
 
  • Gefällt mir
Reaktionen: Indy1

ka5-agentur

Aktives Mitglied
4. April 2016
28
4
wie in einem echten date() muss das y groß sein "Y" aber mit dem kleinen hättest du die Jahreszahl zweistellig sehen müssen.
Ich weiß ja jetzt nicht wer dir sagte das du da eine +2 einfügen musst?

probier das hier:

die 2 sind die tage, die 86400 die Sekunden je Tag.

Code:
{assign var=lieferdatum value=date("d-m-Y",time()+ (2*86400))}
{$lieferdatum}
Hallo,

wie könnte man dies bei Bestellungen umsetzen, wenn ich sage das von

Montag bis Freitag bis 14 Uhr Lieferdatum +1 Tag
Montag bis Freitag nach 14 Uhr + Samstag und Sonntag kommender Montag + 1 Tag

Wobei der Faktor 1 Tag aus dem Shop von Versandarten -> Lieferzeit kommen damit man dies nach bedarf ändern kann

Wäre super, wenn jemand den Code hat oder schreiben könnte
 

Dull

Aktives Mitglied
14. Juli 2014
95
4
Passau
Wir haben das mit folgedem, unglaublich hässlichem Code gelöst... funktioniert aber :D

Im Ergebnis steht dann sowas wie:
Lieferung bis: Donnerstag 12. Dezember - Freitag 13. Dezember


PHP:
<span>{lang key='delivery-date' section='custom'}</span>
<span class="bold">
                    {assign var=tage value=array({lang key='sonntag' section='custom'}, {lang key='montag' section='custom'}, {lang key='dienstag' section='custom'}, {lang key='mittwoch' section='custom'}, {lang key='donnerstag' section='custom'}, {lang key='freitag' section='custom'}, {lang key='samstag' section='custom'})}
                    {assign var=monate value=array("Atlantis", {lang key='january' section='news'}, {lang key='february' section='news'}, {lang key='march' section='news'}, {lang key='april' section='news'}, {lang key='may' section='news'}, {lang key='june' section='news'}, {lang key='july' section='news'}, {lang key='august' section='news'}, {lang key='september' section='news'}, {lang key='october' section='news'}, {lang key='november' section='news'}, {lang key='december' section='news'})}
                    {assign var=tag1 value=date("N",time()+ (($Artikel->nMinDeliveryDays)*86400))}
                    {assign var=monat1 value=date("n",time()+ (($Artikel->nMinDeliveryDays)*86400))}
                    {assign var=ld_wochentag1 value=$tage[$tag1]}
                    {assign var=ld_monat1 value=$monate[$monat1]}
                    {assign var=tag2 value=date("N",time()+ (($Artikel->nMaxDeliveryDays)*86400))}
                    {assign var=monat2 value=date("n",time()+ (($Artikel->nMaxDeliveryDays)*86400))}
                    {assign var=ld_wochentag2 value=$tage[$tag2]}
                    {assign var=ld_monat2 value=$monate[$monat2]}
                    {$ld_wochentag1} {date("d.",time()+ (($Artikel->nMinDeliveryDays)*86400))} {$ld_monat1} - {$ld_wochentag2} {date("d.",time()+ (($Artikel->nMaxDeliveryDays)*86400))} {$ld_monat2}
</span>
 
Zuletzt bearbeitet:

ka5-agentur

Aktives Mitglied
4. April 2016
28
4
Wir haben das mit folgedem, unglaublich hässlichem Code gelöst... funktioniert aber :D

Im Ergebnis steht dann sowas wie:
Lieferung bis: Donnerstag 12. Dezember - Freitag 13. Dezember


PHP:
<span>{lang key='delivery-date' section='custom'}</span>
<span class="bold">
                    {assign var=tage value=array({lang key='sonntag' section='custom'}, {lang key='montag' section='custom'}, {lang key='dienstag' section='custom'}, {lang key='mittwoch' section='custom'}, {lang key='donnerstag' section='custom'}, {lang key='freitag' section='custom'}, {lang key='samstag' section='custom'})}
                    {assign var=monate value=array("Atlantis", {lang key='january' section='news'}, {lang key='february' section='news'}, {lang key='march' section='news'}, {lang key='april' section='news'}, {lang key='may' section='news'}, {lang key='june' section='news'}, {lang key='july' section='news'}, {lang key='august' section='news'}, {lang key='september' section='news'}, {lang key='october' section='news'}, {lang key='november' section='news'}, {lang key='december' section='news'})}
                    {assign var=tag1 value=date("N",time()+ (($Artikel->nMinDeliveryDays)*86400))}
                    {assign var=monat1 value=date("n",time()+ (($Artikel->nMinDeliveryDays)*86400))}
                    {assign var=ld_wochentag1 value=$tage[$tag1]}
                    {assign var=ld_monat1 value=$monate[$monat1]}
                    {assign var=tag2 value=date("N",time()+ (($Artikel->nMaxDeliveryDays)*86400))}
                    {assign var=monat2 value=date("n",time()+ (($Artikel->nMaxDeliveryDays)*86400))}
                    {assign var=ld_wochentag2 value=$tage[$tag2]}
                    {assign var=ld_monat2 value=$monate[$monat2]}
                    {$ld_wochentag1} {date("d.",time()+ (($Artikel->nMinDeliveryDays)*86400))} {$ld_monat1} - {$ld_wochentag2} {date("d.",time()+ (($Artikel->nMaxDeliveryDays)*86400))} {$ld_monat2}
</span>
Danke schon mal., aber es wird folgendes ausgegeben:

Bestellung Freitag nach 14 Uhr:
Samstag 07. Dezember - 08. Dezember

Freitag ab 14.30 Uhr müsste er auf Montag - Dienstag springen

Hier mal der Link zur Seite: https://www.lantelme-karofit.de/Nivellierzange-fuer-Fliesenverlegehilfe
 
Zuletzt bearbeitet:

Dull

Aktives Mitglied
14. Juli 2014
95
4
Passau
Ah ja, hab das ganze jetzt nochmal angepasst und Samstag und Sonntag rausgerechnet:

PHP:
<span>{lang key='delivery-date' section='custom'}</span>
<span class="bold">
    {assign var=tage value=array({lang key='sonntag' section='custom'}, {lang key='montag' section='custom'}, {lang key='dienstag' section='custom'}, {lang key='mittwoch' section='custom'}, {lang key='donnerstag' section='custom'}, {lang key='freitag' section='custom'}, {lang key='samstag' section='custom'}, {lang key='sonntag' section='custom'})}
    {assign var=monate value=array("Atlantis", {lang key='january' section='news'}, {lang key='february' section='news'}, {lang key='march' section='news'}, {lang key='april' section='news'}, {lang key='may' section='news'}, {lang key='june' section='news'}, {lang key='july' section='news'}, {lang key='august' section='news'}, {lang key='september' section='news'}, {lang key='october' section='news'}, {lang key='november' section='news'}, {lang key='december' section='news'})}
   
    {assign var=tag1 value=date("N",time()+ (($Artikel->nMinDeliveryDays)*86400))}
    {if $tag1 == 6 || $tag1 == 7}{$tag1neu = 1}{else}{$tag1neu = $tag1}{/if}
    {if $tag1 != $tag1neu}{$nMinDeliveryDays_neu = $Artikel->nMinDeliveryDays+8-$tag1}{else}{$nMinDeliveryDays_neu = $Artikel->nMinDeliveryDays}{/if}
    {assign var=monat1 value=date("n",time()+ ($nMinDeliveryDays_neu*86400))}
    {assign var=ld_wochentag1 value=$tage[$tag1neu]}
    {assign var=ld_monat1 value=$monate[$monat1]}
   
    {assign var=tag2 value=date("N",time()+ (($Artikel->nMaxDeliveryDays)*86400))}
    {if $tag2 == 6}{$tag2neu = 1}{elseif $tag2 == 7 && $tag1 > 5}{$tag2neu = $tag1neu+($Artikel->nMaxDeliveryDays-$Artikel->nMinDeliveryDays)}{elseif $tag2 == 7 && $tag1 < 6}{$tag2neu = 1}{else}{$tag2neu = $tag2}{/if}
    {if $tag2 != $tag2neu && $tag2 == 6}{$nMaxDeliveryDays_neu = $Artikel->nMaxDeliveryDays+2}{elseif $tag2 != $tag2neu && $tag2 == 7 && $tag1 < 6}{$nMaxDeliveryDays_neu = $Artikel->nMaxDeliveryDays+1}{elseif $tag2 != $tag2neu && $tag2 == 7 && $tag1 > 5}{$nMaxDeliveryDays_neu = $nMinDeliveryDays_neu+$Artikel->nMaxDeliveryDays-$Artikel->nMinDeliveryDays}{else}{$nMaxDeliveryDays_neu = $Artikel->nMaxDeliveryDays}{/if}
    {assign var=monat2 value=date("n",time()+ ($nMaxDeliveryDays_neu*86400))}                   
    {assign var=ld_wochentag2 value=$tage[$tag2neu]}
    {assign var=ld_monat2 value=$monate[$monat2]}
   
    {$ld_wochentag1} {date("d.",time()+ (($nMinDeliveryDays_neu)*86400))} {$ld_monat1} - {$ld_wochentag2} {date("d.",time()+ (($nMaxDeliveryDays_neu)*86400))} {$ld_monat2}
</span>
Was hier allerdings noch nicht funktioniert, bzw. nicht beachtet wird sind Feiertage oder Zeitangaben wie z. B. ab Freitag 14.30 andere Lieferzeit als Vormittags ^^
 
Zuletzt bearbeitet:

ka5-agentur

Aktives Mitglied
4. April 2016
28
4
Ah ja, hab das ganze jetzt nochmal angepasst und Samstag und Sonntag rausgerechnet:

...

Was hier allerdings noch nicht funktioniert, bzw. nicht beachtet wird sind Feiertage oder Zeitangaben wie z. B. ab Freitag 14.30 andere Lieferzeit als Vormittags ^^
Danke
Das ist schon richtig Klasse, vlt. hat ja noch jemand ne Idee wie man das nun mit der Zeit kombinieren kann.

Montag bis Freitag bis 14:30 = selbiger Tag
Montag bis Donnerstag ab 14:31 = nächster Tag
Freitag ab 14:30, Samstag, Sonntag = kommender Monatg
 

FPrüfer

Moderator
Mitarbeiter
19. Februar 2016
1.179
264
Halle
Hallo,
meine Empfehlung wäre, statt der komplizierten Template-Logik eine eigene Smarty-Funktion zu schreiben und dort mit ein bisschen Datums-Mathematik den Starttag für die Lieferzeit zu berechnen. z.B. mit:
PHP:
$startDate = new DateTime();
// durch addieren von 9 Stunden, 29 Minuten und 59 Sekunden wird nach 14:30 Uhr auf den nächsten Tag gewechselt.
$startDate->add(new DateInterval('PT9H29M59S'));
if ((int)$startDate->format('w') === 0 || (int)$startDate->format('w') === 6) {
    // Wenn der Tag ein Sonntag (0) oder Samstag (6) ist wird ein Werktag addiert
    $startDate->add(DateInterval::createFromDateString('1 weekday'));
}

echo 'Starttag für Lieferung: ' . $startDate->format('d.m.Y');
 

ka5-agentur

Aktives Mitglied
4. April 2016
28
4
Hallo,
meine Empfehlung wäre, statt der komplizierten Template-Logik eine eigene Smarty-Funktion zu schreiben und dort mit ein bisschen Datums-Mathematik den Starttag für die Lieferzeit zu berechnen. z.B. mit:
PHP:
$startDate = new DateTime();
// durch addieren von 9 Stunden, 29 Minuten und 59 Sekunden wird nach 14:30 Uhr auf den nächsten Tag gewechselt.
$startDate->add(new DateInterval('PT9H29M59S'));
if ((int)$startDate->format('w') === 0 || (int)$startDate->format('w') === 6) {
    // Wenn der Tag ein Sonntag (0) oder Samstag (6) ist wird ein Werktag addiert
    $startDate->add(DateInterval::createFromDateString('1 weekday'));
}

echo 'Starttag für Lieferung: ' . $startDate->format('d.m.Y');
Wo baue ich das ein ?
 

FPrüfer

Moderator
Mitarbeiter
19. Februar 2016
1.179
264
Halle
In einem Child-Template! Dazu - wie in unserer Entwickler-Doku beschrieben - eine eigene Smarty-Funktion anlegen. Der Registrierungsteil sieht dann z.B. so aus:
PHP:
$smarty->registerPlugin('function', 'getDeliveryDate', 'getDeliveryDate');
und der Implementierungsteil so:
PHP:
/**
* @param array     $params
* @param JTLSmarty $smarty
* @return string
*/
function getDeliveryDate($params, &$smarty)
{
    $startDate = new DateTime();
    $addDays   = (int)$params['days'];
    // Nach 14:30 Uhr dauert die Bearbeitung einen Tag länger.
    if ((int)$startDate->format('Hi') > 1430) {
        $addDays++;
    }
    // Zum Starttag werden die im Parameter 'days' übergebenen 'Werktage' addiert.
    $startDate->add(DateInterval::createFromDateString($addDays . ' weekday'));

    return $startDate->format('d.m.Y');
}
Im Template kann man die Funktion an der passenden Stelle dann z.B. so aufrufen:
PHP:
{getDeliveryDate days=$Artikel->nMinDeliveryDays} - {getDeliveryDate days=$Artikel->nMaxDeliveryDays}
Ich habe die Berechnung aus meinem ersten Beispiel nochmal etwas angepasst. Durch die Verwendung von "weekday" werden Samstag und Sonntag automatisch berücksichtigt. Allerdings wird dann auch ein Tag mehr berechnet, wenn der letzte Tag auf einen Samstag fällt, der ja bei den meisten Dienstleistern ein Liefertag ist. Wenn man den Samstag also für den Versand aus- und bei der Lieferung einschließen will, dann wird es etwas komplizierter. ;)
 
  • Gefällt mir
Reaktionen: ka5-agentur

ka5-agentur

Aktives Mitglied
4. April 2016
28
4
In einem Child-Template! Dazu - wie in unserer Entwickler-Doku beschrieben - eine eigene Smarty-Funktion anlegen. Der Registrierungsteil sieht dann z.B. so aus:
PHP:
$smarty->registerPlugin('function', 'getDeliveryDate', 'getDeliveryDate');
und der Implementierungsteil so:
PHP:
/**
* @param array     $params
* @param JTLSmarty $smarty
* @return string
*/
function getDeliveryDate($params, &$smarty)
{
    $startDate = new DateTime();
    $addDays   = (int)$params['days'];
    // Nach 14:30 Uhr dauert die Bearbeitung einen Tag länger.
    if ((int)$startDate->format('Hi') > 1430) {
        $addDays++;
    }
    // Zum Starttag werden die im Parameter 'days' übergebenen 'Werktage' addiert.
    $startDate->add(DateInterval::createFromDateString($addDays . ' weekday'));

    return $startDate->format('d.m.Y');
}
Im Template kann man die Funktion an der passenden Stelle dann z.B. so aufrufen:
PHP:
{getDeliveryDate days=$Artikel->nMinDeliveryDays} - {getDeliveryDate days=$Artikel->nMaxDeliveryDays}
Ich habe die Berechnung aus meinem ersten Beispiel nochmal etwas angepasst. Durch die Verwendung von "weekday" werden Samstag und Sonntag automatisch berücksichtigt. Allerdings wird dann auch ein Tag mehr berechnet, wenn der letzte Tag auf einen Samstag fällt, der ja bei den meisten Dienstleistern ein Liefertag ist. Wenn man den Samstag also für den Versand aus- und bei der Lieferung einschließen will, dann wird es etwas komplizierter. ;)

Genial und funktioniert perfekt ... solche Dinge sollten in neue Versionen mit eingebaut werden :)
 
Ähnliche Themen Forum Antworten Erstelldatum des Themas
Offen Workflow basierend auf überschrittenem Lieferdatum JTL-Workflows - Ideen, Lob und Kritik 2
Neu bevorzugtes Lieferdatum nach JTL übertragen WooCommerce-Connector 1
Neu Voraussichtliches Lieferdatum auf Auftrag User helfen Usern - Fragen zu JTL-Wawi 0
In Bearbeitung Lieferdatum + Versand wir nicht richtig gezogen Einrichtung und Installation von JTL-eazyAuction 7
Offen Workflow wird nicht ausgelöst: Lieferdatum setzen und Rechnung erstellen nach Versand und komplette Auslieferung JTL-Workflows - Fehler und Bugs 4
Neu Voraussichtliche Lieferdatum = Erstellungsdatum ? User helfen Usern - Fragen zu JTL-Wawi 1
Neu Per Workflow abfragen, ob ein vorauss. Lieferdatum gesetzt ist User helfen Usern - Fragen zu JTL-Wawi 1
Neu Lieferantenbestellung per Ameisen das Lieferdatum Updaten JTL-Ameise - Fehler und Bugs 1
Neu Top 50 Artikel statt Top 10 User helfen Usern 1
Neu Probleme beim Shopabgleich / Bilderübertragung findet nicht statt / bricht mit 404er ab... Shopify-Connector 14
Gelöst Statt Packhinweis Packfehler möglichß Arbeitsabläufe in JTL-WMS 2
In Bearbeitung Kategoriepanel statt lange horizontale Kategorieliste JTL-POS - Ideen, Lob und Kritik 1
Neu Versandkostenrechner statt Tabellen Allgemeine Fragen zu JTL-Shop 2
In Bearbeitung Umsatz nach Zahlungsart summiert "Gegeben" statt Umsatz JTL-POS - Fehler und Bugs 1
Offen Standardwert Lieferzeit wird immer wieder überschrieben WooCommerce-Connector 4
Neu Erwartete Lieferzeit per SQL abfragen JTL-Wawi - Ideen, Lob und Kritik 2
Gelöst Falsche Angabe der Lieferzeit Gelöste Themen in diesem Bereich 8
Neu Lieferantenbestand mit Lieferzeit User helfen Usern - Fragen zu JTL-Wawi 0
Gelöst Lieferzeit wird beim Sprachwechsel nicht angezeigt Gelöste Themen in diesem Bereich 6
Gelöst Lieferzeit in Bestellbestätigungsmail Gelöste Themen in diesem Bereich 1
Verwiesen an Support/SP Dropshipping Artikel Lieferzeit auf XY Tage umstellen Shopware-Connector 2
Neu Lieferzeit vom Lieferanten beziehen - Lieferzeit wird nicht aktualisiert JTL-Wawi - Fehler und Bugs 2
Ähnliche Themen