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
50 changes: 46 additions & 4 deletions Core/Lib/AjaxForms/CommonSalesPurchases.php
Original file line number Diff line number Diff line change
Expand Up @@ -405,15 +405,25 @@ protected static function idestado(TransformerDocument $model, string $jsName):

// añadimos los estados posibles
$options = [];
$modals = [];
foreach ($model->getAvailableStatus() as $sta) {
// si está seleccionado o no activo, lo saltamos
if ($sta->idestado === $model->idestado || false === $sta->activo) {
continue;
}

$options[] = '<a class="dropdown-item' . static::idestadoTextColor($sta) . '"'
. ' href="#" onclick="return ' . $jsName . '(\'save-status\', \'' . $sta->idestado . '\', this);">'
. '<i class="' . static::idestadoIcon($sta, true) . ' fa-fw"></i> ' . $sta->nombre . '</a>';
if ($sta->generadoc) {
// abrimos un modal para pedir la fecha del nuevo documento
$modalId = 'modalNewDocDate-' . $sta->idestado;
$options[] = '<a class="dropdown-item' . static::idestadoTextColor($sta) . '"'
. ' href="#" data-bs-toggle="modal" data-bs-target="#' . $modalId . '">'
. '<i class="' . static::idestadoIcon($sta, true) . ' fa-fw"></i> ' . $sta->nombre . '</a>';
$modals[] = static::modalNewDocDate($sta->idestado, $sta->nombre, $modalId, $jsName);
} else {
$options[] = '<a class="dropdown-item' . static::idestadoTextColor($sta) . '"'
. ' href="#" onclick="return ' . $jsName . '(\'save-status\', \'' . $sta->idestado . '\', this);">'
. '<i class="' . static::idestadoIcon($sta, true) . ' fa-fw"></i> ' . $sta->nombre . '</a>';
}
}

// añadimos la opción de agrupar o partir (excepto facturas y documentos no editables)
Expand All @@ -433,7 +443,8 @@ protected static function idestado(TransformerDocument $model, string $jsName):
. '<div class="dropdown-menu dropdown-menu-right">' . implode('', $options) . '</div>'
. '</div>'
. '</div>'
. '</div>';
. '</div>'
. implode('', $modals);
}

protected static function idestadoIcon(EstadoDocumento $status, bool $alternative = false): string
Expand All @@ -456,6 +467,37 @@ protected static function idestadoTextColor(EstadoDocumento $status): string
return false === $status->editable && empty($status->actualizastock) ? ' text-danger' : '';
}

protected static function modalNewDocDate(int $idestado, string $nombre, string $modalId, string $jsName): string
{
return '<div class="modal fade" id="' . $modalId . '" tabindex="-1" aria-hidden="true">'
. '<div class="modal-dialog modal-dialog-centered">'
. '<div class="modal-content">'
. '<div class="modal-header">'
. '<h5 class="modal-title"><i class="fa-solid fa-forward fa-fw"></i> ' . $nombre . '</h5>'
. '<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="' . Tools::trans('close') . '"></button>'
. '</div>'
. '<div class="modal-body">'
. '<div class="mb-2">'
. Tools::trans('date')
. '<input type="date" id="new-doc-date-' . $idestado . '" value="' . date('Y-m-d') . '" class="form-control" required/>'
. '</div>'
. '</div>'
. '<div class="modal-footer">'
. '<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">' . Tools::trans('close') . '</button>'
. '<button type="button" class="btn btn-success btn-spin-action" data-bs-dismiss="modal" onclick="(function(){'
. 'var fecha = document.getElementById(\'new-doc-date-' . $idestado . '\').value;'
. 'var form = document.forms[\'salesForm\'] || document.forms[\'purchasesForm\'];'
. 'var input = document.createElement(\'input\');'
. 'input.type = \'hidden\'; input.name = \'new-doc-date\'; input.value = fecha;'
. 'form.appendChild(input);'
. $jsName . '(\'save-status\', \'' . $idestado . '\');'
. '})()">' . Tools::trans('accept') . '</button>'
. '</div>'
. '</div>'
. '</div>'
. '</div>';
}

