1. 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
  2. 07 Dec, 2015 1 commit
  3. 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
  4. 25 Nov, 2015 4 commits
  5. 19 Nov, 2015 4 commits
  6. 18 Nov, 2015 6 commits
    • Arnaud Fontaine's avatar
      simulation: Add getTestedPropertyList() is still widely used so define it for compatibility sake. · 899b05c7
      Arnaud Fontaine authored
      Followup of: "simulation: improve equivalence testers explanations messages".
      899b05c7
    • Arnaud Fontaine's avatar
      simulation: Define getTestedProperty() on mixin rather than subclasses. · 035530d4
      Arnaud Fontaine authored
      This makes more sense as all Tester inherits from EquivalenceTesterMixin,
      even project-specific EquivalenceTester classes.
      
      Followup of: "simulation: improve equivalence testers explanations messages".
      035530d4
    • Arnaud Fontaine's avatar
      Fix conflicts between 2a188797 and df04eb69. · b0ff7ee6
      Arnaud Fontaine authored
      * 2a188797: "simulation: improve equivalence testers explanations messages"
      * df04eb69: "Implement delivery.getQuantity() == 0."
      b0ff7ee6
    • Sebastien Robin's avatar
      simulation: improve equivalence testers explanations messages (part 2) · 50b6baf3
      Sebastien Robin authored
      Default values for tested_property and tested_property_title must not
      be of type tuple any more since theses properties are no longer multi
      valued
      50b6baf3
    • Sebastien Robin's avatar
      simulation: improve equivalence testers explanations messages · 2a188797
      Sebastien Robin authored
      With latest simulation, the explanation given to user when solving a
      divergence was not good enough :
      - Property ids were displayed without possibility to display
        business word (like displaying 'stop_date' instead of
        'Delivery Date'
      - Some message was displayed in the solve divergence dialog whatever
        was the equivalence tester behind. Therefore, customizations of
        messages made a equivalence tester level were not displayed to user
      
      Therefore, following was done:
      - in solve divergence dialog, include the message generated by the
        equivalence tester
      - use tested_property_title to allow using business words to describe
        properties having divergence
      - most equivalence testers are written in a way to evaluate divergence
        on a single property. To have better UI configuration of such equivalence
        testers, change tested_property and tested_property_title properties
        type from "lines" to "string". This required to add some backward
        compatible code.
      - use Variation Divergence Tester to show a case of an equivalence
        tester using different properties. For this, add a property sheet
        dedicated to multi properties equivalence testers
      - update propertysheets to allow translating tested_property_title
      
      Conflicts:
      	product/ERP5/Document/DateTimeEquivalenceTester.py
      2a188797
    • Arnaud Fontaine's avatar
      08d6d578
  7. 17 Nov, 2015 2 commits
  8. 16 Nov, 2015 2 commits
  9. 10 Nov, 2015 7 commits
  10. 09 Nov, 2015 11 commits
    • Arnaud Fontaine's avatar
      BusinessTemplate: Reset ZODB Components if a Component version_priority is added. · 46f0763a
      Arnaud Fontaine authored
      This should have been added and handles twisted use cases such as:
        1. Install bt5 with ZODB Component C1 using version_priority V1.
        2. Install another bt5 adding version_priority V1.
        3. Install Portal Type using C1 as type_class.
        => No reset was done after 2., so C1 was not added to ZODB Component
           registry_dict (__registry_dict) and thus ignored.
      46f0763a
    • Arnaud Fontaine's avatar
      ZODB Components: Fix deadlock between import lock and aq_method_lock. · 11456c69
      Arnaud Fontaine authored
      This only happens when using ZEO (see source code comments).
      
      Steps to reproduce:
        1. Edit a ZODB Component in one tab.
        2. At the same time, run Unit Tests in another tab.
      
      Backtrace:
      
        # ThreadID: 140153540167424
        File: "eggs/Zope2-2.13.22-py2.7.egg/ZServer/PubCore/ZServerPublisher.py", line 31, in __init__
          response=b)
        File: "eggs/Zope2-2.13.22-py2.7.egg/ZPublisher/Publish.py", line 455, in publish_module
          environ, debug, request, response)
        File: "eggs/Zope2-2.13.22-py2.7.egg/ZPublisher/Publish.py", line 249, in publish_module_standard
          response = publish(request, module_name, after_list, debug=debug)
        File: "parts/erp5/Products/Localizer/patches.py", line 84, in new_publish
          x = zope_publish(request, module_name, after_list, debug)
        File: "eggs/Zope2-2.13.22-py2.7.egg/ZPublisher/Publish.py", line 138, in publish
          request, bind=1)
        File: "eggs/Zope2-2.13.22-py2.7.egg/ZPublisher/mapply.py", line 44, in mapply
          f, count = zope.publisher.publish.unwrapMethod(object)
        File: "eggs/zope.publisher-3.12.6-py2.7.egg/zope/publisher/publish.py", line 46, in unwrapMethod
          elif getattr(unwrapped, 'func_code', None) is not None:
        File: "eggs/Products.ExternalMethod-2.13.0-py2.7.egg/Products/ExternalMethod/ExternalMethod.py", line 106, in <lambda>
          func_code = ComputedAttribute(lambda self: self.getFuncCode())
        File: "eggs/Products.ExternalMethod-2.13.0-py2.7.egg/Products/ExternalMethod/ExternalMethod.py", line 190, in getFuncCode
          self._v_f = self.getFunction()
        File: "parts/erp5/Products/ERP5Type/patches/ExternalMethod.py", line 29, in getFunction
          level=0)
        File: "parts/erp5/Products/ERP5Type/dynamic/component_package.py", line 407, in load_module
          with aq_method_lock:
        File: "parts/python2.7/lib/python2.7/threading.py", line 174, in acquire
          rc = self.__block.acquire(blocking)
      
        => 1. Acquire Import lock in getFunction() (ZODB Component import)
           2. Try to acquire aq_method_lock
      
        # ThreadID: 140153468495616
        File: "eggs/Zope2-2.13.22-py2.7.egg/ZServer/PubCore/ZServerPublisher.py", line 31, in __init__
          response=b)
        File: "eggs/Zope2-2.13.22-py2.7.egg/ZPublisher/Publish.py", line 455, in publish_module
          environ, debug, request, response)
        File: "eggs/Zope2-2.13.22-py2.7.egg/ZPublisher/Publish.py", line 249, in publish_module_standard
          response = publish(request, module_name, after_list, debug=debug)
        File: "parts/erp5/Products/Localizer/patches.py", line 84, in new_publish
          x = zope_publish(request, module_name, after_list, debug)
        File: "eggs/Zope2-2.13.22-py2.7.egg/ZPublisher/Publish.py", line 138, in publish
          request, bind=1)
        File: "eggs/Zope2-2.13.22-py2.7.egg/ZPublisher/mapply.py", line 77, in mapply
          if debug is not None: return debug(object,args,context)
        File: "eggs/Zope2-2.13.22-py2.7.egg/ZPublisher/Publish.py", line 48, in call_object
          result=apply(object,args) # Type s<cr> to step into published object.
        File: "parts/erp5/Products/TimerService/TimerService.py", line 90, in process_timer
          subscriptions.append(self.unrestrictedTraverse(path))
        File: "eggs/Zope2-2.13.22-py2.7.egg/OFS/Traversable.py", line 249, in unrestrictedTraverse
          if getattr(aq_base(obj), name, _marker) is not _marker:
        File: "parts/erp5/Products/ERP5Type/dynamic/lazy_class.py", line 107, in __getattribute__
          self.__class__.loadClass()
        File: "parts/erp5/Products/ERP5Type/dynamic/lazy_class.py", line 326, in loadClass
          class_definition = generatePortalTypeClass(site, portal_type)
        File: "parts/erp5/Products/ERP5Type/dynamic/portal_type_class.py", line 143, in generatePortalTypeClass
          type_class = portal_type.getTypeClass()
        File: "eggs/ZODB3-3.10.5+slapospatched001-py2.7-linux-x86_64.egg/ZODB/Connection.py", line 860, in setstate
          self._setstate(obj)
        File: "eggs/ZODB3-3.10.5+slapospatched001-py2.7-linux-x86_64.egg/ZODB/Connection.py", line 914, in _setstate
          self._reader.setGhostState(obj, p)
        File: "eggs/ZODB3-3.10.5+slapospatched001-py2.7-linux-x86_64.egg/ZODB/serialize.py", line 612, in setGhostState
          state = self.getState(pickle)
        File: "eggs/ZODB3-3.10.5+slapospatched001-py2.7-linux-x86_64.egg/ZODB/serialize.py", line 604, in getState
          unpickler.load() # skip the class metadata
        File: "eggs/ZODB3-3.10.5+slapospatched001-py2.7-linux-x86_64.egg/ZODB/serialize.py", line 474, in find_global
          return factory(conn, modulename, name)
        File: "eggs/Zope2-2.13.22-py2.7.egg/Zope2/App/ClassFactory.py", line 21, in ClassFactory
          m=__import__(module, _globals, _globals, _silly)
      
        => 1. Acquire aq_method_lock (generatePortalTypeClass())
           2. Try to import module and acquire Import lock
      11456c69
    • Arnaud Fontaine's avatar
      22fea7d8
    • Arnaud Fontaine's avatar
      erp5_trade: Fix Business Process trade_phase field. · 4d188a69
      Arnaud Fontaine authored
      As there may be several trade_phase which could be set on a Trade Model
      Path, all of them should be displayed in ListBox and not only the first
      one.
      4d188a69
    • Arnaud Fontaine's avatar
    • Arnaud Fontaine's avatar
      811970c3
    • Romain Courteaud's avatar
    • Romain Courteaud's avatar
      Revert "erp5_web_renderjs_ui: field_json.page is added for listbox configuration." · 079de6ec
      Romain Courteaud authored
      This reverts commit d6b94272.
      
      Listbox navigation was broken because of this change.
      079de6ec
    • Boris Kocherov's avatar
    • Boris Kocherov's avatar
      erp5_web_renderjs_ui: field_json.page is added for listbox configuration. · d6b94272
      Boris Kocherov authored
      field_json.page is used as a selection click action
      d6b94272
    • Boris Kocherov's avatar
      removal of unused code · 906d83a5
      Boris Kocherov authored
      906d83a5