Skip to content

Commit

Permalink
Merge pull request #703 from rufener/base_number_modif
Browse files Browse the repository at this point in the history
New fonctionnality to update base number of PPE or PCOP
  • Loading branch information
rufener authored Dec 15, 2022
2 parents 48919a9 + 54a3a0e commit 22ccc19
Show file tree
Hide file tree
Showing 9 changed files with 156 additions and 53 deletions.
1 change: 1 addition & 0 deletions back/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ venv.bak/
/development.ini
/production.ini
/prepub.ini
/local.ini

# alembic versions
infolica/alembic/versions/old
Expand Down
1 change: 1 addition & 0 deletions back/infolica/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ def includeme(config):
#Référence de numéros
config.add_route('reference_numeros','/infolica/api/reference_numeros')
config.add_route('reference_numeros_s','/infolica/api/reference_numeros/')
config.add_route('modification_reference_numeros','/infolica/api/modification_reference_numeros')
#Réservation de numéros
config.add_route('reservation_numeros','/infolica/api/reservation_numeros')
config.add_route('reservation_numeros_s','/infolica/api/reservation_numeros/')
Expand Down
1 change: 1 addition & 0 deletions back/infolica/views/default.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ def test_error(exc, request):
@view_config(route_name='numero_by_id', request_method='OPTIONS', renderer='json')
@view_config(route_name='reference_numeros', request_method='OPTIONS', renderer='json')
@view_config(route_name='reference_numeros_s', request_method='OPTIONS', renderer='json')
@view_config(route_name='modification_reference_numeros', request_method='OPTIONS', renderer='json')
@view_config(route_name='preavis', request_method='OPTIONS', renderer='json')
@view_config(route_name='preavis_s', request_method='OPTIONS', renderer='json')
@view_config(route_name='suivi_mandats', request_method='OPTIONS', renderer='json')
Expand Down
38 changes: 37 additions & 1 deletion back/infolica/views/reference_numeros.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from sqlalchemy import and_

from infolica.models.constant import Constant
from infolica.models.models import AffaireNumero, Numero, Affaire, Facture
from infolica.models.models import AffaireNumero, Numero, Affaire, Facture, NumeroRelation
from infolica.scripts.utils import Utils
from infolica.views.numero import affaire_numero_new_view

Expand Down Expand Up @@ -80,3 +80,39 @@ def reference_numeros_delete_view(request):
request.dbsession.delete(affNum)

return Utils.get_data_save_response(Constant.SUCCESS_SAVE.format(Numero.__tablename__))


@view_config(route_name='modification_reference_numeros', request_method='POST', renderer='json')
def modification_reference_numeros_view(request):
"""
modification reference numero
"""
# Check authorization
if not Utils.has_permission(request, request.registry.settings['affaire_numero_edition']):
raise exc.HTTPForbidden()

# Get affaire_id
affaire_id = request.params['affaire_id'] if 'affaire_id' in request.params else None

# get old and new number
numero_id_old = request.params['numero_id_old'] if 'numero_id_old' in request.params else None
numero_id_new = request.params['numero_id_new'] if 'numero_id_new' in request.params else None

# update affaire_numero
affnum = request.dbsession.query(AffaireNumero).filter(
AffaireNumero.affaire_id==affaire_id,
AffaireNumero.numero_id==numero_id_old
).first()
affnum.numero_id = numero_id_new

# update numero_relation if already exists
numrel = request.dbsession.query(NumeroRelation).filter(
NumeroRelation.affaire_id==affaire_id,
NumeroRelation.numero_id_base==numero_id_old
).all()

for numrel_i in numrel:
numrel_i.numero_id_base = numero_id_new

return exc.HTTPOk(detail="Le numéro de base a été modifié correctement (num_id {}->{}) dans l'affaire {}".format(numero_id_old, numero_id_new, affaire_id))

1 change: 1 addition & 0 deletions front/.env
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ VUE_APP_NUMEROS_DIFFERES_ENDPOINT = "/numeros_differes"

#Réservation_numéros
VUE_APP_REFERENCE_NUMEROS_ENDPOINT = "/reference_numeros/"
VUE_APP_MODIFICATION_REFERENCE_NUMEROS_ENDPOINT = "/modification_reference_numeros"

#Réservation_numéros
VUE_APP_RESERVATION_NUMEROS_ENDPOINT = "/reservation_numeros/"
Expand Down
145 changes: 97 additions & 48 deletions front/src/components/Affaires/NumerosAffaire/NumerosAffaire.vue
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@ export default {
numerosMoLoading: true,
show: {
balance: false,
deleteReferencedNumberColumn: false,
deleteReferencedNumberBtn: false,
updateReferencedNumberBtn: false,
numeros_references_card: false,
numeros_reserves_card: false,
numeros_reserves_immeuble_base: false,
Expand All @@ -77,7 +78,8 @@ export default {
etatNumeros_conf: {
projet: Number(process.env.VUE_APP_NUMERO_PROJET_ID),
abandonne: Number(process.env.VUE_APP_NUMERO_ABANDONNE_ID)
}
},
modificationNumeroBaseId: null,
// numeros_base_relations: []
};
},
Expand Down Expand Up @@ -549,9 +551,8 @@ export default {
this.typesAffaires_conf.modification_duplicata
].includes(this.affaire.type_id),
deleteReferencedNumberColumn: [
deleteReferencedNumberBtn: [
this.typesAffaires_conf.cadastration,
this.typesAffaires_conf.ppe,
this.typesAffaires_conf.mat_diff,
this.typesAffaires_conf.revision_abornement,
this.typesAffaires_conf.autre,
Expand All @@ -560,6 +561,12 @@ export default {
this.typesAffaires_conf.modification_abandon_partiel
].includes(this.affaire.type_id)
&& role_id && !isNaN(role_id) && Number(process.env.VUE_APP_ADMIN_ROLE_ID) === Number(role_id),
updateReferencedNumberBtn: [
this.typesAffaires_conf.ppe,
this.typesAffaires_conf.pcop
].includes(this.affaire.type_id)
&& (this.affaire.operateur_id === JSON.parse(localStorage.getItem("infolica_user")).id || role_id && !isNaN(role_id) && Number(process.env.VUE_APP_ADMIN_ROLE_ID) === Number(role_id)),
}
},
Expand Down Expand Up @@ -623,54 +630,96 @@ export default {
});
},
/**
* Remove link referenced Number
*/
onRemoveNumeroReference(item) {
// Control if numeros relations are based on current item
let testBaseNumber = this.affaire_numeros_nouveaux.some(x => x.numero_base_id === item.numero_id);
if (testBaseNumber) {
this.$root.$emit("ShowAlert", {
title: "Action impossible",
content: "Le numéro " + item.numero + " du cadastre de " + item.numero_cadastre + " est utilisé comme bien-fonds de base pour des numéros dans cette affaire."
});
} else {
let content = "Confirmer la suppression du lien entre le numéro " + item.numero + " du cadastre de " + item.numero_cadastre + " et l'affaire " + this.affaire.id + "."
if (this.affaire.type_id === this.typesAffaires_conf.cadastration) {
content += " Les factures liées à ce numéro seront également supprimée automatiquement."
}
this.$root.$emit("ShowConfirmation", {
title: "Demande de confirmation",
content: content,
onConfirm: () => { this.deleteNumeroAffaire(item) }
})
}
},
/**
* Fonction appelée lorsque des numéros référencés sont modifiés
*/
async saveModifReferenceNumeros(data) {
let formData = new FormData();
formData.append("affaire_id", this.affaire.id);
formData.append("numero_id_old", this.modificationNumeroBaseId);
formData.append("numero_id_new", data.id);
return new Promise((resolve, reject) => {
this.$http.post(process.env.VUE_APP_API_URL + process.env.VUE_APP_MODIFICATION_REFERENCE_NUMEROS_ENDPOINT,
formData,
{
withCredentials: true,
headers: { Accept: "application/json" }
}
)
.then(response => {
this.$root.$emit("searchAffaireNumeros");
this.$root.$emit("ShowMessage", "Les modifications ont été apportées correctement");
this.$root.$emit("updateNumerosFactureList");
this.$root.$emit("searchAffaireFactures");
resolve(response);
this.modificationNumeroBaseId = null;
}).catch(err => {
reject(err);
this.modificationNumeroBaseId = null;
});
});
},
/**
* Remove link referenced Number
*/
onRemoveNumeroReference(item) {
// Control if numeros relations are based on current item
let testBaseNumber = this.affaire_numeros_nouveaux.some(x => x.numero_base_id === item.numero_id);
if (testBaseNumber) {
this.$root.$emit("ShowAlert", {
title: "Action impossible",
content: "Le numéro " + item.numero + " du cadastre de " + item.numero_cadastre + " est utilisé comme bien-fonds de base pour des numéros dans cette affaire."
});
} else {
let content = "Confirmer la suppression du lien entre le numéro " + item.numero + " du cadastre de " + item.numero_cadastre + " et l'affaire " + this.affaire.id + "."
if (this.affaire.type_id === this.typesAffaires_conf.cadastration) {
content += " Les factures liées à ce numéro seront également supprimée automatiquement."
}
this.$root.$emit("ShowConfirmation", {
title: "Demande de confirmation",
content: content,
onConfirm: () => { this.deleteNumeroAffaire(item) }
})
/**
* Supprimer lien numéro_affaire
*/
async deleteNumeroAffaire(item) {
this.$http.delete(
process.env.VUE_APP_API_URL + process.env.VUE_APP_AFFAIRE_NUMEROS_ENDPOINT
+ "?affaire_id=" + item.affaire_id + "&numero_id=" + item.numero_id,
{
withCredentials: true,
headers: { Accept: "application/json" }
}
).then(response => {
if (response && response.data) {
this.searchAffaireNumeros();
this.$root.$emit("ShowMessage", "Le numéro " + item.numero + " du cadastre de " + item.numero_cadastre + " a bien été délié de l'affaire");
this.$root.$emit("searchAffaireFactures");
}
}).catch(err => handleException(err, this));
}
},
/**
* Supprimer lien numéro_affaire
*/
async deleteNumeroAffaire(item) {
this.$http.delete(
process.env.VUE_APP_API_URL + process.env.VUE_APP_AFFAIRE_NUMEROS_ENDPOINT
+ "?affaire_id=" + item.affaire_id + "&numero_id=" + item.numero_id,
{
withCredentials: true,
headers: { Accept: "application/json" }
}
).then(response => {
if (response && response.data) {
this.searchAffaireNumeros();
this.$root.$emit("ShowMessage", "Le numéro " + item.numero + " du cadastre de " + item.numero_cadastre + " a bien été délié de l'affaire");
this.$root.$emit("searchAffaireFactures");
}
}).catch(err => handleException(err, this));
},
/**
* Modifier numéro de base (PPE/PCOP)
*/
onUpdateBaseNumber(data) {
this.modificationNumeroBaseId = data.numero_id;
/** Ouvrir la boîte de dialogue de référence de numéros **/
this.$refs.formModifReference.openReferenceDialog();
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ export default {
affaire_numeros_anciens: {type: Array, default: () => []},
cadastre_id: {type: Number, default: null},
saveNumerosReferences: {type: Function, default: () => {alert("Echec de l'enregistrement")}},
dialogTitle: {type: String, default: () => 'Référencer des numéros'},
selectionType: {type: String, default: () => 'multiple'},
},
components: {},
data() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<md-dialog :md-active.sync="showReferenceDialog" md-confirm-text="Enregistrer" md-cancel-text="Annuler"
md-title="Référencer des numéros" :md-close-on-esc="true" :md-click-outside-to-close="true">

<md-dialog-title>Référencer des numéros</md-dialog-title>
<md-dialog-title>{{ dialogTitle }}</md-dialog-title>

<md-dialog-content>
<md-card class="md-elevation-0 simple">
Expand Down Expand Up @@ -82,7 +82,7 @@ <h1 class="md-title">Résultat de la recherche</h1>
md-description="Tous les critères sont-ils corrects?">
</md-table-empty-state>

<md-table-row slot="md-table-row" slot-scope="{ item }" md-selectable="multiple"
<md-table-row slot="md-table-row" slot-scope="{ item }" :md-selectable="selectionType"
class="md-primary md-raised" md-auto-select>
<md-table-cell md-label="Cadastre" md-sort-by="cadastre">
{{ item.cadastre }}
Expand Down
16 changes: 14 additions & 2 deletions front/src/components/Affaires/NumerosAffaire/numerosAffaire.html
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,13 @@
<md-table-cell md-label="Repris par" md-sort-by="affaire_destination_id">
<a v-bind:href="item.affaire_destination_href">{{item.affaire_destination_id }}</a>
</md-table-cell>
<md-table-cell md-label="Délier de l'affaire" v-if="show.deleteReferencedNumberColumn">
<md-button class="md-icon-button md-accent md-dense" @click="onRemoveNumeroReference(item)">
<md-table-cell md-label="Action" v-if="show.deleteReferencedNumberBtn || show.updateReferencedNumberBtn">
<md-button class="md-icon-button md-accent md-dense" @click="onRemoveNumeroReference(item)" title="Délier l'immeuble de l'affaire" v-if="show.deleteReferencedNumberBtn">
<md-icon>delete</md-icon>
</md-button>
<md-button class="md-icon-button md-accent md-dense" @click="onUpdateBaseNumber(item)" title="Modifier l'immeuble de base" v-if="show.updateReferencedNumberBtn">
<md-icon>wifi_protected_setup</md-icon>
</md-button>
</md-table-cell>
</md-table-row>
</md-table>
Expand Down Expand Up @@ -154,10 +157,19 @@

<!-- Référence de numéros -->
<ReferenceNumeros ref="formReference"
id="test1"
:affaire_numeros_anciens="affaire_numeros_anciens"
:cadastre_id="affaire.cadastre_id"
:saveNumerosReferences="saveReferenceNumeros" />

<ReferenceNumeros ref="formModifReference"
id="test2"
dialogTitle="test"
selectionType="single"
:affaire_numeros_anciens="affaire_numeros_anciens"
:cadastre_id="affaire.cadastre_id"
:saveNumerosReferences="saveModifReferenceNumeros" />

<!-- Réservation de numéros -->
<ReservationNumeros ref="formReservation"
:affaire="affaire"
Expand Down

0 comments on commit 22ccc19

Please sign in to comment.