Skip to content

Commit

Permalink
Migrate to PHP 8.1
Browse files Browse the repository at this point in the history
Synchronized with myDATA v.1.0.5
Introduced PHP enum cases instead of class constants
Better XML parsing
  • Loading branch information
firebed committed Mar 7, 2022
1 parent 3fe317d commit bc2be29
Show file tree
Hide file tree
Showing 75 changed files with 3,205 additions and 3,195 deletions.
37 changes: 24 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@ This package provides an expressive, fluent interface to ΑΑΔΕ myDATA invoici

## Requirements

- PHP >= 8.0
| Version | PHP | myDATA |
|---------|-----|--------|
| ^v.2.0 | 8.1 | v1.0.5 |
| ^v.1.0 | 8.0 | v1.0.3 |

- guzzlehttp/guzzle >= 7.0

## Installation
Expand All @@ -23,7 +27,8 @@ By default, the package's classes are loaded automatically. There is nothing for

## Documentation

<p>Official documentation: <a href="https://www.aade.gr/sites/default/files/2021-09/myDATA%20API%20Documentation_ERP_v1.0.3_official.pdf">AADE myDATA REST API documentation.</a></p>
<p>Official myDATA webpage: <a href="https://www.aade.gr/mydata">AADE myDATA</a></p>
<p>Official documentation: <a href="https://www.aade.gr/sites/default/files/2022-02/myDATA%20API%20Documentation_v1.0.5_official_erp.pdf">AADE myDATA REST API v1.0.5.</a></p>
<p>In order to use this package, you will need first a <b>user id</b> and a <b>subscription key</b>. You can get these credentials by signing up to mydata rest api.</p>
<div>Development: <a href="https://mydata-register.azurewebsites.net/"># to mydata development api</a></div>
<div>Production: <a href="https://www.aade.gr/mydata"># to mydata production api</a></div>
Expand All @@ -49,25 +54,25 @@ For example, if you set the counterpart before the issuer myDATA will throw an e
<p>Although, this behavior might have changed in the meantime, and it's time-consuming and pointless to track all these minor changes.</p>

```php
$invoiceType = new InvoiceType();
$invoiceType->setIssuer(...); // Firebed\AadeMyData\Models\Issuer
$invoiceType->setCounterpart(...); // Firebed\AadeMyData\Models\Counterpart
$invoiceType->setInvoiceHeader(...); // Firebed\AadeMyData\Models\InvoiceHeaderType
$invoiceType->addPaymentMethod(...); // Firebed\AadeMyData\Models\PaymentMethodDetailType
$invoiceType->addInvoiceRow(...); // Firebed\AadeMyData\Models\InvoiceRowType
$invoiceType->setInvoiceSummary(...); // Firebed\AadeMyData\Models\InvoiceSummaryType
$invoice = new Invoice();
$invoice->setIssuer($issuer); // Firebed\AadeMyData\Models\Issuer
$invoice->setCounterpart($counterpart); // Firebed\AadeMyData\Models\Counterpart
$invoice->setInvoiceHeader($invoiceHeader); // Firebed\AadeMyData\Models\InvoiceHeader
$invoice->addPaymentMethod($paymentMethod); // Firebed\AadeMyData\Models\PaymentMethodDetail
$invoice->addInvoiceRow($invoiceRow); // Firebed\AadeMyData\Models\InvoiceRow
$invoice->setInvoiceSummary($invoiceSummary); // Firebed\AadeMyData\Models\InvoiceSummary

$invoicesDoc = new InvoicesDoc();
$invoicesDoc->addInvoice($invoiceType);
$invoicesDoc->addInvoice($invoice);
// You can add multiple invoices at once

// Create the request
$sendInvoices = new SendInvoices();
$response = $sendInvoices->handle($invoicesDoc);

$errors = [];
foreach ($response->getResponseTypes() as $responseType) {
if ($responseType->getStatusCode() === 'Success') {
foreach ($response as $responseType) {
if ($responseType->isSuccessful()) {
// This invoice was successfully registered. Typically, you should have an invoice object of your
// own and an invoice reference from myDATA, and you will have to relate these together.
// Each responseType has an index value which corresponds to the index of the invoice in
Expand All @@ -78,13 +83,19 @@ foreach ($response->getResponseTypes() as $responseType) {
$uid = $responseType->getInvoiceUid();
$mark = $responseType->getInvoiceMark();
$cancelledByMark = $responseType->getCancellationMark();

dd(compact('index', 'uid', 'mark', 'cancelledByMark'));
} else {
// There were some errors for this specific invoice. See errors for details.
foreach ($responseType->getErrors()->getErrorsTypes() as $error) {
foreach ($responseType->getErrors() as $error) {
$errors[$responseType->getIndex()][] = $error->getCode() . ': ' . $error->getMessage();
}
}
}

if (!empty($errors)) {
dd(["Errors: " => $errors]);
}
```

### Cancelling invoices
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
}
],
"require": {
"php": "^8.0",
"php": "^8.1",
"ext-simplexml": "*",
"guzzlehttp/guzzle": "^7.0.1"
},
Expand Down
74 changes: 37 additions & 37 deletions config/class_map.php
Original file line number Diff line number Diff line change
@@ -1,56 +1,56 @@
<?php

use Firebed\AadeMyData\Models\InvoiceType;
use Firebed\AadeMyData\Models\AddressType;
use Firebed\AadeMyData\Models\Address;
use Firebed\AadeMyData\Models\CancelledInvoice;
use Firebed\AadeMyData\Models\CancelledInvoicesDoc;
use Firebed\AadeMyData\Models\CancelledInvoiceType;
use Firebed\AadeMyData\Models\ContinuationTokenType;
use Firebed\AadeMyData\Models\ContinuationToken;
use Firebed\AadeMyData\Models\Counterpart;
use Firebed\AadeMyData\Models\Error;
use Firebed\AadeMyData\Models\Errors;
use Firebed\AadeMyData\Models\ErrorType;
use Firebed\AadeMyData\Models\ExpensesClassificationType;
use Firebed\AadeMyData\Models\IncomeClassificationType;
use Firebed\AadeMyData\Models\InvoiceExpensesClassificationType;
use Firebed\AadeMyData\Models\InvoiceHeaderType;
use Firebed\AadeMyData\Models\InvoiceIncomeClassificationType;
use Firebed\AadeMyData\Models\InvoiceRowType;
use Firebed\AadeMyData\Models\ExpensesClassification;
use Firebed\AadeMyData\Models\IncomeClassification;
use Firebed\AadeMyData\Models\Invoice;
use Firebed\AadeMyData\Models\InvoiceDetails;
use Firebed\AadeMyData\Models\InvoiceExpensesClassification;
use Firebed\AadeMyData\Models\InvoiceHeader;
use Firebed\AadeMyData\Models\InvoiceIncomeClassification;
use Firebed\AadeMyData\Models\InvoicesDoc;
use Firebed\AadeMyData\Models\InvoiceSummaryType;
use Firebed\AadeMyData\Models\InvoiceSummary;
use Firebed\AadeMyData\Models\Issuer;
use Firebed\AadeMyData\Models\PaymentMethodDetailType;
use Firebed\AadeMyData\Models\PaymentMethodDetail;
use Firebed\AadeMyData\Models\PaymentMethods;
use Firebed\AadeMyData\Models\RequestedDoc;
use Firebed\AadeMyData\Models\Response;
use Firebed\AadeMyData\Models\ResponseDoc;
use Firebed\AadeMyData\Models\ResponseType;
use Firebed\AadeMyData\Models\ShipType;
use Firebed\AadeMyData\Models\Ship;
use Firebed\AadeMyData\Models\TaxesTotals;
use Firebed\AadeMyData\Models\TaxTotalsType;
use Firebed\AadeMyData\Models\TaxTotals;

