package it.acxent.anag; import it.acxent.db.ApplParmFull; import it.acxent.db.WcString; import it.acxent.util.Vectumerator; import java.io.Serializable; import java.sql.Date; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Calendar; public class Festivita extends _AnagAdapter implements Serializable { private static final long serialVersionUID = -6806543963513972058L; private long id_festivita; private String descrizione; private long giorno; private long mese; private long anno; private Date dataEsclusione; private long flgTipo; private Date dataInizio; private Date dataFine; public static final long TIPO_CALCOLO_FRATELLI = 0L; public static final long TIPO_FESTIVITA_AMBULATORIO = 1L; public static final long TIPO_FESTIVITA_LAVORATIVI = 2L; public Festivita(ApplParmFull newApplParmFull) { super(newApplParmFull); } public Festivita() {} public void setId_festivita(long newId_festivita) { this.id_festivita = newId_festivita; } public void setDescrizione(String newDescrizione) { this.descrizione = newDescrizione; } public void setGiorno(long newGiorno) { this.giorno = newGiorno; } public void setMese(long newMese) { this.mese = newMese; } public void setAnno(long newAnno) { this.anno = newAnno; } public void setFlgTipo(long newFlgTipo) { this.flgTipo = newFlgTipo; } public long getId_festivita() { return this.id_festivita; } public String getDescrizione() { return (this.descrizione == null) ? "" : this.descrizione; } public long getGiorno() { return this.giorno; } public Date getDataAnno(int l_anno) { Calendar cal = Calendar.getInstance(); cal.set(5, (int)getGiorno()); cal.set(2, (int)getMese() - 1); if (l_anno > 0) cal.set(1, l_anno); return new Date(cal.getTimeInMillis()); } public Date getDataAnno() { return getDataAnno((int)getAnno()); } public long getMese() { return this.mese; } public long getAnno() { return this.anno; } public long getFlgTipo() { return this.flgTipo; } protected void deleteCascade() {} public Vectumerator findByCR(FestivitaCR CR, int pageNumber, int pageRows) { String s_Sql_Find = "select A.* from FESTIVITA AS A"; String s_Sql_Order = " order by A.anno, A.mese, A.giorno"; WcString wc = new WcString(); if (CR.getDataDa() != null) wc.addWc("(A.anno=0 or A.anno is null or A.anno>=" + CR.getAnnoDataDa() + ")"); if (CR.getDataA() != null) wc.addWc("(A.anno=0 or A.anno is null or A.anno<=" + CR.getAnnoDataA() + ")"); try { PreparedStatement stmt = getConn().prepareStatement(s_Sql_Find + s_Sql_Find + wc.toString()); Vectumerator vec = findRows(stmt, 0, 0); Vectumerator result = new Vectumerator(); while (vec.hasMoreElements()) { Festivita row = (Festivita)vec.nextElement(); if (CR.getMeseDataDa() == CR.getMeseDataA()) { if (row.getMese() == (long)CR.getMeseDataDa() && row.getGiorno() >= (long)CR.getGiornoDataDa() && row.getGiorno() <= (long)CR.getGiornoDataA()) result.addElement(row); continue; } if ((row.getMese() == (long)CR.getMeseDataDa() && row.getGiorno() >= (long)CR.getGiornoDataDa()) || ( row.getMese() > (long)CR.getMeseDataDa() && row.getMese() < (long)CR.getMeseDataA()) || ( row.getMese() == (long)CR.getMeseDataA() && row.getGiorno() <= (long)CR.getGiornoDataA())) result.addElement(row); } return result; } catch (SQLException e) { handleDebug(e); return AB_EMPTY_VECTUMERATOR; } } public void findByData(Date l_data, long flgTipo) { String s_Sql_Find = "select A.* from FESTIVITA AS A"; String s_Sql_Order = " order by A.anno, A.mese, A.giorno"; WcString wc = new WcString(); long l_giorno = 0L; long l_mese = 0L; long l_anno = 0L; if (l_data != null) { Calendar cal = Calendar.getInstance(); cal.setTime(l_data); l_giorno = (long)cal.get(5); l_mese = (long)(cal.get(2) + 1); l_anno = (long)cal.get(1); } if (flgTipo == 0L) { wc.addWc("((A.anno=0 or A.anno is null) and A.giorno=" + l_giorno + " and A.mese=" + l_mese + ") or (A.anno=" + l_anno + " and A.giorno=" + l_giorno + " and A.mese=" + l_mese + ")"); } else { wc.addWc("((A.anno=0 or A.anno is null) and A.giorno=" + l_giorno + " and A.mese=" + l_mese + ") or (A.anno=" + l_anno + " and A.giorno=" + l_giorno + " and A.mese=" + l_mese + ") OR (A.dataInizio <= ? AND A.dataFine >= ?)"); } try { PreparedStatement stmt = getConn().prepareStatement(s_Sql_Find + s_Sql_Find + wc.toString()); int dataCount = 0; if (flgTipo != 0L) { dataCount++; stmt.setDate(dataCount, l_data); dataCount++; stmt.setDate(dataCount, l_data); } findFirstRecord(stmt); } catch (SQLException e) { handleDebug(e); } } public Date getDataEsclusione() { return this.dataEsclusione; } public void setDataEsclusione(Date dataEsclusione) { this.dataEsclusione = dataEsclusione; if (dataEsclusione != null) { Calendar cal = Calendar.getInstance(); cal.setTime(dataEsclusione); setGiorno((long)cal.get(5)); setMese((long)(cal.get(2) + 1)); setAnno((long)cal.get(1)); } } public boolean isFestivo(Date l_data, long flgTipo) { Calendar cal = Calendar.getInstance(); cal.setTime(l_data); if (cal.get(7) == 1) return true; if (flgTipo == 2L && cal.get(7) == 7) return true; Festivita festivita = new Festivita(getApFull()); festivita.findByData(l_data, flgTipo); if (festivita.getDBState() == 1) return true; return false; } public Date getDataInizio() { return this.dataInizio; } public void setDataInizio(Date dataDa) { this.dataInizio = dataDa; } public Date getDataFine() { return this.dataFine; } public void setDataFine(Date dataA) { this.dataFine = dataA; } public long getTotGiorniLavorativiFraDueDate(Date dataDa, Date dataA) { long totGg = 0L; Calendar cal = Calendar.getInstance(); cal.setTime(dataDa); while (getDateDiff(new Date(cal.getTimeInMillis()), dataA) >= 0L) { if (!isFestivo(new Date(cal.getTimeInMillis()), 2L)) totGg++; cal.add(6, 1); } return totGg; } }