From d7060b0c4b8c53a578da5933d336eeee9b534579 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 2 Feb 2017 03:14:21 +0100 Subject: [PATCH 01/22] FIX #6360 --- htdocs/societe/class/societe.class.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 12d7fcd77ef..7df273b7bf8 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -3428,7 +3428,9 @@ class Societe extends CommonObject */ public function setCategories($categories, $type) { - // Decode type + require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php'; + + // Decode type if ($type == 'customer') { $type_id = Categorie::TYPE_CUSTOMER; $type_text = 'customer'; @@ -3446,7 +3448,6 @@ class Societe extends CommonObject } // Get current categories - require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php'; $c = new Categorie($this->db); $existing = $c->containing($this->id, $type_id, 'id'); From d740bdbc7385b595b33b388da71a6a6760fe37ae Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 3 Feb 2017 11:38:09 +0100 Subject: [PATCH 02/22] Fix #6365 --- htdocs/api/class/api.class.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/api/class/api.class.php b/htdocs/api/class/api.class.php index 5ffae225df1..37843be90b9 100644 --- a/htdocs/api/class/api.class.php +++ b/htdocs/api/class/api.class.php @@ -170,7 +170,10 @@ class DolibarrApi * @throws RestException */ static function _checkAccessToResource($resource, $resource_id=0, $dbtablename='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid') { - + + // For backward compatibility + if ($resource == 'member') $resource='adherent'; + // Features/modules to check $featuresarray = array($resource); if (preg_match('/&/', $resource)) { From 76280f8ae2044f3c0d2d4b5c80e2193d4dcddb87 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 3 Feb 2017 11:42:49 +0100 Subject: [PATCH 03/22] Fix #6365 --- htdocs/api/class/api.class.php | 5 +---- htdocs/core/lib/security.lib.php | 5 ++++- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/api/class/api.class.php b/htdocs/api/class/api.class.php index 37843be90b9..1204fded0aa 100644 --- a/htdocs/api/class/api.class.php +++ b/htdocs/api/class/api.class.php @@ -171,9 +171,6 @@ class DolibarrApi */ static function _checkAccessToResource($resource, $resource_id=0, $dbtablename='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid') { - // For backward compatibility - if ($resource == 'member') $resource='adherent'; - // Features/modules to check $featuresarray = array($resource); if (preg_match('/&/', $resource)) { @@ -188,7 +185,7 @@ class DolibarrApi $feature2 = explode("|", $feature2); } - return checkUserAccessToObject(DolibarrApiAccess::$user, $featuresarray,$resource_id,$dbtablename,$feature2,$dbt_keyfield,$dbt_select); + return checkUserAccessToObject(DolibarrApiAccess::$user, $featuresarray, $resource_id, $dbtablename, $feature2, $dbt_keyfield, $dbt_select); } /** diff --git a/htdocs/core/lib/security.lib.php b/htdocs/core/lib/security.lib.php index ced20a79ea6..31ea31aca14 100644 --- a/htdocs/core/lib/security.lib.php +++ b/htdocs/core/lib/security.lib.php @@ -343,7 +343,7 @@ function restrictedArea($user, $features, $objectid=0, $tableandshare='', $featu * This function is also called by restrictedArea * * @param User $user User to check - * @param array $featuresarray Features/modules to check + * @param array $featuresarray Features/modules to check. Example: ('user','service') * @param int $objectid Object ID if we want to check a particular record (optional) is linked to a owned thirdparty (optional). * @param string $tableandshare 'TableName&SharedElement' with Tablename is table where object is stored. SharedElement is an optional key to define where to check entity. Not used if objectid is null (optional) * @param string $feature2 Feature to check, second level of permission (optional). Can be or check with 'level1|level2'. @@ -365,6 +365,9 @@ function checkUserAccessToObject($user, $featuresarray, $objectid=0, $tableandsh { $sql=''; + // For backward compatibility + if ($feature == 'member') $feature='adherent'; + $check = array('adherent','banque','user','usergroup','produit','service','produit|service','categorie'); // Test on entity only (Objects with no link to company) $checksoc = array('societe'); // Test for societe object $checkother = array('contact'); // Test on entity and link to societe. Allowed if link is empty (Ex: contacts...). From 5381eadc75f93403fe2aba0a2592532a3ae3ae27 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 3 Feb 2017 15:33:44 +0100 Subject: [PATCH 04/22] Fix translation --- htdocs/langs/en_US/other.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/other.lang b/htdocs/langs/en_US/other.lang index 1ea1f9da1db..7f33114abd7 100644 --- a/htdocs/langs/en_US/other.lang +++ b/htdocs/langs/en_US/other.lang @@ -67,7 +67,7 @@ PredefinedMailContentSendSupplierInvoice=__CONTACTCIVNAME__\n\nYou will find her PredefinedMailContentSendShipping=__CONTACTCIVNAME__\n\nYou will find here the shipping __SHIPPINGREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__ PredefinedMailContentSendFichInter=__CONTACTCIVNAME__\n\nYou will find here the intervention __FICHINTERREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__ PredefinedMailContentThirdparty=__CONTACTCIVNAME__\n\n__PERSONALIZED__\n\n__SIGNATURE__ -DemoDesc=Dolibarr is a compact ERP/CRM supporting several functional modules. A demo showcasing all modules makes no sense as this scenario never occurs. So, several demo profiles are available. +DemoDesc=Dolibarr is a compact ERP/CRM supporting several business modules. A demo showcasing all modules makes no sense as this scenario never occurs (several hundred available). So, several demo profiles are available. ChooseYourDemoProfil=Choose the demo profile that best suits your needs... DemoFundation=Manage members of a foundation DemoFundation2=Manage members and bank account of a foundation From 480d099d81764beb334d0c14fe2e998d7d5240d2 Mon Sep 17 00:00:00 2001 From: arnaud Date: Fri, 3 Feb 2017 16:19:13 +0100 Subject: [PATCH 05/22] Fix project filter traduction --- htdocs/fourn/facture/list.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php index 27c14f2a8d4..66411dc8422 100644 --- a/htdocs/fourn/facture/list.php +++ b/htdocs/fourn/facture/list.php @@ -46,6 +46,7 @@ if (!$user->rights->fournisseur->facture->lire) accessforbidden(); $langs->load("bills"); $langs->load("companies"); $langs->load('products'); +$langs->load('projects'); $socid = GETPOST('socid','int'); From 517a20db355d738554cf2fd0e28f11748f2be8c4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 3 Feb 2017 16:59:35 +0100 Subject: [PATCH 06/22] Update screenshot --- doc/images/dolibarr_screenshot5_1280x800.png | Bin 58761 -> 43930 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/images/dolibarr_screenshot5_1280x800.png b/doc/images/dolibarr_screenshot5_1280x800.png index 96700f89bd517b3d56634853e9af463d2f797756..92f6dfa521d19ea04c289488345d87704982c95f 100644 GIT binary patch literal 43930 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 lQ|zU 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 literal 58761 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 From fea2b081f9b2e91a6366c1d98d41f9dd125122f7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 4 Feb 2017 14:17:55 +0100 Subject: [PATCH 07/22] Fix: The long description feature will be available with 6.0. Large content creates problem with tooltip. --- htdocs/admin/modules.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index ad33b4ce619..341cdd00ebc 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -497,9 +497,10 @@ if ($mode != 'marketplace') print ''; $text=''; - if ($objMod->getDescLong()) $text.='
'.$objMod->getDesc().'

'.$objMod->getDescLong().'
'; - else $text.='
'.$objMod->getDesc().'

'; - + //if ($objMod->getDescLong()) $text.='
'.$objMod->getDesc().'

'.$objMod->getDescLong().'
'; + //else $text.='
'.$objMod->getDesc().'

'; + $text.='
'.$objMod->getDesc().'

