PHP code example of mervit / idoklad-v3
1. Go to this page and download the library: Download mervit/idoklad-v3 library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
mervit / idoklad-v3 example snippets
composer
use mervit\iDoklad\iDoklad;
use mervit\iDoklad\auth\iDokladCredentials;
use mervit\iDoklad\iDokladException;
$clientId = 'Your client ID';
$clientSecret = 'Your client secret';
$redirectUri = 'Your redirect URI for OAuth2';
$iDoklad = new iDoklad($clientId, $clientSecret, $redirectUri);
echo '<a href="'.$iDoklad->getAuthenticationUrl().'">Odkaz</a>';
$iDoklad->requestCredentials($_GET['code']);
$credentials = $iDoklad->getCredentials();
echo $credentials->toJson();
$iDoklad->setCredentialsCallback(function($credentials){
file_put_contents('credentials.json', $credentials->toJson());
});
$iDoklad = new iDoklad($clientId, $clientSecret, $redirectUri, $credentials);
$iDoklad->setCredentials($credentials);
$iDoklad->authCCF();
$request = new iDokladRequest('IssuedInvoices');
$response = $iDoklad->sendRequest($request);
$response->getCode();
$response->getData();
$request->addMethodType('POST');
$data = array(
'PurchaserId' => 3739927,
'IssuedInvoiceItems' => [array(
'Name' => 'Testovaci polozka',
'UnitPrice' => 100,
'Amount' => 1
)]
);
$request->addPostParameters($data);
$data = array(
'PurchaserId' => 3739927,
'IssuedInvoiceItems' => [array(
'Name' => 'Testovaci polozka',
'UnitPrice' => 100,
'Amount' => 1
)]
);
$request->post()->addPostParameters($data);
$filter = new iDokladFilter('DocumentNumber', '==', '20170013');
$request->addFilter($filter);
$request->setFilterType('and');
$filterGroup = new \mervit\iDoklad\request\iDokladFilterGroup('or');
$filter2 = new \mervit\iDoklad\request\iDokladFilter('Id', '!eq', '123');
$filterGroup->addFilter($filter2);
$filter3 = new \mervit\iDoklad\request\iDokladFilter('Id', 'eq', '456');
$filterGroup->addFilter($filter3);
$request->addFilter($filterGroup);
$sort = new iDokladSort('DocumentNumber', 'desc');
$request->addSort($sort);
$request->setPage(2);
$request->setPageSize(5);
$request->addSelect('Id');
$request->addSelect('CurrencyId');
$request->addSelect('DeliveryAddress.Name');
$request->addSelect('Items.Id,Items.Name');
$request->addInclude('Currency');
$request->addInclude('Items.PriceListItem.Currency');
$request->addInclude('Currency,Items.PriceListItem.Currency');
$iDoklad->httpExceptionsOn()
$request = new \mervit\iDoklad\request\iDokladRequest('Attachments/{documentId}/{documentType}');
$request->addFile(new CURLFile(path_to_your_file));
$response = $iDoklad->sendRequest($request);
// Generate company name
$companyName = $order->getFirstname() . ' ' . $order->getLastname();
if($order->getCompanyName()){
$companyName = $order->getCompanyName();
}
// Try to find existing company in address book
$filter = new iDokladFilter('CompanyName', '==', $companyName);
$contactRequest = new iDokladRequest('Contacts');
$contactRequest->addFilter($filter);
$contactResponse = $this->sendRequest($contactRequest);
if($contactResponse->getTotalItems() > 0){
$contactId = $contactResponse->getItems()[0]["Id"];
}
// Create or update company in address book
$contactRequest = new iDokladRequest('Contacts');
$contactRequestPostParameters = [];
$contactRequestPostParameters['CountryId'] = 1;
$contactRequestPostParameters['Email'] = $order->getEmail();
$contactRequestPostParameters['Mobile'] = $order->getPhone();
$contactRequestPostParameters['Firstname'] = $order->getFirstname();
$contactRequestPostParameters['Surname'] = $order->getLastname();
$contactRequestPostParameters['CompanyName'] = $companyName;
if($order->getCin()) {
$contactRequestPostParameters['IdentificationNumber'] = $order->getCin();
}
if($order->getVat()){
$contactRequestPostParameters['VatIdentificationNumber'] = $order->getVat();
}
if($order->getAddress()){
$contactRequestPostParameters['Street'] = $order->getAddress();
}
if(isset($contactId)){
$contactRequestPostParameters['Id'] = $contactId;
$contactRequest->addMethodType('PATCH');
} else {
$contactRequest->addMethodType('POST');
}
$contactRequest->addPostParameters($contactRequestPostParameters);
$contactResponse = $this->sendRequest($contactRequest);
$contact = $contactResponse->getData();
// Get default numeric sequence
$numericSequenceRequest = new iDokladRequest('NumericSequences');
$numericSequenceRequest->addFilter(new iDokladFilter('IsDefault', '==', 'true'));
$numericSequenceRequest->addFilter(new iDokladFilter('DocumentType', '==', '0')); // 0 = IssuedInvoices
$numericSequenceResponse = $this->sendRequest($numericSequenceRequest);
$numericSequences = $numericSequenceResponse->getItems();
$defaultNumericSequenceId = $numericSequences[0]['Id'];
$lastDocumentSerialNumber = $numericSequences[0]['LastNumber'];
// Get default payment option
$paymentOptionRequest = new iDokladRequest('PaymentOptions');
$paymentOptionResponse = $this->sendRequest($paymentOptionRequest);
$paymentOptions = $paymentOptionResponse->getItems();
$paymentOptionId = null;
foreach($paymentOptions as $po){
if($po['IsDefault'] == 'true'){
$paymentOptionId = $po['Id'];
break;
}
}
// Create Issued Invoice
$dateOfIssue = new \DateTime();
$dateOfMaturity = clone $dateOfIssue;
$dateOfMaturity->modify('+14 days');
$invoicePostParameters = [];
$invoicePostParameters['PartnerId'] = $contact['Id'];
$invoicePostParameters['CurrencyId'] = 1;
$invoicePostParameters['Description'] = 'Nákup v eshopu';
$invoicePostParameters['DateOfIssue'] = $dateOfIssue->format('Y-m-d');
$invoicePostParameters['DateOfMaturity'] = $dateOfMaturity->format('Y-m-d');
$invoicePostParameters['DateOfTaxing'] = $dateOfIssue->format('Y-m-d');
$invoicePostParameters['DocumentSerialNumber'] = (string)((int) $lastDocumentSerialNumber + 1);
$invoicePostParameters['IsEet'] = false;
$invoicePostParameters['IsIncomeTax'] = true;
$invoicePostParameters['NumericSequenceId'] = $defaultNumericSequenceId;
$invoicePostParameters['PaymentOptionId'] = $paymentOptionId;
$invoicePostParameters['Items'] = [];
foreach ($order->getItems() as $item) {
$invoiceItem = [];
$invoiceItem['Amount'] = $item->getQuantity();
$invoiceItem['PriceType'] = 0; // Cena s daní
$invoiceItem['VatRateType'] = 1; // Základní sazba DPH
$invoiceItem['UnitPrice'] = $item->getPrice();
$invoiceItem['Name'] = $item->getName();
$invoiceItem['DiscountPercentage'] = 0;
$invoiceItem['IsTaxMovement'] = false;
$invoicePostParameters['Items'][] = $invoiceItem;
}
$invoiceRequest = new iDokladRequest('IssuedInvoices');
$invoiceRequest->addMethodType('POST');
$invoiceRequest->addPostParameters($invoicePostParameters);
return $this->sendRequest($invoiceRequest);