mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-11-15 20:47:15 +01:00
152 lines
5.1 KiB
PHP
152 lines
5.1 KiB
PHP
<?php
|
|
|
|
namespace Xentral\Modules\Api\Controller\Version1;
|
|
|
|
use Xentral\Components\Http\Response;
|
|
use Xentral\Modules\Api\Exception\BadRequestException;
|
|
use Xentral\Modules\Api\Exception\ValidationErrorException;
|
|
|
|
/**
|
|
* Controller zum Anlegen und Bearbeiten von Abo-Artikeln
|
|
*
|
|
* Die Auflistung der Aboartikel-Ressource wird über den GenericController behandelt.
|
|
*/
|
|
class ArticleSubscriptionController extends AbstractController
|
|
{
|
|
/**
|
|
* Abo-Artikel anlegen
|
|
*
|
|
* @return Response
|
|
*/
|
|
public function createAction()
|
|
{
|
|
$input = $this->getRequestData();
|
|
$errors = [];
|
|
|
|
// Pflichtparameter prüfen
|
|
if (empty($input['bezeichnung'])) {
|
|
$errors[] = 'Required field "bezeichnung" is empty.';
|
|
}
|
|
if (empty($input['artikelnummer']) && empty($input['artikel'])) {
|
|
$errors[] = 'Required fields "artikelnummer" and "artikel" are empty. One of them must be filled.';
|
|
}
|
|
// Artikelnummer in ID wandeln
|
|
if (!empty($input['artikelnummer'])) {
|
|
$input['artikel'] = (int)$this->db->fetchValue(
|
|
'SELECT a.id FROM artikel AS a WHERE a.nummer = :artikelnummer',
|
|
['artikelnummer' => $input['artikelnummer']]
|
|
);
|
|
// Artikelnummer existiert nicht
|
|
if ($input['artikel'] === 0) {
|
|
$errors[] = 'Artikel not found with article number: ' . $input['artikelnummer'];
|
|
}
|
|
unset($input['artikelnummer']);
|
|
}
|
|
// Kundennummer in Adressen-ID wandeln
|
|
if (!empty($input['kundennummer'])) {
|
|
$input['adresse'] = (int)$this->db->fetchValue(
|
|
'SELECT a.id FROM adresse AS a WHERE a.kundennummer = :kundennummer',
|
|
['kundennummer' => $input['kundennummer']]
|
|
);
|
|
// Kundennummer existiert nicht
|
|
if ($input['adresse'] === 0) {
|
|
$errors[] = 'Address not found with customer number: ' . $input['kundennummer'];
|
|
}
|
|
unset($input['kundennummer']);
|
|
}
|
|
|
|
// Nach Pflichtfeld-Prüfung vorab Fehler anzeigen
|
|
if (count($errors) > 0) {
|
|
throw new ValidationErrorException($errors);
|
|
}
|
|
|
|
// Default-Werte hinterlegen
|
|
if (!array_key_exists('startdatum', $input)) {
|
|
$input['startdatum'] = date('Y-m-d');
|
|
}
|
|
if (!array_key_exists('zahlzyklus', $input)) {
|
|
$input['zahlzyklus'] = 1;
|
|
}
|
|
if (!array_key_exists('dokumenttyp', $input)) {
|
|
$input['dokumenttyp'] = 'rechnung';
|
|
}
|
|
if (!array_key_exists('preisart', $input)) {
|
|
$input['preisart'] = 'monat';
|
|
}
|
|
if (!array_key_exists('menge', $input)) {
|
|
$input['menge'] = '0.00';
|
|
}
|
|
if (!array_key_exists('preis', $input)) {
|
|
$input['preis'] = '0.00';
|
|
}
|
|
if (!array_key_exists('rabatt', $input)) {
|
|
$input['rabatt'] = '0.00';
|
|
}
|
|
if (!array_key_exists('waehrung', $input)) {
|
|
$input['waehrung'] = 'EUR';
|
|
}
|
|
if (!array_key_exists('reihenfolge', $input)) {
|
|
$input['reihenfolge'] = 1;
|
|
}
|
|
|
|
// Aboartikel-Eintrag anlegen
|
|
$resource = $this->getResource($this->resourceClass);
|
|
$result = $resource->insert($input);
|
|
|
|
return $this->sendResult($result, Response::HTTP_CREATED);
|
|
}
|
|
|
|
/**
|
|
* Abo-Artikel bearbeiten
|
|
*
|
|
* @return Response
|
|
*/
|
|
public function updateAction()
|
|
{
|
|
$resource = $this->getResource($this->resourceClass);
|
|
|
|
$id = $this->getResourceId();
|
|
$resource->checkOrFail($id);
|
|
|
|
$errors = [];
|
|
$input = $this->getRequestData();
|
|
|
|
// Artikelnummer in ID wandeln
|
|
if (!empty($input['artikelnummer'])) {
|
|
$input['artikel'] = (int)$this->db->fetchValue(
|
|
'SELECT a.id FROM artikel AS a WHERE a.nummer = :artikelnummer',
|
|
['artikelnummer' => $input['artikelnummer']]
|
|
);
|
|
// Artikelnummer existiert nicht
|
|
if ($input['artikel'] === 0) {
|
|
$errors[] = 'Artikel not found with article number: ' . $input['artikelnummer'];
|
|
}
|
|
unset($input['artikelnummer']);
|
|
}
|
|
// Kundennummer in Adressen-ID wandeln
|
|
if (!empty($input['kundennummer'])) {
|
|
$input['adresse'] = (int)$this->db->fetchValue(
|
|
'SELECT a.id FROM adresse AS a WHERE a.kundennummer = :kundennummer',
|
|
['kundennummer' => $input['kundennummer']]
|
|
);
|
|
// Kundennummer existiert nicht
|
|
if ($input['adresse'] === 0) {
|
|
$errors[] = 'Address not found with customer number: ' . $input['kundennummer'];
|
|
}
|
|
unset($input['kundennummer']);
|
|
}
|
|
|
|
// Nach Pflichtfeld-Prüfung vorab Fehler anzeigen
|
|
if (count($errors) > 0) {
|
|
throw new ValidationErrorException($errors);
|
|
}
|
|
if (empty($input)) {
|
|
throw new BadRequestException('Payload is empty.');
|
|
}
|
|
|
|
$result = $resource->edit($id, $input);
|
|
|
|
return $this->sendResult($result);
|
|
}
|
|
}
|