- Added planned/actual/baseline dates to Phase and Feature models
- Created ProgressSnapshot model + migration for historical tracking
- Implemented CaptureDailyProgressSnapshot job (scheduled daily at 06:30)
- Added DeviationCalculator logic (SPI, planned progress, deviation days)
- ReportGenerator service with complete data aggregation
- ReportController with builder, preview, generate (HTML/Excel)
- ReportBuilder Livewire component with date range, entity selection, format
- ProjectReportExport with 10 sheets (Summary, Phases, Features, Inspections, Issues, Tasks, Deviations, Media, Progress Curve, Parameters)
- Blade partials for all sections (header, summary, phases, features, inspections, issues, tasks, media, deviations, progress curve)
- New routes: /projects/{project}/reports/*
- Added 'generate reports' permission
- All 101 tests passing
26 lines
1.2 KiB
PHP
26 lines
1.2 KiB
PHP
<div class="report-header">
|
|
<div class="logo-placeholder">LOGO<br>EMPRESA</div>
|
|
<div class="report-header-info">
|
|
<div class="report-title">{{ $project->name }}</div>
|
|
@if($project->address)
|
|
<div class="report-subtitle">{{ $project->address }}</div>
|
|
@endif
|
|
<div class="report-subtitle" style="margin-top:8px;">
|
|
@if($project->start_date)
|
|
Inicio: <strong style="color:#1f2937">{{ $project->start_date->format('d/m/Y') }}</strong>
|
|
@endif
|
|
@if($project->end_date_estimated)
|
|
• Fin estimado: <strong style="color:#1f2937">{{ $project->end_date_estimated->format('d/m/Y') }}</strong>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
<div class="report-meta">
|
|
<strong>Informe de Proyecto</strong>
|
|
Generado el {{ $filters['generated_at'] ?? now()->format('d/m/Y H:i') }}<br>
|
|
Período: {{ $filters['getDateRangeLabel']() }}<br>
|
|
Estado:
|
|
<span class="badge {{ $project->status === 'completed' ? 'badge-success' : ($project->status === 'in_progress' ? 'badge-in_progress' : 'badge-planned') }}">
|
|
{{ ucfirst(str_replace('_', ' ', $project->status ?? 'N/A')) }}
|
|
</span>
|
|
</div>
|
|
</div> |