Create declaration creation and view pages
New Pages Added: - declarationtva_create.php: Complete declaration creation form - declarationtva_view.php: Declaration details and CA-3 amounts display Features Implemented: - Period selection for new declarations - Declaration naming with helpful examples - Optional date range override - Complete CA-3 form structure display - Status-based action buttons (Validate/Submit) - Proper error handling and success messages - Full bilingual support (English/French) Create Page Features: - Period dropdown with date ranges - Declaration name field with help text - Optional date override - Configuration reminder with link to setup View Page Features: - Complete declaration details - CA-3 amounts table with all 16 lines - Status-based actions - Navigation back to main list The module now has a complete declaration workflow!
This commit is contained in:
parent
9b246c0b91
commit
c61a964f14
150
declarationtva_create.php
Normal file
150
declarationtva_create.php
Normal file
@ -0,0 +1,150 @@
|
||||
<?php
|
||||
/**
|
||||
* DeclarationTVA Create Declaration
|
||||
* French CA-3 VAT Declaration Module for Dolibarr
|
||||
* MVP Version - Phase 1
|
||||
*/
|
||||
|
||||
// Load Dolibarr environment
|
||||
if (file_exists('../main.inc.php')) {
|
||||
$res = @include '../main.inc.php';
|
||||
} elseif (file_exists('../../main.inc.php')) {
|
||||
$res = @include '../../main.inc.php';
|
||||
} else {
|
||||
$res = 0;
|
||||
}
|
||||
|
||||
if (!$res) {
|
||||
die("Include of main fails");
|
||||
}
|
||||
|
||||
// Load module classes
|
||||
require_once DOL_DOCUMENT_ROOT . '/custom/declarationtva/core/class/declarationtva.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT . '/custom/declarationtva/core/class/declarationtva_config.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT . '/custom/declarationtva/core/class/declarationtva_period.class.php';
|
||||
|
||||
// Access control
|
||||
if (!$user->hasRight("declarationtva", "declarationtva", "write")) {
|
||||
accessforbidden();
|
||||
}
|
||||
|
||||
// Load language files
|
||||
$langs->load("declarationtva@declarationtva");
|
||||
|
||||
// Initialize objects
|
||||
$declarationtva = new DeclarationTVA($db, $conf->entity);
|
||||
$config = new DeclarationTVA_Config($db, $conf->entity);
|
||||
$period = new DeclarationTVA_Period($db, $conf->entity);
|
||||
|
||||
// Handle form submission
|
||||
$action = GETPOST('action', 'alpha');
|
||||
$period_id = GETPOST('period_id', 'int');
|
||||
$declaration_name = GETPOST('declaration_name', 'alpha');
|
||||
$start_date = GETPOST('start_date', 'alpha');
|
||||
$end_date = GETPOST('end_date', 'alpha');
|
||||
|
||||
$error = '';
|
||||
$success = '';
|
||||
|
||||
if ($action == 'create' && $period_id > 0) {
|
||||
// Create the declaration
|
||||
$declaration_id = $declarationtva->createDeclaration($period_id, $declaration_name);
|
||||
|
||||
if ($declaration_id > 0) {
|
||||
$success = $langs->trans("DeclarationCreated");
|
||||
// Redirect to view the created declaration
|
||||
header("Location: declarationtva_view.php?id=" . $declaration_id);
|
||||
exit;
|
||||
} else {
|
||||
$error = $langs->trans("ErrorCreatingDeclaration") . ": " . $declarationtva->error;
|
||||
}
|
||||
}
|
||||
|
||||
// Get available periods
|
||||
$periods = $period->getAllPeriods();
|
||||
|
||||
// Page title
|
||||
$title = $langs->trans("CreateDeclaration");
|
||||
llxHeader('', $title);
|
||||
|
||||
// Print page header
|
||||
print load_fiche_titre($title, '', 'title_accountancy');
|
||||
|
||||
// Display messages
|
||||
if ($error) {
|
||||
setEventMessages($error, null, 'errors');
|
||||
}
|
||||
if ($success) {
|
||||
setEventMessages($success, null, 'mesgs');
|
||||
}
|
||||
|
||||
// Print form
|
||||
print '<div class="fiche">';
|
||||
print '<div class="titre">' . $langs->trans("DeclarationDetails") . '</div>';
|
||||
|
||||
print '<form method="POST" action="' . $_SERVER['PHP_SELF'] . '">';
|
||||
print '<input type="hidden" name="action" value="create">';
|
||||
|
||||
print '<table class="noborder centpercent">';
|
||||
|
||||
// Period selection
|
||||
print '<tr>';
|
||||
print '<td class="fieldrequired">' . $langs->trans("SelectPeriod") . '</td>';
|
||||
print '<td>';
|
||||
print '<select name="period_id" class="flat" required>';
|
||||
print '<option value="">' . $langs->trans("ChoosePeriod") . '</option>';
|
||||
|
||||
foreach ($periods as $p) {
|
||||
$selected = ($period_id == $p['rowid']) ? ' selected' : '';
|
||||
print '<option value="' . $p['rowid'] . '"' . $selected . '>';
|
||||
print $p['period_name'] . ' (' . dol_print_date($p['start_date'], 'day') . ' - ' . dol_print_date($p['end_date'], 'day') . ')';
|
||||
print '</option>';
|
||||
}
|
||||
|
||||
print '</select>';
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
|
||||
// Declaration name
|
||||
print '<tr>';
|
||||
print '<td class="fieldrequired">' . $langs->trans("DeclarationName") . '</td>';
|
||||
print '<td>';
|
||||
print '<input type="text" name="declaration_name" class="flat" value="' . dol_escape_htmltag($declaration_name) . '" required>';
|
||||
print '<br><small>' . $langs->trans("DeclarationNameHelp") . '</small>';
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
|
||||
// Date range (optional override)
|
||||
print '<tr>';
|
||||
print '<td>' . $langs->trans("DateRange") . '</td>';
|
||||
print '<td>';
|
||||
print '<input type="date" name="start_date" class="flat" value="' . dol_escape_htmltag($start_date) . '">';
|
||||
print ' - ';
|
||||
print '<input type="date" name="end_date" class="flat" value="' . dol_escape_htmltag($end_date) . '">';
|
||||
print '<br><small>' . $langs->trans("DateRangeHelp") . '</small>';
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
|
||||
print '</table>';
|
||||
|
||||
// Buttons
|
||||
print '<div class="center">';
|
||||
print '<input type="submit" class="button" value="' . $langs->trans("CreateDeclaration") . '">';
|
||||
print '<a href="declarationtvaindex.php" class="button">' . $langs->trans("Cancel") . '</a>';
|
||||
print '</div>';
|
||||
|
||||
print '</form>';
|
||||
print '</div>';
|
||||
|
||||
// Print configuration section
|
||||
print '<div class="fiche">';
|
||||
print '<div class="titre">' . $langs->trans("DeclarationTVAConfiguration") . '</div>';
|
||||
print '<div class="info">';
|
||||
print $langs->trans("ConfigurationInfo") . ' ';
|
||||
print '<a href="admin/setup_mvp.php" class="butAction">' . $langs->trans("ConfigurePCGAccounts") . '</a>';
|
||||
print '</div>';
|
||||
print '</div>';
|
||||
|
||||
// Print footer
|
||||
llxFooter();
|
||||
?>
|
||||
171
declarationtva_view.php
Normal file
171
declarationtva_view.php
Normal file
@ -0,0 +1,171 @@
|
||||
<?php
|
||||
/**
|
||||
* DeclarationTVA View Declaration
|
||||
* French CA-3 VAT Declaration Module for Dolibarr
|
||||
* MVP Version - Phase 1
|
||||
*/
|
||||
|
||||
// Load Dolibarr environment
|
||||
if (file_exists('../main.inc.php')) {
|
||||
$res = @include '../main.inc.php';
|
||||
} elseif (file_exists('../../main.inc.php')) {
|
||||
$res = @include '../../main.inc.php';
|
||||
} else {
|
||||
$res = 0;
|
||||
}
|
||||
|
||||
if (!$res) {
|
||||
die("Include of main fails");
|
||||
}
|
||||
|
||||
// Load module classes
|
||||
require_once DOL_DOCUMENT_ROOT . '/custom/declarationtva/core/class/declarationtva.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT . '/custom/declarationtva/core/class/declarationtva_config.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT . '/custom/declarationtva/core/class/declarationtva_period.class.php';
|
||||
|
||||
// Access control
|
||||
if (!$user->hasRight("declarationtva", "declarationtva", "read")) {
|
||||
accessforbidden();
|
||||
}
|
||||
|
||||
// Load language files
|
||||
$langs->load("declarationtva@declarationtva");
|
||||
|
||||
// Get declaration ID
|
||||
$id = GETPOST('id', 'int');
|
||||
if (empty($id)) {
|
||||
accessforbidden();
|
||||
}
|
||||
|
||||
// Initialize objects
|
||||
$declarationtva = new DeclarationTVA($db, $conf->entity);
|
||||
$config = new DeclarationTVA_Config($db, $conf->entity);
|
||||
$period = new DeclarationTVA_Period($db, $conf->entity);
|
||||
|
||||
// Fetch declaration
|
||||
if ($declarationtva->fetch($id) < 0) {
|
||||
setEventMessages($langs->trans("DeclarationNotFound"), null, 'errors');
|
||||
header("Location: declarationtvaindex.php");
|
||||
exit;
|
||||
}
|
||||
|
||||
// Get period information
|
||||
$period_info = array();
|
||||
if ($declarationtva->period_id > 0) {
|
||||
$period->fetch($declarationtva->period_id);
|
||||
$period_info = array(
|
||||
'name' => $period->period_name,
|
||||
'start_date' => $period->start_date,
|
||||
'end_date' => $period->end_date
|
||||
);
|
||||
}
|
||||
|
||||
// Page title
|
||||
$title = $langs->trans("ViewDeclaration") . ' - ' . $declarationtva->declaration_number;
|
||||
llxHeader('', $title);
|
||||
|
||||
// Print page header
|
||||
print load_fiche_titre($title, '', 'title_accountancy');
|
||||
|
||||
// Print declaration details
|
||||
print '<div class="fiche">';
|
||||
print '<div class="titre">' . $langs->trans("DeclarationDetails") . '</div>';
|
||||
|
||||
print '<table class="noborder centpercent">';
|
||||
|
||||
print '<tr>';
|
||||
print '<td class="fieldrequired">' . $langs->trans("DeclarationNumber") . '</td>';
|
||||
print '<td>' . $declarationtva->declaration_number . '</td>';
|
||||
print '</tr>';
|
||||
|
||||
print '<tr>';
|
||||
print '<td>' . $langs->trans("DeclarationName") . '</td>';
|
||||
print '<td>' . $declarationtva->declaration_name . '</td>';
|
||||
print '</tr>';
|
||||
|
||||
print '<tr>';
|
||||
print '<td>' . $langs->trans("Period") . '</td>';
|
||||
print '<td>' . $period_info['name'] . '</td>';
|
||||
print '</tr>';
|
||||
|
||||
print '<tr>';
|
||||
print '<td>' . $langs->trans("DateRange") . '</td>';
|
||||
print '<td>' . dol_print_date($period_info['start_date'], 'day') . ' - ' . dol_print_date($period_info['end_date'], 'day') . '</td>';
|
||||
print '</tr>';
|
||||
|
||||
print '<tr>';
|
||||
print '<td>' . $langs->trans("Status") . '</td>';
|
||||
print '<td>' . $langs->trans("Status" . ucfirst($declarationtva->status)) . '</td>';
|
||||
print '</tr>';
|
||||
|
||||
print '<tr>';
|
||||
print '<td>' . $langs->trans("CreatedDate") . '</td>';
|
||||
print '<td>' . dol_print_date($declarationtva->created_date, 'dayhour') . '</td>';
|
||||
print '</tr>';
|
||||
|
||||
print '</table>';
|
||||
print '</div>';
|
||||
|
||||
// Print CA-3 amounts (placeholder for now)
|
||||
print '<div class="fiche">';
|
||||
print '<div class="titre">' . $langs->trans("CA3Amounts") . '</div>';
|
||||
|
||||
print '<table class="noborder centpercent">';
|
||||
|
||||
print '<tr class="liste_titre">';
|
||||
print '<th>' . $langs->trans("CA3Line") . '</th>';
|
||||
print '<th>' . $langs->trans("Description") . '</th>';
|
||||
print '<th>' . $langs->trans("Amount") . '</th>';
|
||||
print '</tr>';
|
||||
|
||||
// Placeholder CA-3 lines
|
||||
$ca3_lines = array(
|
||||
'A1' => array('desc' => 'Opérations imposables (ventes/prestations)', 'amount' => 0),
|
||||
'A2' => array('desc' => 'Opérations imposables spéciales', 'amount' => 0),
|
||||
'A3' => array('desc' => 'Services achetés non établis', 'amount' => 0),
|
||||
'A4' => array('desc' => 'Importations', 'amount' => 0),
|
||||
'A5' => array('desc' => 'Sorties de régimes suspensifs', 'amount' => 0),
|
||||
'08' => array('desc' => 'Autres opérations imposables', 'amount' => 0),
|
||||
'09' => array('desc' => 'Opérations exonérées', 'amount' => 0),
|
||||
'9B' => array('desc' => 'Opérations non imposables', 'amount' => 0),
|
||||
'17' => array('desc' => 'TVA due acquisitions intracommunautaires', 'amount' => 0),
|
||||
'20' => array('desc' => 'TVA déductible immobilisations', 'amount' => 0),
|
||||
'21' => array('desc' => 'TVA déductible autres biens/services', 'amount' => 0),
|
||||
'22' => array('desc' => 'Crédit de TVA reportable', 'amount' => 0),
|
||||
'25' => array('desc' => 'TVA brute due', 'amount' => 0),
|
||||
'26' => array('desc' => 'TVA déductible totale', 'amount' => 0),
|
||||
'28' => array('desc' => 'TVA nette à payer', 'amount' => 0),
|
||||
'29' => array('desc' => 'Crédit de TVA', 'amount' => 0)
|
||||
);
|
||||
|
||||
foreach ($ca3_lines as $line => $data) {
|
||||
print '<tr>';
|
||||
print '<td>' . $line . '</td>';
|
||||
print '<td>' . $data['desc'] . '</td>';
|
||||
print '<td class="right">' . price($data['amount']) . '</td>';
|
||||
print '</tr>';
|
||||
}
|
||||
|
||||
print '</table>';
|
||||
print '</div>';
|
||||
|
||||
// Print actions
|
||||
print '<div class="fiche">';
|
||||
print '<div class="titre">' . $langs->trans("Actions") . '</div>';
|
||||
|
||||
print '<div class="center">';
|
||||
|
||||
if ($declarationtva->status == 'draft') {
|
||||
print '<a href="' . $_SERVER['PHP_SELF'] . '?id=' . $id . '&action=validate" class="butAction">' . $langs->trans("Validate") . '</a>';
|
||||
} elseif ($declarationtva->status == 'validated') {
|
||||
print '<a href="' . $_SERVER['PHP_SELF'] . '?id=' . $id . '&action=submit" class="butAction">' . $langs->trans("Submit") . '</a>';
|
||||
}
|
||||
|
||||
print '<a href="declarationtvaindex.php" class="butAction">' . $langs->trans("BackToList") . '</a>';
|
||||
|
||||
print '</div>';
|
||||
print '</div>';
|
||||
|
||||
// Print footer
|
||||
llxFooter();
|
||||
?>
|
||||
@ -402,3 +402,22 @@ DeclarationSubmitted = Declaration submitted successfully
|
||||
ErrorCreatingDeclaration = Error creating declaration
|
||||
ErrorValidatingDeclaration = Error validating declaration
|
||||
ErrorSubmittingDeclaration = Error submitting declaration
|
||||
|
||||
# Create Declaration Page
|
||||
DeclarationDetails = Declaration Details
|
||||
SelectPeriod = Select Period
|
||||
ChoosePeriod = Choose a period
|
||||
DeclarationName = Declaration Name
|
||||
DeclarationNameHelp = Enter a descriptive name for this declaration (e.g., "Q1 2024 VAT Declaration")
|
||||
DateRange = Date Range (Optional)
|
||||
DateRangeHelp = Override the period dates if needed
|
||||
Cancel = Cancel
|
||||
ConfigurationInfo = Make sure your PCG accounts are properly configured before creating declarations.
|
||||
|
||||
# View Declaration Page
|
||||
ViewDeclaration = View Declaration
|
||||
DeclarationNotFound = Declaration not found
|
||||
CreatedDate = Created Date
|
||||
CA3Amounts = CA-3 Amounts
|
||||
CA3Line = CA-3 Line
|
||||
BackToList = Back to List
|
||||
|
||||
@ -391,3 +391,22 @@ DeclarationSubmitted = Déclaration soumise avec succès
|
||||
ErrorCreatingDeclaration = Erreur lors de la création de la déclaration
|
||||
ErrorValidatingDeclaration = Erreur lors de la validation de la déclaration
|
||||
ErrorSubmittingDeclaration = Erreur lors de la soumission de la déclaration
|
||||
|
||||
# Create Declaration Page
|
||||
DeclarationDetails = Détails de la déclaration
|
||||
SelectPeriod = Sélectionner la période
|
||||
ChoosePeriod = Choisir une période
|
||||
DeclarationName = Nom de la déclaration
|
||||
DeclarationNameHelp = Entrez un nom descriptif pour cette déclaration (ex: "Déclaration TVA T1 2024")
|
||||
DateRange = Plage de dates (Optionnel)
|
||||
DateRangeHelp = Remplacer les dates de période si nécessaire
|
||||
Cancel = Annuler
|
||||
ConfigurationInfo = Assurez-vous que vos comptes PCG sont correctement configurés avant de créer des déclarations.
|
||||
|
||||
# View Declaration Page
|
||||
ViewDeclaration = Voir la déclaration
|
||||
DeclarationNotFound = Déclaration non trouvée
|
||||
CreatedDate = Date de création
|
||||
CA3Amounts = Montants CA-3
|
||||
CA3Line = Ligne CA-3
|
||||
BackToList = Retour à la liste
|
||||
|
||||
Loading…
Reference in New Issue
Block a user