diff --git a/htdocs/accountancy/admin/export.php b/htdocs/accountancy/admin/export.php index c0a987ddf82..9f060179910 100644 --- a/htdocs/accountancy/admin/export.php +++ b/htdocs/accountancy/admin/export.php @@ -206,7 +206,8 @@ else print ''; $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/list.php b/htdocs/accountancy/bookkeeping/list.php index c5fea407a12..c517df2d129 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -38,32 +38,150 @@ $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'); } - } -} elseif ($action == 'delbookkeepingyear') { - - $delyear = GETPOST('delyear', 'int'); - - if (! empty($delyear)) { - $object = new BookKeeping($db); - $result = $object->delete_by_year($delyear); Header("Location: list.php"); + exit(); + } +} elseif ($action == 'delmouvconfirm') { + + $mvt_num = GETPOST('mvt_num', 'int'); + + 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 . "%'"; + + $result = $object->fetchAll($sortorder, $sortfield, $limit, $offset, $filter); + if ($result < 0) { + setEventMessages($object->error, $object->errors, 'errors'); } - $sql .= " ORDER BY $sortfield $sortorder " . $db->plimit($conf->liste_limit + 1, $offset); + 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') { + + $form_question=array(); + $delyear=GETPOST('delyear'); + + if (empty($delyear)) { + $delyear=dol_print_date(dol_now(),'%Y'); + } + $year_array=$formventilation->selectyear_accountancy_bookkepping($delyear, 'delyear',0,'array'); + + $form_question['delyear']=array('name'=>'delyear','type'=>'select','label'=>$langs->trans('DelYear'),'values'=>$year_array,'default'=>$delyear); + + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans('DeleteMvt'), $langs->trans('ConfirmDeleteMvt'), 'delbookkeepingyearconfirm', $form_question, 0, 1); + print $formconfirm; + } - dol_syslog('accountancy/bookkeeping/list.php:: $sql=' . $sql); - $resql = $db->query($sql); - if ($resql) { - $num = $db->num_rows($resql); - $i = 0; + print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $options, $sortfield, $sortorder, '', $result, $nbtotalofrecords); + + /*print '
'; + print ''; + print ''; + + print $formventilation->select_bookkeeping_importkey('importkey', GETPOST('importkey')); + + print '
'; + + print '
';*/ + + print '
'; + print '
'."\n"; + print '
'; + print '' . $langs->trans("NewAccountingMvt") . ''; + //print '' . $langs->trans("Export") . ''; + print '
'; + + print '
'; + + + /*print '
'; + 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 '
'; + print '
'; + 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 '
'; + print '
'; + 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 '
';*/ + + print ''; + print ''; + 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 "\n"; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + //print ''; + print ''; + //print ''; + + print ''; + print ''; + print ''; + //print ''; + //print ''; + print ''; + print ''; + + print ''; + + $var = True; + + $total_debit=0; + $total_credit=0; + + foreach ( $object->lines as $line ) { + $var = ! $var; - print_barre_liste($langs->trans("Bookkeeping"), $page, $_SERVER["PHP_SELF"], "", $sortfield, $sortorder, '', $num); + $total_debit+=$line->debit; + $total_credit+=$line->credit; - /*print ''; - print ''; - print ''; - - print $formventilation->select_bookkeeping_importkey('importkey', GETPOST('importkey')); - - print '
'; - - print '';*/ + print ""; - print ''; - print ''; - print ''; - - print $formother->select_year(GETPOST('delyear'), 'delyear'); - - print '
'; - - print ''; - - print ''; - print ''; - print ''; - print ''; - print ''; - - print '
'; + print $langs->trans('From') . ': '; + print $form->select_date($search_date_start, 'date_start', 0, 0, 1); + print '
'; + 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 '
'; + //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 '
'; + print $langs->trans('To'); + print $formventilation->select_account($search_accountancy_code_end, 'search_accountancy_code_end', 1, array (), 1, 1, ''); + print '
'; + //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 '
'; + print $langs->trans('To'); + print $formventilation->select_auxaccount($search_accountancy_aux_code_end, 'search_accountancy_aux_code_end', 1); + print '
'; + print ''; + print '    '; + print ''; + print ' '; + print ''; + print '
'; - print ''; - 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 "\n"; - - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + //print ''; + //print ''; + print ''; + print ''; - print ''; - print ''; - - $var = True; - - while ( $i < min($num, $conf->liste_limit) ) { - $obj = $db->fetch_object($resql); - $var = ! $var; - - print ""; - - /* if ($old_piecenum!=$obj->piece_num) { - $total_debit=0; - $total_credit=0; - } else { - $total_debit+=$obj->debit; - $total_credit+=$obj->credit; - } - */ - - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print "\n"; - - //$old_piecenum= $obj->piece_num; - $i ++; - } - print "
      '; - print ''; - print ' '; - print ''; + print '' . $line->piece_num . '' . dol_print_date($line->doc_date, 'day') . '' . $line->doc_ref . '' . length_accountg($line->numero_compte) . '' . length_accounta($line->code_tiers) . '' . $line->label_compte . '' . price($line->debit) . '' . price($line->credit) . '' . price($line->montant) . '' . $line->sens . '' . $line->code_journal . ''; + print '' . img_edit() . ''; + print '' . img_delete() . ''; print '
