summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/fields/field_utils.js
AgeCommit message (Collapse)Author
2021-05-28[FIX] web: parseDateTime util optimizationsBruno Boi
- `parseDateTime` util: we now caches "without zero" date and time formats Taskid: 2412172
2020-12-04[FIX] survey, web, web_editor, website, website_form: Prevent invalid date ↵Achraf (abz)
stock.picking What are the steps to reproduce your issue? 1. Install "stock" 2. Go to Inventory/Inventory Overview/Internal Transfer 3. Create new record and set manually a date with year < 1000 like "0008-10-10 18:35:00" 4. Save What is currently happening? An error arises when saving the record, and it is then no longer possible to reopen the records or any view containing it. This also prevents us from correcting the date to no longer have the error Why is this happening? The root cause is an inconsistency in `strftime` for years < 1000 [1, 2]. To take it into account, a zero-padding is needed in the DateTime parser. How to fix the bug? The missing padding is added. However, such dates lead to problematic behaviors in Python: ``` DT_FORMAT = "%Y-%m-%d %H:%M:%S" new_date = "0008-02-05 18:10:10" datetime.strptime( datetime.strptime( new_date, DT_FORMAT ).strftime(DT_FORMAT), DT_FORMAT ) ``` This raises: ``` ValueError: time data '8-02-05 18:10:10' does not match format '%Y-%m-%d %H:%M:%S' ``` As of today there was no reported business cases where dates with year < 1000 would be necessary. Therefore, we limit the range to years >= 1000. [1] https://bugs.python.org/issue13305 [2] https://docs.python.org/dev/library/datetime.html#strftime-strptime-behavior opw-2408260 closes odoo/odoo#62818 Signed-off-by: Nicolas Martinelli (nim) <nim@odoo.com>
2020-08-11[IMP] web: add smart date input on date fieldMichael Mattiello (mcm)
This commit adds smart date inputs for date and datetime fields. The goal of smart date input is to provide the user some shortcuts when setting dates. The rule is [+-]\d+[dwmy]? So we can enter inputs like: +3 to have today + 3 days -2w to have today - 2 weeks +1y to have today + 1 year +5m to have today + 5 months -4d to have today - 4 days closes odoo/odoo#55602 Task: 2270347 Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
2020-07-28[IMP] web: remove min date limitation of year 1900Harpritsinh Sisodiya
Before this commit, user could not selecta a date before year 1900. This was an historical limitation due to python < 3.2 that didn't support dates before 1900. After this commit, user can select any date, user can select any date from 01/01/0001. taskID: 2166761 Fixes #41788 Closes #43055 closes odoo/odoo#51406 Signed-off-by: Géry Debongnie (ged) <ged@openerp.com> Co-authored-by: Mohammed Shekha <msh@odoo.com> Co-authored-by: Aaron Bohy <aab@odoo.com>
2020-07-07[FIX] web: properly display boolean fields in kanbanHardik Prajapati
Before this commit, boolean fields (without widget="boolean") in kanban views were displayed as [Object object], because when no widget is specified, we display the (textual) formatted value of the field. However, the boolean formatter returns by default a string encoding an html checkbox. This commit passes the correct option to force a string formatting, so it now displays "True" or "False". Moreover, this commit uniformizes formatter options for that purpose, as another option had been recently introduced for monetary field. Note that those options should not be necessary, as formatters should always return text values (no html). But this is a larger change, that we might do in the future. Task 2280394 closes odoo/odoo#53937 Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
2020-06-22[FIX] web: kanban: format monetary w/o widgetVictor Feyens
Before this commit, monetary fields occurring in kanban views without widget="monetary" specified weren't correctly formatted: the whitespace separating the value from the currency symbol was formatted has $nbsp; (html) instead of a simple whitespace. closes odoo/odoo#52521 Signed-off-by: Aaron Bohy (aab) <aab@odoo.com> Co-authored-by: Aaron Bohy <aab@odoo.com>
2020-06-15[IMP] web: add options to formatFloatTimeMichael Mattiello (mcm)
This commit adds noLeadingZeroHour option to formatFloatTime. The noLeadingZeroHour option can be used to format the value like 1:30 instead of 01:30 This format behaviour is wanted for fields in web_grid module. Task 2261853 closes odoo/odoo#52217 Related: odoo/enterprise#10870 Signed-off-by: Aaron Bohy (aab) <aab@odoo.com> Co-authored-by: Hardik Prajapati <hap@odoo.com> Co-authored-by: Mohammed Shekha <msh@openerp.com>
2020-03-10[FIX] web: introduce parser for `many2one_reference`Damien Bouvy
Follow-up of d0c852f The parser of `many2one_reference` was not introduced when the new field type was created and then later when the formatter was added, which leads to errors when the web client is trying to set the value of such fields. Since the value of this field is an ID, it is parsed as an integer. closes odoo/odoo#47330 X-original-commit: db1e16bc041e1d892fd1f3ac5b694e12496a32f9 Signed-off-by: Damien Bouvy (dbo) <dbo@odoo.com>
2020-02-06[IMP] web: show % symbol outside the input in percentage widgetMichael Mattiello (mcm)
Before this commit the % symbol was part of the input. We could write a value with the % symbol to divide the value by 100 (50% = 0.5, 50 = 50) This commit removes the % symbol from the input and adds it in a span after the input so we do not need to write the % symbol anymore. The value from the input will be saved as $value / 100 in database. task-2065078 closes odoo/odoo#43995 Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
2019-11-20[FIX] web: handle m2o whose comodel name field is an m2oAaron Bohy
This is a weird situation, but the python handles it. Let's assume a many2one field F1 on model M1 with comodel M2, and on M2 the name field (which is the _rec_name) being itself a many2one, and the following scenario: - create a new record for M1 - for field F1, select 'Create and Edit': it opens a form view for M2 in a dialog - type something in F2 input, and click 'Quick create' - save the dialog Before this rev., the value of F1 was [object Object]. Now, the new value is properly displayed. OPW 2091106 closes odoo/odoo#40549 X-original-commit: 5a04ea848abf50b1fb1f9893d1fcd98013bc025d Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
2019-09-23[FIX] web: introduce format for `many2one_reference`Sébastien Theys
The format of `many2one_reference` was not introduced when the new field type was created, which leads to errors when the web client is trying to display the value of such fields. Since the value of this field is an ID, it is decided to display it like an integer, which is consistent with previous behavior: the fields that are now `many2one_reference` are still stored as integer and they were already displayed as integer before. closes odoo/odoo#37216 Signed-off-by: Raphael Collet (rco) <rco@openerp.com>
2019-09-24[MERGE] forward port branch saas-12.4 up to 9ed4872ea03Christophe Simonis
closes odoo/odoo#37372 Signed-off-by: Christophe Simonis <chs@odoo.com>
2019-09-19[FIX] web: write date without separatorJorge Pinna Puissant
Since fbbfa6d it's not longer possible to write a date without separator (e.g., 0102 for 01/02/2019; 121298 for 12/12/1998; 02042018 for 02/04/2018), or a date without year (e.g., 01/02 for 01/02/2019) in the datepicker widget. In this commit we have decided to be as permissive as tempus dominus that call moment.js with strict false. This allows moment.js to deduct a date from a string in a more versatile way. This also allows a more versatile autocomplete in the search views. opw-2070464 opw-2070931 closes odoo/odoo#37095 Forward-port-of: odoo/odoo#36821 Signed-off-by: Lucas Perais (lpe) <lpe@odoo.com>
2019-07-18[IMP] hr: Review the UX for 'My Profile' viewKevin Baptiste
1/ web: adapt formatDate to handle NaN values DashboardRenderer might return NaN for `Date` or `DateTime` fields if their original value is null or incorrect. 2/ hr: add job_title in demo data 3/ hr_recruitment: link employee in the chatter for new recruits 4/ hr: remove employee documents in the model 5/ hr_attendance: improve resiliency of relative_time 6/ hr: display manager on res_users 7/ hr: change Address Book to Employee Directory TaskID: 2009111 closes odoo/odoo#34180 Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
2019-01-09[FIX] web: decimal separator of percentageNicolas Martinelli
When a percentage if formatted, the decimal separator used is always `.`, while it should be the decimal separator of the language. opw-1908220 closes odoo/odoo#30030
2018-11-08[FIX] web: format function missing in percentage widgetJulien (juc) Castiaux
The format function was missing for the percentage widget type, so `field_utils.parse[this.formatType]` (see [1]) resolved as `undefined` which is not a function and so raised an error when the user was trying to update the field. This PR add that parsing function. Both `xx%` and `0.xx` are understood by the parser and resolve to the correct float value. opw-1895979 [1] https://github.com/odoo/odoo/blob/e220721a8ee80c02fe5aba5ed8c9f3f4ae54ea97/addons/web/static/src/js/fields/abstract_field.js#L399 closes odoo/odoo#28431
2018-09-27[FIX] web: human numbers and percentagesMathieu Duckerts-Antoine
A recent modification of the float and integer formatters allowing the rendering to be human readable causes a bug in the percentage formatter for large values. The reason is that the latter formatter uses formatFloat (wich can now produce 'numbers' like 3k) and then parse the result. In the case of 3k an error is raised since 3k is not recognized as a true number. This fixes avoid to parse the number in case it has been formatted to be 'readable'. Note that the parsing was essentially used to produces better percentages like 10% instead of 10.00%. This is not necessary in our case since utils.human_number takes care of the unwanted (not all) decimals for us (the original number is always rounded by utils.human_number).
2018-09-26[IMP] web: readable format of numbersMathieu Duckerts-Antoine
The functions 'formatFloat' and 'formatInteger' now format a number x like utils.human_number when a predicate 'humanReadable' is available in options and humanReadable(x) is true.
2018-08-13[IMP] web: float_factor and float_toggle widgetsjem-odoo
This commit provides new js widgets for list, kanban and form views on float field. 1/ 'float_factor' displays the normal float field, but takes a conversion factor as option. The displays value is the normal one multiplied by the factor. You can use the widget like <field name="my_float_field" widget="float_factor" option="{'factor': 2}"/> 2/ 'float_toggle' displays a button (in edit mode) looping on a range of given value at each click. A conversion factor is optional (default will be 1) to display a converted value, but sent to non converted one to the server. You can use the widget like <field name="my_float" widget="float_toggle" option="{'range': [0, 0.5, 1], 'factor': 2}"/> 'range' and 'factor' are put in the options. In simple read mode, the widget display the value as a traditionnal text (like a normal char field). This commit provides tests and documentation for those 2 widgets. Task #39079
2018-04-03[IMP] web: add a percentage formatterMathieu Duckerts-Antoine
This rev. adds a new formatter for numerical values to fieldsUtils.
2018-01-18[FIX] web: error image when no kanban imageNicolas Lempereur
Introduce back part of `formatBinary` that was reverted with 7813a8e7. When an image is unset, the value was `false` which would end up with a bin_size of `NaN Bytes` which would end up displaying an error image with source `data:image/png;base64,NaN Bytes`. This commit get back a previous behavior so the bin_size when the attachment does not exist is an empty string (so: ''). opw-805542 closes #22348
2018-01-12[FIX] web: binaryfile field in list viewsAlexandre Kühn
Revert partially 255e8ca3d92e3a77d7c2a145677623518bc2f978 Removed widget 'download_link', as it was a sub-version of widget 'binary': it did the exact same thing (representation of binary fields by means of a download link) in a much better-looking way (download icon + filename as text of the download link, instead of just a download link with text "Download"). Also, the values of binary fields might be already a human-readable binsize (e.g. 2.52 MBs), instead of its plain textual string representation in base64: The contextual parameter 'bin_size', when set to true, does not download the data of binary fields. As a consequence, the server provides the sizes of the binary, instead of their value.
2018-01-08[FIX] web: binary field format in list viewAlexandre Kühn
Binary fields were simply shown simply by their textual representation in list views, e.g. the base64 string. There was no formatter for binary fields, therefore it has been implemented so that it displays its estimated size. Binary fields in list views had a download link in v10.0. We provide this feature back by means of a widget called 'download_link'. It is also possible to define an option to set the field name having the filename as its value. Example: <tree> <field name="fname"/> <field name="datas" widget="download_link" options="{'filename': 'fname'}"/> </tree> with the following record: {fname: 'document.txt', datas: 'Cg=='}, we get a file named "document.txt" by clicking on the download link. Closes #21996
2018-01-04[IMP] web: support variable digitsNicolas Martinelli
In v10, a `Float` field with `widget="monetary"` option uses the decimal precision of the field. In v11, however, it uses the decimal precision of the currency. However, in many cases `widget="monetary"` is used in the sole purpose of displaying the currency symbol. The precision of the field sould be kept. This commit introduces the support of the decimal precision of the field for this specific use case thanks to the `field_digits` option: ``` <field name="pouet" widget="monetary" options="{'field_digits': True}" /> ``` If such an option is used, the field precision will prevail over the currency precision. Related to #21686 opw-800279
2017-12-29[FIX] web: currency digitsNicolas Martinelli
- Set the currency rounding to 0.001 (3 digits) - Create an account move - Add an account move line, set an account When switching from edit/read-only mode, the rounding switches from 2 to 3 digits. This is because, in edit mode, the format method is the method of the float widget. Therefore, in this case, the formatting doesn't take into account the currency rounding. To avoid this, we simply use a `noSymbol` flag to avoid adding the currency symbol, while keeping the monetary rounding. opw-800279
2017-12-05[FIX] web,*: time format from user's languageAlexandre Kühn
Before this fix, the chatter always showed dates of messages in military time format. This was not the expected behavior, as the user could have had customize the date and time format in the settings of the current language. Steps to reproduce the issue: 1. Set Odoo in English 2. Settings > Translations > Languages > English 2.1. Set Date Format to %m/%d/%Y 2.2. Set Time Format to %I:%M:%S %p 3. CRM > (Select any opportunity with at least one message) > Mouse hover on elapsed time (e.g. "an hour ago") Expected: - It shows the customized time format (e.g. 11/07/2017 5:33:36 PM) Results: - It shows the military time format (e.g. Tue Nov 07 2017 17:33:36 GMT+0100) opw-781647
2017-10-13[MERGE] forward port branch saas-16 up to 8ee9024a4c8Christophe Simonis
2017-10-12[FIX] web: integer not properly parsedrgarnau
The parsing of the integers does not escape the thousands separator. issue: Integers are currently not properly parsed. For example, create a database in Spanish language, install product_expiry and in settings activate Lots & Serial Numbers. Go to Products and create a new product. Choose to track by lots and specify the use_time, life_time, etc. When saving, all integers are set to 0
2017-09-18[FIX] *: fix a bunch of incorrectly documented docstringXavier Morel
Fix a bunch of ill-documented/incomplete/incorrect method docs Without this, the automatic doc generation does not work.
2017-08-24[MERGE] forward port branch saas-17 up to 877e7098719Christophe Simonis
2017-08-17[FIX] web: always use browser timezoneAdrien Dieudonne
With the new views, we stopped using the browser timezone to display the dates in Odoo, and we used the timezone defined on the User profile instead. When loading the webclient, the timezone offset was put into the session and used to display all dates. This wasn't a good idea. The given offset was computed for the current time, meaning that it may be incorrect for specific dates (e.g. with the daylight saving, the UTC offset of today is not the same as 6 months ago). Moreover (but less likely), as the offset was stored in the session, it wasn't recalculated afterwards. So if the offset actually changed during the session (e.g. from or to daylight saving time), the displayed dates were incorrect until the user reloaded the page. With this rev., we don't retrieve the offset from the server anymore and we use the browser timezone again (like before the new views). However, we keep the computation of the offset (on the fly) in the session, so that it can be mocked in the test environment.
2017-08-17[FIX] web: don't apply timezone offset for date fieldsAdrien Dieudonne
Before this rev., all date fields values were off by one day as soon as the user timezone was negative. With the new views, all dates manipulated by the JS are moment instances in UTC, and when being displayed, they are correctly formatted in the user locale by applying the timezone offset. However, this should obviously not be done for date fields as when no time is specified when creating a moment instance, it defaults to 00:00:00, so applying a negative offset always leads to the day before. Remark: It happens that datetime fields are displayed as a date (e.g. purchase order line form view). In that case, the offset is applied on the displayed date.
2017-08-04[REF] web: add utility function to render checkboxesqsm-odoo
Odoo checkboxes have a special style which requires a special DOM structure. Instead of having to build this structure each time we need a checkbox to be rendered, it is better to have a function that does that. It is also better to have a JS function for this instead of a qweb template so that this has not to be lazy loaded by the frontend for something as simple as a checkbox.
2017-07-18[FIX] web: fix boolean fields display in calendarDavid Monjoie
Since formatBoolean returns a jQuery object, boolean fields were displayed as [Object object] in calendar view. This is a fix for stable version. The real fix would be to get rid of the jQuery object returned by formatBoolean but the change is not trivial.
2017-06-29[ADD] web: add parse monetary methodCedric Snauwaert
In field_utils, the parse monetary method was remapped to parsefloat. In this commit, we add a specific parseMonetary method to handle currency specific formatting.
2017-06-28[FIX] web: deal with reference fieldsMartin Geubelle
The reference fields haven't been correctly implemented with the new views. This commit restores their behaviour. Note that an small improvement has been introduced in this commit. Before saas-16, a `name_get` was done for each record (so 80 if the field was displayed in a full list view), which is not optimal. The calls are now batched by model (so one `name_get` by model appearing in the field values).
2017-05-31[FIX] web: properly parse float with '.' as thousand_sepGéry Debongnie
In a slightly too naive way, we apparently tried to improve the parse_float method while rewriting the new views. This was done by using a regexp to match all occurences of a thousand separator. The way the regexp was built was fine, until the thousand separator is a '.', which, if used as a regexp, matches all characters. Also, sadly, '.' is not so rare as a thousand separator...
2017-05-29[FIX] web: properly support password attribute for fieldsGéry Debongnie
With the new views, the special attribute password was no longer supported. We simply reintroduce in this commit proper support to display password fields with *. Note: we may want to display passwords with a static number of *, but this requires some thoughts on the usability of the change. We simply reintroduce the previous behaviour here.
2017-05-23[FIX] web: send date string in server compatible formatHarshad Modi
Languages like Arabic (ar_SY), Hindi(hi_IN) do not use english digits to describe dates, and moment.js format function will keep these characters. So, the server will get date strings, and will be unable to use them. To see the problem, just type moment().locale('ar_SY').format('YYYY-MM-DD') into a browser console. In this commit, we simply force the locale to 'en' before sending data to the server. PR #17156
2017-05-18[FIX] web: selection field with value 0Aaron Bohy
The server doesn't make a distinction between an unset selection field, and a value 0 (integer). So when 0 is a valid key for the field, the server returns false as value if the field is unset, or if its value is 0, which is not really convenient. As a consequence, when the value is 0, it appears as unset in the interface. To circumvent this, we automatically converts false value of selection fields to 0, if 0 is a key of the selection.
2017-05-17[FIX] web: properly escape field values when necessaryAaron Bohy
This rev. removes some html injections issues: - in char and text field widgets - in phone field widget in mobile - in list views (when no widget is instantiated)
2017-05-08[FIX] web: display empty input fields properlyGéry Debongnie
Before this commit, it was not possible to see the difference between an unset float field (with a 'false' value) and a set field (for ex, with value 0) This was due to the fact that the formatFloat/formatMonetary functions format false values as the number 0, unlike many other formatting functions.
2017-05-04[FIX] web: correctly parse monetary fieldsAaron Bohy
Before this rev., the function that parses monetary fields (i.e. the one that converts the string value of the input into a numerical value) totally ignored the sign of the value. Actually, parsing a monetary field is exactly the same as parsing a float field, so we simply use the same function.
2017-05-04[REF] web, *: restore views designqsm-odoo
Since the new views merge, a lot of design elements were broken. This was particularly impacting the fields in the editable list view; indeed the editable list view is not using an inline form view anymore so the fields in the list were not properly styled as the LESS was still defined assuming the form view environment (for example the invalid fields were red for o2m fields in form view but not in editable list view even though they got the right CSS class). This commit refactor the LESS following these rules: - No more division of non-layout and layout rules. Dividing LESS rules in x_layout.less and x.less was a mistake. Many rules can be considered to be layout and not layout at the same time, developers always have to switch from one file part to the other, many CSS selectors (and rules!) are duplicated for nothing, ... - Field style is extracted from x_view.less and put in the new fields.less file. As before, the fields_extra.less will contain the rules specific to community so that the enterprise repo can override those by replacing the whole file. - Many classes have been renamed so that o_form_x_y becomes o_x_y as many classes can now be applied outside of form view. These classes should not be used in templates anyway. The commit also changes the DOM of fields so that it is more minimalist (no useless parent div, etc). Input elements are not automatically styled anymore, they have to get the o_input class explicitely. This allows to fix lots of small style bugs of previous versions (required monetary field had not the proper style, readonly m2m tags appeared as editable, ...). This also improves the LESS code. The editable list view should also completely stop flickering on chrome and firefox. The commit also removes the orange outline on list view dirty cells. The commit also removes deprecated static xml, LESS and other code. Notice there are still styles to restore/fix and LESS to improve.
2017-05-02[MERGE] forward port branch saas-15 up to 3f6bb0f544dChristophe Simonis
2017-04-19[FIX] web: call the correct format method for the one2many in list viewfwi-odoo
The one2many fields in list view should render the number of record, like the many2many fields.
2017-04-19[FIX] web: use correct timezone for date fieldsChristophe Matthieu
before this commit when toggling allday flag in calendar form view, it was possible to have one day error. The input datetime is wrong when the user don't use the datepicker widget (insert date by keypress instead of click on datepicker) sometimes, the value could be null (crash because try to clone false)
2017-04-13[FIX] web: calendar timezone with user configurationChristophe Matthieu
The client must receive the tzOffset to apply this on all hours. To use the date picker we must change the date to apply the change in the user's tzOffset, without this change the result is wrong. For datetime widget we must change like it to avoid max stack error. The server send the tzOffset, if it's undefined, by default the client use the browser time offset. Every test are change to use tzOffset. A test is added in calendar to use the click by position for the fullcalendar lib. This test create and drag and drop an event to check timezone error and error when we use default value in the context. Use formating date like 2026-04-04T08:00:00Z instead of 2026-04-04 08:00:00 is important for phantomjs, because it's crash without information if the formating is not the standard format. For the parsing, when the client receive a server date the date is utc formating but when it's parsed from the client is in the user's timezone
2017-04-13[FIX] web: field_utils: correctly format many2manysAaron Bohy
2017-04-11[FIX] web: monetary should reset on currency changeqsm-odoo
This reverts commit 839a07fbed4720fc71c070507c591295722df350. Indeed, the system will need the `resetOnAnyFieldChange` option as the `FieldMonetary` will need to be re-rendered if the currency changes. This does not use the `_fetchSpecialData` system as it will be refactored later and the currency can be fetched without RPC.