Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix multi campaigns moog #28

Merged
merged 4 commits into from
Oct 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
</parent>
<groupId>fr.insee.survey</groupId>
<artifactId>platine-management</artifactId>
<version>1.0.23</version>
<version>1.0.24-rc</version>
<name>platine-management</name>
<description>REST API for communication between DB and Platine-Management UI and Platine-My-Surveys UI</description>
<properties>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ public class MoogRepository {
AddressService addressService;

final String getEventsQuery = "SELECT qe.id, date, type, survey_unit_id_su, campaign_id "
+ " FROM questioning_event qe join questioning q on qe.questioning_id=q.id join partitioning p on q.id_partitioning=p.id "
+ " WHERE survey_unit_id_su=? AND campaign_id=? ";
+ " FROM questioning_event qe join questioning q on qe.questioning_id=q.id join partitioning p on q.id_partitioning=p.id "
+ " WHERE survey_unit_id_su=? AND campaign_id=? ";


public List<MoogQuestioningEventDto> getEventsByIdSuByCampaign(String idCampaign, String idSu) {
Expand All @@ -41,18 +41,62 @@ public MoogQuestioningEventDto mapRow(ResultSet rs, int rowNum) throws SQLExcept
moogEvent.setDateInfo(rs.getTimestamp("date").getTime());
return moogEvent;
}
}, new Object[]{idSu,idCampaign});
}, new Object[]{idSu, idCampaign});

return progress;
}

final String extractionQuery = " SELECT id_su,identifier as id_contact,first_name as firstname,last_name as lastname,address_id as address,date as dateinfo,type as status, batch_num FROM "
+ " (SELECT id,campaign_id,A.id_su,A.identifier,first_name,last_name,address_id, id_partitioning AS batch_num FROM (SELECT campaign_id,id_su,contact.identifier,first_name,last_name,address_id "
+ " FROM view "
+ " LEFT JOIN contact ON contact.identifier=view.identifier WHERE campaign_id=? ) As A LEFT JOIN questioning ON A.id_su=questioning.survey_unit_id_su) As B LEFT JOIN questioning_event on B.id=questioning_event.questioning_id"
;


final String extractionQuery =
"""
select
id_su,
identifier as id_contact,
first_name as firstname,
last_name as lastname,
address_id as address,
date as dateinfo,
type as status,
batch_num
from
(
select
id,
campaign_id,
A.id_su,
A.identifier,
first_name,
last_name,
address_id,
id_partitioning as batch_num
from
(
select
campaign_id,
id_su,
contact.identifier,
first_name,
last_name,
address_id
from
view
left join contact on
contact.identifier = view.identifier
where
campaign_id = ?
) as A
left join questioning q on
A.id_su = q.survey_unit_id_su
and q.id_partitioning in (
select
id
from
partitioning p
where
p.campaign_id = ?)
) as B
left join questioning_event on
B.id = questioning_event.questioning_id
""";


public List<MoogExtractionRowDto> getExtraction(String idCampaign) {
Expand All @@ -70,25 +114,94 @@ public MoogExtractionRowDto mapRow(ResultSet rs, int rowNum) throws SQLException
ev.setIdContact(rs.getString("id_contact"));
ev.setLastname(rs.getString("lastname"));
ev.setFirstname(rs.getString("firstname"));
if(address.isPresent()){
ev.setAddress(address.get().toStringMoog());}
if (address.isPresent()) {
ev.setAddress(address.get().toStringMoog());
}

ev.setBatchNumber(rs.getString("batch_num"));

return ev;
}
}, new Object[]{idCampaign});
}, new Object[]{idCampaign, idCampaign});

return extraction;
}

final String surveyUnitFollowUpQuery = " SELECT DISTINCT ON (id_su) id_su,batch_num, CASE WHEN type in ('PND') THEN 1 ELSE 0 END as PND FROM (SELECT id_su, identifier, id, id_partitioning as batch_num FROM (SELECT id_su,identifier "+
" FROM public.view WHERE campaign_id=?)AS A LEFT JOIN questioning ON questioning.survey_unit_id_su=A.id_su) AS B "+
" LEFT JOIN questioning_event ON B.id=questioning_event.questioning_id "+
" WHERE id_su not in (SELECT DISTINCT ON (id_su) id_su FROM (SELECT id_su, identifier, id, id_partitioning as batch_num FROM (SELECT id_su,identifier FROM public.view "+
" WHERE campaign_id=?)AS A LEFT JOIN questioning ON questioning.survey_unit_id_su=A.id_su) AS B "+
" LEFT JOIN questioning_event ON B.id=questioning_event.questioning_id "+
" WHERE type IN ('VALINT','VALPAP','HC','REFUSAL','WASTE')) ORDER BY id_su,pnd DESC";
final String surveyUnitFollowUpQuery = """
select
distinct on
(id_su) id_su,
batch_num,
case
when type in ('PND') then 1
else 0
end as PND
from
(
select
A.id_su,
A.identifier,
q.id,
q.id_partitioning as batch_num
from
(
select
id_su,
identifier
from
public.view v
where
campaign_id = ?)as A
left join questioning q on
q.survey_unit_id_su = A.id_su
and q.id_partitioning in (
select
id
from
partitioning p
where
p.campaign_id = ?)) as B
left join questioning_event qe on
B.id = qe.questioning_id
where
B.id_su not in (
select
distinct on
(id_su) id_su
from
(
select
id_su,
identifier,
id,
id_partitioning as batch_num
from
(
select
id_su,
identifier
from
public.view
where
campaign_id = ?)as A
left join questioning q on
q.survey_unit_id_su = A.id_su
and q.id_partitioning in (
select
id
from
partitioning p
where
p.campaign_id = ?)) as B
left join questioning_event on
B.id = questioning_event.questioning_id
where
type in ('VALINT', 'VALPAP', 'HC', 'REFUSAL', 'WASTE'))
order by
id_su,
pnd desc;

""";
;

public List<MoogExtractionRowDto> getSurveyUnitToFollowUp(String idCampaign) {
Expand All @@ -103,7 +216,7 @@ public MoogExtractionRowDto mapRow(ResultSet rs, int rowNum) throws SQLException

return er;
}
}, new Object[] { idCampaign, idCampaign });
}, new Object[]{idCampaign, idCampaign, idCampaign, idCampaign});

return followUp;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@
import fr.insee.survey.datacollectionmanagement.metadata.domain.Partitioning;
import fr.insee.survey.datacollectionmanagement.metadata.service.CampaignService;
import fr.insee.survey.datacollectionmanagement.query.domain.ResultUpload;
import fr.insee.survey.datacollectionmanagement.questioning.domain.Upload;
import fr.insee.survey.datacollectionmanagement.query.dto.MoogUploadQuestioningEventDto;
import fr.insee.survey.datacollectionmanagement.questioning.dto.UploadDto;
import fr.insee.survey.datacollectionmanagement.questioning.repository.UploadRepository;
import fr.insee.survey.datacollectionmanagement.questioning.service.UploadService;
import fr.insee.survey.datacollectionmanagement.questioning.domain.Questioning;
import fr.insee.survey.datacollectionmanagement.questioning.domain.QuestioningAccreditation;
import fr.insee.survey.datacollectionmanagement.questioning.domain.QuestioningEvent;
import fr.insee.survey.datacollectionmanagement.questioning.domain.Upload;
import fr.insee.survey.datacollectionmanagement.questioning.dto.UploadDto;
import fr.insee.survey.datacollectionmanagement.questioning.repository.UploadRepository;
import fr.insee.survey.datacollectionmanagement.questioning.service.QuestioningEventService;
import fr.insee.survey.datacollectionmanagement.questioning.service.QuestioningService;
import fr.insee.survey.datacollectionmanagement.questioning.service.UploadService;
import fr.insee.survey.datacollectionmanagement.questioning.util.TypeQuestioningEvent;
import lombok.extern.slf4j.Slf4j;
import net.minidev.json.JSONObject;
Expand Down Expand Up @@ -61,8 +61,22 @@ public ResultUpload save(String idCampaign, UploadDto uploadDto) throws Ressourc
String identifier = (mmDto.getIdSu() != null) ? mmDto.getIdSu() : mmDto.getIdContact();
try {
QuestioningEvent qe = new QuestioningEvent();

Optional<Campaign> campaign = campaignService.findById(idCampaign);
if (!campaign.isPresent()) {
throw new RessourceNotValidatedException("Campaign", idCampaign);
}
Set<Partitioning> setParts = campaign.get().getPartitionings();
if (setParts.isEmpty()) {
throw new RessourceNotValidatedException("No partitionings found for campaign ", idCampaign);
}

Set<Questioning> questionings = questioningService.findBySurveyUnitIdSu(mmDto.getIdSu());
Optional<Questioning> quest = questionings.stream().filter(q -> q.getQuestioningAccreditations().stream().map(QuestioningAccreditation::getIdContact).collect(Collectors.toList()).contains(mmDto.getIdContact())).findFirst();

List<String> listIdParts = campaignService.findById(idCampaign).get().getPartitionings().stream().map(Partitioning::getId).toList();
Optional<Questioning> quest = questionings.stream().filter(q -> listIdParts.contains(q.getIdPartitioning()) && q.getQuestioningAccreditations().stream().map(QuestioningAccreditation::getIdContact)
.collect(Collectors.toList()).contains(mmDto.getIdContact())).findFirst();

qe.setUpload(up);
qe.setType(TypeQuestioningEvent.valueOf(mmDto.getStatus()));
qe.setQuestioning(quest.get());
Expand All @@ -76,15 +90,14 @@ public ResultUpload save(String idCampaign, UploadDto uploadDto) throws Ressourc
quest.get().getQuestioningEvents().add(qe);
questioningService.saveQuestioning(quest.get());
}

result.addIdOk(identifier);
} catch (Exception e) {
log.error("Error in request");
log.info("Info: id KO " + e.getMessage());
result.addIdKo(identifier, "RessourceNotFound or unprocessable request");
}
}
if(result.getListIdOK().size()==0){
if (result.getListIdOK().size() == 0) {
delete(up);
return result;
}
Expand Down Expand Up @@ -127,7 +140,7 @@ public Upload saveAndFlush(Upload up) {
@Override
public boolean checkUploadDate(String idCampaign, Date date) {
Optional<Campaign> campaign = campaignService.findById(idCampaign);
Long timestamp=date.getTime();
Long timestamp = date.getTime();
Long start = campaign.get().getPartitionings().stream().map(Partitioning::getOpeningDate)
.collect(Collectors.toList()).stream()
.min(Comparator.comparing(Date::getTime)).get().getTime();
Expand Down