Index: src/include/lib/Garradin/Accounting/Transactions.php ================================================================== --- src/include/lib/Garradin/Accounting/Transactions.php +++ src/include/lib/Garradin/Accounting/Transactions.php @@ -219,17 +219,30 @@ throw new UserException(sprintf('le compte "%s" n\'existe pas dans le plan comptable', $row->account)); } $row->line_id = trim($row->line_id); $id_analytical = null; + $data = [ + 'credit' => $row->credit ?: 0, + 'debit' => $row->debit ?: 0, + 'id_account' => $id_account, + 'reference' => $row->line_reference, + 'label' => $row->line_label, + 'reconciled' => $row->reconciled, + ]; if (!empty($row->analytical)) { $id_analytical = $accounts->getIdFromCode($row->analytical); if (!$id_analytical) { throw new UserException(sprintf('le compte analytique "%s" n\'existe pas dans le plan comptable', $row->analytical)); } + + $row['id_analytical'] = $id_analytical; + } + elseif (property_exists($row, 'analytical')) { + $row['id_analytical'] = null; } if ($row->line_id) { $line = $transaction->getLine((int)$row->line_id); @@ -239,19 +252,11 @@ } else { $line = new Line; } - $line->importForm([ - 'credit' => $row->credit ?: 0, - 'debit' => $row->debit ?: 0, - 'id_account' => $id_account, - 'reference' => $row->line_reference, - 'label' => $row->line_label, - 'reconciled' => $row->reconciled, - 'id_analytical' => $id_analytical, - ]); + $line->importForm($data); if (!$row->line_id) { $transaction->addLine($line); } } Index: src/include/lib/Garradin/Entities/Accounting/Line.php ================================================================== --- src/include/lib/Garradin/Entities/Accounting/Line.php +++ src/include/lib/Garradin/Entities/Accounting/Line.php @@ -54,27 +54,14 @@ $value = parent::filterUserValue($type, $value, $key); return $value; } - public function importForm(array $source = null) - { - if (null === $source) { - $source = $_POST; - } - - if (empty($source['id_analytical'])) { - unset($source['id_analytical']); - } - - return parent::importForm($source); - } - public function selfCheck(): void { parent::selfCheck(); $this->assert($this->credit || $this->debit, 'Aucun montant au débit ou au crédit'); $this->assert(($this->credit * $this->debit) === 0 && ($this->credit + $this->debit) > 0, 'Ligne non équilibrée : crédit ou débit doit valoir zéro.'); $this->assert($this->id_transaction, 'Aucun mouvement n\'a été indiqué pour cette ligne.'); $this->assert($this->reconciled === 0 || $this->reconciled === 1); } }