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. }