FIX: Check if invoice exists before sending, if exists then save

Send correct UF amount if date in future
This commit is contained in:
Juan Pablo Vial
2025-05-16 14:36:20 -04:00
parent 8ba54fd3ad
commit 8ce7d2570d
5 changed files with 45 additions and 12 deletions

View File

@ -1,6 +1,8 @@
<?php
namespace Incoviba\Service\Venta\MediosPago;
use InvalidArgumentException;
use Incoviba\Service\Venta\MediosPago\Toku\{Customer,Subscription,Invoice};
use Incoviba\Common\Ideal;
use Incoviba\Common\Implement\Exception\EmptyResponse;
use Incoviba\Exception\InvalidResult;
@ -8,8 +10,6 @@ use Incoviba\Exception\ServiceAction\Read;
use Incoviba\Model;
use Incoviba\Model\Persona;
use Incoviba\Model\Venta\Propietario;
use InvalidArgumentException;
use Psr\Log\LoggerInterface;
class Toku extends Ideal\Service
{
@ -17,9 +17,9 @@ class Toku extends Ideal\Service
const string SUBSCRIPTION = 'subscription';
const string INVOICE = 'invoice';
protected EndPoint $customer;
protected EndPoint $subscription;
protected EndPoint $invoice;
protected Customer $customer;
protected Subscription $subscription;
protected Invoice $invoice;
public function register(string $type, EndPoint $endPoint): self
{
if (!in_array(strtolower($type), ['customer', 'subscription', 'invoice'])) {
@ -95,12 +95,28 @@ class Toku extends Ideal\Service
$customer = $this->sendPersona($venta->propietario());
$subscription = $this->sendVenta($venta);
$customerInvoices = [];
try {
$customerInvoices = $this->invoice->getByCustomer($customer['toku_id']);
$customerInvoices = array_filter($customerInvoices, function($invoiceRow) use ($subscription) {
return $invoiceRow['subscription'] === $subscription['toku_id'];
});
} catch (EmptyResponse) {}
$invoices = [];
$errors = [];
foreach ($venta->formaPago()->pie->cuotas() as $cuota) {
if (count($cuotas_ids) > 0 and !in_array($cuota->id, $cuotas_ids)) {
continue;
}
if (count($customerInvoices) and in_array($cuota->id, array_column($customerInvoices, 'invoice_external_id'))) {
$invoice = array_find($customerInvoices, function($invoiceRow) use ($cuota) {
return $invoiceRow['invoice_external_id'] === $cuota->id;
});
$invoices []= $invoice;
$this->invoice->save($invoice);
continue;
}
try {
$invoices []= $this->invoice->getById($cuota->id);
} catch (InvalidResult $exception) {
@ -109,7 +125,8 @@ class Toku extends Ideal\Service
'customer' => $customer['toku_id'],
'product_id' => $venta->id,
'subscription' => $subscription['toku_id'],
'cuota' => $cuota
'cuota' => $cuota,
'venta' => $venta
];
if (!$this->invoice->add($invoiceData)) {
throw new EmptyResponse("Could not add Invoice for Cuota {$cuota->id}", $exception);