<!---
  #10652 / #10411 / #10412
  On SOC (1) / ROC (3) / Discharge (9) submit:
    1) Calculate C0500 (BIMS total) from C0200–C0400C
    2) Auto-populate M1700 / M1710 from C0100=0 or C0500 score bands (#10412)
    3) Auto-populate D0150 Yes/No parents from frequency children (#10411)
  Field maps differ for Discharge. Runs on stage + prod whenever PATTII lookup is ON.
--->
<cfif NOT IsDefined("_isStageSecure")>
  <cfset _isStageSecure = (IsDefined("Request.use_assessment_lookup_PATTII") AND Request.use_assessment_lookup_PATTII) />
</cfif>
<cfif NOT IsDefined("_wviModBy")>
  <cfset _wviModBy = 0 />
  <cfif IsDefined("session.employeeid") AND IsNumeric(session.employeeid) AND Val(session.employeeid) GT 0>
    <cfset _wviModBy = Val(session.employeeid) />
  <cfelseif IsDefined("client.emp_id") AND IsNumeric(client.emp_id)>
    <cfset _wviModBy = Val(client.emp_id) />
  </cfif>
</cfif>
<cfif NOT IsDefined("getass") OR NOT IsQuery(getass) OR getass.recordcount EQ 0>
  <cfquery name="getass" datasource="#Application.DataSrc#">
    SELECT * FROM #Request.prefix_db_agency#.pAssessments
    WHERE Assmt_ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#Assmt_ID#">
    AND status = <cfqueryparam cfsqltype="cf_sql_integer" value="0">
  </cfquery>
</cfif>
<cfif NOT IsDefined("assessment_reason") AND getass.recordcount GT 0>
  <cfset assessment_reason = getass.F26 />
</cfif>
<cfset _f26First = Left(Trim(ToString(assessment_reason)), 1) />
<cfset _isSocRoc = (getass.recordcount GT 0 AND (_f26First EQ "1" OR _f26First EQ "3")) />
<cfset _isDischarge = (getass.recordcount GT 0 AND _f26First EQ "9") />
<cfset _isSocRocDc = (_isSocRoc OR _isDischarge) />

<cfif _isStageSecure AND _isSocRocDc>

  <cfif _isDischarge>
    <cfset _c0100Fld = "F41" />
    <cfset _bimsItemFlds = "F42,F43,F44,F45,F46,F47,F48" />
    <cfset _c0500Fld = "F49" />
    <cfset _m1700Fld = "F38" />
    <cfset _m1710Fld = "F39" />
    <cfset d0150_parent_fields = "F54,F56,F58,F60,F62,F64,F66,F68,F70" />
    <cfset d0150_child_fields = "F55,F57,F59,F61,F63,F65,F67,F69,F71" />
  <cfelse>
    <cfset _c0100Fld = "F37" />
    <cfset _bimsItemFlds = "F38,F39,F40,F41,F42,F43,F44" />
    <cfset _c0500Fld = "F45" />
    <cfset _m1700Fld = "F34" />
    <cfset _m1710Fld = "F35" />
    <cfset d0150_parent_fields = "F50,F52,F54,F56,F58,F60,F62,F64,F66" />
    <cfset d0150_child_fields = "F51,F53,F55,F57,F59,F61,F63,F65,F67" />
  </cfif>

  <cfset _lookupLabels = ListAppend(d0150_parent_fields, "#_m1700Fld#,#_m1710Fld#,#_c0500Fld#") />
  <cfset _lookupReasons = Trim(ToString(assessment_reason)) />
  <cfif _f26First EQ "3" AND ListFindNoCase(_lookupReasons, "1 - Start of care - further visits planned") EQ 0>
    <cfset _lookupReasons = ListAppend(_lookupReasons, "1 - Start of care - further visits planned") />
  </cfif>
  <cfquery name="getD0150AnswerOpts" datasource="#Application.DataSrc#">
    SELECT ques.answer_label, answ.answer, answ.srt_id
    FROM #Request.prefix_db_lookup#.#Request.assessment_questions_lookup# ques
    INNER JOIN #Request.prefix_db_lookup#.#Request.assessment_answers_lookup# answ
      ON answ.question_id = ques.ques_id
      AND answ.assessment_reason = ques.assessment_reason
    WHERE ques.Deleted = 0
      AND answ.Deleted = 0
      AND ques.answer_label IN (<cfqueryparam value="#_lookupLabels#" cfsqltype="cf_sql_varchar" list="yes">)
      AND ques.assessment_reason IN (<cfqueryparam value="#_lookupReasons#" cfsqltype="cf_sql_varchar" list="yes">)
    ORDER BY answ.srt_id ASC
  </cfquery>

  <!--- #10652: C0500 BIMS total --->
  <cfset _c0100Val = "" />
  <cfif ListFindNoCase(getass.columnList, _c0100Fld) GT 0>
    <cftry>
      <cfset _c0100Raw = getass[_c0100Fld][getass.currentRow] />
      <cfif IsSimpleValue(_c0100Raw) AND NOT IsNull(_c0100Raw)>
        <cfset _c0100Val = Trim(ToString(_c0100Raw)) />
      </cfif>
      <cfcatch></cfcatch>
    </cftry>
  </cfif>
  <cfif _c0100Val EQ "NULL"><cfset _c0100Val = "" /></cfif>
  <cfset _c0100IsNo = (Len(_c0100Val) AND (FindNoCase("0.", _c0100Val) GT 0 OR Left(_c0100Val, 1) EQ "0")) />
  <cfset _c0100IsYes = (Len(_c0100Val) AND (FindNoCase("1.", _c0100Val) GT 0 OR Left(_c0100Val, 1) EQ "1")) />
  <cfset _c0500Score = "" />
  <cfset _c0500Has99 = false />
  <cfset _c0500Sum = 0 />
  <cfset _c0500ItemCount = 0 />

  <cfif _c0100IsYes>
    <cfloop list="#_bimsItemFlds#" index="_bimsFld">
      <cfset _bimsVal = "" />
      <cfif ListFindNoCase(getass.columnList, _bimsFld) GT 0>
        <cftry>
          <cfset _bimsRaw = getass[_bimsFld][getass.currentRow] />
          <cfif IsSimpleValue(_bimsRaw) AND NOT IsNull(_bimsRaw)>
            <cfset _bimsVal = Trim(ToString(_bimsRaw)) />
          </cfif>
          <cfcatch></cfcatch>
        </cftry>
      </cfif>
      <cfif _bimsVal EQ "NULL"><cfset _bimsVal = "" /></cfif>
      <cfif Len(_bimsVal)>
        <cfif Left(_bimsVal, 2) EQ "99">
          <cfset _c0500Has99 = true />
        <cfelse>
          <cfset _bimsCode = Left(_bimsVal, 1) />
          <cfif IsNumeric(_bimsCode) AND Val(_bimsCode) LTE 3>
            <cfset _c0500Sum = _c0500Sum + Val(_bimsCode) />
            <cfset _c0500ItemCount = _c0500ItemCount + 1 />
          </cfif>
        </cfif>
      </cfif>
    </cfloop>
    <cfif _c0500Has99>
      <cfset _c0500Score = "99" />
    <cfelseif _c0500ItemCount GT 0>
      <cfset _c0500Score = ToString(_c0500Sum) />
    </cfif>
  </cfif>

  <cfif Len(_c0500Score) AND ListFindNoCase("F45,F49", _c0500Fld)>
    <cfset _c0500Write = _c0500Score />
    <cfloop query="getD0150AnswerOpts">
      <cfif CompareNoCase(Trim(answer_label), _c0500Fld) EQ 0>
        <cfset _ans = Trim(answer) />
        <cfif Left(_ans, Len(_c0500Score)) EQ _c0500Score AND (Len(_ans) EQ Len(_c0500Score) OR NOT IsNumeric(Mid(_ans, Len(_c0500Score)+1, 1)))>
          <cfset _c0500Write = _ans />
          <cfbreak />
        </cfif>
      </cfif>
    </cfloop>
    <cfquery name="updateC0500BIMS" datasource="#Application.DataSrc#">
      UPDATE #Request.prefix_db_agency#.pAssessments SET
        #_c0500Fld# = <cfqueryparam value="#_c0500Write#" cfsqltype="cf_sql_varchar">,
        Record_Mod_Date = <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">,
        Record_Mod_By = <cfqueryparam value="#_wviModBy#" cfsqltype="cf_sql_integer">
      WHERE Assmt_ID = <cfqueryparam value="#Assmt_ID#" cfsqltype="cf_sql_integer">
      AND status = 0
    </cfquery>
  </cfif>

  <!--- #10411: D0150 Yes/No parents from frequency children --->
  <cfset d0150_updates = StructNew() />
  <cfloop from="1" to="#ListLen(d0150_parent_fields)#" index="_d0150i">
    <cfset _d0150Parent = ListGetAt(d0150_parent_fields, _d0150i) />
    <cfset _d0150Child = ListGetAt(d0150_child_fields, _d0150i) />
    <cfset _d0150ChildVal = "" />
    <cfif ListFindNoCase(getass.columnList, _d0150Child) GT 0>
      <cftry>
        <cfset _d0150Raw = getass[_d0150Child][getass.currentRow] />
        <cfif IsSimpleValue(_d0150Raw) AND NOT IsNull(_d0150Raw)>
          <cfset _d0150ChildVal = Trim(ToString(_d0150Raw)) />
        </cfif>
        <cfcatch></cfcatch>
      </cftry>
    </cfif>
    <cfif _d0150ChildVal EQ "NULL"><cfset _d0150ChildVal = "" /></cfif>
    <cfif Len(_d0150ChildVal)>
      <cfset _d0150Code = Left(_d0150ChildVal, 1) />
      <cfset _wantCode = (_d0150Code EQ "0") ? "0" : "1" />
      <cfset _d0150ParentVal = "" />
      <cfloop query="getD0150AnswerOpts">
        <cfif CompareNoCase(Trim(answer_label), _d0150Parent) EQ 0 AND Left(Trim(answer), 1) EQ _wantCode>
          <cfset _d0150ParentVal = Trim(answer) />
          <cfbreak />
        </cfif>
      </cfloop>
      <cfif NOT Len(_d0150ParentVal)>
        <cfset _d0150ParentVal = (_wantCode EQ "0") ? "0-No" : "1-Yes" />
      </cfif>
      <cfset d0150_updates[_d0150Parent] = _d0150ParentVal />
    </cfif>
  </cfloop>
  <cfif StructCount(d0150_updates) GT 0>
    <cfquery name="updateD0150OASIS" datasource="#Application.DataSrc#">
      UPDATE #Request.prefix_db_agency#.pAssessments SET
      <cfset _d0150First = true />
      <cfloop collection="#d0150_updates#" item="_d0150Parent">
        <cfif NOT _d0150First>,</cfif>
        #_d0150Parent# = <cfqueryparam value="#d0150_updates[_d0150Parent]#" cfsqltype="cf_sql_varchar">
        <cfset _d0150First = false />
      </cfloop>
      , Record_Mod_Date = <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">
      , Record_Mod_By = <cfqueryparam value="#_wviModBy#" cfsqltype="cf_sql_integer">
      WHERE Assmt_ID = <cfqueryparam value="#Assmt_ID#" cfsqltype="cf_sql_integer">
      AND status = 0
    </cfquery>
  </cfif>

  <!--- #10412 / #10652: M1700 / M1710 from C0100=0 or C0500 BIMS bands (not D0160/F68) --->
  <cfset m1700_val = "" />
  <cfset m1710_val = "" />
  <cfset _m1700Code = "" />
  <cfset _m1710Code = "" />
  <cfset _c0500Num = Val(_c0500Score) />
  <cfif _c0100IsNo>
    <cfset _m1700Code = "4" />
    <cfset _m1710Code = "4" />
  <cfelseif _c0500Score EQ "99">
    <!--- Unable to complete BIMS — do not map from score --->
  <cfelseif Len(_c0500Score) AND _c0500Num GTE 13 AND _c0500Num LTE 15>
    <cfset _m1700Code = "0" />
    <cfset _m1710Code = "0" />
  <cfelseif Len(_c0500Score) AND _c0500Num GTE 11 AND _c0500Num LTE 12>
    <cfset _m1700Code = "1" />
    <cfset _m1710Code = "1" />
  <cfelseif Len(_c0500Score) AND _c0500Num GTE 9 AND _c0500Num LTE 10>
    <cfset _m1700Code = "2" />
    <cfset _m1710Code = "2" />
  <cfelseif Len(_c0500Score) AND _c0500Num GTE 7 AND _c0500Num LTE 8>
    <cfset _m1700Code = "3" />
    <cfset _m1710Code = "3" />
  <cfelseif Len(_c0500Score) AND _c0500Num GTE 0 AND _c0500Num LTE 6>
    <cfset _m1700Code = "4" />
    <cfset _m1710Code = "4" />
  </cfif>
  <cfif Len(_m1700Code) AND Len(_m1710Code)>
    <cfloop query="getD0150AnswerOpts">
      <cfif CompareNoCase(Trim(answer_label), _m1700Fld) EQ 0 AND Left(Trim(answer), 1) EQ _m1700Code AND NOT Len(m1700_val)>
        <cfset m1700_val = Trim(answer) />
      </cfif>
      <cfif CompareNoCase(Trim(answer_label), _m1710Fld) EQ 0 AND Left(Trim(answer), 1) EQ _m1710Code AND NOT Len(m1710_val)>
        <cfset m1710_val = Trim(answer) />
      </cfif>
    </cfloop>
    <cfif NOT Len(m1700_val)>
      <cfswitch expression="#_m1700Code#">
        <cfcase value="0"><cfset m1700_val = "0. Alert/ oriented, able to focus and shift attention, comprehends and recalls task directions independently." /></cfcase>
        <cfcase value="1"><cfset m1700_val = "1. Requires prompting (cuing, repetition, reminders) only under stressful or unfamiliar conditions." /></cfcase>
        <cfcase value="2"><cfset m1700_val = "2. Requires assistance and some direction in specific situations (for example, on all tasks involving shifting of attention) or consistently requires low stimulus environment due to distractibility" /></cfcase>
        <cfcase value="3"><cfset m1700_val = "3. Requires considerable assistance in routine situations. Is not alert and oriented or is unable to shift attention and recall directions more than half the time." /></cfcase>
        <cfdefaultcase><cfset m1700_val = "4. Totally dependent due to disturbances such as constant disorientation, coma, persistent vegetative state, or delirium." /></cfdefaultcase>
      </cfswitch>
    </cfif>
    <cfif NOT Len(m1710_val)>
      <cfswitch expression="#_m1710Code#">
        <cfcase value="0"><cfset m1710_val = "0. Never" /></cfcase>
        <cfcase value="1"><cfset m1710_val = "1. In new or complex situations only" /></cfcase>
        <cfcase value="2"><cfset m1710_val = "2. On awakening or at night only" /></cfcase>
        <cfcase value="3"><cfset m1710_val = "3. During the day and evening, but not constantly" /></cfcase>
        <cfdefaultcase><cfset m1710_val = "4. Constantly" /></cfdefaultcase>
      </cfswitch>
    </cfif>
  </cfif>
  <cfif Len(m1700_val) AND Len(m1710_val) AND ListFindNoCase("F34,F38", _m1700Fld) AND ListFindNoCase("F35,F39", _m1710Fld)>
    <cfquery name="updateM1700M1710" datasource="#Application.DataSrc#">
      UPDATE #Request.prefix_db_agency#.pAssessments SET
        #_m1700Fld# = <cfqueryparam value="#m1700_val#" cfsqltype="cf_sql_varchar">,
        #_m1710Fld# = <cfqueryparam value="#m1710_val#" cfsqltype="cf_sql_varchar">,
        Record_Mod_Date = <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">,
        Record_Mod_By = <cfqueryparam value="#_wviModBy#" cfsqltype="cf_sql_integer">
      WHERE Assmt_ID = <cfqueryparam value="#Assmt_ID#" cfsqltype="cf_sql_integer">
      AND status = 0
    </cfquery>
  </cfif>

</cfif>
