Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix for Verkoopboeking assertInBalance #19

Open
wants to merge 25 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
0abb85f
Added Kasboeking WIP
ikulis Sep 7, 2021
f22fafe
Added Kasboeking->assertInBalance
ikulis Sep 7, 2021
c87d8ad
Added Missing DagboekSoort:Geen
ikulis Sep 9, 2021
53a4dfe
Added Missing BtwBoekingsregel::$editableAttributes
ikulis Sep 9, 2021
8a7dfac
Added Missing BtwBoekingsregel::$editableAttributes
ikulis Sep 9, 2021
76952d3
Corrected required fields
ikulis Sep 10, 2021
08b0ef7
Seems SnelStart does not like null on debet and credit fields
ikulis Sep 10, 2021
9e0861c
Fixed assertInBalance
ikulis Sep 10, 2021
d7d8f0b
Added updateKaskoopboeking and deleteKaskoopboeking
ikulis Sep 10, 2021
ba9bd94
Fixed exceptions on updateKaskoopboeking and deleteKaskoopboeking
ikulis Sep 10, 2021
a1c5414
Cleaning names add findKasboeking
ikulis Sep 12, 2021
1a5b971
Fixed kasboeking delete
ikulis Sep 12, 2021
1e4c29c
cleanup
ikulis Sep 12, 2021
9e8fd13
Merge branch 'add-kasboeking'
Nov 15, 2021
9e6ab8d
Find verkoopfactuur instead of verkoopboeking
Nov 15, 2021
50fea57
Find verkoopfactuur instead of verkoopboeking
Nov 15, 2021
2119add
Fix for add kasboekingen
Nov 16, 2021
b5e161e
Fix koopboeking assertInBalance
Nov 25, 2021
f7d1b0c
Fix for map verkoopBoeking in verkoopFactuur request
arwinvdv Jan 28, 2022
343895d
Fix getMoney
arwinvdv Feb 1, 2022
d3860cb
Merge remote-tracking branch 'iwd-nl/master'
arwinvdv Aug 17, 2022
174abe4
Fix merge
arwinvdv Aug 18, 2022
ad516a1
Merge fix
arwinvdv Aug 18, 2022
962b836
Merge fix
arwinvdv Aug 18, 2022
96492b9
Merge branch 'upstream/master'
Jun 28, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
}
],
"require": {
"php": ">=7.2",
"php": ">=7.4",
"ext-json": "*",
"ext-mbstring": "*",
"guzzlehttp/guzzle": "^6.4|^7.0",
Expand Down
52 changes: 51 additions & 1 deletion src/Connector/V2/BoekingConnector.php
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ public function findVerkoopboeking(UuidInterface $uuid): ?Model\Verkoopboeking
}

/**
* @return iterable<Model\Verkoopfactuur>
* @return Model\Verkoopboeking[]|iterable
*/
public function findVerkoopfacturen(?ODataRequestDataInterface $ODataRequestData = null, bool $fetchAll = false, iterable $previousResults = null): iterable
{
Expand Down Expand Up @@ -170,4 +170,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);
}
}
8 changes: 6 additions & 2 deletions src/Mapper/AbstractMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,11 @@ protected function mapArrayDataToModel(SnelstartObject $class, array $data = [])
return $class;
}

protected function getMoney(string $money): Money
/**
* @param float|string $money (don't change to string, it will remove cents)
* @return Money
*/
protected function getMoney($money): Money
{
return new Money(intval(floatval($money) * 100), Snelstart::getCurrency());
}
Expand Down Expand Up @@ -105,4 +109,4 @@ protected static function fromResponse(ResponseInterface $response): self
{
return (new static())->setResponseData($response);
}
}
}
173 changes: 129 additions & 44 deletions src/Mapper/V2/BoekingMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,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 @@ -92,7 +98,7 @@ 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"])));
Expand All @@ -101,14 +107,83 @@ protected function mapInkoopboekingResult(Model\Inkoopboeking $inkoopboeking, ar
return $inkoopboeking;
}

protected function mapInkoopfactuurResult(Model\Inkoopfactuur $inkoopfactuur, array $data = []): Model\Inkoopfactuur
{
$data = empty($data) ? $this->responseData : $data;

// This maps "id", "uri", "modifiedOn" and "factuurnummer".
$inkoopfactuur = $this->mapArrayDataToModel($inkoopfactuur, $data);

if (isset($data['relatie'])) {
$inkoopfactuur->setRelatie(Model\Relatie::createFromUUID(Uuid::fromString($data['relatie']['id'])));
}
if (isset($data['inkoopBoeking'])) {
$inkoopfactuur->setInkoopboeking(Model\Inkoopboeking::createFromUUID(Uuid::fromString($data['inkoopBoeking']['id'])));
}

if (isset($data['factuurDatum'])) {
$inkoopfactuur->setFactuurDatum(new DateTimeImmutable($data['factuurDatum']));
}
if (isset($data['factuurBedrag'])) {
$inkoopfactuur->setFactuurBedrag($this->getMoney($data['factuurBedrag']));
}
if (isset($data['openstaandSaldo'])) {
$inkoopfactuur->setOpenstaandSaldo($this->getMoney($data['openstaandSaldo']));
}
if (isset($data['vervalDatum'])) {
$inkoopfactuur->setVervalDatum(new DateTimeImmutable($data['vervalDatum']));
}

return $inkoopfactuur;
}

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->mapKasboekingregels($data["grootboekBoekingsRegels"]));
}

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

