From fc6382ea7e2c38190788cb31db3f79d6d901c859 Mon Sep 17 00:00:00 2001 From: KreizIT Date: Fri, 4 Jul 2014 15:15:36 +0200 Subject: [PATCH 01/27] Fix: [ bug #1463, #1464 ] Proposal triggers problem --- ChangeLog | 1 + htdocs/comm/propal/class/propal.class.php | 162 ++++++++++------------ 2 files changed, 73 insertions(+), 90 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5b057b66175..fe765ee1015 100644 --- a/ChangeLog +++ b/ChangeLog @@ -18,6 +18,7 @@ For users: - Fix: [ bug #1494 ] CATEGORY_CREATE and CATEGORY_MODIFY triggers do not intercept trigger action - Fix: [ bug #1502 ] DON_CREATE trigger does not intercept trigger action - Fix: [ bug #1505, #1504] Project trigger problem +- Fix: [ bug #1463, #1464 ] Proposal triggers problem For translators: diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 7f2ebf1de4b..0668b49121d 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -856,24 +856,22 @@ class Propal extends CommonObject if (! $notrigger) { - // Appel des triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PROPAL_CREATE',$this,$user,$langs,$conf); - if ($result < 0) { - $error++; $this->errors=$interface->errors; - } - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('PROPAL_CREATE',$user); + if ($result < 0) { $error++; } + // End call triggers } } else { + $this->error=$this->db->error(); $error++; } } } else { + $this->error=$this->db->error(); $error++; } @@ -885,7 +883,6 @@ class Propal extends CommonObject } else { - $this->error=$this->db->error(); $this->db->rollback(); return -2; } @@ -1006,14 +1003,10 @@ class Propal extends CommonObject if ($reshook < 0) $error++; } - // Appel des triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PROPAL_CLONE',$this,$user,$langs,$conf); - if ($result < 0) { - $error++; $this->errors=$interface->errors; - } - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('PROPAL_CLONE',$user); + if ($result < 0) { $error++; } + // End call triggers } // End @@ -1326,14 +1319,10 @@ class Propal extends CommonObject { if (! $notrigger) { - // Appel des triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PROPAL_VALIDATE',$this,$user,$langs,$conf); - if ($result < 0) { - $error++; $this->errors=$interface->errors; - } - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('PROPAL_VALIDATE',$user); + if ($result < 0) { $error++; } + // End call triggers } if (! $error) @@ -1668,25 +1657,24 @@ class Propal extends CommonObject { if (! $notrigger) { - // Appel des triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PROPAL_REOPEN',$this,$user,$langs,$conf); - if ($result < 0) { - $error++; $this->errors=$interface->errors; - } - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('PROPAL_REOPEN',$user); + if ($result < 0) { $error++; } + // End call triggers } } // Commit or rollback if ($error) { - foreach($this->errors as $errmsg) - { - dol_syslog(get_class($this)."::update ".$errmsg, LOG_ERR); - $this->error.=($this->error?', '.$errmsg:$errmsg); - } + if (!empty($this->errors)) + { + foreach($this->errors as $errmsg) + { + dol_syslog(get_class($this)."::update ".$errmsg, LOG_ERR); + $this->error.=($this->error?', '.$errmsg:$errmsg); + } + } $this->db->rollback(); return -1*$error; } @@ -1751,14 +1739,10 @@ class Propal extends CommonObject propale_pdf_create($this->db, $this, $conf->global->PROPALE_ADDON_PDF_ODT_TOBILL?$conf->global->PROPALE_ADDON_PDF_ODT_TOBILL:$this->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref); } - // Appel des triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PROPAL_CLOSE_SIGNED',$this,$user,$langs,$conf); - if ($result < 0) { - $error++; $this->errors=$interface->errors; - } - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('PROPAL_CLOSE_SIGNED',$user); + if ($result < 0) { $error++; } + // End call triggers } else { @@ -1777,18 +1761,21 @@ class Propal extends CommonObject propale_pdf_create($this->db, $this, $conf->global->PROPALE_ADDON_PDF_ODT_CLOSED?$conf->global->PROPALE_ADDON_PDF_ODT_CLOSED:$this->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref); } - // Appel des triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PROPAL_CLOSE_REFUSED',$this,$user,$langs,$conf); - if ($result < 0) { - $error++; $this->errors=$interface->errors; - } - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('PROPAL_CLOSE_REFUSED',$user); + if ($result < 0) { $error++; } + // End call triggers + } + if ( ! $error ) + { + $this->db->commit(); + return 1; + } + else + { + $this->db->rollback(); + return -1; } - - $this->db->commit(); - return 1; } else { @@ -2039,15 +2026,11 @@ class Propal extends CommonObject $this->db->begin(); - if (! $error && ! $notrigger) + if (! $notrigger) { - // Call triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PROPAL_DELETE',$this,$user,$langs,$conf); - if ($result < 0) { - $error++; $this->errors=$interface->errors; - } + // Call trigger + $result=$this->call_trigger('PROPAL_DELETE',$user); + if ($result < 0) { $error++; } // End call triggers } @@ -2145,7 +2128,6 @@ class Propal extends CommonObject } else { - $this->error=$this->db->lasterror(); $this->db->rollback(); return -1; } @@ -2931,14 +2913,14 @@ class PropaleLigne extends CommonObject if (! $notrigger) { - // Appel des triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result = $interface->run_triggers('LINEPROPAL_INSERT',$this,$user,$langs,$conf); - if ($result < 0) { - $error++; $this->errors=$interface->errors; - } - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('LINEPROPAL_INSERT',$user); + if ($result < 0) + { + $this->db->rollback(); + return -1; + } + // End call triggers } $this->db->commit(); @@ -2981,14 +2963,14 @@ class PropaleLigne extends CommonObject } } - // Appel des triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result = $interface->run_triggers('LINEPROPAL_DELETE',$this,$user,$langs,$conf); - if ($result < 0) { - $error++; $this->errors=$interface->errors; - } - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('LINEPROPAL_DELETE',$user); + if ($result < 0) + { + $this->db->rollback(); + return -1; + } + // End call triggers $this->db->commit(); @@ -3091,14 +3073,14 @@ class PropaleLigne extends CommonObject if (! $notrigger) { - // Appel des triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result = $interface->run_triggers('LINEPROPAL_UPDATE',$this,$user,$langs,$conf); - if ($result < 0) { - $error++; $this->errors=$interface->errors; - } - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('LINEPROPAL_UPDATE',$user); + if ($result < 0) + { + $this->db->rollback(); + return -1; + } + // End call triggers } $this->db->commit(); From 1ded34aa9778e3e66f5e6c03b7446a0345468dbb Mon Sep 17 00:00:00 2001 From: KreizIT Date: Fri, 4 Jul 2014 15:33:16 +0200 Subject: [PATCH 02/27] Fix: [ bug #1498, #1499 ] Shipment/Delivery triggers problem --- ChangeLog | 2 +- htdocs/expedition/class/expedition.class.php | 40 +++++++----------- htdocs/expedition/fiche.php | 44 ++++++++++++-------- htdocs/livraison/class/livraison.class.php | 25 +++++------ 4 files changed, 54 insertions(+), 57 deletions(-) diff --git a/ChangeLog b/ChangeLog index fe765ee1015..cb93b839133 100644 --- a/ChangeLog +++ b/ChangeLog @@ -19,7 +19,7 @@ For users: - Fix: [ bug #1502 ] DON_CREATE trigger does not intercept trigger action - Fix: [ bug #1505, #1504] Project trigger problem - Fix: [ bug #1463, #1464 ] Proposal triggers problem - +- Fix: [ bug #1498, #1499 ] Shipment/Delivery triggers problem For translators: - Update language files. diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 5b50a18368e..f6a92b91434 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -275,12 +275,10 @@ class Expedition extends CommonObject if (! $error) { - // Appel des triggers - include_once DOL_DOCUMENT_ROOT.'/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('SHIPPING_CREATE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('SHIPPING_CREATE',$user); + if ($result < 0) { $error++; } + // End call triggers if (! $error) { @@ -656,12 +654,10 @@ class Expedition extends CommonObject if (! $error) { - // Appel des triggers - include_once DOL_DOCUMENT_ROOT.'/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('SHIPPING_VALIDATE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('SHIPPING_VALIDATE',$user); + if ($result < 0) { $error++; } + // End call triggers } if (! $error) @@ -867,12 +863,10 @@ class Expedition extends CommonObject { if (! $notrigger) { - // Call triggers - include_once DOL_DOCUMENT_ROOT.'/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('SHIPPING_MODIFY',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // End call triggers + // Call trigger + $result=$this->call_trigger('SHIPPING_MODIFY',$user); + if ($result < 0) { $error++; } + // End call triggers } } @@ -982,12 +976,10 @@ class Expedition extends CommonObject if ($this->db->query($sql)) { - // Call triggers - include_once DOL_DOCUMENT_ROOT.'/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('SHIPPING_DELETE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // End call triggers + // Call trigger + $result=$this->call_trigger('SHIPPING_DELETE',$user); + if ($result < 0) { $error++; } + // End call triggers if (! $error) { diff --git a/htdocs/expedition/fiche.php b/htdocs/expedition/fiche.php index ff6b23c10be..c2a2036c25f 100644 --- a/htdocs/expedition/fiche.php +++ b/htdocs/expedition/fiche.php @@ -241,26 +241,34 @@ else if ($action == 'confirm_valid' && $confirm == 'yes' && $user->rights->exped $object->fetch_thirdparty(); $result = $object->valid($user); - - // Define output language - $outputlangs = $langs; - $newlang=''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang=GETPOST('lang_id','alpha'); - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; - if (! empty($newlang)) - { - $outputlangs = new Translate("",$conf); - $outputlangs->setDefaultLang($newlang); - } - if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) - { - $ret=$object->fetch($id); // Reload to get new records - $result=expedition_pdf_create($db,$object,$object->modelpdf,$outputlangs); - } + if ($result < 0) { - dol_print_error($db,$result); - exit; + $langs->load("errors"); + setEventMessage($langs->trans($object->error),'errors'); + } + else + { + // Define output language + $outputlangs = $langs; + $newlang=''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang=GETPOST('lang_id','alpha'); + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; + if (! empty($newlang)) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($newlang); + } + if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) + { + $ret=$object->fetch($id); // Reload to get new records + $result=expedition_pdf_create($db,$object,$object->modelpdf,$outputlangs); + } + if ($result < 0) + { + dol_print_error($db,$result); + exit; + } } } diff --git a/htdocs/livraison/class/livraison.class.php b/htdocs/livraison/class/livraison.class.php index 399050d0547..c46e333c191 100644 --- a/htdocs/livraison/class/livraison.class.php +++ b/htdocs/livraison/class/livraison.class.php @@ -446,15 +446,12 @@ class Livraison extends CommonObject return -1; } - // Appel des triggers - include_once DOL_DOCUMENT_ROOT.'/core/class/interfaces.class.php'; - $interface = new Interfaces($this->db); - $result = $interface->run_triggers('DELIVERY_VALIDATE', $this, $user, $langs, $conf); - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('DELIVERY_VALIDATE',$user); + // End call triggers if ($result < 0) { $this->db->rollback(); - $this->error = $interface->errors; dol_syslog(get_class($this)."::valid ".$this->error, LOG_ERR); return -1; } @@ -604,14 +601,14 @@ class Livraison extends CommonObject } } - // Call triggers - include_once DOL_DOCUMENT_ROOT.'/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('DELIVERY_DELETE',$this,$user,$langs,$conf); - if ($result < 0) { - $error++; $this->errors=$interface->errors; - } - // End call triggers + // Call trigger + $result=$this->call_trigger('DELIVERY_DELETE',$user); + if ($result < 0) + { + $this->db->rollback(); + return -4; + } + // End call triggers return 1; } From 012fc4e8fee6b800e09ec7fc6e02ae7792177fd0 Mon Sep 17 00:00:00 2001 From: KreizIT Date: Fri, 4 Jul 2014 15:54:20 +0200 Subject: [PATCH 03/27] Fix: [ bug #1465, #1466 ] Product triggers problem --- ChangeLog | 1 + .../interface_90_all_Demo.class.php-NORUN | 4 + htdocs/product/class/product.class.php | 91 +++++++++---------- 3 files changed, 50 insertions(+), 46 deletions(-) diff --git a/ChangeLog b/ChangeLog index cb93b839133..0c80f04d4b0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -20,6 +20,7 @@ For users: - Fix: [ bug #1505, #1504] Project trigger problem - Fix: [ bug #1463, #1464 ] Proposal triggers problem - Fix: [ bug #1498, #1499 ] Shipment/Delivery triggers problem +- Fix: [ bug #1465, #1466 ] Product triggers problem For translators: - Update language files. diff --git a/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN b/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN index 62b758739c7..f19d717043a 100644 --- a/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN +++ b/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN @@ -222,6 +222,10 @@ class InterfaceDemo dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); } elseif ($action == 'PRODUCT_DELETE') + { + dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); + } + elseif ($action == 'PRODUCT_PRICE_MODIFY') { dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); } diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 73859378d65..adf45fed387 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -427,12 +427,10 @@ class Product extends CommonObject if (! $error && ! $notrigger) { - // Appel des triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PRODUCT_CREATE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('PRODUCT_CREATE',$user); + if ($result < 0) { $error++; } + // End call triggers } if (! $error) @@ -665,12 +663,10 @@ class Product extends CommonObject if (! $error && ! $notrigger) { - // Appel des triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PRODUCT_MODIFY',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('PRODUCT_MODIFY',$user); + if ($result < 0) { $error++; } + // End call triggers } if (! $error && (is_object($this->oldcopy) && $this->oldcopy->ref != $this->ref)) @@ -763,34 +759,33 @@ class Product extends CommonObject if (! $error) { - // Appel des triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PRODUCT_DELETE',$this,$user,$langs,$conf); - if ($result < 0) { - $error++; $this->errors=$interface->errors; - } - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('PRODUCT_DELETE',$user); + if ($result < 0) { $error++; } + // End call triggers } - // Delete all child tables - $elements = array('product_fournisseur_price','product_price','product_lang','categorie_product','product_stock'); - foreach($elements as $table) + // Delete all child tables + if (! $error) { - if (! $error) - { - $sql = "DELETE FROM ".MAIN_DB_PREFIX.$table; - $sql.= " WHERE fk_product = ".$id; - dol_syslog(get_class($this).'::delete', LOG_DEBUG); - $result = $this->db->query($sql); - if (! $result) - { - $error++; - $this->errors[] = $this->db->lasterror(); - } - } + $elements = array('product_fournisseur_price','product_price','product_lang','categorie_product','product_stock'); + foreach($elements as $table) + { + if (! $error) + { + $sql = "DELETE FROM ".MAIN_DB_PREFIX.$table; + $sql.= " WHERE fk_product = ".$id; + dol_syslog(get_class($this).'::delete', LOG_DEBUG); + $result = $this->db->query($sql); + if (! $result) + { + $error++; + $this->errors[] = $this->db->lasterror(); + } + } + } } - + // Delete product if (! $error) { @@ -1227,6 +1222,8 @@ class Product extends CommonObject $localtax2=get_localtax($newvat,2); if (empty($localtax1)) $localtax1=0; // If = '' then = 0 if (empty($localtax2)) $localtax2=0; // If = '' then = 0 + + $this->db->begin(); // Ne pas mettre de quote sur les numeriques decimaux. // Ceci provoque des stockages avec arrondis en base au lieu des valeurs exactes. @@ -1264,19 +1261,21 @@ class Product extends CommonObject $this->level = $level; // Store level of price edited for trigger - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('PRODUCT_PRICE_MODIFY',$this,$user,$langs,$conf); - if ($result < 0) - { - $error++; $this->errors=$interface->errors; - } - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('PRODUCT_PRICE_MODIFY',$user); + if ($result < 0) + { + $this->db->rollback(); + return -1; + } + // End call triggers + + $this->db->commit(); } else { - dol_print_error($this->db); + $this->db->rollback(); + dol_print_error($this->db); } } From 4666de85e2ed4f5b2a9605b2319aba1f6324f467 Mon Sep 17 00:00:00 2001 From: KreizIT Date: Fri, 4 Jul 2014 16:18:54 +0200 Subject: [PATCH 04/27] Fix: [ bug #1508 ] STOCK_MOVEMENT does not show trigger error message --- ChangeLog | 2 ++ htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN | 6 ++++++ htdocs/product/class/product.class.php | 4 ++-- htdocs/product/stock/product.php | 7 +++++++ 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0c80f04d4b0..989c34bd305 100644 --- a/ChangeLog +++ b/ChangeLog @@ -21,6 +21,8 @@ For users: - Fix: [ bug #1463, #1464 ] Proposal triggers problem - Fix: [ bug #1498, #1499 ] Shipment/Delivery triggers problem - Fix: [ bug #1465, #1466 ] Product triggers problem +- Fix: [ bug #1508 ] STOCK_MOVEMENT does not show trigger error message + For translators: - Update language files. diff --git a/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN b/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN index f19d717043a..ee99d202bdd 100644 --- a/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN +++ b/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN @@ -226,6 +226,12 @@ class InterfaceDemo dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); } elseif ($action == 'PRODUCT_PRICE_MODIFY') + { + dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); + } + + //Stock mouvement + elseif ($action == 'STOCK_MOVEMENT') { dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); } diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index adf45fed387..b9d0da37c80 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -2867,7 +2867,7 @@ class Product extends CommonObject } else { - dol_print_error($this->db); + $this->error=$movementstock->error; $this->db->rollback(); return -1; } @@ -3454,7 +3454,7 @@ class Product extends CommonObject } else { - dol_print_error($this->db); + $this->error=$movementstock->error; $this->db->rollback(); return -1; } diff --git a/htdocs/product/stock/product.php b/htdocs/product/stock/product.php index 338169a6154..a9b9c000553 100644 --- a/htdocs/product/stock/product.php +++ b/htdocs/product/stock/product.php @@ -154,6 +154,11 @@ if ($action == "correct_stock" && ! $cancel) header("Location: ".$_SERVER["PHP_SELF"]."?id=".$product->id); exit; } + else + { + setEventMessage($product->error,'errors'); + $action='correction'; + } } } } @@ -253,6 +258,8 @@ if ($id > 0 || $ref) $titre=$langs->trans("CardProduct".$product->type); $picto=($product->type==1?'service':'product'); dol_fiche_head($head, 'stock', $titre, 0, $picto); + + dol_htmloutput_events(); $form = new Form($db); From c70bdabeda0bf35de0274505e9b0e1340b1fb3cf Mon Sep 17 00:00:00 2001 From: KreizIT Date: Fri, 4 Jul 2014 16:23:10 +0200 Subject: [PATCH 05/27] Fix: [ bug #1501 ] DEPLACEMENT_CREATE trigger do not intercept trigger action --- ChangeLog | 1 + .../deplacement/class/deplacement.class.php | 18 +++++++++--------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 989c34bd305..42b145f47cb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -22,6 +22,7 @@ For users: - Fix: [ bug #1498, #1499 ] Shipment/Delivery triggers problem - Fix: [ bug #1465, #1466 ] Product triggers problem - Fix: [ bug #1508 ] STOCK_MOVEMENT does not show trigger error message +- Fix: [ bug #1501 ] DEPLACEMENT_CREATE trigger do not intercept trigger action For translators: diff --git a/htdocs/compta/deplacement/class/deplacement.class.php b/htdocs/compta/deplacement/class/deplacement.class.php index 942ceb912c8..0f17c543b9d 100644 --- a/htdocs/compta/deplacement/class/deplacement.class.php +++ b/htdocs/compta/deplacement/class/deplacement.class.php @@ -126,15 +126,15 @@ class Deplacement extends CommonObject { $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."deplacement"); - // Appel des triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('DEPLACEMENT_CREATE',$this,$user,$langs,$conf); - if ($result < 0) { - $error++; $this->errors=$interface->errors; - } - // Fin appel triggers - + // Call trigger + $result=$this->call_trigger('DEPLACEMENT_CREATE',$user); + if ($result < 0) + { + $this->db->rollback(); + return -2; + } + // End call triggers + $result=$this->update($user); if ($result > 0) { From e4ad082214047739b4b8fa4b55498a170f4b281b Mon Sep 17 00:00:00 2001 From: KreizIT Date: Fri, 4 Jul 2014 16:39:54 +0200 Subject: [PATCH 06/27] Fix: [ bug #1506, #1507 ] ECM trigger error problem --- ChangeLog | 2 + .../interface_90_all_Demo.class.php-NORUN | 14 ++++ htdocs/ecm/class/ecmdirectory.class.php | 76 +++++++++++++------ 3 files changed, 69 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index 42b145f47cb..e3c9b80c3cd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -23,6 +23,8 @@ For users: - Fix: [ bug #1465, #1466 ] Product triggers problem - Fix: [ bug #1508 ] STOCK_MOVEMENT does not show trigger error message - Fix: [ bug #1501 ] DEPLACEMENT_CREATE trigger do not intercept trigger action +- Fix: [ bug #1506, #1507 ] ECM trigger error problem + For translators: diff --git a/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN b/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN index ee99d202bdd..25d7bbb8196 100644 --- a/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN +++ b/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN @@ -232,6 +232,20 @@ class InterfaceDemo //Stock mouvement elseif ($action == 'STOCK_MOVEMENT') + { + dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); + } + + //MYECMDIR + elseif ($action == 'MYECMDIR_DELETE') + { + dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); + } + elseif ($action == 'MYECMDIR_CREATE') + { + dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); + } + elseif ($action == 'MYECMDIR_MODIFY') { dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); } diff --git a/htdocs/ecm/class/ecmdirectory.class.php b/htdocs/ecm/class/ecmdirectory.class.php index 87f3bcd59ba..52c698c240f 100644 --- a/htdocs/ecm/class/ecmdirectory.class.php +++ b/htdocs/ecm/class/ecmdirectory.class.php @@ -152,12 +152,10 @@ class EcmDirectory // extends CommonObject $result=dol_mkdir($dir); if ($result < 0) { $error++; $this->error="ErrorFailedToCreateDir"; } - // Appel des triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('MYECMDIR_CREATE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('MYECMDIR_CREATE',$user); + if ($result < 0) { $error++; } + // End call triggers if (! $error) { @@ -219,12 +217,10 @@ class EcmDirectory // extends CommonObject if (! $error && ! $notrigger) { - // Appel des triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('MYECMDIR_MODIFY',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('MYECMDIR_MODIFY',$user); + if ($result < 0) { $error++; } + // End call triggers } if (! $error) @@ -352,7 +348,18 @@ class EcmDirectory // extends CommonObject $this->error="Error ".$this->db->lasterror(); return -2; } - + else + { + // Call trigger + $result=$this->call_trigger('MYECMDIR_DELETE',$user); + if ($result < 0) + { + $this->db->rollback(); + return -2; + } + // End call triggers + } + if ($mode != 'databaseonly') { $file = $conf->ecm->dir_output . "/" . $relativepath; @@ -371,16 +378,6 @@ class EcmDirectory // extends CommonObject $error++; } - if (! $error) - { - // Appel des triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('MYECMDIR_DELETE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers - } - if (! $error) return 1; else return -1; } @@ -696,5 +693,38 @@ class EcmDirectory // extends CommonObject return -1; } } + + /** + * Call trigger based on this instance + * + * NB: Error from trigger are stacked in errors + * NB2: if trigger fail, action should be canceled. + * NB3: Should be deleted if EcmDirectory extend CommonObject + * + * @param string $trigger_name trigger's name to execute + * @param User $user Object user + * @return int Result of run_triggers + */ + function call_trigger($trigger_name, $user) + { + global $langs,$conf; + + include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; + $interface=new Interfaces($this->db); + $result=$interface->run_triggers($trigger_name,$this,$user,$langs,$conf); + if ($result < 0) { + if (!empty($this->errors)) + { + $this->errors=array_merge($this->errors,$interface->errors); + } + else + { + $this->errors=$interface->errors; + } + } + return $result; + + } + } From c5bb55064f4dfa224c17d582db6885ef6601b22f Mon Sep 17 00:00:00 2001 From: KreizIT Date: Fri, 4 Jul 2014 17:10:19 +0200 Subject: [PATCH 07/27] Fix: [ bug #1469 ] Triggers CONTACT_MODIFY and CONTACT_DELETE duplicates error message --- ChangeLog | 1 + htdocs/contact/class/contact.class.php | 43 +++++++------------ htdocs/contact/fiche.php | 33 ++++++++++---- .../interface_90_all_Demo.class.php-NORUN | 4 ++ 4 files changed, 45 insertions(+), 36 deletions(-) diff --git a/ChangeLog b/ChangeLog index e3c9b80c3cd..da781f4bb5c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -24,6 +24,7 @@ For users: - Fix: [ bug #1508 ] STOCK_MOVEMENT does not show trigger error message - Fix: [ bug #1501 ] DEPLACEMENT_CREATE trigger do not intercept trigger action - Fix: [ bug #1506, #1507 ] ECM trigger error problem +- Fix: [ bug #1469 ] Triggers CONTACT_MODIFY and CONTACT_DELETE duplicates error message diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index 95f949b123f..7858f81dcf9 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -183,12 +183,10 @@ class Contact extends CommonObject if (! $error) { - // Appel des triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('CONTACT_CREATE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('CONTACT_CREATE',$user); + if ($result < 0) { $error++; } + // End call triggers } if (! $error) @@ -304,12 +302,10 @@ class Contact extends CommonObject if (! $error && ! $notrigger) { - // Appel des triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('CONTACT_MODIFY',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('CONTACT_MODIFY',$user); + if ($result < 0) { $error++; } + // End call triggers } if (! $error) @@ -319,7 +315,6 @@ class Contact extends CommonObject } else { - $this->error=join(',',$this->errors); dol_syslog(get_class($this)."::update Error ".$this->error,LOG_ERR); $this->db->rollback(); return -$error; @@ -777,14 +772,10 @@ class Contact extends CommonObject if (! $error && ! $notrigger) { - // Appel des triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('CONTACT_DELETE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers - - if ($error) $this->error=join(',',$this->errors); + // Call trigger + $result=$this->call_trigger('CONTACT_DELETE',$user); + if ($result < 0) { $error++; } + // End call triggers } if (! $error) @@ -1067,12 +1058,10 @@ class Contact extends CommonObject dol_syslog(get_class($this)."::setstatus", LOG_DEBUG); if ($result) { - // Appel des triggers - include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('CONTACT_ENABLEDISABLE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers + // Call trigger + $result=$this->call_trigger('CONTACT_ENABLEDISABLE',$user); + if ($result < 0) { $error++; } + // End call triggers } if ($error) diff --git a/htdocs/contact/fiche.php b/htdocs/contact/fiche.php index 9cb52738bb8..0d8a26cf81f 100644 --- a/htdocs/contact/fiche.php +++ b/htdocs/contact/fiche.php @@ -138,19 +138,30 @@ if (empty($reshook)) if ($action == 'disable') { $object->fetch($id); - $object->setstatus(0); - header("Location: ".$_SERVER['PHP_SELF'].'?id='.$id); - exit; + if ($object->setstatus(0)<0) + { + setEventMessage($object->error,'errors'); + } + else + { + header("Location: ".$_SERVER['PHP_SELF'].'?id='.$id); + exit; + } } // Confirmation activation if ($action == 'enable') { $object->fetch($id); - $object->setstatus(1); - header("Location: ".$_SERVER['PHP_SELF'].'?id='.$id); - exit; - + if ($object->setstatus(1)<0) + { + setEventMessage($object->error,'errors'); + } + else + { + header("Location: ".$_SERVER['PHP_SELF'].'?id='.$id); + exit; + } } // Add contact @@ -235,7 +246,8 @@ if (empty($reshook)) } else { - $error=$object->error; $errors=$object->errors; + setEventMessage($object->error,'errors'); + setEventMessage($object->errors,'errors'); } } @@ -295,7 +307,8 @@ if (empty($reshook)) } else { - $error=$object->error; $errors=$object->errors; + setEventMessage($object->error,'errors'); + setEventMessage($object->errors,'errors'); $action = 'edit'; } } @@ -367,6 +380,8 @@ else $title = (! empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans("Contacts") : $langs->trans("ContactsAddresses")); dol_fiche_head($head, 'card', $title, 0, 'contact'); + + dol_htmloutput_events(); } if ($user->rights->societe->contact->creer) diff --git a/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN b/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN index 25d7bbb8196..8bc4e42ed3f 100644 --- a/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN +++ b/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN @@ -211,6 +211,10 @@ class InterfaceDemo { dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); } + elseif ($action == 'CONTACT_ENABLEDISABLE') + { + dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); + } // Products elseif ($action == 'PRODUCT_CREATE') From f29eeceb1a59b360715f89dd6f009c4b88e1dcb1 Mon Sep 17 00:00:00 2001 From: frederic34 Date: Sun, 6 Jul 2014 20:49:34 +0200 Subject: [PATCH 08/27] Select bank account for propal and order --- htdocs/comm/propal.php | 32 ++++++++++++++++++- htdocs/comm/propal/class/propal.class.php | 5 +++ htdocs/commande/class/commande.class.php | 7 ++++- htdocs/commande/fiche.php | 35 ++++++++++++++++++++- htdocs/core/class/commonobject.class.php | 34 ++++++++++++++++++++ htdocs/core/class/html.form.class.php | 38 +++++++++++++++++++++++ 6 files changed, 148 insertions(+), 3 deletions(-) diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php index 059af63b708..caf27c0aced 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -254,6 +254,7 @@ else if ($action == 'add' && $user->rights->propal->creer) { $object->duree_validite = $duration; $object->cond_reglement_id = GETPOST('cond_reglement_id'); $object->mode_reglement_id = GETPOST('mode_reglement_id'); + $object->fk_account = GETPOST('fk_account', 'int'); $object->remise_percent = GETPOST('remise_percent'); $object->remise_absolue = GETPOST('remise_absolue'); $object->socid = GETPOST('socid'); @@ -279,7 +280,7 @@ else if ($action == 'add' && $user->rights->propal->creer) { $object->duree_validite = GETPOST('duree_validite'); $object->cond_reglement_id = GETPOST('cond_reglement_id'); $object->mode_reglement_id = GETPOST('mode_reglement_id'); - + $object->fk_account = GETPOST('fk_account', 'int'); $object->contactid = GETPOST('contactidp'); $object->fk_project = GETPOST('projectid'); $object->modelpdf = GETPOST('model'); @@ -1104,6 +1105,11 @@ else if ($action == 'setmode' && $user->rights->propal->creer) { $result = $object->setPaymentMethods(GETPOST('mode_reglement_id', 'int')); } +// bank account +else if ($action == 'setbankaccount' && $user->rights->propal->creer) { + $result=$object->setBankAccount(GETPOST('fk_account', 'int')); +} + /* * Ordonnancement des lignes */ @@ -1368,6 +1374,11 @@ if ($action == 'create') { $form->select_types_paiements($soc->mode_reglement_id, 'mode_reglement_id'); print ''; + // Bank Account + print '' . $langs->trans('BankAccount') . ''; + $form->select_comptes($fk_account, 'fk_account', 0, '', 1); + print ''; + // What trigger creation print '' . $langs->trans('Source') . ''; $form->selectInputReason('', 'demand_reason_id', "SRC_PROP", 1); @@ -1965,6 +1976,25 @@ if ($action == 'create') { } } } + // Bank Account + print ''; + print ''; + print '
'; + print $langs->trans('BankAccount'); + print ''; + if (($action != 'editbankaccount') && $user->rights->propal->creer && ! empty($object->brouillon)) + print 'id.'">'.img_edit($langs->trans('SetBankAccount'),1).'
'; + print ''; + if ($action == 'editbankaccount') + { + $form->form_select_comptes($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'fk_account', 1); + } + else + { + $form->form_select_comptes($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'none'); + } + print ""; + print ''; // Amount HT print '' . $langs->trans('AmountHT') . ''; diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 7f2ebf1de4b..a2d4d90f6c7 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -79,6 +79,7 @@ class Propal extends CommonObject var $cond_reglement_id; var $cond_reglement_code; + var $fk_account; // Id of bank account var $mode_reglement_id; var $mode_reglement_code; var $remise; @@ -714,6 +715,7 @@ class Propal extends CommonObject $sql.= ", fin_validite"; $sql.= ", fk_cond_reglement"; $sql.= ", fk_mode_reglement"; + $sql.= ", fk_account"; $sql.= ", ref_client"; $sql.= ", date_livraison"; $sql.= ", fk_availability"; @@ -739,6 +741,7 @@ class Propal extends CommonObject $sql.= ", ".($this->fin_validite!=''?"'".$this->db->idate($this->fin_validite)."'":"null"); $sql.= ", ".$this->cond_reglement_id; $sql.= ", ".$this->mode_reglement_id; + $sql.= ", ".($this->fk_account>0?$this->fk_account:'NULL'); $sql.= ", '".$this->db->escape($this->ref_client)."'"; $sql.= ", ".($this->date_livraison!=''?"'".$this->db->idate($this->date_livraison)."'":"null"); $sql.= ", ".$this->availability_id; @@ -1056,6 +1059,7 @@ class Propal extends CommonObject $sql.= ", p.fk_input_reason"; $sql.= ", p.fk_cond_reglement"; $sql.= ", p.fk_mode_reglement"; + $sql.= ', p.fk_account'; $sql.= ", c.label as statut_label"; $sql.= ", ca.code as availability_code, ca.label as availability"; $sql.= ", dr.code as demand_reason_code, dr.label as demand_reason"; @@ -1120,6 +1124,7 @@ class Propal extends CommonObject $this->mode_reglement_id = $obj->fk_mode_reglement; $this->mode_reglement_code = $obj->mode_reglement_code; $this->mode_reglement = $obj->mode_reglement; + $this->fk_account = ($obj->fk_account>0)?$obj->fk_account:null; $this->cond_reglement_id = $obj->fk_cond_reglement; $this->cond_reglement_code = $obj->cond_reglement_code; $this->cond_reglement = $obj->cond_reglement; diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 472b46ce925..b6d06abf368 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -60,6 +60,7 @@ class Commande extends CommonOrder var $brouillon; var $cond_reglement_id; var $cond_reglement_code; + var $fk_account; var $mode_reglement_id; var $mode_reglement_code; var $availability_id; @@ -658,7 +659,7 @@ class Commande extends CommonOrder $sql = "INSERT INTO ".MAIN_DB_PREFIX."commande ("; $sql.= " ref, fk_soc, date_creation, fk_user_author, fk_projet, date_commande, source, note_private, note_public, ref_client, ref_int"; - $sql.= ", model_pdf, fk_cond_reglement, fk_mode_reglement, fk_availability, fk_input_reason, date_livraison, fk_delivery_address"; + $sql.= ", model_pdf, fk_cond_reglement, fk_mode_reglement, fk_account, fk_availability, fk_input_reason, date_livraison, fk_delivery_address"; $sql.= ", remise_absolue, remise_percent"; $sql.= ", entity"; $sql.= ")"; @@ -673,6 +674,7 @@ class Commande extends CommonOrder $sql.= ", '".$this->modelpdf."'"; $sql.= ", ".($this->cond_reglement_id>0?"'".$this->cond_reglement_id."'":"null"); $sql.= ", ".($this->mode_reglement_id>0?"'".$this->mode_reglement_id."'":"null"); + $sql.= ", ".($this->fk_account>0?$this->fk_account:'NULL'); $sql.= ", ".($this->availability_id>0?"'".$this->availability_id."'":"null"); $sql.= ", ".($this->demand_reason_id>0?"'".$this->demand_reason_id."'":"null"); $sql.= ", ".($this->date_livraison?"'".$this->db->idate($this->date_livraison)."'":"null"); @@ -986,6 +988,7 @@ class Commande extends CommonOrder $this->fk_project = $object->fk_project; $this->cond_reglement_id = $object->cond_reglement_id; $this->mode_reglement_id = $object->mode_reglement_id; + $this->fk_account = $object->fk_account; $this->availability_id = $object->availability_id; $this->demand_reason_id = $object->demand_reason_id; $this->date_livraison = $object->date_livraison; @@ -1329,6 +1332,7 @@ class Commande extends CommonOrder $sql = 'SELECT c.rowid, c.date_creation, c.ref, c.fk_soc, c.fk_user_author, c.fk_statut'; $sql.= ', c.amount_ht, c.total_ht, c.total_ttc, c.tva as total_tva, c.localtax1 as total_localtax1, c.localtax2 as total_localtax2, c.fk_cond_reglement, c.fk_mode_reglement, c.fk_availability, c.fk_input_reason'; + $sql.= ', c.fk_account'; $sql.= ', c.date_commande'; $sql.= ', c.date_livraison'; $sql.= ', c.fk_projet, c.remise_percent, c.remise, c.remise_absolue, c.source, c.facture as billed'; @@ -1388,6 +1392,7 @@ class Commande extends CommonOrder $this->cond_reglement_code = $obj->cond_reglement_code; $this->cond_reglement = $obj->cond_reglement_libelle; $this->cond_reglement_doc = $obj->cond_reglement_libelle_doc; + $this->fk_account = $obj->fk_account; $this->availability_id = $obj->fk_availability; $this->availability_code = $obj->availability_code; $this->demand_reason_id = $obj->fk_input_reason; diff --git a/htdocs/commande/fiche.php b/htdocs/commande/fiche.php index 8b1d6ec9ae3..b2f331b051f 100644 --- a/htdocs/commande/fiche.php +++ b/htdocs/commande/fiche.php @@ -227,6 +227,7 @@ else if ($action == 'add' && $user->rights->commande->creer) { $object->modelpdf = GETPOST('model'); $object->cond_reglement_id = GETPOST('cond_reglement_id'); $object->mode_reglement_id = GETPOST('mode_reglement_id'); + $object->fk_account = GETPOST('fk_account', 'int'); $object->availability_id = GETPOST('availability_id'); $object->demand_reason_id = GETPOST('demand_reason_id'); $object->date_livraison = $datelivraison; @@ -488,6 +489,11 @@ else if ($action == 'setconditions' && $user->rights->commande->creer) { } } +// bank account +else if ($action == 'setbankaccount' && $user->rights->propal->creer) { + $result=$object->setBankAccount(GETPOST('fk_account', 'int')); +} + else if ($action == 'setremisepercent' && $user->rights->commande->creer) { $result = $object->set_remise($user, GETPOST('remise_percent')); } @@ -1392,6 +1398,7 @@ if ($action == 'create' && $user->rights->commande->creer) { $soc = $objectsrc->client; $cond_reglement_id = (!empty($objectsrc->cond_reglement_id)?$objectsrc->cond_reglement_id:(!empty($soc->cond_reglement_id)?$soc->cond_reglement_id:1)); $mode_reglement_id = (!empty($objectsrc->mode_reglement_id)?$objectsrc->mode_reglement_id:(!empty($soc->mode_reglement_id)?$soc->mode_reglement_id:0)); + $fk_account = (!empty($objectsrc->fk_account)?$objectsrc->fk_account:(!empty($soc->fk_account)?$soc->fk_account:0)); $availability_id = (!empty($objectsrc->availability_id)?$objectsrc->availability_id:(!empty($soc->availability_id)?$soc->availability_id:0)); $demand_reason_id = (!empty($objectsrc->demand_reason_id)?$objectsrc->demand_reason_id:(!empty($soc->demand_reason_id)?$soc->demand_reason_id:0)); $remise_percent = (!empty($objectsrc->remise_percent)?$objectsrc->remise_percent:(!empty($soc->remise_percent)?$soc->remise_percent:0)); @@ -1411,6 +1418,7 @@ if ($action == 'create' && $user->rights->commande->creer) { { $cond_reglement_id = $soc->cond_reglement_id; $mode_reglement_id = $soc->mode_reglement_id; + $fk_account = $soc->fk_account; $availability_id = $soc->availability_id; $demand_reason_id = $soc->demand_reason_id; $remise_percent = $soc->remise_percent; @@ -1506,6 +1514,11 @@ if ($action == 'create' && $user->rights->commande->creer) { $form->select_types_paiements($mode_reglement_id, 'mode_reglement_id'); print ''; + // Bank Account + print '' . $langs->trans('BankAccount') . ''; + $form->select_comptes($fk_account, 'fk_account', 0, '', 1); + print ''; + // Delivery delay print '' . $langs->trans('AvailabilityPeriod') . ''; $form->selectAvailabilityDelay($availability_id, 'availability_id', '', 1); @@ -2120,7 +2133,27 @@ if ($action == 'create' && $user->rights->commande->creer) { if ($mysoc->localtax2_assuj == "1" || $object->total_localtax2 != 0) $rowspan ++; - // Total HT + // Bank Account + print ''; + print ''; + print '
'; + print $langs->trans('BankAccount'); + print ''; + if (($action != 'editbankaccount') && $user->rights->commande->creer && ! empty($object->brouillon)) + print 'id.'">'.img_edit($langs->trans('SetBankAccount'),1).'
'; + print ''; + if ($action == 'editbankaccount') + { + $form->form_select_comptes($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'fk_account', 1); + } + else + { + $form->form_select_comptes($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'none'); + } + print ""; + print ''; + + // Total HT print '' . $langs->trans('AmountHT') . ''; print '' . price($object->total_ht, 1, '', 1, - 1, - 1, $conf->currency) . ''; diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index c06c43eb4a4..44554d39180 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -1079,6 +1079,40 @@ abstract class CommonObject } + /** + * Change the bank account + * + * @param int $fk_account Id of bank account + * @return int 1 if OK, 0 if KO + */ + function setBankAccount($fk_account) + { + if (! $this->table_element) + { + dol_syslog(get_class($this)."::setBankAccount was called on objet with property table_element not defined",LOG_ERR); + return -1; + } + if ($fk_account<0) $fk_account='NULL'; + dol_syslog(get_class($this).'::setBankAccount('.$fk_account.')'); + + $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element; + $sql.= " SET fk_account = ".$fk_account; + $sql.= " WHERE rowid=".$this->id; + + if ($this->db->query($sql)) + { + $this->fk_account = ($fk_account=='NULL')?null:$fk_account; + return 1; + } + else + { + dol_syslog(get_class($this).'::setBankAccount Error '.$sql.' - '.$this->db->error()); + $this->error=$this->db->error(); + return 0; + } + } + + /** * Save a new position (field rang) for details lines. * You can choose to set position for lines with already a position or lines without any position defined. diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 1e7f0bb8246..cdc7294c302 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -2480,6 +2480,44 @@ class Form } } + /** + * Display form to select bank account + * + * @param string $page Page + * @param int $selected Id of bank account + * @param string $htmlname Name of select html field + * @param int $addempty 1=Add an empty value in list, 2=Add an empty value in list only if there is more than 2 entries. + * @return void + */ + function form_select_comptes($page, $selected='', $htmlname='fk_account', $addempty=0) + { + global $langs; + if ($htmlname != "none") + { + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + print '
'; + $this->select_comptes($selected, $htmlname, 0, '', $addempty); + print '
'; + } + else + { + if ($selected) + { + require_once DOL_DOCUMENT_ROOT .'/compta/bank/class/account.class.php'; + $bankstatic=new Account($this->db); + $bankstatic->fetch($selected); + print $bankstatic->label.' ('.$bankstatic->currency_code.')'; + } else { + print " "; + } + } + } + /** * Return list of categories having choosed type * From 516632e41d744d7831c23827723f776dc0a1f33e Mon Sep 17 00:00:00 2001 From: frederic34 Date: Mon, 7 Jul 2014 17:59:04 +0200 Subject: [PATCH 09/27] Select bank account for customer order --- htdocs/commande/fiche.php | 4 +-- htdocs/compta/facture.php | 35 +++++++++++++++++++ htdocs/compta/facture/class/facture.class.php | 5 +++ 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/htdocs/commande/fiche.php b/htdocs/commande/fiche.php index b2f331b051f..aeba517270b 100644 --- a/htdocs/commande/fiche.php +++ b/htdocs/commande/fiche.php @@ -490,7 +490,7 @@ else if ($action == 'setconditions' && $user->rights->commande->creer) { } // bank account -else if ($action == 'setbankaccount' && $user->rights->propal->creer) { +else if ($action == 'setbankaccount' && $user->rights->commande->creer) { $result=$object->setBankAccount(GETPOST('fk_account', 'int')); } @@ -1398,7 +1398,7 @@ if ($action == 'create' && $user->rights->commande->creer) { $soc = $objectsrc->client; $cond_reglement_id = (!empty($objectsrc->cond_reglement_id)?$objectsrc->cond_reglement_id:(!empty($soc->cond_reglement_id)?$soc->cond_reglement_id:1)); $mode_reglement_id = (!empty($objectsrc->mode_reglement_id)?$objectsrc->mode_reglement_id:(!empty($soc->mode_reglement_id)?$soc->mode_reglement_id:0)); - $fk_account = (!empty($objectsrc->fk_account)?$objectsrc->fk_account:(!empty($soc->fk_account)?$soc->fk_account:0)); + $fk_account = (! empty($objectsrc->fk_account)?$objectsrc->fk_account:(! empty($soc->fk_account)?$soc->fk_account:0)); $availability_id = (!empty($objectsrc->availability_id)?$objectsrc->availability_id:(!empty($soc->availability_id)?$soc->availability_id:0)); $demand_reason_id = (!empty($objectsrc->demand_reason_id)?$objectsrc->demand_reason_id:(!empty($soc->demand_reason_id)?$soc->demand_reason_id:0)); $remise_percent = (!empty($objectsrc->remise_percent)?$objectsrc->remise_percent:(!empty($soc->remise_percent)?$soc->remise_percent:0)); diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index e20173bf30c..1f437feaac7 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -302,6 +302,11 @@ else if ($action == 'setrevenuestamp' && $user->rights->facture->creer) { dol_print_error($db, $object->error); } +// bank account +else if ($action == 'setbankaccount' && $user->rights->facture->creer) { + $result=$object->setBankAccount(GETPOST('fk_account', 'int')); +} + else if ($action == 'setremisepercent' && $user->rights->facture->creer) { $object->fetch($id); $result = $object->set_remise($user, $_POST['remise_percent']); @@ -628,6 +633,7 @@ else if ($action == 'add' && $user->rights->facture->creer) $object->fk_project = $_POST['projectid']; $object->cond_reglement_id = $_POST['cond_reglement_id']; $object->mode_reglement_id = $_POST['mode_reglement_id']; + $object->fk_account = GETPOST('fk_account', 'int'); $object->remise_absolue = $_POST['remise_absolue']; $object->remise_percent = $_POST['remise_percent']; @@ -670,6 +676,7 @@ else if ($action == 'add' && $user->rights->facture->creer) $object->fk_project = $_POST['projectid']; $object->cond_reglement_id = 0; $object->mode_reglement_id = $_POST['mode_reglement_id']; + $object->fk_account = GETPOST('fk_account', 'int'); $object->remise_absolue = $_POST['remise_absolue']; $object->remise_percent = $_POST['remise_percent']; @@ -795,6 +802,7 @@ else if ($action == 'add' && $user->rights->facture->creer) $object->fk_project = $_POST['projectid']; $object->cond_reglement_id = ($_POST['type'] == 3?1:$_POST['cond_reglement_id']); $object->mode_reglement_id = $_POST['mode_reglement_id']; + $object->fk_account = GETPOST('fk_account', 'int'); $object->amount = $_POST['amount']; $object->remise_absolue = $_POST['remise_absolue']; $object->remise_percent = $_POST['remise_percent']; @@ -1886,6 +1894,7 @@ if ($action == 'create') $cond_reglement_id = (! empty($objectsrc->cond_reglement_id)?$objectsrc->cond_reglement_id:(! empty($soc->cond_reglement_id)?$soc->cond_reglement_id:1)); $mode_reglement_id = (! empty($objectsrc->mode_reglement_id)?$objectsrc->mode_reglement_id:(! empty($soc->mode_reglement_id)?$soc->mode_reglement_id:0)); + $fk_account = (! empty($objectsrc->fk_account)?$objectsrc->fk_account:(! empty($soc->fk_account)?$soc->fk_account:0)); $remise_percent = (! empty($objectsrc->remise_percent)?$objectsrc->remise_percent:(! empty($soc->remise_percent)?$soc->remise_percent:0)); $remise_absolue = (! empty($objectsrc->remise_absolue)?$objectsrc->remise_absolue:(! empty($soc->remise_absolue)?$soc->remise_absolue:0)); $dateinvoice = (empty($dateinvoice)?(empty($conf->global->MAIN_AUTOFILL_DATE)?-1:''):$dateinvoice); @@ -1900,6 +1909,7 @@ if ($action == 'create') { $cond_reglement_id = $soc->cond_reglement_id; $mode_reglement_id = $soc->mode_reglement_id; + $fk_account = $soc->fk_account; $remise_percent = $soc->remise_percent; $remise_absolue = 0; $dateinvoice = (empty($dateinvoice)?(empty($conf->global->MAIN_AUTOFILL_DATE)?-1:''):$dateinvoice); // Do not set 0 here (0 for a date is 1970) @@ -2215,6 +2225,11 @@ if ($action == 'create') $form->select_types_paiements(isset($_POST['mode_reglement_id']) ? $_POST['mode_reglement_id'] : $mode_reglement_id, 'mode_reglement_id'); print ''; + // Bank Account + print '' . $langs->trans('BankAccount') . ''; + $form->select_comptes($fk_account, 'fk_account', 0, '', 1); + print ''; + // Project if (! empty($conf->projet->enabled) && $socid > 0) { $formproject = new FormProjets($db); @@ -3166,6 +3181,26 @@ if ($action == 'create') } print ''; + // Bank Account + print ''; + print ''; + print '
'; + print $langs->trans('BankAccount'); + print ''; + if (($action != 'editbankaccount') && $user->rights->commande->creer && ! empty($object->brouillon)) + print 'id.'">'.img_edit($langs->trans('SetBankAccount'),1).'
'; + print ''; + if ($action == 'editbankaccount') + { + $form->form_select_comptes($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'fk_account', 1); + } + else + { + $form->form_select_comptes($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'none'); + } + print ""; + print ''; + // Amount print '' . $langs->trans('AmountHT') . ''; print '' . price($object->total_ht, 1, '', 1, - 1, - 1, $conf->currency) . ''; diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 7ef7162e985..1cfb5fe3725 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -103,6 +103,7 @@ class Facture extends CommonInvoice var $cond_reglement_code; // Code in llx_c_paiement var $mode_reglement_id; // Id in llx_c_paiement var $mode_reglement_code; // Code in llx_c_paiement + var $fk_account; // Id of bank account var $fk_bank; // Field to store bank id to use when payment mode is withdraw var $modelpdf; var $products=array(); // deprecated @@ -239,6 +240,7 @@ class Facture extends CommonInvoice $sql.= ", note_private"; $sql.= ", note_public"; $sql.= ", ref_client, ref_int"; + $sql.= ", fk_account"; $sql.= ", fk_facture_source, fk_user_author, fk_projet"; $sql.= ", fk_cond_reglement, fk_mode_reglement, date_lim_reglement, model_pdf"; $sql.= ")"; @@ -256,6 +258,7 @@ class Facture extends CommonInvoice $sql.= ",".($this->note_public?"'".$this->db->escape($this->note_public)."'":"null"); $sql.= ",".($this->ref_client?"'".$this->db->escape($this->ref_client)."'":"null"); $sql.= ",".($this->ref_int?"'".$this->db->escape($this->ref_int)."'":"null"); + $sql.= ", ".($this->fk_account>0?$this->fk_account:'NULL'); $sql.= ",".($this->fk_facture_source?"'".$this->db->escape($this->fk_facture_source)."'":"null"); $sql.= ",".($user->id > 0 ? "'".$user->id."'":"null"); $sql.= ",".($this->fk_project?$this->fk_project:"null"); @@ -834,6 +837,7 @@ class Facture extends CommonInvoice $sql.= ', f.note_private, f.note_public, f.fk_statut, f.paye, f.close_code, f.close_note, f.fk_user_author, f.fk_user_valid, f.model_pdf'; $sql.= ', f.fk_facture_source'; $sql.= ', f.fk_mode_reglement, f.fk_cond_reglement, f.fk_projet, f.extraparams'; + $sql.= ', f.fk_account'; $sql.= ', p.code as mode_reglement_code, p.libelle as mode_reglement_libelle'; $sql.= ', c.code as cond_reglement_code, c.libelle as cond_reglement_libelle, c.libelle_facture as cond_reglement_libelle_doc'; $sql.= ' FROM '.MAIN_DB_PREFIX.'facture as f'; @@ -884,6 +888,7 @@ class Facture extends CommonInvoice $this->cond_reglement_code = $obj->cond_reglement_code; $this->cond_reglement = $obj->cond_reglement_libelle; $this->cond_reglement_doc = $obj->cond_reglement_libelle_doc; + $this->fk_account = ($obj->fk_account>0)?$obj->fk_account:null; $this->fk_project = $obj->fk_projet; $this->fk_facture_source = $obj->fk_facture_source; $this->note = $obj->note_private; // deprecated From 83d3af9bf8162468e6ea879dd0169fb83b3fec30 Mon Sep 17 00:00:00 2001 From: frederic34 Date: Mon, 7 Jul 2014 18:25:20 +0200 Subject: [PATCH 10/27] Select account for payment --- htdocs/compta/facture.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index 1f437feaac7..a92f189fd3a 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -3463,7 +3463,7 @@ if ($action == 'create') if ($resteapayer == 0) { print '
' . $langs->trans('DoPayment') . '
'; } else { - print ''; + print ''; } } } From 9949713d2043803bdf99758caf0f560cdf28768a Mon Sep 17 00:00:00 2001 From: frederic34 Date: Mon, 7 Jul 2014 18:40:18 +0200 Subject: [PATCH 11/27] Some cleaning --- htdocs/comm/propal.php | 32 +++++++++++------------- htdocs/commande/fiche.php | 9 +++---- htdocs/core/class/commonobject.class.php | 10 +++----- 3 files changed, 21 insertions(+), 30 deletions(-) diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php index caf27c0aced..994894f2b4c 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -1976,25 +1976,23 @@ if ($action == 'create') { } } } - // Bank Account - print ''; - print '"; - print ''; + print '
'; - print $langs->trans('BankAccount'); - print ''; + + // Bank Account + print '
'; + print ''; - print '
'; + print $langs->trans('BankAccount'); + print ''; if (($action != 'editbankaccount') && $user->rights->propal->creer && ! empty($object->brouillon)) print 'id.'">'.img_edit($langs->trans('SetBankAccount'),1).'
'; - print '
'; - if ($action == 'editbankaccount') - { - $form->form_select_comptes($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'fk_account', 1); - } - else - { - $form->form_select_comptes($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'none'); - } - print "
'; + print ''; + if ($action == 'editbankaccount') { + $form->form_select_comptes($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'fk_account', 1); + } else { + $form->form_select_comptes($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'none'); + } + print ''; + print ''; // Amount HT print '' . $langs->trans('AmountHT') . ''; diff --git a/htdocs/commande/fiche.php b/htdocs/commande/fiche.php index aeba517270b..58fede8e275 100644 --- a/htdocs/commande/fiche.php +++ b/htdocs/commande/fiche.php @@ -2142,15 +2142,12 @@ if ($action == 'create' && $user->rights->commande->creer) { print 'id.'">'.img_edit($langs->trans('SetBankAccount'),1).''; print ''; print ''; - if ($action == 'editbankaccount') - { + if ($action == 'editbankaccount') { $form->form_select_comptes($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'fk_account', 1); - } - else - { + } else { $form->form_select_comptes($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'none'); } - print ""; + print ''; print ''; // Total HT diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 44554d39180..fd6f83564ad 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -1087,8 +1087,7 @@ abstract class CommonObject */ function setBankAccount($fk_account) { - if (! $this->table_element) - { + if (! $this->table_element) { dol_syslog(get_class($this)."::setBankAccount was called on objet with property table_element not defined",LOG_ERR); return -1; } @@ -1099,13 +1098,10 @@ abstract class CommonObject $sql.= " SET fk_account = ".$fk_account; $sql.= " WHERE rowid=".$this->id; - if ($this->db->query($sql)) - { + if ($this->db->query($sql)) { $this->fk_account = ($fk_account=='NULL')?null:$fk_account; return 1; - } - else - { + } else { dol_syslog(get_class($this).'::setBankAccount Error '.$sql.' - '.$this->db->error()); $this->error=$this->db->error(); return 0; From 8e612b532a8aaeab33846537e4969e73d0a05e1f Mon Sep 17 00:00:00 2001 From: frederic34 Date: Mon, 7 Jul 2014 18:44:08 +0200 Subject: [PATCH 12/27] Use & instead & --- htdocs/compta/facture.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index a92f189fd3a..b01b6c5dfaa 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -3463,7 +3463,7 @@ if ($action == 'create') if ($resteapayer == 0) { print '
' . $langs->trans('DoPayment') . '
'; } else { - print ''; + print ''; } } } From 0cb5220d4db0c0684f765f26e9e04b288d41c220 Mon Sep 17 00:00:00 2001 From: frederic34 Date: Mon, 7 Jul 2014 20:54:41 +0200 Subject: [PATCH 13/27] Use english for the function name --- htdocs/comm/propal.php | 4 ++-- htdocs/commande/fiche.php | 4 ++-- htdocs/compta/facture.php | 4 ++-- htdocs/core/class/html.form.class.php | 12 ++++-------- 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php index 994894f2b4c..7ce92a5b569 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -1987,9 +1987,9 @@ if ($action == 'create') { print ''; print ''; if ($action == 'editbankaccount') { - $form->form_select_comptes($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'fk_account', 1); + $form->formSelectAccount($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'fk_account', 1); } else { - $form->form_select_comptes($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'none'); + $form->formSelectAccount($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'none'); } print ''; print ''; diff --git a/htdocs/commande/fiche.php b/htdocs/commande/fiche.php index 58fede8e275..19948e3c1b7 100644 --- a/htdocs/commande/fiche.php +++ b/htdocs/commande/fiche.php @@ -2143,9 +2143,9 @@ if ($action == 'create' && $user->rights->commande->creer) { print ''; print ''; if ($action == 'editbankaccount') { - $form->form_select_comptes($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'fk_account', 1); + $form->formSelectAccount($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'fk_account', 1); } else { - $form->form_select_comptes($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'none'); + $form->formSelectAccount($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'none'); } print ''; print ''; diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index b01b6c5dfaa..29a25760886 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -3192,11 +3192,11 @@ if ($action == 'create') print ''; if ($action == 'editbankaccount') { - $form->form_select_comptes($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'fk_account', 1); + $form->formSelectAccount($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'fk_account', 1); } else { - $form->form_select_comptes($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'none'); + $form->formSelectAccount($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'none'); } print ""; print ''; diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index cdc7294c302..d1b338176a4 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -2489,11 +2489,10 @@ class Form * @param int $addempty 1=Add an empty value in list, 2=Add an empty value in list only if there is more than 2 entries. * @return void */ - function form_select_comptes($page, $selected='', $htmlname='fk_account', $addempty=0) + function formSelectAccount($page, $selected='', $htmlname='fk_account', $addempty=0) { global $langs; - if ($htmlname != "none") - { + if ($htmlname != "none") { print '
'; print ''; print ''; @@ -2503,11 +2502,8 @@ class Form print ''; print ''; print '
'; - } - else - { - if ($selected) - { + } else { + if ($selected) { require_once DOL_DOCUMENT_ROOT .'/compta/bank/class/account.class.php'; $bankstatic=new Account($this->db); $bankstatic->fetch($selected); From a2911cef11d169816e5a5a4d45438e2802838b9e Mon Sep 17 00:00:00 2001 From: frederic34 Date: Tue, 8 Jul 2014 11:46:22 +0200 Subject: [PATCH 14/27] Filter on invoice for "treso" --- htdocs/compta/bank/treso.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index f6c59530605..f628965e976 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -161,6 +161,7 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON f.fk_soc = s.rowid"; $sql.= " WHERE f.entity = ".$conf->entity; $sql.= " AND f.paye = 0 AND f.fk_statut = 1"; // Not paid + $sql.= " AND f.fk_account IN (NULL, 0, ".$acct->id.")"; // Id bank account od invoice $sql.= " ORDER BY dlr ASC"; // Supplier invoices From 865fea37e9cc63ee904eeed05b380c6c0b7eaaec Mon Sep 17 00:00:00 2001 From: frederic34 Date: Tue, 8 Jul 2014 16:02:46 +0200 Subject: [PATCH 15/27] Correct filter --- htdocs/compta/bank/treso.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index f628965e976..223e5e9d534 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -161,8 +161,8 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON f.fk_soc = s.rowid"; $sql.= " WHERE f.entity = ".$conf->entity; $sql.= " AND f.paye = 0 AND f.fk_statut = 1"; // Not paid - $sql.= " AND f.fk_account IN (NULL, 0, ".$acct->id.")"; // Id bank account od invoice - $sql.= " ORDER BY dlr ASC"; + $sql.= " AND (f.fk_account IN (0, ".$acct->id.") OR f.fk_account IS NULL)"; // Id bank account of invoice + $sql.= " ORDER BY dlr ASC"; // Supplier invoices $sql2= " SELECT 'invoice_supplier' as family, ff.rowid as objid, ff.ref_supplier as ref, (-1*ff.total_ttc) as total_ttc, ff.type, ff.date_lim_reglement as dlr,"; From beb471980e3f093c5e0060cd915d84b251e56825 Mon Sep 17 00:00:00 2001 From: frederic34 Date: Tue, 8 Jul 2014 21:50:21 +0200 Subject: [PATCH 16/27] Add fields for supplier order and invoice --- htdocs/install/mysql/migration/3.6.0-3.7.0.sql | 3 +++ htdocs/install/mysql/tables/llx_commande_fournisseur.sql | 1 + htdocs/install/mysql/tables/llx_facture_fourn.sql | 1 + 3 files changed, 5 insertions(+) diff --git a/htdocs/install/mysql/migration/3.6.0-3.7.0.sql b/htdocs/install/mysql/migration/3.6.0-3.7.0.sql index 707772e8981..3ef39a6bab1 100644 --- a/htdocs/install/mysql/migration/3.6.0-3.7.0.sql +++ b/htdocs/install/mysql/migration/3.6.0-3.7.0.sql @@ -87,3 +87,6 @@ ALTER TABLE llx_product_price ADD CONSTRAINT fk_product_price_user_author FOREI ALTER TABLE llx_product_price ADD INDEX idx_product_price_fk_product (fk_product); ALTER TABLE llx_product_price ADD CONSTRAINT fk_product_price_product FOREIGN KEY (fk_product) REFERENCES llx_product (rowid); +ALTER TABLE llx_commande_fournisseur ADD COLUMN fk_account integer AFTER date_livraison; +ALTER TABLE llx_facture_fourn ADD COLUMN fk_account integer AFTER fk_projet; + diff --git a/htdocs/install/mysql/tables/llx_commande_fournisseur.sql b/htdocs/install/mysql/tables/llx_commande_fournisseur.sql index 51e57452397..d8076c1c06c 100644 --- a/htdocs/install/mysql/tables/llx_commande_fournisseur.sql +++ b/htdocs/install/mysql/tables/llx_commande_fournisseur.sql @@ -55,6 +55,7 @@ create table llx_commande_fournisseur model_pdf varchar(255), date_livraison date default NULL, + fk_account integer, -- bank account fk_cond_reglement integer, -- condition de reglement fk_mode_reglement integer, -- mode de reglement fk_input_method integer default 0, diff --git a/htdocs/install/mysql/tables/llx_facture_fourn.sql b/htdocs/install/mysql/tables/llx_facture_fourn.sql index c980d43e40f..2bb85f8400e 100644 --- a/htdocs/install/mysql/tables/llx_facture_fourn.sql +++ b/htdocs/install/mysql/tables/llx_facture_fourn.sql @@ -58,6 +58,7 @@ create table llx_facture_fourn fk_facture_source integer, -- facture origine si facture avoir fk_projet integer, -- projet auquel est associee la facture + fk_account integer, -- bank account fk_cond_reglement integer, -- condition de reglement (30 jours, fin de mois ...) fk_mode_reglement integer, -- mode de reglement (CHQ, VIR, ...) date_lim_reglement date, -- date limite de reglement From 387d36e4b06a2bf5a57da6d8f3bbf5fde8d3d191 Mon Sep 17 00:00:00 2001 From: frederic34 Date: Wed, 9 Jul 2014 18:00:21 +0200 Subject: [PATCH 17/27] Ste bank account for supplier order --- htdocs/comm/propal.php | 2 +- htdocs/commande/fiche.php | 2 +- .../class/fournisseur.commande.class.php | 5 ++++ htdocs/fourn/commande/fiche.php | 28 +++++++++++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php index 7ce92a5b569..c2183a2b6e1 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -1982,7 +1982,7 @@ if ($action == 'create') { print ''; print '
'; print $langs->trans('BankAccount'); print ''; - if (($action != 'editbankaccount') && $user->rights->propal->creer && ! empty($object->brouillon)) + if ($action != 'editbankaccount' && $user->rights->propal->creer) print 'id.'">'.img_edit($langs->trans('SetBankAccount'),1).'
'; print ''; diff --git a/htdocs/commande/fiche.php b/htdocs/commande/fiche.php index 19948e3c1b7..7bf3705c07d 100644 --- a/htdocs/commande/fiche.php +++ b/htdocs/commande/fiche.php @@ -2138,7 +2138,7 @@ if ($action == 'create' && $user->rights->commande->creer) { print ''; print '
'; print $langs->trans('BankAccount'); print ''; - if (($action != 'editbankaccount') && $user->rights->commande->creer && ! empty($object->brouillon)) + if ($action != 'editbankaccount' && $user->rights->commande->creer) print 'id.'">'.img_edit($langs->trans('SetBankAccount'),1).'
'; print ''; diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index b65fe31ceec..19432c09b78 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -74,6 +74,7 @@ class CommandeFournisseur extends CommonOrder var $fk_project; var $cond_reglement_id; var $cond_reglement_code; + var $fk_account; var $mode_reglement_id; var $mode_reglement_code; var $user_author_id; @@ -126,6 +127,7 @@ class CommandeFournisseur extends CommonOrder $sql.= " c.date_creation, c.date_valid, c.date_approve,"; $sql.= " c.fk_user_author, c.fk_user_valid, c.fk_user_approve,"; $sql.= " c.date_commande as date_commande, c.date_livraison as date_livraison, c.fk_cond_reglement, c.fk_mode_reglement, c.fk_projet as fk_project, c.remise_percent, c.source, c.fk_input_method,"; + $sql.= " c.fk_account,"; $sql.= " c.note_private, c.note_public, c.model_pdf, c.extraparams,"; $sql.= " cm.libelle as methode_commande,"; $sql.= " cr.code as cond_reglement_code, cr.libelle as cond_reglement_libelle,"; @@ -180,6 +182,7 @@ class CommandeFournisseur extends CommonOrder $this->cond_reglement_code = $obj->cond_reglement_code; $this->cond_reglement = $obj->cond_reglement_libelle; $this->cond_reglement_doc = $obj->cond_reglement_libelle; + $this->fk_account = $obj->fk_account; $this->mode_reglement_id = $obj->fk_mode_reglement; $this->mode_reglement_code = $obj->mode_reglement_code; $this->mode_reglement = $obj->mode_reglement_libelle; @@ -876,6 +879,7 @@ class CommandeFournisseur extends CommonOrder $sql.= ", model_pdf"; $sql.= ", fk_mode_reglement"; $sql.= ", fk_cond_reglement"; + $sql.= ", fk_account"; $sql.= ") "; $sql.= " VALUES ("; $sql.= "''"; @@ -892,6 +896,7 @@ class CommandeFournisseur extends CommonOrder $sql.= ", '".$conf->global->COMMANDE_SUPPLIER_ADDON_PDF."'"; $sql.= ", ".($this->mode_reglement_id > 0 ? $this->mode_reglement_id : 'null'); $sql.= ", ".($this->cond_reglement_id > 0 ? $this->cond_reglement_id : 'null'); + $sql.= ", ".($this->fk_account>0?$this->fk_account:'NULL'); $sql.= ")"; dol_syslog(get_class($this)."::create", LOG_DEBUG); diff --git a/htdocs/fourn/commande/fiche.php b/htdocs/fourn/commande/fiche.php index 05e2fe8822f..dbac3c4230d 100644 --- a/htdocs/fourn/commande/fiche.php +++ b/htdocs/fourn/commande/fiche.php @@ -125,6 +125,11 @@ else if ($action == 'setmode' && $user->rights->fournisseur->commande->creer) $result = $object->setPaymentMethods(GETPOST('mode_reglement_id','int')); } +// bank account +else if ($action == 'setbankaccount' && $user->rights->fournisseur->commande->creer) { + $result=$object->setBankAccount(GETPOST('fk_account', 'int')); + } + // date de livraison if ($action == 'setdate_livraison' && $user->rights->fournisseur->commande->creer) { @@ -776,6 +781,7 @@ else if ($action == 'add' && $user->rights->fournisseur->commande->creer) $object->socid = $socid; $object->cond_reglement_id = GETPOST('cond_reglement_id'); $object->mode_reglement_id = GETPOST('mode_reglement_id'); + $object->fk_account = GETPOST('fk_account', 'int'); $object->note_private = GETPOST('note_private'); $object->note_public = GETPOST('note_public'); @@ -1116,6 +1122,11 @@ if ($action=="create") $form->select_types_paiements(isset($_POST['mode_reglement_id'])?$_POST['mode_reglement_id']:$mode_reglement_id,'mode_reglement_id'); print ''; + // Bank Account + print '' . $langs->trans('BankAccount') . ''; + $form->select_comptes($fk_account, 'fk_account', 0, '', 1); + print ''; + print ''.$langs->trans('NotePublic').''; print ''; $doleditor = new DolEditor('note_public', GETPOST('note_public'), '', 80, 'dolibarr_notes', 'In', 0, false, true, ROWS_3, 70); @@ -1381,6 +1392,23 @@ elseif (! empty($object->id)) } print ''; + // Bank Account + print ''; + print ''; + print '
'; + print $langs->trans('BankAccount'); + print ''; + if ($action != 'editbankaccount' && $user->rights->fournisseur->commande->creer) + print 'id.'">'.img_edit($langs->trans('SetBankAccount'),1).'
'; + print ''; + if ($action == 'editbankaccount') { + $form->formSelectAccount($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'fk_account', 1); + } else { + $form->formSelectAccount($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'none'); + } + print ''; + print ''; + // Delivery date planed print ''; print ''; + // Bank Account + print ''; + // Project if (! empty($conf->projet->enabled)) { @@ -1776,6 +1788,23 @@ else } print ''; + // Bank Account + print '"; + print ''; + // Status $alreadypaid=$object->getSommePaiement(); print ''; @@ -2131,7 +2160,7 @@ else // Make payments if ($action != 'edit' && $object->statut == 1 && $object->paye == 0 && $user->societe_id == 0) { - print ''.$langs->trans('DoPayment').''; // must use facid because id is for payment id not invoice + print ''.$langs->trans('DoPayment').''; // must use facid because id is for payment id not invoice } // Classify paid From ab57c236bea95b6b93e6b2630bdf5e20672b40a2 Mon Sep 17 00:00:00 2001 From: fmarcet Date: Thu, 10 Jul 2014 12:06:09 +0200 Subject: [PATCH 19/27] New: Can have half day holiday New: Add Spanish holidays Fix: Holiday log shows nothing --- htdocs/core/lib/date.lib.php | 43 ++++++++++++++++++++++++++ htdocs/holiday/class/holiday.class.php | 4 +-- htdocs/holiday/fiche.php | 7 +++-- 3 files changed, 49 insertions(+), 5 deletions(-) diff --git a/htdocs/core/lib/date.lib.php b/htdocs/core/lib/date.lib.php index 4201cde9e9d..3c37a79b7dd 100644 --- a/htdocs/core/lib/date.lib.php +++ b/htdocs/core/lib/date.lib.php @@ -659,6 +659,49 @@ function num_public_holiday($timestampStart, $timestampEnd, $countrycode='FR') if($jour_semaine == 0 || $jour_semaine == 6) $ferie=true; //Samedi (6) et dimanche (0) } + + if ($countrycode == 'ES') + { + $countryfound=1; + + // Definition des dates feriees fixes + if($jour == 1 && $mois == 1) $ferie=true; // Año nuevo + if($jour == 6 && $mois == 1) $ferie=true; // Día Reyes + if($jour == 1 && $mois == 5) $ferie=true; // 1 Mayo + if($jour == 15 && $mois == 8) $ferie=true; // 15 Agosto + if($jour == 12 && $mois == 10) $ferie=true; // Día Hispanidad + if($jour == 1 && $mois == 11) $ferie=true; // 1 noviembre + if($jour == 6 && $mois == 12) $ferie=true; // Constitución + if($jour == 8 && $mois == 12) $ferie=true; // Inmaculada + if($jour == 25 && $mois == 12) $ferie=true; // 25 diciembre + + // Calcul día de Pascua + $date_paques = easter_date($annee); + $jour_paques = date("d", $date_paques); + $mois_paques = date("m", $date_paques); + if($jour_paques == $jour && $mois_paques == $mois) $ferie=true; + // Paques + + // Viernes Santo + $date_viernes = mktime( + date("H", $date_paques), + date("i", $date_paques), + date("s", $date_paques), + date("m", $date_paques), + date("d", $date_paques) -2, + date("Y", $date_paques) + ); + $jour_viernes = date("d", $date_viernes); + $mois_viernes = date("m", $date_viernes); + if($jour_viernes == $jour && $mois_viernes == $mois) $ferie=true; + //Viernes Santo + + // Calul des samedis et dimanches + $jour_julien = unixtojd($timestampStart); + $jour_semaine = jddayofweek($jour_julien, 0); + if($jour_semaine == 0 || $jour_semaine == 6) $ferie=true; + //Samedi (6) et dimanche (0) + } // Cas pays non defini if (! $countryfound) diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index 8ff312202f3..0e39f591bdd 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -1670,12 +1670,12 @@ class Holiday extends CommonObject // Filtrage de séléction if(!empty($filter)) { - $sql.= $filter; + $sql.= " ".$filter; } // Ordre d'affichage if(!empty($order)) { - $sql.= $order; + $sql.= " ".$order; } dol_syslog(get_class($this)."::fetchLog", LOG_DEBUG); diff --git a/htdocs/holiday/fiche.php b/htdocs/holiday/fiche.php index d66d1c8cfbd..93b426b5ad3 100644 --- a/htdocs/holiday/fiche.php +++ b/htdocs/holiday/fiche.php @@ -3,6 +3,7 @@ * Copyright (C) 2012-2013 Laurent Destailleur * Copyright (C) 2012 Regis Houssin * Copyright (C) 2013 Juanjo Menent + * Copyright (C) 2014 Ferran Marcet * * 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 @@ -111,7 +112,7 @@ if ($action == 'create') // Si aucun jours ouvrés dans la demande $nbopenedday=num_open_day($date_debut_gmt, $date_fin_gmt, 0, 1, $halfday); - if($nbopenedday < 1) + if($nbopenedday < 0.5) { header('Location: fiche.php?action=request&error=DureeHoliday'); exit; @@ -208,7 +209,7 @@ if ($action == 'update') // Si pas de jours ouvrés dans la demande $nbopenedday=num_open_day($date_debut_gmt, $date_fin_gmt, 0, 1, $halfday); - if ($nbopenedday < 1) + if ($nbopenedday < 0.5) { header('Location: fiche.php?id='.$_POST['holiday_id'].'&action=edit&error=DureeHoliday'); exit; @@ -398,7 +399,7 @@ if($action == 'confirm_valid') if ($verif > 0) { // Calculcate number of days consummed - $nbopenedday=num_open_day($cp->date_debut_gmt,$cp->date_fin_gmt,0,1); + $nbopenedday=num_open_day($cp->date_debut_gmt,$cp->date_fin_gmt,0,1,$cp->halfday); $soldeActuel = $cp->getCpforUser($cp->fk_user); $newSolde = $soldeActuel - ($nbopenedday * $cp->getConfCP('nbHolidayDeducted')); From d476ca4a682cdecc469a380f0d676cc2527ee987 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Thu, 10 Jul 2014 15:01:37 +0200 Subject: [PATCH 20/27] Support gigaoctets of session memory --- htdocs/install/check.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/install/check.php b/htdocs/install/check.php index a3d58458d43..063fefd62e0 100644 --- a/htdocs/install/check.php +++ b/htdocs/install/check.php @@ -152,6 +152,7 @@ if ($memmaxorig != '') preg_match('/([0-9]+)([a-zA-Z]*)/i',$memmax,$reg); if ($reg[2]) { + if (strtoupper($reg[2]) == 'G') $memmax=$reg[1]*1024*1024*1024; if (strtoupper($reg[2]) == 'M') $memmax=$reg[1]*1024*1024; if (strtoupper($reg[2]) == 'K') $memmax=$reg[1]*1024; } From 4a57a2adcd37660c079e768751b0d6e6ae6d07d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Thu, 10 Jul 2014 16:34:19 +0200 Subject: [PATCH 21/27] Added HTML5 autofocus attribute to login form --- htdocs/core/tpl/login.tpl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/tpl/login.tpl.php b/htdocs/core/tpl/login.tpl.php index bb67e863667..f77669a2726 100644 --- a/htdocs/core/tpl/login.tpl.php +++ b/htdocs/core/tpl/login.tpl.php @@ -77,7 +77,7 @@ $(document).ready(function () { From b206ceea9e101205fed673eab4132a99c7fcc4a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Thu, 10 Jul 2014 16:46:10 +0200 Subject: [PATCH 22/27] Added label for captcha --- htdocs/core/tpl/login.tpl.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/htdocs/core/tpl/login.tpl.php b/htdocs/core/tpl/login.tpl.php index f77669a2726..efd0b46d6b4 100644 --- a/htdocs/core/tpl/login.tpl.php +++ b/htdocs/core/tpl/login.tpl.php @@ -96,9 +96,12 @@ if (! empty($hookmanager->resArray['options'])) { } } ?> - + - + '; print ''; - print ''; + print ':'; + print ''; print ''; print "
'; From 742bdcb7155d46110b55155fb227e0646726c851 Mon Sep 17 00:00:00 2001 From: frederic34 Date: Wed, 9 Jul 2014 18:44:20 +0200 Subject: [PATCH 18/27] Set bank account for supplier invoices --- htdocs/compta/bank/treso.php | 3 +- .../fourn/class/fournisseur.facture.class.php | 7 ++++- htdocs/fourn/facture/fiche.php | 31 ++++++++++++++++++- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index 223e5e9d534..8ae2974b33f 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -171,7 +171,8 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) $sql2.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON ff.fk_soc = s.rowid"; $sql2.= " WHERE ff.entity = ".$conf->entity; $sql2.= " AND ff.paye = 0 AND fk_statut = 1"; // Not paid - $sql2.= " ORDER BY dlr ASC"; + $sql2.= " AND (ff.fk_account IN (0, ".$acct->id.") OR ff.fk_account IS NULL)"; // Id bank account of supplier invoice + $sql2.= " ORDER BY dlr ASC"; // Social contributions $sql3= " SELECT 'social_contribution' as family, cs.rowid as objid, cs.libelle as ref, (-1*cs.amount) as total_ttc, ccs.libelle as type, cs.date_ech as dlr"; diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index cb0a0abd17a..b01e3ee7891 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -79,6 +79,7 @@ class FactureFournisseur extends CommonInvoice var $propalid; var $cond_reglement_id; var $cond_reglement_code; + var $fk_account; var $mode_reglement_id; var $mode_reglement_code; @@ -174,6 +175,7 @@ class FactureFournisseur extends CommonInvoice $sql.= ", fk_projet"; $sql.= ", fk_cond_reglement"; $sql.= ", fk_mode_reglement"; + $sql.= ", fk_account"; $sql.= ", note_private"; $sql.= ", note_public"; $sql.= ", fk_user_author"; @@ -190,6 +192,7 @@ class FactureFournisseur extends CommonInvoice $sql.= ", ".(isset($this->fk_project)?$this->fk_project:"null"); $sql.= ", ".(isset($this->cond_reglement_id)?$this->cond_reglement_id:"null"); $sql.= ", ".(isset($this->mode_reglement_id)?$this->mode_reglement_id:"null"); + $sql.= ", ".($this->fk_account>0?$this->fk_account:'NULL'); $sql.= ", '".$this->db->escape($this->note_private)."'"; $sql.= ", '".$this->db->escape($this->note_public)."'"; $sql.= ", ".$user->id.","; @@ -333,7 +336,8 @@ class FactureFournisseur extends CommonInvoice $sql.= " t.fk_facture_source,"; $sql.= " t.fk_projet,"; $sql.= " t.fk_cond_reglement,"; - $sql.= " t.fk_mode_reglement,"; + $sql.= " t.fk_account,"; + $sql.= " t.fk_mode_reglement,"; $sql.= " t.date_lim_reglement,"; $sql.= " t.note_private,"; $sql.= " t.note_public,"; @@ -394,6 +398,7 @@ class FactureFournisseur extends CommonInvoice $this->cond_reglement_code = $obj->cond_reglement_code; $this->cond_reglement = $obj->cond_reglement_libelle; $this->cond_reglement_doc = $obj->cond_reglement_libelle; + $this->fk_account = $obj->fk_account; $this->mode_reglement_id = $obj->fk_mode_reglement; $this->mode_reglement_code = $obj->mode_reglement_code; $this->mode_reglement = $obj->mode_reglement_libelle; diff --git a/htdocs/fourn/facture/fiche.php b/htdocs/fourn/facture/fiche.php index 9cd11bd58bf..4e1c3246eff 100644 --- a/htdocs/fourn/facture/fiche.php +++ b/htdocs/fourn/facture/fiche.php @@ -215,6 +215,10 @@ else if ($action == 'setmode' && $user->rights->fournisseur->commande->creer) $result = $object->setPaymentMethods(GETPOST('mode_reglement_id','int')); } +// bank account +else if ($action == 'setbankaccount' && $user->rights->fournisseur->facture->creer) { + $result=$object->setBankAccount(GETPOST('fk_account', 'int')); +} // Set label elseif ($action == 'setlabel' && $user->rights->fournisseur->facture->creer) @@ -305,6 +309,7 @@ elseif ($action == 'add' && $user->rights->fournisseur->facture->creer) $object->note_private = GETPOST('note_private'); $object->cond_reglement_id = GETPOST('cond_reglement_id'); $object->mode_reglement_id = GETPOST('mode_reglement_id'); + $object->fk_account = GETPOST('fk_account', 'int'); $object->fk_project = ($tmpproject > 0) ? $tmpproject : null; // Auto calculation of date due if not filled by user @@ -1164,6 +1169,7 @@ if ($action == 'create') $soc = $objectsrc->thirdparty; $cond_reglement_id = (!empty($objectsrc->cond_reglement_id)?$objectsrc->cond_reglement_id:(!empty($soc->cond_reglement_supplier_id)?$soc->cond_reglement_supplier_id:1)); $mode_reglement_id = (!empty($objectsrc->mode_reglement_id)?$objectsrc->mode_reglement_id:(!empty($soc->mode_reglement_supplier_id)?$soc->mode_reglement_supplier_id:0)); + $fk_account = (! empty($objectsrc->fk_account)?$objectsrc->fk_account:(! empty($soc->fk_account)?$soc->fk_account:0)); $remise_percent = (!empty($objectsrc->remise_percent)?$objectsrc->remise_percent:(!empty($soc->remise_percent)?$soc->remise_percent:0)); $remise_absolue = (!empty($objectsrc->remise_absolue)?$objectsrc->remise_absolue:(!empty($soc->remise_absolue)?$soc->remise_absolue:0)); $dateinvoice = empty($conf->global->MAIN_AUTOFILL_DATE)?-1:''; @@ -1178,6 +1184,7 @@ if ($action == 'create') { $cond_reglement_id = $societe->cond_reglement_supplier_id; $mode_reglement_id = $societe->mode_reglement_supplier_id; + $fk_account = $societe->fk_account; $datetmp=dol_mktime(12,0,0,$_POST['remonth'],$_POST['reday'],$_POST['reyear']); $dateinvoice=($datetmp==''?(empty($conf->global->MAIN_AUTOFILL_DATE)?-1:''):$datetmp); $datetmp=dol_mktime(12,0,0,$_POST['echmonth'],$_POST['echday'],$_POST['echyear']); @@ -1320,6 +1327,11 @@ if ($action == 'create') $form->select_types_paiements(isset($_POST['mode_reglement_id'])?$_POST['mode_reglement_id']:$mode_reglement_id,'mode_reglement_id'); print '
'.$langs->trans('BankAccount').''; + $form->select_comptes($fk_account, 'fk_account', 0, '', 1); + print '
'; + print ''; + print '
'; + print $langs->trans('BankAccount'); + print ''; + if ($action != 'editbankaccount' && $user->rights->fournisseur->facture->creer) + print 'id.'">'.img_edit($langs->trans('SetBankAccount'),1).'
'; + print '
'; + if ($action == 'editbankaccount') { + $form->formSelectAccount($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'fk_account', 1); + } else { + $form->formSelectAccount($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'none'); + } + print "
'.$langs->trans('Status').''.$object->getLibStatut(4,$alreadypaid).'
- +
trans('SecurityCode'); ?>
From a6c1cfca7e972f2e87e6e41ad9892b4246fecfa0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Jul 2014 12:42:47 +0200 Subject: [PATCH 23/27] Fix: bad translation --- 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 fd3f8979532..00d2521c309 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -296,7 +296,7 @@ CurrentVersion=Dolibarr current version CallUpdatePage=Go to the page that updates the database structure and datas: %s. LastStableVersion=Last stable version GenericMaskCodes=You may enter any numbering mask. In this mask, the following tags could be used:
{000000} corresponds to a number which will be incremented on each %s. Enter as many zeros as the desired length of the counter. The counter will be completed by zeros from the left in order to have as many zeros as the mask.
{000000+000} same as previous but an offset corresponding to the number to the right of the + sign is applied starting on first %s.
{000000@x} same as previous but the counter is reset to zero when month x is reached (x between 1 and 12, or 0 to use the early months of fiscal year defined in your configuration, or 99 to reset to zero every month). If this option is used and x is 2 or higher, then sequence {yy}{mm} or {yyyy}{mm} is also required.
{dd} day (01 to 31).
{mm} month (01 to 12).
{yy}, {yyyy} or {y} year over 2, 4 or 1 numbers.
-GenericMaskCodes2={cccc} the client code on n characters
{cccc000} the client code on n characters is followed by a counter dedicated for customer. This counter dedicated to customer is reset at same time than global counter.
{tttt} The code of company type on n characters (see dictionary-company types).
+GenericMaskCodes2={cccc} the client code on n characters
{cccc000} the client code on n characters is followed by a counter dedicated for customer. This counter dedicated to customer is reset at same time than global counter.
{tttt} The code of thirdparty type on n characters (see dictionary-thirdparty types).
GenericMaskCodes3=All other characters in the mask will remain intact.
Spaces are not allowed.
GenericMaskCodes4a=Example on the 99th %s of the third party TheCompany done 2007-01-31:
GenericMaskCodes4b=Example on third party created on 2007-03-01:
From 55d062784dd0313016c10ced980f8b0f9d55076e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Thu, 10 Jul 2014 17:36:39 +0200 Subject: [PATCH 24/27] Added labels on objectline form elements --- htdocs/core/class/commonobject.class.php | 10 +++++----- htdocs/core/tpl/objectline_create.tpl.php | 22 ++++++++++++++-------- htdocs/core/tpl/objectline_edit.tpl.php | 4 ++-- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 54ad75515f7..34891fb7045 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -2714,21 +2714,21 @@ abstract class CommonObject if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER)) print '
'; // Description - print ''; + print ''; // VAT - print ''; + print ''; // Price HT - print ''; + print ''; if ($conf->global->MAIN_FEATURES_LEVEL > 1) print ''; // Qty - print ''; + print ''; // Reduction short - print ''; + print ''; if (! empty($conf->margin->enabled) && empty($user->societe_id)) { diff --git a/htdocs/core/tpl/objectline_create.tpl.php b/htdocs/core/tpl/objectline_create.tpl.php index 170cc1e0fc7..719d6c1794c 100644 --- a/htdocs/core/tpl/objectline_create.tpl.php +++ b/htdocs/core/tpl/objectline_create.tpl.php @@ -50,23 +50,25 @@ if (in_array($object->element,array('propal','facture','invoice','commande','ord global->MAIN_VIEW_LINE_NUMBER) ? ' colspan="2"' : ''); ?>>
trans('AddNewLine'); ?>trans("FreeZone"); ?> -
- + + - + - - + + element) && $object->element == 'contrat')?'1':'0').'">'; } else {*/ + echo ''; /* if (empty($conf->product->enabled) && empty($conf->service->enabled)) echo $langs->trans("Type"); else if (! empty($forceall) || (! empty($conf->product->enabled) && ! empty($conf->service->enabled))) echo $langs->trans("FreeLineOfType"); @@ -124,6 +128,7 @@ else { echo '
'; echo ' '; + echo ''; echo ' '; $filtertype=''; @@ -184,7 +190,7 @@ else { - - + qty > $line->stock) print img_picto($langs->trans("StockTooLow"),"warning", 'style="vertical-align: bottom;"')." "; ?> - +   @@ -115,7 +115,7 @@ $coldisplay=-1; // We remove first td \n"; $var=false; print ""; print ''; print ""; print ''; print ""; print ''; print ""; diff --git a/htdocs/comm/index.php b/htdocs/comm/index.php index 98653992025..eada82f7f6a 100644 --- a/htdocs/comm/index.php +++ b/htdocs/comm/index.php @@ -78,9 +78,9 @@ if (! empty($conf->propal->enabled) && $user->rights->propal->lire) print ''; print ''; print ''; - print ''; + print ''; print ''; - print ''; + print ''; print ''; print "
'.$langs->trans("SearchAProposal").'
'.$langs->trans("Ref").'::
'.$langs->trans("Other").':
:
\n"; print "
\n"; @@ -95,8 +95,8 @@ if (! empty($conf->commande->enabled) && $user->rights->commande->lire) print ''; print '
'.$langs->trans("SearchACustomerOrder").'
'; - print $langs->trans("Ref").':
'.$langs->trans("Other").':
:

\n"; } @@ -110,9 +110,9 @@ if (! empty($conf->contrat->enabled) && $user->rights->contrat->lire) print ''; print ''; print ''; - print ''; + print ''; print ''; - print ''; + print ''; print ''; print "
'.$langs->trans("SearchAContract").'
'.$langs->trans("Ref").'::
'.$langs->trans("Other").':
:
\n"; print "
"; diff --git a/htdocs/compta/hrm.php b/htdocs/compta/hrm.php index a8ce6a45714..cd2d2b60f7e 100644 --- a/htdocs/compta/hrm.php +++ b/htdocs/compta/hrm.php @@ -96,9 +96,9 @@ if (! empty($conf->deplacement->enabled) && $user->rights->deplacement->lire) print ''; print ''; print ""; - print "'; + print "'; print ''; - //print "'; + //print "'; print ''; print "
'.$langs->trans("SearchATripAndExpense").'
".$langs->trans("Ref").'::
".$langs->trans("Other").':
:

"; } diff --git a/htdocs/compta/index.php b/htdocs/compta/index.php index 205aba9a778..442016f38fd 100644 --- a/htdocs/compta/index.php +++ b/htdocs/compta/index.php @@ -97,9 +97,9 @@ if (! empty($conf->facture->enabled) && $user->rights->facture->lire) print ''; print ""; print ''; - print "'; + print "'; print ''; - print "'; + print "'; print ''; print "
'.$langs->trans("SearchACustomerInvoice").'
".$langs->trans("Ref").':
:
".$langs->trans("Other").':
:

"; } @@ -114,9 +114,9 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->lire) print ''; print ''; print ""; - print "'; + print "'; print ''; - print "'; + print "'; print ''; print "
'.$langs->trans("SearchASupplierInvoice").'
".$langs->trans("Ref").'::
".$langs->trans("RefSupplier").':
:

"; } @@ -132,9 +132,9 @@ if (! empty($conf->don->enabled) && $user->rights->don->lire) print ''; print ''; print ""; - print "'; + print "'; print ''; - //print "'; + //print "'; print ''; print "
'.$langs->trans("SearchADonation").'
".$langs->trans("Ref").'::
".$langs->trans("Other").':
:

"; } diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index bdaaffdafe3..f35d493a485 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1800,18 +1800,21 @@ function printSearchForm($urlaction,$urlobject,$title,$htmlmodesearch,$htmlinput global $conf,$langs; $ret=''; - $ret.=''; $ret.='
'; + $ret.=''; $ret.=''; $ret.=''; $ret.=''; $ret.='global->MAIN_HTML5_PLACEHOLDER)) $ret.=' placeholder="'.$langs->trans("SearchOf").''.strip_tags($title).'"'; else $ret.=' title="'.$langs->trans("SearchOf").''.strip_tags($title).'"'; - $ret.=' name="'.$htmlinputname.'" size="10" />'; + $ret.=' name="'.$htmlinputname.'" id="'.$htmlinputname.'" size="10" />'; $ret.=''; $ret.="
\n"; return $ret; diff --git a/htdocs/product/index.php b/htdocs/product/index.php index b3af35d5b3c..1770e046ed3 100644 --- a/htdocs/product/index.php +++ b/htdocs/product/index.php @@ -83,17 +83,17 @@ print ''; print ""; print ''; print "'; +print ':'; print ''; if (! empty($conf->barcode->enabled)) { print "'; + print ':'; //print ''; print ''; } print "'; +print ':'; //print ''; print ''; print "
'.$langs->trans("Search").'
"; -print $langs->trans("Ref").':
"; - print $langs->trans("BarCode").':
"; -print $langs->trans("Other").':

"; diff --git a/htdocs/societe/index.php b/htdocs/societe/index.php index 3cf38a58b90..766e44cf9a7 100644 --- a/htdocs/societe/index.php +++ b/htdocs/societe/index.php @@ -66,17 +66,17 @@ print ''; print ''; print ''; print "'; +print ':'; print ''; if (! empty($conf->barcode->enabled)) { print "'; + print ':'; //print ''; print ''; } print "'; +print ':'; //print ''; print ''; From d167fb4fcd4a47aa6fe7994e474ec42b566aa270 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Jul 2014 13:55:15 +0200 Subject: [PATCH 26/27] Wok on page to show events per users. --- htdocs/comm/action/index.php | 4 +- htdocs/comm/action/peruser.php | 480 +++++++++++++++++++++++++++++++++ 2 files changed, 482 insertions(+), 2 deletions(-) create mode 100644 htdocs/comm/action/peruser.php diff --git a/htdocs/comm/action/index.php b/htdocs/comm/action/index.php index 0fd1a57f5ef..b3c66fb6a3c 100644 --- a/htdocs/comm/action/index.php +++ b/htdocs/comm/action/index.php @@ -1023,8 +1023,6 @@ else // View by day } -$db->close(); - /* TODO Export print ' @@ -1041,6 +1039,8 @@ $("#actionagenda_vcal_link").attr("href","/public/agenda/agendaexport.php?format llxFooter(); +$db->close(); + /** * Show event of a particular day diff --git a/htdocs/comm/action/peruser.php b/htdocs/comm/action/peruser.php new file mode 100644 index 00000000000..7bd0edafe69 --- /dev/null +++ b/htdocs/comm/action/peruser.php @@ -0,0 +1,480 @@ + + * Copyright (C) 2003 Eric Seigne + * Copyright (C) 2004-2014 Laurent Destailleur + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2011 Juanjo Menent + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +/** + * \file htdocs/comm/action/peruser.php + * \ingroup agenda + * \brief Tab of calendar events per user + */ + +require '../../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; +require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; +require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/agenda.lib.php'; +if (! empty($conf->projet->enabled)) { + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; +} + +if (! isset($conf->global->AGENDA_MAX_EVENTS_DAY_VIEW)) $conf->global->AGENDA_MAX_EVENTS_DAY_VIEW=3; + +$filter=GETPOST("filter",'',3); +$filtera = GETPOST("userasked","int",3)?GETPOST("userasked","int",3):GETPOST("filtera","int",3); +$filtert = GETPOST("usertodo","int",3)?GETPOST("usertodo","int",3):GETPOST("filtert","int",3); +$filterd = GETPOST("userdone","int",3)?GETPOST("userdone","int",3):GETPOST("filterd","int",3); +$usergroup = GETPOST("usergroup","int",3); +$showbirthday = empty($conf->use_javascript_ajax)?GETPOST("showbirthday","int"):1; + + +$sortfield = GETPOST("sortfield",'alpha'); +$sortorder = GETPOST("sortorder",'alpha'); +$page = GETPOST("page","int"); +if ($page == -1) { $page = 0; } +$limit = $conf->liste_limit; +$offset = $limit * $page; +if (! $sortorder) $sortorder="ASC"; +if (! $sortfield) $sortfield="a.datec"; + +// Security check +$socid = GETPOST("socid","int"); +if ($user->societe_id) $socid=$user->societe_id; +$result = restrictedArea($user, 'agenda', 0, '', 'myactions'); +if ($socid < 0) $socid=''; + +$canedit=1; +if (! $user->rights->agenda->myactions->read) accessforbidden(); +if (! $user->rights->agenda->allactions->read) $canedit=0; +if (! $user->rights->agenda->allactions->read || $filter =='mine') // If no permission to see all, we show only affected to me +{ + $filtera=$user->id; + $filtert=$user->id; + $filterd=$user->id; +} + +$action=GETPOST('action','alpha'); +//$year=GETPOST("year"); +$year=GETPOST("year","int")?GETPOST("year","int"):date("Y"); +$month=GETPOST("month","int")?GETPOST("month","int"):date("m"); +$week=GETPOST("week","int")?GETPOST("week","int"):date("W"); +$day=GETPOST("day","int")?GETPOST("day","int"):0; +$pid=GETPOST("projectid","int",3); +$status=GETPOST("status"); +$type=GETPOST("type"); +$maxprint=(isset($_GET["maxprint"])?GETPOST("maxprint"):$conf->global->AGENDA_MAX_EVENTS_DAY_VIEW); +$actioncode=GETPOST("actioncode","alpha",3)?GETPOST("actioncode","alpha",3):(GETPOST("actioncode")=='0'?'0':''); + +if ($actioncode == '') $actioncode=(empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE)?'':$conf->global->AGENDA_DEFAULT_FILTER_TYPE); +if ($status == '') $status=(empty($conf->global->AGENDA_DEFAULT_FILTER_STATUS)?'':$conf->global->AGENDA_DEFAULT_FILTER_STATUS); +if (empty($action)) $action=(empty($conf->global->AGENDA_DEFAULT_VIEW)?'show_month':$conf->global->AGENDA_DEFAULT_VIEW); + +if (GETPOST('viewcal') && $action != 'show_day' && $action != 'show_week') { + $action='show_month'; $day=''; +} // View by month +if (GETPOST('viewweek') || $action == 'show_week') { + $action='show_week'; $week=($week?$week:date("W")); $day=($day?$day:date("d")); +} // View by week +if (GETPOST('viewday') || $action == 'show_day') { + $action='show_day'; $day=($day?$day:date("d")); +} // View by day + + +$langs->load("agenda"); +$langs->load("other"); +$langs->load("commercial"); + +// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array +$hookmanager->initHooks(array('agenda')); + + +/* + * Actions + */ + +// None + + +/* + * View + */ + +$help_url='EN:Module_Agenda_En|FR:Module_Agenda|ES:Módulo_Agenda'; +llxHeader('',$langs->trans("Agenda"),$help_url); + +$form=new Form($db); +$companystatic=new Societe($db); +$contactstatic=new Contact($db); + +$now=dol_now(); +$nowarray=dol_getdate($now); +$nowyear=$nowarray['year']; +$nowmonth=$nowarray['mon']; +$nowday=$nowarray['mday']; + +// Define list of all external calendars +$listofextcals=array(); +if (empty($conf->global->AGENDA_DISABLE_EXT) && $conf->global->AGENDA_EXT_NB > 0) +{ + $i=0; + while($i < $conf->global->AGENDA_EXT_NB) + { + $i++; + $source='AGENDA_EXT_SRC'.$i; + $name='AGENDA_EXT_NAME'.$i; + $color='AGENDA_EXT_COLOR'.$i; + $buggedfile='AGENDA_EXT_BUGGEDFILE'.$i; + if (! empty($conf->global->$source) && ! empty($conf->global->$name)) + { + // Note: $conf->global->buggedfile can be empty or 'uselocalandtznodaylight' or 'uselocalandtzdaylight' + $listofextcals[]=array('src'=>$conf->global->$source,'name'=>$conf->global->$name,'color'=>$conf->global->$color,'buggedfile'=>(isset($conf->global->buggedfile)?$conf->global->buggedfile:0)); + } + } +} + + +if (empty($action) || $action=='show_month') +{ + $prev = dol_get_prev_month($month, $year); + $prev_year = $prev['year']; + $prev_month = $prev['month']; + $next = dol_get_next_month($month, $year); + $next_year = $next['year']; + $next_month = $next['month']; + + $max_day_in_prev_month = date("t",dol_mktime(0,0,0,$prev_month,1,$prev_year)); // Nb of days in previous month + $max_day_in_month = date("t",dol_mktime(0,0,0,$month,1,$year)); // Nb of days in next month + // tmpday is a negative or null cursor to know how many days before the 1 to show on month view (if tmpday=0 we start on monday) + $tmpday = -date("w",dol_mktime(0,0,0,$month,1,$year))+2; + $tmpday+=((isset($conf->global->MAIN_START_WEEK)?$conf->global->MAIN_START_WEEK:1)-1); + if ($tmpday >= 1) $tmpday -= 7; + // Define firstdaytoshow and lastdaytoshow + $firstdaytoshow=dol_mktime(0,0,0,$prev_month,$max_day_in_prev_month+$tmpday,$prev_year); + $next_day=7-($max_day_in_month+1-$tmpday)%7; + if ($next_day < 6) $next_day+=7; + $lastdaytoshow=dol_mktime(0,0,0,$next_month,$next_day,$next_year); +} +if ($action=='show_week') +{ + $prev = dol_get_first_day_week($day, $month, $year); + $prev_year = $prev['prev_year']; + $prev_month = $prev['prev_month']; + $prev_day = $prev['prev_day']; + $first_day = $prev['first_day']; + + $week = $prev['week']; + + $day = (int) $day; + $next = dol_get_next_week($day, $week, $month, $year); + $next_year = $next['year']; + $next_month = $next['month']; + $next_day = $next['day']; + + // Define firstdaytoshow and lastdaytoshow + $firstdaytoshow=dol_mktime(0,0,0,$prev_month,$first_day,$prev_year); + $lastdaytoshow=dol_mktime(0,0,0,$next_month,$next_day,$next_year); + + $max_day_in_month = date("t",dol_mktime(0,0,0,$month,1,$year)); + + $tmpday = $first_day; +} +if ($action == 'show_day') +{ + $prev = dol_get_prev_day($day, $month, $year); + $prev_year = $prev['year']; + $prev_month = $prev['month']; + $prev_day = $prev['day']; + $next = dol_get_next_day($day, $month, $year); + $next_year = $next['year']; + $next_month = $next['month']; + $next_day = $next['day']; + + // Define firstdaytoshow and lastdaytoshow + $firstdaytoshow=dol_mktime(0,0,0,$prev_month,$prev_day,$prev_year); + $lastdaytoshow=dol_mktime(0,0,0,$next_month,$next_day,$next_year); +} +//print 'xx'.$prev_year.'-'.$prev_month.'-'.$prev_day; +//print 'xx'.$next_year.'-'.$next_month.'-'.$next_day; +//print dol_print_date($firstdaytoshow,'day'); +//print dol_print_date($lastdaytoshow,'day'); + +$title=$langs->trans("DoneAndToDoActions"); +if ($status == 'done') $title=$langs->trans("DoneActions"); +if ($status == 'todo') $title=$langs->trans("ToDoActions"); + +$param=''; +if ($status) $param="&status=".$status; +if ($filter) $param.="&filter=".$filter; +if ($filtera) $param.="&filtera=".$filtera; +if ($filtert) $param.="&filtert=".$filtert; +if ($filterd) $param.="&filterd=".$filterd; +if ($socid) $param.="&socid=".$socid; +if ($showbirthday) $param.="&showbirthday=1"; +if ($pid) $param.="&projectid=".$pid; +if ($actioncode != '') $param.="&actioncode=".$actioncode; +if ($type) $param.="&type=".$type; +if ($action == 'show_day' || $action == 'show_week') $param.='&action='.$action; +$param.="&maxprint=".$maxprint; + +// Show navigation bar +if (empty($action) || $action=='show_month') +{ + $nav ="".img_previous($langs->trans("Previous"))."\n"; + $nav.=" ".dol_print_date(dol_mktime(0,0,0,$month,1,$year),"%b %Y"); + $nav.=" \n"; + $nav.="".img_next($langs->trans("Next"))."\n"; + $nav.="   (".$langs->trans("Today").")"; + $picto='calendar'; +} +if ($action=='show_week') +{ + $nav ="".img_previous($langs->trans("Previous"))."\n"; + $nav.=" ".dol_print_date(dol_mktime(0,0,0,$month,1,$year),"%Y").", ".$langs->trans("Week")." ".$week; + $nav.=" \n"; + $nav.="".img_next($langs->trans("Next"))."\n"; + $nav.="   (".$langs->trans("Today").")"; + $picto='calendarweek'; +} +if ($action=='show_day') +{ + $nav ="".img_previous($langs->trans("Previous"))."\n"; + $nav.=" ".dol_print_date(dol_mktime(0,0,0,$month,$day,$year),"daytextshort"); + $nav.=" \n"; + $nav.="".img_next($langs->trans("Next"))."\n"; + $nav.="   (".$langs->trans("Today").")"; + $picto='calendarday'; +} + +// Must be after the nav definition +$param.='&year='.$year.'&month='.$month.($day?'&day='.$day:''); +//print 'x'.$param; + + + + +$tabactive='cardperuser'; + +$paramnoaction=preg_replace('/action=[a-z_]+/','',$param); + +$head = calendars_prepare_head($paramnoaction); + +dol_fiche_head($head, $tabactive, $langs->trans('Agenda'), 0, 'action'); +print_actions_filter($form,$canedit,$status,$year,$month,$day,$showbirthday,$filtera,$filtert,$filterd,$pid,$socid,$listofextcals,$actioncode,$usergroup); +dol_fiche_end(); + +print_fiche_titre($s,$link.'     '.$nav, ''); + + +// Get event in an array +$eventarray=array(); + +$sql = 'SELECT a.id,a.label,'; +$sql.= ' a.datep,'; +$sql.= ' a.datep2,'; +$sql.= ' a.datea,'; +$sql.= ' a.datea2,'; +$sql.= ' a.percent,'; +$sql.= ' a.fk_user_author,a.fk_user_action,a.fk_user_done,'; +$sql.= ' a.transparency, a.priority, a.fulldayevent, a.location,'; +$sql.= ' a.fk_soc, a.fk_contact,'; +$sql.= ' ca.code'; +$sql.= ' FROM '.MAIN_DB_PREFIX.'c_actioncomm as ca, '.MAIN_DB_PREFIX."actioncomm as a"; +if (! $user->rights->societe->client->voir && ! $socid) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON a.fk_soc = sc.fk_soc"; +if ($usergroup > 0) $sql.= ", ".MAIN_DB_PREFIX."usergroup_user as ugu"; +$sql.= ' WHERE a.fk_action = ca.id'; +$sql.= ' AND a.entity IN ('.getEntity('agenda', 1).')'; +if ($actioncode) $sql.=" AND ca.code='".$db->escape($actioncode)."'"; +if ($pid) $sql.=" AND a.fk_project=".$db->escape($pid); +if (! $user->rights->societe->client->voir && ! $socid) $sql.= " AND (a.fk_soc IS NULL OR sc.fk_user = " .$user->id . ")"; +if ($socid > 0) $sql.= ' AND a.fk_soc = '.$socid; +if ($usergroup > 0) $sql.= " AND ugu.fk_user = a.fk_user_action"; +if ($action == 'show_day') +{ + $sql.= " AND ("; + $sql.= " (a.datep BETWEEN '".$db->idate(dol_mktime(0,0,0,$month,$day,$year))."'"; + $sql.= " AND '".$db->idate(dol_mktime(23,59,59,$month,$day,$year))."')"; + $sql.= " OR "; + $sql.= " (a.datep2 BETWEEN '".$db->idate(dol_mktime(0,0,0,$month,$day,$year))."'"; + $sql.= " AND '".$db->idate(dol_mktime(23,59,59,$month,$day,$year))."')"; + $sql.= " OR "; + $sql.= " (a.datep < '".$db->idate(dol_mktime(0,0,0,$month,$day,$year))."'"; + $sql.= " AND a.datep2 > '".$db->idate(dol_mktime(23,59,59,$month,$day,$year))."')"; + $sql.= ')'; +} +else +{ + // To limit array + $sql.= " AND ("; + $sql.= " (a.datep BETWEEN '".$db->idate(dol_mktime(0,0,0,$month,1,$year)-(60*60*24*7))."'"; // Start 7 days before + $sql.= " AND '".$db->idate(dol_mktime(23,59,59,$month,28,$year)+(60*60*24*10))."')"; // End 7 days after + 3 to go from 28 to 31 + $sql.= " OR "; + $sql.= " (a.datep2 BETWEEN '".$db->idate(dol_mktime(0,0,0,$month,1,$year)-(60*60*24*7))."'"; + $sql.= " AND '".$db->idate(dol_mktime(23,59,59,$month,28,$year)+(60*60*24*10))."')"; + $sql.= " OR "; + $sql.= " (a.datep < '".$db->idate(dol_mktime(0,0,0,$month,1,$year)-(60*60*24*7))."'"; + $sql.= " AND a.datep2 > '".$db->idate(dol_mktime(23,59,59,$month,28,$year)+(60*60*24*10))."')"; + $sql.= ')'; +} +if ($type) $sql.= " AND ca.id = ".$type; +if ($status == '0') { $sql.= " AND a.percent = 0"; } +if ($status == '-1') { $sql.= " AND a.percent = -1"; } // Not applicable +if ($status == '50') { $sql.= " AND (a.percent >= 0 AND a.percent < 100)"; } // Running +if ($status == 'done' || $status == '100') { $sql.= " AND (a.percent = 100 OR (a.percent = -1 AND a.datep2 <= '".$db->idate($now)."'))"; } +if ($status == 'todo') { $sql.= " AND ((a.percent >= 0 AND a.percent < 100) OR (a.percent = -1 AND a.datep2 > '".$db->idate($now)."'))"; } +if ($filtera > 0 || $filtert > 0 || $filterd > 0 || $usergroup > 0) +{ + $sql.= " AND ("; + if ($filtera > 0) $sql.= " a.fk_user_author = ".$filtera; + if ($filtert > 0) $sql.= ($filtera>0?" OR ":"")." a.fk_user_action = ".$filtert; + if ($filterd > 0) $sql.= ($filtera>0||$filtert>0?" OR ":"")." a.fk_user_done = ".$filterd; + if ($usergroup > 0) $sql.= ($filtera>0||$filtert>0||$filterd>0?" OR ":"")." ugu.fk_usergroup = ".$usergroup; + $sql.= ")"; +} +// Sort on date +$sql.= ' ORDER BY datep'; +//print $sql; + +dol_syslog("comm/action/index.php", LOG_DEBUG); +$resql=$db->query($sql); +if ($resql) +{ + $num = $db->num_rows($resql); + $i=0; + while ($i < $num) + { + $obj = $db->fetch_object($resql); + + // Create a new object action + $event=new ActionComm($db); + $event->id=$obj->id; + $event->datep=$db->jdate($obj->datep); // datep and datef are GMT date + $event->datef=$db->jdate($obj->datep2); + $event->type_code=$obj->code; + $event->libelle=$obj->label; + $event->percentage=$obj->percent; + $event->author->id=$obj->fk_user_author; // user id of creator + $event->usertodo->id=$obj->fk_user_action; // user id of owner + $event->userdone->id=$obj->fk_user_done; // deprecated + // $event->userstodo=... with s after user, in future version, will be an array with all id of user assigned to event + $event->priority=$obj->priority; + $event->fulldayevent=$obj->fulldayevent; + $event->location=$obj->location; + $event->transparency=$obj->transparency; + + $event->societe->id=$obj->fk_soc; + $event->contact->id=$obj->fk_contact; + + // Defined date_start_in_calendar and date_end_in_calendar property + // They are date start and end of action but modified to not be outside calendar view. + if ($event->percentage <= 0) + { + $event->date_start_in_calendar=$event->datep; + if ($event->datef != '' && $event->datef >= $event->datep) $event->date_end_in_calendar=$event->datef; + else $event->date_end_in_calendar=$event->datep; + } + else + { + $event->date_start_in_calendar=$event->datep; + if ($event->datef != '' && $event->datef >= $event->datep) $event->date_end_in_calendar=$event->datef; + else $event->date_end_in_calendar=$event->datep; + } + // Define ponctual property + if ($event->date_start_in_calendar == $event->date_end_in_calendar) + { + $event->ponctuel=1; + } + + // Check values + if ($event->date_end_in_calendar < $firstdaytoshow || + $event->date_start_in_calendar > $lastdaytoshow) + { + // This record is out of visible range + } + else + { + if ($event->date_start_in_calendar < $firstdaytoshow) $event->date_start_in_calendar=$firstdaytoshow; + if ($event->date_end_in_calendar > $lastdaytoshow) $event->date_end_in_calendar=$lastdaytoshow; + + // Add an entry in actionarray for each day + $daycursor=$event->date_start_in_calendar; + $annee = date('Y',$daycursor); + $mois = date('m',$daycursor); + $jour = date('d',$daycursor); + + // Loop on each day covered by action to prepare an index to show on calendar + $loop=true; $j=0; + $daykey=dol_mktime(0,0,0,$mois,$jour,$annee); + do + { + //if ($event->id==408) print 'daykey='.$daykey.' '.$event->datep.' '.$event->datef.'
'; + + $eventarray[$daykey][]=$event; + $j++; + + $daykey+=60*60*24; + if ($daykey > $event->date_end_in_calendar) $loop=false; + } + while ($loop); + + //print 'Event '.$i.' id='.$event->id.' (start='.dol_print_date($event->datep).'-end='.dol_print_date($event->datef); + //print ' startincalendar='.dol_print_date($event->date_start_in_calendar).'-endincalendar='.dol_print_date($event->date_end_in_calendar).') was added in '.$j.' different index key of array
'; + } + $i++; + + } +} +else +{ + dol_print_error($db); +} + +$maxnbofchar=18; +$cachethirdparties=array(); +$cachecontacts=array(); + +// Define theme_datacolor array +$color_file = DOL_DOCUMENT_ROOT."/theme/".$conf->theme."/graph-color.php"; +if (is_readable($color_file)) +{ + include_once $color_file; +} +if (! is_array($theme_datacolor)) $theme_datacolor=array(array(120,130,150), array(200,160,180), array(190,190,220)); + + + + +/* TODO Export + print ' + + + + + +'; +*/ + +llxFooter(); + +$db->close(); From 32b015e661fcb50e85847bf277f978053f6e64d8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Jul 2014 13:56:35 +0200 Subject: [PATCH 27/27] New: Type of thirdparties can accept a country (to show list of types specific for a country). --- ChangeLog | 10 ++++-- htdocs/admin/dict.php | 33 ++++++++++++------- htdocs/core/class/ctypent.class.php | 6 ++-- htdocs/core/class/html.formcompany.class.php | 4 +-- htdocs/install/mysql/data/llx_c_typent.sql | 24 +++++++------- .../install/mysql/migration/3.6.0-3.7.0.sql | 9 +++-- htdocs/install/mysql/tables/llx_c_typent.sql | 11 ++++--- 7 files changed, 60 insertions(+), 37 deletions(-) diff --git a/ChangeLog b/ChangeLog index 32bb738eba6..0164ca14788 100644 --- a/ChangeLog +++ b/ChangeLog @@ -8,15 +8,19 @@ For users: - New: [ task #867 ] Remove ESAEB external module code from core. - New: Can create proposal from an intervention. - New: Can filter events on a group of users. -- New: Add thirdparty to filter on events. +- New: Can filter events of a thirdparty. +- New: Split Agenda view (month, week, day) into different tabs. - New: Form to add a photo is immediatly available on photo page if permissions are ok (save one click per photo to add). - New: Add option PRODUCT_MAX_VISIBLE_PHOTO to limit number of photos shown on main product card. - New: Add event FICHINTER_CLASSIFY_BILLED into list of possible events to create an automatic event into agenda. -- New: Add new type of event (when type of events are used, not by - default) +- New: Add new type of event (when type of events are used, not by default) +- New: Add country into table of thirdparties type. This will allow to provide + a list of thirdparty types specific to a country (like argentina that + need type A or B). +- New: Can force a specific bank account onto an invoice/order... - Fix: [ bug #1487 ] PAYMENT_DELETE trigger does not intercept trigger action - Fix: [ bug #1470, #1472, #1473] User trigger problem - Fix: [ bug #1489, #1491 ] Intervention trigger problem diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index 656158a19cd..788483196e4 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -130,16 +130,16 @@ $tablib[24]= "DictionaryAccountancysystem"; $tablib[25]= "DictionaryRevenueStamp"; $tablib[26]= "DictionaryResourceType"; -// Requete pour extraction des donnees des dictionnaires +// Requests to extract data $tabsql=array(); $tabsql[1] = "SELECT f.rowid as rowid, f.code, f.libelle, p.code as country_code, p.libelle as country, f.active FROM ".MAIN_DB_PREFIX."c_forme_juridique as f, ".MAIN_DB_PREFIX."c_pays as p WHERE f.fk_pays=p.rowid"; $tabsql[2] = "SELECT d.rowid as rowid, d.code_departement as code, d.nom as libelle, d.fk_region as region_id, r.nom as region, p.code as country_code, p.libelle as country, d.active FROM ".MAIN_DB_PREFIX."c_departements as d, ".MAIN_DB_PREFIX."c_regions as r, ".MAIN_DB_PREFIX."c_pays as p WHERE d.fk_region=r.code_region and r.fk_pays=p.rowid and r.active=1 and p.active=1"; -$tabsql[3] = "SELECT r.rowid as rowid, code_region as code, nom as libelle, r.fk_pays as country_id, p.code as country_code, p.libelle as country, r.active FROM ".MAIN_DB_PREFIX."c_regions as r, ".MAIN_DB_PREFIX."c_pays as p WHERE r.fk_pays=p.rowid and p.active=1"; +$tabsql[3] = "SELECT r.rowid as rowid, r.code_region as code, r.nom as libelle, r.fk_pays as country_id, p.code as country_code, p.libelle as country, r.active FROM ".MAIN_DB_PREFIX."c_regions as r, ".MAIN_DB_PREFIX."c_pays as p WHERE r.fk_pays=p.rowid and p.active=1"; $tabsql[4] = "SELECT rowid as rowid, code, libelle, active FROM ".MAIN_DB_PREFIX."c_pays"; $tabsql[5] = "SELECT c.rowid as rowid, c.code as code, c.civilite AS libelle, c.active FROM ".MAIN_DB_PREFIX."c_civilite AS c"; $tabsql[6] = "SELECT a.id as rowid, a.code as code, a.libelle AS libelle, a.type, a.active, a.module, a.position FROM ".MAIN_DB_PREFIX."c_actioncomm AS a"; $tabsql[7] = "SELECT a.id as rowid, a.code as code, a.libelle AS libelle, a.accountancy_code as accountancy_code, a.deductible, p.code as country_code, p.libelle as country, a.fk_pays as country_id, a.active FROM ".MAIN_DB_PREFIX."c_chargesociales AS a, ".MAIN_DB_PREFIX."c_pays as p WHERE a.fk_pays=p.rowid and p.active=1"; -$tabsql[8] = "SELECT id as rowid, code, libelle, active FROM ".MAIN_DB_PREFIX."c_typent"; +$tabsql[8] = "SELECT t.id as rowid, t.code as code, t.libelle, t.fk_country as country_id, p.code as country_code, p.libelle as country, t.active FROM ".MAIN_DB_PREFIX."c_typent as t LEFT JOIN ".MAIN_DB_PREFIX."c_pays as p ON t.fk_country=p.rowid"; $tabsql[9] = "SELECT code_iso as code, label, unicode, active FROM ".MAIN_DB_PREFIX."c_currencies"; $tabsql[10]= "SELECT t.rowid, t.taux, t.localtax1_type, t.localtax1, t.localtax2_type, t.localtax2, p.libelle as country, p.code as country_code, t.fk_pays as country_id, t.recuperableonly, t.note, t.active, t.accountancy_code_sell, t.accountancy_code_buy FROM ".MAIN_DB_PREFIX."c_tva as t, ".MAIN_DB_PREFIX."c_pays as p WHERE t.fk_pays=p.rowid"; $tabsql[11]= "SELECT t.rowid as rowid, element, source, code, libelle, active FROM ".MAIN_DB_PREFIX."c_type_contact AS t"; @@ -159,7 +159,7 @@ $tabsql[24]= "SELECT s.rowid as rowid, pcg_version, s.fk_pays as country_id, p.c $tabsql[25]= "SELECT t.rowid, t.taux, p.libelle as country, p.code as country_code, t.fk_pays as country_id, t.note, t.active, t.accountancy_code_sell, t.accountancy_code_buy FROM ".MAIN_DB_PREFIX."c_revenuestamp as t, ".MAIN_DB_PREFIX."c_pays as p WHERE t.fk_pays=p.rowid"; $tabsql[26]= "SELECT rowid as rowid, code, label, active FROM ".MAIN_DB_PREFIX."c_type_resource"; -// Critere de tri du dictionnaire +// Criteria to sort dictionaries $tabsqlsort=array(); $tabsqlsort[1] ="country ASC, code ASC"; $tabsqlsort[2] ="country ASC, code ASC"; @@ -168,7 +168,7 @@ $tabsqlsort[4] ="code ASC"; $tabsqlsort[5] ="libelle ASC"; $tabsqlsort[6] ="a.type ASC, a.module ASC, a.position ASC, a.code ASC"; $tabsqlsort[7] ="country ASC, code ASC, a.libelle ASC"; -$tabsqlsort[8] ="libelle ASC"; +$tabsqlsort[8] ="country DESC, libelle ASC"; $tabsqlsort[9] ="label ASC"; $tabsqlsort[10]="country ASC, taux ASC, recuperableonly ASC, localtax1 ASC, localtax2 ASC"; $tabsqlsort[11]="element ASC, source ASC, code ASC"; @@ -197,7 +197,7 @@ $tabfield[4] = "code,libelle"; $tabfield[5] = "code,libelle"; $tabfield[6] = "code,libelle,type,position"; $tabfield[7] = "code,libelle,country_id,country,accountancy_code,deductible"; -$tabfield[8] = "code,libelle"; +$tabfield[8] = "code,libelle,country_id,country"; $tabfield[9] = "code,label,unicode"; $tabfield[10]= "country_id,country,taux,recuperableonly,localtax1_type,localtax1,localtax2_type,localtax2,accountancy_code_sell,accountancy_code_buy,note"; $tabfield[11]= "element,source,code,libelle"; @@ -226,7 +226,7 @@ $tabfieldvalue[4] = "code,libelle"; $tabfieldvalue[5] = "code,libelle"; $tabfieldvalue[6] = "code,libelle,type,position"; $tabfieldvalue[7] = "code,libelle,country,accountancy_code,deductible"; -$tabfieldvalue[8] = "code,libelle"; +$tabfieldvalue[8] = "code,libelle,country"; $tabfieldvalue[9] = "code,label,unicode"; $tabfieldvalue[10]= "country,taux,recuperableonly,localtax1_type,localtax1,localtax2_type,localtax2,accountancy_code_sell,accountancy_code_buy,note"; $tabfieldvalue[11]= "element,source,code,libelle"; @@ -255,7 +255,7 @@ $tabfieldinsert[4] = "code,libelle"; $tabfieldinsert[5] = "code,civilite"; $tabfieldinsert[6] = "code,libelle,type,position"; $tabfieldinsert[7] = "code,libelle,fk_pays,accountancy_code,deductible"; -$tabfieldinsert[8] = "code,libelle"; +$tabfieldinsert[8] = "code,libelle,fk_country"; $tabfieldinsert[9] = "code_iso,label,unicode"; $tabfieldinsert[10]= "fk_pays,taux,recuperableonly,localtax1_type,localtax1,localtax2_type,localtax2,accountancy_code_sell,accountancy_code_buy,note"; $tabfieldinsert[11]= "element,source,code,libelle"; @@ -428,7 +428,8 @@ if (GETPOST('actionadd') || GETPOST('actionmodify')) $ok=1; foreach ($listfield as $f => $value) { - if ($value == 'country' && in_array('region_id',$listfield)) continue; // For region page, we do not require the country input + if ($value == 'country' && in_array($tablib[$id],array('DictionaryRegion','DictionaryCompanyType'))) continue; // For some pages, country is not mandatory + if ($value == 'country_id' && in_array($tablib[$id],array('DictionaryRegion','DictionaryCompanyType'))) continue; // For some pages, country is not mandatory if ($value == 'localtax1' && empty($_POST['localtax1_type'])) continue; if ($value == 'localtax2' && empty($_POST['localtax2_type'])) continue; if ((! isset($_POST[$value]) || $_POST[$value]=='') @@ -473,9 +474,17 @@ if (GETPOST('actionadd') || GETPOST('actionmodify')) $msg .= $langs->transnoentities('ErrorFieldFormat', $langs->transnoentities('Code')).'
'; }*/ } - if (isset($_POST["country"]) && $_POST["country"]=='0') { - $ok=0; - setEventMessage($langs->transnoentities("ErrorFieldRequired",$langs->transnoentities("Country")),'errors'); + if (isset($_POST["country"]) && $_POST["country"]=='0') + { + if (in_array($tablib[$id],array('DictionaryCompanyType'))) + { + $_POST["country"]=''; + } + else + { + $ok=0; + setEventMessage($langs->transnoentities("ErrorFieldRequired",$langs->transnoentities("Country")),'errors'); + } } // Clean some parameters diff --git a/htdocs/core/class/ctypent.class.php b/htdocs/core/class/ctypent.class.php index dd039b71015..eea64ed10ac 100644 --- a/htdocs/core/class/ctypent.class.php +++ b/htdocs/core/class/ctypent.class.php @@ -156,7 +156,8 @@ class Ctypent // extends CommonObject $sql = "SELECT"; $sql.= " t.id,"; $sql.= " t.code,"; - $sql.= " t.libelle,"; + $sql.= " t.libelle as label,"; + $sql.= " t.fk_country as country_id,"; $sql.= " t.active,"; $sql.= " t.module"; $sql.= " FROM ".MAIN_DB_PREFIX."c_typent as t"; @@ -173,7 +174,8 @@ class Ctypent // extends CommonObject $this->id = $obj->id; $this->code = $obj->code; - $this->libelle = $obj->libelle; + $this->libelle = $obj->label; + $this->country_id = $obj->country_id; $this->active = $obj->active; $this->module = $obj->module; } diff --git a/htdocs/core/class/html.formcompany.class.php b/htdocs/core/class/html.formcompany.class.php index d71c26af29c..7728080c01b 100644 --- a/htdocs/core/class/html.formcompany.class.php +++ b/htdocs/core/class/html.formcompany.class.php @@ -57,13 +57,13 @@ class FormCompany */ function typent_array($mode=0, $filter='') { - global $langs; + global $langs,$mysoc; $effs = array(); $sql = "SELECT id, code, libelle"; $sql.= " FROM ".MAIN_DB_PREFIX."c_typent"; - $sql.= " WHERE active = 1"; + $sql.= " WHERE active = 1 AND (fk_country IS NULL OR fk_country = ".(empty($mysoc->country_id)?'0':$mysoc->country_id).")"; if ($filter) $sql.=" ".$filter; $sql.= " ORDER by id"; dol_syslog(get_class($this).'::typent_array', LOG_DEBUG); diff --git a/htdocs/install/mysql/data/llx_c_typent.sql b/htdocs/install/mysql/data/llx_c_typent.sql index 154798cdd4f..8349cd13a5a 100644 --- a/htdocs/install/mysql/data/llx_c_typent.sql +++ b/htdocs/install/mysql/data/llx_c_typent.sql @@ -27,17 +27,19 @@ -- -- --- Types entreprises +-- Types of thirdparties -- delete from llx_c_typent; -insert into llx_c_typent (id,code,libelle,active) values ( 0, 'TE_UNKNOWN', '-', 1); -insert into llx_c_typent (id,code,libelle,active) values ( 1, 'TE_STARTUP', 'Start-up', 0); -insert into llx_c_typent (id,code,libelle,active) values ( 2, 'TE_GROUP', 'Grand groupe', 1); -insert into llx_c_typent (id,code,libelle,active) values ( 3, 'TE_MEDIUM', 'PME/PMI', 1); -insert into llx_c_typent (id,code,libelle,active) values ( 4, 'TE_SMALL', 'TPE', 1); -insert into llx_c_typent (id,code,libelle,active) values ( 5, 'TE_ADMIN', 'Administration',1); -insert into llx_c_typent (id,code,libelle,active) values ( 6, 'TE_WHOLE', 'Grossiste', 0); -insert into llx_c_typent (id,code,libelle,active) values ( 7, 'TE_RETAIL', 'Revendeur', 0); -insert into llx_c_typent (id,code,libelle,active) values ( 8, 'TE_PRIVATE', 'Particulier', 1); -insert into llx_c_typent (id,code,libelle,active) values (100, 'TE_OTHER', 'Autres', 1); +insert into llx_c_typent (id,code,libelle,fk_country,active) values ( 0, 'TE_UNKNOWN', '-', NULL, 1); +insert into llx_c_typent (id,code,libelle,fk_country,active) values ( 1, 'TE_STARTUP', 'Start-up', NULL, 0); +insert into llx_c_typent (id,code,libelle,fk_country,active) values ( 2, 'TE_GROUP', 'Grand groupe', NULL, 1); +insert into llx_c_typent (id,code,libelle,fk_country,active) values ( 3, 'TE_MEDIUM', 'PME/PMI', NULL, 1); +insert into llx_c_typent (id,code,libelle,fk_country,active) values ( 4, 'TE_SMALL', 'TPE', NULL, 1); +insert into llx_c_typent (id,code,libelle,fk_country,active) values ( 5, 'TE_ADMIN', 'Administration',NULL, 1); +insert into llx_c_typent (id,code,libelle,fk_country,active) values ( 6, 'TE_WHOLE', 'Grossiste', NULL, 0); +insert into llx_c_typent (id,code,libelle,fk_country,active) values ( 7, 'TE_RETAIL', 'Revendeur', NULL, 0); +insert into llx_c_typent (id,code,libelle,fk_country,active) values ( 8, 'TE_PRIVATE', 'Particulier', NULL, 1); +insert into llx_c_typent (id,code,libelle,fk_country,active) values (100, 'TE_OTHER', 'Autres', NULL, 1); +insert into llx_c_typent (id,code,libelle,fk_country,active) values (231, 'TE_A1', 'Type A', 23, 1); +insert into llx_c_typent (id,code,libelle,fk_country,active) values (232, 'TE_B2', 'Type B', 23, 1); diff --git a/htdocs/install/mysql/migration/3.6.0-3.7.0.sql b/htdocs/install/mysql/migration/3.6.0-3.7.0.sql index 19b820d964c..f6de3ef3b03 100644 --- a/htdocs/install/mysql/migration/3.6.0-3.7.0.sql +++ b/htdocs/install/mysql/migration/3.6.0-3.7.0.sql @@ -21,10 +21,15 @@ ALTER TABLE llx_c_paiement ADD COLUMN accountancy_code varchar(32) DEFAULT NULL AFTER active; -insert into llx_c_action_trigger (rowid,code,label,description,elementtype,rang) values (29,'FICHINTER_CLASSIFY_BILLED','Classify intervention as billed','Executed when a intervention is classified as billed (when option FICHINTER_DISABLE_DETAILS is set)','ficheinter',19); +-- Defined only to have specific list for countries that can't use generic list (like argentina that need type A or B) +ALTER TABLE llx_c_typent ADD COLUMN fk_country integer NULL AFTER libelle; + +INSERT INTO llx_c_action_trigger (rowid,code,label,description,elementtype,rang) values (29,'FICHINTER_CLASSIFY_BILLED','Classify intervention as billed','Executed when a intervention is classified as billed (when option FICHINTER_DISABLE_DETAILS is set)','ficheinter',19); -insert into llx_c_actioncomm (id, code, type, libelle, module, active, position) values (11,'AC_INT','system','Intervention on site',NULL, 1, 4); +INSERT INTO llx_c_actioncomm (id, code, type, libelle, module, active, position) values (11,'AC_INT','system','Intervention on site',NULL, 1, 4); + + ALTER TABLE llx_accountingaccount add column entity integer DEFAULT 1 NOT NULL AFTER rowid; ALTER TABLE llx_accountingaccount add column datec datetime NOT NULL AFTER entity; ALTER TABLE llx_accountingaccount add column tms timestamp AFTER datec; diff --git a/htdocs/install/mysql/tables/llx_c_typent.sql b/htdocs/install/mysql/tables/llx_c_typent.sql index 62d39cea8ad..06a41727b69 100644 --- a/htdocs/install/mysql/tables/llx_c_typent.sql +++ b/htdocs/install/mysql/tables/llx_c_typent.sql @@ -19,9 +19,10 @@ create table llx_c_typent ( - id integer PRIMARY KEY, - code varchar(12) NOT NULL, - libelle varchar(30), - active tinyint DEFAULT 1 NOT NULL, - module varchar(32) NULL + id integer PRIMARY KEY, + code varchar(12) NOT NULL, + libelle varchar(30), + fk_country integer NULL, -- Defined only to have specific list for countries that can't use generic list (like argentina that need type A or B) + active tinyint DEFAULT 1 NOT NULL, + module varchar(32) NULL )ENGINE=innodb;
'.$langs->trans("Search").'
"; -print $langs->trans("Name").':
"; - print $langs->trans("BarCode").':
"; -print $langs->trans("Other").':