diff --git a/config/services.php b/config/services.php index d658294..9c2a390 100644 --- a/config/services.php +++ b/config/services.php @@ -8,6 +8,7 @@ use Malio\EdnotifBundle\Bovin\Api\BovinApiInterface; use Malio\EdnotifBundle\Bovin\Mapper\AnimalFileMapper; use Malio\EdnotifBundle\Bovin\Mapper\AnimalSummaryMapper; use Malio\EdnotifBundle\Bovin\Mapper\InventoryMapper; +use Malio\EdnotifBundle\Bovin\Mapper\ReturnedDossiersMapper; use Malio\EdnotifBundle\Shared\Mapper\StandardResponseMapper; use Malio\EdnotifBundle\Shared\Soap\SoapClientFactory; use Malio\EdnotifBundle\Shared\Soap\ZipMessageDecoder; @@ -49,6 +50,13 @@ return static function (ContainerConfigurator $container): void { ]) ; + $services->set(ReturnedDossiersMapper::class) + ->args([ + service(AnimalSummaryMapper::class), + service(StandardResponseMapper::class), + ]) + ; + $services->set(TokenProvider::class) ->args([ service('ednotif.soap.guichet'), @@ -68,6 +76,7 @@ return static function (ContainerConfigurator $container): void { service('ednotif.soap.business'), service(AnimalFileMapper::class), service(InventoryMapper::class), + service(ReturnedDossiersMapper::class), service(ZipMessageDecoder::class), '%ednotif.exploitation_country_code%', '%ednotif.exploitation_number%', diff --git a/src/Bovin/Api/BovinApi.php b/src/Bovin/Api/BovinApi.php index 15aa530..cbb994c 100644 --- a/src/Bovin/Api/BovinApi.php +++ b/src/Bovin/Api/BovinApi.php @@ -8,8 +8,10 @@ use DateTimeInterface; use Malio\EdnotifBundle\Auth\TokenProvider; use Malio\EdnotifBundle\Bovin\Dto\AnimalFileDto; use Malio\EdnotifBundle\Bovin\Dto\InventoryDto; +use Malio\EdnotifBundle\Bovin\Dto\ReturnedDossiersDto; use Malio\EdnotifBundle\Bovin\Mapper\AnimalFileMapper; use Malio\EdnotifBundle\Bovin\Mapper\InventoryMapper; +use Malio\EdnotifBundle\Bovin\Mapper\ReturnedDossiersMapper; use Malio\EdnotifBundle\Shared\Exception\EdnotifException; use Malio\EdnotifBundle\Shared\Soap\ZipMessageDecoder; use RuntimeException; @@ -23,6 +25,7 @@ final readonly class BovinApi implements BovinApiInterface private SoapClient $businessClient, private AnimalFileMapper $bovinDossierMapper, private InventoryMapper $inventoryMapper, + private ReturnedDossiersMapper $returnedDossiersMapper, private ZipMessageDecoder $zipMessageDecoder, private string $exploitationCountryCode, private string $exploitationNumber, @@ -93,6 +96,36 @@ final readonly class BovinApi implements BovinApiInterface return $this->inventoryMapper->map($soapResponse, $unzippedMessage); } + public function getReturnedDossiers(DateTimeInterface $startDate): ReturnedDossiersDto + { + $token = $this->tokenProvider->getToken(); + + $payload = [ + 'JetonAuthentification' => $token, + 'Exploitation' => [ + 'CodePays' => $this->exploitationCountryCode, + 'NumeroExploitation' => $this->exploitationNumber, + ], + 'DateDebut' => $startDate->format('Y-m-d'), + ]; + + try { + /** @var object $soapResponse */ + $soapResponse = $this->businessClient->__soapCall('IpBGetRetourDossiers', [$payload]); + } catch (SoapFault $soapFault) { + throw new RuntimeException('SOAP Fault on IpBGetRetourDossiers: '.$soapFault->getMessage(), 0, $soapFault); + } + + $this->assertSuccessfulResponse($soapResponse, 'IpBGetRetourDossiers'); + + $messageZip = $soapResponse->ReponseSpecifique->MessageZip ?? null; + $unzippedMessage = is_string($messageZip) && '' !== $messageZip + ? $this->zipMessageDecoder->decode($messageZip) + : null; + + return $this->returnedDossiersMapper->map($soapResponse, $unzippedMessage); + } + private function assertSuccessfulResponse(object $soapResponse, string $operation): void { $standardResponseNode = $soapResponse->ReponseStandard ?? null; diff --git a/src/Bovin/Api/BovinApiInterface.php b/src/Bovin/Api/BovinApiInterface.php index 44f50b5..0e7a89c 100644 --- a/src/Bovin/Api/BovinApiInterface.php +++ b/src/Bovin/Api/BovinApiInterface.php @@ -7,6 +7,7 @@ namespace Malio\EdnotifBundle\Bovin\Api; use DateTimeInterface; use Malio\EdnotifBundle\Bovin\Dto\AnimalFileDto; use Malio\EdnotifBundle\Bovin\Dto\InventoryDto; +use Malio\EdnotifBundle\Bovin\Dto\ReturnedDossiersDto; interface BovinApiInterface { @@ -17,4 +18,6 @@ interface BovinApiInterface ?DateTimeInterface $endDate = null, bool $includeEarTagStock = false, ): InventoryDto; + + public function getReturnedDossiers(DateTimeInterface $startDate): ReturnedDossiersDto; }