480 lines
15 KiB
JavaScript
480 lines
15 KiB
JavaScript
/*
|
|
* Case Initiation page behaviour.
|
|
*
|
|
* This file owns record loading/navigation, verification-section state,
|
|
* address copying and duplicate-address lookup. The encrypted JSON save
|
|
* workflow is intentionally isolated in application-save.js.
|
|
*/
|
|
var records=[];
|
|
var recIndx = 0;
|
|
var recpos = 0;
|
|
var SameAddr=[];
|
|
var AddrElem=[
|
|
["rv","raddr1","raddr2","raddr3","rlandmark","Rcolony","colr","rcity","rpincode","rphone"],
|
|
["ov","companyname","oaddr1","oaddr2","oaddr3","olandmark","Ocolony","colo","ocity","opincode","ophone","extension"],
|
|
["pv","paddr1","paddr2","paddr3","plandmark","Pcolony","colp","pcity","ppincode"],
|
|
["bankcode","bankcode","bank_branch_id","product","loanamount","apptype","contactperson","specialinst"]
|
|
];
|
|
var selectedAddr=-1;
|
|
var FocusAfter="customername";
|
|
var CHECKBOX_FIELDS=new Set(["rv","sradd","rtv","ov","soadd","otv","rco","pv","rcp","ocp","spadd","refv","docv"]);
|
|
var DUPLICATE_OPERATION={R:19,O:20,P:21,A:22};
|
|
var PUNCHED_RECORDS_URL="punchedrecs";
|
|
|
|
function InitPage()
|
|
{
|
|
var portField = document.getElementById("portfolio_id");
|
|
var initialPortField = document.getElementById("initial-portfolio-id");
|
|
var visibleContentsField = document.getElementById("visiblecontents");
|
|
var port = initialPortField ? initialPortField.value : (portField ? portField.value : "-1");
|
|
var viscontents = visibleContentsField ? visibleContentsField.value : "";
|
|
if (viscontents && viscontents.slice(-ColDelim.length) !== ColDelim) {
|
|
viscontents += ColDelim;
|
|
}
|
|
|
|
centerDivBoth("formcontainer","H");
|
|
HideSections('rtv');
|
|
HideSections('otv');
|
|
HideSections('section');
|
|
UnhideSections(viscontents,ColDelim);
|
|
if (portField) {
|
|
$(portField).val(port);
|
|
}
|
|
if(port>0)
|
|
{
|
|
if(document.getElementById("ajaxmsg") !== null)
|
|
{
|
|
CygnusNotifications.show({type:"warning",code:"1001AJX",message:"Another operation is being processed, please wait.",duration:3000});
|
|
return;
|
|
}
|
|
LoadingMsg("Fetching records, please wait...","ajaxmsg");
|
|
loadPunchedRecords(port,$("#uuid").val());
|
|
}
|
|
|
|
}
|
|
|
|
function GotoRecord(el,searchtype)
|
|
{
|
|
var recno=el.value;
|
|
if(recno!='')
|
|
{
|
|
if(searchtype == 'recno')
|
|
{
|
|
if(recno > recIndx || recno <=0)
|
|
{
|
|
CygnusNotifications.show({type:"danger",code:"1001IRNG",message:"Invalid input. Out of range",duration:3000});
|
|
}
|
|
else
|
|
{
|
|
recpos=recno-1;
|
|
FillDetails(recpos);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for(var index = 0; index < records.length; index++ )
|
|
{
|
|
if( records[index].applno === recno ) {
|
|
recpos = index;
|
|
FillDetails(recpos);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function AddNewRecord()
|
|
{
|
|
if(recIndx==0 || String(records[recIndx-1].case_id)!='0')
|
|
{
|
|
recIndx = recIndx+1;
|
|
recpos = recIndx-1;
|
|
records[recpos]={case_id:'0',portfolio_id:$("#portfolio_id").val(),status:'0',
|
|
company_id:$("#company_id").val(),branch_id:$("#branch_id").val(),uuid:'',mvcode:'******'};
|
|
}
|
|
else
|
|
{
|
|
recpos=recIndx-1;
|
|
}
|
|
FillDetails(recpos);
|
|
}
|
|
function AfterResponse(response,oprID)
|
|
{
|
|
if(oprID>=19 && oprID<=22) handleDuplicateDetailsResponse(response,oprID);
|
|
}
|
|
async function loadPunchedRecords(portfolioId,documentCaseId)
|
|
{
|
|
try
|
|
{
|
|
var query=new URLSearchParams({portfolioId:portfolioId,documentCaseId:documentCaseId || ""});
|
|
var response=await fetch(PUNCHED_RECORDS_URL+"?"+query.toString(),{
|
|
method:"GET",credentials:"same-origin",headers:{Accept:"application/json"}
|
|
});
|
|
var body=await response.json().catch(function(){return null;});
|
|
if(!response.ok || !body || !body.success) throw body && body.message ? body.message : {};
|
|
records=Array.isArray(body.data && body.data.records) ? body.data.records : [];
|
|
recIndx=records.length;
|
|
updateRecordCounter(0,recIndx);
|
|
recpos=recIndx==0 ? 0 : recIndx-1;
|
|
FillDetails(recpos);
|
|
}
|
|
catch(error)
|
|
{
|
|
CygnusNotifications.show({type:"danger",code:error.code || "APP-5002",
|
|
message:error.message || "Cygnus could not load punched records.",referenceId:error.referenceId});
|
|
records=[];recIndx=0;recpos=0;FillDetails(0);
|
|
}
|
|
finally{$("#ajaxmsg").remove();}
|
|
}
|
|
function handleDuplicateDetailsResponse(response,oprID)
|
|
{
|
|
var rows=response.split(RowDelim).slice(0,-1);
|
|
if($("#portfolio_id").val()==81)
|
|
{
|
|
for(var index=0;index<rows.length;index++) incrementDuplicateApplicationNumber();
|
|
}
|
|
else SameAddr=rows.map(function(row){return row.split(ColDelim);});
|
|
SelectAddr(oprID-19);
|
|
}
|
|
function incrementDuplicateApplicationNumber()
|
|
{
|
|
var appl=$("#applno").val();
|
|
CygnusNotifications.show({type:"warning",code:"APP-DUPLICATE",message:"Application number "+appl+" already exists.",duration:3000});
|
|
appl=appl.search('_1')<0 ? appl+'_1' : appl.split('_')[0]+'_'+(parseInt(appl.split('_')[1])+1);
|
|
$("#applno").val(appl);
|
|
CygnusInitiationValidation.validateField(document.getElementById('applno'));
|
|
document.getElementById('applno').focus();
|
|
}
|
|
function findRecord(arrOpr)
|
|
{
|
|
var tempPos= recpos;
|
|
var maxLen= recIndx-1;
|
|
if(arrOpr==1) tempPos=0;
|
|
if(arrOpr==2)
|
|
{
|
|
if(tempPos>0) tempPos=tempPos-1;
|
|
else return false;
|
|
}
|
|
if(arrOpr==3)
|
|
{
|
|
if(tempPos<maxLen) tempPos=tempPos+1;
|
|
else return false;
|
|
}
|
|
if(arrOpr==4) tempPos=maxLen;
|
|
recpos= tempPos;
|
|
FillDetails(recpos);
|
|
}
|
|
function FillDetails(indx)
|
|
{
|
|
if(recIndx > 0)
|
|
{
|
|
document.forms['casedetails'].reset();
|
|
updateRecordCounter(indx+1,recIndx);
|
|
Object.keys(records[indx]).forEach(function(fieldName){fillRecordField(fieldName,records[indx][fieldName]);});
|
|
$("#btnsave").toggle($("#status").val()!='1');
|
|
FireClickEvents();
|
|
document.getElementById("applno").focus();
|
|
}
|
|
else
|
|
{
|
|
CygnusNotifications.show({type:"danger",code:"5005MQRY",message:"No records found",duration:3000});
|
|
AddNewRecord();
|
|
}
|
|
}
|
|
function fillRecordField(fieldName,fieldValue)
|
|
{
|
|
var field=document.getElementById(fieldName) || dynamicFieldElement(fieldName);
|
|
if(!field) return;
|
|
if(CHECKBOX_FIELDS.has(fieldName))
|
|
{
|
|
field.checked=fieldName=='docv' ? $(field).is(":visible") : fieldValue=='1';
|
|
return;
|
|
}
|
|
field.value=fieldValue;
|
|
}
|
|
function dynamicFieldElement(fieldName)
|
|
{
|
|
var dynamicFields=document.querySelectorAll("#FormPanel6 [id]");
|
|
for(var index=0;index<dynamicFields.length;index++)
|
|
if(dynamicFields[index].id.toLowerCase()==fieldName.toLowerCase()) return dynamicFields[index];
|
|
return null;
|
|
}
|
|
function updateRecordCounter(current,total)
|
|
{
|
|
$("#recfound").html("<b>( "+current+" / "+total+" )</b>");
|
|
}
|
|
function FireClickEvents()
|
|
{
|
|
["rv","ov","rtv","otv","pv","refv"].forEach(function(id){HandleClick(document.getElementById(id));});
|
|
}
|
|
function FireToggleEvents()
|
|
{
|
|
ToggleChks(document.getElementById('rv').checked && document.getElementById('ov').checked,["rco"]);
|
|
var applicationType=document.getElementById('apptype').value.toUpperCase();
|
|
ToggleChks(applicationType!='APPLICANT' && applicationType!='-1',["sradd","soadd","spadd"]);
|
|
ToggleChks(document.getElementById('rv').checked,["rcp"]);
|
|
ToggleChks(document.getElementById('ov').checked,["ocp"]);
|
|
}
|
|
function HandleClick(el)
|
|
{
|
|
var handler=VERIFICATION_HANDLERS[el.id];
|
|
if(handler) handler(el);
|
|
}
|
|
var VERIFICATION_HANDLERS={
|
|
rv:function(el){
|
|
setFormValidation(el,'FormPanel2',document.getElementById('rtv').checked);
|
|
EnableDisableFields(el.checked,'raddr1,raddr2,raddr3,rlandmark,colr,rpincode',',');
|
|
},
|
|
rtv:function(el){setFormValidation(el,'FormPanel2',document.getElementById('rv').checked);},
|
|
ov:function(el){
|
|
setFormValidation(el,'FormPanel3',document.getElementById('otv').checked);
|
|
EnableDisableFields(el.checked,'oaddr1,oaddr2,oaddr3,olandmark,colo,opincode',',');
|
|
},
|
|
otv:function(el){setFormValidation(el,'FormPanel3',document.getElementById('ov').checked);},
|
|
pv:function(el){
|
|
setFormValidation(el,'FormPanel4',false);
|
|
EnableDisableFields(el.checked,'paddr1,paddr2,paddr3,plandmark,colp,ppincode',',');
|
|
if(!el.checked){document.getElementById('rcp').checked=false;document.getElementById('ocp').checked=false;}
|
|
},
|
|
refv:function(el){setFormValidation(el,'FormPanel5',false);},
|
|
rco:function(el){AutoFill('rco',el.checked ? 1 : 0);},
|
|
rcp:function(el){handlePropertyCopy(el,'rcp','ocp');},
|
|
ocp:function(el){handlePropertyCopy(el,'ocp','rcp');}
|
|
};
|
|
function handlePropertyCopy(el,copyType,otherCheckboxId)
|
|
{
|
|
AutoFill(copyType,el.checked ? 1 : 0);
|
|
if(!el.checked) return;
|
|
document.getElementById(otherCheckboxId).checked=false;
|
|
var property=document.getElementById('pv');
|
|
property.checked=true;
|
|
HandleClick(property);
|
|
}
|
|
function setFormValidation(Elem,FormPanel,CounterPartElem)
|
|
{
|
|
if(Elem.checked || CounterPartElem)
|
|
{
|
|
UnhideSections(FormPanel+ColDelim, ColDelim);
|
|
}
|
|
else
|
|
{
|
|
HideSections(FormPanel);
|
|
}
|
|
CygnusInitiationValidation.validateVerification(Elem.id);
|
|
FireToggleEvents();
|
|
}
|
|
function AutoFill(Opt,FillMode)
|
|
{
|
|
var mapping=ADDRESS_COPY_MAPPINGS[Opt];
|
|
if(!mapping) return;
|
|
if(FillMode==1) CopyDetails(mapping.source,mapping.target);
|
|
else if(document.getElementById(mapping.sourceColony).value==document.getElementById(mapping.targetColony).value)
|
|
ClearDetails(mapping.target);
|
|
}
|
|
var ADDRESS_COPY_MAPPINGS={
|
|
rco:{
|
|
source:["raddr1","raddr2","raddr3","Rcolony","colr","rcity","rlandmark","rpincode","rphone"],
|
|
target:["oaddr1","oaddr2","oaddr3","Ocolony","colo","ocity","olandmark","opincode","ophone"],
|
|
sourceColony:"Rcolony",targetColony:"Ocolony"
|
|
},
|
|
rcp:{
|
|
source:["raddr1","raddr2","raddr3","Rcolony","colr","rcity","rlandmark","rpincode"],
|
|
target:["paddr1","paddr2","paddr3","Pcolony","colp","pcity","plandmark","ppincode"],
|
|
sourceColony:"Rcolony",targetColony:"Pcolony"
|
|
},
|
|
ocp:{
|
|
source:["oaddr1","oaddr2","oaddr3","Ocolony","colo","ocity","olandmark","opincode"],
|
|
target:["paddr1","paddr2","paddr3","Pcolony","colp","pcity","plandmark","ppincode"],
|
|
sourceColony:"Ocolony",targetColony:"Pcolony"
|
|
}
|
|
};
|
|
function ToggleChks(IsVisible,ChildElems)
|
|
{
|
|
if(IsVisible)
|
|
{
|
|
ChildElems.forEach(function(id){UnhideSections(id+ColDelim,ColDelim);});
|
|
}
|
|
else
|
|
{
|
|
ChildElems.forEach(function(id){HideSections(id);document.getElementById(id).checked=false;});
|
|
}
|
|
}
|
|
|
|
function ClearDetails(TargetFields)
|
|
{
|
|
TargetFields.forEach(function(id){document.getElementById(id).value="";});
|
|
}
|
|
function CopyDetails(SourceFields,TargetFields)
|
|
{
|
|
SourceFields.forEach(function(id,index){document.getElementById(TargetFields[index]).value=document.getElementById(id).value;});
|
|
}
|
|
function AfterOptSelect(ElemToRemove,OprID)
|
|
{
|
|
FillSameDet(selectedAddr, OprID);
|
|
selectedAddr=-1;
|
|
ElemToRemove.parentNode.removeChild(ElemToRemove);
|
|
}
|
|
function ShowAddrOptions(OprID)
|
|
{
|
|
var optDiv=document.createElement("div");
|
|
var Addr="";
|
|
optDiv.setAttribute("id","optDiv");
|
|
optDiv.setAttribute("class","FormPanel");
|
|
optDiv.setAttribute("style","font-family:Tahoma;overflow:visible");
|
|
var OptionPanel="<div id='TablePanel' class='tableContainer'><table border='0' cellspacing='0' width='100%' id='cutlist'><thead class='thead'><tr title='Row Title'><td colspan='2'>Available Addresses</td></tr></thead><tbody class='scrollContent'>";
|
|
for(var indx=0;indx<SameAddr.length;indx++)
|
|
{
|
|
OptionPanel=OptionPanel+"<tr><td><input type='radio' name='rb1' id='rb"+indx+"' value='"+indx+"' onclick='selectedAddr=this.value;' /></td>";
|
|
OptionPanel=OptionPanel+"<td style='padding-right:5px'>";
|
|
for(var cindx=0;cindx<4;cindx++)
|
|
{
|
|
Addr=Addr+" "+escapeHtml(SameAddr[indx][cindx]);
|
|
}
|
|
OptionPanel=OptionPanel+""+Addr+"</td></tr>";
|
|
Addr="";
|
|
}
|
|
OptionPanel=OptionPanel+"<tr><td colspan='2'><input type='button' class='button' name='btnok' style='margin-top:5px;float:right' value='OK' id='btnok' accesskey='K' onclick=\"AfterOptSelect(document.getElementById('inptDialog'),"+OprID+");\"";
|
|
OptionPanel=OptionPanel+"</tbody></table></div>";
|
|
optDiv.innerHTML=OptionPanel;
|
|
ShowInputDialog(optDiv,"Select Address","hint","inptDialog");
|
|
document.getElementById('rb0').focus();
|
|
}
|
|
function escapeHtml(value)
|
|
{
|
|
return String(value == null ? "" : value).replace(/[&<>"']/g, function(character) {
|
|
return ({"&":"&","<":"<",">":">",'"':""","'":"'"})[character];
|
|
});
|
|
}
|
|
function FillSameDet(AddrIndex,OprID)
|
|
{
|
|
|
|
if(!(AddrIndex < 0))
|
|
{
|
|
for(var cindx=0;cindx<SameAddr[AddrIndex].length;cindx++)
|
|
{
|
|
$("#"+AddrElem[OprID][cindx+1]).val((SameAddr[AddrIndex][cindx]));
|
|
}
|
|
document.getElementById(FocusAfter).focus();
|
|
var applicationType=document.getElementById('apptype').value.toUpperCase();
|
|
ToggleChks(applicationType!='APPLICANT' && applicationType!='-1',["sradd","soadd","spadd"]);
|
|
}
|
|
else
|
|
{
|
|
document.getElementById(AddrElem[OprID][0]).focus();
|
|
if(document.getElementById(AddrElem[OprID][0]).type=='checkbox'){document.getElementById(AddrElem[OprID][0]).checked=false;}
|
|
}
|
|
}
|
|
function SelectAddr(OprID)
|
|
{
|
|
|
|
if(SameAddr.length>1)
|
|
{
|
|
ShowAddrOptions(OprID);
|
|
}
|
|
else if(SameAddr.length===1)
|
|
{
|
|
FillSameDet(0,OprID);
|
|
}
|
|
else
|
|
{
|
|
FillSameDet(-1,OprID);
|
|
}
|
|
}
|
|
function FindSameDet(Elm,Visit,focAfter)
|
|
{
|
|
if($("#case_id").val()!='0' && Visit=='A')
|
|
{
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
FocusAfter=focAfter;
|
|
var procFlag=true;
|
|
if(Elm.type=='checkbox')
|
|
{
|
|
procFlag=Elm.checked;
|
|
}
|
|
if(procFlag)
|
|
{
|
|
var Applno=document.getElementById('applno').value;
|
|
if(Applno.length==0)
|
|
{
|
|
if(Elm.type=='checkbox'){Elm.checked=false;}
|
|
CygnusNotifications.show({type:"danger",code:"VLFRM",message:"Please enter application number.",duration:3000});
|
|
document.getElementById('applno').focus();
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
SameAddr=[];
|
|
var oprId=DUPLICATE_OPERATION[Visit];
|
|
var QryStr="val="+encodeURIComponent(Applno)+"&val1="+encodeURIComponent($("#portfolio_id").val())+"&val2="+encodeURIComponent(oprId);
|
|
RunAjax("GET","findsdet",QryStr,oprId);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function FindStr(el,elmids)
|
|
{
|
|
el.value=el.value.split('->')[0];
|
|
var skey=el.value.trim().toUpperCase();
|
|
if(skey!='UNKNOWN' && skey!='-1')
|
|
{
|
|
for(var indx=0;indx<elmids.length;indx++)
|
|
{
|
|
if(document.getElementById(elmids[indx]).value.toUpperCase().search(skey)>-1)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
var ADDRESS_SECTIONS={
|
|
r:{verification:"rv",city:"rcity",colony:"colr",colonyId:"Rcolony",addressFields:["raddr2","raddr3"]},
|
|
o:{verification:"ov",city:"ocity",colony:"colo",colonyId:"Ocolony",addressFields:["oaddr2","oaddr3"]},
|
|
p:{verification:"pv",city:"pcity",colony:"colp",colonyId:"Pcolony",addressFields:["paddr2","paddr3"]}
|
|
};
|
|
function addressSectionFor(fieldId)
|
|
{
|
|
var keys=Object.keys(ADDRESS_SECTIONS);
|
|
for(var index=0;index<keys.length;index++)
|
|
{
|
|
var section=ADDRESS_SECTIONS[keys[index]];
|
|
if(fieldId==section.city || fieldId==section.colony) return section;
|
|
}
|
|
return null;
|
|
}
|
|
function HandleBlur(el)
|
|
{
|
|
var section=addressSectionFor(el.id);
|
|
if(!section) return;
|
|
if(el.id==section.city)
|
|
{
|
|
if(!FindStr(el,section.addressFields))
|
|
{
|
|
CygnusNotifications.show({type:"danger",code:"1001AREA",message:"Invalid area.",duration:3000});
|
|
el.value="-1";
|
|
document.getElementById(section.colonyId).value="";
|
|
document.getElementById(section.colony).value="";
|
|
}
|
|
CygnusInitiationValidation.validateField(el);
|
|
}
|
|
if(el.id==section.colony)
|
|
{
|
|
if(!FindStr(el,section.addressFields))
|
|
{
|
|
CygnusNotifications.show({type:"danger",code:"1001AREA",message:"Invalid colony.",duration:3000});
|
|
el.value="";
|
|
}
|
|
var colonyId=document.getElementById(section.colonyId);
|
|
if(el.value=='') colonyId.value='';
|
|
if(colonyId.value=='') el.value='';
|
|
CygnusInitiationValidation.validateField(el);
|
|
}
|
|
}
|