Symfony bundle to integrate the lexware office (lexoffice) API.
				https://var-lab.com/?_src=github&_repo=lexoffice-bundle
			
		| 
				 
		
			All checks were successful
		
		
	 
	security-check / security_checks (pull_request) Successful in 31s 
				
			Tests / tests (lint:composer, 8.3) (pull_request) Successful in 56s 
				
			Tests / tests (lint:composer, 8.4) (pull_request) Successful in 3m31s 
				
			Tests / tests (lint:composer, 8.2) (pull_request) Successful in 4m19s 
				
			Tests / tests (lint:php, 8.3) (pull_request) Successful in 32s 
				
			Tests / tests (phpstan, 8.2) (pull_request) Successful in 39s 
				
			Tests / tests (lint:php, 8.4) (pull_request) Successful in 56s 
				
			Tests / tests (lint:php, 8.2) (pull_request) Successful in 4m25s 
				
			Tests / tests (phpstan, 8.3) (pull_request) Successful in 34s 
				
			Tests / tests (tests:integration, 8.3) (pull_request) Successful in 30s 
				
			Tests / tests (phpstan, 8.4) (pull_request) Successful in 1m2s 
				
			Tests / tests (tests:integration, 8.2) (pull_request) Successful in 1m17s 
				
			Tests / tests (tests:integration, 8.4) (pull_request) Successful in 30s 
				
			Tests / tests (tests:unit:ci, 8.4) (pull_request) Successful in 37s 
				
			Tests / tests (tests:unit:ci, 8.2) (pull_request) Successful in 1m23s 
				
			Tests / tests (tests:unit:ci, 8.3) (pull_request) Successful in 1m1s 
				
			Tests / tests (lint:composer, 8.4) (push) Successful in 53s 
				
			Tests / tests (lint:composer, 8.3) (push) Successful in 3m32s 
				
			Tests / tests (lint:php, 8.3) (push) Successful in 32s 
				
			Tests / tests (lint:composer, 8.2) (push) Successful in 4m21s 
				
			Tests / tests (lint:php, 8.4) (push) Successful in 30s 
				
			Tests / tests (phpstan, 8.3) (push) Successful in 34s 
				
			Tests / tests (lint:php, 8.2) (push) Successful in 4m18s 
				
			Tests / tests (phpstan, 8.4) (push) Successful in 33s 
				
			Tests / tests (phpstan, 8.2) (push) Successful in 1m26s 
				
			Tests / tests (tests:integration, 8.3) (push) Successful in 30s 
				
			Tests / tests (tests:integration, 8.2) (push) Successful in 1m15s 
				
			Tests / tests (tests:integration, 8.4) (push) Successful in 58s 
				
			Tests / tests (tests:unit:ci, 8.2) (push) Successful in 42s 
				
			Tests / tests (tests:unit:ci, 8.3) (push) Successful in 59s 
				
			Tests / tests (tests:unit:ci, 8.4) (push) Successful in 1m3s 
				
			 | 
			||
|---|---|---|
| .forgejo/workflows | ||
| docker | ||
| src | ||
| tests | ||
| .gitignore | ||
| composer.json | ||
| composer.lock | ||
| CONTRIBUTING.md | ||
| docker-compose.yml | ||
| Dockerfile | ||
| LICENSE | ||
| Makefile | ||
| phpstan.neon | ||
| phpunit.xml.dist | ||
| README.md | ||
lexoffice-Bundle for Symfony
Introduction
This bundle integrates the lexoffice public API into Symfony, utilizing Symfony's serializer to convert API responses into objects. Compatible with Symfony 6.4.
Installation
- Download the Bundle
 
Add the bundle to your composer.json:
composer require var-lab/lexoffice-bundle
2. Register the Bundle
(should be done automatically by composer)
    return [
        // ...
        VarLabIT\LexofficeBundle\VarLabITLexofficeBundle::class => ['all' => true],
    ];
3. Add configuration
Create the config file config/packages/var_lab_it_lexoffice.yaml with following content:
var_lab_it_lexoffice:
  api_key: '%env(LEXOFFICE_API_KEY)%'
add the api key to your .env:
# ...
LEXOFFICE_API_KEY=<your-api-key>
Usage
The following API functions are currently covered:
- Contacts
- fetch contact
 - create contact
 - update contact
 
 - Invoices
- create invoice
 - update invoice
 - fetch invoice
 - download invoice pdf
 
 
The lexoffice bundle is currently undergoing further development. Your own pull requests are welcome.
Contacts
Create a new contact:
<?php
use VarLabIT\LexofficeBundle\Entity\Address;
use VarLabIT\LexofficeBundle\Entity\Company as LexofficeCompany;
use VarLabIT\LexofficeBundle\Entity\Contact;
use VarLabIT\LexofficeBundle\Entity\ContactRole;
use VarLabIT\LexofficeBundle\Entity\Enum\AddressType;
use VarLabIT\LexofficeBundle\Entity\Enum\RoleType;
use VarLabIT\LexofficeBundle\Entity\Person;
use VarLabIT\LexofficeBundle\LexofficeClient;
class CityPageController extends AbstractController {
    
    public function __construct(
        private readonly CompanyRepository        $companyRepository,
        private readonly LexofficeClient          $lexofficeClient,
    )
    {
    }
    private function getContactObject(Company $company): Contact
    {
        $contact = new Contact();
        $contact
            ->setVersion(0)
            ->addRole(RoleType::CUSTOMER, new ContactRole())
            ->setCompany(
                (new LexofficeCompany())
                    ->setName($company->getName())
                    ->addContactPerson(
                        (new Person())
                            ->setFirstName($company->getGivenName())
                            ->setLastName($company->getFamilyName())
                            ->setEmailAddress($company->getInvoiceEmail())
                            ->setPrimary(true)
                            ->setPhoneNumber($company->getContactPhone())
                    ),
            )
            ->addAddress(
                AddressType::BILLING,
                (new Address())
                    ->setSupplement('Rechnungsadresse')
                    ->setStreet($company->getAddress())
                    ->setZip($company->getZipcode())
                    ->setCity($company->getCity())
                    ->setCountryCode($company->getCountry())
            );
            
        return $contact;
    }
    public function createContact(int $companyId): Response {
        $company = $this->companyRepository->find($companyId);
        $contact = $this->createContact($company);
        
        $contact = $this->lexofficeClient->createContact($contact);
        
        $company
            ->setVersion($contact->getVersion())
            ->setLexofficeId($contact->getId());
    }
}
Update a contact:
    public function createContact(int $companyId): Response {
        $company = $this->companyRepository->find($companyId);
        $contact = $this->createContact($company);
        
        $contact = $this->lexofficeClient->updateContact($contact);
        
        $company
            ->setVersion($contact->getVersion())
            ->setLexofficeId($contact->getId());
    }
Maintainer
This bundle is maintained and created by var-lab IT GmbH and contributors.