Example #1
0
        protected void RenderQuestion(HtmlTextWriter writer, Lib.Data.DSQ.Question q)
        {
            if (q==null || !q.ID.HasValue)
                return;

            IMarkdownService markdownSvc = new MarkdownService(enableSyntaxHighlighting: true);
            IComplianceRepository complianceRepo = ObjectFactory.GetInstance<IComplianceRepository>();
            IDsqRepository dsqRepo = ObjectFactory.GetInstance<IDsqRepository>();

            string a = null;
            if (DrugID != null)
            {
                var answer = Lib.Data.DSQ.Answer.FindByDrug(DrugID.Value, q.ID.Value);
                if (answer != null && answer.ID.HasValue)
                    a = answer.Value;
            }

            if (!q.ShouldShowQuestion(false, a))
                return;

            var children = Lib.Data.DSQ.Question.FindByParent(q);
            bool has_children = false;

            if (children != null && children.Count > 0)
                has_children = true;

            if(q.HideFromView)
            {
                // if the answere was no, we don't care if it has any
                // children
                if(q.FieldType == "Yes/No" && a == "No")
                    return;

                if( has_children )
                {
                    foreach( var cq in children )
                        RenderQuestion( writer, cq );
                }

                return;
            }

            Eoc eocForQ = complianceRepo.GetEoc(DrugID.Value, q.ID.Value);
            bool for_eoc = false;

            if(eocForQ != null)
            {
                if(eocForQ.AppliesTo.Any(r => Framework.Security.Manager.HasRole(r)))
                {
                    for_eoc = true;
                }
            }

            string cssClass = "clearfix form-row";
            if (has_children)
                cssClass += " has-children";

            if (q.ParentID.HasValue)
            {
                writer.AddAttribute("data-parent-id", q.ParentID.Value.ToString());
                writer.AddAttribute("data-parent-checks", q.ParentChecks);
                cssClass += " has-parent";
            }

            writer.AddAttribute("data-id", q.ID.Value.ToString());
            writer.AddAttribute("class", cssClass);
            writer.RenderBeginTag("div");

            writer.AddAttribute("class", "form-label");
            writer.AddAttribute("for", "form-q-"+q.ID.Value.ToString());
            writer.RenderBeginTag("label");

            if( for_eoc )
            {
                writer.AddAttribute( "class", "form-label-text" );
                writer.RenderBeginTag( "span" );
            }

            writer.WriteEncodedText(q.ViewText);

            if( for_eoc )
            {
                writer.RenderEndTag();

                writer.AddAttribute( "class", "form-label-required" );
                writer.RenderBeginTag( "span" );

                if( !string.IsNullOrEmpty( a ) )
                    writer.WriteEncodedText( a );

                writer.RenderEndTag();
            }

            writer.RenderEndTag();

            writer.AddAttribute("class", "form-input");
            writer.RenderBeginTag("div");

            writer.AddAttribute("class", "form-info");
            writer.AddAttribute("name", "q-" + q.ID.Value.ToString());
            writer.RenderBeginTag("span");

            switch (q.FieldType)
            {
                case "Checkbox List":
                    RenderQuestion_CheckboxList(writer, q, a);
                    break;
                case "Link List":
                case "EOC":
                    RenderQuestion_LinkList(writer, q, a);
                    break;
                case "TextArea":
                    // MJL - This is not the most efficient solution.  Saving the
                    // converted text would be more efficient.  This approach keeps
                    // Markdown available for editing.
                    writer.Write(markdownSvc.ToHtml(a));
                    break;
                default:
                    if( !string.IsNullOrEmpty(a) )
                        writer.WriteEncodedText(a);
                    break;
            }

            writer.RenderEndTag();

            writer.RenderEndTag();

            writer.RenderEndTag();

            bool eoc_applies = false;
            Lib.Data.Eoc eoc = null;

            if( for_eoc )
            {
                /*
                eoc = new Lib.Data.Eoc( long.Parse(q.Answers) );
                if( eoc != null )
                {
                    var profile = Systems.Security.GetCurrentProfile();
                    if( profile != null && eoc.HasUserType( profile.UserTypeID ) )
                        eoc_applies = true;
                }
                */

                // code has been changed to only display as an eoc if the
                // eoc applies to the current user.
                eoc_applies = for_eoc;
            }

            if( has_children || eoc_applies )
            {
                writer.AddAttribute("id", "form-q-" + q.ID.Value.ToString()+"-children");
                writer.AddAttribute("class", "contains-children");
                writer.RenderBeginTag("div");

                /*
                var drugs = Lib.Systems.Lists.GetMyDrugList().GetItems<Lib.Data.Drug>();
                bool has_drug = false;

                foreach( var d in drugs )
                    if( d.ID == Drug.ID )
                        has_drug = true;
                */

                var userList = Lib.Systems.Lists.GetMyDrugList().GetItems();
                bool has_drug = userList.Any(x => x.ItemID == Drug.ID);

                if( eoc_applies && has_drug )
                {
                    PrescriberEoc prescriberEoc = complianceRepo.Find(Systems.Security.GetCurrentProfile().ID ?? 0, Drug.ID ?? 0, eocForQ.Id);
                    bool is_certified = prescriberEoc != null
                        ? prescriberEoc.CompletedAt != null
                        : false;

                    DateTime? date_certified = prescriberEoc != null
                        ? prescriberEoc.CompletedAt
                        : null;

                    writer.AddAttribute( "data-parent-id", q.ID.Value.ToString() );
                    writer.AddAttribute( "data-parent-checks", "Required|Optional" );
                    writer.AddAttribute( "data-id", q.ID.Value.ToString() + "-certify" );
                    writer.AddAttribute( "class", "clearfix form-row has-parent eoc-certify-row" + ((is_certified) ? " eoc-certified" : "") );
                    writer.RenderBeginTag( "div" );
                    {
                        writer.AddAttribute( "class", "label-wrapper clearfix" );
                        writer.RenderBeginTag( "div" );
                        {
                            writer.AddAttribute( "class", "form-label" );
                            writer.AddAttribute( "for", "form-q-" + q.ID.Value.ToString() );
                            writer.RenderBeginTag( "label" );
                            {
                                writer.WriteEncodedText( "Yes, I acknowledge that I am aware of the " + q.ViewText + " requirement for this REMS medication" );
                            }
                            writer.RenderEndTag();
                        }
                        writer.RenderEndTag();

                        writer.AddAttribute( "class", "form-input" );
                        writer.RenderBeginTag( "div" );
                        {
                            if( is_certified )
                            {
                                writer.AddAttribute( "alt", "Certified" );
                                writer.AddAttribute( "class", "eoc-certified-icon" );
                                writer.AddAttribute( "src", "/images/Warning_Green_Check.png" );
                                writer.RenderBeginTag( "img" );
                                writer.RenderEndTag();

                                writer.RenderBeginTag( "span" );
                                {
                                    writer.WriteEncodedText( "Complete as of " + date_certified.Value.ToShortDateString() + " " + date_certified.Value.ToShortTimeString() );
                                }
                                writer.RenderEndTag();
                            }
                            else
                            {
                                writer.AddAttribute( "alt", "Not Certified" );
                                writer.AddAttribute( "class", "eoc-certified-icon" );
                                writer.AddAttribute( "src", "/images/Warning_Yellow_Exclimation.png" );
                                writer.RenderBeginTag( "img" );
                                writer.RenderEndTag();

                                writer.AddAttribute( "class", "button ajax-button" );
                                writer.AddAttribute( "href", "/api/App/Users/Certified?drug_id=" + Drug.ID.Value + "&eoc_name=" + eocForQ.Name );
                                writer.RenderBeginTag( "a" );
                                {
                                    writer.WriteEncodedText( "YES" );
                                }
                                writer.RenderEndTag();

                                writer.RenderBeginTag( "span" );
                                {
                                    writer.WriteEncodedText( "Reviewed Requirements?" );
                                }
                                writer.RenderEndTag();
                            }
                        }
                        writer.RenderEndTag();
                    }
                    writer.RenderEndTag();
                }

                if( has_children )
                {
                    foreach( var cq in children )
                        RenderQuestion( writer, cq );
                }

                writer.RenderEndTag();
            }
        }
