public ActionResult Enrollment(Guid? registrationId = null)
        {
            Enrollment model = new Enrollment();
            if (null != registrationId)
            {
                //GET identity and pass in as the model
                model = GetIdentity(registrationId.Value);
            }

            return View(model);
        }
        public ActionResult Enrollment(Enrollment model, Guid? registrationId = null, HttpPostedFileBase proof = null, HttpPostedFileBase photo = null)
        {
            //, HttpPostedFileBase identity_proof = null, HttpPostedFileBase photo = null)
            if (ModelState.IsValid)
            {
                if (registrationId != null)
                    model.RegistrationId = registrationId.Value;
                //TODO add logging with NLog
                if (model.Biodata != null)
                {
                    model.RegistrationId = MergeAccessIdentity(model);

                    if (model.RegistrationId != null)
                    {
                        RegisterM2Sys(model.Biodata, model.RegistrationId);
                        if (proof != null && proof.ContentLength > 0)
                        {
                            //UPLOAD proof
                            var ext = Path.GetExtension(proof.FileName);
                            var path = Path.Combine(Server.MapPath("~/proof/"), string.Format("{0}{1}", model.RegistrationId, ext));
                            proof.SaveAs(path);
                            model.Proof_File = string.Format("{0}{1}", model.RegistrationId, ext);
                        }

                        if (photo != null && proof.ContentLength > 0)
                        {
                            //UPLOAD photo
                            var ext = Path.GetExtension(photo.FileName);
                            var path = Path.Combine(Server.MapPath("~/photo/"), string.Format("{0}{1}", model.RegistrationId, ext));
                            photo.SaveAs(path);
                            model.Photo_File = string.Format("{0}{1}", model.RegistrationId, ext);

                        }

                        UpdatePhotoProof(model.RegistrationId, model.Photo_File, model.Proof_File);
                    }
                    else
                    {
                        ViewBag.CreateIdentityMessage = "Failed to create new access identity.  Please check entries and try again.";
                    }
                    model = new Enrollment();
                    return View(model);
                }
                else
                    ViewBag.ErrorMessage = "Please scan finger before enrolling.";
            }

            return View(model);
        }
        private Guid MergeAccessIdentity(Enrollment model)
        {
            //			var sqlConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
            var sqlConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
            SqlService sql = new SqlService(sqlConnectionString);
            //TODO add other fields
            //TODO registration ID
            sql.AddParameter("@pIdentityType", System.Data.SqlDbType.VarChar, model.IdentityType);
            sql.AddParameter("@pShiftOperation", System.Data.SqlDbType.VarChar, model.Shift);
            sql.AddParameter("@pBloodGroup", System.Data.SqlDbType.VarChar, model.BloodGroup);
            sql.AddParameter("@pName", System.Data.SqlDbType.VarChar, model.Name);
            sql.AddParameter("@pEmplNo", System.Data.SqlDbType.VarChar, model.EmployeeNo);
            sql.AddParameter("@pMobileNo", System.Data.SqlDbType.VarChar, model.MobileNo);
            sql.AddParameter("@pCompanyRef", System.Data.SqlDbType.VarChar, model.CompanyRefNo);
            sql.AddParameter("@pCompanyName", System.Data.SqlDbType.VarChar, model.CompanyName);
            sql.AddParameter("@pTransporterName", System.Data.SqlDbType.VarChar, model.TransporterName);
            sql.AddParameter("@pTransporterMobileNo", System.Data.SqlDbType.VarChar, model.TransportMobileNo);
            sql.AddParameter("@pContractorName", System.Data.SqlDbType.VarChar, model.ContractorName);
            sql.AddParameter("@pContractorMobileNo", System.Data.SqlDbType.VarChar, model.ContractorMobileNo);
            sql.AddParameter("@pResidentialPhone", System.Data.SqlDbType.VarChar, model.ResidentialNo);
            sql.AddParameter("@pPermanentAddress", System.Data.SqlDbType.VarChar, model.PermanentAddress);
            sql.AddParameter("@pResidentialAddress", System.Data.SqlDbType.VarChar, model.ResidentialAddress);
            sql.AddParameter("@pLicenseExpiryDate", System.Data.SqlDbType.DateTime2, model.LicenseExpiryDate);
            sql.AddParameter("@pTTName", System.Data.SqlDbType.VarChar, model.TTName);
            sql.AddParameter("@pOfficerNumber", System.Data.SqlDbType.VarChar, model.OfficerStaffMobileNumber);
            sql.AddParameter("@pPoliceVerified", System.Data.SqlDbType.Bit, model.PoliceVerification);
            sql.AddParameter("@pPoliceVerDate", System.Data.SqlDbType.Bit, model.PoliceVerificationDate);
            sql.AddParameter("@pESICNo", System.Data.SqlDbType.Bit, model.ESICNo);
            sql.AddParameter("@pPONo", System.Data.SqlDbType.Bit, model.PurchaseOrderNo);
            sql.AddParameter("@pPOStartDate", System.Data.SqlDbType.Bit, model.PODateStart);
            sql.AddParameter("@pPOEndDate", System.Data.SqlDbType.Bit, model.PODateEnd);
            sql.AddParameter("@pJobSkill", System.Data.SqlDbType.Bit, model.JobSkill);
            sql.AddParameter("@pPFNo", System.Data.SqlDbType.Bit, model.PFNo);
            sql.AddParameter("@pAadhaar", System.Data.SqlDbType.Bit, model.AadhaarNo);
            sql.AddParameter("@pBankName", System.Data.SqlDbType.Bit, model.BankName);
            sql.AddParameter("@pACNo", System.Data.SqlDbType.Bit, model.ACNo);
            sql.AddParameter("@pIFSCCode", System.Data.SqlDbType.Bit, model.IFSCCode);

            if (model.RegistrationId != null)
            {
                sql.AddParameter("@pRegistrationId", System.Data.SqlDbType.UniqueIdentifier, model.RegistrationId);

            }

            //sql.AddParameter("@pPhoto", System.Data.SqlDbType.VarChar, model.Photo);
            //sql.AddParameter("@pAddressProof", System.Data.SqlDbType.VarChar, model.Proof);

            using (SqlDataReader reader = sql.ExecuteSPReader("MMD_spCreateAccessIdentity"))
            {
                if (reader.HasRows)
                {
                    reader.Read();
                    return reader.GetGuid(0);
                }
                else
                    return Guid.Empty;
            }
        }
        private Enrollment GetIdentity(Guid registrationId)
        {
            var sqlConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
            Enrollment id = new Enrollment();
            SqlService sql = new SqlService(sqlConnectionString);
            sql.AddParameter("pRegistrationId", System.Data.SqlDbType.UniqueIdentifier, registrationId);
            using (SqlDataReader reader = sql.ExecuteSPReader("ICMS_spGetBioIdentity"))
            {
                if (reader.HasRows)
                {
                    reader.Read();
                    id.RegistrationId = registrationId;
                    id.BloodGroup = reader.GetString(reader.GetOrdinal("BloodGroup"));
                    id.Name = reader.GetString(reader.GetOrdinal("Name")); //reader.GetString(1);
                    id.MobileNo = reader.GetString(reader.GetOrdinal("MobileNo"));
                    id.IdentityType = reader.GetString(reader.GetOrdinal("IdentityType"));
                    id.Shift = reader.GetString(reader.GetOrdinal("ShiftOperation"));
                    id.CompanyName = reader.GetString(reader.GetOrdinal("CompanyName"));
                    id.CompanyRefNo = reader.GetString(reader.GetOrdinal("CompanyRefNo"));
                    id.TransporterName = reader.GetString(reader.GetOrdinal("TransporterName"));
                    id.TransportMobileNo = reader.GetString(reader.GetOrdinal("TransporterMobileNo"));
                    id.ContractorName = reader.GetString(reader.GetOrdinal("ContractorName"));
                    id.ContractorMobileNo = reader.GetString(reader.GetOrdinal("ContractorMobileNo"));
                    id.ResidentialNo = reader.GetString(reader.GetOrdinal("ResidentialNo"));
                    id.PermanentAddress = reader.GetString(reader.GetOrdinal("PermanentAddress"));
                    id.ResidentialAddress = reader.GetString(reader.GetOrdinal("ResidentialAddress"));
                    id.LicenseExpiryDate = reader.GetDateTime(reader.GetOrdinal("LicenseExpiryDate"));
                    id.TTName = reader.GetString(reader.GetOrdinal("TTName"));
                    id.OfficerStaffMobileNumber = reader.GetString(reader.GetOrdinal("OfficerStaffMobileNo"));
                    //TODO photo and addreess proff
                    id.Photo_File = reader.GetString(reader.GetOrdinal("Photo"));
                    id.Proof_File = reader.GetString(reader.GetOrdinal("AddressProof"));

                    id.PoliceVerification = reader.GetBoolean(reader.GetOrdinal("PoliceVerified"));
                    id.PoliceVerificationDate = reader.GetDateTime(reader.GetOrdinal("PoliceVerificationDate"));
                    id.ESICNo = reader.GetString(reader.GetOrdinal("ESICNo"));
                    id.PurchaseOrderNo = reader.GetString(reader.GetOrdinal("PONo"));
                    DateTime tempDate;
                    if (DateTime.TryParse(reader.GetString(reader.GetOrdinal("POStartDate")), out tempDate))
                    {
                        id.PODateStart = tempDate;
                    }

                    if (DateTime.TryParse(reader.GetString(reader.GetOrdinal("POStartDate")), out tempDate))
                    {
                        id.PODateEnd = tempDate;
                    }

                    id.JobSkill = reader.GetString(reader.GetOrdinal("JobSkill"));
                    id.PFNo = reader.GetString(reader.GetOrdinal("PFNo"));
                    id.AadhaarNo = reader.GetString(reader.GetOrdinal("AadhaarNo"));
                    id.BankName = reader.GetString(reader.GetOrdinal("BankName"));
                    id.ACNo = reader.GetString(reader.GetOrdinal("ACNo"));
                    id.IFSCCode = reader.GetString(reader.GetOrdinal("IFSCCode"));

                    //id.LastInTime = reader.GetDateTime(14);
                    //id.LastOutTime = reader.GetDateTime(15);

                }
            }
            return id;
        }