return [
'InvoicesDoc' => InvoicesDoc::class,
'invoicesDoc' => InvoicesDoc::class,
'invoice' => InvoiceType::class,
'issuer' => Issuer::class,
'counterpart' => Counterpart::class,
'address' => AddressType::class,
'invoiceHeader' => InvoiceHeaderType::class,
'paymentMethods' => PaymentMethods::class,
'paymentMethodDetails' => PaymentMethodDetailType::class,
'invoiceDetails' => InvoiceRowType::class,
'expensesClassification' => ExpensesClassificationType::class,
'incomeClassification' => IncomeClassificationType::class,
'invoiceSummary' => InvoiceSummaryType::class,
'taxesTotals' => TaxesTotals::class,
'taxes' => TaxTotalsType::class,
'dienergia' => ShipType::class,
'RequestedDoc' => RequestedDoc::class,
'continuationToken' => ContinuationTokenType::class,
'ResponseDoc' => ResponseDoc::class,
'response' => ResponseType::class,
'incomeClassificationsDoc' => InvoiceIncomeClassificationType::class,
'expensesClassificationsDoc' => InvoiceExpensesClassificationType::class,
'address' => Address::class,
'cancelledInvoice' => CancelledInvoice::class,
'cancelledInvoicesDoc' => CancelledInvoicesDoc::class,
'cancelledInvoice' => CancelledInvoiceType::class,
'continuationToken' => ContinuationToken::class,
'counterpart' => Counterpart::class,
'dienergia' => Ship::class,
'error' => Error::class,
'errors' => Errors::class,
'error' => ErrorType::class,
'expensesClassification' => ExpensesClassification::class,
'expensesClassificationsDoc' => InvoiceExpensesClassification::class,
'incomeClassification' => IncomeClassification::class,
'incomeClassificationsDoc' => InvoiceIncomeClassification::class,
'invoice' => Invoice::class,
'invoiceDetails' => InvoiceDetails::class,
'invoiceHeader' => InvoiceHeader::class,
'invoiceSummary' => InvoiceSummary::class,
'invoicesDoc' => InvoicesDoc::class,
'issuer' => Issuer::class,
'paymentMethodDetails' => PaymentMethodDetail::class,
'paymentMethods' => PaymentMethods::class,
'response' => Response::class,
'taxes' => TaxTotals::class,
'taxesTotals' => TaxesTotals::class,
];
Original file line number Diff line number Diff line change
@@ -1,95 +1,95 @@
<?php

namespace Firebed\AadeMyData\Models\Enums;
namespace Firebed\AadeMyData\Enums;

class ExpenseClassificationCategory
enum ExpenseClassificationCategory: string
{
/**
* Αγορές Εμπορευμάτων (-) / (+)
*/
public const CATEGORY_2_1 = "category2_1";
case CATEGORY_2_1 = "category2_1";


/**
* Αγορές Α'-Β' Υλών (-) / (+)
*/
public const CATEGORY_2_2 = "category2_2";
case CATEGORY_2_2 = "category2_2";


/**
* Λήψη Υπηρεσιών (-) / (+)
*/
public const CATEGORY_2_3 = "category2_3";
case CATEGORY_2_3 = "category2_3";


/**
* Γενικά Έξοδα με δικαίωμα έκπτωσης ΦΠΑ (-) / (+)
*/
public const CATEGORY_2_4 = "category2_4";
case CATEGORY_2_4 = "category2_4";


/**
* Γενικά Έξοδα χωρίς δικαίωμα έκπτωσης ΦΠΑ (-) / (+)
*/
public const CATEGORY_2_5 = "category2_5";
case CATEGORY_2_5 = "category2_5";


/**
* Αμοιβές και Παροχές προσωπικού (-) / (+)
*/
public const CATEGORY_2_6 = "category2_6";
case CATEGORY_2_6 = "category2_6";


/**
* Αγορές Παγίων (-) / (+)
*/
public const CATEGORY_2_7 = "category2_7";
case CATEGORY_2_7 = "category2_7";


/**
* Αποσβέσεις Παγίων (-) / (+)
*/
public const CATEGORY_2_8 = "category2_8";
case CATEGORY_2_8 = "category2_8";


/**
* Έξοδα για λ/σμο τρίτων (-) / (+)
*/
public const CATEGORY_2_9 = "category2_9";
case CATEGORY_2_9 = "category2_9";


/**
* Έξοδα προηγούμενων χρήσεων (-) / (+)
*/
public const CATEGORY_2_10 = "category2_10";
case CATEGORY_2_10 = "category2_10";


/**
* Έξοδα επομένων χρήσεων (-) / (+)
*/
public const CATEGORY_2_11 = "category2_11";
case CATEGORY_2_11 = "category2_11";


/**
* Λοιπές Εγγραφές Τακτοποίησης Εξόδων (-) / (+)
*/
public const CATEGORY_2_12 = "category2_12";
case CATEGORY_2_12 = "category2_12";


/**
* Αποθέματα Έναρξης Περιόδου (-) / (+)
*/
public const CATEGORY_2_13 = "category2_13";
case CATEGORY_2_13 = "category2_13";


/**
* Αποθέματα Λήξης Περιόδου (-) / (+)
*/
public const CATEGORY_2_14 = "category2_14";
case CATEGORY_2_14 = "category2_14";


/**
* Λοιπά Πληροφοριακά Στοιχεία Εξόδων (-) / (+)
*/
public const CATEGORY_2_95 = "category2_95";
case CATEGORY_2_95 = "category2_95";
}
Loading

0 comments on commit bc2be29

Please # to comment.