Permission System Fixes: - Uncommented and updated module permissions - Added proper permission levels: read, write, delete, admin - Updated permission names from 'myobject' to 'declarationtva' - Fixed menu permission checks Permission Levels: - Read: Access to view declarations and periods - Write: Create and update declarations - Delete: Remove declarations and periods - Admin: Access to configuration and setup Access Control Updates: - Updated setup_mvp.php to use correct permission check - Updated declarationtvaindex.php to use correct permission check - Menu entries now use proper permission validation Testing Instructions: 1. Disable and re-enable the module to refresh permissions 2. Go to Home -> Users -> admin user 3. Check DeclarationTVA permissions are enabled 4. Try accessing the configuration page again The module should now be accessible with proper permissions!
186 lines
6.7 KiB
PHP
186 lines
6.7 KiB
PHP
<?php
|
|
/**
|
|
* DeclarationTVA Main Interface
|
|
* 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");
|
|
|
|
// Initialize objects
|
|
$declarationtva = new DeclarationTVA($db, $conf->entity);
|
|
$config = new DeclarationTVA_Config($db, $conf->entity);
|
|
$period = new DeclarationTVA_Period($db, $conf->entity);
|
|
|
|
// Handle actions
|
|
$action = GETPOST('action', 'alpha');
|
|
$declaration_id = GETPOST('declaration_id', 'int');
|
|
$period_id = GETPOST('period_id', 'int');
|
|
|
|
// Process actions
|
|
if ($action == 'create_declaration' && $period_id > 0) {
|
|
$declaration_id = $declarationtva->createDeclaration($period_id);
|
|
if ($declaration_id > 0) {
|
|
setEventMessages($langs->trans("DeclarationCreated"), null, 'mesgs');
|
|
} else {
|
|
setEventMessages($langs->trans("ErrorCreatingDeclaration") . ": " . $declarationtva->error, null, 'errors');
|
|
}
|
|
} elseif ($action == 'validate_declaration' && $declaration_id > 0) {
|
|
if ($declarationtva->validateDeclaration($declaration_id)) {
|
|
setEventMessages($langs->trans("DeclarationValidated"), null, 'mesgs');
|
|
} else {
|
|
setEventMessages($langs->trans("ErrorValidatingDeclaration"), null, 'errors');
|
|
}
|
|
} elseif ($action == 'submit_declaration' && $declaration_id > 0) {
|
|
if ($declarationtva->submitDeclaration($declaration_id)) {
|
|
setEventMessages($langs->trans("DeclarationSubmitted"), null, 'mesgs');
|
|
} else {
|
|
setEventMessages($langs->trans("ErrorSubmittingDeclaration"), null, 'errors');
|
|
}
|
|
}
|
|
|
|
// Get data for display
|
|
$periods = $period->getAllPeriods();
|
|
$declarations = array();
|
|
|
|
// Get declarations for each period
|
|
foreach ($periods as $p) {
|
|
$sql = "SELECT * FROM " . MAIN_DB_PREFIX . "declarationtva_declarations
|
|
WHERE period_id = " . $p['rowid'] . " AND entity = " . $conf->entity . "
|
|
ORDER BY created_date DESC";
|
|
|
|
$result = $db->query($sql);
|
|
if ($result) {
|
|
while ($obj = $db->fetch_object($result)) {
|
|
$declarations[] = array(
|
|
'rowid' => $obj->rowid,
|
|
'declaration_number' => $obj->declaration_number,
|
|
'status' => $obj->status,
|
|
'total_vat_collected' => $obj->total_vat_collected,
|
|
'total_vat_deductible' => $obj->total_vat_deductible,
|
|
'net_vat_due' => $obj->net_vat_due,
|
|
'vat_credit' => $obj->vat_credit,
|
|
'created_date' => $obj->created_date,
|
|
'period_name' => $p['period_name']
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Page title
|
|
$title = $langs->trans("DeclarationTVAMainInterface");
|
|
llxHeader('', $title);
|
|
|
|
// Print page header
|
|
print load_fiche_titre($title, '', 'title_accountancy');
|
|
|
|
// Print periods section
|
|
print '<div class="fiche">';
|
|
print '<div class="fichehalfleft">';
|
|
print '<div class="titre">' . $langs->trans("DeclarationTVAPeriods") . '</div>';
|
|
|
|
if (empty($periods)) {
|
|
print '<div class="info">' . $langs->trans("NoPeriodsFound") . '</div>';
|
|
} else {
|
|
print '<table class="noborder centpercent">';
|
|
print '<tr class="liste_titre">';
|
|
print '<th>' . $langs->trans("PeriodName") . '</th>';
|
|
print '<th>' . $langs->trans("StartDate") . '</th>';
|
|
print '<th>' . $langs->trans("EndDate") . '</th>';
|
|
print '<th>' . $langs->trans("Status") . '</th>';
|
|
print '<th>' . $langs->trans("Actions") . '</th>';
|
|
print '</tr>';
|
|
|
|
foreach ($periods as $p) {
|
|
print '<tr>';
|
|
print '<td>' . $p['period_name'] . '</td>';
|
|
print '<td>' . dol_print_date($p['start_date'], 'day') . '</td>';
|
|
print '<td>' . dol_print_date($p['end_date'], 'day') . '</td>';
|
|
print '<td>' . $langs->trans("Status" . ucfirst($p['status'])) . '</td>';
|
|
print '<td>';
|
|
print '<a href="' . $_SERVER['PHP_SELF'] . '?action=create_declaration&period_id=' . $p['rowid'] . '" class="butAction">' . $langs->trans("CreateDeclaration") . '</a>';
|
|
print '</td>';
|
|
print '</tr>';
|
|
}
|
|
print '</table>';
|
|
}
|
|
|
|
print '</div>';
|
|
print '</div>';
|
|
|
|
// Print declarations section
|
|
print '<div class="fiche">';
|
|
print '<div class="fichehalfright">';
|
|
print '<div class="titre">' . $langs->trans("DeclarationTVADeclarations") . '</div>';
|
|
|
|
if (empty($declarations)) {
|
|
print '<div class="info">' . $langs->trans("NoDeclarationsFound") . '</div>';
|
|
} else {
|
|
print '<table class="noborder centpercent">';
|
|
print '<tr class="liste_titre">';
|
|
print '<th>' . $langs->trans("DeclarationNumber") . '</th>';
|
|
print '<th>' . $langs->trans("Period") . '</th>';
|
|
print '<th>' . $langs->trans("Status") . '</th>';
|
|
print '<th>' . $langs->trans("NetVATDue") . '</th>';
|
|
print '<th>' . $langs->trans("Actions") . '</th>';
|
|
print '</tr>';
|
|
|
|
foreach ($declarations as $d) {
|
|
print '<tr>';
|
|
print '<td>' . $d['declaration_number'] . '</td>';
|
|
print '<td>' . $d['period_name'] . '</td>';
|
|
print '<td>' . $langs->trans("Status" . ucfirst($d['status'])) . '</td>';
|
|
print '<td>' . price($d['net_vat_due']) . '</td>';
|
|
print '<td>';
|
|
|
|
if ($d['status'] == 'draft') {
|
|
print '<a href="' . $_SERVER['PHP_SELF'] . '?action=validate_declaration&declaration_id=' . $d['rowid'] . '" class="butAction">' . $langs->trans("Validate") . '</a>';
|
|
} elseif ($d['status'] == 'validated') {
|
|
print '<a href="' . $_SERVER['PHP_SELF'] . '?action=submit_declaration&declaration_id=' . $d['rowid'] . '" class="butAction">' . $langs->trans("Submit") . '</a>';
|
|
}
|
|
|
|
print '<a href="declarationtva_view.php?id=' . $d['rowid'] . '" class="butAction">' . $langs->trans("View") . '</a>';
|
|
print '</td>';
|
|
print '</tr>';
|
|
}
|
|
print '</table>';
|
|
}
|
|
|
|
print '</div>';
|
|
print '</div>';
|
|
|
|
// Print configuration section
|
|
print '<div class="fiche">';
|
|
print '<div class="titre">' . $langs->trans("DeclarationTVAConfiguration") . '</div>';
|
|
print '<div class="info">';
|
|
print '<a href="admin/setup.php" class="butAction">' . $langs->trans("ConfigureModule") . '</a>';
|
|
print '</div>';
|
|
print '</div>';
|
|
|
|
// Print footer
|
|
llxFooter();
|
|
?>
|