Tuesday, 8 November 2022

Wednesday, 7 September 2022

MVC File Upload Partial View using entity framework and Generic repository and Unityofwork

 _Partial View


===========================================================================================================


<script src="~/lib/jquery/dist/jquery.min.js"></script>


<link rel="stylesheet" type="text/css" href="//cdn.datatables.net/1.10.12/css/jquery.dataTables.min.css" />


<script src="//cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>


<div class="form-group row">


    <Label class="control-label col-sm-2 text-left" for="FacilityNo">Description:</Label>


    <div class="col-md-3">


        @Html.EditorFor(model => model.DocDesc, new { htmlAttributes = new { @class = "form-control", @title = "First Name" } })


    </div>


</div>



<div class="form-group row">


    <Label class="control-label col-sm-2 text-left" for="FacilityNo">File</Label>


    <div class="col-md-3">


        <input class="input-file" type="file" size="50" asp-for="@Model.formFile" />


    </div>


</div>


<div class="form-group row">


    <div class="col-md-3">


        <a id="btnUpload" class="btn btn-primary" title="Upload Documents">Upload</a>


    </div>


</div>


<div>


    <div id="ResultsGrid" class="dvIssues">


        <div class="table-responsive" style="width:100%;">

            <table id="topicTable" cellpadding="0" cellspacing="0" class="table table-bordered table-condensed">

                <thead>


                    <tr>


                        <th>Document Desc</th>


                        <th>Uploaded By</th>


                        <th>Uploaded Date</th>


                        <th>Actions</th>


                    </tr>


                </thead>


            </table>


        </div>


    </div>


</div>




<div id="divPopupMessage" class="modal" role="dialog" data-keyboard="false" data-backdrop="static" aria-labelledby="divPopupMessageLabel">


    <div id="messagepopup" class="modal-dialog modal-dialog-centered">

        <div class="modal-content panel-warning">


            <div class="modal-header">


                <label id="H3" class="modal-title labelh3" title="Upload Error">Upload Message</label>


            </div>


            <div class="modal-body">


                <div class="row container-fluid" title="Upload Message">


                    <p id="lblSessionMessage">


                        <span id="errmessage"></span>


                        <br />


                    </p>


                </div>


                <div id="Div4" class="row container-fluid">


                    <div class="col-md-1"></div>


                    <div class="col-md-11">


                        <span class="pull-right">


                            <button id="btnOk" type="button" data-dismiss="modal" class="btn btn-warning" onclick="ClosePopUp()">OK</button>


                        </span>


                    </div>


                </div>




            </div>


        </div>


    </div>


</div>

<div id="loading" style="margin: 0px; padding: 0px; position: fixed; right: 0px;


    top: 0px; width: 100%; height: 100%; background-color: #666666; z-index: 30001;


    opacity: .8; filter: alpha(opacity=70);display:none;color:white;">


    <p style="position: absolute; top: 30%; left: 45%; color: White;">


        Loading, please wait...


    </p>


</div>


<script>


    var $loading = $('#loading').hide();


     let cqiTopics = [];

    var fileData = new FormData();

    var oTable;

    function bindDatatable() {


        oTable = $('#dtIssues').DataTable(


            {


                "drawCallback": function() {


                    $('.paginate_button').each(function() {


                        var text = $(this).text(),


                            title = isNaN(text) ? 'Search Page ' + text + ' Page' : 'Search Page ' + text;


                        $(this).attr('title', title);


                    });


                },


                "oLanguage": {


                    "sLengthMenu": 'Display <select title="Display records per page">' +


                        '<option value="10">10</option>' +


                        '<option value="25">25</option>' +


                        '</select> records',


                    "oAria": {


                        "sSortAscending": " - click/return to sort ascending",


                        "sSortDescending": " - click/return to sort descending"


                    }


                },


                "bStateSave": false,


                "searching": true,


                "bServerSide": true,


                "sAjaxSource": "@Url.Action("SearchDocumentResult", "Message")",




                "bProcessing": true,


                "language": {


                    "emptyTable": "No record found.",


                    "processing":


                        '<i class="fa fa-spinner fa-spin fa-3x fa-fw" style="color:#2a2b2b;"></i><span class="sr-only">Loading...</span> '


                },




                "order": [1, "desc"],




                "columnDefs": [


                    {


                        "title": "",


                        "targets": [0],


                        "width": "0%",


                        "mRender": function(data, type, full) {


                            debugger;


                            return '<a href=' + '@Url.Action("Download", "Message")/' + full[1] +


                                '>View</a> <a href=' + '@Url.Action("DeleteDoc", "Message")/' + full[1] +


                                '>Delete</a>'


                        }


                    },


                    {


                        "title": "Document Id",


                        "targets": [1],


                        "width": "0%",


                    },


                    {


                        "title": "Description",


                        "targets": [2],


                        "width": "0%",


                    },


                    {


                        "title": "Created By",


                        "targets": [3],


                        "width": "0%",


                    },


                    {


                        "title": "Date",


                        "targets": [4],


                        "width": "0%",


                    }


                ]


            });


        $("#btnSearch").on("click", function() {


            oTable.search('', $("#FirstName").val() + ','


                + $("#LastName").val() + ','


                + $("#Role Option:selected").text() + ','


                + $("#CqiLevel Option:selected").text() + ','


                + $("#Region Option:selected").text() + ','


                + $("#County Option:selected").text() + ','


                + $("#Team Option:selected").text() + ',' + "" + ',' + "").draw();


        });


    }

    $(document).ready(function() {

        $("#DocuTable tbody tr:odd").css("background-color", "#f9f9f9");


        $("#DocuTable tbody tr:even").css("background-color", "#fff");


        ClosePopUp();


        chkAttachDiv();


         $('#topicTable').hide();

        $("#btnUpload").click(function() {


            debugger;


            var boolsize = false;


            var upldFile = $('#formFile').val();


            var selectedDocDesc = $("#DocDesc").val();


            if ($.trim(upldFile).length == 0) {


                DialogOpen('nofile');


                return false;


            }




            var splitFileName = upldFile.toLowerCase().split('\\').pop();


            var stringFileNameSplit = splitFileName.split('.').length;


            if (stringFileNameSplit > 1) {


                if (splitFileName.split('.').pop().indexOf("jp") == -1 && splitFileName.split('.').pop().indexOf("gif") == -1 && splitFileName.split('.').pop().indexOf("tiff") == -1 && splitFileName.split('.').pop().indexOf("pdf") == -1 && splitFileName.split('.').pop().indexOf("bmp") == -1 && splitFileName.split('.').pop().indexOf("png") == -1 && splitFileName.split('.').pop().indexOf("doc") == -1) {




                    DialogOpen('filetype');


                    return false;


                }


            }


            else {


                DialogOpen('filetype');


                return false;


            }

            var files = $("#formFile").get(0).files;


            for (var i = 0; i < files.length; i++) {


                if (files[i].size > 2 * 1024 * 1024) {


                    boolsize = true;


                    break;


                }


            }




            if (boolsize) {


                DialogOpen('size');


                return false;


            }

            $('#loading').show();


            fileData.append('file', $('#formFile')[0].files[0]);


            fileData.append('docid', $("#DocDesc").val());


            var docarray = [];


            fileData.append('desc', $("#DocDesc").val());


            fileData.append('doctype', "");




            $.ajax({


                type: "POST",


                url: "@Url.Action("DocuUpload", "Message")",


                dataType: "json",


                contentType: false,


                processData: false,


                data: fileData,


                success: function(result, status, xhr) {


                    debugger;


                    $('#topicTable').show();


                    var cqiTopicObj = new Object();




                    var table = document.getElementById("topicTable");


                    var rowCount = table.rows.length;


                    var row = table.insertRow(rowCount);


                    row.id = cqiTopics.length;




                    var cell1 = row.insertCell(0);


                    var cell2 = row.insertCell(1);


                    var cell3 = row.insertCell(2);


                    var cell4 = row.insertCell(3);




                    cell1.innerHTML = result.docDesc;


                    cqiTopicObj.DocDesc = result.docDesc;


                    cell2.innerHTML = result.createdBy;


                    cqiTopicObj.CreatedBy = result.createdBy;


                    cell3.innerHTML =result.createdDt;


                    cqiTopicObj.CreatedDt = result.createdDt;


                    cell4.innerHTML = '<button type="button" id="btnDelete" class="btn btn-primary" onclick="deleteCQITopic(' + cqiTopics.length + ')">Delete</button>&nbsp;' + '<button type="button" class="btn btn-primary"  onclick="viewCQITopic(' + cqiTopics.length + ')">View</button>';


                    cqiTopicObj.DmsGuid = result.dmsGuid;


                    cqiTopics.push(cqiTopicObj);


                     $('#loading').hide();






                },


                error: function(xhr, status, error) {


                    DialogOpen('dms');


                    console.log('Failed to Upload DMS Document.');


                },


                complete: function() {


                    $('#loading').hide();


                    $('#formFile').val('');


                    $("#txtSelectedDoc").val('0');


                    $('#txtDocDesc').val('');


                    $('#txtSelectDesc').val('');


                }


            });


            $("tbody tr:odd").css("background-color", "#eee");


            $("tbody tr:even").css("background-color", "#ddd");


        });


    });




     function deleteCQITopic(rowIndex) {


        var index, table = document.getElementById('topicTable');


        for (var i = 1; i < table.rows.length; i++) {


            var attrIndex = table.rows[i].id;


            if (attrIndex == rowIndex) {


                var c = confirm("Do you want to delete this row ?");


                if (c === true) {




                    table.deleteRow(i);


                }


                if (table.rows.length === 1) {


                    table.style.display = "none";


                }


            }


        }


        return false;


    }




    function viewCQITopic(index) {


        var dmsId= cqiTopics[index].DmsGuid


        var link = '@Html.Raw(@Url.Action("Download", "Message", new { docId= -1000000000 , docdesc= -2000000000}))';


           link = link.replace("-1000000000", dmsId);


           window.location = link;




    };


    function chkAttachDiv() {


        $("#txtDocDesc").val('');


        $("#uploadFile").val('');


        $('#ManualDescription').hide();


        if ($('#dvUplCtrlGrd tr').length > 1) {


            $('#dvUplCtrlGrd').show();


        }


        else


            $('#dvUplCtrlGrd').hide();


        if ($('#dvUplCtrlGrd tr').length < 6)


            $('#dvUplCtrl').show();


        else


            $('#dvUplCtrl').hide();

    }


    function ClosePopUp() {


        $("#divPopupMessage").hide();


        $('#loading').hide();


        $('#formFile').val('');


        $("#txtSelectedDoc").val('0');


        $('#txtDocDesc').val('');


        $("#errmessage").text('');


        $('#txtSelectDesc').val('');


        $('#ManualDescription').hide();


    }




    function DialogOpen(message) {


        if (message == "nodoctype") { $('#errmessage').text('Please select the document type'); }


        if (message == "nofile") { $('#errmessage').text('Please select the document to upload'); }


        if (message == "nodocdesc") { $('#errmessage').text('Please enter the miscellaneous document description'); }


        if (message == "filetype") { $('#errmessage').text('Please upload document in the right format, the allowed formats are .JPEG, .GIF, .TIFF, .PDF, .BMP, .PNG, .DOCX'); }


        if (message == "size") { $('#errmessage').text('Please upload document of size less than 2 MB'); }


        if (message == "dms") {




            $('#errmessage').text('The system has encountered an error uploading your document in DMS.');




        }


        $("#divPopupMessage").show();

    }


    $(document).on("click", ".action-View", function(e) {

        e.preventDefault();


        var docId = $(this).closest('tr').attr('id');


        var docdesc = $(this).closest('tr').find("td:eq(0)").text();


        var link = '@Html.Raw(@Url.Action("Download", "Application", new { docId= -1000000000 , docdesc= -2000000000}))';


        link = link.replace("-1000000000", docId);


        link = link.replace("-2000000000", docdesc);


        window.location = link;


    });



</script>




<style>


    .modal-dialog {


        width: 550px;


    }


</style>




Controller


=====================================================================================


[HttpPost]


        [ValidateAntiForgeryToken]


        public ActionResult Delete(int id, IFormCollection collection)


        {


            try


            {


                return RedirectToAction(nameof(Index));


            }


            catch


            {


                return View();


            }


        }

        public ActionResult DocuUpload()


        {


            Guid DmsId = new Guid();


            try


            {


                var files = Request.Form.Files;


                var file = files[files.Count - 1];


                var extn = Path.GetExtension(file.FileName);


                var array = Convert.ToString(HttpContext.Request.Form["desc"]).Split(',');


                var desc = array[array.Count() - 1];


                using (var stream = new MemoryStream())


                {


                    file.CopyTo(stream);


                    DMSHelper obj = new DMSHelper();


                    DmsId = obj.UploadDocument(stream, "Messages", "HANDSLIC", file.ContentType, "HANDS", extn);


                    Console.WriteLine(DmsId);


                }




                return Json(new DocumentDetails()


                {


                    CreatedBy = "Vamshi",


                    CreatedDt = DateTime.Now.ToShortDateString(),


                    DmsGuid = Convert.ToString(DmsId),


                    DocDesc = desc


                });




            }


            catch (Exception ex)


            {




                throw ex;


            }


            finally


            {




            }


        }




        public FileResult Download(string docId)


        {


            Guid dmsId = new Guid(docId);


            byte[] returnBytes = new byte[10000000];


            string docType = string.Empty;


            try


            {


                DMSHelper obj = new DMSHelper();


                var result = obj.GetDocument(dmsId);


                returnBytes = result.Item1;


                docType = result.Item2;


            }


            catch (Exception ex)


            {


                throw ex;


            }


            finally


            {




            }




            return File(returnBytes, "application/pdf", string.Format("DMSDoc-{0}.{1}", 1, docType));


        }


        public FileResult DeleteDoc(int Id)


        {


            Guid docId = new Guid();


            byte[] returnBytes = new byte[10000000];


            string docType = string.Empty;


            try


            {


                DMSHelper obj = new DMSHelper();


                var result = obj.GetDocument(docId);


                returnBytes = result.Item1;


                docType = result.Item2;


            }


            catch (Exception ex)


            {


                throw ex;






            }


            finally


            {




            }




            return File(returnBytes, "application/pdf", string.Format("DMSDoc-{0}.{1}", 1, "pdf"));


        }



=======================================================================================================



{


    public class DMSHelper


    {


        public Guid UploadDocument(MemoryStream stream, string docType, string LicenseNumber, string fileContentType, string applicationType, string extn)


        {


            Guid DmsId = new Guid();


            try


            {


                byte[] docCon = ReadToEnd(stream);




                EndpointAddress endPointAddress = new EndpointAddress("service");


                BasicHttpBinding basicHttpBinding = new BasicHttpBinding();


                basicHttpBinding.MaxReceivedMessageSize = 2147483647;


                basicHttpBinding.MaxBufferPoolSize = 2147483647;


                basicHttpBinding.MaxBufferSize = 2147483647;


                basicHttpBinding.ReaderQuotas.MaxDepth = 2147483647;


                basicHttpBinding.ReaderQuotas.MaxBytesPerRead = 2147483647;


                basicHttpBinding.ReaderQuotas.MaxStringContentLength = 2147483647;


                basicHttpBinding.ReaderQuotas.MaxArrayLength = 2147483647;


                basicHttpBinding.ReaderQuotas.MaxNameTableCharCount = 2147483647;


                basicHttpBinding.TransferMode = TransferMode.Buffered;


                basicHttpBinding.BypassProxyOnLocal = false;


                basicHttpBinding.AllowCookies = false;


                basicHttpBinding.UseDefaultWebProxy = true;


                basicHttpBinding.MessageEncoding = WSMessageEncoding.Mtom;


                basicHttpBinding.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential;


                basicHttpBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;




                var client = new DMSClient(basicHttpBinding, endPointAddress);


                X509Certificate2 myCertificate = GetCertificate("test");


                client.ClientCredentials.ClientCertificate.Certificate = myCertificate;




                var metaData = new Dictionary<string, object>();

                Stream fileContent = new MemoryStream(docCon);

                string clientDocumentId = "MITSApplicationDocId";


                string contentType = "MITS";

                var expirationDate = DateTime.Now.AddYears(100);


                var fileExtension = extn;


                var mime = fileContentType;


                var requestedBy = "MITS.APP";


                var securityContext = 0;




                var docUpload = new DocumentUpload(clientDocumentId, contentType, expirationDate, fileExtension, metaData, mime, requestedBy, securityContext, fileContent);


                var Id = client.UploadDocument(docUpload);


                DmsId = Id.Id;


            }


            catch (Exception ex)


            {


                throw;


            }


            finally


            {




            }


            return DmsId;


        }




        public Tuple<byte[], string, string> GetDocument(Guid documentId)


        {


            try


            {


                EndpointAddress endPointAddress = new EndpointAddress("");


                BasicHttpBinding basicHttpBinding = new BasicHttpBinding();


                basicHttpBinding.MaxReceivedMessageSize = 2147483647;


                basicHttpBinding.MaxBufferPoolSize = 2147483647;


                basicHttpBinding.MaxBufferSize = 2147483647;


                basicHttpBinding.ReaderQuotas.MaxDepth = 2147483647;


                basicHttpBinding.ReaderQuotas.MaxBytesPerRead = 2147483647;


                basicHttpBinding.ReaderQuotas.MaxStringContentLength = 2147483647;


                basicHttpBinding.ReaderQuotas.MaxArrayLength = 2147483647;


                basicHttpBinding.ReaderQuotas.MaxNameTableCharCount = 2147483647;


                basicHttpBinding.TransferMode = TransferMode.Buffered;


                basicHttpBinding.BypassProxyOnLocal = false;


                basicHttpBinding.AllowCookies = false;


                basicHttpBinding.UseDefaultWebProxy = true;


                basicHttpBinding.MessageEncoding = WSMessageEncoding.Mtom;


                basicHttpBinding.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential;


                basicHttpBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;




                var client = new DMSClient(basicHttpBinding, endPointAddress);


                X509Certificate2 myCertificate = GetCertificate("DMSTest.MITSDev");


                //  client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.PeerTrust;


                client.ClientCredentials.ClientCertificate.Certificate = myCertificate;




                DocumentDownloadRequest obj = new DocumentDownloadRequest();


                obj.DMSDocumentId = documentId;


                obj.RequestedBy = "MITS.APP";


                DocumentDownload doc = new DocumentDownload();


                doc = client.GetDocument(obj);




                byte[] returnBytes = ReadToEnd(doc.FileContents);


                string docType = doc.FileExtension;


                string mimeType = doc.MimeType;




                return new Tuple<byte[], string, string>(returnBytes, docType, mimeType);


            }


            catch (Exception ex)


            {


                throw;


            }




        }




        public bool DeleteDocument(Guid documentId)


        {


            bool result = false;


            try


            {


                EndpointAddress endPointAddress = new EndpointAddress("");


                BasicHttpBinding basicHttpBinding = new BasicHttpBinding();


                basicHttpBinding.MaxReceivedMessageSize = 2147483647;


                basicHttpBinding.MaxBufferPoolSize = 2147483647;


                basicHttpBinding.MaxBufferSize = 2147483647;


                basicHttpBinding.ReaderQuotas.MaxDepth = 2147483647;


                basicHttpBinding.ReaderQuotas.MaxBytesPerRead = 2147483647;


                basicHttpBinding.ReaderQuotas.MaxStringContentLength = 2147483647;


                basicHttpBinding.ReaderQuotas.MaxArrayLength = 2147483647;


                basicHttpBinding.ReaderQuotas.MaxNameTableCharCount = 2147483647;


                basicHttpBinding.TransferMode = TransferMode.Buffered;


                basicHttpBinding.BypassProxyOnLocal = false;


                basicHttpBinding.AllowCookies = false;


                basicHttpBinding.UseDefaultWebProxy = true;


                basicHttpBinding.MessageEncoding = WSMessageEncoding.Mtom;


                basicHttpBinding.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential;


                basicHttpBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;




                var client = new DMSClient(basicHttpBinding, endPointAddress);


                X509Certificate2 myCertificate = GetCertificate("DMSTest.MITSDev");




                client.ClientCredentials.ClientCertificate.Certificate = myCertificate;


                DocumentDelete obj = new DocumentDelete();


                obj.DMSDocumentId = documentId;


                obj.RequestedBy = "MITS.APP";


                var output = client.DeleteDocumentAsync(obj);


                result = output.Result.Success;


            }


            catch (Exception ex)


            {


                result = false;




            }


            finally


            {




            }


            return result;


        }








        public static X509Certificate2 GetCertificate(string CertName)


        {


            X509Store userCaStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);


            try


            {


                userCaStore.Open(OpenFlags.ReadOnly);


                X509Certificate2Collection certificatesInStore = userCaStore.Certificates;


                X509Certificate2Collection findResult = certificatesInStore.Find(X509FindType.FindBySubjectName, CertName, true);


                X509Certificate2 clientCertificate = null;




                if (findResult.Count == 1)


                {


                    clientCertificate = findResult[0];


                }


                else


                {


                    throw new Exception("Unable to locate the correct client certificate.");


                }


                return clientCertificate;


            }


            catch (Exception ex)


            {


                throw ex;


            }




        }


        public byte[] ReadToEnd(Stream stream)


        {


            long originalPosition = 0;




            if (stream.CanSeek)


            {


                originalPosition = stream.Position;


                stream.Position = 0;


            }




            try


            {


                byte[] readBuffer = new byte[4096];




                int totalBytesRead = 0;


                int bytesRead;




                while ((bytesRead = stream.Read(readBuffer, totalBytesRead, readBuffer.Length - totalBytesRead)) > 0)


                {


                    totalBytesRead += bytesRead;




                    if (totalBytesRead == readBuffer.Length)


                    {


                        int nextByte = stream.ReadByte();


                        if (nextByte != -1)


                        {


                            byte[] temp = new byte[readBuffer.Length * 2];


                            Buffer.BlockCopy(readBuffer, 0, temp, 0, readBuffer.Length);


                            Buffer.SetByte(temp, totalBytesRead, (byte)nextByte);


                            readBuffer = temp;


                            totalBytesRead++;


                        }


                    }


                }




                byte[] buffer = readBuffer;


                if (readBuffer.Length != totalBytesRead)


                {


                    buffer = new byte[totalBytesRead];


                    Buffer.BlockCopy(readBuffer, 0, buffer, 0, totalBytesRead);


                }


                return buffer;


            }


            finally


            {


                if (stream.CanSeek)


                {


                    stream.Position = originalPosition;


                }


            }


        }


    }


}

