Aggiornata scrittura di pers_orario

This commit is contained in:
Giancarlo Panichi 2022-10-14 19:38:10 +02:00
parent 99a70b4917
commit 4b6cd01797
7 changed files with 307 additions and 19 deletions

View File

@ -183,7 +183,11 @@ public class EPASPersonWorkingTimeService {
List<EPASPersonWorkingTimeDTO> pwtDTOList=new LinkedList<>();
for(EPASPersons epasPerson:epasPersons) {
EPASPersonWorkingTimeDTO pwtDTO=getByPersonId(epasPerson.getId());
pwtDTOList.add(pwtDTO);
if(pwtDTO!=null) {
pwtDTOList.add(pwtDTO);
} else {
logger.error("Not exists Working Time for Person id: {}", epasPerson.getId());
}
}
return pwtDTOList;
}

View File

@ -0,0 +1,40 @@
package it.cnr.isti.epasmed.sistemainformativo.repository;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import it.cnr.isti.epasmed.sistemainformativo.model.SIPersOrario;
@Repository
public class SIPersOrarioRepository {
private static final Logger logger = LoggerFactory.getLogger(SIPersOrarioRepository.class);
private JdbcTemplate jdbcTemplate;
//
public SIPersOrarioRepository(final @Qualifier("sistemaInformativoDataSource") DataSource dataSource) {
super();
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public void writeNewFlux(Long fluxId, SIPersOrario siPersOrario) {
jdbcTemplate.update(
"INSERT INTO epas_pers_orario (id,idpersona,cf,dal,al,descrizione,"
+ "lun,mar,mer,gio,ven,sab,percentuale,turno,ore_turno,festivo,notturno,"
+ "data_mod,flag_del,id_flusso)" + " VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
siPersOrario.getId(), siPersOrario.getIdpersona(), siPersOrario.getCf(), siPersOrario.getDal(),
siPersOrario.getAl(), siPersOrario.getDescrizione(), siPersOrario.getLun(), siPersOrario.getMar(),
siPersOrario.getMer(), siPersOrario.getGio(), siPersOrario.getVen(), siPersOrario.getSab(),
siPersOrario.getPercentuale(), siPersOrario.getTurno(), siPersOrario.getOre_turno(),
siPersOrario.getFestivo(), siPersOrario.getNotturno(), siPersOrario.getData_mod(),
siPersOrario.getFlag_del(), fluxId);
logger.debug("Writed SIPersOrario: {}", siPersOrario);
}
}

View File

@ -0,0 +1,32 @@
package it.cnr.isti.epasmed.sistemainformativo.service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import it.cnr.isti.epasmed.sistemainformativo.model.SIPersOrario;
import it.cnr.isti.epasmed.sistemainformativo.repository.SIPersOrarioRepository;
/**
* Service class for managing PersOrario.
*/
@Service
@Transactional("sistemaInformativoTransactionManager")
public class SIPersOrarioService {
private static final Logger log = LoggerFactory.getLogger(SIPersOrarioService.class);
private final SIPersOrarioRepository siPersOrarioRepository;
public SIPersOrarioService(SIPersOrarioRepository siPersOrarioRepository) {
super();
this.siPersOrarioRepository = siPersOrarioRepository;
}
public void writeNewFlux(Long fluxId, SIPersOrario siPersOrario) {
log.debug("Write SIPersOrario Flux = {}", fluxId);
siPersOrarioRepository.writeNewFlux(fluxId, siPersOrario);
}
}

View File

@ -29,6 +29,7 @@ import it.cnr.isti.epasmed.domain.TabsSI;
import it.cnr.isti.epasmed.domain.TimeCardsReporting;
import it.cnr.isti.epasmed.epas.dto.EPASAffiliationsDTO;
import it.cnr.isti.epasmed.epas.dto.EPASGroupsDTO;
import it.cnr.isti.epasmed.epas.dto.EPASPersonWorkingTimeDTO;
import it.cnr.isti.epasmed.epas.dto.EPASPersonsDTO;
import it.cnr.isti.epasmed.epas.mapper.EPASAffiliationsMapper;
import it.cnr.isti.epasmed.epas.mapper.EPASGroupsMapper;
@ -50,6 +51,7 @@ import it.cnr.isti.epasmed.epas.service.EPASAffiliationsService;
import it.cnr.isti.epasmed.epas.service.EPASGroupsService;
import it.cnr.isti.epasmed.epas.service.EPASLeavesService;
import it.cnr.isti.epasmed.epas.service.EPASOffSiteWorksService;
import it.cnr.isti.epasmed.epas.service.EPASPersonWorkingTimeService;
import it.cnr.isti.epasmed.epas.service.EPASPersonsService;
import it.cnr.isti.epasmed.epas.service.EPASTimeCardsService;
import it.cnr.isti.epasmed.epas.service.EPASValidatesService;
@ -65,6 +67,7 @@ import it.cnr.isti.epasmed.sistemainformativo.model.SIGruppi;
import it.cnr.isti.epasmed.sistemainformativo.model.SIGruppiPers;
import it.cnr.isti.epasmed.sistemainformativo.model.SILavoroFuoriSede;
import it.cnr.isti.epasmed.sistemainformativo.model.SIOrario;
import it.cnr.isti.epasmed.sistemainformativo.model.SIPersOrario;
import it.cnr.isti.epasmed.sistemainformativo.model.SITelefoni;
import it.cnr.isti.epasmed.sistemainformativo.service.SIAnagraficoService;
import it.cnr.isti.epasmed.sistemainformativo.service.SIAspettativeService;
@ -76,6 +79,7 @@ import it.cnr.isti.epasmed.sistemainformativo.service.SIGruppiService;
import it.cnr.isti.epasmed.sistemainformativo.service.SILavoroFuoriSedeService;
import it.cnr.isti.epasmed.sistemainformativo.service.SIMasterLogService;
import it.cnr.isti.epasmed.sistemainformativo.service.SIOrarioService;
import it.cnr.isti.epasmed.sistemainformativo.service.SIPersOrarioService;
import it.cnr.isti.epasmed.sistemainformativo.service.SITelefoniService;
@Service
@ -124,6 +128,8 @@ public class SyncService {
SILavoroFuoriSedeService siLavoroFuoriSedeService;
@Autowired
SIAspettativeService siAspettativeService;
@Autowired
SIPersOrarioService siPersOrarioService;
@Autowired
EPASPersonsService epasPersonsService;
@ -145,6 +151,8 @@ public class SyncService {
EPASAbsenceTypesService epasAbsenceTypeService;
@Autowired
EPASLeavesService epasLeavesService;
@Autowired
EPASPersonWorkingTimeService epasPersonWorkingTimeService;
private boolean banagrafico;
private boolean bemail;
@ -221,7 +229,7 @@ public class SyncService {
}
public void executeWriteOffSiteWorks(String year, String month) throws Exception {
public void executeWritesOffSiteWorks(String year, String month) throws Exception {
setBWriteTables();
List<TabsSI> tabsSI = tabsSIService.getAllTabsSI();
Long fluxId = siMasterLogService.startFluxWrites();
@ -230,7 +238,7 @@ public class SyncService {
}
public void executeWriteLeaves(String year, String month) throws Exception {
public void executeWritesLeaves(String year, String month) throws Exception {
setBWriteTables();
List<TabsSI> tabsSI = tabsSIService.getAllTabsSI();
Long fluxId = siMasterLogService.startFluxWrites();
@ -239,6 +247,15 @@ public class SyncService {
}
public void executeWritesPersonWorkingTime(String year, String month) throws Exception {
setBWriteTables();
List<TabsSI> tabsSI = tabsSIService.getAllTabsSI();
Long fluxId = siMasterLogService.startFluxWrites();
writePersonWorkingTimeData(fluxId, tabsSI, year, month);
siMasterLogService.closeFluxWrites(fluxId, writeTabs());
}
private void readData(List<TabsSI> tabsSI) {
// TabsSI posizioniTab = null;
// TabsSI prorogheTab = null;
@ -1015,6 +1032,31 @@ public class SyncService {
}
}
private void writePersonWorkingTimeData(Long fluxId, List<TabsSI> tabsSI, String year, String month)
throws Exception {
logger.info("Report {}-{}", year, month);
LocalDateTime now = LocalDateTime.now();
for (TabsSI tab : tabsSI) {
logger.info("TabSI: {}", tab);
if (tab.getOperazioni() != null && !tab.getOperazioni().isEmpty()
&& tab.getOperazioni().compareTo("W") == 0) {
if (tab.getNome() == null || tab.getNome().isEmpty()) {
continue;
}
switch (tab.getNome()) {
case "pers_orario":
syncPersOrario(fluxId, tab, year, month, now);
break;
default:
break;
}
}
}
}
private void syncOrario(Long fluxId, TabsSI tab) {
if (tab.getIdFlusso() == null || tab.getIdFlusso().longValue() == 0) {
logger.error("Invalid Id Flusso for tab: {}", tab);
@ -1093,7 +1135,7 @@ public class SyncService {
logger.error("Invalid FiscalCode: {}", offSiteWorks.getPerson().getFiscalCode());
continue;
} else {
logger.info("FiscalCode: {}", offSiteWorks.getPerson().getFiscalCode());
logger.debug("FiscalCode: {}", offSiteWorks.getPerson().getFiscalCode());
}
Integer idPersona = 0;
@ -1104,7 +1146,7 @@ public class SyncService {
continue;
}
logger.info("Date: {}", offSiteWorks.getDate());
logger.debug("Date: {}", offSiteWorks.getDate());
java.sql.Date date = null;
try {
@ -1181,21 +1223,21 @@ public class SyncService {
return;
}
nextYear = nextYear + 1;
logger.info("Next Year: {}", nextYear.toString());
logger.debug("Next Year: {}", nextYear.toString());
List<EPASLeaves> epasLeavesList = epasLeavesService.getLeavesByOfficeId(ISTI_OFFICE_ID, year, "true");
logger.info("Current Year Leaves: {}", epasLeavesList);
logger.debug("Current Year Leaves: {}", epasLeavesList);
List<EPASLeaves> epasLeavesNextList = epasLeavesService.getLeavesByOfficeId(ISTI_OFFICE_ID, nextYear.toString(),
"true");
logger.info("Next Year Leaves: {}", epasLeavesNextList);
logger.debug("Next Year Leaves: {}", epasLeavesNextList);
if (epasLeavesList == null || epasLeavesList.isEmpty()) {
logger.info("Leaves not found for: {}", year);
logger.debug("Leaves not found for: {}", year);
epasLeavesList = new LinkedList<>();
}
if (epasLeavesNextList == null || epasLeavesNextList.isEmpty()) {
logger.info("Leaves not found for: {}", nextYear);
logger.debug("Leaves not found for: {}", nextYear);
epasLeavesNextList = new LinkedList<>();
}
@ -1228,7 +1270,7 @@ public class SyncService {
LinkedHashMap<String, EPASAbsenceTypes> epasAbsenceTypeMap) {
// SI
for (EPASLeaves leave : epasLeavesList) {
logger.info("Writing Leave: {}", leave);
logger.debug("Writing Leave: {}", leave);
if (leave == null || leave.getPerson() == null) {
logger.error("Invalid Leave: {}", leave);
continue;
@ -1238,7 +1280,7 @@ public class SyncService {
logger.error("Invalid FiscalCode: {}", leave.getPerson().getFiscalCode());
continue;
} else {
logger.info("FiscalCode: {}", leave.getPerson().getFiscalCode());
logger.debug("FiscalCode: {}", leave.getPerson().getFiscalCode());
}
Integer idPersona = 0;
@ -1268,7 +1310,7 @@ public class SyncService {
continue;
}
logger.info("Start Date: {}", leave.getStart());
logger.debug("Start Date: {}", leave.getStart());
java.sql.Date startDate = null;
if (leave.getStart() == null || leave.getStart().isEmpty()) {
logger.error("Invalid start date: {}", leave.getStart());
@ -1282,7 +1324,7 @@ public class SyncService {
continue;
}
logger.info("End Date: {}", leave.getEnd());
logger.debug("End Date: {}", leave.getEnd());
java.sql.Date endDate = null;
if (leave.getEnd() != null && !leave.getEnd().isEmpty()) {
try {
@ -1306,10 +1348,9 @@ public class SyncService {
try {
id = Integer.parseInt(firstAbsence.getId());
} catch (NumberFormatException e) {
logger.error("Invalid id for first absence: {}",firstAbsence);
logger.error("Invalid id for first absence: {}", firstAbsence);
}
}
SIAspettative siAspettative = new SIAspettative(leave.getPerson().getFiscalCode(),
epasAbsenceType.getDescription(), startDate, endDate, dataMod, SI_FLAG_DEL_FALSE, fluxId, id,
@ -1320,6 +1361,111 @@ public class SyncService {
}
}
private void syncPersOrario(Long fluxId, TabsSI tab, String year, String month, LocalDateTime now)
throws Exception {
if (tab.getIdFlusso() == null || tab.getIdFlusso().longValue() == 0) {
logger.error("Invalid Id Flusso for tab: {}", tab);
return;
}
logger.info("Reference: {}-{}", year, month);
List<EPASPersonWorkingTimeDTO> epasPersonWorkingTimeDTOList = epasPersonWorkingTimeService
.getList(ISTI_OFFICE_ID);
if (epasPersonWorkingTimeDTOList == null || epasPersonWorkingTimeDTOList.isEmpty()) {
logger.error("PersonWorkingTimeDTOList not found");
return;
} else {
logger.info("PersonWorkingTimeDTOList size: {}",epasPersonWorkingTimeDTOList.size());
}
// SI
for (EPASPersonWorkingTimeDTO pwtDTO : epasPersonWorkingTimeDTOList) {
logger.info("Writing Person Working Time: {}", pwtDTO);
if (pwtDTO == null) {
logger.error("Invalid Person Working Time: {}", pwtDTO);
continue;
}
Integer id = 0;
if (pwtDTO.getId() == null || pwtDTO.getId().isEmpty()) {
logger.error("Invalid Id: {}", pwtDTO.getId());
continue;
} else {
logger.debug("Id: {}", pwtDTO.getId());
try {
id = Integer.parseInt(pwtDTO.getId());
} catch (NumberFormatException e) {
logger.error("Invalid Id: {}", pwtDTO.getId());
continue;
}
}
Integer idPersona = 0;
if (pwtDTO.getIdPersona() == null || pwtDTO.getIdPersona().isEmpty()) {
logger.error("Invalid Id Persona: {}", pwtDTO.getIdPersona());
continue;
} else {
logger.debug("Id Persona: {}", pwtDTO.getIdPersona());
try {
idPersona = Integer.parseInt(pwtDTO.getIdPersona());
} catch (NumberFormatException e) {
logger.error("Invalid Id Persona: {}", pwtDTO.getIdPersona());
continue;
}
}
if (pwtDTO.getCf() == null || pwtDTO.getCf().isEmpty()) {
logger.error("Invalid FiscalCode: {}", pwtDTO.getCf());
continue;
} else {
logger.debug("FiscalCode: {}", pwtDTO.getCf());
}
logger.debug("Dal: {}", pwtDTO.getDal());
if (pwtDTO.getDal() == null || pwtDTO.getDal().isEmpty()) {
logger.error("Invalid dal date: {}", pwtDTO.getDal());
continue;
}
java.sql.Date startDate = null;
try {
startDate = java.sql.Date.valueOf(pwtDTO.getDal());
} catch (Exception e) {
logger.error("Invalid dal date format: {}", pwtDTO.getDal());
continue;
}
logger.debug("Al: {}", pwtDTO.getAl());
java.sql.Date endDate = null;
if (pwtDTO.getAl() != null && !pwtDTO.getAl().isEmpty()) {
try {
endDate = java.sql.Date.valueOf(pwtDTO.getAl());
} catch (Exception e) {
logger.error("Invalid al date format: {}", pwtDTO.getAl());
}
}
Timestamp dataMod = Timestamp.valueOf(now);
SIPersOrario siPersOrario = new SIPersOrario(id, idPersona, pwtDTO.getCf(), startDate, endDate,
pwtDTO.getDescrizione(), pwtDTO.getLun(), pwtDTO.getMar(), pwtDTO.getMer(), pwtDTO.getGio(),
pwtDTO.getVen(), pwtDTO.getSab(), pwtDTO.getPercentuale(), pwtDTO.getTurno(), pwtDTO.getOre_turno(),
pwtDTO.getFestivo(), pwtDTO.getNotturno(), dataMod, SI_FLAG_DEL_FALSE, fluxId);
logger.info("Write SIPersOrario: {}", siPersOrario);
siPersOrarioService.writeNewFlux(fluxId, siPersOrario);
}
logger.info("SIPersOrario Updated");
bpers_orario = true;
tab.setIdFlusso(fluxId);
tab.setLastUpdate(now);
tabsSIService.updateTabsSI(tab);
}
private void syncCartelliniRendicontazioni(Long fluxId, TabsSI tab, String year, String month, LocalDateTime now,
TimeCardsReporting timeCardsReporting) throws Exception {
if (tab.getIdFlusso() == null || tab.getIdFlusso().longValue() == 0) {

View File

@ -213,7 +213,7 @@ public class SyncResource {
@RequestParam("month") String month) throws Exception {
logger.info("REST request syncWritesOffSiteWorks)");
ResponseEntity<Void> res;
syncService.executeWriteOffSiteWorks(year, month);
syncService.executeWritesOffSiteWorks(year, month);
String msg = "Rendicontazione del lavoro fuori sede eseguita correttamente.";
logger.info(msg);
res = ResponseEntity.noContent().headers(HeaderUtil.createAlert(applicationName, msg, "")).build();
@ -240,12 +240,39 @@ public class SyncResource {
@RequestParam("month") String month) throws Exception {
logger.info("REST request syncWritesLeaves)");
ResponseEntity<Void> res;
syncService.executeWriteLeaves(year, month);
syncService.executeWritesLeaves(year, month);
String msg = "Rendicontazione delle Aspettative eseguita correttamente.";
logger.info(msg);
res = ResponseEntity.noContent().headers(HeaderUtil.createAlert(applicationName, msg, "")).build();
return res;
}
/**
* {@code GET /sync/writesPersonWorkingTime} : Reports Person Working Time from ePAS in
* SistemaInformativo.
*
* @param year the year.
* @param month the month.
* @return the {@link ResponseEntity} with status {@code 201 (Executed)} or with
* status {@code 400 (Bad Request)} if there is a error.
* @throws Exception
*
*
*/
@GetMapping("/sync/writesPersonWorkingTime")
@PreAuthorize("hasAuthority(\"" + AuthoritiesConstants.ADMIN + "\")")
public ResponseEntity<Void> syncWritesPersonWorkingTime(@RequestParam("year") String year,
@RequestParam("month") String month) throws Exception {
logger.info("REST request syncWritesPersonWorkingTime)");
ResponseEntity<Void> res;
syncService.executeWritesPersonWorkingTime(year, month);
String msg = "Rendicontazione di Pers_Orario eseguita correttamente.";
logger.info(msg);
res = ResponseEntity.noContent().headers(HeaderUtil.createAlert(applicationName, msg, "")).build();
return res;
}
}

View File

@ -50,7 +50,7 @@ import it.cnr.isti.epasmed.web.rest.TestUtil;
@AutoConfigureMockMvc
@WithMockUser(authorities = AuthoritiesConstants.ADMIN)
@SpringBootTest(classes = EpasmedApp.class)
@EnabledIf("true")
@EnabledIf("false")
public class EPASContractsResourceIT {
private final Logger logger = LoggerFactory.getLogger(getClass());

View File

@ -3,6 +3,13 @@ package it.cnr.isti.epasmed.web.rest.sync;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoUnit;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
@ -27,6 +34,9 @@ import it.cnr.isti.epasmed.security.AuthoritiesConstants;
@EnabledIf("false")
public class SyncResourceIT {
private static final Logger logger = LoggerFactory.getLogger(SyncResourceIT.class);
private final Logger log = LoggerFactory.getLogger(getClass());
private static final String YEAR = "2022";
private static final String MONTH = "9";
@ -90,4 +100,33 @@ public class SyncResourceIT {
restSyncMockMvc.perform(get("/api/sync/writesLeaves?year=" + YEAR + "&month=" + MONTH));
}
@Test
public void syncWritesPersonWorkingTime() throws Exception {
restSyncMockMvc.perform(get("/api/sync/writesPersonWorkingTime?year=" + YEAR + "&month=" + MONTH));
}
@Test
public void testDataMod() throws Exception {
// "2021-02-03T09:49:05.231072"
DateTimeFormatter formatter = new DateTimeFormatterBuilder().parseCaseInsensitive()
.append(DateTimeFormatter.ISO_LOCAL_DATE_TIME).optionalStart().appendPattern(".SSSSSS").optionalEnd()
.optionalStart().appendZoneOrOffsetId().optionalEnd().toFormatter();
//DateTimeFormatter formatterDataMod = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
Timestamp dataMod;
try {
LocalDateTime dMod = LocalDateTime.parse("2021-02-03T19:49:05.231072", formatter);
dMod=dMod.truncatedTo(ChronoUnit.SECONDS);
//dMod= LocalDateTime.parse(dMod.format(formatterDataMod));
//dataMod = Timestamp.valueOf(dMod.format(formatterDataMod));
dataMod = Timestamp.valueOf(dMod);
} catch (IllegalArgumentException | DateTimeParseException e) {
logger.error("Invalid stamping data format: {}", e.getLocalizedMessage(), e);
return;
}
logger.info("Result: {}",dataMod);
}
}