[ADD] field.date.context_today: added function to use as _defaults for date fields
[odoo/odoo.git] / openerp / osv / fields.py
index 224c4be..94b638e 100644 (file)
 import base64
 import datetime as DT
 import logging
+import pytz
 import re
-import string
-import sys
 import xmlrpclib
 from psycopg2 import Binary
 
 import openerp
-import openerp.netsvc as netsvc
 import openerp.tools as tools
 from openerp.tools.translate import _
 from openerp.tools import float_round, float_repr
@@ -141,7 +139,7 @@ class boolean(_column):
     def __init__(self, string='unknown', required=False, **args):
         super(boolean, self).__init__(string=string, required=required, **args)
         if required:
-            _logger.warning(
+            _logger.debug(
                 "required=True is deprecated: making a boolean field"
                 " `required` has no effect, as NULL values are "
                 "automatically turned into False.")
@@ -156,7 +154,7 @@ class integer(_column):
     def __init__(self, string='unknown', required=False, **args):
         super(integer, self).__init__(string=string, required=required, **args)
         if required:
-            _logger.warning(
+            _logger.debug(
                 "required=True is deprecated: making an integer field"
                 " `required` has no effect, as NULL values are "
                 "automatically turned into 0.")
@@ -182,7 +180,7 @@ class integer_big(_column):
     def __init__(self, string='unknown', required=False, **args):
         super(integer_big, self).__init__(string=string, required=required, **args)
         if required:
-            _logger.warning(
+            _logger.debug(
                 "required=True is deprecated: making an integer_big field"
                 " `required` has no effect, as NULL values are "
                 "automatically turned into 0.")
@@ -246,7 +244,7 @@ class float(_column):
         # synopsis: digits_compute(cr) ->  (precision, scale)
         self.digits_compute = digits_compute
         if required:
-            _logger.warning(
+            _logger.debug(
                 "required=True is deprecated: making a float field"
                 " `required` has no effect, as NULL values are "
                 "automatically turned into 0.0.")
@@ -262,6 +260,7 @@ class float(_column):
 
 class date(_column):
     _type = 'date'
+
     @staticmethod
     def today(*args):
         """ Returns the current date in a format fit for being a
@@ -273,6 +272,28 @@ class date(_column):
         return DT.date.today().strftime(
             tools.DEFAULT_SERVER_DATE_FORMAT)
 
+    @staticmethod
+    def context_today(cr, uid, today=None, context=None):
+        """Returns the current date as seen in the client's timezone
+           in a format fit for date fields.
+           This method may be passed as value to initialize _defaults.
+
+           :param datetime today: optional date value to use instead of
+                                  the current date"""
+        today = DT.datetime.now()
+        context_today = None
+        if context and context.get('tz'):
+            try:
+                utc = pytz.timezone('UTC')
+                context_tz = pytz.timezone(context['tz'])
+                utc_today = utc.localize(today, is_dst=False)
+                context_today = utc_today.astimezone(context_tz)
+            except Exception:
+                _logger.debug("failed to compute context/client-specific today date, "
+                              "using the UTC value for `today`",
+                              exc_info=True)
+        return (context_today or today).strftime(tools.DEFAULT_SERVER_DATE_FORMAT)
+
 class datetime(_column):
     _type = 'datetime'
     @staticmethod