Reputation: 193
I have MVC 5 C# web API. I am going to display delivery days calculation according to system date. My code is working for single sub region with post code for the delivery day display (same post code has may sub regions). Can anyone please help me
This is my delivery details screen.
This is my C# code
int weeklyLogic = 0;
DateTime Firstweek = new DateTime();
DateTime cutDayFirst = new DateTime();
foreach (var delivery in day)
{
weeklyLogic = ((int)Enum.Parse(typeof(DayOfWeek), delivery.DeliveryDay) - (int)today.DayOfWeek + 7) % 7;
var nextweeklyLogic = today.AddDays(weeklyLogic);
Firstweek = nextweeklyLogic;
var cutDayLogic = nextweeklyLogic.AddDays(-delivery.CloseDayId);
cutDayFirst = cutDayLogic;
}
var Location = (from su in db.Suburbs.AsEnumerable()
where su.postcode.Contains(pcode) &&
su.name.Contains(SuburbName)
join sur in db.SubRegions on
su.SubRegionID equals sur.SubregionID
join re in db.AuRegions on
sur.RegionID equals re.RegionID
join DT in db.DeliveryPeriods on
sur.DeliveryTimeId equals DT.Id
select new Posts
{
suburb = new Suburb()
{
name = su.name,
postcode = su.postcode,
},
region = new Region()
{
Name = re.Name
},
deliveryTime = new DeliveryTime()
{
DeliveryDay = DT.DeliveryDay,
DeliveryType = DT.DeliveryType,
},
subRegion = new SubRegion()
{
CloseDayId = sur.CloseDayId,
SubregionName = sur.SubregionName,
SubregionID = sur.SubregionID
},
deliveryDays = new DeliveryDays()
{
Firstweek = Firstweek,
cutDayFirst = cutDayFirst,
},
}).ToList();
return Location1.Select(l => new LocationDTO
{
DeliveryDay = l.deliveryTime.DeliveryDay,
PostCode = l.suburb.postcode,
CloseDayId = l.subRegion.CloseDayId,
SubregionID = l.subRegion.SubregionID,
TFirstDeliveryDay = l.deliveryDays.Firstweek.ToString("dddd, d MMMM yyyy"),
TFirstCutOffDay = l.deliveryDays.cutDayFirst.ToString("dddd, d MMMM yyyy"),
}).ToList();
This is my out put, I marked errors.
Upvotes: 1
Views: 660
Reputation: 3319
As i can see your logic is incorrect by foreach loop. as per your for each
int weeklyLogic = 0;
DateTime Firstweek = new DateTime();
DateTime cutDayFirst = new DateTime();
foreach (var delivery in day)
{
weeklyLogic = ((int)Enum.Parse(typeof(DayOfWeek), delivery.DeliveryDay) - (int)today.DayOfWeek + 7) % 7;
var nextweeklyLogic = today.AddDays(weeklyLogic);
//initiated for all further processing by last value of day
Firstweek = nextweeklyLogic;
//initiated for all further processing by last value of day
var cutDayLogic = nextweeklyLogic.AddDays(-delivery.CloseDayId);
cutDayFirst = cutDayLogic;
}
by above logic Firstweek ,cutDayFirst always be the last one set by the foreach loop and these value will be same for all the Location .
your entire location logic should be inside foreach.
Update
create a new class
public class calculatedDays
{
public int SubRegionID{ get; set; }
public DateTime Firstweekdate { get; set; }
public DateTime cutDayFirstdate { get; set; }
}
and by your for each logic do this.
int weeklyLogic = 0;
DateTime Firstweek = new DateTime();
DateTime cutDayFirst = new DateTime();
List<calculatedDays>Days=new List<calculatedDays>();
foreach (var delivery in day)
{
weeklyLogic = ((int)Enum.Parse(typeof(DayOfWeek), delivery.DeliveryDay) - (int)today.DayOfWeek + 7) % 7;
var nextweeklyLogic = today.AddDays(weeklyLogic);
Firstweek = nextweeklyLogic;
var cutDayLogic = nextweeklyLogic.AddDays(-delivery.CloseDayId);
cutDayFirst = cutDayLogic;
calculatedDays d= new calculatedDays();
d.SubRegionID=delivery.SubRegionID;
d.Firstweekdate =Firstweek ;
d.cutDayFirstdate =cutDayFirst ;
Days.add(d);
}
for your location calculation add these changes.
var Location = (from su in db.Suburbs.AsEnumerable()
where su.postcode.Contains(pcode) &&
su.name.Contains(SuburbName)
join sur in db.SubRegions on
su.SubRegionID equals sur.SubregionID
join re in db.AuRegions on
sur.RegionID equals re.RegionID
join DT in db.DeliveryPeriods on
sur.DeliveryTimeId equals DT.Id
join dts in Days on
su.SubRegionID equals dts.SubRegionID
select new Posts
{
suburb = new Suburb()
{
name = su.name,
postcode = su.postcode,
},
region = new Region()
{
Name = re.Name
},
deliveryTime = new DeliveryTime()
{
DeliveryDay = DT.DeliveryDay,
DeliveryType = DT.DeliveryType,
},
subRegion = new SubRegion()
{
CloseDayId = sur.CloseDayId,
SubregionName = sur.SubregionName,
SubregionID = sur.SubregionID
},
deliveryDays = new DeliveryDays()
{
Firstweek = dts.Firstweekdate ,
cutDayFirst = dts.cutDayFirstdate,
},
}).ToList();
return Location1.Select(l => new LocationDTO
{
DeliveryDay = l.deliveryTime.DeliveryDay,
PostCode = l.suburb.postcode,
CloseDayId = l.subRegion.CloseDayId,
SubregionID = l.subRegion.SubregionID,
TFirstDeliveryDay = l.deliveryDays.Firstweek.ToString("dddd, d MMMM yyyy"),
TFirstCutOffDay = l.deliveryDays.cutDayFirst.ToString("dddd, d MMMM yyyy"),
}).ToList();
Hope it will help you . thanks. :)
Upvotes: 1