setName($name); $this->setType($type); $this->id = $id; $this->module = $module; $this->name = $name; $this->type = $type; $this->active = $active; $this->projectId = $projectId; $this->paymentBehavior = $paymentBehavior; $this->autoPayed = $autoPayed; $this->autoPayedLiability = $autoPayedLiability; $this->text = $text; $this->settings = $settings; $this->deleted = $deleted; } /** * @param array $array * * @throws InvalidArgumentException * * @return PaymentMethodData */ public static function fromDbState(array $array): self { $requiredProperties = [ 'id', 'type', 'bezeichnung', 'verhalten', 'aktiv', 'projekt', 'automatischbezahlt', 'automatischbezahltverbindlichkeit', 'freitext', 'einstellungen_json', 'geloescht', ]; foreach ($requiredProperties as $propertyName) { if (!isset($array[$propertyName])) { throw new InvalidArgumentException(sprintf("Required property '%s' is missing.", $propertyName)); } } self::ensureBehavior($array['verhalten']); self::ensureNotEmptyString($array['bezeichnung'], 'name'); self::ensureNotEmptyString($array['type'], 'type'); if ((string)$array['einstellungen_json'] !== '') { $settings = json_decode($array['einstellungen_json'], true); if (!is_array($settings) && $settings !== null) { throw new InvalidArgumentException( sprintf('settings \'%s\' is no valid JSON', $array['einstellungen_json']) ); } } else { $settings = null; } $self = new self( (int)$array['id'], (string)$array['modul'], (string)$array['bezeichnung'], (string)$array['type'], (bool)$array['aktiv'], (int)$array['projekt'], (string)$array['verhalten'], (bool)$array['automatischbezahlt'], (bool)$array['automatischbezahltverbindlichkeit'], (string)$array['freitext'], $settings, (bool)$array['geloescht'] ); return $self; } /** * @return array */ public function toArray(): array { return [ 'id' => $this->id, 'bezeichnung' => $this->name, 'type' => $this->type, 'aktiv' => (int)$this->active, 'projekt' => $this->projectId, 'verhalten' => $this->paymentBehavior, 'automatischbezahlt' => (int)$this->autoPayed, 'automatischbezahltverbindlichkeit' => (int)$this->autoPayedLiability, 'freitext' => $this->text, 'einstellungen_json' => (string)json_encode($this->settings), 'geloescht' => (int)$this->deleted, 'modul' => (string)$this->module, ]; } /** * @return int */ public function getId(): int { return $this->id; } /** * @param int $id * * @return void */ public function setId(int $id): void { $this->id = $id; } /** * @return int */ public function getProjectId(): int { return $this->projectId; } /** * @param $projectId * * @return void */ public function setProjectId($projectId): void { $this->projectId = $projectId; } /** * @return string */ public function getModule(): string { return $this->module; } /** * @param string $module * * @return void */ public function setModule(string $module): void { $this->module = $module; } /** * @return string */ public function getName(): string { return $this->name; } /** * @param string $name * * @throws InvalidArgumentException * * @return void */ public function setName(string $name): void { if ($name === '') { throw new InvalidArgumentException('Name is empty'); } $this->name = $name; } /** * @return string */ public function getType(): string { return $this->type; } /** * @param string $type * * @throws InvalidArgumentException * * @return void */ public function setType(string $type): void { if ($type === '') { throw new InvalidArgumentException('Type is empty'); } $this->type = $type; } /** * @return string */ public function getPaymentBehavior(): string { return $this->paymentBehavior; } /** * @param string $paymentBehavior * * @throws InvalidArgumentException * * @return void */ public function setPaymentBehavior(string $paymentBehavior): void { self::ensureBehavior($paymentBehavior); $this->paymentBehavior = $paymentBehavior; } /** * @return bool */ public function isActive(): bool { return $this->active; } /** * @param bool $active * * @return void */ public function setActive(bool $active): void { $this->active = $active; } /** * @return bool */ public function isAutoPayed(): bool { return $this->autoPayed; } /** * @param bool $autoPayed * * @return void */ public function setAutoPayed(bool $autoPayed): void { $this->autoPayed = $autoPayed; } /** * @return bool */ public function isAutoPayedLiability(): bool { return $this->autoPayedLiability; } /** * @param bool $autoPayedLiability * * @return void */ public function setAutoPayedLiability(bool $autoPayedLiability): void { $this->autoPayedLiability = $autoPayedLiability; } /** * @return string */ public function getText(): string { return $this->text; } /** * @param string $text * * @return void */ public function setText(string $text): void { $this->text = $text; } /** * @return array|null */ public function getSettings(): ?array { return $this->settings; } /** * @param array|null $setting * * @return void */ public function setSettings(?array $setting): void { $this->settings = $setting; } /** * @return bool */ public function isDeleted(): bool { return $this->deleted; } /** * @param bool $deleted * * @return void */ public function setDeleted(bool $deleted): void { $this->deleted = $deleted; } /** * @return string[] */ public static function getValidBehaviourOptions(): array { return [ '', 'rechnung', 'vorkasse', 'lastschrift', ]; } /** * @param string $behavior * * @throws InvalidArgumentException * * @return void */ private static function ensureBehavior(string $behavior): void { if (!in_array($behavior, self::getValidBehaviourOptions(), true)) { throw new InvalidArgumentException(sprintf('Invalid Payment Behavior: %s', $behavior)); } } /** * @param string $value * @param string $name * * @throws InvalidArgumentException * * @return void */ private static function ensureNotEmptyString(string $value, string $name): void { if ($value === '') { throw new InvalidArgumentException(sprintf('%s is empty', $name)); } } }