Skip to content
Merged
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
25 changes: 12 additions & 13 deletions Controller/EditLiquidacionComision.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?php
/**
* This file is part of Comisiones plugin for FacturaScripts
* Copyright (C) 2022-2025 Carlos Garcia Gomez <carlos@facturascripts.com>
* Copyright (C) 2022-2026 Carlos Garcia Gomez <carlos@facturascripts.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
Expand All @@ -20,7 +20,6 @@
namespace FacturaScripts\Plugins\Comisiones\Controller;

use Exception;
use FacturaScripts\Core\Base\DataBase\DataBaseWhere;
use FacturaScripts\Core\Lib\Calculator;
use FacturaScripts\Core\Lib\ExtendedController\BaseView;
use FacturaScripts\Core\Lib\ExtendedController\EditController;
Expand Down Expand Up @@ -214,44 +213,44 @@ protected function getInvoicesFromDataForm(array $data): array
*
* @param array $data
*
* @return DataBaseWhere[]
* @return Where[]
*/
protected function getInvoicesWhere(array $data): array
{
// Basic data filter
$where = [
new DataBaseWhere('facturascli.idempresa', $data['idempresa']),
new DataBaseWhere('facturascli.codserie', $data['codserie']),
new DataBaseWhere('facturascli.codagente', $data['codagente']),
Where::column('facturascli.idempresa', $data['idempresa']),
Where::column('facturascli.codserie', $data['codserie']),
Where::column('facturascli.codagente', $data['codagente']),
];

// Date filter
if (false === empty($data['datefrom'])) {
$where[] = new DataBaseWhere('facturascli.fecha', $data['datefrom'], '>=');
$where[] = Where::column('facturascli.fecha', $data['datefrom'], '>=');
}
if (false === empty($data['dateto'])) {
$where[] = new DataBaseWhere('facturascli.fecha', $data['dateto'], '<=');
$where[] = Where::column('facturascli.fecha', $data['dateto'], '<=');
}

// Status payment filter
if ($data['status'] === self::INSERT_STATUS_CHARGED) {
$where[] = new DataBaseWhere('facturascli.pagada', true);
$where[] = Where::column('facturascli.pagada', true);
}

// Payment source filter
switch ($data['domiciled']) {
case self::INSERT_DOMICILED_DOMICILED:
$where[] = new DataBaseWhere('formaspago.domiciliado', true);
$where[] = Where::column('formaspago.domiciliado', true);
break;

case self::INSERT_DOMICILED_WITHOUT:
$where[] = new DataBaseWhere('formaspago.domiciliado', false);
$where[] = Where::column('formaspago.domiciliado', false);
break;
}

// Customer filter
if (false === empty($data['codcliente'])) {
$where[] = new DataBaseWhere('facturascli.codcliente', $data['codcliente']);
$where[] = Where::column('facturascli.codcliente', $data['codcliente']);
}

// Return completed filter
Expand Down Expand Up @@ -318,7 +317,7 @@ protected function loadDataSettledInvoice($view): void

// Load view data
$view->loadData('', [
new DataBaseWhere('facturascli.idliquidacion', $idsettled),
Where::column('facturascli.idliquidacion', $idsettled),
]);
}

Expand Down
38 changes: 19 additions & 19 deletions Mod/CalculatorMod.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?php
/**
* This file is part of Comisiones plugin for FacturaScripts
* Copyright (C) 2022-2025 Carlos Garcia Gomez <carlos@facturascripts.com>
* Copyright (C) 2022-2026 Carlos Garcia Gomez <carlos@facturascripts.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
Expand All @@ -20,11 +20,11 @@
namespace FacturaScripts\Plugins\Comisiones\Mod;

use Exception;
use FacturaScripts\Core\Contract\CalculatorModInterface;
use FacturaScripts\Core\Model\Base\BusinessDocument;
use FacturaScripts\Core\Model\Base\BusinessDocumentLine;
use FacturaScripts\Core\Model\Base\SalesDocument;
use FacturaScripts\Core\Model\Base\SalesDocumentLine;
use FacturaScripts\Core\Template\CalculatorModClass;
use FacturaScripts\Core\Tools;
use FacturaScripts\Core\Where;
use FacturaScripts\Dinamic\Model\Comision;
Expand All @@ -38,7 +38,7 @@
* @author Carlos Garcia Gomez <carlos@facturascripts.com>
* @author Daniel Fernández Giménez <contacto@danielfg.es>
*/
class CalculatorMod implements CalculatorModInterface
class CalculatorMod extends CalculatorModClass
{
/**
* Commission ratio.
Expand All @@ -61,7 +61,7 @@ class CalculatorMod implements CalculatorModInterface
*/
protected $settlement;

public function apply(BusinessDocument &$doc, array &$lines): bool
public function apply(BusinessDocument $doc, array &$lines): string
{
if ($doc instanceof SalesDocument) {
// cargamos comisiones y penalizaciones aplicables
Expand All @@ -73,14 +73,14 @@ public function apply(BusinessDocument &$doc, array &$lines): bool
$this->settlement->load($doc->idliquidacion);
}
}
return true;
return $this->done();
}

