29require 
'../../main.inc.php';
 
   31require_once DOL_DOCUMENT_ROOT.
'/core/lib/accounting.lib.php';
 
   32require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/lettering.class.php';
 
   33require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/bookkeeping.class.php';
 
   34require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingjournal.class.php';
 
   35require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formaccounting.class.php';
 
   36require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
 
   37require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
 
   38require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
 
   41$langs->loadLangs(array(
"accountancy", 
"compta"));
 
   43$action = 
GETPOST(
'action', 
'aZ09');
 
   44$socid = 
GETPOST(
'socid', 
'int');
 
   45$massaction = 
GETPOST(
'massaction', 
'alpha');
 
   46$confirm = 
GETPOST(
'confirm', 
'alpha');
 
   47$toselect = 
GETPOST(
'toselect', 
'array');
 
   48$type = 
GETPOST(
'type', 
'alpha');
 
   50  $context_default = 
'bookkeepingbysubaccountlist';
 
   52  $context_default = 
'bookkeepingbyaccountlist';
 
   54$contextpage = 
GETPOST(
'contextpage', 
'aZ') ? 
GETPOST(
'contextpage', 
'aZ') : $context_default;
 
   55$search_date_startyear =  
GETPOST(
'search_date_startyear', 
'int');
 
   56$search_date_startmonth =  
GETPOST(
'search_date_startmonth', 
'int');
 
   57$search_date_startday =  
GETPOST(
'search_date_startday', 
'int');
 
   58$search_date_endyear =  
GETPOST(
'search_date_endyear', 
'int');
 
   59$search_date_endmonth =  
GETPOST(
'search_date_endmonth', 
'int');
 
   60$search_date_endday =  
GETPOST(
'search_date_endday', 
'int');
 
   61$search_date_start = 
dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear);
 
   62$search_date_end = 
dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear);
 
   64$search_date_export_startyear =  
GETPOST(
'search_date_export_startyear', 
'int');
 
   65$search_date_export_startmonth =  
GETPOST(
'search_date_export_startmonth', 
'int');
 
   66$search_date_export_startday =  
GETPOST(
'search_date_export_startday', 
'int');
 
   67$search_date_export_endyear =  
GETPOST(
'search_date_export_endyear', 
'int');
 
   68$search_date_export_endmonth =  
GETPOST(
'search_date_export_endmonth', 
'int');
 
   69$search_date_export_endday =  
GETPOST(
'search_date_export_endday', 
'int');
 
   70$search_date_export_start = 
dol_mktime(0, 0, 0, $search_date_export_startmonth, $search_date_export_startday, $search_date_export_startyear);
 
   71$search_date_export_end = 
dol_mktime(23, 59, 59, $search_date_export_endmonth, $search_date_export_endday, $search_date_export_endyear);
 
   72$search_date_validation_startyear =  
GETPOST(
'search_date_validation_startyear', 
'int');
 
   73$search_date_validation_startmonth =  
GETPOST(
'search_date_validation_startmonth', 
'int');
 
   74$search_date_validation_startday =  
GETPOST(
'search_date_validation_startday', 
'int');
 
   75$search_date_validation_endyear =  
GETPOST(
'search_date_validation_endyear', 
'int');
 
   76$search_date_validation_endmonth =  
GETPOST(
'search_date_validation_endmonth', 
'int');
 
   77$search_date_validation_endday =  
GETPOST(
'search_date_validation_endday', 
'int');
 
   78$search_date_validation_start = 
dol_mktime(0, 0, 0, $search_date_validation_startmonth, $search_date_validation_startday, $search_date_validation_startyear);
 
   79$search_date_validation_end = 
dol_mktime(23, 59, 59, $search_date_validation_endmonth, $search_date_validation_endday, $search_date_validation_endyear);
 
   80$search_import_key = 
GETPOST(
"search_import_key", 
'alpha');
 
   82$search_account_category = 
GETPOST(
'search_account_category', 
'int');
 
   84$search_accountancy_code_start = 
GETPOST(
'search_accountancy_code_start', 
'alpha');
 
   85if ($search_accountancy_code_start == - 1) {
 
   86  $search_accountancy_code_start = 
'';
 
   88$search_accountancy_code_end = 
GETPOST(
'search_accountancy_code_end', 
'alpha');
 
   89if ($search_accountancy_code_end == - 1) {
 
   90  $search_accountancy_code_end = 
'';
 
   92$search_doc_ref = 
GETPOST(
'search_doc_ref', 
'alpha');
 
   93$search_label_operation = 
GETPOST(
'search_label_operation', 
'alpha');
 
   94$search_mvt_num = 
GETPOST(
'search_mvt_num', 
'int');
 
   95$search_direction = 
GETPOST(
'search_direction', 
'alpha');
 
   96$search_ledger_code = 
GETPOST(
'search_ledger_code', 
'array');
 
   97$search_debit = 
GETPOST(
'search_debit', 
'alpha');
 
   98$search_credit = 
GETPOST(
'search_credit', 
'alpha');
 
   99$search_lettering_code = 
GETPOST(
'search_lettering_code', 
'alpha');
 
  100$search_not_reconciled = 
GETPOST(
'search_not_reconciled', 
'alpha');
 
  103  $action = 
'delbookkeepingyear';
 
  108$sortfield = 
GETPOST(
'sortfield', 
'aZ09comma');
 
  109$sortorder = 
GETPOST(
'sortorder', 
'aZ09comma');
 
  110$optioncss = 
GETPOST(
'optioncss', 
'alpha');
 
  111$page = GETPOSTISSET(
'pageplusone') ? (
GETPOST(
'pageplusone') - 1) : 
GETPOST(
"page", 
'int');
 
  112if (empty($page) || $page < 0) {
 
  115$offset = $limit * $page;
 
  116$pageprev = $page - 1;
 
  117$pagenext = $page + 1;
 
  118if ($sortorder == 
"") {
 
  121if ($sortfield == 
"") {
 
  122  $sortfield = 
"t.doc_date,t.rowid";
 
  128$hookmanager->initHooks(array($context_default));
 
  131$form = 
new Form($db);
 
  133if (empty($search_date_start) && empty($search_date_end) && !GETPOSTISSET(
'search_date_startday') && !GETPOSTISSET(
'search_date_startmonth') && !GETPOSTISSET(
'search_date_starthour')) {
 
  134  $sql = 
"SELECT date_start, date_end from ".MAIN_DB_PREFIX.
"accounting_fiscalyear ";
 
  135  $sql .= 
" where date_start < '".$db->idate(
dol_now()).
"' and date_end > '".$db->idate(
dol_now()).
"'";
 
  136  $sql .= $db->plimit(1);
 
  137  $res = $db->query($sql);
 
  139  if ($res->num_rows > 0) {
 
  140    $fiscalYear = $db->fetch_object($res);
 
  141    $search_date_start = strtotime($fiscalYear->date_start);
 
  142    $search_date_end = strtotime($fiscalYear->date_end);
 
  149    $year_end = $year_start + 1;
 
  150    $month_end = $month_start - 1;
 
  151    if ($month_end < 1) {
 
  155    $search_date_start = 
dol_mktime(0, 0, 0, $month_start, 1, $year_start);
 
  162  't.piece_num'=>array(
'label'=>$langs->trans(
"TransactionNumShort"), 
'checked'=>1),
 
  163  't.code_journal'=>array(
'label'=>$langs->trans(
"Codejournal"), 
'checked'=>1),
 
  164  't.doc_date'=>array(
'label'=>$langs->trans(
"Docdate"), 
'checked'=>1),
 
  165  't.doc_ref'=>array(
'label'=>$langs->trans(
"Piece"), 
'checked'=>1),
 
  166  't.label_operation'=>array(
'label'=>$langs->trans(
"Label"), 
'checked'=>1),
 
  167  't.lettering_code'=>array(
'label'=>$langs->trans(
"Lettering"), 
'checked'=>1),
 
  168  't.debit'=>array(
'label'=>$langs->trans(
"AccountingDebit"), 
'checked'=>1),
 
  169  't.credit'=>array(
'label'=>$langs->trans(
"AccountingCredit"), 
'checked'=>1),
 
  170  't.balance'=>array(
'label'=>$langs->trans(
"Balance"), 
'checked'=>1),
 
  171  't.date_export'=>array(
'label'=>$langs->trans(
"DateExport"), 
'checked'=>-1),
 
  172  't.date_validated'=>array(
'label'=>$langs->trans(
"DateValidation"), 
'checked'=>-1, 
'enabled'=>!
getDolGlobalString(
"ACCOUNTANCY_DISABLE_CLOSURE_LINE_BY_LINE")),
 
  173  't.import_key'=>array(
'label'=>$langs->trans(
"ImportId"), 
'checked'=>-1, 
'position'=>1100),
 
  177  unset($arrayfields[
't.lettering_code']);
 
  180if ($search_date_start && empty($search_date_startyear)) {
 
  182  $search_date_startyear = $tmparray[
'year'];
 
  183  $search_date_startmonth = $tmparray[
'mon'];
 
  184  $search_date_startday = $tmparray[
'mday'];
 
  186if ($search_date_end && empty($search_date_endyear)) {
 
  188  $search_date_endyear = $tmparray[
'year'];
 
  189  $search_date_endmonth = $tmparray[
'mon'];
 
  190  $search_date_endday = $tmparray[
'mday'];
 
  193if (!isModEnabled(
'accounting')) {
 
  196if ($user->socid > 0) {
 
  199if (!$user->hasRight(
'accounting', 
'mouvements', 
'lire')) {
 
  212if (
GETPOST(
'cancel', 
'alpha')) {
 
  216if (!
GETPOST(
'confirmmassaction', 
'alpha') && $massaction != 
'preunletteringauto' && $massaction != 
'preunletteringmanual' && $massaction != 
'predeletebookkeepingwriting') {
 
  220$parameters = array(
'socid'=>$socid);
 
  221$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action); 
 
  226if (empty($reshook)) {
 
  227  include DOL_DOCUMENT_ROOT.
'/core/actions_changeselectedfields.inc.php';
 
  229  if (
GETPOST(
'button_removefilter_x', 
'alpha') || 
GETPOST(
'button_removefilter.x', 
'alpha') || 
GETPOST(
'button_removefilter', 
'alpha')) { 
 
  230    $search_doc_date = 
'';
 
  231    $search_account_category = 
'';
 
  232    $search_accountancy_code_start = 
'';
 
  233    $search_accountancy_code_end = 
'';
 
  234    $search_label_account = 
'';
 
  235    $search_doc_ref = 
'';
 
  236    $search_label_operation = 
'';
 
  237    $search_mvt_num = 
'';
 
  238    $search_direction = 
'';
 
  239    $search_ledger_code = array();
 
  240    $search_date_start = 
'';
 
  241    $search_date_end = 
'';
 
  242    $search_date_startyear = 
'';
 
  243    $search_date_startmonth = 
'';
 
  244    $search_date_startday = 
'';
 
  245    $search_date_endyear = 
'';
 
  246    $search_date_endmonth = 
'';
 
  247    $search_date_endday = 
'';
 
  248    $search_date_export_start = 
'';
 
  249    $search_date_export_end = 
'';
 
  250    $search_date_export_startyear = 
'';
 
  251    $search_date_export_startmonth = 
'';
 
  252    $search_date_export_startday = 
'';
 
  253    $search_date_export_endyear = 
'';
 
  254    $search_date_export_endmonth = 
'';
 
  255    $search_date_export_endday = 
'';
 
  256    $search_date_validation_start = 
'';
 
  257    $search_date_validation_end = 
'';
 
  258    $search_date_validation_startyear = 
'';
 
  259    $search_date_validation_startmonth = 
'';
 
  260    $search_date_validation_startday = 
'';
 
  261    $search_date_validation_endyear = 
'';
 
  262    $search_date_validation_endmonth = 
'';
 
  263    $search_date_validation_endday = 
'';
 
  264    $search_lettering_code = 
'';
 
  267    $search_not_reconciled = 
'';
 
  268    $search_import_key = 
'';
 
  275  if (!empty($search_date_start)) {
 
  276    $filter[
't.doc_date>='] = $search_date_start;
 
  277    $param .= 
'&search_date_startmonth='.$search_date_startmonth.
'&search_date_startday='.$search_date_startday.
'&search_date_startyear='.$search_date_startyear;
 
  279  if (!empty($search_date_end)) {
 
  280    $filter[
't.doc_date<='] = $search_date_end;
 
  281    $param .= 
'&search_date_endmonth='.$search_date_endmonth.
'&search_date_endday='.$search_date_endday.
'&search_date_endyear='.$search_date_endyear;
 
  283  if (!empty($search_doc_date)) {
 
  284    $filter[
't.doc_date'] = $search_doc_date;
 
  285    $param .= 
'&doc_datemonth='.GETPOST(
'doc_datemonth', 
'int').
'&doc_dateday='.
GETPOST(
'doc_dateday', 
'int').
'&doc_dateyear='.
GETPOST(
'doc_dateyear', 
'int');
 
  287  if ($search_account_category != 
'-1' && !empty($search_account_category)) {
 
  288    require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountancycategory.class.php';
 
  291    $listofaccountsforgroup = $accountingcategory->getCptsCat(0, 
'fk_accounting_category = '.((
int) $search_account_category));
 
  292    $listofaccountsforgroup2 = array();
 
  293    if (is_array($listofaccountsforgroup)) {
 
  294      foreach ($listofaccountsforgroup as $tmpval) {
 
  295        $listofaccountsforgroup2[] = 
"'".$db->escape($tmpval[
'account_number']).
"'";
 
  298    $filter[
't.search_accounting_code_in'] = join(
',', $listofaccountsforgroup2);
 
  299    $param .= 
'&search_account_category='.urlencode($search_account_category);
 
  301  if (!empty($search_accountancy_code_start)) {
 
  302    if ($type == 
'sub') {
 
  303      $filter[
't.subledger_account>='] = $search_accountancy_code_start;
 
  305      $filter[
't.numero_compte>='] = $search_accountancy_code_start;
 
  307    $param .= 
'&search_accountancy_code_start=' . urlencode($search_accountancy_code_start);
 
  309  if (!empty($search_accountancy_code_end)) {
 
  310    if ($type == 
'sub') {
 
  311      $filter[
't.subledger_account<='] = $search_accountancy_code_end;
 
  313      $filter[
't.numero_compte<='] = $search_accountancy_code_end;
 
  315    $param .= 
'&search_accountancy_code_end=' . urlencode($search_accountancy_code_end);
 
  317  if (!empty($search_label_account)) {
 
  318    $filter[
't.label_compte'] = $search_label_account;
 
  319    $param .= 
'&search_label_compte='.urlencode($search_label_account);
 
  321  if (!empty($search_mvt_num)) {
 
  322    $filter[
't.piece_num'] = $search_mvt_num;
 
  323    $param .= 
'&search_mvt_num='.urlencode($search_mvt_num);
 
  325  if (!empty($search_doc_ref)) {
 
  326    $filter[
't.doc_ref'] = $search_doc_ref;
 
  327    $param .= 
'&search_doc_ref='.urlencode($search_doc_ref);
 
  329  if (!empty($search_label_operation)) {
 
  330    $filter[
't.label_operation'] = $search_label_operation;
 
  331    $param .= 
'&search_label_operation='.urlencode($search_label_operation);
 
  333  if (!empty($search_direction)) {
 
  334    $filter[
't.sens'] = $search_direction;
 
  335    $param .= 
'&search_direction='.urlencode($search_direction);
 
  337  if (!empty($search_ledger_code)) {
 
  338    $filter[
't.code_journal'] = $search_ledger_code;
 
  339    foreach ($search_ledger_code as $code) {
 
  340      $param .= 
'&search_ledger_code[]='.urlencode($code);
 
  343  if (!empty($search_lettering_code)) {
 
  344    $filter[
't.lettering_code'] = $search_lettering_code;
 
  345    $param .= 
'&search_lettering_code='.urlencode($search_lettering_code);
 
  347  if (!empty($search_debit)) {
 
  348    $filter[
't.debit'] = $search_debit;
 
  349    $param .= 
'&search_debit='.urlencode($search_debit);
 
  351  if (!empty($search_credit)) {
 
  352    $filter[
't.credit'] = $search_credit;
 
  353    $param .= 
'&search_credit='.urlencode($search_credit);
 
  355  if (!empty($search_not_reconciled)) {
 
  356    $filter[
't.reconciled_option'] = $search_not_reconciled;
 
  357    $param .= 
'&search_not_reconciled='.urlencode($search_not_reconciled);
 
  359  if (!empty($search_date_export_start)) {
 
  360    $filter[
't.date_export>='] = $search_date_export_start;
 
  361    $param .= 
'&search_date_export_startmonth='.$search_date_export_startmonth.
'&search_date_export_startday='.$search_date_export_startday.
'&search_date_export_startyear='.$search_date_export_startyear;
 
  363  if (!empty($search_date_export_end)) {
 
  364    $filter[
't.date_export<='] = $search_date_export_end;
 
  365    $param .= 
'&search_date_export_endmonth='.$search_date_export_endmonth.
'&search_date_export_endday='.$search_date_export_endday.
'&search_date_export_endyear='.$search_date_export_endyear;
 
  367  if (!empty($search_date_validation_start)) {
 
  368    $filter[
't.date_validated>='] = $search_date_validation_start;
 
  369    $param .= 
'&search_date_validation_startmonth='.$search_date_validation_startmonth.
'&search_date_validation_startday='.$search_date_validation_startday.
'&search_date_validation_startyear='.$search_date_validation_startyear;
 
  371  if (!empty($search_date_validation_end)) {
 
  372    $filter[
't.date_validated<='] = $search_date_validation_end;
 
  373    $param .= 
'&search_date_validation_endmonth='.$search_date_validation_endmonth.
'&search_date_validation_endday='.$search_date_validation_endday.
'&search_date_validation_endyear='.$search_date_validation_endyear;
 
  375  if (!empty($search_import_key)) {
 
  376    $filter[
't.import_key'] = $search_import_key;
 
  377    $param .= 
'&search_import_key='.urlencode($search_import_key);
 
  380  $url_param = substr($param, 1); 
 
  382    $param = 
'&type='.$type.$param;
 
  413  $objectclass = 
'Bookkeeping';
 
  414  $objectlabel = 
'Bookkeeping';
 
  415  $permissiontoread = $user->hasRight(
'societe', 
'lire');
 
  416  $permissiontodelete = $user->hasRight(
'societe', 
'supprimer');
 
  417  $permissiontoadd = $user->hasRight(
'societe', 
'creer');
 
  418  $uploaddir = $conf->societe->dir_output;
 
  419  include DOL_DOCUMENT_ROOT.
'/core/actions_massactions.inc.php';
 
  421  if (!$error && $action == 
'deletebookkeepingwriting' && $confirm == 
"yes" && $user->hasRight(
'accounting', 
'mouvements', 
'supprimer')) {
 
  426      $nb_lettering = $lettering->bookkeepingLetteringAll($toselect, 
true);
 
  427      if ($nb_lettering < 0) {
 
  435      foreach ($toselect as $toselectid) {
 
  436        $result = $object->fetch($toselectid);
 
  437        if ($result > 0 && (!isset($object->date_validation) || $object->date_validation === 
'')) {
 
  438          $result = $object->deleteMvtNum($object->piece_num);
 
  446        } elseif ($result < 0) {
 
  450        } elseif (isset($object->date_validation) && $object->date_validation != 
'') {
 
  451          setEventMessages($langs->trans(
"ValidatedRecordWhereFound"), 
null, 
'errors');
 
  464      } elseif ($nbok > 0) {
 
  470      header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?noreset=1".($param ? 
'&'.$param : 
''));
 
  478  if (!$error && 
getDolGlobalInt(
'ACCOUNTING_ENABLE_LETTERING') && $user->hasRight(
'accounting', 
'mouvements', 
'creer')) {
 
  479    if ($massaction == 
'letteringauto') {
 
  481      $nb_lettering = $lettering->bookkeepingLetteringAll($toselect);
 
  482      if ($nb_lettering < 0) {
 
  485        $nb_lettering = max(0, abs($nb_lettering) - 2);
 
  486      } elseif ($nb_lettering == 0) {
 
  488        setEventMessages($langs->trans(
'AccountancyNoLetteringModified'), array(), 
'mesgs');
 
  490      if ($nb_lettering == 1) {
 
  491        setEventMessages($langs->trans(
'AccountancyOneLetteringModifiedSuccessfully'), array(), 
'mesgs');
 
  492      } elseif ($nb_lettering > 1) {
 
  493        setEventMessages($langs->trans(
'AccountancyLetteringModifiedSuccessfully', $nb_lettering), array(), 
'mesgs');
 
  497        header(
'Location: ' . $_SERVER[
'PHP_SELF'] . 
'?noreset=1' . $param);
 
  500    } elseif ($massaction == 
'letteringmanual') {
 
  502      $result = $lettering->updateLettering($toselect);
 
  506        setEventMessages($langs->trans(
'AccountancyOneLetteringModifiedSuccessfully'), array(), 
'mesgs');
 
  507        header(
'Location: ' . $_SERVER[
'PHP_SELF'] . 
'?noreset=1' . $param);
 
  510    } elseif ($action == 
'unletteringauto' && $confirm == 
"yes") {
 
  512      $nb_lettering = $lettering->bookkeepingLetteringAll($toselect, 
true);
 
  513      if ($nb_lettering < 0) {
 
  516        $nb_lettering = max(0, abs($nb_lettering) - 2);
 
  517      } elseif ($nb_lettering == 0) {
 
  519        setEventMessages($langs->trans(
'AccountancyNoUnletteringModified'), array(), 
'mesgs');
 
  521      if ($nb_lettering == 1) {
 
  522        setEventMessages($langs->trans(
'AccountancyOneUnletteringModifiedSuccessfully'), array(), 
'mesgs');
 
  523      } elseif ($nb_lettering > 1) {
 
  524        setEventMessages($langs->trans(
'AccountancyUnletteringModifiedSuccessfully', $nb_lettering), array(), 
'mesgs');
 
  528        header(
'Location: ' . $_SERVER[
'PHP_SELF'] . 
'?noreset=1' . $param);
 
  531    } elseif ($action == 
'unletteringmanual' && $confirm == 
"yes") {
 
  533      $nb_lettering = $lettering->deleteLettering($toselect);
 
  537        setEventMessages($langs->trans(
'AccountancyOneUnletteringModifiedSuccessfully'), array(), 
'mesgs');
 
  538        header(
'Location: ' . $_SERVER[
'PHP_SELF'] . 
'?noreset=1' . $param);
 
  553$form = 
new Form($db);
 
  555$title_page = $langs->trans(
"Operations").
' - '.$langs->trans(
"VueByAccountAccounting").
' (';
 
  557  $title_page .= $langs->trans(
"BookkeepingSubAccount");
 
  559  $title_page .= $langs->trans(
"Bookkeeping");
 
  562$help_url = 
'EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double';
 
  566$nbtotalofrecords = 
'';
 
  569  if ($type == 
'sub') {
 
  570    $nbtotalofrecords = $object->fetchAllByAccount($sortorder, $sortfield, 0, 0, $filter, 
'AND', 1, 1);
 
  572    $nbtotalofrecords = $object->fetchAllByAccount($sortorder, $sortfield, 0, 0, $filter, 
'AND', 0, 1);
 
  575  if ($nbtotalofrecords < 0) {
 
  582  if ($type == 
'sub') {
 
  583    $result = $object->fetchAllByAccount($sortorder, $sortfield, $limit, $offset, $filter, 
'AND', 1);
 
  585    $result = $object->fetchAllByAccount($sortorder, $sortfield, $limit, $offset, $filter, 
'AND', 0);
 
  593$arrayofselected = is_array($toselect) ? $toselect : array();
 
  595$num = count($object->lines);
 
  643$arrayofmassactions = array();
 
  644if (
getDolGlobalInt(
'ACCOUNTING_ENABLE_LETTERING') && $user->hasRight(
'accounting', 
'mouvements', 
'creer')) {
 
  645  $arrayofmassactions[
'letteringauto'] = 
img_picto(
'', 
'check', 
'class="pictofixedwidth"') . $langs->trans(
'LetteringAuto');
 
  646  $arrayofmassactions[
'preunletteringauto'] = 
img_picto(
'', 
'uncheck', 
'class="pictofixedwidth"') . $langs->trans(
'UnletteringAuto');
 
  647  $arrayofmassactions[
'letteringmanual'] = 
img_picto(
'', 
'check', 
'class="pictofixedwidth"') . $langs->trans(
'LetteringManual');
 
  648  $arrayofmassactions[
'preunletteringmanual'] = 
img_picto(
'', 
'uncheck', 
'class="pictofixedwidth"') . $langs->trans(
'UnletteringManual');
 
  650if ($user->hasRight(
'accounting', 
'mouvements', 
'supprimer')) {
 
  651  $arrayofmassactions[
'predeletebookkeepingwriting'] = 
img_picto(
'', 
'delete', 
'class="pictofixedwidth"').$langs->trans(
"Delete");
 
  653if (
GETPOST(
'nomassaction', 
'int') || in_array($massaction, array(
'preunletteringauto', 
'preunletteringmanual', 
'predeletebookkeepingwriting'))) {
 
  654  $arrayofmassactions = array();
 
  656$massactionbutton = $form->selectMassAction($massaction, $arrayofmassactions);
 
  658print 
'<form method="POST" id="searchFormList" action="'.$_SERVER[
"PHP_SELF"].
'">';
 
  659print 
'<input type="hidden" name="token" value="'.newToken().
'">';
 
  660print 
'<input type="hidden" name="action" value="list">';
 
  661if ($optioncss != 
'') {
 
  662  print 
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
 
  664print 
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
 
  665print 
'<input type="hidden" name="type" value="'.$type.
'">';
 
  666print 
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
 
  667print 
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
 
  668print 
'<input type="hidden" name="contextpage" value="'.$contextpage.
'">';
 
  670$parameters = array(
'param' => $param);
 
  671$reshook = $hookmanager->executeHooks(
'addMoreActionsButtonsList', $parameters, $object, $action); 
 
  676$newcardbutton = empty($hookmanager->resPrint) ? 
'' : $hookmanager->resPrint;
 
  678if (empty($reshook)) {
 
  679  $newcardbutton .= 
dolGetButtonTitle($langs->trans(
'ViewFlatList'), 
'', 
'fa fa-list paddingleft imgforviewmode', DOL_URL_ROOT.
'/accountancy/bookkeeping/list.php?'.$param);
 
  680  if ($type == 
'sub') {
 
  681    $newcardbutton .= 
dolGetButtonTitle($langs->trans(
'GroupByAccountAccounting'), 
'', 
'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT . 
'/accountancy/bookkeeping/listbyaccount.php?' . $url_param, 
'', 1, array(
'morecss' => 
'marginleftonly'));
 
  682    $newcardbutton .= 
dolGetButtonTitle($langs->trans(
'GroupBySubAccountAccounting'), 
'', 
'fa fa-align-left vmirror paddingleft imgforviewmode', DOL_URL_ROOT . 
'/accountancy/bookkeeping/listbyaccount.php?type=sub&' . $url_param, 
'', 1, array(
'morecss' => 
'marginleftonly btnTitleSelected'));
 
  684    $newcardbutton .= 
dolGetButtonTitle($langs->trans(
'GroupByAccountAccounting'), 
'', 
'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT . 
'/accountancy/bookkeeping/listbyaccount.php?' . $url_param, 
'', 1, array(
'morecss' => 
'marginleftonly btnTitleSelected'));
 
  685    $newcardbutton .= 
dolGetButtonTitle($langs->trans(
'GroupBySubAccountAccounting'), 
'', 
'fa fa-align-left vmirror paddingleft imgforviewmode', DOL_URL_ROOT . 
'/accountancy/bookkeeping/listbyaccount.php?type=sub&' . $url_param, 
'', 1, array(
'morecss' => 
'marginleftonly'));
 
  688  $newcardbutton .= 
dolGetButtonTitle($langs->trans(
'NewAccountingMvt'), 
'', 
'fa fa-plus-circle paddingleft', DOL_URL_ROOT.
'/accountancy/bookkeeping/card.php?action=create');
 
  691if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
 
  692  $param .= 
'&contextpage='.urlencode($contextpage);
 
  694if ($limit > 0 && $limit != $conf->liste_limit) {
 
  695  $param .= 
'&limit='.((int) $limit);
 
  698print_barre_liste($title_page, $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $result, $nbtotalofrecords, 
'title_accountancy', 0, $newcardbutton, 
'', $limit, 0, 0, 1);
 
  700if ($massaction == 
'preunletteringauto') {
 
  701  print $form->formconfirm($_SERVER[
"PHP_SELF"], $langs->trans(
"ConfirmMassUnletteringAuto"), $langs->trans(
"ConfirmMassUnletteringQuestion", count($toselect)), 
"unletteringauto", 
null, 
'', 0, 200, 500, 1);
 
  702} elseif ($massaction == 
'preunletteringmanual') {
 
  703  print $form->formconfirm($_SERVER[
"PHP_SELF"], $langs->trans(
"ConfirmMassUnletteringManual"), $langs->trans(
"ConfirmMassUnletteringQuestion", count($toselect)), 
"unletteringmanual", 
null, 
'', 0, 200, 500, 1);
 
  704} elseif ($massaction == 
'predeletebookkeepingwriting') {
 
  705  print $form->formconfirm($_SERVER[
"PHP_SELF"], $langs->trans(
"ConfirmMassDeleteBookkeepingWriting"), $langs->trans(
"ConfirmMassDeleteBookkeepingWritingQuestion", count($toselect)), 
"deletebookkeepingwriting", 
null, 
'', 0, 200, 500, 1);
 
  718include DOL_DOCUMENT_ROOT.
'/core/tpl/massactions_pre.tpl.php';
 
  720$varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
 
  721$selectedfields = $form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage, 
getDolGlobalString(
'MAIN_CHECKBOX_LEFT_COLUMN')); 
 
  722if ($massactionbutton && $contextpage != 
'poslist') {
 
  723  $selectedfields .= $form->showCheckAddButtons(
'checkforselect', 1);
 
  727if (preg_match(
'/^asc/i', $sortorder)) {
 
  735  print 
info_admin($langs->trans(
"WarningRecordWithoutSubledgerAreExcluded"));
 
  741$moreforfilter .= 
'<div class="divsearchfield">';
 
  742$moreforfilter .= $langs->trans(
'AccountAccounting').
': ';
 
  743$moreforfilter .= 
'<div class="nowrap inline-block">';
 
  745  $moreforfilter .= $formaccounting->select_auxaccount($search_accountancy_code_start, 
'search_accountancy_code_start', $langs->trans(
'From'), 
'maxwidth200');
 
  747  $moreforfilter .= $formaccounting->select_account($search_accountancy_code_start, 
'search_accountancy_code_start', $langs->trans(
'From'), array(), 1, 1, 
'maxwidth200');
 
  749$moreforfilter .= 
' ';
 
  751  $moreforfilter .= $formaccounting->select_auxaccount($search_accountancy_code_end, 
'search_accountancy_code_end', $langs->trans(
'to'), 
'maxwidth200');
 
  753  $moreforfilter .= $formaccounting->select_account($search_accountancy_code_end, 
'search_accountancy_code_end', $langs->trans(
'to'), array(), 1, 1, 
'maxwidth200');
 
  755$stringforfirstkey = $langs->trans(
"KeyboardShortcut");
 
  756if ($conf->browser->name == 
'chrome') {
 
  757  $stringforfirstkey .= 
' ALT +';
 
  758} elseif ($conf->browser->name == 
'firefox') {
 
  759  $stringforfirstkey .= 
' ALT + SHIFT +';
 
  761  $stringforfirstkey .= 
' CTL +';
 
  763$moreforfilter .= 
'   <a id="previous_account" accesskey="p" title="' . $stringforfirstkey . 
' p" class="classfortooltip" href="#"><i class="fa fa-chevron-left"></i></a>';
 
  764$moreforfilter .= 
'   <a id="next_account" accesskey="n" title="' . $stringforfirstkey . 
' n" class="classfortooltip" href="#"><i class="fa fa-chevron-right"></i></a>';
 
  765$moreforfilter .= <<<SCRIPT
 
  766<script 
type=
"text/javascript">
 
  767  jQuery(document).ready(
function() {
 
  768    var searchFormList = $(
'#searchFormList');
 
  769    var searchAccountancyCodeStart = $(
'#search_accountancy_code_start');
 
  770    var searchAccountancyCodeEnd = $(
'#search_accountancy_code_end');
 
  771    jQuery(
'#previous_account').on(
'click', 
function() {
 
  772      var previousOption = searchAccountancyCodeStart.find(
'option:selected').prev(
'option');
 
  773      if (previousOption.length == 1) searchAccountancyCodeStart.val(previousOption.attr(
'value'));
 
  774      searchAccountancyCodeEnd.val(searchAccountancyCodeStart.val());
 
  775      searchFormList.submit();
 
  777    jQuery(
'#next_account').on(
'click', 
function() {
 
  778      var nextOption = searchAccountancyCodeStart.find(
'option:selected').next(
'option');
 
  779      if (nextOption.length == 1) searchAccountancyCodeStart.val(nextOption.attr(
'value'));
 
  780      searchAccountancyCodeEnd.val(searchAccountancyCodeStart.val());
 
  781      searchFormList.submit();
 
  783    jQuery(
'input[name="search_mvt_num"]').on(
"keypress", 
function(event) {
 
  789$moreforfilter .= 
'</div>';
 
  790$moreforfilter .= 
'</div>';
 
  792$moreforfilter .= 
'<div class="divsearchfield">';
 
  793$moreforfilter .= $langs->trans(
'AccountingCategory').
': ';
 
  794$moreforfilter .= 
'<div class="nowrap inline-block">';
 
  795$moreforfilter .= $formaccounting->select_accounting_category($search_account_category, 
'search_account_category', 1, 0, 0, 0);
 
  796$moreforfilter .= 
'</div>';
 
  797$moreforfilter .= 
'</div>';
 
  799$parameters = array();
 
  800$reshook = $hookmanager->executeHooks(
'printFieldPreListTitle', $parameters); 
 
  801if (empty($reshook)) {
 
  802  $moreforfilter .= $hookmanager->resPrint;
 
  804  $moreforfilter = $hookmanager->resPrint;
 
  807print 
'<div class="liste_titre liste_titre_bydiv centpercent">';
 
  811print 
'<div class="div-table-responsive">';
 
  812print 
'<table class="tagtable liste centpercent">';
 
  815print 
'<tr class="liste_titre_filter">';
 
  818  print 
'<td class="liste_titre center">';
 
  819  $searchpicto = $form->showFilterButtons(
'left');
 
  824if (!empty($arrayfields[
't.piece_num'][
'checked'])) {
 
  825  print 
'<td class="liste_titre"><input type="text" name="search_mvt_num" class="width50" value="'.dol_escape_htmltag($search_mvt_num).
'"></td>';
 
  828if (!empty($arrayfields[
't.code_journal'][
'checked'])) {
 
  829  print 
'<td class="liste_titre center">';
 
  830  print $formaccounting->multi_select_journal($search_ledger_code, 
'search_ledger_code', 0, 1, 1, 1, 
'maxwidth75');
 
  834if (!empty($arrayfields[
't.doc_date'][
'checked'])) {
 
  835  print 
'<td class="liste_titre center">';
 
  836  print 
'<div class="nowrapfordate">';
 
  837  print $form->selectDate($search_date_start, 
'search_date_start', 0, 0, 1, 
'', 1, 0, 0, 
'', 
'', 
'', 
'', 1, 
'', $langs->trans(
"From"));
 
  839  print 
'<div class="nowrapfordate">';
 
  840  print $form->selectDate($search_date_end, 
'search_date_end', 0, 0, 1, 
'', 1, 0, 0, 
'', 
'', 
'', 
'', 1, 
'', $langs->trans(
"to"));
 
  845if (!empty($arrayfields[
't.doc_ref'][
'checked'])) {
 
  846  print 
'<td class="liste_titre"><input type="text" size="7" class="flat" name="search_doc_ref" value="'.dol_escape_htmltag($search_doc_ref).
'"/></td>';
 
  849if (!empty($arrayfields[
't.label_operation'][
'checked'])) {
 
  850  print 
'<td class="liste_titre"><input type="text" size="7" class="flat" name="search_label_operation" value="'.dol_escape_htmltag($search_label_operation).
'"/></td>';
 
  853if (!empty($arrayfields[
't.lettering_code'][
'checked'])) {
 
  854  print 
'<td class="liste_titre center">';
 
  855  print 
'<input type="text" size="3" class="flat" name="search_lettering_code" value="'.$search_lettering_code.
'"/>';
 
  856  print 
'<br><span class="nowrap"><input type="checkbox" name="search_not_reconciled" value="notreconciled"'.($search_not_reconciled == 
'notreconciled' ? 
' checked' : 
'').
'>'.$langs->trans(
"NotReconciled").
'</span>';
 
  860if (!empty($arrayfields[
't.debit'][
'checked'])) {
 
  861  print 
'<td class="liste_titre right"><input type="text" class="flat" name="search_debit" size="4" value="'.dol_escape_htmltag($search_debit).
'"></td>';
 
  864if (!empty($arrayfields[
't.credit'][
'checked'])) {
 
  865  print 
'<td class="liste_titre right"><input type="text" class="flat" name="search_credit" size="4" value="'.dol_escape_htmltag($search_credit).
'"></td>';
 
  868if (!empty($arrayfields[
't.balance'][
'checked'])) {
 
  872if (!empty($arrayfields[
't.date_export'][
'checked'])) {
 
  873  print 
'<td class="liste_titre center">';
 
  874  print 
'<div class="nowrapfordate">';
 
  875  print $form->selectDate($search_date_export_start, 
'search_date_export_start', 0, 0, 1, 
'', 1, 0, 0, 
'', 
'', 
'', 
'', 1, 
'', $langs->trans(
"From"));
 
  877  print 
'<div class="nowrapfordate">';
 
  878  print $form->selectDate($search_date_export_end, 
'search_date_export_end', 0, 0, 1, 
'', 1, 0, 0, 
'', 
'', 
'', 
'', 1, 
'', $langs->trans(
"to"));
 
  883if (!empty($arrayfields[
't.date_validated'][
'checked'])) {
 
  884  print 
'<td class="liste_titre center">';
 
  885  print 
'<div class="nowrapfordate">';
 
  886  print $form->selectDate($search_date_validation_start, 
'search_date_validation_start', 0, 0, 1, 
'', 1, 0, 0, 
'', 
'', 
'', 
'', 1, 
'', $langs->trans(
"From"));
 
  888  print 
'<div class="nowrapfordate">';
 
  889  print $form->selectDate($search_date_validation_end, 
'search_date_validation_end', 0, 0, 1, 
'', 1, 0, 0, 
'', 
'', 
'', 
'', 1, 
'', $langs->trans(
"to"));
 
  893if (!empty($arrayfields[
't.import_key'][
'checked'])) {
 
  894  print 
'<td class="liste_titre center">';
 
  895  print 
'<input class="flat searchstring maxwidth50" type="text" name="search_import_key" value="'.dol_escape_htmltag($search_import_key).
'">';
 
  900$parameters = array(
'arrayfields'=>$arrayfields);
 
  901$reshook = $hookmanager->executeHooks(
'printFieldListOption', $parameters); 
 
  902print $hookmanager->resPrint;
 
  906  print 
'<td class="liste_titre center">';
 
  907  $searchpicto = $form->showFilterButtons();
 
  913print 
'<tr class="liste_titre">';
 
  915  print_liste_field_titre($selectedfields, $_SERVER[
"PHP_SELF"], 
"", 
'', 
'', 
'', $sortfield, $sortorder, 
'center maxwidthsearch ');
 
  917if (!empty($arrayfields[
't.piece_num'][
'checked'])) {
 
  918  print_liste_field_titre($arrayfields[
't.piece_num'][
'label'], $_SERVER[
'PHP_SELF'], 
"t.piece_num", 
"", $param, 
'', $sortfield, $sortorder, 
'tdoverflowmax80imp ');
 
  920if (!empty($arrayfields[
't.code_journal'][
'checked'])) {
 
  921  print_liste_field_titre($arrayfields[
't.code_journal'][
'label'], $_SERVER[
'PHP_SELF'], 
"t.code_journal", 
"", $param, 
'', $sortfield, $sortorder, 
'center ');
 
  923if (!empty($arrayfields[
't.doc_date'][
'checked'])) {
 
  924  print_liste_field_titre($arrayfields[
't.doc_date'][
'label'], $_SERVER[
'PHP_SELF'], 
"t.doc_date", 
"", $param, 
'', $sortfield, $sortorder, 
'center ');
 
  926if (!empty($arrayfields[
't.doc_ref'][
'checked'])) {
 
  927  print_liste_field_titre($arrayfields[
't.doc_ref'][
'label'], $_SERVER[
'PHP_SELF'], 
"t.doc_ref", 
"", $param, 
"", $sortfield, $sortorder);
 
  929if (!empty($arrayfields[
't.label_operation'][
'checked'])) {
 
  930  print_liste_field_titre($arrayfields[
't.label_operation'][
'label'], $_SERVER[
'PHP_SELF'], 
"t.label_operation", 
"", $param, 
"", $sortfield, $sortorder);
 
  932if (!empty($arrayfields[
't.lettering_code'][
'checked'])) {
 
  933  print_liste_field_titre($arrayfields[
't.lettering_code'][
'label'], $_SERVER[
'PHP_SELF'], 
"t.lettering_code", 
"", $param, 
'', $sortfield, $sortorder, 
'center ');
 
  935if (!empty($arrayfields[
't.debit'][
'checked'])) {
 
  936  print_liste_field_titre($arrayfields[
't.debit'][
'label'], $_SERVER[
'PHP_SELF'], 
"t.debit", 
"", $param, 
'', $sortfield, $sortorder, 
'right ');
 
  938if (!empty($arrayfields[
't.credit'][
'checked'])) {
 
  939  print_liste_field_titre($arrayfields[
't.credit'][
'label'], $_SERVER[
'PHP_SELF'], 
"t.credit", 
"", $param, 
'', $sortfield, $sortorder, 
'right ');
 
  941if (!empty($arrayfields[
't.balance'][
'checked'])) {
 
  942  print_liste_field_titre($arrayfields[
't.balance'][
'label'], 
"", 
"", 
"", $param, 
'', $sortfield, $sortorder, 
'right ');
 
  944if (!empty($arrayfields[
't.date_export'][
'checked'])) {
 
  945  print_liste_field_titre($arrayfields[
't.date_export'][
'label'], $_SERVER[
'PHP_SELF'], 
"t.date_export", 
"", $param, 
'', $sortfield, $sortorder, 
'center ');
 
  947if (!empty($arrayfields[
't.date_validated'][
'checked'])) {
 
  948  print_liste_field_titre($arrayfields[
't.date_validated'][
'label'], $_SERVER[
'PHP_SELF'], 
"t.date_validated", 
"", $param, 
'', $sortfield, $sortorder, 
'center ');
 
  950if (!empty($arrayfields[
't.import_key'][
'checked'])) {
 
  951  print_liste_field_titre($arrayfields[
't.import_key'][
'label'], $_SERVER[
"PHP_SELF"], 
"t.import_key", 
"", $param, 
'', $sortfield, $sortorder, 
'center ');
 
  954$parameters = array(
'arrayfields'=>$arrayfields, 
'param'=>$param, 
'sortfield'=>$sortfield, 
'sortorder'=>$sortorder);
 
  955$reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters); 
 
  956print $hookmanager->resPrint;
 
  958  print_liste_field_titre($selectedfields, $_SERVER[
"PHP_SELF"], 
"", 
'', 
'', 
'', $sortfield, $sortorder, 
'center maxwidthsearch ');
 
  962$displayed_account_number = 
null; 
 
  968$totalarray = array();
 
  969$totalarray[
'val'] = array();
 
  970$totalarray[
'nbfield'] = 0;
 
  973$sous_total_debit = 0;
 
  974$sous_total_credit = 0;
 
  975$totalarray[
'val'][
'totaldebit'] = 0;
 
  976$totalarray[
'val'][
'totalcredit'] = 0;
 
  977$totalarray[
'val'][
'totalbalance']=0;
 
  981if (!empty($arrayfields[
't.piece_num'][
'checked'])) { $colspan++; }
 
  982if (!empty($arrayfields[
't.code_journal'][
'checked'])) { $colspan++; }
 
  983if (!empty($arrayfields[
't.doc_date'][
'checked'])) { $colspan++; }
 
  984if (!empty($arrayfields[
't.doc_ref'][
'checked'])) { $colspan++; }
 
  985if (!empty($arrayfields[
't.label_operation'][
'checked'])) { $colspan++; }
 
  986if (!empty($arrayfields[
't.date_export'][
'checked'])) { $colspanend++; }
 
  987if (!empty($arrayfields[
't.date_validated'][
'checked'])) { $colspanend++; }
 
  988if (!empty($arrayfields[
't.lettering_code'][
'checked'])) { $colspanend++; }
 
  994while ($i < min($num, $limit)) {
 
  995  $line = $object->lines[$i];
 
  997  $total_debit += $line->debit;
 
  998  $total_credit += $line->credit;
 
 1000  if ($type == 
'sub') {
 
 1012  if (!empty($arrayfields[
't.piece_num'][
'checked'])) {
 
 1015  if (!empty($arrayfields[
't.code_journal'][
'checked'])) {
 
 1018  if (!empty($arrayfields[
't.doc_date'][
'checked'])) {
 
 1021  if (!empty($arrayfields[
't.doc_ref'][
'checked'])) {
 
 1024  if (!empty($arrayfields[
't.label_operation'][
'checked'])) {
 
 1027  if (!empty($arrayfields[
't.lettering_code'][
'checked'])) {
 
 1031  if (!empty($arrayfields[
't.balance'][
'checked'])) {
 
 1034  if (!empty($arrayfields[
't.date_export'][
'checked'])) {
 
 1037  if (!empty($arrayfields[
't.date_validated'][
'checked'])) {
 
 1040  if (!empty($arrayfields[
't.lettering_code'][
'checked'])) {
 
 1043  if (!empty($arrayfields[
't.import_key'][
'checked'])) {
 
 1052  if ($accountg != $displayed_account_number || !isset($displayed_account_number)) {
 
 1054    if (isset($displayed_account_number)) {
 
 1055      print 
'<tr class="liste_total">';
 
 1056      if ($type == 
'sub') {
 
 1057        print 
'<td class="right" colspan="' . $colspan . 
'">' . $langs->trans(
"TotalForAccount") . 
' ' . 
length_accounta($displayed_account_number) . 
':</td>';
 
 1059        print 
'<td class="right" colspan="' . $colspan . 
'">' . $langs->trans(
"TotalForAccount") . 
' ' . 
length_accountg($displayed_account_number) . 
':</td>';
 
 1061      print 
'<td class="nowrap right">'.price(
price2num($sous_total_debit, 
'MT')).
'</td>';
 
 1062      print 
'<td class="nowrap right">'.price(
price2num($sous_total_credit, 
'MT')).
'</td>';
 
 1063      if ($colspanend > 0) {
 
 1064        print 
'<td colspan="'.$colspanend.
'"></td>';
 
 1068      $balance = $sous_total_debit - $sous_total_credit;
 
 1069      print 
'<tr class="liste_total">';
 
 1070      print 
'<td class="right" colspan="'.$colspan.
'">'.$langs->trans(
"Balance").
':</td>';
 
 1072        print 
'<td class="nowraponall right">';
 
 1073        print 
price(
price2num($sous_total_debit - $sous_total_credit, 
'MT'));
 
 1078        print 
'<td class="nowraponall right">';
 
 1079        print 
price(
price2num($sous_total_credit - $sous_total_debit, 
'MT'));
 
 1082      if ($colspanend > 0) {
 
 1083        print 
'<td colspan="'.$colspanend.
'"></td>';
 
 1089    print 
'<tr class="trforbreak">';
 
 1090    print 
'<td colspan="'.($totalarray[
'nbfield'] ? $totalarray[
'nbfield'] : count($arrayfields)+1).
'" class="tdforbreak">';
 
 1091    if ($type == 
'sub') {
 
 1092      if ($line->subledger_account != 
"" && $line->subledger_account != 
'-1') {
 
 1093        print empty($line->subledger_label) ? 
'<span class="error">'.$langs->trans(
"Unknown").
'</span>' : $line->subledger_label;
 
 1098        print 
'<span class="error">' . $langs->trans(
"Unknown");
 
 1099        if ($line->subledger_label) {
 
 1100          print 
' (' . $line->subledger_label . 
')';
 
 1101          $htmltext = 
'EmptyStringForSubledgerAccountButSubledgerLabelDefined';
 
 1103          $htmltext = 
'EmptyStringForSubledgerAccountAndSubledgerLabel';
 
 1105        print $form->textwithpicto(
'', $htmltext);
 
 1109      if ($line->numero_compte != 
"" && $line->numero_compte != 
'-1') {
 
 1110        print 
length_accountg($line->numero_compte) . 
' : ' . $object->get_compte_desc($line->numero_compte);
 
 1112        print 
'<span class="error">' . $langs->trans(
"Unknown") . 
'</span>';
 
 1118    $displayed_account_number = $accountg;
 
 1120    $sous_total_debit = 0;
 
 1121    $sous_total_credit = 0;
 
 1124  print 
'<tr class="oddeven">';
 
 1127    print 
'<td class="nowraponall center">';
 
 1128    if (($massactionbutton || $massaction) && $contextpage != 
'poslist') {   
 
 1130      if (in_array($line->id, $arrayofselected)) {
 
 1133      print 
'<input id="cb' . $line->id . 
'" class="flat checkforselect" type="checkbox" name="toselect[]" value="' . $line->id . 
'"' . ($selected ? 
' checked="checked"' : 
'') . 
' />';
 
 1137      $totalarray[
'nbfield']++;
 
 1141  if (!empty($arrayfields[
't.piece_num'][
'checked'])) {
 
 1143    $object->id = $line->id;
 
 1144    $object->piece_num = $line->piece_num;
 
 1145    print $object->getNomUrl(1, 
'', 0, 
'', 1);
 
 1148      $totalarray[
'nbfield']++;
 
 1153  if (!empty($arrayfields[
't.code_journal'][
'checked'])) {
 
 1155    $result = $accountingjournal->fetch(
'', $line->code_journal);
 
 1156    $journaltoshow = (($result > 0) ? $accountingjournal->getNomUrl(0, 0, 0, 
'', 0) : $line->code_journal);
 
 1157    print 
'<td class="center tdoverflowmax80">'.$journaltoshow.
'</td>';
 
 1159      $totalarray[
'nbfield']++;
 
 1164  if (!empty($arrayfields[
't.doc_date'][
'checked'])) {
 
 1165    print 
'<td class="center">'.dol_print_date($line->doc_date, 
'day').
'</td>';
 
 1167      $totalarray[
'nbfield']++;
 
 1172  if (!empty($arrayfields[
't.doc_ref'][
'checked'])) {
 
 1173    if ($line->doc_type == 
'customer_invoice') {
 
 1174      $langs->loadLangs(array(
'bills'));
 
 1176      require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
 
 1177      $objectstatic = 
new Facture($db);
 
 1178      $objectstatic->fetch($line->fk_doc);
 
 1183      $urlsource = $_SERVER[
'PHP_SELF'].
'?id='.$objectstatic->id;
 
 1184      $documentlink = $formfile->getDocumentsLink($objectstatic->element, $filename, $filedir);
 
 1185    } elseif ($line->doc_type == 
'supplier_invoice') {
 
 1186      $langs->loadLangs(array(
'bills'));
 
 1188      require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
 
 1190      $objectstatic->fetch($line->fk_doc);
 
 1194      $filedir = $conf->fournisseur->facture->dir_output.
'/'.
get_exdir($line->fk_doc, 2, 0, 0, $objectstatic, $modulepart).dol_sanitizeFileName($line->doc_ref);
 
 1195      $subdir = 
get_exdir($objectstatic->id, 2, 0, 0, $objectstatic, $modulepart).dol_sanitizeFileName($line->doc_ref);
 
 1196      $documentlink = $formfile->getDocumentsLink($objectstatic->element, $subdir, $filedir);
 
 1197    } elseif ($line->doc_type == 
'expense_report') {
 
 1198      $langs->loadLangs(array(
'trips'));
 
 1200      require_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
 
 1202      $objectstatic->fetch($line->fk_doc);
 
 1207      $urlsource = $_SERVER[
'PHP_SELF'].
'?id='.$objectstatic->id;
 
 1208      $documentlink = $formfile->getDocumentsLink($objectstatic->element, $filename, $filedir);
 
 1209    } elseif ($line->doc_type == 
'bank') {
 
 1210      require_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
 
 1212      $objectstatic->fetch($line->fk_doc);
 
 1217    print 
'<td class="tdoverflowmax250">';
 
 1220    if ($line->doc_type == 
'customer_invoice' || $line->doc_type == 
'supplier_invoice' || $line->doc_type == 
'expense_report') {
 
 1221      print $objectstatic->getNomUrl(1, 
'', 0, 0, 
'', 0, -1, 1);
 
 1222      print $documentlink;
 
 1223    } elseif ($line->doc_type == 
'bank') {
 
 1224      print $objectstatic->getNomUrl(1);
 
 1225      $bank_ref = strstr($line->doc_ref, 
'-');
 
 1226      print 
" " . $bank_ref;
 
 1228      print $line->doc_ref;
 
 1233      $totalarray[
'nbfield']++;
 
 1238  if (!empty($arrayfields[
't.label_operation'][
'checked'])) {
 
 1240    $doc_ref = preg_replace(
'/\(.*\)/', 
'', $line->doc_ref);
 
 1242      print 
'<td class="small tdoverflowmax350 classfortooltip" title="'.dol_escape_htmltag($line->label_operation).
'">'.
dol_escape_htmltag($line->label_operation).
'</td>';
 
 1244      print 
'<td class="small tdoverflowmax350 classfortooltip" title="'.dol_escape_htmltag($line->label_operation.($line->label_operation?
'<br>':
'').
'<span style="font-size:0.8em">('.
length_accounta($line->subledger_account).
')').
'">'.
dol_escape_htmltag($line->label_operation).($line->label_operation?
'<br>':
'').
'<span style="font-size:0.8em">('.
dol_escape_htmltag(
length_accounta($line->subledger_account)).
')</span></td>';
 
 1247      $totalarray[
'nbfield']++;
 
 1252  if (!empty($arrayfields[
't.lettering_code'][
'checked'])) {
 
 1253    print 
'<td class="center">'.dol_escape_htmltag($line->lettering_code).
'</td>';
 
 1255      $totalarray[
'nbfield']++;
 
 1260  if (!empty($arrayfields[
't.debit'][
'checked'])) {
 
 1261    print 
'<td class="right nowraponall amount">'.($line->debit != 0 ? 
price($line->debit) : 
'').
'</td>';
 
 1263      $totalarray[
'nbfield']++;
 
 1266      $totalarray[
'pos'][$totalarray[
'nbfield']] = 
'totaldebit';
 
 1268    $totalarray[
'val'][
'totaldebit'] += $line->debit;
 
 1272  if (!empty($arrayfields[
't.credit'][
'checked'])) {
 
 1273    print 
'<td class="right nowraponall amount">'.($line->credit != 0 ? 
price($line->credit) : 
'').
'</td>';
 
 1275      $totalarray[
'nbfield']++;
 
 1278      $totalarray[
'pos'][$totalarray[
'nbfield']] = 
'totalcredit';
 
 1280    $totalarray[
'val'][
'totalcredit'] += $line->credit;
 
 1284  if (!empty($arrayfields[
't.balance'][
'checked'])) {
 
 1285    print 
'<td class="right nowraponall amount">'.price(
price2num($sous_total_debit + $line->debit - $sous_total_credit - $line->credit, 
'MT')).
'</td>';
 
 1287      $totalarray[
'nbfield']++;
 
 1290      $totalarray[
'pos'][$totalarray[
'nbfield']] = 
'totalbalance';
 
 1292    $totalarray[
'val'][
'totalbalance'] += $line->debit - $line->credit;
 
 1296  if (!empty($arrayfields[
't.date_export'][
'checked'])) {
 
 1297    print 
'<td class="center">'.dol_print_date($line->date_export, 
'dayhour').
'</td>';
 
 1299      $totalarray[
'nbfield']++;
 
 1304  if (!empty($arrayfields[
't.date_validated'][
'checked'])) {
 
 1305    print 
'<td class="center">'.dol_print_date($line->date_validation, 
'dayhour').
'</td>';
 
 1307      $totalarray[
'nbfield']++;
 
 1311  if (!empty($arrayfields[
't.import_key'][
'checked'])) {
 
 1312    print 
'<td class="tdoverflowmax125" title="'.dol_escape_htmltag($line->import_key).
'">'.
dol_escape_htmltag($line->import_key).
"</td>\n";
 
 1314      $totalarray[
'nbfield']++;
 
 1319  $parameters = array(
'arrayfields'=>$arrayfields, 
'obj'=>$line);
 
 1320  $reshook = $hookmanager->executeHooks(
'printFieldListValue', $parameters); 
 
 1321  print $hookmanager->resPrint;
 
 1325    print 
'<td class="nowraponall center">';
 
 1326    if (($massactionbutton || $massaction) && $contextpage != 
'poslist') {   
 
 1328      if (in_array($line->id, $arrayofselected)) {
 
 1331      print 
'<input id="cb' . $line->id . 
'" class="flat checkforselect" type="checkbox" name="toselect[]" value="' . $line->id . 
'"' . ($selected ? 
' checked="checked"' : 
'') . 
' />';
 
 1335      $totalarray[
'nbfield']++;
 
 1340  $sous_total_debit += $line->debit;
 
 1341  $sous_total_credit += $line->credit;
 
 1348if ($num > 0 && $colspan > 0) {
 
 1349  print 
'<tr class="liste_total">';
 
 1350  print 
'<td class="right" colspan="'.$colspan.
'">'.$langs->trans(
"TotalForAccount").
' '.$accountg.
':</td>';
 
 1351  print 
'<td class="nowrap right">'.price(
price2num($sous_total_debit, 
'MT')).
'</td>';
 
 1352  print 
'<td class="nowrap right">'.price(
price2num($sous_total_credit, 
'MT')).
'</td>';
 
 1353  if ($colspanend > 0) {
 
 1354    print 
'<td colspan="'.$colspanend.
'"></td>';
 
 1358  $balance = $sous_total_debit - $sous_total_credit;
 
 1359  print 
'<tr class="liste_total">';
 
 1360  print 
'<td class="right" colspan="'.$colspan.
'">'.$langs->trans(
"Balance").
':</td>';
 
 1362    print 
'<td class="nowraponall right">';
 
 1363    print 
price(
price2num($sous_total_debit - $sous_total_credit, 
'MT'));
 
 1368    print 
'<td class="nowraponall right">';
 
 1369    print 
price(
price2num($sous_total_credit - $sous_total_debit, 
'MT'));
 
 1372  if ($colspanend > 0) {
 
 1373    print 
'<td colspan="'.$colspanend.
'"></td>';
 
 1380if (!empty($totalarray[
'val'][
'totaldebit'])) {
 
 1381  $totalarray[
'val'][
'totaldebit'] = 
price2num($totalarray[
'val'][
'totaldebit'], 
'MT');
 
 1383if (!empty($totalarray[
'val'][
'totalcredit'])) {
 
 1384  $totalarray[
'val'][
'totalcredit'] = 
price2num($totalarray[
'val'][
'totalcredit'], 
'MT');
 
 1386if (!empty($totalarray[
'val'][
'totalbalance'])) {
 
 1387  $totalarray[
'val'][
'totalbalance'] = 
price2num($totalarray[
'val'][
'totaldebit'] - $totalarray[
'val'][
'totalcredit'], 
'MT');
 
 1391include DOL_DOCUMENT_ROOT.
'/core/tpl/list_print_total.tpl.php';
 
 1396  foreach ($arrayfields as $key => $val) {
 
 1397    if (!empty($val[
'checked'])) {
 
 1401  print 
'<tr><td colspan="'.$colspan.
'"><span class="opacitymedium">'.$langs->trans(
"NoRecordFound").
'</span></td></tr>';
 
 1404$parameters = array(
'arrayfields'=>$arrayfields);
 
 1405$reshook = $hookmanager->executeHooks(
'printFieldListFooter', $parameters, $object, $action); 
 
 1406print $hookmanager->resPrint;
 
length_accountg($account)
Return General accounting account with defined length (used for product and miscellaneous)
 
length_accounta($accounta)
Return Auxiliary accounting account of thirdparties with defined length.
 
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
 
Class to manage bank transaction lines.
 
Class to manage categories of an accounting account.
 
Class to manage accounting journals.
 
Class to manage Ledger (General Ledger and Subledger)
 
Class to manage Trips and Expenses.
 
Class to manage suppliers invoices.
 
Class to manage invoices.
 
dol_get_last_day($year, $month=12, $gm=false)
Return GMT time for last day of a month or year.
 
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
 
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
 
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
 
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
 
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
 
dol_now($mode='auto')
Return date for now.
 
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
 
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
 
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
 
dolGetButtonTitleSeparator($moreClass="")
Add space between dolGetButtonTitle.
 
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
 
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='')
Show information for admin users or standard users.
 
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
 
print_barre_liste($titre, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
 
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
 
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
 
get_exdir($num, $level, $alpha, $withoutslash, $object, $modulepart='')
Return a path to have a the directory according to object where files are stored.
 
dol_getdate($timestamp, $fast=false, $forcetimezone='')
Return an array with locale date info.
 
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
 
$formconfirm
if ($action == 'delbookkeepingyear') {
 
if(preg_match('/crypted:/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
 
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.