Changeset 30
- Timestamp:
- 11/21/08 18:44:50 (7 weeks ago)
- Files:
-
- 12 modified
-
gnrjs/gnr_d11/js/genro_frm.js (modified) (1 diff)
-
gnrjs/gnr_d11/js/genro.js (modified) (1 diff)
-
gnrjs/gnr_d11/js/genro_rpc.js (modified) (1 diff)
-
gnrjs/gnr_d11/js/gnrdomsource.js (modified) (2 diffs)
-
gnrpy/gnr/sql/gnrsqldata.py (modified) (1 diff)
-
gnrpy/gnr/sql/gnrsqltable.py (modified) (1 diff)
-
gnrpy/gnr/web/gnrwebapphandler.py (modified) (4 diffs)
-
gnrpy/gnr/web/gnrwebpage.py (modified) (4 diffs)
-
gnrpy/packages/adm/webpages/manage_users.py (modified) (1 diff)
-
gnrpy/packages/_common_d11/webpages/_resources/public.py (modified) (1 diff)
-
gnrpy/packages/_common_d11/webpages/_resources/standard_tables.py (modified) (4 diffs)
-
gnrpy/packages/showcase/webpages/Widgets/Form/textbox.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
gnrjs/gnr_d11/js/genro_frm.js
r14 r30 270 270 } 271 271 } 272 } 272 }, 273 273 274 274 275 }); -
gnrjs/gnr_d11/js/genro.js
r29 r30 696 696 params = objectUpdate({}, params); 697 697 var resolverName = resolverName || objectPop(params, '_resolver_name'); 698 return this['remote_'+resolverName].call(this, params, parentbag); 699 }, 700 remote_relOneResolver: function(params, parentbag){ 701 var kw = {}; 702 var cacheTime = -1; 703 var isGetter = false; 704 var sync=('sync' in params)? objectPop(params,'sync'):true; 705 var kwargs = { 'sync':sync,'from_fld':params._from_fld, 'target_fld':params._target_fld, 'sqlContextName':params._sqlContextName}; 706 kwargs.method = 'app.getRelatedRecord'; 707 708 var resolver = new gnr.GnrRemoteResolver(kwargs, isGetter, cacheTime); 709 resolver.updateAttr=true; 710 var _related_field = params._target_fld.split('.')[2]; 711 712 if(params._auto_relation_value){ 713 resolver.relation_fld = params._auto_relation_value; //params._from_fld.split('.')[2]; 714 var dataprovider = function(){ 715 return this.getParentNode().getParentBag().getItem(this.relation_fld); 716 }; 717 kwargs[_related_field] = dojo.hitch(resolver, dataprovider); 718 719 //TODO: move that feature to BagNode.setResolver 720 var valNode = parentbag.getNode(resolver.relation_fld); 721 var reloader = function(){ 722 this.getParentNode().getValue('reload'); 723 }; 724 valNode._onChangedValue = dojo.hitch(resolver, reloader); 725 726 } else { 727 kwargs[_related_field] = params._relation_value; 728 } 729 return resolver; 730 }, 731 remote_relManyResolver: function(params){ 732 var kw = {}; 733 var cacheTime = -1; 734 var isGetter = false; 735 736 var kwargs = {'sync':true, 737 'from_fld':params._from_fld, 'target_fld':params._target_fld, 'relation_value':params._relation_value, 738 'sqlContextName':params._sqlContextName}; 739 kwargs.method = 'app.getRelatedSelection'; 740 741 var resolver = new gnr.GnrRemoteResolver(kwargs, isGetter, cacheTime); 742 resolver.updateAttr=true; 743 resolver.onSetResolver = function(node){ 744 node.newBagRow = function(defaultArgs){ 745 //var defaultArgs = defaultArgs || {}; 746 var resolver = genro.getRelationResolver(objectUpdate(this.attr.childResolverParams,{'sync':true})); 747 resolver.kwargs.newRecordDefualts = defaultArgs; 748 var result = new gnr.GnrBagNode(null,'label',null ,this.attr.childResolverParams,resolver); 749 if ((!this._newRowTemplate) || (!objectIsEqual(defaultArgs,this._oldDefaultArgs||{}))){ 750 resolver._keepResponse=true; 751 this._oldDefaultArgs=defaultArgs; 752 result.getValue().toXml(); 753 this._lastResponse=resolver._lastResponse; 754 resolver._lastResponse=null; 755 this._newRowTemplateAttr=result.attr; 756 }else{ 757 var envelope = new gnr.GnrBag(); 758 envelope.fromXmlDoc(this._lastResponse, genro.clsdict); 759 result._value=envelope.getValue('result'); 760 resolver.lastUpdate=new Date(); 761 objectUpdate(result.attr,this._newRowTemplateAttr); 762 } 763 return result; 764 }; 765 }; 766 resolver.updateAttr=true; 767 return resolver; 698 return genro.rpc['remote_'+resolverName].call(genro.rpc, params, parentbag); 768 699 }, 769 700 loadUserObject: function(path, params){ -
gnrjs/gnr_d11/js/genro_rpc.js
r1 r30 485 485 }, 1000); 486 486 } 487 }, 488 489 490 remote_relOneResolver: function(params, parentbag){ 491 var kw = {}; 492 var cacheTime = -1; 493 var isGetter = false; 494 var sync=('sync' in params)? objectPop(params,'sync'):true; 495 var kwargs = { 'sync':sync,'from_fld':params._from_fld, 496 'target_fld':params._target_fld, 497 'sqlContextName':params._sqlContextName}; 498 kwargs.method = 'app.getRelatedRecord'; 499 500 var resolver = new gnr.GnrRemoteResolver(kwargs, isGetter, cacheTime); 501 resolver.updateAttr=true; 502 resolver.onloading = function(kwargs){ 503 var target = kwargs.target_fld.split('.'); 504 var table = target[0] + '_' + target[1]; 505 kwargs['loadingParameters'] = genro.getData('gnr.tables.'+table+'.loadingParameters'); 506 }; 507 var _related_field = params._target_fld.split('.')[2]; 508 509 if(params._auto_relation_value){ 510 resolver.relation_fld = params._auto_relation_value; //params._from_fld.split('.')[2]; 511 var dataprovider = function(){ 512 return this.getParentNode().getParentBag().getItem(this.relation_fld); 513 }; 514 kwargs[_related_field] = dojo.hitch(resolver, dataprovider); 515 516 //TODO: move that feature to BagNode.setResolver 517 var valNode = parentbag.getNode(resolver.relation_fld); 518 var reloader = function(){ 519 this.getParentNode().getValue('reload'); 520 }; 521 valNode._onChangedValue = dojo.hitch(resolver, reloader); 522 523 } else { 524 kwargs[_related_field] = params._relation_value; 525 } 526 return resolver; 527 }, 528 remote_relManyResolver: function(params){ 529 var kw = {}; 530 var cacheTime = -1; 531 var isGetter = false; 532 533 var kwargs = {'sync':true, 534 'from_fld':params._from_fld, 'target_fld':params._target_fld, 'relation_value':params._relation_value, 535 'sqlContextName':params._sqlContextName}; 536 kwargs.method = 'app.getRelatedSelection'; 537 538 var resolver = new gnr.GnrRemoteResolver(kwargs, isGetter, cacheTime); 539 resolver.updateAttr=true; 540 resolver.onSetResolver = function(node){ 541 node.newBagRow = function(defaultArgs){ 542 //var defaultArgs = defaultArgs || {}; 543 var resolver = genro.getRelationResolver(objectUpdate(this.attr.childResolverParams,{'sync':true})); 544 resolver.kwargs.newRecordDefualts = defaultArgs; 545 var result = new gnr.GnrBagNode(null,'label',null ,this.attr.childResolverParams,resolver); 546 if ((!this._newRowTemplate) || (!objectIsEqual(defaultArgs,this._oldDefaultArgs||{}))){ 547 resolver._keepResponse=true; 548 this._oldDefaultArgs=defaultArgs; 549 result.getValue().toXml(); 550 this._lastResponse=resolver._lastResponse; 551 resolver._lastResponse=null; 552 this._newRowTemplateAttr=result.attr; 553 }else{ 554 var envelope = new gnr.GnrBag(); 555 envelope.fromXmlDoc(this._lastResponse, genro.clsdict); 556 result._value=envelope.getValue('result'); 557 resolver.lastUpdate=new Date(); 558 objectUpdate(result.attr,this._newRowTemplateAttr); 559 } 560 return result; 561 }; 562 }; 563 resolver.updateAttr=true; 564 return resolver; 487 565 } 488 566 -
gnrjs/gnr_d11/js/gnrdomsource.js
r27 r30 160 160 var _if=objectPop(attributes,'_if'); 161 161 var _else=objectPop(attributes,'_else'); 162 var expr; 163 if(tag=='dataFormula'){ 164 expr=objectPop(attributes,'formula'); 165 }else if ((tag=='dataController') || (tag=='dataScript')){ 166 expr=objectPop(attributes,'script'); 167 }else { 168 expr=objectPop(attributes,'method'); 169 } 162 170 var argValues=[node]; 163 171 var argNames=['_node']; … … 175 183 } 176 184 if(tag=='dataFormula' || tag=='dataScript' || tag=='dataController' || tag=='dataRpc'){ 177 var expr;178 if(tag=='dataFormula'){179 expr=objectPop(attributes,'formula');180 }else if ((tag=='dataController') || (tag=='dataScript')){181 expr=objectPop(attributes,'script');182 }else {183 expr=objectPop(attributes,'method');184 }185 185 var val; 186 186 if(! if_result){ 187 if(!_else){ 188 return; 189 } 187 190 expr=_else; 188 191 } 189 if(expr){ 190 if(tag=='dataRpc' && (expr != _else)){ 191 var doCall = true; 192 var method=expr; 193 var httpMethod = objectPop(kwargs,'_POST')? 'POST' :'GET'; 194 var _onResult = objectPop(kwargs,'_onResult'); 195 var _onCalling = objectPop(kwargs,'_onCalling'); 196 objectExtract(kwargs,'_*'); 197 if (_onResult){ 198 _onResult = dojo.hitch(this, funcCreate(_onResult)); 199 } 200 kwargs['_rpc_resultPath']=destinationPath; 201 var cb = function(result){ 202 dataNode.setValue(result); 203 if(_onResult){ 204 _onResult(result); 205 } 206 }; 207 208 if (_onCalling){ 209 doCall = funcCreate(_onCalling, argNames.join(',')).apply(this,argValues); 210 } 211 if(doCall != false){ 212 genro.rpc.remoteCall(method, kwargs, null, httpMethod, null, cb); 213 } 214 } 215 else{ 216 expr=(tag=='dataFormula')? 'return '+expr : expr; 217 var result=funcCreate(expr,argNames.join(',')).apply(this,argValues); 218 if (dataNode){ // if it has a dataNode set it to the returned value 219 dataNode.setValue(result); 220 } 221 } 222 } 192 if(tag=='dataRpc' && (expr != _else)){ 193 var doCall = true; 194 var method=expr; 195 var httpMethod = objectPop(kwargs,'_POST')? 'POST' :'GET'; 196 var _onResult = objectPop(kwargs,'_onResult'); 197 var _onCalling = objectPop(kwargs,'_onCalling'); 198 objectExtract(kwargs,'_*'); 199 if (_onResult){ 200 _onResult = dojo.hitch(this, funcCreate(_onResult)); 201 } 202 kwargs['_rpc_resultPath']=destinationPath; 203 var cb = function(result){ 204 dataNode.setValue(result); 205 if(_onResult){ 206 _onResult(result); 207 } 208 }; 209 210 if (_onCalling){ 211 doCall = funcCreate(_onCalling, argNames.join(',')).apply(this,argValues); 212 } 213 if(doCall != false){ 214 genro.rpc.remoteCall(method, kwargs, null, httpMethod, null, cb); 215 } 216 } 217 else{ 218 var result; 219 if(!expr){ 220 result = new gnr.GnrBag(kwargs); 221 } else { 222 expr = (tag=='dataFormula') ? 'return '+ expr : expr; 223 result = funcCreate(expr,argNames.join(',')).apply(this,argValues); 224 } 225 if (dataNode){ // if it has a dataNode set it to the returned value 226 dataNode.setValue(result); 227 } 228 } 223 229 } 224 230 else{ 225 231 if( if_result){ 226 var method= objectPop(attributes,'method');232 var method=expr; 227 233 var cacheTime=objectPop(attributes,'cacheTime', -1); 228 234 var isGetter=objectPop(attributes,'isGetter', false); -
gnrpy/gnr/sql/gnrsqldata.py
r29 r30 1587 1587 result = property(_get_result) 1588 1588 1589 def out_newrecord(self, resolver_one=True, resolver_many=True , defaults=None):1589 def out_newrecord(self, resolver_one=True, resolver_many=True): 1590 1590 result = SqlRecordBag(self.db, self.dbtable.fullname) 1591 1592 #defaults = self.dbtable.getNewRow(defaults)1593 1591 record = Bag() 1594 #for k,v in defaults.items():1595 # record['t0_%s' % k]=v # for loaded records all fields startst with t0_1596 1597 1592 self._loadRecord(result, record, self.compiled.template, resolver_many=resolver_many, resolver_one=resolver_one) 1598 self.dbtable.onCreating(result, defaults) 1593 1594 newdefaults = self.dbtable.defaultValues() 1595 for k,v in newdefaults.items(): 1596 result[k] = v 1597 1599 1598 return result 1600 1599 -
gnrpy/gnr/sql/gnrsqltable.py
r29 r30 292 292 else: 293 293 return record 294 295 def onCreating(self, record, defaults=None): 296 newdefaults = self.defaultValues() 297 if defaults: 298 newdefaults.update(defaults) 299 for k,v in newdefaults.items(): 300 record[k] = v 294 301 295 302 296 def defaultValues (self): -
gnrpy/gnr/web/gnrwebapphandler.py
r29 r30 694 694 ignoreMissing=True, ignoreDuplicate=True, 695 695 from_fld=None, target_fld=None, sqlContextName=None, applymethod=None, 696 js_resolver_one='relOneResolver', js_resolver_many='relManyResolver',697 newRecordDefaults=None,**kwargs):696 js_resolver_one='relOneResolver', js_resolver_many='relManyResolver', 697 **kwargs): 698 698 t = time.time() 699 699 dbtable = dbtable or table … … 701 701 dbtable='%s.%s' % (pkg, dbtable) 702 702 tblobj = self.db.table(dbtable) 703 newrecord = False 704 loadingParameters = dict([(k.lstrip('loading_'), kwargs.pop(k)) for k in kwargs.keys() if k.startswith('loading_')]) 703 705 if pkey: 704 706 kwargs['pkey'] = pkey … … 711 713 self._joinConditionsFromContext(rec, sqlContextName) 712 714 if (pkey=='*newrecord*'): 713 record = rec.output('newrecord', resolver_one=js_resolver_one, resolver_many=js_resolver_many, defaults=newRecordDefaults) 715 newrecord = True 716 record = rec.output('newrecord', resolver_one=js_resolver_one, resolver_many=js_resolver_many) 714 717 else: 715 718 record = rec.output('bag', resolver_one=js_resolver_one, resolver_many=js_resolver_many) … … 719 722 sqlContextName=sqlContextName, **kwargs) 720 723 if sqlContextName: self._joinConditionsFromContext(record, sqlContextName) 721 724 722 725 record = record.output('bag', resolver_one=js_resolver_one, resolver_many=js_resolver_many) 723 newrecord = False 724 726 727 recInfo = dict(_pkey=record[tblobj.pkey] or '*newrecord*', 728 caption=tblobj.recordCaption(record,newrecord), 729 _newrecord=newrecord) 730 731 method = loadingParameters.pop('method', None) 732 if method: 733 handler = self.page.getPublicMethod('rpc', method) 734 else: 735 if dbtable == self.page.maintable: 736 method = 'onLoading' 737 else: 738 method = 'onLoading_%s' % dbtable.replace('.','_') 739 handler = getattr(self.page, method, None) 740 741 if not handler and newrecord and loadingParameters: 742 handler = self.newRecordDefaults 743 if handler: 744 handler(record, recInfo, loadingParameters) 745 725 746 if applymethod: 726 747 self.page.getPublicMethod('rpc', applymethod)(record) 727 748 728 recInfo = dict(_pkey=record[tblobj.pkey] or '*newrecord*', 729 caption=tblobj.recordCaption(record,newrecord), 730 _newrecord=not(newrecord is False), servertime=int((time.time() - t)*1000)) 749 recInfo['servertime'] = int((time.time() - t)*1000) 731 750 if tblobj.lastTS: 732 751 recInfo['lastTS'] = str(record[tblobj.lastTS]) 733 752 return (record,recInfo) 734 753 754 def newRecordDefaults(record, recInfo, **kwargs): 755 for k,v in kwargs.items(): 756 if k in record: 757 record[k] = v 758 735 759 def rpc_saveRecord(self, dbtable=None, recordBag=None,**kwargs): 736 760 tbl = self.db.table(dbtable) -
gnrpy/gnr/web/gnrwebpage.py
r29 r30 2358 2358 ignoreMissing=True, ignoreDuplicate=True, 2359 2359 from_fld=None, target_fld=None, sqlContextName=None, applymethod=None, 2360 js_resolver_one='relOneResolver', js_resolver_many='relManyResolver',2361 newRecordDefaults=None, **kwargs):2360 js_resolver_one='relOneResolver', js_resolver_many='relManyResolver', 2361 loadingParameters=None, **kwargs): 2362 2362 t = time.time() 2363 2363 dbtable = dbtable or table … … 2365 2365 dbtable='%s.%s' % (pkg, dbtable) 2366 2366 tblobj = self.db.table(dbtable) 2367 newrecord = False 2367 2368 if pkey: 2368 2369 kwargs['pkey'] = pkey … … 2375 2376 self._joinConditionsFromContext(rec, sqlContextName) 2376 2377 if (pkey=='*newrecord*'): 2377 record = rec.output('newrecord', resolver_one=js_resolver_one, resolver_many=js_resolver_many, defaults=newRecordDefaults) 2378 newrecord = True 2379 record = rec.output('newrecord', resolver_one=js_resolver_one, resolver_many=js_resolver_many) 2378 2380 else: 2379 2381 record = rec.output('bag', resolver_one=js_resolver_one, resolver_many=js_resolver_many) … … 2383 2385 sqlContextName=sqlContextName, **kwargs) 2384 2386 if sqlContextName: self._joinConditionsFromContext(record, sqlContextName) 2385 2387 2386 2388 record = record.output('bag', resolver_one=js_resolver_one, resolver_many=js_resolver_many) 2387 newrecord = False 2388 2389 2390 recInfo = dict(_pkey=record[tblobj.pkey] or '*newrecord*', 2391 caption=tblobj.recordCaption(record,newrecord), 2392 _newrecord=newrecord) 2393 2394 method = None 2395 if loadingParameters: 2396 method = loadingParameters.pop('method') 2397 2398 if method: 2399 handler = self.page.getPublicMethod('rpc', method) 2400 else: 2401 if dbtable == self.page.maintable: 2402 method = 'onLoading' 2403 else: 2404 method = 'onLoading_%s' % dbtable.replace('.','_') 2405 handler = getattr(self.page, method, None) 2406 2407 if not handler and newrecord and loadingParameters: 2408 handler = self.newRecordDefaults 2409 if handler: 2410 handler(record, recInfo, loadingParameters) 2411 2389 2412 if applymethod: 2390 2413 self.page.getPublicMethod('rpc', applymethod)(record) 2391 2392 _pkey = record[tblobj.pkey] or '*newrecord*' 2393 _newrecord = (_pkey=='*newrecord*') 2394 recInfo = dict( _pkey=_pkey, 2395 caption=tblobj.recordCaption(record, newrecord=_newrecord), 2396 _newrecord=_newrecord, servertime=int((time.time() - t)*1000)) 2414 2415 recInfo['servertime'] = int((time.time() - t)*1000) 2397 2416 if tblobj.lastTS: 2398 2417 recInfo['lastTS'] = str(record[tblobj.lastTS]) 2399 2418 return (record,recInfo) 2400 2419 2420 def newRecordDefaults(self, record, recInfo, loadingParameters): 2421 for k,v in loadingParameters.items(): 2422 if k in record: 2423 record[k] = v 2424 2401 2425 def rpc_saveRecord(self, dbtable=None, recordBag=None,**kwargs): 2402 2426 tbl = self.db.table(dbtable) -
gnrpy/packages/adm/webpages/manage_users.py
r23 r30 73 73 return struct 74 74 75 def onLoading(self, record, recinfo ):75 def onLoading(self, record, recinfo, loadingParameters): 76 76 tags = record['auth_tags'] 77 77 b = Bag() -
gnrpy/packages/_common_d11/webpages/_resources/public.py
r28 r30 570 570 grid.addBagRow('#id', '*', grid.newBagRow(),event); 571 571 """ , 572 event='^.addRecord', gridId=gridId) 572 event='^.addRecord', 573 gridId=gridId) 573 574 delScript = """var grid = genro.wdgById(gridId); 574 575 var nodesToDel = grid.delBagRow('*', delSelection);""" -
gnrpy/packages/_common_d11/webpages/_resources/standard_tables.py
r27 r30 576 576 _fired='^.delete', _onResult='genro.wdgById("delete_view_dlg").onCancel();FIRE .deleted = true') 577 577 578 579 580 def recordGetter(self): 581 return ('app.getRecord', {}) 582 583 578 584 579 def formController(self,pane): 585 580 self.formTitleBase(pane) … … 594 589 pane.dataFormula('form.canDelete','(!locked) && deletePermission',locked='^form.locked',deletePermission='=usr.deletePermission',_init=True) 595 590 596 recordGetter, kwargs = self.recordGetter()597 598 591 pane.dataController('genro.formById("formPane").load();', _fired='^form.doLoad') 599 592 #pane.dataRpc('form.record', 'load', table=self.maintable, pkey='=list.selectedId', _fired='^form.doLoad', recordGetter = recordGetter, sqlContextName='sql_record', 600 593 # _onResult='FIRE recordLoaded=true;FIRE loggerReset=true;SET form.loading=false;', **kwargs) 601 602 594 603 595 pane.dataRpc('form.record', 'load', table=self.maintable, pkey='=list.selectedId', 604 recordGetter = recordGetter, sqlContextName='sql_record',596 recordGetter = self.recordGetter(), sqlContextName='sql_record', 605 597 nodeId='formPane_loader', 606 _onResult='genro.formById("formPane").loaded();',607 **kwargs)598 _onResult='genro.formById("formPane").loaded();', 599 loadingParameters='=gnr.tables.maintable.loadingParameters') 608 600 609 601 … … 770 762 771 763 def rpc_load(self, table=None, pkey=None, recordGetter='app.getRecord', **kwargs): 772 recordGetter = self.getPublicMethod('rpc', recordGetter)773 record, recinfo = recordGetter(table=table, pkey=pkey, **kwargs)774 self.onLoading(record, recinfo)764 getterHandler = self.getPublicMethod('rpc', recordGetter) 765 record, recinfo = getterHandler(table=table, pkey=pkey, **kwargs) 766 #self.onLoading(record, recinfo, loadingParameters) 775 767 return record, recinfo 776 768 … … 865 857 return 866 858 867 def onLoading(self, record, recinfo): 859 def recordGetter(self): 860 return 'app.getRecord' 861 862 def setLoadingParameters(self, table, **kwargs): 863 self.pageSource().dataFormula('gnr.tables.%s.loadingParameters' % table.replace('.','_'), '', _fired='^gnr.onStart', **kwargs) 864 865 def onLoading(self, record, recinfo, loadingParameters): 868 866 pass 869 867 -
gnrpy/packages/showcase/webpages/Widgets/Form/textbox.py
r1 r30 22 22 fb.numberTextBox(value='^.r0.age',lbl='age') 23 23 &
