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
1 change: 1 addition & 0 deletions .php-cs-fixer.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
->exclude('files')
->exclude('node_modules')
->exclude('vendor')
->exclude('storage')
->ignoreDotFiles(true)
->ignoreVCS(true)
->in(__DIR__);
Expand Down
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@
"Modules\\StatiContratto\\": ["modules/stati_contratto/custom/src/", "modules/stati_contratto/src/"],
"Modules\\StatiOrdine\\": ["modules/stati_ordine/custom/src/", "modules/stati_ordine/src/"],
"Modules\\TipiIntervento\\": ["modules/tipi_intervento/custom/src/", "modules/tipi_intervento/src/"],
"Modules\\TipiDocumento\\": ["modules/tipi_documento/custom/src/", "modules/tipi_documento/src/"],
"Modules\\CategorieDocumentali\\": ["modules/categorie_documenti/custom/src/", "modules/categorie_documenti/src/"],
"Modules\\PianiSconto\\": ["modules/piano_sconto/custom/src/", "modules/piano_sconto/src/"],
"Modules\\Impianti\\": ["modules/impianti/custom/src/", "modules/impianti/src/"],
Expand Down
4 changes: 2 additions & 2 deletions modules/impostazioni/src/API/ImpostazioneResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@
controller: ListImpostazioniController::class,
paginationEnabled: false,
parameters: [
'ricerca' => new QueryParameter(property: 'hydra:freetextQuery', required: false),
'sezione' => new QueryParameter(property: 'hydra:freetextQuery', required: false),
'ricerca' => new QueryParameter(required: false),
'sezione' => new QueryParameter(required: false),
]
),
new Get(
Expand Down
8 changes: 4 additions & 4 deletions modules/tipi_documento/ajax/select.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,16 @@

switch ($resource) {
case 'tipi_documento':
$query = 'SELECT `co_tipi_documento`.`id`, `co_tipi_documento_lang`.`title` AS descrizione FROM `co_tipi_documento` |where| ORDER BY `title` ASC';
$query = 'SELECT `co_tipi_documento`.`id`, `co_tipi_documento_lang`.`title` AS descrizione FROM `co_tipi_documento` LEFT JOIN `co_tipi_documento_lang` ON (`co_tipi_documento`.`id` = `co_tipi_documento_lang`.`id_record` AND `co_tipi_documento_lang`.`id_lang` = '.prepare(Locale::getDefault()->id).') |where| ORDER BY `title` ASC';

$where[] = '`co_tipi_documento`.`enabled` = 1';
$where[] = '`dir`='.prepare($superselect['dir']);
$where[] = '`co_tipi_documento`.`dir`='.prepare($superselect['dir']);

foreach ($elements as $element) {
$filter[] = '`id`='.prepare($element);
$filter[] = '`co_tipi_documento`.`id`='.prepare($element);
}
if (!empty($search)) {
$search_fields[] = '`title` LIKE '.prepare('%'.$search.'%');
$search_fields[] = '`co_tipi_documento_lang`.`title` LIKE '.prepare('%'.$search.'%');
}

$custom['link'] = 'module:Tipi documento';
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?php

namespace Modules\TipiDocumento\API\Controllers;

use API\Controllers\BaseController;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Models\Locale;
use Modules\Fatture\Tipo;
use Modules\TipiDocumento\API\Controllers\Models\CreateTipiDocumentoRequest;
use Modules\TipiDocumento\API\Controllers\Models\CreateTipiDocumentoResponse;
use Symfony\Component\HttpKernel\Exception\ConflictHttpException;

final class CreateTipiDocumentoController extends BaseController
{
public function __invoke(Request $request): JsonResponse
{
$data = $this->init($request, CreateTipiDocumentoRequest::class);

$tipo_new = Tipo::where('name', $data->name)->where('dir', '=', $data->dir)->where('codice_tipo_documento_fe', '=', $data->codice_tipo_documento_fe)->first();

if (!empty($tipo_new)) {
throw new ConflictHttpException(tr('Questa combinazione di nome, codice e direzione è già stata utilizzata per un altro tipo di documento.'));
}

$tipo = Tipo::build($data->dir, $data->codice_tipo_documento_fe);
if (Locale::getDefault()->id == Locale::getPredefined()->id) {
$tipo->name = $data->name;
}
$id_record = database()->lastInsertedID();
$tipo->save();

$response = new CreateTipiDocumentoResponse();
$response->id = $id_record;
$response->text = $data->name;

return new JsonResponse($response);
}

protected function hasAccess($request): bool
{
return $this->hasModuleWriteAccess('Tipi documento');
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

namespace Modules\TipiDocumento\API\Controllers;

use API\Controllers\BaseController;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Modules\Fatture\Tipo;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

final class DeleteTipiDocumentoController extends BaseController
{
public function __invoke(Request $request): JsonResponse
{
$this->init($request);
$id_record = $request->route('id');

$tipo = Tipo::find($id_record);
if (!$tipo) {
throw new NotFoundHttpException();
}

$documenti = $dbo->fetchNum('SELECT `id` FROM `co_documenti` WHERE `id_tipo_documento` ='.prepare($id_record));

if (empty($documenti)) {
Tipo::destroy($id_record);
} else {
$tipo->deleted_at = date();
$tipo->predefined = 0;
$tipo->enabled = 0;
$tipo->save();
}

return new JsonResponse();
}

protected function hasAccess($request): bool
{
return $this->hasModuleReadAccess('Tipi documento');
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

namespace Modules\TipiDocumento\API\Controllers;

use API\Controllers\BaseController;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Modules\Fatture\Tipo;
use Modules\TipiDocumento\API\TipiDocumentoResource;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

final class GetTipiDocumentoController extends BaseController
{
public function __invoke(Request $request): JsonResponse
{
$this->init($request);

$id_record = $request->route('id');

$tipo = Tipo::find($id_record);
if (empty($tipo)) {
throw new NotFoundHttpException();
}
$response = TipiDocumentoResource::fromModel($tipo);

return new JsonResponse($response);
}

protected function hasAccess($request): bool
{
return $this->hasModuleReadAccess('Tipi documento');
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace Modules\TipiDocumento\API\Controllers\Models;

class CreateTipiDocumentoRequest
{
public string $name;
public string $dir;
public string $codice_tipo_documento_fe;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?php

namespace Modules\TipiDocumento\API\Controllers\Models;

class CreateTipiDocumentoResponse
{
public string $id;
public string $text;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace Modules\TipiDocumento\API\Controllers\Models;

use DTO\SelectOptionsRequest;

final class SelectOptionsTipiDocumentoRequest extends SelectOptionsRequest
{
public string $dir;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php

namespace Modules\TipiDocumento\API\Controllers\Models;

use DTO\SelectOptionsRecord;
use DTO\SelectOptionsResponse;

final class SelectOptionsTipiDocumentoRecord extends SelectOptionsRecord
{
public string $descrizione;
public string $title;
}

final class SelectOptionsTipiDocumentoResponse extends SelectOptionsResponse
{
/**
* @var SelectOptionsTipiDocumentoRecord[]
*/
public array $results = [];
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

namespace Modules\TipiDocumento\API\Controllers\Models;

use Symfony\Component\Serializer\Attribute\Ignore;

class UpdateTipiDocumentoRequest
{
public string $name;
public string $dir;
public string $codice_tipo_documento_fe;
public ?string $help;
public bool $predefined;
public bool $enabled;
public int $id_segment;
private int $id; // Da URL

#[Ignore]
public function getId(): int
{
return $this->id;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?php

namespace Modules\TipiDocumento\API\Controllers;

use API\Controllers\BaseController;
use DTO\SelectOptionsRequest;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Models\Locale;
use Symfony\Component\HttpKernel\Exception\InvalidMetadataException;

final class SelectOptionsTipiDocumentoRequest extends SelectOptionsRequest
{
public string $dir;
}

final class SelectOptionsTipiDocumentoController extends BaseController
{
public function __invoke(Request $request): JsonResponse
{
$body = $this->init($request, SelectOptionsTipiDocumentoRequest::class);
$dir = $body->dir;

if (empty($dir)) {
throw new InvalidMetadataException('Missing dir option');
}

$query = 'SELECT `co_tipi_documento`.`id`, `co_tipi_documento_lang`.`title` AS descrizione FROM `co_tipi_documento` LEFT JOIN `co_tipi_documento_lang` ON (`co_tipi_documento`.`id` = `co_tipi_documento_lang`.`id_record` AND `co_tipi_documento_lang`.`id_lang` = '.prepare(Locale::getDefault()->id).') |where| ORDER BY `title` ASC';

$where = ['`co_tipi_documento`.`enabled` = 1', '`co_tipi_documento`.`dir`='.prepare($dir)];
$filter = [];
$search_fields = [];
foreach ((array) $body->retrieve_only_for as $element) {
$filter[] = '`co_tipi_documento`.`id`='.prepare($element);
}

if (!empty($body->search)) {
$search_fields[] = '`co_tipi_documento_lang`.`title` LIKE '.prepare('%'.$body->search.'%');
}

$custom = [
'id' => 'id',
'text' => 'descrizione',
];
$length = 200;
$query_results = \AJAX::selectResults($query, $where, $filter, $search_fields, [
'offset' => $body->page * $length,
'length' => $length,
], $custom);

$results = $query_results['results'];

// Applicazione della trasformazione dei link se specificata nelle opzioni
$link = 'module:Tipi documento';
if (!empty($link) && !empty($results)) {
$results = \AJAX::applyLinkTransformation($results, $link);
}

return new JsonResponse([
'results' => $results ?: [],
'recordsFiltered' => $query_results['recordsFiltered'],
]);
}

protected function hasAccess($request): bool
{
return $this->hasModuleWriteAccess('Tipi documento');
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<?php

namespace Modules\TipiDocumento\API\Controllers;

use API\Controllers\BaseController;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Models\Locale;
use Modules\Fatture\Tipo;
use Modules\TipiDocumento\API\Controllers\Models\UpdateTipiDocumentoRequest;
use Symfony\Component\HttpKernel\Exception\ConflictHttpException;

final class UpdateTipiDocumentoController extends BaseController
{
public function __invoke(Request $request): JsonResponse
{
$data = $this->init($request, UpdateTipiDocumentoRequest::class);

$tipo_new = Tipo::where('name', $data->name)->where('dir', '=', $data->dir)->where('codice_tipo_documento_fe', '=', $data->codice_tipo_documento_fe)->first();

if (!empty($tipo_new) && $tipo_new->id != $data->getId()) {
throw new ConflictHttpException(tr('Questa combinazione di nome, codice e direzione è già stata utilizzata per un altro tipo di documento.'));
}
if (!empty($predefined)) {
Tipo::where('dir', $data->dir)->update(['predefined' => 0]);
}

$tipo = Tipo::find($data->getId());
if (Locale::getDefault()->id == Locale::getPredefined()->id) {
$tipo->name = $data->name;
}
$tipo->dir = $data->dir;
$tipo->codice_tipo_documento_fe = $data->codice_tipo_documento_fe;
$tipo->help = $data->help;
$tipo->predefined = $data->predefined;
$tipo->enabled = $data->enabled;
$tipo->id_segment = $data->id_segment;
$tipo->save();

$tipo->setTranslation('title', $data->name);

return new JsonResponse();
}

protected function hasAccess($request): bool
{
return $this->hasModuleWriteAccess('Tipi documento');
}
}
Loading
Loading