All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openurp.base.service.impl.SemesterServiceImpl.scala Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2014, The OpenURP Software.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published
 * by the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see .
 */

package org.openurp.base.service.impl

import org.beangle.commons.collection.Order
import org.beangle.data.dao.{EntityDao, OqlBuilder}
import org.openurp.base.model.{Project, Semester}
import org.openurp.base.service.SemesterService

import java.time.LocalDate

class SemesterServiceImpl extends SemesterService {
  var entityDao: EntityDao = _

  override def get(project: Project, date: LocalDate): Semester = {
    val builder = OqlBuilder.from(classOf[Semester], "semester")
      .where("semester.calendar =:calendar", project.calendar)
    builder.where(":date between semester.beginOn and  semester.endOn", date)
    builder.cacheable()
    val rs = entityDao.search(builder)
    if (rs.isEmpty) {
      val builder2 = OqlBuilder.from(classOf[Semester], "semester")
        .where("semester.calendar =:calendar", project.calendar)
      builder2.where("semester.endOn >= :date", date)
      builder2.orderBy(Order.parse("semester.beginOn"))
      builder2.cacheable()
      builder.limit(1, 1)
      entityDao.search(builder2).headOption match {
        case Some(r) => r
        case None => getActives(project).last
      }
    } else {
      rs.head
    }
  }

  override def getActives(project: Project): Seq[Semester] = {
    val builder = OqlBuilder.from(classOf[Semester], "semester")
      .where("semester.calendar =:calendar", project.calendar)
    builder.where("semester.archived=false")
    builder.orderBy("semester.beginOn")
    builder.cacheable()
    entityDao.search(builder)
  }

  override def get(project: Project, beginOn: LocalDate, endOn: LocalDate): (Seq[Semester], Seq[Semester]) = {
    val builder = OqlBuilder.from(classOf[Semester], "semester")
      .where("semester.calendar =:calendar", project.calendar)
    builder.where("semester.beginOn <= :endOn", endOn)
    builder.where("semester.endOn >= :beginOn", beginOn)
    builder.orderBy("semester.beginOn")
    builder.cacheable()
    val semesters = entityDao.search(builder)
    semesters.partition(_.archived)
  }

  /**
   * get semester by index
   *
   * @param project
   * @param beginOn
   * @param endOn
   * @param index start with 1
   */
  override def get(project: Project, beginOn: LocalDate, endOn: LocalDate, index: Int): Option[Semester] = {
    val builder = OqlBuilder.from(classOf[Semester], "semester")
      .where("semester.calendar =:calendar", project.calendar)
    builder.where("semester.beginOn <= :endOn", endOn)
    builder.where("semester.endOn >= :beginOn", beginOn)
    builder.orderBy(Order.parse("semester.beginOn"))
    val semestersByInterval = entityDao.search(builder)
    if (index > semestersByInterval.size) {
      None
    } else {
      Some(semestersByInterval(index - 1))
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy