/// <summary>
        /// Removes old record and insert newly selected facilities against inspection schedule id
        /// </summary>
        /// <param name="selectedFacilities"></param>
        /// <param name="inspectionScheduleId"></param>
        /// <param name="email"></param>
        /// <returns></returns>
        public bool UpdateInspectionScheduleSite(List <FacilitySiteItems> selectedSites, int inspectionScheduleId, string email)
        {
            var inspectionScheduleSiteManager   = this.container.GetInstance <InspectionScheduleSiteManager>();
            var existingInspectionScheduleSites = inspectionScheduleSiteManager.GetSiteByInspectionScheduleId(inspectionScheduleId);

            foreach (var item in existingInspectionScheduleSites)// remove previous facilities
            {
                inspectionScheduleSiteManager.BatchRemove(item);
            }

            inspectionScheduleSiteManager.SaveChanges();

            foreach (var site in selectedSites)
            {
                InspectionScheduleSite inspectionScheduleFacility = new InspectionScheduleSite();
                inspectionScheduleFacility.SiteID = site.SiteId;
                inspectionScheduleFacility.InspectionScheduleId = inspectionScheduleId;
                inspectionScheduleFacility.InspectionDate       = Convert.ToDateTime(site.InspectionDate);
                inspectionScheduleFacility.CreatedBy            = email;
                inspectionScheduleFacility.CreatedDate          = DateTime.Now;

                inspectionScheduleSiteManager.Add(inspectionScheduleFacility);
            }
            return(true);
        }
        /// <summary>
        /// Creates a copy of last archived inspection schedule and save in database
        /// </summary>
        /// <param name="inspectionScheduleId"></param>
        /// <param name="email"></param>
        /// <returns></returns>
        public InspectionSchedule CloneInspectionSchedule(int inspectionScheduleId, string email)
        {
            var inspectionScheduleManager       = this.container.GetInstance <InspectionScheduleManager>();
            var inspectionScheduleDetailManager = this.container.GetInstance <InspectionScheduleDetailManager>();
            var inspectionScheduleSiteManager   = this.container.GetInstance <InspectionScheduleSiteManager>();

            var inspectionScheduleOld             = inspectionScheduleManager.GetById(inspectionScheduleId);
            InspectionSchedule inspectionSchedule = new InspectionSchedule();

            inspectionSchedule.ApplicationId  = inspectionScheduleOld.ApplicationId;
            inspectionSchedule.IsActive       = true;
            inspectionSchedule.IsArchive      = false;
            inspectionSchedule.OrganizationId = inspectionScheduleOld.OrganizationId;
            inspectionSchedule.InspectionDate = inspectionScheduleOld.InspectionDate;
            inspectionSchedule.StartDate      = inspectionScheduleOld.StartDate;
            inspectionSchedule.EndDate        = inspectionScheduleOld.EndDate;
            inspectionSchedule.CompletionDate = inspectionScheduleOld.CompletionDate;
            inspectionSchedule.CreatedDate    = DateTime.Now;
            inspectionSchedule.CreatedBy      = email;
            inspectionSchedule.UpdatedDate    = DateTime.Now;
            inspectionSchedule.IsCompleted    = false;

            inspectionScheduleManager.Add(inspectionSchedule);

            var inspectionScheduleDetailListOld = GetActiveByInspectionScheduleId(inspectionScheduleOld.Id);

            foreach (var inspectionScheduleDetailOld in inspectionScheduleOld.InspectionScheduleDetails)
            {
                InspectionScheduleDetail inspectionScheduleDetail = new InspectionScheduleDetail();

                inspectionScheduleDetail.InspectionScheduleId = inspectionSchedule.Id;
                inspectionScheduleDetail.AccreditationRoleId  = inspectionScheduleDetailOld.AccreditationRoleId;
                inspectionScheduleDetail.UserId = inspectionScheduleDetailOld.UserId;
                inspectionScheduleDetail.InspectionCategoryId = inspectionScheduleDetailOld.InspectionCategoryId;
                inspectionScheduleDetail.SiteId      = inspectionScheduleDetailOld.SiteId;
                inspectionScheduleDetail.IsLead      = inspectionScheduleDetailOld.IsLead;
                inspectionScheduleDetail.IsMentor    = inspectionScheduleDetailOld.IsMentor;
                inspectionScheduleDetail.IsActive    = true;
                inspectionScheduleDetail.IsArchive   = false;
                inspectionScheduleDetail.CreatedDate = DateTime.Now;
                inspectionScheduleDetail.CreatedBy   = email;

                inspectionScheduleDetailManager.BatchAdd(inspectionScheduleDetail);
            }

            inspectionScheduleDetailManager.SaveChanges();

            var existingInspectionScheduleSites = inspectionScheduleSiteManager.GetSiteByInspectionScheduleId(inspectionScheduleOld.Id);

            foreach (var site in existingInspectionScheduleSites)
            {
                InspectionScheduleSite inspectionScheduleSite = new InspectionScheduleSite();
                inspectionScheduleSite.SiteID = site.SiteID;
                inspectionScheduleSite.InspectionScheduleId = inspectionSchedule.Id;
                inspectionScheduleSite.InspectionDate       = site.InspectionDate;
                inspectionScheduleSite.CreatedBy            = email;
                inspectionScheduleSite.CreatedDate          = DateTime.Now;

                inspectionScheduleSiteManager.BatchAdd(inspectionScheduleSite);
            }

            inspectionScheduleSiteManager.SaveChanges();

            return(inspectionSchedule);
        }