mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
Feature: [address] apply details button on address-render-box
This commit is contained in:
parent
8177a0fcce
commit
f256dda6fe
@ -51,6 +51,33 @@ class AddressToReferenceMatcherController
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set an address back to "to review". Only if the address is in "reviewed" state.
|
||||||
|
*
|
||||||
|
* @Route("/api/1.0/main/address/reference-match/{id}/set/to_review", methods={"POST"})
|
||||||
|
*/
|
||||||
|
public function markAddressAsToReview(Address $address): JsonResponse
|
||||||
|
{
|
||||||
|
if (!$this->security->isGranted('ROLE_USER')) {
|
||||||
|
throw new AccessDeniedHttpException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Address::ADDR_REFERENCE_STATUS_REVIEWED !== $address->getRefStatus()) {
|
||||||
|
throw new AccessDeniedHttpException("forbidden to mark a matching address to 'to review'");
|
||||||
|
}
|
||||||
|
|
||||||
|
$address->setRefStatus(Address::ADDR_REFERENCE_STATUS_TO_REVIEW);
|
||||||
|
|
||||||
|
$this->entityManager->flush();
|
||||||
|
|
||||||
|
return new JsonResponse(
|
||||||
|
$this->serializer->serialize($address, 'json', [AbstractNormalizer::GROUPS => ['read']]),
|
||||||
|
JsonResponse::HTTP_OK,
|
||||||
|
[],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Route("/api/1.0/main/address/reference-match/{id}/sync-with-reference", methods={"POST"})
|
* @Route("/api/1.0/main/address/reference-match/{id}/sync-with-reference", methods={"POST"})
|
||||||
*/
|
*/
|
||||||
|
@ -29,3 +29,7 @@ export const syncAddressWithReference = async (address: Address): Promise<Addres
|
|||||||
export const markAddressReviewed = async (address: Address): Promise<Address> => {
|
export const markAddressReviewed = async (address: Address): Promise<Address> => {
|
||||||
return makeFetch<null, Address>("POST", `/api/1.0/main/address/reference-match/${address.address_id}/set/reviewed`);
|
return makeFetch<null, Address>("POST", `/api/1.0/main/address/reference-match/${address.address_id}/set/reviewed`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const markAddressToReview = async (address: Address): Promise<Address> => {
|
||||||
|
return makeFetch<null, Address>("POST", `/api/1.0/main/address/reference-match/${address.address_id}/set/to_review`);
|
||||||
|
}
|
||||||
|
@ -23,6 +23,10 @@ document.querySelectorAll<HTMLSpanElement>('span[data-address-details]').forEach
|
|||||||
template: '<address-details-button :address_id="addressId" :address_ref_status="addressRefStatus" @update-address="onUpdateAddress"></address-details-button>',
|
template: '<address-details-button :address_id="addressId" :address_ref_status="addressRefStatus" @update-address="onUpdateAddress"></address-details-button>',
|
||||||
methods: {
|
methods: {
|
||||||
onUpdateAddress: (address: Address): void => {
|
onUpdateAddress: (address: Address): void => {
|
||||||
|
if (address.refStatus === 'to_review' || address.refStatus === 'reviewed') {
|
||||||
|
// in this two case, the address content do not change
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (window.confirm("L'adresse a été modifiée. Vous pouvez continuer votre travail. Cependant, pour afficher les données immédiatement, veuillez recharger la page. \n\n Voulez-vous recharger la page immédiatement ?")) {
|
if (window.confirm("L'adresse a été modifiée. Vous pouvez continuer votre travail. Cependant, pour afficher les données immédiatement, veuillez recharger la page. \n\n Voulez-vous recharger la page immédiatement ?")) {
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,6 @@ async function clickOrOpen(): Promise<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const onUpdateAddress = (address: Address): void => {
|
const onUpdateAddress = (address: Address): void => {
|
||||||
console.log('from details button', address);
|
|
||||||
data.working_address = address;
|
data.working_address = address;
|
||||||
data.working_ref_status = address.refStatus;
|
data.working_ref_status = address.refStatus;
|
||||||
emit('update-address', address);
|
emit('update-address', address);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<address-render-box :address="props.address"></address-render-box>
|
<address-render-box :address="props.address" :show-button-details="false"></address-render-box>
|
||||||
<address-details-ref-matching :address="props.address" @update-address="onUpdateAddress"></address-details-ref-matching>
|
<address-details-ref-matching :address="props.address" @update-address="onUpdateAddress"></address-details-ref-matching>
|
||||||
<address-details-map :address="props.address"></address-details-map>
|
<address-details-map :address="props.address"></address-details-map>
|
||||||
<address-details-geographical-layers :address="props.address"></address-details-geographical-layers>
|
<address-details-geographical-layers :address="props.address"></address-details-geographical-layers>
|
||||||
@ -23,7 +23,6 @@ const emit = defineEmits<{
|
|||||||
}>();
|
}>();
|
||||||
|
|
||||||
const onUpdateAddress = (address: Address): void => {
|
const onUpdateAddress = (address: Address): void => {
|
||||||
console.log('from details content', address);
|
|
||||||
emit('update-address', address);
|
emit('update-address', address);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,7 +42,6 @@ const close = (): void => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const onUpdateAddress = (address: Address): void => {
|
const onUpdateAddress = (address: Address): void => {
|
||||||
console.log('from details modal', address);
|
|
||||||
emit('update-address', address);
|
emit('update-address', address);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,7 +29,8 @@ let marker: L.Marker|null = null;
|
|||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
if (map_div.value === null) {
|
if (map_div.value === null) {
|
||||||
throw new Error('map div not found');
|
// there is no map div when the address does not have any Point
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (props.address.point !== null) {
|
if (props.address.point !== null) {
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<template v-if="props.address.refStatus !== 'match'">
|
<template v-if="props.address.refStatus !== 'match'">
|
||||||
<div v-if="props.address.refStatus === 'to_review'" class="alert alert-danger">
|
<div v-if="props.address.refStatus === 'to_review' || props.address.refStatus === 'reviewed'" :class="{alert: true, 'alert-danger': props.address.refStatus === 'to_review', 'alert-warning': props.address.refStatus === 'reviewed'}">
|
||||||
<p><i class="fa fa-warning"></i> L'adresse de référence a été modifiée.</p>
|
<p v-if="props.address.refStatus === 'to_review'"><i class="fa fa-warning"></i> L'adresse de référence a été modifiée.</p>
|
||||||
|
<p v-if="props.address.refStatus === 'reviewed'">L'adresse est conservée, mais diffère de l'adresse de référence.</p>
|
||||||
|
|
||||||
<template v-if="props.address.addressReference.street !== props.address.street || props.address.addressReference.streetNumber !== props.address.streetNumber">
|
<template v-if="props.address.addressReference.street !== props.address.street || props.address.addressReference.streetNumber !== props.address.streetNumber">
|
||||||
<template v-if="props.address.country.code === 'BE'">
|
<template v-if="props.address.country.code === 'BE'">
|
||||||
@ -33,8 +34,9 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<ul class="record_actions">
|
<ul class="record_actions">
|
||||||
<li><button class="btn btn-sm btn-update" @click="applyUpdate">Appliquer les modifications</button></li>
|
<li v-if="props.address.refStatus === 'to_review'"><button class="btn btn-sm btn-update" @click="applyUpdate">Appliquer les modifications</button></li>
|
||||||
<li><button class="btn btn-sm btn-primary" @click="keepCurrentAddress">Conserver</button></li>
|
<li v-if="props.address.refStatus === 'to_review'"><button class="btn btn-sm btn-primary" @click="keepCurrentAddress">Conserver</button></li>
|
||||||
|
<li v-if="props.address.refStatus === 'reviewed'"><button class="btn btn-sm btn-primary" @click="backToReview">Ré-examiner</button></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -43,7 +45,7 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
|
||||||
import {Address} from "../../../../types";
|
import {Address} from "../../../../types";
|
||||||
import {markAddressReviewed, syncAddressWithReference} from "../../../../lib/api/address";
|
import {markAddressReviewed, markAddressToReview, syncAddressWithReference} from "../../../../lib/api/address";
|
||||||
|
|
||||||
export interface AddressDetailsRefMatchingProps {
|
export interface AddressDetailsRefMatchingProps {
|
||||||
address: Address;
|
address: Address;
|
||||||
@ -67,6 +69,12 @@ const keepCurrentAddress = async () => {
|
|||||||
emit("update-address", new_address);
|
emit("update-address", new_address);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const backToReview = async () => {
|
||||||
|
const new_address = await markAddressToReview(props.address);
|
||||||
|
|
||||||
|
emit("update-address", new_address);
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
<p v-for="(l, i) in address.lines" :key="`line-${i}`">
|
<p v-for="(l, i) in address.lines" :key="`line-${i}`">
|
||||||
{{ l }}
|
{{ l }}
|
||||||
</p>
|
</p>
|
||||||
|
<p v-if="showButtonDetails"><address-details-button :address_id="address.address_id" :address_ref_status="address.refStatus"></address-details-button></p>
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<p v-if="'' !== address.text"
|
<p v-if="'' !== address.text"
|
||||||
@ -35,11 +36,12 @@
|
|||||||
<p v-for="(l, i) in address.lines" :key="`line-${i}`">
|
<p v-for="(l, i) in address.lines" :key="`line-${i}`">
|
||||||
{{ l }}
|
{{ l }}
|
||||||
</p>
|
</p>
|
||||||
|
<p v-if="showButtonDetails"><address-details-button :address_id="address.address_id" :address_ref_status="address.refStatus"></address-details-button></p>
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<p v-if="address.text"
|
<p v-if="address.text"
|
||||||
class="street">
|
class="street">
|
||||||
{{ address.text }}
|
{{ address.text }} <template v-if="showButtonDetails"><address-details-button :address_id="address.address_id" :address_ref_status="address.refStatus"></address-details-button></template>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -65,11 +67,13 @@
|
|||||||
<script>
|
<script>
|
||||||
|
|
||||||
import Confidential from 'ChillMainAssets/vuejs/_components/Confidential.vue';
|
import Confidential from 'ChillMainAssets/vuejs/_components/Confidential.vue';
|
||||||
|
import AddressDetailsButton from "ChillMainAssets/vuejs/_components/AddressDetails/AddressDetailsButton.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'AddressRenderBox',
|
name: 'AddressRenderBox',
|
||||||
components: {
|
components: {
|
||||||
Confidential
|
Confidential,
|
||||||
|
AddressDetailsButton,
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
address: {
|
address: {
|
||||||
@ -82,6 +86,10 @@ export default {
|
|||||||
useDatePane: {
|
useDatePane: {
|
||||||
default: false,
|
default: false,
|
||||||
type: Boolean
|
type: Boolean
|
||||||
|
},
|
||||||
|
showButtonDetails: {
|
||||||
|
default: true,
|
||||||
|
type: Boolean
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
@ -206,6 +206,7 @@ import Confidential from 'ChillMainAssets/vuejs/_components/Confidential.vue';
|
|||||||
import BadgeEntity from 'ChillMainAssets/vuejs/_components/BadgeEntity.vue';
|
import BadgeEntity from 'ChillMainAssets/vuejs/_components/BadgeEntity.vue';
|
||||||
import PersonText from 'ChillPersonAssets/vuejs/_components/Entity/PersonText.vue';
|
import PersonText from 'ChillPersonAssets/vuejs/_components/Entity/PersonText.vue';
|
||||||
import ThirdPartyText from 'ChillThirdPartyAssets/vuejs/_components/Entity/ThirdPartyText.vue';
|
import ThirdPartyText from 'ChillThirdPartyAssets/vuejs/_components/Entity/ThirdPartyText.vue';
|
||||||
|
import AddressDetailsButton from "ChillMainAssets/vuejs/_components/AddressDetails/AddressDetailsButton.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "PersonRenderBox",
|
name: "PersonRenderBox",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user