src/main/scala/fis/pm/ui/TaskNotification.scala
author Tomas Zeman <tzeman@volny.cz>
Tue, 23 Apr 2013 10:36:04 +0200
changeset 108 ef4e3e0ef83f
permissions -rw-r--r--
84a94fa29a67504b Task/Project notifications

/*
 * 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: