<?php
namespace JF\JuridicusBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use JF\JuridicusBundle\Validator\Constraints as JfAssert;
use Doctrine\Common\Collections\ArrayCollection;
use JF\JuridicusBundle\Utils\Juridicus;
/**
* Abo
*
* @ORM\Entity
* @Assert\GroupSequence({"Abo","no_sepa","sepa","gutschein"})
*/
class Abo
{
const CLASSNAME = __CLASS__;
const ABO_FULL = 1;
const ABO_PROBE_3 = 2;
const ABO_EINZELHEFT = 3;
const ABO_LESEPROBE_GRATIS = 4;
const ABO_LOCKABO_6 = 5;
/**
*
* @var array
*/
private static $typ_strings = array(
self::ABO_FULL => 'Vollabonnement',
self::ABO_PROBE_3 => 'Probe-Abonnement (3 Monate)',
self::ABO_EINZELHEFT => 'Einzelheft',
self::ABO_LESEPROBE_GRATIS => 'Leseprobe',
self::ABO_LOCKABO_6 => 'Halbjahresabo',
);
private static $dauer = array(
self::ABO_FULL => 12,
self::ABO_PROBE_3 => 3,
self::ABO_EINZELHEFT => 1,
self::ABO_LESEPROBE_GRATIS => 1,
self::ABO_LOCKABO_6 => 6,
);
private static $auto_renew = array(
self::ABO_FULL => true,
self::ABO_PROBE_3 => false,
self::ABO_EINZELHEFT => false,
self::ABO_LESEPROBE_GRATIS => false,
self::ABO_LOCKABO_6 => true,
);
private static $rechnung_bezeichnung = array(
self::ABO_FULL => 'Vollabo',
self::ABO_PROBE_3 => 'Probeabo',
self::ABO_EINZELHEFT => 'Einzelheft',
);
private static $zeitschrift_lang = array(
'PR' => 'Praktikerreport',
'ZA' => 'Zeitschriftenauswertung',
);
private static $preise_druck = array(
'PR' => array(
self::ABO_FULL => '82,80 € / Jahr',
self::ABO_PROBE_3 => '20,00 € / 3 Hefte',
self::ABO_LESEPROBE_GRATIS => 'kostenlos',
),
'ZA' => array(
self::ABO_FULL => '69,60 € / Jahr',
self::ABO_LESEPROBE_GRATIS => 'kostenlos',
),
'ZA_vorzug' => array(
self::ABO_FULL => '1. Jahr: 59,90 €, danach 69,60 € / Jahr',
self::ABO_LESEPROBE_GRATIS => 'kostenlos',
)
);
private static $preise_druck_value = array(
'PR' => array(
self::ABO_FULL => 82.80,
self::ABO_PROBE_3 => 20.0,
self::ABO_LESEPROBE_GRATIS => 0.0,
),
);
private static $preise_online = array(
'PR' => array(
self::ABO_FULL => '55,00 € / Jahr',
self::ABO_PROBE_3 => '15,00 € / 3 Hefte',
self::ABO_EINZELHEFT => '6,00 € / 1 Heft',
self::ABO_LOCKABO_6 => 'kostenlos',
),
'ZA' => array(
self::ABO_FULL => '48,00 € / Jahr',
self::ABO_PROBE_3 => '15,00 € / 3 Hefte',
self::ABO_EINZELHEFT => '5,00 € / 1 Heft',
self::ABO_LOCKABO_6 => 'kostenlos',
),
'ZA_vorzug' => array(
self::ABO_FULL => '1. Jahr: 24,00 €, danach 48,00 € / Jahr',
self::ABO_PROBE_3 => '15,00 € / 3 Hefte',
self::ABO_EINZELHEFT => '5,00 € / 1 Heft',
)
);
private static $preise_online_value = array(
'PR' => array(
self::ABO_FULL => 55.00,
self::ABO_PROBE_3 => 15.0,
self::ABO_EINZELHEFT => 6.0,
self::ABO_LOCKABO_6 => 0.0,
),
'ZA' => array(
self::ABO_FULL => 48.0,
self::ABO_PROBE_3 => 15.0,
self::ABO_EINZELHEFT => 5.0,
self::ABO_LOCKABO_6 => 0.0,
),
'ZA_vorzug' => array(
self::ABO_FULL => 24.0,
self::ABO_PROBE_3 => 15.0,
self::ABO_EINZELHEFT => 5.0,
self::ABO_LOCKABO_6 => 0.0
),
);
/**
*
* @return array
*/
public static function getTypOptions()
{
return self::$typ_strings;
}
/**
* @var integer
*/
private $id;
/**
* @var string
* @Assert\NotBlank(groups={"no_sepa"})
*/
private $zeitschrift;
/**
* @var integer
* @Assert\NotNull(groups={"no_sepa"})
*/
private $typ;
/**
* @var boolean
* @Assert\NotNull(groups={"no_sepa"})
*/
private $online = false;
/**
* @var boolean
*/
private $vorzugspreis = false;
/**
* @var \DateTime
* @Assert\NotNull(groups={"no_sepa"})
* @Assert\Date(groups={"no_sepa"})
*/
private $datum_start;
/**
* @var \DateTime
* @Assert\Date(groups={"no_sepa"})
*/
private $datum_ende;
/**
* @var \DateTime
*/
private $created_at;
/**
* @var string
* @Assert\NotBlank(groups={"no_sepa"})
* @Assert\Ip(groups={"no_sepa"})
*/
private $ip;
/**
* @var boolean
*/
private $bearbeitet = false;
/**
* @var boolean
*/
private $zahlung_vierteljaehrlich = false;
/**
* @var string
*/
private $abonummer;
/**
* @var string
*/
private $anrede;
/**
* @var string
* @Assert\Length(max="255")
*/
private $titel;
/**
* @var string
* @Assert\NotBlank(groups={"no_sepa"})
*/
private $vorname;
/**
* @var string
* @Assert\NotBlank(groups={"no_sepa"})
*/
private $nachname;
/**
* @var string
* @Assert\NotBlank(groups={"no_sepa"})
*/
private $strasse;
/**
* @var string
* @Assert\NotBlank(groups={"no_sepa"})
*/
private $hausnummer;
/**
* @var string
*/
private $strasse_voll;
/**
* @var string
* @Assert\NotBlank(groups={"no_sepa"})
* @Assert\Regex(groups={"no_sepa"}, pattern="/^\d{5}$/", message = "Die PLZ muss aus 5 Ziffern bestehen." )
*/
private $plz;
/**
* @var string
* @Assert\NotBlank(groups={"no_sepa"})
*/
private $ort;
/**
* @var string
* @Assert\NotBlank(groups={"no_sepa"})
*/
private $telefon;
/**
* @var string
*/
private $fax;
/**
* @var string
* @Assert\Email(groups={"no_sepa"}, checkMX = true)
*/
private $email;
/**
* @var \DateTime
* @Assert\NotBlank(groups={"no_sepa"})
* @Assert\Date(groups={"no_sepa"})
*/
private $geburtsdatum;
/**
*
* @var string
* @Assert\Length(max="255")
*/
private $firma;
/**
* @var boolean
* @Assert\NotNull(groups={"no_sepa"})
*/
private $sepa = false;
/**
* @var string
* @Assert\NotBlank(groups={"sepa"})
*/
private $sepa_vorname;
/**
* @var string
* @Assert\NotBlank(groups={"sepa"})
*/
private $sepa_nachname;
/**
* @var string
* @Assert\NotBlank(groups={"sepa"})
*/
private $sepa_strasse;
/**
* @var string
* @Assert\NotBlank(groups={"sepa"})
*/
private $sepa_hausnummer;
/**
* @var string
* @Assert\Regex(groups={"sepa"}, pattern="/^\d{5}$/", message = "Die PLZ muss aus 5 Ziffern bestehen." )
*/
private $sepa_plz;
/**
* @var string
* @Assert\NotBlank(groups={"sepa"})
*/
private $sepa_ort;
/**
* @var string
* @Assert\NotBlank(groups={"sepa"})
*/
private $sepa_telefon;
/**
* @var string
*/
private $sepa_fax;
/**
* @var string
* @Assert\NotBlank(groups={"sepa"})
* @Assert\Email(groups={"sepa"}, checkMX = true)
*/
private $sepa_email;
/**
* @var \DateTime
* @Assert\NotBlank(groups={"sepa"})
* @Assert\Date(groups={"sepa"})
*/
private $sepa_geburtsdatum;
/**
* @var string
* @Assert\NotBlank(groups={"sepa"})
*/
private $sepa_bank;
/**
* @var string
* @Assert\NotBlank(groups={"sepa"})
*/
private $sepa_bic;
/**
* @var string
* @Assert\NotBlank(groups={"sepa"})
*/
private $sepa_iban;
/**
* @var string
* @Assert\NotBlank(groups={"sepa"})
*/
private $sepa_kontoinhaber;
/**
* @var \JF\JuridicusBundle\Entity\Kunde
*/
private $kunde;
/**
* @var \JF\JuridicusBundle\Entity\Gutschein
* @Assert\Valid()
*/
private $gutschein;
/**
* @var \Doctrine\Common\Collections\Collection
*/
private $abo_zeitraum;
/**
* @var \Doctrine\Common\Collections\Collection
*/
private $emails;
/**
*
* Konstructor.
*/
public function __construct()
{
$this->abo_zeitraum = new ArrayCollection();
$this->emails = new ArrayCollection();
}
/**
* isInvalidGutschein
*
* @return boolean
*
* @Assert\IsFalse(groups={"gutschein"}, message = "Der Gutscheincode gilt nicht für diesen Abotyp.")
* changedFrom Assert\False
*/
public function isInvalidGutschein()
{
$gutschein = $this->getGutschein();
if (!$gutschein || !$gutschein->getId()) {
return false;
}
return false
|| $gutschein->getValidZeitschrift() != $this->zeitschrift
|| $gutschein->getValidAboTyp() != $this->typ
|| $gutschein->getValidOnline() != $this->online
;
}
/**
* isInvalidGeburtsdatum
*
* @return boolean
*
* @Assert\IsFalse(groups={"no_sepa"}, message = "Der Geburtstag muss in der Vergangenheit liegen.")
* changedFrom Assert\False
*/
public function isInvalidGeburtsdatum()
{
return $this->geburtsdatum > new \DateTime('today');
}
/**
* isInvalidSepaGeburtsdatum
*
* @return boolean
*
* @Assert\IsFalse(groups={"sepa"}, message = "Der Geburtstag muss in der Vergangenheit liegen.")
* changedFrom Assert\False
*/
public function isInvalidSepaGeburtsdatum()
{
return $this->sepa_geburtsdatum > new \DateTime('today');
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set zeitschrift
*
* @param string $zeitschrift
* @return Abo
*/
public function setZeitschrift($zeitschrift)
{
if ($zeitschrift !== 'ZA' && $zeitschrift !== 'PR') {
throw new \InvalidArgumentException('Ungültige Zeitschrift.');
}
$this->zeitschrift = $zeitschrift;
return $this;
}
/**
* Get zeitschrift
*
* @return string
*/
public function getZeitschrift()
{
return $this->zeitschrift;
}
/**
* @return string
*/
public function getZeitschriftLang()
{
if (!isset(self::$zeitschrift_lang[$this->zeitschrift])) {
throw new \RuntimeException('Ungültige Zeitschrift');
}
return self::$zeitschrift_lang[$this->zeitschrift];
}
/**
* Set typ
*
* @param integer $typ
* @return Abo
*/
public function setTyp($typ)
{
$this->typ = intval($typ);
return $this;
}
/**
* Get typ
*
* @return integer
*/
public function getTyp()
{
return $this->typ;
}
/**
*
* @return string
*/
public function getTypString()
{
return self::$typ_strings[$this->typ];
}
/**
*
* @return string
*/
public function getRechnungBezeichnung()
{
$zeitschrift_lang = $this->zeitschrift == 'ZA' ? 'Zeitschriftenauswertung' : 'Praktikereport';
return sprintf("%s\n%s\nOnline", self::$rechnung_bezeichnung[$this->typ], $zeitschrift_lang);
}
public function getRechnungCellHeight()
{
return self::$rechnung_height[$this->typ];
}
public function getAboKennung()
{
if ($this->abonummer) {
return array(
'kennung' => 'Abo-Nummer',
'nummer' => $this->abonummer,
);
} else {
return array(
'kennung' => 'Abo-ID',
'nummer' => sprintf('%07d', $this->id),
);
}
}
/**
* Set online
*
* @param boolean $online
* @return Abo
*/
public function setOnline($online = true)
{
$this->online = (bool) $online;
return $this;
}
/**
* Get online
*
* @return boolean
*/
public function getOnline()
{
return $this->online;
}
/**
* Set datum_start
*
* @param \DateTime $datumStart
* @return Abo
*/
public function setDatumStart(\DateTime $datumStart = null)
{
$this->datum_start = $datumStart;
return $this;
}
/**
* Get datum_start
*
* @return \DateTime
*/
public function getDatumStart()
{
return $this->datum_start;
}
/**
* @Assert\IsTrue(groups={"no_sepa"}, message = "Das Datum darf höchstens 6 Monate in der Vergangenheit liegen. Ältere Ausgaben sind im Archiv zu finden.")
* changedFrom Assert\True
*/
public function isOnlineDatumStartValid()
{
// nur Online-Ausgaben testen
if (!$this->online) {
return true;
}
$stichtag = new \DateTime('first day of this month - 6 month');
return is_object($this->datum_start) && $this->datum_start >= $stichtag;
}
/**
* @Assert\IsTrue(groups={"no_sepa"}, message = "Das Datum darf nicht in der Vergangenheit liegen. Kontaktieren Sie für vergangene Ausgaben bitte direkt den Verlag.")
* changedFrom Assert\True
*/
public function isPrintDatumStartValid()
{
// nur Prist-Ausgaben testen
if ($this->online) {
return true;
}
$stichtag = new \DateTime('first day of next month');
return is_object($this->datum_start) && $this->datum_start >= $stichtag;
}
/**
* Set datum_ende
*
* @param \DateTime $datumEnde
* @return Abo
*/
public function setDatumEnde(\DateTime $datumEnde = null)
{
$this->datum_ende = $datumEnde;
return $this;
}
/**
* Get datum_ende
*
* @return \DateTime
*/
public function getDatumEnde()
{
return $this->datum_ende;
}
/**
* Set created_at
*
* @param \DateTime $createdAt
* @return Abo
*/
public function setCreatedAt(\DateTime $createdAt = null)
{
$this->created_at = $createdAt;
return $this;
}
/**
* Get created_at
*
* @return \DateTime
*/
public function getCreatedAt()
{
return $this->created_at;
}
/**
* Set ip
*
* @param string $ip
* @return Abo
*/
public function setIp($ip)
{
$this->ip = $ip;
return $this;
}
/**
* Get ip
*
* @return string
*/
public function getIp()
{
return $this->ip;
}
/**
* Set vorname
*
* @param string $vorname
* @return Abo
*/
public function setVorname($vorname)
{
$this->vorname = $vorname;
return $this;
}
/**
* Get vorname
*
* @return string
*/
public function getVorname()
{
return $this->vorname;
}
/**
* Set nachname
*
* @param string $nachname
* @return Abo
*/
public function setNachname($nachname)
{
$this->nachname = $nachname;
return $this;
}
/**
* Get nachname
*
* @return string
*/
public function getNachname()
{
return $this->nachname;
}
/**
*
* @return string
*/
public function getName()
{
return Juridicus::concat_ws(' ', $this->titel, $this->vorname, $this->nachname);
}
/**
* Set strasse
*
* @param string $strasse
* @return Abo
*/
public function setStrasse($strasse)
{
$this->strasse = $strasse;
return $this;
}
/**
* Get strasse
*
* @return string
*/
public function getStrasse()
{
return $this->strasse;
}
/**
* Set hausnummer
*
* @param string $hausnummer
* @return Abo
*/
public function setHausnummer($hausnummer)
{
$this->hausnummer = $hausnummer;
return $this;
}
/**
* Get hausnummer
*
* @return string
*/
public function getHausnummer()
{
return $this->hausnummer;
}
/**
* Get Strasse und Hausnummer
*
* @return string
*/
public function getStrasseUndHausnummer()
{
return $this->strasse_voll ?: Juridicus::concat_ws(' ', $this->strasse, $this->hausnummer);
}
/**
* Set plz
*
* @param string $plz
* @return Abo
*/
public function setPlz($plz)
{
$this->plz = $plz;
return $this;
}
/**
* Get plz
*
* @return string
*/
public function getPlz()
{
return $this->plz;
}
/**
* Set ort
*
* @param string $ort
* @return Abo
*/
public function setOrt($ort)
{
$this->ort = $ort;
return $this;
}
/**
* Get ort
*
* @return string
*/
public function getOrt()
{
return $this->ort;
}
/**
*
* @return string
*/
public function getPlzUndOrt()
{
return Juridicus::concat_ws(' ', $this->plz, $this->ort);
}
/**
* Set telefon
*
* @param string $telefon
* @return Abo
*/
public function setTelefon($telefon)
{
$this->telefon = $telefon;
return $this;
}
/**
* Get telefon
*
* @return string
*/
public function getTelefon()
{
return $this->telefon;
}
/**
* Set fax
*
* @param string $fax
* @return Abo
*/
public function setFax($fax)
{
$this->fax = $fax;
return $this;
}
/**
* Get fax
*
* @return string
*/
public function getFax()
{
return $this->fax;
}
/**
* Set email
*
* @param string $email
* @return Abo
*/
public function setEmail($email)
{
$this->email = $email;
return $this;
}
/**
* Get email
*
* @return string
*/
public function getEmail()
{
return $this->email;
}
/**
* Set geburtsdatum
*
* @param \DateTime $geburtsdatum
* @return Abo
*/
public function setGeburtsdatum(\DateTime $geburtsdatum = null)
{
$this->geburtsdatum = $geburtsdatum;
return $this;
}
/**
* Get geburtsdatum
*
* @return \DateTime
*/
public function getGeburtsdatum()
{
return $this->geburtsdatum;
}
/**
* Set sepa
*
* @param boolean $sepa
* @return Abo
*/
public function setSepa($sepa)
{
$this->sepa = (bool) $sepa;
return $this;
}
/**
* Get sepa
*
* @return boolean
*/
public function getSepa()
{
return $this->sepa;
}
/**
* Set sepa_vorname
*
* @param string $sepaVorname
* @return Abo
*/
public function setSepaVorname($sepaVorname)
{
$this->sepa_vorname = $sepaVorname;
return $this;
}
/**
* Get sepa_vorname
*
* @return string
*/
public function getSepaVorname()
{
return $this->sepa_vorname;
}
/**
* Set sepa_nachname
*
* @param string $sepaNachname
* @return Abo
*/
public function setSepaNachname($sepaNachname)
{
$this->sepa_nachname = $sepaNachname;
return $this;
}
/**
* Get sepa_nachname
*
* @return string
*/
public function getSepaNachname()
{
return $this->sepa_nachname;
}
/**
* Get sepa_name
*
* @return string
*/
public function getSepaName()
{
return Juridicus::concat_ws(' ', $this->sepa_vorname, $this->sepa_nachname);
}
/**
* Set sepa_strasse
*
* @param string $sepaStrasse
* @return Abo
*/
public function setSepaStrasse($sepaStrasse)
{
$this->sepa_strasse = $sepaStrasse;
return $this;
}
/**
* Get sepa_strasse
*
* @return string
*/
public function getSepaStrasse()
{
return $this->sepa_strasse;
}
/**
* Set sepa_hausnummer
*
* @param string $sepaHausnummer
* @return Abo
*/
public function setSepaHausnummer($sepaHausnummer)
{
$this->sepa_hausnummer = $sepaHausnummer;
return $this;
}
/**
* Get sepa_hausnummer
*
* @return string
*/
public function getSepaHausnummer()
{
return $this->sepa_hausnummer;
}
/**
*
* @return string
*/
public function getSepaStrasseUndHausnummer()
{
return Juridicus::concat_ws(' ', $this->sepa_strasse, $this->sepa_hausnummer);
}
/**
* Set sepa_plz
*
* @param string $sepaPlz
* @return Abo
*/
public function setSepaPlz($sepaPlz)
{
$this->sepa_plz = $sepaPlz;
return $this;
}
/**
* Get sepa_plz
*
* @return string
*/
public function getSepaPlz()
{
return $this->sepa_plz;
}
/**
* Set sepa_ort
*
* @param string $sepaOrt
* @return Abo
*/
public function setSepaOrt($sepaOrt)
{
$this->sepa_ort = $sepaOrt;
return $this;
}
/**
* Get sepa_ort
*
* @return string
*/
public function getSepaOrt()
{
return $this->sepa_ort;
}
/**
* @return string
*/
public function getSepaPlzUndOrt()
{
return Juridicus::concat_ws(' ', $this->sepa_plz, $this->sepa_ort);
}
/**
* Set sepa_telefon
*
* @param string $sepaTelefon
* @return Abo
*/
public function setSepaTelefon($sepaTelefon)
{
$this->sepa_telefon = $sepaTelefon;
return $this;
}
/**
* Get sepa_telefon
*
* @return string
*/
public function getSepaTelefon()
{
return $this->sepa_telefon;
}
/**
* Set sepa_fax
*
* @param string $sepaFax
* @return Abo
*/
public function setSepaFax($sepaFax)
{
$this->sepa_fax = $sepaFax;
return $this;
}
/**
* Get sepa_fax
*
* @return string
*/
public function getSepaFax()
{
return $this->sepa_fax;
}
/**
* Set sepa_email
*
* @param string $sepaEmail
* @return Abo
*/
public function setSepaEmail($sepaEmail)
{
$this->sepa_email = $sepaEmail;
return $this;
}
/**
* Get sepa_email
*
* @return string
*/
public function getSepaEmail()
{
return $this->sepa_email;
}
/**
* Set sepa_geburtsdatum
*
* @param \DateTime $sepaGeburtsdatum
* @return Abo
*/
public function setSepaGeburtsdatum(\DateTime $sepaGeburtsdatum = null)
{
$this->sepa_geburtsdatum = $sepaGeburtsdatum;
return $this;
}
/**
* Get sepa_geburtsdatum
*
* @return \DateTime
*/
public function getSepaGeburtsdatum()
{
return $this->sepa_geburtsdatum;
}
/**
* Set sepa_bank
*
* @param string $sepaBank
* @return Abo
*/
public function setSepaBank($sepaBank)
{
$this->sepa_bank = $sepaBank;
return $this;
}
/**
* Get sepa_bank
*
* @return string
*/
public function getSepaBank()
{
return $this->sepa_bank;
}
/**
* Set sepa_bic
*
* @param string $sepaBic
* @return Abo
*/
public function setSepaBic($sepaBic)
{
$this->sepa_bic = $sepaBic;
return $this;
}
/**
* Get sepa_bic
*
* @return string
*/
public function getSepaBic()
{
return $this->sepa_bic;
}
/**
* Set sepa_iban
*
* @param string $sepaIban
* @return Abo
*/
public function setSepaIban($sepaIban)
{
$this->sepa_iban = $sepaIban;
return $this;
}
/**
* Get sepa_iban
*
* @return string
*/
public function getSepaIban()
{
return $this->sepa_iban;
}
/**
* Set sepa_kontoinhaber
*
* @param string $sepaKontoinhaber
* @return Abo
*/
public function setSepaKontoinhaber($sepaKontoinhaber)
{
$this->sepa_kontoinhaber = $sepaKontoinhaber;
return $this;
}
/**
* Get sepa_kontoinhaber
*
* @return string
*/
public function getSepaKontoinhaber()
{
return $this->sepa_kontoinhaber;
}
/**
* Add abo_zeitraum
*
* @param \JF\JuridicusBundle\Entity\AboZeitraum $aboZeitraum
* @return Abo
*/
public function addAboZeitraum(AboZeitraum $aboZeitraum)
{
$this->abo_zeitraum[] = $aboZeitraum;
$aboZeitraum->setAbo($this);
return $this;
}
/**
* Remove abo_zeitraum
*
* @param \JF\JuridicusBundle\Entity\AboZeitraum $aboZeitraum
*/
public function removeAboZeitraum(AboZeitraum $aboZeitraum)
{
$this->abo_zeitraum->removeElement($aboZeitraum);
$aboZeitraum->setAbo(null);
}
/**
* Get abo_zeitraum
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getAboZeitraum()
{
return $this->abo_zeitraum;
}
/**
* Set bearbeitet
*
* @param boolean $bearbeitet
* @return Abo
*/
public function setBearbeitet($bearbeitet)
{
$this->bearbeitet = (bool) $bearbeitet;
return $this;
}
/**
* Get bearbeitet
*
* @return boolean
*/
public function getBearbeitet()
{
return $this->bearbeitet;
}
/**
*
* @return string
*/
public function __toString()
{
if ($this->abonummer) {
return sprintf('Abonnement Nr. %s', $this->abonummer);
}
if ($this->id) {
return sprintf('Abonnement ID %07d', $this->id);
}
return 'Neues Abonnement';
}
/**
* Set vorzugspreis
*
* @param boolean $vorzugspreis
* @return Abo
*/
public function setVorzugspreis($vorzugspreis)
{
$this->vorzugspreis = (bool) $vorzugspreis;
return $this;
}
/**
* Get vorzugspreis
*
* @return boolean
*/
public function getVorzugspreis()
{
return $this->vorzugspreis;
}
/**
* return string
*/
public function getPreis()
{
$zeitschrift_key = $this->zeitschrift;
if ($this->vorzugspreis) {
$zeitschrift_key .= '_vorzug';
}
if ($this->online) {
return self::$preise_online[$zeitschrift_key][$this->typ];
} else {
return self::$preise_druck[$zeitschrift_key][$this->typ];
}
}
/**
* return float
*/
public function getPreisValue()
{
$zeitschrift_key = $this->getZeitschrift();
if ($this->getOnline()) {
return self::$preise_online_value[$zeitschrift_key][$this->getTyp()];
} else {
return self::$preise_druck_value[$zeitschrift_key][$this->getTyp()];
}
}
/**
* return float
*/
public function getPreisValueVorzug()
{
$zeitschrift_key = $this->getZeitschrift() . '_vorzug';
if ($this->getOnline()) {
return self::$preise_online_value[$zeitschrift_key][$this->getTyp()];
} else {
return self::$preise_druck_value[$zeitschrift_key][$this->getTyp()];
}
}
/**
* Dauer des Abos in Monaten
*
* @return integer
*/
public function getDauer()
{
return self::$dauer[$this->getTyp()];
}
/**
*
* @return bool
*/
public function isAutoRenew()
{
return self::$auto_renew[$this->getTyp()];
}
/**
* Set kunde
*
* @param \JF\JuridicusBundle\Entity\Kunde $kunde
* @return Abo
*/
public function setKunde(Kunde $kunde = null)
{
$this->kunde = $kunde;
return $this;
}
/**
* Get kunde
*
* @return \JF\JuridicusBundle\Entity\Kunde
*/
public function getKunde()
{
return $this->kunde;
}
/**
* Set gutschein
*
* @param \JF\JuridicusBundle\Entity\Gutschein $gutschein
* @return Abo
*/
public function setGutschein(Gutschein $gutschein = null)
{
$this->gutschein = $gutschein;
return $this;
}
/**
* Get gutschein
*
* @return \JF\JuridicusBundle\Entity\Gutschein
*/
public function getGutschein()
{
return $this->gutschein;
}
/**
* Add email
*
* @param \JF\JuridicusBundle\Entity\Email $email
* @return Abo
*/
public function addEmail(Email $email)
{
$this->emails[] = $email;
return $this;
}
/**
* Remove emails
*
* @param \JF\JuridicusBundle\Entity\Email $emails
*/
public function removeEmail(Email $email)
{
$this->emails->removeElement($email);
}
/**
* Get emails
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getEmails()
{
return $this->emails;
}
/**
* Set zahlung_vierteljaehrlich
*
* @param boolean $zahlungVierteljaehrlich
* @return Abo
*/
public function setZahlungVierteljaehrlich($zahlungVierteljaehrlich = true)
{
$this->zahlung_vierteljaehrlich = (bool) $zahlungVierteljaehrlich;
return $this;
}
/**
* Get zahlung_vierteljaehrlich
*
* @return boolean
*/
public function getZahlungVierteljaehrlich()
{
return $this->zahlung_vierteljaehrlich;
}
/**
* Set abonummer
*
* @param string $abonummer
* @return Abo
*/
public function setAbonummer($abonummer)
{
$this->abonummer = $abonummer;
return $this;
}
/**
* Get kundennummer
*
* @return string
*/
public function getAbonummer()
{
return $this->abonummer;
}
/**
* Set titel
*
* @param string $titel
* @return Abo
*/
public function setTitel($titel)
{
$this->titel = $titel;
return $this;
}
/**
* Get titel
*
* @return string
*/
public function getTitel()
{
return $this->titel;
}
/**
* Set firma
*
* @param string $firma
* @return Abo
*/
public function setFirma($firma)
{
$this->firma = $firma;
return $this;
}
/**
* Get firma
*
* @return string
*/
public function getFirma()
{
return $this->firma;
}
/**
* @return string
*/
public function getAnredeVoll()
{
if ($this->anrede && Juridicus::startsWith($this->anrede, 'Herr')) {
return sprintf('Sehr geehrter %s', Juridicus::concat_ws(' ', $this->anrede, $this->titel, $this->vorname, $this->nachname));
} elseif ($this->anrede && Juridicus::startsWith($this->anrede, 'Frau')) {
return sprintf('Sehr geehrte %s', Juridicus::concat_ws(' ', $this->anrede, $this->titel, $this->vorname, $this->nachname));
} elseif ($this->vorname && $this->nachname) {
return sprintf('Sehr geehrte/r %s', Juridicus::concat_ws(' ', $this->titel, $this->vorname, $this->nachname));
} else {
return 'Sehr geehrte Damen und Herren';
}
}
/**
* @return string
*/
public function getAdresse()
{
$zeile1 = $this->getFirma();
$zeile2 = $this->getAnrede();
$zeile3 = $this->getName();
$zeile4 = $this->getStrasseUndHausnummer();
$zeile5 = $this->getPlzUndOrt();
return Juridicus::concat_ws("\n", $zeile1, $zeile2, $zeile3, $zeile4, $zeile5);
}
/**
* Set anrede
*
* @param string $anrede
* @return Abo
*/
public function setAnrede($anrede)
{
$this->anrede = $anrede;
return $this;
}
/**
* Get anrede
*
* @return string
*/
public function getAnrede()
{
return $this->anrede;
}
/**
* Set strasse_voll
*
* @param string $strasseVoll
* @return Abo
*/
public function setStrasseVoll($strasseVoll)
{
$this->strasse_voll = $strasseVoll;
return $this;
}
/**
* Get strasse_voll
*
* @return string
*/
public function getStrasseVoll()
{
return $this->strasse_voll;
}
/**
*
* @param \DateTime $datum
* @return boolean
*/
public function contains(\DateTime $datum)
{
if (! ($this->datum_ende && $this->datum_start)) {
return true;
}
return ($this->datum_start <= $datum) && ($datum <= $this->datum_ende);
}
/**
* Ende des Abos an Hand des Typs berechnen
*
* @return \DateTime
*/
public function calculateDatumEnde()
{
if (!$this->datum_start || $this->typ === Abo::ABO_FULL) {
$this->datum_ende = null;
} else {
$this->datum_ende = clone $this->datum_start;
$this->datum_ende->modify(sprintf('+ %d month -1 day', $this->getDauer()));
}
return $this->datum_ende;
}
/**
*
* @param \DateTime $monat
* @return AboZeitraum|null
*/
public function findZeitraum(\DateTime $monat)
{
foreach ($this->getAboZeitraum() as $zeitraum) {
/* @var $zeitraum AboZeitraum */
if ($zeitraum->contains($monat)) {
return $zeitraum;
}
}
return null;
}
}