Поле даты Freemarker для отображения последнего рабочего дня месяца

83
11

Я ОЧЕНЬ новичок в Freemarker. По-видимому, это шаблонная модель выбора в NetSuite. Мне поручено обновить шаблон электронной почты, чтобы отобразить строку текста, которая включает последний рабочий день месяца.

Я вижу, как отобразить поле в документации, которую я нашел, и вот мой код для этого.

<#assign aDateTime = .now>
<#assign aDate = aDateTime?date>
<span>PLEASE EXPEDITE ORDER PROCESSING AND SHIP OVERNIGHT TO GUARANTEE DELIVERY BY EOD
THE LAST BUSINESS DAY OF THE MONTH ${aDate}</span>

Мой вопрос, так как я не знаю, как показать последний рабочий день месяца?

EDITED TO ADD: Я обнаружил, что добавление для манипуляции с датами Freemarker может оказать здесь некоторую помощь (на основе другого потока здесь). Проблема заключается в получении правильной логики, чтобы показать дату. Вот пример вычитания 18 дней с определенной даты:

${(mydate?long - 18 * 86400000)?number_to_date?string("yyyy-MM-dd")}

Поэтому я знаю, что есть способ сделать то, что я пытаюсь сделать с этим, но я просто не могу обвести вокруг себя голову.

Будем очень благодарны за любую помощь.

Благодарю.

спросил(а) 2017-07-17T19:09:00+03:00 3 года, 3 месяца назад
1
Решение
58

Здесь есть несколько подходов в зависимости от того, как вызывается шаблон. Если вы используете это как стандартный шаблон, инициированный в записи (транзакции), вам необходимо получить последний рабочий день месяца в настраиваемом поле в записи. Вы можете сделать это, создав пользовательскую запись месяцев с датой начала и окончания и последним рабочим днем. Затем вы вносите свой последний рабочий день в поле "Пользовательское тело" Не хранится по умолчанию из сохраненного поиска

Сохраненный поиск использует либо сегодняшнюю дату, либо некоторую дату из транзакции для поиска даты месяца последнего рабочего дня. Конечно, если это основано на дате транзакции, вы можете установить значение с помощью скрипта.

Если вы можете установить его со сценарием, пользовательское решение записи по-прежнему работает. То, что я делал в прошлом, - это построить функцию, которая может выполнять расчеты бизнес-даты на основе местоположения учетной записи (США или Австралии) и наблюдаемых официальных праздников.

Оба подхода требуют периодических обновлений. Разумеется, эта функция также может быть использована для создания будущих деловых дат.

Несколько примеров расчетов бизнес-дня находятся в моем реестре github для вещей Netsuite. calculateShippingDates и calcNSWBusinessDays являются примерами расчета расчетных периодов рабочих дней. calculateShippingDates фактически имеет последний рабочий день месяца calc.

НТН

ответил(а) 2017-07-17T20:34:00+03:00 3 года, 3 месяца назад
41

Я понял это. Я использовал поток, показывающий, как javascript выбрал последний день месяца (ссылка здесь), а затем преобразовал этот код в Freemarker. Вот фрагмент кода Freemarker:

<#assign aMonth = .now?string("M")>
<#assign aNewMonth = aMonth?number>
<#assign aYear = .now?string("yyyy")>
<#assign aDay = 0>
<#assign aNewDate = "" + (aNewMonth + 1) + "/" + aDay + "/" + aYear>
<#assign aLastDay = aNewDate?date>
MONTH: ${aNewMonth}<br />
YEAR: ${aYear}<br />
${aLastDay?string.full}<br />

Это последний день месяца. Я делаю некоторую, если затем еще логику, чтобы определить, является ли строка субботой или воскресенью, а затем распечатать правильный рабочий день месяца.

ответил(а) 2017-07-18T18:19:00+03:00 3 года, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема