MVC метод циклически перебирает массив, но отображает только значения для последнего элемента в массиве - PullRequest
1 голос
/ 12 марта 2020

У меня есть метод контроллера, который циклически просматривает таблицу базы данных «Сайты», но в настоящее время он только публикует контент для последнего элемента в массиве и публикует его столько же раз, сколько сайтов в базе данных.

Вот мой взгляд

  @foreach (Site s in sites)
        {

            <tr style="color:black">
                @foreach (var col in Model.OffReportColumns)
                {
                    <th>@col</th>
                }
            </tr>

            foreach (var row in Model.OffReportRows)
            {
                <tr style="color:black">
                    @foreach (var cell in row)
                    {
                        <td>@cell</td>
                    }
                </tr>
            }


            foreach (var row in Model.OffReporTotal)
            {
                <tr style="font-size: 20px">
                    @foreach (var cell in row)
                    {
                        <td>@cell</td>
                    }
                </tr>

            }
        }

А мой контроллер

 namespace PIC_Program_1._0.Controllers
{
    public class SummaryReportController : Controller
    {
        public ActionResult Index()
        {
            var model = GetSummaryReport();
            return View("Index", model);   
        }

        private 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];

                }
            }

            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> a = new List<SummaryReportModel>(); // this is what you'll return to the view

            foreach (Site s in sites)
            {
             SummaryReportModel y = new SummaryReportModel();
             foreach (OffSiteItemDetails d in s.ItemDetails)
             {           
            y.OffReportColumns = new List<string>()
            {
                s.Name,
                "",
                "",
                "Average Cost",
                "",
                "",
                "Average Cost (With labour)"
            };
              y.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")
                },
            };
            y.OffReporTotal = new List<List<string>>()
            {
                 new List<string>()
              {
                    "Total",
                    "",
                    "",
                    osiTotal[s.ID].ToString("C2"),
                    "",
                    "",
                    osiFltotal[s.ID].ToString("C2")
                },
            };

       }
        a.Add(y);
 }

            //return View(a);

            model.osiGrandTotal = new List<List<string>>()
            {
                 new List<string>()
              {
                    "OSI Grand Total",
                    "",
                    "",
                    ostotal.ToString("C2"),
                    "",
                    "",
                    ofltotal.ToString("C2")
                },
            };


            return model;
        }
    }
}

А вот часть моей таблицы "Sites" и "OffSiteItemDetails", на которой показана структура

ДБ сайтов

sites db

OffSiteItemDetails дБ

OffSiteItemDetails

Я хочу, чтобы он циклически проходил и публиковал значения для каждого сайта (он делает это через (s.ID).) В настоящее время он циклически проходит, но он просто публикует данные для последний s.Id (идентификатор сайта) в таблице, и он делает это 5 раз (Есть 5 сайтов). Я хочу, чтобы он отделял и публиковал данные для каждого сайта, когда он циклически проходит, и я просто не уверен, как это сделать

Вот мой класс модели

 public class SummaryReportModel
    {
        public string Title { get; set; }
        public string ReportTitle { get; set; }
        public string OffReportTitle { get; set; }
        public List<string> ValuationColumns { get; set; }
        public List<string> OffReportColumns { get; set; }
        public List<List<string>> ValuationRows { get; set; }
        public List<List<string>> OffReportRows { get; set; }
        public List<List<string>> Total { get; set; }
        public List<List<string>> OffReporTotal { get; set; }
        public List<List<string>> Tital { get; set; }
        public List<List<string>> SecondTital { get; set; }
        public List<List<string>> osiGrandTotal { get; set; }
    }

Ответы [ 2 ]

1 голос
/ 13 марта 2020

В представлении вам необходимо объявить модель в виде списка

@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;
    }
0 голосов
/ 12 марта 2020

Я не уверен, что полностью понимаю вашу точку зрения, потому что @cell довольно загадочный c, но вы не можете просто иметь foreach в представлении и ожидать отправки коллекции. Ваши поля должны быть названы как site [0] .name = ... Используйте для этого для l oop и убедитесь, что поля в сгенерированном html имеют имя атрибута как

site[0].sitename= ...
site[0].reporttitle =...

site[1].sitename= ...
site[1].reporttitle =...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...