Skip to content
Snippets Groups Projects
  1. Dec 16, 2019
  2. Dec 17, 2019
  3. Dec 19, 2019
  4. Dec 21, 2019
    • Simon Lejeune's avatar
      [FIX] stock: wrong security rule · 4f0b6d6c
      Simon Lejeune authored
      
      rev[0] aimed to fix an intercompany reservation issue by allowing the
      intercompany moves to be seen, however the new domain was too soft and
      also allows the visibility of any moves going to a location without
      company, for example now outgoing moves to customer from all companies
      are visible.
      
      We strengthen the domain to only allow intercompany moves, ie we add the
      transit constraint in the domain.
      
      We also fix the same issue for the move line model (see [1])
      
      Now that this one is fixed, the next move is automatically reserved
      during _action_done. This didn't work either, so we carefully sudo and
      force_company on the destination move.
      
      [0] 3c4bb080
      [1] f9461c7096a65565a05136a4c6c42ddfa6881926
      task-2157248
      
      closes odoo/odoo#42270
      
      X-original-commit: 9a237d1af79519665d0895a30c9ce55a1d835918
      Signed-off-by: default avatarSimon Lejeune (sle) <sle@openerp.com>
      4f0b6d6c
  5. Dec 20, 2019
  6. Dec 18, 2019
  7. Dec 20, 2019
    • Damien Bouvy's avatar
      [IMP] mail: support custom `x_active` field · 6ac675f5
      Damien Bouvy authored
      
      An override of toggle_active was present to ensure that activities
      would be removed before archiving records; this commit adapts this
      mechanism to take custom active fields into account, since they are
      now supported at ORM-level by getting the active field through the
      `_active_name` model attribute instead of blindly using the `active`
      hard-coded field that was used until now..
      
      closes odoo/odoo#40109
      
      Signed-off-by: default avatarDamien Bouvy (dbo) <dbo@odoo.com>
      6ac675f5
    • Damien Bouvy's avatar
      [IMP] base_import_module: clean up after itself · 59eee6ba
      Damien Bouvy authored
      Uninstalling an imported module leaves behind an ir.module.module entry
      which is entirely useless: it cannot be reinstalled without re-uploading
      the module.
      
      A quick solution is provided here by simply cleaning up after the
      uninstallation and deleting the ir.module.module records of imported
      modules that just got removed.
      
      Another possibility could be to store the uploaded module for good in
      an attachment and re-load it from there upon re-installation, but that
      would lead to some conflict with Studio, as uninstalling the
      studio_customization module usually means you want to get rid of it for
      good.
      59eee6ba
    • Damien Bouvy's avatar
      [IMP] base, web: support `x_active` for archiving · 220eb4db
      Damien Bouvy authored
      While x_name has long been automatically supported as an equivalent
      of name, x_active was not.
      
      This commit adds this behaviour OoB, both in the ORM and the web client.
      
      On the ORM-side, a new `_active_name` attribute is supported on models.
      This attribute specifies the field that should behave as an active marker
      for records of the model. It is supported the same way `active` has been
      until now (filtering by the `active_test` context key and toggled by the
      `action_archive`, `action_unarchive` and `toggle_active` methods).
      Although no check has been added on the field's type, it is assumed to
      be a boolean field (the same way no check is present on the `(x_)name`
      field).
      
      On the client-side, the list view and form view now both support
      detecting the presence of either `active` or `x_active` on records,
      automatically adding an '(Un)Archive' button in the Action menu if such
      a field is detected.
      
      Note that the ORM implementation does actually need the field to be named
      in any specific way, but since the web client has no mechanism to load
      information regarding a model (the lifecycle of an action loading
      includes loading the action, view and record(s) but no generic
      information about the model itself besides what is included in the
      views), we restrict the field's name to `(x_)active` to avoid confusion
      as any other name would work at the ORM-level but not in the client.
      
      In the future, the client might be able to more elegantly get
      information about models, but this was not the scope of this change and
      this solution should cover most cases.
      
      Note that the `active` field will always takes precedence over the
      `x_active` field to avoid confusing the polarity, even if both fields
      are present on the model.
      
      In the case of a custom field, it might be slightly annoying that the
      default value of a Boolean field is `False`, which means that upon
      adding the column, all existing records are automatically archived. This
      can easily be worked around using an `ir.default` record for that
      particular field and an update of existing records (e.g. through the
      list view). The goal of this change was not to make it easy to add
      support for custom active fields, but to make it possible - we have
      therefore kept this implementation which introduces few changes while
      adding enough flexibility for developers.
      See https://twitter.com/zubair_shafiq/status/1202587553871880192?s=20
      
      
      for more info regarding supporting any `_active_name` in the web client.
      
      Co-authored-by: default avatarRaphael Collet <rco@odoo.com>
      220eb4db
    • Thibault Delavallée's avatar
      [FIX] website_slides: fix wrong comodel name in many2many · 4ef326de
      Thibault Delavallée authored
      
      Channels uses tags allowing to categorize and filter content. For that
      purpose a m2m exists between channels (slide.channel) and tags (slide.channel
      .tag). The 2many relationship from tags to channels holds however a wrong
      comodel name. It has no impact on code since relationship table is
      correctly defined and current code does not use the channel_ids fields
      from tags.
      
      closes odoo/odoo#42244
      
      X-original-commit: 46c3ac94485292c59fdfe4b21a8e32eef9d1f998
      Signed-off-by: default avatarThibault Delavallee (tde) <tde@openerp.com>
      4ef326de
  8. Dec 19, 2019
  9. Dec 20, 2019
    • Alexandre Kühn's avatar
      [FIX] web: tests: nextTick awaits render with requestAnimationFrame · 141b34f1
      Alexandre Kühn authored
      Revision on [1].
      
      Commit above made changes to test helper `nextTick()`, so that it
      waits for `window.nextAnimationFrame()` (shorten, 'rAF'). This was
      useful to wait for OWL rendering, since OWL renders on next animation
      frame.
      
      From a theoretical standpoint, the helper should wait at least as
      much time as before, as it adds either no slowdown (rAF is readily
      available), or a few milliseconds wait (rAF waits for next available
      animation frame).
      
      However, some old tests show non-deterministic behaviours, resulting
      to crashes [2]. It suggested, for some reasons, that `nextTick()` did
      not wait long enough for re-render... Which is surprising considering
      explanation above!
      
      Some of these tests have been fixed, assuming it was caused by un-
      guaranteed order of successive `setTimeout(0)` [3]. Unfortunately,
      this does not explain why it never crashed before the change on
      `nextTick()`...
      
      After investigation, we think that this behaviour comes from rAFs
      having their own task queue, which no longer guarantees that queued
      tasks happen after queued micro-tasks:
      
      When the requested next animation frame is readily available, the
      callback of `requestAnimationFrame()` is immediately called and waits
      for `setTimeout(0)`. The `setTimeout(0)` await is resolved before any
      other queued async micro-tasks, so that `nextTick()` is resolved
      sooner than expected. This would explain how `nextTick()` does not
      wait long enough for rendering from the loads of resolved Promises,
      even though there is a promise resolution after `setTimeout(0)`.
      
      This commit fixes the issue by moving the await `setTimeout(0)`
      before the rAF call, so that it correctly waits render from chain of
      resolved promises (since the `setTimeout(0)` is awaited in the same
      main task queue).
      
      [1] https://github.com/odoo/odoo/commit/b0941d19a07b08fabc64a284b58e57edc46203dd
      [2] http://runbot.odoo.com/runbot/build/771505 and http://runbot.odoo.com/runbot/build/752855
      [3] https://github.com/odoo/odoo/commit/6cbfdbce2d0f1b567b6a6d6f637fe2a476980acc
      
      
      
      closes odoo/odoo#42123
      
      Signed-off-by: default avatarVincentSchippefilt <VincentSchippefilt@users.noreply.github.com>
      141b34f1
    • Debauche Stéphane's avatar
      [FIX] mrp: delay_alert and manufacturing order · e4e838a0
      Debauche Stéphane authored
      
      When a manufacturing order was created through a stock rule, the `delay_alert`
      feature was broken. Indeed, we should store on the order the `delay_alert` value
      similar to what we do with the `propagate_date`, `propagate_date_minimum_delta`
      and `propagate_cancel` fields.
      
      We thus add the missing field and add the values in the multiple prepare methods.
      We also the missing values for `propagate_date_minimum_delta` and `propagate_date`
      in `_get_move_raw_values`.
      
      task-2154781
      
      closes odoo/odoo#42032
      
      Signed-off-by: default avatarSimon Lejeune (sle) <sle@openerp.com>
      e4e838a0
    • Debauche Stéphane's avatar
      [FIX] mrp: propagate_date and planned orders with a routing · 0dd19580
      Debauche Stéphane authored
       `propagate_date` enables the automatic rescheduling which could lead to hard to
       understand behavior if a manufacturing order is planned, i.e. if the work orders do
       have their leaves booked in the workcenter calendar. We thus disable the
       automatic rescheduling in this scenario.
      
      task-2154781
      0dd19580
    • Simon Lejeune's avatar
      [FIX] stock: date should be date_expected until done · efa1d7f3
      Simon Lejeune authored
      date help: "Move date: scheduled date until move is done, then date of actual move processing")
      As this behaviour is also wanted when the onchange mechanism do not work
      (ie in a manufacturing order move raw and finished), we move it to write.
      
      task-2154781
      efa1d7f3
    • Debauche Stéphane's avatar
      [REF] mrp: date_planned_start and date_planned_finished · 8944674d
      Debauche Stéphane authored
      Before this patch, writing on the `date_expected` field on the raw moves did not
      update the `date_planned_start` (but writing on `date_planned_start` did write on
      the raw AND finished moves `date_expected`).
      
      This proved to be wrong: having the same `date_expected` on both raw and finished
      moves did not make sense (the manufacturing order is not instantaneous). It also
      makes difficult to make the rescheduling work: the rescheduling is done on the stock
      moves and thus updates `date_expected` on the raw moves. If this information is not
      transmitted to the manufacturing order, we won't be able to continue the rescheduling
      on the finished moves (the idea is to update the raw moves which will update the
      date_planned_start which will update the date_planned_finished which will update the
      finished moves)
      
      To have a more sane system, the `date_planned_start` and `date_planned_finished` are
      computed (with an inverse) on the raw and finished moves `date_expected` (similar to
      what's done on the picking model). There's a tweak though: as `run_manufacture`
      creates first the order with a `date_planned_finished` and then confirm it (which will only
      create the finished move at this moment), there's no place to write `date_planned_finished`.
      The compute thus defaults on `date_deadline` which is stored and the finished moves
      will be created later on with this value.
      
      We implement the same logic `_onchange_date_planned_start` in `write` so that it doesn't
      only rely on the onchange mechanism and the rescheduling can work when changing the
      `date_expected` on a child mo for example.
      
      task-1970595
      8944674d
    • Siddarth Gajjar's avatar
      [IMP] hr_timesheet: rename Timer.js to timer_mixin.js. · 23a5e994
      Siddarth Gajjar authored
      - Before this commit file name is Timer.js which create issue in macOS
      due to non case-sensitive harddisk partition. So file renamed to timer_mixin.js
      
      closes #42232
      
      Signed-off-by: default avatarYannick Tivisse (yti) <yti@odoo.com>
      23a5e994
    • Jigar Patel's avatar
      [FIX] crm_livechat: convert leads from livechat discussions · 199af375
      Jigar Patel authored
      Fixes a7b89070
      
      opw-2078313
      
      X-Original-Commit: 8ab09cad
      199af375
  10. Dec 19, 2019
  11. Dec 18, 2019
  12. Dec 19, 2019
    • Victor Feyens's avatar
      [FIX] sale: variant attribute description partially duplicated. · 5015e718
      Victor Feyens authored
      
      Since the name updates are done in onchanges, the relational values
      may be newIds and therefore we have to use their _origin for comparisons.
      
      closes odoo/odoo#42217
      
      X-original-commit: 9c303bfd
      Signed-off-by: default avatarVictor Feyens (vfe) <vfe@odoo.com>
      5015e718
    • Damien Bouvy's avatar
      [FIX] web: color for calendar views without `color` attribute · febd360f
      Damien Bouvy authored
      
      The `color` attribute allows specifying a field by which the calendar
      view will color the event entries in the view.
      
      In views where this attribute is not defined, the event was instead
      given the `text-white` class, which rendered the event invisible in the
      calendar, save for a slight left-border.
      
      This commit just use the 1st color class by default in such cases,
      ensuring all events are visible.
      
      opw-2145652
      
      closes odoo/odoo#42200
      
      X-original-commit: 375b34be
      Signed-off-by: default avatarDamien Bouvy (dbo) <dbo@odoo.com>
      febd360f
    • Nicolas Lempereur's avatar
      [FIX] expression.py: avoid using TRUE_DOMAIN/FALSE_DOMAIN · adc49e76
      Nicolas Lempereur authored
      
      Ensure that expression.OR and expression.AND and some other
      expression.py methods do not propagate or rely on TRUE_DOMAIN and
      FALSE_DOMAIN that may be muted on some instance.
      
      For example, if we did:
      
        self.search(expression.OR([]))
      
      then in the search method we do something like:
      
        received_domain.append(('res_field', '=', False))
      
      before this commit, FALSE_DOMAIN would be altered for any succeeding code
      that try to use it in `[(0, '=', 1), ('res_field', '=', 'False')]`.
      
      Without the changeset, the added test would fail with:
      
          [(1, '=', 1), ('id', '=', 1)] != [(1, '=', 1)]
          [(0, '=', 1), ('id', '=', 1)] != [(0, '=', 1)]
          [(0, '=', 1), ('id', '=', 1)] != [(0, '=', 1)]
          [(1, '=', 1), ('id', '=', 1)] != [(1, '=', 1)]
          [(1, '=', 1), ('id', '=', 1)] != [(1, '=', 1)]
      
      note: another commit referenced in #41968 should make the TRUE_DOMAIN
      and FALSE_DOMAIN immutable.
      
      related to work on opw-2154448
      closes #42107
      
      closes odoo/odoo#42222
      
      X-original-commit: 303ce32e6ccd7432b96ffae545e4a6eced68ae84
      Signed-off-by: default avatarNicolas Lempereur (nle) <nle@odoo.com>
      adc49e76
    • Romain Derie's avatar
      [REF] web_editor, *: use the name of invisible snippets in the UI · 705b2faa
      Romain Derie authored
      * website, website_mass_mailing
      
      Instead of a custom string, use the name of the snippet when displaying
      an 'invisible' snippet in the 'invisible elements' section.
      
      This commit also fixes a font-awesome bug introduced with the library
      update revert.
      
      Part of https://github.com/odoo/odoo/pull/41789
      
      
      
      closes odoo/odoo#41789
      
      Signed-off-by: default avatarQuentin Smetz (qsm) <qsm@odoo.com>
      705b2faa
    • qsm-odoo's avatar
      [REF] web_editor, *: review invisible element click action · 2a0a0e52
      qsm-odoo authored
      * website, website_mass_mailing
      
      Instead of triggering an event on the invisible element when its related
      button in the left panel is clicked, the invisible element's options are
      now toggled (shown if were hidden and hidden if were shown). To do that
      the new 'onTargetShow' and 'onTargetHide' methods are called, and the
      appropriate action can be done there.
      
      Those two new methods are also automatically called in other cases:
      - When dropped in the page, after onBuild, 'onTargetShow' is called
          for any snippet.
      - Before cleanForSave: 'onTargetHide' is called for snippets with the
          'o_snippet_invisible' and 'onTargetShow' is called for the others.
      
      In case the element visibility should be toggled another way (like the
      close button of a modal), the option can trigger_up an event named
      'snippet_option_visibility_update' with a 'show' parameter so that the
      the UI is updated accordingly (and so that the options are hidden if
      necessary).
      
      Part of https://github.com/odoo/odoo/pull/41789
      2a0a0e52
    • qsm-odoo's avatar
      [REF] web_editor: regroup snippets menu mutexes · 32e294e7
      qsm-odoo authored
      Snippet enabling operations and snippet edition operations were mutexed
      individually. In fact it simplifies the code and it is probably better
      to chain all snippet operations, through an unique mutex.
      
      Part of https://github.com/odoo/odoo/pull/41789
      32e294e7
    • qsm-odoo's avatar
    • qsm-odoo's avatar
    • qsm-odoo's avatar
      [REF] web_editor: remove useless files · 74419dc8
      qsm-odoo authored
      Commit https://github.com/odoo/odoo/commit/eb0ea8efbe932c140302e9f8da33a839bcd73146
      removed the use of the 'rte' and 'rte_inline' without removing the tests
      themselves. They apparently cannot work anymore as using routes which
      do not exist anymore.
      
      This commit removes the test files.
      
      Part of https://github.com/odoo/odoo/pull/41789
      74419dc8
    • Adrien Dieudonne's avatar
      [FIX] web: too small tap area for optional columns dropdown on mobile · 4e2fb178
      Adrien Dieudonne authored
      Before this commit, users encountered some difficulties to tap/click
      on the "optional columns" dropdown in list views.
      This issue only occured on Chrome: rather annoying to use the mobile app.
      
      "width: 10px" was used in inline list view but didn't have any sense
      in the other case. Worse still, Chrome miscalculated the size of the
      clickable area by a smaller one.
      This is due to the fact that we add some padding that exceed 10px.
      See:
      https://github.com/odoo/enterprise/commit/2f1320557ec67a741201d73a23a9782ec8f9b3bb#
      
      
      
      opw-2071605
      
      closes odoo/odoo#42210
      
      X-original-commit: 28b6e9c9
      Signed-off-by: default avatarAdrien Dieudonné (adr) <adr@odoo.com>
      4e2fb178
    • Pratima Gupta's avatar
      [FIX] mrp: delivery moves not cancelled · d255bdbf
      Pratima Gupta authored
      
      Before this -
      If we have follwing configuration -
      Manufacturing -> Propagate Cancel -> True
      Buy -> Propagate Cancel -> True
      
      * BOM of a Car -
      	1) Component 1 -> Iron (MTO & Buy)
      
      Now create a SO of product Car and confirm it.
      It will create a MO (Car) and then PO (Iron).
      Now if PO is cancelled, it will cancel its
      move_dest_ids and on change of it MO will be
      cancelled but delivery move will remain ongoing.
      
      When action cancel is called on a move raw, it will
      check if the production order is also cancelled.
      If the MO is cancel, in this case cancel also its
      move finished.
      
      Task-2117832
      
      closes odoo/odoo#42209
      
      X-original-commit: 9522e51a
      Signed-off-by: default avatarArnold Moyaux <amoyaux@users.noreply.github.com>
      d255bdbf
    • Odoo's Mergebot's avatar
      [MERGE] hr_timesheet: Improve Timer, Access Rights and Validation · 7dfc7925
      Odoo's Mergebot authored
      
      Access rights
      =============
      
      Purpose
      -------
      
      Currently, the lowest access right level for Timesheets allows a user
      to see the timesheets from all employees. Some companies do not want
      to have this information shared.
      
      As we already have three levels of access rights, creating a new one
      would be too much. Instead, we are using this opportunity to
      clean/simplify the current access right levels.
      
      Specification
      -------------
      
      Remove the current access rights and replace them with the following:
      - 'See own timesheets' the user can:
          - read/write/create/delete his own timesheets only
          - cannot timesheet on projects whose Visibility is set on
            'Invited employees' if the user is not a follower
          - see the 'My Timesheets' and the 'Timesheet App' menus
      - 'See all timesheets' the user can:
          - read/write/create/delete all timesheets
          - cannot see the Timesheets of Projects whose Visibility is set
            on 'Invited employees' if the user is not a follower
          - see the 'My Timesheets' + 'All Timesheets' + 'Timesheet App' +
            'To Validate' menus
          - validate the timesheets of whom he is the 'Timesheet
            Responsible' or the 'Manager'
      - 'Administrator' the user can:
          - read/write/create/delete all timesheets
          - see all menus
          - validate the Timesheets of all employees
      - Write tests
      
      New Validation Process
      ======================
      
      Purpose
      -------
      
      Currently, timesheets are validated by employees as a whole. However,
      as a manager, it is difficult to evaluate the timesheets of an
      employee for projects you know nothing about. Therefore, it would make
      more sense for a manager to validate the timesheets of his projects
      and to leave the rest to the other managers.
      
      In addition, having a date on the employees leaves room for error and
      performance issues, so we are introducing a new checkbox at the
      timesheet level.
      
      Specification
      -------------
      
      Remove the 'Timesheets Validation Date' field on the employee
      - replace it with a 'Timesheet Validated' checkbox (hidden field) on
        the timesheet entry
          - By default, this field is set to false
          - Once the manager validates the timesheets, switch the field to
            true
      - Filtering on 'Validated' timesheets should display timesheets for
        which 'Timesheet Validated' is true
      - Filtering on 'Non-Validated' timesheets should display timesheets
        for which 'Timesheet Validated' is false
      
      Rename the title of the validation menus into:
      - To Validate > Last Weeks -> Timesheets from Last Week to Validate
      - To Validate > Last Month -> Timesheets from Last Month to Validate
      
      Grid view: display projects on which the user timesheeted in the
      past 30 days (group_expand), or the employees who timesheeted in the
      past 30 days for the 'To Validate' menus)
      
      Open the 'To Validate' menus on the oldest non-validated timesheet
      you can find.
      
      Clicking on 'Validate' should validate all the timesheets displayed
      on the screen. List all the elements displayed in the view based on
      the group by applied in the 'Validate the timesheets' modal.
      
      When validating timesheets, bypass timesheets that were already
      validated in the past in order to avoid performance issues
      
      Timer list
      ==========
      
      Purpose
      -------
      
      Have an overview of the timesheets you need to do during the day.
      Easily track time spent on tasks using the timer instead of having to
      write down somewhere at what time you started an activity. Allow more
      flexibility if an activity if interrupted by another one (so you
      don't need to do mental arithmetic to determine how much time the
      first activity took substracted by the time spent on the second
      activity).
      
      Specification
      -------------
      
      - Move the time from fsm to hr_timesheet.
      - Add fa-play-circle and fa-stop-circle icons in the 'My Timesheets'
        menu:
          - on the left of the 'Duration' field in the list view
          - on the top right corner of the kanban card in the kanban view
          - on the right of the first column in the grid view
      - Display these icons
          - for non-validated timesheets only
          - if the Encoding Unit is Hours
      - Clicking on the play button should start and display the timer and
         switch to the stop icon
      - Clicking on the stop button should halt and stop displaying the
        timer and switch to the play icon
      - While the timer is running, the 'Duration' field should not
        be editable
      - Only one timer can run at the same time. If the user clicks on the
        start button of timesheet B while the timer is running for
        timesheet A, timesheet B should start and timesheet A should stop.
      
      Time selection when invoicing
      =============================
      
      Purpose
      -------
      
      Allow selecting a timeframe to invoice when the user is invoicing on
      a periodical basis. For instance, the user invoices each time at the
      end of the month. For some reason (he got sick, there was a bank
      holiday...), he only invoices of the 4th of the following month.
      Now the timesheets that are about to be invoiced include some that
      were recorded in the meantime.
      
      Specification
      -------------
      
      - Add an 'Invoice timesheets up to mm/dd/yyyy' field on the Invoice
        Creation modal
          - display this field only when creating an Invoice for a Service
            whose Invoicing Policy is on 'Timesheets on tasks'
          - not required
          - Set today's date by default
          - if this field is set, the quantity to invoice should only
            include the not yet invoiced (and validated) timesheets up to
            this date (included)
          - if this field is not set, include all not yet invoiced (and
            validated) timesheets without distinction.
          - Add the following tooltip: Only timesheets not yet invoiced
            (and validated, if applicable) up to this date included will be
            invoiced. If no date is indicated, all timesheets not yet
            invoiced (and validated, if applicable) will be invoiced
            without distinction.
      
      Miscellaneous
      =============
      
      Purpose
      -------
      
      Small usability improvements.
      
      - Move 'Create SO from Task' to sale_timesheet -> Means Enterprise to
        Community).
      - Add the pivot view to the 'All Timesheets' menu
      - Add the 'Today' button on the grid view of all menus (see the
        Reporting > Timesheets by Project menu for reference)
      
      closes odoo/odoo#40495
      
      Taskid: 2088586
      Signed-off-by: default avatarYannick Tivisse (yti) <yti@odoo.com>
      Co-authored-by: default avatarLucas Lefèvre <lul@odoo.com>
      Co-authored-by: default avatarYannick Tivisse <yti@odoo.com>
      Unverified
      7dfc7925
    • Yannick Tivisse's avatar
      1bf2bfd2
    • Robin Heinz's avatar
      [IMP] point_of_sale: Show customer only and increase customer ranking. · ffd2502f
      Robin Heinz authored
      
      Following the removing of the vendor and customer field, when we wanted to display customer in the back end, we saw all. We added a default filter when clicking on the menu button that displays only customer with a customer rank higher than 0.
      We also increase their customer ranks everytime they make an order in the front end.
      
      closes odoo/odoo#41769
      
      Task-id: 2092483
      Signed-off-by: default avatarpimodoo <pimodoo@users.noreply.github.com>
      ffd2502f
Loading