internal void Maak_Lijst(DateTime pStartDatum, DateTime pEindDatum, List <PoortViewMandagen> selxMANDAGEN, List <allArbeidsRelaty> _AllArbeidsrelaties, List <PoortViewRegistratiebevoegd> _AllProjectleiders, List <PoortViewProject> _AllProjecten, List <PoortViewBedrijf> _AllBedrijven, List <PoortViewVakman> _AllVakmannen, EvoTools.HeaderFooter LijstGegevens) { // Start met allereerste pagina htmlBody = string.Empty; records = string.Empty; // // Deel periode in x-aantal weken in // // Week van Startdatum begin op maandag List <DateTime> WeekStart = new List <DateTime>(); List <DateTime> WeekEinde = new List <DateTime>(); // Trek DayofWeek van startdatum af om de maandag van die week te bepalen // Let op: Pak de HELE periode, niet slechts de keuze in de UI (Met showall wordt de periode automatisch uitgebreid!) DateTime pAllMinDatum = selxMANDAGEN.Select(x => x.Begintijd).Min(); DateTime pAllMaxDatum = selxMANDAGEN.Select(x => x.Begintijd).Max(); // Bepaal de maandag van de startweek DateTime Maandag = pAllMinDatum; while (Maandag.DayOfWeek != DayOfWeek.Monday) { Maandag = Maandag.AddDays(-1); } //DateTime PeriodeStart = Maandag; do { WeekStart.Add(Maandag); Maandag = Maandag.AddDays(7); WeekEinde.Add(Maandag); } while (Maandag <= pAllMaxDatum);// pEindDatum); //DateTime PeriodeEinde = Maandag; // Weekstart en einde kunnen nooit vóór of na totaalplaatje liggen! // Let daar op, want misschien is niet een gehele week geselecteerd, dan kan dit voorkomen. Pas periode's dan aan! //if (WeekStart[0] < pStartDatum) // WeekStart[0] = pStartDatum; //if (WeekEinde[WeekEinde.Count - 1] > pEindDatum) // WeekEinde[WeekEinde.Count - 1] = pEindDatum.AddDays(1); // Eerst even Totaal alle vakmannen double UrenT = 0; double UrenV = 0; int Vakmannen = 0; int VakmannenT = 0; string[] RegelVars = new string[] { "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }; // Bereken voor elke dienstbetrekking het totaal (per dag!!!) htmlBody = htmlcontainer; DayOfWeek DagvdWeek = new DayOfWeek(); DateTime EenWillekeurigeMaandag = new DateTime(2013, 10, 21).Date; for (int Weekdag = 0; Weekdag <= 6; Weekdag++) { //int DagvdWeek = Weekdag == 0 ? 7 : Weekdag; // Dagvdweek begint nu van 7 (maandag), dan DagvdWeek = EenWillekeurigeMaandag.AddDays(Weekdag).DayOfWeek; // Zo starten we dus bij Maandag en gaan door tot Zondag allArbeidsRelaty Allen = new allArbeidsRelaty(); Allen.ArbeidsRelatieID = 0; Allen.ArbeidsRelatieNaam = "Select ALL"; Allen.SorteerVolgorde = -1; _AllArbeidsrelaties.Add(Allen); //for (int c = -1; c <= 7; c = c + 2) foreach (var Arbeidsrelatie in _AllArbeidsrelaties) { // Uren UrenV = selxMANDAGEN.Where(x => (x.ArbeidsrelatieVW == Arbeidsrelatie.ArbeidsRelatieID || Arbeidsrelatie.ArbeidsRelatieID == -1) && x.Begintijd.DayOfWeek == DagvdWeek ).Sum(x => x.Uren) * 60; UrenV += selxMANDAGEN.Where(x => (x.ArbeidsrelatieVW == Arbeidsrelatie.ArbeidsRelatieID || Arbeidsrelatie.ArbeidsRelatieID == -1) && x.Begintijd.DayOfWeek == DagvdWeek ).Sum(x => x.Minuten); UrenV /= 60.0; // Plaats ureen in HTML voorblad htmlBody = htmlBody.Replace("{" + Weekdag.ToString() + "u" + Arbeidsrelatie.ArbeidsRelatieID.ToString() + "}" , (UrenV == 0) ? "" : UrenV.ToString()); // Dagen Vakmannen = selxMANDAGEN.Where(x => (x.ArbeidsrelatieVW == Arbeidsrelatie.ArbeidsRelatieID || Arbeidsrelatie.ArbeidsRelatieID == -1) && x.Begintijd.DayOfWeek == DagvdWeek ) // Pak liever versch. vakmannen per dag ipv versch aantal vakmnnen //.Select(x => x.Mandag.VakmanId).Distinct().Count(); .Select(x => new { x.VakmanId, x.Begintijd.Date }).Distinct().Count(); //if (Arbeidsrelatie.ArbeidsRelatieID == -1) // RegelVars[Arbeidsrelatie.ArbeidsRelatieID + 2] = (Vakmannen == 0) ? "nvt" : Vakmannen.ToString(); //else // Plaats vakmandagen in HTML voorblad htmlBody = htmlBody.Replace("{" + Weekdag.ToString() + "d" + Arbeidsrelatie.ArbeidsRelatieID.ToString() + "}" , (UrenV == 0) ? "" : Vakmannen.ToString()); // 'Halve vakmannen (vakmannen die op dezelfde dag op meerdere projecten zaten // ??? hoeft hier volegsn mij geen rekening mee gehouden te worden; in het totaalplaatje zit dat al 'verrekend' } } // Zeker weten dat alle mogelijke {xxx} variabelen verwijderd zijn uit voorblad: for (int d = 0; d <= 6; d++) { for (int i = 0; i <= 4; i++) { htmlBody = htmlBody.Replace("{" + d.ToString() + "d" + i.ToString() + "}", ""); htmlBody = htmlBody.Replace("{" + d.ToString() + "u" + i.ToString() + "}", ""); } } // Periode htmlBody = htmlBody.Replace("[%periode%]", string.Format("{0:dd-MM-yyyy} t/m {1:dd-MM-yyyy}", pStartDatum, pEindDatum)); // Periode /* * Okay we hebben het totaal van alles, fijn. * nu dan per week: * (Week-tabblad maken op nieuw pagina met totalen) * per Project * (Project-tabblad maken op nieuwe pagina) * Per Vakman * Per dag van de week * Gewerkte uren van deze valkman * (Regel met alle uren van de week toevoegen aan tabel) * */ // Bepaal voor elke week de totalen string Tabellen = string.Empty; for (int i = 0; i < WeekStart.Count(); i++) { DateTime _StartTijd = WeekStart[i]; DateTime _EindeTijd = WeekEinde[i]; UrenV = 0; UrenT = 0; Array.Clear(RegelVars, 0, 15); var ProjectIDsDezeWeek = selxMANDAGEN.Where(x => x.Begintijd >= _StartTijd && x.Begintijd < _EindeTijd) .OrderBy(x => x.project_NR) .Select(x => x.project_NR) .Distinct().ToList(); // Per project foreach (var DitProject in _AllProjecten.Where(y => ProjectIDsDezeWeek.Contains(y.ProjectNR))) { // Start tabel records = string.Empty; var UitvoerdersIDsOpDitPorject = selxMANDAGEN.Where(x => x.project_NR == DitProject.ProjectNR) .Select(x => x.ProjectleiderId).Distinct().ToList(); var UitvoerdersOpDitPorject = selxMANDAGEN.Where(x => x.ProjectId == DitProject.ProjectNR) .Select(x => x.ProjectleiderId).Distinct().ToList(); string Uitvoerders = string.Empty; foreach (var uitv in _AllProjectleiders.Where(x => UitvoerdersIDsOpDitPorject.Contains(x.ProjectleiderId ?? -1))) { Uitvoerders += (Uitvoerders == string.Empty ? "" : " / "); Uitvoerders += uitv.Gebruikersnaam; } string NieuwProjectTabel = ET.ReplStr(htmltabel, new string[] { DitProject.ProjectNR.ToString(), (from og in _AllBedrijven where og.bedrijf_nr == DitProject.BedrijfVW select og.naam).FirstOrDefault() ?? "<Onbekend>", DitProject.Naam, DitProject.plaats, DitProject.bouw_straat, Uitvoerders, CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(_StartTijd, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday).ToString(), _StartTijd.ToShortDateString() + " t/m " + _EindeTijd.AddDays(-1).ToShortDateString() }, 8); //Per Vakman //foreach (var DezeVakman in selxMANDAGEN.Where(x => // x.Begintijd >= _StartTijd && // x.Begintijd < _EindeTijd && // x.ProjectId == DitProject.ProjectId) // .OrderBy(x => x.ArbeidsrelatieVW) //.ThenBy(x => x.VolledigeNaam) // .Select(x => new { x.VakmanId, x.ArbeidsrelatieVW}).Distinct().ToList()) foreach (var DezeVakman in selxMANDAGEN.Where(x => x.Begintijd >= _StartTijd && x.Begintijd < _EindeTijd && x.ProjectId == DitProject.ProjectId) .Select(x => new { x.VakmanId, x.ArbeidsrelatieVW, _Vakman = _AllVakmannen.Where(y => y.VakmanId == x.VakmanId).FirstOrDefault() }).Distinct().ToList() .OrderBy(x => x.ArbeidsrelatieVW).ThenBy(x => x._Vakman.Naam)) //.ThenBy(x => x.VolledigeNaam) { Array.Clear(RegelVars, 0, 17); string Arbeidsrelatie = _AllArbeidsrelaties.Where(x => x.ArbeidsRelatieID == DezeVakman.ArbeidsrelatieVW).Select(x => x.ArbeidsRelatieNaam).FirstOrDefault(); //PoortViewVakman _Vakman = _AllVakmannen.Where(x => x.VakmanId == DezeVakman.VakmanId).FirstOrDefault(); RegelVars[0] = Arbeidsrelatie + // Moet zijn: Werkelijke waarde (Arbeidsrelatie.ToLower() == "intern" ? " " + DezeVakman.VakmanId.ToString() : ""); RegelVars[1] = DezeVakman._Vakman.Bsn;// _Vakman.Bsn; RegelVars[2] = DezeVakman._Vakman.Naam; // Regelvar[3] geeft uren van Maandag... ect tm regelvar[9] (zondag) // Bepaal startpositie afhankelijk van de dag (if maandag, then startpositie = 3) int regelDagvdWeekPositie = 2 + ( ((int)_StartTijd.DayOfWeek == 0) ? 7 : (int)_StartTijd.DayOfWeek // .Dayofweek loopt van 0 (zonadg) tot Zaterdag (6) ); // MSZ: 2014-1-22 Hey dit is fout, het moet < zijn en niet <= //for (DateTime dag = _StartTijd.Date; dag <= _EindeTijd; dag = dag.AddDays(1)) for (DateTime dag = _StartTijd.Date; dag < _EindeTijd; dag = dag.AddDays(1)) { string project = DitProject.Naam; UrenV = selxMANDAGEN.Where(x => x.Begintijd >= dag && x.Begintijd < dag.AddDays(1) && x.Begintijd.Date == dag && x.ProjectId == DitProject.ProjectId && x.VakmanId == DezeVakman.VakmanId) .Select(x => x.Uren * 60 + x.Minuten).Sum() / 60.0; //UrenV += selxMANDAGEN.Where(x => // x.Mandag.Begintijd >= dag && // x.Mandag.Begintijd < dag.AddDays(1) && // x.Mandag.Begintijd.Date == dag && // x.Mandag.ProjectId == DitProject.Project.MandagenReg.ProjectId && // x.Mandag.VakmanId == DezeVakman.Vakman.MandagenReg.VakmanId) // .Select(x => x.Mandag.Minuten).Sum(); //UrenV /= 60.0; RegelVars[regelDagvdWeekPositie++] = (UrenV == 0) ? "" : UrenV.ToString(); } // Next Dag van de Week // Voeg nieuwe tabel-regel toe records += ET.ReplStr(htmltabelrow, RegelVars, 17); } // Next Vakman NieuwProjectTabel = NieuwProjectTabel.Replace("[%Regels%]", records); Tabellen += NieuwProjectTabel; } // Next Project } // Next Week // Eddy Ready Go. // We hebben nu feitelijk alle regels gevuld, laten we de HTMl pagina opmaken! // NIEUWE METHODE: string HtmLtOTAAL = htmlBody.Replace("[%Overzicht%]", Tabellen); ET.MakePdf(HtmLtOTAAL, LijstGegevens, true); return; // // Open Evo gebeuren // PdfConverter pdfConverter = new PdfConverter(); pdfConverter.LicenseKey = "B4mYiJubiJiInIaYiJuZhpmahpGRkZE="; pdfConverter.LicenseKey = "EpyMnY6OnYyPjJ2Jk42djoyTjI+ThISEhA=="; // Linker en rechter-marge instellen want het document was net te breed pdfConverter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Landscape; pdfConverter.PdfDocumentOptions.LeftMargin = 10; pdfConverter.PdfDocumentOptions.RightMargin = 10; pdfConverter.PdfDocumentOptions.TopMargin = 10; pdfConverter.PdfDocumentOptions.BottomMargin = 10; pdfConverter.PdfDocumentOptions.FitWidth = true; // Default pdfConverter.PdfDocumentOptions.AutoSizePdfPage = true; //Default ET.AddHeaderElements(pdfConverter); // HTML Totaalplaatje genereren //string fullHtml = htmlcontainer.Replace("[%Overzicht%]", htmlBody); string fullHtml = htmlBody.Replace("[%Overzicht%]", Tabellen); // HTML: PDF creeren string outFilePath = System.IO.Path.Combine(xHtmlFolder, "ConvertHtmlString-" + "-" + DateTime.Now.Month + "-" + DateTime.Now.Day + "-" + DateTime.Now.Hour + "-" + DateTime.Now.Minute + "-" + DateTime.Now.Second + "-" + DateTime.Now.Millisecond + ".pdf"); pdfConverter.SavePdfFromHtmlStringToFile(fullHtml, outFilePath); System.Diagnostics.Process.Start(outFilePath); }
internal void Maak_Lijst(DateTime pStartDatum, DateTime pEindDatum, List <PoortViewMandagen> selxMANDAGEN, List <allArbeidsRelaty> _AllArbeidsrelaties, List <PoortViewRegistratiebevoegd> _AllProjectleiders, List <PoortViewProject> _AllProjecten, List <PoortViewBedrijf> _AllBedrijven, List <PoortViewVakman> _AllVakmannen, EvoTools.HeaderFooter LijstGegevens, bool _PlusInfo) { string tabellen = string.Empty; string tabellenPlus = string.Empty; // Bepaal start-maandag // Let op: Pak de HELE periode, niet slechts de keuze in de UI (Met showall wordt de periode automatisch uitgebreid!) DateTime pAllMinDatum = selxMANDAGEN.Select(x => x.Begintijd.Date).Min(); if (pStartDatum < pAllMinDatum) { pAllMinDatum = pStartDatum; } DateTime pAllMaxDatum = selxMANDAGEN.Select(x => x.Begintijd.Date).Max(); if (pEindDatum > pAllMaxDatum) { pAllMaxDatum = pEindDatum; } // Bepaal de maandag van de startweek //DateTime Maandag = pAllMinDatum; // We willen gewoon alle weken zien, ook de weken voorafgaande aan de eerste week met echte data dus pak pStartdatum DateTime Maandag = pAllMinDatum; while (Maandag.DayOfWeek != DayOfWeek.Monday) { Maandag = Maandag.AddDays(-1); } /* * Verzamel nu per project, per week de nodige data * */ // Per Project string tabel = string.Empty; string tabelPlus = string.Empty; records = string.Empty; var ProjectIDs = selxMANDAGEN .OrderBy(x => x.project_NR) .Select(x => x.project_NR) .Distinct().ToList(); bool FirstPage = true; foreach (var DitProject in _AllProjecten.Where(y => ProjectIDs.Contains(y.ProjectNR))) { try { // Bepaal weken voor dit project Bepaal_Projectweken(DitProject.ProjectId, Maandag, selxMANDAGEN, pAllMaxDatum); // Bereken nu alvast totaal aantal detailregels voor dit project DetailregelsLeft = selxMANDAGEN.Where(x => x.ProjectId == DitProject.ProjectId) .Select(x => new { VK = x.VakmanId, Week = ET.weeknummerNEW(x.Begintijd, false) }).Distinct().ToList().Count(); // Algemene Projectgegevens (Nieuwe tabel) tabel = TabelProject; tabelPlus = TabelVakman; VakmanNr = 0; if (FirstPage) { tabel = tabel.Replace("TableOnNewPage", "TableOnSamePage"); FirstPage = false; } tabel = tabel.Replace("{Rapportnaam}", LijstGegevens.LijstNaam); tabel = tabel.Replace("{Bestandscode}", LijstGegevens.LijstCode); string WeekS = ET.weeknummerNEW(pAllMinDatum, true); string WeekE = ET.weeknummerNEW(pAllMaxDatum, true); tabel = tabel.Replace("{Week}", WeekS + (WeekS == WeekE ? "" : " tot en met " + WeekE)); tabel = tabel.Replace("{Periode}", string.Format("{0} - {1}", pAllMinDatum.ToLongDateString(), pAllMaxDatum.ToLongDateString())); tabel = tabel.Replace("{Projectnummer}", DitProject.ProjectNR.ToString()); string __Opdrachtgever = (from og in _AllBedrijven where og.bedrijf_nr == DitProject.BedrijfVW select og.naam).FirstOrDefault() ?? "{Onbekend}"; // Opdrachtger / Aannemer (aannemer = 'Select AannwmerVW, anders gelijk aan opdrachtgever) tabel = tabel.Replace("{Opdrachtgever}", __Opdrachtgever); if (DitProject.AannemerVW == DitProject.BedrijfVW || DitProject.AannemerVW == null) { tabel = tabel.Replace("{Aannemer}", __Opdrachtgever); } else { tabel = tabel.Replace("{Aannemer}", (from og in _AllBedrijven where og.bedrijf_nr == DitProject.AannemerVW select og.naam).FirstOrDefault() ?? "{Onbekend}"); } tabel = tabel.Replace("{Onderaannemer}", "Tegelzettersbedrijf J.H.J Zeebregts BV"); // Voorlopig gewoon altijd 'Zeebregts', tzt nemen we dit in de database op en wordt et variabel tabel = tabel.Replace("{Projectnaam}", DitProject.Naam); tabel = tabel.Replace("{Projectlocatie}", DitProject.plaats); tabel = tabel.Replace("{Projectstraat}", DitProject.bouw_straat); // Voeg handtekening toe (Als ie niet bestaat vervang 'm dan door standaard vakman 0-handtekening string pathhandtekeningPL = ("0000000000" + DitProject.ProjectleiderId.ToString()); pathhandtekeningPL = pathhandtekeningPL.Substring(pathhandtekeningPL.Length - 6); pathhandtekeningPL = pathhandtekening.Replace("000000", pathhandtekeningPL).Replace("handtekening0", "handtekening" + DitProject.ProjectleiderId.ToString()); // Het checken van het handtekeningenbestand blijft steeds hangen en levert niks op. // Laat maar zitten dus die check, ik plaats wel voor alle mogelijk vakmannen standaard een leeg handtekeningenbestand //System.Net.HttpWebRequest request = null; //System.Net.HttpWebResponse response = null; //request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(pathhandtekeningPL); //request.Timeout = 30000; //try //{ // response = (System.Net.HttpWebResponse)request.GetResponse(); tabel = tabel.Replace("{handtekening}", pathhandtekeningPL); //} //catch //{ // tabel = tabel.Replace("{handtekening}", pathhandtekening); //} var ss = _AllProjectleiders.Where(x => x.ProjectleiderId == DitProject.ProjectleiderId).Select(x => x.Gebruikersnaam).FirstOrDefault(); tabel = tabel.Replace("{ondertekenaar}", ss); tabel = tabel.Replace("{datum}", DateTime.Now.Date.ToString("d-M-yyyy")); var UitvoerdersIDsOpDitPorject = selxMANDAGEN.Where(x => x.project_NR == DitProject.ProjectNR) .Select(x => x.ProjectleiderId).Distinct().ToList(); var UitvoerdersOpDitPorject = selxMANDAGEN.Where(x => x.ProjectId == DitProject.ProjectNR) .Select(x => x.ProjectleiderId).Distinct().ToList(); string Uitvoerders = string.Empty; foreach (var uitv in _AllProjectleiders.Where(x => UitvoerdersIDsOpDitPorject.Contains(x.ProjectleiderId ?? -1))) { Uitvoerders += (Uitvoerders == string.Empty ? "" : " / "); Uitvoerders += uitv.Gebruikersnaam; } //tabel = tabel.Replace("{Projectleider}", Uitvoerders); var Opdrachtgever = _AllBedrijven.Where(x => x.bedrijf_nr == DitProject.BedrijfVW).FirstOrDefault(); tabel = tabel.Replace("{Opdrachtgever}", Opdrachtgever.naam);; // ProjectTotaal hele periode (en gedetailleerd per vakman) records = string.Empty; recordsVakman = string.Empty; if (_PlusInfo) { BTotaal = 0; GTotaal = 0; foreach (var DezeVakman in selxMANDAGEN.Where(x => x.ProjectId == DitProject.ProjectId) .Select(x => new // Let op: // Neem Arbeidsrelatie mee in de distinct zodat vakman als aparte vakman wordt gezien // indien wijziging van arbeidsrelatie gedurende deze periode { x.VakmanId, _Vakman = _AllVakmannen.Where(y => y.VakmanId == x.VakmanId).FirstOrDefault(), _Relatie = x.ArbeidsrelatieVW, _RelatieNaam = (x.KetenpartnerVW == 1 ? _AllArbeidsrelaties.Where(z => z.ArbeidsRelatieID == x.ArbeidsrelatieVW).Select(z => z.ArbeidsRelatieNaam).FirstOrDefault() : "Extern") }).Distinct().ToList() .OrderBy(x => x._Vakman.Naam)) { int VakmanFouten = VakmannenWithNoBedrijf.Length + VakmannenWithNoBsn.Length + VakmannenWithNoGeboortedatum.Length + VakmannenWithNoID.Length + VakmannenWithVerlopenID.Length; recordsVakman += Vul_VakmanRegel(DezeVakman._RelatieNaam, DezeVakman._Vakman, DezeVakman._Relatie, _AllBedrijven, selxMANDAGEN.Where(x => x.ProjectId == DitProject.ProjectId && x.VakmanId == DezeVakman.VakmanId).ToList()); // Als een gegeven van een vakman niet bekend was is die bij vul_vakmanRegel() toegevoegd aan "VakmannenWithNo..., // dus dan is de totale lengte van dat alles groter dan daarvoor if (VakmanFouten < VakmannenWithNoBedrijf.Length + VakmannenWithNoBsn.Length + VakmannenWithNoGeboortedatum.Length + VakmannenWithNoID.Length + VakmannenWithVerlopenID.Length && !ProjectenWithVakmanNulls.Contains(DitProject.Naam)) { ProjectenWithVakmanNulls += (ProjectenWithVakmanNulls.Length > 1 ? ", " : "") + DitProject.Naam + " (" + DitProject.ProjectNR + ")"; } } tabel = VerwijderLabel(tabel, "vakmanregel"); tabel = tabel.Replace("<!-- /VAKMANREGEL -->", recordsVakman); tabel = tabel.Replace("{T}", Uurformaat(BTotaal, true)); tabel = tabel.Replace("{G}", Uurformaat(GTotaal, true)); } else { tabel = VerwijderLabel(tabel, "VakmanTabel"); tabel = VerwijderLabel(tabel, "Verklaring"); } // NIEUW voer totaalperiode-overzicht alleen uit als de periode meer dan twee weken beslaat. // Anders heeft totaaltelling zo weing nut! DateTime mindag = selxMANDAGEN.Where(x => x.ProjectId == DitProject.ProjectId).Select(x => x.Begintijd).Min(); DateTime maxdag = selxMANDAGEN.Where(x => x.ProjectId == DitProject.ProjectId).Select(x => x.Begintijd).Max(); if (ET.weeknummerNEW(mindag, true) != ET.weeknummerNEW(maxdag, true)) { records += vul_TotaalRegel(selxMANDAGEN, DitProject); // En nu uitgesplitst per vakman foreach (var DezeVakman in selxMANDAGEN.Where(x => x.ProjectId == DitProject.ProjectId) .Select(x => new { x.VakmanId, _Vakman = _AllVakmannen.Where(y => y.VakmanId == x.VakmanId).FirstOrDefault(), }).Distinct().ToList() .OrderBy(x => x._Vakman.Naam)) { records += Vul_DetailRegel(selxMANDAGEN, DitProject, DezeVakman._Vakman, ref tabel); } tabel = tabel.Replace("{T}", Uurformaat(BTotaal + GTotaal)); //tabel = tabel.Replace("{B}", Uurformaat(BTotaal)); if (GTotaal == 0) { tabel = tabel.Replace("{G}", "0:00"); } else { tabel = tabel.Replace("{G}", Uurformaat(GTotaal)); } } // ProjectTotaal per week (en detailregels uitgesplitst per Vakman) for (int i = 0; i < WeekStart.Count(); i++) { DateTime _StartTijd = WeekStart[i]; DateTime _EindeTijd = WeekEinde[i]; records += Vul_TotaalRegel(selxMANDAGEN, DitProject, _StartTijd, _EindeTijd); // En nu uitgesplitst per vakman foreach (var DezeVakman in selxMANDAGEN.Where(x => x.Begintijd >= _StartTijd && x.Begintijd < _EindeTijd && x.ProjectId == DitProject.ProjectId) .Select(x => new { x.VakmanId, _Vakman = _AllVakmannen.Where(y => y.VakmanId == x.VakmanId).FirstOrDefault(), }).Distinct().ToList() .OrderBy(x => x._Vakman.Naam)) { records += Vul_DetailRegel(selxMANDAGEN, DitProject, DezeVakman._Vakman, _StartTijd, _EindeTijd, ref tabel); } } // Week tabel = tabel.Replace("<!-- /TABELREGELS -->", records); tabellen += tabel; } // Project catch (Exception e) { string foutmelding = string.Format("Fout geconstateerd! Programma was bezig met verwerken van project={0}. Foutmelding:{1}", DitProject.Naam, e); MessageBox.Show(foutmelding); return; } } // Geef eerste een melding als er vakmangegevens ontbraken string melding = string.Empty; if (VakmannenWithNoBedrijf.Length > 1) { melding += "\nBedrijfsnaam van " + VakmannenWithNoBedrijf + " niet bekend"; } if (VakmannenWithNoBsn.Length > 1) { melding += "\nBsn nr van " + VakmannenWithNoBsn + " niet bekend"; } if (VakmannenWithNoGeboortedatum.Length > 1) { melding += "\nGeboortedatum " + VakmannenWithNoGeboortedatum + " niet bekend"; } if (VakmannenWithNoID.Length > 1) { melding += "\nPaspoort nr van " + VakmannenWithNoID + " niet bekend of niet volledig"; } if (VakmannenWithVerlopenID.Length > 1) { melding += string.Format("\nGeldigheidsdatum identiteitsbewijs is verlopen van {0}", VakmannenWithVerlopenID); } if (melding.Length > 1) { MessageBox.Show("Sommige vakmangegevens zijn niet bekend: \n\n" + melding + "\n\n Zie project(en): " + ProjectenWithVakmanNulls); } // Maak PDF aan volgens NIEUWE METHODE string test = HTMLTotaal.Replace("<!-- /PROJECTTABEL -->", tabellen); ET.Log(test); ET.MakePdf(test, LijstGegevens, htmlfooter, false, 0); }
internal void Maak_Lijst(DateTime pStartDatum, DateTime pEindDatum, List <PoortViewMandagen> selxMANDAGEN, List <PoortViewVakman> Vakmannen, List <allContract> Contracten, List <string> _opties, DateTime UI_Startdatum, DateTime UI_Einddatum, EvoTools.HeaderFooter LijstGegevens) { // Start en Einddata van projecten var _VanTotDatums = selxMANDAGEN.Select(x => new { x.VakmanId, Datum = x.Begintijd }).Distinct(); // // Deel periode in x-aantal weken in // // Week van Startdatum begin op maandag List <DateTime> WeekStart = new List <DateTime>(); List <DateTime> WeekEinde = new List <DateTime>(); // Trek DayofWeek van startdatum af om de maandag van die week te bepalen DateTime Maandag = pStartDatum.AddDays((1 - ((int)pStartDatum.DayOfWeek == 0 ? 7 : (int)pStartDatum.DayOfWeek))); DateTime PeriodeStart = Maandag; int StartWeekNr = new GregorianCalendar(GregorianCalendarTypes.Localized).GetWeekOfYear(PeriodeStart, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); do { if (Maandag < pStartDatum) { WeekStart.Add(pStartDatum); } else { WeekStart.Add(Maandag); } Maandag = Maandag.AddDays(7); if (Maandag > pEindDatum) { WeekEinde.Add(pEindDatum.AddDays(1)); } else { WeekEinde.Add(Maandag); } } while (Maandag <= pEindDatum); DateTime PeriodeEinde = Maandag; double DagenT, UrenT; double DagenD = 0; double UrenD = 0; // Bepaal aantal bij elkaar te houden regels int RowSpan = ET.GetRowSpan(htmlTabelTotaalRegel); int Rows; // **************************************************************************************************** // // Start opbouwen van de totaalregels // Per 'DO' // Bereken het totaal van de betreffende periode; // Berken per Vakman het totaal van de betreffende periode // // We beginnen met Totaalperiode van periodestart tot periodeeind // vlak voor de 'WHILE' starten we met de 1e weekperiode te selecteren, daarna alle andere weekperiodes // // **************************************************************************************************** // Startsetting zodat we de gehele periode pakken DateTime SelectieStart = PeriodeStart; DateTime SelectieEinde = PeriodeEinde; string regelSamenvatting = "Totaal"; // WeekIndex gebruiken we pas nadat de 1e lus is doorlopen int WeekIndex = 0; string mindag = "", maxdag = ""; bool DIKKESTREEP = false; do // Start met totaal-periode; Neem daarna alle weekperiodes { UrenT = 0; DagenT = 0; mindag = ""; maxdag = ""; string TotaalRegel = htmlTabelTotaalRegel; // Voeg extra dikke lijn toe na tonen van totaalgegevens (Alleen eerste keer!) if (DIKKESTREEP) { TotaalRegel = TotaalRegel.Replace("<!--LINE-->", "<tr><td colspan=\"14\" style=\"width:100%; border-bottom:1px solid black\"></td></tr>"); DIKKESTREEP = false; } // Bereken voor alle 3 mogelijkheden het totaal over deze periode foreach (int prod in new List <int> { 1, 2 }) // 1 = Intern, 2 = Extern { foreach (int contr in new List <int> { 1, 2 }) //1 = Per uur, 2 = Per meter { if (prod == 1 && contr == 2) { break; // Intern, Per meter doet niet mee } UrenD = (selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.ProductieVW == prod && x.ContractVW == contr ).Sum(x => x.Uren * 60 + x.Minuten)) / 60.0; DagenD = selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.ProductieVW == prod && x.ContractVW == contr ).Select(y => new { y.VakmanId, y.Begintijd.Date }).Distinct().Count(); UrenT += UrenD; DagenT += DagenD; TotaalRegel = TotaalRegel.Replace("{pcu" + prod.ToString() + contr.ToString() + "}", DagUurToString(UrenD)); TotaalRegel = TotaalRegel.Replace("{pcd" + prod.ToString() + contr.ToString() + "}", DagUurToString(DagenD)); } // Next contr } // Next prod TotaalRegel = TotaalRegel.Replace("{omschrijving}", regelSamenvatting); TotaalRegel = TotaalRegel.Replace("{tu}", DagUurToString(UrenT)); TotaalRegel = TotaalRegel.Replace("{td}", DagUurToString(DagenT)); // min en maxdatum if (UrenT > 0) { mindag = selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde).Select(x => x.Begintijd).Min().ToString("d-M-yyy"); maxdag = selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde).Select(x => x.Begintijd).Max().ToString("d-M-yyy"); } TotaalRegel = TotaalRegel.Replace("{van}", mindag); TotaalRegel = TotaalRegel.Replace("{tot}", maxdag); // loonkosten Intern var KostPrijs = Convert.ToDouble( selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.ProductieVW == 1 && x.ContractVW == 1)// Moet 'Per uur' zijn anders is het onzin) .Sum(x => x.Loonkosten)); TotaalRegel = TotaalRegel.Replace("{KPi}", ET.EuroPresentatie(KostPrijs, 2)); //Loonkosten Extern KostPrijs = Convert.ToDouble( selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.ProductieVW == 2 && x.ContractVW == 1)// Moet 'Per uur' zijn anders is het onzin .Sum(x => x.Loonkosten)); TotaalRegel = TotaalRegel.Replace("{KPe}", ET.EuroPresentatie(KostPrijs, 2)); // Regel compleet. Row toevoegen aan tabelregels records += TotaalRegel; Rows = 2; // Bereken nu PER VAKMAN voor elke dienstbetrekking het totaal over deze periode var _vakmanIDs = selxMANDAGEN .Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde) .OrderBy(x => x.VakmanId) .Select(x => x.VakmanId).Distinct().ToList(); var _VakmanSelecties = selxMANDAGEN .Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde) .OrderBy(x => x.VakmanId) .Select(x => new { VID = x.VakmanId , Productie = x.ProductieVW , Contract = x.ContractVW , Vakman = Vakmannen.Where(z => z.VakmanId == x.VakmanId).FirstOrDefault() }).Distinct().ToList(); var _Vakmannen = Vakmannen.Where(x => _vakmanIDs.Contains(x.VakmanId)); int regelnummer = 0; foreach (var Vakman in _Vakmannen .OrderBy(x => x.Naam) ) { UrenT = 0; DagenT = 0; TotaalRegel = htmlTabelSubRegel; // Steeds per 3 regels van kleur wisselen TotaalRegel = htmlTabelSubRegel.Replace("ProjectRegel", "ProjectRegelColor" + ((regelnummer++ % 6) / 3).ToString()); for (int prod = 1; prod <= 2; prod++) { for (int contr = 1; contr <= 2; contr++) { if (prod == 1 && contr == 2) // Intern per meter mag niet voorkomen! { break; } UrenD = (selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.VakmanId == Vakman.VakmanId && x.ProductieVW == prod && x.ContractVW == contr ).Sum(x => x.Uren * 60 + x.Minuten)) / 60.0; UrenT += UrenD; DagenD = selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.VakmanId == Vakman.VakmanId && x.ProductieVW == prod && x.ContractVW == contr ).Select(y => new { y.VakmanId, y.Begintijd.Date }).Distinct().Count(); DagenT += DagenD; // Totaal van dienstbetrekking invullen TotaalRegel = TotaalRegel.Replace("{pcu" + prod.ToString() + contr.ToString() + "}", DagUurToString(UrenD)); TotaalRegel = TotaalRegel.Replace("{pcd" + prod.ToString() + contr.ToString() + "}", DagUurToString(DagenD)); } } if (Vakman.Naam == null) { TotaalRegel = TotaalRegel.Replace("{omschrijving}", "Onbekende vakman met ID = " + Vakman.VakmanId.ToString()); } else { TotaalRegel = TotaalRegel.Replace("{omschrijving}", Vakman.Naam); } TotaalRegel = TotaalRegel.Replace("{tu}", DagUurToString(UrenT)); TotaalRegel = TotaalRegel.Replace("{td}", DagUurToString(DagenT)); // loonkosten Intern KostPrijs = Convert.ToDouble( selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.VakmanId == Vakman.VakmanId && x.ProductieVW == 1 && x.ContractVW == 1 // Moet 'Per uur' zijn anders is het onzin ) .Sum(x => x.Loonkosten)); TotaalRegel = TotaalRegel.Replace("{KPi}", ET.EuroPresentatie(KostPrijs, 2)); // Loonkosten Extern (Let op: Vakman kan gedeelte van de tijd zowel intern als extern geweest zijn KostPrijs = Convert.ToDouble( selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.VakmanId == Vakman.VakmanId && x.ProductieVW == 2 && x.ContractVW == 1 // Moet 'Per uur' zijn anders is het onzin ) .Sum(x => x.Loonkosten)); TotaalRegel = TotaalRegel.Replace("{KPe}", ET.EuroPresentatie(KostPrijs, 2)); // Alle waarden zijn gevuld; Voeg regel toe aan HTML pagina // (Als er geen uren staan voor deze vakman, dan ook geen regel aan besteden dus alleen tonen als er uren gemaakt zijn) if (UrenT > 0) { // min en maxdatum if (UrenT > 0) { mindag = selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.VakmanId == Vakman.VakmanId).Select(x => x.Begintijd).Min().ToString("d-M-yyy"); maxdag = selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.VakmanId == Vakman.VakmanId).Select(x => x.Begintijd).Max().ToString("d-M-yyy"); } TotaalRegel = TotaalRegel.Replace("{van}", mindag); TotaalRegel = TotaalRegel.Replace("{tot}", maxdag); records += TotaalRegel; Rows++; } } // Nodig ivm eerste paar subregels bij kopregel op één pagina houden: // Pas Rowspan aan indien er minder subregels bij elkaar te houden zijn dan in de rowspan is aangegeven if (Rows < RowSpan) { records = ET.SetRowSpan(records, RowSpan, Rows); } // bij de 1e lus was de periode ingesteld op totaalperiode, vanaf nu pakken we de weekperiodes if (WeekIndex < WeekStart.Count()) { SelectieStart = WeekStart[WeekIndex]; SelectieEinde = WeekEinde[WeekIndex]; if (regelSamenvatting.ToLower().Contains("totaal")) { DIKKESTREEP = true; } regelSamenvatting = "Week " + ET.Weeknummer(WeekStart[WeekIndex], true); } } while (++WeekIndex <= WeekStart.Count()); // Eco PDF eenmaken, vullen en tonen string FilledTable = htmlTabel.Replace("{tabelregels}", records); ET.MakePdf(FilledTable, LijstGegevens); }
internal void Maak_Lijst(DateTime pStartDatum, DateTime pEindDatum, List <PoortViewMandagen> selxMANDAGEN, List <PoortViewRegistratiebevoegd> _gebruikers, List <allContract> Contracten, EvoTools.HeaderFooter LijstGegevens) { // Bepaal aantal bij elkaar te houden regels int RowSpan = ET.GetRowSpan(htmlTabelTotaalRegel); int Rows; ET.Log("Start van Maak Lijst 8b"); // // Deel periode in x-aantal weken in // // Week van Startdatum begin op maandag List <DateTime> WeekStart = new List <DateTime>(); List <DateTime> WeekEinde = new List <DateTime>(); // Trek DayofWeek van startdatum af om de maandag van die week te bepalen DateTime Maandag = pStartDatum.AddDays((1 - ((int)pStartDatum.DayOfWeek == 0 ? 7 : (int)pStartDatum.DayOfWeek))); DateTime PeriodeStart = Maandag; int StartWeekNr = new GregorianCalendar(GregorianCalendarTypes.Localized).GetWeekOfYear(PeriodeStart, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); do { // Voorlopig nog even geen 'ShowAll', dus WeekStart niet eerder dan startdatum if (Maandag < pStartDatum) { WeekStart.Add(pStartDatum); } else { WeekStart.Add(Maandag); } Maandag = Maandag.AddDays(7); // Voorlopig nog even geen 'ShowAll', dus WeekEinde niet later dan einddatum if (Maandag > pEindDatum) { WeekEinde.Add(pEindDatum.AddDays(1)); } else { WeekEinde.Add(Maandag); } } while (Maandag <= pEindDatum); DateTime PeriodeEinde = Maandag; // Okay we doen het nu helemaal f*****g anders! // Bereken per Vakman hoeveel uren hij op die dag heeft gemaakt, hoeveel uren hij op voor een project heeft gemaakt // en bepaal het dagdeel (percentage) wat dan kan worden toegekend aan dat project var VakmanUrenPerDag = selxMANDAGEN .GroupBy(a => new { Datum = a.Begintijd.Date, a.VakmanId }) .Select(a => new { a.Key.Datum, a.Key.VakmanId, Uren = a.Sum(x => x.Uren * 60 + x.Minuten) / 60.0, Projecten = a.Count() }) .OrderBy(a => a.Datum).ThenBy(a => a.VakmanId) .ToList(); var VakmanUrenPerDagPerProjectLeiderPerProdContr = selxMANDAGEN .GroupBy(a => new { Datum = a.Begintijd.Date, a.VakmanId, a.ProjectleiderId, a.ProductieVW, a.ContractVW }) .Select(a => new { a.Key.ProjectleiderId, a.Key.Datum, a.Key.VakmanId, a.Key.ProductieVW, a.Key.ContractVW, Uren = a.Sum(x => x.Uren * 60 + x.Minuten) / 60.0 }) //.OrderBy(a => a.Name2.Datum ) .ToList(); var VakmanDagdelenPerDagPerProjectPerProdContr = (from a in VakmanUrenPerDagPerProjectLeiderPerProdContr join b in VakmanUrenPerDag on new { a.Datum, a.VakmanId } equals new { b.Datum, b.VakmanId } select new { a, UrenAlleProjecten = b.Uren, DagDeel = a.Uren / b.Uren }) .OrderBy(x => x.a.Datum) .ToList() .OrderBy(x => x.a.Datum); // Eerst even Totaal alle vakmannen tesamen //List<char> Dienstbetrekkingscode = new List<int>("1,3,U,A".Split(',').Select(n => char.Parse(n)).ToList()); double DagenT, UrenT; double DagenD = 0; double UrenD = 0; // **************************************************************************************************** // // Start opbouwen van de totaalregels // Per 'DO' // Bereken het totaal van de betreffende periode; // Berken per vakman het totaal van de betreffende periode // // We beginnen met Totallperiode van periodestart tot periodeeind // vlak voor de 'WHILE' starten we met de 1e weekperiode te selecteren, daarna alle andere weekperiodes // // **************************************************************************************************** // Startsetting zodat we de gehele periode pakken DateTime SelectieStart = PeriodeStart; DateTime SelectieEinde = PeriodeEinde; string regelSamenvatting = "Totaal"; // WeekIndex gebruiken we pas nadat de 1e lus is doorlopen int WeekIndex = 0; string mindag = "", maxdag = ""; bool DIKKESTREEP = false; do // Start met totaal-periode; Neem daarna alle weekperiodes { UrenT = 0; DagenT = 0; // Bereken voor elke dienstbetrekking het totaal over deze periode //for (int c = -1; c <= 7; c += 2) var _AllContracten = (Contracten.Select(x => x.ContractID).ToList()).OrderBy(x => x); var _AllProducties = new List <int> { 1, 2 }; string TotaalRegel = htmlTabelTotaalRegel; // Voeg extra dikke lijn toe na tonen van totaalgegevens (Alleen eerste keer!) if (DIKKESTREEP) { TotaalRegel = TotaalRegel.Replace("<!--LINE-->", "<tr><td colspan=\"14\" style=\"width:100%; border-bottom:1px solid black\"></td></tr>"); DIKKESTREEP = false; } foreach (int prod in _AllProducties) { foreach (int contr in _AllContracten) { if (prod == 1 && contr == 2) { break; // Intern, Per meter komt niet voor (wordt op gecontroleerd bij de invoer) } // Uren UrenD = selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && (x.ContractVW == contr && x.ProductieVW == prod) ).Sum(x => x.Uren) * 60; UrenD += selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && (x.ContractVW == contr && x.ProductieVW == prod) ).Sum(x => x.Minuten); UrenD /= 60.0; UrenT += UrenD; // Dagen DagenD = selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && (x.ContractVW == contr && x.ProductieVW == prod) ).Select(y => new { y.VakmanId, y.Begintijd.Date }).Distinct().Count(); DagenT += DagenD; TotaalRegel = TotaalRegel.Replace("{pcu" + prod.ToString() + contr.ToString() + "}", DagUurToString(UrenD)); TotaalRegel = TotaalRegel.Replace("{pcd" + prod.ToString() + contr.ToString() + "}", DagUurToString(DagenD)); } // NBext C } // Next P // Regel verder invullen --- //---------------------- --- // min en maxdatum if (UrenD > 0) { mindag = selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde).Select(x => x.Begintijd).Min().ToString("d-M-yyy"); maxdag = selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde).Select(x => x.Begintijd).Max().ToString("d-M-yyy"); } TotaalRegel = TotaalRegel.Replace("{van}", mindag); TotaalRegel = TotaalRegel.Replace("{tot}", maxdag); // Omschrijving en Totaaluren TotaalRegel = TotaalRegel.Replace("{omschrijving}", regelSamenvatting); TotaalRegel = TotaalRegel.Replace("{tu}", DagUurToString(UrenT)); TotaalRegel = TotaalRegel.Replace("{td}", DagUurToString(DagenT)); // Loonkosten var LK = Convert.ToDouble (selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.ProductieVW == 1 && x.ContractVW == 1 // Moet 'Per uur' zijn anders is het onzin ).Sum(x => x.Loonkosten)); TotaalRegel = TotaalRegel.Replace("{KPi}", ET.EuroPresentatie(LK, 2)); LK = Convert.ToDouble (selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.ProductieVW == 2 && x.ContractVW == 1 // Moet 'Per uur' zijn anders is het onzin ).Sum(x => x.Loonkosten)); TotaalRegel = TotaalRegel.Replace("{KPe}", ET.EuroPresentatie(LK, 2)); //records += "<b>" + ET.HtmlFormat(htmlrecord, RegelVars) + "</b>"; records += TotaalRegel; Rows = 2; // Bereken nu PER PROJECTLEIDER voor elke dienstbetrekking het totaal over deze periode List <int> _ProjectleiderIDs = selxMANDAGEN.Select(x => x.ProjectleiderId).Distinct().ToList(); var _Projectleiders = _gebruikers.Where(x => _ProjectleiderIDs.Contains(x.ProjectleiderId ?? 0)).Select(x => new { x.ProjectleiderId, x.Gebruikersnaam }).Distinct().ToList(); int regelnummer = 0; var projectleiders = selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde).Select(x => x.ProjectleiderId).Distinct(); foreach (var Projectleider in _Projectleiders.Where(x => projectleiders.Contains(x.ProjectleiderId ?? 0)) .OrderBy(x => x.Gebruikersnaam)) { UrenT = 0; DagenT = 0; mindag = ""; maxdag = ""; // Steeds per 3 regels van kleur wisselen TotaalRegel = htmlTabelSubRegel.Replace("ProjectRegel", "ProjectRegelColor" + ((regelnummer++ % 6) / 3).ToString()); foreach (int prod in _AllProducties) { foreach (int contr in _AllContracten) { if (prod == 1 && contr == 2) { break; // Intern, Per meter doen we niet aan } // Uren UrenD = selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.ProjectleiderId == Projectleider.ProjectleiderId && x.ContractVW == contr && x.ProductieVW == prod ).Sum(x => x.Uren) * 60; UrenD += selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.ProjectleiderId == Projectleider.ProjectleiderId && x.ContractVW == contr && x.ProductieVW == prod ).Sum(x => x.Minuten); UrenD /= 60.0; UrenT += UrenD; // Dagen (Als percentage 'Dagdeel') DagenD = VakmanDagdelenPerDagPerProjectPerProdContr .Where(x => x.a.Datum >= SelectieStart && x.a.Datum < SelectieEinde && x.a.ProjectleiderId == Projectleider.ProjectleiderId && x.a.ContractVW == contr && x.a.ProductieVW == prod) .Select(x => x.DagDeel).Sum(); DagenT += DagenD; // Totaal van geselecteeerd Productie/Contract invullen TotaalRegel = TotaalRegel.Replace("{pcu" + prod.ToString() + contr.ToString() + "}", DagUurToString(UrenD)); TotaalRegel = TotaalRegel.Replace("{pcd" + prod.ToString() + contr.ToString() + "}", DagUurToString(DagenD)); } // Next contract } // Next Productie TotaalRegel = TotaalRegel.Replace("{omschrijving}", Projectleider.Gebruikersnaam ); TotaalRegel = TotaalRegel.Replace("{tu}", DagUurToString(UrenT)); TotaalRegel = TotaalRegel.Replace("{td}", DagUurToString(DagenT)); // min en maxdatum if (UrenT > 0) { mindag = selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.ProjectleiderId == Projectleider.ProjectleiderId).Select(x => x.Begintijd).Min().ToString("d-M-yyy"); maxdag = selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.ProjectleiderId == Projectleider.ProjectleiderId).Select(x => x.Begintijd).Max().ToString("d-M-yyy"); } TotaalRegel = TotaalRegel.Replace("{van}", mindag); TotaalRegel = TotaalRegel.Replace("{tot}", maxdag); // Loonkosten LK = Convert.ToDouble (selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.ProjectleiderId == Projectleider.ProjectleiderId && x.ProductieVW == 1 && x.ContractVW == 1 // Moet 'Per uur' zijn anders is het onzin ).Sum(x => x.Loonkosten)); TotaalRegel = TotaalRegel.Replace("{KPi}", ET.EuroPresentatie(LK, 2)); LK = Convert.ToDouble (selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.ProjectleiderId == Projectleider.ProjectleiderId && x.ProductieVW == 2 && x.ContractVW == 1 // Moet 'Per uur' zijn anders is het onzin ).Sum(x => x.Loonkosten)); TotaalRegel = TotaalRegel.Replace("{KPe}", ET.EuroPresentatie(LK, 2)); // Alle waarden zijn gevuld; Voeg regel toe aan HTML pagina // NIEUW als er geen uren staan voor deze vakman, dan ook geen regel aan besteden dus alleen tonen als er uren gemaakt zijn if (UrenT > 0 || LK > 0) //records += ET.HtmlFormat(htmlrecord, RegelVars); { records += TotaalRegel; Rows++; } } // Nodig ivm eerste paar subregels bij kopregel op één pagina houden: // Pas Rowspan aan indien er minder subregels bij elkaar te houden zijn dan in de rowspan is aangegeven if (Rows < RowSpan) { records = ET.SetRowSpan(records, RowSpan, Rows); } // bij de 1e lus was de periode ingesteld op totaalperiode, vanaf nu pakken we de weekperiodes if (WeekIndex < WeekStart.Count()) { SelectieStart = WeekStart[WeekIndex]; SelectieEinde = WeekEinde[WeekIndex]; if (regelSamenvatting.ToLower().Contains("totaal")) { DIKKESTREEP = true; } regelSamenvatting = string.Format("Week {0}", ET.Weeknummer(SelectieStart, true)); } } while (++WeekIndex <= WeekStart.Count()); // Eco PDF eenmaken, vullen en tonen string FilledTable = htmlTabel.Replace("{tabelregels}", records); ET.MakePdf(FilledTable, LijstGegevens); }
internal void Maak_Lijst(DateTime pStartDatum, DateTime pEindDatum, List <PoortViewMandagen> selxMANDAGEN, List <allContract> Contracten, EvoTools.HeaderFooter LijstGegevens) { // Bepaal aantal bij elkaar te houden regels int RowSpan = ET.GetRowSpan(htmlTabelTotaalRegel); int Rows; // // Deel periode in x-aantal weken in // // Week van Startdatum begin op maandag List <DateTime> WeekStart = new List <DateTime>(); List <DateTime> WeekEinde = new List <DateTime>(); // Trek DayofWeek van startdatum af om de maandag van die week te bepalen DateTime Maandag = pStartDatum.AddDays((1 - ((int)pStartDatum.DayOfWeek == 0 ? 7 : (int)pStartDatum.DayOfWeek))); DateTime PeriodeStart = Maandag; do { // Voorlopig nog even geen 'ShowAll', dus WeekStart niet eerder dan startdatum if (Maandag < pStartDatum) { WeekStart.Add(pStartDatum); } else { WeekStart.Add(Maandag); } Maandag = Maandag.AddDays(7); // Voorlopig nog even geen 'ShowAll', dus WeekEinde niet later dan einddatum if (Maandag > pEindDatum) { WeekEinde.Add(pEindDatum.AddDays(1)); } else { WeekEinde.Add(Maandag); } } while (Maandag <= pEindDatum); DateTime PeriodeEinde = Maandag; // Eerst even Totaal alle vakmannen double UrenT = 0; double DagenT = 0; double DagenD = 0; double UrenD = 0; // Bereken voor elke dienstbetrekking het totaal var _AllContracten = (Contracten.Select(x => x.ContractID).ToList()).OrderBy(x => x); string TotaalRegel = htmlTabelTotaalRegel; foreach (int prod in new List <int> { 1, 2 }) { foreach (int contr in _AllContracten) { // Uren UrenD = selxMANDAGEN.Where(x => x.Begintijd >= PeriodeStart && x.Begintijd < PeriodeEinde && x.ContractVW == contr && x.ProductieVW == prod ).Sum(x => x.Uren) * 60; UrenD += selxMANDAGEN.Where(x => x.Begintijd >= PeriodeStart && x.Begintijd < PeriodeEinde && x.ContractVW == contr && x.ProductieVW == prod ).Sum(x => x.Minuten); UrenD /= 60.0; UrenT += UrenD; // Dagen DagenD = selxMANDAGEN.Where(x => x.Begintijd >= PeriodeStart && x.Begintijd < PeriodeEinde && x.ContractVW == contr && x.ProductieVW == prod ).Select(y => new { y.VakmanId, y.Begintijd.Date }).Distinct().Count(); DagenT += DagenD; // Totaal van dienstbetrekking invullen TotaalRegel = TotaalRegel.Replace("{pcu" + prod.ToString() + contr.ToString() + "}", DagUurToString(UrenD)); TotaalRegel = TotaalRegel.Replace("{pcd" + prod.ToString() + contr.ToString() + "}", DagUurToString(DagenD)); } } //Datums string mindag = string.Empty, maxdag = string.Empty; if (UrenT > 0) { mindag = selxMANDAGEN.Select(x => x.Begintijd).Min().ToString("d-M-yyy"); maxdag = selxMANDAGEN.Select(x => x.Begintijd).Max().ToString("d-M-yyy"); } TotaalRegel = TotaalRegel.Replace("{omschrijving}", "Totaal"); TotaalRegel = TotaalRegel.Replace("{tu}", DagUurToString(UrenT)); TotaalRegel = TotaalRegel.Replace("{td}", DagUurToString(DagenT)); TotaalRegel = TotaalRegel.Replace("{van}", mindag); TotaalRegel = TotaalRegel.Replace("{tot}", maxdag); // loonkosten var KostPrijs = Convert.ToDouble( selxMANDAGEN.Where(x => x.ProductieVW == 1 && x.ContractVW == 1).Sum(x => x.Loonkosten)); TotaalRegel = TotaalRegel.Replace("{KPi}", ET.EuroPresentatie(KostPrijs, 2)); KostPrijs = Convert.ToDouble( selxMANDAGEN.Where(x => x.ProductieVW == 2 && x.ContractVW == 1).Sum(x => x.Loonkosten)); TotaalRegel = TotaalRegel.Replace("{KPe}", ET.EuroPresentatie(KostPrijs, 2)); // Regel compleet. Row toevoegen aan tabelregels records += TotaalRegel; Rows = 2; // Bepaal voor elke week de totalen for (int i = 0; i < WeekStart.Count(); i++) { DateTime _StartTijd = WeekStart[i]; DateTime _EindeTijd = WeekEinde[i]; DagenD = 0; UrenD = 0; UrenT = 0; DagenT = 0; // Steeds per 3 regels van kleur wisselen TotaalRegel = htmlTabelWeekRegel.Replace("ProjectRegel", "ProjectRegelColor" + ((i % 6) / 3).ToString()); foreach (int prod in new List <int> { 1, 2 }) { foreach (int contr in _AllContracten) { UrenD = selxMANDAGEN.Where(x => x.Begintijd >= _StartTijd && x.Begintijd < _EindeTijd && x.ContractVW == contr && x.ProductieVW == prod ).Sum(x => x.Uren) * 60; UrenD += selxMANDAGEN.Where(x => x.Begintijd >= _StartTijd && x.Begintijd < _EindeTijd && x.ContractVW == contr && x.ProductieVW == prod ).Sum(x => x.Minuten); UrenD /= 60.0; UrenT += UrenD; // Dagen DagenD = selxMANDAGEN.Where(x => x.Begintijd >= _StartTijd && x.Begintijd < _EindeTijd && x.ContractVW == contr && x.ProductieVW == prod ).Select(y => new { y.VakmanId, y.Begintijd.Date }).Distinct().Count(); DagenT += DagenD; // Totaal van dienstbetrekking invullen TotaalRegel = TotaalRegel.Replace("{pcu" + prod.ToString() + contr.ToString() + "}", DagUurToString(UrenD)); TotaalRegel = TotaalRegel.Replace("{pcd" + prod.ToString() + contr.ToString() + "}", DagUurToString(DagenD)); } // Next contr } // Nect prod TotaalRegel = TotaalRegel.Replace("{omschrijving}", "Week " + ET.Weeknummer(_StartTijd, true)); TotaalRegel = TotaalRegel.Replace("{tu}", DagUurToString(UrenT)); TotaalRegel = TotaalRegel.Replace("{td}", DagUurToString(DagenT)); //Datums if (UrenT > 0) { mindag = selxMANDAGEN.Where(x => x.Begintijd >= _StartTijd && x.Begintijd < _EindeTijd).Select(x => x.Begintijd).Min().ToString("d-M-yyy"); maxdag = selxMANDAGEN.Where(x => x.Begintijd >= _StartTijd && x.Begintijd < _EindeTijd).Select(x => x.Begintijd).Max().ToString("d-M-yyy"); } else { mindag = string.Empty; maxdag = string.Empty; } TotaalRegel = TotaalRegel.Replace("{van}", mindag); TotaalRegel = TotaalRegel.Replace("{tot}", maxdag); // loonkosten KostPrijs = Convert.ToDouble ( selxMANDAGEN.Where(x => x.Begintijd >= _StartTijd && x.Begintijd < _EindeTijd && x.ProductieVW == 1 && x.ContractVW == 1) // Moet 'Per uur' zijn anders is het onzin) .Sum(x => x.Loonkosten) ); TotaalRegel = TotaalRegel.Replace("{KPi}", ET.EuroPresentatie(KostPrijs, 2)); KostPrijs = Convert.ToDouble ( selxMANDAGEN.Where(x => x.Begintijd >= _StartTijd && x.Begintijd < _EindeTijd && x.ProductieVW == 2 && x.ContractVW == 1) // Moet 'Per uur' zijn anders is het onzin) .Sum(x => x.Loonkosten) ); TotaalRegel = TotaalRegel.Replace("{KPe}", ET.EuroPresentatie(KostPrijs, 2)); // Regel compleet. Row toevoegen aan tabelregels records += TotaalRegel; Rows++; } // Nodig ivm eerste paar subregels bij kopregel op één pagina houden: // Pas Rowspan aan indien er minder subregels bij elkaar te houden zijn dan in de rowspan is aangegeven if (Rows < RowSpan) { records = ET.SetRowSpan(records, RowSpan, Rows); } // Eddy Ready Go. // We hebben nu feitelijk alle regels gevuld, laten we de HTMl pagina opmaken! // Eco PDF eenmaken, vullen en tonen string FilledTable = htmlTabel.Replace("{tabelregels}", records); ET.MakePdf(FilledTable, LijstGegevens); }
internal void Maak_Lijst(DateTime pStartDatum, DateTime pEindDatum, List<PoortViewMandagen> selxMANDAGEN, List<PoortViewProject> _Projecten, List<allContract> Contracten, List<string> _opties, DateTime UI_Startdatum, DateTime UI_Einddatum, EvoTools.HeaderFooter LijstGegevens) { // Bepaal aantal bij elkaar te houden regels int RowSpan = ET.GetRowSpan(htmlTabelTotaalRegel); int Rows; // Start en Einddata van projecten var _VanTotDatums = selxMANDAGEN.Select(x => new { x.ProjectId, Datum = x.Begintijd }).Distinct(); // // Deel periode in x-aantal weken in // // Week van Startdatum begin op maandag List<DateTime> WeekStart = new List<DateTime>(); List<DateTime> WeekEinde = new List<DateTime>(); // Trek DayofWeek van startdatum af om de maandag van die week te bepalen DateTime Maandag = pStartDatum.AddDays((1 - ((int)pStartDatum.DayOfWeek == 0 ? 7 : (int)pStartDatum.DayOfWeek))); DateTime PeriodeStart = Maandag; int StartWeekNr = new GregorianCalendar(GregorianCalendarTypes.Localized).GetWeekOfYear(PeriodeStart, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); do { // Voorlopig nog even geen 'ShowAll', dus WeekStart niet eerder dan startdatum if (Maandag < pStartDatum) WeekStart.Add(pStartDatum); else WeekStart.Add(Maandag); Maandag = Maandag.AddDays(7); // Voorlopig nog even geen 'ShowAll', dus WeekEinde niet later dan einddatum if (Maandag > pEindDatum) WeekEinde.Add(pEindDatum.AddDays(1)); else WeekEinde.Add(Maandag); } while (Maandag <= pEindDatum); DateTime PeriodeEinde = Maandag; // Okay we doen het nu helemaal f*****g anders! // Bereken per Vakman hoeveel uren hij op die dag heeft gemaakt, hoeveel uren hij op voor een project heeft gemaakt // en bepaal het dagdeel (percentage) wat dan kan worden toegekend aan dat project var VakmanUrenPerDag = selxMANDAGEN .GroupBy(a => new { Datum = a.Begintijd.Date, a.VakmanId }) .Select(a => new { a.Key.Datum, a.Key.VakmanId , Uren = a.Sum(x => x.Uren * 60 + x.Minuten) / 60.0, Projecten = a.Count() }) .OrderBy(a => a.Datum ).ThenBy(a => a.VakmanId ) .ToList(); var VakmanUrenPerDagPerProjectPerProdContr = selxMANDAGEN .GroupBy(a => new { Datum = a.Begintijd.Date, a.VakmanId, a.ProjectId, a.ProductieVW, a.ContractVW }) .Select(a => new {a.Key.ProjectId ,a.Key.Datum, a.Key.VakmanId, a.Key.ProductieVW, a.Key.ContractVW , Uren = a.Sum(x => x.Uren * 60 + x.Minuten) / 60.0 }) //.OrderBy(a => a.Name2.Datum ) .ToList(); var VakmanDagdelenPerDagPerProjectPerProdContr = (from a in VakmanUrenPerDagPerProjectPerProdContr join b in VakmanUrenPerDag on new { a.Datum, a.VakmanId } equals new { b.Datum, b.VakmanId } select new { a, UrenAlleProjecten = b.Uren, DagDeel = a.Uren / b.Uren }) .OrderBy(x => x.a.Datum) .ToList() .OrderBy(x => x.a.Datum); // Eerst even Totaal alle vakmannen tesamen //List<char> Dienstbetrekkingscode = new List<int>("1,3,U,A".Split(',').Select(n => char.Parse(n)).ToList()); double DagenT, UrenT; double DagenD = 0; double UrenD = 0; string[] RegelStrings = new string[] { "", "", "", "", "", "", "", "", "", "", "", "", "" }; double[] DienstBetrekkingT = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // **************************************************************************************************** // // Start opbouwen van de totaalregels // Per 'DO' // Bereken het totaal van de betreffende periode; // Berken per project het totaal van de betreffende periode // // We beginnen met Totallperiode van periodestart tot periodeeind // vlak voor de 'WHILE' starten we met de 1e weekperiode te selecteren, daarna alle andere weekperiodes // // **************************************************************************************************** // Startsetting zodat we de gehele periode pakken DateTime SelectieStart = PeriodeStart; DateTime SelectieEinde = PeriodeEinde; string regelSamenvatting = "Totaal"; // WeekIndex gebruiken we pas nadat de 1e lus is doorlopen int WeekIndex = 0; string mindag = "", maxdag = ""; Boolean DIKKESTREEP = false; do // Start met totaal-periode; Neem daarna alle weekperiodes { UrenT = 0; DagenT = 0; // Bereken voor elke dienstbetrekking het totaal over deze periode var _AllProducties = (new List<int> { 1, 2}); var _AllContracten = (Contracten.Select(x => x.ContractID).ToList()).OrderBy(x => x); string TotaalRegel = htmlTabelTotaalRegel; // Voeg extra dikke lijn toe na tonen van totaalgegevens (Alleen eerste keer!) if (DIKKESTREEP) { TotaalRegel = TotaalRegel.Replace("<!--LINE-->", "<tr><td colspan=\"14\" style=\"width:100%; border-bottom:1px solid black\"></td></tr>"); DIKKESTREEP = false; } foreach (int p in _AllProducties) { foreach (int c in _AllContracten) { if (p == 1 && c == 2) break; // Intern / Per Meter is niet toegestaan // Uren UrenD = (selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && (x.ContractVW == c && x.ProductieVW == p) ).Sum(x => x.Uren * 60 + x.Minuten)) / 60.0; UrenT += UrenD; DagenD = VakmanDagdelenPerDagPerProjectPerProdContr .Where(x => x.a.Datum >= SelectieStart && x.a.Datum < SelectieEinde && x.a.ContractVW == c && x.a.ProductieVW == p) .Select(x => x.DagDeel).Sum(); DagenT += DagenD; TotaalRegel = TotaalRegel.Replace("{pcu" + p.ToString() + c.ToString() + "}", DagUurToString(UrenD)); TotaalRegel = TotaalRegel.Replace("{pcd" + p.ToString() + c.ToString() + "}", DagUurToString(DagenD)); } // Next Contract } // Next Productie TotaalRegel = TotaalRegel.Replace("{omschrijving}", regelSamenvatting); TotaalRegel = TotaalRegel.Replace("{tu}", DagUurToString(UrenT)); TotaalRegel = TotaalRegel.Replace("{td}", DagUurToString(DagenT)); // loonkosten Double LK = Convert.ToDouble( selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.ProductieVW == 1 && x.ContractVW == 1 // Moet 'Per uur' zijn anders is het onzin ).Sum(x => x.Loonkosten) ); TotaalRegel = TotaalRegel.Replace("{KPi}", ET.EuroPresentatie(LK, 2)); LK = Convert.ToDouble( selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.ProductieVW == 2 && x.ContractVW == 1 // Moet 'Per uur' zijn anders is het onzin ).Sum(x => x.Loonkosten) ); TotaalRegel = TotaalRegel.Replace("{KPe}", ET.EuroPresentatie(LK, 2)); // Periode toevoegen if (UrenT > 0) { mindag = _VanTotDatums.Where(x => x.Datum >= SelectieStart && x.Datum < SelectieEinde ).Select(x => x.Datum).Min().ToShortDateString(); maxdag = _VanTotDatums.Where(x => x.Datum >= SelectieStart && x.Datum < SelectieEinde ).Select(x => x.Datum).Max().ToShortDateString(); } TotaalRegel = TotaalRegel.Replace("{van}", mindag); TotaalRegel = TotaalRegel.Replace("{tot}", maxdag); // Voeg Totaalregel toe en maak nieuwe tabelregel records += TotaalRegel; Rows = 2; // Bereken nu PER PROJECT voor elke dienstbetrekking het totaal over deze periode int regelnummer = 0; foreach (int ProjectID in selxMANDAGEN .OrderBy(x => x.project_NR) .Select(x => x.ProjectId).Distinct().ToList()) { UrenT = 0; DagenT = 0; mindag = ""; maxdag = ""; // Steeds per 3 regels van kleur wisselen TotaalRegel = htmlTabelSubRegel.Replace("ProjectRegel", "ProjectRegelColor" + ((regelnummer++ % 6) / 3).ToString()); foreach (int p in _AllProducties) { foreach (int c in _AllContracten) { if (p == 1 && c == 2) break; // Intern / Per Meter is niet toegestaan // Uren UrenD = selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.ProjectId == ProjectID && (x.ContractVW == c) && (x.ProductieVW == p) ).Sum(x => x.Uren * 60 + x.Minuten) / 60.0; UrenT += UrenD; DagenD = VakmanDagdelenPerDagPerProjectPerProdContr .Where(x => x.a.Datum >= SelectieStart && x.a.Datum < SelectieEinde && x.a.ProjectId == ProjectID && x.a.ContractVW == c && x.a.ProductieVW == p) .Select(x => x.DagDeel).Sum(); DagenT += DagenD; // Totaal van geselecteeerd Productie/Contract invullen TotaalRegel = TotaalRegel.Replace("{pcu" + p.ToString() + c.ToString() + "}", DagUurToString(UrenD)); TotaalRegel = TotaalRegel.Replace("{pcd" + p.ToString() + c.ToString() + "}", DagUurToString(DagenD)); } // Next Contract } // Next Productie // LoonKosten LK = Convert.ToDouble(selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.ProjectId == ProjectID && x.ProductieVW == 1 && x.ContractVW == 1 // Moet 'Per uur' zijn anders is het onzin ).Sum(x => x.Loonkosten)); TotaalRegel = TotaalRegel.Replace("{KPi}", ET.EuroPresentatie(LK, 2)); LK = Convert.ToDouble(selxMANDAGEN.Where(x => x.Begintijd >= SelectieStart && x.Begintijd < SelectieEinde && x.ProjectId == ProjectID && x.ProductieVW == 2 && x.ContractVW == 1 // Moet 'Per uur' zijn anders is het onzin ).Sum(x => x.Loonkosten)); TotaalRegel = TotaalRegel.Replace("{KPe}", ET.EuroPresentatie(LK, 2)); // RegelBegin en RegelTotalen toevoegen TotaalRegel = TotaalRegel.Replace("{nr}", _Projecten.Where(x => x.ProjectId == ProjectID).Select(x => x.ProjectNR).FirstOrDefault().ToString() ?? "<Onbekend project>"); TotaalRegel = TotaalRegel.Replace("{omschrijving}", _Projecten.Where(x => x.ProjectId == ProjectID).Select(x => x.Naam).FirstOrDefault() ?? "<No Name>"); TotaalRegel = TotaalRegel.Replace("{tu}", DagUurToString(UrenT)); TotaalRegel = TotaalRegel.Replace("{td}", DagUurToString(DagenT)); // Alle waarden zijn gevuld; Voeg regel toe aan HTML pagina // NIEUW als er geen uren staan voor deze vakman, dan ook geen regel aan besteden dus alleen tonen als er uren gemaakt zijn if (UrenT > 0) { // Periode toevoegen mindag = _VanTotDatums.Where(x => x.Datum >= SelectieStart && x.Datum < SelectieEinde && x.ProjectId == ProjectID ).Select(x => x.Datum).Min().ToShortDateString(); maxdag = _VanTotDatums.Where(x => x.Datum >= SelectieStart && x.Datum < SelectieEinde && x.ProjectId == ProjectID ).Select(x => x.Datum).Max().ToShortDateString(); // Steeds per 3 regels van kleur wisselen //TotaalRegel = htmlTabelSubRegel.Replace("ProjectRegel", "ProjectRegelColor" + ((regelnummer++ % 6) / 3).ToString()); //records += ET.HtmlFormat(TotaalRegel, TotalenStringxx(RegelStrings, DienstBetrekkingT)); Rows++; } TotaalRegel = TotaalRegel.Replace("{van}", mindag); TotaalRegel = TotaalRegel.Replace("{tot}", maxdag); // Alle waarden zijn gevuld; Voeg regel toe aan HTML pagina if (UrenT > 0) { records += TotaalRegel; Rows++; } } // Next Project // Nodig ivm eerste paar subregels bij kopregel op één pagina houden: // Pas Rowspan aan indien er minder subregels bij elkaar te houden zijn dan in de rowspan is aangegeven if (Rows < RowSpan) records = ET.SetRowSpan(records, RowSpan, Rows); // bij de 1e lus was de periode ingesteld op totaalperiode, vanaf nu pakken we de weekperiodes if (WeekIndex < WeekStart.Count()) { SelectieStart = WeekStart[WeekIndex]; SelectieEinde = WeekEinde[WeekIndex]; if (regelSamenvatting.ToLower().Contains("totaal")) DIKKESTREEP = true; regelSamenvatting = "Week " + ET.Weeknummer(WeekStart[WeekIndex], true); } } while (++WeekIndex <= WeekStart.Count()); // Eco PDF eenmaken, vullen en tonen string FilledTable = htmlTabel.Replace("{tabelregels}", records); ET.MakePdf(FilledTable, LijstGegevens); }
internal void Maak_Lijst(DateTime pStartDatum, DateTime pEindDatum, List <PoortViewMandagen> selxMANDAGEN, List <allArbeidsRelaty> _AllArbeidsrelaties, List <PoortViewRegistratiebevoegd> _AllProjectleiders, List <PoortViewProject> _AllProjecten, List <PoortViewBedrijf> _AllBedrijven, List <PoortViewVakman> _AllVakmannen, EvoTools.HeaderFooter LijstGegevens) { string tabellen = string.Empty; // Bepaal start-maandag // Let op: Pak de HELE periode, niet slechts de keuze in de UI (Met showall wordt de periode automatisch uitgebreid!) DateTime pAllMinDatum = selxMANDAGEN.Select(x => x.Begintijd.Date).Min(); if (pStartDatum < pAllMinDatum) { pAllMinDatum = pStartDatum; } DateTime pAllMaxDatum = selxMANDAGEN.Select(x => x.Begintijd.Date).Max(); if (pEindDatum > pAllMaxDatum) { pAllMaxDatum = pEindDatum; } // Bepaal de maandag van de startweek //DateTime Maandag = pAllMinDatum; // We willen gewoon alle weken zien, ook de weken voorafgaande aan de eerste week met echte data dus pak pStartdatum DateTime Maandag = pAllMinDatum; while (Maandag.DayOfWeek != DayOfWeek.Monday) { Maandag = Maandag.AddDays(-1); } /* * Verzamel nu per project, per week de nodige data * */ // Per Project string tabel = string.Empty; records = string.Empty; var ProjectIDs = selxMANDAGEN .OrderBy(x => x.project_NR) .Select(x => x.project_NR) .Distinct().ToList(); bool FirstPage = true; foreach (var DitProject in _AllProjecten.Where(y => ProjectIDs.Contains(y.ProjectNR))) { // Bepaal weken voor dit project Bepaal_Projectweken(DitProject.ProjectId, Maandag, selxMANDAGEN, pAllMaxDatum); // Bereken nu alvast totaal aantal detailregels voor dit project DetailregelsLeft = selxMANDAGEN.Where(x => x.ProjectId == DitProject.ProjectId) .Select(x => new { VK = x.VakmanId, Week = ET.weeknummerNEW(x.Begintijd, false) }).Distinct().ToList().Count(); // Algemene Projectgegevens (Nieuwe tabel) tabel = ProjectTabel; if (FirstPage) { tabel = tabel.Replace("TableOnNewPage", "TableOnSamePage"); FirstPage = false; } tabel = tabel.Replace("{Bestandscode}", LijstGegevens.LijstCode); string WeekS = ET.weeknummerNEW(pAllMinDatum, true); string WeekE = ET.weeknummerNEW(pAllMaxDatum, true); tabel = tabel.Replace("{Week}", WeekS + (WeekS == WeekE ? "" : " tot en met " + WeekE)); tabel = tabel.Replace("{Periode}", string.Format("{0} - {1}", pAllMinDatum.ToLongDateString(), pAllMaxDatum.ToLongDateString())); tabel = tabel.Replace("{Projectnummer}", DitProject.ProjectNR.ToString()); string __Opdrachtgever = (from og in _AllBedrijven where og.bedrijf_nr == DitProject.BedrijfVW select og.naam).FirstOrDefault() ?? "{Onbekend}"; // Opdrachtger / Aannemer (aannemer = 'Select AannwmerVW, anders gelijk aan opdrachtgever) tabel = tabel.Replace("{Opdrachtgever}", __Opdrachtgever); if (DitProject.AannemerVW == DitProject.BedrijfVW || DitProject.AannemerVW == null) { tabel = tabel.Replace("{Aannemer}", __Opdrachtgever); } else { tabel = tabel.Replace("{Aannemer}", (from og in _AllBedrijven where og.bedrijf_nr == DitProject.AannemerVW select og.naam).FirstOrDefault() ?? "{Onbekend}"); } tabel = tabel.Replace("{Projectnaam}", DitProject.Naam); tabel = tabel.Replace("{Projectlocatie}", DitProject.plaats); tabel = tabel.Replace("{Projectstraat}", DitProject.bouw_straat); var UitvoerdersIDsOpDitPorject = selxMANDAGEN.Where(x => x.project_NR == DitProject.ProjectNR) .Select(x => x.ProjectleiderId).Distinct().ToList(); var UitvoerdersOpDitPorject = selxMANDAGEN.Where(x => x.ProjectId == DitProject.ProjectNR) .Select(x => x.ProjectleiderId).Distinct().ToList(); string Uitvoerders = string.Empty; foreach (var uitv in _AllProjectleiders.Where(x => UitvoerdersIDsOpDitPorject.Contains(x.ProjectleiderId ?? -1))) { Uitvoerders += (Uitvoerders == string.Empty ? "" : " / "); Uitvoerders += uitv.Gebruikersnaam; } tabel = tabel.Replace("{Projectleider}", Uitvoerders); // ProjectTotaal hele periode (en gedetailleerd per vakman) records = string.Empty; // NIEUW voer totaalperiode-overzicht alleen uit als de periode meer dan twee weken beslaat. // Anders heeft totaaltelling zo weing nut! DateTime mindag = selxMANDAGEN.Where(x => x.ProjectId == DitProject.ProjectId).Select(x => x.Begintijd).Min(); DateTime maxdag = selxMANDAGEN.Where(x => x.ProjectId == DitProject.ProjectId).Select(x => x.Begintijd).Max(); if (ET.weeknummerNEW(mindag, true) != ET.weeknummerNEW(maxdag, true)) { records += vul_TotaalRegel(selxMANDAGEN, DitProject); // En nu uitgesplitst per vakman foreach (var DezeVakman in selxMANDAGEN.Where(x => x.ProjectId == DitProject.ProjectId) .Select(x => new { x.VakmanId, _Ketenpartner = (x.KetenpartnerVW == 1 ? _AllArbeidsrelaties.Where(z => z.ArbeidsRelatieID == x.ArbeidsrelatieVW).Select(z => z.ArbeidsRelatieNaam).FirstOrDefault() : "Extern"), _Vakman = _AllVakmannen.Where(y => y.VakmanId == x.VakmanId).FirstOrDefault() }).Distinct().ToList() .OrderBy(x => x._Vakman.Naam)) { records += Vul_DetailRegel(selxMANDAGEN, DitProject, DezeVakman._Ketenpartner, DezeVakman._Vakman); } } // ProjectTotaal per week (en detailregels uitgesplitst per Vakman) for (int i = 0; i < WeekStart.Count(); i++) { Volgnummer = 1; DateTime _StartTijd = WeekStart[i]; DateTime _EindeTijd = WeekEinde[i]; records += Vul_TotaalRegel(selxMANDAGEN, DitProject, _StartTijd, _EindeTijd); // En nu uitgesplitst per vakman foreach (var DezeVakman in selxMANDAGEN.Where(x => x.Begintijd >= _StartTijd && x.Begintijd < _EindeTijd && x.ProjectId == DitProject.ProjectId) .Select(x => new { x.VakmanId, _Ketenpartner = (x.KetenpartnerVW == 1 ? _AllArbeidsrelaties.Where(z => z.ArbeidsRelatieID == x.ArbeidsrelatieVW).Select(z => z.ArbeidsRelatieNaam).FirstOrDefault(): "Extern"), _Vakman = _AllVakmannen.Where(y => y.VakmanId == x.VakmanId).FirstOrDefault() }).Distinct().ToList() .OrderBy(x => x._Vakman.Naam)) { records += Vul_DetailRegel(selxMANDAGEN, DitProject, DezeVakman._Ketenpartner, DezeVakman._Vakman, _StartTijd, _EindeTijd); } } // Week tabel = tabel.Replace("<!-- /TABELREGELS -->", records); tabellen += tabel; } // Project // Maak PDF aan volgens NIEUWE METHODE string test = HTMLTotaal.Replace("<!-- /PROJECTTABEL -->", tabellen); ET.MakePdf(test, LijstGegevens, false, 0); //ET.MakePdf(HTMLTotaal.Replace("<!-- /TABELREGELS -->", records), LijstGegevens, false); }