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)); }
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); }
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); }