Salvatore La Manna
4 anni fa
46 ha cambiato i file con 965 aggiunte e 1501 eliminazioni
@ -0,0 +1,84 @@
|
||||
package it.mwg.sismica.bo.scheduler; |
||||
|
||||
import it.mwg.sismica.bo.util.SorteggioPraticaUtil; |
||||
import it.tref.liferay.portos.bo.service.ConfigurazioneLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.ConfigurazioneServiceUtil; |
||||
import it.tref.liferay.portos.bo.shared.util.ConfigurazioneConstants; |
||||
|
||||
import java.text.ParseException; |
||||
import java.text.SimpleDateFormat; |
||||
import java.util.Calendar; |
||||
import java.util.Date; |
||||
import java.util.concurrent.locks.Lock; |
||||
import java.util.concurrent.locks.ReentrantLock; |
||||
|
||||
import com.liferay.portal.kernel.exception.PortalException; |
||||
import com.liferay.portal.kernel.exception.SystemException; |
||||
import com.liferay.portal.kernel.log.Log; |
||||
import com.liferay.portal.kernel.log.LogFactoryUtil; |
||||
import com.liferay.portal.kernel.messaging.Message; |
||||
import com.liferay.portal.kernel.messaging.MessageListener; |
||||
import com.liferay.portal.kernel.messaging.MessageListenerException; |
||||
import com.liferay.portal.model.Company; |
||||
import com.liferay.portal.model.Role; |
||||
import com.liferay.portal.model.RoleConstants; |
||||
import com.liferay.portal.model.User; |
||||
import com.liferay.portal.service.CompanyLocalServiceUtil; |
||||
import com.liferay.portal.service.RoleLocalServiceUtil; |
||||
import com.liferay.portal.service.ServiceContext; |
||||
import com.liferay.portal.service.UserLocalServiceUtil; |
||||
|
||||
public class SchedulerSorteggio implements MessageListener { |
||||
|
||||
private static final Log _log = LogFactoryUtil.getLog(SchedulerSorteggio.class); |
||||
|
||||
private static final Lock lock = new ReentrantLock(); |
||||
|
||||
@Override |
||||
public void receive(Message message) throws MessageListenerException { |
||||
if (lock.tryLock()) { |
||||
Date dt = new Date(); |
||||
try { |
||||
for (Company company : CompanyLocalServiceUtil.getCompanies()) { |
||||
long companyId = company.getCompanyId(); |
||||
if (isGiornoSorteggio(companyId, dt)) { |
||||
_log.info("Sorteggio da scheduler"); |
||||
SorteggioPraticaUtil.sorteggio(companyId, dt); |
||||
|
||||
Role role = RoleLocalServiceUtil.getRole(companyId, RoleConstants.ADMINISTRATOR); |
||||
User user = UserLocalServiceUtil.getRoleUsers(role.getRoleId(), 0, 1).get(0); |
||||
|
||||
ServiceContext serviceContext = new ServiceContext(); |
||||
serviceContext.setCompanyId(companyId); |
||||
serviceContext.setScopeGroupId(company.getGroupId()); |
||||
serviceContext.setUserId(user.getUserId()); |
||||
|
||||
Calendar calendar = Calendar.getInstance(); |
||||
calendar.setTime(dt); |
||||
calendar.add(Calendar.DAY_OF_MONTH, 7); |
||||
|
||||
ConfigurazioneServiceUtil.storeConfig( |
||||
"conf.geniocivile.sorteggio.data.prossimo.sorteggio", new SimpleDateFormat( |
||||
"dd/MM/yyyy").format(calendar.getTime()), serviceContext); |
||||
} |
||||
} |
||||
} catch (SystemException | ParseException | PortalException e) { |
||||
_log.error("error", e); |
||||
} |
||||
lock.unlock(); |
||||
} |
||||
} |
||||
|
||||
private static boolean isGiornoSorteggio(long companyId, Date dt) throws SystemException, ParseException { |
||||
Calendar calendar = Calendar.getInstance(); |
||||
calendar.setTime(dt); |
||||
int dowOggi = calendar.get(Calendar.DAY_OF_WEEK); |
||||
int oraOggi = calendar.get(Calendar.HOUR_OF_DAY); |
||||
int dowSorteggio = Integer.parseInt(ConfigurazioneLocalServiceUtil.findByC_ChiaveString(companyId, |
||||
ConfigurazioneConstants.DAY_OF_WEEK_SORTEGGIO)); |
||||
int oraSorteggio = Integer.parseInt(ConfigurazioneLocalServiceUtil.findByC_ChiaveString(companyId, |
||||
ConfigurazioneConstants.HOUR_OF_DAY_SORTEGGIO)); |
||||
|
||||
return (dowOggi == dowSorteggio) && (oraOggi == oraSorteggio); |
||||
} |
||||
} |
@ -0,0 +1,334 @@
|
||||
package it.mwg.sismica.bo.util; |
||||
|
||||
import it.tref.liferay.portos.bo.model.Comune; |
||||
import it.tref.liferay.portos.bo.model.ControlloPratica; |
||||
import it.tref.liferay.portos.bo.model.DettPratica; |
||||
import it.tref.liferay.portos.bo.model.IntPratica; |
||||
import it.tref.liferay.portos.bo.model.Provincia; |
||||
import it.tref.liferay.portos.bo.model.Soggetto; |
||||
import it.tref.liferay.portos.bo.model.Territorio; |
||||
import it.tref.liferay.portos.bo.service.AvvisoLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.ComuneLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.ConfigurazioneLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.ControlloPraticaLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.DettPraticaLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.IntPraticaLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.ProvinciaLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.SoggettoLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.SorteggioLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.TerritorioLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.shared.util.ConfigurazioneConstants; |
||||
import it.tref.liferay.portos.bo.shared.util.StatoPraticaConstants; |
||||
import it.tref.liferay.portos.bo.shared.util.TipoSoggettoUtil; |
||||
import it.tref.liferay.portos.bo.util.AvvisoUtil; |
||||
import it.tref.liferay.portos.report.shared.constants.ReportConstants; |
||||
import it.tref.liferay.portos.report.shared.dto.ReportDto; |
||||
import it.tref.liferay.portos.report.shared.util.ReportUtil; |
||||
|
||||
import java.security.SecureRandom; |
||||
import java.text.SimpleDateFormat; |
||||
import java.util.ArrayList; |
||||
import java.util.Calendar; |
||||
import java.util.Date; |
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
import java.util.TreeMap; |
||||
import java.util.concurrent.locks.Lock; |
||||
import java.util.concurrent.locks.ReentrantLock; |
||||
|
||||
import org.apache.commons.lang.time.DateUtils; |
||||
|
||||
import com.liferay.portal.kernel.exception.PortalException; |
||||
import com.liferay.portal.kernel.exception.SystemException; |
||||
import com.liferay.portal.kernel.repository.model.FileEntry; |
||||
import com.liferay.portal.kernel.repository.model.Folder; |
||||
import com.liferay.portal.kernel.util.Validator; |
||||
import com.liferay.portal.model.Company; |
||||
import com.liferay.portal.model.Role; |
||||
import com.liferay.portal.model.RoleConstants; |
||||
import com.liferay.portal.service.CompanyLocalServiceUtil; |
||||
import com.liferay.portal.service.RoleLocalServiceUtil; |
||||
import com.liferay.portal.service.ServiceContext; |
||||
import com.liferay.portal.service.UserLocalServiceUtil; |
||||
import com.liferay.portlet.documentlibrary.model.DLFolderConstants; |
||||
import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil; |
||||
|
||||
public class SorteggioPraticaUtil { |
||||
|
||||
private static final Lock lock = new ReentrantLock(); |
||||
|
||||
public static final String DATE_TIME_FORMAT = "dd/MM/yyyy HH:mm:ss"; |
||||
|
||||
public final static String APERTO = "APERTO"; |
||||
public final static String CHIUSO = "CHIUSO"; |
||||
|
||||
private static final String FOLDER_SORTEGGIO = "Report_Sorteggio"; |
||||
|
||||
private static final String FILE_ENTRY_TEMPLATE_SORTEGGIO = "Sorteggio"; |
||||
|
||||
/** |
||||
* |
||||
* Implementazione della procedura di sorteggio secondo i requisiti della |
||||
* Regione Siciliana. |
||||
* |
||||
* @author Manifattura Web Group per Regione Siciliana |
||||
* @param companyId |
||||
* @param dtSorteggio |
||||
* @throws PortalException |
||||
* @throws SystemException |
||||
*/ |
||||
public static List<String> sorteggio(long companyId, Date dtSorteggio) throws PortalException, |
||||
SystemException { |
||||
|
||||
List<String> esito = new ArrayList<>(); |
||||
if (lock.tryLock()) { |
||||
SimpleDateFormat sdf = new SimpleDateFormat(DATE_TIME_FORMAT); |
||||
esito.add("Sorteggio iniziato in data " + sdf.format(dtSorteggio) + ".<br><br>"); |
||||
|
||||
Map<String, List<IntPratica>> sorteggiabili = IntPraticaLocalServiceUtil.findSorteggiabiliNew( |
||||
companyId, dtSorteggio); |
||||
|
||||
int numeroSorteggiabili = 0; |
||||
for (Map.Entry<String, List<IntPratica>> s : sorteggiabili.entrySet()) { |
||||
numeroSorteggiabili += s.getValue().size(); |
||||
} |
||||
esito.add("<h1>" + numeroSorteggiabili + " pratiche sottoposte a sorteggio.</h1>"); |
||||
|
||||
SecureRandom rnd = new SecureRandom(); |
||||
List<IntPratica> sorteggiate = new ArrayList<>(); |
||||
for (Map.Entry<String, List<IntPratica>> s : sorteggiabili.entrySet()) { |
||||
String codiceProvincia = s.getKey(); |
||||
List<IntPratica> elenco = s.getValue(); |
||||
|
||||
Provincia provincia = ProvinciaLocalServiceUtil.fetchByC_C(companyId, codiceProvincia); |
||||
long numeroSorteggiate = (long) Math.ceil(0.1 * elenco.size()); |
||||
String testoSorteggio; |
||||
if (numeroSorteggiate > 1) { |
||||
testoSorteggio = "saranno estratte " + numeroSorteggiate + " pratiche"; |
||||
} else { |
||||
testoSorteggio = "sarà estratta 1 pratica"; |
||||
} |
||||
esito.add("<h2><small>(" + sdf.format(new Date()) + ")</small> Provincia di " |
||||
+ provincia.getProvincia() + " " + elenco.size() + " pratiche, " + testoSorteggio |
||||
+ ".</h2><ol>"); |
||||
|
||||
Map<Integer, IntPratica> ordinate = new HashMap<>(); |
||||
|
||||
int chiave; |
||||
for (IntPratica pratica : elenco) { |
||||
do { |
||||
chiave = rnd.nextInt(); |
||||
} while (ordinate.containsKey(chiave)); |
||||
ordinate.put(chiave, pratica); |
||||
} |
||||
TreeMap<Integer, IntPratica> mescolate = new TreeMap<Integer, IntPratica>(ordinate); |
||||
|
||||
long contatore = 0; |
||||
for (Map.Entry<Integer, IntPratica> m : mescolate.entrySet()) { |
||||
IntPratica pratica = m.getValue(); |
||||
long intPraticaId = pratica.getIntPraticaId(); |
||||
DettPratica dettPratica = DettPraticaLocalServiceUtil |
||||
.getLastCompletedByIntPratica(intPraticaId); |
||||
|
||||
ServiceContext serviceContext = new ServiceContext(); |
||||
serviceContext.setCompanyId(dettPratica.getCompanyId()); |
||||
serviceContext.setScopeGroupId(dettPratica.getGroupId()); |
||||
serviceContext.setUserId(dettPratica.getUserId()); |
||||
|
||||
if (contatore++ < numeroSorteggiate) { |
||||
sorteggiate.add(pratica); |
||||
esito.add("<li>Sorteggiata: " + pratica.getNumeroProgetto() + " (id " + intPraticaId |
||||
+ ") del " + sdf.format(pratica.getDtPratica()) + " (" + m.getKey() |
||||
+ ")</li>"); |
||||
} else { |
||||
pratica.setDtSorteggio(dtSorteggio); |
||||
IntPraticaLocalServiceUtil.updateIntPratica(pratica); |
||||
|
||||
esito.add("<li>Non sorteggiata: " + pratica.getNumeroProgetto() + " (id " |
||||
+ intPraticaId + ") del " + sdf.format(pratica.getDtPratica()) + " (" |
||||
+ m.getKey() + ")</li>"); |
||||
} |
||||
} |
||||
esito.add("</ol>"); |
||||
} |
||||
if (sorteggiate.size() > 0) { |
||||
saveSorteggio(companyId, sorteggiate, dtSorteggio); |
||||
} |
||||
esito.add("Sorteggio terminato in data " + sdf.format(new Date()) + ".<br><br>"); |
||||
|
||||
creaReportSorteggio(companyId, dtSorteggio, esito); |
||||
|
||||
// Salvataggio data ultimo sorteggio
|
||||
ServiceContext serviceContext = new ServiceContext(); |
||||
serviceContext.setCompanyId(companyId); |
||||
serviceContext.setScopeGroupId(-1L); |
||||
serviceContext.setUserId(UserLocalServiceUtil.getDefaultUserId(companyId)); |
||||
ConfigurazioneLocalServiceUtil.storeConfig(ConfigurazioneConstants.DATE_ULTIMO_SORTEGGIO, |
||||
sdf.format(dtSorteggio), serviceContext); |
||||
|
||||
lock.unlock(); |
||||
} |
||||
|
||||
return esito; |
||||
} |
||||
|
||||
private static FileEntry creaReportSorteggio(long companyId, Date dtSorteggio, List<String> contenuto) |
||||
throws PortalException, SystemException { |
||||
|
||||
Role role = RoleLocalServiceUtil.getRole(companyId, RoleConstants.ADMINISTRATOR); |
||||
long userId = UserLocalServiceUtil.getRoleUsers(role.getRoleId(), 0, 1).get(0).getUserId(); |
||||
|
||||
Company company = CompanyLocalServiceUtil.getCompany(companyId); |
||||
Folder folderTemplate = DLAppLocalServiceUtil.getFolder(company.getGroupId(), |
||||
DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, "Template"); |
||||
FileEntry fileEntryTemplate = DLAppLocalServiceUtil.getFileEntry(folderTemplate.getGroupId(), |
||||
folderTemplate.getFolderId(), FILE_ENTRY_TEMPLATE_SORTEGGIO); |
||||
|
||||
Folder folderReport = DLAppLocalServiceUtil.getFolder(company.getGroupId(), |
||||
DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, FOLDER_SORTEGGIO); |
||||
|
||||
StringBuilder sb = new StringBuilder(contenuto.size()); |
||||
for (String riga : contenuto) { |
||||
sb.append(riga); |
||||
} |
||||
Map<String, Object> parameters = new HashMap<String, Object>(); |
||||
parameters.put("html", sb.toString()); |
||||
|
||||
ReportDto reportDto = new ReportDto(); |
||||
reportDto.setFileEntryIds(new long[] { fileEntryTemplate.getFileEntryId() }); |
||||
reportDto.setFolderId(folderReport.getFolderId()); |
||||
reportDto.setFileName(reportFileName(companyId, dtSorteggio)); |
||||
|
||||
reportDto.setHeader(""); |
||||
reportDto.setHeaderHeight(1); |
||||
reportDto.setFooter(""); |
||||
reportDto.setFooterHeight(40); |
||||
|
||||
reportDto.setParameters(parameters); |
||||
reportDto.setShowNumberOfPage(true); |
||||
reportDto.setType(ReportConstants.ReportType.VELOCITY_TO_PDF.toString()); |
||||
|
||||
String resourcePath = SorteggioPraticaUtil.class.getName().replaceAll("\\w+\\.", "../") |
||||
.replace(SorteggioPraticaUtil.class.getSimpleName(), "resource/asseverazioni"); |
||||
reportDto.setPortalURL(SorteggioPraticaUtil.class.getResource(resourcePath).getPath()); |
||||
|
||||
ReportUtil.generateReport(companyId, userId, reportDto, null); |
||||
|
||||
return null; |
||||
} |
||||
|
||||
private static String reportFileName(long companyId, Date dtSorteggio) { |
||||
Calendar calSorteggio = DateUtils.toCalendar(dtSorteggio); |
||||
String anno = String.valueOf(calSorteggio.get(Calendar.YEAR)); |
||||
int settimana = calSorteggio.get(Calendar.WEEK_OF_YEAR); |
||||
return reportFileName(companyId, anno, settimana); |
||||
} |
||||
|
||||
private static String reportFileName(long companyId, String anno, int settimana) { |
||||
return "Sorteggio_" + settimana + "_" + anno + "_" + companyId; |
||||
} |
||||
|
||||
/** |
||||
* @author Manifattura Web Group per Regione Siciliana |
||||
* |
||||
* @param companyId |
||||
* @param pratiche |
||||
* Lista di pratiche sorteggiate |
||||
* @param dtSorteggio |
||||
* Data del sorteggio |
||||
* @throws PortalException |
||||
* @throws SystemException |
||||
*/ |
||||
private static void saveSorteggio(long companyId, List<IntPratica> pratiche, Date dtSorteggio) |
||||
throws PortalException, SystemException { |
||||
|
||||
long numeroEstrazione = 1; |
||||
for (IntPratica pratica : pratiche) { |
||||
|
||||
Territorio territorio = TerritorioLocalServiceUtil.getTerritorio(pratica.getTerritorioId()); |
||||
Comune comune = ComuneLocalServiceUtil.getComune(territorio.getComuneId()); |
||||
Provincia provincia = ProvinciaLocalServiceUtil.fetchByC_C(territorio.getCompanyId(), |
||||
comune.getCodiceProvincia()); |
||||
|
||||
DettPratica dettPratica = DettPraticaLocalServiceUtil.getLastCompletedByIntPratica(pratica |
||||
.getIntPraticaId()); |
||||
|
||||
String committente = ""; |
||||
List<Soggetto> soggetti = SoggettoLocalServiceUtil |
||||
.findByIntPratica_TipologiaSoggetto_Aggiuntivo_Rimosso(pratica.getIntPraticaId(), |
||||
TipoSoggettoUtil.COMMITTENTE, false, false); |
||||
if (soggetti.size() > 0) { |
||||
Soggetto soggetto = soggetti.get(0); |
||||
|
||||
// Bug 32771
|
||||
if (Validator.isNotNull(soggetto.getNome()) && Validator.isNotNull(soggetto.getCognome())) |
||||
committente = soggetto.getNome() + " " + soggetto.getCognome(); |
||||
else if (Validator.isNotNull(soggetto.getDenominazione())) |
||||
committente = soggetto.getDenominazione(); |
||||
else |
||||
committente = soggetto.getLegaleRap(); |
||||
} |
||||
|
||||
// anno, mese, settimana della data sorteggio
|
||||
Calendar calSorteggio = Calendar.getInstance(); |
||||
calSorteggio.setTime(dtSorteggio); |
||||
|
||||
String anno = String.valueOf(calSorteggio.get(Calendar.YEAR)); |
||||
String mese = String.format("%02d", calSorteggio.get(Calendar.MONTH) + 1); |
||||
int settimana = calSorteggio.get(Calendar.WEEK_OF_YEAR); |
||||
|
||||
ServiceContext serviceContext = new ServiceContext(); |
||||
serviceContext.setCompanyId(dettPratica.getCompanyId()); |
||||
serviceContext.setScopeGroupId(dettPratica.getGroupId()); |
||||
serviceContext.setUserId(dettPratica.getUserId()); |
||||
|
||||
SorteggioLocalServiceUtil.addSorteggio(pratica.getIntPraticaId(), dettPratica.getDettPraticaId(), |
||||
anno, mese, settimana, dtSorteggio, "", APERTO, "", numeroEstrazione++, |
||||
pratica.getNumeroProgetto(), committente, comune.getDenominazione(), |
||||
provincia.getProvincia(), false, pratica.getIntPraticaId(), false, serviceContext); |
||||
|
||||
ControlloPratica controlloPratica = ControlloPraticaLocalServiceUtil.addControlloPratica( |
||||
pratica.getGroupId(), pratica.getUserId(), pratica.getIntPraticaId(), |
||||
dettPratica.getDettPraticaId(), true, serviceContext); |
||||
|
||||
long fileEntryIdTemplate = ConfigurazioneLocalServiceUtil.findByC_ChiaveLong( |
||||
serviceContext.getCompanyId(), "conf.geniocivile.avviso.template.id.deposito.S"); |
||||
|
||||
AvvisoLocalServiceUtil.addAvviso(pratica.getIntPraticaId(), "Avviso di sorteggio", dtSorteggio, |
||||
AvvisoUtil.TIPO_AVVISO_DIRETTO, StatoPraticaConstants.SOTTOPOSTA_A_PARERE, |
||||
fileEntryIdTemplate, dettPratica.getDettPraticaId(), DettPratica.class.getName(), |
||||
controlloPratica.getControlloPraticaId(), serviceContext); |
||||
|
||||
IntPraticaLocalServiceUtil.updateIntPraticaSorteggio(pratica.getIntPraticaId(), dtSorteggio, |
||||
StatoPraticaConstants.SOTTOPOSTA_A_PARERE); |
||||
|
||||
} |
||||
} |
||||
|
||||
public static FileEntry getFileEntrySorteggio(long companyId, long groupId, Date dtSorteggio) |
||||
throws PortalException, SystemException { |
||||
|
||||
Company company = CompanyLocalServiceUtil.getCompany(companyId); |
||||
|
||||
Folder folder = DLAppLocalServiceUtil.getFolder(company.getGroupId(), |
||||
DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, FOLDER_SORTEGGIO); |
||||
String fileName = reportFileName(companyId, dtSorteggio); |
||||
|
||||
FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(groupId, folder.getFolderId(), fileName); |
||||
|
||||
return fileEntry; |
||||
} |
||||
|
||||
public static FileEntry getFileEntrySorteggio(long companyId, long groupId, int settimana, String anno) |
||||
throws PortalException, SystemException { |
||||
|
||||
Company company = CompanyLocalServiceUtil.getCompany(companyId); |
||||
|
||||
Folder folder = DLAppLocalServiceUtil.getFolder(company.getGroupId(), |
||||
DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, FOLDER_SORTEGGIO); |
||||
String fileName = reportFileName(companyId, anno, settimana); |
||||
|
||||
return DLAppLocalServiceUtil.getFileEntry(groupId, folder.getFolderId(), fileName); |
||||
} |
||||
} |
@ -1,155 +0,0 @@
|
||||
package it.tref.liferay.portos.bo.scheduler; |
||||
|
||||
import it.tref.liferay.portos.bo.model.ControlloPratica; |
||||
import it.tref.liferay.portos.bo.model.DettPratica; |
||||
import it.tref.liferay.portos.bo.model.IntPratica; |
||||
import it.tref.liferay.portos.bo.model.Territorio; |
||||
import it.tref.liferay.portos.bo.service.ControlloPraticaLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.DettPraticaLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.IntPraticaLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.SorteggioLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.TerritorioLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.util.SorteggioPraticaUtil; |
||||
|
||||
import java.util.Date; |
||||
import java.util.List; |
||||
import java.util.concurrent.TimeUnit; |
||||
import java.util.concurrent.locks.Lock; |
||||
import java.util.concurrent.locks.ReentrantLock; |
||||
|
||||
import com.liferay.portal.kernel.log.Log; |
||||
import com.liferay.portal.kernel.log.LogFactoryUtil; |
||||
import com.liferay.portal.kernel.messaging.Message; |
||||
import com.liferay.portal.kernel.messaging.MessageListener; |
||||
import com.liferay.portal.kernel.messaging.MessageListenerException; |
||||
import com.liferay.portal.model.Company; |
||||
import com.liferay.portal.service.CompanyLocalServiceUtil; |
||||
import com.liferay.portal.service.ServiceContext; |
||||
import com.liferay.util.portlet.PortletProps; |
||||
|
||||
public class SchedulerSorteggio implements MessageListener { |
||||
|
||||
private static final Log _log = LogFactoryUtil.getLog(SchedulerSorteggio.class); |
||||
|
||||
private static final Lock lock = new ReentrantLock(); |
||||
|
||||
@Override |
||||
public void receive(Message message) throws MessageListenerException { |
||||
if (lock.tryLock()) { |
||||
sorteggio(); |
||||
lock.unlock(); |
||||
} |
||||
} |
||||
|
||||
private void sorteggio() { |
||||
|
||||
try { |
||||
|
||||
String defaultCompany = PortletProps.get("portos.default.company"); |
||||
for (Company company : CompanyLocalServiceUtil.getCompanies()) { |
||||
long companyId = company.getCompanyId(); |
||||
Date now = new Date(); |
||||
|
||||
if (SorteggioPraticaUtil.isGiornoSorteggio(companyId, now)) { |
||||
// _log.info("È giorno di sorteggio per la compagnia " + companyId);
|
||||
// SorteggioLocalServiceUtil.sorteggio(companyId, now);
|
||||
} |
||||
|
||||
} |
||||
} catch (Exception e) { |
||||
_log.error("error", e); |
||||
} |
||||
} |
||||
|
||||
private void avvioWorkflowSorteggiate() { |
||||
|
||||
try { |
||||
// int count =
|
||||
// SorteggioLocalServiceUtil.countDettPraticaWorkflowNonAvviato();
|
||||
// if (count > 0) {
|
||||
// for (int cursor = 0; cursor <= count; cursor += SIZE) {
|
||||
List<Long> dettPraticaIds = SorteggioLocalServiceUtil.getDettPraticaWorkflowNonAvviato(-1, -1); |
||||
for (Long dettPraticaId : dettPraticaIds) { |
||||
DettPratica dettPratica = DettPraticaLocalServiceUtil.getDettPratica(dettPraticaId); |
||||
long intPraticaId = dettPratica.getIntPraticaId(); |
||||
ServiceContext serviceContext = getServiceContext(dettPratica); |
||||
avvioWorkflow(intPraticaId, dettPratica, serviceContext); |
||||
} |
||||
// }
|
||||
// }
|
||||
} catch (Exception e) { |
||||
_log.error("error", e); |
||||
} |
||||
} |
||||
|
||||
// TODO sanatoriaRimossa
|
||||
// private void avvioWorkflowSanatoriaDepositoOpereNonConformi() {
|
||||
// try {
|
||||
// int count =
|
||||
// WorkflowUtil.countIntPraticaIdsPerAvvioWorkflowSanatoriaDepositoOpereNonConformi();
|
||||
// if (count > 0) {
|
||||
// for (int cursor = 0; cursor <= count; cursor += SIZE) {
|
||||
// List<Long> intPraticaIds =
|
||||
// WorkflowUtil.findIntPraticaIdsPerAvvioWorkflowSanatoriaDepositoOpereNonConformi(cursor,
|
||||
// cursor
|
||||
// + SIZE);
|
||||
// for (Long intPraticaId : intPraticaIds) {
|
||||
// DettPratica dettPratica =
|
||||
// DettPraticaLocalServiceUtil.getLastDettPratica(intPraticaId);
|
||||
// ServiceContext serviceContext = getServiceContext(dettPratica);
|
||||
// avvioWorkflow(intPraticaId, dettPratica, serviceContext);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// } catch (Exception e) {
|
||||
// _log.error("error", e);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// private void avvioWorkflowSanatoriaDepositoOpereConformi() {
|
||||
// try {
|
||||
// int count =
|
||||
// WorkflowUtil.countIntPraticaIdsPerAvvioWorkflowSanatoriaDepositoOpereConformi();
|
||||
// if (count > 0) {
|
||||
// for (int cursor = 0; cursor <= count; cursor += SIZE) {
|
||||
// List<Long> intPraticaIds =
|
||||
// WorkflowUtil.findIntPraticaIdsPerAvvioWorkflowSanatoriaDepositoOpereConformi(cursor,
|
||||
// cursor +
|
||||
// SIZE);
|
||||
// for (Long intPraticaId : intPraticaIds) {
|
||||
// DettPratica dettPratica =
|
||||
// DettPraticaLocalServiceUtil.getLastDettPratica(intPraticaId);
|
||||
// ServiceContext serviceContext = getServiceContext(dettPratica);
|
||||
// avvioWorkflow(intPraticaId, dettPratica, serviceContext);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// } catch (Exception e) {
|
||||
// _log.error("error", e);
|
||||
// }
|
||||
// }
|
||||
|
||||
private void avvioWorkflow(long intPraticaId, DettPratica dettPratica, ServiceContext serviceContext) |
||||
throws Exception { |
||||
|
||||
long userId = dettPratica.getUserId(); |
||||
IntPratica intPratica = IntPraticaLocalServiceUtil.getIntPratica(dettPratica.getIntPraticaId()); |
||||
Territorio territorio = TerritorioLocalServiceUtil.getTerritorio(intPratica.getTerritorioId()); |
||||
ControlloPratica cp = ControlloPraticaLocalServiceUtil.addControlloPratica(territorio.getGroupId(), |
||||
userId, intPratica.getIntPraticaId(), dettPratica.getDettPraticaId(), false, serviceContext); |
||||
|
||||
// ADT: bug id=7 gestione workflow
|
||||
ControlloPraticaLocalServiceUtil.gestioneWFVarianti(cp); |
||||
|
||||
} |
||||
|
||||
private ServiceContext getServiceContext(DettPratica dettPratica) { |
||||
|
||||
ServiceContext serviceContext = new ServiceContext(); |
||||
serviceContext.setCompanyId(dettPratica.getCompanyId()); |
||||
serviceContext.setScopeGroupId(dettPratica.getGroupId()); |
||||
serviceContext.setUserId(dettPratica.getUserId()); |
||||
return serviceContext; |
||||
} |
||||
|
||||
} |
@ -1,753 +0,0 @@
|
||||
package it.tref.liferay.portos.bo.util; |
||||
|
||||
import it.tref.liferay.portos.bo.model.Comune; |
||||
import it.tref.liferay.portos.bo.model.ControlloPratica; |
||||
import it.tref.liferay.portos.bo.model.DettPratica; |
||||
import it.tref.liferay.portos.bo.model.IntPratica; |
||||
import it.tref.liferay.portos.bo.model.Provincia; |
||||
import it.tref.liferay.portos.bo.model.Soggetto; |
||||
import it.tref.liferay.portos.bo.model.Sorteggio; |
||||
import it.tref.liferay.portos.bo.model.Territorio; |
||||
import it.tref.liferay.portos.bo.report.builder.bean.ReportSorteggioBean; |
||||
import it.tref.liferay.portos.bo.report.builder.builder.ReportSorteggioBeanBuilder; |
||||
import it.tref.liferay.portos.bo.service.AvvisoLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.ComuneLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.ConfigurazioneLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.ControlloPraticaLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.DettPraticaLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.IntPraticaLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.ProvinciaLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.SoggettoLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.SorteggioLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.service.TerritorioLocalServiceUtil; |
||||
import it.tref.liferay.portos.bo.shared.util.ConfigurazioneConstants; |
||||
import it.tref.liferay.portos.bo.shared.util.FascicoloURLUtil; |
||||
import it.tref.liferay.portos.bo.shared.util.StatoPraticaConstants; |
||||
import it.tref.liferay.portos.bo.shared.util.TipoSoggettoUtil; |
||||
import it.tref.liferay.portos.mailmanager.shared.messaging.util.MailManagerUtil; |
||||
import it.tref.liferay.portos.report.shared.constants.ReportConstants; |
||||
import it.tref.liferay.portos.report.shared.dto.ReportDto; |
||||
import it.tref.liferay.portos.report.shared.dto.ReportResultDto; |
||||
import it.tref.liferay.portos.report.shared.util.ReportUtil; |
||||
|
||||
import java.io.File; |
||||
import java.io.FileWriter; |
||||
import java.io.IOException; |
||||
import java.security.Provider; |
||||
import java.security.SecureRandom; |
||||
import java.security.Security; |
||||
import java.text.MessageFormat; |
||||
import java.text.ParseException; |
||||
import java.text.SimpleDateFormat; |
||||
import java.util.ArrayList; |
||||
import java.util.Calendar; |
||||
import java.util.Collections; |
||||
import java.util.Comparator; |
||||
import java.util.Date; |
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
import java.util.TreeMap; |
||||
|
||||
import org.apache.commons.lang.StringUtils; |
||||
import org.apache.commons.lang.time.DateUtils; |
||||
|
||||
import com.liferay.portal.kernel.exception.PortalException; |
||||
import com.liferay.portal.kernel.exception.SystemException; |
||||
import com.liferay.portal.kernel.json.JSONFactoryUtil; |
||||
import com.liferay.portal.kernel.json.JSONObject; |
||||
import com.liferay.portal.kernel.language.LanguageUtil; |
||||
import com.liferay.portal.kernel.log.Log; |
||||
import com.liferay.portal.kernel.log.LogFactoryUtil; |
||||
import com.liferay.portal.kernel.repository.model.FileEntry; |
||||
import com.liferay.portal.kernel.repository.model.Folder; |
||||
import com.liferay.portal.kernel.util.GetterUtil; |
||||
import com.liferay.portal.kernel.util.LocaleUtil; |
||||
import com.liferay.portal.kernel.util.PropsUtil; |
||||
import com.liferay.portal.kernel.util.StringPool; |
||||
import com.liferay.portal.kernel.util.Validator; |
||||
import com.liferay.portal.kernel.workflow.WorkflowConstants; |
||||
import com.liferay.portal.model.Company; |
||||
import com.liferay.portal.model.Role; |
||||
import com.liferay.portal.model.RoleConstants; |
||||
import com.liferay.portal.service.CompanyLocalServiceUtil; |
||||
import com.liferay.portal.service.RoleLocalServiceUtil; |
||||
import com.liferay.portal.service.ServiceContext; |
||||
import com.liferay.portal.service.UserLocalServiceUtil; |
||||
import com.liferay.portlet.documentlibrary.NoSuchFileException; |
||||
import com.liferay.portlet.documentlibrary.model.DLFolder; |
||||
import com.liferay.portlet.documentlibrary.model.DLFolderConstants; |
||||
import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil; |
||||
import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil; |
||||
|
||||
public class SorteggioPraticaUtil { |
||||
|
||||
private static Log _log = LogFactoryUtil.getLog(SorteggioPraticaUtil.class); |
||||
|
||||
public static final String DATE_TIME_FORMAT = "dd/MM/yyyy HH:mm:ss"; |
||||
|
||||
public final static String APERTO = "APERTO"; |
||||
public final static String CHIUSO = "CHIUSO"; |
||||
|
||||
private static final String FOLDER_TEMPLATE_SORTEGGIO = "Template_Sorteggio"; |
||||
|
||||
private static final String FOLDER_SORTEGGIO = "Report_Sorteggio"; |
||||
|
||||
private static final String FILE_ENTRY_TEMPLATE_SORTEGGIO = "Sorteggio"; |
||||
|
||||
private static final String FILE_ENTRY_SORTEGGIO = "Sorteggio_{0}_{1}_{2}"; |
||||
private static final String FILE_ENTRY_SORTEGGIO_OLD = "Sorteggio_{0}_{1}_{2}_{3}"; |
||||
|
||||
public static Date getDataSorteggio(long companyId, boolean next) throws SystemException { |
||||
|
||||
Date dtSorteggio = null; |
||||
// Date dtSorteggio = new Date();
|
||||
|
||||
Integer dayOfWeekSorteggio = GetterUtil.getInteger(ConfigurazioneLocalServiceUtil |
||||
.findByC_ChiaveString(companyId, ConfigurazioneConstants.DAY_OF_WEEK_SORTEGGIO)); |
||||
Integer startDaySorteggio = GetterUtil.getInteger(ConfigurazioneLocalServiceUtil |
||||
.findByC_ChiaveString(companyId, ConfigurazioneConstants.START_DAY_SORTEGGIO)); |
||||
|
||||
if (dayOfWeekSorteggio > 0 && dayOfWeekSorteggio <= 7 && startDaySorteggio > 0 |
||||
&& startDaySorteggio <= 28) { |
||||
|
||||
Calendar calendarSorteggio = Calendar.getInstance(); |
||||
calendarSorteggio.set(Calendar.DATE, startDaySorteggio); |
||||
if (next) { |
||||
calendarSorteggio.add(Calendar.MONTH, 1); |
||||
} |
||||
while (calendarSorteggio.get(Calendar.DAY_OF_WEEK) != dayOfWeekSorteggio) { |
||||
calendarSorteggio.add(Calendar.DATE, 1); |
||||
} |
||||
// se festività -> prossima settimana
|
||||
if (FestivitaUtil.isFestivo(calendarSorteggio.getTime())) { |
||||
calendarSorteggio.add(Calendar.WEEK_OF_YEAR, 1); |
||||
} |
||||
dtSorteggio = DateUtils.truncate(calendarSorteggio, Calendar.DATE).getTime(); |
||||
} |
||||
|
||||
return dtSorteggio; |
||||
} |
||||
|
||||
public static boolean isGiornoSorteggio(long companyId, Date dt) throws SystemException, ParseException { |
||||
Date dtUltimoSorteggio = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss") |
||||
.parse(ConfigurazioneLocalServiceUtil.findByC_ChiaveString(companyId, |
||||
ConfigurazioneConstants.DATE_ULTIMO_SORTEGGIO)); |
||||
|
||||
// Almeno 3 giorni dall'ultimo sorteggio
|
||||
if (dt.getTime() - dtUltimoSorteggio.getTime() > 3 * 24 * 60 * 60 * 1000) { |
||||
int dowOggi = Calendar.getInstance().get(Calendar.DAY_OF_WEEK); |
||||
int dowSorteggio = Integer.parseInt(ConfigurazioneLocalServiceUtil.findByC_ChiaveString( |
||||
companyId, ConfigurazioneConstants.DAY_OF_WEEK_SORTEGGIO)); |
||||
|
||||
if (dowOggi == dowSorteggio) { |
||||
|
||||
} |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* Implementazione della procedura di sorteggio secondo i requisiti della |
||||
* Regione Siciliana. |
||||
* |
||||
* @author Manifattura Web Group per Regione Siciliana |
||||
* @param companyId |
||||
* @param dtSorteggio |
||||
* @throws PortalException |
||||
* @throws SystemException |
||||
*/ |
||||
public static List<String> sorteggio(long companyId, Date dtSorteggio) throws PortalException, |
||||
SystemException { |
||||
|
||||
List<String> esito = new ArrayList<>(); |
||||
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); |
||||
esito.add("Sorteggio iniziato in data " + sdf.format(dtSorteggio) + ".<br><br>"); |
||||
|
||||
Map<String, List<IntPratica>> sorteggiabili = IntPraticaLocalServiceUtil.findSorteggiabiliNew( |
||||
companyId, dtSorteggio); |
||||
|
||||
int numeroSorteggiabili = 0; |
||||
for (Map.Entry<String, List<IntPratica>> s : sorteggiabili.entrySet()) { |
||||
numeroSorteggiabili += s.getValue().size(); |
||||
} |
||||
esito.add("<h1>" + numeroSorteggiabili + " pratiche sottoposte a sorteggio.</h1>"); |
||||
|
||||
SecureRandom rnd = new SecureRandom(); |
||||
List<IntPratica> sorteggiate = new ArrayList<>(); |
||||
for (Map.Entry<String, List<IntPratica>> s : sorteggiabili.entrySet()) { |
||||
String codiceProvincia = s.getKey(); |
||||
List<IntPratica> elenco = s.getValue(); |
||||
|
||||
Provincia provincia = ProvinciaLocalServiceUtil.fetchByC_C(companyId, codiceProvincia); |
||||
long numeroSorteggiate = (long) Math.ceil(0.1 * elenco.size()); |
||||
String testoSorteggio; |
||||
if (numeroSorteggiate > 1) { |
||||
testoSorteggio = "saranno estratte " + numeroSorteggiate + " pratiche"; |
||||
} else { |
||||
testoSorteggio = "sarà estratta 1 pratica"; |
||||
} |
||||
esito.add("<h2>Provincia di " + provincia.getProvincia() + " " + elenco.size() |
||||
+ " pratiche, " + testoSorteggio + ".</h2><ol>"); |
||||
|
||||
Map<Integer, IntPratica> ordinate = new HashMap<>(); |
||||
|
||||
int chiave; |
||||
for (IntPratica pratica : elenco) { |
||||
do { |
||||
chiave = rnd.nextInt(); |
||||
} while (ordinate.containsKey(chiave)); |
||||
ordinate.put(chiave, pratica); |
||||
} |
||||
TreeMap<Integer, IntPratica> mescolate = new TreeMap<Integer, IntPratica>(ordinate); |
||||
|
||||
long contatore = 0; |
||||
long fileEntryIdTemplate = ConfigurazioneLocalServiceUtil.findByC_ChiaveLong(companyId, |
||||
"conf.geniocivile.avviso.template.id.deposito.B2"); |
||||
for (Map.Entry<Integer, IntPratica> m : mescolate.entrySet()) { |
||||
IntPratica pratica = m.getValue(); |
||||
long intPraticaId = pratica.getIntPraticaId(); |
||||
DettPratica dettPratica = DettPraticaLocalServiceUtil |
||||
.getLastCompletedByIntPratica(intPraticaId); |
||||
|
||||
ServiceContext serviceContext = new ServiceContext(); |
||||
serviceContext.setCompanyId(dettPratica.getCompanyId()); |
||||
serviceContext.setScopeGroupId(dettPratica.getGroupId()); |
||||
serviceContext.setUserId(dettPratica.getUserId()); |
||||
|
||||
if (contatore++ < numeroSorteggiate) { |
||||
sorteggiate.add(pratica); |
||||
esito.add("<li>Sorteggiata: " + pratica.getNumeroProgetto() + " (id " + intPraticaId |
||||
+ ") del " + sdf.format(pratica.getDtPratica()) + " (" + m.getKey() + ")</li>"); |
||||
} else { |
||||
pratica.setDtSorteggio(dtSorteggio); |
||||
IntPraticaLocalServiceUtil.updateIntPratica(pratica); |
||||
|
||||
esito.add("<li>Non sorteggiata: " + pratica.getNumeroProgetto() + " (id " + intPraticaId |
||||
+ ") del " + sdf.format(pratica.getDtPratica()) + " (" + m.getKey() + ")</li>"); |
||||
} |
||||
} |
||||
esito.add("</ol>"); |
||||
} |
||||
if (sorteggiate.size() > 0) { |
||||
saveSorteggio(companyId, sorteggiate, dtSorteggio); |
||||
} |
||||
esito.add("Sorteggio terminato in data " + sdf.format(dtSorteggio) + ".<br><br>"); |
||||
|
||||
creaReportSorteggio(companyId, dtSorteggio, esito); |
||||
|
||||
// Salvataggio data ultimo sorteggio
|
||||
ServiceContext serviceContext = new ServiceContext(); |
||||
serviceContext.setCompanyId(companyId); |
||||
serviceContext.setScopeGroupId(-1L); |
||||
serviceContext.setUserId(UserLocalServiceUtil.getDefaultUserId(companyId)); |
||||
SimpleDateFormat simpleDateTimeFormat = new SimpleDateFormat(DATE_TIME_FORMAT); |
||||
esito.add("Sorteggio eseguito in data " + simpleDateTimeFormat.format(dtSorteggio)); |
||||
ConfigurazioneLocalServiceUtil.storeConfig(ConfigurazioneConstants.DATE_ULTIMO_SORTEGGIO, |
||||
simpleDateTimeFormat.format(dtSorteggio), serviceContext); |
||||
|
||||
// Log su file
|
||||
String path = PropsUtil.get("liferay.home") + "/sorteggi"; |
||||
try { |
||||
File folder = new File(path); |
||||
if (!folder.exists()) { |
||||
folder.mkdirs(); |
||||
} |
||||
FileWriter writer = new FileWriter(path + "/sorteggio-" |
||||
+ new SimpleDateFormat("yyyy-MM-dd").format(dtSorteggio) + ".txt"); |
||||
for (String string : esito) |
||||
writer.write(string + "\n"); |
||||
writer.close(); |
||||
} catch (IOException e) { |
||||
_log.error("Errore durante il salvataggio del report " + e.getMessage()); |
||||
} |
||||
|
||||
return esito; |
||||
} |
||||
|
||||
private static FileEntry creaReportSorteggio(long companyId, Date dtSorteggio, List<String> contenuto) |
||||
throws PortalException, SystemException { |
||||
|
||||
Role role = RoleLocalServiceUtil.getRole(companyId, RoleConstants.ADMINISTRATOR); |
||||
long userId = UserLocalServiceUtil.getRoleUsers(role.getRoleId(), 0, 1).get(0).getUserId(); |
||||
|
||||
Company company = CompanyLocalServiceUtil.getCompany(companyId); |
||||
Folder folderTemplate = DLAppLocalServiceUtil.getFolder(company.getGroupId(), |
||||
DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, "Template"); |
||||
FileEntry fileEntryTemplate = DLAppLocalServiceUtil.getFileEntry(folderTemplate.getGroupId(), |
||||
folderTemplate.getFolderId(), FILE_ENTRY_TEMPLATE_SORTEGGIO); |
||||
|
||||
Folder folderReport = DLAppLocalServiceUtil.getFolder(company.getGroupId(), |
||||
DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, FOLDER_SORTEGGIO); |
||||
|
||||
StringBuilder sb = new StringBuilder(contenuto.size()); |
||||
for (String riga : contenuto) { |
||||
sb.append(riga); |
||||
} |
||||
Map<String, Object> parameters = new HashMap<String, Object>(); |
||||
parameters.put("html", sb.toString()); |
||||
|
||||
ReportDto reportDto = new ReportDto(); |
||||
reportDto.setFileEntryIds(new long[] { fileEntryTemplate.getFileEntryId() }); |
||||
reportDto.setFolderId(folderReport.getFolderId()); |
||||
reportDto.setFileName(reportFileName(companyId, dtSorteggio)); |
||||
|
||||
reportDto.setHeader(""); |
||||
reportDto.setHeaderHeight(1); |
||||
reportDto.setFooter(""); |
||||
reportDto.setFooterHeight(40); |
||||
|
||||
reportDto.setParameters(parameters); |
||||
reportDto.setShowNumberOfPage(true); |
||||
reportDto.setType(ReportConstants.ReportType.VELOCITY_TO_PDF.toString()); |
||||
|
||||
String resourcePath = SorteggioPraticaUtil.class.getName().replaceAll("\\w+\\.", "../") |
||||
.replace(SorteggioPraticaUtil.class.getSimpleName(), "resource/asseverazioni"); |
||||
reportDto.setPortalURL(SorteggioPraticaUtil.class.getResource(resourcePath).getPath()); |
||||
|
||||
ReportUtil.generateReport(companyId, userId, reportDto, null); |
||||
|
||||
return null; |
||||
} |
||||
|
||||
private static String reportFileName(long companyId, Date dtSorteggio) { |
||||
Calendar calSorteggio = DateUtils.toCalendar(dtSorteggio); |
||||
String anno = String.valueOf(calSorteggio.get(Calendar.YEAR)); |
||||
int settimana = calSorteggio.get(Calendar.WEEK_OF_YEAR); |
||||
return reportFileName(companyId, anno, settimana); |
||||
} |
||||
|
||||
private static String reportFileName(long companyId, String anno, int settimana) { |
||||
return "Sorteggio_" + settimana + "_" + anno + "_" + companyId; |
||||
} |
||||
|
||||
private static void invioMailSorteggio(IntPratica intPratica, DettPratica dettPratica, |
||||
ServiceContext serviceContext) { |
||||
try { |
||||
long intPraticaId = intPratica.getIntPraticaId(); |
||||
List<Soggetto> soggetti = SoggettoLocalServiceUtil.getValidByIntPratica(intPraticaId); |
||||
|
||||
List<String> toList = new ArrayList<String>(); |
||||
for (Soggetto soggetto : soggetti) { |
||||
toList.add(soggetto.getEmail()); |
||||
} |
||||
String[] to = toList.toArray(new String[toList.size()]); |
||||
String[] cc = new String[0]; |
||||
String[] ccn = new String[0]; |
||||
|
||||
Territorio territorio = TerritorioLocalServiceUtil.getTerritorio(intPratica.getTerritorioId()); |
||||
Comune comune = ComuneLocalServiceUtil.getComune(territorio.getComuneId()); |
||||
Provincia provincia = ProvinciaLocalServiceUtil.fetchByC_C(territorio.getCompanyId(), |
||||
territorio.getCodiceProvincia()); |
||||
String url = FascicoloURLUtil.getFascicoloFEViewURL(intPratica.getCompanyId(), intPraticaId, |
||||
"/html/fascicolofe/view_fascicolo.jsp", ""); |
||||
|
||||
JSONObject templateVariables = JSONFactoryUtil.createJSONObject(); |
||||
templateVariables.put("comune", comune.getDenominazione()); |
||||
templateVariables.put("intervento", dettPratica.getDescLongIntervento()); |
||||
templateVariables.put("link", url); |
||||
templateVariables.put("praticaNum", intPratica.getNumeroProgetto()); |
||||
templateVariables.put("provincia", provincia.getProvincia()); |
||||
templateVariables.put("tipoPratica", |
||||
LanguageUtil.get(LocaleUtil.ITALIAN, "tipo-pratica-" + intPratica.getTipoPratica())); |
||||
|
||||
MailManagerUtil.sendMailByTemplatName(intPratica.getClass().getName(), intPraticaId, |
||||
"NOTIFICA-SORTEGGIO", to, cc, ccn, templateVariables, null, serviceContext); |
||||
} catch (PortalException | SystemException e) { |
||||
_log.error("Errore durante l'invio mail sorteggio della pratica " + intPratica.getIntPraticaId(), |
||||
e); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* @author Manifattura Web Group per Regione Siciliana |
||||
* |
||||
* @param companyId |
||||
* @param pratiche |
||||
* Lista di pratiche sorteggiate |
||||
* @param dtSorteggio |
||||
* Data del sorteggio |
||||
* @throws PortalException |
||||
* @throws SystemException |
||||
*/ |
||||
private static void saveSorteggio(long companyId, List<IntPratica> pratiche, Date dtSorteggio) |
||||
throws PortalException, SystemException { |
||||
|
||||
long numeroEstrazione = 1; |
||||
for (IntPratica pratica : pratiche) { |
||||
|
||||
Territorio territorio = TerritorioLocalServiceUtil.getTerritorio(pratica.getTerritorioId()); |
||||
Comune comune = ComuneLocalServiceUtil.getComune(territorio.getComuneId()); |
||||
Provincia provincia = ProvinciaLocalServiceUtil.fetchByC_C(territorio.getCompanyId(), |
||||
comune.getCodiceProvincia()); |
||||
|
||||
DettPratica dettPratica = DettPraticaLocalServiceUtil.getLastCompletedByIntPratica(pratica |
||||
.getIntPraticaId()); |
||||
|
||||
String committente = ""; |
||||
List<Soggetto> soggetti = SoggettoLocalServiceUtil |
||||
.findByIntPratica_TipologiaSoggetto_Aggiuntivo_Rimosso(pratica.getIntPraticaId(), |
||||
TipoSoggettoUtil.COMMITTENTE, false, false); |
||||
if (soggetti.size() > 0) { |
||||
Soggetto soggetto = soggetti.get(0); |
||||
|
||||
// Bug 32771
|
||||
if (Validator.isNotNull(soggetto.getNome()) && Validator.isNotNull(soggetto.getCognome())) |
||||
committente = soggetto.getNome() + " " + soggetto.getCognome(); |
||||
else if (Validator.isNotNull(soggetto.getDenominazione())) |
||||
committente = soggetto.getDenominazione(); |
||||
else |
||||
committente = soggetto.getLegaleRap(); |
||||
} |
||||
|
||||
// anno, mese, settimana della data sorteggio
|
||||
Calendar calSorteggio = Calendar.getInstance(); |
||||
calSorteggio.setTime(dtSorteggio); |
||||
|
||||
String anno = String.valueOf(calSorteggio.get(Calendar.YEAR)); |
||||
String mese = String.format("%02d", calSorteggio.get(Calendar.MONTH) + 1); |
||||
int settimana = calSorteggio.get(Calendar.WEEK_OF_YEAR); |
||||
|
||||
ServiceContext serviceContext = new ServiceContext(); |
||||
serviceContext.setCompanyId(dettPratica.getCompanyId()); |
||||
serviceContext.setScopeGroupId(dettPratica.getGroupId()); |
||||
serviceContext.setUserId(dettPratica.getUserId()); |
||||
|
||||
SorteggioLocalServiceUtil.addSorteggio(pratica.getIntPraticaId(), dettPratica.getDettPraticaId(), |
||||
anno, mese, settimana, dtSorteggio, "", APERTO, "", numeroEstrazione++, |
||||
pratica.getNumeroProgetto(), committente, comune.getDenominazione(), |
||||
provincia.getProvincia(), false, pratica.getIntPraticaId(), false, serviceContext); |
||||
|
||||
ControlloPratica controlloPratica = ControlloPraticaLocalServiceUtil.addControlloPratica( |
||||
pratica.getGroupId(), pratica.getUserId(), pratica.getIntPraticaId(), |
||||
dettPratica.getDettPraticaId(), true, serviceContext); |
||||
|
||||
long fileEntryIdTemplate = ConfigurazioneLocalServiceUtil.findByC_ChiaveLong( |
||||
serviceContext.getCompanyId(), "conf.geniocivile.avviso.template.id.deposito.S"); |
||||
|
||||
AvvisoLocalServiceUtil.addAvviso(pratica.getIntPraticaId(), "Avviso di sorteggio", dtSorteggio, |
||||
AvvisoUtil.TIPO_AVVISO_DIRETTO, StatoPraticaConstants.SOTTOPOSTA_A_PARERE, |
||||
fileEntryIdTemplate, dettPratica.getDettPraticaId(), DettPratica.class.getName(), |
||||
controlloPratica.getControlloPraticaId(), serviceContext); |
||||
|
||||
IntPraticaLocalServiceUtil.updateIntPraticaSorteggio(pratica.getIntPraticaId(), dtSorteggio, |
||||
StatoPraticaConstants.SOTTOPOSTA_A_PARERE); |
||||
|
||||
} |
||||
} |
||||
|
||||
private static void saveSorteggio(long companyId, long[] numeroEstrazione, List<Object[]> pratiche, |
||||
Date dtSorteggio, boolean mesePrecedente, boolean disabled) throws Exception { |
||||
|
||||
for (Object[] pratica : pratiche) { |
||||
|
||||
long praticaId = (Long) pratica[0]; |
||||
boolean esterna = (Boolean) pratica[1]; |
||||
long territorioId = (Long) pratica[2]; |
||||
String numeroProgetto = (String) pratica[3]; |
||||
String committente = (String) pratica[4]; |
||||
|
||||
long dettPraticaId = 0L; |
||||
long intPraticaId = 0L; |
||||
|
||||
Territorio territorio = TerritorioLocalServiceUtil.getTerritorio(territorioId); |
||||
Comune comune = ComuneLocalServiceUtil.getComune(territorio.getComuneId()); |
||||
Provincia provincia = ProvinciaLocalServiceUtil.fetchByC_C(territorio.getCompanyId(), |
||||
comune.getCodiceProvincia()); |
||||
if (!esterna) { |
||||
IntPratica intPratica = IntPraticaLocalServiceUtil.getIntPratica(praticaId); |
||||
|
||||
intPraticaId = intPratica.getIntPraticaId(); |
||||
|
||||
DettPratica dettPratica = DettPraticaLocalServiceUtil.getLastCompletedByIntPratica(intPratica |
||||
.getIntPraticaId()); |
||||
dettPraticaId = dettPratica.getDettPraticaId(); |
||||
List<Soggetto> soggetti = SoggettoLocalServiceUtil |
||||
.findByIntPratica_TipologiaSoggetto_Aggiuntivo_Rimosso(intPratica.getIntPraticaId(), |
||||
TipoSoggettoUtil.COMMITTENTE, false, false); |
||||
if (soggetti.size() > 0) { |
||||
// Bug 32771
|
||||
if (Validator.isNotNull(soggetti.get(0).getNome()) |
||||
&& Validator.isNotNull(soggetti.get(0).getCognome())) |
||||
committente = soggetti.get(0).getNome() + StringPool.SPACE |
||||
+ soggetti.get(0).getCognome(); |
||||
else |
||||
committente = Validator.isNotNull(soggetti.get(0).getDenominazione()) ? soggetti.get( |
||||
0).getDenominazione() : soggetti.get(0).getLegaleRap(); |
||||
} |
||||
} |
||||
|
||||
// anno, mese della data sorteggio
|
||||
Calendar calSorteggio = DateUtils.toCalendar(dtSorteggio); |
||||
String anno = String.valueOf(calSorteggio.get(Calendar.YEAR)); |
||||
String mese = StringUtils.leftPad(String.valueOf(calSorteggio.get(Calendar.MONTH) + 1), 2, '0'); |
||||
int settimana = calSorteggio.get(Calendar.WEEK_OF_YEAR); |
||||
|
||||
ServiceContext serviceContext = new ServiceContext(); |
||||
serviceContext.setCompanyId(companyId); |
||||
serviceContext.setScopeGroupId(territorio.getGroupId()); |
||||
serviceContext.setUserId(UserLocalServiceUtil.getDefaultUserId(companyId)); |
||||
|
||||
SorteggioLocalServiceUtil.addSorteggio(intPraticaId, dettPraticaId, anno, mese, settimana, |
||||
dtSorteggio, StringPool.BLANK, APERTO, StringPool.BLANK, numeroEstrazione[0]++, |
||||
numeroProgetto, committente, comune.getDenominazione(), provincia.getProvincia(), |
||||
esterna, (!esterna ? 0L : praticaId), mesePrecedente, serviceContext); |
||||
|
||||
if (!esterna) { |
||||
IntPraticaLocalServiceUtil.updateIntPraticaSorteggio(praticaId, dtSorteggio); |
||||
} else { |
||||
SorteggioLocalServiceUtil.updateDataSorteggioPraticaEsterna(praticaId, dtSorteggio); |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
public static Date getDateMinSorteggioAnno(Date dt) { |
||||
|
||||
Date[] rangeAnno = rangeSorteggioAnno(getMeseSorteggio(dt)); |
||||
return rangeAnno[0]; |
||||
} |
||||
|
||||
public static FileEntry getFileEntrySorteggio(long companyId, long groupId, Date dtSorteggio) |
||||
throws PortalException, SystemException { |
||||
|
||||
Company company = CompanyLocalServiceUtil.getCompany(companyId); |
||||
|
||||
Folder folder = DLAppLocalServiceUtil.getFolder(company.getGroupId(), |
||||
DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, FOLDER_SORTEGGIO); |
||||
String fileName = reportFileName(companyId, dtSorteggio); |
||||
|
||||
FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(groupId, folder.getFolderId(), fileName); |
||||
|
||||
return fileEntry; |
||||
} |
||||
|
||||
public static FileEntry getFileEntrySorteggio(long companyId, long groupId, int settimana, String anno) |
||||
throws PortalException, SystemException { |
||||
|
||||
Company company = CompanyLocalServiceUtil.getCompany(companyId); |
||||
|
||||
Folder folder = DLAppLocalServiceUtil.getFolder(company.getGroupId(), |
||||
DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, FOLDER_SORTEGGIO); |
||||
String fileName = reportFileName(companyId, anno, settimana); |
||||
|
||||
return DLAppLocalServiceUtil.getFileEntry(groupId, folder.getFolderId(), fileName); |
||||
} |
||||
|
||||
/* |
||||
* Metodi Utilità |
||||
*/ |
||||
|
||||
private static void generateReport(long companyId, Date dtSorteggio, long gropuId) throws Exception { |
||||
|
||||
Role role = RoleLocalServiceUtil.getRole(companyId, RoleConstants.ADMINISTRATOR); |
||||
long userId = UserLocalServiceUtil.getRoleUsers(role.getRoleId(), 0, 1).get(0).getUserId(); |
||||
|
||||
// anno, mese della data sorteggio
|
||||
Calendar calSorteggio = DateUtils.toCalendar(dtSorteggio); |
||||
String anno = String.valueOf(calSorteggio.get(Calendar.YEAR)); |
||||
String mese = StringUtils.leftPad(String.valueOf(calSorteggio.get(Calendar.MONTH) + 1), 2, '0'); |
||||
int settimana = calSorteggio.get(Calendar.WEEK_OF_YEAR); |
||||
|
||||
List<Sorteggio> sorteggios = new ArrayList<Sorteggio>( |
||||
SorteggioLocalServiceUtil.findByGroupId_Anno_Mese_Settimana(gropuId, anno, mese, settimana)); |
||||
|
||||
List<ReportSorteggioBean> reportSorteggioBeans = new ArrayList<ReportSorteggioBean>(sorteggios.size()); |
||||
for (Sorteggio sorteggio : sorteggios) { |
||||
ReportSorteggioBean bean = ReportSorteggioBeanBuilder.build(sorteggio); |
||||
reportSorteggioBeans.add(bean); |
||||
} |
||||
|
||||
Collections.sort(reportSorteggioBeans, new Comparator<ReportSorteggioBean>() { |
||||
|
||||
@Override |
||||
public int compare(ReportSorteggioBean b1, ReportSorteggioBean b2) { |
||||
|
||||
int compare = new Long(b1.getNumeroEstrazione()).compareTo(new Long(b2.getNumeroEstrazione())); |
||||
int compareProvincia = b1.getProvincia().compareTo(b2.getProvincia()); |
||||
|
||||
if (compareProvincia == 0) { |
||||
if (compare == 0) { |
||||
if (Validator.isNull(b1.getFascia())) { |
||||
return -1; |
||||
} |
||||
compare = b1.getFascia().compareTo(b2.getFascia()); |
||||
if (compare == 0) { |
||||
return new Long(b1.getPratica()).compareTo(new Long(b2.getPratica())); |
||||
} |
||||
return compare; |
||||
} |
||||
return compare; |
||||
} |
||||
|
||||
return compareProvincia; |
||||
} |
||||
}); |
||||
|
||||
// vuoto per forzare visualizzazione
|
||||
if (reportSorteggioBeans.isEmpty()) { |
||||
reportSorteggioBeans.add(new ReportSorteggioBean()); |
||||
} |
||||
Company company = CompanyLocalServiceUtil.getCompany(companyId); |
||||
Folder folderTemplate = DLAppLocalServiceUtil.getFolder(company.getGroupId(), |
||||
DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, FOLDER_TEMPLATE_SORTEGGIO); |
||||
FileEntry fileEntryTemplate = DLAppLocalServiceUtil.getFileEntry(folderTemplate.getGroupId(), |
||||
folderTemplate.getFolderId(), FILE_ENTRY_TEMPLATE_SORTEGGIO); |
||||
|
||||
String fileName = MessageFormat.format(FILE_ENTRY_SORTEGGIO, mese, anno, gropuId); |
||||
|
||||
Folder folder = null; |
||||
try { |
||||
folder = DLAppLocalServiceUtil.getFolder(company.getGroupId(), |
||||
DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, FOLDER_SORTEGGIO); |
||||
} catch (PortalException e) { |
||||
folder = DLAppLocalServiceUtil.addFolder(userId, company.getGroupId(), |
||||
DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, FOLDER_SORTEGGIO, StringPool.BLANK, |
||||
new ServiceContext()); |
||||
} |
||||
|
||||
Map<String, Object> paramaters = new HashMap<String, Object>(); |
||||
|
||||
paramaters.put("DATA_SORTEGGIO", |
||||
new SimpleDateFormat("MMMM yyyy", java.util.Locale.ITALY).format(dtSorteggio)); |
||||
|
||||
int fasciaAMese = 0; |
||||
int fasciaAMesiPrec = 0; |
||||
int fasciaBMese = 0; |
||||
int fasciaBMesiPrec = 0; |
||||
int fasciaCMese = 0; |
||||
int fasciaCMesiPrec = 0; |
||||
|
||||
// Task 32561
|
||||
int zona4Mese = 0; |
||||
int zona4MesePrec = 0; |
||||
|
||||
for (ReportSorteggioBean bean : reportSorteggioBeans) { |
||||
if (Validator.isNotNull(bean.getFascia())) { |
||||
if (bean.getFascia().equals(Constants.FASCIA_A)) { |
||||
if (bean.getFase().equals("1")) { |
||||
fasciaAMese++; |
||||
} else if (bean.getFase().equals("2")) { |
||||
fasciaAMesiPrec++; |
||||
} |
||||
} else if (bean.getFascia().equals(Constants.FASCIA_B)) { |
||||
if (bean.getFase().equals("1")) { |
||||
fasciaBMese++; |
||||
} else if (bean.getFase().equals("2")) { |
||||
fasciaBMesiPrec++; |
||||
} |
||||
} else if (bean.getFascia().equals(Constants.FASCIA_C)) { |
||||
if (bean.getFase().equals("1")) { |
||||
fasciaCMese++; |
||||
} else if (bean.getFase().equals("2")) { |
||||
fasciaCMesiPrec++; |
||||
} |
||||
} |
||||
} |
||||
|
||||
// Task 32561
|
||||
if (Validator.isNotNull(bean.getZona())) { |
||||
if (("livorno".equalsIgnoreCase(bean.getProvincia()) || "grosseto".equalsIgnoreCase(bean |
||||
.getProvincia())) && bean.getZona().equals(Constants.ZONA_4)) { |
||||
if (bean.getFase().equals("1")) { |
||||
zona4Mese++; |
||||
} else if (bean.getFase().equals("2")) { |
||||
zona4MesePrec++; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
paramaters.put("FASCIA_A_MESE", fasciaAMese); |
||||
paramaters.put("FASCIA_A_MESI_PREC", fasciaAMesiPrec); |
||||
paramaters.put("FASCIA_B_MESE", fasciaBMese); |
||||
paramaters.put("FASCIA_B_MESI_PREC", fasciaBMesiPrec); |
||||
paramaters.put("FASCIA_C_MESE", fasciaCMese); |
||||
paramaters.put("FASCIA_C_MESI_PREC", fasciaCMesiPrec); |
||||
|
||||
// Task 32561
|
||||
paramaters.put("ZONA_4_MESE", zona4Mese); |
||||
paramaters.put("ZONA_4_MESE_PREC", zona4MesePrec); |
||||
|
||||
// ServiceContext serviceContext = new ServiceContext();
|
||||
// serviceContext.setCompanyId(companyId);
|
||||
// serviceContext.setScopeGroupId(groupId);
|
||||
// serviceContext.setUserId(userId);
|
||||
|
||||
ReportDto reportDto = new ReportDto(); |
||||
reportDto.setFileEntryIds(new long[] { fileEntryTemplate.getFileEntryId() }); |
||||
reportDto.setFolderId(folder.getFolderId()); |
||||
reportDto.setFileName(fileName); |
||||
reportDto.setParameters(paramaters); |
||||
// reportDto.setDataSource(reportSorteggioBeans);
|
||||
reportDto.setShowNumberOfPage(true); |
||||
reportDto.setType(ReportConstants.ReportType.JRXML_TO_PDF.toString()); |
||||
|
||||
ReportResultDto result = ReportUtil |
||||
.generateReport(companyId, userId, reportDto, reportSorteggioBeans); |
||||
long idFileEntry = result.getFileEntryIds()[0]; |
||||
|
||||
/* |
||||
* Message messageReport = new Message(); |
||||
* messageReport.put(ReportConstants.FILE_ENTRY_ID_TEMPLATE, |
||||
* fileEntryTemplate.getFileEntryId()); |
||||
* messageReport.put(ReportConstants.FOLDER_ID_REPORT, |
||||
* folder.getFolderId()); messageReport.put(ReportConstants.REPORT_NAME, |
||||
* fileName); messageReport.put(ReportConstants.SERVICE_CONTEXT, |
||||
* serviceContext); messageReport.put(ReportConstants.REPORT_PARAMETERS, |
||||
* paramaters); messageReport.put(ReportConstants.REPORT_DATASOURCE, |
||||
* reportSorteggioBeans); long idFileEntry = (Long) |
||||
* MessageBusUtil.sendSynchronousMessage(ReportDestinationNames.SYNC, |
||||
* messageReport, 1); |
||||
*/ |
||||
|
||||
if (Validator.isNull(idFileEntry)) { |
||||
throw new NoSuchFileException(); |
||||
} |
||||
|
||||
} |
||||
|
||||
private static String getMeseSorteggio(Date dtSorteggio) { |
||||
|
||||
Calendar calendar = getSorteggio(dtSorteggio); |
||||
return StringUtils.leftPad(String.valueOf(calendar.get(Calendar.MONTH) + 1), 2, '0'); |
||||
} |
||||
|
||||
private static Calendar getSorteggio(Date dtSorteggio) { |
||||
|
||||
Calendar calendar = Calendar.getInstance(); |
||||
calendar.setTime(dtSorteggio); |
||||
calendar.add(Calendar.MONTH, -1); |
||||
return calendar; |
||||
} |
||||
|
||||
private static Date[] rangeSorteggioAnno(String mese) { |
||||
|
||||
// min
|
||||
Calendar calMin = getCalendarNoTimeFirstDay(); |
||||
if (mese.equalsIgnoreCase("12")) { |
||||
calMin.add(Calendar.YEAR, -1); |
||||
} |
||||
calMin.set(Calendar.MONTH, (Integer.parseInt(mese) - 1)); |
||||
calMin.add(Calendar.MONTH, -11); |
||||
// max
|
||||
Calendar calMax = getCalendarNoTimeFirstDay(); |
||||
if (mese.equalsIgnoreCase("12")) { |
||||
calMax.add(Calendar.YEAR, -1); |
||||
} |
||||
calMax.set(Calendar.MONTH, (Integer.parseInt(mese) - 1)); |
||||
return new Date[] { calMin.getTime(), calMax.getTime() }; |
||||
} |
||||
|
||||
private static Calendar getCalendarNoTimeFirstDay() { |
||||
|
||||
Calendar cal = Calendar.getInstance(); |
||||
cal.set(Calendar.DATE, 1); |
||||
cal.set(Calendar.HOUR_OF_DAY, 0); |
||||
cal.set(Calendar.MINUTE, 0); |
||||
cal.set(Calendar.SECOND, 0); |
||||
cal.set(Calendar.MILLISECOND, 0); |
||||
return cal; |
||||
} |
||||
} |
Caricamento…
Reference in new issue