diff --git a/htdocs/accountancy/admin/export.php b/htdocs/accountancy/admin/export.php index c0a987ddf82d1ff65f14aa162ad68ae57750f971..9f060179910d8450f4c72b93b6e6c6f349422ffe 100644 --- a/htdocs/accountancy/admin/export.php +++ b/htdocs/accountancy/admin/export.php @@ -206,7 +206,8 @@ else print '<td>'; $listmodelcsv=array( '1'=>$langs->trans("Modelcsv_normal"), - '2'=>$langs->trans("Modelcsv_CEGID") + '2'=>$langs->trans("Modelcsv_CEGID"), + '3'=>$langs->trans("Modelcsv_COALA") ); print $form->selectarray("modelcsv",$listmodelcsv,$conf->global->ACCOUNTING_EXPORT_MODELCSV,0); diff --git a/htdocs/accountancy/bookkeeping/card.php b/htdocs/accountancy/bookkeeping/card.php index 77c9a4a135e59184e222d8edf6fa4287ae6a7859..86aca8b8af4430fdbd59078bf1804c14ddab5fc8 100644 --- a/htdocs/accountancy/bookkeeping/card.php +++ b/htdocs/accountancy/bookkeeping/card.php @@ -91,7 +91,7 @@ if ($action == "confirm_update") { $book->sens = 'C'; } - $result = $book->update(); + $result = $book->update($user); if ($result < 0) { setEventMessages($book->error, $book->errors, 'errors'); } else { @@ -136,7 +136,7 @@ else if ($action == "add") { $book->sens = 'C'; } - $result = $book->create_std($user); + $result = $book->createStd($user); if ($result < 0) { setEventMessages($book->error, $book->errors, 'errors'); } else { @@ -180,7 +180,7 @@ else if ($action == "confirm_create") { $book->montant = 0; - $result = $book->create_std($user); + $result = $book->createStd($user); if ($result < 0) { setEventMessages($book->error, $book->errors, 'errors'); } else { @@ -214,6 +214,18 @@ if ($action == 'create') { $conf->global->ACCOUNTING_EXPENSEREPORT_JOURNAL => $conf->global->ACCOUNTING_EXPENSEREPORT_JOURNAL ); + $sql = 'SELECT DISTINCT accountancy_journal FROM '.MAIN_DB_PREFIX.'bank_account WHERE clos=0'; + $resql=$db->query($sql); + if (!$resql) { + setEventMessages($db->lasterror,null,'errors'); + } else { + while ($obj_bank=$db->fetch_object($resql)) { + if (!empty($obj_bank->accountancy_journal)) { + $code_journal_array[$obj_bank->accountancy_journal]=$obj_bank->accountancy_journal; + } + } + } + $book = new BookKeeping($db); $next_num_mvt = $book->getNextNumMvt(); @@ -259,7 +271,7 @@ if ($action == 'create') { print '</form>'; } else { $book = new BookKeeping($db); - $result = $book->fetch_per_mvt($piece_num); + $result = $book->fetchPerMvt($piece_num); if ($result < 0) { setEventMessages($book->error, $book->errors, 'errors'); } diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index c5fea407a1200c1540412223692aca91d170d280..c517df2d1298274809a5922e644b6928b4738401 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -38,31 +38,149 @@ $page = GETPOST("page"); $sortorder = GETPOST("sortorder"); $sortfield = GETPOST("sortfield"); $action = GETPOST('action', 'alpha'); +$search_mvt_num = GETPOST('search_mvt_num', 'int'); $search_doc_type = GETPOST("search_doc_type"); $search_doc_ref = GETPOST("search_doc_ref"); -$search_account = GETPOST("search_account"); -$search_thirdparty = GETPOST("search_thirdparty"); -$search_journal = GETPOST("search_journal"); -$limit = GETPOST('limit')?GETPOST('limit','int'):$conf->liste_limit; +$search_date_start = dol_mktime(0, 0, 0, GETPOST('date_startmonth', 'int'), GETPOST('date_startday', 'int'), GETPOST('date_startyear', 'int')); +$search_date_end = dol_mktime(0, 0, 0, GETPOST('date_endmonth', 'int'), GETPOST('date_endday', 'int'), GETPOST('date_endyear', 'int')); +$search_doc_date = dol_mktime(0, 0, 0, GETPOST('doc_datemonth', 'int'), GETPOST('doc_dateday', 'int'), GETPOST('doc_dateyear', 'int')); + +if (GETPOST("button_delmvt_x") || GETPOST("button_delmvt")) { + $action='delbookkeepingyear'; +} +if (GETPOST("button_export_csv_x") || GETPOST("button_export_csv")) { + $action='export_csv'; +} + +$search_accountancy_code = GETPOST("search_accountancy_code"); + +$search_accountancy_code_start = GETPOST('search_accountancy_code_start', 'alpha'); +if ($search_accountancy_code_start == - 1) { + $search_accountancy_code_start = ''; +} +$search_accountancy_code_end = GETPOST('search_accountancy_code_end', 'alpha'); +if ($search_accountancy_code_end == - 1) { + $search_accountancy_code_end = ''; +} + +$search_accountancy_aux_code = GETPOST("search_accountancy_aux_code"); + +$search_accountancy_aux_code_start = GETPOST('search_accountancy_aux_code_start', 'alpha'); +if ($search_accountancy_aux_code_start == - 1) { + $search_accountancy_aux_code_start = ''; +} +$search_accountancy_aux_code_end = GETPOST('search_accountancy_aux_code_end', 'alpha'); +if ($search_accountancy_aux_code_end == - 1) { + $search_accountancy_aux_code_end = ''; +} +$search_mvt_label = GETPOST('search_mvt_label', 'alpha'); +$search_direction = GETPOST('search_direction', 'alpha'); +$search_ledger_code = GETPOST('search_ledger_code', 'alpha'); + +$limit = GETPOST('limit') ? GETPOST('limit', 'int') : $conf->liste_limit; + -if ($sortorder == "") - $sortorder = "ASC"; -if ($sortfield == "") - $sortfield = "bk.rowid"; $offset = $limit * $page; +$object = new BookKeeping($db); + $formventilation = new FormVentilation($db); $formother = new FormOther($db); +$form = new Form($db); if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers { - $search_piece_num = ""; - $search_doc_ref = ""; - $search_account = ""; - $search_thirdparty = ""; - $search_journal = ""; + $search_mvt_num = ''; + $search_doc_type = ''; + $search_doc_ref = ''; + $search_doc_date = ''; + $search_accountancy_code = ''; + $search_accountancy_code_start = ''; + $search_accountancy_code_end = ''; + $search_accountancy_aux_code = ''; + $search_accountancy_aux_code_start = ''; + $search_accountancy_aux_code_end = ''; + $search_mvt_label = ''; + $search_direction = ''; + $search_ledger_code = ''; + $search_date_start = ''; + $search_date_end = ''; +} + +if (empty($search_date_start)) { + $search_date_start = dol_mktime(0, 0, 0, 1, 1, dol_print_date(dol_now(), '%Y')); + $search_date_end = dol_mktime(0, 0, 0, 12, 31, dol_print_date(dol_now(), '%Y')); +} +if ($sortorder == "") + $sortorder = "ASC"; + if ($sortfield == "") + $sortfield = "t.rowid"; + + +$options = ''; +$filter = array (); +if (! empty($search_date_start)) { + $filter['t.doc_date>='] = $search_date_start; + $options .= '&date_startmonth=' . GETPOST('date_startmonth', 'int') . '&date_startday=' . GETPOST('date_startday', 'int') . '&date_startyear=' . GETPOST('date_startyear', 'int'); +} +if (! empty($search_date_end)) { + $filter['t.doc_date<='] = $search_date_end; + $options .= '&date_endmonth=' . GETPOST('date_endmonth', 'int') . '&date_endday=' . GETPOST('date_endday', 'int') . '&date_endyear=' . GETPOST('date_endyear', 'int'); +} +if (! empty($search_doc_type)) { + $filter['t.doc_type'] = $search_doc_type; + $options .= '&search_doc_type=' . $search_doc_type; } +if (! empty($search_doc_date)) { + $filter['t.doc_date'] = $search_doc_date; + $options .= '&doc_datemonth=' . GETPOST('doc_datemonth', 'int') . '&doc_dateday=' . GETPOST('doc_dateday', 'int') . '&doc_dateyear=' . GETPOST('doc_dateyear', 'int'); +} +if (! empty($search_doc_ref)) { + $filter['t.doc_ref'] = $search_doc_ref; + $options .= '&search_doc_ref=' . $search_doc_ref; +} +if (! empty($search_accountancy_code)) { + $filter['t.numero_compte'] = $search_accountancy_code; + $options .= '&search_accountancy_code=' . $search_accountancy_code; +} +if (! empty($search_accountancy_code_start)) { + $filter['t.numero_compte>='] = $search_accountancy_code_start; + $options .= '&search_accountancy_code_start=' . $search_accountancy_code_start; +} +if (! empty($search_accountancy_code_end)) { + $filter['t.numero_compte<='] = $search_accountancy_code_end; + $options .= '&search_accountancy_code_end=' . $search_accountancy_code_end; +} +if (! empty($search_accountancy_aux_code)) { + $filter['t.code_tiers'] = $search_accountancy_aux_code; + $options .= '&search_accountancy_aux_code=' . $search_accountancy_aux_code; +} +if (! empty($search_accountancy_aux_code_start)) { + $filter['t.code_tiers>='] = $search_accountancy_aux_code_start; + $options .= '&search_accountancy_aux_code_start=' . $search_accountancy_aux_code_start; +} +if (! empty($search_accountancy_aux_code_end)) { + $filter['t.code_tiers<='] = $search_accountancy_aux_code_end; + $options .= '&search_accountancy_aux_code_end=' . $search_accountancy_aux_code_end; +} +if (! empty($search_mvt_label)) { + $filter['t.label_compte'] = $search_mvt_label; + $options .= '&search_mvt_label=' . $search_mvt_label; +} +if (! empty($search_direction)) { + $filter['t.sens'] = $search_direction; + $options .= '&search_direction=' . $search_direction; +} +if (! empty($search_ledger_code)) { + $filter['t.code_journal'] = $search_ledger_code; + $options .= '&search_ledger_code=' . $search_ledger_code; +} +if (! empty($search_mvt_num)) { + $filter['t.piece_num'] = $search_mvt_num; + $options .= '&search_mvt_num=' . $search_mvt_num; +} + /* * Action @@ -72,96 +190,106 @@ if ($action == 'delbookkeeping') { $import_key = GETPOST('importkey', 'alpha'); if (! empty($import_key)) { - $object = new BookKeeping($db); - $result = $object->delete_by_importkey($import_key); - Header("Location: list.php"); + $result = $object->deleteByImportkey($import_key); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } + Header("Location: list.php"); + exit(); } -} elseif ($action == 'delbookkeepingyear') { +} elseif ($action == 'delbookkeepingyearconfirm') { $delyear = GETPOST('delyear', 'int'); if (! empty($delyear)) { - $object = new BookKeeping($db); - $result = $object->delete_by_year($delyear); - Header("Location: list.php"); + $result = $object->deleteByYear($delyear); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } + Header("Location: list.php"); + exit(); } -} elseif ($action == 'delbookkeepingyear') { +} elseif ($action == 'delmouvconfirm') { - $delyear = GETPOST('delyear', 'int'); + $mvt_num = GETPOST('mvt_num', 'int'); - if (! empty($delyear)) { - $object = new BookKeeping($db); - $result = $object->delete_by_year($delyear); - Header("Location: list.php"); + if (! empty($mvt_num)) { + $result = $object->deleteMvtNum($mvt_num); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } + //if (!empty($options)) { + // Header("Location: list.php?".urldecode($options)); + //} else { + Header("Location: list.php"); + //} + exit(); } -} // Export -else if ($action == 'export_csv') { +} elseif ($action == 'export_csv') { + $sep = $conf->global->ACCOUNTING_EXPORT_SEPARATORCSV; + $journal = 'bookkepping'; - header('Content-Type: text/csv'); - header('Content-Disposition: attachment;filename=export_csv.csv'); + include DOL_DOCUMENT_ROOT.'/accountancy/tpl/export_journal.tpl.php'; - $object = new BookKeeping($db); - $result = $object->export_bookkeping('ebp'); + $result = $object->fetchAll($sortorder, $sortfield, 0, 0, $filter); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } - // Model classic Export - if ($conf->global->ACCOUNTING_EXPORT_MODELCSV == 1) { - - foreach ( $object->linesexport as $line ) { - print '"' . dol_print_date($line->doc_date, '%d%m%Y') . '",'; - print '"' . $line->code_journal . '",'; - print '"' . $line->numero_compte . '",'; - print '"' . substr($line->code_journal, 0, 2) . '",'; - print '"' . substr($line->doc_ref, 0, 40) . '",'; - print '"' . $line->num_piece . '",'; - print '"' . $line->debit . '",'; - print '"' . $line->credit . '",'; - print '"' . $conf->currency . '",'; + foreach ( $object->lines as $line ) { + + if ($conf->global->ACCOUNTING_EXPORT_MODELCSV == 2) + { + $sep = ";"; + // Model Cegid Expert Export + $date = dol_print_date($line->doc_date, '%d%m%Y'); + print $date . $sep; + print $line->code_journal . $sep; + print length_accountg($line->numero_compte) . $sep; + print ' '. $sep; + print $line->sens . $sep; + print price($line->montant) . $sep; + print dol_trunc($line->label_compte, 32) . $sep; + print $line->doc_ref . $sep; + + /*print $line->piece_num . $sep; + print length_accounta($line->code_tiers) . $sep; + print . $sep; + print price($line->debit) . $sep; + print price($line->credit) . $sep;*/ + print "\n"; } - } - // Model cegid Export - if ($conf->global->ACCOUNTING_EXPORT_MODELCSV == 2) { - foreach ( $object->linesexport as $line ) { - print $line->id . ','; - print '"' . dol_print_date($line->doc_date, '%d%m%Y') . '",'; - print '"' . $line->code_journal . '",'; - print '"' . $line->numero_compte . '",'; - print '"' . substr($line->code_journal, 0, 2) . '",'; - print '"' . substr($line->doc_ref, 0, 40) . '",'; - print '"' . $line->num_piece . '",'; - print '"' . $line->montant . '",'; - print '"' . $line->sens . '",'; - print '"' . dol_print_date($line->doc_date, '%d%m%Y') . '",'; - print '"' . $conf->currency . '",'; + elseif ($conf->global->ACCOUNTING_EXPORT_MODELCSV == 1) { + + //Std export + $date = dol_print_date($line->doc_date, $conf->global->ACCOUNTING_EXPORT_DATE); + print $date . $sep; + print $line->doc_ref . $sep; + print length_accounta($line->numero_compte) . $sep; + print length_accountg($line->code_tiers) . $sep; + print price($line->debit) . $sep; + print price($line->credit) . $sep; + + /*print $line->piece_num . $sep; + print $line->label_compte . $sep; + print price($line->montant) . $sep; + print $line->sens . $sep;*/ + print $line->code_journal . $sep; print "\n"; - } - } - // Model Coala Export - if ($conf->global->ACCOUNTING_EXPORT_MODELCSV == 3) { - foreach ( $object->linesexport as $line ) { - print $line->id . ','; - print '"' . dol_print_date($line->doc_date, '%d%m%Y') . '",'; - print '"' . $line->code_journal . '",'; - print '"' . $line->numero_compte . '",'; - print '"' . substr($line->code_journal, 0, 2) . '",'; - print '"' . substr($line->doc_ref, 0, 40) . '",'; - print '"' . $line->num_piece . '",'; - print '"' . $line->montant . '",'; - print '"' . $line->sens . '",'; - print '"' . dol_print_date($line->doc_date, '%d%m%Y') . '",'; - print '"' . $conf->currency . '",'; + }elseif ($conf->global->ACCOUNTING_EXPORT_MODELCSV == 3) { + + //Coala export + $date = dol_print_date($line->doc_date, '%d/%m/%Y'); + print $date . $sep; + print $line->code_journal . $sep; + print length_accounta($line->numero_compte) . $sep; + print $line->piece_num . $sep; + print $line->doc_ref . $sep; + print price($line->debit) . $sep; + print price($line->credit) . $sep; + print 'E' . $sep; + print length_accountg($line->code_tiers) . $sep; print "\n"; } } @@ -169,156 +297,199 @@ else if ($action == 'export_csv') { else { - llxHeader('', $langs->trans("Bookkeeping")); + $title_page=$langs->trans("Bookkeeping") .' '. dol_print_date($search_date_start).'-'.dol_print_date($search_date_end); + + llxHeader('', $title_page); /* * List */ - $sql = "SELECT bk.rowid, bk.doc_date, bk.doc_type, bk.doc_ref, bk.code_tiers, bk.numero_compte , bk.label_compte, bk.debit , bk.credit, bk.montant , bk.sens , bk.code_journal , bk.piece_num "; - $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping as bk"; - - if (dol_strlen(trim($search_doc_type))) { - - $sql .= " WHERE bk.piece_num LIKE '%" . $search_piece_num . "%'"; - - if (dol_strlen(trim($search_doc_ref))) { - $sql .= " AND bk.doc_ref LIKE '%" . $search_doc_ref . "%'"; + $nbtotalofrecords = 0; + if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { + $nbtotalofrecords = $object->fetchAll($sortorder, $sortfield, 0, 0, $filter); + if ($nbtotalofrecords < 0) { + setEventMessages($object->error, $object->errors, 'errors'); } } - if (dol_strlen(trim($search_doc_ref))) { - $sql .= " WHERE bk.doc_ref LIKE '%" . $search_doc_ref . "%'"; - } - if (dol_strlen(trim($search_account))) { - $sql .= " WHERE bk.numero_compte LIKE '%" . $search_account . "%'"; - } - if (dol_strlen(trim($search_thirdparty))) { - $sql .= " WHERE bk.code_tiers LIKE '%" . $search_thirdparty . "%'"; - } - if (dol_strlen(trim($search_journal))) { - $sql .= " WHERE bk.code_journal LIKE '%" . $search_journal . "%'"; - } - $sql .= " ORDER BY $sortfield $sortorder " . $db->plimit($conf->liste_limit + 1, $offset); + $result = $object->fetchAll($sortorder, $sortfield, $limit, $offset, $filter); + if ($result < 0) { + setEventMessages($object->error, $object->errors, 'errors'); + } - dol_syslog('accountancy/bookkeeping/list.php:: $sql=' . $sql); - $resql = $db->query($sql); - if ($resql) { - $num = $db->num_rows($resql); - $i = 0; - - print_barre_liste($langs->trans("Bookkeeping"), $page, $_SERVER["PHP_SELF"], "", $sortfield, $sortorder, '', $num); - - /*print '<form name="add" action="' . $_SERVER["PHP_SELF"] . '" method="POST">'; - print '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">'; - print '<input type="hidden" name="action" value="delbookkeeping">'; - - print $formventilation->select_bookkeeping_importkey('importkey', GETPOST('importkey')); - - print '<div class="inline-block divButAction"><input type="submit" class="butAction" value="' . $langs->trans("DelBookKeeping") . '" /></div>'; - - print '</form>';*/ + if ($action == 'delmouv') { + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?mvt_num=' . GETPOST('mvt_num'), $langs->trans('DeleteMvt'), $langs->trans('ConfirmDeleteMvt'), 'delmouvconfirm', '', 0, 1); + print $formconfirm; + } + if ($action == 'delbookkeepingyear') { - print '<form name="add" action="' . $_SERVER["PHP_SELF"] . '" method="POST">'; - print '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">'; - print '<input type="hidden" name="action" value="delbookkeepingyear">'; + $form_question=array(); + $delyear=GETPOST('delyear'); - print $formother->select_year(GETPOST('delyear'), 'delyear'); + if (empty($delyear)) { + $delyear=dol_print_date(dol_now(),'%Y'); + } + $year_array=$formventilation->selectyear_accountancy_bookkepping($delyear, 'delyear',0,'array'); - print '<div class="inline-block divButAction"><input type="submit" class="butAction" value="' . $langs->trans("DelBookKeeping") . '" /></div>'; + $form_question['delyear']=array('name'=>'delyear','type'=>'select','label'=>$langs->trans('DelYear'),'values'=>$year_array,'default'=>$delyear); - print '</form>'; + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans('DeleteMvt'), $langs->trans('ConfirmDeleteMvt'), 'delbookkeepingyearconfirm', $form_question, 0, 1); + print $formconfirm; + } + + print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $options, $sortfield, $sortorder, '', $result, $nbtotalofrecords); + + /*print '<form name="add" action="' . $_SERVER["PHP_SELF"] . '" method="POST">'; + print '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">'; + print '<input type="hidden" name="action" value="delbookkeeping">'; + + print $formventilation->select_bookkeeping_importkey('importkey', GETPOST('importkey')); + + print '<div class="inline-block divButAction"><input type="submit" class="butAction" value="' . $langs->trans("DelBookKeeping") . '" /></div>'; + + print '</form>';*/ + + print '<form method="GET" id="searchFormList" action="' . $_SERVER["PHP_SELF"] . '">'; + print '<div class="tabsAction">'."\n"; + print '<div class="inline-block divButAction"><input type="submit" name="button_delmvt" class="butAction" value="' . $langs->trans("DelBookKeeping") . '" /></div>'; + print '<a class="butAction" href="./card.php?action=create">' . $langs->trans("NewAccountingMvt") . '</a>'; + //print '<a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?action=export_csv">' . $langs->trans("Export") . '</a>'; + print '<div class="inline-block divButAction"><input type="submit" name="button_export_csv" class="butAction" value="' . $langs->trans("Export") . '" /></div>'; + + print '</div>'; + + + /*print '<div class="liste_titre">'; + print $langs->trans('DateStart') . ': '; + print $form->select_date($search_date_start, 'date_start', 0, 0, 1); + print $langs->trans('DateEnd') . ': '; + print $form->select_date($search_date_end, 'date_end', 0, 0, 1); + print '</div>'; + print '<div class="liste_titre">'; + print $langs->trans('From') . ' ' . $langs->trans('AccountAccounting') . ': '; + print $formventilation->select_account($search_accountancy_code_start, 'search_accountancy_code_start', 1, array (), 1, 1, ''); + print $langs->trans('To') . ' ' . $langs->trans('AccountAccounting') . ': '; + print $formventilation->select_account($search_accountancy_code_end, 'search_accountancy_code_end', 1, array (), 1, 1, ''); + print '</div>'; + print '<div class="liste_titre">'; + print $langs->trans('From') . ' ' . $langs->trans('ThirdPartyAccount') . ': '; + print $formventilation->select_auxaccount($search_accountancy_aux_code_start, 'search_accountancy_aux_code_start', 1); + print $langs->trans('To') . ' ' . $langs->trans('ThirdPartyAccount') . ': '; + print $formventilation->select_auxaccount($search_accountancy_aux_code_end, 'search_accountancy_aux_code_end', 1); + print '</div>';*/ + + print '<table class="noborder" width="100%">'; + print '<tr class="liste_titre">'; + print_liste_field_titre($langs->trans("NumPiece"), $_SERVER['PHP_SELF'], "t.piece_num", "", $options, "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Docdate"), $_SERVER['PHP_SELF'], "t.doc_date", "", $options, "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Docref"), $_SERVER['PHP_SELF'], "t.doc_ref", "", $options, "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Numerocompte"), $_SERVER['PHP_SELF'], "t.numero_compte", "", $options, "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Code_tiers"), $_SERVER['PHP_SELF'], "t.code_tiers", "", $options, "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Labelcompte"), $_SERVER['PHP_SELF'], "bk_label_compte", "", $options, "", $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Debit"), $_SERVER['PHP_SELF'], "t.debit", "", $options, 'align="right"', $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Credit"), $_SERVER['PHP_SELF'], "t.credit", "", $options, 'align="right"', $sortfield, $sortorder); + //print_liste_field_titre($langs->trans("Amount"), $_SERVER['PHP_SELF'], "t.montant", "", $options, 'align="center"', $sortfield, $sortorder); + //print_liste_field_titre($langs->trans("Sens"), $_SERVER['PHP_SELF'], "t.sens", "", $options, 'align="center"', $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Codejournal"), $_SERVER['PHP_SELF'], "t.code_journal", "", $options, 'align="right"', $sortfield, $sortorder); + print_liste_field_titre($langs->trans("Action"), $_SERVER["PHP_SELF"], "", $options, "", 'width="60" align="center"', $sortfield, $sortorder); + print "</tr>\n"; + + print '<tr class="liste_titre">'; + print '<form action="' . $_SERVER["PHP_SELF"] . '" method="GET">'; + print '<td><input type="text" name="search_mvt_num" size="8" value="' . $search_mvt_num . '"></td>'; + print '<td class="liste_titre">'; + print $langs->trans('From') . ': '; + print $form->select_date($search_date_start, 'date_start', 0, 0, 1); + print '<br>'; + print $langs->trans('To') . ': '; + print $form->select_date($search_date_end, 'date_end', 0, 0, 1); + //print $form->select_date($search_doc_date, 'doc_date', 0, 0, 1); + print '</td>'; + print '<td><input type="text" name="search_doc_ref" size="8" value="' . $search_doc_ref . '"></td>'; + print '<td>'; + //print $langs->trans('From') . ' ' . $langs->trans('AccountAccounting') . ': '; + print $langs->trans('From'); + print $formventilation->select_account($search_accountancy_code_start, 'search_accountancy_code_start', 1, array (), 1, 1, ''); + //print $langs->trans('To') . ' ' . $langs->trans('AccountAccounting') . ': '; + print '<br>'; + print $langs->trans('To'); + print $formventilation->select_account($search_accountancy_code_end, 'search_accountancy_code_end', 1, array (), 1, 1, ''); + print '</td>'; + //print '<td><input type="text" name="search_accountancy_code" size="8" value="' . $search_accountancy_code . '"></td>'; + print '<td>'; + //print $langs->trans('From') . ' ' . $langs->trans('ThirdPartyAccount') . ': '; + print $langs->trans('From'); + print $formventilation->select_auxaccount($search_accountancy_aux_code_start, 'search_accountancy_aux_code_start', 1); + //print $langs->trans('To') . ' ' . $langs->trans('ThirdPartyAccount') . ': '; + print '<br>'; + print $langs->trans('To'); + print $formventilation->select_auxaccount($search_accountancy_aux_code_end, 'search_accountancy_aux_code_end', 1); + print '</td>'; + //print '<td><input type="text" name="search_accountancy_aux_code" size="8" value="' . $search_accountancy_aux_code . '"></td>'; + + print '<td class="liste_titre">'; + print '<input type="text" size=6 class="flat" name="search_mvt_label" value="'.$search_mvt_label.'"/>'; + print '</td>'; + print '<td> </td>'; + print '<td> </td>'; + //print '<td> </td>'; + //print '<td> </td>'; + print '<td align="right"><input type="text" name="search_ledger_code" size="3" value="' . $search_ledger_code . '"></td>'; + print '<td align="right" colspan="2" class="liste_titre">'; + print '<input type="image" class="liste_titre" src="' . img_picto($langs->trans("Search"), 'search.png', '', '', 1) . '" name="button_search" value="' . dol_escape_htmltag($langs->trans("Search")) . '" title="' . dol_escape_htmltag($langs->trans("Search")) . '">'; + print ' '; + print '<input type="image" class="liste_titre" src="' . img_picto($langs->trans("Search"), 'searchclear.png', '', '', 1) . '" name="button_removefilter" value="' . dol_escape_htmltag($langs->trans("RemoveFilter")) . '" title="' . dol_escape_htmltag($langs->trans("RemoveFilter")) . '">'; + print '</td>'; + + print '</tr>'; + + $var = True; + + $total_debit=0; + $total_credit=0; + + foreach ( $object->lines as $line ) { + $var = ! $var; - print '<form name="add" action="' . $_SERVER["PHP_SELF"] . '" method="POST">'; - print '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">'; - print '<input type="hidden" name="action" value="export_csv">'; - print '<input type="submit" class="button" style="float: right;" value="' . $langs->trans("Export") . '" onclick="launch_export();" />'; - print '</form>'; + $total_debit+=$line->debit; + $total_credit+=$line->credit; - print '<table class="noborder" width="100%">'; - print '<tr class="liste_titre">'; - print_liste_field_titre($langs->trans("NumPiece"), $_SERVER['PHP_SELF'], "bk.piece_num", "", "", "", $sortfield, $sortorder); - print_liste_field_titre($langs->trans("Docdate"), $_SERVER['PHP_SELF'], "bk.doc_date", "", "", "", $sortfield, $sortorder); - print_liste_field_titre($langs->trans("Docref"), $_SERVER['PHP_SELF'], "bk.doc_ref", "", "", "", $sortfield, $sortorder); - print_liste_field_titre($langs->trans("Numerocompte"), $_SERVER['PHP_SELF'], "bk.numero_compte", "", "", "", $sortfield, $sortorder); - print_liste_field_titre($langs->trans("Code_tiers"), $_SERVER['PHP_SELF'], "bk.code_tiers", "", "", "", $sortfield, $sortorder); - print_liste_field_titre($langs->trans("Labelcompte"), $_SERVER['PHP_SELF'], "bk_label_compte", "", "", "", $sortfield, $sortorder); - print_liste_field_titre($langs->trans("Debit"), $_SERVER['PHP_SELF'], "bk.debit", "", "", 'align="center"', $sortfield, $sortorder); - print_liste_field_titre($langs->trans("Credit"), $_SERVER['PHP_SELF'], "bk.credit", "", "", 'align="center"', $sortfield, $sortorder); - print_liste_field_titre($langs->trans("Amount"), $_SERVER['PHP_SELF'], "bk.montant", "", "", 'align="center"', $sortfield, $sortorder); - print_liste_field_titre($langs->trans("Sens"), $_SERVER['PHP_SELF'], "bk.sens", "", "", 'align="center"', $sortfield, $sortorder); - print_liste_field_titre($langs->trans("Codejournal"), $_SERVER['PHP_SELF'], "bk.code_journal", "", "", "", $sortfield, $sortorder); - print_liste_field_titre($langs->trans("Action"), $_SERVER["PHP_SELF"], "", $param, "", 'width="60" align="center"', $sortfield, $sortorder); - print "</tr>\n"; + print "<tr $bc[$var]>"; - print '<tr class="liste_titre">'; - print '<form action="' . $_SERVER["PHP_SELF"] . '" method="GET">'; - print '<td><input type="text" name="search_doc_type" size="8" value="' . $search_piece_num . '"></td>'; - print '<td> </td>'; - print '<td><input type="text" name="search_doc_ref" size="8" value="' . $search_doc_ref . '"></td>'; - print '<td><input type="text" name="search_account" size="8" value="' . $search_account . '"></td>'; - print '<td><input type="text" name="search_thirdparty" size="8" value="' . $search_thirdparty . '"></td>'; - print '<td> </td>'; - print '<td> </td>'; - print '<td> </td>'; - print '<td> </td>'; - print '<td> </td>'; - print '<td><input type="text" name="search_journal" size="3" value="' . $search_journal . '"></td>'; - print '<td align="right" colspan="2" class="liste_titre">'; - print '<input type="image" class="liste_titre" src="' . img_picto($langs->trans("Search"), 'search.png', '', '', 1) . '" name="button_search" value="' . dol_escape_htmltag($langs->trans("Search")) . '" title="' . dol_escape_htmltag($langs->trans("Search")) . '">'; - print ' '; - print '<input type="image" class="liste_titre" src="' . img_picto($langs->trans("Search"), 'searchclear.png', '', '', 1) . '" name="button_removefilter" value="' . dol_escape_htmltag($langs->trans("RemoveFilter")) . '" title="' . dol_escape_htmltag($langs->trans("RemoveFilter")) . '">'; + print '<td><a href="./card.php?piece_num=' . $line->piece_num . '">' . $line->piece_num . '</a></td>'; + print '<td align="center">' . dol_print_date($line->doc_date, 'day') . '</td>'; + print '<td>' . $line->doc_ref . '</td>'; + print '<td>' . length_accountg($line->numero_compte) . '</td>'; + print '<td>' . length_accounta($line->code_tiers) . '</td>'; + print '<td>' . $line->label_compte . '</td>'; + print '<td align="right">' . price($line->debit) . '</td>'; + print '<td align="right">' . price($line->credit) . '</td>'; + //print '<td align="right">' . price($line->montant) . '</td>'; + //print '<td align="center">' . $line->sens . '</td>'; + print '<td align="right">' . $line->code_journal . '</td>'; + print '<td align="center">'; + print '<a href="./card.php?piece_num=' . $line->piece_num . '">' . img_edit() . '</a>'; + print '<a href="' . $_SERVER['PHP_SELF'] . '?action=delmouv&mvt_num=' . $line->piece_num .$options.'&page='.$page.'">' . img_delete() . '</a>'; print '</td>'; - print '</form>'; - print '</tr>'; - - $var = True; - - while ( $i < min($num, $conf->liste_limit) ) { - $obj = $db->fetch_object($resql); - $var = ! $var; - - print "<tr $bc[$var]>"; - - /* if ($old_piecenum!=$obj->piece_num) { - $total_debit=0; - $total_credit=0; - } else { - $total_debit+=$obj->debit; - $total_credit+=$obj->credit; - } - */ - - print '<td>' . $obj->piece_num . '</td>'; - print '<td align="center">' . dol_print_date($db->jdate($obj->doc_date), 'day') . '</td>'; - print '<td>' . $obj->doc_ref . '</td>'; - print '<td>' . length_accountg($obj->numero_compte) . '</td>'; - print '<td>' . length_accounta($obj->code_tiers) . '</td>'; - print '<td>' . $obj->label_compte . '</td>'; - print '<td align="right">' . price($obj->debit) . '</td>'; - print '<td align="right">' . price($obj->credit) . '</td>'; - print '<td align="right">' . price($obj->montant) . '</td>'; - print '<td align="center">' . $obj->sens . '</td>'; - print '<td>' . $obj->code_journal . '</td>'; - print '<td align="center"><a href="./card.php?piece_num=' . $obj->piece_num . '">' . img_edit() . '</a></td>'; - print "</tr>\n"; - - //$old_piecenum= $obj->piece_num; - $i ++; - } - print "</table>"; - - print '<div class="tabsAction">'; - print '<a class="butAction" href="./card.php?action=create">' . $langs->trans("NewAccountingMvt") . '</a>'; - print '</div>'; - - $db->free($resql); - } else { - dol_print_error($db); + print "</tr>\n"; } + print '<tr class="liste_total">'; + print '<td colspan="6"></td>'; + print '<td align="right">'; + print price($total_debit); + print '</td>'; + print '<td align="right">'; + print price($total_credit); + print '</td>'; + print '<td colspan="2"></td>'; + print '</tr>'; + + print "</table>"; + print '</form>'; + llxFooter(); } - $db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/bookkeeping/listbyyear.php b/htdocs/accountancy/bookkeeping/listbyyear.php index c6a267553651a32767c54dc8ec986d9d2a6090dd..ea766c16ef99253e9d95aa2b29787d3bb6d1901f 100644 --- a/htdocs/accountancy/bookkeeping/listbyyear.php +++ b/htdocs/accountancy/bookkeeping/listbyyear.php @@ -19,16 +19,17 @@ */ /** - * \file htdocs/accountancy/bookkeeping/listbyyear.php - * \ingroup Accounting Expert - * \brief Book keeping by year + * \file htdocs/accountancy/bookkeeping/listbyyear.php + * \ingroup Accounting Expert + * \brief Book keeping by year */ - require '../../main.inc.php'; - + // Class -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 . '/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'; +require_once DOL_DOCUMENT_ROOT . '/accountancy/class/html.formventilation.class.php'; // Langs $langs->load("accountancy"); @@ -36,93 +37,255 @@ $langs->load("accountancy"); $page = GETPOST("page"); $sortorder = GETPOST("sortorder"); $sortfield = GETPOST("sortfield"); -$limit = GETPOST('limit')?GETPOST('limit','int'):$conf->liste_limit; +$limit = GETPOST('limit') ? GETPOST('limit', 'int') : $conf->liste_limit; +$search_date_start = dol_mktime(0, 0, 0, GETPOST('date_startmonth', 'int'), GETPOST('date_startday', 'int'), GETPOST('date_startyear', 'int')); +$search_date_end = dol_mktime(0, 0, 0, GETPOST('date_endmonth', 'int'), GETPOST('date_endday', 'int'), GETPOST('date_endyear', 'int')); +$search_doc_type=GETPOST('search_doc_type','alpha'); +$search_doc_date=dol_mktime(0, 0, 0, GETPOST('doc_datemonth', 'int'), GETPOST('doc_dateday', 'int'), GETPOST('doc_dateyear', 'int')); +$search_doc_ref=GETPOST('search_doc_ref','alpha'); +$search_numero_compte=GETPOST('search_numero_compte','alpha'); +$search_numero_compte_start=GETPOST('search_numero_compte_start','alpha'); +if ($search_numero_compte_start==-1) { + $search_numero_compte_start=''; +} +$search_numero_compte_end=GETPOST('search_numero_compte_end','alpha'); +if ($search_numero_compte_end==-1) { + $search_numero_compte_end=''; +} +$search_code_tiers=GETPOST('search_code_tiers','alpha'); +$search_code_tiers_start=GETPOST('search_code_tiers_start','alpha'); +if ($search_code_tiers_start==-1) { + $search_code_tiers_start=''; +} +$search_code_tiers_end=GETPOST('search_code_tiers_end','alpha'); +if ($search_code_tiers_end==-1) { + $search_code_tiers_end=''; +} +$search_label_compte=GETPOST('search_label_compte','alpha'); +$search_sens=GETPOST('search_sens','alpha'); +$search_code_journal=GETPOST('search_code_journal','alpha'); + +$object = new BookKeeping($db); +$form = new Form($db); +$formventilation = new FormVentilation($db); // Filter -$year = GETPOST("year", 'int'); -if ($year == 0) { - $year_current = strftime("%Y", time()); - $year_start = $year_current; -} else { - $year_current = $year; - $year_start = $year; +if (empty($search_date_start)) { + $search_date_start = dol_mktime(0, 0, 0, 1, 1, dol_print_date(dol_now(), '%Y')); + $search_date_end = dol_mktime(0, 0, 0, 12, 31, dol_print_date(dol_now(), '%Y')); } - if ($sortorder == "") $sortorder = "ASC"; if ($sortfield == "") - $sortfield = "bk.rowid"; + $sortfield = "t.rowid"; $offset = $limit * $page; llxHeader('', $langs->trans("Bookkeeping")); -$textprevyear = '<a href="' . $_SERVER["PHP_SELF"] . '?year=' . ($year_current - 1) . '">' . img_previous() . '</a>'; -$textnextyear = ' <a href="' . $_SERVER["PHP_SELF"] . '?year=' . ($year_current + 1) . '">' . img_next() . '</a>'; +if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers +{ + $search_doc_type = ""; + $search_doc_date = ""; + $search_doc_ref = ""; + $search_numero_compte = ""; + $search_code_tiers = ""; + $search_label_compte = ""; + $search_sens = ""; + $search_code_journal = ""; +} + +$options = ''; +$filter = array (); +if (! empty($search_date_start)) { + $filter['t.doc_date>='] = $search_date_start; + $options .= '&date_startmonth=' . GETPOST('date_startmonth', 'int') . '&date_startday=' . GETPOST('date_startday', 'int') . '&date_startyear=' . GETPOST('date_startyear', 'int'); +} +if (! empty($search_date_end)) { + $filter['t.doc_date<='] = $search_date_end; + $options .= '&date_endmonth=' . GETPOST('date_endmonth', 'int') . '&date_endday=' . GETPOST('date_endday', 'int') . '&date_endyear=' . GETPOST('date_endyear', 'int'); +} +if (! empty($search_doc_type)) { + $filter['t.doc_type'] = $search_doc_type; + $options .= '&search_doc_type=' . $search_doc_type; +} +if (! empty($search_doc_date)) { + $filter['t.doc_date'] = $search_doc_date; + $options .= '&doc_datemonth=' . GETPOST('doc_datemonth', 'int') . '&doc_dateday=' . GETPOST('doc_dateday', 'int') . '&doc_dateyear=' . GETPOST('doc_dateyear', 'int'); +} +if (! empty($search_doc_ref)) { + $filter['t.doc_ref'] = $search_doc_ref; + $options .= '&search_doc_ref=' . $search_doc_ref; +} +if (! empty($search_numero_compte)) { + $filter['t.numero_compte'] = $search_numero_compte; + $options .= '&search_numero_compte=' . $search_numero_compte; +} +if (! empty($search_numero_compte_start)) { + $filter['t.numero_compte>='] = $search_numero_compte_start; + $options .= '&search_numero_compte_start=' . $search_numero_compte_start; +} +if (! empty($search_numero_compte_end)) { + $filter['t.numero_compte<='] = $search_numero_compte_end; + $options .= '&search_numero_compte_end=' . $search_numero_compte_end; +} +if (! empty($search_code_tiers)) { + $filter['t.code_tiers'] = $search_code_tiers; + $options .= '&search_code_tiers=' . $search_code_tiers; +} +if (! empty($search_code_tiers_start)) { + $filter['t.code_tiers>='] = $search_code_tiers_start; + $options .= '&search_code_tiers_start=' . $search_code_tiers_start; +} +if (! empty($search_code_tiers_end)) { + $filter['t.code_tiers<='] = $search_code_tiers_end; + $options .= '&search_code_tiers_end=' . $search_code_tiers_end; +} +if (! empty($search_label_compte)) { + $filter['t.label_compte'] = $search_label_compte; + $options .= '&search_label_compte=' . $search_label_compte; +} +if (! empty($search_sens)) { + $filter['t.sens'] = $search_sens; + $options .= '&search_sens=' . $search_sens; +} +if (! empty($search_code_journal)) { + $filter['t.code_journal'] = $search_code_journal; + $options .= '&search_code_journal=' . $search_code_journal; +} /* * Mode List */ -$sql = "SELECT bk.rowid, bk.doc_date, bk.doc_type, bk.doc_ref, bk.code_tiers, bk.numero_compte , bk.label_compte, bk.debit , bk.credit, bk.montant , bk.sens, bk.code_journal"; -$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping as bk"; -// $sql .= " WHERE bk.doc_date >= '".$db->idate(dol_get_first_day($y,1,false))."'"; -// $sql .= " AND bk.doc_date <= '".$db->idate(dol_get_last_day($y,12,false))."'"; -$sql .= " ORDER BY $sortfield $sortorder " . $db->plimit($conf->liste_limit + 1, $offset); - -dol_syslog('accountancy/bookkeeping/listbyyear.php:: $sql=' . $sql); -$resql = $db->query($sql); -if ($resql) { - $num = $db->num_rows($resql); - $i = 0; +$nbtotalofrecords = 0; +if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { + $nbtotalofrecords = $object->fetchAll($sortorder, $sortfield, 0, 0); + if ($nbtotalofrecords < 0) { + setEventMessages($object->error, $object->errors, 'errors'); + } +} + +$result = $object->fetchAll($sortorder, $sortfield, $limit, $offset, $filter); +if ($result < 0) { + setEventMessages($object->error, $object->errors, 'errors'); +} + +print_barre_liste($langs->trans("Bookkeeping") .' '. dol_print_date($search_date_start).'-'.dol_print_date($search_date_end), $page, $_SERVER['PHP_SELF'], $options, $sortfield, $sortorder, '', $result, $nbtotalofrecords); + +print '<form method="GET" id="searchFormList" action="' . $_SERVER["PHP_SELF"] . '">'; +print '<div class="liste_titre">'; +print $langs->trans('DateStart') . ': '; +print $form->select_date($search_date_start, 'date_start'); +print $langs->trans('DateEnd') . ': '; +print $form->select_date($search_date_end, 'date_end'); +print '</div>'; +print '<div class="liste_titre">'; +print $langs->trans('From').' '.$langs->trans('AccountAccounting') . ': '; +print $formventilation->select_account($search_numero_compte_start,'search_numero_compte_start', 1, array (), 1, 1,''); +print $langs->trans('To').' '.$langs->trans('AccountAccounting') . ': '; +print $formventilation->select_account($search_numero_compte_end,'search_numero_compte_end', 1, array (), 1, 1,''); +print '</div>'; +print '<div class="liste_titre">'; +print $langs->trans('From').' '.$langs->trans('ThirdPartyAccount') . ': '; +print $formventilation->select_auxaccount($search_code_tiers_start,'search_code_tiers_start', 1); +print $langs->trans('To').' '.$langs->trans('ThirdPartyAccount') . ': '; +print $formventilation->select_auxaccount($search_code_tiers_end,'searchcode_tiers_end', 1); +print '</div>'; +print "<table class=\"noborder\" width=\"100%\">"; + +print '<tr class="liste_titre">'; +print_liste_field_titre($langs->trans("NumPiece"), $_SERVER['PHP_SELF'], "t.piece_num", "", $options, "", $sortfield, $sortorder); +print_liste_field_titre($langs->trans("Doctype"), $_SERVER['PHP_SELF'], "t.doc_type", "", $options, "", $sortfield, $sortorder); +print_liste_field_titre($langs->trans("Date"), $_SERVER['PHP_SELF'], "t.doc_date", "", $options, "", $sortfield, $sortorder); +print_liste_field_titre($langs->trans("Docref"), $_SERVER['PHP_SELF'], "t.doc_ref", "", $options, "", $sortfield, $sortorder); +print_liste_field_titre($langs->trans("AccountAccounting"), $_SERVER['PHP_SELF'], "t.numero_compte", "", $options, "", $sortfield, $sortorder); +print_liste_field_titre($langs->trans("ThirdPartyAccount"), $_SERVER['PHP_SELF'], "t.code_tiers", "", $options, "", $sortfield, $sortorder); +print_liste_field_titre($langs->trans("Label"), $_SERVER['PHP_SELF'], "t.label_compte", "", $options, "", $sortfield, $sortorder); +print_liste_field_titre($langs->trans("Debit"), $_SERVER['PHP_SELF'], "t.debit", "", $options, "", $sortfield, $sortorder); +print_liste_field_titre($langs->trans("Credit"), $_SERVER['PHP_SELF'], "t.credit", "", $options, "", $sortfield, $sortorder); +print_liste_field_titre($langs->trans("Amount"), $_SERVER['PHP_SELF'], "t.montant", "", $options, "", $sortfield, $sortorder); +print_liste_field_titre($langs->trans("Sens"), $_SERVER['PHP_SELF'], "t.sens", "", $options, "", $sortfield, $sortorder); +print_liste_field_titre($langs->trans("Codejournal"), $_SERVER['PHP_SELF'], "t.code_journal", "", $options, "", $sortfield, $sortorder); +print '<th class="liste_titre" align="right"><input type="image" class="liste_titre" name="button_search" src="' . img_picto($langs->trans("Search"), 'search.png', '', '', 1) . '" value="' . dol_escape_htmltag($langs->trans("Search")) . '" title="' . dol_escape_htmltag($langs->trans("Search")) . '">'; +print '<input type="image" class="liste_titre" name="button_removefilter" src="' . img_picto($langs->trans("Search"), 'searchclear.png', '', '', 1) . '" value="' . dol_escape_htmltag($langs->trans("RemoveFilter")) . '" title="' . dol_escape_htmltag($langs->trans("RemoveFilter")) . '"></td>'; +print "</tr>\n"; +print '<tr class="liste_titre">'; + +print '<td class="liste_titre">'; +print '<input type="text" size=4 class="flat" name="search_piece_num" value="'.$search_piece_num.'"/>'; +print '</td>'; + +print '<td class="liste_titre">'; +print '<input type="text" size=7 class="flat" name="search_doc_type" value="'.$search_doc_type.'"/>'; +print '</td>'; + +print '<td class="liste_titre">'; +print $form->select_date($search_doc_date,'doc_date',0, 0, 1); +print '</td>'; + +print '<td class="liste_titre">'; +print '<input type="text" size=6 class="flat" name="search_doc_ref" value="'.$search_doc_ref.'"/>'; +print '</td>'; + +print '<td class="liste_titre">'; +print '<input type="text" size=6 class="flat" name="search_numero_compte" value="'.$search_numero_compte.'"/>'; +print '</td>'; + +print '<td class="liste_titre">'; +print '<input type="text" size=6 class="flat" name="search_code_tiers" value="'.$search_code_tiers.'"/>'; +print '</td>'; + +print '<td class="liste_titre">'; +print '<input type="text" size=6 class="flat" name="search_label_compte" value="'.$search_label_compte.'"/>'; +print '</td>'; + +print '<td class="liste_titre">'; +print '</td>'; + +print '<td class="liste_titre">'; +print '</td>'; + +print '<td class="liste_titre">'; +print '</td>'; + +print '<td class="liste_titre">'; +print '<input type="text" size=2 class="flat" name="search_sens" value="'.$search_sens.'"/>'; +print '</td>'; + +print '<td class="liste_titre">'; +print '<input type="text" size=3 class="flat" name="search_code_journal" value="'.$search_code_journal.'"/>'; +print '</td>'; + +print '<td class="liste_titre">'; +print '</td>'; + +print "</tr>\n"; + +$var = True; + +foreach ( $object->lines as $line ) { + $var = ! $var; - print_barre_liste($langs->trans("Bookkeeping") . " $textprevyear " . $langs->trans("Year") . " $year_start $textnextyear", $page, $_SERVER['PHP_SELF'], "", $sortfield, $sortorder, '', $num); - print "<table class=\"noborder\" width=\"100%\">"; + print "<tr $bc[$var]>"; - print '<tr class="liste_titre">'; - print_liste_field_titre($langs->trans("Doctype"), $_SERVER['PHP_SELF'], "bk.doc_type", "", "", "", $sortfield, $sortorder); - print_liste_field_titre($langs->trans("Date"), $_SERVER['PHP_SELF'], "bk.doc_date", "", "", "", $sortfield, $sortorder); - print_liste_field_titre($langs->trans("Docref"), $_SERVER['PHP_SELF'], "bk.doc_ref", "", "", "", $sortfield, $sortorder); - print_liste_field_titre($langs->trans("AccountAccounting"), $_SERVER['PHP_SELF'], "bk.numero_compte", "", "", "", $sortfield, $sortorder); - print_liste_field_titre($langs->trans("ThirdPartyAccount"), $_SERVER['PHP_SELF'], "bk.code_tiers", "", "", "", $sortfield, $sortorder); - print_liste_field_titre($langs->trans("Label"), $_SERVER['PHP_SELF'], "bk_label_compte", "", "", "", $sortfield, $sortorder); - print_liste_field_titre($langs->trans("Debit"), $_SERVER['PHP_SELF'], "bk.debit", "", "", "", $sortfield, $sortorder); - print_liste_field_titre($langs->trans("Credit"), $_SERVER['PHP_SELF'], "bk.credit", "", "", "", $sortfield, $sortorder); - print_liste_field_titre($langs->trans("Amount"), $_SERVER['PHP_SELF'], "bk.montant", "", "", "", $sortfield, $sortorder); - print_liste_field_titre($langs->trans("Sens"), $_SERVER['PHP_SELF'], "bk.sens", "", "", "", $sortfield, $sortorder); - print_liste_field_titre($langs->trans("Codejournal"), $_SERVER['PHP_SELF'], "bk.code_journal", "", "", "", $sortfield, $sortorder); - print_liste_field_titre(''); + print '<td>' . $line->piece_num . '</td>' . "\n"; + print '<td>' . $line->doc_type . '</td>' . "\n"; + print '<td>' . dol_print_date($line->doc_date) . '</td>'; + print '<td>' . $line->doc_ref . '</td>'; + print '<td>' . length_accountg($line->numero_compte) . '</td>'; + print '<td>' . length_accounta($line->code_tiers) . '</td>'; + print '<td>' . $line->label_compte . '</td>'; + print '<td align="right">' . price($line->debit) . '</td>'; + print '<td align="right">' . price($line->credit) . '</td>'; + print '<td align="right">' . price($line->montant) . '</td>'; + print '<td>' . $line->sens . '</td>'; + print '<td>' . $line->code_journal . '</td>'; + print '<td><a href="./card.php?action=update&piece_num=' . $line->piece_num . '">' . img_edit() . '</a></td>'; print "</tr>\n"; - - $var = True; - - while ( $i < min($num, $conf->liste_limit) ) { - $obj = $db->fetch_object($resql); - $var = ! $var; - - print "<tr $bc[$var]>"; - - print '<td>' . $obj->doc_type . '</td>' . "\n"; - print '<td>' . dol_print_date($db->jdate($obj->doc_date)) . '</td>'; - print '<td>' . $obj->doc_ref . '</td>'; - print '<td>' . length_accountg($obj->numero_compte) . '</td>'; - print '<td>' . length_accounta($obj->code_tiers) . '</td>'; - print '<td>' . $obj->label_compte . '</td>'; - print '<td align="right">' . price($obj->debit) . '</td>'; - print '<td align="right">' . price($obj->credit) . '</td>'; - print '<td align="right">' . price($obj->montant) . '</td>'; - print '<td>' . $obj->sens . '</td>'; - print '<td>' . $obj->code_journal . '</td>'; - print '<td><a href="./card.php?action=update&id=' . $obj->rowid . '">' . img_edit() . '</a></td>'; - print "</tr>\n"; - - $i ++; - } - print "</table>"; - $db->free($resql); -} else { - dol_print_error($db); } +print "</table>"; +print '</form>'; llxFooter(); $db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/class/accountingaccount.class.php b/htdocs/accountancy/class/accountingaccount.class.php index 9277bcd9a70e01bdb082c0b5be3296c0caf25839..856306c33048fb3e33e8a7722b54018524d51596 100644 --- a/htdocs/accountancy/class/accountingaccount.class.php +++ b/htdocs/accountancy/class/accountingaccount.class.php @@ -30,6 +30,11 @@ */ class AccountingAccount extends CommonObject { + var $db; + var $error; + var $errors; + + var $id; var $rowid; var $datec; // Creation date diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index d3801b4a4d166f5c5cf8bd3dc86529539cc0fdfe..58c13686d1ca5dcae941e9e3f034290cd74b98ae 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -1,8 +1,8 @@ <?php -/* Copyright (C) 2004-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org> - * Copyright (C) 2013-2014 Olivier Geffroy <jeff@jeffinfo.com> - * Copyright (C) 2013-2015 Alexandre Spangaro <alexandre.spangaro@gmail.com> - * Copyright (C) 2013-2014 Florian Henry <florian.henry@open-concept.pro> +/* Copyright (C) 2007-2012 Laurent Destailleur <eldy@users.sourceforge.net> + * Copyright (C) 2014 Juanjo Menent <jmenent@2byte.es> + * Copyright (C) 2015 Florian Henry <florian.henry@open-concept.pro> + * Copyright (C) 2015 Raphaƫl Doursenaud <rdoursenaud@gpcsolutions.fr> * * 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 @@ -19,245 +19,188 @@ */ /** - * \file htdocs/accountancy/class/bookkeeping.class.php - * \ingroup Accounting Expert - * \brief File of class to manage book keeping + * \file accountancy/bookkeeping.class.php + * \ingroup accountancy + * \brief This file is an example for a CRUD class file (Create/Read/Update/Delete) + * Put some comments here */ +// Put here all includes required by your class file +require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php'; +// require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php'; +// require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php'; + /** - * Class to manage accountancy book keeping + * Class Accountingbookkeeping + * + * Put here description of your class */ class BookKeeping extends CommonObject { - var $doc_date; - var $doc_type; - var $doc_ref; - var $date_create; - var $fk_doc; - var $fk_docdet; - var $code_tiers; - var $numero_compte; - var $label_compte; - var $debit; - var $credit; - var $montant; - var $sens; - var $fk_user_author; - var $code_journal; - var $piece_num; - var $linesexport = array (); - var $linesmvt = array (); - - /** - * Constructor - * - * @param DoliDB $db Database handler - */ - function __construct($db) - { - $this->db = $db; - } - /** - * Load a line into memory from database - * - * @param int $id id of line to get - * @return int <0 if KO, >0 if OK - */ - function fetch($id) - { - $sql = "SELECT rowid, doc_date, doc_type,"; - $sql .= " doc_ref, fk_doc, fk_docdet, code_tiers, "; - $sql .= " numero_compte, label_compte, debit, credit, "; - $sql .= " montant, sens, fk_user_author, import_key, code_journal, piece_num "; - $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping "; - $sql .= " WHERE rowid = '" . $id . "'"; - - dol_syslog(get_class($this) . "fetch sql=" . $sql, LOG_DEBUG); - $result = $this->db->query($sql); - if ($result) { - $obj = $this->db->fetch_object($result); - - $this->id = $obj->rowid; - - $this->doc_date = $this->db->jdate($obj->doc_date); - $this->doc_type = $obj->doc_type; - $this->doc_ref = $obj->doc_ref; - $this->fk_doc = $obj->fk_doc; - $this->fk_docdet = $obj->fk_docdet; - $this->code_tiers = $obj->code_tiers; - $this->numero_compte = $obj->numero_compte; - $this->label_compte = $obj->label_compte; - $this->debit = $obj->debit; - $this->credit = $obj->credit; - $this->montant = $obj->montant; - $this->sens = $obj->sens; - $this->code_journal = $obj->code_journal; - $this->piece_num = $obj->piece_num; - } - else - { - $this->error = "Error " . $this->db->lasterror(); - dol_syslog(get_class($this) . "::fetch " . $this->error, LOG_ERR); - return - 1; - } - - return 1; - } - + * + * @var string Error code (or message) + * @deprecated + * + * @see Accountingbookkeeping::errors + */ + public $error; /** - * Load an accounting document into memory from database - * - * @param int $piecenum Accounting document to get - * @return int <0 if KO, >0 if OK - */ - function fetch_per_mvt($piecenum) - { - $sql = "SELECT piece_num,doc_date,code_journal,doc_ref,doc_type"; - $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping"; - $sql .= " WHERE piece_num = '" . $piecenum . "'"; - - dol_syslog(get_class($this) . "fetch_per_mvt sql=" . $sql, LOG_DEBUG); - $result = $this->db->query($sql); - if ($result) { - $obj = $this->db->fetch_object($result); - - $this->piece_num = $obj->piece_num; - $this->code_journal = $obj->code_journal; - $this->doc_date = $this->db->jdate($obj->doc_date); - $this->doc_ref = $obj->doc_ref; - $this->doc_type = $obj->doc_type; - } else { - $this->error = "Error " . $this->db->lasterror(); - dol_syslog(get_class($this) . "::fetch_per_mvt " . $this->error, LOG_ERR); - return - 1; - } - - return 1; - } - + * + * @var string[] Error codes (or messages) + */ + public $errors = array (); /** - * Return next number movement - * - * @return string Last number - */ - function getNextNumMvt() { - $sql = "SELECT MAX(piece_num)+1 as max FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping"; - - dol_syslog(get_class($this) . "getNextNumMvt sql=" . $sql, LOG_DEBUG); - $result = $this->db->query($sql); - - if ($result) - { - $obj = $this->db->fetch_object($result); - - return $obj->max; - } - else - { - $this->error = "Error " . $this->db->lasterror(); - dol_syslog(get_class($this) . "::getNextNumMvt " . $this->error, LOG_ERR); - return - 1; - } - } - + * + * @var string Id to identify managed objects + */ + public $element = 'accountingbookkeeping'; /** - * Load all informations of accountancy document - * - * @param int $piecenum id of line to get - * @return int <0 if KO, >0 if OK - */ - function fetch_all_per_mvt($piecenum) - { - $sql = "SELECT rowid, doc_date, doc_type,"; - $sql .= " doc_ref, fk_doc, fk_docdet, code_tiers,"; - $sql .= " numero_compte, label_compte, debit, credit,"; - $sql .= " montant, sens, fk_user_author, import_key, code_journal, piece_num"; - $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping "; - $sql .= " WHERE piece_num = '" . $piecenum . "'"; - - dol_syslog(get_class($this) . "fetch_all_per_mvt sql=" . $sql, LOG_DEBUG); - $result = $this->db->query($sql); - if ($result) { - - while ( $obj = $this->db->fetch_object($result) ) { - - $line = new BookKeepingLine(); - - $line->id = $obj->rowid; - - $line->doc_date = $this->db->jdate($obj->doc_date); - $line->doc_type = $obj->doc_type; - $line->doc_ref = $obj->doc_ref; - $line->fk_doc = $obj->fk_doc; - $line->fk_docdet = $obj->fk_docdet; - $line->code_tiers = $obj->code_tiers; - $line->numero_compte = $obj->numero_compte; - $line->label_compte = $obj->label_compte; - $line->debit = $obj->debit; - $line->credit = $obj->credit; - $line->montant = $obj->montant; - $line->sens = $obj->sens; - $line->code_journal = $obj->code_journal; - $line->piece_num = $obj->piece_num; - - $this->linesmvt[] = $line; - } - } else { - $this->error = "Error " . $this->db->lasterror(); - dol_syslog(get_class($this) . "::fetch_per_mvt " . $this->error, LOG_ERR); - return - 1; - } - + * + * @var string Name of table without prefix where object is stored + */ + public $table_element = 'accounting_bookkeeping'; + + /** + * + * @var BookKeepingLine[] Lines + */ + public $lines = array (); + + /** + * + * @var int ID + */ + public $id; + /** + */ + public $doc_date = ''; + public $doc_type; + public $doc_ref; + public $fk_doc; + public $fk_docdet; + public $code_tiers; + public $numero_compte; + public $label_compte; + public $debit; + public $credit; + public $montant; + public $sens; + public $fk_user_author; + public $import_key; + public $code_journal; + public $piece_num; + + /** + */ + + /** + * Constructor + * + * @param DoliDb $db Database handler + */ + public function __construct(DoliDB $db) { + $this->db = $db; return 1; } - + /** - * Insert line into bookkeeping + * Create object into database * - * @param User $user User who inserted operation - * @return int <0 KO >0 OK + * @param User $user User that creates + * @param bool $notrigger false=launch triggers after, true=disable triggers + * + * @return int <0 if KO, Id of created object if OK */ - function create($user='') - { - global $conf; - + public function create(User $user, $notrigger = false) { + dol_syslog(__METHOD__, LOG_DEBUG); + + $error = 0; + + // Clean parameters + + if (isset($this->doc_type)) { + $this->doc_type = trim($this->doc_type); + } + if (isset($this->doc_ref)) { + $this->doc_ref = trim($this->doc_ref); + } + if (isset($this->fk_doc)) { + $this->fk_doc = trim($this->fk_doc); + } + if (isset($this->fk_docdet)) { + $this->fk_docdet = trim($this->fk_docdet); + } + if (isset($this->code_tiers)) { + $this->code_tiers = trim($this->code_tiers); + } + if (isset($this->numero_compte)) { + $this->numero_compte = trim($this->numero_compte); + } + if (isset($this->label_compte)) { + $this->label_compte = trim($this->label_compte); + } + if (isset($this->debit)) { + $this->debit = trim($this->debit); + } + if (isset($this->credit)) { + $this->credit = trim($this->credit); + } + if (isset($this->montant)) { + $this->montant = trim($this->montant); + } + if (isset($this->sens)) { + $this->sens = trim($this->sens); + } + if (isset($this->fk_user_author)) { + $this->fk_user_author = trim($this->fk_user_author); + } + if (isset($this->import_key)) { + $this->import_key = trim($this->import_key); + } + if (isset($this->code_journal)) { + $this->code_journal = trim($this->code_journal); + } + if (isset($this->piece_num)) { + $this->piece_num = trim($this->piece_num); + } + + $this->db->begin(); + $this->piece_num = 0; - + // first check if line not yet in bookkeeping $sql = "SELECT count(*)"; - $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping "; + $sql .= " FROM " . MAIN_DB_PREFIX . $this->table_element; $sql .= " WHERE doc_type = '" . $this->doc_type . "'"; $sql .= " AND fk_docdet = " . $this->fk_docdet; $sql .= " AND numero_compte = '" . $this->numero_compte . "'"; - + dol_syslog(get_class($this) . ":: create sql=" . $sql, LOG_DEBUG); $resql = $this->db->query($sql); - + if ($resql) { $row = $this->db->fetch_array($resql); if ($row[0] == 0) { - + // Determine piece_num $sqlnum = "SELECT piece_num"; - $sqlnum .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping "; + $sqlnum .= " FROM " . MAIN_DB_PREFIX . $this->table_element; $sqlnum .= " WHERE doc_type = '" . $this->doc_type . "'"; $sqlnum .= " AND fk_docdet = '" . $this->fk_docdet . "'"; $sqlnum .= " AND doc_ref = '" . $this->doc_ref . "'"; - + dol_syslog(get_class($this) . ":: create sqlnum=" . $sqlnum, LOG_DEBUG); $resqlnum = $this->db->query($sqlnum); - if ($resqlnum) - { + if ($resqlnum) { $objnum = $this->db->fetch_object($resqlnum); $this->piece_num = $objnum->piece_num; } dol_syslog(get_class($this) . ":: create this->piece_num=" . $this->piece_num, LOG_DEBUG); - if (empty($this->piece_num)) - { + if (empty($this->piece_num)) { $sqlnum = "SELECT MAX(piece_num)+1 as maxpiecenum"; - $sqlnum .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping "; - + $sqlnum .= " FROM " . MAIN_DB_PREFIX . $this->table_element; + dol_syslog(get_class($this) . ":: create sqlnum=" . $sqlnum, LOG_DEBUG); $resqlnum = $this->db->query($sqlnum); if ($resqlnum) { @@ -269,13 +212,13 @@ class BookKeeping extends CommonObject if (empty($this->piece_num)) { $this->piece_num = 1; } - + $now = dol_now(); if (empty($this->date_create)) { $this->date_create = $now; } - - $sql = "INSERT INTO " . MAIN_DB_PREFIX . "accounting_bookkeeping ("; + + $sql = "INSERT INTO " . MAIN_DB_PREFIX . $this->table_element." ("; $sql .= "doc_date"; $sql .= ", doc_type"; @@ -293,7 +236,7 @@ class BookKeeping extends CommonObject $sql .= ", import_key"; $sql .= ", code_journal"; $sql .= ", piece_num"; - + $sql .= ") VALUES ("; $sql .= "'" . $this->doc_date . "'"; @@ -308,57 +251,583 @@ class BookKeeping extends CommonObject $sql .= "," . $this->credit; $sql .= "," . $this->montant; $sql .= ",'" . $this->sens . "'"; - $sql .= ",'" . $this->fk_user_author."'"; + $sql .= ",'" . $this->fk_user_author . "'"; $sql .= ",'" . $this->date_create . "'"; $sql .= ",'" . $this->code_journal . "'"; $sql .= "," . $this->piece_num; $sql .= ")"; - + dol_syslog(get_class($this) . ":: create sql=" . $sql, LOG_DEBUG); $resql = $this->db->query($sql); if ($resql) { - $id = $this->db->last_insert_id(MAIN_DB_PREFIX . "accounting_bookkeeping"); - + $id = $this->db->last_insert_id(MAIN_DB_PREFIX . $this->table_element); + if ($id > 0) { $this->id = $id; $result = 0; } else { $result = - 2; - dol_syslog("BookKeeping::Create Error $result lecture ID"); + $error ++; + $this->errors[] = 'Error Create Error ' . $result . ' lecture ID'; + dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); } } else { $result = - 1; - dol_syslog("BookKeeping::Create Error $result INSERT Mysql"); + $error ++; + $this->errors[] = 'Error ' . $this->db->lasterror(); + dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); } } else { $result = - 3; - dol_syslog("BookKeeping::Create Error $result SELECT Mysql"); + $error ++; + $this->errors[] = 'Error ' . $this->db->lasterror(); + dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); + } + } else { + $result = - 5; + $error ++; + $this->errors[] = 'Error ' . $this->db->lasterror(); + dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); + } + + + if (! $error) { + + if (! $notrigger) { + // Uncomment this and change MYOBJECT to your own tag if you + // want this action to call a trigger. + + // // Call triggers + // $result=$this->call_trigger('MYOBJECT_CREATE',$user); + // if ($result < 0) $error++; + // // End call triggers + } + } + + // Commit or rollback + if ($error) { + $this->db->rollback(); + + return - 1 * $error; + } else { + $this->db->commit(); + + return $result; + } + } + + /** + * Create object into database + * + * @param User $user User that creates + * @param bool $notrigger false=launch triggers after, true=disable triggers + * + * @return int <0 if KO, Id of created object if OK + */ + public function createStd(User $user, $notrigger = false) + { + dol_syslog(__METHOD__, LOG_DEBUG); + + $error = 0; + + // Clean parameters + + if (isset($this->doc_type)) { + $this->doc_type = trim($this->doc_type); + } + if (isset($this->doc_ref)) { + $this->doc_ref = trim($this->doc_ref); + } + if (isset($this->fk_doc)) { + $this->fk_doc = trim($this->fk_doc); + } + if (isset($this->fk_docdet)) { + $this->fk_docdet = trim($this->fk_docdet); + } + if (isset($this->code_tiers)) { + $this->code_tiers = trim($this->code_tiers); + } + if (isset($this->numero_compte)) { + $this->numero_compte = trim($this->numero_compte); + } + if (isset($this->label_compte)) { + $this->label_compte = trim($this->label_compte); + } + if (isset($this->debit)) { + $this->debit = trim($this->debit); + } + if (isset($this->credit)) { + $this->credit = trim($this->credit); + } + if (isset($this->montant)) { + $this->montant = trim($this->montant); + } + if (isset($this->sens)) { + $this->sens = trim($this->sens); + } + if (isset($this->fk_user_author)) { + $this->fk_user_author = trim($this->fk_user_author); + } + if (isset($this->import_key)) { + $this->import_key = trim($this->import_key); + } + if (isset($this->code_journal)) { + $this->code_journal = trim($this->code_journal); + } + if (isset($this->piece_num)) { + $this->piece_num = trim($this->piece_num); + } + + + + // Check parameters + // Put here code to add control on parameters values + + // Insert request + $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . '('; + + $sql.= 'doc_date,'; + $sql.= 'doc_type,'; + $sql.= 'doc_ref,'; + $sql.= 'fk_doc,'; + $sql.= 'fk_docdet,'; + $sql.= 'code_tiers,'; + $sql.= 'numero_compte,'; + $sql.= 'label_compte,'; + $sql.= 'debit,'; + $sql.= 'credit,'; + $sql.= 'montant,'; + $sql.= 'sens,'; + $sql.= 'fk_user_author,'; + $sql.= 'import_key,'; + $sql.= 'code_journal,'; + $sql.= 'piece_num'; + + + $sql .= ') VALUES ('; + + $sql .= ' '.(! isset($this->doc_date) || dol_strlen($this->doc_date)==0?'NULL':"'".$this->db->idate($this->doc_date)."'").','; + $sql .= ' '.(! isset($this->doc_type)?'NULL':"'".$this->db->escape($this->doc_type)."'").','; + $sql .= ' '.(! isset($this->doc_ref)?'NULL':"'".$this->db->escape($this->doc_ref)."'").','; + $sql .= ' '.(empty($this->fk_doc)?'0':$this->fk_doc).','; + $sql .= ' '.(empty($this->fk_docdet)?'0':$this->fk_docdet).','; + $sql .= ' '.(! isset($this->code_tiers)?'NULL':"'".$this->db->escape($this->code_tiers)."'").','; + $sql .= ' '.(! isset($this->numero_compte)?'NULL':"'".$this->db->escape($this->numero_compte)."'").','; + $sql .= ' '.(! isset($this->label_compte)?'NULL':"'".$this->db->escape($this->label_compte)."'").','; + $sql .= ' '.(! isset($this->debit)?'NULL':"'".$this->debit."'").','; + $sql .= ' '.(! isset($this->credit)?'NULL':"'".$this->credit."'").','; + $sql .= ' '.(! isset($this->montant)?'NULL':"'".$this->montant."'").','; + $sql .= ' '.(! isset($this->sens)?'NULL':"'".$this->db->escape($this->sens)."'").','; + $sql .= ' '.$user->id.','; + $sql .= ' '.(! isset($this->import_key)?'NULL':"'".$this->db->escape($this->import_key)."'").','; + $sql .= ' '.(! isset($this->code_journal)?'NULL':"'".$this->db->escape($this->code_journal)."'").','; + $sql .= ' '.(! isset($this->piece_num)?'NULL':$this->piece_num); + + + $sql .= ')'; + + $this->db->begin(); + + $resql = $this->db->query($sql); + if (!$resql) { + $error ++; + $this->errors[] = 'Error ' . $this->db->lasterror(); + dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); + } + + if (!$error) { + $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . $this->table_element); + + if (!$notrigger) { + // Uncomment this and change MYOBJECT to your own tag if you + // want this action to call a trigger. + + //// Call triggers + //$result=$this->call_trigger('MYOBJECT_CREATE',$user); + //if ($result < 0) $error++; + //// End call triggers + } + } + + // Commit or rollback + if ($error) { + $this->db->rollback(); + + return - 1 * $error; + } else { + $this->db->commit(); + + return $this->id; + } + } + + /** + * Load object in memory from the database + * + * @param int $id Id object + * @param string $ref Ref + * + * @return int <0 if KO, 0 if not found, >0 if OK + */ + public function fetch($id, $ref = null) { + dol_syslog(__METHOD__, LOG_DEBUG); + + $sql = 'SELECT'; + $sql .= ' t.rowid,'; + + $sql .= " t.doc_date,"; + $sql .= " t.doc_type,"; + $sql .= " t.doc_ref,"; + $sql .= " t.fk_doc,"; + $sql .= " t.fk_docdet,"; + $sql .= " t.code_tiers,"; + $sql .= " t.numero_compte,"; + $sql .= " t.label_compte,"; + $sql .= " t.debit,"; + $sql .= " t.credit,"; + $sql .= " t.montant,"; + $sql .= " t.sens,"; + $sql .= " t.fk_user_author,"; + $sql .= " t.import_key,"; + $sql .= " t.code_journal,"; + $sql .= " t.piece_num"; + + $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . ' as t'; + if (null !== $ref) { + $sql .= ' WHERE t.ref = ' . '\'' . $ref . '\''; + } else { + $sql .= ' WHERE t.rowid = ' . $id; + } + + $resql = $this->db->query($sql); + if ($resql) { + $numrows = $this->db->num_rows($resql); + if ($numrows) { + $obj = $this->db->fetch_object($resql); + + $this->id = $obj->rowid; + + $this->doc_date = $this->db->jdate($obj->doc_date); + $this->doc_type = $obj->doc_type; + $this->doc_ref = $obj->doc_ref; + $this->fk_doc = $obj->fk_doc; + $this->fk_docdet = $obj->fk_docdet; + $this->code_tiers = $obj->code_tiers; + $this->numero_compte = $obj->numero_compte; + $this->label_compte = $obj->label_compte; + $this->debit = $obj->debit; + $this->credit = $obj->credit; + $this->montant = $obj->montant; + $this->sens = $obj->sens; + $this->fk_user_author = $obj->fk_user_author; + $this->import_key = $obj->import_key; + $this->code_journal = $obj->code_journal; + $this->piece_num = $obj->piece_num; + } + $this->db->free($resql); + + if ($numrows) { + return 1; + } else { + return 0; + } + } else { + $this->errors[] = 'Error ' . $this->db->lasterror(); + dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); + + return - 1; + } + } + + /** + * Load object in memory from the database + * + * @param string $sortorder Sort Order + * @param string $sortfield Sort field + * @param int $limit offset limit + * @param int $offset offset limit + * @param array $filter filter array + * @param string $filtermode filter mode (AND or OR) + * + * @return int <0 if KO, >0 if OK + */ + public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') { + dol_syslog(__METHOD__, LOG_DEBUG); + + $sql = 'SELECT'; + $sql .= ' t.rowid,'; + + $sql .= " t.doc_date,"; + $sql .= " t.doc_type,"; + $sql .= " t.doc_ref,"; + $sql .= " t.fk_doc,"; + $sql .= " t.fk_docdet,"; + $sql .= " t.code_tiers,"; + $sql .= " t.numero_compte,"; + $sql .= " t.label_compte,"; + $sql .= " t.debit,"; + $sql .= " t.credit,"; + $sql .= " t.montant,"; + $sql .= " t.sens,"; + $sql .= " t.fk_user_author,"; + $sql .= " t.import_key,"; + $sql .= " t.code_journal,"; + $sql .= " t.piece_num"; + + $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . ' as t'; + + // Manage filter + $sqlwhere = array (); + if (count($filter) > 0) { + foreach ( $filter as $key => $value ) { + if ($key=='t.doc_date') { + $sqlwhere[] = $key . '=\'' . $this->db->idate($value) . '\''; + } elseif($key=='t.doc_date>=' || $key=='t.doc_date<=') { + $sqlwhere[] = $key . '\'' . $this->db->idate($value) . '\''; + } elseif($key=='t.fk_doc' || $key=='t.fk_docdet' ||$key=='t.piece_num') { + $sqlwhere[] = $key . '=' . $value; + } else { + $sqlwhere[] = $key . ' LIKE \'%' . $this->db->escape($value) . '%\''; + } + } + } + + if (count($sqlwhere) > 0) { + $sql .= ' WHERE ' . implode(' ' . $filtermode . ' ', $sqlwhere); + } + + if (! empty($sortfield)) { + $sql .= $this->db->order($sortfield, $sortorder); + } + if (! empty($limit)) { + $sql .= ' ' . $this->db->plimit($limit + 1, $offset); + } + $this->lines = array (); + + $resql = $this->db->query($sql); + if ($resql) { + $num = $this->db->num_rows($resql); + + while ( $obj = $this->db->fetch_object($resql) ) { + $line = new BookKeepingLine(); + + $line->id = $obj->rowid; + + $line->doc_date = $this->db->jdate($obj->doc_date); + $line->doc_type = $obj->doc_type; + $line->doc_ref = $obj->doc_ref; + $line->fk_doc = $obj->fk_doc; + $line->fk_docdet = $obj->fk_docdet; + $line->code_tiers = $obj->code_tiers; + $line->numero_compte = $obj->numero_compte; + $line->label_compte = $obj->label_compte; + $line->debit = $obj->debit; + $line->credit = $obj->credit; + $line->montant = $obj->montant; + $line->sens = $obj->sens; + $line->fk_user_author = $obj->fk_user_author; + $line->import_key = $obj->import_key; + $line->code_journal = $obj->code_journal; + $line->piece_num = $obj->piece_num; + + $this->lines[] = $line; + } + $this->db->free($resql); + + return $num; + } else { + $this->errors[] = 'Error ' . $this->db->lasterror(); + dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); + + return - 1; + } + } + + /** + * Update object into database + * + * @param User $user User that modifies + * @param bool $notrigger false=launch triggers after, true=disable triggers + * + * @return int <0 if KO, >0 if OK + */ + public function update(User $user, $notrigger = false) { + $error = 0; + + dol_syslog(__METHOD__, LOG_DEBUG); + + // Clean parameters + + if (isset($this->doc_type)) { + $this->doc_type = trim($this->doc_type); + } + if (isset($this->doc_ref)) { + $this->doc_ref = trim($this->doc_ref); + } + if (isset($this->fk_doc)) { + $this->fk_doc = trim($this->fk_doc); + } + if (isset($this->fk_docdet)) { + $this->fk_docdet = trim($this->fk_docdet); + } + if (isset($this->code_tiers)) { + $this->code_tiers = trim($this->code_tiers); + } + if (isset($this->numero_compte)) { + $this->numero_compte = trim($this->numero_compte); + } + if (isset($this->label_compte)) { + $this->label_compte = trim($this->label_compte); + } + if (isset($this->debit)) { + $this->debit = trim($this->debit); + } + if (isset($this->credit)) { + $this->credit = trim($this->credit); + } + if (isset($this->montant)) { + $this->montant = trim($this->montant); + } + if (isset($this->sens)) { + $this->sens = trim($this->sens); + } + if (isset($this->fk_user_author)) { + $this->fk_user_author = trim($this->fk_user_author); + } + if (isset($this->import_key)) { + $this->import_key = trim($this->import_key); + } + if (isset($this->code_journal)) { + $this->code_journal = trim($this->code_journal); + } + if (isset($this->piece_num)) { + $this->piece_num = trim($this->piece_num); + } + + // Check parameters + // Put here code to add a control on parameters values + + // Update request + $sql = 'UPDATE ' . MAIN_DB_PREFIX . $this->table_element . ' SET'; + + $sql .= ' doc_date = ' . (! isset($this->doc_date) || dol_strlen($this->doc_date) != 0 ? "'" . $this->db->idate($this->doc_date) . "'" : 'null') . ','; + $sql .= ' doc_type = ' . (isset($this->doc_type) ? "'" . $this->db->escape($this->doc_type) . "'" : "null") . ','; + $sql .= ' doc_ref = ' . (isset($this->doc_ref) ? "'" . $this->db->escape($this->doc_ref) . "'" : "null") . ','; + $sql .= ' fk_doc = ' . (isset($this->fk_doc) ? $this->fk_doc : "null") . ','; + $sql .= ' fk_docdet = ' . (isset($this->fk_docdet) ? $this->fk_docdet : "null") . ','; + $sql .= ' code_tiers = ' . (isset($this->code_tiers) ? "'" . $this->db->escape($this->code_tiers) . "'" : "null") . ','; + $sql .= ' numero_compte = ' . (isset($this->numero_compte) ? "'" . $this->db->escape($this->numero_compte) . "'" : "null") . ','; + $sql .= ' label_compte = ' . (isset($this->label_compte) ? "'" . $this->db->escape($this->label_compte) . "'" : "null") . ','; + $sql .= ' debit = ' . (isset($this->debit) ? $this->debit : "null") . ','; + $sql .= ' credit = ' . (isset($this->credit) ? $this->credit : "null") . ','; + $sql .= ' montant = ' . (isset($this->montant) ? $this->montant : "null") . ','; + $sql .= ' sens = ' . (isset($this->sens) ? "'" . $this->db->escape($this->sens) . "'" : "null") . ','; + $sql .= ' fk_user_author = ' . (isset($this->fk_user_author) ? $this->fk_user_author : "null") . ','; + $sql .= ' import_key = ' . (isset($this->import_key) ? "'" . $this->db->escape($this->import_key) . "'" : "null") . ','; + $sql .= ' code_journal = ' . (isset($this->code_journal) ? "'" . $this->db->escape($this->code_journal) . "'" : "null") . ','; + $sql .= ' piece_num = ' . (isset($this->piece_num) ? $this->piece_num : "null"); + + $sql .= ' WHERE rowid=' . $this->id; + + $this->db->begin(); + + $resql = $this->db->query($sql); + if (! $resql) { + $error ++; + $this->errors[] = 'Error ' . $this->db->lasterror(); + dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); + } + + if (! $error && ! $notrigger) { + // Uncomment this and change MYOBJECT to your own tag if you + // want this action calls a trigger. + + // // Call triggers + // $result=$this->call_trigger('MYOBJECT_MODIFY',$user); + // if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail} + // // End call triggers + } + + // Commit or rollback + if ($error) { + $this->db->rollback(); + + return - 1 * $error; + } else { + $this->db->commit(); + + return 1; + } + } + + /** + * Delete object in database + * + * @param User $user User that deletes + * @param bool $notrigger false=launch triggers after, true=disable triggers + * + * @return int <0 if KO, >0 if OK + */ + public function delete(User $user, $notrigger = false) { + dol_syslog(__METHOD__, LOG_DEBUG); + + $error = 0; + + $this->db->begin(); + + if (! $error) { + if (! $notrigger) { + // Uncomment this and change MYOBJECT to your own tag if you + // want this action calls a trigger. + + // // Call triggers + // $result=$this->call_trigger('MYOBJECT_DELETE',$user); + // if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail} + // // End call triggers + } + } + + if (! $error) { + $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element; + $sql .= ' WHERE rowid=' . $this->id; + + $resql = $this->db->query($sql); + if (! $resql) { + $error ++; + $this->errors[] = 'Error ' . $this->db->lasterror(); + dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); } + } + + // Commit or rollback + if ($error) { + $this->db->rollback(); + + return - 1 * $error; } else { - $result = - 5; - dol_syslog("BookKeeping::Create Error $result SELECT Mysql"); + $this->db->commit(); + + return 1; } - - return $result; } - + /** * Delete bookkepping by importkey * * @param string $importkey Import key * @return int Result */ - function delete_by_importkey($importkey) { + function deleteByImportkey($importkey) { $this->db->begin(); - + // first check if line not yet in bookkeeping $sql = "DELETE"; - $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping "; + $sql .= " FROM " . MAIN_DB_PREFIX . $this->table_element; $sql .= " WHERE import_key = '" . $importkey . "'"; - + $resql = $this->db->query($sql); - + if (! $resql) { $this->errors[] = "Error " . $this->db->lasterror(); foreach ( $this->errors as $errmsg ) { @@ -368,23 +837,23 @@ class BookKeeping extends CommonObject $this->db->rollback(); return - 1; } - + $this->db->commit(); return 1; } /** - * Delete bookkepping by importkey + * Delete bookkepping by year * * @param string $delyear year to delete * @return int Result */ - function delete_by_year($delyear) { + function deleteByYear($delyear) { $this->db->begin(); // first check if line not yet in bookkeeping $sql = "DELETE"; - $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping "; + $sql .= " FROM " . MAIN_DB_PREFIX . $this->table_element; $sql .= " WHERE YEAR(doc_date) = ".$delyear; $resql = $this->db->query($sql); @@ -402,288 +871,213 @@ class BookKeeping extends CommonObject $this->db->commit(); return 1; } - + /** - * Create object into database + * Delete bookkepping by piece number * - * @param User $user Object user that create - * @param int $notrigger 1=Does not execute triggers, 0 otherwise - * @return int <0 if KO, >0 if OK + * @param int $piecenum peicenum to delete + * @return int Result */ - function create_std($user, $notrigger = 0) - { - $error = 0; - - // Clean parameters - if (isset($this->doc_type)) - $this->doc_type = trim($this->doc_type); - if (isset($this->doc_ref)) - $this->doc_ref = trim($this->doc_ref); - if (isset($this->fk_doc)) - $this->fk_doc = trim($this->fk_doc); - if (isset($this->fk_docdet)) - $this->fk_docdet = trim($this->fk_docdet); - if (isset($this->code_tiers)) - $this->code_tiers = trim($this->code_tiers); - if (isset($this->numero_compte)) - $this->numero_compte = trim($this->numero_compte); - if (isset($this->label_compte)) - $this->label_compte = trim($this->label_compte); - if (isset($this->debit)) - $this->debit = trim($this->debit); - if (isset($this->credit)) - $this->credit = trim($this->credit); - if (isset($this->montant)) - $this->montant = trim($this->montant); - if (isset($this->sens)) - $this->sens = trim($this->sens); - if (isset($this->fk_user_author)) - $this->fk_user_author = trim($this->fk_user_author); - if (isset($this->import_key)) - $this->import_key = trim($this->import_key); - if (isset($this->code_journal)) - $this->code_journal = trim($this->code_journal); - if (isset($this->piece_num)) - $this->piece_num = trim($this->piece_num); - - // Check parameters - // Put here code to add control on parameters values - - // Insert request - $sql = "INSERT INTO " . MAIN_DB_PREFIX . "accounting_bookkeeping("; - $sql .= "doc_date,"; - $sql .= "doc_type,"; - $sql .= "doc_ref,"; - $sql .= "fk_doc,"; - $sql .= "fk_docdet,"; - $sql .= "code_tiers,"; - $sql .= "numero_compte,"; - $sql .= "label_compte,"; - $sql .= "debit,"; - $sql .= "credit,"; - $sql .= "montant,"; - $sql .= "sens,"; - $sql .= "fk_user_author,"; - $sql .= "import_key,"; - $sql .= "code_journal,"; - $sql .= "piece_num"; - - $sql .= ") VALUES ("; - - $sql .= " " . (! isset($this->doc_date) || dol_strlen($this->doc_date) == 0 ? 'NULL' : $this->db->idate($this->doc_date)) . ","; - $sql .= " " . (! isset($this->doc_type) ? 'NULL' : "'" . $this->db->escape($this->doc_type) . "'") . ","; - $sql .= " " . (! isset($this->doc_ref) ? 'NULL' : "'" . $this->db->escape($this->doc_ref) . "'") . ","; - $sql .= " " . (! isset($this->fk_doc) ? 'NULL' : "'" . $this->fk_doc . "'") . ","; - $sql .= " " . (! isset($this->fk_docdet) ? 'NULL' : "'" . $this->fk_docdet . "'") . ","; - $sql .= " " . (! isset($this->code_tiers) ? 'NULL' : "'" . $this->db->escape($this->code_tiers) . "'") . ","; - $sql .= " " . (! isset($this->numero_compte) ? 'NULL' : "'" . $this->db->escape($this->numero_compte) . "'") . ","; - $sql .= " " . (! isset($this->label_compte) ? 'NULL' : "'" . $this->db->escape($this->label_compte) . "'") . ","; - $sql .= " " . (! isset($this->debit) ? 'NULL' : "'" . $this->debit . "'") . ","; - $sql .= " " . (! isset($this->credit) ? 'NULL' : "'" . $this->credit . "'") . ","; - $sql .= " " . (! isset($this->montant) ? 'NULL' : "'" . $this->montant . "'") . ","; - $sql .= " " . (! isset($this->sens) ? 'NULL' : "'" . $this->db->escape($this->sens) . "'") . ","; - $sql .= " " . $user->id . ","; - $sql .= " " . (! isset($this->import_key) ? 'NULL' : "'" . $this->db->escape($this->import_key) . "'") . ","; - $sql .= " " . (! isset($this->code_journal) ? 'NULL' : "'" . $this->db->escape($this->code_journal) . "'") . ","; - $sql .= " " . (! isset($this->piece_num) ? 'NULL' : "'" . $this->piece_num . "'") . ""; - - $sql .= ")"; - + function deleteMvtNum($piecenum) { $this->db->begin(); - - dol_syslog(get_class($this) . "::create_std sql=" . $sql, LOG_DEBUG); + + // first check if line not yet in bookkeeping + $sql = "DELETE"; + $sql .= " FROM " . MAIN_DB_PREFIX . $this->table_element; + $sql .= " WHERE piece_num = ".$piecenum; + $resql = $this->db->query($sql); + if (! $resql) { - $error ++; $this->errors[] = "Error " . $this->db->lasterror(); - } - - if (! $error) { - $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . "accounting_bookkeeping"); - -// if (! $notrigger) { - // Uncomment this and change MYOBJECT to your own tag if you - // want this action calls a trigger. - - // // Call triggers - // include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - // $interface=new Interfaces($this->db); - // $result=$interface->run_triggers('MYOBJECT_CREATE',$this,$user,$langs,$conf); - // if ($result < 0) { $error++; $this->errors=$interface->errors; } - // // End call triggers -// } - } - - // Commit or rollback - if ($error) { foreach ( $this->errors as $errmsg ) { - dol_syslog(get_class($this) . "::create_std " . $errmsg, LOG_ERR); + dol_syslog(get_class($this) . "::delete " . $errmsg, LOG_ERR); $this->error .= ($this->error ? ', ' . $errmsg : $errmsg); } $this->db->rollback(); - return - 1 * $error; - } else { - $this->db->commit(); - return $this->id; + return - 1; } + + $this->db->commit(); + return 1; } - + /** - * Update object into database + * Load an object from its id and create a new one in database * - * @param User $user Object user that create - * @param int $notrigger 1=Does not execute triggers, 0 otherwise - * @return int <0 if KO, >0 if OK + * @param int $fromid Id of object to clone + * + * @return int New id of clone */ - function update($user = 0, $notrigger = 0) - { + public function createFromClone($fromid) { + dol_syslog(__METHOD__, LOG_DEBUG); + + global $user; $error = 0; - - // Clean parameters - if (isset($this->doc_type)) - $this->doc_type = trim($this->doc_type); - if (isset($this->doc_ref)) - $this->doc_ref = trim($this->doc_ref); - if (isset($this->fk_doc)) - $this->fk_doc = trim($this->fk_doc); - if (isset($this->fk_docdet)) - $this->fk_docdet = trim($this->fk_docdet); - if (isset($this->code_tiers)) - $this->code_tiers = trim($this->code_tiers); - if (isset($this->numero_compte)) - $this->numero_compte = trim($this->numero_compte); - if (isset($this->label_compte)) - $this->label_compte = trim($this->label_compte); - if (isset($this->debit)) - $this->debit = trim($this->debit); - if (isset($this->credit)) - $this->credit = trim($this->credit); - if (isset($this->montant)) - $this->montant = trim($this->montant); - if (isset($this->sens)) - $this->sens = trim($this->sens); - if (isset($this->fk_user_author)) - $this->fk_user_author = trim($this->fk_user_author); - if (isset($this->import_key)) - $this->import_key = trim($this->import_key); - if (isset($this->code_journal)) - $this->code_journal = trim($this->code_journal); - if (isset($this->piece_num)) - $this->piece_num = trim($this->piece_num); - - // Check parameters - // Put here code to add a control on parameters values - - // Update request - $sql = "UPDATE " . MAIN_DB_PREFIX . "accounting_bookkeeping SET"; - - $sql .= " doc_date=" . (dol_strlen($this->doc_date) != 0 ? "'" . $this->db->idate($this->doc_date) . "'" : 'null') . ","; - $sql .= " doc_type=" . (isset($this->doc_type) ? "'" . $this->db->escape($this->doc_type) . "'" : "null") . ","; - $sql .= " doc_ref=" . (isset($this->doc_ref) ? "'" . $this->db->escape($this->doc_ref) . "'" : "null") . ","; - $sql .= " fk_doc=" . (isset($this->fk_doc) ? $this->fk_doc : "null") . ","; - $sql .= " fk_docdet=" . (isset($this->fk_docdet) ? $this->fk_docdet : "null") . ","; - $sql .= " code_tiers=" . (isset($this->code_tiers) ? "'" . $this->db->escape($this->code_tiers) . "'" : "null") . ","; - $sql .= " numero_compte=" . (isset($this->numero_compte) ? "'" . $this->db->escape($this->numero_compte) . "'" : "null") . ","; - $sql .= " label_compte=" . (isset($this->label_compte) ? "'" . $this->db->escape($this->label_compte) . "'" : "null") . ","; - $sql .= " debit=" . (isset($this->debit) ? $this->debit : "null") . ","; - $sql .= " credit=" . (isset($this->credit) ? $this->credit : "null") . ","; - $sql .= " montant=" . (isset($this->montant) ? $this->montant : "null") . ","; - $sql .= " sens=" . (isset($this->sens) ? "'" . $this->db->escape($this->sens) . "'" : "null") . ","; - $sql .= " fk_user_author=" . (isset($this->fk_user_author) ? $this->fk_user_author : "null") . ","; - $sql .= " import_key=" . (isset($this->import_key) ? "'" . $this->db->escape($this->import_key) . "'" : "null") . ","; - $sql .= " code_journal=" . (isset($this->code_journal) ? "'" . $this->db->escape($this->code_journal) . "'" : "null") . ","; - $sql .= " piece_num=" . (isset($this->piece_num) ? $this->piece_num : "null") . ""; - - $sql .= " WHERE rowid=" . $this->id; - + $object = new Accountingbookkeeping($this->db); + $this->db->begin(); - - dol_syslog(get_class($this) . "::update sql=" . $sql, LOG_DEBUG); - $resql = $this->db->query($sql); - if (! $resql) { + + // Load source object + $object->fetch($fromid); + // Reset object + $object->id = 0; + + // Clear fields + // ... + + // Create clone + $result = $object->create($user); + + // Other options + if ($result < 0) { $error ++; - $this->errors[] = "Error " . $this->db->lasterror(); + $this->errors = $object->errors; + dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); } - -// if (! $error) { -// if (! $notrigger) { - // Uncomment this and change MYOBJECT to your own tag if you - // want this action calls a trigger. - - // // Call triggers - // include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - // $interface=new Interfaces($this->db); - // $result=$interface->run_triggers('MYOBJECT_MODIFY',$this,$user,$langs,$conf); - // if ($result < 0) { $error++; $this->errors=$interface->errors; } - // // End call triggers -// } -// } - - // Commit or rollback - if ($error) { - foreach ( $this->errors as $errmsg ) { - dol_syslog(get_class($this) . "::update " . $errmsg, LOG_ERR); - $this->error .= ($this->error ? ', ' . $errmsg : $errmsg); - } + + // End + if (! $error) { + $this->db->commit(); + + return $object->id; + } else { $this->db->rollback(); - return - 1 * $error; + + return - 1; + } + } + + /** + * Initialise object with example values + * Id must be 0 if object instance is a specimen + * + * @return void + */ + public function initAsSpecimen() { + $this->id = 0; + + $this->doc_date = ''; + $this->doc_type = ''; + $this->doc_ref = ''; + $this->fk_doc = ''; + $this->fk_docdet = ''; + $this->code_tiers = ''; + $this->numero_compte = ''; + $this->label_compte = ''; + $this->debit = ''; + $this->credit = ''; + $this->montant = ''; + $this->sens = ''; + $this->fk_user_author = ''; + $this->import_key = ''; + $this->code_journal = ''; + $this->piece_num = ''; + } + + /** + * Load an accounting document into memory from database + * + * @param int $piecenum Accounting document to get + * @return int <0 if KO, >0 if OK + */ + public function fetchPerMvt($piecenum) { + $sql = "SELECT piece_num,doc_date,code_journal,doc_ref,doc_type"; + $sql .= " FROM " . MAIN_DB_PREFIX . $this->table_element; + $sql .= " WHERE piece_num = " . $piecenum; + + $result = $this->db->query($sql); + if ($result) { + $obj = $this->db->fetch_object($result); + + $this->piece_num = $obj->piece_num; + $this->code_journal = $obj->code_journal; + $this->doc_date = $this->db->jdate($obj->doc_date); + $this->doc_ref = $obj->doc_ref; + $this->doc_type = $obj->doc_type; } else { - $this->db->commit(); - return 1; + $this->error = "Error " . $this->db->lasterror(); + dol_syslog(get_class($this) . "::".__METHOD__ . $this->error, LOG_ERR); + return - 1; } + + return 1; } - + /** - * Delete object in database + * Return next number movement * - * @param User $user Object user that create - * @param int $notrigger 1=Does not execute triggers, 0 otherwise - * @return int <0 if KO, >0 if OK + * @return string Last number */ - function delete($user, $notrigger = 0) - { - $error = 0; - - $this->db->begin(); - -// if (! $notrigger) -// { -// // Call trigger -// $result=$this->call_trigger('ACCOUNTING_NUMPIECE_DELETE',$user); -// if ($result < 0) $error++; -// // End call triggers -// } - - if (! $error) { - $sql = "DELETE FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping"; - $sql .= " WHERE rowid=" . $this->id; - - dol_syslog(get_class($this) . "::delete sql=" . $sql); - $resql = $this->db->query($sql); - if (! $resql) { - $error ++; - $this->errors[] = "Error " . $this->db->lasterror(); - } + public function getNextNumMvt() { + $sql = "SELECT MAX(piece_num)+1 as max FROM " . MAIN_DB_PREFIX . $this->table_element; + + dol_syslog(get_class($this) . "getNextNumMvt sql=" . $sql, LOG_DEBUG); + $result = $this->db->query($sql); + + if ($result) { + $obj = $this->db->fetch_object($result); + + return $obj->max; + } else { + $this->error = "Error " . $this->db->lasterror(); + dol_syslog(get_class($this) . "::getNextNumMvt " . $this->error, LOG_ERR); + return - 1; } - - // Commit or rollback - if ($error) { - foreach ( $this->errors as $errmsg ) { - dol_syslog(get_class($this) . "::delete " . $errmsg, LOG_ERR); - $this->error .= ($this->error ? ', ' . $errmsg : $errmsg); + } + + /** + * Load all informations of accountancy document + * + * @param int $piecenum id of line to get + * @return int <0 if KO, >0 if OK + */ + function fetch_all_per_mvt($piecenum) { + $sql = "SELECT rowid, doc_date, doc_type,"; + $sql .= " doc_ref, fk_doc, fk_docdet, code_tiers,"; + $sql .= " numero_compte, label_compte, debit, credit,"; + $sql .= " montant, sens, fk_user_author, import_key, code_journal, piece_num"; + $sql .= " FROM " . MAIN_DB_PREFIX . $this->table_element; + $sql .= " WHERE piece_num = " . $piecenum; + + dol_syslog(get_class($this) . "fetch_all_per_mvt sql=" . $sql, LOG_DEBUG); + $result = $this->db->query($sql); + if ($result) { + + while ( $obj = $this->db->fetch_object($result) ) { + + $line = new BookKeepingLine(); + + $line->id = $obj->rowid; + + $line->doc_date = $this->db->jdate($obj->doc_date); + $line->doc_type = $obj->doc_type; + $line->doc_ref = $obj->doc_ref; + $line->fk_doc = $obj->fk_doc; + $line->fk_docdet = $obj->fk_docdet; + $line->code_tiers = $obj->code_tiers; + $line->numero_compte = $obj->numero_compte; + $line->label_compte = $obj->label_compte; + $line->debit = $obj->debit; + $line->credit = $obj->credit; + $line->montant = $obj->montant; + $line->sens = $obj->sens; + $line->code_journal = $obj->code_journal; + $line->piece_num = $obj->piece_num; + + $this->linesmvt[] = $line; } - $this->db->rollback(); - return - 1 * $error; - } - else - { - $this->db->commit(); - return 1; + } else { + $this->error = "Error " . $this->db->lasterror(); + dol_syslog(get_class($this) . "::fetch_per_mvt " . $this->error, LOG_ERR); + return - 1; } + + return 1; } - + /** - * Delete bookkepping by importkey + * Export bookkeping * * @param string $model Model * @return int Result @@ -694,21 +1088,21 @@ class BookKeeping extends CommonObject $sql .= " doc_ref, fk_doc, fk_docdet, code_tiers,"; $sql .= " numero_compte, label_compte, debit, credit,"; $sql .= " montant, sens, fk_user_author, import_key, code_journal, piece_num"; - $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping"; - + $sql .= " FROM " . MAIN_DB_PREFIX . $this->table_element; + dol_syslog(get_class($this) . "::export_bookkeping", LOG_DEBUG); - + $resql = $this->db->query($sql); - + if ($resql) { $this->linesexport = array (); - + $num = $this->db->num_rows($resql); while ( $obj = $this->db->fetch_object($resql) ) { $line = new BookKeepingLine(); - + $line->id = $obj->rowid; - + $line->doc_date = $this->db->jdate($obj->doc_date); $line->doc_type = $obj->doc_type; $line->doc_ref = $obj->doc_ref; @@ -723,11 +1117,11 @@ class BookKeeping extends CommonObject $line->sens = $obj->sens; $line->code_journal = $obj->code_journal; $line->piece_num = $obj->piece_num; - + $this->linesexport[] = $line; } $this->db->free($resql); - + return $num; } else @@ -744,20 +1138,21 @@ class BookKeeping extends CommonObject */ class BookKeepingLine { - var $id; - var $doc_date; - var $doc_type; - var $doc_ref; - var $fk_doc; - var $fk_docdet; - var $code_tiers; - var $numero_compte; - var $label_compte; - var $debit; - var $credit; - var $montant; - var $sens; - var $fk_user_author; - var $code_journal; - var $piece_num; + public $id; + public $doc_date = ''; + public $doc_type; + public $doc_ref; + public $fk_doc; + public $fk_docdet; + public $code_tiers; + public $numero_compte; + public $label_compte; + public $debit; + public $credit; + public $montant; + public $sens; + public $fk_user_author; + public $import_key; + public $code_journal; + public $piece_num; } diff --git a/htdocs/accountancy/class/html.formventilation.class.php b/htdocs/accountancy/class/html.formventilation.class.php index 5e838fb475fc1aeefa3c7107ea84fb4112125dd9..f2fb6caea488b1d871af4e407df4eefd9d8ad2c3 100644 --- a/htdocs/accountancy/class/html.formventilation.class.php +++ b/htdocs/accountancy/class/html.formventilation.class.php @@ -37,8 +37,7 @@ class FormVentilation extends Form * * @param DoliDB $db Database handler */ - public function __construct($db) - { + public function __construct($db) { $this->db = $db; } @@ -49,8 +48,7 @@ class FormVentilation extends Form * @param string $selectedkey Value * @return string HTML edit field */ - function select_bookkeeping_importkey($htmlname = 'importkey', $selectedkey='') - { + function select_bookkeeping_importkey($htmlname = 'importkey', $selectedkey = '') { $sql = 'SELECT DISTINCT import_key from ' . MAIN_DB_PREFIX . 'accounting_bookkeeping'; $sql .= ' ORDER BY import_key DESC'; @@ -94,12 +92,11 @@ class FormVentilation extends Form * @param array $event Event options * @param int $select_in $selectid value is a aa.rowid (0 default) or aa.account_number (1) * @param int $select_out set value returned by select 0=rowid (default), 1=account_number - * @param int $aabase set accounting_account base class to display empty=all or from 1 to 8 will display only account beginning by + * @param int $aabase set accountingaccount base class to display empty=all or from 1 to 8 will display only account beginning by * * @return string String with HTML select */ - function select_account($selectid, $htmlname = 'account', $showempty = 0, $event = array(), $select_in = 0, $select_out = 0, $aabase = '') - { + function select_account($selectid, $htmlname = 'account', $showempty = 0, $event = array(), $select_in = 0, $select_out = 0, $aabase = '') { global $conf; $out = ''; @@ -128,10 +125,14 @@ class FormVentilation extends Form $obj = $this->db->fetch_object($resql); $label = $obj->account_number . ' - ' . $obj->label; $label = dol_trunc($label, $trunclength); - if ($select_in == 0 ) $select_value_in = $obj->rowid; - if ($select_in == 1 ) $select_value_in = $obj->account_number; - if ($select_out == 0 ) $select_value_out = $obj->rowid; - if ($select_out == 1 ) $select_value_out = $obj->account_number; + if ($select_in == 0) + $select_value_in = $obj->rowid; + if ($select_in == 1) + $select_value_in = $obj->account_number; + if ($select_out == 0) + $select_value_out = $obj->rowid; + if ($select_out == 1) + $select_value_out = $obj->account_number; // Remember guy's we store in database llx_facturedet the rowid of accounting_account and not the account_number // Because same account_number can be share between different accounting_system and do have the same meaning if (($selectid != '') && $selectid == $select_value_in) { @@ -164,8 +165,7 @@ class FormVentilation extends Form * * @return string String with HTML select */ - function select_pcgtype($selectid, $htmlname = 'pcg_type', $showempty = 0, $event = array()) - { + function select_pcgtype($selectid, $htmlname = 'pcg_type', $showempty = 0, $event = array()) { global $conf; $out = ''; @@ -220,8 +220,7 @@ class FormVentilation extends Form * * @return string String with HTML select */ - function select_pcgsubtype($selectid, $htmlname = 'pcg_subtype', $showempty = 0, $event = array()) - { + function select_pcgsubtype($selectid, $htmlname = 'pcg_subtype', $showempty = 0, $event = array()) { global $conf; $out = ''; @@ -342,4 +341,66 @@ class FormVentilation extends Form return $out; } + + /** + * Return HTML combo list of years existing into book keepping + * + * @param string $selected Preselected value + * @param string $htmlname Name of HTML select object + * @param int $useempty Affiche valeur vide dans liste + * @param string $output_format (html/opton (for option html only)/array (to return options arrays + * @return string/array + */ + function selectyear_accountancy_bookkepping($selected = '', $htmlname = 'yearid', $useempty = 0, $output_format = 'html') { + $out = ''; + $out_array = array (); + + if ($output_format == 'html') { + $out .= '<select class="flat" placeholder="aa" id="' . $htmlname . '" name="' . $htmlname . '"' . $option . ' >'; + } + if ($useempty) { + $selected_html = ''; + if ($selected == '') { + $selected_html = ' selected'; + } + if ($output_format == 'html' || $output_format == 'options') { + $out .= '<option value=""' . $selected_html . '> </option>'; + } elseif ($output_format == 'array') { + $out_array[''] = ''; + } + } + + $sql = "SELECT DISTINCT date_format(doc_date,'%Y') as dtyear"; + $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping"; + $sql .= " ORDER BY doc_date"; + dol_syslog(get_class($this) . "::".__METHOD__, LOG_DEBUG); + $resql = $this->db->query($sql); + if ($resql) { + while ( $obj = $this->db->fetch_object($resql) ) { + $selected_html = ''; + if ($selected > 0 && $obj->dtyear == $selected) + $selected_html = ' selected'; + if ($output_format == 'html' || $output_format == 'options') { + $out .= '<option value="' . $obj->dtyear . '"' . $selected_html . ' >' . $obj->dtyear . '</option>'; + } elseif ($output_format == 'array') { + $out_array[$obj->dtyear] = $obj->dtyear; + } + } + } else { + $this->error = "Error " . $this->db->lasterror(); + dol_syslog(get_class($this) . "::".__METHOD__ . $this->error, LOG_ERR); + return - 1; + } + $this->db->free($resql); + + if ($output_format == 'html') { + $out .= "</select>\n"; + } + + if ($output_format == 'html' || $output_format == 'options') { + return $out; + } elseif ($output_format == 'array') { + return $out_array; + } + } } diff --git a/htdocs/accountancy/customer/lines.php b/htdocs/accountancy/customer/lines.php index 4c2b8ee7686480ceff9e5d08fddb71f73c23753a..3c899fcdd8530bf29d587b935cd7ef57b19420bd 100644 --- a/htdocs/accountancy/customer/lines.php +++ b/htdocs/accountancy/customer/lines.php @@ -238,7 +238,7 @@ if ($result) { print '<td class="liste_titre"><input type="text" class="flat" size="15" name="search_label" value="' . $search_label . '"></td>'; print '<td class="liste_titre"><input type="text" class="flat" size="15" name="search_desc" value="' . $search_desc . '"></td>'; print '<td class="liste_titre" align="center"><input type="text" class="flat" size="8" name="search_amount" value="' . $search_amount. '"></td>'; - print '<td class="liste_titre" align="center">%<input type="text" class="flat" size="5" name="search_vat" value="' . $search_vat . '"></td>'; + print '<td class="liste_titre" align="center"><input type="text" class="flat" size="5" name="search_vat" value="' . $search_vat . '">%</td>'; print '<td class="liste_titre" align="center"><input type="text" class="flat" size="15" name="search_account" value="' . $search_account . '"></td>'; print '<td class="liste_titre" colspan="2"> </td>'; print '<td class="liste_titre" align="center"><input type="image" class="liste_titre" name="button_search" src="'.img_picto($langs->trans("Search"),'search.png','','',1).'" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">'; diff --git a/htdocs/accountancy/customer/list.php b/htdocs/accountancy/customer/list.php index 7c025c8a893d92554f27dd45bde56b4f26a67b89..cf47c0e4fcea56b844e7a5e8d9809921e37e3ef4 100644 --- a/htdocs/accountancy/customer/list.php +++ b/htdocs/accountancy/customer/list.php @@ -1,6 +1,6 @@ <?php /* Copyright (C) 2013-2014 Olivier Geffroy <jeff@jeffinfo.com> - * Copyright (C) 2013-2015 Alexandre Spangaro <aspangaro.dolibarr@gmail.com> + * Copyright (C) 2013-2016 Alexandre Spangaro <aspangaro.dolibarr@gmail.com> * Copyright (C) 2014-2015 Ari Elbaz (elarifr) <github@accedinfo.com> * Copyright (C) 2013-2014 Florian Henry <florian.henry@open-concept.pro> * Copyright (C) 2014 Juanjo Menent <jmenent@2byte.es> @@ -149,7 +149,7 @@ if ($action == 'ventil' && !empty($btn_ventil)) { dol_syslog("/accountancy/customer/list.php sql=" . $sql, LOG_DEBUG); if ($db->query($sql)) { - print '<div><font color="green">' . $langs->trans("Lineofinvoice") . ' ' . $monId . ' ' . $langs->trans("VentilatedinAccount") . ' : ' . $monCompte . '</font></div>'; + print '<div><font color="green">' . $langs->trans("Lineofinvoice") . ' ' . $monId . ' - ' . $langs->trans("VentilatedinAccount") . ' : ' . $monCompte . '</font></div>'; } else { print '<div><font color="red">' . $langs->trans("ErrorDB") . ' : ' . $langs->trans("Lineofinvoice") . ' ' . $monId . ' ' . $langs->trans("NotVentilatedinAccount") . ' : ' . $monCompte . '<br/> <pre>' . $sql . '</pre></font></div>'; } @@ -228,6 +228,9 @@ if ($result) { print_barre_liste($langs->trans("InvoiceLines"), $page, $_SERVER["PHP_SELF"], "", $sortfield, $sortorder, '', $num_lines); print '<br><b>' . $langs->trans("DescVentilTodoCustomer") . '</b></br>'; + print_liste_field_titre($langs->trans("Date"), $_SERVER["PHP_SELF"], "f.datef", "", $param, '', $sortfield, $sortorder); + print ' '; + print_liste_field_titre($langs->trans("RowId"), $_SERVER["PHP_SELF"], "l.rowid", "", $param, '', $sortfield, $sortorder); print '<form action="' . $_SERVER["PHP_SELF"] . '" method="post">' . "\n"; print '<input type="hidden" name="action" value="ventil">'; @@ -254,7 +257,7 @@ if ($result) { print '<td class="liste_titre"><input type="text" class="flat" size="20" name="search_label" value="' . $search_label . '"></td>'; print '<td class="liste_titre"><input type="text" class="flat" size="20" name="search_desc" value="' . $search_desc . '"></td>'; print '<td class="liste_titre" align="right"><input type="text" class="flat" size="10" name="search_amount" value="' . $search_amount . '"></td>'; - print '<td class="liste_titre" align="center"><input type="text" class="flat" size="5" name="search_vat" value="' . $search_vat . '"></td>'; + print '<td class="liste_titre" align="center"><input type="text" class="flat" size="5" name="search_vat" value="' . $search_vat . '">%</td>'; print '<td align="right" class="liste_titre" colspan="4">'; print '<input type="image" class="liste_titre" src="' . img_picto($langs->trans("Search"), 'search.png', '', '', 1) . '" name="button_search" value="' . dol_escape_htmltag($langs->trans("Search")) . '" title="' . dol_escape_htmltag($langs->trans("Search")) . '">'; print ' '; diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index b33becb3f473e4fb7ade751f9d0520dd4513959c..607eb469b6f666e1bfaf0d28be7ec37c640117a4 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -4,7 +4,7 @@ * Copyright (C) 2011 Juanjo Menent <jmenent@2byte.es> * Copyright (C) 2012 Regis Houssin <regis@dolibarr.fr> * Copyright (C) 2013 Christophe Battarel <christophe.battarel@altairis.fr> - * Copyright (C) 2013-2015 Alexandre Spangaro <aspangaro.dolibarr@gmail.com> + * Copyright (C) 2013-2016 Alexandre Spangaro <aspangaro.dolibarr@gmail.com> * Copyright (C) 2013-2014 Florian Henry <florian.henry@open-concept.pro> * Copyright (C) 2013-2014 Olivier Geffroy <jeff@jeffinfo.com> * @@ -343,7 +343,7 @@ if ($action == 'writebookkeeping') } } - $result = $bookkeeping->create(); + $result = $bookkeeping->create($user); if ($result < 0) { $error ++; setEventMessages($object->error, $object->errors, 'errors'); @@ -421,7 +421,7 @@ if ($action == 'writebookkeeping') $bookkeeping->numero_compte = $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER; } - $result = $bookkeeping->create(); + $result = $bookkeeping->create($user); if ($result < 0) { $error ++; setEventMessages($object->error, $object->errors, 'errors'); @@ -571,7 +571,7 @@ else llxHeader('', $langs->trans("FinanceJournal")); - $nom = $langs->trans("FinanceJournal" . ' - ' . $journal); + $nom = $langs->trans("FinanceJournal") . ' - ' . $journal; $builddate = time(); $description = $langs->trans("DescFinanceJournal") . '<br>'; $period = $form->select_date($date_start, 'date_start', 0, 0, 0, '', 1, 0, 1) . ' - ' . $form->select_date($date_end, 'date_end', 0, 0, 0, '', 1, 0, 1); diff --git a/htdocs/accountancy/journal/purchasesjournal.php b/htdocs/accountancy/journal/purchasesjournal.php index 2346df27c7738227d08b79a99d01bc46f7fa78eb..b9f6fe2d5429925496609331b1a7431200429240 100644 --- a/htdocs/accountancy/journal/purchasesjournal.php +++ b/htdocs/accountancy/journal/purchasesjournal.php @@ -182,7 +182,7 @@ if ($action == 'writebookkeeping') { $bookkeeping->code_journal = $conf->global->ACCOUNTING_PURCHASE_JOURNAL; $bookkeeping->fk_user_author = $user->id; - $result = $bookkeeping->create(); + $result = $bookkeeping->create($user); if ($result < 0) { $error ++; setEventMessages($object->error, $object->errors, 'errors'); @@ -212,7 +212,7 @@ if ($action == 'writebookkeeping') { $bookkeeping->code_journal = $conf->global->ACCOUNTING_PURCHASE_JOURNAL; $bookkeeping->fk_user_author = $user->id; - $result = $bookkeeping->create(); + $result = $bookkeeping->create($user); if ($result < 0) { $error ++; setEventMessages($object->error, $object->errors, 'errors'); @@ -243,7 +243,7 @@ if ($action == 'writebookkeeping') { $bookkeeping->code_journal = $conf->global->ACCOUNTING_PURCHASE_JOURNAL; $bookkeeping->fk_user_author = $user->id; - $result = $bookkeeping->create(); + $result = $bookkeeping->create($user); if ($result < 0) { $error ++; setEventMessages($object->error, $object->errors, 'errors'); diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php index b0ebc8e8df7abf79c1d9280fbaf688ff885e61fc..1c7ef749e3317b1a9e53b786c671cc253397311f 100644 --- a/htdocs/accountancy/journal/sellsjournal.php +++ b/htdocs/accountancy/journal/sellsjournal.php @@ -217,7 +217,7 @@ if ($action == 'writebookkeeping') $bookkeeping->code_journal = $conf->global->ACCOUNTING_SELL_JOURNAL; $bookkeeping->fk_user_author = $user->id; - $result = $bookkeeping->create(); + $result = $bookkeeping->create($user); if ($result < 0) { $error ++; setEventMessages($object->error, $object->errors, 'errors'); @@ -247,7 +247,7 @@ if ($action == 'writebookkeeping') $bookkeeping->code_journal = $conf->global->ACCOUNTING_SELL_JOURNAL; $bookkeeping->fk_user_author = $user->id; - $result = $bookkeeping->create(); + $result = $bookkeeping->create($user); if ($result < 0) { $error ++; setEventMessages($object->error, $object->errors, 'errors'); @@ -279,7 +279,7 @@ if ($action == 'writebookkeeping') $bookkeeping->code_journal = $conf->global->ACCOUNTING_SELL_JOURNAL; $bookkeeping->fk_user_author = $user->id; - $result = $bookkeeping->create(); + $result = $bookkeeping->create($user); if ($result < 0) { $error ++; setEventMessages($object->error, $object->errors, 'errors'); @@ -531,6 +531,7 @@ if ($action == 'export_csv') print "</table>"; + // End of page llxFooter(); } diff --git a/htdocs/accountancy/supplier/lines.php b/htdocs/accountancy/supplier/lines.php index 6c2dc69c22ca229e883e7f5399b1187b3c45bbfc..e77c98aae3d8f00e72a531a5d242dc929d930c8e 100644 --- a/htdocs/accountancy/supplier/lines.php +++ b/htdocs/accountancy/supplier/lines.php @@ -1,6 +1,6 @@ <?php /* Copyright (C) 2013-2014 Olivier Geffroy <jeff@jeffinfo.com> - * Copyright (C) 2013-2015 Alexandre Spangaro <aspangaro.dolibarr@gmail.com> + * Copyright (C) 2013-2016 Alexandre Spangaro <aspangaro.dolibarr@gmail.com> * Copyright (C) 2014-2015 Ari Elbaz (elarifr) <github@accedinfo.com> * Copyright (C) 2013-2014 Florian Henry <florian.henry@open-concept.pro> * Copyright (C) 2014 Juanjo Menent <jmenent@2byte.es> @@ -225,7 +225,7 @@ if ($result) { print '<td class="liste_titre"><input type="text" class="flat" size="15" name="search_label" value="' . $search_label . '"></td>'; print '<td class="liste_titre"><input type="text" class="flat" size="15" name="search_desc" value="' . $search_desc . '"></td>'; print '<td class="liste_titre" align="center"><input type="text" class="flat" size="8" name="search_amount" value="' . $search_amount . '"></td>'; - print '<td class="liste_titre" align="center">%<input type="text" class="flat" size="5" name="search_vat" value="' . $search_vat . '"></td>'; + print '<td class="liste_titre" align="center"><input type="text" class="flat" size="5" name="search_vat" value="' . $search_vat . '">%</td>'; print '<td class="liste_titre" align="center"><input type="text" class="flat" size="15" name="search_account" value="' . $search_account . '"></td>'; print '<td class="liste_titre" colspan="2"> </td>'; print '<td class="liste_titre" align="center"><input type="image" class="liste_titre" name="button_search" src="'.img_picto($langs->trans("Search"),'search.png','','',1).'" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">'; diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index d47c2c924c88c1ddf515d93f0f0c0c1566eee3cc..50356c0539cb934426ef1ba50f80487da1c638a2 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -1,6 +1,6 @@ <?php /* Copyright (C) 2013-2014 Olivier Geffroy <jeff@jeffinfo.com> - * Copyright (C) 2013-2015 Alexandre Spangaro <aspangaro.dolibarr@gmail.com> + * Copyright (C) 2013-2016 Alexandre Spangaro <aspangaro.dolibarr@gmail.com> * Copyright (C) 2014-2015 Ari Elbaz (elarifr) <github@accedinfo.com> * Copyright (C) 2013-2014 Florian Henry <florian.henry@open-concept.pro> * Copyright (C) 2014 Juanjo Menent <jmenent@2byte.es>s @@ -168,7 +168,6 @@ if ($action == 'ventil' && !empty($btn_ventil)) { /* * Supplier Invoice Lines - * */ if (! empty($conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION)) { @@ -252,11 +251,11 @@ if ($result) { print '<tr class="liste_titre">'; print '<td class="liste_titre"><input type="text" class="flat" size="10" name="search_invoice" value="' . $search_invoice . '"></td>'; - print '<td class="liste_titre">%<input type="text" class="flat" size="15" name="search_ref" value="' . $search_ref . '"></td>'; + print '<td class="liste_titre"><input type="text" class="flat" size="15" name="search_ref" value="' . $search_ref . '"></td>'; print '<td class="liste_titre"><input type="text" class="flat" size="20" name="search_label" value="' . $search_label . '"></td>'; print '<td class="liste_titre"><input type="text" class="flat" size="20" name="search_desc" value="' . $search_desc . '"></td>'; print '<td class="liste_titre" align="right"><input type="text" class="flat" size="10" name="search_amount" value="' . $search_amount . '"></td>'; - print '<td class="liste_titre" align="center">%<input type="text" class="flat" size="5" name="search_vat" value="' . $search_vat . '"></td>'; + print '<td class="liste_titre" align="center"><input type="text" class="flat" size="5" name="search_vat" value="' . $search_vat . '">%</td>'; print '<td class="liste_titre" align="center"> </td>'; print '<td class="liste_titre"> </td>'; print '<td align="right" colspan="2" class="liste_titre">'; diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index 55b9e103474e3759c7b3b75c2569517c81286aad..4f4fa01105d442e1e39b68769b0467343f79c77d 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -422,6 +422,7 @@ if ($resql) $notshippable=0; $warning = 0; $text_info=''; + $text_warning=''; $nbprod=0; $numlines = count($generic_commande->lines); // Loop on each line of order diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 68e35536f1b306152fe2d43cc6e6b7a9c6b0d579..e72ec0d23c3277ec1c3e02cb25d99cedd1f91783 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -913,33 +913,92 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu { $langs->load("accountancy"); - $newmenu->add("/accountancy/customer/index.php?leftmenu=ventil_customer",$langs->trans("CustomersVentilation"),0,$user->rights->accounting->ventilation->read, '', $mainmenu, 'ventil_customer'); - if (empty($leftmenu) || $leftmenu=="ventil_customer") $newmenu->add("/accountancy/customer/list.php",$langs->trans("ToDispatch"),1,$user->rights->accounting->ventilation->dispatch); - if (empty($leftmenu) || $leftmenu=="ventil_customer") $newmenu->add("/accountancy/customer/lines.php",$langs->trans("Dispatched"),1,$user->rights->accounting->ventilation->read); + $permtoshowmenu=(! empty($conf->accounting->enabled) || $user->rights->accounting->ventilation->read || $user->rights->accounting->ventilation->dispatch || $user->rights->compta->resultat->lire); + $newmenu->add("/accountancy/customer/index.php?leftmenu=accountancy",$langs->trans("MenuAccountancy"), 0, $permtoshowmenu, '', $mainmenu, 'accountancy'); + + // Dispatch + $newmenu->add("/accountancy/customer/index.php?leftmenu=dispatch_customer&mainmenu=accountancy",$langs->trans("CustomersVentilation"),1,$user->rights->accounting->ventilation->read, '', $mainmenu, 'dispatch_customer'); + if (empty($leftmenu) || $leftmenu=="dispatch_customer") $newmenu->add("/accountancy/customer/list.php",$langs->trans("ToDispatch"),2,$user->rights->accounting->ventilation->dispatch); + if (empty($leftmenu) || $leftmenu=="dispatch_customer") $newmenu->add("/accountancy/customer/lines.php",$langs->trans("Dispatched"),2,$user->rights->accounting->ventilation->read); if (! empty($conf->fournisseur->enabled)) { - $newmenu->add("/accountancy/supplier/index.php?leftmenu=ventil_supplier",$langs->trans("SuppliersVentilation"),0,$user->rights->accounting->ventilation->read, '', $mainmenu, 'ventil_supplier'); - if (empty($leftmenu) || $leftmenu=="ventil_supplier") $newmenu->add("/accountancy/supplier/list.php",$langs->trans("ToDispatch"),1,$user->rights->accounting->ventilation->dispatch); - if (empty($leftmenu) || $leftmenu=="ventil_supplier") $newmenu->add("/accountancy/supplier/lines.php",$langs->trans("Dispatched"),1,$user->rights->accounting->ventilation->read); + $newmenu->add("/accountancy/supplier/index.php?leftmenu=dispatch_supplier&mainmenu=accountancy",$langs->trans("SuppliersVentilation"),1,$user->rights->accounting->ventilation->read, '', $mainmenu, 'dispatch_supplier'); + if (empty($leftmenu) || $leftmenu=="dispatch_supplier") $newmenu->add("/accountancy/supplier/list.php",$langs->trans("ToDispatch"),2,$user->rights->accounting->ventilation->dispatch); + if (empty($leftmenu) || $leftmenu=="dispatch_supplier") $newmenu->add("/accountancy/supplier/lines.php",$langs->trans("Dispatched"),2,$user->rights->accounting->ventilation->read); } + + // Journals + if(! empty($conf->accounting->enabled) && ! empty($user->rights->accounting->comptarapport->lire) && $mainmenu == 'accountancy') + { + $newmenu->add('',$langs->trans("Journaux"),1,$user->rights->accounting->comptarapport->lire); + + $sql = "SELECT rowid, label, accountancy_journal"; + $sql.= " FROM ".MAIN_DB_PREFIX."bank_account"; + $sql.= " WHERE entity = ".$conf->entity; + $sql.= " AND clos = 0"; + $sql.= " ORDER BY label"; + + $resql = $db->query($sql); + if ($resql) + { + $numr = $db->num_rows($resql); + $i = 0; + + if ($numr > 0) + while ($i < $numr) + { + $objp = $db->fetch_object($resql); + $newmenu->add('/accountancy/journal/bankjournal.php?id_account='.$objp->rowid,$langs->trans("Journal").' - '.$objp->label,2,$user->rights->accounting->comptarapport->lire); + $i++; + } + } + else dol_print_error($db); + $db->free($resql); + + // Add other journal + $newmenu->add("/accountancy/journal/sellsjournal.php?leftmenu=journal",$langs->trans("SellsJournal"),2,$user->rights->accounting->comptarapport->lire); + $newmenu->add("/accountancy/journal/purchasesjournal.php?leftmenu=journal",$langs->trans("PurchasesJournal"),2,$user->rights->accounting->comptarapport->lire); + } + + // General Ledger + $newmenu->add("/accountancy/bookkeeping/list.php?leftmenu=bookkeeping",$langs->trans("Bookkeeping"),1,$user->rights->accounting->mouvements->lire, '', $mainmenu, 'bookkeeping'); + if (empty($leftmenu) || preg_match('/bookkeeping/',$leftmenu)) $newmenu->add("/accountancy/bookkeeping/listbyyear.php",$langs->trans("ByYear"),2,$user->rights->accounting->mouvements->lire); + if (empty($leftmenu) || preg_match('/bookkeeping/',$leftmenu)) $newmenu->add("/accountancy/bookkeeping/balancebymonth.php",$langs->trans("AccountBalanceByMonth"),2,$user->rights->accounting->mouvements->lire); + + // Reports + $langs->load("compta"); + + $newmenu->add("/compta/resultat/index.php?leftmenu=report&mainmenu=accountancy",$langs->trans("Reportings"),1,$user->rights->accounting->comptarapport->lire, '', $mainmenu, 'ca'); + + if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/resultat/index.php?leftmenu=report",$langs->trans("ReportInOut"),2,$user->rights->accounting->comptarapport->lire); + if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/resultat/clientfourn.php?leftmenu=report",$langs->trans("ByCompanies"),3,$user->rights->accounting->comptarapport->lire); + if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/stats/index.php?leftmenu=report",$langs->trans("ReportTurnover"),2,$user->rights->accounting->comptarapport->lire); + if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/stats/casoc.php?leftmenu=report",$langs->trans("ByCompanies"),3,$user->rights->accounting->comptarapport->lire); + if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/stats/cabyuser.php?leftmenu=report",$langs->trans("ByUsers"),3,$user->rights->accounting->comptarapport->lire); + if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/stats/cabyprodserv.php?leftmenu=report", $langs->trans("ByProductsAndServices"),3,$user->rights->accounting->comptarapport->lire); + + // Admin + $langs->load("admin"); + $newmenu->add("/accountancy/admin/fiscalyear.php?mainmenu=accountancy", $langs->trans("Fiscalyear"),1,$user->rights->accounting->fiscalyear, '', $mainmenu, 'fiscalyear'); + $newmenu->add("/accountancy/admin/account.php?mainmenu=accountancy", $langs->trans("Chartofaccounts"),1,$user->rights->accounting->chartofaccount, '', $mainmenu, 'chartofaccount'); } - // Rapports - if (! empty($conf->comptabilite->enabled) || ! empty($conf->accounting->enabled)) + // Comptabilite + if (! empty($conf->comptabilite->enabled)) { $langs->load("compta"); // Bilan, resultats - $newmenu->add("/compta/resultat/index.php?leftmenu=report&mainmenu=accountancy",$langs->trans("Reportings"),0,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire, '', $mainmenu, 'ca'); + $newmenu->add("/compta/resultat/index.php?leftmenu=report&mainmenu=accountancy",$langs->trans("Reportings"),0,$user->rights->compta->resultat->lire, '', $mainmenu, 'ca'); - if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/resultat/index.php?leftmenu=report",$langs->trans("ReportInOut"),1,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); - if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/resultat/clientfourn.php?leftmenu=report",$langs->trans("ByCompanies"),2,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); + if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/resultat/index.php?leftmenu=report",$langs->trans("ReportInOut"),1,$user->rights->compta->resultat->lire); + if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/resultat/clientfourn.php?leftmenu=report",$langs->trans("ByCompanies"),2,$user->rights->compta->resultat->lire); /* On verra ca avec module compabilite expert if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/resultat/compteres.php?leftmenu=report","Compte de resultat",2,$user->rights->compta->resultat->lire); if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/resultat/bilan.php?leftmenu=report","Bilan",2,$user->rights->compta->resultat->lire); */ - if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/stats/index.php?leftmenu=report",$langs->trans("ReportTurnover"),1,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); + if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/stats/index.php?leftmenu=report",$langs->trans("ReportTurnover"),1,$user->rights->compta->resultat->lire); /* if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/stats/cumul.php?leftmenu=report","Cumule",2,$user->rights->compta->resultat->lire); @@ -948,74 +1007,14 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/stats/comp.php?leftmenu=report","Transforme",2,$user->rights->compta->resultat->lire); } */ - if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/stats/casoc.php?leftmenu=report",$langs->trans("ByCompanies"),2,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); - if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/stats/cabyuser.php?leftmenu=report",$langs->trans("ByUsers"),2,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); - if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/stats/cabyprodserv.php?leftmenu=report", $langs->trans("ByProductsAndServices"),2,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); - - if (! empty($conf->comptabilite->enabled)) - { - // Journaux - //if ($leftmenu=="ca") $newmenu->add("/compta/journaux/index.php?leftmenu=ca",$langs->trans("Journaux"),1,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); - //journaux - if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/journal/sellsjournal.php?leftmenu=report",$langs->trans("SellsJournal"),1,$user->rights->compta->resultat->lire); - if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/journal/purchasesjournal.php?leftmenu=report",$langs->trans("PurchasesJournal"),1,$user->rights->compta->resultat->lire); - } - - // Report expert - if (! empty($conf->accounting->enabled)) - { - $langs->load("accountancy"); - - // Grand livre - $newmenu->add("/accountancy/bookkeeping/list.php?leftmenu=bookkeeping",$langs->trans("Bookkeeping"),0,$user->rights->accounting->mouvements->lire, '', $mainmenu, 'bookkeeping'); - if (empty($leftmenu) || preg_match('/bookkeeping/',$leftmenu)) $newmenu->add("/accountancy/bookkeeping/listbyyear.php",$langs->trans("ByYear"),1,$user->rights->accounting->mouvements->lire); - if (empty($leftmenu) || preg_match('/bookkeeping/',$leftmenu)) $newmenu->add("/accountancy/bookkeeping/balancebymonth.php",$langs->trans("AccountBalanceByMonth"),1,$user->rights->accounting->mouvements->lire); - - // Accountancy journals - if (! empty($conf->accounting->enabled) && !empty($user->rights->accounting->mouvements->lire) && $mainmenu == 'accountancy') - { - $newmenu->add('/accountancy/journal/index.php?leftmenu=journal',$langs->trans("Journaux"),0,$user->rights->banque->lire); - - if ($leftmenu == 'journal') - { - $sql = "SELECT rowid, label, accountancy_journal"; - $sql.= " FROM ".MAIN_DB_PREFIX."bank_account"; - $sql.= " WHERE entity = ".$conf->entity; - $sql.= " AND clos = 0"; - $sql.= " ORDER BY label"; - - $resql = $db->query($sql); - if ($resql) - { - $numr = $db->num_rows($resql); - $i = 0; - - if ($numr > 0) - - while ($i < $numr) - { - $objp = $db->fetch_object($resql); - $newmenu->add('/accountancy/journal/bankjournal.php?id_account='.$objp->rowid,$langs->trans("Journal").' - '.$objp->label,1,$user->rights->accounting->comptarapport->lire); - $i++; - } - } - else dol_print_error($db); - $db->free($resql); - - // Add other journal - $newmenu->add("/accountancy/journal/sellsjournal.php?leftmenu=journal",$langs->trans("SellsJournal"),1,$user->rights->accounting->comptarapport->lire); - $newmenu->add("/accountancy/journal/purchasesjournal.php?leftmenu=journal",$langs->trans("PurchasesJournal"),1,$user->rights->accounting->comptarapport->lire); - } - } - } - } - - // Setup - if (! empty($conf->accounting->enabled)) - { - $langs->load("admin"); - $newmenu->add("/accountancy/admin/fiscalyear.php?mainmenu=accountancy", $langs->trans("Fiscalyear"),0,$user->rights->accounting->fiscalyear, '', $mainmenu, 'fiscalyear'); - $newmenu->add("/accountancy/admin/account.php?mainmenu=accountancy", $langs->trans("Chartofaccounts"),0,$user->rights->accounting->chartofaccount, '', $mainmenu, 'chartofaccount'); + if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/stats/casoc.php?leftmenu=report",$langs->trans("ByCompanies"),2,$user->rights->compta->resultat->lire); + if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/stats/cabyuser.php?leftmenu=report",$langs->trans("ByUsers"),2,$user->rights->compta->resultat->lire); + if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/stats/cabyprodserv.php?leftmenu=report", $langs->trans("ByProductsAndServices"),2,$user->rights->compta->resultat->lire); + + // Journaux + //if ($leftmenu=="ca") $newmenu->add("/compta/journaux/index.php?leftmenu=ca",$langs->trans("Journaux"),1,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); + if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/journal/sellsjournal.php?leftmenu=report",$langs->trans("SellsJournal"),1,$user->rights->compta->resultat->lire); + if (empty($leftmenu) || preg_match('/report/',$leftmenu)) $newmenu->add("/compta/journal/purchasesjournal.php?leftmenu=report",$langs->trans("PurchasesJournal"),1,$user->rights->compta->resultat->lire); } } diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index b781d4f3dc691dfcc9543028af3bc44babe4223b..0a85f720c1312d66a182fe845140da6f5de81b95 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -370,7 +370,7 @@ class ExpenseReport extends CommonObject function set_paid($id, $fuser) { $sql = "UPDATE ".MAIN_DB_PREFIX."expensereport"; - $sql.= " SET fk_statut = 6"; + $sql.= " SET fk_statut = 6, paid=1"; $sql.= " WHERE rowid = ".$id." AND fk_statut = 5"; dol_syslog(get_class($this)."::set_paid sql=".$sql, LOG_DEBUG); diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index d7db34b11052e31b4cd714ed1c2c6c6eacbad398..1103cbeb739bf2e9b245933cb26adfcdbcfe59ad 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -35,6 +35,7 @@ AccountAccounting=Accounting account AccountAccountingSuggest=Accounting account suggest Ventilation=Breakdown +MenuAccountancy=Accountancy CustomersVentilation=Breakdown customers SuppliersVentilation=Breakdown suppliers TradeMargin=Trade margin @@ -109,10 +110,6 @@ DelBookKeeping=Delete the records of the general ledger DescSellsJournal=Sales journal DescPurchasesJournal=Purchases journal -BankJournal=Bank journal -DescBankJournal=Bank journal including all the types of payments other than cash -CashJournal=Cash journal -DescCashJournal=Cash journal including the type of payment cash FinanceJournal=Finance journal DescFinanceJournal=Finance journal including all the types of payments by bank account diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 2188293a1ba76ca3ba13e36d7dad6c181459e442..749899e345c056a89a6fdfde3e3aa3dbe8a895a9 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -12,6 +12,7 @@ * Copyright (C) 2014 Henry Florian <florian.henry@open-concept.pro> * Copyright (C) 2014 Philippe Grand <philippe.grand@atoo-net.com> * Copyright (C) 2014 Ion agorria <ion@agorria.com> + * Copyright (C) 2016 Ferran Marcet <fmarcet@2byte.es> * * 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 @@ -1673,7 +1674,7 @@ class Product extends CommonObject $sql.= " WHERE entity IN (".getEntity('productprice', 1).")"; $sql.= " AND price_level=".$i; $sql.= " AND fk_product = '".$this->id."'"; - $sql.= " ORDER BY date_price, rowid DESC"; + $sql.= " ORDER BY date_price DESC, rowid DESC"; $sql.= " LIMIT 1"; $resql = $this->db->query($sql); if ($resql) diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php index 1f5e35a043a1351fadb821ec79a522e80daa2a84..0fe2769803d76ee637e12f8e302de90b65d00d6f 100644 --- a/htdocs/product/fournisseurs.php +++ b/htdocs/product/fournisseurs.php @@ -7,6 +7,7 @@ * Copyright (C) 2012 Christophe Battarel <christophe.battarel@altairis.fr> * Copyright (C) 2014 Ion Agorria <ion@agorria.com> * Copyright (C) 2015 Alexandre Spangaro <aspangaro.dolibarr@gmail.com> + * Copyright (C) 2016 Ferran Marcet <fmarcet@2byte.es> * * 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 @@ -46,7 +47,7 @@ $rowid=GETPOST('rowid','int'); $action=GETPOST('action', 'alpha'); $cancel=GETPOST('cancel', 'alpha'); $socid=GETPOST('socid', 'int'); -$cost_price=GETPOST('cost_price', 'int'); +$cost_price=GETPOST('cost_price', 'alpha'); $backtopage=GETPOST('backtopage','alpha'); $error=0;