Skip to Content
Menu
Dette spørgsmål er blevet anmeldt
2273 Visninger

Hi guys, 
I'm a newbies and I work on a project which manage document of an establishment.
Each document need to follow a workflow based on many steps until every step have been passed, the document will be classified as archived.
Each step has their own fields and in edit form, they will be shown and user can put value.
I've seen that in the odoo's version i use (i work with version 16), workflow) is not supported anymore, so i need to create a custom process.
I use statusbar widget to list all steps that must be passed and a button to pass to the next step.
The main problem is, how can i show in form view, every field of every steps the document have passed. 
For example, a document A is on step 1, under the document's commons informations, all field for the step 1 must be shown, the user fill all step 1's field and click on next button, the document is now on step 2 and then, fields for step 2 are now shown under step 1's field and so on for every step.
Here are models I use : 


class StepModel(models.Model):
_name = "module\.document\.step"
\ \ \ \ _description\ =\ "Document's\ Step"
\ \ \ \ _order\ =\ "position\ asc"

\ \ \ \ name\ =\ fields\.Char\("Name"\)
\ \ \ \ position\ =\ fields\.Integer\("Position",\ default=lambda\ self:\ self\.env\['ir\.sequence'\]\.next_by_code\('position'\)\)
\ \ \ \ delay\ =\ fields\.Integer\("Treatment\ delays\ \(day\)"\)
\

class\ FieldModel\(models\.Model\):
\ \ \ \ _name\ =\ "module\.document\.field"
\ \ \ \ _description\ =\ "Field\ for\ step"

\ \ \ \ name\ =\ fields\.Char\("Title",\ required=True\)
\ \ \ \ description\ =\ fields\.Text\("Description"\)
\ \ \ \ required\ =\ fields\.Boolean\("Is\ Required",\ required=True\)
\ \ \ \ type\ =\ fields\.Selection\(string="Field\ Type",\ related='field_type'\)
\ \ \ \ field_type\ =\ fields\.Selection\(selection='get_possible_field_types',\ string='Field\ Type',\ required=True\)
\ \ \ \ step_id\ =\ fields\.Many2one\('module\.document\.step',\ string="Step",\ required=True\)

\ \ \ \ @api\.model
\ \ \ \ def\ get_possible_field_types\(self\):
\ \ \ \ \ \ \ \ field_list\ =\ sorted\(\(key,\ key\)\ for\ key\ in\ fields\.Field\.by_type\)
\ \ \ \ \ \ \ \ field_list\.remove\(\('one2many',\ 'one2many'\)\)
\ \ \ \ \ \ \ \ field_list\.remove\(\('many2many',\ 'many2many'\)\)
\ \ \ \ \ \ \ \ field_list\.remove\(\('many2one',\ 'many2one'\)\)
\ \ \ \ \ \ \ \ field_list\.remove\(\('many2one_reference',\ 'many2one_reference'\)\)
\ \ \ \ \ \ \ \ field_list\.remove\(\('properties',\ 'properties'\)\)
\ \ \ \ \ \ \ \ field_list\.remove\(\('properties_definition',\ 'properties_definition'\)\)
\ \ \ \ \ \ \ \ field_list\.remove\(\('json',\ 'json'\)\)
\ \ \ \ \ \ \ \ field_list\.remove\(\('reference',\ 'reference'\)\)
\ \ \ \ \ \ \ \ return\ field_list
\ \

class\ DocumentModel\(models\.Model\):
\ \ \ \ _name\ =\ "module\.document"
\ \ \ \ _description\ =\ "Document"

\ \ \ \ type_id\ =\ fields\.Many2one\("module\.document\.type",\ string\ =\ "Document's\ Type",\ required\ =\ True\)
\ \ \ \ step_id\ =\ fields\.Many2one\("module\.document\.step",\ string="Current\ step"\)
\ \ \ \ name\ =\ fields\.Char\("Title",\ required=True\)
\ \ \ \ description\ =\ fields\.Text\("Description"\)
\ \ \ \ deposit_date\ =\ fields\.Date\("Deposit\ date"\)
\ \ \ \ withdrawal_date\ =\ fields\.Date\("Withdrawal\ date"\)
\ \ \ \ owner\ =\ fields\.Char\("Owner",\ required=True\)
\ \ \ \ closed_date\ =\ fields\.Date\("Closing\ date"\)

\ \ \ \ done_steps\ =\ fields\.Text\("Steps\ already\ passed",\ compute\ =\ "_all_done_steps"\)
 
\ \ \ \ @api\.depends\("step_id"\)
\ \ \ \ def\ _all_done_steps\(self\):
\ \ \ \ \ \ \ \ for\ record\ in\ self:
\ \ \ \ \ \ \ \ \ \ \ \ if\ record\.step_id:
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ steps\ =\ self\.env\['module\.document\.step'\]\.search\(\[\('position',\ '<=',\ self\.step_id\.position\)\],\ order='position\ asc'\)
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ done_steps\ =\ \[\]
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ for\ done_step\ in\ steps:
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ done_steps\.append\(\{
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "id":\ done_step.id
,"name" : done_step.name
})
record.done_steps = json.dumps(done_steps)
else:
record.done_steps = ""


Can you suggest me the best way to achieve this ? 

Thanks a lot

Avatar
Kassér
Related Posts Besvarelser Visninger Aktivitet
1
mar. 25
1419
3
feb. 21
26944
2
feb. 25
2374
2
dec. 24
1875
2
maj 24
2238