Автоматическое создание электронного письма на основе даты (ColdFusion) - PullRequest
1 голос
/ 14 января 2011

У меня есть большая таблица базы данных, которая содержит 12 медицинских сертификатов, даты истечения срока действия, ссылки на файлы и компании, из которых они. Мне нужно создать отчет по электронной почте в течение 90, 60, 30 и 15 дней с даты окончания сертификации.

Вот как выглядит база данных:

certID,
profileID,
cprAdultExp,
cprAdultcompany,
cprAdultImage,
cprAdultOnFile,
cprInfantChildExp,
cprInfantChildcompany,
cprInfantChildImage,
cprInfantChildOnFile,
cprFPRExp,
cprFPRcompany,
cprFPRImage,
cprFPROnFile,
aedExp,
aedcompany,
aedImage,
aedOnFile,
firstAidExp,
firstAidcompany,
firstAidImage,
firstAidOnFile,
emtExp,
emtcompany,
emtImage,
emtOnFile,
waterSafetyInstructionExp,
waterSafetyInstructioncompany,
waterSafetyInstructionImage,
waterSafetyInstructionOnFile,
bloodPathogensExp,
bloodPathogenscompany,
bloodPathogensImage,
bloodPathogensOnFile,
oxygenAdminExp,
oxygenAdmincompany,
oxygenAdminImage,
oxygenAdminOnFile,
lifegaurdingExp,
lifegaurdingcompany,
lifegaurdingImage,
lifegaurdingOnFile,
wildernessResponderExp,
wildernessResponderCompany,
wildernessResponderImage,
wildernessResponderOnFile, 
notes

Как мне написать какой-то цикл, чтобы проверить все даты (что-нибудь с EXP - это дата), затем сохранить, какие из них истекают, и отправить все эти данные человеку?

Ответы [ 3 ]

2 голосов
/ 15 января 2011

Поскольку вы должны отправить электронное письмо через CF (я полагаю), то я бы подошел к этому так, чтобы один раз в день запускать запланированное задание, которое проверяет, какие строки имеют годовщину истечения 15, 30, 60 и 90 дней.Таким образом, запланированное задание выполнит несколько запросов, а затем отправит электронные письма.

Первым делом нужно найти нужные строки (все мои SQL предполагают MS SQL Server - другие РСУБД будут иметь похожий синтаксис):

<cfquery name="qExpiring">
  select
  certID,  
  dateDiff(day, cprAdultExp, getDate()) as cprAdultExpDaysSince
  dateDiff(day, cprInfantChildExp, getDate()) as cprInfantChildExpDaysSince
  from yourTable
  where 
  dateDiff(day, cprAdultExp, getDate()) in (15, 30, 60, 90)
  or 
  dateDiff(day, cprInfantChildExp, getDate()) in (15, 30, 60, 90)
</cfquery>

Это должно дать вам набор результатоввот так:

certID|cprAdultExpDaysSince|cprInfantChildExpDaysSince|etc.
___________________________________________________________
xxxxxx|30                  |5                         |etc.
xxxxxx|16                  |60                        |etc.
xxxxxx|2                   |90                        |etc.

Любой, у которого есть совпадения на 15, 30, 60, 90, вас интересует дальнейшая обработка.Вы можете использовать запрос запросов , чтобы сделать это:

<cfquery name="qAdultExpRenewal" dbtype="query">
  select * from qExpiring
  where cprAdultExpDaysSince in (15, 30, 60, 90)
</cfquery>

Затем вы можете просмотреть эти записи и отправить соответствующее электронное письмо, основываясь на значении cprAdultExpDaysSince.

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

1 голос
/ 15 января 2011

Если у вас есть доступ к базе данных, вам, вероятно, следует создать представление или представления, в которых будут указаны только те, у кого истекает срок действия, или добавляется поле в течение нескольких дней до истечения срока действия для каждого сертификата и его запрос. В качестве альтернативы вы можете написать один запрос, который собирает всю информацию о том, где истекает срок действия любого сертификата (WHERE cprAdultExp [сравнение] дата ИЛИ cprInfantExp [сравнение] дата ....), а затем перебирает записи для фильтрации или группировки по сертификату с истекающим сроком действия.

1 голос
/ 14 января 2011

Вероятно, вам нужен какой-то тупо-огромный запрос, который выглядит как

select "CPR Adult", cprAdultExp, cprAdultcompany, cprAdultImage, cprAdultOnFile from thebigtable where cprAdultExp [comparison] interestingdate
union
select "CPR Child", cprChild....
union ...

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

...