public static function modalDocList(array $documents, string $title, string $id): string
{
$list = '';
Expand Down
9 changes: 9 additions & 0 deletions Core/Lib/AjaxForms/PurchasesController.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

use FacturaScripts\Core\Base\DataBase\DataBaseWhere;
use FacturaScripts\Core\DataSrc\Series;
use FacturaScripts\Core\Lib\BusinessDocumentGenerator;
use FacturaScripts\Core\Lib\Calculator;
use FacturaScripts\Core\Lib\ExtendedController\BaseView;
use FacturaScripts\Core\Lib\ExtendedController\DocFilesTrait;
Expand Down Expand Up @@ -497,13 +498,21 @@ protected function saveStatusAction(): bool
$model = $this->getModel();
$model->idestado = (int)$this->request->input('selectedLine');

$formData = json_decode($this->request->input('data'), true);
$newDocDate = $this->request->input('new-doc-date') ?? ($formData['new-doc-date'] ?? null);
if ($newDocDate) {
BusinessDocumentGenerator::setNewDocDate($newDocDate);
}

try {
if (false === $model->save()) {
BusinessDocumentGenerator::setNewDocDate(null);
$this->db()->rollback();
$this->sendJsonWithLogs(['ok' => false]);
return false;
}
} catch (Throwable $e) {
BusinessDocumentGenerator::setNewDocDate(null);
$this->db()->rollback();
Tools::log()->error($e->getMessage());
$this->sendJsonWithLogs(['ok' => false]);
Expand Down
9 changes: 9 additions & 0 deletions Core/Lib/AjaxForms/SalesController.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

use FacturaScripts\Core\Base\DataBase\DataBaseWhere;
use FacturaScripts\Core\DataSrc\Series;
use FacturaScripts\Core\Lib\BusinessDocumentGenerator;
use FacturaScripts\Core\Lib\Calculator;
use FacturaScripts\Core\Lib\ExtendedController\BaseView;
use FacturaScripts\Core\Lib\ExtendedController\DocFilesTrait;
Expand Down Expand Up @@ -511,13 +512,21 @@ protected function saveStatusAction(): bool
$model = $this->getModel();
$model->idestado = (int)$this->request->input('selectedLine');

$formData = json_decode($this->request->input('data'), true);
$newDocDate = $this->request->input('new-doc-date') ?? ($formData['new-doc-date'] ?? null);
if ($newDocDate) {
BusinessDocumentGenerator::setNewDocDate($newDocDate);
}

try {
if (false === $model->save()) {
BusinessDocumentGenerator::setNewDocDate(null);
$this->db()->rollback();
$this->sendJsonWithLogs(['ok' => false]);
return false;
}
} catch (Throwable $e) {
BusinessDocumentGenerator::setNewDocDate(null);
$this->db()->rollback();
Tools::log()->error($e->getMessage());
$this->sendJsonWithLogs(['ok' => false]);
Expand Down
13 changes: 12 additions & 1 deletion Core/Lib/BusinessDocumentGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ class BusinessDocumentGenerator
/** @var array */
protected $lastDocs = [];

/** @var string|null */
private static $newDocDate = null;

/** @var bool */
private static $sameDate = false;

Expand Down Expand Up @@ -84,7 +87,10 @@ public function generate(BusinessDocument $prototype, string $newClass, array $l
// assign the user
$newDoc->nick = Session::user()->nick;

if (self::$sameDate) {
if (self::$newDocDate) {
$newDoc->fecha = self::$newDocDate;
self::$newDocDate = null;
} elseif (self::$sameDate) {
$newDoc->fecha = $prototype->fecha;
$newDoc->hora = $prototype->hora;
}
Expand Down Expand Up @@ -122,6 +128,11 @@ public function getLastDocs(): array
return $this->lastDocs;
}

public static function setNewDocDate(?string $date): void
{
self::$newDocDate = $date;
}

public static function setSameDate(bool $value)
{
self::$sameDate = $value;
Expand Down
Loading
Loading