public HttpResponseMessage testCheckPromotionValidation([FromUri] RequestHourlyPricing requestHourlyPricing)
 {
     using (var mgr = new HourlyPricingManager())
     {
         var result = mgr.testCheckPromotionValidation(requestHourlyPricing);
         return(OkResponse <Promotion>(result));
     }
 }
 public HttpResponseMessage GetHourlyPricing([FromUri] RequestHourlyPricing requestHourlyPricing)
 {
     using (var mgr = new HourlyPricingManager())
     {
         var result = mgr.GetPricing(requestHourlyPricing, Language);
         return(OkResponse <IEnumerable <HourlyPricing> >(result));
     }
 }
        public IEnumerable <HourlyPricing> GetPricing(RequestHourlyPricing requestHourlyPricing, UserLanguage Lang)
        {
            //Get HOurlyPricing Of Nationality
            List <HourlyPricing> MorningHP = GetHourlyPricingByNationalityAndShift(requestHourlyPricing.NationalityId, DayShifts.Morning).ToList();
            List <HourlyPricing> EveningHP = GetHourlyPricingByNationalityAndShift(requestHourlyPricing.NationalityId, DayShifts.Evening).ToList();


            int countofdays = requestHourlyPricing.Days.Split(',').Count();

            // Get Promotion

            var promotion = PromotionMgr.GetPromotionByCode(requestHourlyPricing, Lang);



            //Get Available Days
            List <string> MorningAD = ShiftMgr.GetDays(requestHourlyPricing, DayShifts.Morning, countofdays, promotion).ToList();
            List <string> EveningAD = ShiftMgr.GetDays(requestHourlyPricing, DayShifts.Evening, countofdays, promotion).ToList();


            //Check If Days Available Or Not
            bool IsMDAvabilable = !requestHourlyPricing.Days.Split(',').ToList().Except(MorningAD).Any();
            bool IsEDAvabilable = !requestHourlyPricing.Days.Split(',').ToList().Except(EveningAD).Any();

            // key openDays was made in Nas web api to display all days not only district days and this not in availabiltiy business
            //if (ConfigurationManager.AppSettings["OpenDays"] == "true")
            //{
            //    IsMDAvabilable = true;
            //    IsEDAvabilable = true;
            //}


            MorningHP = MorningHP.Select(a => CastToClientHourlyPricing(a, countofdays, requestHourlyPricing.HoursCount, requestHourlyPricing.ContractDuration, requestHourlyPricing.Empcount, IsMDAvabilable, MorningAD, promotion)).ToList();
            EveningHP = EveningHP.Select(a => CastToClientHourlyPricing(a, countofdays, requestHourlyPricing.HoursCount, requestHourlyPricing.ContractDuration, requestHourlyPricing.Empcount, IsEDAvabilable, EveningAD, promotion)).ToList();

            var AllHP = new List <HourlyPricing>();

            AllHP.AddRange(MorningHP);
            AllHP.AddRange(EveningHP);

            return(AllHP);
        }
 public Promotion testCheckPromotionValidation(RequestHourlyPricing requestHourlyPricing, UserLanguage lang = UserLanguage.Arabic)
 {
     return(PromotionMgr.GetPromotionByCode(requestHourlyPricing, lang));
 }