public function calculate(BusinessDocument &$doc, array &$lines): bool
public function calculate(BusinessDocument $doc, array &$lines): string
{
// si no hay totalcomision o ya hay una liquidación facturada, no se calcula la comisión
if (false === $doc->hasColumn('totalcomision') || $this->isInvoiced($doc)) {
return true;
return $this->done();
}

// calculamos el total de comisiones
Expand All @@ -92,50 +92,50 @@ public function calculate(BusinessDocument &$doc, array &$lines): bool
$decimals = Tools::settings('default', 'decimals', 2);
$doc->totalcomision = round($totalCommission, $decimals);

return true;
return $this->done();
}

public function calculateLine(BusinessDocument $doc, BusinessDocumentLine &$line): bool
public function calculateLine(BusinessDocument $doc, BusinessDocumentLine $line): string
{
// si no hay porcomision o ya hay una liquidación facturada, no se calcula la comisión
if (false === $line->hasColumn('porcomision') || $this->isInvoiced($doc)) {
return true;
return $this->done();
}

// si se ha seleccionado editar la comisión no la procesamos
if ($doc->hasColumn('editcomision') && $doc->editcomision) {
return true;
return $this->done();
}

// calculamos el porcentaje de comisión
$line->porcomision = $line->suplido ? 0.0 : $this->getCommission($line);

return true;
return $this->done();
}

public function clear(BusinessDocument &$doc, array &$lines): bool
public function clear(BusinessDocument $doc, array &$lines): string
{
// si no hay totalcomision o ya hay una liquidación facturada, no se calcula la comisión
if (false === $doc->hasColumn('totalcomision') || $this->isInvoiced($doc)) {
return true;
return $this->done();
}

$doc->totalcomision = 0.0;

// si se ha seleccionado editar la comisión no la procesamos
if ($doc->hasColumn('editcomision') || $doc->editcomision) {
return true;
return $this->done();
}

foreach ($lines as $line) {
$line->porcomision = 0.0;
}
return true;
return $this->done();
}

public function getSubtotals(array &$subtotals, BusinessDocument $doc, array $lines): bool
public function updateSubtotals(array &$subtotals, BusinessDocument $doc, array $lines): string
{
return true;
return $this->done();
}

protected function getCommission(SalesDocumentLine $line): float
Expand Down Expand Up @@ -254,7 +254,7 @@ protected function loadPenalties(int $idempresa, ?string $codagente): void
}
}

private function isInvoiced(BusinessDocument &$doc): bool
private function isInvoiced(BusinessDocument $doc): bool
{
return $doc->hasColumn('idliquidacion')
&& isset($this->settlement)
Expand Down
8 changes: 4 additions & 4 deletions Model/Join/LiquidacionComisionFactura.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?php
/**
* This file is part of Comisiones plugin for FacturaScripts
* Copyright (C) 2022-2025 Carlos Garcia Gomez <carlos@facturascripts.com>
* Copyright (C) 2022-2026 Carlos Garcia Gomez <carlos@facturascripts.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
Expand All @@ -20,8 +20,8 @@
namespace FacturaScripts\Plugins\Comisiones\Model\Join;

use Exception;
use FacturaScripts\Core\Base\DataBase\DataBaseWhere;
use FacturaScripts\Core\KernelException;
use FacturaScripts\Core\Where;
use FacturaScripts\Core\Model\Base\JoinModel;
use FacturaScripts\Core\Tools;
use FacturaScripts\Dinamic\Model\FacturaCliente;
Expand Down Expand Up @@ -53,12 +53,12 @@ public function __construct(array $data = [])
* according to the where filter.
*
* @param int $settled
* @param DataBaseWhere[] $where
* @param Where[] $where
* @throws KernelException
*/
public function addInvoiceToSettle(int $settled, array $where): void
{
$where[] = new DataBaseWhere('facturascli.idliquidacion', null, 'IS');
$where[] = Where::column('facturascli.idliquidacion', null, 'IS');
$invoices = $this->all($where);
if (empty($invoices)) {
return;
Expand Down
2 changes: 1 addition & 1 deletion facturascripts.ini
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name = 'Comisiones'
description = 'Añade comisiones y liquidaciones a los agentes.'
version = 2.24
min_version = 2025.61
min_version = 2026
Loading