Example #2
0
        protected void RenderQuestion(HtmlTextWriter writer, Lib.Data.DSQ.Question q)
        {
            if (q==null || !q.ID.HasValue)
                return;

            string a = null;
            bool pending_changes = false;
            if (DrugID != null)
            {
                var answer = Lib.Data.DSQ.Answer.FindByDrug(DrugID.Value, q.ID.Value);
                if (answer != null && answer.ID.HasValue)
                {
                    a = answer.Value;
                    if( version.HasValue )
                    {
                        var av = Lib.Data.DSQ.AnswerVersion.FindByDrugVersion(DrugID.Value, version.Value, answer.ID.Value);
                        if( av != null && av.ID.HasValue )
                        {
                            a = av.Value;
                            pending_changes = true;
                        }
                    }
                }
            }

            if( !q.ShouldShowQuestion( true, a ) )
                return;

            if( q.FieldType == "Link List" )
            {
                RenderQuestion_LinkList(writer, q, a, pending_changes);
                return;
            }
            else if( q.FieldType == "EOC" )
            {
                RenderQuestion_EOC( writer, q, a, pending_changes );
                return;
            }

            var children = Lib.Data.DSQ.Question.FindByParent(q);
            bool has_children = false;

            if (children.Count > 0)
                has_children = true;

            string cssClass = "clearfix form-row";
            if( has_children )
                cssClass += " has-children";
            if( pending_changes )
                cssClass += " pending-changes";

            if( q.ParentID.HasValue )
            {
                writer.AddAttribute( "data-parent-id", q.ParentID.Value.ToString() );
                writer.AddAttribute( "data-parent-checks", q.ParentChecks );
            }

            writer.AddAttribute( "data-id", q.ID.Value.ToString() );
            writer.AddAttribute( "class", cssClass );
            writer.RenderBeginTag( "div" );

            writer.AddAttribute( "class", "form-label" );
            writer.AddAttribute( "for", "form-q-" + q.ID.Value.ToString() );
            writer.RenderBeginTag( "label" );

            writer.AddAttribute("class", "edit-question-button");
            writer.AddAttribute("data-id", q.ID.Value.ToString());
            writer.RenderBeginTag("span");
            writer.WriteEncodedText("Edit");
            writer.RenderEndTag();

            if(q.HideFromView)
                writer.AddAttribute("class", "form-label-hidden-question");

            writer.RenderBeginTag("span");
            writer.WriteEncodedText( q.Text );
            writer.RenderEndTag();

            if( q.Required )
            {
                writer.WriteEncodedText( " " );
                writer.RenderBeginTag( "em" );
                writer.WriteEncodedText( "*" );
                writer.RenderEndTag();
            }

            writer.RenderEndTag();

            switch( q.FieldType )
            {
            case "TextBox":
                RenderQuestion_TextBox( writer, q, a );
                break;
            case "TextArea":
                RenderQuestion_TextArea( writer, q, a );
                break;
            case "Yes/No":
                RenderQuestion_YesNo( writer, q, a );
                break;
            case "Checkbox":
                RenderQuestion_Checkbox( writer, q, a );
                break;
            case "Checkbox List":
                RenderQuestion_CheckboxList( writer, q, a );
                break;
            case "Radio Buttons":
                RenderQuestion_RadioButtons( writer, q, a );
                break;
            case "DropDown":
                RenderQuestion_DropDown( writer, q, a );
                break;
            default:
                throw new Exception( "Unknown FieldType for Lib.Data.Question with ID " + q.ID.Value.ToString() );
            }

            writer.RenderEndTag();

            if (has_children)
            {
                writer.AddAttribute("id", "form-q-" + q.ID.Value.ToString()+"-children");
                writer.AddAttribute("class", "to-be-hidden contains-children");
                writer.RenderBeginTag("div");

                foreach (var cq in children)
                    RenderQuestion(writer, cq);

                writer.RenderEndTag();
            }
        }