diff --git a/core/class/declarationtva.class.php b/core/class/declarationtva.class.php index d773891..e2b28df 100644 --- a/core/class/declarationtva.class.php +++ b/core/class/declarationtva.class.php @@ -1035,6 +1035,50 @@ class DeclarationTVA return true; } + /** + * Unvalidate a declaration (for testing purposes) + * + * @param int $declaration_id Declaration ID + * @return bool Success + */ + public function unvalidateDeclaration($declaration_id) + { + // Check if the validated_date and validated_by columns exist + $sql_check_columns = "SHOW COLUMNS FROM " . MAIN_DB_PREFIX . "declarationtva_declarations LIKE 'validated_date'"; + $result_check = $this->db->query($sql_check_columns); + $has_validated_columns = ($result_check && $this->db->num_rows($result_check) > 0); + + if ($has_validated_columns) { + // Use the enhanced version with validated_date and validated_by + $sql = "UPDATE " . MAIN_DB_PREFIX . "declarationtva_declarations + SET status = 'draft', + validated_date = NULL, + validated_by = NULL + WHERE rowid = " . (int)$declaration_id . " + AND entity = " . $this->entity; + } else { + // Use the basic version without the additional columns + $sql = "UPDATE " . MAIN_DB_PREFIX . "declarationtva_declarations + SET status = 'draft' + WHERE rowid = " . (int)$declaration_id . " + AND entity = " . $this->entity; + } + + $result = $this->db->query($sql); + if (!$result) { + $this->error = "Database error updating declaration: " . $this->db->lasterror(); + return false; + } + + // Check if the update actually affected any rows + if ($this->db->affected_rows($result) == 0) { + $this->error = "No declaration found with ID " . $declaration_id . " or insufficient permissions"; + return false; + } + + return true; + } + /** * Save validated PDF to Dolibarr documents * diff --git a/declarationtva_view.php b/declarationtva_view.php index 5504541..f390ac8 100644 --- a/declarationtva_view.php +++ b/declarationtva_view.php @@ -122,6 +122,15 @@ if ($action == 'validate' && $token) { } } +if ($action == 'unvalidate' && $token) { + // Unvalidate the declaration (for testing purposes) + if ($declarationtva->unvalidateDeclaration($id)) { + setEventMessages($langs->trans("DeclarationUnvalidated"), null, 'mesgs'); + } else { + setEventMessages($langs->trans("ErrorUnvalidatingDeclaration") . ": " . $declarationtva->error, null, 'errors'); + } +} + // Fetch declaration if ($declarationtva->fetch($id) < 0) { setEventMessages($langs->trans("DeclarationNotFound"), null, 'errors'); @@ -447,6 +456,8 @@ if ($declarationtva->status == 'draft') { print '' . $langs->trans("Validate") . ' '; } elseif ($declarationtva->status == 'validated') { print '' . $langs->trans("Submit") . ' '; + // Add unvalidate button for testing + print '' . $langs->trans("Unvalidate") . ' '; } print '' . $langs->trans("BackToList") . ''; diff --git a/langs/en_US/declarationtva.lang b/langs/en_US/declarationtva.lang index d3a1df6..ed7191b 100644 --- a/langs/en_US/declarationtva.lang +++ b/langs/en_US/declarationtva.lang @@ -501,6 +501,10 @@ YesValidate = Yes, validate Cancel = Cancel DeclarationValidated = Declaration validated successfully ErrorValidatingDeclaration = Error validating declaration +DeclarationUnvalidated = Declaration reverted to draft +ErrorUnvalidatingDeclaration = Error reverting to draft +Unvalidate = Revert to Draft +ConfirmUnvalidate = Are you sure you want to revert this declaration to draft status? # Document and status icons Document = Document diff --git a/langs/fr_FR/declarationtva.lang b/langs/fr_FR/declarationtva.lang index f1c519b..44c4be9 100644 --- a/langs/fr_FR/declarationtva.lang +++ b/langs/fr_FR/declarationtva.lang @@ -473,6 +473,10 @@ YesValidate = Oui, valider Cancel = Annuler DeclarationValidated = Déclaration validée avec succès ErrorValidatingDeclaration = Erreur lors de la validation de la déclaration +DeclarationUnvalidated = Déclaration remise en brouillon +ErrorUnvalidatingDeclaration = Erreur lors de la remise en brouillon +Unvalidate = Remettre en brouillon +ConfirmUnvalidate = Êtes-vous sûr de vouloir remettre cette déclaration en brouillon ? # Document and status icons Document = Document