if (isset($data["verkoopboekingBoekingsRegels"])) {
$kasboeking->setVerkoopboekingBoekingsRegels(...$this->mapKasboekingregels($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
{
$data = empty($data) ? $this->responseData : $data;

/**
* @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 @@ -139,72 +214,55 @@ protected function mapVerkoopboekingResult(Model\Verkoopboeking $verkoopboeking,
return $verkoopboeking;
}

protected function mapVerkoopfactuurResult(Model\Verkoopfactuur $verkoopfactuur, array $data = []): Model\Verkoopfactuur
{
$data = empty($data) ? $this->responseData : $data;
/**
* @param Model\Verkoopfactuur $verkoopfactuur
* @param array $data
*
* @return Model\Verkoopfactuur
* @throws \Exception
*/
protected function mapVerkoopfactuurResult(Model\Verkoopfactuur $verkoopfactuur, array $data = []): Model\Verkoopfactuur
{
$data = empty($data) ? $this->responseData : $data;

// This maps "id", "uri", "modifiedOn" and "factuurnummer".
$verkoopfactuur = $this->mapArrayDataToModel($verkoopfactuur, $data);
/**
* @var Model\Verkoopfactuur $verkoopfactuur
*/
$verkoopfactuur = $this->mapArrayDataToModel($verkoopfactuur, $data); // This maps "id", "uri", "modifiedOn" and "factuurnummer".

if (isset($data['relatie'])) {
$verkoopfactuur->setRelatie(Model\Relatie::createFromUUID(Uuid::fromString($data['relatie']['id'])));
}
if (isset($data['verkoopBoeking'])) {
$verkoopfactuur->setVerkoopBoeking(Model\Verkoopboeking::createFromUUID(Uuid::fromString($data['verkoopBoeking']['id'])));

if (isset($data["verkoopBoeking"])) {
$verkoopfactuur->setVerkoopBoeking(Model\Verkoopboeking::createFromUUID(Uuid::fromString($data["verkoopBoeking"]["id"])));
}

if (isset($data['factuurDatum'])) {
$verkoopfactuur->setFactuurDatum(new DateTimeImmutable($data['factuurDatum']));
}

if (isset($data['factuurBedrag'])) {
$verkoopfactuur->setFactuurBedrag($this->getMoney($data['factuurBedrag']));
}

if (isset($data['openstaandSaldo'])) {
$verkoopfactuur->setOpenstaandSaldo($this->getMoney($data['openstaandSaldo']));
}

if (isset($data['vervalDatum'])) {
$verkoopfactuur->setVervalDatum(new DateTimeImmutable($data['vervalDatum']));
}

return $verkoopfactuur;
}

protected function mapInkoopfactuurResult(Model\Inkoopfactuur $inkoopfactuur, array $data = []): Model\Inkoopfactuur
{
$data = empty($data) ? $this->responseData : $data;

// This maps "id", "uri", "modifiedOn" and "factuurnummer".
$inkoopfactuur = $this->mapArrayDataToModel($inkoopfactuur, $data);

if (isset($data['relatie'])) {
$inkoopfactuur->setRelatie(Model\Relatie::createFromUUID(Uuid::fromString($data['relatie']['id'])));
}
if (isset($data['inkoopBoeking'])) {
$inkoopfactuur->setInkoopboeking(Model\Inkoopboeking::createFromUUID(Uuid::fromString($data['inkoopBoeking']['id'])));
}

if (isset($data['factuurDatum'])) {
$inkoopfactuur->setFactuurDatum(new DateTimeImmutable($data['factuurDatum']));
}
if (isset($data['factuurBedrag'])) {
$inkoopfactuur->setFactuurBedrag($this->getMoney($data['factuurBedrag']));
}
if (isset($data['openstaandSaldo'])) {
$inkoopfactuur->setOpenstaandSaldo($this->getMoney($data['openstaandSaldo']));
}
if (isset($data['vervalDatum'])) {
$inkoopfactuur->setVervalDatum(new DateTimeImmutable($data['vervalDatum']));
}

return $inkoopfactuur;
}

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

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

Expand Down Expand Up @@ -273,13 +331,40 @@ public function mapManyResultsToSubMappers(string $className): \Generator
foreach ($this->responseData as $boekingData) {
if ($className === Model\Inkoopboeking::class) {
yield $this->mapInkoopboekingResult(new $className, $boekingData);
} else if ($className === Model\Verkoopboeking::class) {
yield $this->mapVerkoopboekingResult(new $className, $boekingData);
} else if ($className === Model\Verkoopfactuur::class) {
yield $this->mapVerkoopfactuurResult(new $className, $boekingData);
yield $this->mapVerkoopfactuurResult(new $className, $boekingData);
} else if ($className === Model\Verkoopboeking::class) {
yield $this->mapVerkoopboekingResult(new $className, $boekingData);
} else if ($className === Model\Inkoopfactuur::class) {
yield $this->mapInkoopfactuurResult(new $className, $boekingData);
} else if ($className === Model\Kasboeking::class) {
yield $this->mapKasboekingResult(new $className, $boekingData);
}
}
}

protected function mapKasboekingregels(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);
}
}
Loading