Passa al contenuto
Menu
È necessario essere registrati per interagire con la community.
La domanda è stata contrassegnata
2270 Visualizzazioni

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
Abbandona
Post correlati Risposte Visualizzazioni Attività
1
mar 25
1419
3
feb 21
26944
2
feb 25
2373
2
dic 24
1874
2
mag 24
2238