Fix acqua views and expose millesimi ordering
This commit is contained in:
parent
91bf6713fd
commit
2639c0a0e3
|
|
@ -177,9 +177,9 @@ protected function getTableQuery(): Builder
|
||||||
return TabellaMillesimale::query()->whereRaw('1 = 0');
|
return TabellaMillesimale::query()->whereRaw('1 = 0');
|
||||||
}
|
}
|
||||||
|
|
||||||
$orderColumn = Schema::hasColumn('tabelle_millesimali', 'ordine_visualizzazione')
|
$orderColumn = Schema::hasColumn('tabelle_millesimali', 'nord')
|
||||||
? 'ordine_visualizzazione'
|
? 'nord'
|
||||||
: (Schema::hasColumn('tabelle_millesimali', 'nord') ? 'nord' : (Schema::hasColumn('tabelle_millesimali', 'ordinamento') ? 'ordinamento' : 'id'));
|
: (Schema::hasColumn('tabelle_millesimali', 'ordine_visualizzazione') ? 'ordine_visualizzazione' : (Schema::hasColumn('tabelle_millesimali', 'ordinamento') ? 'ordinamento' : 'id'));
|
||||||
|
|
||||||
return TabellaMillesimale::query()
|
return TabellaMillesimale::query()
|
||||||
->where('stabile_id', $activeStabileId)
|
->where('stabile_id', $activeStabileId)
|
||||||
|
|
@ -326,13 +326,13 @@ public function table(Table $table): Table
|
||||||
])
|
])
|
||||||
->columns([
|
->columns([
|
||||||
TextColumn::make(
|
TextColumn::make(
|
||||||
Schema::hasColumn('tabelle_millesimali', 'ordine_visualizzazione')
|
Schema::hasColumn('tabelle_millesimali', 'nord')
|
||||||
? 'ordine_visualizzazione'
|
? 'nord'
|
||||||
: 'ordinamento'
|
: (Schema::hasColumn('tabelle_millesimali', 'ordine_visualizzazione') ? 'ordine_visualizzazione' : 'ordinamento')
|
||||||
)
|
)
|
||||||
->label('Ord.')
|
->label('Nord')
|
||||||
->sortable()
|
->sortable()
|
||||||
->toggleable(isToggledHiddenByDefault: true),
|
->toggleable(),
|
||||||
|
|
||||||
TextColumn::make('codice_tabella')
|
TextColumn::make('codice_tabella')
|
||||||
->label('Codice')
|
->label('Codice')
|
||||||
|
|
@ -614,7 +614,7 @@ protected function loadTabelle(): void
|
||||||
->ordinato();
|
->ordinato();
|
||||||
|
|
||||||
$this->tabelle = $q
|
$this->tabelle = $q
|
||||||
->get(['id', 'codice_tabella', 'nome_tabella', 'denominazione', 'tipo_tabella', 'tipo_calcolo', 'totale_millesimi', 'ordinamento', 'meta_legacy'])
|
->get(['id', 'codice_tabella', 'nome_tabella', 'denominazione', 'tipo_tabella', 'tipo_calcolo', 'totale_millesimi', 'ordinamento', 'ordine_visualizzazione', 'nord', 'meta_legacy'])
|
||||||
->map(function (TabellaMillesimale $t) {
|
->map(function (TabellaMillesimale $t) {
|
||||||
$codice = $t->codice_tabella ?: ($t->nome_tabella ?: ('TAB ' . $t->id));
|
$codice = $t->codice_tabella ?: ($t->nome_tabella ?: ('TAB ' . $t->id));
|
||||||
$nome = $t->denominazione ?: ($t->nome_tabella_millesimale ?: ($t->nome_tabella ?: 'Tabella'));
|
$nome = $t->denominazione ?: ($t->nome_tabella_millesimale ?: ($t->nome_tabella ?: 'Tabella'));
|
||||||
|
|
@ -634,11 +634,12 @@ protected function loadTabelle(): void
|
||||||
'id' => (int) $t->id,
|
'id' => (int) $t->id,
|
||||||
'codice' => $codice,
|
'codice' => $codice,
|
||||||
'nome' => $nome,
|
'nome' => $nome,
|
||||||
|
'nord' => $this->resolveNordValue($t),
|
||||||
'tipo' => $tipoLabel,
|
'tipo' => $tipoLabel,
|
||||||
'calcolo' => $calcoloLabel,
|
'calcolo' => $calcoloLabel,
|
||||||
'is_consumo' => $isConsumo,
|
'is_consumo' => $isConsumo,
|
||||||
'totale' => is_numeric($t->totale_millesimi) ? (float) $t->totale_millesimi : null,
|
'totale' => is_numeric($t->totale_millesimi) ? (float) $t->totale_millesimi : null,
|
||||||
'ordinamento' => (int) ($t->ordinamento ?? 999999),
|
'ordinamento' => $this->resolveNordValue($t) ?? (int) ($t->ordine_visualizzazione ?? $t->ordinamento ?? 999999),
|
||||||
'is_bilanciata' => (bool) ($t->is_bilanciata ?? false),
|
'is_bilanciata' => (bool) ($t->is_bilanciata ?? false),
|
||||||
'preventivo' => is_numeric($prev) ? (float) $prev : null,
|
'preventivo' => is_numeric($prev) ? (float) $prev : null,
|
||||||
'consuntivo' => is_numeric($cons) ? (float) $cons : null,
|
'consuntivo' => is_numeric($cons) ? (float) $cons : null,
|
||||||
|
|
@ -646,6 +647,23 @@ protected function loadTabelle(): void
|
||||||
})
|
})
|
||||||
->values()
|
->values()
|
||||||
->all();
|
->all();
|
||||||
|
|
||||||
|
usort($this->tabelle, static function (array $left, array $right): int {
|
||||||
|
$leftNord = is_numeric($left['ordinamento'] ?? null) ? (int) $left['ordinamento'] : 999999;
|
||||||
|
$rightNord = is_numeric($right['ordinamento'] ?? null) ? (int) $right['ordinamento'] : 999999;
|
||||||
|
|
||||||
|
if ($leftNord !== $rightNord) {
|
||||||
|
return $leftNord <=> $rightNord;
|
||||||
|
}
|
||||||
|
|
||||||
|
$leftTipo = (string) ($left['tipo'] ?? '');
|
||||||
|
$rightTipo = (string) ($right['tipo'] ?? '');
|
||||||
|
if ($leftTipo !== $rightTipo) {
|
||||||
|
return strnatcasecmp($leftTipo, $rightTipo);
|
||||||
|
}
|
||||||
|
|
||||||
|
return strnatcasecmp((string) ($left['codice'] ?? ''), (string) ($right['codice'] ?? ''));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function pickTabellaId(?int $candidate): ?int
|
protected function pickTabellaId(?int $candidate): ?int
|
||||||
|
|
@ -1075,7 +1093,6 @@ private function formatCodiceUnita(?string $codice): ?string
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$prefix = is_string($this->codiceStabile) ? trim($this->codiceStabile) : '';
|
|
||||||
if ($prefix !== '') {
|
if ($prefix !== '') {
|
||||||
$pattern = '/^' . preg_quote($prefix, '/') . '[\s\-\/]+/';
|
$pattern = '/^' . preg_quote($prefix, '/') . '[\s\-\/]+/';
|
||||||
$codice = preg_replace($pattern, '', $codice) ?? $codice;
|
$codice = preg_replace($pattern, '', $codice) ?? $codice;
|
||||||
|
|
@ -1338,4 +1355,16 @@ private function isConsumoCalcolo(?string $calcolo): bool
|
||||||
$c = strtolower(trim((string) ($calcolo ?? '')));
|
$c = strtolower(trim((string) ($calcolo ?? '')));
|
||||||
return in_array($c, ['acqua', 'a', 'consumo', 'c', 'a_consumo'], true);
|
return in_array($c, ['acqua', 'a', 'consumo', 'c', 'a_consumo'], true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function resolveNordValue(TabellaMillesimale $t): ?int
|
||||||
|
{
|
||||||
|
foreach (['nord', 'ordine_visualizzazione', 'ordinamento'] as $field) {
|
||||||
|
$value = $t->{$field} ?? null;
|
||||||
|
if (is_numeric($value)) {
|
||||||
|
return (int) $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,6 @@ public function panel(Panel $panel): Panel
|
||||||
->renderHook(PanelsRenderHook::HEAD_END, fn() => view('filament.components.legacy-admin-assets'))
|
->renderHook(PanelsRenderHook::HEAD_END, fn() => view('filament.components.legacy-admin-assets'))
|
||||||
->renderHook(PanelsRenderHook::TOPBAR_LOGO_AFTER, fn() => view('filament.components.topbar-context'))
|
->renderHook(PanelsRenderHook::TOPBAR_LOGO_AFTER, fn() => view('filament.components.topbar-context'))
|
||||||
->renderHook(PanelsRenderHook::USER_MENU_BEFORE, fn() => view('filament.components.topbar-icons'))
|
->renderHook(PanelsRenderHook::USER_MENU_BEFORE, fn() => view('filament.components.topbar-icons'))
|
||||||
->renderHook(PanelsRenderHook::FOOTER, fn() => view('filament.components.footer'))
|
|
||||||
->navigationItems([
|
->navigationItems([
|
||||||
NavigationItem::make('Rubrica Unica')
|
NavigationItem::make('Rubrica Unica')
|
||||||
->group('NetGescon')
|
->group('NetGescon')
|
||||||
|
|
@ -133,7 +132,7 @@ public function panel(Panel $panel): Panel
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function resolveSupplierCatalogUrl(): string
|
protected function resolveSupplierCatalogUrl(): string
|
||||||
{
|
{
|
||||||
$user = Auth::user();
|
$user = Auth::user();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Services\Consumi;
|
namespace App\Services\Consumi;
|
||||||
|
|
||||||
use App\Models\CategoriaTicket;
|
use App\Models\CategoriaTicket;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,73 @@
|
||||||
|
# SESSION HANDOFF - 2026-04-13 / 2026-04-14
|
||||||
|
|
||||||
|
## Stato operativo reale alla chiusura sessione
|
||||||
|
|
||||||
|
- Repository: `/home/michele/netgescon/netgescon-day0`
|
||||||
|
- Focus stabile utente: `0021`, con attenzione anche allo shell tecnico FE `FE221005` (`stabili.id=29`)
|
||||||
|
- Obiettivo operativo chiuso in questa sessione:
|
||||||
|
- rendere esplicito e sicuro il CF soggetto nello scarico FE
|
||||||
|
- semplificare il flusso `ticket-acqua-light`
|
||||||
|
- rimuovere il footer Filament invasivo su mobile
|
||||||
|
- riallineare pagina `tabelle-millesimali` a `nord`, `tipo`, `calcolo`
|
||||||
|
- eliminare i blocchi Blade fragili nelle viste `ticket-acqua` e `ticket-acqua-generale`
|
||||||
|
|
||||||
|
## Verifiche fatte e confermate
|
||||||
|
|
||||||
|
- `php artisan view:clear && php artisan view:cache` eseguito con esito OK dopo gli ultimi fix.
|
||||||
|
- `php artisan route:list` carica `755` route.
|
||||||
|
- Il service FE usa il CF dello stabile, non il CF studio dell'amministratore:
|
||||||
|
- `stabili.id=25 / codice_stabile=0021 / CF=97487690584`
|
||||||
|
- `stabili.id=29 / codice_stabile=FE221005 / CF=10055221005`
|
||||||
|
- Il problema operativo dello scarico FE nasceva dal contesto dello stabile attivo in topbar/sessione, non dalla chiamata HTTP finale.
|
||||||
|
- Nella pagina FE è stato aggiunto un riepilogo esplicito del `Codice fiscale soggetto usato per lo scarico`.
|
||||||
|
- Le due Blade acqua sono state semplificate spostando il rendering metadati foto in partial condivisa, per evitare parse error residui in staging dovuti a blocchi Blade annidati.
|
||||||
|
|
||||||
|
## File toccati in questa fase
|
||||||
|
|
||||||
|
- `app/Providers/Filament/AdminFilamentPanelProvider.php`
|
||||||
|
- chain Filament riparata
|
||||||
|
- footer hook rimosso dal panel
|
||||||
|
- `app/Filament/Pages/Condomini/TabelleMillesimaliArchivio.php`
|
||||||
|
- preferenza a `tabelle_millesimali.nord` per ordinamento archivio
|
||||||
|
- `nord` portato nel payload usato dalla Blade
|
||||||
|
- lista tabelle ordinata per `nord`, poi `tipo`, poi codice
|
||||||
|
- `resources/views/filament/pages/condomini/tabelle-millesimali.blade.php`
|
||||||
|
- badge visivo `Ord. {nord}`
|
||||||
|
- `tipo` e `calcolo` mantenuti visibili nelle liste `prospetto` e `voci`
|
||||||
|
- `resources/views/filament/pages/supporto/ticket-acqua.blade.php`
|
||||||
|
- `resources/views/filament/pages/supporto/ticket-acqua-generale.blade.php`
|
||||||
|
- blocchi metadati foto sostituiti con partial condivisa
|
||||||
|
- `resources/views/filament/pages/supporto/partials/photo-metadata.blade.php`
|
||||||
|
- nuova partial minima in PHP/HTML, senza direttive Blade annidate
|
||||||
|
|
||||||
|
## Comandi rapidi per ripartenza domani
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /home/michele/netgescon/netgescon-day0
|
||||||
|
git status --short
|
||||||
|
php artisan view:clear
|
||||||
|
php artisan view:cache
|
||||||
|
php artisan route:list | tail -n 2
|
||||||
|
php artisan netgescon:qa-millesimi-spese --stabile=0021 --show-missing=20
|
||||||
|
tail -n 120 storage/logs/laravel.log
|
||||||
|
```
|
||||||
|
|
||||||
|
## Punti ancora aperti da riprendere
|
||||||
|
|
||||||
|
1. QA millesimi/voci da rendere piu accurato per le gestioni straordinarie legate all'anno/esercizio.
|
||||||
|
2. Validazione staging reale dopo `git push` + update staging:
|
||||||
|
- `/admin-filament/condomini/tabelle-millesimali`
|
||||||
|
- `/admin-filament/supporto/ticket-acqua`
|
||||||
|
- `/admin-filament/supporto/ticket-acqua-generale`
|
||||||
|
3. Controllo del bug `fornitore Livewire root` ancora aperto nel tracker.
|
||||||
|
4. Diagnosi separata dei nominativi rumorosi per `0023`.
|
||||||
|
|
||||||
|
## Prompt consigliato per un altro agent
|
||||||
|
|
||||||
|
"Riparti da `docs/ai/SESSION_HANDOFF.md`. Prima verifica `git status`, poi esegui `php artisan view:clear && php artisan view:cache`. Controlla staging su `tabelle-millesimali`, `ticket-acqua` e `ticket-acqua-generale`. Se il deploy e allineato, passa al raffinamento del QA millesimi/voci per gestioni straordinarie con anno/esercizio, senza fare bonifiche contabili distruttive."
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
# SESSION HANDOFF - 2026-04-08
|
# SESSION HANDOFF - 2026-04-08
|
||||||
|
|
||||||
## Contesto operativo attuale
|
## Contesto operativo attuale
|
||||||
|
|
|
||||||
|
|
@ -70,9 +70,14 @@ class="block rounded-xl border p-3 transition
|
||||||
>
|
>
|
||||||
<div class="flex items-start justify-between gap-3">
|
<div class="flex items-start justify-between gap-3">
|
||||||
<div>
|
<div>
|
||||||
|
<div class="flex flex-wrap items-center gap-2">
|
||||||
<div class="text-sm font-semibold {{ $selected ? 'text-primary-700' : 'text-gray-900' }}">
|
<div class="text-sm font-semibold {{ $selected ? 'text-primary-700' : 'text-gray-900' }}">
|
||||||
{{ $t['codice'] }}
|
{{ $t['codice'] }}
|
||||||
</div>
|
</div>
|
||||||
|
@if(isset($t['nord']) && $t['nord'] !== null)
|
||||||
|
<span class="inline-flex items-center rounded-full bg-slate-100 px-2 py-0.5 text-[10px] font-semibold text-slate-700">Ord. {{ $t['nord'] }}</span>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
<div class="text-xs text-gray-600">{{ $t['nome'] }}</div>
|
<div class="text-xs text-gray-600">{{ $t['nome'] }}</div>
|
||||||
@if(!empty($t['tipo']) || !empty($t['calcolo']))
|
@if(!empty($t['tipo']) || !empty($t['calcolo']))
|
||||||
<div class="mt-1 text-xs text-gray-500">
|
<div class="mt-1 text-xs text-gray-500">
|
||||||
|
|
@ -241,9 +246,14 @@ class="block rounded-xl border p-3 transition
|
||||||
>
|
>
|
||||||
<div class="flex items-start justify-between gap-3">
|
<div class="flex items-start justify-between gap-3">
|
||||||
<div>
|
<div>
|
||||||
|
<div class="flex flex-wrap items-center gap-2">
|
||||||
<div class="text-sm font-semibold {{ $selected ? 'text-primary-700' : 'text-gray-900' }}">
|
<div class="text-sm font-semibold {{ $selected ? 'text-primary-700' : 'text-gray-900' }}">
|
||||||
{{ $t['codice'] }}
|
{{ $t['codice'] }}
|
||||||
</div>
|
</div>
|
||||||
|
@if(isset($t['nord']) && $t['nord'] !== null)
|
||||||
|
<span class="inline-flex items-center rounded-full bg-slate-100 px-2 py-0.5 text-[10px] font-semibold text-slate-700">Ord. {{ $t['nord'] }}</span>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
<div class="text-xs text-gray-600">{{ $t['nome'] }}</div>
|
<div class="text-xs text-gray-600">{{ $t['nome'] }}</div>
|
||||||
@if(!empty($t['tipo']) || !empty($t['calcolo']))
|
@if(!empty($t['tipo']) || !empty($t['calcolo']))
|
||||||
<div class="mt-1 text-xs text-gray-500">
|
<div class="mt-1 text-xs text-gray-500">
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?php
|
||||||
|
$badgeRows = is_array($badgeRows ?? null) ? $badgeRows : [];
|
||||||
|
$detailRows = is_array($detailRows ?? null) ? $detailRows : [];
|
||||||
|
?>
|
||||||
|
|
||||||
|
<?php if ($badgeRows !== []): ?>
|
||||||
|
<div class="mt-2 flex flex-wrap gap-1">
|
||||||
|
<?php foreach ($badgeRows as $badge): ?>
|
||||||
|
<span class="inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-semibold <?= e((string) ($badge['class'] ?? '')) ?>"><?= e((string) ($badge['label'] ?? '')) ?></span>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<?php if ($detailRows !== []): ?>
|
||||||
|
<div class="mt-2 rounded-lg border border-slate-200 bg-white p-2 text-[11px] text-slate-700">
|
||||||
|
<?php foreach ($detailRows as $detail): ?>
|
||||||
|
<div><span class="font-medium"><?= e((string) ($detail['label'] ?? '')) ?>:</span> <?= e((string) ($detail['value'] ?? '')) ?></div>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
@ -63,7 +63,9 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@php($service = $this->selectedServiceSnapshot)
|
@php
|
||||||
|
$service = $this->selectedServiceSnapshot;
|
||||||
|
@endphp
|
||||||
@if($service)
|
@if($service)
|
||||||
<div class="rounded-2xl border border-emerald-200 bg-emerald-50 p-4 shadow-sm">
|
<div class="rounded-2xl border border-emerald-200 bg-emerald-50 p-4 shadow-sm">
|
||||||
<div class="text-sm font-semibold text-emerald-900">Riferimenti contratto selezionato</div>
|
<div class="text-sm font-semibold text-emerald-900">Riferimenti contratto selezionato</div>
|
||||||
|
|
@ -332,13 +334,7 @@
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@endphp
|
@endphp
|
||||||
@if($detailRows !== [])
|
@include('filament.pages.supporto.partials.photo-metadata', ['badgeRows' => [], 'detailRows' => $detailRows])
|
||||||
<div class="mt-2 rounded-lg border border-slate-200 bg-white p-2 text-[11px] text-slate-700">
|
|
||||||
@foreach($detailRows as $detail)
|
|
||||||
<div><span class="font-medium">{{ $detail['label'] }}:</span> {{ $detail['value'] }}</div>
|
|
||||||
@endforeach
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
<label class="mt-2 block">
|
<label class="mt-2 block">
|
||||||
<span class="mb-1 block text-[11px] font-medium">Nota foto</span>
|
<span class="mb-1 block text-[11px] font-medium">Nota foto</span>
|
||||||
<input type="text" wire:model.defer="generalWaterPhotoDescriptions.{{ $upload['index'] }}" class="w-full rounded-lg border-gray-300" placeholder="Es. display principale, targhetta matricola, quadro contatori" />
|
<input type="text" wire:model.defer="generalWaterPhotoDescriptions.{{ $upload['index'] }}" class="w-full rounded-lg border-gray-300" placeholder="Es. display principale, targhetta matricola, quadro contatori" />
|
||||||
|
|
|
||||||
|
|
@ -244,7 +244,9 @@
|
||||||
<div wire:loading wire:target="pendingWaterPhotos" class="mt-2 text-xs font-medium text-amber-700">Caricamento foto in corso: preparo la coda della lettura acqua.</div>
|
<div wire:loading wire:target="pendingWaterPhotos" class="mt-2 text-xs font-medium text-amber-700">Caricamento foto in corso: preparo la coda della lettura acqua.</div>
|
||||||
|
|
||||||
@if(count($this->selectedWaterUploads) > 0)
|
@if(count($this->selectedWaterUploads) > 0)
|
||||||
@php($focusUpload = $this->selectedWaterUploads[0] ?? null)
|
@php
|
||||||
|
$focusUpload = $this->selectedWaterUploads[0] ?? null;
|
||||||
|
@endphp
|
||||||
@if($focusUpload)
|
@if($focusUpload)
|
||||||
<div class="mt-4 rounded-2xl border border-sky-200 bg-sky-50 p-3">
|
<div class="mt-4 rounded-2xl border border-sky-200 bg-sky-50 p-3">
|
||||||
<div class="mb-2 text-xs font-semibold text-sky-900">Chicca lettura rapida</div>
|
<div class="mb-2 text-xs font-semibold text-sky-900">Chicca lettura rapida</div>
|
||||||
|
|
@ -318,22 +320,7 @@
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@endphp
|
@endphp
|
||||||
@if($badgeRows !== [] || $detailRows !== [])
|
@include('filament.pages.supporto.partials.photo-metadata', ['badgeRows' => $badgeRows, 'detailRows' => $detailRows])
|
||||||
@if($badgeRows !== [])
|
|
||||||
<div class="mt-2 flex flex-wrap gap-1">
|
|
||||||
@foreach($badgeRows as $badge)
|
|
||||||
<span class="inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-semibold {{ $badge['class'] }}">{{ $badge['label'] }}</span>
|
|
||||||
@endforeach
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
@if($detailRows !== [])
|
|
||||||
<div class="mt-2 rounded-lg border border-slate-200 bg-white p-2 text-[11px] text-slate-700">
|
|
||||||
@foreach($detailRows as $detail)
|
|
||||||
<div><span class="font-medium">{{ $detail['label'] }}:</span> {{ $detail['value'] }}</div>
|
|
||||||
@endforeach
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
@endif
|
|
||||||
<label class="mt-2 block">
|
<label class="mt-2 block">
|
||||||
<span class="mb-1 block text-[11px] font-medium">Nota sotto la foto</span>
|
<span class="mb-1 block text-[11px] font-medium">Nota sotto la foto</span>
|
||||||
<input type="text" wire:model.defer="waterPhotoDescriptions.{{ $upload['index'] }}" class="w-full rounded-lg border-gray-300" placeholder="Es. contatore cucina, cifra poco leggibile" />
|
<input type="text" wire:model.defer="waterPhotoDescriptions.{{ $upload['index'] }}" class="w-full rounded-lg border-gray-300" placeholder="Es. contatore cucina, cifra poco leggibile" />
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user