Skip to Content
Menu
This question has been flagged
7 Replies
27897 Views

Not really sure if its a string already but I'm trying to get the number of the week like this


>>> from datetime import datetime

>>> nweek = datetime.strptime(date_invoice,'%d/%m/%Y').isocalendar()[1]

and the result in odoo is 0, so I'm guessing its because the field "date_invoice" is a field type "date" and this strptime command works with strings, am I doing something wrong?


thanks

Avatar
Discard
Best Answer

Hey Luis Fuentes,

Simply just check with below code :

> type(date_invoice)

1) if its like <type 'str'> then you have to convert it into date format using as below syntax.

> date_inv_dt = datetime.strptime(date_invoice,'%d/%m/%Y')

.....and then for getting week no as below.

date_inv_dt..isocalendar()[1]

2) if its like <type 'datetime.datetime'> then you do not need to convert to date format ,then you can go ahead to get week no. like,

> nweek = date_invoice.isocalendar()[1]

Thanks.

Avatar
Discard
Author

I tried your 2nd option with no luck, result in Odoo still 0, not sure where to run the type(date_invoice) command to check the type of field

so far my code looks like this

#-*- coding: utf-8 -*-

from odoo import api, fields, models

from datetime import datetime

class nWeeks(models.Model):

_inherit = 'account.invoice'

nweek = fields.Integer(string='Semana', required=False)

invdate = fields.Date(string='Fecha de vencimiento', readonly=False, related="date_invoice")

@api.multi

def number_of_week(self):

nweek = invdate.isocalendar()[1] #USING THE 2ND OPTION SINCE "invdate" IS A FIELD TYPE "Date"

thanks for any help incoming!

Author

<class 'odoo.fields.Date'>

Best Answer

nweek = datetime.strptime(str(date_invoice),'%d/%m/%Y').isocalendar()[1]

Avatar
Discard
Best Answer

If you're using Python 3 or Odoo 13, the following code works: date_field.strftime("%U"). You can replace "%U" with a bunch of other things to format the date object properly: https://www.w3schools.com/python/python_datetime.asp

Avatar
Discard
Best Answer

Hey Luis Fuentes,

May be this will Help You,

Using this You can find Day, Month, Year, Week, DayofWeek.

from datetime import datetime, timedelta

date_doen = datetime.date.today()
do_date = datetime.strptime(date_done, "%Y-%m-%d %H:%M:%S")
day = do_date.day
month = str(do_date.month)
year, week, dayofweek = do_date.isocalendar()
Avatar
Discard
Author

Do I write this in a "api.multi" function?