/*
* 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.adtax.service;
import org.egov.adtax.elasticSearch.service.AdvertisementIndexService;
import org.egov.adtax.entity.AdvertisementPermitDetail;
import org.egov.adtax.utils.constants.AdvertisementTaxConstants;
import org.egov.commons.entity.Source;
import org.egov.eis.entity.Assignment;
import org.egov.eis.service.AssignmentService;
import org.egov.eis.service.EisCommonService;
import org.egov.infra.admin.master.entity.User;
import org.egov.infra.admin.master.service.UserService;
import org.egov.infra.search.elastic.entity.ApplicationIndex;
import org.egov.infra.search.elastic.entity.ApplicationIndexBuilder;
import org.egov.infra.search.elastic.entity.enums.ApprovalStatus;
import org.egov.infra.search.elastic.entity.enums.ClosureStatus;
import org.egov.infra.search.elastic.service.ApplicationIndexService;
import org.egov.infra.security.utils.SecurityUtils;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Service
public class AdvertisementPermitDetailUpdateIndexService {
@PersistenceContext
private EntityManager entityManager;
@Autowired
private ApplicationIndexService applicationIndexService;
@Autowired
private AssignmentService assignmentService;
@Autowired
private EisCommonService eisCommonService;
@Autowired
private SecurityUtils securityUtils;
@Autowired
private UserService userService;
@Autowired
private AdvertisementIndexService advertisementIndexService;
public Session getCurrentSession() {
return entityManager.unwrap(Session.class);
}
/**
* @param advertisementPermitDetail
*/
public void updateAdvertisementPermitDetailIndexes(final AdvertisementPermitDetail advertisementPermitDetail) {
Assignment assignment = null;
User user = null;
List<Assignment> asignList = null;
if (advertisementPermitDetail.getState() != null && advertisementPermitDetail.getState().getOwnerPosition() != null) {
assignment = assignmentService.getPrimaryAssignmentForPositionAndDate(advertisementPermitDetail.getState().getOwnerPosition()
.getId(), new Date());
if (assignment != null) {
asignList = new ArrayList<Assignment>();
asignList.add(assignment);
} else if (assignment == null)
asignList = assignmentService.getAssignmentsForPosition(advertisementPermitDetail.getState().getOwnerPosition().getId(),
new Date());
if (!asignList.isEmpty())
user = userService.getUserById(asignList.get(0).getEmployee().getId());
} else
user = securityUtils.getCurrentUser();
// For legacy application - create only advertisementIndex
if (advertisementPermitDetail.getAdvertisement().getLegacy()
&& (null == advertisementPermitDetail.getId() || (null != advertisementPermitDetail.getId()
&& advertisementPermitDetail.getStatus().getCode().equalsIgnoreCase(AdvertisementTaxConstants.APPLICATION_STATUS_ADTAXPERMITGENERATED)))) {
advertisementIndexService.createAdvertisementIndex(advertisementPermitDetail);
return;
}
ApplicationIndex applicationIndex = applicationIndexService.findByApplicationNumber(advertisementPermitDetail
.getApplicationNumber());
// update existing application index
if (applicationIndex != null && null != advertisementPermitDetail.getId() && advertisementPermitDetail.getStatus() != null
&& !advertisementPermitDetail.getStatus().getCode().equalsIgnoreCase(AdvertisementTaxConstants.APPLICATION_STATUS_CREATED)) {
if(advertisementPermitDetail.getStatus()!=null &&
(advertisementPermitDetail.getStatus().getCode().equalsIgnoreCase(AdvertisementTaxConstants.APPLICATION_STATUS_APPROVED)
|| advertisementPermitDetail.getStatus().getCode().equalsIgnoreCase(AdvertisementTaxConstants.APPLICATION_STATUS_ADTAXAMOUNTPAID)
|| advertisementPermitDetail.getStatus().getCode().equalsIgnoreCase(AdvertisementTaxConstants.APPLICATION_STATUS_ADTAXPERMITGENERATED)
|| advertisementPermitDetail.getStatus().getCode().equalsIgnoreCase(AdvertisementTaxConstants.APPLICATION_STATUS_CANCELLED))
){
applicationIndex.setStatus(advertisementPermitDetail.getStatus().getDescription());
applicationIndex.setOwnername(user!=null?user.getUsername() + "::" + user.getName():"");
// Set application index status to approved on advertisement approval
if(advertisementPermitDetail.getStatus().getCode().equalsIgnoreCase(AdvertisementTaxConstants.APPLICATION_STATUS_APPROVED)){
String applicantName=advertisementPermitDetail.getAgency()!=null?advertisementPermitDetail.getAgency().getName():
advertisementPermitDetail.getOwnerDetail();
String address=advertisementPermitDetail.getAgency()!=null?advertisementPermitDetail.getAgency().getAddress():
advertisementPermitDetail.getOwnerDetail();
applicationIndex.setApplicantName(applicantName);
applicationIndex.setApplicantAddress(address);
applicationIndex.setMobileNumber(advertisementPermitDetail.getAgency()!=null?
advertisementPermitDetail.getAgency().getMobileNumber():"");
}
// mark application index as closed on generate permit order
if(advertisementPermitDetail.getStatus().getCode().equalsIgnoreCase(AdvertisementTaxConstants.APPLICATION_STATUS_ADTAXPERMITGENERATED)){
applicationIndex.setApproved(ApprovalStatus.APPROVED);
applicationIndex.setClosed(ClosureStatus.YES);
}
// mark application index as rejected and closed on advertisement cancellation / Deactivation
if(advertisementPermitDetail.getStatus().getCode().equalsIgnoreCase(AdvertisementTaxConstants.APPLICATION_STATUS_CANCELLED) ||
advertisementPermitDetail.getAdvertisement().getStatus().name().equalsIgnoreCase("INACTIVE")){
applicationIndex.setApproved(ApprovalStatus.REJECTED);
applicationIndex.setClosed(ClosureStatus.YES);
}
if (advertisementPermitDetail.getPermissionNumber() != null)
applicationIndex.setConsumerCode(advertisementPermitDetail.getPermissionNumber());
applicationIndexService.updateApplicationIndex(applicationIndex);
}
//create advertisement index
advertisementIndexService.createAdvertisementIndex(advertisementPermitDetail);
} else { // Create New ApplicationIndex on create advertisement
final String strQuery = "select md from EgModules md where md.name=:name";
final Query hql = getCurrentSession().createQuery(strQuery);
hql.setParameter("name", AdvertisementTaxConstants.MODULE_NAME);
if (advertisementPermitDetail.getApplicationDate() == null)
advertisementPermitDetail.setApplicationDate(new Date());
if (advertisementPermitDetail.getApplicationNumber() == null)
advertisementPermitDetail.setApplicationNumber(advertisementPermitDetail.getApplicationNumber());
if (applicationIndex == null) {
final String url = "/adtax/hoarding/view/"
+ advertisementPermitDetail.getId();
String applicantName=advertisementPermitDetail.getAgency()!=null?advertisementPermitDetail.getAgency().getName():
advertisementPermitDetail.getOwnerDetail();
String address=advertisementPermitDetail.getAgency()!=null?advertisementPermitDetail.getAgency().getAddress():
advertisementPermitDetail.getOwnerDetail();
final ApplicationIndexBuilder applicationIndexBuilder = new ApplicationIndexBuilder(
AdvertisementTaxConstants.MODULE_NAME, advertisementPermitDetail.getApplicationNumber(),
advertisementPermitDetail.getApplicationDate(), advertisementPermitDetail.getState().getNatureOfTask(), applicantName,
advertisementPermitDetail.getStatus().getDescription(),
url, address, user.getUsername() + "::" + user.getName(), Source.SYSTEM.toString());
applicationIndexBuilder.mobileNumber(advertisementPermitDetail.getAgency()!=null?
advertisementPermitDetail.getAgency().getMobileNumber():"");
applicationIndexBuilder.aadharNumber(null);
applicationIndexBuilder.approved(ApprovalStatus.INPROGRESS);
applicationIndexBuilder.closed(ClosureStatus.NO);
applicationIndex = applicationIndexBuilder.build();
applicationIndexService.createApplicationIndex(applicationIndex);
}
}
}
}