src/JuridicusBundle/Entity/Abo.php line 17

Open in your IDE?
  1. <?php
  2. namespace JF\JuridicusBundle\Entity;
  3. use Doctrine\ORM\Mapping as ORM;
  4. use Symfony\Component\Validator\Constraints as Assert;
  5. use JF\JuridicusBundle\Validator\Constraints as JfAssert;
  6. use Doctrine\Common\Collections\ArrayCollection;
  7. use JF\JuridicusBundle\Utils\Juridicus;
  8. /**
  9.  * Abo
  10.  *
  11.  * @ORM\Entity
  12.  * @Assert\GroupSequence({"Abo","no_sepa","sepa","gutschein"})
  13.  */
  14. class Abo
  15. {
  16.     const CLASSNAME __CLASS__;
  17.     const ABO_FULL 1;
  18.     const ABO_PROBE_3 2;
  19.     const ABO_EINZELHEFT 3;
  20.     const ABO_LESEPROBE_GRATIS 4;
  21.     const ABO_LOCKABO_6 5;
  22.     /**
  23.      *
  24.      * @var array
  25.      */
  26.     private static $typ_strings = array(
  27.         self::ABO_FULL             => 'Vollabonnement',
  28.         self::ABO_PROBE_3          => 'Probe-Abonnement (3 Monate)',
  29.         self::ABO_EINZELHEFT       => 'Einzelheft',
  30.         self::ABO_LESEPROBE_GRATIS => 'Leseprobe',
  31.         self::ABO_LOCKABO_6        => 'Halbjahresabo',
  32.     );
  33.     private static $dauer = array(
  34.         self::ABO_FULL             => 12,
  35.         self::ABO_PROBE_3          => 3,
  36.         self::ABO_EINZELHEFT       => 1,
  37.         self::ABO_LESEPROBE_GRATIS => 1,
  38.         self::ABO_LOCKABO_6        => 6,
  39.     );
  40.     private static $auto_renew = array(
  41.         self::ABO_FULL             => true,
  42.         self::ABO_PROBE_3          => false,
  43.         self::ABO_EINZELHEFT       => false,
  44.         self::ABO_LESEPROBE_GRATIS => false,
  45.         self::ABO_LOCKABO_6        => true,
  46.     );
  47.     private static $rechnung_bezeichnung = array(
  48.         self::ABO_FULL             => 'Vollabo',
  49.         self::ABO_PROBE_3          => 'Probeabo',
  50.         self::ABO_EINZELHEFT       => 'Einzelheft',
  51.     );
  52.     private static $zeitschrift_lang = array(
  53.         'PR' => 'Praktikerreport',
  54.         'ZA' => 'Zeitschriftenauswertung',
  55.     );
  56.     private static $preise_druck = array(
  57.         'PR'        => array(
  58.             self::ABO_FULL             => '82,80 € / Jahr',
  59.             self::ABO_PROBE_3          => '20,00 € / 3 Hefte',
  60.             self::ABO_LESEPROBE_GRATIS => 'kostenlos',
  61.         ),
  62.         'ZA'        => array(
  63.             self::ABO_FULL             => '69,60 € / Jahr',
  64.             self::ABO_LESEPROBE_GRATIS => 'kostenlos',
  65.         ),
  66.         'ZA_vorzug' => array(
  67.             self::ABO_FULL             => '1. Jahr: 59,90 €, danach 69,60 € / Jahr',
  68.             self::ABO_LESEPROBE_GRATIS => 'kostenlos',
  69.         )
  70.     );
  71.     private static $preise_druck_value = array(
  72.         'PR'        => array(
  73.             self::ABO_FULL             => 82.80,
  74.             self::ABO_PROBE_3          => 20.0,
  75.             self::ABO_LESEPROBE_GRATIS => 0.0,
  76.         ),
  77.     );
  78.     private static $preise_online = array(
  79.         'PR'        => array(
  80.             self::ABO_FULL       => '55,00 € / Jahr',
  81.             self::ABO_PROBE_3    => '15,00 € / 3 Hefte',
  82.             self::ABO_EINZELHEFT => '6,00 € / 1 Heft',
  83.             self::ABO_LOCKABO_6  => 'kostenlos',
  84.         ),
  85.         'ZA'        => array(
  86.             self::ABO_FULL       => '48,00 € / Jahr',
  87.             self::ABO_PROBE_3    => '15,00 € / 3 Hefte',
  88.             self::ABO_EINZELHEFT => '5,00 € / 1 Heft',
  89.             self::ABO_LOCKABO_6  => 'kostenlos',
  90.         ),
  91.         'ZA_vorzug' => array(
  92.             self::ABO_FULL       => '1. Jahr: 24,00 €, danach 48,00 € / Jahr',
  93.             self::ABO_PROBE_3    => '15,00 € / 3 Hefte',
  94.             self::ABO_EINZELHEFT => '5,00 € / 1 Heft',
  95.         )
  96.     );
  97.     private static $preise_online_value = array(
  98.         'PR'        => array(
  99.             self::ABO_FULL       => 55.00,
  100.             self::ABO_PROBE_3    => 15.0,
  101.             self::ABO_EINZELHEFT => 6.0,
  102.             self::ABO_LOCKABO_6  => 0.0,
  103.         ),
  104.         'ZA'        => array(
  105.             self::ABO_FULL       => 48.0,
  106.             self::ABO_PROBE_3    => 15.0,
  107.             self::ABO_EINZELHEFT => 5.0,
  108.             self::ABO_LOCKABO_6  => 0.0,
  109.         ),
  110.         'ZA_vorzug' => array(
  111.             self::ABO_FULL       => 24.0,
  112.             self::ABO_PROBE_3    => 15.0,
  113.             self::ABO_EINZELHEFT => 5.0,
  114.             self::ABO_LOCKABO_6  => 0.0
  115.         ),
  116.     );
  117.     /**
  118.      *
  119.      * @return array
  120.      */
  121.     public static function getTypOptions()
  122.     {
  123.         return self::$typ_strings;
  124.     }
  125.     /**
  126.      * @var integer
  127.      */
  128.     private $id;
  129.     /**
  130.      * @var string
  131.      * @Assert\NotBlank(groups={"no_sepa"})
  132.      */
  133.     private $zeitschrift;
  134.     /**
  135.      * @var integer
  136.      * @Assert\NotNull(groups={"no_sepa"})
  137.      */
  138.     private $typ;
  139.     /**
  140.      * @var boolean
  141.      * @Assert\NotNull(groups={"no_sepa"})
  142.      */
  143.     private $online false;
  144.     /**
  145.      * @var boolean
  146.      */
  147.     private $vorzugspreis false;
  148.     /**
  149.      * @var \DateTime
  150.      * @Assert\NotNull(groups={"no_sepa"})
  151.      * @Assert\Date(groups={"no_sepa"})
  152.      */
  153.     private $datum_start;
  154.     /**
  155.      * @var \DateTime
  156.      * @Assert\Date(groups={"no_sepa"})
  157.      */
  158.     private $datum_ende;
  159.     /**
  160.      * @var \DateTime
  161.      */
  162.     private $created_at;
  163.     /**
  164.      * @var string
  165.      * @Assert\NotBlank(groups={"no_sepa"})
  166.      * @Assert\Ip(groups={"no_sepa"})
  167.      */
  168.     private $ip;
  169.     /**
  170.      * @var boolean
  171.      */
  172.     private $bearbeitet false;
  173.     /**
  174.      * @var boolean
  175.      */
  176.     private $zahlung_vierteljaehrlich false;
  177.     /**
  178.      * @var string
  179.      */
  180.     private $abonummer;
  181.     /**
  182.      * @var string
  183.      */
  184.     private $anrede;
  185.     /**
  186.      * @var string
  187.      * @Assert\Length(max="255")
  188.      */
  189.     private $titel;
  190.     /**
  191.      * @var string
  192.      * @Assert\NotBlank(groups={"no_sepa"})
  193.      */
  194.     private $vorname;
  195.     /**
  196.      * @var string
  197.      * @Assert\NotBlank(groups={"no_sepa"})
  198.      */
  199.     private $nachname;
  200.     /**
  201.      * @var string
  202.      * @Assert\NotBlank(groups={"no_sepa"})
  203.      */
  204.     private $strasse;
  205.     /**
  206.      * @var string
  207.      * @Assert\NotBlank(groups={"no_sepa"})
  208.      */
  209.     private $hausnummer;
  210.     /**
  211.      * @var string
  212.      */
  213.     private $strasse_voll;
  214.     /**
  215.      * @var string
  216.      * @Assert\NotBlank(groups={"no_sepa"})
  217.      * @Assert\Regex(groups={"no_sepa"}, pattern="/^\d{5}$/", message = "Die PLZ muss aus 5 Ziffern bestehen." )
  218.      */
  219.     private $plz;
  220.     /**
  221.      * @var string
  222.      * @Assert\NotBlank(groups={"no_sepa"})
  223.      */
  224.     private $ort;
  225.     /**
  226.      * @var string
  227.      * @Assert\NotBlank(groups={"no_sepa"})
  228.      */
  229.     private $telefon;
  230.     /**
  231.      * @var string
  232.      */
  233.     private $fax;
  234.     /**
  235.      * @var string
  236.      * @Assert\Email(groups={"no_sepa"}, checkMX = true)
  237.      */
  238.     private $email;
  239.     /**
  240.      * @var \DateTime
  241.      * @Assert\NotBlank(groups={"no_sepa"})
  242.      * @Assert\Date(groups={"no_sepa"})
  243.      */
  244.     private $geburtsdatum;
  245.     /**
  246.      *
  247.      * @var string
  248.      * @Assert\Length(max="255")
  249.      */
  250.     private $firma;
  251.     /**
  252.      * @var boolean
  253.      * @Assert\NotNull(groups={"no_sepa"})
  254.      */
  255.     private $sepa false;
  256.     /**
  257.      * @var string
  258.      * @Assert\NotBlank(groups={"sepa"})
  259.      */
  260.     private $sepa_vorname;
  261.     /**
  262.      * @var string
  263.      * @Assert\NotBlank(groups={"sepa"})
  264.      */
  265.     private $sepa_nachname;
  266.     /**
  267.      * @var string
  268.      * @Assert\NotBlank(groups={"sepa"})
  269.      */
  270.     private $sepa_strasse;
  271.     /**
  272.      * @var string
  273.      * @Assert\NotBlank(groups={"sepa"})
  274.      */
  275.     private $sepa_hausnummer;
  276.     /**
  277.      * @var string
  278.      * @Assert\Regex(groups={"sepa"}, pattern="/^\d{5}$/", message = "Die PLZ muss aus 5 Ziffern bestehen." )
  279.      */
  280.     private $sepa_plz;
  281.     /**
  282.      * @var string
  283.      * @Assert\NotBlank(groups={"sepa"})
  284.      */
  285.     private $sepa_ort;
  286.     /**
  287.      * @var string
  288.      * @Assert\NotBlank(groups={"sepa"})
  289.      */
  290.     private $sepa_telefon;
  291.     /**
  292.      * @var string
  293.      */
  294.     private $sepa_fax;
  295.     /**
  296.      * @var string
  297.      * @Assert\NotBlank(groups={"sepa"})
  298.      * @Assert\Email(groups={"sepa"}, checkMX = true)
  299.      */
  300.     private $sepa_email;
  301.     /**
  302.      * @var \DateTime
  303.      * @Assert\NotBlank(groups={"sepa"})
  304.      * @Assert\Date(groups={"sepa"})
  305.      */
  306.     private $sepa_geburtsdatum;
  307.     /**
  308.      * @var string
  309.      * @Assert\NotBlank(groups={"sepa"})
  310.      */
  311.     private $sepa_bank;
  312.     /**
  313.      * @var string
  314.      * @Assert\NotBlank(groups={"sepa"})
  315.      */
  316.     private $sepa_bic;
  317.     /**
  318.      * @var string
  319.      * @Assert\NotBlank(groups={"sepa"})
  320.      */
  321.     private $sepa_iban;
  322.     /**
  323.      * @var string
  324.      * @Assert\NotBlank(groups={"sepa"})
  325.      */
  326.     private $sepa_kontoinhaber;
  327.     /**
  328.      * @var \JF\JuridicusBundle\Entity\Kunde
  329.      */
  330.     private $kunde;
  331.     /**
  332.      * @var \JF\JuridicusBundle\Entity\Gutschein
  333.      * @Assert\Valid()
  334.      */
  335.     private $gutschein;
  336.     /**
  337.      * @var \Doctrine\Common\Collections\Collection
  338.      */
  339.     private $abo_zeitraum;
  340.     /**
  341.      * @var \Doctrine\Common\Collections\Collection
  342.      */
  343.     private $emails;
  344.     /**
  345.      *
  346.      * Konstructor.
  347.      */
  348.     public function __construct()
  349.     {
  350.         $this->abo_zeitraum = new ArrayCollection();
  351.         $this->emails = new ArrayCollection();
  352.     }
  353.     /**
  354.      * isInvalidGutschein
  355.      *
  356.      * @return boolean
  357.      *
  358.      * @Assert\IsFalse(groups={"gutschein"}, message = "Der Gutscheincode gilt nicht für diesen Abotyp.")
  359.      * changedFrom Assert\False
  360.      */
  361.     public function isInvalidGutschein()
  362.     {
  363.         $gutschein $this->getGutschein();
  364.         if (!$gutschein || !$gutschein->getId()) {
  365.             return false;
  366.         }
  367.         return false
  368.             || $gutschein->getValidZeitschrift() != $this->zeitschrift
  369.             || $gutschein->getValidAboTyp() != $this->typ
  370.             || $gutschein->getValidOnline() != $this->online
  371.         ;
  372.     }
  373.     /**
  374.      * isInvalidGeburtsdatum
  375.      *
  376.      * @return boolean
  377.      *
  378.      * @Assert\IsFalse(groups={"no_sepa"}, message = "Der Geburtstag muss in der Vergangenheit liegen.")
  379.      * changedFrom Assert\False
  380.      */
  381.     public function isInvalidGeburtsdatum()
  382.     {
  383.         return $this->geburtsdatum > new \DateTime('today');
  384.     }
  385.     /**
  386.      * isInvalidSepaGeburtsdatum
  387.      *
  388.      * @return boolean
  389.      *
  390.      * @Assert\IsFalse(groups={"sepa"}, message = "Der Geburtstag muss in der Vergangenheit liegen.")
  391.      * changedFrom Assert\False
  392.      */
  393.     public function isInvalidSepaGeburtsdatum()
  394.     {
  395.         return $this->sepa_geburtsdatum > new \DateTime('today');
  396.     }
  397.     /**
  398.      * Get id
  399.      *
  400.      * @return integer
  401.      */
  402.     public function getId()
  403.     {
  404.         return $this->id;
  405.     }
  406.     /**
  407.      * Set zeitschrift
  408.      *
  409.      * @param string $zeitschrift
  410.      * @return Abo
  411.      */
  412.     public function setZeitschrift($zeitschrift)
  413.     {
  414.         if ($zeitschrift !== 'ZA' && $zeitschrift !== 'PR') {
  415.             throw new \InvalidArgumentException('Ungültige Zeitschrift.');
  416.         }
  417.         $this->zeitschrift $zeitschrift;
  418.         return $this;
  419.     }
  420.     /**
  421.      * Get zeitschrift
  422.      *
  423.      * @return string
  424.      */
  425.     public function getZeitschrift()
  426.     {
  427.         return $this->zeitschrift;
  428.     }
  429.     /**
  430.      * @return string
  431.      */
  432.     public function getZeitschriftLang()
  433.     {
  434.         if (!isset(self::$zeitschrift_lang[$this->zeitschrift])) {
  435.             throw new \RuntimeException('Ungültige Zeitschrift');
  436.         }
  437.         return self::$zeitschrift_lang[$this->zeitschrift];
  438.     }
  439.     /**
  440.      * Set typ
  441.      *
  442.      * @param integer $typ
  443.      * @return Abo
  444.      */
  445.     public function setTyp($typ)
  446.     {
  447.         $this->typ intval($typ);
  448.         return $this;
  449.     }
  450.     /**
  451.      * Get typ
  452.      *
  453.      * @return integer
  454.      */
  455.     public function getTyp()
  456.     {
  457.         return $this->typ;
  458.     }
  459.     /**
  460.      *
  461.      * @return string
  462.      */
  463.     public function getTypString()
  464.     {
  465.         return self::$typ_strings[$this->typ];
  466.     }
  467.     /**
  468.      *
  469.      * @return string
  470.      */
  471.     public function getRechnungBezeichnung()
  472.     {
  473.         $zeitschrift_lang $this->zeitschrift == 'ZA' 'Zeitschriftenauswertung' 'Praktikereport';
  474.         return sprintf("%s\n%s\nOnline"self::$rechnung_bezeichnung[$this->typ], $zeitschrift_lang);
  475.     }
  476.     public function getRechnungCellHeight()
  477.     {
  478.         return self::$rechnung_height[$this->typ];
  479.     }
  480.     public function getAboKennung()
  481.     {
  482.         if ($this->abonummer) {
  483.             return array(
  484.                 'kennung' => 'Abo-Nummer',
  485.                 'nummer' => $this->abonummer,
  486.             );
  487.         } else {
  488.             return array(
  489.                 'kennung' => 'Abo-ID',
  490.                 'nummer'  => sprintf('%07d'$this->id),
  491.             );
  492.         }
  493.     }
  494.     /**
  495.      * Set online
  496.      *
  497.      * @param boolean $online
  498.      * @return Abo
  499.      */
  500.     public function setOnline($online true)
  501.     {
  502.         $this->online = (bool) $online;
  503.         return $this;
  504.     }
  505.     /**
  506.      * Get online
  507.      *
  508.      * @return boolean
  509.      */
  510.     public function getOnline()
  511.     {
  512.         return $this->online;
  513.     }
  514.     /**
  515.      * Set datum_start
  516.      *
  517.      * @param \DateTime $datumStart
  518.      * @return Abo
  519.      */
  520.     public function setDatumStart(\DateTime $datumStart null)
  521.     {
  522.         $this->datum_start $datumStart;
  523.         return $this;
  524.     }
  525.     /**
  526.      * Get datum_start
  527.      *
  528.      * @return \DateTime
  529.      */
  530.     public function getDatumStart()
  531.     {
  532.         return $this->datum_start;
  533.     }
  534.     /**
  535.      * @Assert\IsTrue(groups={"no_sepa"}, message = "Das Datum darf höchstens 6 Monate in der Vergangenheit liegen. Ältere Ausgaben sind im Archiv zu finden.")
  536.      * changedFrom Assert\True
  537.      */
  538.     public function isOnlineDatumStartValid()
  539.     {
  540.         // nur Online-Ausgaben testen
  541.         if (!$this->online) {
  542.             return true;
  543.         }
  544.         $stichtag = new \DateTime('first day of this month - 6 month');
  545.         return is_object($this->datum_start) && $this->datum_start >= $stichtag;
  546.     }
  547.     /**
  548.      * @Assert\IsTrue(groups={"no_sepa"}, message = "Das Datum darf nicht in der Vergangenheit liegen. Kontaktieren Sie für vergangene Ausgaben bitte direkt den Verlag.")
  549.      * changedFrom Assert\True
  550.      */
  551.     public function isPrintDatumStartValid()
  552.     {
  553.         // nur Prist-Ausgaben testen
  554.         if ($this->online) {
  555.             return true;
  556.         }
  557.         $stichtag = new \DateTime('first day of next month');
  558.         return is_object($this->datum_start) && $this->datum_start >= $stichtag;
  559.     }
  560.     /**
  561.      * Set datum_ende
  562.      *
  563.      * @param \DateTime $datumEnde
  564.      * @return Abo
  565.      */
  566.     public function setDatumEnde(\DateTime $datumEnde null)
  567.     {
  568.         $this->datum_ende $datumEnde;
  569.         return $this;
  570.     }
  571.     /**
  572.      * Get datum_ende
  573.      *
  574.      * @return \DateTime
  575.      */
  576.     public function getDatumEnde()
  577.     {
  578.         return $this->datum_ende;
  579.     }
  580.     /**
  581.      * Set created_at
  582.      *
  583.      * @param \DateTime $createdAt
  584.      * @return Abo
  585.      */
  586.     public function setCreatedAt(\DateTime $createdAt null)
  587.     {
  588.         $this->created_at $createdAt;
  589.         return $this;
  590.     }
  591.     /**
  592.      * Get created_at
  593.      *
  594.      * @return \DateTime
  595.      */
  596.     public function getCreatedAt()
  597.     {
  598.         return $this->created_at;
  599.     }
  600.     /**
  601.      * Set ip
  602.      *
  603.      * @param string $ip
  604.      * @return Abo
  605.      */
  606.     public function setIp($ip)
  607.     {
  608.         $this->ip $ip;
  609.         return $this;
  610.     }
  611.     /**
  612.      * Get ip
  613.      *
  614.      * @return string
  615.      */
  616.     public function getIp()
  617.     {
  618.         return $this->ip;
  619.     }
  620.     /**
  621.      * Set vorname
  622.      *
  623.      * @param string $vorname
  624.      * @return Abo
  625.      */
  626.     public function setVorname($vorname)
  627.     {
  628.         $this->vorname $vorname;
  629.         return $this;
  630.     }
  631.     /**
  632.      * Get vorname
  633.      *
  634.      * @return string
  635.      */
  636.     public function getVorname()
  637.     {
  638.         return $this->vorname;
  639.     }
  640.     /**
  641.      * Set nachname
  642.      *
  643.      * @param string $nachname
  644.      * @return Abo
  645.      */
  646.     public function setNachname($nachname)
  647.     {
  648.         $this->nachname $nachname;
  649.         return $this;
  650.     }
  651.     /**
  652.      * Get nachname
  653.      *
  654.      * @return string
  655.      */
  656.     public function getNachname()
  657.     {
  658.         return $this->nachname;
  659.     }
  660.     /**
  661.      *
  662.      * @return string
  663.      */
  664.     public function getName()
  665.     {
  666.         return Juridicus::concat_ws(' '$this->titel$this->vorname$this->nachname);
  667.     }
  668.     /**
  669.      * Set strasse
  670.      *
  671.      * @param string $strasse
  672.      * @return Abo
  673.      */
  674.     public function setStrasse($strasse)
  675.     {
  676.         $this->strasse $strasse;
  677.         return $this;
  678.     }
  679.     /**
  680.      * Get strasse
  681.      *
  682.      * @return string
  683.      */
  684.     public function getStrasse()
  685.     {
  686.         return $this->strasse;
  687.     }
  688.     /**
  689.      * Set hausnummer
  690.      *
  691.      * @param string $hausnummer
  692.      * @return Abo
  693.      */
  694.     public function setHausnummer($hausnummer)
  695.     {
  696.         $this->hausnummer $hausnummer;
  697.         return $this;
  698.     }
  699.     /**
  700.      * Get hausnummer
  701.      *
  702.      * @return string
  703.      */
  704.     public function getHausnummer()
  705.     {
  706.         return $this->hausnummer;
  707.     }
  708.     /**
  709.      * Get Strasse und Hausnummer
  710.      *
  711.      * @return string
  712.      */
  713.     public function getStrasseUndHausnummer()
  714.     {
  715.         return $this->strasse_voll ?: Juridicus::concat_ws(' '$this->strasse$this->hausnummer);
  716.     }
  717.     /**
  718.      * Set plz
  719.      *
  720.      * @param string $plz
  721.      * @return Abo
  722.      */
  723.     public function setPlz($plz)
  724.     {
  725.         $this->plz $plz;
  726.         return $this;
  727.     }
  728.     /**
  729.      * Get plz
  730.      *
  731.      * @return string
  732.      */
  733.     public function getPlz()
  734.     {
  735.         return $this->plz;
  736.     }
  737.     /**
  738.      * Set ort
  739.      *
  740.      * @param string $ort
  741.      * @return Abo
  742.      */
  743.     public function setOrt($ort)
  744.     {
  745.         $this->ort $ort;
  746.         return $this;
  747.     }
  748.     /**
  749.      * Get ort
  750.      *
  751.      * @return string
  752.      */
  753.     public function getOrt()
  754.     {
  755.         return $this->ort;
  756.     }
  757.     /**
  758.      *
  759.      * @return string
  760.      */
  761.     public function getPlzUndOrt()
  762.     {
  763.         return Juridicus::concat_ws(' '$this->plz$this->ort);
  764.     }
  765.     /**
  766.      * Set telefon
  767.      *
  768.      * @param string $telefon
  769.      * @return Abo
  770.      */
  771.     public function setTelefon($telefon)
  772.     {
  773.         $this->telefon $telefon;
  774.         return $this;
  775.     }
  776.     /**
  777.      * Get telefon
  778.      *
  779.      * @return string
  780.      */
  781.     public function getTelefon()
  782.     {
  783.         return $this->telefon;
  784.     }
  785.     /**
  786.      * Set fax
  787.      *
  788.      * @param string $fax
  789.      * @return Abo
  790.      */
  791.     public function setFax($fax)
  792.     {
  793.         $this->fax $fax;
  794.         return $this;
  795.     }
  796.     /**
  797.      * Get fax
  798.      *
  799.      * @return string
  800.      */
  801.     public function getFax()
  802.     {
  803.         return $this->fax;
  804.     }
  805.     /**
  806.      * Set email
  807.      *
  808.      * @param string $email
  809.      * @return Abo
  810.      */
  811.     public function setEmail($email)
  812.     {
  813.         $this->email $email;
  814.         return $this;
  815.     }
  816.     /**
  817.      * Get email
  818.      *
  819.      * @return string
  820.      */
  821.     public function getEmail()
  822.     {
  823.         return $this->email;
  824.     }
  825.     /**
  826.      * Set geburtsdatum
  827.      *
  828.      * @param \DateTime $geburtsdatum
  829.      * @return Abo
  830.      */
  831.     public function setGeburtsdatum(\DateTime $geburtsdatum null)
  832.     {
  833.         $this->geburtsdatum $geburtsdatum;
  834.         return $this;
  835.     }
  836.     /**
  837.      * Get geburtsdatum
  838.      *
  839.      * @return \DateTime
  840.      */
  841.     public function getGeburtsdatum()
  842.     {
  843.         return $this->geburtsdatum;
  844.     }
  845.     /**
  846.      * Set sepa
  847.      *
  848.      * @param boolean $sepa
  849.      * @return Abo
  850.      */
  851.     public function setSepa($sepa)
  852.     {
  853.         $this->sepa = (bool) $sepa;
  854.         return $this;
  855.     }
  856.     /**
  857.      * Get sepa
  858.      *
  859.      * @return boolean
  860.      */
  861.     public function getSepa()
  862.     {
  863.         return $this->sepa;
  864.     }
  865.     /**
  866.      * Set sepa_vorname
  867.      *
  868.      * @param string $sepaVorname
  869.      * @return Abo
  870.      */
  871.     public function setSepaVorname($sepaVorname)
  872.     {
  873.         $this->sepa_vorname $sepaVorname;
  874.         return $this;
  875.     }
  876.     /**
  877.      * Get sepa_vorname
  878.      *
  879.      * @return string
  880.      */
  881.     public function getSepaVorname()
  882.     {
  883.         return $this->sepa_vorname;
  884.     }
  885.     /**
  886.      * Set sepa_nachname
  887.      *
  888.      * @param string $sepaNachname
  889.      * @return Abo
  890.      */
  891.     public function setSepaNachname($sepaNachname)
  892.     {
  893.         $this->sepa_nachname $sepaNachname;
  894.         return $this;
  895.     }
  896.     /**
  897.      * Get sepa_nachname
  898.      *
  899.      * @return string
  900.      */
  901.     public function getSepaNachname()
  902.     {
  903.         return $this->sepa_nachname;
  904.     }
  905.     /**
  906.      * Get sepa_name
  907.      *
  908.      * @return string
  909.      */
  910.     public function getSepaName()
  911.     {
  912.         return Juridicus::concat_ws(' '$this->sepa_vorname$this->sepa_nachname);
  913.     }
  914.     /**
  915.      * Set sepa_strasse
  916.      *
  917.      * @param string $sepaStrasse
  918.      * @return Abo
  919.      */
  920.     public function setSepaStrasse($sepaStrasse)
  921.     {
  922.         $this->sepa_strasse $sepaStrasse;
  923.         return $this;
  924.     }
  925.     /**
  926.      * Get sepa_strasse
  927.      *
  928.      * @return string
  929.      */
  930.     public function getSepaStrasse()
  931.     {
  932.         return $this->sepa_strasse;
  933.     }
  934.     /**
  935.      * Set sepa_hausnummer
  936.      *
  937.      * @param string $sepaHausnummer
  938.      * @return Abo
  939.      */
  940.     public function setSepaHausnummer($sepaHausnummer)
  941.     {
  942.         $this->sepa_hausnummer $sepaHausnummer;
  943.         return $this;
  944.     }
  945.     /**
  946.      * Get sepa_hausnummer
  947.      *
  948.      * @return string
  949.      */
  950.     public function getSepaHausnummer()
  951.     {
  952.         return $this->sepa_hausnummer;
  953.     }
  954.     /**
  955.      *
  956.      * @return string
  957.      */
  958.     public function getSepaStrasseUndHausnummer()
  959.     {
  960.         return Juridicus::concat_ws(' '$this->sepa_strasse$this->sepa_hausnummer);
  961.     }
  962.     /**
  963.      * Set sepa_plz
  964.      *
  965.      * @param string $sepaPlz
  966.      * @return Abo
  967.      */
  968.     public function setSepaPlz($sepaPlz)
  969.     {
  970.         $this->sepa_plz $sepaPlz;
  971.         return $this;
  972.     }
  973.     /**
  974.      * Get sepa_plz
  975.      *
  976.      * @return string
  977.      */
  978.     public function getSepaPlz()
  979.     {
  980.         return $this->sepa_plz;
  981.     }
  982.     /**
  983.      * Set sepa_ort
  984.      *
  985.      * @param string $sepaOrt
  986.      * @return Abo
  987.      */
  988.     public function setSepaOrt($sepaOrt)
  989.     {
  990.         $this->sepa_ort $sepaOrt;
  991.         return $this;
  992.     }
  993.     /**
  994.      * Get sepa_ort
  995.      *
  996.      * @return string
  997.      */
  998.     public function getSepaOrt()
  999.     {
  1000.         return $this->sepa_ort;
  1001.     }
  1002.     /**
  1003.      * @return string
  1004.      */
  1005.     public function getSepaPlzUndOrt()
  1006.     {
  1007.         return Juridicus::concat_ws(' '$this->sepa_plz$this->sepa_ort);
  1008.     }
  1009.     /**
  1010.      * Set sepa_telefon
  1011.      *
  1012.      * @param string $sepaTelefon
  1013.      * @return Abo
  1014.      */
  1015.     public function setSepaTelefon($sepaTelefon)
  1016.     {
  1017.         $this->sepa_telefon $sepaTelefon;
  1018.         return $this;
  1019.     }
  1020.     /**
  1021.      * Get sepa_telefon
  1022.      *
  1023.      * @return string
  1024.      */
  1025.     public function getSepaTelefon()
  1026.     {
  1027.         return $this->sepa_telefon;
  1028.     }
  1029.     /**
  1030.      * Set sepa_fax
  1031.      *
  1032.      * @param string $sepaFax
  1033.      * @return Abo
  1034.      */
  1035.     public function setSepaFax($sepaFax)
  1036.     {
  1037.         $this->sepa_fax $sepaFax;
  1038.         return $this;
  1039.     }
  1040.     /**
  1041.      * Get sepa_fax
  1042.      *
  1043.      * @return string
  1044.      */
  1045.     public function getSepaFax()
  1046.     {
  1047.         return $this->sepa_fax;
  1048.     }
  1049.     /**
  1050.      * Set sepa_email
  1051.      *
  1052.      * @param string $sepaEmail
  1053.      * @return Abo
  1054.      */
  1055.     public function setSepaEmail($sepaEmail)
  1056.     {
  1057.         $this->sepa_email $sepaEmail;
  1058.         return $this;
  1059.     }
  1060.     /**
  1061.      * Get sepa_email
  1062.      *
  1063.      * @return string
  1064.      */
  1065.     public function getSepaEmail()
  1066.     {
  1067.         return $this->sepa_email;
  1068.     }
  1069.     /**
  1070.      * Set sepa_geburtsdatum
  1071.      *
  1072.      * @param \DateTime $sepaGeburtsdatum
  1073.      * @return Abo
  1074.      */
  1075.     public function setSepaGeburtsdatum(\DateTime $sepaGeburtsdatum null)
  1076.     {
  1077.         $this->sepa_geburtsdatum $sepaGeburtsdatum;
  1078.         return $this;
  1079.     }
  1080.     /**
  1081.      * Get sepa_geburtsdatum
  1082.      *
  1083.      * @return \DateTime
  1084.      */
  1085.     public function getSepaGeburtsdatum()
  1086.     {
  1087.         return $this->sepa_geburtsdatum;
  1088.     }
  1089.     /**
  1090.      * Set sepa_bank
  1091.      *
  1092.      * @param string $sepaBank
  1093.      * @return Abo
  1094.      */
  1095.     public function setSepaBank($sepaBank)
  1096.     {
  1097.         $this->sepa_bank $sepaBank;
  1098.         return $this;
  1099.     }
  1100.     /**
  1101.      * Get sepa_bank
  1102.      *
  1103.      * @return string
  1104.      */
  1105.     public function getSepaBank()
  1106.     {
  1107.         return $this->sepa_bank;
  1108.     }
  1109.     /**
  1110.      * Set sepa_bic
  1111.      *
  1112.      * @param string $sepaBic
  1113.      * @return Abo
  1114.      */
  1115.     public function setSepaBic($sepaBic)
  1116.     {
  1117.         $this->sepa_bic $sepaBic;
  1118.         return $this;
  1119.     }
  1120.     /**
  1121.      * Get sepa_bic
  1122.      *
  1123.      * @return string
  1124.      */
  1125.     public function getSepaBic()
  1126.     {
  1127.         return $this->sepa_bic;
  1128.     }
  1129.     /**
  1130.      * Set sepa_iban
  1131.      *
  1132.      * @param string $sepaIban
  1133.      * @return Abo
  1134.      */
  1135.     public function setSepaIban($sepaIban)
  1136.     {
  1137.         $this->sepa_iban $sepaIban;
  1138.         return $this;
  1139.     }
  1140.     /**
  1141.      * Get sepa_iban
  1142.      *
  1143.      * @return string
  1144.      */
  1145.     public function getSepaIban()
  1146.     {
  1147.         return $this->sepa_iban;
  1148.     }
  1149.     /**
  1150.      * Set sepa_kontoinhaber
  1151.      *
  1152.      * @param string $sepaKontoinhaber
  1153.      * @return Abo
  1154.      */
  1155.     public function setSepaKontoinhaber($sepaKontoinhaber)
  1156.     {
  1157.         $this->sepa_kontoinhaber $sepaKontoinhaber;
  1158.         return $this;
  1159.     }
  1160.     /**
  1161.      * Get sepa_kontoinhaber
  1162.      *
  1163.      * @return string
  1164.      */
  1165.     public function getSepaKontoinhaber()
  1166.     {
  1167.         return $this->sepa_kontoinhaber;
  1168.     }
  1169.     /**
  1170.      * Add abo_zeitraum
  1171.      *
  1172.      * @param \JF\JuridicusBundle\Entity\AboZeitraum $aboZeitraum
  1173.      * @return Abo
  1174.      */
  1175.     public function addAboZeitraum(AboZeitraum $aboZeitraum)
  1176.     {
  1177.         $this->abo_zeitraum[] = $aboZeitraum;
  1178.         $aboZeitraum->setAbo($this);
  1179.         return $this;
  1180.     }
  1181.     /**
  1182.      * Remove abo_zeitraum
  1183.      *
  1184.      * @param \JF\JuridicusBundle\Entity\AboZeitraum $aboZeitraum
  1185.      */
  1186.     public function removeAboZeitraum(AboZeitraum $aboZeitraum)
  1187.     {
  1188.         $this->abo_zeitraum->removeElement($aboZeitraum);
  1189.         $aboZeitraum->setAbo(null);
  1190.     }
  1191.     /**
  1192.      * Get abo_zeitraum
  1193.      *
  1194.      * @return \Doctrine\Common\Collections\Collection
  1195.      */
  1196.     public function getAboZeitraum()
  1197.     {
  1198.         return $this->abo_zeitraum;
  1199.     }
  1200.     /**
  1201.      * Set bearbeitet
  1202.      *
  1203.      * @param boolean $bearbeitet
  1204.      * @return Abo
  1205.      */
  1206.     public function setBearbeitet($bearbeitet)
  1207.     {
  1208.         $this->bearbeitet = (bool) $bearbeitet;
  1209.         return $this;
  1210.     }
  1211.     /**
  1212.      * Get bearbeitet
  1213.      *
  1214.      * @return boolean
  1215.      */
  1216.     public function getBearbeitet()
  1217.     {
  1218.         return $this->bearbeitet;
  1219.     }
  1220.     /**
  1221.      *
  1222.      * @return string
  1223.      */
  1224.     public function __toString()
  1225.     {
  1226.         if ($this->abonummer) {
  1227.             return sprintf('Abonnement Nr. %s'$this->abonummer);
  1228.         }
  1229.         if ($this->id) {
  1230.             return sprintf('Abonnement ID %07d'$this->id);
  1231.         }
  1232.         return 'Neues Abonnement';
  1233.     }
  1234.     /**
  1235.      * Set vorzugspreis
  1236.      *
  1237.      * @param boolean $vorzugspreis
  1238.      * @return Abo
  1239.      */
  1240.     public function setVorzugspreis($vorzugspreis)
  1241.     {
  1242.         $this->vorzugspreis = (bool) $vorzugspreis;
  1243.         return $this;
  1244.     }
  1245.     /**
  1246.      * Get vorzugspreis
  1247.      *
  1248.      * @return boolean
  1249.      */
  1250.     public function getVorzugspreis()
  1251.     {
  1252.         return $this->vorzugspreis;
  1253.     }
  1254.     /**
  1255.      * return string
  1256.      */
  1257.     public function getPreis()
  1258.     {
  1259.         $zeitschrift_key $this->zeitschrift;
  1260.         if ($this->vorzugspreis) {
  1261.             $zeitschrift_key .= '_vorzug';
  1262.         }
  1263.         if ($this->online) {
  1264.             return self::$preise_online[$zeitschrift_key][$this->typ];
  1265.         } else {
  1266.             return self::$preise_druck[$zeitschrift_key][$this->typ];
  1267.         }
  1268.     }
  1269.     /**
  1270.      * return float
  1271.      */
  1272.     public function getPreisValue()
  1273.     {
  1274.         $zeitschrift_key $this->getZeitschrift();
  1275.         if ($this->getOnline()) {
  1276.             return self::$preise_online_value[$zeitschrift_key][$this->getTyp()];
  1277.         } else {
  1278.             return self::$preise_druck_value[$zeitschrift_key][$this->getTyp()];
  1279.         }
  1280.     }
  1281.     /**
  1282.      * return float
  1283.      */
  1284.     public function getPreisValueVorzug()
  1285.     {
  1286.         $zeitschrift_key $this->getZeitschrift() . '_vorzug';
  1287.         if ($this->getOnline()) {
  1288.             return self::$preise_online_value[$zeitschrift_key][$this->getTyp()];
  1289.         } else {
  1290.             return self::$preise_druck_value[$zeitschrift_key][$this->getTyp()];
  1291.         }
  1292.     }
  1293.     /**
  1294.      * Dauer des Abos in Monaten
  1295.      *
  1296.      * @return integer
  1297.      */
  1298.     public function getDauer()
  1299.     {
  1300.         return self::$dauer[$this->getTyp()];
  1301.     }
  1302.     /**
  1303.      *
  1304.      * @return bool
  1305.      */
  1306.     public function isAutoRenew()
  1307.     {
  1308.         return self::$auto_renew[$this->getTyp()];
  1309.     }
  1310.     /**
  1311.      * Set kunde
  1312.      *
  1313.      * @param \JF\JuridicusBundle\Entity\Kunde $kunde
  1314.      * @return Abo
  1315.      */
  1316.     public function setKunde(Kunde $kunde null)
  1317.     {
  1318.         $this->kunde $kunde;
  1319.         return $this;
  1320.     }
  1321.     /**
  1322.      * Get kunde
  1323.      *
  1324.      * @return \JF\JuridicusBundle\Entity\Kunde
  1325.      */
  1326.     public function getKunde()
  1327.     {
  1328.         return $this->kunde;
  1329.     }
  1330.     /**
  1331.      * Set gutschein
  1332.      *
  1333.      * @param \JF\JuridicusBundle\Entity\Gutschein $gutschein
  1334.      * @return Abo
  1335.      */
  1336.     public function setGutschein(Gutschein $gutschein null)
  1337.     {
  1338.         $this->gutschein $gutschein;
  1339.         return $this;
  1340.     }
  1341.     /**
  1342.      * Get gutschein
  1343.      *
  1344.      * @return \JF\JuridicusBundle\Entity\Gutschein
  1345.      */
  1346.     public function getGutschein()
  1347.     {
  1348.         return $this->gutschein;
  1349.     }
  1350.     /**
  1351.      * Add email
  1352.      *
  1353.      * @param \JF\JuridicusBundle\Entity\Email $email
  1354.      * @return Abo
  1355.      */
  1356.     public function addEmail(Email $email)
  1357.     {
  1358.         $this->emails[] = $email;
  1359.         return $this;
  1360.     }
  1361.     /**
  1362.      * Remove emails
  1363.      *
  1364.      * @param \JF\JuridicusBundle\Entity\Email $emails
  1365.      */
  1366.     public function removeEmail(Email $email)
  1367.     {
  1368.         $this->emails->removeElement($email);
  1369.     }
  1370.     /**
  1371.      * Get emails
  1372.      *
  1373.      * @return \Doctrine\Common\Collections\Collection
  1374.      */
  1375.     public function getEmails()
  1376.     {
  1377.         return $this->emails;
  1378.     }
  1379.     /**
  1380.      * Set zahlung_vierteljaehrlich
  1381.      *
  1382.      * @param boolean $zahlungVierteljaehrlich
  1383.      * @return Abo
  1384.      */
  1385.     public function setZahlungVierteljaehrlich($zahlungVierteljaehrlich true)
  1386.     {
  1387.         $this->zahlung_vierteljaehrlich = (bool) $zahlungVierteljaehrlich;
  1388.         return $this;
  1389.     }
  1390.     /**
  1391.      * Get zahlung_vierteljaehrlich
  1392.      *
  1393.      * @return boolean
  1394.      */
  1395.     public function getZahlungVierteljaehrlich()
  1396.     {
  1397.         return $this->zahlung_vierteljaehrlich;
  1398.     }
  1399.     /**
  1400.      * Set abonummer
  1401.      *
  1402.      * @param string $abonummer
  1403.      * @return Abo
  1404.      */
  1405.     public function setAbonummer($abonummer)
  1406.     {
  1407.         $this->abonummer $abonummer;
  1408.         return $this;
  1409.     }
  1410.     /**
  1411.      * Get kundennummer
  1412.      *
  1413.      * @return string
  1414.      */
  1415.     public function getAbonummer()
  1416.     {
  1417.         return $this->abonummer;
  1418.     }
  1419.     /**
  1420.      * Set titel
  1421.      *
  1422.      * @param string $titel
  1423.      * @return Abo
  1424.      */
  1425.     public function setTitel($titel)
  1426.     {
  1427.         $this->titel $titel;
  1428.         return $this;
  1429.     }
  1430.     /**
  1431.      * Get titel
  1432.      *
  1433.      * @return string
  1434.      */
  1435.     public function getTitel()
  1436.     {
  1437.         return $this->titel;
  1438.     }
  1439.     /**
  1440.      * Set firma
  1441.      *
  1442.      * @param string $firma
  1443.      * @return Abo
  1444.      */
  1445.     public function setFirma($firma)
  1446.     {
  1447.         $this->firma $firma;
  1448.         return $this;
  1449.     }
  1450.     /**
  1451.      * Get firma
  1452.      *
  1453.      * @return string
  1454.      */
  1455.     public function getFirma()
  1456.     {
  1457.         return $this->firma;
  1458.     }
  1459.     /**
  1460.      * @return string
  1461.      */
  1462.     public function getAnredeVoll()
  1463.     {
  1464.         if ($this->anrede && Juridicus::startsWith($this->anrede'Herr')) {
  1465.             return sprintf('Sehr geehrter %s'Juridicus::concat_ws(' '$this->anrede$this->titel$this->vorname$this->nachname));
  1466.         } elseif ($this->anrede && Juridicus::startsWith($this->anrede'Frau')) {
  1467.             return sprintf('Sehr geehrte %s'Juridicus::concat_ws(' '$this->anrede$this->titel$this->vorname$this->nachname));
  1468.         } elseif ($this->vorname && $this->nachname) {
  1469.             return sprintf('Sehr geehrte/r %s'Juridicus::concat_ws(' '$this->titel$this->vorname$this->nachname));
  1470.         } else {
  1471.             return 'Sehr geehrte Damen und Herren';
  1472.         }
  1473.     }
  1474.     /**
  1475.      * @return string
  1476.      */
  1477.     public function getAdresse()
  1478.     {
  1479.         $zeile1 $this->getFirma();
  1480.         $zeile2 $this->getAnrede();
  1481.         $zeile3 $this->getName();
  1482.         $zeile4 $this->getStrasseUndHausnummer();
  1483.         $zeile5 $this->getPlzUndOrt();
  1484.         return Juridicus::concat_ws("\n"$zeile1$zeile2$zeile3$zeile4$zeile5);
  1485.     }
  1486.     /**
  1487.      * Set anrede
  1488.      *
  1489.      * @param string $anrede
  1490.      * @return Abo
  1491.      */
  1492.     public function setAnrede($anrede)
  1493.     {
  1494.         $this->anrede $anrede;
  1495.         return $this;
  1496.     }
  1497.     /**
  1498.      * Get anrede
  1499.      *
  1500.      * @return string
  1501.      */
  1502.     public function getAnrede()
  1503.     {
  1504.         return $this->anrede;
  1505.     }
  1506.     /**
  1507.      * Set strasse_voll
  1508.      *
  1509.      * @param string $strasseVoll
  1510.      * @return Abo
  1511.      */
  1512.     public function setStrasseVoll($strasseVoll)
  1513.     {
  1514.         $this->strasse_voll $strasseVoll;
  1515.         return $this;
  1516.     }
  1517.     /**
  1518.      * Get strasse_voll
  1519.      *
  1520.      * @return string
  1521.      */
  1522.     public function getStrasseVoll()
  1523.     {
  1524.         return $this->strasse_voll;
  1525.     }
  1526.     /**
  1527.      *
  1528.      * @param \DateTime $datum
  1529.      * @return boolean
  1530.      */
  1531.     public function contains(\DateTime $datum)
  1532.     {
  1533.         if (! ($this->datum_ende && $this->datum_start)) {
  1534.             return true;
  1535.         }
  1536.         return ($this->datum_start <= $datum) && ($datum <= $this->datum_ende);
  1537.     }
  1538.     /**
  1539.      * Ende des Abos an Hand des Typs berechnen
  1540.      *
  1541.      * @return \DateTime
  1542.      */
  1543.     public function calculateDatumEnde()
  1544.     {
  1545.         if (!$this->datum_start || $this->typ === Abo::ABO_FULL) {
  1546.             $this->datum_ende null;
  1547.         } else {
  1548.             $this->datum_ende = clone $this->datum_start;
  1549.             $this->datum_ende->modify(sprintf('+ %d month -1 day'$this->getDauer()));
  1550.         }
  1551.         return $this->datum_ende;
  1552.     }
  1553.     /**
  1554.      *
  1555.      * @param \DateTime $monat
  1556.      * @return AboZeitraum|null
  1557.      */
  1558.     public function findZeitraum(\DateTime $monat)
  1559.     {
  1560.         foreach ($this->getAboZeitraum() as $zeitraum) {
  1561.             /* @var $zeitraum AboZeitraum */
  1562.             if ($zeitraum->contains($monat)) {
  1563.                 return $zeitraum;
  1564.             }
  1565.         }
  1566.         return null;
  1567.     }
  1568. }