HEX
Server: nginx/1.27.0
System: Linux ns31201788 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: www-data (33)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //tmp/confirm_method.php
    public function confirm(string $id): void
    {
        $this->requireAuth();
        $receipt = Database::fetchOne("SELECT * FROM receipts WHERE id = ?", [$id]);
        if (!$receipt || $receipt['status'] !== 'draft') {
            $this->flash('error', 'Pratica non confermabile');
            $this->redirect('/receipts/' . $id);
            return;
        }
        if (empty($receipt['customer_id'])) {
            $this->flash('error', 'Associa un cliente prima di confermare');
            $this->redirect('/receipts/' . $id);
            return;
        }

        Database::beginTransaction();
        try {
            // Genera piano rate
            $numRate = (int)($receipt['num_installments'] ?? 3);
            $advance = (float)($receipt['advance_amount'] ?? 0);
            $toFinance = (float)($receipt['total'] ?? 0) - $advance;
            $costRetail = (float)($receipt['dilazione_cost'] ?? 0);
            $totalRate = round($toFinance, 2);
            $instAmount = $numRate > 0 ? round($totalRate / $numRate, 2) : $totalRate;

            $today = new \DateTime();
            $reminderDays = 15;
            try { $reminderDays = (int)(Database::fetchOne("SELECT setting_value FROM settings WHERE setting_key = 'reminder_days_before'")['setting_value'] ?? 15); } catch(\Throwable $e) {}

            // Rimuovi rate esistenti
            Database::delete('receipt_installments', 'receipt_id = ?', [$id]);

            for ($i = 1; $i <= $numRate; $i++) {
                $days = $i * 30;
                $dueDate = (clone $today)->modify("+{$days} days");
                $reminderDate = (clone $dueDate)->modify("-{$reminderDays} days");
                $amount = $i === $numRate ? round($totalRate - ($instAmount * ($numRate - 1)), 2) : $instAmount;

                Database::insert('receipt_installments', [
                    'receipt_id'         => $id,
                    'installment_number' => $i,
                    'due_date'           => $dueDate->format('Y-m-d'),
                    'amount'             => $amount,
                    'paid_amount'        => 0,
                    'status'             => 'pending',
                    'reminder_date'      => $reminderDate->format('Y-m-d'),
                ]);
            }

            Database::update('receipts', [
                'status'     => 'confirmed',
                'updated_at' => date('Y-m-d H:i:s'),
            ], 'id = ?', [$id]);

            Database::commit();
            $this->log('receipt_confirmed', 'receipts', (int)$id, ['installments' => $numRate]);
            $this->flash('success', "Pratica confermata con {$numRate} rate generate");

        } catch (\Throwable $e) {
            Database::rollBack();
            $this->flash('error', 'Errore conferma: ' . $e->getMessage());
        }

        $this->redirect('/receipts/' . $id);
    }