• Julien Muchembled's avatar
    ERP5Form: FormBox improvements · 1893eb14
    Julien Muchembled authored
    A Form is rendered by assuming the REQUEST is clean and first set 'here' as
    the context. Then there may be listboxes with rely on 'here' and set 'cell'
    temporarily. At last, for easier configuration of listbox fields, 'cell' has
    precedence over 'here' when rendering (in particular since
    commit 4fa84233).
    
    Based on this, the only sane solution is to
    - clean up the REQUEST (remove 'here' and 'cell')
    - render the FormBox in the new context (which sets 'here'): inside a ListBox,
      the context is the cell
    - restore 'here' and 'cell' as they were
    
    Which allows FormBox/ListBox inside FormBox/ListBox, recursively
    (but obviously no ListBox inside ListBox).
    
    The previous code didn't work in the following case:
    - a Order Line and Packing List Line having an identical tab
    - the left pane for Order Line information
    - the other for Packing List Line information
      (-> empty when there's no related PL)
    - a listbox (with subobjects of the PL line)
    Which is implemented as follows:
    - a Form for the left pane
    - a Form for the Packing List Line, with a FormBox
      (to display Order information) and a ListBox
    - the Form for the Order Line only has a FormBox, that uses 1 of the 2 other
      Forms depending on the presence of a PL (if there's one, it's rendered in the
      context of the PL)
    -> FormBox(FormBox, ListBox)
    
    As you can see, FormBox is used here to factorize forms. Without this patch:
    - the outter FormBox crashed on `del REQUEST.other['cell']`
    - the inner FormBox was rendered with a wrong 'cell'
    
    Another change is to pass the field & REQUEST to the context method.
    1893eb14
FormBox.py 7.04 KB