summaryrefslogtreecommitdiff
path: root/addons/phone_validation/tools/phone_validation.py
AgeCommit message (Collapse)Author
2020-09-25[FIX] crm: remove unnecessary warning in phone formatThibault Delavallée
In this commit we remove the warning logger when not being able to format a phone number. Indeed this does not indicate there was a real issue. It simply indicates that either the phone number is not parsable or not matching given country format. It happens in a lot of situation that phone numbers are not valid: bad encoding, country mismatch due to {lead, task, ticket} / partner not always being the same, ... This should not raise a server warning. When using frontend SMS composer for phone number, a warning is displayed to the user telling the number is probably incorrect. This is considered as sufficient from UX point of view as it warns users. We do not think we should warn admins that some data is incoherent in database. This commit also * Revert "[FIX] crm: avoid linking demo leads with an unrelated partner" This reverts commit 2c94c4c81ffa171158586cd64828d27c537cd1d6 -> having "invalid" data should be a valid use case of real life * Revert "[FIX] crm: get correct country for phone validation" This reverts commit a58f9fc154c038d72031b281e2bec2c0fc2915ba -> country of a lead comes from its partner if set but can be different. Same for phone numbers. Values on a lead after a compute are considered as complete. Sales persons could effectively have incoherent data on their form view but that is the result of what has been encoded. Task ID-2325228
2020-07-02[IMP] *: do not translate logsVictor Feyens
The logs should all be in the same language, s.t. one does not need to understand multiple languages when browsing/reading the server logs. closes odoo/odoo#53984 Related: odoo/enterprise#11615 Signed-off-by: Victor Feyens (vfe) <vfe@odoo.com>
2020-06-18[IMP] *: use named placeholders in translated messageMartin Trigaux
When more than one parameter is present in a message, it helps the translation to use named placeholder. This way, the order can be changed. It also helps the comprehension of the message.
2020-06-18[IMP] *: replace to new _() syntaxMartin Trigaux
Using a few regex like \((_\(.*%s.*)(\) % )([\w\[\]][\w .\[\]\(\)'"]*)\) ($1, $3)) Old syntax is still compatible but starts the migration to the new syntax that catches error.
2020-03-26[IMP] mass_mailing_(sms): Add unblacklisting buttonTiffany Chang (tic)
Previously a blacklisted phone number or email address could only be removed from their respective blacklist by going to the corresponding blacklist view [in mass_mailing_(sms)] and manually archiving/deactiviting the entry. All users could see that an email was blacklisted via an fa-ban icon added next to their corresponding field in the modules: crm, mass_mailing, mass_mailing_sms, and contacts (via extension). This commit adds additional fa-ban icons next to blacklisted phone numbers and makes all instances of these icons clickable to remove them from their corresponding blacklist using a wizard. There are several limitations to this implementation including: 1. If both a mobile and phone number field appear within a crm lead instance, then only the mobile field will indicate if it is blacklisted (due to current implementation of PhoneMixin which only checks 1 phone value against the blacklist and "sms" which returns mobile numbers first). I.e. if a phone field value is blacklisted, but a value is typed into the mobile field, then the phone field will never indicate that it is blacklisted. 2. If someone clicks on a unblacklisting icon after changing the corresponding field value without clicking off the field input, then the latest typed in value will be the one submitted for unblacklisting, which may not actually be blacklisted (due to "is_blacklisted" flag being a computed field and it not having a chance to re-compute to hide the button). 3. If someone changes values in the blacklist, then someone who already has a form open will not see icon disappear until something triggers a re-compute of the "phone_sanitized_blacklisted" flag (this was already the case with the icon, but now a user may try to unblacklist a value that is already unblacklisted.) 4. Since the icon needs to be visible by everyone to indicate whether or not a phone/email is blacklisted, users without corresponding unblacklist permissions will be able to click on the icon. When they click on it, they will be informed they do not have permission to unblacklist. A wizard was determined to be the best way to implement this unblacklisting for the following reasons: - A "Unblacklisting Reason" is needed and will not be stored as a field. - A field widget is unable to do this due to security settings + inability to refresh view after unblacklisting with a "Unblacklisting Reason" without wiping unsaved changes. Additionally, to better align with GDPR, the corresponding form view for the phone/email blacklist has been updated to use the same wizard to track "Reason for unblacklisting". Unfortunately there is no straightforward way to prevent direct "Archive" action, so users are still able to bypass unblacklisting without being asked for a "reason for unblacklisting". Supports task: 2117635 Upgrade PR: odoo/upgrade#939 COM PR: odoo/odoo#45315
2019-11-22[FIX] phone_validation: Switch `phonenumbers` from logger.warning to logger.infoMoisés López
It was discussed previously from: - https://github.com/odoo/odoo/commit/b79d05fff0cacb4d99ebc1b60f44d8dab757b806 I quote Olivier Dony commit message: """ Having it in INFO should be sufficient for its purpose, and will avoid impacting all CI builds done on a system that does not have the lib installed. For the record, this is not a hard requirement because the lib was not available in Debian stable packages at the time of release. It is only enabled on demand for those who want the feature and can install it manually. Fixes #22426 Closes #22459 """ closes odoo/odoo#40788 X-original-commit: 0394f5e95702087b38357070aad43f2b477c374e Signed-off-by: Olivier Dony (odo) <odo@openerp.com>
2019-08-12[IMP] phone_validation: add blacklist mechanismThibault Delavallée
PURPOSE SMS are a powerful marketing tool. For instance it is perfect to announce a sale or to communicate a coupon code, to welcome a new customer in a fidelity program, ... Purpose of this task is to integrate SMS sending in batch in mass mailing. It will use same mailing objects but sending SMS instead of emails. Some metrics and flows will have to be slightly updated at the same time. SPECIFICATIONS Purpose of this commit is to add a blacklist mechanism for phone numbers used to send SMS like what already exists for email addresses when sending emails. Define a new phone.blacklist model, holding a number and the state of the blacklist (active field), as well as tools methods to access it. Make it as private as possible, accessing it in sudo once access are granted. Also clean phone validation tools: lessen number of tool functions and update caller to simplify code readability. Some fixes are also included in this commit, notably blank spaces cleaning in phone numbers. Improve phone.validation.mixin to add a tool method computing a sanitized number, in addition to formatting it to national / international. Define a new mail.thread.phone mixin computing the blacklist status of a record. This mixin * inherit from phone.validation.mixin in order to have access to some base phone number parsing capabilities; * computes a sanitized phone number based on ´´_phone_get_number_fields´´. It takes first sanitized value, trying each field returned by the method. That means one sanitized phone number is available per record even if several fields are available; * compute blacklist state of records. It is based on phone.blacklist model and give an easy-to-use field and API to manipulate blacklisted records; * give some API methods : * ``_phone_set_blacklisted``: set recordset as blacklisted; * ``_phone_reset_blacklisted``: reactivate recordset (even if not blacklisted this method can be called safely); Put menus in technical in order to have access to it. Add a Phone / SMS menu below "Email" and use it to store SMS / Phone actions. Finally prepare tests addition by performing some light cleaning while adding blacklist tests. Purpose is to ease future tests related to SMS. LINKS Task 1997464 PR #34424 Original SMS addition: Task 1922163 (4287481)
2019-07-12[REF] sms: refactor message_post using SMS notificationsThibault Delavallée
Purpose of this commit is to better include SMS notifications when posting a message. SMS is now just another way of notifying people along with Inbox and email. Following recent mail merge improving notification mechanism [1] we have to define a _notify_record_by_sms method on mail.thread. When a message_post is done using message_type being ``sms`` notification type of customers is set to sms. Customers can be computed on model (generally based on partner_id field) or directly set usign partner°ids. Notification model is updated to store this information directly inside the notification itself. An new ``_message_sms`` helper method is introduced in SMS module allowing to send messages using sms type and notification with a reduced parameters number. It is just a shortcut to message_post, easier to use. Either it computes default recipients on the record set, either it is based on given partners and numbers to notify. The following use cases are notably supported * default computation: find customer, notify by sms; * force recipients to notify by sms (partner_ids); * give a set of numbers to notify by sms (sms_nubmers), not necessarily linked to existing partners; * force number / customer relationship independently of mobile number defined on customer (for example when sending an SMS directly from a mobile field on a lead linked to a customer); Tests are updated accordingly. Performance tests are added in order to have some insights on queries generated when sending SMS, like already done for mail.thread alone. Related to task 1922163 Linked to PR #33510 [1] see be2795513644f09f6b443f462bb67cc5a0762e8d: performance and notification code improvements Co-Authored-By: Thibault Delavallee <tde@odoo.com> Co-Authored-By: Pierre Rousseau <pro@odoo.com>
2019-07-02[IMP] phone_validation, sms: improve phone validation and SMS sending APIThibault Delavallée
Purpose of this commit is to support more formatting options in phone tools, to provide new API methods for phone numbers validatio. It also introduces a method on sms.api to send SMS in batch. This one uses a new route given in IAP services that send a batch of SMS instead of sending them one by one. Concerning phone validation, tools are updated to correctly handle all format supported by phonenumbers library. Indeed in addition to national and international formatting phonenumbers library also supports E164 (international without spaces) and RFC3966 (beautification of phone numbers). Let us support them and ease the use of our small tool methods in various addons, notably sms. Cleaning / check tools methods are added in phone validation module. Various methods allow to sanitize phone numbers according to a context record and/or some parameters. Those tools will be used in upcoming sms refactoring. Another purpose of this commit is to add phone_validation in dependencies of SMS application. Phone_validation module adds tools to parse and format phone numbers and allow to replace the manual check done currently. Adding it in dependencies of SMS does not change anything functionally as * library is still optional. If phonenumbers library is not installed the features are skipped without crashing; * no model is modified as it introduces only tools and a mixin. Models are updated in crm_phone_validation that updates lead and partner models; Related to task 1922163 Linked to PR #34516 Co-Authored-By: Thibault Delavallee <tde@odoo.com> Co-Authored-By: Pierre Rousseau <pro@odoo.com>
2018-02-07[FIX] phone_validation, crm_phone_validation: Phone number parsingRémi Rahir
Before this commit, when filing a phone number field on a model form (typically on website_form), the module phonenumbers would try to parse the number against the country of the model. However, this call fails when the number starts with 00 instead of + and that the model doesn't have a country_id field or if said field is not set. For this specific case, we chose to skip the number parsing altogether as providing a default country to the parser can lead to a wrong parsing. i.e, phonenumbers.parse(+32477111111, 'US') will find the number as US-based when it is a belgian number. solves issue #22513 Also corrected a faulty behaviour where the option to have a number parsed in its international format field `phone_international_format` on `res.company` was never properly assessed when the field comany_id of a model was not present in the model's form view. Added company_id field on opportunity's form view for a proper fix. Also fixed a syntax error in a logger.
2018-01-17[FIX] phone_validation: fix behavior with prefix optionPierre Rousseau
This commit fixes the behaviour of the phone_format function when phone_international_format is set to prefix.
2017-10-10[FIX] doc: mention pip3 instead of pip for python mod install suggestionsJos De Graeve
Do not suggest to use pip in the logger, the system administrator may use other tools Closes #19949
2017-06-20[FIX] phone_validation: bad code comparisonJérome Maes
During the formating method, the country code was compared to the country phone code. Indeed, phonenumbers python lib return a `PhoneNumber` object having a `country_code` attribute refering to the country_phone_code, and not the country_code (like odoo means). Consequence: changing the country on a lead did not make the phone validation work. Thus, it was required to give both code (country and country phone codes) to the phonenumbers API, in order to make a correct verification.
2017-05-05[ADD] phone_validation: tool module allowing phone number validationFabien Pinckaers
Using phonenumbers library this module adds tools methods as well as a small mixin for models that want to activate phone number validation and formatting. Formatting can be done always using an international format or having both national and international format. This is configured on the company. Note that phonenumbers library is optional. Installing this module without having the lib installed just skip its use but should not crash.