=========================================================================================================


{

    public partial class CQIContext : DbContext

    {

        public CQIContext()

        {

        }


        public CQIContext(DbContextOptions<CQIContext> options)

            : base(options)

        {

        }


        public virtual DbSet<CqiDocument> CqiDocuments { get; set; }


        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)

        {

            if (!optionsBuilder.IsConfigured)

            {

#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see http://go.microsoft.com/fwlink/?LinkId=723263.

                optionsBuilder.UseSqlServer("Database=CQI;Data Source=HFS1VD-SQXX002,1961;Integrated Security=SSPI;Connect Timeout=10000;User Id = eas\\\\\\\\e-vamshi.jakkula;Password=*****;");

            }

        }


        protected override void OnModelCreating(ModelBuilder modelBuilder)

        {

            modelBuilder.HasAnnotation("Relational:Collation", "SQL_Latin1_General_CP1_CI_AS");


            modelBuilder.Entity<CqiActionPlan>(entity =>

            {

                entity.HasKey(e => e.IdActionPlan);


                entity.ToTable("cqiActionPlans");


                entity.Property(e => e.IdActionPlan).HasColumnName("idActionPlan");


                entity.Property(e => e.DteLastMod)

                    .HasColumnType("datetime")

                    .HasColumnName("dteLastMod");


                entity.Property(e => e.DteTarget)

                    .HasColumnType("datetime")

                    .HasColumnName("dteTarget");


                entity.Property(e => e.IdIssue).HasColumnName("idIssue");


                entity.Property(e => e.IntActionNumber).HasColumnName("intActionNumber");


                entity.Property(e => e.TxtLastModBy)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtLastModBy");


                entity.Property(e => e.TxtPersonResponsible)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtPersonResponsible");


                entity.Property(e => e.TxtStepsTaken)

                    .HasMaxLength(3000)

                    .IsUnicode(false)

                    .HasColumnName("txtStepsTaken");


                entity.Property(e => e.TxtUpdates)

                    .HasMaxLength(3000)

                    .IsUnicode(false)

                    .HasColumnName("txtUpdates");

            });


            modelBuilder.Entity<CqiBranch>(entity =>

            {

                entity.HasKey(e => e.IdBranch)

                    .HasName("PK_cqiBranch");


                entity.ToTable("cqiBranchs");


                entity.Property(e => e.IdBranch).HasColumnName("idBranch");


                entity.Property(e => e.IdDivision).HasColumnName("idDivision");


                entity.Property(e => e.Lastmodon)

                    .HasColumnType("datetime")

                    .HasColumnName("lastmodon")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.TxtBranch)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtBranch");


                entity.Property(e => e.Txtlastmodby)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtlastmodby");

            });


            modelBuilder.Entity<CqiBuildComment>(entity =>

            {

                entity.HasKey(e => e.IdBuild);


                entity.ToTable("cqiBuildComments");


                entity.Property(e => e.IdBuild).HasColumnName("idBuild");


                entity.Property(e => e.BuildComment)

                    .HasMaxLength(1000)

                    .IsUnicode(false);


                entity.Property(e => e.BuildNumber)

                    .HasMaxLength(10)

                    .IsUnicode(false);


                entity.Property(e => e.BuildPage)

                    .HasMaxLength(50)

                    .IsUnicode(false);


                entity.Property(e => e.BuildPriority)

                    .HasMaxLength(50)

                    .IsUnicode(false);


                entity.Property(e => e.BuildResponse)

                    .HasMaxLength(1000)

                    .IsUnicode(false);


                entity.Property(e => e.BuildUser)

                    .HasMaxLength(50)

                    .IsUnicode(false);


                entity.Property(e => e.DteComment)

                    .HasColumnType("datetime")

                    .HasColumnName("dteComment");


                entity.Property(e => e.Lastmodby)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("lastmodby");


                entity.Property(e => e.Lastmodon)

                    .HasColumnType("datetime")

                    .HasColumnName("lastmodon")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.Resolved)

                    .HasMaxLength(1)

                    .IsUnicode(false)

                    .HasDefaultValueSql("('N')")

                    .IsFixedLength(true);

            });


            modelBuilder.Entity<CqiBuildPage>(entity =>

            {

                entity.HasKey(e => e.IdPage);


                entity.ToTable("cqiBuildPages");


                entity.Property(e => e.IdPage).HasColumnName("idPage");


                entity.Property(e => e.Cqipage)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("CQIPage");

            });


            modelBuilder.Entity<CqiCategory>(entity =>

            {

                entity.HasKey(e => e.IdCategory);


                entity.ToTable("cqiCategories");


                entity.Property(e => e.IdCategory).HasColumnName("idCategory");


                entity.Property(e => e.DteLastMod)

                    .HasColumnType("datetime")

                    .HasColumnName("dteLastMod")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.TxtCategory)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtCategory");


                entity.Property(e => e.Txtlastmodby)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtlastmodby");

            });


            modelBuilder.Entity<CqiCounty>(entity =>

            {

                entity.HasKey(e => e.IdCounty);


                entity.ToTable("cqiCounties");


                entity.Property(e => e.IdCounty).HasColumnName("idCounty");


                entity.Property(e => e.Idregion).HasColumnName("IDREGION");


                entity.Property(e => e.Lastmodby)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("LASTMODBY");


                entity.Property(e => e.Lastmodon)

                    .HasColumnType("datetime")

                    .HasColumnName("LASTMODON")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.TxtCounty)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtCounty");

            });


            modelBuilder.Entity<CqiDepartment>(entity =>

            {

                entity.HasKey(e => e.IdDepartment);


                entity.ToTable("cqiDepartments");


                entity.Property(e => e.IdDepartment).HasColumnName("idDepartment");


                entity.Property(e => e.Lastmodby)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("lastmodby");


                entity.Property(e => e.Lastmodon)

                    .HasColumnType("datetime")

                    .HasColumnName("lastmodon")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.TxtDepartment)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtDepartment");

            });


            modelBuilder.Entity<CqiDivision>(entity =>

            {

                entity.HasKey(e => e.IdDivision);


                entity.ToTable("cqiDivisions");


                entity.Property(e => e.IdDivision).HasColumnName("idDivision");


                entity.Property(e => e.Dtelastmod)

                    .HasColumnType("datetime")

                    .HasColumnName("dtelastmod")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.TxtDivision)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtDivision");


                entity.Property(e => e.Txtlastmodby)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtlastmodby");

            });


            modelBuilder.Entity<CqiDocument>(entity =>

            {

                entity.HasKey(e=>e.DocumentId);


                entity.ToTable("cqiDocuments");


                entity.Property(e => e.AppType)

                    .HasMaxLength(50)

                    .IsUnicode(false);


                entity.Property(e => e.CreatedBy)

                    .HasMaxLength(200)

                    .IsUnicode(false)

                    .HasDefaultValueSql("('ADMIN')");


                entity.Property(e => e.CreatedDate)

                    .HasColumnType("datetime")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.DmsGuid)

                    .IsRequired()

                    .HasMaxLength(100)

                    .IsUnicode(false);


                entity.Property(e => e.DocDesc)

                    .HasMaxLength(300)

                    .IsUnicode(false);


                entity.Property(e => e.DocType)

                    .HasMaxLength(50)

                    .IsUnicode(false);


                entity.Property(e => e.DocumentId).ValueGeneratedOnAdd();


                entity.Property(e => e.ExpirationDate).HasColumnType("datetime");


                entity.Property(e => e.FileExtension)

                    .HasMaxLength(20)

                    .IsUnicode(false);


                entity.Property(e => e.ModifiedBy)

                    .HasMaxLength(200)

                    .IsUnicode(false)

                    .HasDefaultValueSql("('ADMIN')");


                entity.Property(e => e.ModifiedDate)

                    .HasColumnType("datetime")

                    .HasDefaultValueSql("(getdate())");

            });


            modelBuilder.Entity<CqiError>(entity =>

            {

                entity.HasKey(e => e.ErrorId);


                entity.ToTable("cqiError");


                entity.Property(e => e.ErrorId).HasColumnName("ErrorID");


                entity.Property(e => e.ErrorDate)

                    .HasColumnType("datetime")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.ErrorMessage)

                    .HasMaxLength(4000)

                    .IsUnicode(false);


                entity.Property(e => e.ErrorOccurred)

                    .HasMaxLength(50)

                    .IsUnicode(false);


                entity.Property(e => e.ErrorUser)

                    .HasMaxLength(50)

                    .IsUnicode(false);

            });


            modelBuilder.Entity<CqiFaq>(entity =>

            {

                entity.HasKey(e => e.IdFaq);


                entity.ToTable("cqiFAQ");


                entity.HasIndex(e => e.DteAdded, "IX_cqiFAQDateAdded");


                entity.Property(e => e.IdFaq).HasColumnName("idFAQ");


                entity.Property(e => e.Active)

                    .HasMaxLength(1)

                    .IsUnicode(false)

                    .IsFixedLength(true);


                entity.Property(e => e.DteAdded)

                    .HasColumnType("datetime")

                    .HasColumnName("dteAdded")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.DteLastMod)

                    .HasColumnType("datetime")

                    .HasColumnName("dteLastMod")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.Question).HasMaxLength(100);


                entity.Property(e => e.TxtAddedBy)

                    .HasMaxLength(50)

                    .HasColumnName("txtAddedBy");


                entity.Property(e => e.Txtlastmodby)

                    .HasMaxLength(50)

                    .HasColumnName("txtlastmodby");

            });


            modelBuilder.Entity<CqiIssue>(entity =>

            {

                entity.HasKey(e => e.IdIssue);


                entity.ToTable("cqiIssues");


                entity.Property(e => e.IdIssue).HasColumnName("idIssue");


                entity.Property(e => e.C1Completed)

                    .HasMaxLength(1)

                    .IsUnicode(false)

                    .HasColumnName("c1Completed")

                    .HasDefaultValueSql("('N')")

                    .IsFixedLength(true);


                entity.Property(e => e.C1Confidential)

                    .HasMaxLength(1)

                    .IsUnicode(false)

                    .HasColumnName("c1Confidential")

                    .HasDefaultValueSql("('N')")

                    .IsFixedLength(true);


                entity.Property(e => e.C1Resolved)

                    .HasMaxLength(1)

                    .IsUnicode(false)

                    .HasColumnName("c1Resolved")

                    .HasDefaultValueSql("('N')")

                    .IsFixedLength(true);


                entity.Property(e => e.DteIssueAdded)

                    .HasColumnType("datetime")

                    .HasColumnName("dteIssueAdded")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.DteIssueLastMod)

                    .HasColumnType("datetime")

                    .HasColumnName("dteIssueLastMod")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.IdMinutes).HasColumnName("idMinutes");


                entity.Property(e => e.TxtAssignedTo)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtAssignedTo");


                entity.Property(e => e.TxtCategory)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtCategory");


                entity.Property(e => e.TxtCurrentLevel)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtCurrentLevel");


                entity.Property(e => e.TxtIssueAddedBy)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtIssueAddedBy");


                entity.Property(e => e.TxtIssueDesc)

                    .HasMaxLength(3000)

                    .IsUnicode(false)

                    .HasColumnName("txtIssueDesc");


                entity.Property(e => e.TxtIssueLastModBy)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtIssueLastModBy");


                entity.Property(e => e.TxtIssueSubject)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtIssueSubject");


                entity.Property(e => e.TxtOriginalLevel)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtOriginalLevel");


                entity.Property(e => e.TxtStatus)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtStatus");


                entity.Property(e => e.TxtTopic)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtTopic");

            });


            modelBuilder.Entity<CqiIssueAction>(entity =>

            {

                entity.HasKey(e => e.IdAction);


                entity.ToTable("cqiIssueActions");


                entity.Property(e => e.IdAction).HasColumnName("idAction");


                entity.Property(e => e.ActionBy)

                    .HasMaxLength(50)

                    .IsUnicode(false);


                entity.Property(e => e.ActionNotes)

                    .HasMaxLength(3000)

                    .IsUnicode(false);


                entity.Property(e => e.C1Completed)

                    .HasMaxLength(1)

                    .IsUnicode(false)

                    .HasColumnName("c1Completed")

                    .HasDefaultValueSql("('N')")

                    .IsFixedLength(true)

                    .HasComment("Is Issue Competed at this level");


                entity.Property(e => e.DteIssueAction)

                    .HasColumnType("datetime")

                    .HasColumnName("dteIssueAction");


                entity.Property(e => e.IdIssue).HasColumnName("idIssue");


                entity.Property(e => e.IdMinutes).HasColumnName("idMinutes");


                entity.Property(e => e.IssueAction)

                    .HasMaxLength(50)

                    .IsUnicode(false);


                entity.Property(e => e.IssueSubject)

                    .HasMaxLength(50)

                    .IsUnicode(false);


                entity.Property(e => e.NextLevel)

                    .HasMaxLength(50)

                    .IsUnicode(false);

            });


            modelBuilder.Entity<CqiLevel>(entity =>

            {

                entity.HasKey(e => e.IdLevel);


                entity.ToTable("cqiLevels");


                entity.Property(e => e.IdLevel).HasColumnName("idLevel");


                entity.Property(e => e.Dtelastmod)

                    .HasColumnType("datetime")

                    .HasColumnName("dtelastmod")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.TxtLevel)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtLevel");


                entity.Property(e => e.Txtlastmodby)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtlastmodby");

            });


            modelBuilder.Entity<CqiMinute>(entity =>

            {

                entity.HasKey(e => e.IdMinutes);


                entity.ToTable("cqiMinutes");


                entity.Property(e => e.IdMinutes).HasColumnName("idMinutes");


                entity.Property(e => e.C1MinutesApproved)

                    .HasMaxLength(1)

                    .IsUnicode(false)

                    .HasColumnName("c1MinutesApproved")

                    .HasDefaultValueSql("('N')")

                    .IsFixedLength(true);


                entity.Property(e => e.C1MinutesComplete)

                    .HasMaxLength(1)

                    .IsUnicode(false)

                    .HasColumnName("c1MinutesComplete")

                    .IsFixedLength(true);


                entity.Property(e => e.C1ReviewPrevMinutes)

                    .HasMaxLength(1)

                    .IsUnicode(false)

                    .HasColumnName("c1ReviewPrevMinutes")

                    .HasDefaultValueSql("('N')")

                    .IsFixedLength(true);


                entity.Property(e => e.DteMeeting)

                    .HasColumnType("datetime")

                    .HasColumnName("dteMeeting");


                entity.Property(e => e.DteMinutesAddedon)

                    .HasColumnType("datetime")

                    .HasColumnName("dteMinutesAddedon")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.DteMinutesModified)

                    .HasColumnType("datetime")

                    .HasColumnName("dteMinutesModified")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.IntNumofCaseReviews).HasColumnName("intNumofCaseReviews");


                entity.Property(e => e.IntNumofPpcasereviews).HasColumnName("intNumofPPCasereviews");


                entity.Property(e => e.TxtBranch)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtBranch");


                entity.Property(e => e.TxtCaseReview)

                    .HasMaxLength(3000)

                    .IsUnicode(false)

                    .HasColumnName("txtCaseReview");


                entity.Property(e => e.TxtCounty)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtCounty");


                entity.Property(e => e.TxtDepartment)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtDepartment");


                entity.Property(e => e.TxtDivision)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtDivision");


                entity.Property(e => e.TxtEmployeeRecognition)

                    .HasMaxLength(3000)

                    .IsUnicode(false)

                    .HasColumnName("txtEmployeeRecognition");


                entity.Property(e => e.TxtFacilitator)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtFacilitator");


                entity.Property(e => e.TxtLevel)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtLevel");


                entity.Property(e => e.TxtMeetingDesc)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtMeetingDesc");


                entity.Property(e => e.TxtMgtReports)

                    .HasMaxLength(3000)

                    .IsUnicode(false)

                    .HasColumnName("txtMgtReports");


                entity.Property(e => e.TxtOtherAttendees)

                    .HasMaxLength(3000)

                    .IsUnicode(false)

                    .HasColumnName("txtOtherAttendees");


                entity.Property(e => e.TxtPartners)

                    .HasMaxLength(3000)

                    .IsUnicode(false)

                    .HasColumnName("txtPartners");


                entity.Property(e => e.TxtRegion)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtRegion");


                entity.Property(e => e.TxtReviewPrevMinComments)

                    .HasMaxLength(3000)

                    .IsUnicode(false)

                    .HasColumnName("txtReviewPrevMinComments");


                entity.Property(e => e.TxtScribe)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtScribe");


                entity.Property(e => e.TxtScribeAddedBy)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtScribeAddedBy");


                entity.Property(e => e.TxtScribeLastModBy)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtScribeLastModBy")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.TxtServiceComplaints)

                    .HasMaxLength(3000)

                    .IsUnicode(false)

                    .HasColumnName("txtServiceComplaints");


                entity.Property(e => e.TxtTeam)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtTeam");


                entity.Property(e => e.TxtWorkplaceSafety)

                    .HasMaxLength(3000)

                    .IsUnicode(false)

                    .HasColumnName("txtWorkplaceSafety");

            });


            modelBuilder.Entity<CqiMinutesAttendance>(entity =>

            {

                entity.HasKey(e => e.IdMinutesAttendance);


                entity.ToTable("cqiMinutesAttendance");


                entity.HasIndex(e => e.TxtEmail, "IX_cqiMinutesAttendance")

                    .HasFillFactor((byte)90);


                entity.Property(e => e.IdMinutesAttendance).HasColumnName("idMinutesAttendance");


                entity.Property(e => e.IdMinutes).HasColumnName("idMinutes");


                entity.Property(e => e.Lastmodby)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("LASTMODBY");


                entity.Property(e => e.Lastmodon)

                    .HasColumnType("datetime")

                    .HasColumnName("LASTMODON")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.TxtAttendee)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtAttendee");


                entity.Property(e => e.TxtEmail)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtEmail");

            });


            modelBuilder.Entity<CqiNotification>(entity =>

            {

                entity.HasKey(e => e.IdNotification)

                    .HasName("idxNotifyType");


                entity.ToTable("cqiNotifications");


                entity.Property(e => e.IdNotification).HasColumnName("idNotification");


                entity.Property(e => e.Lastmodby)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("lastmodby");


                entity.Property(e => e.Lastmodon)

                    .HasColumnType("datetime")

                    .HasColumnName("lastmodon")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.Message)

                    .HasMaxLength(1000)

                    .IsUnicode(false);


                entity.Property(e => e.NotificationType)

                    .HasMaxLength(50)

                    .IsUnicode(false);

            });


            modelBuilder.Entity<CqiRegion>(entity =>

            {

                entity.HasKey(e => e.IdRegion);


                entity.ToTable("cqiRegions");


                entity.Property(e => e.IdRegion).HasColumnName("idRegion");


                entity.Property(e => e.Lastmodby)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("lastmodby");


                entity.Property(e => e.Lastmodon)

                    .HasColumnType("datetime")

                    .HasColumnName("lastmodon")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.TxtRegion)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtRegion");

            });


            modelBuilder.Entity<CqiReport>(entity =>

            {

                entity.HasNoKey();


                entity.ToTable("cqiReports");


                entity.Property(e => e.ReBegDt)

                    .HasColumnType("smalldatetime")

                    .HasColumnName("RE_Beg_Dt");


                entity.Property(e => e.ReDescription)

                    .HasMaxLength(200)

                    .IsUnicode(false)

                    .HasColumnName("RE_Description");


                entity.Property(e => e.ReEndDt)

                    .HasColumnType("smalldatetime")

                    .HasColumnName("RE_End_Dt");


                entity.Property(e => e.ReParam1)

                    .HasMaxLength(20)

                    .IsUnicode(false)

                    .HasColumnName("RE_Param1");


                entity.Property(e => e.ReParam2)

                    .HasMaxLength(20)

                    .IsUnicode(false)

                    .HasColumnName("RE_Param2");


                entity.Property(e => e.ReParam3)

                    .HasMaxLength(20)

                    .IsUnicode(false)

                    .HasColumnName("RE_Param3");


                entity.Property(e => e.ReParam4)

                    .HasMaxLength(20)

                    .IsUnicode(false)

                    .HasColumnName("RE_Param4");


                entity.Property(e => e.ReParam5)

                    .HasMaxLength(20)

                    .IsUnicode(false)

                    .HasColumnName("RE_Param5");


                entity.Property(e => e.ReParam6)

                    .HasMaxLength(20)

                    .IsUnicode(false)

                    .HasColumnName("RE_Param6");


                entity.Property(e => e.ReParam7)

                    .HasMaxLength(20)

                    .IsUnicode(false)

                    .HasColumnName("RE_Param7");


                entity.Property(e => e.ReParam8)

                    .HasMaxLength(20)

                    .IsUnicode(false)

                    .HasColumnName("RE_param8");


                entity.Property(e => e.ReReportNm)

                    .IsRequired()

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("RE_Report_Nm");


                entity.Property(e => e.ReSysid).HasColumnName("RE_Sysid");

            });


            modelBuilder.Entity<CqiStaff>(entity =>

            {

                entity.HasKey(e => e.IdStaff);


                entity.ToTable("cqiStaff");


                entity.HasIndex(e => e.TxtEmail, "IX_cqiStaff")

                    .HasFillFactor((byte)90);


                entity.HasIndex(e => e.Txtlogin, "IX_cqiStaffLogin")

                    .HasFillFactor((byte)90);


                entity.HasIndex(e => e.TxtRole, "IX_cqiStaffRole")

                    .HasFillFactor((byte)90);


                entity.Property(e => e.IdStaff).HasColumnName("idStaff");


                entity.Property(e => e.C1Cqispecialists)

                    .HasMaxLength(1)

                    .IsUnicode(false)

                    .HasColumnName("c1CQISpecialists")

                    .HasDefaultValueSql("('N')")

                    .IsFixedLength(true);


                entity.Property(e => e.C1Scribe)

                    .HasMaxLength(1)

                    .IsUnicode(false)

                    .HasColumnName("c1Scribe")

                    .HasDefaultValueSql("('N')")

                    .IsFixedLength(true);


                entity.Property(e => e.GetsNotification)

                    .HasMaxLength(5)

                    .IsUnicode(false)

                    .HasDefaultValueSql("('TRUE')")

                    .IsFixedLength(true);


                entity.Property(e => e.Lastmodby)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("lastmodby")

                    .HasDefaultValueSql("('USER()')");


                entity.Property(e => e.Lastmodon)

                    .HasColumnType("datetime")

                    .HasColumnName("lastmodon")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.TxtCounty)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtCounty")

                    .HasDefaultValueSql("('')");


                entity.Property(e => e.TxtEmail)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtEmail")

                    .HasDefaultValueSql("('')");


                entity.Property(e => e.TxtFirst)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtFirst")

                    .HasDefaultValueSql("('NO NAME')");


                entity.Property(e => e.TxtLast)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtLast")

                    .HasDefaultValueSql("('NO NAME')");


                entity.Property(e => e.TxtLevel)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtLevel")

                    .HasDefaultValueSql("('')");


                entity.Property(e => e.TxtRegion)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtRegion")

                    .HasDefaultValueSql("('')");


                entity.Property(e => e.TxtRole)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtRole")

                    .HasDefaultValueSql("('')");


                entity.Property(e => e.TxtTeam)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtTeam")

                    .HasDefaultValueSql("('')");


                entity.Property(e => e.Txtlogin)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtlogin")

                    .HasDefaultValueSql("('')");

            });


            modelBuilder.Entity<CqiStatus>(entity =>

            {

                entity.HasKey(e => e.IdStatus);


                entity.ToTable("cqiStatus");


                entity.Property(e => e.IdStatus).HasColumnName("idStatus");


                entity.Property(e => e.DteLastMod)

                    .HasColumnType("datetime")

                    .HasColumnName("dteLastMod")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.IntLevel).HasColumnName("intLevel");


                entity.Property(e => e.TxtAction)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtAction");


                entity.Property(e => e.TxtStatus)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtStatus");


                entity.Property(e => e.Txtlastmodby)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtlastmodby");

            });


            modelBuilder.Entity<CqiTAttachment>(entity =>

            {

                entity.HasNoKey();


                entity.ToTable("CQI_T_ATTACHMENTS");


                entity.Property(e => e.Attach)

                    .IsRequired()

                    .HasColumnName("ATTACH");


                entity.Property(e => e.AttachId)

                    .ValueGeneratedOnAdd()

                    .HasColumnName("ATTACH_ID");


                entity.Property(e => e.AttachName)

                    .IsRequired()

                    .HasMaxLength(150)

                    .IsUnicode(false)

                    .HasColumnName("ATTACH_NAME");


                entity.Property(e => e.AttachSize).HasColumnName("ATTACH_SIZE");


                entity.Property(e => e.AttachType)

                    .IsRequired()

                    .HasMaxLength(100)

                    .IsUnicode(false)

                    .HasColumnName("ATTACH_TYPE");


                entity.Property(e => e.CreateBy)

                    .IsRequired()

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("CREATE_BY");


                entity.Property(e => e.CreateDate)

                    .HasColumnType("datetime")

                    .HasColumnName("CREATE_DATE");


                entity.Property(e => e.TypeAttach)

                    .IsRequired()

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("TYPE_ATTACH");


                entity.Property(e => e.TypeId).HasColumnName("TYPE_ID");


                entity.Property(e => e.UpdateBy)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("UPDATE_BY");


                entity.Property(e => e.UpdateDate)

                    .HasColumnType("datetime")

                    .HasColumnName("UPDATE_DATE");

            });


            modelBuilder.Entity<CqiTeam>(entity =>

            {

                entity.HasKey(e => e.IdTeam);


                entity.ToTable("cqiTeams");


                entity.Property(e => e.IdTeam).HasColumnName("idTeam");


                entity.Property(e => e.Active)

                    .HasMaxLength(1)

                    .IsUnicode(false);


                entity.Property(e => e.CountyorBranchId)

                    .HasColumnName("CountyorBranchID")

                    .HasDefaultValueSql("((0))");


                entity.Property(e => e.DteLastMod)

                    .HasColumnType("datetime")

                    .HasColumnName("dteLastMod")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.Lastmodby)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("lastmodby");


                entity.Property(e => e.RegionorDivisonId)

                    .HasColumnName("RegionorDivisonID")

                    .HasDefaultValueSql("((0))");


                entity.Property(e => e.TeamType)

                    .HasMaxLength(50)

                    .IsUnicode(false);


                entity.Property(e => e.TxtTeam)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtTeam");

            });


            modelBuilder.Entity<CqiTopic>(entity =>

            {

                entity.HasKey(e => e.IdTopic);


                entity.ToTable("cqiTopics");


                entity.Property(e => e.IdTopic).HasColumnName("idTopic");


                entity.Property(e => e.Category)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("CATEGORY");


                entity.Property(e => e.Confidential)

                    .HasMaxLength(1)

                    .IsUnicode(false)

                    .HasColumnName("CONFIDENTIAL")

                    .HasDefaultValueSql("('N')")

                    .IsFixedLength(true);


                entity.Property(e => e.DteLastMod)

                    .HasColumnType("datetime")

                    .HasColumnName("dteLastMod")

                    .HasDefaultValueSql("(getdate())");


                entity.Property(e => e.TxtTopic)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtTopic");


                entity.Property(e => e.Txtlastmodby)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtlastmodby");

            });


            modelBuilder.Entity<Cqidocumenttype>(entity =>

            {

                entity.ToTable("cqidocumenttype");


                entity.Property(e => e.DocumentType)

                    .HasMaxLength(100)

                    .IsUnicode(false);

            });


            modelBuilder.Entity<MinutesIssueCount>(entity =>

            {

                entity.HasNoKey();


                entity.ToView("MinutesIssueCount");


                entity.Property(e => e.DteMeeting)

                    .HasColumnType("datetime")

                    .HasColumnName("dteMeeting");


                entity.Property(e => e.IdMinutes).HasColumnName("idMinutes");


                entity.Property(e => e.TxtLevel)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtLevel");


                entity.Property(e => e.TxtMeetingDesc)

                    .HasMaxLength(50)

                    .IsUnicode(false)

                    .HasColumnName("txtMeetingDesc");

            });


            OnModelCreatingPartial(modelBuilder);

        }


        partial void OnModelCreatingPartial(ModelBuilder modelBuilder);

    }

}


