Esempio n. 1
0
        /// <summary>
        /// Sauvegarde d'un bean.
        /// </summary>
        /// <param name="bean">Bean à sauvegarder.</param>
        /// <param name="columnSelector">Column Selector.</param>
        /// <returns>Clé primaire de l'objet.</returns>
        public override object Save(T bean, ColumnSelector columnSelector)
        {
            BeanDefinition definition = BeanDescriptor.GetDefinition(typeof(T));
            ICollection <BeanPropertyDescriptor> propList = definition.Properties.Where(x => !x.PropertyType.Name.Equals(typeof(ChangeAction).Name) &&
                                                                                        x.MemberName != null).ToList();
            T beanToSave = new T();

            /* Mise à jour du bean : on ne sauvegarde que les labels en anglais ou les champs hors chaînes de caractères */
            string defaultLanguage = _resourceLoader.LoadLangueCodeDefaut();
            string lanCode         = _resourceLoader.LoadCurrentLangueCode();

            if (definition.PrimaryKey.GetValue(bean) != null && !lanCode.Equals(defaultLanguage) && definition.IsTranslatable)
            {
                T beanOld = ReferenceManager.Instance.GetReferenceObjectByPrimaryKey <T>(definition.PrimaryKey.GetValue(bean));
                foreach (BeanPropertyDescriptor property in propList)
                {
                    if (property.IsTranslatable)
                    {
                        /* la propriété est traduisible : on garde la valeur courante sur la table du bean
                         * et sauvegardera la valeur dans la table Traductionreference. */
                        property.SetValue(beanToSave, property.GetValue(beanOld));
                    }
                    else
                    {
                        /* La propriété est non traduisible : on sauvegarde la valeur normalement sur la table du bean. */
                        property.SetValue(beanToSave, property.GetValue(bean));
                    }
                }
            }
            else
            {
                beanToSave = bean;
            }

            object o = base.Save(beanToSave, columnSelector);

            definition.PrimaryKey.SetValue(bean, o);

            _resourceWriter.SaveTraductionReference(typeof(T), bean, lanCode);

            return(o);
        }