You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(19) |
Jul
(43) |
Aug
(96) |
Sep
(44) |
Oct
(49) |
Nov
(61) |
Dec
(129) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(55) |
Feb
(24) |
Mar
(79) |
Apr
(29) |
May
(29) |
Jun
(15) |
Jul
(87) |
Aug
(31) |
Sep
(10) |
Oct
(79) |
Nov
(60) |
Dec
(36) |
2008 |
Jan
(32) |
Feb
(26) |
Mar
(59) |
Apr
(56) |
May
(89) |
Jun
(22) |
Jul
(16) |
Aug
(21) |
Sep
(35) |
Oct
(53) |
Nov
(9) |
Dec
(5) |
2009 |
Jan
(15) |
Feb
(21) |
Mar
(40) |
Apr
(16) |
May
(45) |
Jun
(44) |
Jul
(93) |
Aug
(67) |
Sep
(89) |
Oct
(18) |
Nov
(17) |
Dec
(16) |
2010 |
Jan
(177) |
Feb
(76) |
Mar
(45) |
Apr
(26) |
May
(54) |
Jun
(65) |
Jul
(79) |
Aug
(81) |
Sep
(15) |
Oct
(6) |
Nov
(5) |
Dec
(14) |
2011 |
Jan
(22) |
Feb
(42) |
Mar
(16) |
Apr
(6) |
May
(15) |
Jun
(75) |
Jul
(86) |
Aug
(67) |
Sep
(233) |
Oct
(145) |
Nov
(60) |
Dec
|
2012 |
Jan
|
Feb
|
Mar
(3) |
Apr
(4) |
May
(12) |
Jun
(2) |
Jul
(3) |
Aug
|
Sep
|
Oct
(1) |
Nov
(6) |
Dec
(8) |
2013 |
Jan
(5) |
Feb
(14) |
Mar
(2) |
Apr
|
May
(28) |
Jun
(2) |
Jul
(2) |
Aug
|
Sep
(7) |
Oct
|
Nov
(4) |
Dec
(2) |
2014 |
Jan
(1) |
Feb
(10) |
Mar
(3) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <ann...@us...> - 2014-03-11 13:12:47
|
Revision: 3462 http://sourceforge.net/p/bika/code/3462 Author: anneline Date: 2014-03-11 13:12:41 +0000 (Tue, 11 Mar 2014) Log Message: ----------- soil samples Modified Paths: -------------- tracer/Tools.py tracer/example_sample_logs.csv tracer/skins/bika/import_samples.cpy tracer/skins/bika/import_samples_form.pt tracer/skins/bika/load_data.py tracer/skins/bika/load_data_small.py Added Paths: ----------- tracer/Geomorphology.py tracer/GrainSize.py tracer/Regolith.py tracer/Slope.py tracer/SlopeIntensity.py tracer/SoilType.py tracer/profiles/default/types/Geomorphology.xml tracer/profiles/default/types/GrainSize.xml tracer/profiles/default/types/Regolith.xml tracer/profiles/default/types/Slope.xml tracer/profiles/default/types/SlopeIntensity.xml tracer/profiles/default/types/SoilType.xml tracer/skins/bika/geomorphology.png tracer/skins/bika/grainsize.png tracer/skins/bika/regolith.png tracer/skins/bika/slope.png tracer/skins/bika/slopeintensity.png tracer/skins/bika/soiltype.png Added: tracer/Geomorphology.py =================================================================== --- tracer/Geomorphology.py (rev 0) +++ tracer/Geomorphology.py 2014-03-11 13:12:41 UTC (rev 3462) @@ -0,0 +1,55 @@ +from AccessControl import ClassSecurityInfo +from Products.CMFCore.CMFCorePermissions import View, \ + ModifyPortalContent +from Products.CMFDynamicViewFTI.browserdefault import \ + BrowserDefaultMixin +from Products.Archetypes.public import * +from Products.bika.BikaContent import BikaSchema +from Products.bika.config import I18N_DOMAIN, PROJECTNAME +from Products.CMFCore.utils import getToolByName + +schema = BikaSchema.copy() + Schema(( + TextField('GeomorphologyDescription', + widget=TextAreaWidget( + label='Geomorphology Description', + label_msgid='label_geomorphologydescription', + i18n_domain=I18N_DOMAIN, + ), + ), +)) + +class Geomorphology(BrowserDefaultMixin, BaseContent): + security = ClassSecurityInfo() + archetype_name = 'Geomorphology' + schema=schema + allowed_content_types = () + immediate_view = 'tool_base_edit' + default_view = 'tool_base_edit' + content_icon = 'geomorphology.png' + global_allow = 0 + filter_content_types = 0 + use_folder_tabs = 0 + __implements__ = BaseContent.__implements__ + ( + BrowserDefaultMixin.__implements__, ) + + actions = ( + {'id': 'edit', + 'name': 'Edit', + 'action': 'string:${object_url}/tool_base_edit', + 'permissions': (ModifyPortalContent,), + }, + ) + + factory_type_information = { + 'title': 'Geomorphology' + } + +registerType(Geomorphology) + +def modify_fti(fti): + for a in fti['actions']: + if a['id'] in ('syndication', 'references', 'metadata', + 'localroles'): + a['visible'] = 0 + return fti + Added: tracer/GrainSize.py =================================================================== --- tracer/GrainSize.py (rev 0) +++ tracer/GrainSize.py 2014-03-11 13:12:41 UTC (rev 3462) @@ -0,0 +1,55 @@ +from AccessControl import ClassSecurityInfo +from Products.CMFCore.CMFCorePermissions import View, \ + ModifyPortalContent +from Products.CMFDynamicViewFTI.browserdefault import \ + BrowserDefaultMixin +from Products.Archetypes.public import * +from Products.bika.BikaContent import BikaSchema +from Products.bika.config import I18N_DOMAIN, PROJECTNAME +from Products.CMFCore.utils import getToolByName + +schema = BikaSchema.copy() + Schema(( + TextField('GrainSizeDescription', + widget=TextAreaWidget( + label='Grain size Description', + label_msgid='label_grainsizedescription', + i18n_domain=I18N_DOMAIN, + ), + ), +)) + +class GrainSize(BrowserDefaultMixin, BaseContent): + security = ClassSecurityInfo() + archetype_name = 'GrainSize' + schema=schema + allowed_content_types = () + immediate_view = 'tool_base_edit' + default_view = 'tool_base_edit' + content_icon = 'grainsize.png' + global_allow = 0 + filter_content_types = 0 + use_folder_tabs = 0 + __implements__ = BaseContent.__implements__ + ( + BrowserDefaultMixin.__implements__, ) + + actions = ( + {'id': 'edit', + 'name': 'Edit', + 'action': 'string:${object_url}/tool_base_edit', + 'permissions': (ModifyPortalContent,), + }, + ) + + factory_type_information = { + 'title': 'GrainSize' + } + +registerType(GrainSize) + +def modify_fti(fti): + for a in fti['actions']: + if a['id'] in ('syndication', 'references', 'metadata', + 'localroles'): + a['visible'] = 0 + return fti + Added: tracer/Regolith.py =================================================================== --- tracer/Regolith.py (rev 0) +++ tracer/Regolith.py 2014-03-11 13:12:41 UTC (rev 3462) @@ -0,0 +1,55 @@ +from AccessControl import ClassSecurityInfo +from Products.CMFCore.CMFCorePermissions import View, \ + ModifyPortalContent +from Products.CMFDynamicViewFTI.browserdefault import \ + BrowserDefaultMixin +from Products.Archetypes.public import * +from Products.bika.BikaContent import BikaSchema +from Products.bika.config import I18N_DOMAIN, PROJECTNAME +from Products.CMFCore.utils import getToolByName + +schema = BikaSchema.copy() + Schema(( + TextField('RegolithDescription', + widget=TextAreaWidget( + label='Regolith Description', + label_msgid='label_regolithdescription', + i18n_domain=I18N_DOMAIN, + ), + ), +)) + +class Regolith(BrowserDefaultMixin, BaseContent): + security = ClassSecurityInfo() + archetype_name = 'Regolith' + schema=schema + allowed_content_types = () + immediate_view = 'tool_base_edit' + default_view = 'tool_base_edit' + content_icon = 'regolith.png' + global_allow = 0 + filter_content_types = 0 + use_folder_tabs = 0 + __implements__ = BaseContent.__implements__ + ( + BrowserDefaultMixin.__implements__, ) + + actions = ( + {'id': 'edit', + 'name': 'Edit', + 'action': 'string:${object_url}/tool_base_edit', + 'permissions': (ModifyPortalContent,), + }, + ) + + factory_type_information = { + 'title': 'Regolith' + } + +registerType(Regolith) + +def modify_fti(fti): + for a in fti['actions']: + if a['id'] in ('syndication', 'references', 'metadata', + 'localroles'): + a['visible'] = 0 + return fti + Added: tracer/Slope.py =================================================================== --- tracer/Slope.py (rev 0) +++ tracer/Slope.py 2014-03-11 13:12:41 UTC (rev 3462) @@ -0,0 +1,55 @@ +from AccessControl import ClassSecurityInfo +from Products.CMFCore.CMFCorePermissions import View, \ + ModifyPortalContent +from Products.CMFDynamicViewFTI.browserdefault import \ + BrowserDefaultMixin +from Products.Archetypes.public import * +from Products.bika.BikaContent import BikaSchema +from Products.bika.config import I18N_DOMAIN, PROJECTNAME +from Products.CMFCore.utils import getToolByName + +schema = BikaSchema.copy() + Schema(( + TextField('SlopeDescription', + widget=TextAreaWidget( + label='Slope Description', + label_msgid='label_slopedescription', + i18n_domain=I18N_DOMAIN, + ), + ), +)) + +class Slope(BrowserDefaultMixin, BaseContent): + security = ClassSecurityInfo() + archetype_name = 'Slope' + schema=schema + allowed_content_types = () + immediate_view = 'tool_base_edit' + default_view = 'tool_base_edit' + content_icon = 'slope.png' + global_allow = 0 + filter_content_types = 0 + use_folder_tabs = 0 + __implements__ = BaseContent.__implements__ + ( + BrowserDefaultMixin.__implements__, ) + + actions = ( + {'id': 'edit', + 'name': 'Edit', + 'action': 'string:${object_url}/tool_base_edit', + 'permissions': (ModifyPortalContent,), + }, + ) + + factory_type_information = { + 'title': 'Slope' + } + +registerType(Slope) + +def modify_fti(fti): + for a in fti['actions']: + if a['id'] in ('syndication', 'references', 'metadata', + 'localroles'): + a['visible'] = 0 + return fti + Added: tracer/SlopeIntensity.py =================================================================== --- tracer/SlopeIntensity.py (rev 0) +++ tracer/SlopeIntensity.py 2014-03-11 13:12:41 UTC (rev 3462) @@ -0,0 +1,55 @@ +from AccessControl import ClassSecurityInfo +from Products.CMFCore.CMFCorePermissions import View, \ + ModifyPortalContent +from Products.CMFDynamicViewFTI.browserdefault import \ + BrowserDefaultMixin +from Products.Archetypes.public import * +from Products.bika.BikaContent import BikaSchema +from Products.bika.config import I18N_DOMAIN, PROJECTNAME +from Products.CMFCore.utils import getToolByName + +schema = BikaSchema.copy() + Schema(( + TextField('SlopeIntensityDescription', + widget=TextAreaWidget( + label='Slope intensity Description', + label_msgid='label_slopeintensitydescription', + i18n_domain=I18N_DOMAIN, + ), + ), +)) + +class SlopeIntensity(BrowserDefaultMixin, BaseContent): + security = ClassSecurityInfo() + archetype_name = 'SlopeIntensity' + schema=schema + allowed_content_types = () + immediate_view = 'tool_base_edit' + default_view = 'tool_base_edit' + content_icon = 'slopeintensity.png' + global_allow = 0 + filter_content_types = 0 + use_folder_tabs = 0 + __implements__ = BaseContent.__implements__ + ( + BrowserDefaultMixin.__implements__, ) + + actions = ( + {'id': 'edit', + 'name': 'Edit', + 'action': 'string:${object_url}/tool_base_edit', + 'permissions': (ModifyPortalContent,), + }, + ) + + factory_type_information = { + 'title': 'SlopeIntensity' + } + +registerType(SlopeIntensity) + +def modify_fti(fti): + for a in fti['actions']: + if a['id'] in ('syndication', 'references', 'metadata', + 'localroles'): + a['visible'] = 0 + return fti + Added: tracer/SoilType.py =================================================================== --- tracer/SoilType.py (rev 0) +++ tracer/SoilType.py 2014-03-11 13:12:41 UTC (rev 3462) @@ -0,0 +1,55 @@ +from AccessControl import ClassSecurityInfo +from Products.CMFCore.CMFCorePermissions import View, \ + ModifyPortalContent +from Products.CMFDynamicViewFTI.browserdefault import \ + BrowserDefaultMixin +from Products.Archetypes.public import * +from Products.bika.BikaContent import BikaSchema +from Products.bika.config import I18N_DOMAIN, PROJECTNAME +from Products.CMFCore.utils import getToolByName + +schema = BikaSchema.copy() + Schema(( + TextField('SoilTypeDescription', + widget=TextAreaWidget( + label='Soil type Description', + label_msgid='label_soiltypedescription', + i18n_domain=I18N_DOMAIN, + ), + ), +)) + +class SoilType(BrowserDefaultMixin, BaseContent): + security = ClassSecurityInfo() + archetype_name = 'SoilType' + schema=schema + allowed_content_types = () + immediate_view = 'tool_base_edit' + default_view = 'tool_base_edit' + content_icon = 'soiltype.png' + global_allow = 0 + filter_content_types = 0 + use_folder_tabs = 0 + __implements__ = BaseContent.__implements__ + ( + BrowserDefaultMixin.__implements__, ) + + actions = ( + {'id': 'edit', + 'name': 'Edit', + 'action': 'string:${object_url}/tool_base_edit', + 'permissions': (ModifyPortalContent,), + }, + ) + + factory_type_information = { + 'title': 'SoilType' + } + +registerType(SoilType) + +def modify_fti(fti): + for a in fti['actions']: + if a['id'] in ('syndication', 'references', 'metadata', + 'localroles'): + a['visible'] = 0 + return fti + Modified: tracer/Tools.py =================================================================== --- tracer/Tools.py 2014-03-07 12:48:29 UTC (rev 3461) +++ tracer/Tools.py 2014-03-11 13:12:41 UTC (rev 3462) @@ -1745,13 +1745,14 @@ security = ClassSecurityInfo() id = 'sample_import_tool' - title = 'Sample Import Tool' - description = 'Imports Sample Data.' - meta_type = 'Sample Import Tool' + title = 'Soil Sample Import Tool' + description = 'Imports Soil Sample Data.' + meta_type = 'Soil Sample Import Tool' security.declareProtected(ManageSample, 'import_file') - def import_file(self, csvfile, filename, project_id, contact, sampletype, utmsystem, analyses, state): + def import_file(self, csvfile, filename, project_id, contact, utmsystem, analyses, state): import csv + pdb.set_trace() slash = filename.rfind('\\') full_name = filename[slash+1:] ext = full_name.rfind('.') @@ -1771,10 +1772,12 @@ row_count = 0 sample_count = 0 batch_remarks = [] - valid_headers = ['sample', 'trench', 'drillhole', 'from', 'to', \ - 'length', 'magsus', 'easting', 'northing', \ - 'eastingto', 'northingto', 'elevation', 'type'] + valid_headers = ['sample', 'type', 'gps-point', 'east', 'north', \ + 'soiltype', 'regolith', 'colour', 'grainsize', \ + 'geomorphology', 'slope', 'slopeintensity', 'depth', \ + 'comments'] started = False + errors = [] for row in reader: row_count = row_count + 1 if not row: continue @@ -1785,25 +1788,14 @@ if header in valid_headers: batch_headers.append(header) else: - msg = '%s invalid batch header' % header - transaction_note(msg) - return state.set(status='failure', portal_status_message=msg) + errors.append('%s invalid batch header' % header) + return errors started = True continue if started: sample = dict(zip(batch_headers, row)) samples.append(sample) - trenches = {} - drillholes = {} - for header in batch_headers: - if header == 'trench': - for trench in self.portal_catalog(portal_type='Trench'): - trenches[trench.Title.lower()] = trench.UID - if header == 'drillhole': - for drillhole in self.portal_catalog(portal_type='DrillHole'): - drillholes[drillhole.Title.lower()] = drillhole.UID - pad = 8192*' ' #REQUEST = self.REQUEST @@ -1813,37 +1805,133 @@ #REQUEST.RESPONSE.write(pad+'<input style="display: none;" id="inputTotal" value="%s">' % len(samples)) results = {} - errors = [] for sample in samples: sample_id = sample['sample'] - if 'trench' in batch_headers: - this = sample['trench'].lower() - if trenches.has_key(this): - sample['trench'] = trenches[this] - else: - errors.append('%s: invalid trench %s' %(sample_id, sample['trench'])) - sample['trench'] = None - if 'drillhole' in batch_headers: - this = sample['drillhole'].lower() - if drillholes.has_key(this): - sample['drillhole'] = drillholes[this] - else: - errors.append('%s: invalid drillhole %s' %(sample_id, sample['drillhole'])) - sample['drillhole'] = None - if errors: - return errors - - #REQUEST = self.REQUEST #REQUEST.RESPONSE.write(self.progress_bar(REQUEST=REQUEST)) #REQUEST.RESPONSE.write('<input style="display: none;" id="progressType" value="Sample import">') #REQUEST.RESPONSE.write('<input style="display: none;" id="progressDone" value="Validating...">') #REQUEST.RESPONSE.write(pad+'<input style="display: none;" id="inputTotal" value="%s">' % len(samples)) + # set up the reference data + soiltypes = {} + for x in self.portal_catalog(portal_type='SoilType'): + soiltypes[x.Title.lower()] = x.UID + + regoliths = {} + for x in self.portal_catalog(portal_type='Regolith'): + regoliths[x.Title.lower()] = x.UID + + colours = {} + for x in self.portal_catalog(portal_type='Colour'): + colours[x.Title.lower()] = x.UID + + grainsizes = {} + for x in self.portal_catalog(portal_type='GrainSize'): + grainsizes[x.Title.lower()] = x.UID + + geomorphologies = {} + for x in self.portal_catalog(portal_type='Geomorphology'): + geomorphologies[x.Title.lower()] = x.UID + + slopes = {} + for x in self.portal_catalog(portal_type='Slope'): + slopes[x.Title.lower()] = x.UID + + slopeintensities = {} + for x in self.portal_catalog(portal_type='SlopeIntensity'): + slopeintensities[x.Title.lower()] = x.UID + row_count = 0 + pdb.set_trace() for s in samples: + # Soil type + if d['soiltype'] == '': + soiltype = None + else: + this_code = d['soiltype'].lower() + if soiltypes.has_key(this_code): + soiltype = soiltypes[this_code] + else: + errors.append('%s not found SoilType %s'\ + %(d['sampleid'], d['soiltype'])) + soiltype = None + + # Regolith + if d['regolith'] == '': + regolith = None + else: + this_code = d['regolith'].lower() + if regoliths.has_key(this_code): + regolith = regoliths[this_code] + else: + errors.append('%s not found Regolith %s'\ + %(d['sampleid'], d['regolith'])) + regolith = None + + # Colour + if d['colour'] == '': + colour = None + else: + this_code = d['colour'].lower() + if colours.has_key(this_code): + colour = colours[this_code] + else: + errors.append('%s not found Colour %s'\ + %(d['sampleid'], d['colour'])) + colour = None + + # Grain size + if d['grainsize'] == '': + grainsize = None + else: + this_code = d['grainsize'].lower() + if grainsizes.has_key(this_code): + grainsize = grainsizes[this_code] + else: + errors.append('%s not found GrainSize %s'\ + %(d['sampleid'], d['grainsize'])) + grainsize = None + + # Geomorphology + if d['geomorphology'] == '': + geomorphology = None + else: + this_code = d['geomorphology'].lower() + if geomorphologies.has_key(this_code): + geomorphology = geomorphologies[this_code] + else: + errors.append('%s not found Geomorphology %s'\ + %(d['sampleid'], d['geomorphology'])) + geomorphology = None + + # Slope + if d['slope'] == '': + slope = None + else: + this_code = d['slope'].lower() + if slopes.has_key(this_code): + slope = slopes[this_code] + else: + errors.append('%s not found Slope %s'\ + %(d['sampleid'], d['slope'])) + slope = None + + # Slope intensity + if d['slopeintensity'] == '': + slopeintensity = None + else: + this_code = d['slopeintensity'].lower() + if slopeintensities.has_key(this_code): + slopeintensity = slopeintensities[this_code] + else: + errors.append('%s not found Slope intensity %s'\ + %(d['sampleid'], d['slopeintensity'])) + slopeintensity = None + + row_count = row_count + 1 #REQUEST.RESPONSE.write(pad+'<input style="display: none;" name="inputProgress" value="%s">' % row_count) item_remarks = [] @@ -1879,21 +1967,18 @@ Contact=contact, ClientSampleID=s['sample'], UTMSystem=utmsystem, - EastUTM=s['easting'], - NorthUTM=s['northing'], - EastUTMEnd=s['eastingto'], - NorthUTMEnd=s['northingto'], - OffsetFrom=s['from'], - OffsetTo=s['to'], - Length=s['length'], - MagSus=s['magsus'], - Elevation=s['elevation'], + EastUTM=s['east'], + NorthUTM=s['north'], DuplicateSample=duplicate, StandardSample=standard, BlankSample=blank, - Trench=s['trench'], - DrillHole=s['drillhole'], - SampleType=sampletype, + SoilType=soiltype, + Regolith=regolith, + Colour=colour, + GrainSize=grainsize, + Geomorphology=geomorphology, + Slope=slope, + SlopeIntensity=slopeintensity, Analyses=analyses, ) Modified: tracer/example_sample_logs.csv =================================================================== --- tracer/example_sample_logs.csv 2014-03-07 12:48:29 UTC (rev 3461) +++ tracer/example_sample_logs.csv 2014-03-11 13:12:41 UTC (rev 3462) @@ -1,1482 +1,1401 @@ -SampleID,gps-point,east,north,soiltype,regolith,colour,grainsize,geomorphology,slope,slopeintensity,depth,comments,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -120,123,e1,n1,SCL,Cp (1-3),BCK,1,PLAT,0,0,10,first comments,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -121,234,e2,n2,LATD,Ec (1-3),CRM,2,HLT,N,1,11,second comments,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -122,345,e3,n3,MTLZ,Dc (1-3),ORG,3,HSL,NE,2,12,third comments,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -123,456,e4,n4,SAPR,Eo (1-3),RED,1,LWE,S,3,13,fourth comments,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -124,567,e5,n5,RLAT,Da (1-3),PNK,2,HFTG,W,1,14,fifth comments,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,... [truncated message content] |
From: <ann...@us...> - 2014-03-07 12:48:34
|
Revision: 3461 http://sourceforge.net/p/bika/code/3461 Author: anneline Date: 2014-03-07 12:48:29 +0000 (Fri, 07 Mar 2014) Log Message: ----------- soil sampling Modified Paths: -------------- tracer/BikaSettings.py tracer/Extensions/Install.py tracer/Sample.py tracer/Tools.py tracer/__init__.py tracer/configlets.py tracer/profiles/default/actionicons.xml tracer/profiles/default/propertiestool.xml tracer/profiles/default/types.xml tracer/profiles/default/workflows.xml tracer/skins/bika/drillhole_edit_form.cpt tracer/skins/bika/drillhole_view.pt tracer/skins/bika/import_samples_form.pt tracer/skins/bika/load_data.py tracer/skins/bika/load_data_small.py tracer/skins/bika/load_data_tiny.py tracer/skins/bika/load_sample_data.py tracer/skins/bika/load_small_data.py tracer/skins/bika/load_tiny_data.py Added Paths: ----------- tracer/example_sample_batch.csv tracer/example_sample_logs.csv Modified: tracer/BikaSettings.py =================================================================== --- tracer/BikaSettings.py 2014-03-04 13:11:59 UTC (rev 3460) +++ tracer/BikaSettings.py 2014-03-07 12:48:29 UTC (rev 3461) @@ -192,6 +192,14 @@ i18n_domain=I18N_DOMAIN, ) ), + FileField('ExampleSampleLogImportFile', + widget=FileWidget( + showLink=True, + label='Example Sample Log Import File', + label_msgid='label_example_sample_log_import_file', + i18n_domain=I18N_DOMAIN, + ) + ), FileField('ExampleDrillHoleImportFile', widget=FileWidget( showLink=True, Modified: tracer/Extensions/Install.py =================================================================== --- tracer/Extensions/Install.py 2014-03-04 13:11:59 UTC (rev 3460) +++ tracer/Extensions/Install.py 2014-03-07 12:48:29 UTC (rev 3461) @@ -21,6 +21,8 @@ StratigraphiesExportTool, LithologiesExportTool, \ PDFBuildTool, \ ColoursTool, AlterationIntensitiesTool, AlterationsTool, \ + SoilTypesTool, RegolithsTool, GrainSizesTool, GeomorphologiesTool, \ + SlopesTool, SlopeIntensitiesTool, \ TexturesTool, WeatheringsTool, MoisturesTool, AbundancesTool, \ LithologicalContactsTool, FoliationsTool, DisplacementStructuresTool, \ VeinsTool, LineationsTool, OriMarkQualitiesTool @@ -263,6 +265,36 @@ ColoursTool.meta_type, None) print >> out, "Successfully installed Colours Tool." + if not hasattr(portal, 'bika_soiltypes'): + portal.manage_addProduct[PROJECTNAME].manage_addTool( + SoilTypesTool.meta_type, None) + print >> out, "Successfully installed Soil Types Tool." + + if not hasattr(portal, 'bika_regoliths'): + portal.manage_addProduct[PROJECTNAME].manage_addTool( + RegolithsTool.meta_type, None) + print >> out, "Successfully installed Regoliths Tool." + + if not hasattr(portal, 'bika_grainsizes'): + portal.manage_addProduct[PROJECTNAME].manage_addTool( + GrainSizesTool.meta_type, None) + print >> out, "Successfully installed Grain Sizes Tool." + + if not hasattr(portal, 'bika_geomorphologies'): + portal.manage_addProduct[PROJECTNAME].manage_addTool( + GeomorphologiesTool.meta_type, None) + print >> out, "Successfully installed Geomorphologies Tool." + + if not hasattr(portal, 'bika_slopes'): + portal.manage_addProduct[PROJECTNAME].manage_addTool( + SlopesTool.meta_type, None) + print >> out, "Successfully installed Slopes Tool." + + if not hasattr(portal, 'bika_slopeintensities'): + portal.manage_addProduct[PROJECTNAME].manage_addTool( + SlopeIntensitiesTool.meta_type, None) + print >> out, "Successfully installed Slope Intensities Tool." + if not hasattr(portal, 'bika_alterationintensities'): portal.manage_addProduct[PROJECTNAME].manage_addTool( AlterationIntensitiesTool.meta_type, None) Modified: tracer/Sample.py =================================================================== --- tracer/Sample.py 2014-03-04 13:11:59 UTC (rev 3460) +++ tracer/Sample.py 2014-03-07 12:48:29 UTC (rev 3461) @@ -160,6 +160,18 @@ i18n_domain=I18N_DOMAIN, ), ), + StringField('GPSPoint', + widget=StringWidget( + label='GPS Point', + label_msgid='label_gpspoint', + i18n_domain=I18N_DOMAIN, + ), + ), + ReferenceField('SoilType', + allowed_types=('SoilType',), + referenceClass=HoldingReference, + relationship='SampleSoilType', + ), BooleanField('DuplicateSample', default=False, index='FieldIndex', Modified: tracer/Tools.py =================================================================== --- tracer/Tools.py 2014-03-04 13:11:59 UTC (rev 3460) +++ tracer/Tools.py 2014-03-07 12:48:29 UTC (rev 3461) @@ -126,7 +126,158 @@ InitializeClass(ColoursTool) + ###################################################################### +# SoilTypesTool +###################################################################### + +from Products.bika.SoilType import schema as \ + soiltype_schema +from Products.bika.utils import make_listing_from_schema +columns = ('title', 'SoilTypeDescription') +soiltype_listing = make_listing_from_schema( + soiltype_schema, columns +) + +class SoilTypesTool(ToolFolder): + """ Container for soiltypes """ + + security = ClassSecurityInfo() + id = 'bika_soiltypes' + title = 'SoilType' + description = 'id: soiltype' + meta_type = 'Bika SoilType Tool' + managed_portal_type = 'SoilType' + listing_schema = soiltype_listing + +InitializeClass(SoilTypesTool) + +###################################################################### +# RegolithsTool +###################################################################### + +from Products.bika.Regolith import schema as \ + regolith_schema +from Products.bika.utils import make_listing_from_schema +columns = ('title', 'RegolithDescription') +regolith_listing = make_listing_from_schema( + regolith_schema, columns +) + +class RegolithsTool(ToolFolder): + """ Container for regoliths """ + + security = ClassSecurityInfo() + id = 'bika_regoliths' + title = 'Regoliths' + description = 'id: regolith' + meta_type = 'Bika Regoliths Tool' + managed_portal_type = 'Regolith' + listing_schema = regolith_listing + +InitializeClass(RegolithsTool) + +###################################################################### +# GrainSizesTool +###################################################################### + +from Products.bika.GrainSize import schema as \ + grainsize_schema +from Products.bika.utils import make_listing_from_schema +columns = ('title', 'GrainSizeDescription') +grainsize_listing = make_listing_from_schema( + grainsize_schema, columns +) + +class GrainSizesTool(ToolFolder): + """ Container for grainsizes """ + + security = ClassSecurityInfo() + id = 'bika_grainsizes' + title = 'Grain sizes' + description = 'id: grainsize' + meta_type = 'Bika GrainSizes Tool' + managed_portal_type = 'GrainSize' + listing_schema = grainsize_listing + +InitializeClass(GrainSizesTool) + +###################################################################### +# GeomorphologiesTool +###################################################################### + +from Products.bika.Geomorphology import schema as \ + geomorphology_schema +from Products.bika.utils import make_listing_from_schema +columns = ('title', 'GeomorphologyDescription') +geomorphology_listing = make_listing_from_schema( + geomorphology_schema, columns +) + +class GeomorphologiesTool(ToolFolder): + """ Container for geomorphologies """ + + security = ClassSecurityInfo() + id = 'bika_geomorphologies' + title = 'Geomorphologies' + description = 'id: geomorphology' + meta_type = 'Bika Geomorphologies Tool' + managed_portal_type = 'Geomorphology' + listing_schema = geomorphology_listing + +InitializeClass(GeomorphologiesTool) + +###################################################################### +# SlopesTool +###################################################################### + +from Products.bika.Slope import schema as \ + slope_schema +from Products.bika.utils import make_listing_from_schema +columns = ('title', 'SlopeDescription') +slope_listing = make_listing_from_schema( + slope_schema, columns +) + +class SlopesTool(ToolFolder): + """ Container for slopes """ + + security = ClassSecurityInfo() + id = 'bika_slopes' + title = 'Slopes' + description = 'id: slope' + meta_type = 'Bika Slopes Tool' + managed_portal_type = 'Slope' + listing_schema = slope_listing + +InitializeClass(SlopesTool) + +###################################################################### +# SlopeIntensitiesTool +###################################################################### + +from Products.bika.SlopeIntensity import schema as \ + slopeintensity_schema +from Products.bika.utils import make_listing_from_schema +columns = ('title', 'SlopeIntensityDescription') +slopeintensity_listing = make_listing_from_schema( + slopeintensity_schema, columns +) + +class SlopeIntensitiesTool(ToolFolder): + """ Container for slopeintensities """ + + security = ClassSecurityInfo() + id = 'bika_slopeintensities' + title = 'Slope Intensities' + description = 'id: slopeintensity' + meta_type = 'Bika Slope Intensity Tool' + managed_portal_type = 'SlopeIntensity' + listing_schema = slopeintensity_listing + +InitializeClass(SlopeIntensitiesTool) + +###################################################################### # RigsTool ###################################################################### Modified: tracer/__init__.py =================================================================== --- tracer/__init__.py 2014-03-04 13:11:59 UTC (rev 3460) +++ tracer/__init__.py 2014-03-07 12:48:29 UTC (rev 3461) @@ -58,6 +58,12 @@ import AnalysisService import AttachmentType import Colour + import SoilType + import Regolith + import GrainSize + import Geomorphology + import Slope + import SlopeIntensity import AlterationIntensity import Alteration import Texture @@ -90,6 +96,12 @@ import Tools tools = ( Tools.ColoursTool, + Tools.SoilTypesTool, + Tools.RegolithsTool, + Tools.GrainSizesTool, + Tools.GeomorphologiesTool, + Tools.SlopesTool, + Tools.SlopeIntensitiesTool, Tools.AlterationIntensitiesTool, Tools.AlterationsTool, Tools.TexturesTool, Modified: tracer/configlets.py =================================================================== --- tracer/configlets.py 2014-03-04 13:11:59 UTC (rev 3460) +++ tracer/configlets.py 2014-03-07 12:48:29 UTC (rev 3461) @@ -157,6 +157,54 @@ 'permission': (ManageBika,), 'imageUrl': 'colour.png',}, + {'id': 'bika_soiltypes', + 'appId': PROJECTNAME, + 'name': 'Soil types', + 'action': 'string:$portal_url/bika_soiltypes', + 'category': 'Bika', + 'permission': (ManageBika,), + 'imageUrl': 'soiltype.png',}, + + {'id': 'bika_regoliths', + 'appId': PROJECTNAME, + 'name': 'Regoliths', + 'action': 'string:$portal_url/bika_regoliths', + 'category': 'Bika', + 'permission': (ManageBika,), + 'imageUrl': 'regolith.png',}, + + {'id': 'bika_grainsizes', + 'appId': PROJECTNAME, + 'name': 'Grain sizes', + 'action': 'string:$portal_url/bika_grainsizes', + 'category': 'Bika', + 'permission': (ManageBika,), + 'imageUrl': 'grainsize.png',}, + + {'id': 'bika_geomorphologies', + 'appId': PROJECTNAME, + 'name': 'Geomorphologies', + 'action': 'string:$portal_url/bika_geomorphologies', + 'category': 'Bika', + 'permission': (ManageBika,), + 'imageUrl': 'geomorphology.png',}, + + {'id': 'bika_slopes', + 'appId': PROJECTNAME, + 'name': 'Slopes', + 'action': 'string:$portal_url/bika_slopes', + 'category': 'Bika', + 'permission': (ManageBika,), + 'imageUrl': 'slope.png',}, + + {'id': 'bika_slopeintensities', + 'appId': PROJECTNAME, + 'name': 'Slope intensities', + 'action': 'string:$portal_url/bika_slopeintensities', + 'category': 'Bika', + 'permission': (ManageBika,), + 'imageUrl': 'slopeintensity.png',}, + {'id': 'bika_alterationintensities', 'appId': PROJECTNAME, 'name': 'Alteration intensities', Added: tracer/example_sample_batch.csv =================================================================== --- tracer/example_sample_batch.csv (rev 0) +++ tracer/example_sample_batch.csv 2014-03-07 12:48:29 UTC (rev 3461) @@ -0,0 +1,10 @@ +,,,El Kaoua Khadra_CHARTER PACIFIC TRENCH SAMPLE LOCALITIES,,,,,,, +,,,WGS 84_UTM_ZONE 28 NORTH,,,,,,, +,,,,,,,,,, +sample,trench,drillhole,from,to,length,easting,northing,eastingto,northingto,magsus +KT0021196,T02,,0,2,2,617898.85,2166432.97,617898.76,2166434.97,330 +KT0021197,t02,,2,4,2,617898.76,2166434.97,617898.67,2166436.97,296 +KT0021198,t01,,4,6,2,617898.67,2166436.97,617898.58,2166438.97,103 +KT0021199,t01,,6,8,2,617898.58,2166438.97,617898.48,2166440.97,230 +KT0021201,t02,,8,10,2,617898.48,2166440.97,617898.39,2166442.96,311 +KT0021202,t03,,10,12,2,617898.39,2166442.96,617898.3,2166444.96,156 Added: tracer/example_sample_logs.csv =================================================================== --- tracer/example_sample_logs.csv (rev 0) +++ tracer/example_sample_logs.csv 2014-03-07 12:48:29 UTC (rev 3461) @@ -0,0 +1,1482 @@ +SampleID,gps-point,east,north,soiltype,regolith,colour,grainsize,geomorphology,slope,slopeintensity,depth,comments,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +120,123,e1,n1,SCL,Cp (1-3),BCK,1,PLAT,0,0,10,first comments,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +121,234,e2,n2,LATD,Ec (1-3),CRM,2,HLT,N,1,11,second comments,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +122,345,e3,n3,MTLZ,Dc (1-3),ORG,3,HSL,NE,2,12,third comments,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +123,456,e4,n4,SAPR,Eo (1-3),RED,1,LWE,S,3,13,fourth comments,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +124,567,e5,n5,RLAT,Da (1-3),PNK,2,HFTG,W,1,14,fifth comments,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,... [truncated message content] |
From: <ann...@us...> - 2014-03-04 13:12:02
|
Revision: 3460 http://sourceforge.net/p/bika/code/3460 Author: anneline Date: 2014-03-04 13:11:59 +0000 (Tue, 04 Mar 2014) Log Message: ----------- Modified Paths: -------------- tracer/skins/bika/drillhole_view.pt tracer/skins/bika/load_data.py Modified: tracer/skins/bika/drillhole_view.pt =================================================================== --- tracer/skins/bika/drillhole_view.pt 2014-02-27 13:13:24 UTC (rev 3459) +++ tracer/skins/bika/drillhole_view.pt 2014-03-04 13:11:59 UTC (rev 3460) @@ -188,39 +188,56 @@ <td class="left" tal:content="dlog/getToDepth"> </td> <td class="left" tal:content="dlog/getRecoveryKg"> </td> <td class="left" tal:define="moisture dlog/getMoisture"> - <span tal:condition="moisture" + <span tal:condition="moisture" title="this is the title" + tal:attributes="title moisture/getMoistureDescription" tal:content="moisture/Title"> </span></td> <td class="left" tal:define="colour dlog/getColour"> - <span tal:condition="colour" + <span tal:condition="colour" + title="" + tal:attributes="title colour/getColourDescription" tal:content="colour/Title"> </span> </td> <td class="left" tal:define="weathering dlog/getWeathering"> <span tal:condition="weathering" + title="" + tal:attributes="title weathering/getWeatheringDescription" tal:content="weathering/Title"> </span></td> <td class="left" tal:content="dlog/getGrainSize"> </td> <td class="left" tal:content="dlog/getClayFinesPercent"> </td> <td class="left" tal:define="lith1 dlog/getLithology1"> <span tal:condition="lith1" - tal:content="lith1/Title"> </span> </td> + title="" + tal:attributes="title lith1/Title" + tal:content="lith1/getLithCode"> </span> </td> <td class="left" tal:content="dlog/getLithology1Percent"> </td> <td class="left" tal:define="lith2 dlog/getLithology2"> <span tal:condition="lith2" - tal:content="lith2/Title"></span> + title="" + tal:attributes="title lith2/Title" + tal:content="lith2/getLithCode"></span> </td> <td class="left" tal:content="dlog/getLithology2Percent"> </td> <td class="left" tal:define="lith3 dlog/getLithology3"> <span tal:condition="lith3" - tal:content="lith3/Title"></span> + title="" + tal:attributes="title lith3/Title" + tal:content="lith3/getLithCode"></span> </td> <td class="left" tal:content="dlog/getLithology3Percent"> </td> <td class="left" tal:define="alt1 dlog/getAlteration1"> <span tal:condition="alt1" + title="" + tal:attributes="title alt1/getAlterationDescription" tal:content="alt1/Title"></span> </td> <td class="left" tal:define="alt2 dlog/getAlteration2"> <span tal:condition="alt2" + title="" + tal:attributes="title alt2/getAlterationDescription" tal:content="alt2/Title"></span> </td> <td class="left" tal:define="alt3 dlog/getAlteration3"> <span tal:condition="alt3" + title="" + tal:attributes="title alt3/getAlterationDescription" tal:content="alt3/Title"></span> </td> <td class="left" tal:define="altintensity dlog/getAlterationIntensity"> <span tal:condition="altintensity" @@ -229,6 +246,8 @@ <td class="left" tal:content="dlog/getSulphidePercent"> </td> <td class="left" tal:define="texture dlog/getTexture"> <span tal:condition="texture" + title="" + tal:attributes="title texture/getTextureDescription" tal:content="texture/Title"></span> </td> <td class="left" tal:content="dlog/getNotes"> </td> </tr> Modified: tracer/skins/bika/load_data.py =================================================================== --- tracer/skins/bika/load_data.py 2014-02-27 13:13:24 UTC (rev 3459) +++ tracer/skins/bika/load_data.py 2014-03-04 13:11:59 UTC (rev 3460) @@ -36,6 +36,7 @@ ('gr', 'graphitic'), ('he', 'hematite'), ('il', 'ilmenite'), + ('ko', 'kaolin'), ('ky', 'kyanite'), ('lm', 'limonite (undifferentiated iron oxyhydroxide)'), ('lx', 'leucoxene'), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ann...@us...> - 2014-02-27 13:13:31
|
Revision: 3459 http://sourceforge.net/p/bika/code/3459 Author: anneline Date: 2014-02-27 13:13:24 +0000 (Thu, 27 Feb 2014) Log Message: ----------- Modified Paths: -------------- tracer/DrillHole.py tracer/Tools.py tracer/profiles/default/catalog.xml tracer/skins/bika/drillhole_view.pt tracer/skins/bika/load_sample_data.py Modified: tracer/DrillHole.py =================================================================== --- tracer/DrillHole.py 2014-02-19 13:11:23 UTC (rev 3458) +++ tracer/DrillHole.py 2014-02-27 13:13:24 UTC (rev 3459) @@ -30,6 +30,7 @@ from Products.CMFDynamicViewFTI.browserdefault import \ BrowserDefaultMixin + schema = BikaSchema.copy() + Schema(( StringField('DrillHoleID', required=1, Modified: tracer/Tools.py =================================================================== --- tracer/Tools.py 2014-02-19 13:11:23 UTC (rev 3458) +++ tracer/Tools.py 2014-02-27 13:13:24 UTC (rev 3459) @@ -1886,7 +1886,6 @@ security.declareProtected(ManageSample, 'import_file') def import_file(self, csvfile, filename, project_id, state): import csv - pdb.set_trace() slash = filename.rfind('\\') full_name = filename[slash+1:] ext = full_name.rfind('.') @@ -1966,7 +1965,8 @@ lithologies = {} for x in self.portal_catalog(portal_type='Lithology'): - lithologies[x.Title.lower()] = x.UID + lith = x.getObject() + lithologies[lith.getLithCode().lower()] = x.UID alterations = {} for x in self.portal_catalog(portal_type='Alteration'): @@ -1987,8 +1987,10 @@ #REQUEST.RESPONSE.write(pad+'<input style="display: none;" name="inputProgress" value="%s">' % row_count) item_remarks = [] + + pdb.set_trace() if drillhole: - if not drillhole.ClientDrillHoleID() == d['drillhole']: + if not drillhole.getClientDrillHoleID() == d['drillhole']: drillhole = None if not drillhole: @@ -2008,140 +2010,150 @@ for h in valid_headers: if h not in batch_headers: d[h] = None - pdb.set_trace() # Moisture - if d['moisture'] is None: + if d['moisture'] == '': moisture = None else: this_code = d['moisture'].lower() if moistures.has_key(this_code): moisture = moistures[this_code] else: - errors.append(' %s Could not find Moisture %s'\ - %(d['from'], d['moisture'])) + errors.append('%s:%s-%s not found Moisture %s'\ + %(d['drillhole'], d['from'], d['to'], \ + d['moisture'])) moisture = None # Colour - if d['colour'] is None: + if d['colour'] == '': colour = None else: this_code = d['colour'].lower() if colours.has_key(this_code): colour = colours[this_code] else: - errors.append(' %s Could not find colour %s'\ - %(d['from'], d['colour'])) + errors.append('%s:%s-%s not found colour %s'\ + %(d['drillhole'], d['from'], d['to'], \ + d['colour'])) colour = None # Weathering - if d['weathering'] is None: + if d['weathering'] == '': weathering = None else: this_code = d['weathering'].lower() if weatherings.has_key(this_code): weathering = weatherings[this_code] else: - errors.append(' %s Could not find weathering %s'\ - %(d['from'], d['weathering'])) + errors.append('%s:%s-%s not found weathering %s'\ + %(d['drillhole'], d['from'], d['to'], \ + d['weathering'])) weathering = None # Lithology1 - if d['lithology1'] is None: + if d['lith1'] =='': lithology1 = None else: - this_code = d['lithology1'].lower() + this_code = d['lith1'].lower() if lithologies.has_key(this_code): lithology1 = lithologies[this_code] else: - errors.append(' %s Could not find lithology1 %s'\ - %(d['from'], d['lithology1'])) + errors.append('%s:%s-%s not found lithology1 %s'\ + %(d['drillhole'], d['from'], d['to'], \ + d['lith1'])) lithology1 = None # Lithology2 - if d['lithology2'] is None: + if d['lith2'] == '': lithology2 = None else: - this_code = d['lithology2'].lower() + this_code = d['lith2'].lower() if lithologies.has_key(this_code): lithology2 = lithologies[this_code] else: - errors.append(' %s Could not find lithology2 %s'\ - %(d['from'], d['lithology2'])) + errors.append('%s:%s-%s not found lithology2 %s'\ + %(d['drillhole'], d['from'], d['to'], \ + d['lith2'])) lithology2 = None # Lithology3 - if d['lithology3'] is None: + if d['lith3'] == '': lithology3 = None else: - this_code = d['lithology3'].lower() + this_code = d['lith3'].lower() if lithologies.has_key(this_code): lithology3 = lithologies[this_code] else: - errors.append(' %s Could not find lithology3 %s'\ - %(d['from'], d['lithology3'])) + errors.append('%s:%s-%s not found lithology3 %s'\ + %(d['drillhole'], d['from'], d['to'], \ + d['lith3'])) lithology3 = None # Alteration1 - if d['alteration1'] is None: + if d['alteration1'] == '': alteration1 = None else: this_code = d['alteration1'].lower() if alterations.has_key(this_code): alteration1 = alterations[this_code] else: - errors.append(' %s Could not find alteration1 %s'\ - %(d['from'], d['alteration1'])) + errors.append('%s:%s-%s not found alteration1 %s'\ + %(d['drillhole'], d['from'], d['to'], \ + d['alteration1'])) alteration1 = None # Alteration2= - if d['alteration2'] is None: + if d['alteration2'] == '': alteration2 = None else: this_code = d['alteration2'].lower() if alterations.has_key(this_code): alteration2 = alterations[this_code] else: - errors.append(' %s Could not find alteration2 %s'\ - %(d['from'], d['alteration2'])) + errors.append('%s:%s-%s not found alteration2 %s'\ + %(d['drillhole'], d['from'], d['to'], \ + d['alteration2'])) alteration2 = None # Alteration3 - if d['alteration3'] is None: + if d['alteration3'] == '': alteration3 = None else: this_code = d['alteration3'].lower() if alterations.has_key(this_code): alteration3 = alterations[this_code] else: - errors.append(' %s Could not find alteration3 %s'\ - %(d['from'], d['alteration3'])) + errors.append('%s:%s-%s not found alteration3 %s'\ + %(d['drillhole'], d['from'], d['to'], \ + d['alteration3'])) alteration3 = None # AlterationIntensity - if d['altintensity'] is None: + if d['altintensity'] == '': altintensity = None else: this_code = d['altintensity'].lower() if altintensities.has_key(this_code): altintensity = altintensities[this_code] else: - errors.append(' %s Could not find altintensity %s'\ - %(d['from'], d['altintensity'])) + errors.append('%s:%s-%s not found altintensity %s'\ + %(d['drillhole'], d['from'], d['to'], \ + d['altintensity'])) altintensity = None # Texture - if d['texture'] is None: + if d['texture'] == '': texture = None else: this_code = d['texture'].lower() if textures.has_key(this_code): texture = textures[this_code] else: - errors.append(' %s Could not find texture %s'\ - %(d['from'], d['texture'])) + errors.append('%s:%s-%s not found texture %s'\ + %(d['drillhole'], d['from'], d['to'], \ + d['texture'])) texture = None drilllog.edit( @@ -2168,6 +2180,7 @@ Texture=texture, Notes=d['comments'], ) + pdb.set_trace() return errors #valid = self.validate_arimport_c(arimport) #REQUEST.RESPONSE.write('<script>document.location.href="%s/project_drilllogs?portal_status_message=%s%%20imported"</script>' % (client.absolute_url(), sample_id)) Modified: tracer/profiles/default/catalog.xml =================================================================== --- tracer/profiles/default/catalog.xml 2014-02-19 13:11:23 UTC (rev 3458) +++ tracer/profiles/default/catalog.xml 2014-02-27 13:13:24 UTC (rev 3459) @@ -90,6 +90,9 @@ <index name="getClientTrenchID" meta_type="FieldIndex"> <indexed_attr value="getClientTrenchID"/> </index> + <index name="getClientDrillHoleID" meta_type="FieldIndex"> + <indexed_attr value="getClientDrillHoleID"/> + </index> <index name="getContactUID" meta_type="FieldIndex"> <indexed_attr value="getContactUID"/> </index> Modified: tracer/skins/bika/drillhole_view.pt =================================================================== --- tracer/skins/bika/drillhole_view.pt 2014-02-19 13:11:23 UTC (rev 3458) +++ tracer/skins/bika/drillhole_view.pt 2014-02-27 13:13:24 UTC (rev 3459) @@ -180,64 +180,59 @@ </thead> <tbody> -<!-- <tal:logs define="dlogs python:here.getLogData()" repeat="dlog dlogs"> -<tr tal:define=" - service analysis/getService; - result analysis/getResult; - may_view_result python:checkPermission('BIKA: View Results', analysis)"> -<td class="left"> - -<a onClick="" title="Click for details" - tal:attributes="onClick string:javascript:showMethod('$portal_url', '${service/getId}')" - tal:content="analysis/Title"> -Alcohol -</a> -<em style="white-space:nowrap;" - tal:condition="not:result"> - (<span tal:replace="analysis/getUnit">mg/l</span>)</em> +<tr > +<td class="left" tal:content="dlog/getFromDepth"> </td> +<td class="left" tal:content="dlog/getToDepth"> </td> +<td class="left" tal:content="dlog/getRecoveryKg"> </td> +<td class="left" tal:define="moisture dlog/getMoisture"> + <span tal:condition="moisture" + tal:content="moisture/Title"> </span></td> +<td class="left" tal:define="colour dlog/getColour"> + <span tal:condition="colour" + tal:content="colour/Title"> </span> </td> +<td class="left" tal:define="weathering dlog/getWeathering"> + <span tal:condition="weathering" + tal:content="weathering/Title"> </span></td> +<td class="left" tal:content="dlog/getGrainSize"> </td> +<td class="left" tal:content="dlog/getClayFinesPercent"> </td> +<td class="left" tal:define="lith1 dlog/getLithology1"> + <span tal:condition="lith1" + tal:content="lith1/Title"> </span> </td> +<td class="left" tal:content="dlog/getLithology1Percent"> </td> +<td class="left" tal:define="lith2 dlog/getLithology2"> + <span tal:condition="lith2" + tal:content="lith2/Title"></span> </td> -<div:result - tal:define=" - result_class python:here.result_in_range(analysis, sampletype_uid, specification); - global out_of_range python:result_class == 'out_of_range' and 1 or out_of_range"> - -<td tal:condition="may_view_result" - tal:attributes="class result_class"> -<tal:result tal:condition="result"> -<span tal:content="result">10</span> -<img tal:condition="python:result_class == 'out_of_range'" - src="" tal:attributes="src string:${portal/absolute_url}/exclamation.png"> -<div class="retested" - tal:condition="analysis/getRetested" - i18n:translate="retested">retested</div> -</tal:result> -<span - tal:condition="python:result" - tal:content="analysis/getUnit">ml</span> +<td class="left" tal:content="dlog/getLithology2Percent"> </td> +<td class="left" tal:define="lith3 dlog/getLithology3"> + <span tal:condition="lith3" + tal:content="lith3/Title"></span> </td> - -<td tal:condition="python:not may_view_result"> -<img src="" - tal:define="global tf python:1" - tal:attributes="src string:${portal/absolute_url}/to_follow.png"> +<td class="left" tal:content="dlog/getLithology3Percent"> </td> +<td class="left" tal:define="alt1 dlog/getAlteration1"> + <span tal:condition="alt1" + tal:content="alt1/Title"></span> </td> - -</div:result> -<td colspan="2" tal:condition="analysis_attach_allowed" class="left"> -<div tal:condition="python:not service.getAttachmentOption() == 'n'"> -<tal:attachments - tal:define="attachments analysis/getAttachment | nothing"> -<metal:block use-macro="here/attachments/macros/analysis_attachments_list"/> -</tal:attachments> -</div> -</td> - +<td class="left" tal:define="alt2 dlog/getAlteration2"> + <span tal:condition="alt2" + tal:content="alt2/Title"></span> </td> +<td class="left" tal:define="alt3 dlog/getAlteration3"> + <span tal:condition="alt3" + tal:content="alt3/Title"></span> </td> +<td class="left" tal:define="altintensity dlog/getAlterationIntensity"> + <span tal:condition="altintensity" + tal:content="altintensity/Title"></span> </td> +<td class="left" tal:content="dlog/getQzVeinPercent"> </td> +<td class="left" tal:content="dlog/getSulphidePercent"> </td> +<td class="left" tal:define="texture dlog/getTexture"> + <span tal:condition="texture" + tal:content="texture/Title"></span> </td> +<td class="left" tal:content="dlog/getNotes"> </td> </tr> </tal:logs> ---> </tbody> </table> Modified: tracer/skins/bika/load_sample_data.py =================================================================== --- tracer/skins/bika/load_sample_data.py 2014-02-19 13:11:23 UTC (rev 3458) +++ tracer/skins/bika/load_sample_data.py 2014-02-27 13:13:24 UTC (rev 3459) @@ -268,238 +268,339 @@ # Setup lithologies folder = context.bika_lithologies lithologies = ( - ('metamorphics undifferentiated', 'M', 'Metamorphic'), - ('amphibolite', 'Ma', 'Metamorphic'), - ('charnockite', 'Mgc', 'Metamorphic'), - ('granulite', 'Mg', 'Metamorphic'), - ('felsic granulite', 'Mgf', 'Metamorphic'), - ('mafic granulite', 'Mgm', 'Metamorphic'), - ('gneiss', 'Mn', 'Metamorphic'), - ('felsic gneiss', 'Mnf', 'Metamorphic'), - ('garnet gneiss', 'Mngt', 'Metamorphic'), - ('mafic gneiss', 'Mnm', 'Metamorphic'), - ('pelitic gneiss', 'Mnp', 'Metamorphic'), - ('quartofeldspathic gneiss', 'Mnqf', 'Metamorphic'), - ('psammitic gneiss', 'Mns', 'Metamorphic'), - ('hornfels', 'Mh', 'Metamorphic'), - ('andalusite hornfels ', 'Mhad', 'Metamorphic'), - ('cordierite hornfels ', 'Mhcd', 'Metamorphic'), - ('garnet hornfels', 'Mhgt', 'Metamorphic'), - ('pyroxene hornfels', 'Mhpx', 'Metamorphic'), - ('skarn, calc-silicate hornfels', 'Mhsk', 'Metamorphic'), - ('migmatite', 'Mig', 'Metamorphic'), - ('marble', 'Mm', 'Metamorphic'), - ('phyllite', 'Mph', 'Metamorphic'), - ('quartzite', 'Mq', 'Metamorphic'), - ('garnet quartzite', 'Mqgt', 'Metamorphic'), - ('schist', 'Ms', 'Metamorphic'), - ('actinolite schist', 'Msac', 'Metamorphic'), - ('biotite schist ', 'Msbt', 'Metamorphic'), - ('calc-schist', 'Msc', 'Metamorphic'), - ('cordierite schist ', 'Mscd', 'Metamorphic'), - ('chlorite schist ', 'Msch', 'Metamorphic'), - ('chloritoid schist ', 'Msct', 'Metamorphic'), - ('felsic schist ', 'Msf', 'Metamorphic'), - ('graphitic schist', 'Msgr', 'Metamorphic'), - ('garnet schist ', 'Msgt', 'Metamorphic'), - ('hornblende schist', 'Mshb', 'Metamorphic'), - ('kyanite schist', 'Msky', 'Metamorphic'), - ('slate', 'Msl', 'Metamorphic'), - ('mafic schist ', 'Msm', 'Metamorphic'), - ('mica schist', 'Msmi', 'Metamorphic'), - ('muscovite schist ', 'Msmu', 'Metamorphic'), - ('pelitic schist ', 'Msp', 'Metamorphic'), - ('psammitic schist ', 'Mss', 'Metamorphic'), - ('sillimanite schist', 'Mssl', 'Metamorphic'), - ('staurolite schist', 'Msst', 'Metamorphic'), - ('talc schist ', 'Mstc', 'Metamorphic'), - ('serpentinite', 'Mus', 'Metamorphic'), - ('fault breccia', 'Mxb', 'Metamorphic'), - ('cataclasite', 'Mxc', 'Metamorphic'), - ('mylonite', 'Mxm', 'Metamorphic'), - ('plutonic rocks undifferentiated', 'P', 'Plutonic'), - ('carbonatite intrusion', 'Pc', 'Plutonic'), - ('felsic intrusives', 'Pf', 'Plutonic'), - ('aplite', 'Pfa', 'Plutonic'), - ('granodiorite', 'Pfd', 'Plutonic'), - ('trondhjemite', 'Pfdt', 'Plutonic'), - ('granite', 'Pfg', 'Plutonic'), - ('adamellite', 'Pfga', 'Plutonic'), - ('pegmatite', 'Pfgp', 'Plutonic'), - ('felsic porphyry', 'Pfp', 'Plutonic'), - ('tonalite', 'Pft', 'Plutonic'), - ('intermediate intrusives', 'Pi', 'Plutonic'), - ('diorite', 'Pid', 'Plutonic'), - ('quartz diorite', 'Pidq', 'Plutonic'), - ('lamprophyre', 'Pil', 'Plutonic'), - ('monzonite', 'Pim', 'Plutonic'), - ('monzodiorite', 'Pimd', 'Plutonic'), - ('quartz monzodiorite', 'Pimdq', 'Plutonic'), - ('quartz monzonite', 'Pimq', 'Plutonic'), - ('intermediate porphyry', 'Pip', 'Plutonic'), - ('syenite', 'Pis', 'Plutonic'), - ('quartz syenite', 'Pisq', 'Plutonic'), - ('mafic intrusives', 'Pm', 'Plutonic'), - ('anorthosite', 'Pma', 'Plutonic'), - ('dolerite', 'Pmd', 'Plutonic'), - ('gabbro', 'Pmg', 'Plutonic'), - ('olivine gabbro', 'Pmgo', 'Plutonic'), - ('norite', 'Pmn', 'Plutonic'), - ('nepheline syenite', 'Pmns', 'Plutonic'), - ('mafic porphyry', 'Pmp', 'Plutonic'), - ('ultramafic intrusives', 'Pu', 'Plutonic'), - ('picrite', 'Puc', 'Plutonic'), - ('kimberlite', 'Puk', 'Plutonic'), - ('peridotite', 'Pup', 'Plutonic'), - ('pyroxenite', 'Pux', 'Plutonic'), - ('regolith undifferentiated', 'R', 'Regolith'), - ('duricrust', 'Rd', 'Regolith'), - ('calcrete', 'Rdc', 'Regolith'), - ('ferricrete', 'Rdf', 'Regolith'), - ('silcrete', 'Rds', 'Regolith'), - ('gossan', 'Rg', 'Regolith'), - ('residual regolith', 'Rr', 'Regolith'), - ('residual clay', 'Rrc', 'Regolith'), - ('mottled residual clay', 'Rrcm', 'Regolith'), - ('nodular residual clay', 'Rrcn', 'Regolith'), - ('pisolitic residual clay', 'Rrcp', 'Regolith'), - ('eluvium', 'Rre', 'Regolith'), - ('residual gravel', 'Rrg', 'Regolith'), - ('pisolitic residual gravel', 'Rrgp', 'Regolith'), - ('laterite', 'Rrl', 'Regolith'), - ('bauxite', 'Rrlb', 'Regolith'), - ('saprock', 'Rrlr', 'Regolith'), - ('saprolite', 'Rrls', 'Regolith'), - ('residual sand', 'Rrs', 'Regolith'), - ('soil A horizon', 'Rsa', 'Regolith'), - ('soil B horizon', 'Rsb', 'Regolith'), - ('soil C horizon', 'Rsc', 'Regolith'), - ('transported regolith', 'Rt', 'Regolith'), - ('alluvium', 'Rta', 'Regolith'), - ('clayey alluvium', 'Rtac', 'Regolith'), - ('gravelly alluvium', 'Rtag', 'Regolith'), - ('sandy alluvium', 'Rtas', 'Regolith'), - ('silty alluvium', 'Rtaz', 'Regolith'), - ('transported clay', 'Rtc', 'Regolith'), - ('mottled transported clay', 'Rtcm', 'Regolith'), - ('nodular transported clay', 'Rtcn', 'Regolith'), - ('pisolitic transported clay', 'Rtcp', 'Regolith'), - ('aeolian sand', 'Rtd', 'Regolith'), - ('transported gravel', 'Rtg', 'Regolith'), - ('pisolitic transported gravel', 'Rtgp', 'Regolith'), - ('transported sand', 'Rts', 'Regolith'), - ('colluvium', 'Rtv', 'Regolith'), - ('scree', 'Rtvs', 'Regolith'), - ('banded iron formation', 'BIF', 'Sedimentary'), - ('banded manganese formation', 'BMF', 'Sedimentary'), - ('sediments undifferentiated', 'S', 'Sedimentary'), - ('biogenic sediments', 'Sb', 'Sedimentary'), - ('coal', 'Sbc', 'Sedimentary'), - ('anthracite (black coal)', 'Sbca', 'Sedimentary'), - ('lignite (brown coal)', 'Sbcl', 'Sedimentary'), - ('peat', 'Sbcp', 'Sedimentary'), - ('chert', 'Sbh', 'Sedimentary'), - ('chemical sediments', 'Sc', 'Sedimentary'), - ('evaporite', 'Sce', 'Sedimentary'), - ('ironstone', 'Sci', 'Sedimentary'), - ('manganese stone', 'Scm', 'Sedimentary'), - ('phosphorite', 'Scp', 'Sedimentary'), - ('detrital sediments', 'Sd', 'Sedimentary'), - ('argillite', 'Sda', 'Sedimentary'), - ('graphitic shale', 'Sdag', 'Sedimentary'), - ('mudstone', 'Sdam', 'Sedimentary'), - ('shale', 'Sdas', 'Sedimentary'), - ('siltstone', 'Sdaz', 'Sedimentary'), - ('conglomerate', 'Sdc', 'Sedimentary'), - ('oligomictic conglomerate ', 'Sdco', 'Sedimentary'), - ('polymictic conglomerate', 'Sdcp', 'Sedimentary'), - ('sandstone', 'Sds', 'Sedimentary'), - ('arenite', 'Sdsa', 'Sedimentary'), - ('feldspathic sandstone', 'Sdsf', 'Sedimentary'), - ('greywacke', 'Sdsg', 'Sedimentary'), - ('arkose', 'Sdsk', 'Sedimentary'), - ('lithic sandstone', 'Sdsl', 'Sedimentary'), - ('quartzose sandstone', 'Sdsq', 'Sedimentary'), - ('carbonate rocks', 'Sl', 'Sedimentary'), - ('dolomite', 'Sld', 'Sedimentary'), - ('limestone', 'Sll', 'Sedimentary'), - ('marl', 'Slm', 'Sedimentary'), - ('volcaniclastics', 'Sv', 'Sedimentary'), - ('agglomerate', 'Sva', 'Sedimentary'), - ('tuff', 'Svt', 'Sedimentary'), - ('Vein undifferentiated', 'X', 'Vein'), - ('carbonate vein', 'Xc', 'Vein'), - ('quartz vein', 'Xq', 'Vein'), - ('quartz-albite vein', 'Xqa', 'Vein'), - ('quartz vein with apy', 'Xqapy', 'Vein'), - ('quartz vein with apy + po', 'Xqapypo', 'Vein'), - ('quartz vein with apy + py', 'Xqapypy', 'Vein'), - ('quartz vein with apy + py + po', 'Xqapypypo', 'Vein'), - ('quartz vein with Au', 'XqAu', 'Vein'), - ('quartz vein with Au + apy', 'XqAuapy', 'Vein'), - ('quartz vein with Au + apy + po', 'XqAuapypo', 'Vein'), - ('quartz vein with Au + apy + py', 'XqAuapypy', 'Vein'), - ('quartz vein with Au + apy + py + po', 'XqAuapypypo', 'Vein'), - ('quartz vein with Au + po', 'XqAupo', 'Vein'), - ('quartz vein with Au + py', 'XqAupy', 'Vein'), - ('quartz vein with Au + py + po', 'XqAupypo', 'Vein'), - ('quartz-carbonate vein', 'Xqc', 'Vein'), - ('quartz-carbonate-albite vein', 'Xqca', 'Vein'), - ('quartz-carbonate vein with apy', 'Xqcapy', 'Vein'), - ('quartz-carbonate vein with apy + po', 'Xqcapypo', 'Vein'), - ('quartz-carbonate vein with apy + py', 'Xqcapypy', 'Vein'), - ('quartz-carbonate vein with apy + py + po', 'Xqcapypypo', 'Vein'), - ('quartz-carbonate vein with Au', 'XqcAu', 'Vein'), - ('quartz-carbonate vein with Au + apy', 'XqcAuapy', 'Vein'), - ('quartz-carbonate vein with Au + apy + po', 'XqcAuapypo', 'Vein'), - ('quartz-carbonate vein with Au + apy + py', 'XqcAuapypy', 'Vein'), - ('quartz-carbonate vein with Au + apy + py + po', 'XqcAuapypypo', 'Vein'), - ('quartz-carbonate vein with Au + po', 'XqcAupo', 'Vein'), - ('quartz-carbonate vein with Au + py', 'XqcAupy', 'Vein'), - ('quartz-carbonate vein with Au + py + po', 'XqcAupypo', 'Vein'), - ('quartz-carbonate vein with po', 'Xqcpo', 'Vein'), - ('quartz-carbonate vein with py', 'Xqcpy', 'Vein'), - ('quartz-carbonate vein with py + po', 'Xqcpypo', 'Vein'), - ('quartz vein with po', 'Xqpo', 'Vein'), - ('quartz vein with py', 'Xqpy', 'Vein'), - ('quartz vein with py + po', 'Xqpypo', 'Vein'), - ('quartz-sulphide vein', 'Xqz', 'Vein'), - ('sulphide vein', 'Xz', 'Vein'), - ('arsenopyrite vein', 'Xzapy', 'Vein'), - ('pyrrhotite vein', 'Xzpo', 'Vein'), - ('pyrite vein', 'Xzpy', 'Vein'), - ('volcanics undifferentiated', 'V', 'Volcanic'), - ('carbonatite volcanics', 'Vc', 'Volcanic'), - ('felsic volcanics', 'Vf', 'Volcanic'), - ('dacite', 'Vfd', 'Volcanic'), - ('rhyolite', 'Vfr', 'Volcanic'), - ('intermediate volcanics', 'Vi', 'Volcanic'), - ('andesite', 'Via', 'Volcanic'), - ('basaltic andesite', 'Vib', 'Volcanic'), - ('latite', 'Vil', 'Volcanic'), - ('trachyte', 'Vit', 'Volcanic'), - ('trachyandesite', 'Vita', 'Volcanic'), - ('mafic volcanics', 'Vm', 'Volcanic'), - ('basalt', 'Vmb', 'Volcanic'), - ('alkali basalt', 'Vmba', 'Volcanic'), - ('komatiitic basalt', 'Vmbk', 'Volcanic'), - ('olivine basalt', 'Vmbo', 'Volcanic'), - ('tholeiitic basalt', 'Vmbt', 'Volcanic'), - ('phonolite', 'Vmp', 'Volcanic'), - ('trachybasalt', 'Vmt', 'Volcanic'), - ('ultramafic volcanics', 'Vu', 'Volcanic'), - ('basanite', 'Vub', 'Volcanic'), - ('komatiite', 'Vuk', 'Volcanic'), - ('nephelinite', 'Vun', 'Volcanic'), +('chlorite breccia', 'BL'), +('quartz breccia', 'BQ'), +('quartz - carbonate breccia', 'BQC'), +('quartz - geothite breccia', 'BQG'), +('fault breccia (gouge and cataclasites)', 'BTF'), +('wallrock breccia', 'BW'), +('Gossan', 'GS'), +('agglomerate', 'IAGL'), +('andesite', 'IAND'), +('basalt', 'IBAS'), +('dacite', 'IDAC'), +('diorite, qz-diorite', 'IDIO'), +('diorite', 'IDIO'), +('dolerite', 'IDOL'), +('dunite', 'IDUN'), +('undifferentiated felsic rock', 'IF'), +('gabbro', 'IGAB'), +('granite', 'IGRA'), +('granodiorite', 'IGRN'), +('granitoid', 'IGRT'), +('harzburgite', 'IHAR'), +('undifferentiated intermediate rock', 'II'), +('kimberlite', 'IKIM'), +('komatite', 'IKOM'), +('lamproite', 'ILAM'), +('lapillistone', 'ILAST'), +('lapilli-tuff', 'ILATU'), +('undifferentiated malic rock', 'IM'), +('undifferentiated plutonic or hypabyssal rock', 'IP'), +('undifferentiated pyroclastic rock', 'IPCL'), +('pyroxenite', 'IPYX'), +('rhyolite', 'IRHY'), +('tonalite', 'ITON'), +('tuff', 'ITU'), +('tuff-breccia', 'ITUBR'), +('undifferentiated alkaline ultramafic rock', 'IUA'), +('ultramafic lamprohyre', 'IULAM'), +('undifferentiated ultramafic rock', 'IUM'), +('undifferentiated volcanic rock', 'IV'), +('undifferentiated regolith', 'R'), +('undifferentiated boulder dominated regolith', 'RB'), +('undifferentiated clay dominated regolith', 'RC'), +('calcrete', 'RcaC'), +('ferricrete', 'RfeC'), +('in situ clay', 'RIC'), +('undifferentiated saprolite', 'RIS'), +('saprolitic phylite', 'RIS-SP'), +('undifferentiated laterite', 'RL'), +('lateritic gravel', 'RLG'), +('undifferentiated sand dominated regolith', 'RS'), +('silcrete', 'RsiC'), +('soil', 'RSOIL'), +('transported clay', 'RTC'), +('transported gravel', 'RTG'), +('transported sand', 'RTS'), +('alternating clay and silt-sized horizons', 'SACLSI'), +('alternating sand and pebble-sized horizons', 'SASAPE'), +('alternating silt and sand-sized horizons', 'SASISA'), +('sedimentary breccia', 'SB'), +('chert', 'SC'), +('dolomite', 'SD'), +('iron formation', 'SF'), +('conglomerate', 'SG'), +('limestone', 'SL'), +('mudstone, claystone, siltstone, argillite', 'SM'), +('sandstone, arenite', 'SS'), +('undifferented sediment', 'SU'), +('volcaniclastic sediment', 'SV'), +('wacke (sand sized rock consiting of 15-75% matrix)', 'SW'), +('Carbonate veins (>=50% of interval)', 'VC'), +('Quartz vein (>=50% of interval)', 'VQ'), +('quartz - carbonate veins (qz+ca >+50% of interval)', 'VQC'), +('quartz - carbonate - chlorite veins (>=50% qz+ca +cl)', 'VQCL'), +('quartz - carbonate - sulphide veins(>=50% qz+ca, 10-90% sx)', 'VQCX'), +('quartz - chlorite veins(>=50% qz+cl)', 'VQL'), +('quartz - tourmaline veins', 'VQT'), +('quartz - tourmaline sulfide veins', 'VQTS'), +('quartz - sulphide veins (>=50%qz, 10-90% sx)', 'VQX'), +('sericite veins (>=50% of interval)', 'VR'), +('Sulphide veins (>=90% of interval)', 'VX'), +('massive sulphide (>=50% of interval)', 'XM'), +('quartz - carbonate mylonite', 'YQC'), +('quartz - sericite mylonite', 'YQR'), +('actinolite schiste', 'ZAC'), +('amphibolite', 'ZAM'), +('chlorite schist', 'ZCH'), +('hornfels', 'ZHO'), +('chlorite schist', 'ZL'), +('marble', 'ZMA'), +('mica schist', 'ZMI'), +('phyllite (silky or lustrous sheen, with recognizable mica < 0.1mm)', 'ZPH'), +('quartz - sericite schist', 'ZQR'), +('quartz schist', 'ZQU'), +('quartzite', 'ZQZ'), +('undifferented schist', 'ZS'), +('slate with a strong fissility; no mica recognizable by naked eye', 'ZSL'), +('talc schist', 'ZTA'), + ) +# full lith list, but not used +#lithologies = ( +# ('metamorphics undifferentiated', 'M', 'Metamorphic'), +# ('amphibolite', 'Ma', 'Metamorphic'), +# ('charnockite', 'Mgc', 'Metamorphic'), +# ('granulite', 'Mg', 'Metamorphic'), +# ('felsic granulite', 'Mgf', 'Metamorphic'), +# ('mafic granulite', 'Mgm', 'Metamorphic'), +# ('gneiss', 'Mn', 'Metamorphic'), +# ('felsic gneiss', 'Mnf', 'Metamorphic'), +# ('garnet gneiss', 'Mngt', 'Metamorphic'), +# ('mafic gneiss', 'Mnm', 'Metamorphic'), +# ('pelitic gneiss', 'Mnp', 'Metamorphic'), +# ('quartofeldspathic gneiss', 'Mnqf', 'Metamorphic'), +# ('psammitic gneiss', 'Mns', 'Metamorphic'), +# ('hornfels', 'Mh', 'Metamorphic'), +# ('andalusite hornfels ', 'Mhad', 'Metamorphic'), +# ('cordierite hornfels ', 'Mhcd', 'Metamorphic'), +# ('garnet hornfels', 'Mhgt', 'Metamorphic'), +# ('pyroxene hornfels', 'Mhpx', 'Metamorphic'), +# ('skarn, calc-silicate hornfels', 'Mhsk', 'Metamorphic'), +# ('migmatite', 'Mig', 'Metamorphic'), +# ('marble', 'Mm', 'Metamorphic'), +# ('phyllite', 'Mph', 'Metamorphic'), +# ('quartzite', 'Mq', 'Metamorphic'), +# ('garnet quartzite', 'Mqgt', 'Metamorphic'), +# ('schist', 'Ms', 'Metamorphic'), +# ('actinolite schist', 'Msac', 'Metamorphic'), +# ('biotite schist ', 'Msbt', 'Metamorphic'), +# ('calc-schist', 'Msc', 'Metamorphic'), +# ('cordierite schist ', 'Mscd', 'Metamorphic'), +# ('chlorite schist ', 'Msch', 'Metamorphic'), +# ('chloritoid schist ', 'Msct', 'Metamorphic'), +# ('felsic schist ', 'Msf', 'Metamorphic'), +# ('graphitic schist', 'Msgr', 'Metamorphic'), +# ('garnet schist ', 'Msgt', 'Metamorphic'), +# ('hornblende schist', 'Mshb', 'Metamorphic'), +# ('kyanite schist', 'Msky', 'Metamorphic'), +# ('slate', 'Msl', 'Metamorphic'), +# ('mafic schist ', 'Msm', 'Metamorphic'), +# ('mica schist', 'Msmi', 'Metamorphic'), +# ('muscovite schist ', 'Msmu', 'Metamorphic'), +# ('pelitic schist ', 'Msp', 'Metamorphic'), +# ('psammitic schist ', 'Mss', 'Metamorphic'), +# ('sillimanite schist', 'Mssl', 'Metamorphic'), +# ('staurolite schist', 'Msst', 'Metamorphic'), +# ('talc schist ', 'Mstc', 'Metamorphic'), +# ('serpentinite', 'Mus', 'Metamorphic'), +# ('fault breccia', 'Mxb', 'Metamorphic'), +# ('cataclasite', 'Mxc', 'Metamorphic'), +# ('mylonite', 'Mxm', 'Metamorphic'), +# ('plutonic rocks undifferentiated', 'P', 'Plutonic'), +# ('carbonatite intrusion', 'Pc', 'Plutonic'), +# ('felsic intrusives', 'Pf', 'Plutonic'), +# ('aplite', 'Pfa', 'Plutonic'), +# ('granodiorite', 'Pfd', 'Plutonic'), +# ('trondhjemite', 'Pfdt', 'Plutonic'), +# ('granite', 'Pfg', 'Plutonic'), +# ('adamellite', 'Pfga', 'Plutonic'), +# ('pegmatite', 'Pfgp', 'Plutonic'), +# ('felsic porphyry', 'Pfp', 'Plutonic'), +# ('tonalite', 'Pft', 'Plutonic'), +# ('intermediate intrusives', 'Pi', 'Plutonic'), +# ('diorite', 'Pid', 'Plutonic'), +# ('quartz diorite', 'Pidq', 'Plutonic'), +# ('lamprophyre', 'Pil', 'Plutonic'), +# ('monzonite', 'Pim', 'Plutonic'), +# ('monzodiorite', 'Pimd', 'Plutonic'), +# ('quartz monzodiorite', 'Pimdq', 'Plutonic'), +# ('quartz monzonite', 'Pimq', 'Plutonic'), +# ('intermediate porphyry', 'Pip', 'Plutonic'), +# ('syenite', 'Pis', 'Plutonic'), +# ('quartz syenite', 'Pisq', 'Plutonic'), +# ('mafic intrusives', 'Pm', 'Plutonic'), +# ('anorthosite', 'Pma', 'Plutonic'), +# ('dolerite', 'Pmd', 'Plutonic'), +# ('gabbro', 'Pmg', 'Plutonic'), +# ('olivine gabbro', 'Pmgo', 'Plutonic'), +# ('norite', 'Pmn', 'Plutonic'), +# ('nepheline syenite', 'Pmns', 'Plutonic'), +# ('mafic porphyry', 'Pmp', 'Plutonic'), +# ('ultramafic intrusives', 'Pu', 'Plutonic'), +# ('picrite', 'Puc', 'Plutonic'), +# ('kimberlite', 'Puk', 'Plutonic'), +# ('peridotite', 'Pup', 'Plutonic'), +# ('pyroxenite', 'Pux', 'Plutonic'), +# ('regolith undifferentiated', 'R', 'Regolith'), +# ('duricrust', 'Rd', 'Regolith'), +# ('calcrete', 'Rdc', 'Regolith'), +# ('ferricrete', 'Rdf', 'Regolith'), +# ('silcrete', 'Rds', 'Regolith'), +# ('gossan', 'Rg', 'Regolith'), +# ('residual regolith', 'Rr', 'Regolith'), +# ('residual clay', 'Rrc', 'Regolith'), +# ('mottled residual clay', 'Rrcm', 'Regolith'), +# ('nodular residual clay', 'Rrcn', 'Regolith'), +# ('pisolitic residual clay', 'Rrcp', 'Regolith'), +# ('eluvium', 'Rre', 'Regolith'), +# ('residual gravel', 'Rrg', 'Regolith'), +# ('pisolitic residual gravel', 'Rrgp', 'Regolith'), +# ('laterite', 'Rrl', 'Regolith'), +# ('bauxite', 'Rrlb', 'Regolith'), +# ('saprock', 'Rrlr', 'Regolith'), +# ('saprolite', 'Rrls', 'Regolith'), +# ('residual sand', 'Rrs', 'Regolith'), +# ('soil A horizon', 'Rsa', 'Regolith'), +# ('soil B horizon', 'Rsb', 'Regolith'), +# ('soil C horizon', 'Rsc', 'Regolith'), +# ('transported regolith', 'Rt', 'Regolith'), +# ('alluvium', 'Rta', 'Regolith'), +# ('clayey alluvium', 'Rtac', 'Regolith'), +# ('gravelly alluvium', 'Rtag', 'Regolith'), +# ('sandy alluvium', 'Rtas', 'Regolith'), +# ('silty alluvium', 'Rtaz', 'Regolith'), +# ('transported clay', 'Rtc', 'Regolith'), +# ('mottled transported clay', 'Rtcm', 'Regolith'), +# ('nodular transported clay', 'Rtcn', 'Regolith'), +# ('pisolitic transported clay', 'Rtcp', 'Regolith'), +# ('aeolian sand', 'Rtd', 'Regolith'), +# ('transported gravel', 'Rtg', 'Regolith'), +# ('pisolitic transported gravel', 'Rtgp', 'Regolith'), +# ('transported sand', 'Rts', 'Regolith'), +# ('colluvium', 'Rtv', 'Regolith'), +# ('scree', 'Rtvs', 'Regolith'), +# ('banded iron formation', 'BIF', 'Sedimentary'), +# ('banded manganese formation', 'BMF', 'Sedimentary'), +# ('sediments undifferentiated', 'S', 'Sedimentary'), +# ('biogenic sediments', 'Sb', 'Sedimentary'), +# ('coal', 'Sbc', 'Sedimentary'), +# ('anthracite (black coal)', 'Sbca', 'Sedimentary'), +# ('lignite (brown coal)', 'Sbcl', 'Sedimentary'), +# ('peat', 'Sbcp', 'Sedimentary'), +# ('chert', 'Sbh', 'Sedimentary'), +# ('chemical sediments', 'Sc', 'Sedimentary'), +# ('evaporite', 'Sce', 'Sedimentary'), +# ('ironstone', 'Sci', 'Sedimentary'), +# ('manganese stone', 'Scm', 'Sedimentary'), +# ('phosphorite', 'Scp', 'Sedimentary'), +# ('detrital sediments', 'Sd', 'Sedimentary'), +# ('argillite', 'Sda', 'Sedimentary'), +# ('graphitic shale', 'Sdag', 'Sedimentary'), +# ('mudstone', 'Sdam', 'Sedimentary'), +# ('shale', 'Sdas', 'Sedimentary'), +# ('siltstone', 'Sdaz', 'Sedimentary'), +# ('conglomerate', 'Sdc', 'Sedimentary'), +# ('oligomictic conglomerate ', 'Sdco', 'Sedimentary'), +# ('polymictic conglomerate', 'Sdcp', 'Sedimentary'), +# ('sandstone', 'Sds', 'Sedimentary'), +# ('arenite', 'Sdsa', 'Sedimentary'), +# ('feldspathic sandstone', 'Sdsf', 'Sedimentary'), +# ('greywacke', 'Sdsg', 'Sedimentary'), +# ('arkose', 'Sdsk', 'Sedimentary'), +# ('lithic sandstone', 'Sdsl', 'Sedimentary'), +# ('quartzose sandstone', 'Sdsq', 'Sedimentary'), +# ('carbonate rocks', 'Sl', 'Sedimentary'), +# ('dolomite', 'Sld', 'Sedimentary'), +# ('limestone', 'Sll', 'Sedimentary'), +# ('marl', 'Slm', 'Sedimentary'), +# ('volcaniclastics', 'Sv', 'Sedimentary'), +# ('agglomerate', 'Sva', 'Sedimentary'), +# ('tuff', 'Svt', 'Sedimentary'), +# ('Vein undifferentiated', 'X', 'Vein'), +# ('carbonate vein', 'Xc', 'Vein'), +# ('quartz vein', 'Xq', 'Vein'), +# ('quartz-albite vein', 'Xqa', 'Vein'), +# ('quartz vein with apy', 'Xqapy', 'Vein'), +# ('quartz vein with apy + po', 'Xqapypo', 'Vein'), +# ('quartz vein with apy + py', 'Xqapypy', 'Vein'), +# ('quartz vein with apy + py + po', 'Xqapypypo', 'Vein'), +# ('quartz vein with Au', 'XqAu', 'Vein'), +# ('quartz vein with Au + apy', 'XqAuapy', 'Vein'), +# ('quartz vein with Au + apy + po', 'XqAuapypo', 'Vein'), +# ('quartz vein with Au + apy + py', 'XqAuapypy', 'Vein'), +# ('quartz vein with Au + apy + py + po', 'XqAuapypypo', 'Vein'), +# ('quartz vein with Au + po', 'XqAupo', 'Vein'), +# ('quartz vein with Au + py', 'XqAupy', 'Vein'), +# ('quartz vein with Au + py + po', 'XqAupypo', 'Vein'), +# ('quartz-carbonate vein', 'Xqc', 'Vein'), +# ('quartz-carbonate-albite vein', 'Xqca', 'Vein'), +# ('quartz-carbonate vein with apy', 'Xqcapy', 'Vein'), +# ('quartz-carbonate vein with apy + po', 'Xqcapypo', 'Vein'), +# ('quartz-carbonate vein with apy + py', 'Xqcapypy', 'Vein'), +# ('quartz-carbonate vein with apy + py + po', 'Xqcapypypo', 'Vein'), +# ('quartz-carbonate vein with Au', 'XqcAu', 'Vein'), +# ('quartz-carbonate vein with Au + apy', 'XqcAuapy', 'Vein'), +# ('quartz-carbonate vein with Au + apy + po', 'XqcAuapypo', 'Vein'), +# ('quartz-carbonate vein with Au + apy + py', 'XqcAuapypy', 'Vein'), +# ('quartz-carbonate vein with Au + apy + py + po', 'XqcAuapypypo', 'Vein'), +# ('quartz-carbonate vein with Au + po', 'XqcAupo', 'Vein'), +# ('quartz-carbonate vein with Au + py', 'XqcAupy', 'Vein'), +# ('quartz-carbonate vein with Au + py + po', 'XqcAupypo', 'Vein'), +# ('quartz-carbonate vein with po', 'Xqcpo', 'Vein'), +# ('quartz-carbonate vein with py', 'Xqcpy', 'Vein'), +# ('quartz-carbonate vein with py + po', 'Xqcpypo', 'Vein'), +# ('quartz vein with po', 'Xqpo', 'Vein'), +# ('quartz vein with py', 'Xqpy', 'Vein'), +# ('quartz vein with py + po', 'Xqpypo', 'Vein'), +# ('quartz-sulphide vein', 'Xqz', 'Vein'), +# ('sulphide vein', 'Xz', 'Vein'), +# ('arsenopyrite vein', 'Xzapy', 'Vein'), +# ('pyrrhotite vein', 'Xzpo', 'Vein'), +# ('pyrite vein', 'Xzpy', 'Vein'), +# ('volcanics undifferentiated', 'V', 'Volcanic'), +# ('carbonatite volcanics', 'Vc', 'Volcanic'), +# ('felsic volcanics', 'Vf', 'Volcanic'), +# ('dacite', 'Vfd', 'Volcanic'), +# ('rhyolite', 'Vfr', 'Volcanic'), +# ('intermediate volcanics', 'Vi', 'Volcanic'), +# ('andesite', 'Via', 'Volcanic'), +# ('basaltic andesite', 'Vib', 'Volcanic'), +# ('latite', 'Vil', 'Volcanic'), +# ('trachyte', 'Vit', 'Volcanic'), +# ('trachyandesite', 'Vita', 'Volcanic'), +# ('mafic volcanics', 'Vm', 'Volcanic'), +# ('basalt', 'Vmb', 'Volcanic'), +# ('alkali basalt', 'Vmba', 'Volcanic'), +# ('komatiitic basalt', 'Vmbk', 'Volcanic'), +# ('olivine basalt', 'Vmbo', 'Volcanic'), +# ('tholeiitic basalt', 'Vmbt', 'Volcanic'), +# ('phonolite', 'Vmp', 'Volcanic'), +# ('trachybasalt', 'Vmt', 'Volcanic'), +# ('ultramafic volcanics', 'Vu', 'Volcanic'), +# ('basanite', 'Vub', 'Volcanic'), +# ('komatiite', 'Vuk', 'Volcanic'), +# ('nephelinite', 'Vun', 'Volcanic'), +# +# ) +#for title, code, rocktype in lithologies: - ) -for title, code, rocktype in lithologies: +for title, code in lithologies: id = folder.generateUniqueId('Lithology') folder.invokeFactory(id=id, type_name='Lithology') obj = folder[id] obj.edit(title=title, LithCode=code, - RockType=rocktypedict[rocktype], ) timeperioddict = {} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ann...@us...> - 2014-02-19 13:11:28
|
Revision: 3458 http://sourceforge.net/p/bika/code/3458 Author: anneline Date: 2014-02-19 13:11:23 +0000 (Wed, 19 Feb 2014) Log Message: ----------- Modified Paths: -------------- tracer/DrillHoleLog.py tracer/Tools.py Modified: tracer/DrillHoleLog.py =================================================================== --- tracer/DrillHoleLog.py 2014-02-12 13:01:23 UTC (rev 3457) +++ tracer/DrillHoleLog.py 2014-02-19 13:11:23 UTC (rev 3458) @@ -27,6 +27,7 @@ from Products.bika.FixedPointField import FixedPointField from Products.CMFDynamicViewFTI.browserdefault import \ BrowserDefaultMixin +import pdb schema = BikaSchema.copy() + Schema(( IntegerField('FromDepth', @@ -179,7 +180,7 @@ class DrillHoleLog(BrowserDefaultMixin, BaseFolder): security = ClassSecurityInfo() - archetype_name = 'DrilHoleLog' + archetype_name = 'DrillHoleLog' schema = schema allowed_content_types = () content_icon = 'drillhole.png' @@ -196,12 +197,7 @@ actions = () - def Title(self): - """ Return the drillhole title and depth range as title """ - return '%s %s-%s' %(self.aq_parent.Title(), self.FromDepth(), self.ToDepth()) - - registerType(DrillHoleLog) def modify_fti(fti): Modified: tracer/Tools.py =================================================================== --- tracer/Tools.py 2014-02-12 13:01:23 UTC (rev 3457) +++ tracer/Tools.py 2014-02-19 13:11:23 UTC (rev 3458) @@ -1901,6 +1901,7 @@ return '\n'.join(log) project = r[0].getObject() reader = csv.reader(csvfile) + errors=[] drilllogs = [] batch_headers = [] row_count = 0 @@ -1909,8 +1910,9 @@ valid_headers = ['drillhole', 'from', 'to', 'recover', 'moisture', \ 'colour', 'weathering', 'grainsize', 'clay', \ 'lith1', 'lith1%', 'lith2', 'lith2%', 'lith3', \ - 'lith3%', 'alteration1', 'alteration2', 'alteration3', 'altintensity', \ - 'qzvein%', 'sulphide%', 'texture', 'comments', ] + 'lith3%', 'alteration1', 'alteration2', 'alteration3',\ + 'altintensity', 'qzvein%', 'sulphide%', 'texture', \ + 'comments', ] started = False for row in reader: row_count = row_count + 1 @@ -1952,31 +1954,31 @@ # set up the reference data moistures = {} for x in self.portal_catalog(portal_type='Moisture'): - moistures[x.Title] = x.UID + moistures[x.Title.lower()] = x.UID colours = {} for x in self.portal_catalog(portal_type='Colour'): - colours[x.Title] = x.UID + colours[x.Title.lower()] = x.UID weatherings = {} for x in self.portal_catalog(portal_type='Weathering'): - weatherings[x.Title] = x.UID + weatherings[x.Title.lower()] = x.UID lithologies = {} for x in self.portal_catalog(portal_type='Lithology'): - lithologies[x.Title] = x.UID + lithologies[x.Title.lower()] = x.UID alterations = {} for x in self.portal_catalog(portal_type='Alteration'): - alterations[x.Title] = x.UID + alterations[x.Title.lower()] = x.UID altintensities = {} for x in self.portal_catalog(portal_type='AlterationIntensity'): - altintensities[x.Title] = x.UID + altintensities[x.Title.lower()] = x.UID textures = {} for x in self.portal_catalog(portal_type='Texture'): - textures[x.Title] = x.UID + textures[x.Title.lower()] = x.UID row_count = 0 drillhole = None @@ -1984,45 +1986,186 @@ row_count = row_count + 1 #REQUEST.RESPONSE.write(pad+'<input style="display: none;" name="inputProgress" value="%s">' % row_count) item_remarks = [] - #analyses = [] - #for i in range(9, len(sample)): - # if sample[i] != '1': - # continue - # analyses.append(sample_headers[(i-9)]) - #if len(analyses) > 0: - #if drillhole: - # if drillhole.ClientDrillHoleID() = d['drillhole']: + if drillhole: + if not drillhole.ClientDrillHoleID() == d['drillhole']: + drillhole = None + + if not drillhole: + dh = self.portal_catalog(portal_type='DrillHole', + getProjectID=project_id, + getClientDrillHoleID=d['drillhole']) + if len(dh) == 0: + log.append(' Could not find DrillHole %s' % d['drillhole']) + return '\n'.join(log) + drillhole = dh[0].getObject() - r = self.portal_catalog(portal_type='Project', id=project_id) - if len(r) == 0: - log.append(' Could not find Project %s' % project_id) - return '\n'.join(log) - project = r[0].getObject() - - drilllog_id = self.generateUniqueId('DrillHoleLog') - project.invokeFactory(id=drilllog_id, type_name='DrillHoleLog') - drilllog = project._getOb(drilllog_id) + pdb.set_trace() + drilllog_id = drillhole.generateUniqueId('DrillHoleLog') + drillhole.invokeFactory(id=drilllog_id, type_name='DrillHoleLog') + drilllog = drillhole._getOb(drilllog_id) for h in valid_headers: if h not in batch_headers: d[h] = None + pdb.set_trace() + + # Moisture + if d['moisture'] is None: + moisture = None + else: + this_code = d['moisture'].lower() + if moistures.has_key(this_code): + moisture = moistures[this_code] + else: + errors.append(' %s Could not find Moisture %s'\ + %(d['from'], d['moisture'])) + moisture = None + + # Colour + if d['colour'] is None: + colour = None + else: + this_code = d['colour'].lower() + if colours.has_key(this_code): + colour = colours[this_code] + else: + errors.append(' %s Could not find colour %s'\ + %(d['from'], d['colour'])) + colour = None + + # Weathering + if d['weathering'] is None: + weathering = None + else: + this_code = d['weathering'].lower() + if weatherings.has_key(this_code): + weathering = weatherings[this_code] + else: + errors.append(' %s Could not find weathering %s'\ + %(d['from'], d['weathering'])) + weathering = None + + # Lithology1 + if d['lithology1'] is None: + lithology1 = None + else: + this_code = d['lithology1'].lower() + if lithologies.has_key(this_code): + lithology1 = lithologies[this_code] + else: + errors.append(' %s Could not find lithology1 %s'\ + %(d['from'], d['lithology1'])) + lithology1 = None + + # Lithology2 + if d['lithology2'] is None: + lithology2 = None + else: + this_code = d['lithology2'].lower() + if lithologies.has_key(this_code): + lithology2 = lithologies[this_code] + else: + errors.append(' %s Could not find lithology2 %s'\ + %(d['from'], d['lithology2'])) + lithology2 = None + + + # Lithology3 + if d['lithology3'] is None: + lithology3 = None + else: + this_code = d['lithology3'].lower() + if lithologies.has_key(this_code): + lithology3 = lithologies[this_code] + else: + errors.append(' %s Could not find lithology3 %s'\ + %(d['from'], d['lithology3'])) + lithology3 = None + + # Alteration1 + if d['alteration1'] is None: + alteration1 = None + else: + this_code = d['alteration1'].lower() + if alterations.has_key(this_code): + alteration1 = alterations[this_code] + else: + errors.append(' %s Could not find alteration1 %s'\ + %(d['from'], d['alteration1'])) + alteration1 = None + + # Alteration2= + if d['alteration2'] is None: + alteration2 = None + else: + this_code = d['alteration2'].lower() + if alterations.has_key(this_code): + alteration2 = alterations[this_code] + else: + errors.append(' %s Could not find alteration2 %s'\ + %(d['from'], d['alteration2'])) + alteration2 = None + + # Alteration3 + if d['alteration3'] is None: + alteration3 = None + else: + this_code = d['alteration3'].lower() + if alterations.has_key(this_code): + alteration3 = alterations[this_code] + else: + errors.append(' %s Could not find alteration3 %s'\ + %(d['from'], d['alteration3'])) + alteration3 = None + + # AlterationIntensity + if d['altintensity'] is None: + altintensity = None + else: + this_code = d['altintensity'].lower() + if altintensities.has_key(this_code): + altintensity = altintensities[this_code] + else: + errors.append(' %s Could not find altintensity %s'\ + %(d['from'], d['altintensity'])) + altintensity = None + + # Texture + if d['texture'] is None: + texture = None + else: + this_code = d['texture'].lower() + if textures.has_key(this_code): + texture = textures[this_code] + else: + errors.append(' %s Could not find texture %s'\ + %(d['from'], d['texture'])) + texture = None + drilllog.edit( - DrillHoleID=drillhole_id, - ClientDrillHoleID=d['drillhole'], - UTMSystem=utmsystem, - East=d['east'], - North=d['north'], - Azimuth=d['azimuth'], - Dip=d['dip'], - Elevation=d['elevation'], - EOH=d['eoh'], - WaterTable=d['watertable'], - DrillCompany=d['drillcompany'], - Rig=d['rig'], - DrillType=d['drilltype'], - BitSize=d['bitsize'], + FromDepth=d['from'], + ToDepth=d['to'], + RecoveryKg=d['recover'], + Moisture=moisture, + Colour=colour, + Weathering=weathering, + GrainSize=d['grainsize'], + ClayFinesPercent=d['clay'], + Lithology1=lithology1, + Lithology1Percent=d['lith1%'], + Lithology2=lithology2, + Lithology2Percent=d['lith2%'], + Lithology3=lithology3, + Lithology3Percent=d['lith3%'], + Alteration1=alteration1, + Alteration2=alteration2, + Alteration3=alteration3, + AlterationIntensity=altintensity, + QzVeinPercent=d['qzvein%'], + SulphidePercent=d['sulphide%'], + Texture=texture, Notes=d['comments'], ) return errors This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ann...@us...> - 2014-02-12 13:01:33
|
Revision: 3457 http://sourceforge.net/p/bika/code/3457 Author: anneline Date: 2014-02-12 13:01:23 +0000 (Wed, 12 Feb 2014) Log Message: ----------- logs Modified Paths: -------------- tracer/BikaSettings.py tracer/DrillHoleLog.py tracer/Extensions/Install.py tracer/Tools.py tracer/__init__.py tracer/configlets.py tracer/profiles/default/actionicons.xml tracer/profiles/default/propertiestool.xml tracer/profiles/default/types.xml tracer/profiles/default/workflows.xml tracer/skins/bika/import_drillholes.cpy tracer/skins/bika/import_drillholes_form.pt tracer/skins/bika/load_data.py tracer/skins/bika/load_sample_data.py tracer/skins/bika/load_small_data.py tracer/skins/bika/load_tiny_data.py Added Paths: ----------- tracer/Alteration.py tracer/example_drillhole_logs.csv tracer/profiles/default/types/Alteration.xml tracer/skins/bika/alteration.png Removed Paths: ------------- tracer/MineralAndAlteration.py tracer/profiles/default/types/MineralAndAlteration.xml tracer/skins/bika/mineralandalteration.png Added: tracer/Alteration.py =================================================================== --- tracer/Alteration.py (rev 0) +++ tracer/Alteration.py 2014-02-12 13:01:23 UTC (rev 3457) @@ -0,0 +1,55 @@ +from AccessControl import ClassSecurityInfo +from Products.CMFCore.CMFCorePermissions import View, \ + ModifyPortalContent +from Products.CMFDynamicViewFTI.browserdefault import \ + BrowserDefaultMixin +from Products.Archetypes.public import * +from Products.bika.BikaContent import BikaSchema +from Products.bika.config import I18N_DOMAIN, PROJECTNAME +from Products.CMFCore.utils import getToolByName + +schema = BikaSchema.copy() + Schema(( + TextField('AlterationDescription', + widget=TextAreaWidget( + label='Description', + label_msgid='label_description', + i18n_domain=I18N_DOMAIN, + ), + ), +)) + +class Alteration(BrowserDefaultMixin, BaseContent): + security = ClassSecurityInfo() + archetype_name = 'Alteration' + schema=schema + allowed_content_types = () + immediate_view = 'tool_base_edit' + default_view = 'tool_base_edit' + content_icon = 'alteration.png' + global_allow = 0 + filter_content_types = 0 + use_folder_tabs = 0 + __implements__ = BaseContent.__implements__ + ( + BrowserDefaultMixin.__implements__, ) + + actions = ( + {'id': 'edit', + 'name': 'Edit', + 'action': 'string:${object_url}/tool_base_edit', + 'permissions': (ModifyPortalContent,), + }, + ) + + factory_type_information = { + 'title': 'Alteration' + } + +registerType(Alteration) + +def modify_fti(fti): + for a in fti['actions']: + if a['id'] in ('syndication', 'references', 'metadata', + 'localroles'): + a['visible'] = 0 + return fti + Modified: tracer/BikaSettings.py =================================================================== --- tracer/BikaSettings.py 2014-02-10 11:44:08 UTC (rev 3456) +++ tracer/BikaSettings.py 2014-02-12 13:01:23 UTC (rev 3457) @@ -200,6 +200,14 @@ i18n_domain=I18N_DOMAIN, ) ), + FileField('ExampleDrillHoleLogImportFile', + widget=FileWidget( + showLink=True, + label='Example Drillhole Log Import File', + label_msgid='label_example_drillhole_log_import_file', + i18n_domain=I18N_DOMAIN, + ) + ), FileField('ExampleLabResultsImportFile', widget=FileWidget( showLink=True, Modified: tracer/DrillHoleLog.py =================================================================== --- tracer/DrillHoleLog.py 2014-02-10 11:44:08 UTC (rev 3456) +++ tracer/DrillHoleLog.py 2014-02-12 13:01:23 UTC (rev 3457) @@ -119,17 +119,17 @@ ), ), ReferenceField('Alteration1', - allowed_types=('MineralAndAlteration',), + allowed_types=('Alteration',), referenceClass=HoldingReference, relationship='DrillHoleLogAlteration1', ), ReferenceField('Alteration2', - allowed_types=('MineralAndAlteration',), + allowed_types=('Alteration',), referenceClass=HoldingReference, relationship='DrillHoleLogAlteration2', ), ReferenceField('Alteration3', - allowed_types=('MineralAndAlteration',), + allowed_types=('Alteration',), referenceClass=HoldingReference, relationship='DrillHoleLogAlteration3', ), Modified: tracer/Extensions/Install.py =================================================================== --- tracer/Extensions/Install.py 2014-02-10 11:44:08 UTC (rev 3456) +++ tracer/Extensions/Install.py 2014-02-12 13:01:23 UTC (rev 3457) @@ -20,7 +20,7 @@ AttachmentTypesTool, PersonnelExportTool, ServicesExportTool, \ StratigraphiesExportTool, LithologiesExportTool, \ PDFBuildTool, \ - ColoursTool, AlterationIntensitiesTool, MineralAndAlterationsTool, \ + ColoursTool, AlterationIntensitiesTool, AlterationsTool, \ TexturesTool, WeatheringsTool, MoisturesTool, AbundancesTool, \ LithologicalContactsTool, FoliationsTool, DisplacementStructuresTool, \ VeinsTool, LineationsTool, OriMarkQualitiesTool @@ -218,6 +218,11 @@ DrillHoleImportTool.meta_type, None) print >> out, "Successfully installed drilhole Import Tool." + if not hasattr(portal, 'drillhole_log_import_tool'): + portal.manage_addProduct[PROJECTNAME].manage_addTool( + DrillHoleLogImportTool.meta_type, None) + print >> out, "Successfully installed drilhole log Import Tool." + if not hasattr(portal, 'sample_export_tool'): portal.manage_addProduct[PROJECTNAME].manage_addTool( SampleExportTool.meta_type, None) @@ -263,10 +268,10 @@ AlterationIntensitiesTool.meta_type, None) print >> out, "Successfully installed Alteration Intensities Tool." - if not hasattr(portal, 'bika_mineralandalterations'): + if not hasattr(portal, 'bika_alterations'): portal.manage_addProduct[PROJECTNAME].manage_addTool( - MineralAndAlterationsTool.meta_type, None) - print >> out, "Successfully installed Mineral and Alterations Tool." + AlterationsTool.meta_type, None) + print >> out, "Successfully installed Alterations Tool." if not hasattr(portal, 'bika_textures'): portal.manage_addProduct[PROJECTNAME].manage_addTool( Deleted: tracer/MineralAndAlteration.py =================================================================== --- tracer/MineralAndAlteration.py 2014-02-10 11:44:08 UTC (rev 3456) +++ tracer/MineralAndAlteration.py 2014-02-12 13:01:23 UTC (rev 3457) @@ -1,55 +0,0 @@ -from AccessControl import ClassSecurityInfo -from Products.CMFCore.CMFCorePermissions import View, \ - ModifyPortalContent -from Products.CMFDynamicViewFTI.browserdefault import \ - BrowserDefaultMixin -from Products.Archetypes.public import * -from Products.bika.BikaContent import BikaSchema -from Products.bika.config import I18N_DOMAIN, PROJECTNAME -from Products.CMFCore.utils import getToolByName - -schema = BikaSchema.copy() + Schema(( - TextField('MineralAndAlterationDescription', - widget=TextAreaWidget( - label='Description', - label_msgid='label_description', - i18n_domain=I18N_DOMAIN, - ), - ), -)) - -class MineralAndAlteration(BrowserDefaultMixin, BaseContent): - security = ClassSecurityInfo() - archetype_name = 'MineralAndAlteration' - schema=schema - allowed_content_types = () - immediate_view = 'tool_base_edit' - default_view = 'tool_base_edit' - content_icon = 'mineralandalteration.png' - global_allow = 0 - filter_content_types = 0 - use_folder_tabs = 0 - __implements__ = BaseContent.__implements__ + ( - BrowserDefaultMixin.__implements__, ) - - actions = ( - {'id': 'edit', - 'name': 'Edit', - 'action': 'string:${object_url}/tool_base_edit', - 'permissions': (ModifyPortalContent,), - }, - ) - - factory_type_information = { - 'title': 'Mineral and Alteration' - } - -registerType(MineralAndAlteration) - -def modify_fti(fti): - for a in fti['actions']: - if a['id'] in ('syndication', 'references', 'metadata', - 'localroles'): - a['visible'] = 0 - return fti - Modified: tracer/Tools.py =================================================================== --- tracer/Tools.py 2014-02-10 11:44:08 UTC (rev 3456) +++ tracer/Tools.py 2014-02-12 13:01:23 UTC (rev 3457) @@ -14,6 +14,7 @@ from OFS.Folder import Folder from Products.bika.config import ManageSample from DateTime import DateTime +import pdb class ToolFolder(UniqueObject, Folder): """ Tool Folder """ @@ -179,29 +180,29 @@ InitializeClass(AlterationIntensitiesTool) ###################################################################### -# MineralAndAlterationsTool +# AlterationsTool ###################################################################### -from Products.bika.MineralAndAlteration import schema as \ - mineralandalteration_schema +from Products.bika.Alteration import schema as \ + alteration_schema from Products.bika.utils import make_listing_from_schema -columns = ('title', 'MineralAndAlterationDescription') -mineralandalteration_listing = make_listing_from_schema( - mineralandalteration_schema, columns +columns = ('title', 'AlterationDescription') +alteration_listing = make_listing_from_schema( + alteration_schema, columns ) -class MineralAndAlterationsTool(ToolFolder): - """ Container for mineral and alterations """ +class AlterationsTool(ToolFolder): + """ Container for alterations """ security = ClassSecurityInfo() - id = 'bika_mineralandalterations' - title = 'Mineral And Alterations' - description = 'id: mineral and alteration' - meta_type = 'Bika Mineral and Alterations Tool' - managed_portal_type = 'MineralAndAlteration' - listing_schema = mineralandalteration_listing + id = 'bika_alterations' + title = 'Alterations' + description = 'id: alteration' + meta_type = 'Bika Alterations Tool' + managed_portal_type = 'Alteration' + listing_schema = alteration_listing -InitializeClass(MineralAndAlterationsTool) +InitializeClass(AlterationsTool) ###################################################################### # TexturesTool @@ -1848,6 +1849,7 @@ drillhole.edit( DrillHoleID=drillhole_id, + ClientDrillHoleID=d['drillhole'], UTMSystem=utmsystem, East=d['east'], North=d['north'], @@ -1869,6 +1871,167 @@ InitializeClass(DrillHoleImportTool) ###################################################################### +# DrillHoleLogImportTool +###################################################################### + +class DrillHoleLogImportTool(UniqueObject, SimpleItem): + """ DrillHoleLogImportTool """ + + security = ClassSecurityInfo() + id = 'drillhole_log_import_tool' + title = 'DrillHole log Import Tool' + description = 'Imports DrillHole logs' + meta_type = 'DrillHole Log Import Tool' + + security.declareProtected(ManageSample, 'import_file') + def import_file(self, csvfile, filename, project_id, state): + import csv + pdb.set_trace() + slash = filename.rfind('\\') + full_name = filename[slash+1:] + ext = full_name.rfind('.') + if ext == -1: + actual_name = full_name + else: + actual_name = full_name[:ext] + log = [] + r = self.portal_catalog(portal_type='Project', id=project_id) + if len(r) == 0: + log.append(' Could not find Project %s' % project_id) + return '\n'.join(log) + project = r[0].getObject() + reader = csv.reader(csvfile) + drilllogs = [] + batch_headers = [] + row_count = 0 + drillhole_count = 0 + batch_remarks = [] + valid_headers = ['drillhole', 'from', 'to', 'recover', 'moisture', \ + 'colour', 'weathering', 'grainsize', 'clay', \ + 'lith1', 'lith1%', 'lith2', 'lith2%', 'lith3', \ + 'lith3%', 'alteration1', 'alteration2', 'alteration3', 'altintensity', \ + 'qzvein%', 'sulphide%', 'texture', 'comments', ] + started = False + for row in reader: + row_count = row_count + 1 + if not row: continue + # a new batch starts + if row[0].lower() == 'drillhole': + for i in row: + header = i.lower() + if header in valid_headers: + batch_headers.append(header) + else: + msg = '%s invalid batch header' % header + transaction_note(msg) + return state.set(status='failure', portal_status_message=msg) + started = True + continue + if started: + drilllog = dict(zip(batch_headers, row)) + drilllogs.append(drilllog) + + + pad = 8192*' ' + #REQUEST = self.REQUEST + #REQUEST.RESPONSE.write(self.progress_bar(REQUEST=REQUEST)) + #REQUEST.RESPONSE.write('<input style="display: none;" id="progressType" value="Sample validating">') + #REQUEST.RESPONSE.write('<input style="display: none;" id="progressDone" value="Loading...">') + #REQUEST.RESPONSE.write(pad+'<input style="display: none;" id="inputTotal" value="%s">' % len(drilllogs)) + + results = {} + errors = [] + + #REQUEST = self.REQUEST + #REQUEST.RESPONSE.write(self.progress_bar(REQUEST=REQUEST)) + #REQUEST.RESPONSE.write('<input style="display: none;" id="progressType" value="Sample import">') + #REQUEST.RESPONSE.write('<input style="display: none;" id="progressDone" value="Validating...">') + #REQUEST.RESPONSE.write(pad+'<input style="display: none;" id="inputTotal" value="%s">' % len(drilllogs)) + + + # set up the reference data + moistures = {} + for x in self.portal_catalog(portal_type='Moisture'): + moistures[x.Title] = x.UID + + colours = {} + for x in self.portal_catalog(portal_type='Colour'): + colours[x.Title] = x.UID + + weatherings = {} + for x in self.portal_catalog(portal_type='Weathering'): + weatherings[x.Title] = x.UID + + lithologies = {} + for x in self.portal_catalog(portal_type='Lithology'): + lithologies[x.Title] = x.UID + + alterations = {} + for x in self.portal_catalog(portal_type='Alteration'): + alterations[x.Title] = x.UID + + altintensities = {} + for x in self.portal_catalog(portal_type='AlterationIntensity'): + altintensities[x.Title] = x.UID + + textures = {} + for x in self.portal_catalog(portal_type='Texture'): + textures[x.Title] = x.UID + + row_count = 0 + drillhole = None + for d in drilllogs: + row_count = row_count + 1 + #REQUEST.RESPONSE.write(pad+'<input style="display: none;" name="inputProgress" value="%s">' % row_count) + item_remarks = [] + #analyses = [] + #for i in range(9, len(sample)): + # if sample[i] != '1': + # continue + # analyses.append(sample_headers[(i-9)]) + #if len(analyses) > 0: + + #if drillhole: + # if drillhole.ClientDrillHoleID() = d['drillhole']: + + r = self.portal_catalog(portal_type='Project', id=project_id) + if len(r) == 0: + log.append(' Could not find Project %s' % project_id) + return '\n'.join(log) + project = r[0].getObject() + + + drilllog_id = self.generateUniqueId('DrillHoleLog') + project.invokeFactory(id=drilllog_id, type_name='DrillHoleLog') + drilllog = project._getOb(drilllog_id) + for h in valid_headers: + if h not in batch_headers: + d[h] = None + + drilllog.edit( + DrillHoleID=drillhole_id, + ClientDrillHoleID=d['drillhole'], + UTMSystem=utmsystem, + East=d['east'], + North=d['north'], + Azimuth=d['azimuth'], + Dip=d['dip'], + Elevation=d['elevation'], + EOH=d['eoh'], + WaterTable=d['watertable'], + DrillCompany=d['drillcompany'], + Rig=d['rig'], + DrillType=d['drilltype'], + BitSize=d['bitsize'], + Notes=d['comments'], + ) + return errors + #valid = self.validate_arimport_c(arimport) + #REQUEST.RESPONSE.write('<script>document.location.href="%s/project_drilllogs?portal_status_message=%s%%20imported"</script>' % (client.absolute_url(), sample_id)) + +InitializeClass(DrillHoleLogImportTool) + +###################################################################### # ARExportTool ###################################################################### Modified: tracer/__init__.py =================================================================== --- tracer/__init__.py 2014-02-10 11:44:08 UTC (rev 3456) +++ tracer/__init__.py 2014-02-12 13:01:23 UTC (rev 3457) @@ -59,7 +59,7 @@ import AttachmentType import Colour import AlterationIntensity - import MineralAndAlteration + import Alteration import Texture import Weathering import Moisture @@ -91,7 +91,7 @@ tools = ( Tools.ColoursTool, Tools.AlterationIntensitiesTool, - Tools.MineralAndAlterationsTool, + Tools.AlterationsTool, Tools.TexturesTool, Tools.WeatheringsTool, Tools.MoisturesTool, @@ -117,6 +117,7 @@ Tools.ImportPersonnelTool, Tools.SampleImportTool, Tools.DrillHoleImportTool, + Tools.DrillHoleLogImportTool, Tools.SampleExportTool, Tools.ARExportTool, Tools.PersonnelExportTool, Modified: tracer/configlets.py =================================================================== --- tracer/configlets.py 2014-02-10 11:44:08 UTC (rev 3456) +++ tracer/configlets.py 2014-02-12 13:01:23 UTC (rev 3457) @@ -165,13 +165,13 @@ 'permission': (ManageBika,), 'imageUrl': 'alterationintensity.png',}, - {'id': 'bika_mineralandalterations', + {'id': 'bika_alterations', 'appId': PROJECTNAME, - 'name': 'Mineral and alterations', - 'action': 'string:$portal_url/bika_mineralandalterations', + 'name': 'alterations', + 'action': 'string:$portal_url/bika_alterations', 'category': 'Bika', 'permission': (ManageBika,), - 'imageUrl': 'mineralandalteration.png',}, + 'imageUrl': 'alteration.png',}, {'id': 'bika_textures', 'appId': PROJECTNAME, Added: tracer/example_drillhole_logs.csv =================================================================== --- tracer/example_drillhole_logs.csv (rev 0) +++ tracer/example_drillhole_logs.csv 2014-02-12 13:01:23 UTC (rev 3457) @@ -0,0 +1,103 @@ +drillhole,from,to,recover,moisture,colour,weathering,grainsize,clay,lith1,lith1%,lith2,lith2%,lith3,lith3%,alteration1,alteration2,alteration3,altintensity,qzvein%,sulphide%,texture,comments +XYZ_27,0,1,0.8,D,og-bn,vox,,40,RLG,,,,,,he,ko,lm,,,,,"laterite gravels, sandy clay superficial materials" +XYZ_27,1,2,0.6,D,og-bn,vox,,40,RLG,,,,,,he,ko,lm,,,,,"laterite gravels, sandy clay superficial materials" +XYZ_27,2,3,2.9,D,yw,mox,2__3,40,IGRA,100,,,,,ko,lm,he,S,,,,"saprolite from granite, foliated+ few Mn oxides" +XYZ_27,3,4,5.9,D,yw,mox,2__3,40,IGRA,100,,,,,ko,lm,he,S,,,,"saprolite from granite, foliated+ few Mn oxides" +XYZ_27,4,5,2.8,D,yw,mox,2__3,40,IGRA,100,,,,,ko,lm,he,S,,,,"saprolite from granite, foliated+ few Mn oxides" +XYZ_27,5,6,14.7,D,yw,mox,2__3,40,IGRA,100,,,,,ko,lm,he,S,,,,"saprolite from granite, foliated+ few Mn oxides" +XYZ_27,6,7,1.9,D,rd-yw,mox,2__3,40,IGRA,100,,,,,ko,he,lm,S,,,,"saprolite from granite, foliated+ few Mn oxides" +XYZ_27,7,8,1.3,D,rd-yw,mox,2__3,40,IGRA,100,,,,,ko,he,lm,S,,,,"saprolite from granite, foliated+ few Mn oxides" +XYZ_27,8,9,0.6,D,og-bn,mox,2__3,40,IGRA,100,,,,,lm,ko,he,S,5,,,"saprolite from granite, foliated+ few Mn oxides " +XYZ_27,9,10,11.9,D,yw-pl,mox,2__3,40,IGRA,100,,,,,ko,lm,,S,3,,,"saprolite from granite, foliated+ few Mn oxides " +XYZ_27,10,11,15.5,D,bn,mox,2__3,40,IGRA,100,,,,,ko,lm,,S,,,,saprolite from granite +XYZ_27,11,12,10,D,pl-yw,mox,2__3,30,IGRA,100,,,,,ko,lm,he,S,,,,saprolite from granite +XYZ_27,12,13,12.2,D,pl-yw,mox,2__3,30,IGRA,100,,,,,ko,lm,he,S,,,,saprolite from granite +XYZ_27,13,14,18.7,D,pl-yw,mox,2__3,30,IGRA,100,,,,,ko,lm,he,S,,,,saprolite from granite +XYZ_27,14,15,22.1,D,pl-yw,mox,2__3,30,IGRA,100,,,,,ko,lm,he,S,,,,saprolite from granite +XYZ_27,15,16,31.1,D,pl-yw,mox,2__3,30,IGRA,100,,,,,ko,lm,he,S,,,,saprolite from granite +XYZ_27,16,17,29.7,D,pl-yw,mox,2__3,30,IGRA,100,,,,,ko,lm,he,S,,,,saprolite from granite +XYZ_27,17,18,30.2,D,yw-gy,wox,2__3,< 5,IGRA,100,,,,,fp,lm,he,S,1__2,,,saprock from granite strong potassic alteration +XYZ_27,18,19,21.9,D,gn,wox,2__3,15,IBAS,80,IGRA,20,,,cl,ep,se,S,,,,saprock from granite with strong potassic alteration +XYZ_27,19,20,26.5,D,gn-gy,wox,2__3,< 5,IBAS,50,IGRA,50,,,cl,fp,he,S,1,< 1,,saprock from mafic volcanite +XYZ_27,20,21,26.9,D,gy-pl,wox,2__3,< 5,IGRA,100,,,,,fp,se,he,S,,< 1,,contact between granite and mafic volcanite +XYZ_27,21,22,30.2,D,gy-pl,wox,2__3,< 5,IGRA,100,,,,,fp,se,he,S,,< 1,,"pink granite ,moderately foliated, and strong potassic alteration" +XYZ_27,22,23,27.9,D,gy-pl,wox,2__3,< 5,IGRA,100,,,,,fp,se,he,S,,< 1,,"pink granite ,moderately foliated, and strong potassic alteration" +XYZ_27,23,24,29.4,D,gy-pl,wox,2__3,< 5,IGRA,100,,,,,fp,se,he,S,,< 1,,"pink granite ,moderately foliated, and strong potassic alteration" +XYZ_27,24,25,33.5,D,gy-pl,wox,2__3,< 5,IGRA,100,,,,,fp,se,he,S,,< 1,,"pink granite ,moderately foliated, and strong potassic alteration" +XYZ_27,25,26,30.6,D,gy-pl,wox,2__3,< 5,IGRA,100,,,,,fp,se,he,S,,< 1,,"pink granite ,moderately foliated, and strong potassic alteration" +XYZ_27,26,27,27.6,D,gy-pl,wox,2__3,< 5,IGRA,100,,,,,fp,se,he,S,,< 1,,"pink granite ,moderately foliated, and strong potassic alteration" +XYZ_27,27,28,31.8,D,gy-pl,wox,2__3,< 5,IGRA,100,,,,,fp,se,he,S,,< 1,,"pink granite ,moderately foliated, and strong potassic alteration" +XYZ_27,28,29,27.4,D,gy-pl,wox,2__3,< 5,IGRA,100,,,,,fp,se,he,S,,< 1,,"pink granite ,moderately foliated, and strong potassic alteration" +XYZ_27,29,30,30.1,D,gy-pl,wox,2__3,< 5,IGRA,100,,,,,fp,se,he,S,,< 1,,"pink granite ,moderately foliated, and strong potassic alteration" +XYZ_27,30,31,29.8,D,gy-pl,wox,2__3,< 5,IGRA,100,,,,,fp,se,he,S,,< 1,,"pink granite ,moderately foliated, and strong potassic alteration" +XYZ_27,31,32,30.1,D,gy-pl,wox,2__3,< 5,IGRA,100,,,,,fp,se,he,S,,< 1,,"pink granite ,moderately foliated, and strong potassic alteration" +XYZ_27,32,33,27.4,D,gy-pl,wox,2__3,< 5,IGRA,100,,,,,fp,se,he,S,,< 1,,"pink granite ,moderately foliated, and strong potassic alteration" +XYZ_27,33,34,31.5,D,gn-gy,wox,1__2,< 5,IBAS,70,IGRA,30,,,cl,fp,cc,S,,< 1,,contact baslte and granite +XYZ_27,34,35,29.4,D,gn-gy,wox,1__2,< 5,IBAS,50,IGRA,50,,,cl,fp,cc,S,,< 1,,contact baslte and granite +XYZ_27,35,36,28.9,D,yw-gy,wox,2__3,< 5,IGRA,100,,,,,fp,se,cl,S,,< 1,,foliated granite with potassic alteration +XYZ_27,36,37,30.4,D,yw-gy,wox,2__3,< 5,IGRA,100,,,,,fp,se,cl,S,,< 1,,foliated granite with potassic alteration +XYZ_27,37,38,27.8,D,yw-gy,wox,2__3,< 5,IGRA,100,,,,,fp,se,cl,S,,< 1,,foliated granite with potassic alteration +XYZ_27,38,39,28.7,D,yw-gy,wox,2__3,< 5,IGRA,100,,,,,fp,se,cl,S,1,< 1,,foliated granite with potassic alteration +XYZ_27,39,40,29,D,yw-gy,wox,2__3,< 5,IGRA,100,,,,,fp,se,cl,S,1,< 1,,foliated granite with potassic alteration +XYZ_27,40,41,31.1,D,yw-gy,wox,2__3,< 5,IGRA,100,,,,,fp,se,cl,S,1,< 1,,foliated granite with potassic alteration +XYZ_27,41,42,28.9,D,yw-gy,wox,2__3,< 5,IGRA,100,,,,,fp,se,cl,S,1,< 1,,foliated granite with potassic alteration +XYZ_27,42,43,29.8,D,yw-gy,wox,2__3,< 5,IGRA,100,,,,,fp,se,cl,S,1,< 1,,foliated granite with potassic alteration +XYZ_27,43,44,28,D,gn-gy,wox,2__3,< 5,IGRA,70,IBAS,30,,,fp,cl,cc,S,1,< 1,,contact granite and basalt +XYZ_27,44,45,27.2,D,yw-bn,wox,2__3,< 5,IGRA,90,IBAS,10,,,fp,cl,cc,S,1,< 1,,contact granite and basalt +XYZ_27,45,46,29,D,bn-yw,wox,2__3,< 5,IGRA,100,,,,,fp,lm,cc,S,< 1,< 1,,"granite , moderately foliated, chlorite+ potassic alteration " +XYZ_27,46,47,28.4,D,bn-yw,wox,2__3,< 5,IGRA,100,,,,,fp,lm,cc,S,< 1,< 1,,"granite , moderately foliated, chlorite+ potassic alteration " +XYZ_27,47,48,27.3,D,bn-yw,wox,2__3,< 5,IGRA,100,,,,,fp,lm,cc,S,< 1,1__2,,"granite , moderately foliated, chlorite+ potassic alteration " +XYZ_27,48,49,30.6,D,pk-bn,wox,2__3,< 5,IGRA,100,,,,,fp,he,lm,S,2__3,1__2,,pink foliated granite +XYZ_27,49,50,29.1,D,pk-bn,wox,2__3,< 5,IGRA,100,,,,,fp,he,lm,S,2__3,1__2,,pink foliated granite +XYZ_27,50,51,28,D,pk-bn,wox,2__3,< 5,IGRA,100,,,,,fp,he,lm,S,2__3,1__2,,pink foliated granite +XYZ_27,51,52,29.4,D,gy-yw,wox,2__3,< 5,IGRA,100,,,,,fp,lm,se,S,2__3,1__2,,strongly foliated granite + hematite +XYZ_27,52,53,29,D,gy-yw,wox,2__3,< 5,IGRA,100,,,,,fp,lm,se,S,2__3,1__2,,strongly foliated granite + hematite +XYZ_27,53,54,30.4,D,gy-yw,wox,2__3,< 5,IGRA,100,,,,,fp,lm,se,S,2__3,1__2,,strongly foliated granite + hematite +XYZ_27,54,55,29.7,D,gy-yw,wox,2__3,< 5,IGRA,100,,,,,fp,lm,se,S,2__3,1__2,,strongly foliated granite + hematite +XYZ_27,55,56,25.9,D,gy-gn,wox,2__3,< 5,IGRA,60,IBAS,40,,,fp,ep,se,S,2__3,1__2,,"contact granite and basalt , strongly foliated " +XYZ_27,56,57,30.8,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,1__2,1__2,,strongly foliated granite +XYZ_27,57,58,29.4,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,1__2,1__2,,strongly foliated granite +XYZ_27,58,59,29.6,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,1__2,1__2,,strongly foliated granite +XYZ_27,59,60,30.2,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,1__2,1__2,,strongly foliated granite +XYZ_27,60,61,23,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,1__2,1__2,,strongly foliated granite +XYZ_27,61,62,27.6,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,1__2,1__2,,strongly foliated granite +XYZ_27,62,63,32.4,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,1__2,1__2,,strongly foliated granite +XYZ_27,63,64,27.2,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,1__2,1__2,,strongly foliated granite +XYZ_27,64,65,30.7,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,1__2,1__2,,strongly foliated granite +XYZ_27,65,66,29,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,1__2,1__2,,strongly foliated granite +XYZ_27,66,67,28.7,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,1__2,1__2,,strongly foliated granite +XYZ_27,67,68,27.7,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,se,cc,S,1__2,1__2,,strongly foliated granite with limonite traces +XYZ_27,68,69,30.4,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,se,cc,S,1__2,1__2,,strongly foliated granite with limonite traces +XYZ_27,69,70,30,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,se,cc,S,1__2,1__2,,strongly foliated granite with limonite traces +XYZ_27,70,71,33.4,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,se,cc,S,1__2,1__2,,strongly foliated granite with limonite traces +XYZ_27,71,72,24.9,D,gy-kk,fr,2__3,0,IGRA,90,IBAS,10,,,fp,se,cc,S,1__2,1__2,,strongly foliated granite with limonite traces +XYZ_27,72,73,30.2,D,gy,fr,2__3,0,IGRA,100,,,,,fp,se,cc,M,1__2,1__2,,foliated granite weakly chloritised +XYZ_27,73,74,27.1,D,gy,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,1__2,1__2,,granite moderately foliated +XYZ_27,74,75,29.1,D,gy,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,1__2,1__2,,granite moderately foliated +XYZ_27,75,76,27.4,D,gy,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,1__2,1__2,,granite moderately foliated +XYZ_27,76,77,32,D,gy,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,,2__3,,"granite ,weakly foliated " +XYZ_27,77,78,28.2,D,gy,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,,2__3,,"granite ,weakly foliated " +XYZ_27,78,79,30.1,D,gy,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,,2__3,,"granite ,weakly foliated " +XYZ_27,79,80,28.8,D,gy,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,,2__3,,"granite ,weakly foliated " +XYZ_27,80,81,27.8,D,gy,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,,2__3,,"granite ,weakly foliated " +XYZ_27,81,82,30.4,D,gn-gy,fr,2__3,0,IBAS,70,IGRA,30,,,cl,cc,fp,M,,1__2,,contact between basalt and granite +XYZ_27,82,83,29.9,D,gn-gy,fr,2__3,0,IGRA,80,IBAS,20,,,fp,cl,cc,M,,1__2,,contact between basalt and granite +XYZ_27,83,84,29.8,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,,1__2,,pink granite weakly foliated +XYZ_27,84,85,30.2,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,,1__2,,pink granite weakly foliated +XYZ_27,85,86,28,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,,1__2,,pink granite weakly foliated +XYZ_27,86,87,29.4,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,,1__2,,pink granite weakly foliated +XYZ_27,87,88,30.4,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,,1__2,,pink granite weakly foliated +XYZ_27,88,89,30.4,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,,1__2,,pink granite weakly foliated +XYZ_27,89,90,26.8,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,,1__2,,pink granite weakly foliated +XYZ_27,90,91,30.7,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,,1__2,,pink granite weakly foliated +XYZ_27,91,92,25,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,M,,1__2,,pink granite weakly foliated +XYZ_27,92,93,29.1,D,gy,fr,2__3,0,IGRA,100,,,,,si,se,fp,S,,1,,pink granite weakly foliated +XYZ_27,93,94,28.6,D,gy,fr,2__3,0,IGRA,100,,,,,si,se,fp,S,,1,,strongly silicified and foliated granite + chlorite +XYZ_27,94,95,31.1,D,gy,fr,2__3,0,IGRA,100,,,,,si,se,fp,S,,1,,strongly silicified and foliated granite + chlorite +XYZ_27,95,96,27.6,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,W,,1,,strongly silicified and foliated granite + chlorite +XYZ_27,96,97,29,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,W,,1,,"pink granite, weakly foliated " +XYZ_27,97,98,26,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,W,,1,,"pink granite, weakly foliated " +XYZ_27,98,99,30.4,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,W,,1,,"pink granite, weakly foliated " +XYZ_27,99,100,26.4,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,W,,1,,"pink granite, weakly foliated " +XYZ_27,100,101,31.2,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,W,,1,,"pink granite, weakly foliated " +XYZ_27,101,102,27.4,D,gy-kk,fr,2__3,0,IGRA,100,,,,,fp,cc,py,W,,1,,"pink granite, weakly foliated " Modified: tracer/profiles/default/actionicons.xml =================================================================== --- tracer/profiles/default/actionicons.xml 2014-02-10 11:44:08 UTC (rev 3456) +++ tracer/profiles/default/actionicons.xml 2014-02-12 13:01:23 UTC (rev 3457) @@ -197,9 +197,9 @@ title="Alteration intensities" priority="0" icon_expr="alterationintensity.png"/> <action-icon category="controlpanel" - action_id="bika_mineralandalterations" - title="Mineral and alterations" priority="0" - icon_expr="mineralandalteration.png"/> + action_id="bika_alterations" + title="alterations" priority="0" + icon_expr="alteration.png"/> <action-icon category="controlpanel" action_id="bika_textures" title="Textures" priority="0" Modified: tracer/profiles/default/propertiestool.xml =================================================================== --- tracer/profiles/default/propertiestool.xml 2014-02-10 11:44:08 UTC (rev 3456) +++ tracer/profiles/default/propertiestool.xml 2014-02-12 13:01:23 UTC (rev 3457) @@ -325,7 +325,7 @@ <element value="Rig"/> <element value="Colour"/> <element value="AlterationIntensity"/> - <element value="MineralAndAlteration"/> + <element value="Alteration"/> <element value="Texture"/> <element value="Weathering"/> <element value="Moisture"/> Added: tracer/profiles/default/types/Alteration.xml =================================================================== --- tracer/profiles/default/types/Alteration.xml (rev 0) +++ tracer/profiles/default/types/Alteration.xml 2014-02-12 13:01:23 UTC (rev 3457) @@ -0,0 +1,55 @@ +<?xml version="1.0"?> +<object name="MineralAndAlteration" + meta_type="Factory-based Type Information with dynamic views" + xmlns:i18n="http://xml.zope.org/namespaces/i18n"> + <property name="title">Mineral and Alteration</property> + <property + name="description">Mixin class for content types using the dynamic view FTI + + Allow the user to select a layout template (in the same way as + TemplateMixin in Archetypes does), and/or to set a contained + object's id as a default_page (acting in the same way as index_html) + + Note: folderish content types should overwrite HEAD like ATContentTypes + </property> + <property name="content_icon">mineralandalteration.png</property> + <property name="content_meta_type">MineralAndAlteration</property> + <property name="product">bika</property> + <property name="factory">addMineralAndAlteration</property> + <property name="immediate_view">tool_base_edit</property> + <property name="global_allow">False</property> + <property name="filter_content_types">False</property> + <property name="allowed_content_types"/> + <property name="allow_discussion">False</property> + <property name="default_view">base_view</property> + <property name="view_methods"> + <element value="base_view"/> + </property> + <property name="default_view_fallback">False</property> + <alias from="(Default)" to="(dynamic view)"/> + <alias from="edit" to="base_edit"/> + <alias from="index.html" to="(dynamic view)"/> + <alias from="properties" to="base_metadata"/> + <alias from="sharing" to="folder_localrole_form"/> + <alias from="view" to="(selected layout)"/> + <action title="View" action_id="view" category="object" condition_expr="" + url_expr="string:${object_url}/tool_base_edit" visible="True"> + <permission value="Modify portal content"/> + </action> + <action title="Edit" action_id="edit" category="object" condition_expr="" + url_expr="string:${object_url}/tool_base_edit" visible="True"> + <permission value="Modify portal content"/> + </action> + <action title="Properties" action_id="metadata" category="object" + condition_expr="" url_expr="string:${object_url}/base_metadata" + visible="False"> + <permission value="Modify portal content"/> + </action> + <action title="References" action_id="references" category="object" + condition_expr="object/archetype_tool/has_graphviz" + url_expr="string:${object_url}/reference_graph" visible="False"> + <permission value="Modify portal content"/> + <permission value="Review portal content"/> + </action> +</object> + Deleted: tracer/profiles/default/types/MineralAndAlteration.xml =================================================================== --- tracer/profiles/default/types/MineralAndAlteration.xml 2014-02-10 11:44:08 UTC (rev 3456) +++ tracer/profiles/default/types/MineralAndAlteration.xml 2014-02-12 13:01:23 UTC (rev 3457) @@ -1,55 +0,0 @@ -<?xml version="1.0"?> -<object name="MineralAndAlteration" - meta_type="Factory-based Type Information with dynamic views" - xmlns:i18n="http://xml.zope.org/namespaces/i18n"> - <property name="title">Mineral and Alteration</property> - <property - name="description">Mixin class for content types using the dynamic view FTI - - Allow the user to select a layout template (in the same way as - TemplateMixin in Archetypes does), and/or to set a contained - object's id as a default_page (acting in the same way as index_html) - - Note: folderish content types should overwrite HEAD like ATContentTypes - </property> - <property name="content_icon">mineralandalteration.png</property> - <property name="content_meta_type">MineralAndAlteration</property> - <property name="product">bika</property> - <property name="factory">addMineralAndAlteration</property> - <property name="immediate_view">tool_base_edit</property> - <property name="global_allow">False</property> - <property name="filter_content_types">False</property> - <property name="allowed_content_types"/> - <property name="allow_discussion">False</property> - <property name="default_view">base_view</property> - <property name="view_methods"> - <element value="base_view"/> - </property> - <property name="default_view_fallback">False</property> - <alias from="(Default)" to="(dynamic view)"/> - <alias from="edit" to="base_edit"/> - <alias from="index.html" to="(dynamic view)"/> - <alias from="properties" to="base_metadata"/> - <alias from="sharing" to="folder_localrole_form"/> - <alias from="view" to="(selected layout)"/> - <action title="View" action_id="view" category="object" condition_expr="" - url_expr="string:${object_url}/tool_base_edit" visible="True"> - <permission value="Modify portal content"/> - </action> - <action title="Edit" action_id="edit" category="object" condition_expr="" - url_expr="string:${object_url}/tool_base_edit" visible="True"> - <permission value="Modify portal content"/> - </action> - <action title="Properties" action_id="metadata" category="object" - condition_expr="" url_expr="string:${object_url}/base_metadata" - visible="False"> - <permission value="Modify portal content"/> - </action> - <action title="References" action_id="references" category="object" - condition_expr="object/archetype_tool/has_graphviz" - url_expr="string:${object_url}/reference_graph" visible="False"> - <permission value="Modify portal content"/> - <permission value="Review portal content"/> - </action> -</object> - Modified: tracer/profiles/default/types.xml =================================================================== --- tracer/profiles/default/types.xml 2014-02-10 11:44:08 UTC (rev 3456) +++ tracer/profiles/default/types.xml 2014-02-12 13:01:23 UTC (rev 3457) @@ -128,7 +128,7 @@ meta_type="Factory-based Type Information with dynamic views"/> <object name="AlterationIntensity" meta_type="Factory-based Type Information with dynamic views"/> - <object name="MineralAndAlteration" + <object name="Alteration" meta_type="Factory-based Type Information with dynamic views"/> <object name="Texture" meta_type="Factory-based Type Information with dynamic views"/> Modified: tracer/profiles/default/workflows.xml =================================================================== --- tracer/profiles/default/workflows.xml 2014-02-10 11:44:08 UTC (rev 3456) +++ tracer/profiles/default/workflows.xml 2014-02-12 13:01:23 UTC (rev 3457) @@ -49,7 +49,7 @@ <type type_id="ClientFolder"/> <type type_id="Colour"/> <type type_id="Contact"/> - <type type_id="MineralAndAlteration"/> + <type type_id="Alteration"/> <type type_id="Texture"/> <type type_id="Weathering"/> <type type_id="Moisture"/> Added: tracer/skins/bika/alteration.png =================================================================== (Binary files differ) Index: tracer/skins/bika/alteration.png =================================================================== --- tracer/skins/bika/alteration.png 2014-02-10 11:44:08 UTC (rev 3456) +++ tracer/skins/bika/alteration.png 2014-02-12 13:01:23 UTC (rev 3457) Property changes on: tracer/skins/bika/alteration.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Modified: tracer/skins/bika/import_drillholes.cpy =================================================================== --- tracer/skins/bika/import_drillholes.cpy 2014-02-10 11:44:08 UTC (rev 3456) +++ tracer/skins/bika/import_drillholes.cpy 2014-02-12 13:01:23 UTC (rev 3457) @@ -8,10 +8,15 @@ ##parameters= ##title= ## -dit = context.drillhole_import_tool project = context.REQUEST.ProjectID infile = context.REQUEST.csvfile -utmsystem = context.REQUEST.UTMSystem -result = dit.import_file(infile.readlines(), infile.filename, project, utmsystem, state) +importtype = context.REQUEST.getInputType +if importtype == 'drillholes': + tool = context.drillhole_import_tool + utmsystem = context.REQUEST.UTMSystem + result = tool.import_file(infile.readlines(), infile.filename, project, utmsystem, state) +else: + tool = context.drillhole_log_import_tool + result = tool.import_file(infile.readlines(), infile.filename, project, state) return result Modified: tracer/skins/bika/import_drillholes_form.pt =================================================================== --- tracer/skins/bika/import_drillholes_form.pt 2014-02-10 11:44:08 UTC (rev 3456) +++ tracer/skins/bika/import_drillholes_form.pt 2014-02-12 13:01:23 UTC (rev 3457) @@ -14,8 +14,7 @@ <div metal:fill-slot="main"> <h1> -<tal:block replace="structure python:getattr(here, here.getIcon(1))"/> - +<img src="drillhole.png" tal:attributes="src python:here.portal_types.getTypeInfo('DrillHole').getIcon()"/> <span i18n:translate="heading_import_drillholes" >Import drillholes to </span> <span tal:content="here/Title"/> @@ -90,7 +89,69 @@ </div> </form> + +<br/> +<br/> +<br/> +------------------------------------------------------------------------ +<h1> +<img src="drillhole.png" tal:attributes="src python:here.portal_types.getTypeInfo('DrillHole').getIcon()"/> +<span i18n:translate="heading_import_drillhole_logs" + >Import drillhole log data to </span> +<span tal:content="here/Title"/> +</h1> + +<p> + Import a csv file containing any of the following columns: + <br/> + drillhole (reqd), from, to, recover, moisture, colour, weathering, + grainsize, clay, lith1, lith1%, lith2, lith2%, lith3, lith3%, alteration1, + alteration2, alteration3, altintensity, qzvein%, sulphide%, texture, comments + <br/> + The first column must be drillhole id, with column header of 'drillhole' +</p> +<tal:example + tal:define="samplefile python:here.bika_settings.settings.getExampleDrillHoleLogImportFile(); + filename python:getattr(samplefile, 'filename', '')"> + <br/> +<a href="" title="Click to download" + tal:condition=filename + tal:attributes="href string:${here/bika_settings/settings/absolute_url}/at_download/ExampleDrillHoleLogImportFile"> +<img src="" tal:attributes="src string:${portal/absolute_url}/file.png"> +<span i18n:translate="heading_example_drillhole_file">Example drillhole log file</span> +</a> +<br/> +</tal:example> +<br/> + +<form action="import_drillhole_results" method="post" name="import_results" + enctype="multipart/form-data"> + +<input type="hidden" name="form.submitted" value="1" /> +<input type="hidden" name="ProjectID" value="" + tal:attributes="value here/getId"> +<input type="hidden" name="getInputType" value="drillholelogs"/> + + +<br/> + +<div class="field"> + <label i18n:translate="label_import_drillhole_log_file" + >Select data file for mass drillhole log import</label><br/> + <input type="file" name="csvfile" size="60"/> + +<input tabindex="" + class="standalone" + type="submit" + name="submit" + value="Import drillhole logs" + i18n:attributes="value" + /> </div> +</form> + +</div> + </body> </html> Modified: tracer/skins/bika/load_data.py =================================================================== --- tracer/skins/bika/load_data.py 2014-02-10 11:44:08 UTC (rev 3456) +++ tracer/skins/bika/load_data.py 2014-02-12 13:01:23 UTC (rev 3457) @@ -9,7 +9,7 @@ ## loaddata = { -'mineral and alteration': ( +'alteration': ( ('ac', 'actinolite'), ('ak', 'ankerite'), ('al', 'almandine'), Modified: tracer/skins/bika/load_sample_data.py =================================================================== --- tracer/skins/bika/load_sample_data.py 2014-02-10 11:44:08 UTC (rev 3456) +++ tracer/skins/bika/load_sample_data.py 2014-02-12 13:01:23 UTC (rev 3457) @@ -8,16 +8,16 @@ ##title=Load sample data ## -# Setup mineral and alteration data -folder = context.bika_mineralandalterations -in_data = context.load_data('mineral and alteration') +# Setup alteration data +folder = context.bika_alterations +in_data = context.load_data('alteration') for title, description in in_data: - id = folder.generateUniqueId('MineralAndAlteration') - folder.invokeFactory(id=id, type_name='MineralAndAlteration') + id = folder.generateUniqueId('Alteration') + folder.invokeFactory(id=id, type_name='Alteration') obj = folder[id] obj.edit(title=title, - MineralAndAlterationDescription=description) + AlterationDescription=description) # Setup textures folder = context.bika_textures Modified: tracer/skins/bika/load_small_data.py =================================================================== --- tracer/skins/bika/load_small_data.py 2014-02-10 11:44:08 UTC (rev 3456) +++ tracer/skins/bika/load_small_data.py 2014-02-12 13:01:23 UTC (rev 3457) @@ -8,16 +8,16 @@ ##title=Load sample data ## -# Setup mineral and alteration data -folder = context.bika_mineralandalterations -in_data = context.load_data_small('mineral and alteration') +# Setup alteration data +folder = context.bika_alterations +in_data = context.load_data_small('alteration') for title, description in in_data: - id = folder.generateUniqueId('MineralAndAlteration') - folder.invokeFactory(id=id, type_name='MineralAndAlteration') + id = folder.generateUniqueId('Alteration') + folder.invokeFactory(id=id, type_name='Alteration') obj = folder[id] obj.edit(title=title, - MineralAndAlterationDescription=description) + AlterationDescription=description) # Setup textures folder = context.bika_textures Modified: tracer/skins/bika/load_tiny_data.py =================================================================== --- tracer/skins/bika/load_tiny_data.py 2014-02-10 11:44:08 UTC (rev 3456) +++ tracer/skins/bika/load_tiny_data.py 2014-02-12 13:01:23 UTC (rev 3457) @@ -8,16 +8,16 @@ ##title=Load tiny sample data ## -# Setup mineral and alteration data -folder = context.bika_mineralandalterations -in_data = context.load_data_tiny('mineral and alteration') +# Setup alteration data +folder = context.bika_alterations +in_data = context.load_data_tiny('alteration') for title, description in in_data: - id = folder.generateUniqueId('MineralAndAlteration') - folder.invokeFactory(id=id, type_name='MineralAndAlteration') + id = folder.generateUniqueId('Alteration') + folder.invokeFactory(id=id, type_name='Alteration') obj = folder[id] obj.edit(title=title, - MineralAndAlterationDescription=description) + AlterationDescription=description) # Setup textures folder = context.bika_textures Deleted: tracer/skins/bika/mineralandalteration.png =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ann...@us...> - 2014-02-10 11:44:11
|
Revision: 3456 http://sourceforge.net/p/bika/code/3456 Author: anneline Date: 2014-02-10 11:44:08 +0000 (Mon, 10 Feb 2014) Log Message: ----------- drillhole imports Modified Paths: -------------- tracer/BikaSettings.py tracer/Tools.py tracer/skins/bika/import_drillhole_results.pt tracer/skins/bika/import_drillholes.cpy tracer/skins/bika/import_drillholes_form.pt tracer/skins/bika/import_samples.cpy tracer/skins/bika/project_drillholes.pt Added Paths: ----------- tracer/example_drillholes.csv Modified: tracer/BikaSettings.py =================================================================== --- tracer/BikaSettings.py 2014-02-06 13:02:38 UTC (rev 3455) +++ tracer/BikaSettings.py 2014-02-10 11:44:08 UTC (rev 3456) @@ -195,8 +195,8 @@ FileField('ExampleDrillHoleImportFile', widget=FileWidget( showLink=True, - label='Example Sample Import File', - label_msgid='label_example_sample_import_file', + label='Example Drillhole Import File', + label_msgid='label_example_drillhole_import_file', i18n_domain=I18N_DOMAIN, ) ), Modified: tracer/Tools.py =================================================================== --- tracer/Tools.py 2014-02-06 13:02:38 UTC (rev 3455) +++ tracer/Tools.py 2014-02-10 11:44:08 UTC (rev 3456) @@ -1789,8 +1789,8 @@ drillhole_count = 0 batch_remarks = [] valid_headers = ['drillhole', 'east', 'north', 'azimuth', 'dip', \ - 'elevation', 'EOH', 'watertable', 'drillcompany', \ - 'rig', 'drilltype', 'bitsize'] + 'elevation', 'eoh', 'watertable', 'drillcompany', \ + 'rig', 'drilltype', 'bitsize', 'comments'] started = False for row in reader: row_count = row_count + 1 @@ -1860,8 +1860,8 @@ Rig=d['rig'], DrillType=d['drilltype'], BitSize=d['bitsize'], + Notes=d['comments'], ) - return errors #valid = self.validate_arimport_c(arimport) #REQUEST.RESPONSE.write('<script>document.location.href="%s/project_drillholes?portal_status_message=%s%%20imported"</script>' % (client.absolute_url(), sample_id)) Added: tracer/example_drillholes.csv =================================================================== --- tracer/example_drillholes.csv (rev 0) +++ tracer/example_drillholes.csv 2014-02-10 11:44:08 UTC (rev 3456) @@ -0,0 +1,9 @@ +drillhole,east,north,Azimuth,Dip,elevation,EOH,watertable,drillcompany,rig,drilltype,bitsize,Comments +XYZ_20,529243.72,1457306.28,135,-60,330,150,,PPI,Schramm,RC,5.5inch,Main xyz artisanal area. Drilling southeast. Under Pit?? +XYZ_21,529187.15,1457362.85,135,-60,331,150,,PPI,Schramm,RC,5.5inch,Main xyz artisanal area. Drilling southeast +XYZ_22,529300.29,1457249.71,225,-60,350,150,,PPI,Schramm,RC,5.5inch,Main xyz artisanal area. Scissor to northwest. Under pit?? +XYZ_23,529161.29,1457250.71,135,-60,322,150,,PPI,Schramm,RC,5.5inch,Main xyz artisanal area. Drilling southeast. +XYZ_24,529104.72,1457307.28,135,-60,322,150,,PPI,Schramm,RC,5.5inch,Main xyz artisanal area. Drilling southeast. +XYZ_25,529048.15,1457363.85,135,-60,322,150,,PPI,Schramm,RC,5.5inch,Main xyz artisanal area. Drilling southeast. +XYZ_26,528390.29,1457039.71,135,-60,322,150,,PPI,Schramm,RC,5.5inch,Western Artisanal area. Drilling southeast +XYZ_27,528446.86,1456983.14,225,-60,322,130,,PPI,Schramm,RC,5.5inch,Western Artisanal area. Drilling northwest Modified: tracer/skins/bika/import_drillhole_results.pt =================================================================== --- tracer/skins/bika/import_drillhole_results.pt 2014-02-06 13:02:38 UTC (rev 3455) +++ tracer/skins/bika/import_drillhole_results.pt 2014-02-10 11:44:08 UTC (rev 3456) @@ -26,8 +26,12 @@ errors python:here.import_drillholes(); "> <dl> +<tal:check tal:condition="python:not errors"> +<span i18n:translate="label_drillholes loaded">Drillholes loaded</span> +</tal:check> <tal:check tal:condition="errors"> +here are some errors <dt i18n:translate="heading_errors">Errors</dt> <tal:errors tal:repeat="errs errors"> Modified: tracer/skins/bika/import_drillholes.cpy =================================================================== --- tracer/skins/bika/import_drillholes.cpy 2014-02-06 13:02:38 UTC (rev 3455) +++ tracer/skins/bika/import_drillholes.cpy 2014-02-10 11:44:08 UTC (rev 3456) @@ -11,6 +11,7 @@ dit = context.drillhole_import_tool project = context.REQUEST.ProjectID infile = context.REQUEST.csvfile -result = dit.import_file(infile.readlines(), infile.filename, project, state) +utmsystem = context.REQUEST.UTMSystem +result = dit.import_file(infile.readlines(), infile.filename, project, utmsystem, state) -return state +return result Modified: tracer/skins/bika/import_drillholes_form.pt =================================================================== --- tracer/skins/bika/import_drillholes_form.pt 2014-02-06 13:02:38 UTC (rev 3455) +++ tracer/skins/bika/import_drillholes_form.pt 2014-02-10 11:44:08 UTC (rev 3456) @@ -24,20 +24,22 @@ <p> Import a csv file containing any of the following columns: <br/> - drillhole ID (reqd), east, north, azimuth, dip, elevation, EOH, - watertable, drillcompany, rig, drilltype, bitsize + drillhole (reqd), east, north, azimuth, dip, elevation, EOH, + watertable, drillcompany, rig, drilltype, bitsize, comments <br/> The first column must be drillhole id, with column header of 'drillhole' </p> <tal:example tal:define="samplefile python:here.bika_settings.settings.getExampleDrillHoleImportFile(); filename python:getattr(samplefile, 'filename', '')"> + <br/> <a href="" title="Click to download" tal:condition=filename tal:attributes="href string:${here/bika_settings/settings/absolute_url}/at_download/ExampleDrillHoleImportFile"> <img src="" tal:attributes="src string:${portal/absolute_url}/file.png"> <span i18n:translate="heading_example_drillhole_file">Example drillhole file</span> </a> +<br/> </tal:example> <br/> Modified: tracer/skins/bika/import_samples.cpy =================================================================== --- tracer/skins/bika/import_samples.cpy 2014-02-06 13:02:38 UTC (rev 3455) +++ tracer/skins/bika/import_samples.cpy 2014-02-10 11:44:08 UTC (rev 3456) @@ -17,4 +17,4 @@ infile = context.REQUEST.csvfile result = sit.import_file(infile.readlines(), infile.filename, project, contact, sampletype, utmsystem, analyses, state) -return state +return result Modified: tracer/skins/bika/project_drillholes.pt =================================================================== --- tracer/skins/bika/project_drillholes.pt 2014-02-06 13:02:38 UTC (rev 3455) +++ tracer/skins/bika/project_drillholes.pt 2014-02-10 11:44:08 UTC (rev 3456) @@ -71,6 +71,17 @@ i18n:attributes="value" tal:attributes=" tabindex tabindex/next|nothing"/> +  +<input + class="standalone" + type="submit" + name="import_drillholes_form:method" + value="Import drillholes batch" + tabindex="" + i18n:attributes="value" + tal:attributes=" + tabindex tabindex/next|nothing"/> +  </form> <br/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ann...@us...> - 2014-02-06 13:02:40
|
Revision: 3455 http://sourceforge.net/p/bika/code/3455 Author: anneline Date: 2014-02-06 13:02:38 +0000 (Thu, 06 Feb 2014) Log Message: ----------- Added Paths: ----------- tracer/skins/bika/import_drillhole_results.pt tracer/skins/bika/import_drillholes.cpy tracer/skins/bika/import_drillholes.cpy.metadata tracer/skins/bika/import_drillholes_form.pt tracer/skins/bika/validate_drillhole_edit_form.vpy Added: tracer/skins/bika/import_drillhole_results.pt =================================================================== --- tracer/skins/bika/import_drillhole_results.pt (rev 0) +++ tracer/skins/bika/import_drillhole_results.pt 2014-02-06 13:02:38 UTC (rev 3455) @@ -0,0 +1,45 @@ +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" + lang="en" + metal:use-macro="here/main_template/macros/master" + i18n:domain="bika"> + +<head> + <metal:block fill-slot="top_slot" + tal:define="dummy python:request.set('disable_border', 1)" /> +</head> + + +<body> + +<div metal:fill-slot="main"> +<div metal:use-macro="here/document_actions/macros/document_actions"> +Document actions (print, sendto etc) +</div> +<h1> +<tal:block replace="structure python:getattr(here, here.getIcon(1))"/> +<span i18n:translate="heading_import_results" + >Imported data results</span> +</h1> + +<div +tal:define=" + errors python:here.import_drillholes(); + "> +<dl> + +<tal:check tal:condition="errors"> +<dt i18n:translate="heading_errors">Errors</dt> +<tal:errors + tal:repeat="errs errors"> +<dd tal:content="errs"/> +</tal:errors> +</tal:check> + +</dl> + +</div> +</div> + +</body> +</html> + Added: tracer/skins/bika/import_drillholes.cpy =================================================================== --- tracer/skins/bika/import_drillholes.cpy (rev 0) +++ tracer/skins/bika/import_drillholes.cpy 2014-02-06 13:02:38 UTC (rev 3455) @@ -0,0 +1,16 @@ +## Script (Python) "import_drillholes" +##bind container=container +##bind context=context +##bind namespace= +##bind script=script +##bind state=state +##bind subpath=traverse_subpath +##parameters= +##title= +## +dit = context.drillhole_import_tool +project = context.REQUEST.ProjectID +infile = context.REQUEST.csvfile +result = dit.import_file(infile.readlines(), infile.filename, project, state) + +return state Added: tracer/skins/bika/import_drillholes.cpy.metadata =================================================================== --- tracer/skins/bika/import_drillholes.cpy.metadata (rev 0) +++ tracer/skins/bika/import_drillholes.cpy.metadata 2014-02-06 13:02:38 UTC (rev 3455) @@ -0,0 +1,7 @@ +[default] +title=Add analysis requests +proxy=Manager,Anonymous + +[actions] +action.failure=traverse_to:string:project_drillholes +action.success=traverse_to:string:project_drillholes Added: tracer/skins/bika/import_drillholes_form.pt =================================================================== --- tracer/skins/bika/import_drillholes_form.pt (rev 0) +++ tracer/skins/bika/import_drillholes_form.pt 2014-02-06 13:02:38 UTC (rev 3455) @@ -0,0 +1,94 @@ +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" + lang="en" + metal:use-macro="here/main_template/macros/master" + i18n:domain="bika"> + +<head> + <metal:block fill-slot="top_slot" + tal:define="dummy python:request.set('enable_border', 1)" /> +</head> + + +<body> + +<div metal:fill-slot="main"> + +<h1> +<tal:block replace="structure python:getattr(here, here.getIcon(1))"/> + +<span i18n:translate="heading_import_drillholes" + >Import drillholes to </span> +<span tal:content="here/Title"/> +</h1> + +<p> + Import a csv file containing any of the following columns: + <br/> + drillhole ID (reqd), east, north, azimuth, dip, elevation, EOH, + watertable, drillcompany, rig, drilltype, bitsize + <br/> + The first column must be drillhole id, with column header of 'drillhole' +</p> +<tal:example + tal:define="samplefile python:here.bika_settings.settings.getExampleDrillHoleImportFile(); + filename python:getattr(samplefile, 'filename', '')"> +<a href="" title="Click to download" + tal:condition=filename + tal:attributes="href string:${here/bika_settings/settings/absolute_url}/at_download/ExampleDrillHoleImportFile"> +<img src="" tal:attributes="src string:${portal/absolute_url}/file.png"> +<span i18n:translate="heading_example_drillhole_file">Example drillhole file</span> +</a> +</tal:example> +<br/> + +<form action="import_drillhole_results" method="post" name="import_results" + enctype="multipart/form-data"> + +<input type="hidden" name="form.submitted" value="1" /> +<input type="hidden" name="ProjectID" value="" + tal:attributes="value here/getId"> +<input type="hidden" name="getInputType" value="drillholes"/> + + +<div class="field" + tal:define="utms python:here.portal_catalog(portal_type='UTMSystem'); + sort_on python:(('Title','nocase', 'asc'),); + utmsystems python:sequence.sort(utms, sort_on);"> + <label i18n:translate="label_utmsystem" + >UTM system</label><br/> + <select name="UTMSystem" id="" + tal:attributes="tabindex tabindex/next;"> + + <tal:item + tal:define=" + vocab utmsystems" + tal:repeat="item vocab"> + <option + tal:attributes="value item/Title" + tal:content="item/Title"></option> + </tal:item> + + </select> + +</div> +<br/> + +<div class="field"> + <label i18n:translate="label_import_drillhole_file" + >Select data file for mass drillhole import</label><br/> + <input type="file" name="csvfile" size="60"/> + +<input tabindex="" + class="standalone" + type="submit" + name="submit" + value="Import drillholes" + i18n:attributes="value" + /> +</div> + +</form> +</div> + +</body> +</html> Added: tracer/skins/bika/validate_drillhole_edit_form.vpy =================================================================== --- tracer/skins/bika/validate_drillhole_edit_form.vpy (rev 0) +++ tracer/skins/bika/validate_drillhole_edit_form.vpy 2014-02-06 13:02:38 UTC (rev 3455) @@ -0,0 +1,105 @@ +## Controller Python Script "validate_trench_edit_form" +##bind container=container +##bind context=context +##bind namespace= +##bind script=script +##bind state=state +##bind subpath=traverse_subpath +##parameters= +##title=validates trench edit form +from DateTime import DateTime +from Products.bika.utils import sortable_title +portal = context.portal_url.getPortalObject() +current_year = DateTime().year() + +def missing(field): + message=context.translate('message_input_required', default='Input is required but no input given.', domain='bika') + state.setError(field, message, 'sample_form_input_required') + +error_found = False +rc = context.reference_catalog + +required_fields = ('ClientTrenchID', 'UTMSystem', 'StartEasting', 'StartNorthing', 'EndEasting', 'EndNorthing', 'Length', 'SamplingDirection', 'DatePlanned') +for key, value in context.REQUEST.form.items(): + + if key in ('UTMSystem', 'StartEasting', 'StartNorthing', 'EndEasting', 'EndNorthing', 'Length', 'SamplingDirection', 'DatePlanned', 'DateSetOut', 'SetOutBy', 'DateExcavated', 'DateMarkedOut', 'DateProfiled', 'DateMapped', 'MappedBy', 'DatePhotographed', 'DateWorked', 'DateBackfilled'): + error_key = key + if value: + context.REQUEST.set(key, value) + else: + if key in required_fields: + missing(error_key) + error_found = True + +items = context.REQUEST.form + +date_planned = None +if items.has_key('DatePlanned'): + x = items['DatePlanned'] + if x: + date_planned = DateTime(x) + +date_sequence = ('DatePlanned', 'DateSetOut', 'DateExcavated', 'DateMarkedOut', 'DateProfiled', 'DateMapped', 'DatePhotographed', 'DateWorked', 'DateBackfilled') +Now = DateTime() + +prev_date = None +prev_name = None +for d in date_sequence: + this_date = None + if items.has_key(d): + x = items[d] + if x: + this_date = DateTime(x) + if this_date > Now: + error_found = True + state.setError(d, 'Cannot be in the future') + + if prev_date: + if this_date < prev_date: + error_found = True + state.setError(d, 'Must be after %s ' %(prev_name)) + else: + if not d == 'DatePlanned': + error_found = True + state.setError(d, '%s required before %s' %(prev_name, d)) + prev_date = this_date + prev_name = d + +setoutby = None +if items.has_key('DateSetOut'): + datesetout = items['DateSetOut'] + if datesetout: + setoutby = items['SetOutBy'] + if not setoutby: + error_found = True + state.setError('SetOut', 'Set out by is required') + +mappedby = None +if items.has_key('DateMapped'): + datemapped = items['DateMapped'] + if datemapped: + mappedby = items['MappedBy'] + if not mappedby: + error_found = True + state.setError('Mapped', 'Mapped by is required') + + + + + +if state.getErrors(): + if error_found: + message=context.translate('message_correct_errors', default='Please correct the indicated errors', domain='bika') + else: + message=context.translate('message_confirm_changes', default='Please confirm changes', domain='bika') + +if state.getErrors(): + return state.set( + status='failure', + portal_status_message=message + ) +else: + message=context.translate('message_trench_created', default='The trench was successfully modified', domain='bika') + return state.set( +portal_status_message=message) + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ann...@us...> - 2014-02-06 13:00:33
|
Revision: 3454 http://sourceforge.net/p/bika/code/3454 Author: anneline Date: 2014-02-06 13:00:26 +0000 (Thu, 06 Feb 2014) Log Message: ----------- Modified Paths: -------------- tracer/BikaSettings.py tracer/Extensions/Install.py tracer/Project.py tracer/Tools.py tracer/__init__.py tracer/profiles/default/types/Project.xml Modified: tracer/BikaSettings.py =================================================================== --- tracer/BikaSettings.py 2014-02-05 13:13:13 UTC (rev 3453) +++ tracer/BikaSettings.py 2014-02-06 13:00:26 UTC (rev 3454) @@ -192,6 +192,14 @@ i18n_domain=I18N_DOMAIN, ) ), + FileField('ExampleDrillHoleImportFile', + widget=FileWidget( + showLink=True, + label='Example Sample Import File', + label_msgid='label_example_sample_import_file', + i18n_domain=I18N_DOMAIN, + ) + ), FileField('ExampleLabResultsImportFile', widget=FileWidget( showLink=True, Modified: tracer/Extensions/Install.py =================================================================== --- tracer/Extensions/Install.py 2014-02-05 13:13:13 UTC (rev 3453) +++ tracer/Extensions/Install.py 2014-02-06 13:00:26 UTC (rev 3454) @@ -15,7 +15,7 @@ LabInfoTool, SettingsTool, IDTool, \ ImportWinescanFT120Tool, ImportWinescanAutoTool, ImportPersonnelTool, \ ImportDataCollectorTool, \ - SampleImportTool, ARExportTool, SampleExportTool, \ + SampleImportTool, DrillHoleImportTool, ARExportTool, SampleExportTool, \ SamplePointsTool, \ AttachmentTypesTool, PersonnelExportTool, ServicesExportTool, \ StratigraphiesExportTool, LithologiesExportTool, \ @@ -213,6 +213,11 @@ SampleImportTool.meta_type, None) print >> out, "Successfully installed AR Import Tool." + if not hasattr(portal, 'drillhole_import_tool'): + portal.manage_addProduct[PROJECTNAME].manage_addTool( + DrillHoleImportTool.meta_type, None) + print >> out, "Successfully installed drilhole Import Tool." + if not hasattr(portal, 'sample_export_tool'): portal.manage_addProduct[PROJECTNAME].manage_addTool( SampleExportTool.meta_type, None) Modified: tracer/Project.py =================================================================== --- tracer/Project.py 2014-02-05 13:13:13 UTC (rev 3453) +++ tracer/Project.py 2014-02-06 13:00:26 UTC (rev 3454) @@ -113,6 +113,11 @@ 'action': 'string:${object_url}/project_trenches', 'permissions': (ListFolderContents,), }, + {'id': 'import_drillholes', + 'name': 'Import drillholes', + 'action': 'string:${object_url}/import_drillholes_form', + 'permissions': (ListFolderContents,), + }, {'id': 'import_samples', 'name': 'Import samples', 'action': 'string:${object_url}/import_samples_form', Modified: tracer/Tools.py =================================================================== --- tracer/Tools.py 2014-02-05 13:13:13 UTC (rev 3453) +++ tracer/Tools.py 2014-02-06 13:00:26 UTC (rev 3454) @@ -1751,7 +1751,124 @@ InitializeClass(SampleImportTool) + + ###################################################################### +# DrillHoleImportTool +###################################################################### + +class DrillHoleImportTool(UniqueObject, SimpleItem): + """ DrillHoleImportTool """ + + security = ClassSecurityInfo() + id = 'drillhole_import_tool' + title = 'DrillHole Import Tool' + description = 'Imports DrillHoles.' + meta_type = 'DrillHole Import Tool' + + security.declareProtected(ManageSample, 'import_file') + def import_file(self, csvfile, filename, project_id, utmsystem, state): + import csv + slash = filename.rfind('\\') + full_name = filename[slash+1:] + ext = full_name.rfind('.') + if ext == -1: + actual_name = full_name + else: + actual_name = full_name[:ext] + log = [] + r = self.portal_catalog(portal_type='Project', id=project_id) + if len(r) == 0: + log.append(' Could not find Project %s' % project_id) + return '\n'.join(log) + project = r[0].getObject() + reader = csv.reader(csvfile) + drillholes = [] + batch_headers = [] + row_count = 0 + drillhole_count = 0 + batch_remarks = [] + valid_headers = ['drillhole', 'east', 'north', 'azimuth', 'dip', \ + 'elevation', 'EOH', 'watertable', 'drillcompany', \ + 'rig', 'drilltype', 'bitsize'] + started = False + for row in reader: + row_count = row_count + 1 + if not row: continue + # a new batch starts + if row[0].lower() == 'drillhole': + for i in row: + header = i.lower() + if header in valid_headers: + batch_headers.append(header) + else: + msg = '%s invalid batch header' % header + transaction_note(msg) + return state.set(status='failure', portal_status_message=msg) + started = True + continue + if started: + drillhole = dict(zip(batch_headers, row)) + drillholes.append(drillhole) + + + pad = 8192*' ' + #REQUEST = self.REQUEST + #REQUEST.RESPONSE.write(self.progress_bar(REQUEST=REQUEST)) + #REQUEST.RESPONSE.write('<input style="display: none;" id="progressType" value="Sample validating">') + #REQUEST.RESPONSE.write('<input style="display: none;" id="progressDone" value="Loading...">') + #REQUEST.RESPONSE.write(pad+'<input style="display: none;" id="inputTotal" value="%s">' % len(drillholes)) + + results = {} + errors = [] + + #REQUEST = self.REQUEST + #REQUEST.RESPONSE.write(self.progress_bar(REQUEST=REQUEST)) + #REQUEST.RESPONSE.write('<input style="display: none;" id="progressType" value="Sample import">') + #REQUEST.RESPONSE.write('<input style="display: none;" id="progressDone" value="Validating...">') + #REQUEST.RESPONSE.write(pad+'<input style="display: none;" id="inputTotal" value="%s">' % len(drillholes)) + + row_count = 0 + for d in drillholes: + row_count = row_count + 1 + #REQUEST.RESPONSE.write(pad+'<input style="display: none;" name="inputProgress" value="%s">' % row_count) + item_remarks = [] + #analyses = [] + #for i in range(9, len(sample)): + # if sample[i] != '1': + # continue + # analyses.append(sample_headers[(i-9)]) + #if len(analyses) > 0: + drillhole_id = self.generateUniqueId('DrillHole') + project.invokeFactory(id=drillhole_id, type_name='DrillHole') + drillhole = project._getOb(drillhole_id) + for h in valid_headers: + if h not in batch_headers: + d[h] = None + + drillhole.edit( + DrillHoleID=drillhole_id, + UTMSystem=utmsystem, + East=d['east'], + North=d['north'], + Azimuth=d['azimuth'], + Dip=d['dip'], + Elevation=d['elevation'], + EOH=d['eoh'], + WaterTable=d['watertable'], + DrillCompany=d['drillcompany'], + Rig=d['rig'], + DrillType=d['drilltype'], + BitSize=d['bitsize'], + ) + + return errors + #valid = self.validate_arimport_c(arimport) + #REQUEST.RESPONSE.write('<script>document.location.href="%s/project_drillholes?portal_status_message=%s%%20imported"</script>' % (client.absolute_url(), sample_id)) + +InitializeClass(DrillHoleImportTool) + +###################################################################### # ARExportTool ###################################################################### Modified: tracer/__init__.py =================================================================== --- tracer/__init__.py 2014-02-05 13:13:13 UTC (rev 3453) +++ tracer/__init__.py 2014-02-06 13:00:26 UTC (rev 3454) @@ -116,6 +116,7 @@ Tools.IDTool, Tools.ImportPersonnelTool, Tools.SampleImportTool, + Tools.DrillHoleImportTool, Tools.SampleExportTool, Tools.ARExportTool, Tools.PersonnelExportTool, Modified: tracer/profiles/default/types/Project.xml =================================================================== --- tracer/profiles/default/types/Project.xml 2014-02-05 13:13:13 UTC (rev 3453) +++ tracer/profiles/default/types/Project.xml 2014-02-06 13:00:26 UTC (rev 3454) @@ -61,6 +61,13 @@ visible="True"> <permission value="List folder contents"/> </action> + <action title="import drillholes" action_id="import_drillholes" + category="object" + condition_expr="" + url_expr="string:${object_url}/import_drillholes_form" + visible="True"> + <permission value="List folder contents"/> + </action> <action title="import samples" action_id="import_samples" category="object" condition_expr="" url_expr="string:${object_url}/import_samples_form" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ann...@us...> - 2014-02-05 13:13:16
|
Revision: 3453 http://sourceforge.net/p/bika/code/3453 Author: anneline Date: 2014-02-05 13:13:13 +0000 (Wed, 05 Feb 2014) Log Message: ----------- drillhole logging Modified Paths: -------------- tracer/DrillHole.py tracer/__init__.py tracer/profiles/default/propertiestool.xml tracer/profiles/default/types.xml tracer/profiles/default/workflows.xml tracer/skins/bika/drillhole_view.pt tracer/skins/bika/hide_content_action_types.py Added Paths: ----------- tracer/DrillHoleLog.py tracer/profiles/default/types/DrillHoleLog.xml Modified: tracer/DrillHole.py =================================================================== --- tracer/DrillHole.py 2014-02-05 10:00:05 UTC (rev 3452) +++ tracer/DrillHole.py 2014-02-05 13:13:13 UTC (rev 3453) @@ -1,4 +1,4 @@ -"""The request for analysis by a client. It contains analysis instances. +"""DrillHole entity $Id: DrillHole.py 2755 2011-06-26 13:48:24Z campbellbasset $ """ @@ -209,7 +209,7 @@ security = ClassSecurityInfo() archetype_name = 'DrillHole' schema = schema - allowed_content_types = () + allowed_content_types = ('DrillHoleLog',) content_icon = 'drillhole.png' immediate_view = 'base_view' use_folder_tabs = 0 @@ -244,6 +244,20 @@ """ Return the DrillHole ID as title """ return self.getDrillHoleID() + def getLogData(self): + """ return the logged rows in depth sequence + """ + dlogs = {} + for dlog in self.objectValues('DrillHoleLog'): + dlogs[dlog.getFromDepth()] = dlog + dlog_keys = dlogs.keys() + dlog_keys.sort() + dlog_array = [] + for dkey in dlog_keys: + dlog_array.append(dlogs[dkey]) + + return dlog_array + def setUTMSystem(self, value, **kw): """ convert UTMSystem title to UID """ Added: tracer/DrillHoleLog.py =================================================================== --- tracer/DrillHoleLog.py (rev 0) +++ tracer/DrillHoleLog.py 2014-02-05 13:13:13 UTC (rev 3453) @@ -0,0 +1,212 @@ +""" Drill hole litho logging + +$Id: DrillHoleLog.py 2755 2011-06-26 13:48:24Z campbellbasset $ +""" +import sys +import time +from types import ListType, TupleType +from email.Utils import formataddr +from DateTime import DateTime +from AccessControl import ClassSecurityInfo +from AccessControl.Permissions import delete_objects +from Products.CMFCore.WorkflowCore import WorkflowException +from Products.CMFCore.CMFCorePermissions import View, ModifyPortalContent +from Products.CMFCore import CMFCorePermissions +from Products.CMFCore.utils import getToolByName +from Products.CMFPlone.utils import transaction_note +from Products.Archetypes.public import * +from Products.Archetypes.references import HoldingReference +from Products.Archetypes.utils import shasattr +from Products.Archetypes.config import REFERENCE_CATALOG +from Products.ATExtensions.ateapi import DateTimeField, DateTimeWidget +from Products.bika.BikaContent import BikaSchema +from Products.bika.config import I18N_DOMAIN, PROJECTNAME +from Products.bika.config import ManageSample, ManageBika +from Products.bika.utils import sortable_title +from Products.bika.fixedpoint import FixedPoint +from Products.bika.FixedPointField import FixedPointField +from Products.CMFDynamicViewFTI.browserdefault import \ + BrowserDefaultMixin + +schema = BikaSchema.copy() + Schema(( + IntegerField('FromDepth', + widget=IntegerWidget( + label='From', + label_msgid='label_from', + i18n_domain=I18N_DOMAIN, + ), + ), + IntegerField('ToDepth', + widget=IntegerWidget( + label='To', + label_msgid='label_to', + i18n_domain=I18N_DOMAIN, + ), + ), + FixedPointField('RecoveryKg', + widget=DecimalWidget( + label='Recovery Kg', + label_msgid='label_recoverykg', + description='Amount recovered' + ), + ), + ReferenceField('Moisture', + required=0, + allowed_types=('Moisture',), + referenceClass=HoldingReference, + relationship='DrillHoleLogMoisture', + ), + ReferenceField('Colour', + required=0, + allowed_types=('Colour',), + referenceClass=HoldingReference, + relationship='DrillHoleLogColour', + ), + ReferenceField('Weathering', + required=0, + allowed_types=('Weathering',), + referenceClass=HoldingReference, + relationship='DrillHoleLogWeathering', + ), + StringField('GrainSize', + widget=StringWidget( + label='Grain size', + label_msgid='label_grainsize', + i18n_domain=I18N_DOMAIN, + ), + ), + IntegerField('ClayFinesPercent', + widget=IntegerWidget( + label='Clay fines %', + label_msgid='label_clayfinespercent', + i18n_domain=I18N_DOMAIN, + ), + ), + ReferenceField('Lithology1', + allowed_types=('Lithology',), + referenceClass=HoldingReference, + relationship='DrillHoleLogLithology1', + ), + IntegerField('Lithology1Percent', + widget=IntegerWidget( + label='Lithology 1 %', + label_msgid='label_lithology1percent', + i18n_domain=I18N_DOMAIN, + ), + ), + ReferenceField('Lithology2', + allowed_types=('Lithology',), + referenceClass=HoldingReference, + relationship='DrillHoleLogLithology2', + ), + IntegerField('Lithology2Percent', + widget=IntegerWidget( + label='Lithology 2 %', + label_msgid='label_lithology2percent', + i18n_domain=I18N_DOMAIN, + ), + ), + ReferenceField('Lithology3', + allowed_types=('Lithology',), + referenceClass=HoldingReference, + relationship='DrillHoleLogLithology3', + ), + IntegerField('Lithology3Percent', + widget=IntegerWidget( + label='Lithology 3 %', + label_msgid='label_lithology3percent', + i18n_domain=I18N_DOMAIN, + ), + ), + ReferenceField('Alteration1', + allowed_types=('MineralAndAlteration',), + referenceClass=HoldingReference, + relationship='DrillHoleLogAlteration1', + ), + ReferenceField('Alteration2', + allowed_types=('MineralAndAlteration',), + referenceClass=HoldingReference, + relationship='DrillHoleLogAlteration2', + ), + ReferenceField('Alteration3', + allowed_types=('MineralAndAlteration',), + referenceClass=HoldingReference, + relationship='DrillHoleLogAlteration3', + ), + ReferenceField('AlterationIntensity', + allowed_types=('AlterationIntensity',), + referenceClass=HoldingReference, + relationship='DrillHoleLogAlterationIntensity', + ), + IntegerField('QzVeinPercent', + widget=IntegerWidget( + label='Quartz vein %', + label_msgid='label_quartzveinpercent', + i18n_domain=I18N_DOMAIN, + ), + ), + IntegerField('SulphidePercent', + widget=IntegerWidget( + label='Sulphide %', + label_msgid='label_sulphidepercent', + i18n_domain=I18N_DOMAIN, + ), + ), + ReferenceField('Texture', + allowed_types=('Texture',), + referenceClass=HoldingReference, + relationship='DrillHoleLogTexture', + ), + TextField('Notes', + widget=TextAreaWidget( + label='Notes' + ), + ), + ComputedField('DrillHoleUID', + index='FieldIndex', + expression='here.aq_parent.UID()', + widget=ComputedWidget( + visible=False, + ), + ), +), +) + +IdField = schema['id'] +TitleField = schema['title'] +TitleField.required = 0 +TitleField.widget.visible = {'edit': 'hidden', 'view': 'invisible'} + +class DrillHoleLog(BrowserDefaultMixin, BaseFolder): + security = ClassSecurityInfo() + archetype_name = 'DrilHoleLog' + schema = schema + allowed_content_types = () + content_icon = 'drillhole.png' + immediate_view = 'base_view' + use_folder_tabs = 0 + global_allow = 0 + filter_content_types = 1 + factory_type_information = { + 'title': 'DrillHoleLog' + } + __implements__ = BaseFolder.__implements__ + ( + BrowserDefaultMixin.__implements__, ) + + actions = () + + + def Title(self): + """ Return the drillhole title and depth range as title """ + + return '%s %s-%s' %(self.aq_parent.Title(), self.FromDepth(), self.ToDepth()) + + +registerType(DrillHoleLog) + +def modify_fti(fti): + for a in fti['actions']: + if a['id'] in ('view', 'edit', 'syndication', 'references', 'metadata', + 'localroles'): + a['visible'] = 0 + return fti Modified: tracer/__init__.py =================================================================== --- tracer/__init__.py 2014-02-05 10:00:05 UTC (rev 3452) +++ tracer/__init__.py 2014-02-05 13:13:13 UTC (rev 3453) @@ -34,6 +34,7 @@ import Contact import Sample import DrillHole + import DrillHoleLog import Trench import Addendum import Attachment Modified: tracer/profiles/default/propertiestool.xml =================================================================== --- tracer/profiles/default/propertiestool.xml 2014-02-05 10:00:05 UTC (rev 3452) +++ tracer/profiles/default/propertiestool.xml 2014-02-05 13:13:13 UTC (rev 3453) @@ -319,6 +319,8 @@ <element value="SampleType"/> <element value="SkillType"/> <element value="Designation"/> + <element value="DrillHole"/> + <element value="DrillHoleLog"/> <element value="DrillCompany"/> <element value="Rig"/> <element value="Colour"/> Added: tracer/profiles/default/types/DrillHoleLog.xml =================================================================== --- tracer/profiles/default/types/DrillHoleLog.xml (rev 0) +++ tracer/profiles/default/types/DrillHoleLog.xml 2014-02-05 13:13:13 UTC (rev 3453) @@ -0,0 +1,55 @@ +<?xml version="1.0"?> +<object name="DrillHoleLog" + meta_type="Factory-based Type Information with dynamic views" + xmlns:i18n="http://xml.zope.org/namespaces/i18n"> + <property name="title">DrillHoleLog</property> + <property name="description"> + Mixin class to support instance-based schemas + Attention: must be before BaseFolder or BaseContent in + the inheritance list, e.g: + + class Blorf(VariableSchemaSupport, BaseContent): + def getSchema(): + return some schema definition... + + </property> + <property name="content_icon">document_icon.gif</property> + <property name="content_meta_type">DrillHoleLog</property> + <property name="product">bika</property> + <property name="factory">addDrillHoleLog</property> + <property name="immediate_view">base_view</property> + <property name="global_allow">False</property> + <property name="filter_content_types">False</property> + <property name="allowed_content_types"/> + <property name="allow_discussion">False</property> + <property name="default_view">base_view</property> + <property name="view_methods"> + <element value="base_view"/> + </property> + <property name="default_view_fallback">False</property> + <alias from="(Default)" to="(dynamic view)"/> + <alias from="edit" to="base_edit"/> + <alias from="index.html" to="(dynamic view)"/> + <alias from="properties" to="base_metadata"/> + <alias from="sharing" to="folder_localrole_form"/> + <alias from="view" to="(selected layout)"/> + <action title="View" action_id="view" category="object" condition_expr="" + url_expr="string:${object_url}/base_view" visible="False"> + <permission value="View"/> + </action> + <action title="Edit" action_id="edit" category="object" condition_expr="" + url_expr="string:${object_url}/base_edit" visible="False"> + <permission value="Modify portal content"/> + </action> + <action title="Properties" action_id="metadata" category="object" + condition_expr="" url_expr="string:${object_url}/base_metadata" + visible="False"> + <permission value="Modify portal content"/> + </action> + <action title="References" action_id="references" category="object" + condition_expr="object/archetype_tool/has_graphviz" + url_expr="string:${object_url}/reference_graph" visible="False"> + <permission value="Modify portal content"/> + <permission value="Review portal content"/> + </action> +</object> Modified: tracer/profiles/default/types.xml =================================================================== --- tracer/profiles/default/types.xml 2014-02-05 10:00:05 UTC (rev 3452) +++ tracer/profiles/default/types.xml 2014-02-05 13:13:13 UTC (rev 3453) @@ -28,6 +28,8 @@ meta_type="Factory-based Type Information with dynamic views"/> <object name="DrillHole" meta_type="Factory-based Type Information with dynamic views"/> + <object name="DrillHoleLog" + meta_type="Factory-based Type Information with dynamic views"/> <object name="Trench" meta_type="Factory-based Type Information with dynamic views"/> <object name="AnalysisService" Modified: tracer/profiles/default/workflows.xml =================================================================== --- tracer/profiles/default/workflows.xml 2014-02-05 10:00:05 UTC (rev 3452) +++ tracer/profiles/default/workflows.xml 2014-02-05 13:13:13 UTC (rev 3453) @@ -32,6 +32,7 @@ <type type_id="DrillHole"> <bound-workflow workflow_id="bika_drillhole_workflow"/> </type> + <type type_id="DrillHoleLog"/> <type type_id="Trench"> <bound-workflow workflow_id="bika_trench_workflow"/> </type> Modified: tracer/skins/bika/drillhole_view.pt =================================================================== --- tracer/skins/bika/drillhole_view.pt 2014-02-05 10:00:05 UTC (rev 3452) +++ tracer/skins/bika/drillhole_view.pt 2014-02-05 13:13:13 UTC (rev 3453) @@ -53,78 +53,69 @@ <tr> -<th +<th colspan="4" i18n:translate="label_drillhole">DrillHole</th> -<td class="left" colspan="3" +<td class="left" colspan="22" tal:content="here/getClientDrillHoleID|nothing">123</td> </tr> <tr> -<th +<th colspan="4" i18n:translate="label_drillholeid">ID </th> -<td class="left"> +<td colspan="2" class="left"> <span tal:content="here/getDrillHoleID">D-001</span> </td> -<th +<th colspan="3" i18n:translate="label_utmsystem">UTM system </th> -<td class="left"> +<td colspan="2" class="left"> <span tal:content="utmsystem/Title|nothing">UTM1999</span> </td> -</tr> - -<tr> -<th i18n:translate="label_east">East</th> -<td class="left" +<th colspan="3" i18n:translate="label_east">East</th> +<td colspan="2" class="left" tal:content="here/getEastUTM|nothing">123</td> -<th i18n:translate="label_north">North</th> -<td class="left" +<th colspan="3" i18n:translate="label_north">North</th> +<td colspan="3" class="left" tal:content="here/getNorthUTM|nothing">123</td> </tr> <tr> -<th i18n:translate="label_elevation">Elevation</th> -<td class="left" +<th colspan="4" i18n:translate="label_elevation">Elevation</th> +<td colspan = "2" class="left" tal:content="here/getElevation|nothing">123</td> -<th i18n:translate="label_EOH">EOH</th> -<td class="left" +<th colspan = "3" i18n:translate="label_EOH">EOH</th> +<td colspan = "2" class="left" tal:content="here/getEOH|nothing">123</td> -</tr> - -<tr> -<th i18n:translate="label_azimuth">Azimuth</th> -<td class="left" +<th colspan = "3" i18n:translate="label_azimuth">Azimuth</th> +<td colspan = "2" class="left" tal:content="here/getAzimuth|nothing">123</td> -<th i18n:translate="label_dip">Dip</th> -<td class="left" +<th colspan = "3" i18n:translate="label_dip">Dip</th> +<td colspan = "3" class="left" tal:content="here/getDip|nothing">123</td> </tr> <tr> -<th i18n:translate="label_watertable">Water table</th> -<td class="left" +<th colspan="4" i18n:translate="label_watertable">Water table</th> +<td colspan="2" class="left" tal:content="here/getWaterTable|nothing">123</td> -<th i18n:translate="label_drilltype">Drill type</th> -<td class="left" +<th colspan="3" i18n:translate="label_drilltype">Drill type</th> +<td colspan="2" class="left" tal:content="here/getDrillType|nothing">123</td> -</tr> - -<tr> -<th +<th colspan="3" i18n:translate="label_status">Status </th> -<td class="left" +<td colspan="2" class="left" tal:content="drillhole_state">Planned</td> -<th i18n:translate="label_datecreated">Created</th> +<th colspan="3" i18n:translate="label_datecreated">Created</th> -<td class="left" > +<td colspan="3" class="left" > <span tal:define="date_created here/getDateCreated" tal:condition="date_created" @@ -157,104 +148,96 @@ </td> </tr> -<!--<tr tal:condition="python:states_array.index(drillhole_state) > states_array.index('planned')"> -<th i18n:translate="label_dateexcavated">Excavated</th> -<td class="left" colspan="3"> -<span - tal:define="date_excavated here/getDateExcavated" - tal:condition="date_excavated" - tal:content="python:plone_view.toLocalizedTime(date_excavated, long_format=0)" - >2005-01-01</span> -</td> +<tr> +<th colspan="22"></th> </tr> -<tr tal:condition="python:states_array.index(drillhole_state) > states_array.index('excavated')"> - -<th i18n:translate="label_datemarkedout">Marked Out</th> -<td class="left" colspan="3"> -<span - tal:define="date_markedout here/getDateMarkedOut" - tal:condition="date_markedout" - tal:content="python:plone_view.toLocalizedTime(date_markedout, long_format=0)" - >2005-01-01</span> -</td> +<tr> +<th i18n:translate="label_from">From</th> +<th i18n:translate="label_to">To</th> +<th i18n:translate="label_kg">kg</th> +<th i18n:translate="label_moist">Moist</th> +<th i18n:translate="label_col">Col</th> +<th i18n:translate="label_weath">Weath</th> +<th i18n:translate="label_grainsize">Grain size</th> +<th i18n:translate="label_clay_fines">Clay & fines</th> +<th> <span i18n:translate="label_lith">Lith</span>1 </th> +<th>%</th> +<th> <span i18n:translate="label_lith">Lith</span>2 </th> +<th>%</th> +<th> <span i18n:translate="label_lith">Lith</span>3 </th> +<th>%</th> +<th> <span i18n:translate="label_alt">Alt</span>1</th> +<th> <span i18n:translate="label_alt">Alt</span>2</th> +<th> <span i18n:translate="label_alt">Alt</span>3</th> +<th i18n:translate="label_alt_intens">Alt intens</th> +<th i18n:translate="label_quartzveinpercent">Quartz vein %</th> +<th i18n:translate="label_sulphidepercet">Sulphide %</th> +<th i18n:translate="label_texture_structure">Texture & structure</th> +<th i18n:translate="label_comments">Comments</th> </tr> -<tr tal:condition="python:states_array.index(drillhole_state) > states_array.index('excavated')"> -<th i18n:translate="label_dateprofiled">Profiled</th> -<td class="left" colspan="3"> -<span - tal:define="date_profiled here/getDateProfiled" - tal:condition="date_profiled" - tal:content="python:plone_view.toLocalizedTime(date_profiled, long_format=0)" - >2005-01-01</span> -</td> -</tr> +</thead> -<tr tal:condition="python:states_array.index(drillhole_state) > states_array.index('excavated')"> -<th i18n:translate="label_datemapped">Mapped</th> -<td class="left" colspan="3"> -<span - tal:define="date_mapped here/getDateMapped" - tal:condition="date_mapped" - tal:content="python:plone_view.toLocalizedTime(date_mapped, long_format=0)" - >2005-01-01</span> -  - <span i18n:translate="label_by">By:</span> - <span - tal:define="this_person python:here.getMappedBy() and here.getMappedBy().Title() or None;" - tal:content="this_person" - >By:</span> +<tbody> +<!-- +<tal:logs + define="dlogs python:here.getLogData()" + repeat="dlog dlogs"> +<tr tal:define=" + service analysis/getService; + result analysis/getResult; + may_view_result python:checkPermission('BIKA: View Results', analysis)"> +<td class="left"> + +<a onClick="" title="Click for details" + tal:attributes="onClick string:javascript:showMethod('$portal_url', '${service/getId}')" + tal:content="analysis/Title"> +Alcohol +</a> +<em style="white-space:nowrap;" + tal:condition="not:result"> + (<span tal:replace="analysis/getUnit">mg/l</span>)</em> </td> -</tr> +<div:result + tal:define=" + result_class python:here.result_in_range(analysis, sampletype_uid, specification); + global out_of_range python:result_class == 'out_of_range' and 1 or out_of_range"> -<tr tal:condition="python:states_array.index(drillhole_state) > states_array.index('excavated')"> -<th i18n:translate="label_datesampled">Sampled</th> -<td class="left" colspan="3"> +<td tal:condition="may_view_result" + tal:attributes="class result_class"> +<tal:result tal:condition="result"> +<span tal:content="result">10</span> +<img tal:condition="python:result_class == 'out_of_range'" + src="" tal:attributes="src string:${portal/absolute_url}/exclamation.png"> +<div class="retested" + tal:condition="analysis/getRetested" + i18n:translate="retested">retested</div> +</tal:result> <span - tal:define="date_sampled here/getDateSampled" - tal:condition="date_sampled" - tal:content="python:plone_view.toLocalizedTime(date_sampled, long_format=0)" - >2005-01-01</span> + tal:condition="python:result" + tal:content="analysis/getUnit">ml</span> </td> -</tr> -<tr tal:condition="python:states_array.index(drillhole_state) > states_array.index('excavated')"> -<th i18n:translate="label_datephotographed">Photographed</th> -<td class="left" colspan="3"> -<span - tal:define="date_photographed here/getDatePhotographed" - tal:condition="date_photographed" - tal:content="python:plone_view.toLocalizedTime(date_photographed, long_format=0)" - >2005-01-01</span> +<td tal:condition="python:not may_view_result"> +<img src="" + tal:define="global tf python:1" + tal:attributes="src string:${portal/absolute_url}/to_follow.png"> </td> -</tr> -<tr tal:condition="python:states_array.index(drillhole_state) > states_array.index('worked')"> -<th i18n:translate="label_datebackfilled">Worked</th> -<td class="left" colspan="3"> -<span - tal:define="date_worked here/getDateWorked" - tal:condition="date_worked" - tal:content="python:plone_view.toLocalizedTime(date_worked, long_format=0)" - >2005-01-01</span> +</div:result> +<td colspan="2" tal:condition="analysis_attach_allowed" class="left"> +<div tal:condition="python:not service.getAttachmentOption() == 'n'"> +<tal:attachments + tal:define="attachments analysis/getAttachment | nothing"> +<metal:block use-macro="here/attachments/macros/analysis_attachments_list"/> +</tal:attachments> +</div> </td> -</tr> -<tr tal:condition="python:drillhole_state == 'backfilled'"> -<th i18n:translate="label_datebackfilled">Backfilled</th> -<td class="left" colspan="3"> -<span - tal:define="date_backfilled here/getDateBackfilled" - tal:condition="date_backfilled" - tal:content="python:plone_view.toLocalizedTime(date_backfilled, long_format=0)" - >2005-01-01</span> -</td> </tr> +</tal:logs> --> -</thead> - -<tbody> </tbody> </table> Modified: tracer/skins/bika/hide_content_action_types.py =================================================================== --- tracer/skins/bika/hide_content_action_types.py 2014-02-05 10:00:05 UTC (rev 3452) +++ tracer/skins/bika/hide_content_action_types.py 2014-02-05 13:13:13 UTC (rev 3453) @@ -7,4 +7,4 @@ ##parameters= ##title=Hide content action for listed types ## -return ('ClientFolder', 'Client', 'Contact', 'Sample', 'Trench', 'DrillHole', 'Analysis', 'ARImport', 'ARImportItem', 'Project', 'PersonnelFolder', 'Personnel', 'SupplierFolder', 'Supplier', 'SupplierContact', 'Attachment', ) +return ('ClientFolder', 'Client', 'Contact', 'Sample', 'Trench', 'DrillHole', 'DrillHoleLog', 'Analysis', 'ARImport', 'ARImportItem', 'Project', 'PersonnelFolder', 'Personnel', 'SupplierFolder', 'Supplier', 'SupplierContact', 'Attachment', ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ann...@us...> - 2014-02-05 10:00:08
|
Revision: 3452 http://sourceforge.net/p/bika/code/3452 Author: anneline Date: 2014-02-05 10:00:05 +0000 (Wed, 05 Feb 2014) Log Message: ----------- Modified Paths: -------------- tracer/skins/bika/client_samples.pt tracer/skins/bika/drillhole_samples.pt tracer/skins/bika/misc.py tracer/skins/bika/project_samples.pt tracer/skins/bika/sample_edit.cpy tracer/skins/bika/sample_edit_form.cpt tracer/skins/bika/sample_view.pt tracer/skins/bika/samples.pt tracer/skins/bika/trench_samples.pt Added Paths: ----------- tracer/skins/bika/standard.png Modified: tracer/skins/bika/client_samples.pt =================================================================== --- tracer/skins/bika/client_samples.pt 2014-02-03 12:47:13 UTC (rev 3451) +++ tracer/skins/bika/client_samples.pt 2014-02-05 10:00:05 UTC (rev 3452) @@ -19,6 +19,9 @@ <div metal:fill-slot="main" tal:define=" + global dup python:False; + global std python:False; + global blank python:False; batch_size python:int(request.get('batch_size', '15')); dummy_a python:request.set('portal_type', 'Sample'); dummy_b python:request.set('getClientUID', here.UID()); @@ -169,8 +172,20 @@ <a href="" tal:attributes="href obj/absolute_url" tal:content="obj/getClientSampleID">S-00001</a> +<tal:dup tal:condition="python:obj.getDuplicateSample()" > <img src="dup.png" - tal:condition="python:obj.getDuplicateSample()" > + tal:define="global dup python:True"/> +</tal:dup> + +<tal:std tal:condition="python:obj.getStandardSample()" > +<img src="standard.png" + tal:define="global std python:True"/> +</tal:std> + +<tal:blank tal:condition="python:obj.getBlankSample()" > +<img src="blank.png" + tal:define="global blank python:True"/> +</tal:blank> </td> <td style="white-space:nowrap"> <a href="" @@ -257,7 +272,27 @@ </div> </form> +<br/> +<tal:footnotes> +<tal:std tal:condition="python:std == True"> +<img src="standard.png"/> +<span class="discreet" i18n:translate="label_standard">Standard</span> +<br/> +</tal:std> +<tal:blank tal:condition="python:blank == True"> +<img src="blank.png"/> +<span class="discreet" i18n:translate="label_blank">Blank</span> +<br/> +</tal:blank> + +<tal:dup tal:condition="python:dup == True"> +<img src="dup.png"/> +<span class="discreet" i18n:translate="label_duplicate">Duplicate</span> +<br/> +</tal:dup> + +</tal:footnotes> </div> </div> Modified: tracer/skins/bika/drillhole_samples.pt =================================================================== --- tracer/skins/bika/drillhole_samples.pt 2014-02-03 12:47:13 UTC (rev 3451) +++ tracer/skins/bika/drillhole_samples.pt 2014-02-05 10:00:05 UTC (rev 3452) @@ -19,6 +19,9 @@ <div metal:fill-slot="main" tal:define=" + global dup python:False; + global std python:False; + global blank python:False; batch_size python:int(request.get('batch_size', '100')); dummy_a python:request.set('portal_type', 'Sample'); dummy_b python:request.set('getDrillHoleUID', here.UID()); @@ -166,8 +169,20 @@ <a href="" tal:attributes="href obj/absolute_url" tal:content="obj/getClientSampleID">S-00001</a> +<tal:dup tal:condition="python:obj.getDuplicateSample()" > <img src="dup.png" - tal:condition="python:obj.getDuplicateSample()" > + tal:define="global dup python:True"/> +</tal:dup> + +<tal:std tal:condition="python:obj.getStandardSample()" > +<img src="standard.png" + tal:define="global std python:True"/> +</tal:std> + +<tal:blank tal:condition="python:obj.getBlankSample()" > +<img src="blank.png" + tal:define="global blank python:True"/> +</tal:blank> </td> <td style="white-space:nowrap"> <a href="" @@ -249,7 +264,27 @@ </div> </form> +<br/> +<tal:footnotes> +<tal:std tal:condition="python:std == True"> +<img src="standard.png"/> +<span class="discreet" i18n:translate="label_standard">Standard</span> +<br/> +</tal:std> +<tal:blank tal:condition="python:blank == True"> +<img src="blank.png"/> +<span class="discreet" i18n:translate="label_blank">Blank</span> +<br/> +</tal:blank> + +<tal:dup tal:condition="python:dup == True"> +<img src="dup.png"/> +<span class="discreet" i18n:translate="label_duplicate">Duplicate</span> +<br/> +</tal:dup> + +</tal:footnotes> </div> </div> Modified: tracer/skins/bika/misc.py =================================================================== --- tracer/skins/bika/misc.py 2014-02-03 12:47:13 UTC (rev 3451) +++ tracer/skins/bika/misc.py 2014-02-05 10:00:05 UTC (rev 3452) @@ -1,9 +1,10 @@ msgs = [] -personnel_id = ['personnel_56',] -for p in context.portal_catalog(portal_type='Personnel', - getId=personnel_id): - personnel = p.getObject() - msgs.append(personnel.getSkills()) +sample_id = ['S-00643',] +for s in context.portal_catalog(portal_type='Sample', + getId=sample_id): + sample = s.getObject() + msgs.append('std: %s - blank: %s' %(sample.getStandardSample(), + sample.getBlankSample())) msgs.append("('OK'),") Modified: tracer/skins/bika/project_samples.pt =================================================================== --- tracer/skins/bika/project_samples.pt 2014-02-03 12:47:13 UTC (rev 3451) +++ tracer/skins/bika/project_samples.pt 2014-02-05 10:00:05 UTC (rev 3452) @@ -19,6 +19,9 @@ <div metal:fill-slot="main" tal:define=" + global dup python:False; + global std python:False; + global blank python:False; batch_size python:int(request.get('batch_size', '100')); dummy_a python:request.set('portal_type', 'Sample'); dummy_b python:request.set('getProjectUID', here.UID()); @@ -197,8 +200,20 @@ <a href="" tal:attributes="href obj/absolute_url" tal:content="obj/getClientSampleID">S-00001</a> +<tal:dup tal:condition="python:obj.getDuplicateSample()" > <img src="dup.png" - tal:condition="python:obj.getDuplicateSample()" > + tal:define="global dup python:True"/> +</tal:dup> + +<tal:std tal:condition="python:obj.getStandardSample()" > +<img src="standard.png" + tal:define="global std python:True"/> +</tal:std> + +<tal:blank tal:condition="python:obj.getBlankSample()" > +<img src="blank.png" + tal:define="global blank python:True"/> +</tal:blank> </td> <td style="white-space:nowrap"> <a href="" @@ -280,7 +295,27 @@ </div> </form> +<br/> +<tal:footnotes> +<tal:std tal:condition="python:std == True"> +<img src="standard.png"/> +<span class="discreet" i18n:translate="label_standard">Standard</span> +<br/> +</tal:std> +<tal:blank tal:condition="python:blank == True"> +<img src="blank.png"/> +<span class="discreet" i18n:translate="label_blank">Blank</span> +<br/> +</tal:blank> + +<tal:dup tal:condition="python:dup == True"> +<img src="dup.png"/> +<span class="discreet" i18n:translate="label_duplicate">Duplicate</span> +<br/> +</tal:dup> + +</tal:footnotes> </div> </div> Modified: tracer/skins/bika/sample_edit.cpy =================================================================== --- tracer/skins/bika/sample_edit.cpy 2014-02-03 12:47:13 UTC (rev 3451) +++ tracer/skins/bika/sample_edit.cpy 2014-02-05 10:00:05 UTC (rev 3452) @@ -25,13 +25,27 @@ sample = context form_items = list(context.REQUEST.form.items()) form_items.sort() +standard_blank = context.REQUEST.StandardBlank +if standard_blank == 'Standard': + standardsample = True + blanksample = False +elif standard_blank == 'Blank': + standardsample = False + blanksample = True +else: + standardsample = False + blanksample = True + + sample.edit( Contact=context.REQUEST.Contact, CCEmails=context.REQUEST.CCEmails, Notes=context.REQUEST.Notes, ClientSampleID=context.REQUEST.ClientSampleID, SampleType=context.REQUEST.SampleType, + StandardSample=standardsample, + BlankSample=blanksample, Trench=context.REQUEST.Trench, DrillHole=context.REQUEST.DrillHole, UTMSystem=context.REQUEST.UTMSystem, Modified: tracer/skins/bika/sample_edit_form.cpt =================================================================== --- tracer/skins/bika/sample_edit_form.cpt 2014-02-03 12:47:13 UTC (rev 3451) +++ tracer/skins/bika/sample_edit_form.cpt 2014-02-05 10:00:05 UTC (rev 3452) @@ -233,8 +233,23 @@ </select> </td> -<th></th> -<td></td> +<th i18n:translate="label_standard_blank">Standard/Blank</th> +<td> + <select name="StandardBlank" + tal:attributes="tabindex tabindex/next;"> + <tal:item + tal:define=" + vocab python:['Sample', 'Standard', 'Blank']; + current python:here.getBlankSample() and 'Blank' or here.getStandardSample() and 'Standard' or 'Sample';" + tal:repeat="item vocab"> + <option selected="selected" + tal:attributes="value item; + selected python:item == current" + tal:content="item"></option> + </tal:item> + + </select> +</td> </tr> <tr tal:condition="python:trenches or drillholes"> Modified: tracer/skins/bika/sample_view.pt =================================================================== --- tracer/skins/bika/sample_view.pt 2014-02-03 12:47:13 UTC (rev 3451) +++ tracer/skins/bika/sample_view.pt 2014-02-05 10:00:05 UTC (rev 3452) @@ -171,11 +171,14 @@ </th> <td class="left" tal:attributes="colspan colspan1"> +<a tal:condition="python:trench" + tal:attributes="href trench/absolute_url" + tal:content="trench/Title"></a> -<span tal:condition="python:trench" - tal:content="python:trench and trench.Title() or None">t1</span> -<span tal:condition="python:drillhole" - tal:content="python:drillhole and drillhole.Title() or None">t1</span> +<a tal:condition="python:drillhole" + tal:attributes="href drillhole/absolute_url" + tal:content="drillhole/Title"></a> + </td> </tal:trench_drillhole> </tr> Modified: tracer/skins/bika/samples.pt =================================================================== --- tracer/skins/bika/samples.pt 2014-02-03 12:47:13 UTC (rev 3451) +++ tracer/skins/bika/samples.pt 2014-02-05 10:00:05 UTC (rev 3452) @@ -19,6 +19,9 @@ <div metal:fill-slot="main" tal:define=" + global dup python:False; + global std python:False; + global blank python:False; batch_size python:int(request.get('batch_size', '15')); dummy_a python:request.set('portal_type', 'Sample'); dummy_c python:request.set('sort_on', 'getSampleID'); @@ -166,8 +169,21 @@ <a href="" tal:attributes="href obj/absolute_url" tal:content="obj/getClientSampleID">S-00001</a> +<tal:dup tal:condition="python:obj.getDuplicateSample()" > <img src="dup.png" - tal:condition="python:obj.getDuplicateSample()" > + tal:define="global dup python:True"/> +</tal:dup> + +<tal:std tal:condition="python:obj.getStandardSample()" > +<img src="standard.png" + tal:define="global std python:True"/> +</tal:std> + +<tal:blank tal:condition="python:obj.getBlankSample()" > +<img src="blank.png" + tal:define="global blank python:True"/> +</tal:blank> + </td> <td style="white-space:nowrap"> <a href="" @@ -259,8 +275,29 @@ </div> </form> +<tal:footnotes> +<tal:std tal:condition="python:std == True"> +<img src="standard.png"/> +<span class="discreet" i18n:translate="label_standard">Standard</span> +<br/> +</tal:std> + +<tal:blank tal:condition="python:blank == True"> +<img src="blank.png"/> +<span class="discreet" i18n:translate="label_blank">Blank</span> +<br/> +</tal:blank> + +<tal:dup tal:condition="python:dup == True"> +<img src="dup.png"/> +<span class="discreet" i18n:translate="label_duplicate">Duplicate</span> +<br/> +</tal:dup> + +</tal:footnotes> </div> </div> + </body> </html> Added: tracer/skins/bika/standard.png =================================================================== (Binary files differ) Index: tracer/skins/bika/standard.png =================================================================== --- tracer/skins/bika/standard.png 2014-02-03 12:47:13 UTC (rev 3451) +++ tracer/skins/bika/standard.png 2014-02-05 10:00:05 UTC (rev 3452) Property changes on: tracer/skins/bika/standard.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Modified: tracer/skins/bika/trench_samples.pt =================================================================== --- tracer/skins/bika/trench_samples.pt 2014-02-03 12:47:13 UTC (rev 3451) +++ tracer/skins/bika/trench_samples.pt 2014-02-05 10:00:05 UTC (rev 3452) @@ -19,6 +19,9 @@ <div metal:fill-slot="main" tal:define=" + global dup python:False; + global std python:False; + global blank python:False; batch_size python:int(request.get('batch_size', '100')); dummy_a python:request.set('portal_type', 'Sample'); dummy_b python:request.set('getTrenchUID', here.UID()); @@ -165,8 +168,20 @@ <a href="" tal:attributes="href obj/absolute_url" tal:content="obj/getClientSampleID">S-00001</a> +<tal:dup tal:condition="python:obj.getDuplicateSample()" > <img src="dup.png" - tal:condition="python:obj.getDuplicateSample()" > + tal:define="global dup python:True"/> +</tal:dup> + +<tal:std tal:condition="python:obj.getStandardSample()" > +<img src="standard.png" + tal:define="global std python:True"/> +</tal:std> + +<tal:blank tal:condition="python:obj.getBlankSample()" > +<img src="blank.png" + tal:define="global blank python:True"/> +</tal:blank> </td> <td style="white-space:nowrap"> <a href="" @@ -248,7 +263,27 @@ </div> </form> +<br/> +<tal:footnotes> +<tal:std tal:condition="python:std == True"> +<img src="standard.png"/> +<span class="discreet" i18n:translate="label_standard">Standard</span> +<br/> +</tal:std> +<tal:blank tal:condition="python:blank == True"> +<img src="blank.png"/> +<span class="discreet" i18n:translate="label_blank">Blank</span> +<br/> +</tal:blank> + +<tal:dup tal:condition="python:dup == True"> +<img src="dup.png"/> +<span class="discreet" i18n:translate="label_duplicate">Duplicate</span> +<br/> +</tal:dup> + +</tal:footnotes> </div> </div> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ann...@us...> - 2014-02-03 12:47:16
|
Revision: 3451 http://sourceforge.net/p/bika/code/3451 Author: anneline Date: 2014-02-03 12:47:13 +0000 (Mon, 03 Feb 2014) Log Message: ----------- cleaning up Modified Paths: -------------- tracer/skins/bika/drillhole_samples.pt tracer/skins/bika/load_sample_data.py tracer/skins/bika/project_drillholes.pt tracer/skins/bika/project_samples.pt tracer/skins/bika/project_trenches.pt tracer/skins/bika/sample_edit.cpy tracer/skins/bika/sample_edit_form.cpt tracer/skins/bika/trench_samples.pt Modified: tracer/skins/bika/drillhole_samples.pt =================================================================== --- tracer/skins/bika/drillhole_samples.pt 2014-02-03 12:08:48 UTC (rev 3450) +++ tracer/skins/bika/drillhole_samples.pt 2014-02-03 12:47:13 UTC (rev 3451) @@ -28,7 +28,8 @@ clientar_state python:request.get('clientar_review_state'); dummy_f python:here.REQUEST.set('review_state', clientar_state); states python:here.get_toggles('sample'); - header_state python:here.get_toggle_title(clientar_state, states)"> + header_state python:here.get_toggle_title(clientar_state, states); + drillhole here/Title"> <div metal:use-macro="here/document_actions/macros/document_actions"> @@ -38,6 +39,8 @@ <h1> <img src="sample.png" tal:attributes="src python:here.portal_types.getTypeInfo('Sample').getIcon()"/> <span i18n:translate="heading_samples">Samples</span> +<span i18n:translate="heading_from_drillhole">from drill hole</span> +<span tal:content="drillhole"/> <tal:not_all tal:condition="python:clientar_state != 'all'"> - <span i18n:translate="" tal:content="header_state">All</span> Modified: tracer/skins/bika/load_sample_data.py =================================================================== --- tracer/skins/bika/load_sample_data.py 2014-02-03 12:08:48 UTC (rev 3450) +++ tracer/skins/bika/load_sample_data.py 2014-02-03 12:47:13 UTC (rev 3451) @@ -235,6 +235,7 @@ ('soil', '', False), ('rock', '', False), ('trench', '', False), + ('drillhole', '', False), ) for title, description, hazardous in sampletypes: id = folder.generateUniqueId('SampleType') Modified: tracer/skins/bika/project_drillholes.pt =================================================================== --- tracer/skins/bika/project_drillholes.pt 2014-02-03 12:08:48 UTC (rev 3450) +++ tracer/skins/bika/project_drillholes.pt 2014-02-03 12:47:13 UTC (rev 3451) @@ -37,6 +37,8 @@ <h1> <img src="drillhole.png" tal:attributes="src python:here.portal_types.getTypeInfo('DrillHole').getIcon()"/> <span i18n:translate="heading_drillholes">DrillHoles</span> +<span i18n:translate="heading_in_project">in project</span> +<span tal:content="here/Title"></span> <tal:not_all tal:condition="python:client_drillhole_state != 'all'"> - <span i18n:translate="" tal:content="header_state">All</span> Modified: tracer/skins/bika/project_samples.pt =================================================================== --- tracer/skins/bika/project_samples.pt 2014-02-03 12:08:48 UTC (rev 3450) +++ tracer/skins/bika/project_samples.pt 2014-02-03 12:47:13 UTC (rev 3451) @@ -38,6 +38,8 @@ <h1> <img src="sample.png" tal:attributes="src python:here.portal_types.getTypeInfo('Sample').getIcon()"/> <span i18n:translate="heading_samples">Samples</span> +<span i18n:translate="heading_from_project">from project</span> +<span tal:content="here/Title"></span> <tal:not_all tal:condition="python:clientar_state != 'all'"> - <span i18n:translate="" tal:content="header_state">All</span> Modified: tracer/skins/bika/project_trenches.pt =================================================================== --- tracer/skins/bika/project_trenches.pt 2014-02-03 12:08:48 UTC (rev 3450) +++ tracer/skins/bika/project_trenches.pt 2014-02-03 12:47:13 UTC (rev 3451) @@ -38,6 +38,8 @@ <h1> <img src="trench.png" tal:attributes="src python:here.portal_types.getTypeInfo('Trench').getIcon()"/> <span i18n:translate="heading_trenches">Trenches</span> +<span i18n:translate="heading_in_project">in project</span> +<span tal:content="here/Title"></span> <tal:not_all tal:condition="python:client_trench_state != 'all'"> - <span i18n:translate="" tal:content="header_state">All</span> Modified: tracer/skins/bika/sample_edit.cpy =================================================================== --- tracer/skins/bika/sample_edit.cpy 2014-02-03 12:08:48 UTC (rev 3450) +++ tracer/skins/bika/sample_edit.cpy 2014-02-03 12:47:13 UTC (rev 3451) @@ -6,7 +6,7 @@ ##bind state=state ##bind subpath=traverse_subpath ##parameters= -##title=Edit analysis request +##title=Edit sample ## from DateTime import DateTime @@ -32,6 +32,8 @@ Notes=context.REQUEST.Notes, ClientSampleID=context.REQUEST.ClientSampleID, SampleType=context.REQUEST.SampleType, + Trench=context.REQUEST.Trench, + DrillHole=context.REQUEST.DrillHole, UTMSystem=context.REQUEST.UTMSystem, EastUTM=context.REQUEST.EastUTM, NorthUTM=context.REQUEST.NorthUTM, Modified: tracer/skins/bika/sample_edit_form.cpt =================================================================== --- tracer/skins/bika/sample_edit_form.cpt 2014-02-03 12:08:48 UTC (rev 3450) +++ tracer/skins/bika/sample_edit_form.cpt 2014-02-03 12:47:13 UTC (rev 3451) @@ -16,10 +16,14 @@ contacts here/getContactsDisplayList; curr_analyses python:request.get('Analysis', [' ']); current python:requestExists and True or False; - trenches python:here.portal_catalog(portal_type='Trench'); + project python:here.aq_parent; + project_uid project/UID; + trenches python:here.portal_catalog(portal_type='Trench', + getProjectUID=project_uid); sort_on python:(('Title', 'nocase', 'asc'),); trenches python:sequence.sort(trenches, sort_on); - drillholes python:here.portal_catalog(portal_type='DrillHole'); + drillholes python:here.portal_catalog(portal_type='DrillHole', + getProjectUID=project_uid); sort_on python:(('Title', 'nocase', 'asc'),); drillholes python:sequence.sort(drillholes, sort_on); analyses python:current and curr_analyses or [str(analysis.getServiceUID()) for analysis in here.getAnalyses()]; @@ -246,11 +250,11 @@ tal:define=" vocab trenches; current here/getTrench; - trench python:current and current.Title() or None" + trench python:current and current.UID() or None" tal:repeat="item vocab"> <option selected="selected" - tal:attributes="value item/Title; - selected python:item.Title == trench" + tal:attributes="value item/UID; + selected python:item.UID == trench" tal:content="item/Title"></option> </tal:item> @@ -269,11 +273,11 @@ tal:define=" vocab drillholes; current here/getDrillHole; - drillhole python:current and current.Title() or None" + drillhole python:current and current.UID() or None" tal:repeat="item vocab"> <option selected="selected" - tal:attributes="value item/Title; - selected python:item.Title == drillhole" + tal:attributes="value item/UID; + selected python:item.UID == drillhole" tal:content="item/Title"></option> </tal:item> Modified: tracer/skins/bika/trench_samples.pt =================================================================== --- tracer/skins/bika/trench_samples.pt 2014-02-03 12:08:48 UTC (rev 3450) +++ tracer/skins/bika/trench_samples.pt 2014-02-03 12:47:13 UTC (rev 3451) @@ -38,6 +38,8 @@ <h1> <img src="sample.png" tal:attributes="src python:here.portal_types.getTypeInfo('Sample').getIcon()"/> <span i18n:translate="heading_samples">Samples</span> +<span i18n:translate="heading_from_trench">from trench</span> +<span tal:content="here/Title"/> <tal:not_all tal:condition="python:clientar_state != 'all'"> - <span i18n:translate="" tal:content="header_state">All</span> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ann...@us...> - 2014-02-03 12:08:53
|
Revision: 3450 http://sourceforge.net/p/bika/code/3450 Author: anneline Date: 2014-02-03 12:08:48 +0000 (Mon, 03 Feb 2014) Log Message: ----------- add client Modified Paths: -------------- tracer/skins/bika/load_sample_data.py Modified: tracer/skins/bika/load_sample_data.py =================================================================== --- tracer/skins/bika/load_sample_data.py 2014-01-31 13:00:37 UTC (rev 3449) +++ tracer/skins/bika/load_sample_data.py 2014-02-03 12:08:48 UTC (rev 3450) @@ -730,6 +730,7 @@ ('16', 'TestClient Inc', 'te...@te...', '+555 12345678', '', [['Joe', 'Bloggs', 'testclient', 'joe...@te...', 'email', 'Chief Geologist', '+226 55512334'],], ['ProjectA', 'ProjectB'], 'Burkina Faso'), ('17', 'West African Gold', 'wes...@ex...', '+61 407689231', '', [['Steven', 'Tambanis', 'stamban', 'st...@ex...', 'email', '', '407689231'],], ['Barga', 'Baskondo', 'Darkou', 'Faka', 'Koutakou', 'Piboare', 'Samba', 'Tangaye', 'Tongomayel', 'Touya'], 'Burkina Faso'), ('18', 'Tamimi Invest - Trans Oceanic Mineral Company', '', '', '', [['Maarouf', 'Dawalibi', 'maaroufd', 'm.d...@ta...', 'email', '', '+966554541552'],], ['Guinea', ], 'Guinea'), +('19', 'True Gold', 'in...@tr...', '+1 604 801 5020', '', [], [], 'Burkina Faso'), ) for c in client_list: if len(c) != 8: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ann...@us...> - 2014-01-31 13:00:40
|
Revision: 3449 http://sourceforge.net/p/bika/code/3449 Author: anneline Date: 2014-01-31 13:00:37 +0000 (Fri, 31 Jan 2014) Log Message: ----------- drillholes Modified Paths: -------------- tracer/DrillHole.py tracer/skins/bika/drillhole_edit.cpy tracer/skins/bika/drillhole_edit_form.cpt tracer/skins/bika/drillhole_edit_form.cpt.metadata tracer/skins/bika/drillhole_view.pt tracer/skins/bika/load_sample_data.py Added Paths: ----------- tracer/skins/bika/drillhole_samples.pt tracer/skins/bika/report_results_print.pt tracer/skins/bika/report_results_view.pt tracer/skins/bika/trench_samples.pt Modified: tracer/DrillHole.py =================================================================== --- tracer/DrillHole.py 2013-12-05 13:08:53 UTC (rev 3448) +++ tracer/DrillHole.py 2014-01-31 13:00:37 UTC (rev 3449) @@ -227,6 +227,11 @@ 'action': 'string:${object_url}/drillhole_edit_form', 'permissions': (ModifyPortalContent,), }, + {'id': 'drillhole_samples', + 'name': 'Samples', + 'action': 'string:${object_url}/drillhole_samples', + 'permissions': (ModifyPortalContent,), + }, {'id': 'log', 'name': 'Log', 'action': 'string:${object_url}/status_log', Modified: tracer/skins/bika/drillhole_edit.cpy =================================================================== --- tracer/skins/bika/drillhole_edit.cpy 2013-12-05 13:08:53 UTC (rev 3448) +++ tracer/skins/bika/drillhole_edit.cpy 2014-01-31 13:00:37 UTC (rev 3449) @@ -1,4 +1,4 @@ -## Controller Python Script "trench_edit" +## Controller Python Script "drillhole_edit" ##bind container=container ##bind context=context ##bind namespace= @@ -6,83 +6,45 @@ ##bind state=state ##bind subpath=traverse_subpath ##parameters= -##title=Edit trench +##title=Edit drillhole ## from DateTime import DateTime -trench = context +drillhole = context request = context.REQUEST -if request.has_key('DateSetOut'): - datesetout= request['DateSetOut'] +if request.has_key('DateDrilled'): + datedrilled= request['DateDrilled'] else: - datesetout = None -if request.has_key('SetOutBy'): - setoutby= request['SetOutBy'] + datedrilled = None +if request.has_key('DateLogged'): + datelogged= request['DateLogged'] else: - setoutby = None -if request.has_key('DateExcavated'): - dateexcavated= request['DateExcavated'] + datelogged = None +if request.has_key('LoggedBy'): + loggedby= request['LoggedBy'] else: - dateexcavated = None -if request.has_key('DateMarkedOut'): - datemarkedout= request['DateMarkedOut'] -else: - datemarkedout = None -if request.has_key('DateProfiled'): - dateprofiled= request['DateProfiled'] -else: - dateprofiled = None -if request.has_key('DateWorked'): - dateworked= request['DateWorked'] -else: - dateworked = None -if request.has_key('DateBackfilled'): - datebackfilled= request['DateBackfilled'] -else: - datebackfilled = None -if request.has_key('DateMapped'): - datemapped= request['DateMapped'] -else: - datemapped = None -if request.has_key('MappedBy'): - mappedby= request['MappedBy'] -else: - mappedby = None -if request.has_key('DateSampled'): - datesampled= request['DateSampled'] -else: - datesampled = None -if request.has_key('DatePhotographed'): - datephotographed= request['DatePhotographed'] -else: - datephotographed = None -trench.edit( + loggedby = None +drillhole.edit( UTMSystem=context.REQUEST.UTMSystem, - StartEasting=context.REQUEST.StartEasting, - StartNorthing=context.REQUEST.StartNorthing, - EndEasting=context.REQUEST.EndEasting, - EndNorthing=context.REQUEST.EndNorthing, - Length=context.REQUEST.Length, - SamplingDirection=context.REQUEST.SamplingDirection, - DatePlanned=context.REQUEST.DatePlanned, - DateSetOut=datesetout, - SetOutBy=setoutby, - DateExcavated=dateexcavated, - DateMarkedOut=datemarkedout, - DateProfiled=dateprofiled, - DateWorked=dateworked, - DateBackfilled=datebackfilled, - DateMapped=datemapped, - MappedBy=mappedby, - DateSampled=datesampled, - DatePhotographed=datephotographed, + EastUTM=context.REQUEST.EastUTM, + NorthUTM=context.REQUEST.NorthUTM, + Elevation=context.REQUEST.Elevation, + DrillType=context.REQUEST.DrillType, + Azimuth=context.REQUEST.Azimuth, + Dip=context.REQUEST.Dip, + EOH=context.REQUEST.EOH, + WaterTable=context.REQUEST.WaterTable, + DrillType=context.REQUEST.DrillType, + DateDrilled=datedrilled, + DateLogged=datelogged, + LoggedBy=loggedby, Notes=context.REQUEST.Notes, ) from Products.CMFPlone import transaction_note -transaction_note('%s modified successfully' % trench.getTrenchID()) +transaction_note('%s modified successfully' % drillhole.getDrillHoleID()) -message=context.translate('message_trench_modified', default='Trench ${TRENCH} successfully modified.', mapping={'TRENCH': trench.getClientTrenchID()}, domain='bika') +message=context.translate('message_drillhole_modified', default='DrillHole ${DRILLHOLE} successfully modified.', mapping={'DRILLHOLE': drillhole.getClientDrillHoleID()}, domain='bika') return state.set(portal_status_message=message) Modified: tracer/skins/bika/drillhole_edit_form.cpt =================================================================== --- tracer/skins/bika/drillhole_edit_form.cpt 2013-12-05 13:08:53 UTC (rev 3448) +++ tracer/skins/bika/drillhole_edit_form.cpt 2014-01-31 13:00:37 UTC (rev 3449) @@ -22,16 +22,16 @@ errors options/state/getErrors; startup_directory here/absolute_url; manage_bika python:mtool.checkPermission('BIKA: Manage bika', here); - trench_state python:wtool.getInfoFor(here, 'review_state', ''); - states_array python:here.get_states('trench'); + drillhole_state python:wtool.getInfoFor(here, 'review_state', ''); + states_array python:here.get_states('drillhole'); utmsystems python:here.portal_catalog( portal_type='UTMSystem', sort_on='sortable_title'); people python:here.portal_catalog( portal_type='Personnel', sort_on='sortable_title'); - dateplanned python:here.getDatePlanned() or None ; - planned_year python:dateplanned and dateplanned.year() or None; + datedrilled python:here.getDateDrilled() or None ; + drilled_year python:datedrilled and datedrilled.year() or None; "> <tal:error repeat="error python:errors.keys()"> <tal:x define="field_name python:error; @@ -65,29 +65,29 @@ <input type="hidden" name="form.submitted" value="1" /> <input type="hidden" name="came_from" value="Edit" /> -<input type="hidden" name="TrenchUID" value="" +<input type="hidden" name="DrillHoleUID" value="" tal:attributes="value here/UID" /> <br/> <table - summary="Trench form" + summary="Drillhole form" class="sample" cellpadding="0" cellspacing="0"> <thead> <tr> -<th id="" i18n:translate="label_trench">Trench</th> +<th id="" i18n:translate="label_drillhole">Drill hole</th> <td class="left" colspan="3" - id="" tal:content="here/getClientTrenchID">T-00001</td> + id="" tal:content="here/getClientDrillHoleID">T-00001</td> </tr> <tr> <th - i18n:translate="label_trenchid">ID + i18n:translate="label_drillholeid">ID </th> <td class="left"> -<span tal:content="here/getTrenchID">T-001</span> +<span tal:content="here/getDrillHoleID">T-001</span> </td> <th style="white-space:nowrap"> <span i18n:translate="label_utmsystem">UTM system</span> @@ -116,92 +116,116 @@ <tr> <th style="white-space:nowrap"> -<span i18n:translate="label_starteasting">Start easting </span> +<span i18n:translate="label_east">East</span> <span class="fieldRequired"/> </th> <td class="left"> -<input size="10" type='text' onfocus='' value='' name="StartEasting" +<input size="10" type='text' onfocus='' value='' name="EastUTM" tal:attributes=" - value python:request.get('StartEasting', here.getStartEasting()); + value python:request.get('EastUTM', here.getEastUTM()); tabindex tabindex/next"/> </td> <th style="white-space:nowrap"> -<span i18n:translate="label_startnorthing">Start northing</span> +<span i18n:translate="label_north">North</span> <span class="fieldRequired"/> </th> <td class="left"> -<input size="10" type='text' onfocus='' value='' name="StartNorthing" +<input size="10" type='text' onfocus='' value='' name="NorthUTM" tal:attributes=" - value python:request.get('StartNorthing', here.getStartNorthing()); + value python:request.get('NorthUTM', here.getNorthUTM()); tabindex tabindex/next"/> </td> </tr> + <tr> <th style="white-space:nowrap"> -<span i18n:translate="label_endeasting">End easting </span> +<span i18n:translate="label_elevation">Elevation</span> <span class="fieldRequired"/> </th> <td class="left"> -<input size="10" type='text' onfocus='' value='' name="EndEasting" +<input size="10" type='text' onfocus='' value='' name="Elevation" tal:attributes=" - value python:request.get('EndEasting', here.getEndEasting()); + value python:request.get('Elevation', here.getElevation()); tabindex tabindex/next"/> </td> <th style="white-space:nowrap"> -<span i18n:translate="label_endnorthing">End northing</span> +<span i18n:translate="label_EOH">EOH</span> <span class="fieldRequired"/> </th> <td class="left"> -<input size="10" type='text' onfocus='' value='' name="EndNorthing" +<input size="10" type='text' onfocus='' value='' name="EOH" tal:attributes=" - value python:request.get('EndNorthing', here.getEndNorthing()); + value python:request.get('EOH', here.getEOH()); tabindex tabindex/next"/> </td> </tr> <tr> <th style="white-space:nowrap"> -<span i18n:translate="label_length">Length</span> +<span i18n:translate="label_azimuth">Azimuth </span> <span class="fieldRequired"/> </th> <td class="left"> -<input size="10" type='text' onfocus='' value='' name="Length" +<input size="10" type='text' onfocus='' value='' name="Azimuth" tal:attributes=" - value python:request.get('Length', here.getLength()); + value python:request.get('Azimuth', here.getAzimuth()); tabindex tabindex/next"/> </td> <th style="white-space:nowrap"> -<span i18n:translate="label_samplingdirection">Sampling direction</span> +<span i18n:translate="label_dip">Dip</span> <span class="fieldRequired"/> </th> <td class="left"> -<input size="10" type='text' onfocus='' value='' name="SamplingDirection" +<input size="10" type='text' onfocus='' value='' name="Dip" tal:attributes=" - value python:request.get('SamplingDirection', here.getSamplingDirection()); + value python:request.get('Dip', here.getDip()); tabindex tabindex/next"/> </td> </tr> <tr> +<th style="white-space:nowrap"> +<span i18n:translate="label_watertable">Water table</span> + <span class="fieldRequired"/> +</th> +<td class="left"> +<input size="10" type='text' onfocus='' value='' name="WaterTable" + tal:attributes=" + value python:request.get('WaterTable', here.getWaterTable()); + tabindex tabindex/next"/> +</td> +<th style="white-space:nowrap"> +<span i18n:translate="label_drilltype">Drill Type</span> + <span class="fieldRequired"/> +</th> +<td class="left"> +<input size="10" type='text' onfocus='' value='' name="DrillType" + tal:attributes=" + value python:request.get('DrillType', here.getDrillType()); + tabindex tabindex/next"/> +</td> +</tr> + +<tr> <th i18n:translate="label_status">Status </th> <td class="left" colspan="3" - tal:content="trench_state">Planned</td> + tal:content="drillhole_state">Drilled</td> </tr> <tr> -<th i18n:translate="label_dateplanned">Planned</th> +<th i18n:translate="label_datedrilled">Drilled</th> <td class="left" colspan="3"> <tal:define define=" - id string:DatePlanned; + id string:DateDrilled; inputname id; formname string:search; - value python:request.get('DatePlanned', here.getDatePlanned()); + value python:request.get('DateDrilled', here.getDateDrilled()); show_hm python:False; - starting_year planned_year; + starting_year drilled_year; inputvalue python:test(value!='None', value, '');"> <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox|here/calendar_slot/macros/calendarDatePickerBox"> a calendar, hopefully @@ -210,18 +234,18 @@ </td> </tr> -<tal:planned tal:condition="python:states_array.index(trench_state) >= states_array.index('planned')"> +<tal:drilled tal:condition="python:states_array.index(drillhole_state) >= states_array.index('drilled')"> <tr> -<th i18n:translate="label_datesetout">Set Out</th> +<th i18n:translate="label_datelogged">Logged</th> <td class="left" colspan="2" style="white-space:nowrap"> <tal:define define=" - id string:DateSetOut; + id string:DateLogged; inputname id; formname string:search; - value python:request.get('DateSetOut', here.getDateSetOut()); + value python:request.get('DateLogged', here.getDateLogged()); show_hm python:False; - starting_year planned_year; + starting_year drilled_year; inputvalue python:test(value!='None', value, '');"> <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox|here/calendar_slot/macros/calendarDatePickerBox"> a calendar, hopefully @@ -230,13 +254,13 @@ </td> <td> <span i18n:translate="label_by">By:</span> - <select name="SetOutBy" id="setoutby" + <select name="LoggedBy" id="loggedby" tal:attributes="tabindex tabindex/next;"> <option></option> <tal:item - tal:define="this_person python:request.get('SetOutBy', - (here.getSetOutBy() and here.getSetOutBy().UID() or None));" + tal:define="this_person python:request.get('LoggedBy', + (here.getLoggedBy() and here.getLoggedBy().UID() or None));" tal:repeat="person people"> <option selected="selected" tal:define=" @@ -249,180 +273,8 @@ </select> </td> </tr> -</tal:planned> +</tal:drilled> -<tal:excavated tal:condition="python:states_array.index(trench_state) >= states_array.index('excavated')"> -<tr> -<th i18n:translate="label_dateexcavated">Excavated</th> -<td class="left" colspan="3"> - <tal:define define=" - id string:DateExcavated; - inputname id; - formname string:search; - value python:request.get('DateExcavated', here.getDateExcavated()); - show_hm python:False; - starting_year planned_year; - inputvalue python:test(value!='None', value, '');"> - <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox|here/calendar_slot/macros/calendarDatePickerBox"> - a calendar, hopefully - </metal:use> - </tal:define> -</td> -</tr> - -<tr> -<th i18n:translate="label_datemarkedout">Marked Out</th> -<td class="left" colspan="3"> - <tal:define define=" - id string:DateMarkedOut; - inputname id; - formname string:search; - value python:request.get('DateMarkedOut', here.getDateMarkedOut()); - show_hm python:False; - starting_year planned_year; - inputvalue python:test(value!='None', value, '');"> - <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox|here/calendar_slot/macros/calendarDatePickerBox"> - a calendar, hopefully - </metal:use> - </tal:define> -</td> -</tr> - -<tr> - -<th i18n:translate="label_dateprofiled">Profiled</th> -<td class="left" colspan="3"> - <tal:define define=" - id string:DateProfiled; - inputname id; - formname string:search; - value python:request.get('DateProfiled', here.getDateProfiled()); - show_hm python:False; - starting_year planned_year; - inputvalue python:test(value!='None', value, '');"> - <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox|here/calendar_slot/macros/calendarDatePickerBox"> - a calendar, hopefully - </metal:use> - </tal:define> -</td> -</tr> - -<tr> - -<th i18n:translate="label_datemapped">Mapped</th> -<td class="left" colspan="2" style="white-space:nowrap"> - <tal:define define=" - id string:DateMapped; - inputname id; - formname string:search; - value python:request.get('DateMapped', here.getDateMapped()); - show_hm python:False; - starting_year planned_year; - inputvalue python:test(value!='None', value, '');"> - <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox|here/calendar_slot/macros/calendarDatePickerBox"> - a calendar, hopefully - </metal:use> - </tal:define> -</td> -<td > -<span i18n:translate="label_by">By:</span> - <select name="MappedBy" id="mappedby" - tal:attributes="tabindex tabindex/next;"> - - <option></option> - <tal:item - tal:define="this_person python:request.get('MappedBy', - (here.getMappedBy() and here.getMappedBy().UID() or None));" - tal:repeat="person people"> - <option selected="selected" - tal:define=" - this_selected python:test((person.UID == this_person), 'selected', '')" - tal:attributes="value person/UID; - selected this_selected" - tal:content="person/Title"></option> - </tal:item> - - </select> -</td> -</tr> - -<tr> - -<th i18n:translate="label_datesampled">Sampled</th> -<td class="left" colspan="3"> - <tal:define define=" - id string:DateSampled; - inputname id; - formname string:search; - value python:request.get('DateSampled', here.getDateSampled()); - show_hm python:False; - starting_year planned_year; - inputvalue python:test(value!='None', value, '');"> - <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox|here/calendar_slot/macros/calendarDatePickerBox"> - a calendar, hopefully - </metal:use> - </tal:define> -</td> -</tr> - -<tr> -<th i18n:translate="label_datephotographed">Photographed</th> -<td class="left" colspan="3"> - <tal:define define=" - id string:DatePhotographed; - inputname id; - formname string:search; - value python:request.get('DatePhotographed', here.getDatePhotographed()); - show_hm python:False; - starting_year planned_year; - inputvalue python:test(value!='None', value, '');"> - <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox|here/calendar_slot/macros/calendarDatePickerBox"> - a calendar, hopefully - </metal:use> - </tal:define> -</td> -</tr> -</tal:excavated> - -<tal:worked> -<tr tal:condition="python:states_array.index(trench_state) >= states_array.index('worked')"> -<th i18n:translate="label_dateworked">Worked</th> -<td class="left" colspan="3"> - <tal:define define=" - id string:DateWorked; - inputname id; - formname string:search; - value python:request.get('DateWorked', here.getDateWorked()); - show_hm python:False; - starting_year planned_year; - inputvalue python:test(value!='None', value, '');"> - <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox|here/calendar_slot/macros/calendarDatePickerBox"> - a calendar, hopefully - </metal:use> - </tal:define> -</td> -</tr> -</tal:worked> - -<tal:backfilled> -<tr tal:condition="python:states_array.index(trench_state) >= states_array.index('backfilled')"> -<th i18n:translate="label_datebackfilled">Backfilled</th> -<td class="left" colspan="3"> - <tal:define define=" - id string:DateBackfilled; - inputname id; - formname string:search; - value python:request.get('DateBackfilled', here.getDateBackfilled()); - show_hm python:False; - starting_year planned_year; - inputvalue python:test(value!='None', value, '');"> - <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox|here/calendar_slot/macros/calendarDatePickerBox"> - a calendar, hopefully - </metal:use> - </tal:define> -</td> -</tr> -</tal:backfilled> </thead> </table> Modified: tracer/skins/bika/drillhole_edit_form.cpt.metadata =================================================================== --- tracer/skins/bika/drillhole_edit_form.cpt.metadata 2013-12-05 13:08:53 UTC (rev 3448) +++ tracer/skins/bika/drillhole_edit_form.cpt.metadata 2014-01-31 13:00:37 UTC (rev 3449) @@ -1,12 +1,12 @@ [default] -title=Edit trench +title=Edit drillhole [validators] validators..category = -validators = validate_trench_edit_form +validators = validate_drillhole_edit_form [actions] -action.success..category = traverse_to:string:trench_edit_form -action.success = traverse_to:string:trench_edit -action.failure = traverse_to:string:trench_edit_form +action.success..category = traverse_to:string:drillhole_edit_form +action.success = traverse_to:string:drillhole_edit +action.failure = traverse_to:string:drillhole_edit_form Added: tracer/skins/bika/drillhole_samples.pt =================================================================== --- tracer/skins/bika/drillhole_samples.pt (rev 0) +++ tracer/skins/bika/drillhole_samples.pt 2014-01-31 13:00:37 UTC (rev 3449) @@ -0,0 +1,254 @@ +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" + lang="en" + metal:use-macro="here/main_template/macros/master" + i18n:domain="bika"> + +<head> + +<metal:block fill-slot="top_slot"> +<span + tal:replace="nothing" + tal:define="dummy python:request.set('enable_border', 1)" + /> +</metal:block> + +</head> + + +<body> + +<div metal:fill-slot="main" +tal:define=" + batch_size python:int(request.get('batch_size', '100')); + dummy_a python:request.set('portal_type', 'Sample'); + dummy_b python:request.set('getDrillHoleUID', here.UID()); + dummy_c python:request.set('sort_on', 'getSampleID'); + dummy_d python:request.set('sort_order', 'reverse'); + dummy_e python:here.toggle_state('clientar_review_state', 'all'); + clientar_state python:request.get('clientar_review_state'); + dummy_f python:here.REQUEST.set('review_state', clientar_state); + states python:here.get_toggles('sample'); + header_state python:here.get_toggle_title(clientar_state, states)"> + + +<div metal:use-macro="here/document_actions/macros/document_actions"> +Document actions (print, sendto etc) +</div> + +<h1> +<img src="sample.png" tal:attributes="src python:here.portal_types.getTypeInfo('Sample').getIcon()"/> +<span i18n:translate="heading_samples">Samples</span> +<tal:not_all tal:condition="python:clientar_state != 'all'"> +- +<span i18n:translate="" tal:content="header_state">All</span> +</tal:not_all> +</h1> + +<div id="content-samples" + tal:define=" + all python:clientar_state == 'all'; + results python:test(all, here.portal_catalog( + portal_type='Sample', + getDrillHoleUID=here.UID(), + sort_on='getSampleID', + sort_order='reverse'), + container.queryCatalog()); + Batch python:modules['Products.CMFPlone'].Batch; + b_start python:request.get('b_start',0); + batch python:Batch(results, batch_size, int(b_start), orphan=1); + can_delete python: clientar_state == 'sample_due'; + can_publish python: clientar_state in ['verified', 'published']"> + +<div metal:use-macro="here/batchsize_macros/macros/batchsize" /> +<br/><br/> + +<form name="filter_result" action="" method="post" + tal:attributes="action template/getId"> +<input type="hidden" name="portal_type" value="Sample"/> +<input type="hidden" name="getDrillHoleUID" value="" + tal:attributes="value here/UID"/> +<input type="hidden" name="sort_on" value="getSampleID"/> +<input type="hidden" name="sort_order" value="reverse"/> +<div class="optionsToggle"> + <tal:x repeat="state states"> + <input class="noborder" type="radio" name="clientar_review_state" value="sample_due" + onclick="this.form.submit()" + tal:define="state_id state/id" + tal:attributes="value state_id; + checked python:request.get('clientar_review_state', 'sample_due') == state_id and 'checked' or None"/> + <span tal:content="state/title" i18n:translate="">Sample due</span> + </tal:x> +</div> +</form> + +<form name="samples" action="." method="post" + tal:condition="results"> + +<br/> +<input type="hidden" name="came_from" value="client_samples" /> +<div tal:define="folder_actions python:can_delete and [button for button in actions['folder_buttons'] if button['id'] == 'delete'] or []; + ar_actions python: portal.portal_actions.listFilteredActionsFor(batch[0].getObject()); + permitted_actions python:['takesample', 'dispatch', 'submit', 'publish']; + workflow_actions python:[button for button in ar_actions['workflow'] if button['id'] in permitted_actions]; + ar_action python:(folder_actions or workflow_actions) and not all"> +<table tal:condition="batch" + class="listing" + summary="sample listing" + cellpadding="0" cellspacing="0"> + +<thead> +<tr> +<th class="nosort" tal:condition="python:ar_action"><input + class="noborder" + type="checkbox" + src="select_all_icon.gif" + name="selectButton" + title="Select all items" + onClick="toggleSelect(this);" + tal:attributes="src string:$portal_url/select_all_icon.gif" + alt="Select all items" + i18n:attributes="title; alt" + /> +</th> +<th i18n:translate="label_sample">Sample</th> +<th i18n:translate="label_sampleid">Sample ID</th> +<th i18n:translate="label_eastutm">East</th> +<th i18n:translate="label_northutm">North</th> +<!-- <th i18n:translate="label_contact">Contact</th>--> +<th i18n:translate="label_sampletype">Sample Type</th> +<th i18n:translate="label_datesampled" + tal:condition="python:clientar_state != 'requested'" + >Sampled</th> +<th i18n:translate="label_datedispatched" + tal:condition="python:clientar_state not in ['requested', 'sampled']" + >Dispatched</th> +<th i18n:translate="label_datepublished" + tal:condition="python:clientar_state in ['published', 'all']" + >Published</th> +<th i18n:translate="label_status" + tal:condition="python:clientar_state == 'all'">Status</th> +</tr> +</thead> + +<tbody tal:define="getRelativeContentURL nocall:utool/getRelativeContentURL"> + +<metal:block tal:repeat="item batch"> +<tr tal:define=" + oddrow repeat/item/odd; + obj item/getObject; + item_title_or_id obj/title_or_id; + ar_state python:test(clientar_state == 'all', + wtool.getInfoFor(obj, 'review_state', ''), + clientar_state); + in_progress python:ar_state not in ['sample_due', 'published']" + tal:attributes=" + class python:test(oddrow, 'even', 'odd')" > + +<td tal:condition="python:ar_action"> +<input type="checkbox" class="noborder" name="ids:list" id="#" value="#" + tal:define="this_value python:folder_actions and obj.getId() or obj.UID()" + tal:attributes=" + value this_value; + id python: 'cb_'+obj.getId(); + checked request/ids_checked|nothing; + tabindex tabindex/next|nothing; + alt string:Select $item_title_or_id; + title string:Select $item_title_or_id"/> +<input type="hidden" name="obj_paths:list" value="#" + tal:attributes="value python:getRelativeContentURL(obj)" /> +</td> + +<tal:sample tal:define="sampletype obj/getSampleType"> +<td style="white-space:nowrap"> +<a href="" + tal:attributes="href obj/absolute_url" + tal:content="obj/getClientSampleID">S-00001</a> +<img src="dup.png" + tal:condition="python:obj.getDuplicateSample()" > +</td> +<td style="white-space:nowrap"> +<a href="" + tal:attributes="href obj/absolute_url" + tal:content="obj/getSampleID">S-00001</a> +</td> +<td tal:content="obj/getEastUTM|nothing">R001</td> +<td tal:content="obj/getNorthUTM|nothing">R001</td> +<!-- +<td tal:define="contact obj/getContact|nothing"> +<a tal:condition="contact" + href="" + tal:attributes="href contact/absolute_url" + tal:content="contact/Title|nothing">Pete Smith</a></td> +--> +<td tal:content="sampletype/Title|nothing">Sample Type</td> +</tal:sample> + +<td tal:condition="python:clientar_state != 'requested'"> +<span tal:condition="python:ar_state != 'requested'" + tal:content="python:plone_view.toLocalizedTime(obj.getDateSampled(), long_format=0)" + >2005-01-01 10:10</span> +</td> +<td tal:condition="python:clientar_state not in ['requested', 'sampled']"> +<span tal:condition="python:ar_state not in ['requested', 'sampled']" + tal:content="python:plone_view.toLocalizedTime(obj.getDateDispatched(), long_format=0)" + >2005-01-01 10:10</span> +</td> +<td tal:condition="python:clientar_state in ['published', 'all']"> +<span tal:condition="python:ar_state in 'published'" + tal:content="python:plone_view.toLocalizedTime(obj.getDatePublished(), long_format=0)" + >2005-01-01 10:10</span> +</td> +<td tal:condition="python:clientar_state == 'all'" + tal:content="python:ar_state.replace('_', ' ')"> +</td> +</tr> +</metal:block> + +</tbody> + +</table> + + + +<!-- Navigation --> +<div metal:use-macro="here/batch_macros/macros/navigation" /> + +<tal:buttons tal:repeat="button folder_actions"> +<input + class="worksheet" + type="submit" + name="" + value="" + tabindex="" + i18n:attributes="value" + tal:attributes=" + value button/name; + name button/url; + tabindex tabindex/next"/> +</tal:buttons> + + +<input type="hidden" id="workflow_action" name="workflow_action" value=""/> + +<tal:buttons tal:repeat="button workflow_actions"> +<input + class="worksheet" + type="submit" + name="batch_status_modify:method" + value="" + tabindex="" + i18n:attributes="value" + tal:attributes=" + value button/name; + tabindex tabindex/next; + onclick string:this.form.workflow_action.value = '${button/id}'" /> +</tal:buttons> + +</div> +</form> + +</div> +</div> + +</body> +</html> Modified: tracer/skins/bika/drillhole_view.pt =================================================================== --- tracer/skins/bika/drillhole_view.pt 2013-12-05 13:08:53 UTC (rev 3448) +++ tracer/skins/bika/drillhole_view.pt 2014-01-31 13:00:37 UTC (rev 3449) @@ -91,9 +91,9 @@ <td class="left" tal:content="here/getElevation|nothing">123</td> -<th i18n:translate="label_drilltype">Drill type</th> +<th i18n:translate="label_EOH">EOH</th> <td class="left" - tal:content="here/getDrillType|nothing">123</td> + tal:content="here/getEOH|nothing">123</td> </tr> <tr> @@ -107,13 +107,13 @@ </tr> <tr> -<th i18n:translate="label_EOH">EOH</th> -<td class="left" - tal:content="here/getEOH|nothing">123</td> - <th i18n:translate="label_watertable">Water table</th> <td class="left" tal:content="here/getWaterTable|nothing">123</td> +<th i18n:translate="label_drilltype">Drill type</th> +<td class="left" + tal:content="here/getDrillType|nothing">123</td> + </tr> <tr> Modified: tracer/skins/bika/load_sample_data.py =================================================================== --- tracer/skins/bika/load_sample_data.py 2013-12-05 13:08:53 UTC (rev 3448) +++ tracer/skins/bika/load_sample_data.py 2014-01-31 13:00:37 UTC (rev 3449) @@ -729,6 +729,7 @@ ('15', 'South Shore Group', 'in...@ex...', '+226 71193920', '', [['Kevin', 'Shugg', 'kshugg', 'ks...@se...', 'email', '', '+226 71193920'], ['Robert', 'Kirtlan', 'rkirtlan', 'rki...@se...', 'email', '', ''],], ['Bourzango', 'Mourdeni', 'Pepow', 'Saga', 'Sanare', 'Sankora', 'Tyegana'], 'Burkina Faso'), ('16', 'TestClient Inc', 'te...@te...', '+555 12345678', '', [['Joe', 'Bloggs', 'testclient', 'joe...@te...', 'email', 'Chief Geologist', '+226 55512334'],], ['ProjectA', 'ProjectB'], 'Burkina Faso'), ('17', 'West African Gold', 'wes...@ex...', '+61 407689231', '', [['Steven', 'Tambanis', 'stamban', 'st...@ex...', 'email', '', '407689231'],], ['Barga', 'Baskondo', 'Darkou', 'Faka', 'Koutakou', 'Piboare', 'Samba', 'Tangaye', 'Tongomayel', 'Touya'], 'Burkina Faso'), +('18', 'Tamimi Invest - Trans Oceanic Mineral Company', '', '', '', [['Maarouf', 'Dawalibi', 'maaroufd', 'm.d...@ta...', 'email', '', '+966554541552'],], ['Guinea', ], 'Guinea'), ) for c in client_list: if len(c) != 8: Added: tracer/skins/bika/report_results_print.pt =================================================================== --- tracer/skins/bika/report_results_print.pt (rev 0) +++ tracer/skins/bika/report_results_print.pt 2014-01-31 13:00:37 UTC (rev 3449) @@ -0,0 +1,283 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<metal:block use-macro="here/global_defines/macros/defines" /> + +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" + lang="en" + xmlns:tal="http://xml.zope.org/namespaces/tal" + xmlns:metal="http://xml.zope.org/namespaces/metal" + xmlns:i18n="http://xml.zope.org/namespaces/i18n" + tal:attributes="lang default_language|default; + xml:lang default_language|default;" + i18n:domain="bika"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" + tal:define="charset site_properties/default_charset|string:utf-8" + tal:attributes="content string:text/html;;charset=${charset}" /> + + <!-- Column style sheet. --> + <style type="text/css" media="all" tal:condition="exists: portal/ploneColumns.css" + tal:content="string:@import url($portal_url/ploneColumns.css);"> + </style> + + <!-- Main style sheets for CSS2 capable browsers --> + <style type="text/css" media="screen" + tal:content="string: @import url($portal_url/plone.css);"> + </style> + + <!-- Alternate style sheets for the bigger/smaller text switcher --> + <link rel="alternate stylesheet" type="text/css" media="screen" href="" tal:attributes="href string:$portal_url/ploneTextSmall.css" title="Small Text" /> + <link rel="alternate stylesheet" type="text/css" media="screen" href="" tal:attributes="href string:$portal_url/ploneTextLarge.css" title="Large Text" /> + + <!-- Custom style sheet if available --> + <style type="text/css" media="all" tal:condition="exists: portal/ploneCustom.css" + tal:content="string:@import url($portal_url/ploneCustom.css);"> + </style> + + <!-- Style sheet used for printing --> + <link rel="stylesheet" type="text/css" media="print" href="" + tal:attributes="href string:$portal_url/plonePrint.css" /> + + <!-- Internet Explorer CSS Fixes --> + <tal:iefixstart replace="structure string:<!--[if IE]>" /> + <style type="text/css" media="all" tal:condition="exists: portal/ploneIEFixes.css" + tal:content="string:@import url($portal_url/ploneIEFixes.css);"> + </style> + <tal:iefixend replace="structure string:<![endif]-->" /> + +</head> +<body style="font-size: 100%" onload="this.print()"> +<metal:block use-macro="here/report_print_header/macros/report_header"/> + +<metal:block define-macro="header"> +<h1> +<img src="analysis.png" tal:attributes="src python:here.portal_types.getTypeInfo('Analysis').getIcon()"/> +<span i18n:translate="heading_results_print" + >Results</span> +</h1> +<p i18n:translate="description_results_graph">Analysis results graphs +</p> +</metal:block> + +<metal:block define-macro="subheader"> +<!-- +<div tal:define=" + fromdate request/getDateVerified_fromdate | nothing; + todate request/getDateVerified_todate | nothing; + status request/review_state | nothing;"> +<div tal:condition="python:fromdate or todate"> +<span i18n:translate="label_verified_date">Date verified</span> +<span tal:condition="fromdate" + i18n:translate="label_from">from</span> +<span tal:condition="fromdate" + tal:content="python:plone_view.toLocalizedTime(request.getDateVerified_fromdate, long_format=0)">2006-01-01 </span> +<span tal:condition="todate" + i18n:translate="label_to">to</span> +<span tal:condition="todate" + tal:content="python:plone_view.toLocalizedTime(request.getDateVerified_todate, long_format=0)">2006-01-01</span> +</div> +<div tal:condition="python:not (fromdate or todate)"> + <span i18n:translate="label_verified_date">Date verified</span> +<span i18n:translate="label_not_specified">not specified</span> +</div> +</div> +--> +</metal:block> + +<metal:block define-macro="body" + tal:define=" + service_uid python:request.get('getServiceUID', ''); + client_uid python:request.get('getClientUID', ''); + project_uid python:request.get('getProjectUID', '')"> +<tal:no_values tal:condition="python:not service_uid or not client_uid or not project_uid"> +<b i18n:translate="label_values_not_specified">Specify client, project and service values</b> +</tal:no_values> + +<tal:get_values tal:condition="python:service_uid and client_uid and project_uid"> +<div style="clear:both"/> +<!-- + datefrom request/getDateVerified_fromdate | nothing; + dateto python:request.get('getDateVerified_todate', ''); + dummy python:here.format_date_query('getDateVerified'); + expected_result python:service and stdsample.getStandardResult(service_uid) or [0,0,0]; + expected python:expected_result[0]; + expected_min python:expected_result[1]; + expected_max python:expected_result[2]; + verified_dates python: [toLocalizedTime(a.getDateVerified(), long_format=0) for a in analyses]; +--> +<table + summary="Analysis results View" + class="analysisrequest" + cellpadding="0" cellspacing="0" + width="100%" + + tal:define=" + toLocalizedTime nocall:context/@@plone/toLocalizedTime; + service python:here.reference_catalog.lookupObject(service_uid); + client python:here.reference_catalog.lookupObject(client_uid); + project python:here.reference_catalog.lookupObject(project_uid); + a_proxies python:here.queryCatalog() or []; + all_analyses python:[p.getObject() for p in a_proxies]; + analyses python:here.get_valid_analyses(all_analyses); + sort_on python:(('getClientSampleID', 'cmp', 'asc'),); + analyses python:sequence.sort(analyses, sort_on); + minresults python: context.bika_settings.settings.getMinimumResults() or 5; + results python: [a.getResult() for a in analyses]; + idlabels python: [a.getClientSampleID() for a in analyses]; + yvalues python:','.join([str(v) for v in results]); + xdates python:','.join([str(v) for v in idlabels]); +"> +all: +<b tal:content="all_analyses"/> +valid: +<b tal:content="analyses"/> + +<!-- + dummy1 python:request.set('yvalues', yvalues); + dummy2 python:request.set('xdates', xdates); + trend python:here.get_trend_chart_data(); +<b tal:content="trend"/> +--> + +<tr> +<th width="20%" i18n:translate="label_client">Client</th> +<td width="30%" class="left"> +<a href="" + tal:attributes="href string:${client/absolute_url}" + tal:content="client/Title">Client</a></td> +<th width="20%" i18n:translate="label_project">Project</th> +<td class="left" width="30%"> +<a href="" + tal:attributes="href string:${project/absolute_url}" + tal:content="project/Title">Projectname</a></td> +</tr> + +<!-- +<tr> +<th width="20%" i18n:translate="label_stock">Stock</th> +<td width="30%" class="left" + tal:content="python:stdsample.getStandardStock() and stdsample.getStandardStock().Title() or None" + >4gl sugar</td> +<th i18n:translate="label_analysis">Analysis +</th> +<td class="left" width="30%" + tal:define="category service/getCategoryName; + title service/Title" + tal:content="python:'%s: %s' %(category, title)">Acid</td> +</tr> + +<tr> +<th i18n:translate="label_date_verified">Date verified +</th> +<td class="left" colspan="3"> +<tal:datefrom tal:condition="datefrom"> +<span i18n:translate="label_from">from</span> +<span tal:content="python:toLocalizedTime(datefrom, long_format=0)"></span> +</tal:datefrom> +<tal:dateto tal:condition="dateto"> +<span i18n:translate="label_to">to</span> +<span tal:content="python:toLocalizedTime(dateto, long_format=0)"></span> +</tal:dateto> +<span tal:condition="python:not dateto and not datefrom" + i18n:translate="label_not_specified">Not specified</span> +</td> +</tr> +--> + +<!-- distribution graph --> +<!-- +<tr> +<tal:graph tal:condition="python: len(results) >= minresults"> +<td colspan="4" width="100%" height="300px" style="vertical-align: middle"> +<br/> +<h4 i18n:translate="label_results">Results</h4> +<img tal:define="c_url string:${here/portal_url}/charts/; + xvalues python:','.join([str(v) for v in results])" + tal:attributes="src string:${c_url}distribution?expected=${expected}&min=${expected_min}&max=${expected_max}&selected=${selected}&selected_id=${selected_id}&xvalues=${xvalues}"/> +</td> +</tal:graph> + +<tal:nograph tal:condition="python: len(results) < minresults"> +<td colspan="4" height="50px" style="vertical-align: middle">Distribution graph cannot be displayed, as the number of results for this analysis does not meet the minimum requirement</td> +</tal:nograph> +<br/> +</tr> +--> + +<!-- trend graph --> +<!-- +<tr> +<tal:graph tal:condition="python: len(results) > 0"> +<td colspan="4" width="100%" height="300px" style="vertical-align: middle"> +<br/> +<h4 i18n:translate="label_trend">Result trend</h4> +<img tal:define="c_url string:${here/portal_url}/charts/; + yvalues python:','.join([str(v) for v in results]); + xdates python:','.join([str(v) for v in verified_dates])" + tal:attributes="src string:${c_url}trendplot?expected=${expected}&min=${expected_min}&max=${expected_max}&selected_id=${selected_id}&yvalues=${yvalues}&xdates=${xdates}"/> +<br/> +</td> +</tal:graph> + +</tr> +--> + +<!-- list of values --> +<tr style="border-top: hidden"> +<td colspan="4"> + +<br/> +<h4 i18n:translate="label_all_values">All values</h4> +<CENTER> +<table class="listing" + id="allvalues" + cellpadding="0" cellspacing="0"> + +<thead> +<tr> +<th i18n:translate="label_analysis">Analysis</th> +<th i18n:translate="label_result_unit" + tal:define="unit python:service and service.getUnit() or nothing"> +Result <tal:block replace="unit" i18n:name="unit"/> +</th> +<!-- +<th i18n:translate="label_verified">Verified</th> +--> +</tr> +</thead> +<tbody> +<tal:analyses tal:repeat="analysis analyses"> +<tal:block + tal:condition="analysis/getResult" + tal:define="analysis_uid analysis/UID"> +<tr> +<td id=""> +<a href="" + tal:attributes="href string:${analysis/aq_parent/absolute_url}" + tal:content="analysis/getId">SA-001</a> +</td> + +<td tal:content="analysis/getResult">Result</td> +<!-- +<td tal:define="date_verified analysis/getDateVerified" + tal:content="python:toLocalizedTime(date_verified, long_format=0)"></td> +--> +</tr> +</tal:block> +</tal:analyses> +</tbody> +</table> +</CENTER> + +</td> +</tr> + +</table> +</tal:get_values> +</metal:block> + +</body> + +</html> + + Added: tracer/skins/bika/report_results_view.pt =================================================================== --- tracer/skins/bika/report_results_view.pt (rev 0) +++ tracer/skins/bika/report_results_view.pt 2014-01-31 13:00:37 UTC (rev 3449) @@ -0,0 +1,220 @@ +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" + lang="en" + metal:use-macro="here/main_template/macros/master" + i18n:domain="bika"> + +<head> + <metal:block fill-slot="top_slot" + tal:define="dummy python:request.set('disable_border', 1)" /> + + <metal:calendar fill-slot="javascript_head_slot"> + <!-- ECMAScript calendar --> + <style type="text/css" media="all" + tal:content="string:@import url($portal_url/jscalendar/calendar-system.css);"></style> + <script type="text/javascript" + tal:attributes="src string:$portal_url/jscalendar/calendar_stripped.js"></script> + <script type="text/javascript" charset="iso-8859-1" + tal:condition="exists: portal/jscalendar/calendar-en.js" + tal:attributes="src string:$portal_url/jscalendar/calendar-en.js"></script> + </metal:calendar> + +</head> +<body> +<div metal:fill-slot="main" + tal:define="form_submitted request/submit|nothing"> + + +<script type="text/javascript" src="utils.js"></script> +<div metal:use-macro="here/document_actions/macros/document_actions"> +Document actions (print, sendto etc) +</div> + +<metal:block use-macro="here/report_results_print/macros/header"/> + +<tal:parameters condition="not:form_submitted"> +<tal:selection + tal:define=" + client_uid python:request.get('getClientUID', None); + client python:client_uid and here.reference_catalog.lookupObject(client_uid) or None; + project_uid python:request.get('getProjectUID', None) ; + project python:project_uid and here.reference_catalog.lookupObject(project_uid) or None; + service_uid python:request.get('getServiceUID', None); + service python:service_uid and here.reference_catalog.lookupObject(service_uid) or None; +"> + +<form action="report_results_view" method="post" name="search"> +<fieldset> + +<legend i18n:translate="legend_selection_criteria">Selection criteria</legend> + +<form name="filter_result" action="." method="post" name="search" + tal:attributes="action template/getId"> + +<div class="field" tal:condition="not:here/member_is_client"> + <label i18n:translate="label_client" + >Client</label><br/> + <select name="getClientUID" + onChange="this.form.submit()" + style="" + id="getClientUID" + tal:attributes=" + style string:font-family:${here/base_properties/fontFamily};;font-size:100%; + "> + <option value=""/> + + <tal:clients + define=" + clients python:here.portal_catalog(portal_type='Client'); + sort_on python:(('Title', 'nocase', 'asc'),); + clients python:sequence.sort(clients, sort_on);" + repeat="client clients"> + <option value="" + tal:define="this_uid python:client.getObject().UID()" + tal:attributes="value this_uid; + selected python:client_uid == this_uid and 'selected' or ''" + tal:content="client/Title" + >Acme Systems</option> + + </tal:clients> + </select> +</div> + +</form> + +<form action="report_results_view" method="post" name="search"> +<div class="field"> + <label i18n:translate="label_project" + >Project</label><br/> + <select name="getProjectUID" + style="" id="getProjectUID"> + <option value=""/> + <tal:projects + define=" + projects python:here.portal_catalog(portal_type='Project', + getClientUID=client_uid); + sort_on python:(('Title', 'nocase', 'asc'),); + projects python:sequence.sort(projects, sort_on);" + tal:repeat="project projects"> + <option value="" + tal:define="this_uid python:project.UID" + tal:attributes="value this_uid; + selected python:project_uid == this_uid and 'selected' or ''" + tal:content="project/Title" + >sugar</option> + </tal:projects> + </select> +</div> + +<div class="field"> + <label i18n:translate="label_analysisservice" + >Analysis</label><br/> + <select name="getServiceUID" + style="" id="getServiceUID"> + <tal:analyses + define=" + services python:here.portal_catalog(portal_type='AnalysisService'); + sort_on python:(('Title', 'nocase', 'asc'),); + services python:sequence.sort(services, sort_on);" + tal:repeat="service services"> + <option value="" + tal:define="this_uid python:service.UID" + tal:attributes="value this_uid; + selected python:service_uid == this_uid and 'selected' or ''" + tal:content="service/Title" + >Alcohol</option> + </tal:analyses> + </select> +</div> + +<!-- +<tal:dates + tal:define=" + now python:DateTime(); + past python:now - 60"> +<div class="field"> + <label i18n:translate="label_dateverified" + >Date verified</label><br/> + <span i18n:translate="label_from">From</span> + + <tal:define define=" + id string:getDateVerified_fromdate; + inputname id; + formname string:search; + value past; + show_hm python:False; + inputvalue python:test(value!='None', value, '');"> + <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox"> + a calendar, hopefully + </metal:use> + </tal:define> + + <span i18n:translate="label_to">to</span> + + <tal:define define=" + id string:getDateVerified_todate; + inputname id; + formname string:search; + value now; + show_hm python:False; + inputvalue python:test(value!='None', value, '');"> + <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox"> + a calendar, hopefully + </metal:use> + </tal:define> + +</div> + +</tal:dates> +--> +<input type="HIDDEN" name="getClientUID" + value="" + tal:attributes="value client_uid"/> +<input type="HIDDEN" name="portal_type" + value="Analysis"> +<input tabindex="" + class="searchButton" + type="submit" + name="submit" + value="Results" + i18n:attributes="value" + /> + +</form> +</tal:selection> +</tal:parameters> + +<tal:results condition="form_submitted"> +<form name="report_results_print" action="." method="post"> +<!-- +<input type="hidden" name="getDateVerified_fromdate" + tal:attributes="value python:request.get('getDateVerified_fromdate', None)"> +<input type="hidden" name="getDateVerified_todate" + tal:attributes="value python:request.get('getDateVerified_todate', None)"> +--> +<input type="HIDDEN" name="getClientUID" + value="" + tal:attributes="value python:request.get('getClientUID', None)"/> +<input type="HIDDEN" name="getProjectUID" + value="" + tal:attributes="value python:request.get('getProjectUID', None)"/> +<input type="HIDDEN" name="getServiceUID" + value="" + tal:attributes="value python:request.get('getServiceUID', None)"/> +<input + class="printButton" + type="submit" + name="report_results_print:method" + value="Print" + tabindex="" + i18n:attributes="value" + tal:attributes=" + tabindex tabindex/next|nothing"/> + +</form> +<metal:block use-macro="here/report_results_print/macros/body"/> +</tal:results> +</div> +</body> + +</html> + Added: tracer/skins/bika/trench_samples.pt =================================================================== --- tracer/skins/bika/trench_samples.pt (rev 0) +++ tracer/skins/bika/trench_samples.pt 2014-01-31 13:00:37 UTC (rev 3449) @@ -0,0 +1,254 @@ +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" + lang="en" + metal:use-macro="here/main_template/macros/master" + i18n:domain="bika"> + +<head> + +<metal:block fill-slot="top_slot"> +<span + tal:replace="nothing" + tal:define="dummy python:request.set('enable_border', 1)" + /> +</metal:block> + +</head> + + +<body> + +<div metal:fill-slot="main" +tal:define=" + batch_size python:int(request.get('batch_size', '100')); + dummy_a python:request.set('portal_type', 'Sample'); + dummy_b python:request.set('getTrenchUID', here.UID()); + dummy_c python:request.set('sort_on', 'getSampleID'); + dummy_d python:request.set('sort_order', 'reverse'); + dummy_e python:here.toggle_state('clientar_review_state', 'all'); + clientar_state python:request.get('clientar_review_state'); + dummy_f python:here.REQUEST.set('review_state', clientar_state); + states python:here.get_toggles('sample'); + header_state python:here.get_toggle_title(clientar_state, states)"> + + +<div metal:use-macro="here/document_actions/macros/document_actions"> +Document actions (print, sendto etc) +</div> + +<h1> +<img src="sample.png" tal:attributes="src python:here.portal_types.getTypeInfo('Sample').getIcon()"/> +<span i18n:translate="heading_samples">Samples</span> +<tal:not_all tal:condition="python:clientar_state != 'all'"> +- +<span i18n:translate="" tal:content="header_state">All</span> +</tal:not_all> +</h1> + +<div id="content-samples" + tal:define=" + all python:clientar_state == 'all'; + results python:test(all, here.portal_catalog( + portal_type='Sample', + getTrenchUID=here.UID(), + sort_on='getSampleID', + sort_order='reverse'), + container.queryCatalog()); + Batch python:modules['Products.CMFPlone'].Batch; + b_start python:request.get('b_start',0); + batch python:Batch(results, batch_size, int(b_start), orphan=1); + can_delete python: clientar_state == 'sample_due'; + can_publish python: clientar_state in ['verified', 'published']"> + +<div metal:use-macro="here/batchsize_macros/macros/batchsize" /> +<br/><br/> + +<form name="filter_result" action="" method="post" + tal:attributes="action template/getId"> +<input type="hidden" name="portal_type" value="Sample"/> +<input type="hidden" name="getTrenchUID" value="" + tal:attributes="value here/UID"/> +<input type="hidden" name="sort_on" value="getSampleID"/> +<input type="hidden" name="sort_order" value="reverse"/> +<div class="optionsToggle"> + <tal:x repeat="state states"> + <input class="noborder" type="radio" name="clientar_review_state" value="sample_due" + onclick="this.form.submit()" + tal:define="state_id state/id" + tal:attributes="value state_id; + checked python:request.get('clientar_review_state', 'sample_due') == state_id and 'checked' or None"/> + <span tal:content="state/title" i18n:translate="">Sample due</span> + </tal:x> +</div> +</form> + +<form name="samples" action="." method="post" + tal:condition="results"> + +<br/> +<input type="hidden" name="came_from" value="client_samples" /> +<div tal:define="folder_actions python:can_delete and [button for button in actions['folder_buttons'] if button['id'] == 'delete'] or []; + ar_actions python: portal.portal_actions.listFilteredActionsFor(batch[0].getObject()); + permitted_actions python:['takesample', 'dispatch', 'submit', 'publish']; + workflow_actions python:[button for button in ar_actions['workflow'] if button['id'] in permitted_actions]; + ar_action python:(folder_actions or workflow_actions) and not all"> +<table tal:condition="batch" + class="listing" + summary="sample listing" + cellpadding="0" cellspacing="0"> + +<thead> +<tr> +<th class="nosort" tal:condition="python:ar_action"><input + class="noborder" + type="checkbox" + src="select_all_icon.gif" + name="selectButton" + title="Select all items" + onClick="toggleSelect(this);" + tal:attributes="src string:$portal_url/select_all_icon.gif" + alt="Select all items" + i18n:attributes="title; alt" + /> +</th> +<th i18n:translate="label_sample">Sample</th> +<th i18n:translate="label_sampleid">Sample ID</th> +<th i18n:translate="label_eastutm">East</th> +<th i18n:translate="label_northutm">North</th> +<!-- <th i18n:translate="label_contact">Contact</th>--> +<th i18n:translate="label_sampletype">Sample Type</th> +<th i18n:translate="label_datesampled" + tal:condition="python:clientar_state != 'requested'" + >Sampled</th> +<th i18n:translate="label_datedispatched" + tal:condition="python:clientar_state not in ['requested', 'sampled']" + >Dispatched</th> +<th i18n:translate="label_datepublished" + tal:condition="python:clientar_state in ['published', 'all']" + >Published</th> +<th i18n:translate="label_status" + tal:condition="python:clientar_state == 'all'">Status</th> +</tr> +</thead> + +<tbody tal:define="getRelativeContentURL nocall:utool/getRelativeContentURL"> + +<metal:block tal:repeat="item batch"> +<tr tal:define=" + oddrow repeat/item/odd; + obj item/getObject; + item_title_or_id obj/title_or_id; + ar_state python:test(clientar_state == 'all', + wtool.getInfoFor(obj, 'review_state', ''), + clientar_state); + in_progress python:ar_state not in ['sample_due', 'published']" + tal:attributes=" + class python:test(oddrow, 'even', 'odd')" > + +<td tal:condition="python:ar_action"> +<input type="checkbox" class="noborder" name="ids:list" id="#" value="#" + tal:define="this_value python:folder_actions and obj.getId() or obj.UID()" + tal:attributes=" + value this_value; + id python: 'cb_'+obj.getId(); + checked request/ids_checked|nothing; + tabindex tabindex/next|nothing; + alt string:Select $item_title_or_id; + title string:Select $item_title_or_id"/> +<input type="hidden" name="obj_paths:list" value="#" + tal:attributes="value python:getRelativeContentURL(obj)" /> +</td> + +<tal:sample tal:define="sampletype obj/getSampleType"> +<td style="white-space:nowrap"> +<a href="" + tal:attributes="href obj/absolute_url" + tal:content="obj/getClientSampleID">S-00001</a> +<img src="dup.png" + tal:condition="python:obj.getDuplicateSample()" > +</td> +<td style="white-space:nowrap"> +<a href="" + tal:attributes="href obj/absolute_url" + tal:content="obj/getSampleID">S-00001</a> +</td> +<td tal:content="obj/getEastUTM|nothing">R001</td> +<td tal:content="obj/getNorthUTM|nothing">R001</td> +<!-- +<td tal:define="contact obj/getContact|nothing"> +<a tal:condition="contact" + href="" + tal:attributes="href contact/absolute_url" + tal:content="contact/Title|nothing">Pete Smith</a></td> +--> +<td tal:content="sampletype/Title|nothing">Sample Type</td> +</tal:sample> + +<td tal:condition="python:clientar_state != 'requested'"> +<span tal:condition="python:ar_state != 'requested'" + tal:content="python:plone_view.toLocalizedTime(obj.getDateSampled(), long_format=0)" + >2005-01-01 10:10</span> +</td> +<td tal:condition="python:clientar_state not in ['requested', 'sampled']"> +<span tal:condition="python:ar_state not in ['requested', 'sampled']" + tal:content="python:plone_view.toLocalizedTime(obj.getDateDispatched(), long_format=0)" + >2005-01-01 10:10</span> +</td> +<td tal:condition="python:clientar_state in ['published', 'all']"> +<span tal:condition="python:ar_state in 'published'" + tal:content="python:plone_view.toLocalizedTime(obj.getDatePublished(), long_format=0)" + >2005-01-01 10:10</span> +</td> +<td tal:condition="python:clientar_state == 'all'" + tal:content="python:ar_state.replace('_', ' ')"> +</td> +</tr> +</metal:block> + +</tbody> + +</table> + + + +<!-- Navigation --> +<div metal:use-macro="here/batch_macros/macros/navigation" /> + +<tal:buttons tal:repeat="button folder_actions"> +<input + class="worksheet" + type="submit" + name="" + value="" + tabindex="" + i18n:attributes="value" + tal:attributes=" + value button/name; + name button/url; + tabindex tabindex/next"/> +</tal:buttons> + + +<input type="hidden" id="workflow_action" name="workflow_action" value=""/> + +<tal:buttons tal:repeat="button workflow_actions"> +<input + class="worksheet" + type="submit" + name="batch_status_modify:method" + value="" + tabindex="" + i18n:attributes="value" + tal:attributes=" + value button/name; + tabindex tabindex/next; + ... [truncated message content] |
From: <ann...@us...> - 2013-12-05 13:08:58
|
Revision: 3448 http://sourceforge.net/p/bika/code/3448 Author: anneline Date: 2013-12-05 13:08:53 +0000 (Thu, 05 Dec 2013) Log Message: ----------- drillholes Modified Paths: -------------- tracer/Client.py tracer/DrillHole.py tracer/profiles/default/types/Client.xml tracer/skins/bika/client_drillholes.pt tracer/skins/bika/drillhole_workflow_states.py tracer/skins/bika/drillholes.pt tracer/skins/bika/project_drillholes.pt Added Paths: ----------- tracer/skins/bika/drillhole_add.cpy tracer/skins/bika/drillhole_add.cpy.metadata tracer/skins/bika/drillhole_add_form.cpt tracer/skins/bika/drillhole_add_form.cpt.metadata tracer/skins/bika/drillhole_edit.cpy tracer/skins/bika/drillhole_edit.cpy.metadata tracer/skins/bika/drillhole_edit_form.cpt tracer/skins/bika/drillhole_edit_form.cpt.metadata tracer/skins/bika/drillhole_view.pt tracer/skins/bika/validate_drillhole_add_form.vpy Modified: tracer/Client.py =================================================================== --- tracer/Client.py 2013-12-03 13:06:26 UTC (rev 3447) +++ tracer/Client.py 2013-12-05 13:08:53 UTC (rev 3448) @@ -79,14 +79,19 @@ 'action': 'string:${object_url}/client_contacts', 'permissions': (ListFolderContents,), }, + {'id': 'projects', + 'name': 'Projects', + 'action': 'string:${object_url}/client_projects', + 'permissions': (ListFolderContents,), + }, {'id': 'samples', 'name': 'Samples', 'action': 'string:${object_url}/client_samples', 'permissions': (ListFolderContents,), }, - {'id': 'projects', - 'name': 'Projects', - 'action': 'string:${object_url}/client_projects', + {'id': 'drillholes', + 'name': 'Drillholes', + 'action': 'string:${object_url}/client_drillholes', 'permissions': (ListFolderContents,), }, {'id': 'trenches', @@ -94,11 +99,6 @@ 'action': 'string:${object_url}/client_trenches', 'permissions': (ListFolderContents,), }, - {'id': 'drillholes', - 'name': 'Drillholes', - 'action': 'string:${object_url}/client_drillholes', - 'permissions': (ListFolderContents,), - }, {'id': 'addendums', 'name': 'Addendums', 'action': 'string:${object_url}/client_addendums', @@ -149,6 +149,16 @@ pairs.sort(lambda x,y:cmp(x[1],y[1])) return DisplayList(pairs) + security.declarePublic('getLoggersDisplayList') + def getLoggersDisplayList(self): + pairs = [] + for logger in self.portal_catalog( + portal_type='Personnel'): + pairs.append( (logger.UID, logger.Title) ) + # sort the list by the second item + pairs.sort(lambda x,y:cmp(x[1],y[1])) + return DisplayList(pairs) + security.declarePublic('getContactsDisplayList') def getContactsDisplayList(self): pairs = [] Modified: tracer/DrillHole.py =================================================================== --- tracer/DrillHole.py 2013-12-03 13:06:26 UTC (rev 3447) +++ tracer/DrillHole.py 2013-12-05 13:08:53 UTC (rev 3448) @@ -44,7 +44,19 @@ visible={'edit':'hidden'}, ), ), - + StringField('ClientDrillHoleID', + required=1, + index='FieldIndex', + searchable=True, + widget=StringWidget( + label='Drill Hole ID', + label_msgid='label_clientdrillholeid', + description='Drill hole identifier', + description_msgid='help_clientdrillholeid', + i18n_domain=I18N_DOMAIN, + visible={'edit':'hidden'}, + ), + ), ReferenceField('UTMSystem', required=1, vocabulary_display_path_bound=sys.maxint, @@ -72,6 +84,20 @@ i18n_domain=I18N_DOMAIN, ), ), + StringField('Elevation', + widget=StringWidget( + label='Elevation', + label_msgid='label_elevation', + i18n_domain=I18N_DOMAIN, + ), + ), + StringField('DrillType', + widget=StringWidget( + label='Drill type', + label_msgid='label_drilltype', + i18n_domain=I18N_DOMAIN, + ), + ), IntegerField('Azimuth', widget=IntegerWidget( label='Azimuth', @@ -213,6 +239,18 @@ """ Return the DrillHole ID as title """ return self.getDrillHoleID() + def setUTMSystem(self, value, **kw): + """ convert UTMSystem title to UID + """ + portal = self.portal_url.getPortalObject() + rs = self.portal_catalog( + portal_type='UTMSystem', + sortable_title=sortable_title(portal, value) + ) + value = rs[0].UID + + return self.Schema()['UTMSystem'].set(self, value) + # workflow methods # def workflow_script_request(self, state_info): Modified: tracer/profiles/default/types/Client.xml =================================================================== --- tracer/profiles/default/types/Client.xml 2013-12-03 13:06:26 UTC (rev 3447) +++ tracer/profiles/default/types/Client.xml 2013-12-05 13:08:53 UTC (rev 3448) @@ -88,15 +88,15 @@ visible="True"> <permission value="List folder contents"/> </action> - <action title="Trenches" action_id="trenches" category="object" + <action title="Drillholes" action_id="drillholes" category="object" condition_expr="" - url_expr="string:${object_url}/client_trenches" + url_expr="string:${object_url}/client_drillholes" visible="True"> <permission value="List folder contents"/> </action> - <action title="Drillholes" action_id="drillholes" category="object" + <action title="Trenches" action_id="trenches" category="object" condition_expr="" - url_expr="string:${object_url}/client_drillholes" + url_expr="string:${object_url}/client_trenches" visible="True"> <permission value="List folder contents"/> </action> Modified: tracer/skins/bika/client_drillholes.pt =================================================================== --- tracer/skins/bika/client_drillholes.pt 2013-12-03 13:06:26 UTC (rev 3447) +++ tracer/skins/bika/client_drillholes.pt 2013-12-05 13:08:53 UTC (rev 3448) @@ -21,7 +21,7 @@ tal:define=" batch_size python:int(request.get('batch_size', '15')); dummy_a python:request.set('portal_type', 'DrillHole'); - dummy_b python:request.set('getProjectUID', here.UID()); + dummy_b python:request.set('getClientUID', here.UID()); dummy_c python:request.set('sort_on', 'getDrillHoleID'); dummy_d python:request.set('sort_order', 'reverse'); dummy_e python:here.toggle_state('client_drillhole_review_state', 'all'); @@ -48,7 +48,7 @@ all python:client_drillhole_state == 'all'; results python:test(all, here.portal_catalog( portal_type='DrillHole', - getProjectUID=here.UID(), + getClientUID=here.UID(), sort_on='getDrillHoleID', sort_order='reverse'), container.queryCatalog()); @@ -65,7 +65,7 @@ <form name="filter_result" action="" method="post" tal:attributes="action template/getId"> <input type="hidden" name="portal_type" value="DrillHole"/> -<input type="hidden" name="getProjectUID" value="" +<input type="hidden" name="getClientUID" value="" tal:attributes="value here/UID"/> <input type="hidden" name="sort_on" value="getDrillHoleID"/> <input type="hidden" name="sort_order" value="reverse"/> @@ -111,19 +111,18 @@ i18n:attributes="title; alt" /> </th> -<th i18n:translate="label_drillholeid">Drill Hole ID</th> -<th i18n:translate="label_eastutm">East UTM</th> -<th i18n:translate="label_northutm">North UTM</th> -<th i18n:translate="label_clientdrillhole">Client DrillHole</th> +<th i18n:translate="label_drillhole">DrillHole</th> +<th i18n:translate="label_project">Project</th> +<th i18n:translate="label_drillholeid">DrillHole ID</th> +<th i18n:translate="label_east">East</th> +<th i18n:translate="label_north">North</th> +<th i18n:translate="label_elevation">Elevation</th> <th i18n:translate="label_datedrilled" tal:condition="python:client_drillhole_state != 'requested'" >Drilled</th> -<th i18n:translate="label_datedispatched" - tal:condition="python:client_drillhole_state not in ['requested', 'drilled']" - >Dispatched</th> -<th i18n:translate="label_datepublished" - tal:condition="python:client_drillhole_state in ['published', 'all']" - >Published</th> +<th i18n:translate="label_datelogged" + tal:condition="python:client_drillhole_state in ['logged_lith', 'logged_geotech', 'all']" + >Logged</th> <th i18n:translate="label_status" tal:condition="python:client_drillhole_state == 'all'">Status</th> </tr> @@ -157,33 +156,40 @@ tal:attributes="value python:getRelativeContentURL(obj)" /> </td> -<tal:sample tal:define="sampletype obj/getSampleType"> <td style="white-space:nowrap"> <a href="" tal:attributes="href obj/absolute_url" - tal:content="obj/getSampleID">S-00001</a> + tal:content="obj/getClientDrillHoleID">S-00001</a> </td> -<td tal:content="obj/getEastUTM|nothing">R001</td> -<td tal:content="obj/getNorthUTM|nothing">R001</td> -<td tal:content="obj/getClientSampleID | nothing">S001</td> -<td tal:content="sampletype/Title|nothing">Sample Type</td> -</tal:sample> +<td style="white-space:nowrap" + tal:define="project python:obj.aq_parent"> +<a href="" + tal:attributes="href project/absolute_url" + tal:content="project/Title">S-00001</a> +</td> +<td style="white-space:nowrap"> +<a href="" + tal:attributes="href obj/absolute_url" + tal:content="obj/getDrillHoleID">S-00001</a> +</td> +<td tal:content="obj/getEastUTM|nothing">12</td> +<td tal:content="obj/getNorthUTM|nothing">23</td> +<td tal:content="obj/getElevation|nothing">34</td> -<td tal:condition="python:client_drillhole_state != 'requested'"> -<span tal:condition="python:drillhole_state != 'requested'" - tal:content="python:plone_view.toLocalizedTime(obj.getDateSampled(), long_format=1)" - >2005-01-01 10:10</span> +<td i18n:translate="label_datedrilled" + tal:condition="python:client_drillhole_state != 'requested'"> +<span + tal:condition="python:drillhole_state != 'requested'" + tal:content="python:plone_view.toLocalizedTime(obj.getDateDrilled(), long_format=1)">2005-01-01 10:10</span> </td> -<td tal:condition="python:client_drillhole_state not in ['requested', 'sampled']"> -<span tal:condition="python:drillhole_state not in ['requested', 'sampled']" - tal:content="python:plone_view.toLocalizedTime(obj.getDateDispatched(), long_format=1)" - >2005-01-01 10:10</span> + +<td i18n:translate="label_datelogged" + tal:condition="python:client_drillhole_state in ['logged_lith', 'logged_geotech', 'all']"> +<span + tal:condition="python:drillhole_state in ['logged_lith', 'logged_geotech', 'all']" + tal:content="python:plone_view.toLocalizedTime(obj.getDateLogged(), long_format=1)">2005-01-01 10:10</span> </td> -<td tal:condition="python:client_drillhole_state in ['published', 'all']"> -<span tal:condition="python:drillhole_state in 'published'" - tal:content="python:plone_view.toLocalizedTime(obj.getDatePublished(), long_format=1)" - >2005-01-01 10:10</span> -</td> + <td tal:condition="python:client_drillhole_state == 'all'" tal:content="python:drillhole_state.replace('_', ' ')"> </td> @@ -238,3 +244,4 @@ </body> </html> + Added: tracer/skins/bika/drillhole_add.cpy =================================================================== --- tracer/skins/bika/drillhole_add.cpy (rev 0) +++ tracer/skins/bika/drillhole_add.cpy 2013-12-05 13:08:53 UTC (rev 3448) @@ -0,0 +1,38 @@ +## Controller Python Script "drillhole_add" +##bind container=container +##bind context=context +##bind namespace= +##bind script=script +##bind state=state +##bind subpath=traverse_subpath +##parameters= +##title=Add drillholes +## + +from DateTime import DateTime + +drillholes = [] + +form_items = list(context.REQUEST.form.items()) +form_items.sort() +for key, value in form_items: + if not key.startswith('drillhole'): + continue + drillhole_number = 1 + + drillhole_id = context.generateUniqueId('DrillHole') + context.invokeFactory(id=drillhole_id, type_name='DrillHole') + + drillhole = context[drillhole_id] + value = value.copy() + drillhole.edit( + DrillHoleID=drillhole_id, + **dict(value) + ) + +from Products.CMFPlone import transaction_note +print_drillholes = ', '.join(drillholes) +transaction_note('%s created successfully' % print_drillholes) + +message=context.translate('message_drillhole_created', default='DrillHoles ${DRILLHOLES} were successfully created.', mapping={'DRILLHOLES': print_drillholes}, domain='bika') +return state.set(portal_status_message=message) Added: tracer/skins/bika/drillhole_add.cpy.metadata =================================================================== --- tracer/skins/bika/drillhole_add.cpy.metadata (rev 0) +++ tracer/skins/bika/drillhole_add.cpy.metadata 2013-12-05 13:08:53 UTC (rev 3448) @@ -0,0 +1,7 @@ +[default] +title=Add trenches +proxy=Manager,Anonymous + +[actions] +action.failure=traverse_to:string:client_trenches +action.success=traverse_to:string:client_trenches Added: tracer/skins/bika/drillhole_add_form.cpt =================================================================== --- tracer/skins/bika/drillhole_add_form.cpt (rev 0) +++ tracer/skins/bika/drillhole_add_form.cpt 2013-12-05 13:08:53 UTC (rev 3448) @@ -0,0 +1,367 @@ +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" + lang="en" + xmlns:tal="http://xml.zope.org/namespaces/tal" + xmlns:metal="http://xml.zope.org/namespaces/metal" + xmlns:i18n="http://xml.zope.org/namespaces/i18n" + metal:use-macro="here/main_template/macros/master" + i18n:domain="bika"> + +<head> +</head> + +<body> + +<div metal:fill-slot="main" + tal:define=" + errors options/state/getErrors; + startup_directory here/absolute_url; + manage_bika python:mtool.checkPermission('BIKA: Manage bika', here); + "> + +<tal:error repeat="error python:errors.keys()"> +<tal:x define="column_nr python:error.split('.')[0]; + field_name python:error.split('.')[1]; + message python:errors[error]"> +<p class="portalMessage" i18n:translate="drillhole_form_input_required"> +Column +<span tal:content="column_nr" i18n:name="column_nr">1</span>. +<span tal:content="field_name" i18n:name="field_name">Analyses</span>: +<span tal:content="message" i18n:name="message" + >Input required but no input is given.</span> </p> +</tal:x> +</tal:error> + +<div metal:use-macro="here/document_actions/macros/document_actions"> + Document actions (print, sendto etc) +</div> + +<h1> + <img src="drillhole.png" tal:attributes="src python:here.portal_types.getTypeInfo('DrillHole').getIcon()"/> + <span tal:omit-tag="" i18n:translate="heading_request_new_drillholes" + >Request new drillholes</span> +</h1> + +<script type="text/javascript" src="actb.js"></script> +<script type="text/javascript" src="dhtml.js"></script> +<script type="text/javascript" src="sample_form.js"></script> +<script type="text/javascript" src="sample_add_form.js"></script> +<script type="text/javascript" src="utils.js"></script> + + +<form name="drillhole_add_form" method="POST" action="template/getId" + tal:attributes="action template/getId" autocomplete="off"> + +<input type="hidden" name="form.submitted" value="1" /> + +<br/> + +<table + summary="DrillHole form" + class="sample" + cellpadding="0" cellspacing="0" + tal:define="col_count python:request.get('col_count', 4)"> + +<thead> + +<tr> +<th style="white-space:nowrap"> +<span id="" i18n:translate="label_clientdrillholeid">Client drill hole ID</span> + <span class="fieldRequired"/> +</th> +<td class="center"> +<input type="button" value='' class="copyButton" + onClick="" id="copyClientTidButton" + tal:attributes=" + onClick string:javascript:copyValue('drillhole', 'ClientDrillHoleID', '${col_count}'); + tabindex python:100" /> +</td> +<tal:clienttid repeat="column python:range(col_count)"> +<td align="center"> +<input size="10" + name="drillhole.1.ClientDrillHoleID:ignore_empty:record" + tal:define="input_name string:drillhole.${column}.ClientDrillHoleID" + tal:attributes=" + id input_name; + name string:${input_name}:ignore_empty:record; + value python:request.get(input_name, ''); + tabindex column"/> +</td> +</tal:clienttid> +</tr> + +<tr> +<th> +<span id="" i18n:translate="label_utmsystem">UTM system</span> +</th> +<td class="center"> +<input type="button" value='' class="copyButton" + onClick="" id="copyUTMSystemButton" + tal:attributes=" + onClick string:javascript:copyValue('drillhole', 'UTMSystem', '${col_count}'); + tabindex python:100" /> +</td> +<tal:utmsystem repeat="column python:range(col_count)"> +<td> + +<input size="10" type='text' onfocus='' value='' + tal:define="input_name string:drillhole.${column}.UTMSystem" + tal:attributes=" + id input_name; + name string:${input_name}:ignore_empty:record; + value python:request.get(input_name, ''); + onfocus string:actb(this, event, utmsystemarray); + tabindex column"/> +</td> +</tal:utmsystem> +</tr> + +<tr> +<th> +<span id="" i18n:translate="label_east">East</span> +</th> +<td class="center"> +<input type="button" value='' class="copyButton" + onClick="" id="copyEastUTM" + tal:attributes=" + onClick string:javascript:copyValue('drillhole', 'EastUTM', '${col_count}'); + tabindex python:100" /> +</td> +<tal:easting repeat="column python:range(col_count)"> +<td> +<input size="10" type='text' onfocus='' value='' + tal:define="input_name string:drillhole.${column}.EastUTM" + tal:attributes=" + id input_name; + name string:${input_name}:ignore_empty:record; + value python:request.get(input_name, ''); + tabindex column"/> +</td> +</tal:easting> +</tr> + +<tr> +<th> +<span id="" i18n:translate="label_north">North</span> +</th> +<td class="center"> +<input type="button" value='' class="copyButton" + onClick="" id="copyNorthUTM" + tal:attributes=" + onClick string:javascript:copyValue('drillhole', 'NorthUTM', '${col_count}'); + tabindex python:100" /> +</td> +<tal:northing repeat="column python:range(col_count)"> +<td> +<input size="10" type='text' onfocus='' value='' + tal:define="input_name string:drillhole.${column}.NorthUTM" + tal:attributes=" + id input_name; + name string:${input_name}:ignore_empty:record; + value python:request.get(input_name, ''); + tabindex column"/> +</td> +</tal:northing> +</tr> + +<tr> +<th> +<span id="" i18n:translate="label_elevation">Elevation</span> +</th> +<td class="center"> +<input type="button" value='' class="copyButton" + onClick="" id="copyElevation" + tal:attributes=" + onClick string:javascript:copyValue('drillhole', 'Elevation', '${col_count}'); + tabindex python:100" /> +</td> +<tal:elevation repeat="column python:range(col_count)"> +<td> +<input size="10" type='text' onfocus='' value='' + tal:define="input_name string:drillhole.${column}.Elevation" + tal:attributes=" + id input_name; + name string:${input_name}:ignore_empty:record; + value python:request.get(input_name, ''); + tabindex column"/> +</td> +</tal:elevation> +</tr> + +<tr> +<th> +<span id="" i18n:translate="label_azimuth">Azimuth</span> +</th> +<td class="center"> +<input type="button" value='' class="copyButton" + onClick="" id="copyAzimuth" + tal:attributes=" + onClick string:javascript:copyValue('drillhole', 'Azimuth', '${col_count}'); + tabindex python:100" /> +</td> +<tal:azimuth repeat="column python:range(col_count)"> +<td> +<input size="10" type='text' onfocus='' value='' + tal:define="input_name string:drillhole.${column}.Azimuth" + tal:attributes=" + id input_name; + name string:${input_name}:ignore_empty:record; + value python:request.get(input_name, ''); + tabindex column"/> +</td> +</tal:azimuth> +</tr> + +<tr> +<th> +<span id="" i18n:translate="label_Dip">Dip</span> +</th> +<td class="center"> +<input type="button" value='' class="copyButton" + onClick="" id="copyDip" + tal:attributes=" + onClick string:javascript:copyValue('drillhole', 'Dip', '${col_count}'); + tabindex python:100" /> +</td> +<tal:dip repeat="column python:range(col_count)"> +<td> +<input size="10" type='text' onfocus='' value='' + tal:define="input_name string:drillhole.${column}.Dip" + tal:attributes=" + id input_name; + name string:${input_name}:ignore_empty:record; + value python:request.get(input_name, ''); + tabindex column"/> +</td> +</tal:dip> +</tr> + +<tr> +<th> +<span id="" i18n:translate="label_EOH">EOH</span> +</th> +<td class="center"> +<input type="button" value='' class="copyButton" + onClick="" id="copyEOH" + tal:attributes=" + onClick string:javascript:copyValue('drillhole', 'EOH', '${col_count}'); + tabindex python:100" /> +</td> +<tal:eoh repeat="column python:range(col_count)"> +<td> +<input size="10" type='text' onfocus='' value='' + tal:define="input_name string:drillhole.${column}.EOH" + tal:attributes=" + id input_name; + name string:${input_name}:ignore_empty:record; + value python:request.get(input_name, ''); + tabindex column"/> +</td> +</tal:eoh> +</tr> + +<tr> +<tr> +<th> +<span id="" i18n:translate="label_WaterTable">Water table</span> +</th> +<td class="center"> +<input type="button" value='' class="copyButton" + onClick="" id="copyWaterTable" + tal:attributes=" + onClick string:javascript:copyValue('drillhole', 'WaterTable', '${col_count}'); + tabindex python:100" /> +</td> +<tal:watertable repeat="column python:range(col_count)"> +<td> +<input size="10" type='text' onfocus='' value='' + tal:define="input_name string:drillhole.${column}.WaterTable" + tal:attributes=" + id input_name; + name string:${input_name}:ignore_empty:record; + value python:request.get(input_name, ''); + tabindex column"/> +</td> +</tal:watertable> +</tr> + +<tr> +<th> +<span id="" i18n:translate="label_DrillType">Drill Type</span> +</th> +<td class="center"> +<input type="button" value='' class="copyButton" + onClick="" id="copyDrillType" + tal:attributes=" + onClick string:javascript:copyValue('drillhole', 'DrillType', '${col_count}'); + tabindex python:100" /> +</td> +<tal:drilltype repeat="column python:range(col_count)"> +<td> +<input size="10" type='text' onfocus='' value='' + tal:define="input_name string:drillhole.${column}.DrillType" + tal:attributes=" + id input_name; + name string:${input_name}:ignore_empty:record; + value python:request.get(input_name, ''); + tabindex column"/> +</td> +</tal:drilltype> +</tr> + +<tr> +<th> +<span id="" i18n:translate="label_LoggedBy">Logged by</span> +</th> +<td class="center"> +</td> +<tal:loggedby + tal:define="loggers here/getLoggersDisplayList" + tal:repeat="column python:range(col_count)"> +<td style="white-space:nowrap;" class="contact"> + <select + tal:define="input_name string:drillhole.${column}.LoggedBy" + tal:attributes=" + id input_name; + name string:${input_name}:ignore_empty:record; + value python:request.get(input_name, ''); + tabindex column"> + + <option></option> + <tal:item + tal:define=" + vocab loggers" + tal:repeat="item vocab"> + <option + tal:define=" + no_ref python:item == '';" + tal:attributes="value item" + tal:content="python:here.translate(vocab.getMsgId(item), default=vocab.getValue(item))"></option> + </tal:item> + + </select> +</td> +</tal:loggedby> +</tr> + +</thead> + +</table> +<br/> +<input class="context" + type="submit" + value="Submit"/> + +<br/> +<br/> + +</form> + +</div> + +</body> + +</html> + + + + Added: tracer/skins/bika/drillhole_add_form.cpt.metadata =================================================================== --- tracer/skins/bika/drillhole_add_form.cpt.metadata (rev 0) +++ tracer/skins/bika/drillhole_add_form.cpt.metadata 2013-12-05 13:08:53 UTC (rev 3448) @@ -0,0 +1,11 @@ +[default] +title=Add drillholes + +[validators] +validators..category = +validators = validate_drillhole_add_form + +[actions] +action.success..category = traverse_to:string:drillhole_add_form +action.success = traverse_to:string:drillhole_add +action.failure = traverse_to:string:drillhole_add_form Added: tracer/skins/bika/drillhole_edit.cpy =================================================================== --- tracer/skins/bika/drillhole_edit.cpy (rev 0) +++ tracer/skins/bika/drillhole_edit.cpy 2013-12-05 13:08:53 UTC (rev 3448) @@ -0,0 +1,88 @@ +## Controller Python Script "trench_edit" +##bind container=container +##bind context=context +##bind namespace= +##bind script=script +##bind state=state +##bind subpath=traverse_subpath +##parameters= +##title=Edit trench +## + +from DateTime import DateTime + +trench = context +request = context.REQUEST +if request.has_key('DateSetOut'): + datesetout= request['DateSetOut'] +else: + datesetout = None +if request.has_key('SetOutBy'): + setoutby= request['SetOutBy'] +else: + setoutby = None +if request.has_key('DateExcavated'): + dateexcavated= request['DateExcavated'] +else: + dateexcavated = None +if request.has_key('DateMarkedOut'): + datemarkedout= request['DateMarkedOut'] +else: + datemarkedout = None +if request.has_key('DateProfiled'): + dateprofiled= request['DateProfiled'] +else: + dateprofiled = None +if request.has_key('DateWorked'): + dateworked= request['DateWorked'] +else: + dateworked = None +if request.has_key('DateBackfilled'): + datebackfilled= request['DateBackfilled'] +else: + datebackfilled = None +if request.has_key('DateMapped'): + datemapped= request['DateMapped'] +else: + datemapped = None +if request.has_key('MappedBy'): + mappedby= request['MappedBy'] +else: + mappedby = None +if request.has_key('DateSampled'): + datesampled= request['DateSampled'] +else: + datesampled = None +if request.has_key('DatePhotographed'): + datephotographed= request['DatePhotographed'] +else: + datephotographed = None +trench.edit( + UTMSystem=context.REQUEST.UTMSystem, + StartEasting=context.REQUEST.StartEasting, + StartNorthing=context.REQUEST.StartNorthing, + EndEasting=context.REQUEST.EndEasting, + EndNorthing=context.REQUEST.EndNorthing, + Length=context.REQUEST.Length, + SamplingDirection=context.REQUEST.SamplingDirection, + DatePlanned=context.REQUEST.DatePlanned, + DateSetOut=datesetout, + SetOutBy=setoutby, + DateExcavated=dateexcavated, + DateMarkedOut=datemarkedout, + DateProfiled=dateprofiled, + DateWorked=dateworked, + DateBackfilled=datebackfilled, + DateMapped=datemapped, + MappedBy=mappedby, + DateSampled=datesampled, + DatePhotographed=datephotographed, + Notes=context.REQUEST.Notes, + ) + + +from Products.CMFPlone import transaction_note +transaction_note('%s modified successfully' % trench.getTrenchID()) + +message=context.translate('message_trench_modified', default='Trench ${TRENCH} successfully modified.', mapping={'TRENCH': trench.getClientTrenchID()}, domain='bika') +return state.set(portal_status_message=message) Added: tracer/skins/bika/drillhole_edit.cpy.metadata =================================================================== --- tracer/skins/bika/drillhole_edit.cpy.metadata (rev 0) +++ tracer/skins/bika/drillhole_edit.cpy.metadata 2013-12-05 13:08:53 UTC (rev 3448) @@ -0,0 +1,7 @@ +[default] +title=Edit analysis requests +proxy=Manager,Anonymous + +[actions] +action.failure=redirect_to:string:${object/absolute_url} +action.success=redirect_to:string:${object/absolute_url} Added: tracer/skins/bika/drillhole_edit_form.cpt =================================================================== --- tracer/skins/bika/drillhole_edit_form.cpt (rev 0) +++ tracer/skins/bika/drillhole_edit_form.cpt 2013-12-05 13:08:53 UTC (rev 3448) @@ -0,0 +1,464 @@ +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" + lang="en" + metal:use-macro="here/main_template/macros/master" + i18n:domain="bika"> + +<head><title></title></head> + +<body> + <metal:calendar fill-slot="javascript_head_slot"> + <!-- ECMAScript calendar --> + <style type="text/css" media="all" + tal:content="string:@import url($portal_url/jscalendar/calendar-system.css);"></style> + <script type="text/javascript" + tal:attributes="src string:$portal_url/jscalendar/mycalendar_stripped.js"></script> + <script type="text/javascript" charset="iso-8859-1" + tal:condition="exists: portal/jscalendar/calendar-en.js" + tal:attributes="src string:$portal_url/jscalendar/calendar-en.js"></script> + </metal:calendar> + +<div metal:fill-slot="main" + tal:define=" + errors options/state/getErrors; + startup_directory here/absolute_url; + manage_bika python:mtool.checkPermission('BIKA: Manage bika', here); + trench_state python:wtool.getInfoFor(here, 'review_state', ''); + states_array python:here.get_states('trench'); + utmsystems python:here.portal_catalog( + portal_type='UTMSystem', + sort_on='sortable_title'); + people python:here.portal_catalog( + portal_type='Personnel', + sort_on='sortable_title'); + dateplanned python:here.getDatePlanned() or None ; + planned_year python:dateplanned and dateplanned.year() or None; + "> +<tal:error repeat="error python:errors.keys()"> +<tal:x define="field_name python:error; + message python:errors[error]"> +<p class="portalMessage"> +<span tal:content="field_name">Analyses</span>: +<span tal:content="message">Input required but no input is given.</span> </p> +</tal:x> +</tal:error> + +<div metal:use-macro="here/document_actions/macros/document_actions"> +Document actions (print, sendto etc) +</div> + +<h1> +<tal:block replace="structure python:getattr(here, here.getIcon(1))"/> +<span tal:content="here/title_or_id" tal:omit-tag="">Directory Id</span> +</h1> + +<script type="text/javascript" src="dhtml.js"></script> +<script type="text/javascript" src="actb.js"></script> +<script type="text/javascript" src="sample_form.js"></script> +<script type="text/javascript" src="utils.js"></script> + +<form name="edit_form" + method="post" + enctype="multipart/form-data" + action="" + tal:attributes="action python:here.absolute_url()+'/'+template.id" + autocomplete="off"> + +<input type="hidden" name="form.submitted" value="1" /> +<input type="hidden" name="came_from" value="Edit" /> +<input type="hidden" name="TrenchUID" value="" + tal:attributes="value here/UID" /> + +<br/> + +<table + summary="Trench form" + class="sample" + cellpadding="0" cellspacing="0"> + +<thead> +<tr> +<th id="" i18n:translate="label_trench">Trench</th> +<td class="left" colspan="3" + id="" tal:content="here/getClientTrenchID">T-00001</td> +</tr> + +<tr> +<th + i18n:translate="label_trenchid">ID +</th> +<td class="left"> +<span tal:content="here/getTrenchID">T-001</span> +</td> +<th style="white-space:nowrap"> +<span i18n:translate="label_utmsystem">UTM system</span> + <span class="fieldRequired"/> +</th> +<td class="left"> + <select name="UTMSystem" id="utmsystem" + tal:attributes="tabindex tabindex/next;"> + + <option></option> + <tal:item + tal:define="this_system python:here.getUTMSystem() and here.getUTMSystem().Title() or None;" + tal:repeat="system utmsystems"> + <option selected="selected" + tal:define=" + this_selected python:test((system.Title == this_system), 'selected', '')" + tal:attributes="value system/Title; + selected this_selected" + tal:content="system/Title"></option> + </tal:item> + + </select> +</td> + +</tr> + +<tr> +<th style="white-space:nowrap"> +<span i18n:translate="label_starteasting">Start easting </span> + <span class="fieldRequired"/> +</th> +<td class="left"> +<input size="10" type='text' onfocus='' value='' name="StartEasting" + tal:attributes=" + value python:request.get('StartEasting', here.getStartEasting()); + tabindex tabindex/next"/> +</td> +<th style="white-space:nowrap"> +<span i18n:translate="label_startnorthing">Start northing</span> + <span class="fieldRequired"/> +</th> +<td class="left"> +<input size="10" type='text' onfocus='' value='' name="StartNorthing" + tal:attributes=" + value python:request.get('StartNorthing', here.getStartNorthing()); + tabindex tabindex/next"/> +</td> + +</tr> + +<tr> +<th style="white-space:nowrap"> +<span i18n:translate="label_endeasting">End easting </span> + <span class="fieldRequired"/> +</th> +<td class="left"> +<input size="10" type='text' onfocus='' value='' name="EndEasting" + tal:attributes=" + value python:request.get('EndEasting', here.getEndEasting()); + tabindex tabindex/next"/> +</td> +<th style="white-space:nowrap"> +<span i18n:translate="label_endnorthing">End northing</span> + <span class="fieldRequired"/> +</th> +<td class="left"> +<input size="10" type='text' onfocus='' value='' name="EndNorthing" + tal:attributes=" + value python:request.get('EndNorthing', here.getEndNorthing()); + tabindex tabindex/next"/> +</td> +</tr> + +<tr> +<th style="white-space:nowrap"> +<span i18n:translate="label_length">Length</span> + <span class="fieldRequired"/> +</th> +<td class="left"> +<input size="10" type='text' onfocus='' value='' name="Length" + tal:attributes=" + value python:request.get('Length', here.getLength()); + tabindex tabindex/next"/> +</td> +<th style="white-space:nowrap"> +<span i18n:translate="label_samplingdirection">Sampling direction</span> + <span class="fieldRequired"/> +</th> +<td class="left"> +<input size="10" type='text' onfocus='' value='' name="SamplingDirection" + tal:attributes=" + value python:request.get('SamplingDirection', here.getSamplingDirection()); + tabindex tabindex/next"/> +</td> +</tr> + +<tr> +<th + i18n:translate="label_status">Status +</th> +<td class="left" colspan="3" + tal:content="trench_state">Planned</td> + +</tr> +<tr> +<th i18n:translate="label_dateplanned">Planned</th> +<td class="left" colspan="3"> + <tal:define define=" + id string:DatePlanned; + inputname id; + formname string:search; + value python:request.get('DatePlanned', here.getDatePlanned()); + show_hm python:False; + starting_year planned_year; + inputvalue python:test(value!='None', value, '');"> + <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox|here/calendar_slot/macros/calendarDatePickerBox"> + a calendar, hopefully + </metal:use> + </tal:define> +</td> +</tr> + +<tal:planned tal:condition="python:states_array.index(trench_state) >= states_array.index('planned')"> +<tr> + +<th i18n:translate="label_datesetout">Set Out</th> +<td class="left" colspan="2" style="white-space:nowrap"> + <tal:define define=" + id string:DateSetOut; + inputname id; + formname string:search; + value python:request.get('DateSetOut', here.getDateSetOut()); + show_hm python:False; + starting_year planned_year; + inputvalue python:test(value!='None', value, '');"> + <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox|here/calendar_slot/macros/calendarDatePickerBox"> + a calendar, hopefully + </metal:use> + </tal:define> +</td> +<td> + <span i18n:translate="label_by">By:</span> + <select name="SetOutBy" id="setoutby" + tal:attributes="tabindex tabindex/next;"> + + <option></option> + <tal:item + tal:define="this_person python:request.get('SetOutBy', + (here.getSetOutBy() and here.getSetOutBy().UID() or None));" + tal:repeat="person people"> + <option selected="selected" + tal:define=" + this_selected python:test((person.UID == this_person), 'selected', '')" + tal:attributes="value person/UID; + selected this_selected" + tal:content="person/Title"></option> + </tal:item> + + </select> +</td> +</tr> +</tal:planned> + +<tal:excavated tal:condition="python:states_array.index(trench_state) >= states_array.index('excavated')"> +<tr> +<th i18n:translate="label_dateexcavated">Excavated</th> +<td class="left" colspan="3"> + <tal:define define=" + id string:DateExcavated; + inputname id; + formname string:search; + value python:request.get('DateExcavated', here.getDateExcavated()); + show_hm python:False; + starting_year planned_year; + inputvalue python:test(value!='None', value, '');"> + <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox|here/calendar_slot/macros/calendarDatePickerBox"> + a calendar, hopefully + </metal:use> + </tal:define> +</td> +</tr> + +<tr> +<th i18n:translate="label_datemarkedout">Marked Out</th> +<td class="left" colspan="3"> + <tal:define define=" + id string:DateMarkedOut; + inputname id; + formname string:search; + value python:request.get('DateMarkedOut', here.getDateMarkedOut()); + show_hm python:False; + starting_year planned_year; + inputvalue python:test(value!='None', value, '');"> + <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox|here/calendar_slot/macros/calendarDatePickerBox"> + a calendar, hopefully + </metal:use> + </tal:define> +</td> +</tr> + +<tr> + +<th i18n:translate="label_dateprofiled">Profiled</th> +<td class="left" colspan="3"> + <tal:define define=" + id string:DateProfiled; + inputname id; + formname string:search; + value python:request.get('DateProfiled', here.getDateProfiled()); + show_hm python:False; + starting_year planned_year; + inputvalue python:test(value!='None', value, '');"> + <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox|here/calendar_slot/macros/calendarDatePickerBox"> + a calendar, hopefully + </metal:use> + </tal:define> +</td> +</tr> + +<tr> + +<th i18n:translate="label_datemapped">Mapped</th> +<td class="left" colspan="2" style="white-space:nowrap"> + <tal:define define=" + id string:DateMapped; + inputname id; + formname string:search; + value python:request.get('DateMapped', here.getDateMapped()); + show_hm python:False; + starting_year planned_year; + inputvalue python:test(value!='None', value, '');"> + <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox|here/calendar_slot/macros/calendarDatePickerBox"> + a calendar, hopefully + </metal:use> + </tal:define> +</td> +<td > +<span i18n:translate="label_by">By:</span> + <select name="MappedBy" id="mappedby" + tal:attributes="tabindex tabindex/next;"> + + <option></option> + <tal:item + tal:define="this_person python:request.get('MappedBy', + (here.getMappedBy() and here.getMappedBy().UID() or None));" + tal:repeat="person people"> + <option selected="selected" + tal:define=" + this_selected python:test((person.UID == this_person), 'selected', '')" + tal:attributes="value person/UID; + selected this_selected" + tal:content="person/Title"></option> + </tal:item> + + </select> +</td> +</tr> + +<tr> + +<th i18n:translate="label_datesampled">Sampled</th> +<td class="left" colspan="3"> + <tal:define define=" + id string:DateSampled; + inputname id; + formname string:search; + value python:request.get('DateSampled', here.getDateSampled()); + show_hm python:False; + starting_year planned_year; + inputvalue python:test(value!='None', value, '');"> + <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox|here/calendar_slot/macros/calendarDatePickerBox"> + a calendar, hopefully + </metal:use> + </tal:define> +</td> +</tr> + +<tr> +<th i18n:translate="label_datephotographed">Photographed</th> +<td class="left" colspan="3"> + <tal:define define=" + id string:DatePhotographed; + inputname id; + formname string:search; + value python:request.get('DatePhotographed', here.getDatePhotographed()); + show_hm python:False; + starting_year planned_year; + inputvalue python:test(value!='None', value, '');"> + <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox|here/calendar_slot/macros/calendarDatePickerBox"> + a calendar, hopefully + </metal:use> + </tal:define> +</td> +</tr> +</tal:excavated> + +<tal:worked> +<tr tal:condition="python:states_array.index(trench_state) >= states_array.index('worked')"> +<th i18n:translate="label_dateworked">Worked</th> +<td class="left" colspan="3"> + <tal:define define=" + id string:DateWorked; + inputname id; + formname string:search; + value python:request.get('DateWorked', here.getDateWorked()); + show_hm python:False; + starting_year planned_year; + inputvalue python:test(value!='None', value, '');"> + <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox|here/calendar_slot/macros/calendarDatePickerBox"> + a calendar, hopefully + </metal:use> + </tal:define> +</td> +</tr> +</tal:worked> + +<tal:backfilled> +<tr tal:condition="python:states_array.index(trench_state) >= states_array.index('backfilled')"> +<th i18n:translate="label_datebackfilled">Backfilled</th> +<td class="left" colspan="3"> + <tal:define define=" + id string:DateBackfilled; + inputname id; + formname string:search; + value python:request.get('DateBackfilled', here.getDateBackfilled()); + show_hm python:False; + starting_year planned_year; + inputvalue python:test(value!='None', value, '');"> + <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox|here/calendar_slot/macros/calendarDatePickerBox"> + a calendar, hopefully + </metal:use> + </tal:define> +</td> +</tr> +</tal:backfilled> +</thead> + +</table> + +<label i18n:translate="label_remarks">Remarks</label> +<textarea name="Notes" + tal:content="request/Notes|here/getNotes"></textarea> +<br/> +<br/> +<input class="context" + tabindex="" + type="submit" + name="form_submit" + value="Save" + i18n:attributes="value" + tal:attributes="tabindex tabindex/next" + /> +<input class="standalone" + tabindex="" + type="submit" + name="form.button.cancel" + value="Cancel" + i18n:attributes="value" + tal:attributes="tabindex tabindex/next" + /> + +<br> +<br> + +</form> + +</div> + +</body> + +</html> + + + Added: tracer/skins/bika/drillhole_edit_form.cpt.metadata =================================================================== --- tracer/skins/bika/drillhole_edit_form.cpt.metadata (rev 0) +++ tracer/skins/bika/drillhole_edit_form.cpt.metadata 2013-12-05 13:08:53 UTC (rev 3448) @@ -0,0 +1,12 @@ +[default] +title=Edit trench + +[validators] +validators..category = +validators = validate_trench_edit_form + +[actions] +action.success..category = traverse_to:string:trench_edit_form +action.success = traverse_to:string:trench_edit +action.failure = traverse_to:string:trench_edit_form + Added: tracer/skins/bika/drillhole_view.pt =================================================================== --- tracer/skins/bika/drillhole_view.pt (rev 0) +++ tracer/skins/bika/drillhole_view.pt 2013-12-05 13:08:53 UTC (rev 3448) @@ -0,0 +1,275 @@ +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" + lang="en" + xmlns:tal="http://xml.zope.org/namespaces/tal" + xmlns:metal="http://xml.zope.org/namespaces/metal" + xmlns:i18n="http://xml.zope.org/namespaces/i18n" + i18n:domain="bika"> + +<head><title></title></head> + +<metal:header_macro define-macro="header"> +<div metal:use-macro="here/document_actions/macros/document_actions"> +Document actions (print, sendto etc) +</div> +<h1> +<tal:block replace="structure python:getattr(here, here.getIcon(1))"/> +<span tal:content="title_string | here/title_or_id" /> +</h1> +<tal:has_document_byline tal:condition="exists:here/document_byline"> +<div metal:use-macro="here/document_byline/macros/byline"> +Get the byline - contains details about author and modification date. +</div> +</tal:has_document_byline> +</metal:header_macro> + +<body> + +<metal:body_macro metal:define-macro="body" + tal:define=" + client python:here.aq_parent.aq_parent; + client_uid client/UID; + states_array python:here.get_states('drillhole'); + utmsystem here/getUTMSystem; + drillhole_state python:wtool.getInfoFor(here, 'review_state', ''); + now python:DateTime(); + "> + +<script type="text/javascript" src="utils.js"></script> + +<form name="edit_form" + method="post" + enctype="multipart/form-data" + action="" + tal:attributes="action python:here.absolute_url()+'/'+template.id" + autocomplete="off"> + + +<table + summary="Sample view" + class="sample" + cellpadding="0" cellspacing="0"> + +<thead> + + +<tr> +<th + i18n:translate="label_drillhole">DrillHole</th> +<td class="left" colspan="3" + tal:content="here/getClientDrillHoleID|nothing">123</td> +</tr> + +<tr> +<th + i18n:translate="label_drillholeid">ID +</th> +<td class="left"> +<span tal:content="here/getDrillHoleID">D-001</span> +</td> +<th + i18n:translate="label_utmsystem">UTM system +</th> +<td class="left"> +<span tal:content="utmsystem/Title|nothing">UTM1999</span> +</td> + +</tr> + +<tr> +<th i18n:translate="label_east">East</th> +<td class="left" + tal:content="here/getEastUTM|nothing">123</td> +<th i18n:translate="label_north">North</th> +<td class="left" + tal:content="here/getNorthUTM|nothing">123</td> + + +</tr> + +<tr> +<th i18n:translate="label_elevation">Elevation</th> +<td class="left" + tal:content="here/getElevation|nothing">123</td> + +<th i18n:translate="label_drilltype">Drill type</th> +<td class="left" + tal:content="here/getDrillType|nothing">123</td> +</tr> + +<tr> +<th i18n:translate="label_azimuth">Azimuth</th> +<td class="left" + tal:content="here/getAzimuth|nothing">123</td> + +<th i18n:translate="label_dip">Dip</th> +<td class="left" + tal:content="here/getDip|nothing">123</td> +</tr> + +<tr> +<th i18n:translate="label_EOH">EOH</th> +<td class="left" + tal:content="here/getEOH|nothing">123</td> + +<th i18n:translate="label_watertable">Water table</th> +<td class="left" + tal:content="here/getWaterTable|nothing">123</td> +</tr> + +<tr> +<th + i18n:translate="label_status">Status +</th> +<td class="left" + tal:content="drillhole_state">Planned</td> +<th i18n:translate="label_datecreated">Created</th> + +<td class="left" > +<span + tal:define="date_created here/getDateCreated" + tal:condition="date_created" + tal:content="python:plone_view.toLocalizedTime(date_created, long_format=0)" + >2005-01-01 10:00 +</span></td> +</tr> + +<tr tal:condition="python:states_array.index(drillhole_state) > states_array.index('requested')"> +<th i18n:translate="label_datedrilled">Drilled</th> +<td class="left"> +<span + tal:define="date_drilled here/getDrilled" + tal:condition="date_drilled" + tal:content="python:plone_view.toLocalizedTime(date_drilled, long_format=0)" + >2005-01-01</span> +</td> +</tr> + +<tr tal:define="date_logged here/getDateLogged" + tal:condition="date_logged"> +<th i18n:translate="label_datelogged">Logged</th> +<td class="left" colspan="3"> +<span tal:content="python:plone_view.toLocalizedTime(date_logged, long_format=0)" + >2005-01-01</span> + <span i18n:translate="label_by">By:</span> + <span + tal:define="this_person python:here.getLoggedBy() and here.getLoggedBy().Title() or None;" + tal:content="this_person"/> +</td> +</tr> + +<!--<tr tal:condition="python:states_array.index(drillhole_state) > states_array.index('planned')"> +<th i18n:translate="label_dateexcavated">Excavated</th> +<td class="left" colspan="3"> +<span + tal:define="date_excavated here/getDateExcavated" + tal:condition="date_excavated" + tal:content="python:plone_view.toLocalizedTime(date_excavated, long_format=0)" + >2005-01-01</span> +</td> +</tr> + +<tr tal:condition="python:states_array.index(drillhole_state) > states_array.index('excavated')"> + +<th i18n:translate="label_datemarkedout">Marked Out</th> +<td class="left" colspan="3"> +<span + tal:define="date_markedout here/getDateMarkedOut" + tal:condition="date_markedout" + tal:content="python:plone_view.toLocalizedTime(date_markedout, long_format=0)" + >2005-01-01</span> +</td> +</tr> + +<tr tal:condition="python:states_array.index(drillhole_state) > states_array.index('excavated')"> +<th i18n:translate="label_dateprofiled">Profiled</th> +<td class="left" colspan="3"> +<span + tal:define="date_profiled here/getDateProfiled" + tal:condition="date_profiled" + tal:content="python:plone_view.toLocalizedTime(date_profiled, long_format=0)" + >2005-01-01</span> +</td> +</tr> + +<tr tal:condition="python:states_array.index(drillhole_state) > states_array.index('excavated')"> +<th i18n:translate="label_datemapped">Mapped</th> +<td class="left" colspan="3"> +<span + tal:define="date_mapped here/getDateMapped" + tal:condition="date_mapped" + tal:content="python:plone_view.toLocalizedTime(date_mapped, long_format=0)" + >2005-01-01</span> +  + <span i18n:translate="label_by">By:</span> + <span + tal:define="this_person python:here.getMappedBy() and here.getMappedBy().Title() or None;" + tal:content="this_person" + >By:</span> +</td> +</tr> + +<tr tal:condition="python:states_array.index(drillhole_state) > states_array.index('excavated')"> +<th i18n:translate="label_datesampled">Sampled</th> +<td class="left" colspan="3"> +<span + tal:define="date_sampled here/getDateSampled" + tal:condition="date_sampled" + tal:content="python:plone_view.toLocalizedTime(date_sampled, long_format=0)" + >2005-01-01</span> +</td> +</tr> + +<tr tal:condition="python:states_array.index(drillhole_state) > states_array.index('excavated')"> +<th i18n:translate="label_datephotographed">Photographed</th> +<td class="left" colspan="3"> +<span + tal:define="date_photographed here/getDatePhotographed" + tal:condition="date_photographed" + tal:content="python:plone_view.toLocalizedTime(date_photographed, long_format=0)" + >2005-01-01</span> +</td> +</tr> + +<tr tal:condition="python:states_array.index(drillhole_state) > states_array.index('worked')"> +<th i18n:translate="label_datebackfilled">Worked</th> +<td class="left" colspan="3"> +<span + tal:define="date_worked here/getDateWorked" + tal:condition="date_worked" + tal:content="python:plone_view.toLocalizedTime(date_worked, long_format=0)" + >2005-01-01</span> +</td> +</tr> + +<tr tal:condition="python:drillhole_state == 'backfilled'"> +<th i18n:translate="label_datebackfilled">Backfilled</th> +<td class="left" colspan="3"> +<span + tal:define="date_backfilled here/getDateBackfilled" + tal:condition="date_backfilled" + tal:content="python:plone_view.toLocalizedTime(date_backfilled, long_format=0)" + >2005-01-01</span> +</td> +</tr> +--> +</thead> + +<tbody> +</tbody> + +</table> + +<div class="field"> +<label i18n:translate="label_remarks">Notes:</label> +<p class="comment" tal:content="python:here.getNotes() or default">None</p> +</div> + + + +</form> + +</metal:body_macro> + +</body> +</html> + Modified: tracer/skins/bika/drillhole_workflow_states.py =================================================================== --- tracer/skins/bika/drillhole_workflow_states.py 2013-12-03 13:06:26 UTC (rev 3447) +++ tracer/skins/bika/drillhole_workflow_states.py 2013-12-05 13:08:53 UTC (rev 3448) @@ -9,7 +9,7 @@ ## states_folder = context.portal_workflow.bika_drillhole_workflow.states -state_ids = ('planned', 'drilled', 'worked', 'rejected', 'cancelled') +state_ids = ('requested', 'drilled', 'logged_geotech', 'logged_lith', 'rejected', 'verified') l = [] for state_id in state_ids: state = states_folder[state_id] Modified: tracer/skins/bika/drillholes.pt =================================================================== --- tracer/skins/bika/drillholes.pt 2013-12-03 13:06:26 UTC (rev 3447) +++ tracer/skins/bika/drillholes.pt 2013-12-05 13:08:53 UTC (rev 3448) @@ -8,7 +8,7 @@ <metal:block fill-slot="top_slot"> <span tal:replace="nothing" - tal:define="dummy python:request.set('enable_border', 1)" + tal:define="dummy python:request.set('disable_border', 1)" /> </metal:block> @@ -20,69 +20,68 @@ <div metal:fill-slot="main" tal:define=" batch_size python:int(request.get('batch_size', '15')); - dummy_a python:request.set('portal_type', 'Sample'); - dummy_c python:request.set('sort_on', 'getSampleID'); + dummy_a python:request.set('portal_type', 'DrillHole'); + dummy_c python:request.set('sort_on', 'getDrillHoleID'); dummy_d python:request.set('sort_order', 'reverse'); - dummy_e python:here.toggle_state('clientar_review_state', 'all'); - clientar_state python:request.get('clientar_review_state'); - dummy_f python:here.REQUEST.set('review_state', clientar_state); - states python:here.get_toggles('sample'); - header_state python:here.get_toggle_title(clientar_state, states)"> + dummy_e python:here.toggle_state('client_drillhole_review_state', 'all'); + client_drillhole_state python:request.get('client_drillhole_review_state'); + dummy_f python:here.REQUEST.set('review_state', client_drillhole_state); + states python:here.get_toggles('drillhole'); + header_state python:here.get_toggle_title(client_drillhole_state, states)"> <div metal:use-macro="here/document_actions/macros/document_actions"> Document actions (print, sendto etc) </div> <h1> -<img src="sample.png" tal:attributes="src python:here.portal_types.getTypeInfo('Sample').getIcon()"/> -<span i18n:translate="heading_samples">Samples</span> -<tal:not_all tal:condition="python:clientar_state != 'all'"> +<img src="drillhole.png" tal:attributes="src python:here.portal_types.getTypeInfo('DrillHole').getIcon()"/> +<span i18n:translate="heading_drillholes">DrillHoles</span> +<tal:not_all tal:condition="python:client_drillhole_state != 'all'"> - <span i18n:translate="" tal:content="header_state">All</span> </tal:not_all> </h1> -<div id="content-samples" +<div id="content-drillholes" tal:define=" - all python:clientar_state == 'all'; + all python:client_drillhole_state == 'all'; results python:test(all, here.portal_catalog( - portal_type='Sample', - sort_on='getSampleID', + portal_type='DrillHole', + sort_on='getDrillHoleID', sort_order='reverse'), container.queryCatalog()); Batch python:modules['Products.CMFPlone'].Batch; b_start python:request.get('b_start',0); batch python:Batch(results, batch_size, int(b_start), orphan=1); - can_delete python: clientar_state == 'sample_due'; - can_publish python: clientar_state in ['verified', 'published']"> + can_delete python: client_drillhole_state == 'drillhole_requested'; + can_publish python: client_drillhole_state in ['verified', 'published']"> - <br/> <div metal:use-macro="here/batchsize_macros/macros/batchsize" /> <br/><br/> <form name="filter_result" action="" method="post" tal:attributes="action template/getId"> -<input type="hidden" name="portal_type" value="Sample"/> -<input type="hidden" name="sort_on" value="getSampleID"/> +<input type="hidden" name="portal_type" value="DrillHole"/> +<input type="hidden" name="sort_on" value="getDrillHoleID"/> <input type="hidden" name="sort_order" value="reverse"/> <div class="optionsToggle"> <tal:x repeat="state states"> - <input class="noborder" type="radio" name="clientar_review_state" value="sample_due" + <input class="noborder" type="radio" name="client_drillhole_review_state" value="sample_due" onclick="this.form.submit()" tal:define="state_id state/id" tal:attributes="value state_id; - checked python:request.get('clientar_review_state', 'sample_due') == state_id and 'checked' or None"/> - <span tal:content="state/title" i18n:translate="">Sample due</span> + checked python:request.get('client_drillhole_review_state', 'drillhole_requested') == state_id and 'checked' or None"/> + <span tal:content="state/title" i18n:translate="">Drill Hole requested</span> </tal:x> </div> </form> -<form name="samples" action="." method="post" +<form name="drillholes" action="." method="post" tal:condition="results"> <br/> -<input type="hidden" name="came_from" value="client_samples" /> +<input type="hidden" name="came_from" value="client_drillholes" /> <div tal:define="folder_actions python:can_delete and [button for button in actions['folder_buttons'] if button['id'] == 'delete'] or []; ar_actions python: portal.portal_actions.listFilteredActionsFor(batch[0].getObject()); permitted_actions python:['retract', 'verify', 'publish', 'republish']; @@ -91,7 +90,7 @@ <table tal:condition="batch" class="listing" - summary="sample listing" + summary="drillhole listing" cellpadding="0" cellspacing="0"> <thead> @@ -108,25 +107,21 @@ i18n:attributes="title; alt" /> </th> -<th i18n:translate="label_sampleid">Sample ID</th> +<th i18n:translate="label_drillhole">DrillHole</th> <th i18n:translate="label_client">Client</th> <th i18n:translate="label_project">Project</th> -<th i18n:translate="label_eastutm">East UTM</th> -<th i18n:translate="label_northutm">North UTM</th> -<th i18n:translate="label_contact">Contact</th> -<th i18n:translate="label_clientsample">Client Sample</th> -<th i18n:translate="label_sampletype">Sample Type</th> -<th i18n:translate="label_datesampled" - tal:condition="python:clientar_state != 'requested'" - >Sampled</th> -<th i18n:translate="label_datedispatched" - tal:condition="python:clientar_state not in ['requested', 'sampled']" - >Dispatched</th> -<th i18n:translate="label_published" - tal:condition="python:clientar_state in ['published', 'all']" - >Published</th> +<th i18n:translate="label_drillholeid">DrillHole ID</th> +<th i18n:translate="label_east">East</th> +<th i18n:translate="label_north">North</th> +<th i18n:translate="label_elevation">Elevation</th> +<th i18n:translate="label_datedrilled" + tal:condition="python:client_drillhole_state != 'requested'" + >Drilled</th> +<th i18n:translate="label_datelogged" + tal:condition="python:client_drillhole_state in ['logged_lith', 'logged_geotech', 'all']" + >Logged</th> <th i18n:translate="label_status" - tal:condition="python:clientar_state == 'all'">Status</th> + tal:condition="python:client_drillhole_state == 'all'">Status</th> </tr> </thead> @@ -137,10 +132,10 @@ oddrow repeat/item/odd; obj item/getObject; item_title_or_id obj/... [truncated message content] |
From: <ann...@us...> - 2013-12-03 13:06:28
|
Revision: 3447 http://sourceforge.net/p/bika/code/3447 Author: anneline Date: 2013-12-03 13:06:26 +0000 (Tue, 03 Dec 2013) Log Message: ----------- qc reporting Modified Paths: -------------- tracer/skins/bika/reports.pt Added Paths: ----------- tracer/skins/bika/report_standardqc_view.pt Added: tracer/skins/bika/report_standardqc_view.pt =================================================================== --- tracer/skins/bika/report_standardqc_view.pt (rev 0) +++ tracer/skins/bika/report_standardqc_view.pt 2013-12-03 13:06:26 UTC (rev 3447) @@ -0,0 +1,240 @@ +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" + lang="en" + metal:use-macro="here/main_template/macros/master" + i18n:domain="bika"> + +<head> + <metal:block fill-slot="top_slot" + tal:define="dummy python:request.set('disable_border', 1)" /> + + <metal:calendar fill-slot="javascript_head_slot"> + <!-- ECMAScript calendar --> + <style type="text/css" media="all" + tal:content="string:@import url($portal_url/jscalendar/calendar-system.css);"></style> + <script type="text/javascript" + tal:attributes="src string:$portal_url/jscalendar/calendar_stripped.js"></script> + <script type="text/javascript" charset="iso-8859-1" + tal:condition="exists: portal/jscalendar/calendar-en.js" + tal:attributes="src string:$portal_url/jscalendar/calendar-en.js"></script> + </metal:calendar> + +</head> +<body> +<div metal:fill-slot="main" + tal:define="form_submitted request/submit|nothing"> + + +<script type="text/javascript" src="utils.js"></script> +<div metal:use-macro="here/document_actions/macros/document_actions"> +Document actions (print, sendto etc) +</div> + +<metal:block use-macro="here/report_standardqc_print/macros/header"/> + +<tal:parameters condition="not:form_submitted"> +<tal:selection + tal:define=" + at_analysis python:here.portal_type == 'StandardAnalysis'; + at_sample python:here.portal_type == 'StandardSample'; + at_home python:not at_analysis and not at_sample; + supplier_uid python:at_analysis and here.aq_parent.aq_parent.UID() or (at_sample and here.aq_parent.UID() or request.get('getStandardSupplierUID', None)); + supplier python:supplier_uid and here.reference_catalog.lookupObject(supplier_uid) or None; + sample_uid python:at_sample and here.UID() or (at_analysis and here.aq_parent.UID() or request.get('getStandardSampleUID', None)) ; + sample python:sample_uid and here.reference_catalog.lookupObject(sample_uid) or None; + service_uid python:at_analysis and here.getService().UID() or request.get('getServiceUID', None); + service python:service_uid and here.reference_catalog.lookupObject(service_uid) or None; + analysis_uid python:at_analysis and here.UID() or None; +"> + +<form action="report_standardqc_view" method="post" name="search"> +<fieldset> + +<legend i18n:translate="legend_selection_criteria">Selection criteria</legend> + +<form name="filter_result" action="." method="post" name="search" + tal:attributes="action template/getId"> + +<div class="field" + tal:condition="at_home"> + <label i18n:translate="label_supplier" + >Supplier</label><br/> + <select name="getStandardSupplierUID" + onChange="string:clearSampleAndService();this.form.submit()" + style="" + id="getStandardSupplierUID" + tal:attributes=" + style string:font-family:${here/base_properties/fontFamily};;font-size:100%; + "> + <option value=""/> + + <tal:suppliers + define=" + suppliers python:here.portal_catalog(portal_type='StandardSupplier'); + sort_on python:(('Title', 'nocase', 'asc'),); + suppliers python:sequence.sort(suppliers, sort_on);" + repeat="supplier suppliers"> + <option value="" + tal:define="this_uid python:supplier.getObject().UID()" + tal:attributes="value this_uid; + selected python:supplier_uid == this_uid and 'selected' or ''" + tal:content="supplier/Title" + >Acme Systems</option> + + </tal:suppliers> + </select> +</div> + +<tal:not_selected tal:condition="at_home"> +<div class="field"> + <label i18n:translate="label_standard" + >Standard</label><br/> + <select name="getStandardSampleUID" + onChange="this.form.submit()" + style="" id="getStandardSampleUID"> + <option value=""/> + <tal:standards + define=" + standards python:supplier and supplier.objectValues('StandardSample') or []; + sort_on python:(('Title', 'nocase', 'asc'),); + standards python:sequence.sort(standards, sort_on);" + tal:repeat="standard standards"> + <option value="" + tal:define="this_uid python:standard.UID()" + tal:attributes="value this_uid; + selected python:sample_uid == this_uid and 'selected' or ''" + tal:content="standard/Title" + >sugar</option> + </tal:standards> + </select> +</div> +</tal:not_selected> + +</form> + +<form action="report_standardqc_view" method="post" name="search"> +<tal:not_selected tal:condition="python:not at_analysis"> +<div class="field"> + <label i18n:translate="label_analysisservice" + >Analysis</label><br/> + <select name="getServiceUID" + style="" id="getServiceUID"> + <tal:analyses + define=" + services python:sample and sample.getServices() or []; + sort_on python:(('Title', 'nocase', 'asc'),); + services python:sequence.sort(services, sort_on);" + tal:repeat="service services"> + <option value="" + tal:define="this_uid python:service.UID()" + tal:attributes="value this_uid; + selected python:service_uid == this_uid and 'selected' or ''" + tal:content="service/Title" + >Alcohol</option> + </tal:analyses> + </select> +</div> +</tal:not_selected> + +<tal:dates + tal:define=" + now python:DateTime(); + past python:now - 60"> +<div class="field"> + <label i18n:translate="label_dateverified" + >Date verified</label><br/> + <span i18n:translate="label_from">From</span> + + <tal:define define=" + id string:getDateVerified_fromdate; + inputname id; + formname string:search; + value past; + show_hm python:False; + inputvalue python:test(value!='None', value, '');"> + <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox"> + a calendar, hopefully + </metal:use> + </tal:define> + + <span i18n:translate="label_to">to</span> + + <tal:define define=" + id string:getDateVerified_todate; + inputname id; + formname string:search; + value now; + show_hm python:False; + inputvalue python:test(value!='None', value, '');"> + <metal:use use-macro="here/calendar_macros/macros/calendarDatePickerBox"> + a calendar, hopefully + </metal:use> + </tal:define> + +</div> + +</tal:dates> +<input type="HIDDEN" name="getStandardSupplierUID" + value="" + tal:attributes="value supplier_uid"/> +<input type="HIDDEN" name="getStandardSampleUID" + value="" + tal:attributes="value sample_uid"/> +<input + type="HIDDEN" name="getAnalysisUID" + value="" + tal:condition="at_analysis" + tal:attributes="value analysis_uid"/> +<input type="HIDDEN" name="getServiceUID" + value="" + tal:condition="at_analysis" + tal:attributes="value service_uid"/> +<input type="HIDDEN" name="portal_type" + value="StandardAnalysis"/> +<input tabindex="" + class="searchButton" + type="submit" + name="submit" + value="Stats" + i18n:attributes="value" + /> + +</form> +</tal:selection> +</tal:parameters> + +<tal:results condition="form_submitted"> +<form name="report_standardqc_print" action="." method="post"> +<input type="hidden" name="getDateVerified_fromdate" + tal:attributes="value python:request.get('getDateVerified_fromdate', None)"> +<input type="hidden" name="getDateVerified_todate" + tal:attributes="value python:request.get('getDateVerified_todate', None)"> +<input type="HIDDEN" name="getStandardSupplierUID" + value="" + tal:attributes="value python:request.get('getStandardSupplierUID', None)"/> +<input type="HIDDEN" name="getStandardSampleUID" + value="" + tal:attributes="value python:request.get('getStandardSampleUID', None)"/> +<input + type="HIDDEN" name="getAnalysisUID" + value="" + tal:attributes="value python:request.get('getAnalysisUID', None)"/> +<input type="HIDDEN" name="getServiceUID" + value="" + tal:attributes="value python:request.get('getServiceUID', None)"/> +<input + class="printButton" + type="submit" + name="report_standardqc_print:method" + value="Print" + tabindex="" + i18n:attributes="value" + tal:attributes=" + tabindex tabindex/next|nothing"/> + +</form> +<metal:block use-macro="here/report_standardqc_print/macros/body"/> +</tal:results> +</div> +</body> + +</html> Modified: tracer/skins/bika/reports.pt =================================================================== --- tracer/skins/bika/reports.pt 2013-11-28 13:10:48 UTC (rev 3446) +++ tracer/skins/bika/reports.pt 2013-12-03 13:06:26 UTC (rev 3447) @@ -19,21 +19,47 @@ >Reports</span> </h1> + <br/> +<dl> +<dt i18n:translate="heading_productivity" +>Productivity</dt> +<dl> + +<dt><a href="report_results_view" i18n:translate="heading_results" + >Results</a></dt> +<dd i18n:translate="description_results">Analysis result graphs +</dd> + <br/> <br/> -<h3>Under construction</h3> +<dt i18n:translate="heading_qc" + >Quality control</dt> +<dl> + +<dt><a href="report_standardqc_view" i18n:translate="heading_standards_qc" + >Standard QC</a></dt> +<dd i18n:translate="description_standards_qc">Standard analysis quality control graphs +</dd> + +<dt><a href="report_duplicates_view" i18n:translate="heading_duplicates_qc" + >Duplicates</a></dt> +<dd i18n:translate="description_duplicates_qc">Duplicate analysis quality control graphs +</dd> + +</dl> + +<br/> +<br/> +<br/> <p> -<span>Reports to be determined - please contact Anneline Sweetnam with requirements</span> +<span>Please contact Anneline Sweetnam with further reporting requirements</span> <a href="mailto:ann...@se..."> ann...@se...</a> </p> <!-- -<dl> -<dt i18n:translate="heading_productivity" ->Productivity</dt> <dl> <dt><a href="report_analysestotals_view" i18n:translate="heading_analyses_per_service" @@ -52,6 +78,7 @@ <dd i18n:translate="description_requestsandanalyses_per_client">Report the number of requests and analyses </dd> </tal:client> + <tal:not_client tal:condition="not:here/member_is_client"> <dt><a href="report_requestsperclient_view" i18n:translate="heading_requestsandanalyses_per_client" >Analysis requests and analyses per client</a></dt> @@ -69,11 +96,9 @@ <dd i18n:translate="description_attachments">Report the attachments linked to analysis requests and analyses </dd> </dl> +--> -<tal:lab_only tal:condition="not:here/member_is_client"> -<dt i18n:translate="heading_qc" - >Quality control</dt> -<dl> +<!-- <dt><a href="report_outofrange_view" i18n:translate="heading_outofrange_analyses">Analyses out of range</a></dt> <dd> <span i18n:translate="description_outofrange_analyses">Analysis results out of lab or client specified range</span> @@ -90,7 +115,6 @@ <dd i18n:translate="description_standardanalysis_qc">Standard analysis quality control graphs </dd> -</dl> <dt i18n:translate="heading_admin" >Administration</dt> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ann...@us...> - 2013-11-28 13:10:54
|
Revision: 3446 http://sourceforge.net/p/bika/code/3446 Author: anneline Date: 2013-11-28 13:10:48 +0000 (Thu, 28 Nov 2013) Log Message: ----------- samples Modified Paths: -------------- tracer/Tools.py tracer/skins/bika/client_samples.pt tracer/skins/bika/get_real_duration.py tracer/skins/bika/project_samples.pt tracer/skins/bika/samples.pt Modified: tracer/Tools.py =================================================================== --- tracer/Tools.py 2013-11-27 12:41:47 UTC (rev 3445) +++ tracer/Tools.py 2013-11-28 13:10:48 UTC (rev 3446) @@ -14,7 +14,6 @@ from OFS.Folder import Folder from Products.bika.config import ManageSample from DateTime import DateTime -import pdb class ToolFolder(UniqueObject, Folder): """ Tool Folder """ @@ -1601,7 +1600,6 @@ security.declareProtected(ManageSample, 'import_file') def import_file(self, csvfile, filename, project_id, contact, sampletype, utmsystem, analyses, state): import csv - pdb.set_trace() slash = filename.rfind('\\') full_name = filename[slash+1:] ext = full_name.rfind('.') @@ -1621,9 +1619,9 @@ row_count = 0 sample_count = 0 batch_remarks = [] - valid_headers = ['sample', 'trench', 'drillhole', 'from', 'to', 'length', \ - 'magsus', 'easting', 'northing', 'eastingto', 'northingto', 'elevation'] - + valid_headers = ['sample', 'trench', 'drillhole', 'from', 'to', \ + 'length', 'magsus', 'easting', 'northing', \ + 'eastingto', 'northingto', 'elevation', 'type'] started = False for row in reader: row_count = row_count + 1 @@ -1644,7 +1642,6 @@ sample = dict(zip(batch_headers, row)) samples.append(sample) - pdb.set_trace() trenches = {} drillholes = {} for header in batch_headers: @@ -1665,7 +1662,6 @@ results = {} errors = [] - pdb.set_trace() for sample in samples: sample_id = sample['sample'] @@ -1695,7 +1691,6 @@ #REQUEST.RESPONSE.write(pad+'<input style="display: none;" id="inputTotal" value="%s">' % len(samples)) row_count = 0 - pdb.set_trace() for s in samples: row_count = row_count + 1 #REQUEST.RESPONSE.write(pad+'<input style="display: none;" name="inputProgress" value="%s">' % row_count) @@ -1712,6 +1707,21 @@ for h in valid_headers: if h not in batch_headers: s[h] = None + if s['type'].lower() in ('duplicate', 'dup', 'dupl'): + duplicate = True + else: + duplicate = False + + if s['type'].lower() in ('blank', 'blk'): + blank = True + else: + blank = False + + if s['type'].lower() in ('standard', 'std'): + standard = True + else: + standard = False + sample.edit( SampleID=sample_id, Contact=contact, @@ -1726,15 +1736,15 @@ Length=s['length'], MagSus=s['magsus'], Elevation=s['elevation'], - DuplicateSample=s['easting'], - StandardSample=s['easting'], + DuplicateSample=duplicate, + StandardSample=standard, + BlankSample=blank, Trench=s['trench'], DrillHole=s['drillhole'], SampleType=sampletype, Analyses=analyses, ) - pdb.set_trace() return errors #valid = self.validate_arimport_c(arimport) #REQUEST.RESPONSE.write('<script>document.location.href="%s/project_samples?portal_status_message=%s%%20imported"</script>' % (client.absolute_url(), sample_id)) Modified: tracer/skins/bika/client_samples.pt =================================================================== --- tracer/skins/bika/client_samples.pt 2013-11-27 12:41:47 UTC (rev 3445) +++ tracer/skins/bika/client_samples.pt 2013-11-28 13:10:48 UTC (rev 3446) @@ -116,9 +116,9 @@ <th i18n:translate="label_sample">Sample</th> <th i18n:translate="label_project">Project</th> <th i18n:translate="label_sampleid">Sample ID</th> -<th i18n:translate="label_eastutm">East UTM</th> -<th i18n:translate="label_northutm">North UTM</th> -<th i18n:translate="label_contact">Contact</th> +<th i18n:translate="label_eastutm">East</th> +<th i18n:translate="label_northutm">North</th> +<!-- <th i18n:translate="label_contact">Contact</th>--> <th i18n:translate="label_sampletype">Sample Type</th> <th i18n:translate="label_datesampled" tal:condition="python:clientar_state != 'requested'" @@ -169,6 +169,8 @@ <a href="" tal:attributes="href obj/absolute_url" tal:content="obj/getClientSampleID">S-00001</a> +<img src="dup.png" + tal:condition="python:obj.getDuplicateSample()" > </td> <td style="white-space:nowrap"> <a href="" @@ -182,11 +184,13 @@ </td> <td tal:content="obj/getEastUTM|nothing">R001</td> <td tal:content="obj/getNorthUTM|nothing">R001</td> +<!-- <td tal:define="contact obj/getContact"> <a href="" tal:condition="contact" tal:attributes="href contact/absolute_url" tal:content="contact/Title|nothing">Pete Smith</a></td> +--> <td tal:content="sampletype/Title|nothing">Sample Type</td> </tal:sample> Modified: tracer/skins/bika/get_real_duration.py =================================================================== --- tracer/skins/bika/get_real_duration.py 2013-11-27 12:41:47 UTC (rev 3445) +++ tracer/skins/bika/get_real_duration.py 2013-11-28 13:10:48 UTC (rev 3446) @@ -12,7 +12,9 @@ end = DateTime(endtime) totminutes = int((end - start) * 24 * 60) mins = totminutes % 60 -hours = (totminutes - mins) / 60 +tothours = (totminutes - mins) / 60 +hours = tothours % 24 +days = (tothours - hours) / 24 mins_str = '%sm' % mins @@ -21,5 +23,11 @@ else: hours_str = '' -return '%s%s' % (hours_str, mins_str) +if days: + days_str = '%sd' % days +else: + days_str = '' + +return '%s%s%s' % (days_str, hours_str, mins_str) + Modified: tracer/skins/bika/project_samples.pt =================================================================== --- tracer/skins/bika/project_samples.pt 2013-11-27 12:41:47 UTC (rev 3445) +++ tracer/skins/bika/project_samples.pt 2013-11-28 13:10:48 UTC (rev 3446) @@ -144,9 +144,9 @@ </th> <th i18n:translate="label_sample">Sample</th> <th i18n:translate="label_sampleid">Sample ID</th> -<th i18n:translate="label_eastutm">East UTM</th> -<th i18n:translate="label_northutm">North UTM</th> -<th i18n:translate="label_contact">Contact</th> +<th i18n:translate="label_eastutm">East</th> +<th i18n:translate="label_northutm">North</th> +<!-- <th i18n:translate="label_contact">Contact</th>--> <th i18n:translate="label_sampletype">Sample Type</th> <th i18n:translate="label_datesampled" tal:condition="python:clientar_state != 'requested'" @@ -195,6 +195,8 @@ <a href="" tal:attributes="href obj/absolute_url" tal:content="obj/getClientSampleID">S-00001</a> +<img src="dup.png" + tal:condition="python:obj.getDuplicateSample()" > </td> <td style="white-space:nowrap"> <a href="" @@ -203,11 +205,13 @@ </td> <td tal:content="obj/getEastUTM|nothing">R001</td> <td tal:content="obj/getNorthUTM|nothing">R001</td> +<!-- <td tal:define="contact obj/getContact|nothing"> <a tal:condition="contact" href="" tal:attributes="href contact/absolute_url" tal:content="contact/Title|nothing">Pete Smith</a></td> +--> <td tal:content="sampletype/Title|nothing">Sample Type</td> </tal:sample> Modified: tracer/skins/bika/samples.pt =================================================================== --- tracer/skins/bika/samples.pt 2013-11-27 12:41:47 UTC (rev 3445) +++ tracer/skins/bika/samples.pt 2013-11-28 13:10:48 UTC (rev 3446) @@ -112,9 +112,9 @@ <th i18n:translate="label_client">Client</th> <th i18n:translate="label_project">Project</th> <th i18n:translate="label_sampleid">Sample ID</th> -<th i18n:translate="label_eastutm">East UTM</th> -<th i18n:translate="label_northutm">North UTM</th> -<th i18n:translate="label_contact">Contact</th> +<th i18n:translate="label_eastutm">East</th> +<th i18n:translate="label_northutm">North</th> +<!-- <th i18n:translate="label_contact">Contact</th>--> <th i18n:translate="label_sampletype">Sample Type</th> <th i18n:translate="label_datesampled" tal:condition="python:clientar_state != 'requested'" @@ -166,6 +166,8 @@ <a href="" tal:attributes="href obj/absolute_url" tal:content="obj/getClientSampleID">S-00001</a> +<img src="dup.png" + tal:condition="python:obj.getDuplicateSample()" > </td> <td style="white-space:nowrap"> <a href="" @@ -184,12 +186,14 @@ </td> <td tal:content="obj/getEastUTM|nothing">R001</td> <td tal:content="obj/getNorthUTM|nothing">R001</td> +<!-- <td tal:define="contact obj/getContact"> <a href="" tal:attributes="href contact/absolute_url" tal:content="contact/Title|nothing">Pete Smith</a></td> +--> -<td tal:content="sampletype/Title">Sample Type</td> +<td tal:content="sampletype/Title|nothing">Sample Type</td> </tal:sample> <td tal:condition="python:clientar_state != 'requested'"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ann...@us...> - 2013-11-27 12:41:51
|
Revision: 3445 http://sourceforge.net/p/bika/code/3445 Author: anneline Date: 2013-11-27 12:41:47 +0000 (Wed, 27 Nov 2013) Log Message: ----------- sample results Modified Paths: -------------- tracer/skins/bika/sample_edit_results_form.cpt tracer/skins/bika/sample_view.pt Modified: tracer/skins/bika/sample_edit_results_form.cpt =================================================================== --- tracer/skins/bika/sample_edit_results_form.cpt 2013-11-26 12:44:24 UTC (rev 3444) +++ tracer/skins/bika/sample_edit_results_form.cpt 2013-11-27 12:41:47 UTC (rev 3445) @@ -172,36 +172,38 @@ tal:content="item/Title"> Alcohol </a> +<em style="white-space:nowrap;" + tal:condition="python:(not result) and ar_review_state not in ('submitted', )"> + (<span tal:replace="item/getUnit">mg/l</span>)</em> </td> <tal:result> -<div tal:condition="python:ar_review_state in ('submitted', )"> <td> +<tal:submitted tal:condition="python:ar_review_state in ('submitted', )"> <input size="10" name="" value="10" - tal:condition="python:ar_review_state in ('submitted', )" tal:attributes=" value result; name string:results.${item/getId}:record; tabindex tabindex/next"/> <!-- style = "height:21px;width:152px;position:absolute;margin:-1px" --> <span tal:content="item/getUnit">ml</span> -</td> -</div> +</tal:submitted> <div tal:condition="python:ar_review_state in ('published', )"> <tal:resultentered tal:define=" result_class python:here.result_in_range(item, sampletype.UID(), specification); global out_of_range python:result_class == 'out_of_range' and 1 or out_of_range"> -<td tal:attributes="class result_class"> <span tal:content="result">10.00</span> <span tal:content="item/getUnit">ml</span> <img tal:condition="python:result_class == 'out_of_range'" src="" tal:attributes="src string:${portal/absolute_url}/exclamation.png"> -</td> </tal:resultentered> </div> + +</td> + </tal:result> <!-- <td align="center"> Modified: tracer/skins/bika/sample_view.pt =================================================================== --- tracer/skins/bika/sample_view.pt 2013-11-26 12:44:24 UTC (rev 3444) +++ tracer/skins/bika/sample_view.pt 2013-11-27 12:41:47 UTC (rev 3445) @@ -303,6 +303,9 @@ tal:content="analysis/Title"> Alcohol </a> +<em style="white-space:nowrap;" + tal:condition="not:result"> + (<span tal:replace="analysis/getUnit">mg/l</span>)</em> </td> <div:result tal:define=" @@ -319,7 +322,9 @@ tal:condition="analysis/getRetested" i18n:translate="retested">retested</div> </tal:result> -<span tal:content="analysis/getUnit">%vol</span> +<span + tal:condition="python:result" + tal:content="analysis/getUnit">ml</span> </td> <td tal:condition="python:not may_view_result"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ann...@us...> - 2013-11-26 12:44:29
|
Revision: 3444 http://sourceforge.net/p/bika/code/3444 Author: anneline Date: 2013-11-26 12:44:24 +0000 (Tue, 26 Nov 2013) Log Message: ----------- sample results Modified Paths: -------------- tracer/BikaSettings.py tracer/Client.py tracer/Project.py tracer/profiles/default/types/Client.xml tracer/profiles/default/types/Project.xml tracer/skins/bika/import.pt tracer/skins/bika/import_samples_form.pt Added Paths: ----------- tracer/skins/bika/import_labresults.cpy tracer/skins/bika/import_labresults.cpy.metadata tracer/skins/bika/import_labresults_form.pt tracer/skins/bika/import_labresults_results.pt Modified: tracer/BikaSettings.py =================================================================== --- tracer/BikaSettings.py 2013-11-18 12:23:45 UTC (rev 3443) +++ tracer/BikaSettings.py 2013-11-26 12:44:24 UTC (rev 3444) @@ -192,6 +192,14 @@ i18n_domain=I18N_DOMAIN, ) ), + FileField('ExampleLabResultsImportFile', + widget=FileWidget( + showLink=True, + label='Example Lab Results Import File', + label_msgid='label_example_labresults_import_file', + i18n_domain=I18N_DOMAIN, + ) + ), PrefixesField('Prefixes'), )) Modified: tracer/Client.py =================================================================== --- tracer/Client.py 2013-11-18 12:23:45 UTC (rev 3443) +++ tracer/Client.py 2013-11-26 12:44:24 UTC (rev 3444) @@ -109,12 +109,6 @@ 'action': 'string:${object_url}/client_attachments', 'permissions': (ListFolderContents,), }, - {'id': 'sampleimports', - 'name': 'imports', - 'action': 'string:${object_url}/import_samples_form', - 'condition': 'python:not here.setup_state', - 'permissions': (ListFolderContents,), - }, {'id': 'sampleexports', 'name': 'exports', 'action': 'string:${object_url}/export_samples_form', Modified: tracer/Project.py =================================================================== --- tracer/Project.py 2013-11-18 12:23:45 UTC (rev 3443) +++ tracer/Project.py 2013-11-26 12:44:24 UTC (rev 3444) @@ -118,6 +118,11 @@ 'action': 'string:${object_url}/import_samples_form', 'permissions': (ListFolderContents,), }, + {'id': 'import_labresults', + 'name': 'Import results', + 'action': 'string:${object_url}/import_labresults_form', + 'permissions': (ListFolderContents,), + }, {'id': 'export_samples', 'name': 'Export samples', 'action': 'string:${object_url}/export_samples_form', Modified: tracer/profiles/default/types/Client.xml =================================================================== --- tracer/profiles/default/types/Client.xml 2013-11-18 12:23:45 UTC (rev 3443) +++ tracer/profiles/default/types/Client.xml 2013-11-26 12:44:24 UTC (rev 3444) @@ -106,12 +106,6 @@ visible="True"> <permission value="List folder contents"/> </action> - <action title="ARImports" action_id="imports" category="object" - condition_expr="" - url_expr="string:${object_url}/client_arimports" - visible="True"> - <permission value="List folder contents"/> - </action> <action title="Attachments" action_id="attachments" category="object" condition_expr="python:here.bika_settings.settings.getAttachmentsPermitted()" url_expr="string:${object_url}/client_attachments" Modified: tracer/profiles/default/types/Project.xml =================================================================== --- tracer/profiles/default/types/Project.xml 2013-11-18 12:23:45 UTC (rev 3443) +++ tracer/profiles/default/types/Project.xml 2013-11-26 12:44:24 UTC (rev 3444) @@ -61,12 +61,18 @@ visible="True"> <permission value="List folder contents"/> </action> - <action title="import sample batch" action_id="import_samples" category="object" + <action title="import samples" action_id="import_samples" category="object" condition_expr="" url_expr="string:${object_url}/import_samples_form" visible="True"> <permission value="List folder contents"/> </action> + <action title="import results" action_id="import_labresults" category="object" + condition_expr="" + url_expr="string:${object_url}/import_labresults_form" + visible="True"> + <permission value="List folder contents"/> + </action> <action title="export samples" action_id="export_samples" category="object" condition_expr="" url_expr="string:${object_url}/export_samples_form" Modified: tracer/skins/bika/import.pt =================================================================== --- tracer/skins/bika/import.pt 2013-11-18 12:23:45 UTC (rev 3443) +++ tracer/skins/bika/import.pt 2013-11-26 12:44:24 UTC (rev 3444) @@ -40,7 +40,7 @@ </select> </div> <div class="field"> - <label i18n:translate="label_import_file" + <label i18n:translate="label_import_data_file" >Select input data file</label><br/> <input type="file" name="csvfile" size="30"/> </div> Added: tracer/skins/bika/import_labresults.cpy =================================================================== --- tracer/skins/bika/import_labresults.cpy (rev 0) +++ tracer/skins/bika/import_labresults.cpy 2013-11-26 12:44:24 UTC (rev 3444) @@ -0,0 +1,20 @@ +## Script (Python) "import_samples" +##bind container=container +##bind context=context +##bind namespace= +##bind script=script +##bind state=state +##bind subpath=traverse_subpath +##parameters= +##title= +## +sit = context.sample_import_tool +project = context.REQUEST.ProjectID +contact = context.REQUEST.Contact +sampletype = context.REQUEST.SampleType +utmsystem = context.REQUEST.UTMSystem +analyses = context.REQUEST.Analyses +infile = context.REQUEST.csvfile +result = sit.import_file(infile.readlines(), infile.filename, project, contact, sampletype, utmsystem, analyses, state) + +return state Added: tracer/skins/bika/import_labresults.cpy.metadata =================================================================== --- tracer/skins/bika/import_labresults.cpy.metadata (rev 0) +++ tracer/skins/bika/import_labresults.cpy.metadata 2013-11-26 12:44:24 UTC (rev 3444) @@ -0,0 +1,7 @@ +[default] +title=Add analysis requests +proxy=Manager,Anonymous + +[actions] +action.failure=traverse_to:string:project_samples +action.success=traverse_to:string:project_samples Added: tracer/skins/bika/import_labresults_form.pt =================================================================== --- tracer/skins/bika/import_labresults_form.pt (rev 0) +++ tracer/skins/bika/import_labresults_form.pt 2013-11-26 12:44:24 UTC (rev 3444) @@ -0,0 +1,70 @@ +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" + lang="en" + metal:use-macro="here/main_template/macros/master" + i18n:domain="bika"> + +<head> + <metal:block fill-slot="top_slot" + tal:define="dummy python:request.set('enable_border', 1)" /> +</head> + + +<body> + +<div metal:fill-slot="main"> + +<h1> +<tal:block replace="structure python:getattr(here, here.getIcon(1))"/> + +<span i18n:translate="heading_import_labresults" + >Import lab results to project</span> +<span tal:content="here/Title"/> +</h1> + +<p> + Import a csv file containing the following columns: + <br/> + sample (reqd), analysis, result + <br/> + The first column must be sample id, with column header of 'sample' +</p> +<tal:example + tal:define="samplefile python:here.bika_settings.settings.getExampleLabResultsImportFile(); + filename python:getattr(samplefile, 'filename', '')"> +<a href="" title="Click to download" + tal:condition=filename + tal:attributes="href string:${here/bika_settings/settings/absolute_url}/at_download/ExampleLabResultsImportFile"> +<img src="" tal:attributes="src string:${portal/absolute_url}/file.png"> +<span i18n:translate="heading_example_labresults_file">Example lab results file</span> +</a> +</tal:example> +<br/> + +<form action="import_labresults_results" method="post" name="import_results" + enctype="multipart/form-data"> + +<input type="hidden" name="form.submitted" value="1" /> +<input type="hidden" name="ProjectID" value="" + tal:attributes="value here/getId"> +<input type="hidden" name="getInputType" value="labresults"/> + + +<div class="field"> + <label i18n:translate="label_import_sample_file" + >Select data file for mass sample import</label><br/> + <input type="file" name="csvfile" size="60"/> + +<input tabindex="" + class="standalone" + type="submit" + name="submit" + value="Import samples" + i18n:attributes="value" + /> +</div> + +</form> +</div> + +</body> +</html> Added: tracer/skins/bika/import_labresults_results.pt =================================================================== --- tracer/skins/bika/import_labresults_results.pt (rev 0) +++ tracer/skins/bika/import_labresults_results.pt 2013-11-26 12:44:24 UTC (rev 3444) @@ -0,0 +1,45 @@ +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" + lang="en" + metal:use-macro="here/main_template/macros/master" + i18n:domain="bika"> + +<head> + <metal:block fill-slot="top_slot" + tal:define="dummy python:request.set('disable_border', 1)" /> +</head> + + +<body> + +<div metal:fill-slot="main"> +<div metal:use-macro="here/document_actions/macros/document_actions"> +Document actions (print, sendto etc) +</div> +<h1> +<tal:block replace="structure python:getattr(here, here.getIcon(1))"/> +<span i18n:translate="heading_import_results" + >Imported data results</span> +</h1> + +<div +tal:define=" + errors python:here.import_samples(); + "> +<dl> + +<tal:check tal:condition="errors"> +<dt i18n:translate="heading_errors">Errors</dt> +<tal:errors + tal:repeat="errs errors"> +<dd tal:content="errs"/> +</tal:errors> +</tal:check> + +</dl> + +</div> +</div> + +</body> +</html> + Modified: tracer/skins/bika/import_samples_form.pt =================================================================== --- tracer/skins/bika/import_samples_form.pt 2013-11-18 12:23:45 UTC (rev 3443) +++ tracer/skins/bika/import_samples_form.pt 2013-11-26 12:44:24 UTC (rev 3444) @@ -17,7 +17,7 @@ <tal:block replace="structure python:getattr(here, here.getIcon(1))"/> <span i18n:translate="heading_import_samples" - >Import samples to project</span> + >Import samples to </span> <span tal:content="here/Title"/> </h1> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ann...@us...> - 2013-11-18 12:23:49
|
Revision: 3443 http://sourceforge.net/p/bika/code/3443 Author: anneline Date: 2013-11-18 12:23:45 +0000 (Mon, 18 Nov 2013) Log Message: ----------- sample results Modified Paths: -------------- tracer/AnalysisService.py tracer/Sample.py tracer/Tools.py tracer/profiles/default/types/Sample.xml tracer/skins/bika/get_requested_analyses.py tracer/skins/bika/sample_analyses.pt tracer/skins/bika/sample_edit_form.cpt Added Paths: ----------- tracer/skins/bika/sample_edit_results.cpy tracer/skins/bika/sample_edit_results.cpy.metadata tracer/skins/bika/sample_edit_results_form.cpt tracer/skins/bika/sample_edit_results_form.cpt.metadata Modified: tracer/AnalysisService.py =================================================================== --- tracer/AnalysisService.py 2013-09-10 10:14:57 UTC (rev 3442) +++ tracer/AnalysisService.py 2013-11-18 12:23:45 UTC (rev 3443) @@ -33,18 +33,6 @@ }) security = ClassSecurityInfo() -class ResultOptionsField(RecordsField): - """an explicit list of possible analysis results per service""" - _properties = RecordsField._properties.copy() - _properties.update({ - 'type' : 'resultsoptions', - 'subfields' : ('Seq', 'Result',), - 'required_subfields' : ('Seq', 'Result',), - 'subfield_types': {'Seq':'int' }, - 'subfield_labels':{'Result': 'Option Text' }, - }) - security = ClassSecurityInfo() - schema = BikaSchema.copy() + Schema(( TextField('ServiceDescription', widget=TextAreaWidget( @@ -213,7 +201,6 @@ ), ), UncertaintiesField('Uncertainties'), - ResultOptionsField('ResultOptions'), )) class AnalysisService(BrowserDefaultMixin, BaseContent): @@ -242,19 +229,6 @@ 'title': 'Analysis service' } - security.declarePublic('getResultOptionsSorted') - def getResultOptionsSorted(self): - """ return the result options in the correct sequence """ - optionsdict = {} - resultoptions = self.getResultOptions() - result = [] - for option in resultoptions: - optionsdict[option['Seq']] = option['Result'] - keys = optionsdict.keys() - keys.sort() - for key in keys: - result.append(optionsdict[key]) - return result security.declarePublic('getDiscountedPrice') def getDiscountedPrice(self): @@ -349,7 +323,6 @@ Department=self.getDepartment(), Accredited=self.getAccredited(), Uncertainties=self.getUncertainties(), - ResultOptions=self.getResultOptions(), ) dup.reindexObject() return dup_id Modified: tracer/Sample.py =================================================================== --- tracer/Sample.py 2013-09-10 10:14:57 UTC (rev 3442) +++ tracer/Sample.py 2013-11-18 12:23:45 UTC (rev 3443) @@ -153,6 +153,13 @@ i18n_domain=I18N_DOMAIN, ), ), + StringField('Elevation', + widget=StringWidget( + label='Elevation', + label_msgid='label_elevation', + i18n_domain=I18N_DOMAIN, + ), + ), BooleanField('DuplicateSample', default=False, index='FieldIndex', @@ -343,7 +350,7 @@ }, {'id': 'analyses', 'name': 'Manage results', - 'action': 'string:${object_url}/sample_analyses', + 'action': 'string:${object_url}/sample_edit_results_form', 'permissions': (ManageSample,), }, {'id': 'log', @@ -454,7 +461,7 @@ self.setAttachment(attachments) RESPONSE.redirect( - '%s/sample_analyses'%self.absolute_url()) + '%s/sample_edit_results_form'%self.absolute_url()) def delARAttachment(self, REQUEST=None, RESPONSE=None): """ delete the attachment """ @@ -479,7 +486,7 @@ BaseFolder.manage_delObjects(client, ids, REQUEST) RESPONSE.redirect( - '%s/sample_analyses'%self.absolute_url()) + '%s/sample_edit_results_form'%self.absolute_url()) security.declarePublic('getContactUIDForUser') Modified: tracer/Tools.py =================================================================== --- tracer/Tools.py 2013-09-10 10:14:57 UTC (rev 3442) +++ tracer/Tools.py 2013-11-18 12:23:45 UTC (rev 3443) @@ -14,6 +14,7 @@ from OFS.Folder import Folder from Products.bika.config import ManageSample from DateTime import DateTime +import pdb class ToolFolder(UniqueObject, Folder): """ Tool Folder """ @@ -1600,6 +1601,7 @@ security.declareProtected(ManageSample, 'import_file') def import_file(self, csvfile, filename, project_id, contact, sampletype, utmsystem, analyses, state): import csv + pdb.set_trace() slash = filename.rfind('\\') full_name = filename[slash+1:] ext = full_name.rfind('.') @@ -1620,7 +1622,7 @@ sample_count = 0 batch_remarks = [] valid_headers = ['sample', 'trench', 'drillhole', 'from', 'to', 'length', \ - 'magsus', 'easting', 'northing', 'eastingto', 'northingto', ] + 'magsus', 'easting', 'northing', 'eastingto', 'northingto', 'elevation'] started = False for row in reader: @@ -1642,6 +1644,7 @@ sample = dict(zip(batch_headers, row)) samples.append(sample) + pdb.set_trace() trenches = {} drillholes = {} for header in batch_headers: @@ -1662,6 +1665,7 @@ results = {} errors = [] + pdb.set_trace() for sample in samples: sample_id = sample['sample'] @@ -1691,6 +1695,7 @@ #REQUEST.RESPONSE.write(pad+'<input style="display: none;" id="inputTotal" value="%s">' % len(samples)) row_count = 0 + pdb.set_trace() for s in samples: row_count = row_count + 1 #REQUEST.RESPONSE.write(pad+'<input style="display: none;" name="inputProgress" value="%s">' % row_count) @@ -1720,6 +1725,7 @@ OffsetTo=s['to'], Length=s['length'], MagSus=s['magsus'], + Elevation=s['elevation'], DuplicateSample=s['easting'], StandardSample=s['easting'], Trench=s['trench'], @@ -1728,6 +1734,7 @@ Analyses=analyses, ) + pdb.set_trace() return errors #valid = self.validate_arimport_c(arimport) #REQUEST.RESPONSE.write('<script>document.location.href="%s/project_samples?portal_status_message=%s%%20imported"</script>' % (client.absolute_url(), sample_id)) Modified: tracer/profiles/default/types/Sample.xml =================================================================== --- tracer/profiles/default/types/Sample.xml 2013-09-10 10:14:57 UTC (rev 3442) +++ tracer/profiles/default/types/Sample.xml 2013-11-18 12:23:45 UTC (rev 3443) @@ -59,13 +59,11 @@ url_expr="string:${folder_url}/view" visible="False"> <permission value="View"/> </action> - <!-- <action title="Manage results" action_id="analyses" category="object" - condition_expr="" url_expr="string:${object_url}/sample_analyses" + condition_expr="" url_expr="string:${object_url}/sample_edit_results_form" visible="True"> <permission value="BIKA: Manage Sample"/> </action> - --> <action title="Log" action_id="log" category="object" condition_expr="" url_expr="string:${object_url}/status_log" visible="True"> <permission value="BIKA: Manage bika"/> Modified: tracer/skins/bika/get_requested_analyses.py =================================================================== --- tracer/skins/bika/get_requested_analyses.py 2013-09-10 10:14:57 UTC (rev 3442) +++ tracer/skins/bika/get_requested_analyses.py 2013-11-18 12:23:45 UTC (rev 3443) @@ -9,25 +9,10 @@ ## wf_tool = context.portal_workflow result = [] -cats = {} for analysis in context.getAnalyses(): if wf_tool.getInfoFor(analysis, 'review_state', '' ) == 'not_requested': continue - if not cats.has_key(analysis.getService().getCategoryName()): - cats[analysis.getService().getCategoryName()] = {} - analyses = cats[analysis.getService().getCategoryName()] - analyses[analysis.Title()] = analysis - cats[analysis.getService().getCategoryName()] = analyses - -cat_keys = cats.keys() -cat_keys.sort(lambda x,y:cmp(x.lower(), y.lower())) + result.append(analysis) -for cat_key in cat_keys: - analyses = cats[cat_key] - analysis_keys = analyses.keys() - analysis_keys.sort(lambda x,y:cmp(x.lower(), y.lower())) - for analysis_key in analysis_keys: - result.append(analyses[analysis_key]) - return result Modified: tracer/skins/bika/sample_analyses.pt =================================================================== --- tracer/skins/bika/sample_analyses.pt 2013-09-10 10:14:57 UTC (rev 3442) +++ tracer/skins/bika/sample_analyses.pt 2013-11-18 12:23:45 UTC (rev 3443) @@ -22,9 +22,6 @@ <h1> <tal:block replace="structure python:getattr(here, here.getIcon(1))"/> <span tal:content="title_string | here/title_or_id" /> -<img src="" - tal:condition="here/getInvoiceExclude" - tal:attributes="src string:${portal/absolute_url}/no_invoice.png"> </h1> <a href="" class="link-parent" @@ -41,15 +38,8 @@ b_start request/b_start | b_start; Batch python:modules['Products.CMFPlone'].Batch; batch python:Batch(here.get_requested_analyses(), b_size, int(b_start), orphan=1); - calc_cols python:here.get_calc_columns(batch); - any_tv python:'tv' in calc_cols; - any_tf python:'tf' in calc_cols; - any_vm python:'vm' in calc_cols; - any_sm python:'sm' in calc_cols; - any_nm python:'nm' in calc_cols; - any_gm python:'gm' in calc_cols; client_uid here/getClientUID; - sample python:here.getSample(); + sample python:here; sampletype python:sample.getSampleType(); ar_review_state python:wtool.getInfoFor(here, 'review_state', ''); ar_attach_allowed here/bika_settings/settings/getARAttachmentsPermitted; @@ -62,6 +52,7 @@ <metal:block use-macro="here/attachments/macros/attachments"/> </div> <table width="100%"><tr><td> +<!-- <form name="specificationForm" enctype="multipart/form-data" method="post" @@ -84,6 +75,7 @@ <label i18n:translate="label_client" >Client</label> </form> +--> </td><td align="right"> <p:hazardous tal:condition="sampletype/getHazardous"> @@ -110,12 +102,6 @@ cellpadding="0" cellspacing="0" tal:define=" colspan python:6; - colspan python:any_tv and (colspan + 1) or colspan; - colspan python:any_tf and (colspan + 1) or colspan; - colspan python:any_vm and (colspan + 1) or colspan; - colspan python:any_gm and (colspan + 1) or colspan; - colspan python:any_sm and (colspan + 1) or colspan; - colspan python:any_nm and (colspan + 1) or colspan; colspan python:analysis_attach_allowed and (colspan + 1) or colspan"> <thead> @@ -136,58 +122,30 @@ /> </th> <th i18n:translate="label_analysis">Analysis</th> -<tal:tv condition="python:any_tv"> -<th i18n:translate="label_titrationvolume">Titration Volume</th> -</tal:tv> -<tal:tf condition="python:any_tf"> -<th i18n:translate="label_titrationfactor">Titration Factor</th> -</tal:tf> -<tal:vm condition="python:any_vm"> -<th i18n:translate="label_vesselmass">Vessel Mass</th> -</tal:vm> -<tal:gm condition="python:any_gm"> -<th i18n:translate="label_grossweight">Gross Mass</th> -</tal:gm> -<tal:sm condition="python:any_sm"> -<th i18n:translate="label_samplemass">Sample Mass</th> -</tal:sm> -<tal:nm condition="python:any_nm"> -<th i18n:translate="label_netweight">Net Mass</th> -</tal:nm> <th> <span i18n:translate="label_result">Result</span> -<div tal:condition="here/getReportDryMatter" - i18n:translate="label_as_DM">(as DM)</div> </th> +<!-- <th i18n:translate="label_retested">Retested</th> <th i18n:translate="label_variation">+/-</th> <th i18n:translate="label_status">Status</th> <th tal:condition="analysis_attach_allowed" i18n:translate="label_attachments">Attachments</th> +--> </tr> </metal:block> </thead> -<metal:block tal:condition="batch|nothing" - tal:define="global category python:None"> +<metal:block tal:condition="batch|nothing"> <tbody> <metal:block tal:repeat="item batch"> <tal:analyses tal:define="service item/getService"> -<tr tal:condition="python:service.getCategoryName() != category"> -<td class="category" tal:attributes="colspan colspan" - tal:define="global category service/getCategoryName" - tal:content="category"></td> -</tr> <tr tal:define=" oddrow repeat/item/odd; item_title_or_id item/title_or_id; - result item/getResult; - optionstrings python: service.getResultOptionsSorted(); - item_cols python:here.get_calc_columns([item,]); - review_state python:wtool.getInfoFor(item, 'review_state', ''); - analysis_late python:review_state not in ['sample_due', 'published'] and item.getDueDate() < now" + result item/getResult; " tal:attributes=" class python:test(oddrow, 'even', 'odd')" > @@ -209,179 +167,30 @@ tal:content="item/Title"> Alcohol </a> -<img tal:condition="python:here.getReportDryMatter() and service.getReportDryMatter()" - src="" tal:attributes="src string:${portal/absolute_url}/dry.png"> -<tal:late tal:condition="analysis_late"> -<img tal:define="global late python:1" - src="" tal:attributes="src string:${portal/absolute_url}/late_small.png"> -</tal:late> -<input type="hidden" name="" - tal:condition="python:review_state in ('sample_received', 'assigned')" - tal:attributes=" - value item/getCalcType; - id string:${item/getId}.CalcType"/> </td> -<tal:tv - condition="python:any_tv"> -<td> +<tal:result> +<div tal:condition="python:ar_review_state in ('submitted', )"> -<div tal:condition="python:'tv' in item_cols"> -<input size="6" name="" value="10" - tal:condition="python:review_state in ('sample_received', 'assigned')" - tal:attributes=" - value item/getTitrationVolume; - name string:results.${item/getId}.TitrationVolume:record; - onChange string:calcResult('${item/getId}'); - tabindex tabindex/next"/> -<span - tal:define="titration_vol item/getTitrationVolume|nothing; - titration_unit service/getTitrationUnit" - tal:condition="python:review_state not in ('sample_received', 'assigned') and titration_vol" - tal:content="string:$titration_vol $titration_unit">10ml</span> -</div> -</td> -</tal:tv> - -<tal:tf - condition="python:any_tf"> <td> -<div tal:condition="python:'tf' in item_cols"> -<input size="6" name="" value="10" - tal:condition="python:review_state in ('sample_received', 'assigned')" - tal:attributes=" - value item/getTitrationFactor; - name string:results.${item/getId}.TitrationFactor:record; - onChange string:calcResult('${item/getId}'); - tabindex tabindex/next"/> -<span - tal:condition="python:review_state not in ('sample_received', 'assigned')" - tal:content="item/getTitrationFactor">10</span> -</div> -</td> -</tal:tf> - -<tal:vm - condition="python:any_vm"> -<td> -<div tal:condition="python:'vm' in item_cols"> -<input size="6" name="" value="10" - tal:condition="python:review_state in ('sample_received', 'assigned')" - tal:attributes=" - value item/getVesselMass; - name string:results.${item/getId}.VesselMass:record; - onChange string:calcResult('${item/getId}'); - tabindex tabindex/next"/> -<span - tal:condition="python:review_state not in ('sample_received', 'assigned')" - tal:content="item/getVesselMass">10</span> -</div> -</td> -</tal:vm> -<tal:gm - condition="python:any_gm"> -<td> - -<div tal:condition="python:'gm' in item_cols"> -<input size="6" name="" value="10" - tal:condition="python:review_state in ('sample_received', 'assigned')" - tal:attributes=" - value item/getGrossMass; - name string:results.${item/getId}.GrossMass:record; - onChange string:calcResult('${item/getId}'); - tabindex tabindex/next"/> -<span - tal:condition="python:review_state not in ('sample_received', 'assigned')" - tal:content="item/getGrossMass|nothing">10ml</span> -</div> -</td> -</tal:gm> - -<tal:sm - condition="python:any_sm"> -<td> -<div tal:condition="python:'sm' in item_cols"> -<input size="6" name="" value="10" - tal:condition="python:review_state in ('sample_received', 'assigned')" - tal:attributes=" - value item/getSampleMass; - name string:results.${item/getId}.SampleMass:record; - onChange string:calcResult('${item/getId}'); - tabindex tabindex/next"/> -<span - tal:condition="python:review_state not in ('sample_received', 'assigned')" - tal:content="item/getSampleMass">10</span> -</div> -</td> -</tal:sm> - -<tal:nm - condition="python:any_nm"> -<td> -<div tal:condition="python:'nm' in item_cols"> -<input size="6" name="" value="10" - tal:condition="python:review_state in ('sample_received', 'assigned')" - tal:attributes=" - value item/getNetMass; - name string:results.${item/getId}.NetMass:record; - onChange string:calcResult('${item/getId}'); - tabindex tabindex/next"/> -<span - tal:condition="python:review_state not in ('sample_received', 'assigned')" - tal:content="item/getNetMass">10</span> -</div> -</td> -</tal:nm> - -<tal:result - tal:define="calc_reqd python:item.getCalcType() is not None"> - -<div tal:condition="python:review_state in ('sample_received', 'assigned')"> -<td tal:condition="calc_reqd"> -<input READONLY class="calculated" size="10" name="" value="10" tabindex="-1" - tal:condition="python:review_state in ('sample_received', 'assigned')" - tal:attributes=" - value result; - name string:results.${item/getId}.Result:record"/> -<span tal:content="item/getUnit">ml</span> - -</td> - -<td tal:condition="python:not calc_reqd"> <input size="10" name="" value="10" - tal:condition="python:review_state in ('sample_received', 'assigned') and not optionstrings" + tal:condition="python:ar_review_state in ('submitted', )" tal:attributes=" value result; name string:results.${item/getId}.Result:record; tabindex tabindex/next"/> <!-- style = "height:21px;width:152px;position:absolute;margin:-1px" --> -<select tal:condition="python:review_state in ('sample_received', 'assigned') and optionstrings" -tal:attributes=" - name string:results.${item/getId}.Result:record; - tabindex tabindex/next"> - <option value=""></option> - <tal:opts repeat="option optionstrings"> - <option tal:content="option" - tal:attributes="value option; - selected python:result == option and 'selected' or ''" - >Title</option> - </tal:opts> -</select> <span tal:content="item/getUnit">ml</span> </td> </div> -<div tal:condition="python:review_state not in ('sample_received', 'assigned')"> +<div tal:condition="python:ar_review_state in ('published', )"> <tal:resultentered tal:define=" result_class python:here.result_in_range(item, sampletype.UID(), specification); global out_of_range python:result_class == 'out_of_range' and 1 or out_of_range"> <td tal:attributes="class result_class"> <span tal:content="result">10.00</span> -<tal:dry tal:condition="item/getResultDM"> -<span tal:define="dry_result string:(${item/getResultDM})" - tal:content="dry_result">10</span> -</tal:dry> <span tal:content="item/getUnit">ml</span> <img tal:condition="python:result_class == 'out_of_range'" src="" tal:attributes="src string:${portal/absolute_url}/exclamation.png"> @@ -389,7 +198,7 @@ </tal:resultentered> </div> </tal:result> - +<!-- <td align="center"> <div tal:define="item_id item/getId" @@ -444,6 +253,7 @@ </tal:attachments> </div> </td> +--> </tr> </tal:analyses> @@ -454,47 +264,15 @@ </table> -<tal:buttons tal:repeat="button actions/folder_buttons|nothing"> -<input - class="context" - type="submit" - name="" - value="" - tabindex="" - tal:condition="python:batch and button['id'] in ('delete', 'submit_results')" - i18n:attributes="value" - tal:attributes=" - value button/name; - name button/url; - tabindex tabindex/next" /> -</tal:buttons> +<input class="context" + tabindex="" + type="submit" + name="form_submit" + value="Save" + i18n:attributes="value" + tal:attributes="tabindex tabindex/next" + /> -<tal:ar_actions - condition="batch" - define="ar_workflow_actions python: here.get_analysis_request_actions()"> - -<input type="hidden" id="workflow_action" name="workflow_action" value=""/> -<input type="hidden" id="AnalysisAttachment" name="AnalysisAttachment" value=""/> - -<tal:buttons tal:repeat="transition ar_workflow_actions"> - -<input - class="context" - type="submit" - name="folder_publish:method" - value="" - tabindex="" - tal:condition="python:transition['id'] not in ['assign', 'republish', 'prepublish']" - i18n:attributes="value" - tal:attributes=" - value transition/name; - tabindex tabindex/next; - onclick string:this.form.workflow_action.value = '${transition/id}'" /> -</tal:buttons> -</tal:ar_actions> -<!-- Navigation --> -<div metal:use-macro="here/batch_macros/macros/navigation" /> - <br/> <br/> <div class="discreeter"> @@ -508,11 +286,6 @@ <img src="" tal:attributes="src string:${portal/absolute_url}/late_small.png"> <span i18n:translate="legend_late">Late analysis</span> </p> -<p tal:condition="here/getReportDryMatter"> -<img src="" tal:attributes="src string:${portal/absolute_url}/dry.png"> -<span i18n:translate="disclaimer_dry"> -Reported as dry matter. Values in brackets denote results on a 'Dry Matter' basis</span> -</p> </div> </form> Modified: tracer/skins/bika/sample_edit_form.cpt =================================================================== --- tracer/skins/bika/sample_edit_form.cpt 2013-09-10 10:14:57 UTC (rev 3442) +++ tracer/skins/bika/sample_edit_form.cpt 2013-11-18 12:23:45 UTC (rev 3443) @@ -299,7 +299,7 @@ <span tal:define="date_requested here/getDateRequested" tal:condition="date_requested" - tal:content="python:plone_view.toLocalizedTime(date_requested, long_format=1)" + tal:content="python:plone_view.toLocalizedTime(date_requested, long_format=0)" >2005-01-01 10:00 </span> </td> Added: tracer/skins/bika/sample_edit_results.cpy =================================================================== --- tracer/skins/bika/sample_edit_results.cpy (rev 0) +++ tracer/skins/bika/sample_edit_results.cpy 2013-11-18 12:23:45 UTC (rev 3443) @@ -0,0 +1,26 @@ +## Controller Python Script "sample_edit_results" +##bind container=container +##bind context=context +##bind namespace= +##bind script=script +##bind state=state +##bind subpath=traverse_subpath +##parameters= +##title=save analysis results +## + +from DateTime import DateTime + + +results = context.REQUEST.form['results'] +sample = context +analysis_ids = results.keys() +for analysis in sample.getAnalyses(): + analysis.edit(Result=results[analysis.getId()]) + + +from Products.CMFPlone import transaction_note +transaction_note('%s results modified successfully' % sample.getSampleID()) + +message=context.translate('message_results_saved', default='Sample ${SAMPLE} results successfully modified', mapping={'SAMPLE': sample.getSampleID()}, domain='bika') +return state.set(portal_status_message=message) Added: tracer/skins/bika/sample_edit_results.cpy.metadata =================================================================== --- tracer/skins/bika/sample_edit_results.cpy.metadata (rev 0) +++ tracer/skins/bika/sample_edit_results.cpy.metadata 2013-11-18 12:23:45 UTC (rev 3443) @@ -0,0 +1,7 @@ +[default] +title=Edit analysis requests +proxy=Manager,Anonymous + +[actions] +action.failure=redirect_to:string:${object/absolute_url} +action.success=redirect_to:string:${object/absolute_url} Added: tracer/skins/bika/sample_edit_results_form.cpt =================================================================== --- tracer/skins/bika/sample_edit_results_form.cpt (rev 0) +++ tracer/skins/bika/sample_edit_results_form.cpt 2013-11-18 12:23:45 UTC (rev 3443) @@ -0,0 +1,312 @@ +<html + xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" + i18n:domain="bika" + metal:use-macro="here/main_template/macros/master"> + +<head> </head> + +<body> + +<div metal:fill-slot="main" + tal:define=" + specification python:request.get('specification', 'lab'); + global out_of_range python:0; + global late python:0; + now python:DateTime()"> + + +<div metal:use-macro="here/document_actions/macros/document_actions"> +Document actions (print, sendto etc) +</div> + +<h1> +<tal:block replace="structure python:getattr(here, here.getIcon(1))"/> +<span tal:content="title_string | here/title_or_id" /> +</h1> + +<a href="" class="link-parent" + tal:define="parent_url python:here.navigationParent(here, template.getId())" + tal:condition="parent_url" + tal:attributes="href parent_url" + i18n:translate="go_to_parent_url"> +Up one level +</a> +<div + tal:define=" + b_size python:100; + b_start python:0; + b_start request/b_start | b_start; + Batch python:modules['Products.CMFPlone'].Batch; + batch python:Batch(here.get_requested_analyses(), b_size, int(b_start), orphan=1); + client_uid here/getClientUID; + sample python:here; + sampletype python:sample.getSampleType(); + ar_review_state python:wtool.getInfoFor(here, 'review_state', ''); + ar_attach_allowed here/bika_settings/settings/getARAttachmentsPermitted; + analysis_attach_allowed here/bika_settings/settings/getAnalysisAttachmentsPermitted; + attachments_allowed here/bika_settings/settings/getAttachmentsPermitted; + attachments here/getAttachment | nothing; + delete_attachments python:True; + update_attachments python:True"> +<div tal:condition="attachments_allowed"> +<metal:block use-macro="here/attachments/macros/attachments"/> +</div> +<table width="100%"><tr><td> +<!-- +<form name="specificationForm" + enctype="multipart/form-data" + method="post" + action="." + tal:attributes="action string:${here_url}/analysisrequest_analyses"> + +<span i18n:translate="label_range_specification">Range Specification</span>: +<input class="noborder" type="radio" name="specification" value="lab" + onclick="this.form.submit()" + tal:attributes=" + checked python:test(specification == 'lab', 'checked', None); + tabindex tabindex/next"/> +<label i18n:translate="label_lab" + >Lab</label> +<input class="noborder" type="radio" name="specification" value="client" + onclick="this.form.submit()" + tal:attributes=" + checked python:test(specification == 'client', 'checked', None); + tabindex tabindex/next"/> +<label i18n:translate="label_client" + >Client</label> +</form> +--> +</td><td align="right"> +<p:hazardous + tal:condition="sampletype/getHazardous"> +<img src="" tal:attributes="src string:${portal/absolute_url}/hazardous.png"> +</p:hazardous> +</td></tr></table> + +<form name="edit_results" + method="post" + action="." + tal:attributes="action python:here.absolute_url()+'/'+template.id"> + +<input type="hidden" name="form.submitted" value="1" /> +<input type="hidden" name="SampleUID" value="" + tal:attributes="value here/UID" /> + +<script type="text/javascript" src="sample_form.js"></script> +<script type="text/javascript" src="utils.js"></script> +<script type="text/javascript" src="calcs.js"></script> + +<p tal:condition="not: batch" + i18n:translate="analysisrequest_no_analyses"> +This request contains no analyses +</p> + +<table + class="listing" + summary="Content listing" + cellpadding="0" cellspacing="0" + tal:define=" + colspan python:6; + colspan python:analysis_attach_allowed and (colspan + 1) or colspan"> + +<thead> + +<metal:block tal:condition="batch|nothing"> +<tr> +<th class="nosort"> +<input + class="noborder" + type="checkbox" + src="select_all_icon.gif" + name="selectButton" + title="Select all items" + onClick="toggleSelect(this);" + tal:attributes="src string:$portal_url/select_all_icon.gif" + alt="Select all items" + i18n:attributes="title; alt" + /> +</th> +<th i18n:translate="label_analysis">Analysis</th> +<th> +<span i18n:translate="label_result">Result</span> +</th> +<!-- +<th i18n:translate="label_retested">Retested</th> +<th i18n:translate="label_variation">+/-</th> +<th i18n:translate="label_status">Status</th> +<th tal:condition="analysis_attach_allowed" + i18n:translate="label_attachments">Attachments</th> +--> +</tr> +</metal:block> + +</thead> + +<metal:block tal:condition="batch|nothing"> +<tbody> +<metal:block tal:repeat="item batch"> +<tal:analyses + tal:define="service item/getService"> +<tr tal:define=" + oddrow repeat/item/odd; + item_title_or_id item/title_or_id; + result item/getResult; " + + tal:attributes=" + class python:test(oddrow, 'even', 'odd')" > + +<td> + +<input type="checkbox" class="noborder" name="ids:list" id="#" value="#" + tal:attributes=" + value item/getId; + id python: 'cb_'+item.getId(); + tabindex tabindex/next|nothing; + alt string:Select $item_title_or_id; + title string:Select $item_title_or_id"/> +</td> + +<td class="left"> +<a onClick="" title="Click for details" + tal:attributes="onClick string:javascript:showMethod('$portal_url', '${item/getId}')" + tal:content="item/Title"> +Alcohol +</a> +</td> + +<tal:result> +<div tal:condition="python:ar_review_state in ('submitted', )"> + +<td> +<input size="10" name="" value="10" + tal:condition="python:ar_review_state in ('submitted', )" + tal:attributes=" + value result; + name string:results.${item/getId}:record; + tabindex tabindex/next"/> +<!-- style = "height:21px;width:152px;position:absolute;margin:-1px" --> +<span tal:content="item/getUnit">ml</span> +</td> +</div> + +<div tal:condition="python:ar_review_state in ('published', )"> +<tal:resultentered + tal:define=" + result_class python:here.result_in_range(item, sampletype.UID(), specification); + global out_of_range python:result_class == 'out_of_range' and 1 or out_of_range"> +<td tal:attributes="class result_class"> +<span tal:content="result">10.00</span> +<span tal:content="item/getUnit">ml</span> +<img tal:condition="python:result_class == 'out_of_range'" + src="" tal:attributes="src string:${portal/absolute_url}/exclamation.png"> +</td> +</tal:resultentered> +</div> +</tal:result> +<!-- +<td align="center"> +<div + tal:define="item_id item/getId" + tal:condition="python:review_state in ('sample_received', 'assigned')"> +<input class="noborder" type="checkbox" name="Retested_visible" + value="on" id="Retested" + onclick="" + tal:define="input_id string:${item_id}.Retested" + tal:attributes=" + id input_id; + checked item/getRetested; + onclick string:javascript:toggleBoolean('${item_id}.Retested', '${item_id}.Retested_hidden')"/> +<input type="hidden" name="" + value="" id="" + tal:define=" + input_name string:results.${item_id}.Retested; + input_id string:${item_id}.Retested_hidden" + tal:attributes=" + id input_id; + name string:${input_name}:record; + value item/getRetested"/> +</div> +<div tal:condition="python:review_state not in ('sample_received', 'assigned')"> +<span class="retested" + tal:condition="item/getRetested" + i18n:translate="retested">retested</span> +</div> +</td> + +<tal:uncertainties + condition="result"> +<td tal:content="item/getUncertainty">0.1</td> +</tal:uncertainties> +<tal:no_uncertainties + condition="python:not result"> +<td></td> +</tal:no_uncertainties> +<td class="private" + tal:content="structure python:test(review_state, review_state, ' ')" + tal:attributes=" + class python:test(review_state, 'state-'+review_state, 'state-private')" + i18n:translate=""> +</td> +<td tal:condition="analysis_attach_allowed"> +<div tal:condition="python:not service.getAttachmentOption() == 'n'"> +<tal:attachments + tal:define="attachments item/getAttachment | nothing; + delete_attachments python:True"> +<div tal:condition="attachments_allowed"> +<metal:block use-macro="here/attachments/macros/analysis_attachments_list"/> +</div> +</tal:attachments> +</div> +</td> +--> +</tr> +</tal:analyses> + +</metal:block> +</tbody> +</metal:block> + +</table> + + +<input class="context" + tabindex="" + type="submit" + name="form_submit" + value="Save" + i18n:attributes="value" + tal:attributes="tabindex tabindex/next" + /> +<input class="standalone" + tabindex="" + type="submit" + name="form.button.cancel" + value="Cancel" + i18n:attributes="value" + tal:attributes="tabindex tabindex/next" + /> +<br/> +<br/> +<!-- +<div class="discreeter"> +<p tal:condition="out_of_range"> +<img src="" tal:attributes="src string:${portal/absolute_url}/exclamation.png"> +<span i18n:translate="legend_out_of_rangex"> +Result out of <tal:block replace="specification" i18n:name="spec"/> specified range +</span> +</p> +<p tal:condition="late"> +<img src="" tal:attributes="src string:${portal/absolute_url}/late_small.png"> +<span i18n:translate="legend_late">Late analysis</span> +</p> +</div> +--> +</form> + +</div> +</div> + +</body> +</html> + + Added: tracer/skins/bika/sample_edit_results_form.cpt.metadata =================================================================== --- tracer/skins/bika/sample_edit_results_form.cpt.metadata (rev 0) +++ tracer/skins/bika/sample_edit_results_form.cpt.metadata 2013-11-18 12:23:45 UTC (rev 3443) @@ -0,0 +1,7 @@ +[default] +title=Edit sample + +[actions] +action.success = traverse_to:string:sample_edit_results +action.failure = traverse_to:string:sample_edit__results_form + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ann...@us...> - 2013-09-10 10:15:00
|
Revision: 3442 http://sourceforge.net/p/bika/code/3442 Author: anneline Date: 2013-09-10 10:14:57 +0000 (Tue, 10 Sep 2013) Log Message: ----------- designation Modified Paths: -------------- tracer/Tools.py tracer/skins/bika/staffing/Personnel.csv tracer/skins/bika/staffing/Personnel_small.csv tracer/skins/bika/validate_integrity.cpy.metadata Modified: tracer/Tools.py =================================================================== --- tracer/Tools.py 2013-09-10 08:56:00 UTC (rev 3441) +++ tracer/Tools.py 2013-09-10 10:14:57 UTC (rev 3442) @@ -1278,7 +1278,7 @@ security.declareProtected(ManageSample, 'import_file') def import_file(self, csvfile): - # Salutation, Firstname, Surname, DOB, Nationality, Residence, LanguageList, EmailAddress, Email2, MobilePhone, HomePhone, Physical Address, Postal Address, NextOfKin, NextOfKinPhone, PermanentEmployee, Deployable, NewApplicant, DateAvailable, JobTitle, Skills, notes, photo, resume, supportingdoc] + # Salutation, Firstname, Surname, DOB, Nationality, Residence, LanguageList, EmailAddress, Email2, MobilePhone, HomePhone, Physical Address, Postal Address, NextOfKin, NextOfKinPhone, PermanentEmployee, Deployable, NewApplicant, DateAvailable, JobTitle, Designation, Skills, notes, photo, resume, supportingdoc] results = {'added': [], 'notadded':[], @@ -1293,6 +1293,11 @@ for country in countries: country_dict[country.lower()] = country + designations_dict = {} + designations = self.portal_catalog(portal_type='Designation') + for designation in designations: + designations_dict[designation.Title.lower()] = designation.UID + skills_dict = {} skills = self.portal_catalog(portal_type='SkillType') for skill in skills: @@ -1377,7 +1382,15 @@ else: results['errors'].append('%s - residence %s invalid: not loaded' %(row[3], this_residence)) - these_skills = row[21].split(';') + designation = None + if row[21]: + this_designation = row[21].strip().lower() + if designations_dict.has_key(this_designation): + designation = designations_dict[this_designation] + else: + results['errors'].append('%s - designation %s invalid: not loaded' %(row[3], this_designation)) + + these_skills = row[22].split(';') formatted_skills = [] for this in these_skills: these_items = this.split(',') @@ -1416,6 +1429,7 @@ DateAvailable=dateavailable, JobTitle=row[20], Skills=formatted_skills, + Designation=designation, DateLoaded=DateTime(), ) Modified: tracer/skins/bika/staffing/Personnel.csv =================================================================== --- tracer/skins/bika/staffing/Personnel.csv 2013-09-10 08:56:00 UTC (rev 3441) +++ tracer/skins/bika/staffing/Personnel.csv 2013-09-10 10:14:57 UTC (rev 3442) @@ -1,124 +1,124 @@ -Salutation,FirstName,Middle,Surname,DOB,Nationality,Residence,Languages,Email,2nd email,MobilePhone,HomePhone,Physical Address,Postal Address,Next Of Kin,Next of Kin Phone,SEMS emp,Deployable,New App,DateAvailable,Job Title,Skills,Notes,Photo,Resume,Supporting -,Abdul,,Tawiah,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Abel,,Ouedraogo,,Burkina Faso,Burkina Faso,French,abe...@se...,,22 676 156 340,,,,,,TRUE,FALSE,FALSE,,accountant,"Air Core, 2001, 2, ok; Trench mapping, 2011, 3, good man",,,, -,Abraham,,Bernard,,Liberia,Liberia,English,,,,231 886 535 734,,,,,TRUE,TRUE,FALSE,,Junior Field Assistant,,,,, -,Abrefa,Kyeremeh,Kwadwo,,Ghana,Ghana,English,gh...@se...,,,,,,,,TRUE,TRUE,FALSE,,Project geologist,,,,Kwadwo_Abrefa.pdf, -,Abrefa,,Nana,,Ghana,Liberia,English,nan...@ya...,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Agyei,,Badu,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Albert,,Heletsi,,Ghana,Ghana,English,ma...@ya...,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Alexander,,Boakye,,Ghana,Ghana,,,,75 72 49 79,,,,,,TRUE,TRUE,FALSE,,Technician,,,,, -, Ali,,Ziungrana,,Burkina Faso,Burkina Faso,,,,76 34 21 70,,,,,,,,,,Technician,,,,, -,Alice,,Ouedraogo,,Burkina Faso,Burkina Faso,"French, English",ali...@se...,,+226 75 48 54 55,,,,,,TRUE,FALSE,FALSE,,executive assistant,,,,, -,Aloysius,,Watson,,Liberia,Liberia,English,alo...@ya...,,231 776 925 291,231 886 333 365,,,,,TRUE,TRUE,FALSE,,Junior Field Assistant,,,,, -,Aly,,Diaby,31/08/1981,Cote D'Ivoire,Cote D'Ivoire,"English, French",Ham...@se... ,,07 69 36 94,,,,,,TRUE,TRUE,TRUE,,GIS,GIS,,Had_DV_loterry.jpg,, -,Andulai,,Abubakari,,Ghana,Liberia,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Anneline,,Sweetnam,08/11/1960,South Africa,Burkina Faso,"English, French, German, Afrikaans",ann...@se...,,22 666 295 956,,,,,,TRUE,FALSE,FALSE,,IT,,,,, -,Anthony,,Owusu-Ansah,,Ghana,Ghana,English,Ant...@se...,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Bakary,,Coulibaly,13/06/1971,Cote D'Ivoire,Cote D'Ivoire,"French, English",bak...@se...,ab...@ya...,74 97 31 82,05 52 86 72,,,,,TRUE,TRUE,FALSE,,geologist,Mapping; Soil sampling;Report writing,,,, -,Ben,,Sampah,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Benoit,,Anoukome,17/11/1981,Cote D'Ivoire,Cote D'Ivoire,French,,,05 54 19 03,,,,,,TRUE,TRUE,FALSE,,technician,Mapping;Soil sampling,,,, -,Bernard,,McDonald,27/12/1947,South Africa,South Africa,"English, Afrikaans, Portuguese, Spanish",ber...@ya...,,27 825 504 690,,,,,,FALSE,TRUE,TRUE,,mineral resource contractor,,,,McDonald_Bernard.doc, -,Bonyaah,,Yirimambo,17/10/1987,Ghana,Ghana,"English, French",ybo...@ya...,,2.33E+12,,,,,,FALSE,TRUE,TRUE,,geologist,,,,Yirimambo_Bonyaah.doc, -,Boukare,,Guigma,,Burkina Faso,Burkina Faso,,,,77 17 38 20,,,,,,,,,,Cleaner Guest House,,,,, -,Charles,,Vibrah,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Clemence,,Afeke,,Ghana,Ghana,English,cle...@se...,c_...@ya...,76 68 89 50,,,,,,TRUE,TRUE,FALSE,,Geologist,,,,, -,Clement,,Asare,,Ghana,Ghana,English,cle...@se...,,233 243 488 542,,,,,,TRUE,TRUE,FALSE,,IT manager,,,,, -,Clive,,Hastings,,,,,,,77 69 33 33,,,,,,,,,,Contract Geologist,,clivehastings,cli...@ya...,, -,Cyrus,,Bartee,,Liberia,Liberia,English,cyr...@ya...,,,231 886 670 837,,,,,TRUE,TRUE,FALSE,,Driver,,,,, -,Daniel,,Adusei,,Ghana,Ghana,English,adu...@ya...,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Daniel,,Forson,,Ghana,Ghana,English,,,77 36 88 93,,,,,,TRUE,TRUE,FALSE,,Technician,,,,, -,David,,Byrne,07/08/1961,Australia,Cote D'Ivoire,English,dav...@se...,,55 89 06 84 ,,,,,,TRUE,TRUE,FALSE,,,,,Byrne_David.png,, -,David,,Zio,,Burkina Faso,Burkina Faso,French,,,+22676 56 68 18,,,,,,TRUE,TRUE,FALSE,,driver,,,,, -,Dieudonne,,Kabore,,Burkina Faso,Burkina Faso,,die...@se...,,76 83 79 85,,,,,,,,,,Geologist,,,ero...@ya...,, -,Djibrile,,Ouattara,18/02/1986,Cote D'Ivoire,Cote D'Ivoire,French,dji...@gm...,,09 93 54 06,,,,,,TRUE,TRUE,TRUE,,geologist,Mapping;Soil sampling,,,, -,Douhaib,,Sakani,,Algeria,Burkina Faso,"French, English",dou...@gm...,sak...@li...,77 61 92 92,75 52 54 79,,,,,TRUE,TRUE,FALSE,,geologist,,,,, -,Edward,,Obeng,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Emmanuel,,Attom,,Ghana,Ghana,English,bom...@ya...,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Emmanuel,,Boakye,,Ghana,Ghana,English,emm...@se...,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Emmanuel,,Johnson,,Liberia,Liberia,English,,,,231 886 472 336,,,,,TRUE,TRUE,FALSE,,Junior Field Assistant,,,,, -,Eric,,Nketsiah,,Ghana,Ghana,English,aba...@ya...,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Ezekiel,,Kafui,,Ghana,Ghana,English,eze...@gm...,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Fidelis,,Akakpo,,Ghana,Ghana,English,fid...@ya...,"fidelis855@yahoo,fr",75 70 23 78,,,,,,TRUE,TRUE,FALSE,,Geologist,,,,, -,Florent,,N'Guessan,20/04/1980,Cote D'Ivoire,Cote D'Ivoire,French,flo...@ya...,,05 53 99 43,,,,,,TRUE,TRUE,FALSE,,technician,Mapping;Soil sampling,,,, -,Foster,,Okyere,,Ghana,Ghana,English,fos...@ya...,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Francis,,Brown,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Francis,,Coffie,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Francis,,Okai,,Ghana,Liberia,English,atu...@ya...,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Fraser,,Kouakou,10/06/1984,Cote D'Ivoire,Cote D'Ivoire,French,fra...@ya...,,05 53 61 52,,,,,,TRUE,TRUE,FALSE,,technician,Mapping;Soil sampling; Diamond,,,, -,Gabriel,,Akakpo,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Ghislain,,Tourigny,,Canada,Canada,"English, French",af...@ho...,,22 674 444 471,,,,,,TRUE,TRUE,FALSE,,Exploration manager,,,Tourigny_Ghislain.jpg,, -,Gifty,,Quartey,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Grace,,F-Karnley,,Liberia,Liberia,English,,,231 776 887 467,231 886 563 994,,,,,TRUE,FALSE,FALSE,,Administrator,,,,, -,Hamed,,Diaby,,Cote D'Ivoire,Burkina Faso,"French, English",ham...@se...,ali...@ya...,+226 77 64 06 06,,,,,,TRUE,TRUE,FALSE,,GIS geologist,,,,, -,Harouna,,Tapsoba,,Burkina Faso,Burkina Faso,French,,,+226 76 64 85 13,,,,,,TRUE,TRUE,FALSE,,driver,,,,, -,Harry,,van den Berg,,Netherlands,Netherlands,"English, French, Dutch",har...@se...,,,,,,,,TRUE,TRUE,FALSE,,Geophysicist,,,vandenBerg_Harry.jpg,, -,Herve,,Bassono,,Burkina Faso,Burkina Faso,,,,70 61 64 66,,,,,,,,,,Geologist,,,bas...@ya...,, -,Ibrahim,,Maiga,,Burkina Faso,Burkina Faso,,,,77 15 71 37,,,,,,,,,,Technician,,,,, -,Ibrahima,,Mahamadou,03/06/1905,Nigeria,Nigeria,,nam...@ya...,,22 790 379 312,,,,,,FALSE,TRUE,TRUE,,geologist,,,,Mahamadou_Ibrahima.doc, -,Isabelle,,Guirma,,Burkina Faso,Burkina Faso,"English, French",isa...@se...,,+226 76 54 16 16,,,,,,TRUE,FALSE,FALSE,,Country Manager,,,Guirma_Isabelle.png,, -,Jean Wilfried,,Sandwidi,,Burkina Faso,Burkina Faso,,jea...@se...,,76 73 55 86,,,,,,,,,,Geologist,,,jwi...@ya...,, -,Japhet,,Benisah,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Joe,,Amanor,,Ghana,Ghana,English,Joe...@se...,,244 317 600,,,,,,TRUE,FALSE,FALSE,,Consultant Geologist,,,Amanor_Joe.jpg,, -,Joe,,Kwesie,,Ghana,Ghana,English,jk...@ya...,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,John,,Coates,,United Kingdom,Ghana,English,joh...@se...,,,,,,,,TRUE,FALSE,FALSE,,Geologist,,,,, -,John,,Mensah,,Ghana,Ghana,English,,,77 17 38 19,,,,,,TRUE,TRUE,FALSE,,Driver,,,,, -,John,,Tapoah,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Jones,,Owusu,,Ghana,Ghana,English,jon...@ya...,jog...@ya...,77 14 63 93,,,,,,TRUE,TRUE,FALSE,,Geologist,,,,, -,Jones,,Williams,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Joseph,,Collins,,Liberia,Liberia,English,joe...@se...,,231 776 585 654/0770168126,231 886 222 269,,,,,TRUE,TRUE,FALSE,,Country Manager,,,Collins_Joe.png,, -,Joseph,,Eck,,Ghana,Ghana,English,,,,,,,,,FALSE,TRUE,FALSE,,,,,,, -,Justice,,Asante,,Ghana,Ghana,English,,,77 49 35 67,,,,,,TRUE,TRUE,FALSE,,Technician,,,,, -,Kim,,Clarke,,Liberia,Liberia,English,alc...@ya...,,231 776 991 724,231 886 542 831,,,,,TRUE,TRUE,FALSE,,Logistic Officer,,,,, -,Kingsley,,Antobam,,Ghana,Ghana,English,ant...@gm...,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Kofi,,Ababio,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Kofi,,Darko,,Ghana,Ghana,English,dar...@ya...,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Kula,,Samai,,Liberia,Liberia,English,,,,231 5 813 499,,,,,TRUE,TRUE,FALSE,,Cook,,,,, -,Kwaku,,Owusu-Ansah,,Ghana,Burkina Faso,English,kwa...@se...,koa...@gm...,74 39 33 09,,,,,,TRUE,TRUE,FALSE,,GIS Geologist,,,,, -,Kwame,,Asege,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,K. Fraser,,Konan,,Burkina Faso,Burkina Faso,,,,77 53 31 69,,,,,,,,,,Technician,,,,, -,Lacina,,Kabore,,Burkina Faso,Burkina Faso,,lac...@se...,,75 11 11 35,,,,,,,,,,Geologist,,,lac...@gm...,, -,Leonard,,Galley,,Ghana,Ghana,English,lga...@gm...,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Mamadou,,Bikienga,,Burkina Faso,Burkina Faso,,,,76 11 38 37,,,,,,,,,,Technician,,,,, -,Marguerite,,Zongo,,Burkina Faso,Burkina Faso,"French, English",maf...@se...,zon...@ya... ,+226 75 99 50 88,,,,,,TRUE,FALSE,FALSE,,executive assistant,,,,, -,Martial,,Bosse,22/03/1982,Cote D'Ivoire,Cote D'Ivoire,French,bos...@gm...,,06 90 27 29,,,,,,TRUE,TRUE,TRUE,,geologist,Mapping; Soil sampling,,,, -,Martin,,Trac,,United States,Liberia,English,ge....@ya...,,231 776 630 440,231 886 851 805,,,,,TRUE,TRUE,FALSE,,Field Manager,,,Trac_Martin.png,, -,Martin,,Zoungrana,,Burkina Faso,Burkina Faso,French,mar...@se...,tin...@ya...,+226 76 39 45 90,,,,,,TRUE,FALSE,FALSE,,Chief accountant,,,,, -,Mathieu,,Amoah,25/10/1976,Cote D'Ivoire,Cote D'Ivoire,French,bad...@ya...,,05 51 87 32,,,,,,TRUE,TRUE,FALSE,,geologist,Mapping; Soil sampling;Report writing ,,,, -,Maxwell,,Doe,,Liberia,Liberia,English,,,231 777 613 632,232 886 842 783,,,,,TRUE,TRUE,FALSE,,Field Driver,,,,, -,Metthew,,Addy,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Mohammed,,Kamel,,Liberia,Liberia,English,moh...@ya...,,231 777 613 652,231 886 937 749,,,,,TRUE,TRUE,FALSE,,Senior Geology Assistant,,,,, -,Mohammed,,Tetteh,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Moumouni,,Sana,,Burkina Faso,Burkina Faso,,,,75 49 90 90,,,,,,,,,,Driver,,,,, -,Mustapha,,Nibel,,Liberia,Liberia,English,,,231 776 585 650,231 886 910 286,,,,,TRUE,FALSE,FALSE,,Care Taker,,,,, -,M. Geraphin,,Kientega,,Burkina Faso,Burkina Faso,,,,76 82 26 31,,,,,,,,,,Technician,,,mik...@ya...,, -,Nadja,,Golz,,Germany,Ghana,"English, German",nad...@gm...,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Nana,,Abrefa,,Burkina Faso,Burkina Faso,,,,,,,,,,,,,,Geologist,,, nan...@ya...,, -,Nestor N.,,Houssou,,Burkina Faso,Burkina Faso,,nes...@se...,,77 12 68 44,,,,,,,,,,Geologist,,,nes...@gm...,, -,Paterne,,Meledje,07/06/1980,Cote D'Ivoire,Cote D'Ivoire,French,pat...@gm...,,05 51 80 59,,,,,,TRUE,TRUE,TRUE,,geologist,Mapping; Soil sampling,,,, -,Patrice,,Lankoande,,Burkina Faso,Burkina Faso,,,,76 33 46 34,,,,,,,,,,Cook,,,,, -,Paul,,Howe,08/11/1952,United Kingdom,Burkina Faso,"English, French, Afrikaans, Portuguese",pau...@se...,,22 674 423 736,,,,,,TRUE,TRUE,FALSE,,field manager,,,Howe_Paul.jpg,, -,Paul,,Kabore,,Burkina Faso,Burkina Faso,French,,,+226 76 70 70 23,,,,,,TRUE,TRUE,FALSE,,driver,,,,, -,Peter,,Etsibah,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Peter,,Walker,07/05/1947,South Africa,South Africa,"English, French, Afrikaans, German",pa...@vp...,,+27 (72) 411 1108,,,,,,FALSE,TRUE,TRUE,,geologist,,,,Walker_Peter.pdf, -,Prince,,Amponsah,,Ghana,Ghana,English,amp...@gm...,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Qian,,Zeng,,Burkina Faso,Burkina Faso,,,,77 42 51 58,,,,,,,,,,Geologist,,,qia...@ho...,, -,Rose,,Amoak,,Ghana,Ghana,English,ro...@se...,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Samuel,Wiafe,Andoh,04/10/1987,Ghana,Ghana,"English, French, Hausa, Twi",sam...@ya...,,,,,,,,FALSE,TRUE,TRUE,,geologist,,,,Andoh_Samuel.doc, -,Samuel,,Nyentaki,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Selina,,Amegashie,,Ghana,Ghana,English,Sel...@se...,,,,,,,,TRUE,TRUE,FALSE,,secretary,,,,, -,Seydou,,Toure,,Burkina Faso,Burkina Faso,,,,,,,,,,,,,,Contract Geologist,,,,, -,Shad,,Walker,,Liberia,Liberia,English,al_...@ya...,,231 776 585 616,231 886 576 881,,,,,TRUE,TRUE,FALSE,,Junior Field Assistant,,,,, -,Siaka,,,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Simon,,Meadows Smith,,United Kingdom,Ghana,English,si...@se...,,+233 244 32 22 24,,,,,,TRUE,FALSE,FALSE,,Managing Director,,,simon1.jpg,, -,Simon,,Tetteh,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Stanislas,,de Stabenrath,23/08/1980,France,Cote D'Ivoire,"French, English",st...@se...,,04 12 21 21,,,,,,TRUE,TRUE,FALSE,,,,,stan.jpg,, -,Stephane S.,,Zongo,,Burkina Faso,Burkina Faso,,,,74 13 88 18,,,,,,,,,,Technician,,,,, -,Steve,,Jones,,United Kingdom,Ghana,English,Ste...@se...,,,,,,,,TRUE,TRUE,FALSE,,Commercial Manager,,,,, -,Sylvain,,Brou,30/09/1979,Cote D'Ivoire,Cote D'Ivoire,French,bro...@ho...,,05 54 13 73,,,,,,TRUE,TRUE,FALSE,,geologist,Mapping ; Soil sampling; Report writing;,,,, -,Theophile,,Nikiema,,Burkina Faso,Burkina Faso,,the...@se...,,+226 76 45 12 72,,,,,,TRUE,FALSE,FALSE,,logistics manager,,,,, -,Varney,,Gray,,Liberia,Liberia,English,gfb...@ya...,,231 776 585 651,231 886 542 734,,,,,TRUE,TRUE,FALSE,,Senior Geology Assistant,,,,, -,William,,Gyapong,,Ghana,Burkina Faso,English,wil...@ya...,,74 25 45 93,,,,,,TRUE,TRUE,FALSE,,geologist,,,,, -,Yarrow,,Mohammed,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Yekeh,,Zaza,,Liberia,Liberia,English,,,231 777 064 684,,,,,,TRUE,TRUE,FALSE,,Student Geologist,,,,, -,Zana,,Ouattara,07/07/1987,Cote D'Ivoire,Cote D'Ivoire,"French, English",zan...@gm...,,75 48 58 28,09 18 22 81,,,,,TRUE,TRUE,FALSE,,geologist,Mapping ;Soil sampling;Report writing ; Diamond;Rab;Air Core;RC,,,, -Mr,Clement,Theophile,Koama,,Burkina Faso,Burkina Faso,,cle...@ya...,,22670225625,,,"PO Box 2564, Ouaga 01 Burkina Faso",,,FALSE,TRUE,TRUE,,grologist,soil sampling; mapping; ,,,, +Salutation,FirstName,Middle,Surname,DOB,Nationality,Residence,Languages,Email,2nd email,MobilePhone,HomePhone,Physical Address,Postal Address,Next Of Kin,Next of Kin Phone,SEMS emp,Deployable,New App,DateAvailable,Job Title,Designation,Skills,Notes,Photo,Resume,Supporting +,Abdul,,Tawiah,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Abel,,Ouedraogo,,Burkina Faso,Burkina Faso,French,abe...@se...,,22 676 156 340,,,,,,TRUE,FALSE,FALSE,,accountant,Accountant,"Air Core, 2001, 2, ok; Trench mapping, 2011, 3, good man",,,, +,Abraham,,Bernard,,Liberia,Liberia,English,,,,231 886 535 734,,,,,TRUE,TRUE,FALSE,,Junior Field Assistant,,,,,, +,Abrefa,Kyeremeh,Kwadwo,,Ghana,Ghana,English,gh...@se...,,,,,,,,TRUE,TRUE,FALSE,,Project geologist,,,,,Kwadwo_Abrefa.pdf, +,Abrefa,,Nana,,Ghana,Liberia,English,nan...@ya...,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Agyei,,Badu,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Albert,,Heletsi,,Ghana,Ghana,English,ma...@ya...,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Alexander,,Boakye,,Ghana,Ghana,,,,75 72 49 79,,,,,,TRUE,TRUE,FALSE,,Technician,,,,,, +, Ali,,Ziungrana,,Burkina Faso,Burkina Faso,,,,76 34 21 70,,,,,,,,,,Technician,,,,,, +,Alice,,Ouedraogo,,Burkina Faso,Burkina Faso,"French, English",ali...@se...,,+226 75 48 54 55,,,,,,TRUE,FALSE,FALSE,,executive assistant,,,,,, +,Aloysius,,Watson,,Liberia,Liberia,English,alo...@ya...,,231 776 925 291,231 886 333 365,,,,,TRUE,TRUE,FALSE,,Junior Field Assistant,,,,,, +,Aly,,Diaby,31/08/1981,Cote D'Ivoire,Cote D'Ivoire,"English, French",Ham...@se... ,,07 69 36 94,,,,,,TRUE,TRUE,TRUE,,GIS,,GIS,,Had_DV_loterry.jpg,, +,Andulai,,Abubakari,,Ghana,Liberia,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Anneline,,Sweetnam,08/11/1960,South Africa,Burkina Faso,"English, French, German, Afrikaans",ann...@se...,,22 666 295 956,,,,,,TRUE,FALSE,FALSE,,IT,,,,,, +,Anthony,,Owusu-Ansah,,Ghana,Ghana,English,Ant...@se...,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Bakary,,Coulibaly,13/06/1971,Cote D'Ivoire,Cote D'Ivoire,"French, English",bak...@se...,ab...@ya...,74 97 31 82,05 52 86 72,,,,,TRUE,TRUE,FALSE,,geologist,,Mapping; Soil sampling;Report writing,,,, +,Ben,,Sampah,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Benoit,,Anoukome,17/11/1981,Cote D'Ivoire,Cote D'Ivoire,French,,,05 54 19 03,,,,,,TRUE,TRUE,FALSE,,technician,,Mapping;Soil sampling,,,, +,Bernard,,McDonald,27/12/1947,South Africa,South Africa,"English, Afrikaans, Portuguese, Spanish",ber...@ya...,,27 825 504 690,,,,,,FALSE,TRUE,TRUE,,mineral resource contractor,,,,,McDonald_Bernard.doc, +,Bonyaah,,Yirimambo,17/10/1987,Ghana,Ghana,"English, French",ybo...@ya...,,2.33E+12,,,,,,FALSE,TRUE,TRUE,,geologist,,,,,Yirimambo_Bonyaah.doc, +,Boukare,,Guigma,,Burkina Faso,Burkina Faso,,,,77 17 38 20,,,,,,,,,,Cleaner Guest House,,,,,, +,Charles,,Vibrah,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Clemence,,Afeke,,Ghana,Ghana,English,cle...@se...,c_...@ya...,76 68 89 50,,,,,,TRUE,TRUE,FALSE,,Geologist,,,,,, +,Clement,,Asare,,Ghana,Ghana,English,cle...@se...,,233 243 488 542,,,,,,TRUE,TRUE,FALSE,,IT manager,,,,,, +,Clive,,Hastings,,,,,,,77 69 33 33,,,,,,,,,,Contract Geologist,,,clivehastings,cli...@ya...,, +,Cyrus,,Bartee,,Liberia,Liberia,English,cyr...@ya...,,,231 886 670 837,,,,,TRUE,TRUE,FALSE,,Driver,,,,,, +,Daniel,,Adusei,,Ghana,Ghana,English,adu...@ya...,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Daniel,,Forson,,Ghana,Ghana,English,,,77 36 88 93,,,,,,TRUE,TRUE,FALSE,,Technician,,,,,, +,David,,Byrne,07/08/1961,Australia,Cote D'Ivoire,English,dav...@se...,,55 89 06 84 ,,,,,,TRUE,TRUE,FALSE,,,,,,Byrne_David.png,, +,David,,Zio,,Burkina Faso,Burkina Faso,French,,,+22676 56 68 18,,,,,,TRUE,TRUE,FALSE,,driver,,,,,, +,Dieudonne,,Kabore,,Burkina Faso,Burkina Faso,,die...@se...,,76 83 79 85,,,,,,,,,,Geologist,,,,ero...@ya...,, +,Djibrile,,Ouattara,18/02/1986,Cote D'Ivoire,Cote D'Ivoire,French,dji...@gm...,,09 93 54 06,,,,,,TRUE,TRUE,TRUE,,geologist,,Mapping;Soil sampling,,,, +,Douhaib,,Sakani,,Algeria,Burkina Faso,"French, English",dou...@gm...,sak...@li...,77 61 92 92,75 52 54 79,,,,,TRUE,TRUE,FALSE,,geologist,,,,,, +,Edward,,Obeng,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Emmanuel,,Attom,,Ghana,Ghana,English,bom...@ya...,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Emmanuel,,Boakye,,Ghana,Ghana,English,emm...@se...,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Emmanuel,,Johnson,,Liberia,Liberia,English,,,,231 886 472 336,,,,,TRUE,TRUE,FALSE,,Junior Field Assistant,,,,,, +,Eric,,Nketsiah,,Ghana,Ghana,English,aba...@ya...,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Ezekiel,,Kafui,,Ghana,Ghana,English,eze...@gm...,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Fidelis,,Akakpo,,Ghana,Ghana,English,fid...@ya...,"fidelis855@yahoo,fr",75 70 23 78,,,,,,TRUE,TRUE,FALSE,,Geologist,,,,,, +,Florent,,N'Guessan,20/04/1980,Cote D'Ivoire,Cote D'Ivoire,French,flo...@ya...,,05 53 99 43,,,,,,TRUE,TRUE,FALSE,,technician,,Mapping;Soil sampling,,,, +,Foster,,Okyere,,Ghana,Ghana,English,fos...@ya...,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Francis,,Brown,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Francis,,Coffie,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Francis,,Okai,,Ghana,Liberia,English,atu...@ya...,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Fraser,,Kouakou,10/06/1984,Cote D'Ivoire,Cote D'Ivoire,French,fra...@ya...,,05 53 61 52,,,,,,TRUE,TRUE,FALSE,,technician,,Mapping;Soil sampling; Diamond,,,, +,Gabriel,,Akakpo,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Ghislain,,Tourigny,,Canada,Canada,"English, French",af...@ho...,,22 674 444 471,,,,,,TRUE,TRUE,FALSE,,Exploration manager,,,,Tourigny_Ghislain.jpg,, +,Gifty,,Quartey,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Grace,,F-Karnley,,Liberia,Liberia,English,,,231 776 887 467,231 886 563 994,,,,,TRUE,FALSE,FALSE,,Administrator,,,,,, +,Hamed,,Diaby,,Cote D'Ivoire,Burkina Faso,"French, English",ham...@se...,ali...@ya...,+226 77 64 06 06,,,,,,TRUE,TRUE,FALSE,,GIS geologist,,,,,, +,Harouna,,Tapsoba,,Burkina Faso,Burkina Faso,French,,,+226 76 64 85 13,,,,,,TRUE,TRUE,FALSE,,driver,,,,,, +,Harry,,van den Berg,,Netherlands,Netherlands,"English, French, Dutch",har...@se...,,,,,,,,TRUE,TRUE,FALSE,,Geophysicist,,,,vandenBerg_Harry.jpg,, +,Herve,,Bassono,,Burkina Faso,Burkina Faso,,,,70 61 64 66,,,,,,,,,,Geologist,,,,bas...@ya...,, +,Ibrahim,,Maiga,,Burkina Faso,Burkina Faso,,,,77 15 71 37,,,,,,,,,,Technician,,,,,, +,Ibrahima,,Mahamadou,03/06/1905,Nigeria,Nigeria,,nam...@ya...,,22 790 379 312,,,,,,FALSE,TRUE,TRUE,,geologist,,,,,Mahamadou_Ibrahima.doc, +,Isabelle,,Guirma,,Burkina Faso,Burkina Faso,"English, French",isa...@se...,,+226 76 54 16 16,,,,,,TRUE,FALSE,FALSE,,Country Manager,,,,Guirma_Isabelle.png,, +,Jean Wilfried,,Sandwidi,,Burkina Faso,Burkina Faso,,jea...@se...,,76 73 55 86,,,,,,,,,,Geologist,,,,jwi...@ya...,, +,Japhet,,Benisah,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Joe,,Amanor,,Ghana,Ghana,English,Joe...@se...,,244 317 600,,,,,,TRUE,FALSE,FALSE,,Consultant Geologist,,,,Amanor_Joe.jpg,, +,Joe,,Kwesie,,Ghana,Ghana,English,jk...@ya...,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,John,,Coates,,United Kingdom,Ghana,English,joh...@se...,,,,,,,,TRUE,FALSE,FALSE,,Geologist,,,,,, +,John,,Mensah,,Ghana,Ghana,English,,,77 17 38 19,,,,,,TRUE,TRUE,FALSE,,Driver,,,,,, +,John,,Tapoah,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Jones,,Owusu,,Ghana,Ghana,English,jon...@ya...,jog...@ya...,77 14 63 93,,,,,,TRUE,TRUE,FALSE,,Geologist,,,,,, +,Jones,,Williams,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Joseph,,Collins,,Liberia,Liberia,English,joe...@se...,,231 776 585 654/0770168126,231 886 222 269,,,,,TRUE,TRUE,FALSE,,Country Manager,,,,Collins_Joe.png,, +,Joseph,,Eck,,Ghana,Ghana,English,,,,,,,,,FALSE,TRUE,FALSE,,,,,,,, +,Justice,,Asante,,Ghana,Ghana,English,,,77 49 35 67,,,,,,TRUE,TRUE,FALSE,,Technician,,,,,, +,Kim,,Clarke,,Liberia,Liberia,English,alc...@ya...,,231 776 991 724,231 886 542 831,,,,,TRUE,TRUE,FALSE,,Logistic Officer,,,,,, +,Kingsley,,Antobam,,Ghana,Ghana,English,ant...@gm...,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Kofi,,Ababio,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Kofi,,Darko,,Ghana,Ghana,English,dar...@ya...,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Kula,,Samai,,Liberia,Liberia,English,,,,231 5 813 499,,,,,TRUE,TRUE,FALSE,,Cook,,,,,, +,Kwaku,,Owusu-Ansah,,Ghana,Burkina Faso,English,kwa...@se...,koa...@gm...,74 39 33 09,,,,,,TRUE,TRUE,FALSE,,GIS Geologist,,,,,, +,Kwame,,Asege,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,K. Fraser,,Konan,,Burkina Faso,Burkina Faso,,,,77 53 31 69,,,,,,,,,,Technician,,,,,, +,Lacina,,Kabore,,Burkina Faso,Burkina Faso,,lac...@se...,,75 11 11 35,,,,,,,,,,Geologist,,,,lac...@gm...,, +,Leonard,,Galley,,Ghana,Ghana,English,lga...@gm...,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Mamadou,,Bikienga,,Burkina Faso,Burkina Faso,,,,76 11 38 37,,,,,,,,,,Technician,,,,,, +,Marguerite,,Zongo,,Burkina Faso,Burkina Faso,"French, English",maf...@se...,zon...@ya... ,+226 75 99 50 88,,,,,,TRUE,FALSE,FALSE,,executive assistant,,,,,, +,Martial,,Bosse,22/03/1982,Cote D'Ivoire,Cote D'Ivoire,French,bos...@gm...,,06 90 27 29,,,,,,TRUE,TRUE,TRUE,,geologist,,Mapping; Soil sampling,,,, +,Martin,,Trac,,United States,Liberia,English,ge....@ya...,,231 776 630 440,231 886 851 805,,,,,TRUE,TRUE,FALSE,,Field Manager,,,,Trac_Martin.png,, +,Martin,,Zoungrana,,Burkina Faso,Burkina Faso,French,mar...@se...,tin...@ya...,+226 76 39 45 90,,,,,,TRUE,FALSE,FALSE,,Chief accountant,,,,,, +,Mathieu,,Amoah,25/10/1976,Cote D'Ivoire,Cote D'Ivoire,French,bad...@ya...,,05 51 87 32,,,,,,TRUE,TRUE,FALSE,,geologist,,Mapping; Soil sampling;Report writing ,,,, +,Maxwell,,Doe,,Liberia,Liberia,English,,,231 777 613 632,232 886 842 783,,,,,TRUE,TRUE,FALSE,,Field Driver,,,,,, +,Metthew,,Addy,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Mohammed,,Kamel,,Liberia,Liberia,English,moh...@ya...,,231 777 613 652,231 886 937 749,,,,,TRUE,TRUE,FALSE,,Senior Geology Assistant,,,,,, +,Mohammed,,Tetteh,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Moumouni,,Sana,,Burkina Faso,Burkina Faso,,,,75 49 90 90,,,,,,,,,,Driver,,,,,, +,Mustapha,,Nibel,,Liberia,Liberia,English,,,231 776 585 650,231 886 910 286,,,,,TRUE,FALSE,FALSE,,Care Taker,,,,,, +,M. Geraphin,,Kientega,,Burkina Faso,Burkina Faso,,,,76 82 26 31,,,,,,,,,,Technician,,,,mik...@ya...,, +,Nadja,,Golz,,Germany,Ghana,"English, German",nad...@gm...,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Nana,,Abrefa,,Burkina Faso,Burkina Faso,,,,,,,,,,,,,,Geologist,,,, nan...@ya...,, +,Nestor N.,,Houssou,,Burkina Faso,Burkina Faso,,nes...@se...,,77 12 68 44,,,,,,,,,,Geologist,,,,nes...@gm...,, +,Paterne,,Meledje,07/06/1980,Cote D'Ivoire,Cote D'Ivoire,French,pat...@gm...,,05 51 80 59,,,,,,TRUE,TRUE,TRUE,,geologist,,Mapping; Soil sampling,,,, +,Patrice,,Lankoande,,Burkina Faso,Burkina Faso,,,,76 33 46 34,,,,,,,,,,Cook,,,,,, +,Paul,,Howe,08/11/1952,,,,pau...@se...,,22 674 423 736,,,,,,TRUE,TRUE,FALSE,,field manager,,,,Howe_Paul.jpg,, +,Paul,,Kabore,,Burkina Faso,Burkina Faso,French,,,+226 76 70 70 23,,,,,,TRUE,TRUE,FALSE,,driver,,,,,, +,Peter,,Etsibah,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Peter,,Walker,07/05/1947,South Africa,South Africa,"English, French, Afrikaans, German",pa...@vp...,,+27 (72) 411 1108,,,,,,FALSE,TRUE,TRUE,,geologist,,,,,Walker_Peter.pdf, +,Prince,,Amponsah,,Ghana,Ghana,English,amp...@gm...,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Qian,,Zeng,,Burkina Faso,Burkina Faso,,,,77 42 51 58,,,,,,,,,,Geologist,,,,qia...@ho...,, +,Rose,,Amoak,,Ghana,Ghana,English,ro...@se...,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Samuel,Wiafe,Andoh,04/10/1987,Ghana,Ghana,"English, French, Hausa, Twi",sam...@ya...,,,,,,,,FALSE,TRUE,TRUE,,geologist,,,,,Andoh_Samuel.doc, +,Samuel,,Nyentaki,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Selina,,Amegashie,,Ghana,Ghana,English,Sel...@se...,,,,,,,,TRUE,TRUE,FALSE,,secretary,,,,,, +,Seydou,,Toure,,Burkina Faso,Burkina Faso,,,,,,,,,,,,,,Contract Geologist,,,,,, +,Shad,,Walker,,Liberia,Liberia,English,al_...@ya...,,231 776 585 616,231 886 576 881,,,,,TRUE,TRUE,FALSE,,Junior Field Assistant,,,,,, +,Siaka,,,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Simon,,Meadows Smith,,United Kingdom,Ghana,English,si...@se...,,+233 244 32 22 24,,,,,,TRUE,FALSE,FALSE,,Managing Director,,,,simon1.jpg,, +,Simon,,Tetteh,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Stanislas,,de Stabenrath,23/08/1980,France,Cote D'Ivoire,"French, English",st...@se...,,04 12 21 21,,,,,,TRUE,TRUE,FALSE,,,,,,stan.jpg,, +,Stephane S.,,Zongo,,Burkina Faso,Burkina Faso,,,,74 13 88 18,,,,,,,,,,Technician,,,,,, +,Steve,,Jones,,United Kingdom,Ghana,English,Ste...@se...,,,,,,,,TRUE,TRUE,FALSE,,Commercial Manager,,,,,, +,Sylvain,,Brou,30/09/1979,Cote D'Ivoire,Cote D'Ivoire,French,bro...@ho...,,05 54 13 73,,,,,,TRUE,TRUE,FALSE,,geologist,,Mapping ; Soil sampling; Report writing;,,,, +,Theophile,,Nikiema,,Burkina Faso,Burkina Faso,,the...@se...,,+226 76 45 12 72,,,,,,TRUE,FALSE,FALSE,,logistics manager,,,,,, +,Varney,,Gray,,Liberia,Liberia,English,gfb...@ya...,,231 776 585 651,231 886 542 734,,,,,TRUE,TRUE,FALSE,,Senior Geology Assistant,,,,,, +,William,,Gyapong,,Ghana,Burkina Faso,English,wil...@ya...,,74 25 45 93,,,,,,TRUE,TRUE,FALSE,,geologist,,,,,, +,Yarrow,,Mohammed,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Yekeh,,Zaza,,Liberia,Liberia,English,,,231 777 064 684,,,,,,TRUE,TRUE,FALSE,,Student Geologist,,,,,, +,Zana,,Ouattara,07/07/1987,Cote D'Ivoire,Cote D'Ivoire,"French, English",zan...@gm...,,75 48 58 28,09 18 22 81,,,,,TRUE,TRUE,FALSE,,geologist,,Mapping ;Soil sampling;Report writing ; Diamond;Rab;Air Core;RC,,,, +Mr,Clement,Theophile,Koama,,Burkina Faso,Burkina Faso,,cle...@ya...,,22670225625,,,"PO Box 2564, Ouaga 01 Burkina Faso",,,FALSE,TRUE,TRUE,,grologist,,soil sampling; mapping; ,,,, Modified: tracer/skins/bika/staffing/Personnel_small.csv =================================================================== --- tracer/skins/bika/staffing/Personnel_small.csv 2013-09-10 08:56:00 UTC (rev 3441) +++ tracer/skins/bika/staffing/Personnel_small.csv 2013-09-10 10:14:57 UTC (rev 3442) @@ -1,5 +1,122 @@ -Salutation,FirstName,Middle,Surname,DOB,Nationality,Residence,Languages,Email,2nd email,MobilePhone,HomePhone,Physical Address,Postal Address,Next Of Kin,Next of Kin Phone,SEMS emp,Deployable,New App,DateAvailable,Job Title,Skills,Notes,Photo,Resume,Supporting -,Abdul,,Tawiah,,Ghana,Ghana,English,,,,,,,,,TRUE,TRUE,FALSE,,,,,,, -,Abel,,Ouedraogo,,Burkina Faso,Burkina Faso,French,abe...@se...,,22 676 156 340,,,,,,TRUE,FALSE,FALSE,,accountant,"Air Core, 2001, 2, ok; Trench mapping, 2011, 3, good man",,,, -,Abraham,,Bernard,,Liberia,Liberia,English,,,,231 886 535 734,,,,,TRUE,TRUE,FALSE,,Junior Field Assistant,,,,, -,Abrefa,Kyeremeh,Kwadwo,,Ghana,Ghana,English,gh...@se...,,,,,,,,TRUE,TRUE,FALSE,,Project geologist,,,,Kwadwo_Abrefa.pdf, +Salutation,FirstName,Middle,Surname,DOB,Nationality,Residence,Languages,Email,2nd email,MobilePhone,HomePhone,Physical Address,Postal Address,Next Of Kin,Next of Kin Phone,SEMS emp,Deployable,New App,DateAvailable,Job Title,Designation,Skills,Notes,Photo,Resume,Supporting +,Abdul,,Tawiah,,,,,,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Abel,,Ouedraogo,,Burkina Faso,Burkina Faso,French,abe...@se...,,22 676 156 340,,,,,,TRUE,FALSE,FALSE,,,Accountant,"Air Core, 2001, 2, ok; Trench mapping, 2011, 3, good man",,,, +,Abraham,,Bernard,,Liberia,Liberia,English,,,,231 886 535 734,,,,,TRUE,TRUE,FALSE,,Junior Field Assistant,,,,,, +,Abrefa,,Nana,,Ghana,Liberia,English,nan...@ya...,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,Andyet,,AnotherOne,,belgium,Liberia,french,an...@co...,,,,,,,,TRUE,TRUE,FALSE,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,,,,,,,, Modified: tracer/skins/bika/validate_integrity.cpy.metadata =================================================================== --- tracer/skins/bika/validate_integrity.cpy.metadata 2013-09-10 08:56:00 UTC (rev 3441) +++ tracer/skins/bika/validate_integrity.cpy.metadata 2013-09-10 10:14:57 UTC (rev 3442) @@ -16,5 +16,7 @@ action.success.SampleType = redirect_to:string:.. action.success.SamplePoint = redirect_to:string:.. action.success.SkillType = redirect_to:string:.. +action.success.Designation = redirect_to:string:.. +action.success.Personnel = redirect_to:string:.. action.success.UTMSystem = redirect_to:string:.. action.failure = traverse_to:string:content_edit This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ann...@us...> - 2013-09-10 08:56:04
|
Revision: 3441 http://sourceforge.net/p/bika/code/3441 Author: anneline Date: 2013-09-10 08:56:00 +0000 (Tue, 10 Sep 2013) Log Message: ----------- more skills and designations Modified Paths: -------------- tracer/skins/bika/load_sample_data.py tracer/skins/bika/load_small_data.py Modified: tracer/skins/bika/load_sample_data.py =================================================================== --- tracer/skins/bika/load_sample_data.py 2013-09-05 12:48:39 UTC (rev 3440) +++ tracer/skins/bika/load_sample_data.py 2013-09-10 08:56:00 UTC (rev 3441) @@ -187,6 +187,9 @@ ('Trench mapping', ''), ('Trench sampling', ''), ('MMI sampling', ''), + ('Accounting', 'Accounting'), + ('Administration', 'Administration'), + ('Geophysics', 'Geophysics'), ) for title, description in skilltypes: id = folder.generateUniqueId('SkillType') @@ -203,6 +206,7 @@ ('Administrator', 'Administrator'), ('Support', 'Support staff'), ('Camp manager', 'Camp manager'), + ('Hydrogeologist', 'Hydrogeologist'), ) for title, description in designations: id = folder.generateUniqueId('Designation') Modified: tracer/skins/bika/load_small_data.py =================================================================== --- tracer/skins/bika/load_small_data.py 2013-09-05 12:48:39 UTC (rev 3440) +++ tracer/skins/bika/load_small_data.py 2013-09-10 08:56:00 UTC (rev 3441) @@ -170,7 +170,12 @@ # Setup skill types folder = context.bika_skilltypes skilltypes = ( - ('Diamond', 'Diamond drill logging'), + ('Diamond core logging', 'Diamond core logging'), + ('Diamond core orientation', 'Diamond core orientation'), + ('Diamond core sampling', 'Diamond core sampling'), + ('Diamond core photography', 'Diamond core photography'), + ('XRF', 'X-ray fluorescence'), + ('SG', 'Specific gravity measurements'), ('RC', 'Reverse circulation drill logging'), ('Rab', 'Rab drill logging'), ('Air Core', ''), @@ -182,6 +187,9 @@ ('Trench mapping', ''), ('Trench sampling', ''), ('MMI sampling', ''), + ('Accounting', 'Accounting'), + ('Administration', 'Administration'), + ('Geophysics', 'Geophysics'), ) for title, description in skilltypes: id = folder.generateUniqueId('SkillType') @@ -198,6 +206,7 @@ ('Administrator', 'Administrator'), ('Support', 'Support staff'), ('Camp manager', 'Camp manager'), + ('Hydrogeologist', 'Hydrogeologist'), ) for title, description in designations: id = folder.generateUniqueId('Designation') This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ann...@us...> - 2013-09-05 12:48:42
|
Revision: 3440 http://sourceforge.net/p/bika/code/3440 Author: anneline Date: 2013-09-05 12:48:39 +0000 (Thu, 05 Sep 2013) Log Message: ----------- designation and previous employers Modified Paths: -------------- tracer/skins/bika/personnelfolder_contents.pt tracer/version.txt Modified: tracer/skins/bika/personnelfolder_contents.pt =================================================================== --- tracer/skins/bika/personnelfolder_contents.pt 2013-09-04 12:59:50 UTC (rev 3439) +++ tracer/skins/bika/personnelfolder_contents.pt 2013-09-05 12:48:39 UTC (rev 3440) @@ -23,6 +23,9 @@ > <tal:size i18n:translate="listingheader_name" >Name</tal:size> </th> <th tal:attributes="class python:nosortclass" + > <tal:state i18n:translate="listingheader_designation" + >Designation</tal:state> </th> + <th tal:attributes="class python:nosortclass" > <tal:state i18n:translate="listingheader_jobtitle" >Job title</tal:state> </th> <th tal:attributes="class python:nosortclass" @@ -41,6 +44,9 @@ > <tal:state i18n:translate="listingheader_phone" >Phone</tal:state> </th> <th tal:attributes="class python:nosortclass" + > <tal:state i18n:translate="listingheader_employers" + >Employers</tal:state> </th> + <th tal:attributes="class python:nosortclass" > <tal:state i18n:translate="listingheader_available" >Available</tal:state> </th> <br> @@ -92,6 +98,7 @@ tal:attributes="src string:${portal/absolute_url}/resume.png"/> </a> </td> +<td tal:content="python:personnel.getDesignation() and personnel.getDesignation().Title() or None"> </td> <td tal:content="personnel/getJobTitle"> geologist </td> @@ -118,6 +125,9 @@ <td tal:content="personnel/getPhone"> 0800 100 100 </td> +<td tal:content="python:personnel.getPreviousEmployers()"> + Acme Mining +</td> <td tal:content="personnel/getDateAvailable"> 0800 100 100 </td> Modified: tracer/version.txt =================================================================== --- tracer/version.txt 2013-09-04 12:59:50 UTC (rev 3439) +++ tracer/version.txt 2013-09-05 12:48:39 UTC (rev 3440) @@ -1 +1 @@ -0.1.2 +0.1.3 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ann...@us...> - 2013-09-04 12:59:55
|
Revision: 3439 http://sourceforge.net/p/bika/code/3439 Author: anneline Date: 2013-09-04 12:59:50 +0000 (Wed, 04 Sep 2013) Log Message: ----------- designation and previous employers Modified Paths: -------------- tracer/skins/bika/personnel_edit.cpt tracer/skins/bika/personnel_mod.cpy tracer/skins/bika/query_personnel.py tracer/skins/bika/query_personnel_form.pt tracer/skins/bika/query_personnel_results.pt Modified: tracer/skins/bika/personnel_edit.cpt =================================================================== --- tracer/skins/bika/personnel_edit.cpt 2013-09-04 12:58:56 UTC (rev 3438) +++ tracer/skins/bika/personnel_edit.cpt 2013-09-04 12:59:50 UTC (rev 3439) @@ -338,6 +338,7 @@ <div> </div> <select name="Designation" tal:attributes="tabindex tabindex/next;"> + <option></option> <tal:item tal:define="vocab designations" tal:repeat="item vocab"> @@ -440,7 +441,15 @@ </table> </div> +<div class="field"> +<label i18n:translate="label_previousemployers">Previous employers</label> +<div> </div> +<textarea name="PreviousEmployers" rows="5" cols="40" + id="PreviousEmployers" + tal:content="here/getPreviousEmployers"></textarea> +</div> + <div class="field ArchetypesFileWidget" id="archetypes-fieldname-Resume" tal:define="thisresume python:here.getResume() or None; Modified: tracer/skins/bika/personnel_mod.cpy =================================================================== --- tracer/skins/bika/personnel_mod.cpy 2013-09-04 12:58:56 UTC (rev 3438) +++ tracer/skins/bika/personnel_mod.cpy 2013-09-04 12:59:50 UTC (rev 3439) @@ -51,6 +51,7 @@ DateAvailable=req['DateAvailable'], Designation=req['Designation'], Skills=skills, + PreviousEmployers=req['PreviousEmployers'], NextOfKin=req['NextOfKin'], NextOfKinPhone=req['NextOfKinPhone'], ) Modified: tracer/skins/bika/query_personnel.py =================================================================== --- tracer/skins/bika/query_personnel.py 2013-09-04 12:58:56 UTC (rev 3438) +++ tracer/skins/bika/query_personnel.py 2013-09-04 12:59:50 UTC (rev 3439) @@ -14,6 +14,9 @@ 'portal_type': 'Personnel', 'sort_on': 'sortable_title', } +if REQUEST.has_key('DesignationUID'): + query['getDesignationUID'] = REQUEST.get('DesignationUID') + if REQUEST.has_key('getNationality'): query['getNationality'] = REQUEST.get('getNationality') if REQUEST.has_key('getResidence'): Modified: tracer/skins/bika/query_personnel_form.pt =================================================================== --- tracer/skins/bika/query_personnel_form.pt 2013-09-04 12:58:56 UTC (rev 3438) +++ tracer/skins/bika/query_personnel_form.pt 2013-09-04 12:59:50 UTC (rev 3439) @@ -29,6 +29,7 @@ req_residence python:request.get('Residence', None); req_language python:request.get('Languages', None); req_skill python:request.get('SkillUID', None); + req_designation python:request.get('DesignationUID', None); req_date_available python:request.get('DateAvailable', None); req_deployable python:request.get('Deployable', 'undefined'); req_permanentemployee python:request.get('PermanentEmployee', 'undefined'); @@ -52,6 +53,33 @@ <legend i18n:translate="legend_search">Search</legend> <div class="field"> + <label i18n:translate="label_designation" + >Designation</label><br/> + <select name="DesignationUID:ignore_empty" + style="" + id="DesignationUID" + onChange="javascript:document.getElementById('send_DesignationUID').value=document.getElementById('DesignationUID').value" + tal:attributes="style string:font-family:${here/base_properties/fontFamily};;font-size:100%;"> + <option value=""/> + + <tal:designations + define=" + designations python:here.portal_catalog(portal_type='Designation'); + sort_on python:(('Title', 'nocase', 'asc'),); + designations python:sequence.sort(designations, sort_on);" + repeat="designation designations"> + <option value="" + tal:define="designation_uid python:designation.UID" + tal:attributes="value designation_uid; + selected python:req_designation == designation_uid and 'selected' or ''" + tal:content="designation/Title" + >Designation</option> + + </tal:designations> + </select> +</div> + +<div class="field"> <label i18n:translate="label_skill" >Skill</label><br/> <select name="SkillUID:ignore_empty" @@ -72,7 +100,7 @@ tal:attributes="value skill_uid; selected python:req_skill == skill_uid and 'selected' or ''" tal:content="skill/Title" - >Sample type</option> + >Skill</option> </tal:skills> </select> @@ -262,6 +290,8 @@ tal:attributes="value req_language"/> <input type="HIDDEN" name="SkillUID:ignore_empty" id="send_SkillUID" value="" tal:attributes="value req_skill"/> +<input type="HIDDEN" name="DesignationUID:ignore_empty" id="send_DesignationUID" value="" + tal:attributes="value req_designation"/> <input type="HIDDEN" name="DateAvailable" id="send_DateAvailable" value="" tal:attributes="value req_date_available"/> <input type="HIDDEN" name="NewApplicant" id="send_NewApplicant" value="" Modified: tracer/skins/bika/query_personnel_results.pt =================================================================== --- tracer/skins/bika/query_personnel_results.pt 2013-09-04 12:58:56 UTC (rev 3438) +++ tracer/skins/bika/query_personnel_results.pt 2013-09-04 12:59:50 UTC (rev 3439) @@ -35,12 +35,14 @@ <thead> <tr> <th colspan="2" i18n:translate="label_name">Name</th> +<th i18n:translate="label_designation">Designation</th> <th i18n:translate="label_skills">Skills</th> <th i18n:translate="label_nationality">Nationality</th> <th i18n:translate="label_residence">Country of residence</th> <th i18n:translate="label_languages">Languages</th> <th i18n:translate="label_email">email</th> <th i18n:translate="label_phone">phone</th> +<th i18n:translate="label_previousemployers">Employers</th> <th i18n:translate="label_available">Available</th> </tr> </thead> @@ -81,6 +83,7 @@ tal:attributes="src string:${portal/absolute_url}/resume.png"/> </a> </td> +<td tal:content="python:personnel.getDesignation() and personnel.getDesignation().Title() or None"> </td> <td tal:content="python:personnel.getSkillsString()"> </td> <td tal:content="personnel/getNationality"></td> <td tal:content="personnel/getResidence"></td> @@ -92,6 +95,9 @@ <td tal:content="personnel/getPhone"> 0800 100 100 </td> +<td tal:content="python:personnel.getPreviousEmployers()"> + Acme Mining +</td> <td tal:content="personnel/getDateAvailable"> 0800 100 100 </td> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ann...@us...> - 2013-09-04 12:58:58
|
Revision: 3438 http://sourceforge.net/p/bika/code/3438 Author: anneline Date: 2013-09-04 12:58:56 +0000 (Wed, 04 Sep 2013) Log Message: ----------- designation and previous employers Modified Paths: -------------- tracer/Personnel.py Modified: tracer/Personnel.py =================================================================== --- tracer/Personnel.py 2013-09-04 10:09:47 UTC (rev 3437) +++ tracer/Personnel.py 2013-09-04 12:58:56 UTC (rev 3438) @@ -171,6 +171,13 @@ referenceClass=HoldingReference, ), SkillsField('Skills'), + StringField('PreviousEmployers', + schemata='Deployment', + widget=LinesWidget( + label='Previous employers', + label_msgid='label_previousemployers', + ), + ), TextField('Notes', widget=TextAreaWidget( label='Notes' @@ -193,7 +200,7 @@ ), ComputedField('DesignationUID', index='FieldIndex', - expression='context.getDesignation().UID()', + expression='context.getDesignation() and context.getDesignation().UID() or None', widget=ComputedWidget( visible=False, ), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |