From abb6b41f91bb2d309fd8e9697ff23266554329fa Mon Sep 17 00:00:00 2001 From: John BOTELLA Date: Wed, 7 Nov 2018 11:25:13 +0100 Subject: [PATCH 01/17] Fix screen size fall --- htdocs/comm/remx.php | 8 ++++---- htdocs/theme/eldy/style.css.php | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/htdocs/comm/remx.php b/htdocs/comm/remx.php index 3eec109e6b3..7e849279b95 100644 --- a/htdocs/comm/remx.php +++ b/htdocs/comm/remx.php @@ -407,7 +407,7 @@ if ($socid > 0) if($isCustomer) { if($isSupplier) { print '
'; - print '
'; + print '
'; print load_fiche_titre($langs->trans("CustomerDiscounts"), '', ''); } @@ -540,7 +540,7 @@ if ($socid > 0) if($isSupplier) { if($isCustomer) { print '
'; // class="fichehalfleft" - print '
'; + print '
'; print '
'; print load_fiche_titre($langs->trans("SupplierDiscounts"), '', ''); } @@ -691,7 +691,7 @@ if ($socid > 0) if($isCustomer) { if($isSupplier) { print '
'; - print '
'; + print '
'; print load_fiche_titre($langs->trans("CustomerDiscounts"), '', ''); } @@ -842,7 +842,7 @@ if ($socid > 0) if($isSupplier) { if($isCustomer) { print '
'; // class="fichehalfleft" - print '
'; + print '
'; print '
'; print load_fiche_titre($langs->trans("SupplierDiscounts"), '', ''); } diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index e2b87857c95..63e23ac3fe2 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -1357,6 +1357,23 @@ div.secondcolumn div.box { } } +/* Force values on one colum for small screen */ +@media only screen and (max-width: 1599px) +{ + div.fichehalfleft-lg { + float: none; + width: auto; + } + div.fichehalfright-lg { + float: none; + width: auto; + } + + .fichehalfright-lg .ficheaddleft{ + padding-left:0; + } +} + /* For table into table into card */ div.ficheaddleft tr.liste_titre:first-child td table.nobordernopadding td { padding: 0 0 0 0; From c422904b990cb329276a72e430c471a658c782aa Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Sat, 1 Dec 2018 16:51:40 +0100 Subject: [PATCH 02/17] fix #9964 --- htdocs/commande/list.php | 4 ++-- htdocs/core/class/extrafields.class.php | 5 ++++- .../core/tpl/extrafields_list_search_sql.tpl.php | 16 ++++++++++------ 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index 4841e9be410..bbdf59a295c 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -468,8 +468,8 @@ if ($resql) print ''; print ''; print ''; - - + + print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_commercial.png', 0, $newcardbutton, '', $limit); $topicmail="SendOrderRef"; diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 1840f62ca5d..ee87426ddcb 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -1927,7 +1927,10 @@ class ExtraFields // Get extra fields foreach ($extralabels as $key => $value) { - $key_type = $this->attributes[$object->table_element]['type'][$key]; + $key_type=$this->attribute_type[$key]; + if (! empty($object->table_element)) { + $key_type=$this->attributes[$extrafieldsobjectkey]['type'][$key]; + } if (in_array($key_type,array('date','datetime'))) { diff --git a/htdocs/core/tpl/extrafields_list_search_sql.tpl.php b/htdocs/core/tpl/extrafields_list_search_sql.tpl.php index a8e43d6429f..8492160c185 100644 --- a/htdocs/core/tpl/extrafields_list_search_sql.tpl.php +++ b/htdocs/core/tpl/extrafields_list_search_sql.tpl.php @@ -17,13 +17,17 @@ if (! empty($extrafieldsobjectkey)) // $extrafieldsobject is the $object->table_ $crit=$val; $tmpkey=preg_replace('/search_options_/','',$key); $typ=$extrafields->attributes[$extrafieldsobjectkey]['type'][$tmpkey]; - - $mode_search=0; - if (in_array($typ, array('int','double','real'))) $mode_search=1; // Search on a numeric - if (in_array($typ, array('sellist','link')) && $crit != '0' && $crit != '-1') $mode_search=2; // Search on a foreign key int - if (in_array($typ, array('chkbxlst','checkbox'))) $mode_search=4; // Search on a multiselect field with sql type = text - if ($crit != '' && (! in_array($typ, array('select','sellist')) || $crit != '0') && (! in_array($typ, array('link')) || $crit != '-1')) + if ($crit != '' && in_array($typ, array('date', 'datetime', 'timestamp'))) { + $sql .= " AND ef.".$tmpkey." = '".$db->idate($crit)."'"; + } + elseif ($crit != '' && (! in_array($typ, array('select','sellist')) || $crit != '0') && (! in_array($typ, array('link')) || $crit != '-1')) + { + $mode_search=0; + if (in_array($typ, array('int','double','real'))) $mode_search=1; // Search on a numeric + if (in_array($typ, array('sellist','link')) && $crit != '0' && $crit != '-1') $mode_search=2; // Search on a foreign key int + if (in_array($typ, array('chkbxlst','checkbox'))) $mode_search=4; // Search on a multiselect field with sql type = text + $sql .= natural_search('ef.'.$tmpkey, $crit, $mode_search); } } From e2727f6d91a1c110bf613a3cefdc102f25a648f5 Mon Sep 17 00:00:00 2001 From: fappels Date: Thu, 6 Dec 2018 21:43:10 +0100 Subject: [PATCH 03/17] Fix issue #10186 no display of stock per batch series. --- htdocs/expedition/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/expedition/card.php b/htdocs/expedition/card.php index cc54f7bed5b..d6b9c53b168 100644 --- a/htdocs/expedition/card.php +++ b/htdocs/expedition/card.php @@ -1376,7 +1376,7 @@ if ($action == 'create') $detail.= $langs->trans("Batch").': '.$dbatch->batch; $detail.= ' - '.$langs->trans("SellByDate").': '.dol_print_date($dbatch->sellby,"day"); $detail.= ' - '.$langs->trans("EatByDate").': '.dol_print_date($dbatch->eatby,"day"); - $detail.= ' - '.$langs->trans("Qty").': '.$dbatch->dluo_qty; + $detail.= ' - '.$langs->trans("Qty").': '.$dbatch->qty; $detail.= '
'; print $detail; From 550df138a652b612a1fbf238a0ea6da833162085 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Fri, 7 Dec 2018 12:19:50 +0100 Subject: [PATCH 04/17] Fix unexistant fields --- htdocs/core/modules/modSociete.class.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/htdocs/core/modules/modSociete.class.php b/htdocs/core/modules/modSociete.class.php index 4a814954072..34f4dca8510 100644 --- a/htdocs/core/modules/modSociete.class.php +++ b/htdocs/core/modules/modSociete.class.php @@ -477,14 +477,11 @@ class modSociete extends DolibarrModules $this->import_tables_array[$r]=array('sr'=>MAIN_DB_PREFIX.'societe_rib'); $this->import_fields_array[$r]=array('sr.fk_soc'=>"ThirdPartyName*",'sr.bank'=>"Bank", 'sr.code_banque'=>"BankCode",'sr.code_guichet'=>"DeskCode",'sr.number'=>"BankAccountNumber*", - 'sr.cle_rib'=>"BankAccountNumberKey",'sr.bic'=>"BIC",'sr.iban_prefix'=>"IBAN", 'sr.domiciliation'=>"BankAccountDomiciliation",'sr.proprio' => "BankAccountOwner", 'sr.owner_address' => "BankAccountOwnerAddress", 'sr.default_rib' => 'Default', - 'sr.fk_departement'=>"StateId",'sr.fk_pays'=>"CountryCode" + 'sr.cle_rib'=>"BankAccountNumberKey",'sr.bic'=>"BIC",'sr.iban_prefix'=>"IBAN", 'sr.domiciliation'=>"BankAccountDomiciliation",'sr.proprio' => "BankAccountOwner", 'sr.owner_address' => "BankAccountOwnerAddress", 'sr.default_rib' => 'Default' ); $this->import_convertvalue_array[$r]=array( - 'sr.fk_soc'=>array('rule'=>'fetchidfromref','classfile'=>'/societe/class/societe.class.php','class'=>'Societe','method'=>'fetch','element'=>'ThirdParty'), - 'sr.fk_departement'=>array('rule'=>'fetchidfromcodeid','classfile'=>'/core/class/cstate.class.php','class'=>'Cstate','method'=>'fetch','dict'=>'DictionaryState'), - 'sr.fk_pays'=>array('rule'=>'fetchidfromcodeid','classfile'=>'/core/class/ccountry.class.php','class'=>'Ccountry','method'=>'fetch','dict'=>'DictionaryCountry'), + 'sr.fk_soc'=>array('rule'=>'fetchidfromref','classfile'=>'/societe/class/societe.class.php','class'=>'Societe','method'=>'fetch','element'=>'ThirdParty') ); $this->import_examplevalues_array[$r]=array('sr.fk_soc'=>"MyBigCompany",'sr.bank'=>"ING", 'sr.code_banque'=>"0000", 'sr.code_guichet'=>"1111",'sr.number'=>"3333333333", From 2e57a8be51625f80e8240f1aa0b288abc760834f Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Thu, 13 Dec 2018 12:37:40 +0100 Subject: [PATCH 05/17] better fix --- htdocs/core/class/extrafields.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index ee87426ddcb..8ecae833805 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -1928,8 +1928,8 @@ class ExtraFields foreach ($extralabels as $key => $value) { $key_type=$this->attribute_type[$key]; - if (! empty($object->table_element)) { - $key_type=$this->attributes[$extrafieldsobjectkey]['type'][$key]; + if (! empty($object->table_element) && is_array($this->attributes) && array_key_exists($object->table_element, $this->attributes)) { + $key_type=$this->attributes[$object->table_element]['type'][$key]; } if (in_array($key_type,array('date','datetime'))) From e069da69ba2777639898ae641a265183de77933f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 15 Dec 2018 12:35:37 +0100 Subject: [PATCH 06/17] Revert "Fix screen size fall" This reverts commit abb6b41f91bb2d309fd8e9697ff23266554329fa. --- htdocs/comm/remx.php | 8 ++++---- htdocs/theme/eldy/style.css.php | 17 ----------------- 2 files changed, 4 insertions(+), 21 deletions(-) diff --git a/htdocs/comm/remx.php b/htdocs/comm/remx.php index 9c5f4bc53d8..a66e8e66500 100644 --- a/htdocs/comm/remx.php +++ b/htdocs/comm/remx.php @@ -407,7 +407,7 @@ if ($socid > 0) if($isCustomer) { if($isSupplier) { print '
'; - print '
'; + print '
'; print load_fiche_titre($langs->trans("CustomerDiscounts"), '', ''); } @@ -542,7 +542,7 @@ if ($socid > 0) if($isSupplier) { if($isCustomer) { print '
'; // class="fichehalfleft" - print '
'; + print '
'; print '
'; print load_fiche_titre($langs->trans("SupplierDiscounts"), '', ''); } @@ -695,7 +695,7 @@ if ($socid > 0) if($isCustomer) { if($isSupplier) { print '
'; - print '
'; + print '
'; print load_fiche_titre($langs->trans("CustomerDiscounts"), '', ''); } @@ -848,7 +848,7 @@ if ($socid > 0) if($isSupplier) { if($isCustomer) { print '
'; // class="fichehalfleft" - print '
'; + print '
'; print '
'; print load_fiche_titre($langs->trans("SupplierDiscounts"), '', ''); } diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index 39278ffe367..0097eb4715c 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -1357,23 +1357,6 @@ div.secondcolumn div.box { } } -/* Force values on one colum for small screen */ -@media only screen and (max-width: 1599px) -{ - div.fichehalfleft-lg { - float: none; - width: auto; - } - div.fichehalfright-lg { - float: none; - width: auto; - } - - .fichehalfright-lg .ficheaddleft{ - padding-left:0; - } -} - /* For table into table into card */ div.ficheaddleft tr.liste_titre:first-child td table.nobordernopadding td { padding: 0 0 0 0; From 2a3b808da6eb2fa2563a4c6f49739f7b9b70212e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 15 Dec 2018 14:05:23 +0100 Subject: [PATCH 07/17] CSS --- htdocs/theme/eldy/style.css.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index 4a36fa4a197..84d065280cb 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -907,9 +907,9 @@ div.fiche { min-width: 150px; } .thumbstat150 { - min-width: 170px; - max-wdith: 171px; - /* width: 170px; If I use with, there is trouble on size of flex boxes solved with min+max that is a little bit higer than min */ + min-width: 168px; + max-width: 169px; + /* width: 168px; If I use with, there is trouble on size of flex boxes solved with min+max that is a little bit higer than min */ } .thumbstat, .thumbstat150 { browser->name == 'ie') { ?> From db46d82de3b947735262a4386f3970b7a46071f0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 15 Dec 2018 15:35:59 +0100 Subject: [PATCH 08/17] Fix position of menu entries --- htdocs/core/menus/standard/eldy.lib.php | 77 +++++++++++++------------ htdocs/core/modules/modAgenda.class.php | 2 +- htdocs/core/modules/modECM.class.php | 2 +- htdocs/core/modules/modTicket.class.php | 3 +- 4 files changed, 42 insertions(+), 42 deletions(-) diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index ce2145d3986..c97307bd830 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -132,6 +132,37 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu,$noout=0,$mode $menu->add('/product/index.php?mainmenu=products&leftmenu=', $chaine, 0, $showmode, $atarget, "products", '', 30, $id, $idsel, $classname); } + // Projects + $tmpentry=array('enabled'=>(! empty($conf->projet->enabled)), + 'perms'=>(! empty($user->rights->projet->lire)), + 'module'=>'projet'); + $showmode=isVisibleToUserType($type_user, $tmpentry, $listofmodulesforexternal); + if ($showmode) + { + $langs->load("projects"); + + $classname=""; + if ($_SESSION["mainmenu"] && $_SESSION["mainmenu"] == "project") { $classname='class="tmenusel"'; $_SESSION['idmenu']=''; } + else $classname = 'class="tmenu"'; + $idsel='project'; + + $title = $langs->trans("LeadsOrProjects"); // Leads and opportunities by default + $showmodel = $showmodep = $showmode; + if (empty($conf->global->PROJECT_USE_OPPORTUNITIES)) + { + $title = $langs->trans("Projects"); + $showmodel = 0; + } + if ($conf->global->PROJECT_USE_OPPORTUNITIES == 2) { + $title = $langs->trans("Leads"); + $showmodep = 0; + } + + $menu->add('/projet/index.php?mainmenu=project&leftmenu=', $title, 0, $showmode, $atarget, "project", '', 35, $id, $idsel, $classname); + //$menu->add('/projet/index.php?mainmenu=project&leftmenu=&search_opp_status=openedopp', $langs->trans("ListLeads"), 0, $showmodel & $conf->global->PROJECT_USE_OPPORTUNITIES, $atarget, "project", '', 70, $id, $idsel, $classname); + //$menu->add('/projet/index.php?mainmenu=project&leftmenu=&search_opp_status=notopenedopp', $langs->trans("ListProjects"), 0, $showmodep, $atarget, "project", '', 70, $id, $idsel, $classname); + } + // Commercial $menuqualified=0; if (! empty($conf->propal->enabled)) $menuqualified++; @@ -222,37 +253,6 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu,$noout=0,$mode $menu->add('/accountancy/index.php?mainmenu=accountancy&leftmenu=', $langs->trans("MenuAccountancy"), 0, $showmode, $atarget, "accountancy", '', 54, $id, $idsel, $classname); } - // Projects - $tmpentry=array('enabled'=>(! empty($conf->projet->enabled)), - 'perms'=>(! empty($user->rights->projet->lire)), - 'module'=>'projet'); - $showmode=isVisibleToUserType($type_user, $tmpentry, $listofmodulesforexternal); - if ($showmode) - { - $langs->load("projects"); - - $classname=""; - if ($_SESSION["mainmenu"] && $_SESSION["mainmenu"] == "project") { $classname='class="tmenusel"'; $_SESSION['idmenu']=''; } - else $classname = 'class="tmenu"'; - $idsel='project'; - - $title = $langs->trans("LeadsOrProjects"); // Leads and opportunities by default - $showmodel = $showmodep = $showmode; - if (empty($conf->global->PROJECT_USE_OPPORTUNITIES)) - { - $title = $langs->trans("Projects"); - $showmodel = 0; - } - if ($conf->global->PROJECT_USE_OPPORTUNITIES == 2) { - $title = $langs->trans("Leads"); - $showmodep = 0; - } - - $menu->add('/projet/index.php?mainmenu=project&leftmenu=', $title, 0, $showmode, $atarget, "project", '', 70, $id, $idsel, $classname); - //$menu->add('/projet/index.php?mainmenu=project&leftmenu=&search_opp_status=openedopp', $langs->trans("ListLeads"), 0, $showmodel & $conf->global->PROJECT_USE_OPPORTUNITIES, $atarget, "project", '', 70, $id, $idsel, $classname); - //$menu->add('/projet/index.php?mainmenu=project&leftmenu=&search_opp_status=notopenedopp', $langs->trans("ListProjects"), 0, $showmodep, $atarget, "project", '', 70, $id, $idsel, $classname); - } - // HRM $tmpentry=array('enabled'=>(! empty($conf->hrm->enabled) || ! empty($conf->holiday->enabled) || ! empty($conf->deplacement->enabled) || ! empty($conf->expensereport->enabled)), 'perms'=>(! empty($user->rights->hrm->employee->read) || ! empty($user->rights->holiday->write) || ! empty($user->rights->deplacement->lire) || ! empty($user->rights->expensereport->lire)), @@ -1196,8 +1196,8 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu */ if ($mainmenu == 'bank') { - // Load translation files required by the page - $langs->loadLangs(array("withdrawals","banks","bills","categories")); + // Load translation files required by the page + $langs->loadLangs(array("withdrawals","banks","bills","categories")); // Bank-Caisse if (! empty($conf->banque->enabled)) @@ -1212,11 +1212,12 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu $newmenu->add("/compta/bank/transfer.php",$langs->trans("MenuBankInternalTransfer"),1,$user->rights->banque->transfer); } - if (! empty($conf->categorie->enabled)) { - $langs->load("categories"); - $newmenu->add("/categories/index.php?type=5",$langs->trans("Rubriques"),1,$user->rights->categorie->creer, '', $mainmenu, 'tags'); - $newmenu->add("/compta/bank/categ.php",$langs->trans("RubriquesTransactions"),1,$user->rights->categorie->creer, '', $mainmenu, 'tags'); - } + if (! empty($conf->categorie->enabled)) + { + $langs->load("categories"); + $newmenu->add("/categories/index.php?type=5",$langs->trans("Rubriques"),1,$user->rights->categorie->creer, '', $mainmenu, 'tags'); + $newmenu->add("/compta/bank/categ.php",$langs->trans("RubriquesTransactions"),1,$user->rights->categorie->creer, '', $mainmenu, 'tags'); + } // Prelevements if (! empty($conf->prelevement->enabled)) diff --git a/htdocs/core/modules/modAgenda.class.php b/htdocs/core/modules/modAgenda.class.php index 50e767fe411..2324bfad616 100644 --- a/htdocs/core/modules/modAgenda.class.php +++ b/htdocs/core/modules/modAgenda.class.php @@ -210,7 +210,7 @@ class modAgenda extends DolibarrModules 'mainmenu'=>'agenda', 'url'=>'/comm/action/index.php', 'langs'=>'agenda', - 'position'=>15, + 'position'=>86, 'perms'=>'$user->rights->agenda->myactions->read', 'enabled'=>'$conf->agenda->enabled', 'target'=>'', diff --git a/htdocs/core/modules/modECM.class.php b/htdocs/core/modules/modECM.class.php index c4c00597885..593f702ac52 100644 --- a/htdocs/core/modules/modECM.class.php +++ b/htdocs/core/modules/modECM.class.php @@ -129,7 +129,7 @@ class modECM extends DolibarrModules 'mainmenu'=>'ecm', 'url'=>'/ecm/index.php', 'langs'=>'ecm', - 'position'=>100, + 'position'=>82, 'perms'=>'$user->rights->ecm->read || $user->rights->ecm->upload || $user->rights->ecm->setup', 'enabled'=>'$conf->ecm->enabled', 'target'=>'', diff --git a/htdocs/core/modules/modTicket.class.php b/htdocs/core/modules/modTicket.class.php index 79e4d015a5e..08f1050df32 100644 --- a/htdocs/core/modules/modTicket.class.php +++ b/htdocs/core/modules/modTicket.class.php @@ -32,7 +32,6 @@ require_once DOL_DOCUMENT_ROOT . "/core/modules/DolibarrModules.class.php"; */ class modTicket extends DolibarrModules { - /** * Constructor. Define names, constants, directories, boxes, permissions * @@ -194,7 +193,7 @@ class modTicket extends DolibarrModules 'leftmenu' => '1', // Use 1 if you also want to add left menu entries using this descriptor. 'url' => '/ticket/index.php', 'langs' => 'ticket', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. - 'position' => 100, + 'position' => 88, 'enabled' => '$conf->ticket->enabled', // Define condition to show or hide menu entry. Use '$conf->ticket->enabled' if entry must be visible if module is enabled. 'perms' => '$user->rights->ticket->read', // Use 'perms'=>'$user->rights->ticket->level1->level2' if you want your menu with a permission rules 'target' => '', From cdaf04876605b245179c4476af112a1967428ae9 Mon Sep 17 00:00:00 2001 From: andreubisquerra Date: Sat, 8 Dec 2018 21:33:54 +0100 Subject: [PATCH 09/17] First CashControl version --- htdocs/compta/cashcontrol/cashcontrol.php | 204 ++++++++++++ .../cashcontrol/class/cashcontrol.class.php | 199 ++++++++++++ htdocs/compta/cashcontrol/report.php | 303 ++++++++++++++++++ htdocs/core/menus/standard/eldy.lib.php | 7 + .../mysql/tables/llx_pos_cash_fence.sql | 34 ++ 5 files changed, 747 insertions(+) create mode 100644 htdocs/compta/cashcontrol/cashcontrol.php create mode 100644 htdocs/compta/cashcontrol/class/cashcontrol.class.php create mode 100644 htdocs/compta/cashcontrol/report.php create mode 100644 htdocs/install/mysql/tables/llx_pos_cash_fence.sql diff --git a/htdocs/compta/cashcontrol/cashcontrol.php b/htdocs/compta/cashcontrol/cashcontrol.php new file mode 100644 index 00000000000..6671b0562ee --- /dev/null +++ b/htdocs/compta/cashcontrol/cashcontrol.php @@ -0,0 +1,204 @@ + + * Copyright (C) 2004-2013 Laurent Destailleur + * Copyright (C) 2005-2009 Regis Houssin + * Copyright (C) 2013 Charles-Fr BENKE + * Copyright (C) 2015 Jean-François Ferry + * Copyright (C) 2016 Marcos García + * Copyright (C) 2018 Andreu Bisquerra + * + * 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/bank/categ.php + * \ingroup compta + * \brief Page ajout de categories bancaires + */ + +$res=@include("../main.inc.php"); +if (! $res) $res=@include("../../main.inc.php"); +include_once 'class/cashcontrol.class.php'; + +$langs->loadLangs(array("cashcontrol","install","cashdesk","admin")); + +$action=GETPOST('action','aZ09'); +$id=GETPOST('id'); + +if (!$user->rights->banque->configurer) + accessforbidden(); + +$categid = GETPOST('categid'); +$label = GETPOST("label"); + +if (empty($conf->global->CASHDESK_ID_BANKACCOUNT_CASH) or empty($conf->global->CASHDESK_ID_BANKACCOUNT_CB)) setEventMessages($langs->trans("CashDesk")." - ".$langs->trans("NotConfigured"), null, 'errors'); + +/* + * Add category + */ +if ($action=="start") +{ + $cashcontrol= new CashControl($db); + $cashcontrol->opening=GETPOST('opening'); + if (GETPOST('posmodule')==0) $cashcontrol->posmodule="cashdesk"; + else if (GETPOST('posmodule')==1) $cashcontrol->posmodule="takepos"; + $cashcontrol->posnumber=GETPOST('posnumber'); + $id=$cashcontrol->create($user); + $action="view"; +} + +if ($action=="close") +{ + $cashcontrol= new CashControl($db); + $cashcontrol->id=$id; + $cashcontrol->close($user); + $action="view"; +} + + +if ($action=="create") +{ +llxHeader(); + print load_fiche_titre("Cashcontrol - ".$langs->trans("New"), '', 'title_bank.png'); + print '
'; + print ''; + print ''; + print ''; + print ''; + print "\n"; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print '
'.$langs->trans("Ref").''.$langs->trans("InitialBankBalance").''.$langs->trans("Module").''.$langs->trans("CashDesk").' ID,
 '.$form->selectarray('posmodule', array('0'=>$langs->trans('CashDesk'),'1'=>$langs->trans('TakePOS')),1).'
'; +} + + +if ($action=="list") +{ +llxHeader(); + print load_fiche_titre("Cashcontrol - ".$langs->trans("List"), '', 'title_bank.png'); + print '
'; + print ''; + print ''; + print ''; + print ''; + print "\n"; + + $sql = "SELECT *"; + $sql.= " FROM "; + $sql.= MAIN_DB_PREFIX."pos_cash_fence order by rowid DESC"; + $result = $db->query($sql); + if ($result) { + $i = 0; + $num = $db->num_rows($result); + + while ($i < $num) { + print ''; + $objp = $db->fetch_object($result); + $totalpaye += $objp->amount; + print ''; + print ''; + $i ++; + } + } else { + //no hay + } + + print '
'.$langs->trans("Ref").''.$langs->trans("DateCreationShort").''.$langs->trans("DateEnd").''.$langs->trans("Cash").''.$langs->trans("PaymentTypeCB").''.$langs->trans("Status").'
'; + print ''.$objp->rowid.''; + print ''.dol_print_date($objp->date_creation, 'dayhour').''.dol_print_date(strtotime($objp->year_close."-".$objp->month_close."-".$objp->day_close), 'day').''; + if ($objp->status==2) print price($objp->cash); + print ''; + if ($objp->status==2) price($objp->card); + print ''; + if ($objp->status==1) print $langs->trans("Opened"); + if ($objp->status==2) print $langs->trans("Closed"); + print '
'; +} + + + +if ($action=="view") +{ + $cashcontrol= new CashControl($db); + $cashcontrol->fetch($id); + llxHeader(); + print load_fiche_titre($langs->trans("CashControl"), '', 'title_bank.png'); + print '
'; + print '
'; + print '
'; + print ''; + + print ''; + + print ''; + + print ''; + + print ''; + + print '
'; + print $langs->trans("Code"); + print ''; + print $id; + print '
'; + print $langs->trans("DateCreationShort"); + print ''; + print dol_print_date($cashcontrol->date_creation, 'dayhour'); + print '
'; + print $langs->trans("DateEnd"); + print ''; + print dol_print_date(strtotime($cashcontrol->year_close."-".$cashcontrol->month_close."-".$cashcontrol->day_close), 'day'); + print '
'; + print $langs->trans("Status"); + print ''; + if ($cashcontrol->status==1) print $langs->trans("Opened"); + if ($cashcontrol->status==2) print $langs->trans("Closed"); + print '
'; + print '
'; + print '
'; + print '
'; + print ''; + + print '"; + + print '"; + + print '"; + + print "
'.$langs->trans("InitialBankBalance").''; + print price($cashcontrol->opening); + print "
'.$langs->trans("CashDesk").' ID'; + print $cashcontrol->posnumber; + print "
'.$langs->trans("Module").''; + print $cashcontrol->posmodule; + print "
\n"; + print '
'; + print '
'; + print '
'; + + dol_fiche_end(); + + print '
'; + print ''; + if ($cashcontrol->status==1) print ''; + print '
'; + + print '
'; +} + +llxFooter(); diff --git a/htdocs/compta/cashcontrol/class/cashcontrol.class.php b/htdocs/compta/cashcontrol/class/cashcontrol.class.php new file mode 100644 index 00000000000..fcf80e093d8 --- /dev/null +++ b/htdocs/compta/cashcontrol/class/cashcontrol.class.php @@ -0,0 +1,199 @@ + + * Copyright (C) 2009 Regis Houssin + * Copyright (C) 2016 Marcos García + * Copyright (C) 2018 Andreu Bisquerra + * + * 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 cashcontrol/class/cashcontrol.class.php + * \ingroup bank + * \brief This file is CRUD class file (Create/Read/Update/Delete) for bank categories + */ + +/** + * Class to manage bank categories + */ +class CashControl // extends CommonObject +{ + public $id; + public $opening; + public $status; + public $date_creation; + public $year_close; + public $month_close; + public $day_close; + public $posmodule; + public $posnumber; + + + /** + * Constructor + * + * @param DoliDB $db Database handler + */ + public function __construct(DoliDB $db) + { + $this->db = $db; + } + + + /** + * Create in database + * + * @param User $user User that create + * @param int $notrigger 0=launch triggers after, 1=disable triggers + * @return int <0 if KO, Id of created object if OK + */ + public function create(User $user, $notrigger = 0) + { + global $conf; + + $error = 0; + + // Insert request + $sql = "INSERT INTO ".MAIN_DB_PREFIX."pos_cash_fence ("; + $sql .= "entity"; + $sql .= ", opening"; + $sql .= ", status"; + $sql .= ", date_creation"; + $sql .= ", posmodule"; + $sql .= ", posnumber"; + $sql .= ") VALUES ("; + $sql .= $conf->entity; + $sql .= ", ".$this->opening; + $sql .= ",1"; + $sql .= ", now()"; + $sql .= ", '".$this->posmodule."'"; + $sql .= ", '".$this->posnumber."'"; + $sql .= ")"; + + $this->db->begin(); + + dol_syslog(get_class($this)."::create", LOG_DEBUG); + $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."pos_cash_fence"); + } + + // Commit or rollback + if ($error) { + foreach ($this->errors as $errmsg) { + dol_syslog(get_class($this)."::create ".$errmsg, LOG_ERR); + $this->error .= ($this->error ? ', '.$errmsg : $errmsg); + } + $this->db->rollback(); + return -1 * $error; + } else { + $this->db->commit(); + return $this->id; + } + } + + + + + + public function close(User $user, $notrigger = 0) + { + global $conf; + + $error = 0; + + // Update request + $sql = "UPDATE ".MAIN_DB_PREFIX."pos_cash_fence "; + $sql .= "SET"; + $sql .= " day_close=DAYOFMONTH(NOW())"; + $sql .= ", month_close=MONTH(NOW())"; + $sql .= ", year_close=YEAR(NOW())"; + $sql .= ", status=2"; + $sql .= " where rowid=".$this->id; + $this->db->begin(); + + dol_syslog(get_class($this)."::create", LOG_DEBUG); + $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."pos_cash_fence"); + } + + // Commit or rollback + if ($error) { + foreach ($this->errors as $errmsg) { + dol_syslog(get_class($this)."::create ".$errmsg, LOG_ERR); + $this->error .= ($this->error ? ', '.$errmsg : $errmsg); + } + $this->db->rollback(); + return -1 * $error; + } else { + $this->db->commit(); + return $this->id; + } + } + + + + + + /** + * Load object in memory from database + * + * @param int $id Id object + * @return int <0 if KO, >0 if OK + */ + public function fetch($id) + { + global $conf; + + $sql = "SELECT"; + $sql .= " *"; + $sql .= " FROM ".MAIN_DB_PREFIX."pos_cash_fence"; + $sql .= " WHERE rowid = ".$id; + $sql .= " AND entity = ".$conf->entity; + + dol_syslog(get_class($this)."::fetch", LOG_DEBUG); + $resql = $this->db->query($sql); + if ($resql) { + if ($this->db->num_rows($resql)) { + $obj = $this->db->fetch_object($resql); + $this->opening = $obj->opening; + $this->status = $obj->status; + $this->date_creation = $obj->date_creation; + $this->year_close = $obj->year_close; + $this->month_close = $obj->month_close; + $this->day_close = $obj->day_close; + $this->posmodule = $obj->posmodule; + $this->posnumber = $obj->posnumber; + $this->id=$id; + } + $this->db->free($resql); + + return 1; + } else { + $this->error = "Error ".$this->db->lasterror(); + return -1; + } + } +} diff --git a/htdocs/compta/cashcontrol/report.php b/htdocs/compta/cashcontrol/report.php new file mode 100644 index 00000000000..8dd3075d8c7 --- /dev/null +++ b/htdocs/compta/cashcontrol/report.php @@ -0,0 +1,303 @@ + + * Copyright (C) 2004-2016 Laurent Destailleur + * Copyright (C) 2005-2010 Regis Houssin + * Copyright (C) 2012 Vinícius Nogueira + * Copyright (C) 2014 Florian Henry + * Copyright (C) 2015 Jean-François Ferry + * Copyright (C) 2016 Juanjo Menent + * Copyright (C) 2017 Alexandre Spangaro + * Copyright (C) 2018 Andreu Bisquerra + * + * 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/bank/bankentries_list.php + * \ingroup banque + * \brief List of bank transactions + */ + +$res=@include("../main.inc.php"); +if (! $res) $res=@include("../../main.inc.php"); +require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; + +$id = GETPOST('id','int'); + +$_GET['optioncss']="print"; +include_once 'class/cashcontrol.class.php'; +$cashcontrol= new CashControl($db); +$cashcontrol->fetch($id); + +$limit = GETPOST('limit')?GETPOST('limit','int'):$conf->liste_limit; +$sortorder='ASC'; +$sortfield='b.datev,b.dateo,b.rowid'; + +$arrayfields=array( + 'b.rowid'=>array('label'=>$langs->trans("Ref"), 'checked'=>1), + 'b.dateo'=>array('label'=>$langs->trans("DateOperationShort"), 'checked'=>1), + 'b.num_chq'=>array('label'=>$langs->trans("Number"), 'checked'=>1), + 'ba.ref'=>array('label'=>$langs->trans("BankAccount"), 'checked'=>1), + 'b.debit'=>array('label'=>$langs->trans("Debit"), 'checked'=>1, 'position'=>600), + 'b.credit'=>array('label'=>$langs->trans("Credit"), 'checked'=>1, 'position'=>605), +); + +/* + * View + */ + +llxHeader('', $langs->trans("CashControl"), '', '', 0, 0, array(), array(), $param); + +$sql = "SELECT b.rowid, b.dateo as do, b.datev as dv, b.amount, b.label, b.rappro as conciliated, b.num_releve, b.num_chq,"; +$sql.= " b.fk_account, b.fk_type,"; +$sql.= " ba.rowid as bankid, ba.ref as bankref,"; +$sql.= " bu.url_id,"; +$sql.= " f.module_source, f.facnumber as facnumber"; +$sql.= " FROM "; +if ($bid) $sql.= MAIN_DB_PREFIX."bank_class as l,"; +$sql.= " ".MAIN_DB_PREFIX."bank_account as ba,"; +$sql.= " ".MAIN_DB_PREFIX."bank as b"; +$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."bank_url as bu ON bu.fk_bank = b.rowid AND type = 'payment'"; +$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."facture as f ON bu.url_id = f.rowid"; +$sql.= " WHERE b.fk_account = ba.rowid"; +$sql.= " AND f.module_source='$cashcontrol->posmodule'"; +$sql.= " AND ba.entity IN (".getEntity('bank_account').")"; + +$sql.=" AND b.datec>'".$cashcontrol->date_creation."'"; +if ($cashcontrol->date_close>0) $sql.=" AND b.datec<'".$cashcontrol->date_close."'"; +$sql.=" AND (b.fk_account="; +$sql.=$conf->global->CASHDESK_ID_BANKACCOUNT_CASH; +$sql.=" or b.fk_account="; +$sql.=$conf->global->CASHDESK_ID_BANKACCOUNT_CB; +$sql.=")"; +$resql = $db->query($sql); +if ($resql) +{ + $num = $db->num_rows($resql); + $i = 0; + + print "

"; + if ($cashcontrol->status==2) print "Cashcontrol ".$cashcontrol->id; + else print $langs->trans("Cashcontrol")." - ".$langs->trans("Draft"); + print "
".$langs->trans("DateCreationShort").": ".dol_print_date($cashcontrol->date_creation, 'day')."

"; + + + print '
'; + print ''."\n"; + + // Fields title + print ''; + print_liste_field_titre($arrayfields['b.rowid']['label'],$_SERVER['PHP_SELF'],'b.rowid','',$param,'',$sortfield,$sortorder); + print_liste_field_titre($arrayfields['b.dateo']['label'],$_SERVER['PHP_SELF'],'b.dateo','',$param,'align="left"',$sortfield,$sortorder); + print_liste_field_titre($arrayfields['ba.ref']['label'],$_SERVER['PHP_SELF'],'ba.ref','',$param,'align="right"',$sortfield,$sortorder); + print_liste_field_titre($arrayfields['b.debit']['label'],$_SERVER['PHP_SELF'],'b.amount','',$param,'align="right"',$sortfield,$sortorder); + print_liste_field_titre($arrayfields['b.credit']['label'],$_SERVER['PHP_SELF'],'b.amount','',$param,'align="right"',$sortfield,$sortorder); + print "\n"; + + $balance = 0; // For balance + $balancecalculated = false; + $posconciliatecol = 0; + + // Loop on each record + $sign = 1; + + $totalarray=array(); + while ($i < min($num,$limit)) + { + $objp = $db->fetch_object($resql); + + // If we are in a situation where we need/can show balance, we calculate the start of balance + if (! $balancecalculated && (! empty($arrayfields['balancebefore']['checked']) || ! empty($arrayfields['balance']['checked'])) && $mode_balance_ok) + { + if (! $account) + { + dol_print_error('', 'account is not defined but $mode_balance_ok is true'); + exit; + } + + // Loop on each record before + $sign = 1; + $i = 0; + $sqlforbalance='SELECT SUM(b.amount) as balance'; + $sqlforbalance.= " FROM "; + $sqlforbalance.= " ".MAIN_DB_PREFIX."bank_account as ba,"; + $sqlforbalance.= " ".MAIN_DB_PREFIX."bank as b"; + $sqlforbalance.= " WHERE b.fk_account = ba.rowid"; + $sqlforbalance.= " AND ba.entity IN (".getEntity('bank_account').")"; + $sqlforbalance.= " AND b.fk_account = ".$account; + $sqlforbalance.= " AND (b.datev < '" . $db->idate($db->jdate($objp->dv)) . "' OR (b.datev = '" . $db->idate($db->jdate($objp->dv)) . "' AND (b.dateo < '".$db->idate($db->jdate($objp->do))."' OR (b.dateo = '".$db->idate($db->jdate($objp->do))."' AND b.rowid < ".$objp->rowid."))))"; + $resqlforbalance = $db->query($sqlforbalance); + if ($resqlforbalance) + { + $objforbalance = $db->fetch_object($resqlforbalance); + if ($objforbalance) + { + $balance = $objforbalance->balance; + } + } + else dol_print_error($db); + + $balancecalculated=true; + + // Output a line with start balance + if ($user->rights->banque->consolidate && $action == 'reconcile') + { + $tmpnbfieldbeforebalance=0; + $tmpnbfieldafterbalance=0; + $balancefieldfound=false; + foreach($arrayfields as $key => $val) + { + if ($key == 'balancebefore' || $key == 'balance') + { + $balancefieldfound=true; + continue; + } + if (! empty($arrayfields[$key]['checked'])) + { + if (! $balancefieldfound) $tmpnbfieldbeforebalance++; + else $tmpnbfieldafterbalance++; + } + } + + print ''; + if ($tmpnbfieldbeforebalance) + { + print ''; + } + print ''; + print ''; + print ''; + } + } + + $balance = price2num($balance + ($sign * $objp->amount),'MT'); + + if (empty($cachebankaccount[$objp->bankid])) + { + $bankaccounttmp = new Account($db); + $bankaccounttmp->fetch($objp->bankid); + $cachebankaccount[$objp->bankid]=$bankaccounttmp; + $bankaccount = $bankaccounttmp; + } + else + { + $bankaccount = $cachebankaccount[$objp->bankid]; + } + print ''; + + if ($first==""){ + print ''; + print ''; + $first="no"; + } + + // Ref + print ''; + if (! $i) $totalarray['nbfield']++; + + + // Date ope + print '\n"; + if (! $i) $totalarray['nbfield']++; + + // Bank account + print '\n"; + if (! $i) $totalarray['nbfield']++; + + // Debit + print '\n"; + if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['totaldebfield']=$totalarray['nbfield']; + + // Credit + print '\n"; + if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['totalcredfield']=$totalarray['nbfield']; + + print ""; + + $i++; + } + + // Show total line + if (isset($totalarray['totaldebfield']) || isset($totalarray['totalcredfield'])) + { + print ''; + $i=0; + while ($i < $totalarray['nbfield']) + { + $i++; + if ($i == 1) + { + if ($num < $limit && empty($offset)) print ''; + else print ''; + } + elseif ($totalarray['totaldebfield'] == $i) print ''; + elseif ($totalarray['totalcredfield'] == $i) print ''; + else print ''; + } + print ''; + } + + print "
'; + print ''; + print price(price2num($balance, 'MT'), 1, $langs); + print ''; + print '
'.$langs->trans("InitialBankBalance").''.price($cashcontrol->opening).'
'; + print $objp->facnumber; + print ''; + print ''.dol_print_date($db->jdate($objp->do),"day").""; + print "'; + print $bankaccount->getNomUrl(1); + if ($sql.=$conf->global->CASHDESK_ID_BANKACCOUNT_CASH==$bankaccount->rowid) $cash+=$objp->amount; + if ($sql.=$conf->global->CASHDESK_ID_BANKACCOUNT_CB==$bankaccount->rowid) $bank+=$objp->amount; + print "'; + if ($objp->amount < 0) + { + print price($objp->amount * -1); + $totalarray['totaldeb'] += $objp->amount; + } + print "'; + if ($objp->amount > 0) + { + print price($objp->amount); + $totalarray['totalcred'] += $objp->amount; + } + print "
'.$langs->trans("Total").''.$langs->trans("Totalforthispage").''.price(-1 * $totalarray['totaldeb']).''.price($totalarray['totalcred']).'
"; + + $cash=$cash+$cashcontrol->opening; + print "

".$langs->trans("Cash").": ".price($cash)."

".$langs->trans("PaymentTypeCB").": ".price($bank)."

"; + + + //save totals to DB + $sql = "UPDATE ".MAIN_DB_PREFIX."pos_cash_fence "; + $sql .= "SET"; + $sql .= " cash='".$cash."'"; + $sql .= ", card='".$bank."'"; + $sql .= " where rowid=".$id; + $db->query($sql); + + print "
"; + + print ''; + $db->free($resql); +} +else +{ + dol_print_error($db); +} + +llxFooter(); + +$db->close(); diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index c97307bd830..3667f2ec157 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1244,6 +1244,13 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu if (preg_match('/checks/',$leftmenu)) $newmenu->add("/compta/paiement/cheque/card.php?leftmenu=checks_bis&action=new&mainmenu=bank",$langs->trans("NewChequeDeposit"),1,$user->rights->banque->cheque); if (preg_match('/checks/',$leftmenu)) $newmenu->add("/compta/paiement/cheque/list.php?leftmenu=checks_bis&mainmenu=bank",$langs->trans("List"),1,$user->rights->banque->cheque); } + + //Cash Control + if ($conf->takepos->enabled or $conf->cashdesk->enabled){ + $newmenu->add("/compta/cashcontrol/cashcontrol.php?action=list",$langs->trans("CashControl"),0,1, '', $mainmenu, 'cashcontrol'); + $newmenu->add("/compta/cashcontrol/cashcontrol.php?action=list",$langs->trans("List"),1,1); + $newmenu->add("/compta/cashcontrol/cashcontrol.php?action=create",$langs->trans("New"),1,1); + } } /* diff --git a/htdocs/install/mysql/tables/llx_pos_cash_fence.sql b/htdocs/install/mysql/tables/llx_pos_cash_fence.sql new file mode 100644 index 00000000000..f8014e17366 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_pos_cash_fence.sql @@ -0,0 +1,34 @@ +-- Copyright (C) 2018 Andreu Bisquerra +-- +-- 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 http://www.gnu.org/licenses/. + + +CREATE TABLE llx_pos_cash_fence( + rowid INTEGER AUTO_INCREMENT PRIMARY KEY, + entity INTEGER DEFAULT 1 NOT NULL, + label VARCHAR(255), + opening double(24,8) default 0, + cash double(24,8) default 0, + card double(24,8) default 0, + status INTEGER, + date_creation DATETIME NOT NULL, + day_close INTEGER, + month_close INTEGER, + year_close INTEGER, + posmodule VARCHAR(30), + posnumber VARCHAR(30), + fk_user_valid integer, + tms TIMESTAMP NOT NULL, + import_key VARCHAR(14) +) ENGINE=innodb; \ No newline at end of file From 33a91ff70779a3a8b5dfa5d7f974b44dd8acf3f7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 15 Dec 2018 16:47:06 +0100 Subject: [PATCH 10/17] Add missing POS closure feature --- .../install/mysql/migration/8.0.0-9.0.0.sql | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/htdocs/install/mysql/migration/8.0.0-9.0.0.sql b/htdocs/install/mysql/migration/8.0.0-9.0.0.sql index 98dc051e984..ef89604058e 100644 --- a/htdocs/install/mysql/migration/8.0.0-9.0.0.sql +++ b/htdocs/install/mysql/migration/8.0.0-9.0.0.sql @@ -229,3 +229,24 @@ ALTER TABLE llx_societe_rib ADD COLUMN comment varchar(255); ALTER TABLE llx_societe_rib ADD COLUMN ipaddress varchar(68); DROP TABLE llx_ticket_logs; + + +CREATE TABLE llx_pos_cash_fence( + rowid INTEGER AUTO_INCREMENT PRIMARY KEY, + entity INTEGER DEFAULT 1 NOT NULL, + label VARCHAR(255), + opening double(24,8) default 0, + cash double(24,8) default 0, + card double(24,8) default 0, + status INTEGER, + date_creation DATETIME NOT NULL, + day_close INTEGER, + month_close INTEGER, + year_close INTEGER, + posmodule VARCHAR(30), + posnumber VARCHAR(30), + fk_user_valid integer, + tms TIMESTAMP NOT NULL, + import_key VARCHAR(14) +) ENGINE=innodb; + From 527ad04ae8b68a09dc8dbb75942c3d27981ebe96 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 15 Dec 2018 18:11:40 +0100 Subject: [PATCH 11/17] FIX Mandatory field feature should works on textarea Conflicts: htdocs/core/lib/functions.lib.php --- htdocs/core/lib/functions.lib.php | 11 ++-- htdocs/langs/en_US/admin.lang | 2 +- htdocs/public/members/new.php | 2 + htdocs/user/class/user.class.php | 98 +++++++++++++++++++------------ 4 files changed, 69 insertions(+), 44 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index e903777211d..39476ee97f3 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -7150,7 +7150,7 @@ function printCommonFooter($zone='private') if ($zone == 'private' && empty($conf->dol_use_jmobile)) { print "\n"; - print '/* JS CODE TO ENABLE to enable handler to switch left menu page (menuhider) */'."\n"; + print '/* JS CODE TO ENABLE to manage handler to switch left menu page (menuhider) */'."\n"; print 'jQuery(".menuhider").click(function() {'; print ' console.log("We click on .menuhider");'."\n"; //print " $('.side-nav').animate({width:'toggle'},200);\n"; // OK with eldy theme but not with md @@ -7160,9 +7160,9 @@ function printCommonFooter($zone='private') } // Management of focus and mandatory for fields - if ($action == 'create' || $action == 'edit') + if ($action == 'create' || $action == 'edit' || (empty($action) && (preg_match('/new\.php/', $_SERVER["PHP_SELF"])))) { - print '/* Code js to manage focus and mandatory form fields */'."\n"; + print '/* JS CODE TO ENABLE to manage focus and mandatory form fields */'."\n"; $relativepathstring = $_SERVER["PHP_SELF"]; // Clean $relativepathstring if (constant('DOL_URL_ROOT')) $relativepathstring = preg_replace('/^'.preg_quote(constant('DOL_URL_ROOT'),'/').'/', '', $relativepathstring); @@ -7191,8 +7191,10 @@ function printCommonFooter($zone='private') { foreach($defval as $paramkey => $paramval) { - // Add property 'required' on input + // Set focus on field print 'jQuery("input[name=\''.$paramkey.'\']").focus();'."\n"; + print 'jQuery("textarea[name=\''.$paramkey.'\']").focus();'."\n"; + print 'jQuery("select[name=\''.$paramkey.'\']").focus();'."\n"; // Not really usefull, but we keep it in case of. } } } @@ -7221,6 +7223,7 @@ function printCommonFooter($zone='private') { // Add property 'required' on input print 'jQuery("input[name=\''.$paramkey.'\']").prop(\'required\',true);'."\n"; + print 'jQuery("textarea[name=\''.$paramkey.'\']").prop(\'required\',true);'."\n"; print 'jQuery("select[name=\''.$paramkey.'\']").prop(\'required\',true);'."\n"; // required on a select works only if key is "", this does not happen in Dolibarr } } diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index d580fa90809..1a6487e4e26 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1819,7 +1819,7 @@ SocialNetworkSetup=Setup of module Social Networks EnableFeatureFor=Enable features for %s VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to Off in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales. SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF -FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only. Also an URL parameter action=create or action=edit' must be set OR page name must end with 'new.php' to trigger this feature. EmailCollector=Email collector EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads). NewEmailCollector=New Email Collector diff --git a/htdocs/public/members/new.php b/htdocs/public/members/new.php index 78b3ceb75db..9a85191e34f 100644 --- a/htdocs/public/members/new.php +++ b/htdocs/public/members/new.php @@ -76,6 +76,8 @@ $extrafields = new ExtraFields($db); $object = new Adherent($db); +$user->loadDefaultValues(); + /** * Show header for new member diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index 6c0ff6e4915..4aaaff7ed21 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -422,45 +422,9 @@ class User extends CommonObject return -2; } - // Load user->default_values for user. TODO Save this in memcached ? - $sql = "SELECT rowid, entity, type, page, param, value"; - $sql.= " FROM ".MAIN_DB_PREFIX."default_values"; - $sql.= " WHERE entity IN (".$this->entity.",".$conf->entity.")"; - $sql.= " AND user_id IN (0, ".$this->id.")"; - $resql = $this->db->query($sql); - if ($resql) - { - while ($obj = $this->db->fetch_object($resql)) - { - if (! empty($obj->page) && ! empty($obj->type) && ! empty($obj->param)) - { - // $obj->page is relative URL with or without params - // $obj->type can be 'filters', 'sortorder', 'createform', ... - // $obj->param is key or param - $pagewithoutquerystring=$obj->page; - $pagequeries=''; - if (preg_match('/^([^\?]+)\?(.*)$/', $pagewithoutquerystring, $reg)) // There is query param - { - $pagewithoutquerystring=$reg[1]; - $pagequeries=$reg[2]; - } - $this->default_values[$pagewithoutquerystring][$obj->type][$pagequeries?$pagequeries:'_noquery_'][$obj->param]=$obj->value; - //if ($pagequeries) $this->default_values[$pagewithoutquerystring][$obj->type.'_queries']=$pagequeries; - } - } - // Sort by key, so _noquery_ is last - if(!empty($this->default_values)) { - foreach($this->default_values as $a => $b) - { - foreach($b as $c => $d) - { - krsort($this->default_values[$a][$c]); - } - } - } - $this->db->free($resql); - } - else + $result = $this->loadDefaultValues(); + + if ($result < 0) { $this->error=$this->db->lasterror(); return -3; @@ -470,6 +434,62 @@ class User extends CommonObject return 1; } + /** + * Load default value in property ->default_values + * + * @return int > 0 if OK, < 0 if KO + */ + function loadDefaultValues() + { + global $conf; + + // Load user->default_values for user. TODO Save this in memcached ? + $sql = "SELECT rowid, entity, type, page, param, value"; + $sql.= " FROM ".MAIN_DB_PREFIX."default_values"; + $sql.= " WHERE entity IN (".($this->entity > 0 ? $this->entity.", " : "").$conf->entity.")"; // Entity of user (if defined) + current entity + $sql.= " AND user_id IN (0".($this->id > 0 ? ", ".$this->id : "").")"; // User 0 (all) + me (if defined) + $resql = $this->db->query($sql); + if ($resql) + { + while ($obj = $this->db->fetch_object($resql)) + { + if (! empty($obj->page) && ! empty($obj->type) && ! empty($obj->param)) + { + // $obj->page is relative URL with or without params + // $obj->type can be 'filters', 'sortorder', 'createform', ... + // $obj->param is key or param + $pagewithoutquerystring=$obj->page; + $pagequeries=''; + if (preg_match('/^([^\?]+)\?(.*)$/', $pagewithoutquerystring, $reg)) // There is query param + { + $pagewithoutquerystring=$reg[1]; + $pagequeries=$reg[2]; + } + $this->default_values[$pagewithoutquerystring][$obj->type][$pagequeries?$pagequeries:'_noquery_'][$obj->param]=$obj->value; + //if ($pagequeries) $this->default_values[$pagewithoutquerystring][$obj->type.'_queries']=$pagequeries; + } + } + // Sort by key, so _noquery_ is last + if(!empty($this->default_values)) { + foreach($this->default_values as $a => $b) + { + foreach($b as $c => $d) + { + krsort($this->default_values[$a][$c]); + } + } + } + $this->db->free($resql); + + return 1; + } + else + { + dol_print_error($this->db); + return -1; + } + } + /** * Add a right to the user * From 944f9ac89412df1f599f6a7166b2fab5e987238c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 15 Dec 2018 18:14:08 +0100 Subject: [PATCH 12/17] Typo --- htdocs/langs/en_US/admin.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 1a6487e4e26..01900aba754 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1819,7 +1819,7 @@ SocialNetworkSetup=Setup of module Social Networks EnableFeatureFor=Enable features for %s VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to Off in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales. SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF -FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only. Also an URL parameter action=create or action=edit' must be set OR page name must end with 'new.php' to trigger this feature. +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only. Also an URL parameter action=create or action=edit must be set OR page name must end with 'new.php' to trigger this feature. EmailCollector=Email collector EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads). NewEmailCollector=New Email Collector From 8ce6f6777343208367575355fe456e2a2e469593 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 15 Dec 2018 18:27:38 +0100 Subject: [PATCH 13/17] Fix phpcs --- htdocs/compta/cashcontrol/cashcontrol.php | 27 ++++++++------- .../cashcontrol/class/cashcontrol.class.php | 34 +++++++++---------- htdocs/compta/cashcontrol/report.php | 23 +++++++------ 3 files changed, 43 insertions(+), 41 deletions(-) diff --git a/htdocs/compta/cashcontrol/cashcontrol.php b/htdocs/compta/cashcontrol/cashcontrol.php index 6671b0562ee..9dd082bb5dd 100644 --- a/htdocs/compta/cashcontrol/cashcontrol.php +++ b/htdocs/compta/cashcontrol/cashcontrol.php @@ -27,9 +27,8 @@ * \brief Page ajout de categories bancaires */ -$res=@include("../main.inc.php"); -if (! $res) $res=@include("../../main.inc.php"); -include_once 'class/cashcontrol.class.php'; +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/cashcontrol/class/cashcontrol.class.php'; $langs->loadLangs(array("cashcontrol","install","cashdesk","admin")); @@ -97,7 +96,7 @@ llxHeader(); print ''; print ''.$langs->trans("Ref").''.$langs->trans("DateCreationShort").''.$langs->trans("DateEnd").''.$langs->trans("Cash").''.$langs->trans("PaymentTypeCB").''.$langs->trans("Status").''; print "\n"; - + $sql = "SELECT *"; $sql.= " FROM "; $sql.= MAIN_DB_PREFIX."pos_cash_fence order by rowid DESC"; @@ -126,7 +125,7 @@ llxHeader(); } else { //no hay } - + print ''; } @@ -142,25 +141,25 @@ if ($action=="view") print '
'; print '
'; print ''; - + print ''; - + print ''; - + print ''; - + print '"; - + print '"; - + print '"; @@ -192,13 +191,15 @@ if ($action=="view") print '
'; dol_fiche_end(); - + print '
'; print ''; if ($cashcontrol->status==1) print ''; print '
'; - + print '
'; } +// End of page llxFooter(); +$db->close(); diff --git a/htdocs/compta/cashcontrol/class/cashcontrol.class.php b/htdocs/compta/cashcontrol/class/cashcontrol.class.php index fcf80e093d8..9a9006c4c45 100644 --- a/htdocs/compta/cashcontrol/class/cashcontrol.class.php +++ b/htdocs/compta/cashcontrol/class/cashcontrol.class.php @@ -2,7 +2,7 @@ /* Copyright (C) 2008 Laurent Destailleur * Copyright (C) 2009 Regis Houssin * Copyright (C) 2016 Marcos García - * Copyright (C) 2018 Andreu Bisquerra + * Copyright (C) 2018 Andreu Bisquerra * * 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 @@ -38,7 +38,7 @@ class CashControl // extends CommonObject public $day_close; public $posmodule; public $posnumber; - + /** * Constructor @@ -71,14 +71,14 @@ class CashControl // extends CommonObject $sql .= ", status"; $sql .= ", date_creation"; $sql .= ", posmodule"; - $sql .= ", posnumber"; + $sql .= ", posnumber"; $sql .= ") VALUES ("; $sql .= $conf->entity; $sql .= ", ".$this->opening; $sql .= ",1"; $sql .= ", now()"; $sql .= ", '".$this->posmodule."'"; - $sql .= ", '".$this->posnumber."'"; + $sql .= ", '".$this->posnumber."'"; $sql .= ")"; $this->db->begin(); @@ -108,10 +108,13 @@ class CashControl // extends CommonObject } } - - - - + /** + * close + * + * @param User $user User + * @param number $notrigger No trigger + * @return int <0 if KO, >0 if OK + */ public function close(User $user, $notrigger = 0) { global $conf; @@ -123,7 +126,7 @@ class CashControl // extends CommonObject $sql .= "SET"; $sql .= " day_close=DAYOFMONTH(NOW())"; $sql .= ", month_close=MONTH(NOW())"; - $sql .= ", year_close=YEAR(NOW())"; + $sql .= ", year_close=YEAR(NOW())"; $sql .= ", status=2"; $sql .= " where rowid=".$this->id; $this->db->begin(); @@ -152,16 +155,13 @@ class CashControl // extends CommonObject return $this->id; } } - - - - + /** * Load object in memory from database * - * @param int $id Id object - * @return int <0 if KO, >0 if OK + * @param int $id Id object + * @return int <0 if KO, >0 if OK */ public function fetch($id) { @@ -172,7 +172,7 @@ class CashControl // extends CommonObject $sql .= " FROM ".MAIN_DB_PREFIX."pos_cash_fence"; $sql .= " WHERE rowid = ".$id; $sql .= " AND entity = ".$conf->entity; - + dol_syslog(get_class($this)."::fetch", LOG_DEBUG); $resql = $this->db->query($sql); if ($resql) { @@ -196,4 +196,4 @@ class CashControl // extends CommonObject return -1; } } -} +} \ No newline at end of file diff --git a/htdocs/compta/cashcontrol/report.php b/htdocs/compta/cashcontrol/report.php index 8dd3075d8c7..c85b35c7c2e 100644 --- a/htdocs/compta/cashcontrol/report.php +++ b/htdocs/compta/cashcontrol/report.php @@ -7,7 +7,7 @@ * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2016 Juanjo Menent * Copyright (C) 2017 Alexandre Spangaro - * Copyright (C) 2018 Andreu Bisquerra + * Copyright (C) 2018 Andreu Bisquerra * * 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 @@ -29,8 +29,8 @@ * \brief List of bank transactions */ -$res=@include("../main.inc.php"); -if (! $res) $res=@include("../../main.inc.php"); +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/cashcontrol/class/cashcontrol.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; $id = GETPOST('id','int'); @@ -48,7 +48,7 @@ $arrayfields=array( 'b.rowid'=>array('label'=>$langs->trans("Ref"), 'checked'=>1), 'b.dateo'=>array('label'=>$langs->trans("DateOperationShort"), 'checked'=>1), 'b.num_chq'=>array('label'=>$langs->trans("Number"), 'checked'=>1), - 'ba.ref'=>array('label'=>$langs->trans("BankAccount"), 'checked'=>1), + 'ba.ref'=>array('label'=>$langs->trans("BankAccount"), 'checked'=>1), 'b.debit'=>array('label'=>$langs->trans("Debit"), 'checked'=>1, 'position'=>600), 'b.credit'=>array('label'=>$langs->trans("Credit"), 'checked'=>1, 'position'=>605), ); @@ -56,7 +56,7 @@ $arrayfields=array( /* * View */ - + llxHeader('', $langs->trans("CashControl"), '', '', 0, 0, array(), array(), $param); $sql = "SELECT b.rowid, b.dateo as do, b.datev as dv, b.amount, b.label, b.rappro as conciliated, b.num_releve, b.num_chq,"; @@ -86,7 +86,7 @@ if ($resql) { $num = $db->num_rows($resql); $i = 0; - + print "

"; if ($cashcontrol->status==2) print "Cashcontrol ".$cashcontrol->id; else print $langs->trans("Cashcontrol")." - ".$langs->trans("Draft"); @@ -199,7 +199,7 @@ if ($resql) $bankaccount = $cachebankaccount[$objp->bankid]; } print '

'; - + if ($first==""){ print ''; print ''; @@ -275,22 +275,23 @@ if ($resql) } print "
'; print $langs->trans("Code"); print ''; print $id; print '
'; print $langs->trans("DateCreationShort"); print ''; print dol_print_date($cashcontrol->date_creation, 'dayhour'); print '
'; print $langs->trans("DateEnd"); print ''; print dol_print_date(strtotime($cashcontrol->year_close."-".$cashcontrol->month_close."-".$cashcontrol->day_close), 'day'); print '
'; print $langs->trans("Status"); print ''; @@ -177,11 +176,11 @@ if ($action=="view") print '
'.$langs->trans("InitialBankBalance").''; print price($cashcontrol->opening); print "
'.$langs->trans("CashDesk").' ID'; print $cashcontrol->posnumber; print "
'.$langs->trans("Module").''; print $cashcontrol->posmodule; print "
'.$langs->trans("InitialBankBalance").''.price($cashcontrol->opening).'
"; - + $cash=$cash+$cashcontrol->opening; print "

".$langs->trans("Cash").": ".price($cash)."

".$langs->trans("PaymentTypeCB").": ".price($bank)."

"; - - + + //save totals to DB $sql = "UPDATE ".MAIN_DB_PREFIX."pos_cash_fence "; $sql .= "SET"; $sql .= " cash='".$cash."'"; $sql .= ", card='".$bank."'"; - $sql .= " where rowid=".$id; + $sql .= " where rowid=".$id; $db->query($sql); print "
"; print ''; + $db->free($resql); } else From 0451eb741bac1386b3d234b428a4a92c55c2835f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 15 Dec 2018 19:20:30 +0100 Subject: [PATCH 14/17] Work on legal cash fence --- .../{cashcontrol.php => cashcontrol_card.php} | 74 +-- .../compta/cashcontrol/cashcontrol_list.php | 573 ++++++++++++++++++ .../cashcontrol/class/cashcontrol.class.php | 48 +- htdocs/compta/cashcontrol/report.php | 4 +- htdocs/core/menus/standard/eldy.lib.php | 13 +- htdocs/langs/en_US/banks.lang | 2 + 6 files changed, 653 insertions(+), 61 deletions(-) rename htdocs/compta/cashcontrol/{cashcontrol.php => cashcontrol_card.php} (74%) create mode 100644 htdocs/compta/cashcontrol/cashcontrol_list.php diff --git a/htdocs/compta/cashcontrol/cashcontrol.php b/htdocs/compta/cashcontrol/cashcontrol_card.php similarity index 74% rename from htdocs/compta/cashcontrol/cashcontrol.php rename to htdocs/compta/cashcontrol/cashcontrol_card.php index 9dd082bb5dd..9d52e83afd8 100644 --- a/htdocs/compta/cashcontrol/cashcontrol.php +++ b/htdocs/compta/cashcontrol/cashcontrol_card.php @@ -23,11 +23,11 @@ /** * \file htdocs/compta/bank/categ.php - * \ingroup compta + * \ingroup pos * \brief Page ajout de categories bancaires */ -require '../main.inc.php'; +require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/compta/cashcontrol/class/cashcontrol.class.php'; $langs->loadLangs(array("cashcontrol","install","cashdesk","admin")); @@ -43,6 +43,18 @@ $label = GETPOST("label"); if (empty($conf->global->CASHDESK_ID_BANKACCOUNT_CASH) or empty($conf->global->CASHDESK_ID_BANKACCOUNT_CB)) setEventMessages($langs->trans("CashDesk")." - ".$langs->trans("NotConfigured"), null, 'errors'); +$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='b.label'; +if (! $sortorder) $sortorder='ASC'; + + /* * Add category */ @@ -68,8 +80,14 @@ if ($action=="close") if ($action=="create") { -llxHeader(); - print load_fiche_titre("Cashcontrol - ".$langs->trans("New"), '', 'title_bank.png'); + llxHeader(); + + $arrayofposavailable=array(); + if (! empty($conf->cashdesk->enabled)) $arrayofposavailable['cashdesk']=$langs->trans('CashDesk').' (cashdesk)'; + if (! empty($conf->takepos->enabled)) $arrayofposavailable['takepos']=$langs->trans('TakePOS').' (takepos)'; + // TODO Add hook here to allow other POS to add themself + + print load_fiche_titre($langs->trans("CashControl")." - ".$langs->trans("New"), '', 'title_bank.png'); print '
'; print ''; print ''; @@ -78,59 +96,13 @@ llxHeader(); print "\n"; print ''; print ''; - print ''; + print ''; print ''; print ''; print ''; print '
 '.$form->selectarray('posmodule', array('0'=>$langs->trans('CashDesk'),'1'=>$langs->trans('TakePOS')),1).''.$form->selectarray('posmodule', $arrayofposavailable, 1).'
'; } - -if ($action=="list") -{ -llxHeader(); - print load_fiche_titre("Cashcontrol - ".$langs->trans("List"), '', 'title_bank.png'); - print '
'; - print ''; - print ''; - print ''; - print ''; - print "\n"; - - $sql = "SELECT *"; - $sql.= " FROM "; - $sql.= MAIN_DB_PREFIX."pos_cash_fence order by rowid DESC"; - $result = $db->query($sql); - if ($result) { - $i = 0; - $num = $db->num_rows($result); - - while ($i < $num) { - print ''; - $objp = $db->fetch_object($result); - $totalpaye += $objp->amount; - print ''; - print ''; - $i ++; - } - } else { - //no hay - } - - print '
'.$langs->trans("Ref").''.$langs->trans("DateCreationShort").''.$langs->trans("DateEnd").''.$langs->trans("Cash").''.$langs->trans("PaymentTypeCB").''.$langs->trans("Status").'
'; - print ''.$objp->rowid.''; - print ''.dol_print_date($objp->date_creation, 'dayhour').''.dol_print_date(strtotime($objp->year_close."-".$objp->month_close."-".$objp->day_close), 'day').''; - if ($objp->status==2) print price($objp->cash); - print ''; - if ($objp->status==2) price($objp->card); - print ''; - if ($objp->status==1) print $langs->trans("Opened"); - if ($objp->status==2) print $langs->trans("Closed"); - print '
'; -} - - - if ($action=="view") { $cashcontrol= new CashControl($db); diff --git a/htdocs/compta/cashcontrol/cashcontrol_list.php b/htdocs/compta/cashcontrol/cashcontrol_list.php new file mode 100644 index 00000000000..ba0f985f510 --- /dev/null +++ b/htdocs/compta/cashcontrol/cashcontrol_list.php @@ -0,0 +1,573 @@ + + * Copyright (C) ---Put here your own copyright and developer email--- + * + * 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 cashcontrol_list.php + * \ingroup bank + * \brief List page for cashcontrol + */ + +//if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1'); // Do not create database handler $db +//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER','1'); // Do not load object $user +//if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC','1'); // Do not load object $mysoc +//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1'); // Do not load object $langs +//if (! defined('NOSCANGETFORINJECTION')) define('NOSCANGETFORINJECTION','1'); // Do not check injection attack on GET parameters +//if (! defined('NOSCANPOSTFORINJECTION')) define('NOSCANPOSTFORINJECTION','1'); // Do not check injection attack on POST parameters +//if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK','1'); // Do not check CSRF attack (test on referer + on token if option MAIN_SECURITY_CSRF_WITH_TOKEN is on). +//if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL','1'); // Do not roll the Anti CSRF token (used if MAIN_SECURITY_CSRF_WITH_TOKEN is on) +//if (! defined('NOSTYLECHECK')) define('NOSTYLECHECK','1'); // Do not check style html tag into posted data +//if (! defined('NOIPCHECK')) define('NOIPCHECK','1'); // Do not check IP defined into conf $dolibarr_main_restrict_ip +//if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1'); // If there is no need to load and show top and left menu +//if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1'); // If we don't need to load the html.form.class.php +//if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1'); // Do not load ajax.lib.php library +//if (! defined("NOLOGIN")) define("NOLOGIN",'1'); // If this page is public (can be called outside logged session) +//if (! defined("MAIN_LANG_DEFAULT")) define('MAIN_LANG_DEFAULT','auto'); // Force lang to a particular value +//if (! defined("MAIN_AUTHENTICATION_MODE")) define('MAIN_AUTHENTICATION_MODE','aloginmodule'); // Force authentication handler +//if (! defined("NOREDIRECTBYMAINTOLOGIN")) define('NOREDIRECTBYMAINTOLOGIN',1); // The main.inc.php does not make a redirect if not logged, instead show simple error message + +require '../../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/cashcontrol/class/cashcontrol.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; + +// Load translation files required by the page +$langs->loadLangs(array("banks","other")); + +$action = GETPOST('action','aZ09')?GETPOST('action','aZ09'):'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... +$massaction = GETPOST('massaction','alpha'); // The bulk action (combo box choice into lists) +$show_files = GETPOST('show_files','int'); // Show files area generated by bulk actions ? +$confirm = GETPOST('confirm','alpha'); // Result of a confirmation +$cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button +$toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list +$contextpage= GETPOST('contextpage','aZ')?GETPOST('contextpage','aZ'):'cashcontrol'; // To manage different context of search +$backtopage = GETPOST('backtopage','alpha'); // Go back to a dedicated page +$optioncss = GETPOST('optioncss','aZ'); // Option for the css output (always '' except when 'print') + +$id = GETPOST('id','int'); + +// 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 || GETPOST('button_search','alpha') || GETPOST('button_removefilter','alpha') || (empty($toselect) && $massaction === '0')) { $page = 0; } // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action +$offset = $limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; +//if (! $sortfield) $sortfield="p.date_fin"; +//if (! $sortorder) $sortorder="DESC"; + +// Initialize technical objects +$object=new CashControl($db); +$extrafields = new ExtraFields($db); +$diroutputmassaction=$conf->monmodule->dir_output . '/temp/massgeneration/'.$user->id; +$hookmanager->initHooks(array('cashcontrol')); // Note that conf->hooks_modules contains array +// Fetch optionals attributes and labels +$extralabels = $extrafields->fetch_name_optionals_label('cashcontrol'); // Load $extrafields->attributes['cashcontrol'] +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_'); + +// Default sort order (if not yet defined by previous GETPOST) +if (! $sortfield) $sortfield="t.".key($object->fields); // Set here default search field. By default 1st field in definition. +if (! $sortorder) $sortorder="ASC"; + +// Security check +$socid=0; +if ($user->societe_id > 0) // Protection if external user +{ + //$socid = $user->societe_id; + accessforbidden(); +} +//$result = restrictedArea($user, 'monmodule', $id, ''); + +// Initialize array of search criterias +$search_all=trim(GETPOST("search_all",'alpha')); +$search=array(); +foreach($object->fields as $key => $val) +{ + if (GETPOST('search_'.$key,'alpha')) $search[$key]=GETPOST('search_'.$key,'alpha'); +} + +// List of fields to search into when doing a "search in all" +$fieldstosearchall = array(); +foreach($object->fields as $key => $val) +{ + if ($val['searchall']) $fieldstosearchall['t.'.$key]=$val['label']; +} + +// Definition of fields for list +$arrayfields=array(); +foreach($object->fields as $key => $val) +{ + // If $val['visible']==0, then we never show the field + if (! empty($val['visible'])) $arrayfields['t.'.$key]=array('label'=>$val['label'], 'checked'=>(($val['visible']<0)?0:1), 'enabled'=>$val['enabled'], 'position'=>$val['position']); +} +// Extra fields +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) +{ + foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val) + { + if (! empty($extrafields->attributes[$object->table_element]['list'][$key])) + $arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key])!=3 && $extrafields->attributes[$object->table_element]['perms'][$key])); + } +} +$object->fields = dol_sort_array($object->fields, 'position'); +$arrayfields = dol_sort_array($arrayfields, 'position'); + + + +/* + * Actions + */ + +if (GETPOST('cancel','alpha')) { $action='list'; $massaction=''; } +if (! GETPOST('confirmmassaction','alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') { $massaction=''; } + +$parameters=array(); +$reshook=$hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + +if (empty($reshook)) +{ + // Selection of new fields + include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php'; + + // Purge search criteria + if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x','alpha') ||GETPOST('button_removefilter','alpha')) // All tests are required to be compatible with all browsers + { + foreach($object->fields as $key => $val) + { + $search[$key]=''; + } + $toselect=''; + $search_array_options=array(); + } + if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x','alpha') || GETPOST('button_removefilter','alpha') + || GETPOST('button_search_x','alpha') || GETPOST('button_search.x','alpha') || GETPOST('button_search','alpha')) + { + $massaction=''; // Protection to avoid mass action if we force a new search during a mass action confirmation + } + + // Mass actions + $objectclass='CashControl'; + $objectlabel='CashControl'; + $permtoread = ($user->rights->cashdesk->read || $user->rights->takepos->read); + $permtodelete = ($user->rights->cashdesk->delete || $user->rights->takepos->delete); + + //$uploaddir = ''; + //include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; +} + + + +/* + * View + */ + +$form=new Form($db); + +$now=dol_now(); + +//$help_url="EN:Module_pos_cash_fence|FR:Module_pos_cash_fence_FR|ES:Módulo_pos_cash_fence"; +$help_url=''; +$title = $langs->trans('CashControl'); + + +// Build and execute select +// -------------------------------------------------------------------- +$sql = 'SELECT '; +foreach($object->fields as $key => $val) +{ + $sql.='t.'.$key.', '; +} +// Add fields from extrafields +if (! empty($extrafields->attributes[$object->table_element]['label'])) +{ + foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) $sql.=($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? "ef.".$key.' as options_'.$key.', ' : ''); +} +// Add fields from hooks +$parameters=array(); +$reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters, $object); // Note that $action and $object may have been modified by hook +$sql.=$hookmanager->resPrint; +$sql=preg_replace('/, $/','', $sql); +$sql.= " FROM ".MAIN_DB_PREFIX.$object->table_element." as t"; +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (t.rowid = ef.fk_object)"; +if ($object->ismultientitymanaged == 1) $sql.= " WHERE t.entity IN (".getEntity($object->element).")"; +else $sql.=" WHERE 1 = 1"; +foreach($search as $key => $val) +{ + if ($key == 'status' && $search[$key] == -1) continue; + $mode_search=(($object->isInt($object->fields[$key]) || $object->isFloat($object->fields[$key]))?1:0); + if ($search[$key] != '') $sql.=natural_search($key, $search[$key], (($key == 'status')?2:$mode_search)); +} +if ($search_all) $sql.= natural_search(array_keys($fieldstosearchall), $search_all); +// Add where from extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; +// Add where from hooks +$parameters=array(); +$reshook=$hookmanager->executeHooks('printFieldListWhere', $parameters, $object); // Note that $action and $object may have been modified by hook +$sql.=$hookmanager->resPrint; + +/* If a group by is required + $sql.= " GROUP BY " + foreach($object->fields as $key => $val) + { + $sql.='t.'.$key.', '; + } + // Add fields from extrafields + if (! empty($extrafields->attributes[$object->table_element]['label'])) { + foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) $sql.=($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? "ef.".$key.', ' : ''); + // Add where from hooks + $parameters=array(); + $reshook=$hookmanager->executeHooks('printFieldListGroupBy',$parameters); // Note that $action and $object may have been modified by hook + $sql.=$hookmanager->resPrint; + $sql=preg_replace('/, $/','', $sql); + */ + +$sql.=$db->order($sortfield,$sortorder); + +// Count total nb of records +$nbtotalofrecords = ''; +if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) +{ + $resql = $db->query($sql); + $nbtotalofrecords = $db->num_rows($resql); + if (($page * $limit) > $nbtotalofrecords) // if total of record found is smaller than page * limit, goto and load page 0 + { + $page = 0; + $offset = 0; + } +} +// if total of record found is smaller than limit, no need to do paging and to restart another select with limits set. +if (is_numeric($nbtotalofrecords) && $limit > $nbtotalofrecords) +{ + $num = $nbtotalofrecords; +} +else +{ + $sql.= $db->plimit($limit+1, $offset); + + $resql=$db->query($sql); + if (! $resql) + { + dol_print_error($db); + exit; + } + + $num = $db->num_rows($resql); +} + +// Direct jump if only one record found +if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $search_all) +{ + $obj = $db->fetch_object($resql); + $id = $obj->rowid; + header("Location: ".dol_buildpath('/compta/cashcontrol/cashcontrol_card.php', 1).'?id='.$id); + exit; +} + + +// Output page +// -------------------------------------------------------------------- + +llxHeader('', $title, $help_url); + +// Example : Adding jquery code +print ''; + +$arrayofselected=is_array($toselect)?$toselect:array(); + +$param=''; +if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); +if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); +foreach($search as $key => $val) +{ + $param.= '&search_'.$key.'='.urlencode($search[$key]); +} +if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss); +// Add $param from extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; + +// List of mass actions available +$arrayofmassactions = array( +//'presend'=>$langs->trans("SendByMail"), +//'builddoc'=>$langs->trans("PDFMerge"), +); +if ($user->rights->monmodule->delete) $arrayofmassactions['predelete']=$langs->trans("Delete"); +if (GETPOST('nomassaction','int') || in_array($massaction, array('presend','predelete'))) $arrayofmassactions=array(); +$massactionbutton=$form->selectMassAction('', $arrayofmassactions); + +print '
'; +if ($optioncss != '') print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; + +$newcardbutton=''; +//if ($user->rights->monmodule->creer) + //{ +$newcardbutton=''.$langs->trans('New').''; +$newcardbutton.= ''; +$newcardbutton.= ''; +//} + +print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_companies', 0, $newcardbutton, '', $limit); + +// Add code for pre mass action (confirmation or email presend form) +$topicmail="SendCashControlRef"; +$modelmail="cashcontrol"; +$objecttmp=new CashControl($db); +$trackid='xxxx'.$object->id; +include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php'; + +if ($sall) +{ + foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val); + print '
'.$langs->trans("FilterOnInto", $sall) . join(', ',$fieldstosearchall).'
'; +} + +$moreforfilter = ''; +/*$moreforfilter.='
'; + $moreforfilter.= $langs->trans('MyFilter') . ': '; + $moreforfilter.= '
';*/ + +$parameters=array(); +$reshook=$hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object); // Note that $action and $object may have been modified by hook +if (empty($reshook)) $moreforfilter .= $hookmanager->resPrint; +else $moreforfilter = $hookmanager->resPrint; + +if (! empty($moreforfilter)) +{ + print '
'; + print $moreforfilter; + print '
'; +} + +$varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage; +$selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields +$selectedfields.=(count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); + +print '
'; // You can use div-table-responsive-no-min if you dont need reserved height for your table +print ''."\n"; + + +// Fields title search +// -------------------------------------------------------------------- +print ''; +foreach($object->fields as $key => $val) +{ + $cssforfield=''; + if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; + if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; + if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; + if (! empty($arrayfields['t.'.$key]['checked'])) print ''; +} +// Extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; + +// Fields from hook +$parameters=array('arrayfields'=>$arrayfields); +$reshook=$hookmanager->executeHooks('printFieldListOption', $parameters, $object); // Note that $action and $object may have been modified by hook +print $hookmanager->resPrint; +// Action column +print ''; +print ''."\n"; + + +// Fields title label +// -------------------------------------------------------------------- +print ''; +foreach($object->fields as $key => $val) +{ + $cssforfield=''; + if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; + if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; + if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; + if (! empty($arrayfields['t.'.$key]['checked'])) + { + print getTitleFieldOfList($arrayfields['t.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, ($cssforfield?'class="'.$cssforfield.'"':''), $sortfield, $sortorder, ($cssforfield?$cssforfield.' ':''))."\n"; + } +} +// Extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; +// Hook fields +$parameters=array('arrayfields'=>$arrayfields,'param'=>$param,'sortfield'=>$sortfield,'sortorder'=>$sortorder); +$reshook=$hookmanager->executeHooks('printFieldListTitle', $parameters, $object); // Note that $action and $object may have been modified by hook +print $hookmanager->resPrint; +print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"],'','','','align="center"',$sortfield,$sortorder,'maxwidthsearch ')."\n"; +print ''."\n"; + + +// Detect if we need a fetch on each output line +$needToFetchEachLine=0; +if (is_array($extrafields->attributes[$object->table_element]['computed']) && count($extrafields->attributes[$object->table_element]['computed']) > 0) +{ + foreach ($extrafields->attributes[$object->table_element]['computed'] as $key => $val) + { + if (preg_match('/\$object/',$val)) $needToFetchEachLine++; // There is at least one compute field that use $object + } +} + + +// Loop on record +// -------------------------------------------------------------------- +$i=0; +$totalarray=array(); +while ($i < min($num, $limit)) +{ + $obj = $db->fetch_object($resql); + if (empty($obj)) break; // Should not happen + + // Store properties in $object + $object->id = $obj->rowid; + foreach($object->fields as $key => $val) + { + if (isset($obj->$key)) $object->$key = $obj->$key; + } + + // Show here line of result + print ''; + foreach($object->fields as $key => $val) + { + $cssforfield=''; + if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; + if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; + if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; + if (! empty($arrayfields['t.'.$key]['checked'])) + { + print ''; + print $object->showOutputField($val, $key, $obj->$key, ''); + print ''; + if (! $i) $totalarray['nbfield']++; + if (! empty($val['isameasure'])) + { + if (! $i) $totalarray['pos'][$totalarray['nbfield']]='t.'.$key; + $totalarray['val']['t.'.$key] += $obj->$key; + } + } + } + // Extra fields + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; + // Fields from hook + $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj); + $reshook=$hookmanager->executeHooks('printFieldListValue', $parameters, $object); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + // Action column + print ''; + if (! $i) $totalarray['nbfield']++; + + print ''; + + $i++; +} + +// Show total line +if (isset($totalarray['pos'])) +{ + print ''; + $i=0; + while ($i < $totalarray['nbfield']) + { + $i++; + if (! empty($totalarray['pos'][$i])) print ''; + else + { + if ($i == 1) + { + if ($num < $limit) print ''; + else print ''; + } + else print ''; + } + } + print ''; +} + +// If no record found +if ($num == 0) +{ + $colspan=1; + foreach($arrayfields as $key => $val) { if (! empty($val['checked'])) $colspan++; } + print ''; +} + +$db->free($resql); + +$parameters=array('arrayfields'=>$arrayfields, 'sql'=>$sql); +$reshook=$hookmanager->executeHooks('printFieldListFooter', $parameters, $object); // Note that $action and $object may have been modified by hook +print $hookmanager->resPrint; + +print '
'; +$searchpicto=$form->showFilterButtons(); +print $searchpicto; +print '
'; + if ($massactionbutton || $massaction) // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + { + $selected=0; + if (in_array($obj->rowid, $arrayofselected)) $selected=1; + print ''; + } + print '
'.price($totalarray['val'][$totalarray['pos'][$i]]).''.$langs->trans("Total").''.$langs->trans("Totalforthispage").'
'.$langs->trans("NoRecordFound").'
'."\n"; +print '
'."\n"; + +print '
'."\n"; + +if (in_array('builddoc',$arrayofmassactions) && ($nbtotalofrecords === '' || $nbtotalofrecords)) +{ + $hidegeneratedfilelistifempty=1; + if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files) $hidegeneratedfilelistifempty=0; + + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; + $formfile = new FormFile($db); + + // Show list of available documents + $urlsource=$_SERVER['PHP_SELF'].'?sortfield='.$sortfield.'&sortorder='.$sortorder; + $urlsource.=str_replace('&','&',$param); + + $filedir=$diroutputmassaction; + $genallowed=$user->rights->monmodule->read; + $delallowed=$user->rights->monmodule->create; + + print $formfile->showdocuments('massfilesarea_monmodule','',$filedir,$urlsource,0,$delallowed,'',1,1,0,48,1,$param,$title,'','','',null,$hidegeneratedfilelistifempty); +} + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/compta/cashcontrol/class/cashcontrol.class.php b/htdocs/compta/cashcontrol/class/cashcontrol.class.php index 9a9006c4c45..451522e20ea 100644 --- a/htdocs/compta/cashcontrol/class/cashcontrol.class.php +++ b/htdocs/compta/cashcontrol/class/cashcontrol.class.php @@ -21,14 +21,57 @@ /** * \file cashcontrol/class/cashcontrol.class.php * \ingroup bank - * \brief This file is CRUD class file (Create/Read/Update/Delete) for bank categories + * \brief This file is CRUD class file (Create/Read/Update/Delete) for cash fence table */ /** - * Class to manage bank categories + * Class to manage cash fence */ class CashControl // extends CommonObject { + /** + * @var string ID to identify managed object + */ + public $element = 'CashControl'; + + /** + * @var string Name of table without prefix where object is stored + */ + public $table_element = 'pos_cash_fence'; + + /** + * @var int Does pos_cash_fence support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe + */ + public $ismultientitymanaged = 1; + + /** + * @var int Does pos_cash_fence support extrafields ? 0=No, 1=Yes + */ + public $isextrafieldmanaged = 0; + + /** + * @var string String with name of icon for pos_cash_fence. Must be the part after the 'object_' into object_pos_cash_fence.png + */ + public $picto = 'bank'; + + public $fields=array( + 'rowid' =>array('type'=>'integer', 'label'=>'ID', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>10), + 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>15), + 'label' =>array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>20), + 'opening' =>array('type'=>'double(24,8)', 'label'=>'Opening', 'enabled'=>1, 'visible'=>1, 'position'=>25), + 'cash' =>array('type'=>'double(24,8)', 'label'=>'Cash', 'enabled'=>1, 'visible'=>1, 'position'=>30), + //'card' =>array('type'=>'double(24,8)', 'label'=>'Card', 'enabled'=>1, 'visible'=>1, 'position'=>35), + 'day_close' =>array('type'=>'integer', 'label'=>'Day close', 'enabled'=>1, 'visible'=>1, 'position'=>50), + 'month_close' =>array('type'=>'integer', 'label'=>'Month close', 'enabled'=>1, 'visible'=>1, 'position'=>55), + 'year_close' =>array('type'=>'integer', 'label'=>'Year close', 'enabled'=>1, 'visible'=>1, 'position'=>60), + 'posmodule' =>array('type'=>'varchar(30)', 'label'=>'Module', 'enabled'=>1, 'visible'=>1, 'position'=>65), + 'posnumber' =>array('type'=>'varchar(30)', 'label'=>'CashDesk', 'enabled'=>1, 'visible'=>1, 'position'=>70), + //'status' =>array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>1, 'position'=>40), + 'date_creation' =>array('type'=>'datetime', 'label'=>'Date creation', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>500), + 'tms' =>array('type'=>'timestamp', 'label'=>'Tms', 'enabled'=>1, 'visible'=>0, 'notnull'=>1, 'position'=>505), + 'import_key' =>array('type'=>'varchar(14)', 'label'=>'Import key', 'enabled'=>1, 'visible'=>0, 'position'=>510), + ); + public $id; public $opening; public $status; @@ -40,6 +83,7 @@ class CashControl // extends CommonObject public $posnumber; + /** * Constructor * diff --git a/htdocs/compta/cashcontrol/report.php b/htdocs/compta/cashcontrol/report.php index c85b35c7c2e..00bcda7607b 100644 --- a/htdocs/compta/cashcontrol/report.php +++ b/htdocs/compta/cashcontrol/report.php @@ -25,11 +25,11 @@ /** * \file htdocs/compta/bank/bankentries_list.php - * \ingroup banque + * \ingroup pos * \brief List of bank transactions */ -require '../main.inc.php'; +require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/compta/cashcontrol/class/cashcontrol.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 3667f2ec157..872edac9ed8 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1244,12 +1244,13 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu if (preg_match('/checks/',$leftmenu)) $newmenu->add("/compta/paiement/cheque/card.php?leftmenu=checks_bis&action=new&mainmenu=bank",$langs->trans("NewChequeDeposit"),1,$user->rights->banque->cheque); if (preg_match('/checks/',$leftmenu)) $newmenu->add("/compta/paiement/cheque/list.php?leftmenu=checks_bis&mainmenu=bank",$langs->trans("List"),1,$user->rights->banque->cheque); } - - //Cash Control - if ($conf->takepos->enabled or $conf->cashdesk->enabled){ - $newmenu->add("/compta/cashcontrol/cashcontrol.php?action=list",$langs->trans("CashControl"),0,1, '', $mainmenu, 'cashcontrol'); - $newmenu->add("/compta/cashcontrol/cashcontrol.php?action=list",$langs->trans("List"),1,1); - $newmenu->add("/compta/cashcontrol/cashcontrol.php?action=create",$langs->trans("New"),1,1); + + // Cash Control + if (! empty($conf->takepos->enabled) || ! empty($conf->cashdesk->enabled)) + { + $newmenu->add("/compta/cashcontrol/cashcontrol_list.php?action=list",$langs->trans("CashControl"),0,1, '', $mainmenu, 'cashcontrol'); + $newmenu->add("/compta/cashcontrol/cashcontrol_list.php?action=list",$langs->trans("List"),1,1); + $newmenu->add("/compta/cashcontrol/cashcontrol_card.php?action=create",$langs->trans("New"),1,1); } } diff --git a/htdocs/langs/en_US/banks.lang b/htdocs/langs/en_US/banks.lang index 5bc061f31f3..615cccf130e 100644 --- a/htdocs/langs/en_US/banks.lang +++ b/htdocs/langs/en_US/banks.lang @@ -165,3 +165,5 @@ SEPAMandate=SEPA mandate YourSEPAMandate=Your SEPA mandate FindYourSEPAMandate=This is your SEPA mandate to authorize our company to make direct debit order to your bank. Return it signed (scan of the signed document) or send it by mail to AutoReportLastAccountStatement=Automaticaly fill the field 'numero of bank statement' with last statement numero when making reconciliation +CashControl=POS Cash Fence +NewCashFence=New cash fence \ No newline at end of file From 1c49599a4717c0632467e038aa8c4719a88a68b5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 15 Dec 2018 19:46:51 +0100 Subject: [PATCH 15/17] Work on cash fence feature --- .../cashcontrol/class/cashcontrol.class.php | 113 +++++++++++++++--- htdocs/compta/cashcontrol/report.php | 4 +- .../install/mysql/migration/8.0.0-9.0.0.sql | 3 + .../mysql/tables/llx_pos_cash_fence.sql | 3 + 4 files changed, 105 insertions(+), 18 deletions(-) diff --git a/htdocs/compta/cashcontrol/class/cashcontrol.class.php b/htdocs/compta/cashcontrol/class/cashcontrol.class.php index 451522e20ea..a741a0e5bbd 100644 --- a/htdocs/compta/cashcontrol/class/cashcontrol.class.php +++ b/htdocs/compta/cashcontrol/class/cashcontrol.class.php @@ -27,7 +27,7 @@ /** * Class to manage cash fence */ -class CashControl // extends CommonObject +class CashControl extends CommonObject { /** * @var string ID to identify managed object @@ -55,18 +55,20 @@ class CashControl // extends CommonObject public $picto = 'bank'; public $fields=array( - 'rowid' =>array('type'=>'integer', 'label'=>'ID', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>10), - 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>15), - 'label' =>array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>20), + 'rowid' =>array('type'=>'integer', 'label'=>'ID', 'enabled'=>1, 'visible'=>0, 'notnull'=>1, 'position'=>10), + 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'notnull'=>1, 'position'=>15), + 'ref' =>array('type'=>'varchar(64)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'position'=>18), + 'label' =>array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>0, 'position'=>20), 'opening' =>array('type'=>'double(24,8)', 'label'=>'Opening', 'enabled'=>1, 'visible'=>1, 'position'=>25), 'cash' =>array('type'=>'double(24,8)', 'label'=>'Cash', 'enabled'=>1, 'visible'=>1, 'position'=>30), //'card' =>array('type'=>'double(24,8)', 'label'=>'Card', 'enabled'=>1, 'visible'=>1, 'position'=>35), + 'cheque' =>array('type'=>'double(24,8)', 'label'=>'Cheque', 'enabled'=>1, 'visible'=>1, 'position'=>35), 'day_close' =>array('type'=>'integer', 'label'=>'Day close', 'enabled'=>1, 'visible'=>1, 'position'=>50), 'month_close' =>array('type'=>'integer', 'label'=>'Month close', 'enabled'=>1, 'visible'=>1, 'position'=>55), - 'year_close' =>array('type'=>'integer', 'label'=>'Year close', 'enabled'=>1, 'visible'=>1, 'position'=>60), - 'posmodule' =>array('type'=>'varchar(30)', 'label'=>'Module', 'enabled'=>1, 'visible'=>1, 'position'=>65), - 'posnumber' =>array('type'=>'varchar(30)', 'label'=>'CashDesk', 'enabled'=>1, 'visible'=>1, 'position'=>70), - //'status' =>array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>1, 'position'=>40), + 'year_close' =>array('type'=>'integer', 'label'=>'Year close', 'enabled'=>1, 'visible'=>1, 'notnul'=>1, 'position'=>60), + 'posmodule' =>array('type'=>'varchar(30)', 'label'=>'Module', 'enabled'=>1, 'visible'=>1, 'notnul'=>1, 'position'=>65), + 'posnumber' =>array('type'=>'varchar(30)', 'label'=>'CashDesk', 'enabled'=>1, 'visible'=>1, 'notnul'=>1, 'position'=>70), + 'status' =>array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>1, 'position'=>80), 'date_creation' =>array('type'=>'datetime', 'label'=>'Date creation', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>500), 'tms' =>array('type'=>'timestamp', 'label'=>'Tms', 'enabled'=>1, 'visible'=>0, 'notnull'=>1, 'position'=>505), 'import_key' =>array('type'=>'varchar(14)', 'label'=>'Import key', 'enabled'=>1, 'visible'=>0, 'position'=>510), @@ -111,16 +113,18 @@ class CashControl // extends CommonObject // Insert request $sql = "INSERT INTO ".MAIN_DB_PREFIX."pos_cash_fence ("; $sql .= "entity"; + //$sql .= ", ref"; $sql .= ", opening"; $sql .= ", status"; $sql .= ", date_creation"; $sql .= ", posmodule"; $sql .= ", posnumber"; $sql .= ") VALUES ("; + //$sql .= "'(PROV)', "; $sql .= $conf->entity; $sql .= ", ".$this->opening; $sql .= ",1"; - $sql .= ", now()"; + $sql .= ", '".$this->db->idate(dol_now())."'"; $sql .= ", '".$this->posmodule."'"; $sql .= ", '".$this->posnumber."'"; $sql .= ")"; @@ -167,12 +171,12 @@ class CashControl // extends CommonObject // Update request $sql = "UPDATE ".MAIN_DB_PREFIX."pos_cash_fence "; - $sql .= "SET"; - $sql .= " day_close=DAYOFMONTH(NOW())"; - $sql .= ", month_close=MONTH(NOW())"; - $sql .= ", year_close=YEAR(NOW())"; - $sql .= ", status=2"; - $sql .= " where rowid=".$this->id; + $sql.= "SET"; + $sql.= " day_close=DAYOFMONTH(NOW())"; + $sql.= ", month_close=MONTH(NOW())"; + $sql.= ", year_close=YEAR(NOW())"; + $sql.= ", status=2"; + $sql.= " where rowid=".$this->id; $this->db->begin(); dol_syslog(get_class($this)."::create", LOG_DEBUG); @@ -222,14 +226,17 @@ class CashControl // extends CommonObject if ($resql) { if ($this->db->num_rows($resql)) { $obj = $this->db->fetch_object($resql); + $this->ref = $obj->id; + $this->label = $obj->label; $this->opening = $obj->opening; $this->status = $obj->status; - $this->date_creation = $obj->date_creation; $this->year_close = $obj->year_close; $this->month_close = $obj->month_close; $this->day_close = $obj->day_close; $this->posmodule = $obj->posmodule; $this->posnumber = $obj->posnumber; + $this->date_creation = $obj->date_creation; + $this->tms = $obj->tms; $this->id=$id; } $this->db->free($resql); @@ -240,4 +247,78 @@ class CashControl // extends CommonObject return -1; } } + + + /** + * Return clicable link of object (with eventually picto) + * + * @param int $withpicto Add picto into link + * @param string $option Where point the link ('stock', 'composition', 'category', 'supplier', '') + * @param int $maxlength Maxlength of ref + * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking + * @param int $notooltip No tooltip + * @return string String with URL + */ + public function getNomUrl($withpicto=0, $option='', $maxlength=0, $save_lastsearch_value=-1, $notooltip=0) + { + global $conf, $langs, $hookmanager; + include_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php'; + + $result=''; + $newref=($this->ref?$this->ref:$this->id); + if ($maxlength) { $newref=dol_trunc($newref, $maxlength, 'middle'); } + + $label = '' . $langs->trans("ShowCashFence") . ''; + $label .= '
' . $langs->trans('ProductRef') . ': ' . ($this->ref?$this->ref:$this->id); + + $linkclose=''; + if (empty($notooltip)) { + if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) { + $label=$langs->trans("ShowCashFence"); + $linkclose.=' alt="'.dol_escape_htmltag($label, 1).'"'; + } + + $linkclose.= ' title="'.dol_escape_htmltag($label, 1, 1).'"'; + $linkclose.= ' class="classfortooltip"'; + + /* + $hookmanager->initHooks(array('productdao')); + $parameters=array('id'=>$this->id); + $reshook=$hookmanager->executeHooks('getnomurltooltip',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks + if ($reshook > 0) $linkclose = $hookmanager->resPrint; + */ + } + + $url = DOL_URL_ROOT.'/compta/cashcontrol/cashcontrol_card.php?id='.$this->id; + + if ($option !== 'nolink') { + // Add param to save lastsearch_values or not + $add_save_lastsearch_values=($save_lastsearch_value == 1 ? 1 : 0); + if ($save_lastsearch_value == -1 && preg_match('/list\.php/', $_SERVER["PHP_SELF"])) { $add_save_lastsearch_values=1; + } + if ($add_save_lastsearch_values) { $url.='&save_lastsearch_values=1'; + } + } + + $linkstart = ''; + $linkend=''; + + $result.=$linkstart; + if ($withpicto) { + $result.=(img_object(($notooltip?'':$label), 'bank', ($notooltip?'class="paddingright"':'class="paddingright classfortooltip"'), 0, 0, $notooltip?0:1)); + } + $result.= $newref; + $result.= $linkend; + + global $action; + $hookmanager->initHooks(array('cashfencedao')); + $parameters=array('id'=>$this->id, 'getnomurl'=>$result); + $reshook=$hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks + if ($reshook > 0) { $result = $hookmanager->resPrint; + } else { $result .= $hookmanager->resPrint; + } + + return $result; + } } \ No newline at end of file diff --git a/htdocs/compta/cashcontrol/report.php b/htdocs/compta/cashcontrol/report.php index 00bcda7607b..c1748134444 100644 --- a/htdocs/compta/cashcontrol/report.php +++ b/htdocs/compta/cashcontrol/report.php @@ -88,8 +88,8 @@ if ($resql) $i = 0; print "

