<?php
namespace App\Controller;
use App\Service\InvoiceService;
use Psr\Log\LoggerAwareInterface;
use Psr\Log\LoggerAwareTrait;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class InvoiceController extends AbstractController implements LoggerAwareInterface
{
use LoggerAwareTrait;
/**
* @Route("/efinans/einvoice/create", name="efinans_einvoice_create")
*/
public function create(Request $request, InvoiceService $invoiceService)
{
$formData = json_decode($request->getContent(), true);
$params = $formData['params'];
$credentials = $formData['credentials'];
if (count($credentials) === 0) {
$this->json(['status' => false, 'message' => 'Mağaza kullanıcı bilgileri gereklidir.']);
}
$invoiceService->setCredentials($credentials['username'], $credentials['password']);
$requestParams = [
'id' => sprintf('%s%s%s', $credentials['prefix'], date('Y'), ''),
'uuid' => uuid_create(UUID_TYPE_RANDOM),
'datetime' => new \DateTime(),
'vkn' => $this->getParameter('app.efinans.vkn'),
'store' => [
'name' => $params['store']['name'], // 'Merkez',
'address' => $params['store']['address'], // '1675 Sk. No: 1',
'town' => $params['store']['town'], // 'Konak',
'postal_code' => $params['store']['postal_code'], // '35220',
'phone' => $params['store']['phone'], // '02322792315',
],
'customer' => [
'vkn' => $params['customer']['vkn'], // '64867025200',
'name' => 'Ali Emre Ç',
'company' => $params['customer']['company'], // 'Webridge Yazılım Tasarım Bilişim Rek. Hiz.',
'owner' => $params['customer']['owner'], // 'Ali Emre Çakmakoğlu',
'phone' => $params['customer']['phone'], // '05382272616',
'city' => $params['customer']['city'], // 'İzmir',
],
'tax' => number_format($params['tax'], 2), // 1800,
'amount' => number_format($params['amount'], 2), // 10000,
'total_amount' => number_format($params['total_amount'], 2), // 11800,
'item' => [
'serial_number' => $params['item']['serial_number'], // 'ABC2009123456789',
'description' => $params['item']['description'], // 'Hohoho',
'description_more' => $params['item']['description_more'], // 'Lololo',
'product' => $params['item']['product'], // 'Rolex 123'
],
];
$invoice = $invoiceService->createInvoice($requestParams);
if ($invoiceService->hasError()) {
$errors = implode('---', $invoiceService->getErrors());
return $this->json(['error' => ['message' => $errors]]);
}
return $this->json(['invoice' => $invoice]);
}
/**
* @Route("/efinans/einvoice/cancel", name="efinans_einvoice_cancel", methods={"POST"})
*/
public function cancel(Request $request, InvoiceService $invoiceService)
{
$formData = json_decode($request->getContent(), true);
$credentials = $formData['credentials'];
if (count($credentials) === 0) {
$this->json(['status' => false, 'message' => 'Mağaza kullanıcı bilgileri gereklidir.']);
}
$invoiceService->setCredentials($credentials['username'], $credentials['password']);
$response = $invoiceService->cancelInvoice($formData['invoiceUUId']);
return $this->json(['message' => $response]);
}
}