maia_modificado/.svn/pristine/33/33c6cb26614619093f46ce26df7...

146 lines
5.9 KiB
Plaintext
Executable File

package com.fp.general.rates.rules;
import java.sql.Date;
import java.util.List;
import com.fp.common.helper.Constant;
import com.fp.dto.rules.TransactionRule;
import com.fp.dto.save.SaveRequest;
import com.fp.general.exception.GeneralException;
import com.fp.persistence.commondb.PersistenceHelper;
import com.fp.persistence.commondb.helper.APPDates;
import com.fp.persistence.pgeneral.date.TgeneAccountingDateBranch;
import com.fp.persistence.pgeneral.product.rate.TgeneBaseRateDetail;
@SuppressWarnings("serial")
public class ValidateRates extends TransactionRule {
@Override
public SaveRequest normalProcess(SaveRequest pSaveRequest) throws Exception {
String currencycode = pSaveRequest.get("currencycode").toString();
String baseratecatalog = pSaveRequest.get("baseratecatalog").toString();
String baseratecatalogcode = pSaveRequest.get("baseratecatalogcode").toString();
Integer company = pSaveRequest.getCompany();
List<Object> lRatesMod = pSaveRequest.getSaveBeanModifiedRecords("TGENEBASERATEDETAIL");
List<Object> lRatesDel = pSaveRequest.getSaveBeanDeletedRecords("TGENEBASERATEDETAIL");
List<TgeneBaseRateDetail> lRatesDB = TgeneBaseRateDetail.find(PersistenceHelper.getEntityManager(), currencycode, baseratecatalog,
baseratecatalogcode);
TgeneAccountingDateBranch d = com.fp.persistence.commondb.db.DataHelper.getInstance().getTgeneAccountingDateBranch(company, 0);
this.validateDeleted(lRatesDel, lRatesDB, d.getWorkingdate());
this.validateModified(lRatesMod, lRatesDB, d.getWorkingdate());
List<TgeneBaseRateDetail> lRatesFinal = Constant.getFinalList(lRatesDB, Constant.convertList(lRatesMod, TgeneBaseRateDetail.class),
Constant.convertList(lRatesDel, TgeneBaseRateDetail.class));
// Validar traslape de fechas
for (int i = 0; i < lRatesFinal.size(); i++) {
TgeneBaseRateDetail ratedetail = lRatesFinal.get(i);
this.validateOverlap(ratedetail, i + 1, lRatesFinal);
}
return pSaveRequest;
}
/**
* Valida que no se borren registros vigentes y pasados
*
* @param lRatesDel
* @param lRatesDB
* @param wdate
* @throws Exception
*/
private void validateDeleted(List<Object> lRatesDel, List<TgeneBaseRateDetail> lRatesDB, Date wdate) throws Exception {
if (lRatesDel != null) {
for (Object obj : lRatesDel) {
TgeneBaseRateDetail ratedetaildel = (TgeneBaseRateDetail) obj;
TgeneBaseRateDetail ratedetailbase = Constant.isInList(lRatesDB, ratedetaildel);
if (ratedetailbase != null) {
int result = this.getDateRange(ratedetailbase.getValidityrate(), ratedetailbase.getExpirationdate(), wdate);
if (result <= 0) {
throw new GeneralException("GENE-0045", "NO SE PUEDE ELIMINAR TASAS CON FECHA VIGENTE O VENCIDA");
}
}
}
}
}
/**
* Valida que solo se ingresen tasas con fechas futuras
*
* @param lRatesMod
* @param lRatesDB
* @param wdate
* @throws Exception
*/
private void validateModified(List<Object> lRatesMod, List<TgeneBaseRateDetail> lRatesDB, Date wdate) throws Exception {
if (lRatesMod != null) {
for (Object obj : lRatesMod) {
TgeneBaseRateDetail ratedetailmod = (TgeneBaseRateDetail) obj;
TgeneBaseRateDetail ratedetailbase = Constant.isInList(lRatesDB, ratedetailmod);
if ((ratedetailbase == null) || Constant.ifYes((String) ratedetailmod.get("isnew"))) {
int result = this.getDateRange(ratedetailmod.getValidityrate(), ratedetailmod.getExpirationdate(), wdate);
if (result <= 0) {
throw new GeneralException("GENE-0046", "SOLO SE PUEDE INGRESAR TASAS CON FECHA FUTURAS");
}
}
}
}
}
/**
* Valida que no se translapen las fechas de las tasas
*
* @param ratedetail
* @param searchIndex
* @param lRatesFinal
* @return
* @throws Exception
*/
private void validateOverlap(TgeneBaseRateDetail ratedetail, int searchIndex, List<TgeneBaseRateDetail> lRatesFinal) throws Exception {
for (int i = searchIndex; i < lRatesFinal.size(); i++) {
TgeneBaseRateDetail ratedetailfinal = lRatesFinal.get(i);
if (ratedetail.equalsWithoutRateSequence(ratedetailfinal)) {
int result = this.getDateRange(ratedetail.getValidityrate(), ratedetail.getExpirationdate(), ratedetailfinal.getValidityrate());
if (result == 0) {
throw new GeneralException("GENE-0047", "EXISTE CRUCE DE FECHAS");
}
}
}
}
/**
* Retorna 0 si el parametro actualdate esta dentro del rango, 1 si el rango es > que actualdate, -1 si el rango es
* menor que actualdate
*
* @param initdate
* @param enddate
* @param actualdate
* @return
* @throws Exception
*/
private int getDateRange(Date initdate, Date enddate, Date actualdate) throws Exception {
APPDates init = new APPDates(initdate);
APPDates end = new APPDates(enddate);
APPDates now = new APPDates(actualdate);
if (init.compareTo(now) > 0) {
return 1;
} else if ((now.compareTo(init) >= 0) && (now.compareTo(end) <= 0)) {
return 0;
}
// else if (end.compareTo(now) < 0) {
// return -1;
// }
return -1;
}
@Override
public SaveRequest reverseProcess(SaveRequest pSaveRequest) throws Exception {
return pSaveRequest;
}
}