mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-29 21:46:14 +00:00
add homeless to person addresses
This commit is contained in:
parent
de560b4d3b
commit
320598e905
@ -237,7 +237,8 @@ class PersonAddressController extends Controller
|
||||
'action' => $this->generateUrl('chill_person_address_update', array(
|
||||
'person_id' => $person->getId(),
|
||||
'address_id' => $address->getId()
|
||||
))
|
||||
)),
|
||||
'has_no_address' => true
|
||||
));
|
||||
|
||||
$form->add('submit', SubmitType::class, array(
|
||||
@ -259,7 +260,8 @@ class PersonAddressController extends Controller
|
||||
'method' => 'POST',
|
||||
'action' => $this->generateUrl('chill_person_address_create', array(
|
||||
'person_id' => $person->getId()
|
||||
))
|
||||
)),
|
||||
'has_no_address' => true
|
||||
));
|
||||
|
||||
$form->add('submit', SubmitType::class, array(
|
||||
|
@ -235,8 +235,11 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac
|
||||
'GET_PERSON_ADDRESS_POSTCODE_ID' => AddressPart\AddressPartPostCodeId::class,
|
||||
'GET_PERSON_ADDRESS_COUNTRY_NAME' => AddressPart\AddressPartCountryName::class,
|
||||
'GET_PERSON_ADDRESS_COUNTRY_CODE' => AddressPart\AddressPartCountryCode::class,
|
||||
'GET_PERSON_ADDRESS_COUNTRY_ID' => AddressPart\AddressPartCountryId::class
|
||||
)
|
||||
'GET_PERSON_ADDRESS_COUNTRY_ID' => AddressPart\AddressPartCountryId::class,
|
||||
),
|
||||
'numeric_functions' => [
|
||||
'GET_PERSON_ADDRESS_ISNOADDRESS' => AddressPart\AddressPartIsNoAddress::class,
|
||||
]
|
||||
)
|
||||
)
|
||||
));
|
||||
|
@ -73,7 +73,7 @@ abstract class AddressPart extends FunctionNode
|
||||
* Should be one value of the "public" amongst
|
||||
* 'address_id', 'streetaddress1',
|
||||
* 'streetaddress2', 'validfrom', 'postcode_label', 'postcode_code',
|
||||
* 'postcode_id', 'country_name', 'country_code', 'country_id'
|
||||
* 'postcode_id', 'country_name', 'country_code', 'country_id', 'isnoaddress'
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
33
Doctrine/DQL/AddressPart/AddressPartIsNoAddress.php
Normal file
33
Doctrine/DQL/AddressPart/AddressPartIsNoAddress.php
Normal file
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/*
|
||||
* Copyright (C) 2017 Champs Libres Cooperative <info@champs-libres.coop>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
namespace Chill\PersonBundle\Doctrine\DQL\AddressPart;
|
||||
|
||||
use Chill\PersonBundle\Doctrine\DQL\AddressPart;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @author Julien Fastré <julien.fastre@champs-libres.coop>
|
||||
*/
|
||||
class AddressPartIsNoAddress extends AddressPart
|
||||
{
|
||||
public function getPart()
|
||||
{
|
||||
return 'isnoaddress';
|
||||
}
|
||||
}
|
@ -60,7 +60,7 @@ class ListPerson implements ListInterface, ExportElementValidatedInterface
|
||||
'mobilenumber', 'contactInfo', 'countryOfBirth', 'nationality',
|
||||
'address_street_address_1', 'address_street_address_2',
|
||||
'address_valid_from', 'address_postcode_label', 'address_postcode_code',
|
||||
'address_country_name', 'address_country_code'
|
||||
'address_country_name', 'address_country_code', 'address_isnoaddress'
|
||||
);
|
||||
|
||||
private $slugs = [];
|
||||
@ -257,6 +257,16 @@ class ListPerson implements ListInterface, ExportElementValidatedInterface
|
||||
|
||||
return $this->translatableStringHelper->localize(json_decode($value, true));
|
||||
};
|
||||
case 'address_isnoaddress':
|
||||
return function($value) use ($key) {
|
||||
if ($value === '_header') { return 'address.address_homeless'; }
|
||||
|
||||
if ($value) {
|
||||
return 'X';
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
};
|
||||
default:
|
||||
// for fields which are associated with person
|
||||
if (in_array($key, $this->fields)) {
|
||||
@ -429,6 +439,7 @@ class ListPerson implements ListInterface, ExportElementValidatedInterface
|
||||
case 'address_postcode_code':
|
||||
case 'address_country_name':
|
||||
case 'address_country_code':
|
||||
case 'address_isnoaddress':
|
||||
|
||||
$qb->addSelect(sprintf(
|
||||
'GET_PERSON_ADDRESS_%s(person.id, :address_date) AS %s',
|
||||
|
138
Resources/migrations/Version20200422125935.php
Normal file
138
Resources/migrations/Version20200422125935.php
Normal file
@ -0,0 +1,138 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace Application\Migrations;
|
||||
|
||||
use Doctrine\DBAL\Schema\Schema;
|
||||
use Doctrine\Migrations\AbstractMigration;
|
||||
|
||||
/**
|
||||
* Auto-generated Migration: Please modify to your needs!
|
||||
*/
|
||||
final class Version20200422125935 extends AbstractMigration
|
||||
{
|
||||
public function up(Schema $schema) : void
|
||||
{
|
||||
$this->addSql('DROP FUNCTION get_last_address(integer, date)');
|
||||
$this->addSql(<<<'SQL'
|
||||
CREATE OR REPLACE FUNCTION public.get_last_address (
|
||||
pid integer,
|
||||
before_date date)
|
||||
RETURNS TABLE(
|
||||
person_id integer,
|
||||
address_id integer,
|
||||
streetaddress1 varchar(255),
|
||||
streetaddress2 varchar(255),
|
||||
validfrom date,
|
||||
postcode_label varchar(255),
|
||||
postcode_code varchar(100),
|
||||
postcode_id integer,
|
||||
isnoaddress boolean,
|
||||
country_name json,
|
||||
country_code varchar(3),
|
||||
country_id integer)
|
||||
AS
|
||||
$BODY$
|
||||
SELECT
|
||||
pid AS person_id,
|
||||
chill_main_address.id AS address_id,
|
||||
chill_main_address.streetaddress1,
|
||||
chill_main_address.streetaddress2,
|
||||
chill_main_address.validfrom,
|
||||
chill_main_postal_code.label,
|
||||
chill_main_postal_code.code,
|
||||
chill_main_postal_code.id AS postal_code_id,
|
||||
chill_main_address.isnoaddress AS isnoaddress,
|
||||
country.name,
|
||||
country.countrycode,
|
||||
country.id AS country_id
|
||||
FROM chill_main_address
|
||||
JOIN (
|
||||
SELECT
|
||||
chill_main_address.id AS address_id,
|
||||
validfrom,
|
||||
rank() OVER (PARTITION BY person_id ORDER BY validfrom DESC) as pos
|
||||
FROM chill_person_persons_to_addresses
|
||||
JOIN chill_main_address ON chill_person_persons_to_addresses.address_id = chill_main_address.id
|
||||
WHERE person_id = pid
|
||||
AND chill_main_address.validfrom <= before_date
|
||||
) AS ranking ON ranking.address_id = chill_main_address.id
|
||||
JOIN chill_main_postal_code ON chill_main_address.postcode_id = chill_main_postal_code.id
|
||||
JOIN country ON chill_main_postal_code.country_id = country.id
|
||||
WHERE ranking.pos = 1
|
||||
$BODY$
|
||||
LANGUAGE sql VOLATILE
|
||||
COST 100;
|
||||
SQL
|
||||
);
|
||||
|
||||
$this->addSql(<<<'SQL'
|
||||
CREATE OR REPLACE FUNCTION get_last_address_isnoaddress (
|
||||
pid integer,
|
||||
before_date date)
|
||||
RETURNS BOOL AS
|
||||
$BODY$
|
||||
SELECT isnoaddress FROM get_last_address(pid, before_date)
|
||||
$BODY$
|
||||
LANGUAGE sql volatile
|
||||
COST 100;
|
||||
SQL
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
public function down(Schema $schema) : void
|
||||
{
|
||||
$this->addSql('DROP FUNCTION public.get_last_address_isnoaddress(integer, date);');
|
||||
$this->addSql('DROP FUNCTION get_last_address(integer, date)');
|
||||
$this->addSql(<<<'SQL'
|
||||
CREATE OR REPLACE FUNCTION public.get_last_address (
|
||||
pid integer,
|
||||
before_date date)
|
||||
RETURNS TABLE(
|
||||
person_id integer,
|
||||
address_id integer,
|
||||
streetaddress1 varchar(255),
|
||||
streetaddress2 varchar(255),
|
||||
validfrom date,
|
||||
postcode_label varchar(255),
|
||||
postcode_code varchar(100),
|
||||
postcode_id integer,
|
||||
country_name json,
|
||||
country_code varchar(3),
|
||||
country_id integer)
|
||||
AS
|
||||
$BODY$
|
||||
SELECT
|
||||
pid AS person_id,
|
||||
chill_main_address.id AS address_id,
|
||||
chill_main_address.streetaddress1,
|
||||
chill_main_address.streetaddress2,
|
||||
chill_main_address.validfrom,
|
||||
chill_main_postal_code.label,
|
||||
chill_main_postal_code.code,
|
||||
chill_main_postal_code.id AS postal_code_id,
|
||||
country.name,
|
||||
country.countrycode,
|
||||
country.id AS country_id
|
||||
FROM chill_main_address
|
||||
JOIN (
|
||||
SELECT
|
||||
chill_main_address.id AS address_id,
|
||||
validfrom,
|
||||
rank() OVER (PARTITION BY person_id ORDER BY validfrom DESC) as pos
|
||||
FROM chill_person_persons_to_addresses
|
||||
JOIN chill_main_address ON chill_person_persons_to_addresses.address_id = chill_main_address.id
|
||||
WHERE person_id = pid
|
||||
AND chill_main_address.validfrom <= before_date
|
||||
) AS ranking ON ranking.address_id = chill_main_address.id
|
||||
JOIN chill_main_postal_code ON chill_main_address.postcode_id = chill_main_postal_code.id
|
||||
JOIN country ON chill_main_postal_code.country_id = country.id
|
||||
WHERE ranking.pos = 1
|
||||
$BODY$
|
||||
LANGUAGE sql VOLATILE
|
||||
COST 100;
|
||||
SQL
|
||||
);
|
||||
|
||||
}
|
||||
}
|
@ -26,6 +26,7 @@
|
||||
|
||||
{{ form_start(form) }}
|
||||
|
||||
{{ form_row(form.isNoAddress) }}
|
||||
{{ form_row(form.streetAddress1) }}
|
||||
{{ form_row(form.streetAddress2) }}
|
||||
{{ form_row(form.postCode) }}
|
||||
|
@ -50,7 +50,7 @@
|
||||
<td><strong>{{ 'Since %date%'|trans( { '%date%' : address.validFrom|localizeddate('long', 'none') } ) }}</strong></td>
|
||||
|
||||
<td>
|
||||
{{ address_macros._render(address, { 'with_valid_from' : false } ) }}
|
||||
{{ address_macros._render(address, { 'with_valid_from' : false, 'has_no_address': true } ) }}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
|
@ -26,6 +26,7 @@
|
||||
|
||||
{{ form_start(form) }}
|
||||
|
||||
{{ form_row(form.isNoAddress) }}
|
||||
{{ form_row(form.streetAddress1) }}
|
||||
{{ form_errors(form.streetAddress1) }}
|
||||
{{ form_row(form.streetAddress2) }}
|
||||
|
@ -178,7 +178,7 @@ This view should receive those arguments:
|
||||
<dt>{{ 'Address'|trans }}</dt>
|
||||
<dd>
|
||||
{%- if person.lastAddress is not empty -%}
|
||||
{{ address._render(person.lastAddress) }}
|
||||
{{ address._render(person.lastAddress, {'has_no_address': true}) }}
|
||||
|
||||
<ul class="record_actions record_actions_small">
|
||||
<li>
|
||||
|
Loading…
x
Reference in New Issue
Block a user