Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 5 additions & 15 deletions Core/Lib/AjaxForms/AccountingHeaderHTML.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,9 @@
use FacturaScripts\Core\DataSrc\Empresas;
use FacturaScripts\Core\Lib\CodePatterns;
use FacturaScripts\Core\Tools;
use FacturaScripts\Core\Where;
use FacturaScripts\Dinamic\Model\Asiento;
use FacturaScripts\Dinamic\Model\ConceptoPartida;
use FacturaScripts\Dinamic\Model\Diario;
use FacturaScripts\Dinamic\Model\FacturaCliente;
use FacturaScripts\Dinamic\Model\FacturaProveedor;

/**
* Description of AccountingHeaderHTML
Expand Down Expand Up @@ -90,19 +87,12 @@ protected static function documento(Asiento $model): string
return '';
}

// el documento original puede ser una factura de venta/compra o, en los
// pagos, el recibo. getDoc() lo resuelve a partir del idasiento.
$link = '';
$facturaCliente = new FacturaCliente();
$where = [
Where::eq('codigo', $model->documento),
Where::eq('idasiento', $model->idasiento),
];
if ($facturaCliente->loadWhere($where)) {
$link = $facturaCliente->url();
} else {
$facturaProveedor = new FacturaProveedor();
if ($facturaProveedor->loadWhere($where)) {
$link = $facturaProveedor->url();
}
$doc = $model->getDoc();
if ($doc !== null && method_exists($doc, 'url')) {
$link = $doc->url();
}

if ($link) {
Expand Down
41 changes: 41 additions & 0 deletions Core/Model/Asiento.php
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,47 @@ public function clear(): void
$this->operacion = self::OPERATION_GENERAL;
}

/**
* Devuelve el documento original que generó este asiento (factura de venta o
* compra, o el recibo en el caso de los pagos) o null si no se puede localizar.
*
* En FacturaScripts cada documento guarda su idasiento, así que resolvemos el
* enlace al revés: buscamos qué documento apunta a este asiento. En los pagos
* devolvemos el recibo, que es el documento con el que se relaciona el asiento.
*
* @return mixed|null
*/
public function getDoc()
{
if (empty($this->idasiento)) {
return null;
}

$models = ['FacturaCliente', 'FacturaProveedor', 'PagoCliente', 'PagoProveedor'];
foreach ($models as $model) {
$class = '\\FacturaScripts\\Dinamic\\Model\\' . $model;
if (false === class_exists($class)) {
continue;
}

$docs = (new $class())->all([Where::eq('idasiento', $this->idasiento)], [], 0, 1);
if (empty($docs)) {
continue;
}

$doc = $docs[0];

// en los pagos el documento relacionado con el asiento es el recibo
if (in_array($doc->modelClassName(), ['PagoCliente', 'PagoProveedor'], true)) {
return $doc->getReceipt();
}

return $doc;
}

return null;
}

public function delete(): bool
{
if (false === $this->editable()) {
Expand Down