В представлении вам необходимо объявить модель в виде списка
@model List<PIC_Program_1._0.Models.SummaryReportModel>
Ваш контроллер должен выглядеть следующим образом:
public ActionResult Index()
{
return View("Index", GetSummaryReport());
}
private List<SummaryReportModel> GetSummaryReport()
{
PIC_Program_1_0Context db = new PIC_Program_1_0Context();
var items = db.Items.Where(x => x.deleted == false).ToList();
var components = db.Components.Where(x => x.deleted == false).ToList();
var parts = db.Parts.Where(x => x.deleted == false).ToList();
List<Site> sites = db.Sites.ToList();
//variables
float partcost = 0;
float compcost = 0;
float complastcost = 0;
float compretail = 0;
float itemcost = 0;
float itemlastcost = 0;
float itemretail = 0;
float opartcost = 0;
float ocompcost = 0;
float ocomplastcost = 0;
float ocompretail = 0;
float oitemcost = 0;
float oitemlastcost = 0;
float oitemretail = 0;
float lcompcost = 0;
float litemcost = 0;
float locompcost = 0;
float loitemcost = 0;
float tools = 0;
float otools = 0;
float total = 0;
float ltotal = 0;
float ostotal = 0;
float ofltotal = 0;
float pc6 = 0;
float pr6 = 0;
float pc7 = 0;
float pr7 = 0;
float pc8 = 0;
float pr8 = 0;
float pc9 = 0;
float pr9 = 0;
float opc6 = 0;
//float opr6 = 0;
float opc7 = 0;
//float opr7 = 0;
float opc8 = 0;
//float opr8 = 0;
float opc9 = 0;
//float opr9 = 0;
float pro = 0;
float pco = 0;
float plo = 0;
//float opro = 0;
float opco = 0;
//float oplo = 0;
//osi items
float[] osiItemCost = new float[sites.Count + 1];
float[] osiLoItemCost = new float[sites.Count + 1];
float[] osiItemLastCost = new float[sites.Count + 1];
//float[] osiItemRetail;
//osi components
float[] osiCompCost = new float[sites.Count + 1];
float[] osiLoCompCost = new float[sites.Count + 1];
float[] osiCompLastCost = new float[sites.Count + 1];
//float[] osiCompRetail;
//osi parts
float[] osiOpc6 = new float[sites.Count + 1];
float[] osiOpr6 = new float[sites.Count + 1];
float[] osiOpc7 = new float[sites.Count + 1];
float[] osiOpr7 = new float[sites.Count + 1];
float[] osiOpc8 = new float[sites.Count + 1];
float[] osiOpr8 = new float[sites.Count + 1];
float[] osiOpc9 = new float[sites.Count + 1];
float[] osiOpr9 = new float[sites.Count + 1];
float[] osiOpco = new float[sites.Count + 1];
float[] osiOpro = new float[sites.Count + 1];
float[] osiOplo = new float[sites.Count + 1];
//OSI TOTALS
float[] osiPartCost = new float[sites.Count + 1];
float[] osiTools = new float[sites.Count + 1];
float[] osiTotal = new float[sites.Count + 1];
float[] osiFltotal = new float[sites.Count + 1];
//float[] osiPartCost;
foreach (var p in parts)
{
if (p.PartID.StartsWith("6"))
{
pc6 += p.On_Hand * p.AverageCostCdn;
pr6 += p.On_Hand * p.PricePerUnit;
//opc6 += p.OffSiteCount * p.AverageCostCdn;
//opr6 += p.OffSiteCount * p.PricePerUnit;
}
else if (p.PartID.StartsWith("7"))
{
pc7 += p.On_Hand * p.AverageCostCdn;
pr7 += p.On_Hand * p.PricePerUnit;
//opc7 += p.OffSiteCount * p.AverageCostCdn;
//opr7 += p.OffSiteCount * p.PricePerUnit;
}
else if (p.PartID.StartsWith("8"))
{
pc8 += p.On_Hand * p.AverageCostCdn;
pr8 += p.On_Hand * p.PricePerUnit;
//opc8 += p.OffSiteCount * p.AverageCostCdn;
//opr8 += p.OffSiteCount * p.PricePerUnit;
}
else if (p.PartID.StartsWith("9"))
{
pc9 += p.On_Hand * p.AverageCostCdn;
pr9 += p.On_Hand * p.PricePerUnit;
//opc9 += p.OffSiteCount * p.AverageCostCdn;
//opr9 += p.OffSiteCount * p.PricePerUnit;
}
else
{
pco += p.On_Hand * p.AverageCostCdn;
pro += p.On_Hand * p.PricePerUnit;
//opco += p.OffSiteCount * p.AverageCostCdn;
//opro += p.OffSiteCount * p.PricePerUnit;
plo += p.On_Hand * p.LastCostCdn;
//oplo += p.OffSiteCount * p.LastCostCdn;
}
}
foreach (var c in components)
{
// New Average Cost Valuation = (pc6 + pc7 + pc8)
partcost = pc6 + pc7 + pc8;
opartcost = opc6 + opc7 + opc8;
tools = pc9 + pco;
otools = opc9 + opco;
//Add Labour
compcost += c.On_Hand * c.cost(1, false, false);
lcompcost += c.On_Hand * c.cost(1, false, true);
complastcost += c.cost(c.On_Hand, true, false);
compretail += c.On_Hand * c.PricePerUnit;
ocompcost += c.OffSiteCount * c.cost(1, false, false);
locompcost += c.OffSiteCount * c.cost(1, false, true);
ocomplastcost += c.cost(c.OffSiteCount, true, false);
ocompretail += c.OffSiteCount * c.PricePerUnit;
}
foreach (var i in items)
{
itemcost += i.On_Hand * i.cost(1, false, false);
litemcost += i.On_Hand * i.cost(1, false, true);
itemlastcost += i.cost(i.On_Hand, true, false);
itemretail += i.On_Hand * (float)i.PricePerUnit;
oitemcost += i.OffSiteCount * i.cost(1, false, false);
loitemcost += i.OffSiteCount * i.cost(1, false, true);
oitemlastcost += i.cost(i.OffSiteCount, true, false);
oitemretail += i.OffSiteCount * (float)i.PricePerUnit;
//on Site Parts Total valu
total = partcost + compcost + itemcost;
ltotal = partcost + lcompcost + litemcost;
//Off Site Parts Total valu
ostotal = opartcost + ocompcost + oitemcost;
ofltotal = opartcost + locompcost + loitemcost;
}
foreach (Site s in sites)
{
foreach (OffSiteItemDetails d in s.ItemDetails)
{
if (d.itemID != null)
{
osiItemCost[s.ID] = d.qty * db.Items.Where(x => x.ID == d.itemID).FirstOrDefault().cost(1, false, false);
osiLoItemCost[s.ID] += d.qty * db.Items.Where(x => x.ID == d.itemID).FirstOrDefault().cost(1, false, true);
osiItemLastCost[s.ID] += db.Items.Where(x => x.ID == d.itemID).FirstOrDefault().cost(d.qty, true, false);
//osiItemRetail[s.ID] += d.qty * db.Items.Where(x => x.ID == d.itemID).FirstOrDefault().PricePerUnit;
}
if (d.componentID != null)
{
osiPartCost[s.ID] = osiOpc6[s.ID] + osiOpc7[s.ID] + osiOpc8[s.ID];
osiTools[s.ID] = osiOpc9[s.ID] + osiOpco[s.ID];
osiCompCost[s.ID] = d.qty * db.Components.Where(x => x.ID == d.componentID).FirstOrDefault().cost(1, false, false);
osiLoCompCost[s.ID] += d.qty * db.Components.Where(x => x.ID == d.componentID).FirstOrDefault().cost(1, false, true);
osiCompLastCost[s.ID] += db.Components.Where(x => x.ID == d.componentID).FirstOrDefault().cost(d.qty, true, false);
//osiCompRetail[s.ID] += d.qty * db.Components.Where(x => x.ID == d.componentID).FirstOrDefault().PricePerUnit;
}
if (d.partID != null)
{
if (db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PartID.StartsWith("6"))
{
osiOpc6[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().AverageCostCdn;
osiOpr6[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PricePerUnit;
}
else if (db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PartID.StartsWith("7"))
{
osiOpc7[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().AverageCostCdn;
osiOpr7[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PricePerUnit;
}
else if (db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PartID.StartsWith("8"))
{
osiOpc8[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().AverageCostCdn;
osiOpr8[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PricePerUnit;
}
else if (db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PartID.StartsWith("9"))
{
osiOpc9[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().AverageCostCdn;
osiOpr9[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PricePerUnit;
}
else
{
osiOpco[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().AverageCostCdn;
osiOpro[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PricePerUnit;
osiOplo[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().LastCostCdn;
}
}
//Off Site Parts Total valu
osiTotal[s.ID] = osiPartCost[s.ID] + osiCompCost[s.ID] + osiItemCost[s.ID];
osiFltotal[s.ID] = osiPartCost[s.ID] + osiLoCompCost[s.ID] + osiLoItemCost[s.ID];
}
}
// I moved this inside the foreach (Site s in sites) loop
// var model = new SummaryReportModel()
// {
// Title = "Valuation",
// ReportTitle = "Valuation - Summary Report",
// OffReportTitle = "Valuation - Off Site Parts"
// };
// model.Tital = new List<List<string>>()
// {
// new List<string>()
// {
// "Valuation - Main Inventory",
// },
// };
// model.ValuationColumns = new List<string>()
// {
// "",
// "",
// "",
// "Average Cost",
// "",
// "",
// "Average Cost (With labour)"
// };
// model.ValuationRows = new List<List<string>>()
// {
// new List<string>()
// {
// "Parts",
// "",
// "",
// partcost.ToString("C2"),
// "",
// "",
// partcost.ToString("C2")
// },
// new List<string>()
// {
// "",
// "600000 series",
// pc6.ToString("C2"),
// "",
// "600000 series",
// pc6.ToString("C2"),
// ""
// },
// new List<string>()
// {
// "",
// "700000 series",
// pc7.ToString("C2"),
// "",
// "700000 series",
// pc7.ToString("C2"),
// ""
// },
// new List<string>()
// {
// "",
// "800000 series",
// pc8.ToString("C2"),
// "",
// "800000 series",
// pc8.ToString("C2"),
// ""
// },
// new List<string>()
// {
// "Tools",
// "",
// "",
// tools.ToString("C2"),
// "",
// "",
// tools.ToString("C2")
// },
// new List<string>()
// {
// "",
// "900000 series",
// pc9.ToString("C2"),
// "",
// "900000 series",
// pc9.ToString("C2"),
// ""
// },
// new List<string>()
// {
// "",
// "Other",
// pco.ToString("C2"),
// "",
// "Other",
// pco.ToString("C2"),
// ""
// },
// new List<string>()
// {
// "Components",
// "",
// "",
// compcost.ToString("C2"),
// "",
// "",
// lcompcost.ToString("C2")
// },
// new List<string>()
// {
// "Items",
// "",
// "",
// itemcost.ToString("C2"),
// "",
// "",
// litemcost.ToString("C2")
// },
//};
// //totlal class
// model.Total = new List<List<string>>()
// {
// new List<string>()
// {
// "Total",
// "",
// "",
// total.ToString("C2"),
// "",
// "",
// ltotal.ToString("C2")
// },
// };
// model.SecondTital = new List<List<string>>()
// {
// new List<string>()
// {
// "Valuation - Off Site Parts"
// },
// };
List<SummaryReportModel> models = new List<SummaryReportModel>(); // this is what you'll return to the view
foreach (Site s in sites)
{
SummaryReportModel model = new SummaryReportModel();
model.Tital = new List<List<string>>()
{
new List<string>()
{
"Valuation - Main Inventory",
},
};
model.ValuationColumns = new List<string>()
{
"",
"",
"",
"Average Cost",
"",
"",
"Average Cost (With labour)"
};
model.ValuationRows = new List<List<string>>()
{
new List<string>()
{
"Parts",
"",
"",
partcost.ToString("C2"),
"",
"",
partcost.ToString("C2")
},
new List<string>()
{
"",
"600000 series",
pc6.ToString("C2"),
"",
"600000 series",
pc6.ToString("C2"),
""
},
new List<string>()
{
"",
"700000 series",
pc7.ToString("C2"),
"",
"700000 series",
pc7.ToString("C2"),
""
},
new List<string>()
{
"",
"800000 series",
pc8.ToString("C2"),
"",
"800000 series",
pc8.ToString("C2"),
""
},
new List<string>()
{
"Tools",
"",
"",
tools.ToString("C2"),
"",
"",
tools.ToString("C2")
},
new List<string>()
{
"",
"900000 series",
pc9.ToString("C2"),
"",
"900000 series",
pc9.ToString("C2"),
""
},
new List<string>()
{
"",
"Other",
pco.ToString("C2"),
"",
"Other",
pco.ToString("C2"),
""
},
new List<string>()
{
"Components",
"",
"",
compcost.ToString("C2"),
"",
"",
lcompcost.ToString("C2")
},
new List<string>()
{
"Items",
"",
"",
itemcost.ToString("C2"),
"",
"",
litemcost.ToString("C2")
},
};
//totlal class
model.Total = new List<List<string>>()
{
new List<string>()
{
"Total",
"",
"",
total.ToString("C2"),
"",
"",
ltotal.ToString("C2")
},
};
model.SecondTital = new List<List<string>>()
{
new List<string>()
{
"Valuation - Off Site Parts"
},
};
foreach (OffSiteItemDetails d in s.ItemDetails)
{
model.OffReportColumns = new List<string>()
{
s.Name,
"",
"",
"Average Cost",
"",
"",
"Average Cost (With labour)"
};
model.OffReportRows = new List<List<string>>()
{
new List<string>()
{
"Parts",
"",
"",
osiPartCost[s.ID].ToString("C2"),
"",
"",
osiPartCost[s.ID].ToString("C2")
},
new List<string>()
{
"",
"600000 series",
osiOpc6[s.ID].ToString("C2"),
"",
"600000 series",
osiOpc6[s.ID].ToString("C2"),
""
},
new List<string>()
{
"",
"700000 series",
osiOpc7[s.ID].ToString("C2"),
"",
"700000 series",
osiOpc7[s.ID].ToString("C2"),
""
},
new List<string>()
{
"",
"800000 series",
osiOpc8[s.ID].ToString("C2"),
"",
"800000 series",
osiOpc8[s.ID].ToString("C2"),
""
},
new List<string>()
{
"Tools",
"",
"",
osiTools[s.ID].ToString("C2"),
"",
"",
osiTools[s.ID].ToString("C2"),
},
new List<string>()
{
"",
"900000 series",
osiOpc9[s.ID].ToString("C2"),
"",
"900000 series",
osiOpc9[s.ID].ToString("C2"),
""
},
new List<string>()
{
"",
"Other",
osiOpco[s.ID].ToString("C2"),
"",
"Other",
osiOpco[s.ID].ToString("C2"),
""
},
new List<string>()
{
"Components",
"",
"",
osiCompCost[s.ID].ToString("C2"),
"",
"",
osiLoCompCost[s.ID].ToString("C2")
},
new List<string>()
{
"Items",
"",
"",
osiItemCost[s.ID].ToString("C2"),
"",
"",
osiLoItemCost[s.ID].ToString("C2")
},
};
model.OffReporTotal = new List<List<string>>()
{
new List<string>()
{
"Total",
"",
"",
osiTotal[s.ID].ToString("C2"),
"",
"",
osiFltotal[s.ID].ToString("C2")
},
};
}
model.osiGrandTotal = new List<List<string>>()
{
new List<string>()
{
"OSI Grand Total",
"",
"",
ostotal.ToString("C2"),
"",
"",
ofltotal.ToString("C2")
},
};
models.Add(model);
}
return models;
}