source: WAeUP_SRP/trunk/patches/PatchExtendedWidgetsCPSDateTimeWidget.py @ 4218

Last change on this file since 4218 was 3988, checked in by Henrik Bettermann, 16 years ago

implement payment import

PatchExtendedWidgetsCPSDateTimeWidget.py: enable import of long DateTime? strings which are exported by csv writer

  • Property svn:keywords set to Id
File size: 3.1 KB
Line 
1#-*- mode: python; mode: fold -*-
2import re
3from DateTime.DateTime import DateTime
4from Products.CPSSchemas.ExtendedWidgets import CPSDateTimeWidget
5CPSDateTimeWidget.time_hour_default = '00'
6
7def validate(self, datastructure, **kw):
8    """Validate datastructure and update datamodel."""
9    datamodel = datastructure.getDataModel()
10    field_id = self.fields[0]
11    widget_id = self.getWidgetId()
12   
13    if self.view_format == 'import':
14        try:
15            dt = datastructure[widget_id].strip()
16            date,time,dummy = dt.split()
17            y,m,d = date.split('/')
18            hour,minute,second = time.split(':')
19        except:
20            datastructure.setError(widget_id, 'cpsschemas_err_date')
21            return 0
22        if not (date):
23            if self.is_required:
24                datastructure[widget_id] = ''
25                datastructure.setError(widget_id, 'cpsschemas_err_required')
26                return 0
27            else:
28                datamodel[field_id] = None
29                return 1
30    else:
31        if datastructure.has_key(widget_id + '_date'):
32            date = datastructure[widget_id + '_date'].strip()
33        else:
34            date = datastructure[widget_id].strip()
35        if datastructure.has_key(widget_id + '_hour'):
36            hour = datastructure[widget_id + '_hour'].strip()
37        else:
38            hour = self.time_hour_default
39        if datastructure.has_key(widget_id + '_minute'):
40            minute = datastructure[widget_id + '_minute'].strip()
41        else:
42            minute = self.time_minutes_default
43
44        if not (date):
45            if self.is_required:
46                datastructure[widget_id] = ''
47                datastructure.setError(widget_id, 'cpsschemas_err_required')
48                return 0
49            else:
50                datamodel[field_id] = None
51                return 1
52               
53        #import pdb;pdb.set_trace()
54        if self.view_format.startswith('iso8601'):
55            if re.match(r'^[0-9]+-[0-9]{2}-[0-9]{2}', date) is not None:
56                y, m, d = date.split('-')
57            else:
58                datastructure.setError(widget_id, 'cpsschemas_err_date')
59                return 0
60        else:
61            if re.match(r'^[0-9]?[0-9][/,\-,\.][0-9]?[0-9][/,\-,\.][0-9]{2,4}$', date) is not None:
62                d, m, y = re.split(r'[/,\-,\.]',date) # always use d/m/y and use /,- or . as separator
63                #d, m, y = date.split('/') # always use d/m/y
64                # locale = self.translation_service.getSelectedLanguage()
65                # if False and locale in ('en', 'hu'):
66                #     m, d, y = date.split('/')
67                # else:
68            else:
69                datastructure.setError(widget_id, 'cpsschemas_err_date')
70                return 0
71
72    try:
73        v = DateTime(int(y), int(m), int(d), int(hour), int(minute))
74    except (ValueError, TypeError, DateTime.DateTimeError,
75            DateTime.SyntaxError, DateTime.DateError):
76        datastructure.setError(widget_id, 'cpsschemas_err_date')
77        return 0
78    else:
79        datastructure[widget_id] = v
80        datamodel[field_id] = v
81        return 1
82   
83
84CPSDateTimeWidget.validate = validate
85
Note: See TracBrowser for help on using the repository browser.