From 0e7ba927849d51e787dd9ae3b9c3c3598a512b52 Mon Sep 17 00:00:00 2001 From: patrick Delcroix Date: Thu, 5 Jul 2018 21:34:36 +0200 Subject: [PATCH 1/6] New: Accounting dossier file checks page Page to check to attachement of those operation invoice, invoicesupplier, salary, donation, Expense, tax --- htdocs/compta/compta-files.php | 341 +++++++++++++++++++++++ htdocs/core/tpl/extrafields_view.tpl.php | 182 ------------ 2 files changed, 341 insertions(+), 182 deletions(-) create mode 100644 htdocs/compta/compta-files.php delete mode 100644 htdocs/core/tpl/extrafields_view.tpl.php diff --git a/htdocs/compta/compta-files.php b/htdocs/compta/compta-files.php new file mode 100644 index 00000000000..d48679c5291 --- /dev/null +++ b/htdocs/compta/compta-files.php @@ -0,0 +1,341 @@ + + * Copyright (C) 2004-2017 Laurent Destailleur + * Copyright (C) 2017 Pierre-Henry Favre + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/compta/recap-compta.php + * \ingroup compta + * \brief Page de fiche recap customer + */ + +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; +require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php'; +restrictedArea($user,'banque'); + +$langs->load("companies"); +if (! empty($conf->facture->enabled)) $langs->load("bills"); + +$date_start =GETPOST('date_start','alpha'); +$date_startDay= GETPOST('date_startday','int'); +$date_startMonth= GETPOST('date_startmonth','int'); +$date_startYear= GETPOST('date_startyear','int'); +$date_start=($date_startDay)?dol_mktime(0,0,0,$date_startMonth,$date_startDay,$date_startYear):strtotime($date_start); + +$date_stop =GETPOST('date_stop','alpha'); +$date_stopDay= GETPOST('date_stopday','int'); +$date_stopMonth= GETPOST('date_stopmonth','int'); +$date_stopYear= GETPOST('date_stopyear','int'); +//FIXME doldate +$date_stop=($date_stopDay)?dol_mktime(0,0,0,$date_stopMonth,$date_stopDay,$date_stopYear):strtotime($date_stop); + +$action =GETPOST('action','alpha'); +// Security check +//if ($user->societe_id) $id=$user->societe_id; +//$result = restrictedArea($user, 'societe', $id, '&societe'); + +//$object = new Societe($db); +//if ($id > 0) $object->fetch($id); + + +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +$hookmanager->initHooks(array('comptafilescard','globalcard')); + +// Load variable for pagination +$limit = GETPOST('limit','int')?GETPOST('limit','int'):$conf->liste_limit; +$sortfield = GETPOST('sortfield','alpha'); +$sortorder = GETPOST('sortorder','alpha'); +$page = GETPOST('page','int'); +if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 +$offset = $limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; +if (! $sortfield) $sortfield="f.datef,f.rowid"; // Set here default search field +if (! $sortorder) $sortorder="DESC"; + + +$arrayfields=array( + 'date'=>array('label'=>"Date", 'checked'=>1), + //... +); + +/* + * Actions + */ +//$parameters = array('socid' => $id); +//$reshook = $hookmanager->executeHooks('doActions', $parameters, $object); // Note that $object may have been modified by some hooks +//if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + +/* + * Fetch the lines/files from db / + */ +$filesarray=array(); +$result=false; +if(($action=="searchfiles"||$action=="dl" ) && $date_start && $date_stop){ + $wheretail=" '".$db->idate($date_start)."' AND '".$db->idate($date_stop)."'"; + $sql="SELECT rowid, facnumber as ref,paye as paid,total_ttc,fk_soc,datef as date, 'Invoice' as item FROM ".MAIN_DB_PREFIX."facture"; + $sql.=" WHERE datef between ".$wheretail; + $sql.=" UNION ALL"; + $sql.=" SELECT rowid,ref, paye as paid, total_ttc, fk_soc,datef as date, 'InvoiceSupplier' as item FROM ".MAIN_DB_PREFIX."facture_fourn"; + $sql.=" WHERE datef between ".$wheretail; + $sql.=" UNION ALL"; + $sql.=" SELECT rowid,ref,paid,total_ttc,fk_user_author as fk_soc,date_fin as date,'Expense' as item FROM ".MAIN_DB_PREFIX."expensereport"; + $sql.=" WHERE date_fin between ".$wheretail; + $sql.=" UNION ALL"; + $sql.=" SELECT rowid,ref,paid,amount as total_ttc,CONCAT(firstname,' ',lastname) as fk_soc,datedon as date,'Donation' as item FROM ".MAIN_DB_PREFIX."don"; + $sql.=" WHERE datedon between ".$wheretail; + $sql.=" UNION ALL"; + $sql.=" SELECT rowid,label as ref,1 as paid,amount as total_ttc,fk_user as fk_soc,datep as date,'Salary' as item FROM ".MAIN_DB_PREFIX."payment_salary"; + $sql.=" WHERE datep between ".$wheretail; + $sql.=" UNION ALL"; + $sql.=" SELECT rowid,num_paiement as ref,1 as paid,amount as total_ttc,fk_charge as fk_soc,datep as date,'Charge' as item FROM ".MAIN_DB_PREFIX."paiementcharge"; + $sql.=" WHERE datep between ".$wheretail; + $resd = $db->query($sql); + $files=array(); + $link=''; + + if ($resd) + { + $numd = $db->num_rows($resd); + + $upload_dir =''; + $i=0; + while($i<$numd) + { + + + $objd = $db->fetch_object($resd); + + switch($objd->item){ + case "Invoice": + $subdir=dol_sanitizeFileName($objd->ref); + $upload_dir = $conf->facture->dir_output.'/'.$subdir; + $link="../../document.php?modulepart=facture&file=".str_replace('/','%2F',$subdir).'%2F'; + break; + case "InvoiceSupplier": + $subdir=get_exdir($objd->id,2,0,0,$objd,'invoice_supplier').$objd->ref; + $upload_dir = $conf->fournisseur->facture->dir_output.'/'.$subdir; + $link="../../document.php?modulepart=facture_fournisseur&file=".str_replace('/','%2F',$subdir).'%2F'; + break; + case "Expense": + $subdir=dol_sanitizeFileName($objd->ref); + $upload_dir = $conf->expensereport->dir_output.'/'.$subdir; + $link="../../document.php?modulepart=expensereport&file=".str_replace('/','%2F',$subdir).'%2F'; + break; + case "Salary": + $subdir=dol_sanitizeFileName($objd->rowid); + $upload_dir = $conf->salaries->dir_output.'/'.$subdir; + $link="../../document.php?modulepart=salaries&file=".str_replace('/','%2F',$subdir).'%2F'; + break; + case "Donation": + $subdir=get_exdir(null,2,0,1,$objd,'donation'). '/'. dol_sanitizeFileName($objd->idd); + $upload_dir = $conf->don->dir_output . '/' . $subdir; + $link="../../document.php?modulepart=don&file=".str_replace('/','%2F',$subdir).'%2F'; + break; + case "Charge": + $subdir=dol_sanitizeFileName($objd->rowid); + $upload_dir = $conf->tax->dir_output . '/' . $subdir; + $link="../../document.php?modulepart=tax&file=".str_replace('/','%2F',$subdir).'%2F'; + break; + default: + break; + } + + if(!empty($upload_dir)){ + $result=true; + $files=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview\.png)$','',SORT_ASC,1); + foreach ($files as $key => $file){ + $file['date']=$db->idate($objd->date); + $file['paid']=$objd->paid; + $file['amount']=$objd->total_ttc; + $file['ref']=$objd->ref; + $file['fk']=$objd->fk_soc; + $file['item']=$objd->item; + $file['link']=$link.$file['name']; + $out.= '
'.$file['name'].''; + $filesarray[]=$file; + } + if(count($files)<1){ + $nofile['date']=$db->idate($objd->date); + $nofile['paid']=$objd->paid; + $nofile['amount']=$objd->total_ttc; + $nofile['ref']=$objd->ref; + $nofile['fk']=$objd->fk_soc; + $nofile['item']=$objd->item; + + $filesarray[]=$nofile; + } + } + $i++; + } + } + $db->free($resd); + +} +/* + * cleanup of old ZIP + */ +//FIXME + + +/* +*ZIP creation +*/ +if($result & $action=="dl"){ + unset($zip); + $log='date,type,ref,total,paid,filename,item_id'."\n"; + $zipname = 'export.zip'; + $zip = new ZipArchive; + $res = $zip->open($zipname, ZipArchive::OVERWRITE|ZipArchive::CREATE); + if ($res){ + foreach ($filesarray as $key=> $file) { + + if(file_exists($file["fullname"])) $zip->addFile($file["fullname"],$file["name"]);// + $log.=$file['date'].','.$file['item'].','.$file['ref'].','.$file['amount'].','.$file['paid'].','.$file["name"].','.$file['fk']."\n"; + } + + + $zip->addFromString('log.csv', $log); + $zip->close(); + ///Then download the zipped file. + header('Content-Type: application/zip'); + header('Content-disposition: attachment; filename='.$zipname); + header('Content-Length: ' . filesize($zipname)); + readfile($zipname); + exit(); + } +} + + +// None + + +/* + * View + */ + +$form = new Form($db); +$userstatic=new User($db); + +$title=$langs->trans("ComptaFiles").' - '.$langs->trans("List"); +//if (! empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/',$conf->global->MAIN_HTML_TITLE) && $object->name) $title=$object->name.' - '.$langs->trans("Symmary"); +$help_url='EN:Module_Accounting|FR:Module_Compatibilite'; //FIXME + +llxHeader('',$title,$help_url); + +print '
'."\n\t\t\t"; +print ''.$langs->trans("dateStart").': '.$form->select_date($date_start,'date_start',0,0,0,"",1,1,1)."\n"; +print ''.$langs->trans("dateStop").': '.$form->select_date($date_stop,'date_stop',0,0,0,"",1,1,1)."\n"; + +print '
'."\n\t\t"; + +if (!empty($date_start) && !empty($date_stop))echo dol_print_date($date_start)." - ".dol_print_date($date_stop); +print ''; +print ''; +//if (! empty($arrayfields['f.datef']['checked'])) +print_liste_field_titre($arrayfields['date']['label'],$_SERVER["PHP_SELF"],"date","",$param,'align="center" class="nowrap"',$sortfield,$sortorder); +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; + +print ''; + +if ($result) +{ + $TData = dol_sort_array($filesarray, 'date', 'ASC'); + if(empty($TData)) { + print ''; + } else { + + // Sort array by date ASC to calucalte balance + + $totalDebit = 0; + $totalCredit = 0; + // Balance calculation + $balance = 0; + foreach($TData as &$data1) { + if($data1['item']=='Invoice'||$data1['item']=='Donation' ){ + $balance += $data1['amount']; + $totalCredit+=$data1['amount']; + }else{ + $balance -= $data1['amount']; + $totalDebit+=$data1['amount']; + } + $data1['balance'] = $balance; + } + + + + // Display array + foreach($TData as $data) { + + $html_class = ''; + //if (!empty($data['fk_facture'])) $html_class = 'facid-'.$data['fk_facture']; + //elseif (!empty($data['fk_paiement'])) $html_class = 'payid-'.$data['fk_paiement']; + + print ''; + + print "\n"; + print ''; + print ''; + print '\n"; + + print ''; + print '\n"; + $totalDebit += ($data['amount'] > 0) ? abs($data['amount']) : 0; + print '\n"; + $totalCredit += ($data['amount'] > 0) ? 0 : abs($data['amount']); + // Balance + print '\n"; + + + + print "\n"; + } + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + } + + + } +print "
'.$langs->trans("Type").''.$langs->trans("Ref").''.$langs->trans("File").''.$langs->trans("Paid").''.$langs->trans("Debit").''.$langs->trans("Credit").''.$langs->trans("Balance").'
'.$langs->trans("NoItem").'
"; + print dol_print_date($data['date'],'day'); + print "'.$data['item'].''.$data['ref'].' ".$data['name']."'.$data['paid'].''.(($data['amount'] > 0) ? price(abs($data['amount'])) : '')."'.(($data['amount'] > 0) ? '' : price(abs($data['amount'])))."'.price($data['balance'])."
 '.price($totalDebit).''.price($totalCredit).''.price(price2num($totalDebit - $totalCredit, 'MT')).'
