splitting doc number in parts

This commit is contained in:
Frédéric Péters 2011-12-05 16:10:01 +01:00
parent 461dc5cd32
commit 82568ec1b7
2 changed files with 52 additions and 0 deletions

View File

@ -42,4 +42,12 @@
permission="cmf.ManagePortal"
/>
<browser:view
name="splitdocnumbers"
for="*"
class=".migration.UpdateToBlobs"
permission="cmf.ManagePortal"
/>
</configure>

View File

@ -6,6 +6,7 @@ import datetime
import cStringIO
import xml.etree.ElementTree as ET
import transaction
from zope.app.intid.interfaces import IIntIds
from z3c.relationfield import RelationValue
from Products.Five.browser import BrowserView
@ -22,6 +23,9 @@ except ImportError:
from plone.namedfile.file import NamedImage
from Products.CMFCore.WorkflowCore import WorkflowException
from zope.event import notify
from zope.lifecycleevent import ObjectAddedEvent, ObjectModifiedEvent
from plone.registry.interfaces import IRegistry
from zope import component
@ -513,3 +517,43 @@ class UpdateToBlobs(BrowserView):
print 'transforming file in', object.id
newv = NamedFile(v.data, filename=v.filename)
setattr(object, attr, newv)
class SplitDocNumbers(BrowserView):
def __call__(self):
catalog = getToolByName(self.context, 'portal_catalog')
for count, brain in enumerate(catalog.search({'portal_type': ['bqrD', 'biqD',
'cr_seanceD', 'ProjetD', 'proposition_decret_reglementD',
'proposition_resolution_modificationD', 'PropositionD',
'rapports_commissionsD']})):
object = brain.getObject()
if object.numero_suite:
continue # already filled
attr_name = None
attr_value = None
for attr in ('numero_biq', 'numero_document'):
if hasattr(object, attr):
attr_name = attr
attr_value = getattr(object, attr)
break
if not attr_name:
continue
try:
new_number = re.findall(r'(\d+) \(', attr_value)[0]
except IndexError:
print 'failed to get doc number for', attr_value
continue
no_suite = None
if '°' in attr_value:
try:
no_suite = re.findall(r'°\s*(\d+)', attr_value)[0]
except IndexError:
print 'failed to get suite number for', attr_value
continue
setattr(object, attr, new_number)
if no_suite:
object.numero_suite = no_suite
notify(ObjectModifiedEvent(object))
if count%100 == 0:
transaction.commit()