diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..cf27b41f2 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,18 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to + +* [Semantic Versioning](https://semver.org/spec/v2.0.0.html) for stable releases; +* date versioning for test releases + +## Unreleased + +* [Household editor][UI] Update how household suggestion and addresses are picked; +* [AddAddress] Handle address suggestion; + +## Test release yyyy-mm-dd + + diff --git a/src/Bundle/ChillMainBundle/Controller/AddressApiController.php b/src/Bundle/ChillMainBundle/Controller/AddressApiController.php new file mode 100644 index 000000000..5c90cc9a7 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Controller/AddressApiController.php @@ -0,0 +1,38 @@ +denyAccessUnlessGranted('ROLE_USER'); + $new = Address::createFromAddress($address); + + $em = $this->getDoctrine()->getManager(); + + $em->persist($new); + $em->flush(); + + return $this->json($new, Response::HTTP_OK, [], [ + AbstractNormalizer::GROUPS => ['read'] + ]); + + } + +} diff --git a/src/Bundle/ChillMainBundle/DependencyInjection/ChillMainExtension.php b/src/Bundle/ChillMainBundle/DependencyInjection/ChillMainExtension.php index f196b8a2b..21217c80e 100644 --- a/src/Bundle/ChillMainBundle/DependencyInjection/ChillMainExtension.php +++ b/src/Bundle/ChillMainBundle/DependencyInjection/ChillMainExtension.php @@ -19,6 +19,7 @@ namespace Chill\MainBundle\DependencyInjection; +use Chill\MainBundle\Controller\AddressApiController; use Chill\MainBundle\Controller\UserController; use Chill\MainBundle\Doctrine\DQL\STContains; use Chill\MainBundle\Doctrine\DQL\StrictWordSimilarityOPS; @@ -319,6 +320,7 @@ class ChillMainExtension extends Extension implements PrependExtensionInterface, 'apis' => [ [ 'class' => \Chill\MainBundle\Entity\Address::class, + 'controller' => AddressApiController::class, 'name' => 'address', 'base_path' => '/api/1.0/main/address', 'base_role' => 'ROLE_USER', diff --git a/src/Bundle/ChillMainBundle/Entity/Address.php b/src/Bundle/ChillMainBundle/Entity/Address.php index 22e4848bf..4cc5c37ba 100644 --- a/src/Bundle/ChillMainBundle/Entity/Address.php +++ b/src/Bundle/ChillMainBundle/Entity/Address.php @@ -376,10 +376,22 @@ class Address public static function createFromAddress(Address $original) : Address { return (new Address()) + ->setBuildingName($original->getBuildingName()) + ->setCorridor($original->getCorridor()) + ->setCustoms($original->getCustoms()) + ->setDistribution($original->getDistribution()) + ->setExtra($original->getExtra()) + ->setFlat($original->getFlat()) + ->setFloor($original->getFloor()) + ->setIsNoAddress($original->getIsNoAddress()) + ->setLinkedToThirdParty($original->getLinkedToThirdParty()) + ->setPoint($original->getPoint()) ->setPostcode($original->getPostcode()) - ->setStreetAddress1($original->getStreetAddress1()) - ->setStreetAddress2($original->getStreetAddress2()) + ->setSteps($original->getSteps()) + ->setStreet($original->getStreet()) + ->setStreetNumber($original->getStreetNumber()) ->setValidFrom($original->getValidFrom()) + ->setValidTo($original->getValidTo()) ; } @@ -506,7 +518,7 @@ class Address return $this->validTo; } - public function setValidTo(\DateTimeInterface $validTo): self + public function setValidTo(?\DateTimeInterface $validTo = null): self { $this->validTo = $validTo; diff --git a/src/Bundle/ChillMainBundle/Repository/AddressRepository.php b/src/Bundle/ChillMainBundle/Repository/AddressRepository.php index 76f6c93bb..08e2da708 100644 --- a/src/Bundle/ChillMainBundle/Repository/AddressRepository.php +++ b/src/Bundle/ChillMainBundle/Repository/AddressRepository.php @@ -7,6 +7,7 @@ namespace Chill\MainBundle\Repository; use Chill\MainBundle\Entity\Address; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityRepository; +use Doctrine\ORM\QueryBuilder; use Doctrine\Persistence\ObjectRepository; final class AddressRepository implements ObjectRepository @@ -47,4 +48,9 @@ final class AddressRepository implements ObjectRepository public function getClassName() { return Address::class; } + + public function createQueryBuilder(string $alias, ?string $indexBy = null): QueryBuilder + { + return $this->repository->createQueryBuilder($alias, $indexBy); + } } diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/api.js b/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/api.js index 14fa0490f..62065b3ad 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/api.js +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/api.js @@ -1,4 +1,4 @@ -/* +/** * Endpoint chill_api_single_country__index * method GET, get Country Object * @returns {Promise} a promise containing all Country object @@ -14,7 +14,7 @@ const fetchCountries = () => { }); }; -/* +/** * Endpoint chill_api_single_postal_code__index * method GET, get Country Object * @returns {Promise} a promise containing all Postal Code objects filtered with country @@ -29,7 +29,7 @@ const fetchCities = (country) => { }); }; -/* +/** * Endpoint chill_api_single_address_reference__index * method GET, get AddressReference Object * @returns {Promise} a promise containing all AddressReference objects filtered with postal code @@ -44,7 +44,7 @@ const fetchReferenceAddresses = (postalCode) => { }); }; -/* +/** * Endpoint chill_api_single_address_reference__index * method GET, get AddressReference Object * @returns {Promise} a promise containing all AddressReference objects filtered with postal code @@ -60,7 +60,7 @@ const fetchAddresses = () => { }); }; -/* +/** * Endpoint chill_api_single_address__entity__create * method POST, post Address Object * @returns {Promise} @@ -81,8 +81,28 @@ const postAddress = (address) => { }); }; +/** + * + * @param address + * @returns {Promise} + */ +const duplicateAddress = (address) => { + const url = `/api/1.0/main/address/${address.address_id}/duplicate.json`; + return fetch(url, { + 'method': 'POST', + headers: { + 'Content-Type': 'application/json;charset=utf-8' + }, + }).then(response => { + if (response.ok) { + return response.json(); + } + throw Error('Error with request resource response'); + }); +}; -/* + +/** * Endpoint chill_api_single_address__entity__create * method PATCH, patch Address Instance * @@ -142,6 +162,7 @@ const getAddress = (id) => { }; export { + duplicateAddress, fetchCountries, fetchCities, fetchReferenceAddresses, diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue index 38afeae80..265b45d70 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue @@ -34,6 +34,7 @@ v-bind:defaultz="this.defaultz" v-bind:entity="this.entity" v-bind:flag="this.flag" + @pick-address="this.pickAddress" ref="suggestAddress"> @@ -55,6 +56,7 @@ v-bind:entity="this.entity" v-bind:flag="this.flag" v-bind:insideModal="false" + @pick-address="this.pickAddress" ref="suggestAddress">