"; - if ($cashcontrol->status==2) print "Cashcontrol ".$cashcontrol->id; - else print $langs->trans("Cashcontrol")." - ".$langs->trans("Draft"); + if ($cashcontrol->status==2) print $langs->trans("CashControl")." ".$cashcontrol->id; + else print $langs->trans("CashControl")." - ".$langs->trans("Draft"); print "
".$langs->trans("DateCreationShort").": ".dol_print_date($cashcontrol->date_creation, 'day')."

"; diff --git a/htdocs/install/mysql/migration/8.0.0-9.0.0.sql b/htdocs/install/mysql/migration/8.0.0-9.0.0.sql index ef89604058e..7f50d9fe0d5 100644 --- a/htdocs/install/mysql/migration/8.0.0-9.0.0.sql +++ b/htdocs/install/mysql/migration/8.0.0-9.0.0.sql @@ -234,10 +234,12 @@ DROP TABLE llx_ticket_logs; CREATE TABLE llx_pos_cash_fence( rowid INTEGER AUTO_INCREMENT PRIMARY KEY, entity INTEGER DEFAULT 1 NOT NULL, + ref VARCHAR(64), label VARCHAR(255), opening double(24,8) default 0, cash double(24,8) default 0, card double(24,8) default 0, + cheque double(24,8) default 0, status INTEGER, date_creation DATETIME NOT NULL, day_close INTEGER, @@ -245,6 +247,7 @@ CREATE TABLE llx_pos_cash_fence( year_close INTEGER, posmodule VARCHAR(30), posnumber VARCHAR(30), + fk_user_creat integer, fk_user_valid integer, tms TIMESTAMP NOT NULL, import_key VARCHAR(14) diff --git a/htdocs/install/mysql/tables/llx_pos_cash_fence.sql b/htdocs/install/mysql/tables/llx_pos_cash_fence.sql index f8014e17366..26a78d69f00 100644 --- a/htdocs/install/mysql/tables/llx_pos_cash_fence.sql +++ b/htdocs/install/mysql/tables/llx_pos_cash_fence.sql @@ -17,10 +17,12 @@ CREATE TABLE llx_pos_cash_fence( rowid INTEGER AUTO_INCREMENT PRIMARY KEY, entity INTEGER DEFAULT 1 NOT NULL, + ref VARCHAR(64), label VARCHAR(255), opening double(24,8) default 0, cash double(24,8) default 0, card double(24,8) default 0, + cheque double(24,8) default 0, status INTEGER, date_creation DATETIME NOT NULL, day_close INTEGER, @@ -28,6 +30,7 @@ CREATE TABLE llx_pos_cash_fence( year_close INTEGER, posmodule VARCHAR(30), posnumber VARCHAR(30), + fk_user_creat integer, fk_user_valid integer, tms TIMESTAMP NOT NULL, import_key VARCHAR(14) From 2bfc5fe235b441d940df03f3b091329be730ccc3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 15 Dec 2018 19:56:08 +0100 Subject: [PATCH 16/17] Work on cash fence --- htdocs/compta/cashcontrol/cashcontrol_card.php | 14 ++++++++------ .../compta/cashcontrol/class/cashcontrol.class.php | 4 ++-- htdocs/core/menus/standard/eldy.lib.php | 2 +- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/htdocs/compta/cashcontrol/cashcontrol_card.php b/htdocs/compta/cashcontrol/cashcontrol_card.php index 9d52e83afd8..ce45bdc44ed 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_card.php +++ b/htdocs/compta/cashcontrol/cashcontrol_card.php @@ -38,6 +38,7 @@ $id=GETPOST('id'); if (!$user->rights->banque->configurer) accessforbidden(); +$id=GETPOST('id','int'); $categid = GETPOST('categid'); $label = GETPOST("label"); @@ -55,15 +56,17 @@ if (! $sortfield) $sortfield='b.label'; if (! $sortorder) $sortorder='ASC'; + /* - * Add category + * Actions */ + if ($action=="start") { $cashcontrol= new CashControl($db); $cashcontrol->opening=GETPOST('opening'); - if (GETPOST('posmodule')==0) $cashcontrol->posmodule="cashdesk"; - else if (GETPOST('posmodule')==1) $cashcontrol->posmodule="takepos"; + if (GETPOST('posmodule')=='cashdesk') $cashcontrol->posmodule="cashdesk"; + else if (GETPOST('posmodule')=='takepos') $cashcontrol->posmodule="takepos"; $cashcontrol->posnumber=GETPOST('posnumber'); $id=$cashcontrol->create($user); $action="view"; @@ -77,7 +80,6 @@ if ($action=="close") $action="view"; } - if ($action=="create") { llxHeader(); @@ -92,7 +94,7 @@ if ($action=="create") print ''; print ''; print ''; - print ''; + print ''; print "\n"; print ''; print ''; @@ -103,7 +105,7 @@ if ($action=="create") print '
'.$langs->trans("Ref").''.$langs->trans("InitialBankBalance").''.$langs->trans("Module").''.$langs->trans("CashDesk").' ID,'.$langs->trans("Ref").''.$langs->trans("InitialBankBalance").''.$langs->trans("Module").''.$langs->trans("CashDesk").' ID
 
'; } -if ($action=="view") +if (empty($action) || $action=="view") { $cashcontrol= new CashControl($db); $cashcontrol->fetch($id); diff --git a/htdocs/compta/cashcontrol/class/cashcontrol.class.php b/htdocs/compta/cashcontrol/class/cashcontrol.class.php index a741a0e5bbd..3d3e97bab6f 100644 --- a/htdocs/compta/cashcontrol/class/cashcontrol.class.php +++ b/htdocs/compta/cashcontrol/class/cashcontrol.class.php @@ -68,10 +68,10 @@ class CashControl extends CommonObject 'year_close' =>array('type'=>'integer', 'label'=>'Year close', 'enabled'=>1, 'visible'=>1, 'notnul'=>1, 'position'=>60), 'posmodule' =>array('type'=>'varchar(30)', 'label'=>'Module', 'enabled'=>1, 'visible'=>1, 'notnul'=>1, 'position'=>65), 'posnumber' =>array('type'=>'varchar(30)', 'label'=>'CashDesk', 'enabled'=>1, 'visible'=>1, 'notnul'=>1, 'position'=>70), - 'status' =>array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>1, 'position'=>80), 'date_creation' =>array('type'=>'datetime', 'label'=>'Date creation', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>500), 'tms' =>array('type'=>'timestamp', 'label'=>'Tms', 'enabled'=>1, 'visible'=>0, 'notnull'=>1, 'position'=>505), 'import_key' =>array('type'=>'varchar(14)', 'label'=>'Import key', 'enabled'=>1, 'visible'=>0, 'position'=>510), + 'status' => array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>1, 'position'=>1000, 'notnull'=>1, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Brouillon', '1'=>'Validated')), ); public $id; @@ -123,7 +123,7 @@ class CashControl extends CommonObject //$sql .= "'(PROV)', "; $sql .= $conf->entity; $sql .= ", ".$this->opening; - $sql .= ",1"; + $sql .= ", 0"; // Draft by default $sql .= ", '".$this->db->idate(dol_now())."'"; $sql .= ", '".$this->posmodule."'"; $sql .= ", '".$this->posnumber."'"; diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 872edac9ed8..520d21e400a 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1249,8 +1249,8 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu if (! empty($conf->takepos->enabled) || ! empty($conf->cashdesk->enabled)) { $newmenu->add("/compta/cashcontrol/cashcontrol_list.php?action=list",$langs->trans("CashControl"),0,1, '', $mainmenu, 'cashcontrol'); + $newmenu->add("/compta/cashcontrol/cashcontrol_card.php?action=create",$langs->trans("NewCashFence"),1,1); $newmenu->add("/compta/cashcontrol/cashcontrol_list.php?action=list",$langs->trans("List"),1,1); - $newmenu->add("/compta/cashcontrol/cashcontrol_card.php?action=create",$langs->trans("New"),1,1); } } From a601859985cb9774b702d5fca32d0742a32adf68 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 15 Dec 2018 19:58:43 +0100 Subject: [PATCH 17/17] Work on cash fence --- htdocs/langs/en_US/banks.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/banks.lang b/htdocs/langs/en_US/banks.lang index 615cccf130e..d64662749da 100644 --- a/htdocs/langs/en_US/banks.lang +++ b/htdocs/langs/en_US/banks.lang @@ -165,5 +165,5 @@ SEPAMandate=SEPA mandate YourSEPAMandate=Your SEPA mandate FindYourSEPAMandate=This is your SEPA mandate to authorize our company to make direct debit order to your bank. Return it signed (scan of the signed document) or send it by mail to AutoReportLastAccountStatement=Automaticaly fill the field 'numero of bank statement' with last statement numero when making reconciliation -CashControl=POS Cash Fence +CashControl=POS cash fence NewCashFence=New cash fence \ No newline at end of file