"; +print '
'."\n\t\t\t"; +print ''; +print ''; +print '
'."\n\t\t\n\t\t\n\t\t\t"; + +llxFooter(); + +$db->close(); diff --git a/htdocs/core/tpl/extrafields_view.tpl.php b/htdocs/core/tpl/extrafields_view.tpl.php deleted file mode 100644 index 3559df44c9c..00000000000 --- a/htdocs/core/tpl/extrafields_view.tpl.php +++ /dev/null @@ -1,182 +0,0 @@ - - * Copyright (C) 2014 Juanjo Menent - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * Need to have following variables defined: - * $object (invoice, order, ...) - * $action - * $conf - * $langs - * - * $parameters - * $cols - */ - -// Protection to avoid direct call of template -if (empty($object) || ! is_object($object)) -{ - print "Error, template page can't be called as URL"; - exit; -} - -?> - -fk_soc)) $parameters['socid'] = $object->fk_soc; - -$reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); -print $hookmanager->resPrint; -if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); - -//var_dump($extrafields->attributes); -if (empty($reshook) && ! empty($extrafields->attributes[$object->table_element]['label'])) -{ - foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $label) - { - // Discard if extrafield is a hidden field on form - if (empty($extrafields->attributes[$object->table_element]['list'][$key])) continue; // 0 = Never visible field - if (abs($extrafields->attributes[$object->table_element]['list'][$key]) != 1 && abs($extrafields->attributes[$object->table_element]['list'][$key]) != 3) continue; // <> -1 and <> 1 and <> 3 = not visible on forms, only on list - - // Load language if required - if (! empty($extrafields->attributes[$object->table_element]['langfile'][$key])) $langs->load($extrafields->attributes[$object->table_element]['langfile'][$key]); - - if ($action == 'edit_extras') - { - $value = (isset($_POST["options_" . $key]) ? $_POST["options_" . $key] : $object->array_options["options_" . $key]); - } - else - { - $value = $object->array_options["options_" . $key]; - } - if ($extrafields->attributes[$object->table_element]['type'][$key] == 'separate') - { - print $extrafields->showSeparator($key); - } - else - { - print ''; - print ''; - print ''; - print 'attributes[$object->table_element]['required'][$key])) print ' class="fieldrequired"'; - print '>' . $langs->trans($label) . ''; - - //TODO Improve element and rights detection - //var_dump($user->rights); - $permok=false; - - $keyforperm=$object->element; - if ($object->element == 'fichinter') $keyforperm='ficheinter'; - if (isset($user->rights->$keyforperm)) $permok=$user->rights->$keyforperm->creer||$user->rights->$keyforperm->create||$user->rights->$keyforperm->write; - - if ($object->element=='order_supplier') $permok=$user->rights->fournisseur->commande->creer; - if ($object->element=='invoice_supplier') $permok=$user->rights->fournisseur->facture->creer; - if ($object->element=='shipping') $permok=$user->rights->expedition->creer; - if ($object->element=='delivery') $permok=$user->rights->expedition->livraison->creer; - if ($object->element=='productlot') $permok=$user->rights->stock->creer; - if ($object->element=='facturerec') $permok=$user->rights->facture->creer; - - if (($object->statut == 0 || ! empty($extrafields->attributes[$object->table_element]['alwayseditable'][$key])) - && $permok && ($action != 'edit_extras' || GETPOST('attribute') != $key) - && empty($extrafields->attributes[$object->table_element]['computed'][$key])) - { - $fieldid='id'; - if ($object->table_element == 'societe') $fieldid='socid'; - print ''; - } - print '
' . img_edit().'
'; - $html_id = !empty($object->id) ? $object->element.'_extras_'.$key.'_'.$object->id : ''; - print ''; - - // Convert date into timestamp format - if (in_array($extrafields->attributes[$object->table_element]['type'][$key], array('date','datetime'))) - { - $datenotinstring = $object->array_options['options_' . $key]; - // print 'X'.$object->array_options['options_' . $key].'-'.$datenotinstring.'x'; - if (! is_numeric($object->array_options['options_' . $key])) // For backward compatibility - { - $datenotinstring = $db->jdate($datenotinstring); - } - //print 'x'.$object->array_options['options_' . $key].'-'.$datenotinstring.' - '.dol_print_date($datenotinstring, 'dayhour'); - $value = isset($_POST["options_" . $key]) ? dol_mktime($_POST["options_" . $key . "hour"], $_POST["options_" . $key . "min"], 0, $_POST["options_" . $key . "month"], $_POST["options_" . $key . "day"], $_POST["options_" . $key . "year"]) : $datenotinstring; - } - - //TODO Improve element and rights detection - if ($action == 'edit_extras' && $permok && GETPOST('attribute') == $key) - { - $fieldid='id'; - if ($object->table_element == 'societe') $fieldid='socid'; - - print '
'; - print ''; - print ''; - print ''; - print ''; - - print $extrafields->showInputField($key, $value, '', '', '', 0, $object->id); - - print ''; - - print '
'; - } - else - { - print $extrafields->showOutputField($key, $value, '', (empty($extrafieldsobjectkey)?'':$extrafieldsobjectkey)); - } - print '' . "\n"; - - print "\n"; - // Add code to manage list depending on others - if (! empty($conf->use_javascript_ajax)) - print ' - '."\n"; - } - } -} -?> - \ No newline at end of file From e88dd77ea557afd6c507cd6cc52a93bec59a7e1e Mon Sep 17 00:00:00 2001 From: delcroix Patrick Date: Thu, 5 Jul 2018 21:42:34 +0200 Subject: [PATCH 2/6] no change --- htdocs/core/tpl/extrafields_view.tpl.php | 163 +++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 htdocs/core/tpl/extrafields_view.tpl.php diff --git a/htdocs/core/tpl/extrafields_view.tpl.php b/htdocs/core/tpl/extrafields_view.tpl.php new file mode 100644 index 00000000000..f88a9d1bdf7 --- /dev/null +++ b/htdocs/core/tpl/extrafields_view.tpl.php @@ -0,0 +1,163 @@ + + * Copyright (C) 2014 Juanjo Menent + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * Need to have following variables defined: + * $object (invoice, order, ...) + * $action + * $conf + * $langs + * + * $parameters + * $cols + */ +// Protection to avoid direct call of template +if (empty($object) || ! is_object($object)) +{ + print "Error, template page can't be called as URL"; + exit; +} +?> + +fk_soc)) $parameters['socid'] = $object->fk_soc; +$reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); +print $hookmanager->resPrint; +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); +//var_dump($extrafields->attributes); +if (empty($reshook) && ! empty($extrafields->attributes[$object->table_element]['label'])) +{ + foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $label) + { + // Discard if extrafield is a hidden field on form + if (empty($extrafields->attributes[$object->table_element]['list'][$key])) continue; // 0 = Never visible field + if (abs($extrafields->attributes[$object->table_element]['list'][$key]) != 1 && abs($extrafields->attributes[$object->table_element]['list'][$key]) != 3) continue; // <> -1 and <> 1 and <> 3 = not visible on forms, only on list + // Load language if required + if (! empty($extrafields->attributes[$object->table_element]['langfile'][$key])) $langs->load($extrafields->attributes[$object->table_element]['langfile'][$key]); + if ($action == 'edit_extras') + { + $value = (isset($_POST["options_" . $key]) ? $_POST["options_" . $key] : $object->array_options["options_" . $key]); + } + else + { + $value = $object->array_options["options_" . $key]; + } + if ($extrafields->attributes[$object->table_element]['type'][$key] == 'separate') + { + print $extrafields->showSeparator($key); + } + else + { + print ''; + print ''; + print ''; + print 'attributes[$object->table_element]['required'][$key])) print ' class="fieldrequired"'; + print '>' . $langs->trans($label) . ''; + //TODO Improve element and rights detection + //var_dump($user->rights); + $permok=false; + $keyforperm=$object->element; + if ($object->element == 'fichinter') $keyforperm='ficheinter'; + if (isset($user->rights->$keyforperm)) $permok=$user->rights->$keyforperm->creer||$user->rights->$keyforperm->create||$user->rights->$keyforperm->write; + if ($object->element=='order_supplier') $permok=$user->rights->fournisseur->commande->creer; + if ($object->element=='invoice_supplier') $permok=$user->rights->fournisseur->facture->creer; + if ($object->element=='shipping') $permok=$user->rights->expedition->creer; + if ($object->element=='delivery') $permok=$user->rights->expedition->livraison->creer; + if ($object->element=='productlot') $permok=$user->rights->stock->creer; + if ($object->element=='facturerec') $permok=$user->rights->facture->creer; + if (($object->statut == 0 || ! empty($extrafields->attributes[$object->table_element]['alwayseditable'][$key])) + && $permok && ($action != 'edit_extras' || GETPOST('attribute') != $key) + && empty($extrafields->attributes[$object->table_element]['computed'][$key])) + { + $fieldid='id'; + if ($object->table_element == 'societe') $fieldid='socid'; + print ''; + } + print '
' . img_edit().'
'; + $html_id = !empty($object->id) ? $object->element.'_extras_'.$key.'_'.$object->id : ''; + print ''; + // Convert date into timestamp format + if (in_array($extrafields->attributes[$object->table_element]['type'][$key], array('date','datetime'))) + { + $datenotinstring = $object->array_options['options_' . $key]; + // print 'X'.$object->array_options['options_' . $key].'-'.$datenotinstring.'x'; + if (! is_numeric($object->array_options['options_' . $key])) // For backward compatibility + { + $datenotinstring = $db->jdate($datenotinstring); + } + //print 'x'.$object->array_options['options_' . $key].'-'.$datenotinstring.' - '.dol_print_date($datenotinstring, 'dayhour'); + $value = isset($_POST["options_" . $key]) ? dol_mktime($_POST["options_" . $key . "hour"], $_POST["options_" . $key . "min"], 0, $_POST["options_" . $key . "month"], $_POST["options_" . $key . "day"], $_POST["options_" . $key . "year"]) : $datenotinstring; + } + //TODO Improve element and rights detection + if ($action == 'edit_extras' && $permok && GETPOST('attribute') == $key) + { + $fieldid='id'; + if ($object->table_element == 'societe') $fieldid='socid'; + print '
'; + print ''; + print ''; + print ''; + print ''; + print $extrafields->showInputField($key, $value, '', '', '', 0, $object->id); + print ''; + print '
'; + } + else + { + print $extrafields->showOutputField($key, $value, '', (empty($extrafieldsobjectkey)?'':$extrafieldsobjectkey)); + } + print '' . "\n"; + print "\n"; + // Add code to manage list depending on others + if (! empty($conf->use_javascript_ajax)) + print ' + '."\n"; + } + } +} +?> + From a90974378e1c540643515a8e478bd9a115abc168 Mon Sep 17 00:00:00 2001 From: patrick Delcroix Date: Thu, 5 Jul 2018 22:31:29 +0200 Subject: [PATCH 3/6] FIX: credit / debit --- htdocs/compta/compta-files.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/htdocs/compta/compta-files.php b/htdocs/compta/compta-files.php index d48679c5291..a04cd2a7c66 100644 --- a/htdocs/compta/compta-files.php +++ b/htdocs/compta/compta-files.php @@ -278,13 +278,15 @@ if ($result) // Balance calculation $balance = 0; foreach($TData as &$data1) { - if($data1['item']=='Invoice'||$data1['item']=='Donation' ){ - $balance += $data1['amount']; - $totalCredit+=$data1['amount']; + if($data1['item']!='Invoice'&& $data1['item']!='Donation' ){ + $data1['amount']=-$data1['amount']; + } + if ($data1['amount']>0){ + }else{ - $balance -= $data1['amount']; - $totalDebit+=$data1['amount']; + } + $balance += $data1['amount']; $data1['balance'] = $balance; } @@ -320,7 +322,7 @@ if ($result) } print ''; - print ' '; + print ' '; print ''.price($totalDebit).''; print ''.price($totalCredit).''; print ''.price(price2num($totalDebit - $totalCredit, 'MT')).''; From e3920edb79b1c5778668c5169c09f9c6cfacb585 Mon Sep 17 00:00:00 2001 From: delcroix Patrick Date: Tue, 11 Sep 2018 21:53:47 +0200 Subject: [PATCH 4/6] correct for invoice supplier links --- htdocs/compta/compta-files.php | 166 +++++++++++++-------------------- 1 file changed, 64 insertions(+), 102 deletions(-) diff --git a/htdocs/compta/compta-files.php b/htdocs/compta/compta-files.php index a04cd2a7c66..679d21c000f 100644 --- a/htdocs/compta/compta-files.php +++ b/htdocs/compta/compta-files.php @@ -16,13 +16,11 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - /** * \file htdocs/compta/recap-compta.php - * \ingroup compta + * \ingroup compta * \brief Page de fiche recap customer */ - require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; @@ -32,35 +30,27 @@ require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php'; restrictedArea($user,'banque'); - $langs->load("companies"); if (! empty($conf->facture->enabled)) $langs->load("bills"); - -$date_start =GETPOST('date_start','alpha'); +$date_start =GETPOST('date_start','alpha'); $date_startDay= GETPOST('date_startday','int'); $date_startMonth= GETPOST('date_startmonth','int'); $date_startYear= GETPOST('date_startyear','int'); $date_start=($date_startDay)?dol_mktime(0,0,0,$date_startMonth,$date_startDay,$date_startYear):strtotime($date_start); - -$date_stop =GETPOST('date_stop','alpha'); +$date_stop =GETPOST('date_stop','alpha'); $date_stopDay= GETPOST('date_stopday','int'); $date_stopMonth= GETPOST('date_stopmonth','int'); $date_stopYear= GETPOST('date_stopyear','int'); -//FIXME doldate +//FIXME doldate $date_stop=($date_stopDay)?dol_mktime(0,0,0,$date_stopMonth,$date_stopDay,$date_stopYear):strtotime($date_stop); - -$action =GETPOST('action','alpha'); +$action =GETPOST('action','alpha'); // Security check //if ($user->societe_id) $id=$user->societe_id; //$result = restrictedArea($user, 'societe', $id, '&societe'); - //$object = new Societe($db); //if ($id > 0) $object->fetch($id); - - // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('comptafilescard','globalcard')); - // Load variable for pagination $limit = GETPOST('limit','int')?GETPOST('limit','int'):$conf->liste_limit; $sortfield = GETPOST('sortfield','alpha'); @@ -72,95 +62,91 @@ $pageprev = $page - 1; $pagenext = $page + 1; if (! $sortfield) $sortfield="f.datef,f.rowid"; // Set here default search field if (! $sortorder) $sortorder="DESC"; - - $arrayfields=array( 'date'=>array('label'=>"Date", 'checked'=>1), //... ); - /* * Actions */ //$parameters = array('socid' => $id); //$reshook = $hookmanager->executeHooks('doActions', $parameters, $object); // Note that $object may have been modified by some hooks //if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); - /* - * Fetch the lines/files from db / + * Fetch the lines/files from db / */ $filesarray=array(); $result=false; if(($action=="searchfiles"||$action=="dl" ) && $date_start && $date_stop){ $wheretail=" '".$db->idate($date_start)."' AND '".$db->idate($date_stop)."'"; - $sql="SELECT rowid, facnumber as ref,paye as paid,total_ttc,fk_soc,datef as date, 'Invoice' as item FROM ".MAIN_DB_PREFIX."facture"; + $sql="SELECT rowid as id, facnumber as ref,paye as paid,total_ttc,fk_soc,datef as date, 'Invoice' as item FROM ".MAIN_DB_PREFIX."facture"; $sql.=" WHERE datef between ".$wheretail; $sql.=" UNION ALL"; - $sql.=" SELECT rowid,ref, paye as paid, total_ttc, fk_soc,datef as date, 'InvoiceSupplier' as item FROM ".MAIN_DB_PREFIX."facture_fourn"; + $sql.=" SELECT rowid as id,ref, paye as paid, total_ttc, fk_soc,datef as date, 'InvoiceSupplier' as item FROM ".MAIN_DB_PREFIX."facture_fourn"; $sql.=" WHERE datef between ".$wheretail; $sql.=" UNION ALL"; - $sql.=" SELECT rowid,ref,paid,total_ttc,fk_user_author as fk_soc,date_fin as date,'Expense' as item FROM ".MAIN_DB_PREFIX."expensereport"; + $sql.=" SELECT rowid as id,ref,paid,total_ttc,fk_user_author as fk_soc,date_fin as date,'Expense' as item FROM ".MAIN_DB_PREFIX."expensereport"; $sql.=" WHERE date_fin between ".$wheretail; $sql.=" UNION ALL"; - $sql.=" SELECT rowid,ref,paid,amount as total_ttc,CONCAT(firstname,' ',lastname) as fk_soc,datedon as date,'Donation' as item FROM ".MAIN_DB_PREFIX."don"; + $sql.=" SELECT rowid as id,ref,paid,amount as total_ttc,CONCAT(firstname,' ',lastname) as fk_soc,datedon as date,'Donation' as item FROM ".MAIN_DB_PREFIX."don"; $sql.=" WHERE datedon between ".$wheretail; $sql.=" UNION ALL"; - $sql.=" SELECT rowid,label as ref,1 as paid,amount as total_ttc,fk_user as fk_soc,datep as date,'Salary' as item FROM ".MAIN_DB_PREFIX."payment_salary"; + $sql.=" SELECT rowid as id,label as ref,1 as paid,amount as total_ttc,fk_user as fk_soc,datep as date,'Salary' as item FROM ".MAIN_DB_PREFIX."payment_salary"; $sql.=" WHERE datep between ".$wheretail; $sql.=" UNION ALL"; - $sql.=" SELECT rowid,num_paiement as ref,1 as paid,amount as total_ttc,fk_charge as fk_soc,datep as date,'Charge' as item FROM ".MAIN_DB_PREFIX."paiementcharge"; + $sql.=" SELECT rowid as id,num_paiement as ref,1 as paid,amount as total_ttc,fk_charge as fk_soc,datep as date,'Charge' as item FROM ".MAIN_DB_PREFIX."paiementcharge"; $sql.=" WHERE datep between ".$wheretail; $resd = $db->query($sql); - $files=array(); + $files=array(); $link=''; - + if ($resd) { $numd = $db->num_rows($resd); - + $upload_dir =''; $i=0; while($i<$numd) { - - + + $objd = $db->fetch_object($resd); - + switch($objd->item){ - case "Invoice": + case "Invoice": $subdir=dol_sanitizeFileName($objd->ref); $upload_dir = $conf->facture->dir_output.'/'.$subdir; $link="../../document.php?modulepart=facture&file=".str_replace('/','%2F',$subdir).'%2F'; - break; - case "InvoiceSupplier": - $subdir=get_exdir($objd->id,2,0,0,$objd,'invoice_supplier').$objd->ref; + break; + case "InvoiceSupplier": + $subdir=get_exdir($objd->id,2,0,0,$objd,'invoice_supplier').dol_sanitizeFileName($objd->ref); $upload_dir = $conf->fournisseur->facture->dir_output.'/'.$subdir; $link="../../document.php?modulepart=facture_fournisseur&file=".str_replace('/','%2F',$subdir).'%2F'; - break; + break; case "Expense": $subdir=dol_sanitizeFileName($objd->ref); $upload_dir = $conf->expensereport->dir_output.'/'.$subdir; $link="../../document.php?modulepart=expensereport&file=".str_replace('/','%2F',$subdir).'%2F'; break; case "Salary": - $subdir=dol_sanitizeFileName($objd->rowid); + $subdir=dol_sanitizeFileName($objd->id); $upload_dir = $conf->salaries->dir_output.'/'.$subdir; $link="../../document.php?modulepart=salaries&file=".str_replace('/','%2F',$subdir).'%2F'; break; case "Donation": - $subdir=get_exdir(null,2,0,1,$objd,'donation'). '/'. dol_sanitizeFileName($objd->idd); + $subdir=get_exdir(null,2,0,1,$objd,'donation'). '/'. dol_sanitizeFileName($objd->id); $upload_dir = $conf->don->dir_output . '/' . $subdir; $link="../../document.php?modulepart=don&file=".str_replace('/','%2F',$subdir).'%2F'; break; case "Charge": - $subdir=dol_sanitizeFileName($objd->rowid); + $subdir=dol_sanitizeFileName($objd->id); $upload_dir = $conf->tax->dir_output . '/' . $subdir; $link="../../document.php?modulepart=tax&file=".str_replace('/','%2F',$subdir).'%2F'; break; default: break; } - + if(!empty($upload_dir)){ $result=true; $files=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview\.png)$','',SORT_ASC,1); @@ -182,39 +168,33 @@ if(($action=="searchfiles"||$action=="dl" ) && $date_start && $date_stop){ $nofile['ref']=$objd->ref; $nofile['fk']=$objd->fk_soc; $nofile['item']=$objd->item; - $filesarray[]=$nofile; } } - $i++; + $i++; } - } + } $db->free($resd); - + } /* * cleanup of old ZIP */ //FIXME - - /* *ZIP creation */ if($result & $action=="dl"){ - unset($zip); + unset($zip); $log='date,type,ref,total,paid,filename,item_id'."\n"; $zipname = 'export.zip'; $zip = new ZipArchive; $res = $zip->open($zipname, ZipArchive::OVERWRITE|ZipArchive::CREATE); - if ($res){ - foreach ($filesarray as $key=> $file) { - + if ($res){ + foreach ($filesarray as $key=> $file) { if(file_exists($file["fullname"])) $zip->addFile($file["fullname"],$file["name"]);// $log.=$file['date'].','.$file['item'].','.$file['ref'].','.$file['amount'].','.$file['paid'].','.$file["name"].','.$file['fk']."\n"; } - - $zip->addFromString('log.csv', $log); $zip->close(); ///Then download the zipped file. @@ -222,37 +202,27 @@ if($result & $action=="dl"){ header('Content-disposition: attachment; filename='.$zipname); header('Content-Length: ' . filesize($zipname)); readfile($zipname); - exit(); - } + exit(); + } } - - // None - - /* - * View + * View */ - $form = new Form($db); $userstatic=new User($db); - $title=$langs->trans("ComptaFiles").' - '.$langs->trans("List"); //if (! empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/',$conf->global->MAIN_HTML_TITLE) && $object->name) $title=$object->name.' - '.$langs->trans("Symmary"); $help_url='EN:Module_Accounting|FR:Module_Compatibilite'; //FIXME - llxHeader('',$title,$help_url); - print ''."\n\t\t"; - if (!empty($date_start) && !empty($date_stop))echo dol_print_date($date_start)." - ".dol_print_date($date_stop); print ''; print ''; -//if (! empty($arrayfields['f.datef']['checked'])) +//if (! empty($arrayfields['f.datef']['checked'])) print_liste_field_titre($arrayfields['date']['label'],$_SERVER["PHP_SELF"],"date","",$param,'align="center" class="nowrap"',$sortfield,$sortorder); print ''; print ''; @@ -261,53 +231,41 @@ print ''; print ''; print ''; print ''; - print ''; - if ($result) { $TData = dol_sort_array($filesarray, 'date', 'ASC'); - if(empty($TData)) { - print ''; - } else { + if(empty($TData)) { + print ''; + } else { + // Sort array by date ASC to calucalte balance - // Sort array by date ASC to calucalte balance - - $totalDebit = 0; - $totalCredit = 0; - // Balance calculation - $balance = 0; - foreach($TData as &$data1) { - if($data1['item']!='Invoice'&& $data1['item']!='Donation' ){ + $totalDebit = 0; + $totalCredit = 0; + // Balance calculation + $balance = 0; + foreach($TData as &$data1) { + if($data1['item']!='Invoice'&& $data1['item']!='Donation' ){ $data1['amount']=-$data1['amount']; } if ($data1['amount']>0){ - - }else{ - + }else{ } $balance += $data1['amount']; - $data1['balance'] = $balance; - } - - - + $data1['balance'] = $balance; + } // Display array foreach($TData as $data) { - $html_class = ''; //if (!empty($data['fk_facture'])) $html_class = 'facid-'.$data['fk_facture']; //elseif (!empty($data['fk_paiement'])) $html_class = 'payid-'.$data['fk_paiement']; - print ''; - print "\n"; print ''; print ''; print '\n"; - print ''; print '\n"; $totalDebit += ($data['amount'] > 0) ? abs($data['amount']) : 0; @@ -315,12 +273,8 @@ if ($result) $totalCredit += ($data['amount'] > 0) ? 0 : abs($data['amount']); // Balance print '\n"; - - - print "\n"; } - print ''; print ''; print ''; @@ -328,16 +282,24 @@ if ($result) print ''; print ''; print "\n"; - } + } - - } + } print "
'.$langs->trans("Type").''.$langs->trans("Ref").''.$langs->trans("Paid").''.$langs->trans("Debit").''.$langs->trans("Credit").''.$langs->trans("Balance").'
'.$langs->trans("NoItem").'
'.$langs->trans("NoItem").'
"; print dol_print_date($data['date'],'day'); print "'.$data['item'].''.$data['ref'].' ".$data['name']."'.$data['paid'].''.(($data['amount'] > 0) ? price(abs($data['amount'])) : '')."'.price($data['balance'])."
 '.price($totalDebit).''.price(price2num($totalDebit - $totalCredit, 'MT')).'
