Skip to Content
Menu
This question has been flagged
5 Replies
2563 Views

Hi

I have a form that contain two fields( Casier  And Rayon ) i wante to translate this code bellow in odoo framework 10 in every new record created:

rayon = ""
case = ""
inc = 0
for i in range(1,10):
  if i == 9:
   inc += 1
   i = 1
  rayon = "R" + str(inc)
  case = "C" + str(i)

     

Thanks,                                            

Avatar
Discard
Best Answer

I dont really understand your question, in your algorithm is just saving rayon=R1 and case=C1, I believe it is just a test case

If you want to save computed value to your fields you can use compute in your field definition

rayon = fields.Char(string='Rayon', compute='compute_fun_name')
case = fields.Char(string='Case', compute='compute_fun_name')

@api.depends('rayon', 'case')
def compute_fun_name(self):
     inc = 0
     for i in range(1,10):
         if i == 9:
             inc += 1
             i = 1
         self.rayon = "R" + str(inc)
         self.case = "C" + str(i)

Hope this helps

Avatar
Discard
Author

Thanks a lot will try and get you back, anyway the idea is to make to code give me this result :

Record 1 : rayon=R1 | casier=C1

Record 2 : rayon=R1 | casier=C2

....

Record 8 : rayon=R1 | casier=C8

Record 9 : rayon=R2 | casier=C1

Author

What should i return at the end of the function ?

self.rayon = "R" + str(inc)

self.case = "C" + str(i)

Using these line we are writing value to your fields, so you dont have to return anything

Author

Hi mohammed,

I got in every creation the same value, R1 and C1 normaly i should have this :

Record 1 : rayon=R1 | casier=C1

Record 2 : rayon=R1 | casier=C2

....

Record 8 : rayon=R1 | casier=C8

Record 9 : rayon=R2 | casier=C1

Author Best Answer

Hi Mohamed 

I got this error when installing, i add (Self) to compute_fun_name(self) but it give me another error in inc=0 line.

Any suggestion Thanks.

Avatar
Discard

sorry just a small mistake while I typed ans change " def compute_fun_name: "

to " def compute_fun_name(self):". I've edited my answer

Author

Hi mohammed,

I got in every creation the same value, R1 and C1 normaly i should have this :

Record 1 : rayon=R1 | casier=C1

Record 2 : rayon=R1 | casier=C2

....

Record 8 : rayon=R1 | casier=C8

Record 9 : rayon=R2 | casier=C1

What do you think i miss

As I said in my answer your algorithm just print R1 and C1 every time.

If you want this order may be you can try this in the function:

rayon = 'R' + str((1 +len(self.env['your.model.name'].search([])) / 8))

casier = 'C' + str(len(self.env['your.model.name'].search([])) % 8)

But this wont work if you deleted any record or something.

You can also try taking values in the record with latest create_date.

Author

HI Mohammed sorry for this disturbance, kindly can your write from new all the fucntion with the latest created, i will be very very grateful.

Regards,

No new function is needed. Your algorithm just prints this current result now , you need to change the algorithm.

For example :

for rec in self.env['your.model.name'].search([]):

print rec.create_date

this will give you create date of each record created. You can get values of most recent record and write value to your record accordingly.

Or by finding length of total records like I said earlier.

Just find an algorithm for your needs

Also you can create a Integer field give it automatic sequence, then according to its value you can write value to your fields.

to set automatic sequence you can refer this question:

https://www.odoo.com/forum/help-1/question/how-to-implement-sequences-8830