/*
* eGov suite of products aim to improve the internal efficiency,transparency,
* accountability and the service delivery of the government organizations.
*
* Copyright (C) <2016> 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.stms.transactions.service;
import static org.egov.stms.utils.constants.SewerageTaxConstants.APPLICATION_STATUS_COLLECTINSPECTIONFEE;
import static org.egov.stms.utils.constants.SewerageTaxConstants.APPLICATION_STATUS_CREATED;
import static org.egov.stms.utils.constants.SewerageTaxConstants.APPLICATION_STATUS_DEEAPPROVED;
import static org.egov.stms.utils.constants.SewerageTaxConstants.APPLICATION_STATUS_FEEPAID;
import static org.egov.stms.utils.constants.SewerageTaxConstants.APPLICATION_STATUS_FINALAPPROVED;
import static org.egov.stms.utils.constants.SewerageTaxConstants.APPLICATION_STATUS_REJECTED;
import static org.egov.stms.utils.constants.SewerageTaxConstants.APPLICATION_STATUS_CLOSERSANCTIONED;
import static org.egov.stms.utils.constants.SewerageTaxConstants.CHANGEINCLOSETS;
import static org.egov.stms.utils.constants.SewerageTaxConstants.FEES_DONATIONCHARGE_CODE;
import static org.egov.stms.utils.constants.SewerageTaxConstants.FEES_ESTIMATIONCHARGES_CODE;
import static org.egov.stms.utils.constants.SewerageTaxConstants.FEES_SEWERAGETAX_CODE;
import static org.egov.stms.utils.constants.SewerageTaxConstants.INSPECTIONCHARGE;
import static org.egov.stms.utils.constants.SewerageTaxConstants.MODULE_NAME;
import static org.egov.stms.utils.constants.SewerageTaxConstants.NEWSEWERAGECONNECTION;
import static org.egov.stms.utils.constants.SewerageTaxConstants.SENDEMAILFORSEWERAGETAX;
import static org.egov.stms.utils.constants.SewerageTaxConstants.SENDSMSFORSEWERAGETAX;
import static org.egov.stms.utils.constants.SewerageTaxConstants.SMSEMAILTYPECLOSINGCONNAPPROVE;
import static org.egov.stms.utils.constants.SewerageTaxConstants.SMSEMAILTYPECLOSINGCONNSANCTIONED;
import static org.egov.stms.utils.constants.SewerageTaxConstants.SMSEMAILTYPENEWCONNCREATE;
import static org.egov.stms.utils.constants.SewerageTaxConstants.SMSEMAILTYPENEWCONNCREATEFORNOINSFEE;
import static org.egov.stms.utils.constants.SewerageTaxConstants.SMSEMAILTYPENEWCONNDEEAPPROVE;
import static org.egov.stms.utils.constants.SewerageTaxConstants.SMSEMAILTYPENEWCONNFEEPAID;
import static org.egov.stms.utils.constants.SewerageTaxConstants.SMSEMAILTYPENEWCONNFINALAPPROVE;
import static org.egov.stms.utils.constants.SewerageTaxConstants.SMSEMAILTYPENEWCONNREJECT;
import static org.egov.stms.utils.constants.SewerageTaxConstants.SMSEMAILTYPE_CHANGEINCLOSETS_CONN;
import static org.egov.stms.utils.constants.SewerageTaxConstants.SMSEMAILTYPE_CHANGEINCLOSETS_CONN_DEEAPPROVE;
import static org.egov.stms.utils.constants.SewerageTaxConstants.SMSEMAILTYPE_CHANGEINCLOSETS_CONN_FEEPAID;
import static org.egov.stms.utils.constants.SewerageTaxConstants.SMSEMAILTYPE_CHANGEINCLOSETS_CONN_FINALAPPROVE;
import static org.egov.stms.utils.constants.SewerageTaxConstants.SMSEMAILTYPE_CHANGEINCLOSETS_CONN_NOINSFEE;
import static org.egov.stms.utils.constants.SewerageTaxConstants.SMSEMAILTYPE_CHANGEINCLOSETS_CONN_REJECT;
import static org.egov.stms.utils.constants.SewerageTaxConstants.SMSEMAILTYPE_CHANGEINCLOSETS_CONN_SANCTIONED;
import static org.egov.stms.utils.constants.SewerageTaxConstants.SMSEMAILTYPE_CLOSESEWERAGE_CONN_CREATE;
import static org.egov.stms.utils.constants.SewerageTaxConstants.SMSEMAILTYPE_CLOSESEWERAGE_CONN_EEAPPROVE;
import static org.egov.stms.utils.constants.SewerageTaxConstants.SMSEMAILTYPE_CLOSESEWERAGE_CONN_REJECT;
import static org.egov.stms.utils.constants.SewerageTaxConstants.CLOSESEWERAGECONNECTION;
import java.math.BigDecimal;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import org.egov.infra.admin.master.entity.AppConfigValues;
import org.egov.infra.admin.master.service.AppConfigValueService;
import org.egov.infra.messaging.MessagingService;
import org.egov.ptis.domain.model.AssessmentDetails;
import org.egov.ptis.domain.model.OwnerName;
import org.egov.stms.transactions.entity.SewerageApplicationDetails;
import org.egov.stms.transactions.entity.SewerageConnectionFee;
import org.egov.stms.utils.SewerageTaxUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Scope;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Service;
@Service
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class SewerageConnectionSmsAndEmailService {
private String muncipalityName;
@Autowired
@Qualifier("parentMessageSource")
private MessageSource stmsMessageSource;
@Autowired
private SewerageTaxUtils sewerageTaxUtils;
@Autowired
private SewerageThirdPartyServices sewerageThirdPartyServices;
@Autowired
private MessagingService messagingService;
@Autowired
private AppConfigValueService appConfigValuesService;
@Autowired
private SewerageApplicationDetailsService sewerageApplicationDetailsService;
/**
* @return this method will send SMS and Email is isSmsEnabled is true
* @param SewerageApplicationDetails
* @param workFlowAction
*/
public void sendSmsAndEmail(final SewerageApplicationDetails sewerageApplicationDetails,
final HttpServletRequest request) {
final AssessmentDetails assessmentDetails = sewerageThirdPartyServices.getPropertyDetails(
sewerageApplicationDetails.getConnectionDetail().getPropertyIdentifier(), request);
final String email = assessmentDetails.getPrimaryEmail();
final String mobileNumber = assessmentDetails.getPrimaryMobileNo();
muncipalityName = sewerageTaxUtils.getMunicipalityName();
if (sewerageApplicationDetails != null && sewerageApplicationDetails.getApplicationType() != null
&& sewerageApplicationDetails.getApplicationType().getCode() != null
&& sewerageApplicationDetails.getStatus() != null
&& sewerageApplicationDetails.getStatus().getCode() != null) {
for (OwnerName owner : assessmentDetails.getOwnerNames()) {
String applicantName = owner.getOwnerName();
if (assessmentDetails.getPrimaryEmail() != null || assessmentDetails.getPrimaryMobileNo() != null) {
if (NEWSEWERAGECONNECTION.equalsIgnoreCase(sewerageApplicationDetails
.getApplicationType().getCode())) {
getSmsAndEmailForNewConnection(sewerageApplicationDetails, email, mobileNumber, applicantName);
} else if (CHANGEINCLOSETS.equalsIgnoreCase(sewerageApplicationDetails
.getApplicationType().getCode())) {
getSmsAndEmailForChangeInClosets(sewerageApplicationDetails, email, mobileNumber, applicantName);
}else if(CLOSESEWERAGECONNECTION.equalsIgnoreCase(sewerageApplicationDetails.getApplicationType().getCode())){
getSmsAndEmailForCloseConnection(sewerageApplicationDetails, email, mobileNumber, applicantName);
}
} else {
String email_id = owner.getEmailId();
String mobileno = owner.getMobileNumber();
if (email_id != null || mobileno != null) {
if (NEWSEWERAGECONNECTION.equalsIgnoreCase(sewerageApplicationDetails
.getApplicationType().getCode())) {
getSmsAndEmailForNewConnection(sewerageApplicationDetails, email_id, mobileno,
applicantName);
} else if (CHANGEINCLOSETS.equalsIgnoreCase(sewerageApplicationDetails
.getApplicationType().getCode())) {
getSmsAndEmailForChangeInClosets(sewerageApplicationDetails, email_id, mobileno,
applicantName);
}else if(CLOSESEWERAGECONNECTION.equalsIgnoreCase(sewerageApplicationDetails.getApplicationType().getCode())){
getSmsAndEmailForCloseConnection(sewerageApplicationDetails, email_id, mobileno, applicantName);
}
}
}
}
}
}
/**
* @return SMS AND EMAIL body and subject For New Connection
* @param SewerageApplicationDetails
* @param email
* @param mobileNumber
* @param smsMsg
* @param body
* @param subject
*/
public void getSmsAndEmailForNewConnection(final SewerageApplicationDetails SewerageApplicationDetails,
final String email, final String mobileNumber, final String applicantName) {
String smsMsg = null;
String body = "";
String subject = "";
if (APPLICATION_STATUS_COLLECTINSPECTIONFEE.equalsIgnoreCase(SewerageApplicationDetails
.getStatus().getCode())
|| APPLICATION_STATUS_CREATED.equalsIgnoreCase(SewerageApplicationDetails
.getStatus().getCode())) {
if (sewerageTaxUtils.isInspectionFeeCollectionRequired()) {
smsMsg = SmsBodyByCodeAndArgsWithType("msg.newconnectioncreate.sms", SewerageApplicationDetails,
applicantName, SMSEMAILTYPENEWCONNCREATE);
body = EmailBodyByCodeAndArgsWithType("msg.newconnectioncreate.email.body", SewerageApplicationDetails,
applicantName, SMSEMAILTYPENEWCONNCREATE);
subject = emailSubjectforEmailByCodeAndArgs("msg.newconnectioncreate.email.subject",
SewerageApplicationDetails.getApplicationNumber());
} else {
smsMsg = SmsBodyByCodeAndArgsWithType("msg.newconnectioncreateForNoInsFee.sms",
SewerageApplicationDetails, applicantName, SMSEMAILTYPENEWCONNCREATEFORNOINSFEE);
body = EmailBodyByCodeAndArgsWithType("msg.newconnectioncreateForNoInsFee.email.body",
SewerageApplicationDetails, applicantName, SMSEMAILTYPENEWCONNCREATEFORNOINSFEE);
subject = emailSubjectforEmailByCodeAndArgs("msg.newconnectioncreateForNoInsFee.email.subject",
SewerageApplicationDetails.getApplicationNumber());
}
}
if (APPLICATION_STATUS_DEEAPPROVED.equalsIgnoreCase(SewerageApplicationDetails.getStatus()
.getCode())) {
smsMsg = SmsBodyByCodeAndArgsWithType("msg.newconnectiondeeapproval.sms", SewerageApplicationDetails,
applicantName, SMSEMAILTYPENEWCONNDEEAPPROVE);
body = EmailBodyByCodeAndArgsWithType("msg.newconnectiondeeapproval.email.body",
SewerageApplicationDetails, applicantName, SMSEMAILTYPENEWCONNDEEAPPROVE);
subject = emailSubjectforEmailByCodeAndArgs("msg.newconnectiondeeapproval.email.subject",
SewerageApplicationDetails.getApplicationNumber());
} else if (APPLICATION_STATUS_FEEPAID.equalsIgnoreCase(SewerageApplicationDetails
.getStatus().getCode())) {
smsMsg = SmsBodyByCodeAndArgsWithType("msg.newconnectionOnDemandAndDonation.sms",
SewerageApplicationDetails, applicantName, SMSEMAILTYPENEWCONNFEEPAID);
body = EmailBodyByCodeAndArgsWithType("msg.newconnectionOnDemandAndDonation.email.body",
SewerageApplicationDetails, applicantName, SMSEMAILTYPENEWCONNFEEPAID);
subject = emailSubjectforEmailByCodeAndArgs("msg.newconnectionOnDemandAndDonation.email.subject",
SewerageApplicationDetails.getApplicationNumber());
} else if (APPLICATION_STATUS_FINALAPPROVED.equalsIgnoreCase(SewerageApplicationDetails
.getStatus().getCode())) {
smsMsg = SmsBodyByCodeAndArgsWithType("msg.newconnectionapproval.sms", SewerageApplicationDetails,
applicantName, SMSEMAILTYPENEWCONNFINALAPPROVE);
body = EmailBodyByCodeAndArgsWithType("msg.newconncetionapproval.email.body", SewerageApplicationDetails,
applicantName, SMSEMAILTYPENEWCONNFINALAPPROVE);
subject = emailSubjectforEmailByCodeAndArgs("msg.newconncetionapprove.email.subject",
SewerageApplicationDetails.getApplicationNumber());
} else if (APPLICATION_STATUS_REJECTED.equalsIgnoreCase(SewerageApplicationDetails
.getStatus().getCode())) {
smsMsg = SmsBodyByCodeAndArgsWithType("msg.newconnectionRejection.sms", SewerageApplicationDetails,
applicantName, SMSEMAILTYPENEWCONNREJECT);
body = EmailBodyByCodeAndArgsWithType("msg.newconnectionrejection.email.body", SewerageApplicationDetails,
applicantName, SMSEMAILTYPENEWCONNREJECT);
subject = emailSubjectforEmailByCodeAndArgs("msg.newconnectionrejection.email.subject",
SewerageApplicationDetails.getApplicationNumber());
}
if (mobileNumber != null && smsMsg != null)
sendSMSOnSewerageConnection(mobileNumber, smsMsg);
if (email != null && body != null)
sendEmailOnSewerageConnection(email, body, subject);
}
/**
* @return SMS AND EMAIL body and subject For Change In Closets
* @param SewerageApplicationDetails
* @param email
* @param mobileNumber
* @param smsMsg
* @param body
* @param subject
*/
public void getSmsAndEmailForChangeInClosets(final SewerageApplicationDetails SewerageApplicationDetails,
final String email, final String mobileNumber, final String applicantName) {
String smsMsg = null;
String body = "";
String subject = "";
if (APPLICATION_STATUS_COLLECTINSPECTIONFEE.equalsIgnoreCase(SewerageApplicationDetails
.getStatus().getCode())
|| APPLICATION_STATUS_CREATED.equalsIgnoreCase(SewerageApplicationDetails
.getStatus().getCode())) {
if (sewerageTaxUtils.isInspectionFeeCollectionRequired()) {
smsMsg = SmsBodyByCodeAndArgsWithType("msg.changeincloset.sms", SewerageApplicationDetails,
applicantName, SMSEMAILTYPE_CHANGEINCLOSETS_CONN);
body = EmailBodyByCodeAndArgsWithType("msg.changeincloset.email.body", SewerageApplicationDetails,
applicantName, SMSEMAILTYPE_CHANGEINCLOSETS_CONN);
subject = emailSubjectforEmailByCodeAndArgs("msg.changeincloset.email.subject",
SewerageApplicationDetails.getConnection().getShscNumber());
} else {
smsMsg = SmsBodyByCodeAndArgsWithType("msg.changeinclosetForNoInsFee.sms", SewerageApplicationDetails,
applicantName, SMSEMAILTYPE_CHANGEINCLOSETS_CONN_NOINSFEE);
body = EmailBodyByCodeAndArgsWithType("msg.changeinclosetForNoInsFee.email.body",
SewerageApplicationDetails, applicantName, SMSEMAILTYPE_CHANGEINCLOSETS_CONN_NOINSFEE);
subject = emailSubjectforEmailByCodeAndArgs("msg.changeinclosetForNoInsFee.email.subject",
SewerageApplicationDetails.getConnection().getShscNumber());
}
}
if (APPLICATION_STATUS_DEEAPPROVED.equalsIgnoreCase(SewerageApplicationDetails.getStatus()
.getCode())) {
smsMsg = SmsBodyByCodeAndArgsWithType("msg.changeinclosetdeeapproval.sms", SewerageApplicationDetails,
applicantName, SMSEMAILTYPE_CHANGEINCLOSETS_CONN_DEEAPPROVE);
body = EmailBodyByCodeAndArgsWithType("msg.changeinclosetdeeapproval.email.body",
SewerageApplicationDetails, applicantName, SMSEMAILTYPE_CHANGEINCLOSETS_CONN_DEEAPPROVE);
subject = emailSubjectforEmailByCodeAndArgs("msg.changeinclosetdeeapproval.email.subject",
SewerageApplicationDetails.getConnection().getShscNumber());
} else if (APPLICATION_STATUS_FEEPAID.equalsIgnoreCase(SewerageApplicationDetails
.getStatus().getCode())) {
smsMsg = SmsBodyByCodeAndArgsWithType("msg.changeinclosetOnDemandAndDonation.sms",
SewerageApplicationDetails, applicantName, SMSEMAILTYPE_CHANGEINCLOSETS_CONN_FEEPAID);
body = EmailBodyByCodeAndArgsWithType("msg.changeinclosetOnDemandAndDonation.email.body",
SewerageApplicationDetails, applicantName, SMSEMAILTYPE_CHANGEINCLOSETS_CONN_FEEPAID);
subject = emailSubjectforEmailByCodeAndArgs("msg.changeinclosetOnDemandAndDonation.email.subject",
SewerageApplicationDetails.getConnection().getShscNumber());
} else if (APPLICATION_STATUS_FINALAPPROVED.equalsIgnoreCase(SewerageApplicationDetails
.getStatus().getCode())) {
smsMsg = SmsBodyByCodeAndArgsWithType("msg.changeinclosetapproval.sms", SewerageApplicationDetails,
applicantName, SMSEMAILTYPE_CHANGEINCLOSETS_CONN_FINALAPPROVE);
body = EmailBodyByCodeAndArgsWithType("msg.changeinclosetapproval.email.body", SewerageApplicationDetails,
applicantName, SMSEMAILTYPE_CHANGEINCLOSETS_CONN_FINALAPPROVE);
subject = emailSubjectforEmailByCodeAndArgs("msg.changeinclosetapproval.email.subject",
SewerageApplicationDetails.getConnection().getShscNumber());
} else if (APPLICATION_STATUS_REJECTED.equalsIgnoreCase(SewerageApplicationDetails
.getStatus().getCode())) {
smsMsg = SmsBodyByCodeAndArgsWithType("msg.changeinclosetRejection.sms", SewerageApplicationDetails,
applicantName, SMSEMAILTYPE_CHANGEINCLOSETS_CONN_REJECT);
body = EmailBodyByCodeAndArgsWithType("msg.changeinclosetrejection.email.body", SewerageApplicationDetails,
applicantName, SMSEMAILTYPE_CHANGEINCLOSETS_CONN_REJECT);
subject = emailSubjectforEmailByCodeAndArgs("msg.changeinclosetrejection.email.subject",
SewerageApplicationDetails.getConnection().getShscNumber());
}
if (mobileNumber != null && smsMsg != null)
sendSMSOnSewerageConnection(mobileNumber, smsMsg);
if (email != null && body != null)
sendEmailOnSewerageConnection(email, body, subject);
}
public void getSmsAndEmailForCloseConnection(final SewerageApplicationDetails SewerageApplicationDetails,
final String email, final String mobileNumber, final String applicantName) {
String smsMsg = null;
String body = "";
String subject = "";
if (APPLICATION_STATUS_CREATED.equalsIgnoreCase(SewerageApplicationDetails
.getStatus().getCode())) {
smsMsg = SmsBodyByCodeAndArgsWithType("msg.closeofconnectioncreated.sms", SewerageApplicationDetails,
applicantName, SMSEMAILTYPE_CLOSESEWERAGE_CONN_CREATE);
body = EmailBodyByCodeAndArgsWithType("msg.closeofconnectioncreated.email.body", SewerageApplicationDetails,
applicantName, SMSEMAILTYPE_CLOSESEWERAGE_CONN_CREATE);
subject = emailSubjectforEmailByCodeAndArgs("msg.closeofconnectioncreated.email.subject",
SewerageApplicationDetails.getConnection().getShscNumber());
}
else if (APPLICATION_STATUS_CLOSERSANCTIONED.equalsIgnoreCase(SewerageApplicationDetails.getStatus()
.getCode())) {
smsMsg = SmsBodyByCodeAndArgsWithType("msg.closeofconnectioneeapproval.sms", SewerageApplicationDetails,
applicantName, SMSEMAILTYPE_CLOSESEWERAGE_CONN_EEAPPROVE);
body = EmailBodyByCodeAndArgsWithType("msg.closeofconnectioneeapproval.email.body",
SewerageApplicationDetails, applicantName, SMSEMAILTYPE_CLOSESEWERAGE_CONN_EEAPPROVE);
subject = emailSubjectforEmailByCodeAndArgs("msg.closeofconnectioneeapproval.email.subject",
SewerageApplicationDetails.getConnection().getShscNumber());
}
else if (APPLICATION_STATUS_REJECTED.equalsIgnoreCase(SewerageApplicationDetails
.getStatus().getCode())) {
smsMsg = SmsBodyByCodeAndArgsWithType("msg.closeofconnectionrejection.sms", SewerageApplicationDetails,
applicantName, SMSEMAILTYPE_CLOSESEWERAGE_CONN_REJECT);
body = EmailBodyByCodeAndArgsWithType("msg.closeofconnectionrejection.email.body", SewerageApplicationDetails,
applicantName, SMSEMAILTYPE_CLOSESEWERAGE_CONN_REJECT);
subject = emailSubjectforEmailByCodeAndArgs("msg.closeofconnectionrejection.email.subject",
SewerageApplicationDetails.getConnection().getShscNumber());
}
if (mobileNumber != null && smsMsg != null)
sendSMSOnSewerageConnection(mobileNumber, smsMsg);
if (email != null && body != null)
sendEmailOnSewerageConnection(email, body, subject);
}
public String smsAndEmailBodyByCodeAndArgs(final String code,
final SewerageApplicationDetails SewerageApplicationDetails, final String applicantName) {
final String smsMsg = stmsMessageSource.getMessage(code,
new String[] { applicantName, SewerageApplicationDetails.getApplicationNumber(), muncipalityName },
null);
return smsMsg;
}
/**
* .
*
* @param code
* @param SewerageApplicationDetails
* @param applicantName
* @param type
* @return EmailBody for All Connection based on Type
*/
public String EmailBodyByCodeAndArgsWithType(final String code,
final SewerageApplicationDetails sewerageApplicationDetails, final String applicantName, final String type) {
String emailBody = "";
if (type.equalsIgnoreCase(SMSEMAILTYPENEWCONNCREATE)
|| type.equalsIgnoreCase(SMSEMAILTYPE_CHANGEINCLOSETS_CONN) || type.equalsIgnoreCase(SMSEMAILTYPE_CLOSESEWERAGE_CONN_CREATE))
emailBody = stmsMessageSource.getMessage(code,
new String[] { applicantName, sewerageApplicationDetails.getApplicationNumber(), muncipalityName,
String.valueOf(getInspectionFeeForSewerage(sewerageApplicationDetails)),
sewerageApplicationDetails.getConnection().getShscNumber() }, null);
else if (type.equalsIgnoreCase(SMSEMAILTYPENEWCONNCREATEFORNOINSFEE)
|| type.equalsIgnoreCase(SMSEMAILTYPE_CHANGEINCLOSETS_CONN_NOINSFEE))
emailBody = stmsMessageSource.getMessage(code,
new String[] { applicantName, sewerageApplicationDetails.getApplicationNumber(), muncipalityName,
sewerageApplicationDetails.getConnection().getShscNumber() }, null);
else if (type.equalsIgnoreCase(SMSEMAILTYPENEWCONNDEEAPPROVE)) {
emailBody = stmsMessageSource.getMessage(
code,
new String[] { applicantName, sewerageApplicationDetails.getApplicationNumber(),
String.valueOf(sumOfSewerageApplnCharges(sewerageApplicationDetails)), muncipalityName,
sewerageApplicationDetails.getConnection().getShscNumber() }, null);
}
else if(type.equalsIgnoreCase(SMSEMAILTYPE_CHANGEINCLOSETS_CONN_DEEAPPROVE)){
emailBody = stmsMessageSource.getMessage(
code,
new String[] { applicantName, sewerageApplicationDetails.getApplicationNumber(),
String.valueOf(sumOfChangeClosetSewerageApplnCharges(sewerageApplicationDetails)), muncipalityName,
sewerageApplicationDetails.getConnection().getShscNumber() }, null);
}
else if(type.equalsIgnoreCase(SMSEMAILTYPE_CLOSESEWERAGE_CONN_EEAPPROVE)){
emailBody = stmsMessageSource.getMessage(
code,
new String[] { applicantName, sewerageApplicationDetails.getApplicationNumber(), muncipalityName,
sewerageApplicationDetails.getConnection().getShscNumber() }, null);
}
else if (type.equalsIgnoreCase(SMSEMAILTYPENEWCONNFEEPAID)
|| type.equalsIgnoreCase(SMSEMAILTYPE_CHANGEINCLOSETS_CONN_FEEPAID)) {
emailBody = stmsMessageSource.getMessage(code,
new String[] { applicantName,
String.valueOf(sumOfSewerageApplnCharges(sewerageApplicationDetails)),
sewerageApplicationDetails.getApplicationNumber(), muncipalityName,
sewerageApplicationDetails.getConnection().getShscNumber() }, null);
} else if (type.equalsIgnoreCase(SMSEMAILTYPENEWCONNFINALAPPROVE)
|| type.equalsIgnoreCase(SMSEMAILTYPE_CHANGEINCLOSETS_CONN_FINALAPPROVE)) {
emailBody = stmsMessageSource.getMessage(code,
new String[] { applicantName, sewerageApplicationDetails.getApplicationNumber(),
sewerageApplicationDetails.getConnection().getShscNumber(), muncipalityName }, null);
} else if (SMSEMAILTYPECLOSINGCONNAPPROVE.equalsIgnoreCase(type))
emailBody = stmsMessageSource.getMessage(code,
new String[] { applicantName, sewerageApplicationDetails.getApplicationNumber(), muncipalityName },
null);
else if (SMSEMAILTYPECLOSINGCONNSANCTIONED.equalsIgnoreCase(type)
|| type.equalsIgnoreCase(SMSEMAILTYPE_CHANGEINCLOSETS_CONN_SANCTIONED))
emailBody = stmsMessageSource.getMessage(code,
new String[] { applicantName, sewerageApplicationDetails.getApplicationNumber(), muncipalityName,
sewerageApplicationDetails.getConnection().getShscNumber() }, null);
else if (SMSEMAILTYPENEWCONNREJECT.equalsIgnoreCase(type)
|| type.equalsIgnoreCase(SMSEMAILTYPE_CHANGEINCLOSETS_CONN_REJECT) || type.equalsIgnoreCase(SMSEMAILTYPE_CLOSESEWERAGE_CONN_REJECT))
emailBody = stmsMessageSource.getMessage(code,
new String[] { applicantName, sewerageApplicationDetails.getApprovalComent(), muncipalityName,
sewerageApplicationDetails.getApplicationNumber(),
sewerageApplicationDetails.getConnection().getShscNumber() }, null);
return emailBody;
}
/**
* @param SewerageApplicationDetails
* @param type
* @return Sum Of Sewerage Application charges
*/
public BigDecimal sumOfSewerageApplnCharges(final SewerageApplicationDetails sewerageApplicationDetails) {
BigDecimal totalAmt = BigDecimal.ZERO;
for (SewerageConnectionFee sewerageConnFee : sewerageApplicationDetails.getConnectionFees()) {
if (!(sewerageConnFee.getFeesDetail().getDescription()).equals(INSPECTIONCHARGE)) {
totalAmt = totalAmt.add(BigDecimal.valueOf(sewerageConnFee.getAmount()));
}
}
return totalAmt;
}
/**
* @param SewerageAppliationDetails
* @param type
* @return Sum Of Sewerage Application charges including only the difference with first application
*/
public BigDecimal sumOfChangeClosetSewerageApplnCharges(final SewerageApplicationDetails sewerageApplicationDetails){
BigDecimal totalAmt=BigDecimal.ZERO;
BigDecimal oldDonationCharge = BigDecimal.ZERO;
BigDecimal oldSewerageTax = BigDecimal.ZERO;
BigDecimal currentDonationCharge=BigDecimal.ZERO;
BigDecimal currentSewerageTax=BigDecimal.ZERO;
BigDecimal currentEstimationCharges=BigDecimal.ZERO;
BigDecimal totalDonationCharge=BigDecimal.ZERO;
BigDecimal totalSewerageTax=BigDecimal.ZERO;
if (sewerageApplicationDetails.getCurrentDemand() != null) {
SewerageApplicationDetails oldApplicationDtl = sewerageApplicationDetailsService.findByConnection_ShscNumberAndIsActive(sewerageApplicationDetails.getConnection().getShscNumber());
if(oldApplicationDtl !=null){
for (final SewerageConnectionFee oldSewerageConnectionFee : oldApplicationDtl.getConnectionFees()) {
if (oldSewerageConnectionFee.getFeesDetail().getCode().equalsIgnoreCase(FEES_SEWERAGETAX_CODE))
oldSewerageTax=oldSewerageTax.add(BigDecimal.valueOf(oldSewerageConnectionFee.getAmount()));
if (oldSewerageConnectionFee.getFeesDetail().getCode().equalsIgnoreCase(FEES_DONATIONCHARGE_CODE))
oldDonationCharge=oldDonationCharge.add(BigDecimal.valueOf(oldSewerageConnectionFee.getAmount()));
}
}
for (final SewerageConnectionFee scf : sewerageApplicationDetails.getConnectionFees()) {
if (scf.getFeesDetail().getCode().equalsIgnoreCase(FEES_SEWERAGETAX_CODE))
currentSewerageTax=currentSewerageTax.add(BigDecimal.valueOf(scf.getAmount()));
if (scf.getFeesDetail().getCode().equalsIgnoreCase(FEES_DONATIONCHARGE_CODE))
currentDonationCharge=currentDonationCharge.add(BigDecimal.valueOf(scf.getAmount()));
if (scf.getFeesDetail().getCode().equalsIgnoreCase(FEES_ESTIMATIONCHARGES_CODE))
currentEstimationCharges = BigDecimal.valueOf(scf.getAmount());
}
if(currentDonationCharge.compareTo(oldDonationCharge)>0){
totalDonationCharge = currentDonationCharge.subtract(oldDonationCharge);
}
if(currentSewerageTax.compareTo(oldSewerageTax)>0){
totalSewerageTax = currentSewerageTax.subtract(oldSewerageTax);
}
totalAmt = totalSewerageTax.add(totalDonationCharge).add(currentEstimationCharges);
}
return totalAmt;
}
/**
* @param SewerageApplicationDetails
* @param type
* @return Sewerage Inspection Charges
*/
public BigDecimal getInspectionFeeForSewerage(final SewerageApplicationDetails sewerageApplicationDetails) {
BigDecimal totalAmt = BigDecimal.ZERO;
for (SewerageConnectionFee sewerageConnFee : sewerageApplicationDetails.getConnectionFees()) {
if ((sewerageConnFee.getFeesDetail().getDescription()).equals(INSPECTIONCHARGE)) {
totalAmt = totalAmt.add(BigDecimal.valueOf(sewerageConnFee.getAmount()));
}
}
return totalAmt;
}
/**
* @param code
* @param SewerageApplicationDetails
* @param applicantName
* @param type
*/
public String SmsBodyByCodeAndArgsWithType(final String code,
final SewerageApplicationDetails sewerageApplicationDetails, final String applicantName, final String type) {
String smsMsg = "";
if (type.equalsIgnoreCase(SMSEMAILTYPENEWCONNCREATE)
|| type.equalsIgnoreCase(SMSEMAILTYPE_CHANGEINCLOSETS_CONN) || type.equalsIgnoreCase(SMSEMAILTYPE_CLOSESEWERAGE_CONN_CREATE))
smsMsg = stmsMessageSource.getMessage(code,
new String[] { applicantName, sewerageApplicationDetails.getApplicationNumber(), muncipalityName,
String.valueOf(getInspectionFeeForSewerage(sewerageApplicationDetails)),
sewerageApplicationDetails.getConnection().getShscNumber() }, null);
else if (type.equalsIgnoreCase(SMSEMAILTYPENEWCONNCREATEFORNOINSFEE)
|| type.equalsIgnoreCase(SMSEMAILTYPE_CHANGEINCLOSETS_CONN_NOINSFEE))
smsMsg = stmsMessageSource.getMessage(code,
new String[] { applicantName, sewerageApplicationDetails.getApplicationNumber(), muncipalityName,
sewerageApplicationDetails.getConnection().getShscNumber() }, null);
if(type.equalsIgnoreCase(SMSEMAILTYPENEWCONNDEEAPPROVE)){
smsMsg = stmsMessageSource.getMessage(
code,
new String[] { applicantName, sewerageApplicationDetails.getApplicationNumber(),
String.valueOf(sumOfSewerageApplnCharges(sewerageApplicationDetails)), muncipalityName,
sewerageApplicationDetails.getConnection().getShscNumber() }, null);
}
else if (type.equalsIgnoreCase(SMSEMAILTYPE_CHANGEINCLOSETS_CONN_DEEAPPROVE)){
smsMsg = stmsMessageSource.getMessage(
code,
new String[] { applicantName, sewerageApplicationDetails.getApplicationNumber(),
String.valueOf(sumOfChangeClosetSewerageApplnCharges(sewerageApplicationDetails)), muncipalityName,
sewerageApplicationDetails.getConnection().getShscNumber() }, null);
}
else if(type.equalsIgnoreCase(SMSEMAILTYPE_CLOSESEWERAGE_CONN_EEAPPROVE)){
smsMsg = stmsMessageSource.getMessage(
code,
new String[] { applicantName, sewerageApplicationDetails.getApplicationNumber(),
muncipalityName, sewerageApplicationDetails.getConnection().getShscNumber() }, null);
}
else if (type.equalsIgnoreCase(SMSEMAILTYPENEWCONNFEEPAID)
|| type.equalsIgnoreCase(SMSEMAILTYPE_CHANGEINCLOSETS_CONN_FEEPAID)) {
smsMsg = stmsMessageSource.getMessage(code,
new String[] { applicantName,
String.valueOf(sumOfSewerageApplnCharges(sewerageApplicationDetails)),
sewerageApplicationDetails.getApplicationNumber(), muncipalityName,
sewerageApplicationDetails.getConnection().getShscNumber() }, null);
}
else if (SMSEMAILTYPECLOSINGCONNAPPROVE.equalsIgnoreCase(type)
|| type.equalsIgnoreCase(SMSEMAILTYPE_CHANGEINCLOSETS_CONN_FINALAPPROVE))
smsMsg = stmsMessageSource.getMessage(code,
new String[] { applicantName, sewerageApplicationDetails.getApplicationNumber(), muncipalityName,
sewerageApplicationDetails.getConnection().getShscNumber() }, null);
else if (type.equalsIgnoreCase(SMSEMAILTYPENEWCONNFINALAPPROVE)
|| type.equalsIgnoreCase(SMSEMAILTYPE_CHANGEINCLOSETS_CONN_FINALAPPROVE))
smsMsg = stmsMessageSource.getMessage(code,
new String[] { applicantName, sewerageApplicationDetails.getApplicationNumber(),
sewerageApplicationDetails.getConnection().getShscNumber(), muncipalityName }, null);
else if (SMSEMAILTYPECLOSINGCONNSANCTIONED.equalsIgnoreCase(type)
|| type.equalsIgnoreCase(SMSEMAILTYPE_CHANGEINCLOSETS_CONN_SANCTIONED))
smsMsg = stmsMessageSource.getMessage(code,
new String[] { applicantName, sewerageApplicationDetails.getApplicationNumber(), muncipalityName,
sewerageApplicationDetails.getConnection().getShscNumber() }, null);
else if (SMSEMAILTYPENEWCONNREJECT.equalsIgnoreCase(type)
|| type.equalsIgnoreCase(SMSEMAILTYPE_CHANGEINCLOSETS_CONN_REJECT) || type.equalsIgnoreCase(SMSEMAILTYPE_CLOSESEWERAGE_CONN_REJECT))
smsMsg = stmsMessageSource.getMessage(code,
new String[] { applicantName, sewerageApplicationDetails.getApprovalComent(), muncipalityName,
sewerageApplicationDetails.getApplicationNumber(),
sewerageApplicationDetails.getConnection().getShscNumber() }, null);
return smsMsg;
}
public Boolean isSmsEnabled() {
final AppConfigValues appConfigValue = appConfigValuesService.getConfigValuesByModuleAndKey(
MODULE_NAME, SENDSMSFORSEWERAGETAX).get(0);
return "YES".equalsIgnoreCase(appConfigValue.getValue());
}
public Boolean isEmailEnabled() {
final AppConfigValues appConfigValue = appConfigValuesService.getConfigValuesByModuleAndKey(
MODULE_NAME, SENDEMAILFORSEWERAGETAX).get(0);
return "YES".equalsIgnoreCase(appConfigValue.getValue());
}
public String smsAndEmailBodyByCodeAndArgsForRejection(final String code, final String approvalComment,
final String applicantName) {
final Locale locale = LocaleContextHolder.getLocale();
final String smsMsg = stmsMessageSource.getMessage(code, new String[] { applicantName, approvalComment,
muncipalityName }, locale);
return smsMsg;
}
public String emailBodyforApprovalEmailByCodeAndArgs(final String code,
final SewerageApplicationDetails sewerageApplicationDetails, final String applicantName) {
final Locale locale = LocaleContextHolder.getLocale();
final String smsMsg = stmsMessageSource.getMessage(code,
new String[] { applicantName, sewerageApplicationDetails.getApplicationNumber(),
sewerageApplicationDetails.getConnection().getShscNumber(), muncipalityName }, locale);
return smsMsg;
}
public String emailSubjectforEmailByCodeAndArgs(final String code, final String applicationNumber) {
final Locale locale = LocaleContextHolder.getLocale();
final String emailSubject = stmsMessageSource.getMessage(code, new String[] { applicationNumber }, locale);
return emailSubject;
}
public void sendSMSOnSewerageConnection(final String mobileNumber, final String smsBody) {
messagingService.sendSMS(mobileNumber, smsBody);
}
public void sendEmailOnSewerageConnection(final String email, final String emailBody, final String emailSubject) {
messagingService.sendEmail(email, emailSubject, emailBody);
}
}