/*
* Copyright 2012 Tomas Zeman <tzeman@volny.cz>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package fis.pm.ui
import fis.notif._
import fis.pm.model._
import net.liftweb.common._
import net.liftweb.http._
import net.liftweb.sitemap._
import net.liftweb.util._
import net.liftweb.util.Helpers._
import net.tz.lift.model._
import net.tz.lift.snippet._
trait TaskNotification extends Loggable {
def viewLoc: Loc[Task]
def panel(t: Task): CssTr
def apply(orig: Box[Task], task: Box[Task]) {
for {
t <- task
} {
val submitter = t.createdBy.valueBox
val resp = t.responsible.valueBox
val respN = t.responsible.user.dmap("")(_.linkName)
val origResp = orig map(_.responsible.valueBox)
val origRespU = orig flatMap(_.responsible.user)
val updater = t.updatedBy.valueBox
val by = t.updatedBy.user.dmap("")(_.linkName)
logger.debug("Executing notifications for task %s".format(t.linkName))
val ne = new NotificationEngine
import ne._
execute {
val cnt = content(panel(t))
val _title = title("*" #> a(viewLoc.calcHref(t))(viewLoc.title(t)))
"Task update" when(origResp == resp) then (
subject(l10n("[Task %s] %s modified by %s", t.numberStr, t.linkName, by)),
_title, cnt,
to(t.createdBy.user filterNot { u => updater == submitter }),
to(t.responsible.user filterNot { u => updater == resp })
)
"Task assignment" when(!(origResp == resp)) then (
subject(l10n("[Task %s] %s assigned to %s by %s", t.numberStr, t.linkName, respN, by)),
_title, cnt,
to(t.createdBy.user filterNot { u => updater == submitter }),
to(origRespU filterNot { u => updater == origResp })
)
"Task assigned to you" when(!(origResp == resp) && !(updater == resp)) then (
subject(l10n("[Task %s] %s assigned to you by %s", t.numberStr, t.linkName, by)),
_title, cnt,
to(t.responsible.user)
)
} foreach { res =>
S notice(l10n("Sent notification to [%s] with subject %s",
res._3 mkString ",", res._2))
}
}
}
}
// vim: set ts=2 sw=2 et: