Skip to content
Open
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/.idea
/composer.lock
/node_modules/
/vendor/
/vendor/
/.phpunit.result.cache
52 changes: 51 additions & 1 deletion src/Connector/V2/BoekingConnector.php
Original file line number Diff line number Diff line change
Expand Up @@ -160,4 +160,54 @@ public function addVerkoopboekingDocument(Model\Verkoopboeking $verkoopboeking,

return $documentMapper->add($this->connection->doRequest($documentRequest->addVerkoopBoekingDocument($document, $verkoopboeking)));
}
}

public function findKasboeking(UuidInterface $uuid): ?Model\Kasboeking
{
$boekingRequest = new Request\BoekingRequest();
$boekingMapper = new Mapper\BoekingMapper();

try {
return $boekingMapper->mapKasboeking($this->connection->doRequest($boekingRequest->findKasboeking($uuid)));
} catch (SnelstartResourceNotFoundException $e) {
return null;
}
}
public function addKasboeking(Model\Kasboeking $kasboeking): Model\Kasboeking
{
if ($kasboeking->getId() !== null) {
throw PreValidationException::unexpectedIdException();
}

$kasboeking->assertInBalance();

$boekingMapper = new Mapper\BoekingMapper();
$boekingRequest = new Request\BoekingRequest();

return $boekingMapper->mapKasboeking($this->connection->doRequest($boekingRequest->addKasboeking($kasboeking)));
}

public function updateKasboeking(Model\Kasboeking $kasboeking): Model\Kasboeking
{
if ($kasboeking->getId() === null) {
throw PreValidationException::shouldHaveAnIdException();
}

$kasboeking->assertInBalance();

$boekingMapper = new Mapper\BoekingMapper();
$boekingRequest = new Request\BoekingRequest();

return $boekingMapper->mapKasboeking($this->connection->doRequest($boekingRequest->updateKasboeking($kasboeking)));
}

public function deleteKasboeking(Model\Kasboeking $kasboeking): void
{
if ($kasboeking->getId() === null) {
throw PreValidationException::shouldHaveAnIdException();
}

$boekingRequest = new Request\BoekingRequest();

$this->connection->doRequest($boekingRequest->deleteKasboeking($kasboeking));
}
}
24 changes: 24 additions & 0 deletions src/Connector/V2/DagboekConnector.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

namespace SnelstartPHP\Connector\V2;

use SnelstartPHP\Connector\BaseConnector;
use SnelstartPHP\Mapper\V2\DagboekenMapper;
use SnelstartPHP\Model\V2\Dagboek;
use SnelstartPHP\Request\V2\DagboekenRequest;

final class DagboekConnector extends BaseConnector
{
/**
* @return Dagboek[]|\Generator
*/
public function findAll(): \Generator
{
$request = new DagboekenRequest();
$mapper = new DagboekenMapper();

$response = $this->connection->doRequest($request->findAll());

return $mapper->findAll($response);
}
}
81 changes: 76 additions & 5 deletions src/Mapper/V2/BoekingMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,12 @@ public function addVerkoopboeking(ResponseInterface $response): Model\Verkoopboe
return $this->mapVerkoopboekingResult(new Model\Verkoopboeking());
}

public function mapKasboeking(ResponseInterface $response): Model\Kasboeking
{
$this->setResponseData($response);
return $this->mapKasboekingResult(new Model\Kasboeking());
}

protected function mapDocumentResult(array $data = []): Model\Document
{
$data = empty($data) ? $this->responseData : $data;
Expand All @@ -73,14 +79,52 @@ protected function mapInkoopboekingResult(Model\Inkoopboeking $inkoopboeking, ar
/**
* @var Model\Inkoopboeking $inkoopboeking
*/
$inkoopboeking = $this->mapBoekingResult($inkoopboeking, $data);
$inkoopboeking = $this->mapKoopboekingResult($inkoopboeking, $data);

if (isset($data["leverancier"])) {
$inkoopboeking->setLeverancier(Model\Relatie::createFromUUID(Uuid::fromString($data["leverancier"]["id"])));
}

return $inkoopboeking;
}
protected function mapKasboekingResult(Model\Kasboeking $kasboeking, array $data = []): Model\Kasboeking
{
$data = empty($data) ? $this->responseData : $data;

$kasboeking = $this->mapArrayDataToModel($kasboeking, $data);

if (isset($data["modifiedOn"])) {
$kasboeking->setModifiedOn(new \DateTimeImmutable($data["modifiedOn"]));
}

if (isset($data["datum"])) {
$kasboeking->setDatum(new \DateTimeImmutable($data["datum"]));
}

if (isset($data["grootboekBoekingsRegels"])) {
$kasboeking->setGrootboekBoekingsRegels(...$this->mapKasboeakingregels($data["grootboekBoekingsRegels"]));
}

if (isset($data["inkoopboekingBoekingsRegels"])) {
$kasboeking->setInkoopboekingBoekingsRegels(...$this->mapKasboeakingregels($data["inkoopboekingBoekingsRegels"]));
}

if (isset($data["verkoopboekingBoekingsRegels"])) {
$kasboeking->setVerkoopboekingBoekingsRegels(...$this->mapKasboeakingregels($data["verkoopboekingBoekingsRegels"]));
}

if (isset($data["btwBoekingsregels"])) {
$kasboeking->setBtwBoekingsregels(...array_map(function(array $btw): Model\BtwBoekingsregel {
return (new Model\BtwBoekingsregel())
->setType(new Type\BtwBoekingsregelType($btw["type"]))
->setTarief(new Type\BtwSoort($btw["tarief"]))
->setCredit($this->getMoney($btw['credit']))
->setDebet($this->getMoney($btw['debet']));
}, $data["btwBoekingsregels"]));
}

return $kasboeking;
}

protected function mapVerkoopboekingResult(Model\Verkoopboeking $verkoopboeking, array $data = []): Model\Verkoopboeking
{
Expand All @@ -89,7 +133,7 @@ protected function mapVerkoopboekingResult(Model\Verkoopboeking $verkoopboeking,
/**
* @var Model\Verkoopboeking $verkoopboeking
*/
$verkoopboeking = $this->mapBoekingResult($verkoopboeking, $data);
$verkoopboeking = $this->mapKoopboekingResult($verkoopboeking, $data);

if (isset($data["klant"])) {
$verkoopboeking->setKlant(Model\Relatie::createFromUUID(Uuid::fromString($data["klant"]["id"])));
Expand Down Expand Up @@ -120,12 +164,12 @@ protected function mapVerkoopboekingResult(Model\Verkoopboeking $verkoopboeking,
return $verkoopboeking;
}

protected function mapBoekingResult(Model\Boeking $boeking, array $data = []): Model\Boeking
protected function mapKoopboekingResult(Model\Koopboeking $boeking, array $data = []): Model\Koopboeking
{
$data = empty($data) ? $this->responseData : $data;

/**
* @var Model\Boeking $boeking
* @var Model\Koopboeking $boeking
*/
$boeking = $this->mapArrayDataToModel($boeking, $data);

Expand Down Expand Up @@ -193,7 +237,34 @@ public function mapManyResultsToSubMappers(string $className): \Generator
yield $this->mapInkoopboekingResult(new $className, $boekingData);
} else if ($className === Model\Verkoopboeking::class) {
yield $this->mapVerkoopboekingResult(new $className, $boekingData);
} else if ($className === Model\Kasboeking::class) {
yield $this->mapKasboekingResult(new $className, $boekingData);
}
}
}
}

protected function mapKasboeakingregels(array $boekingsregels): array
{
return array_map(function (array $boekingsregel): Model\KasBoekingsregel {
$boekingsregelObject = (new Model\KasBoekingsregel())
->setOmschrijving($boekingsregel["omschrijving"])
->setCredit($this->getMoney($boekingsregel["credit"]))
->setDebet($this->getMoney($boekingsregel["debet"]));

if (isset($boekingsregel["grootboek"])) {
$boekingsregelObject
->setGrootboek(
Model\Grootboek::createFromUUID(Uuid::fromString($boekingsregel["grootboek"]["id"]))
);
}

if (isset($boekingsregel["kostenplaats"])) {
$boekingsregelObject->setKostenplaats(
Kostenplaats::createFromUUID(Uuid::fromString($boekingsregel["kostenplaats"]["id"]))
);
}

return $boekingsregelObject;
}, $boekingsregels);
}
}
33 changes: 33 additions & 0 deletions src/Mapper/V2/DagboekenMapper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

namespace SnelstartPHP\Mapper\V2;

use Psr\Http\Message\ResponseInterface;
use Ramsey\Uuid\Uuid;
use SnelstartPHP\Mapper\AbstractMapper;
use SnelstartPHP\Model\V2 as Model;
use SnelstartPHP\Model\Type;

final class DagboekenMapper extends AbstractMapper
{
public function findAll(ResponseInterface $response): \Generator
{
$this->setResponseData($response);

foreach ($this->responseData as $data) {
yield $this->mapResultToModel($data);
}
}

protected function mapResultToModel($data): Model\Dagboek
{
return (new Model\Dagboek())
->setId(Uuid::fromString($data["id"]))
->setUri($data['uri'])
->setSoort(new Type\DagboekSoort($data["soort"]))
->setNummer($data['nummer'])
->setOmschrijving($data["omschrijving"])
->setNonactief($data["nonactief"])
;
}
}
16 changes: 16 additions & 0 deletions src/Model/Type/BtwBoekingsregelType.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?php

namespace SnelstartPHP\Model\Type;

use MyCLabs\Enum\Enum;
/**
* @psalm-immutable
*
* @method static BtwBoekingsregelType TEVORDERENBTWTYPE()
* @method static BtwBoekingsregelType AFTEDRAGENBTWTYPE()
*/
final class BtwBoekingsregelType extends Enum
{
private const TEVORDERENBTWTYPE = 'TeVorderenBtwType';
private const AFTEDRAGENBTWTYPE = 'AfTeDragenBtwType';
}
26 changes: 26 additions & 0 deletions src/Model/Type/DagboekSoort.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace SnelstartPHP\Model\Type;

use MyCLabs\Enum\Enum;
/**
* @psalm-immutable
*
* @method static DagboekSoort GEEN()
* @method static DagboekSoort KAS()
* @method static DagboekSoort BANK()
* @method static DagboekSoort VERKOOP()
* @method static DagboekSoort INKOOP()
* @method static DagboekSoort BALANS()
* @method static DagboekSoort MEMORIAAL()
*/
class DagboekSoort extends Enum
{
private const GEEN = 'Geen';
private const KAS = 'Kas';
private const BANK = 'Bank';
private const VERKOOP = 'Verkoop';
private const INKOOP = 'Inkoop';
private const MEMORIAAL = 'Memoriaal';
private const BALANS = 'Balans';
}
Loading