1. 17 Oct, 2019 1 commit
    • Arnaud Fontaine's avatar
      Solver: Solving two divergences with two Solvers on different properties... · c063c8d0
      Arnaud Fontaine authored
      Solver: Solving two divergences with two Solvers on different properties should not be considered a conflict.
      
      Use case:
        * Property 1: Accept Solver on 'title'.
        * Property 2: Adopt Solver on 'start_date'.
      => This was not implemented and raising an error as AppropriateUIMessage(whatever) is not defined.
      
      movement_dict:
        {<Simulation Movement at /erp5/portal_simulation/133959/1/1/1>: {<Solver Type at /erp5/portal_solvers/Adopt Solver>: [(('tested_property_list',
                                                                                                                                ['title']),)],
                                                                         <Solver Type at /erp5/portal_solvers/Accept Solver>: [(('tested_property_list',
                                                                                                                                 ['stop_date']),),
                                                                                                                               (('tested_property_list',
                                                                                                                                 ['start_date']),)]}}
      self: <Solver Type at /erp5/portal_solvers/Adopt Solver>
        self.getTestedProperty() is None
      solver: <Solver Type at /erp5/portal_solvers/Accept Solver>
        solver.getTestedProperty() is None
      c063c8d0
  2. 04 Jul, 2019 2 commits
  3. 03 Jul, 2019 2 commits
    • Arnaud Fontaine's avatar
      erp5_simulation_fast_input: Solve Divergences dialog: Display all divergences... · 41ce6297
      Arnaud Fontaine authored
      erp5_simulation_fast_input: Solve Divergences dialog: Display all divergences in a single ListBox page.
      
      This dialog and its JS gadget does not handle multiple pages ListBox (because
      gadget_solve_divergence_dialog.js assumes that the view is the last part of the URL)
      and this is not actually needed (customer seldom goes over the previous limit
      to 20 anyway).
      
      How to reproduce:
        1. Create >20 divergences (20 lines per page used to be displayed).
        2. Go to Solve Divergences dialog:
           => gadget_solve_divergence_dialog.js:
              -> location.pathname == /erp5/purchase_order_module/42/Delivery_solveDivergenceAction.
                 -> basedir=/erp5/purchase_order_module/42.
                    => /erp5/purchase_order_module/42/Delivery_getSolveDivergenceDialogParameterFormBox XHR'ed: OK.
        3. Go to any other ListBox page:
           => gadget_solve_divergence_dialog.js:
              -> location.pathname == /erp5/purchase_order_module/42.
                 -> basedir=/erp5/purchase_order_module.
                    => /erp5/purchase_order_module/Delivery_getSolveDivergenceDialogParameterFormBox XHR'ed: NOK:
                       [...]
                         Module script, line 4, in Delivery_getSolveDivergenceDialogParameterFormBox
                           - <PythonScript at /erp5/Delivery_getSolveDivergenceDialogParameterFormBox used for /erp5/purchase_order_module>
                           - Line 4
                           solver_process = context.getSolverValueList()[-1]
                       AttributeError: getSolverValueList
      41ce6297
    • Arnaud Fontaine's avatar
      erp5_simulation_fast_input: Solve Divergences dialog: Handle error when... · d1ad841d
      Arnaud Fontaine authored
      erp5_simulation_fast_input: Solve Divergences dialog: Handle error when XHR'ing Solver configuration.
      
      When user clicks on the radio button to Accept Decision for example,
      Delivery_getSolveDivergenceDialogParameterFormBox is called (XHR)
      and when it failed, the 'Solve Divergences' button was disappearing
      and nothing was displayed to end-user.
      d1ad841d
  4. 23 Jun, 2017 2 commits
    • Yusei Tahara's avatar
      SolverProcess may not be 'solved' when there are several 'solve()' Activities... · 5effdc8f
      Yusei Tahara authored
      SolverProcess may not be 'solved' when there are several 'solve()' Activities executed in parallel (#KMS-1126).
      
        1. Two POLs diverge.
           => Solver Process is created ('draft').
        2. User 'Accept Decision' (Accept Solver) on all of them:
           1) Two Accept Solvers are created in the Solver Process, one per divergence.
           2) SolverProcess.solve() is called, on each Accept Solver:
              1/ AcceptSolver.startSolving() ()
                 => Through solver_workflow 'Script (after)': SolverProcess.startSolving()
                    => Solver Process is in 'solving' state.
              2/ AcceptSolver.activate().solve()
                 => One solve() Activity per Accept Solver.
                    => AcceptSolver.succeed()
                       => Through solver_workflow 'Script (after)': SolverProcess.succeed()
      
      The last step, 'SolverProcess.succeed()', will only be executed if and only if
      all the other Accept Solver of the Solver Process are in 'solved' state. However,
      if both Activities are executed in parallel, each Activity does not see the result
      of the other, and thus the other Accept Solver is still in 'solving' state. At
      the end the Solver Process may stay in 'solving' state.
      
      Thus try to update solver process workflow state after target solver finished its job
      by activity. Also try to update solver process workflow state when a new divergence occurs
      and if solver process is still in solving state.
      5effdc8f
    • Yusei Tahara's avatar
      Revert "SolverProcess may not be 'solved' when there are several 'solve()'... · 072d7d55
      Yusei Tahara authored
      Revert "SolverProcess may not be 'solved' when there are several 'solve()' Activities executed in parallel (#KMS-1126)."
      
      The commit did not solve the problem. solver_process_workflow is needed to set appropriate permissions to Solver Process.
      
      This reverts commit 509b2ca4.
      072d7d55
  5. 15 Jun, 2017 1 commit
    • Arnaud Fontaine's avatar
      SolverProcess may not be 'solved' when there are several 'solve()' Activities... · 509b2ca4
      Arnaud Fontaine authored
      SolverProcess may not be 'solved' when there are several 'solve()' Activities executed in parallel (#KMS-1126).
      
        1. Two POLs diverge.
           => Solver Process is created ('draft').
        2. User 'Accept Decision' (Accept Solver) on all of them:
           1) Two Accept Solvers are created in the Solver Process, one per divergence.
           2) SolverProcess.solve() is called, on each Accept Solver:
              1/ AcceptSolver.startSolving() ()
                 => Through solver_workflow 'Script (after)': SolverProcess.startSolving()
                    => Solver Process is in 'solving' state.
              2/ AcceptSolver.activate().solve()
                 => One solve() Activity per Accept Solver.
                    => AcceptSolver.succeed()
                       => Through solver_workflow 'Script (after)': SolverProcess.succeed()
      
      The last step, 'SolverProcess.succeed()', will only be executed if and only if
      all the other Accept Solver of the Solver Process are in 'solved' state. However,
      if both Activities are executed in parallel, each Activity does not see the result
      of the other, and thus the other Accept Solver is still in 'solving' state. At
      the end the Solver Process may stay in 'solving' state.
      
      Considering that transitions of solver_process_workflow are *only* done through
      solver_workflow and thus depend on the states of its '* Solver' states, it's better
      to just remove solver_process_workflow to avoid concurrency problems and also because
      it's not really used anyway.
      509b2ca4
  6. 11 May, 2017 1 commit
    • Arnaud Fontaine's avatar
      Prevent 'draft' Solver Process from being created when there is already a 'solving' one (#KH-1107). · 93e5f537
      Arnaud Fontaine authored
        1. 'Solve Divergences' action:
           => Display Delivery_viewSolveDivergenceDialog.listbox:
              -> Delivery_getSolverDecisionList
                 -> Delivery_getSolverProcess => create Solver Process in 'draft' state and build Solver Decisions
        2. Clicking 'Update' button updates Solver Decisions.
        3. Click 'Solve Divergences' button after either 'Adopt Prevision' or 'Accept Decision'.
           => SolverProcess.solve():
              Solver Process transit to 'solving' state and 'solve' Activity is created.
      
      Before this Activity is executed, user can still select 'Solve Divergences'
      action and this will create another 'Solver Process' as the current one is not
      in 'draft' state anymore. Moreover, another user can still 'Adopt Prevision'
      (while the first user selected 'Accept Decision') and this will be actually be
      applied despite the first user choice.
      
      Instead, create Solver Process when transiting to 'diverged' state and do not
      display 'Solve Divergences' button nor allow access to 'Solve Divergences
      Dialog' (Delivery_viewSolveDivergenceDialog) if there is a Solver Process in
      'solving' state.
      93e5f537
  7. 20 Feb, 2017 1 commit
    • Arnaud Fontaine's avatar
      Portal Type as Classes: Fix memory leak: reset erp5.* classes were never GC (#20170126-19C38D8). · 73b747dd
      Arnaud Fontaine authored
      zope.{interface,component} implement Interfaces through __implements__,
      __implemented__ (both implementedBy instances) and __provides__ (ClassProvides
      instance) attributes set on the class itself through implementedByFallback
      (zope.interface.declarations).
      
      However, this implementation creates circular references by referencing the
      class itself and thus erp5.* classes (and all its Accessors instances) were
      never GC even after a reset.
      
      When running testXHTML and installing the Unit Tests bt5s:
        * After 10 resets:  21MB leak (~  7% of Zope process USS).
        * After 20 resets:  70MB leak (~ 18% of Zope process USS).
        * After 28 resets: 122MB leak (~ 26% of Zope process USS).
      73b747dd
  8. 10 Nov, 2016 1 commit
    • Arnaud Fontaine's avatar
      Backport: Base_callDialogMethod: Do not redirect when form has a password field. · a0185283
      Arnaud Fontaine authored
      If it is the case *and* the action script does not redirect, the password will be
      in user's browser history.
      There can be two different reasons to not redirect:
      - not following the API (ie, intentionally not redirecting)
      - letting an exception reach ZPublisher
      Also, if the non-redirection causes an HTML page to be rendered, resources
      loaded by that page will have a referrer containing the password, leaking it
      to potentially foreign servers.
      a0185283
  9. 04 Nov, 2016 1 commit
  10. 19 Oct, 2016 1 commit
    • Arnaud Fontaine's avatar
      Backport 6fd21826 ListBox fix from master branch (#KMS-819). · da78761d
      Arnaud Fontaine authored
      ListBox: Navigation methods should not be created when rendering ListBox (#20161014-741678).
      
      These methods were generated when rendering the ListBox and with the id
      of the ListBox in their name. However, a customer reported the following
      problem on Accounting Periods ListBox:
      
        1. Display Accounting Period ListBox on ZEO-1.
             => The ListBox will be rendered and 'listbox_period_list_*' methods will be generated on ZEO-1.
        2.  Click on 'Next Page' button and the user is redirect to ZEO-2 where the ListBox has never been generated.
             => The method does not exist yet and thus a 404 error is raised.
      
      Instead of having one method per ListBox ID, only one is now created (eg
      listbox_setPage() for SelectionTool.setPage()) at Zope startup and the
      ListBox ID previously defined in the method name is now defined in the
      value attributes of the buttons.
      da78761d
  11. 06 Sep, 2016 1 commit
  12. 21 Jul, 2016 1 commit
  13. 20 Jul, 2016 1 commit
  14. 07 Jul, 2016 1 commit
  15. 28 Mar, 2016 1 commit
  16. 23 Mar, 2016 1 commit
  17. 04 Mar, 2016 1 commit
  18. 02 Mar, 2016 2 commits
  19. 01 Feb, 2016 2 commits
  20. 28 Jan, 2016 1 commit
    • Arnaud Fontaine's avatar
      erp5_core: Fix ListMode view for ListBox with several tabs. · fa3caa00
      Arnaud Fontaine authored
      1. On Tab1, from PurchaseSupply_view, click on 'Purchase Supply Lines':
         Base_viewListMode??proxy_form_id=PurchaseSupply_view&proxy_field_id=listbox
      
         This Python Script initialise 'list_mode_proxy_selection' with the
         above 2 GET parameters and then displays PurchaseSupply_view.listbox
         indirectly but current Form is Base_viewListModeRenderer.
      
      2. On Tab2, from SaleSupply_view, click on 'Sale Supply Lines':
         Base_viewListMode?proxy_form_id=SaleSupply_view&proxy_field_id=listbox
      
         This Python Script initialise 'list_mode_proxy_selection' with the
         above 2 GET parameters and then displays SaleSupply_view.listbox
         indirectly but current Form is Base_viewListModeRenderer.
      
      3. On Tab1, filter Purchase Supply Lines.
      
         As proxy_form_id and proxy_field_id are not given, then
         Base_viewListModeRender fallbacks on 'list_mode_proxy_selection'
         values to find out the Form ID to be called and wrongly display
         SaleSupply_view.listbox (2.).
      fa3caa00
  21. 19 Jan, 2016 1 commit
  22. 15 Dec, 2015 1 commit
  23. 14 Dec, 2015 2 commits
  24. 08 Dec, 2015 1 commit
    • Arnaud Fontaine's avatar
      erp5_simulation: Display Divergence dialog even if there is nothing to solve... · c84f39af
      Arnaud Fontaine authored
      erp5_simulation: Display Divergence dialog even if there is nothing to solve (same as legacy Simulation Dialog).
      
      This fixes the following Site Error when there is no Divergence to solve:
        AttributeError: 'NoneType' object has no attribute 'SolverProcess_getSolverDecisionList'
      
      This may happen if user selects 'Solve Divergence' Action and solve
      Divergences, then immediately goes back and selects again this action
      whereas there is actually no Divergence to solve.
      c84f39af
  25. 07 Dec, 2015 1 commit
  26. 02 Dec, 2015 2 commits
    • Arnaud Fontaine's avatar
      Revert "simulation: allow to use solve divergence dialog when state is calculating" · 71f4f649
      Arnaud Fontaine authored
      This reverts commit 5fac6732:
      
        When the Divergence is solved and user goes back to the main view, the
        button is visible but when user clicks ont it and if Activities have
        been processed in the meantime, this will raise an AttributeError
        because newSolverProcess returns None and there is nothing to display.
      
        This happens even when adding Delivery_isDivergent() as a guard
        because it still returns True if Activities are running in background.
      71f4f649
    • Arnaud Fontaine's avatar
      erp5_pdm: Provide a count_method on Resource Modules by default. · 50e4092c
      Arnaud Fontaine authored
      count_method was removed from Base_viewFieldLibrary/my_view_mode_module_listbox
      used by Resource Module ListBox (76282344) for performance issues when
      countFolder is called with a Module containing > ~50k documents but this
      should not be relevant for Resource Modules.
      50e4092c
  27. 25 Nov, 2015 4 commits
  28. 19 Nov, 2015 3 commits