diff --git a/htdocs/accountancy/closure/index.html b/htdocs/accountancy/closure/index.html
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/htdocs/accountancy/closure/index.php b/htdocs/accountancy/closure/index.php
new file mode 100644
index 00000000000..1c9fa255fed
--- /dev/null
+++ b/htdocs/accountancy/closure/index.php
@@ -0,0 +1,132 @@
+
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+/**
+ * \file htdocs/accountancy/closure/index.php
+ * \ingroup Accountancy
+ * \brief Home closure page
+ */
+
+require '../../main.inc.php';
+require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php';
+require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php';
+require_once DOL_DOCUMENT_ROOT . '/accountancy/class/bookkeeping.class.php';
+
+// Load translation files required by the page
+$langs->loadLangs(array("compta","bills","other","main","accountancy"));
+
+// Security check
+if (empty($conf->accounting->enabled)) {
+ accessforbidden();
+}
+if ($user->societe_id > 0)
+ accessforbidden();
+if (! $user->rights->accounting->fiscalyear->closure)
+ accessforbidden();
+
+
+$month_start= ($conf->global->SOCIETE_FISCAL_MONTH_START?($conf->global->SOCIETE_FISCAL_MONTH_START):1);
+if (GETPOST("year", 'int')) $year_start = GETPOST("year", 'int');
+else
+{
+ $year_start = dol_print_date(dol_now(), '%Y');
+ if (dol_print_date(dol_now(), '%m') < $month_start) $year_start--; // If current month is lower that starting fiscal month, we start last year
+}
+$year_end = $year_start + 1;
+$month_end = $month_start - 1;
+if ($month_end < 1)
+{
+ $month_end = 12;
+ $year_end--;
+}
+$search_date_start = dol_mktime(0, 0, 0, $month_start, 1, $year_start);
+$search_date_end = dol_get_last_day($year_end, $month_end);
+$year_current = $year_start;
+
+/*
+ * Actions
+ */
+
+
+/*
+ * View
+ */
+
+llxHeader('', $langs->trans("Closure"));
+
+$textprevyear = '' . img_previous() . '';
+$textnextyear = ' ' . img_next() . '';
+
+
+print load_fiche_titre($langs->trans("Closure") . " " . $textprevyear . " " . $langs->trans("Year") . " " . $year_start . " " . $textnextyear, '', 'title_accountancy');
+
+print $langs->trans("DescClosure") . ' ';
+print ' ';
+
+
+$y = $year_current;
+
+$buttonbind = '' . $langs->trans("ValidateMovements") . '';
+
+print_barre_liste($langs->trans("OverviewOfMovementsNotValidated"), '', '', '', '', '', '', -1, '', '', 0, $buttonbind, '', 0, 1, 1);
+
+print '
';
+
+// End of page
+llxFooter();
+$db->close();
diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php
index cf95da29568..0c8a94e0115 100644
--- a/htdocs/core/menus/standard/eldy.lib.php
+++ b/htdocs/core/menus/standard/eldy.lib.php
@@ -1291,12 +1291,22 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM
// Accounting
$newmenu->add("/accountancy/index.php?leftmenu=accountancy_accountancy", $langs->trans("MenuAccountancy"), 0, $user->rights->accounting->mouvements->lire, '', $mainmenu, 'accountancy', 1);
+
// General Ledger
$newmenu->add("/accountancy/bookkeeping/list.php?mainmenu=accountancy&leftmenu=accountancy_accountancy", $langs->trans("Bookkeeping"), 1, $user->rights->accounting->mouvements->lire);
// Balance
$newmenu->add("/accountancy/bookkeeping/balance.php?mainmenu=accountancy&leftmenu=accountancy_accountancy", $langs->trans("AccountBalance"), 1, $user->rights->accounting->mouvements->lire);
+ // Closure
+ if (! empty($conf->global->MAIN_FEATURES_LEVEL) && $conf->global->MAIN_FEATURES_LEVEL >= 2) {
+ $newmenu->add("/accountancy/closure/index.php?mainmenu=accountancy&leftmenu=accountancy_closure", $langs->trans("MenuAccountancyClosure"), 1, $user->rights->accounting->fiscalyear->closure, '', $mainmenu, 'closure');
+
+ if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_closure/', $leftmenu)) {
+ $newmenu->add("/accountancy/closure/validate.php?leftmenu=accountancy_closure", $langs->trans("MenuAccountancyValidationMovements"), 2, $user->rights->accounting->fiscalyear->closure);
+ }
+ }
+
// Files
if ((! empty($conf->global->MAIN_FEATURES_LEVEL) && $conf->global->MAIN_FEATURES_LEVEL >= 1) || ! empty($conf->global->ACCOUNTANCY_SHOW_EXPORT_FILES_MENU))
{
@@ -1306,9 +1316,9 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM
// Reports
$newmenu->add("/compta/resultat/index.php?mainmenu=accountancy&leftmenu=accountancy_report", $langs->trans("Reportings"), 1, $user->rights->accounting->comptarapport->lire, '', $mainmenu, 'ca');
- if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_report/', $leftmenu)) {
+ if ($usemenuhider || empty($leftmenu) || preg_match('/accountancy_report/', $leftmenu)) {
$newmenu->add("/compta/resultat/index.php?leftmenu=accountancy_report", $langs->trans("MenuReportInOut"), 2, $user->rights->accounting->comptarapport->lire);
- $newmenu->add("/compta/resultat/clientfourn.php?leftmenu=accountancy_report", $langs->trans("ByPredefinedAccountGroups"), 3, $user->rights->accounting->comptarapport->lire);
+ $newmenu->add("/compta/resultat/clientfourn.php?leftmenu=accountancy_report", $langs->trans("ByPredefinedAccountGroups"), 3, $user->rights->accounting->comptarapport->lire);
$newmenu->add("/compta/resultat/result.php?leftmenu=accountancy_report", $langs->trans("ByPersonalizedAccountGroups"), 3, $user->rights->accounting->comptarapport->lire);
}
diff --git a/htdocs/core/modules/modAccounting.class.php b/htdocs/core/modules/modAccounting.class.php
index a806cab111f..a596fd9801d 100644
--- a/htdocs/core/modules/modAccounting.class.php
+++ b/htdocs/core/modules/modAccounting.class.php
@@ -255,6 +255,13 @@ class modAccounting extends DolibarrModules
$this->rights[$r][5] = 'lire';
$r++;
+ $this->rights[$r][0] = 50430;
+ $this->rights[$r][1] = 'Manage fiscal periods, validate movements and close periods';
+ $this->rights[$r][2] = 'r';
+ $this->rights[$r][3] = 0;
+ $this->rights[$r][4] = 'fiscalyear';
+ $this->rights[$r][5] = 'write';
+ $r++;
// Menus
//-------
diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang
index a76e79aa701..45133632481 100644
--- a/htdocs/langs/en_US/accountancy.lang
+++ b/htdocs/langs/en_US/accountancy.lang
@@ -98,6 +98,8 @@ MenuExpenseReportAccounts=Expense report accounts
MenuLoanAccounts=Loan accounts
MenuProductsAccounts=Product accounts
MenuClosureAccounts=Closure accounts
+MenuAccountancyClosure=Closure
+MenuAccountancyValidationMovements=Validate movements
ProductsBinding=Products accounts
TransferInAccounting=Transfer in accounting
RegistrationInAccounting=Registration in accounting
@@ -243,6 +245,12 @@ DescVentilExpenseReport=Consult here the list of expense report lines bound (or
DescVentilExpenseReportMore=If you setup accounting account on type of expense report lines, the application will be able to make all the binding between your expense report lines and the accounting account of your chart of accounts, just in one click with the button "%s". If account was not set on fees dictionary or if you still have some lines not bound to any account, you will have to make a manual binding from the menu "%s".
DescVentilDoneExpenseReport=Consult here the list of the lines of expenses reports and their fees accounting account
+DescClosure=Consult here the number of movements by month who are not validated & fiscal years already open
+OverviewOfMovementsNotValidated=Step 1/ Overview of movements not validated. (Necessary to close a fiscal year)
+ValidateMovements=Validate movements
+DescValidateMovements=Any modification or deletion of writing, lettering and deletes will be prohibited. All entries for an exercise must be validated otherwise closing will not be possible
+SelectMonthAndValidate=Select month and validate movements
+
ValidateHistory=Bind Automatically
AutomaticBindingDone=Automatic binding done