diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
deleted file mode 100644
index 83b7546..0000000
--- a/.github/FUNDING.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-# These are supported funding model platforms
-github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [StanBarrows]
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 7546b77..bc5e177 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -1,18 +1,18 @@
name: Bug Report
description: Report an Issue or Bug with the Package
title: "[Bug]: "
-labels: ["bug"]
+labels: [ "bug" ]
body:
- type: markdown
attributes:
- value: |
- We're sorry to hear you have a problem. Can you help us solve it by providing the following details.
+ value: "|
+We're sorry to hear you have a problem. Can you help us solve it by providing the following details."
- type: textarea
id: what-happened
attributes:
label: What happened?
description: What did you expect to happen?
- placeholder: I cannot currently do X thing because when I do, it breaks X thing.
+ placeholder: "I cannot currently do X thing because when I do, it breaks X thing."
validations:
required: true
- type: input
@@ -20,7 +20,8 @@ body:
attributes:
label: Package Version
description: What version of our Package are you running? Please be as specific as possible
- placeholder: 1.0.0
+ placeholder: "12.0"
+ value: "12.0"
validations:
required: true
- type: input
@@ -28,7 +29,8 @@ body:
attributes:
label: PHP Version
description: What version of PHP are you running? Please be as specific as possible
- placeholder: 8.3.0
+ placeholder: "8.4.0"
+ value: "8.4.0"
validations:
required: true
- type: input
@@ -36,7 +38,8 @@ body:
attributes:
label: Laravel Version
description: What version of Laravel are you running? Please be as specific as possible
- placeholder: 11.0.0
+ placeholder: "12.0.0"
+ value: "12.0.0"
validations:
required: true
- type: dropdown
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..0bc378d
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,12 @@
+# Please see the documentation for all configuration options:
+# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
+
+version: 2
+updates:
+
+ - package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: "weekly"
+ labels:
+ - "dependencies"
diff --git a/.github/workflows/dependabot-auto-merge.yml b/.github/workflows/dependabot-auto-merge.yml
index 14da349..2df1631 100644
--- a/.github/workflows/dependabot-auto-merge.yml
+++ b/.github/workflows/dependabot-auto-merge.yml
@@ -10,20 +10,20 @@ jobs:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
-
+
- name: Dependabot metadata
id: metadata
- uses: dependabot/fetch-metadata@v1.3.3
+ uses: dependabot/fetch-metadata@v2.3.0
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
-
+
- name: Auto-merge Dependabot PRs for semver-minor updates
if: ${{steps.metadata.outputs.update-type == 'version-update:semver-minor'}}
run: gh pr merge --auto --merge "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
-
+
- name: Auto-merge Dependabot PRs for semver-patch updates
if: ${{steps.metadata.outputs.update-type == 'version-update:semver-patch'}}
run: gh pr merge --auto --merge "$PR_URL"
diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml
new file mode 100644
index 0000000..0d4a013
--- /dev/null
+++ b/.github/workflows/dependency-review.yml
@@ -0,0 +1,20 @@
+# Dependency Review Action
+#
+# This Action will scan dependency manifest files that change as part of a Pull Request, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging.
+#
+# Source repository: https://github.com/actions/dependency-review-action
+# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
+name: 'Dependency Review'
+on: [pull_request]
+
+permissions:
+ contents: read
+
+jobs:
+ dependency-review:
+ runs-on: ubuntu-latest
+ steps:
+ - name: 'Checkout Repository'
+ uses: actions/checkout@v4
+ - name: 'Dependency Review'
+ uses: actions/dependency-review-action@v4
diff --git a/.github/workflows/fix-php-code-style-issues.yml b/.github/workflows/fix-php-code-style-issues.yml
new file mode 100644
index 0000000..ef2fadf
--- /dev/null
+++ b/.github/workflows/fix-php-code-style-issues.yml
@@ -0,0 +1,21 @@
+name: Fix PHP code style issues
+
+on: [push]
+
+jobs:
+ php-code-styling:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ github.head_ref }}
+
+ - name: Fix PHP code style issues
+ uses: aglipanci/laravel-pint-action@2.5
+
+ - name: Commit changes
+ uses: stefanzweifel/git-auto-commit-action@v5
+ with:
+ commit_message: Fix styling
diff --git a/.github/workflows/php-cs-fixer.yml b/.github/workflows/php-cs-fixer.yml
deleted file mode 100644
index 3517cf1..0000000
--- a/.github/workflows/php-cs-fixer.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-name: Check & fix styling
-
-on:
- push:
- branches:
- - styling
-
-jobs:
- php-cs-fixer:
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v3
- with:
- ref: ${{ github.head_ref }}
-
- - name: Run PHP CS Fixer
- uses: docker://oskarstark/php-cs-fixer-ga
- with:
- args: --config=.php-cs-fixer.dist.php --allow-risky=yes
-
- - name: Commit changes
- uses: stefanzweifel/git-auto-commit-action@v4
- with:
- commit_message: Fix styling
diff --git a/.github/workflows/phpstan.yml b/.github/workflows/phpstan.yml
index ed03ee6..f381a0b 100644
--- a/.github/workflows/phpstan.yml
+++ b/.github/workflows/phpstan.yml
@@ -1,26 +1,22 @@
name: PHPStan
-on:
- push:
- branches: [ main ]
- pull_request:
- branches: [ main ]
+on: [push]
jobs:
phpstan:
name: phpstan
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
- php-version: '8.3'
+ php-version: '8.4'
coverage: none
- name: Install composer dependencies
- uses: ramsey/composer-install@v2
+ uses: ramsey/composer-install@v3
- name: Run PHPStan
- run: ./vendor/bin/phpstan analyse src --error-format=github
+ run: ./vendor/bin/phpstan --error-format=github
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..afa28ff
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,23 @@
+name: release
+
+on:
+ pull_request:
+ types:
+ - closed
+ branches:
+ - main
+jobs:
+ release:
+ name: Release
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: '0'
+ - name: Bump version and push tag
+ uses: anothrNick/github-tag-action@master
+ env:
+ GITHUB_TOKEN: ${{ secrets.MY_GITHUB_TOKEN }}
+ WITH_V: true
+ RELEASE_BRANCHES: main
+ DEFAULT_BUMP: minor
diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml
index 0674352..c4d9e45 100644
--- a/.github/workflows/run-tests.yml
+++ b/.github/workflows/run-tests.yml
@@ -13,16 +13,16 @@ jobs:
fail-fast: true
max-parallel: 1
matrix:
- os: [ ubuntu-latest, windows-latest ]
- php: [ 8.2, 8.3 ]
- laravel: [ 11.* ]
+ os: [ ubuntu-latest ]
+ php: [ 8.2, 8.3, 8.4 ]
+ laravel: [ 12.* ]
stability: [ prefer-lowest, prefer-stable ]
name: P${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.stability }} - ${{ matrix.os }}
steps:
- name: Checkout code
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
@@ -41,16 +41,15 @@ jobs:
composer require "laravel/framework:${{ matrix.laravel }}" --no-interaction --no-update
composer update --${{ matrix.stability }} --prefer-dist --no-interaction
- - name: Set phpunit.xml
+ - name: Execute tests
run: cp phpunit.xml.dist phpunit.xml
- name: Execute tests
run: vendor/bin/pest
- - name: Store test reports
+ - name: Store Log Artifacts
+ if: failure()
uses: actions/upload-artifact@v4
with:
- name: Store report
- retention-days: 1
- path: |
- ./reports
+ name: Store report artifacts
+ path: ./vendor/orchestra/testbench-core/laravel/storage/logs
diff --git a/.gitignore b/.gitignore
index 1e71f2c..91b23b2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,16 +1,12 @@
.idea
-.php_cs
-.php_cs.cache
-.php-cs-fixer.cache
-.phpunit.cache
.phpunit.result.cache
-.DS_STORE
-build
+.phpunit.cache
composer.lock
coverage
phpunit.xml
-psalm.xml
+phpstan.neon
testbench.yaml
vendor
node_modules
-phpstan.neon
+.phpactor.json
+build
diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php
deleted file mode 100644
index 8d8a790..0000000
--- a/.php-cs-fixer.dist.php
+++ /dev/null
@@ -1,40 +0,0 @@
-in([
- __DIR__ . '/src',
- __DIR__ . '/tests',
- ])
- ->name('*.php')
- ->notName('*.blade.php')
- ->ignoreDotFiles(true)
- ->ignoreVCS(true);
-
-return (new PhpCsFixer\Config())
- ->setRules([
- '@PSR12' => true,
- 'array_syntax' => ['syntax' => 'short'],
- 'ordered_imports' => ['sort_algorithm' => 'alpha'],
- 'no_unused_imports' => true,
- 'not_operator_with_successor_space' => true,
- 'trailing_comma_in_multiline' => true,
- 'phpdoc_scalar' => true,
- 'unary_operator_spaces' => true,
- 'binary_operator_spaces' => true,
- 'blank_line_before_statement' => [
- 'statements' => ['break', 'continue', 'declare', 'return', 'throw', 'try'],
- ],
- 'phpdoc_single_line_var_spacing' => true,
- 'phpdoc_var_without_name' => true,
- 'class_attributes_separation' => [
- 'elements' => [
- 'method' => 'one',
- ],
- ],
- 'method_argument_space' => [
- 'on_multiline' => 'ensure_fully_multiline',
- 'keep_multiple_spaces_after_comma' => true,
- ],
- 'single_trait_insert_per_statement' => true,
- ])
- ->setFinder($finder);
diff --git a/.phpunit.cache/test-results b/.phpunit.cache/test-results
index b478b2c..42e148f 100644
--- a/.phpunit.cache/test-results
+++ b/.phpunit.cache/test-results
@@ -1 +1 @@
-{"version":"pest_2.36.0","defects":[],"times":{"P\\Tests\\Requests\\Invoices\\CancelAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\Invoices\\FetchAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Invoices\\CreateAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.013,"P\\Tests\\Requests\\Invoices\\EditAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.009,"P\\Tests\\Requests\\Invoices\\ShowPdfRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Invoices\\DefaultPositions\\CreateAnDefaultPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.695,"P\\Tests\\Requests\\Invoices\\SubPositions\\CreateASubPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.152,"P\\Tests\\Requests\\Accounts\\FetchAListOfAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0.018,"P\\Tests\\Requests\\Titles\\DeleteAnAdditonalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Invoices\\DeleteAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Currencies\\FetchACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\Payments\\CancelAPaymentTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\ContactsGroups\\CreateContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\ContactsGroups\\DeleteAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Titles\\SearchTitlesRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\BankAccounts\\FetchAListOfBankAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\ContactAdditionalAddresses\\DeleteAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Titles\\CreateASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Currencies\\EditACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\QrPayments\\CreateQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\Contacts\\SearchContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0.008,"P\\Tests\\Requests\\Files\\SearchFilesRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\AdditionalAddresses\\EditAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\BusinessActivities\\FetchAListOfBusinessActivitesRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Users\\FetchAListOfUsersRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Salutations\\FetchASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\CalendarYears\\FetchAListOfCalendarYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\PaymentTypes\\FetchAListOfPaymentTypesRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Titles\\FetchAListOfTitlesRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Taxes\\FetchATaxRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Contacts\\FetchAListOfContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\ContactAdditionalAddresses\\SearchContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Notes\\DeleteANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\ContactAdditionalAddresses\\FetchAListOfContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Contacts\\DeleteAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Files\\DownloadFIleRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\ContactsSectors\\FetchAListOfContactSectorsRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Projects\\FetchAListOfPaymentTypesRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\ContactAdditionalAddresses\\EditAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\ContactsRelations\\EditAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Payments\\DeleteAPaymentTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Units\\FetchAListOfUnitsRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Salutations\\FetchAListOfSalutationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\CalendarYears\\FetchACalendarYearRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Core\\ArchTest::__pest_evaluable_it_will_not_use_any_debug_function":1.031,"P\\Tests\\Requests\\AdditionalAddresses\\CreateAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\Taxes\\DeleteATaxRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Contacts\\CreateContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Users\\FetchAuthenticatedUserRequestTest::__pest_evaluable_it_can_perform_the_request":0.013,"P\\Tests\\Requests\\Files\\ShowFileUsageRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Salutations\\SearchSalutationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\ContactsGroups\\EditAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\ManualEntries\\FetchAListOfManualEntriesRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Files\\GetASingleFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\ContactsRelations\\SearchContactRelationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\Currencies\\FetchExchangeRatesForCurrenciesRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\ContactAdditionalAddresses\\FetchAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\ManualEntries\\AddFileToAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\ContactsRelations\\FetchAListOfContactRelationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.008,"P\\Tests\\Requests\\Payments\\FetchAListOfPaymentsTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Accounts\\SearchAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Notes\\SearchNotesRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Salutations\\DeleteASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Titles\\FetchATitleRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\IbanPayments\\CreateIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Currencies\\FetchAllPossibleCurrencyCodesRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\CompanyProfiles\\FetchACompanyProfileRequestTest::__pest_evaluable_it_can_perform_the_request":0.016,"P\\Tests\\Requests\\IbanPayments\\GetIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.008,"P\\Tests\\Requests\\ContactsSectors\\SearchContactSectorsRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Invoices\\DefaultPositions\\CreateADefaultPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.008,"P\\Tests\\Requests\\Files\\DeleteAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\Invoices\\FetchAListOfInvoicesRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\Salutations\\CreateASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\Currencies\\CreateCurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Notes\\EditANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\AccountGroups\\FetchAListOfAccountGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\AdditionalAddresses\\SearchAdditionalAddressesRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\QrPayments\\UpdateQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\BusinessYears\\FetchABusinessYearRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\ContactsGroups\\SearchContactGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Titles\\EditAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\CalendarYears\\CreateCalendarYearRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\ContactsRelations\\CreateContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\AdditionalAddresses\\FetchAListOfAdditionalAddressesRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\ContactsRelations\\DeleteAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Currencies\\DeleteACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\ManualEntries\\FetchFileOfAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\ManualEntries\\GetNextReferenceNumberRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\BankAccounts\\FetchASingleBankAccountRequestTest::__pest_evaluable_it_can_perform_the_request":0.008,"P\\Tests\\Requests\\Contacts\\BuilkCreateContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0.009,"P\\Tests\\Requests\\ContactsRelations\\FetchAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Contacts\\FetchAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\IbanPayments\\UpdateIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Notes\\FetchAListOfNotesRequestTest::__pest_evaluable_it_can_perform_the_request":0.008,"P\\Tests\\Requests\\ContactAdditionalAddresses\\CreateContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\Notes\\FetchANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\CalendarYears\\SearchCalendarYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\ContactsGroups\\FetchAListOfContactGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Notes\\CreateANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Files\\EditAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\Contacts\\EditAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Languages\\FetchAListOfLanguagesRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Files\\FetchAListOfFilesRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Files\\GetAFilePreviewRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Salutations\\EditASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\QrPayments\\GetQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\ManualEntries\\CreateManualEntryRequestTest::__pest_evaluable_it_can_perform_the_request":0.039,"P\\Tests\\Requests\\CompanyProfiles\\FetchAListOfCompanyProfilesRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Taxes\\FetchAListOfTaxesRequestTest::__pest_evaluable_it_can_perform_the_request":0.007,"P\\Tests\\Requests\\AdditionalAddresses\\FetchAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Reports\\JournalRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\BusinessYears\\FetchAListOfBusinessYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\ManualEntries\\DeleteFileOfAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Contacts\\RestoreAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\ManualEntries\\FetchFilesOfAccountingEntryRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\ContactsGroups\\FetchAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\Files\\CreateAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\Currencies\\FetchAListOfCurrenciesRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\DocumentSettings\\FetchAListOfDocumentSettingsRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\AdditionalAddresses\\DeleteAnAdditonalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.004}}
\ No newline at end of file
+{"version":"pest_3.7.4","defects":{"P\\Tests\\Requests\\ManualEntries\\AddFileToAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\IbanPayments\\UpdateIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\Invoices\\CreateAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\Contacts\\BuilkCreateContactsRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\QrPayments\\UpdateQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\Invoices\\EditAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\Files\\ShowFileUsageRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\ManualEntries\\CreateManualEntryRequestTest::__pest_evaluable_it_can_perform_the_request":8},"times":{"P\\Tests\\Requests\\Files\\GetAFilePreviewRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\BusinessYears\\FetchAListOfBusinessYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Reports\\JournalRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Payments\\CancelAPaymentTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\DeleteAnAdditonalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactAdditionalAddresses\\SearchContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\CalendarYears\\CreateCalendarYearRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Salutations\\SearchSalutationsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactAdditionalAddresses\\FetchAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\IbanPayments\\GetIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Invoices\\DeleteAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.022,"P\\Tests\\Requests\\CalendarYears\\SearchCalendarYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Currencies\\EditACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactsGroups\\EditAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\ContactsGroups\\CreateContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Salutations\\FetchASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Files\\CreateAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Units\\FetchAListOfUnitsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Payments\\FetchAListOfPaymentsTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Currencies\\CreateCurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Notes\\FetchAListOfNotesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsSectors\\SearchContactSectorsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Contacts\\EditAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactsGroups\\SearchContactGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\QrPayments\\CreateQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactAdditionalAddresses\\CreateContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactAdditionalAddresses\\EditAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\BusinessYears\\FetchABusinessYearRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsSectors\\FetchAListOfContactSectorsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ManualEntries\\AddFileToAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ManualEntries\\DeleteFileOfAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\IbanPayments\\UpdateIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Currencies\\FetchExchangeRatesForCurrenciesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\DocumentSettings\\FetchAListOfDocumentSettingsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\EditAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\AdditionalAddresses\\FetchAListOfAdditionalAddressesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Notes\\CreateANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\CalendarYears\\FetchACalendarYearRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Invoices\\CreateAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\ContactsRelations\\DeleteAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\PaymentTypes\\FetchAListOfPaymentTypesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ManualEntries\\FetchAListOfManualEntriesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\BuilkCreateContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\AccountGroups\\FetchAListOfAccountGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Core\\ArchTest::__pest_evaluable_it_will_not_use_any_debug_function":0.204,"P\\Tests\\Requests\\ContactsRelations\\EditAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Currencies\\DeleteACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\QrPayments\\UpdateQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsRelations\\FetchAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsGroups\\FetchAListOfContactGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Invoices\\SubPositions\\CreateASubPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Taxes\\FetchAListOfTaxesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\BankAccounts\\FetchASingleBankAccountRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactAdditionalAddresses\\DeleteAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\BankAccounts\\FetchAListOfBankAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Invoices\\EditAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\Contacts\\RestoreAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\AdditionalAddresses\\DeleteAnAdditonalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Files\\ShowFileUsageRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Invoices\\DefaultPositions\\CreateADefaultPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CompanyProfiles\\FetchAListOfCompanyProfilesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\SearchTitlesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Contacts\\FetchAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Files\\SearchFilesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\AdditionalAddresses\\CreateAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Notes\\FetchANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Invoices\\FetchAListOfInvoicesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Titles\\FetchAListOfTitlesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ManualEntries\\CreateManualEntryRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Salutations\\EditASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Users\\FetchAListOfUsersRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Accounts\\SearchAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Invoices\\ShowPdfRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\FetchAListOfFilesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Salutations\\FetchAListOfSalutationsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Currencies\\FetchAllPossibleCurrencyCodesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Files\\DeleteAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Invoices\\FetchAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Payments\\DeleteAPaymentTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Files\\EditAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Taxes\\FetchATaxRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\AdditionalAddresses\\FetchAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Invoices\\CancelAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Projects\\FetchAListOfPaymentTypesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\FetchATitleRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Files\\GetASingleFileRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsGroups\\FetchAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactAdditionalAddresses\\FetchAListOfContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Contacts\\CreateContactRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsRelations\\SearchContactRelationsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\CalendarYears\\FetchAListOfCalendarYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Notes\\DeleteANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\QrPayments\\GetQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\IbanPayments\\CreateIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AdditionalAddresses\\SearchAdditionalAddressesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsGroups\\DeleteAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Files\\DownloadFIleRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Accounts\\FetchAListOfAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\SearchContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ManualEntries\\FetchFileOfAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ManualEntries\\FetchFilesOfAccountingEntryRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\AdditionalAddresses\\EditAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Taxes\\DeleteATaxRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Notes\\SearchNotesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Notes\\EditANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\FetchACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsRelations\\FetchAListOfContactRelationsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Currencies\\FetchAListOfCurrenciesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Salutations\\CreateASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\BusinessActivities\\FetchAListOfBusinessActivitesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Languages\\FetchAListOfLanguagesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Titles\\CreateASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Contacts\\FetchAListOfContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Salutations\\DeleteASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\CompanyProfiles\\FetchACompanyProfileRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\DeleteAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ManualEntries\\GetNextReferenceNumberRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Users\\FetchAuthenticatedUserRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsRelations\\CreateContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0}}
\ No newline at end of file
diff --git a/README.md b/README.md
index f1f90ff..891f193 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,11 @@
-
+
[](https://packagist.org/packages/codebar-ag/laravel-bexio)
[](https://packagist.org/packages/codebar-ag/laravel-bexio)
-[](https://github.com/codebar-ag/laravel-bexio/actions/workflows/run-tests.yml)
+[](https://github.com/codebar-ag/laravel-bexio/actions/workflows/run-tests.yml)
+[](https://github.com/codebar-ag/laravel-bexio/actions/workflows/fix-php-code-style-issues.yml)
[](https://github.com/codebar-ag/laravel-bexio/actions/workflows/phpstan.yml)
+[](https://github.com/codebar-ag/laravel-bexio/actions/workflows/dependency-review.yml)
This package was developed to give you a quick start to the Bexio API.
@@ -13,10 +15,11 @@ Bexio is a cloud-based simple business software for the self-employed, small bus
## 🛠Requirements
-| Package | PHP | Laravel |
-|-----------|-------|----------------|
-| >v11.0 | >8.2 | > Laravel 11.0 |
-| >v1.0 | >8.2 | > Laravel 10.0 |
+| Package | PHP | Laravel |
+|-----------|-------------|-----------|
+| v12.0.0 | ^8.2 - ^8.4 | 12.x |
+| v11.0.0 | ^8.2 - ^8.3 | 11.x |
+| v1.0.0 | ^8.2 | 10.x |
## Authentication
@@ -182,7 +185,7 @@ In addition to the above, we also provide DTOs to be used for create and edit re
### Examples
```php
-use CodebarAg\DocuWare\BexioConnector;
+use CodebarAg\bexio\BexioConnector;
// You can either set the token in the constructor or in the .env file
diff --git a/composer.json b/composer.json
index 4b4b459..1462795 100644
--- a/composer.json
+++ b/composer.json
@@ -1,82 +1,82 @@
{
- "name": "codebar-ag/laravel-bexio",
- "description": "Bexio integration with Laravel",
- "keywords": [
- "bexio",
- "laravel",
- "codebar-ag",
- "laravel-bexio"
- ],
- "homepage": "https://github.com/codebar-ag/laravel-bexio",
- "license": "MIT",
- "authors": [
- {
- "name": "Sebastian Bürgin",
- "email": "sebastian.buergin@codebar.ch",
- "homepage": "https://www.codebar.ch",
- "role": "Developer"
+ "name": "codebar-ag/laravel-bexio",
+ "description": "Bexio integration with Laravel",
+ "keywords": [
+ "bexio",
+ "laravel",
+ "codebar-ag",
+ "laravel-bexio"
+ ],
+ "homepage": "https://github.com/codebar-ag/laravel-bexio",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Sebastian Bürgin-Fix",
+ "email": "sebastian.buergin@buergin.ch",
+ "homepage": "https://www.codebar.ch",
+ "role": "Sofware-Engineer"
+ },
+ {
+ "name": "Rhys Lees",
+ "role": "Software-Engineer"
+ }
+ ],
+ "require": {
+ "php": "8.2.*|8.3.*|8.4.*",
+ "guzzlehttp/guzzle": "^7.9.2",
+ "illuminate/contracts": "^12.1.1",
+ "illuminate/support": "^12.1.1",
+ "saloonphp/cache-plugin": "^3.0.0",
+ "saloonphp/laravel-plugin": "^3.5.1",
+ "saloonphp/saloon": "^3.11.2",
+ "spatie/laravel-data": "^4.13.2",
+ "spatie/laravel-enum": "^3.2.0",
+ "spatie/laravel-package-tools": "^1.19.0"
},
- {
- "name": "Rhys Lees",
- "role": "Software-Developer"
- }
- ],
- "require": {
- "php": ">=8.2",
- "guzzlehttp/guzzle": "^7.8",
- "laravel/framework": "^11",
- "illuminate/contracts": "^11.0",
- "saloonphp/cache-plugin": "^3.0",
- "saloonphp/laravel-plugin": "^3.2",
- "saloonphp/saloon": "^3.4",
- "spatie/laravel-data": "^4.4",
- "spatie/laravel-enum": "^3.0",
- "spatie/laravel-package-tools": "^1.16"
- },
- "require-dev": {
- "laravel/pint": "^1.13",
- "nunomaduro/collision": "^8.1",
- "larastan/larastan": "^2.8",
- "orchestra/testbench": "^9.0",
- "pestphp/pest": "^2.31",
- "pestphp/pest-plugin-laravel": "^2.2",
- "phpstan/extension-installer": "^1.3",
- "phpstan/phpstan-deprecation-rules": "^1.1",
- "phpstan/phpstan-phpunit": "^1.3",
- "spatie/laravel-ray": "^1.33"
- },
- "autoload": {
- "psr-4": {
- "CodebarAg\\Bexio\\": "src"
- }
- },
- "autoload-dev": {
- "psr-4": {
- "CodebarAg\\Bexio\\Tests\\": "tests"
- }
- },
- "scripts": {
- "analyse": "vendor/bin/phpstan analyse",
- "test": "vendor/bin/pest",
- "test-coverage": "vendor/bin/pest --coverage",
- "format": "vendor/bin/php-cs-fixer fix --allow-risky=yes"
- },
- "config": {
- "sort-packages": true,
- "allow-plugins": {
- "composer/package-versions-deprecated": false,
- "pestphp/pest-plugin": true,
- "phpstan/extension-installer": true,
- "dealerdirect/phpcodesniffer-composer-installer": true
- }
- },
- "extra": {
- "laravel": {
- "providers": [
- "CodebarAg\\Bexio\\BexioServiceProvider"
- ]
- }
- },
- "minimum-stability": "dev",
- "prefer-stable": true
+ "require-dev": {
+ "laravel/pint": "^1.21.1",
+ "larastan/larastan": "^v3.1.0",
+ "orchestra/testbench": "^10.1.0",
+ "pestphp/pest": "^3.7.4",
+ "nunomaduro/collision": "^8.6.1",
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan-deprecation-rules": "^2.0.1",
+ "phpstan/phpstan-phpunit": "^2.0.4",
+ "spatie/laravel-ray": "^1.40.0",
+ "phpdocumentor/reflection-docblock": "^5.6.1"
+ },
+ "autoload": {
+ "psr-4": {
+ "CodebarAg\\Bexio\\": "src"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "CodebarAg\\Bexio\\Tests\\": "tests"
+ }
+ },
+ "scripts": {
+ "post-autoload-dump": "@php ./vendor/bin/testbench package:discover --ansi",
+ "analyse": "vendor/bin/phpstan analyse",
+ "test": "vendor/bin/pest",
+ "test-coverage": "vendor/bin/pest --coverage",
+ "format": "vendor/bin/pint"
+ },
+ "config": {
+ "sort-packages": true,
+ "allow-plugins": {
+ "composer/package-versions-deprecated": false,
+ "pestphp/pest-plugin": true,
+ "phpstan/extension-installer": true
+ }
+ },
+ "extra": {
+ "laravel": {
+ "providers": [
+ "CodebarAg\\Bexio\\BexioServiceProvider"
+ ]
+ }
+ },
+ "minimum-stability": "dev",
+ "prefer-stable": true
}
diff --git a/phpstan.neon.dist b/phpstan.neon.dist
index e005ac7..0cc2d04 100644
--- a/phpstan.neon.dist
+++ b/phpstan.neon.dist
@@ -2,12 +2,11 @@ includes:
- phpstan-baseline.neon
parameters:
- level: 4
+ level: 5
paths:
- src
- config
tmpDir: build/phpstan
checkOctaneCompatibility: true
checkModelProperties: true
- checkMissingIterableValueType: false
-
+ noEnvCallsOutsideOfConfig: false
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index 6b68f89..37f9b0e 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -1,7 +1,11 @@
-
+
-
+
tests
@@ -16,6 +20,7 @@
+
diff --git a/src/Dto/Contacts/ContactDTO.php b/src/Dto/Contacts/ContactDTO.php
index ea49f1f..2e07a23 100644
--- a/src/Dto/Contacts/ContactDTO.php
+++ b/src/Dto/Contacts/ContactDTO.php
@@ -10,21 +10,21 @@
class ContactDTO extends Data
{
public function __construct(
- public int $user_id, //ref to user
+ public int $user_id, // ref to user
public int $owner_id,
public int $id,
public int $nr,
public int $contact_type_id,
public string $name_1,
public ?string $name_2,
- public ?int $salutation_id, //ref to salutation
+ public ?int $salutation_id, // ref to salutation
public ?int $salutation_form_id,
- public ?int $title_id, //ref to title
+ public ?int $title_id, // ref to title
public ?string $birthday,
public ?string $address,
public ?string $postcode,
public ?string $city,
- public ?int $country_id, //ref to country
+ public ?int $country_id, // ref to country
public ?string $mail,
public ?string $mail_second,
public ?string $phone_fixed,
@@ -34,7 +34,7 @@ public function __construct(
public ?string $url,
public ?string $skype_name,
public ?string $remarks,
- public ?int $language_id, //ref to language
+ public ?int $language_id, // ref to language
public bool $is_lead,
public ?string $contact_group_ids,
public ?string $contact_branch_ids,
diff --git a/src/Dto/Contacts/CreateEditContactDTO.php b/src/Dto/Contacts/CreateEditContactDTO.php
index 1342f5c..e0a9ed2 100644
--- a/src/Dto/Contacts/CreateEditContactDTO.php
+++ b/src/Dto/Contacts/CreateEditContactDTO.php
@@ -11,19 +11,19 @@
class CreateEditContactDTO extends Data
{
public function __construct(
- public int $user_id, //ref to user
+ public int $user_id, // ref to user
public int $owner_id,
public int $contact_type_id,
public string $name_1,
public ?string $name_2 = null,
- public ?int $salutation_id = null, //ref to salutation
+ public ?int $salutation_id = null, // ref to salutation
public ?int $salutation_form = null,
- public ?int $titel_id = null, //ref to title
+ public ?int $titel_id = null, // ref to title
public ?Carbon $birthday = null,
public ?string $address = null,
public ?string $postcode = null,
public ?string $city = null,
- public ?int $country_id = null, //ref to country
+ public ?int $country_id = null, // ref to country
public ?string $mail = null,
public ?string $mail_second = null,
public ?string $phone_fixed = null,
@@ -33,7 +33,7 @@ public function __construct(
public ?string $url = null,
public ?string $skype_name = null,
public ?string $remarks = null,
- public ?int $language_id = null, //ref to language
+ public ?int $language_id = null, // ref to language
public ?string $contact_group_ids = null,
public ?string $contact_branch_ids = null,
) {}
diff --git a/src/Dto/Users/UserDTO.php b/src/Dto/Users/UserDTO.php
index e7e9e2f..90bc34b 100644
--- a/src/Dto/Users/UserDTO.php
+++ b/src/Dto/Users/UserDTO.php
@@ -9,43 +9,41 @@
class UserDTO extends Data
{
- public function __construct(
- public int $id,
- public ?string $salutation_type,
- public ?string $firstname,
- public ?string $lastname,
- public string $email,
- public bool $is_superadmin,
- public bool $is_accountant,
- )
- {
- }
-
- public static function fromResponse(Response $response): self
- {
- if ($response->failed()) {
- throw new \Exception('Failed to create DTO from Response');
- }
-
- $data = $response->json();
-
- return self::fromArray($data);
- }
-
- public static function fromArray(array $data): self
- {
- if (!$data) {
- throw new Exception('Unable to create DTO. Data missing from response.');
- }
-
- return new self(
- id: Arr::get($data, 'id'),
- salutation_type: Arr::get($data, 'salutation_type'),
- firstname: Arr::get($data, 'firstname'),
- lastname: Arr::get($data, 'lastname'),
- email: Arr::get($data, 'email'),
- is_superadmin: Arr::get($data, 'is_superadmin'),
- is_accountant: Arr::get($data, 'is_accountant'),
- );
- }
+ public function __construct(
+ public int $id,
+ public ?string $salutation_type,
+ public ?string $firstname,
+ public ?string $lastname,
+ public string $email,
+ public bool $is_superadmin,
+ public bool $is_accountant,
+ ) {}
+
+ public static function fromResponse(Response $response): self
+ {
+ if ($response->failed()) {
+ throw new \Exception('Failed to create DTO from Response');
+ }
+
+ $data = $response->json();
+
+ return self::fromArray($data);
+ }
+
+ public static function fromArray(array $data): self
+ {
+ if (! $data) {
+ throw new Exception('Unable to create DTO. Data missing from response.');
+ }
+
+ return new self(
+ id: Arr::get($data, 'id'),
+ salutation_type: Arr::get($data, 'salutation_type'),
+ firstname: Arr::get($data, 'firstname'),
+ lastname: Arr::get($data, 'lastname'),
+ email: Arr::get($data, 'email'),
+ is_superadmin: Arr::get($data, 'is_superadmin'),
+ is_accountant: Arr::get($data, 'is_accountant'),
+ );
+ }
}
diff --git a/src/Enums/AdditionalAddresses/OrderByEnum.php b/src/Enums/AdditionalAddresses/OrderByEnum.php
index 5466cdd..8da5d2a 100644
--- a/src/Enums/AdditionalAddresses/OrderByEnum.php
+++ b/src/Enums/AdditionalAddresses/OrderByEnum.php
@@ -32,7 +32,7 @@ protected static function values(): array
];
}
- protected static function labels()
+ protected static function labels(): array
{
return [
'ID' => 'Id',
diff --git a/src/Enums/CalendarYears/VatAccountingMethodEnum.php b/src/Enums/CalendarYears/VatAccountingMethodEnum.php
index 7790af8..872fadc 100644
--- a/src/Enums/CalendarYears/VatAccountingMethodEnum.php
+++ b/src/Enums/CalendarYears/VatAccountingMethodEnum.php
@@ -18,7 +18,7 @@ protected static function values(): array
];
}
- protected static function labels()
+ protected static function labels(): array
{
return [
'EFFECTIVE' => 'Effective',
diff --git a/src/Enums/CalendarYears/VatAccountingTypeEnum.php b/src/Enums/CalendarYears/VatAccountingTypeEnum.php
index aaf5c67..7b4db6b 100644
--- a/src/Enums/CalendarYears/VatAccountingTypeEnum.php
+++ b/src/Enums/CalendarYears/VatAccountingTypeEnum.php
@@ -18,7 +18,7 @@ protected static function values(): array
];
}
- protected static function labels()
+ protected static function labels(): array
{
return [
'AGREED' => 'Agreed',
diff --git a/src/Enums/ContactGroups/OrderByEnum.php b/src/Enums/ContactGroups/OrderByEnum.php
index 6124bbd..0377073 100644
--- a/src/Enums/ContactGroups/OrderByEnum.php
+++ b/src/Enums/ContactGroups/OrderByEnum.php
@@ -26,7 +26,7 @@ protected static function values(): array
];
}
- protected static function labels()
+ protected static function labels(): array
{
return [
'ID' => 'Id',
diff --git a/src/Enums/ContactRelations/OrderByEnum.php b/src/Enums/ContactRelations/OrderByEnum.php
index 6b535db..46a6376 100644
--- a/src/Enums/ContactRelations/OrderByEnum.php
+++ b/src/Enums/ContactRelations/OrderByEnum.php
@@ -38,7 +38,7 @@ protected static function values(): array
];
}
- protected static function labels()
+ protected static function labels(): array
{
return [
'ID' => 'Id',
diff --git a/src/Enums/ContactSectors/OrderByEnum.php b/src/Enums/ContactSectors/OrderByEnum.php
index 84d0f44..ee019ea 100644
--- a/src/Enums/ContactSectors/OrderByEnum.php
+++ b/src/Enums/ContactSectors/OrderByEnum.php
@@ -26,7 +26,7 @@ protected static function values(): array
];
}
- protected static function labels()
+ protected static function labels(): array
{
return [
'ID' => 'Id',
diff --git a/src/Enums/Contacts/OrderByEnum.php b/src/Enums/Contacts/OrderByEnum.php
index 4c1f916..d4956b5 100644
--- a/src/Enums/Contacts/OrderByEnum.php
+++ b/src/Enums/Contacts/OrderByEnum.php
@@ -38,7 +38,7 @@ protected static function values(): array
];
}
- protected static function labels()
+ protected static function labels(): array
{
return [
'ID' => 'Id',
diff --git a/src/Enums/IbanPayments/AllowanceTypeEnum.php b/src/Enums/IbanPayments/AllowanceTypeEnum.php
index be6f9e1..d1fdaed 100644
--- a/src/Enums/IbanPayments/AllowanceTypeEnum.php
+++ b/src/Enums/IbanPayments/AllowanceTypeEnum.php
@@ -22,7 +22,7 @@ protected static function values(): array
];
}
- protected static function labels()
+ protected static function labels(): array
{
return [
'FEE_PAID_BY_SENDER' => 'Fee Paid By Sender',
diff --git a/src/Enums/IbanPayments/StatusEnum.php b/src/Enums/IbanPayments/StatusEnum.php
index 25b6da3..bf77d69 100644
--- a/src/Enums/IbanPayments/StatusEnum.php
+++ b/src/Enums/IbanPayments/StatusEnum.php
@@ -24,7 +24,7 @@ protected static function values(): array
];
}
- protected static function labels()
+ protected static function labels(): array
{
return [
'OPEN' => 'Open',
diff --git a/src/Enums/ManualEntries/TypeEnum.php b/src/Enums/ManualEntries/TypeEnum.php
index ff25999..985ee1c 100644
--- a/src/Enums/ManualEntries/TypeEnum.php
+++ b/src/Enums/ManualEntries/TypeEnum.php
@@ -20,7 +20,7 @@ protected static function values(): array
];
}
- protected static function labels()
+ protected static function labels(): array
{
return [
'MANUAL_SINGLE_ENTRY' => 'Manual Single Entry',
diff --git a/src/Enums/QrPayments/AllowanceTypeEnum.php b/src/Enums/QrPayments/AllowanceTypeEnum.php
index 12f7ff8..d41787c 100644
--- a/src/Enums/QrPayments/AllowanceTypeEnum.php
+++ b/src/Enums/QrPayments/AllowanceTypeEnum.php
@@ -22,7 +22,7 @@ protected static function values(): array
];
}
- protected static function labels()
+ protected static function labels(): array
{
return [
'FEE_PAID_BY_SENDER' => 'Fee Paid By Sender',
diff --git a/src/Enums/QrPayments/StatusEnum.php b/src/Enums/QrPayments/StatusEnum.php
index eaedbf7..6ef84d1 100644
--- a/src/Enums/QrPayments/StatusEnum.php
+++ b/src/Enums/QrPayments/StatusEnum.php
@@ -24,7 +24,7 @@ protected static function values(): array
];
}
- protected static function labels()
+ protected static function labels(): array
{
return [
'OPEN' => 'Open',
diff --git a/src/Enums/Taxes/ScopeEnum.php b/src/Enums/Taxes/ScopeEnum.php
index 0795029..04d5f42 100644
--- a/src/Enums/Taxes/ScopeEnum.php
+++ b/src/Enums/Taxes/ScopeEnum.php
@@ -18,7 +18,7 @@ protected static function values(): array
];
}
- protected static function labels()
+ protected static function labels(): array
{
return [
'ACTIVE' => 'Active',
diff --git a/src/Enums/Taxes/TypesEnum.php b/src/Enums/Taxes/TypesEnum.php
index 4f7d81e..6fd3580 100644
--- a/src/Enums/Taxes/TypesEnum.php
+++ b/src/Enums/Taxes/TypesEnum.php
@@ -18,7 +18,7 @@ protected static function values(): array
];
}
- protected static function labels()
+ protected static function labels(): array
{
return [
'SALES_TAX' => 'Sales Tax',
diff --git a/src/Enums/Titles/OrderByEnum.php b/src/Enums/Titles/OrderByEnum.php
index 82b70ef..e5693dd 100644
--- a/src/Enums/Titles/OrderByEnum.php
+++ b/src/Enums/Titles/OrderByEnum.php
@@ -26,7 +26,7 @@ protected static function values(): array
];
}
- protected static function labels()
+ protected static function labels(): array
{
return [
'ID' => 'Id',
diff --git a/src/Requests/Titles/SearchTitlesRequest.php b/src/Requests/Titles/SearchTitlesRequest.php
index d07c16e..2892c0e 100644
--- a/src/Requests/Titles/SearchTitlesRequest.php
+++ b/src/Requests/Titles/SearchTitlesRequest.php
@@ -6,6 +6,7 @@
use CodebarAg\Bexio\Enums\SearchCriteriaEnum;
use CodebarAg\Bexio\Enums\Titles\OrderByEnum;
use Exception;
+use Illuminate\Support\Collection;
use Saloon\Contracts\Body\HasBody;
use Saloon\Enums\Method;
use Saloon\Http\Request;
@@ -52,7 +53,7 @@ protected function defaultBody(): array
];
}
- public function createDtoFromResponse(Response $response): \Illuminate\Support\Collection
+ public function createDtoFromResponse(Response $response): Collection
{
if (! $response->successful()) {
throw new Exception('Request was not successful. Unable to create DTO.');
diff --git a/tests/Pest.php b/tests/Pest.php
index d3f7a3d..b8ec106 100644
--- a/tests/Pest.php
+++ b/tests/Pest.php
@@ -2,9 +2,11 @@
use CodebarAg\Bexio\Tests\TestCase;
use Illuminate\Support\Facades\Event;
+use Saloon\Http\Faking\MockClient;
uses(TestCase::class)
->beforeEach(function () {
Event::fake();
+ MockClient::destroyGlobal();
})
->in(__DIR__);
diff --git a/tests/Requests/Invoices/EditAnInvoiceRequestTest.php b/tests/Requests/Invoices/EditAnInvoiceRequestTest.php
index 99b873d..0e42783 100644
--- a/tests/Requests/Invoices/EditAnInvoiceRequestTest.php
+++ b/tests/Requests/Invoices/EditAnInvoiceRequestTest.php
@@ -4,17 +4,16 @@
use CodebarAg\Bexio\Dto\Invoices\InvoiceDTO;
use CodebarAg\Bexio\Requests\Invoices\EditAnInvoiceRequest;
use CodebarAg\Bexio\Requests\Invoices\FetchAnInvoiceRequest;
+use Saloon\Http\Faking\MockClient;
use Saloon\Http\Faking\MockResponse;
-use Saloon\Laravel\Http\Faking\MockClient;
it('can perform the request', closure: function () {
- $mockClient = new MockClient([
+ $mockClient = MockClient::global([
EditAnInvoiceRequest::class => MockResponse::fixture('Invoices/edit-an-invoice'),
FetchAnInvoiceRequest::class => MockResponse::fixture('Invoices/fetch-an-invoice-edit'),
]);
$connector = new BexioConnector;
- $connector->withMockClient($mockClient);
$invoice = $connector->send(new FetchAnInvoiceRequest(invoice_id: 53))->dto();