/*
* eGov suite of products aim to improve the internal efficiency,transparency,
* accountability and the service delivery of the government organizations.
*
* Copyright (C) <2015> eGovernments Foundation
*
* The updated version of eGov suite of products as by eGovernments Foundation
* is available at http://www.egovernments.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/ or
* http://www.gnu.org/licenses/gpl.html .
*
* In addition to the terms of the GPL license to be adhered to in using this
* program, the following additional terms are to be complied with:
*
* 1) All versions of this program, verbatim or modified must carry this
* Legal Notice.
*
* 2) Any misrepresentation of the origin of the material is prohibited. It
* is required that all modified versions of this material be marked in
* reasonable ways as different from the original version.
*
* 3) This license does not grant any rights to any user of the program
* with regards to rights under trademark law for use of the trade names
* or trademarks of eGovernments Foundation.
*
* In case of any queries, you can reach eGovernments Foundation at contact@egovernments.org.
*/
package org.egov.commons.dao;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.apache.log4j.Logger;
import org.egov.commons.CFinancialYear;
import org.egov.infra.exception.ApplicationRuntimeException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@Repository
public class FinancialYearHibernateDAO implements FinancialYearDAO {
@Transactional
public CFinancialYear update(final CFinancialYear entity) {
getCurrentSession().update(entity);
return entity;
}
@Transactional
public CFinancialYear create(final CFinancialYear entity) {
getCurrentSession().persist(entity);
return entity;
}
@Transactional
public void delete(CFinancialYear entity) {
getCurrentSession().delete(entity);
}
public CFinancialYear findById(Number id, boolean lock) {
return (CFinancialYear) getCurrentSession().load(CFinancialYear.class, id);
}
public List<CFinancialYear> findAll() {
return (List<CFinancialYear>) getCurrentSession().createCriteria(CFinancialYear.class).list();
}
@PersistenceContext
private EntityManager entityManager;
public Session getCurrentSession() {
return entityManager.unwrap(Session.class);
}
private final Logger logger = Logger.getLogger(getClass().getName());
public String getCurrYearFiscalId() {
Date dt = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
String currentDate = formatter.format(dt);
String result = "";
Query query = getCurrentSession().createQuery(
"select cfinancialyear.id from CFinancialYear cfinancialyear where cfinancialyear.startingDate <= '"
+ currentDate + "' and cfinancialyear.endingDate >= '" + currentDate + "' ");
ArrayList list = (ArrayList) query.list();
result = list.get(0).toString();
return result;
}
public String getCurrYearStartDate() {
Date dt = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
String currentDate = formatter.format(dt);
logger.info("Obtained session");
String result = "";
Query query = getCurrentSession().createQuery(
"select cfinancialyear.startingDate from CFinancialYear cfinancialyear where cfinancialyear.startingDate <= '"
+ currentDate + "' and cfinancialyear.endingDate >= '" + currentDate + "' ");
ArrayList list = (ArrayList) query.list();
if (list.size() > 0) {
if (list.get(0) == null)
return 0.0 + "";
else
result = list.get(0).toString();
} else
return 0.0 + "";
return result;
}
public String getPrevYearFiscalId() {
Date dt = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(dt);
int prevYear = calendar.get(Calendar.YEAR) - 1;
calendar.set(Calendar.YEAR, prevYear);
String previousDate = formatter.format(calendar.getTime());
logger.info("Obtained session");
String result = "";
Query query = getCurrentSession().createQuery(
"select cfinancialyear.id from CFinancialYear cfinancialyear where cfinancialyear.startingDate <= '"
+ previousDate + "' and cfinancialyear.endingDate >= '" + previousDate + "' ");
ArrayList list = (ArrayList) query.list();
if (list.size() > 0) {
if (list.get(0) == null)
return 0.0 + "";
else
result = list.get(0).toString();
} else
return 0.0 + "";
return result;
}
@Deprecated
public String getFinancialYearId(String estDate) {
logger.info("Obtained session");
String result = "";
Query query = getCurrentSession().createQuery(
"select cfinancialyear.id from CFinancialYear cfinancialyear where cfinancialyear.startingDate <= to_date('"
+ estDate + "','dd/MM/yyyy') and cfinancialyear.endingDate >= to_date('" + estDate
+ "','dd/MM/yyyy') ");
ArrayList list = (ArrayList) query.list();
if (list.size() > 0)
result = list.get(0).toString();
return result;
}
public CFinancialYear getFinancialYearByFinYearRange(String finYearRange) {
Query query = getCurrentSession().createQuery(
"from CFinancialYear cfinancialyear where cfinancialyear.finYearRange=:finYearRange");
query.setString("finYearRange", finYearRange);
query.setCacheable(true);
return (CFinancialYear) query.uniqueResult();
}
public List<CFinancialYear> getAllActiveFinancialYearList() {
Query query = getCurrentSession().createQuery(
"from CFinancialYear cfinancialyear where isActive=true order by finYearRange desc");
return query.list();
}
public List<CFinancialYear> getAllActivePostingFinancialYear() {
Query query = getCurrentSession()
.createQuery(
"from CFinancialYear cfinancialyear where isActive=true and isActiveForPosting=true order by startingDate desc");
return query.list();
}
public List<CFinancialYear> getAllNotClosedFinancialYears() {
Query query = getCurrentSession()
.createQuery(
"from CFinancialYear cfinancialyear where cfinancialyear.isClosed=false order by cfinancialyear.startingDate asc");
return query.list();
}
public CFinancialYear getFinancialYearById(Long id) {
Query query = getCurrentSession().createQuery("from CFinancialYear cfinancialyear where id=:id");
query.setLong("id", id);
return (CFinancialYear) query.uniqueResult();
}
/*
* @Override public CFinancialYear getFinancialYear(String estDate) {
* session = getCurrentSession(); logger.info("Obtained session");
* CFinancialYear result=null; Query query=session.createQuery(
* "from CFinancialYear cfinancialyear where cfinancialyear.startingDate <= '"
* +estDate+"' and cfinancialyear.endingDate >= '"+estDate+"' "); ArrayList
* list= (ArrayList)query.list(); if(list.size()>0) result=(CFinancialYear)
* list.get(0); return result; }
*/
/**
* @param fromDate
* @param toDate
* will will return false if any financialyear is not active for
* posting within given date range
*/
public boolean isFinancialYearActiveForPosting(Date fromDate, Date toDate) {
logger.info("Obtained session");
String result = "";
Query query = getCurrentSession()
.createQuery(
""
+ " from CFinancialYear cfinancialyear where cfinancialyear.isActiveForPosting=false and cfinancialyear.startingDate <=:sDate and cfinancialyear.endingDate >=:eDate ");
query.setDate("sDate", fromDate);
query.setDate("eDate", toDate);
ArrayList list = (ArrayList) query.list();
if (list.size() > 0)
return false;
else
return true;
}
/**
* gives active FY only else throws
* ApplicationRuntimeException("Financial Year is not active For Posting.")
*/
public CFinancialYear getFinancialYearByDate(Date date) {
CFinancialYear cFinancialYear = null;
logger.info("Obtained session");
String result = "";
Query query = getCurrentSession()
.createQuery(
" from CFinancialYear cfinancialyear where cfinancialyear.startingDate <=:sDate and cfinancialyear.endingDate >=:eDate and cfinancialyear.isActiveForPosting=true");
query.setDate("sDate", date);
query.setDate("eDate", date);
ArrayList list = (ArrayList) query.list();
if (list.size() > 0)
cFinancialYear = (CFinancialYear) list.get(0);
if (null == cFinancialYear)
throw new ApplicationRuntimeException("Financial Year is not active For Posting.");
return cFinancialYear;
}
/**
* gives active and not active FY
*/
public CFinancialYear getFinYearByDate(Date date) {
CFinancialYear cFinancialYear = null;
logger.info("Obtained session");
Query query = getCurrentSession()
.createQuery(
" from CFinancialYear cfinancialyear where cfinancialyear.startingDate <=:sDate and cfinancialyear.endingDate >=:eDate");
query.setDate("sDate", date);
query.setDate("eDate", date);
ArrayList list = (ArrayList) query.list();
if (list.size() > 0)
cFinancialYear = (CFinancialYear) list.get(0);
if (null == cFinancialYear)
throw new ApplicationRuntimeException("Financial Year Id does not exist.");
return cFinancialYear;
}
public CFinancialYear getTwoPreviousYearByDate(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.YEAR, -2);
return getFinYearByDate(cal.getTime());
}
public CFinancialYear getNextFinancialYearByDate(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.YEAR, +1);
return getFinYearByDate(cal.getTime());
}
public CFinancialYear getPreviousFinancialYearByDate(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.YEAR, -1);
return getFinYearByDate(cal.getTime());
}
/**
* checks whether two dates fall in same financial Year
*/
public boolean isSameFinancialYear(Date fromDate, Date toDate) {
if (getFinYearByDate(fromDate).getId().longValue() == getFinYearByDate(toDate).getId().longValue()) {
return true;
} else {
return false;
}
}
public List<CFinancialYear> getAllPriorFinancialYears(Date date) {
Query query = getCurrentSession()
.createQuery(
" from CFinancialYear cfinancialyear where cfinancialyear.startingDate <:sDate and isActive=true order by finYearRange desc ");
query.setDate("sDate", date);
return query.list();
}
}