<?php

namespace AppBundle\Entity\Billing;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Dunglas\ApiBundle\Annotation\Iri;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
use AppBundle\Entity\Traits\TimestampableEntity;
use AppBundle\Entity\Traits\CreatorUpdaterEntity;

/**
 * Paramètres d'un Access pour une Bill
 *
 * @Iri("http://schema.org/BillAccessDetail")
 */
#[ORM\Entity]
class BillAccessDetail
{
    use TimestampableEntity;
    use CreatorUpdaterEntity;
    /**
     * @var int
     */
    #[ORM\Column(type: 'integer')]
    #[ORM\Id]
    #[ORM\GeneratedValue(strategy: 'AUTO')]
    #[Groups(['billaccessdetail', 'billaccounting_list', 'bill_list', 'billcredit_list', 'build_bills'])]
    private $id;
    /**
     * @var int
     */
    #[ORM\Column(type: 'integer')]
    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billpayment_list_bill', 'billcredit_list_accessdetail'])]
    private $accessId;
    /**
     * @var string
     */
    #[ORM\Column(type: 'string', nullable: true)]
    #[Assert\Type(type: 'string')]
    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billpayment_list_bill', 'billcredit_list_accessdetail'])]
    private $customerId;
    /**
     * @var string
     *
     *
     */
    #[ORM\Column(type: 'string', nullable: true)]
    #[Assert\Type(type: 'string')]
    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail'])]
    private $familyQuotientSliceName;
    /**
     * @var string
     */
    #[ORM\Column(type: 'string', nullable: true)]
    #[Assert\Type(type: 'string')]
    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail'])]
    private $residenceAreaLabel;
    /**
     * @var string
     */
    #[ORM\Column(type: 'string', nullable: true)]
    #[Assert\Type(type: 'string')]
    #[Assert\Choice(callback: ['\AppBundle\Enum\Billing\PeriodicityPaymentEnum', 'toArray'])]
    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail'])]
    private $periodicityPayment;
    /**
     * @var string
     */
    #[ORM\Column(type: 'string', nullable: true)]
    #[Assert\Type(type: 'string')]
    #[Assert\Choice(callback: ['\AppBundle\Enum\Billing\PaymentChoiceEnum', 'toArray'])]
    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail'])]
    private $paymentChoice;
    /**
     * @var string
     */
    #[ORM\Column(type: 'string', nullable: true)]
    #[Assert\Type(type: 'string')]
    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail'])]
    private $streetAddress;
    /**
     * @var string
     */
    #[ORM\Column(type: 'string', length: 20, nullable: true)]
    #[Assert\Type(type: 'string')]
    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail'])]
    private $postalCode;
    /**
     * @var string
     */
    #[ORM\Column(type: 'string', nullable: true)]
    #[Assert\Type(type: 'string')]
    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail'])]
    private $addressCity;
    /**
     * @var string
     */
    #[ORM\Column(type: 'string', nullable: true)]
    #[Assert\Type(type: 'string')]
    #[Assert\Length(max: 255, maxMessage: 'invalid-max-length')]
    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail'])]
    private $bankName;
    /**
     * @var string
     */
    #[ORM\Column(type: 'string', length: 11, nullable: true)]
    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail', 'build_bills_accessdetail'])]
    private $bic;
    /**
     * @var string
     */
    #[ORM\Column(type: 'string', length: 34, nullable: true)]
    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail', 'build_bills_accessdetail'])]
    private $iban;
    /**
     * @var string
     */
    #[ORM\Column(type: 'string', nullable: true)]
    #[Assert\Type(type: 'string')]
    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail', 'build_bills_accessdetail'])]
    private $holder;
    /**
     * @var string
     */
    #[ORM\Column(type: 'string', length: 35, nullable: true)]
    #[Assert\Type(type: 'string')]
    #[Groups(['billaccessdetail', 'billaccounting_list_accessdetail', 'bill_list_accessdetail', 'billcredit_list_accessdetail', 'build_bills_accessdetail'])]
    #[Assert\Length(max: 35, maxMessage: 'invalid-max-length')]
    private $rum;
    /**
     * Constructor
     */
    public function __construct()
    {
    }
    /**
     * Sets id.
     *
     * @param int $id
     *
     * @return $this
     */
    public function setId($id)
    {
        $this->id = $id;

        return $this;
    }
    /**
     * Gets id.
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }
    /**
     * Set accessId
     *
     * @param integer $accessId
     *
     * @return BillAccessDetail
     */
    public function setAccessId($accessId)
    {
        $this->accessId = $accessId;

        return $this;
    }
    /**
     * Get accessId
     *
     * @return integer
     */
    public function getAccessId()
    {
        return $this->accessId;
    }
    /**
     * Set customerId
     *
     * @param string $customerId
     *
     * @return BillAccessDetail
     */
    public function setCustomerId($customerId)
    {
        $this->customerId = $customerId;

        return $this;
    }
    /**
     * Get customerId
     *
     * @return string
     */
    public function getCustomerId()
    {
        return $this->customerId;
    }
    /**
     * Set familyQuotientSliceName
     *
     * @param string $familyQuotientSliceName
     *
     * @return BillAccessDetail
     */
    public function setFamilyQuotientSliceName($familyQuotientSliceName)
    {
        $this->familyQuotientSliceName = $familyQuotientSliceName;

        return $this;
    }
    /**
     * Get familyQuotientSliceName
     *
     * @return string
     */
    public function getFamilyQuotientSliceName()
    {
        return $this->familyQuotientSliceName;
    }
    /**
     * Set residenceAreaLabel
     *
     * @param string $residenceAreaLabel
     *
     * @return BillAccessDetail
     */
    public function setResidenceAreaLabel($residenceAreaLabel)
    {
        $this->residenceAreaLabel = $residenceAreaLabel;

        return $this;
    }
    /**
     * Get residenceAreaLabel
     *
     * @return string
     */
    public function getResidenceAreaLabel()
    {
        return $this->residenceAreaLabel;
    }
    /**
     * Set periodicityPayment
     *
     * @param string $periodicityPayment
     *
     * @return BillAccessDetail
     */
    public function setPeriodicityPayment($periodicityPayment)
    {
        $this->periodicityPayment = $periodicityPayment;

        return $this;
    }
    /**
     * Get periodicityPayment
     *
     * @return string
     */
    public function getPeriodicityPayment()
    {
        return $this->periodicityPayment;
    }
    /**
     * Set paymentChoice
     *
     * @param string $paymentChoice
     *
     * @return BillAccessDetail
     */
    public function setPaymentChoice($paymentChoice)
    {
        $this->paymentChoice = $paymentChoice;

        return $this;
    }
    /**
     * Get paymentChoice
     *
     * @return string
     */
    public function getPaymentChoice()
    {
        return $this->paymentChoice;
    }
    /**
     * Set streetAddress
     *
     * @param string $streetAddress
     *
     * @return BillAccessDetail
     */
    public function setStreetAddress($streetAddress)
    {
        $this->streetAddress = $streetAddress;

        return $this;
    }
    /**
     * Get streetAddress
     *
     * @return string
     */
    public function getStreetAddress()
    {
        return $this->streetAddress;
    }
    /**
     * Set postalCode
     *
     * @param string $postalCode
     *
     * @return BillAccessDetail
     */
    public function setPostalCode($postalCode)
    {
        $this->postalCode = $postalCode;

        return $this;
    }
    /**
     * Get postalCode
     *
     * @return string
     */
    public function getPostalCode()
    {
        return $this->postalCode;
    }
    /**
     * Set addressCity
     *
     * @param string $addressCity
     *
     * @return BillAccessDetail
     */
    public function setAddressCity($addressCity)
    {
        $this->addressCity = $addressCity;

        return $this;
    }
    /**
     * Get addressCity
     *
     * @return string
     */
    public function getAddressCity()
    {
        return $this->addressCity;
    }
    /**
     * Set bankName
     *
     * @param string $bankName
     *
     * @return BillAccessDetail
     */
    public function setBankName($bankName)
    {
        $this->bankName = $bankName;

        return $this;
    }
    /**
     * Get bankName
     *
     * @return string
     */
    public function getBankName()
    {
        return $this->bankName;
    }
    /**
     * Set bic
     *
     * @param string $bic
     *
     * @return BillAccessDetail
     */
    public function setBic($bic)
    {
        $this->bic = $bic;

        return $this;
    }
    /**
     * Get bic
     *
     * @return string
     */
    public function getBic()
    {
        return $this->bic;
    }
    /**
     * Set iban
     *
     * @param string $iban
     *
     * @return BillAccessDetail
     */
    public function setIban($iban)
    {
        $this->iban = $iban;

        return $this;
    }
    /**
     * Get iban
     *
     * @return string
     */
    public function getIban()
    {
        return $this->iban;
    }
    /**
     * Set holder
     *
     * @param string $holder
     *
     * @return BillAccessDetail
     */
    public function setHolder($holder)
    {
        $this->holder = $holder;

        return $this;
    }
    /**
     * Get holder
     *
     * @return string
     */
    public function getHolder()
    {
        return $this->holder;
    }
    /**
     * Set rum
     *
     * @param string $rum
     *
     * @return BillAccessDetail
     */
    public function setRum($rum)
    {
        $this->rum = $rum;

        return $this;
    }
    /**
     * Get rum
     *
     * @return string
     */
    public function getRum()
    {
        return $this->rum;
    }
}
