public static int EnterOrteWithProjekte (SelectionCard ActuallCard, DataTable ProjekteForThisOrt, String PageNumberParameter) { try { int NumberOfProcessed = 0; if (ProjekteForThisOrt.Rows.Count > 0) { foreach (DataRow PlakateCounterProjektRow in ProjekteForThisOrt.Rows) { DataRow ProjektRow = Basics.Instance.WordUpWCFAccess.GetCommonDataSet ("Select * from ProjektUebersicht where ID = '" + PlakateCounterProjektRow ["ProjektID"].ToString () + "'") .Tables ["ProjektUebersicht"].Rows [0]; SelectionSlot Entry = new SelectionSlot (PageNumberParameter); Entry.ArbeitsGruppenNameID = ActuallCard.ArbeitsGruppenNameID; Entry.Parent = ActuallCard; Entry.ProjektRow = ProjektRow; ActuallCard.Slots.Add (Entry); PlakateCounterProjektRow.Delete (); NumberOfProcessed++; if (ActuallCard.FreeSlots == 0) return NumberOfProcessed; } } else { throw new Exception ("ProjekteForThisOrt.Rows.Count <= 0"); SelectionSlot Entry = new SelectionSlot (PageNumberParameter); Entry.ArbeitsGruppenNameID = ActuallCard.ArbeitsGruppenNameID; Entry.Parent = ActuallCard; //Entry.ProjektRow = null; ActuallCard.Slots.Add (Entry); NumberOfProcessed++; if (ActuallCard.FreeSlots == 0) return NumberOfProcessed; } return NumberOfProcessed; } finally { ProjekteForThisOrt.AcceptChanges (); } }
public List<SelectionCard> CreateCardList(List<Guid> SelectionZustendigKeit, String IncludeOrExclude, Basics.DataSelection RequestedPhase = Basics.DataSelection.Error) { if (RequestedPhase == Basics.DataSelection.Error) RequestedPhase = WordUpBasics.WordUpPhase; String SelectionPart = GetPhasenClause(RequestedPhase); if (SelectionZustendigKeit != null) { if (IncludeOrExclude == "CreateOnly") { SelectionPart = " and (ZustaendigID = '" + String.Join("' or ZustaendigID = '", SelectionZustendigKeit) + "') "; } else { SelectionPart = " and not (ZustaendigID = '" + String.Join("' or ZustaendigID = '", SelectionZustendigKeit) + "') "; } } DataTable OrteMitProjekten = null; if (RequestedPhase == Basics.DataSelection.Ideen) { OrteMitProjekten = WordUpBasics.WordUpWCFAccess.GetCommonDataSet ("SELECT 'Alle' as ArbeitsGruppenNameID, OrtsTeil, OrteBezeichnung as OrtsNameID, OrteID, COUNT(OrteID) AS NumberOfProjekte " + "FROM FullWSPlakate where WordUpRootID = '" + WordUpBasics.WordUpID + "' " + SelectionPart + " GROUP BY OrtsTeil, OrteBezeichnung, OrteID" + " ORDER BY OrtsTeil, OrteBezeichnung, OrteID, NumberOfProjekte DESC ") .Tables["FullWSPlakate"]; } else { OrteMitProjekten = WordUpBasics.WordUpWCFAccess.GetCommonDataSet ("SELECT ArbeitsGruppenNameID, OrtsTeil, OrtsNameID, OrteID, COUNT(OrteID) AS NumberOfProjekte " + "from ProjektUebersicht WHERE WordUpRootID = '" + WordUpBasics.WordUpID + "' " + SelectionPart + " GROUP BY ArbeitsGruppenNameID, OrtsTeil, OrtsNameID, OrteID" + " ORDER BY ArbeitsGruppenNameID, OrtsTeil, OrtsNameID, OrteID, NumberOfProjekte DESC ") .Tables["ProjektUebersicht"]; } String OldOrtsTeil = "Missing"; List<SelectionCard> CardList = new List<SelectionCard>(); SelectionCard ActuallCard = null; int PageNumber = 0; //#if DEBUG // int RunningCounter = 0; //#endif foreach (DataRow ProjektOrt in OrteMitProjekten.Rows) { //TODO //#if DEBUG // if (((Guid )ProjektOrt ["OrteID"]) != Guid.Parse ("2504fb93-c061-4f5c-b0a7-87253c391972")) // continue; //#endif String OrtsTeil = ProjektOrt["OrtsTeil"].ToString(); if (OrtsTeil != OldOrtsTeil) { OldOrtsTeil = OrtsTeil; ActuallCard = new SelectionCard(++PageNumber); ActuallCard.OrtsTeil = OrtsTeil; ActuallCard.ArbeitsGruppenNameID = ProjektOrt["ArbeitsGruppenNameID"].ToString(); CardList.Add(ActuallCard); } DataTable FullWSPlakateAnDiesemOrt = WordUpBasics.WordUpWCFAccess.GetCommonDataSet ("SELECT ProjektID, ProjektBeschreibung, Count (ID) as NumberOfRequests " + "FROM FullWSPlakate where OrteID = '" + ProjektOrt["OrteID"].ToString() + "' and WordUpRootID = '" + WordUpBasics.WordUpID + "' " + SelectionPart.Replace(" and ID in", " and ProjektID in") + " Group By ProjektID, ProjektBeschreibung " + "order by ProjektID, ProjektBeschreibung, NumberOfRequests desc") .Tables["FullWSPlakate"]; // int NumberOfProjecteAnDiesemOrt = Convert.ToInt32(ProjektOrt["NumberOfProjekte"]); int NumberOfPlakateAnDiesemOrt = FullWSPlakateAnDiesemOrt.Rows.Count; if (NumberOfPlakateAnDiesemOrt == 0) { MessageBox.Show("NumberOfPlakateAnDiesemOrt == 0 bei OrteID =\r\n" + ProjektOrt["OrteID"].ToString()); continue; } if (RequestedPhase != Basics.DataSelection.Ideen) { if ((NumberOfProjecteAnDiesemOrt != NumberOfPlakateAnDiesemOrt) || (NumberOfPlakateAnDiesemOrt == 0)) { DataTable ProjektenAnDiesemOrt = WordUpBasics.WordUpWCFAccess.GetCommonDataSet ("SELECT ID, OrteID from ProjektUebersicht WHERE WordUpRootID = '" + WordUpBasics.WordUpID + "' and OrteID = '" + ProjektOrt["OrteID"].ToString() + "' " + SelectionPart) .Tables["ProjektUebersicht"]; StringBuilder ErrornousProjektIDs = new StringBuilder(); foreach (DataRow PlakateAnDiesemOrtRow in FullWSPlakateAnDiesemOrt.Rows) { String ProjektIDAusPlakaten = PlakateAnDiesemOrtRow["ProjektID"].ToString(); DataRow[] FoundProjekteRows = ProjektenAnDiesemOrt.Select("ID = '" + ProjektIDAusPlakaten + "'"); if (FoundProjekteRows.Length == 1) continue; ErrornousProjektIDs.AppendLine(ProjektIDAusPlakaten + " FoundProjekteRows.Length = " + Convert.ToString(FoundProjekteRows.Length)); } StringBuilder MissingPlakatProjektIDs = new StringBuilder(); foreach (DataRow ProjekteAnDiesemOrtRow in ProjektenAnDiesemOrt.Rows) { String ProjektIDAusProjekten = ProjekteAnDiesemOrtRow["ID"].ToString(); DataRow[] FoundPlakateRows = FullWSPlakateAnDiesemOrt.Select("ProjektID = '" + ProjektIDAusProjekten + "'"); if (FoundPlakateRows.Length > 0) continue; MissingPlakatProjektIDs.AppendLine(ProjektIDAusProjekten + " FoundPlakateRows.Length = " + Convert.ToString(FoundPlakateRows.Length)); } WMB.Basics.ReportErrorToEventViewer("NumberOfProjecteAnDiesemOrt = " + Convert.ToString(NumberOfProjecteAnDiesemOrt) + " ungleich\r\nNumberOfPlakateAnDiesemOrt = " + Convert.ToString(NumberOfPlakateAnDiesemOrt) + "\r\nSystemfehler bei OrteID = \"" + ProjektOrt["OrteID"].ToString() + "\"\r\nund SelectionPart = \"" + SelectionPart + "\" mit folgenden fehlenden ProjektIDs\r\n" + ErrornousProjektIDs.ToString() + "\r\nund folgenden fehlenden Plakaten:\r\n" + MissingPlakatProjektIDs.ToString()); MessageBox.Show("NumberOfProjecteAnDiesemOrt = " + Convert.ToString(NumberOfProjecteAnDiesemOrt) + " ungleich\r\nNumberOfPlakateAnDiesemOrt = " + Convert.ToString(NumberOfPlakateAnDiesemOrt) + "\r\nSystemfehler bei OrteID = \"" + ProjektOrt["OrteID"].ToString() + "\"\r\nund SelectionPart = \"" + SelectionPart + "\" mit folgenden fehlenden ProjektIDs\r\n" + ErrornousProjektIDs.ToString() + "\r\nund folgenden fehlenden Plakaten:\r\n" + MissingPlakatProjektIDs.ToString()); } } bool IsMultiPageProjekt = (NumberOfProjecteAnDiesemOrt > 4); while (NumberOfProjecteAnDiesemOrt > 0) { if (ActuallCard.FreeSlots == -1) { int NumberOfProcessedEntries = 0; if (FullWSPlakateAnDiesemOrt.Rows.Count == 0) { MessageBox.Show("ActuallCard.FreeSlots == -1\r\n" + "NumberOfPlakateAnDiesemOrt == 0 bei OrteID =\r\n" + ProjektOrt["OrteID"].ToString()); } NumberOfProcessedEntries = SelectionCard.EnterOrteWithProjekte (ActuallCard, FullWSPlakateAnDiesemOrt, ActuallCard.PageNumberString); if (NumberOfProcessedEntries > 0) { NumberOfProjecteAnDiesemOrt -= NumberOfProcessedEntries; continue; } else { throw new Exception("A - NumberOfProcessedEntries == 0"); } } if (ActuallCard.FreeSlots >= NumberOfProjecteAnDiesemOrt) { int NumberOfProcessedEntries = 0; if (FullWSPlakateAnDiesemOrt.Rows.Count == 0) { MessageBox.Show("ActuallCard.FreeSlots >= NumberOfProjecteAnDiesemOrt\r\n" + "NumberOfPlakateAnDiesemOrt == 0 bei OrteID =\r\n" + ProjektOrt["OrteID"].ToString()); } NumberOfProcessedEntries = SelectionCard.EnterOrteWithProjekte (ActuallCard, FullWSPlakateAnDiesemOrt, ActuallCard.PageNumberString); if (NumberOfProcessedEntries > 0) { NumberOfProjecteAnDiesemOrt -= NumberOfProcessedEntries; continue; } else { throw new Exception("B - NumberOfProcessedEntries == 0"); } } ActuallCard = new SelectionCard(++PageNumber); ActuallCard.ArbeitsGruppenNameID = ProjektOrt["ArbeitsGruppenNameID"].ToString(); ActuallCard.OrtsTeil = OrtsTeil; CardList.Add(ActuallCard); } if ((IsMultiPageProjekt == true) && (ActuallCard.FreeSlots > 0)) { ActuallCard = new SelectionCard(++PageNumber); ActuallCard.ArbeitsGruppenNameID = ProjektOrt["ArbeitsGruppenNameID"].ToString(); ActuallCard.OrtsTeil = OrtsTeil; CardList.Add(ActuallCard); } } return CardList; }