Bỏ qua để đến Nội dung
Menu
Câu hỏi này đã bị gắn cờ
1 Trả lời
11267 Lượt xem

I have two textbox.

In first textbox i'll manually enter islamic date, at the same time on the second textbox it changes to geogorian date.

I wrote code for it, but its shows error.

from openerp.osv import fields, osv

import math

def intPart(floatNum):

    if floatNum < -0.0000001: return math.ceil(floatNum - 0.0000001)

    return math.floor(floatNum + 0.0000001)

def Hijri2Gregorian(yr,mth,day):

    jd1 = intPart((11 * yr + 3) / 30.0)

    jd2 = intPart((mth - 1) / 2.0)

    jd = jd1 + 354 * yr + 30 * mth - jd2 + day + 1948440 - 385

    if jd > 2299160:

    l = jd + 68569

    n = intPart((4 * l) / 146097.0)

    l = l - intPart((146097 * n + 3) / 4.0)

    i = intPart((4000 * (l + 1)) / 1461001.0)

    l = l - intPart((1461 * i) / 4.0) + 31

    j = intPart((80 * l) / 2447.0)

    d = l - intPart((2447 * j) / 80.0)

    l = intPart(j / 11.0)

    m = j + 2 - 12 * l

    y = 100 * (n - 49) + i + l

    else:

    j = jd + 1402

    k = intPart((j - 1) / 1461.0)

    l = j - 1461 * k

    n = intPart((l - 1) / 365.0) - intPart(l / 1461.0)

    i = l - 365 * n + 30

    j = intPart((80 * i) / 2447.0)

    d = i - intPart((2447 * j) / 80.0)

    i = intPart(j / 11.0)

    m = j + 2 - 12 * i

    y = 4 * k + n + i - 4716

    return y, m, d

 

class hr_extra(osv.osv):

_inherit = "hr.employee"

def _get_hijr_date(self, cr, uid, ids, name, arg,context=None):

res = {}

for self_data in self.browse(cr, uid, ids, context=context):

    islamic_date = self_data.islamic_date

    # get Pass yesr, month and day in this function

    Hijri2Gregorian(yr,mth,day)

   return res

_columns = {

    'islamic_date' : fields.char('Islamic Date'),

    'english_date' : fields.function(Hijri2Gregorian,'English Date'), }

hr_extra()

 

Error: TypeError: Hijri2Gregorian() takes exactly 3 arguments (7 given)

 

Updated Code

 

class hr_extra(osv.osv):

_inherit = "hr.employee"

def _get_hijri_date(self, cr, uid, ids, name, args, context=None):

    res = {}

    for self_data in self.browse(cr, uid, ids, context=context):

        islamic_date = self_data.islamic_date

        islamic_date = '%.2f' % islamic_date

        list = str(islamic_date).split('.')

        yr = islamic_date(int(list[0]))

        mth = islamic_date(int(list[1]))

        day = islamic_date(int(list[2]))

        # get Pass yesr, month and day in this function

        #yr = 1428

        #mth = 1

        #day = 2

Hijri2Gregorian(yr,mth,day)

return res _

columns = {

    'islamic_date' : fields.char('Islamic Date'),

    'english_date' : fields.function(_get_hijri_date,type='date', select=True,string='English Date'), }

hr_extra()

 

Is this code correct?? Please help me...

Ảnh đại diện
Huỷ bỏ

update the log or error message for ur updated code ?

Tác giả

Module installed: When i click on the existing employee. It shows error: File "/opt/openerp/server/openerp/addons/date22/hr_date.py", line 52, in _get_hijri_date list = islamic_date.split('.') AttributeError: 'bool' object has no attribute 'split'

Tác giả

When i created new employee and give islamic date as 1428.1.2, then save. i got error: File "/opt/openerp/server/openerp/addons/date22/hr_date.py", line 53, in _get_hijri_date yr = islamic_date(str(list[0])) TypeError: 'unicode' object is not callable

Tác giả

Any idea, senthilnathan?

if it says bool then there is no data so it can't split

unicode error means u need to convert it before passing print type of the value passed and check

Tác giả

Did you know the code?

Tác giả

Did you know solve the issue?

Tác giả

How i convert these values?

Did you mean to Hijri to Gregorian?

Câu trả lời hay nhất

Could you try this:

class hr_extra(osv.osv):

_inherit = "hr.employee"

 def _get_hijri_date(self, cr, uid, ids, name, args, context=None):

      res = {}

      for self_data in self.browse(cr, uid, ids, context=context):

          islamic_date = self_data.islamic_date

          list = str(islamic_date).split('.')

         yr = int(list[0])

         mth = int(list[1])

         day =int(list[2])

         # get Pass yesr, month and day in this function

         #yr = 1428

         #mth = 1

         #day = 2

        Hijri2Gregorian(yr,mth,day)

return res

Ảnh đại diện
Huỷ bỏ