"; print '
'."\n\t\t\t"; -print ''; -print ''; +print ''; +print ''; + +print ''; +print ''; +print ''; + + + + print '
'."\n\t\t\n\t\t\n\t\t\t"; -llxFooter(); + +llxFooter(); $db->close(); From e36bc24dee44d25646a31a3a38f247a150414265 Mon Sep 17 00:00:00 2001 From: delcroix Patrick Date: Tue, 11 Sep 2018 21:55:05 +0200 Subject: [PATCH 5/6] fix:copyrights --- htdocs/compta/compta-files.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/htdocs/compta/compta-files.php b/htdocs/compta/compta-files.php index 679d21c000f..ef8c612ed84 100644 --- a/htdocs/compta/compta-files.php +++ b/htdocs/compta/compta-files.php @@ -1,7 +1,5 @@ - * Copyright (C) 2004-2017 Laurent Destailleur - * Copyright (C) 2017 Pierre-Henry Favre +/* Copyright (C) 2018 Patrick Delcroix * * 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 From 2a4c65726c0d0ab1f893e6aaedda268133a69ac0 Mon Sep 17 00:00:00 2001 From: delcroix Patrick Date: Tue, 11 Sep 2018 22:14:58 +0200 Subject: [PATCH 6/6] new: delete zip after download and correct date 2.0 --- htdocs/compta/compta-files.php | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/htdocs/compta/compta-files.php b/htdocs/compta/compta-files.php index ef8c612ed84..2a4af918234 100644 --- a/htdocs/compta/compta-files.php +++ b/htdocs/compta/compta-files.php @@ -1,5 +1,8 @@ + +/* Copyright (C) 2001-2006 Rodolphe Quiedeville + * Copyright (C) 2004-2017 Laurent Destailleur + * Copyright (C) 2017 Pierre-Henry Favre * * 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 @@ -185,7 +188,7 @@ if(($action=="searchfiles"||$action=="dl" ) && $date_start && $date_stop){ if($result & $action=="dl"){ unset($zip); $log='date,type,ref,total,paid,filename,item_id'."\n"; - $zipname = 'export.zip'; + $zipname = ($date_start)."-".($date_stop).'_export.zip'; $zip = new ZipArchive; $res = $zip->open($zipname, ZipArchive::OVERWRITE|ZipArchive::CREATE); if ($res){ @@ -200,6 +203,7 @@ if($result & $action=="dl"){ header('Content-disposition: attachment; filename='.$zipname); header('Content-Length: ' . filesize($zipname)); readfile($zipname); + unlink($zipname); exit(); } } @@ -285,14 +289,17 @@ if ($result) } print ""; print '
'."\n\t\t\t"; -print ''; -print ''; -print ''; -print ''; -print ''; +print ''; +print ''; +//print ''; +//print ''; +//print ''; +//print ''; +//print ''; +//print ''; print '
'."\n\t\t\n\t\t\n\t\t\t";