//-------------------------------------------- private TreeNode FillNodesParent(IObjetHierarchiqueACodeHierarchique element) { if (element.ObjetParent == null) { return(null); } else { TreeNode node = new TreeNode(element.ObjetParent.Libelle); node.Tag = element.ObjetParent; TreeNode nodeParent = FillNodesParent(element.ObjetParent); if (nodeParent != null) { nodeParent.Nodes.Add(node); } else { m_arbre.Nodes.Add(node); } if (node.Parent != null) { node.Parent.Expand(); } m_arbre.SelectedNode = node; return(node); } }
private string GetLibelleComplet(IObjetHierarchiqueACodeHierarchique objet) { if (objet == null) { return(""); } return(GetLibelleComplet(objet.ObjetParent) + "/" + objet.Libelle); }
//------------------------------------------------------------------- /// <summary> /// Retourne vrai si l'objet est parent de l'objet passé en paramètres /// </summary> /// <param name="objet"></param> /// <returns></returns> public bool IsParentOf(IObjetHierarchiqueACodeHierarchique objet) { if (objet == null) { return(false); } return(objet.IsChildOf(this)); }
private void m_btnUp_Click(object sender, EventArgs e) { if (m_feuille != null && m_feuille.ObjetParent != null) { IObjetHierarchiqueACodeHierarchique eltParent = m_feuille.ObjetParent; AfficheElement(eltParent); } }
private TreeNode AddObjet(IObjetHierarchiqueACodeHierarchique objet, Hashtable tableObjetToNode, bool bExpandable, int nNiveauToExpand) { TreeNode leNode = (TreeNode)tableObjetToNode[objet]; if (leNode != null) { return(leNode); } TreeNode nodeParent = null; if (objet.ObjetParent != null) { nodeParent = AddObjet(objet.ObjetParent, tableObjetToNode, false, nNiveauToExpand); } leNode = new TreeNode(objet.Libelle); if (m_tableObjetToClavier[objet] != null) { leNode.Text = ((int)m_tableObjetToClavier[objet]).ToString() + " - " + objet.Libelle; } leNode.Tag = objet; if (nodeParent == null) { m_arbre.Nodes.Add(leNode); } else { if (nodeParent.Nodes.Count == 1 && nodeParent.Nodes[0].Tag == null) { nodeParent.Nodes.Clear(); //C'était un node à completer, on va le completer dans l'appelant } nodeParent.Nodes.Add(leNode); if (!nodeParent.IsExpanded) { nodeParent.Expand(); } } if (bExpandable && objet.ObjetsFils.Count > 0) { leNode.BackColor = Color.LightGreen; if (objet.Niveau == nNiveauToExpand) { FillChilds(leNode); leNode.Expand(); } else { TreeNode nodeTmp = new TreeNode(""); nodeTmp.Tag = null; leNode.Nodes.Add(nodeTmp); } } tableObjetToNode[objet] = leNode; return(leNode); }
//------------------------------------------------------------------- public void RecalculeCodeComplet() { string strCode = CodeSystemePartiel; IObjetHierarchiqueACodeHierarchique objetParent = ObjetParent; while (objetParent != null) { strCode = objetParent.CodeSystemePartiel + strCode; objetParent = objetParent.ObjetParent; } Row[ChampCodeSystemeComplet] = strCode; }
//------------------------------------------------------------------- /// <summary> /// Retourne vrai si l'objet est fils (à n'importe quel niveau) /// de l'objet passé en paramètre /// </summary> /// <param name="objet">Père potientiel</param> /// <returns></returns> public bool IsChildOf(IObjetHierarchiqueACodeHierarchique objet) { if (objet == null) { return(false); } if (objet.Equals(this)) { return(true); } if (ObjetParent != null) { return(ObjetParent.IsChildOf(objet)); } return(false); }
private void AfficheElement(IObjetHierarchiqueACodeHierarchique objet) { //Type typeForm = CFormFinder.GetTypeFormToEdit(objet.GetType()); //if (typeForm == null || !typeForm.IsSubclassOf(typeof(CFormEditionStandard))) // return; //CFormEditionStandard form = (CFormEditionStandard)Activator.CreateInstance(typeForm, new object[] { objet }); //CTimosApp.Navigateur.AffichePage(form); CReferenceTypeForm refTypeForm = CFormFinder.GetRefFormToEdit(objet.GetType()); if (refTypeForm != null) { CFormEditionStandard form = refTypeForm.GetForm((CObjetDonneeAIdNumeriqueAuto)objet) as CFormEditionStandard; if (form != null) { CSc2iWin32DataNavigation.Navigateur.AffichePage(form); } } }
//------------------------------------------------------------------- private static bool HasChange(IObjetHierarchiqueACodeHierarchique objet, string strColonne) { DataRow row = objet.Row; if (row.RowState == DataRowState.Deleted) { return(false); } if (row.RowState == DataRowState.Modified) { object val = row[strColonne, DataRowVersion.Original]; object valNew = row[strColonne]; return(!valNew.Equals(val)); } if (row.RowState == DataRowState.Added) { return(true); } return(false); }
private TreeNode AddObjetToSelection(IObjetHierarchiqueACodeHierarchique objet) { if (objet == null) { return(null); } TreeNode nodeParent = AddObjetToSelection(objet.ObjetParent); TreeNode node = new TreeNode(objet.Libelle); node.Tag = objet; if (nodeParent != null) { nodeParent.Nodes.Add(node); nodeParent.Expand(); } else { m_arbreViewSelection.Nodes.Add(node); } return(node); }
public bool IsChildOf(IObjetHierarchiqueACodeHierarchique objet) { throw new NotImplementedException(); }
//------------------------------------------------------------------- private static void AlloueCode(IObjetHierarchiqueACodeHierarchique objet, ref int nLastCodeAlloue) { if (nLastCodeAlloue == 0 && m_dicLastCodeForType.ContainsKey(objet.GetType())) { nLastCodeAlloue = m_dicLastCodeForType[objet.GetType()]; } string strCle = ""; if (nLastCodeAlloue > 0 && objet.ObjetParent == null) { //Teste la valeur suivante int nTmp = nLastCodeAlloue + 1; strCle = GetCle(nTmp, objet.NbCarsParNiveau); CListeObjetsDonnees lstExt = new CListeObjetsDonnees(objet.ContexteDonnee, objet.GetType(), new CFiltreData(objet.ChampIdParent + " is null and " + objet.ChampCodeSystemePartiel + "=@1", strCle)); if (lstExt.CountNoLoad == 0) { nLastCodeAlloue = nTmp; objet.ChangeCodePartiel(strCle); m_dicLastCodeForType[objet.GetType()] = nLastCodeAlloue; return; } } CFiltreData filtre = null; if (objet.ObjetParent != null) { filtre = new CFiltreData(objet.ChampIdParent + "=@1", objet.ObjetParent.Id); } else { filtre = new CFiltreData(objet.ChampIdParent + " is null and " + objet.ChampCodeSystemePartiel + ">@1", GetCle(nLastCodeAlloue, objet.NbCarsParNiveau)); } CListeObjetsDonnees listeSoeurs = new CListeObjetsDonnees(objet.ContexteDonnee, objet.GetType(), filtre); listeSoeurs.PreserveChanges = true; listeSoeurs.AssureLectureFaite(); listeSoeurs.InterditLectureInDB = true; Hashtable tableCodesUtilises = new Hashtable(); foreach (IObjetHierarchiqueACodeHierarchique obj in listeSoeurs) { tableCodesUtilises[obj.CodeSystemePartiel] = true; } //Cherche le prochain numéro libre int nCpt = nLastCodeAlloue; strCle = ""; do { nCpt++; strCle = GetCle(nCpt, objet.NbCarsParNiveau); /*listeSoeurs.Filtre = new CFiltreData(objet.ChampCodeSystemePartiel + "=@1", * strCle);*/ }while (tableCodesUtilises.ContainsKey(strCle)); nLastCodeAlloue = nCpt; objet.ChangeCodePartiel(strCle); m_dicLastCodeForType[objet.GetType()] = nLastCodeAlloue; }
//------------------------------------------------------------------- public static CResultAErreur TraitementAvantSauvegarde(CContexteDonnee contexte, string strNomTable) { lock (typeof(CObjetHierarchiqueServeur))//Empeche que plusieurs thread entrent en même temps { CResultAErreur result = CResultAErreur.True; if (!result) { return(result); } DataTable table = contexte.Tables[strNomTable]; ArrayList lstRows = new ArrayList(table.Rows); IObjetHierarchiqueACodeHierarchique objet = (IObjetHierarchiqueACodeHierarchique)Activator.CreateInstance(CContexteDonnee.GetTypeForTable(strNomTable), new object[] { contexte }); string strInfosDebug = ""; /*/*** START DEBUG : ajout d'une trace pour analyser le bug chez OOREDOO * strInfosDebug = "DEBUG_TIMOS" + Environment.NewLine; * strInfosDebug += "Nom de la table : " + strNomTable + Environment.NewLine; * strInfosDebug += "Contenu des rows : " + Environment.NewLine; * foreach (DataColumn col in table.Columns) * { * strInfosDebug += col.ColumnName + ";"; * } * strInfosDebug += Environment.NewLine; * * foreach (DataRow row in lstRows) * { * foreach (var item in row.ItemArray) * { * strInfosDebug += item.ToString() + ";"; * } * strInfosDebug += Environment.NewLine; * } * C2iEventLog.WriteInfo(strInfosDebug); * /*** END DEBUG ***/ try { //C2iEventLog.WriteInfo("DEBUG_TIMOS - TraitementAvantSauvegarde() objet hiérarchique - before Sort"); lstRows.Sort(new CRowSorterSurParent(objet.ChampIdParent)); //C2iEventLog.WriteInfo("DEBUG_TIMOS - TraitementAvantSauvegarde() objet hiérarchique - after Sort"); } catch (Exception ex) { //*** START DEBUG 02/11/2020 : ajout d'une trace pour analyser le bug chez OOREDOO // Cause problème de tri sur table objets hiérarchiques sur champ idParent strInfosDebug = "DEBUG_TIMOS" + Environment.NewLine; strInfosDebug += "ERROR MESSAGE : " + ex.Message + Environment.NewLine; C2iEventLog.WriteErreur(strInfosDebug); /*** END DEBUG ***/ } object lastParent = DBNull.Value; int nLastCode = 0; foreach (DataRow row in lstRows) { //Allocation du code famille objet = (IObjetHierarchiqueACodeHierarchique)Activator.CreateInstance(CContexteDonnee.GetTypeForTable(strNomTable), new object[] { row }); if (objet.Row.RowState != DataRowState.Deleted && (objet.CodeSystemePartiel == objet.CodePartielDefaut || HasChange(objet, objet.ChampIdParent))) { if (!objet.Row[objet.ChampIdParent].Equals(lastParent)) { nLastCode = 0; lastParent = objet.Row[objet.ChampIdParent]; } AlloueCode(objet, ref nLastCode); } } return(result); } }