mirror of
https://forge.chapril.org/tykayn/osm-commerces
synced 2025-06-20 01:44:42 +02:00
582 lines
14 KiB
PHP
582 lines
14 KiB
PHP
<?php
|
|
|
|
namespace App\Entity;
|
|
|
|
use App\Repository\PlaceRepository;
|
|
use Doctrine\Common\Collections\ArrayCollection;
|
|
use Doctrine\Common\Collections\Collection;
|
|
use Doctrine\DBAL\Types\Types;
|
|
use Doctrine\ORM\Mapping as ORM;
|
|
// use App\Service\Motocultrice;
|
|
#[ORM\Entity(repositoryClass: PlaceRepository::class)]
|
|
class Place
|
|
{
|
|
#[ORM\Id]
|
|
#[ORM\GeneratedValue]
|
|
#[ORM\Column]
|
|
private ?int $id = null;
|
|
|
|
#[ORM\Column(length: 50)]
|
|
private ?string $uuid_for_url = null;
|
|
|
|
#[ORM\Column(length: 10)]
|
|
private ?string $osm_kind = null;
|
|
|
|
#[ORM\Column(length: 255)]
|
|
private ?string $email = null;
|
|
|
|
#[ORM\Column]
|
|
private ?bool $opted_out = null;
|
|
|
|
#[ORM\Column]
|
|
private ?bool $dead = null;
|
|
|
|
#[ORM\Column(length: 255, nullable: true)]
|
|
private ?string $note = null;
|
|
|
|
#[ORM\Column(nullable: true)]
|
|
private ?\DateTime $modified_date = null;
|
|
|
|
#[ORM\Column(type: Types::INTEGER)]
|
|
private ?int $zip_code = null;
|
|
|
|
#[ORM\Column]
|
|
private ?bool $asked_humains_support = null;
|
|
|
|
#[ORM\Column(nullable: true)]
|
|
private ?\DateTime $last_contact_attempt_date = null;
|
|
|
|
/**
|
|
* @var Collection<int, History>
|
|
*/
|
|
#[ORM\OneToMany(targetEntity: History::class, mappedBy: 'place_id', orphanRemoval: true)]
|
|
private Collection $histories;
|
|
|
|
#[ORM\ManyToOne(inversedBy: 'places', cascade: ['persist'])]
|
|
private ?Stats $stats = null;
|
|
|
|
#[ORM\Column(type: Types::BIGINT)]
|
|
private ?string $osmId = null;
|
|
|
|
#[ORM\Column(length: 255, nullable: true)]
|
|
private ?string $name = null;
|
|
|
|
#[ORM\Column(nullable: true)]
|
|
private ?bool $has_opening_hours = null;
|
|
|
|
#[ORM\Column(nullable: true)]
|
|
private ?bool $has_address = null;
|
|
|
|
#[ORM\Column(nullable: true)]
|
|
private ?bool $has_website = null;
|
|
|
|
#[ORM\Column(nullable: true)]
|
|
private ?bool $has_wheelchair = null;
|
|
|
|
#[ORM\Column(nullable: true)]
|
|
private ?bool $has_note = null;
|
|
|
|
#[ORM\Column(nullable: true)]
|
|
private ?string $main_tag = null;
|
|
|
|
#[ORM\Column(length: 255, nullable: true)]
|
|
private ?string $note_content = null;
|
|
|
|
#[ORM\Column(nullable: true)]
|
|
private ?\DateTime $displayed_date = null;
|
|
|
|
#[ORM\Column(nullable: true)]
|
|
private ?int $lat = null;
|
|
|
|
#[ORM\Column(nullable: true)]
|
|
private ?int $lon = null;
|
|
|
|
#[ORM\Column(length: 255, nullable: true)]
|
|
private ?string $street = null;
|
|
|
|
#[ORM\Column(length: 255, nullable: true)]
|
|
private ?string $housenumber = null;
|
|
|
|
#[ORM\Column(length: 255, nullable: true)]
|
|
private ?string $siret = null;
|
|
|
|
public function getMainTag(): ?string
|
|
{
|
|
return $this->main_tag;
|
|
}
|
|
|
|
public function setMainTag(?string $main_tag): static
|
|
{
|
|
$this->main_tag = $main_tag;
|
|
|
|
return $this;
|
|
}
|
|
|
|
|
|
public function getCompletionPercentage(): ?int
|
|
{
|
|
$completion_percentage = 0;
|
|
$total_fields = 5;
|
|
$filled_fields = 0;
|
|
if ($this->has_opening_hours) {
|
|
$filled_fields += 1;
|
|
}
|
|
if ($this->has_address) {
|
|
$filled_fields += 1;
|
|
}
|
|
if ($this->has_website) {
|
|
$filled_fields += 1;
|
|
}
|
|
if ($this->has_wheelchair) {
|
|
$filled_fields += 1;
|
|
}
|
|
if ($this->has_note) {
|
|
$filled_fields += 1;
|
|
}
|
|
return round($filled_fields / $total_fields * 100);
|
|
}
|
|
|
|
public function guess_main_tag(array $tags_converted) {
|
|
$main_tag = null;
|
|
if (isset($tags_converted['amenity']) && $tags_converted['amenity'] != '') {
|
|
$main_tag = 'amenity='.$tags_converted['amenity'];
|
|
}
|
|
if (isset($tags_converted['shop']) && $tags_converted['shop'] != '') {
|
|
$main_tag = 'shop='.$tags_converted['shop'];
|
|
}
|
|
if (isset($tags_converted['tourism']) && $tags_converted['tourism'] != '') {
|
|
$main_tag = 'tourism='.$tags_converted['tourism'];
|
|
}
|
|
if (isset($tags_converted['office']) && $tags_converted['office'] != '') {
|
|
$main_tag = 'office='.$tags_converted['office'];
|
|
}
|
|
if (isset($tags_converted['healthcare']) && $tags_converted['healthcare'] != '') {
|
|
$main_tag = 'healthcare='.$tags_converted['healthcare'];
|
|
}
|
|
return $main_tag;
|
|
}
|
|
/**
|
|
* mettre à jour le lieu selon les tags osm
|
|
*/
|
|
public function update_place_from_overpass_data(array $overpass_data) {
|
|
|
|
if ( ! isset($overpass_data['tags']) || $overpass_data['tags'] == null) {
|
|
return;
|
|
}
|
|
$orignal_overpass_data = $overpass_data;
|
|
|
|
$overpass_data = array_merge([
|
|
'id' => '',
|
|
'type' => '',
|
|
'name' => '',
|
|
'postcode' => '',
|
|
'email' => '',
|
|
'opening_hours' => '',
|
|
'addr:housenumber' => '',
|
|
'addr:street' => '',
|
|
'website' => '',
|
|
'wheelchair' => '',
|
|
'note' => ''
|
|
], $overpass_data['tags'] );
|
|
|
|
|
|
$main_tag = $this->guess_main_tag($orignal_overpass_data['tags']);
|
|
if($main_tag){
|
|
$this->setMainTag($main_tag);
|
|
}
|
|
$this
|
|
->setOsmId( $orignal_overpass_data['id'])
|
|
->setOsmKind($orignal_overpass_data['type'] )
|
|
->setLat($orignal_overpass_data['lat'])
|
|
->setLon($orignal_overpass_data['lon'])
|
|
->setName(isset($overpass_data['name']) && $overpass_data['name'] != '' ? $overpass_data['name'] : null);
|
|
|
|
$mapping = [
|
|
['key' => 'postcode', 'setter' => 'setZipCode', 'source' => $overpass_data],
|
|
['key' => 'email', 'setter' => 'setEmail', 'source' => $overpass_data],
|
|
['key' => 'opening_hours', 'setter' => 'setHasOpeningHours', 'source' => $overpass_data['tags'] ?? []],
|
|
['key' => 'note', 'setter' => 'setNote', 'source' => $overpass_data['tags'] ?? []],
|
|
['key' => 'addr:housenumber', 'setter' => 'setHasAddress', 'source' => $overpass_data['tags'] ?? []],
|
|
['key' => 'website', 'setter' => 'setHasWebsite', 'source' => $overpass_data['tags'] ?? []],
|
|
['key' => 'wheelchair', 'setter' => 'setHasWheelchair', 'source' => $overpass_data['tags'] ?? []],
|
|
['key' => 'note', 'setter' => 'setHasNote', 'source' => $overpass_data['tags'] ?? []],
|
|
['key' => 'siret', 'setter' => 'setSiret', 'source' => $overpass_data['tags'] ?? []],
|
|
['key' => 'addr:street', 'setter' => 'setStreet', 'source' => $overpass_data['tags'] ?? []],
|
|
['key' => 'addr:housenumber', 'setter' => 'setHousenumber', 'source' => $overpass_data['tags'] ?? []],
|
|
];
|
|
|
|
foreach ($mapping as $map) {
|
|
if (isset($map['source'][$map['key']]) && $map['source'][$map['key']] !== '') {
|
|
$this->{$map['setter']}($map['source'][$map['key']]);
|
|
}
|
|
}
|
|
|
|
$this
|
|
// ->setOsmId($overpass_data['id'])
|
|
// ->setOsmKind($overpass_data['type'])
|
|
->setName($overpass_data['name'])
|
|
->setZipCode(\intval($overpass_data['postcode']))
|
|
->setEmail($overpass_data['email'])
|
|
// ->setUuidForUrl( Motocultrice::uuid_create_static())
|
|
// ->setOptedOut(false)
|
|
// ->setDead(false)
|
|
->setHasOpeningHours($overpass_data['opening_hours'] ? true : false)
|
|
->setHasAddress($overpass_data['addr:housenumber'] && $overpass_data['addr:street'] ? true : false)
|
|
->setHasWebsite($overpass_data['website'] ? true : false)
|
|
->setHasWheelchair($overpass_data['wheelchair'] and $overpass_data['wheelchair'] != '' ? true : false)
|
|
->setHasNote($overpass_data['note'] and $overpass_data['note'] != '' ? true : false);
|
|
}
|
|
|
|
public function __construct()
|
|
{
|
|
$this->histories = new ArrayCollection();
|
|
}
|
|
|
|
public function getId(): ?int
|
|
{
|
|
return $this->id;
|
|
}
|
|
|
|
public function getUuidForUrl(): ?string
|
|
{
|
|
return $this->uuid_for_url;
|
|
}
|
|
|
|
public function setUuidForUrl(string $uuid_for_url): static
|
|
{
|
|
$this->uuid_for_url = $uuid_for_url;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getOsmKind(): ?string
|
|
{
|
|
return $this->osm_kind;
|
|
}
|
|
|
|
public function setOsmKind(string $osm_kind): static
|
|
{
|
|
$this->osm_kind = $osm_kind;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getEmail(): ?string
|
|
{
|
|
return $this->email;
|
|
}
|
|
|
|
public function setEmail(string $email): static
|
|
{
|
|
$this->email = $email;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function isOptedOut(): ?bool
|
|
{
|
|
return $this->opted_out;
|
|
}
|
|
|
|
public function setOptedOut(bool $opted_out): static
|
|
{
|
|
$this->opted_out = $opted_out;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function isDead(): ?bool
|
|
{
|
|
return $this->dead;
|
|
}
|
|
|
|
public function setDead(bool $dead): static
|
|
{
|
|
$this->dead = $dead;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getNote(): ?string
|
|
{
|
|
return $this->note;
|
|
}
|
|
|
|
public function setNote(?string $note): static
|
|
{
|
|
$this->note = $note;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getModifiedDate(): ?\DateTime
|
|
{
|
|
return $this->modified_date;
|
|
}
|
|
|
|
public function setModifiedDate(?\DateTime $modified_date): static
|
|
{
|
|
$this->modified_date = $modified_date;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getZipCode(): ?int
|
|
{
|
|
return $this->zip_code;
|
|
}
|
|
|
|
public function setZipCode(int $zip_code): static
|
|
{
|
|
$this->zip_code = $zip_code;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function isAskedHumainsSupport(): ?bool
|
|
{
|
|
return $this->asked_humains_support;
|
|
}
|
|
|
|
public function setAskedHumainsSupport(bool $asked_humains_support): static
|
|
{
|
|
$this->asked_humains_support = $asked_humains_support;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getLastContactAttemptDate(): ?\DateTime
|
|
{
|
|
return $this->last_contact_attempt_date;
|
|
}
|
|
|
|
public function setLastContactAttemptDate(?\DateTime $last_contact_attempt_date): static
|
|
{
|
|
$this->last_contact_attempt_date = $last_contact_attempt_date;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* @return Collection<int, History>
|
|
*/
|
|
public function getHistories(): Collection
|
|
{
|
|
return $this->histories;
|
|
}
|
|
|
|
public function addHistory(History $history): static
|
|
{
|
|
if (!$this->histories->contains($history)) {
|
|
$this->histories->add($history);
|
|
$history->setPlaceId($this);
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function removeHistory(History $history): static
|
|
{
|
|
if ($this->histories->removeElement($history)) {
|
|
// set the owning side to null (unless already changed)
|
|
if ($history->getPlaceId() === $this) {
|
|
$history->setPlaceId(null);
|
|
}
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getStats(): ?Stats
|
|
{
|
|
return $this->stats;
|
|
}
|
|
|
|
public function setStats(?Stats $stats): static
|
|
{
|
|
$this->stats = $stats;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getOsmId(): ?string
|
|
{
|
|
return $this->osmId;
|
|
}
|
|
|
|
public function setOsmId(string $osmId): static
|
|
{
|
|
$this->osmId = $osmId;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getName(): ?string
|
|
{
|
|
return $this->name;
|
|
}
|
|
|
|
public function setName(?string $name): static
|
|
{
|
|
$this->name = $name;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function hasOpeningHours(): ?bool
|
|
{
|
|
return $this->has_opening_hours;
|
|
}
|
|
|
|
public function setHasOpeningHours(?bool $has_opening_hours): static
|
|
{
|
|
$this->has_opening_hours = $has_opening_hours;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function hasAddress(): ?bool
|
|
{
|
|
return $this->has_address;
|
|
}
|
|
|
|
public function setHasAddress(?bool $has_address): static
|
|
{
|
|
$this->has_address = $has_address;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function hasWebsite(): ?bool
|
|
{
|
|
return $this->has_website;
|
|
}
|
|
|
|
public function setHasWebsite(?bool $has_website): static
|
|
{
|
|
$this->has_website = $has_website;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function hasWheelchair(): ?bool
|
|
{
|
|
return $this->has_wheelchair;
|
|
}
|
|
|
|
public function setHasWheelchair(?bool $has_wheelchair): static
|
|
{
|
|
$this->has_wheelchair = $has_wheelchair;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function hasNote(): ?bool
|
|
{
|
|
return $this->has_note;
|
|
}
|
|
|
|
public function setHasNote(?bool $has_note): static
|
|
{
|
|
$this->has_note = $has_note;
|
|
|
|
return $this;
|
|
}
|
|
|
|
|
|
public function getPlaceCount(): ?int
|
|
{
|
|
return $this->place_count;
|
|
}
|
|
|
|
public function setPlaceCount(int $place_count): static
|
|
{
|
|
$this->place_count = $place_count;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getNoteContent(): ?string
|
|
{
|
|
return $this->note_content;
|
|
}
|
|
|
|
public function setNoteContent(?string $note_content): static
|
|
{
|
|
$this->note_content = $note_content;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getDisplayedDate(): ?\DateTime
|
|
{
|
|
return $this->displayed_date;
|
|
}
|
|
|
|
public function setDisplayedDate(?\DateTime $displayed_date): static
|
|
{
|
|
$this->displayed_date = $displayed_date;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getLat(): ?int
|
|
{
|
|
return $this->lat;
|
|
}
|
|
|
|
public function setLat(?int $lat): static
|
|
{
|
|
$this->lat = $lat;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getLon(): ?int
|
|
{
|
|
return $this->lon;
|
|
}
|
|
|
|
public function setLon(?int $lon): static
|
|
{
|
|
$this->lon = $lon;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getStreet(): ?string
|
|
{
|
|
return $this->street;
|
|
}
|
|
|
|
public function setStreet(?string $street): static
|
|
{
|
|
$this->street = $street;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getHousenumber(): ?string
|
|
{
|
|
return $this->housenumber;
|
|
}
|
|
|
|
public function setHousenumber(?string $housenumber): static
|
|
{
|
|
$this->housenumber = $housenumber;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getSiret(): ?string
|
|
{
|
|
return $this->siret;
|
|
}
|
|
|
|
public function setSiret(?string $siret): static
|
|
{
|
|
$this->siret = $siret;
|
|
|
|
return $this;
|
|
}
|
|
}
|