﻿
__trGroup('CMS Form');Ext.namespace('NPSL','NPSL.Cms','NPSL.Cms.Form','Ext.ux');(function(){var Cms=NPSL.Cms,Form=Cms.Form,ColType=Cms.ColType,MimeTypes=Cms.MimeTypes;Form.CmsRecord=function(cfg){var config={};Ext.apply(config,cfg);if(config.allowSave){this.saveButton=new Ext.Toolbar.Button({text:__tr('Save changes'),iconCls:"save-icon",disabled:true,handler:this.deferSaveChanges,scope:this});config.tbar=config.tbar||[];config.tbar.push(this.saveButton);if(self.location.href.indexOf("_FORM_ID=2")>=0){config.tbar.push(new Ext.Toolbar.Button({text:__tr('Export RIDDOR F2508'),iconCls:"word-icon",handler:function(){var id=this.keys.get("INCIDENT","INCIDENT_ID");xsrf_nav("/csr/site/incidents/exportRiddor.aspx?incidentId="+id);},scope:this}));}
if(self.location.href.indexOf("_FORM_ID=7")>=0){config.tbar.push(new Ext.Toolbar.Button({text:__tr('Export OSHA 301'),iconCls:'excel-icon',handler:function(){var id=this.keys.get("INCIDENT","INCIDENT_ID");xsrf_nav("/csr/site/incidents/exportOsha.aspx?incidentId="+id);},scope:this}));}}
config.layout='form';this.addEvents(['storeready','beforesave','savesuccess']);Form.CmsRecord.superclass.constructor.call(this,config);this.fields={};this.forcedFields={};}
Form.CmsRecord.fromXML=function(n,ownerForm,ownerRecord){if(ownerRecord){throw"cms-record nodes cannot be nested";}
var tableName=n.getAttribute("table");if(!tableName){throw"cms-record is missing a table attribute";}
var config={ownerForm:ownerForm,border:false,readOnly:ownerForm.readOnly};if(!(config.table=g_schema.findTable(tableName))){throw"The table "+tableName+" is missing from the schema";}
if(typeof(config.allowSave)!="boolean"){config.allowSave=ownerForm.allowSave;if(typeof(config.allowSave)!="boolean"){config.allowSave=true;}}
var cmsRecord=new Form.CmsRecord(config);ownerForm.records[cmsRecord.table.qname()]=cmsRecord;for(var n=n.getFirstChild();n;n=n.getNextSibling()){var t=Form.types[n.getName()];if(!t){throw"unknown node: "+n.getName();}else{var item=t.fromXML(n,ownerForm,cmsRecord);if(item){cmsRecord.add(item);}}}
var tab=config.table;for(var i=0;i<tab.pk.columns.length;++i){var col=tab.pk.columns[i];if(!cmsRecord.fields[col.name]){var fld=new Ext.form.Hidden({id:Form.getFieldName(col),col:col,ownerForm:ownerForm,ownerRecord:cmsRecord});cmsRecord.add(fld);cmsRecord.fields[col.name]=fld;}}
return cmsRecord;}
Ext.extend(Form.CmsRecord,Form.RecordBase,{initComponent:function(){Form.CmsRecord.superclass.initComponent.call(this);this.initItems();},onDestroy:function(){Form.CmsRecord.superclass.onDestroy.call(this);this.unhookStore();this.store.destroy();for(var fn in this.fields){if(this.fields.hasOwnProperty(fn)){Ext.destroy(this.fields[fn]);}}},initEvents:function(){Form.CmsRecord.superclass.initEvents.call(this);if(!Form.LayoutMode)
return;this.items.on('remove',this.onItemRemoved,this);this.items.on('add',this.onItemAdded,this);if(this.monitorValid){this.startMonitoring();}},onItemAdded:function(ct,c){if(!Form.LayoutMode)
return;if(c.isFormField){}},onItemRemoved:function(c){if(!Form.LayoutMode)
return;if(c.isFormField){Ext.destroy(c.container.up('.x-form-item'));}},addField:function(fld){var c=fld.col;var name=c.name;if(this.fields[name]){throw"cms-field is bound to "+name+" twice";}
this.fields[name]=fld;if(fld.hasOwnProperty("forceValue")){this.forcedFields[name]=fld;}
if((c.colType==ColType.Region&&!fld.regionOwner)||c.colType==ColType.Indicator){fld.on("select",this.pickerFieldChanged,this);}else if(c.colType==ColType.User){fld.on("change",this.userFieldChanged,this);}else if(c.colType==ColType.Html){fld.on("change",this.htmlFieldChanged,this);}else if(c.colType==ColType.FileData){fld.on("change",this.fileFieldChanged,this);}else if(c.colType==ColType.Boolean){fld.on("check",this.checkFieldChanged,this);}else{fld.on("change",this.fieldChanged,this);}
if(c.type=="DATE"){fld.on("select",function(fld,d){this.record.data[fld.col.name]=null;this.fieldChanged.call(this,fld,d,fld.startValue);},this);}
if(fld.col.checks){for(var i=0;i<fld.col.checks.length;++i){var chk=fld.col.checks[i];for(var j=0;j<chk.cols.length;++j){var depCol=chk.cols[j];if(depCol==fld.col||!this.fields.hasOwnProperty(depCol.name)){continue;}
var depFld=this.fields[depCol.name];fld.dependentFields.push(depFld);depFld.dependentFields.push(fld);}}}},checkFieldChanged:function(fld,value){if(this.record){this.record.set(fld.col.name,value?1:0);}},htmlFieldChanged:function(fld){if(this.record){this.record.set(fld.col.name,fld.getValue());}},fileFieldChanged:function(fld,tempUploadId,fileName,mimeType){if(this.record){var col=fld.col;this.record.set(col.name,tempUploadId);if(col.nameColumn){this.record.set(col.nameColumn.name,fileName);}
if(col.mimeColumn){this.record.set(col.mimeColumn.name,mimeType);}}},fieldChanged:function(fld,newValue,oldValue){if(this.record){this.record.set(fld.col.name,newValue);}},pickerFieldChanged:function(sid,description,fld){if(this.record){this.record.set(fld.col.name,{sid:sid,description:description});}},userFieldChanged:function(fld,newValue,oldValue){if(this.record){this.record.set(fld.col.name,{sid:newValue,fullName:Ext.getDom(fld.getEl()).value});}},storeChanged:function(){Form.CmsRecord.superclass.storeChanged.call(this);if(this.saveButton){this.saveButton.enable();}},setRecord:function(r){Form.CmsRecord.superclass.setRecord.call(this,r);var fieldsToClear=[];r.fields.each(function(fld){var formField=this.fields[fld.name];if(formField){var v=r.get(fld.name);var c=formField.col;if(this.forcedFields.hasOwnProperty(fld.name)){r.set(fld.name,this.forcedFields[fld.name].getValue());}else if(c.type=="DATE"){if(!v){v=Date.parseISO(v);}
formField.setValue(v);}else if(c.colType==ColType.Region||c.colType==ColType.Indicator){formField.setValues(v?v.sid:null,v?v.description:null);}else if(c.colType==ColType.User){formField.setValues(v?v.sid:null,v?v.fullName:null);}else if(c.colType==ColType.FileData){var mimeType=c.mimeColumn?r.get(c.mimeColumn.name):'';var fileName=c.nameColumn?r.get(c.nameColumn.name):'';formField.setValues(v,fileName,mimeType);}else{formField.setValue(v);}
if(formField.valueTrigger){Form.ValueTrigger.run(formField.valueTrigger,formField,formField.getValue());}
fieldsToClear.push(formField);}},this);for(var i=0,len=fieldsToClear.length;i<len;++i){fieldsToClear[i].clearInvalid();}},newRecord:function(){var Record=this.store.recordType;var r=new Record({},Cms.Megastore.makeGlobalId(this.table));r.fields.each(function(fld){var c=this.table.columnsByName[fld.name];if(!c){return;}
var v='';if(this.forcedFields.hasOwnProperty(fld.name)){v=this.forcedFields[fld.name].getValue();}else if(c.defaultValue){v=c.defaultValue;}else if(c.colType==ColType.Enumerated){v=null;}else if(c.colType==ColType.Boolean){v=0;}
r.set(fld.name,v);var formField=this.fields[fld.name];if(formField){formField.setValue(v);if(formField.valueTrigger){Form.ValueTrigger.run(formField.valueTrigger,formField,v);}
formField.clearInvalid();}},this);for(var i=0;i<this.table.pk.columns.length;++i){var col=this.table.pk.columns[i];r.set(col.name,null);}
this.keys.each(function(keys,tableKey,colKey,value){r.set(this.table.findColumn(colKey).name,value);},this);this.store.add(r);this.record=this.store.getAt(0);},isValid:function(){for(var n in this.fields){if(this.fields[n].mimicing&&this.fields[n].triggerBlur){this.fields[n].triggerBlur();}}
var valid=true;for(var n in this.fields){if(!this.fields[n].validate()){valid=false;}}
return valid;},undoChanges:function(){if(this.store){this.store.rejectChange(this.record);}},deferSaveChanges:function(callback,keyChildren){this.saveChanges.defer(1,this,[callback,keyChildren],false);},saveChanges:function(callback,keyChildren){keyChildren=keyChildren!==false;if(this.blockSave){return;}
if(!this.isValid()){Credit360.Page.showMessage(__tr('Please fix the errors on the form'));return;}
var storeChanges=Form.getStoreChanges(this.store);if(storeChanges.records.length<1){if(typeof(callback)==="function"){callback(true);}
Credit360.Page.showMessage(__tr('No changes made'));return;}
var saveData={tab:this.table.sid,data:storeChanges.data};this.fireEvent('beforesave',saveData);if(this.saveButton){var btnEl=this.saveButton.el.child(this.saveButton.buttonSelector);btnEl.removeClass('save-icon');btnEl.addClass('spinner-icon');}
this.blockSave=true;GridHandler.saveTableData(saveData,{success:function(obj){var ids=obj.ids;var pkc=this.table.pk.columns;for(var i=0;i<storeChanges.records.length;++i){var rec=storeChanges.records[i];var changed=false;for(var j=0;j<pkc.length;++j){var v=rec.get(pkc[j].name);if(v&&v.sid){v=v.sid;}
if(String(v)!==String(ids[i][j])){changed=true;break;}}
if(changed){rec.beginEdit();for(var j=0;j<pkc.length;++j){rec.set(pkc[j].name,ids[i][j]);}
rec.setId(Cms.Megastore.makeGlobalId(this.table,rec.data));if(rec===this.record){this.recordId=this.record.id;}
rec.endEdit();}}
if(keyChildren){for(var i=0;i<pkc.length;++i){this.keys.set(this.table.name,pkc[i].name,ids[0][i]);}
this.setChildKeys(false);this.enableChildren();}
this.store.commitChanges();if(this.saveButton){this.saveButton.disable();}
this.fireEvent('savesuccess',obj);Credit360.Page.showMessage(__tr('Saved'));if(typeof(callback)==="function"){callback(true);}},andFinally:function(obj){delete this.blockSave;if(this.saveButton){var btnEl=this.saveButton.el.child(this.saveButton.buttonSelector);btnEl.removeClass('spinner-icon');btnEl.addClass('save-icon');}},scope:this},this);},insertAfter:function(newcomp,comp){Form.insertOffset(this,newcomp,comp,1);},insertBefore:function(newcomp,comp){Form.insertOffset(this,newcomp,comp,0);},saveXml:function(p){if(this.initialConfig.labelWidth){p.setAttribute("label-width",this.initialConfig.labelWidth);}
this.items.each(function(item){item.saveXml(p);});},getFieldValue:function(name){var fld=this.fields[name];if(!fld){throw"the field '"+name+"' could not be found";}
return fld.getValue();}});Form.reg(Form.CmsRecord,'cms-record');}());