' . $obj->piece_num . '' . dol_print_date($db->jdate($obj->doc_date), 'day') . '' . $obj->doc_ref . '' . length_accountg($obj->numero_compte) . '' . length_accounta($obj->code_tiers) . '' . $obj->label_compte . '' . price($obj->debit) . '' . price($obj->credit) . '' . price($obj->montant) . '' . $obj->sens . '' . $obj->code_journal . '' . img_edit() . '
"; - - print '
'; - print '' . $langs->trans("NewAccountingMvt") . ''; - print '
'; - - $db->free($resql); - } else { - dol_print_error($db); + print "\n"; } + print ''; + print ''; + print ''; + print price($total_debit); + print ''; + print ''; + print price($total_credit); + print ''; + print ''; + print ''; + + print ""; + print ''; + llxFooter(); } - $db->close(); \ No newline at end of file diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index d3801b4a4d1..efcd972cd71 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -1,8 +1,8 @@ - * Copyright (C) 2013-2014 Olivier Geffroy - * Copyright (C) 2013-2015 Alexandre Spangaro - * Copyright (C) 2013-2014 Florian Henry +/* Copyright (C) 2007-2012 Laurent Destailleur + * Copyright (C) 2014 Juanjo Menent + * Copyright (C) 2015 Florian Henry + * Copyright (C) 2015 Raphaƫl Doursenaud * * 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 +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; - } - - /** - * 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; - } - - /** - * 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; - } - } - - /** - * 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; - } - - return 1; - } - - /** - * Insert line into bookkeeping * - * @param User $user User who inserted operation - * @return int <0 KO >0 OK + * @var string Error code (or message) + * @deprecated + * + * @see Accountingbookkeeping::errors */ - function create($user='') - { - global $conf; - + public $error; + /** + * + * @var string[] Error codes (or messages) + */ + public $errors = array (); + /** + * + * @var string Id to identify managed objects + */ + public $element = 'accountingbookkeeping'; + /** + * + * @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; + } + + /** + * 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 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,587 @@ 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; - dol_syslog("BookKeeping::Create Error $result SELECT Mysql"); + $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; } - - 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 create_std(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.numero_compte>=' || $key=='t.numero_compte<=' || $key=='t.code_tiers>=' || $key=='t.code_tiers<=') { + $sqlwhere[] = $key . '\'' . $this->db->escape($value) . '\''; + } elseif($key=='t.fk_doc' || $key=='t.fk_docdet' || $key=='t.piece_num') { + $sqlwhere[] = $key . '=' . $value; + } elseif($key=='t.code_tiers' || $key=='t.numero_compte') { + $sqlwhere[] = $key . ' LIKE \'' . $this->db->escape($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 { + $this->db->commit(); + + return 1; + } + } + /** * 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 +841,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,313 +875,187 @@ 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); - $this->error .= ($this->error ? ', ' . $errmsg : $errmsg); - } - $this->db->rollback(); - return - 1 * $error; - } else { - $this->db->commit(); - return $this->id; - } - } - - /** - * Update object into 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 - */ - function update($user = 0, $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 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; - - $this->db->begin(); - - dol_syslog(get_class($this) . "::update sql=" . $sql, LOG_DEBUG); - $resql = $this->db->query($sql); - if (! $resql) { - $error ++; - $this->errors[] = "Error " . $this->db->lasterror(); - } - -// 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); - } - $this->db->rollback(); - return - 1 * $error; - } else { - $this->db->commit(); - return 1; - } - } - - /** - * Delete object 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 - */ - 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(); - } - } - - // 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); } $this->db->rollback(); - return - 1 * $error; + return - 1; } - else - { + + $this->db->commit(); + return 1; + } + + /** + * Load an object from its id and create a new one in database + * + * @param int $fromid Id of object to clone + * + * @return int New id of clone + */ + public function createFromClone($fromid) { + dol_syslog(__METHOD__, LOG_DEBUG); + + global $user; + $error = 0; + $object = new Accountingbookkeeping($this->db); + + $this->db->begin(); + + // 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 = $object->errors; + dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); + } + + // End + if (! $error) { $this->db->commit(); - return 1; + + return $object->id; + } else { + $this->db->rollback(); + + return - 1; } } - + /** - * Delete bookkepping by importkey + * Initialise object with example values + * Id must be 0 if object instance is a specimen * - * @param string $model Model - * @return int Result + * @return void */ - function export_bookkeping($model = 'ebp') - { + 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 fetch_per_mvt($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; + + 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; + } + + /** + * Return next number movement + * + * @return string Last number + */ + 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; + } + } + + /** + * 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"; - - 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) ) { + $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; @@ -723,11 +1070,64 @@ class BookKeeping extends CommonObject $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; + } + + return 1; + } + + /** + * Export bookkeping + * + * @param string $model Model + * @return int Result + */ + function export_bookkeping($model = 'ebp') + { + $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; + + 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; + $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->linesexport[] = $line; } $this->db->free($resql); - + return $num; } else @@ -742,22 +1142,22 @@ class BookKeeping extends CommonObject /** * Class BookKeepingLine */ -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; +class BookKeepingLine { + 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 6863b997d33..a1f01e5116b 100644 --- a/htdocs/accountancy/class/html.formventilation.class.php +++ b/htdocs/accountancy/class/html.formventilation.class.php @@ -342,4 +342,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 .= '\n"; + } + + if ($output_format == 'html' || $output_format == 'options') { + return $out; + } elseif ($output_format == 'array') { + return $out_array; + } + } }