| Conditions | 60 |
| Paths | > 20000 |
| Total Lines | 373 |
| Code Lines | 250 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 0 | ||
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | <?php |
||
| 47 | public function index() |
||
| 48 | { |
||
| 49 | global $conf; |
||
| 50 | global $db; |
||
| 51 | global $user; |
||
| 52 | global $hookmanager; |
||
| 53 | global $user; |
||
| 54 | global $menumanager; |
||
| 55 | global $langs; |
||
| 56 | global $mysoc; |
||
| 57 | |||
| 58 | // Load translation files required by the page |
||
| 59 | $langs->loadLangs(["compta", "bills", "other", "accountancy"]); |
||
| 60 | |||
| 61 | $action = GETPOST('action', 'aZ09'); |
||
| 62 | $confirm = GETPOST('confirm', 'aZ09'); |
||
| 63 | $fiscal_period_id = GETPOSTINT('fiscal_period_id'); |
||
| 64 | $validatemonth = GETPOSTINT('validatemonth'); |
||
| 65 | $validateyear = GETPOSTINT('validateyear'); |
||
| 66 | |||
| 67 | // Security check |
||
| 68 | if (!isModEnabled('accounting')) { |
||
| 69 | accessforbidden(); |
||
| 70 | } |
||
| 71 | if ($user->socid > 0) { |
||
| 72 | accessforbidden(); |
||
| 73 | } |
||
| 74 | if (!$user->hasRight('accounting', 'fiscalyear', 'write')) { |
||
| 75 | accessforbidden(); |
||
| 76 | } |
||
| 77 | |||
| 78 | // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context |
||
| 79 | $hookmanager->initHooks(['accountancyclosure']); |
||
| 80 | |||
| 81 | $object = new BookKeeping($db); |
||
| 82 | |||
| 83 | $now = dol_now(); |
||
| 84 | $fiscal_periods = $object->getFiscalPeriods(); |
||
| 85 | if (!is_array($fiscal_periods)) { |
||
| 86 | setEventMessages($object->error, $object->errors, 'errors'); |
||
| 87 | } |
||
| 88 | |||
| 89 | $active_fiscal_periods = []; |
||
| 90 | $last_fiscal_period = null; |
||
| 91 | $current_fiscal_period = null; |
||
| 92 | $next_fiscal_period = null; |
||
| 93 | $next_active_fiscal_period = null; |
||
| 94 | if (is_array($fiscal_periods)) { |
||
| 95 | foreach ($fiscal_periods as $fiscal_period) { |
||
| 96 | if (empty($fiscal_period['status'])) { |
||
| 97 | $active_fiscal_periods[] = $fiscal_period; |
||
| 98 | } |
||
| 99 | if (isset($current_fiscal_period)) { |
||
| 100 | if (!isset($next_fiscal_period)) { |
||
| 101 | $next_fiscal_period = $fiscal_period; |
||
| 102 | } |
||
| 103 | if (!isset($next_active_fiscal_period) && empty($fiscal_period['status'])) { |
||
| 104 | $next_active_fiscal_period = $fiscal_period; |
||
| 105 | } |
||
| 106 | } else { |
||
| 107 | if ($fiscal_period_id == $fiscal_period['id'] || (empty($fiscal_period_id) && $fiscal_period['date_start'] <= $now && $now <= $fiscal_period['date_end'])) { |
||
| 108 | $current_fiscal_period = $fiscal_period; |
||
| 109 | } else { |
||
| 110 | $last_fiscal_period = $fiscal_period; |
||
| 111 | } |
||
| 112 | } |
||
| 113 | } |
||
| 114 | } |
||
| 115 | |||
| 116 | $accounting_groups_used_for_balance_sheet_account = array_filter(array_map('trim', explode(',', getDolGlobalString('ACCOUNTING_CLOSURE_ACCOUNTING_GROUPS_USED_FOR_BALANCE_SHEET_ACCOUNT'))), 'strlen'); |
||
| 117 | $accounting_groups_used_for_income_statement = array_filter(array_map('trim', explode(',', getDolGlobalString('ACCOUNTING_CLOSURE_ACCOUNTING_GROUPS_USED_FOR_INCOME_STATEMENT'))), 'strlen'); |
||
| 118 | |||
| 119 | |||
| 120 | /* |
||
| 121 | * Actions |
||
| 122 | */ |
||
| 123 | |||
| 124 | $parameters = ['fiscal_periods' => $fiscal_periods, 'last_fiscal_period' => $last_fiscal_period, 'current_fiscal_period' => $current_fiscal_period, 'next_fiscal_period' => $next_fiscal_period]; |
||
| 125 | $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks |
||
| 126 | if ($reshook < 0) { |
||
| 127 | setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); |
||
| 128 | } |
||
| 129 | |||
| 130 | if (empty($reshook)) { |
||
| 131 | if (isset($current_fiscal_period) && $user->hasRight('accounting', 'fiscalyear', 'write')) { |
||
| 132 | if ($action == 'confirm_step_1' && $confirm == "yes") { |
||
| 133 | $date_start = dol_mktime(0, 0, 0, GETPOSTINT('date_startmonth'), GETPOSTINT('date_startday'), GETPOSTINT('date_startyear')); |
||
| 134 | $date_end = dol_mktime(23, 59, 59, GETPOSTINT('date_endmonth'), GETPOSTINT('date_endday'), GETPOSTINT('date_endyear')); |
||
| 135 | |||
| 136 | $result = $object->validateMovementForFiscalPeriod($date_start, $date_end); |
||
| 137 | if ($result > 0) { |
||
| 138 | setEventMessages($langs->trans("AllMovementsWereRecordedAsValidated"), null, 'mesgs'); |
||
| 139 | |||
| 140 | header("Location: " . $_SERVER['PHP_SELF'] . (isset($current_fiscal_period) ? '?fiscal_period_id=' . $current_fiscal_period['id'] : '')); |
||
| 141 | exit; |
||
| 142 | } else { |
||
| 143 | setEventMessages($langs->trans("NotAllMovementsCouldBeRecordedAsValidated"), null, 'errors'); |
||
| 144 | setEventMessages($object->error, $object->errors, 'errors'); |
||
| 145 | $action = ''; |
||
| 146 | } |
||
| 147 | } elseif ($action == 'confirm_step_2' && $confirm == "yes") { |
||
| 148 | $new_fiscal_period_id = GETPOSTINT('new_fiscal_period_id'); |
||
| 149 | $separate_auxiliary_account = GETPOST('separate_auxiliary_account', 'aZ09'); |
||
| 150 | $generate_bookkeeping_records = GETPOST('generate_bookkeeping_records', 'aZ09'); |
||
| 151 | |||
| 152 | $result = $object->closeFiscalPeriod($current_fiscal_period['id'], $new_fiscal_period_id, $separate_auxiliary_account, $generate_bookkeeping_records); |
||
| 153 | if ($result < 0) { |
||
| 154 | setEventMessages($object->error, $object->errors, 'errors'); |
||
| 155 | } else { |
||
| 156 | setEventMessages($langs->trans("AccountancyClosureCloseSuccessfully"), null, 'mesgs'); |
||
| 157 | |||
| 158 | header("Location: " . $_SERVER['PHP_SELF'] . (isset($current_fiscal_period) ? '?fiscal_period_id=' . $current_fiscal_period['id'] : '')); |
||
| 159 | exit; |
||
| 160 | } |
||
| 161 | } elseif ($action == 'confirm_step_3' && $confirm == "yes") { |
||
| 162 | $inventory_journal_id = GETPOSTINT('inventory_journal_id'); |
||
| 163 | $new_fiscal_period_id = GETPOSTINT('new_fiscal_period_id'); |
||
| 164 | $date_start = dol_mktime(0, 0, 0, GETPOSTINT('date_startmonth'), GETPOSTINT('date_startday'), GETPOSTINT('date_startyear')); |
||
| 165 | $date_end = dol_mktime(23, 59, 59, GETPOSTINT('date_endmonth'), GETPOSTINT('date_endday'), GETPOSTINT('date_endyear')); |
||
| 166 | |||
| 167 | $result = $object->insertAccountingReversal($current_fiscal_period['id'], $inventory_journal_id, $new_fiscal_period_id, $date_start, $date_end); |
||
| 168 | if ($result < 0) { |
||
| 169 | setEventMessages($object->error, $object->errors, 'errors'); |
||
| 170 | } else { |
||
| 171 | setEventMessages($langs->trans("AccountancyClosureInsertAccountingReversalSuccessfully"), null, 'mesgs'); |
||
| 172 | |||
| 173 | header("Location: " . $_SERVER['PHP_SELF'] . (isset($current_fiscal_period) ? '?fiscal_period_id=' . $current_fiscal_period['id'] : '')); |
||
| 174 | exit; |
||
| 175 | } |
||
| 176 | } |
||
| 177 | } |
||
| 178 | } |
||
| 179 | |||
| 180 | |||
| 181 | /* |
||
| 182 | * View |
||
| 183 | */ |
||
| 184 | |||
| 185 | $form = new Form($db); |
||
| 186 | $formaccounting = new FormAccounting($db); |
||
| 187 | |||
| 188 | $title = $langs->trans('Closure'); |
||
| 189 | |||
| 190 | $help_url = 'EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Cl.C3.B4ture_annuelle'; |
||
| 191 | |||
| 192 | llxHeader('', $title, $help_url); |
||
| 193 | |||
| 194 | $formconfirm = ''; |
||
| 195 | |||
| 196 | if (isset($current_fiscal_period)) { |
||
| 197 | if ($action == 'step_1') { |
||
| 198 | $form_question = []; |
||
| 199 | |||
| 200 | $form_question['date_start'] = [ |
||
| 201 | 'name' => 'date_start', |
||
| 202 | 'type' => 'date', |
||
| 203 | 'label' => $langs->trans('DateStart'), |
||
| 204 | 'value' => $current_fiscal_period['date_start'], |
||
| 205 | ]; |
||
| 206 | $form_question['date_end'] = [ |
||
| 207 | 'name' => 'date_end', |
||
| 208 | 'type' => 'date', |
||
| 209 | 'label' => $langs->trans('DateEnd'), |
||
| 210 | 'value' => $current_fiscal_period['date_end'], |
||
| 211 | ]; |
||
| 212 | |||
| 213 | $formconfirm = $form->formconfirm( |
||
| 214 | $_SERVER['PHP_SELF'] . '?fiscal_period_id=' . $current_fiscal_period['id'], |
||
| 215 | $langs->trans('ValidateMovements'), |
||
| 216 | $langs->trans('DescValidateMovements', $langs->transnoentitiesnoconv("RegistrationInAccounting")), |
||
| 217 | 'confirm_step_1', |
||
| 218 | $form_question, |
||
| 219 | '', |
||
| 220 | 1, |
||
| 221 | 300 |
||
| 222 | ); |
||
| 223 | } elseif ($action == 'step_2') { |
||
| 224 | $form_question = []; |
||
| 225 | |||
| 226 | $fiscal_period_arr = []; |
||
| 227 | foreach ($active_fiscal_periods as $info) { |
||
| 228 | $fiscal_period_arr[$info['id']] = $info['label']; |
||
| 229 | } |
||
| 230 | $form_question['new_fiscal_period_id'] = [ |
||
| 231 | 'name' => 'new_fiscal_period_id', |
||
| 232 | 'type' => 'select', |
||
| 233 | 'label' => $langs->trans('AccountancyClosureStep3NewFiscalPeriod'), |
||
| 234 | 'values' => $fiscal_period_arr, |
||
| 235 | 'default' => isset($next_active_fiscal_period) ? $next_active_fiscal_period['id'] : '', |
||
| 236 | ]; |
||
| 237 | $form_question['generate_bookkeeping_records'] = [ |
||
| 238 | 'name' => 'generate_bookkeeping_records', |
||
| 239 | 'type' => 'checkbox', |
||
| 240 | 'label' => $langs->trans('AccountancyClosureGenerateClosureBookkeepingRecords'), |
||
| 241 | 'value' => 1, |
||
| 242 | ]; |
||
| 243 | $form_question['separate_auxiliary_account'] = [ |
||
| 244 | 'name' => 'separate_auxiliary_account', |
||
| 245 | 'type' => 'checkbox', |
||
| 246 | 'label' => $langs->trans('AccountancyClosureSeparateAuxiliaryAccounts'), |
||
| 247 | 'value' => 0, |
||
| 248 | ]; |
||
| 249 | |||
| 250 | $formconfirm = $form->formconfirm( |
||
| 251 | $_SERVER['PHP_SELF'] . '?fiscal_period_id=' . $current_fiscal_period['id'], |
||
| 252 | $langs->trans('AccountancyClosureClose'), |
||
| 253 | $langs->trans('AccountancyClosureConfirmClose'), |
||
| 254 | 'confirm_step_2', |
||
| 255 | $form_question, |
||
| 256 | '', |
||
| 257 | 1, |
||
| 258 | 300 |
||
| 259 | ); |
||
| 260 | } elseif ($action == 'step_3') { |
||
| 261 | $form_question = []; |
||
| 262 | |||
| 263 | $form_question['inventory_journal_id'] = [ |
||
| 264 | 'name' => 'inventory_journal_id', |
||
| 265 | 'type' => 'other', |
||
| 266 | 'label' => $langs->trans('InventoryJournal'), |
||
| 267 | 'value' => $formaccounting->select_journal(0, "inventory_journal_id", 8, 1, 0, 0), |
||
| 268 | ]; |
||
| 269 | $fiscal_period_arr = []; |
||
| 270 | foreach ($active_fiscal_periods as $info) { |
||
| 271 | $fiscal_period_arr[$info['id']] = $info['label']; |
||
| 272 | } |
||
| 273 | $form_question['new_fiscal_period_id'] = [ |
||
| 274 | 'name' => 'new_fiscal_period_id', |
||
| 275 | 'type' => 'select', |
||
| 276 | 'label' => $langs->trans('AccountancyClosureStep3NewFiscalPeriod'), |
||
| 277 | 'values' => $fiscal_period_arr, |
||
| 278 | 'default' => isset($next_active_fiscal_period) ? $next_active_fiscal_period['id'] : '', |
||
| 279 | ]; |
||
| 280 | $form_question['date_start'] = [ |
||
| 281 | 'name' => 'date_start', |
||
| 282 | 'type' => 'date', |
||
| 283 | 'label' => $langs->trans('DateStart'), |
||
| 284 | 'value' => dol_time_plus_duree($current_fiscal_period['date_end'], -1, 'm'), |
||
| 285 | ]; |
||
| 286 | $form_question['date_end'] = [ |
||
| 287 | 'name' => 'date_end', |
||
| 288 | 'type' => 'date', |
||
| 289 | 'label' => $langs->trans('DateEnd'), |
||
| 290 | 'value' => $current_fiscal_period['date_end'], |
||
| 291 | ]; |
||
| 292 | |||
| 293 | $formconfirm = $form->formconfirm( |
||
| 294 | $_SERVER['PHP_SELF'] . '?fiscal_period_id=' . $current_fiscal_period['id'], |
||
| 295 | $langs->trans('AccountancyClosureAccountingReversal'), |
||
| 296 | $langs->trans('AccountancyClosureConfirmAccountingReversal'), |
||
| 297 | 'confirm_step_3', |
||
| 298 | $form_question, |
||
| 299 | '', |
||
| 300 | 1, |
||
| 301 | 300 |
||
| 302 | ); |
||
| 303 | } |
||
| 304 | } |
||
| 305 | |||
| 306 | // Call Hook formConfirm |
||
| 307 | $parameters = ['formConfirm' => $formconfirm, 'fiscal_periods' => $fiscal_periods, 'last_fiscal_period' => $last_fiscal_period, 'current_fiscal_period' => $current_fiscal_period, 'next_fiscal_period' => $next_fiscal_period]; |
||
| 308 | $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook |
||
| 309 | if (empty($reshook)) { |
||
| 310 | $formconfirm .= $hookmanager->resPrint; |
||
| 311 | } elseif ($reshook > 0) { |
||
| 312 | $formconfirm = $hookmanager->resPrint; |
||
| 313 | } |
||
| 314 | |||
| 315 | // Print form confirm |
||
| 316 | print $formconfirm; |
||
| 317 | |||
| 318 | $fiscal_period_nav_text = $langs->trans("FiscalPeriod"); |
||
| 319 | |||
| 320 | $fiscal_period_nav_text .= ' <a href="' . (isset($last_fiscal_period) ? $_SERVER['PHP_SELF'] . '?fiscal_period_id=' . $last_fiscal_period['id'] : '#" class="disabled') . '">' . img_previous() . '</a>'; |
||
| 321 | $fiscal_period_nav_text .= ' <a href="' . (isset($next_fiscal_period) ? $_SERVER['PHP_SELF'] . '?fiscal_period_id=' . $next_fiscal_period['id'] : '#" class="disabled') . '">' . img_next() . '</a>'; |
||
| 322 | if (!empty($current_fiscal_period)) { |
||
| 323 | $fiscal_period_nav_text .= $current_fiscal_period['label'] . ' (' . (isset($current_fiscal_period) ? dol_print_date($current_fiscal_period['date_start'], 'day') . ' - ' . dol_print_date($current_fiscal_period['date_end'], 'day') . ')' : ''); |
||
| 324 | } |
||
| 325 | |||
| 326 | print load_fiche_titre($langs->trans("Closure") . " - " . $fiscal_period_nav_text, '', 'title_accountancy'); |
||
| 327 | |||
| 328 | if (empty($current_fiscal_period)) { |
||
| 329 | print $langs->trans('ErrorNoFiscalPeriodActiveFound'); |
||
| 330 | } |
||
| 331 | |||
| 332 | if (isset($current_fiscal_period)) { |
||
| 333 | // Step 1 |
||
| 334 | $head = []; |
||
| 335 | $head[0][0] = DOL_URL_ROOT . '/accountancy/closure/index.php?fiscal_period_id=' . $current_fiscal_period['id']; |
||
| 336 | $head[0][1] = $langs->trans("AccountancyClosureStep1"); |
||
| 337 | $head[0][2] = 'step1'; |
||
| 338 | print dol_get_fiche_head($head, 'step1', '', -1, 'title_accountancy'); |
||
| 339 | |||
| 340 | print '<span class="opacitymedium">' . $langs->trans("AccountancyClosureStep1Desc") . '</span><br>'; |
||
| 341 | |||
| 342 | $count_by_month = $object->getCountByMonthForFiscalPeriod($current_fiscal_period['date_start'], $current_fiscal_period['date_end']); |
||
| 343 | if (!is_array($count_by_month)) { |
||
| 344 | setEventMessages($object->error, $object->errors, 'errors'); |
||
| 345 | } |
||
| 346 | |||
| 347 | if (empty($count_by_month['total'])) { |
||
| 348 | $buttonvalidate = '<a class="butActionRefused classfortooltip" href="#">' . $langs->trans("ValidateMovements") . '</a>'; |
||
| 349 | } else { |
||
| 350 | $buttonvalidate = '<a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?action=step_1&fiscal_period_id=' . $current_fiscal_period['id'] . '">' . $langs->trans("ValidateMovements") . '</a>'; |
||
| 351 | } |
||
| 352 | print_barre_liste($langs->trans("OverviewOfMovementsNotValidated"), '', '', '', '', '', '', -1, '', '', 0, $buttonvalidate, '', 0, 1, 0); |
||
| 353 | |||
| 354 | print '<div class="div-table-responsive-no-min">'; |
||
| 355 | print '<table class="noborder centpercent">'; |
||
| 356 | |||
| 357 | print '<tr class="liste_titre">'; |
||
| 358 | $nb_years = is_array($count_by_month['list']) ? count($count_by_month['list']) : 0; |
||
| 359 | if ($nb_years > 1) { |
||
| 360 | print '<td class="right">' . $langs->trans("Year") . '</td>'; |
||
| 361 | } |
||
| 362 | for ($i = 1; $i <= 12; $i++) { |
||
| 363 | print '<td class="right">' . $langs->trans('MonthShort' . str_pad($i, 2, '0', STR_PAD_LEFT)) . '</td>'; |
||
| 364 | } |
||
| 365 | print '<td class="right"><b>' . $langs->trans("Total") . '</b></td>'; |
||
| 366 | print '</tr>'; |
||
| 367 | |||
| 368 | if (is_array($count_by_month['list'])) { |
||
| 369 | foreach ($count_by_month['list'] as $info) { |
||
| 370 | print '<tr class="oddeven">'; |
||
| 371 | if ($nb_years > 1) { |
||
| 372 | print '<td class="right">' . $info['year'] . '</td>'; |
||
| 373 | } |
||
| 374 | for ($i = 1; $i <= 12; $i++) { |
||
| 375 | print '<td class="right">' . ((int) $info['count'][$i]) . '</td>'; |
||
| 376 | } |
||
| 377 | print '<td class="right"><b>' . $info['total'] . '</b></td></tr>'; |
||
| 378 | } |
||
| 379 | } |
||
| 380 | |||
| 381 | print "</table>\n"; |
||
| 382 | print '</div>'; |
||
| 383 | |||
| 384 | // Step 2 |
||
| 385 | $head = []; |
||
| 386 | $head[0][0] = DOL_URL_ROOT . '/accountancy/closure/index.php?fiscal_period_id=' . $current_fiscal_period['id']; |
||
| 387 | $head[0][1] = $langs->trans("AccountancyClosureStep2"); |
||
| 388 | $head[0][2] = 'step2'; |
||
| 389 | print dol_get_fiche_head($head, 'step2', '', -1, 'title_accountancy'); |
||
| 390 | |||
| 391 | // print '<span class="opacitymedium">' . $langs->trans("AccountancyClosureStep2Desc") . '</span><br>'; |
||
| 392 | |||
| 393 | if (empty($count_by_month['total']) && empty($current_fiscal_period['status'])) { |
||
| 394 | $button = '<a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?action=step_2&fiscal_period_id=' . $current_fiscal_period['id'] . '">' . $langs->trans("AccountancyClosureClose") . '</a>'; |
||
| 395 | } else { |
||
| 396 | $button = '<a class="butActionRefused classfortooltip" href="#">' . $langs->trans("AccountancyClosureClose") . '</a>'; |
||
| 397 | } |
||
| 398 | print_barre_liste('', '', '', '', '', '', '', -1, '', '', 0, $button, '', 0, 1, 0); |
||
| 399 | |||
| 400 | // Step 3 |
||
| 401 | $head = []; |
||
| 402 | $head[0][0] = DOL_URL_ROOT . '/accountancy/closure/index.php?fiscal_period_id=' . $current_fiscal_period['id']; |
||
| 403 | $head[0][1] = $langs->trans("AccountancyClosureStep3"); |
||
| 404 | $head[0][2] = 'step3'; |
||
| 405 | print dol_get_fiche_head($head, 'step3', '', -1, 'title_accountancy'); |
||
| 406 | |||
| 407 | // print '<span class="opacitymedium">' . $langs->trans("AccountancyClosureStep3Desc") . '</span><br>'; |
||
| 408 | |||
| 409 | if (empty($current_fiscal_period['status'])) { |
||
| 410 | $button = '<a class="butActionRefused classfortooltip" href="#">' . $langs->trans("AccountancyClosureAccountingReversal") . '</a>'; |
||
| 411 | } else { |
||
| 412 | $button = '<a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?action=step_3&fiscal_period_id=' . $current_fiscal_period['id'] . '">' . $langs->trans("AccountancyClosureAccountingReversal") . '</a>'; |
||
| 413 | } |
||
| 414 | print_barre_liste('', '', '', '', '', '', '', -1, '', '', 0, $button, '', 0, 1, 0); |
||
| 415 | } |
||
| 416 | |||
| 417 | // End of page |
||
| 418 | llxFooter(); |
||
| 419 | $db->close(); |
||
| 420 | } |
||
| 422 |