public void Exporter(string directory)
        {
            // construire l'entee
            // charger les lignes
            var annexe       = GetAnnexe();
            var detailAnnexe = new SharedDetailAnnexe
            {
                Exercice                   = _exercice.Annee,
                SocieteCle                 = _societe.MatriculCle,
                SocieteCategorie           = _societe.MatriculCategorie,
                SocieteMatricule           = int.Parse(_societe.MatriculFiscal),
                SocieteNumeroEtablissement = int.Parse(_societe.MatriculEtablissement)
            };

            var str = new StringBuilder();

            str.AppendLine(AnnexeEnregistementHelper.GetEnregistrementText(annexe.Entete, detailAnnexe));

            var compteur = 0;

            foreach (var ligne in annexe.Lignes)
            {
                compteur++;
                ligne.Ordre = compteur;
                str.AppendLine(AnnexeEnregistementHelper.GetEnregistrementText(ligne, detailAnnexe));
            }

            str.Append(AnnexeEnregistementHelper.GetEnregistrementText(annexe.Pied, detailAnnexe));
            _exportRepostiory.Write(str.ToString(), string.Format(fileName, No, _exercice.Annee[2], _exercice.Annee[3]),
                                    directory);
        }
        public void Imprimer()
        {
            // charger les lignes
            var annexe       = GetAnnexe();
            var detailAnnexe = new SharedDetailAnnexe
            {
                Exercice                   = _exercice.Annee,
                SocieteCle                 = _societe.MatriculCle,
                SocieteCategorie           = _societe.MatriculCategorie,
                SocieteMatricule           = int.Parse(_societe.MatriculFiscal),
                SocieteNumeroEtablissement = int.Parse(_societe.MatriculEtablissement)
            };
            var report = new reportAnnexUn();

            report.Parameters["pRaisonSocial"].Value = _societe.RaisonSocial;
            report.Parameters["pActivite"].Value     = _societe.Activite;
            report.Parameters["pAdresse"].Value      = _societe.Adresse;
            report.Parameters["pExercice"].Value     = _exercice.Annee;
            report.DataSource = annexe.Lignes;
            report.ShowPreview();
        }
        public static string GetEnregistrementText <T>(T enregistrement, SharedDetailAnnexe sharedDetailAnnexe)
            where T : IAnnexeEnregistrement, new()
        {
            var exportDetails = GetExportDetails <T>().OrderBy(x => x.Zone.Position);

            var lignebuilder = new StringBuilder();

            foreach (var detail in exportDetails)
            {
                var zoneValue = detail is ExportDetailShared
                    ? typeof(SharedDetailAnnexe).GetProperty(detail.Propriete).GetValue(sharedDetailAnnexe)
                    : typeof(T).GetProperty(detail.Propriete).GetValue(enregistrement);

                var zone = detail.Zone;
                if (!zone.Exported)
                {
                    continue;
                }
                var zoneText = string.Empty;
                switch (zone.Type)
                {
                case ZoneType.X:
                    zoneText = zoneValue.ToString().PadRight(zone.Longueur).Substring(0, zone.Longueur);
                    break;

                case ZoneType.N:
                    zoneText =
                        ((decimal)zoneValue * (zone.Longueur == 15 ? 1000 : 100)).ToString("0")
                        .PadLeft(zone.Longueur, '0');
                    break;

                case ZoneType.D:
                    zoneText = ((DateTime)zoneValue).ToString("ddMMyyyy").PadLeft(zone.Longueur, '0');
                    break;

                case ZoneType.I:
                    zoneText = ((int)zoneValue).ToString("0").PadLeft(zone.Longueur, '0');
                    break;

                case ZoneType.E:
                    zoneText = ((int)zoneValue).ToString("0").PadLeft(zone.Longueur, '0');
                    break;

                case ZoneType.Xr:
                    zoneText = string.Empty.PadRight(zone.Longueur);
                    break;

                case ZoneType.Nr:
                    zoneText = string.Empty.PadRight(zone.Longueur, '0');
                    break;

                default:
                    throw new NotImplementedException("zone type invalide!");
                }
                lignebuilder.Append(zoneText);
            }
            if (lignebuilder.Length != 405)
            {
                throw new InvalidOperationException("Longueur de la ligne est invalide!");
            }
            return(lignebuilder.ToString());
        }