133 lines
4.7 KiB
Plaintext
Executable File
133 lines
4.7 KiB
Plaintext
Executable File
package com.fp.general.rules.save;
|
|
|
|
import java.sql.Date;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.Calendar;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
import com.fp.common.helper.CalculationBase;
|
|
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.db.DataHelper;
|
|
import com.fp.persistence.commondb.helper.APPDates;
|
|
import com.fp.persistence.pgeneral.date.TgeneAccountingDate;
|
|
import com.fp.persistence.pgeneral.date.TgeneAccountingDateBranch;
|
|
import com.fp.persistence.pgeneral.date.TgeneAccountingDateKey;
|
|
|
|
/**
|
|
* Calse que se encarga de cambiar la fecha contable de la aplicacion.
|
|
* @author Jorge Vaca.
|
|
* @version 2.1
|
|
*
|
|
*/
|
|
public class ChangeAccountingDate extends TransactionRule{
|
|
|
|
/* (non-Javadoc)
|
|
* @see com.fp.dto.rules.TransactionRule#normalProcess(com.fp.dto.save.SaveRequest)
|
|
*/
|
|
public SaveRequest normalProcess(SaveRequest pSaveRequest) throws Exception {
|
|
TgeneAccountingDateBranch ad = DataHelper.getInstance().getTgeneAccountingDateBranch(pSaveRequest.getCompany(), 0);
|
|
//Fecha contable anterior
|
|
this.fillPrevious(ad);
|
|
APPDates d = new APPDates(ad.getRealdate(),CalculationBase.B365365);
|
|
boolean aux = true;
|
|
while (aux) {
|
|
aux = this.fillAccountingdate(ad, pSaveRequest.getCompany(), d);
|
|
}
|
|
//Proxima Fecha contable
|
|
this.fillNext(ad, d, pSaveRequest.getCompany());
|
|
PersistenceHelper.saveOrUpdate(ad);
|
|
this.fillResponse(pSaveRequest, ad);
|
|
return pSaveRequest;
|
|
}
|
|
|
|
/**
|
|
* Fija la fecha contable anterior.
|
|
* @param ad Objeto que contiene los datos actuales de la fecha contable.
|
|
* @throws Exception
|
|
*/
|
|
private void fillPrevious(TgeneAccountingDateBranch ad) throws Exception {
|
|
if(ad.getRealdate().compareTo(ad.getAccountingdate()) < 0){
|
|
ad.setPreviousaccountingdate(ad.getPreviousaccountingdate());
|
|
}else{
|
|
ad.setPreviousaccountingdate(ad.getAccountingdate());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Fija la proxima fecha cobtable.
|
|
* @param ad Objeto que contiene la proxima fecha contable.
|
|
* @param d Rerefencia al objeto AppDates
|
|
* @param pCompany Codigo de compania.
|
|
* @throws Exception
|
|
*/
|
|
private void fillNext(TgeneAccountingDateBranch ad,APPDates d,Integer pCompany) throws Exception {
|
|
d = new APPDates(ad.getAccountingdate(),CalculationBase.B365365);
|
|
d.addField(Calendar.DAY_OF_YEAR, 1);
|
|
TgeneAccountingDate cal = this.getTgeneAccountingDate(0, pCompany, d.getDate());
|
|
ad.setNextaccountingdate(cal.getAccountingdate());
|
|
}
|
|
|
|
/**
|
|
* Metodo que fija la fecha contable.
|
|
* @param ad Objeto que contiene la proxima fecha contable.
|
|
* @param pCompany Codigo de compania.
|
|
* @param d Rerefencia al objeto AppDates
|
|
* @return boolean
|
|
* @throws Exception
|
|
*/
|
|
private boolean fillAccountingdate(TgeneAccountingDateBranch ad,Integer pCompany,APPDates d ) throws Exception {
|
|
boolean aux = true;
|
|
d.addField(Calendar.DAY_OF_YEAR, 1);
|
|
TgeneAccountingDate cal = this.getTgeneAccountingDate(0, pCompany, d.getDate());
|
|
ad.setAccountingdate(cal.getAccountingdate());
|
|
ad.setWorkingdate(cal.getWorkingdate());
|
|
ad.setRealdate(cal.getPk().getRealdate());
|
|
if(ad.getWorkingdate().compareTo(ad.getAccountingdate()) == 0 ){
|
|
if(ad.getWorkingdate().compareTo(ad.getRealdate()) == 0){
|
|
aux = false;
|
|
}
|
|
}else{
|
|
aux = false;
|
|
}
|
|
//
|
|
return aux;
|
|
}
|
|
|
|
private TgeneAccountingDate getTgeneAccountingDate(Integer pBranch, Integer pCompany,Date pDate) throws Exception {
|
|
TgeneAccountingDateKey key = new TgeneAccountingDateKey(0,pCompany,pDate);
|
|
TgeneAccountingDate cal = TgeneAccountingDate.find(PersistenceHelper.getEntityManager(), key);
|
|
if(cal == null){
|
|
SimpleDateFormat fd = new SimpleDateFormat("dd-MM-yyyy");
|
|
throw new GeneralException("GENE-0024","CALENDARIO NO DEFINIDO EN TGENEACCOUNTINGDATE PARA LA FECHA: {0} ", fd.format(pDate));
|
|
}
|
|
return cal;
|
|
}
|
|
|
|
/**
|
|
* Arma la respuesta con las fechas resultanrtes.
|
|
* @param pSaveRequest Datos del request original.
|
|
* @param ad Objeto que contiene la proxima fecha contable.
|
|
* @throws Exception
|
|
*/
|
|
private void fillResponse(SaveRequest pSaveRequest,TgeneAccountingDateBranch ad) throws Exception {
|
|
Map<String, Date> m = new HashMap<String, Date>();
|
|
m.put("realdate", ad.getRealdate());
|
|
m.put("workdate", ad.getWorkingdate());
|
|
m.put("accodate", ad.getAccountingdate());
|
|
pSaveRequest.getResponse().put("NEXTDATE", m);
|
|
}
|
|
/* (non-Javadoc)
|
|
* @see com.fp.dto.rules.TransactionRule#reverseProcess(com.fp.dto.save.SaveRequest)
|
|
*/
|
|
public SaveRequest reverseProcess(SaveRequest pSaveRequest) throws Exception {
|
|
// No tiene reverso
|
|
return pSaveRequest;
|
|
}
|
|
|
|
|
|
}
|