//Delete a record
        public static int DeleteRecord(etblPropertyPromotionMap eobj)
        {
            int retval = 0;

            using (OneFineRateEntities db = new OneFineRateEntities())
            {
                try
                {
                    using (OneFineRateEntities db1 = new OneFineRateEntities())
                    {
                        var PP = db1.tblPropertyPromotionMaps.Where(a => a.iID == eobj.iID).ToList();
                        if (eobj.iPromoId != Convert.ToInt32(Promotions.OFRFreebies))
                        {
                            eobj.bParentActive = (bool)PP[0].bParentActive;
                        }
                        eobj.iPromoId = PP[0].iPromoId;
                    }

                    OneFineRate.tblPropertyPromotionMap obj = (OneFineRate.tblPropertyPromotionMap)OneFineRateAppUtil.clsUtils.ConvertToObject(eobj, new OneFineRate.tblPropertyPromotionMap());
                    db.tblPropertyPromotionMaps.Attach(obj);
                    db.Entry(obj).State = System.Data.Entity.EntityState.Modified;
                    db.SaveChanges();
                    retval = 1;
                }
                catch (Exception)
                {
                    throw;
                }
            }
            return(retval);
        }
        //Update a record
        public static int UpdateRecord(etblPropertyPromotionMap eobj, List <CancellationPolicyGrid> jArray)
        {
            int retval = 0;

            using (OneFineRateEntities db = new OneFineRateEntities())
            {
                try
                {
                    if (jArray.Count > 0)
                    {
                        for (int i = 0; i < jArray.Count; i++)
                        {
                            if (eobj.sCancellationPolicy == null)
                            {
                                eobj.sCancellationPolicy = jArray[i].sPolicyId;
                            }
                            else
                            {
                                eobj.sCancellationPolicy = eobj.sCancellationPolicy + "," + jArray[i].sPolicyId;
                            }
                        }
                    }



                    if (eobj.iPromoId != Convert.ToInt32(Promotions.OFRFreebies))
                    {
                        #region Check Cancellation Policy Dates
                        int CancellationPolicyDateCount = 0;
                        int SelectedValidityDateCount   = 0;

                        DateTime SelectedValidityCurrentDate = eobj.dtStayDateFrom;
                        while (SelectedValidityCurrentDate <= eobj.dtStayDateTo)
                        {
                            SelectedValidityDateCount++;
                            SelectedValidityCurrentDate = SelectedValidityCurrentDate.AddDays(1);
                        }

                        for (int i = 0; i < jArray.Count; i++)
                        {
                            DateTime CancellationPolicyCurrentDate = Convert.ToDateTime(clsUtils.ConvertddmmyyyytoDateTime(jArray[i].CancellationValidFrom));
                            while (CancellationPolicyCurrentDate <= Convert.ToDateTime(clsUtils.ConvertddmmyyyytoDateTime(jArray[i].CancellationValidTo)))
                            {
                                CancellationPolicyDateCount++;
                                CancellationPolicyCurrentDate = CancellationPolicyCurrentDate.AddDays(1);
                            }
                        }

                        if (SelectedValidityDateCount != CancellationPolicyDateCount)
                        {
                            return(retval = 6);
                        }

                        #endregion
                    }



                    int iPropPromoID = 0;
                    if (eobj.iPromoId == Convert.ToInt32(Promotions.OFRFreebies))
                    {
                        eobj.iRPId = null;
                    }

                    var vRoom = eobj.sRoomTypeId.Split(',').ToList();
                    iPropPromoID = eobj.iID;
                    if (vRoom != null)
                    {
                        IEnumerable <tblPropertyPromotionRoomTypeMap> list = db.tblPropertyPromotionRoomTypeMaps.Where(u => u.iPropPromoID == iPropPromoID).ToList();
                        db.tblPropertyPromotionRoomTypeMaps.RemoveRange(list);
                        //db.SaveChanges();

                        db.tblPropertyPromotionRoomTypeMaps.AddRange(vRoom.Select(x => new tblPropertyPromotionRoomTypeMap()
                        {
                            iPropPromoID = iPropPromoID,
                            iRoomId      = Convert.ToInt16(x),//x.iRoomTypeId,
                            dtActionDate = DateTime.Now,
                            iActionBy    = eobj.iActionBy
                        }).ToList());
                        //  db.SaveChanges();
                    }

                    var recChekCancellationData = (from m in db.tblPropertyPromotionCancellationMainMaps
                                                   select new
                    {
                        m.iID,
                        m.dtCancellationValidFrom,
                        m.dtCancellationValidTo,
                    }).Where(u => u.iID == iPropPromoID).AsQueryable().ToList();

                    if (jArray.Count > 0 || recChekCancellationData.Count > 0)
                    {
                        List <CancellationPolicyGridMain> objjArray = new List <CancellationPolicyGridMain>();

                        for (int i = 0; i < jArray.Count; i++)
                        {
                            objjArray.Add(new CancellationPolicyGridMain()
                            {
                                CancellationValidFrom = Convert.ToDateTime(clsUtils.ConvertddmmyyyytoDateTime(jArray[i].CancellationValidFrom)),
                                CancellationValidTo   = Convert.ToDateTime(clsUtils.ConvertddmmyyyytoDateTime(jArray[i].CancellationValidTo)),
                                sPolicyId             = jArray[i].sPolicyId
                            });
                        }

                        IEnumerable <tblPropertyPromotionCancellationMainMap> list = db.tblPropertyPromotionCancellationMainMaps.Where(u => u.iID == iPropPromoID).ToList();
                        db.tblPropertyPromotionCancellationMainMaps.RemoveRange(list);
                        //db.SaveChanges();

                        db.tblPropertyPromotionCancellationMainMaps.AddRange(objjArray.Select(x => new tblPropertyPromotionCancellationMainMap()
                        {
                            iID = iPropPromoID,
                            dtCancellationValidFrom = Convert.ToDateTime(x.CancellationValidFrom),
                            dtCancellationValidTo   = Convert.ToDateTime(x.CancellationValidTo),
                            sCancellationPolicyId   = x.sPolicyId,
                            dtActionDate            = DateTime.Now,
                            iActionBy = eobj.iActionBy
                        }).ToList());

                        IEnumerable <tblPropertyPromotionCancellationMap> list1 = db.tblPropertyPromotionCancellationMaps.Where(u => u.iID == iPropPromoID).ToList();
                        db.tblPropertyPromotionCancellationMaps.RemoveRange(list1);
                        List <tblPropertyPromotionCancellationMap> LPRPC = new List <tblPropertyPromotionCancellationMap>();
                        for (int i = 0; i < objjArray.Count; i++)
                        {
                            string[] IDs = objjArray[i].sPolicyId.Split(',');

                            for (int j = 0; j < IDs.Length; j++)
                            {
                                DateTime CurrentDate = objjArray[i].CancellationValidFrom;
                                while (CurrentDate <= objjArray[i].CancellationValidTo)
                                {
                                    tblPropertyPromotionCancellationMap PRPC = new tblPropertyPromotionCancellationMap();
                                    PRPC.dtDate = CurrentDate;
                                    PRPC.iCancellationPolicyId = Convert.ToInt32(IDs[j]);
                                    PRPC.iID          = iPropPromoID;
                                    PRPC.iActionBy    = eobj.iActionBy;
                                    PRPC.dtActionDate = DateTime.Now;

                                    LPRPC.Add(PRPC);
                                    CurrentDate = CurrentDate.AddDays(1);
                                }
                            }
                        }

                        db.tblPropertyPromotionCancellationMaps.AddRange(LPRPC);
                    }

                    using (OneFineRateEntities db1 = new OneFineRateEntities())
                    {
                        var PP = db1.tblPropertyPromotionMaps.Where(a => a.iID == eobj.iID).ToList();
                        if (eobj.iPromoId != Convert.ToInt32(Promotions.OFRFreebies))
                        {
                            eobj.bParentActive = (bool)PP[0].bParentActive;
                        }
                        eobj.iPromoId = PP[0].iPromoId;
                    }

                    OneFineRate.tblPropertyPromotionMap obj = (OneFineRate.tblPropertyPromotionMap)OneFineRateAppUtil.clsUtils.ConvertToObject(eobj, new OneFineRate.tblPropertyPromotionMap());
                    db.tblPropertyPromotionMaps.Attach(obj);
                    db.Entry(obj).State = System.Data.Entity.EntityState.Modified;

                    //db.SaveChanges();
                    //db.SaveChanges();
                    //db.uspSetActiveDeactiveByParent(eobj.iRPId);
                    db.SaveChanges();
                    retval = 1;
                }
                catch (Exception)
                {
                    throw;
                }
            }
            return(retval);
        }
        //Add new record
        public static int AddRecord(etblPropertyPromotionMap eobj, List <CancellationPolicyGrid> jArray)
        {
            int  retval    = 0;
            bool chkExists = false;

            using (var transactionScope = new TransactionScope())
            {
                using (OneFineRateEntities db = new OneFineRateEntities())
                {
                    try
                    {
                        if (jArray.Count > 0)
                        {
                            for (int i = 0; i < jArray.Count; i++)
                            {
                                if (eobj.sCancellationPolicy == null)
                                {
                                    eobj.sCancellationPolicy = jArray[i].sPolicyId;
                                }
                                else
                                {
                                    eobj.sCancellationPolicy = eobj.sCancellationPolicy + "," + jArray[i].sPolicyId;
                                }
                            }
                        }

                        if (eobj.iPromoId != Convert.ToInt32(Promotions.OFRFreebies))
                        {
                            #region Check Cancellation Policy Dates
                            int CancellationPolicyDateCount = 0;
                            int SelectedValidityDateCount   = 0;

                            DateTime SelectedValidityCurrentDate = eobj.dtStayDateFrom;
                            while (SelectedValidityCurrentDate <= eobj.dtStayDateTo)
                            {
                                SelectedValidityDateCount++;
                                SelectedValidityCurrentDate = SelectedValidityCurrentDate.AddDays(1);
                            }

                            for (int i = 0; i < jArray.Count; i++)
                            {
                                DateTime CancellationPolicyCurrentDate = Convert.ToDateTime(clsUtils.ConvertddmmyyyytoDateTime(jArray[i].CancellationValidFrom));
                                while (CancellationPolicyCurrentDate <= Convert.ToDateTime(clsUtils.ConvertddmmyyyytoDateTime(jArray[i].CancellationValidTo)))
                                {
                                    CancellationPolicyDateCount++;
                                    CancellationPolicyCurrentDate = CancellationPolicyCurrentDate.AddDays(1);
                                }
                            }

                            if (SelectedValidityDateCount != CancellationPolicyDateCount)
                            {
                                return(retval = 6);
                            }

                            #endregion

                            chkExists = db.tblPropertyPromotionMaps.Any(
                                p => p.dtBookingDateFrom == eobj.dtBookingDateFrom &&
                                p.dtBookingDateTo == eobj.dtBookingDateTo &&
                                p.dtStayDateFrom == eobj.dtStayDateFrom &&
                                p.dtStayDateTo == eobj.dtStayDateTo &&
                                p.iRPId == eobj.iRPId &&
                                p.bIsPercent == eobj.bIsPercent &&
                                p.bIsPlus == eobj.bIsPlus &&
                                p.dValue == eobj.dValue &&
                                p.sAmenityId == eobj.sAmenityId &&
                                p.sAmenity == eobj.sAmenity &&
                                p.sCancellationPolicy == eobj.sCancellationPolicy &&
                                p.sRoomTypeId == eobj.sRoomTypeId &&
                                p.bIsSecretDeal == eobj.bIsSecretDeal &&
                                p.cStatus == eobj.cStatus
                                );
                        }


                        if (chkExists != true)
                        {
                            int iPropPromoID = 0;
                            if (eobj.iPromoId == Convert.ToInt32(Promotions.OFRFreebies))
                            {
                                eobj.iRPId = null;
                            }
                            else
                            {
                                var RP = db.tblPropertyRatePlanMaps.Where(a => a.iRPId == eobj.iRPId).ToList();

                                if (RP[0].cStatus == "I" || RP[0].bParentActive == false)
                                {
                                    eobj.bParentActive = false;
                                }
                                else
                                {
                                    eobj.bParentActive = true;
                                }
                            }

                            OneFineRate.tblPropertyPromotionMap dbuser = (OneFineRate.tblPropertyPromotionMap)OneFineRateAppUtil.clsUtils.ConvertToObject(eobj, new OneFineRate.tblPropertyPromotionMap());
                            db.tblPropertyPromotionMaps.Add(dbuser);
                            db.SaveChanges();
                            var vRoom = eobj.sRoomTypeId.Split(',').ToList();
                            iPropPromoID = dbuser.iID;
                            if (vRoom != null)
                            {
                                db.tblPropertyPromotionRoomTypeMaps.AddRange(vRoom.Select(x => new tblPropertyPromotionRoomTypeMap()
                                {
                                    iPropPromoID = iPropPromoID,
                                    iRoomId      = Convert.ToInt16(x),//x.iRoomTypeId,
                                    dtActionDate = DateTime.Now,
                                    iActionBy    = eobj.iActionBy
                                }).ToList());
                            }

                            if (jArray.Count > 0)
                            {
                                List <CancellationPolicyGridMain> objjArray = new List <CancellationPolicyGridMain>();

                                for (int i = 0; i < jArray.Count; i++)
                                {
                                    objjArray.Add(new CancellationPolicyGridMain()
                                    {
                                        CancellationValidFrom = Convert.ToDateTime(clsUtils.ConvertddmmyyyytoDateTime(jArray[i].CancellationValidFrom)),
                                        CancellationValidTo   = Convert.ToDateTime(clsUtils.ConvertddmmyyyytoDateTime(jArray[i].CancellationValidTo)),
                                        sPolicyId             = jArray[i].sPolicyId
                                    });
                                }

                                db.tblPropertyPromotionCancellationMainMaps.AddRange(objjArray.Select(x => new tblPropertyPromotionCancellationMainMap()
                                {
                                    iID = iPropPromoID,
                                    dtCancellationValidFrom = Convert.ToDateTime(x.CancellationValidFrom),
                                    dtCancellationValidTo   = Convert.ToDateTime(x.CancellationValidTo),
                                    sCancellationPolicyId   = x.sPolicyId,
                                    dtActionDate            = DateTime.Now,
                                    iActionBy = eobj.iActionBy
                                }).ToList());

                                List <tblPropertyPromotionCancellationMap> LPRPC = new List <tblPropertyPromotionCancellationMap>();
                                for (int i = 0; i < objjArray.Count; i++)
                                {
                                    string[] IDs = objjArray[i].sPolicyId.Split(',');

                                    for (int j = 0; j < IDs.Length; j++)
                                    {
                                        DateTime CurrentDate = objjArray[i].CancellationValidFrom;
                                        while (CurrentDate <= objjArray[i].CancellationValidTo)
                                        {
                                            tblPropertyPromotionCancellationMap PRPC = new tblPropertyPromotionCancellationMap();
                                            PRPC.dtDate = CurrentDate;
                                            PRPC.iCancellationPolicyId = Convert.ToInt32(IDs[j]);
                                            PRPC.iID          = iPropPromoID;
                                            PRPC.iActionBy    = eobj.iActionBy;
                                            PRPC.dtActionDate = DateTime.Now;

                                            LPRPC.Add(PRPC);
                                            CurrentDate = CurrentDate.AddDays(1);
                                        }
                                    }
                                }

                                db.tblPropertyPromotionCancellationMaps.AddRange(LPRPC);
                            }
                            db.SaveChanges();
                            retval = 1;
                        }
                        else
                        {
                            retval = 2;
                        }
                        transactionScope.Complete();
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                    finally
                    {
                        transactionScope.Dispose();
                    }
                }
            }
            return(retval);
        }