=========================================================================================

{

    public class GenericRepository<T> : IGenericRepository<T> where T : class 

    {

        protected CQIContext context = null;

        private DbSet<T> entity = null;

       

        public GenericRepository(CQIContext _context)

        {

            this.context = _context;

            entity = _context.Set<T>();

        }


        public async Task Create(T obj)

        {

             entity.Add(obj); ;

        }

        public async Task AddRange(IEnumerable<T> entities)

        {

            context.Set<T>().AddRange(entities);

        }


        public void Delete(int id)

        {

            T existing = entity.Find(id);

            entity.Remove(existing);

        }

        public async Task RemoveRange(IEnumerable<T> entities)

        {

             context.Set<T>().RemoveRange(entities);

        }


        public async Task<IEnumerable<T>> GetAll()

        {

             return await entity.AsNoTracking().ToListAsync();

        }


        public async Task<T> GetById(int Id)

        {

            // return await entity.FindAsync(Id);

            var result = await context.Set<T>().FindAsync(Id);

            context.Entry(result).State = EntityState.Detached;

            return result;

        }


        public async Task Update(T obj)

        {

            if (this.GetState(obj) == EntityState.Detached)

            {

                this.entity.Attach(obj);

               // await context.SaveChangesAsync();

            }

            this.SetModified(obj);

        }


        public virtual EntityState GetState(T obj)

        {

            return this.GetEntry(obj).State;

        }

        private EntityEntry GetEntry(T obj)

        {

            return this.context.Entry(obj);

        }

        public virtual void SetModified(T obj)

        {

            this.GetEntry(obj).State = EntityState.Modified;

        }


    }

}


===================================================================

{

    public class UnitOfWork : IUnitOfWork

    {

        private readonly CQIContext _context;

        private readonly ILogger logger;

        private readonly IMapper mapper;

        public UnitOfWork(CQIContext context,ILogger logger , IMapper mapper)

        {

            _context = context;

            this.logger = logger;

            this.mapper = mapper;

            CountyRepo = new CountyRepository(logger,mapper,_context);

            RegionRepo = new RegionRepository(_context);

            MinutesRepo = new MinutesRepository(_context);

            CategoryRepo = new CategoryRepository(_context);


        }

        public ICountyRepository CountyRepo { get; private set; }

        public IRegionRepository RegionRepo { get; private set; }

        public IMinutesRepository MinutesRepo { get; private set;  }

        public IIssueRepository IssuesRepo { get; private set; }

        public ICategoryRepository CategoryRepo { get; private set; }

        public int Complete()

        {

            return _context.SaveChanges();

        }

        public void Dispose()

        {

            _context.Dispose();

        }

    }

}


=======================================================================================

{

    public class GenericUnitOfWork<T> : IGenericUnitOfWork<T> where T : class

    {

        private readonly CQIContext context;

        public GenericUnitOfWork(CQIContext context) 

        {

            this.context = context;

            GenericRepo = new GenericRepository<T>(context);

        }

        public IGenericRepository<T> GenericRepo { get; private set; }

        public int Complete()

        {

            return context.SaveChanges();

        }

        public void Dispose()

        {

            context.Dispose();

        }

    }

}

===================================================================================

{

    public class GenericService<TModel,TEntity> : IGenericService<TModel,TEntity> where TModel : class 

                                                                                  where TEntity : class

    {

        private readonly IGenericUnitOfWork<TModel> uow;

        private readonly IMapper mapper;

        private readonly ILogger logger;

        public GenericService(IGenericUnitOfWork<TModel> uow

                             , IMapper mapper

                             , ILogger logger) 

        {

            this.uow = uow;

            this.mapper = mapper;

            this.logger = logger;

        }


        public async Task<IEnumerable<TEntity>> GetAllAsync()

        {

            try

            {

                var cqiObj = await uow.GenericRepo.GetAll();

                var obj = mapper.Map<IEnumerable<TEntity>>(cqiObj);

                return obj;

            }

            catch (Exception ex)

            {

                logger.LogError($"Failed while retrieving Entities", ex);

                throw;

            }

        }


        public async Task<TEntity> GetByIdAsync(int Id)

        {

            try

            {

                var cqiObj = await uow.GenericRepo.GetById(Id);

                var obj = mapper.Map<TEntity>(cqiObj);

                return obj;

            }

            catch (Exception ex)

            {

                logger.LogError($"Failed while retrieving Entity By Id : {Id}", ex);

                throw;

            }

        }

        public async Task PutAsync(TEntity entity)

        {

            try

            {

                var cqiObj = mapper.Map<TModel>(entity);

                await uow.GenericRepo.Update(cqiObj);

                uow.Complete();

            }

            catch (Exception ex)

            {

                logger.LogError($"Failed while saving TEntity by ID", ex);

                throw;

            }

        }

        public async Task<TEntity> PostAsync(TEntity entity)

        {

            try

            {

                var cqiObj = mapper.Map<TModel>(entity);

                await uow.GenericRepo.Create(cqiObj);

                uow.Complete();

             

                return entity;

            }

            catch (Exception ex)

            {

                logger.LogError($"Failed while creating a new Obj", ex);

                throw;

            }

        }


        public async Task DeleteAsync(int Id)

        {

            try

            {

                uow.GenericRepo.Delete(Id);

            }

            catch (Exception ex)

            {

                logger.LogError($"Failed while deleting Entity By Id : {Id}", ex);

                throw;

            }

        }

    }

}


======================================================================================================

{

    public class MapperProfile : Profile

    {

        public MapperProfile()

        {


            CreateMap<CqiCounty, County>()

                .ForMember(d => d.CountyID, s => s.MapFrom(s => s.IdCounty))

                .ForMember(d => d.CountyName, s => s.MapFrom(s => s.TxtCounty))

                .ForMember(d => d.RegionID, s => s.MapFrom(s => s.Idregion))

                .ForMember(d => d.UpdatedBy, s => s.MapFrom(s => s.Lastmodby))

                .ForMember(d => d.UpdatedDate, s => s.MapFrom(s => s.Lastmodon))

                .ReverseMap()

                ;


            CreateMap<CqiRegion, Region>()

                .ForMember(d => d.ID, s => s.MapFrom(s => s.IdRegion))

                .ForMember(d => d.Name, s => s.MapFrom(s => s.TxtRegion))

                .ForMember(d => d.UpdatedDate, s => s.MapFrom(s => s.Lastmodon))

                .ForMember(d => d.UpdatedBy, s=> s.MapFrom(s => s.Lastmodby))

                .ReverseMap()

                ;


            CreateMap<CqiMinute, Minutes>()

                .ForMember(d => d.ID, s => s.MapFrom(s => s.IdMinutes))

                .ForMember(d => d.MeetingDate, s => s.MapFrom(s => s.DteMeeting))

                .ForMember(d => d.MeetingDescription, s => s.MapFrom(s => s.TxtMeetingDesc))

                .ForMember(d => d.LevelCode, s => s.MapFrom(s => s.LevelCode))

                .ForMember(d => d.Level, s => s.MapFrom(s => s.TxtLevel))

                .ForMember(d => d.Region, s => s.MapFrom(s => s.TxtRegion))

                .ForMember(d => d.County, s => s.MapFrom(s => s.TxtCounty))

                .ForMember(d => d.Team, s => s.MapFrom(s => s.TxtTeam))

                .ForMember(d => d.Division, s => s.MapFrom(s => s.TxtDivision))

                .ForMember(d => d.Department, s => s.MapFrom(s => s.TxtDepartment))

                .ForMember(d => d.Branch, s => s.MapFrom(s => s.TxtBranch))

                .ForMember(d => d.Facilitator, s => s.MapFrom(s => s.TxtFacilitator))

                .ForMember(d => d.Scribe, s => s.MapFrom(s => s.TxtScribe))

                .ForMember(d => d.C1ReviewPrevMinutes, s => s.MapFrom(s => s.C1ReviewPrevMinutes))

                .ForMember(d => d.OtherAttendees, s => s.MapFrom(s => s.TxtOtherAttendees))

                .ForMember(d => d.ReviewPrevMinComments, s => s.MapFrom(s => s.TxtReviewPrevMinComments))

                .ForMember(d => d.Partners, s => s.MapFrom(s => s.TxtPartners))

                .ForMember(d => d.ServiceComplaints, s => s.MapFrom(s => s.TxtServiceComplaints))

                .ForMember(d => d.MgtReports, s => s.MapFrom(s => s.TxtMgtReports))

                .ForMember(d => d.WorkplaceSafety, s => s.MapFrom(s => s.TxtWorkplaceSafety))

                .ForMember(d => d.CaseReview, s => s.MapFrom(s => s.TxtCaseReview))

                .ForMember(d => d.IntNumofCaseReviews, s => s.MapFrom(s => s.IntNumofCaseReviews))

                .ForMember(d => d.IntNumofPpcasereviews, s => s.MapFrom(s => s.IntNumofPpcasereviews))

                .ForMember(d => d.EmployeeRecognition, s => s.MapFrom(s => s.TxtEmployeeRecognition))

                .ForMember(d => d.C1MinutesApproved, s => s.MapFrom(s => s.C1MinutesApproved))

                .ForMember(d => d.DateMinutesAddedon, s => s.MapFrom(s => s.DteMinutesAddedon))

                .ForMember(d => d.DateMinutesModified, s => s.MapFrom(s => s.DteMinutesModified))

                .ForMember(d => d.ScribeAddedBy, s => s.MapFrom(s => s.TxtScribeAddedBy))

                .ForMember(d => d.ScribeLastModBy, s => s.MapFrom(s => s.TxtScribeLastModBy))

                .ReverseMap();


            CreateMap<CqiIssue, Issues>()

                .ForMember(d => d.Id, s => s.MapFrom(s => s.IdIssue))

                .ForMember(d => d.MinutesId, s => s.MapFrom(s => s.IdMinutes))

                .ForMember(d => d.IssueSubject, s => s.MapFrom(s => s.TxtIssueSubject))

                .ForMember(d => d.IssueDescription, s => s.MapFrom(s => s.TxtIssueDesc))

                .ForMember(d => d.LevelCode, s => s.MapFrom(s => s.LevelCode))

                .ForMember(d => d.CurrentLevel, s => s.MapFrom(s => s.TxtCurrentLevel))

                .ForMember(d => d.OrigLevelCode, s => s.MapFrom(s => s.OrigLevelCode))

                .ForMember(d => d.OriginalLevel, s => s.MapFrom(s => s.TxtOriginalLevel))

                .ForMember(d => d.C1Completed, s => s.MapFrom(s => s.C1Completed))

                .ForMember(d => d.C1Resolved, s => s.MapFrom(s => s.C1Resolved))

                .ForMember(d => d.Status, s => s.MapFrom(s => s.TxtStatus))

                .ForMember(d => d.Category, s => s.MapFrom(s => s.TxtCategory))

                .ForMember(d => d.Topic, s => s.MapFrom(s => s.TxtTopic))

                .ForMember(d => d.C1Confidential, s => s.MapFrom(s => s.C1Confidential))

                .ForMember(d => d.AssignedTo, s => s.MapFrom(s => s.TxtAssignedTo))

                .ForMember(d => d.DateIssueAdded, s => s.MapFrom(s => s.DteIssueAdded))

                .ForMember(d => d.DateIssueLastMod, s => s.MapFrom(s => s.DteIssueLastMod))

                .ForMember(d => d.IssueAddedBy, s => s.MapFrom(s => s.TxtIssueAddedBy))

                .ForMember(d => d.IssueLastModBy, s => s.MapFrom(s => s.TxtIssueLastModBy))

                .ReverseMap();


            CreateMap<CqiTopic, Topic>()

                .ForMember(d => d.Id, s => s.MapFrom(s => s.IdTopic))

                .ForMember(d => d.Category, s => s.MapFrom(s => s.Category))

                .ForMember(d => d.Confidential, s => s.MapFrom(s => s.Confidential))

                .ForMember(d => d.TopicDescription, s => s.MapFrom(s => s.TxtTopic))

                .ForMember(d => d.UpdatedBy, s => s.MapFrom(s => s.Txtlastmodby))

                .ForMember(d => d.UpdatedDate, s => s.MapFrom(s => s.DteLastMod))

                .ReverseMap();


            CreateMap<CqiStaff, Staff>()

                    .ForMember(d => d.Id, s => s.MapFrom(s => s.IdStaff))

                    .ForMember(d => d.Login, s => s.MapFrom(s => s.Txtlogin))

                    .ForMember(d => d.Email, s => s.MapFrom(s => s.TxtEmail))

                    .ForMember(d => d.LevelCode, s => s.MapFrom(s => s.LevelCode))

                    .ForMember(d => d.Level, s => s.MapFrom(s => s.TxtLevel))

                    .ForMember(d => d.Region, s => s.MapFrom(s => s.TxtRegion))

                    .ForMember(d => d.County, s => s.MapFrom(s => s.TxtCounty))

                    .ForMember(d => d.C1Scribe, s => s.MapFrom(s => s.C1Scribe))

                    .ForMember(d => d.Role, s => s.MapFrom(s => s.TxtRole))

                    .ForMember(d => d.C1Cqispecialists, s => s.MapFrom(s => s.C1Cqispecialists))

                    .ForMember(d => d.Team, s => s.MapFrom(s => s.TxtTeam))

                    .ForMember(d => d.FirstName, s => s.MapFrom(s => s.TxtFirst))

                    .ForMember(d => d.LastName, s => s.MapFrom(s => s.TxtLast))

                    .ForMember(d => d.IsNotification, s => s.MapFrom(s => s.GetsNotification))

                    .ForMember(d => d.UpdatedDate, s => s.MapFrom(s => s.Lastmodon))

                    .ForMember(d => d.UpdatedBy, s => s.MapFrom(s => s.Lastmodby))

                    .ReverseMap();


            CreateMap<CqiCategory, Category>()

                    .ForMember(d => d.Id, s => s.MapFrom(s => s.IdCategory))

                    .ForMember(d => d.CategoryDescription, s => s.MapFrom(s => s.TxtCategory))

                    .ForMember(d => d.UpdatedDate, s => s.MapFrom(s => s.DteLastMod))

                    .ForMember(d => d.UpdatedBy, s => s.MapFrom(s => s.Txtlastmodby))

                    .ReverseMap();


            CreateMap<CqiDivision, Division>()

                .ForMember(d => d.Id, s => s.MapFrom(s => s.IdDivision))

                .ForMember(d => d.Description, s => s.MapFrom(s => s.TxtDivision))

                .ForMember(d => d.UpdatedBy, s => s.MapFrom(s => s.Txtlastmodby))

                .ForMember(d => d.UpdatedDate, s => s.MapFrom(s => s.Dtelastmod))

                .ReverseMap();


            CreateMap<CqiDepartment, Department>()

                    .ForMember(d => d.Id, s => s.MapFrom(s => s.IdDepartment))

                    .ForMember(d => d.Description, s => s.MapFrom(s => s.TxtDepartment))

                    .ForMember(d => d.UpdatedBy, s => s.MapFrom(s => s.Lastmodby))

                    .ForMember(d => d.UpdatedDate, s => s.MapFrom(s => s.Lastmodon))

                    .ReverseMap();


        CreateMap<CqiFaq, FrequentlyAdvancedIssues>()

                    .ForMember(d => d.Id, s => s.MapFrom(s => s.IdFaq))

                    .ForMember(d => d.Question, s => s.MapFrom(s => s.Question))

                    .ForMember(d => d.Answer, s => s.MapFrom(s => s.Answer))

                    .ForMember(d => d.Active, s => s.MapFrom(s => s.Active))

                    .ForMember(d => d.UpdatedBy, s => s.MapFrom(s => s.Txtlastmodby))

                    .ForMember(d => d.UpdatedDate, s => s.MapFrom(s => s.DteLastMod))

                    .ForMember(d => d.AddedBy, s => s.MapFrom(s => s.TxtAddedBy))

                    .ForMember(d => d.AddedDate, s => s.MapFrom(s => s.DteAdded))

                    .ReverseMap();


            CreateMap<CqiNotification, Notification>()

                       .ForMember(d => d.Id, s => s.MapFrom(s => s.IdNotification))

                       .ForMember(d => d.NotificationType, s => s.MapFrom(s => s.NotificationType))

                       .ForMember(d => d.Message, s => s.MapFrom(s => s.Message))

                       .ForMember(d => d.UpdatedBy, s => s.MapFrom(s => s.Lastmodon))

                       .ForMember(d => d.UpdatedDate, s => s.MapFrom(s => s.Lastmodby))

                       .ReverseMap();


            CreateMap<CqiBranch, Branch>()

                       .ForMember(d => d.Id, s => s.MapFrom(s => s.IdBranch))

                       .ForMember(d => d.DivisionId, s => s.MapFrom(s => s.IdDivision))

                       .ForMember(d => d.Description, s => s.MapFrom(s => s.TxtBranch))

                       .ForMember(d => d.UpdatedBy, s => s.MapFrom(s => s.Txtlastmodby))

                       .ForMember(d => d.UpdatedDate, s => s.MapFrom(s => s.Lastmodon))

                       .ReverseMap();


            CreateMap<CqiIssueAction, IssueAction>()

                    .ForMember(d => d.Id, s => s.MapFrom(s => s.IdAction))

                    .ForMember(d => d.MinutesId, s => s.MapFrom(s => s.IdMinutes))

                    .ForMember(d => d.IssueId, s => s.MapFrom(s => s.IdIssue))

                    .ForMember(d => d.IssueSubject, s => s.MapFrom(s => s.IssueSubject))

                    .ForMember(d => d.Description, s => s.MapFrom(s => s.IssueAction))

                    .ForMember(d => d.CreatedDate, s => s.MapFrom(s => s.DteIssueAction))

                    .ForMember(d => d.ActionNotes, s => s.MapFrom(s => s.ActionNotes))

                    .ForMember(d => d.NextLevel, s => s.MapFrom(s => s.NextLevel))

                    .ForMember(d => d.ActionBy, s => s.MapFrom(s => s.ActionBy))

                    .ForMember(d => d.C1Completed, s => s.MapFrom(s => s.C1Completed))

                    .ReverseMap();


            CreateMap<CqiTeam, Team>()

                    .ForMember(d => d.Id, s => s.MapFrom(s => s.IdTeam))

                    .ForMember(d => d.TeamDescription, s => s.MapFrom(s => s.TxtTeam))

                    .ForMember(d => d.Type, s => s.MapFrom(s => s.TeamType))

                    .ForMember(d => d.CountyorBranchId, s => s.MapFrom(s => s.CountyorBranchId))

                    .ForMember(d => d.RegionorDivisonId, s => s.MapFrom(s => s.RegionorDivisonId))

                    .ForMember(d => d.UpdatedBy, s => s.MapFrom(s => s.Lastmodby))

                    .ForMember(d => d.UpdatedDate, s => s.MapFrom(s => s.DteLastMod))

                    .ForMember(d => d.Active, s => s.MapFrom(s => s.Active))

                    .ReverseMap();



            CreateMap<CqiLevel, Level>()

                    .ForMember(d => d.Id, s => s.MapFrom(s => s.IdLevel))

                    .ForMember(d => d.Description, s => s.MapFrom(s => s.TxtLevel))

                    .ForMember(d => d.UpdatedBy, s => s.MapFrom(s => s.Txtlastmodby))

                    .ForMember(d => d.UpdatedDate, s => s.MapFrom(s => s.Dtelastmod))

                    .ReverseMap();


            CreateMap<CqiStatus, Status>()

                    .ForMember(d => d.Id, s => s.MapFrom(s => s.IdStatus))

                    .ForMember(d => d.Level, s => s.MapFrom(s => s.IntLevel))

                    .ForMember(d => d.UpdatedBy, s => s.MapFrom(s => s.Txtlastmodby))

                    .ForMember(d => d.Action, s => s.MapFrom(s => s.TxtAction))

                    .ForMember(d => d.Description, s => s.MapFrom(s => s.TxtStatus))

                    .ForMember(d => d.UpdatedDate, s => s.MapFrom(s => s.DteLastMod))

                    .ReverseMap();


            CreateMap<CqiTopic, Topic>()

                    .ForMember(d => d.Id, s => s.MapFrom(s => s.IdTopic))

                    .ForMember(d => d.Category, s => s.MapFrom(s => s.Category))

                    .ForMember(d => d.TopicDescription, s => s.MapFrom(s => s.TxtTopic))

                    .ForMember(d => d.Confidential, s => s.MapFrom(s => s.Confidential))

                    .ForMember(d => d.UpdatedDate, s => s.MapFrom(s => s.DteLastMod))

                    .ForMember(d => d.UpdatedBy, s => s.MapFrom(s => s.Txtlastmodby))

                    .ReverseMap();


            CreateMap<CqiDocument, Document>()

                    .ForMember(d => d.DocumentId, s => s.MapFrom(s => s.DocumentId))

                    .ForMember(d => d.DmsGuid, s => s.MapFrom(s => s.DmsGuid))

                    .ForMember(d => d.ExpirationDate, s => s.MapFrom(s => s.ExpirationDate))

                    .ForMember(d => d.FileExtension, s => s.MapFrom(s => s.FileExtension))

                    .ForMember(d => d.InternalId, s => s.MapFrom(s => s.InternalId))

                    .ForMember(d => d.AppType, s => s.MapFrom(s => s.AppType))

                    .ForMember(d => d.DocType, s => s.MapFrom(s => s.DocType))

                    .ForMember(d => d.DocDesc, s => s.MapFrom(s => s.DocDesc))

                    .ForMember(d => d.CreatedBy, s => s.MapFrom(s => s.CreatedBy))

                    .ForMember(d => d.ModifiedDate, s => s.MapFrom(s => s.ModifiedDate))

                    .ForMember(d => d.ModifiedBy, s => s.MapFrom(s => s.ModifiedBy))

                    .ForMember(d => d.LoginId, s => s.MapFrom(s => s.LoginId))

                    .ReverseMap();


    }


    }

}


