Commit 87775a10 authored by Frank Bergmann's avatar Frank Bergmann

Initial Import

parents
Pipeline #958 failed with stages
<?xml version="1.0"?>
<!-- Generated by the OpenACS Package Manager -->
<package key="intranet-project-reminders" url="http://openacs.org/repository/apm/packages/intranet-project-reminders" type="apm_application">
<package-name>]project-open[ Project Reminders</package-name>
<pretty-plural>]project-open[ Project Reminders</pretty-plural>
<initial-install-p>f</initial-install-p>
<singleton-p>t</singleton-p>
<implements-subsite-p>f</implements-subsite-p>
<inherit-templates-p>t</inherit-templates-p>
<auto-mount>intranet-project-reminders</auto-mount>
<version name="0.1d" url="http://openacs.org/repository/download/apm/intranet-project-reminders-0.1d.apm">
<owner url="mailto:info@project-open.com">Project Open Business Solutions S.L.</owner>
<summary>Sending of reminder emails for project/task end dates. </summary>
<vendor url="http://www.project-open.com">Project Open Business Solutions S.L.</vendor>
<description format="text/html">Sending of reminder emails for project/task end dates.</description>
<maturity>0</maturity>
<provides url="intranet-project-reminders" version="0.1d"/>
<callbacks>
</callbacks>
<parameters>
<parameter datatype="string" min_n_values="1" max_n_values="1" name="DefaultOffsetEndDateTranslationTasks" default="3600" description="Offset in seconds for reminders send for translation tasks."/>
<parameter datatype="string" min_n_values="1" max_n_values="1" name="DefaultOffsetEndDateTimesheetTasks" default="86400" description="Offset in seconds for reminders send for timesheet tasks."/>
<parameter datatype="string" min_n_values="1" max_n_values="1" name="LogP" default="0" description="If set to '1', additional information is written to acs_logs. Please use with caution. Should be used for debugging purposes only."/>
</parameters>
</version>
</package>
-- /packages/intranet-project-reminders/sql/postgresql/intranet-project-reminders-create.sql
--
-- Copyright (c) 2003-2016 ]project-open[
--
-- All rights reserved. Please check
-- http://www.project-open.com/license/ for details.
--
-- @author klaus.hofeditz@project-open.com
-----------------------------------------------------------
create table im_project_reminders_last_check (
last_check timestamptz
);
-- Set initial value
insert into im_project_reminders_last_check (last_check) values ('1900-01-01'::timestamp);
-- /packages/intranet-project-reminders/sql/postgresql/intranet-project-reminders-drop.sql
--
-- Copyright (c) 2003-2016 ]project-open[
--
-- All rights reserved. Please check
-- http://www.project-open.com/license/ for details.
--
-- @author klaus.hofeditz@project-open.com
-----------------------------------------------------------
drop table im_project_reminders_last_check;
ad_library {
Initialization for intranet-project-reminders module
@author klaus.hofeditz@project-open.com
}
# Check for events every minute
# If 't' is changed, intranet-project-reminders.tcl needs to be adjusted
ad_schedule_proc -thread t 60 im_project_reminders_send
# /packages/intranet-project-reminders/tcl/intranet-project-reminders-procs.tcl
#
# Copyright (C) 2013-now Project Open Business Solutions S.L.
#
# All rights reserved. Please check
# http://www.project-open.com/license/ for details.
ad_library {
@author klaus.hofeditz@project-open.com
# This is a very simplified implementation of a reminder system
# There's no tracking if email has been sent out
# Parameter LogP has been introduced to allow persistent logging into acs_logs
#
# Extension
# Reminders or Projects / Sub-Projects
# Custom timestamps for tasks and projects
}
ad_proc -public im_project_reminders_send { } {
} {
set offset_end_date_translation_tasks [parameter::get -package_id [apm_package_id_from_key intranet-project-reminders] -parameter "DefaultOffsetEndDateTranslationTasks" -default 3600]
set offset_end_date_timesheet_tasks [parameter::get -package_id [apm_package_id_from_key intranet-project-reminders] -parameter "DefaultOffsetEndDateTimesheetTasks" -default 3600]
set log_p [parameter::get -package_id [apm_package_id_from_key intranet-project-reminders] -parameter "LogP" -default 0]
# Logging
if { $log_p } {
if {[catch {
set sql "select acs_log__notice(
'intranet-project-reminders::im_project_reminders_send',
'Current/Last: [clock format [clock seconds] -format {%Y-%m-%d %H:%M:%S %Z}] / [db_string get_last_check "select last_check from im_project_reminders_last_check"]'
)
"
set foo [db_string sql $sql]
} err_msg]} {
global errorInfo
ns_log Error $errorInfo
set sql "
select acs_log__error(
'intranet-project-reminders::im_project_reminders_send',
'Serious error fetching im_project_reminders_last_check::last_check: - please check error.log for more info'
)
"
set foo [db_string sql $sql]
}
}
# Setting "last_check"
db_dml sql "update im_project_reminders_last_check set last_check = now()"
# Find tasks
set sql "
select
t.task_id as object_id,
p.end_date,
(SELECT EXTRACT(EPOCH FROM (to_char(current_timestamp,'YYYY-MM-DD HH24:MI:00')::timestamp +
'$offset_end_date_timesheet_tasks seconds'::interval-to_char(p.end_date,'YYYY-MM-DD HH24:MI:00')::timestamp)))
as diff
from
im_timesheet_tasks t inner join im_projects p on t.task_id = p.project_id
where
(SELECT EXTRACT(EPOCH FROM (to_char(current_timestamp,'YYYY-MM-DD HH24:MI:00')::timestamp +
'$offset_end_date_timesheet_tasks seconds'::interval-to_char(p.end_date,'YYYY-MM-DD HH24:MI:00')::timestamp))) = 0
and p.project_status_id not in ([join [im_sub_categories [im_project_status_closed]] ","])
"
if { [apm_package_enabled_p intranet-translation] } {
append sql "
UNION
select
task_id as object_id,
end_date,
(SELECT EXTRACT(EPOCH FROM (to_char(current_timestamp,'YYYY-MM-DD HH24:MI:00')::timestamp +
'$offset_end_date_translation_tasks seconds'::interval-to_char(end_date,'YYYY-MM-DD HH24:MI:00')::timestamp)))
as diff
from
im_trans_tasks
where
(SELECT EXTRACT(EPOCH FROM (to_char(current_timestamp,'YYYY-MM-DD HH24:MI:00')::timestamp +
'$offset_end_date_translation_tasks seconds'::interval-to_char(end_date,'YYYY-MM-DD HH24:MI:00')::timestamp))) = 0
and task_status_id not in (360, 365, 370, 372)
"
}
db_foreach r $sql {
if { $log_p } {
if {[catch {
set sql "select acs_log__notice(
'intranet-project-reminders::im_project_reminders_send',
'Calling im_project_reminders_send_notification_to_object_members for object_id: $object_id')
"
set foo [db_string sql $sql]
} err_msg]} {
global errorInfo
ns_log Error $errorInfo
set sql "
select acs_log__error(
'intranet-project-reminders::im_project_reminders_send',
'Serious error fetching im_project_reminders_last_check::last_check: - please check error.log for more info')
"
set foo [db_string sql $sql]
}
}
im_project_reminders_send_notification_to_object_members $object_id "" 0
}
}
ad_proc -private im_project_reminders_send_notification_to_object_members {
{ object_id "" }
{ from_email "" }
{ do_not_send_email_p 0 }
} {
Sends email reminders to supervisors
} {
ns_log Notice "im_project_reminders_send_notification_to_object_members: Start Date: [clock format [clock seconds] -format {%Y-%m-%d-%H:%M:%S}]"
# #
# Sanity check
if { "" eq $object_id } {
ns_log Notice "im_project_reminders_send_notification_to_object_members: Exit - no object_id provided"
return
}
# #
# Defaults
set log_p [parameter::get -package_id [apm_package_id_from_key intranet-project-reminders] -parameter "LogP" -default 0]
set object_type [acs_object_type $object_id]
set parties_to_be_notified_id [list]
if { "" eq $from_email } {
set from_email [parameter::get -package_id [apm_package_id_from_key acs-kernel] -parameter "HostAdministrator" -default ""]
}
# #
# Main
switch $object_type {
"im_trans_task" {
# Based on type we evaluate the mail recipient
db_1row select_foo "
select
task_type_id,
task_name as object_name,
trans_id,
edit_id,
proof_id,
other_id
from
im_trans_tasks
where
task_id = :object_id
"
# Get final responsible in workflow
if { "" ne $trans_id } { lappend parties_to_be_notified_id $trans_id }
if { "" ne $edit_id } { lappend parties_to_be_notified_id $edit_id }
if { "" ne $proof_id } { lappend parties_to_be_notified_id $proof_id }
if { "" ne $other_id } { lappend parties_to_be_notified_id $other_id }
if { "" eq $parties_to_be_notified_id } {
ns_log Notice "im_project_reminders_send_notification_to_object_members: Exit - No assignments found for translation_task_id: $object_id ($parties_to_be_notified_id)"
return
}
}
"im_timesheet_task" {
set object_name [db_string sql "select project_name from im_projects where project_id = :object_id" -default 0]
set sql "
select
u.email
from
cc_users u,
acs_rels r
where
r.rel_type = 'im_biz_object_member'
and r.object_id_one = :object_id
and u.member_state = 'approved'
and u.user_id = r.object_id_two
order by
u.user_id
"
db_foreach r $sql {
lappend parties_to_be_notified_id $email
}
}
default {
ns_log Notice "im_project_reminders_send_notification_to_object_members: Exit - object_type: $object_type not supported"
return
}
}
set mail_subject [lang::message::lookup "" intranet-project-reminders.Mail_Subject_Text "Friendly Reminder - Task is due "]
set mail_body [lang::message::lookup "" intranet-project-reminders.Mail_Body_Text_Html "Planned end date of task: <br/> $object_name <br/> will be reached shortly.<br/>Please review."]
if { $log_p } {
if {[catch {
if { 0 == [llength $parties_to_be_notified_id] } {
set sql "select acs_log__notice(
'intranet-project-reminders::im_project_reminders_send_notification_to_object_members',
'No parties to be notified found for object_id: $object_id')
"
} else {
set sql "select acs_log__notice(
'intranet-project-reminders::im_project_reminders_send_notification_to_object_members',
'Found party/parties to be notified: $object_id')
"
}
set foo [db_string sql $sql]
} err_msg]} {
global errorInfo
ns_log Error $errorInfo
set sql "
select acs_log__error(
'intranet-project-reminders::im_project_reminders_send',
'Serious error fetching im_project_reminders_last_check::last_check: - please check error.log for more info')
"
set foo [db_string sql $sql]
}
}
foreach email_recipient $parties_to_be_notified_id {
if { !$do_not_send_email_p } {
acs_mail_lite::send \
-send_immediately \
-to_addr $email_recipient \
-from_addr $from_email \
-subject $mail_subject \
-body $mail_body \
-extraheaders "" \
-mime_type "text/html"
ns_log Notice "im_project_reminders_send_notification_to_object_members: Sending email to: $email_recipient"
} else {
ns_log Notice "im_project_reminders_send_notification_to_object_members: do_not_send_email_p = true -> NOT sending email to: $email_recipient"
}
}
return
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment