Compare commits
9 Commits
d4d4a7be44
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 4cd6e7cbae | |||
| 5d519855a7 | |||
| 44827030be | |||
| 6c0fa1ca27 | |||
| 8bcae0751a | |||
| 14ca79d49e | |||
| 1e4e8f9ff6 | |||
| 34d1502334 | |||
| aec566935c |
@@ -120,7 +120,7 @@ public class DonneesImpositionTfuController {
|
|||||||
public ResponseEntity<?> getAllDonneesImpositionTfuList() {
|
public ResponseEntity<?> getAllDonneesImpositionTfuList() {
|
||||||
try {
|
try {
|
||||||
return new ResponseEntity<>(
|
return new ResponseEntity<>(
|
||||||
new ApiResponse<>(true, donneesImpositionTfuService.getDonneesImpositionTfuList(), "Liste des caractéristiques chargée avec succès."),
|
new ApiResponse<>(true, donneesImpositionTfuService.getDonneesImpositionTfuList(), "Liste des impositions chargée avec succès."),
|
||||||
HttpStatus.OK
|
HttpStatus.OK
|
||||||
);
|
);
|
||||||
} catch (HttpClientErrorException.MethodNotAllowed e) {
|
} catch (HttpClientErrorException.MethodNotAllowed e) {
|
||||||
@@ -144,7 +144,7 @@ public class DonneesImpositionTfuController {
|
|||||||
try {
|
try {
|
||||||
Pageable pageable = PageRequest.of(pageNo, pageSize);
|
Pageable pageable = PageRequest.of(pageNo, pageSize);
|
||||||
return new ResponseEntity<>(
|
return new ResponseEntity<>(
|
||||||
new ApiResponse<>(true, donneesImpositionTfuService.getDonneesImpositionTfuList(pageable), "Liste des caractéristiques chargée avec succès."),
|
new ApiResponse<>(true, donneesImpositionTfuService.getDonneesImpositionTfuList(pageable), "Liste des impositions chargée avec succès."),
|
||||||
HttpStatus.OK
|
HttpStatus.OK
|
||||||
);
|
);
|
||||||
} catch (HttpClientErrorException.MethodNotAllowed e) {
|
} catch (HttpClientErrorException.MethodNotAllowed e) {
|
||||||
@@ -169,7 +169,7 @@ public class DonneesImpositionTfuController {
|
|||||||
try {
|
try {
|
||||||
Pageable pageable = PageRequest.of(pageNo, pageSize);
|
Pageable pageable = PageRequest.of(pageNo, pageSize);
|
||||||
return new ResponseEntity<>(
|
return new ResponseEntity<>(
|
||||||
new ApiResponse<>(true, donneesImpositionTfuService.getDonneesFiscalesByImpositionTfuIdPageable(impositionId, pageable), "Liste des caractéristiques chargée avec succès."),
|
new ApiResponse<>(true, donneesImpositionTfuService.getDonneesFiscalesByImpositionTfuIdPageable(impositionId, pageable), "Liste des impositions chargée avec succès."),
|
||||||
HttpStatus.OK
|
HttpStatus.OK
|
||||||
);
|
);
|
||||||
} catch (HttpClientErrorException.MethodNotAllowed e) {
|
} catch (HttpClientErrorException.MethodNotAllowed e) {
|
||||||
@@ -193,7 +193,7 @@ public class DonneesImpositionTfuController {
|
|||||||
try {
|
try {
|
||||||
Pageable pageable = PageRequest.of(pageNo, pageSize);
|
Pageable pageable = PageRequest.of(pageNo, pageSize);
|
||||||
return new ResponseEntity<>(
|
return new ResponseEntity<>(
|
||||||
new ApiResponse<>(true, donneesImpositionTfuService.getDonneesFiscalesByImpositionTfuIdNonBatiePageable(impositionId, pageable), "Liste des caractéristiques chargée avec succès."),
|
new ApiResponse<>(true, donneesImpositionTfuService.getDonneesFiscalesByImpositionTfuIdNonBatiePageable(impositionId, pageable), "Liste des impositions chargée avec succès."),
|
||||||
HttpStatus.OK
|
HttpStatus.OK
|
||||||
);
|
);
|
||||||
} catch (HttpClientErrorException.MethodNotAllowed e) {
|
} catch (HttpClientErrorException.MethodNotAllowed e) {
|
||||||
@@ -218,7 +218,7 @@ public class DonneesImpositionTfuController {
|
|||||||
try {
|
try {
|
||||||
Pageable pageable = PageRequest.of(pageNo, pageSize);
|
Pageable pageable = PageRequest.of(pageNo, pageSize);
|
||||||
return new ResponseEntity<>(
|
return new ResponseEntity<>(
|
||||||
new ApiResponse<>(true, donneesImpositionTfuService.getDonneesFiscalesByImpositionTfuIdBatieBatimentPageable(impositionId, pageable), "Liste des caractéristiques chargée avec succès."),
|
new ApiResponse<>(true, donneesImpositionTfuService.getDonneesFiscalesByImpositionTfuIdBatieBatimentPageable(impositionId, pageable), "Liste des impositions chargée avec succès."),
|
||||||
HttpStatus.OK
|
HttpStatus.OK
|
||||||
);
|
);
|
||||||
} catch (HttpClientErrorException.MethodNotAllowed e) {
|
} catch (HttpClientErrorException.MethodNotAllowed e) {
|
||||||
@@ -242,7 +242,7 @@ public class DonneesImpositionTfuController {
|
|||||||
try {
|
try {
|
||||||
Pageable pageable = PageRequest.of(pageNo, pageSize);
|
Pageable pageable = PageRequest.of(pageNo, pageSize);
|
||||||
return new ResponseEntity<>(
|
return new ResponseEntity<>(
|
||||||
new ApiResponse<>(true, donneesImpositionTfuService.getDonneesFiscalesByImpositionTfuIdBatieUniteLogPageable(impositionId, pageable), "Liste des caractéristiques chargée avec succès."),
|
new ApiResponse<>(true, donneesImpositionTfuService.getDonneesFiscalesByImpositionTfuIdBatieUniteLogPageable(impositionId, pageable), "Liste des impositions chargée avec succès."),
|
||||||
HttpStatus.OK
|
HttpStatus.OK
|
||||||
);
|
);
|
||||||
} catch (HttpClientErrorException.MethodNotAllowed e) {
|
} catch (HttpClientErrorException.MethodNotAllowed e) {
|
||||||
@@ -442,7 +442,56 @@ public class DonneesImpositionTfuController {
|
|||||||
Pageable pageable = PageRequest.of(pageNo, pageSize);
|
Pageable pageable = PageRequest.of(pageNo, pageSize);
|
||||||
System.out.println("NOUS SOMMES ICI");
|
System.out.println("NOUS SOMMES ICI");
|
||||||
return new ResponseEntity<>(
|
return new ResponseEntity<>(
|
||||||
new ApiResponse<>(true, donneesImpositionTfuService.getDonneesFiscalesByExerciceAndStructureIdPageable(exerciceId,structureId, pageable), "Liste des caractéristiques chargée avec succès."),
|
new ApiResponse<>(true, donneesImpositionTfuService.getDonneesFiscalesByExerciceAndStructureIdPageable(exerciceId,structureId, pageable), "Liste des impositions chargée avec succès."),
|
||||||
|
HttpStatus.OK
|
||||||
|
);
|
||||||
|
} catch (HttpClientErrorException.MethodNotAllowed e) {
|
||||||
|
logger.error(e.getLocalizedMessage());
|
||||||
|
return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK);
|
||||||
|
} catch (NotFoundException | BadRequestException | MyFileNotFoundException | ResourceNotFoundException |
|
||||||
|
FileStorageException e) {
|
||||||
|
logger.error(e.getLocalizedMessage());
|
||||||
|
return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK);
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
logger.error(e.getLocalizedMessage());
|
||||||
|
return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error(e.getLocalizedMessage());
|
||||||
|
return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/all/by-exercice-id/by-structure-id/by-quartier-id/{exerciceId}/{structureId}/{quartierId}")
|
||||||
|
public ResponseEntity<?> getAllDonneesImpositionTfuByExerciceIdAndStructureId(@PathVariable Long exerciceId, @PathVariable Long structureId, @PathVariable Long quartierId) {
|
||||||
|
try {
|
||||||
|
System.out.println("NOUS SOMMES ICI");
|
||||||
|
return new ResponseEntity<>(
|
||||||
|
new ApiResponse<>(true, donneesImpositionTfuService.getDonneesFiscalesByExerciceAndStructureId(exerciceId,structureId,quartierId), "Liste des imposition chargée avec succès."),
|
||||||
|
HttpStatus.OK
|
||||||
|
);
|
||||||
|
} catch (HttpClientErrorException.MethodNotAllowed e) {
|
||||||
|
logger.error(e.getLocalizedMessage());
|
||||||
|
return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK);
|
||||||
|
} catch (NotFoundException | BadRequestException | MyFileNotFoundException | ResourceNotFoundException |
|
||||||
|
FileStorageException e) {
|
||||||
|
logger.error(e.getLocalizedMessage());
|
||||||
|
return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK);
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
logger.error(e.getLocalizedMessage());
|
||||||
|
return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error(e.getLocalizedMessage());
|
||||||
|
return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@GetMapping("/all/by-personne-id/{personneId}")
|
||||||
|
public ResponseEntity<?> getAllDonneesImpositionTfuByPersonneId(@PathVariable Long personneId) {
|
||||||
|
try {
|
||||||
|
return new ResponseEntity<>(
|
||||||
|
new ApiResponse<>(true, donneesImpositionTfuService.getDonneesFiscalesByPersonneId(personneId), "Liste des impositions chargée avec succès."),
|
||||||
HttpStatus.OK
|
HttpStatus.OK
|
||||||
);
|
);
|
||||||
} catch (HttpClientErrorException.MethodNotAllowed e) {
|
} catch (HttpClientErrorException.MethodNotAllowed e) {
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import io.gmss.fiscad.entities.BaseEntity;
|
|||||||
import io.gmss.fiscad.entities.infocad.metier.Enquete;
|
import io.gmss.fiscad.entities.infocad.metier.Enquete;
|
||||||
import io.gmss.fiscad.entities.infocad.metier.Parcelle;
|
import io.gmss.fiscad.entities.infocad.metier.Parcelle;
|
||||||
import io.gmss.fiscad.entities.infocad.metier.Tpe;
|
import io.gmss.fiscad.entities.infocad.metier.Tpe;
|
||||||
|
import io.gmss.fiscad.entities.infocad.parametre.Personne;
|
||||||
import io.gmss.fiscad.entities.infocad.parametre.Structure;
|
import io.gmss.fiscad.entities.infocad.parametre.Structure;
|
||||||
import io.gmss.fiscad.entities.rfu.parametre.ZoneRfu;
|
import io.gmss.fiscad.entities.rfu.parametre.ZoneRfu;
|
||||||
import io.gmss.fiscad.enums.NatureImpot;
|
import io.gmss.fiscad.enums.NatureImpot;
|
||||||
@@ -97,10 +98,12 @@ public class DonneesImpositionTfu extends BaseEntity implements Serializable {
|
|||||||
@JsonDeserialize(using = LocalDateDeserializer.class)
|
@JsonDeserialize(using = LocalDateDeserializer.class)
|
||||||
private LocalDate dateEnquete;
|
private LocalDate dateEnquete;
|
||||||
private Long enqueteId;
|
private Long enqueteId;
|
||||||
|
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
@ManyToOne(fetch = FetchType.LAZY)
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
@JoinColumn(name = "structure_id")
|
@JoinColumn(name = "structure_id")
|
||||||
private Structure structure ;
|
private Structure structure ;
|
||||||
|
|
||||||
private Long secteurId;
|
private Long secteurId;
|
||||||
@ManyToOne(fetch = FetchType.LAZY)
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
@JoinColumn(name = "zone_rfu_id")
|
@JoinColumn(name = "zone_rfu_id")
|
||||||
@@ -137,4 +140,11 @@ public class DonneesImpositionTfu extends BaseEntity implements Serializable {
|
|||||||
@ManyToOne(fetch = FetchType.LAZY)
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
@JoinColumn(name = "unite_logement_id")
|
@JoinColumn(name = "unite_logement_id")
|
||||||
private UniteLogement uniteLogementImposee ;
|
private UniteLogement uniteLogementImposee ;
|
||||||
|
|
||||||
|
|
||||||
|
@JsonIgnore
|
||||||
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
|
private Personne personne ;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -117,13 +117,13 @@ public class DonneesImpositionTfuServiceImpl implements DonneesImpositionTfuServ
|
|||||||
|
|
||||||
Integer nbulo= donneesImpositionTfuRepository.genererDonneesTfuBatieUniteLogement(impositionsTfuPaylaodWeb.getId(),userId);
|
Integer nbulo= donneesImpositionTfuRepository.genererDonneesTfuBatieUniteLogement(impositionsTfuPaylaodWeb.getId(),userId);
|
||||||
|
|
||||||
Integer nbirfbt= donneesImpositionTfuRepository.genererDonneesIrfBatie(impositionsTfuPaylaodWeb.getId(),userId);
|
// Integer nbirfbt= donneesImpositionTfuRepository.genererDonneesIrfBatie(impositionsTfuPaylaodWeb.getId(),userId);
|
||||||
|
//
|
||||||
Integer nbirfulo= donneesImpositionTfuRepository.genererDonneesIrfBatieUniteLogement(impositionsTfuPaylaodWeb.getId(),userId);
|
// Integer nbirfulo= donneesImpositionTfuRepository.genererDonneesIrfBatieUniteLogement(impositionsTfuPaylaodWeb.getId(),userId);
|
||||||
|
//
|
||||||
Integer nbsrtbbt= donneesImpositionTfuRepository.genererDonneesSrtbBatie(impositionsTfuPaylaodWeb.getId(),userId);
|
// Integer nbsrtbbt= donneesImpositionTfuRepository.genererDonneesSrtbBatie(impositionsTfuPaylaodWeb.getId(),userId);
|
||||||
|
//
|
||||||
Integer nbsrtbulo= donneesImpositionTfuRepository.genererDonneesSrtbBatieUniteLogement(impositionsTfuPaylaodWeb.getId(),userId);
|
// Integer nbsrtbulo= donneesImpositionTfuRepository.genererDonneesSrtbBatieUniteLogement(impositionsTfuPaylaodWeb.getId(),userId);
|
||||||
|
|
||||||
|
|
||||||
ImpositionsTfu impositionsTfu = entityFromPayLoadService.getImpositionsTfuFromPayLoadWeb(impositionsTfuPaylaodWeb);
|
ImpositionsTfu impositionsTfu = entityFromPayLoadService.getImpositionsTfuFromPayLoadWeb(impositionsTfuPaylaodWeb);
|
||||||
@@ -197,4 +197,14 @@ public class DonneesImpositionTfuServiceImpl implements DonneesImpositionTfuServ
|
|||||||
public Page<DonneesImpositionPaylaodWeb> getDonneesFiscalesByExerciceAndStructureIdPageable(Long exerciceId, Long structureId, Pageable pageable) {
|
public Page<DonneesImpositionPaylaodWeb> getDonneesFiscalesByExerciceAndStructureIdPageable(Long exerciceId, Long structureId, Pageable pageable) {
|
||||||
return donneesImpositionTfuRepository.findAllByExericeIdStructureIdPageable(exerciceId,structureId,pageable);
|
return donneesImpositionTfuRepository.findAllByExericeIdStructureIdPageable(exerciceId,structureId,pageable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DonneesImpositionPaylaodWeb> getDonneesFiscalesByExerciceAndStructureId(Long exerciceId, Long structureId,Long quartierId) {
|
||||||
|
return donneesImpositionTfuRepository.findAllByExericeIdStructureId(exerciceId,structureId,quartierId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DonneesImpositionPaylaodWeb> getDonneesFiscalesByPersonneId(Long personneId) {
|
||||||
|
return donneesImpositionTfuRepository.findAllByPersonneId(personneId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,5 +43,9 @@ public interface DonneesImpositionTfuService {
|
|||||||
Page<DonneesImpositionPaylaodWeb> getDonneesFiscalesByImpositionSrtbIdBatieUniteLogPageable(Long impositionsTfuId, Pageable pageable);
|
Page<DonneesImpositionPaylaodWeb> getDonneesFiscalesByImpositionSrtbIdBatieUniteLogPageable(Long impositionsTfuId, Pageable pageable);
|
||||||
|
|
||||||
Page<DonneesImpositionPaylaodWeb> getDonneesFiscalesByExerciceAndStructureIdPageable(Long exerciceId, Long structureId, Pageable pageable);
|
Page<DonneesImpositionPaylaodWeb> getDonneesFiscalesByExerciceAndStructureIdPageable(Long exerciceId, Long structureId, Pageable pageable);
|
||||||
|
List<DonneesImpositionPaylaodWeb> getDonneesFiscalesByExerciceAndStructureId(Long exerciceId, Long structureId,Long quartierId);
|
||||||
|
|
||||||
|
List<DonneesImpositionPaylaodWeb> getDonneesFiscalesByPersonneId(Long personneId);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -283,13 +283,3 @@ WHERE impositions_tfu_id = p_impositions_tfu_id
|
|||||||
RETURN v_rows_inserted;
|
RETURN v_rows_inserted;
|
||||||
END;
|
END;
|
||||||
$$;
|
$$;
|
||||||
|
|
||||||
|
|
||||||
delete from donnees_imposition_tfu;
|
|
||||||
|
|
||||||
|
|
||||||
select donnees_imposition_tfu.superficie_au_sol_loue,valeur_locative_adm,taux_tfu,montant_taxe, * from donnees_imposition_tfu
|
|
||||||
where nature_impot='IRF';
|
|
||||||
|
|
||||||
select generer_donnees_imposition_irf_batie(4,35);
|
|
||||||
|
|
||||||
|
|||||||
@@ -234,7 +234,14 @@ FROM parcelle p
|
|||||||
JOIN arrondissement a ON a.id = q.arrondissement_id
|
JOIN arrondissement a ON a.id = q.arrondissement_id
|
||||||
JOIN commune c ON c.id = a.commune_id
|
JOIN commune c ON c.id = a.commune_id
|
||||||
JOIN departement d ON d.id = c.departement_id
|
JOIN departement d ON d.id = c.departement_id
|
||||||
JOIN secteur_decoupage sd ON sd.quartier_id = q.id
|
--JOIN secteur_decoupage sd ON sd.quartier_id = q.id
|
||||||
|
JOIN (
|
||||||
|
SELECT DISTINCT ON (quartier_id)
|
||||||
|
quartier_id,
|
||||||
|
secteur_id
|
||||||
|
FROM secteur_decoupage
|
||||||
|
ORDER BY quartier_id
|
||||||
|
) sd ON sd.quartier_id = q.id
|
||||||
JOIN secteur sect ON sect.id = sd.secteur_id
|
JOIN secteur sect ON sect.id = sd.secteur_id
|
||||||
JOIN section ses ON ses.id = sect.section_id
|
JOIN section ses ON ses.id = sect.section_id
|
||||||
JOIN "structure" st ON st.id = ses.structure_id
|
JOIN "structure" st ON st.id = ses.structure_id
|
||||||
@@ -332,11 +339,3 @@ WHERE impositions_tfu_id = p_impositions_tfu_id
|
|||||||
RETURN v_rows_inserted;
|
RETURN v_rows_inserted;
|
||||||
END;
|
END;
|
||||||
$$;
|
$$;
|
||||||
|
|
||||||
|
|
||||||
delete from donnees_imposition_tfu;
|
|
||||||
|
|
||||||
select generer_donnees_imposition_irf_batie_unite_logement(4,35);
|
|
||||||
|
|
||||||
select donnees_imposition_tfu.superficie_au_sol_loue,valeur_locative_adm,taux_tfu,montant_taxe, * from donnees_imposition_tfu
|
|
||||||
where nature_impot='IRF';
|
|
||||||
@@ -202,7 +202,14 @@ FROM parcelle p
|
|||||||
JOIN arrondissement a ON a.id = q.arrondissement_id
|
JOIN arrondissement a ON a.id = q.arrondissement_id
|
||||||
JOIN commune c ON c.id = a.commune_id
|
JOIN commune c ON c.id = a.commune_id
|
||||||
JOIN departement d ON d.id = c.departement_id
|
JOIN departement d ON d.id = c.departement_id
|
||||||
JOIN secteur_decoupage sd ON sd.quartier_id = q.id
|
--JOIN secteur_decoupage sd ON sd.quartier_id = q.id
|
||||||
|
JOIN (
|
||||||
|
SELECT DISTINCT ON (quartier_id)
|
||||||
|
quartier_id,
|
||||||
|
secteur_id
|
||||||
|
FROM secteur_decoupage
|
||||||
|
ORDER BY quartier_id
|
||||||
|
) sd ON sd.quartier_id = q.id
|
||||||
JOIN secteur sect ON sect.id = sd.secteur_id
|
JOIN secteur sect ON sect.id = sd.secteur_id
|
||||||
JOIN section ses ON ses.id = sect.section_id
|
JOIN section ses ON ses.id = sect.section_id
|
||||||
JOIN "structure" st ON st.id = ses.structure_id
|
JOIN "structure" st ON st.id = ses.structure_id
|
||||||
@@ -255,11 +262,3 @@ END;
|
|||||||
$$;
|
$$;
|
||||||
|
|
||||||
|
|
||||||
--delete from donnees_imposition_tfu;
|
|
||||||
|
|
||||||
|
|
||||||
select donnees_imposition_tfu.superficie_au_sol_loue,valeur_locative_adm,taux_tfu,montant_taxe, * from donnees_imposition_tfu
|
|
||||||
where nature_impot='SRTB';
|
|
||||||
|
|
||||||
select generer_donnees_imposition_srtb_batie(4,35);
|
|
||||||
|
|
||||||
|
|||||||
@@ -215,7 +215,14 @@ FROM parcelle p
|
|||||||
JOIN arrondissement a ON a.id = q.arrondissement_id
|
JOIN arrondissement a ON a.id = q.arrondissement_id
|
||||||
JOIN commune c ON c.id = a.commune_id
|
JOIN commune c ON c.id = a.commune_id
|
||||||
JOIN departement d ON d.id = c.departement_id
|
JOIN departement d ON d.id = c.departement_id
|
||||||
JOIN secteur_decoupage sd ON sd.quartier_id = q.id
|
--JOIN secteur_decoupage sd ON sd.quartier_id = q.id
|
||||||
|
JOIN (
|
||||||
|
SELECT DISTINCT ON (quartier_id)
|
||||||
|
quartier_id,
|
||||||
|
secteur_id
|
||||||
|
FROM secteur_decoupage
|
||||||
|
ORDER BY quartier_id
|
||||||
|
) sd ON sd.quartier_id = q.id
|
||||||
JOIN secteur sect ON sect.id = sd.secteur_id
|
JOIN secteur sect ON sect.id = sd.secteur_id
|
||||||
JOIN section ses ON ses.id = sect.section_id
|
JOIN section ses ON ses.id = sect.section_id
|
||||||
JOIN "structure" st ON st.id = ses.structure_id
|
JOIN "structure" st ON st.id = ses.structure_id
|
||||||
@@ -302,10 +309,3 @@ RETURN v_rows_inserted;
|
|||||||
END;
|
END;
|
||||||
$$;
|
$$;
|
||||||
|
|
||||||
|
|
||||||
delete from donnees_imposition_tfu;
|
|
||||||
|
|
||||||
select generer_donnees_imposition_srtb_batie_unite_logement(4,35);
|
|
||||||
|
|
||||||
select donnees_imposition_tfu.superficie_au_sol_loue,valeur_locative_adm,taux_tfu,montant_taxe, * from donnees_imposition_tfu
|
|
||||||
where nature_impot='SRTB';
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
CREATE OR REPLACE FUNCTION public.generer_donnees_imposition_tfu_batie(
|
/*CREATE OR REPLACE FUNCTION public.generer_donnees_imposition_tfu_batie(
|
||||||
p_impositions_tfu_id BIGINT,
|
p_impositions_tfu_id BIGINT,
|
||||||
p_user_id BIGINT
|
p_user_id BIGINT
|
||||||
)
|
)
|
||||||
@@ -160,19 +160,19 @@ SELECT
|
|||||||
'TFU',
|
'TFU',
|
||||||
p.superficie,
|
p.superficie,
|
||||||
eb.superficie_au_sol,
|
eb.superficie_au_sol,
|
||||||
case -------valeur_batiment
|
COALESCE(
|
||||||
WHEN eb.valeur_batiment_reel IS NOT NULL AND eb.valeur_batiment_reel <> 0 THEN eb.valeur_batiment_reel
|
NULLIF(eb.valeur_batiment_reel, 0),
|
||||||
WHEN eb.valeur_batiment_calcule IS NOT NULL AND eb.valeur_batiment_calcule <> 0 THEN eb.valeur_batiment_calcule
|
NULLIF(eb.valeur_batiment_calcule, 0),
|
||||||
WHEN eb.valeur_batiment_estime IS NOT NULL AND eb.valeur_batiment_estime <> 0 THEN eb.valeur_batiment_estime
|
NULLIF(eb.valeur_batiment_estime, 0),
|
||||||
ELSE 0
|
0
|
||||||
END,
|
),
|
||||||
brb.valeur_locative,
|
brb.valeur_locative,
|
||||||
case ----- montant_loyer_annuel
|
COALESCE(
|
||||||
WHEN eb.montant_locatif_annuel_declare IS NOT NULL AND eb.montant_locatif_annuel_declare <> 0 THEN eb.montant_locatif_annuel_declare
|
NULLIF(eb.montant_locatif_annuel_declare, 0),
|
||||||
WHEN eb.montant_locatif_annuel_calcule IS NOT NULL AND eb.montant_locatif_annuel_calcule <> 0 THEN eb.montant_locatif_annuel_calcule
|
NULLIF(eb.montant_locatif_annuel_calcule, 0),
|
||||||
WHEN eb.montant_locatif_annuel_estime IS NOT NULL AND eb.montant_locatif_annuel_estime <> 0 THEN eb.montant_locatif_annuel_estime
|
NULLIF(eb.montant_locatif_annuel_estime, 0),
|
||||||
ELSE 0
|
0
|
||||||
END,
|
),
|
||||||
brb.tfu_metre_carre,
|
brb.tfu_metre_carre,
|
||||||
brb.tfu_minimum,
|
brb.tfu_minimum,
|
||||||
p_impositions_tfu_id,
|
p_impositions_tfu_id,
|
||||||
@@ -198,7 +198,7 @@ SELECT
|
|||||||
end,
|
end,
|
||||||
0, ------ valeur_locative_adm : en attente de update
|
0, ------ valeur_locative_adm : en attente de update
|
||||||
case -----tfu_superficie_au_sol_reel
|
case -----tfu_superficie_au_sol_reel
|
||||||
when eb.categorie_usage='HABITATION' then eb.superficie_au_sol * brb.valeur_locative * v_taux_tfu/100
|
when eb.categorie_usage='HABITATION' then eb.superficie_au_sol * brb.valeur_locative * v_taux_tfu/100 +eb.nombre_piscine * v_tfu_piscine_unitaire
|
||||||
else 0
|
else 0
|
||||||
end,
|
end,
|
||||||
eb.nombre_piscine * v_tfu_piscine_unitaire,
|
eb.nombre_piscine * v_tfu_piscine_unitaire,
|
||||||
@@ -231,7 +231,14 @@ FROM parcelle p
|
|||||||
JOIN arrondissement a ON a.id = q.arrondissement_id
|
JOIN arrondissement a ON a.id = q.arrondissement_id
|
||||||
JOIN commune c ON c.id = a.commune_id
|
JOIN commune c ON c.id = a.commune_id
|
||||||
JOIN departement d ON d.id = c.departement_id
|
JOIN departement d ON d.id = c.departement_id
|
||||||
JOIN secteur_decoupage sd ON sd.quartier_id = q.id
|
--JOIN secteur_decoupage sd ON sd.quartier_id = q.id
|
||||||
|
JOIN (
|
||||||
|
SELECT DISTINCT ON (quartier_id)
|
||||||
|
quartier_id,
|
||||||
|
secteur_id
|
||||||
|
FROM secteur_decoupage
|
||||||
|
ORDER BY quartier_id
|
||||||
|
) sd ON sd.quartier_id = q.id
|
||||||
JOIN secteur sect ON sect.id = sd.secteur_id
|
JOIN secteur sect ON sect.id = sd.secteur_id
|
||||||
JOIN section ses ON ses.id = sect.section_id
|
JOIN section ses ON ses.id = sect.section_id
|
||||||
JOIN "structure" st ON st.id = ses.structure_id
|
JOIN "structure" st ON st.id = ses.structure_id
|
||||||
@@ -335,4 +342,415 @@ WHERE impositions_tfu_id = p_impositions_tfu_id
|
|||||||
);
|
);
|
||||||
RETURN v_rows_inserted;
|
RETURN v_rows_inserted;
|
||||||
END;
|
END;
|
||||||
$$;
|
$$;*/
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION public.generer_donnees_imposition_tfu_batie(
|
||||||
|
p_impositions_tfu_id BIGINT,
|
||||||
|
p_user_id BIGINT
|
||||||
|
)
|
||||||
|
RETURNS INTEGER
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS $$
|
||||||
|
DECLARE
|
||||||
|
v_rows_inserted INTEGER;
|
||||||
|
v_annee BIGINT;
|
||||||
|
v_structure_id BIGINT;
|
||||||
|
v_taux_defaut_sup_sol NUMERIC;
|
||||||
|
v_taux_tfu NUMERIC;
|
||||||
|
v_taux_tfu_ratio NUMERIC; -- v_taux_tfu / 100 (pré-calculé)
|
||||||
|
v_taux_valeur_locat_prof NUMERIC;
|
||||||
|
v_taux_vlp_ratio NUMERIC; -- v_taux_valeur_locat_prof / 100 (pré-calculé)
|
||||||
|
v_tfu_piscine_unitaire NUMERIC;
|
||||||
|
v_today DATE;
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
v_today := CURRENT_DATE;
|
||||||
|
|
||||||
|
-- -------------------------------------------------------------------------
|
||||||
|
-- 1. Récupération de l'année et de la structure (inchangée)
|
||||||
|
-- -------------------------------------------------------------------------
|
||||||
|
SELECT ex.annee, it.structure_id
|
||||||
|
INTO STRICT v_annee, v_structure_id
|
||||||
|
FROM impositions_tfu it
|
||||||
|
JOIN exercice ex ON ex.id = it.exercice_id
|
||||||
|
WHERE it.id = p_impositions_tfu_id;
|
||||||
|
|
||||||
|
-- -------------------------------------------------------------------------
|
||||||
|
-- 2. Récupération des 4 paramètres en UNE seule requête
|
||||||
|
-- (évite 4 accès séquentiels à la table parameters)
|
||||||
|
-- -------------------------------------------------------------------------
|
||||||
|
SELECT
|
||||||
|
MAX(value) FILTER (WHERE name = 'TAUX_DEFAUT_SUPERFICIE_AU_SOL'),
|
||||||
|
MAX(value) FILTER (WHERE name = 'TAUX_TFU'),
|
||||||
|
MAX(value) FILTER (WHERE name = 'TAUX_VALEUR_LOCATIVE_PROFESSIONNELLE'),
|
||||||
|
MAX(value) FILTER (WHERE name = 'TFU_PAR_PISCINE')
|
||||||
|
INTO STRICT
|
||||||
|
v_taux_defaut_sup_sol,
|
||||||
|
v_taux_tfu,
|
||||||
|
v_taux_valeur_locat_prof,
|
||||||
|
v_tfu_piscine_unitaire
|
||||||
|
FROM parameters
|
||||||
|
WHERE name IN (
|
||||||
|
'TAUX_DEFAUT_SUPERFICIE_AU_SOL',
|
||||||
|
'TAUX_TFU',
|
||||||
|
'TAUX_VALEUR_LOCATIVE_PROFESSIONNELLE',
|
||||||
|
'TFU_PAR_PISCINE'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Ratios pré-calculés pour éviter la division répétée dans le SELECT
|
||||||
|
v_taux_tfu_ratio := v_taux_tfu / 100.0;
|
||||||
|
v_taux_vlp_ratio := v_taux_valeur_locat_prof / 100.0;
|
||||||
|
|
||||||
|
-- -------------------------------------------------------------------------
|
||||||
|
-- 3. INSERT avec calcul complet de valeur_locative_adm et montant_taxe
|
||||||
|
-- → supprime l'UPDATE post-INSERT (économie d'un second scan de table)
|
||||||
|
-- -------------------------------------------------------------------------
|
||||||
|
INSERT INTO donnees_imposition_tfu (
|
||||||
|
annee,
|
||||||
|
code_departement,
|
||||||
|
nom_departement,
|
||||||
|
code_commune,
|
||||||
|
nom_commune,
|
||||||
|
code_arrondissement,
|
||||||
|
nom_arrondissement,
|
||||||
|
code_quartier_village,
|
||||||
|
nom_quartier_village,
|
||||||
|
q,
|
||||||
|
ilot,
|
||||||
|
parcelle,
|
||||||
|
nup,
|
||||||
|
titre_foncier,
|
||||||
|
num_batiment,
|
||||||
|
ifu,
|
||||||
|
npi,
|
||||||
|
tel_prop,
|
||||||
|
email_prop,
|
||||||
|
nom_prop,
|
||||||
|
prenom_prop,
|
||||||
|
raison_sociale,
|
||||||
|
adresse_prop,
|
||||||
|
tel_sc,
|
||||||
|
nom_sc,
|
||||||
|
prenom_sc,
|
||||||
|
longitude,
|
||||||
|
latitude,
|
||||||
|
batie,
|
||||||
|
exonere,
|
||||||
|
batiment_exonere,
|
||||||
|
standing_bat,
|
||||||
|
categorie_bat,
|
||||||
|
nombre_piscine,
|
||||||
|
date_enquete,
|
||||||
|
structure_id,
|
||||||
|
zone_rfu_id,
|
||||||
|
nature_impot,
|
||||||
|
superficie_parc,
|
||||||
|
superficie_au_sol_bat,
|
||||||
|
valeur_batiment,
|
||||||
|
valeur_locative_adm_metre_carre,
|
||||||
|
montant_loyer_annuel,
|
||||||
|
tfu_metre_carre,
|
||||||
|
tfu_minimum,
|
||||||
|
impositions_tfu_id,
|
||||||
|
deleted,
|
||||||
|
created_at,
|
||||||
|
created_by,
|
||||||
|
"source",
|
||||||
|
updated_at,
|
||||||
|
updated_by,
|
||||||
|
categorie_usage,
|
||||||
|
superficie_au_sol_taux_prop_parc, -- 70 % superficie parcelle
|
||||||
|
valeur_locative_adm_taux_prop_parc,
|
||||||
|
tfu_calcule_taux_prop_parc, -- TFU à 70 %
|
||||||
|
valeur_locative_adm_sup_reel,
|
||||||
|
valeur_locative_adm, -- valeur locative administrative finale
|
||||||
|
tfu_superficie_au_sol_reel,
|
||||||
|
tfu_piscine,
|
||||||
|
montant_taxe, -- TFU finale
|
||||||
|
taux_tfu,
|
||||||
|
parcelle_id,
|
||||||
|
batiment_id,
|
||||||
|
unite_logement_id,
|
||||||
|
personne_id
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
v_annee,
|
||||||
|
d.code,
|
||||||
|
d.nom,
|
||||||
|
c.code,
|
||||||
|
c.nom,
|
||||||
|
a.code,
|
||||||
|
a.nom,
|
||||||
|
q.code,
|
||||||
|
q.nom,
|
||||||
|
p.q,
|
||||||
|
p.i,
|
||||||
|
p.p,
|
||||||
|
p.nup,
|
||||||
|
ep.numero_titre_foncier,
|
||||||
|
b.nub,
|
||||||
|
pers.ifu,
|
||||||
|
pers.npi,
|
||||||
|
pers.tel1,
|
||||||
|
pers.email,
|
||||||
|
pers.nom,
|
||||||
|
pers.prenom,
|
||||||
|
pers.raison_sociale,
|
||||||
|
pers.adresse,
|
||||||
|
ep.representant_tel,
|
||||||
|
ep.representant_nom,
|
||||||
|
ep.representant_prenom,
|
||||||
|
p.longitude,
|
||||||
|
p.latitude,
|
||||||
|
TRUE,
|
||||||
|
-- exonere parcelle
|
||||||
|
(v_today BETWEEN ep.date_debut_exemption
|
||||||
|
AND COALESCE(ep.date_fin_exemption, v_today)),
|
||||||
|
-- exonere batiment
|
||||||
|
(v_today BETWEEN eb.date_debut_excemption
|
||||||
|
AND COALESCE(eb.date_fin_excemption, v_today)),
|
||||||
|
cb.standing,
|
||||||
|
cb.nom,
|
||||||
|
eb.nombre_piscine,
|
||||||
|
eb.date_enquete,
|
||||||
|
st.id,
|
||||||
|
ep.zone_rfu_id,
|
||||||
|
'TFU',
|
||||||
|
p.superficie,
|
||||||
|
eb.superficie_au_sol,
|
||||||
|
-- valeur_batiment : première valeur non nulle non zéro
|
||||||
|
COALESCE(
|
||||||
|
NULLIF(eb.valeur_batiment_reel, 0),
|
||||||
|
NULLIF(eb.valeur_batiment_calcule, 0),
|
||||||
|
NULLIF(eb.valeur_batiment_estime, 0),
|
||||||
|
0
|
||||||
|
),
|
||||||
|
brb.valeur_locative,
|
||||||
|
-- montant_loyer_annuel
|
||||||
|
COALESCE(
|
||||||
|
NULLIF(eb.montant_locatif_annuel_declare, 0),
|
||||||
|
NULLIF(eb.montant_locatif_annuel_calcule, 0),
|
||||||
|
NULLIF(eb.montant_locatif_annuel_estime, 0),
|
||||||
|
0
|
||||||
|
),
|
||||||
|
brb.tfu_metre_carre,
|
||||||
|
brb.tfu_minimum,
|
||||||
|
p_impositions_tfu_id,
|
||||||
|
FALSE,
|
||||||
|
v_today,
|
||||||
|
p_user_id,
|
||||||
|
'FISCAD',
|
||||||
|
v_today,
|
||||||
|
p_user_id,
|
||||||
|
eb.categorie_usage,
|
||||||
|
|
||||||
|
-- superficie_au_sol_taux_prop_parc (70 % parcelle)
|
||||||
|
p.superficie * v_taux_defaut_sup_sol / 100.0,
|
||||||
|
|
||||||
|
-- valeur_locative_adm_taux_prop_parc
|
||||||
|
CASE WHEN eb.categorie_usage = 'HABITATION'
|
||||||
|
THEN (p.superficie * v_taux_defaut_sup_sol / 100.0) * brb.valeur_locative
|
||||||
|
ELSE 0
|
||||||
|
END,
|
||||||
|
|
||||||
|
-- tfu_calcule_taux_prop_parc
|
||||||
|
CASE WHEN eb.categorie_usage = 'HABITATION'
|
||||||
|
THEN (p.superficie * v_taux_defaut_sup_sol / 100.0) * brb.valeur_locative * v_taux_tfu_ratio
|
||||||
|
ELSE 0
|
||||||
|
END,
|
||||||
|
|
||||||
|
-- valeur_locative_adm_sup_reel
|
||||||
|
CASE WHEN eb.categorie_usage = 'HABITATION'
|
||||||
|
THEN eb.superficie_au_sol * brb.valeur_locative
|
||||||
|
ELSE 0
|
||||||
|
END,
|
||||||
|
|
||||||
|
-- ---------------------------------------------------------------
|
||||||
|
-- 🔧 CORRECTION : valeur_locative_adm avec tests explicites
|
||||||
|
-- ---------------------------------------------------------------
|
||||||
|
CASE
|
||||||
|
WHEN eb.categorie_usage = 'HABITATION'
|
||||||
|
AND eb.superficie_au_sol <> 0
|
||||||
|
THEN eb.superficie_au_sol * brb.valeur_locative
|
||||||
|
|
||||||
|
WHEN eb.categorie_usage = 'HABITATION'
|
||||||
|
AND eb.superficie_au_sol = 0
|
||||||
|
THEN (p.superficie * v_taux_defaut_sup_sol / 100.0) * brb.valeur_locative
|
||||||
|
|
||||||
|
-- ✅ Test explicite : valeur_batiment <> 0
|
||||||
|
WHEN eb.categorie_usage IN ('PROFESSIONNELLE', 'MIXTE')
|
||||||
|
AND COALESCE(NULLIF(eb.valeur_batiment_reel, 0),
|
||||||
|
NULLIF(eb.valeur_batiment_calcule, 0),
|
||||||
|
NULLIF(eb.valeur_batiment_estime, 0), 0) <> 0
|
||||||
|
THEN COALESCE(NULLIF(eb.valeur_batiment_reel, 0),
|
||||||
|
NULLIF(eb.valeur_batiment_calcule, 0),
|
||||||
|
NULLIF(eb.valeur_batiment_estime, 0), 0)
|
||||||
|
* v_taux_vlp_ratio
|
||||||
|
|
||||||
|
-- ✅ Test explicite : valeur_batiment = 0
|
||||||
|
WHEN eb.categorie_usage IN ('PROFESSIONNELLE', 'MIXTE')
|
||||||
|
AND COALESCE(NULLIF(eb.valeur_batiment_reel, 0),
|
||||||
|
NULLIF(eb.valeur_batiment_calcule, 0),
|
||||||
|
NULLIF(eb.valeur_batiment_estime, 0), 0) = 0
|
||||||
|
THEN COALESCE(NULLIF(eb.montant_locatif_annuel_declare, 0),
|
||||||
|
NULLIF(eb.montant_locatif_annuel_calcule, 0),
|
||||||
|
NULLIF(eb.montant_locatif_annuel_estime, 0), 0)
|
||||||
|
|
||||||
|
ELSE 0
|
||||||
|
END,
|
||||||
|
|
||||||
|
-- tfu_superficie_au_sol_reel
|
||||||
|
CASE WHEN eb.categorie_usage = 'HABITATION'
|
||||||
|
THEN eb.superficie_au_sol * brb.valeur_locative * v_taux_tfu_ratio
|
||||||
|
ELSE 0
|
||||||
|
END,
|
||||||
|
|
||||||
|
-- tfu_piscine
|
||||||
|
eb.nombre_piscine * v_tfu_piscine_unitaire,
|
||||||
|
|
||||||
|
-- ---------------------------------------------------------------
|
||||||
|
-- montant_taxe ← calculé directement (plus d'UPDATE)
|
||||||
|
-- Utilise des CTE inline via expression pour éviter la redondance
|
||||||
|
-- ---------------------------------------------------------------
|
||||||
|
(
|
||||||
|
-- On matérialise valeur_batiment et valeur_locative une seule fois
|
||||||
|
WITH calc AS (
|
||||||
|
SELECT
|
||||||
|
COALESCE(NULLIF(eb.valeur_batiment_reel, 0),
|
||||||
|
NULLIF(eb.valeur_batiment_calcule, 0),
|
||||||
|
NULLIF(eb.valeur_batiment_estime, 0), 0) AS vb,
|
||||||
|
COALESCE(NULLIF(eb.montant_locatif_annuel_declare, 0),
|
||||||
|
NULLIF(eb.montant_locatif_annuel_calcule, 0),
|
||||||
|
NULLIF(eb.montant_locatif_annuel_estime, 0), 0) AS loyer,
|
||||||
|
eb.superficie_au_sol * brb.valeur_locative AS vla_reel,
|
||||||
|
(p.superficie * v_taux_defaut_sup_sol / 100.0)
|
||||||
|
* brb.valeur_locative AS vla_70
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
CASE
|
||||||
|
WHEN eb.categorie_usage = 'HABITATION'
|
||||||
|
AND eb.superficie_au_sol <> 0
|
||||||
|
THEN GREATEST(brb.tfu_minimum,
|
||||||
|
calc.vla_reel * v_taux_tfu_ratio
|
||||||
|
+ eb.nombre_piscine * v_tfu_piscine_unitaire)
|
||||||
|
|
||||||
|
WHEN eb.categorie_usage = 'HABITATION'
|
||||||
|
AND eb.superficie_au_sol = 0
|
||||||
|
THEN GREATEST(brb.tfu_minimum,
|
||||||
|
calc.vla_70 * v_taux_tfu_ratio
|
||||||
|
+ eb.nombre_piscine * v_tfu_piscine_unitaire)
|
||||||
|
|
||||||
|
WHEN eb.categorie_usage IN ('PROFESSIONNELLE', 'MIXTE')
|
||||||
|
AND calc.vb <> 0
|
||||||
|
THEN GREATEST(brb.tfu_minimum,
|
||||||
|
calc.vb * v_taux_vlp_ratio * v_taux_tfu_ratio)
|
||||||
|
|
||||||
|
WHEN eb.categorie_usage IN ('PROFESSIONNELLE', 'MIXTE')
|
||||||
|
AND calc.vb = 0
|
||||||
|
THEN GREATEST(brb.tfu_minimum,
|
||||||
|
calc.loyer * v_taux_tfu_ratio)
|
||||||
|
|
||||||
|
ELSE brb.tfu_minimum
|
||||||
|
END
|
||||||
|
FROM calc
|
||||||
|
),
|
||||||
|
|
||||||
|
v_taux_tfu,
|
||||||
|
p.id,
|
||||||
|
b.id,
|
||||||
|
NULL,
|
||||||
|
ep.personne_id
|
||||||
|
FROM parcelle p
|
||||||
|
|
||||||
|
-- Dernière enquête parcelle
|
||||||
|
LEFT JOIN LATERAL (
|
||||||
|
SELECT
|
||||||
|
parcelle_id,
|
||||||
|
superficie,
|
||||||
|
personne_id,
|
||||||
|
numero_titre_foncier,
|
||||||
|
date_enquete,
|
||||||
|
representant_tel,
|
||||||
|
representant_nom,
|
||||||
|
representant_prenom,
|
||||||
|
representant_npi,
|
||||||
|
date_debut_exemption,
|
||||||
|
date_fin_exemption,
|
||||||
|
zone_rfu_id
|
||||||
|
FROM enquete
|
||||||
|
WHERE parcelle_id = p.id
|
||||||
|
ORDER BY date_enquete DESC, id DESC
|
||||||
|
LIMIT 1
|
||||||
|
) ep ON TRUE
|
||||||
|
|
||||||
|
LEFT JOIN personne pers ON pers.id = ep.personne_id
|
||||||
|
|
||||||
|
JOIN quartier q ON q.id = p.quartier_id
|
||||||
|
JOIN arrondissement a ON a.id = q.arrondissement_id
|
||||||
|
JOIN commune c ON c.id = a.commune_id
|
||||||
|
JOIN departement d ON d.id = c.departement_id
|
||||||
|
|
||||||
|
-- Rattachement structure via secteur (DISTINCT ON → LATERAL plus lisible)
|
||||||
|
JOIN LATERAL (
|
||||||
|
SELECT secteur_id
|
||||||
|
FROM secteur_decoupage
|
||||||
|
WHERE quartier_id = q.id
|
||||||
|
ORDER BY quartier_id
|
||||||
|
LIMIT 1
|
||||||
|
) sd ON TRUE
|
||||||
|
JOIN secteur sect ON sect.id = sd.secteur_id
|
||||||
|
JOIN section ses ON ses.id = sect.section_id
|
||||||
|
JOIN "structure" st ON st.id = ses.structure_id
|
||||||
|
|
||||||
|
-- Bâtiments sans unités logement (anti-join via LEFT JOIN … IS NULL)
|
||||||
|
JOIN batiment b ON b.parcelle_id = p.id
|
||||||
|
LEFT JOIN unite_logement ul_filter ON ul_filter.batiment_id = b.id
|
||||||
|
|
||||||
|
-- Dernière enquête bâtiment
|
||||||
|
JOIN LATERAL (
|
||||||
|
SELECT
|
||||||
|
eb2.batiment_id,
|
||||||
|
eb2.superficie_au_sol,
|
||||||
|
eb2.nombre_piscine,
|
||||||
|
eb2.categorie_batiment_id,
|
||||||
|
eb2.date_enquete,
|
||||||
|
eb2.montant_locatif_annuel_declare,
|
||||||
|
eb2.montant_locatif_annuel_calcule,
|
||||||
|
eb2.montant_locatif_annuel_estime,
|
||||||
|
eb2.date_debut_excemption,
|
||||||
|
eb2.date_fin_excemption,
|
||||||
|
eb2.valeur_batiment_reel,
|
||||||
|
eb2.valeur_batiment_calcule,
|
||||||
|
eb2.valeur_batiment_estime,
|
||||||
|
u.categorie_usage
|
||||||
|
FROM enquete_batiment eb2
|
||||||
|
JOIN usage u ON u.id = eb2.usage_id
|
||||||
|
WHERE eb2.batiment_id = b.id
|
||||||
|
ORDER BY eb2.date_enquete DESC, eb2.id DESC
|
||||||
|
LIMIT 1
|
||||||
|
) eb ON TRUE
|
||||||
|
|
||||||
|
JOIN categorie_batiment cb ON cb.id = eb.categorie_batiment_id
|
||||||
|
|
||||||
|
-- Barème RFU bâti (inchangé)
|
||||||
|
JOIN LATERAL (
|
||||||
|
SELECT *
|
||||||
|
FROM barem_rfu_bati br
|
||||||
|
WHERE br.categorie_batiment_id = cb.id
|
||||||
|
AND br.arrondissement_id = a.id
|
||||||
|
AND (br.quartier_id = q.id OR br.quartier_id IS NULL)
|
||||||
|
ORDER BY br.quartier_id DESC NULLS LAST
|
||||||
|
LIMIT 1
|
||||||
|
) brb ON TRUE
|
||||||
|
|
||||||
|
WHERE p.batie = TRUE
|
||||||
|
AND ul_filter.batiment_id IS NULL -- anti-join : pas d'unité logement
|
||||||
|
AND st.id = v_structure_id
|
||||||
|
|
||||||
|
ON CONFLICT DO NOTHING;
|
||||||
|
|
||||||
|
GET DIAGNOSTICS v_rows_inserted = ROW_COUNT;
|
||||||
|
|
||||||
|
RETURN v_rows_inserted;
|
||||||
|
END;
|
||||||
|
$$;
|
||||||
|
|||||||
@@ -246,7 +246,14 @@ FROM parcelle p
|
|||||||
JOIN arrondissement a ON a.id = q.arrondissement_id
|
JOIN arrondissement a ON a.id = q.arrondissement_id
|
||||||
JOIN commune c ON c.id = a.commune_id
|
JOIN commune c ON c.id = a.commune_id
|
||||||
JOIN departement d ON d.id = c.departement_id
|
JOIN departement d ON d.id = c.departement_id
|
||||||
JOIN secteur_decoupage sd ON sd.quartier_id = q.id
|
--JOIN secteur_decoupage sd ON sd.quartier_id = q.id
|
||||||
|
JOIN (
|
||||||
|
SELECT DISTINCT ON (quartier_id)
|
||||||
|
quartier_id,
|
||||||
|
secteur_id
|
||||||
|
FROM secteur_decoupage
|
||||||
|
ORDER BY quartier_id
|
||||||
|
) sd ON sd.quartier_id = q.id
|
||||||
JOIN secteur sect ON sect.id = sd.secteur_id
|
JOIN secteur sect ON sect.id = sd.secteur_id
|
||||||
JOIN section ses ON ses.id = sect.section_id
|
JOIN section ses ON ses.id = sect.section_id
|
||||||
JOIN "structure" st ON st.id = ses.structure_id
|
JOIN "structure" st ON st.id = ses.structure_id
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
CREATE OR REPLACE FUNCTION public.generer_donnees_imposition_tfu_non_batie(
|
/*CREATE OR REPLACE FUNCTION public.generer_donnees_imposition_tfu_non_batie(
|
||||||
p_impositions_tfu_id BIGINT,
|
p_impositions_tfu_id BIGINT,
|
||||||
p_user_id BIGINT
|
p_user_id BIGINT
|
||||||
)
|
)
|
||||||
@@ -159,4 +159,189 @@ GET DIAGNOSTICS v_rows_inserted = ROW_COUNT;
|
|||||||
|
|
||||||
RETURN v_rows_inserted;
|
RETURN v_rows_inserted;
|
||||||
END;
|
END;
|
||||||
$$;
|
$$;*/
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION public.generer_donnees_imposition_tfu_non_batie(
|
||||||
|
p_impositions_tfu_id BIGINT,
|
||||||
|
p_user_id BIGINT
|
||||||
|
)
|
||||||
|
RETURNS INTEGER
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS
|
||||||
|
$$
|
||||||
|
DECLARE
|
||||||
|
v_rows_inserted INTEGER;
|
||||||
|
v_annee BIGINT;
|
||||||
|
v_structure_id BIGINT;
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
-- récupération de l'année
|
||||||
|
SELECT ex.annee, it.structure_id
|
||||||
|
INTO STRICT v_annee, v_structure_id
|
||||||
|
FROM impositions_tfu it
|
||||||
|
JOIN exercice ex ON ex.id = it.exercice_id
|
||||||
|
WHERE it.id = p_impositions_tfu_id;
|
||||||
|
|
||||||
|
|
||||||
|
INSERT INTO donnees_imposition_tfu(
|
||||||
|
annee,
|
||||||
|
code_departement,
|
||||||
|
nom_departement,
|
||||||
|
code_commune,
|
||||||
|
nom_commune,
|
||||||
|
code_arrondissement,
|
||||||
|
nom_arrondissement,
|
||||||
|
code_quartier_village,
|
||||||
|
nom_quartier_village,
|
||||||
|
q,
|
||||||
|
ilot,
|
||||||
|
parcelle,
|
||||||
|
nup,
|
||||||
|
titre_foncier,
|
||||||
|
ifu,
|
||||||
|
npi,
|
||||||
|
tel_prop,
|
||||||
|
email_prop,
|
||||||
|
nom_prop,
|
||||||
|
prenom_prop,
|
||||||
|
raison_sociale,
|
||||||
|
adresse_prop,
|
||||||
|
tel_sc,
|
||||||
|
nom_sc,
|
||||||
|
prenom_sc,
|
||||||
|
longitude,
|
||||||
|
latitude,
|
||||||
|
batie,
|
||||||
|
exonere,
|
||||||
|
date_enquete,
|
||||||
|
structure_id,
|
||||||
|
zone_rfu_id,
|
||||||
|
nature_impot,
|
||||||
|
superficie_parc,
|
||||||
|
impositions_tfu_id,
|
||||||
|
deleted,
|
||||||
|
created_at,
|
||||||
|
created_by,
|
||||||
|
"source",
|
||||||
|
updated_at,
|
||||||
|
updated_by,
|
||||||
|
taux_tfu,
|
||||||
|
valeur_admin_parcelle_nb,
|
||||||
|
valeur_admin_parcelle_nb_metre_carre,
|
||||||
|
montant_taxe,
|
||||||
|
parcelle_id,
|
||||||
|
personne_id
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
v_annee,
|
||||||
|
d.code,
|
||||||
|
d.nom,
|
||||||
|
c.code,
|
||||||
|
c.nom,
|
||||||
|
a.code,
|
||||||
|
a.nom,
|
||||||
|
q.code,
|
||||||
|
q.nom,
|
||||||
|
p.q,
|
||||||
|
p.i,
|
||||||
|
p.p,
|
||||||
|
p.nup,
|
||||||
|
ep.numero_titre_foncier,
|
||||||
|
pers.ifu,
|
||||||
|
pers.npi,
|
||||||
|
pers.tel1,
|
||||||
|
pers.email,
|
||||||
|
pers.nom,
|
||||||
|
pers.prenom,
|
||||||
|
pers.raison_sociale,
|
||||||
|
pers.adresse,
|
||||||
|
ep.representant_tel,
|
||||||
|
ep.representant_nom,
|
||||||
|
ep.representant_prenom,
|
||||||
|
p.longitude,
|
||||||
|
p.latitude,
|
||||||
|
false,
|
||||||
|
(
|
||||||
|
CURRENT_DATE >= ep.date_debut_exemption
|
||||||
|
AND CURRENT_DATE <= COALESCE(ep.date_fin_exemption, CURRENT_DATE)
|
||||||
|
),
|
||||||
|
ep.date_enquete,
|
||||||
|
st.id,
|
||||||
|
ep.zone_rfu_id,
|
||||||
|
'TFU',
|
||||||
|
p.superficie,
|
||||||
|
p_impositions_tfu_id,
|
||||||
|
false,
|
||||||
|
current_date,
|
||||||
|
p_user_id,
|
||||||
|
'FISCAD',
|
||||||
|
current_date,
|
||||||
|
p_user_id,
|
||||||
|
brnb.taux,
|
||||||
|
CASE
|
||||||
|
WHEN brnb.au_metre_carre = true
|
||||||
|
THEN brnb.valeur_administrative_metre_carre * ep.superficie
|
||||||
|
ELSE brnb.valeur_administrative
|
||||||
|
END,
|
||||||
|
brnb.valeur_administrative_metre_carre,
|
||||||
|
CASE
|
||||||
|
WHEN brnb.au_metre_carre = true
|
||||||
|
THEN brnb.valeur_administrative_metre_carre * ep.superficie * brnb.taux / 100
|
||||||
|
ELSE brnb.valeur_administrative * brnb.taux / 100
|
||||||
|
END,
|
||||||
|
p.id,
|
||||||
|
ep.personne_id
|
||||||
|
FROM parcelle p
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT DISTINCT ON (parcelle_id)
|
||||||
|
parcelle_id,
|
||||||
|
superficie,
|
||||||
|
personne_id,
|
||||||
|
numero_titre_foncier,
|
||||||
|
date_enquete,
|
||||||
|
representant_tel,
|
||||||
|
representant_nom,
|
||||||
|
representant_prenom,
|
||||||
|
representant_npi,
|
||||||
|
date_debut_exemption,
|
||||||
|
date_fin_exemption,
|
||||||
|
zone_rfu_id
|
||||||
|
FROM enquete
|
||||||
|
ORDER BY parcelle_id, date_enquete DESC
|
||||||
|
) ep ON ep.parcelle_id = p.id
|
||||||
|
|
||||||
|
LEFT JOIN personne pers ON pers.id = ep.personne_id
|
||||||
|
|
||||||
|
JOIN quartier q ON q.id = p.quartier_id
|
||||||
|
JOIN arrondissement a ON a.id = q.arrondissement_id
|
||||||
|
JOIN commune c ON c.id = a.commune_id
|
||||||
|
JOIN departement d ON d.id = c.departement_id
|
||||||
|
|
||||||
|
-- ✅ CORRECTION ICI
|
||||||
|
JOIN (
|
||||||
|
SELECT DISTINCT ON (quartier_id)
|
||||||
|
quartier_id,
|
||||||
|
secteur_id
|
||||||
|
FROM secteur_decoupage
|
||||||
|
ORDER BY quartier_id
|
||||||
|
) sd ON sd.quartier_id = q.id
|
||||||
|
|
||||||
|
JOIN secteur sect ON sect.id = sd.secteur_id
|
||||||
|
JOIN section ses ON ses.id = sect.section_id
|
||||||
|
JOIN "structure" st ON st.id = ses.structure_id
|
||||||
|
|
||||||
|
LEFT JOIN barem_rfu_non_bati brnb
|
||||||
|
ON (brnb.commune_id = c.id AND brnb.zone_rfu_id = ep.zone_rfu_id)
|
||||||
|
|
||||||
|
WHERE p.batie = false
|
||||||
|
AND st.id = v_structure_id
|
||||||
|
|
||||||
|
ON CONFLICT DO NOTHING;
|
||||||
|
|
||||||
|
GET DIAGNOSTICS v_rows_inserted = ROW_COUNT;
|
||||||
|
|
||||||
|
RETURN v_rows_inserted;
|
||||||
|
|
||||||
|
END;
|
||||||
|
$$;
|
||||||
|
|
||||||
|
|||||||
@@ -555,7 +555,7 @@ SELECT new io.gmss.fiscad.paylaods.request.crudweb.DonneesImpositionPaylaodWeb(
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Query("""
|
@Query(value = """
|
||||||
SELECT new io.gmss.fiscad.paylaods.request.crudweb.DonneesImpositionPaylaodWeb(
|
SELECT new io.gmss.fiscad.paylaods.request.crudweb.DonneesImpositionPaylaodWeb(
|
||||||
d.id,
|
d.id,
|
||||||
d.annee,
|
d.annee,
|
||||||
@@ -625,10 +625,179 @@ SELECT new io.gmss.fiscad.paylaods.request.crudweb.DonneesImpositionPaylaodWeb(
|
|||||||
WHERE itfu.exercice.id = :exerciceId
|
WHERE itfu.exercice.id = :exerciceId
|
||||||
and s.id= :structureId
|
and s.id= :structureId
|
||||||
order by d.nomProp,d.nomProp asc
|
order by d.nomProp,d.nomProp asc
|
||||||
|
""",
|
||||||
|
countQuery = """
|
||||||
|
select count(*)
|
||||||
|
FROM DonneesImpositionTfu d
|
||||||
|
JOIN d.impositionsTfu itfu
|
||||||
|
LEFT join d.structure s
|
||||||
|
LEFT join d.zoneRfu z
|
||||||
|
WHERE itfu.exercice.id = :exerciceId
|
||||||
|
and s.id= :structureId
|
||||||
""")
|
""")
|
||||||
Page<DonneesImpositionPaylaodWeb> findAllByExericeIdStructureIdPageable(
|
Page<DonneesImpositionPaylaodWeb> findAllByExericeIdStructureIdPageable(
|
||||||
Long exerciceId,
|
Long exerciceId,
|
||||||
Long structureId,
|
Long structureId,
|
||||||
Pageable pageable
|
Pageable pageable
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Query("""
|
||||||
|
SELECT new io.gmss.fiscad.paylaods.request.crudweb.DonneesImpositionPaylaodWeb(
|
||||||
|
d.id,
|
||||||
|
d.annee,
|
||||||
|
d.codeDepartement,
|
||||||
|
d.nomDepartement,
|
||||||
|
d.codeCommune,
|
||||||
|
d.nomCommune,
|
||||||
|
d.codeArrondissement,
|
||||||
|
d.nomArrondissement,
|
||||||
|
d.codeQuartierVillage,
|
||||||
|
d.nomQuartierVillage,
|
||||||
|
d.q,
|
||||||
|
d.ilot,
|
||||||
|
d.parcelle,
|
||||||
|
d.nup,
|
||||||
|
d.titreFoncier,
|
||||||
|
d.numBatiment,
|
||||||
|
d.numUniteLogement,
|
||||||
|
d.ifu,
|
||||||
|
d.npi,
|
||||||
|
d.telProp,
|
||||||
|
d.emailProp,
|
||||||
|
d.nomProp,
|
||||||
|
d.prenomProp,
|
||||||
|
d.raisonSociale,
|
||||||
|
d.adresseProp,
|
||||||
|
d.telSc,
|
||||||
|
d.emailSc,
|
||||||
|
d.nomSc,
|
||||||
|
d.prenomSc,
|
||||||
|
d.adresseSc,
|
||||||
|
d.longitude,
|
||||||
|
d.latitude,
|
||||||
|
d.superficieParc,
|
||||||
|
d.superficieAuSolBat,
|
||||||
|
d.superficieAuSolUlog,
|
||||||
|
d.batie,
|
||||||
|
d.exonere,
|
||||||
|
d.batimentExonere,
|
||||||
|
d.uniteLogementExonere,
|
||||||
|
d.valeurLocativeAdm,
|
||||||
|
d.montantLoyerAnnuel,
|
||||||
|
d.tfuMetreCarre,
|
||||||
|
d.tfuMinimum,
|
||||||
|
d.standingBat,
|
||||||
|
d.categorieBat,
|
||||||
|
d.nombrePiscine,
|
||||||
|
d.nombreUlog,
|
||||||
|
d.nombreBat,
|
||||||
|
d.dateEnquete,
|
||||||
|
s.id,
|
||||||
|
z.id,
|
||||||
|
d.valeurAdminParcelleNb,
|
||||||
|
d.natureImpot,
|
||||||
|
s.code,
|
||||||
|
z.nom,
|
||||||
|
d.valeurBatiment,
|
||||||
|
d.valeurParcelle,
|
||||||
|
d.valeurLocativeAdmMetreCarre,
|
||||||
|
d.valeurAdminParcelleNbMetreCarre,
|
||||||
|
d.montantTaxe
|
||||||
|
)
|
||||||
|
FROM DonneesImpositionTfu d
|
||||||
|
JOIN d.impositionsTfu itfu
|
||||||
|
JOIN d.parcelleImposee parc
|
||||||
|
JOIN parc.quartier quart
|
||||||
|
LEFT join d.structure s
|
||||||
|
LEFT join d.zoneRfu z
|
||||||
|
WHERE itfu.exercice.id = :exerciceId
|
||||||
|
and s.id= :structureId
|
||||||
|
and quart.id= :quartierId
|
||||||
|
order by d.nomProp,d.nomProp asc
|
||||||
|
""")
|
||||||
|
List<DonneesImpositionPaylaodWeb> findAllByExericeIdStructureId(
|
||||||
|
Long exerciceId,
|
||||||
|
Long structureId,
|
||||||
|
Long quartierId
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Query("""
|
||||||
|
SELECT new io.gmss.fiscad.paylaods.request.crudweb.DonneesImpositionPaylaodWeb(
|
||||||
|
d.id,
|
||||||
|
d.annee,
|
||||||
|
d.codeDepartement,
|
||||||
|
d.nomDepartement,
|
||||||
|
d.codeCommune,
|
||||||
|
d.nomCommune,
|
||||||
|
d.codeArrondissement,
|
||||||
|
d.nomArrondissement,
|
||||||
|
d.codeQuartierVillage,
|
||||||
|
d.nomQuartierVillage,
|
||||||
|
d.q,
|
||||||
|
d.ilot,
|
||||||
|
d.parcelle,
|
||||||
|
d.nup,
|
||||||
|
d.titreFoncier,
|
||||||
|
d.numBatiment,
|
||||||
|
d.numUniteLogement,
|
||||||
|
d.ifu,
|
||||||
|
d.npi,
|
||||||
|
d.telProp,
|
||||||
|
d.emailProp,
|
||||||
|
d.nomProp,
|
||||||
|
d.prenomProp,
|
||||||
|
d.raisonSociale,
|
||||||
|
d.adresseProp,
|
||||||
|
d.telSc,
|
||||||
|
d.emailSc,
|
||||||
|
d.nomSc,
|
||||||
|
d.prenomSc,
|
||||||
|
d.adresseSc,
|
||||||
|
d.longitude,
|
||||||
|
d.latitude,
|
||||||
|
d.superficieParc,
|
||||||
|
d.superficieAuSolBat,
|
||||||
|
d.superficieAuSolUlog,
|
||||||
|
d.batie,
|
||||||
|
d.exonere,
|
||||||
|
d.batimentExonere,
|
||||||
|
d.uniteLogementExonere,
|
||||||
|
d.valeurLocativeAdm,
|
||||||
|
d.montantLoyerAnnuel,
|
||||||
|
d.tfuMetreCarre,
|
||||||
|
d.tfuMinimum,
|
||||||
|
d.standingBat,
|
||||||
|
d.categorieBat,
|
||||||
|
d.nombrePiscine,
|
||||||
|
d.nombreUlog,
|
||||||
|
d.nombreBat,
|
||||||
|
d.dateEnquete,
|
||||||
|
s.id,
|
||||||
|
z.id,
|
||||||
|
d.valeurAdminParcelleNb,
|
||||||
|
d.natureImpot,
|
||||||
|
s.code,
|
||||||
|
z.nom,
|
||||||
|
d.valeurBatiment,
|
||||||
|
d.valeurParcelle,
|
||||||
|
d.valeurLocativeAdmMetreCarre,
|
||||||
|
d.valeurAdminParcelleNbMetreCarre,
|
||||||
|
d.montantTaxe
|
||||||
|
)
|
||||||
|
FROM DonneesImpositionTfu d
|
||||||
|
JOIN d.impositionsTfu itfu
|
||||||
|
JOIN d.parcelleImposee parc
|
||||||
|
JOIN parc.quartier quart
|
||||||
|
LEFT join d.structure s
|
||||||
|
LEFT join d.zoneRfu z
|
||||||
|
WHERE d.personne.id = :personneId
|
||||||
|
order by d.nomProp,d.nomProp asc
|
||||||
|
""")
|
||||||
|
List<DonneesImpositionPaylaodWeb> findAllByPersonneId(
|
||||||
|
@Param("personneId") Long personneId
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user