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