Skip to content

Commit

Permalink
Modifica per gestione fine anno su notifiche fatture attive che gener…
Browse files Browse the repository at this point in the history
…ano note di credito
  • Loading branch information
gianfranco.gasparro committed Jan 14, 2016
1 parent 9193de8 commit 8626eef
Show file tree
Hide file tree
Showing 8 changed files with 201 additions and 16 deletions.
Expand Up @@ -1625,6 +1625,16 @@ public boolean isRibaltato(it.cnr.jada.UserContext userContext, CdrBulk cdr) thr
throw handleException(e);
}
}
public boolean isRibaltato(it.cnr.jada.UserContext userContext, Unita_organizzativaBulk uo, Integer esercizio) throws ComponentException
{
try {
uo = (Unita_organizzativaBulk)getHome(userContext, Unita_organizzativaBulk.class, null, getFetchPolicyName("find")).findByPrimaryKey(uo);
return ((Parametri_cdsHome)getHome(userContext,Parametri_cdsBulk.class)).isRibaltato(userContext, uo.getCd_proprio_unita(), esercizio);
}
catch(Throwable e) {
throw handleException(e);
}
}
public boolean isRibaltato(it.cnr.jada.UserContext userContext, CdsBulk cds) throws ComponentException
{
try {
Expand All @@ -1634,6 +1644,15 @@ public boolean isRibaltato(it.cnr.jada.UserContext userContext, CdsBulk cds) thr
throw handleException(e);
}
}
public boolean isRibaltato(it.cnr.jada.UserContext userContext, CdsBulk cds, Integer esercizio) throws ComponentException
{
try {
return ((Parametri_cdsHome)getHome(userContext,Parametri_cdsBulk.class)).isRibaltato(userContext, cds.getCd_unita_organizzativa(), esercizio);
}
catch(Throwable e) {
throw handleException(e);
}
}
/**
* Ritorna true se esistono righe con disponibilità sfondata su V_SITUAZIONE_LINEE_COMP_RES
*
Expand Down
Expand Up @@ -38,6 +38,8 @@ public interface RicercaDocContComponentSession extends it.cnr.jada.ejb.RicercaC
boolean isRibaltato(it.cnr.jada.UserContext userContext) throws it.cnr.jada.comp.ComponentException,java.rmi.RemoteException;
boolean isRibaltato(it.cnr.jada.UserContext param0, it.cnr.contab.config00.sto.bulk.CdrBulk param1) throws it.cnr.jada.comp.ComponentException,java.rmi.RemoteException;
boolean isRibaltato(it.cnr.jada.UserContext param0, it.cnr.contab.config00.sto.bulk.CdsBulk param1) throws it.cnr.jada.comp.ComponentException,java.rmi.RemoteException;
boolean isRibaltato(it.cnr.jada.UserContext param0, it.cnr.contab.config00.sto.bulk.CdsBulk param1, Integer esercizio) throws it.cnr.jada.comp.ComponentException,java.rmi.RemoteException;
boolean isRibaltato(it.cnr.jada.UserContext param0, it.cnr.contab.config00.sto.bulk.Unita_organizzativaBulk param1, Integer esercizio) throws it.cnr.jada.comp.ComponentException,java.rmi.RemoteException;
boolean isSfondataDispCdS(it.cnr.jada.UserContext userContext) throws it.cnr.jada.comp.ComponentException,java.rmi.RemoteException;
boolean isRicosResiduiChiusa(it.cnr.jada.UserContext userContext) throws it.cnr.jada.comp.ComponentException,java.rmi.RemoteException;
void callRibaltaDispImproprie(UserContext userContext) throws ComponentException,java.rmi.RemoteException;
Expand Down
Expand Up @@ -476,6 +476,42 @@ public boolean isRibaltato(it.cnr.jada.UserContext param0, it.cnr.contab.config0
throw uncaughtError(param0,componentObj,e);
}
}
public boolean isRibaltato(it.cnr.jada.UserContext param0, it.cnr.contab.config00.sto.bulk.CdsBulk param1, Integer esercizio) throws it.cnr.jada.comp.ComponentException,javax.ejb.EJBException {
pre_component_invocation(param0,componentObj);
try {
boolean result = ((RicercaDocContComponent)componentObj).isRibaltato(param0, param1, esercizio);
component_invocation_succes(param0,componentObj);
return result;
} catch(it.cnr.jada.comp.NoRollbackException e) {
component_invocation_succes(param0,componentObj);
throw e;
} catch(it.cnr.jada.comp.ComponentException e) {
component_invocation_failure(param0,componentObj);
throw e;
} catch(RuntimeException e) {
throw uncaughtRuntimeException(param0,componentObj,e);
} catch(Error e) {
throw uncaughtError(param0,componentObj,e);
}
}
public boolean isRibaltato(it.cnr.jada.UserContext param0, it.cnr.contab.config00.sto.bulk.Unita_organizzativaBulk param1, Integer esercizio) throws it.cnr.jada.comp.ComponentException,javax.ejb.EJBException {
pre_component_invocation(param0,componentObj);
try {
boolean result = ((RicercaDocContComponent)componentObj).isRibaltato(param0, param1, esercizio);
component_invocation_succes(param0,componentObj);
return result;
} catch(it.cnr.jada.comp.NoRollbackException e) {
component_invocation_succes(param0,componentObj);
throw e;
} catch(it.cnr.jada.comp.ComponentException e) {
component_invocation_failure(param0,componentObj);
throw e;
} catch(RuntimeException e) {
throw uncaughtRuntimeException(param0,componentObj,e);
} catch(Error e) {
throw uncaughtError(param0,componentObj,e);
}
}
public boolean isSfondataDispCdS(it.cnr.jada.UserContext param0) throws it.cnr.jada.comp.ComponentException,javax.ejb.EJBException {
pre_component_invocation(param0,componentObj);
try {
Expand Down
Expand Up @@ -498,6 +498,38 @@ public boolean isRibaltato(it.cnr.jada.UserContext param0, it.cnr.contab.config0
}
}
}
public boolean isRibaltato(it.cnr.jada.UserContext param0, it.cnr.contab.config00.sto.bulk.CdsBulk param1, Integer esercizio) throws RemoteException,it.cnr.jada.comp.ComponentException {
try {
return ((Boolean)invoke("isRibaltato",new Object[] {
param0, param1, esercizio})).booleanValue();
} catch(java.rmi.RemoteException e) {
throw e;
} catch(java.lang.reflect.InvocationTargetException e) {
try {
throw e.getTargetException();
} catch(it.cnr.jada.comp.ComponentException ex) {
throw ex;
} catch(Throwable ex) {
throw new java.rmi.RemoteException("Uncaugth exception",ex);
}
}
}
public boolean isRibaltato(it.cnr.jada.UserContext param0, it.cnr.contab.config00.sto.bulk.Unita_organizzativaBulk param1, Integer esercizio) throws RemoteException,it.cnr.jada.comp.ComponentException {
try {
return ((Boolean)invoke("isRibaltato",new Object[] {
param0, param1, esercizio})).booleanValue();
} catch(java.rmi.RemoteException e) {
throw e;
} catch(java.lang.reflect.InvocationTargetException e) {
try {
throw e.getTargetException();
} catch(it.cnr.jada.comp.ComponentException ex) {
throw ex;
} catch(Throwable ex) {
throw new java.rmi.RemoteException("Uncaugth exception",ex);
}
}
}
public boolean isSfondataDispCdS(it.cnr.jada.UserContext param0) throws RemoteException,it.cnr.jada.comp.ComponentException {
try {
return ((Boolean)invoke("isSfondataDispCdS",new Object[] {
Expand Down
Expand Up @@ -64,10 +64,20 @@ public boolean isRibaltato(it.cnr.jada.UserContext userContext) throws Persisten
public boolean isRibaltato(it.cnr.jada.UserContext userContext, String cd_cds) throws PersistencyException
{
Parametri_cdsBulk parametri = (Parametri_cdsBulk)findByPrimaryKey( new Parametri_cdsBulk(cd_cds,CNRUserContext.getEsercizio(userContext)));
return isRibaltato(parametri);

}
private boolean isRibaltato(Parametri_cdsBulk parametri) {
if (parametri == null)
return true;
else
return parametri.getFl_ribaltato().booleanValue();
return parametri.getFl_ribaltato().booleanValue();
}

public boolean isRibaltato(it.cnr.jada.UserContext userContext, String cd_cds, Integer esercizio) throws PersistencyException
{
Parametri_cdsBulk parametri = (Parametri_cdsBulk)findByPrimaryKey( new Parametri_cdsBulk(cd_cds,esercizio));
return isRibaltato(parametri);

}

Expand Down
Expand Up @@ -967,6 +967,10 @@ private Nota_di_credito_attivaBulk basicStornaDettaglio(
//}
} else accertamentoSelezionato = caricaScadenzaAccertamentoPer(context, accertamentoSelezionato);

if (accertamentoSelezionato.getEsercizio() != null && accertamentoSelezionato.getEsercizio().compareTo(ndC.getEsercizio()) != 0){
throw new it.cnr.jada.comp.ApplicationException("Per la riga di fattura "+ rigaAssociata.getCd_cds()+"/"+rigaAssociata.getEsercizio()+"/"+rigaAssociata.getPg_fattura_attiva()+"/"+rigaAssociata.getProgressivo_riga()+
" non è possibile creare la nota di credito in quanto l'esercizio dell'accertamento "+accertamentoSelezionato.getCd_cds()+"/"+accertamentoSelezionato.getEsercizio()+"/"+accertamentoSelezionato.getPg_accertamento()+" non corrisponde all'esercizio della nota di credito");
}

rigaNdC.setAccertamento_scadenzario(accertamentoSelezionato);
rigaNdC.setRiga_fattura_associata(rigaAssociata);
Expand Down Expand Up @@ -1004,6 +1008,10 @@ private Nota_di_credito_attivaBulk basicStornaDettaglio(
else scadenza = caricaScadenzaObbligazionePer(context, scadenza);
} else scadenza = caricaScadenzaObbligazionePer(context, scadenza);

if (scadenza.getEsercizio() != null && scadenza.getEsercizio().compareTo(ndC.getEsercizio()) != 0){
throw new it.cnr.jada.comp.ApplicationException("Non è possibile creare la nota di credito in quanto l'esercizio dell'obbligazione "+scadenza.getCd_cds()+"/"+scadenza.getEsercizio()+"/"+scadenza.getPg_obbligazione()+" non corrisponde all'esercizio della nota di credito");
}

rigaNdC.setObbligazione_scadenzario(scadenza);
rigaNdC.setRiga_fattura_associata(rigaNdC.getRiga_fattura_associata());
rigaNdC.setStato_cofi(rigaNdC.STATO_CONTABILIZZATO);
Expand Down
@@ -1,5 +1,6 @@
package it.cnr.contab.docamm00.service;

import it.cnr.contab.chiusura00.ejb.RicercaDocContComponentSession;
import it.cnr.contab.config00.sto.bulk.UnitaOrganizzativaPecBulk;
import it.cnr.contab.docamm00.ejb.DocAmmFatturazioneElettronicaComponentSession;
import it.cnr.contab.docamm00.ejb.FatturaElettronicaPassivaComponentSession;
Expand All @@ -13,6 +14,7 @@
import it.cnr.contab.util.StringEncrypter.EncryptionException;
import it.cnr.jada.UserContext;
import it.cnr.jada.comp.ComponentException;
import it.cnr.jada.util.DateUtils;
import it.cnr.jada.util.SendMail;
import it.cnr.jada.util.mail.SimplePECMail;
import it.gov.fatturapa.sdi.messaggi.v1.MetadatiInvioFileType;
Expand Down Expand Up @@ -74,6 +76,7 @@ public class FatturaPassivaElettronicaService implements InitializingBean{
private transient final static Logger logger = LoggerFactory.getLogger(FatturaPassivaElettronicaService.class);

private FatturaElettronicaPassivaComponentSession fatturaElettronicaPassivaComponentSession;
private RicercaDocContComponentSession ricercaDocContComponentSession;
private DocAmmFatturazioneElettronicaComponentSession docAmmFatturazioneElettronicaComponentSession;
private RicezioneFatturePA ricezioneFattureService;
private TrasmissioneFatturePA trasmissioneFattureService;
Expand All @@ -89,6 +92,13 @@ public class FatturaPassivaElettronicaService implements InitializingBean{
pecSDISubjectNotificaEsitoTerm, pecSDISubjectFatturaAttivaDecorrenzaTerminiTerm, pecSDISubjectFatturaAttivaAttestazioneTrasmissioneFatturaTerm, pecHostAddressReturn;
private List<String> pecScanFolderName, pecScanReceiptFolderName, pecHostAddress;

public RicercaDocContComponentSession getRicercaDocContComponentSession() {
return ricercaDocContComponentSession;
}
public void setRicercaDocContComponentSession(
RicercaDocContComponentSession ricercaDocContComponentSession) {
this.ricercaDocContComponentSession = ricercaDocContComponentSession;
}
public void setPecSDISubjectFatturaAttivaRicevutaConsegnaTerm(
String pecSDISubjectFatturaAttivaRicevutaConsegnaTerm) {
this.pecSDISubjectFatturaAttivaRicevutaConsegnaTerm = pecSDISubjectFatturaAttivaRicevutaConsegnaTerm;
Expand Down Expand Up @@ -195,9 +205,12 @@ public void execute() {
} else {
logger.info("PEC SCAN for ricevi Fatture started at: "+new Date());
for (UnitaOrganizzativaPecBulk unitaOrganizzativaPecBulk : fatturaElettronicaPassivaComponentSession.scanPECProtocollo(userContext)) {
Calendar today = Calendar.getInstance();
today.setTime(new Date());
pecScan(
unitaOrganizzativaPecBulk.getEmailPecProtocollo(),
unitaOrganizzativaPecBulk.getCodPecProtocollo());
unitaOrganizzativaPecBulk.getCodPecProtocollo(),
ricercaDocContComponentSession.isRibaltato(userContext, unitaOrganizzativaPecBulk.getUnitaOrganizzativa(), today.get(Calendar.YEAR) - 1));
}
logger.info("PEC SCAN for ricevi Fatture finished at: "+new Date());
}
Expand Down Expand Up @@ -325,7 +338,7 @@ private void notificaFatturaPassivaScartoEsito(Message message, String userName)


@SuppressWarnings("unchecked")
public void pecScan(String userName, String password) throws ComponentException {
public void pecScan(String userName, String password, Boolean isRibaltato) throws ComponentException {
logger.info("PEC SCAN for ricevi Fatture email: "+userName + "pwd :" +password);
Properties props = System.getProperties();
props.putAll(pecMailConf);
Expand All @@ -340,7 +353,7 @@ public void pecScan(String userName, String password) throws ComponentException
final Store store = session.getStore(urlName);
store.connect(userName, password);
searchMailFromPec(userName, store);
searchMailFromSdi(userName, store);
searchMailFromSdi(userName, store, isRibaltato);
searchMailFromReturn(userName, store);
store.close();
} catch (AuthenticationFailedException e) {
Expand All @@ -365,7 +378,7 @@ private void searchMailFromPec(String userName, final Store store)
}
}
}
private void searchMailFromSdi(String userName, final Store store)
private void searchMailFromSdi(String userName, final Store store, boolean isRibaltato)
throws MessagingException {
List<Folder> folders = new ArrayList<Folder>();
for (String folderName : pecScanFolderName) {
Expand All @@ -374,7 +387,7 @@ private void searchMailFromSdi(String userName, final Store store)
for (Folder folder : folders) {
if (folder.exists()) {
folder.open(Folder.READ_WRITE);
processingMailFromSdi(folder, userName);
processingMailFromSdi(folder, userName, isRibaltato);
folder.close(true);
}
}
Expand All @@ -397,9 +410,23 @@ private void searchMailFromReturn(String userName, final Store store)
}
}
}

private Boolean isDateOfFirstMonth(boolean isRibaltato){
Calendar today = Calendar.getInstance();
today.setTime(new Date());
Calendar lastDayOfFirstMonth = Calendar.getInstance();
lastDayOfFirstMonth.set(today.get(Calendar.YEAR), Calendar.JANUARY, 31);

private void processingMailFromSdi(Folder folder, String userName) throws MessagingException{
List<SearchTerm> terms = createTermsForSearchSdi();
if (!isRibaltato || today.after(lastDayOfFirstMonth)){
return true;
}
return false;
}

private void processingMailFromSdi(Folder folder, String userName, boolean isRibaltato) throws MessagingException{
recoveryNotifier(folder, userName, isRibaltato);

List<SearchTerm> terms = createTermsForSearchSdi(false);
Message messages[] = folder.search(new AndTerm(terms.toArray(new SearchTerm[terms.size()])));
logger.info("Recuperati " + messages.length +" messaggi SDI dalla casella PEC:" + userName + " nella folder:" + folder.getFullName());
for (int i = 0; i < messages.length; i++) {
Expand All @@ -412,15 +439,15 @@ private void processingMailFromSdi(Folder folder, String userName) throws Messag
notificaFatturaPassivaScartoEsito(message, userName);
} else if (message.getSubject().contains(pecSDISubjectFatturaAttivaRicevutaConsegnaTerm)){
notificaFatturaAttivaRicevutaConsegna(message, userName);
} else if (message.getSubject().contains(pecSDISubjectNotificaEsitoTerm)){
} else if (message.getSubject().contains(pecSDISubjectNotificaEsitoTerm) && isRibaltato){
notificaFatturaAttivaEsito(message);
} else if (message.getSubject().contains(pecSDISubjectFatturaAttivaNotificaScartoTerm)){
} else if (message.getSubject().contains(pecSDISubjectFatturaAttivaNotificaScartoTerm) && isRibaltato){
notificaFatturaAttivaScarto(message);
} else if (message.getSubject().contains(pecSDISubjectFatturaAttivaMancataConsegnaTerm)){
notificaFatturaAttivaMancataConsegna(message);
} else if (message.getSubject().contains(pecSDISubjectFatturaAttivaDecorrenzaTerminiTerm)){
notificaFatturaAttivaDecorrenzaTermini(message);
} else if (message.getSubject().contains(pecSDISubjectFatturaAttivaAttestazioneTrasmissioneFatturaTerm)){
} else if (message.getSubject().contains(pecSDISubjectFatturaAttivaAttestazioneTrasmissioneFatturaTerm) && isRibaltato){
notificaFatturaAttivaAvvenutaTrasmissioneNonRecapitata(message);
} else {
logger.warn("Fatture Elettroniche: Attive: Oggetto dell'e-mail non gestito." + message.getSubject());
Expand All @@ -436,6 +463,43 @@ private void processingMailFromSdi(Folder folder, String userName) throws Messag
}
}

private Boolean isDateForRecoveryNotifier(boolean isRibaltato){
Calendar today = Calendar.getInstance();
today.setTime(new Date());
if (isRibaltato && today.get(Calendar.MONTH) == Calendar.JANUARY){
return true;
}
return false;
}

private void recoveryNotifier(Folder folder, String userName,
boolean isRibaltato) throws MessagingException {
if (isDateForRecoveryNotifier(isRibaltato)){
List<SearchTerm> newTerms = createTermsForSearchSdi(true);
Message newMessages[] = folder.search(new AndTerm(newTerms.toArray(new SearchTerm[newTerms.size()])));
logger.info("Recuperati " + newMessages.length +" messaggi SDI dalla casella PEC:" + userName + " nella folder:" + folder.getFullName());
for (int i = 0; i < newMessages.length; i++) {
try {
Message message = newMessages[i];
if (message.getSubject() != null){
if (message.getSubject().contains(pecSDISubjectNotificaEsitoTerm)){
notificaFatturaAttivaEsito(message);
} else if (message.getSubject().contains(pecSDISubjectFatturaAttivaNotificaScartoTerm)){
notificaFatturaAttivaScarto(message);
} else if (message.getSubject().contains(pecSDISubjectFatturaAttivaAttestazioneTrasmissioneFatturaTerm)){
notificaFatturaAttivaAvvenutaTrasmissioneNonRecapitata(message);
}
}
} catch (Exception e) {
logger.error("PEC scan error while importing file.", e);
java.io.StringWriter sw = new java.io.StringWriter();
e.printStackTrace(new java.io.PrintWriter(sw));
SendMail.sendErrorMail("Errore. Fatture Elettroniche: Processing mail SDI ", sw.toString());
}
}
}
}

private void processingMailFromReturn(Folder folder, String userName) throws MessagingException{
List<SearchTerm> terms = createTermsForSearchReturn();
Message messages[] = folder.search(new AndTerm(terms.toArray(new SearchTerm[terms.size()])));
Expand Down Expand Up @@ -475,9 +539,9 @@ private void processingMailFromReturn(Folder folder, String userName) throws Mes
}
}
}
public List<SearchTerm> createTermsForSearchSdi() {
public List<SearchTerm> createTermsForSearchSdi(Boolean dateForRecoveryNotifier) {
List<SearchTerm> terms = new ArrayList<SearchTerm>();
addConditionDate(terms);
addConditionDate(terms,dateForRecoveryNotifier);
terms.add(new FromStringTerm(pecSDIFromStringTerm));
return terms;
}
Expand Down Expand Up @@ -559,11 +623,21 @@ public String getSubjectTermForFatturaPassivaPec() {
return subjectTerm;
}
public void addConditionDate(List<SearchTerm> terms) {
addConditionDate(terms, false);
}

public void addConditionDate(List<SearchTerm> terms, Boolean dateForRecoveryNotifier) {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DATE, -1);
Date dateBeforeOneDays = cal.getTime();
terms.add(new ReceivedDateTerm(ComparisonTerm.GE, dateBeforeOneDays));
Date dateFromSearch = null;
if (dateForRecoveryNotifier){
dateFromSearch = DateUtils.dataContabile(cal.getTime(), cal.get(Calendar.YEAR) - 1);
} else {
cal.add(Calendar.DATE, -1);
dateFromSearch = cal.getTime();
}

terms.add(new ReceivedDateTerm(ComparisonTerm.GE, dateFromSearch));
}

public Date getSystemDate() {
Expand Down

0 comments on commit 8626eef

Please sign in to comment.