示例#5
0
        public Promotion GetPromotionByCode(RequestHourlyPricing requestHourlyPricing, UserLanguage Lang)
        {
            string code = requestHourlyPricing.PromotionCode;

            if (string.IsNullOrEmpty(code))
            {
                code = DefaultValues.ServiceContractPerHour_DefaultPromotionCode;
            }

            string    query = String.Format(@"select new_promotionslistId,
                                            new_name,new_code,new_description,new_freevisits,new_discount,
                                            new_fixeddiscount,new_availalbe,new_fromdate,new_todate
                                            from new_promotionslist where new_availalbe = 1 and new_code='{0}'", code);
            DataTable dt    = CRMAccessDB.SelectQ(query).Tables[0];

            if (dt.Rows.Count == 0 && code != DefaultValues.ServiceContractPerHour_DefaultPromotionCode)
            {
                requestHourlyPricing.PromotionCode = DefaultValues.ServiceContractPerHour_DefaultPromotionCode;

                return(GetPromotionByCode(requestHourlyPricing, Lang));
            }

            bool checkresult = true;

            PropertyInfo[] properties = typeof(RequestHourlyPricing).GetProperties();

            InvalidProperties = new List <string>();

            foreach (PropertyInfo property in properties)
            {
                string propValue = property.GetValue(requestHourlyPricing) != null?property.GetValue(requestHourlyPricing).ToString() : "";

                if (!string.IsNullOrEmpty(propValue))
                {
                    bool isPromotionValid = checkpromotionvalidation(property.Name, propValue, dt.Rows[0]["new_promotionslistId"].ToString());
                    checkresult = isPromotionValid && checkresult;
                }
            }

            if (checkresult == false)
            {
                //requestHourlyPricing.PromotionCode = DefaultValues.ServiceContractPerHour_DefaultPromotionCode;

                string    query1 = String.Format(@"select new_promotionslistId,
                                            new_name,new_code,new_description,new_freevisits,new_discount,
                                            new_fixeddiscount,new_availalbe,new_fromdate,new_todate
                                            from new_promotionslist where new_code='{0}'", DefaultValues.ServiceContractPerHour_DefaultPromotionCode);
                DataTable dt1    = CRMAccessDB.SelectQ(query1).Tables[0];

                var p = new Promotion(dt1.AsEnumerable().FirstOrDefault());

                //var p = GetPromotionByCode(requestHourlyPricing);

                string errorMessage = "";

                if (Lang == UserLanguage.Arabic)
                {
                    errorMessage = "كود الخصم غير مناسب مع الباقة المختارة";
                }
                else
                {
                    errorMessage = "Invalid Promotion With Selected Package. ";
                }
                //if (InvalidProperties.Any())
                //{
                //    InvalidProperties.ForEach(s =>
                //    {
                //        errorMessage += " [ " + s + " ] ";
                //    });
                //}
                p.Name = errorMessage;
                return(p);
            }

            var validPromotion = new Promotion(dt.AsEnumerable().FirstOrDefault());

            validPromotion.Name = validPromotion.Description;

            return(validPromotion);
            //return dt.AsEnumerable().Select(dataRow => new Promotion(dataRow));
        }
        public Entity CastToCrmEntity(RequestServiceContractPerHour contract)
        {
            Entity contractEntity = new Entity(CrmEntityName);

            contractEntity["new_hindivclintname"] = new EntityReference(CrmEntityNamesMapping.Contact, new Guid(contract.CustomerId.ToString()));
            contractEntity["new_nationality"]     = new EntityReference(CrmEntityNamesMapping.Nationality, new Guid(contract.NationalityId));
            contractEntity["new_houlrypricing"]   = new EntityReference(CrmEntityNamesMapping.HourlyPricing, new Guid(contract.HourlyPricingId));
            contractEntity["new_city"]            = new EntityReference(CrmEntityNamesMapping.City, new Guid(contract.CityId));
            contractEntity["new_district"]        = new EntityReference(CrmEntityNamesMapping.District, new Guid(contract.DistrictId));

            RequestHourlyPricing pricingObj = new RequestHourlyPricing();

            pricingObj.PromotionCode = contract.PromotionCode;

            var promotion = PromotionMgr.GetPromotionByCode(pricingObj, UserLanguage.Arabic);

            contractEntity["new_promotionid"] = new EntityReference(CrmEntityNamesMapping.Promotion, new Guid(promotion.Id));
            var totalVisits          = contract.ContractDuration * contract.NumOfVisits;
            var extraVisits          = (promotion.FreeVisitsFactor ?? 0) == 0 ? 0 : Math.Truncate((decimal)totalVisits / promotion.FreeVisitsFactor.Value);
            var totalPlusExtraVisits = totalVisits + extraVisits;

            contractEntity["new_contractsource"] = new OptionSetValue(contract.Who == 1 ? 1 : 2);  // why?

            contractEntity["new_housetype"]      = new OptionSetValue(contract.HouseType);
            contractEntity["new_floorno"]        = new OptionSetValue(contract.FloorNo);
            contractEntity["new_partmentnumber"] = contract.PartmentNo;

            contractEntity["new_houseno"] = contract.HouseNo;
            contractEntity["new_notes"]   = contract.AddressNotes;


            //if (contract.Who == 1)
            //    contractEntity["new_contractsource"] = new OptionSetValue(contract.Who);
            //else
            //    contractEntity["new_contractsource"] = new OptionSetValue(2);

            contractEntity["new_new_contractdate"] = DateTime.Now;
            contractEntity["new_contractconfirm"]  = DefaultValues.ServiceContractPerHour_IsConfirmed;
            contractEntity["statuscode"]           = new OptionSetValue(DefaultValues.ServiceContractPerHour_StatusCode);

            contract.StartDay = contract.StartDay.Replace('/', '-');

            contractEntity["new_contractstartdate"] = DateTime.ParseExact(contract.StartDay, "dd-MM-yyyy", CultureInfo.InvariantCulture);

            contractEntity["new_customerdays"] = contract.AvailableDays;
            contractEntity["new_selecteddays"] = contract.AvailableDays;
            contractEntity["new_latitude"]     = contract.Latitude;
            contractEntity["new_longitude"]    = contract.Longitude;
            contractEntity["new_mapurl"]       = "http://maps.google.com/maps?q=" + contract.Latitude + "," + contract.Longitude + "&z=15";
            contractEntity["new_paymentcode"]  = new Random().Next(0, 1000000).ToString("D6");

            Entity hourlyPricing     = HourlyPricingManager.GetCrmEntity(contract.HourlyPricingId);
            var    hourlyPricingCost = HourlyPricingManager.CalculateHourlyPricingCost(hourlyPricing, contract.NumOfHours, contract.NumOfVisits, contract.ContractDuration, contract.NumOfWorkers, promotion);

            contractEntity["new_shift"] = bool.Parse(hourlyPricing["new_shift"].ToString());

            contractEntity["new_hoursnumber"]     = new OptionSetValue(contract.NumOfHours);
            contractEntity["new_visitcount_def"]  = contract.NumOfVisits;
            contractEntity["new_weeklyvisits"]    = new OptionSetValue(contract.NumOfVisits);
            contractEntity["new_contractmonth"]   = new OptionSetValue(contract.ContractDuration);
            contractEntity["new_employeenumber"]  = new OptionSetValue(contract.NumOfWorkers);
            contractEntity["new_visitprice_def"]  = int.Parse(MathNumber.RoundDeciamlToInt(hourlyPricingCost.HourRate.ToString())) * contract.NumOfHours;
            contractEntity["new_visittotalprice"] = hourlyPricingCost.HourRate * contract.NumOfHours;
            contractEntity["new_monthvisits_def"] = contract.NumOfVisits * 4;

            //  contractEntity["new_totalvisits_def"] = contract.NumOfVisits * contract.ContractDuration; MIB Must be int
            contractEntity["new_totalvisits_def"] = (int)Math.Round(totalPlusExtraVisits, 0);

            contractEntity["new_hindivcount"]    = contract.NumOfHours;
            contractEntity["new_discount_def"]   = hourlyPricingCost.Discount;
            contractEntity["new_totalprice_def"] = (int)Math.Round(hourlyPricingCost.TotalPriceAfterPromotion, 0);   //decimal value string 180 = 180m as string not using parse
            contractEntity["new_vatrate"]        = hourlyPricingCost.VatRate / 100m;
            contractEntity["new_vatamount"]      = hourlyPricingCost.VatAmount;
            contractEntity["new_finalprice"]     = hourlyPricingCost.TotalPriceWithVat;

            contractEntity["new_onevisitprice"] = hourlyPricingCost.TotalPriceWithVat / (((int)Math.Round(totalPlusExtraVisits, 0)) * contract.NumOfWorkers);

            return(contractEntity);
        }
示例#7
0
        public IEnumerable <string> GetDays(RequestHourlyPricing requestHourlyPricing, DayShifts Shift, int countOfDays, Promotion promotion)
        {
            requestHourlyPricing.ContractStartDate = requestHourlyPricing.ContractStartDate.Replace('/', '-');
            DateTime startDate;

            try
            {
                startDate = DateTime.ParseExact(requestHourlyPricing.ContractStartDate, "dd-MM-yyyy", CultureInfo.InvariantCulture);
            }
            catch (Exception ex)
            {
                startDate = DateTime.ParseExact(requestHourlyPricing.ContractStartDate, "yyyy-MM-dd", CultureInfo.InvariantCulture);
            }

            var totalVisits          = requestHourlyPricing.ContractDuration * requestHourlyPricing.Weeklyvisits;
            var extraVisits          = (promotion.FreeVisitsFactor ?? 0) == 0 ? 0 : Math.Truncate((decimal)totalVisits / promotion.FreeVisitsFactor.Value);
            var totalPlusExtraVisits = totalVisits + extraVisits;

            DateTime EndDate;

            var contractDurationAfterPromotionInWeeks = (int)Math.Ceiling(totalPlusExtraVisits / requestHourlyPricing.Weeklyvisits);


            if (contractDurationAfterPromotionInWeeks <= 3)
            {
                EndDate = startDate.AddDays(6 * contractDurationAfterPromotionInWeeks);
            }
            else
            {
                EndDate = startDate.AddDays(7 * contractDurationAfterPromotionInWeeks);
                EndDate = EndDate.AddDays(-1);
            }


            string shift = Shift.ToString();

            #region commented

            /* string sql = @"Select distinct DayName  from HourContractShifts('@ContractStartDate','@ContractEndDate','@districtid','@ShiftName',4)
             *           where nationalityId='@nationality'
             *           group by HourContractShifts.new_resourcecode,DayName
             *           having COUNT(*)>=@visitsCount order by DayName";
             *
             *
             *
             *
             *
             *
             *
             *
             *
             * //
             * sql = sql.Replace("@ContractStartDate", startDate.Date.ToString());
             * sql = sql.Replace("@ContractEndDate", EndDate.Date.ToString());
             * sql = sql.Replace("@districtid", DistrictId);
             * sql = sql.Replace("@ShiftName", shift);
             * sql = sql.Replace("@nationality", NationalityId);
             * if (months!=0)
             * sql = sql.Replace("@visitsCount", (4 * months).ToString());
             * else
             *  sql = sql.Replace("@visitsCount", (countofdays).ToString());
             *
             * DataTable dt = CRMAccessDB.SelectQ(sql).Tables[0];
             *
             * string sql2 = @"select new_days from new_district  where new_districtId='@id'";
             * sql2 = sql2.Replace("@id", DistrictId);
             * DataTable dtdistrict = CRMAccessDB.SelectQ(sql2).Tables[0];
             */
            #endregion


            //            string sql = @"
            //with allSihfts as  (
            // select  ShiftFrom,  nationalityId,dayname,Count(distinct new_hourresourceId) SeatNo,count(distinct new_employeeid) as NoOfResources from
            //HourContractShiftsV02('@MinDate','@MaxDate','@districtid','@ShiftName','@nationality',@hoursCount,'@cityid')
            //                       --where Dayname in ('Sunday')
            //                    group by dayname,shiftfrom,nationalityId
            //					having Count(distinct new_hourresourceId)>=@EmpCount and count(distinct new_employeeid)>=@EmpCount
            //)

            //select nationalityId,dayname,count(dayname) counts from allSihfts
            //group by nationalityId,dayname
            //having count(dayname) >=@visitsCount";

            string sql = @"exec dbo.HourContractShifts_ValidationV01 
                                '@MinDate','@MaxDate','@districtid','@ShiftName','@nationality',@hoursCount,'@cityid' , @empCount, @visitsCount
                          ";

            //sql = sql.Replace("@visitsCount", (countOfDays / requestHourlyPricing.Weeklyvisits).ToString());

            sql = sql.Replace("@visitsCount", (contractDurationAfterPromotionInWeeks).ToString());

            sql = sql.Replace("@empCount", (requestHourlyPricing.Empcount).ToString());

            sql = sql.Replace("@hoursCount", requestHourlyPricing.HoursCount.ToString());
            sql = sql.Replace("@cityid", requestHourlyPricing.CityId);


            sql = sql.Replace("@MinDate", startDate.AddHours(3).Date.ToString("MM/dd/yyyy"));
            sql = sql.Replace("@MaxDate", EndDate.Date.ToString("MM/dd/yyyy"));



            sql = sql.Replace("@districtid", requestHourlyPricing.DistrictId);

            //if (shift == "صباحي") ShiftName = "Morning";
            //if (ShiftName == "مسائي") ShiftName = "Evening";
            sql = sql.Replace("@ShiftName", shift);
            sql = sql.Replace("@nationality", requestHourlyPricing.NationalityId);
            // SqlCommand CMD = new SqlCommand(sql);
            System.Data.DataTable dt = CRMAccessDB.SelectQ(sql).Tables[0];
            string avaDays           = string.Empty;


            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (avaDays.IndexOf(dt.Rows[i]["DayName"].ToString()) == -1)
                {
                    avaDays = avaDays + dt.Rows[i]["DayName"] + ",";
                }
            }
            if (!string.IsNullOrEmpty(avaDays))
            {
                avaDays = avaDays.Remove(avaDays.Length - 1);
            }


            List <string> DaysOfWeek = avaDays.Split(',').ToList();

            //Avilable Days List
            //List<string> List = new List<string>();
            //for (int i = 0; i < dt.Rows.Count; i++) List.Add(dt.Rows[i][0].ToString());

            return(DaysOfWeek);
        }