//----------------------------------------- public CResultAErreur Maj_Champs() { CResultAErreur result = CResultAErreur.True; if (Acteur == null) { return(result); } if (!m_listeDerniersActeurs.Contains(Acteur.Id)) { m_listeDerniersActeurs.Add(Acteur.Id); } Hashtable tableNiveauToParent = new Hashtable(); foreach (CControleSaisieUneActiviteActeur control in m_listeControlsUtiles) { result = control.Maj_Champs(); if (!result) { return(result); } CActiviteActeur donnee = control.Activite; } return(result); }
//------------------------------------------------------------------- public override CResultAErreur TraitementAvantSauvegarde(CContexteDonnee contexte) { CResultAErreur result = base.TraitementAvantSauvegarde(contexte); if (!result) { return(result); } DataTable table = contexte.Tables[GetNomTable()]; if (table == null) { return(result); } foreach (DataRow row in new ArrayList(table.Rows)) { if (row.RowState == DataRowState.Deleted) { CIntervention_ActiviteActeur rel = new CIntervention_ActiviteActeur(row); rel.VersionToReturn = DataRowVersion.Original; CActiviteActeur act = rel.ActiviteActeur; if (act.Row.RowState != null && rel.DureeImputee != 0) { act.Duree -= rel.DureeImputee; } if (act.Duree == 0) { act.Delete(true); } } } return(result); }
//----------------------------------------- public CResultAErreur Maj_Champs( ) { CResultAErreur result = CResultAErreur.True; if (m_typeActivite == null && (m_txtCommentaire.Text != "")) { ControleDonnees(); result.EmpileErreur(I.T("Invalid Activiy @1|30190", m_nIndex.ToString())); return(result); } if (m_typeActivite == null) { return(result); } if (m_activite != null && m_activite.ReadOnly) { return(result); } if (m_activite == null) { m_activite = new CActiviteActeur(ControleActivites.Acteur.ContexteDonnee); m_activite.CreateNewInCurrentContexte(); } m_activite.Acteur = ControleActivites.Acteur; m_activite.TypeActiviteActeur = m_typeActivite; if (m_typeActivite.SiteObligatoire) { if (m_txtSelectSite.ElementSelectionne is CSite) { m_activite.Site = (CSite)m_txtSelectSite.ElementSelectionne; } else { result.EmpileErreur(I.T("Enter a site|30191")); } } else { m_activite.Site = null; } if (m_typeActivite != null && m_typeActivite.SaisieDuree) { m_activite.Duree = m_txtDuree.ValeurHeure; } else { m_activite.Duree = null; } m_activite.Commentaires = m_txtCommentaire.Text; if (m_typeActivite != null && m_typeActivite.Formulaire != null) { m_panelFormulaire.AffecteValeursToElement(m_activite); } m_activite.Date = m_wndDate.Value; return(result); }
//--------------------------------------------------- public void InitControle(CActiviteActeur activite, int nIndex, bool bAvecEntete) { CWin32Traducteur.Translate(this); m_panelEntete.Visible = bAvecEntete; m_bAvecEntete = bAvecEntete; m_typeActivite = null; m_nIndex = nIndex; m_txtTypeActivite.TextBox.Text = ""; m_txtTypeActivite.Text = ""; m_txtCommentaire.Text = ""; m_panelDuree.Visible = false; m_txtSelectSite.Init <CSite>( "Libelle", false); FillWithActivite(activite); UpdateAspect(); m_txtTypeActivite.Arbre = Arbre; if (m_controleParent != null) { LockEdition = m_controleParent.LockEdition; } }
//----------------------------------------- private void AddActivite(CActiviteActeur activite, ref int nIndex, bool bRecalcSize) { bool bEntete = m_panelControles.Controls.Count == 0; CControleSaisieUneActiviteActeur ctrl = GetNewControle(nIndex); ctrl.Visible = true; ctrl.InitControle(activite, nIndex, bEntete); nIndex++; if (bRecalcSize) { RecalcSize(); } }
//------------------------------------------------------------------- public override CResultAErreur VerifieDonnees(CObjetDonnee objet) { CResultAErreur result = CResultAErreur.True; try { CActiviteActeur activiteActeur = (CActiviteActeur)objet; } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); } return(result); }
private void FillWithActivite(CActiviteActeur activite) { m_activite = activite; m_typeActivite = null; if (m_activite != null) { ChangeTypeActivite(activite.TypeActiviteActeur); m_txtDuree.ValeurHeure = m_activite.Duree; m_txtSelectSite.ElementSelectionne = m_activite.Site; m_wndDate.Value = m_activite.Date; m_txtCommentaire.Text = m_activite.Commentaires; } else { ChangeTypeActivite(null); } }
private CResultAErreur ImputeDureeSurActivite(CFractionIntervention fraction) { CResultAErreur result = CResultAErreur.True; if (fraction.DateDebut == null || fraction.DateFin == null) { return(result); } if (fraction.TempsDeTravail == null) { return(result); } Hashtable tableToDelete = new Hashtable(); //Stocke la liste des relations qui étaient présentes avant le travail //et les note comme étant à supprimer foreach (CIntervention_ActiviteActeur rel in fraction.RelationsActivite) { tableToDelete[rel] = true; } CTypeActiviteActeur typeActivite = fraction.Intervention.TypeIntervention.TypeActiviteActeur; bool bAvecSite = typeActivite.SiteObligatoire; if (typeActivite != null) { //Evalue les valeurs des champs custom pour l'activite CParametreRemplissageActiviteParIntervention parametreRemplissage = fraction.Intervention.TypeIntervention.ParametreRemplissageActivite; Dictionary <CChampCustom, object> valeursChamps = new Dictionary <CChampCustom, object>(); CContexteEvaluationExpression ctxEval = new CContexteEvaluationExpression(fraction); if (parametreRemplissage != null) { foreach (CRemplisssageChampActiviteActeur remplissage in parametreRemplissage.ListeRemplissage) { CChampCustom champ = new CChampCustom(fraction.ContexteDonnee); if (champ.ReadIfExists(remplissage.IdChampCustom)) { C2iExpression formule = remplissage.Formule; if (formule != null) { result = formule.Eval(ctxEval); if (result) { valeursChamps[champ] = result.Data; } } } } } foreach (CIntervention_Intervenant relIntervenant in fraction.Intervention.RelationsIntervenants) { DateTime dt = ((DateTime)fraction.DateDebut).Date; //Attention, si on est sur une fraction sur plusieurs jours, le //pb est que la durée saisie (retenue pour l'intervention) peut //ne pas être égale aux différents jours d'imputation, //on réparti donc la durée de manière homogène sur les différents //Jour en faisant un prorata de chaque jour double fDureeAImputer = (double)fraction.TempsDeTravail; double fDureeReelle = (double)fraction.DureeReelle; while (dt < (DateTime)fraction.DateFin && fDureeAImputer > 0) { //Cherche pour l'intervention ses activités du bon type CFiltreData filtre = new CFiltreDataAvance(CActiviteActeur.c_nomTable, CTypeActiviteActeur.c_champId + "=@1 and " + CActiviteActeur.c_champDate + ">=@2 and " + CActiviteActeur.c_champDate + "<@3 and " + "Has(" + CIntervention_ActiviteActeur.c_nomTable + "." + CIntervention_ActiviteActeur.c_champId + ") and " + CActeur.c_champId + "=@4", typeActivite.Id, dt, dt.AddDays(1), relIntervenant.Intervenant.Id); if (bAvecSite) { filtre = CFiltreData.GetAndFiltre(filtre, new CFiltreData(CSite.c_champId + "=@1", fraction.Intervention.Site.Id)); } CListeObjetsDonnees listeActivites = new CListeObjetsDonnees(fraction.ContexteDonnee, typeof(CActiviteActeur)); listeActivites.Filtre = filtre; listeActivites.ReadDependances("RelationsInterventions"); CActiviteActeur activiteRetenue = null; CIntervention_ActiviteActeur relRetenue = null; foreach (CActiviteActeur activite in listeActivites) { bool bPrendre = true; foreach (KeyValuePair <CChampCustom, object> chpValeur in valeursChamps) { object valDeAct = activite.GetValeurChamp(chpValeur.Key.Id); if (valDeAct == null && chpValeur.Value != null) { bPrendre = false; break; } else if (chpValeur.Value == null && valDeAct != null) { bPrendre = false; break; } else if (chpValeur.Value != null && !chpValeur.Value.Equals(valDeAct)) { bPrendre = false; break; } } if (bPrendre) { activiteRetenue = activite; relRetenue = null; foreach (CIntervention_ActiviteActeur relInter in activiteRetenue.RelationsInterventions) { //Si l'activité est directement liée à cette fraction, prend celle ci de préférence if (relInter.FractionIntervention.Id == fraction.Id) { relRetenue = relInter; break; } } } } if (activiteRetenue == null) { //Création de l'activite activiteRetenue = new CActiviteActeur(fraction.ContexteDonnee); activiteRetenue.CreateNewInCurrentContexte(); activiteRetenue.TypeActiviteActeur = typeActivite; activiteRetenue.Acteur = relIntervenant.Intervenant; activiteRetenue.Date = dt; activiteRetenue.Duree = 0; if (bAvecSite) { activiteRetenue.Site = fraction.Intervention.Site; } foreach (KeyValuePair <CChampCustom, object> valChamp in valeursChamps) { activiteRetenue.SetValeurChamp(valChamp.Key.Id, valChamp.Value); } } if (relRetenue == null) { //Création de la relation à l'interventation relRetenue = new CIntervention_ActiviteActeur(fraction.ContexteDonnee); relRetenue.ActiviteActeur = activiteRetenue; relRetenue.DureeImputee = 0; relRetenue.FractionIntervention = fraction; } //Note que cette relation ne doit pas être supprimée tableToDelete[relRetenue] = false; double fDureeForThis = 0; if (dt == fraction.DateFin.Value.Date) { fDureeForThis = fDureeAImputer; //On affecte le reste } else { if (dt == fraction.DateDebut.Value.Date) { //On est sur le premier jour, //Utilise comme référence le temps qui sépare la date //de début de minuit TimeSpan sp = dt.AddDays(1) - fraction.DateDebut.Value; double fRatio = sp.TotalHours / fDureeReelle; fDureeForThis = fRatio * fraction.TempsDeTravail.Value; } else { fDureeForThis = 24.0 / fDureeReelle * fraction.TempsDeTravail.Value; } //Arrondi la durée calculé à la minute fDureeForThis = (int)fDureeForThis + (int)((fDureeForThis - (int)fDureeForThis) * 60.0 + .5) / 60.0; } fDureeAImputer -= fDureeForThis; if (relRetenue.DureeImputee != fDureeForThis) { //Impute la durée de la fraction sur l'activité relRetenue.ActiviteActeur.Duree -= relRetenue.DureeImputee; relRetenue.DureeImputee = (double)fDureeForThis; relRetenue.ActiviteActeur.Duree += fDureeForThis; } dt = dt.AddDays(1); } } } foreach (DictionaryEntry entry in tableToDelete) { if ((bool)entry.Value) { //Supprime la relation CIntervention_ActiviteActeur relToDelete = (CIntervention_ActiviteActeur)entry.Key; if (relToDelete.Row.RowState != DataRowState.Deleted) { CActiviteActeur activiteAncienne = relToDelete.ActiviteActeur; //SC 10/3/2014 : La désimputation du temps de l'activité se fait dans CIntervention_activiteActeurServeur.TraitementAvantSauvegardee //activiteAncienne.Duree -= relToDelete.DureeImputee; result = relToDelete.Delete(true); /*if ( result && activiteAncienne.Duree == 0 ) * result = activiteAncienne.Delete(); * if ( !result ) * return result;*/ } } } return(result); }
///------------------------------------------------------------------------ public override CResultAErreur TraitementAvantSauvegarde(CContexteDonnee contexte) { CResultAErreur result = base.TraitementAvantSauvegarde(contexte); if (!result) { return(result); } DataTable table = contexte.Tables[GetNomTable()]; if (table == null) { return(result); } ArrayList lstRows = new ArrayList(table.Rows); Dictionary <CActiviteActeurResume, bool> listeARecalculer = new Dictionary <CActiviteActeurResume, bool>(); foreach (DataRow row in lstRows) { if (row.RowState != DataRowState.Unchanged) { CActiviteActeur activite = new CActiviteActeur(row); CActiviteActeurResume resume = null; if (row.RowState == DataRowState.Deleted) { DataRowVersion saveVersion = activite.VersionToReturn; activite.VersionToReturn = DataRowVersion.Original; resume = activite.ResumeActivite; if (resume != null && resume.IsValide()) { listeARecalculer[resume] = true; } activite.VersionToReturn = saveVersion; } else { resume = activite.ResumeActivite; if (resume != null) { listeARecalculer[resume] = true; if (resume.Date.Date != activite.Date.Date) { resume = null; } } if (resume == null) { //Cherche une activite pour cet acteur et ce jour resume = new CActiviteActeurResume(contexte); if (!resume.ReadIfExists(new CFiltreData( CActiviteActeurResume.c_champDate + ">=@1 and " + CActiviteActeurResume.c_champDate + "<@2 and " + CActeur.c_champId + "=@3", activite.Date.Date, activite.Date.Date.AddDays(1), activite.Acteur.Id))) { resume = new CActiviteActeurResume(contexte); resume.CreateNewInCurrentContexte(); resume.Acteur = activite.Acteur; resume.Date = activite.Date.Date; } activite.SetResumeAssocie(resume); listeARecalculer[resume] = true; } } } } // Recalcul le cumul des heures des Activités résumés foreach (CActiviteActeurResume resume in listeARecalculer.Keys) { resume.Recalc(); } return(result); }