Περιγραφή λειτουργιών
Ακύρωση παραστατικού - CancelInvoice
# production
https://mydatapi.aade.gr/myDATA/CancelInvoice
# development
https://mydataapidev.aade.gr/CancelInvoice
Για την ακύρωση ενός παραστατικού στο σύστημα του ΑΑΔΕ myDATA, χρησιμοποιήστε την κλάση Firebed\AadeMyData\Http\CancelInvoice.
Η ακύρωση παραστατικού γίνεται παρέχοντας το mark του παραστατικού που θέλουμε να ακυρώσουμε.
use Firebed\AadeMyData\Http\CancelInvoice;
use Firebed\AadeMyData\Exceptions\MyDataException;
$cancel = new CancelInvoice();
try{
    $responses = $cancel->handle("1234567890");
} catch (MyDataException $e) {
    echo "Σφάλμα επικοινωνίας: " . $e->getMessage();
}
Για την περίπτωση εκείνη και μόνο που η μέθοδος κληθεί από τρίτο πρόσωπο (όπως εκπρόσωπος Ν.Π. ή λογιστής),
ο ΑΦΜ της οντότητας που εξέδωσε το προς ακύρωση παραστατικό αποστέλλεται μέσω της παραμέτρου entityVatNumber,
διαφορετικά η εν λόγω παράμετρος δε χρειάζεται να αποσταλεί.
use Firebed\AadeMyData\Http\CancelInvoice;
use Firebed\AadeMyData\Exceptions\MyDataException;
$cancel = new CancelInvoice();
try{
    $responses = $cancel->handle(mark: "1234567890", entityVatNumber: "888888888");
} catch (MyDataException $e) {
    echo "Σφάλμα επικοινωνίας: " . $e->getMessage();
}
Δεν υπάρχει δυνατότητα ακύρωσης πολλαπλών παραστατικών ταυτόχρονα.
Λήψη αποτελεσμάτων
Σε περίπτωση επιτυχίας η ακύρωση ως πράξη λαμβάνει το δικό της mark το οποίο επιστρέφεται στον χρήστη και το παραστατικό θεωρείται ακυρωμένο. Σε περίπτωση αποτυχίας επιστρέφεται το αντίστοιχο μήνυμα λάθους.
Το αποτέλεσμα της κλήσης επιστρέφει έναν πίνακα από αντικείμενα τύπου \Firebed\AadeMyData\Models\Response.
use Firebed\AadeMyData\Http\CancelInvoice;
use Firebed\AadeMyData\Exceptions\MyDataException;
try {
    $cancel = new CancelInvoice();
    $responses = $cancel->handle("1234567890");
    
    $response = $responses->first();
    
    if ($response->isSuccessful()) {
        echo "Το παραστατικό ακυρώθηκε με επιτυχία." . PHP_EOL;
        echo "Το mark ακύρωσης του παραστατικού είναι: " . $response->getCancellationMark();
    } else {
        echo "Η ακύρωση απέτυχε. Λόγος: " . $response->getMessage();
    }
} catch (MyDataException $e) {
    echo "Σφάλμα επικοινωνίας: " . $e->getMessage();
}
Παρόλο που η ακύρωση γίνεται πάντα για 1 παραστατικό το αποτέλεσμα επιστρέφεται ως πίνακας αποτελεσμάτων. Αυτό γίνεται για να είναι συμβατό με τις υπόλοιπες μεθόδους που επιστρέφουν πολλαπλά αποτελέσματα. Στην πράξη, ο πίνακας αποτελεσμάτων θα περιέχει μόνο 1 στοιχείο και μπορείτε να έχετε πρόσβαση σ' αυτό μέσω:
- 
$responses->first()όπως στο παραπάνω παράδειγμα
- 
$responses[0]
- 
$responses->offsetGet(0)
- foreach loop
Μετά από επιτυχή ακύρωση, στα αποτελέσματα του RequestTransmittedDocs,
το παραστατικό που μόλις ακυρώσαμε θα εμπεριέχεται στον πίνακα που επιστρέφει η μέθοδος RequestedDoc::getCancelledInvoices().
Επίσης, το αντίστοιχο παραστατικό που επιστρέφεται από τη μέθοδο RequestedDoc::getInvoices θα
επισημαίνεται με τη χρήση του πεδίου cancelledByMark. Η τιμή του πεδίου αυτού είναι ίδια με το
mark ακύρωσης που λάβαμε κατά την ακύρωση του παραστατικού $response->getCancellationMark().
<RequestedDoc>
    <invoicesDoc>
        <invoice>
            <uid>5AD65A46SFD5498SDV416WS5F1VS65VDFS65VDF</uid>
            <mark>800000165789544</mark>
            <cancelledByMark>800000165989544</cancelledByMark>
        </invoice>
    </invoicesDoc>
    <cancelledInvoicesDoc>
        <cancelledInvoice>
            <invoiceMark>800000165789544</invoiceMark>
            <cancellationMark>800000165989544</cancellationMark>
            <cancellationDate>2021-12-12</cancellationDate>
        </cancelledInvoice>
    </cancelledInvoicesDoc>
</RequestedDoc>