Package org.sis.ancmessaging.server.dao

Source Code of org.sis.ancmessaging.server.dao.ReportDaoImpl

package org.sis.ancmessaging.server.dao;

import org.hibernate.Criteria;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.joda.time.DateTime;
import org.sis.ancmessaging.server.domain.Mother;
import org.sis.ancmessaging.server.domain.Reminder;
import org.sis.ancmessaging.server.domain.Report;
import org.sis.ancmessaging.server.domain.ReportDetail;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
* Created by IntelliJ IDEA.
* Author: Henock
* Date: 2/8/12
* Time: 11:35 AM
* To change this template use File | Settings | File Templates.
*/
@Repository
@Transactional
public class ReportDaoImpl extends BaseDao implements ReportDao {

   
    @Override
    public List<Report> getUnsent() {
        Criteria criteria = getSession().createCriteria(Report.class)
                                        .add(Restrictions.eq("status", "PENDING"));
        return criteria.list();
    }

    @Override
    public void updateStatus(int reportId, String status) {
        Report oldReport = (Report) getSession().get(Report.class, reportId);
        if (oldReport != null) {
            oldReport.setStatus(status);
        }
        getSession().update(oldReport);
    }

    @Override
    public ReportDetail generateReport(Report report) {
        DateTime begin, end;
        ReportDetail reportDetail = new ReportDetail();
        for (int i = report.getFromQuarter(); i <= report.getToQuarter(); i++) {
            int endMonth = i * 3;
            int beginMonth = endMonth - 2;
            int endDate = 31;
            int year = report.getYear();
            if (endMonth == 2 || endMonth == 3) {
                endDate = 30;
            }
            begin = new DateTime(year, beginMonth, 1,0, 0);
            end = new DateTime(year, endMonth, endDate, 0, 0);
            long count = (Long) getSession().createCriteria(Reminder.class)
                    .add(Restrictions.between("reminderSentOn", begin.toDate(), end.toDate()))
                    .add(Restrictions.eq("reminderType", "MONTHLY"))
                    .setProjection(Projections.rowCount()).uniqueResult();
            int c = (int)count;
            switch(i) {
                case 1: reportDetail.setQ1FirstReminder(c);
                        break;
                case 2: reportDetail.setQ2FirstReminder(c);
                        break;
                case 3: reportDetail.setQ3FirstReminder(c);
                        break;
                case 4: reportDetail.setQ4FirstReminder(c);
                        break;
            }

            count = (Long) getSession().createCriteria(Reminder.class)
                    .add(Restrictions.between("reminderSentOn", begin.toDate(), end.toDate()))
                    .add(Restrictions.eq("reminderType", "WEEKLY"))
                    .setProjection(Projections.rowCount()).uniqueResult();
            c = (int)count;
            switch(i) {
                case 1: reportDetail.setQ1SecondReminder(c);
                        break;
                case 2: reportDetail.setQ2SecondReminder(c);
                        break;
                case 3: reportDetail.setQ3SecondReminder(c);
                        break;
                case 4: reportDetail.setQ4SecondReminder(c);
                        break;
            }

            count = (Long) getSession().createCriteria(Mother.class)
                    .add(Restrictions.between("arrivalTime", begin.toDate(), end.toDate()))
                    .add(Restrictions.eq("outcome", "Delivered at Home"))
                    .setProjection(Projections.rowCount()).uniqueResult();
            c = (int)count;
            switch(i) {
                case 1: reportDetail.setQ1HomeDelivery(c);
                        break;
                case 2: reportDetail.setQ2HomeDelivery(c);
                        break;
                case 3: reportDetail.setQ3HomeDelivery(c);
                        break;
                case 4: reportDetail.setQ4HomeDelivery(c);
                        break;
            }

            count = (Long) getSession().createCriteria(Mother.class)
                    .add(Restrictions.between("arrivalTime", begin.toDate(), end.toDate()))
                    .add(Restrictions.eq("outcome", "Delivered at HP"))
                    .setProjection(Projections.rowCount()).uniqueResult();
            c = (int)count;
            switch(i) {
                case 1: reportDetail.setQ1HpDelivery(c);
                        break;
                case 2: reportDetail.setQ2HpDelivery(c);
                        break;
                case 3: reportDetail.setQ3HpDelivery(c);
                        break;
                case 4: reportDetail.setQ4HpDelivery(c);
                        break;
            }

            count = (Long) getSession().createCriteria(Mother.class)
                    .add(Restrictions.between("arrivalTime", begin.toDate(), end.toDate()))
                    .add(Restrictions.eq("outcome", "Delivered at HC"))
                    .setProjection(Projections.rowCount()).uniqueResult();
            c = (int)count;
            switch(i) {
                case 1: reportDetail.setQ1HcDelivery(c);
                        break;
                case 2: reportDetail.setQ2HcDelivery(c);
                        break;
                case 3: reportDetail.setQ3HcDelivery(c);
                        break;
                case 4: reportDetail.setQ4HcDelivery(c);
                        break;
            }

            count = (Long) getSession().createCriteria(Mother.class)
                    .add(Restrictions.between("arrivalTime", begin.toDate(), end.toDate()))
                    .add(Restrictions.eq("outcome", "Referred"))
                    .setProjection(Projections.rowCount()).uniqueResult();
            c = (int)count;
            switch(i) {
                case 1: reportDetail.setQ1ReferredDelivery(c);
                        break;
                case 2: reportDetail.setQ2ReferredDelivery(c);
                        break;
                case 3: reportDetail.setQ3ReferredDelivery(c);
                        break;
                case 4: reportDetail.setQ4ReferredDelivery(c);
                        break;
            }

            count = (Long) getSession().createCriteria(Mother.class)
                    .add(Restrictions.between("arrivalTime", begin.toDate(), end.toDate()))
                    .add(Restrictions.eq("outcome", "Unknown"))
                    .setProjection(Projections.rowCount()).uniqueResult();
            c = (int)count;
            switch(i) {
                case 1: reportDetail.setQ1UnknownDelivery(c);
                        break;
                case 2: reportDetail.setQ2UnknownDelivery(c);
                        break;
                case 3: reportDetail.setQ3UnknownDelivery(c);
                        break;
                case 4: reportDetail.setQ4UnknownDelivery(c);
                        break;
            }

            count = (Long) getSession().createCriteria(Mother.class)
                    .add(Restrictions.between("edd", begin.toDate(), end.toDate()))
                    .setProjection(Projections.rowCount()).uniqueResult();
            c = (int)count;
            switch(i) {
                case 1: reportDetail.setQ1Edd(c);
                    break;
                case 2: reportDetail.setQ2Edd(c);
                    break;
                case 3: reportDetail.setQ3Edd(c);
                    break;
                case 4: reportDetail.setQ4Edd(c);
                    break;
            }
        }
       
        return reportDetail;
    }

    @Override
    public ReportDetail getReportDetail(Report report) {
        Criteria criteria = getSession().createCriteria(ReportDetail.class)
                                        .add(Restrictions.eq("report", report));
        return (ReportDetail) criteria.uniqueResult();
    }
}
TOP

Related Classes of org.sis.ancmessaging.server.dao.ReportDaoImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.