============================================================================================

{

    public class GenericTypeControllerFeatureProvider : IApplicationFeatureProvider<ControllerFeature>

    {

       

        public void PopulateFeature(IEnumerable<ApplicationPart> parts, ControllerFeature feature)

        {

            foreach (var model_type in EntityTypes.model_types)

            {

                var entity_type = model_type.Key;

                var entity_request_types = model_type.Value[0];

                Type[] typeArgs = { entity_type, model_type.Value[0]};

                var controller_type = typeof(GenericController<,>).MakeGenericType(typeArgs).GetTypeInfo();

                feature.Controllers.Add(controller_type);

            }

        }

    }

}


========================================================================================================

{

    public static class EntityTypes

    {

        public static Dictionary<TypeInfo, List<TypeInfo>> model_types => new()

        {

            { typeof(Category).GetTypeInfo(),new List<TypeInfo>() { typeof(CqiCategory).GetTypeInfo()} },

            { typeof(Division).GetTypeInfo(), new List<TypeInfo>() { typeof(CqiDivision).GetTypeInfo() } },

            { typeof(Department).GetTypeInfo(), new List<TypeInfo>() { typeof(CqiDepartment).GetTypeInfo() } },

            { typeof(IssueAction).GetTypeInfo(), new List<TypeInfo>() { typeof(CqiIssueAction).GetTypeInfo() } },

            { typeof(Notification).GetTypeInfo(), new List<TypeInfo>() { typeof(CqiNotification).GetTypeInfo() } },

            { typeof(Branch).GetTypeInfo(), new List<TypeInfo>() { typeof(CqiBranch).GetTypeInfo() } },

            { typeof(Team).GetTypeInfo(),new List<TypeInfo>() { typeof(CqiTeam).GetTypeInfo()} },

            { typeof(Issues).GetTypeInfo(),new List<TypeInfo>() { typeof(CqiIssue).GetTypeInfo()} },

            { typeof(Minutes).GetTypeInfo(),new List<TypeInfo>() { typeof(CqiMinute).GetTypeInfo()} },

            { typeof(Staff).GetTypeInfo(), new List<TypeInfo>() { typeof(CqiStaff).GetTypeInfo()} },

            { typeof(Level).GetTypeInfo(), new List<TypeInfo>() { typeof(CqiLevel).GetTypeInfo()} },

            { typeof(Region).GetTypeInfo(), new List<TypeInfo>() { typeof(CqiRegion).GetTypeInfo()} },

            { typeof(County).GetTypeInfo(), new List<TypeInfo>() { typeof(CqiCounty).GetTypeInfo()} },

            { typeof(Topic).GetTypeInfo(), new List<TypeInfo>() { typeof(CqiTopic).GetTypeInfo()} },

            { typeof(FrequentlyAdvancedIssues).GetTypeInfo(), new List<TypeInfo>() { typeof(CqiFaq).GetTypeInfo() } },

            { typeof(Status).GetTypeInfo(), new List<TypeInfo>() { typeof(CqiStatus).GetTypeInfo()} },

            { typeof(Document).GetTypeInfo(), new List<TypeInfo>() { typeof(CqiDocument).GetTypeInfo()} }

        };

    }

}




==================================================================================

{

    public static async Task<string> GetAll(string url)

    {

        // Call asynchronous network methods in a try/catch block to handle exceptions.

        try

        {

            HttpClient client = new HttpClient();

             //HttpResponseMessage response = await client.GetAsync("http://www.contoso.com/");

            HttpResponseMessage response = await client.GetAsync(url);

            response.EnsureSuccessStatusCode();

            string responseBody = await response.Content.ReadAsStringAsync();

            return responseBody;

            // Above three lines can be replaced with new helper method below

            // string responseBody = await client.GetStringAsync(uri);


            Console.WriteLine(responseBody);

        }

        catch (HttpRequestException e)

        {

            Console.WriteLine("\nException Caught!");

            Console.WriteLine("Message :{0} ", e.Message);

            throw;

        }

    }

}


/// <summary>

/// A generic wrapper class to REST API calls

/// </summary>

/// <typeparam name="T"></typeparam>

public static class HTTPClientWrapper<T> where T : class

{




    /// <summary>

    /// For getting all the resources from a web api

    /// </summary>

    /// <param name="url">API Url</param>

    /// <returns>A Task with result object of type T</returns>

    public static async Task<IEnumerable<T>> GetAll(string url)

    {

        IEnumerable<T> result = null;

        using (var httpClient = new HttpClient())

        {

            var response = httpClient.GetAsync(new Uri(url)).Result;

            response.EnsureSuccessStatusCode();

            result = await response.Content.ReadAsAsync<IEnumerable<T>>();

            //await response.Content.ReadAsAsync().ContinueWith((Task<string> x) =>

            //{

            //    if (x.IsFaulted)

            //        throw x.Exception;


            //    result = JsonConvert.DeserializeObject<T>(x.Result);

            //});

        }

        return result;

    }

    /// <summary>

    /// For getting the resources from a web api

    /// </summary>

    /// <param name="url">API Url</param>

    /// <returns>A Task with result object of type T</returns>

    public static async Task<T> Get(string url)

    {

        T result = null;

        using (var httpClient = new HttpClient())

        {

            var response = httpClient.GetAsync(new Uri(url)).Result;


            response.EnsureSuccessStatusCode();

            await response.Content.ReadAsStringAsync().ContinueWith((Task<string> x) =>

            {

                if (x.IsFaulted)

                    throw x.Exception;


                result = JsonConvert.DeserializeObject<T>(x.Result);

            });

        }


        return result;

    }


    /// <summary>

    /// For creating a new item over a web api using POST

    /// </summary>

    /// <param name="apiUrl">API Url</param>

    /// <param name="postObject">The object to be created</param>

    /// <returns>A Task with created item</returns>

    public static async Task<T> PostRequest(string apiUrl, T postObject)

    {

        T result = null;


        using (var client = new HttpClient())

        {

            var response = await client.PostAsync(apiUrl, postObject, new JsonMediaTypeFormatter()).ConfigureAwait(false);


            response.EnsureSuccessStatusCode();


            await response.Content.ReadAsStringAsync().ContinueWith((Task<string> x) =>

            {

                if (x.IsFaulted)

                    throw x.Exception;


                result = JsonConvert.DeserializeObject<T>(x.Result);


            });

        }


        return result;

    }


    /// <summary>

    /// For updating an existing item over a web api using PUT

    /// </summary>

    /// <param name="apiUrl">API Url</param>

    /// <param name="putObject">The object to be edited</param>

    public static async Task PutRequest(string apiUrl, T putObject)

    {

        using (var client = new HttpClient())

        {

            var response = await client.PutAsync(apiUrl, putObject, new JsonMediaTypeFormatter()).ConfigureAwait(false);


            response.EnsureSuccessStatusCode();

        }

    }


    /// <summary>

    /// For getting the resources from a web api

    /// </summary>

    /// <param name="url">API Url</param>

    /// <returns>A Task with result object of type T</returns>

    public static async Task<T> Delete(string url)

    {

        T result = null;

        using (var httpClient = new HttpClient())

        {

            var response = httpClient.DeleteAsync(new Uri(url)).Result;


            response.EnsureSuccessStatusCode();

            await response.Content.ReadAsStringAsync().ContinueWith((Task<string> x) =>

            {

                if (x.IsFaulted)

                    throw x.Exception;


                result = JsonConvert.DeserializeObject<T>(x.Result);

            });

        }


        return result;

    }


    public static async Task<Byte[]> GetReportByteArray(T item, string url)

    {

        var response = await PostReportItem<byte[]>(item, url);

        return response;

    }


    public static async Task<TResponse> PostReportItem<TResponse>(dynamic item, string Url)

    {

        try

        {

            StringBuilder newExceptionMessage = new StringBuilder();

            var json = JsonConvert.SerializeObject(item);

            var content = new StringContent(json, Encoding.UTF8, "application/json");


            var _httpClient = new HttpClient(GetClientHandler());

            HttpResponseMessage httpResponse = await _httpClient.PostAsync(Url, content);


            if (httpResponse.IsSuccessStatusCode)

            {

                var responseText = await httpResponse.Content.ReadAsStringAsync();

                var rtnObj = (dynamic)JsonConvert.DeserializeObject(responseText);


                if (rtnObj.StatusCode == ReturnStatusCode.Success)

                {

                    // Checking if the T is not a class and its a standard type.

                    if (typeof(TResponse) == typeof(String) || typeof(TResponse) == typeof(int) || typeof(TResponse) == typeof(byte[]))

                        return rtnObj.data;

                    else

                        return JsonConvert.DeserializeObject<T>(rtnObj.data.ToString());

                }

                else if (rtnObj.StatusCode == ReturnStatusCode.ValidationError)

                    //Throw Custom Validation in case of validationError

                    throw new Exception(string.Join(",", rtnObj.Message));


                else if (rtnObj.StatusCode == ReturnStatusCode.Failed)

                {

                    newExceptionMessage.Append(" LogId : ");

                    newExceptionMessage.Append(rtnObj.DBErrorLogId);

                    newExceptionMessage.Append(" FormattedExceptionMessage: ");

                    throw new BadHttpRequestException(string.Join(", API Error Message: ", newExceptionMessage));

                }

                return rtnObj;

            }

            throw new Exception(httpResponse.ReasonPhrase);

        }

        catch (Exception ex)

        {

            throw ex;

        }

    }


    public static HttpClientHandler GetClientHandler()

    {

        var _clientHandler = new HttpClientHandler();

        _clientHandler.ClientCertificateOptions = ClientCertificateOption.Automatic;

        // _clientHandler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; };

        _clientHandler.SslProtocols = System.Security.Authentication.SslProtocols.Tls12;

        X509Certificate2 clientCert = CertificateHelper.GetClientCertificate();

        _clientHandler.ClientCertificateOptions = ClientCertificateOption.Manual;

        _clientHandler.ClientCertificates.Add(clientCert);

        return _clientHandler;

    }


}