'; + $textexternal=''; $imginfo="info"; if ($objMod->isCoreOrExternalModule() == 'external') From 6cb3199824cb5858259053bf13be2d76679a4751 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 6 Feb 2017 12:03:20 +0100 Subject: [PATCH 08/22] Translation message --- htdocs/compta/prelevement/index.php | 4 +--- htdocs/langs/en_US/admin.lang | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/htdocs/compta/prelevement/index.php b/htdocs/compta/prelevement/index.php index e00de804f93..9e766e937e2 100644 --- a/htdocs/compta/prelevement/index.php +++ b/htdocs/compta/prelevement/index.php @@ -59,9 +59,7 @@ llxHeader('',$langs->trans("CustomersStandingOrdersArea")); if (prelevement_check_config() < 0) { $langs->load("errors"); - print '
'; - print $langs->trans("ErrorModuleSetupNotComplete"); - print '
'; + setEventMessages($langs->trans("ErrorModuleSetupNotComplete"), null, 'errors'); } print load_fiche_titre($langs->trans("CustomersStandingOrdersArea")); diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index e8c60db1fc9..5a541f7bad7 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -19,7 +19,7 @@ RemoteSignature=Remote distant signature (more reliable) FilesMissing=Missing Files FilesUpdated=Updated Files FileCheckDolibarr=Check integrity of application files -AvailableOnlyOnPackagedVersions=The local file for integrity checking is only available when application is installed from a certified package +AvailableOnlyOnPackagedVersions=The local file for integrity checking is only available when application is installed from an official package XmlNotFound=Xml Integrity File of application not found SessionId=Session ID SessionSaveHandler=Handler to save sessions From bbf34bfda8c3007b9e66dfe77a1e0811f34af80d Mon Sep 17 00:00:00 2001 From: De Coninck Laurent Date: Mon, 6 Feb 2017 18:57:56 +0100 Subject: [PATCH 09/22] [expense type deactivate] [#6363] Expense type deactivated but list When an expense type is disabled in dictionaries, it's always displayed and selectable in expense note module, when we create a new line in an expense note. --- htdocs/expensereport/class/expensereport.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 9a2cd6728e8..487515dcb99 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2052,6 +2052,7 @@ function select_type_fees_id($selected='',$htmlname='type',$showempty=0) } $sql = "SELECT c.id, c.code, c.label as type FROM ".MAIN_DB_PREFIX."c_type_fees as c"; + $sql.= " WHERE c.active = 1"; $sql.= " ORDER BY c.label ASC"; $resql=$db->query($sql); if ($resql) From 821978d54c007df01b6d8aa0ac64911a2806c268 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 6 Feb 2017 20:08:47 +0100 Subject: [PATCH 10/22] FIX #6363 More complete fix --- htdocs/expensereport/class/expensereport.class.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 487515dcb99..4a6c9df691e 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2036,9 +2036,10 @@ function select_expensereport_statut($selected='',$htmlname='fk_statut',$useempt * @param int $selected Preselected type * @param string $htmlname Name of field in form * @param int $showempty Add an empty field + * @param int $active 1=Active only, 0=Unactive only, -1=All * @return string Select html */ -function select_type_fees_id($selected='',$htmlname='type',$showempty=0) +function select_type_fees_id($selected='',$htmlname='type',$showempty=0, $active=1) { global $db,$langs,$user; $langs->load("trips"); @@ -2052,7 +2053,7 @@ function select_type_fees_id($selected='',$htmlname='type',$showempty=0) } $sql = "SELECT c.id, c.code, c.label as type FROM ".MAIN_DB_PREFIX."c_type_fees as c"; - $sql.= " WHERE c.active = 1"; + if ($active >= 0) $sql.= " WHERE c.active = ".$active; $sql.= " ORDER BY c.label ASC"; $resql=$db->query($sql); if ($resql) From 6b528b2bea50af4b779ed91ae1faea7de0a76f32 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 6 Feb 2017 21:34:05 +0100 Subject: [PATCH 11/22] Fix translation: Open -> opened (open is for "mind/spirit", opened is the adjective for a status) --- htdocs/langs/en_US/banks.lang | 4 ++-- htdocs/langs/en_US/companies.lang | 2 +- htdocs/langs/en_US/main.lang | 2 +- htdocs/langs/en_US/projects.lang | 12 ++++++------ htdocs/langs/en_US/propal.lang | 6 +++--- htdocs/langs/en_US/supplier_proposal.lang | 4 ++-- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/htdocs/langs/en_US/banks.lang b/htdocs/langs/en_US/banks.lang index 07a720e6537..a6071e38fa5 100644 --- a/htdocs/langs/en_US/banks.lang +++ b/htdocs/langs/en_US/banks.lang @@ -74,13 +74,13 @@ Conciliate=Reconcile Conciliation=Reconciliation ReconciliationLate=Reconciliation late IncludeClosedAccount=Include closed accounts -OnlyOpenedAccount=Only open accounts +OnlyOpenedAccount=Only opened accounts AccountToCredit=Account to credit AccountToDebit=Account to debit DisableConciliation=Disable reconciliation feature for this account ConciliationDisabled=Reconciliation feature disabled LinkedToAConciliatedTransaction=Linked to a conciliated entry -StatusAccountOpened=Open +StatusAccountOpened=Opened StatusAccountClosed=Closed AccountIdShort=Number LineRecord=Transaction diff --git a/htdocs/langs/en_US/companies.lang b/htdocs/langs/en_US/companies.lang index 49c409d81e8..6cabf5d7d62 100644 --- a/htdocs/langs/en_US/companies.lang +++ b/htdocs/langs/en_US/companies.lang @@ -386,7 +386,7 @@ ListCustomersShort=List of customers ThirdPartiesArea=Third parties and contact area LastModifiedThirdParties=Latest %s modified third parties UniqueThirdParties=Total of unique third parties -InActivity=Open +InActivity=Opened ActivityCeased=Closed ThirdPartyIsClosed=Third party is closed ProductsIntoElements=List of products/services into %s diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 1dbc60b4992..4447c54610f 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -433,7 +433,7 @@ Reportings=Reporting Draft=Draft Drafts=Drafts Validated=Validated -Opened=Open +Opened=Opened New=New Discount=Discount Unknown=Unknown diff --git a/htdocs/langs/en_US/projects.lang b/htdocs/langs/en_US/projects.lang index 8e40307cac6..f9c603ce113 100644 --- a/htdocs/langs/en_US/projects.lang +++ b/htdocs/langs/en_US/projects.lang @@ -29,9 +29,9 @@ DeleteAProject=Delete a project DeleteATask=Delete a task ConfirmDeleteAProject=Are you sure you want to delete this project? ConfirmDeleteATask=Are you sure you want to delete this task? -OpenedProjects=Open projects -OpenedTasks=Open tasks -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status +OpenedProjects=Opened projects +OpenedTasks=Opened tasks +OpportunitiesStatusForOpenedProjects=Opportunities amount of opened projects by status OpportunitiesStatusForProjects=Opportunities amount of projects by status ShowProject=Show project SetProject=Set project @@ -47,7 +47,7 @@ TaskTimeSpent=Time spent on tasks TaskTimeUser=User TaskTimeNote=Note TaskTimeDate=Date -TasksOnOpenedProject=Tasks on open projects +TasksOnOpenedProject=Tasks on opened projects WorkloadNotDefined=Workload not defined NewTimeSpent=New time spent MyTimeSpent=My time spent @@ -179,9 +179,9 @@ ProjectsStatistics=Statistics on projects/leads TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible. IdTaskTime=Id task time YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes. -OpenedProjectsByThirdparties=Open projects by thirdparties +OpenedProjectsByThirdparties=Opened projects by thirdparties OnlyOpportunitiesShort=Only opportunities -OpenedOpportunitiesShort=Open opportunities +OpenedOpportunitiesShort=Opened opportunities NotAnOpportunityShort=Not an opportunity OpportunityTotalAmount=Opportunities total amount OpportunityPonderatedAmount=Opportunities weighted amount diff --git a/htdocs/langs/en_US/propal.lang b/htdocs/langs/en_US/propal.lang index f383af9f1af..cd76dd46f43 100644 --- a/htdocs/langs/en_US/propal.lang +++ b/htdocs/langs/en_US/propal.lang @@ -3,7 +3,7 @@ Proposals=Commercial proposals Proposal=Commercial proposal ProposalShort=Proposal ProposalsDraft=Draft commercial proposals -ProposalsOpened=Open commercial proposals +ProposalsOpened=Opened commercial proposals Prop=Commercial proposals CommercialProposal=Commercial proposal ProposalCard=Proposal card @@ -26,9 +26,9 @@ AmountOfProposalsByMonthHT=Amount by month (net of tax) NbOfProposals=Number of commercial proposals ShowPropal=Show proposal PropalsDraft=Drafts -PropalsOpened=Open +PropalsOpened=Opened PropalStatusDraft=Draft (needs to be validated) -PropalStatusValidated=Validated (proposal is open) +PropalStatusValidated=Validated (proposal is opened) PropalStatusSigned=Signed (needs billing) PropalStatusNotSigned=Not signed (closed) PropalStatusBilled=Billed diff --git a/htdocs/langs/en_US/supplier_proposal.lang b/htdocs/langs/en_US/supplier_proposal.lang index 621d7784e35..61b031459b0 100644 --- a/htdocs/langs/en_US/supplier_proposal.lang +++ b/htdocs/langs/en_US/supplier_proposal.lang @@ -8,7 +8,7 @@ SearchRequest=Find a request DraftRequests=Draft requests SupplierProposalsDraft=Draft supplier proposals LastModifiedRequests=Latest %s modified price requests -RequestsOpened=Open price requests +RequestsOpened=Opened price requests SupplierProposalArea=Supplier proposals area SupplierProposalShort=Supplier proposal SupplierProposals=Supplier proposals @@ -23,7 +23,7 @@ ConfirmValidateAsk=Are you sure you want to validate this price request under na DeleteAsk=Delete request ValidateAsk=Validate request SupplierProposalStatusDraft=Draft (needs to be validated) -SupplierProposalStatusValidated=Validated (request is open) +SupplierProposalStatusValidated=Validated (request is opened) SupplierProposalStatusClosed=Closed SupplierProposalStatusSigned=Accepted SupplierProposalStatusNotSigned=Refused From afa68a141827d1742551d9a3f157b917182ed241 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 7 Feb 2017 00:45:14 +0100 Subject: [PATCH 12/22] Fix label for late --- htdocs/adherents/list.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/adherents/list.php b/htdocs/adherents/list.php index 28968a849fc..b8776a8e98e 100644 --- a/htdocs/adherents/list.php +++ b/htdocs/adherents/list.php @@ -749,7 +749,8 @@ while ($i < min($num, $limit)) print ''; print dol_print_date($datefin,'day'); if ($memberstatic->hasDelay()) { - print " ".img_warning($langs->trans("SubscriptionLate")); + $textlate .= ' ('.$langs->trans("DateReference").' > '.$langs->trans("DateToday").' '.(ceil($conf->adherent->subscription->warning_delay/60/60/24) >= 0 ? '+' : '').ceil($conf->adherent->subscription->warning_delay/60/60/24).' '.$langs->trans("days").')'; + print " ".img_warning($langs->trans("SubscriptionLate").$textlate); } print ''; } From 2d77cb2da5ee371ae8ca00d992b1a4b9dc42fffa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 7 Feb 2017 00:54:54 +0100 Subject: [PATCH 13/22] FIX #6379 --- htdocs/core/modules/modExpedition.class.php | 2 +- htdocs/install/mysql/migration/4.0.0-5.0.0.sql | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/modules/modExpedition.class.php b/htdocs/core/modules/modExpedition.class.php index eec7cd174cd..63f7b536c1b 100644 --- a/htdocs/core/modules/modExpedition.class.php +++ b/htdocs/core/modules/modExpedition.class.php @@ -94,7 +94,7 @@ class modExpedition extends DolibarrModules $this->const[$r][0] = "EXPEDITION_ADDON_NUMBER"; $this->const[$r][1] = "chaine"; $this->const[$r][2] = "mod_expedition_safor"; - $this->const[$r][3] = 'Nom du gestionnaire de numerotation des expeditions'; + $this->const[$r][3] = 'Name for numbering manager for shipments'; $this->const[$r][4] = 0; $r++; diff --git a/htdocs/install/mysql/migration/4.0.0-5.0.0.sql b/htdocs/install/mysql/migration/4.0.0-5.0.0.sql index 974184b5f58..beb4bc8a880 100644 --- a/htdocs/install/mysql/migration/4.0.0-5.0.0.sql +++ b/htdocs/install/mysql/migration/4.0.0-5.0.0.sql @@ -184,6 +184,7 @@ ALTER TABLE llx_resource_extrafields ADD INDEX idx_resource_extrafields (fk_obje INSERT INTO llx_const (name, value, type, note, visible) values (__ENCRYPT('MAIN_SIZE_SHORTLIST_LIMIT')__,__ENCRYPT('3')__,'chaine','Max length for small lists (tabs)',0); +INSERT INTO llx_const (name, value, type, note, visible, entity) values (__ENCRYPT(''EXPEDITION_ADDON_NUMBER')__, __ENCRYPT('mod_expedition_safor')__,'chaine','Name for numbering manager for shipments',0,1); ALTER TABLE llx_bank_account ADD COLUMN note_public text; ALTER TABLE llx_bank_account ADD COLUMN model_pdf varchar(255); From b0ee04c0791f3fb36dbec44f84e52c73130569a3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 7 Feb 2017 01:13:50 +0100 Subject: [PATCH 14/22] FIX #6379 --- htdocs/install/mysql/migration/4.0.0-5.0.0.sql | 2 +- htdocs/langs/en_US/admin.lang | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/install/mysql/migration/4.0.0-5.0.0.sql b/htdocs/install/mysql/migration/4.0.0-5.0.0.sql index beb4bc8a880..48569c36fb8 100644 --- a/htdocs/install/mysql/migration/4.0.0-5.0.0.sql +++ b/htdocs/install/mysql/migration/4.0.0-5.0.0.sql @@ -184,7 +184,7 @@ ALTER TABLE llx_resource_extrafields ADD INDEX idx_resource_extrafields (fk_obje INSERT INTO llx_const (name, value, type, note, visible) values (__ENCRYPT('MAIN_SIZE_SHORTLIST_LIMIT')__,__ENCRYPT('3')__,'chaine','Max length for small lists (tabs)',0); -INSERT INTO llx_const (name, value, type, note, visible, entity) values (__ENCRYPT(''EXPEDITION_ADDON_NUMBER')__, __ENCRYPT('mod_expedition_safor')__,'chaine','Name for numbering manager for shipments',0,1); +INSERT INTO llx_const (name, value, type, note, visible, entity) values (__ENCRYPT('EXPEDITION_ADDON_NUMBER')__, __ENCRYPT('mod_expedition_safor')__, 'chaine','Name for numbering manager for shipments',0,1); ALTER TABLE llx_bank_account ADD COLUMN note_public text; ALTER TABLE llx_bank_account ADD COLUMN model_pdf varchar(255); diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 5a541f7bad7..9302852eeb1 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1395,7 +1395,7 @@ SendingsSetup=Sending module setup SendingsReceiptModel=Sending receipt model SendingsNumberingModules=Sendings numbering modules SendingsAbility=Support shipping sheets for customer deliveries -NoNeedForDeliveryReceipts=In most cases, sendings receipts are used both as sheets for customer deliveries (list of products to send) and sheets that is recevied and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated. +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated. FreeLegalTextOnShippings=Free text on shipments ##### Deliveries ##### DeliveryOrderNumberingModules=Products deliveries receipt numbering module From d56b5f30c88818d1f844279aeb046f0b897ff7c9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 7 Feb 2017 01:34:21 +0100 Subject: [PATCH 15/22] FIX #6330 --- htdocs/admin/external_rss.php | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/htdocs/admin/external_rss.php b/htdocs/admin/external_rss.php index f18a3fe86b6..8e550f98c99 100644 --- a/htdocs/admin/external_rss.php +++ b/htdocs/admin/external_rss.php @@ -46,14 +46,17 @@ $action=GETPOST('action'); */ // positionne la variable pour le nombre de rss externes -$sql ="SELECT MAX(".$db->decrypt('name').") as name FROM ".MAIN_DB_PREFIX."const"; +$sql ="SELECT ".$db->decrypt('name')." as name FROM ".MAIN_DB_PREFIX."const"; $sql.=" WHERE ".$db->decrypt('name')." LIKE 'EXTERNAL_RSS_URLRSS_%'"; -$result=$db->query($sql); +//print $sql; +$result=$db->query($sql); // We can't use SELECT MAX() because EXTERNAL_RSS_URLRSS_10 is lower than EXTERNAL_RSS_URLRSS_9 if ($result) { - $obj = $db->fetch_object($result); - preg_match('/([0-9]+)$/i',$obj->name,$reg); - if ($reg[1]) $lastexternalrss = $reg[1]; + while ($obj = $db->fetch_object($result)) + { + preg_match('/([0-9]+)$/i',$obj->name,$reg); + if ($reg[1] && $reg[1] > $lastexternalrss) $lastexternalrss = $reg[1]; + } } else { From ea7a2b1e2af1184ed0c6f303bf6f7084d5e7e927 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 7 Feb 2017 06:47:12 +0100 Subject: [PATCH 16/22] Fix : Bank account ref not show in accountancy journal. Complete informations for tooltip --- htdocs/accountancy/admin/journal.php | 65 +++++++++++++++------------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/htdocs/accountancy/admin/journal.php b/htdocs/accountancy/admin/journal.php index 0487538a906..2a868969c3d 100644 --- a/htdocs/accountancy/admin/journal.php +++ b/htdocs/accountancy/admin/journal.php @@ -1,26 +1,26 @@ - * Copyright (C) 2013-2015 Alexandre Spangaro -* Copyright (C) 2014 Florian Henry -* Copyright (C) 2014 Marcos García -* Copyright (C) 2014 Juanjo Menent -* Copyright (C) 2015 Jean-François Ferry -* Copyright (C) 2016 Laurent Destailleur -* -* 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 . -* -*/ + * Copyright (C) 2013-2017 Alexandre Spangaro + * Copyright (C) 2014 Florian Henry + * Copyright (C) 2014 Marcos García + * Copyright (C) 2014 Juanjo Menent + * Copyright (C) 2015 Jean-François Ferry + * Copyright (C) 2016 Laurent Destailleur + * + * 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/accountancy/admin/journal.php @@ -121,7 +121,7 @@ dol_fiche_head($head, 'journal', $langs->trans("Configuration"), 0, 'cron'); print ''; print ''; -print ''; +print ''; print "\n"; foreach ( $list as $key ) { @@ -145,11 +145,11 @@ print '
'; print '
' . $langs->trans('Journaux') . '' . $langs->trans('Journaux') . '
'; print ''; -print ''; +print ''; print "\n"; // Bank account -$sql = "SELECT rowid, label, number, accountancy_journal"; +$sql = "SELECT rowid, ref, label, number, account_number, accountancy_journal"; $sql .= " FROM " . MAIN_DB_PREFIX . "bank_account"; $sql .= " WHERE entity = " . $conf->entity; $sql .= " AND clos = 0"; @@ -162,30 +162,33 @@ if ($resql) { if ($numr > 0) - $bankaccountstatic=new Account($db); + $bankaccountstatic = new Account($db); while ( $i < $numr ) { $objp = $db->fetch_object($resql); - + $var = ! $var; - + + $bankaccountstatic->rowid = $objp->rowid; $bankaccountstatic->id = $objp->rowid; + $bankaccountstatic->ref = $objp->ref; $bankaccountstatic->label = $objp->label; $bankaccountstatic->number = $objp->number; + $bankaccountstatic->account_number = $objp->account_number; $bankaccountstatic->accountancy_journal = $objp->accountancy_journal; - + print ''; - + // Param print ''; - + // Value print ''; - + $i ++; } $db->free($resql); From c6e0a4cc87486091ab4521643af09d698870f3ec Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 7 Feb 2017 12:39:45 +0100 Subject: [PATCH 17/22] Fix column label --- htdocs/product/stock/replenish.php | 25 ++++--------------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/htdocs/product/stock/replenish.php b/htdocs/product/stock/replenish.php index c050acc7663..437361b5cf5 100644 --- a/htdocs/product/stock/replenish.php +++ b/htdocs/product/stock/replenish.php @@ -289,12 +289,7 @@ if(!empty($conf->global->STOCK_ALLOW_ADD_LIMIT_STOCK_BY_WAREHOUSE) && $fk_entrep $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_warehouse_properties AS pse ON (p.rowid = pse.fk_product AND pse.fk_entrepot = '.$fk_entrepot.')'; } $sql.= ' WHERE p.entity IN (' . getEntity("product", 1) . ')'; -if ($sall) { - $sql .= ' AND (p.ref LIKE "%'.$db->escape($sall).'%" '; - $sql .= 'OR p.label LIKE "%'.$db->escape($sall).'%" '; - $sql .= 'OR p.description LIKE "%'.$db->escape($sall).'%" '; - $sql .= 'OR p.note LIKE "%'.$db->escape($sall).'%")'; -} +if ($sall) $sql .= natural_search(array('p.ref', 'p.label', 'p.description', 'p.note'), $sall); // if the type is not 1, we show all products (type = 0,2,3) if (dol_strlen($type)) { if ($type == 1) { @@ -303,20 +298,8 @@ if (dol_strlen($type)) { $sql .= ' AND p.fk_product_type <> 1'; } } -if ($sref) { - //natural search - $scrit = explode(' ', $sref); - foreach ($scrit as $crit) { - $sql .= ' AND p.ref LIKE "%' . $crit . '%"'; - } -} -if ($snom) { - //natural search - $scrit = explode(' ', $snom); - foreach ($scrit as $crit) { - $sql .= ' AND p.label LIKE "%' . $db->escape($crit) . '%"'; - } -} +if ($sref) $sql.=natural_search('p.ref', $sref); +if ($snom) $sql.=natural_search('p.label', $snom); $sql.= ' AND p.tobuy = 1'; if (!empty($canvas)) $sql .= ' AND p.canvas = "' . $db->escape($canvas) . '"'; $sql.= ' GROUP BY p.rowid, p.ref, p.label, p.description, p.price'; @@ -522,7 +505,7 @@ print_liste_field_titre($langs->trans('StockLimitShort'), $_SERVER["PHP_SELF"], print_liste_field_titre($stocklabel, $_SERVER["PHP_SELF"], 'stock_physique', $param, '', 'align="right"', $sortfield, $sortorder); print_liste_field_titre($langs->trans('Ordered'), $_SERVER["PHP_SELF"], '', $param, '', 'align="right"', $sortfield, $sortorder); print_liste_field_titre($langs->trans('StockToBuy'), $_SERVER["PHP_SELF"], '', $param, '', 'align="right"', $sortfield, $sortorder); -print_liste_field_titre($langs->trans('Supplier'), $_SERVER["PHP_SELF"], '', $param, '', 'align="right"', $sortfield, $sortorder); +print_liste_field_titre($langs->trans('SupplierRef'), $_SERVER["PHP_SELF"], '', $param, '', 'align="right"', $sortfield, $sortorder); print "\n"; // Lignes des champs de filtre From fbff32823a83c86de7f505ccd791f23b6434321e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 7 Feb 2017 12:43:12 +0100 Subject: [PATCH 18/22] Fix translation --- htdocs/langs/en_US/bills.lang | 14 +++++++------- htdocs/langs/en_US/boxes.lang | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/htdocs/langs/en_US/bills.lang b/htdocs/langs/en_US/bills.lang index bd1f7bd2fc9..5d8e86199dd 100644 --- a/htdocs/langs/en_US/bills.lang +++ b/htdocs/langs/en_US/bills.lang @@ -1,13 +1,13 @@ # Dolibarr language file - Source file is en_US - bills Bill=Invoice Bills=Invoices -BillsCustomers=Customers invoices -BillsCustomer=Customers invoice -BillsSuppliers=Suppliers invoices -BillsCustomersUnpaid=Unpaid customers invoices -BillsCustomersUnpaidForCompany=Unpaid customer's invoices for %s -BillsSuppliersUnpaid=Unpaid supplier's invoices -BillsSuppliersUnpaidForCompany=Unpaid supplier's invoices for %s +BillsCustomers=Customer invoices +BillsCustomer=Customer invoice +BillsSuppliers=Supplier invoices +BillsCustomersUnpaid=Unpaid customer invoices +BillsCustomersUnpaidForCompany=Unpaid customer invoices for %s +BillsSuppliersUnpaid=Unpaid supplier invoices +BillsSuppliersUnpaidForCompany=Unpaid supplier invoices for %s BillsLate=Late payments BillsStatistics=Customers invoices statistics BillsStatisticsSuppliers=Suppliers invoices statistics diff --git a/htdocs/langs/en_US/boxes.lang b/htdocs/langs/en_US/boxes.lang index 98970318e85..38b03b4268d 100644 --- a/htdocs/langs/en_US/boxes.lang +++ b/htdocs/langs/en_US/boxes.lang @@ -25,8 +25,8 @@ BoxTitleLastSuppliers=Latest %s recorded suppliers BoxTitleLastModifiedSuppliers=Latest %s modified suppliers BoxTitleLastModifiedCustomers=Latest %s modified customers BoxTitleLastCustomersOrProspects=Latest %s customers or prospects -BoxTitleLastCustomerBills=Latest %s customer's invoices -BoxTitleLastSupplierBills=Latest %s supplier's invoices +BoxTitleLastCustomerBills=Latest %s customer invoices +BoxTitleLastSupplierBills=Latest %s supplier invoices BoxTitleLastModifiedProspects=Latest %s modified prospects BoxTitleLastModifiedMembers=Latest %s members BoxTitleLastFicheInter=Latest %s modified interventions @@ -51,12 +51,12 @@ ClickToAdd=Click here to add. NoRecordedCustomers=No recorded customers NoRecordedContacts=No recorded contacts NoActionsToDo=No actions to do -NoRecordedOrders=No recorded customer's orders +NoRecordedOrders=No recorded customer orders NoRecordedProposals=No recorded proposals -NoRecordedInvoices=No recorded customer's invoices -NoUnpaidCustomerBills=No unpaid customer's invoices -NoUnpaidSupplierBills=No unpaid supplier's invoices -NoModifiedSupplierBills=No recorded supplier's invoices +NoRecordedInvoices=No recorded customer invoices +NoUnpaidCustomerBills=No unpaid customer invoices +NoUnpaidSupplierBills=No unpaid supplier invoices +NoModifiedSupplierBills=No recorded supplier invoices NoRecordedProducts=No recorded products/services NoRecordedProspects=No recorded prospects NoContractedProducts=No products/services contracted From 8e733ca2fe4d0e4a2bb116b779f15dac08ca7b13 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 7 Feb 2017 19:58:49 +0100 Subject: [PATCH 19/22] Remove menu entry that is not reserved to admin users frmo admin area. --- htdocs/core/menus/init_menu_auguria.sql | 1 - htdocs/core/menus/standard/eldy.lib.php | 6 ------ 2 files changed, 7 deletions(-) diff --git a/htdocs/core/menus/init_menu_auguria.sql b/htdocs/core/menus/init_menu_auguria.sql index 84f61145de7..4d535851df2 100644 --- a/htdocs/core/menus/init_menu_auguria.sql +++ b/htdocs/core/menus/init_menu_auguria.sql @@ -61,7 +61,6 @@ insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, left insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu=="admintools"', __HANDLER__, 'left', 311__+MAX_llx_menu__, 'home', '', 300__+MAX_llx_menu__, '/admin/system/about.php?leftmenu=admintools', 'About', 1, 'admin', '', '', 2, 14, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu=="admintools"', __HANDLER__, 'left', 320__+MAX_llx_menu__, 'home', '', 300__+MAX_llx_menu__, '/product/admin/product_tools.php?mainmenu=home&leftmenu=admintools', 'ProductVatMassChange', 1, 'products', '', '', 2, 0, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu=="admintools" && $conf->accounting->enabled', __HANDLER__, 'left', 321__+MAX_llx_menu__, 'home', '', 300__+MAX_llx_menu__, '/accountancy/admin/productaccount.php?mainmenu=home&leftmenu=admintools', 'InitAccountancy', 1, 'accountancy', '', '', 2, 0, __ENTITY__); -- Home - Menu users and groups insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '1', __HANDLER__, 'left', 400__+MAX_llx_menu__, 'home', 'users', 1__+MAX_llx_menu__, '/user/home.php?leftmenu=users', 'MenuUsersAndGroups', 0, 'users', '', '', 2, 4, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu=="users"', __HANDLER__, 'left', 401__+MAX_llx_menu__, 'home', '', 400__+MAX_llx_menu__, '/user/index.php?leftmenu=users', 'Users', 1, 'users', '$user->rights->user->user->lire || $user->admin', '', 2, 0, __ENTITY__); diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index d484ef8bc19..b60845c60af 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -579,12 +579,6 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu $newmenu->add("/product/admin/product_tools.php?mainmenu=home&leftmenu=admintools", $langs->trans("ProductVatMassChange"), 1, $user->admin); } - if (! empty($conf->accounting->enabled)) - { - $langs->load("accountancy"); - $newmenu->add("/accountancy/admin/productaccount.php?mainmenu=home&leftmenu=admintools", $langs->trans("InitAccountancy"), 1, $user->admin); - } - $newmenu->add("/support/index.php?mainmenu=home&leftmenu=admintools", $langs->trans("HelpCenter"),1,1,'targethelp'); } From 0a797cd12e47af7498baff0943c616aa97f90077 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 7 Feb 2017 20:08:15 +0100 Subject: [PATCH 20/22] Fix us terms. --- htdocs/langs/en_US/admin.lang | 4 ++-- htdocs/langs/en_US/bills.lang | 10 +++++----- htdocs/langs/en_US/companies.lang | 4 ++-- htdocs/langs/en_US/cron.lang | 4 ++-- htdocs/langs/en_US/holiday.lang | 4 ++-- htdocs/langs/en_US/ldap.lang | 4 ++-- htdocs/langs/en_US/mails.lang | 2 +- htdocs/langs/en_US/main.lang | 4 ++-- htdocs/langs/en_US/members.lang | 6 +++--- htdocs/langs/en_US/products.lang | 2 +- htdocs/langs/en_US/stocks.lang | 4 ++-- htdocs/langs/en_US/users.lang | 2 +- 12 files changed, 25 insertions(+), 25 deletions(-) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 9302852eeb1..45f55a20eba 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -293,7 +293,7 @@ YouCanSubmitFile=For this step, you can send package using this tool: Select mod CurrentVersion=Dolibarr current version CallUpdatePage=Go to the page that updates the database structure and data: %s. LastStableVersion=Latest stable version -LastActivationDate=Last activation date +LastActivationDate=Latest activation date UpdateServerOffline=Update server offline 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 third party type on n characters (see dictionary-thirdparty types).
@@ -1616,7 +1616,7 @@ MailToSendSupplierOrder=To send supplier order MailToSendSupplierInvoice=To send supplier invoice MailToThirdparty=To send email from third party page ByDefaultInList=Show by default on list view -YouUseLastStableVersion=You use the last stable version +YouUseLastStableVersion=You use the latest stable version TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites) TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites) ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read ChangeLog for complete list of changes. diff --git a/htdocs/langs/en_US/bills.lang b/htdocs/langs/en_US/bills.lang index 5d8e86199dd..548bc370004 100644 --- a/htdocs/langs/en_US/bills.lang +++ b/htdocs/langs/en_US/bills.lang @@ -151,14 +151,14 @@ NoQualifiedRecurringInvoiceTemplateFound=No recurring template invoice qualified FoundXQualifiedRecurringInvoiceTemplate=Found %s recurring template invoice(s) qualified for generation. NotARecurringInvoiceTemplate=Not a recurring template invoice NewBill=New invoice -LastBills=Last %s invoices -LastCustomersBills=Last %s customers invoices -LastSuppliersBills=Last %s suppliers invoices +LastBills=Latest %s invoices +LastCustomersBills=Latest %s customer invoices +LastSuppliersBills=Latest %s supplier invoices AllBills=All invoices OtherBills=Other invoices DraftBills=Draft invoices -CustomersDraftInvoices=Customers draft invoices -SuppliersDraftInvoices=Suppliers draft invoices +CustomersDraftInvoices=Customer draft invoices +SuppliersDraftInvoices=Supplier draft invoices Unpaid=Unpaid ConfirmDeleteBill=Are you sure you want to delete this invoice? ConfirmValidateBill=Are you sure you want to validate this invoice with reference %s? diff --git a/htdocs/langs/en_US/companies.lang b/htdocs/langs/en_US/companies.lang index 6cabf5d7d62..b6ef10ed515 100644 --- a/htdocs/langs/en_US/companies.lang +++ b/htdocs/langs/en_US/companies.lang @@ -401,7 +401,7 @@ MergeThirdparties=Merge third parties ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party so you will be able to delete the duplicate one. ThirdpartiesMergeSuccess=Thirdparties have been merged SaleRepresentativeLogin=Login of sales representative -SaleRepresentativeFirstname=Firstname of sales representative -SaleRepresentativeLastname=Lastname of sales representative +SaleRepresentativeFirstname=First name of sales representative +SaleRepresentativeLastname=Last name of sales representative ErrorThirdpartiesMerge=There was an error when deleting the thirdparties. Please check the log. Changes have been reverted. NewCustomerSupplierCodeProposed=New customer or supplier code suggested on duplicate code diff --git a/htdocs/langs/en_US/cron.lang b/htdocs/langs/en_US/cron.lang index 8abfa580740..03b972463c7 100644 --- a/htdocs/langs/en_US/cron.lang +++ b/htdocs/langs/en_US/cron.lang @@ -17,8 +17,8 @@ CronMethodDoesNotExists=Class %s does not contains any method %s # Menu EnabledAndDisabled=Enabled and disabled # Page list -CronLastOutput=Last run output -CronLastResult=Last result code +CronLastOutput=Latest run output +CronLastResult=Latest result code CronCommand=Command CronList=Scheduled jobs CronDelete=Delete scheduled jobs diff --git a/htdocs/langs/en_US/holiday.lang b/htdocs/langs/en_US/holiday.lang index 7933be96aba..441701c098d 100644 --- a/htdocs/langs/en_US/holiday.lang +++ b/htdocs/langs/en_US/holiday.lang @@ -76,8 +76,8 @@ BoxTitleLastLeaveRequests=Latest %s modified leave requests HolidaysMonthlyUpdate=Monthly update ManualUpdate=Manual update HolidaysCancelation=Leave request cancelation -EmployeeLastname=Employee lastname -EmployeeFirstname=Employee firstname +EmployeeLastname=Employee last name +EmployeeFirstname=Employee first name TypeWasDisabledOrRemoved=Leave type (id %s) was disabled or removed ## Configuration du Module ## diff --git a/htdocs/langs/en_US/ldap.lang b/htdocs/langs/en_US/ldap.lang index a17019d00fb..42e699de311 100644 --- a/htdocs/langs/en_US/ldap.lang +++ b/htdocs/langs/en_US/ldap.lang @@ -13,8 +13,8 @@ LDAPUsers=Users in LDAP database LDAPFieldStatus=Status LDAPFieldFirstSubscriptionDate=First subscription date LDAPFieldFirstSubscriptionAmount=First subscription amount -LDAPFieldLastSubscriptionDate=Last subscription date -LDAPFieldLastSubscriptionAmount=Last subscription amount +LDAPFieldLastSubscriptionDate=Latest subscription date +LDAPFieldLastSubscriptionAmount=Latest subscription amount LDAPFieldSkype=Skype id LDAPFieldSkypeExample=Example : skypeName UserSynchronized=User synchronized diff --git a/htdocs/langs/en_US/mails.lang b/htdocs/langs/en_US/mails.lang index c337b6e1119..897085ec423 100644 --- a/htdocs/langs/en_US/mails.lang +++ b/htdocs/langs/en_US/mails.lang @@ -85,7 +85,7 @@ LineInFile=Line %s in file RecipientSelectionModules=Defined requests for recipient's selection MailSelectedRecipients=Selected recipients MailingArea=EMailings area -LastMailings=Last %s emailings +LastMailings=Latest %s emailings TargetsStatistics=Targets statistics NbOfCompaniesContacts=Unique contacts/addresses MailNoChangePossible=Recipients for validated emailing can't be changed diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 4447c54610f..8f1a5d9bb75 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -87,7 +87,7 @@ Undefined=Undefined PasswordForgotten=Password forgotten? SeeAbove=See above HomeArea=Home area -LastConnexion=Last connection +LastConnexion=Latest connection PreviousConnexion=Previous connection PreviousValue=Previous value ConnectedOnMultiCompany=Connected on environment @@ -237,7 +237,7 @@ DateCreation=Creation date DateCreationShort=Creat. date DateModification=Modification date DateModificationShort=Modif. date -DateLastModification=Last modification date +DateLastModification=Latest modification date DateValidation=Validation date DateClosing=Closing date DateDue=Due date diff --git a/htdocs/langs/en_US/members.lang b/htdocs/langs/en_US/members.lang index e1c0e859ea6..21feb74c829 100644 --- a/htdocs/langs/en_US/members.lang +++ b/htdocs/langs/en_US/members.lang @@ -136,8 +136,8 @@ DocForAllMembersCards=Generate business cards for all members DocForOneMemberCards=Generate business cards for a particular member DocForLabels=Generate address sheets SubscriptionPayment=Subscription payment -LastSubscriptionDate=Last subscription date -LastSubscriptionAmount=Last subscription amount +LastSubscriptionDate=Latest subscription date +LastSubscriptionAmount=Latest subscription amount MembersStatisticsByCountries=Members statistics by country MembersStatisticsByState=Members statistics by state/province MembersStatisticsByTown=Members statistics by town @@ -149,7 +149,7 @@ MembersByStateDesc=This screen show you statistics on members by state/provinces MembersByTownDesc=This screen show you statistics on members by town. MembersStatisticsDesc=Choose statistics you want to read... MenuMembersStats=Statistics -LastMemberDate=Last member date +LastMemberDate=Latest member date Nature=Nature Public=Information are public NewMemberbyWeb=New member added. Awaiting approval diff --git a/htdocs/langs/en_US/products.lang b/htdocs/langs/en_US/products.lang index 9058f1f825d..431ddf628cd 100644 --- a/htdocs/langs/en_US/products.lang +++ b/htdocs/langs/en_US/products.lang @@ -236,7 +236,7 @@ GlobalVariables=Global variables VariableToUpdate=Variable to update GlobalVariableUpdaters=Global variable updaters UpdateInterval=Update interval (minutes) -LastUpdated=Last updated +LastUpdated=Latest update CorrectlyUpdated=Correctly updated PropalMergePdfProductActualFile=Files use to add into PDF Azur are/is PropalMergePdfProductChooseFile=Select PDF files diff --git a/htdocs/langs/en_US/stocks.lang b/htdocs/langs/en_US/stocks.lang index c3f9c359dac..1448ec061a2 100644 --- a/htdocs/langs/en_US/stocks.lang +++ b/htdocs/langs/en_US/stocks.lang @@ -27,8 +27,8 @@ Location=Location LocationSummary=Short name location NumberOfDifferentProducts=Number of different products NumberOfProducts=Total number of products -LastMovement=Last movement -LastMovements=Last movements +LastMovement=Latest movement +LastMovements=Latest movements Units=Units Unit=Unit StockCorrection=Correct stock diff --git a/htdocs/langs/en_US/users.lang b/htdocs/langs/en_US/users.lang index 4a002fab02c..446eb242d92 100644 --- a/htdocs/langs/en_US/users.lang +++ b/htdocs/langs/en_US/users.lang @@ -36,7 +36,7 @@ AdministratorDesc=Administrator DefaultRights=Default permissions DefaultRightsDesc=Define here default permissions that are automatically granted to a new created user (Go on user card to change permission of an existing user). DolibarrUsers=Dolibarr users -LastName=Last Name +LastName=Last name FirstName=First name ListOfGroups=List of groups NewGroup=New group From 4c3255857c0ab64ad29dc94ac2a85be68cc93337 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 8 Feb 2017 10:45:20 +0100 Subject: [PATCH 21/22] Fix bad syntax into criteria to filter on date in export. Fix missing type in export of invoices. --- htdocs/core/modules/modFacture.class.php | 2 +- htdocs/exports/class/export.class.php | 8 ++++---- htdocs/exports/export.php | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/htdocs/core/modules/modFacture.class.php b/htdocs/core/modules/modFacture.class.php index 4b56e6cab0e..8267df27f18 100644 --- a/htdocs/core/modules/modFacture.class.php +++ b/htdocs/core/modules/modFacture.class.php @@ -208,7 +208,7 @@ class modFacture extends DolibarrModules $this->export_fields_array[$r]=array('s.rowid'=>"IdCompany",'s.nom'=>'CompanyName','s.address'=>'Address','s.zip'=>'Zip','s.town'=>'Town','c.code'=>'CountryCode','s.phone'=>'Phone','s.siren'=>'ProfId1','s.siret'=>'ProfId2','s.ape'=>'ProfId3','s.idprof4'=>'ProfId4','s.code_compta'=>'CustomerAccountancyCode','s.code_compta_fournisseur'=>'SupplierAccountancyCode','s.tva_intra'=>'VATIntra','f.rowid'=>"InvoiceId",'f.facnumber'=>"InvoiceRef",'f.datec'=>"InvoiceDateCreation",'f.datef'=>"DateInvoice",'f.date_lim_reglement'=>"DateDue",'f.total'=>"TotalHT",'f.total_ttc'=>"TotalTTC",'f.tva'=>"TotalVAT",'f.paye'=>"InvoicePaid",'f.fk_statut'=>'InvoiceStatus','f.note_private'=>"NotePrivate",'f.note_public'=>"NotePublic",'f.fk_user_author'=>'CreatedById','uc.login'=>'CreatedByLogin','f.fk_user_valid'=>'ValidatedById','uv.login'=>'ValidatedByLogin', 'pj.ref'=>'ProjectRef', 'fd.rowid'=>'LineId','fd.description'=>"LineDescription",'fd.subprice'=>"LineUnitPrice",'fd.tva_tx'=>"LineVATRate",'fd.qty'=>"LineQty",'fd.total_ht'=>"LineTotalHT",'fd.total_tva'=>"LineTotalVAT",'fd.total_ttc'=>"LineTotalTTC",'fd.date_start'=>"DateStart",'fd.date_end'=>"DateEnd",'fd.special_code'=>'SpecialCode','fd.product_type'=>"TypeOfLineServiceOrProduct",'fd.fk_product'=>'ProductId','p.ref'=>'ProductRef','p.label'=>'ProductLabel','p.accountancy_code_sell'=>'ProductAccountancySellCode'); //Add 'fd.label'=>"Label" to export_fields_array if you use it. Not used by dolibarr currently. //$this->export_TypeFields_array[$r]=array('s.rowid'=>"List:societe:nom",'s.nom'=>'Text','s.address'=>'Text','s.zip'=>'Text','s.town'=>'Text','c.code'=>'Text','s.phone'=>'Text','s.siren'=>'Text','s.siret'=>'Text','s.ape'=>'Text','s.idprof4'=>'Text','s.code_compta'=>'Text','s.code_compta_fournisseur'=>'Text','s.tva_intra'=>'Text','f.facnumber'=>"Text",'f.datec'=>"Date",'f.datef'=>"Date",'f.date_lim_reglement'=>"Date",'f.total'=>"Numeric",'f.total_ttc'=>"Numeric",'f.tva'=>"Numeric",'f.paye'=>"Boolean",'f.fk_statut'=>'Status','f.note_private'=>"Text",'f.note_public'=>"Text",'fd.description'=>"Text",'fd.price'=>"Numeric",'fd.tva_tx'=>"Numeric",'fd.qty'=>"Numeric",'fd.total_ht'=>"Numeric",'fd.total_tva'=>"Numeric",'fd.total_ttc'=>"Numeric",'fd.date_start'=>"Date",'fd.date_end'=>"Date",'fd.product_type'=>"Numeric",'fd.fk_product'=>'List:product:label','p.ref'=>'Text','p.label'=>'Text'); - $this->export_TypeFields_array[$r]=array('s.nom'=>'Text','s.address'=>'Text','s.zip'=>'Text','s.town'=>'Text','c.code'=>'Text','s.phone'=>'Text','s.siren'=>'Text','s.siret'=>'Text','s.ape'=>'Text','s.idprof4'=>'Text','s.code_compta'=>'Text','s.code_compta_fournisseur'=>'Text','s.tva_intra'=>'Text','f.facnumber'=>"Text",'f.datec'=>"Date",'f.datef'=>"Date",'f.date_lim_reglement'=>"Date",'f.total'=>"Numeric",'f.total_ttc'=>"Numeric",'f.tva'=>"Numeric",'f.paye'=>"Boolean",'f.fk_statut'=>'Status','f.note_private'=>"Text",'f.note_public'=>"Text", 'pj.ref'=>'Text', 'fd.label'=>'Text', 'fd.description'=>"Text",'fd.subprice'=>"Numeric",'fd.tva_tx'=>"Numeric",'fd.qty'=>"Numeric",'fd.total_ht'=>"Numeric",'fd.total_tva'=>"Numeric",'fd.total_ttc'=>"Numeric",'fd.date_start'=>"Date",'fd.date_end'=>"Date",'fd.special_code'=>'Numeric','fd.product_type'=>"Numeric",'fd.fk_product'=>'List:product:label','p.ref'=>'Text','p.label'=>'Text','p.accountancy_code_sell'=>'Text'); + $this->export_TypeFields_array[$r]=array('s.rowid'=>'Numeric','s.nom'=>'Text','s.address'=>'Text','s.zip'=>'Text','s.town'=>'Text','c.code'=>'Text','s.phone'=>'Text','s.siren'=>'Text','s.siret'=>'Text','s.ape'=>'Text','s.idprof4'=>'Text','s.code_compta'=>'Text','s.code_compta_fournisseur'=>'Text','s.tva_intra'=>'Text','f.rowid'=>'Numeric','f.facnumber'=>"Text",'f.datec'=>"Date",'f.datef'=>"Date",'f.date_lim_reglement'=>"Date",'f.total'=>"Numeric",'f.total_ttc'=>"Numeric",'f.tva'=>"Numeric",'f.paye'=>"Boolean",'f.fk_statut'=>'Numeric','f.note_private'=>"Text",'f.note_public'=>"Text",'f.fk_user_author'=>'Numeric','uc.login'=>'Text','f.fk_user_valid'=>'Numeric','uv.login'=>'Text','pj.ref'=>'Text','fd.rowid'=>'Numeric','fd.label'=>'Text','fd.description'=>"Text",'fd.subprice'=>"Numeric",'fd.tva_tx'=>"Numeric",'fd.qty'=>"Numeric",'fd.total_ht'=>"Numeric",'fd.total_tva'=>"Numeric",'fd.total_ttc'=>"Numeric",'fd.date_start'=>"Date",'fd.date_end'=>"Date",'fd.special_code'=>'Numeric','fd.product_type'=>"Numeric",'fd.fk_product'=>'List:product:label','p.ref'=>'Text','p.label'=>'Text','p.accountancy_code_sell'=>'Text'); $this->export_entities_array[$r]=array('s.rowid'=>"company",'s.nom'=>'company','s.address'=>'company','s.zip'=>'company','s.town'=>'company','c.code'=>'company','s.phone'=>'company','s.siren'=>'company','s.siret'=>'company','s.ape'=>'company','s.idprof4'=>'company','s.code_compta'=>'company','s.code_compta_fournisseur'=>'company','s.tva_intra'=>'company','f.rowid'=>"invoice",'f.facnumber'=>"invoice",'f.datec'=>"invoice",'f.datef'=>"invoice",'f.date_lim_reglement'=>"invoice",'f.total'=>"invoice",'f.total_ttc'=>"invoice",'f.tva'=>"invoice",'f.paye'=>"invoice",'f.fk_statut'=>'invoice','f.note_private'=>"invoice",'f.note_public'=>"invoice", 'pj.ref'=>'project', 'fd.rowid'=>'invoice_line','fd.label'=>"invoice_line",'fd.description'=>"invoice_line",'fd.subprice'=>"invoice_line",'fd.total_ht'=>"invoice_line",'fd.total_tva'=>"invoice_line",'fd.total_ttc'=>"invoice_line",'fd.tva_tx'=>"invoice_line",'fd.qty'=>"invoice_line",'fd.date_start'=>"invoice_line",'fd.date_end'=>"invoice_line",'fd.special_code'=>'invoice_line','fd.product_type'=>'invoice_line','fd.fk_product'=>'product','p.ref'=>'product','p.label'=>'product','p.accountancy_code_sell'=>'product','f.fk_user_author'=>'user','uc.login'=>'user','f.fk_user_valid'=>'user','uv.login'=>'user'); $this->export_dependencies_array[$r]=array('invoice_line'=>'fd.rowid','product'=>'fd.rowid'); // To add unique key if we ask a field of a child to avoid the DISTINCT to discard them $keyforselect='facture'; $keyforelement='invoice'; $keyforaliasextra='extra'; diff --git a/htdocs/exports/class/export.class.php b/htdocs/exports/class/export.class.php index dfea6d4d17a..1d0c5cfb13e 100644 --- a/htdocs/exports/class/export.class.php +++ b/htdocs/exports/class/export.class.php @@ -288,15 +288,15 @@ class Export { // mode plage $ValueArray = explode("+", $ValueField); - $szFilterQuery ="(".$this->conditionDate($NameField,$ValueArray[0],">="); - $szFilterQuery.=" AND ".$this->conditionDate($NameField,$ValueArray[1],"<=").")"; + $szFilterQuery ="(".$this->conditionDate($NameField,trim($ValueArray[0]),">="); + $szFilterQuery.=" AND ".$this->conditionDate($NameField,trim($ValueArray[1]),"<=").")"; } else { if (is_numeric(substr($ValueField,0,1))) - $szFilterQuery=$this->conditionDate($NameField,$ValueField,"="); + $szFilterQuery=$this->conditionDate($NameField,trim($ValueField),"="); else - $szFilterQuery=$this->conditionDate($NameField,substr($ValueField,1),substr($ValueField,0,1)); + $szFilterQuery=$this->conditionDate($NameField,trim(substr($ValueField,1)),substr($ValueField,0,1)); } break; case 'Duree': diff --git a/htdocs/exports/export.php b/htdocs/exports/export.php index 01e963585ec..12f78e01ce9 100644 --- a/htdocs/exports/export.php +++ b/htdocs/exports/export.php @@ -595,7 +595,7 @@ if ($step == 2 && $datatoexport) { // Selected fields print '
'; - print ''; + print ''; print ''; - print ''; + print ''; print ''; } From eb452397bdca76e159aa6221cb5eac859850cd41 Mon Sep 17 00:00:00 2001 From: Paris Liakos Date: Tue, 7 Feb 2017 20:55:40 +0200 Subject: [PATCH 22/22] Wrong trigger when setting supplier invoice back to draft --- .../fourn/class/fournisseur.facture.class.php | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 6c0d493373c..5602f573e90 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -46,7 +46,7 @@ class FactureFournisseur extends CommonInvoice public $fk_element='fk_facture_fourn'; protected $ismultientitymanaged = 1; // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe public $picto='bill'; - + /** * {@inheritdoc} */ @@ -320,12 +320,12 @@ class FactureFournisseur extends CommonInvoice { $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'facture_fourn_det (fk_facture_fourn)'; $sql .= ' VALUES ('.$this->id.')'; - + $resql_insert=$this->db->query($sql); if ($resql_insert) { $idligne = $this->db->last_insert_id(MAIN_DB_PREFIX.'facture_fourn_det'); - + $this->updateline( $idligne, $this->lines[$i]->description, @@ -354,19 +354,19 @@ class FactureFournisseur extends CommonInvoice foreach ($this->lines as $i => $val) { $line = $this->lines[$i]; - + // Test and convert into object this->lines[$i]. When coming from REST API, we may still have an array //if (! is_object($line)) $line=json_decode(json_encode($line), FALSE); // convert recursively array into object. if (! is_object($line)) $line = (object) $line; - + $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'facture_fourn_det (fk_facture_fourn)'; $sql .= ' VALUES ('.$this->id.')'; - + $resql_insert=$this->db->query($sql); if ($resql_insert) { $idligne = $this->db->last_insert_id(MAIN_DB_PREFIX.'facture_fourn_det'); - + $this->updateline( $idligne, $line->description, @@ -387,9 +387,9 @@ class FactureFournisseur extends CommonInvoice $this->db->rollback(); return -5; } - } + } } - + // Update total price $result=$this->update_price(); if ($result > 0) @@ -413,7 +413,7 @@ class FactureFournisseur extends CommonInvoice } } else if ($reshook < 0) $error++; - + if (! $error) { // Call trigger @@ -421,7 +421,7 @@ class FactureFournisseur extends CommonInvoice if ($result < 0) $error++; // End call triggers } - + if (! $error) { $this->db->commit(); @@ -587,7 +587,7 @@ class FactureFournisseur extends CommonInvoice $this->multicurrency_total_ht = $obj->multicurrency_total_ht; $this->multicurrency_total_tva = $obj->multicurrency_total_tva; $this->multicurrency_total_ttc = $obj->multicurrency_total_ttc; - + $this->extraparams = (array) json_decode($obj->extraparams, true); $this->socid = $obj->socid; @@ -671,8 +671,8 @@ class FactureFournisseur extends CommonInvoice $line->subprice = $obj->pu_ht; $line->pu_ht = $obj->pu_ht; $line->pu_ttc = $obj->pu_ttc; - - $line->vat_src_code = $obj->vat_src_code; + + $line->vat_src_code = $obj->vat_src_code; $line->tva_tx = $obj->tva_tx; $line->localtax1_tx = $obj->localtax1_tx; $line->localtax2_tx = $obj->localtax2_tx; @@ -700,7 +700,7 @@ class FactureFournisseur extends CommonInvoice $line->multicurrency_total_ht = $obj->multicurrency_total_ht; $line->multicurrency_total_tva = $obj->multicurrency_total_tva; $line->multicurrency_total_ttc = $obj->multicurrency_total_ttc; - + $this->lines[$i] = $line; $i++; @@ -1260,7 +1260,7 @@ class FactureFournisseur extends CommonInvoice if (! $error && empty($notrigger)) { // Call trigger - $result=$this->call_trigger('BILL_SUPPLIER_VALIDATE',$user); + $result=$this->call_trigger('BILL_SUPPLIER_UNVALIDATE',$user); if ($result < 0) $error++; // End call triggers } @@ -1332,7 +1332,7 @@ class FactureFournisseur extends CommonInvoice if (empty($txlocaltax2)) $txlocaltax2=0; $localtaxes_type=getLocalTaxesFromRate($txtva, 0, $mysoc, $this->thirdparty); - + // Clean vat code $vat_src_code=''; if (preg_match('/\((.*)\)/', $txtva, $reg)) @@ -1340,7 +1340,7 @@ class FactureFournisseur extends CommonInvoice $vat_src_code = $reg[1]; $txtva = preg_replace('/\s*\(.*\)/', '', $txtva); // Remove code into vatrate. } - + $remise_percent=price2num($remise_percent); $qty=price2num($qty); $pu=price2num($pu); @@ -1374,7 +1374,7 @@ class FactureFournisseur extends CommonInvoice //$this->line->label=$label; // deprecated $this->line->desc=$desc; $this->line->qty= ($this->type==self::TYPE_CREDIT_NOTE?abs($qty):$qty); // For credit note, quantity is always positive and unit price negative - + $this->line->vat_src_code=$vat_src_code; $this->line->tva_tx=$txtva; $this->line->localtax1_tx=$txlocaltax1; @@ -1503,7 +1503,7 @@ class FactureFournisseur extends CommonInvoice $vat_src_code = $reg[1]; $vatrate = preg_replace('/\s*\(.*\)/', '', $vatrate); // Remove code into vatrate. } - + $tabprice = calcul_price_total($qty, $pu, $remise_percent, $vatrate, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $this->thirdparty, $localtaxes_type, 100, $this->multicurrency_tx, $pu_ht_devise); $total_ht = $tabprice[0]; $total_tva = $tabprice[1]; @@ -1513,13 +1513,13 @@ class FactureFournisseur extends CommonInvoice $pu_ttc = $tabprice[5]; $total_localtax1 = $tabprice[9]; $total_localtax2 = $tabprice[10]; - + // MultiCurrency $multicurrency_total_ht = $tabprice[16]; $multicurrency_total_tva = $tabprice[17]; $multicurrency_total_ttc = $tabprice[18]; $pu_ht_devise = $tabprice[19]; - + if (empty($info_bits)) $info_bits=0; if ($idproduct) @@ -1545,7 +1545,7 @@ class FactureFournisseur extends CommonInvoice $line->pu_ttc = $pu_ttc; $line->qty = $qty; $line->remise_percent = $remise_percent; - + $line->vat_src_code=$vat_src_code; $line->tva_tx = $vatrate; $line->localtax1_tx = $txlocaltax1; @@ -1871,7 +1871,7 @@ class FactureFournisseur extends CommonInvoice $linkclose.= ' title="'.dol_escape_htmltag($label, 1).'"'; $linkclose.=' class="classfortooltip"'; } - + $linkstart = ''; $linkend=''; @@ -2179,10 +2179,10 @@ class FactureFournisseur extends CommonInvoice } else { - $modele = ''; // No default value. For supplier invoice, we allow to disable all PDF generation + $modele = ''; // No default value. For supplier invoice, we allow to disable all PDF generation } } - + if (empty($modele)) { return 0; @@ -2266,7 +2266,7 @@ class SupplierInvoiceLine extends CommonObjectLine public $product_ref; /** - * Supplier reference of price when we added the line. May have been changed after line was added. + * Supplier reference of price when we added the line. May have been changed after line was added. * TODO Rename field ref to ref_supplier into table llx_facture_fourn_det and llx_commande_fournisseurdet and update fields into updateline * @var string */ @@ -2555,13 +2555,13 @@ class SupplierInvoiceLine extends CommonObjectLine $sql.= ", product_type = ".$this->product_type; $sql.= ", info_bits = ".$this->info_bits; $sql.= ", fk_unit = ".$fk_unit; - + // Multicurrency $sql.= " , multicurrency_subprice=".price2num($this->multicurrency_subprice).""; $sql.= " , multicurrency_total_ht=".price2num($this->multicurrency_total_ht).""; $sql.= " , multicurrency_total_tva=".price2num($this->multicurrency_total_tva).""; $sql.= " , multicurrency_total_ttc=".price2num($this->multicurrency_total_ttc).""; - + $sql.= " WHERE rowid = ".$this->id; dol_syslog(get_class($this)."::update", LOG_DEBUG); @@ -2675,7 +2675,7 @@ class SupplierInvoiceLine extends CommonObjectLine $sql.= " ".(! empty($this->label)?"'".$this->db->escape($this->label)."'":"null").","; $sql.= " '".$this->db->escape($this->desc)."',"; $sql.= " ".price2num($this->qty).","; - + $sql.= " ".(empty($this->vat_src_code)?"''":"'".$this->vat_src_code."'").","; $sql.= " ".price2num($this->tva_tx).","; $sql.= " ".price2num($this->localtax1_tx).","; @@ -2745,7 +2745,7 @@ class SupplierInvoiceLine extends CommonObjectLine $this->db->rollback(); return -2; } - } + } /** * Mise a jour de l'objet ligne de commande en base *
' . $langs->trans('JournalFinancial') . ' ('.$langs->trans('Opened').')' . $langs->trans('JournalFinancial') . ' ('.$langs->trans('Opened').')
'; print ''; print '
 '.img_left('default', 0, 'style="max-width: 20px"').''.img_left('default', 0, 'style="max-width: 20px"').''; //print $text.'-'.$htmltext."
"; print $form->textwithpicto($text,$htmltext); @@ -610,7 +610,7 @@ if ($step == 2 && $datatoexport) print $form->textwithpicto($text,$htmltext); //print ' ('.$code.')'; print '
'.img_right('default', 0, 'style="max-width: 20px"').''.img_right('default', 0, 'style="max-width: 20px"').'