Commit 38807827 authored by Nikola's avatar Nikola

Merge branch 'master' of https://lab.nexedi.com/nexedi/erp5 into nikola_perspective

parents 643b4956 69d9157f
...@@ -26,9 +26,9 @@ informations = { 'processing': processing, ...@@ -26,9 +26,9 @@ informations = { 'processing': processing,
if informations['processing'] in ['converted', 'conversion_failed','empty']: if informations['processing'] in ['converted', 'conversion_failed','empty']:
informations['permanent_url'] = document.Document_getPermanentUrl() informations['permanent_url'] = document.Document_getPermanentUrl()
print dumps(informations) #print info before del object print(dumps(informations)) #print info before del object
portal.portal_sessions.manage_delObjects(reference) portal.portal_sessions.manage_delObjects(reference)
else: else:
print dumps(informations) print(dumps(informations))
return printed return printed
...@@ -72,4 +72,6 @@ for item_value in value_list: ...@@ -72,4 +72,6 @@ for item_value in value_list:
sub_field_dict[item_key]['value'] = item_value sub_field_dict[item_key]['value'] = item_value
# Return the list of subfield configuration. # Return the list of subfield configuration.
return sub_field_dict.values() return sorted(
sub_field_dict.values(),
key=lambda v: v['title'])
...@@ -35,7 +35,7 @@ search_params = dict( ...@@ -35,7 +35,7 @@ search_params = dict(
for brain in portal.portal_simulation.getInventoryList(**search_params): for brain in portal.portal_simulation.getInventoryList(**search_params):
if round(brain.total_price, precision) == 0: if round(brain.total_price, precision) == 0:
print '%s has a 0 balance but some not grouped transactions.' % brain.mirror_section_relative_url print('%s has a 0 balance but some not grouped transactions.' % brain.mirror_section_relative_url)
if fixit: if fixit:
tr = brain.getObject().getParentValue() tr = brain.getObject().getParentValue()
grouped_line_list = tr.AccountingTransaction_guessGroupedLines() grouped_line_list = tr.AccountingTransaction_guessGroupedLines()
...@@ -51,9 +51,9 @@ for brain in portal.portal_simulation.getInventoryList(**search_params): ...@@ -51,9 +51,9 @@ for brain in portal.portal_simulation.getInventoryList(**search_params):
portal_type=portal.getPortalAccountingMovementTypeList(), portal_type=portal.getPortalAccountingMovementTypeList(),
grouping_reference=None,) if not line.getObject().getGroupingReference()]) grouping_reference=None,) if not line.getObject().getGroupingReference()])
if grouped_line_list: if grouped_line_list:
print 'FIXED', grouped_line_list print('FIXED %s' % grouped_line_list)
else: else:
print 'NOT FIXED' print('NOT FIXED')
active_result = ActiveResult( active_result = ActiveResult(
summary=context.getTitle(), summary=context.getTitle(),
......
...@@ -78,7 +78,7 @@ for property_dict in object_list: ...@@ -78,7 +78,7 @@ for property_dict in object_list:
gap = str(gap) gap = str(gap)
if gap: if gap:
gap = gap.replace('CLASSE ', '') gap = gap.replace('CLASSE ', '')
print '+ %s - %s - %s' % (gap or '', title or '', description or '') print('+ %s - %s - %s' % (gap or '', title or '', description or ''))
path = root path = root
b = '' b = ''
for a in gap: for a in gap:
...@@ -96,7 +96,7 @@ for path in existing_path_list: ...@@ -96,7 +96,7 @@ for path in existing_path_list:
description = document.getDescription() or '' description = document.getDescription() or ''
gap = document.getId() or '' gap = document.getId() or ''
title = document.getTitle() or '' title = document.getTitle() or ''
print '- %s - %s - %s' % (gap or '', title or '', description or '') print('- %s - %s - %s' % (gap or '', title or '', description or ''))
document.getParentValue().deleteContent(document.getId()) document.getParentValue().deleteContent(document.getId())
return printed return printed
...@@ -3387,7 +3387,7 @@ class TestAccountingExport(AccountingTestCase): ...@@ -3387,7 +3387,7 @@ class TestAccountingExport(AccountingTestCase):
form_id='AccountingTransaction_view') form_id='AccountingTransaction_view')
from Products.ERP5OOo.OOoUtils import OOoParser from Products.ERP5OOo.OOoUtils import OOoParser
parser = OOoParser() parser = OOoParser()
parser.openFromString(ods_data) parser.openFromBytes(ods_data)
content_xml = parser.oo_files['content.xml'] content_xml = parser.oo_files['content.xml']
# just make sure that we have the correct account name # just make sure that we have the correct account name
self.assertEqual( self.assertEqual(
...@@ -4322,7 +4322,7 @@ class TestTransactions(AccountingTestCase): ...@@ -4322,7 +4322,7 @@ class TestTransactions(AccountingTestCase):
self.assertFalse(invoice_line.getGroupingReference()) self.assertFalse(invoice_line.getGroupingReference())
self.assertFalse(payment_line.getGroupingReference()) self.assertFalse(payment_line.getGroupingReference())
def test_roundDebitCredit_raises_if_big_difference(self): def test_roundDebitCredit_does_nothing_if_big_difference(self):
invoice = self._makeOne( invoice = self._makeOne(
portal_type='Sale Invoice Transaction', portal_type='Sale Invoice Transaction',
lines=(dict(source_value=self.account_module.goods_sales, lines=(dict(source_value=self.account_module.goods_sales,
...@@ -4330,7 +4330,11 @@ class TestTransactions(AccountingTestCase): ...@@ -4330,7 +4330,11 @@ class TestTransactions(AccountingTestCase):
dict(source_value=self.account_module.receivable, dict(source_value=self.account_module.receivable,
source_credit=100.000001))) source_credit=100.000001)))
invoice.newContent(portal_type='Invoice Line', quantity=1, price=100) invoice.newContent(portal_type='Invoice Line', quantity=1, price=100)
self.assertRaises(invoice.AccountingTransaction_roundDebitCredit) self.assertEqual(
sorted([
m.getQuantity() for m in invoice.getMovementList(
portal_type='Sale Invoice Transaction Line')]),
[-100.032345, 100.000001])
def test_roundDebitCredit_when_payable_is_different_total_price(self): def test_roundDebitCredit_when_payable_is_different_total_price(self):
invoice = self._makeOne( invoice = self._makeOne(
......
...@@ -7,7 +7,7 @@ for cat in category_list: ...@@ -7,7 +7,7 @@ for cat in category_list:
cat.getObject().setId(newid) cat.getObject().setId(newid)
except: except:
pass pass
print newid print(newid)
print 'Categories Renamed' print('Categories Renamed')
return printed return printed
...@@ -7,7 +7,7 @@ for cat in category_list: ...@@ -7,7 +7,7 @@ for cat in category_list:
cat.getObject().setId(newid) cat.getObject().setId(newid)
except: except:
pass pass
print newid print(newid)
print 'Categories Renamed' print('Categories Renamed')
return printed return printed
...@@ -48,7 +48,7 @@ dane.p59=dane.p55-dane.p56 ...@@ -48,7 +48,7 @@ dane.p59=dane.p55-dane.p56
if debug: if debug:
for f in range(20,60): for f in range(20,60):
n='p'+str(f) n='p'+str(f)
print n,getattr(dane,n) print(n,getattr(dane,n))
return printed return printed
return container[report].index_html(REQUEST=context.REQUEST, RESPONSE=context.REQUEST.RESPONSE,dane=dane) return container[report].index_html(REQUEST=context.REQUEST, RESPONSE=context.REQUEST.RESPONSE,dane=dane)
...@@ -5,7 +5,7 @@ Warning: Before using this script as zope, edit account_workflow and give Manage ...@@ -5,7 +5,7 @@ Warning: Before using this script as zope, edit account_workflow and give Manage
#This script will REMOVE any existing accounts!!! #This script will REMOVE any existing accounts!!!
#comment following if you are sure #comment following if you are sure
print 'Nothing done!' print('Nothing done!')
return printed return printed
...@@ -22,7 +22,7 @@ for category in gap_root.getCategoryMemberValueList(): ...@@ -22,7 +22,7 @@ for category in gap_root.getCategoryMemberValueList():
acc = account_module.newContent(title='%s %s' % (category.getId(),category.getTitle()),\ acc = account_module.newContent(title='%s %s' % (category.getId(),category.getTitle()),\
gap_value = category) gap_value = category)
acc.validate() acc.validate()
print 'acc created' print('acc created')
return printed return printed
...@@ -251,7 +251,7 @@ for line in gap_text.splitlines(): ...@@ -251,7 +251,7 @@ for line in gap_text.splitlines():
cpath += n cpath += n
path.append(cpath) path.append(cpath)
parent = gap.restrictedTraverse('/'.join(path)) parent = gap.restrictedTraverse('/'.join(path))
print 'Added to ',parent print('Added to ',parent)
parent.newContent(id=num, title=descr) parent.newContent(id=num, title=descr)
......
...@@ -90,23 +90,22 @@ Test Account GAP Parallel listfield. ...@@ -90,23 +90,22 @@ Test Account GAP Parallel listfield.
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//div[@data-gadget-scope='field_my_gap_list']//div[@data-gadget-scope='PARALLEL_SUB_FIELD_0']//label[@for='subfield_field_my_gap_list_my_country/my_accounting_standards' and text()='GAP - My Accounting Standards']</td> <td>//div[@data-gadget-scope='field_my_gap_list']//div[@data-gadget-scope='PARALLEL_SUB_FIELD_0']//label[@for='subfield_field_my_gap_list_another_country/another_standards' and text()='GAP - Another Standards']</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//div[@data-gadget-scope='field_my_gap_list']//div[@data-gadget-scope='PARALLEL_SUB_FIELD_0']//p[text()='1 - Equity Accounts']</td> <td>//div[@data-gadget-scope='field_my_gap_list']//div[@data-gadget-scope='PARALLEL_SUB_FIELD_0']//p[text()='1 - Dummy Account']</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//div[@data-gadget-scope='field_my_gap_list']//div[@data-gadget-scope='PARALLEL_SUB_FIELD_1']//label[@for='subfield_field_my_gap_list_another_country/another_standards' and text()='GAP - Another Standards']</td> <td>//div[@data-gadget-scope='field_my_gap_list']//div[@data-gadget-scope='PARALLEL_SUB_FIELD_1']//label[@for='subfield_field_my_gap_list_my_country/my_accounting_standards' and text()='GAP - My Accounting Standards']</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
<td>assertElementPresent</td> <td>assertElementPresent</td>
<td>//div[@data-gadget-scope='field_my_gap_list']//div[@data-gadget-scope='PARALLEL_SUB_FIELD_1']//p[text()='1 - Dummy Account']</td> <td>//div[@data-gadget-scope='field_my_gap_list']//div[@data-gadget-scope='PARALLEL_SUB_FIELD_1']//p[text()='1 - Equity Accounts']</td>
<td></td> <td></td>
</tr> </tr>
......
...@@ -305,7 +305,8 @@ class TestConversionInSimulation(AccountingTestCase): ...@@ -305,7 +305,8 @@ class TestConversionInSimulation(AccountingTestCase):
delivery_movement = delivery_applied_rule.contentValues()[0] delivery_movement = delivery_applied_rule.contentValues()[0]
invoice_applied_rule = delivery_movement.contentValues()[0] invoice_applied_rule = delivery_movement.contentValues()[0]
invoice_movement = invoice_applied_rule.contentValues()[0] invoice_movement = invoice_applied_rule.contentValues()[0]
invoice_transaction_applied_rule = invoice_movement.contentValues()[0] invoice_transaction_applied_rule = [x for x in invoice_movement.contentValues() \
if x.getSpecialiseReference() == 'default_invoice_transaction_rule'][0]
invoice_transaction_movement_1 =\ invoice_transaction_movement_1 =\
invoice_transaction_applied_rule.contentValues()[0] invoice_transaction_applied_rule.contentValues()[0]
self.assertEqual(currency, self.assertEqual(currency,
...@@ -397,7 +398,8 @@ class TestConversionInSimulation(AccountingTestCase): ...@@ -397,7 +398,8 @@ class TestConversionInSimulation(AccountingTestCase):
delivery_movement = delivery_applied_rule.contentValues()[0] delivery_movement = delivery_applied_rule.contentValues()[0]
invoice_applied_rule = delivery_movement.contentValues()[0] invoice_applied_rule = delivery_movement.contentValues()[0]
invoice_movement = invoice_applied_rule.contentValues()[0] invoice_movement = invoice_applied_rule.contentValues()[0]
invoice_transaction_applied_rule = invoice_movement.contentValues()[0] invoice_transaction_applied_rule = [x for x in invoice_movement.contentValues() \
if x.getSpecialiseReference() == 'default_invoice_transaction_rule'][0]
invoice_transaction_movement =\ invoice_transaction_movement =\
invoice_transaction_applied_rule.contentValues()[0] invoice_transaction_applied_rule.contentValues()[0]
self.assertEqual(currency, self.assertEqual(currency,
...@@ -684,7 +686,8 @@ class TestConversionInSimulation(AccountingTestCase): ...@@ -684,7 +686,8 @@ class TestConversionInSimulation(AccountingTestCase):
delivery_movement = delivery_applied_rule.contentValues()[0] delivery_movement = delivery_applied_rule.contentValues()[0]
invoice_applied_rule = delivery_movement.contentValues()[0] invoice_applied_rule = delivery_movement.contentValues()[0]
invoice_movement = invoice_applied_rule.contentValues()[0] invoice_movement = invoice_applied_rule.contentValues()[0]
invoice_transaction_applied_rule = invoice_movement.contentValues()[0] invoice_transaction_applied_rule = [x for x in invoice_movement.contentValues() \
if x.getSpecialiseReference() == 'default_invoice_transaction_rule'][0]
result_list = [] result_list = []
for invoice_transaction_movement in invoice_transaction_applied_rule.contentValues(): for invoice_transaction_movement in invoice_transaction_applied_rule.contentValues():
result_list.append((invoice_transaction_movement.getSource(), invoice_transaction_movement.getDestinationTotalAssetPrice())) result_list.append((invoice_transaction_movement.getSource(), invoice_transaction_movement.getDestinationTotalAssetPrice()))
...@@ -788,7 +791,8 @@ class TestConversionInSimulation(AccountingTestCase): ...@@ -788,7 +791,8 @@ class TestConversionInSimulation(AccountingTestCase):
delivery_movement = delivery_applied_rule.contentValues()[0] delivery_movement = delivery_applied_rule.contentValues()[0]
invoice_applied_rule = delivery_movement.contentValues()[0] invoice_applied_rule = delivery_movement.contentValues()[0]
invoice_movement = invoice_applied_rule.contentValues()[0] invoice_movement = invoice_applied_rule.contentValues()[0]
invoice_transaction_applied_rule = invoice_movement.contentValues()[0] invoice_transaction_applied_rule = [x for x in invoice_movement.contentValues() \
if x.getSpecialiseReference() == 'default_invoice_transaction_rule'][0]
result_list = [] result_list = []
for invoice_transaction_movement in invoice_transaction_applied_rule.contentValues(): for invoice_transaction_movement in invoice_transaction_applied_rule.contentValues():
result_list.append((invoice_transaction_movement.getSource(), invoice_transaction_movement.getSourceTotalAssetPrice())) result_list.append((invoice_transaction_movement.getSource(), invoice_transaction_movement.getSourceTotalAssetPrice()))
......
...@@ -581,12 +581,24 @@ class TestCurrencyExchangeCell(CurrencyExchangeTestCase): ...@@ -581,12 +581,24 @@ class TestCurrencyExchangeCell(CurrencyExchangeTestCase):
euro_to_usd.setPriceCurrencyValue(usd) euro_to_usd.setPriceCurrencyValue(usd)
self.assertEqual(2, len(euro_to_usd.contentValues())) self.assertEqual(2, len(euro_to_usd.contentValues()))
# cell range is like this: # cell range is like this, matrix cell range does not have ordering
self.assertEqual([ # of the keys, only asCellRange script has.
['currency_exchange_type/type_a', 'currency_exchange_type/type_b'], self.assertEqual(
['resource/%s' % euro.getRelativeUrl()], euro_to_usd.CurrencyExchangeLine_asCellRange(base_id='path'),
['price_currency/%s' % usd.getRelativeUrl()], (
], euro_to_usd.getCellRange(base_id='path')) ['currency_exchange_type/type_a', 'currency_exchange_type/type_b'],
['resource/%s' % euro.getRelativeUrl()],
['price_currency/%s' % usd.getRelativeUrl()],
)
)
self.assertEqual(
[sorted(r) for r in euro_to_usd.getCellRange(base_id='path')],
[
['currency_exchange_type/type_a', 'currency_exchange_type/type_b'],
['resource/%s' % euro.getRelativeUrl()],
['price_currency/%s' % usd.getRelativeUrl()],
]
)
type_a_cell = euro_to_usd.getCell( type_a_cell = euro_to_usd.getCell(
'currency_exchange_type/type_a', 'currency_exchange_type/type_a',
......
container.REQUEST.RESPONSE.setHeader('content-type', 'text/html') container.REQUEST.RESPONSE.setHeader('content-type', 'text/html')
print '<html><head><meta http-equiv="refresh" content="%s"></head><body>' % refresh_interval print('<html><head><meta http-equiv="refresh" content="%s"></head><body>' % refresh_interval)
for table in 'message', 'message_queue': for table in 'message', 'message_queue':
q = """SELECT count(*) AS %(table)s, method_id, processing_node AS node, min(priority) AS min_pri, max(priority) AS max_pri q = """SELECT count(*) AS %(table)s, method_id, processing_node AS node, min(priority) AS min_pri, max(priority) AS max_pri
FROM %(table)s GROUP BY method_id, processing_node ORDER BY node""" % dict(table=table) FROM %(table)s GROUP BY method_id, processing_node ORDER BY node""" % dict(table=table)
print "<table border=\"\" style=\"font-size:XX-small;\"><tbody> <tr><th>%s</th> <th>method_id</th> <th>node</th> <th>min_pri</th> <th>max_pri</th> </tr>" % table print("<table border=\"\" style=\"font-size:XX-small;\"><tbody> <tr><th>%s</th> <th>method_id</th> <th>node</th> <th>min_pri</th> <th>max_pri</th> </tr>" % table)
for row in context.cmf_activity_sql_connection.manage_test(q): for row in context.cmf_activity_sql_connection.manage_test(q):
print '<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td</tr>' % (row[table], row['method_id'], row['node'], row['min_pri'], row['max_pri']) print('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td</tr>' % (row[table], row['method_id'], row['node'], row['min_pri'], row['max_pri']))
print '</tbody> </table> <br/>' print('</tbody> </table> <br/>')
return printed return printed
...@@ -10,14 +10,14 @@ for security_uid_field in security_uid_field_list: ...@@ -10,14 +10,14 @@ for security_uid_field in security_uid_field_list:
print(">> useless uids in roles_and_users table <<\n") print(">> useless uids in roles_and_users table <<\n")
if len(referenced_uid_set) > 0: if len(referenced_uid_set) > 0:
for row in req("select * from roles_and_users where uid not in %s" + tuple(referenced_uid_set)): for row in req("select * from roles_and_users where uid not in %s" + tuple(referenced_uid_set)):
print row.uid, row.local_roles_group_id, row.allowedRolesAndUsers print(row.uid, row.local_roles_group_id, row.allowedRolesAndUsers)
print("\n>> uids that should be in roles_and_users table <<\n") print("\n>> uids that should be in roles_and_users table <<\n")
all_uid_set = {row.uid for row in req("select uid from roles_and_users")} all_uid_set = {row.uid for row in req("select uid from roles_and_users")}
for security_uid_field in security_uid_field_list: for security_uid_field in security_uid_field_list:
for row in req("select %s, relative_url from catalog where %s not in %s" % (security_uid_field, security_uid_field, tuple(all_uid_set))): for row in req("select %s, relative_url from catalog where %s not in %s" % (security_uid_field, security_uid_field, tuple(all_uid_set))):
print security_uid_field, getattr(row, security_uid_field, None), row.relative_url print(security_uid_field, getattr(row, security_uid_field, None), row.relative_url)
print("\n>> END <<") print("\n>> END <<")
return printed return printed
...@@ -6,18 +6,18 @@ u = getSecurityManager().getUser() ...@@ -6,18 +6,18 @@ u = getSecurityManager().getUser()
user_value = u.getUserValue() user_value = u.getUserValue()
if user_value is None: if user_value is None:
print 'User ID:', u.getId() print('User ID:', u.getId())
else: else:
print 'User ID:', u.getId(), user_value.getPath() print('User ID:', u.getId(), user_value.getPath())
login_value = u.getLoginValue() login_value = u.getLoginValue()
if login_value is None: if login_value is None:
print 'Login:', u.getUserName() print('Login:', u.getUserName())
else: else:
print 'Login:', u.getUserName(), login_value.getPath() print('Login:', u.getUserName(), login_value.getPath())
print 'Is owner:', u.allowed(context,('Owner',)) print('Is owner:', u.allowed(context,('Owner',)))
print 'User roles:', u.getRoles() print('User roles:', u.getRoles())
print 'User roles in context:', u.getRolesInContext(context) print('User roles in context:', u.getRolesInContext(context))
print 'Permissions:' print('Permissions:')
for permission in [ for permission in [
'Access contents information', 'Access contents information',
'Add portal content', 'Add portal content',
...@@ -26,25 +26,25 @@ for permission in [ ...@@ -26,25 +26,25 @@ for permission in [
'View', 'View',
'Manage portal', 'Manage portal',
]: ]:
print " ", permission, u.has_permission(permission, context) print(" ", permission, u.has_permission(permission, context))
print print()
try: try:
print "User groups:\n", pformat(sorted(u.getGroups())) print("User groups:\n", pformat(sorted(u.getGroups())))
except AttributeError: except AttributeError:
print 'no getGroups' print('no getGroups')
print print()
print 'Local roles on document:\n', pformat(context.get_local_roles()) print('Local roles on document:\n', pformat(context.get_local_roles()))
print ''' print('''
---------------- ----------------
Security mapping Security mapping
----------------''' ----------------''')
if u.getId() is not None: if u.getId() is not None:
try: try:
print context.Base_viewSecurityMappingAsUser(u.getId()) print(context.Base_viewSecurityMappingAsUser(u.getId()))
except Unauthorized: except Unauthorized:
print "user doesn't have permission to security mapping in this context" print("user doesn't have permission to security mapping in this context")
return printed return printed
...@@ -16,12 +16,12 @@ for method_id, base_category_list in getSecurityCategoryMapping(): ...@@ -16,12 +16,12 @@ for method_id, base_category_list in getSecurityCategoryMapping():
security_category_dict.setdefault(tuple(base_category_list), []).extend( security_category_dict.setdefault(tuple(base_category_list), []).extend(
getattr(context, method_id)(base_category_list, login, context, '')) getattr(context, method_id)(base_category_list, login, context, ''))
except Exception: # XXX: it is not possible to log message with traceback from python script except Exception: # XXX: it is not possible to log message with traceback from python script
print 'It was not possible to invoke method %s with base_category_list %s'%(method_id, base_category_list) print('It was not possible to invoke method %s with base_category_list %s'%(method_id, base_category_list))
for base_category_list, category_value_list in security_category_dict.items(): for base_category_list, category_value_list in security_category_dict.items():
print 'base_category_list:', base_category_list print('base_category_list: %s' % (base_category_list,))
for category_dict in category_value_list: for category_dict in category_value_list:
print '-> category_dict:', category_dict print('-> category_dict: %s' % category_dict)
print '-->', group_id_list_generator(category_order=base_category_list, print('--> %s' % group_id_list_generator(category_order=base_category_list,
**category_dict) **category_dict))
return printed return printed
...@@ -20,7 +20,7 @@ if context.getPortalType() == 'Alarm': ...@@ -20,7 +20,7 @@ if context.getPortalType() == 'Alarm':
else: else:
active_process = context.portal_activities.newActiveProcess().getPath() active_process = context.portal_activities.newActiveProcess().getPath()
ERP5Site_checkDataWithScript = context.portal_activities.ERP5Site_checkDataWithScript ERP5Site_checkDataWithScript = context.portal_activities.ERP5Site_checkDataWithScript
print 'Results will be saved to %s' % active_process print('Results will be saved to %s' % active_process)
checkTopLevel() checkTopLevel()
ERP5Site_checkDataWithScript( ERP5Site_checkDataWithScript(
......
for builder in sorted(context.getPortalObject().portal_deliveries.contentValues(), for builder in sorted(context.getPortalObject().portal_deliveries.contentValues(),
key=lambda x:x.getTitle()): key=lambda x:x.getTitle()):
print builder.getId() print(builder.getId())
print " Title: %s" % (builder.getTitle()) print(" Title: %s" % (builder.getTitle()))
print " Simulation Select Method: %s" % (builder.getSimulationSelectMethodId()) print(" Simulation Select Method: %s" % (builder.getSimulationSelectMethodId()))
print " Delivery Select Method: %s" % (builder.getDeliverySelectMethodId()) print(" Delivery Select Method: %s" % (builder.getDeliverySelectMethodId()))
print " After Generation Script: %s" % (builder.getDeliveryAfterGenerationScriptId()) print(" After Generation Script: %s" % (builder.getDeliveryAfterGenerationScriptId()))
print print()
for mg in sorted(builder.contentValues(), key=lambda x:x.getTitle()): for mg in sorted(builder.contentValues(), key=lambda x:x.getTitle()):
print builder.getId() print(builder.getId())
print " ", "\n ".join([x for x in ( print(" ", "\n ".join([x for x in (
"Id: %s" % mg.getId(), "Id: %s" % mg.getId(),
"Title: %s" % mg.getTitle(), "Title: %s" % mg.getTitle(),
"Type: %s" % mg.getPortalType(), "Type: %s" % mg.getPortalType(),
...@@ -17,7 +17,7 @@ for builder in sorted(context.getPortalObject().portal_deliveries.contentValues( ...@@ -17,7 +17,7 @@ for builder in sorted(context.getPortalObject().portal_deliveries.contentValues(
"Tested Properties: %r" % mg.getTestedPropertyList(), "Tested Properties: %r" % mg.getTestedPropertyList(),
"Update Always: %r" % mg.isUpdateAlways(), "Update Always: %r" % mg.isUpdateAlways(),
)]) )]))
print print()
return printed return printed
...@@ -4,6 +4,6 @@ for business_template in sorted(context.getPortalObject().portal_templates.conte ...@@ -4,6 +4,6 @@ for business_template in sorted(context.getPortalObject().portal_templates.conte
key=lambda x:x.getTitle()): key=lambda x:x.getTitle()):
if business_template.getInstallationState() == 'installed' and \ if business_template.getInstallationState() == 'installed' and \
business_template.getTitle() not in ignore_business_template_list: business_template.getTitle() not in ignore_business_template_list:
print business_template.getTitle() print(business_template.getTitle())
return printed return printed
for builder in sorted(context.getPortalObject().portal_orders.contentValues(), for builder in sorted(context.getPortalObject().portal_orders.contentValues(),
key=lambda x:x.getTitle()): key=lambda x:x.getTitle()):
print builder.getId() print(builder.getId())
print " Title: %s" % (builder.getTitle()) print(" Title: %s" % (builder.getTitle()))
print " Simulation Select Method: %s" % (builder.getSimulationSelectMethodId()) print(" Simulation Select Method: %s" % (builder.getSimulationSelectMethodId()))
print " Delivery Select Method: %s" % (builder.getDeliverySelectMethodId()) print(" Delivery Select Method: %s" % (builder.getDeliverySelectMethodId()))
print " After Generation Script: %s" % (builder.getDeliveryAfterGenerationScriptId()) print(" After Generation Script: %s" % (builder.getDeliveryAfterGenerationScriptId()))
print " Delivery Module Before Building Script: %s" % (builder.getDeliveryModuleBeforeBuildingScriptId()) print(" Delivery Module Before Building Script: %s" % (builder.getDeliveryModuleBeforeBuildingScriptId()))
print print()
for mg in sorted(builder.contentValues(), key=lambda x:x.getTitle()): for mg in sorted(builder.contentValues(), key=lambda x:x.getTitle()):
print builder.getId() print(builder.getId())
print " ", "\n ".join([x for x in ( print(" ", "\n ".join([x for x in (
"Id: %s" % mg.getId(), "Id: %s" % mg.getId(),
"Title: %s" % mg.getTitle(), "Title: %s" % mg.getTitle(),
"Type: %s" % mg.getPortalType(), "Type: %s" % mg.getPortalType(),
...@@ -18,7 +18,7 @@ for builder in sorted(context.getPortalObject().portal_orders.contentValues(), ...@@ -18,7 +18,7 @@ for builder in sorted(context.getPortalObject().portal_orders.contentValues(),
"Tested Properties: %r" % mg.getTestedPropertyList(), "Tested Properties: %r" % mg.getTestedPropertyList(),
"Update Always: %r" % mg.isUpdateAlways(), "Update Always: %r" % mg.isUpdateAlways(),
)]) )]))
print print()
return printed return printed
...@@ -37,12 +37,12 @@ for skin_folder in portal.portal_skins.objectValues('Folder'): ...@@ -37,12 +37,12 @@ for skin_folder in portal.portal_skins.objectValues('Folder'):
for skin in skin_folder.objectValues(): for skin in skin_folder.objectValues():
if skin.getId() in ignore_skin_list: if skin.getId() in ignore_skin_list:
continue continue
print getSkinHash(skin, skin_folder) print(getSkinHash(skin, skin_folder))
if include_workflow_scripts: if include_workflow_scripts:
for workflow in portal.portal_workflow.objectValues(): for workflow in portal.portal_workflow.objectValues():
for skin in workflow.scripts.objectValues(): for skin in workflow.scripts.objectValues():
print getSkinHash(skin, workflow) print(getSkinHash(skin, workflow))
container.REQUEST.RESPONSE.setHeader('content-type', 'text/plain') container.REQUEST.RESPONSE.setHeader('content-type', 'text/plain')
return '\n'.join(sorted(printed.splitlines())) return '\n'.join(sorted(printed.splitlines()))
for ti in sorted(context.getPortalObject().portal_types.contentValues(), key=lambda x:x.getId()): for ti in sorted(context.getPortalObject().portal_types.contentValues(), key=lambda x:x.getId()):
for ai in sorted(ti.contentValues(portal_type='Action Information'), key=lambda x:x.getReference()): for ai in sorted(ti.contentValues(portal_type='Action Information'), key=lambda x:x.getReference()):
print ti.getId() print(ti.getId())
print " ", "\n ".join([x for x in ( print(" ", "\n ".join([x for x in (
"Reference: %s" % ai.getReference(), "Reference: %s" % ai.getReference(),
"Title: %s" % ai.getTitle(), "Title: %s" % ai.getTitle(),
"Action: %s" % ai.getActionText(), "Action: %s" % ai.getActionText(),
...@@ -9,7 +9,7 @@ for ti in sorted(context.getPortalObject().portal_types.contentValues(), key=lam ...@@ -9,7 +9,7 @@ for ti in sorted(context.getPortalObject().portal_types.contentValues(), key=lam
"Permission: %s" % ai.getActionPermission(), "Permission: %s" % ai.getActionPermission(),
"Action Type: %s" % ai.getActionType(), "Action Type: %s" % ai.getActionType(),
"Visible: %s" % ai.getVisible(), "Visible: %s" % ai.getVisible(),
"Index: %s" % ai.getFloatIndex())]) "Index: %s" % ai.getFloatIndex())]))
print print()
return printed return printed
for ti in sorted(context.getPortalObject().portal_types.contentValues(), key=lambda x:x.getId()): for ti in sorted(context.getPortalObject().portal_types.contentValues(), key=lambda x:x.getId()):
print ti.getId() print(ti.getId())
print " ", "\n ".join([x for x in ( print(" ", "\n ".join([x for x in (
"Short Title: %s" % ti.getShortTitle(), "Short Title: %s" % ti.getShortTitle(),
"Class: %s" % ti.getTypeClass(), "Class: %s" % ti.getTypeClass(),
"Init Script: %s" % ti.getTypeInitScriptId(), "Init Script: %s" % ti.getTypeInitScriptId(),
...@@ -12,7 +12,7 @@ for ti in sorted(context.getPortalObject().portal_types.contentValues(), key=lam ...@@ -12,7 +12,7 @@ for ti in sorted(context.getPortalObject().portal_types.contentValues(), key=lam
"Hidden Content Types: %r" % sorted(ti.getTypeHiddenContentTypeList()), "Hidden Content Types: %r" % sorted(ti.getTypeHiddenContentTypeList()),
"Searchable Property: %r" % sorted(ti.getSearchableTextPropertyIdList()), "Searchable Property: %r" % sorted(ti.getSearchableTextPropertyIdList()),
"Searchable Method: %r" % sorted(ti.getSearchableTextMethodIdList()), "Searchable Method: %r" % sorted(ti.getSearchableTextMethodIdList()),
)]) )]))
print print()
return printed return printed
for ti in sorted(context.getPortalObject().portal_types.contentValues(), key=lambda x:x.getId()): for ti in sorted(context.getPortalObject().portal_types.contentValues(), key=lambda x:x.getId()):
for ri in sorted(ti.contentValues(portal_type='Role Information'), key=lambda x:(x.getTitle(), x.getLocalRoleGroupId(), x.getRoleBaseCategoryScriptId(), x.getRoleBaseCategoryList())): for ri in sorted(ti.contentValues(portal_type='Role Information'), key=lambda x:(x.getTitle(), x.getLocalRoleGroupId(), x.getRoleBaseCategoryScriptId(), x.getRoleBaseCategoryList())):
print ti.getId() print(ti.getId())
print " ", "\n ".join([x for x in ( print(" ", "\n ".join([x for x in (
"Title: %s" % ri.getTitle(), "Title: %s" % ri.getTitle(),
"Roles: %r" % ri.getRoleNameList(), "Roles: %r" % ri.getRoleNameList(),
"Condition: %s" % ri.getConditionText(), "Condition: %s" % ri.getConditionText(),
"Local Roles Group Id: %s" % ri.getLocalRoleGroupId(), "Local Roles Group Id: %s" % ri.getLocalRoleGroupId(),
"Base Categories: %r" % ri.getRoleBaseCategoryList(), "Base Categories: %r" % ri.getRoleBaseCategoryList(),
"Base Category Script: %s" % ri.getRoleBaseCategoryScriptId(), "Base Category Script: %s" % ri.getRoleBaseCategoryScriptId(),
"Categories: %r" % ri.getRoleCategoryList() )]) "Categories: %r" % ri.getRoleCategoryList() )]))
print print()
return printed return printed
...@@ -6,7 +6,7 @@ for ps in sorted(context.getPortalObject().portal_property_sheets.contentValues( ...@@ -6,7 +6,7 @@ for ps in sorted(context.getPortalObject().portal_property_sheets.contentValues(
ps_id = ps.getId() ps_id = ps.getId()
if ps_id in ignore_property_sheet_list: if ps_id in ignore_property_sheet_list:
continue continue
print ps.getId() print(ps.getId())
info_list = ['id', 'portal_type', 'reference'] info_list = ['id', 'portal_type', 'reference']
std_prop_list = ['elementary_type', 'property_default', 'storage_id', 'multivaluated', 'range', 'preference', 'read_permission', 'write_permission', 'translatable', 'translation_domain'] std_prop_list = ['elementary_type', 'property_default', 'storage_id', 'multivaluated', 'range', 'preference', 'read_permission', 'write_permission', 'translatable', 'translation_domain']
if pd.getPortalType() == 'Standard Property': if pd.getPortalType() == 'Standard Property':
...@@ -29,10 +29,10 @@ for ps in sorted(context.getPortalObject().portal_property_sheets.contentValues( ...@@ -29,10 +29,10 @@ for ps in sorted(context.getPortalObject().portal_property_sheets.contentValues(
elif pd.getPortalType().endswith('Constraint'): elif pd.getPortalType().endswith('Constraint'):
info_list += [] + [p for p in pd.propertyIds() if p.startswith('message')] info_list += [] + [p for p in pd.propertyIds() if p.startswith('message')]
else: else:
print "(not supported)",pd.getRelativeUrl(), pd.getPortalType() print("(not supported)",pd.getRelativeUrl(), pd.getPortalType())
print " ", "\n ".join(['%s: %s' % (prop, pd.getProperty(prop)) for prop in sorted(info_list)]) print(" ", "\n ".join(['%s: %s' % (prop, pd.getProperty(prop)) for prop in sorted(info_list)]))
print print()
return printed return printed
...@@ -2,17 +2,17 @@ for rule in sorted(context.getPortalObject().portal_rules.contentValues(), ...@@ -2,17 +2,17 @@ for rule in sorted(context.getPortalObject().portal_rules.contentValues(),
key=lambda x:x.getTitle()): key=lambda x:x.getTitle()):
if rule.getValidationState() != 'validated': if rule.getValidationState() != 'validated':
continue continue
print rule.getId() print(rule.getId())
print " Title: %s" % (rule.getTitle()) print(" Title: %s" % (rule.getTitle()))
print " Trade Phases: %r" % (rule.getTradePhaseList()) print(" Trade Phases: %r" % (rule.getTradePhaseList()))
print " Test Method Id: %s" % (rule.getTestMethodId()) print(" Test Method Id: %s" % (rule.getTestMethodId()))
print " Membership Criteria: %r" % (rule.getMembershipCriterionBaseCategoryList()) print(" Membership Criteria: %r" % (rule.getMembershipCriterionBaseCategoryList()))
print " Membership Criterion Category: %r" % (rule.getMembershipCriterionCategoryList()) print(" Membership Criterion Category: %r" % (rule.getMembershipCriterionCategoryList()))
print print()
for tester in sorted(rule.contentValues(), key=lambda x:x.getTitle()): for tester in sorted(rule.contentValues(), key=lambda x:x.getTitle()):
print rule.getId() print(rule.getId())
print " ", "\n ".join([x for x in ( print(" ", "\n ".join([x for x in (
"Id: %s" % tester.getId(), "Id: %s" % tester.getId(),
"Title: %s" % tester.getTitle(), "Title: %s" % tester.getTitle(),
"Type: %s" % tester.getPortalType(), "Type: %s" % tester.getPortalType(),
...@@ -25,7 +25,7 @@ for rule in sorted(context.getPortalObject().portal_rules.contentValues(), ...@@ -25,7 +25,7 @@ for rule in sorted(context.getPortalObject().portal_rules.contentValues(),
(tester.getMembershipCriterionBaseCategoryList()), (tester.getMembershipCriterionBaseCategoryList()),
"Membership Criterion Category: %r" % "Membership Criterion Category: %r" %
(tester.getMembershipCriterionCategoryList()), (tester.getMembershipCriterionCategoryList()),
)]) )]))
print print()
return printed return printed
...@@ -13,5 +13,5 @@ for name, layers in skin_tool.getSkinPaths(): ...@@ -13,5 +13,5 @@ for name, layers in skin_tool.getSkinPaths():
if ignore_skin_folder_list is not None and\ if ignore_skin_folder_list is not None and\
layer in ignore_skin_folder_list: layer in ignore_skin_folder_list:
continue continue
print '%s,%s' % (name, layer) print('%s,%s' % (name, layer))
return printed return printed
...@@ -13,6 +13,6 @@ for field_path, field in context.ZopeFind( ...@@ -13,6 +13,6 @@ for field_path, field in context.ZopeFind(
relation_setter_id = field.get_value('relation_setter_id') relation_setter_id = field.get_value('relation_setter_id')
if relation_setter_id: if relation_setter_id:
print field_path, relation_setter_id print(field_path, relation_setter_id)
return printed return printed
...@@ -16,6 +16,6 @@ for bt in bt_list: ...@@ -16,6 +16,6 @@ for bt in bt_list:
delete_list.append(bt_id) delete_list.append(bt_id)
break break
print 'Deleted id list:%r' % delete_list print('Deleted id list:%r' % delete_list)
portal_templates.manage_delObjects(delete_list) portal_templates.manage_delObjects(delete_list)
return printed return printed
...@@ -37,8 +37,8 @@ ...@@ -37,8 +37,8 @@
<key> <string>tested_property</string> </key> <key> <string>tested_property</string> </key>
<value> <value>
<tuple> <tuple>
<string>start_date</string>
<string>stop_date</string> <string>stop_date</string>
<string>start_date</string>
</tuple> </tuple>
</value> </value>
</item> </item>
......
...@@ -37,8 +37,8 @@ ...@@ -37,8 +37,8 @@
<key> <string>tested_property</string> </key> <key> <string>tested_property</string> </key>
<value> <value>
<tuple> <tuple>
<string>start_date</string>
<string>stop_date</string> <string>stop_date</string>
<string>start_date</string>
</tuple> </tuple>
</value> </value>
</item> </item>
......
...@@ -37,8 +37,8 @@ ...@@ -37,8 +37,8 @@
<key> <string>tested_property</string> </key> <key> <string>tested_property</string> </key>
<value> <value>
<tuple> <tuple>
<string>start_date</string>
<string>stop_date</string> <string>stop_date</string>
<string>start_date</string>
</tuple> </tuple>
</value> </value>
</item> </item>
......
...@@ -37,8 +37,8 @@ ...@@ -37,8 +37,8 @@
<key> <string>tested_property</string> </key> <key> <string>tested_property</string> </key>
<value> <value>
<tuple> <tuple>
<string>start_date</string>
<string>stop_date</string> <string>stop_date</string>
<string>start_date</string>
</tuple> </tuple>
</value> </value>
</item> </item>
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
</item> </item>
<item> <item>
<key> <string>acquisition_portal_type</string> </key> <key> <string>acquisition_portal_type</string> </key>
<value> <string>python: list(portal.getPortalAcquisitionMovementTypeList() + portal.getPortalItemTypeList())</string> </value> <value> <string>python: list(portal.getPortalAcquisitionMovementTypeList() + portal.getPortalSupplyPathTypeList() + portal.getPortalItemTypeList())</string> </value>
</item> </item>
<item> <item>
<key> <string>categories</string> </key> <key> <string>categories</string> </key>
......
...@@ -37,13 +37,7 @@ class BaseVariantMovementGroup(MovementGroup): ...@@ -37,13 +37,7 @@ class BaseVariantMovementGroup(MovementGroup):
portal_type = 'Base Variant Movement Group' portal_type = 'Base Variant Movement Group'
def _getPropertyDict(self, movement, **kw): def _getPropertyDict(self, movement, **kw):
property_dict = {} return {'_base_category_list': sorted(movement.getVariationBaseCategoryList() or [])}
category_list = movement.getVariationBaseCategoryList()
if category_list is None:
category_list = []
category_list.sort()
property_dict['_base_category_list'] = category_list
return property_dict
def test(self, document, property_dict, **kw): def test(self, document, property_dict, **kw):
# This movement group does not affect updating. # This movement group does not affect updating.
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
# #
############################################################################## ##############################################################################
from collections import OrderedDict
from erp5.component.document.PropertyMovementGroup import PropertyMovementGroup from erp5.component.document.PropertyMovementGroup import PropertyMovementGroup
class CategoryMovementGroup(PropertyMovementGroup): class CategoryMovementGroup(PropertyMovementGroup):
...@@ -43,7 +44,7 @@ class CategoryMovementGroup(PropertyMovementGroup): ...@@ -43,7 +44,7 @@ class CategoryMovementGroup(PropertyMovementGroup):
portal_type = 'Category Movement Group' portal_type = 'Category Movement Group'
def _getPropertyDict(self, movement, **kw): def _getPropertyDict(self, movement, **kw):
property_dict = {} property_dict = OrderedDict()
getProperty = movement.getProperty getProperty = movement.getProperty
for prop in self.getTestedPropertyList(): for prop in self.getTestedPropertyList():
list_prop = prop + '_list' list_prop = prop + '_list'
......
...@@ -38,10 +38,7 @@ class CausalityMovementGroup(MovementGroup): ...@@ -38,10 +38,7 @@ class CausalityMovementGroup(MovementGroup):
def _getPropertyDict(self, movement, **kw): def _getPropertyDict(self, movement, **kw):
property_dict = {} return {'_explanation': self._getExplanationRelativeUrl(movement)}
explanation_relative_url = self._getExplanationRelativeUrl(movement)
property_dict['_explanation'] = explanation_relative_url
return property_dict
def test(self, movement, property_dict, **kw): def test(self, movement, property_dict, **kw):
# we don't care the difference of explanation url when updating # we don't care the difference of explanation url when updating
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
# #
############################################################################## ##############################################################################
from collections import OrderedDict
from erp5.component.document.MovementGroup import MovementGroup from erp5.component.document.MovementGroup import MovementGroup
from DateTime import DateTime from DateTime import DateTime
from erp5.component.module.DateUtils import atTheEndOfPeriod from erp5.component.module.DateUtils import atTheEndOfPeriod
...@@ -45,7 +46,7 @@ class MonthlyRangeMovementGroup(MovementGroup): ...@@ -45,7 +46,7 @@ class MonthlyRangeMovementGroup(MovementGroup):
def _getPropertyDict(self, movement, **kw): def _getPropertyDict(self, movement, **kw):
"""Gather start_date and stop_date, converge them to the end of month. """Gather start_date and stop_date, converge them to the end of month.
""" """
property_dict = {} property_dict = OrderedDict()
for property_name in self.getTestedPropertyList() or ('start_date', 'stop_date'): for property_name in self.getTestedPropertyList() or ('start_date', 'stop_date'):
date = movement.getProperty(property_name, None) date = movement.getProperty(property_name, None)
if date is not None: if date is not None:
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
# #
############################################################################## ##############################################################################
from collections import OrderedDict
from erp5.component.document.PropertyMovementGroup import PropertyMovementGroup from erp5.component.document.PropertyMovementGroup import PropertyMovementGroup
from Products.ERP5Type.Utils import UpperCase from Products.ERP5Type.Utils import UpperCase
...@@ -41,7 +42,7 @@ class ParentDeliveryPropertyMovementGroup(PropertyMovementGroup): ...@@ -41,7 +42,7 @@ class ParentDeliveryPropertyMovementGroup(PropertyMovementGroup):
portal_type = 'Parent Delivery Property Movement Group' portal_type = 'Parent Delivery Property Movement Group'
def _getPropertyDict(self, movement, **kw): def _getPropertyDict(self, movement, **kw):
property_dict = {} property_dict = OrderedDict()
parent_delivery = self._getParentDelivery(movement) parent_delivery = self._getParentDelivery(movement)
if parent_delivery is not None: if parent_delivery is not None:
for prop in self.getTestedPropertyList(): for prop in self.getTestedPropertyList():
......
...@@ -40,10 +40,7 @@ class ParentExplanationMovementGroup(MovementGroup): ...@@ -40,10 +40,7 @@ class ParentExplanationMovementGroup(MovementGroup):
portal_type = 'Parent Explanation Movement Group' portal_type = 'Parent Explanation Movement Group'
def _getPropertyDict(self, movement, **kw): def _getPropertyDict(self, movement, **kw):
property_dict = {} return {'parent_explanation_value': movement.getParentExplanationValue()}
parent_explanation_value = movement.getParentExplanationValue()
property_dict['parent_explanation_value'] = parent_explanation_value
return property_dict
def test(self, document, property_dict, **kw): def test(self, document, property_dict, **kw):
if document.getParentExplanationValue() == \ if document.getParentExplanationValue() == \
......
...@@ -26,8 +26,10 @@ ...@@ -26,8 +26,10 @@
# #
############################################################################## ##############################################################################
from collections import OrderedDict
from erp5.component.document.MovementGroup import MovementGroup from erp5.component.document.MovementGroup import MovementGroup
class PropertyMovementGroup(MovementGroup): class PropertyMovementGroup(MovementGroup):
""" """
The purpose of MovementGroup is to define how movements are grouped, The purpose of MovementGroup is to define how movements are grouped,
...@@ -40,7 +42,7 @@ class PropertyMovementGroup(MovementGroup): ...@@ -40,7 +42,7 @@ class PropertyMovementGroup(MovementGroup):
portal_type = 'Property Movement Group' portal_type = 'Property Movement Group'
def _getPropertyDict(self, movement, **kw): def _getPropertyDict(self, movement, **kw):
property_dict = {} property_dict = OrderedDict()
getProperty = movement.getProperty getProperty = movement.getProperty
for prop in self.getTestedPropertyList(): for prop in self.getTestedPropertyList():
property_dict[prop] = getProperty(prop) property_dict[prop] = getProperty(prop)
......
...@@ -36,7 +36,7 @@ class RequirementMovementGroup(MovementGroup): ...@@ -36,7 +36,7 @@ class RequirementMovementGroup(MovementGroup):
portal_type = 'Requirement Movement Group' portal_type = 'Requirement Movement Group'
def _getPropertyDict(self, movement, **kw): def _getPropertyDict(self, movement, **kw):
return {'requirement':self._getRequirementList(movement)} return {'requirement': self._getRequirementList(movement)}
def test(self, movement, property_dict, **kw): def test(self, movement, property_dict, **kw):
# We can always update # We can always update
......
...@@ -39,10 +39,7 @@ class RootAppliedRuleCausalityMovementGroup(MovementGroup): ...@@ -39,10 +39,7 @@ class RootAppliedRuleCausalityMovementGroup(MovementGroup):
portal_type = 'Root Applied Rule Causality Movement Group' portal_type = 'Root Applied Rule Causality Movement Group'
def _getPropertyDict(self, movement, **kw): def _getPropertyDict(self, movement, **kw):
property_dict = {} return {'root_causality_value_list': [self._getRootCausalityValue(movement)]}
root_causality_value = self._getRootCausalityValue(movement)
property_dict['root_causality_value_list'] = [root_causality_value]
return property_dict
def test(self, movement, property_dict, **kw): def test(self, movement, property_dict, **kw):
# We can always update # We can always update
......
...@@ -33,10 +33,6 @@ class SplitMovementGroup(MovementGroup): ...@@ -33,10 +33,6 @@ class SplitMovementGroup(MovementGroup):
This movement group is used to split all the movements that are aggregated This movement group is used to split all the movements that are aggregated
by the Simulation Select Method. by the Simulation Select Method.
XXX-Tatuya: However this test() method returns True, so the aggregated
movements can be inserted into existing Delivery/Line/Cell that are aggregated
by the Delivery Select Method. What use case this is applied for?
* Reference: * Reference:
http://www.erp5.org/HowToConfigureMovementGroup http://www.erp5.org/HowToConfigureMovementGroup
...@@ -56,7 +52,7 @@ class SplitMovementGroup(MovementGroup): ...@@ -56,7 +52,7 @@ class SplitMovementGroup(MovementGroup):
return {} return {}
def test(self, document, property_dict, **kw): def test(self, document, property_dict, **kw):
return True, property_dict return False, property_dict
def _separate(self, movement_list, **kw): def _separate(self, movement_list, **kw):
return [[[movement], {}] for movement in movement_list] return [[[movement], {}] for movement in movement_list]
...@@ -37,9 +37,7 @@ class TitleMovementGroup(MovementGroup): ...@@ -37,9 +37,7 @@ class TitleMovementGroup(MovementGroup):
portal_type = 'Title Movement Group' portal_type = 'Title Movement Group'
def _getPropertyDict(self, movement, **kw): def _getPropertyDict(self, movement, **kw):
property_dict = {} return {'title': self._getTitle(movement)}
property_dict['title'] = self._getTitle(movement)
return property_dict
def test(self, document, property_dict, **kw): def test(self, document, property_dict, **kw):
# If title is different, we want to update existing document instead # If title is different, we want to update existing document instead
......
...@@ -331,8 +331,6 @@ class BuilderMixin(XMLObject, Amount, Predicate): ...@@ -331,8 +331,6 @@ class BuilderMixin(XMLObject, Amount, Predicate):
# 'variation_category' or 'variation_property' pseudo properties, # 'variation_category' or 'variation_property' pseudo properties,
# which rely on the resource being set to discover which # which rely on the resource being set to discover which
# categories/properties to set # categories/properties to set
# XXX-Leo: in the future: using an ordered_dict would be nice,
# but this would have to be respected on Base._edit()
edit_order = [] edit_order = []
property_dict = {'edit_order': edit_order} property_dict = {'edit_order': edit_order}
for d in property_dict_list: for d in property_dict_list:
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
############################################################################## ##############################################################################
import zope.interface import zope.interface
from AccessControl import ClassSecurityInfo from AccessControl import ClassSecurityInfo
from AccessControl.AuthEncoding import pw_encrypt, pw_validate from AuthEncoding.AuthEncoding import pw_encrypt, pw_validate
from Products.ERP5Type.Globals import InitializeClass from Products.ERP5Type.Globals import InitializeClass
from Acquisition import aq_base from Acquisition import aq_base
from Products.ERP5Type import Permissions from Products.ERP5Type import Permissions
......
...@@ -31,7 +31,7 @@ import zope.interface ...@@ -31,7 +31,7 @@ import zope.interface
from Products.ERP5Type import Permissions from Products.ERP5Type import Permissions
from erp5.component.interface.ILoginAccountProvider import ILoginAccountProvider from erp5.component.interface.ILoginAccountProvider import ILoginAccountProvider
from AccessControl.AuthEncoding import pw_validate from AuthEncoding.AuthEncoding import pw_validate
from AccessControl import ClassSecurityInfo from AccessControl import ClassSecurityInfo
from Products.ERP5Type.Globals import InitializeClass from Products.ERP5Type.Globals import InitializeClass
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
</item> </item>
<item> <item>
<key> <string>message_no_such_property</string> </key> <key> <string>message_no_such_property</string> </key>
<value> <string>Reference must be defined</string> </value> <value> <string>Currency Code must be defined</string> </value>
</item> </item>
<item> <item>
<key> <string>portal_type</string> </key> <key> <string>portal_type</string> </key>
......
...@@ -18,6 +18,14 @@ ...@@ -18,6 +18,14 @@
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value> </value>
</item> </item>
<item>
<key> <string>constraint_property</string> </key>
<value>
<tuple>
<string>reference</string>
</tuple>
</value>
</item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <value>
...@@ -26,7 +34,7 @@ ...@@ -26,7 +34,7 @@
</item> </item>
<item> <item>
<key> <string>filter_parameter</string> </key> <key> <string>filter_parameter</string> </key>
<value> <string>python: {\'portal_type\': (\'Currency\', ), \'validation_state\': (\'validated\', ),\'reference\': object.getReference()}</string> </value> <value> <string>python: {\'portal_type\': (\'Currency\', ), \'validation_state\': (\'validated\', ), \'reference\': object.getReference()}</string> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
...@@ -34,7 +42,7 @@ ...@@ -34,7 +42,7 @@
</item> </item>
<item> <item>
<key> <string>message_invalid_attribute_unicity</string> </key> <key> <string>message_invalid_attribute_unicity</string> </key>
<value> <string>Another currency with reference ${value} already exists</string> </value> <value> <string>Another currency with Currency Code ${value} already exists</string> </value>
</item> </item>
<item> <item>
<key> <string>portal_type</string> </key> <key> <string>portal_type</string> </key>
......
currency_exchange_type_list = context.portal_categories.currency_exchange_type.getCategoryChildRelativeUrlList() currency_exchange_type_list = context.portal_categories.currency_exchange_type.getCategoryChildRelativeUrlList(
local_sort_id=("int_index", "title"))
resource_list = ['resource/%s' % context.getParentValue().getRelativeUrl()] resource_list = ['resource/%s' % context.getParentValue().getRelativeUrl()]
price_currency_list = [context.getPriceCurrency(base=True)] price_currency_list = [context.getPriceCurrency(base=True)]
......
...@@ -8,5 +8,5 @@ context.ERP5Site_checkDataWithScript("Base_migrateToEmbeddedFile", ...@@ -8,5 +8,5 @@ context.ERP5Site_checkDataWithScript("Base_migrateToEmbeddedFile",
active_process=active_process.getPath(), active_process=active_process.getPath(),
method_kw=dict(force=1)) method_kw=dict(force=1))
print "Migration started with process id: %s" %active_process.getPath() print("Migration started with process id: %s" %active_process.getPath())
return printed return printed
...@@ -5,6 +5,7 @@ notification_message_list = portal.portal_catalog.getDocumentValueList( ...@@ -5,6 +5,7 @@ notification_message_list = portal.portal_catalog.getDocumentValueList(
reference=reference, reference=reference,
language=language, language=language,
strict_language=strict_language, strict_language=strict_language,
limit=limit,
**kw **kw
) )
if notification_message_list: if notification_message_list:
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
</item> </item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>reference, language=None, strict_language=False, validation_state=None, **kw</string> </value> <value> <string>reference, language=None, strict_language=False, validation_state=None, limit=1, **kw</string> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
......
return ''.join(random.SystemRandom().sample(string.ascii_letters + string.digits, length)) return ''.join(random.SystemRandom().sample(string.ascii_letters + string.digits + '_-.$%:;!', length))
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
<key> <string>categories</string> </key> <key> <string>categories</string> </key>
<value> <value>
<tuple> <tuple>
<string>after_script/portal_workflow/movement_resource_interaction_workflow/script_Movement_copyBaseContributionFromResource</string> <string>after_script/portal_workflow/movement_resource_interaction_workflow/script_Movement_copyCategoryListFromResource</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>interaction_setBaseContribution</string> </value> <value> <string>interaction_setResource</string> </value>
</item> </item>
<item> <item>
<key> <string>portal_type</string> </key> <key> <string>portal_type</string> </key>
......
...@@ -2,6 +2,22 @@ movement = state_change['object'] ...@@ -2,6 +2,22 @@ movement = state_change['object']
resource = movement.getResourceValue() resource = movement.getResourceValue()
if resource is not None: if resource is not None:
# quantity unit can be acquired from resource (see Amount.getQuantityUnit)
# we check that it's really set on the movement.
if movement.hasQuantityUnit():
# if the movement already have a quantity unit which is valid for this resource, don't change it
if movement.getQuantityUnit() not in resource.getQuantityUnitList():
movement.setQuantityUnit(resource.getDefaultQuantityUnit())
else:
# initialise to the default quantity unit
movement.setQuantityUnit(resource.getDefaultQuantityUnit())
# if the movement already have a use which is valid for this resource, don't change it.
# ( unlike quantity unit, use is not acquired )
if movement.getUse() not in resource.getUseList():
# otherwise initialise to the default use
movement.setUse(resource.getDefaultUse())
# We can over-write base contribution list always. # We can over-write base contribution list always.
# Because when we change the resource, we need to set all the base contribution into movement. # Because when we change the resource, we need to set all the base contribution into movement.
# Imagine that we buy a product which have complex tax definitions with discounting. # Imagine that we buy a product which have complex tax definitions with discounting.
......
...@@ -60,9 +60,15 @@ ...@@ -60,9 +60,15 @@
</tuple> </tuple>
</value> </value>
</item> </item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>script_Movement_copyQuantityUnitFromResource</string> </value> <value> <string>script_Movement_copyCategoryListFromResource</string> </value>
</item> </item>
<item> <item>
<key> <string>portal_type</string> </key> <key> <string>portal_type</string> </key>
......
movement = state_change['object']
resource = movement.getResourceValue()
if resource is not None:
# quantity unit can be acquired from resource.
# (Amount class has getQuantityUnit method for backward compatibility and it tries to acquire value from resource).
if movement.hasCategory('quantity_unit'):
# if the movement already have a quantity unit which is valid for this resource, don't change it
movement_quantity_unit = movement.getQuantityUnit()
if movement_quantity_unit and movement_quantity_unit in resource.getQuantityUnitList():
return
# otherwise initialise to the default quantity unit
movement.setQuantityUnit(resource.getDefaultQuantityUnit())
movement = state_change['object']
resource = movement.getResourceValue()
if resource is not None:
# if the movement already have a use which is valid for this resource, don't change it
movement_use = movement.getUse()
if movement_use and movement_use in resource.getUseList():
return
# otherwise initialise to the default use
movement.setUse(resource.getDefaultUse())
...@@ -22,7 +22,7 @@ from erp5.component.document.File import File, _MARKER ...@@ -22,7 +22,7 @@ from erp5.component.document.File import File, _MARKER
from erp5.component.module.BTreeData import BTreeData from erp5.component.module.BTreeData import BTreeData
from ZPublisher.HTTPRequest import FileUpload from ZPublisher.HTTPRequest import FileUpload
from ZPublisher import HTTPRangeSupport from ZPublisher import HTTPRangeSupport
from webdav.common import rfc1123_date from zope.datetime import rfc1123_date
from mimetools import choose_boundary from mimetools import choose_boundary
from Products.CMFCore.utils import _setCacheHeaders, _ViewEmulator from Products.CMFCore.utils import _setCacheHeaders, _ViewEmulator
from DateTime import DateTime from DateTime import DateTime
......
from __future__ import print_function
from BTrees.LOBTree import LOBTree from BTrees.LOBTree import LOBTree
from persistent import Persistent from persistent import Persistent
import itertools import itertools
...@@ -314,7 +315,7 @@ class BTreeData(Persistent): ...@@ -314,7 +315,7 @@ class BTreeData(Persistent):
if __name__ == '__main__': if __name__ == '__main__':
def check(tree, length, read_offset, read_length, data_, keys=None): def check(tree, length, read_offset, read_length, data_, keys=None):
print list(tree._tree.items()) print(list(tree._tree.items()))
tree_length = len(tree) tree_length = len(tree)
tree_data = tree.read(read_offset, read_length) tree_data = tree.read(read_offset, read_length)
tree_iterator_data = ''.join(tree.iterate(read_offset, read_length)) tree_iterator_data = ''.join(tree.iterate(read_offset, read_length))
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>action</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_list</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_list</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>view</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
<value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Action Information</string> </value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>1.0</float> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>View</string> </value>
</item>
<item>
<key> <string>visible</string> </key>
<value> <int>1</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Expression" module="Products.CMFCore.Expression"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>text</string> </key>
<value> <string>string:${object_url}/HolidayAcquisitionModule_viewHolidayAcquisitionList</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>action</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_view</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_view</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>view</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
<value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Action Information</string> </value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>1.0</float> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>View</string> </value>
</item>
<item>
<key> <string>visible</string> </key>
<value> <int>1</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Expression" module="Products.CMFCore.Expression"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>text</string> </key>
<value> <string>string:${object_url}/HolidayAcquisition_view</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>leaves</string> </value> <value> <string>holidays</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>permissions</string> </key>
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Leaves</string> </value> <value> <string>Holidays</string> </value>
</item> </item>
<item> <item>
<key> <string>visible</string> </key> <key> <string>visible</string> </key>
...@@ -75,7 +75,7 @@ ...@@ -75,7 +75,7 @@
<dictionary> <dictionary>
<item> <item>
<key> <string>text</string> </key> <key> <string>text</string> </key>
<value> <string>string:${object_url}/Entity_viewLeaveRequestPeriodList</string> </value> <value> <string>string:${object_url}/Entity_viewHolidaySituation</string> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
...@@ -88,7 +88,7 @@ ...@@ -88,7 +88,7 @@
<dictionary> <dictionary>
<item> <item>
<key> <string>text</string> </key> <key> <string>text</string> </key>
<value> <string>python:portal.Base_checkPermission(\'leave_request_module\', \'View\')</string> </value> <value> <string>python:portal.Base_checkPermission(\'leave_request_module\', \'View\') and portal.Base_checkPermission(\'holiday_acquisition_module\', \'View\') </string> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
##############################################################################
#
# Copyright (c) 2007 Nexedi SARL and Contributors. All Rights Reserved.
# Courteaud Romain <romain@nexedi.com>
#
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from AccessControl import ClassSecurityInfo
from Products.ERP5Type import Permissions
from erp5.component.document.Event import Event
from Products.ZSQLCatalog.SQLCatalog import NegatedQuery, SimpleQuery
class HolidayAcquisition(Event):
meta_type = 'ERP5 Holiday Acquisition'
portal_type = 'Holiday Acquisition'
# Declarative security
security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation)
security.declareProtected(Permissions.AccessContentsInformation,
'getInventoriatedQuantity')
def getInventoriatedQuantity(self, default=None, *args, **kw):
default_quantity = self.getQuantity()
if self.getProperty('is_total_holiday', False):
remaining_quantity = self.getPortalObject().portal_simulation.getInventory(
portal_type=("Holiday Acquisition", "Leave Request Period"),
node_uid= self.getDestinationUid(),
at_date = self.getStartDate(),
simulation_state = 'confirmed',
uid = NegatedQuery(SimpleQuery(uid=self.getUid())))
return default_quantity - remaining_quantity
else:
return default_quantity
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Document Component" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>HolidayAcquisition</string> </value>
</item>
<item>
<key> <string>default_source_reference</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>document.erp5.HolidayAcquisition</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Document Component</string> </value>
</item>
<item>
<key> <string>sid</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>text_content_error_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>text_content_warning_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>erp5</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>component_validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<module>
<id>holiday_acquisition_module</id>
<permission_list>
<permission type='tuple'>
<name>Access Transient Objects</name>
<role>Assignee</role>
<role>Assignor</role>
<role>Associate</role>
<role>Auditor</role>
<role>Author</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Access contents information</name>
<role>Assignee</role>
<role>Assignor</role>
<role>Associate</role>
<role>Auditor</role>
<role>Author</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Access session data</name>
<role>Assignee</role>
<role>Assignor</role>
<role>Associate</role>
<role>Auditor</role>
<role>Author</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Add portal content</name>
<role>Assignor</role>
<role>Author</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Add portal folders</name>
<role>Assignor</role>
<role>Author</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Change local roles</name>
<role>Assignor</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Copy or Move</name>
<role>Assignee</role>
<role>Assignor</role>
<role>Associate</role>
<role>Auditor</role>
<role>Author</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Delete objects</name>
<role>Assignor</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>List folder contents</name>
<role>Assignee</role>
<role>Assignor</role>
<role>Associate</role>
<role>Auditor</role>
<role>Author</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>Modify portal content</name>
<role>Assignor</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>View</name>
<role>Assignee</role>
<role>Assignor</role>
<role>Associate</role>
<role>Auditor</role>
<role>Manager</role>
</permission>
<permission type='tuple'>
<name>View History</name>
<role>Assignee</role>
<role>Assignor</role>
<role>Associate</role>
<role>Auditor</role>
<role>Author</role>
<role>Manager</role>
</permission>
</permission_list>
<portal_type>Holiday Acquisition Module</portal_type>
<title>Holiday Acquisitions</title>
</module>
\ No newline at end of file
...@@ -11,6 +11,9 @@ ...@@ -11,6 +11,9 @@
<portal_type id="Group Presence Period"> <portal_type id="Group Presence Period">
<item>Calendar Exception</item> <item>Calendar Exception</item>
</portal_type> </portal_type>
<portal_type id="Holiday Acquisition Module">
<item>Holiday Acquisition</item>
</portal_type>
<portal_type id="Leave Request"> <portal_type id="Leave Request">
<item>Leave Request Period</item> <item>Leave Request Period</item>
</portal_type> </portal_type>
......
...@@ -5,6 +5,9 @@ ...@@ -5,6 +5,9 @@
<portal_type id="Group Calendar Module"> <portal_type id="Group Calendar Module">
<item>business_application</item> <item>business_application</item>
</portal_type> </portal_type>
<portal_type id="Holiday Acquisition Module">
<item>business_application</item>
</portal_type>
<portal_type id="Leave Request Module"> <portal_type id="Leave Request Module">
<item>business_application</item> <item>business_application</item>
</portal_type> </portal_type>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Base Type" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_property_domain_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>content_icon</string> </key>
<value> <string>folder_icon.gif</string> </value>
</item>
<item>
<key> <string>factory</string> </key>
<value> <string>addFolder</string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<tuple>
<string>module</string>
</tuple>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Holiday Acquisition Module</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Base Type</string> </value>
</item>
<item>
<key> <string>type_class</string> </key>
<value> <string>Folder</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>short_title</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="TranslationInformation" module="Products.ERP5Type.TranslationProviderBase"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>domain_name</string> </key>
<value> <string>erp5_ui</string> </value>
</item>
<item>
<key> <string>property_name</string> </key>
<value> <string>short_title</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="TranslationInformation" module="Products.ERP5Type.TranslationProviderBase"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>domain_name</string> </key>
<value> <string>erp5_ui</string> </value>
</item>
<item>
<key> <string>property_name</string> </key>
<value> <string>title</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Base Type" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>acquire_local_roles</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>content_icon</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>factory</string> </key>
<value> <string>addXMLObject</string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<tuple>
<string>event</string>
<string>delivery</string>
</tuple>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Holiday Acquisition</string> </value>
</item>
<item>
<key> <string>init_script</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>permission</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Base Type</string> </value>
</item>
<item>
<key> <string>type_class</string> </key>
<value> <string>HolidayAcquisition</string> </value>
</item>
<item>
<key> <string>type_interface</string> </key>
<value>
<tuple/>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
</item> </item>
<item> <item>
<key> <string>acquire_local_roles</string> </key> <key> <string>acquire_local_roles</string> </key>
<value> <int>1</int> </value> <value> <int>0</int> </value>
</item> </item>
<item> <item>
<key> <string>content_icon</string> </key> <key> <string>content_icon</string> </key>
...@@ -39,7 +39,9 @@ ...@@ -39,7 +39,9 @@
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>factory</string> </key> <key> <string>factory</string> </key>
...@@ -63,11 +65,15 @@ ...@@ -63,11 +65,15 @@
</item> </item>
<item> <item>
<key> <string>init_script</string> </key> <key> <string>init_script</string> </key>
<value> <string></string> </value> <value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>permission</string> </key> <key> <string>permission</string> </key>
<value> <string></string> </value> <value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
...@@ -77,6 +83,12 @@ ...@@ -77,6 +83,12 @@
<key> <string>type_class</string> </key> <key> <string>type_class</string> </key>
<value> <string>Folder</string> </value> <value> <string>Folder</string> </value>
</item> </item>
<item>
<key> <string>type_interface</string> </key>
<value>
<tuple/>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
......
...@@ -15,6 +15,10 @@ ...@@ -15,6 +15,10 @@
<type>Group Presence Period</type> <type>Group Presence Period</type>
<workflow>edit_workflow, group_calendar_interaction_workflow</workflow> <workflow>edit_workflow, group_calendar_interaction_workflow</workflow>
</chain> </chain>
<chain>
<type>Holiday Acquisition</type>
<workflow>edit_workflow, holiday_acquisition_workflow</workflow>
</chain>
<chain> <chain>
<type>Leave Request</type> <type>Leave Request</type>
<workflow>edit_workflow, leave_request_interaction_workflow, leave_request_workflow</workflow> <workflow>edit_workflow, leave_request_interaction_workflow, leave_request_workflow</workflow>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Property Sheet" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>LeaveRequestPeriodConstraint</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Property Sheet</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Property Existence Constraint" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>constraint_property</string> </key>
<value>
<tuple>
<string>quantity</string>
</tuple>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Property quantity must be defined</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>quantity_existence_constraint</string> </value>
</item>
<item>
<key> <string>message_no_such_property</string> </key>
<value> <string>Quantity must be defined in lines</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Property Existence Constraint</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
kw = {}
kw["node_uid"]=context.getUid()
kw["portal_type"]="Leave Request Period"
#raise ValueError("%s" % kw)
return context.getPortalObject().portal_simulation.getInventoryList(**kw)
...@@ -93,8 +93,9 @@ ...@@ -93,8 +93,9 @@
<key> <string>hidden</string> </key> <key> <string>hidden</string> </key>
<value> <value>
<list> <list>
<string>listbox_date</string> <string>listbox_start_date</string>
<string>listbox_running_total_price</string> <string>listbox_stop_date</string>
<string>listbox_quantity</string>
</list> </list>
</value> </value>
</item> </item>
...@@ -103,6 +104,7 @@ ...@@ -103,6 +104,7 @@
<value> <value>
<list> <list>
<string>my_title</string> <string>my_title</string>
<string>my_holiday_acquired_per_month</string>
</list> </list>
</value> </value>
</item> </item>
...@@ -120,7 +122,7 @@ ...@@ -120,7 +122,7 @@
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>Entity_viewLeaveRequestPeriodList</string> </value> <value> <string>Entity_viewHolidaySituation</string> </value>
</item> </item>
<item> <item>
<key> <string>method</string> </key> <key> <string>method</string> </key>
......
...@@ -13,12 +13,15 @@ ...@@ -13,12 +13,15 @@
<string>all_columns</string> <string>all_columns</string>
<string>columns</string> <string>columns</string>
<string>domain_tree</string> <string>domain_tree</string>
<string>editable</string>
<string>editable_columns</string> <string>editable_columns</string>
<string>enabled</string>
<string>list_method</string> <string>list_method</string>
<string>portal_types</string> <string>portal_types</string>
<string>selection_name</string>
<string>sort</string> <string>sort</string>
<string>sort_columns</string> <string>sort_columns</string>
<string>stat_columns</string>
<string>stat_method</string>
<string>title</string> <string>title</string>
<string>url_columns</string> <string>url_columns</string>
</list> </list>
...@@ -74,10 +77,20 @@ ...@@ -74,10 +77,20 @@
<key> <string>domain_tree</string> </key> <key> <string>domain_tree</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>editable_columns</string> </key> <key> <string>editable_columns</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>enabled</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item> <item>
<key> <string>field_id</string> </key> <key> <string>field_id</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -92,12 +105,6 @@ ...@@ -92,12 +105,6 @@
</item> </item>
<item> <item>
<key> <string>portal_types</string> </key> <key> <string>portal_types</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>selection_name</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
...@@ -108,6 +115,14 @@ ...@@ -108,6 +115,14 @@
<key> <string>sort_columns</string> </key> <key> <string>sort_columns</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>stat_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>stat_method</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>target</string> </key> <key> <string>target</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -150,7 +165,7 @@ ...@@ -150,7 +165,7 @@
<value> <value>
<list> <list>
<tuple> <tuple>
<string>stop_date</string> <string>start_date</string>
<string>Start Date</string> <string>Start Date</string>
</tuple> </tuple>
<tuple> <tuple>
...@@ -158,17 +173,17 @@ ...@@ -158,17 +173,17 @@
<string>Stop Date</string> <string>Stop Date</string>
</tuple> </tuple>
<tuple> <tuple>
<string>Movement_getExplanationTranslatedPortalType</string> <string>resource_title</string>
<string>Type</string> <string>Type</string>
</tuple> </tuple>
<tuple>
<string>getTranslatedSimulationStateTitle</string>
<string>State</string>
</tuple>
<tuple> <tuple>
<string>quantity</string> <string>quantity</string>
<string>Quantity</string> <string>Quantity</string>
</tuple> </tuple>
<tuple>
<string>getTranslatedSimulationStateTitle</string>
<string>State</string>
</tuple>
</list> </list>
</value> </value>
</item> </item>
...@@ -176,6 +191,10 @@ ...@@ -176,6 +191,10 @@
<key> <string>domain_tree</string> </key> <key> <string>domain_tree</string> </key>
<value> <int>1</int> </value> <value> <int>1</int> </value>
</item> </item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item> <item>
<key> <string>editable_columns</string> </key> <key> <string>editable_columns</string> </key>
<value> <value>
...@@ -194,6 +213,10 @@ ...@@ -194,6 +213,10 @@
<list/> <list/>
</value> </value>
</item> </item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item> <item>
<key> <string>field_id</string> </key> <key> <string>field_id</string> </key>
<value> <string>my_view_mode_listbox</string> </value> <value> <string>my_view_mode_listbox</string> </value>
...@@ -222,20 +245,12 @@ ...@@ -222,20 +245,12 @@
<key> <string>read_only</string> </key> <key> <string>read_only</string> </key>
<value> <int>0</int> </value> <value> <int>0</int> </value>
</item> </item>
<item>
<key> <string>selection_name</string> </key>
<value> <string>entity_leave_period_selection</string> </value>
</item>
<item> <item>
<key> <string>sort</string> </key> <key> <string>sort</string> </key>
<value> <value>
<list> <list>
<tuple> <tuple>
<string>stock.start_date</string> <string>stock.date</string>
<string>ASC</string>
</tuple>
<tuple>
<string>stock.uid</string>
<string>ASC</string> <string>ASC</string>
</tuple> </tuple>
</list> </list>
...@@ -252,13 +267,30 @@ ...@@ -252,13 +267,30 @@
</list> </list>
</value> </value>
</item> </item>
<item>
<key> <string>stat_columns</string> </key>
<value>
<list>
<tuple>
<string>quantity</string>
<string>Person_getTotalHolidayRemaining</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>stat_method</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
<item> <item>
<key> <string>target</string> </key> <key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value> <value> <string>Click to edit the target</string> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Transactions Related to this Entity</string> </value> <value> <string>Holiday History</string> </value>
</item> </item>
<item> <item>
<key> <string>url_columns</string> </key> <key> <string>url_columns</string> </key>
...@@ -292,7 +324,7 @@ ...@@ -292,7 +324,7 @@
<dictionary> <dictionary>
<item> <item>
<key> <string>_text</string> </key> <key> <string>_text</string> </key>
<value> <string>python:[(x, x) for x in here.getPortalAccountingTransactionTypeList()]</string> </value> <value> <string>here/getDestination</string> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
...@@ -318,7 +350,20 @@ ...@@ -318,7 +350,20 @@
<dictionary> <dictionary>
<item> <item>
<key> <string>method_name</string> </key> <key> <string>method_name</string> </key>
<value> <string>Entity_getLeaveRequestPeriodList</string> </value> <value> <string>Person_getHolidayHistoryList</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="Method" module="Products.Formulator.MethodField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>method_name</string> </key>
<value> <string>Person_getHolidayHistoryList</string> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<dictionary> <dictionary>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>listbox_date</string> </value> <value> <string>listbox_stop_date</string> </value>
</item> </item>
<item> <item>
<key> <string>message_values</string> </key> <key> <string>message_values</string> </key>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ERP5 Form" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value> <string>Base_doSelect</string> </value>
</item>
<item>
<key> <string>action_title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>edit_order</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>enctype</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<list>
<string>left</string>
<string>right</string>
<string>center</string>
<string>bottom</string>
<string>hidden</string>
</list>
</value>
</item>
<item>
<key> <string>groups</string> </key>
<value>
<dictionary>
<item>
<key> <string>bottom</string> </key>
<value>
<list>
<string>listbox</string>
</list>
</value>
</item>
<item>
<key> <string>center</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value>
<list>
<string>listbox_delivery_stop_date</string>
</list>
</value>
</item>
<item>
<key> <string>left</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>right</string> </key>
<value>
<list/>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>HolidayAcquisitionModule_viewHolidayAcquisitionList</string> </value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string>HolidayAcquisitionModule_viewHolidayAcquisitionList</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>ERP5 Form</string> </value>
</item>
<item>
<key> <string>pt</string> </key>
<value> <string>form_list</string> </value>
</item>
<item>
<key> <string>row_length</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>stored_encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Holiday Acquisitions</string> </value>
</item>
<item>
<key> <string>unicode_mode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>update_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_action_title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>all_columns</string>
<string>columns</string>
<string>portal_types</string>
<string>title</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>listbox</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>all_columns</string> </key>
<value>
<list>
<tuple>
<string>owner_title</string>
<string>Owner</string>
</tuple>
<tuple>
<string>creation_date</string>
<string>Creation Date</string>
</tuple>
<tuple>
<string>modification_date</string>
<string>Modification Date</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>all_editable_columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>columns</string> </key>
<value>
<list>
<tuple>
<string>title</string>
<string>Title</string>
</tuple>
<tuple>
<string>destination_title</string>
<string>Person</string>
</tuple>
<tuple>
<string>delivery.stop_date</string>
<string>Date</string>
</tuple>
<tuple>
<string>stock.quantity</string>
<string>Quantity</string>
</tuple>
<tuple>
<string>description</string>
<string>Description</string>
</tuple>
<tuple>
<string>translated_simulation_state_title</string>
<string>State</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_list_mode_listbox</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>portal_types</string> </key>
<value>
<list>
<tuple>
<string>Holiday Acquisition</string>
<string>Holiday Acquisition</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Holiday Acquisitions</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>required</string>
<string>title</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>listbox_delivery_stop_date</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_date_time_field</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Stop Date</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment